// Annotated Flatbuffer Binary
//
// Schema file: tests/64bit/test_64bit.bfbs
// Binary file: tests/64bit/test_64bit.bin

header:
  +0x0000 | 1C 00 00 00             | UOffset32  | 0x0000001C (28) Loc: 0x001C          | offset to root table `RootTable`

padding:
  +0x0004 | 00 00                   | uint8_t[2] | ..                                   | padding

vtable (RootTable):
  +0x0006 | 16 00                   | uint16_t   | 0x0016 (22)                          | size of this vtable
  +0x0008 | 3C 00                   | uint16_t   | 0x003C (60)                          | size of referring table
  +0x000A | 04 00                   | VOffset16  | 0x0004 (4)                           | offset to field `far_vector` (id: 0)
  +0x000C | 10 00                   | VOffset16  | 0x0010 (16)                          | offset to field `a` (id: 1)
  +0x000E | 14 00                   | VOffset16  | 0x0014 (20)                          | offset to field `far_string` (id: 2)
  +0x0010 | 24 00                   | VOffset16  | 0x0024 (36)                          | offset to field `big_bool_vector` (id: 3)
  +0x0012 | 2C 00                   | VOffset16  | 0x002C (44)                          | offset to field `big_vector` (id: 4)
  +0x0014 | 20 00                   | VOffset16  | 0x0020 (32)                          | offset to field `near_string` (id: 5)
  +0x0016 | 00 00                   | VOffset16  | 0x0000 (0)                           | offset to field `nested_root` (id: 6) <null> (Vector64)
  +0x0018 | 00 00                   | VOffset16  | 0x0000 (0)                           | offset to field `far_struct_vector` (id: 7) <null> (Vector)
  +0x001A | 34 00                   | VOffset16  | 0x0034 (52)                          | offset to field `big_struct_vector` (id: 8)

root_table (RootTable):
  +0x001C | 16 00 00 00             | SOffset32  | 0x00000016 (22) Loc: 0x0006          | offset to vtable
  +0x0020 | E8 00 00 00 00 00 00 00 | UOffset64  | 0x00000000000000E8 (232) Loc: 0x0108 | offset to field `far_vector` (vector)
  +0x0028 | 00 00 00 00             | uint8_t[4] | ....                                 | padding
  +0x002C | D2 04 00 00             | uint32_t   | 0x000004D2 (1234)                    | table field `a` (Int)
  +0x0030 | A4 00 00 00 00 00 00 00 | UOffset64  | 0x00000000000000A4 (164) Loc: 0x00D4 | offset to field `far_string` (string)
  +0x0038 | 00 00 00 00             | uint8_t[4] | ....                                 | padding
  +0x003C | 48 00 00 00             | UOffset32  | 0x00000048 (72) Loc: 0x0084          | offset to field `near_string` (string)
  +0x0040 | 78 00 00 00 00 00 00 00 | UOffset64  | 0x0000000000000078 (120) Loc: 0x00B8 | offset to field `big_bool_vector` (vector64)
  +0x0048 | 80 00 00 00 00 00 00 00 | UOffset64  | 0x0000000000000080 (128) Loc: 0x00C8 | offset to field `big_vector` (vector64)
  +0x0050 | 08 00 00 00 00 00 00 00 | UOffset64  | 0x0000000000000008 (8) Loc: 0x0058   | offset to field `big_struct_vector` (vector64)

