// Annotated Flatbuffer Binary
//
// Schema file: annotated_binary.fbs
// Binary file: annotated_binary.bin

header:
  +0x0000 | 44 00 00 00             | UOffset32  | 0x00000044 (68) Loc: +0x0044   | offset to root table `AnnotatedBinary.Foo`
  +0x0004 | 41 4E 4E 4F             | char[4]    | ANNO                           | File Identifier

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

vtable (AnnotatedBinary.Foo):
  +0x000A | 3A 00                   | uint16_t   | 0x003A (58)                    | size of this vtable
  +0x000C | 68 00                   | uint16_t   | 0x0068 (104)                   | size of referring table
  +0x000E | 0C 00                   | VOffset16  | 0x000C (12)                    | offset to field `counter` (id: 0)
  +0x0010 | 07 00                   | VOffset16  | 0x0007 (7)                     | offset to field `healthy` (id: 1)
  +0x0012 | 00 00                   | VOffset16  | 0x0000 (0)                     | offset to field `level` (id: 2) <defaults to 99> (Long)
  +0x0014 | 08 00                   | VOffset16  | 0x0008 (8)                     | offset to field `meal` (id: 3)
  +0x0016 | 10 00                   | VOffset16  | 0x0010 (16)                    | offset to field `bar` (id: 4)
  +0x0018 | 14 00                   | VOffset16  | 0x0014 (20)                    | offset to field `home` (id: 5)
  +0x001A | 30 00                   | VOffset16  | 0x0030 (48)                    | offset to field `name` (id: 6)
  +0x001C | 34 00                   | VOffset16  | 0x0034 (52)                    | offset to field `bars` (id: 7)
  +0x001E | 09 00                   | VOffset16  | 0x0009 (9)                     | offset to field `bar_baz_type` (id: 8)
  +0x0020 | 38 00                   | VOffset16  | 0x0038 (56)                    | offset to field `bar_baz` (id: 9)
  +0x0022 | 3C 00                   | VOffset16  | 0x003C (60)                    | offset to field `accounts` (id: 10)
  +0x0024 | 40 00                   | VOffset16  | 0x0040 (64)                    | offset to field `bob` (id: 11)
  +0x0026 | 44 00                   | VOffset16  | 0x0044 (68)                    | offset to field `alice` (id: 12)
  +0x0028 | 00 00                   | VOffset16  | 0x0000 (0)                     | offset to field `maybe_i32` (id: 13) <defaults to 0> (Int)
  +0x002A | 00 00                   | VOffset16  | 0x0000 (0)                     | offset to field `default_i32` (id: 14) <defaults to 42> (Int)
  +0x002C | 48 00                   | VOffset16  | 0x0048 (72)                    | offset to field `just_i32` (id: 15)
  +0x002E | 4C 00                   | VOffset16  | 0x004C (76)                    | offset to field `names` (id: 16)
  +0x0030 | 50 00                   | VOffset16  | 0x0050 (80)                    | offset to field `points_of_interest` (id: 17)
  +0x0032 | 54 00                   | VOffset16  | 0x0054 (84)                    | offset to field `foobars_type` (id: 18)
  +0x0034 | 58 00                   | VOffset16  | 0x0058 (88)                    | offset to field `foobars` (id: 19)
  +0x0036 | 0A 00                   | VOffset16  | 0x000A (10)                    | offset to field `measurement_type` (id: 20)
  +0x0038 | 5C 00                   | VOffset16  | 0x005C (92)                    | offset to field `measurement` (id: 21)
  +0x003A | 0B 00                   | VOffset16  | 0x000B (11)                    | offset to field `anything_type` (id: 22)
  +0x003C | 60 00                   | VOffset16  | 0x0060 (96)                    | offset to field `anything` (id: 23)
  +0x003E | 00 00                   | VOffset16  | 0x0000 (0)                     | offset to field `temperature` (id: 24) <defaults to 98.600000> (Float)
  +0x0040 | 00 00                   | VOffset16  | 0x0000 (0)                     | offset to field `teetotaler` (id: 25) <null> (Obj)
  +0x0042 | 64 00                   | VOffset16  | 0x0064 (100)                   | offset to field `charlie` (id: 26)

