It is currently Thu Oct 17, 2019 10:22 pm

All times are UTC + 1 hour




Post new topic Reply to topic  [ 9 posts ] 
Author Message
 Post subject: Gif decoder
PostPosted: Thu Jan 19, 2017 8:19 pm 
Offline
Addict
Addict
User avatar

Joined: Thu Feb 09, 2006 11:27 pm
Posts: 2443
Hi, sometime ago I got a nice piece of code from here, but I am not able to find the thread anymore...
...it's a library free gif decoder which works quite fast. I wanted to tune it a little bit, but for now I could not speed it up significantly.

Using gif images and this decoder inside a code means the following adantages: a small exe file because no lib is needed and quick decoding!
Anyway, if some additional tuning could be done in the code, I would be happy!

Even I do not know the original author (there are to few assembler lines to say it's from wilbert :lol:), I'll post it here - hopefully the maker of the code has no problems with that.

Code:
; Define
   Structure CodeTableEntry
      *prev
      color.l
      size.l
   EndStructure

   Structure MultiType
      l.l[0]
      u.u[0]
      a.a[0]
   EndStructure
   
   DataSection
      Bitmap:
Data.q $FF613938464947,$87013F,$309000008000800,$34242E39101A1908,$3935352559411E3C,$3241423633393F3F,$4E397F5A3573504D,$5576705D57514252,$C0A960AF7E5C779C,$C8A3B4A18E858F5E,$AAE8CCCCCBCEAAA2,$F5F3E7DEDED8E6E4,$FFF7F7F7F7DEDEED,$FFFFFFF7FF,0
Data.q 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$4F9210000000000,$2C00FF000000,$800013F00FF0000,$A0B0481C080100FF,$70C85C20060083C1
Data.q $489C4A23100603A0,$DC6A33188BC5A2B1,$48200D06C441B1A8,$3A1B0C85C3015090,$3097CBA5B2C9587C,$9BC36673499CCA63,$1E1B38854080308,$22D44A1D0A83408E,$B29938542B220848,$69ECBEA350A7D3A6,$7C22A95601C2E790,$268F45AFD7ABB458,$D368B3D4A5528A5D,$6CAC556B304AD07E
Data.q $8EDDAE71EA258217,$DFAFB6AB3532C721,$21A02824EA0D7198,$38B8E5D6ED77AA5C,$4BFD36C924B14531,$D614058585E072B9,$F43A0C75B2DB839,$2B7C0E86A4F4AC85,$85CD55ADD81B46AB,$65C08050180615,$EEA2BBBC668B1A0C,$C3417A5C8E43208B,$30A81EDEA3C8D5E4,$80840B0A040A0436
Data.q $442F1B9C0ED8261,$677DBFDD44B81DB9,$E1F2DD3BF1FEEFFF,$F7F26CB26E1DE773,$F57A99A81427974F,$6D9D70C04C259AE8,$26FDE4771BCF280,$DE944E068111B79A,$49C35211F7AA0C63,$6B95454E147C1A96,$A759D4049D46C000,$B5CDD8745FB04D9,$DC6711A468A25682,$7599675818B61584
Data.q $7DC1100C04875588,$562DDB89E0A67DD2,$59020468E3C6357,$1EB77DC16FA457AA,$C52C93E2D5EC1749,$100386C0300A305,$A8E5FC8DDF795405,$6298E3F80DBC8395,$A3B791E378A3E802,$C11E9B2698F66480,$65E4F9424E4964B9,$A039FB8D61B009B0,$6882A6965E217EA5,$2875D23F4624950A
Data.q $89B9A26478FA4A80,$569F09D9C7699914,$E881FB00DF77D559,$E690DE9762818767,$261A3A0D901E1781,$41DB9828B9158FAA,$1C9A5A957B54A8FF,$541200DD6A69705B,$7F6209680904E207,$5706099B68B7FD5A,$46996CAA3A64B2A0,$ECFA1ED29C6669C2,$D9EEA4E10B2E3D8E,$AFEBC8D219AE297A
Data.q $87662F0161DB06E4,$D992AB0B591FB5EC,$6D4B1EAFBB6F0B26,$E9487AAECB2EF0BC,$A723265DC8B7A755,$B86638B9818B92E4,$6ABDEFBBB2EA4E13,$AF5BDA6FB3ACEA96,$91C2B4E6BAB316BE,$6155AC07006A2B44,$475B08C1B05C127B,$F6ABB0F78D0DC2DF,$244C62F4C4DDCA0E,$3283BB735B3260A1
Data.q $65321BFDA57AECCA,$2B0B28C9E80B8AB8,$6DB473AB5ED46222,$B3CCBB10D3B509CA,$B75ABDF4DD664998,$AD5289D2DB706D9A,$5AF69B017235AB43,$A05018A7F6BAFB0,$263CD719D532D7CF,$3646CE290B5B3FDD,$F80BE334D7F7DCFF,$6B66D9742A4EFD98,$4412C167C040045,$E0381096727E3D23
Data.q $AAE6E44A36EA4DE5,$F9EC3A07CF667A9A,$65A5E16F4E020DCD,$C1AE3C8F89E22DD0,$AC1E20D1D5866A59,$A6DDAD1D3F1067D9,$F77C4E6B9C77CB63,$7B85DDF76D7F3BE8,$7E56C543ACD914CC,$704509EDC05ED76C,$79D6D726759D9772,$FC7B2339F7FDDCCF,$BB3F83BDDDEBE4F7,$F362C595C4EA3DF9
Data.q $966FB0DA8025C54E,$DCE63DA6DBB5ED21,$B2DE1C009CAF1E0F,$BD6A701A013196A6,$ADD4BC9594F7186B,$102800991BCE7E0E,$1EBBF33A4F4D103D,$778D41E2AF927AB1,$DD2B061C040893E8,$7ADD59926E80AA3D,$5410456D89493607,$2409E9B6B828AE0E,$C0A2E27F20ABF300,$D5E11ACC84100A00
Data.q $69ED5DD03BA808FF,$B1962858F1A0FB5D,$3085A18BEF4567B4,$343400661E0D0145,$7021BCBE5698D2D8,$1703206C0A80C81,$E05E08105FA0540C,$88C11B21F2CD7D0,$4A28C505B8B6E024,$246ADAE0CBCF2571,$DBC25F4A90691B3B,$35005406ACF84D1A,$A01502EEA80EC88,$2CC198AAD884050
Data.q $142E2F30A1D14098,$E4C23BB2025206DB,$CA400A04182AC279,$E5C01B2A69002402,$4E89112A253BB218,$8C0EC892592740CB,$8960EFA34A1C9191,$9E4A6C5B12125742,$4A327A44C9C754F2,$6681857EA7402412,$88FF255B6D99B33A,$69A70200322EC5D8,$918E4412B9105989,$3E584662E5C94A8C
Data.q $D860640B9AB179CD,$230327A59CC5934,$4008B90022E45C58,$60220527A4F49EA0,$EB839AB34DFDC3FF,$52DC949689380422,$BE9A0139E7314829,$3B62799152510685,$184F27D14C47898F,$F5412792B0952555,$49B805137482898F,$897CD92960400481,$973199D54889BB3B,$99AD592D20E904BA
Data.q $C131E6E3636C5035,$E4D2A7CDC60C1065,$A055BBC8295F47E0,$F0100108200925,$7E9D13203652C0A,$E69C923E3346496A,$D239BE6A89565F54,$43E4D963B2DD24E9,$C083E580D3A18656,$13F97401B25805,$95C76297536A5801,$B53964855696F376,$DD38422641FFBE46,$ADC0049CBAC758A4
Data.q $B60AB91B9F33DBAC,$4221C16E02E4B00C,$31AEC716A700EA96,$2890D579C006A6F1,$4ABF579BCC85A1D4,$80A1F27592D6C14C,$20403C048044B205,$780500002007005,$131E133690306CFF,$1270054964D841D,$CE524F127400AC90,$B350FBEA881C02F5,$64ABC09C40564601,$6C758288CC2B4368
Data.q $A00436E9DEC1DA6,$2E024A44670016D4,$F2E801F6540A80E0,$44A8083E7B1559E8,$8049E30E08658725,$53AD72578B77DAFA,$4891B382E6152251,$61F69918E77AEB41,$F01E73CE5ADE7997,$800E028000E85B,$36F6BC0800F01E00,$FCDD028F9EF5CD4,$ED5C6B8A79BE585C,$8528C2A96255DC3B
Data.q $1802459A8B304C2A,$DA4B4735672246AB,$540199745D76A9C,$25011496F300901E,$7B095DD0137740AD,$CA8F306D033A8BF4,$6FBDC3BE64DED992,$B835C2E0C377ED7D,$6DCEE79965B13DC1,$648FF00DCFAAB2DA,$1CC6A25816883EBC,$923AFD64600A6DDA,$2C3177AEEE0094FF,$80D12CAD5256F65D
Data.q $20794F2919A270FE,$2C657CB188F40E58,$FC84C99DFC295655,$1C68A414264748CB,$19AA8201C24EACCB,$9B8B114980060EB1,$5C95CB29D1865F3,$C13052AAFB5F47E4,$192C681BEF88EE1D,$BBDF4B25A387A4F7,$F311109AF4C31749,$D38C8694C0EA6F08,$D69FAC9B0484DE9,$4A94ADF92BB1D107
Data.q $9682C45A0883E7FD,$596F088060090DF2,$D2F033AD644DCCB9,$69EAFC99D232EB00,$AD207B9B4E638B30,$F009120BA75F25E4,$9217A9F52C79BE25,$72CE52DEBB3C0265,$A744BAA7DFA36970,$5E469B3B6726F5A7,$17B9D4B553D12937,$B60C931C73B69DE,$F7D0DBD7001D2763,$ED1D07BDF5593930
Data.q $A2EB1164CB4FEEFA,$5081F75B48D79BFD,$636C53E467B862FF,$A93C361DEFA8E773,$B6F7DEC6D77A6CD4,$B956E1E81E71962F,$D76D65C25F76FDD0,$496A748E29519716,$2DD39CAB94EBE032,$C2DB8172559E3977,$AE37AB0CC51A4AF3,$7AFE56339C792C73,$29001C02F3800D5C,$26F02E8736F15992
Data.q $89D3F72F4D49B335,$558E02080B973E7D,$40EB7EF4CADB289,$F3AD56415EA51C36,$96342E81E79BE368,$7EC97DBB201000D,$2E5974AECE020030,$A03566C0DC9C4277,$574FA0279CAB8501,$AE16FA81D67A1B3A,$8D908EF8413BF003,$5BD6FC225EA34562,$7006B83B438DF1AD,$352C03806F1B7DFC
Data.q $EFFC5405ED554CCB,$CAD62A15D629365B,$76879EBFE6FAFF97,$12D797C39F391EEF,$4F5995B8AEA8CAFA,$77CECCF0495FE71F,$DC738EF5EDEDABFF,$ED501C0271E004FC,$22535C1C7970404,$F89D33E39C439E,$2405FFC016014C0B,$7FF7FC8017FD0120,$A3607D156616E801,$196CF71455364C4E
Data.q $1587801846826577,$E7E47B2651759235,$8719B1B50085F771,$F76462376375C7,$D0085F560C001008,$9860961D7280166F,$83383201C0150042,$C01A83679C833834,$E93BB1057AA6C101,$56E56C01840C7513,$541877F71B719811,$7E78719984A2575F,$73B7620087925F76,$5622006784788738
Data.q $4355159766E54C00,$8390142572176BF7,$783701C0141CF68E,$8075579C14855701,$1F6C85A280845C4,$984777D78981E017,$4F84D6537CD7DD6A,$78873978E00587F8,$F7C37F47EB6F5819,$9B4DB7095A75536F,$82B821485D7C75FF,$3200F7AF25979C45,$1A0157CD6428398,$87A78728717D0755
Data.q $197D77B65F284543,$7374A578787D7802,$66847848537B9652,$8B76B82C5966155C,$8BD14A0160176B56,$501C345196608770,$1601C89923317001,$3B889B89815884A0,$43707C401433A8A1,$A98D58A58A68A88A,$4A55F543822284B8,$C8B085088181C008,$185275AE25868573,$88B76B6694DC3EE0
Data.q $701614A7498BD7C6,$F2B83448C01C67C,$8C38398C661F01A0,$601401A004109815,$2346972D4E83FC80,$7606CE8A57D61665,$97582793DA81080E,$7E81C8DF0096AE84,$82B1CF5B16817646,$D4DE7F84DC4B47F8,$F58F148D8BD24D5C,$8F87C958249B5607,$D83286801016D67A,$CF8A08C445810A8C
Data.q $18255EF7121478FF,$8A84773E6CE8774F,$85A68587D1B09117,$68E76AD1B57FF7FF,$B76DA8ED76A5C959,$5D78BE9559268BC4,$117F8F67F759B3AA,$5515901000B00317,$5260031568C48342,$71489396BB32D904,$3976262267A32001,$84A5706F38107AB1,$C8282191B067D53D,$C66B054C1B58DF63
Data.q $9267488EF76A5CA1,$A7078F298A0168F3,$5C79C74C95A98E3A,$9311CC7CF95E17E9,$419F93516D937833,$A98746A11488A166,$90E1B38D693F73B7,$47C4AA84B25E75E,$B372262A79598168,$98A8F29569534B66,$C9599BB98E8908F3,$751692D69598F9B,$1CC6806428FD9311,$79A087199E188437
Data.q $8110D5926F56AA7A,$13C7375716557A96,$85C74A69001B567D,$BA5536B282D52C70,$59B898848E98B8FF,$EC79C9907079B995,$32291F9EC9BB9909,$99699339984AB2B8,$9E6C69FA12113D9C,$9CF5705F09091489,$29D419C97583C624,$DA7718885F91838B,$9B692565F17C1A94,$87F698C9549549B8
Data.q $2C9EF9BE9ED9ED5D,$9F510937195E2DF9,$D48696C8CE9F78C8,$FB67C624A027D649,$6D752682877F9D46,$874868C9E06B388A,$15A3A01898A01592,$99299182B9898BDA,$19BEA1BA1A8999EC,$339631058938C19F,$9FA9392A21558C98,$27358548444DD487,$4B7C157168099618,$5CE74659962B94F1
Data.q $4A66A13A3E9E5927,$9A9F012848B9B9A1,$7C7A1B9ECA191C67,$1718A1F1EF14C9B8,$7332BA248C9834A2,$1A01F75399F1473,$1900A0481F19A183,$768A723983A3998,$BA3E98B928A635FF,$6C2949E998BA3CA3,$24D9BC9EEA41A97A,$B1AD95D82C9E9A15,$CB9FA565A7AA22A4,$1F301612A9CD9FC9
Data.q $56D61B410775F7E3,$E2A0E3209DF9DE01,$956ABA7499545CD9,$DA39A3B9B88BCA90,$6801B695A6E1C5A3,$9BB79C959A6F8398,$29937F6890A65A9C,$CBAA4832A4C58815,$2FD8089FB4D710A1,$46F84AA6CA55379D,$DAADD5C75AD1F48A,$AB97C65CC88BA354,$3ABD9E8A6401148F,$2B92B1C5A3EAF0A1
Data.q $74C4C4992AC7A199,$1127ACFAF48BB48B,$22AD31696E474CB0,$AA71B8186A7B89BA,$700F4DC5273E957B,$848911CF97D760A0,$9E5012ABAA627C59,$18BEA3DA94ABCA8F,$F78F5A4492BAC399,$957AFEAFD92B992A,$16378F5B0098EACF,$652359C59635651F,$75694415A2AD95FF,$8859410254919352
Data.q $89E49B5779518C08,$F74AAEE5B100E48F,$4EA92A14AC174AAE,$AC7AF6AF6A1798AB,$DA9176E6DBB57B54,$BC46412B79CACAB2,$27A564AA04C52948,$266441CB098C3932,$E96E049842D44D66,$B7555265B6144B78,$763D0107C6AB549D,$B62BF48E6D65577C,$98DA95ABEB521259,$799179AA6CB54B26
Data.q $581268BD46648BB5,$5AA48F68D1C79BC9,$5B6658817D6965A5,$4D6917A5807B699C,$A0D88C3647076B04,$AAB25B614AA62A10,$131CF59500E5E13A,$7F6929ACD9569B70,$4B5886849B837B87,$8EB86A16A11464B5,$97F61648C4DD5A69,$4B33994BC21925B5,$A1BA06195889F69C,$6694513AA8E92B2B
Data.q $1017AFFB84BBDA0D,$31BAD0195CD5DD01,$EB814CD9B7455AFF,$BCB87A6DAC5BBBA9,$49DB57958B2CBD8B,$1852917B4701601A,$F2BCA636164A3100,$6BBBCE8FEBCC2541,$D7422DC468BD1C00,$95489079A59965,$17BBD7E9B7CA3AB,$C4CE125BE100E148,$B99B45D87F5B4D8B,$A15BD8AF6BEAB57B
Data.q $D4631A9AF6BC198D,$F697F81C4A497E48,$5641ACB9892A888B,$56E06C4B369998C6,$2FA5FAB54C431EC3,$B00BB5A3748DAB81,$90060154CE0164CD,$EF66CBAE011C0F00,$C4FBBBB28A17988A,$EBEF959A9EC1FB29,$E000B00FBC401C12,$A00900A85A1B58,$1127A39C17C2B005,$CDB077AF1F2180B3
Data.q $C38A64C350011CB7,$586A01D52A8ED9E1,$CFB00C0A8B56149E,$60094CDC41A3BA,$BB2CAB1C4986AB01,$52C0FB58C50C1D48,$A4B44DEBEF98DBFF,$F66E917BC6C2601,$5571227E9824C5E0,$2AD7411A488F39E5,$8299C896C5783786,$7C59E1C7217BA642,$7C75615C5948EA90,$92B90C7AC64A3992
Data.q $5E6127AB238CC0CA,$84B5992A65586B7A,$3095AA9EA72C89C8,$B7A36F01A9E2552B,$75738DF97F85A852,$FE7495B182414868,$56A6393ADC6574A9,$BB9D64EB468348FD,$A882D5EF6A177899,$52754D63B68DB29C,$259690214A527865,$CDC1576ECB47C7CB,$6D55E64C40141D04,$AEA92369552814B
Data.q $3995B1A6C7A4DFCC,$C5C009C265CD4DAC,$55AE7EA7FE00AC28,$9A573C6168ED0F01,$6721CBB05889C9BC,$BCDF00B014D1BABA,$F61DB77503000A4,$B95C3EB2B48C553A,$F5CE60C61554E54E,$41CF3D02C42CB148,$C46760C1D0125CFF,$ED55001FAF5D2E81,$A17C8BAFDC4FC1A4,$7D0889E01DC2E607
Data.q $957FE80491694873,$91666C63B0077FF3,$63A9D15D2B7E9614,$B7C6B7DEB3312EC6,$ACF9B4B7677810A1,$A927D2FD2BA39C48,$8C957C9060C5E1CE,$8BC9E7CF3CF3B909,$D7C38BB014C97851,$FD415D9AC683201,$D4865D5A5B91D70C,$ECBB9818DE63C014,$848FC1200B7EA00,$B737FF4A4927D8D0
Data.q $135C9DCA62FD748,$F58851B935935C3,$14ABA8B2A58F96E0,$DC3DAB948D86A5E5,$241A789EB7368E54,$4654654CED80C3D9,$A0055E7644466A3C,$1ECFF4B679983974,$CC6B2698F9BABECC,$ACCE8ADD09D85D07,$FF80000C595829C9,$1CFD85586DCD1227,$79E5CEBA645F5916,$56A207A1C9F167CD
Data.q $7A2856A10BA861FF,$685957F4D95CEC52,$1C5A63A63AEE14AD,$B8F8F35CEC5701F,$A31264CF465DB289,$D42CC054F66CCE94,$9C0812EB5898FC8B,$B554D7EABF46AED4,$5B2D8E0070094A35,$2CD3015D93595D8A,$32CD5D697F45F5C1,$5AFDAA103323AD2A,$B73200700EC6D640,$77B4BBAF7D560C1C
Data.q $A63D77B2B48F707D,$1A1492459BCEA615,$32AC0D70D34341C8,$C89DFC52668E525D,$BC571A9BBBD44D7F,$701094DC28DC7DA,$4A37F3D8A63C5260,$F526829148611007,$3873748F824CFABA,$D5A8E9DEB2FDA63D,$DD1010263D171515,$1400F1024A45E348,$1200DB0A75654C7,$5CB8CB9D27D8512D
Data.q $16D2F011954D9F92,$DF4DA7C7AC4CD2A6,$C9275E6126D35E37,$86DB3B2E7997C3E3,$E68D4B6AE9C8DBFF,$CC127EB8DF91897,$DCFD8F79463B6146,$1E507BD595611E4E,$61BF200E48DE4946,$528866CEBB4D826C,$1CFE67395181DDB,$86E68CF6E1200801,$7C401200CA1F60C5,$2465D78A725CED10
Data.q $FDCD154E9257487C,$E7FBB54F448CD336,$DDFCE56BAF925C41,$95582CBE560DF5BB,$E2F97F8E0DC6C252,$C67248F7FFBAED85,$49D8F824EDBBC566,$12500638C7BD00F7,$BDD75AD6445E2CEA,$AB1714326FECD586,$58660F60FEB2D21E,$8D6013D6F0D2C102,$8EC0AC4056A67977,$A9CB15DABDF2E714
Data.q $F4F74F648D7C7707,$79DAA76EDF7DB3C3,$12B700607C53CA6E,$95AED0A91660079A,$2782463CE79E0CCE,$5FAE48395B485955,$A6285E538CE4F824,$F600E395F25CD1B7,$6D969FEB1C7F36FF,$B4EAF181136A0C59,$EAF60F4583956421,$D137E6B0001CF852,$BF3919561A574396,$A37890C0FCB2C20E
Data.q $8ECFE36D80C9BE5B,$977706872FD14BE6,$C92E68B46553C2EB,$61154D467F21D8F,$1248E60CE68D10EB,$DD4917014DF9866C,$E7EB94985BC11F6B,$D9691EC1C136F648,$5B348EE60E5FAD1D,$2640B11B110035E8,$8E5EFB0F30260B61,$508121007014ABB6,$7D2D4FBC0BA9ED31,$11C7AD34B85C634F
Data.q $798D45687CEB0060,$7615829C28D4FD48,$BA395F9E527DA48E,$60C0075E55AE5E4C,$552760CD85610595,$ADC49C12F21BAE8B,$468C456445B1B7A5,$FC66528D966B8EC1,$9D7686E7FC932C22,$7B900CD38CADF654,$862FC0BEBCDA6012,$C4F55ABEA65B4A14,$763BCD15DE24DEFF,$168BC01952C430F6
Data.q $F22DE4FAF8AD5B26,$E5E500C63ECACD09,$1578D5867EB63BBA,$E91EE941478D4D70,$5100526259F1BD8A,$3024210207040120,$321812860400E060,$2E140A4301810074,$1D8E46C3E1D0D85C,$9248E4521900023B,$4AE5127004940721,$C0A0F0BC70370D94,$2100A85010030282,$70C05A78140B04A1
Data.q $AC561E140A85A2F1,$2D400AD1295490,$A090AD4AA551A15,$170D4742F03A4840,$458C0A08078428A,$1C1C1507C32CC09,$6D21403D942165B5,$C09075DA8A090652,$FABD141D0B084DC1,$20100B7BBD608120,$120A0E8181002010,$2D09C95EAF406028,$140844F1D990603B,$D24B237A18F466A0
Data.q $7F410C06E9F4DA5,$6700A9A03C080F0D,$7A0D02913C0966FF,$4D329738088427A1,$5A0B4EE270EA74FA,$F150C068361AA2C,$180A74C1F02B1D8A,$BC852D814AB8533A,$83C2B04CEDC6CC14,$F9B7F058240F578A,$189C3E13A607C158,$7C70171D57C462F1,$3E580904AB4280E0,$BA8886330823360
Data.q $B0634E8F34497832,$C00DA380CA1F0641,$1803224AC016B42,$5382AA02CA6A8A0C,$C2A7123890F442A,$4A328A9CAAE0843C,$A6B039C85BA4E8B0,$AE4EC22CAABC8BB3,$7C2EA300B1B21604,$C301E07308F23D0B,$2B1B2124492C43E6,$1207324CB2148145,$31CFD01885B10FFA,$41D05C148C3751B
Data.q $8DAB687A40954C33,$40AB5E0181F2703A,$46A9A9B0E2ECFD82,$230F38B3B44B11C,$BBA8FC3A1233C71F,$A42FF2322AC12D30,$E810043B2B5222FF,$B1028CF27004AD2B,$4C53E6042C4B03A6,$8C1BDEC83E52531,$D2E024AB4C00CD72,$F48AC700CBCBA4C8,$17A372F2340D02ED,$AC849959D6B5A567
Data.q $7517D6D262C6C3BE,$52E05ACCB2CA8C3D,$5BA1644A80400B5C,$4B45F65AC96759B4,$6033233F5AB6A59D,$4AB156724BA15DD1,$57566579715915ED,$CDB95CDBEB254B5C,$5157AE8C95775375,$C85C376BE8FA537,$FE87CBCD5D5D4401,$60AB43DF81603805,$4A1983E138101EB4,$C98160461B45ACA0
Data.q $38C2CD872E189016,$3F8DE3966ACD8D63,$BD361D878C5AB8CE,$CAF38CBD1906298D,$8C65B8863D91E258,$D9A6539465999E59,$5799E68B36779661,$3DF2F5608C02AEA6,$6697A5693A468FA3,$972CB94D8998695A,$7E37AB6ABAA653FF,$61EA988BD190EB18,$5A96C5A7EAF86E65,$320C02B84485B36C
Data.q $6E3B86DFA6C15A20,$3EA7A86A18AE53A6,$8E6FBB0EB7BD6F3B,$38D70084325BEBCF,$178A6F7BC65D8D67,$5FBB5AB19AEF7C47,$A467CB22BB7EE4D1,$9067D8961AB0693C,$CBDEA790743C76CB,$900753D474F28AC,$D897D6F39BE31A8F,$D713AAE63D7B1CF4,$A673358D5FA12B0B,$DA3F7DCC2A20E02B
Data.q $91D0F459FF718FF3,$7A3E879E09820037,$FEE9C2A75E87A7E9,$B7BA0881E05F1DA,$60471DC5BA608FBA,$67A3F880FD620D4B,$7954F7D4B92E4A9C,$97EEAB2C78D204B3,$FF7FBEA024036ADF,$EDB3C636FE5C1027,$5CF860440729E679,$D9372F6D5CC71656,$645CCEBF0342DB5D,$BEF82C454A8B423C
Data.q $955910742DC5E1FF,$6B2C4155C2140663,$D51FB026FED8CC02,$50B65E78072130B5,$843686D021EE3298,$AF9CCF3086F2CA8D,$A5B7DA5CA0DBEA77,$F800738E77CFBC0B,$1A866CDA2644B894,$B18DA96325001E6B,$564F13E18C2C6330,$9BA81129F1761BC3,$788D15DE1487CAD9,$344692A45A623342
Data.q $971C62600571CF12,$6AC92130AA2D3C68,$90C4FD9FB2150B21,$BDF02202D8943375,$F21EFC8581117807,$BE6DD194B4B086BC,$24A41EF4F80700A3,$6F71BA22B088D25,$DC548A6692763947,$7A0FFDFE42F8A2D4,$D945A8B264403012,$B84F65724602D20D,$C4A036053E24C5F8,$CF108F412685231A
Data.q $49A292E61A53EB22,$2B082C7193A55DBD,$A97A529884C7675F,$218A44F8190C4034,$BF35644AAC7BF2FF,$1B1A97118203BDB8,$F0740BCBE7D10563,$AAB742DBE731496D,$416254492C6558E8,$B52DD28D8C4AC7E8,$20094F99F0F44DA9,$99627A27A4009A24,$D8A3DD650609EE48,$22C518FC3668C140
Data.q $604C1528C1DDF4E3,$F0F648244883D44E,$3BFC9EB405FB44C3,$10C0C8BA885C5940,$1E8964F8242CCAA0,$ED4A7BE195CE2DBC,$9923B2F20A9066A8,$51423966E4738EBB,$A938C480533683EE,$1C13FC74D47A79C4,$A427EAA625085F1F,$ED80EA532B255AC9,$B68CD0B532020F71,$A9066C402807C837
Data.q $5061B948F4120588,$53E832F01A549728,$28E80C747C150E14,$5174C04E674A52CD,$29944849B8D4A015,$8AC0D5CC245C7192,$8BD66728E4EB193,$ADADCA4CD886935A,$3CE21151AA2C4DFF,$65E7E3FC02655C85,$A9015E23C012B33,$1DEF1D32CD382055,$E02A51881D828730,$DA458AB18DC6B243
Data.q $7E93C68DBF9B1D10,$91C7A3CF1DA144DF,$6D20A404019FEE0A,$34067B8C82AB8118,$2054CE9037E76E2D,$3C36916C9B946642,$64AB7CF0B68DC2E9,$193F4C68FD42A63F,$2ADFA4F632424062,$B2F2D8E5BC5FB853,$C9C5A9A19698F238,$6E16BDCC91BA6C05,$C8D6FB6AE8AD9DF6,$4CA2E3FBCE94547A
Data.q $3C7D61ACF529BCFA,$E41E6AD08B853529,$356B4F2BA6A90C63,$561CA3E9BE706A9A,$F9A7B255A45B0290,$BAFF3D93F11CE75D,$802642D7D384946C,$A2D5E56BEE01E7A5,$78E51A41A4502336,$EB90BA195726C99D,$4345F203F0BA1588,$BD01222B0EDBC4BC,$340C191A8B7719FF,$6B8D761580C2120
Data.q $54FC8937AF7EA963,$B94F780A48850B5F,$9DE3FB5675C88BF3,$C176262CC4CCB24E,$C007BB976B30B1F7,$CC3995476951345B,$4B1796DD9BF453A4,$7B4D84DD8BF2D630,$648C99870A43A8BF,$1E619606E48E1B8E,$FB2509725D908911,$CBEBD101A01A2BE6,$64AFCB12400B3ACC,$F397286D40CD84B1
Data.q $D84E343156CBF2BE,$353C6172669DDAD6,$331EFDB67CD057A7,$25052CB66CA6939E,$33553B82BC2FF006,$D68C12D592C28C13,$A686506AF60522F4,$C68C4C6E8EAC977A,$9BDCEA9D2459E1D8,$D7D6D1BA5D9D6D9A,$CA5802578770199,$87A5C0600DDC30AD,$7C86AF74A5B2D79D,$B7C48A6A8D4FBBA5
Data.q $28488B2629C537B0,$B6E62E8EB1A522FB,$7A9145F96DDB21FF,$993827A7C21E8CFF,$C117B51405AA8FCA,$B94DDEA7E1AAF0D7,$CFB7595F17E04737,$44BE04E85F858922,$3E27DEBD011405FC,$264B13E394F09855,$3A4DC84DE12CD627,$BDF99065EDAC02DB,$612379C41B5CF246,$7531E2ED69281BD0
Data.q $993D99596DDD570B,$7A433306F3B43177,$C1EFC8304EE79493,$9A12ED324A8DD5EF,$354C00426CB9DFA5,$95B88DA364AD9FA8,$F8E706FBA9735AFB,$791A771A788DBABE,$275F3D1D7363807A,$18C16B3F76ED1DE5,$75CE95AFC4F70E7E,$4EC276A0E31A34D5,$E9B42E7662A1AC6F,$337C326D7AC0F93E
Data.q $37073D4816559B30,$17961BD7595B6079,$383CED41012C5D7D,$ADA1C03AF1D707B3,$21FCF21609E53C92,$BCBEC5D947A2F0CF,$27B7647E36DC7BFF,$DE438B329F7D5C31,$D14429399B8F564C,$94996C0D6CCFABE5,$656A6CDBEA33E62B,$51B3F9567CD42317,$AF49EB3E833773FC,$9FAFA1FA1031EC97
Data.q $CCC721A6FC8D9FB3,$493BA6C5DC522B4D,$C4608A530F63AC71,$F32A63AC2002B1C2,$7D08A98E1E3BEC2A,$8EF09B80A8B90EF1,$794621324B280BFD,$A293D8B298F0BB0E,$BF4BBC2869869670,$19CAB0C38C9A138B,$E71CB93E28737D8F,$BE691B1482E6A618,$409C8044051AB1B9,$47C054178A3116BC
Data.q $3EE0CE91A39E8EF1,$59228BF80240522D,$9622D0CE94941080,$C188A88888109C1,$741D14A2318A4189,$2288A8B0AD480B80,$24ABC7A3A11D0C19,$D1030084102C3157,$AF00800D09EA4B30,$91C00D2228A2AE68,$81AB9A3B0E09EFF,$115C388CF37E0B4A,$DC1343B1480D809C,$2080A943A0828F1C
Data.q $C01404948257805C,$C915C320078AC9AA,$838DF09890BA0BA9,$B0070AC0F1C140,$F10F09C42D190186,$B43B4333F68E940,$1DD43B420A4B1ED8,$F9CFB9F93894110E,$22A9D0058A30F1C2,$808C564149424452,$48AC4382FF1640F1,$7A0EF43611A8BF8B,$B30A41360B493DA,$B0F240411C8E7434
Data.q $D73E215288AC1243,$3F6C2529B10F3313,$28E0B7D80791B0B5,$578F189EBFA09C43,$F29AF3210B98A2A,$A0B511A44A43C405,$D614211608189C3F,$91AC538BF8F2ABCB,$144A8C12A90B08BB,$A9DC8AC0CF43D44,$E9C6C43A09C8028,$BC683C0C1DC4990E,$1B80F80A0D0B558D,$A744591F7AE9A464
Data.q $64C758B92728B9FF,$B070AB98FC54A4AC,$F43F9150B009CC20,$F1C74C3B0AF8C18D,$947C03C4B27A2698,$9BD2227A618C7147,$2C829464580820B,$30D24B499448414C,$B48548E920A080F2,$B83F8C87C8710537,$C37BBABD94339E19,$7191A13409965991,$98197BD145B9AF98,$CAB8B4945BA5A139
Data.q $FCAA3FB4AABD2CAA,$A340ECA244BCA9BF,$A8B30F9F536508E4,$FBCBC3739F1A33D9,$C5BEB97D197CBA1C,$1F2CBE2074AC3BE1,$EB3128DA2799E190,$A695008D4A38D112,$3E13D21AA471A8AC,$2B3D3D04BE22733D,$AD3C29C4B4E9E544,$C0F37F46548EAD11,$64888C188B80FC87,$D2CB8087BE69CC24
Data.q $24618190A1F5985C,$82014C93CD4CD478,$CEBC0CDAB2FBAECD,$B50018A28D14A2C,$921FA18BBFB40DFF,$9AF1DB33CCB01AF9,$94BF4DC4011D6BE1,$E19AABCCBD4ABF2C,$8F4861A129E3FEB,$6CEE9308B4890002,$D99D69D19DB8C610,$CCA9E41BB4F24BAC,$8FCEC0A6CDD38A,$F88010914EF13589
Data.q $CAC4FBCF34F0092C,$125E44D4F5A37CF4,$895D004EF13189,$B82503CFC2BCCEF8,$A08CF5ADA4E3CC6,$94F7CF9890CFA0D,$4E51D0CFB4FA5095,$24604AD5044E9CE7,$82090E51568DE8F,$D01092D088C3D095,$E3F39941ABD0B8D3,$BCD17CFD19B996D0,$51197E0A4D104EA9,$F00C008501001930
Data.q $9250ACF98C3B71D1,$16A4F0D158D2D020,$50041D8CF24BDAAF,$564E69971EC80500,$CC13D3528187BD22,$5120D1CF6C2DD0F,$DD00C80CD1F0098A,$9B1502D0A5208A30,$FC2AF3524DD240FF,$5191CDD35AA0805C,$AD39BB9A1E1629D1,$2D085079A1D069F,$2E68C800100900C8,$34FF929D1FD31531
Data.q $4680E00D00A3EED2,$8055038F180D5465,$65485470AE80E0B4,$4AD46A46D37CF236,$9CB4EAA2D43F9E0D,$700C80A51240F51B,$80FFD55D5500100,$894CED00C5309FE0,$BA489AA523892514,$27D4808BD5CD4680,$88BD45A8F4B296B5,$BD2780A00E1E0D4E,$6255D2B52ED16B52,$4FE2AFD6055F9495
Data.q $20A08024F8D2ED2E,$CC1F50AD2150A80,$A1194D5B1070098,$4573A9E41154ED62,$5D566D5DC6C219C8,$50CA1D11D577D73D,$D72562D499891B3,$693D441D577D731E,$51490729B2B14EB5,$53D700100A00C807,$C93258555580055,$D7C0BB534D700080,$8B58B00D572589FF,$54EC6C22D5368F1D
Data.q $47BA4958FD8A546,$8ED8AD900079D0CE,$D51D7F162D4858BD,$C8090014EF53E4C2,$9C1F55380100280,$56C80C809D6D09D0,$84771E01891AB534,$8E280C351CB5A1D7,$5A3551DA25A14775,$5D77DA5D7D592A7A,$2FD974F5AC145FAD,$135801113D40CEE9,$BD6C8E69B5D53CED,$44D1D893DAE009D6
Data.q $5645272AED5C9B35,$3D3C1575645B6568,$B0D27D640B088B9C,$C443A5CD11F2DB71,$EDBFD24DBFDBB0AA,$15984CFDAB2865B,$800585801D870080,$858200055408B1E6,$93D708D34F7DAE00,$2D59C41BC8D68BB1,$FBEF1D957598CDB9,$34D5ED92591DD018,$CEB5C25480C1BCE5,$42E7555130CF75AB
Data.q $9DD9EDAE09189D0C,$AD5D88DCB5218035,$E55DF2351AB574FF,$5CF575C0108B8059,$6DAADE49C75C198C,$1D828035ACDC35D,$5AE0FF002008D3F0,$E9B35DDDDD56F556,$5DE23BD5BA1ED5D,$9BDDD3DBE5955DFD,$FD6A24AD960AAD92,$DC801587DC4CF880,$80700900C00CD825,$F52158700600156C
Data.q $EFBB25E09A11ABD9,$BC26025F3DF0AA95,$5C38B0A5E5BEC5C1,$B090DB3906580DF,$582E090ABD13D9E0,$B8D255A002530555,$8DE011C55EE98FDC,$D49A14611A1DE035,$DB0D2AFDD5E04DD5,$4CF9890607D52C2,$D1DD0988600053F8,$15EDDED5B189A9E6,$A7098DE19BD60F9B,$E13A565E31B3612D
Data.q $60829AB6155F3DF4,$250A1070D1510E1,$DEA88B80000300A0,$20065C4D85584D9C,$1F18DE0E89660809,$600575A27E10DCDE,$251F29FCE21A1AFF,$156C3C38AE051BD6,$35C58B55838D3E17,$DC89C80C9B58C409,$E2F5004ED51F5555,$23EEE3118D630095,$4F634E22643D7563,$E383E26469B3E373
Data.q $A0EB5FA107E0751B,$ED5429E7540D84D9,$98CE41CEED4053F4,$2E22A01644D7A642,$B1647986DE380BE0,$DAC3F5E48C8EE559,$5DFB65A51F0070D3,$4DC4CF9E2BE4C5C,$E105CD5FF61E61D8,$16625DFE45A65620,$8AE36636E246359D,$30D3E49C2DA4B3,$F5DADFC0EB66965A,$5118C650130E3B51
Data.q $1AA6633DAE52534E,$FE721C7623A27E53,$91305F60A543C2A,$584D8600A6696698,$462E6D13062CDC9,$E2E201F966F61FE6,$6731B3E64DD36705,$930105552441AC1,$AE555DADE76D1E80,$BB67ACEF62A2E75,$EF67EAD1D7A661FF,$2A955046C3A86615,$7681BC7656BB2E14,$84DEAD229072F9AE
Data.q $D860095825AE5FC6,$7D24DBC8D6E51E4F,$BB80ADEF6339575B,$5D10AEC0BE97D275,$552769C5B7DBE9D1,$91609681A99E65E5,$5C9E5A6845AE1316,$91B350B62B002D55,$9ADA2D7DDA8C350D,$EA9C63DA980527A6,$4240A1457EC35573,$37D8D5A9D786ADA3,$D22906682CB4C586,$75309E7001E5BD1D
Data.q $D5E226A7DFDD5388,$54C594D4AD9358F2,$458B6BF6BD246A8F,$518A5CF548D8BD9,$D4AEBBD4BEBC4328,$11589DD8AF673D48,$4267600752150158,$A1DE87E9580700BD,$1A6A6B2BB9EB129C,$499D1699D77ECEA3,$A4EC6C3DD73ED15,$A62BD08D08627A47,$649976880006D759,$400654AA0EA069FD
Data.q $9A27A3B3EDBEDBFF,$553B5A69C5B6DBF9,$9D14DED13012F6B4,$DD3CE4E7D1560DE7,$625D79D17BAFDD0E,$69F439BD45BC0EEA,$886D76CCE186D95F,$E35519CDB3CD9E5E,$A130DD7CCFD61262,$FAEE6514D218920F,$CAC4F2ED23D1CA7C,$BBB5D0C6F999A24F,$BD8B11F2011231A,$802C6389158108E3
Data.q $D0DF1B3D5AEF7E07,$ADC064B1BF28813F,$1400C10BC404AA94,$D5F13F1BFB14191A,$B14E08994562081B,$9879AC9BF407417C,$EEB4ED6553C4BF12,$C18000F20000EC4E,$8E98018B00C58048,$BDBD3CB5B4640D0A,$B41C088CD1C6545,$1471D86FC46542AC,$A5FF950141C6D8BB,$C6257A19C25419F0
Data.q $804941083CB77110,$7BD742A8B36D080B,$15EEDEED0E56A1BD,$48014936551D8047,$C065F65EC1E8B9FF,$A2BB9F2343B18C4,$DEEB43C4418B0470,$518F08B4A0BF22F0,$9AB73A481148C53D,$CC47626E3873242F,$32C6C41373C242BF,$EED72E89BBDF10BC,$AF17C256D99494F8,$5A56B00791F09008
Data.q $3464650AF88143A3,$95A3C5E1CB8A20B1,$BB08A2870BE20BF0,$467F3F5AA40411C0,$1681C178AA9B4916,$161458A4DEAC6533,$53DC022FEC1B4809,$A0F4629004F481F4,$5900A8E88AAF6180,$D10453083D7A66CD,$9116F26B6936530D,$AD4560AAB78A80F0,$32309CCA4A0BC49E,$AC047588A40839F9
Data.q $208AC5E1F230E4F2,$3E1F2D76C45D30D4,$79847017151C908B,$EF11D5E93654ED8B,$9CB19EC16E2FF038,$E1150B41380BB9F2,$712A33D70E9C6E0E,$476C909234B8C054,$2C881948227F56FF,$42A09B947F4BC3B3,$4D1F7093E78053B,$156AF00103BD74C,$6BA71BCF7D228907,$FBC0F06213F129B2
Data.q $8B96298EA7A4E470,$3AE3C2795DBC7121,$34E21BECE18BD4AA,$58DF60AC78FD2C4B,$1AFD5B51DEEE6EE6,$C4E8D3A7A54FBEE8,$A9FA2F47AF921E68,$9ACEE892CA3FFA3F,$F99A3F38C2FA6529,$57201CCCBCBBD5A4,$7A85F3CE8BB24CDF,$893FA2FA9F00EF4,$B21680CB0E888480,$15F16A13F15B3F20
Data.q $D1727BC96D6DE969,$9698E96596AFBE16,$F9D79BF9AA29966F,$9CB03D33FBFBC7BF,$4A3C2998F9C8AB16,$AEEFA2FB67A921E9,$4F02A9C8F73BEBBE,$80919184CD6B7A89,$CD6210FD33A11A51,$E1648CB0FF8BC942,$C592497B0C80FA95,$97A5AE9769798B18,$251D4A680C414CFF,$96E8CB124FDA7DC1
Data.q $5D557E2FA3E0D61C,$D97CBFCB77814F93,$FA8FE827D9368096,$FBE380209000488D,$E580DFED80EB5580,$FF11108E0139D8B8,$20A10DC93A90EFF1,$FD1800870A2D42D4,$8062A7114B148F98,$1B2700716C0008BC,$D60AB1290AB7DDCD,$180E038803308FFF,$4030381C1082040,$85C1C1C068501408
Data.q $C322205048140B0F,$B0B8CC2C060402,$E1F0E86C2E150A44,$E96CB0001F94CA24,$7CD2673298CC25F2,$742F399CCE024109,$28000100008199E8,$4A0A51E44159EC9C,$A4542974DA684295,$62AF560B54EA615,$EBF5BAED66B6170C,$90403D3431610C85,$4B681AD2070301C1,$30040C0C06C081A0
Data.q $26D76D815BADA080,$E975B683E1F0D8E8,$859AD96AB5812FF,$30254DC601A3520,$619168A45A136A02,$417A9C8411168FE5,$6D2E926BA2954983,$BE843212D4CEA69A,$3C2A1D94042852C0,$97B8A55442214080,$60ACD5AB5580AD52,$6417215BE2F1387,$F3A096C0772AD7CA,$6120CC3826178284
Data.q $B1285456291A8741,$484D340F73B5736D,$3016D21088012F11,$3C0BDC8E4763108B,$4FA3D16824751DA8,$5357F007FE01E93,$50415499AC4E9AA0,$F6F55205D290392C,$5657E13719576F60,$8090314D5394B6F5,$C96C75DCA5A16659,$5A0095B1750390F5,$277DDC5ED084096B,$C8A010024044759
Data.q $D0C435D24156A5C0,$F40F4800E60D0E61,$7D5EA02408771FF5,$B7E81B06818055F6,$503C0B7FD31805F,$20480D2F94600800,$54B81049E4E4EFF,$C18059220641F978,$3C168515683E6755,$952499CA49041518,$95E1CE5AE47025F5,$7878D105CE364227,$8074117B729855C9,$1D9277A470090B46
Data.q $40D92034065D00D9,$D91805008025B586,$F01C08010010068,$647909BA6D915528,$A24F6852448D4A92,$681503DFE4C2594,$597136AC11B8341A,$44B0010000F98C1,$1C46F81B4F41F05C,$2C0F9C6196E61706,$B4AD302809B3D080,$B9CE750280B02ED4,$940DE09E90891C0,$E1C5B50E7940D411
Data.q $110CA39CC72E9D01,$A2232A740801C020,$501A9EA780402176,$803DB5662F142DD,$9F5051546D9B5918,$355B522A5C22CD6D,$7F92CAE52BABAAD9,$850317A89B406810,$1D6841881137AE65,$6CB4A415AFE09014,$2DCB3029DC0EB3FF,$333CCAD30200ACB3,$DE719CB0702F32CD,$9C5D773AE89E9D19
Data.q $9779925AAF863507,$EFA26897A2324090,$A2A409DFA7AF942E,$A80FCE153839B953,$C401CC399E6E5F6C,$37FE0D02B14C4F11,$5CC771C0401A03C0,$AC450F6C06927B0E,$DF797CC08CB98A49,$B5ED9CD6DCB4B32D,$C03D4DC0304B66D8,$69CA9E301007885C,$626C0801429D3A59,$576D1F95A778F
Data.q $D5DBCC1008D4698B,$EAAB58A9549E8A10,$27C46630701A57F5,$80A8341000C00D8D,$7B13AE015ACC047F,$C9D366B928065AAC,$1B4F7FCC7C3DDE9F,$73F3381CCE77B4B8,$1DE88D86725CA926,$3AFABE351D350AF5,$E79DB456BF50A314,$305D549BBE3E8FA5,$AA71BE6F955BAAD2,$15F051FED8FADEB3
Data.q $13C8D5B0701450FF,$81449DAC6A7BB007,$534055568094004B,$9B3C5668CB599B2F,$303404B7E790F31,$3D001E025672CE7,$A6308918C72C01D1,$A31734B057C16931,$515100E53F0914E,$1038C6F615BE37C4,$4DF83EF33EFB0E22,$6000ED0078177E4C,$1023FB572FE491BB,$77A01497ABE342AF
Data.q $983C47884680B926,$2304206B7D5AEF15,$428720E9D5C03CC8,$262D1618B0024354,$902730B021224089,$6F9F3C2B8590A924,$2D386FA61726C37C,$DF892A75A935874,$2890ACD60B017E60,$40492724AAED28B7,$8A2CB80E126586AC,$45C52708F3A06C51,$248C5161E567304A,$C002228A39951693
Data.q $F19DD094F3E85F9B,$26C4269B80BC9E7C,$844AFC6D6B07140B,$7586AD89B0B0F386,$A9BF623605D5A4FF,$364A1B72B93FC958,$625525051097B1B0,$CB31C3384614E159,$9F598F230FAAD759,$65C87AE751B06565,$666B909D95426004,$250A4A438C851D14,$261E7161895B7505,$61C4368F67F094C7
Data.q $970AC1D84B58F2ED,$614C07832F12BC47,$9531E4694E4E7226,$F2FC60E524FBB5C9,$EE9D199ED2105B60,$C2F8D929DF43EC9A,$8523795C7C451D09,$754AEAC157CE33F2,$EC8D9230129CA1BC,$803EB100D25C3F91,$80A01F28A03C98A0,$9EF3DA7AADA6608C,$14B569FA6F0A648E,$BED5D0CC27464902
Data.q $649D557366705099,$CFA90AC6B2C142E8,$29F4B345289C716B,$9664011C7F12AA1B,$DD800498931AA4B6,$180B263010B00963,$D6BB3DA3252C3390,$21795041CE81084D,$E5826CBEA9B69AFF,$9C556B5C2B651094,$2B0FC26F33C70133,$7E9412C9F9AB98E5,$E1FE2B0AF91EA345,$2530AF89393D02A4
Data.q $12337077A0123000,$9B141A7DD5FA56B7,$6F4A8B334326F53A,$D741A1859EAE083E,$25175D522891557,$495A4F5094ACFCD0,$554B0C04AC2259B0,$4840B42523B0E804,$3193731244A4203B,$65875ABB2F662CAD,$F56CEA2B6D3C9493,$154C294E141A9ED9,$A2F6A55857AAF2AD,$D54ED7712C9F3C6E
Data.q $48D3D7993F24E4F0,$E30929EC1CD09448,$71B6344DFB90F8E7,$2123895B6E25C3AC,$36DF2D7FB975AAA0,$772109C93826F2AF,$4E199226060259DA,$93EDA21B80F5734,$D2D1D28E4700A16,$BC30940B81D7FD6C,$B130C02A49EF1AC0,$53706E13E89B8E8E,$43A8B892FB5CA7FF,$19AD2192A10B2505
Data.q $DC5F8B98162DC029,$D2CC73B4A48D5462,$4ACFB2EB36600A00,$90E1134983C07B69,$E03C00E167B0056,$2D80B3B86C0B81FB,$588329E25BDEE9B1,$5FE3EB3552495074,$80700B2C01D7FD95,$BC8C84219DE2E80D,$2C0D475C713931B2,$5C1A026543F32380,$60001D4BC6AA5BC0,$2515694EDB6B1600
Data.q $5AE52AE194A9CB6A,$F995ACFE23AE3A11,$7E5D534C08845FDB,$8F0EFFE5F676CAF4,$D159C7749F9A72CB,$924051FE01054F1C,$B235469320C763FE,$A696164AA51E23D,$2CA9886F6AC603F2,$90C3EBBED36AB962,$6B4AA2FFA476B58A,$2EE64D79AF953CD4,$BCCAB30630657973,$3E69CD0AD19CE96A
Data.q $6D9F203E70167FAD,$9A9775831F980A00,$B01958A4A733FF,$B3DAC4943262354D,$65575B3FAD342683,$BBA527A3CE70D0A5,$168C5BD3552133B5,$852123996DE3BE36,$6CEBBA6F27DB5B02,$A5DF400B7618E2D3,$AD7FB90B5260C2B7,$B5F381B24CD849EA,$72C1A1B72DECC14A,$77B27398B7EEEBE8
Data.q $D82B7B18658CB196,$90ADD5BD8CF8FEBD,$6AB1D64B0DB2ED77,$C0105830D6D2E045,$ADB65B67102937CF,$64BA426B588D5440,$73F96E55D6571E9F,$65E43BD53B2DD4ED,$6DE6F6CB99672C6,$88576FF0DB04DDAD,$742019035292B514,$244011D83F1C0BA6,$90BBC627CF1DA3E7,$7BA040E263C97D01
Data.q $EBB2A5853B76544A,$D64FA82766B4DA80,$15461930B5EA739E,$536CB147C4341EE3,$B0D37C1381C7E6BF,$A7B54ECA392928BB,$E32E55ACE3F166FF,$FCC89E8862B2717E,$8C22FEE6C036FDAA,$BA2A0AAAA14DBCF4,$662CDD6F7CD6726D,$49F18EAF422B6B2D,$2652123493D92D3D,$2F2DB6C9AF0CD3C9
Data.q $9D35767506CB89C7,$E433D7BD6BEC578A,$801B6010B1926BCE,$51719ABF00D526D5,$57FB8566ABA954C,$7D7EFA99EF61C5F1,$EE97EDB43C6FB695,$6A499FBF6475C8CF,$A8251F1095761278,$3BBF7CCDDDBBB76F,$CAD4C6696907EFFF,$D5509B99504C5DE1,$EA9F1D421EC5F897,$5BA11ACF9CB1DD11
Data.q $A5DF4C4DD89FCC49,$84CEB5F09FC4965D,$CE19E95C9C6284A5,$B932CCE5E79191D3,$F9470D28537DE0D7,$57B1D9950166D370,$B17051BCC1885D95,$C49F9D929CC9BA0F,$4FF0EBDB55B54EBC,$549DC08EB606C06,$212CB3199557C9FF,$B189D7BD508554E8,$548F9D4ED2954EA0,$48391A1680AA97B0
Data.q $C9FB1421299EA15B,$DC8AE60F20EDF415,$84E1CF5E4CD9CC70,$2E121B9049169481,$ACA0C96FD4E0530C,$12911A213A152021,$7188D440C34E8C9B,$4DF41AC60CCC35E,$4500DC88058DE0F2,$916159D0C510E8AC,$D650A0DC1481E5E1,$CFAD88D3659420D1,$E1E5D75F855ACFA,$164C19EBDE6D5D97
Data.q $1C0E050EACEA9ECA,$504C46D84B1868AC,$8D96C84E8D8CF7C0,$97B572987D865FD5,$91295C6A1E5FB216,$934712185F709A12,$D2A17A57BE028AD8,$A9BA00596FD271C5,$4888060F622224A2,$4C8C440001B804B0,$C0388CC000455F5,$AC4A2075B384ED6,$C9B5EC1C6E31A0BA,$9457DE89ACDBA1AC
Data.q $467D93E3B988C4FF,$C5AC1E1D1BA1D97C,$7EA35218D1C1C594,$C0246D091805160C,$51D9405A2C86D0C1,$638EEC9459CC0384,$899D27C49CDBD9A1,$28EA97C23D5CE187,$3BA47DF420AD5C97,$A2506FA3C248806E,$5E2EDFAE488EA5D7,$50572129A1611C21,$2401C40682495945,$89F4DD2441C80494
Data.q $547D62C86296D0A,$644A2504E51F16D0,$7188A461A08C5CAB,$4A5AB9ECDC423CC0,$DD7CAD648DD74ADA,$152AA3F8FDDD7C56,$4FA3E93F54EE325A,$A4D63460E10C559D,$FA2C9D9635A2264D,$CE91222C87D1831B,$A2AC4E6066505015,$A97C8B1948467C7E,$488074D81D7A04D2,$DE8868253A470B16
Data.q $F8EA6619E89CCA3C,$675C4C494C3A54A3,$A32067A57E205661,$A8EA63D87DCF8DD9,$19C496640659E2FF,$1200A880008C845,$23003C8CC00E37CC,$6C8AD9C0E2464E2,$411F9F95BA1D7A34,$6E65F5A120E6619C,$C58A601C40818582,$9DAD26E64A248A55,$2EC7E17A215A61D8,$DD823E1F7A4B587E
Data.q $9C4B622A35667634,$4C060C784B8EBE1,$20E992E2E138E59A,$3A6C9ABA488B10DD,$3C86CA10C06406E6,$261E63E6CE626702,$391A5FAE78858670,$FA60B965DA162821,$A46E3DA72D0C55C8,$A275E0FA74A744EA,$68A80A48E7A16146,$A821C41448DC2394,$A660684610E4A661,$10C06249E605C6A4
Data.q $260161E631C4E602,$763163AA1897A560,$8291C6635939A222,$1FBC69623E752676,$D9D7C92CD54C784D,$488B14515E8A11A5,$1E8A04E62648DD7E,$7C495FB249E10E7A,$4C3E7BE729B7DDFF,$C8588FB20B28EE6D,$800F9A4757D5A1E3,$21E95160A55FA7E6,$5C7F093E74949A4D,$C1612CFF1545EE15
Data.q $279C98D11E34C67C,$28FE21A7C49363C,$AD6840ADA6028229,$28728E6822916870,$20B1284E9C9FB27E,$6563215A972A1DA3,$1C6A3D1B96564072,$BE8164DE97677262,$6C07F298000E9806,$4B907285C85344E5,$866686C9D784A665,$60284E608B152AC5,$259A9BA5528F69CA,$704F654E70929270
Data.q $39D1B61EDDE26064,$586316A12186A0A,$3006E63D1C23C2A9,$F76A3EA3AA361125,$5389723886BCB00,$6805C6758B5066A6,$9C26DA6DA8FEA7A8,$95FA539552929F96,$BC56E3027C5DE138,$C6A63DC6E6C58A27,$9A14EADED1C6E9E9,$3A8F6AC2532488FB,$4D2A3DA6AB0A6FF,$3486404AA544C68C
Data.q $1D8B88A4882A600,$655093A86C684C98,$16ACA8EAA89E8858,$92085806AAC647E6,$C85631C55A3C278E,$AE9120A9C4A6C603,$BB6A1ABB5E8A85E9,$2BC68AC6CA04A88E,$E2BDE75D562BCE5A,$75C736BF2BEEA5C4,$6B7E3CA184DC12F4,$5255EA81F9648D2E,$9EA21EA8150AACA2,$1ECEC2A7015AE2FA
Data.q $EB76A0D2829267E,$F9EC9221EBB2A9EC,$2CAACA4002D42C99,$40736CB6D5ABE804,$70679E2A8589CFC0,$27A67015F9ABA826,$90C3A918AAC588B1,$31C5895CA5466CA7,$27FA82678A63EB9A,$8253A04AC0A18868,$4BED46BC65D944CD,$6A589725D2B18430,$A4042D5EBEED5AD5,$D8E9DA3C69C26169
Data.q $A5566CAC6E90A906,$A67A90CAAF24A6B5,$A85A3FAB7AABCEFF,$3ADF2DEE606CCAD1,$9145640404B6DFAD,$6E16D5A992E0EB21,$F69BA6F0B1111AE1,$8F27C5C6E7A1D7A8,$1BA11FA482656642,$29C4E3C070EDB6B7,$F0A6E69CA8F69D69,$6E96A36E8C93EC8D,$E43E508060B24C9,$536A5CB90B306AAE
Data.q $67069F65E1550C80,$1263A7A29295B263,$F904929FEB628D5A,$276E60893A0E6D12,$28092B1B76B06A7,$92CA76D4574ED3A6,$6F51548805540564,$9192DA9C8668CAF5,$55EAEA55AAEA8744,$EE6EA95E5AC15516,$FA6CDA1EF1E84702,$78AFC9E32AB26DEE,$297AFD65146C9B76,$6402C535092E04AC
Data.q $FFA6B2E06EA0FECF,$282700E2D8B32F52,$6ECE61F2E4527A88,$3A4A2EDAB6AF7E7,$4F285A622AF24A3,$3CC86C8AF99522FC,$894667B075CFDCFF,$52EA2FE4E48AFD62,$C36A4309CC8C6100,$59D804ACAB0AB0A5,$5E27AD1E84CAD006,$729D770BE18EDBA5,$C57E6E1DE286EF1D,$3EC8E352A86B7684
Data.q $124AC0ABB11A8E5C,$4E6D86B131CC3097,$430A715314CA604C,$B7D7E62FA5EA6F40,$6D7A849552D0A856,$90AB2CEE9F30E66E,$CCC529DE20F30FF1,$4D8EB0AF3253049D,$76E9CA75016FE400,$FFB1F30A31440245,$6A9EFA2C106B5DDE,$CF17D88ECD9E2E9B,$DC1E3325AE6B0D23,$646CDD278D4986F1
Data.q $42B3C004FEA9772C,$A53280B271310940,$7178496C031F728A,$8A6FDD796033223C,$6DA8F136E7C663ED,$C05A192676FC660E,$8807005CFFE5FC02,$11F1C1DB1E60684A,$4576FE0B0046B07F,$8EB273121ACE6857,$E90C9B23D9779BFF,$9684A92EDB10CA47,$2233EF06B357349F,$549CFDC4F7376192
Data.q $32E4EB1FD58D455,$6D8567274F768164,$AFFB3B184330B304,$AA84210C67F16700,$9984FAA9E87E8527,$803F3F9EDB41C4AA,$C007C5286CE50005,$35347E0ED48349DD,$240071D801ABCE,$FC69908004186AEA,$AD807CFFAF534450,$EF1F34AED1DB26F8,$5895120EA374B10C,$48F49CACEEC40700
Data.q $469EDF6F28C42B00,$6727F3A080D474F7,$D4C69CA759331332,$7016CF584F4EF4E6,$DC0F389692D0E73,$5FC02992E6D403D2,$44B10FAFDB59B382,$352691800533A001,$FCB44757469A6AC5,$341AED6CE588A451,$706D2A1B5A359B51,$69D2B75BE97244F3,$4BB55F1305D583C,$9B0B33B35EDFBF28
Data.q $120EB0B62F4FA9FF,$6AAC44A6118A89A8,$91560AFF54B38F6,$DB31472FB130021,$2ACD561AF534E765,$C8B2573F768AF2F6,$68BDB3F6D27876DE,$774BF2FAFE11804B,$6544D6A4F2825045,$B66F6EB1B898F3B3,$5C9676EB24F68310,$A7743241853402C4,$EBD44BC02C575468,$F5BF72F4EB6BA2B
Data.q $B3F266FF2FD760F1,$3704AFCBC85673A2,$73778AEB77000459,$7EB3870777824449,$577302FF28B378C,$C698B4DAFE769898,$9D95E711B7D0AEF7,$89604D674F812D36,$B74C84B77A9B088C,$8273BB31371CD8F7,$57B2D7AFC66FB1B3,$2B56F07F5BF541D7,$80B3AD0F6FE764B1,$592A40385F6C04E7
Data.q $3DCC6130B2406407,$B1A9804B55476D32,$6AB89E2D343B5CE,$36881F9F8AAFB005,$F9853CE209094FF,$A7266BCF7E77E2A9,$D08FF78EF30F43F7,$91A278B6CB47B8FD,$16F5C878BECDE0CE,$C9B72F952A90D78C,$F573935916B3CA7A,$1A7738AB945FC793,$408658CA94378BB2,$79768CC8D88789DC
Data.q $484CA97F68B3F2F2,$7C37BEFEC05F7FAA,$B8B794B9A561799F,$639CD8B6B309C615,$DB702C92F97396ED,$B84F1E116AD43741,$1CB1772FA138A3A0,$A82D60409AF041FA,$394B3E456BA3BA37,$AF2E799F89AF39FA,$7AF8BDB7B4AD9A34,$2BEBAD3A83A79064,$9FA9938B975614B3,$1B3A5DB69399CD7A
Data.q $CBC573ED9B1B2392,$B6E1BA33AD0BA0BE,$AEF1979778A063EE,$3853AA046B637AF3,$75436ACAC937CF3B,$B2C5CACB7B27A2BA,$6E87B3E2D7ADEE1B,$9173C02069F82BB4,$B62793FAA45F46FF,$7B9C9B17AC279F35,$B6FA36F5BB8BB2BB,$BBA3B9F91FA9054D,$290E89C4EDB7F75E,$777A009B89C44305
Data.q $7A19C47AADCDFB03,$27A2F9647545C143,$102993B33B8BB87B,$A19BBFF686AEBBF1,$19CE803A5C002583,$A5EEAA385D964364,$BA22A1381A0738A7,$93B2FC5FAD7C55B0,$843A3FC6EE1053A9,$1CEA68E987793922,$4AD48CE04B10A098,$FC974B723B5AFF2F,$BCC8919B274D3BCA,$8BB37CDACAFC5FB7
Data.q $AC3C7F822ED90B72,$D193D7A41A5C58B8,$B44E7B016BD10C50,$D43A2BA23B12F2E1,$AD57CD08DABEBA87,$6F1F3D546A4B92B2,$F48AE781387BC75F,$3C110E8D6B6A34D5,$92D4BC287D000045,$8D216DB7B196BE3D,$7D4BDB3DACBA1980,$EFDDBD23DCFCDBDC,$3D8BD6EC97BFFCFF,$E39B686B313D22D4
Data.q $D53DBFBDFBDBDB5F,$F97BCEBBEFE72A57,$5FCABAFAA3F6EFE5,$E43DBBE8AD57E97A,$29C791BDD7E9FEC7,$DC4C3E12E9711BCF,$CD0882D5EE1777BE,$1612E1212FC66EB7,$DFEAFEABE577C7DD,$B86CABE1BBBBAA1E,$C4EBCDFA8BF1BF13,$3FAEBF37F4EBE3F2,$EAFF4FD8FF47F43F,$293B4E7F93E97CD6
Data.q $A3287F8BF87F83B4,$F03153D52D52A5BF,$BF83D66907C7380B,$67ADFF2BFC3AFFFB,$8341B02810484008,$6190B8541C210381,$2170BC442B078743,$B8D07C3A1B0D8643,$1486411F8F476391,$A65127930023D239,$5F26018025402954,$3787C264D33994B6,$9F4F67336084DE71,$C622D140C446213F
Data.q $3F4BA552691248C,$80398CC25800A74D,$4F2674FA8C9EAFF,$562339AF576B95BA,$D167A651E2F15A18,$A020100758AC532,$AD4D2D7550202016,$D122560BD5E6F15F,$26575916070169B2,$21A0BC4C34150855,$B9AE12632FB98431,$35FA8412CB657297,$BA6192A6E773982A,$1E0B07E94291307C
Data.q $93D063C298C0A03C,$8A862C33FD96C72F,$6BED5BBCF5983B45,$42FA60A85C3814AA,$80A0A8701E08AA70,$581747A1B3BBE4AE,$6E4B7BD7DE6E735B,$3B8408E544F8215B,$9910485F8A14B6E,$9BB27532FEBE973F,$5F1781BE927C7B1,$C116D085BC2A14,$D8F5340B9B83DD05,$3E00D228EA2F302B
Data.q $13BA0835E90418F9,$EF3F008028E6C02E,$70EC0D022D6F402A,$3F11C1AEAAC4B0AB,$34A0E38AC5008D02,$7834C545202A5202,$438AC0029325C0FF,$B4148AA24BE4710F,$C4B7EC22351FC48E,$AF00010D3CEE5038,$A11CB9D0CB8AE534,$4AD20370B1C40A04,$74900A48AEE00721,$F2BEED502E048069
Data.q $734CA31BA9EE6816,$85124AD1F2C8F73A,$AA893CCCE1A26054,$94BB2E38AD2CB6E4,$DD3DF044A3354D09,$E0783805C8506CDE,$1EEF48A04CBD3AAD,$A174AD013F4FB155,$650B4222CA202CB0,$ABC58D6C2CE4B250,$4AAB95144500AA60,$4D1052D4B5295200,$B84F4CE14EAFEDBD,$8CB2953FA0501407
Data.q $A55562E8E14230,$91ED35583D9574FE,$1605820E5D3F1FD6,$C9CC554EEE578F38,$9D35644D563588B5,$22ADF44309435975,$6AACF76ACE53AC63,$87583676D58A9452,$10C94476FD94A22,$9B21755252D4CA0E,$5DABACF9263EABFF,$A2315922729BDB77,$26DA93A2A8BADEB7,$8E03BB3BBD002821
Data.q $783DE10F608F4B9,$B1571834F4E17855,$654D1551CAA2532D,$5356102E336CA674,$E01BB4F8E3D05D93,$4034F2B932E02,$39A07BBD5EAA31A8,$8B6ABD65B81A5561,$FF5134FDC199E3B7,$202000AB4580BBBC,$D7A3C6D60C32E031,$3E5A64DD59533583,$9E853C4CAE046AD0,$BAB5C898160B8218
Data.q $BB14DB415DFAE658,$A78B3F6E0006D056,$DD6FED4C07BFCAA2,$4D3310363B96E296,$867B2163FBB6130,$6E3B21328280502F,$3382F0CD835FA935,$A512C3B1C6538BF3,$A3555C8298781001,$8DAF7CDF35CCBF76,$ABA6194F7416F229,$A90156EC622731F2,$F3FC560DD7F5D27E,$1008AA30AED3AFD9
Data.q $ABFDFF5BD65D5CFF,$1AA5DAF1BE26EBE0,$AEF9DE6F992F6FDD,$894EF1A6FA5C5EE8,$33BA79FEDF1FECE8,$46A01308DE7BFE18,$E7CD8C7AF52707EC,$42D7DA7D7E8FA0A,$9276780A00002832,$FD5DF1AD29EFF804,$637F2FE0C51614A4,$1002BFF386014BAB,$442A0580280F0200,$5158048340240480
Data.q $604638019AA02801,$E9C0D73C5F50FC08,$420221693B012539,$71A501D0B4084218,$C7E6108090108580,$A6C27D099ADA3334,$B4C219D854FA94D,$8A01C054049C3001,$9A1A81427708188A,$F88101D532328424,$8BABA188AEC9FB90,$1D0800D8090010E,$B00F4C20009D9FD,$C855191A989A964
Data.q $9B7421B165C29588,$2499E496B81D1757,$C1A8388C9AAC156D,$A299E3FE0091F9AA,$7BCFA1F33465B077,$3A20F7C8C319A478,$226724744491843A,$430621924CACC999,$40025149A7C125D8,$BC5940D862DBAE91,$CC9EEB9B94B2AE51,$7295B28E55BEC952,$D2599BB9632C23B3,$94AAC71101039392
Data.q $996CB59332EE47CB,$9885A66149650727,$6523D7EEC126349A,$B927262CCD2D132E,$10133B3525C23C5,$3B00
   EndDataSection

; EndDefine

Procedure.i GifSkipBlock(*m)

   CompilerIf #PB_Compiler_Processor=#PB_Processor_x64
      !mov rax,[p.p_m]
      !gifdecoder_GifSkipBlock_loop:
      !movzx rcx,byte [rax]
      !lea rax,[rax + rcx + 1]
   CompilerElse
      !mov eax,[p.p_m]
      !gifdecoder_GifSkipBlock_loop:
      !movzx ecx,byte [eax]
      !lea eax,[eax + ecx + 1]
   CompilerEndIf
   !and cl,cl
   !jnz gifdecoder_GifSkipBlock_loop
   ProcedureReturn

EndProcedure
Procedure.l GifCopyPattern(*ct,*ptr_output_buffer)

   CompilerIf #PB_Compiler_Processor=#PB_Processor_x64
      !mov rcx,[p.p_ct]
      !mov rdx,[p.p_ptr_output_buffer]
      !movzx rax,word [rcx + 12]
      !add [rdx],rax
      !mov rdx,[rdx]
      !gifdecoder_copypattern_loop:
      !sub rdx,4
      !mov eax,[rcx + 8]
      !mov [rdx],eax
      !mov rcx,[rcx]
      !and rcx,rcx
   CompilerElse
      !mov ecx,[p.p_ct]
      !mov edx,[p.p_ptr_output_buffer]
      !movzx eax,word [ecx + 8]
      !add [edx],eax
      !mov edx,[edx]
      !gifdecoder_copypattern_loop:
      !sub edx,4
      !mov eax,[ecx + 4]
      !mov [edx],eax
      !mov ecx,[ecx]
      !and ecx,ecx
   CompilerEndIf
   !jnz gifdecoder_copypattern_loop
   ProcedureReturn

EndProcedure
Procedure GifCopySwapRB(*src,*dst,num_pix)

   !mov ecx,[p.v_num_pix]
   !shl ecx,2
   !jz gifdecoder_copyswaprb_exit
   !sub ecx,4
   CompilerIf #PB_Compiler_Processor=#PB_Processor_x64
      !mov rax,[p.p_src]
      !mov rdx,[p.p_dst]
      !push rsi
      !mov rsi,rax
      !gifdecoder_copyswaprb_loop:
      !mov eax,[rsi + rcx]
      !bswap eax
      !ror eax,8
      !mov [rdx + rcx],eax
      !sub rcx,4
      !jnc gifdecoder_copyswaprb_loop
      !pop rsi
   CompilerElse
      !mov eax,[p.p_src]
      !mov edx,[p.p_dst]
      !push esi
      !mov esi,eax
      !gifdecoder_copyswaprb_loop:
      !mov eax,[esi + ecx]
      !bswap eax
      !ror eax,8
      !mov [edx + ecx],eax
      !sub ecx,4
      !jnc gifdecoder_copyswaprb_loop
      !pop esi
   CompilerEndIf

   !gifdecoder_copyswaprb_exit:

EndProcedure
Procedure.i GifCopyLine(*buffer.Long,y,width,height,*db,fmt,pitch)

   Protected.i x
   If fmt & (#PB_PixelFormat_32Bits_RGB | #PB_PixelFormat_32Bits_BGR)
      If fmt & #PB_PixelFormat_ReversedY
         y=height - y - 1
      EndIf
      If fmt & #PB_PixelFormat_32Bits_RGB
         CopyMemory(*buffer,*db+y*pitch,width<<2)
      Else
         GifCopySwapRB(*buffer,*db+y*Pitch,width)
      EndIf
      *buffer+width<<2
   Else
      While x<width
         Plot(x,y,*buffer\l)
         x+1
         *buffer+4
      Wend
   EndIf

   ProcedureReturn *buffer

EndProcedure
Procedure GifDecode(*image_data.MultiType,Array ct.CodeTableEntry(1),*output_buffer.Long)

   Protected.i min_code_size=*image_data\a[0]
   Protected.i bits_left,bytes_left=*image_data\a[1]
   Protected.i code_size=min_code_size + 1
   Protected.i localcode,clrcode=1 << min_code_size
   Protected.i code=clrcode,endcode=clrcode + 1
   Protected.i lastcode=endcode
   Protected.i bits,bit_mask=1 << code_size - 1

   *image_data + 2

   Repeat
      ; get next code
      While bits_left < code_size
         If bytes_left > 1
            bits | *image_data\u[0] << bits_left
            bits_left + 16
            bytes_left - 2
            *image_data + 2
            Break
         Else
            If bytes_left=1
               bits | *image_data\a[0] << bits_left
               bits_left + 8
               *image_data + 1
            EndIf
            bytes_left=*image_data\a[0]
            *image_data + 1
            If bytes_left=0
               Break 2
            EndIf
         EndIf
      Wend

      localcode=code
      code=bits & bit_mask
      bits >> code_size
      bits_left - code_size

      If code <= lastcode
         ; code in table
         If code <> endcode
            If code <> clrcode
               If localcode <> clrcode
                  ; handle code in table
                  If lastcode<4095
                     lastcode + 1
                     ct(lastcode)\prev=@ct(localcode)
                     ct(lastcode)\color=GifCopyPattern(@ct(code),@*output_buffer)
                     ct(lastcode)\size=ct(localcode)\size + 4
                  Else
                     GifCopyPattern(@ct(code),@*output_buffer)
                  EndIf
               Else
                  ; handle first code after clear code
                  *output_buffer\l=ct(code)\color
                  *output_buffer + 4
               EndIf
            Else
               ; handle clear code
               lastcode=endcode
               code_size=min_code_size + 1
               bit_mask=1 << code_size - 1
            EndIf
         Else
            ; handle end code
            Break
         EndIf
      Else
         ; code not in table
         lastcode + 1
         ct(lastcode)\prev=@ct(localcode)
         ct(lastcode)\color=GifCopyPattern(@ct(localcode),@*output_buffer)
         ct(lastcode)\size=ct(localcode)\size + 4
         *output_buffer\l=ct(lastcode)\color
         *output_buffer + 4
      EndIf

      ; increase code_size if required
      If lastcode=bit_mask And code_size < 12
         code_size + 1
         bit_mask=1 << code_size - 1
      EndIf

   ForEver

EndProcedure
Procedure.i CatchGifImage(Image,*GIF_Data)

   Protected ImageWidth,ImageHeight
   Protected a.a,*buffer.Long,*palette.Long,*d.MultiType=*GIF_Data
   Protected.i i,x,y,check,entries,current_frame,loop_cnt,transp_idx=-1
   Protected.i *db,fmt,pitch
   Dim ct.CodeTableEntry(4095)

   If *d\l[0] & $FFFFFF=$464947; 'GIF'
      a=*d\a[10]
      *d+13
      If a & $80; global color table present ?
         *palette=*d
         entries=2 << (a & 7)
         *d + entries * 3
      EndIf

      Repeat
         Select *d\a[0]
         Case $21; extension
            Select *d\a[1]
            Case $F9; graphic control extension
               If current_frame=#Null
                  a=*d\a[3]
                  If a & 1
                     transp_idx=*d\a[6]
                  EndIf
               EndIf
               *d + 8
            Case $FE; comment extension -> skip
               *d=GifSkipBlock(*d + 2)
            Case $01; plain text extension
               If current_frame <> #Null
                  *d=GifSkipBlock(*d + 15)
                  current_frame + 1
               Else
                  *d + 3
                  ImageWidth=*d\u[2]
                  ImageHeight=*d\u[3]
                  CreateImage(Image,ImageWidth,ImageHeight,32)
                  Break
               EndIf
            Default
               Break
            EndSelect
         Case $2C; image
            If current_frame=#Null
               *d + 1
               ImageWidth=*d\u[2]
               ImageHeight=*d\u[3]
               a=*d\a[8]
               *d + 9
               If a & $80; local color table present ?
                  *palette=*d
                  entries=2 << (a & 7)
                  *d + entries * 3
               EndIf
               While i < entries
                  ct(i)\color=$FF000000 | *palette\l
                  ct(i)\size=4
                  *palette + 3
                  i + 1
               Wend
               If transp_idx >= 0
                  ct(transp_idx)\color=0
               EndIf
               *buffer=AllocateMemory(ImageWidth*ImageHeight<<2,#PB_Memory_NoClear)
               If *buffer
                  GifDecode(*d,ct(),*buffer)
                  If CreateImage(Image,ImageWidth,ImageHeight,32)
                     check=StartDrawing(ImageOutput(Image))
                  EndIf
                  If check
                     *db=DrawingBuffer()
                     If *db
                        fmt=DrawingBufferPixelFormat()
                        pitch=DrawingBufferPitch()
                     EndIf
                     DrawingMode(#PB_2DDrawing_AllChannels)
                     If a&64;                     a >> 6 & 1
                        ; interlaced
                        For i=0 To 3
                           y=(8>>i)&7;            1 << (3 - i) & 7
                           While y<ImageHeight
                              *buffer=GifCopyLine(*buffer,y,ImageWidth,ImageHeight,*db,fmt,pitch)
                              y+(16>>i-1)&7+1;   (2 << (3 - i) - 1) & 7 + 1
                           Wend
                        Next
                     Else
                        ; non-interlaced
                        y=0
                        While y<ImageHeight
                           *buffer=GifCopyLine(*buffer,y,ImageWidth,ImageHeight,*db,fmt,pitch)
                           y + 1
                        Wend
                     EndIf
                     *buffer-ImageWidth*ImageHeight<< 2
                     StopDrawing()
                  EndIf

                  FreeMemory(*buffer)
               EndIf
               Break
            EndIf
         Default
            Break
         EndSelect
      ForEver
   EndIf

EndProcedure

t-ElapsedMilliseconds()
For i=0 To 99
   CatchGifImage(0,?Bitmap)
Next i
t+ElapsedMilliseconds()

w=ImageWidth(0) : h=ImageHeight(0)
OpenWindow(0,0,0,w,h,"Image decoded in "+StrF(t/100,2)+" ms")
ImageGadget(0,0,0,w,h,ImageID(0))
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Thu Jan 19, 2017 9:59 pm 
Offline
Addict
Addict

Joined: Fri Nov 09, 2012 11:04 pm
Posts: 1681
Location: Uttoxeter, UK
@Michael Vogel,

Please take a little look at this masterpiece by netmaestro:
http://www.purebasic.fr/english/viewtopic.php?p=430967#p430967

_________________
DE AA EB


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Thu Jan 19, 2017 10:11 pm 
Offline
PureBasic Expert
PureBasic Expert

Joined: Sun Aug 08, 2004 5:21 am
Posts: 3479
Location: Netherlands
Michael Vogel wrote:
Even I do not know the original author (there are to few assembler lines to say it's from wilbert :lol:)

It seems to be based on my code :wink:
viewtopic.php?f=12&t=57617

_________________
macOS 10.15 Catalina, PB 5.71 x64


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Fri Jan 20, 2017 8:54 am 
Offline
Addict
Addict
User avatar

Joined: Thu Feb 09, 2006 11:27 pm
Posts: 2443
Thanks for your replies, I must have missed netmaestros masterpeace and did not find wilbert's thread as well (never search for "Gif Decoder" in this forum if you want to find a "GifDecoder" :P)

I will check for differences to wilbert's updated code and try to find a possibility to speed it up (maybe by using some global variables). Every millisecond counts :lol: - I am use this routine thousands of time in a program to "expand" an image in memory, grab a small part of it and free it immediately, therefore my programm only needs a small amount of memory in general.


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Fri Jan 20, 2017 9:00 am 
Offline
Addict
Addict
User avatar

Joined: Thu Jun 04, 2015 7:10 am
Posts: 1673
Michael Vogel wrote:
(never search for "Gif Decoder" in this forum if you want to find a "GifDecoder" :P)

phpBB's Search really sucks unfortunately :( it's still good for some things, searching by Author for example, but 99% of the time i just use google with inurl:purebasic (which also is handy in finding code from the German/French/Russian etc forums, and sometimes they were the only place i found a solution!):
https://www.google.com/search?q=gif+dec ... Apurebasic

_________________
Thankyou to all the coders who generously helped & encouraged me in the nearly 2yrs when i was welcome here,
it was a tremendous privilege. I learned a lot. I wish you and your families all the best and success for the future.


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Sat Jan 21, 2017 2:52 pm 
Offline
Addict
Addict
User avatar

Joined: Thu Feb 09, 2006 11:27 pm
Posts: 2443
Meantime I stripped off some "unneeded" things (because my image won't have transparency, interlace mode etc.), but this saves just few milliseconds. There are two procedures which are responsible for around 60% of the complete calculation time, GifCopyPattern (~35%) and GifCopySwapRB (~25%). I fear, there's no chance to speed this up :cry:

Another (failed) attempt to make it a little bit quicker:
Code:
DataSection
   Compressed:
   ;IncludeBinary "Gif.dat"
   CompressedEnd:
EndDataSection

Procedure CompressImage(image)

   Protected *zip,*ori
   Protected ziposize,zipsize
   Protected ImageWidth,ImageHeight

   UseLZMAPacker()

   ImageWidth=ImageWidth(image)
   ImageHeight=ImageHeight(image)

   StartDrawing(ImageOutput(Image))
   *ori=DrawingBuffer()

   ziposize=4*ImageWidth*ImageHeight
   *zip=AllocateMemory(ziposize)
   zipsize=CompressMemory(*ori,ziposize,*zip,ziposize,#PB_PackerPlugin_Lzma)
   If zipsize>0 And zipsize<ziposize
      CreateFile(0,"Gif.dat")
      WriteData(0,*zip,zipsize)
      CloseFile(0)
   EndIf

   StopDrawing()

EndProcedure
Procedure UnCompressImage(image)

   UseLZMAPacker()
   
   If CreateImage(image,1664,1404,32)
      If StartDrawing(ImageOutput(Image))
         UncompressMemory(?Compressed,?CompressedEnd-?Compressed,DrawingBuffer(),1664*1404<<2,#PB_PackerPlugin_Lzma)
         StopDrawing()
      EndIf
   EndIf

EndProcedure


I compressed the image (and the result was 8% smaller than the original gif file), included it and decompressed it - everything works fine, the compressing takes a while but this wouldn't be done in the program, so decompressing is the main point: and, it is more than 20% slower than Wilbert's gif decompressor.


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Sat Jan 21, 2017 3:09 pm 
Offline
Addict
Addict
User avatar

Joined: Thu Jun 04, 2015 7:10 am
Posts: 1673
LZMA is very slow though, thats the price you pay for its excellent compression ratio; maybe Zip is better for this?

_________________
Thankyou to all the coders who generously helped & encouraged me in the nearly 2yrs when i was welcome here,
it was a tremendous privilege. I learned a lot. I wish you and your families all the best and success for the future.


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Sat Jan 21, 2017 3:38 pm 
Offline
Addict
Addict
User avatar

Joined: Thu Feb 09, 2006 11:27 pm
Posts: 2443
Keya wrote:
LZMA is very slow though, thats the price you pay for its excellent compression ratio; maybe Zip is better for this?

Tried zip first, but the resulting size was "horrible" - 30% larger than the original gif file. On the other hand, it would uncompress around 10 to 15% quicker than doing gif decoding. So it could be an alternative, but hopefully even more optimization can be done :wink:


Top
 Profile  
Reply with quote  
 Post subject: Re: Gif decoder
PostPosted: Sat Jan 28, 2017 2:42 pm 
Offline
Addict
Addict
User avatar

Joined: Thu Feb 09, 2006 11:27 pm
Posts: 2443
Some updated information as the newest PureBasic version includes a GIF Decoder :wink:

- the PureBasic's internal GIF decoder has a small footprint (exe grows only by around 10K) but is relatively slow (around twice the time of Wilbert's solution)
- I've removed some features from Wilbert's original code (now it will work only for non interlaced single images using a palettes)
- I've also eliminated the Start/StopDrawing commands (faster and smaller exe)
- I don't believe a lot of tuning can be done (except there's another trick to speed up the GifCopyPattern routine, which needs most of the calculation time)

Code:
EnableExplicit
#G=1

CompilerIf #G
   Structure CodeTableEntry
      *prev
      color.l
      size.l
   EndStructure
   Structure MultiType
      l.l[0]
      u.u[0]
      a.a[0]
   EndStructure

   Procedure.l GifCopyPattern(*ct,*ptr_output_buffer)
      
      CompilerIf #PB_Compiler_Processor=#PB_Processor_x64
         !mov rcx,[p.p_ct]
         !mov rdx,[p.p_ptr_output_buffer]
         !movzx rax,word [rcx+12]
         !add [rdx],rax
         !mov rdx,[rdx]
         !gifdecoder_copypattern_loop:
         !sub rdx,4
         !mov eax,[rcx+8]
         !mov [rdx],eax
         !mov rcx,[rcx]
         !and rcx,rcx
         !jnz gifdecoder_copypattern_loop
      CompilerElse
         !mov ecx,[p.p_ct]
         !mov edx,[p.p_ptr_output_buffer]
         !movzx eax,word [ecx+8]
         !add [edx],eax
         !mov edx,[edx]
         !gifdecoder_copypattern_loop:
         !sub edx,4
         !mov eax,[ecx+4]
         !mov [edx],eax
         !mov ecx,[ecx]
         !Jcxz gifdecoder_exit
         
         !sub edx,4
         !mov eax,[ecx+4]
         !mov [edx],eax
         !mov ecx,[ecx]
         !Jcxz gifdecoder_exit
         
         !jmp gifdecoder_copypattern_loop
         ;!and ecx,ecx
         ;!jnz gifdecoder_copypattern_loop
         !gifdecoder_exit:
      CompilerEndIf
      ProcedureReturn

   EndProcedure
   Procedure GifCopySwapRB(*src,*dst,num_pix)

      !mov ecx,[p.v_num_pix]
      !shl ecx,2
      !jz gifdecoder_copyswaprb_exit
      !sub ecx,4
      CompilerIf #PB_Compiler_Processor=#PB_Processor_x64
         !mov rax,[p.p_src]
         !mov rdx,[p.p_dst]
         !push rsi
         !mov rsi,rax
         !gifdecoder_copyswaprb_loop:
         !mov eax,[rsi + rcx]
         !bswap eax
         !ror eax,8
         !mov [rdx + rcx],eax
         !sub rcx,4
         !jnc gifdecoder_copyswaprb_loop
         !pop rsi
         !gifdecoder_copyswaprb_exit:
      CompilerElse
         !mov eax,[p.p_src]
         !mov edx,[p.p_dst]
         !push esi
         !mov esi,eax
         !gifdecoder_copyswaprb_loop:
         !mov eax,[esi + ecx]
         !bswap eax
         !ror eax,8
         !mov [edx + ecx],eax
         !sub ecx,4
         !jnc gifdecoder_copyswaprb_loop
         !pop esi
         !gifdecoder_copyswaprb_exit:
      CompilerEndIf


   EndProcedure
   Procedure.i CatchGifImage(Image,*Gif.MultiType)

      Protected *buffer.long
      Protected *color.long
      Protected *image.long
      Protected width,height,entries,y
      Protected code,codeend,codelast
      Protected codeclr,codesize,codemin
      Protected bits,bitsleft,bitmask,bytes
      Protected Bitmap.Bitmap
      Protected Dim ct.CodeTableEntry(4095)

      *color=*Gif+13
      entries=2<<(*Gif\a[10]&7)
      *Gif+entries*3+22

      width=*Gif\u[2]
      height=*Gif\u[3]

      *Gif+9
      While y<entries
         ct(y)\color=$FF000000|*color\l
         ct(y)\size=4
         *color+3
         y+1
      Wend

      *buffer=AllocateMemory(width*height<<2,#PB_Memory_NoClear)
      If *buffer
         codemin=*Gif\a[0]
         bytes=*Gif\a[1]
         codesize=codemin+1
         codeclr=1<<codemin
         code=codeclr
         codeend=codeclr+1
         codelast=codeend
         bitmask=1<<codesize-1
         *image.long=*buffer

         *Gif+2
         Repeat
            While bitsleft<codesize
               If bytes>1
                  bits|*Gif\u[0]<<bitsleft
                  bitsleft+16
                  bytes-2
                  *Gif+2
                  Break
               Else
                  If bytes=1
                     bits|*Gif\a[0]<<bitsleft
                     bitsleft+8
                     *Gif+1
                  EndIf
                  bytes=*Gif\a[0]
                  *Gif+1
                  If bytes=0
                     Break 2
                  EndIf
               EndIf
            Wend

            y=code
            code=bits & bitmask
            bits>>codesize
            bitsleft-codesize

            If code <= codelast
               If code <> codeclr
                  If y <> codeclr
                     If codelast<4095
                        codelast + 1
                        ct(codelast)\prev=@ct(y)
                        ct(codelast)\color=GifCopyPattern(@ct(code),@*image)
                        ct(codelast)\size=ct(y)\size+4
                     Else
                        GifCopyPattern(@ct(code),@*image)
                     EndIf
                  Else
                     *image\l=ct(code)\color
                     *image+4
                  EndIf
               ElseIf code<>codeend
                  codelast=codeend
                  codesize=codemin+1
                  bitmask=1<<codesize-1
               EndIf
            Else
               codelast + 1
               ct(codelast)\prev=@ct(y)
               ct(codelast)\color=GifCopyPattern(@ct(y),@*image)
               ct(codelast)\size=ct(y)\size+4
               *image\l=ct(codelast)\color
               *image + 4
            EndIf

            If codelast=bitmask And codesize<12
               codesize+1
               bitmask=1<<codesize-1
            EndIf

         ForEver

         If CreateImage(Image,width,height,32)
            GetObject_(ImageID(Image),SizeOf(Bitmap),@Bitmap)
            entries=Bitmap\bmWidthBytes
            *image=Bitmap\bmBits+(height-1)*entries
            y=0
            bits=width<<2
            *color=*buffer
            While y<height
               GifCopySwapRB(*color,*image,width)
               *color+bits
               *image-entries
               y+1
            Wend
         EndIf

         FreeMemory(*buffer)
      EndIf


   EndProcedure

CompilerElse
   UseGIFImageDecoder()
   
CompilerEndIf

DataSection
   image:
   IncludeBinary "Wonderbar.gif"
EndDataSection

Define m
m-ElapsedMilliseconds()
CompilerIf #G
   CatchGifImage(1,?Image)
CompilerElse
   CatchImage(1,?Image)
CompilerEndIf
m+ElapsedMilliseconds()

OpenWindow(0,0,0,999,999,Str(m)+"ms")
ImageGadget(0,0,0,999,999,ImageID(1))
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye