code: @Override protected int readData(byte[] buffer, int offset)
     {
        // Unknown
        offset += 6;
  
        // The presence of a non-zero value here determines what structure we expect next
        int structureFlags = FastTrackUtility.getInt(buffer, offset);
        offset += 4;
  
        if (structureFlags == 0)
        {
           offset += 10;
        }
        else
        {
           offset = FastTrackUtility.skipToNextMatchingShort(buffer, offset, 0x000F);
        }
  
        int numberOfItems = FastTrackUtility.getInt(buffer, offset);
        FastTrackUtility.validateSize(numberOfItems);
        m_data = new String[numberOfItems];
        offset += 4;
  
        // Offset to data
        offset += 4;
  
        int[] blockOffsets = new int[m_data.length + 1];
        for (int index = 0; index < blockOffsets.length; index++)
        {
           int offsetInBlock = FastTrackUtility.getInt(buffer, offset);
           blockOffsets[index] = offsetInBlock;
           offset += 4;
        }
  
        // Data size
        offset += 4;
  
        for (int index = 0; index < m_data.length; index++)
        {
           int itemNameLength = blockOffsets[index + 1] - blockOffsets[index];
           FastTrackUtility.validateSize(itemNameLength);
           m_data[index] = new String(buffer, offset, itemNameLength, CharsetHelper.UTF16LE);
           offset += itemNameLength;
        }
        return offset;
     }
docs: {@inheritDoc}