root_table (AnnotatedBinary.Foo):
  +0x0044 | 3A 00 00 00             | SOffset32  | 0x0000003A (58) Loc: +0x000A   | offset to vtable
  +0x0048 | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x004B | 01                      | uint8_t    | 0x01 (1)                       | table field `healthy` (Bool)
  +0x004C | 02                      | uint8_t    | 0x02 (2)                       | table field `meal` (Byte)
  +0x004D | 02                      | UType8     | 0x02 (2)                       | table field `bar_baz_type` (UType)
  +0x004E | 01                      | UType8     | 0x01 (1)                       | table field `measurement_type` (UType)
  +0x004F | 01                      | UType8     | 0x01 (1)                       | table field `anything_type` (UType)
  +0x0050 | D2 04 00 00             | uint32_t   | 0x000004D2 (1234)              | table field `counter` (Int)
  +0x0054 | 28 02 00 00             | UOffset32  | 0x00000228 (552) Loc: +0x027C  | offset to field `bar` (table)
  +0x0058 | 01 00 00 00             | uint32_t   | 0x00000001 (1)                 | struct field `AnnotatedBinary.Building.floors` (Int)
  +0x005C | 02 00 00 00             | uint32_t   | 0x00000002 (2)                 | struct field `AnnotatedBinary.Building.doors` (Int)
  +0x0060 | 0C 00 00 00             | uint32_t   | 0x0000000C (12)                | struct field `AnnotatedBinary.Building.windows` (Int)
  +0x0064 | 0A 00 00 00             | uint32_t   | 0x0000000A (10)                | array field `AnnotatedBinary.Dimension.values`[0] (Int)
  +0x0068 | 0C 00 00 00             | uint32_t   | 0x0000000C (12)                | array field `AnnotatedBinary.Dimension.values`[1] (Int)
  +0x006C | 14 00 00 00             | uint32_t   | 0x00000014 (20)                | array field `AnnotatedBinary.Dimension.values`[2] (Int)
  +0x0070 | 01                      | uint8_t    | 0x01 (1)                       | struct field `AnnotatedBinary.Tolerance.width` (UByte)
  +0x0071 | 02                      | uint8_t    | 0x02 (2)                       | struct field `AnnotatedBinary.Tolerance.width` (UByte)
  +0x0072 | 03                      | uint8_t    | 0x03 (3)                       | struct field `AnnotatedBinary.Tolerance.width` (UByte)
  +0x0073 | 00                      | uint8_t[1] | .                              | padding
  +0x0074 | C8 01 00 00             | UOffset32  | 0x000001C8 (456) Loc: +0x023C  | offset to field `name` (string)
  +0x0078 | 5C 01 00 00             | UOffset32  | 0x0000015C (348) Loc: +0x01D4  | offset to field `bars` (vector)
  +0x007C | 50 01 00 00             | UOffset32  | 0x00000150 (336) Loc: +0x01CC  | offset to field `bar_baz` (union of type `Baz`)
  +0x0080 | 34 01 00 00             | UOffset32  | 0x00000134 (308) Loc: +0x01B4  | offset to field `accounts` (vector)
  +0x0084 | 24 01 00 00             | UOffset32  | 0x00000124 (292) Loc: +0x01A8  | offset to field `bob` (string)
  +0x0088 | 14 01 00 00             | UOffset32  | 0x00000114 (276) Loc: +0x019C  | offset to field `alice` (string)
  +0x008C | 0D 00 00 00             | uint32_t   | 0x0000000D (13)                | table field `just_i32` (Int)
  +0x0090 | DC 00 00 00             | UOffset32  | 0x000000DC (220) Loc: +0x016C  | offset to field `names` (vector)
  +0x0094 | A0 00 00 00             | UOffset32  | 0x000000A0 (160) Loc: +0x0134  | offset to field `points_of_interest` (vector)
  +0x0098 | 94 00 00 00             | UOffset32  | 0x00000094 (148) Loc: +0x012C  | offset to field `foobars_type` (vector)
  +0x009C | 38 00 00 00             | UOffset32  | 0x00000038 (56) Loc: +0x00D4   | offset to field `foobars` (vector)
  +0x00A0 | 33 00 00 00             | UOffset32  | 0x00000033 (51) Loc: +0x00D3   | offset to field `measurement` (union of type `Tolerance`)
  +0x00A4 | 1C 00 00 00             | UOffset32  | 0x0000001C (28) Loc: +0x00C0   | offset to field `anything` (union of type `Bar`)
  +0x00A8 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: +0x00AC    | offset to field `charlie` (string)

