From ff45cd1225549ec63c608ba865697d79088cd4e9 Mon Sep 17 00:00:00 2001 From: TheShadowEevee Date: Mon, 21 Mar 2022 22:54:22 -0500 Subject: [PATCH] Remove Unneeded WadInstaller Source --- WadInstaller/InstallerHelper.cs | 120 - WadInstaller/Resources/WadInstaller.dol.z | Bin 299636 -> 0 bytes WadInstaller/WadInstaller.csproj | 58 - WadInstaller_Source/LICENSE.txt | 339 -- WadInstaller_Source/Makefile | 139 - WadInstaller_Source/README.Orig.es.txt | 43 - WadInstaller_Source/README.Orig.txt | 44 - WadInstaller_Source/README.txt | 4 - WadInstaller_Source/data/background | Bin 125170 -> 0 bytes WadInstaller_Source/installer.pnproj | 1 - WadInstaller_Source/installer.pnps | 1 - WadInstaller_Source/source/ahbprot.c | 91 - WadInstaller_Source/source/ahbprot.h | 44 - WadInstaller_Source/source/fat.c | 57 - WadInstaller_Source/source/fat.h | 41 - WadInstaller_Source/source/gui.c | 62 - WadInstaller_Source/source/gui.h | 8 - WadInstaller_Source/source/install.c | 2 - WadInstaller_Source/source/install.h | 14 - WadInstaller_Source/source/libpng/png.h | 3569 ----------------- WadInstaller_Source/source/libpng/pngconf.h | 1481 ------- WadInstaller_Source/source/libpng/pngu/pngu.c | 1132 ------ WadInstaller_Source/source/libpng/pngu/pngu.h | 171 - WadInstaller_Source/source/menu.c | 53 - WadInstaller_Source/source/menu.h | 9 - WadInstaller_Source/source/restart.c | 33 - WadInstaller_Source/source/restart.h | 8 - WadInstaller_Source/source/sha1.c | 172 - WadInstaller_Source/source/sha1.h | 12 - WadInstaller_Source/source/stub.S | 6 - WadInstaller_Source/source/sys.c | 98 - WadInstaller_Source/source/sys.h | 11 - WadInstaller_Source/source/title.c | 256 -- WadInstaller_Source/source/title.h | 16 - WadInstaller_Source/source/utils.h | 15 - WadInstaller_Source/source/video.c | 141 - WadInstaller_Source/source/video.h | 19 - WadInstaller_Source/source/wad-manager.c | 72 - WadInstaller_Source/source/wad.c | 405 -- WadInstaller_Source/source/wad.h | 9 - WadInstaller_Source/source/wpad.c | 81 - WadInstaller_Source/source/wpad.h | 12 - 42 files changed, 8849 deletions(-) delete mode 100644 WadInstaller/InstallerHelper.cs delete mode 100644 WadInstaller/Resources/WadInstaller.dol.z delete mode 100644 WadInstaller/WadInstaller.csproj delete mode 100644 WadInstaller_Source/LICENSE.txt delete mode 100644 WadInstaller_Source/Makefile delete mode 100644 WadInstaller_Source/README.Orig.es.txt delete mode 100644 WadInstaller_Source/README.Orig.txt delete mode 100644 WadInstaller_Source/README.txt delete mode 100644 WadInstaller_Source/data/background delete mode 100644 WadInstaller_Source/installer.pnproj delete mode 100644 WadInstaller_Source/installer.pnps delete mode 100644 WadInstaller_Source/source/ahbprot.c delete mode 100644 WadInstaller_Source/source/ahbprot.h delete mode 100644 WadInstaller_Source/source/fat.c delete mode 100644 WadInstaller_Source/source/fat.h delete mode 100644 WadInstaller_Source/source/gui.c delete mode 100644 WadInstaller_Source/source/gui.h delete mode 100644 WadInstaller_Source/source/install.c delete mode 100644 WadInstaller_Source/source/install.h delete mode 100644 WadInstaller_Source/source/libpng/png.h delete mode 100644 WadInstaller_Source/source/libpng/pngconf.h delete mode 100644 WadInstaller_Source/source/libpng/pngu/pngu.c delete mode 100644 WadInstaller_Source/source/libpng/pngu/pngu.h delete mode 100644 WadInstaller_Source/source/menu.c delete mode 100644 WadInstaller_Source/source/menu.h delete mode 100644 WadInstaller_Source/source/restart.c delete mode 100644 WadInstaller_Source/source/restart.h delete mode 100644 WadInstaller_Source/source/sha1.c delete mode 100644 WadInstaller_Source/source/sha1.h delete mode 100644 WadInstaller_Source/source/stub.S delete mode 100644 WadInstaller_Source/source/sys.c delete mode 100644 WadInstaller_Source/source/sys.h delete mode 100644 WadInstaller_Source/source/title.c delete mode 100644 WadInstaller_Source/source/title.h delete mode 100644 WadInstaller_Source/source/utils.h delete mode 100644 WadInstaller_Source/source/video.c delete mode 100644 WadInstaller_Source/source/video.h delete mode 100644 WadInstaller_Source/source/wad-manager.c delete mode 100644 WadInstaller_Source/source/wad.c delete mode 100644 WadInstaller_Source/source/wad.h delete mode 100644 WadInstaller_Source/source/wpad.c delete mode 100644 WadInstaller_Source/source/wpad.h diff --git a/WadInstaller/InstallerHelper.cs b/WadInstaller/InstallerHelper.cs deleted file mode 100644 index 4408a7f..0000000 --- a/WadInstaller/InstallerHelper.cs +++ /dev/null @@ -1,120 +0,0 @@ -/* This file is part of Sharpii. - * Copyright (C) 2009 WiiCrazy / I.R.on - * - * Sharpii is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Sharpii is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Sharpii. If not, see . - */ - -using System; -using System.IO; -using System.IO.Compression; -using System.Security.Cryptography; - -namespace WadInstaller -{ - public class WadInstaller_Plugin - { - const string version = "1.0"; - - public static string GetVersion() - { - return version; - } - } - - public class InstallerHelper - { - public static MemoryStream CreateInstaller(string wadFile, byte iosToUse) - { - return CreateInstaller(File.ReadAllBytes(wadFile), iosToUse); - } - - public static MemoryStream CreateInstaller(byte[] wadFileBytes, byte iosToUse) - { - const int injectionPosition = 0x665FC; - const int maxAllowedSizeForWads = 8 * 1024 * 1024 - 32; //(Max 4MB-32bytes ) - - //0. Read length of the wad to ensure it has an allowed size - uint wadLength = (uint)wadFileBytes.Length; - - if (wadLength > maxAllowedSizeForWads) - { - throw new ArgumentException(String.Format("The file is sized above the max allowed limit of {1} for network installation.", maxAllowedSizeForWads)); - } - - //1. Open the stub installer from resources - MemoryStream compressedStubInstallerStream = LoadCompressedStubInstaller("WadInstaller.dol.z"); - compressedStubInstallerStream.Seek(0, SeekOrigin.Begin); - - //2. Decompress compressed installer - MemoryStream uncompressedStubInstallerStream = new MemoryStream(); - - using (GZipStream gzipStream = new GZipStream(compressedStubInstallerStream, CompressionMode.Decompress)) - { - byte[] decompressedBuff = new byte[1024]; - while (true) - { - int length = gzipStream.Read(decompressedBuff, 0, 1024); - - if (length == 0) break; - - uncompressedStubInstallerStream.Write(decompressedBuff, 0, length); - } - - } - - //3. Take SHA of the wad and store it in the stub installer along with the size of the wad - - byte[] shaHash; - using (SHA1 shaGen = SHA1.Create()) - { - shaHash = shaGen.ComputeHash(wadFileBytes); - } - - //4. Inject the data into the installer - - //Write out the wad size - uncompressedStubInstallerStream.Seek(injectionPosition, SeekOrigin.Begin); - uncompressedStubInstallerStream.WriteByte((byte)((wadLength >> 24) & 0xff)); - uncompressedStubInstallerStream.WriteByte((byte)((wadLength >> 16) & 0xff)); - uncompressedStubInstallerStream.WriteByte((byte)((wadLength >> 8) & 0xff)); - uncompressedStubInstallerStream.WriteByte((byte)(wadLength & 0xff)); - - //Write out the SHA1 value (Against corruption of the file on the network, this value will be checked by the installer) - uncompressedStubInstallerStream.Write(shaHash, 0, 20); - - //Write out the ios to be used... - uncompressedStubInstallerStream.WriteByte(iosToUse); - - //pad it with three zeroes (to align it into 32-bit) - uncompressedStubInstallerStream.WriteByte(0); uncompressedStubInstallerStream.WriteByte(0); uncompressedStubInstallerStream.WriteByte(0); - - - //Write out to be installed wad file's contents... - uncompressedStubInstallerStream.Write(wadFileBytes, 0, (int)wadLength); - - return uncompressedStubInstallerStream; - } - - private static MemoryStream LoadCompressedStubInstaller(string installerResourceName) - { - using (BinaryReader resLoader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("WadInstaller.Resources." + installerResourceName))) - { - MemoryStream ms = new MemoryStream(); - byte[] temp = resLoader.ReadBytes((int)resLoader.BaseStream.Length); - ms.Write(temp, 0, temp.Length); - return ms; - } - } - } -} diff --git a/WadInstaller/Resources/WadInstaller.dol.z b/WadInstaller/Resources/WadInstaller.dol.z deleted file mode 100644 index 48a90a70c8056bd49f738f576934ca8bfa20ceeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299636 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

&0SZhwWn^epyLKK4>6_EN3AmrgEY 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 z zjA5nQ3(f4Wpni{gTF66tO@V#-6My#6UW>6R5YOhEs&g>{8DJxM#CJM=w^$EJ;l4Be_2I+ zRLU08mUIQr4M^HO4&0uUw43kHu5bp%s3knq3z3GzHNMlf#KSwa`0mAbFVaclEIhL~ zCV8HVZ`t^kjWl`x4Nu?s)-}Mb&-z}RivOVFqMQC(I#Rz3|9Q8u9^m3^J*@NJtt;w* zY=u2GX%VUhEubd|W!?P^ik-ie+PYdY~e>C z-_{WKR_Jh$_?KfTlsuMP0ZET1PyUOs}j_W&$L&T=i%8e z_>2iS$5=}}xr7y6BVt^3Gi)Htnk%Z#59F3!gm%| zhp7|%#Jd1*L3CF<#yOC-&epDHe9)PkVjp-03}171a1LQv_MQ3|eglp9Z3c0|Z^ViI zzSZGf!0RQ?;_0KWSKu<6cf^sW_B?r}B=QWmkjL@v$9p!uXOqYA9FOuj=l?cbP1qC- zUR}?7mFH>83p{26k8EoP()sRp>Oy+9uCF8c-l9I!^3f)m>$Tl@_Kq&szLyeqfWLVD ze0IOOJ{k8u`K~!-1=^z1jvQ?f#=Y2slxrKsN<%37ANrXwo5eKUu0MKA-ZNmEw=qTy z+s8id6!bIY#k;UKUJrS@^CZ){nGf;6nD<(&`2k%=mM(vp4PPBPEvI<5tK4er=l}7E zHV*#9T0eNU4I6Mdb?EOu)poT`-1PAmh*MR%t!T0L$^)d19>9J2w3~ zKG|~O&xuVYan}IfbUV?P_1fn!=GFJ~$#eFc$_elb_S?VtXgAR~As%zuC+^^DG|qk{ zou$*($?+lJf6{#pG5%clrFbt0=lFhkFW!QFxr_S-(TOxS z>fDiJLztgz52)sYpC6=6p|&T^XWOWgdY@AqUmBJIo=NLH_iEbZu`Is(dH<32hK}tN zZIc{-2`zvHI`M3lMSV*Fo}aMs9Q(YyqUiwGiH`$#de|oP{%-aebb*cE^NSgWZ{$7a zbm$m=yByya(ME;$EZGj*`&Vu8PAmK2T2*lpQ7Ka9+rBG28;!#B!1s?Pa4>=xDe{Cagh z&pREh;A8T)oqm>QjD+pC%b(XFW8Cyky9(c0M2{Vw;?b~|G9PIU{MxkB#V=dgf4IbS zl!K2@6K8@3aVYh6>t+43@y&&24sH7gE9pbq2HpY2dRWp9Uck@WZprbS4L`HH9Uq^t zPd1S5A$-6$?{}3ed)ZG!c-|d}sQpaxnKxt0o$K7YQ`44q>Cmn3WO|Tcl2run09A609pUTbjvoP8w1AF#mlu@~s!|z)U z^Ao>3D+s`6dvT4M_wvwY-#uC$^|2kt-c9QIkq6&z<9F)RHtYVPUX$giZ`AWsHhBoV zaSVKM3Ovz=ef4VWt6Q+IUW0x0TI?k|^uD?i`|8cuS8v6>dI$E^UD#K5V_)6#k_&v| z7DCQ{C#HD7FPjXJ;^7{3D{zZv4q!K>e$}P$hvyXDfyVdike)hf|2-h*P1rGUFV20s z+JjG=A^?l${mlk)t;TdB>S^KF1m1gHO5fgfIDy@!Z&5pWdw7qx})v^j+fgi#|+7%RSnUMejxQU#^p?ojcxSPg36~ z;+T_sN+0IhNqsQqAH7DOwi=awn6}oW4|UemrSZGvmU#}~T;YJ!jlEOptf3PTCBn8V zR|cll;5h?&=+GSKtUbf=dAC3}=BW;vkHJ4(nxI~KzWL;x!5MRh&P zvhSy;^TVE3;QpLla~yrY6)GOu0l63IPq|V)aR_DHmX99$a=K_SyX^;J8eskqDK}};1 z-|xRh!Pn@%4D7=a6b<`<%$ZY z4=BSkn}HGd=b6ffOqKbzgzJYd6fNf@{k71m&8N9)#RBa2^yHVD=2C3sj`YBoodsRF=`Ca zo?6mFNP6^WeQ|eWp%9GU4c!LmvZLTJDK`hnZ!_`~jS6!WjY4^Vr_L}ab1)C`+m%lY z?B+dP>VZkGkc#b8LVDc~T9MAYYgxDiqzZa5e9psZh=Edf^dS$ZF0-qvf>8FKPD80J_x z*K)n*U0}$GTW0aON9-s*ysZ!O{Z7&=I?VAjb~fhYV}~Q6>+lBAeRz-PIsCHdMNHrz z{PCJ?Sd-z8w-LT}o8XgoHT>zf8^9_ zmx!D5f!`^hO%CH5?Ag3+JNJ{_c#nzNoL=6Y+=Czdx1)@KeEFm`=u-ec)~`t)y-PB) z_eDhh(3aYq&?@&+L-vxQmm-OBXcKzj)RyTj622H>)UC$<%Mm-XSL-io+mY{fFY3z8 z%(hN6KDBRysEx-{@8$Tuy^rzd#5CR;)ca;XXzD5kUxF{ZDo!z>5vw#Rl+N z1NgB4{1^p4M!}C!@M9D_9|iwK!Fy5geH1*uA3VMvJiZ@1z8^dexucKcg)q^MPmU+R zO5*B0f2+qD#V zK3Mw5CB5M3z4(7?V7IHf#D@Jn&T@>#v;cHoL&|R46(CNMzRk{Od_trl&r8fh-;2zX zPd&GbJ`bz``jK&Hg?`my-R(5@&xPFbF!v0nfFp0==XrJn*k6@2$wS=5ay+LReKJto+C0?H`nUWoM(J&qi{~VM~}r`^ReuTBJshAn8!URyngkwm*BTq>-z#z%a5yHgJ8Kzm=;uCf(FAK?R5@we1bza} zfA(87_6Nss%!aD2^tE!{crE*>z$0!S@qw{QnoQ>W&p5o~Av0r+kF@#fN#W8sJ7v5* z{_{Lrp7pG@F-KBYLs=f>U9?#s{&1(EU;4<;pYygrB%=hf!#MgXBzzp(gwYw-9EWD6 z`>B{ny*GI-nCBPoK@6=DmZ2S%(=VxKNaKB{`^SX0ik`3-t}m+Ly*bFJZ?(l#_=+)? zVeJ;;x}uv!)=c^raEVHLjk0?yl=E-H^Y(W1e|CEicLsy7SxYe%Vh{3|w+ONAayf40 zJ`Ve6mO&K!#fB|;B1^r0=`UswXZB5)^Dd22@0A^X{7EUthHC1ikMPh z=nm|?GVb$D`m1>NbUT*H*bIe#cHbD@cb_kG@;=;eEEA!>zTgXYeOK}XacbE?A^-QS zkoC&DkX?wu)fcRw?R}&ad$=+e{Y#fy?&pHx$DWk>ZjAdyWuoaIcsYwOG7aAe^XKgd z(rQ#1=vo6jgls$`D1&##o@YCL=3^er=eoY;T{6!CM9`y~awl zW_66kyq1=aIK8@$Eg$H*ENy%|BE*M|{JjD8a6Qw;F>YL{O}^t<-gEo6b;ht&C$B|H z@mm01n=WoIK@@cBYjXYQE&Zx!DiLEl@lJbJlj~NuC(R#!#Hm-*a9!z2-?l@h{r2w- zu*+W)?;4nZSRwFRUG)_DS)p{|?i#Lv=zj@tY_P5_&$jKDyN&o!>KNSRfTtoEo|25Q zTSFfb70Khd72n90tqbsuF$26DglX4(ka5nA8LJCtm0uNJoblameNCS4opNYd2DKNT zpb7uqpWq97xlG^tUH<!o@b_9Qh^Y^JqB< zaawEj{M|42H1%AAId|g>YZ>7+x)iL06KU`h=qkV(&}oY6>S?zZSnruF=bwO@f6xx* z=*+%u;Jx0X;!g0MK(HS^E+&gJ-JAL*%8HzrTgNwI8r! z{Dn${`DlD+|9v%BuOUY#`mrDVfIJVGH%QpQ1J%r9HAx=NI#+-6I%HdYXQ^H*S)QC)b~J4VC=a>*$n^9`K;R% z?|%woE`V`ZhIY1mI@cC>pN;h<5W7U=sIe!Sc%CBnewnGW09TM@yED=Zj_W{2Y;R)x zglclZbI2PoGR=DKg3m)m(c^HqveUudTES+|w-Qa_FVo45~RpNT`sQ=YW!=U&*h znRlaO6Cj^05SU*DeA9oNb8`8NT$?feYpokb?8z8|w}&z$W8QH6ns$YXGo<*#m0i_M z{&0CYo@e;SZpGf3V?o%L3!gqm^y0r)%{8K*JV1Y+#2f0O%(0yO!ZoZ+ME}C|3;DYE zt!kgR9cxrei9o&0Tys(zOGIit{|9yr9hy;7SYe2SY>aVR4L+F9xeIenb-XY2hU9es zb}RJDTL#$q43OV+?1%#PjlP6Rgcw(~KXoR@F!|HU6qr5W7wn;wZrTbFF3gF3t~toR z6!O-B_{)RWC$|%5i`R~nIb(-_UMdqEGzOWj`SIX;Z}^==(c$bDOyQZdwI# z%KoFhtbLCQq1S?Y82_BMiOFq99JPr+)xO1HuDz3T#S$&oOu=&^_@fWcf>~Xu_3S6$ zpiO9BVNIO+qx{fJVK{y6zG_<^`yH1wdv*NCIpUSI&YlhbSNq3`Yc1||cb)F=|5%K3 z_PE^JO4+(A+ptc!pEAeVvOkoyar}0JneKjyPt;KcdA<(ukZ0rhnZP4|Z%Nv#l_UP? zO==&9^Ch&Yb#*y>2h9fGyiXe#tlF14i~JMVIJB4ZJ)S$kZ}?!4 z2@lH>Uc$+BGk$7tGV0liaq>EG5u4@7;o8tUDS_|O-EVZG&egMyrdGUp&HQ`6)QPP5 zun+71A<~9;27UZhFJR14p34XXpoj9#o3nW4q&Z?qXbEDih-%zx7=nKzaXb4pYoFXV z=ai(!2RI)s!Z=ZL(vXkyiz7FnjTp~@%yiIk)*$c280Yq}`Ii#s+>^X()+v7h+$-^% z)A1M3iaFLkIdyq$QUHyZEwGjEI*szlqkZV@QqISWT&&c=Kq2yeh-c^PaGo3;WEIgL`rjJI7=H`n(oeG2 zzz=2cePSHn(sa7Vzz^y5`W$Hod4s$Iy`<0l9QHW$g|Hp^M(D`QwcwLUVv6(~S1R%` z@0Uk!ojO3hCv|_2gBf4U4?X5&=tm2{TL$=w`{n@nYBu?bJZ04#4z9#}R$K>K-S-4+ z)JZGNQxA}*QpV$%R}_%zgP%TEC7)eEo^n-N?;ftFPdDxfi7NxVK|fz}V^d#d8tsF4 z_QpKU_qnlmJzwZ2zX4~>Dz4wObj*E4PxzWCTazaP%0Bg;9O33(w&-c_;kwP7Lu)|K z$=1q&0Ow6SxemLn%)tP7H1;945aj8VKNNzoU!6Kp5BYEBJ-M3yn&qCN3Vjjb$2V87 zZpibS(WmU`ZAyPPX^9Y_Ij)xJYcvnqiU*6Yf-LKk=d|Uan?DjHFVb(Pv_k~$8x|;@ zYyiC)KnKTvRupuLf@V?BD+-!`e~l<;5(Q17posyQRPyfIB=2@Xueb@%)3ds+SU0P0 z-8#bt{~lepjyz1+1hMooFwbT1PCMY59h&ol7sI=r42E|O*MG>X;uo3!xZ}l8=8nrl zc|UkDba#<2l!3!zUz|H=P29~l(%=VLwKmpCLY;mdFbeKsQBI|>mK zuk}VXf1>Ou@Qn+6lLFqLUa;SJ$NwWuSG{RGV7(hhy13AfaiC4g!lQ91+v&b|(HAf4 znbkEhjy!3jzH@E%;Cr_kAH!=oKH3(zCY!&!5qb;P($+fn`4&a8+_DFey0sL?<1S=2`tYuux}}1xdq~gb@g+>{U^5d z72i3H^_(tx&2t3l1H~)SsY4%ZfQ}h3y3Bi_$GM3gK0Md69@d9?Sl>D8g50+wyl(St=zl>3 z@-=lG+~2p)ka3dJLb)4#ZR=rUgY;H>$KH2)@h<4fyc>O`Z5i98jo?k{{z8!-WB37# zQPRFs>JjsRGe6}W!x!(%BTuati`3Z62^@4ZhjmfKig z(_4iAOk-i^GfbUFWjgK+-bmT*t>!$xww27Z zjcK_+UE%_D3D!j%IQA!~w>kmi829<>eM{H*>SdiWeo)6-YMW3mVV>T~cj3AH>9L=& zUf>=+y(aKT`h3c`Tqmq?&jqPpzxPQgFZ)m?AM@fM;w!HJ4OUofO#*Aw0qQ&3Ko7!B zdVw~*Q&9)f4uL*>j@@E}d3bh#=j~6#ho@zbZ;`$L=}Vvs!Smiu(MWy+EB9c(-W5Up z;p^)eZ*@E1W!`eEg^aiAr7a$Cv$W`4@d5H5ztgUryvlo1gG)9Ow}eIYS&bh9 zY3w)ivkuPZtOM^!WivZi4)}1&WRZqRWm3*jW;M$IM?KKh**N1fUY$E?y zi6ihMWr=Rd8&62y*a_L@EN>LqXZyMc@`mgyzw*nVhSa& z=xBOb58A~%zUeQ}7xp%PLFvX7>MWl}YoS%bE8u=Lu_=zD3V~ z$5`glKvJ3N^OY&|JNl2kAC&advud174WVIy|v{PXsun=UkO z19r-|DWw}0Xva8qaP{ z6K>Xnv`g3)#!wJ-nn?32o*Asbf0zD0TR%&%7I^gke0;a{|H+&Obqu%Obqmhs$)X&9 zb-#!2SN}|8P!0(F46q>$xJkzt?8n}_pWhM3*9E!Y`qD?PsOR@0(1m%Zn_P*ri3#r# z8RYk{f8~hsYF)eRSm=(A1W{K9))d4e&e)m2&t*H#g&*EqGN)$-d7qK8M#nhF8JJ_r zM8+}Flei<^h%dx3C_ug7jjV!1y>B(n!yB5Ph7I5-z`g-4!KZco{vi6ewDgg2Oho+0aebuY@eRGF-u%sYr^lyF$$)PigWe@@F>0ITejT(}U-^0{*M+ZL z1$sXFQ{_+3dm#Lw>waG+(7@R+~{VGF~ak#Y!S3c}33IkF;fUk_Yso_v+( zyA^7^J~L(Hy!ge-Fn45+T*o$Ijvu{lyuNf~xi2Uih}~}-;C#w?9%HGTdsUpJ6yTX6 z?_s9%d;#qj4un;l4*VW1U(}y@8 z&=wu=w9iGkBRJanyd?J@F|U-V+ubXmiR$kN%dsy)N;y^cdtYr zHVg&;-&xtDD4^DB>R*@-woU{54!;~tqh%Ay1m|C`KfgfX{q;)XoVaHjJX4^I8P0>O zu;Cwl|2w&8*~>Pb3WmX+|6DE_+etV;#{#w9zjBJWgN%o>hcP*0uO1o@48;f#Oqr-$X)F3T7G742oj<7|(0j4Ur$-pN0}{04L+ zZ{`K!?H_@WH2d7Q6~12UbZCZt`~UTri?@ubXR)rQ+8J}2_De_Qo1yIC{;>)3z?4zn zCh0nS30PiTG&0YHrmygQxlFoA=DbIZSWpSE&s;U?I##Wttd1h5Nekamq zhCY5*5b>Cw3T2#G9-44-aQ$>S&X1_E{I?Ey-UB^W-lJUKL^bO$-;x>}71JwYZfwF$ z+Gk=u(>lHuk29Tl=EknP;;asD|1~_P+#3$G2Xz}p;jEE+JETEQ6XUrr$9eWCj(^aj zFFgHDU-)ZH6_!kgZr7I@oaV#-RxyS62CWkE`})y5nYB#raayukBBiKn4fiQ7<6LtA zVz~N7%mwSmy8peo;GTJk2CtTlo(o3ho2v8qxkfm=!}S0-2qfmLp~-|}ORKC9*<9CO5 zM$fy>d`Wl{ZNAYms;zPPGE*vxaT=Eq4V~ATMSbyl)il6~o zq%u*kocCm?2ZW910mOG7q^xAt34`)nvffSV*!+A~@*VYTSlAxtr zU+GKCb$>NccIq{8!0=Dnt_3`*;tJ0uyJYhaqOKY-;v!%Jgs^C|n+IVdv0WgxD<%>V zYbc;lXbD2=D*L#}#x^{(n*=qKprL{df(VtiQ~^V!3PP1CT2#PTQG#HN3K+;^`~P$A zWjAX8?St>*ySaDgdFISHXU_aH=b#~|m1p2L?3XP@dpVcmif5u(eyY!lJkobh=K}QA?2qW5WAO#P6lu{K;a_ zvgvGTYSc8-QNBYjAHKp?^`2_vUkIyoQm$&0iQRZF0|?D>#=ep4Gt& zb??$FeI|DJp)sFqPBCII=M!<)o+%4)e^iSAo~<-{JkJ_Kw;p)T?fb8sNg{OjpHZ+}7z0Q09s*eEGyT^}U&us&ECn@oDc zHbFkxiR1x&eQ<2jH(wvbsrv^@#NQp|#4~u(nD)0e*<_ z-Gs46JXMT;a+ZPjncgtQGaESNnqEy@6QWNR#)JTRK!v~d&aScKFYM(|{S_OUcR+rH zqz!4}`q$!}UE)IfQ@I}np6pqY&5F)mbiVGD@Y%=k>$cSyB4&SbA>tp_3Y(b z&3`zS`-#Ie-7$>5Al)ZGzM~DL&gmAjCJ&B5mTYEP>I6RVUa#}3zD}2WJ3&=Wpe#-A z9Nyf0to~KRy(QJh^U)^AGsNOPGmeEC%^dJmN+#| z`TOx^M}2H%PqI63MD;IGZg;2A(OKQ!Kiz{erkcZu**)JUn;i8qZRg1+kgqT* z-$vADJX=2cW|1eVjmM(q?zD$gIv!CX=WgWMly)8EO80f<;eFtdSy5%>Yh`6d%-?y$ z3F29%m8t6&lozdELeo|K5~>_pEqY;$Xj4;%_2Ssk2gSKfyNdoN@~>T}w4qF;4&?mL z`XqiJd75?=c(AQ|8>cQ;+t?DMjUVB2biY*DMv!Mpxq z_Cog>I0icXNqddv&6wYX%Hz?m=YI#{G^>uGvu|9Zjet&5xOLnzSKxv!g8Hr_$lfWFYKAB zKEwplzi5~Qzd)+4OT05{EbwJUtxqQ(QF-vA{gidx{V#3MkJ2A@95T;<_hZx<(1$L{ zHoR;4=ad6_i)A~rZxIGO&DuV+As=(@>Mkk%@V+X~5}z*(lVzvLJ8m%6|=MqRTZ zjk_^oj}CLXjI{HOsgX45PM$3eHx80#KsW6q=-tMh!DwdzYu_+N2-DV#;k>b@dl zHPqod_Z2JB1otis)V;FI`h%HaU3@U@YRto$GyV9gGIA}U-E)z|J;PwCj9*2}i~-|$ zH|ytkbI*on$nh-E?_$ugmC8(DFP|E!-sh+QgK3IY?~>|By}ai*9;fXpzQ|Om;)_hX ztIJKZY7M438MiebXGng-Gr*=s6<=i9^xg-irs{2`vg!{^^J)wxcTInjrzYQ|)Rdd5 zYF3yQ*K9KdYd$b7sqJs7ubpgKS-ZltwsxBd=Pyi%PyN^}D!#~sSk_HH$Fo4Q9Paf@f@an5V~2pEFdh z>DJ#PZ3eG=2YO6nM}(bCW9% zcl8jfg#B|zka#8hj%NYyrmW64IdZZx1j;GOemh}3-d#EK6B?=~n@TF=9?GM)aJ|G> zZ1_9tYj~w=77=4)|3-KvwLAmLLs^e}8iiL1mlcgysyl;MD&UzAiC4PvYj`DRHGYSG z-6Pi<YnjR@wsQmE5#+BeNXu^+qc6j^;&$6vNHd3yizZ5_Hr*xKR;gS;(cfEO2KHn zQo>%x;|Y7DoC447d2~Q2LZoNaE%@2 zRc$TH`2Ezi4%9QrDJK10!BfL4HM2anL935*He#R2RH)8@3e{h7W#l~QlimYfso>mr zB|Yy2$q{&^f^*`P!g&PqfJQbIuapqP-Fpt_nXk`jul~g#jHOM zy=-TvS7KWjuVmiNyx6}B`_D(Je&uj_b8;kJiM$cUD}{OE8{?G@a6NMNzBB)w)@`++#(aUkCd5#$i#R!4C}9YJ*%y z6KlH(|97CjO|+qiGaT2Ebid}?+r(I#zPp#v_V_Do!Ta+Sk)r=LE;L)a+aT52U=Z8O z5~Y7RxuLISgW<_~QQi!Uad*2@Tz*3JnWr>(rc`J? z^GoZqN2oq?|DA~8`T*9psDt)j#)Y))F4`CEAC$IKP})*<=-^DeJGovWwo0YN$s#`e z2`_2bs*5ZdwkkJ_kLv9{KR#-hSHnk{d%#E8G<=jj8Xv{>>Gm~kL5YvTZ?yerXVCuR z8iyDpwY?`+cE<~vihvhPI=kJJ(EQEtf+uGYFNo*Vuj2(zx>Q_T{O<64>Ek{xF3u`( zafN7Ox>Lj-Q*FG2wc#>)r=1n6<^Wc0jE+_Na);XYZB*+A#1xw?$PfJjSs}wXs^=q@9KlbFr**;2yLxOpPo< ztE+&&p^V%pyn>##s0WN#3iGnwb6~`@{E-+jlS{*hS)+JCqucS_-N)>QA82^04oP*)U@TXTc!pYp$sp21x*KCx*1cCz8-`!$@^;%M0rmF^ZT-BjuZotIS1SnKAn4C}P89o^+uXJHg( zEce^BvG6Soo758B#`DgHExn9UWi8NgS9)2L<7_{1Wx$Heij?1+tGbL}nUoLwjb*F& zt2ikmFz!y4aR!6d2V<`&VGNoj@GZta!LE*f{9YA<*1EB0z0jsaVbIFH9bLzHHT+dD znywm_Z2dQpslbw@MwL5AE7#t=+|yC^z}QYLU2;^qU{pG7{6BArN|zhPyihMJxjk$z z87-0a68(|g@nPKm=zY7~|Cl53Vf!QTVYFw@jt?{0ReYFkhacM))!so`d+lL4_phY0 z^J1JxjRNI)}ms>Vv`*8iIr!?h>c-cM^e-^ zLH`--5AUHI9^_gkQNw*CY*P2J64qn?ptL*g!&FN8sJM^BNhFceE50e8pl_eTZWwGPoxOx@$ zk(4|<$n=TFRNO}*aF*(Nk7J8@ovE%Bd+qHR_hBNhWQK7cpEPyf`)S?O9gh~X-2oiT z`EhJVR`$#jNA^XP=R$e)=f}4lX^i5FV?CGOvbQ_t&#(jKC!HVj*K+(Uo7UIM z`kn*&ou=XAQq{F@GUETKYhJF8u;1MRyvCuk;vnTb_&Aw-gSuOE?2L}_W1V4)pStd4 z{c`QwU-hkPc%X*v^#A-&&+YjlEeiAFjCvPQ_?FGkSwSPdLTHKxf z>J(y{c5~dhzvbz(060)ncO0lT|G-lNqwpzd-TQUp&ozuxRm57WQo|l8LxZ9hbd-vF zvTC>|YgHKc1o^|cABlUST%i6V?umLt!#%B6%RHGLiGSn19NWt}s895E6R)Jv))s}& z3iH#Ju2K#E@9EyB{1qBTYNI}H$hYhtF;euuMbV0V$OJZ_O~*0w&c-OZS)=fOqWgRM z#;Et*k?-{LN4+PX!D9u#hR3o-;IY!9;*&E!HfSxJl54c;IUpj8y<^vJZo4-F+FSH%6sh zrKQ~znU-sGq;R26L%)Kzk zj^+rwSAXzjk&5T)IEMCz@m%z23|7}z$lGvU?3Gyv_?!*259HX@ADAAt7Y3N)Mfk?bqD$>TBNvF+8-pi-sxA@NS!neJ|Z{Zn? zj4g~i>+Y8^h5c8k@r752fsCawyi$wPv^v8GUv+7)9B~gfNMwSU0t<8DK zV4+V?$DVmwa#Xxo6R=rvh|P?+RhS!tyW`EYxEnLVaW@dR#Lt)qhX>iUIOdC~TdBs#z%v{#!_sNxOI#*h`q;p>|HCvxu^boC>V~PIlG$a8Dolhz!URWw;Edz^$D>D z?MOj>4>3<_+_mDRNS7WFqi|qEjKX9!KIL7*7-Nt9L4F&btOtJ^F)r^_`)M}{JIX0x z-RuMJBg4ISDfpHQ`ZnotQ)(cK^BR<2(cV`su>n6~n_9#BC+DegmueALqXu^>dg^hX zAnsMHg|4oJJjPvvX*gq(jyaf#apHZQxx7n|cLMsJT;t9lHnaU$e~xR#&U7Q5kj?+f z%z>U5rpSBTMBtBSVp|sE+<-ed@j`9>SgG9jFuj=c98J^rO67iv^5+RPbKNa^M%xhYH>&%yl{Uc`xvanDh%jsMq1@$OLzO?i%@$z# zAthPhzg&D<%)c2+%NKaktw6?~iMPo()XF~Y1savh8H0zhNkcZqc-7PJzT;ZZ0?&HI z7tTxh%YNEw zo|lijUDRUCL;EbARY%_TyxiAP^lD{Z(aXj>Z!g3|8au>N)LfZY{5@k{@o1#yw_d-5 zy?U*s*o-pb6x{2K_mO|_gP#xkJ8`)O25wWU_+S=3Q{|#)idQsp>6&c!n&33A49O)T5I>K@l~B-$Y3=Ff!M^pXXT1y zIZy9md{)GZif3Qj9L3|%_OWPtqHq<*pGQ9E-AAw@P39jC1!vjbYAt(mj4;Pq8Dldl*}#JYk%|%SQ7a zMhoP`G0&+SH)20Ia8K`gDbsPk19<5;_^eHfnbhGqfV)e#8HDHY0g&|uBlSDZzL^o5 zsR{Pr_8Q!a$a77=gzu@rc?QU*eUMxGA(xsVk6IviHlv;E(MH~XnFgLMfW2iPuG@?K zZN`pfY--@fp3!8c!(Z|yu~{ARop)@<%NP%>el<>UV=cv_wssme_QNl zEF8OxDbKVfh4-oFq^wz8dl|+yMc!p)@yFr}1KOp<_Gv0dKeX6BJ1WqZ3iPD{eW^fS zD$th-^rZr{3!py%&@BKu1wf|&=oA2r0-#R-wAlr^;2tYA7U43s<2!xSb{O4iI}(ng zeUwce-VcM=X|ei!rCD~YPrfVlP$^=R``8C5C;Ae19g>(8+B39o>??RL?9hiMTsY0| zxu5aijOn=ByDp1sFoRgB;P0a5*u1G?6ysXf*)QxcpkGOHe;4nw;uW!NVM5c$QW@J~ zAlBDb{{Ab3gu$acqsHZ=bQD zP)}kN=0Su1QLLGMh5t)Fbi;PPOp9Ag+&|lrM*A4wjKwp}xr`5&l_)I4gZZoM4*0B& zAx>q17Jsx6v|j5JsV3aR-gf_~vp@Vy-0(ZL z<30Iv?!nr|oS1Uk)BW7u#-eo?^B7`5NW0>had|rzCJB6t?GU8{H9O13-+1qJ@jY=} z-kH7UFlG_$m7NPA+s(qz`AqD!Xfy8<=C}@2Ui5=Ot25}yg>5ysh$to`X0xQny zG{7gsec&?2_F(xxohf;0JH|Yde1)ft@ifRYEQc|`>?bh)wuy$$#naQatx4F?*??GJ zD{xm{KK`S>Bgb|$sq-N*Gpko9l-qzlnN#fcRf#Fy2MgB87-VT18ao>V<3%jqHU|7S zxO8An3FJuwVn(2ha(u5wc|SEN0&TNltx=HMFq%(C@yuR%J5e8FDeRn#>$2TKbSkc3 z=j!Qcor_A-Kr_js;Ke%Dz3ssbXsf`tQhZCY;;wGSBJp_kU29>VJ@49F>~pR%+UD6Q zWp>K8X~;7Zc@|CQe$cTS9p*yPAq(-su=a71)}5uIpSN_vI`p~fr$12yaXx5sA=`&` zIhQ^FSv3*kGSh`Nm87Zk4>fvDcu%) zj2Afx_^;XK~yvvyLf%Ag%f%l`M&IaV+9++A3a=l?XFwebV+mv#S$`}?6 zYAgZo8sobBdQ&~;4%^H51DWMvtR(QQf$}2@eqr*Ax9@0o=d9@iJ4;LYb>KQuZ|NwG zh3BWG3hSI|$Gzkjhtj$fAvzKT#z43_#FPgxXR4%}tl7}K?I#J_J4DPEkV&9<*DUz+ zLXhDxxy_?(z6B~TFb&g2q$}uDrVm713wIFr-g~phxgl@+c@@OBz&EY_S*)M;>eqqZ z^gDGfcBLVmt0O7)0oVX*(VijXQ;bOm!?UZqMEe+ws@yd9J;{ z_qJP}bM{>X-6j&J{d8mt*hnkM3KrXS}i;ZPfcS ztV#&Xvn`DK;dn@-DAX(4&(txP-$9@K)H66=?h{&oXxgV}xAz66tJ^bqv@=AI>U&<%e$i$M_B#>_YxV ztS`%Bxj8=+HhjN52l-&TC3$|vwWr)8-@)I#+vg(RC7=6C86SsdMtU7mamB_`U!4BU zSVVgWxHhN1wm~erMF{$jagNQY)56{$@B0@hYp1_HC`c33;b!~v-i}S08_0J%>k8B4i)ywhXSA@% z@=HEnmva#Md`YX&>w;f>x8osGgU|k33*{8kBdtMgU+T>)3uSUVwn_giOjF`LY+ed551iFGt9EiM1`t)M64@9-@7KI2u~)O7KyA9iPcaLpm|d zj4;1j?!>;sUf4B8#sH=L<9PhEB6+mqY0C|-2m@qLgQGlVvF{a}J>L5qaq3puLBK6F zVBKD&#lbO!X>S<@ek7f=Hl<4J9aGxacKCfiQBU>pj34jHGkK-vz=Pfz7N@!-oe z>JiH7rubKjIQJ>9p+~Nz%|qG7xNKO5uk}CD+(sLi<#8RZ^9%6it3hLy?c(}q?il)C zyXr~D#TSM`s=uAS`mQDgHZggYm|J_I@j6}RKu0;z7mbHgFY(N0d7bH?WfV_dd_8%K zJg4$khqRr4YL+&xoq7m%cP{%#dk3=HuG=`Ud%tGmIOt2~-?Xn5q5r6ZHVf%M8-z9r zbw2jI)^;{bcgepuceT-W-v|2W>nZFFx0K%?G0)HUGEmmh5C< z;2g&92BbCWWinnM^!WuWi~ALJA^r60@f4tK71kz8yq~Ric@95d@xA_>JBWAoAH2Gj zJScG|ifUsc-wv)7@jK(kHDoK2uMG6Tpl#&4%D-+wQa4*-xu>Hq+^LHuo@;T47Y%-RE=VIn}pguN6t%V_MEC z*5^0-37z$+%7drVB=#Nh1N7go*~FE!b+^sfur?RGMSGQYac4tG5caRjJ|!`w9BFj> zm^_H@MfRscp`w*3cJQssJ9^+cdzBimSGSq!>R>02jlGt36W4w8<7c@;A!!5ey4FG) z*t5^(;+YKE!L)~^%{y5ruz5?^HgAKpag?9lt=hZ6ZDJDmykz-Lxc(?fW4VxhyZz1~ z7IobLJAdKyA=;X6Ds3Cuzm!oNPuNmU+Q^vSHjW?fbM_S}GS(K)&X8B|t(1OzeZE_< zRK#yZu&)e^qt882+C0P?cRu4v^N)MeEp6@19d%WZz1|1z00#ezENNBiKdz|tckYmS zZh7Zg@by~tx096-a-mF<3-dIYP` zx}N8h@*n@I5&ABdXN#(gabzC*#SzluLtJ+<5vZvPxrAY+k9sjC=+? zRydwR@yx}y80~MHcQAZggYj--AfW>xq{^}re#*4FcptQ-qGW+j#vG+!35Pu!*|bN7i8C^Wt`i=4@Gj} zR$+At&EF4ytoF39zy5_b2iwE8A@+B(BKMKm2d9Je!j5S5yliXpes8>`c&w0h+7sZ< zKP#}7H_OJBLFs!5Ba4}+^aSf@(WPN4AoQ#WHg*6rL0n_I6 zG0$aUon{-Xt)lJHr25>5UkU#v2GU=L@ATOjD0ldqMweEmB~~8uly)=P=*N8{GT+K7 ztjoDZQRA;;@A=*JuG{t`XCto*c3C~1Wt2Pkn=y>2_n6LeT^4M=tewddvf?}nXiPm` z4w_4!C1_RwdU0R60<^CH?JGdH3edj-w5z}v1VFz4=obL}0vL+`#vy<)2!Q?p&>sHb z5{@U@Mn9>U?F5fa_1gEiBn}{6%Dp(uFAL+T+AD>D@8H?v^gol%*jvx?*X?m+4G3QErl!*@$tCI*s_=0$Pcj%gNKRP55T;i;Ob*K)9bUA*ELr=kMr4JB#un^D75re&;DxUa4#Acrno*%sX z1JBF3zwMoIhdl3wm~^;%L5;n>UJDd?-o0osEDLDL7JiyP*SqaE0_mp(MgbN|Fx_gv@|d}|8)P?i7uEem`u z^~euZJyJe{`1()?)eti;s_fS5PCOUobEtfn2UWq}yF^mg_ciQKz{!x2etcyIU%79D$ zs>#GjcJMa+=AQVBvZBOZU8IF~T#1eCCcm@o<^1*&CwV)aJc{ozkVR_ymxj7f-p}zZ zRvmj`=I>g4w27Abl3yjSIQ$daTlxYay$|0Psj{Exz#G>7uL%SFG_c`1IG1<_)bKjew4(s+ z(&7zUws{_q>qi@TQ0FtOeO9V@+xJplac=YeB>eVcj(hbGAviaYuFb!c@!#6lVxQeW zOsu5G6ZD~4c$WkHzd?+vw8Ky)-xcCs@QvkNZ4=xtXBiz9|B;Nc2_cpKitXeH82mVu*4={*|x+xF3=Ndm*bKV;9K$TJy1T& zHOc+w2U~=H^-;HDtBg0<$~dG-JlZxGG&4CReP}B&y~JN(Oys^Z#wCDp31D1^$%@8f zam`D78`{g5(^j^zNLX(u9vhd(etLjIsvalpj%3mWHnNd4VVg-8O_uPk(ZQqv=ut^} z@LYT~##Q~+b&Pl}tTWBQ6|@D8A5idA@DBbu#J&O}WEqf!_V6CF!Mkl$>_ZIA}b3eWiJPvz8#okP4O3ntBHA9n~C0IiV*ykDgdISHH6yy&e zk8Cr_44^EuF@^;DFpEKPH1MVQ({txSs^}!Yk*%N zPA@SkwEuawmADo^{05j4%@58HxKk9kif=%y*aj`>k0=V?}+Fw%ERxmNo=)+?iMCl1z=#7?lkfpXQJ?g=-c zJfX_AAmguBNRM-J&|^=ugmEM4z1&~G4d z*^rO4=?svM7RC)G4{3YTDOpzb-JHwzBj&lF?aqE$efZ1YDTQv%h7Xo|kwVHGk&^{^hND{$>Sz_XGyG1L%)7_mTtXQvfu;_{doE0rVN; zlg9Cxhr1BCmm~SO0^*wSW&j!T#xeN z9RlABh2U$Hqw)ZFAK1J&+8||#^4<;RO~JPqJcGm?(bqwr3h{x=QxtE^bcI^V|G*CZimyUJvDGWW7k^ z!|&a`5vxf)(=nQy+r()?kC$`oIqnMHYvGTH##ie6NxmXq)^ZG{VN6zvWb!5PLH_0Y z1o@CW$nwd<r&rN)yH)ot%&dmewTIAd!?oNnnio{o4p2`@;r291M zam@Y77Jm1aTjXwSmuSy6GqgT^|tqZob@oH9^lMaFa1_n3y25d zA8XL*@u1T|ter<>z3u50gLd2~WhUxf4;+yZGy%?!xVC1}4cHgee_p&8`X#nh!=hn+ zRYK?Q)bMA$OPr!-nW_&oA5f}>7avF+K>Ywd-{C)a z=^WB0@Pu$mERO19+v`8ro8LZS6@f&<`K3qvJpjOiY~s-6-RavphUY zxZh6yFLh7W%p|jCjWdH|jCI!$ElsMr&m1!c<=ifL+b^6fi*uMbW1V)ydg?UtY|bbP z6ky&OF_$L2A@QC$?+OEH%Q;0FlCIPfoRh3e!92oPgP&Agz;v8D=r7kwKPQbj=P0xN zz%I~dshaTV^4uw*5|UK^{edGAu!yu|-o4+yJ1 zw|EYTbIJ}Zsn^_M^9q%ZBmJTtk!eHQ_L1+n-sRdK{fnV~B@dS8sAEX%Bgc`vsOwpd zA;*p5cQ!m^Hy^B77-4fZMt?*7`$7L8ZKd+5pf!ECGgEG%Za}|bpOA-QERhySB?`sj=7J3<{gzLwvM9V)igYaMIx z4*g|W@nDoS6MpbgVrhX5o$<@ECB0-hyFIJY+B^?lZ7Hf0*=)Dhe6>ZBODS1q&>R2l zheIKLqc2C=!=RmJ+a*QX#Pp}jdE5+agMzv6{+Bp6PONp;Cb^bX&q7X)(2uFKku;t% zN0+CM<39R>4AASus>Z80Hu@_l)3vxL$vmgO1Nv3Z$1?^V@l+YoUQAhx=e641V#Grx zVOXy7;;a>YVm;*_X%%Lc?H$s~#^0Dm|2kz{!rE7)XN+X>h=jC*vKfu z|596q|HIRkoYnmMOYUj$UY!K)C(|c^c9r^kO`5Q+Y#Lfh1YQLUWcT$d_WVJ#~P zZLp&*L0ioJgDE!Z22bLbZt9Kd@Z3y6JIy`m3zi*G9?ubUTt6Um0)?k6(gw@aCD@EzZP zgCeH(J>bM@L?zZkvG&;Z*Qk>w98Amf=BPeGV3f)88?^Ho1N|?xy4ZJM%>{LYejdZC zlv~esCc{oYT9e%C{~Ox`9Uokb9~~#2O^bwlaf~KJ7lC$KbJHjC7h@L;0i+?js#f9cnfQ z@%|QkMaj@J$t;^|EBbMfC#6V$R)ev}7$0*v8KYltF&!7-b%azteR8fmb+OGQEK~%5Zw{T94_=VSi^0qQ24e@U)2* zJN5Ha?vn_IcV>pX7f098m_xR#(U7~kep8%|M-sGs$5p@stO^}1S_PSEf~`Cy24`PW z9EFfsnr}gH&BSlC70&G6Dj8*zCw_^?6iJ*jkO@;|J7%b7P3)9OW1t%onBUcAm#l?_L$$OEhbHV1nn-(AP42 z6LnbI@o9&TZqZKpo6z#{F54t&7q)M`lX`>llX^lO*RWh>njrmC?OQ%&JxY1^x_A}_ z-%~JNq;YO!y;T@X^$vI;@3y4ws>XNp*(1vg^*h1x@Se%~p?~RbUG4Fyb}7Hvkze~> zt$lase%KnW74Or|aDtCL&%?K95@z~d**?&b`?F?w9>gG$rGFN@PQNUDw*h%Ks9|>w z{Hn@SwDk#fe~b2Nc2m2b=lc9l2nT%wo-4pR^rfbPM-R`B;Ij4N<6S8Wlo z{;9YRWlQfe{}#g%@8EYW{^d@Gf7MYp^@DdL?1Vw%+{i0@AHLv5{s!1j=uhsI9yjeI z(a3WA(`e_8xq$U}#Co!ZvYvmtQQrI(S8YGYS0DO@x@&#VTb=NQwW~O5E$<)7vxQmi z2Zo$3#i#bmb0zi?r@U(k;=9a$nrG0^hYn#3=9cFd9XuDf0pAe|z>NP!%83f?9ApK?C;-~iPkBBcCG(-fY@3mJ zS;n`?AB1dR{{OUo-3Fm=fV@N-gmwn?8~KX12lXO(i+%*!C6v*W-Js>h@_~$nVC9_L z9{`RduoSd?M~DgatuI36&XZ>io7MFN{MMzF@F7r#fJbQC7@QDy{?s>ZgBg!&R?kv)X7>x*erGHaj7Ve_$qz}8>dcY4^ z1zVHrxNd&pa^6)$J*CSn!=x1>Vf%PR%A6tUS=(wap7Ok{Ar;@X^R|ZMvII#-Px(lB zCeh-Z>2y(!V=e{D??m7BOGIJ3CznDX!jmy>3RPr zO3&R+jLD>MITv?I|2e*~JkYu*{M$=|*dJ{lF@^N<#PdGyF2t|7d^Mgc>0)HQ^+-qm zC}qBOR=1HhAIFUN7Vnj#?iDBV6JK|&_F*3xr5ZgkW3^6jq#Sjxy zU5+^i+Yw_|nqg#20z)D8d_@4*5MZ!L{~e60!M`=VwTWkh;dkvIk7WNL!MG|tProti^gBZQ2m4yeGlh_MJ6J&f)HCgBWI5oiO>D1s{vGb?t++oFya4$( zm6#UJ({l8e{Gwx6Xb1i$IF=gpvljj29OU`+9G+jlRF$XFzQwDgA=*GpaL$v4R6HBd zM>E^abUDEKX=$gjy?9PKvp>mpdct=bP-ZolL=tr#?TNC)7{R+&q|Ov^nbe8Yl^Dl) zlwb54Lw`?)Ygw#^y})@;jrVaO8{*8W7>pdqS9wRr_AjOUvcE4%$Az{o=h$%HnER93 zKF~glKV@DTZ30ifee3Gt!*&Vz6aG(wf7u?=e=WX8+ZVfOUr3x^j|lN|n-HIX&e?z!TsFJruD^Z{Y2(YBx8qu}#Ebaf z@WugO2R`r{TW8-r@4m_RP7|)lGk!KN;|DhtS$}a|#`PH^Y_{X~t`H(rHl`rI z$o->ZTjENJ|MABz@AzX|R-`#Ev=o>w`Rl^8EAx|w-eeklL%Oo%tAq1D8+7t#=^Os~ zqbWBp9`wh3^FQ19)fIDpcEj|&rT6};^Zmo8T91uB`R@Er|M2l|X0AK++K88P4u1Yb zXl3WPqvad>wT0&Q@tpW|PV<`CTTeggKk|luS)TX#q|2YX`}L)-?7w#I+sE#DplSBj zo1b`TrDJE`>pQP_<;kT&5gepbnkEK?%uV0__)_{m;Qd*>%qah{&eKpJ&!*7V%O<4&*t5C)8H51 z`s~G1A1|ACx_pWXCPkVhz&9M6prvLeiyLU|)zqaCzhj!d> zQ~l6syQ+uIJ(+s@y&r%4QtJI*ywLX6k6vhRerSH5i`y^QSwC{ZQ|a$qH}$oejJY2# zUV7cK_i}!5Mb-!JemdXZ@%byufA#AJZoZ>#z_Ulb`~FkyA1|Bz;)=s>OzRkO;7{+b zY(M$l@gr}ndVR;B*2mVo792G5(bTN#4)6HeJI^hv`#59z&?T%XY707PqTYJu_g75X~COMJ>50p zr*XUQd~5b=zi+Yfo=n^vt-AetXG*)TiCIJ$=P3Lsv}r^x@dp_r6N} zWY2Kx*2nH!baK$s?Gx?Um!*y0z5OrOJhu9BZ%x+xA9!y)H1XQIpPGH*tDS$N`-`vF4EXNw1BbH`Ew9e}*-pdX7UkUjNXF}{$KCeT+>_5Y0U?{$k$G z-k94K_}vfxylGU|p^HMn7r*#;dDrV79)A6?PjfHInO=X-mj%D9ojHBhs?#?QeS1;a z>Ngv2{IvDj>yIuu89(oM>wS$Mf7txV?Hg~rK5oKi;}8B}VxK2AA3grgW6%C*&48`* z+fN?o{Lbq?_|fLFxntI~Flo^0E;YqFc{NhfQv zPPXkPYnph%WZU?%zR5UYvhC(}x$b}PzH9Ag|27`Hl-)__W0c%UxMBpGAj`o9gqY2; z03~^>W=cdg;LZw6M<(^El{%G88s8S*7?OU7>zXU^vClMwS%FZEtnIFrAA2^e?tUH;GzHG|Kx!a~XN&xe zrfMUsf(@A%hpXObhL=Y+-y@r3?QVZ72EsD0^? z;3`rOJM1_V=@qtsC`OjGZCpXt%5 z58v;A5R1{Q+B(bq^{1j2RB^92tNe-^w_JR9f}1Qo{JMsNA^~rvhv1`=mW{y6!>P5_ zT9aO}pxxWd=Damzo|Xps^ah%_17milfg;p#c>I4mYvMx+EPXKEoVp_ zk1a>WjgA<9_%(%SApI9BPv-EzCW>PRtrLiGABE!20c3Jq8aHtfz`YsBw z)-_n{fuXYAv=0uzjs59T43pNdHjw>a@_SDP04S`)4f)&p+l`c)@j(#@T}5%(P6=7 zewB=%W&l<|slOxePB!sAakuAXH*;dC475zdV`_M&3Nr|=ih3qa)%52PK49dR;^7HV z?%`TTrM+&Io5aR^kH`38)q#d^mz{jP*9|&Vz+WnFfe&Y&0IIo)fBRBaBfMK;Fy3$# z11?*MdZ)4kTPp;;FBgJ7t_&#Tu>NygSt}`KwVV*8YNNFGbh2c`FwMtdjEs|7A?TK9 zXi9bOMAexxX~Ub-Qh_zM+ST?o@fGgrJCi}FYZzR-<%+DLBRX< zK^Oym+GHD>P`~wND^WA^?tAyn&Ydu5v&ZN0(MLL|-;}Q`eREs9%4i;p;A;zANq9%! z%^k{9_X88fKrg&X<1g;tgE_g5G_3!0X!bzfw#IOT$W1$Mwyyf% zDr13nlLpJopuz#4NkI@64ohyR%o)_n06LhBY$BxpJh|Fm-{abT0c=%SBgQ8D+;n{U zo6JV1D=jA7(U?c+97QyhNe&&Y-t?@MXc&4?eiCfkm{og=t^oL+_ntXDlSvUrG0{W0 zY_eWq^YnArNHnj@P7r~w3UA5dtuVC~(q-K9QWxZ3`z-{AT5j5b+g<;#VC>E>(G@L$ z>2xb?W&jy5tr<i=?H-A{>cud8g<_jnYS`4ZGVYk9nrQ{4&O zw+Bs2{f+1v^Nu*#%btDC|e^u{+Vu3hP|23UKK%W6zG4)rhAp-UO4-uwE61b$4qT#z0Na zeQ$pw=;;vrCQ^+s@4NNqLbQOBwcC{QUga4T0FQ3*jqUCY8rO0>r`ntM!ox4gMvbcR zcPN{mfa>D<6K8xd|Nfrg6N-6k`%b9S>LPDfJ2=&C8rljuco;6hh;Dxu(q53TTm?bg z+4jLtVtn5;TyfpQ(OetCt*tE(4pLEe3mrn<@3&gj9Ier69$|Bdip7e55Ek|{NQ~cc zn~uEL81CJS{LFA6?&EvAz8Ae&{HpI^9JIBZ+j>DR8X)F-Zhp$s%sQup)BguFeEGI$ zitsfqPFOt5mC<6+Sa0>Sk}C?p0I#l|W7nwDP(4dYy*wgKCkk$y+^kH}as9U^TnVgFU zKA%rfa2R(#ovogEhW&-ltb?s4TLZoC?s^_dSsxJtMmyusnk;liD%0S#TeMkS?UX^N z-9PI#@Vs?eSz!@^5@%EW8jSOZ8zG9uPyNSEK^ZAWHP`NHggWcQcak2}VZ=%B|3w?P= zeg8&e8*CH-t3GvYHXeGI$i7bcF>kxepY2ZZz76rs9>3P7L)*aj#}%H0;vnV;Le%}Y zlUC5uso;FwXOm2cNr*mOrC(r* zg<+;|{{4<+(O#q5rE--F;n$Ja_XwbRSqSfL$5YecZ*n{nsx~ZHXFW^UObk@0y87L< z_*}o&R+fq&+4+0rf9g>AlMoEQK2vE$Qe9>KOIFQ$!^vET)##;6o(!U3uSdPC5yJNl z_XNT7t40FRkr}>54h2lDT}(5Xt=V6tx(nZIN(1Au<23f%_Bcw6DuSB;&Kj^VRQByf0N7=vPWYa`&;P_H)lPxMh`Jps!j37;+Meyz0Q zg19YSTsA5Z6vJ)=3xE%Sd+Jmv{Tk5}`!AFPmfX5ZnTm$KIv*s4Zyc@JGENIteevJ; zfbi(x4>e|Avra|!V%#3^kjcXTx+7#glP7Nfqbnj7-^=x(a>G_aH=nCO%l4vg`$lJ8 zi?kB3P}^$)S_z_6eLtm#ldyli^nP)}=lsite%#(p^Se!Ds#+b;p~zaf$gA=G_0Dkx zY@RoQPp6oxyVgKLmPI3OeAUHj{|lPVKsGqTcsxttYaJK)B(RT@!^MM<;8P|b{D8N0 zq%0w~+h*8~Zo_~4dBFwA=@e_l_hwF$u)$GIrBb(*3njUs$Ae`d0rix#K=NYFqZ1V+ z`a-iuCjfyT!X4=GAzqtYnZ@llbe>K64?1%nD4L1*d`3?r_%9~XnLjOf)&aPTWB<;q zz02yH=MgH@aF%W?Oa-1j9qqqG)oxxI)Mp+Md-gtT9hE<^)IG*&|4d9rb?F}yj)o&j zs8}qI2mt8KX7-V%t? z*b4tg2KM=hn!=hoe}>|8s6rKBZnT(rk`bkob#5WG8dm%T+Vt#;k1*SSC#XG+fbhmC zLj)r*($!EUc{)?lNo3pQT1Hmun1JcF#9m-{Q<0i+Wd7ilvRU9-4z!0k&Ccs&;oI7B zBA_eM7@Y;+puuS^M&)xv;5fT!rE0CyM5|dHR!LBA%ud9T+IYZhaZZxTX*2g6_&2_1 zUgPuZ3dFc4(Bq`PIJ4G7Jm9@(qiv-fMUQEwYnuYIDtURCmMh4GlA(R5{|h^Xum(Sp z1UJjR`XbP9cF#USNb8Q(up$02Tq(VgdC!6BmBvr92YSE#8n3SyP`B6GppZ`mLvIyh z_d}fg&)s(Ffl{D|E|b7yKN`FCZp!&Ptbn7@Ph1ZdxYanICk0>7Q+1U2u_U`W9q!*C zX-Q#(nmhx_>3b0$t_HVUylIBHl_LDaJ(dOA-$Z$bL>r4V^qZAF2(|cRG3&Xj>7yXC z)TPN#D+abC+M&w9?p2zplwm+$TXA|o6`N^5Q3+w43Y8zAjWl6sYa|-hB~1AC?d}+@ zz-?$CeYSsm0iA7^Oly9MAXaCLxW{|{3LfY*`>WRoBw+58U=Rvndx_t|@AAG%iGZ`Z ztOeFK23L|mUbbopAhDKJoVrit=^-zFRr1%Wnshas_gz6ikf6K$sZK9wNUd@2P}J4) zR4&7ev9e)vyZM>A5(5FDooBjzn)6L$*#4njoF!2uY-@DJR;Aj6>L#0z55JPL{d$r4 zne!?VNFwy1d60S0Q3|p63uMkMaQQ)IMt*hLR`lB$<4UEti>c8K!=!5?TzY*m7BfTP7ps3+ZyyJ2C}R{>&Or@+y`$Jw+RI~ ztaybB=CCWmn{LjD%W4{}?2RSbNRY|u>ey1DVRARN!vU1H7Ux)Ivk9F|vp)0I4$w^u zC^j-uaiS`W7p1uc+OPRjQiuq2&;fh8BI1G}-qR=qUZiz4Q^nRZ6e2#Wfv*nG-%TwN zMV=adk45E;o4ME+2nejSYmsqzjpZR=m_P|;g=GdN5eXCqqeY6PS!GBzJW{g%Xe`L) zi;$!os5$@QC|a~DYK|R{;}xumYAp4GdXm-n3OeE!+2kNr8!6e9N~S{etPpM09D%$Q zT(OU?lu%f>c7b}J(psntSrzHTR~sQ;*ff-K4EKfD3!kUO4Is$ai%7g!<8Aa>vJl)2 z{o#6>tJSAU9q1;o!R`1cWyqUTYY0szXRGDe73oIlTbHSsfq(S}-krnX9R$8?OovVL zo-`ART&;#z|I+y;B=9uz!%>I@T@f$W%yV|=4%^9$ zYyG~aN(k$}*IrlBx(O-Q9+)bNS95H=+~=j%@7KDFS189OhJlIWO_e?m8#JBKu7Z@v zrV3=uhh;iEha%8AF8y;x{xh(#$FQN%ZJQl3<*}gm&F0e7LCth0;wkOuOk*pbluS&< z%2910HBZmM?YqmFXi{hAl0^xQhI2e)S#mrjUxAy5B6@v207^ab8hg;46d4$!6&9U;Ay}40KXoB1D z7J7g_YMxGiFO+VLw>D87ZrF~WhE zc;$Ru0|yxVhJ3>H`}Bf8WTXXWKXv=F_!e>`Lj)E^T+g?FG3Z4;=^!?xj1W1U@)8<7 z1?f_Pi}gRhpKi!LbW;(u8IrR*G5;V(4T{ct9zs&anV{?O`~}DuW^kOST7EvK2+kU% z_O3iVm!Dkh?R0p;{(;;hhcgZjJ`DtDi*~a#Hs#EB#y1{j)@rQODy}jSg{EUwx%}H( zrrGlv+4UBcao3>Jzd91{_>EHM*g z-0ORHe7DBWX%#hX9RD>Kv=G63sIpDTd0WV8kwz9zArv4xCO`c{X|n${f^$k?f~%1w z;;(c<=XOf-KC#O_t{|?^Dbnw-UP^*6^4gzsb`Dri2u=+(3y9?-H8a>XN1%0vpOsCd z=a0MP)Zi!erM&Un`MFvfYPB|MVuh92*RE@HN2+Z58j~l2+FUNMFmIoy);{ES3z1NA zbyDiO3z1*UVCcJjZl13i55fp)EK#)( z(WCIEsRvv9we95yoS-ityl)9HG9 zm()t*9m;S@Wv+xL>(Gl(%YQYsm~SA4Y+qV=|KLjI`Wr8-n+nUTRhI48oh*LhHwyW; zCZm7G82|K;#rSn2B3+%K&d7*J1v#tuFN&N@>3?u7ey-Dfi{IT6p0YPHYLm8AMw={< zx(8$CF={ozYUaxQ&DU0NB^o*l;DpC9MN($AQxlqJnO#r=_HAWyqwx52j#V zuQZY1sBtJzrOs=QzKd($5p&Iytcrg4)M;B`sGM>lRO)lmPeEEJGj zz>M!a!m4-NA}`=^2fdwtoiC!y%9k89rHe&uxI>{_i_AAE_58amzhCV zqf^Vi88fQQpDiwHO)%rWnyqlC50l$M{)I{j0UrOp^07!Mo$hP1Hy%cooPR_sz_28*fgl+HQRr%0A#QHhX&FQv)2-okERD$(+@1Ugin;K3Yy^2rIRa4p+7%>Gf<+ zfBsV67lUr)MI>5Zpn`<7XO(Ula{l>LYhbc333flX<<4Ps8bwOy=6->=l~Jc6vciKa z`tPSnHa*e0MrsQr@O0KYi!_hNQWJ;%a4_9XtkTHNUy=JAZ7;BTW?I_FPFi3yt+nmc zdXxO#zy+6a?n6~PyC}hD*!ti;>qXThtIhKyj-Zx8EMOXLplU>1C8N$T-;nlhb>wwEyj=K+U(hEQxH5URLZXGgNcuXH@0ItaN;fJRPgm zYq#>_2(BU86J!*jpVfYU^ZiCkwT1?;gyCswTQsKSG0RtQ>GGqdYCr0Dt2Z9teu<+! zT!`dQ;P5ZshU!aIrz;P(%%HmAKhj0@f5Ah*!SM5S#-6Nmb*)${R2w)XBHymJ$dV8q z&*G|t3Kj%L#@}m;;{U08K?~0#;GnNv+ul0f#@q0`IJz;tJU;6@9S8Dy7os^GT6{L5 zX@J_}L9ADT;iP9hCK@tCa;BaMXGo>}TGV1Stb}|kB=C`R=tO=#8UT;$#;E9wHMqm= z^zboLqVbcUj=cStC{cf%bqO`8h19IN;c`-f6i?@>^yuat^rHg{%6h)|YVV_4j0@0IY=lX3mbBkb0T%=Lp<^FnUIhH=fk^O{kCPt?y zvrE_TW9E~+>ZvLC8+c2n4XB?+!^DsU#=!E*=?^U~NFZC%E>WhNt&BI>Q1r;rLa|@; z8}R~dc118Pdi8faZ$u`)!tkvDYx-5VIE*{gUE~ZoXjQPfMv)xXN+j5M%$(M=t6H27 z0=fx)BuMv97W!wRiX!?A7d|pFT@c4MuUx|P4YvjQTkq}Rc$R7=lM)|b zzR1GXRbm2;S`1NC{=)Z2aODsj%P6>SS6(o)iYb91bj6dOdD`CV(Ic5nrKzJ1gw$w7;Yt z)rU@FL~vv<70HU2^%`(%59#&OYoifR!X7hOmJHCcrOBN~99S(~qeb+@lB=W|!Zb6h z^)k~8HJU`fuF>2Nk*LQOG%xp4Cus|mjVq4lkaR1UwUGFuGGk;{dhd%jq0Zhq4Sk_I)KJxji?U0KOI8^o>5yJYcNCE7>GRpP(hFMB7e z%`y~ZvtzPtVsIP!I8_L_j`k+_QFz1<%YY%8?EdAPf=C|nLH#q@vxoCuYzrXNM zw%olYbVg&a>@-oqjY-V=Mj5`bj~9EVeL$L5C6B`TQNvq8xMIZvNvtIES1+s9G$ zyJnXmB~*nF^F3YF`J9PPY$t0tA~DmQOflmBRY-kuzJ1?RVMz4baq4Lr_jt|d$G_7c z@a4_#$>TBUC(>jzks>yt?jgL4pNBtZ)qM-D!N$g!Z2_9@NHnOrTwyIuYBOddvdL=G zcg-HjtVywG;WSTWjeS&Z0dzbzl3l^uv}CqLDT)n*Bwq?LF&p~B5`-Vc$K&@?<5#u? zqxi`LsG8O!NDdV1%F`QPS(9ZX} zm^*X#(1-{JrL7xUqo~?XG{kFhh;#tuX9uF*XXR(Y2x^S%weVfb(G;-R$$jre+tc+z zB}?l$U3`{dUs3dRrFEJ#w~RILEh)>=S6~dh@n%)EQiWF_QIXGK5=YLB_xbxPiwnU4 zmc2IV96p~;;&l26Ki#J-tPR!pEvp!(1br#k36ml6zcB@?zn4<$R_pDpW8H-kvw7By zx|DMba_#xLwCCz&<2N6;UanI|_tO>6PXe+Y-aO0AS}8=(&-lfxZb_4trQ?;9ExKs- zOT?k>b!4PtS@Pv8D7%rU2TJ)G-4H>L-RrZ?r3=yLr)!V%#E`qHGy#bfgrxk3AI)ip zvUAAVQ?Z$REc(!Dfxr4bu0TbtvZ+R=;m+78h*S*NzfNHPn*axE)L>Ldt$$#=T0>sJ z(|`(Lq>attB3xN69sUb+U-RdfGy;!`kBbtPi%^QpH>~t|iv^E1zE0zRe|5o@T_8>X0FdJ*PnZ1{X!H@9j<)lcTP17f zve3h4O*ioy*i`+w5NvX4gRv>5*?*$P{({M2hFIapFr^HXEKi@ZQmZ`C^~ztlx+y@x zIP-@cO8!IzyGztG@z}OY0G115y`(R;1FTuye{Q3E51Q5IF8)YfpqP6U9#qbyGO#w_ z4Ldvt7NU51O=>p;;6ZHnmO7!O?X;gc=|{jxuUkF&Wg z=T^-|y6hA`sD9;8!}j`b@8rG1d48``K$w zb&7KMNo`N16i&v|89qNN*Hs`)J)h70ovG_Z;IwW#2eNn{SX4~chn{^kc{$Ve&T*FT zmGjDf%ANh`FS~xbu;xWj1F_@trfw2oXK+IglOjsAX-L;))&^l8U@a_m>LFa3)&NEy6-Wb7@pOr(BTpoe6|~HZcxgCci1A(+-D%vir=gRVCmQ97*=f zy4msoKD0$_78a~wso!knFz%5R{ZzW7-naQv%V)k`w*iphI5NZV@URj`Aa2qfh(N0| zKo)cj6qrZ;NZ3Vv_x)`qTH2BE#@QQw&+Z}bGuedfmIXHl6c%|}jBD2{Wu;Sh3C5cu zx>rTrQpcEMh_MO1dXaZE6_@;*r-GrxIrE%tt)@{=qL4D%<6~mVnN>H`zz3zLLN0yg zk<1Fnr%HiwTu|Hcl`NkQMOzjg;bJs1Wzci=8&$lxC6udT&87F*P3dE&q?)G`LTeQT zwdsikd6+|VMP?MVtl4Iy>9LLVw0oh}@lLt+VJq(a;p8%Z&DYhy>@rMxfYz}`73|7% zZ`!^s82>3uri4Y;iafJS7Yldaa#bU*O*?%Y;2c}mj`6QF1jAW70Wq5is(k0Btt*1 z|L~+sN!a4Xqw-G=tJGdlijbec!$oZgUrMN4>B%{0sP;21f5seDX(HoHfi=fxuYwAX zs%|qgt=)-xi>l&0(5K2p&kKHoJyvhro?OUfdr62qPvh#m%xK)>>3`h4t{LZ(@TfKj{5iT&w#LoXh6;*m2qitLP zR)j3lSg{&ul&L3^V(izyV%c@dPzc|5P%9f#I7-(okAw?3S~rR3m#S^cf0Ab zT1?#RpX-idTkSYlZ#KAX!SZ4P$gux?6_+{OSyj|ODv6=nR$~LU%K%TL#zpLV<}H$8 zM#JYOnY3xNuBnSGzo@=H-=C3SovEjjzAGbRo3sajmQ&F7UQdein4Vlq;oJ(fHQJ)n zTwNJ8S9!jbI9{i-d=tT+1q>2nH_IrLY5ZtrUWk#;{WSj{FW0*cLw&_aL|<}a^>rVP zTtZG+A-#k}h)|YRwV??$6gSqY>L-@PXmBrXEau-XJyH>0vKdcEPO%nhjBAq}>Dftd zH=fyfGUZUSk)aUm)eNg5z<^-2BwytDdA>P;WDSr^DOCAR@L`RbCgG`nBY+{Lc>lO5!WO_#U&5~ zL-iCc@~6yLko2nFu)yB|sZ;^`%FzVu>z_GO3%UCSRY7K7LA_pL=7decKi_{~-j_8lCMM1{T^SE{g?GZR5 zl=X{sTvhdEPegy}f@r>1*E`?W%dt`!rP7HkNtb$FKxG?Wz;*tgx>CuvuSe6L)qaGn zTyWCOyahIDL$>K-d>MXP!aspA^~S$KbeWL; zigf3IZRNdU^FwC?72ydE!6h8>M>Par8!7Hlwx=G&h08R{PSyQnl7%&Q61v2()0B(} zD3+ZLzl7uIYca%YOgVJHAI{guV*@QjE@?I#*ZFz@3 zPT>2?zUj|zjvR+!wwJ4+>}%c=gAC6WCQYPVkB{6`&7`Nt{YG_(OEVd&-mOBT-As9X zdBrcN=TgcJiOxCSQ-OAuCl8b?u6d%tWA` zbO_c1u}- zE>xM3PI3~eUK(1cR)Jj8?e|@>K)Jeb+Ot#j$TV5I`OTJPuCR)U?1Hx31?8G+`lub9 zQdHN+bMm?JP?GyzQ>`BhAMciqJ&PA8h90L7#h|C;c^JgZ0z?%fPLx!*p!ebza_fpTe)9#<{iY|~fcRIY zB=k&!G#v&SJc6MbpHAX^2Rwg?aUc!(?giplZ`oZdJ*P= zCH|1w)1tqF*DjF{e=kLvUPuUvIz>Ah`LWyuO9{2-TUB_Ius%Zo(M`_~1U(q<(^oab z%|-PBqwYB`X^#fqRQzUrFJaGj=B-xq3p1Usn^VG(7~eI@PSgSOi!y0-h%-xwpt*qk z9kRcI+FuT_LiNTqUlV2E=c%KnUp@Dx!+;znvbPin253#__G?e?sR#Pe*JE+ODPN3! zv&5N#!4kLpK5GtG=gQwdF_PDf?T=3=N+~3wVSrSAz zqP&d*>)e|5BnH@nKYi2gsu4hm(Etv8r4G(c!IuSIm+kQp!&tT~*D*fRjY=B~qygY!+LMM9c2pBq?Der}dItv}9cWaf{rS@MwYl{t~C zUgvgL*^drMEqpEDlHNf}N9M}Sx(okZWjvs$ZLa*C-_IDwW?mvkI+`ciqUkaZHCa`p zwuCq!Y)nH`q!ecpKo`359nyCwetOwqDpY_nZCs#YOmZepx`u@S2V4}_;N&4>pejU*g7W8~) zZe#A1C~FTk{VciX+gv|*T7xw=QYIsp-2MhJXE%SO-RrIkEc0)a%lZ{I?`<}pm)CB!7<3nbCaWC^0E#0g@i())`!A9pQ* z&^C`85t6VWr>s9l&QbuONAeUIWn1#zo^%ffnUhgXO3(@WN8{I;xSCn8fUr22%a&7-7|FakV>fdi1=hWA zNh(((BcC}0*kR)XWT;&&X=}=BtNY_cBFnz^UBE+O!)Y+Ng<}^-c~tXPCaVHseW^Zx zN@3sE2wNh)+OYj^>uqT*Fx?32ed~S0^?)uy_s=M4bmJzfssr`Du*;GT=&4xltlpsR z>OOvZ1n0c@MnTs-l5SrVd^Vn|oPfV#wOwCM-r>dlu*Xp3Kg^8(P*udt7vsQ}#1;SL zCP7uFz=DeMILy}RI6lOusz?oae{@1X-$3XHbOvFaZXa}?j*O2B9(124`f{Rt=2kk` zAnQctPk*X8Jld>=)x8`GRt^3$VRoar@j*XjZl^85-CcOW?f%p@55X>c0z*mc$4F4Z z47%mlYdE;J!|l8qt*~Y;iS>GzT~VSkLcoFhrfiNQgFmQ!zNJ;~MDu;HhfTOrUjgZ| ztUxjOQ#z!9k#cHdj7}12u1a;p^y}5v3`0K8D!xb04OSyZh~e=VYwXEVGe6oUF#NZcvx^jql?t-fjj+nmkT>?$MHjvEFoFy`un) z)yZJ?Q+_rtFlv&Q+T^!x>yhx|FG1)rcto9gv-+6!JbTa6D_cTIi;W`hiXwJx!fsXa zcf)8N&Ulz&DcRi*G+Qm2x>*7?v_3a6MgcqsZs4l0RV(xf50S@(9yWE(~H6O3FvaCe`KehRei zg^DQyxaJtAqL}%i0rr>S;tn#)RTgy9u3bW`K#Q;GO#0D6A`pwBpi<^)<3I3b#Xbzb z*NW-Hz-C}l)leo6GVin(-o#bJii@E})ZBtENS@r)->5UK-&uAxcE8`qOD1|JgTO1L^Vf73m2)n@!MsSg#SD1x(YuB}>3sm&jaK3ZMIEc+hnTF;Dt zq>-CyU47lZU6YXG$E#+;Z?{?kC)treA-k#4qkG+g=%i z-Gew_S?wD6iW?&}A!2)-KqIr!=1&VjXrf9_vW~aQFX|4$bE9e3B=}Aq1GSqSWlZ`H z6yoik5A2pneB^?A6dQ}H_0YHf0B$Ui({k2xToidtEFaPLAiIf{^Fs*FZuJ|_+_b}B z3hSzds=gt%Fz%2})0eVZLS+oM1U?cNYFP8m0>dFlxRmy;otiE7Qsv*-4G|^$uGHW|a^;JPqNW~iKq=@+rbXQZcllg2HobrT)IvU#%GQ-kIhG& zzFspHqc+U!yYJ@<)fzN5*8TmPUi<2+j9Igk4X96z9W{5qee&XE&uNRSN|h54NAcEL znwVRH@mTg)xA1qceG!5dDN0ulNL75OwIHaKgmH!vGM8V_t^_tNRxE0rc&hCHV8l$2 zi4Kk7RlRXbWU5Nl@TZ6&o^52XSaX=#m5duQ;mFyG5)xLXE#%(5W2f3xsD}4m!sOZ~ zfYS9h-=Ojx65s9Q#VeHgqtUP4ygYjTO8vxM_;p2F8xF9A6+r7)L*ypJ2yWidCpv*( zFl1o!l4V#o5c9@Sk=x8t-6qK*<4#dyN=iVQ7E)yxO5jCj(FWU<$uG^z*Ngoq9rI;AT;>3EQ_^psb(B znWld57e7>KKS=9=v>r(7fz2m?i5(*V1 zi`s_RIi@WO5nix?z)=7gE|0ydr^sLxEe_&h_+kM|{MD+MKyuOI9Fv_(Qz^*J2QPFf zH{Y^;bybJ8&Yr z?N8`pU-Lw+x@1*f`>O8tu3pp% zELyIzO_>UX9m~QJ$Zu^^rEcT%*Y6zu<-Cnk*?iFB$?qy$1pSTmyN@KvPrf0O+pkqO z0=ET=JCaq5uq7r+vaPPQ-2y|4e*Ep3!E^W889!Tqfv>y0pJz&t^AioslMXX+^yyBEAR)U#V z)lopCLYcozY8XH`266Ne{S~?_q#kY96%~e2Q3u3+t;@PpZV-W#ZtYHkkmILFyRMH! zH6FzJDVJ+gt|~5BNjE~AGJ7^EM1Ysr!8r?=xiyH49W<`hs2N@{@i0;0{wRmD#>!M7 zrm_M>TpBtzIFT)P9#k-+J9NK%TeK&SoxkE8)wYap9Z0{hvr^MvnBDY%t#cK(CUH@n z`fS*9h~y-qn7`k?)23S=&=hue0c#YMZE-=vt19Q;06P+43Mgs#&y@?>4p#vkC0=Oh zD_f8oY{toq+A}X$xTW0v=@}^nAJfhwHi41}Fr=!6H-nr-Q}Y$JB=drLyok#iRtb?jwg zE>t*K4OrU|6sQ^&>({1xQ2V|r9^9c?qvpW5IV5BZcT&`f7Nha#Udh5sI9xUbY>Qhs zmZf1H5pl8oM-5%L`p1*!P~f`z+aAlXUAhq*2j;HT#c^TKPk*c0EZ;E8*(x zP~C^lDN(}*0$Oob9|l_y$MS@7&G3F(+fhVe^^b^gz7A-X$oh$xbU|A?q8r`DO+&j| zEZ0B(B;$F|g4M1~n%h-$!%D_F*QK0bYb$b`xNWjyvXe1In7~XT1;oGUbH8ToSMNVc zt5i@~)2pS(!{cYqzT0)kwP9qDvK7jpBpMjXSgjfslbR8dwoh6Qr1d~r5B!@RFl6mW zYRgw&W0hLKsH#v6g(jkF2u)DpUU;yIgQL_6#VM^wJ*L_$W@=`RCb9^tg#agkG|VZ# z*4?~f5~T{dtG6@Rv4NqaT0)`1ZwWHxEKm@yau#aQJ2;hc^@tucuJx!Hu|ppgqY0Ru-`6ObPW2 zTiK!riw{$q;;e7*xKaX-7^-9<@y44f4%7{d^J~-9C$5Wc>u&ySyJHPgGr-2V3V10P zOkDh%Z!x1u@)^5&>#x7xLN!`qy?^|1_tBG6m#$A;z7FRz#x%@cT+OH|Mh%*z3iJxt zK!7@U=0ZsOUaYaWSu_SUE9AqxnsunvzHiO8JtQ%yMW@OQB8w8OFJ2NMGgL36v>(y^ zs-EQo8+tcx9@%$P-zkfh?mU1F2DbRaX9Q%Ga-=}77?)rqChv_q_qQECGi>SRsDa}! zuc0fmCd2KFC`u{!05YxB;sXHoAOMW^1s%c)202d_b8$l_JbLzQ$bvNmiYa$}i8650 zmhC(Q2Th*_KlHCxuLmXeL7Y-uY$bSnqWmSrnq;i%xQUp;l&q%UlB)QGA{!ofTbIg1 zrp?0{E{g<1R9GGL-5=+#-iYYX-NDtJn^>tqQ@qgs=AlaaZCVec^*~w={F5HQhlzf@ zo^z>bpUcz~J5qSjaDuXmD3XXXWXX~#s}!fxs4S8i_$Q@8uq`Na~>#DKBh5pnhvs^!d^AK&pmX>rnTv{W^z zy28rIosSFg35z~=?dGf3uYoAH$d({8ddsAxvJ}XiD^JREX>a^T&Mu5KDX5I4t`OZe zq|<<1r_R1XPWtWJ3pa1K?l+8U#2XJ24Y?02QIUVD<^^~_xsp_1bf$1YD-6~eOaL=p zXlzYL&H%83t5-=6e*%zI8^&Od26q}*E1`E#hXHsIpc9w#uV?F0l{_8-1^|KW37zLH||7A(Ae_deh>d)*JshEA!S&@-@Qhr#n#6ONU#g_8F3X3x*( z!nzNIgk_2fw5=WKvlWBG1KRbj+hs_t_Pqn*dj}-;@sv`&VeX-^HQRM>(z#FKq8AJ zxK8zYj)Vt*U`uJg+D_y>S112UT+k8#F69i_jlQC9O>OP)z~8$6=+uRa#QxzHSXZnX z*?Yvrn|H`rdd=BX_?9Zplh$l?sOD3G@HzDaUA=M^D9k9$oK3vYx@MvZou~w8w71}t zNvOCWn}B^_t4=?hI77Oyq$e39I|SG--?-a#@*EP7s)qdUSiq7ir?lnLrI$1~I1ox^ zU2PKB|D4-LCC*8WZx)>LLkYa7&2Q6b-PBM2(`7Z&voohtzfEq#XO^WOIpYTn(3?^w z<-PWN*u2lJra#vNPGTo9rV4y{K3siy$|z$ z|C(gxPx0KP97s}f;PVes(nFUt$PJIx7sX9Kz#-ZE>OUmf;#J025dyP|E69OWL6)#o zyw8wPO4v$?9uk>Q3}P&4o}Bj|{M0&}Kj<3}6ap8#Bm^jM!oFW!7DchDg*UHQFA@iS{hp(O+V?~E5%+_mS1rt6E*wV-=~$HP zRkEEW=`mm!68QQ9$8Owv=o21;P=DOKOqQV$YoXE6P_%1uHp% z{Fc&M-=_O`>&bE_`GM8+$4*LPXwpaVTf}=ZqJEy-PU9KnyeS&+k@e=wL+-Ynh|JX2Hc z7jSw0*RDxirWvTKgR)Z6*#6*A`uIS?H7bStKKd(;#xd0z`rrLiRrwH~D&^^4$}^y3 zHJ@VTs}jz{dn~mDNe)(3ekD&SXI^M87l{ZkwjDadKn`mD zA+6iAad1zkXN7dj1mFfY}GsH5xD; zl|=ld=wX#|^Cm(p&S#0XqA(>{Tf78=RYg1;)bOxM)$qj%WOagXmaL?5wZp16Y2_c^ zr+%-|jRsHQ)nw?jhW*C*wCD^5lWC3ToSrwfmh~B~S1ZS|b=!0qv0^iJIhB#fR(dPu zxr+Ug_QO9a3=3%K8U?~h#$Y86=h%fSr>HYhKX?Q%Z$Ex!&er{d7p`tOdT!K^sf`AX-*ft$$UeS#*J|RzumO`B^chpH z>+pbto_?*n`=CtOp?}zb2_7-=6@x-c`_?V#UK5^L5g1s`m06$RLLf#<0Y{LyNV!TQ z7p{Eu`qiMh%c?Yp7`0^mt9Nf7JbAu+*I||p@VTh_tFPn0FBhtXM!SZ@R*!5;Od8#i zJcX?Z{A=4cDHv=b%4-Fb9c&H(4QjW@jEH4yY98CU_xYBi$ zZ%SEd)p*GsOKOktTYYJ&dHH1_pC#*u82s6`8Jnt4p;Yu}wxPR(+|MQ_Rqc`9%bkyz zk;TM+3xg$V^Pk?Y|G{DOf8)@)b6A8K2eTem`ex~j8orfr^?wY5F}*}$R~|z(uv0sb zzG7%Gz!+xwITEU>3_q2)nZF=Mi(0b zTss%f`T*=yVNQtzCjpJT6NM4-goq*wJ{zdP0?>aTeScIkZ4Lcpj1jCQ)&Ks2cj{F2nlZIq7~f2yAL8{ zu>0h%%|_2Tefc^I2r4WEw(GfS-?2N79v?V!Q5yFrsZFoPEnDm4RSV7(nrldGn%LTj zc!<&u;T~xuW?GOe;iMESNpKPhq0A2^7DYXqG~a&W4E>Y@z=lpD4xRde@nw5TrX90+ z&fGk!qy)frD`;2JthkdoRJ7ubNK~6x7X`zZxn$aUA4M4Bx|pa)a$DM%;!7#+2y2d) zD1j9vE!u{!*g-J(Jv&&TZ}yy$N@!-uDL9e*R!-_f184?~p-D6>2qz9lG^sAXsSBC zqhV7ji^=IYtiB3;MtXn>Fx*`pY#wqg`2H{d{hRysFHik{|L2Cz$&t%2n5~QHamCHz z)+7&R#uaP3k1Z(wUtJ^S6xhRRRs3Uxtqa&76kIAb14$&TvgKfaG0Yfj>KSyBXHYJ= z6vyFc9Frq+{QrU-oYX-;T!zeh9OkcXNI@KPsOt+^GV{6ia91SGL=AwQd2 zqSXw^neg+)v&DeN}bp;6lC32C4i$4kw69odMt? z$Simy_Sg;}vHbb~CjoxVbZ~H}Vg;8?<~14Umu9;~81-5;Xw%eJa*o}JV)=UakTRp& z>GOC=&JlNbuGQw4!vS_ERkP~pbQtf9%x<>ntd|t4mg4sg3vypk2VN1D7jv*uWiPqY zI^Dzx8;-;N)$d$32oUKQd*OWqOn?`k!*tZgYY z+}B;L#H+Bh4^xs%2W^)>eH4hLT8X4m<^vLpO;+}Jcr@|V^Z9%@^q~3s1*bQ|hdiGS zUEp!Mw>_<<5t`D9v%Svn-YKnE?krRXWC$wjX51$cdt+QQ0}S#x7IEvy4GJdak%=Vs z>lO8@5aG35njnh^i7d_&;}^bU9;Mi9D?`&NONxJYedVNMJOV?*-{;29p`fE;U?XTY z=4;MLEMdg`t+U^D7VM?ih4)0rsrp5q-A>7Y{}r{@8zx~&@9$fJgd$g5PDij>-T&3C z3-tMp;-?DUTw})%J=)C-KoZAQD>~0i|1%4XDVPBA3Nu?&f4`*RKM8h>X<6cs*klBDspdMLPs%Ol%%hK4y;sLW|O;xJ3xibS6A^47c*Wzi=| zfSOePz*=dn$r7PbDU(`KnBl5c@tVFT?LLE{uOrkb;{;beLNrPMEGXmwr@!I*a)Y;1 z)04?^1oF~n^dg*5){{-kVRfEiItWq+YOGAkEK%j3uaPHhAv$0pFk*jczy2_D4)D^vB|-7l0;(xgTcsuL6V+CDCy2n@`@0ImQlf7PJ#f_ z_Uhy7nbkEMoaPj&k?{?lY^d33Q90nkKpnW;uHJ^$52l)^6|TvCf4ZQA-a(h&1*C1koH+h0y#Ye>JnUk{?&FgKYFRe8;(UA`R3=IA ztMrpSRjkuV$VUMm)3nrWM-^PnIK_yBA4CyZa8aN5j9ppc#8OtLVF+s zl<4`^b|X+85H0<}`5q!5`3MnNr_6>3O~!lQ0;T{^qvse$jkVL~0kZ^1Hh!C6$=h1S-^QHAQIcu-%Dxui~~egfQE zIL>NR7V{^WGgg`n+kaK}PL&y*;9$`uZfJ%GV`yKFc9Yt(zFS-po?LbN@r30uQyjLX zb-~g-u$(pCr!SAwelcaqY7>5Gji64T2Uek1H9G%e zyVHLdXS(Hw=0RSGM-pSi|x8_e$WJ+iyx$>SPNWZ>k+=ATdvRK6lR30w#E1 z&JFfg)w#I$SU<>Nyy9aoSRQs%L8>1#;^Z_w883bb;+&rcbA zkVJ3gNJo_3Xb)y3T+XQA<3|)8g^TNVNegZdCWgUEBQ%=Klt$T~l2}BwS`NJJ%8L)@ zBtE9~sgF!6Ys%)%F>ilNbFU7i+V<-Uh21}F(j-0;`|;$>4S599UuWQH+M_5jAz8X5 z5rfU*AQfL=5zeg0^-(6S#L$t`%Jnv(X7@gNw-kr<@ce$kg7^~Q^Z)bbw&jF@c}8(I z9wK(!Zxa&%p}~5of9{WG3c=4D*8to#D6df->C2In)zr>)9;!Y$jL=*Kk4P<+nY&I-U zkj&;7=sdn(DmQ5pvsrrNe#y*h8+l)(i`QIa_}y@AM%hz{*jvDUE&Z==;e;*wK~_ZV zQSx8+1S=a@Fe1V(J=%4~X}*{P3lvTjaQF&88W3Ox0#G2NsYTSz3gA4mC&84q z7&~nRixr2>Rr3ZM9;M*x%>Pv8$mtvkeWJqjd)U#=LCH*j1}0y`)WAse!JL7MUM4X{ z{rLK5a-cJawe?zE#$8Kb@${bY=I>gi$4YOM1h(Nv!2V#z2RqRh#p$RZW4&1@&Ll+= zJ*ocqN$k=PM*a^M8CQSPdhZ-&s{M)C<{68#ZKsudcxu~_L^}0F+riTV=G|ti_>hq$ zY>(x~r0x!%H|w39t~kp6VfQXUn&XklW?H9nvs_A8BoHBRhqbeN zxB4sM!6c;e5t)rwLJMiP9z0&(x}y?Bz^M)32SkEC@Bw5Rxl+G0 zP*n7G3?m~H`|8nI<1qoMgmNxesx5k_u@~-> zY6}(@o2zKxA-XEHtTSP^v-~}B-j8xm6=i&>JZsrC~AHaejUNTI?}HM@#`*&jS|l3iO*HQ2V30+&iKtDN?09`OHinF zv}S_E$-sMd3JGPg{Kr^desrV+OQO>UMkHIO$}?{ldLe|80mhe0`2)iPCD%MY90q5@ z?_DAi&ZeMGFL=B$7(Ae)%?-ZVK|KF>)ROIrPlL^p2uTGfnwyXd``Km7?R_c;VsGFN z5{+sNqCu}D9p=ct+;OKt)kygX2(!5+jJ{ypGzNm z?5+TLq#~1xe>@bl(yQ*aijHfMJH@L^^B4a>JMlPwMwk9sgVp_OV-71YWh*uqBhI-C zoa$*l`8qb|KtUrw)-5B=QO61pKh+GLMP?O#`H2bjDgXT+_(rit*rpx-gNaa`&Hr}| zxQ{8I9+3Zp(4D8>Ms6s$6!lYk5&t1E^!!-dPIgdChoo4aPefpdk3kNV>d*-qrcl7| z`?YMnwb-|C^44VL`%tZqKlE}r!)JWEkTY&~Vv6BDL;Bk}-&HSX{)p} zb>Bx>h%Y#GOi3H*DO{?Q8J)?e45<8a@E-C}!_@Zt5B+VSM}L*rBI)cEp>#F00wk6Y zM-SOF?&V7VI)Gp`k#9;Jn0>xxA<`)|9#XB1@{;c>!4hgxZ}v!MGNGB!K31q_yeQlq zKfvL@fdfemRd|?A1z#TRaOJMAlWb3V=L#T483psRAfWPUAU(B5@re&`HhWj>DYjtq zh(E*9eLgN#@E44rG&}NrYk-kBmU$7KtLcpz04Bf_N3sB{(yC3+^`Ta8)%l9;*e^ET zwAkS^7O!bO%Y1x~$WyXBrS&u~wYocVzyW=V9sIqCkVG|TLC%St=2OeiA}7}i=241I zWTha82N1Z5ihRYbPg7fkP3wBiyWbC|ec#d)(>y?{8Nh<}j@*ZwtrdKasYqG{^M~ze zt={DxTWH;^%F?o$P)>$E#{6EqsX)Ypd8poK9729vQmF~hovTpL6u3O6Hza4KfbXhz zaH*q`PmZWUL<~N&IwKSI-7BM)V`r$d=IE<7fI0DdFG#U*yM2ZDbG?8za}X+HcMnZO z+~p8RW~QsSVmnk(_jVh$I}Q9XtsasfsNLUDa6jti2ci)pkAxT+9Vo0qSdK$r=S?CNbHV+O_^$&6h*D}cGMwc1-KV5GEu-Y;pFu5q zPQzCbC#+N4gx>#KCV@NZ8sdQa`Pq=c4r{S973~OQM#R~fVRA9@l~lVaU<%wR`tvNB zZ@rEt2aup_C+Z}gXuiOZ0*;Vfl)1UjSjlFUILq&@ObiW2Gf=V4ELbm z3(uJB)SL{^{zWwQ4Y8J<)Xv3)X|t2uYB4r%?V3C0w?9*(AwzOmLZj+7rXBU{8ht%{ z5dRIVTocaHTIFblc0&EoVy2zSK)PSoWtA6Z^{Lpd5Xk7)HN^eIZ~W;?WvmBTP5634 z=`p6eec#03-NEg4CaZe&ZqAP>UA<3dnbaPDr&5raO(AB9xOnw1c$Y~H^WuLhw#Lx* zCY|0#;yKZL)<@hsW6-JpRqsatCSX4V-q!k`8X1hYTn=Q1bieNk2=VKjx~2ai^9E&> z?RxYa3a?K9Z#3~Irmw?Tt0Y2Sy7YtWw9LBoPcW?uuR_3?DL`HfgJoC;fP!^qD|li`MKK{tt5Un!caw?d$1LEEP6ry;T)U9Fnk0b4sLm zx0H5TU}nOETID8yO(RVTRa9f5GKL`g7r~cwJnpY^Tn?uklQfK)*V@iQ6?}1~05#%p z8Tb+~i?SMduJX+FX74R|$xf&U+thmx8TAhlQ~cHz;<|kG!Sm=kL6AKJz4m@;Pb@{xi$^Pc)^{8(^wzq7Cd%gZxJ~&x9WB6rlFoDv!wc8&{ zYPh^Z3oS%75jK$|(*G5e(zhQoLR*o%?oZYQ)#WKVIR!SYM9Tv+M764IUQ7N;HkeM4O;q`joysqTr!g!^c`i5BR3TEo-&o~8B3Ec804hSCz1Jd?G|&yNkvk+)sS^pq^qB&S`fGjp zcCoT@y&bx;YCJVLp;%p4&$rHlw<}j z1AL{$=NJLm>T`?5?F4)B#u{U z<1I8%GnzjqYX69h8y=F_I!&(Brg&S4v#oGjjEFke2)9zX(mkdyB7%<1rtH4E(wD{p5diA z6v#@RA=>Z}g|4{0CAv{#z^Lz&cdojaXFtJm^#Lou9espQEVv(A=S?~Ta3BSLu&W~`; zCt|u~Q>8)En@0*u-p;zh#7+{I+yE}wk>M6Pciitx7TfE+G*W$o-@Z`2KS`WJ@9`4~RQ;{MN9&tR)wfZVmYCRA->Qs6Lo~_@dcBDhE;j0PP5OJYn)#e?~S0B(+ zR~UZT2n4S<@37J4J4vGkcNRQJK<7``EF|^Xq-)7Oc_DWb&wq!Ag;3 z6u1m?-YTec)gTr5V!Fnoi3qM%dpl>vAWdaNg;zTD8VIfhDv;^#?-} z##k(EOOPtlqz|8{!m(*W*K_qw?pEqrHLKPDc1Q1V$R@WIb7cTdR1ph0F>$}=$0)2G zz0vrn2G$$()`Q;sEHKlbTHF10oWR~)2&i)xoDdU5dbc?}yX8u^4gfvvW{d|_&E9;) zVnheIhhthB-!Mqii7{AGG!xVXhBtGQAxUvkHU^4vw_y?+E+?Rx*BVt@Xr0>h_rOxS+;x9b zIjF4cU$$H_JBbj zXAE=Xy#8TB_woMVmqLSv*dd5M#J*wy=V;x^07`6D#2symP%rZOVvCn5`SIP?NhnV)jjk*Umxs#|fiMnUr!k3A7Mx}$uzGra#G;_RLX{m_FP5Zp2WfMNA%eM42_|dK4= z=Nr?_N(Iu+k=r^CBntS+`Y=bdGwD+9O8Lea0M1unXqof{7-)BoF)^xr@WOD+Fk$SR z26Qku(-N5Bsah5sckg`nnoI3+y+{Y)N75J9*H>|mnZOa5`cw7VW%#ol=R-DtN!>5% zoQJEmh?K|U-LQqdBaE(YYD7+k*v8;;C%yPE87-@vC&obKvSyQmcp$U)zH^x$o7fk_oSNR!2g4GqvYmg>MbIo+N9x}HbHa;r_TQoPlmPfZxF~PFb|k# zPuYZl|LWh!)O=b0VjI*GT+0==+;R_(?-R)-`@QD$w@Is_An8o0M$28vP2!?9fP+IS zGEoP=+8PE!t_rKm(6OkjF24Aj>GinRvG8cB^i;#J^^CC!y5v7W`expDByqyzqACN9 zF&t!8TJTUBFgFo(-Jj*HQV?N;VLw>!SRN5%Xn|PewR@b<$To+IXrr3%JFs~r`7N+I zvN6TkaLh?IXMe!j&?PJ#Gpt^3`ZY$mQ3c_c{T@rgWZ2uAGbpLJ_8btwmJpLYXJ7F zI^H-u{`6@UPlo7L&^)!nsec|IRIyP*PWUPyiD%Bu=yqT7g8evpOL;+|qX$QbLAHwX zV+Ph22UfJyf?x{i+o!Lwr=hu0DU@&K3S;f^#eqn1pGm+JG~;l4f6O5Ppf@Oclvx!i zT>C^cUlDfGxqXkXXT7`Tv>6>`6INO!4t#9=av#lB^JLG`oii<$Npopvd)AFDm-Wwf zCnF5v0Ph_hg~BUHglwoo#l<$}wqihIy^k;}QRvWX^D0;(f0GQ}_PrwuapfR)vT$EM z1(hm&Jb~HMrU*%80us62@QC&AQstosUpMv~Q6Cs=?oocji-U#$*{Q%-uP4RXo9q)v z=IEsRCGwK)P!hp@Ln`^o^fG>pRY2~y;UheJ6UrDN6t!{6Kd9B3rrp9*bp&HFISe-| zbvgiND-y`9$2)M@-Om-Rkybc#EGflrV-c|>cmbIVhI&uBo zIR?<-P@$(KvJJ+KQfIaXX}fj%+u&K?Wo-F(@?n#UwCR{5tp|kJ@gZ1V;c2iUSq@s} zv^{LMn?_nOHtWCcbf+;{Cp=gBuUD`gqWXq6(Zi5Wf8*+hR!c1Sv=3_7fJW$TeE4!R z8myd0_{Y47z1r&%qBtK=IMG?LL|SIc&euu3Zck;0Yb-{b-R`Ng z?2(4G)Hs11ZucJFpb{W{(oYM=mikv)uvnc#?n3b%mG!JPa%8aBkS>wnQB1Y`>(b)u ze`%4_T~3T9VCH|YU;beQS!ZoFC-gL8Sg8Tr?QIrOVrW!y@)GGI{Gm9SY#D>w+N}eV zC1D-zvLO@wri74eJ^Lx*93nHI!ocF=ORt56Rld7nPb9HXB`mMBlUx%2> zlO@hA9@?RQTyYhciT-#~QgkWS#O`UZ7rwPBYu0SGfhlx)eI05Ky6MS9~fei4` zh@hi$Q|;*0JKfI4kAQ+fenwz$mmEYI4b{WsiYl|jd^K=@$?165;POmn4uGULm z71M-7gV;v6ktP@2GfDzd>WDm~IJ9Z-h?!wXsoP=x6FgycyoXflcq!Q`nT}HLIvPCM zNzw~F<=k<9b$TDhBla$ppV*BCt~(3tfFoT2rxw>*FrKZuza3ei`<4vt_b>8y20(8G%C&4zt>mLu_YwR~I~~!e4rwZHvf=`Sv>5 zJ3tf5A~v@}bkME0rX?^glmWaoDm4T&oJx7BDIgYjst~x6OWCDMS_t(wMVSGr;k35R8_6aQoY)fjfv3YLze%L-+l#lLIdjeDnYpQWH^Y=}&}Gg($wn z)q9)Ax0@7c=>vG%!*t_X5m4zWG7zts3pgHUO$SwOBgN_Fm7nq0LpXtao6PVN$$&q7 zi>-Sb@(VRi7pba7AZ!&2VArHYqSYR7fw>3|A~P#zTL*n7$KLZlf`R$CP2QT;!$fq$ zqFJNq4$SYJ+S}7tS({Fi?eMQm(P7N+g;DIicxp&tS1R#|~G0=cT@=O(45L z+9&+_#?hh>_*BiZ7zp3bd3fzEgTD2D!Wi$$vp76;Yz>4|s&Pyj-`F}#&6LKG>k~1I zy^O7Jw=7k=>w~c7&;z9ORT=U$X}zVWb|Ie#P>Jlf&}>!%Ks#+h{q@+q&n&t@U7x16 zLZkNL7}u5iqB82WKFrGDzRVl_)^bc*r1rNLd@?l(bIuIoV~=J?c6Rv0zo64vlBxGZ-Gf)Gi{&lcx(OGF-N58 z{a_#l!w3FWKmE*Sc_?=n6HH)!Ei$%u_8Y>FQK$^zv{3LU=bNpv)|!;k#mL5#i*gxr z@efu>x-T=(l%EoCSS%e^g+zPscHBI;LNY3;NRWW0mW2%k4DmU*Wjv?Y%6r{zy?c+C z4X~aqn7^X08;U>y$VR42Js7v?vtyl zZFaCTkr6!}YY`T8uq|h{@c(P9+QzZD?q#yvCIxxK((>2K9_vhc&d5p;t3mp-b$lmY$px|8sehkw`t*D?U;SwW{+5^Ju75xbNpF<>}2IH z%hgH{aP@4f8xQzYASivgDve9+@ndxAiVhNmqdua`<_ePVr)}2gCl8j?cX}aa8&FIWoI@D^DIwP)ORCI{7VR`N;MVq!&e_FdK z7tN_^+NJs4B?|FZVw_;2f-zN?iP{~$z}FA9nP`~Z-r=6#!injS8cFp1-{P`7N1kyN zxa(m=fVZ~FcW!5!vwqtxrnnkK(kUTPB_<5v0az5|9?1~V{XR^F*Q-1tDj0oyEgM_O zuF(HnkTLlf%_9ASj19^=`RdP^ENmeXM%zn;E|veO>QFpZ5O(8P?ZXs&Ap*NR{B_an zc2QINz`Y8M8mTKdqmXWYww<$-YfE?LhZ25_^`im!e6bG1PiBvhA(K)eLCAvFbW085 z0?ue=a;QfPjVwc2iF3RC1!vuK@ng$`CAltG1sa3+ikBVnL9jOJLKjt_APs%<*Qq_>@|rC%e%?i(Q4OaTp^^8R zf!-Lv$^z&fNs;J%gpq+Yo-z6xf-pJ1X6DkJ&jAf(a_S;Y{p5v$rxMdCd{N~24~Pk9 z^3>WSsGJ%%1U>n0g+G?zEEhQt_)yBVyGB>D1Jj={j&X@21w>Rc_zV8KW+ne&GG7tL zyhU3|jQOWccE{`y?`&ag>pMsz(eZJXyaF9VFsnH~CHkUVMMD3tF1Do4vpNghKA{<> zEPMcCY{hEr_bFQO=@ca!_v=$aptY)k*aP5_R2Ctxf2H<-F_D6VpybGwPp5N}lC#nj z?spI;&=>zk@rxDeci8&{{$w$h=I+D`JZcwb%65kn`eFL#s>IdE)m49vW#~=N*(32p z5M;#YQtgk>7M6)y5m>ttO>@1KX*2GXb0=qs4qv(R58CXKx8yS21R1&!xRqtLDQv4`!5irBF7$L^h9S^6h;&T)sz#T!9+x@+76YLZamQkQu;gzUf8!N|B zr^+ZsR~@apxqihaL^&9D*=)>iL zLhdNR%;)D@luJ0YL-E6c@rfbC4pyu*YrlH$w?vmOKg_@UkuKn})w+IG`>#GotGAY& zm%~H4MA}#^Ahu6hniu$Wvn3)?1J%mP1@X&3_-X=-C`{?VEt&pt*}Z@I>(cHU*)V$T z+pb(IID(@af;#?;H9UdE1Up^JdhhQ}2O<;?H|f-jfD>%$Od(c;h! zVBT97>-#>~N~>Vy%4mc~;aX(D*Eq;4>@Sv77PW3&u^m76Cj{;d=zc2WLLXxzGOm^w zFk7FD_zi_>81x0GE_)Nd4}#rRf`!Cjcl=Iuk8lr3YXH)8&HhzO{@f{wKlEFMdyg?a z$^)1@Ls)LuPme$4rkn6T{Kp}#=&8?T2mjvz!4Xns@GQs!Cxh>Q>5}~cDgc!ggG7vB zl@ZF1&35JkDp&6PWjEjn z?%(Uue{nt-WD(A9SlyQsg(tfD^Ha+K^rq~OF3YSk#> zF1-i!6)=-l=vM@dIiiBFMkBfx2%tWOC|rDL4t*|e)8gt~Nt&khlWzhAkj|v-F)&1v?T2+8l}hDlE@tKA7nYaG052b5nK zgzQ_D@845gI#=cu7GJ6@j^p#^o>*VWI2uE3b~=f93D&xE&Ji^#tA!|6nUqTJTSl`v zMD|q+m9H8=P+7%fSn@m4#w>obU>5ea$qY<NDNkX&re1Ki%fmu`Y>{Qwtr03D0_ zq{BjAAg^W{-(a$FE$bb6&_Gc=43RhvP;oBGel$B$T!iF+u~5*~M&-kQAVGbWU7sJg zw>Eb{e+ONC_V+|^`I90~O=Sk!n~yaK7ZtBhHTV6N74W9D9=tEcz|tAOSH|KUI;H*P zt@Psms{v*#7<$5{^WIa~nf-^z?6pO>A!oTv+3ekx3m;mJ%N-Jp$?NHFT42)4GQ5!5 z7SYCxyH^*UdmU&$Sv41sUMBB`Vgn-1oYoMl1B8IdBs4ozuV()_(@JE!?Rki`g5s2z z1eR}jj<-l&@7ybM`}#2C$IdXlSI^Tlb%jH??p(gX#Nn8nscXu|^v4{($T^NCP_36P zTaFx`No5wAEpOn?RHbyGR3dQHVvjoW>!NpkD2H6Uk$B>mv4!L(++v)M5EJ2B-oC;G z2VP$+F5}g3t@w&L04tsx>MU{z3*a)ud##dNe|HuTDLqPa*8MnKo|1KDz20;zCbZU% ze@8l0)`r8&V(Z(`i@|*>M%#o&G`PbrRY^QLjw{8);usfldQn$yWYi~DfwmJ|P=|jL35|5#6Zg-4Gl=+e| zJ<_zN^}2}@1_FkV=Pxwa6bP#aK_ld&V7?VO${R;q8L z_dV68dJ!M!P7-iSWJ+7m&~0ELd}ElAgNNDdedvQI&O<6yMIqj!8HWuBb-UeE&zC5! z)(V=&?5ImT4J`6I{~7bHX2?&zGcv>LDUM4o5Ne%-7$Rc9UO}eHw?bTvNs6qjzA%Y` zKHW2zTXlG9VU*~c%P7%zL1mb6_~{gHxjDf;VVtz89ZP}eO}xtFj(bFUVMk#WxPAN) z<>HAXTF9MCf}ODkOH8c+`m=JT@d`Lhdum}BK`u6i9K~?7OTVzL=_)ij;xrMP;l*}U z%qv^M{=qhar0CgaDjllb55Drlt#sV;6=P=G`1Q5)`cE@#N~8$->4Z@Uk|z-%OIdXA z^5cqGIDHfppkBsrE9US$vp9-Po$7!Y%$MG9G3c^~r%~^}f-PdT-6``-@-7b=Mo&;D zo&JcYhtZEK?Xm=7mxtj3eAWYqLp$ULle-Uwq%)=SABwqZYCp06Pp&$ z-FZB)+49>84|3jLf%0%1df^55K_|EzJ8SJ#QksTGfz7g@T5c|?@_#SEB)lz4^($X% zzOQPB7w>Q&gAvz3I%v6JHj1j*>W1=axBsZNnHddJY-C_(jc9`12Nntad_1~1AAFhh z(f&3^Ox|As=bwxPlVZkoeB~S?qIy12{aj`%zoJl+Q{* zB68Y;qMtuvvptypYL8+7xxw(fhDmQ78T4dM!MtI6946&fVZGiIRMNlT3A|4^W~sj| z5^VG&WM-Bj`a#pTV92+xNKeggxN~lQd@cMn&G5^oO+E_O4&7TpZ>T1AS2ey4|5q%r z@}{Yns{cn&fRsg+wX$OT6{HSQ-+@#d zO%pXt4wXP|U;i&cDG4Z)D*KT~{V~f}JlMQ*R1iXftX5}0G7>6ju#0OJ$BN5t>8}j| zN&r?^wu==3s7IMC0;h*f=-C7q?OS%x?u`q!M%~HiyC5km9(UAM+fzx-T(KN_XVpb! z(%u*8?)P7SL1<_{{j+1lO6pwAQsT0*AVBLVxH8Syjm6C-{=@2=8SPg4lBe4-AuxjX zXm+P(RtjnhqQKmSz1gv0!Q#a;mP((NIO!1S2u$YC!_wjb)5YH%NI!>uPq4T-t}^Xx?gB^|T97>L(+ zDPi?{%2yBUQeS@ zz1}^a+{t0IKuZgsTXKb&uFx2_kSE|tUSNm_kU=A2DtYHw3AN3w)o1M}PPm*e9NGgC z-Tz<)W}pH@)P*B3A}X2jvZ$UVA}aC-B4!*%^T#B$;snX8QqpV!N z7+8V>@lBg1uH{r^wi}*p;^TE-k^G~L|2kzsN z3yJh`*xfOANF+hBVj`eekBEKCT?&b|Mvs zLo<8sJp%`g@*2NFWA2gdN=`X!P``Z-vOA)2ZRdOw?H#A*QGQDofGrGvSg`NJ%W^Y8 z_fGSGWUxAsh^h>!F!S7r+4OV7RRR@5{0*qm?L9Kvj7#ZcP7$?=wUF`l?|uzY7$V`L zd05H?ce94wh7CEMJ5F7`;ZhYp^@QBgA{n2FTSESL$>JBN@EtE2WgNMr2|U6IU5x(8 z*#sV!cLGZ%kbiF2f@s@6HkDf|y)|4Mo?$|Cvr1}-t4;j%L3>k^ z2x7EGwfcLN$a@u|5Uf-Q^d}=HTCQ){onf;b>%x~lH(Y-17HfXJiUrogRpjN~c5Bc) zCN&V&eYt`vSLYlNOQ_6woy|AKc9?PK2`v^kWf+rn6(~A;@h+=ExJ5x5&-{Io=e?d= z$W_II(uswoEd>3$gZ_y9TCN>Y^T95i3R~)SdPRV4T2Csy3{$`Ahn@Qr3nN%0zdI;j zFuxt0!%$ftgP;Os=R(A1KdV=#*iHkj-c6Y7AffCLS1kb2Md2I z66wn2QmKqC`eJq+SRx0ZP*PV{e^e9*bjS1w~A4KD&QKCRdQc(Fz4L9#0 zORP1MKlC64q*ifjr__%M-3!|2wWOIv&D84vrXLGhVmaf;(dLCVgU{7eW2)tp#94y; z`EFJcJikFht#u(k0HyvlvVD8G2x)M=Mq4e8c(%54VX$e_u?dnhO4=@o=R{qS{o1ab z3|J)}CrXN}Wa1d4uAgds`|~zHzhD|M74^`&9oN%2@>ApKd>Z*S_!MPW_HkR68i*c@ z9VN3&MR94eEAf5LgOZ_;CwXLVPH#FTwuD|;CdK5}6l~MGxrEi`8nKLpybLcncMxta z_T>JaD15_<2}*~mK3^2>WS|*dT>gxuF|Aw*RaZB{QTU@C0q-Fz&Kw^~SwHoT^T)$I zu-8noMgD>V8%c?1q;<;mXuN-LtIT2{~X7YT%wl<77#CvdM0 zHODhHGk;5zynl>RfmlhE*Qx=LcIQ)xH5SU{*j1oDYJcj6 zg^39zv$=k;$KIW3Q{xM?1(WM!?-biDZ|Y#LpIo5bWpB}S*bF(wZc?e9Q-p>MS?zh( zz4c$x&eTSGj8S3JN3=DM1LoIY5SYGLgvM3f8}CjEL2z_+DPOfJO^5;Z?rkj zu9hQLcX&De5oN(zPvp!A$KiQ(JYY(DY`s0<5K15~*B9J#j1@_Pf^K!B6pdZd5rZ2# zObkEOM0TcCARZwtDkF&^4AZ-)oX7$R_OW@>B9?S4;DllL3Bnb*iI0jcUQ}8MrM6Lj zOtyC%k+VivPd(@HQf%#~nZKTTNmqNT@7ISL_hU#@nJA%lYkb~vtyW^K`d43gq(it7 z_F}feM9DI_ipT2eNAeMy5fp$T@-w$<8|T|Yh+i0Clj^TI;JI8|2LoDk{P3f8ww+qF=<`W{;= zFQ=J4x!m9&l%;Bu2w0eP=e=4fVh);8gWmnIPpJ(eo~*+8rU&{4(+$0}6`fZqmWKw2va7%y?BA;e9sGst{?8r{o4od*W%C z73H!ObSt{)vm8I)Fb>KzgFy*l%*h?MhWvH^KIe58h=0}*@|3YPua@b%@A?}A8$qt; znw-^!Z@YH!oOf#T6g~l=s2{SdNj;si>xW2*W)!yyJLS?()FUet@qcI=k>BW$Ra5$` z49Zm#G6O;|hEb%I1KIJ5VcgAfVFAX{2gI&FF6W;H2qg3K0vjW2EY1#_iMvh&#vih6 z+xV_&wE^{`V%^O?vY+-nYcc6~w3Y-5ZbKI|aG*{?2mS1wS@zp3=lCi0_k<%a=Vz+) z7kbEk&xRhd5E0%4?T^O3fA!1cr|j9%N%V{4`rj|fB)+mJ6#cV}rp8NiH$g8USHGn_ zq3_MN`v{x4X?=|_IG#f`@`J|G|AB6nLlNuQ-!0iJ<=Llv_fLjf%PL+Bxz_9yBRvyy zo7^Uo+GFwBDx1w2a`h_Qu-8AL4}$f-vQOaww`))xCsh97|qIhWb5A~4F3R7v!C0+3fGUH9k8 z6Zhll{0c1Q4~>T4?`G!s^;(U-HX~N2+_$W1yYuOCa9#MssVS=_JmpT&UXR@$ma_bv=1T-`fTTI7x=n$d$xHIsnjR2?n$(3 z-hK>_-u2>j*sZlFtCpJ>Pk}znWwIow4UyG{Olmc{?a$J~<#6FNIaG|k$@k@_ySn|% zwOmJ_X=KinyMKa>8qdv|%=iDgT=fhFe_zLd$!0g5v2xk!M^sYKgZ$B=Q7m^}+uaXA z6KS`LDz4hfXnq)kjSi~bDR<~9CL&QT!z(LQqt~_CDn19(EfbZm%cXzi!W608cs`hy z-mn;QHc2;I?S6R%7B!*KR;JI*CebGrmmlYl2lxZU2BDYkdgXY&Y5PSwlT6OTk^P^H z^q~^aui;1x2%WsUSbg^Q`uIQK;_vKG49FBXyen#4Y@JrA@{hAzPFXTe=@xssK0*ogsfMcyBg-jmQ!|<5_^{ zsponv!;!EuExkwr({+)SB`0lVIG_DO%wyjPC%@|E5d@^O_G-bAPOu+5-j7h$iwsk7esG1aeMm$A!1gqc1Q+2$j$1K;9|Mhb~zqtX#4}=TPp@=zal$x0qQ6 zH?98bz)(+U9BC0QKjfs~!XLeMSO61{Wm|+E>m7bFL-hL18k4S2TsC_P5O3wJ6f6oV zv%mU9DGv7lwFLTi?2McrwWO4iKA?~eAkhPJZqf1TvkKqOj(FH!9j*hWjVgT0IZ5vZq9~ z{iR#YSg=XX8@`XwQOE!)ofER$DtMcO1wR-yB<)DI2~9t3_AB46xIFy6hUYIG_o($s zJrd0}%vMk!renok>ucnvLBOCF7|<%l&_R2d`&wf?ppMkxDKv_Vt$xzBs?_lD+Zm9N?IQF;Z%CCF-6#EL*v9`jT;X3d=P#3W&m#DwJB~mEs7RQhaV| z_28o+fYcbq6!v7SP38!cGzZ$82EA;Rdl9TRV$jc99jdn5`nxVU4dow~$^*$ZneSgQ z5iZz4R-a#a2^%p`0E)RjKWRHISv(&Dvb>5zwtLZE3Cp&4^@pC2>_Jahs=$BCC2V@R z=v8;|D6v_Pl8OJ;YLVE*gQlsKswcUavwAESVY$j^cP_WikOiefu_qFk8*J1qm|0jl zEM&0S+HCsPK8_4*nbw?gcpmu)TZ-1a>tCi@0Z z?+?{ouepA+Y;nQ+X)_a6RkZY!1QWHoAm)Ul_@X&#Q^k4Oi1M`CH58q;n00)t+aaSO zlh|Cj=BZR;4Ol$Eb{FyyVyK5ioi?>GRwyi0hA&Znp@>NT%VW038K`b;824vbE{Nwcr9#p;$Dosm$w}3zAQud{{bCA;=YG~BKwXTgi3xqaEMu6 zXkW_jO4pq^|C_$#t@{sA3*qjAhkA3(wjbRaH#gqO@v|3tH;y%S4r>CVG8Z4l^&Hr` zcXBzP@Pw}2ldA0TZMhmgL@|w`o|;>PPY(yRR2E5+btC3VQ~9gUvSHg!mVJhJiqwAp zH1nKbp(-#eQ9VWPic3-Tt8UB0p_2_+(W3Yk7Cmi|A&vg-{RiY1Zro{Lft|Z_2_2vF zm#^vu@NnUJF+N!S9@!;zGf;%(b^rmsVS1mI~6}*MB?D&Q61Z7SpO*og*%$$5!w_Z*gd8l zE@+>)uIqOiaZ&+YcFo7UKuM5*t?lI6V$zt;Hy1&@v;Q1t$wqReDMIO_#DD@p}hIpE+A$hcZr{ zL3l3#Z)7fT;R3zbz8I9^)nux1ERUE2E=|95P+Vl6f(QDHKR@T{Ut3C!fP zEFvjM675C+Of0k0mN~nLxuq%ql|!Yy6~@a-4r_^OzRh|MU$y5jmL;5IfP~ax(t%_w$8=XMWrBGmhx9n-8B}yYIxJ?FXl>-!WqO=B_hWHW@O7 z7(4<`=z!)nGsg)GM;Z*K4sI?2u_gs_h;>*11#d^sfaN<6-hKRJ$BDDG+jg}sDb6kb z=80R6{qmeufJ(RJ->nCaNrD=>^m|;;!$W4Bp;fwYDrBLOG5TWp3RspZ zj}h$Msy$KRML+C)^z3=P#GaHFgw96Vbd%o0L2har@BQT*3luJV-q!uYmTgFwvbf2R zslygipZLYQw{Iv2J#+JJ*z7nSlnPkEoCOLfE$$-p19my093-qGdxGD>tw{?wcan`= zvmOqNFU8hW?f(I($N1!bK*Bn3^q44NDHV8Q$TI~A%dvSUL%AUywxP4X<7J#R_zH)i zK?y4*2`g6~O~T^f#+_3VooEbH8sQ{Mi702cp!&w$b{#&}ystq{k`IyW;JIb~Qa(vx z5`la?QHB?4s7VAa_Q5-9)EnWq(Y=T5I%?2}U^AJ7B>?RDnYMjGr7OAHwO|Od9_=S5 z%GmhHOIG)toLsIE?OY~biAN@tYy8ZeOXdCAe^eAjGzkj}*eKCJ8)mQi{=>7EC?i6l z$-&h3&Tp(h3<81WDLVuLxe-OUS(t7-qDmFgk=tsVxbHo9STm-r@$wIyJRRIJ(YT2c z7J6I8%}MhY$M-XE0{F1s_-RJz4>miEm@s|W8sp9lV_Rul(Q0DCeUlupynrhJ3azuH?1^#WXr-VpE3JTbJt-zwx62S*0*FFak0ibrgS#GeFmiJ6#A1m;LRJ-u zvI$E$j|uZemK-^;M^Uw;H&BKm#4eGDVbkVp*#ouv>C2ZyWHl1se(-qznF|PI;3D32 z@*Mu>LuW4S|K&Hl&_Dci8eoPdy>JIoS$oE=+S+UWn#duOP_Qaq)eC+ob{7pG#Tlfh z)2LExh!C4wpa<#MxcQocCjiBRzg+Z+Y-L`;3C9v;30Chp4z*45ov=Dd5#IC5`SEME zVvz&$gk1@_^3}5!uO_YkF>2&2vZq*hxrH@H+L~x9Lr&tmw)XU!6yz`~Trnv0;4i;H z{Ql|uMf?ONUckd)I%; z9E=7eg!Cf>iI*vrL8eJq+T$wxgCr7`(0r~5%?EA~93NhqWWT!jV_R#6UX zWC&};B2KMON@G9~9g&sH{fgD+Etf}{i3~*rmQ?$X3nQ0_-Z!i%AvayCTuP1;$PtAa z;cgh;^Eux#;5ZcfYk1%Y*tPLP#_7os?O83v!ECEYSe1=!(?lL4dzrSqPr~|0#7K%K zX3MV1H9BHgANWaN{^_&lkksg(t2c#{MgLGk$!LS7f`paY`=u#SiiA}GwRC-Uh-sX? zR%^rAp`^L^p_^}r(0}~wpSW2cbV#=$BU!I#0M`7Yj=c<;(&+o(_NQ<4ZG{jEBXs!& zp+qtDMJk0LLXx^$h62MDMKt>20IwC* zN|XBzpZuAyP-wd@8og)?G^?ogUG*lF5ZUCy^(8~gCt^bJ550+LXe5O(4kOxiWL`@q zVO6X?e}ybE)Hol*44ypBLnD*5poN5m`f&zbj*!oNLnAc_i~Tviaa40OoD)eTER?X` zBVjR&KX~emV(hK^k5IZ)+y3@WK`^XZC(N~OxMmt&`TaWj-a*lET4Qq8{zG<^-MLv* zWyS?fN^XZF583>+n>}I@ha|~X_Z~TpG!=jWqfjmM|3)Z-r(EPWvSuTeiP1@F71=>Z zRF$vcef<1o6c7)b`HfP$pPCiL(=4eRlq-;01w6=+?yf_0hlOy5?H<)pxlV_B*N@D)Zs)MaYaH|ROiuWb+CmK{+e z!Ouy43-%mJhqf-RSOq9i2p*t#TA)ytTzI6jb8sB6XjGA+Lx(VHVTw^#fXYZs2aF%O zcq4Y+lV@0TD(&^%I}&cNRw+=w_tg0VXD;x<9gS0(__6xS}qqwh14+ewZ;Oake?lQ*Z&}AC{V3s~o{OH{q>P9pfHob1okw{d!N5
V8vJZ{ldzZ$FF~G}g?ngqXhshI!>NQ8l6SvR2j-W2|h*C=2b< z|H8FfSMNP=txcA&a2_#UC$89V|MBAyOV$&2r+QxWD zaJ5*qocsMI!T4OHMCaiwCb>+c8m0-WC`+4yHfV@e6)~)aO)J)JR6d|SizHa2t^6YK*FlT!8wJTDCwj$fM(DbsX8enm-3(p08Fw!5k%i+i6U$i zlfeEsqN!PJPzX}xij^PrBmel^Sb>=M9KYhX96^(?I3`EdB&_$8u-tsBg*276DS{aL z8{1}3>B?X5lUnUxC&z&41iTpm%@ax8(KIOfhnNaFb6-fp`cEqFmsXiD#(;4E>a!bp zJ)FIKV2CDR>D1CsMW7{MFQ`WCNV!=bbck=W1ouYGH3eB0a9PLjYziA_fgIxLr2_ zqFT0$tKeE-{oo+sjCkr;=x9%}#DF1Tv62-MmS2tVSijf=xp#_$1@o?&3}#KjvSZz8 ztgZR}hkh`lFL1X+|b~G{^8CP_skg(t`C>;__!uq>$j_t0?5q?O*N*>jUgr!F{M>CSJ zBx_5d$Y(|o&4cUU9o?3mhq1`dD+e_|o1QEB>zxu<^$*q(_Pn6jRQ9ifhqG8^sSQ=C zx=*E=!Q2aCiVU7|fuTZ#j_V2)%O|#7P@AsYP|s$rBpaZUm}pL(oP z-YEfKa&oihBsC~kAv2-zlV6lEQ;Xh%spLZ>a_sDd%;uk(3T2fpOe`r@4-Xj(7W9Rd zl^vg1PE{!=Cq5Md!=l$AGSKo*V=#+7l9xy#;_4U@r~7bf+6Q(R;Mb-*J^)B3g29cNW9@+iRP@7Br7>8F6POerDu_ic)dTaIz)r$G zBZn0XW+jbh8099wEVTR3zH?SA+jRgdAHV}wwDbfKP%0>#28mCf-*xir*5hZ^?mxDC z*U=?E9$vH^4Bi7Zy5GXJ(Zgr5^Z^d7OH==+G6ku4V@@ea>PTAI;O-KN6J*BHE_FNg zJ9_r=gQw4Dtl#e0s0E2h4plvUqT(0*u;;;(r=oZz=Y9M7_3K|QUt6$kKeqVG*OE8P zx8qlDi<_{JRH!}ZMiBr^5@4t zteoK@RZV~#iWY8pjNn}P3eXjls6uyo#h$}l^oY63O1S&7dH{f14W58_*5<<}xffN# zV#E868@FaFIa=!v9*3kh;JXd@05H}G6|=Nmx$ju9@|AO#7F3l?3rP6Dl=6B~10GH6 z3c-yj*uZk9T&?;f1)G;hT~!m3=eaqRw|PCyQ-pV*T{G;EI3=YQLG z^f+83ymm~fVq!|cXC^zz`T){!BQtRTFk}J#cJ+5*j>IPN;tiX8sFkqTEeRbZ{K7#5 z^(9AENLZYL6LC6D%Bg7p&7d(%WB{-z3W){m)~IdAlV{HpK&sWcEAvbHVH1A4dTsTV z?a)sM?y^46yjHFCqmu-5Q`u04egRQwF6{zYhF|epj=*s^8tfR39Nwmb)`FHoxg?O3 z6B5=ByZ0N~7THF(?c}fLX`7_a+LaXZE1Q^Kbh~gTzY&Q$HOEQ+K#&27Sbspm>M~>$ zXT)$6W=&K(vVrNJVN+(krxcb75>_hjmw}V4#F#imn_dGsJ6to(>%k~wbNrk|UrNHN z64W61W(i#u9^5HDkq$v#Kvj9t0ykW^lHe|d`G}p$UnQ`W^6z__x(cimf>j)2CB-M% zJFF52`Ct6~`p}sRMc^qWarx#QG@dJBNN_-W4C)q;Ln3CYCSft%yEka8n+p3HP|<^V z@6qFY&bKs`Mydk!g4{||U+!I!;96FmOs<99`V1R+{^F(Hqb5j+!;t7XE7o)NZX?En zzT{JB5iy3SK|V~2h^b5FzB6taQCf4cUaR(}&R#fh;J79laoBi0s(Dg=yYf3nV`V^-bQK32S30i$*{A*@l)W0E(JUQw;bfi~ zZKJEA<%T;YSE}w;in7OsTFAPBFVmvFF3GSWiMD!8BEFEY8g%Xt1MBAt7n}7R4hBQT zf~$4v*Yo}n%?%{1{7QZH@9HIJ0M3>(k9C;}xNwC6jZK>|dW(+WJU5FAGRLI3zZNH!v%QM=P%|M*@tN2()b1p(Q&HX*(DlY0`*eM$MvpLTT^XxT8zBdb4-} z8i}Wx*_Q%(aZ2Nog>^{cQ1by}PG0<-E?vCiAdYm(3Y80}S0}Oentex~KBu&zAs+nl z)tg_g+@$QIS`CPAa^T|cTaBL|J$g>~ph>k7`c!MwlKM^*P_l9?kKemc(NaFm5>H*Z zhET?m9S2Lfx&wrWljtH1LR40fTJ*w%jfEFF5BzX*Rw2Hvx{w5g(F{kdZnwcKXsEK~ z9@zrsHl-(hW7?MXs}JifZv4E3+Yfwy;P~1D$EIx9Iq17}#K>Qen)ZfZ@T;*4ml4R9 zddvk#%Cg`+wUt<5BTLEcE8`dJ>|Yn5K*)n^QqcO#fHjqS8|WBGgk&Re=J=U&m}thR z6?H46_5eXvA)V%B+G4D0-2)A2Xx?h~8vlAvoXN|$$yY}IFhAjk{G5YuC>@dI;Cg3H z$4NQ0-lQ?&)s(4C@*`2-HMR#OjnGbgji(qmc9J2pld?RN1VA<`VXpB|H;T?{ zvNz;g<8LvojJg~g->HT#XO!wX?~}0j3TNQ)UkxP$Ac!$hG64x|F|P?OP|hMJO*&(8 z|5z7eRTZ2OMtQP%7uyinPdN*h!8YTq_ z(f=4E1`<|Mez~#A)`iQzWBwWgjgYfg*on>m_0Y`J#2jBi7B2qYY-`egoOo6)Dz@O4GBvZ zb7C@Kw8%4>b)n=$m*d612JqgWrI8PLyha|?R#LFrbZ)Y4LwTL6Q&~X zQ?jJmP5CZ-=yd8g1a}?c7uVG_ET)W4ZM@Lb6D;c;xNP^~r!QX|KYt~-)4<&19VyLf zA7wsDuj;iH66VI96bV9{X>VwjR7+&m5};nyBSD5x$|j5%}AWNbnUuNtf9CHkIKPg zC-7A=%6X8OwzP^jGpwS9Ix?Lh)^B|Hu~c{&H~C7ZD!{$YD9Sac54- zsr4p}VaAtwa|#Y!1L_!e`~Jthk=>H@6p1ftJCccBt9CHa==g!u24E#6p?*sdXI93# zu}~`q4C~lu=Rt$+0h{GK{5YeQb5bO%WH}*{8lle^CXQFH#qV9(g-KRyK2tL}qv#Un zV@}s&D5-x+F-NCV!WuPqN#CS6H%Fszn*gvTVf|fQ!ekPbwE(b@K10KxL>c=>NLWcq zSo9%DKE|&mEnd}aY%*D<>%iec0sDIrR^B8MR&s}6j2cl5#uF$)|Faz7QBkB&bM1>( z$XZmg{@K)^n_^STARE6G5yv8Sz^bBBQ#;bPXA0VL!q9QlGBRFEt*{8ze*!8-5|&a} zoa#Rg27C^Yl0bt|JI(`0PN)G>)9Y0F0U9l2c*P?38 z+Nl}m3>XHRYN`mX@r+EFV<^7F&m+3@-6& zW<{`Gp}Rh~Q?jm7w^d)S{#IUe0<2n7QanwC*E$)k;6!m$9baC0n+AY6=@D^*8x<^k@7ob|OJw}@}$$PJB|TTHoM?`9nlYK|E_ zyJ6q4NKZ&QX>@#GVxKx)hL8)}u>S-~Db#G+qh?$;aY1ALhNCtdi&BS6P&j1=9b7#L z8&fmbvQ)Vo#3q@(l=(|f(g4tx3if~^b0$Wx0{{~gg0B@3=6XFxBEQ^i&MG{vi*_6! zAL;P9OJ}d%xOM*_)c`dv8sfxnP?&mf;XYa{ z+)e%xgP;EWu6_&GMU9wMulsPnmR%6@0?bJ7DOT zpMxVcG~tNh*5>jHmn=^jy$Esq4@prbC7I*_EqK6MwwFnqnWA~Oe$));uL^uJb44U} zleKV?N)$5%FI|Kc7{Cr-?XXuBJcnBZ$Hz$X;X_$gRP$yxkv*b(y80~>lZgH(i9Qal zCr3`lNjbHis#MI8dFJ1I}p6)1risRR6%g$N9+*f0zF0%9DxD zjm=}Hf5AFQR>D$BVV|2a45YaNqBY@MIkDeheS>Hi&7+Ze;S$;^-YAO!08>+XlS+yC z;OwW*UeFXU9ijgm2}|YnFwsQDcQSSe5pmri(tutAnBuu=qih){sHF;}UhkK@biZ*l z!7X=xw+2nFT)#o%_Z>TlI;%&cW>>Ds=Bf=FHKJ%iN)>Jp-ZBWPDk0j{kBrq#?L2f0 z@z()KgE_WKAK;LnfR;SdqeaANRpltXxa6-aAS{YdWa7lnQdk!~sY>X#M7O#j4DgT=;TL!ARyc@WwZ;OTx%0gb8WekeLf{O5>8zj}^5q z$x$)p0e_x^B^kgOgn@-j1T%HUEZKoZtW%#xF-)ug!JzLpWHT}SJOG2EQb$--64Y*I z&Bl^4y16N!v-;hKK|!k5YZN9R7BF~;#g92f09dT#22ByDst|+$S{Fh!YaJeH+|g1j2n3>r zccH?duUWB@I7k&9NTxWBVkgf4Jf)~xfam~lC zxobCYO$!ohi&*`m^KadMgwod5V`l~|-q391%zE8b+nRMiw5xKxCeSaiv*DDnAka;+ zcl98xIdSaFQ@yB|<|TkhxceDuSG}lt?eq1af8dSG=x5~n^5P# z1J8Z8tKbR=t3s`iFEedZzqd|Tm4fZ&R?I|HOf2E%qi7>id#(n;m?6>dO|a0Jws;ze zX#pxclgun25H^Yw_zMmv%?r{8Zb>b~!5cRDkgwQ*-L&!%Kjh~eghS~vK^&Y@a3W5} zNjWtQpcynqtFgar5t}coP$nFG(SFGQZ8k3xYVmneA&%Gx0G}g8{MHOan z{nDFKvxPIN(s=C8ue_SJ<_H`|it|+Swy#v3d62V+)*u?8B=9&_f*?bapgb5!Sju=EpH6!z{{E@ggIqoJ$u~}I8t*d#~GwADyKQ=mn#|mtwSP&=TE@1rtil51eS4l)7fQ5h*nX<(2a9QIRCWE$h zzhO8(F~8!6jK!1j`I%7bcqk^9u#Q#45r=0U0?Se&mjeK4?) zTjEKCMg#+kAw*^l7zW_sHAN;G)3Zc%FXnwPK!Ff71B$Vd0|;RQ@d6A;j1d41<}qyT zAK#nflj?&S^T0*xrf%4|e9zI%M^52wMiOiH$+JJ6IJ@fc7 zVI+}QjNy#;w}Yd;Z!MW9JaD#?EHJLH*!> zwmnEze)#M;?QGDgH&q4gD%Bu1T+F2^SBe8%SQJ3ART0S8RE}cs1v05GNH@zPn^g2V`_SgBPAYopXd>X+_m z;CzC?+;3g?M%A7Ritjh<{-ei)&>F;d<9=iIVSVB;t`yjS`Doy{$)p)<*|pa_JeK*0 zdV;JezTdTKtS%DsiRo@pBhpI$U)?}eeVHHZPs%j6I?|5 z?j*UMyLhQ);~3DQRoC8lVt+n+-lKs4Qu}^`Nm)5`;-u=INV+c7idaI;o#*~a6Fp|EbpZdyBO!BRwU06gFsixZ?2 zz5W!{LG-xSiqJ#>xF}X^n0-R#@(PUT&_f0@g%B9bbsD$pJB0R}PP$o%eFi;x@`Snw z)aEmq!rBftl$BJ4jolhX{;>BTjiDeT_mm2Q++Qw)%c0rackVu8fRVs>;KCUjoP}}1 z8Do14y#MIYh09lKH){*}8j4UUpMjJcQDrc6>5IP^=d%~kfTgR~QMsKFE1ENk^`^~P zmJvGS>=)VM%x{-4f_sjc%HkuqdAu~{{sZodR`E32`v2gm|KLuo+-P{{R&3ae*J0TB ziBd08%sA>rimsCaU<)2zihN_5ME4tY>H5tFj~=%kG!_hQ)@S(bd-oZ-joQE$a|ORO z0PE7lpW!g$1160GSjv<`SSgT`0nT3Y*1UZ4mQ)k}XdSovK;HSi!K?L3GVn#xF` z3w`SRjuXG``T4^71IJhHJ-TM!u^*29a`4xSXf;27@e=MdSd4J8s$(G0;`>jYqTn%O z9(%@QCfeJ`Wy0`Tg$wdD{*&9yrmjZMO#9hl913 zZ{CKGt=!P^7yt6H3sA_)bvHLcq(kC|*Vz-jH2}E;J>ZAaKoCzXP+_rflVsZho^j z?s)d><=oA?f)aX%^cvlu=O{b`El1BDxM%}jXnX^Ee`YyyVc##m@xxb`!SCMQdGv&F zSjwXo)iP{J2y}o7ZV&oON;d-dR1{UJf?o=&U$no%U<$gKn92fNVX(7LkTGgSlr*K5 z!klHR>$Xe|D~^~kuXVp10`1B8neX_7Hsym^;;MyR<*j+0({!lAAnY=S~(ekKn zhI)wnmf{2*h9~o7qS|#7onE4_sfht=<+3~`;t(!V0qHK?9++!{&y8WuAAZ~;;z}aK z;fNhvr)e|e^?q>nw%z+kDy@zIe=Gv6lWT>9r8^`^-RXl4`Sk*fIYR|vV2@MZzGEo2 z_tUALQ+CeweFr_mlcldd7)wK^%xcy(Iqcef_g?y#<*k^JaAlcm9405{kXHn zjtz*4<4}5&k-#N$;d+yC0$LkK3rZjgeMPv9Re~b%Nl``J)u|un#HX2{=?6u3AY}!P zs0EGJ7;NM=(tw)H;&<#fl>8%CSS7u1UMZ!_HU6`w{)0QkVw#t+HySi;CKdMzqIC=# zBd^w!C|IWG7_$AZ2@ZyCKV>njSvJ?dQjLv^j{*c z)x3%`M^nqFxD#uOOj&cFy@ikyV}pdz>XC6|8P)DI08S7U2uM8&=|8^d$eB$?&kpTB zv3`${U^C=9goU9I!R{&T6G(NS64iZyUTjVKN;T{%x*-!yo~u~fC7h7if{+aG$k=mn zMIQ<)83`?}i|_{lP6`xCgAE z%U9>F-kQC6Pr}rtAp<553?8xUd$dGY4NqOY1y>Cz)J4ivgq8*A2{(9gSMS25$`vl* z#Q33PZ^2?E>20Jd%^aLST+*yDQY}i5s8Z6lLRF8Zt*IP!?&`Jb4V$ohDe30ZZusPz z_Z}WQcZKRq(PQVtjF|)b8m=`moZV-yoV8{5)}yCIF8k!!Ggod=uMi&qobCOm&v`~B zV5eaY6=jAgK_SIP5&Z5{RcaXuB<%#Nf=zRs=JYs#nT(uEV-l|lV+oY zO}AU;#I@cNlUZ~SJ$;=$}j>jZTkR#15&I`J{(Ik<~8e<%x~{H zY%B>s#@2>5i%Uk|oVlei*C(_Zv`P$wBaOk(<&1;*(1}yt5iLJ;vy1@DV1OX48T&>I z?mIkrTs7&?bMEqFSuQS$07fji)3t^1u>6^`t81|W9i@S zlZ?SiNC6rYPsqIo5B!_N!j?kqh)czhh0Z?ixUn-t>lIFE<)9EJ@1S)*Y-e-Zp8dS% z#Tz#HkoWAM>&WsGe#p-`2#4Z;9F~J~3Qol7gy}$))@1Zec}0?0t1%daX8syBPQ-7| zUA$POb_mCzM4)Z}ZcKtn>wef_XnsUO!#l_R{EBZmg2a7QU04Yv>Jo2CUl+py zE7R34@ZuFB_OBEB4yNT{trPJ#@@ksUh0Uf3oq3PT5eF=rP@=e~%fDa4%SwB6|8S+8 zos)8EHnEC0yL8tU5g1yzVPjzj$z@W4#>o@$r*5R7E?yGPC@?Gn77uN}7tI-IBu%}0 z|31xDid1%*gT|Uh_Z4?RpM9-5JIjltvrA?BPr0BC9b#&xJA~sKI>f`D^QsPcf@4#d zL@E(Q`_1?yxot_EBeImLb3QkgI>O zjXj(!+QUez7u)8qH*3svk*WIi{CNlEf;O&)l2V%lgSj-mJ$y{abPP7`DR)+nZgphaqXNvGOn#IVnJ93gIiUfOj>z==~MrSJGFBC_ZB6bU?(9joIN+* zbxH4mCq?;Hu%uGG#!}T_v3Nc3CsSzvIYuUvnVa^~EvcChwI-z$HOih#r=MmO7%rgQ(L#<99gN~c z8A+B!y9&Y-u4CSl<&1nI{2-Jo@C@Ty_G{IZM59`XeFNL~4@l@+t8LGq4*f#&ueBF4wp&x_3n7?!g4p?>|Lq^PB?;xDO zFt7k%5%Y=fUBB1Jh~d-YCok?fclDT+KagUyeD`5YUa@^op2Pel5{y9%0E3a#C`2D> z=BC|5izlt!4sm+qip@h7Zy2=r`@Rd-jTW}>0W_tdMaI&<|V zj4&!jgmoQM(!;lyOEnfBC2NSt7vbbC)0et7h!kZKJ7l@6rDB9xVS+4Dw3v7h^8QlA zs35%hT!kz^V%A>4tvcR$^z?^=C&*K^t5~gJ_hE<5{zmL?_U7F|9R?!lTqP_9){alh zF8HFGkDZHNCjGPL)Omv9XRcm{DMnEI?b|ok?>}iXVhZ7Ta;)LBBT<4Yf@&+=EO<81 zTv9WZ{tNrS$ugP_%-u@Mu%f0EX`Y3F)1)>PU*-#5pE?ew;6$2r#e_lwK2;hox$ZiX zMNtPhEDTNE2IIj~(@7q2 zw>tTRC7!{XDl^F6XzwNQjIwK<5%ajHJ+L5E+$D}lQ>9d&VnP|1L@XH9dgZ;o(q|XW zk-{^jE&Qpo%bFxhR^1^S`GXGO>{z9OC@LLG;*nDB8xq$0ZPT0`O^Ex#u>|o)_mvLP z>(>6QN&|f*d7|QrmUu9z^Il(l&>p&u3UT&^5@}i{TB~arGX;45B?4ks5-Uv)fRq>V z{zZLcv~U&b?l{qhxDyn4`%_CULv3SOYyM@N8+wC#M{k&#$yy{yP}4AUbBm5YLstS2 zDTc1FwM&$dPgFi{0qhtCPZ_^@p3OTV ziA8ln2!q7lidXlws{+@$YN6sN6xspRP^*ZrzE_?1FOLT8M?1NIl_ZX5%9@poBocaE z8%9wD7S-Q=6K7<}p7V3z-xQOjFq*NZv*iSIHL)DST>~(QF=F>)3!i5|d~X;)@P7T;_9P^X?Hk;AaB#O_L7fJX3tPEf zWNGgphbkWMnQfe_5O)OKL0l42k>kMISs3UQ=W~htHuh$=IHDcN;8G?yguVb0W6IZR zNL3%V@aAOk26gBk+IL*csM&;p2Y$B!yH@0=_KGw#rrvhtf<}M>QRr2Bj-sT21#AG| zb=$|T*-8@8z(wmx7Q#c@ZO)2rvsZSUxn$^)jZ?ngxqSB#C`Gi5pKsp2LAygdyy}M_ILXX-9B9TqxSJ!diPq&n5=+3?v|z4+h3zZ3 zZ9Z^}!W;EF^hNe0y#M%RdyYPR_3DR1C-JpZs1pvk4;Y4&-gC}!bfJeW+cahU&Xv1= z+IQysadc|#+!smhcVq^?+jZjC(4NBy6F}9ZJtT>_hQ_d9s?s2;N=Vdy0bEme2qE35 z>IDUuaD@`A3>tZfcy}=-R=ufGeME=zTa^N&tg-ht`AQCJTU>w3drf%eq=xDB z6VwS~X>`diRM7H%dw3d?n)i1NPy`kWj$;TVrg*|NGaSf~%GDIB5;|ORQzg4bZAuSV z(;*-4AFXws+@8O5mnPhPlu7jYJEd14LdsVxR;F6x4Wg+6y()y6%-A%8OF4MHbS!Dc??3J<@J0)R=*+0U z4rbbefveMkwbV??Bviu^L?s6+zOk)wVC#|m!R7~}MSsg*!`+d-GD(U!eEe2_ew?Sg zcPtiD#!6-AA}c`(>0gJgwSLM9(;I)Oz42dr>Qy;1OQuWO04EvWt}-q~>yaiwF)dob zO{&c_YmXol%+;b5sZFdl>wFS7pmB;*nOR%QH=jx(Ft4 zmaL@rJb3yH1*ow2u84W3ZpM=}7QcpvC7x%K0-Bzt>*JCO#AZHAYb;UNUf60Fpd;=$0(d|GrO^owu=z+AI!Pwy6;5TW!@iqJ5h zi#S)o>c!Qml5WeQvmxP85`iWI7)2@~pkTAO!QK5KVPP^tQLNUu1$7P( zxrFu=GkQ+qw55Z-`(7}32T|T58xNh>^3%`TkN*N8Yt!MAgn_9Z2s{J8c%CP&+dgL1 z55t#j8nAGE&$+8Q&sa{rP{$d|I!;^KaoRH8Bu-vJB(=$)Ni7DB={9-Zgf-g_{`wo# zB^c%^yelA#w^^$13d|Y;zq%+O644Yc-2cn@8}}blze%ZNsvo?2gX4G9vQ03^FfL)m zOCCp~7QU^!g8d1jra;RrUe(>AL}{qVQZHHE3xQiOI3LLMd zfAI>tHmu+HkltekEL?l*!J|tz?@`IIa=i%5U*t|vrG|G#&he|4Z%$wSopMRre){Fm znTw|`|4v%4NNK-)`|8c>`CIlt-Qt$P*(P5O9|MjJ*RW>jOQ&)y{a1DqPL@>UAk9Bd zJ|+vj3}Hm-O+ZU+<~NE?=x;^!LTOOwZ`Ec2<7V>CqFEtn=K5PDgCLunj*}{_>CY1v zRhgP>IWSXHd&FyGY>(3ROxb{swMUC)$Qh{umgA$w9}^iXcd*2u=3#6qOR%KtGIWU2 z`uJG?NQb0o-iQ5TXn;}&`&?1HkKIzuGm=u?Nn#_$TOjpARQwXuH1K+)ujE#yxI0?t zJg?R!`#k#U^K&$g`Oyv$MTnevv>FD6>1W#ZZ^n|`tn4{I%DVd7^~y*4>ixlNP=1%L z1JeFNN7ou;>hgt|Wf<5=14(zR9?8kWL#e?S9}4|MsOm1cHS6m0%@z#)^f=eOq3+#> zr7%A^boEolo%;Aw_FsGI^#}wGxkmU+aFw;#GJGWw?JD6^Exd(CbbCOEL{bSsggG@*3m7AL1-m2*So;bqcSt1ixhe;5)L2B=GLmO?JsKreL>aC9Ssg(;lBuuUFI zL+lezEMg!eBZ0~wJ;7jn(ZngWGaL*iw+Cr0{N4?Fk7+u5M#7XO{THksyL#KKEqj;k zI*btX_lHjGJb4xXUMF7Yqu=d3gj9t9@Y-#oS8l;59I$8u1%^9JUz#{|N#fL{l<<=` z)0VZF^c^aa^}CO((KrrmWH{JFNr9!7JqOHN{r!$(zo5%ul-vS`g-tE7UxTGg8q$&T zmv$Wgg~H6F+!_!Ywd%KTFWD z77A!38(2SLB232mz5wPgX?rB=Th$0@dhXiI2ag}Oo3sdTf86-_6bwcZtMAOkRl{S^ z>h2Kb( zBL8@MjHl48{lpoK4bX+nKiXwXZOnilZK_td{F@H>e0L=^PX(U;-t+v|76K9+thbPKCNWFpfV=c2S@tAzS51lgF&pFp%H? z8X-pEG$wqDTog=Zyp*D(QHPp24a!iHqfTQIbCG)XYXjDHk)jJNI(Rlqg#H5tQk_6Bo9cxUl)Sd6?8N$VhVnbg}py2^P3| z61TQ@sZq2%8Od(`F>T|=|9|XV1wd7I-!|y(?(Q-WMOqM06ahgxElRPl1q4J85it-1 z!S2?nQ`hBEU6-5N+-7(Ce$W3LxUx;<-m6~SzTbV%%MeaJ_i&%{tLJHMdG+n@z+ty; zGZQ2}H0I*sdu?Iz{X6&Wa*=Y|f*=_AUNlSZJ9c7n{kqh$B{NrTS$W`1@{J0Icb%l5pET6@a;75hFs z4uhtZ``-vmgL?e<;WMfLZ9tO0m^Mp?96GNSa`omdm^i)r#Sf?dIM2?Bi{qg*GIztC zQ43q3vyD??NsH8M$W#b9_Nz$^+8ozVLT^ z9=btr=sf|hw$l^-n*X}yUr&Hnmw)(vbzJv}ZH0CwY!;A=6P2ad`%R%Tgeel)y29^%O-zmH%CG#u8y}SWaPR_LNZgJB^+QTN;ekL`*0_ zSd5xC@~)t2gpwF7g-Q&QDfJG7(T>BQVYF85`{1)p zZ+*D=&5vLg*vb>|p4S&{dlem6Fh`o%y0frp+xQim@|JHHy?70jJwUw)Wy>I8J!0;X zVTBd&a_$*E+}RhcN#J0ANDJ6`2RQf->@zeWa&pP|x>f|uH9L;H`_=cCZ`|TIxGfrP zYvXGF4LqhDJNq-TSa{oZ7M- zz2%6f;o~%9VsU8xbm4C&T9XhU1PFl_j6l26GD;WnC<8NnN63tD?K3c%^+_7VY#GyX zplhbZNyIB*`j$&vGXj>8W{yK#8TfIRf#)9dULi9KjU=R_k?J(AgIV7L`Y}zd5R+j*2w7-M;-Xg;yo=BiH9{1g z@fD901IJ8;)N@$QRGxZ+M@<-zSr9UIDkI=rh)_-%kU1U`L>M+@ZUm5ga)h0fD+m=5 zACL=#U9Jaof%*qw{uQ}a)`QI}bHNyx^X6m9T#$xFXQ-Vs9$c^!#G{Bxk&yCI&Du*;ufIQ|b;sDcwTWfRq2>`edEN{DbE3l&0)zk|AS42O z{}ku(h~hbGF-F-NjR>r*NzVY0jdxr++L4g6g=IKqdBJ(ik)ErLqZTVIE5lTpS*q!A zeORm@0K(+*kf!LjVzX3w23y{MyUyLYty@$LO@usEE|tY1U}kV6r@(vwL3mu$%iQTX zCdM~xpxoLXj}GXCb_rxzXq16{6Gnl3q0EZt6N(}be`W<><~lF|^dLB8tU)k%65f2!?U0y)#nWD1Y`I8V|W#=u7LGSR-M;?C6;+ z7xUu-8FP|n2*<4uC}Z*!4P4By7BX%AVVJ!{RTyP;JQg6=jl4IQBdxMAcj@}6tF|rM zjj7+)m+yV8;g#1>0B+d-CaSQtI}cZFJy5ZE|D3hErZsOz%T@YQB6*JR9UAFS5=D+3g3_4_nxQWZdtgv2V#@D+`vYO_ zwHpwpf@>i&NosqsNnr%Zkp5umAAEI|Nn+f)cj?Mi7&pEB#n;vKD+5q+9$nz-KLD+2 zoYiBhWe;ZDi54w9U@@^UI~Oz%;Cno^EZVRevKpI?yo2W$z<&7SFOUnV-n4)4_?ZY{ zaTTyc%vjWty<{B%{fP~mCNyrD*tn%=?e6kTd+YZeg^e+qvv2}@BKpVQ&#m15`ixaO z#x7Z#G`}IPXtD6O6Rk-I5CVk23r3)gfEiCBw3J7OlaeYlDRtCzm_nIbNMs<3fOGpN zWEt8xqmGLpk8}M~cfS20KI_X{w;_Mq zNn*c4Y|W1XV{f2;MCv#VbtXG(g3=>5go^%olwi?9&xR7MdV9l!17@)(i}oLp)fWDy zW~0`K3~+cJBH(G@Kc>5$G8R%z0qJa7chI;woDg(g-{EP9SrNQixc5fy6`URr!!hM& zRtPs$Gc*RTzz`5wde6vs8)d%Ob#q35tmb4e?9>enQ&TzJCyu zsxb2noh+27(fteKhlq*AaYZ%Et)XFa)z*VZN|$fmU%TVgx}As7)rGc9thlrCHW_f zMjJCoI=*~4#He|ey><64I2fTVxNYyT6JP!E$Dfxj-)`&1;_JaIQO&hSGa0VGC9A=v z=uL*{FEYjuj$YET0q%k6v*rcIC8OmH(`%UBVjA79?DDNW`h|^|@Y5gXPyKOr2xod& zyX63q%m+UD0*?had8lxtS2vGcyf$yy`uzHh2!+Ql-;lp-Lr&egTvjsQS-0y5yc$pc zc@Z%=P6JjQ%go`9Kv5b3ULn zyM94vPlY#$e@eEEr>`2a(46fqdbQfJ&~W{G;v^DpN2sW*3T0prJXS_M^^KF?Kx7y~ z-!k$_ot~r{g8|9l*nY8T$c-a09yz%zzGN{9z3^h-^9{oQPV0BJx6eJQ2bGBRm?3bet8Z3KH!ViI^J` z$&=v;m^Q!R&_|ymmgOtG7$Alh?*xRKD>fCc+r4P#k*#lj@Wsz(5St>_Y%@-3&sTH8 zS)71Yo0~&>aLjQvi%jp|hsN2N^Oyd-aP`0kpQ3MTVe`7-qw^8*`^RT`M#S%U^B5A^ zOSd0DW@Y^Hbr-H&{qEPZlN&Zc0wsC=iu47mMlM>Fy<{zdV0_J4vMy)odZ>7!(|b(a zn!@I-3%4KI`@!)`H*WH>BUi59gj(m)T}NOhfxfm*Zzo!T5Fi8yftLjVK6}hkyC~?& zU>FJ6UFJB1S|-Q?g-_r3k%4LXa0luU7KK4u{E%g#RW%^X%$0#z7W#>e&|uAO2$z|a z2pfTucJT{&{lwQWcu$yFg+6MQTITvOJ4Hm0g671f)%Y{y*%w5J{4*BjjRR9&uK0>@ z(}lUUqxC5rq7BGDV*w2#NgF(RQs~%1s5FE5P&CB~pa;wc4=$KJFsCp$s{sE*J25iM z;8bG=*7=NlG7Nv%@HA_@(!*B-#EQTQv;LaekSjoBk7*@HU?L#K*cGRLsm?0Iy84*X zLE|)v)6Bcqr5A!iiykmA@PV-sHbIRR!%;BqMdS_oAGx4$?Bdm_RV$H{p0aY=tkpY_ zfSt2?cOjR2&Rn=Ev3xn~n=rM^=9tk~h;c9mU^oH>DI!{B zqEv3Z(1DC1D7u1KFZ75ko`4w#r{|*d3-(1l82{v4kCHjf$UKCSm<&dT6f(nZA;S== zGWS_19)p0**q9B=bprto9Q5}h*kzq-koZg95V@- zfaIC;syFR{ZY9#xEa}TL9@nge8Z3l0e!qC>y)S;){qFI%KmYdYU(WpS`&pJ4z6%E@ zK_Qu2`ynH@12a;usB~GXQc-|X`h-q zWJ>9hU58JcI*p|Cox4a}w|8W5-ynYd_SZjK4!s>eZGJ*waehtH>{Z(~AAScOi=TY| z6O^qG{-Rjh=BUV#G2e9EHtWP&LEOCqxhvG6SL{7Ht7RLDgR53%RJUX-YylIeRW~Qk zUzt!*4-k^(tw1^&QY0((y#bdeY>Nkj>o;z}(4ytgyPe+cv;rYO2oM4<5ds~v&}Vz#LZdE=I2F+<adp|%YfG&~MqK`7iN@WLy}pqouw4~z>%4!4j9_klyv6=l~C@{K)U zBxPvh#QYl^;o0W_Q7w2pAR}$l&mZH<5TJ%}@6gF}F&`D4J8kgzk|C4kqTdP=MCi0a zc*-)*InxJ>oQSSwMw4kQpdXk$1v;8oZTOs;j0MdIg2S_?_Kn4*jR5v^5buRzIprZZFmtghhr8Bb5a}syT@}fYs+S=42jC`e>?lyXJ3_X+=rll zblsZN>LyS!%aE5Z$Jdm~#!?QiUqEjIR2mwN%Qv^C> zciE6FIF$_}arH|zU430M8%P0jW#D|c+cKkjXqY1lt)>Y@Dl~0j%n1DYgdmvJZjs-X zlS3I8ZO>Mo{XYBt^jANh>FGB>co{5Q1zQ$v0%d^#~pb z%ooA4zmxw!Xf`1M3pPbx6$qH8UVbErwPht?Y$gS1Y7FZ17#tgzo;NU?)rPSGnzJ1I z215VYzzzg#kN#( zATu8=Ha) z^oh?z{u$wNO8E**0RM9C;_0&&`7H6ZTeqRWoKoGCICpvUv`Q9R=g)+)W5}q9NYO); zGl-*ke1%SDa@jJJVAmdg@9WdQL!22j%!ZcQn4e%L|sQuGq9||A!|p-?-5>V$7tkcs>@St-0_2_u$s;yO@vq=-X54UprR0 z6Sy~oRHR`6` zLq~k@^(p88!?PBIFJujvU+v-06ry0}jHJqRznLqrF2;VKNQD9|=9N(fMq~*`dPKl* zQ{Yq3AXFyAfhMf>2$)yrfa_6@@Zn6f8R_2)mZK!y%)IGj}iCHwv(J-HsR%Gb}B^7{)!DXBz!f0bBcSpZqB!^*E z2wg3Y@F)mJTcRxsE{8q(vbuFZ7>0-t&LRWcBRm%36)?lVKsIcDSQZ`0b38*NjmBUY z3fp+9fEQ38#;ZmaASn$3Mwiya6`NA3RzjNs(Y$wjX1};h7!?GLEEqApV#Cq*PMtZo z=iQGXFxgI=_vfzLg)S$wU&YLTjoIJ%Gj{k>NFYtMLew&Za+oqnl!QcB|{`}ki4~}E-ck+r2$(0RR zHLYXo*3DhN8{Uij!vtI$UZTG%Iu$~I5FiAELEs^=fhZBv@yMynQS;GOZkLeXuigb$t86o(>{?&Cx1Ns;kTze2SEs$bwLZ$ z0{ssHM(G)2O`LQWYunajxoEC83iV(X1VazY%@h4iZUY9xjDc%}W^x=n0rLw_z#uT_ zb)anuDdHaCF$1z7$}w?3#yFIOdk-Ft1&CAetbpeL z*AVDfg@SG&0_qYF23IBUaW9xd436zHWCW(Fux9&`+;?~?bhU7*h}{uuf`CWYw#;3( zH-oheuZ*6(5aBX%?|7a_E3Vo6+6Or|O)u>)X5jZr(XXL;ItHJ}3&<#_O@` zv(##f$0KYO`cQQ;XJ!}di%&+O!g_VOsdffAX zlfdfAUoQ5q%t$uyud&RGcS-mhe+;{W8zaX=$#&DUZhk6AkP!dwe>zJgKA+%h7p_Ej zNND#-8QeDc*dp^qAwEut@y~p!R$*}AbLg-uaz}g59rG!HI2e`bkzOM&WL52 zW2c3Kxw4&SQ1K}ujgJbs^zD!64K`7OLh5qMc4Iy(3Y>e^TYGKJolz;!zK0bw-JUi_Ml8M_yNN}Ddf#6s3q9UlfuVWT5mZod z9~Gxh|1yDSKYe|DH83O881Y$}bj?loEUfm&S^lCr+toam9SBOo)2vc)HrNbhcVY|e86v_ zvb;r$(~|8Oo9yqz8&OesP}tyd9A7Yq2^!Oz+&lRZio*0~`2~^aR{94D?4$!paxLwU z5uI+51jQERpL-y8C~bHwJ)yjhsGs^gSDp|1R-f9%l{?M>Y#b%+ zH$2SdfXeCx^$>`&%;AX#dH1YjmQ*I2z}p z($b6pOe&lU5hSb<0Rr@7%Q8bqbiWW%fLm)X9T(wR61Gcc>oR)T{;tSxz0=&tu!|U` z+6$_`2nmqk~Da&LPql(cF&9mSa1y;SS70IC>oz_KZ3Y~#dW!E}pI z1ab-?YTz$6)FtNLpH)V70;HAgkkFp_d;;L5iG;luk{rIqd1~qR%`(bC@tRiuBub7q zGe&VqbLdkgPIevL$s|*9$4I{!OLfP0ccaZv6hprT1H`CO6(2sp7C1d#AB0l!=J;5> z@+gUI>`lO>{HY%8YWfs|-eceMLcK1-%Z;ej8rx)gB8u#sMWk4*D2aWz5_JQKkw*J! zM4VQVoDqbk;_cF>ln=X(FwUh$5|1G}LQ(%T86jpXiLwlpiS|W`_X*5MM4|xNa#9DC zQYog+$uxxby^7S412YH+EFw3~`~HcW``q=E9y{ULpa8!&2c;Iki8uMNO(}^?jB2o4 zU@>sT)9z$3d(6t`AifaERy5erVN*@o0mh<}-C(uczc76&6pY;W2X=J9b*%Nc-(s8j zKp1(s!>mJK+`=1Ngm&BG6ERMLgBa+`gNF9Xe-YI>QK@E2`}z|1o2G}G=-Rl@7wpZP zV;V6h{iuA~egg5u0DTP-oKK4F(HQ<`j(DiRO9b!RD{M-Hoa*Z8Py=2Dn+aVCbmHH( zf65EkNQS4&-Sggw@01Z^S~Fr;j??epkRK8XB>WJSpu3_>`|H|}LQy23qlH@MmdSy# z83CvJuY#Nr;%x(}OXc$?u?xYG{6881QRn&>NJe^tsPTujQZ=eF(Jo4LtmlR z17?>$#Ny+4IcrfMWf~DxEc<=K_N+o4oOby1#k?iHA4Sa+0|E&@HPVI=b%A5xACJC-k?w=dSUNl{td1;@ zt8qMrOEgr+E77Y5_*db9*fM8)=X*e$F8|fjOI3bq)R!8+G4iAg=&5{uJB(8PwiyMl z#;vv*0oM-e5Yb(0qxo|xMmk&h5V$L?rjoQb@DmvZ8Fz)xk@xuNcIj-apbf+7c@8TW zI1q`0vETB`%wUh2y`-Zq9^opHLq{n*DGF90t$|jSM;cbRnBq_&cH%Ks&ue|GH^e8oH9QhEL03^g%8s5&bYc z`U#>W)1Q{RnsOyt!&pmtGU7X;FMNv}qR;6;vdCx4`#=~L zK(2i}ifAK(Gb|g*ilruz7mtPLG@8>vE{XO{zuuUf9MOlq8}b32b{Z4WUWAe)zzWdd<*oz7maEZioh9B&Gxmt--yi4KVhK|mh#Fp2U>^~SQSB`1E=JKJcf}y zSciL%IF&Ju+!eTw=|3f?8#P6Vq(=tEqPv6+b0yTrFmVTdrK68Vv1S}LpLa*?oFbZ$ z^v?UPgQWBq1MsI&8;|Ht2h)i~;$)!f#y0uP?QWwg*t?<=R z9Z7#8an*YJ)%@P_&7>{^*Uj3Q%u3CY6_>x#lwIAd2T*SmA8utwqJTR#a~ydlv-t$+ zzeK)}ve_J2NPnYg586lRClHfo#Ant^QlAJlw43Qvg%5EnSS+zO*<kp=CPHnXE=}Hdtyw#%a4{l{*3rLBfeK1VqQ28fq8}wKjtCaQK0KYGxK-f zyI=3F$Hk)TggfOTV%c~a>I-&gW0uURq1$-cjB`&Ko~x^cvalrv{?t-P3ur>3fe+)S zd!sJ6!8QC{s~SBuu6#*@i7rcU=sf$(;O`^48?B+m@9b)R=7nd`F_JVga+dlWP$T%t z3)lMhGC1k1YXr*jlvZhigWo4xOEv+q?K$WPI)4Y*-A#WBnF->nP0aMGqb2-coXU5@ zYVS~EcYu`VnUUx%1WQ3SC_|v_yCEkHv8e59&v7%?pI%+-IMwUyW>qKgAJbL(&7(TJ z*DJ>)_C!MZ-AA|ee0$7HQ`g&er4R_ST|gzk;Ncs#@&k8el`x_1yHEw?;K<%Nc*Ib7 zUpO9J)0(7TkLcEr{oFkpBF>5WjZ{=$$Ydp%n2ge4G9-!56va~V67!-NYK1z94A0BX z=FCO7d0cBIvAuFE0*aKUNeq7*mj0kC;3c{J>w#BEd61)&)Utu<={7yPJs}>^#E!GI(gJkImYAbNTfUwvZA)JsvAD4Eao(I z%y6kP$`csNUtz{lA5kT5r>7yQ8gL$TQiq}|Q&VB6GWLJZ#bjjax)Bvx&sA}9+Tp4Q zFpqW4ej+v#O(M<@GWt2#!Gr8mavO}X*wMir^ULCdFPQ!pA%07WQC#dtH>~raHT^{h zh!Lyz4~wOVp$@QK7oxBCM^8S}!yi#8=(Fp=rXaOHm{1G>=}n?}442DgJ11*$5SN$( znIdJQ3#}Ht1VH}10Qxq786IJ|o~L_F0C#7iC`>?K35qDlVXJXm^TMo?FLzqUJ6wyR ztzKbp8P}CmpzKw!;gJzw!gi zOpqDK3q#1Gm%tyE`J_>6ypzKMdOBKMeVV&jDJo7RtXN_%cVEnyIWjr8AuM11oacTp zta=L?%e6-3YIBK*H-`kwHb5UBZaXhQ_cdYNu_zV$V8!l=C{6~}ekPDgONHO-I=6rC zB1FD4lrbX&WqG3C*@%>?8Q9W zn#_z!&|`N$!%N!;*L5*60a!plu`)-oO!UgxTYGaQP$b8-zrjF8t076P0%B+&Rw4Q zArqj@jjxRKuK`82TBk-a4tr)sO-a+V_b|RnhI*IwyuU89McUN$Z_(D}wk`lx z6m0s|h9_ZEx#&a9L>BF!sBimd;gZkr+n~sw9Izmc%zbph-zhr1A2_%bgXl~+hr=C8 zfMr6rup&LsBdm}9lbS7s#(a!Y6{6mSB~V_s-V`<{Uz5%yU#iFdV{iZW)q$*Lec6)p z?#uOGT#pZ%9CucpF1Lmg$@-?tNtN5!QDk6E&gyG&5gNbNIf%N4Q?N-ahQ$Gy>X>O% z>{Y}8ofA`^+RJFeEZ9E*w^(d4s~nVjnwMWp@~}<~9%nYxih{33cm=&oq?ya37qM7Q zY}rHIK;!UG;-l)w1=o?#>BNqmShLHfX-oXNUNP|xGl=rt+^o={kV`9kO-ni-%y)@J zn&aAbG2s`j&^~rM62A(4nosV7z|U@@p=(u}A$nt=`yr~g%R;s6f73Vx;*r;@NP3MQ zC@7WT{-5Y03XJqOcKs;nIJXT&_EeNtLrfznZDHvLM z#cNHBFS;$Z8e9by3{7SDtBV|6;j0aem^WT^?^vl$o%IO=xXpg|sv)ZNQP=sPa2?Oo zXcvt#JZs`7eP_2*p+_0JW7 z*H8zb*uIh@?)rszjot51<0HC4^1eG}Prq8t(Wq!_?1PT>w?&mdjgT^DOZTDrxS6Au zWIXb>wR}l&U*P1a21Z_?s-%1-HfgUufzif~?cW4f%IOU@pv^gM=o4st5RimTWSqa) zL@eYN)dy#or4fbi7wMIGUoFG6bW`W6jjs1~${t!B7#@f#<2zwYbO)}a^fnv9E(HK*>1XKH2aUVtHKTCyv^&MN5`dD0Oj{YWnX7%%`fOkCSK`LI>jT`a{G20W%;D8jT0fr>N09YD4oUo zzA8oqDHuRpIB9mJUrSE=%Gn8N+Rv4y+5k3*WIY*yUw)Va@9|e*;Adq6S*{8ZPm)&} z+nr)m?H?gM&2X`I9pWeu@QafW%eV>ft*r;3bS!n_@{>pPg!>Vv2k2>NA8gs^Z?-cg z4wuJx_4=RK_^Ef6$aw7paN4Db7gDJ~sH-^i&#YVR^s0;tHMY-_NzNv+z|r42 zkXGleUJCy78QZ}ORfIDfXm?ef>6liv#c~?cVp3h%7(*$RucVXq``~08lCG}Tx{@6l zo2Vv=k)+%lAP1$5gt)n%5^Q*;^n^(fELx4;H!FEk(GZu*{z8hD-Xz9$Y@_$XBymEt zPQ%7HOu^BqBw{e0Q0?5UXs{m%d^p|j(U=_62^k>f*53*ouTs|EB>r5*&E&21^ zU}Sn(H^Ybhb2S-qrVGcf{jx^+`|&3Vc|;z2S$Ptct_r$MbWl)N<2KpF0e6&MmHqcF z)AbYb|BM4ZLT`sPL@dQAafdH=8voZu{%^pwC~Ax>^#KyQ%elUXx&^6287}FJ@Gffa zH^w52#}tEi4@(8v&k^u&@;0Q#egYwVxJ~0H10iaTU2XJL{AD&Yn^IjPGxlnIJ+<~= zteQ7YDXG$gngjaB`3AndMzSyxs}p~W_1{E$dc6?B`VVKFgG3DGshYc5{BOnUug*h+ z2?%Rt@^DEBw70TxuQo~&IqSyJ0D@}Y)VgShQA>ZF4r_V3G0)T7RAB+-9&OOY0kDPOte@Z?Y_@0+QNN*vG>)J0aUx8$p;K`FJAA%<(mK*rPl0K?4pD=D6B4Z>x7U1w&N{*S5 zzrmw-qZiJUPFS(1)NqtIS;sHQVk1EY{62qvTU}u9c#vzx9QvtDm@=L1tadPEPqoWT zExJrosb#aDiimA?D6Qhf3XHglY-S5EI4ZG${KHtB>W(v^4p*~|L@Rt}Bh9lbwr<;3 zC|cN~8f}(pL!(5`JNYFg`$KJ}V_9F!M#-NT+Ftm=7Y7I3@9nXww)S^z_6B2{y`{N=tRry!gsP|HEG(Q|#KBmyrhp3}R8ExCKt3u8POU}avtHa=P z1T)>E?#P3%s%-s`Y1t$Ljc*P3p6ZRY5YzcEi6OEocs0y^pqzS2^&S!uGk&-&bQZ9C_vKLrUO zyQwxgU;slr54-T_6*2_uH{!yCA6|R*T9or&8$Ko-d1^MC^xUXx*4Jcn+Ac2F zngFMgGUwI@<@wcY7FHT@hw6g?i@jszgC8r%)4sT`_4}usanzWOq_lf(PPf z!8hV<}eXxpS3hL)9`G z!d-6zNGpy_kfa9=N1#-SbR)tCe#ocilps{=INmhL^e-61XNiS=<5 ztFw0g5&YSmYxICO|3dBiHQ{mHX~0oxh=V#-qQIbaJ&!FE zpaH!Sw5g+%`;>of!B0|Nun^4fH4fXzyCP`9(LQcv@U)~ff- zG8hVn9cKHiG`j}?#~Pik?s{ie#3C@n#0n4nPF*FhPBlKCNqmk3x7u&c$iK@?J`p74 zFM4mPM&KlL3YhaSzWQ3Mnzz)lcV%<}I(xJ=W6^E1$2(V-TR@`i(H=_5S02}2jY! zwH9fW6dr7D0!Zi0s$(^ExoRvp05#c>%)^w;M!N{#ddwi|dSY}Ysq4ogr@t>&r1i~$ zZnuYdgHP_)kV~NE{r=zkuC%!6?y!6Lr<)7?+JKA-!e1~Nu8(~kY+`x_{H8=II)-eM_1TZszzolL8i)l|*d z)MT?I+s75-`^zwp^SH2Mbqg3F40h3m5k{tT@eqq})Ce-_B|$3P596FSldJ>DP4|Mm zOR=HQ=Q;GB5CZ>ZmN_EG+c#ghC?ftY#uvv8AJN}sjR9D3xKMX6o+C!(b=q;W>f?Gg zDZ#_w>qkTBelU|c1hgfGZw)ma+;l7>$iNzTKd;Tg#B6n1u)sm-=KX244jAer1cq4w zN^gQ&=>#Z$RiX6!;8Bbyv!+mPcwb~=-EkfnB)|CX#^%?K#%Y2`6?n_8h!z*|U;Pol zMKCt=dAtH<)k1o{j*m|?;>&1`W6FExTTVb(mPnYU-04|o{+ z-0kNy5aWTvX@13L_w~uT^p{}>R#rCc`F?4ZqZ2+Rik)5ap~CzuG>&hpLK((w{HNBK zNf&Ss`mlW(qfXz{Ao1-|avA6#Rq&rea1b+TSdIH}PBrC@|N3ipMn+sjCCk@#rM1rN zgfi5|`+R`D$Opc?pID0K|J>-bJq(v6Uhko1X+>6o1|4#6<|>!2F}J>UnXp3{1EzU*hbYuZU(j8T#N@<8aMg6&^_A5=!5MBvmt%Vt`&&U zv_z4W#GB%`*B99eCtfGY>ZExM?pHakP&gbL$I;+oraLUScApT(PFsmdfN~s{0wa7Q zj_w0y7l`M#p@c(0J{r&G&xz2=L8D{axl4|vY-vMUggSxz`Z@R>;(Ex|y1nO-?@H8zl0TN?`t(rADHmjupMW`-6b3hVXp? z)0kefu4wUV=EFVoTYG!!BC5gY);~lN?a^HnG^SDx`w7zGUx&jUcQ3}~ZU&Ga8gD}B z&!wKO=XHM+dB%@>D~8a#cnlwGL<)3b!Vo*Gs85XY%vze2PGZ}z#}^FnIo%vv_qbdJ z`#g9YZ#2mQ$Mhg!JSj}G6?!6`mlXZZ0*$UGlv{aFfhz{mA|I%e`$CEJ$3(!u1+WnK znGVSLE{T~$sn$(J{-SJpaTfXn39Q7;^5q9)#b9{DaP5jvw}EcKI^!?pZmZ&JpkU)= zzWM2vIoB!G{_w;<iQ?tKv5A8 z6g!sege3*hcpMzi6F9%a!2MeFAdjK?#Cu&-RI2B*OINceaqgMkb~xLwdl})( zHYb4GFuCu^vXRHwjRDf|e%JU|+H$jzinZlvoHNJlp?1|xWabIzZh%|p(c!xDN~_^r zU}VfkbM#CAMeu(t8|K#ovE;b=qN$4tPZ|8{w$#YoqQb)M2QJVz@!U)%9`pT^J@7gv8OLP( z3T_Kcli|z3+qfRM?97anP~}0}nBe_-G8OLY>^3yqLA_C(I~0)AtZg;^Wn!t&qxndxd?T1%;{sf%c1{h~lw`6< z9IwMgkVP}+!~C1reAQp>-{{;2K_GD#A=wm_RE+wNf~Uhn1q&eFrx48JL(mPZA>95` zFK4|1*^7)8eAve?g|TO^F6wKlJq8K(wcQs3d~T<)!JxaI(VJ-K&Gt=bgn;9z%|Zh^SlR_}m`5iMpd8pTfrCqjWJ` zIN~^StXsdcyFhz#{J3_Ds`qI35TXaVdtB;am<0)X9?#Ygy{Od93F!G^C>zB8)b-<( zEe-sQa^?D3>dI3OJP#`NIOu5Wi_&YdCnMRrzj+REUq9fs&5O63&T)O`WG&wQ1~Cmw z>~CnLCVVLaw7HBuXpvm5-e7R?BxdXFa$a*ngZy~#QyJ<7+HYV{c)adCv%QA+w4Nn$ zf8sjHZn3$^CrCG~KV;NuAjm$Ld88yb%UnRaEmm3zU0+>JeTZH&bru@2m z7=KYviEysAtB?5A3K@KnTNg`pp0ZqrsVxTBxd1~zyuVv}<@{Wbrw%G2@YC($JWvS! zMt;IDvv8LT7a=@~#9HLv?cha5MqX+)N%paD`4gxiaa9g(y;$EV0`;`Agtg%K2lu|S zEcZBxca~a_vT?U^o{B-2Fql_SMOJ;cpWjXt3Nh}tg?DFiS0%{5p( zuJD$+5^z}~1)aDZY_76s!(k0VKq?SWbXF3Xk>=MP>%T$J@Slz7mFM@`s6piDl~DLZ zqB_mvGv)W9VGf4}%6bo8uowD+>a}|9EkxENgEN}!;J4922Gnkw2YrM#{OYx)!1YO0 z8OMWOCY_s!1|ix3uif~u0~d<&Mdy5nAqM9bY@p4uknIJ-^deTP`v%#rw9n(v$^U&5 zeC8r2r!wRe3A}>Ml}^ScU5y2nMO?O-E7f_1Qw&2ll-7c$GrinV)}Hrs2QQ9r<4hr@>Lya`QSjHQ6 zikRqNg`~iW$o~?@HCtrNkAvOw7%|3_FYhqFcO;&yLBV(^$)A9Xp38<3YN&j@F;g41 zy=Nj@RH4pYY9h5fN~^VUXE&8jMfrFc-T-~L-cY?1ScPvNx{Eg#zxBCU%x3+1w|8@a zGj<0byGYT#+vk*MH*8a^#r?Oz_Q6CzK;X8XCy3)^c32wD=bh&LERQlYqo~p3{B?8Y zY=|2+YfBDrX)PeC6ov+z0@qOw_Poxj`XHzEX+XtZGINljPuc2?QSdN_ywZ@-0w+bvz&5IKTx z2YON+iE=PJROB&4SAGK0U&qQx0vbWe4ys0?^VPU?&Q*?tfOKubm{_8eSRw%j#M-Xe2s~QyW1z%(1QCJ7{LTN>=sUlv5b}d(J4tHjnVs%h%ELG zwy+rVo+^$~BQqvn=kI@N;Zx}i51^;>7gQlS;S0-*DA7r8vLo<{VYk$pBI2S?VoCnL z;`c~7hpQ0PpH9eIz-YZv-AZ>L+#WQtSXfE8E1&wA>0@FfI<-DyfvjO{&}ceE+7~7Z zO%%k9IgM#C`ozvgJMn>yiSSwS$HP*FS=&SRXC8BYN1Dme(#ewa??h#Cj9O8c_3A|* z?vzkXs#O*9WcD9g@mqe_MR5uo4Ck zYnaEF3usmqjz*`bBeE-e(0RjK;ME@(*WY=b0B87iZ0)r@Qp#=X{d_<*rFJB(Q~CN& zx^@*}(?MgdCgYoCuDAN=2=Xte`ghui@v>tLhjZZrxu=JnxE!$P603f_Ff=!eWS^C^ zy5i3!9fN-cdlTRQYJJJB?V|IE^7~%@VRao*V=3x)L zrlk54P_B5Dl|+;rpyiNUA$3HEoS`!BD@=Hp{tvp&IxebajpNcF4bmZ9F5O+y0)lk8 z^wKEZUDCCLz?e=F2_W4@BuhzZ)NZE0|1FQ3W#S)vH?GA=Rx(l^sRZW#(ud)Z6$I?UOp0p(69 z<)ixb_V;0Zt4jTA%P83P%dO2Pi>m8|+A=QyAs)wL%mopfLl4w56d?j#a;o9|nP5GQ zOzmcC#qO<}O|qQ#@p_9H>R)6#V9_YIh_le1wasF>R?3XlZ`YF;i?DJ|w8k8z%lyX7 zx_e9Xh~j>&Xc?xhKGwhzw#RpMNkg0Gof)0$mU1dAMVxe1OZ4;M|0-iw#Q(XajpB4R z-Wr{@sBfs?*>u|ACP=KljC}Z_%#5BsNyt|;QwD!T^L4nV+**&i8m@Ifw_Lced|s=? z)nQ=16^3r5EonVH34RRcZO!zhuzGCH4xrCeRQjCVQsXNj$Fh@(m6Fn%p-IZ)LWBJa zyMH@Rc!vLCc|3HC3^R&r> zg)7A{@j2!Y^NUpV1U2k_a>qbi>K%rxf8egfi-wD1cpkvS#KWy?s;SQ{n9i z-#2!>8k;>9R13RN-Fh((BcFq)z2h6*T)|f;F`0bM>T_+TjBG}Y({C?DF{mVE&^;+0 zGGg_l?vo;V6=ntY4*_^u)|-k@2W00mLcZ8CiH(%=XRp{*clcIOY} z%3=FO&WIY!&w4GSta?>W*2uBh+>XOZacW2ieJW|=(A}GYq1Rbr+{T}fiyeb4R0;m3 zI*sJ=3#O#NY1jQ7ID?w8=bmZtb57`+4#ddrxTL3JFcTOXqf207Cw`_K_j9f>~d`p|F zerCDriK+=fK(Eads1&oX__7iRfzw?_n0y;JaZ<=%Chm2`k`Cb>+((WA;QY;km9MdS zW3q9%jj?KT@VBQs#o%yR;a_WA7*=D|$QEDHY?LFzIf(khJ6`p+%GkJm)@>%!OD@J? z)GU*@BhlU8xWarxAGx}NBV_RwXkGEz+WvH7EicC4Ff`}S zluvd}-a|aGvS3v;`78m3(lvRhD@Kf}UC;Lnll8HV36}R*Q6i@g)23_fKBq6r?7Ieq za$ciX=8xCexMzp*Rqg!P-1)f1(iw8Mdqthc5IA+=b37MPIx|D=EB8=Ll#ml&85_q( z?u>DqZ`t@kPlEowvrNXuP1D}DzNzQlWYdDpB#u!qwBc6Y+arqd!agF|~Ji zLDJ#=xaEal_L0|3u7^K;V4|rz|L8{fI^H#_-r8$v;w+Jrf7E)Bx71}Drn`WzHNwXW zJ|!^|RhVdX(ktO0b_=1AiwM>v4cZn_csh~ap=yGrS^#eYGUBKjaD2FLv(N#9S=@N3bzg4jq zgxY}kO150MdVe~9rq0!JA|S81@2y z0wXy@h-nx;V-96e^12vleR+&#NcLyw=RXop5-c}+p|*Lsw>ha**6po!nBZdDfJ&hW za>)7!Pq3_@{FR~OM{yI$~i81o%^7H-<*7SAK>Q27v18W5MGXkte44`ztjEd(p3j@%%DH+S!Xs|$de#k-n8eWM9~R--q` z{z|=s+R<4biJdyg&Dki_ss-#_mA${4Xn5p?g>X4`8Qegzo(#z~Q31VWQqdtHk5Tkl z$i8>yUp*5LvnY#VBJmmLa0$<>iK7AjZ?1;jwvSH*GPHD(UJAJNM7_(erl(a*=@~7L zOlx(#%pi5v=H$;$Cv@iR8!mpAS%(9b(-}Jvfiz%|SiHD}HFOUZc8L(@ql=c6Bxj^> zh+w`?%a~4ZNhOG3Es4(1prJ-(h6m$}ITQa5rBygPItY~MqJnQ1qGoqb@RU-hf}`2> zNrf$Ob@(D}-l_l$h0NYsZRD%V8^|b^hNo3MLZ9O6nEdXP;vd8riijmUHDo|;tvB(K z#b`F_u1qabJGOK=soB;?UC^79Fx({_;_w_1AY@UC^!x5@;Oq#Xkn>r0#d#MZVR9o! z;RU>k50ot;kkUb{j!ztdCBSI&u}i@q#wXZm8iCmu&ocPEEqFtHR;9v+xox72rUE#2$F%qLM?CBqxkJAyTui6xvjc3`#Y!3`@iB-X5VdJq-9k}<23y%b4`mRHb{6x%uG1ffLeHLx*7F3Xja?9 zdcAGK^2BSpN;8tp2;dOl=CBNaoi*2n_W$+`2gh+grWK*OH)K8JC)s9S#^1`BoyU&;P$eOY1Cu53Qj&|fFW7ECOf58HnO=tii6l9= zMmNbW2+QY0jXxCz{#1TZm{+3kU@}C3Um8LcXvW!GO8P;M52n3AGUuc3&~(&tF*6oS zhr$*qJ3q&773I(+f7B4=+dcX7Q{gp3%nv0J^qRZ?Q*;!f97+R9{vw7C-X2=Y`=^@1 zN;5}69^JKDc8O&57XJR*l}Qh(-7n{&28bfOO;B&!v%!I9e9^Dla7EsoZ_Pqvy8o#% z@xa2S64QwHQ?@;AOI5o*rs}OG>YY7eXteQ3Sd@asKv(L}q)=tn*euQH+&qP7{T$|K zsUI83?}6sw@pKrx5f8eid`Iz7=;jlKkqXL>4dy1dvO5mICju1>gcP4aP$@zo5kHG# z&~(`5djV2rQ02}OK#p-w=PkZ04HhNGTkqpyg`Evjp#p$ur{YV8&UevsO49^ovr(S` zAaw?99{C3x6z6yej^rxHsmL5W6;o+5@IgP3Cw5naTW|*=gVXvhL!GYy=n6X5IF&-l z-=Nx)x%|q=GUud&2Z4>-FOx?{o+OCnq!`pYs*<@JZk%7`VpA1WW)+}-kOb}6`CEW# zr|Kx{I~+WhH$=2OQ)fY?m$~e3oPU`>j~W;@YT&=d=9$ZR8A-j;5#^oTqecY;hs3DB zVXl*91tCnleTj`l#?PJWO_D*JqmX7a2`^r-lQvdf7Qhev6WZjM;%i;*prIuyNpzSJ z@^q~*p|#0EMbd|=$8tt@c277DB8@;i`Y?j9l9CWz>$JRT1zcW=kGOoyuqEJb3$#A$ zsCosl)S?G>H#j2oK)O#XO%vSvpBEZ2KNN&ka!I<|q^({>%6|Uv2(Adsu3Q3o-p2(9 z&?WS=r+7gGDbnT=+zB+PHNhn3rgwkRRP`3dQgN2U)8~mlV-n?O5@iQX<%gp= zL5egbq|m*i=mB2V?w>Ip%<&)F-U@h~w?q)sh44m~A-9;ZPQ4!=$k1t{X>&&NMjH>~ zg%u_}!3mv6PC4+=CLC)(9`QUfbn+C5CIY;S zOr{wRu^1Q@sr-7Y*ju~y-JBP{WZ#n44q(_$HZ)ae2P0_qH4Ff~C!dfyar|UygfMzB z=3eP=3Rug(>UkyM@KD z5GM%R^+a7EDQTsYFB?{Q+`~l7(DV_jUaO_SZEsRZFO0TzHwq9h>a4DBb&#V`jDx(+ zl_-OTxdn)ypu1qTQ4Xszt%iAf4_{cHMJVF^jhflC;d7T|aE~P>;j&gAKE1L^j=mb= zAJMBR^Q!5d_)D+AXb*Hk`uKt`+c=A82u?F>9UQZ?GZJtCl)E&L&@WK0$g{P8xK^j)ylPFd8_C#Toy90IkdVfoNIiN zp~b+W8whg$c9_Qcm9b(rRm|^GciYZ^)Tvo+Tckj0tj{>n297eLf#a%v=_{2p7g>~ygApkN>9#A7*9A!y@9 zRQ~l0&_!=q}B=cjnG#Lu_L%~hrSoSbHbQeG?!Tl#We5fRXM0gie8yPFG- z7G^dwXVLXWzMlhDDObmR!iuD<@DiH?;->n^QQqgpaV8?iWDaw4>g9~1QgA!LIafd4 zk7hBLl(}MQi>>Km1CWd*JlP6;QKDG<3pL&E zqNwq=v9jwpT0J%QS1;}x96jz)7+(@(y==kASd4^NFE*nx%ZjV&@TEtClt!?!IR}| z4w*WD!2~I%LfID??={+Nry$@rL;NvDQ+Ti2Y%j}@Xx|aiYxCu^f(FZUL+I<8n2ncy z6n`MdHDwI?tcFMUHy&CtFN810uY}ExlD%TI%GnymfQra7ufa?80XH)+iOb0Vc-Sro zV>Zzl213r(NFp&*FnLl#+O4#@ZrRC4td|`BY6zcY4~8*e0!lG`ISz(Twa`gKbss$A z8kC7Vvm;l|^qM{YE?vnbrCIxu8tX8~3Ig+J%uWe4_>#ud{WDT9>K6rHJ!UFFVS!RA zo}#$@l+fp!2a;FZ-A;vhK=LHbN3XkJb`Yk*`c$nAQ049ML!@6Z@hMd22;c56LwYK` zLJc=FwWl{rJTIj0ep+=wGR6%UbON<(zw8G=`7GKJ8!g>6Vxge(+m%)Mm$X=iygY5H z&TrcroZFMCBx%u+qq2yF>T#kcQ%y`*l6M>1(DHQFgse{ehrfds6#<3})Q|pOb-1Sn z8fg?+8kbsH*{rR+vj=SZL$iWRbPj}>>QP8jrD+Y3pEqC-Mq3lJuoc;7v3j^$kdCyn$Zl(wLX9xIu2K;hfNig~D50)>Ze_Ee) z7QjQ!-$X3j&hwcU_i&czZHOCB%=sLEQU5^B4UQ|d%lBih$U|+ z(Ms||hsx0Mp2M>JrQ9;`V_fdin_btXfb&~;+n<+nr{C+o?Z=Xs2(yca-62pFZSry8 z9iq>Ykrw&j_eqSPzE1VIhl^pt4#U1cC9{|rU2byo8_K#ZYe4!osU`YT@8ZC6f7f(| zy<@Jjllop_`N5c80%WeiB8kIwUM5#Oo>g#nP62D>Sw7yqBY@ z@jc@u@hJv_D;oKf>B|>7ho@2Rdc)CVT4_L7I%O9Td^EosQDUi&pP@!0=R%aw(TiuM3Q{6!!amf5MdUSqNDQkA zA|s?l(Y~4N8SfshD{@g~7iRbSm?L>>qV9ziafD0C{HLkH0(dJ;3{@yMV!;bv4`~b6z z0;BBPoVZmuq!L zPY*ab9Pb0XqdL&l= z#_T%}Xm;q~!}OnZWQHghp;!gwMcD;%ubtdf9XWLHcR}1KS<|gQr31SesfSoWs4UHV zSz^U^fkn7?T<0=SoApQMUwA)GbJmP;an5jYPV!YD!tJN(t&$l!aa8eYNgL@sD5t`n zoNB!+b2f*^QiZ~yOYBJ;QjG(TAILpKFlw@~` z#dsrG|HwlYr3*1|>$UM-ibKE_ddFpXTU~2g0mY@}*D3g^QhQ*T6$qv+2)!%qfx$8e z%R4odf1@H=T(^B^$vr;h!wNV5P{SbPIWLsl>BvH1Eg}v!LQO*i0tz2qJ0Aj8LjpU|2WxEX_A?cE*)0AS ze(Q4QWLZnkXgFZ|&G=J-24qf{6`2nUs?-&TOS@5kdsod#cWO*6H*)(?qFh)%0o&|_M$Mrh_l|>iaael7^ART z+vtpRSn)Dc(&rJOg`bu~?6oSj%dz zwHb#dv)ag=yLuo97!U+;Y{k69fc2{c^K#4#@p9MrT1dZmIwwdiAX~&!J(enIf*93X zT0c7@Vc7Rb&{FJpQ;_(9<-k&Bwm_B5_IaKhHox6sCXd_qv94-p#)rFsxh&~*;}94j zn@RrQgx%W-E?a&~D=TE7Rs8sbhHPiF>tddPFkQCL`qS77>+_;5v~xWH`Bhp?<< z(c+Zob5cpWZus@~GL|T+RAn070DmN0D9bt!9Jpor8d?b{2@S@{|8rv;+Wjz?ck<+7 ze0_gxTon11Ed5Y?@f`vqSJJY|KO#mCMBNbqB(~R=)#J2`ZcGkP+nRtXaQuhD_=uP^ zdX0)GTZ$_!z`3+E{u6&*XG~nUlPgOP0v9MdF0A0d`**>SE&Z=!4UkdI-OhL(%p63# z&KF|aGt+7;v~AT!;sPNnW$;m`7oyxgNLUu4qb*yZe0`m^#AuQn zNzh|yjlf1!VsoI_`6oyYgzZnd2{Yg6^x&-Tz)RIBg%cUSGVvJ}6bIE6uY6 zppIsfq-J4f0%FIQK$2fi4;{9q(I@4o3=x|brYfmz+NGFm-))ug$$)zLK%Y!-IcCB_ zP*YJa#obWGk#PSjAj}*I5+{L0K?fV)Z(jEzZs(sfzhd8Aw10IwI=o()EZf^Ewn~OE zO@s-j>*w^%VX{J3$lb94Ht$@6CvlYooNC&`gVM0^c$mkrMs&G2mU}xxzO&ieRy~gYpKN#gTkmonS^oRulx*O zXq|}>g~~iVrNe^;fB`|#${uIWi~{g7b?q!LiV>Z<<#z(LWXWHc%HMx#4zGy#?Wtz4 zU~2Gn>;RAWP!K>3+6WH(RO&10l|>6|xpUh-%v?P36T%}GsiP5bkOj($jdq^j2A0i- z2I=0{03V@QSx&=aqR_>JrqO}x#n}6Di)BsaY1-v#;r{Aa!hvCf8QwZ6yKYhERKJOx zTzsYNT3cbatH(4z91hdfYi!rH6NTx(>pWvNLax)ost>YC$*3Z&vfg>aAkj@ckezx@@51U4AEVO?)mYi!Y;}UNIU=E|wY;Md8z+yFO*KU611l4$$2ud7 zIpw65yyF^itoN(#05L(|TZ4i5f`2rmXlt-PrwfaaM8NlX<^|JRA9KQet9CnS8L_fB7%Lj;Ev|FL*^Dd@hv8SR`R$kI z?xy8viOSw(iHY<0c|IydF%={B8AmAdJPQ)eZL6c;M&{$tS`CElbYu_-3YmX0{X;FL zY^>QuWd)^HW>^u=F4;~oVh^8Y3j#NSVVb>L$(ra$$n$F6g^lP|oX2c2M7A%Y(#cxi z#A5hqlDLz^mcY^MX_hf3j5ly#hpKXH1#vzePJ+(kk9#v=m@EEGZ*7*oUMLAQ566D0 z{`;m=3Ehv|Ijb;mjnxm2Le!TsrRgB-_-&ek5YcG>bbQ?W+FRUyu1N=^xiv}|C)noa ztyLMWlhVQQRm^v+Bv_eRKu1&i>7tG|TlzNe!5Tto3q1IY`B{lg$u7yR{@3@-UP3>y zR@PRcR^strVpFPV=(o7euv@Y_`iv8+n%w){mp<)fUHg-fkiVXv zg*o7fkO3!hLhrU+IROuxUqvb@nr&=uCTk?~*70H}=Q@~gj?auU_Rxy-3X9ov6rckhg2RtgF*OAkart(Qq<6k! zy0(HGNe6Q7AcKdAIwIv|}v%TXJdDy+))FNnTpj6J_&5`gd zz4)4j&FJ;zg~lNp&Fam)==Wq)$(nOdMDyN`HOwJY_g+Km%Wx@;)jsdUoS#Zsf~$f` zAMS%gT&S~|IdoUx!~%o0fy(3ILD3@^b{WG4USDCAZ}nGxp-Y%Hx;(_?}8$f2I&qZlKWa_uXWK_)G7 zX2|Bzu#iUUDf^{Zru4k!em7eGqhx1`4k0;)_|4Bgl2X@vO+JPsKtNshu^{gQ*qjlE zg9zCzSxS)j3@C`?A!80wu-+jvfz0%O{#0!#jk)U|DQ3iz^zkdyg;!fO9k=B2IHcX?vw1L>q~FX6}tH` z-j5jtnSNbc8E{&EM`Wq>F{y0s>QH-G67cix_CDgl>LAGfN+6Xe+G1T{(Ax1zbCP?C z^COq*ThlY({TK`({$z~8A`#@Y*86l?$lAPgd-{#tZ{cTeRcyN`{hxPk2PDTdfi=J1 z`8LCcIG#)bu+}r(A*6^ z?^rXH)5rV$w5%UuPozJRB$Ow(+H8~aeQ+Cycbdo!;$ZFo}KqvhI1`$Wi_Otcc
Yv?+>CmTs32b)jGfM~zB%jd>U9jIs{pSnYwtq%FfiFoGC4fYz{;<)ot)fZ$8)H<_K^}0DlMxh^CMYW)*3HX+^=G zVO`h_s%8+5Yd_?D95`_V94n&V)-j3+_nii)Le<2I#7bL~V+=BZ5xuRA04g0L8O;b? zR2$Al#eU~hy}hpjsR9kUO=rD1&>+=gr{<*g!_@yz71_8@4oMExjxt<5J-xo+`JMqo z6$PXpI-ve813Ya!Ej5kFm!I4dDgv6?;=vJ(Sq0_s<%x|p4iCo4`zZeqx|Mn=9YsY2 zWdtz=CPby7l~MrV7&NLSuq+TSzdF^rwh8uC$Kpc#i685ZZFe{))J9>X5>rgPeW&>Lovn(3n(`}6ebop1E%2>7GF9jUf`lhH zDx;COdP}`7>{pCs`!65!!IFP(0~Eq#V)AFr*MX0kx;?{anJ4~c}O3>u&Utx6y5@0*PTM*~zF zgSeo<{T|OU_z~_gH++JtH0ob>B=8X~lnFH6^zU~?a7+24UXs8mG*ct~9`X6F5uen8 z4F5eM3AF^`O_YEBBFn;{S^5VA>TG z*Tp)0GEukvrB)k$W)dVBTdGP(ZgH8#{;JjTjGxY4@y0HFa52Tj=XQq9>FRhvLT2?(Ft;~AJQqJtn3rm`|1`QS%)DL__uZIeU%t9&zU@<~KM)nM{8n+3p!jgh z!c&oiEMc*a?sp66p9)y@-`5}MR_%}Fx``XPtdy@W-?iL+ixs;$EV_M~;k_Msgze+} zV?~Y;%lpUXooU~)(ACJfo0!;-xtVg5%?_-v8i=8E2@XTOoLdI`*RT>rhGQ^Bfl}uudWb(; zCyK}b@9XM7@a?Y_>-J!YBE*}~NS`w(f)x|i+uOGSl&yRFS!?Q8RCxGEl zPSA@}EKTk{oqTU+rec7<8(pe#HvZ>SZWw<7je!Mq5)Tg&50iM)wR1 zuq#y;vYm1Nb)_XP3|B5paOujJr&0~{Gxu}gDhdMBxwv$4zAYH)=_x8AOTOvzzbrrw zLA@;S_1f9^7Yg!=g>5O!jW&}tVXAvGNn;}^$&BC$OfhY25IjxbjEw5+QKyLPVQ2S! z-obw4C2cAD`%N_kkuY1>8VSP;3M>)Q*O=N&`m&MK(KiT7OF71K=TKr76Xr3;Fxm2y zCo(iEDW}o7lfOaN3eL_-s768AhY>UncdHXCA>-wN$5}J%NJ%M3 zhjh2n-3@|D3L>D4M*0Ooq@_e8&f__7>N{-DUH`bQ-~9~mpO{I)NR1wJu-oEb5`!k= z75|+*BY~+VpB7>GxGPKmc{LZLn4!~$OlpjO81ym_BpuDDhjFGuX}>?OGBT&BwW6z~ zk@@MKf*3R%k)8R3DH^D0Tp{K!Z=b2@&&76E2k69Syk)s}F9!V+hmJHpo$7r05f|ls zi2GfJL4d$)Yf4h3J4BpJ7#7Jwp{cJw8~lW9Ha9S6a4v1t1?0bxoZ~l1kA}tzyLAaQ!FIyy;N^7NlQ<*P(&oXnOpr}S}b5vE0a5m9V zFsh*jx3^5rL+M$;fxT{j(d6A8q-ZQjO*s*JysUWoju(nR^XrWZTXa^XUbiBEKN*h; z9)FR(4x_ex{H^4nQ?S!_Np@!y+ zqyC#RdzCo;^|K((%W?>|FhM<8F8Zoh5IQ|z9kV}tv6p9G-YEdOd!7n>pJVu zwy)A(f2`q!$-#?k0VQakULlUg()*K31F5K~85(SS`!NSLY`m#yNa;8lX*m}g{pV25 zNhx8n+|CCWkkd0wjC-BsW*3K-B^rV(BZJgkbDgp1BC>Q4?S8qLb8g*gxDKZxw*Z)$q0gSL{&{61Q8#|TLDLPaeycNsSt zNKbh-m1WiV>70V59T7OETCknO@5L=1SL+kperL_@2kW~cDB5l6s9-TYJTJ$;^Y?od zR$rFbKZ?fv@}L2OC2aaD2?eIc$j}k48E+&oiu?^1`QHq;n|bEXF|M)eipi+U$?GaB zj1FlHYj%tBeO#q;$@Z-W4$ZVK`+Q&c-Me@80$|ym${M0LT?#=QJRd58kW<^V@G|7) zWY3h?)K}4b48aH9Zf-GwGpyGYSB*^qTX`b^#2^i@hd9PxPP3mIhErq6~ zV8HEZVK8g$SSN+M3s4rhTDw-Cto%>!^MkV=D)v+mV9HX(rVh)yP{779GS24NFm_;} z1Ek|5wI%b*Nz9CebgwOZ*-e?Mkl*QWGK~y*I5@6pfA*2aK=E8u{#}vt0;=-i+k5cL zrZVBdn5h#SxJ`-E<2o0|=w~)kPzwbrOh!x*K^cKf2Ob^dHg zsKw^4U;2|DOE->5rUgl+h0+CElhuqT`A~3p=rYrTd~eOsQ?AE|e#CUM+h2Z#*#i1) zDoC&Hzbmh6?#JcTSn4)~*+eCD2)R+j(V5DrMQA9FsCf{jk2Mm-g*V5&dR5rEUXgw5 zLo5FFARVo^{BvDRB{Mj1dm+r{uBUnXhul2g>|cuV0FYf=8V4;J!1y{bs-&U-Qteij zIZ&r(iFTeQATH9fR6?y^DBOSub`aubyR03kE%y`Lap7k0GfpQYXGKqWNaiMjW_&C? z_zfpp^_R0_tGCa_KBlrJQcH>Z%ehP!i8HKz^PWWo-ga+!FyMHM)mIwn8$F~324Dq+ zeibro^`aN9EORSyuq(57bV9fse5H-yhf|Ojs|)9K0nF2da`{of_}1t>&5vyd zUig1mk|kx%boEtb1!W*7HD+%u2k-E{`MAi|(f<@DU4rZKWFIDUuBgPg>Kr~~j?!`;cZ&f8#*g^ypV$5H4 z;)jM?j}CJ*gn&61`_CMJz%)xqID3|9hC(EU)0CiUKCm(iC3T#rsTC$;-=KL}21Xm+ zJH|D$p_ds80$hWmt?k(w_#=7CL#pV_d>HxSX@_Vo3-rVIY?LVjP!!=q<+-M$djQb@wYqDc&60uVy=U z?Hj`HelusPNCg^m<-GKeHyRo;8nI05PEP2g-na?|Cy}-f)a8_LKOjyLZW{Rz?3XV# zgYze86y7l3J_5_10!=TV7{JS_t(U9JN0+c-Lph#|FHU4c&Agb3Y>Up0*1-Qv8|_d? z^Bf~fth0YWZe`|US$m=z(MgfqsM)+SSbu80uN<#R$iJ91|q^|Vbg-TpxCu}%3 zoy@q?2WbDCL2hn?sVVP6>@#YZ+k%L!k%bLVJeXNos41X5uIeL%hjY-Upm%WEtF#BA zA|lzm)Dwzrq5#ho(hTQ}vypofhK}0K!O|Ls4RFfKkb)T9mC1!*oh@42wSFg!JLG@K z5x97AQe)uG&^ZDjASfS2h;_UD`To4Gi~0py+ibz#K)Ipy%Ks2D%Kext3mW>x6wc8r z?nvf}7Fj?j&ci%cnHMP(TbOdPhECAIZcV;sF1Qg5FVsr2Tec%95Xf8ufSLOpv)lG?FPlTQ4OeC4(na z$D0NX(mT(x=@W3-5wa>7-sk9=C$79n=Q#MqMINQDDrb+OW^RrGa|`}vcn~?9-c-hu z^M-3l%H{WY(at>|jS8iH-$H2f)!qXe#U6$g=pCyO3;{Y|caM*jkPLo01gVj?R6t?_ zn*dBev%ls^Cq$)Ur@4$HO3MQpijWdcEOCnp5a@I`X2BFViP#cPhQgRVq0&=@4RZ)s48V#|AJ*Egy*D}4a9SvV9q}uuD zy^=sj1nRD^h)K8;IB@>#cg9x!qa##$Xh(iiTVAtGLy)>pe#L|Ewu(QnT^&x%;9}^h z?O1T$!wUDOA4>UD`lciypSB_f#~Sg5dyY6BVTFF7AYu)h?jXRNBj-GjK7GOhKq+^9XcQmAF;-x z;sVUZnyKwc`oo5X!NzNtitcGLO)Re}qWEe7QeE(u@kVO_EfvIbcOm}Q1xMv7e2(|Em5~PKjiMMuH_4{@bsHXG14Y3& z%k5?-QYb(Jk<*XFvapU`53#du%EwA6(Y z!&7+b)joEB1=MP~EeXqyeG?4bxYP~jZL77`~beda!*Oz#{vWPA7zT~>3UZ#1xlco)AY5rcdq39jzi zWF-c`*Z(C};EH8f>OhztDgTJXE-YimPSj%-Q}fQfM_-2O1-DFKG7gYY%T#ga zbTV|d|FI&N;(J!GUvpz+*tS#@MA1?jdSlRnMgt^GUVU9F3;Ej*{$A^bJWS1m`hXUBo z(a#A%8W+Yz>x6echpY;CGrLg=pBvisH4HJ>3o{?YtNYW$rVdhk5o>R?E5z6M@K-uw z$Pp0BwsRIP^`N5C#|h&ZcrS9~c3dEFqAx$uFn$|tb(FF= z8{h-1vJTvTTO?|Xha!L-pLJ>%LPMBaMAOMlSR2`4$=V&Fs`v(it2|HnH}47*_eSo- zHY9i)&&BRwTZ$nJKQw??879{0f!C|~N?%XQ$~gP`la^#jCe|O|C7E(gK#I}snQ*<^ zuGrukCd6)rw|!$Y(_nAK(vv0ADz=Sn^ZCG(6NDj7mz0iHzyYa7dH}WFLQ(_m3!Ye&nP*rlWv55Acr*^G&vU zY>P;evh=DdGTOMTe=i197HT2lABcHVj<{voOn2qo+L9uc`BI;~&==^&su^;^RNU4s z)@lG?)2r%yD@3Z2g{Ua^xTGUmn1RGR#34%yo2O`CSL6et-l*r0dwxly@Vfxh)Mm2G z2n>)t3xym|1vwgPcl92!oxI>t0c1Q|>`vpe$L81r2yQGz=LV9K^*TLuZL+*5Fwq_) zrp~I<=YWH?zNoI+4Y^+8?21i;FDZ6t0qmYL<)Y%d-4ofvh)wZkm817LEJq8wFerw( zi2hUI=g!9G$`8(BwI=zR^};lWYRCa=+MrC3f1F=fq`~tCEF+vBPNk;)$>R(<$=|B0 z@P#58>0SFFj}|X_ke6O3|D|2ZAaO`YZR#xQ{YMRBEtkcwBm^w=CF&3^rpOl9Z3c!a zu6hu{sYo7uLu9NdG33NERRRK7A^N-&Q=f=ai^2`!oCofYs3V20t5Jhq_NJlQ>SZcK z=(uT*OuM3s5u|Zuwh&+)WX|jgujrTVcT2l6y9P#QLX%TW3@2I}aA?ik4~xg#mOH$! zCpHdWeH8sGP=oLg`nGfnb(<9W=nh|FW#NZXPBwbbvuH;rZ292LpxT>u$Wvn~nOdX- zz{(N;k};Hp-fJn*5)yBJP{^321AleTz|#+(ve0cW*wN`J+tqQ+JpV+_AX(xkEnlS_ zV-X+Ny`zY+GgT=*c18l9?Q ztTuhR(EbOGJ}h28ySgMzGaBDe0`m1f>%a4L5|(6k@ULvd=uQzmj5d(odqPsfcZh*OFrp0zetE=!c= zBW4w$M2`pp9_lYqCcACx!u}(U44%0LfB7r%gV$V)nB=dekd#?-Pk*s|dX;a{G0G|p zJxL(m@RcWQNb>!wR{3^{QrH8TOf#Q|1vm1HC%}I4H=f26e=}Je zQ=@uAA;77NK|`|@6v#Z)?7-t4?_Rv`T|6Yr#5PhNE5xP=>h)DGhH5IynE`FW$Nh|} zdaF0jb~g7U9@bme&cFV!EP?fIHY>p{_e&&;d1P6|wYu5}G-YmJVBlum`gI?9C>KrI zzs+7SSceYrczQWzz$o-bN{9{-m0F5{9i!UtykEj{NT6D=CAdHNx#L9|7nZOrT}(0) zjR7aXx&pGIBnY$g8%D_kiC>Y@YY#N3m$)S_d@hyR_m|v70hmhAs5p4B;U<2k{h$c- zdo}1M?PAbjZ{~_W9wo>rvF=q6n!jvP%KnTrDDG-#n6uurH3uupHQ+YyW|Dzyv9g$p z{{FhK96w!0SX)(4mC)%@FW3K0uF6QsIv;AQEHaOG5-uflTC;$D1>+8}llS`nE3dr7yDp=jz?w*896gPqQbK?lq_7Ju`-!%uPT{I;x?9 zUZlYW6I`#>Cj9UcKvoR6qw|FeZyM?1&|hG@2$YKo;7cLNit%&bR~UUZA3hDgH-P`e z#26zbeb~Gc`Gw!-qz8F0H|+3`$Fg$_E9>3C#^tgqtH zgqmQs)q2)Kp1J%fx17 zcxI}!+=$ohu)~|z&2#qt*%es7JoDh$&7`l)jq5iHTHLYRI(r93Mqb{emNXOnZ7Q;k zU+IkHL06}#Ix@NKCB4h<$i3wzKWY8jN1&4g9m5P&1}YRz!wG$0XEM-JdFq7sQPlSB&sMqB&#!T*YeOEfIqty;^_l%6NR4cU>xVASE$u z@$%NH1r9`w)bHZ{FKsq|sZ!k=%bCl~llGFb#K74XU>Y3Y#fflurbJry3x_JwRbO{m zJxBlK^t(X2>ymW9W_weo9}fGv<^TC(0D>89y+7bravq2jCL1kFdD<**vh z%+d9o9){zRskmll*fDlnuwH1T0e&4-b#Ac3gRezpX=R$Pct{DgXK z(S{F$>-ShlpUG1hAYwkQ=BWxAYCC|2mb& zP1O(*z*M-*{{-`3m?l`cN0H|T5EP~^=htDALDm$)PGpNo5L04M_b9OMsBUur1!NSn zcgaj711A*W#8e~}piZhq18raKVr-)Rjmdbq0V%>o7z}yw$9*~-t%={Y^uvSU89ijL zct|SZMj>80iuydz=_{kMf=FDY=ef2;wF|a*_erL{4JE?ssT7Bb=K|wkF0PV%WP9w} zeTla{aMLC2?I>$W)U-ykq759>j=O{E2p|Eg!U_y!@eu?@WVs`#L3uM{Y%N2-$SkU( z7;WJe-#%G5tO>}?nNc&!A{i0!5i0pS9Om=U4&GXC@aO%0iJj1{!l?hg5Bt7F{P^!> zm4&H$dR&(;dJp%cj3p1A*t{u%a65l#*4fz)GjUyfulwicF4|}$*Jfl0@X>=50Aj$Q zYj11ujvZn^$dSRG&$^~DO#&NP83YVZUa?^qipPcVSe!2Lw_VeLAb^ysL{3 zWuErEk!%>ntg-P-lsS*G%>e?_x6-n`*=}7r5mf=ezm{Pb7H4O|4PLr46RGJY!SiIp z@Al@f?QBSb-c%r~NJlNaF2;_39<03aKez^7ADpO3g>4Y^0i;EE*u6nka?JG4HtU8J ztfSFWLj!z`Ef2YUFU5w^0m&8_5$YYoniuz8mKqu_L3}b3v8N012oI~y)f$z|FeBIe z$Do32XPpW&j>^iA0D8esCCn0A>TN*_Mq|T;UQUx8BPImr%delkaafRcE?fFh(jJF( ze)A1i%S7vLwqHzw4~?RHkYZa%cOEskldeGsNk(q0iD9VoDjjYBF{##;0Su1k zs2$;G^~ge`1DE>I4k_}%w~{(%EFlfUh~x(2NrAqzIeKzP`$oP8UDh>^P4~vko`i1U zTd%#r_uI@IInUdVQz?KXw(x7$MuF7)QD}0ARQ%a;Mz>4dyMXnAtYtLiCa_c zw!SedB0f#Qf;-=-nG=Ss2q@y2J>g!}_pMcxIi0qK*g2iHsZO!(=SVg)cp6hiCeszu zZ&iezF&lDN{G{pf&BvCr=?n}w8s-k#@hKxYxf!F%tjqalHV={juMxuQa!zeqW1sYJ zP}G_ZF%)AwMyv-HG6E!qi@j$eN;UD2jfNO%1nEUMc-d1@`0{!GK=H%%bd6I}lI72L zwrFQMZw{9verjKN_{g6=3E;$JH#@Oyd`C6+rbhf677$5z$ly=vkIKYaY+_0!e4J^^x`Bk3^z6&XBcZj#hS8+(cJjIaZ`<2a9E z;5wUDRfUmmKt=QT_c!v8MRvs&@V{FHSxKFDl*jtSvz^h3`C+}V+0 z=wc3}K>Zda!&y;8V@`8wndaw@7vlq^3_asibtq)ad4_ppcn{B5SHJQ2h|_KPe4x_C zTH@M!f6YjNmE>C{x8&J|@6Y`u``zE)ex>P&@jr=i(WiDH@c#TB0A5yIixh4lW2}Ep zcU15=_9svHfgTn&UI3?r6qKq(fboHm{w#2G`Mkex2yu-UWw!HoHVU@tExDx5|5a{h zLFy8a2_lR>&Y-zCKXwbeS|8IeskiL@_^?DLUn(<6B*N2r)h742ZnY0E!@Dq%N_S>> z@V~zCmmJez5C0QD`p}+ zkXp1S<3IzhYn+aWTm5J&XW?o1fanEoxD3&O^Uz|vdwP<)@eB%Allt^Wd%5V^M%N|2 zfXYwamDkB8#$jH=yJe07*tNmJGcrb zYXCCBIFHq3#NePM=26)Yd&j z91w@P*6=KqKIrtp1o^5EXSB3f9-xMPcKyoxb?+J<3JpD2339(0++)mtwM&&*SXA5p z-5}<&2+Q=r5EAX*FJn1OgDe`O0g4r>-!2~Ielso5o^GIv@q3tq51e75zxf|s;dWsExx864*Za`gh)>oLQqh0BI1k0;(d4z3Dj*rWL z_~Bk$d$%%SJqASZdaQU7!9MfNVY+&(T23?#e@b*V1CG$JjX9CH;NJHQ7ebz=y9{Bj zPC{%x6wI5N=SSr>zd8>FoM&I2QL9&0=&*6^NwLkm|Ds@~0p*HkGn1r?3LfZ>Z)3P6 zu5tbZv(NGMp!V_t%HIs81K{3=0aX5CN)AbU{1Z>k=g)9=k|X78$w>mVs27`JH*W&> z@2&iJemy*mtzoRtIx#b8vNEA-?&y3s$a@w92-DL*wTbI; zLm!2D8BX@%Eg+AEGPsd04)z|!oEL@`Jt3bBKCC=-=C$emY~+7n-RUFc_Ty1IC=B;8 z&3FwnGvm@S!uO50S@6ES9OB87W2t_-sRr0=k*jN%!~jpUdyw_#RxJ{QlL4u2Jj% zOo3KI-5AfzrMEPS?%8S92!IP!{SFmoxou59V@cwI+AYAI+^AOsnCGP0J%gWJ3#^}y zeR#k7t?B5kacRpd%S;L1{pGg-KhN>I9kjXmTYO|4002pc_UIay4e;rne?#rxDRcKg zKd`b&qZT4W򹅒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

-&9c(u8NxgeCCD+uip^STOnmPRmWA-vCZ1 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 diff --git a/WadInstaller/WadInstaller.csproj b/WadInstaller/WadInstaller.csproj deleted file mode 100644 index 77b38ee..0000000 --- a/WadInstaller/WadInstaller.csproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {475F3ADF-B529-449F-89DA-BA5E8BE15DD5} - Library - Properties - WadInstaller - WadInstaller - v2.0 - 512 - - - 3.5 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/WadInstaller_Source/LICENSE.txt b/WadInstaller_Source/LICENSE.txt deleted file mode 100644 index 7e14f38..0000000 --- a/WadInstaller_Source/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. \ No newline at end of file diff --git a/WadInstaller_Source/Makefile b/WadInstaller_Source/Makefile deleted file mode 100644 index 7c18507..0000000 --- a/WadInstaller_Source/Makefile +++ /dev/null @@ -1,139 +0,0 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -#DEVKITPRO = /opt/devkitPPC -#DEVKITPPC = /opt/devkitPPC - -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := WadInstaller -BUILD := build -SOURCES := source source/libpng source/libpng/pngu -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -Os -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lpng -lfat -lwiiuse -lbte -logc -lm -lz - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(CURDIR) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -run: - wiiload $(TARGET).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - diff --git a/WadInstaller_Source/README.Orig.es.txt b/WadInstaller_Source/README.Orig.es.txt deleted file mode 100644 index d2d0dfe..0000000 --- a/WadInstaller_Source/README.Orig.es.txt +++ /dev/null @@ -1,43 +0,0 @@ -+----------------------------+ -| WAD Manager v1.4 | -| developed by Waninkoko | -+----------------------------+ -| www.teknoconsolas.es | -+----------------------------+ - - -[ DISCLAIMER ]: - -- ESTA APLICACION VIENE SIN NINGUNA GARANTIA, EXPLICITA NI IMPLICITA. - NO ME HAGO RESPONSABLE POR CUALQUIER DAÑO EN TU CONSOLA WII DEBIDO A - UN USO NO APROPIADO DE ESTE SOFTWARE. - - -[ DESCRIPCION ]: - -- WAD Manager es una aplicacion que te permite (des)instalar paquetes WAD. - - La aplicacion muestra todos los paquetes WAD disponibles en un - dispositivo de almacenamiento para poder elegir cual (des)instalar. - - -[ DISPOSITIVOS SOPORTADOS ]: - -- SDGecko. -- Puerto SD interno (con soporte SDHC). -- Dispositivo USB (1.1 y 2.0). - - -[ COMO USARLO ]: - -1. Crea un directorio llamado "wad" en la raiz del dispositivo de almacenamiento. -2. Copia todos los paquetes WAD en el directorio creado en el paso 1. -3. Ejecuta la aplicacion con cualquier metodo para cargar homebrew. - - -[ KUDOS ]: - -- Team Twiizers/devkitPRO -- svpe -- kwiirk -- Todos mis betatesters. diff --git a/WadInstaller_Source/README.Orig.txt b/WadInstaller_Source/README.Orig.txt deleted file mode 100644 index a01993a..0000000 --- a/WadInstaller_Source/README.Orig.txt +++ /dev/null @@ -1,44 +0,0 @@ -+----------------------------+ -| WAD Manager v1.4 | -| developed by Waninkoko | -+----------------------------+ -| www.teknoconsolas.es | -+----------------------------+ - - -[ DISCLAIMER ]: - -- THIS APPLICATION COMES WITH NO WARRANTY AT ALL, NEITHER EXPRESS NOR IMPLIED. - I DO NOT TAKE ANY RESPONSIBILITY FOR ANY DAMAGE IN YOUR WII CONSOLE - BECAUSE OF A IMPROPER USAGE OF THIS SOFTWARE. - - -[ DESCRIPTION ]: - -- WAD Manager is an application that allows you to (un)install - WAD packages. - - It lists all the available WAD packages in a storage device - so you can select which one to (un)install. - - -[ SUPPORTED DEVICES ]: - -- SDGecko. -- Internal SD slot (with SDHC support). -- USB device (1.1 and 2.0). - - -[ HOW TO USE ]: - -1. Create a folder called "wad" in the root of the storage device. -2. Copy all the WAD packages in the folder created in the step 1. -3. Run the application with any method to load homebrew. - - -[ KUDOS ]: - -- Team Twiizers/devkitPRO -- svpe -- kwiirk -- All my betatesters. diff --git a/WadInstaller_Source/README.txt b/WadInstaller_Source/README.txt deleted file mode 100644 index 95b296e..0000000 --- a/WadInstaller_Source/README.txt +++ /dev/null @@ -1,4 +0,0 @@ -Modified wad manager used to install wads. - -After compiling, search for text string AAAAAAAAAAAAAAAA in a hex editor -to find where to inject the wad (it should overwrite the A's, not go after them) \ No newline at end of file diff --git a/WadInstaller_Source/data/background b/WadInstaller_Source/data/background deleted file mode 100644 index 22cb7b5f3b47bae646d29dcfb4d29e677be98044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125170 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 \ No newline at end of file diff --git a/WadInstaller_Source/installer.pnps b/WadInstaller_Source/installer.pnps deleted file mode 100644 index c90d2ed..0000000 --- a/WadInstaller_Source/installer.pnps +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/WadInstaller_Source/source/ahbprot.c b/WadInstaller_Source/source/ahbprot.c deleted file mode 100644 index 6aaa52a..0000000 --- a/WadInstaller_Source/source/ahbprot.c +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include -#include -#include -#include - -#include "ahbprot.h" - -#define MEM_PROT 0xD8B420A - - -const u8 identify_check[] = { 0x28, 0x03, 0xD1, 0x23 }; -const u8 identify_patch[] = { 0x00, 0x00 }; -const u8 addticket_vers_check[] = { 0xD2, 0x01, 0x4E, 0x56 }; -const u8 setuid_check[] = { 0xD1, 0x2A, 0x1C, 0x39 }; -const u8 setuid_patch[] = { 0x46, 0xC0 }; -const u8 isfs_perms_check[] = { 0x42, 0x8B, 0xD0, 0x01, 0x25, 0x66 }; -const u8 e0_patch[] = { 0xE0 }; -const u8 es_set_ahbprot_check[] = { 0x68, 0x5B, 0x22, 0xEC, 0x00, 0x52, 0x18, 0x9B, 0x68, 0x1B, 0x46, 0x98, 0x07, 0xDB }; -const u8 es_set_ahbprot_patch[] = { 0x01 }; - -const u32 identify_check_size = sizeof(identify_check); -const u32 identify_patch_size = sizeof(identify_patch); -const u32 addticket_vers_check_size = sizeof(addticket_vers_check); -const u32 setuid_check_size = sizeof(setuid_check); -const u32 setuid_patch_size = sizeof(setuid_patch); -const u32 isfs_perms_check_size = sizeof(isfs_perms_check); -const u32 e0_patch_size = sizeof(e0_patch); -const u32 es_set_ahbprot_check_size = sizeof(es_set_ahbprot_check); -const u32 es_set_ahbprot_patch_size = sizeof(es_set_ahbprot_patch); - -static u8 certs[0xA00] ATTRIBUTE_ALIGN(32); -static const char certs_fs[] ATTRIBUTE_ALIGN(32) = "/sys/cert.sys"; - -const u8 hash_old[] = { 0x20, 0x07, 0x4B, 0x0B }; -const u8 hash_patch[] = { 0x00 }; - -int get_certs(void) { - int fd, ret; - fd = IOS_Open(certs_fs, 1); - ret = IOS_Read(fd, certs, sizeof(certs)); - if (ret < sizeof(certs)) { - ret = -1; - } else { - IOS_Close(fd); - } - return ret; -} - -u32 apply_patch2(const char *name, const u8 *old, u32 old_size, const u8 *patch, u32 patch_size, u32 patch_offset) { - u32 * end = (u32 *) 0x80003134; - u8 *ptr = (u8 *) *end; - u32 i, found = 0; - u8 *start; - - while ((u32) ptr < (0x94000000 - old_size)) { - if (!memcmp(ptr, old, old_size)) { - found++; - start = ptr + patch_offset; - for (i = 0; i < patch_size; i++) { - *(start + i) = patch[i]; - } - ptr += patch_size; - DCFlushRange((u8 *) (((u32) start) >> 5 << 5), (patch_size >> 5 << 5) + 64); - ICInvalidateRange((u8 *)(((u32)start) >> 5 << 5), (patch_size >> 5 << 5) + 64); - break; - } - ptr++; - } - return found; -} - -u32 patchSetAHBPROT() { - u32 count = 0; - write16(MEM_PROT, 0); - count += apply_patch2("Set AHBPROT patch", es_set_ahbprot_check, es_set_ahbprot_check_size, es_set_ahbprot_patch, es_set_ahbprot_patch_size, 25); - write16(MEM_PROT, 1); - return count; -} - -u32 runtimePatchApply() { - u32 count = 0; - write16(MEM_PROT, 0); - count += apply_patch2("New Trucha (may fail)", hash_old, sizeof(hash_old), hash_patch, sizeof(hash_patch), 1); - count += apply_patch2("ES_Identify", identify_check, identify_check_size, identify_patch, identify_patch_size, 2); - count += apply_patch2("NAND Permissions", isfs_perms_check, isfs_perms_check_size, e0_patch, e0_patch_size, 2); - count += apply_patch2("Add ticket patch", addticket_vers_check, addticket_vers_check_size, e0_patch, e0_patch_size, 0); - count += apply_patch2("ES_SetUID", setuid_check, setuid_check_size, setuid_patch, setuid_patch_size, 0); - write16(MEM_PROT, 1); - return count; -} \ No newline at end of file diff --git a/WadInstaller_Source/source/ahbprot.h b/WadInstaller_Source/source/ahbprot.h deleted file mode 100644 index 0e2937f..0000000 --- a/WadInstaller_Source/source/ahbprot.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef _RUNTIMEIOSPATCH_H_ -#define _RUNTIMEIOSPATCH_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define HAVE_AHBPROT ((*(vu32*)0xcd800064 == 0xFFFFFFFF) ? 1 : 0) - - -int get_certs(void); -int check_fakesig(void); - -extern const u8 identify_check[]; -extern const u8 identify_patch[]; -extern const u8 addticket_vers_check[]; -extern const u8 setuid_check[]; -extern const u8 setuid_patch[]; -extern const u8 isfs_perms_check[]; -extern const u8 e0_patch[]; -extern const u8 es_set_ahbprot_check[]; -extern const u8 es_set_ahbprot_patch[]; - -extern const u32 identify_check_size; -extern const u32 identify_patch_size; -extern const u32 addticket_vers_check_size; -extern const u32 setuid_check_size; -extern const u32 setuid_patch_size; -extern const u32 isfs_perms_check_size; -extern const u32 e0_patch_size; -extern const u32 es_set_ahbprot_check_size; -extern const u32 es_set_ahbprot_patch_size; - -u32 patchSetAHBPROT(); -u32 runtimePatchApply(); - -u32 PrintResult(u32 successful); -void ApplyingPatch(const char* which); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/WadInstaller_Source/source/fat.c b/WadInstaller_Source/source/fat.c deleted file mode 100644 index dfafa13..0000000 --- a/WadInstaller_Source/source/fat.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include - -#include "fat.h" - - -s32 Fat_Mount(fatDevice *dev) -{ - s32 ret; - - /* Initialize interface */ - ret = dev->interface->startup(); - if (!ret) - return -1; - - /* Mount device */ - ret = fatMountSimple(dev->mount, dev->interface); - if (!ret) - return -1; - - return 0; -} - -void Fat_Unmount(fatDevice *dev) -{ - /* Unmount device */ - fatUnmount(dev->mount); - - /* Shutdown interface */ - dev->interface->shutdown(); -} - -char *Fat_ToFilename(const char *filename) -{ - static char buffer[128]; - - u32 cnt, idx, len; - - /* Clear buffer */ - memset(buffer, 0, sizeof(buffer)); - - /* Get filename length */ - len = strlen(filename); - - for (cnt = idx = 0; idx < len; idx++) { - char c = filename[idx]; - - /* Valid characters */ - if ( (c >= '#' && c <= ')') || (c >= '-' && c <= '.') || - (c >= '0' && c <= '9') || (c >= 'A' && c <= 'z') || - (c >= 'a' && c <= 'z') || (c == '!') ) - buffer[cnt++] = c; - } - - return buffer; -} diff --git a/WadInstaller_Source/source/fat.h b/WadInstaller_Source/source/fat.h deleted file mode 100644 index 1e5675e..0000000 --- a/WadInstaller_Source/source/fat.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _FAT_H_ -#define _FAT_H_ - -/* libfat header */ -#include -#include - -/* SD headers */ -#include -#include - - -/* 'FAT Device' structure */ -typedef struct { - /* Device mount point */ - char *mount; - - /* Device name */ - char *name; - - /* Device interface */ - const DISC_INTERFACE *interface; -} fatDevice; - -/* 'FAT File' structure */ -typedef struct { - /* Filename */ - char filename[128]; - - /* Filestat */ - struct stat filestat; -} fatFile; - - -/* Prototypes */ -s32 Fat_Mount(fatDevice *); -void Fat_Unmount(fatDevice *); -char *Fat_ToFilename(const char *); - -#endif - diff --git a/WadInstaller_Source/source/gui.c b/WadInstaller_Source/source/gui.c deleted file mode 100644 index f2e0631..0000000 --- a/WadInstaller_Source/source/gui.c +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include - -#include "video.h" - -/* Constants */ -#define CONSOLE_XCOORD 96 -#define CONSOLE_YCOORD 118 -#define CONSOLE_WIDTH 496 -#define CONSOLE_HEIGHT 236 - - -s32 __Gui_DrawPng(void *img, u32 x, u32 y) -{ - IMGCTX ctx = NULL; - PNGUPROP imgProp; - - s32 ret; - - /* Select PNG data */ - ctx = PNGU_SelectImageFromBuffer(img); - if (!ctx) { - ret = -1; - goto out; - } - - /* Get image properties */ - ret = PNGU_GetImageProperties(ctx, &imgProp); - if (ret != PNGU_OK) { - ret = -1; - goto out; - } - - /* Draw image */ - Video_DrawPng(ctx, imgProp, x, y); - - /* Success */ - ret = 0; - -out: - /* Free memory */ - if (ctx) - PNGU_ReleaseImageContext(ctx); - - return ret; -} - - -void Gui_InitConsole(void) -{ - /* Initialize console */ - Con_Init(CONSOLE_XCOORD, CONSOLE_YCOORD, CONSOLE_WIDTH, CONSOLE_HEIGHT); -} - -void Gui_DrawBackground(void) -{ - extern char bgData[]; - - /* Draw background */ - __Gui_DrawPng(bgData, 0, 0); -} diff --git a/WadInstaller_Source/source/gui.h b/WadInstaller_Source/source/gui.h deleted file mode 100644 index 80f174c..0000000 --- a/WadInstaller_Source/source/gui.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _GUI_H_ -#define _GUI_H_ - -/* Prototypes */ -void Gui_InitConsole(void); -void Gui_DrawBackground(void); - -#endif diff --git a/WadInstaller_Source/source/install.c b/WadInstaller_Source/source/install.c deleted file mode 100644 index bcd1d72..0000000 --- a/WadInstaller_Source/source/install.c +++ /dev/null @@ -1,2 +0,0 @@ -const unsigned char install[8<<20] = {0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0}; -const int install_size = sizeof(install); \ No newline at end of file diff --git a/WadInstaller_Source/source/install.h b/WadInstaller_Source/source/install.h deleted file mode 100644 index 3c1be35..0000000 --- a/WadInstaller_Source/source/install.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - This file was autogenerated by raw2c. -Visit http://www.devkitpro.org -*/ - -//--------------------------------------------------------------------------------- -#ifndef _install_h_ -#define _install_h_ -//--------------------------------------------------------------------------------- -extern const unsigned char install[]; -extern const int install_size; -//--------------------------------------------------------------------------------- -#endif //_install_h_ -//--------------------------------------------------------------------------------- diff --git a/WadInstaller_Source/source/libpng/png.h b/WadInstaller_Source/source/libpng/png.h deleted file mode 100644 index e0cec0c..0000000 --- a/WadInstaller_Source/source/libpng/png.h +++ /dev/null @@ -1,3569 +0,0 @@ -/* png.h - header file for PNG reference library - * - * libpng version 1.2.29 - May 8, 2008 - * Copyright (c) 1998-2008 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * Authors and maintainers: - * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat - * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.2.29 - May 8, 2008: Glenn - * See also "Contributing Authors", below. - * - * Note about libpng version numbers: - * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: - * - * source png.h png.h shared-lib - * version string int version - * ------- ------ ----- ---------- - * 0.89c "1.0 beta 3" 0.89 89 1.0.89 - * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] - * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] - * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] - * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] - * 0.97c 0.97 97 2.0.97 - * 0.98 0.98 98 2.0.98 - * 0.99 0.99 98 2.0.99 - * 0.99a-m 0.99 99 2.0.99 - * 1.00 1.00 100 2.1.0 [100 should be 10000] - * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] - * 1.0.1 png.h string is 10001 2.1.0 - * 1.0.1a-e identical to the 10002 from here on, the shared library - * 1.0.2 source version) 10002 is 2.V where V is the source code - * 1.0.2a-b 10003 version, except as noted. - * 1.0.3 10003 - * 1.0.3a-d 10004 - * 1.0.4 10004 - * 1.0.4a-f 10005 - * 1.0.5 (+ 2 patches) 10005 - * 1.0.5a-d 10006 - * 1.0.5e-r 10100 (not source compatible) - * 1.0.5s-v 10006 (not binary compatible) - * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) - * 1.0.6d-f 10007 (still binary incompatible) - * 1.0.6g 10007 - * 1.0.6h 10007 10.6h (testing xy.z so-numbering) - * 1.0.6i 10007 10.6i - * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) - * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) - * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) - * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) - * 1.0.7 1 10007 (still compatible) - * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 - * 1.0.8rc1 1 10008 2.1.0.8rc1 - * 1.0.8 1 10008 2.1.0.8 - * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 - * 1.0.9rc1 1 10009 2.1.0.9rc1 - * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 - * 1.0.9rc2 1 10009 2.1.0.9rc2 - * 1.0.9 1 10009 2.1.0.9 - * 1.0.10beta1 1 10010 2.1.0.10beta1 - * 1.0.10rc1 1 10010 2.1.0.10rc1 - * 1.0.10 1 10010 2.1.0.10 - * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 - * 1.0.11rc1 1 10011 2.1.0.11rc1 - * 1.0.11 1 10011 2.1.0.11 - * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 - * 1.0.12rc1 2 10012 2.1.0.12rc1 - * 1.0.12 2 10012 2.1.0.12 - * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) - * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 - * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 - * 1.2.0rc1 3 10200 3.1.2.0rc1 - * 1.2.0 3 10200 3.1.2.0 - * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 - * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 - * 1.2.1 3 10201 3.1.2.1 - * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 - * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 - * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 - * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 - * 1.0.13 10 10013 10.so.0.1.0.13 - * 1.2.2 12 10202 12.so.0.1.2.2 - * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 - * 1.2.3 12 10203 12.so.0.1.2.3 - * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 - * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 - * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 - * 1.0.14 10 10014 10.so.0.1.0.14 - * 1.2.4 13 10204 12.so.0.1.2.4 - * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 - * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 - * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 - * 1.0.15 10 10015 10.so.0.1.0.15 - * 1.2.5 13 10205 12.so.0.1.2.5 - * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 - * 1.0.16 10 10016 10.so.0.1.0.16 - * 1.2.6 13 10206 12.so.0.1.2.6 - * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 - * 1.0.17rc1 10 10017 10.so.0.1.0.17rc1 - * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 - * 1.0.17 10 10017 10.so.0.1.0.17 - * 1.2.7 13 10207 12.so.0.1.2.7 - * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 - * 1.0.18rc1-5 10 10018 10.so.0.1.0.18rc1-5 - * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 - * 1.0.18 10 10018 10.so.0.1.0.18 - * 1.2.8 13 10208 12.so.0.1.2.8 - * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3 - * 1.2.9beta4-11 13 10209 12.so.0.9[.0] - * 1.2.9rc1 13 10209 12.so.0.9[.0] - * 1.2.9 13 10209 12.so.0.9[.0] - * 1.2.10beta1-8 13 10210 12.so.0.10[.0] - * 1.2.10rc1-3 13 10210 12.so.0.10[.0] - * 1.2.10 13 10210 12.so.0.10[.0] - * 1.2.11beta1-4 13 10211 12.so.0.11[.0] - * 1.0.19rc1-5 10 10019 10.so.0.19[.0] - * 1.2.11rc1-5 13 10211 12.so.0.11[.0] - * 1.0.19 10 10019 10.so.0.19[.0] - * 1.2.11 13 10211 12.so.0.11[.0] - * 1.0.20 10 10020 10.so.0.20[.0] - * 1.2.12 13 10212 12.so.0.12[.0] - * 1.2.13beta1 13 10213 12.so.0.13[.0] - * 1.0.21 10 10021 10.so.0.21[.0] - * 1.2.13 13 10213 12.so.0.13[.0] - * 1.2.14beta1-2 13 10214 12.so.0.14[.0] - * 1.0.22rc1 10 10022 10.so.0.22[.0] - * 1.2.14rc1 13 10214 12.so.0.14[.0] - * 1.0.22 10 10022 10.so.0.22[.0] - * 1.2.14 13 10214 12.so.0.14[.0] - * 1.2.15beta1-6 13 10215 12.so.0.15[.0] - * 1.0.23rc1-5 10 10023 10.so.0.23[.0] - * 1.2.15rc1-5 13 10215 12.so.0.15[.0] - * 1.0.23 10 10023 10.so.0.23[.0] - * 1.2.15 13 10215 12.so.0.15[.0] - * 1.2.16beta1-2 13 10216 12.so.0.16[.0] - * 1.2.16rc1 13 10216 12.so.0.16[.0] - * 1.0.24 10 10024 10.so.0.24[.0] - * 1.2.16 13 10216 12.so.0.16[.0] - * 1.2.17beta1-2 13 10217 12.so.0.17[.0] - * 1.0.25rc1 10 10025 10.so.0.25[.0] - * 1.2.17rc1-3 13 10217 12.so.0.17[.0] - * 1.0.25 10 10025 10.so.0.25[.0] - * 1.2.17 13 10217 12.so.0.17[.0] - * 1.0.26 10 10026 10.so.0.26[.0] - * 1.2.18 13 10218 12.so.0.18[.0] - * 1.2.19beta1-31 13 10219 12.so.0.19[.0] - * 1.0.27rc1-6 10 10027 10.so.0.27[.0] - * 1.2.19rc1-6 13 10219 12.so.0.19[.0] - * 1.0.27 10 10027 10.so.0.27[.0] - * 1.2.19 13 10219 12.so.0.19[.0] - * 1.2.20beta01-04 13 10220 12.so.0.20[.0] - * 1.0.28rc1-6 10 10028 10.so.0.28[.0] - * 1.2.20rc1-6 13 10220 12.so.0.20[.0] - * 1.0.28 10 10028 10.so.0.28[.0] - * 1.2.20 13 10220 12.so.0.20[.0] - * 1.2.21beta1-2 13 10221 12.so.0.21[.0] - * 1.2.21rc1-3 13 10221 12.so.0.21[.0] - * 1.0.29 10 10029 10.so.0.29[.0] - * 1.2.21 13 10221 12.so.0.21[.0] - * 1.2.22beta1-4 13 10222 12.so.0.22[.0] - * 1.0.30rc1 10 10030 10.so.0.30[.0] - * 1.2.22rc1 13 10222 12.so.0.22[.0] - * 1.0.30 10 10030 10.so.0.30[.0] - * 1.2.22 13 10222 12.so.0.22[.0] - * 1.2.23beta01-05 13 10223 12.so.0.23[.0] - * 1.2.23rc01 13 10223 12.so.0.23[.0] - * 1.2.23 13 10223 12.so.0.23[.0] - * 1.2.24beta01-02 13 10224 12.so.0.24[.0] - * 1.2.24rc01 13 10224 12.so.0.24[.0] - * 1.2.24 13 10224 12.so.0.24[.0] - * 1.2.25beta01-06 13 10225 12.so.0.25[.0] - * 1.2.25rc01-02 13 10225 12.so.0.25[.0] - * 1.0.31 10 10031 10.so.0.31[.0] - * 1.2.25 13 10225 12.so.0.25[.0] - * 1.2.26beta01-06 13 10226 12.so.0.26[.0] - * 1.2.26rc01 13 10226 12.so.0.26[.0] - * 1.2.26 13 10226 12.so.0.26[.0] - * 1.0.32 10 10032 10.so.0.32[.0] - * 1.2.27beta01-06 13 10227 12.so.0.27[.0] - * 1.2.27rc01 13 10227 12.so.0.27[.0] - * 1.0.33 10 10033 10.so.0.33[.0] - * 1.2.27 13 10227 12.so.0.27[.0] - * 1.0.34 10 10034 10.so.0.34[.0] - * 1.2.28 13 10228 12.so.0.28[.0] - * 1.2.29beta01-03 13 10229 12.so.0.29[.0] - * 1.2.29rc01 13 10229 12.so.0.29[.0] - * 1.0.35 10 10035 10.so.0.35[.0] - * 1.2.29 13 10229 12.so.0.29[.0] - * - * Henceforth the source version will match the shared-library major - * and minor numbers; the shared-library major version number will be - * used for changes in backward compatibility, as it is intended. The - * PNG_LIBPNG_VER macro, which is not used within libpng but is available - * for applications, is an unsigned integer of the form xyyzz corresponding - * to the source version x.y.z (leading zeros in y and z). Beta versions - * were given the previous public release number plus a letter, until - * version 1.0.6j; from then on they were given the upcoming public - * release number plus "betaNN" or "rcNN". - * - * Binary incompatibility exists only when applications make direct access - * to the info_ptr or png_ptr members through png.h, and the compiled - * application is loaded with a different version of the library. - * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). - * - * See libpng.txt or libpng.3 for more information. The PNG specification - * is available as a W3C Recommendation and as an ISO Specification, - * defines should NOT be changed. - */ -#define PNG_INFO_gAMA 0x0001 -#define PNG_INFO_sBIT 0x0002 -#define PNG_INFO_cHRM 0x0004 -#define PNG_INFO_PLTE 0x0008 -#define PNG_INFO_tRNS 0x0010 -#define PNG_INFO_bKGD 0x0020 -#define PNG_INFO_hIST 0x0040 -#define PNG_INFO_pHYs 0x0080 -#define PNG_INFO_oFFs 0x0100 -#define PNG_INFO_tIME 0x0200 -#define PNG_INFO_pCAL 0x0400 -#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ -#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ -#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ -#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ -#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ - -/* This is used for the transformation routines, as some of them - * change these values for the row. It also should enable using - * the routines for other purposes. - */ -typedef struct png_row_info_struct -{ - png_uint_32 width; /* width of row */ - png_uint_32 rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ - png_byte pixel_depth; /* bits per pixel (depth * channels) */ -} png_row_info; - -typedef png_row_info FAR * png_row_infop; -typedef png_row_info FAR * FAR * png_row_infopp; - -/* These are the function types for the I/O functions and for the functions - * that allow the user to override the default I/O functions with his or her - * own. The png_error_ptr type should match that of user-supplied warning - * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. - */ -typedef struct png_struct_def png_struct; -typedef png_struct FAR * png_structp; - -typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); -typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); -typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); -typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, - int)); -typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, - int)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); -typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); -typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, - png_uint_32, int)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, - png_row_infop, png_bytep)); -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) -typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); -#endif -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); -#endif - -/* Transform masks for the high-level interface */ -#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ -#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ -#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ -#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ -#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ -#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ -#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ -#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ -#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ -#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ -#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ -#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ -#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ - -/* Flags for MNG supported features */ -#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 -#define PNG_FLAG_MNG_FILTER_64 0x04 -#define PNG_ALL_MNG_FEATURES 0x05 - -typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); -typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); - -/* The structure that holds the information to read and write PNG files. - * The only people who need to care about what is inside of this are the - * people who will be modifying the library for their own special needs. - * It should NOT be accessed directly by an application, except to store - * the jmp_buf. - */ - -struct png_struct_def -{ -#ifdef PNG_SETJMP_SUPPORTED - jmp_buf jmpbuf; /* used in png_error */ -#endif - png_error_ptr error_fn; /* function for printing errors and aborting */ - png_error_ptr warning_fn; /* function for printing warnings */ - png_voidp error_ptr; /* user supplied struct for error functions */ - png_rw_ptr write_data_fn; /* function for writing output data */ - png_rw_ptr read_data_fn; /* function for reading input data */ - png_voidp io_ptr; /* ptr to application struct for I/O functions */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) - png_user_transform_ptr read_user_transform_fn; /* user read transform */ -#endif - -#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) - png_user_transform_ptr write_user_transform_fn; /* user write transform */ -#endif - -/* These were added in libpng-1.0.2 */ -#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) - png_voidp user_transform_ptr; /* user supplied struct for user transform */ - png_byte user_transform_depth; /* bit depth of user transformed pixels */ - png_byte user_transform_channels; /* channels in user transformed pixels */ -#endif -#endif - - png_uint_32 mode; /* tells us where we are in the PNG file */ - png_uint_32 flags; /* flags indicating various things to libpng */ - png_uint_32 transformations; /* which transformations to perform */ - - z_stream zstream; /* pointer to decompression structure (below) */ - png_bytep zbuf; /* buffer for zlib */ - png_size_t zbuf_size; /* size of zbuf */ - int zlib_level; /* holds zlib compression level */ - int zlib_method; /* holds zlib compression method */ - int zlib_window_bits; /* holds zlib compression window bits */ - int zlib_mem_level; /* holds zlib compression memory level */ - int zlib_strategy; /* holds zlib compression strategy */ - - png_uint_32 width; /* width of image in pixels */ - png_uint_32 height; /* height of image in pixels */ - png_uint_32 num_rows; /* number of rows in current pass */ - png_uint_32 usr_width; /* width of row at start of write */ - png_uint_32 rowbytes; /* size of row in bytes */ - png_uint_32 irowbytes; /* size of current interlaced row in bytes */ - png_uint_32 iwidth; /* width of current interlaced row in pixels */ - png_uint_32 row_number; /* current row in interlace pass */ - png_bytep prev_row; /* buffer to save previous (unfiltered) row */ - png_bytep row_buf; /* buffer to save current (unfiltered) row */ -#ifndef PNG_NO_WRITE_FILTERING - png_bytep sub_row; /* buffer to save "sub" row when filtering */ - png_bytep up_row; /* buffer to save "up" row when filtering */ - png_bytep avg_row; /* buffer to save "avg" row when filtering */ - png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ -#endif - png_row_info row_info; /* used for transformation routines */ - - png_uint_32 idat_size; /* current IDAT size for read */ - png_uint_32 crc; /* current chunk CRC value */ - png_colorp palette; /* palette from the input file */ - png_uint_16 num_palette; /* number of color entries in palette */ - png_uint_16 num_trans; /* number of transparency values */ - png_byte chunk_name[5]; /* null-terminated name of current chunk */ - png_byte compression; /* file compression type (always 0) */ - png_byte filter; /* file filter type (always 0) */ - png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ - png_byte pass; /* current interlace pass (0 - 6) */ - png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ - png_byte color_type; /* color type of file */ - png_byte bit_depth; /* bit depth of file */ - png_byte usr_bit_depth; /* bit depth of users row */ - png_byte pixel_depth; /* number of bits per pixel */ - png_byte channels; /* number of channels in file */ - png_byte usr_channels; /* channels at start of write */ - png_byte sig_bytes; /* magic bytes read/written from start of file */ - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -#ifdef PNG_LEGACY_SUPPORTED - png_byte filler; /* filler byte for pixel expansion */ -#else - png_uint_16 filler; /* filler bytes for pixel expansion */ -#endif -#endif - -#if defined(PNG_bKGD_SUPPORTED) - png_byte background_gamma_type; -# ifdef PNG_FLOATING_POINT_SUPPORTED - float background_gamma; -# endif - png_color_16 background; /* background color in screen gamma space */ -#if defined(PNG_READ_GAMMA_SUPPORTED) - png_color_16 background_1; /* background normalized to gamma 1.0 */ -#endif -#endif /* PNG_bKGD_SUPPORTED */ - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) - png_flush_ptr output_flush_fn;/* Function for flushing output */ - png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ - png_uint_32 flush_rows; /* number of rows written since last flush */ -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ -#ifdef PNG_FLOATING_POINT_SUPPORTED - float gamma; /* file gamma value */ - float screen_gamma; /* screen gamma value (display_exponent) */ -#endif -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_bytep gamma_table; /* gamma table for 8-bit depth files */ - png_bytep gamma_from_1; /* converts from 1.0 to screen */ - png_bytep gamma_to_1; /* converts from file to 1.0 */ - png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ - png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ - png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) - png_color_8 sig_bit; /* significant bits in each available channel */ -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) - png_color_8 shift; /* shift for significant bit tranformation */ -#endif - -#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ - || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_bytep trans; /* transparency values for paletted files */ - png_color_16 trans_values; /* transparency values for non-paletted files */ -#endif - - png_read_status_ptr read_row_fn; /* called after each row is decoded */ - png_write_status_ptr write_row_fn; /* called after each row is encoded */ -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED - png_progressive_info_ptr info_fn; /* called after header data fully read */ - png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ - png_progressive_end_ptr end_fn; /* called after image is complete */ - png_bytep save_buffer_ptr; /* current location in save_buffer */ - png_bytep save_buffer; /* buffer for previously read data */ - png_bytep current_buffer_ptr; /* current location in current_buffer */ - png_bytep current_buffer; /* buffer for recently used data */ - png_uint_32 push_length; /* size of current input chunk */ - png_uint_32 skip_length; /* bytes to skip in input data */ - png_size_t save_buffer_size; /* amount of data now in save_buffer */ - png_size_t save_buffer_max; /* total size of save_buffer */ - png_size_t buffer_size; /* total amount of available input data */ - png_size_t current_buffer_size; /* amount of data now in current_buffer */ - int process_mode; /* what push library is currently doing */ - int cur_palette; /* current push library palette index */ - -# if defined(PNG_TEXT_SUPPORTED) - png_size_t current_text_size; /* current size of text input data */ - png_size_t current_text_left; /* how much text left to read in input */ - png_charp current_text; /* current text chunk buffer */ - png_charp current_text_ptr; /* current location in current_text */ -# endif /* PNG_TEXT_SUPPORTED */ -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) -/* for the Borland special 64K segment handler */ - png_bytepp offset_table_ptr; - png_bytep offset_table; - png_uint_16 offset_table_number; - png_uint_16 offset_table_count; - png_uint_16 offset_table_count_free; -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) - png_bytep palette_lookup; /* lookup table for dithering */ - png_bytep dither_index; /* index translation for palette files */ -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) - png_uint_16p hist; /* histogram */ -#endif - -#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) - png_byte heuristic_method; /* heuristic for row filter selection */ - png_byte num_prev_filters; /* number of weights for previous rows */ - png_bytep prev_filters; /* filter type(s) of previous row(s) */ - png_uint_16p filter_weights; /* weight(s) for previous line(s) */ - png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ - png_uint_16p filter_costs; /* relative filter calculation cost */ - png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ -#endif - -#if defined(PNG_TIME_RFC1123_SUPPORTED) - png_charp time_buffer; /* String to hold RFC 1123 time text */ -#endif - -/* New members added in libpng-1.0.6 */ - -#ifdef PNG_FREE_ME_SUPPORTED - png_uint_32 free_me; /* flags items libpng is responsible for freeing */ -#endif - -#if defined(PNG_USER_CHUNKS_SUPPORTED) - png_voidp user_chunk_ptr; - png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ -#endif - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - int num_chunk_list; - png_bytep chunk_list; -#endif - -/* New members added in libpng-1.0.3 */ -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) - png_byte rgb_to_gray_status; - /* These were changed from png_byte in libpng-1.0.6 */ - png_uint_16 rgb_to_gray_red_coeff; - png_uint_16 rgb_to_gray_green_coeff; - png_uint_16 rgb_to_gray_blue_coeff; -#endif - -/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ - defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* changed from png_byte to png_uint_32 at version 1.2.0 */ -#ifdef PNG_1_0_X - png_byte mng_features_permitted; -#else - png_uint_32 mng_features_permitted; -#endif /* PNG_1_0_X */ -#endif - -/* New member added in libpng-1.0.7 */ -#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) - png_fixed_point int_gamma; -#endif - -/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ -#if defined(PNG_MNG_FEATURES_SUPPORTED) - png_byte filter_type; -#endif - -#if defined(PNG_1_0_X) -/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ - png_uint_32 row_buf_size; -#endif - -/* New members added in libpng-1.2.0 */ -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -# if !defined(PNG_1_0_X) -# if defined(PNG_MMX_CODE_SUPPORTED) - png_byte mmx_bitdepth_threshold; - png_uint_32 mmx_rowbytes_threshold; -# endif - png_uint_32 asm_flags; -# endif -#endif - -/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ -#ifdef PNG_USER_MEM_SUPPORTED - png_voidp mem_ptr; /* user supplied struct for mem functions */ - png_malloc_ptr malloc_fn; /* function for allocating memory */ - png_free_ptr free_fn; /* function for freeing memory */ -#endif - -/* New member added in libpng-1.0.13 and 1.2.0 */ - png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ - -#if defined(PNG_READ_DITHER_SUPPORTED) -/* The following three members were added at version 1.0.14 and 1.2.4 */ - png_bytep dither_sort; /* working sort array */ - png_bytep index_to_palette; /* where the original index currently is */ - /* in the palette */ - png_bytep palette_to_index; /* which original index points to this */ - /* palette color */ -#endif - -/* New members added in libpng-1.0.16 and 1.2.6 */ - png_byte compression_type; - -#ifdef PNG_SET_USER_LIMITS_SUPPORTED - png_uint_32 user_width_max; - png_uint_32 user_height_max; -#endif - -/* New member added in libpng-1.0.25 and 1.2.17 */ -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) - /* storage for unknown chunk that the library doesn't recognize. */ - png_unknown_chunk unknown_chunk; -#endif - -/* New members added in libpng-1.2.26 */ - png_uint_32 old_big_row_buf_size, old_prev_row_size; -}; - - -/* This triggers a compiler error in png.c, if png.c and png.h - * do not agree upon the version number. - */ -typedef png_structp version_1_2_29; - -typedef png_struct FAR * FAR * png_structpp; - -/* Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng.txt for the - * full explanation, see example.c for the summary. This just provides - * a simple one line description of the use of each function. - */ - -/* Returns the version number of the library */ -extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); - -/* Tell lib we have already handled the first magic bytes. - * Handling more than 8 bytes from the beginning of the file is an error. - */ -extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, - int num_bytes)); - -/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a - * PNG file. Returns zero if the supplied bytes match the 8-byte PNG - * signature, and non-zero otherwise. Having num_to_check == 0 or - * start > 7 will always fail (ie return non-zero). - */ -extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, - png_size_t num_to_check)); - -/* Simple signature checking function. This is the same as calling - * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). - */ -extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); - -/* Allocate and initialize png_ptr struct for reading, and any other memory. */ -extern PNG_EXPORT(png_structp,png_create_read_struct) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn)); - -/* Allocate and initialize png_ptr struct for writing, and any other memory */ -extern PNG_EXPORT(png_structp,png_create_write_struct) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn)); - -#ifdef PNG_WRITE_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) - PNGARG((png_structp png_ptr)); -#endif - -#ifdef PNG_WRITE_SUPPORTED -extern PNG_EXPORT(void,png_set_compression_buffer_size) - PNGARG((png_structp png_ptr, png_uint_32 size)); -#endif - -/* Reset the compression stream */ -extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); - -/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ -#ifdef PNG_USER_MEM_SUPPORTED -extern PNG_EXPORT(png_structp,png_create_read_struct_2) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -extern PNG_EXPORT(png_structp,png_create_write_struct_2) - PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -#endif - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_bytep data, png_size_t length)); - -/* Write the start of a PNG chunk - length and chunk name. */ -extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, - png_bytep chunk_name, png_uint_32 length)); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); - -/* Allocate and initialize the info structure */ -extern PNG_EXPORT(png_infop,png_create_info_struct) - PNGARG((png_structp png_ptr)); - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize the info structure (old interface - DEPRECATED) */ -extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); -#undef png_info_init -#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ - png_sizeof(png_info)); -#endif - -extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, - png_size_t png_info_struct_size)); - -/* Writes all the PNG information before the image. */ -extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr)); -extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the information before the actual image data. */ -extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif - -#if defined(PNG_TIME_RFC1123_SUPPORTED) -extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) - PNGARG((png_structp png_ptr, png_timep ptime)); -#endif - -#if !defined(_WIN32_WCE) -/* "time.h" functions are not supported on WindowsCE */ -#if defined(PNG_WRITE_tIME_SUPPORTED) -/* convert from a struct tm to png_time */ -extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, - struct tm FAR * ttime)); - -/* convert from time_t to png_time. Uses gmtime() */ -extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, - time_t ttime)); -#endif /* PNG_WRITE_tIME_SUPPORTED */ -#endif /* _WIN32_WCE */ - -#if defined(PNG_READ_EXPAND_SUPPORTED) -/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); -#if !defined(PNG_1_0_X) -extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp - png_ptr)); -#endif -extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated */ -extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); -#endif -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* Use blue, green, red order for pixels. */ -extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -/* Expand the grayscale to 24-bit RGB if necessary. */ -extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -/* Reduce RGB to grayscale. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, - int error_action, double red, double green )); -#endif -extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green )); -extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp - png_ptr)); -#endif - -extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, - png_colorp palette)); - -#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ -extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, - png_uint_32 filler, int flags)); -/* The values of the PNG_FILLER_ defines should NOT be changed */ -#define PNG_FILLER_BEFORE 0 -#define PNG_FILLER_AFTER 1 -/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ -#if !defined(PNG_1_0_X) -extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, - png_uint_32 filler, int flags)); -#endif -#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* Swap bytes in 16-bit depth files. */ -extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) -/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) -/* Swap packing order of pixels in bytes. */ -extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -/* Converts files to legal bit depths. */ -extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, - png_color_8p true_bits)); -#endif - -#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ - defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* Have the code handle the interlacing. Returns the number of passes. */ -extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -/* Invert monochrome files */ -extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -/* Handle alpha and tRNS by replacing with a background color. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, - png_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)); -#endif -#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 -#define PNG_BACKGROUND_GAMMA_SCREEN 1 -#define PNG_BACKGROUND_GAMMA_FILE 2 -#define PNG_BACKGROUND_GAMMA_UNIQUE 3 -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -/* strip the second byte of information from a 16-bit depth file. */ -extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -/* Turn on dithering, and reduce the palette to the number of colors available. */ -extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette, int maximum_colors, - png_uint_16p histogram, int full_dither)); -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -/* Handle gamma correction. Screen_gamma=(display_exponent) */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, - double screen_gamma, double default_file_gamma)); -#endif -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ - defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) -/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ -/* Deprecated and will be removed. Use png_permit_mng_features() instead. */ -extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, - int empty_plte_permitted)); -#endif -#endif - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -/* Set how many lines between output flushes - 0 for no flushing */ -extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); -/* Flush the current PNG output buffer */ -extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); -#endif - -/* optional update palette with requested transformations */ -extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); - -/* optional call to update the users info structure */ -extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read one or more rows of image data. */ -extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); -#endif - -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read a row of data. */ -extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, - png_bytep row, - png_bytep display_row)); -#endif - -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the whole image into memory at once. */ -extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, - png_bytepp image)); -#endif - -/* write a row of image data */ -extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, - png_bytep row)); - -/* write a few rows of image data */ -extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, - png_bytepp row, png_uint_32 num_rows)); - -/* write the image data */ -extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, - png_bytepp image)); - -/* writes the end of the PNG file. */ -extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED -/* read the end of the PNG file. */ -extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif - -/* free any memory associated with the png_info_struct */ -extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, - png_infopp info_ptr_ptr)); - -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp - png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); - -/* free all memory used by the read (old method - NOT DLL EXPORTED) */ -extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, - png_infop end_info_ptr)); - -/* free any memory associated with the png_struct and the png_info_structs */ -extern PNG_EXPORT(void,png_destroy_write_struct) - PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); - -/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ -extern void png_write_destroy PNGARG((png_structp png_ptr)); - -/* set the libpng method of handling chunk CRC errors */ -extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, - int crit_action, int ancil_action)); - -/* Values for png_set_crc_action() to say how to handle CRC errors in - * ancillary and critical chunks, and whether to use the data contained - * therein. Note that it is impossible to "discard" data in a critical - * chunk. For versions prior to 0.90, the action was always error/quit, - * whereas in version 0.90 and later, the action for CRC errors in ancillary - * chunks is warn/discard. These values should NOT be changed. - * - * value action:critical action:ancillary - */ -#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ -#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ -#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ -#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ -#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ -#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ - -/* These functions give the user control over the scan-line filtering in - * libpng and the compression methods used by zlib. These functions are - * mainly useful for testing, as the defaults should work with most users. - * Those users who are tight on memory or want faster performance at the - * expense of compression can modify them. See the compression library - * header file (zlib.h) for an explination of the compression functions. - */ - -/* set the filtering method(s) used by libpng. Currently, the only valid - * value for "method" is 0. - */ -extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, - int filters)); - -/* Flags for png_set_filter() to say which filters to use. The flags - * are chosen so that they don't conflict with real filter types - * below, in case they are supplied instead of the #defined constants. - * These values should NOT be changed. - */ -#define PNG_NO_FILTERS 0x00 -#define PNG_FILTER_NONE 0x08 -#define PNG_FILTER_SUB 0x10 -#define PNG_FILTER_UP 0x20 -#define PNG_FILTER_AVG 0x40 -#define PNG_FILTER_PAETH 0x80 -#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ - PNG_FILTER_AVG | PNG_FILTER_PAETH) - -/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. - * These defines should NOT be changed. - */ -#define PNG_FILTER_VALUE_NONE 0 -#define PNG_FILTER_VALUE_SUB 1 -#define PNG_FILTER_VALUE_UP 2 -#define PNG_FILTER_VALUE_AVG 3 -#define PNG_FILTER_VALUE_PAETH 4 -#define PNG_FILTER_VALUE_LAST 5 - -#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ -/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ - * defines, either the default (minimum-sum-of-absolute-differences), or - * the experimental method (weighted-minimum-sum-of-absolute-differences). - * - * Weights are factors >= 1.0, indicating how important it is to keep the - * filter type consistent between rows. Larger numbers mean the current - * filter is that many times as likely to be the same as the "num_weights" - * previous filters. This is cumulative for each previous row with a weight. - * There needs to be "num_weights" values in "filter_weights", or it can be - * NULL if the weights aren't being specified. Weights have no influence on - * the selection of the first row filter. Well chosen weights can (in theory) - * improve the compression for a given image. - * - * Costs are factors >= 1.0 indicating the relative decoding costs of a - * filter type. Higher costs indicate more decoding expense, and are - * therefore less likely to be selected over a filter with lower computational - * costs. There needs to be a value in "filter_costs" for each valid filter - * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't - * setting the costs. Costs try to improve the speed of decompression without - * unduly increasing the compressed image size. - * - * A negative weight or cost indicates the default value is to be used, and - * values in the range [0.0, 1.0) indicate the value is to remain unchanged. - * The default values for both weights and costs are currently 1.0, but may - * change if good general weighting/cost heuristics can be found. If both - * the weights and costs are set to 1.0, this degenerates the WEIGHTED method - * to the UNWEIGHTED method, but with added encoding time/computation. - */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, - int heuristic_method, int num_weights, png_doublep filter_weights, - png_doublep filter_costs)); -#endif -#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ - -/* Heuristic used for row filter selection. These defines should NOT be - * changed. - */ -#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ -#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ -#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ -#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ - -/* Set the library compression level. Currently, valid values range from - * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 - * (0 - no compression, 9 - "maximal" compression). Note that tests have - * shown that zlib compression levels 3-6 usually perform as well as level 9 - * for PNG images, and do considerably fewer caclulations. In the future, - * these values may not correspond directly to the zlib compression levels. - */ -extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, - int level)); - -extern PNG_EXPORT(void,png_set_compression_mem_level) - PNGARG((png_structp png_ptr, int mem_level)); - -extern PNG_EXPORT(void,png_set_compression_strategy) - PNGARG((png_structp png_ptr, int strategy)); - -extern PNG_EXPORT(void,png_set_compression_window_bits) - PNGARG((png_structp png_ptr, int window_bits)); - -extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, - int method)); - -/* These next functions are called for input/output, memory, and error - * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, - * and call standard C I/O routines such as fread(), fwrite(), and - * fprintf(). These functions can be made to use other I/O routines - * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng.txt for - * more information. - */ - -#if !defined(PNG_NO_STDIO) -/* Initialize the input/output for the PNG file to the default functions. */ -extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); -#endif - -/* Replace the (error and abort), and warning functions with user - * supplied functions. If no messages are to be printed you must still - * write and use replacement functions. The replacement error_fn should - * still do a longjmp to the last setjmp location if you are using this - * method of error handling. If error_fn or warning_fn is NULL, the - * default function will be used. - */ - -extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, - png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); - -/* Return the user pointer associated with the error functions */ -extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); - -/* Replace the default data output functions with a user supplied one(s). - * If buffered output is not used, then output_flush_fn can be set to NULL. - * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time - * output_flush_fn will be ignored (and thus can be NULL). - */ -extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); - -/* Replace the default data input function with a user supplied one. */ -extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, - png_voidp io_ptr, png_rw_ptr read_data_fn)); - -/* Return the user pointer associated with the I/O functions */ -extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); - -extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, - png_read_status_ptr read_row_fn)); - -extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, - png_write_status_ptr write_row_fn)); - -#ifdef PNG_USER_MEM_SUPPORTED -/* Replace the default memory allocation functions with user supplied one(s). */ -extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -/* Return the user pointer associated with the memory functions */ -extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr read_user_transform_fn)); -#endif - -#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp - png_ptr, png_user_transform_ptr write_user_transform_fn)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_LEGACY_SUPPORTED) -extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp - png_ptr, png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels)); -/* Return the user pointer associated with the user transform functions */ -extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) - PNGARG((png_structp png_ptr)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp - png_ptr)); -#endif - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -/* Sets the function callbacks for the push reader, and a pointer to a - * user-defined structure available to the callback functions. - */ -extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, - png_voidp progressive_ptr, - png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, - png_progressive_end_ptr end_fn)); - -/* returns the user pointer associated with the push read functions */ -extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) - PNGARG((png_structp png_ptr)); - -/* function to be called when data becomes available */ -extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); - -/* function that combines rows. Not very much different than the - * png_combine_row() call. Is this even used????? - */ -extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, - png_bytep old_row, png_bytep new_row)); -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, - png_uint_32 size)); - -#if defined(PNG_1_0_X) -# define png_malloc_warn png_malloc -#else -/* Added at libpng version 1.2.4 */ -extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, - png_uint_32 size)); -#endif - -/* frees a pointer allocated by png_malloc() */ -extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); - -#if defined(PNG_1_0_X) -/* Function to allocate memory for zlib. */ -extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, - uInt size)); - -/* Function to free memory for zlib */ -extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); -#endif - -/* Free data that was allocated internally */ -extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 free_me, int num)); -#ifdef PNG_FREE_ME_SUPPORTED -/* Reassign responsibility for freeing existing data, whether allocated - * by libpng or by the application */ -extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, - png_infop info_ptr, int freer, png_uint_32 mask)); -#endif -/* assignments for png_data_freer */ -#define PNG_DESTROY_WILL_FREE_DATA 1 -#define PNG_SET_WILL_FREE_DATA 1 -#define PNG_USER_WILL_FREE_DATA 2 -/* Flags for png_ptr->free_me and info_ptr->free_me */ -#define PNG_FREE_HIST 0x0008 -#define PNG_FREE_ICCP 0x0010 -#define PNG_FREE_SPLT 0x0020 -#define PNG_FREE_ROWS 0x0040 -#define PNG_FREE_PCAL 0x0080 -#define PNG_FREE_SCAL 0x0100 -#define PNG_FREE_UNKN 0x0200 -#define PNG_FREE_LIST 0x0400 -#define PNG_FREE_PLTE 0x1000 -#define PNG_FREE_TRNS 0x2000 -#define PNG_FREE_TEXT 0x4000 -#define PNG_FREE_ALL 0x7fff -#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ - -#ifdef PNG_USER_MEM_SUPPORTED -extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, - png_uint_32 size)); -extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, - png_voidp ptr)); -#endif - -extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, - png_voidp s1, png_voidp s2, png_uint_32 size)); - -extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, - png_voidp s1, int value, png_uint_32 size)); - -#if defined(USE_FAR_KEYWORD) /* memory model conversion function */ -extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, - int check)); -#endif /* USE_FAR_KEYWORD */ - -#ifndef PNG_NO_ERROR_TEXT -/* Fatal error in PNG image of libpng - can't continue */ -extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); - -/* The same, but the chunk name is prepended to the error string. */ -extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, - png_const_charp error_message)); -#else -/* Fatal error in PNG image of libpng - can't continue */ -extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)); -#endif - -#ifndef PNG_NO_WARNINGS -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); - -#ifdef PNG_READ_SUPPORTED -/* Non-fatal error in libpng, chunk name is prepended to message. */ -extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, - png_const_charp warning_message)); -#endif /* PNG_READ_SUPPORTED */ -#endif /* PNG_NO_WARNINGS */ - -/* The png_set_ functions are for storing values in the png_info_struct. - * Similarly, the png_get_ calls are used to read values from the - * png_info_struct, either storing the parameters in the passed variables, or - * setting pointers into the png_info_struct where the data is stored. The - * png_get_ functions return a non-zero value if the data was available - * in info_ptr, or return zero and do not change any of the parameters if the - * data was not available. - * - * These functions should be used instead of directly accessing png_info - * to avoid problems with future changes in the size and internal layout of - * png_info_struct. - */ -/* Returns "flag" if chunk data is valid in info_ptr. */ -extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, -png_infop info_ptr, png_uint_32 flag)); - -/* Returns number of bytes needed to hold a transformed row. */ -extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* Returns row_pointers, which is an array of pointers to scanlines that was -returned from png_read_png(). */ -extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, -png_infop info_ptr)); -/* Set row_pointers, which is an array of pointers to scanlines for use -by png_write_png(). */ -extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytepp row_pointers)); -#endif - -/* Returns number of color channels in image. */ -extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* Returns image width in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image height in pixels. */ -extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image bit_depth. */ -extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image color_type. */ -extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image filter_type. */ -extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image interlace_type. */ -extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image compression_type. */ -extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -#endif - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); -extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp -png_ptr, png_infop info_ptr)); - -#endif /* PNG_EASY_ACCESS_SUPPORTED */ - -/* Returns pointer to signature string read from PNG header */ -extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p *background)); -#endif - -#if defined(PNG_bKGD_SUPPORTED) -extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_16p background)); -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point - *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, - png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point - *int_blue_x, png_fixed_point *int_blue_y)); -#endif -#endif - -#if defined(PNG_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, double white_x, double white_y, double red_x, - double red_y, double green_x, double green_y, double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double *file_gamma)); -#endif -extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point *int_file_gamma)); -#endif - -#if defined(PNG_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, - png_infop info_ptr, double file_gamma)); -#endif -extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma)); -#endif - -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p *hist)); -#endif - -#if defined(PNG_hIST_SUPPORTED) -extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_16p hist)); -#endif - -extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, - int *bit_depth, int *color_type, int *interlace_method, - int *compression_method, int *filter_method)); - -extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_method, int compression_method, - int filter_method)); - -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, - int *unit_type)); -#endif - -#if defined(PNG_oFFs_SUPPORTED) -extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, - int unit_type)); -#endif - -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, - int *type, int *nparams, png_charp *units, png_charpp *params)); -#endif - -#if defined(PNG_pCAL_SUPPORTED) -extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, - int type, int nparams, png_charp units, png_charpp params)); -#endif - -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); -#endif - -#if defined(PNG_pHYs_SUPPORTED) -extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); -#endif - -extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp *palette, int *num_palette)); - -extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_colorp palette, int num_palette)); - -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p *sig_bit)); -#endif - -#if defined(PNG_sBIT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_color_8p sig_bit)); -#endif - -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *intent)); -#endif - -#if defined(PNG_sRGB_SUPPORTED) -extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); -extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, - png_infop info_ptr, int intent)); -#endif - -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charpp name, int *compression_type, - png_charpp profile, png_uint_32 *proflen)); - /* Note to maintainer: profile should be png_bytepp */ -#endif - -#if defined(PNG_iCCP_SUPPORTED) -extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_charp name, int compression_type, - png_charp profile, png_uint_32 proflen)); - /* Note to maintainer: profile should be png_bytep */ -#endif - -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tpp entries)); -#endif - -#if defined(PNG_sPLT_SUPPORTED) -extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_sPLT_tp entries, int nentries)); -#endif - -#if defined(PNG_TEXT_SUPPORTED) -/* png_get_text also returns the number of text chunks in *num_text */ -extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp *text_ptr, int *num_text)); -#endif - -/* - * Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. - */ - -#if defined(PNG_TEXT_SUPPORTED) -extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); -#endif - -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep *mod_time)); -#endif - -#if defined(PNG_tIME_SUPPORTED) -extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_timep mod_time)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep *trans, int *num_trans, - png_color_16p *trans_values)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_bytep trans, int num_trans, - png_color_16p trans_values)); -#endif - -#if defined(PNG_tRNS_SUPPORTED) -#endif - -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, double *width, double *height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); -#endif -#endif -#endif /* PNG_sCAL_SUPPORTED */ - -#if defined(PNG_sCAL_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, double width, double height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, - png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); -#endif -#endif -#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ - -#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) -/* provide a list of chunks and how they are to be handled, if the built-in - handling or default unknown chunk handling is not desired. Any chunks not - listed will be handled in the default manner. The IHDR and IEND chunks - must not be listed. - keep = 0: follow default behaviour - = 1: do not keep - = 2: keep only if safe-to-copy - = 3: keep even if unsafe-to-copy -*/ -extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp - png_ptr, int keep, png_bytep chunk_list, int num_chunks)); -extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, - png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); -extern PNG_EXPORT(void, png_set_unknown_chunk_location) - PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); -extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp - png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); -#endif -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep - chunk_name)); -#endif - -/* Png_free_data() will turn off the "valid" flag for anything it frees. - If you need to turn it off for a chunk that your application has freed, - you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ -extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, - png_infop info_ptr, int mask)); - -#if defined(PNG_INFO_IMAGE_SUPPORTED) -/* The "params" pointer is currently not used and is for future expansion. */ -extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, - png_infop info_ptr, - int transforms, - png_voidp params)); -#endif - -/* Define PNG_DEBUG at compile time for debugging information. Higher - * numbers for PNG_DEBUG mean more debugging information. This has - * only been added since version 0.95 so it is not implemented throughout - * libpng yet, but more support will be added as needed. - */ -#ifdef PNG_DEBUG -#if (PNG_DEBUG > 0) -#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) -#include -#if (PNG_DEBUG > 1) -#define png_debug(l,m) _RPT0(_CRT_WARN,m) -#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) -#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) -#endif -#else /* PNG_DEBUG_FILE || !_MSC_VER */ -#ifndef PNG_DEBUG_FILE -#define PNG_DEBUG_FILE stderr -#endif /* PNG_DEBUG_FILE */ -#if (PNG_DEBUG > 1) -#define png_debug(l,m) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ -} -#define png_debug1(l,m,p1) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ -} -#define png_debug2(l,m,p1,p2) \ -{ \ - int num_tabs=l; \ - fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ - (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ -} -#endif /* (PNG_DEBUG > 1) */ -#endif /* _MSC_VER */ -#endif /* (PNG_DEBUG > 0) */ -#endif /* PNG_DEBUG */ -#ifndef png_debug -#define png_debug(l, m) -#endif -#ifndef png_debug1 -#define png_debug1(l, m, p1) -#endif -#ifndef png_debug2 -#define png_debug2(l, m, p1, p2) -#endif - -extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr)); -extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); - -#ifdef PNG_MNG_FEATURES_SUPPORTED -extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp - png_ptr, png_uint_32 mng_features_permitted)); -#endif - -/* For use in png_set_keep_unknown, added to version 1.2.6 */ -#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 -#define PNG_HANDLE_CHUNK_NEVER 1 -#define PNG_HANDLE_CHUNK_IF_SAFE 2 -#define PNG_HANDLE_CHUNK_ALWAYS 3 - -/* Added to version 1.2.0 */ -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -#if defined(PNG_MMX_CODE_SUPPORTED) -#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ -#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 -#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 -#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 -#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 -#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 -#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 -#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ - -#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ - | PNG_ASM_FLAG_MMX_READ_INTERLACE \ - | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ - | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ - | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ - | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) -#define PNG_MMX_WRITE_FLAGS ( 0 ) - -#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ - | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ - | PNG_MMX_READ_FLAGS \ - | PNG_MMX_WRITE_FLAGS ) - -#define PNG_SELECT_READ 1 -#define PNG_SELECT_WRITE 2 -#endif /* PNG_MMX_CODE_SUPPORTED */ - -#if !defined(PNG_1_0_X) -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) - PNGARG((int flag_select, int *compilerID)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) - PNGARG((int flag_select)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_asm_flags) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) - PNGARG((png_structp png_ptr)); - -/* pngget.c */ -extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) - PNGARG((png_structp png_ptr)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_asm_flags) - PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); - -/* pngset.c */ -extern PNG_EXPORT(void,png_set_mmx_thresholds) - PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, - png_uint_32 mmx_rowbytes_threshold)); - -#endif /* PNG_1_0_X */ - -#if !defined(PNG_1_0_X) -/* png.c, pnggccrd.c, or pngvcrd.c */ -extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); -#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ - -/* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. */ -#ifdef PNG_ERROR_NUMBERS_SUPPORTED -extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp - png_ptr, png_uint_32 strip_mode)); -#endif - -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.2.6 */ -#ifdef PNG_SET_USER_LIMITS_SUPPORTED -extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp - png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); -extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp - png_ptr)); -extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp - png_ptr)); -#endif - -/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ - -#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED -/* With these routines we avoid an integer divide, which will be slower on - * most machines. However, it does take more operations than the corresponding - * divide method, so it may be slower on a few RISC systems. There are two - * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. - * - * Note that the rounding factors are NOT supposed to be the same! 128 and - * 32768 are correct for the NODIV code; 127 and 32767 are correct for the - * standard method. - * - * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] - */ - - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ - -# define png_composite(composite, fg, alpha, bg) \ - { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ - + (png_uint_16)(bg)*(png_uint_16)(255 - \ - (png_uint_16)(alpha)) + (png_uint_16)128); \ - (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } - -# define png_composite_16(composite, fg, alpha, bg) \ - { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ - + (png_uint_32)(bg)*(png_uint_32)(65535L - \ - (png_uint_32)(alpha)) + (png_uint_32)32768L); \ - (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } - -#else /* standard method using integer division */ - -# define png_composite(composite, fg, alpha, bg) \ - (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ - (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ - (png_uint_16)127) / 255) - -# define png_composite_16(composite, fg, alpha, bg) \ - (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ - (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ - (png_uint_32)32767) / (png_uint_32)65535L) - -#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ - -/* Inline macros to do direct reads of bytes from the input buffer. These - * require that you are using an architecture that uses PNG byte ordering - * (MSB first) and supports unaligned data storage. I think that PowerPC - * in big-endian mode and 680x0 are the only ones that will support this. - * The x86 line of processors definitely do not. The png_get_int_32() - * routine also assumes we are using two's complement format for negative - * values, which is almost certainly true. - */ -#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) -# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) -# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) -# define png_get_int_32(buf) ( *((png_int_32p) (buf))) -#else -extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf)); -extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf)); -extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf)); -#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ -extern PNG_EXPORT(png_uint_32,png_get_uint_31) - PNGARG((png_structp png_ptr, png_bytep buf)); -/* No png_get_int_16 -- may be added if there's a real need for it. */ - -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). - */ -extern PNG_EXPORT(void,png_save_uint_32) - PNGARG((png_bytep buf, png_uint_32 i)); -extern PNG_EXPORT(void,png_save_int_32) - PNGARG((png_bytep buf, png_int_32 i)); - -/* Place a 16-bit number into a buffer in PNG byte order. - * The parameter is declared unsigned int, not png_uint_16, - * just to avoid potential problems on pre-ANSI C compilers. - */ -extern PNG_EXPORT(void,png_save_uint_16) - PNGARG((png_bytep buf, unsigned int i)); -/* No png_save_int_16 -- may be added if there's a real need for it. */ - -/* ************************************************************************* */ - -/* These next functions are used internally in the code. They generally - * shouldn't be used unless you are writing code to add or replace some - * functionality in libpng. More information about most functions can - * be found in the files where the functions are located. - */ - - -/* Various modes of operation, that are visible to applications because - * they are used for unknown chunk location. - */ -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_HAVE_IDAT 0x04 -#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ -#define PNG_HAVE_IEND 0x10 - -#if defined(PNG_INTERNAL) - -/* More modes of operation. Note that after an init, mode is set to - * zero automatically when the structure is created. - */ -#define PNG_HAVE_gAMA 0x20 -#define PNG_HAVE_cHRM 0x40 -#define PNG_HAVE_sRGB 0x80 -#define PNG_HAVE_CHUNK_HEADER 0x100 -#define PNG_WROTE_tIME 0x200 -#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 -#define PNG_BACKGROUND_IS_GRAY 0x800 -#define PNG_HAVE_PNG_SIGNATURE 0x1000 -#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ - -/* flags for the transformations the PNG library does on the image data */ -#define PNG_BGR 0x0001 -#define PNG_INTERLACE 0x0002 -#define PNG_PACK 0x0004 -#define PNG_SHIFT 0x0008 -#define PNG_SWAP_BYTES 0x0010 -#define PNG_INVERT_MONO 0x0020 -#define PNG_DITHER 0x0040 -#define PNG_BACKGROUND 0x0080 -#define PNG_BACKGROUND_EXPAND 0x0100 - /* 0x0200 unused */ -#define PNG_16_TO_8 0x0400 -#define PNG_RGBA 0x0800 -#define PNG_EXPAND 0x1000 -#define PNG_GAMMA 0x2000 -#define PNG_GRAY_TO_RGB 0x4000 -#define PNG_FILLER 0x8000L -#define PNG_PACKSWAP 0x10000L -#define PNG_SWAP_ALPHA 0x20000L -#define PNG_STRIP_ALPHA 0x40000L -#define PNG_INVERT_ALPHA 0x80000L -#define PNG_USER_TRANSFORM 0x100000L -#define PNG_RGB_TO_GRAY_ERR 0x200000L -#define PNG_RGB_TO_GRAY_WARN 0x400000L -#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ - /* 0x800000L Unused */ -#define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ -#define PNG_EXPAND_tRNS 0x2000000L /* Added to libpng-1.2.9 */ - /* 0x4000000L unused */ - /* 0x8000000L unused */ - /* 0x10000000L unused */ - /* 0x20000000L unused */ - /* 0x40000000L unused */ - -/* flags for png_create_struct */ -#define PNG_STRUCT_PNG 0x0001 -#define PNG_STRUCT_INFO 0x0002 - -/* Scaling factor for filter heuristic weighting calculations */ -#define PNG_WEIGHT_SHIFT 8 -#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) -#define PNG_COST_SHIFT 3 -#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) - -/* flags for the png_ptr->flags rather than declaring a byte for each one */ -#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 -#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 -#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 -#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 -#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 -#define PNG_FLAG_ZLIB_FINISHED 0x0020 -#define PNG_FLAG_ROW_INIT 0x0040 -#define PNG_FLAG_FILLER_AFTER 0x0080 -#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 -#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 -#define PNG_FLAG_CRC_CRITICAL_USE 0x0400 -#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 -#define PNG_FLAG_FREE_PLTE 0x1000 -#define PNG_FLAG_FREE_TRNS 0x2000 -#define PNG_FLAG_FREE_HIST 0x4000 -#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L -#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L -#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L -#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L -#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L -#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L -#define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ -#define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ - /* 0x800000L unused */ - /* 0x1000000L unused */ - /* 0x2000000L unused */ - /* 0x4000000L unused */ - /* 0x8000000L unused */ - /* 0x10000000L unused */ - /* 0x20000000L unused */ - /* 0x40000000L unused */ - -#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ - PNG_FLAG_CRC_ANCILLARY_NOWARN) - -#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ - PNG_FLAG_CRC_CRITICAL_IGNORE) - -#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ - PNG_FLAG_CRC_CRITICAL_MASK) - -/* save typing and make code easier to understand */ - -#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ - abs((int)((c1).green) - (int)((c2).green)) + \ - abs((int)((c1).blue) - (int)((c2).blue))) - -/* Added to libpng-1.2.6 JB */ -#define PNG_ROWBYTES(pixel_bits, width) \ - ((pixel_bits) >= 8 ? \ - ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ - (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) - -/* PNG_OUT_OF_RANGE returns true if value is outside the range - ideal-delta..ideal+delta. Each argument is evaluated twice. - "ideal" and "delta" should be constants, normally simple - integers, "value" a variable. Added to libpng-1.2.6 JB */ -#define PNG_OUT_OF_RANGE(value, ideal, delta) \ - ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) - -/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ -#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) -/* place to hold the signature string for a PNG file. */ -#ifdef PNG_USE_GLOBAL_ARRAYS - PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8]; -#else -#endif -#endif /* PNG_NO_EXTERN */ - -/* Constant strings for known chunk types. If you need to add a chunk, - * define the name here, and add an invocation of the macro in png.c and - * wherever it's needed. - */ -#define PNG_IHDR png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} -#define PNG_IDAT png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} -#define PNG_IEND png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} -#define PNG_PLTE png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} -#define PNG_bKGD png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} -#define PNG_cHRM png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} -#define PNG_gAMA png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} -#define PNG_hIST png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} -#define PNG_iCCP png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} -#define PNG_iTXt png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} -#define PNG_oFFs png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} -#define PNG_pCAL png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} -#define PNG_sCAL png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} -#define PNG_pHYs png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} -#define PNG_sBIT png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} -#define PNG_sPLT png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} -#define PNG_sRGB png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} -#define PNG_tEXt png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} -#define PNG_tIME png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} -#define PNG_tRNS png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} -#define PNG_zTXt png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} - -#ifdef PNG_USE_GLOBAL_ARRAYS -PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5]; -PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5]; -#endif /* PNG_USE_GLOBAL_ARRAYS */ - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize png_ptr struct for reading, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_read_struct instead). - */ -extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); -#undef png_read_init -#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); -#endif - -extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Initialize png_ptr struct for writing, and allocate any other memory. - * (old interface - DEPRECATED - use png_create_write_struct instead). - */ -extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); -#undef png_write_init -#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ - PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); -#endif - -extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size)); -extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, - png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t - png_info_size)); - -/* Allocate memory for an internal libpng struct */ -PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); - -/* Free memory from internal libpng struct */ -PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); - -PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr - malloc_fn, png_voidp mem_ptr)); -PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, - png_free_ptr free_fn, png_voidp mem_ptr)); - -/* Free any memory that info_ptr points to and reset struct. */ -PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -#ifndef PNG_1_0_X -/* Function to allocate memory for zlib. */ -PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); - -/* Function to free memory for zlib */ -PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); - -#ifdef PNG_SIZE_T -/* Function to convert a sizeof an item to png_sizeof item */ - PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); -#endif - -/* Next four functions are used internally as callbacks. PNGAPI is required - * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ - -PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif - -PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, - png_bytep data, png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -#if !defined(PNG_NO_STDIO) -PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); -#endif -#endif -#else /* PNG_1_0_X */ -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t length)); -#endif -#endif /* PNG_1_0_X */ - -/* Reset the CRC variable */ -PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); - -/* Write the "data" buffer to whatever output you are using. */ -PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read data from whatever input you are using into the "data" buffer */ -PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -/* Read bytes into buf, and update png_ptr->crc */ -PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, - png_size_t length)); - -/* Decompress data in a chunk that uses compression */ -#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ - defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) -PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, - int comp_type, png_charp chunkdata, png_size_t chunklength, - png_size_t prefix_length, png_size_t *data_length)); -#endif - -/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ -PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); - -/* Read the CRC from the file and compare it to the libpng calculated CRC */ -PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); - -/* Calculate the CRC over a section of data. Note that we are only - * passing a maximum of 64K on systems that have this as a memory limit, - * since this is the maximum buffer size we can specify. - */ -PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, - png_size_t length)); - -#if defined(PNG_WRITE_FLUSH_SUPPORTED) -PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); -#endif - -/* simple function to write the signature */ -PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); - -/* write various chunks */ - -/* Write the IHDR chunk, and update the png_struct with the necessary - * information. - */ -PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, - png_uint_32 height, - int bit_depth, int color_type, int compression_method, int filter_method, - int interlace_method)); - -PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, - png_uint_32 num_pal)); - -PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, - png_size_t length)); - -PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); - -#if defined(PNG_WRITE_gAMA_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point - file_gamma)); -#endif -#endif - -#if defined(PNG_WRITE_sBIT_SUPPORTED) -PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, - int color_type)); -#endif - -#if defined(PNG_WRITE_cHRM_SUPPORTED) -#ifdef PNG_FLOATING_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, - double white_x, double white_y, - double red_x, double red_y, double green_x, double green_y, - double blue_x, double blue_y)); -#endif -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, - png_fixed_point int_white_x, png_fixed_point int_white_y, - png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point - int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); -#endif -#endif - -#if defined(PNG_WRITE_sRGB_SUPPORTED) -PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, - int intent)); -#endif - -#if defined(PNG_WRITE_iCCP_SUPPORTED) -PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, - png_charp name, int compression_type, - png_charp profile, int proflen)); - /* Note to maintainer: profile should be png_bytep */ -#endif - -#if defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, - png_sPLT_tp palette)); -#endif - -#if defined(PNG_WRITE_tRNS_SUPPORTED) -PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, - png_color_16p values, int number, int color_type)); -#endif - -#if defined(PNG_WRITE_bKGD_SUPPORTED) -PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, - png_color_16p values, int color_type)); -#endif - -#if defined(PNG_WRITE_hIST_SUPPORTED) -PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, - int num_hist)); -#endif - -#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ - defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) -PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, - png_charp key, png_charpp new_key)); -#endif - -#if defined(PNG_WRITE_tEXt_SUPPORTED) -PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len)); -#endif - -#if defined(PNG_WRITE_zTXt_SUPPORTED) -PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, - png_charp text, png_size_t text_len, int compression)); -#endif - -#if defined(PNG_WRITE_iTXt_SUPPORTED) -PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, - int compression, png_charp key, png_charp lang, png_charp lang_key, - png_charp text)); -#endif - -#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ -PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, - png_infop info_ptr, png_textp text_ptr, int num_text)); -#endif - -#if defined(PNG_WRITE_oFFs_SUPPORTED) -PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, - png_int_32 x_offset, png_int_32 y_offset, int unit_type)); -#endif - -#if defined(PNG_WRITE_pCAL_SUPPORTED) -PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, - png_int_32 X0, png_int_32 X1, int type, int nparams, - png_charp units, png_charpp params)); -#endif - -#if defined(PNG_WRITE_pHYs_SUPPORTED) -PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, - png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, - int unit_type)); -#endif - -#if defined(PNG_WRITE_tIME_SUPPORTED) -PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, - png_timep mod_time)); -#endif - -#if defined(PNG_WRITE_sCAL_SUPPORTED) -#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) -PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, - int unit, double width, double height)); -#else -#ifdef PNG_FIXED_POINT_SUPPORTED -PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, - int unit, png_charp width, png_charp height)); -#endif -#endif -#endif - -/* Called when finished processing a row of data */ -PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); - -/* Internal use only. Called before first row of data */ -PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); -#endif - -/* combine a row of data, dealing with alpha, etc. if requested */ -PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, - int mask)); - -#if defined(PNG_READ_INTERLACING_SUPPORTED) -/* expand an interlaced row */ -/* OLD pre-1.0.9 interface: -PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass, png_uint_32 transformations)); - */ -PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); -#endif - -/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ - -#if defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* grab pixels out of a row for an interlaced pass */ -PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, - png_bytep row, int pass)); -#endif - -/* unfilter a row */ -PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, - png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); - -/* Choose the best filter to use and filter the row data */ -PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, - png_row_infop row_info)); - -/* Write out the filtered row. */ -PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, - png_bytep filtered_row)); -/* finish a row while reading, dealing with interlacing passes, etc. */ -PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); - -/* initialize the row buffers, etc. */ -PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); -/* optional call to update the users info structure */ -PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); - -/* these are the functions that do the transformations */ -#if defined(PNG_READ_FILLER_SUPPORTED) -PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 filler, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ - defined(PNG_READ_STRIP_ALPHA_SUPPORTED) -PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 flags)); -#endif - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) -PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) -PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop - row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) -PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) -PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p sig_bits)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_16_TO_8_SUPPORTED) -PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_READ_DITHER_SUPPORTED) -PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, - png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); - -# if defined(PNG_CORRECT_PALETTE_SUPPORTED) -PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, - png_colorp palette, int num_palette)); -# endif -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); -#endif - -#if defined(PNG_WRITE_PACK_SUPPORTED) -PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, - png_bytep row, png_uint_32 bit_depth)); -#endif - -#if defined(PNG_WRITE_SHIFT_SUPPORTED) -PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, - png_color_8p bit_depth)); -#endif - -#if defined(PNG_READ_BACKGROUND_SUPPORTED) -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background, - png_color_16p background_1, - png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, - png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, - png_uint_16pp gamma_16_to_1, int gamma_shift)); -#else -PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, - png_color_16p trans_values, png_color_16p background)); -#endif -#endif - -#if defined(PNG_READ_GAMMA_SUPPORTED) -PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, - png_bytep gamma_table, png_uint_16pp gamma_16_table, - int gamma_shift)); -#endif - -#if defined(PNG_READ_EXPAND_SUPPORTED) -PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, - png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); -PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, - png_bytep row, png_color_16p trans_value)); -#endif - -/* The following decodes the appropriate chunks, and does error correction, - * then calls the appropriate callback for the chunk if it is valid. - */ - -/* decode the IHDR chunk */ -PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); - -#if defined(PNG_READ_bKGD_SUPPORTED) -PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_cHRM_SUPPORTED) -PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_gAMA_SUPPORTED) -PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_hIST_SUPPORTED) -PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_iCCP_SUPPORTED) -extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_iCCP_SUPPORTED */ - -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_oFFs_SUPPORTED) -PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pCAL_SUPPORTED) -PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_pHYs_SUPPORTED) -PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sBIT_SUPPORTED) -PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sCAL_SUPPORTED) -PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_sPLT_SUPPORTED) -extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif /* PNG_READ_sPLT_SUPPORTED */ - -#if defined(PNG_READ_sRGB_SUPPORTED) -PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tIME_SUPPORTED) -PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_tRNS_SUPPORTED) -PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, - png_uint_32 length)); -#endif - -PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); - -PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, - png_bytep chunk_name)); - -/* handle the transformations for reading and writing */ -PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); - -PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, - png_uint_32 length)); -PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, - png_bytep buffer, png_size_t buffer_length)); -PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); -PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); -PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, - png_infop info_ptr)); -PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); -#if defined(PNG_READ_tEXt_SUPPORTED) -PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_zTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif -#if defined(PNG_READ_iTXt_SUPPORTED) -PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr, png_uint_32 length)); -PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, - png_infop info_ptr)); -#endif - -#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, - png_bytep row)); -#endif - -#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) -#if defined(PNG_MMX_CODE_SUPPORTED) -/* png.c */ /* PRIVATE */ -PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); -#endif -#endif - -#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) -PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr, -png_infop info_ptr)); - -#if defined(PNG_pHYs_SUPPORTED) -PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr, -png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); -#endif /* PNG_pHYs_SUPPORTED */ -#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ - -/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ - -#endif /* PNG_INTERNAL */ - -#ifdef __cplusplus -} -#endif - -#endif /* PNG_VERSION_INFO_ONLY */ -/* do not put anything past this line */ -#endif /* PNG_H */ diff --git a/WadInstaller_Source/source/libpng/pngconf.h b/WadInstaller_Source/source/libpng/pngconf.h deleted file mode 100644 index 06a182f..0000000 --- a/WadInstaller_Source/source/libpng/pngconf.h +++ /dev/null @@ -1,1481 +0,0 @@ - -/* pngconf.h - machine configurable file for libpng - * - * libpng version 1.2.29 - May 8, 2008 - * For conditions of distribution and use, see copyright notice in png.h - * Copyright (c) 1998-2008 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - */ - -/* Any machine specific code is near the front of this file, so if you - * are configuring libpng for a machine, you may want to read the section - * starting here down to where it starts to typedef png_color, png_text, - * and png_info. - */ - -#ifndef PNGCONF_H -#define PNGCONF_H - -#define PNG_1_2_X - -/* - * PNG_USER_CONFIG has to be defined on the compiler command line. This - * includes the resource compiler for Windows DLL configurations. - */ -#ifdef PNG_USER_CONFIG -# ifndef PNG_USER_PRIVATEBUILD -# define PNG_USER_PRIVATEBUILD -# endif -#include "pngusr.h" -#endif - -/* PNG_CONFIGURE_LIBPNG is set by the "configure" script. */ -#ifdef PNG_CONFIGURE_LIBPNG -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#endif - -/* - * Added at libpng-1.2.8 - * - * If you create a private DLL you need to define in "pngusr.h" the followings: - * #define PNG_USER_PRIVATEBUILD - * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." - * #define PNG_USER_DLLFNAME_POSTFIX - * e.g. // private DLL "libpng13gx.dll" - * #define PNG_USER_DLLFNAME_POSTFIX "gx" - * - * The following macros are also at your disposal if you want to complete the - * DLL VERSIONINFO structure. - * - PNG_USER_VERSIONINFO_COMMENTS - * - PNG_USER_VERSIONINFO_COMPANYNAME - * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS - */ - -#ifdef __STDC__ -#ifdef SPECIALBUILD -# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ - are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") -#endif - -#ifdef PRIVATEBUILD -# pragma message("PRIVATEBUILD is deprecated.\ - Use PNG_USER_PRIVATEBUILD instead.") -# define PNG_USER_PRIVATEBUILD PRIVATEBUILD -#endif -#endif /* __STDC__ */ - -#ifndef PNG_VERSION_INFO_ONLY - -/* End of material added to libpng-1.2.8 */ - -/* Added at libpng-1.2.19, removed at libpng-1.2.20 because it caused trouble - Restored at libpng-1.2.21 */ -#if !defined(PNG_NO_WARN_UNINITIALIZED_ROW) && \ - !defined(PNG_WARN_UNINITIALIZED_ROW) -# define PNG_WARN_UNINITIALIZED_ROW 1 -#endif -/* End of material added at libpng-1.2.19/1.2.21 */ - -/* This is the size of the compression buffer, and thus the size of - * an IDAT chunk. Make this whatever size you feel is best for your - * machine. One of these will be allocated per png_struct. When this - * is full, it writes the data to the disk, and does some other - * calculations. Making this an extremely small size will slow - * the library down, but you may want to experiment to determine - * where it becomes significant, if you are concerned with memory - * usage. Note that zlib allocates at least 32Kb also. For readers, - * this describes the size of the buffer available to read the data in. - * Unless this gets smaller than the size of a row (compressed), - * it should not make much difference how big this is. - */ - -#ifndef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 8192 -#endif - -/* Enable if you want a write-only libpng */ - -#ifndef PNG_NO_READ_SUPPORTED -# define PNG_READ_SUPPORTED -#endif - -/* Enable if you want a read-only libpng */ - -#ifndef PNG_NO_WRITE_SUPPORTED -# define PNG_WRITE_SUPPORTED -#endif - -/* Enabled by default in 1.2.0. You can disable this if you don't need to - support PNGs that are embedded in MNG datastreams */ -#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) -# ifndef PNG_MNG_FEATURES_SUPPORTED -# define PNG_MNG_FEATURES_SUPPORTED -# endif -#endif - -#ifndef PNG_NO_FLOATING_POINT_SUPPORTED -# ifndef PNG_FLOATING_POINT_SUPPORTED -# define PNG_FLOATING_POINT_SUPPORTED -# endif -#endif - -/* If you are running on a machine where you cannot allocate more - * than 64K of memory at once, uncomment this. While libpng will not - * normally need that much memory in a chunk (unless you load up a very - * large file), zlib needs to know how big of a chunk it can use, and - * libpng thus makes sure to check any memory allocation to verify it - * will fit into memory. -#define PNG_MAX_MALLOC_64K - */ -#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) -# define PNG_MAX_MALLOC_64K -#endif - -/* Special munging to support doing things the 'cygwin' way: - * 'Normal' png-on-win32 defines/defaults: - * PNG_BUILD_DLL -- building dll - * PNG_USE_DLL -- building an application, linking to dll - * (no define) -- building static library, or building an - * application and linking to the static lib - * 'Cygwin' defines/defaults: - * PNG_BUILD_DLL -- (ignored) building the dll - * (no define) -- (ignored) building an application, linking to the dll - * PNG_STATIC -- (ignored) building the static lib, or building an - * application that links to the static lib. - * ALL_STATIC -- (ignored) building various static libs, or building an - * application that links to the static libs. - * Thus, - * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and - * this bit of #ifdefs will define the 'correct' config variables based on - * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but - * unnecessary. - * - * Also, the precedence order is: - * ALL_STATIC (since we can't #undef something outside our namespace) - * PNG_BUILD_DLL - * PNG_STATIC - * (nothing) == PNG_USE_DLL - * - * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent - * of auto-import in binutils, we no longer need to worry about - * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, - * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes - * to __declspec() stuff. However, we DO need to worry about - * PNG_BUILD_DLL and PNG_STATIC because those change some defaults - * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. - */ -#if defined(__CYGWIN__) -# if defined(ALL_STATIC) -# if defined(PNG_BUILD_DLL) -# undef PNG_BUILD_DLL -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# if !defined(PNG_STATIC) -# define PNG_STATIC -# endif -# else -# if defined (PNG_BUILD_DLL) -# if defined(PNG_STATIC) -# undef PNG_STATIC -# endif -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# else -# if defined(PNG_STATIC) -# if defined(PNG_USE_DLL) -# undef PNG_USE_DLL -# endif -# if defined(PNG_DLL) -# undef PNG_DLL -# endif -# else -# if !defined(PNG_USE_DLL) -# define PNG_USE_DLL -# endif -# if !defined(PNG_DLL) -# define PNG_DLL -# endif -# endif -# endif -# endif -#endif - -/* This protects us against compilers that run on a windowing system - * and thus don't have or would rather us not use the stdio types: - * stdin, stdout, and stderr. The only one currently used is stderr - * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will - * prevent these from being compiled and used. #defining PNG_NO_STDIO - * will also prevent these, plus will prevent the entire set of stdio - * macros and functions (FILE *, printf, etc.) from being compiled and used, - * unless (PNG_DEBUG > 0) has been #defined. - * - * #define PNG_NO_CONSOLE_IO - * #define PNG_NO_STDIO - */ - -#if defined(_WIN32_WCE) -# include - /* Console I/O functions are not supported on WindowsCE */ -# define PNG_NO_CONSOLE_IO -# ifdef PNG_DEBUG -# undef PNG_DEBUG -# endif -#endif - -#ifdef PNG_BUILD_DLL -# ifndef PNG_CONSOLE_IO_SUPPORTED -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# endif -#endif - -# ifdef PNG_NO_STDIO -# ifndef PNG_NO_CONSOLE_IO -# define PNG_NO_CONSOLE_IO -# endif -# ifdef PNG_DEBUG -# if (PNG_DEBUG > 0) -# include -# endif -# endif -# else -# if !defined(_WIN32_WCE) -/* "stdio.h" functions are not supported on WindowsCE */ -# include -# endif -# endif - -/* This macro protects us against machines that don't have function - * prototypes (ie K&R style headers). If your compiler does not handle - * function prototypes, define this macro and use the included ansi2knr. - * I've always been able to use _NO_PROTO as the indicator, but you may - * need to drag the empty declaration out in front of here, or change the - * ifdef to suit your own needs. - */ -#ifndef PNGARG - -#ifdef OF /* zlib prototype munger */ -# define PNGARG(arglist) OF(arglist) -#else - -#ifdef _NO_PROTO -# define PNGARG(arglist) () -# ifndef PNG_TYPECAST_NULL -# define PNG_TYPECAST_NULL -# endif -#else -# define PNGARG(arglist) arglist -#endif /* _NO_PROTO */ - - -#endif /* OF */ - -#endif /* PNGARG */ - -/* Try to determine if we are compiling on a Mac. Note that testing for - * just __MWERKS__ is not good enough, because the Codewarrior is now used - * on non-Mac platforms. - */ -#ifndef MACOS -# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ - defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) -# define MACOS -# endif -#endif - -/* enough people need this for various reasons to include it here */ -#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) -# include -#endif - -#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) -# define PNG_SETJMP_SUPPORTED -#endif - -#ifdef PNG_SETJMP_SUPPORTED -/* This is an attempt to force a single setjmp behaviour on Linux. If - * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. - */ - -# ifdef __linux__ -# ifdef _BSD_SOURCE -# define PNG_SAVE_BSD_SOURCE -# undef _BSD_SOURCE -# endif -# ifdef _SETJMP_H - /* If you encounter a compiler error here, see the explanation - * near the end of INSTALL. - */ - __pngconf.h__ already includes setjmp.h; - __dont__ include it again.; -# endif -# endif /* __linux__ */ - - /* include setjmp.h for error handling */ -# include - -# ifdef __linux__ -# ifdef PNG_SAVE_BSD_SOURCE -# ifndef _BSD_SOURCE -# define _BSD_SOURCE -# endif -# undef PNG_SAVE_BSD_SOURCE -# endif -# endif /* __linux__ */ -#endif /* PNG_SETJMP_SUPPORTED */ - -#ifdef BSD -# include -#else -# include -#endif - -/* Other defines for things like memory and the like can go here. */ -#ifdef PNG_INTERNAL - -#include - -/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which - * aren't usually used outside the library (as far as I know), so it is - * debatable if they should be exported at all. In the future, when it is - * possible to have run-time registry of chunk-handling functions, some of - * these will be made available again. -#define PNG_EXTERN extern - */ -#define PNG_EXTERN - -/* Other defines specific to compilers can go here. Try to keep - * them inside an appropriate ifdef/endif pair for portability. - */ - -#if defined(PNG_FLOATING_POINT_SUPPORTED) -# if defined(MACOS) - /* We need to check that hasn't already been included earlier - * as it seems it doesn't agree with , yet we should really use - * if possible. - */ -# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) -# include -# endif -# else -# include -# endif -# if defined(_AMIGA) && defined(__SASC) && defined(_M68881) - /* Amiga SAS/C: We must include builtin FPU functions when compiling using - * MATH=68881 - */ -# include -# endif -#endif - -/* Codewarrior on NT has linking problems without this. */ -#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) -# define PNG_ALWAYS_EXTERN -#endif - -/* This provides the non-ANSI (far) memory allocation routines. */ -#if defined(__TURBOC__) && defined(__MSDOS__) -# include -# include -#endif - -/* I have no idea why is this necessary... */ -#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ - defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) -# include -#endif - -/* This controls how fine the dithering gets. As this allocates - * a largish chunk of memory (32K), those who are not as concerned - * with dithering quality can decrease some or all of these. - */ -#ifndef PNG_DITHER_RED_BITS -# define PNG_DITHER_RED_BITS 5 -#endif -#ifndef PNG_DITHER_GREEN_BITS -# define PNG_DITHER_GREEN_BITS 5 -#endif -#ifndef PNG_DITHER_BLUE_BITS -# define PNG_DITHER_BLUE_BITS 5 -#endif - -/* This controls how fine the gamma correction becomes when you - * are only interested in 8 bits anyway. Increasing this value - * results in more memory being used, and more pow() functions - * being called to fill in the gamma tables. Don't set this value - * less then 8, and even that may not work (I haven't tested it). - */ - -#ifndef PNG_MAX_GAMMA_8 -# define PNG_MAX_GAMMA_8 11 -#endif - -/* This controls how much a difference in gamma we can tolerate before - * we actually start doing gamma conversion. - */ -#ifndef PNG_GAMMA_THRESHOLD -# define PNG_GAMMA_THRESHOLD 0.05 -#endif - -#endif /* PNG_INTERNAL */ - -/* The following uses const char * instead of char * for error - * and warning message functions, so some compilers won't complain. - * If you do not want to use const, define PNG_NO_CONST here. - */ - -#ifndef PNG_NO_CONST -# define PNG_CONST const -#else -# define PNG_CONST -#endif - -/* The following defines give you the ability to remove code from the - * library that you will not be using. I wish I could figure out how to - * automate this, but I can't do that without making it seriously hard - * on the users. So if you are not using an ability, change the #define - * to and #undef, and that part of the library will not be compiled. If - * your linker can't find a function, you may want to make sure the - * ability is defined here. Some of these depend upon some others being - * defined. I haven't figured out all the interactions here, so you may - * have to experiment awhile to get everything to compile. If you are - * creating or using a shared library, you probably shouldn't touch this, - * as it will affect the size of the structures, and this will cause bad - * things to happen if the library and/or application ever change. - */ - -/* Any features you will not be using can be undef'ed here */ - -/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user - * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS - * on the compile line, then pick and choose which ones to define without - * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED - * if you only want to have a png-compliant reader/writer but don't need - * any of the extra transformations. This saves about 80 kbytes in a - * typical installation of the library. (PNG_NO_* form added in version - * 1.0.1c, for consistency) - */ - -/* The size of the png_text structure changed in libpng-1.0.6 when - * iTXt support was added. iTXt support was turned off by default through - * libpng-1.2.x, to support old apps that malloc the png_text structure - * instead of calling png_set_text() and letting libpng malloc it. It - * was turned on by default in libpng-1.3.0. - */ - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -# ifndef PNG_NO_iTXt_SUPPORTED -# define PNG_NO_iTXt_SUPPORTED -# endif -# ifndef PNG_NO_READ_iTXt -# define PNG_NO_READ_iTXt -# endif -# ifndef PNG_NO_WRITE_iTXt -# define PNG_NO_WRITE_iTXt -# endif -#endif - -#if !defined(PNG_NO_iTXt_SUPPORTED) -# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) -# define PNG_READ_iTXt -# endif -# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) -# define PNG_WRITE_iTXt -# endif -#endif - -/* The following support, added after version 1.0.0, can be turned off here en - * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility - * with old applications that require the length of png_struct and png_info - * to remain unchanged. - */ - -#ifdef PNG_LEGACY_SUPPORTED -# define PNG_NO_FREE_ME -# define PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_NO_READ_USER_CHUNKS -# define PNG_NO_READ_iCCP -# define PNG_NO_WRITE_iCCP -# define PNG_NO_READ_iTXt -# define PNG_NO_WRITE_iTXt -# define PNG_NO_READ_sCAL -# define PNG_NO_WRITE_sCAL -# define PNG_NO_READ_sPLT -# define PNG_NO_WRITE_sPLT -# define PNG_NO_INFO_IMAGE -# define PNG_NO_READ_RGB_TO_GRAY -# define PNG_NO_READ_USER_TRANSFORM -# define PNG_NO_WRITE_USER_TRANSFORM -# define PNG_NO_USER_MEM -# define PNG_NO_READ_EMPTY_PLTE -# define PNG_NO_MNG_FEATURES -# define PNG_NO_FIXED_POINT_SUPPORTED -#endif - -/* Ignore attempt to turn off both floating and fixed point support */ -#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ - !defined(PNG_NO_FIXED_POINT_SUPPORTED) -# define PNG_FIXED_POINT_SUPPORTED -#endif - -#ifndef PNG_NO_FREE_ME -# define PNG_FREE_ME_SUPPORTED -#endif - -#if defined(PNG_READ_SUPPORTED) - -#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_TRANSFORMS) -# define PNG_READ_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_READ_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_READ_EXPAND -# define PNG_READ_EXPAND_SUPPORTED -# endif -# ifndef PNG_NO_READ_SHIFT -# define PNG_READ_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACK -# define PNG_READ_PACK_SUPPORTED -# endif -# ifndef PNG_NO_READ_BGR -# define PNG_READ_BGR_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP -# define PNG_READ_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_PACKSWAP -# define PNG_READ_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT -# define PNG_READ_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_READ_DITHER -# define PNG_READ_DITHER_SUPPORTED -# endif -# ifndef PNG_NO_READ_BACKGROUND -# define PNG_READ_BACKGROUND_SUPPORTED -# endif -# ifndef PNG_NO_READ_16_TO_8 -# define PNG_READ_16_TO_8_SUPPORTED -# endif -# ifndef PNG_NO_READ_FILLER -# define PNG_READ_FILLER_SUPPORTED -# endif -# ifndef PNG_NO_READ_GAMMA -# define PNG_READ_GAMMA_SUPPORTED -# endif -# ifndef PNG_NO_READ_GRAY_TO_RGB -# define PNG_READ_GRAY_TO_RGB_SUPPORTED -# endif -# ifndef PNG_NO_READ_SWAP_ALPHA -# define PNG_READ_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_INVERT_ALPHA -# define PNG_READ_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_STRIP_ALPHA -# define PNG_READ_STRIP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_READ_USER_TRANSFORM -# define PNG_READ_USER_TRANSFORM_SUPPORTED -# endif -# ifndef PNG_NO_READ_RGB_TO_GRAY -# define PNG_READ_RGB_TO_GRAY_SUPPORTED -# endif -#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ - -#if !defined(PNG_NO_PROGRESSIVE_READ) && \ - !defined(PNG_PROGRESSIVE_READ_SUPPORTED) /* if you don't do progressive */ -# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ -#endif /* about interlacing capability! You'll */ - /* still have interlacing unless you change the following line: */ - -#define PNG_READ_INTERLACING_SUPPORTED /* required in PNG-compliant decoders */ - -#ifndef PNG_NO_READ_COMPOSITE_NODIV -# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ -# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ -# endif -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated, will be removed from version 2.0.0. - Use PNG_MNG_FEATURES_SUPPORTED instead. */ -#ifndef PNG_NO_READ_EMPTY_PLTE -# define PNG_READ_EMPTY_PLTE_SUPPORTED -#endif -#endif - -#endif /* PNG_READ_SUPPORTED */ - -#if defined(PNG_WRITE_SUPPORTED) - -# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_TRANSFORMS) -# define PNG_WRITE_TRANSFORMS_SUPPORTED -#endif - -#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED -# ifndef PNG_NO_WRITE_SHIFT -# define PNG_WRITE_SHIFT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACK -# define PNG_WRITE_PACK_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_BGR -# define PNG_WRITE_BGR_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_SWAP -# define PNG_WRITE_SWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_PACKSWAP -# define PNG_WRITE_PACKSWAP_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT -# define PNG_WRITE_INVERT_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_FILLER -# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ -# endif -# ifndef PNG_NO_WRITE_SWAP_ALPHA -# define PNG_WRITE_SWAP_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_INVERT_ALPHA -# define PNG_WRITE_INVERT_ALPHA_SUPPORTED -# endif -# ifndef PNG_NO_WRITE_USER_TRANSFORM -# define PNG_WRITE_USER_TRANSFORM_SUPPORTED -# endif -#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ - -#if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \ - !defined(PNG_WRITE_INTERLACING_SUPPORTED) -#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant - encoders, but can cause trouble - if left undefined */ -#endif - -#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ - !defined(PNG_WRITE_WEIGHTED_FILTER) && \ - defined(PNG_FLOATING_POINT_SUPPORTED) -# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#endif - -#ifndef PNG_NO_WRITE_FLUSH -# define PNG_WRITE_FLUSH_SUPPORTED -#endif - -#if defined(PNG_1_0_X) || defined (PNG_1_2_X) -/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ -#ifndef PNG_NO_WRITE_EMPTY_PLTE -# define PNG_WRITE_EMPTY_PLTE_SUPPORTED -#endif -#endif - -#endif /* PNG_WRITE_SUPPORTED */ - -#ifndef PNG_1_0_X -# ifndef PNG_NO_ERROR_NUMBERS -# define PNG_ERROR_NUMBERS_SUPPORTED -# endif -#endif /* PNG_1_0_X */ - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -# ifndef PNG_NO_USER_TRANSFORM_PTR -# define PNG_USER_TRANSFORM_PTR_SUPPORTED -# endif -#endif - -#ifndef PNG_NO_STDIO -# define PNG_TIME_RFC1123_SUPPORTED -#endif - -/* This adds extra functions in pngget.c for accessing data from the - * info pointer (added in version 0.99) - * png_get_image_width() - * png_get_image_height() - * png_get_bit_depth() - * png_get_color_type() - * png_get_compression_type() - * png_get_filter_type() - * png_get_interlace_type() - * png_get_pixel_aspect_ratio() - * png_get_pixels_per_meter() - * png_get_x_offset_pixels() - * png_get_y_offset_pixels() - * png_get_x_offset_microns() - * png_get_y_offset_microns() - */ -#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) -# define PNG_EASY_ACCESS_SUPPORTED -#endif - -/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 - * and removed from version 1.2.20. The following will be removed - * from libpng-1.4.0 -*/ - -#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_OPTIMIZED_CODE) -# ifndef PNG_OPTIMIZED_CODE_SUPPORTED -# define PNG_OPTIMIZED_CODE_SUPPORTED -# endif -#endif - -#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) -# ifndef PNG_ASSEMBLER_CODE_SUPPORTED -# define PNG_ASSEMBLER_CODE_SUPPORTED -# endif - -# if defined(__GNUC__) && defined(__x86_64__) && (__GNUC__ < 4) - /* work around 64-bit gcc compiler bugs in gcc-3.x */ -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if defined(__APPLE__) -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if (defined(__MWERKS__) && ((__MWERKS__ < 0x0900) || macintosh)) -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_NO_MMX_CODE -# endif -# endif - -# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) -# define PNG_MMX_CODE_SUPPORTED -# endif - -#endif -/* end of obsolete code to be removed from libpng-1.4.0 */ - -#if !defined(PNG_1_0_X) -#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) -# define PNG_USER_MEM_SUPPORTED -#endif -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.2.6 */ -#if !defined(PNG_1_0_X) -#ifndef PNG_SET_USER_LIMITS_SUPPORTED -#if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED) -# define PNG_SET_USER_LIMITS_SUPPORTED -#endif -#endif -#endif /* PNG_1_0_X */ - -/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter - * how large, set these limits to 0x7fffffffL - */ -#ifndef PNG_USER_WIDTH_MAX -# define PNG_USER_WIDTH_MAX 1000000L -#endif -#ifndef PNG_USER_HEIGHT_MAX -# define PNG_USER_HEIGHT_MAX 1000000L -#endif - -/* These are currently experimental features, define them if you want */ - -/* very little testing */ -/* -#ifdef PNG_READ_SUPPORTED -# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED -# endif -#endif -*/ - -/* This is only for PowerPC big-endian and 680x0 systems */ -/* some testing */ -/* -#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED -# define PNG_READ_BIG_ENDIAN_SUPPORTED -#endif -*/ - -/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ -/* -#define PNG_NO_POINTER_INDEXING -*/ - -/* These functions are turned off by default, as they will be phased out. */ -/* -#define PNG_USELESS_TESTS_SUPPORTED -#define PNG_CORRECT_PALETTE_SUPPORTED -*/ - -/* Any chunks you are not interested in, you can undef here. The - * ones that allocate memory may be expecially important (hIST, - * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info - * a bit smaller. - */ - -#if defined(PNG_READ_SUPPORTED) && \ - !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_READ_ANCILLARY_CHUNKS) -# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#if defined(PNG_WRITE_SUPPORTED) && \ - !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ - !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) -# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#endif - -#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_READ_TEXT -# define PNG_NO_READ_iTXt -# define PNG_NO_READ_tEXt -# define PNG_NO_READ_zTXt -#endif -#ifndef PNG_NO_READ_bKGD -# define PNG_READ_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -#endif -#ifndef PNG_NO_READ_cHRM -# define PNG_READ_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -#endif -#ifndef PNG_NO_READ_gAMA -# define PNG_READ_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -#endif -#ifndef PNG_NO_READ_hIST -# define PNG_READ_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -#endif -#ifndef PNG_NO_READ_iCCP -# define PNG_READ_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -#endif -#ifndef PNG_NO_READ_iTXt -# ifndef PNG_READ_iTXt_SUPPORTED -# define PNG_READ_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_READ_oFFs -# define PNG_READ_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -#endif -#ifndef PNG_NO_READ_pCAL -# define PNG_READ_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_sCAL -# define PNG_READ_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -#endif -#ifndef PNG_NO_READ_pHYs -# define PNG_READ_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -#endif -#ifndef PNG_NO_READ_sBIT -# define PNG_READ_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sPLT -# define PNG_READ_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -#endif -#ifndef PNG_NO_READ_sRGB -# define PNG_READ_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -#endif -#ifndef PNG_NO_READ_tEXt -# define PNG_READ_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_tIME -# define PNG_READ_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -#endif -#ifndef PNG_NO_READ_tRNS -# define PNG_READ_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -#endif -#ifndef PNG_NO_READ_zTXt -# define PNG_READ_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -#endif -#ifndef PNG_NO_READ_UNKNOWN_CHUNKS -# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -#endif -#if !defined(PNG_NO_READ_USER_CHUNKS) && \ - defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) -# define PNG_READ_USER_CHUNKS_SUPPORTED -# define PNG_USER_CHUNKS_SUPPORTED -# ifdef PNG_NO_READ_UNKNOWN_CHUNKS -# undef PNG_NO_READ_UNKNOWN_CHUNKS -# endif -# ifdef PNG_NO_HANDLE_AS_UNKNOWN -# undef PNG_NO_HANDLE_AS_UNKNOWN -# endif -#endif -#ifndef PNG_NO_READ_OPT_PLTE -# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ -#endif /* optional PLTE chunk in RGB and RGBA images */ -#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ - defined(PNG_READ_zTXt_SUPPORTED) -# define PNG_READ_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -#endif - -#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ - -#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED - -#ifdef PNG_NO_WRITE_TEXT -# define PNG_NO_WRITE_iTXt -# define PNG_NO_WRITE_tEXt -# define PNG_NO_WRITE_zTXt -#endif -#ifndef PNG_NO_WRITE_bKGD -# define PNG_WRITE_bKGD_SUPPORTED -# ifndef PNG_bKGD_SUPPORTED -# define PNG_bKGD_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_cHRM -# define PNG_WRITE_cHRM_SUPPORTED -# ifndef PNG_cHRM_SUPPORTED -# define PNG_cHRM_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_gAMA -# define PNG_WRITE_gAMA_SUPPORTED -# ifndef PNG_gAMA_SUPPORTED -# define PNG_gAMA_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_hIST -# define PNG_WRITE_hIST_SUPPORTED -# ifndef PNG_hIST_SUPPORTED -# define PNG_hIST_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iCCP -# define PNG_WRITE_iCCP_SUPPORTED -# ifndef PNG_iCCP_SUPPORTED -# define PNG_iCCP_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_iTXt -# ifndef PNG_WRITE_iTXt_SUPPORTED -# define PNG_WRITE_iTXt_SUPPORTED -# endif -# ifndef PNG_iTXt_SUPPORTED -# define PNG_iTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_oFFs -# define PNG_WRITE_oFFs_SUPPORTED -# ifndef PNG_oFFs_SUPPORTED -# define PNG_oFFs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pCAL -# define PNG_WRITE_pCAL_SUPPORTED -# ifndef PNG_pCAL_SUPPORTED -# define PNG_pCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sCAL -# define PNG_WRITE_sCAL_SUPPORTED -# ifndef PNG_sCAL_SUPPORTED -# define PNG_sCAL_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_pHYs -# define PNG_WRITE_pHYs_SUPPORTED -# ifndef PNG_pHYs_SUPPORTED -# define PNG_pHYs_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sBIT -# define PNG_WRITE_sBIT_SUPPORTED -# ifndef PNG_sBIT_SUPPORTED -# define PNG_sBIT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sPLT -# define PNG_WRITE_sPLT_SUPPORTED -# ifndef PNG_sPLT_SUPPORTED -# define PNG_sPLT_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_sRGB -# define PNG_WRITE_sRGB_SUPPORTED -# ifndef PNG_sRGB_SUPPORTED -# define PNG_sRGB_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tEXt -# define PNG_WRITE_tEXt_SUPPORTED -# ifndef PNG_tEXt_SUPPORTED -# define PNG_tEXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tIME -# define PNG_WRITE_tIME_SUPPORTED -# ifndef PNG_tIME_SUPPORTED -# define PNG_tIME_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_tRNS -# define PNG_WRITE_tRNS_SUPPORTED -# ifndef PNG_tRNS_SUPPORTED -# define PNG_tRNS_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_zTXt -# define PNG_WRITE_zTXt_SUPPORTED -# ifndef PNG_zTXt_SUPPORTED -# define PNG_zTXt_SUPPORTED -# endif -#endif -#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS -# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_UNKNOWN_CHUNKS_SUPPORTED -# endif -# ifndef PNG_NO_HANDLE_AS_UNKNOWN -# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -# endif -# endif -#endif -#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ - defined(PNG_WRITE_zTXt_SUPPORTED) -# define PNG_WRITE_TEXT_SUPPORTED -# ifndef PNG_TEXT_SUPPORTED -# define PNG_TEXT_SUPPORTED -# endif -#endif - -#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ - -/* Turn this off to disable png_read_png() and - * png_write_png() and leave the row_pointers member - * out of the info structure. - */ -#ifndef PNG_NO_INFO_IMAGE -# define PNG_INFO_IMAGE_SUPPORTED -#endif - -/* need the time information for reading tIME chunks */ -#if defined(PNG_tIME_SUPPORTED) -# if !defined(_WIN32_WCE) - /* "time.h" functions are not supported on WindowsCE */ -# include -# endif -#endif - -/* Some typedefs to get us started. These should be safe on most of the - * common platforms. The typedefs should be at least as large as the - * numbers suggest (a png_uint_32 must be at least 32 bits long), but they - * don't have to be exactly that size. Some compilers dislike passing - * unsigned shorts as function parameters, so you may be better off using - * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may - * want to have unsigned int for png_uint_32 instead of unsigned long. - */ - -typedef unsigned long png_uint_32; -typedef long png_int_32; -typedef unsigned short png_uint_16; -typedef short png_int_16; -typedef unsigned char png_byte; - -/* This is usually size_t. It is typedef'ed just in case you need it to - change (I'm not sure if you will or not, so I thought I'd be safe) */ -#ifdef PNG_SIZE_T - typedef PNG_SIZE_T png_size_t; -# define png_sizeof(x) png_convert_size(sizeof (x)) -#else - typedef size_t png_size_t; -# define png_sizeof(x) sizeof (x) -#endif - -/* The following is needed for medium model support. It cannot be in the - * PNG_INTERNAL section. Needs modification for other compilers besides - * MSC. Model independent support declares all arrays and pointers to be - * large using the far keyword. The zlib version used must also support - * model independent data. As of version zlib 1.0.4, the necessary changes - * have been made in zlib. The USE_FAR_KEYWORD define triggers other - * changes that are needed. (Tim Wegner) - */ - -/* Separate compiler dependencies (problem here is that zlib.h always - defines FAR. (SJT) */ -#ifdef __BORLANDC__ -# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) -# define LDATA 1 -# else -# define LDATA 0 -# endif - /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ -# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) -# define PNG_MAX_MALLOC_64K -# if (LDATA != 1) -# ifndef FAR -# define FAR __far -# endif -# define USE_FAR_KEYWORD -# endif /* LDATA != 1 */ - /* Possibly useful for moving data out of default segment. - * Uncomment it if you want. Could also define FARDATA as - * const if your compiler supports it. (SJT) -# define FARDATA FAR - */ -# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ -#endif /* __BORLANDC__ */ - - -/* Suggest testing for specific compiler first before testing for - * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, - * making reliance oncertain keywords suspect. (SJT) - */ - -/* MSC Medium model */ -#if defined(FAR) -# if defined(M_I86MM) -# define USE_FAR_KEYWORD -# define FARDATA FAR -# include -# endif -#endif - -/* SJT: default case */ -#ifndef FAR -# define FAR -#endif - -/* At this point FAR is always defined */ -#ifndef FARDATA -# define FARDATA -#endif - -/* Typedef for floating-point numbers that are converted - to fixed-point with a multiple of 100,000, e.g., int_gamma */ -typedef png_int_32 png_fixed_point; - -/* Add typedefs for pointers */ -typedef void FAR * png_voidp; -typedef png_byte FAR * png_bytep; -typedef png_uint_32 FAR * png_uint_32p; -typedef png_int_32 FAR * png_int_32p; -typedef png_uint_16 FAR * png_uint_16p; -typedef png_int_16 FAR * png_int_16p; -typedef PNG_CONST char FAR * png_const_charp; -typedef char FAR * png_charp; -typedef png_fixed_point FAR * png_fixed_point_p; - -#ifndef PNG_NO_STDIO -#if defined(_WIN32_WCE) -typedef HANDLE png_FILE_p; -#else -typedef FILE * png_FILE_p; -#endif -#endif - -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * png_doublep; -#endif - -/* Pointers to pointers; i.e. arrays */ -typedef png_byte FAR * FAR * png_bytepp; -typedef png_uint_32 FAR * FAR * png_uint_32pp; -typedef png_int_32 FAR * FAR * png_int_32pp; -typedef png_uint_16 FAR * FAR * png_uint_16pp; -typedef png_int_16 FAR * FAR * png_int_16pp; -typedef PNG_CONST char FAR * FAR * png_const_charpp; -typedef char FAR * FAR * png_charpp; -typedef png_fixed_point FAR * FAR * png_fixed_point_pp; -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double FAR * FAR * png_doublepp; -#endif - -/* Pointers to pointers to pointers; i.e., pointer to array */ -typedef char FAR * FAR * FAR * png_charppp; - -#if defined(PNG_1_0_X) || defined(PNG_1_2_X) -/* SPC - Is this stuff deprecated? */ -/* It'll be removed as of libpng-1.3.0 - GR-P */ -/* libpng typedefs for types in zlib. If zlib changes - * or another compression library is used, then change these. - * Eliminates need to change all the source files. - */ -typedef charf * png_zcharp; -typedef charf * FAR * png_zcharpp; -typedef z_stream FAR * png_zstreamp; -#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */ - -/* - * Define PNG_BUILD_DLL if the module being built is a Windows - * LIBPNG DLL. - * - * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. - * It is equivalent to Microsoft predefined macro _DLL that is - * automatically defined when you compile using the share - * version of the CRT (C Run-Time library) - * - * The cygwin mods make this behavior a little different: - * Define PNG_BUILD_DLL if you are building a dll for use with cygwin - * Define PNG_STATIC if you are building a static library for use with cygwin, - * -or- if you are building an application that you want to link to the - * static library. - * PNG_USE_DLL is defined by default (no user action needed) unless one of - * the other flags is defined. - */ - -#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) -# define PNG_DLL -#endif -/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. - * When building a static lib, default to no GLOBAL ARRAYS, but allow - * command-line override - */ -#if defined(__CYGWIN__) -# if !defined(PNG_STATIC) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -# else -# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) -# if defined(PNG_USE_GLOBAL_ARRAYS) -# undef PNG_USE_GLOBAL_ARRAYS -# endif -# endif -# endif -# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# define PNG_USE_LOCAL_ARRAYS -# endif -#endif - -/* Do not use global arrays (helps with building DLL's) - * They are no longer used in libpng itself, since version 1.0.5c, - * but might be required for some pre-1.0.5c applications. - */ -#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) -# if defined(PNG_NO_GLOBAL_ARRAYS) || \ - (defined(__GNUC__) && defined(PNG_DLL)) || defined(_MSC_VER) -# define PNG_USE_LOCAL_ARRAYS -# else -# define PNG_USE_GLOBAL_ARRAYS -# endif -#endif - -#if defined(__CYGWIN__) -# undef PNGAPI -# define PNGAPI __cdecl -# undef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", - * you may get warnings regarding the linkage of png_zalloc and png_zfree. - * Don't ignore those warnings; you must also reset the default calling - * convention in your compiler to match your PNGAPI, and you must build - * zlib and your applications the same way you build libpng. - */ - -#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) -# ifndef PNG_NO_MODULEDEF -# define PNG_NO_MODULEDEF -# endif -#endif - -#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) -# define PNG_IMPEXP -#endif - -#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ - (( defined(_Windows) || defined(_WINDOWS) || \ - defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) - -# ifndef PNGAPI -# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) -# define PNGAPI __cdecl -# else -# define PNGAPI _cdecl -# endif -# endif - -# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ - 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) -# define PNG_IMPEXP -# endif - -# if !defined(PNG_IMPEXP) - -# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol -# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol - - /* Borland/Microsoft */ -# if defined(_MSC_VER) || defined(__BORLANDC__) -# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) -# define PNG_EXPORT PNG_EXPORT_TYPE1 -# else -# define PNG_EXPORT PNG_EXPORT_TYPE2 -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __export -# else -# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in - VC++ */ -# endif /* Exists in Borland C++ for - C++ classes (== huge) */ -# endif -# endif - -# if !defined(PNG_IMPEXP) -# if defined(PNG_BUILD_DLL) -# define PNG_IMPEXP __declspec(dllexport) -# else -# define PNG_IMPEXP __declspec(dllimport) -# endif -# endif -# endif /* PNG_IMPEXP */ -#else /* !(DLL || non-cygwin WINDOWS) */ -# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) -# ifndef PNGAPI -# define PNGAPI _System -# endif -# else -# if 0 /* ... other platforms, with other meanings */ -# endif -# endif -#endif - -#ifndef PNGAPI -# define PNGAPI -#endif -#ifndef PNG_IMPEXP -# define PNG_IMPEXP -#endif - -#ifdef PNG_BUILDSYMS -# ifndef PNG_EXPORT -# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END -# endif -# ifdef PNG_USE_GLOBAL_ARRAYS -# ifndef PNG_EXPORT_VAR -# define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT -# endif -# endif -#endif - -#ifndef PNG_EXPORT -# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol -#endif - -#ifdef PNG_USE_GLOBAL_ARRAYS -# ifndef PNG_EXPORT_VAR -# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type -# endif -#endif - -/* User may want to use these so they are not in PNG_INTERNAL. Any library - * functions that are passed far data must be model independent. - */ - -#ifndef PNG_ABORT -# define PNG_ABORT() abort() -#endif - -#ifdef PNG_SETJMP_SUPPORTED -# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) -#else -# define png_jmpbuf(png_ptr) \ - (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) -#endif - -#if defined(USE_FAR_KEYWORD) /* memory model independent fns */ -/* use this to make far-to-near assignments */ -# define CHECK 1 -# define NOCHECK 0 -# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) -# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) -# define png_snprintf _fsnprintf /* Added to v 1.2.19 */ -# define png_strlen _fstrlen -# define png_memcmp _fmemcmp /* SJT: added */ -# define png_memcpy _fmemcpy -# define png_memset _fmemset -#else /* use the usual functions */ -# define CVT_PTR(ptr) (ptr) -# define CVT_PTR_NOCHECK(ptr) (ptr) -# ifndef PNG_NO_SNPRINTF -# ifdef _MSC_VER -# define png_snprintf _snprintf /* Added to v 1.2.19 */ -# define png_snprintf2 _snprintf -# define png_snprintf6 _snprintf -# else -# define png_snprintf snprintf /* Added to v 1.2.19 */ -# define png_snprintf2 snprintf -# define png_snprintf6 snprintf -# endif -# else - /* You don't have or don't want to use snprintf(). Caution: Using - * sprintf instead of snprintf exposes your application to accidental - * or malevolent buffer overflows. If you don't have snprintf() - * as a general rule you should provide one (you can get one from - * Portable OpenSSH). */ -# define png_snprintf(s1,n,fmt,x1) sprintf(s1,fmt,x1) -# define png_snprintf2(s1,n,fmt,x1,x2) sprintf(s1,fmt,x1,x2) -# define png_snprintf6(s1,n,fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(s1,fmt,x1,x2,x3,x4,x5,x6) -# endif -# define png_strlen strlen -# define png_memcmp memcmp /* SJT: added */ -# define png_memcpy memcpy -# define png_memset memset -#endif -/* End of memory model independent support */ - -/* Just a little check that someone hasn't tried to define something - * contradictory. - */ -#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) -# undef PNG_ZBUF_SIZE -# define PNG_ZBUF_SIZE 65536L -#endif - -/* Added at libpng-1.2.8 */ -#endif /* PNG_VERSION_INFO_ONLY */ - -#endif /* PNGCONF_H */ diff --git a/WadInstaller_Source/source/libpng/pngu/pngu.c b/WadInstaller_Source/source/libpng/pngu/pngu.c deleted file mode 100644 index e2cfb7f..0000000 --- a/WadInstaller_Source/source/libpng/pngu/pngu.c +++ /dev/null @@ -1,1132 +0,0 @@ -/******************************************************************************************** - -PNGU Version : 0.2a - -Coder : frontier - -More info : http://frontier-dev.net - -********************************************************************************************/ -#include -#include -#include "pngu.h" -#include "../png.h" - - -// Constants -#define PNGU_SOURCE_BUFFER 1 -#define PNGU_SOURCE_DEVICE 2 - - -// Prototypes of helper functions -int pngu_info (IMGCTX ctx); -int pngu_decode (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, PNGU_u32 stripAlpha); -void pngu_free_info (IMGCTX ctx); -void pngu_read_data_from_buffer (png_structp png_ptr, png_bytep data, png_size_t length); -void pngu_write_data_to_buffer (png_structp png_ptr, png_bytep data, png_size_t length); -void pngu_flush_data_to_buffer (png_structp png_ptr); -int pngu_clamp (int value, int min, int max); - - -// PNGU Image context struct -struct _IMGCTX -{ - int source; - void *buffer; - char *filename; - PNGU_u32 cursor; - - PNGU_u32 propRead; - PNGUPROP prop; - - PNGU_u32 infoRead; - png_structp png_ptr; - png_infop info_ptr; - FILE *fd; - - png_bytep *row_pointers; - png_bytep img_data; -}; - - -// PNGU Implementation // - -IMGCTX PNGU_SelectImageFromBuffer (const void *buffer) -{ - IMGCTX ctx = NULL; - - if (!buffer) - return NULL; - - ctx = malloc (sizeof (struct _IMGCTX)); - if (!ctx) - return NULL; - - ctx->buffer = (void *) buffer; - ctx->source = PNGU_SOURCE_BUFFER; - ctx->cursor = 0; - ctx->filename = NULL; - ctx->propRead = 0; - ctx->infoRead = 0; - - return ctx; -} - - -IMGCTX PNGU_SelectImageFromDevice (const char *filename) -{ - IMGCTX ctx = NULL; - - if (!filename) - return NULL; - - ctx = malloc (sizeof (struct _IMGCTX)); - if (!ctx) - return NULL; - - ctx->buffer = NULL; - ctx->source = PNGU_SOURCE_DEVICE; - ctx->cursor = 0; - - ctx->filename = malloc (strlen (filename) + 1); - if (!ctx->filename) - { - free (ctx); - return NULL; - } - strcpy(ctx->filename, filename); - - ctx->propRead = 0; - ctx->infoRead = 0; - - return ctx; -} - - -void PNGU_ReleaseImageContext (IMGCTX ctx) -{ - if (!ctx) - return; - - if (ctx->filename) - free (ctx->filename); - - if ((ctx->propRead) && (ctx->prop.trans)) - free (ctx->prop.trans); - - pngu_free_info (ctx); - - free (ctx); -} - - -int PNGU_GetImageProperties (IMGCTX ctx, PNGUPROP *imgprop) -{ - int res; - - if (!ctx->propRead) - { - res = pngu_info (ctx); - if (res != PNGU_OK) - return res; - } - - *imgprop = ctx->prop; - - return PNGU_OK; -} - - -int PNGU_DecodeToYCbYCr (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride) -{ - int result; - PNGU_u32 x, y, buffWidth; - - // width needs to be divisible by two - if (width % 2) - return PNGU_ODD_WIDTH; - - // stride needs to be divisible by two - if (stride % 2) - return PNGU_ODD_STRIDE; - - result = pngu_decode (ctx, width, height, 1); - if (result != PNGU_OK) - return result; - - // Copy image to the output buffer - buffWidth = (width + stride) / 2; - for (y = 0; y < height; y++) - for (x = 0; x < (width / 2); x++) - ((PNGU_u32 *)buffer)[y*buffWidth+x] = PNGU_RGB8_TO_YCbYCr (*(ctx->row_pointers[y]+x*6), *(ctx->row_pointers[y]+x*6+1), *(ctx->row_pointers[y]+x*6+2), - *(ctx->row_pointers[y]+x*6+3), *(ctx->row_pointers[y]+x*6+4), *(ctx->row_pointers[y]+x*6+5)); - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_DecodeToRGB565 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride) -{ - int result; - PNGU_u32 x, y, buffWidth; - - result = pngu_decode (ctx, width, height, 1); - if (result != PNGU_OK) - return result; - - buffWidth = width + stride; - - // Copy image to the output buffer - for (y = 0; y < height; y++) - for (x = 0; x < width; x++) - ((PNGU_u16 *)buffer)[y*buffWidth+x] = - (((PNGU_u16) (ctx->row_pointers[y][x*3] & 0xF8)) << 8) | - (((PNGU_u16) (ctx->row_pointers[y][x*3+1] & 0xFC)) << 3) | - (((PNGU_u16) (ctx->row_pointers[y][x*3+2] & 0xF8)) >> 3); - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_DecodeToRGBA8 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride, PNGU_u8 default_alpha) -{ - int result; - PNGU_u32 x, y, buffWidth; - - result = pngu_decode (ctx, width, height, 0); - if (result != PNGU_OK) - return result; - - buffWidth = width + stride; - - // Check is source image has an alpha channel - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA) ) - { - // Alpha channel present, copy image to the output buffer - for (y = 0; y < height; y++) - memcpy (buffer + (y * buffWidth * 4), ctx->row_pointers[y], width * 4); - } - else - { - // No alpha channel present, copy image to the output buffer - for (y = 0; y < height; y++) - for (x = 0; x < width; x++) - ((PNGU_u32 *)buffer)[y*buffWidth+x] = - (((PNGU_u32) ctx->row_pointers[y][x*3]) << 24) | - (((PNGU_u32) ctx->row_pointers[y][x*3+1]) << 16) | - (((PNGU_u32) ctx->row_pointers[y][x*3+2]) << 8) | - ((PNGU_u32) default_alpha); - } - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_DecodeTo4x4RGB565 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer) -{ - int result; - PNGU_u32 x, y, qwidth, qheight; - - // width and height need to be divisible by four - if ((width % 4) || (height % 4)) - return PNGU_INVALID_WIDTH_OR_HEIGHT; - - result = pngu_decode (ctx, width, height, 1); - if (result != PNGU_OK) - return result; - - // Copy image to the output buffer - qwidth = width / 4; - qheight = height / 4; - - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 4; - - PNGU_u64 field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*12)); - PNGU_u64 field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase] = - (((field64 & 0xF800000000000000ULL) | ((field64 & 0xFC000000000000ULL) << 3) | ((field64 & 0xF80000000000ULL) << 5)) | - (((field64 & 0xF800000000ULL) << 8) | ((field64 & 0xFC000000ULL) << 11) | ((field64 & 0xF80000ULL) << 13)) | - (((field64 & 0xF800ULL) << 16) | ((field64 & 0xFCULL) << 19) | ((field32 & 0xF8000000ULL) >> 11)) | - (((field32 & 0xF80000ULL) >> 8) | ((field32 & 0xFC00ULL) >> 5) | ((field32 & 0xF8ULL) >> 3))); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+1]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+1] = - (((field64 & 0xF800000000000000ULL) | ((field64 & 0xFC000000000000ULL) << 3) | ((field64 & 0xF80000000000ULL) << 5)) | - (((field64 & 0xF800000000ULL) << 8) | ((field64 & 0xFC000000ULL) << 11) | ((field64 & 0xF80000ULL) << 13)) | - (((field64 & 0xF800ULL) << 16) | ((field64 & 0xFCULL) << 19) | ((field32 & 0xF8000000ULL) >> 11)) | - (((field32 & 0xF80000ULL) >> 8) | ((field32 & 0xFC00ULL) >> 5) | ((field32 & 0xF8ULL) >> 3))); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+2]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+2] = - (((field64 & 0xF800000000000000ULL) | ((field64 & 0xFC000000000000ULL) << 3) | ((field64 & 0xF80000000000ULL) << 5)) | - (((field64 & 0xF800000000ULL) << 8) | ((field64 & 0xFC000000ULL) << 11) | ((field64 & 0xF80000ULL) << 13)) | - (((field64 & 0xF800ULL) << 16) | ((field64 & 0xFCULL) << 19) | ((field32 & 0xF8000000ULL) >> 11)) | - (((field32 & 0xF80000ULL) >> 8) | ((field32 & 0xFC00ULL) >> 5) | ((field32 & 0xF8ULL) >> 3))); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+3]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+3] = - (((field64 & 0xF800000000000000ULL) | ((field64 & 0xFC000000000000ULL) << 3) | ((field64 & 0xF80000000000ULL) << 5)) | - (((field64 & 0xF800000000ULL) << 8) | ((field64 & 0xFC000000ULL) << 11) | ((field64 & 0xF80000ULL) << 13)) | - (((field64 & 0xF800ULL) << 16) | ((field64 & 0xFCULL) << 19) | ((field32 & 0xF8000000ULL) >> 11)) | - (((field32 & 0xF80000ULL) >> 8) | ((field32 & 0xFC00ULL) >> 5) | ((field32 & 0xF8ULL) >> 3))); - } - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_DecodeTo4x4RGB5A3 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u8 default_alpha) -{ - int result; - PNGU_u32 x, y, qwidth, qheight; - PNGU_u64 alphaMask; - - // width and height need to be divisible by four - if ((width % 4) || (height % 4)) - return PNGU_INVALID_WIDTH_OR_HEIGHT; - - result = pngu_decode (ctx, width, height, 0); - if (result != PNGU_OK) - return result; - - // Init some vars - qwidth = width / 4; - qheight = height / 4; - - // Check is source image has an alpha channel - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA) ) - { - // Alpha channel present, copy image to the output buffer - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 4; - PNGU_u64 tmp; - - PNGU_u64 fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*16)); - PNGU_u64 fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*16+8)); - // If first pixel is opaque set MSB to 1 and encode colors in RGB555, else set MSB to 0 and encode colors in ARGB3444 - if ((fieldA & 0xE000000000ULL) == 0xE000000000ULL) - tmp = 0x8000000000000000ULL | ((fieldA & 0xF800000000000000ULL) >> 1) | ((fieldA & 0xF8000000000000ULL) << 2) | ((fieldA & 0xF80000000000ULL) << 5); - else - tmp = ((fieldA & 0xE000000000ULL) << 23) | ((fieldA & 0xF000000000000000ULL) >> 4) | (fieldA & 0xF0000000000000ULL) | ((fieldA & 0xF00000000000ULL) << 4); - - // If second pixel is opaque set MSB to 1 and encode colors in RGB555, else set MSB to 0 and encode colors in ARGB3444 - if ((fieldA & 0xE0ULL) == 0xE0ULL) - tmp = tmp | 0x800000000000ULL | ((fieldA & 0xF8000000ULL) << 15) | ((fieldA & 0xF80000ULL) << 18) | ((fieldA & 0xF800ULL) << 21); - else - tmp = tmp | ((fieldA & 0xE0ULL) << 39) | ((fieldA & 0xF0000000ULL) << 12) | ((fieldA & 0xF00000ULL) << 16) | ((fieldA & 0xF000ULL) << 20); - - // If third pixel is opaque set MSB to 1 and encode colors in RGB555, else set MSB to 0 and encode colors in ARGB3444 - if ((fieldB & 0xE000000000ULL) == 0xE000000000ULL) - tmp = tmp | 0x80000000ULL | ((fieldB & 0xF800000000000000ULL) >> 33) | ((fieldB & 0xF8000000000000ULL) >> 30) | ((fieldB & 0xF80000000000ULL) >> 27); - else - tmp = tmp | ((fieldB & 0xE000000000ULL) >> 9) | ((fieldB & 0xF000000000000000ULL) >> 36) | ((fieldB & 0xF0000000000000ULL) >> 32) | ((fieldB & 0xF00000000000ULL) >> 28); - - // If fourth pixel is opaque set MSB to 1 and encode colors in RGB555, else set MSB to 0 and encode colors in ARGB3444 - if ((fieldB & 0xE0ULL) == 0xE0ULL) - tmp = tmp | 0x8000ULL | ((fieldB & 0xF8000000ULL) >> 17) | ((fieldB & 0xF80000ULL) >> 14) | ((fieldB & 0xF800ULL) >> 11); - else - tmp = tmp | ((fieldB & 0xE0ULL) << 7) | ((fieldB & 0xF0000000ULL) >> 20) | ((fieldB & 0xF00000ULL) >> 16) | ((fieldB & 0xF000ULL) >> 12); - ((PNGU_u64 *) buffer)[blockbase] = tmp; - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*16+8)); - if ((fieldA & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = 0x8000000000000000ULL | ((fieldA & 0xF800000000000000ULL) >> 1) | ((fieldA & 0xF8000000000000ULL) << 2) | ((fieldA & 0xF80000000000ULL) << 5); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = ((fieldA & 0xE000000000ULL) << 23) | ((fieldA & 0xF000000000000000ULL) >> 4) | (fieldA & 0xF0000000000000ULL) | ((fieldA & 0xF00000000000ULL) << 4); - - if ((fieldA & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x800000000000ULL | ((fieldA & 0xF8000000ULL) << 15) | ((fieldA & 0xF80000ULL) << 18) | ((fieldA & 0xF800ULL) << 21); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldA & 0xE0ULL) << 39) | ((fieldA & 0xF0000000ULL) << 12) | ((fieldA & 0xF00000ULL) << 16) | ((fieldA & 0xF000ULL) << 20); - - if ((fieldB & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x80000000ULL | ((fieldB & 0xF800000000000000ULL) >> 33) | ((fieldB & 0xF8000000000000ULL) >> 30) | ((fieldB & 0xF80000000000ULL) >> 27); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE000000000ULL) >> 9) | ((fieldB & 0xF000000000000000ULL) >> 36) | ((fieldB & 0xF0000000000000ULL) >> 32) | ((fieldB & 0xF00000000000ULL) >> 28); - - if ((fieldB & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x8000ULL | ((fieldB & 0xF8000000ULL) >> 17) | ((fieldB & 0xF80000ULL) >> 14) | ((fieldB & 0xF800ULL) >> 11); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE0ULL) << 7) | ((fieldB & 0xF0000000ULL) >> 20) | ((fieldB & 0xF00000ULL) >> 16) | ((fieldB & 0xF000ULL) >> 12); - ((PNGU_u64 *) buffer)[blockbase+1] = tmp; - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*16+8)); - if ((fieldA & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = 0x8000000000000000ULL | ((fieldA & 0xF800000000000000ULL) >> 1) | ((fieldA & 0xF8000000000000ULL) << 2) | ((fieldA & 0xF80000000000ULL) << 5); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = ((fieldA & 0xE000000000ULL) << 23) | ((fieldA & 0xF000000000000000ULL) >> 4) | (fieldA & 0xF0000000000000ULL) | ((fieldA & 0xF00000000000ULL) << 4); - - if ((fieldA & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x800000000000ULL | ((fieldA & 0xF8000000ULL) << 15) | ((fieldA & 0xF80000ULL) << 18) | ((fieldA & 0xF800ULL) << 21); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldA & 0xE0ULL) << 39) | ((fieldA & 0xF0000000ULL) << 12) | ((fieldA & 0xF00000ULL) << 16) | ((fieldA & 0xF000ULL) << 20); - - if ((fieldB & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x80000000ULL | ((fieldB & 0xF800000000000000ULL) >> 33) | ((fieldB & 0xF8000000000000ULL) >> 30) | ((fieldB & 0xF80000000000ULL) >> 27); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE000000000ULL) >> 9) | ((fieldB & 0xF000000000000000ULL) >> 36) | ((fieldB & 0xF0000000000000ULL) >> 32) | ((fieldB & 0xF00000000000ULL) >> 28); - - if ((fieldB & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x8000ULL | ((fieldB & 0xF8000000ULL) >> 17) | ((fieldB & 0xF80000ULL) >> 14) | ((fieldB & 0xF800ULL) >> 11); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE0ULL) << 7) | ((fieldB & 0xF0000000ULL) >> 20) | ((fieldB & 0xF00000ULL) >> 16) | ((fieldB & 0xF000ULL) >> 12); - ((PNGU_u64 *) buffer)[blockbase+2] = tmp; - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*16+8)); - if ((fieldA & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = 0x8000000000000000ULL | ((fieldA & 0xF800000000000000ULL) >> 1) | ((fieldA & 0xF8000000000000ULL) << 2) | ((fieldA & 0xF80000000000ULL) << 5); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = ((fieldA & 0xE000000000ULL) << 23) | ((fieldA & 0xF000000000000000ULL) >> 4) | (fieldA & 0xF0000000000000ULL) | ((fieldA & 0xF00000000000ULL) << 4); - - if ((fieldA & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x800000000000ULL | ((fieldA & 0xF8000000ULL) << 15) | ((fieldA & 0xF80000ULL) << 18) | ((fieldA & 0xF800ULL) << 21); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldA & 0xE0ULL) << 39) | ((fieldA & 0xF0000000ULL) << 12) | ((fieldA & 0xF00000ULL) << 16) | ((fieldA & 0xF000ULL) << 20); - - if ((fieldB & 0xE000000000ULL) == 0xE000000000ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x80000000ULL | ((fieldB & 0xF800000000000000ULL) >> 33) | ((fieldB & 0xF8000000000000ULL) >> 30) | ((fieldB & 0xF80000000000ULL) >> 27); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE000000000ULL) >> 9) | ((fieldB & 0xF000000000000000ULL) >> 36) | ((fieldB & 0xF0000000000000ULL) >> 32) | ((fieldB & 0xF00000000000ULL) >> 28); - - if ((fieldB & 0xE0ULL) == 0xE0ULL) - // Opaque pixel, so set MSB to 1 and encode colors in RGB555 - tmp = tmp | 0x8000ULL | ((fieldB & 0xF8000000ULL) >> 17) | ((fieldB & 0xF80000ULL) >> 14) | ((fieldB & 0xF800ULL) >> 11); - else - // Tranlucid pixel, so set MSB to 0 and encode colors in ARGB3444 - tmp = tmp | ((fieldB & 0xE0ULL) << 7) | ((fieldB & 0xF0000000ULL) >> 20) | ((fieldB & 0xF00000ULL) >> 16) | ((fieldB & 0xF000ULL) >> 12); - ((PNGU_u64 *) buffer)[blockbase+3] = tmp; - } - } - else - { - // No alpha channel present, copy image to the output buffer - default_alpha = (default_alpha >> 5); - if (default_alpha == 7) - { - // The user wants an opaque texture, so set MSB to 1 and encode colors in RGB555 - alphaMask = 0x8000800080008000ULL; - - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 4; - - PNGU_u64 field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*12)); - PNGU_u64 field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase] = - alphaMask | ((field64 & 0xF800000000000000ULL) >> 1) | ((field64 & 0xF8000000000000ULL) << 2) | - ((field64 & 0xF80000000000ULL) << 5) | ((field64 & 0xF800000000ULL) << 7) | ((field64 & 0xF8000000ULL) << 10) | - ((field64 & 0xF80000ULL) << 13) | ((field64 & 0xF800ULL) << 15) | ((field64 & 0xF8ULL) << 18) | - ((field32 & 0xF8000000ULL) >> 11) | ((field32 & 0xF80000ULL) >> 9) | ((field32 & 0xF800ULL) >> 6) | ((field32 & 0xF8ULL) >> 3); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+1]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+1] = - alphaMask | ((field64 & 0xF800000000000000ULL) >> 1) | ((field64 & 0xF8000000000000ULL) << 2) | - ((field64 & 0xF80000000000ULL) << 5) | ((field64 & 0xF800000000ULL) << 7) | ((field64 & 0xF8000000ULL) << 10) | - ((field64 & 0xF80000ULL) << 13) | ((field64 & 0xF800ULL) << 15) | ((field64 & 0xF8ULL) << 18) | - ((field32 & 0xF8000000ULL) >> 11) | ((field32 & 0xF80000ULL) >> 9) | ((field32 & 0xF800ULL) >> 6) | ((field32 & 0xF8ULL) >> 3); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+2]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+2] = - alphaMask | ((field64 & 0xF800000000000000ULL) >> 1) | ((field64 & 0xF8000000000000ULL) << 2) | - ((field64 & 0xF80000000000ULL) << 5) | ((field64 & 0xF800000000ULL) << 7) | ((field64 & 0xF8000000ULL) << 10) | - ((field64 & 0xF80000ULL) << 13) | ((field64 & 0xF800ULL) << 15) | ((field64 & 0xF8ULL) << 18) | - ((field32 & 0xF8000000ULL) >> 11) | ((field32 & 0xF80000ULL) >> 9) | ((field32 & 0xF800ULL) >> 6) | ((field32 & 0xF8ULL) >> 3); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+3]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+3] = - alphaMask | ((field64 & 0xF800000000000000ULL) >> 1) | ((field64 & 0xF8000000000000ULL) << 2) | - ((field64 & 0xF80000000000ULL) << 5) | ((field64 & 0xF800000000ULL) << 7) | ((field64 & 0xF8000000ULL) << 10) | - ((field64 & 0xF80000ULL) << 13) | ((field64 & 0xF800ULL) << 15) | ((field64 & 0xF8ULL) << 18) | - ((field32 & 0xF8000000ULL) >> 11) | ((field32 & 0xF80000ULL) >> 9) | ((field32 & 0xF800ULL) >> 6) | ((field32 & 0xF8ULL) >> 3); - } - } - else - { - // The user wants a translucid texture, so set MSB to 0 and encode colors in ARGB3444 - default_alpha = (default_alpha << 4); - alphaMask = (((PNGU_u64) default_alpha) << 56) | (((PNGU_u64) default_alpha) << 40) | - (((PNGU_u64) default_alpha) << 24) | (((PNGU_u64) default_alpha) << 8); - - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 4; - - PNGU_u64 field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*12)); - PNGU_u64 field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase] = - alphaMask | ((field64 & 0xF000000000000000ULL) >> 4) | (field64 & 0xF0000000000000ULL) | ((field64 & 0xF00000000000ULL) << 4) | - ((field64 & 0xF000000000ULL) << 4) | ((field64 & 0xF0000000ULL) << 8) | ((field64 & 0xF00000ULL) << 12) | - ((field64 & 0xF000ULL) << 12) | ((field64 & 0xF0ULL) << 16) | ((field32 & 0xF0000000ULL) >> 12) | - ((field32 & 0xF00000ULL) >> 12) | ((field32 & 0xF000ULL) >> 8) | ((field32 & 0xF0ULL) >> 4); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+1]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+1] = - alphaMask | ((field64 & 0xF000000000000000ULL) >> 4) | (field64 & 0xF0000000000000ULL) | ((field64 & 0xF00000000000ULL) << 4) | - ((field64 & 0xF000000000ULL) << 4) | ((field64 & 0xF0000000ULL) << 8) | ((field64 & 0xF00000ULL) << 12) | - ((field64 & 0xF000ULL) << 12) | ((field64 & 0xF0ULL) << 16) | ((field32 & 0xF0000000ULL) >> 12) | - ((field32 & 0xF00000ULL) >> 12) | ((field32 & 0xF000ULL) >> 8) | ((field32 & 0xF0ULL) >> 4); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+2]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+2] = - alphaMask | ((field64 & 0xF000000000000000ULL) >> 4) | (field64 & 0xF0000000000000ULL) | ((field64 & 0xF00000000000ULL) << 4) | - ((field64 & 0xF000000000ULL) << 4) | ((field64 & 0xF0000000ULL) << 8) | ((field64 & 0xF00000ULL) << 12) | - ((field64 & 0xF000ULL) << 12) | ((field64 & 0xF0ULL) << 16) | ((field32 & 0xF0000000ULL) >> 12) | - ((field32 & 0xF00000ULL) >> 12) | ((field32 & 0xF000ULL) >> 8) | ((field32 & 0xF0ULL) >> 4); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+3]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+3] = - alphaMask | ((field64 & 0xF000000000000000ULL) >> 4) | (field64 & 0xF0000000000000ULL) | ((field64 & 0xF00000000000ULL) << 4) | - ((field64 & 0xF000000000ULL) << 4) | ((field64 & 0xF0000000ULL) << 8) | ((field64 & 0xF00000ULL) << 12) | - ((field64 & 0xF000ULL) << 12) | ((field64 & 0xF0ULL) << 16) | ((field32 & 0xF0000000ULL) >> 12) | - ((field32 & 0xF00000ULL) >> 12) | ((field32 & 0xF000ULL) >> 8) | ((field32 & 0xF0ULL) >> 4); - } - } - } - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_DecodeTo4x4RGBA8 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u8 default_alpha) -{ - int result; - PNGU_u32 x, y, qwidth, qheight; - PNGU_u64 alphaMask; - - // width and height need to be divisible by four - if ((width % 4) || (height % 4)) - return PNGU_INVALID_WIDTH_OR_HEIGHT; - - result = pngu_decode (ctx, width, height, 0); - if (result != PNGU_OK) - return result; - - // Init some variables - qwidth = width / 4; - qheight = height / 4; - - // Check is source image has an alpha channel - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA) ) - { - // Alpha channel present, copy image to the output buffer - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 8; - - PNGU_u64 fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*16)); - PNGU_u64 fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*16+8)); - ((PNGU_u64 *) buffer)[blockbase] = - ((fieldA & 0xFF00000000ULL) << 24) | ((fieldA & 0xFF00000000000000ULL) >> 8) | - ((fieldA & 0xFFULL) << 40) | ((fieldA & 0xFF000000ULL) << 8) | - ((fieldB & 0xFF00000000ULL) >> 8) | ((fieldB & 0xFF00000000000000ULL) >> 40) | - ((fieldB & 0xFFULL) << 8) | ((fieldB & 0xFF000000ULL) >> 24); - ((PNGU_u64 *) buffer)[blockbase+4] = - ((fieldA & 0xFFFF0000000000ULL) << 8) | ((fieldA & 0xFFFF00ULL) << 24) | - ((fieldB & 0xFFFF0000000000ULL) >> 24) | ((fieldB & 0xFFFF00ULL) >> 8); - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*16+8)); - ((PNGU_u64 *) buffer)[blockbase+1] = - ((fieldA & 0xFF00000000ULL) << 24) | ((fieldA & 0xFF00000000000000ULL) >> 8) | - ((fieldA & 0xFFULL) << 40) | ((fieldA & 0xFF000000ULL) << 8) | - ((fieldB & 0xFF00000000ULL) >> 8) | ((fieldB & 0xFF00000000000000ULL) >> 40) | - ((fieldB & 0xFFULL) << 8) | ((fieldB & 0xFF000000ULL) >> 24); - ((PNGU_u64 *) buffer)[blockbase+5] = - ((fieldA & 0xFFFF0000000000ULL) << 8) | ((fieldA & 0xFFFF00ULL) << 24) | - ((fieldB & 0xFFFF0000000000ULL) >> 24) | ((fieldB & 0xFFFF00ULL) >> 8); - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*16+8)); - ((PNGU_u64 *) buffer)[blockbase+2] = - ((fieldA & 0xFF00000000ULL) << 24) | ((fieldA & 0xFF00000000000000ULL) >> 8) | - ((fieldA & 0xFFULL) << 40) | ((fieldA & 0xFF000000ULL) << 8) | - ((fieldB & 0xFF00000000ULL) >> 8) | ((fieldB & 0xFF00000000000000ULL) >> 40) | - ((fieldB & 0xFFULL) << 8) | ((fieldB & 0xFF000000ULL) >> 24); - ((PNGU_u64 *) buffer)[blockbase+6] = - ((fieldA & 0xFFFF0000000000ULL) << 8) | ((fieldA & 0xFFFF00ULL) << 24) | - ((fieldB & 0xFFFF0000000000ULL) >> 24) | ((fieldB & 0xFFFF00ULL) >> 8); - - fieldA = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*16)); - fieldB = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*16+8)); - ((PNGU_u64 *) buffer)[blockbase+3] = - ((fieldA & 0xFF00000000ULL) << 24) | ((fieldA & 0xFF00000000000000ULL) >> 8) | - ((fieldA & 0xFFULL) << 40) | ((fieldA & 0xFF000000ULL) << 8) | - ((fieldB & 0xFF00000000ULL) >> 8) | ((fieldB & 0xFF00000000000000ULL) >> 40) | - ((fieldB & 0xFFULL) << 8) | ((fieldB & 0xFF000000ULL) >> 24); - ((PNGU_u64 *) buffer)[blockbase+7] = - ((fieldA & 0xFFFF0000000000ULL) << 8) | ((fieldA & 0xFFFF00ULL) << 24) | - ((fieldB & 0xFFFF0000000000ULL) >> 24) | ((fieldB & 0xFFFF00ULL) >> 8); - } - } - else - { - // No alpha channel present, copy image to the output buffer - alphaMask = (((PNGU_u64)default_alpha) << 56) | (((PNGU_u64)default_alpha) << 40) | - (((PNGU_u64)default_alpha) << 24) | (((PNGU_u64)default_alpha) << 8); - - for (y = 0; y < qheight; y++) - for (x = 0; x < qwidth; x++) - { - int blockbase = (y * qwidth + x) * 8; - - PNGU_u64 field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4]+x*12)); - PNGU_u64 field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase] = - (((field64 & 0xFF00000000000000ULL) >> 8) | (field64 & 0xFF00000000ULL) | - ((field64 & 0xFF00ULL) << 8) | ((field32 & 0xFF0000ULL) >> 16) | alphaMask); - ((PNGU_u64 *) buffer)[blockbase+4] = - (((field64 & 0xFFFF0000000000ULL) << 8) | ((field64 & 0xFFFF0000ULL) << 16) | - ((field64 & 0xFFULL) << 24) | ((field32 & 0xFF000000ULL) >> 8) | (field32 & 0xFFFFULL)); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+1]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+1]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+1] = - (((field64 & 0xFF00000000000000ULL) >> 8) | (field64 & 0xFF00000000ULL) | - ((field64 & 0xFF00ULL) << 8) | ((field32 & 0xFF0000ULL) >> 16) | alphaMask); - ((PNGU_u64 *) buffer)[blockbase+5] = - (((field64 & 0xFFFF0000000000ULL) << 8) | ((field64 & 0xFFFF0000ULL) << 16) | - ((field64 & 0xFFULL) << 24) | ((field32 & 0xFF000000ULL) >> 8) | (field32 & 0xFFFFULL)); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+2]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+2]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+2] = - (((field64 & 0xFF00000000000000ULL) >> 8) | (field64 & 0xFF00000000ULL) | - ((field64 & 0xFF00ULL) << 8) | ((field32 & 0xFF0000ULL) >> 16) | alphaMask); - ((PNGU_u64 *) buffer)[blockbase+6] = - (((field64 & 0xFFFF0000000000ULL) << 8) | ((field64 & 0xFFFF0000ULL) << 16) | - ((field64 & 0xFFULL) << 24) | ((field32 & 0xFF000000ULL) >> 8) | (field32 & 0xFFFFULL)); - - field64 = *((PNGU_u64 *)(ctx->row_pointers[y*4+3]+x*12)); - field32 = (PNGU_u64) *((PNGU_u32 *)(ctx->row_pointers[y*4+3]+x*12+8)); - ((PNGU_u64 *) buffer)[blockbase+3] = - (((field64 & 0xFF00000000000000ULL) >> 8) | (field64 & 0xFF00000000ULL) | - ((field64 & 0xFF00ULL) << 8) | ((field32 & 0xFF0000ULL) >> 16) | alphaMask); - ((PNGU_u64 *) buffer)[blockbase+7] = - (((field64 & 0xFFFF0000000000ULL) << 8) | ((field64 & 0xFFFF0000ULL) << 16) | - ((field64 & 0xFFULL) << 24) | ((field32 & 0xFF000000ULL) >> 8) | (field32 & 0xFFFFULL)); - } - } - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - - // Success - return PNGU_OK; -} - - -int PNGU_EncodeFromYCbYCr (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride) -{ - png_uint_32 rowbytes; - PNGU_u32 x, y, buffWidth; - - // Erase from the context any readed info - pngu_free_info (ctx); - ctx->propRead = 0; - - // Check if the user has selected a file to write the image - if (ctx->source == PNGU_SOURCE_BUFFER); - - else if (ctx->source == PNGU_SOURCE_DEVICE) - { - // Open file - if (!(ctx->fd = fopen (ctx->filename, "wb"))) - return PNGU_CANT_OPEN_FILE; - } - - else - return PNGU_NO_FILE_SELECTED; - - // Allocation of libpng structs - ctx->png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!(ctx->png_ptr)) - { - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_LIB_ERROR; - } - - ctx->info_ptr = png_create_info_struct (ctx->png_ptr); - if (!(ctx->info_ptr)) - { - png_destroy_write_struct (&(ctx->png_ptr), (png_infopp)NULL); - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_LIB_ERROR; - } - - if (ctx->source == PNGU_SOURCE_BUFFER) - { - // Installation of our custom data writer function - ctx->cursor = 0; - png_set_write_fn (ctx->png_ptr, ctx, pngu_write_data_to_buffer, pngu_flush_data_to_buffer); - } - else if (ctx->source == PNGU_SOURCE_DEVICE) - { - // Default data writer uses function fwrite, so it needs to use our FILE* - png_init_io (ctx->png_ptr, ctx->fd); - } - - // Setup output file properties - png_set_IHDR (ctx->png_ptr, ctx->info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - // Allocate memory to store the image in RGB format - rowbytes = width * 3; - if (rowbytes % 4) - rowbytes = ((rowbytes / 4) + 1) * 4; // Add extra padding so each row starts in a 4 byte boundary - - ctx->img_data = malloc (rowbytes * height); - if (!ctx->img_data) - { - png_destroy_write_struct (&(ctx->png_ptr), (png_infopp)NULL); - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_LIB_ERROR; - } - - ctx->row_pointers = malloc (sizeof (png_bytep) * height); - if (!ctx->row_pointers) - { - png_destroy_write_struct (&(ctx->png_ptr), (png_infopp)NULL); - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_LIB_ERROR; - } - - // Encode YCbYCr image into RGB8 format - buffWidth = (width + stride) / 2; - for (y = 0; y < height; y++) - { - ctx->row_pointers[y] = ctx->img_data + (y * rowbytes); - - for (x = 0; x < (width / 2); x++) - PNGU_YCbYCr_TO_RGB8 ( ((PNGU_u32 *)buffer)[y*buffWidth+x], - ((PNGU_u8 *) ctx->row_pointers[y]+x*6), ((PNGU_u8 *) ctx->row_pointers[y]+x*6+1), - ((PNGU_u8 *) ctx->row_pointers[y]+x*6+2), ((PNGU_u8 *) ctx->row_pointers[y]+x*6+3), - ((PNGU_u8 *) ctx->row_pointers[y]+x*6+4), ((PNGU_u8 *) ctx->row_pointers[y]+x*6+5) ); - } - - // Tell libpng where is our image data - png_set_rows (ctx->png_ptr, ctx->info_ptr, ctx->row_pointers); - - // Write file header and image data - png_write_png (ctx->png_ptr, ctx->info_ptr, PNG_TRANSFORM_IDENTITY, NULL); - - // Tell libpng we have no more data to write - png_write_end (ctx->png_ptr, (png_infop) NULL); - - // Free resources - free (ctx->img_data); - free (ctx->row_pointers); - png_destroy_write_struct (&(ctx->png_ptr), &(ctx->info_ptr)); - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - - // Success - return PNGU_OK; -} - - -// This function is taken from a libogc example -PNGU_u32 PNGU_RGB8_TO_YCbYCr (PNGU_u8 r1, PNGU_u8 g1, PNGU_u8 b1, PNGU_u8 r2, PNGU_u8 g2, PNGU_u8 b2) -{ - int y1, cb1, cr1, y2, cb2, cr2, cb, cr; - - y1 = (299 * r1 + 587 * g1 + 114 * b1) / 1000; - cb1 = (-16874 * r1 - 33126 * g1 + 50000 * b1 + 12800000) / 100000; - cr1 = (50000 * r1 - 41869 * g1 - 8131 * b1 + 12800000) / 100000; - - y2 = (299 * r2 + 587 * g2 + 114 * b2) / 1000; - cb2 = (-16874 * r2 - 33126 * g2 + 50000 * b2 + 12800000) / 100000; - cr2 = (50000 * r2 - 41869 * g2 - 8131 * b2 + 12800000) / 100000; - - cb = (cb1 + cb2) >> 1; - cr = (cr1 + cr2) >> 1; - - return (PNGU_u32) ((y1 << 24) | (cb << 16) | (y2 << 8) | cr); -} - - -void PNGU_YCbYCr_TO_RGB8 (PNGU_u32 ycbycr, PNGU_u8 *r1, PNGU_u8 *g1, PNGU_u8 *b1, PNGU_u8 *r2, PNGU_u8 *g2, PNGU_u8 *b2) -{ - PNGU_u8 *val = (PNGU_u8 *) &ycbycr; - int r, g, b; - - r = 1.371f * (val[3] - 128); - g = - 0.698f * (val[3] - 128) - 0.336f * (val[1] - 128); - b = 1.732f * (val[1] - 128); - - *r1 = pngu_clamp (val[0] + r, 0, 255); - *g1 = pngu_clamp (val[0] + g, 0, 255); - *b1 = pngu_clamp (val[0] + b, 0, 255); - - *r2 = pngu_clamp (val[2] + r, 0, 255); - *g2 = pngu_clamp (val[2] + g, 0, 255); - *b2 = pngu_clamp (val[2] + b, 0, 255); -} - - -int pngu_info (IMGCTX ctx) -{ - png_byte magic[8]; - png_uint_32 width; - png_uint_32 height; - png_color_16p background; - png_bytep trans; - png_color_16p trans_values; - int scale, i; - - // Check if there is a file selected and if it is a valid .png - if (ctx->source == PNGU_SOURCE_BUFFER) - memcpy (magic, ctx->buffer, 8); - - else if (ctx->source == PNGU_SOURCE_DEVICE) - { - // Open file - if (!(ctx->fd = fopen (ctx->filename, "rb"))) - return PNGU_CANT_OPEN_FILE; - - // Load first 8 bytes into magic buffer - if (fread (magic, 1, 8, ctx->fd) != 8) - { - fclose (ctx->fd); - return PNGU_CANT_READ_FILE; - } - } - - else - return PNGU_NO_FILE_SELECTED;; - - if (png_sig_cmp(magic, 0, 8) != 0) - { - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_FILE_IS_NOT_PNG; - } - - // Allocation of libpng structs - ctx->png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!(ctx->png_ptr)) - { - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - return PNGU_LIB_ERROR; - } - - ctx->info_ptr = png_create_info_struct (ctx->png_ptr); - if (!(ctx->info_ptr)) - { - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - png_destroy_read_struct (&(ctx->png_ptr), (png_infopp)NULL, (png_infopp)NULL); - return PNGU_LIB_ERROR; - } - - if (ctx->source == PNGU_SOURCE_BUFFER) - { - // Installation of our custom data provider function - ctx->cursor = 0; - png_set_read_fn (ctx->png_ptr, ctx, pngu_read_data_from_buffer); - } - else if (ctx->source == PNGU_SOURCE_DEVICE) - { - // Default data provider uses function fread, so it needs to use our FILE* - png_init_io (ctx->png_ptr, ctx->fd); - png_set_sig_bytes (ctx->png_ptr, 8); // We have read 8 bytes already to check PNG authenticity - } - - // Read png header - png_read_info (ctx->png_ptr, ctx->info_ptr); - - // Query image properties if they have not been queried before - if (!ctx->propRead) - { - png_get_IHDR(ctx->png_ptr, ctx->info_ptr, &width, &height, - (int *) &(ctx->prop.imgBitDepth), - (int *) &(ctx->prop.imgColorType), - NULL, NULL, NULL); - - ctx->prop.imgWidth = width; - ctx->prop.imgHeight = height; - switch (ctx->prop.imgColorType) - { - case PNG_COLOR_TYPE_GRAY: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_GRAY; - break; - case PNG_COLOR_TYPE_GRAY_ALPHA: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_GRAY_ALPHA; - break; - case PNG_COLOR_TYPE_PALETTE: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_PALETTE; - break; - case PNG_COLOR_TYPE_RGB: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_RGB; - break; - case PNG_COLOR_TYPE_RGB_ALPHA: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_RGB_ALPHA; - break; - default: - ctx->prop.imgColorType = PNGU_COLOR_TYPE_UNKNOWN; - break; - } - - // Constant used to scale 16 bit values to 8 bit values - scale = 1; - if (ctx->prop.imgBitDepth == 16) - scale = 256; - - // Query background color, if any. - ctx->prop.validBckgrnd = 0; - if (((ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA)) && - (png_get_bKGD (ctx->png_ptr, ctx->info_ptr, &background))) - { - ctx->prop.validBckgrnd = 1; - ctx->prop.bckgrnd.r = background->red / scale; - ctx->prop.bckgrnd.g = background->green / scale; - ctx->prop.bckgrnd.b = background->blue / scale; - } - else if (((ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA)) && - (png_get_bKGD (ctx->png_ptr, ctx->info_ptr, &background))) - { - ctx->prop.validBckgrnd = 1; - ctx->prop.bckgrnd.r = ctx->prop.bckgrnd.g = ctx->prop.bckgrnd.b = background->gray / scale; - } - - // Query list of transparent colors, if any. - ctx->prop.numTrans = 0; - ctx->prop.trans = NULL; - if (((ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA)) && - (png_get_tRNS (ctx->png_ptr, ctx->info_ptr, &trans, (int *) &(ctx->prop.numTrans), &trans_values))) - { - if (ctx->prop.numTrans) - { - ctx->prop.trans = malloc (sizeof (PNGUCOLOR) * ctx->prop.numTrans); - if (ctx->prop.trans) - for (i = 0; i < ctx->prop.numTrans; i++) - { - ctx->prop.trans[i].r = trans_values[i].red / scale; - ctx->prop.trans[i].g = trans_values[i].green / scale; - ctx->prop.trans[i].b = trans_values[i].blue / scale; - } - else - ctx->prop.numTrans = 0; - } - } - else if (((ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA)) && - (png_get_tRNS (ctx->png_ptr, ctx->info_ptr, &trans, (int *) &(ctx->prop.numTrans), &trans_values))) - { - if (ctx->prop.numTrans) - { - ctx->prop.trans = malloc (sizeof (PNGUCOLOR) * ctx->prop.numTrans); - if (ctx->prop.trans) - for (i = 0; i < ctx->prop.numTrans; i++) - ctx->prop.trans[i].r = ctx->prop.trans[i].g = ctx->prop.trans[i].b = - trans_values[i].gray / scale; - else - ctx->prop.numTrans = 0; - } - } - - ctx->propRead = 1; - } - - // Success - ctx->infoRead = 1; - - return PNGU_OK; -} - - -int pngu_decode (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, PNGU_u32 stripAlpha) -{ - png_uint_32 rowbytes; - int i; - - // Read info if it hasn't been read before - if (!ctx->infoRead) - { - i = pngu_info (ctx); - if (i != PNGU_OK) - return i; - } - - // Check if the user has specified the real width and height of the image - if ( (ctx->prop.imgWidth != width) || (ctx->prop.imgHeight != height) ) - return PNGU_INVALID_WIDTH_OR_HEIGHT; - - // Check if color type is supported by PNGU - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_PALETTE) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_UNKNOWN) ) - return PNGU_UNSUPPORTED_COLOR_TYPE; - - // Scale 16 bit samples to 8 bit - if (ctx->prop.imgBitDepth == 16) - png_set_strip_16 (ctx->png_ptr); - - // Remove alpha channel if we don't need it - if (stripAlpha && ((ctx->prop.imgColorType == PNGU_COLOR_TYPE_RGB_ALPHA) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA))) - png_set_strip_alpha (ctx->png_ptr); - - // Expand 1, 2 and 4 bit samples to 8 bit - if (ctx->prop.imgBitDepth < 8) - png_set_packing (ctx->png_ptr); - - // Transform grayscale images to RGB - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_GRAY_ALPHA) ) - png_set_gray_to_rgb (ctx->png_ptr); - - // Flush transformations - png_read_update_info (ctx->png_ptr, ctx->info_ptr); - - // Allocate memory to store the image - rowbytes = png_get_rowbytes (ctx->png_ptr, ctx->info_ptr); - if (rowbytes % 4) - rowbytes = ((rowbytes / 4) + 1) * 4; // Add extra padding so each row starts in a 4 byte boundary - - ctx->img_data = malloc (rowbytes * ctx->prop.imgHeight); - if (!ctx->img_data) - { - pngu_free_info (ctx); - return PNGU_LIB_ERROR; - } - - ctx->row_pointers = malloc (sizeof (png_bytep) * ctx->prop.imgHeight); - if (!ctx->row_pointers) - { - free (ctx->img_data); - pngu_free_info (ctx); - return PNGU_LIB_ERROR; - } - - for (i = 0; i < ctx->prop.imgHeight; i++) - ctx->row_pointers[i] = ctx->img_data + (i * rowbytes); - - // Transform the image and copy it to our allocated memory - png_read_image (ctx->png_ptr, ctx->row_pointers); - - // Free resources - pngu_free_info (ctx); - - // Success - return PNGU_OK; -} - - -void pngu_free_info (IMGCTX ctx) -{ - if (ctx->infoRead) - { - if (ctx->source == PNGU_SOURCE_DEVICE) - fclose (ctx->fd); - - png_destroy_read_struct (&(ctx->png_ptr), &(ctx->info_ptr), (png_infopp)NULL); - - ctx->infoRead = 0; - } -} - - -// Custom data provider function used for reading from memory buffers. -void pngu_read_data_from_buffer (png_structp png_ptr, png_bytep data, png_size_t length) -{ - IMGCTX ctx = (IMGCTX) png_get_io_ptr (png_ptr); - memcpy (data, ctx->buffer + ctx->cursor, length); - ctx->cursor += length; -} - - -// Custom data writer function used for writing to memory buffers. -void pngu_write_data_to_buffer (png_structp png_ptr, png_bytep data, png_size_t length) -{ - IMGCTX ctx = (IMGCTX) png_get_io_ptr (png_ptr); - memcpy (ctx->buffer + ctx->cursor, data, length); - ctx->cursor += length; -} - - -// Custom data flusher function used for writing to memory buffers. -void pngu_flush_data_to_buffer (png_structp png_ptr) -{ - // Nothing to do here -} - - -// Function used in YCbYCr to RGB decoding -int pngu_clamp (int value, int min, int max) -{ - if (value < min) - value = min; - else if (value > max) - value = max; - - return value; -} - diff --git a/WadInstaller_Source/source/libpng/pngu/pngu.h b/WadInstaller_Source/source/libpng/pngu/pngu.h deleted file mode 100644 index b5e172b..0000000 --- a/WadInstaller_Source/source/libpng/pngu/pngu.h +++ /dev/null @@ -1,171 +0,0 @@ -/******************************************************************************************** - -PNGU Version : 0.2a - -Coder : frontier - -More info : http://frontier-dev.net - -********************************************************************************************/ -#ifndef __PNGU__ -#define __PNGU__ - -// Return codes -#define PNGU_OK 0 -#define PNGU_ODD_WIDTH 1 -#define PNGU_ODD_STRIDE 2 -#define PNGU_INVALID_WIDTH_OR_HEIGHT 3 -#define PNGU_FILE_IS_NOT_PNG 4 -#define PNGU_UNSUPPORTED_COLOR_TYPE 5 -#define PNGU_NO_FILE_SELECTED 6 -#define PNGU_CANT_OPEN_FILE 7 -#define PNGU_CANT_READ_FILE 8 -#define PNGU_LIB_ERROR 9 - -// Color types -#define PNGU_COLOR_TYPE_GRAY 1 -#define PNGU_COLOR_TYPE_GRAY_ALPHA 2 -#define PNGU_COLOR_TYPE_PALETTE 3 -#define PNGU_COLOR_TYPE_RGB 4 -#define PNGU_COLOR_TYPE_RGB_ALPHA 5 -#define PNGU_COLOR_TYPE_UNKNOWN 6 - - -#ifdef __cplusplus - extern "C" { -#endif - -// Types -typedef unsigned char PNGU_u8; -typedef unsigned short PNGU_u16; -typedef unsigned int PNGU_u32; -typedef unsigned long long PNGU_u64; - -typedef struct -{ - PNGU_u8 r; - PNGU_u8 g; - PNGU_u8 b; -} PNGUCOLOR; - -typedef struct -{ - PNGU_u32 imgWidth; // In pixels - PNGU_u32 imgHeight; // In pixels - PNGU_u32 imgBitDepth; // In bitx - PNGU_u32 imgColorType; // PNGU_COLOR_TYPE_* - PNGU_u32 validBckgrnd; // Non zero if there is a background color - PNGUCOLOR bckgrnd; // Backgroun color - PNGU_u32 numTrans; // Number of transparent colors - PNGUCOLOR *trans; // Transparent colors -} PNGUPROP; - -// Image context, always initialize with SelectImageFrom* and free with ReleaseImageContext -struct _IMGCTX; -typedef struct _IMGCTX *IMGCTX; - - -/**************************************************************************** -* Pixel conversion * -****************************************************************************/ - -// Macro to convert RGB8 values to RGB565 -#define PNGU_RGB8_TO_RGB565(r,g,b) ( ((((PNGU_u16) r) & 0xF8U) << 8) | ((((PNGU_u16) g) & 0xFCU) << 3) | (((PNGU_u16) b) >> 3) ) - -// Macro to convert RGBA8 values to RGB5A3 -#define PNGU_RGB8_TO_RGB5A3(r,g,b,a) (PNGU_u16) (((a & 0xE0U) == 0xE0U) ? \ - (0x8000U | ((((PNGU_u16) r) & 0xF8U) << 7) | ((((PNGU_u16) g) & 0xF8U) << 2) | (((PNGU_u16) b) >> 3)) : \ - (((((PNGU_u16) a) & 0xE0U) << 7) | ((((PNGU_u16) r) & 0xF0U) << 4) | (((PNGU_u16) g) & 0xF0U) | ((((PNGU_u16) b) & 0xF0U) >> 4))) - -// Function to convert two RGB8 values to YCbYCr -PNGU_u32 PNGU_RGB8_TO_YCbYCr (PNGU_u8 r1, PNGU_u8 g1, PNGU_u8 b1, PNGU_u8 r2, PNGU_u8 g2, PNGU_u8 b2); - -// Function to convert an YCbYCr to two RGB8 values. -void PNGU_YCbYCr_TO_RGB8 (PNGU_u32 ycbycr, PNGU_u8 *r1, PNGU_u8 *g1, PNGU_u8 *b1, PNGU_u8 *r2, PNGU_u8 *g2, PNGU_u8 *b2); - - -/**************************************************************************** -* Image context handling * -****************************************************************************/ - -// Selects a PNG file, previosly loaded into a buffer, and creates an image context for subsequent procesing. -IMGCTX PNGU_SelectImageFromBuffer (const void *buffer); - -// Selects a PNG file, from any devoptab device, and creates an image context for subsequent procesing. -IMGCTX PNGU_SelectImageFromDevice (const char *filename); - -// Frees resources associated with an image context. Always call this function when you no longer need the IMGCTX. -void PNGU_ReleaseImageContext (IMGCTX ctx); - - -/**************************************************************************** -* Miscelaneous * -****************************************************************************/ - -// Retrieves info from selected PNG file, including image dimensions, color format, background and transparency colors. -int PNGU_GetImageProperties (IMGCTX ctx, PNGUPROP *fileproperties); - - -/**************************************************************************** -* Image conversion * -****************************************************************************/ - -// Expands selected image into an YCbYCr buffer. You need to specify context, image dimensions, -// destination address and stride in pixels (stride = buffer width - image width). -int PNGU_DecodeToYCbYCr (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride); - -// Macro for decoding an image inside a buffer at given coordinates. -#define PNGU_DECODE_TO_COORDS_YCbYCr(ctx,coordX,coordY,imgWidth,imgHeight,bufferWidth,bufferHeight,buffer) \ - \ - PNGU_DecodeToYCbYCr (ctx, imgWidth, imgHeight, ((void *) buffer) + (coordY) * (bufferWidth) * 2 + \ - (coordX) * 2, (bufferWidth) - (imgWidth)) - -// Expands selected image into a linear RGB565 buffer. You need to specify context, image dimensions, -// destination address and stride in pixels (stride = buffer width - image width). -int PNGU_DecodeToRGB565 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride); - -// Macro for decoding an image inside a buffer at given coordinates. -#define PNGU_DECODE_TO_COORDS_RGB565(ctx,coordX,coordY,imgWidth,imgHeight,bufferWidth,bufferHeight,buffer) \ - \ - PNGU_DecodeToRGB565 (ctx, imgWidth, imgHeight, ((void *) buffer) + (coordY) * (bufferWidth) * 2 + \ - (coordX) * 2, (bufferWidth) - (imgWidth)) - -// Expands selected image into a linear RGBA8 buffer. You need to specify context, image dimensions, -// destination address, stride in pixels and default alpha value, which is used if the source image -// doesn't have an alpha channel. -int PNGU_DecodeToRGBA8 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride, PNGU_u8 default_alpha); - -// Macro for decoding an image inside a buffer at given coordinates. -#define PNGU_DECODE_TO_COORDS_RGBA8(ctx,coordX,coordY,imgWidth,imgHeight,default_alpha,bufferWidth,bufferHeight,buffer) \ - \ - PNGU_DecodeToRGBA8 (ctx, imgWidth, imgHeight, ((void *) buffer) + (coordY) * (bufferWidth) * 2 + \ - (coordX) * 2, (bufferWidth) - (imgWidth), default_alpha) - -// Expands selected image into a 4x4 tiled RGB565 buffer. You need to specify context, image dimensions -// and destination address. -int PNGU_DecodeTo4x4RGB565 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer); - -// Expands selected image into a 4x4 tiled RGB5A3 buffer. You need to specify context, image dimensions, -// destination address and default alpha value, which is used if the source image doesn't have an alpha channel. -int PNGU_DecodeTo4x4RGB5A3 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u8 default_alpha); - -// Expands selected image into a 4x4 tiled RGBA8 buffer. You need to specify context, image dimensions, -// destination address and default alpha value, which is used if the source image doesn't have an alpha channel. -int PNGU_DecodeTo4x4RGBA8 (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u8 default_alpha); - -// Encodes an YCbYCr image in PNG format and stores it in the selected device or memory buffer. You need to -// specify context, image dimensions, destination address and stride in pixels (stride = buffer width - image width). -int PNGU_EncodeFromYCbYCr (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, void *buffer, PNGU_u32 stride); - -// Macro for encoding an image stored into an YCbYCr buffer at given coordinates. -#define PNGU_ENCODE_TO_COORDS_YCbYCr(ctx,coordX,coordY,imgWidth,imgHeight,bufferWidth,bufferHeight,buffer) \ - \ - PNGU_EncodeFromYCbYCr (ctx, imgWidth, imgHeight, ((void *) buffer) + (coordY) * (bufferWidth) * 2 + \ - (coordX) * 2, (bufferWidth) - (imgWidth)) - -#ifdef __cplusplus - } -#endif - -#endif - diff --git a/WadInstaller_Source/source/menu.c b/WadInstaller_Source/source/menu.c deleted file mode 100644 index b839d04..0000000 --- a/WadInstaller_Source/source/menu.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "fat.h" -#include "restart.h" -#include "title.h" -#include "utils.h" -#include "video.h" -#include "wad.h" -#include "wpad.h" -#include "ahbprot.h" - -/* Constants */ -#define CIOS_VERSION 249 - - -void LoadSelectedIOS() -{ - u8 selectedIOS = Wad_SelectIOS(); - s32 ret; - - if (selectedIOS == 0) { - if (HAVE_AHBPROT) { - ret = patchSetAHBPROT(); - if (ret > 0) { - ret = runtimePatchApply(); - if (ret > 0) { - printf("\nUsing AHBPROT\n"); - return; - } - } - printf("\nAHBPROT FAILED!\n"); - } - } - - ret = IOS_ReloadIOS(selectedIOS); - if (ret<0) - { - printf("\nUsing default IOS\n"); - } else - { - printf("\nUsing selected IOS %d\n", selectedIOS); - } -} - -void Menu_Loop(void) -{ - Wad_InstallFromMemory(); -} diff --git a/WadInstaller_Source/source/menu.h b/WadInstaller_Source/source/menu.h deleted file mode 100644 index c3ba917..0000000 --- a/WadInstaller_Source/source/menu.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _MENU_H_ -#define _MENU_H_ - -/* Prototypes */ -void Menu_Loop(void); -void LoadSelectedIOS(void); - -#endif - diff --git a/WadInstaller_Source/source/restart.c b/WadInstaller_Source/source/restart.c deleted file mode 100644 index 0660ac8..0000000 --- a/WadInstaller_Source/source/restart.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -#include "sys.h" -#include "wpad.h" - - -void Restart(void) -{ - printf("\n Restarting Wii..."); - fflush(stdout); - - /* Load system menu */ - Sys_LoadMenu(); -} - -void Restart_Wait(void) -{ - printf("\n"); - - printf(" Press any button to restart..."); - fflush(stdout); - - /* Wait for button */ - Wpad_WaitButtons(); - - printf(" Restarting Wii..."); - fflush(stdout); - - /* Load system menu */ - Sys_LoadMenu(); -} - diff --git a/WadInstaller_Source/source/restart.h b/WadInstaller_Source/source/restart.h deleted file mode 100644 index 3df94d7..0000000 --- a/WadInstaller_Source/source/restart.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _RESTART_H_ -#define _RESTART_H_ - -/* Prototypes */ -void Restart(void); -void Restart_Wait(void); - -#endif diff --git a/WadInstaller_Source/source/sha1.c b/WadInstaller_Source/source/sha1.c deleted file mode 100644 index 83a533a..0000000 --- a/WadInstaller_Source/source/sha1.c +++ /dev/null @@ -1,172 +0,0 @@ -/* -SHA-1 in C -By Steve Reid -100% Public Domain - -Test Vectors (from FIPS PUB 180-1) -"abc" - A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D -"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 -A million repetitions of "a" - 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F -*/ - -/* #define LITTLE_ENDIAN * This should be #define'd if true. */ -#define SHA1HANDSOFF - -#include -#include -#include "sha1.h" - -#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) - -/* blk0() and blk() perform the initial expand. */ -/* I got the idea of expanding during the round function from SSLeay */ -#ifdef LITTLE_ENDIAN -#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ - |(rol(block->l[i],8)&0x00FF00FF)) -#else -#define blk0(i) block->l[i] -#endif -#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ - ^block->l[(i+2)&15]^block->l[i&15],1)) - -/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ -#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); -#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); -#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); - - -/* Hash a single 512-bit block. This is the core of the algorithm. */ - -void SHA1Transform(unsigned long state[5], unsigned char buffer[64]) -{ -unsigned long a, b, c, d, e; -typedef union { - unsigned char c[64]; - unsigned long l[16]; -} CHAR64LONG16; -CHAR64LONG16* block; -#ifdef SHA1HANDSOFF -static unsigned char workspace[64]; - block = (CHAR64LONG16*)workspace; - memcpy(block, buffer, 64); -#else - block = (CHAR64LONG16*)buffer; -#endif - /* Copy context->state[] to working vars */ - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - /* 4 rounds of 20 operations each. Loop unrolled. */ - R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); - R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); - R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); - R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); - R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); - R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); - R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); - R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); - R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); - R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); - R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); - R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); - R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); - R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); - R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); - R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); - R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); - R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); - R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); - R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); - /* Add the working vars back into context.state[] */ - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - /* Wipe variables */ - a = b = c = d = e = 0; -} - - -/* SHA1Init - Initialize new context */ - -void SHA1Init(SHA1_CTX* context) -{ - /* SHA1 initialization constants */ - context->state[0] = 0x67452301; - context->state[1] = 0xEFCDAB89; - context->state[2] = 0x98BADCFE; - context->state[3] = 0x10325476; - context->state[4] = 0xC3D2E1F0; - context->count[0] = context->count[1] = 0; -} - - -/* Run your data through this. */ - -void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len) -{ -unsigned int i, j; - - j = (context->count[0] >> 3) & 63; - if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; - context->count[1] += (len >> 29); - if ((j + len) > 63) { - memcpy(&context->buffer[j], data, (i = 64-j)); - SHA1Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) { - SHA1Transform(context->state, &data[i]); - } - j = 0; - } - else i = 0; - memcpy(&context->buffer[j], &data[i], len - i); -} - - -/* Add padding and return the message digest. */ - -void SHA1Final(unsigned char digest[20], SHA1_CTX* context) -{ -unsigned long i, j; -unsigned char finalcount[8]; - - for (i = 0; i < 8; i++) { - finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] - >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ - } - SHA1Update(context, (unsigned char *)"\200", 1); - while ((context->count[0] & 504) != 448) { - SHA1Update(context, (unsigned char *)"\0", 1); - } - SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ - for (i = 0; i < 20; i++) { - digest[i] = (unsigned char) - ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); - } - /* Wipe variables */ - i = j = 0; - memset(context->buffer, 0, 64); - memset(context->state, 0, 20); - memset(context->count, 0, 8); - memset(&finalcount, 0, 8); -#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ - SHA1Transform(context->state, context->buffer); -#endif -} - -void SHA1(unsigned char *ptr, unsigned int size, unsigned char *outbuf) { - SHA1_CTX ctx; - - SHA1Init(&ctx); - SHA1Update(&ctx, ptr, size); - SHA1Final(outbuf, &ctx); -} - diff --git a/WadInstaller_Source/source/sha1.h b/WadInstaller_Source/source/sha1.h deleted file mode 100644 index 757af1c..0000000 --- a/WadInstaller_Source/source/sha1.h +++ /dev/null @@ -1,12 +0,0 @@ -typedef struct { - unsigned long state[5]; - unsigned long count[2]; - unsigned char buffer[64]; -} SHA1_CTX; - -void SHA1Transform(unsigned long state[5], unsigned char buffer[64]); -void SHA1Init(SHA1_CTX* context); -void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len); -void SHA1Final(unsigned char digest[20], SHA1_CTX* context); - -void SHA1(unsigned char *ptr, unsigned int size, unsigned char *outbuf); diff --git a/WadInstaller_Source/source/stub.S b/WadInstaller_Source/source/stub.S deleted file mode 100644 index 418c838..0000000 --- a/WadInstaller_Source/source/stub.S +++ /dev/null @@ -1,6 +0,0 @@ - .rodata - - .globl bgData - .balign 32 -bgData: - .incbin "../data/background" diff --git a/WadInstaller_Source/source/sys.c b/WadInstaller_Source/source/sys.c deleted file mode 100644 index c9e7723..0000000 --- a/WadInstaller_Source/source/sys.c +++ /dev/null @@ -1,98 +0,0 @@ -#include -#include -#include - -#include "sys.h" - -/* Constants */ -#define CERTS_LEN 0x280 - -/* Variables */ -static const char certs_fs[] ATTRIBUTE_ALIGN(32) = "/sys/cert.sys"; - - -void __Sys_ResetCallback(void) -{ - /* Reboot console */ - Sys_Reboot(); -} - -void __Sys_PowerCallback(void) -{ - /* Poweroff console */ - Sys_Shutdown(); -} - - -void Sys_Init(void) -{ - /* Initialize video subsytem */ - VIDEO_Init(); - - /* Set RESET/POWER button callback */ - SYS_SetResetCallback(__Sys_ResetCallback); - SYS_SetPowerCallback(__Sys_PowerCallback); -} - -void Sys_Reboot(void) -{ - /* Restart console */ - STM_RebootSystem(); -} - -void Sys_Shutdown(void) -{ - /* Poweroff console */ - if(CONF_GetShutdownMode() == CONF_SHUTDOWN_IDLE) { - s32 ret; - - /* Set LED mode */ - ret = CONF_GetIdleLedMode(); - if(ret >= 0 && ret <= 2) - STM_SetLedMode(ret); - - /* Shutdown to idle */ - STM_ShutdownToIdle(); - } else { - /* Shutdown to standby */ - STM_ShutdownToStandby(); - } -} - -void Sys_LoadMenu(void) -{ - u32 *stub = (u32 *)0x80001800; - - /* Homebrew Channel stub */ - if (*stub) - exit(0); - - /* Return to the Wii system menu */ - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); -} - -s32 Sys_GetCerts(signed_blob **certs, u32 *len) -{ - static signed_blob certificates[CERTS_LEN] ATTRIBUTE_ALIGN(32); - - s32 fd, ret; - - /* Open certificates file */ - fd = IOS_Open(certs_fs, 1); - if (fd < 0) - return fd; - - /* Read certificates */ - ret = IOS_Read(fd, certificates, sizeof(certificates)); - - /* Close file */ - IOS_Close(fd); - - /* Set values */ - if (ret > 0) { - *certs = certificates; - *len = sizeof(certificates); - } - - return ret; -} diff --git a/WadInstaller_Source/source/sys.h b/WadInstaller_Source/source/sys.h deleted file mode 100644 index cfbf604..0000000 --- a/WadInstaller_Source/source/sys.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _SYS_H_ -#define _SYS_H_ - -/* Prototypes */ -void Sys_Init(void); -void Sys_Reboot(void); -void Sys_Shutdown(void); -void Sys_LoadMenu(void); -s32 Sys_GetCerts(signed_blob **, u32 *); - -#endif diff --git a/WadInstaller_Source/source/title.c b/WadInstaller_Source/source/title.c deleted file mode 100644 index 0d05bd9..0000000 --- a/WadInstaller_Source/source/title.c +++ /dev/null @@ -1,256 +0,0 @@ -#include -#include -#include -#include -#include - -#include "utils.h" - - -s32 Title_GetList(u64 **outbuf, u32 *outlen) -{ - u64 *titles = NULL; - - u32 len, nb_titles; - s32 ret; - - /* Get number of titles */ - ret = ES_GetNumTitles(&nb_titles); - if (ret < 0) - return ret; - - /* Calculate buffer lenght */ - len = round_up(sizeof(u64) * nb_titles, 32); - - /* Allocate memory */ - titles = memalign(32, len); - if (!titles) - return -1; - - /* Get titles */ - ret = ES_GetTitles(titles, nb_titles); - if (ret < 0) - goto err; - - /* Set values */ - *outbuf = titles; - *outlen = nb_titles; - - return 0; - -err: - /* Free memory */ - if (titles) - free(titles); - - return ret; -} - -s32 Title_GetTicketViews(u64 tid, tikview **outbuf, u32 *outlen) -{ - tikview *views = NULL; - - u32 nb_views; - s32 ret; - - /* Get number of ticket views */ - ret = ES_GetNumTicketViews(tid, &nb_views); - if (ret < 0) - return ret; - - /* Allocate memory */ - views = (tikview *)memalign(32, sizeof(tikview) * nb_views); - if (!views) - return -1; - - /* Get ticket views */ - ret = ES_GetTicketViews(tid, views, nb_views); - if (ret < 0) - goto err; - - /* Set values */ - *outbuf = views; - *outlen = nb_views; - - return 0; - -err: - /* Free memory */ - if (views) - free(views); - - return ret; -} - -s32 Title_GetTMD(u64 tid, signed_blob **outbuf, u32 *outlen) -{ - void *p_tmd = NULL; - - u32 len; - s32 ret; - - /* Get TMD size */ - ret = ES_GetStoredTMDSize(tid, &len); - if (ret < 0) - return ret; - - /* Allocate memory */ - p_tmd = memalign(32, round_up(len, 32)); - if (!p_tmd) - return -1; - - /* Read TMD */ - ret = ES_GetStoredTMD(tid, p_tmd, len); - if (ret < 0) - goto err; - - /* Set values */ - *outbuf = p_tmd; - *outlen = len; - - return 0; - -err: - /* Free memory */ - if (p_tmd) - free(p_tmd); - - return ret; -} - -s32 Title_GetVersion(u64 tid, u16 *outbuf) -{ - signed_blob *p_tmd = NULL; - tmd *tmd_data = NULL; - - u32 len; - s32 ret; - - /* Get title TMD */ - ret = Title_GetTMD(tid, &p_tmd, &len); - if (ret < 0) - return ret; - - /* Retrieve TMD info */ - tmd_data = (tmd *)SIGNATURE_PAYLOAD(p_tmd); - - /* Set values */ - *outbuf = tmd_data->title_version; - - /* Free memory */ - free(p_tmd); - - return 0; -} - -s32 Title_GetSysVersion(u64 tid, u64 *outbuf) -{ - signed_blob *p_tmd = NULL; - tmd *tmd_data = NULL; - - u32 len; - s32 ret; - - /* Get title TMD */ - ret = Title_GetTMD(tid, &p_tmd, &len); - if (ret < 0) - return ret; - - /* Retrieve TMD info */ - tmd_data = (tmd *)SIGNATURE_PAYLOAD(p_tmd); - - /* Set values */ - *outbuf = tmd_data->sys_version; - - /* Free memory */ - free(p_tmd); - - return 0; -} - -s32 Title_GetSize(u64 tid, u32 *outbuf) -{ - signed_blob *p_tmd = NULL; - tmd *tmd_data = NULL; - - u32 cnt, len, size = 0; - s32 ret; - - /* Get title TMD */ - ret = Title_GetTMD(tid, &p_tmd, &len); - if (ret < 0) - return ret; - - /* Retrieve TMD info */ - tmd_data = (tmd *)SIGNATURE_PAYLOAD(p_tmd); - - /* Calculate title size */ - for (cnt = 0; cnt < tmd_data->num_contents; cnt++) { - tmd_content *content = &tmd_data->contents[cnt]; - - /* Add content size */ - size += content->size; - } - - /* Set values */ - *outbuf = size; - - /* Free memory */ - free(p_tmd); - - return 0; -} - -s32 Title_GetIOSVersions(u8 **outbuf, u32 *outlen) -{ - u8 *buffer = NULL; - u64 *list = NULL; - - u32 count, cnt, idx; - s32 ret; - - /* Get title list */ - ret = Title_GetList(&list, &count); - if (ret < 0) - return ret; - - /* Count IOS */ - for (cnt = idx = 0; idx < count; idx++) { - u32 tidh = (list[idx] >> 32); - u32 tidl = (list[idx] & 0xFFFFFFFF); - - /* Title is IOS */ - if ((tidh == 0x1) && (tidl >= 3) && (tidl <= 255)) - cnt++; - } - - /* Allocate memory */ - buffer = (u8 *)memalign(32, cnt); - if (!buffer) { - ret = -1; - goto out; - } - - /* Copy IOS */ - for (cnt = idx = 0; idx < count; idx++) { - u32 tidh = (list[idx] >> 32); - u32 tidl = (list[idx] & 0xFFFFFFFF); - - /* Title is IOS */ - if ((tidh == 0x1) && (tidl >= 3) && (tidl <= 255)) - buffer[cnt++] = (u8)(tidl & 0xFF); - } - - /* Set values */ - *outbuf = buffer; - *outlen = cnt; - - goto out; - -out: - /* Free memory */ - if (list) - free(list); - - return ret; -} diff --git a/WadInstaller_Source/source/title.h b/WadInstaller_Source/source/title.h deleted file mode 100644 index 5d1c573..0000000 --- a/WadInstaller_Source/source/title.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _TITLE_H_ -#define _TITLE_H_ - -/* Constants */ -#define BLOCK_SIZE 1024 - -/* Prototypes */ -s32 Title_GetList(u64 **, u32 *); -s32 Title_GetTicketViews(u64, tikview **, u32 *); -s32 Title_GetTMD(u64, signed_blob **, u32 *); -s32 Title_GetVersion(u64, u16 *); -s32 Title_GetSysVersion(u64, u64 *); -s32 Title_GetSize(u64, u32 *); -s32 Title_GetIOSVersions(u8 **, u32 *); - -#endif diff --git a/WadInstaller_Source/source/utils.h b/WadInstaller_Source/source/utils.h deleted file mode 100644 index 3a4862b..0000000 --- a/WadInstaller_Source/source/utils.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _UTILS_H_ -#define _UTILS_H_ - -/* Constants */ -#define KB_SIZE 1024.0 -#define MB_SIZE 1048576.0 -#define GB_SIZE 1073741824.0 - -/* Macros */ -#define round_up(x,n) (-(-(x) & -(n))) - -/* Prototypes */ -u32 swap32(u32); - -#endif diff --git a/WadInstaller_Source/source/video.c b/WadInstaller_Source/source/video.c deleted file mode 100644 index 0182671..0000000 --- a/WadInstaller_Source/source/video.c +++ /dev/null @@ -1,141 +0,0 @@ -#include -#include - -#include "sys.h" -#include "video.h" - -/* Video variables */ -static void *framebuffer = NULL; -static GXRModeObj *vmode = NULL; - - -void Con_Init(u32 x, u32 y, u32 w, u32 h) -{ - /* Create console in the framebuffer */ - CON_InitEx(vmode, x, y, w, h); -} - -void Con_Clear(void) -{ - /* Clear console */ - printf("\x1b[2J"); - fflush(stdout); -} - -void Con_ClearLine(void) -{ - s32 cols, rows; - u32 cnt; - - printf("\r"); - fflush(stdout); - - /* Get console metrics */ - CON_GetMetrics(&cols, &rows); - - /* Erase line */ - for (cnt = 1; cnt < cols; cnt++) { - printf(" "); - fflush(stdout); - } - - printf("\r"); - fflush(stdout); -} - -void Con_FgColor(u32 color, u8 bold) -{ - /* Set foreground color */ - printf("\x1b[%u;%um", color + 30, bold); - fflush(stdout); -} - -void Con_BgColor(u32 color, u8 bold) -{ - /* Set background color */ - printf("\x1b[%u;%um", color + 40, bold); - fflush(stdout); -} - -void Con_FillRow(u32 row, u32 color, u8 bold) -{ - s32 cols, rows; - u32 cnt; - - /* Set color */ - printf("\x1b[%u;%um", color + 40, bold); - fflush(stdout); - - /* Get console metrics */ - CON_GetMetrics(&cols, &rows); - - /* Save current row and col */ - printf("\x1b[s"); - fflush(stdout); - - /* Move to specified row */ - printf("\x1b[%u;0H", row); - fflush(stdout); - - /* Fill row */ - for (cnt = 0; cnt < cols; cnt++) { - printf(" "); - fflush(stdout); - } - - /* Load saved row and col */ - printf("\x1b[u"); - fflush(stdout); - - /* Set default color */ - Con_BgColor(0, 0); - Con_FgColor(7, 1); -} - -void Video_Configure(GXRModeObj *rmode) -{ - /* Configure the video subsystem */ - VIDEO_Configure(rmode); - - /* Setup video */ - VIDEO_SetBlack(FALSE); - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if (rmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); -} - -void Video_SetMode(void) -{ - /* Select preferred video mode */ - vmode = VIDEO_GetPreferredMode(NULL); - - /* Allocate memory for the framebuffer */ - framebuffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(vmode)); - - /* Configure the video subsystem */ - VIDEO_Configure(vmode); - - /* Setup video */ - VIDEO_SetNextFramebuffer(framebuffer); - VIDEO_SetBlack(FALSE); - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); - - /* Clear the screen */ - Video_Clear(COLOR_BLACK); -} - -void Video_Clear(s32 color) -{ - VIDEO_ClearFrameBuffer(vmode, framebuffer, color); -} - -void Video_DrawPng(IMGCTX ctx, PNGUPROP imgProp, u16 x, u16 y) -{ - PNGU_DECODE_TO_COORDS_YCbYCr(ctx, x, y, imgProp.imgWidth, imgProp.imgHeight, vmode->fbWidth, vmode->xfbHeight, framebuffer); -} diff --git a/WadInstaller_Source/source/video.h b/WadInstaller_Source/source/video.h deleted file mode 100644 index e0fb7fd..0000000 --- a/WadInstaller_Source/source/video.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _VIDEO_H_ -#define _VIDEO_H_ - -#include "libpng/pngu/pngu.h" - -/* Prototypes */ -void Con_Init(u32, u32, u32, u32); -void Con_Clear(void); -void Con_ClearLine(void); -void Con_FgColor(u32, u8); -void Con_BgColor(u32, u8); -void Con_FillRow(u32, u32, u8); - -void Video_Configure(GXRModeObj *); -void Video_SetMode(void); -void Video_Clear(s32); -void Video_DrawPng(IMGCTX, PNGUPROP, u16, u16); - -#endif diff --git a/WadInstaller_Source/source/wad-manager.c b/WadInstaller_Source/source/wad-manager.c deleted file mode 100644 index 92453d2..0000000 --- a/WadInstaller_Source/source/wad-manager.c +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include -#include - -#include "gui.h" -#include "menu.h" -#include "restart.h" -#include "sys.h" -#include "video.h" -#include "wpad.h" - - -void Disclaimer(void) -{ - /* Print disclaimer */ - printf(" [DISCLAIMER]:\n\n"); - - printf(" THIS APPLICATION COMES WITH NO WARRANTY AT ALL,\n"); - printf(" NEITHER EXPRESS NOR IMPLIED.\n"); - printf(" I DO NOT TAKE ANY RESPONSIBILITY FOR ANY DAMAGE IN YOUR\n"); - printf(" WII CONSOLE BECAUSE OF A IMPROPER USAGE OF THIS SOFTWARE.\n\n"); - - printf(">> If you agree and install the streamed wad\n"); - printf(">> press A button to continue.\n"); - printf(">> Otherwise, press B button to restart your Wii.\n"); - - /* Wait for user answer */ - for (;;) { - u32 buttons = Wpad_WaitButtons(); - - /* A button */ - if ((buttons & WPAD_BUTTON_A)||(buttons & PAD_BUTTON_A)) - break; - - /* B button */ - if ((buttons & WPAD_BUTTON_B)||(buttons & WPAD_CLASSIC_BUTTON_B)) - Restart(); - } -} - -int main(int argc, char **argv) -{ - /* Initialize subsystems */ - Sys_Init(); - - /* Set video mode */ - Video_SetMode(); - - /* Initialize console */ - Gui_InitConsole(); - - /* Draw background */ - Gui_DrawBackground(); - - /* Load Selected IOS */ - LoadSelectedIOS(); - - /* Initialize Wiimote */ - Wpad_Init(); - - /* Print disclaimer */ - Disclaimer(); - - /* Menu loop */ - Menu_Loop(); - - /* Restart Wii */ - Restart_Wait(); - - return 0; -} diff --git a/WadInstaller_Source/source/wad.c b/WadInstaller_Source/source/wad.c deleted file mode 100644 index 5e17020..0000000 --- a/WadInstaller_Source/source/wad.c +++ /dev/null @@ -1,405 +0,0 @@ -#include -#include -#include -#include -#include - -#include "title.h" -#include "utils.h" -#include "video.h" -#include "wad.h" -#include "sha1.h" -#include "install.h" - - -/* 'WAD Header' structure */ -typedef struct { - /* Header length */ - u32 header_len; - - /* WAD type */ - u16 type; - - u16 padding; - - /* Data length */ - u32 certs_len; - u32 crl_len; - u32 tik_len; - u32 tmd_len; - u32 data_len; - u32 footer_len; -} ATTRIBUTE_PACKED wadHeader; - -/* Variables */ -static u8 wadBuffer[BLOCK_SIZE] ATTRIBUTE_ALIGN(32); - -void * startOfData; -void * endOfData; -void * internalPointer; - -void mopen(void * memPointer) -{ - u32 size = *((u32 * ) memPointer); - startOfData = memPointer + 28; - endOfData = startOfData + size; - internalPointer = startOfData; -} - - -int mseek(u32 offset, int origin) -{ - if (origin == SEEK_SET) - { - internalPointer = startOfData + offset; - } else if (origin == SEEK_CUR) - { - internalPointer = internalPointer + offset; - } else if (origin == SEEK_END) { - internalPointer = endOfData - offset; - } else - { - return -2; - } - - if ((internalPointer endOfData)) - { - return -1; - } else - { - return 0; - } -} - -int mread(void * buf, int size, int count) -{ - memcpy(buf, internalPointer, size*count); - //DCFlushRange(buf, size*count); - return 0; -} - - -//-------------------------- INSTALL FROM MEMORY ------------------------------- - -void __Wad_FixTicket(signed_blob *p_tik) { - u8 *data = (u8 *) p_tik; - u8 *ckey = data + 0x1F1; - - if (*ckey > 1) { - /* Set common key */ - *ckey = 0; - - /* Fakesign ticket */ - brute_tik((tik *) p_tik); - } -} - -s32 brute_tik(tik *p_tik) { - u16 fill; - for (fill = 0; fill < 65535; fill++) { - p_tik->padding = fill; - sha1 hash; - // gprintf("SHA1(%p, %x, %p)\n", p_tmd, TMD_SIZE(p_tmd), hash); - SHA1((u8 *) p_tik, sizeof(tik), hash); - if (hash[0] == 0) return 1; - } - printf("Unable to fix tik :(\n"); - return -1; -} - -s32 __Wad_ReadFile(void *outbuf, u32 offset, u32 len) -{ - s32 ret; - - /* Seek to offset */ - mseek(offset, SEEK_SET); - - /* Read data */ - ret = mread(outbuf, len, 1); - if (ret < 0) - return ret; - - return 0; -} - -s32 __Wad_ReadAlloc(void **outbuf, u32 offset, u32 len) -{ - void *buffer = NULL; - s32 ret; - - /* Allocate memory */ - buffer = memalign(32, len); - if (!buffer) - return -1; - - /* Read file */ - ret = __Wad_ReadFile(buffer, offset, len); - if (ret < 0) { - free(buffer); - return ret; - } - - /* Set pointer */ - *outbuf = buffer; - - return 0; -} - -s32 __Wad_GetTitleID(wadHeader *header, u64 *tid) -{ - signed_blob *p_tik = NULL; - tik *tik_data = NULL; - - u32 offset = 0; - s32 ret; - - /* Ticket offset */ - offset += round_up(header->header_len, 64); - offset += round_up(header->certs_len, 64); - offset += round_up(header->crl_len, 64); - - /* Read ticket */ - ret = __Wad_ReadAlloc((void *)&p_tik, offset, header->tik_len); - if (ret < 0) - goto out; - - /* Ticket data */ - tik_data = (tik *)SIGNATURE_PAYLOAD(p_tik); - - /* Copy title ID */ - *tid = tik_data->titleid; - -out: - /* Free memory */ - if (p_tik) - free(p_tik); - - return ret; -} - - -s32 __Wad_Install() -{ - wadHeader *header = NULL; - signed_blob *p_certs = NULL, *p_crl = NULL, *p_tik = NULL, *p_tmd = NULL; - - tmd *tmd_data = NULL; - - u32 cnt, offset = 0; - s32 ret; - - printf("\t\t>> Reading WAD data..."); - fflush(stdout); - - /* WAD header */ - ret = __Wad_ReadAlloc((void *)&header, offset, sizeof(wadHeader)); - if (ret < 0) - goto err; - else - offset += round_up(header->header_len, 64); - - /* WAD certificates */ - ret = __Wad_ReadAlloc((void *)&p_certs, offset, header->certs_len); - if (ret < 0) - goto err; - else - offset += round_up(header->certs_len, 64); - - /* WAD crl */ - if (header->crl_len) { - ret = __Wad_ReadAlloc((void *)&p_crl, offset, header->crl_len); - if (ret < 0) - goto err; - else - offset += round_up(header->crl_len, 64); - } - - /* WAD ticket */ - ret = __Wad_ReadAlloc((void *)&p_tik, offset, header->tik_len); - if (ret < 0) - goto err; - else { - offset += round_up(header->tik_len, 64); - - // Fix ticket (This is what caused me the headaches when adding AHBPROT -person66) - __Wad_FixTicket(p_tik); - } - - /* WAD TMD */ - ret = __Wad_ReadAlloc((void *)&p_tmd, offset, header->tmd_len); - if (ret < 0) - goto err; - else - offset += round_up(header->tmd_len, 64); - - Con_ClearLine(); - - printf("\t\t>> Installing ticket..."); - fflush(stdout); - - /* Install ticket */ - ret = ES_AddTicket(p_tik, header->tik_len, p_certs, header->certs_len, p_crl, header->crl_len); - if (ret < 0) - goto err; - - Con_ClearLine(); - - printf("\r\t\t>> Installing title..."); - fflush(stdout); - - /* Install title */ - ret = ES_AddTitleStart(p_tmd, header->tmd_len, p_certs, header->certs_len, p_crl, header->crl_len); - if (ret < 0) - goto err; - - /* Get TMD info */ - tmd_data = (tmd *)SIGNATURE_PAYLOAD(p_tmd); - - /* Install contents */ - for (cnt = 0; cnt < tmd_data->num_contents; cnt++) { - tmd_content *content = &tmd_data->contents[cnt]; - - u32 idx = 0, len; - s32 cfd; - - Con_ClearLine(); - - printf("\r\t\t>> Installing content #%02d...", content->cid); - fflush(stdout); - - /* Encrypted content size */ - len = round_up(content->size, 64); - - /* Install content */ - cfd = ES_AddContentStart(tmd_data->title_id, content->cid); - if (cfd < 0) { - ret = cfd; - goto err; - } - - /* Install content data */ - while (idx < len) { - u32 size; - - /* Data length */ - size = (len - idx); - if (size > BLOCK_SIZE) - size = BLOCK_SIZE; - - /* Read data */ - ret = __Wad_ReadFile(&wadBuffer, offset, size); - if (ret < 0) - goto err; - - /* Install data */ - ret = ES_AddContentData(cfd, wadBuffer, size); - if (ret < 0) - goto err; - - /* Increase variables */ - idx += size; - offset += size; - } - - /* Finish content installation */ - ret = ES_AddContentFinish(cfd); - if (ret < 0) - goto err; - } - - Con_ClearLine(); - - printf("\r\t\t>> Finishing installation..."); - fflush(stdout); - - /* Finish title install */ - ret = ES_AddTitleFinish(); - if (ret >= 0) { - printf(" OK!\n"); - goto out; - } - -err: - printf(" ERROR! (ret = %d)\n", ret); - - /* Cancel install */ - ES_AddTitleCancel(); - -out: - /* Free memory */ - if (header) - free(header); - if (p_certs) - free(p_certs); - if (p_crl) - free(p_crl); - if (p_tik) - free(p_tik); - if (p_tmd) - free(p_tmd); - - return ret; -} - - -void DumpHash(u8 * hash) -{ - int i; - for (i=0;i<20;i++) - { - printf("%x", hash[i]); - } -} - -s32 CompareHashes(u8 * hash1, u8 * hash2) -{ - - printf("\nCalculated SHA1 Hash: "); DumpHash(hash1); - printf("\nStored SHA1 Hash : "); DumpHash(hash2); - sleep(3); - - if (memcmp(hash1, hash2, 20)==0) - { - return 1; - } - else - { - return 0; - } -} - -s32 Wad_EnsureInjectedData() -{ - u32 size = *((u32 * ) install); - u8 wadOffset = 28; - - u8 hash1[20]; - - SHA1(((u8 *)install)+wadOffset, size , hash1); //Taking SHA of contents... - - return CompareHashes(hash1, ((u8 *)install)+4); -} - -s32 Wad_InstallFromMemory() -{ - /* Check integrity of the wad file using SHA */ - /* SHA digest of the installed wad will be from XX-XX region in the injected data */ - printf("\n"); - printf("\r\t\t>> Checking integrity of the contents..."); - if (Wad_EnsureInjectedData()) - { - printf("\n\n\t\t>> Wad file integrity check succeeded\n\n"); - mopen(install); - return __Wad_Install(); - } else - { - printf("\n\n\t\t>> Wad file integrity check failed! Will not install the wad, possible corruption during transfer..."); - } -} - -u8 Wad_SelectIOS() -{ - u8 iosOffset = 24; - return *(install+iosOffset); - -} \ No newline at end of file diff --git a/WadInstaller_Source/source/wad.h b/WadInstaller_Source/source/wad.h deleted file mode 100644 index db23a86..0000000 --- a/WadInstaller_Source/source/wad.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _WAD_H_ -#define _WAD_H_ - -/* Prototypes */ -s32 Wad_InstallFromMemory(); -u8 Wad_SelectIOS(void); -s32 brute_tik(tik *p_tik); - -#endif diff --git a/WadInstaller_Source/source/wpad.c b/WadInstaller_Source/source/wpad.c deleted file mode 100644 index 2f50b9a..0000000 --- a/WadInstaller_Source/source/wpad.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include - -#include "sys.h" -#include "wpad.h" - -/* Constants */ -#define MAX_WIIMOTES 4 - - -void __Wpad_PowerCallback(s32 chan) -{ - /* Poweroff console */ - Sys_Shutdown(); -} - - -s32 Wpad_Init(void) -{ - s32 ret; - - /* Initialize GC Pads */ - - ret = PAD_Init(); - if (ret < 0) - return ret; - - /* Initialize Wiimote subsystem */ - ret = WPAD_Init(); - if (ret < 0) - return ret; - - /* Set POWER button callback */ - WPAD_SetPowerButtonCallback(__Wpad_PowerCallback); - - return ret; -} - -void Wpad_Disconnect(void) -{ - u32 cnt; - - /* Disconnect Wiimotes */ - for (cnt = 0; cnt < MAX_WIIMOTES; cnt++) - WPAD_Disconnect(cnt); - - /* Shutdown Wiimote subsystem */ - WPAD_Shutdown(); -} - -u32 Wpad_GetButtons(void) -{ - u32 buttons = 0, cnt; - - /* Scan pads */ - WPAD_ScanPads(); - - /* Get pressed buttons */ - for (cnt = 0; cnt < MAX_WIIMOTES; cnt++) - buttons |= WPAD_ButtonsDown(cnt); - - return buttons; -} - -u32 Wpad_WaitButtons(void) -{ - u32 buttons = 0; - - /* Wait for button pressing */ - while (!buttons) { - buttons = Wpad_GetButtons(); - if (!buttons) - { - PAD_ScanPads(); - buttons = PAD_ButtonsDown(0); - } - VIDEO_WaitVSync(); - } - - return buttons; -} diff --git a/WadInstaller_Source/source/wpad.h b/WadInstaller_Source/source/wpad.h deleted file mode 100644 index 63053bb..0000000 --- a/WadInstaller_Source/source/wpad.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _WPAD_H_ -#define _WPAD_H_ - -#include - -/* Prototypes */ -s32 Wpad_Init(void); -void Wpad_Disconnect(void); -u32 Wpad_GetButtons(void); -u32 Wpad_WaitButtons(void); - -#endif