See fstapi.h for the values for the FST_BL_XXX enums.

===========================================================================

compressed wrapper (typically over whole file)

uint8_t		FST_BL_ZWRAPPER
uint64_t        section length
uint64_t        length of uncompressed data
[zlib compressed data]

===========================================================================

header block

uint8_t		FST_BL_HDR
uint64_t	section length
uint64_t	start time
uint64_t	end time
double		endian test for "e"
uint64_t	memory used by writer
uint64_t	scope creation count
uint64_t	var creation count
uint64_t	max var idcode
uint64_t	vc section count
int8_t		timescale exponent
[128 bytes]	version
[128 bytes]	date

===========================================================================

geometry block

uint8_t         FST_BL_GEOM
uint64_t        section length
uint64_t        length of uncompressed geometry data
uint64_t        maxhandle
[compressed data]

(length of compressed data is section length - 24)

===========================================================================

hierarchy block

uint8_t         FST_BL_HIER
uint64_t        section length
uint64_t        length of uncompressed hier data
[zlib compressed data]

or

uint8_t         FST_BL_HIER_LZ4
uint64_t        section length
uint64_t        length of uncompressed hier data
[lz4 compressed data]

uint8_t         FST_BL_HIER_LZ4DUO
uint64_t        section length
uint64_t        length of uncompressed hier data
varint		length of hier data compressed once with lz4
[lz4 double compressed data]


===========================================================================

dumpon/off block

uint8_t         FST_BL_BLACKOUT
uint64_t        section length
varint		num blackouts (section below is repeated this # times)
[
uint8_t		on/off (nonzero = on)
varint		delta time
]

===========================================================================

1..n value change blocks:

// header

uint8_t		FST_BL_VCDATA (or FST_BL_VCDATA_DYN_ALIAS)
uint64_t	section length
uint64_t	begin time of section
uint64_t	end time of section
uint64_t	amount of buffer memory required in reader for full vc traversal
varint		maxvalpos (length of uncompressed data)
varint		length of compressed data
varint		maxhandle associated with this checkpoint data
[compressed data]

---

// value changes

varint		maxhandle associated with the value change data
uint8_t		pack type ('F' is fastlz, '4' is lz4,
			others ['Z'/'!'] are zlib)

varint		chain 0 compressed data length (0 = uncompressed)
[compressed data]
...
varint		chain n compressed data length (0 = uncompressed)
[compressed data]

---

// index: chain pointer table (from 0..maxhandle-1)

varint		if &1 == 1, this is <<1 literal delta
		if &1 == 0, this is <<1 RLE count of zeros
		if == 0, next varint is handle of prev chain to use,
			bit only if FST_BL_VCDATA_DYN_ALIAS or
			later VCDATA format

---

uint64_t	index length (subtract from here to get index position)

---

[compressed data for time section]
uint64_t	uncompressed data length in bytes
uint64_t	compressed data length in bytes
uint64_t	number of time items

// end of section

===========================================================================