string (AnnotatedBinary.Foo.charlie):
  +0x00AC | 05 00 00 00             | uint32_t   | 0x00000005 (5)                 | length of string
  +0x00B0 | 61 6C 69 63 65          | char[5]    | alice                          | string literal
  +0x00B5 | 00                      | char       | 0x00 (0)                       | string terminator

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

vtable (AnnotatedBinary.Bar):
  +0x00B8 | 08 00                   | uint16_t   | 0x0008 (8)                     | size of this vtable
  +0x00BA | 13 00                   | uint16_t   | 0x0013 (19)                    | size of referring table
  +0x00BC | 08 00                   | VOffset16  | 0x0008 (8)                     | offset to field `a` (id: 0)
  +0x00BE | 04 00                   | VOffset16  | 0x0004 (4)                     | offset to field `b` (id: 1)

table (AnnotatedBinary.Bar):
  +0x00C0 | 08 00 00 00             | SOffset32  | 0x00000008 (8) Loc: +0x00B8    | offset to vtable
  +0x00C4 | 00 80 23 44             | float      | 0x44238000 (654)               | table field `b` (Float)
  +0x00C8 | 00 00 00 00 00 10 74 40 | double     | 0x4074100000000000 (321)       | table field `a` (Double)
  +0x00D0 | 00 00 00                | uint8_t[3] | ...                            | padding

union (AnnotatedBinary.Tolerance.measurement):
  +0x00D3 | 05                      | uint8_t    | 0x05 (5)                       | struct field `AnnotatedBinary.Tolerance.width` (UByte)

