DRM database snapshot
.json
Back to index
Snapshot
- Driver:
i915
(Intel Graphics) version 1.6.0 (20180514) on Linux 4.18.0-16-generic
- Device:
PCI 8086:3185 Intel Corporation GeminiLake [UHD Graphics 600]
-
Connectors
- Connector 0
- Object ID: 101
- Type: HDMI-A
- Encoders:
{100}
- Properties
- "Broadcast RGB": enum
{"Automatic", "Full", "Limited 16:235"}
= Automatic
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "Content Protection": enum
{"Undesired", "Desired", "Enabled"}
= Undesired
- "DPMS": enum
{"On", "Standby", "Suspend", "Off"}
= Off
- "EDID"
(immutable): blob
= <nil>
- "aspect ratio": enum
{"Automatic", "4:3", "16:9"}
= Automatic
- "audio": enum
{"force-dvi", "off", "auto", "on"}
= auto
- "link-status": enum
{"Good", "Bad"}
= Good
- "non-desktop"
(immutable): range
[0, 1]
= 0
- Connector 1
- Object ID: 107
- Type: HDMI-A
- Encoders:
{106}
- Properties
- "Broadcast RGB": enum
{"Automatic", "Full", "Limited 16:235"}
= Automatic
- "CRTC_ID"
(atomic): object
CRTC
= 51
- "Content Protection": enum
{"Undesired", "Desired", "Enabled"}
= Undesired
- "DPMS": enum
{"On", "Standby", "Suspend", "Off"}
= On
- "EDID"
(immutable): blob
= <nil>
- "aspect ratio": enum
{"Automatic", "4:3", "16:9"}
= Automatic
- "audio": enum
{"force-dvi", "off", "auto", "on"}
= auto
- "link-status": enum
{"Good", "Bad"}
= Good
- "non-desktop"
(immutable): range
[0, 1]
= 0
-
Encoders
- Encoder 0
- Object ID: 100
- Type: TMDS
- CRTCs:
{0, 1, 2}
- Clones:
{0}
- Encoder 1
- Object ID: 106
- Type: TMDS
- CRTCs:
{0, 1, 2}
- Clones:
{1}
-
CRTCs
- CRTC 0
- Object ID: 51
- Gamma size: 0
- Properties
- CRTC 1
- Object ID: 75
- Gamma size: 0
- Properties
- CRTC 2
- Object ID: 99
- Gamma size: 0
- Properties
-
Planes
- Plane 0
- Object ID: 28
- CRTCs:
{0}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 1080
- "CRTC_ID"
(atomic): object
CRTC
= 51
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 1920
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 141
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 1080
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 1920
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Primary
- Plane 1
- Object ID: 33
- CRTCs:
{0}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 2
- Object ID: 38
- CRTCs:
{0}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 3
- Object ID: 43
- CRTCs:
{0}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 4
- Object ID: 48
- CRTCs:
{0}
- Formats:
- Properties
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 256
- "CRTC_ID"
(atomic): object
CRTC
= 51
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 256
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 1724
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 968
- "FB_ID"
(atomic): object
FB
= 152
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 256
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 256
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-180"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Cursor
- Plane 5
- Object ID: 52
- CRTCs:
{1}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Primary
- Plane 6
- Object ID: 57
- CRTCs:
{1}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 7
- Object ID: 62
- CRTCs:
{1}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 8
- Object ID: 67
- CRTCs:
{1}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 9
- Object ID: 72
- CRTCs:
{1}
- Formats:
- Properties
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-180"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Cursor
- Plane 10
- Object ID: 76
- CRTCs:
{2}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Primary
- Plane 11
- Object ID: 81
- CRTCs:
{2}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 12
- Object ID: 86
- CRTCs:
{2}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 13
- Object ID: 91
- CRTCs:
{2}
- Formats:
- Properties
- "COLOR_ENCODING": enum
{"ITU-R BT.601 YCbCr", "ITU-R BT.709 YCbCr"}
= ITU-R BT.709 YCbCr
- "COLOR_RANGE": enum
{"YCbCr limited range", "YCbCr full range"}
= YCbCr limited range
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-90", "rotate-180", "rotate-270"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Overlay
- Plane 14
- Object ID: 96
- CRTCs:
{2}
- Formats:
- Properties
- "CRTC_H"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_ID"
(atomic): object
CRTC
= 0
- "CRTC_W"
(atomic): range
[0, INT32_MAX]
= 0
- "CRTC_X"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "CRTC_Y"
(atomic): signed range
[INT32_MIN, INT32_MAX]
= 0
- "FB_ID"
(atomic): object
FB
= 0
- "IN_FENCE_FD"
(atomic): signed range
[-1, INT32_MAX]
= -1
- "IN_FORMATS"
(immutable): blob
- "SRC_H"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_W"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_X"
(atomic): range
[0, UINT32_MAX]
= 0
- "SRC_Y"
(atomic): range
[0, UINT32_MAX]
= 0
- "rotation": bitmask
{"rotate-0", "rotate-180"}
= (rotate-0)
- "type"
(immutable): enum
{"Overlay", "Primary", "Cursor"}
= Cursor
Other snapshots
Key |
Driver |
Kernel |
7a6f1b8ccd0f
|
i915 1.6.0 (20201103) |
Linux 6.1.0-11-amd64 |