Jump to content

NiVZ

Active Members
  • Posts

    105
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

NiVZ's Achievements

Adventurer

Adventurer (3/7)

1

Reputation

  1. Hello, Here is the code I'm now currently using (I think it's a nicer interface). Commented as much as possible. Please feel free to point out any mistakes or improvements. Right click on a row to change the image now, and can change multiple rows at once. Thanks, NiVZ #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <GuiListView.au3> #include <GDIPlus.au3> #include <GuiImageList.au3> ; Start GDIPlus _GDIPlus_StartUp() ; Array to hold thumbnails Dim $t[4] ; Some Dummy Thumbnail Image Data $t[1] = "" & _ "58045804580458045804580458045804580458045804580458045800580458045904580458045804580458045804580458045804580458045804580458045804580459045804580458045804580458045804D90C9808780879087804580458045804580459045804580458045904580458045904580458045804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904580458045904580458045804590458045804580458045804580458045804580459045804590459045904590458045804580458005804580458045904B90C1D4BDA6B2C6F4F6B5A57CD21F529D90C5804590458045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580459045804580458045904580458045804580458045804580458045904580458045904580479047904790819151A4FB867946F2D6FC9496C5AC9666A521657194FDC42191598087804580458045804590458045804580458045904580058045904580458045804580459045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904590458045804580459045804580458045804580458045904580458045904580479043B2AB73A533E345F706B2D730A6F8A66295A0B3931284E246A414A5EAA6AEA6A0A6B0D63345FBB633D4B5800580458045800580458045804590458045804580458045804580458045804590459045904580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458047904D70C563ADE5BDD5F976F52778B62AA45CB306E2C30283128353017341630153032302E246B2C0C3DCB4DAB66CA6A33633B4BD910580458045804580058045804590458045804580458045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045800580458045804580458045804580458045904580459045804790479047908790478081A15B942953AB542543EFC67506F8A620C39512C54305534393C17345530F8449840352C37343838163036303838342C4D248C45CB6E306BFC5F1C2E59045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045800580458045904590459047804BA083D22DE361F435F4BBE5BDF63FF6BFF6BFF6B7C5F5B57BC6B506F4A5A6E2CB73C19415634794D3A3C38387838993C3845994DF9443B5A1841383C3938383836343634CE38CE6E936BDE5F3D4B1A157808580458045804580059047804790478045804580458045904580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904580459045804580459045B0D7E22BE2EFE425E4F9E579D67B86F94739273717372737473B86FDC7393738A624F3037349A4DB849994DDA515849594D7A51B93C1C5A5845BA55DA4D9949F7401949594DF840F9483634EF343073D96BDD63DA6BB66B936F726F727373633657194BBE5B7E437D26BA0C5804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458043B0DBF2EFF3E7E53BD5F776F5073EB6E6A5EEA51A94DAA4DE951495AA96A0A6F0B73CC3837341730794D7A5A353DBB5EBB621B569849F8401A5AF53CB7493A567C565B5A7B5E7B5E3A4E3A5A5834132CD04D0C6F2D73AB66295AC94DA949CA4D0956885EEB66ED66135B5A4F1E3B7D26D9085804590458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580479047C153D3F7F4F9E5F76730D6F29560B354E28322C1128332C3630142811285028CD302C3D522C7834773496343941BA4DD534B634D738F8407838D949B94D3939B83CB838B63097301739F951B63479385734702C6D418C2C2E24322C342C132C132C343030286D284A416B5ECB62F2521D431E33D908580458045804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804BA043E267F4B7E579B6B4F6F2A56AD301128142C3634163017301630373416341630363816301530973C9838B838D840BA409738FA40D93CD838F940D94058385734F9401B499838D840DA40F83C3945193DD83C9738B73C373415301630173416341630163417341630152C35302F280B398B62EE5E184F7D2E580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580459045804BC19DD363E4F79670D6F6A414F243738163016303838173415301734383816301630583C183416345" & _ "9383838373458385A40563474307940393859387A3C3A3C3938583C7A40393858347B40593838345A3C393C38345734583C18381630593C17341630383838381630173438381630142C70302D560C6759531B2259045804580458045904580458045804580458045804580458045804580458045804580458045804580458045804590459045C117D26DE3E375F0C6B0B3D132835301940173416303A3C1838163039383A3C173438385A4038405738B9443A443A3C5A447851D366314D7B483C483B447D4C5D483B407C485D4C3B449A44D65973343A3C7C485C44383C58513149363438385A40183C173459383938173437383A3C173416303938312CEC512E6F7B5B1C265804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580479043D229F3639530D6B2B41353418385938383C38383838393C393C38385A3C3A403A3C5B445B445A44F85D724D5D4C7B44FB50F36E4A4999487E4C7E509C4C7E507E4C7D489E507E505D4CBB4C6A62CB5179447D505E505B445451C86ACE3C7B443C483B405A405A403B403738593C393C37383938393C3838322C3056516F5D53D90C58045804580458045904580458045804580458045804580458045804580458045804580458045804580458049C157D2ADC462F67EA51322C3938373818383A38393817343A3C3A4038383B403B445B443B405E4C7D5957774F497D4C5D4C3766686293445E509E549E545D4C7E549F547E507E509E549E505E50CF65097793447E547E507D4C994CAA6E2B5E58405D485D483940394D565559383838393C393817341A3C39383730512CD066F75A9A1D5804580458045804580458045804580458045804580458045804580458045804580458045804580458047904DD1D9E2EF656CA626D2C1734383816301734383C3838173439383A40393C3A3C5D483C443C447C507C553277304D9E547B4CF372AA517A4C5E509E549E545F4C7E549F585E505E509F587E505E4C5461097331497E509E545D4C5C4C2D6AEA72763C7D4CDB481B5ED166EA3C373417383A3C173416303738383816341530123D326F3B3AFA14580458045904580458045804580458045804580458045804580458045804580458045804580458041C0DFD219D36CF62C945122C173038381630163038341734173438383A403A3C3B407D4C3D443D487E505B59EA7231519E503C59CB6E2D497E505E547E547E545F547E549F585F505E509F585E505F50385DE87250515D509E545F545D50F0610A7396445D4C766E1273283952343A3C183C393C17341730183417341730153032288F62D8569C25FA0C78045804580458045804580458045804580458045804580458045804580458045804580459045C11FE25B93ECB6A8B2C163016303734163016303838173438343A3C3B403B405B447D503E505F4C9E501662287371557E50DA61876AD4445E545F50BF547E507E509E549E545F545E509E585E545E501A5DAA6E30519E547F545F545E54D461CA6E94489E50524DA73052347B443B44183C5A4018341634363817301830353035306C45316BDB313B19DA0C5804580458045804580458045804580458045804580458045804580458045804580479047D111F2AB54A8B662E2816303734373416301630593C183438345B443B443D447D4C9E543F505E4C3B59AC590973CE599D5436666866B8485E547E54DE5C7E505E50BE589E545E549E54BF587E507E503A5DAD6EF148BE589E545E509E54D7658A6A7744BD585C505B489E505E4C3C443A405B44193818343A3C18341630373417388D2C2D6F173A1B19D80C7A085804590458045804580458045804580458045804590458045804580458045804FC087D151D2A924E2B5E342C152C5838393C173438383A40383C393C7C4C5E4C3D48BE509E545F54DC50B459CF40CA720D5EBD54736AEA59DB507E54BE54FD54BB6195597455DC547D50DF58DD549E54BD545B5D6D6AB344FE58BE549D50DE54F765E955B948FD58BD61FA54DD54FB65F45D7B445C48383C7634B83C373816305938193C5028AC6635463B1DD90C9B0879045804580458045804580458045804580458045804580458045800580458041D097D153D2A9056EB51363437383A3C3A3C3838393C3A403A405C447D4C7D509D509E549F58BD501862CC38DB546B6E4C6AFB50716EAC51DC54BF587C59776208398F34B4405651DB54FE581B62F3596F4DB659EB5DD8483C553A66D255504934666A49DD541B66CB6A2F499C5D0E73E9557B4CDC505762F1723077AE593638383C3A3C322C6B5E534A3A1DD90C9A089A047904580458045804580458045804580458045804580458045804580458041D097D153D2AB056EC51363417343834393838343734393C5A3C1A3C5D4C7D505E507F54BD50FB654D5E7655FC54EE59CC72F74C716E8D55DD543D59B56AE734D7449E547C61AF51B948796A68416F347844F7618A45FA50956AE73071389844726AEF409D50B56E4862933C366A08730B4139513056C63049410A772B77703419383A3C31304A5A53463A1DDA0C990C9A089A0879045804590458045804580458045804580458045804580458045804FC087D151E2AB1562D5A342C16301730393C173417343938383839383B485D4C3D4CBD50786AEB51275AAC6AB06EAB59EB72145131668F55DD54996AA74D9340BE547C54946A0E41FA61E95191349D547E547566ED3C786E6841B6447E50DD5470667440DD54EE7248457948B36E6966" & _ "0B3D8F454D28563034308C66C86A6E2C1734383831286A5E34463A1DDA0C99089908990879045804580458045804580458045804580458045804580458045804FC085C11FD29D64EAD663128163016303734353016303838173439383A405B445B447959493D50345640D244CC59295EE9725159D2618E519C5D0D6BEB409D50BC501A66AB66F144D3722941BB507E545B5DAE6A3249CE6ACD40BD547E50F9652A5A7A449A6189628E389C4C0F73465E29394F243A4438345738D06E86493228163036344D28CB66F7391A1DBA0CB9089908790879045904580458045804580458045804580458045804580458045804DB083B11DD21B9462E738F2C162C3630554DEE38F140553C173417343940594099592A3D71303D4C3E509E545C4C74406D510E6273596E51586629772E517C5914622956EA723351ED6E2E4DBD541B592F5A8B66B355E972D3489D547A5D4C5E0B5E7A4C186A684157403C59AB6A2639313039385A3C1738B751C94D4A24353017343630EA34CB66D9311A19BA0C99047A0C7904780459045804580459045804580458045804580458045804580458049A04FB0C9C1D5C36326BAF4934283734105E6E2C7130923817301634D8443562A9410A393349334DF654BD543E503E50D8502E6AF24C6F553166497BEB724C5A892C8E550A775055E9724C66376AAD49EC38AC6E8E510A77105E37664B3D4C494B669948105A6E345C48F75D073551301A3C39385A401545CD494B241530163037343430E951905A9A251A15DA0C990879047904590459045900590459045804580458045804580458045804580458047904DA085B151D26F956F06A512858380F4D2D625649D7441849D451CE4DA82C2C247338564055383149F54C7D4C5C4CBD5074591045314D72556966443D6B2C7A48D55069622B41ED61A84DC72C5134D84C4C6A4C496B66A749A82C5334F7506B66F144CC389A445B4C0F4151345B443834593C16490D394D2857383838162C383CAE30EA6A36427C211B15DA0C9A08790479045804580459045904590459045804580458045804580458045800580479049908FA0C9A217C3A536FCF4D363438382F490A56CC5129396924302C573C593C5A405C445A447B4858405D487C4C7E4C9A4CB54078489C50754077409C509D549D50754079449B4C76409A489D509E549748733C774056407A487E4C9C50743C563C7B445C485C48773C5B443B40593C77406E3053303838193C393C383852302B5EAF5EFB317B1D1B11DA0CB908790479045904580058005804590458045904580458045804580458045804580458047904D9083C19DC25DA4E2E6FEE38373436343228322C353016303A383A38363039383B44393C393C5B445B443A405D487C48593C5C485D4C7C485C445D507D4C3D447D4C7E505C485D487D505D4C3C487E4C7D4C3B445D4C7C4C5C443B445C4C5B44393C5B445B401838393C3A4038343834193839381734393C3938122C6D45EB6A3742BD295C1D1B11DA0CB9089908790479045800590058045804580458045804580458045804580458045804580479049904DA0C7B191C2EF75ECD6AAE34142C16303938173415301734383817301734393837341834393C3A3C37343A3C5B403A3C3A3C5B443A403A3C5C445C443A403C445D443B401B405C483A403A405B443B443A3C3B405B443A383A3C5B40383819383A3C383817341838393816341634383816301630383434300D3D0D67944E1D2E9C215B191B15FB0CDA0C9A08790879045904590458045904580458045804580458045804580458045804580458047804B908FB0C9B1D3A32135FCA66CC34312836341630173017303734163016343738163416343738183417341838383817341738393C38381938393C39381938393C3A3C393819383A403A3819383A3C3A3838343938393C183818383838173416343734373416301630383416301530373416301530322C8E41ED6AB2525D3ADC299D1D5C193C151B11DA0CBA089908990879087904790479045804580458045804580458045804580458045804590459047804B9081B119C1D1B32B556EC6668414F28142C352C373437341630173038341730163057381730153034301530173437305838173417345938183418343938383817343738393C17343834593C17341734383438381430332C3738163016303738163417301734173415301630383413288E284F56ED6AB4567C467D3EFD2DDD257C153C111B11FB0CDA0CBA08BA08BA089A089908790479045804580458045804580459045804580459045804580078047808B908FA0C9B191B36D552EE666B62493D6C2C33301530152C363437341630342C3530322CD2340F56CD2C331C2C14091434281634393C1738163458381838163438383A3C17341734593C173416303638522CCF4DCA51CC382E28122858341730152C37343730132C302CD0340E4EEE6ECF62B94E9D42FF521F5B3D3A7D255C193C111B11FA0CFB0CDB0CDA08DA0CDA08BA089A08990479045804580458045804580458045804580458045804580458047904DA103B191D361C323A3E734ECD5ECB66285AAA454B3D2C412D414D41AE4DF255F73CB23046104804290423000200280C2E18532C3530342C593C1A3C163058383734332C332C333031288E2C7049AF66ED66EF6AEB668A62EA516B492C412B3D4F458E450D52AD62ED6AEF66F75EFC4E9D42BE42DD52192157045804BB0C1D15FC10FB10FA0CFA0CFB0CDB0CDB0CDA0CDA08BA049904580458045804590458045804590" & _ "4580458045804590459047908D910BB295B21BC25BA257B21B929173A734EAF5ECC62CC62CC66CC62AF5ED43C2D1C22000200260426086910030423040304092D0A5A8A4D8D343334342C303DEE514C626B628D66CE6A0D6BED66F2621A633D633B67156B126B0F6F0C6BEB6AEC6A0C6B1067F55EF95ADC52BE467B3A1D323D32F9185A2D9C31BB1459047B087B049C089C089A087A089B08DB0CFB0CDB0CDA0CBA08580458045804580458045804580458045804580459045804FA141A199C299808D910B70CDA0C1B157C1DDC293D325C3A7D365D367C363D36D430030401046510C928D15166186F45E8206A0C3546F35EF066EC6AA9496E5E0C6F0F67126713671367166739675B6B5D6B5F6B7D6B7D6FBE6FBD6FBD73DE77DD73BD739E6F7E631E57FE52BE4A3E361E36DD2D3C1DBA14DD5A3E67FE3DBC105B043B083804370878109814780C7804FB0CFB0CFB0CDA0C580458045804580458045804580458045804580458049808FA18DB2DF8147904790479049A08FB0C3B19571D12155315181EB9211E261E228A14210002046F418B456C491262F059EB283A3ABC46FE4E3C5B386B2F730C6B5B6B7E6B9E6F9E6F9E6B9D6BBE6FBE6FBE73BE73DE73BE77BF77BF7BBF7BDE77DE77DF73BF6F5E633825FA1CD918B7109810700850085008720CB510DA181C193C1D1C19DB149D2DDF561E675E4E9910BB08FA0CFA0CFB0C58045804590458045804580458045804580458005804DA103A1DBB29B80C580459047804BA08F60C4A0446008D1D732E93321222D515DA21460422006A18F2596D418D5174728D4DC91C1B329E42DF4E1F5B7E5F786B796FBE73DE73BE77BE77BE7BDE77BE77DF77DE77DE77DE77DF7BDE7BFD77DF77DF77BF77DE73BE739E6BFC563621540C5008530C2D08C91C06080A040A002D002E0430045208930C1621BB529E737E529A109B08FB0CFB0CFB0C5804580459045804580458045904580458045904580079047925FA147908780478049904DA0C6D042100F01D2E266408440844088504680428044A048924326A756E116A7476536AEA2CB9219E36DD421F4F5F5F7D679F6FDD77DF77DE77DE7BDE77DF7BDE7BDE77DE77DF7BDF7BDE77DF7BDE7BDE77DE77BE77DE77DD739E73BF733C46970C780C570C76101521260409000A042B042C042C002B002B002A042C04F618FC185D087B04DC10FB10FA0C5804580458045904580458045904580458047A08570478085A215804580458047A04B908F80C2504C70CD1152304230069148F45A824450802044908EA3CCE65767A527274767472D43D3C2A5F32BF3EFE4A1E575E639F6BBF73DE77DE77DE77DE77DE7BDE7BDE77DE77DE7BDE77DE77DE7BDE7BDE77DE77DE77DF77BE77BE733C46981498107B0C9A107818DA20F91832042E002A000A0428002500250C470C0800090430003A043B04BB08FB0CFB105804580458045904580458045804590459047908F918D914990C5804590479047804BA08D70C26048904460026046814F255B77AF059A61C0200290C4D4D6C5D5272536E756A74723B3E1E265E2E7E36BE42FE4E3E5B7F679F6FBE73DE77DE7BDE7BDF77DE77DF7BDE77DE77DE7BDE77DE77DF77DE77DE7BDE77DD77DF773E671B219910DD1C7B107A109B18DA2CBC287A0C380436045400B408B10CD31C520C3404320451003000300436007804B908580458045804580458045900570059047804D8149F67BB3179085804590478049904B90C8E042600020065102D356C49EF61B67A6C49431424044804661C8E5D11764C518D59575EFC251F1E3E2A7E329E3ADE4A1E575E5F9E6BBE73DE77DE77DE7BDE77DF77DF77DE77DE77DE77DE77DE77DE77DE77DE7BDE77DE775E671B25B914750CB818DA1CFC20DB1C9B1CFB30BC2C7B105B045B089C0C9B1079147814580C36043700330431045A045B043400580458045804590458045804580478085B25990C7A25B910780459005804790498084E042200000423040B3DF05D325A4A457472736A29292804240045106E55CF693272336A3B3AFD1DFE1D1F265E2A7E36BF42FE4E3F5B7E679E6FBE73DE77DE7B9C7B9C7BDE77DE77DE77DE77DF7BDE77DE77DE77DF77DF779E7319219910750C750C9C14BD1CFD20FE20DD1C9B18FB30DC2CBD249C20591459107A147C147C107B105B0833002F0058045E0439085904590458045804580058045804191DBA2D5A04580478049908580458047A047308240001040404C7242E6A336E546A767274727576526AAC14440CEA3074728E59F1613852DC1DFE19FF1D1E223E2A5E2E9E3ADF4A1F535E5F7F6BBF73DF77BD7B326A946ADD7BDE77DE7BDE77DE77DE77DE7BDE7BDF7BDE7B7C4A9B319D31D81C520C9A149B14BC18BC1CBB18BE14DC245A4DBC285A0C5A0859085A0C590C590C3704370431042D04340038043A045804580458045904590058005808DB39F81C780859045808DB105904580499046E080200210045104B5EEF76516E7676977A747273720C66B6493349546EF77A7676F4617B49BD39DD21FD19FE211E265F2A7D36BF42FF4A3F5B7F679E6BBE737C7752665B77DD77DE7BDE7BDE77DE77DE77DE77DF7BDE7B3D671952545D3251D2286B0894141C291C25FC28FB2CDD20DA2819357B107C0C7D109D149D14BD24DC349C287E1033040D0455043B043C0458045700580455045604590478089A25FA14780479089B29FA1858049908DA108D08010421048518C669655D0C66757675765572135EEA349130B5449776B576B576967AB6651B517B491946FC" & _ "211F1E1E265D329E3ADE461E535F5F7E679F73BE7BB7525B7B1A73DE7BDF77DF77DF7BBF7FDF7BDC77B8567245F0640F69B14DAC184C0C8F10F628382D1829D620931893189820B9249B185B10790C9C0C9D149C145B105A082B00080032043C085D0458045904330033042F0056049908D61CB51858081B3A3C3E980C9908FA10DB0C1215220002040204A31CC5246A4DAC65316E3366A91C4B142E185734D865B776D676D67697761855FC5478727A4AFD1D1E263F2A7E32BF3EFE4A1F5B7E639E6BBE73B956113D7055BD7BDE77DE77DE7BDE77BE7734467145D148D12C334EAF398B108D104D35F34D1556384AD749EE340E35B2209220B724F92CB9245A105908590437040E0407002C0032043804590457045804330057044F04700474149420B12493209B46B8107508920CD410F7109825660421002104210421100F66CE69ED69694D6C45AF498C2076341A557776B57AB67AB67616665B55566ED966FC211E1E1E265E2E7E3ADE461E535F5B7E67BE6FB9662A102D4D9C7BBF73DE7BDE7BDE77F862EB382E4D5239114EB056F43D90108C106B45645DC7656655CD65E850A748A640CF30D124951CF62CFA34B52031140B0429000A04300437043A0458005904580456045804300449048E10530CF224B414DB2D740425002400260449048D082D1563082104C828EE5D2D6E2E724D72737674769572D24DD130BD5D3A66D87AD77AF776B776B85DF6651973FC25FE1D1E223E267E329E3EDF4A1F575E639D6F525123148C4897620E21BE77DF779C775162F0598B1C4C086835106BB1314B10AE18F349496A8B76E765EC61E854C858C958EA54AB3899143404921889284B1808002B042C0431005A043E045C0459045900580C15354F042304480446046A0C8F0CF5104E0001040104000401042504A808121ECD4D9376B47AD17AF076D376B77AB77A9476545A333D3C663A62D976F8761877187B3766D661B672DB5AFC21FE1D1F265E2E9E36BE421F4F3E5F3C6B693446244C484818742DDE77BD7B74621062F15D64182104042D91622E2591103329EF554A6A2C66ED65295DA860A55C8550E9601245560C16356728E93C0C0C2D002F042B044F0437043C043C047A049A0031316C59700C010401002100210005044908E90C0204210020002200020444002A2573729476B77AB576F772B576526EB66ED556B74AF7453D6A5B62DA72B772F972F9763566B95D7776F676994EFE1D1E223E2A5E329E3ADE4A3E5F35562628493C2A342704942D5A6BD56653661166A944251422040E4E34461525F620F4490E6A0C6248490759266D4571446DC560454C4C516E55A644A33CB02C2F042E0433002F042E043204370438009B009910D234D161B40C030021002204210023048A08AE150104010022000204210005008D417362F65AD55AF55A5A4BF636933271267216D5225A46BD5DDC61586A576EB9723562B4597855566EB57AF87A3A36FE1D1E263E2A7F36DF423E5F6F49272C4B4828242400490CD2514C45EA59CB5D6938364E584E584AD7359735B641F061EF61AC5D4669A675A471E371E475656D045DE575C575456D29514F1030002D04330057082E002E0433045904BC00F5184F512F41D41C8818020021000200220024046E11090D290408000D045200F619F82E38379B47172B372FF5263012713A7056D456D8367B419A55D761B9725C777C7BDC727751534D0F66316E9576F966FC251E1E1F265E2EBE3E3E5FAA344B404B4447200104240C4B3CCB55507B2A554A3C775E9B52F224533930492D41AB4DED65CA69C575C471047A2576467A2365E579A371C471E5750F45300833042D0432045B087708300430005704BD00BA080B49723DD038572D510007002200010028003200D20CFB357C1D1C0D7A11753E325EB54E1627B416921671120F164F5A0C6A6D6E905ED555726E306AB872BD779E77FC72F66112662C6A0D6E526ED6763A3EFE1D1E223E2A7F3A1D5B8A38ED4CD96EF86222040108651C306FCF6669484B3C871C6B084C204B384A3CA92C6F662C6AE771C371257A447AC67AE4710365467A657EE47107729324300034042E04300459049D087D085B043704DC00D51CE85410392E497A211C117929740831045108B710BC1DDD199D157E159A15125E5372774ADA26B41E2E125016512252667276F259AE55AC72CF7214773B7BFB72BB6E9972B972B455706AB47697769572985AFD191E1E3E227E32FE4E92453C73DE779E7709210100A414CC3D22144B44261806084F184C3C2B448A3CA7384E724B72C47104766576077B697B0877A97A2476247A457AE96955182F04330430042E0437047C047D085B043604FD04F230E464C3600755791DBC21FD5A1A32FC2DFE291E22FE29DE25BD159C1D375A3272B66EFA2DFD1997224F1EEF29304A3372D7761135542C94516E6EAF76316AD3611666566E956E736A94723372F0698E651352DC1DFD211E223E2ABF423E5F9E6FDE73BD77D2392304410422002204241826046B1449304A3C4A40A8340841AF760872E475457A267B887B8C778D7BAC77297B0476457AAC5D58142E04320434042C04310438043C08370435043D0D1815C748E558A35C33353D36F95E4949B14D3C2EBD469E3EFD21BC1D1752326E9676393EFD1D1D1EF929525E546E32725276F7767151D4447B443655AB5951729676546A336E316EF065CF61AF61B155D445D92DFD1DFE1DFE213E269E3A1E579E67BE6F9D77EF2C26202514000401044410483044406548473C6C4865308B5DB076E671E471E769466E6" & _ "A77AE77B07BAE7B8B7B6676657AAF5558102F04300457042E042E0430043404330035045E117D115829333D6B48D050B0512655A35C2859BC4E1E5BFD1DDD19F935316A96763942DD1DFD19F93D365E327232765272316AB055F161526ED565B261537274767476F26D8E5D724555355631D739DB525D63DE739E6F9D36FD213E269E36FE527F67BE73D9566B3429444934231865304548665C8B708B7847386A3CA730AC619072276EE65D6330833885594D7BAE7B8E7B8C7BC77A677A9055770C2F042F04390456083000330057045B0836049D159E153C21BC44CF4C085D466967656865D34D3E5F3E32DD1D1B32335E30725466F741D8351556326E526E516A8D61CE5995667D779D777B739566D1658E616D5D4B55E950304136253B3E3D639C6B5A635B6BFF7BDF7FDE777D363E269E3A1E537E679D6BEF246A484A4047302534654C8A748C788C7C8D7888348A3C4B59ED40B045EC76ED6663288528A33C655D2766A76164554555865D7159781030082E0034045604350038043A0059043304BE15BE197B1D9444C65868652F62ED658D555B3EDD52FC25BA1D1652735EB452F752D752955652563042CF25302EEF559762BE77FE77DF7BBE773A67755AC834442844340A4D5C6FBD737B6739637C6BBF77DF7BDE7FFE7BFF777E635D32BE423F579E6B374248286744020C2314443466588C7C8D7C8C7C8D7C8A309059CB68AA582D398A6A8F66862843204424A628632C642C6428862CC7387055791451082F04330433003504390832040B000A00BD15BC193245A650E55CED6DD566D762F739173E335614561356D44E5933592F592F5833582F582B1627501E1322D53DDC5ABB529B4E9B52BB52BA52BA4E974E344E5352D65AB84E954E5B67DF7BDE7BDE7BDE7BDF7FBE733A67BD6F9D42DE4A5E631B5F6C0C6950683C01040100221867588C7C8C7C8C7C8D7C6930CF61AA6C876CA8542741AC6DA84843144414322565186320C9518424A6306F519918730C2E043404570830002C000A00090008009C1D7825265D27518A65695DED61564A792AB43AD532712A512A592F5927582FF52A92222E22EC296C21D210B9089B089804B9047A0078049904BA04B8047B19FB215D36DD4E1C5F9752BE77DF7BFF7FFF7FDE7BDF7B3A63F85ABE73DD4A3E577D6B312546248B746734010421002208674C8C788C7C8D7C8C7C47388C49CB5C896C6560CA61AA6DA658643CAB38A92021100735CF24EA348424514D9C1897102C042C042E040A0028000800080008001146313503692B55D06129551356DA327A379A3757332E16931EB51E521EAF193019AE20B244EF482D596D59AE491521990459047A04DC08DB04BB08DB085E0D7E0DBE0DBE0DBC11F92DF8393456F96EDF7FDF7BBD73F8565B677E67FD527D67173E270868548C7C462821042100020046388B748C7C8C7C8D7C69506E451652EE388868EA74C974886C8874A870A9646434503975083031841C5249B91CB6142C042C042B00090008000700080009002966B0456C51275DFA66E554AC5118279937382F2F1A6A19CD198D29524114459240512C7548924C7250934CF1544E6EB13DFA04F90C94311811FD00FD041D053B0DB7257A199E0D933952417821733DF962DF7B5A63F8567D6FFE4E5D5F1C5F8B0C26308A708D78441C220020002204452069688C7C8D7C8D7CAC6CC9242F52AE498964AB78A874AA74AB74AB6CC960CA58B4289810F12C862C5741BB1896104C042C042B04290008000700070008002A66163A3C2E8F55955AAE59CB4D7216701ACD1948218741C959E765E769077228722B72CC6D0D59D054774C383CB3488D72742D732D88766B6E5721FB081A15562D3039333D74312F3D8568B531BD15FA297E63F85A3A5FFB561F5B7E6B932D240C695C8B78AD742414010021002100250C67548C7C8D7C8D7CED7887306318AB59A9608A78CB748B4CAC486F2CD144343971109814AE243045FB28BA10B6104C082C042C0409000800070008000800CA51D92D1E269C46F0515946B73AEE196A25E934CC44AA388B284D142D084D106B1CE638A66167762872B44C5530342C1351AC760C56E6652D5EF810DD083135EE480955F234ED44113DED4C5139BB21DB21BC19F831D9521D5B5D67DB5A48084638696C8B7CAD6C030C0100210001000304673C8B788C7C8D7C0D758A682218440CCD1C4B610C61D04450144F0C5310730C4E08730CB620DB20DB18B91894104B084B04290408000800080008000800B539AE45373EB94A325A69558E490839CA34EF40F038B51879087508D618770852046F08B239CF4D47726976AE38343054300E6ECD45ED4D2D56B23DD335A95D45650461A3588560A658A75CCB54314151459C15190978251D5B7D6B732D251448586A748D7C8C600104200001000104220049248A688C7C8C78ED748C786854220C64108945515A96453729720C520C510C520C710C730CB810B814DA186E0C4A084A08290429040800080008000800BC1DD6318941E944CA44AC404A558959E65D0C31B51CD328AE30EC38AE1CF01C373EBC421E5BFC29F35168762C727440553C5151CC7A8C722E6AEE61D161EE6D4D726C76AB7A2976A569E46464648464A9587235581D3C099C19DC526A08473847688C788C7C6A54000421002100010022004A1068548C7C8C7C8C7C8C7C69746744021002048A0C18461A4EB21471087108720C730C9510B914BA18B5144B084B084B084A042A040900080008000800BE19FE1D3B3294568F4DF044AB34EB400A49A9308730A7280D25D441" & _ "393A1C321D327D3A1D2ABD1DBC1DEB59E976AE6191443155D14836405738312857347744B54C944CF354F554705D0F6A2B728771E464C758133978295D0D3B114B10675868688D788D7C68382204010001002100020427086B348A748D7C8C7C8D7C8B7C68684744210403008E103B5677359210730C96109810BA18DC1CB4186B084B0C6C0C4B084B082A042904080008000800BE15FE1D3E261E4B7D67BD77FC52964EB2517366F266F566FB25BD1DDA291352BA21BD19BD19DD19BE19D43DA87A0B6AAD5CCE50D34855403430543034383944B450D35497505B445838563876407261EE6D29764769E9541A113D09391132497361316DAD7849202300010021040100030024006E1C69648C7C8D7C8D7C8D7C6A7447604630010407081A569B565A29BC18DC18DB18DA1892104B086A0C6B0C6C0C6B0C4B084A082A04080008000800BE19DD1D1D22DE465E639E6B1E4BDD4A366F566B9A363A637A42BD159339A561F639BD19DD21DE21DD21F735876E4A72C75C0D55AD5DCD612E6A4B6E6C6E4D6E4B6E0C6AEE6D5161F55075407C4CDB5C37615559B3610B727239FC081D095A1537297A3159564C0C2500010021002200250425006B088A44AC74CD74CD74EE74CD706864675824186610D94558469631D614B410B4108E0C6A086A0C6C0C6B0C6C0C6C0C4B084B082A04290009000800BD19BF193E2A9E36FD4A5E63DD3EFE465A67776FDD4ADC4A3B5FDC21CE4D42652F5EFB219E527F461E261A3A686E48724A6EA876E87A0A7B2C772D7730772F7730772F7730772D772D77CE764F720F6AB2659561FC5CF950B055F3491719B3310E52D51C97314E08260021000100220026002B08AB1434561356723D7035933DF84D185A705D8940440CAD18752D3942F71CB71890104B0C4A086B0C6C086C0C6C0C6C086C0C4C082B082A0409000800BE15BE19FD259E3ABD421F5FDE3EDF42FE4A996FDE777E67F662F441D0492161A76D35423D3A5D3A3A36344EA872E77AE97A2E77346FF85EFA5A1D571D5B3D5B3D5F3D5F3D635B675967776F557350770F77AE76F2691345B334375131660B5669620F56F420710827000200020401042700700C2F1D935A123EAE188C108B0C8D10EF20B5353752871804041419B8565429AB14881089108A108A0C6B086C0C6C0C6C0C6B0C4A084A08290429000900BE15BE19DD1D3D267E3A5D5BDE3EBE3ABF3A7E67DD779F6FD1668461AA5D83650261C765335255466B66A876C97A0D7737677B6B1D5B7D369D3A7D3A9E42DE4ADD4AFD4EFE4EFE521E571E5B3D5F3D5FFB5AF65A1267F172106A575D965D3166AD726A62343D7008050027040304220027009008322111469452EE1C6C0C6C0C6C086B088B0C4F316B2D2300F118F166CD62CB62EF62AC5E6C5A2A52EA494935EB20AA188B104B084B082B04290009009E15BE19BE19DE1D1E26FD4AFE4A7F36BE36DE465F5B1F4F36672361025D21610261026182654776C67AA7726972B75E7C623E6B9D3AFE291E261E263E36DE4A5E323D325E367F367E3A9E3A9F3E7E365E321E2AFD291A2EB54ECF724D6ED265D5614D5E10664C1826004E040700240028006F0454254B5EB15AB1318D106C0C6B0CCA188C4DEB59AB490304122190626C624D6A4C622B5EEA59A85588512749264548410839E830871C481027040800BD15BE15BE15BE19FF211D2AFE4EFD4E9E329F3ABE42DD3A7767CC55225D01610261025D0161225DE371CA7A7156FB257E425D565D3AFD1DDE1D1D2E7D3E3D32DE1DDE1DFE21FD21FD21FD21FD25FE21DD1DDE1DDE15BE19BD19D9259556AE76D26113452E6AD13C2C10940C2A0426042C0448108E41C46529569356EF208910AA28EC590A620A62CB592404732D4D624A66CA61685147512751064D0545E43CC43CA434A530A6288424421C22102308BE15BE15BE15BD19FC213D2E1E221E53DD467E2E7F32BD365967734AA4654261035D015DE264015D21616B6ABA25DD1D1E2A3E327E425E36FE1DDE52BD46DE1DDD19DE19DD19DE1DDE19DE19DD19DE19DE19DE19DD15BE15BE19DD1DDB25974EAF6AAE5DD34C165DF5409414290005004E08C528A665C5694966B352CF45E83C284D474D68550A5E6955480C7039A95D875968558955CA55AB55484DC44083388434832C842843204218221022082208BE159E15BE15BE15BE15DE1DDD151D2E1E573D2A3E2A5D2E1B57BA4655422D5EC961A55D67596659025DA565F245FA295F421D2ADE1DDE195D323E5B1D2ADE1DDE19DE19DE19DE19DE19DD19DE19DE19DE19DE19DE19BE19FD29F9395B421842AF18CB412C6A4B61EA5C8F38280802048718465183696A720F46CF396A4564346434E53C484D685149456C1C6A45A959CA5D264D074DE648C540A338A43CA43863306324631C421422102208220822089D15BE15BE15BD15BD15BE19BD15BD21BD467D2E5D323E265E2EFA4A9C467C325B3ABB4AFC21BA25EF4D84616361E95D3A363D2A1D261D26FE465E361B26FE21DE15DD15DD19DD19BE19BF19BE19BE19DD19DD15BD19DD1DD5410E5DB269AD644B3C2210A51CEA51E8696761E840644D6461626567762E2D571D912D6955A5448430422422204424872CEA3CC644E73C0839083D0741E640E63CC63C8434622C4324421C2210220C22082208220422047D159E159E15BE159D15BE15BD15BF1D1D2EBD427D3A7E3EFD1DFE213D2E7C3A7C3A1C26BE19BE19DB21F835334AF73D3D3ADD1DDE215E36FD25FE25DC421D2EFD21BE15BF15BD15BD15BE19BE15BE19BE19BF19BE15BC193052C55" & _ "4C968E65469514745493DE62CA8186D356749266A83698269676A4608B40CF13DA85DE450A43C6434222423104320642C6428652045142310211422184218631C6318431C421422102108220822042104220422045D117D117D119D159E159D15BF19BE19DD1D5D3EBD4E5D36FE1DFE25DC1DBD19BE19BD19DE19DE1D1E2ABE15DE191D223E329F425C2E1D2ABE15FD29DC523D2E5C2EFD21BE19BE15BD15BE15BE15BE15BC15BA21B625D03D09564549874D0545053DE63467450445A6388928451C632824458559C465683D6A10EB4D0349E44C05496438432C411442202310020C230C24082408220C220C2208220822082208210821082208220422042204220422043D095D0D5D117E117D159D159E15BD15BD19FE291E269D46DE4A5C361E2AFE251E2ADD1DFE251D2E3D365D369E3EDE4ABD465C327E363D2EDD1D7E3E5C46FC21FD4E3D2EBD15BE159E15BE159D19B431AB4168492545444545454645254166454641C5386330A3348434842C431C2410683DA53C2445C528E9286651C344C444E548E544843463282218220C220C220822082208220C43082208220821082208220422042104220422042104210421045C0D7D117D117D119E159E159E159D15BD19DE199E15BD193D2EFD4EDD5A5C463D3EFD2DFE291D2E7E3A7D3A7D421D2ABD1D9D427B6FDD4E3D2EBC4A5E363C2A1D53DD19BD15BD15BD15B921AF314641E340C238A334C434C430E538C434C42CA42C63284224632463202218240CC72CC434421C2318250C0629A74D0445623C6234633063284224421C221442102308230422082208220C2208220822042204220422042104210421042104210421047D119E159E159D159E159E159D159E159E15BE159F159E15BD1DFF251D2E7E42DE5ADC62FD5E3E5F3D571D4B9D3E1E2EFD21DE46DF6FDD46FE4E9D3EFC219C3E1C26BE159E159E15B921AA3D6545E63CC438C4386428421CC4306220622063208328832C832C632842246324852CA22C631C410C240C260806314549C34083342220221823142310230C23042208220822042208220822082204220822082204210422042204210421042104210421049E159E15BE159E159E15BD15BE15BE15BE159D159D159E15BE19FD215E36DC1DFD259E42DD521E5B1E53DD4EDD4A1E537F675E671C571C4F9C42FE253E2ADE21BD199E19BE119A198C31043D0439E338622422186220A430622442182108210C62186320632084286324622084244220221822102210282DA4288328632C63306328221C4318431022082204220422042204210422082204220422042204220422042204220421042104210421042104BE15BE15BE15BE159E15BD15BD15BE15BE15BE15BD15BD199E15BE15DD19BE15BE19DE1DDD1D1D2A5D369D3E9D3E7E3E3D367E367E3A3D2A3E26DE19DE1D9D159E119E159D157129C438A32C62286328832842244224631C4214220C42104314421421142210210C420C220C210822104310210C4318E528A4306224211C22182210230C2208220422042204220422042204210422042204220422042104220422042104210421042104210421042104BE159E159E15BE15BE159D15BE159E15BE159E199E15BE15BE15BE15BE159E159D159D19BE199E15BE19BE19BE15BE19BE15BE19DE1DBE15BE159E199E159E199D159D159A1D0A29822C6324431C42184218631842142210210C42144210220C2208220822042208210422042104210421042104A420C528A42C421C21182218421822142208210822082104210422042104210422042204220422042104210421042104210421042104210421042104BE15BE159E15BE15BE15BE15BE15BE159E15BE15BE159E15BE15BE159E15BE159E15BE159E159E159E159E15BE15BE15BE15BE15BE15BE159D159F159D15BE19BC15781D0B29832C6228621C2110220C21082108220821042208220822082208220821082204220422042204210421042204220C841C83204218221C4218210C210821042208220822082104220422042204210421042104210421042204210421042104210421042104210421042104" $t[2] = "" & _ "FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FF" & _ "F7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B3967E71CEF3DDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F5A6B8C31292521042925DE7BFF7FFF7FFF7FFF7FFF7FFF7F1767ED49BD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7B6FFF7FFF7F3146C618841021042104524AFF7FDE7BFF7FFF7FFF7FFF7FB45A25358939DD7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F314639677B6F641042082104210421042925BD77CE39FF7FFF7FFF7FFF7F17630431042D0E4EFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBD77A5141042A514210421042104210421046B2D31468410DE7BFF7FFF7FFF7F396B0431253504351767FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBE777B6FFF7FFF7F5A6B292521042104210420042104210421042104282141048410BD77FF7FFF7FFF7FF75E253505312535883DFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F9C734A295A6B314608214208210421042104210421042104210421042104210421040821FF7FFF7FFF7FFF7FED4524352535243504351763FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F29254A29C61821042104210421042104210C211442142114210C2104210421042104D65AFF7FFF7FFF7FFF7F945A0431253925312535CC45FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F5A6B22082104200421002104421864348450A458A558A55CA558A454" & _ "844C63344218534AFF7FFF7FFF7FFF7FFF7FFE7F68390531243125392535BD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FD65A21042104210842208448A558A55CA558A458A55CA558A558A558A558A558A458F86AFF7FFF7FFF7FFF7FFF7FFF7FD55E04310531253504313867FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F1863210421108340A458A458A558A558A55CA558A558A558A55CA558A558A558A4588B55FF7FFF7FFF7FFF7FFF7FFF7FDE7B2635042D2535E42C925AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B08358454844CA558A558A454A558A458A558A558A4588458A558A558A558A558C650DE7BFF7FFF7FFF7FFF7FFF7FFF7FED45E42C25390431CC49FF7FDC7BB97BDD7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F105E84488450844C844C8450C5504751A855EA590A5E2B5E0A5AA9554755E54CA54C7B73FF7FFF7FFF7FFF7FFE7FFF7F9256E42C25352535673D336F74779777947BDA7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BF75E396739675A6B3967D65AEF3D514AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFF7FFF7FFF7FFF7FFE7FFE7FFE7FFE7FFE7F725E8448A450A44C27518845C42026316C668D6A8D6E8D6A8D6A8D6A8D6A8D6A2B5EEE6E4F774F77FE7FB77B4F772E77AC6204310431253545398A627277977B7377737BFE7FFF7FFF7FFF7FFF7FFF7FFF7F977B967B937BDD7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFC7FFD7FFD7F18679452C61800004204630C21040100010021044A29AD31B15AB77BFD7FFF7FB97FB57B957B957B957B9577957BB77BFF7FFF7FB77F957BB57B957B957B947BD066844C432CA4182B5E0529A845883D883D8D6E8D6A8D6A4B5E683DEA518D6A4B660E734F774E77BA7F4E772E772E77CC66042D2535043145398A5E3073967B747B727BFC7FFF7FFF7FFF7FFF7FFF7FB97F967B7477727B556F74777177957BDC7FDC7F957B737B72775177717771772635620C071D49254925EE39E71CC5148A2D8B2DE618E51C52777377957BFD7F937B947B947B947B9477947B957B947BD97BFD7F947BB57BB57B957B957B116F6D6243182104C41C8D6A4B5EA9450A568D6A8D6E8D6A4B62A41C263167390A524B624F734F774F7750772E732E732E73EC6A0431043104314539AB620F6F9777747B727BDD7FFF7FFF7FFF7FFF7FFF7F947B967B947B717BCD662F735077507770777077507B717771777177717771776C56C42042080E3A28212F427146ED35AC310E3A6208E520CF5E9377947BB77B947794779477957B947B947795779577B77BB77BB57BB67B957B957B32732A622A5EA945210468356B663046935294526C668D6A8D6A6C66EB45524E10466C668C664F732F734F774F772E734E772E73EC6A0431043105314539AB66EE6A9777947B727BFD7FFF7FFF7FFF7FFF7FFF7F937B967B747B5073EE664F737077707751777077717B717771777177717772770F6B453584108B2D2825830C220400000100A41001006835516F74779477947B947B957B9477947B9477957B9577B57BB57B957B95779577957BB67BF06A6C668D6AE859A5180B522B569352C939D4564D5A8D6E6C6A6C663046CA35F65E4D5AED6E50774F734F730E6FEE6A0E6F4F77CC66043104312535863DEC6ACC66967B947B727BFE7FFF7FFF7FFF7FFF7FFF7F947B96779477306FEE66507770777077717B71777177727B717772777277727771776639A414010083108835EA3DA9398831C93988354C4E5373947B947B7477947794779577957B957BB57BB57BB57BB57B957B95779577967BB67B53736C668D6A4B66A9414C626C6A9252714EB45A6C668D6A4B628C6A0E46AA3517630B5A2F7350774F770F6F0E6F0D6F0D6B2E73AC62042D04312535C849EC6AAC629677947B727BFE7FFF7FFF7FFF7FFF7FFF7F957B9577757B0F6BEF6A507771777177717B7177727B72777277727B7277927B72776739A41C2C4E727793779377937B937B937B9377947B947B9477947794779477747794779477957B957BB67BB67BB67BB67B957B95779677B67BB67BF06E4B660A622B624C666C6E4C664C5A6C668C6A6C66095E2A624C5E6F5A4C5E6C6ACE6A507350772F6F0D6B0E73EE6A2E6F6A5A0431043125354A560D6FAB629577747B727BFE7FFF7FFF7FFF7FFF7FFF7FB77B967B957BEF6A0F6" & _ "F717771775077673D673D673D873D88418741A84188416D5AA83D2B529377737B7377937753737377537394777373326B74772C52E530E52CC42CA3280B4EB57B95775373D1622D52883DE52CCA45B77BB77B5473AB59A450A558E95D4C6E2B724B6E6C6E2A5E8D6A4B666C666C662A626C6E4B6E6C6E8C665077507350770F6BEE6A0E6F4F770A520435042D2435CC660D6FAB62757B957B727BFF7FFF7FFF7FFF7FFF7FFF7FB87B757B757B0F6B2F6F717751770F6BC4284A6DC86CC768C868E764E860E6480A4E8D5A4C56937B937B937753737377537373735373326FD06211672839E750A764C650A324A94168390631E530063D08490855E64CA941B77BD266C550A558A558844C26556C6A4B6E6C6E8C6E4C664C668D6E8D6A6C6A8C6A4B6E2B724C6EAD6651735077507750732F734F774F77C8452535253166392E730D6FCC66967B757B737BFF7FFF7FFF7FFF7FFF7FFF7FB97B757B957B0F6B306F71775073CE62C42CE75C8568657065706670656C8550A8410A4A873D8D5E8D5A8D5A6D5A6D5A326F0531E52CE5302531883D49516568656C83246839E6340861E86CA770866C6568666C855CA93DD266A554A558A558844C8450844C47514B668D6E8D6A8D6E4B662B624B624B668D6A8C6E6C6E2B66517351775177507750730F6F094A4B56663D0431E32829522E770D6FCD66767B9577737BFF7FFF7FFF7FFF7FFF7FFF7FB97B957B957BEF6A306F71775073AE62C52CE76C6670657066706570A440A328C42C084907490749074907490745A328AF5E2735A660A658A3242841A664667083402731B05EC428A76C6570667066746570656C84502735C654A558A558844C84508454844C844C27518C664B628D6A8D6A8D6E8D6A8D6A8C6A4B668C66517351775173517750730F6B8745453D453D042D042DE42CED6A4E770D6FED669577757B737BFF7FFF7FFF7FFF7FFF7FFF7FB87F7577957BEF6A306F71775173AE5EC42CC548A444C54886706670A4402B4E2739856065646560655465686470A32C2C4E283986686458A424096565706560A424D162F262E528E96C65648334832CA328C424262DC438A55CA454844CA4588450844C8450A554E565057B285E2B622A622B6229626866CE6A7373727772775277727751775173AD62042D2535453DE428E32825394539094EED6AED6A757B9577737BFF7FFF7FFF7FFF7FFF7FFF7FB97B747B967BEF6A307371775173CE62C945C945A8410631A77065708444C94528516570656083414331A3496560A338A9414739A67084582949667465708330EB4575731367262D29656568A424CA4168392631905EA554A458A558A45428510649A558A44C656EA666482549318D6A8D6E4B660819074A06772B77517772775173306F106B3173EE662A520431042D24352535463D453904318B5ECE66947B967B737BFF7FFF7FFF7FFF7FFF7FFF7FB97F9477967BEF6A306F71775177306F106BEF6A4C560635A774657084482631E640C764655463394331A345644C844447354839A770A664E87065708558A320AA45B05ED15EA93D074D6670E63807410855C430C548A558A55449559162556FC550A454256AE572E914C90CE8186D628D668C6A0821C90C281D665E277BEE6AF066106F306F717751734B622B5E463D042DE42C04310535C845ED6AEE66957B9677727BFF7FFF7FFF7FFF7FFF7FFF7FBA7F747B967B0F6B306F71777177EF6A0B4E8D5E2C52273D8670657084506739473908456430643C6434643C6424844CE52C6839C7706670657066746670C764C64CE638C428A324E73C6674867065706568A4388A49B2625673B87BD87B2E5EA558A558485908772652C90CC90C165B155F8D66303EC90CC9086829067B5273517351735173727751774B66A749874DC8510431243545358B5AED6AEE66747B9677727BFF7FFF7FFF7FFF7FFF7FFF7FDA7F747B967B0F6B0F6F2F6FA84506352951E534EA4927418670667084500B4EA9410861645064246428642C6558645CA3244735C86C6570667484488450656866706570855C831CE630867065706670656C84444E52D97FD97BB97B9877E750A558284D5767986F287BE645C80C934A58636E5E375F0A15C90C8662306F13677277527372775173AD6A0A560435095E4B66A84D653D8645AC62EE6ACD66947B967B727BFE7FFF7FFF7FFF7FFF7FFF7FDB7F747B96770F6BCD622635494DC87065708558E42CE63C6570667084540B4E883DE86C643865506564644C642C6564A324052DE86C6570656883248939E52CC76C65708554A324C52CA7706570656CA3246839B15E566F6F56556F9162E750CC515867375F996F986F0777A735103A2F4206256A2D103AA7392877996F996B136772777377CE6AA8492535E8552A622A5E0952653D8641CD62EE6ECD62947B9677727BFE7FFF7FFF7FFF7FFF7FFF7FDC7F747B967BEF664B56E530C770856085588558A32CE63C667065708454EA49683DC770656C657065646570656C656CA330A424E8686670656083284F526939C86C66708450C424C424C86866706570A32CEC4927350635C430F3629773F26A8F5ED15E155FBA6F7867776FC66E0D425763365F165FEE39E5726E4E796BB25AB15ECE6A116F4B66663D0431E855C85986452535663DCD62CD660E6FCD62747B9677727BFE7FFF7FFF7FFF7FFF7FFF7FDD7F737B9777CE628C5AC42CE8648560A434E42C463907456670656C8554C945473DA770A44CA440A440C75C65706570843C8220E8606570655CA32C4E522735C768656C64508220E6" & _ "34E86C66706570C640284D0965A7708440B25EF26A6C668D6A8D6AD25A5763365FBA6F0C42E96EBA6FBA6F786B081D6662281D375F905E8C6A4C664B628D6E2635E428453545392531873DAD625073CE660E6FCD62947B9677727BDD7FFF7FFF7FFF7FFF7FFF7FFE7F737B977BEF668C5E4639E74C65708668C540E42C284D66706568A448884147418670A430883DA941285165706570844C822008556570645883302D4E2735A5646568844CA320C5308560656C667066746570656884588434EB4D6C668D6A6C6AAF66B87BF45AE9142B1D4A21E872B96FBA6F0F3E08255073E7416B298E668C6A8C6A8D6A6C6AEA496735AE5EEF66307330730F6BCE66EE662F6FCD627377977B727BDC7BFF7FFF7FFF7FFF7FFF7FFE7F737B977BEF6AAD5E2A52C430A76065686570A660085D6574A44CE5304C5628456570A4380A4A6D56084D6570667084588220C538843C83348328EB45073D8560656884482631C42CA670656C65646458844C84408334A42CC9518D6E6C664C5E5673B87B5146C90CC90C27528566155F9252C61C924E756FE6762821D15A8E668C6A6C6A4C62F06ACF66317372777177517751773073EF662F6FCD627377977B727BDC7FFF7FFF7FFF7FFF7FFF7FFE7F737B977B106BCD66AD622635C42CC32CA438A4488558844CE5308D5A8D5A073D8450A334C9458E5A074D6670656C8560A3208939EB450C4E0C4ECB41A42C8458655C8334AA3DE528A32CC42CE428623902310D46B15AF3666D624B668D6A8D6A6C6A6D66AA41C80CC90CE620633D834182458A35996BB96FC66EE8102A1D94778D62A449225A02564C5651735173527372777177306F0F6FCE66CD625377977B727BBB7BDF7FFF7FFF7FFF7FFF7FFF7F747B977B306FCD66ED66CD628C5E6B5A094E883D05312631AE62106B8D56683DA841EA498E5E8E5A284D656865708554A3286E56336F536FE949425EC1760256A9396F561367893D893D2D4EE845A172C3511467566F776F15677773F2662C5A0A5A2B5E8D6AA945C90C0625025AA2724266CC3DEA45EA45A449853DE618E44D0B4E425EE27E6445EA498E5EAE62306F306F106FEF6651770F6B8D5E72739777727BDB7BFF7FFF7FFF7FFF7FFF7FFF7F947B977B316FED6A2F732F732F6FEE660E6BCD66CD622F6F306FEF660F6B106B106B316F316FAE5EE534A434C42C052D88418E5ED062D0620A4EA272C27A47354E561367346BA441A172C54DE64DC17A433DE44DE251E25163450C4E02524162816A225AC9512B6207214631025AA2762262A520415EE17A027FE2516439E27AC351225EE27E2539E251215E0256A645106B317371775177306F8D5E5273977B737BDA7BFF7FFF7FFF7FFF7FFF7FFF7F957B977B3173ED662F734F7750774F732F735077507751777177306F5173517351735277316FCF5EC8452A52CF62326B52732D526262025A663DC272C27AA945C249225AE251A345C24DA34DC34DC37AE330C172626A626A83492C4EC276E451C34DE27E85492A5A456205560256C27A025EA420025A82722262035EC44DC2768372826AC37A04312162E27EE27E025AAE5E317350735173306FAD5E3173967B737BB97BDF7FFF7FFF7FFF7FFF7FFF7F967B977B5177ED662E734F772F734F77EE6AEE6A5077717771777177717751777177527752730B6B056FC366086B947774774D56826A83768345A272A276884162624266626A025E63410362E359636E4735816A263547396F566E56C172C949C549E27AC351E955AF62AE62E255C37AE359CB41225AA44DC945225EA645C37A8376A37A837288410256035AC351A2720B52306F51735173306FCD62316F9777737BB87BFF7FFF7FFF7FFF7FFF7FFF7F967B97775173CD662E732F77CD664F7750772F73EE6650775177517751775177517771770C6F2352044EC445C54188776F736D56A272A47A636EA37684728841426245394739CB45C845636E2462E4610C4A4262A272C255D25EB05A826A035A626263728549C95113671267E351A37AC3550C4E63662366235E4366654184766445246E246AA945235E0A52084EC27AC749106F52735277306FAE5E316F977B737BB87BFF7FFF7FFF7FFF7FFF7FFF7F977B977B7277CC662E730E730E6F4F772E732F73EE6AEE6A0F6F30735173517751775277076F2456034E2452244E45738D776D5A646E456E04624572246A673D6266C37AE355B05E2C4E446A056E85516F56035E256A4541B15E905A2262446E046223668745D162136B126BC44D8476A551CA49035E26350362056A433D056E66456745845588410362A845C44D6476A749106F52777277306FAE5E116F9777737B977BFF7FFF7FFF7FFF7FFF7FFF7FB77B977B7377CC662E73ED6A2E732E6FED6A4F770F6F4F772F6FEF6A2F6F306F517351770773C36AC4456456054AA55E2A738E5A2466E56925358551C5610535636A04626641F1668F5EC459A6654545EA49035EC561A545A44DE3304366E4614735446EA64DF166336B346FA4492572854D88416449883DC45DA661433D655D46458E5A2539663DE561E561056A85556D5A106F51777177306FAD62106B9677737BB67BFF7FFF7FFF7FFF7FFF7FFF7FB77B967B7377CC660E732E732E73CD664F770E6B0E6F7077707750775073EE6AEE660F6B0B6F2477044EE449054AC65E2F738F5EC4596661A8450B5204414339056AA455A6498541AF5E4341E548473D0C4E85592659455905492539C55D864DA941C45985598F5A336B2D52C34DC6694545A94166394635234505412539263D4741AE5E8E5E6" & _ "53D25510549254D8845EF6A3173517771770F6BCE66106B9677737B967BFF7FFF7FFF7FFF7FFF7FFF7FB87B9677737BCD66CC6A0E6F0E6FED6ACD660E6F2F732F7350775077507750775073106F306F717703730273C4662D737277AE62243D06416841106B6D5A2339255125512555053DD0626E56B05EF266F1622C52EB49CB45EC49905A1367346B336BA9454555CA49126BEB49845D4661655984596455CA45AF5EAF5A8E5A0C4EF066116B106BAE626D5A8D5A8D5A6C56106F51735177717730730F6BEF6A9777747B957BDE7BFF7FFF7FFF7FFF7FFF7FB87B967B747BED66AC622E734E774E774E774F7B2E6F0E6F4F73707750775077507751775177517750734F73EF6A527772777277516F116B116B326F5373F0666D56CA4567394739EB498E5AB05E336B75778541225E41622162A745546F2C522C522C52883DAF5ED1620B4E253D263D273D273926394D526D5AA64502528166A549CF625373316F316F106B306F0F67517351777177306FEF6A0F6BEF6A977B7477957BDF7FFF7FFF7FFF7FFF7FFF7FB77B9677747BED6AAB5E2D732E774E774F774F770E6FEE6A2F73507770777077507750775177517351775177306F106B52777277527752735273537373777377C849225A425E415E826AC945633DC34D8541E54D626AA54D626A035E6F560256C176C276A349A445C449C449E54DA545EA490A4EE94DA745653DE176A34DA34542666D5A326F72777277306FF066EF66306F51775177EF6A306F0F6BEF6A967B747B947BFF7FFF7FFF7FFF7FFF7FFF7FB87F967B747B0E6BCC66ED6A0D732E734E774E772F730E6F2F734F734F73507770775077EE726D6AEB6930772C6AEF6651737273727772777377737773779377E94D6266E451C845E17AA549E34DC276C451E64D42662D564266626A6839225AC27A626AE255225E4266E27EE27EE3556262C176C176225E653DE27AA34D0535663D8E5E316F72777277316F51775173306F7177306FEE6650770F6BEF66967B747B937BFF7FFF7FFF7FFF7FFF7FFF7FB97B967774770E6FEC6A2D730D73CC662D6F4E772E732E732E732E732F6F5073CA69C660A65CA65C075DEF72A65C8D6AEF6A7277727772777277737773777377316FE44DC54DEB49A272E351A349C27AC54DE64D826EA345E2764266EB490356C451C94502562D52C649027F226263456266A449C54D6541EA49C44D4366436A8545AD5EAE5E5173106B727771775173306F306F3073507350770F6B0F6B967B947B727BFF7FFF7FFF7FFF7FFF7FFF7FDA7B967B957B2F6FCC6A2D732E732D73CC66CD6A2E730E732E734F774F774F7750778969A660A66089658965A55C69655277EF6A106B5273727773777377737B9377E64D826E6266826AC3518345A37AA549C649A3764366636E463D8F5A425E235EE351235E6E56E54DC27AA7456D56025AC34D84458D5A0A4EC44D0339446AA4558E5E0F6B306B306F717771775177EF6AEF66507751775073EE6A106F9677757B727BDE7FFF7FFF7FFF7FFF7FFF7FDB7F957B757B3073CB660D732D772E772E732D730E6FCC6ACD66CD66EE6A2F6F2E6F2F73AA69A5608969A660A660A660EF7272773173F06AF06A52737277937B9377084EC37E63728741AF62E64D6576243DE35183760431636AA64D4E56235E453D236204664D56C44983768641AF5E035AA47AE35DEB49A349C55D4441246A654DAE5E31735173EF665173306FEE66CE625073507750775073EE665073957B957B727BFD7FFF7FFF7FFF7FFF7FFF7FDC7B957B957B5073CB660D6F2D732D732E732E732E732E732E732E732F732E730E6BEE66ED668965E764C764E764E7640B6A71777277727751775173116B9377737B0B5283726472C949326FE74D056E04398349A451E430636E8649EA49A351A941E359A5610B4EA2494472A745CA45E355056A4639EA4964414555A355255525416C5A106F72775173307351735073EE665077707750772F73CD667177957B957B727BDC7FFF7FFF7FFF7FFF7FFF7FDC7F757B757B7177AB660C732D772D772D732D732D732D732E732E732E73CD720A72886DE76C076989692F7350775177517751777177717772777277F066927772774C562466256E8649116BC749254D6741D062D062C84904662441A35145392D524349E544A941A34DE56566458441C561A565A351C359673DC949C945C9452B56CF66CE625173717771775173306F50775077507750772F73EE6651735473957B717BDC7FFF7FFF7FFF7FFF7FFF7FDA7F757B957B717BAB660C732D772D732E772D732E772E732E732E732E73AC728570856CC66CCD7285680B7250735077507751777177717771777277106B72779277AE5EC455A5614549F066AF5EAF5EF066326F53732B522551845585614745D0628E5AD0628E5A834D46594745A7450549E644054505414C563173106F106F0F6B306F51777177EF6AEF66CE662F6F50775077507750770E6FEE6A6C5AE949CE665177DC7BFF7FFF7FFF7FFF7FFF7FB87F957B967B727BCB66EC6E2D772D732D772D732D732D732D732E732F772E73887185708C72EE72856CA66C8D72507770777177717751777177727751733173727B106B634D0655E544AE5E52735273537373777477747389454741A9416D56326F73737373D066A84568458845116B326F316F316F72777277727752737277517751777177727771775073717751777077507750774F772F730E6F2A522A52AC622F73DD7FFF7FFF7FFF7FFF7FFF7FB87F957B767B727BCC6AEB6E2D772D772D772D772D77" & _ "2E732E772E732E732E73ED762B764F77EE768570856C076D4F777077707771777177717771777277517351735277EA4D2B528D5E3273737773779377947B9477336F536F126B336F537373739577947B9477947B9377316B316B537351737277737B737B727B72777277717771777177717771779477717B70775077507750774F774F772F736B5ECC66ED6A2E73FD7FFF7FFF7FFF7FFF7FFF7FB77B0E6FAD6271770E6FEB6A0D772C772D772D772D772D772E732E772E732E774E774E774F77EE76CA75CD764F77507770777077717771777177717771777577EF6A316F5273727772779377937B937B9477326B126B5373957795779477967B9577B77B947B93779377937B937B52735273937B9377727B937B7277727B7277977BDC7FDA7BD97FB87BDD7FDB7FB67B737B507750777177947BB87B997751775077747BFF7FFF7FFF7FFF7FFF7FFF7F957BCA6A495A2952ED6ACB6A0C732D772C772D772D772D772D772D772E774E772E774F7772774E774F774F774F775077707750777077717771777177727BFE7F727B306F106B7277106B1067106B106B73777373947B957BB57B957B957BDB7F947BDB7F957BB57BDC7FB97BB87BDB7FD97BB87BB77B967B9477737B7277947BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDB7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7477EB6E695E295AAB62EB6E0C73727750772C772E77727772774F772E772E772E77737B977B717B4F774F774F775077507770777077507770777177B97BFF7FBA7FB97BDB7FFE7FFD7FDC7FDC7FDC7FDC7FDB7FDB7FDC7FDC7FDC7FDB7FFF7FFD7FFF7FFD7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FDA7FFC7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FB97B0C73CB6A8A66EB6E2E770C77737BDD7FB97FFE7FFF7FFF7FFE7FDA7FDB7FDC7FFE7FFE7FFE7FFD7FFD7FFD7FFD7FFE7FFD7FFD7FDB7F967BB97FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F967B0C775177DB7FFF7FDC7FFD7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7" & _ "FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F" $t[3] = "" & _ "BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42DC3EDC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BC46BC46BC4A7C529C4EBC46BC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42B" & _ "C42BC46BC42BC42BC42BD42BB4A785E586E586E9A52DC3EBE42DC42DC42BC42BC42BD46BD46BD42BC46BC46BC46BC42DC42DC3EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42DC42DE3EBC42BC429A4E596AB976997679669A4EBC42DC42DC42BB42BB46BB46BB4A9A527A567A569B4EBC42BC42BC42DD3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC46BD42BC429A52795A9A52BC4ABC4A595EBA76B976796E795A9B4E785A795E5862586A58725976366E997A7976586E586ABC4ABC42BD46BC46DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD3EBC42BC42BC467962786E79665A5ADC427A567876B9765872586659629A7299729976BA7699767872997699769976BA7A79769A4EBC42BC46BC46BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC46BC429B4E3776BA76997657729A4ADA42376A576E377279769A767766B96E786A99729A7A7976797299767872366E166E58629B52DC3EBC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BB42BC42BB46586E9A76B97699765862785A576A79769A769A769976D86A2A295D7F576EBA769976576E366AD46578725772596E7A56BC46BC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC427956796E99769876376E78729A76576AD86A76669976976A6D3DDA76776E99769A7A366A9A7ABA7A99729A7A59727A5ADC42BC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BD429B4A595E5876366A9976BA7A9A76DA7695563B777872776A7666566E99769976997A7976376EBA76BA769A7A58669A52BC42BC46BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46DC42BC42BA46376A99729A769976997ABA7686147D77366AB976BA76BA7699769976997699767876376A376E376A9A4EDC42BC46BC42BD46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BC46DC42BC467956997699769976B9769976576AB96A76629A76997299729972B9769976B976997699769A7A5872575EBB46DC3EBC42DC3EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BD46795A576ABA769A769A769A76B976997699769976997699769976997699769976BA76B9769976386E595EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BC42785E9972BA769A769A769A76997699769976997699769976997699769976997699767872376E795E9A4EBC46BC42BC42BC42BC42BC42BC42BC42BC42" & _ "BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42DC429C46586ABA7A5976387238725876997A997699769976997699769976997699769976786E58669952BC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42BC4A576E9A7A38761776187638765772997A9976B976997699769976997699769976BA76596A7A56BD42BD42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42BC4A566E9A7A38761776187A38763772797A9976B97699769976997699769976786E99727A72595EDC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BB4A776E9A7638723876187618763776997ABA769972BA7A99769976997299769365797A99763866BC42BD42BC46BC42BC42BC42BC42BC42BC3EDC42BC3EBC3EBC3EDD42DD42DD42BD42DD42BC42DD42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC46576E9A76797637721876387657729A7A9972997699769A7A9976B972997A7159BA7A99763866DC42BC42BC42BC42BC42BC42BC42BC42DC42BC3EDC429B3A382EF729F729F7295932BC3EDD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46DC42BC46DC42376A99769A76997679767976BA7A9976377272615876997A9A7A5876B361587699769A7A3866DC3EDC42BC42BC42BC42BC42BC42BC42BC3E7A36172AF625F625F625F625F625F625F625382EBC3EDD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD429B3A3832172A162AF625172A382E9B3ABC42BC42BC42DD42BC3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42DC465932175E787299769972B976997699769976997A1672715D925D715DB3655776BA7699765872595EDC3EBC42BC42BC42BC42BC3EBC425932172AF525F625F625F625F625F625F625F625F625F625F6257A3ABC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC3E5932F625F625F625F625F625F625F625F625F625D525172A7A36DC42BC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC46BB423626F625F535586A997699769976B97699769976B976997699769976BA769976997699769A7E795E7946BC3EBC3EBD3E9B3A5932172AF625F625F625F625F625F625F625F625F625F625F625F625F625F525F6255932BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC427A3AF625D625D625D625F625F621F621F621F621F621F525F525F525D525F6255932BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429A3EF5291522D725D42D155A796E9A76997A9976997A997A9976997699769A7AB972BA769972BA76576EF549F425F625F521F721F625F625F625F625D625F621F625F625F625F625F625F625F625F625F625D521172AF625D5253832DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BB3E382EF725F621F621F521F525F625F529F625F521F621F625F625F625F625F625F625F625F6253932DD42BC3EDD42BD46DC42DC3EDC3E382EF521D625F625F621D729F525166A78729A76BA769A769A7699769A769A76997699769A7699763676D369D429F725F525F621D729F621F625F625F625F625F625F625F625F621F521F72DF629F529F625F521F625F625F621F625D521162ABC3EDC42BC3EBC42DC42BC42BC42DD42DC42BC42DC42DC42F625F625F625F521D535F64D196E39723872386E1962D64DD52DF621F621F625F625F621F621F625F625F625F625F625172A162AF525F625F625F625F6251626F525F521B32D0961AF71156E577299769976997699769976797658723572D16D6B6D4A6D4C51D229F621F621F525D625F625F525F525F621F625F625F621D435F651386E3876187A3876176EF651D541F625F625F625F625F625382E9B3ABC3EBC3EBC3E9B3A59323832172E59327A36F625F621F521F52D39661972187" & _ "63876187A187A18763976385AF6291626D625F625F621F625F625F625F625F625F625F521F625D625D625F621F621D525F625F525F62D9145296D4B6D6F65B169156E156E3672366E156EF46DD2698E656C696B6D6A6D0B61B145F629F625F625D625F621F521F625F625F625F621F62D3962397218761876387618761876386E596E394AD529F621F725F625F625F625F625F625F625F625F625F625F625F625F625F625F621B539186E1876387638721876387238721876187238763A66B439F625D625F621F625F625F625F625F625F625F625F621F629F52DD331D62DD325F53D99629876AF6D4A696B6D6C6D6B694B696B696C6D6B6D6B696B696B6D6B6D6B6D6C6D6C6D4A6D2B69DB6E9A661542F425F421D42DD425F725F725D42D3962187A187217763872386E387218763876187A18761862D529F61DF625F625F625F625F625F625F625F625F625F625F625F625F621F521195638721776387A386E186E396E3972187A1876187619763856D521D629F621F621F625F625F625F625F625F625F621D429DC56DC6A9A56BB6E9A72564A2F5129696C714C6D6C6D6B694B6D4C6D4C6D4C6D4C6D6C714C716C6D6B6D6B6D6B6D6B69EA68B239374EDA6EBA56BA56DC6A3842D525F725B43D3972387238763866B341D439B4491866F879387617723976F6391622F625F625F625F625F625F625F625F625F625F625F625F625F725F6253872187638761976D62DF625F529D525163E5966187638763876F529F621F625F625F625F625F625F625F625F625F625F525F431BB72BB763636D425F52509614B696C6D4B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4C6D29659041F525D42D795ABA76785AD42DF621F629F5553876387238761736F625F729F625F51DF6511972187638725956D529F625F625F625F625F625F625F625F625F625F625F625F625F625F629387618763876186AD525F621F525F621F5251642197A18763976F62DF621F621F625F625F625F625F625F625F621F625D529FD5636567A62F521F621F42508696B6D4B6D6C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6C694B6D4E51D429F525D435FC6ABB62383EF721F625175E177638763876D62DF625D625F625F621B4353A72187638765A62F629F625F625F625F625F625F625F625F625F625F625F625F625F6251732187618723876F759F625D6291622F621F625F52D187638761876F62DF621F621F625F625F625F625F625F625F521F621F625F625F525F525F521F621B13949656B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4C694B6DE960B139F721F525F625F625F621F529F621186A177639763876F629F625F625F625F625D429396E187638765962D625F625F625F625F625F625F625F625F625F625F625F625F625F625F731187639761876F759F621F625F521F621F61D153218761876397AF529F621F621F625F625F625F625F625F625F621F621D725D725F62515265842F52D8F414A696B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4B6D4C6D09656F45F721F625F625F621F621F525F621186A177638763876D62DF625D621F625F621F53D396E187637725956F625F625F625F625F625F625F625F625F625F625F625F625F625F625F631387638761876F865D629F6251626D625D5353966387638761872F525F621F625F625F625F625F625F625F625F725F625F625F521F525DA569866BA660D5D6D6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6D6D29692D59D625F625F621F625F625F521F629386A177638721876185AF529F525D529F6413872397617763872F635F621F625F625F625F625F625F625F625F625F625F625F625F625F625F63138761876187638765856153617321846396E397218761A7AF64DF521F625F621F621F625F625F625F625F625F625D629F629573A785ABA5A9962B862095D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6C6D6B694A6D095DF621F625F625F625F625F625F621196A18763876187A38723866385E3866387218723876177A1766D525F725F625F625F625F625F625F625D629F625F621F525F625F625F6251636387618763876187A18761876187A18761876F8753972394AD429F621F625F621F625F625F625F625F625F625F625F625F625D529BC5AFC66DC62DB6209694C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4B6D6B6D4A6D0961F521F625F625F625F625F625F621186A38761876187A1876187A387A1876187A187A3976594ED529F621F621F621F621F621F625F625F625F621F621F621F625F625F625F62517361876187217761772397618761876187639723966F635F621F621F625F625F621F625F625F625F625F625F625F621F625F625F621F621F625F621D429E9606B694B6D4B6D4B6D6C6D6C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B714C714B6DE964D525F625F625F625F625F625F625186A3876187619765962396E39725A6E59661842D52DF625F625F621F621F725F621F625D629D529D529D52DF5211522F625F625F625F625173A1876187637761766D649F759F75DD755D53DD42DF625F625F625F625F625F621F625F625F625F625F625F625F625F625F625F625D625D629F621D42D09696B6D6C6D6C6D6C6D6B6D6B" & _ "6D6B6D6B6D6B6D4B6D4B6D4B6D4B6D4B6D4B6D4B6D4B6D6B6D4C6D6C6D0965D525F625F625F625F625F625F625186E387618761976D425B431B435D431D425F621F621F625F625F621F621F625D529173A3A5A3A627962595E3742D52DD625F625F625F629173A187638761876F759F721F725F625F625F525F525F725D629F529F521F521F625F625F625F625F625F625F625F625F625F525F525F621D729F521D52D0C652A612A652A652A652A652A652A652A652A652A692A692A692A692A692A692A692A6949612B652B690A61D52DF625F625F625F625F625F625186E387618763976F529F621F621D62DD635F749D749F625F621D629F621D531196E1976377257723976387218763972F549F625F625F625173E18761876187AF655F625F625F625F625F521162E594E395E5A62595A163EF525D625F625F625F625F625F625F625F625F625F625F625F721F625D529B331B335D431933992399776D24D9139913D90419041914172417241913D77721456B33D913D913DB239B335F525F625F625F625F625F625F6253972187618761876F525F621F621D439396E187A3876374AF521F725D5251762387638723876387A1876197A38761876396EF43DF725F625173E187618761876D651F625F621F625D531176617723776177A3876187A18761856F52DF625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F621F625F525DC72D531F625F625F625F625F625F625F625F625BC567A4ED621F625F625F621F625F521F625F625F625F625F625F6253972187618761876F525F625F625F75519765872187A5A66D52DF521F735187618763A76384AF535F529173E396A187A187A1972D525F625173E187618761872D651F625F621D4295A6238763772187A386A187218723976396EF541F625F625F625F625F625F625F625F625F625F625F621F625F625D725D7291522F621F42DBA66B329F625F625F525F525F521F625D625F6259A529A56D521F525F521F625F625F625F625F625F625F625F625F6253972187618763876F525F621F621D64939723876387A595AF529F529395218763972D651D525F521161EF525D549396E3876F879373AF6211742187A38761972B64DD625F625F761386E18763976D53DF521F5251862187A1876F665F625F625F625F625F625F625F625F625F625F625F625F625F625F521F521D725F721594AB95AD425F425F425F625F625F625D625F621F621373EDA6290250A1965086608D125F621F625F625F625F625F625F6253972187A18763976F525F625D629D425173A3852374EF52DF621D42D5A6A1876396EB335F621F725F625D625D431396A19763976385AF6211742187A38761972D649F621F52518761876397A3972395A174A1642176618761876F769F625F625F625F625F625F625F625F625F625F625F625F625F625F525F525F521F425250044046500660088045015F525F721D629F621F5216F19230C430042004308A910D329F825F625F625F625F625F625F6251972187A38763976F521F625F625F621F525F525F425F625F721D429596A1876396AB439F625F621F625F625D435396E386E39765962F621173A3872197A3976D541F625F62D37723876187619763876197A3976387618765A6ED441D625F621B42DB441D549D449B43DD529F525F51DD525D521F6251622B441386A18721876F5690D45262425148904F529F621F521F629B4391866176E3872187638723A7AB555D629F725F621F625F625F525F525196E177E3876386EF625F525D7291622D431D655D441F725F625F5295A563876187AF769F529F521D529F52D396A3976187618763A6EF621173A18763976187AD545F625F62D187A187A186AF759186A186E386E1972F761D535F525F621F5293A66396E396E3972396E7A62F749F721F625F625D621F52139621876197A197A387617761672576E374ED429F621F525F5253966397218761876187A187A38763972384AF621F621F625F625F525F6211866187639763972D629F521F625F6315A62196E3866F629F625F525173E3876177638763A66195A3956595E19763876187A18763A6A16221632187A177A3976D645F621F52D38763876385AF529F625D629F625F625F51DF625D521D529185217723876187A1876187A38761876176ED63DF521F621D529397637721876396E396E3872387A1772187AF869F529F625173A1876387659661642F635394E197238761972D529F621F621F625F5251622175E177619761966D725F621F621D655187217761776F6251622F725F625195E187A3776177637761776387639761872387218765A6A1626F525595A5A66374AD425F621D52518721876396EB441F625F625F525D539F74DF741F525D5295A6A1876197E38523852595A3972187238761872D531F625B52D377218763956F525D525F62916423A6E387218761746D529395E177A18761526F621D625F621F74939721776F531F621F621F625F625F625F5291746173AF529F625F625F621186E187A18761876D629F621F621F625F525174E5962596E396E5A6A3956152EF53D197618765A66F625F625D42DB431D529F625F621F621F65919761876396E3746173E5952397218767A62F429D5295A6A38761872D429D625D529B445386A177638763746F625D53117761876184EF525F625F621F525184E387617763A5ED5293A66187A1976F51DF625D629F625D435396E187A163AF621F621F625F625F625F621D525F621F521F625D629F621186E187A1" & _ "876187AD629F625F625F625F621D529B42DD535B435D42DD525D525384E3876187A385EF625F625F625F625F625F625F625F625D429584E3876187618761972397617761876594ED425D531596E1876386EF621F621F725F521373EF779387A5B5AF629D5311876187A3742F51DF625F621F725173E187E387A395AF525395E187E1876F519D729F725F725D42D5966387A3852F525F621F621D625F625F625F625F625F625F625D629F62518721776177A3876F529F625F621F625F621F625F625F61D172AF625D625B3293966177A17721746F625F625F625F625F625F625F625F625D521D529F655386E187A1876187638721762D62DF625B53139723876386EF621F721D725F5211642387637765A5ED629B5311876187A1746F525F6211622F5253956177637763956F529385617763976F631161EF725F721B42D5A66387A595ED52DF625F625F725F625F625F625F625F625F625F625F625186E177217763876F529F621F621F62516261736173EF52DF625F625F621F645396E38763976F531F625F625F625F625F625F625F625F625F629F625D625D529163A1742F63DD531D529F625F625B53139723876386EF425F521F529D541196A17721776384AF521B4311876187A175AB441B541F64D176A18763876197A1636F521152A1976187A396EF54DD431B431F75939723876F879196ED5351526F621F625F625F625F625F625D629F621F625196E18761876197AF629F621F525F625D5251A7618765972D555D531D53D38723876F879396EF525F625F625F625F625F625F625F625F625F525F525F721F721F625F525F625F621F621F525F525D535387238761872374A374A3852396E397A3872187AF531F521D431197A38763976397239723872177238723976F865F525F625F525F861197A17763876396E396E1876387A187A177618765A5EF52DF621F625F625F625F625F625F625F621F625F86518761876197AD629F721F521F625F5253972377238761876385E596E177237723976D74DF621F625F625F625F625F625F625F625F625F625F625F625F625F525F621F625F625F621F621F725B535386E3872187E187639763876177618763976F74DF621F621D4313876187A18763876387618763976396E3A56D52DF625F625F621F629594A3976197218761976187618763966197218765A66B431F51DF625F625F625F625F625F621F621F625F549396E3976396AF625F725F521F625F521F74D3972187A387638763876187A1876196AD541B42DF625F625F625F625F625F625F625F625F521F521F525F525F625F721F721F625F625F625F625B535387238721876376E187A1776187A1876164ED52DF621F725D4313876387638723872186E386E1862B445D525F621F525D429F625F625F425B4491966186E196E1866D555F429D659186E384ED529F725F625F625F625F625F625F621F621F725B3355966386ED551F621F725151EF625F625D42D175618761876397A1872197A176EF76138725A6AF625F625F625F625F625F625F625D625F625F625D521F625D621F625F625F625F625F625F625B43538721876176E384E384A1846F739D52DF621F625F521F621B439387658721636F525D525F521F625F625F625F625F625F625F625F625F625F625F625F525F5251626F525F521D625D625F625F625F625F625F625F625F625F625F625F621F621D625D625D625D525F625F625F625F621F625F621F525F531394A595238521632D525D64D39721762F625F625F625F625382E5A369B3ABC3EBC3EBD3EBC3E382EF625F625F625F625F625F625F625B435387618761766F525F521F625F621F625F725F625F521F621B439387618761636F621F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625D625F621F625F621F621F621F625F625F625F625F625D629F625F621F625F625F621F625F625F625F625F625F625F625F621F521F525D525F629F51DF51D196AD659B445BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3E382EF625F621F625F625F625F625D53938721876F769F625F625F625F525F525F525F625F521F621B53D387638761636F625F625F621F625F625F625F625F625F625F625F625F625F625F625F621F621F621F621F621F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F621F621F621F621F621F621F625F621F621F621F621F621F725F625D525F76119723872BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42DC42172AF625F625F625F625F625D53D37761872176AF621F621F625F625F625F625F625F521F621D53D38761776373EF525F625F621F625F625F625F625F625F625F625F625F625F625F625F621F621F621F625F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F625D529B431D42DF521D529D625F721F52116321636BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3EBC427A36F625F625F625F625F625D54117761772186AD729F525F525F521F521F521F625F521F621B53D3876F7793842F629F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F625F625F625F625F625F625F625172A172A172AF625F625F625F625F625F625F625F625F621D529D531384EF539163A594AF529F621F625F725D621BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42" & _ "172AF625F625F625F621D5393A72387A186EF629F625F625F625F625F625F621F625F621D52D5A723A76173ED521F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625D621F625F6255832BB3EDC42DC42BC42BC42BC42BC42BC42BB3E5932F629F525F525F625D625F621D5215A421736384E3852D529F521F621F621F625BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429B3AF525F625F625F625D52D3862387A175EF725F625F625F625F625F625F521D629F625F529F649F755D529F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F6255A36BC42BC42BC3EDC42DC42BC42BC42BC42BC42BC42DC42DC42DC429B3A382EF525F625F621F625D62DF62DD52DD531F525F621F621F625F621BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42DD427A36F625F625D521F621D529D52DD529F621F625F625F625F625F625F621F629F625F621F625F625F621F621F625F625F621F621F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625172ABC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC423932F621F621D625F621F621F621F625F625F621F625382EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC425932D525D521F625F621F621F621F625F625F625F625F625F625F621F625F729F625F62539369A36BB3A9B3A5936172AF625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F525382EBC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BB3E382E172AF621F625F625D625172A5932BC3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD427A36F625F525F521F521F521F625F625F625F625F625F625F729F625172A7A3ADD42BC3EBC42BC42BC42BC42BC3EDD425932172AF621F625F625F625F625F625F625F625F625F625F625F6257A36DC42DD42BC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BC42BC42BC46DC46BC42BC42BC46DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429B3E382ED521F625F525D521F521F525F625F625162A5936BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC425932F625F625D625F625F625F625F525F525F625D5217A36BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3E59363832172E372E59329B3ABC3EBC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC3E5932172AF625F625D625F525162A7936BC3EBC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42DD42BC42BC42DC42BC42DC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC4" & _ "2BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42" ; Main GUI $form = GUICreate("ImageList", 400, 500) ;$listview = GUICtrlCreateListView("", 30, 50, 342, 384, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT)) $listview = GUICtrlCreateListView("", 30, 50, 342, 384, BitOR(0, $LVS_REPORT)) ; Set ex-style to use full row select, show gridlines and use double buffering _GUICtrlListView_SetExtendedListViewStyle($listview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) ; Add a thumbnail colun for the 88x88 thumbnail previews _GUICtrlListView_AddColumn($listview, "Thumbnail", 88) ; Add a title column to show the video title _GUICtrlListView_AddColumn($listview, "Title", 232) ; Use alternate backgrounds on each row GUICtrlSetBKColor($listview, $GUI_BKCOLOR_LV_ALTERNATE) ; Create a context menu for the listview $ctxListView = GUICtrlCreateContextMenu($listview) ; Add the Change thumbnail option to the vide listview context menu $ctxChangeThumbnail = GUICtrlCreateMenuItem("Change Thumbnail", $ctxListView) ; Create an imagelist Global $hImageList = _GUIImageList_Create(88, 88) ; Attach image list to the listview _GUICtrlListView_SetImageList($listview, $hImageList, 1) ; Create 10 rows of example data For $i = 1 To 10 ; Create a new listview row GUICtrlCreateListViewItem("" & $i, $listview) ; Set the background colour GUICtrlSetBKColor(-1, 0xAADDFF) ; Choose one of the 3 images at random $rnd = Random(1,3,1) ; Add the random image to the image list _GUIImageList_Add($hImageList, _GenBitmap($t[$rnd])) ; Add this image to the listview row _GUICtrlListView_SetItem($listview, "", $i-1, 0, $i-1) ; Add the title to the listview _GUICtrlListView_SetItem($listview, "Test Icon " & $i, $i-1, 1, $i-1) Next ; Show the GUI GUISetState(@SW_SHOW) ; Main Program Loop While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $ctxChangeThumbnail ; Chose Change Thumbnail from context menu ChangeThumbnail() EndSwitch WEnd Func ChangeThumbnail() Local $SelectedCount = _GUICtrlListView_GetSelectedCount($listview) ; Check at least one video is selected If $SelectedCount = 0 Then MsgBox(48, $WindowTitle, "Please select at least one video from the list." & @CRLF & "NOTE: You can hold down CTRL when clicking to select multiple videos.") Return EndIf ; Display a dialog to get an image filename Local $sFilename = FileOpenDialog("Choose Image...", @DesktopDir, "Images(*.jpg;*.png;*.bmp)", 3, "", $Form) ; If they cancel then do nothing If @Error Then Return ; Create a 88x88 thumbnail for the chosen image $Thumbnail = _CreateThumbnail($sFilename) ; Get an array of the selected row numbers $arrSelected = _GUICtrlListView_GetSelectedIndices($listview, True) ; Lock the GUI for updating GUISetState(@SW_LOCK) ; Loop through and change all selected rows For $i = 1 To UBound($arrSelected)-1 ; Add the new thumbnail to the end of the image list $new = _GUIImageList_Add($hImageList, $Thumbnail[0]) ; Swap the new image with the selected image _GUIImageList_Swap($hImageList, $arrSelected[$i], $new) ; Delete the now unrequired image _GUIImageList_Remove($hImageList, $new) Next ; Unlock the GUI (forces refresh of image list) GUISetState(@SW_UNLOCK) EndFunc Func _CreateThumbnail($inFilename) ; Load the image from the selected file Local $hImg = _GDIPlus_ImageLoadFromFile($inFilename) ; Variables to hold info Local $width, $height, $newwidth, $newheight, $x, $y Local $CropForm, $img1, $img2, $img3, $lbl1, $lbl2, $lbl3, $t, $t1, $t2, $t3 ; Get the image width & height $width = _GDIPlus_ImageGetWidth($hImg) $height = _GDIPlus_ImageGetHeight($hImg) ; Check if image needs to be cropped If $Width = $Height Then ; No cropping - go ahead and generate thumbnail ;ConsoleWrite("No Cropping required" & @CRLF) $t = _CreateBitmapAndDIBFromFile($himg, $listview, 0, 0, $width, $height) Else ; Image needs to be cropped Local $h1 = _GDIPlus_ImageLoadFromFile($inFilename) Local $h2 = _GDIPlus_ImageLoadFromFile($inFilename) Local $h3 = _GDIPlus_ImageLoadFromFile($inFilename) If $width > $height Then ; Landscape Crop GUI $CropForm = GUICreate("Crop Landscape", 310, 140, -1, -1, -1, -1, $Form) $img1 = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) $img2 = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) $img3 = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) $lbl1 = GUICtrlCreateLabel("Left", 30, 110, 50, 20, $SS_CENTER) $lbl2 = GUICtrlCreateLabel("Middle", 130, 110, 50, 20, $SS_CENTER) $lbl3 = GUICtrlCreateLabel("Right", 230, 110, 50, 20, $SS_CENTER) $t1 = _CreateBitmapAndDIBFromFile($h1, $img1, 0, 0, $height, $height) $t2 = _CreateBitmapAndDIBFromFile($h2, $img2, ($width-$height)/2, 0, $height, $height) $t3 = _CreateBitmapAndDIBFromFile($h3, $img3, $width-$height, 0, $height, $height) Else ; Portrait Crop GUI $CropForm = GUICreate("Crop Portrait", 200, 310, -1, -1, -1, -1, $Form) $img1 = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) $img2 = GUICtrlCreatePic("", 10, 110, 88, 88, -1, $WS_EX_CLIENTEDGE) $img3 = GUICtrlCreatePic("", 10, 210, 88, 88, -1, $WS_EX_CLIENTEDGE) $lbl1 = GUICtrlCreateLabel("Top", 100, 50, 50, 20, $SS_CENTER) $lbl2 = GUICtrlCreateLabel("Middle", 100, 150, 50, 20, $SS_CENTER) $lbl3 = GUICtrlCreateLabel("Bottom", 100, 250, 50, 20, $SS_CENTER) $t1 = _CreateBitmapAndDIBFromFile($h1, $img1, 0, 0, $width, $width) $t2 = _CreateBitmapAndDIBFromFile($h2, $img2, 0, ($height-$width)/2, $width, $width) $t3 = _CreateBitmapAndDIBFromFile($h3, $img3, 0, $height-$width, $width, $width) EndIf ; Show the preview for the 3 crop options _GUICtrlStatic_SetImage($img1, $t1[0]) _GUICtrlStatic_SetImage($img2, $t2[0]) _GUICtrlStatic_SetImage($img3, $t3[0]) ; Show the Crop GUI GUISetState(@SW_SHOW, $CropForm) ; Wait for user to click on one of the cropped images Local $cMsg While 1 $cMsg = GUIGetMsg() Switch $cMsg Case $img1 $t = $t1 ExitLoop Case $img2 $t = $t2 ExitLoop Case $img3 $t = $t3 ExitLoop EndSwitch WEnd ; Remove the crop GUI GUIDelete($CropForm) EndIf ; Return the thumbnail Return $t EndFunc Func _CreateBitmapAndDIBFromFile(ByRef $inHimg, ByRef $inDC, $inX, $inY, $inWidth, $inHeight) Local $ret[2] ; Get a device context Local $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($inDC)) ; Get a handle to a bitmap compatible with the specified device context Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88) ; Get a handle to a memory device context compatible with the specified device Local $hDC = _WinAPI_CreateCompatibleDC($hLblDC) _WinAPI_SelectObject($hDC, $hBitmap) Local $hGraph = _GDIPlus_GraphicsCreateFromHDC($hDC) _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, 88, 88) _GDIPlus_GraphicsDispose($hGraph) _GDIPlus_ImageDispose($inHimg) Local $tData = DllStructCreate("byte[15488]") Local $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 88) DllStructSetData($tBITMAPINFOHEADER, 3, -88) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16) ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0) _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1) _WinAPI_ReleaseDC(GUICtrlGetHandle($inDC), $hLblDC) _WinAPI_DeleteDC($hDC) $ret[0] = $hBitmap $ret[1] = Hex(DllStructGetData($tData, 1)) Return $ret EndFunc Func _GenBitmap($inDIB) ; This Function only used for the Dummy thumbnail data ; Modified from code provided by Prog@ndy ; Get a Device Context $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($listview)) ; Get a handle to a bitmap compatible with the specified device context $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88) ; Get a handle to a memory device context compatible with the specified device $hDC = _WinAPI_CreateCompatibleDC($hLblDC) ; Selects the object into the specified device context _WinAPI_SelectObject($hDC, $hBitmap) ; Create a structure to hold the DIB bits for the 88x88 image $tData = DllStructCreate("byte[15488]") ; Add the data to the structure DllStructSetData($tData, 1, "0x" & $inDIB) ; Setup the Bitmap information $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 88) DllStructSetData($tBITMAPINFOHEADER, 3, -88) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16) ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0) ; Set the DIB bits from the structure _WinAPI_SetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1) ; Do some memory cleanup _WinAPI_ReleaseDC(GUICtrlGetHandle($listview), $hLblDC) _WinAPI_DeleteDC($hDC) ; Return the handle to the bitmap Return $hBitmap EndFunc Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Function written by Prog@ndy - many thanks Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc
  2. Sorry for the delay in replying. Thanks for your suggestion UEZ, but the image has to be 88x88 so I can get the DIB bits to write into a SQLite database (it's expecting a BLOB of specific length for 88x88) data. For now, I've improved the GUI, by adding the 88x88 image onto each row in the listview Had to learn a lot about images, and imagelist but I'm much happier with it. It looks much better and also avoids the sunken edge issue. I'm still convinced the original program didn't have this problem. I'll try and re-visit it one day, but I'm much happier with the image list and list view solution so will keep the project moving forward with that P.S UEZ - are you aware people are getting your avatar shaved into their hairstyles? '> Thanks, NiVZ
  3. Hi Kovacic, That's great as a workaround, thank you. I'd still be interested to know why it's not working as it did previously. I'll go back to my original code and have another look to see if I can see any differences. Thanks again, NiVZ
  4. Hello, I'm re-visiting an old program of mine and trying to add a useful Cropping function. Here's my best effort at explaining what happens: 1. Run code and see GUI - thumbnail picture preview is blank but has sunken edge 2. Click the "Change Thumbnail" and choose a picture 3. If the picture is square it gets used as is, if it is landscape or portrait it pops up a child window with a preview of how you want it cropped (top, middle, bottom for portrairt - or - left, middle, right for landscape). The 3 preview images all have sunken edge that work ok and you click on the preview of the one you want to pick The issue is when the image is set on the thumbnail on the main GUI, it loses the sunken edge. Can anyone see where I've gone wrong? #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <GuiListView.au3> #include <WinApi.au3> #include <SQLite.au3> #include <GDIPlus.au3> #include <GUITab.au3> #include <Date.au3> #include <String.au3> ; Hide system tray icon #NoTrayIcon ; Use Event mode Opt("GUIOnEventMode", 1) Const $ProgramName = "CropTest" Const $Version = "v0.1" Const $WindowTitle = $ProgramName & " " & $Version & " by NiVZ" _GDIPlus_Startup() #Region ### START Koda GUI section ### Form= $Form = GUICreate($WindowTitle, 520, 520) $TabHost = GUICtrlCreateTab(10, 10, 504, 500) $TabVideo = GUICtrlCreateTabItem("Videos") ; Video Tab ; $grpVideo = GUICtrlCreateGroup("Video List", 20, 40, 300, 460) ; $lvVideos = GUICtrlCreateListView("Video Title", 30, 60, 280, 390, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_REPORT, $LVS_NOCOLUMNHEADER)) ; GUICtrlSetBKColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; _GUICtrlListView_SetColumnWidth(-1, 0, 259) ; $btnAddVideo = GUICtrlCreateButton("Add Video(s)", 30, 460, 90, 30) ; $btnDeleteVideo = GUICtrlCreateButton("Delete Video", 220, 460, 90, 30) ; GUICtrlSetState(-1, $GUI_DISABLE) ; GUICtrlCreateGroup("", -99, -99, 1, 1) Global $grpThumb = GUICtrlCreateGroup("Thumbnail", 330, 40, 170, 160) Global $imgVIcon = GUICtrlCreatePic("", 370, 60, 88, 88, -1, $WS_EX_CLIENTEDGE) Global $butChange = GUICtrlCreateButton("Change Thumbnail", 360, 158, 108, 30) GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group #EndRegion ### END Koda GUI section ### ; GUI Events GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents") GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUICtrlSetOnEvent($TabHost, "TabChange") GUICtrlSetOnEvent($butChange, "ChangeVideoThumbnail") GUISetState(@SW_SHOW) ; ## Main Program Loop ### While 1 ; Wait for events WEnd Func ChangeVideoThumbnail() ; Display a dialog to get an image filename Local $sFilename = FileOpenDialog("Choose Image...", @DesktopDir, "Images(*.jpg;*.png;*.bmp)", 3, "", $Form) If @Error Then ; Do nothing, dialog was cancelled Else CreateThumbnail($sFilename) EndIf EndFunc Func CreateThumbnail($inFilename) ; Set to middle by default Local $crop = 1 ; Local $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon)) ; Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88) ; Local $hDC = _WinAPI_CreateCompatibleDC($hLblDC) ; _WinAPI_SelectObject($hDC, $hBitmap) Local $hImg = _GDIPlus_ImageLoadFromFile($inFilename) ; Local $hGraph = _GDIPlus_GraphicsCreateFromHDC($hDC) Local $width, $height, $newwidth, $newheight, $x, $y $width = _GDIPlus_ImageGetWidth($hImg) $height = _GDIPlus_ImageGetHeight($hImg) If $width > $height Then $Crop = CropLand($inFilename, $width, $height) ; Landscape If $Crop = 0 Then $x=0 ; Left ElseIf $Crop = 1 Then $x = ($width - $height) /2 ; Middle ElseIf $Crop = 2 Then $x = $width-$height ; Right EndIf $y = 0 $newwidth = $height $newheight = $height ElseIf $height > $width Then $Crop = CropPort($inFilename, $width, $height) ; Portrait $x = 0 If $Crop = 0 Then $y = 0 ; Top ElseIf $Crop = 1 Then $y = ($height-$width) /2 ; Middle ElseIf $Crop = 2 Then $y = $height-$width ; Bottom EndIf $newwidth = $width $newheight = $width Else ; Square $x = 0 $y = 0 $newwidth = $width $newheight = $width EndIf _GUICtrlStatic_SetImage($imgVicon, GenerateThumbnail($hImg, $imgVIcon, $x, $y, $newwidth, $newheight)) ;ConsoleWrite($inFilename & " X:" & $x & " Y:" & $y & " W:" & $newwidth & " H:" & $newheight & @CRLF) EndFunc Func CropLand($inFilename, $inWidth, $inHeight) Local $himgL = _GDIPlus_ImageLoadFromFile($inFilename) Local $himgM = _GDIPlus_ImageLoadFromFile($inFilename) Local $himgR = _GDIPlus_ImageLoadFromFile($inFilename) Local $CropForm = GUICreate("Crop Landscape", 310, 200, -1, -1, -1, -1, $Form) Local $imgLeft = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) Local $imgMiddle = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) Local $imgRight = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) _GUICtrlStatic_SetImage($imgLeft, GenerateThumbnail($hImgL, $imgLeft, 0, 0, $inheight, $inheight)) _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, ($inwidth-$inheight)/2, 0, $inheight, $inheight)) _GUICtrlStatic_SetImage($imgRight, GenerateThumbnail($hImgR, $imgRight, $inwidth-$inheight, 0, $inheight, $inheight)) GUISetState(@SW_SHOW) Opt("GUIOnEventMode", 0) Local $nMsg = 0 Local $retVal = 0 While 1 $nMsg = GUIGetMsg() Select Case $nMsg = $imgLeft $retval = 0 ExitLoop Case $nMsg = $imgMiddle $retval = 1 ExitLoop Case $nMsg = $imgRight $retval = 2 ExitLoop EndSelect Wend GUIDelete($CropForm) Opt("GUIOnEventMode", 1) Return $retval EndFunc Func CropPort($inFilename, $inWidth, $inHeight) Local $himgT = _GDIPlus_ImageLoadFromFile($inFilename) Local $himgM = _GDIPlus_ImageLoadFromFile($inFilename) Local $himgB = _GDIPlus_ImageLoadFromFile($inFilename) Local $CropForm = GUICreate("Crop Portrait", 310, 200, -1, -1, -1, -1, $Form) Local $imgTop = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) Local $imgMiddle = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) Local $imgBottom = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE) _GUICtrlStatic_SetImage($imgTop, GenerateThumbnail($hImgT, $imgTop, 0, 0, $inwidth, $inwidth)) _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, 0, ($inheight-$inwidth)/2, $inwidth, $inwidth)) _GUICtrlStatic_SetImage($imgBottom, GenerateThumbnail($hImgB, $imgBottom, 0, $inheight-$inwidth, $inwidth, $inwidth)) GUISetState(@SW_SHOW) Opt("GUIOnEventMode", 0) Local $nMsg = 0 Local $retVal = 0 While 1 $nMsg = GUIGetMsg() Select Case $nMsg = $imgTop $retval = 0 ExitLoop Case $nMsg = $imgMiddle $retval = 1 ExitLoop Case $nMsg = $imgBottom $retval = 2 ExitLoop EndSelect Wend GUIDelete($CropForm) Opt("GUIOnEventMode", 1) Return $retval EndFunc Func GenerateThumbnail(ByRef $inHimg, ByRef $inIcon, $inX, $inY, $inWidth, $inHeight) ;Local $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon)) Local $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($inIcon)) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88) Local $hDC = _WinAPI_CreateCompatibleDC($hLblDC) _WinAPI_SelectObject($hDC, $hBitmap) Local $hGraph = _GDIPlus_GraphicsCreateFromHDC($hDC) ;_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 88, 88) _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, 88, 88) _GDIPlus_GraphicsDispose($hGraph) _GDIPlus_ImageDispose($inHimg) Local $tData = DllStructCreate("byte[15488]") Local $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 88) DllStructSetData($tBITMAPINFOHEADER, 3, -88) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16) ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0) ; Choose Colormask manually, example for 5-5-5 ;~ DllStructSetData($tBITMAPINFOHEADER, 6, 3) ;BI_BITFIELDS ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1) _WinAPI_ReleaseDC(GUICtrlGetHandle($inIcon), $hLblDC) _WinAPI_DeleteDC($hDC) ;_SQLite_Exec($VideoDB, "Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';") ;ConsoleWrite("Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';" & @CRLF) ;Return Hex(DllStructGetData($tData, 1)) Return($hBitmap) ;_GUICtrlStatic_SetImage($imgVIcon, $hBitmap) EndFunc Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Function written by Prog@ndy - many thanks Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc Func SpecialEvents() Select Case @GUI_CtrlId = $GUI_EVENT_CLOSE _GDIPlus_Shutdown() Exit ;Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle) ;Case @GUI_CtrlId = $GUI_EVENT_RESTORE ;MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle) EndSelect EndFunc ;==>SpecialEvents Thanks, NiVZ
  5. Not sure how to get exactly what you are after, but this might get you started: $URL = "http://www.autoitscript.com" $objHTTP = ObjCreate("MSXML2.ServerXMLHTTP.6.0") $objHTTP.Open("HEAD", $URL, false) $objHTTP.Send(" ") $headers = $objHTTP.getAllResponseHeaders $lastmodified = $objHTTP.getResponseHeader("Last-Modified") $body = $objHTTP.ResponseText MsgBox(0, "Headers", $headers) MsgBox(0, "Last Modified", $lastmodified) NiVZ
  6. I tend to use this for checking the status of webpages as it can get you the status text and status code (eg, 404 not found, 401 Not authorised, etc) ConsoleWrite("Checking Bank: " & _GetURLStatus("https://secure.ambankiowa.com/pbi_pbi1961/pbi1961.ashx?Rt=073917641&LogonBy=Connect3&PRMAccess=Portfolio") & :@CRLF) Func _GetURLStatus($inURL) Local $val = "" Local $objHTTP = ObjCreate("MSXML2.ServerXMLHTTP.6.0") $objHTTP.Open("GET", $inURL, false) ; Uncomment next 4 lines if using a proxy server ;Local $proxyserver = "" ; add proxy server name ;Local $proxyport = "" ; add proxy server port ;Local $ProxyExceptions = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyOverride") ; get any proxy exceptions ;$objHTTP.setProxy("2", $proxyserver & ":" & $proxyport, $ProxyExceptions) $objHTTP.Send(" ") ; Check the status code of the request If $objHTTP.status = "200" Then $val = $objHTTP.statusText Else $val = $objHTTP.statustext & " (" & $objHTTP.status & ")" EndIf Return $val EndFunc NiVZ
  7. Zoldex, I read the data from the SQLite query into an array. Then I have a function that loops through the array to populate the listview. When I delete a selected row, I delete that row number from the array (and from the database) and then re-call the function to update the listview. That way the array always has the rows in the same order as the listview, but in the delete statement to the database I can pass the KEY that is held in one of the array columns. Another method would be to hold the database KEY value in a hidden column in the ListView. Hope that gives you an idea. NiVZ
  8. Hello, Sorry to resurrect this old thread again. I tried but never got this working. I'm now adding support for InnoTab 2 and though I'd give it another try. This is as far as I got. I'm looping through the original thumbnail and adding a '00' byte after every 171 haracters which straightens it up a bit, but it's still slightly off. #include<winapi.au3> #include<sqlite.au3> #include<windowsconstants.au3> _SQLite_Startup() _SQLite_Open(@ScriptDir & "Innopad.db") Global $aRow _SQLite_QuerySingleRow(-1, "SELECT thumbnail FROM Games_info where pkey='3'", $aRow) _SQLite_Close() _SQLite_Shutdown() GUICreate("Test") $imgIcon = GUICtrlCreatePic("", 10, 10, 57, 57) GUISetState() $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($imgIcon)) $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 57, 57) $hDC = _WinAPI_CreateCompatibleDC($hLblDC) _WinAPI_SelectObject($hDC, $hBitmap) $aRow[0] = BinaryMid($aRow[0], 9, BinaryLen($aRow[0])-9) Dim $newRow For $i = 1 To BinaryLen($aRow[0]) Step 171 ConsoleWrite("OLD:" & BinaryMid($aRow[0], $i, 171) & '00' & @CRLF) $newRow &= BinaryToString(BinaryMid($aRow[0], $i, 171) & BinaryMid(0x00,1,2)) ConsoleWrite("NEW:" & BinaryMid($newRow, $i, 173) & @CRLF & @CRLF) ;EXITLOOP Next $newRow = Binary($newRow) ;ConsoleWrite("NEW ROW:" & @CRLF) ;ConsoleWrite($newRow & @CRLF) ;EXIT ;ConsoleWrite($aRow[0] & @CRLF) ;$tData = DllStructCreate("byte[" & BinaryLen($aRow[0]) & "]") ;DllStructSetData($tData, 1, $aRow[0]) MsgBox(0,"",BinaryLen($aRow[0]) & @CRLF & BinaryLen($newRow)) $tData = DllStructCreate("byte[" & BinaryLen($newRow) & "]") DllStructSetData($tData, 1, $newRow) $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 57) DllStructSetData($tBITMAPINFOHEADER, 3, -57) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16) ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0) ; Choose Colormask manually, example for 5-5-5 ;~ DllStructSetData($tBITMAPINFOHEADER, 6, 3) ;BI_BITFIELDS ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask _WinAPI_SetDIBits($hLblDC, $hBitmap, 0, 57, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1) _WinAPI_ReleaseDC(GUICtrlGetHandle($imgIcon), $hLblDC) _WinAPI_DeleteDC($hDC) _GUICtrlStatic_SetImage($imgIcon, $hBitmap) While GUIGetMsg()<>-3 WEnd ; #FUNCTION# ==================================================================================================================== ; Name...........: _GUICtrlStatic_SetImage ; Description ...: Sets a HBITMAP to a static control like image or label ; Syntax.........: _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Parameters ....: $iCtrlId - CtrlId or handle of Control in the current process ; $hBitmap - Pointer top Windows HBITMAP ; Return values .: Success - 1 ; Failure - 0 and set @error: ; |1 - invalid $pSource ; |1 - invalid $pSource ; Author ........: ProgAndy, Zedna ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc Thanks, NiVZ
  9. I wrote this a while ago to try the same thing via a right click tray menu. I also had another program that changed my default printer based on my IP address for different offices. ** NOTE: 1. It won't reflect changes made by going to Control panel and setting the default printer that way 2. It doesn't update the default printer in programs you already had started, eg start Word, Change Default printer, Word still shows original printer NiVZ #include <Array.au3> #include <Constants.au3> ; Turn off default tray menu options Opt("TrayMenuMode", 1) ; Set some program constants Const $ProgramName = "Default Printer Selector" Const $ProgramVersion = "1.00" Const $WindowTitle = $ProgramName & " " & $ProgramVersion ; Change the tray icon TraySetIcon(@SystemDir & "SHELL32.dll", 17) ; Set the tray program name TraySetToolTip($WindowTitle) ; Store result of _GetPrinters() function $arrPrinters = _GetPrinters() ; Check if any printers were found If UBound($arrPrinters) = 1 Then MsgBox(16, $WindowTitle, "Error - No Printers Found for user " & @Username) Else ; Get the default printer name $strDefaultPrinter = _GetDefaultPrinter() ; Create the menu For $i = 1 to UBound($arrPrinters)-1 ; Store the menu handle in the 3rd column $arrPrinters[$i][2] = TrayCreateItem($arrPrinters[$i][0]) ; Set the tick mark if this is the current default printer If $arrPrinters[$i][0] = $strDefaultPrinter Then TrayItemSetState(-1, $TRAY_CHECKED) Else TrayItemSetState(-1, $TRAY_UNCHECKED) EndIf Next ; Create a tray menu seperator TrayCreateItem("") ; Create an Exit option $mnuExit = TrayCreateItem("Exit") While 1 ; Get any tray menu messages $tMsg = TrayGetMsg() ; Quit if user clicks exit If $tMsg = $mnuExit Then Exit ; Check the tray message is one of our printer tray menu item handles If $tMsg >= $arrPrinters[1][2] AND $tMsg <= $arrPrinters[UBound($arrPrinters)-1][2] Then ; Search the array to find the index of the tray item handle that was clicked $intClickItem = _ArraySearch($arrPrinters, $tMsg) ; If the index is found in the array If $intClickItem > -1 Then ; Loop through all the menu items For $i = 1 to UBound($arrPrinters)-1 If $i = $intClickItem Then ; Tick the item that was clicked and update registry TrayItemSetState($arrPrinters[$i][2], $TRAY_CHECKED) RegWrite("HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows", "Device", "REG_SZ", $arrPrinters[$i][0] & "," & $arrPrinters[$i][1]) Else ; Untick the menu item TrayItemSetState($arrPrinters[$i][2], $TRAY_UNCHECKED) EndIf Next EndIf EndIf WEnd EndIf Func _GetDefaultPrinter() ; Read the default printer name from the registry Local $strDefaultPrinter = RegRead("HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows", "Device") ; Only need the part up to the first comma (rest of line is port details) $strDefaultPrinter = StringLeft($strDefaultPrinter, StringInStr($strDefaultPrinter, ",")-1) ; Return the printer name Return $strDefaultPrinter EndFunc Func _GetPrinters() ; Local array to hold one row of printer details - printer name, port details, tray menu handle Local $arrLocalPrinters[1][3] ; Counter for looping through registry Local $i = 1 ; While there are still registry entries to read While 1 ; String location of registry to read Local $strREGKEY = "HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionPrinterPorts" ; Get the next printer name from the registry value Local $strPrinter = RegEnumVal($strRegKey, $i) ; Exit if there are no more registry entries If @error Then ExitLoop ; Read the printer port details for this printer Local $strPort = RegRead("HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionPrinterPorts", $strPrinter) ; Only need the part from start of string to first colon $strPort = StringLeft($strPort, StringInStr($strPort, ":")) ; Add this printer to the array Local $intMax = UBound($arrLocalPrinters) ; Add an new row to the array ReDim $arrLocalPrinters[$intMax+1][3] ; Store the printer name in column 1 $arrLocalPrinters[$intMax][0] = $strPrinter ; Store the printer port details in column 2 $arrLocalPrinters[$intMax][1] = $strPort ; Increase the loop counter to get the next registry value $i += 1 WEnd ; Sort the printer array alphabetically _ArraySort($arrLocalPrinters) ; Return the array Return $arrLocalPrinters EndFunc
  10. I started off using this one as an alternative to the serial com UDF I also just posted code here, which I used for checking which COM port was being used (not sure what you can do if the device is unplugged though) NiVZ
  11. I wrote this a while ago for getting the COM port for a Diabetic Meter connected via USB serial cable Opt("TrayMenuMode", 1) $DEBUG = FALSE $ERROR_COM_PORT_NOT_FOUND = -1 $Port = _FindCOM("Prolific USB-to-Serial Comm Port", "USB") If $Port = $ERROR_COM_PORT_NOT_FOUND Then MsgBox(16, "COM Port Finder", "No Data Cable Detected") Else MsgBox(64, "COM Port Finder", "Data Cable Found on Port " & $Port) EndIf #cs ############################################################################################################## # Function: _FindCOM($inDeviceName, $inClassKey) # # $inDeviceName - is the registry 'FriendlyName' of the device you want to find # $inClassKey - is the Bass class under HKLMSystemEnum where you want to search, eg USB, UMPPORT # # Function searches through all the device GUID's looking for a match and then compares the 'PortName' from # 'Device Parameters' with the open COM ports in HKLMSystemHardwareSerialCOMM # # Function returns the COM port name if an active COM port is found for the device, eg 'COM1' # or -1 if an active COM port is NOT found # ############################################################################################################## #ce Func _FindCOM($inDeviceName, $inClassKey) If $DEBUG Then ConsoleWrite("*** Getting COM Port for: " & $inDeviceName & @CRLF) Local $i = 1 $ClassKey = "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum" & $inClassKey ; DEVICE LOOP - Loop through all DEVICE GUID's While 1 ; Get the Device GUID for this loop $DeviceKey = RegEnumKey($ClassKey, $i) If @error Then ExitLoop Local $j = 1 ; INSTANCE LOOP - Loop through all instances of the device (if it has been connected to different ports) While 1 ; Get the Device Instance for this loop $InstanceKey = RegEnumKey($ClassKey & "" & $DeviceKey, $j) If @error Then ExitLoop ; Read the friendly name $FriendlyName = RegRead($ClassKey & "" & $DeviceKey & "" & $InstanceKey, "FriendlyName") If @error Then ExitLoop ; The registry FriendlyName has the COM Port in brackets so need to remove this before trying the match If StringLeft($FriendlyName, StringInStr($FriendlyName, " (COM")-1) = $inDeviceName Then ; We have a match so get the COM port for this instance $COMtoCheck = RegRead($ClassKey & "" & $DeviceKey & "" & $InstanceKey & "Device Parameters", "PortName") If $DEBUG Then ConsoleWrite(@TAB & "Device Found at: " & $ClassKey & "" & $DeviceKey & "" & $InstanceKey & " using port " & $COMtoCheck & @CRLF) ; Check if this is an Active COM Port Local $k = 1 ; COM PORT LOOP - Loop through all the open COM ports While 1 ; Get the Active COM port for this loop $ActiveCOMPort = RegRead("HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM", RegEnumVal("HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM", $k)) If @Error then ExitLoop If $ActiveComPort = $COMtoCheck Then ; If the Active COM port for this loop equals our Device COM port then we have found the correct port $Active = True ExitLoop Else ; Otherwise keep checking the other Active COM ports $Active = False EndIf $k += 1 WEND If $Active Then ; If we set active variable to true then return the COM port If $DEBUG Then ConsoleWrite(@TAB & "Port " & $COMtoCheck & " is ACTIVE" & @CRLF) If $DEBUG Then ConsoleWrite("*** RETURN: " & $COMtoCheck & @CRLF) Return $COMtoCheck Else ; The COM port on this instance is not active If $DEBUG Then ConsoleWrite(@TAB & "Port " & $COMtoCheck & " is NOT ACTIVE" & @CRLF) EndIf EndIf $j += 1 WEnd $i += 1 WEnd ; Could Not Find Active COM Port for matching device If $DEBUG Then ConsoleWrite("*** RETURN: -1" & @CRLF) Return $ERROR_COM_PORT_NOT_FOUND EndFunc
  12. I've seen the Kindle software do this as well. I'd also guess this is to allow non-admins to install it. NiVZ
  13. Okay, I got a bit further and now realise this is to do with "Stride", but I still don't know how to fix it NiVZ
  14. Hello, Sorry to resurrect this old thread. I've added a lot of new features to this program but have gotten stumped by another image problem. I've added a 'Games' tab which use a different size thumbnail. From what I've figured out, this thumbnail is 57 pixels by 57 and uses the same format (except it has a small header giving the dimensions in hex 3900 0000 3900 0000, which I strip from the front) The problem is when I read the rest of the image and display it, it is skewed (see attached image). Would you guys mind having a look? I re-used Prog@ndys original code for a small test script and have attached the db file I'm using again. Thanks, NiVZ #include<winapi.au3> #include<sqlite.au3> #include<windowsconstants.au3> _SQLite_Startup() _SQLite_Open(@ScriptDir & "\Innopad.db") Global $aRow _SQLite_QuerySingleRow(-1, "SELECT thumbnail FROM Games_info where pkey='3'", $aRow) _SQLite_Close() _SQLite_Shutdown() GUICreate("Test") $imgIcon = GUICtrlCreatePic("", 10, 10, 57, 57) GUISetState() $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($imgIcon)) $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 57, 57) $hDC = _WinAPI_CreateCompatibleDC($hLblDC) _WinAPI_SelectObject($hDC, $hBitmap) $aRow[0] = BinaryMid($aRow[0], 9, BinaryLen($aRow[0])-9) ConsoleWrite($aRow[0] & @CRLF) $tData = DllStructCreate("byte[" & BinaryLen($aRow[0]) & "]") DllStructSetData($tData, 1, $aRow[0]) $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 57) DllStructSetData($tBITMAPINFOHEADER, 3, -57) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16) ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0) ; Choose Colormask manually, example for 5-5-5 ;~ DllStructSetData($tBITMAPINFOHEADER, 6, 3) ;BI_BITFIELDS ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask _WinAPI_SetDIBits($hLblDC, $hBitmap, 0, 57, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1) _WinAPI_ReleaseDC(GUICtrlGetHandle($imgIcon), $hLblDC) _WinAPI_DeleteDC($hDC) _GUICtrlStatic_SetImage($imgIcon, $hBitmap) While GUIGetMsg()<>-3 WEnd ; #FUNCTION# ==================================================================================================================== ; Name...........: _GUICtrlStatic_SetImage ; Description ...: Sets a HBITMAP to a static control like image or label ; Syntax.........: _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Parameters ....: $iCtrlId - CtrlId or handle of Control in the current process ; $hBitmap - Pointer top Windows HBITMAP ; Return values .: Success - 1 ; Failure - 0 and set @error: ; |1 - invalid $pSource ; |1 - invalid $pSource ; Author ........: ProgAndy, Zedna ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16 If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFuncInnopad.zip
  15. Figured it out [/sup] [sup]#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <GuiListView.au3> #include <GDIPlus.au3>[/sup] [sup]; Hide system tray icon #NoTrayIcon[/sup] [sup]; Use Event mode Opt("GUIOnEventMode", 1)[/sup] [sup]; Setup some constants Const $ProgramName = "Cropper" Const $Version = "v1.00" Const $WindowTitle = $ProgramName & " " & $Version & " by NiVZ"[/sup] [sup]#Region ### START Koda GUI section ### Form= $Form = GUICreate($WindowTitle, 520, 520)[/sup] [sup]$TabHost = GUICtrlCreateTab(10, 10, 504, 500)[/sup] [sup]$TabPhoto = GUICtrlCreateTabItem("Photos")[/sup] [sup] $grpPhotos = GUICtrlCreateGroup("Photo List", 20, 40, 300, 460) $lvPhotos = GUICtrlCreateListView("Photo Title", 30, 60, 280, 390, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_REPORT, $LVS_NOCOLUMNHEADER)) GUICtrlSetBKColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) _GUICtrlListView_SetColumnWidth(-1, 0, 259) $btnAddPhoto = GUICtrlCreateButton("Add Photo", 30, 460, 90, 30)[/sup] [sup] GUICtrlCreateGroup("", -99, -99, 1, 1)[/sup] [sup] Global $grpPThumb = GUICtrlCreateGroup("Thumbnail", 330, 40, 170, 160) Global $imgPIcon = GUICtrlCreatePic("", 370, 60, 88, 88, -1, $WS_EX_CLIENTEDGE) ;Global $butChange = GUICtrlCreateButton("Change Thumbnail", 360, 158, 108, 30) GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group [/sup] [sup]#EndRegion ### END Koda GUI section ###[/sup] [sup]GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents") GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents") GUICtrlSetOnEvent($btnAddPhoto, "AddPhoto")[/sup] [sup]_GDIPlus_Startup()[/sup] [sup]GUISetState(@SW_SHOW)[/sup] [sup]While 1 ; Wait for events WEnd[/sup] [sup] [/sup] [sup]Func AddPhoto() ; Show the add photos dialog Local $aFiles = FileOpenDialog("Add Photo", @DesktopDir, "Photos (*.jpg)", 1 + 2, "", $Form) If @error Then ; Do nothing Else CropImage($aFiles) EndIf EndFunc[/sup] [sup] [/sup] [sup]Func CropImage($inFilename)[/sup] [sup] ; Function written by [email="Prog@ndy"]Prog@ndy[/email] - many thanks[/sup] [sup] Local $newwidth, $newheight, $x, $y[/sup] [sup] Local $hLblDC = _WinAPI_GetDC(GUICtrlGetHandle($imgPIcon)) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88) Local $hDC = _WinAPI_CreateCompatibleDC($hLblDC) _WinAPI_SelectObject($hDC, $hBitmap) Local $hImg = _GDIPlus_ImageLoadFromFile($inFilename)[/sup] [sup] Local $width = _GDIPlus_ImageGetWidth($hImg) Local $height = _GDIPlus_ImageGetHeight($hImg) If $width > $height Then ; Landscape $x = ($width - $height) /2 $y = 0 $newwidth = $height $newheight = $height ElseIf $height > $width Then ; Portrait $x = 0 $y = ($height-$width) /2 $newwidth = $width $newheight = $width [/sup] [sup] Else ; Square $x = 0 $y = 0 $newwidth = $width $newheight = $width EndIf Local $hGraph = _GDIPlus_GraphicsCreateFromHDC($hDC)[/sup] [sup] ;_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 88, 88) _GDIPlus_GraphicsDrawImageRectRect($hGraph, $hImg, $x, $y, $newwidth, $newheight, 0, 0, 88, 88)[/sup] [sup] _GDIPlus_GraphicsDispose($hGraph) _GDIPlus_ImageDispose($hImg)[/sup] [sup] Local $tData = DllStructCreate("byte[15488]")[/sup] [sup] Local $tBITMAPINFOHEADER = DllStructCreate("DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]") DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER)) DllStructSetData($tBITMAPINFOHEADER, 2, 88) DllStructSetData($tBITMAPINFOHEADER, 3, -88) DllStructSetData($tBITMAPINFOHEADER, 4, 1) DllStructSetData($tBITMAPINFOHEADER, 5, 16)[/sup] [sup] ; use default GDI32 16 bit format: 5-5-5 DllStructSetData($tBITMAPINFOHEADER, 6, 0)[/sup] [sup] ; Choose Colormask manually, example for 5-5-5 ;~ DllStructSetData($tBITMAPINFOHEADER, 6, 3) ;BI_BITFIELDS ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask[/sup] [sup] _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)[/sup] [sup] _WinAPI_ReleaseDC(GUICtrlGetHandle($imgPIcon), $hLblDC) _WinAPI_DeleteDC($hDC)[/sup] [sup] _GUICtrlStatic_SetImage($imgPIcon, $hBitmap) EndFunc[/sup] [sup]Func SpecialEvents()[/sup] [sup] Select Case @GUI_CtrlId = $GUI_EVENT_CLOSE _GDIPlus_Shutdown() Exit[/sup] [sup] ;Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)[/sup] [sup] ;Case @GUI_CtrlId = $GUI_EVENT_RESTORE ;MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)[/sup] [sup] EndSelect[/sup] [sup]EndFunc ;==>SpecialEvents[/sup] [sup]Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap) ; Function written by [email="Prog@ndy"]Prog@ndy[/email] - many thanks Local Const $STM_SETIMAGE = 0x0172 Local Const $IMAGE_BITMAP = 0 Local Const $SS_BITMAP = 0xE Local Const $GWL_STYLE = -16[/sup] [sup] If IsHWnd($iCtrlId) Then If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0) Else $iCtrlId = GUICtrlGetHandle($iCtrlId) If Not $iCtrlId Then Return SetError(2,0,0) EndIf ; set SS_BITMAP style to control Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE) If @error Then Return SetError(3, 0, 0) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(4, 0, 0) Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap) If @error Then Return SetError(5, 0, 0) If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0]) Return 1 EndFunc[/sup] [sup]
×
×
  • Create New...