vector (AnnotatedBinary.Foo.foobars):
  +0x00D4 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                 | length of vector (# items)
  +0x00D8 | 34 00 00 00             | UOffset32  | 0x00000034 (52) Loc: +0x010C   | offset to union[0] (`Bar`)
  +0x00DC | 2C 00 00 00             | UOffset32  | 0x0000002C (44) Loc: +0x0108   | offset to union[1] (`Baz`)
  +0x00E0 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: +0x00E4    | offset to union[2] (`Bar`)

table (AnnotatedBinary.Bar):
  +0x00E4 | D2 FE FF FF             | SOffset32  | 0xFFFFFED2 (-302) Loc: +0x0212 | offset to vtable
  +0x00E8 | 00 80 23 44             | float      | 0x44238000 (654)               | table field `b` (Float)
  +0x00EC | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: +0x00FC   | offset to field `c` (table)
  +0x00F0 | 00 00 00 00 00 D8 8E 40 | double     | 0x408ED80000000000 (987)       | table field `a` (Double)
  +0x00F8 | 00 00 00 00             | uint8_t[4] | ....                           | padding

table (AnnotatedBinary.Baz):
  +0x00FC | 6A FE FF FF             | SOffset32  | 0xFFFFFE6A (-406) Loc: +0x0292 | offset to vtable
  +0x0100 | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x0103 | 03                      | uint8_t    | 0x03 (3)                       | table field `meal` (Byte)

vtable (AnnotatedBinary.Baz):
  +0x0104 | 04 00                   | uint16_t   | 0x0004 (4)                     | size of this vtable
  +0x0106 | 04 00                   | uint16_t   | 0x0004 (4)                     | size of referring table

table (AnnotatedBinary.Baz):
  +0x0108 | 04 00 00 00             | SOffset32  | 0x00000004 (4) Loc: +0x0104    | offset to vtable

table (AnnotatedBinary.Bar):
  +0x010C | FA FE FF FF             | SOffset32  | 0xFFFFFEFA (-262) Loc: +0x0212 | offset to vtable
  +0x0110 | 00 00 E4 43             | float      | 0x43E40000 (456)               | table field `b` (Float)
  +0x0114 | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: +0x0124   | offset to field `c` (table)
  +0x0118 | 00 00 00 00 00 C0 5E 40 | double     | 0x405EC00000000000 (123)       | table field `a` (Double)
  +0x0120 | 00 00 00 00             | uint8_t[4] | ....                           | padding

table (AnnotatedBinary.Baz):
  +0x0124 | 92 FE FF FF             | SOffset32  | 0xFFFFFE92 (-366) Loc: +0x0292 | offset to vtable
  +0x0128 | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x012B | 01                      | uint8_t    | 0x01 (1)                       | table field `meal` (Byte)

vector (AnnotatedBinary.Foo.foobars_type):
  +0x012C | 03 00 00 00             | uint32_t   | 0x00000003 (3)                 | length of vector (# items)
  +0x0130 | 01                      | UType8     | 0x01 (1)                       | value[0]
  +0x0131 | 02                      | UType8     | 0x02 (2)                       | value[1]
  +0x0132 | 01                      | UType8     | 0x01 (1)                       | value[2]

vector (AnnotatedBinary.Foo.points_of_interest):
  +0x0134 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                 | length of vector (# items)
  +0x0138 | 33 33 33 33 33 A3 45 40 | double     | 0x4045A33333333333 (43.275)    | struct field `AnnotatedBinary.Location.latitude` (Double)
  +0x0140 | 7E 57 04 FF 5B 87 53 C0 | double     | 0xC053875BFF04577E (-78.115)   | struct field `AnnotatedBinary.Location.longitude` (Double)
  +0x0148 | 8D F0 F6 20 04 B6 42 40 | double     | 0x4042B60420F6F08D (37.422)    | struct field `AnnotatedBinary.Location.latitude` (Double)
  +0x0150 | 9F 77 63 41 61 85 5E C0 | double     | 0xC05E85614163779F (-122.084)  | struct field `AnnotatedBinary.Location.longitude` (Double)
  +0x0158 | 8F 35 23 83 DC 35 4B C0 | double     | 0xC04B35DC8323358F (-54.4208)  | struct field `AnnotatedBinary.Location.latitude` (Double)
  +0x0160 | F6 97 DD 93 87 C5 0A 40 | double     | 0x400AC58793DD97F6 (3.34645)   | struct field `AnnotatedBinary.Location.longitude` (Double)

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

vector (AnnotatedBinary.Foo.names):
  +0x016C | 03 00 00 00             | uint32_t   | 0x00000003 (3)                 | length of vector (# items)
  +0x0170 | 20 00 00 00             | UOffset32  | 0x00000020 (32) Loc: +0x0190   | offset to string[0]
  +0x0174 | 14 00 00 00             | UOffset32  | 0x00000014 (20) Loc: +0x0188   | offset to string[1]
  +0x0178 | 04 00 00 00             | UOffset32  | 0x00000004 (4) Loc: +0x017C    | offset to string[2]

string (AnnotatedBinary.Foo.names):
  +0x017C | 07 00 00 00             | uint32_t   | 0x00000007 (7)                 | length of string
  +0x0180 | 63 68 61 72 6C 69 65    | char[7]    | charlie                        | string literal
  +0x0187 | 00                      | char       | 0x00 (0)                       | string terminator

string (AnnotatedBinary.Foo.names):
  +0x0188 | 03 00 00 00             | uint32_t   | 0x00000003 (3)                 | length of string
  +0x018C | 62 6F 62                | char[3]    | bob                            | string literal
  +0x018F | 00                      | char       | 0x00 (0)                       | string terminator

string (AnnotatedBinary.Foo.names):
  +0x0190 | 05 00 00 00             | uint32_t   | 0x00000005 (5)                 | length of string
  +0x0194 | 61 6C 69 63 65          | char[5]    | alice                          | string literal
  +0x0199 | 00                      | char       | 0x00 (0)                       | string terminator

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

string (AnnotatedBinary.Foo.alice):
  +0x019C | 07 00 00 00             | uint32_t   | 0x00000007 (7)                 | length of string
  +0x01A0 | 63 68 61 72 6C 69 65    | char[7]    | charlie                        | string literal
  +0x01A7 | 00                      | char       | 0x00 (0)                       | string terminator

string (AnnotatedBinary.Foo.bob):
  +0x01A8 | 07 00 00 00             | uint32_t   | 0x00000007 (7)                 | length of string
  +0x01AC | 63 68 61 72 6C 69 65    | char[7]    | charlie                        | string literal
  +0x01B3 | 00                      | char       | 0x00 (0)                       | string terminator

vector (AnnotatedBinary.Foo.accounts):
  +0x01B4 | 09 00 00 00             | uint32_t   | 0x00000009 (9)                 | length of vector (# items)
  +0x01B8 | 09 00                   | uint16_t   | 0x0009 (9)                     | value[0]
  +0x01BA | 08 00                   | uint16_t   | 0x0008 (8)                     | value[1]
  +0x01BC | 07 00                   | uint16_t   | 0x0007 (7)                     | value[2]
  +0x01BE | 01 00                   | uint16_t   | 0x0001 (1)                     | value[3]
  +0x01C0 | 02 00                   | uint16_t   | 0x0002 (2)                     | value[4]
  +0x01C2 | 03 00                   | uint16_t   | 0x0003 (3)                     | value[5]
  +0x01C4 | 06 00                   | uint16_t   | 0x0006 (6)                     | value[6]
  +0x01C6 | 05 00                   | uint16_t   | 0x0005 (5)                     | value[7]
  +0x01C8 | 04 00                   | uint16_t   | 0x0004 (4)                     | value[8]

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

table (AnnotatedBinary.Baz):
  +0x01CC | 3A FF FF FF             | SOffset32  | 0xFFFFFF3A (-198) Loc: +0x0292 | offset to vtable
  +0x01D0 | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x01D3 | 03                      | uint8_t    | 0x03 (3)                       | table field `meal` (Byte)

vector (AnnotatedBinary.Foo.bars):
  +0x01D4 | 02 00 00 00             | uint32_t   | 0x00000002 (2)                 | length of vector (# items)
  +0x01D8 | 44 00 00 00             | UOffset32  | 0x00000044 (68) Loc: +0x021C   | offset to table[0]
  +0x01DC | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: +0x01EC   | offset to table[1]

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

vtable (AnnotatedBinary.Bar):
  +0x01E2 | 0A 00                   | uint16_t   | 0x000A (10)                    | size of this vtable
  +0x01E4 | 1A 00                   | uint16_t   | 0x001A (26)                    | size of referring table
  +0x01E6 | 0C 00                   | VOffset16  | 0x000C (12)                    | offset to field `a` (id: 0)
  +0x01E8 | 04 00                   | VOffset16  | 0x0004 (4)                     | offset to field `b` (id: 1)
  +0x01EA | 08 00                   | VOffset16  | 0x0008 (8)                     | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x01EC | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: +0x01E2   | offset to vtable
  +0x01F0 | 00 80 23 44             | float      | 0x44238000 (654)               | table field `b` (Float)
  +0x01F4 | 18 00 00 00             | UOffset32  | 0x00000018 (24) Loc: +0x020C   | offset to field `c` (table)
  +0x01F8 | 00 00 00 00 00 D8 8E 40 | double     | 0x408ED80000000000 (987)       | table field `a` (Double)
  +0x0200 | 00 00 00 00 00 00       | uint8_t[6] | ......                         | padding

vtable (AnnotatedBinary.Baz):
  +0x0206 | 06 00                   | uint16_t   | 0x0006 (6)                     | size of this vtable
  +0x0208 | 06 00                   | uint16_t   | 0x0006 (6)                     | size of referring table
  +0x020A | 05 00                   | VOffset16  | 0x0005 (5)                     | offset to field `meal` (id: 0)

table (AnnotatedBinary.Baz):
  +0x020C | 06 00 00 00             | SOffset32  | 0x00000006 (6) Loc: +0x0206    | offset to vtable
  +0x0210 | 00                      | uint8_t[1] | .                              | padding
  +0x0211 | 03                      | uint8_t    | 0x03 (3)                       | table field `meal` (Byte)

vtable (AnnotatedBinary.Bar):
  +0x0212 | 0A 00                   | uint16_t   | 0x000A (10)                    | size of this vtable
  +0x0214 | 18 00                   | uint16_t   | 0x0018 (24)                    | size of referring table
  +0x0216 | 0C 00                   | VOffset16  | 0x000C (12)                    | offset to field `a` (id: 0)
  +0x0218 | 04 00                   | VOffset16  | 0x0004 (4)                     | offset to field `b` (id: 1)
  +0x021A | 08 00                   | VOffset16  | 0x0008 (8)                     | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x021C | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: +0x0212   | offset to vtable
  +0x0220 | 00 00 E4 43             | float      | 0x43E40000 (456)               | table field `b` (Float)
  +0x0224 | 10 00 00 00             | UOffset32  | 0x00000010 (16) Loc: +0x0234   | offset to field `c` (table)
  +0x0228 | 00 00 00 00 00 C0 5E 40 | double     | 0x405EC00000000000 (123)       | table field `a` (Double)
  +0x0230 | 00 00 00 00             | uint8_t[4] | ....                           | padding

table (AnnotatedBinary.Baz):
  +0x0234 | A2 FF FF FF             | SOffset32  | 0xFFFFFFA2 (-94) Loc: +0x0292  | offset to vtable
  +0x0238 | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x023B | 01                      | uint8_t    | 0x01 (1)                       | table field `meal` (Byte)

string (AnnotatedBinary.Foo.name):
  +0x023C | 2F 00 00 00             | uint32_t   | 0x0000002F (47)                | length of string
  +0x0240 | 54 68 69 73 20 69 73 20 | char[47]   | This is                        | string literal
  +0x0248 | 61 20 6C 6F 6E 67 20 73 |            | a long s
  +0x0250 | 74 72 69 6E 67 20 74 6F |            | tring to
  +0x0258 | 20 73 68 6F 77 20 68 6F |            |  show ho
  +0x0260 | 77 20 69 74 20 62 72 65 |            | w it bre
  +0x0268 | 61 6B 73 20 75 70 2E    |            | aks up.
  +0x026F | 00                      | char       | 0x00 (0)                       | string terminator

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

vtable (AnnotatedBinary.Bar):
  +0x0272 | 0A 00                   | uint16_t   | 0x000A (10)                    | size of this vtable
  +0x0274 | 16 00                   | uint16_t   | 0x0016 (22)                    | size of referring table
  +0x0276 | 0C 00                   | VOffset16  | 0x000C (12)                    | offset to field `a` (id: 0)
  +0x0278 | 04 00                   | VOffset16  | 0x0004 (4)                     | offset to field `b` (id: 1)
  +0x027A | 08 00                   | VOffset16  | 0x0008 (8)                     | offset to field `c` (id: 2)

table (AnnotatedBinary.Bar):
  +0x027C | 0A 00 00 00             | SOffset32  | 0x0000000A (10) Loc: +0x0272   | offset to vtable
  +0x0280 | 65 20 71 49             | float      | 0x49712065 (987654)            | table field `b` (Float)
  +0x0284 | 14 00 00 00             | UOffset32  | 0x00000014 (20) Loc: +0x0298   | offset to field `c` (table)
  +0x0288 | C9 76 BE 9F 0C 24 FE 40 | double     | 0x40FE240C9FBE76C9 (123457)    | table field `a` (Double)
  +0x0290 | 00 00                   | uint8_t[2] | ..                             | padding

vtable (AnnotatedBinary.Baz):
  +0x0292 | 06 00                   | uint16_t   | 0x0006 (6)                     | size of this vtable
  +0x0294 | 08 00                   | uint16_t   | 0x0008 (8)                     | size of referring table
  +0x0296 | 07 00                   | VOffset16  | 0x0007 (7)                     | offset to field `meal` (id: 0)

table (AnnotatedBinary.Baz):
  +0x0298 | 06 00 00 00             | SOffset32  | 0x00000006 (6) Loc: +0x0292    | offset to vtable
  +0x029C | 00 00 00                | uint8_t[3] | ...                            | padding
  +0x029F | 01                      | uint8_t    | 0x01 (1)                       | table field `meal` (Byte)