vector64 (RootTable.big_struct_vector):
  +0x0058 | 02 00 00 00 00 00 00 00 | uint64_t   | 0x0000000000000002 (2)               | length of vector (# items)
  +0x0060 | 0C 00 00 00             | uint32_t   | 0x0000000C (12)                      | struct field `[0].a` of 'LeafStruct' (Int)
  +0x0064 | 00 00 00 00             | uint8_t[4] | ....                                 | padding
  +0x0068 | D9 CE F7 53 E3 A5 0B 40 | double     | 0x400BA5E353F7CED9 (3.456)           | struct field `[0].b` of 'LeafStruct' (Double)
  +0x0070 | 4E 00 00 00             | uint32_t   | 0x0000004E (78)                      | struct field `[1].a` of 'LeafStruct' (Int)
  +0x0074 | 00 00 00 00             | uint8_t[4] | ....                                 | padding
  +0x0078 | 33 33 33 33 33 33 22 40 | double     | 0x4022333333333333 (9.1)             | struct field `[1].b` of 'LeafStruct' (Double)

padding:
  +0x0080 | 00 00 00 00             | uint8_t[4] | ....                                 | padding

string (RootTable.near_string):
  +0x0084 | 2F 00 00 00             | uint32_t   | 0x0000002F (47)                      | length of string
  +0x0088 | 74 68 69 73 20 69 73 20 | char[47]   | this is                              | string literal
  +0x0090 | 61 20 6E 65 61 72 20 73 |            | a near s
  +0x0098 | 74 72 69 6E 67 20 77 68 |            | tring wh
  +0x00A0 | 69 63 68 20 68 61 73 20 |            | ich has 
  +0x00A8 | 61 20 33 32 2D 62 69 74 |            | a 32-bit
  +0x00B0 | 20 6F 66 66 73 65 74    |            |  offset
  +0x00B7 | 00                      | char       | 0x00 (0)                             | string terminator

vector64 (RootTable.big_bool_vector):
  +0x00B8 | 07 00 00 00 00 00 00 00 | uint64_t   | 0x0000000000000007 (7)               | length of vector (# items)
  +0x00C0 | 01                      | uint8_t    | 0x01 (1)                             | value[0]
  +0x00C1 | 00                      | uint8_t    | 0x00 (0)                             | value[1]
  +0x00C2 | 01                      | uint8_t    | 0x01 (1)                             | value[2]
  +0x00C3 | 01                      | uint8_t    | 0x01 (1)                             | value[3]
  +0x00C4 | 00                      | uint8_t    | 0x00 (0)                             | value[4]
  +0x00C5 | 00                      | uint8_t    | 0x00 (0)                             | value[5]
  +0x00C6 | 01                      | uint8_t    | 0x01 (1)                             | value[6]

vector64 (RootTable.big_vector):
  +0x00C8 | 04 00 00 00 00 00 00 00 | uint64_t   | 0x0000000000000004 (4)               | length of vector (# items)
  +0x00D0 | 05                      | uint8_t    | 0x05 (5)                             | value[0]
  +0x00D1 | 06                      | uint8_t    | 0x06 (6)                             | value[1]
  +0x00D2 | 07                      | uint8_t    | 0x07 (7)                             | value[2]
  +0x00D3 | 08                      | uint8_t    | 0x08 (8)                             | value[3]

string (RootTable.far_string):
  +0x00D4 | 2E 00 00 00             | uint32_t   | 0x0000002E (46)                      | length of string
  +0x00D8 | 74 68 69 73 20 69 73 20 | char[46]   | this is                              | string literal
  +0x00E0 | 61 20 66 61 72 20 73 74 |            | a far st
  +0x00E8 | 72 69 6E 67 20 77 68 69 |            | ring whi
  +0x00F0 | 63 68 20 68 61 73 20 61 |            | ch has a
  +0x00F8 | 20 36 34 2D 62 69 74 20 |            |  64-bit 
  +0x0100 | 6F 66 66 73 65 74       |            | offset
  +0x0106 | 00                      | char       | 0x00 (0)                             | string terminator

vector (RootTable.far_vector):
  +0x0108 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                       | length of vector (# items)
  +0x010C | 01                      | uint8_t    | 0x01 (1)                             | value[0]
  +0x010D | 02                      | uint8_t    | 0x02 (2)                             | value[1]
  +0x010E | 03                      | uint8_t    | 0x03 (3)                             | value[2]
