public static LensDataStructure ParseLensData(byte[] buffer)
        {
            ulong offset = 0;
            LensDataStructure data = new LensDataStructure();

            data.Identifier = GetUInt16(buffer, 0x00);
            data.LensEntryCount = GetUInt16(buffer, 0x02);
            data.HeaderSize = GetUInt16(buffer, 0x04);
            data.LensEntriesReserved = GetUInt16(buffer, 0x06);
            data.Unknown1 = GetUInt16(buffer, 0x10);
            data.Unknown2 = GetUInt16(buffer, 0x12);
            data.Unknown3 = GetUInt16(buffer, 0x14);
            data.Unknown4 = GetUInt16(buffer, 0x16);
            data.Unknown5 = GetUInt16(buffer, 0x18);

            offset += data.HeaderSize;

            Log.WriteLine("  Parsing " + data.LensEntryCount + " index entries");
            data.LensEntries = new LensEntry[data.LensEntryCount];
            for (ulong entry = 0; entry < data.LensEntryCount; entry++)
            {
                LensEntry lensEntry = new LensEntry();

                lensEntry.LensId = GetUInt16(buffer, offset + entry * 0x10 + 0x00);
                lensEntry.Wide = GetUInt16(buffer, offset + entry * 0x10 + 0x02);
                lensEntry.ExtenderType = GetUInt16(buffer, offset + entry * 0x10 + 0x04);
                lensEntry.Offset = GetUInt32(buffer, offset + entry * 0x10 + 0x0C);

                Log.WriteLine("  Lens #{0} has ID 0x{1:X8} [Wide: {2}, ExtenderType: {3}]", entry, lensEntry.LensId, lensEntry.Wide, lensEntry.ExtenderType);
                data.LensEntries[entry] = lensEntry;
            }

            offset += (ulong)data.LensEntriesReserved * 0x10;

            Log.WriteLine("  Parsing " + data.LensEntryCount + " lens datas");
            for (ulong entry = 0; entry < data.LensEntryCount; entry++)
            {
                LensEntry lensEntry = data.LensEntries[entry];

                data.LensEntries[entry].LensData = ParseLensCorrection(buffer, offset + lensEntry.Offset);
            }

            return data;
        }
        public static LensDataStructure ParseLensData(byte[] buffer)
        {
            ulong             offset = 0;
            LensDataStructure data   = new LensDataStructure();

            data.Identifier          = GetUInt16(buffer, 0x00);
            data.LensEntryCount      = GetUInt16(buffer, 0x02);
            data.HeaderSize          = GetUInt16(buffer, 0x04);
            data.LensEntriesReserved = GetUInt16(buffer, 0x06);
            data.Unknown1            = GetUInt16(buffer, 0x10);
            data.Unknown2            = GetUInt16(buffer, 0x12);
            data.Unknown3            = GetUInt16(buffer, 0x14);
            data.Unknown4            = GetUInt16(buffer, 0x16);
            data.Unknown5            = GetUInt16(buffer, 0x18);

            offset += data.HeaderSize;

            Log.WriteLine("  Parsing " + data.LensEntryCount + " index entries");
            data.LensEntries = new LensEntry[data.LensEntryCount];
            for (ulong entry = 0; entry < data.LensEntryCount; entry++)
            {
                LensEntry lensEntry = new LensEntry();

                lensEntry.LensId       = GetUInt16(buffer, offset + entry * 0x10 + 0x00);
                lensEntry.Wide         = GetUInt16(buffer, offset + entry * 0x10 + 0x02);
                lensEntry.ExtenderType = GetUInt16(buffer, offset + entry * 0x10 + 0x04);
                lensEntry.Offset       = GetUInt32(buffer, offset + entry * 0x10 + 0x0C);

                Log.WriteLine("  Lens #{0} has ID 0x{1:X8} [Wide: {2}, ExtenderType: {3}]", entry, lensEntry.LensId, lensEntry.Wide, lensEntry.ExtenderType);
                data.LensEntries[entry] = lensEntry;
            }

            offset += (ulong)data.LensEntriesReserved * 0x10;

            Log.WriteLine("  Parsing " + data.LensEntryCount + " lens datas");
            for (ulong entry = 0; entry < data.LensEntryCount; entry++)
            {
                LensEntry lensEntry = data.LensEntries[entry];

                data.LensEntries[entry].LensData = ParseLensCorrection(buffer, offset + lensEntry.Offset);
            }

            return(data);
        }