From a2e5b12e38496211e219a71d10252df3ea2fffb9 Mon Sep 17 00:00:00 2001 From: Costin Manolache Date: Tue, 16 Jul 2002 22:17:06 +0000 Subject: [PATCH] First version of the . You need to include ant-sax2.jar in ant/lib, define a that includes all the jars that you need ( junit.jar, etc ) and then use to create the loader and reload all optional tasks. After this step all optional tasks will work in the same way as if you have included the jars from the definition in ant/lib. I did some basic tests and seems to work fine - note that will work as before, i.e. if you explicitely define tasks that need optional jars ( or redefine optional task ), you'll have the old behavior ( i.e. require things in CLASSPATH ). I'll try to find what changes are need for and re-do the build for ant-sax2, then do more testings. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273118 13f79535-47bb-0310-9956-ffa450edef68 --- .../sandbox/embed/ProjectHelperImpl2.java | 40 +--- proposal/sandbox/embed/SystemPath.java | 191 ++++++++++++++++++ proposal/sandbox/embed/ant-sax2.jar | Bin 42368 -> 44270 bytes proposal/sandbox/embed/build.xml | 12 +- 4 files changed, 205 insertions(+), 38 deletions(-) create mode 100644 proposal/sandbox/embed/SystemPath.java diff --git a/proposal/sandbox/embed/ProjectHelperImpl2.java b/proposal/sandbox/embed/ProjectHelperImpl2.java index 8f86e0d54..2b4534471 100644 --- a/proposal/sandbox/embed/ProjectHelperImpl2.java +++ b/proposal/sandbox/embed/ProjectHelperImpl2.java @@ -82,6 +82,7 @@ import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import javax.xml.parsers.ParserConfigurationException; +import org.apache.tools.ant.types.SystemPath; /** * Sax2 based project reader * @@ -97,39 +98,6 @@ public class ProjectHelperImpl2 extends ProjectHelper { */ private static SAXParserFactory parserFactory = null; - /** Will prepare the class loader to allow dynamic modifications - of the classpath. Optional tasks are loaded in a different loader. - */ - public void initClassLoader(Project project) { - try { - // reverse loader - AntClassLoader acl=new AntClassLoader( this.getClass().getClassLoader(), true ); - acl.addLoaderPackageRoot( "org.apache.tools.ant.taskdefs.optional"); - - // XXX find the classpath - String antHome=project.getProperty( "ant.home" ); - File optionalJar=new File( antHome + "/lib/optional.jar" ); - System.out.println("Optional.jar = " +optionalJar.getAbsolutePath()); - acl.addPathElement(optionalJar.getAbsolutePath() ); - - // reload all optional tasks in this loader. - Hashtable tasks=project.getTaskDefinitions(); - Enumeration keys=tasks.keys(); - while( keys.hasMoreElements() ) { - String n=(String)keys.nextElement(); - Class c=(Class)tasks.get(n); - if( ! c.getName().startsWith( "org.apache.tools.ant.taskdefs.optional" )) - continue; - // System.out.println("Reloading " + n + " " + c + " " + c.getClassLoader() ); - c=acl.loadClass( c.getName() ); - tasks.put( n, c ); - // System.out.println("Loaded " + n + " " + c.getClassLoader() ); - } - } catch( Exception ex ) { - ex.printStackTrace(); - } - } - /** * Parses the project file, configuring the project as it goes. * @@ -137,9 +105,9 @@ public class ProjectHelperImpl2 extends ProjectHelper { * be read */ public void parse(Project project, Object source) throws BuildException { - // re-init class loader for optional.jar - initClassLoader( project ); - + // Hook our one tasks. + project.addDataTypeDefinition( "systemPath" , SystemPath.class ); + AntXmlContext context=new AntXmlContext(); if(source instanceof File) { context.buildFile=(File)source; diff --git a/proposal/sandbox/embed/SystemPath.java b/proposal/sandbox/embed/SystemPath.java new file mode 100644 index 000000000..0426f48a6 --- /dev/null +++ b/proposal/sandbox/embed/SystemPath.java @@ -0,0 +1,191 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000-2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.types; + +import org.apache.tools.ant.*; + +import java.io.*; +import java.util.*; +import org.xml.sax.Locator; +import org.xml.sax.InputSource; +//import org.xml.sax.HandlerBase; +import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; +import org.xml.sax.SAXException; +import org.xml.sax.DocumentHandler; +import org.xml.sax.Attributes; +import org.xml.sax.AttributeList; +import org.xml.sax.helpers.XMLReaderAdapter; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.AttributeListImpl; + +import javax.xml.parsers.SAXParserFactory; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.ParserConfigurationException; + +/** + * Specify a system path, to be used to load optional.jar and all + * related libraries. + * + * Using the specified path it'll try to load or reload all optional + * tasks. The typical use is: + *
+ *  <path id="ant.deps" >
+ *     <fileset ... />
+ *  </path>
+ *
+ *  <systemPath pathRef="ant.deps" />
+ *
+ *  <junit ... />
+ * 
+ * + * This requires that ant-sax2.jar is included in ant/lib. + * + * It has a single property, a reference to a <path> containing all + * the jars that you need. It'll automatically reload optional.jar + * tasks in a different (non-delegating) loader. + * + * @author Costin Manolache + */ +public class SystemPath extends DataType { + public static final String SYSTEM_LOADER_REF="ant.system.loader"; + + public SystemPath() { + } + + /** Specify which path will be used. + */ + public void setPathRef( Reference pathRef ) throws BuildException { + Path path=(Path)pathRef.getReferencedObject(project); + + initSystemLoader(path); + + } + + /** Will prepare the class loader to allow dynamic modifications + * of the classpath. Optional tasks are loaded in a different loader. + */ + private void initSystemLoader(Path path) { + try { + if( project.getReference( SYSTEM_LOADER_REF ) != null ) + return; // already done that. + + // reverse loader + AntClassLoader acl=new AntClassLoader( this.getClass().getClassLoader(), true ); + acl.addLoaderPackageRoot( "org.apache.tools.ant.taskdefs.optional"); + project.addReference( SYSTEM_LOADER_REF, acl ); + + + String list[]=path.list(); + for( int i=0; iTDw)4cf@r`ZUwr$(Coy`5c|EZ~&ce+oV?yBCkKkYti zueG-S1jzLo2%LiSFHmTp|1M$A+c-GVU;jN=RZ;Gp?wo*u6r>>_g_{y9*#CWJi_1Gl z>eIQU{h#Rnd&5a!V!h$}k;-ho;%1YoXJaiL#x0kyz-}9l z;v^^5K`n!22mNah#^%rHUsaKkrL_L?4OF}cjLtnc*YD4Bb%CItm(0SI#*MJdhwdBC z>zNGnMuVhwO9BC+DG?oOE-2Y>a4I*sF>qN#iX(^*rMQTqoz+?- zK-yq~y09v}=*fw!w%I(lq^0W1ptYf`sp`YPeM2u`{I=9h0%o}B(4lrjY9xL@)~;1j z8W?zC8Tk*6mWn)#hjvt<<(+U2`iw&M$ReGkPz!*cR6!d>ZwNB})RGTtF2m|$bd?={ zPFXE#A2qSYb1Osw*%j$VcZ=>K4 z^c(Qh6fD*k4Z=|+L}gsHPyPy49Z6=K{43Cbo@c3o{P#WcGyZ#9TAqv}P3=)RE@_jP zQE_j~lElf}DyeaH*x=MkC?r}_DT)F{Xx1d#M4Tq$@KdScEMcu>(<3EhHE6?e;S%zS z%tClU#7nMXudMN*gO5Gwc+Rcb9$dM=T+v96;q$9tg24oAh z!6|hzV(DrK0(9ageZ$lc92?CaPC^!(-YYv+7AF^$-BzsHE!a`5W>#m~a)dPC0eT9$ z>U^*&kc%dZ#klz*(cwnJt_?=WmvW)KmZVEXM~G)8eG{F(HF#i{$tBVer6YQ11Y&^H z)rb)pZS||Ii8Q{|U>-CVrGzg!Gtie|6Vn@^3JAPYrMVzIF>!(tRPyrD;%EQQ*{Xa3 zccye1!G~PSL6+og(*xhHeB8;iv)?%p9j1)qX9=XXkrz;WmXhuWkdQ`gyq&X<$5Ml@ z8#lv*eZ&VmMx++nsIa0~XejPfe6|2t9lTLzvqh48e>FRecUyTg3khOp3^7{gAQF>KBTGcLO1#DH*XEMI)} z6S8F0``^LB%Uuwh2g50iIuC~&vlxwfhz)wvP0q<r9)@sQh;@122?*AGz4p?8y|$vjfmT47gva;^ECRGtCI3xzV)1W}XqjUNZT$%n;U zJP&P8rt5bmm!D;hzR}{Zn!ycoN14E6QjnDuR8-0YmhdnYA3gF4PGk<5tswDRE-(rU zJ79FQ*gZ%1mCOqiJS`y(j7I>>#z(UWd0q({)-8G2t|FTLU!5fx`!Y4lM7fB2t>ntd#;6FNHEv@a%2VKAIu7uQt0Rr?nna=9wtlq2?LWQ{U^7PPWU{L-2;zndmTQGFsw9KHdK1GO_{b~SO5 zVjJ_8Bv->NV9m{#X&#F?tWLSJkT9B-QH=t`nxAa-%#e{c<4$*o;aBaJ^+8^@#MA9} zzQrZW0w#rcxMiGS1oeIg!;IFQ{^B25cb~ud$+5!W>*8JqDmEm|rxUEgBk@9y{vOuI z*?s=OPH9bW4)BN}Evg1oNs~0mz&7cQ3$K!AeB|$!AYY+Ty$h;1$2=A{K^{0D2_R_{ z#GiOz#6Kz{*z8Qk^@Q;@k*E zAnxLC2HdSWnNg)TQ=QvWT-4u5y-UJ=FgYW5`P>i^2f~pud;Wrv(ljHgivs2FqZS0; zC|xiA-lOtV9Bvv%!Eo18ad5?uClx=MZg(yn?{|mFSid+ouQgpi?u?mn%IGIN>C%|U zt4rqT83?Ib6{7~Ul@Gi1>TN~g-KW#p*ZL?+D+;hBFI1u^NfyNqO;0$;&JZ&yqzut% z`t-5|ZCyPj5sc?g5tYpt{Y=xY^F-LW%I0~Y?hdu;P9(!@=P4fDOG?MA$p*<;E%LG#hvMb3s!ip!^s zR3=&~k?QGogCUiHR`Y{8j$t2IPp&^Om`L!zjokNx2n^!&Ta{2l=za|3?hB3DB}f)aaPr ze1Q4hO0au_4?o6~+3Uy~F~Wr`zYmo;oWMD-gp~;}O7O)#;fkf-$7&8YzvF?=;E=pS z;Ekoh#rqk8c_pCQ8BRo;cY1zP>Lm5yq)BI@3w4l-a^%Gwp4jKa*(Yf=`1LGbn$MSU z=janyG&d^g^0&Elv=(3Czqwu5Wj||$a8R-zyLeHY`Qh_#pL(fj+~Rj}0h7 z#Td5u*s-aQQ+nRHLzkC75O{0_g)Y#u(XJIsmhT>IjSm^gDC?x<77f+DXHo_L))Ljf5&mmqq+!zhIaMHmfRYe_fEogT83q1pbrKqXD*?8g zHbgM_thMW`7s=Ud)Bl1;Q4Ps0Kx%zs7X>V~4jQccYbVTBGvNcLH

*db$3isY#jjuwnXQ4U=Ff8YEf4R-PP2*SjeI1PCAda~D#EC@hB@^Ik zbPnLq8A|TB3rBj-TS2vufLK%95&$AYH<#s)+(x<_O(zmIHm%!bSd5t z%U|u~rkp3$YJ3t?lYLZFE=QLa|j5ESaO$6K2SrY||cZRWH&m(5D zupBBM&B`)!$P?wERivnM0ZA{x&{gS7gWAZT0*}5NPtQPO93w}o#li@Sfw{1dV2Vj+ zG`428DMhw33RifZOtg?d0RTZUU4vY7#nKvRgIvRGBjX$;RlS0#My_d%Tp3RvQsI(V ze-sS+Gc59JX9M=mZnt!RV4#?4Op^RSI<{qu0Gwh2d9z=@GY!;Q1dqu^&fEsv`Suu1 zJ4U+u_2}nmTQ<)F+CJflyo-aXa{_VV*yVw&hO5(M@GL#&o7%F`1JE0u$bGEztyrg% z?Y2P5F0WIGq<-}JGDeRrwD!in&7!DsV;%^-PVG1{sOux49z@gmYmJ!W7{-)MQEHDQ z^kD>5MMH{RtnuLKn!oI|R3a2EDS%S9xOLAxDX~#fHV=?qd^2pm=(KbL4(GU{$gx{= z7rKn<%Kf+gBs}-@9>9p|GIh;d$(O+x%z6*BML!67ZmwWr0M0~uMkOduRY>)&Wgf7J zq~tBm*^!dQHyCo^OFMb=u5o@)BzgeR>GbDwMg?uanRR;BYL_FG)lRHJu{UCPY!6%Q z$tQ+CrJ_+t)Eafj)nw0ANPP~cHBWPEFr&oaY1v=(7!NzUA8`Ki^Jj^!a-p;}k&VUQ z7l0grg>6Najw@70go-1?)McCbZEF+7_OX?#`2pGTQmw1UKd44PP>B;MMzFE7f36V3 zY?&KhP#_5_f~hz`$!&w*U=z^o9;sn2J%U>k$e~VD7J(3M){=UI0EpezEludX6zdhyd_^|8Pif zcvtQ(ARrwmpnufl|HU>EIz>zXG)wCsbd}5EwZ%kC@qe4^LSMZCv{&0N1kkE>^`d(BPY(WhJEU+b3?dXPb zfL9>Hr&ry)W^BZfm$irzuQcB$hbIvZ+HQ*~;_zx{5>HUrg$~DN>p+<5v=*#mBwhJl z=C5OY*DjH$hn8>dt(*fWq~6@jD@_z=nxN`JSB%NhlCQ=W?rKTCQt}I$Oxc1K(7UT< z_Dpd#g$A$FS_9yOIvG>}+MLF2+aF0!fl!-%RgE4=Lij6iHposBWN8|GRv^I{5hDwyV~P&wAD zGt3L4w1ErcHs57DxcV)++IT4WLrNPWNJXRqhs;Etd(mIjnf&>H&;0oE;)8uQUG;Z3 zanJx*SYA?<9|jU3FM5hg2kU$wBi>f!*_;56R&q0IWU6cuUYWu*K(u=em(<81Lch|J zyzi=CSu7J~88Gr~K8!OBX)Gt5DLWtDI}h0`fbSV?424MkPetMA-}6r~0Me+yxUsbG zURPTILry_r^L4NV=_s#jMHZAxHTyE3zU{^C8P}k#(1a#gd0~-V_A-I27L;x#U9|@k zo+-%!3;kr2)^PR-hVI_-y@FvT5=B^A9wv0mw6G5_HM59pbM6P~uK{%^o7{XEXRTpZ z5NB@0RX;d4_`|C{g`8qFfJgDo`p6^^MQz{#2oJaLYx5p1k?~Nd)G&F<5XI)A&2qmL8$qdJ6l-+a2+`0W~DLPGGo0E zq~`8&5eZG$;*LK$tEC1_?Ufhi>@4|gJ!7|bL_$I_#tK4wR5`U=cd9v2Wg>q+%YbQahp^wQ4g+jP z=Q@>nCL69UdD^+lZdA+l!4-+YOObMLz91LXgAS-r0qv3#>}@H@e#G z)k>}U1Hb`I6PH485N#T^lsd4y3!~EV2(_|wx1?8cyMJ}Q8h>AWS|ybuug8YD6q


f1xuMy3r8Pu5dF&XGAllAJR6og7L$z|LJ zN1SDpFQ5d1(?%^jZcT8l=fQa;7I~@7RZ)#NPc-x{O$(tmEH&q*Hy`I?(vvC;0*DUG zvdF$>ab((i{VTVi&WdzA><<1-=NYPPvxrH)?~-^qfT5E=v#!IW!+p5c+Pm@`n0rrI zR=O*Wt-}t;IdivQ0aYtDBI0=GWZLp)uf*M?)>Wqs%h#o5mhxIz#=4OuMjq%h7O&9O zfIeBF5$9KI>3SKzqTkscKluQi_*d1?t5O~*+qs5U0mjy&i(*`onJs1WS)3O63n#=@ zmNi{BKzmv~tl~B<$cnOWnN}XJd05RuA?dZfemDJTHaN+vIfH|qon9~Z*<{t zM;ZHBcAp)SgRidM;R@#|lIC;Jy{nK%;Pa8sMY;zou z^5hpAf2?P)D&ts)?wRPLC@xNF0Y>mB02JG&1`h}Humr7)Vx#rZ)b(?r1~QZNMrX+? zYBS*}hZuLANQ~wJ zkG}^|qsB^{4kEzHM$jd}VHjNeG!Y)MxWbaWfsy-)-}nPNg9oo+9w0x+6e5wFfN-&Q z5C69IKlmnw%=#&_F}%1j>s)S%25ud9?lOJCpje;S{3quQ$v42yW0jF=%MVOxE;0Cf zhreDpNH49fD$6I&)nBJ%e7+9LDH{U-^oxV&`c(y#a5*Ujx% znHq!-Pb+1Z^9w?Rh$XY6*(XW209GpQps9T@wB_en;O@To3grT3iI{Gzz{68*=t5jy z?GS45lH1O}cf3q^7>r+uaY}H=f-|t)90)|@7=xN3Lp0;I(v%vG%Y?Du=|~<(J2m@z zWTvl@F=VYCn8uj9H1UDRe)sfpQqL`&y9(WRoXryNu!fL1>_m6hV>x6r{rXFE=AX*otNVY9PeRBOi1^p3<4j>i2w z><4jlub<$rE!dZG z6X(KvEYZ2hib2Ev_~i7$%9oK8l2f7B0Kd@XgFg#z(QtdAOue(8IuSz2yx~uBd+LVf zEp8khm*hhL6N?_-R{W4~9MI7QO(Lq6Ac{1#QlHJjXGYv%O5xlNmWYkk0YtSJd*Q@) z8hI~sJ5i=k$B0hZq(a{fAC*K~^ff`3QfZlSq1awWVhChAu% zeKTa!D!vtgwA{9Aq^7j`$D7os;Z=r|sh-qcu}wB$0_vP47BjS>U|K#ow;>;&8Ra-(T@@svSM_!pPbfnNf$7 z4sHp!B%Z^6_dmqP_n}v`ovpp3VLP<9Fxr`*q>xHPAsdI1L8JOVZ{f(M)Wqp*bBgch z33&m0GCvUtB0Po=k1g)If?~b}#3n#g_I`h`X4E=Thj91*4?&`I5~YUuN06NUmH+>T zApJjfOaid779f8WikOsgn6x=E9}$|aUh;eu-qFGDs?`mIj^<*0-K49cQmt>Vg>H{Q z!9tpf^s}Y$xTHvOVpN!~SB9WJkz+e`F92iPqrk;~?`2b0lCwFp?+9$l!u5I6d7AH} zV~6kMyo%xHiCaiw7Y!_P4|@bp9-GUUl_oy>K;x~@5a2ylS?km-SZ@S zSSd?qnq+AHk9L(BwtB@8wO`ir2zMDHc!XX&X&DKv;tvQ{eT798h|M!!-W~d%q(6I% zw9Jo^l2cTgY^Tb&c^1lG@WvrLMoQax^q;%g$jf-)*$TsI-5i#VdKMd>pow6r&175V zT6@Iq0ggq7Li36@#vnsO{T9$WpiwOM;ISrf{! z`}ZaKYVToX8}e4OlF9LGAy{d}g961ui<|`&>H-bPUo-DxRYbo?=8?G%-=g{9|Q;Df&c0PQ4!sv2dx#G%tSfrT+_t*KTQthNgq zle2oZX%$mD?1h3uR(Mmb!Gd@g+uORs!GBL5o2FtF!=&rf`nW^UmZ0(qns6;fYoUd> zE7k9Q2@#VFM+F|0Nz4+jvxY~I{^DSvrZ3rRjKjc6pag({e_TPY z0>nJGJsL!I#huZc5*sTWQL5+Tgdhw}4xRd^8FkdAT(YTC+l0khwZsS=)SKLLR<5z} zbXTPaJ>(dNXIHhrWGp{WLT3#fW$N9xIfbtj!}DUUPL2N{7Jv2QztkTttS?jKbtMO+ zJzgo-MN(r=MtDFSYpx>lNo)T`UMBm_0922jmX6?uvMsqgggfvHxL;uYU8SFbsiFA8 zZ_%0<9s0Fe;?I63dIFPgtkF($NZ&@*<|JERWKW@wEHIQe2tZiHXY|okq~?^6uU|V`CX^Nh9vyA?;Lc-Y0VZW` z;GVpkuqUungL3=hzz|fi&kr)ravx@Shq^iQSIeYU@SaXI;p<@qR?hkOvxQA7|98jZ^>rKaRuuql04Nb%D_FfBid)$YxgL~MEDG~V+2w6F1MOL03M)t zN1P?w0I!0yiE=PS{Viqg3~<&d=(sFc6ami+G6CzzAhJ_E=wmOv!0lyuQ>;N@@(4?MJf|f3$MUxasK}F&V zIfY$}vrw*lM$_Spe#ObFXr#*gv&3pylOIB&it)#m^t`U!f`=AP>J9gMQoZhH0Rk7N4 zd#T>0@j9hc&qG75w3;z*q(!SUXduHCc|=Mh8a0}esx}D6^hE38r5wZ|TWp*uny3<> zBVq=vZ5+qps}G$@2iUKzDb%To(=fqyL%Nov&D;AUFiV+b92b8#M{LJ0?C-od_kg;L zv`9ca_#Mgk@rVBMCuo{q4CMoq?vmwaW17Dtavj5^d zW{oM1C(K4agQ>3%A5SmJEL9K0nc70k!Kom_kvCb4A&w-smILxio<4FY-XL8ej56H7 zqd-;4DXQ5=9I0fH*YloQJh4XxH_FyuDg2f_w=u!^>s-ZS=^n!Hk9h`3=(qVA2MR@H zsS!sEq=Y@YO#n+uePtg7vjc$Gt42QO9V-*lFiQ5IZz23tSk*pCXg+8I&yn*>6nHORMkNHDg{UFX^f;&mS_w1;5UAnz6 zO%Hm?!`11b@97awZGwK-g{J`M&e1?O7i9@7iX>U8gq9R2W1LE0cp4*3@1}JhvzYBDY2PxEIgzx|OzWbONi??B zVqmSj81LPV&*ofBy>(3zOHKVzfJsT-J{GI_Y1^Sn*hG9C$&Iz=TT#BQX{1tGBj(gK zf5{g1JbgP=f?EvGUyp`57ni-fsMFz^kX=8tiya!+E~3Mj$c~k~`uF+_u?)RyfV8-h z3Ta`AozHZ%P8yss1{iysF@Wed{aUBsOTaoKRvR3wdU7c_{u~wI?C|NOpI(3@yS`!8&bu4#KR7t~; z$6p<*bq=c+H$JUd#t=oFuFV6;87pGHKc)zFg%0{SVQFSuJL~!qwG61Ab;T-tn^co< zKgsL*cM=P0XG{pGUz;J;^tidqbbC>|>=18fu_06PtP&s9lyPc`{Tbsp3lTM0ClMK~ zacOBej_Vd613TFmtZhxw!xdktRfaE{Pdeg(%4zwuC3H*s%y8Gep6pHY-F=P$WId($uy-x@y*F zMHwsr8Cr$iJaMRCvo~5F*Ra9rL)a#?kIh5&&<(E3ENG;)MVfRej=djGN7Vc+nLb{Y z8cIKVmsogW6PohC5og1=x$0`Q3YE}!dgmeC{6dFI1x?ZfL?*x zvd{()ncIk}7L`7nIj3!2-K$F`31^8V-*X23PmGehN}^ZPO=%^g->M5k$I437S5Ycg zKibaiJ!3Bouf(+u!*g0t@Ozu58pqEmP{u>MuHXDtr(6gMmd7fqQuZ*?8}IQ46ZYnP zWAcVta>XIXyG;36L3;$*aGqYerQ$Exmih)%ui$l=+AA$a%B@Kq*$y*utu)Wa7>44w zbZo@6D5;o@O2U=gfq@NA9j(1pN9-j=G;kK};tmA!I-%+0T14M*at$LoY(UE zck8h02=VtrgRsKSm->rQ^Xc}^Ecj5->5LG6*U$gyCk94`s{b=iEZR+`MbHg}mS~N@ z6i1?T*@xH{ui&^Qjn(OdXH`nNe=`8^BQ}FYmLhONWU~GX`IwjWXDvvi76DE~1rFJY zAQ@SaMFRE7@EK_F8FdANEct=dcV*gmv2qJiaFDe9?BI7iaRdH(>7r_2GpIxd|LsraWdJc7#BA zwR^$X_hyWIA)b6O#M+5f{RCQm2wI&)Fys-4g7*U@7l6(n7!dqsig`HT9FX5-76>P> z_yPLDe^7pn&KbV>#Qn~7_#Oi=>@xVpG5Lj;eKKeC*VJ=;Vrx&@*Q0%+Yfs$d248lF z86xblW6w%FPxq5mQm6z%wZ=xTk|qRI34=NMy=w58AuHw9s;-Jt0wq=T`Uwf5Hb9m` zl|AC?MYIJ+Y<597AUezu?Wab~9=j6Q5a zn%us9!cOxFodHdEC|->mdH-tNH#$b*xP}ue5INu9$x8&pLVx!@^-9U>P0I;s@<6G2 zxFL_POHx`>SWQDMOz1~YAmnuQp3j==@N=<1es*c?yeRPFuUu#kA zvtQ@G>;H#Mg`Y|2R;b`WKnU>v8=U@gH>mReb2ruiC@W~+)zwG9o;HlY8_d!U{vzyk zXq)Y*HVMc}plmUDbqBvk=j&KUK`h1M#0=VtrF2WG2) zx+@iW8x1*+O&QZk8xO!TztM1JmlcMrxzbjKc+}=xS16i%nkF0@2v0I)&xRAPV}RDk zD7lQd!Iyz39m%@?Vm zZLPGA=FTJ11@bb1Oqs)mVU6)ia?2}#hhlYKb0`(MIiYE>WKM5FULVOnk0g`1Qp96* zjJ!(Z#x$$;E8K-TlZCv$1CJYbg2$}7rCuK<--j^Eh<6gIq{UZ-kdYCIg+*?@*$G<> z>F_8y)SY0}-o)7~JnS}d)lu1Ch;WZ9Q9d?p4Jk(3U?~@mMX5lHeazdnv;Yf07c4&P zDqPANc>#a@Pf)RolXUN-(EiawDZY8+GQ6Gj8H)BPI`v=-@twGpaPd(;$f z0!aftz?#(tX;mferPzlVjUh+@QA?Y8BYR@KBCjibexs@&*?04vT6#oHM?QKXr7?b* zK7cK$9}kW&7#`1X^Y`hYj5z?n#9*5jf-;c5bvl2`6=0w`>+)EO;#!#2A}qFUQa5A$ zny;?@FxYCwsf5SV_r*JWcO&V<$JUBOdc}C7YI`|b2g3nP>uke89!`f5*p5IGd{AE1$5ywI`<#5HJK-?>RqVW?OVc*z3T? zuV$}1uD^KY_uJjxwJU?(tPd8__0i)C7JqFfkXJf?Pxg{e?lQBW9rIxy!`SRJS)drn zr8?}H$v4VdB19O|lV)ov12(!QBdfg_r?IxDL$PC<%49S~ zMdlcdeXGXfs22lFGI6~J%;rh3dL4!84N7nKDtOrH7fPLAAawK<-NJO{?j2brn8Yw} z`;D;>{?>J>NSnZdif~}j+e5l7?~P6(tab@Ytee_CzLX;IlNB|V8|3U+ZR*~lN{OiXb;uspx-b=U#|dPEv=qAM$qzr=d1=ZKJ+ob?A3#r>6E$l3DDy$1t_|uygh8 zZq7UssR9s6{ll(&*v;DI%Z}fGUFsrL6ci&7qYI;SrVC$wN8Jp#HdT%5{CP6dJt%z@SA z4Hrm1d8~P+4HiUg&Qk?X4Nh3O&oX0C^?^51$)6c+xr44C-a2di8SdIoaJz-%HB#0o z7^63!G2z~md}M*$ksVjSqVBWDK)S^yFzsjdY7qc3sDFtU&Vuj}u5L0ySwf5(xrU{> z+%z!b+&@5Q%9lS6^$>Pl?0?kptuXlE=J2O@B3y zqOFqS)CpIM$*>Q^SB*|Iwdz+7960f1C#WB|wjte&vuCEP>>@b9eACtp>6=1YOPuHl zxsUua#4#XdGd;|1+K&HVYouHX1;H9eZx-{OJCI5Hu_k?5P`}L;+DLJKQTaWu zarY&vn}0<;in@SVLn=0Rxo*8TyuOhJ@_YeUEDEV9chx@~xPWA@^LjGs)WqiKAm%8-5)V2~z5kNxkx+iwbfXFhZ1-kR2m5t~w5URU zasK1is1O6!Im0{;fm~-`3j@GDQG=3=)4xllJ|LlicFQ~SOwliAHv=(M%8M2&@`^JG;yY{=HQ~U|UvLvX0P(IH0*#{& zige!}>WZ9XB^5fWbx6^>%sZ+G!6XI|K%t9Y)XvH?mDVyKUtYF*OQO)#b8>+MM=%SDH7zs^O4e7hyH@&ND52OHx>nM%h)AY zQoO*sU(XI=KtuC;yn?_gDEbUyq#7|p$%eR=Xg73u)5C= zzV{)pxaW-ceLeGkTs~~~%yff=vrb!=g%aS*12E9jO{E^6sVPC1G#f9n%2wgomh0$E-}Y)%r@TWftbl8Pw=FnGETK zFR~Td=HLr`^ z(3NN7nr7~ntvfDWSY)9))7WqP17mj@vgdyQx#Zvh7p|NB!M_s?EN5_r@_U=c+CA;c z$C5eO4TC~)z^oV$iel(q{eMS+dVE7Rl4C%X!i*FwIN^0@5HcMGj>xq)8#RR5f{Y#A zpSEJPK&s%KL&aAe9^YdfwXPu#z}u|+&1~@7PLDx72UBZvOYt3dS&t?LcC&V>i)tSN zf>T&K>CHT@8Y@!uMsGQNgi3$jC zyQ!t1VWbBgI_Z%PJ2tiC8EQ^MYc{DW2GxV%oUJa zQ(Y`Lq9Q0L7Gmnxmnj-3J5hNf>_dvb3Lc#~(LHeqR39WTf-b|CH|8%oi=T`G#7C0q zEB5bsnNU+``ST2O=ecxRbw?awmC#^7C>?H~``wQY{(>!~qi{;9tIaiKNn3ipTFpC+ zA=-<^D9t~jy5bBR_h+o`l;tTv<#$NCSOnpSh5c&B-$$+cGOM$IjqkjO&vTs{9^l6B zqbgVPq|P~HP;CZVb@f~*mq_9ScnXj?sIQ{o4zt>88)V(Lq8EV7rEdL1Eo&(9l_gqz)i^5C{ zC_D|7vXp!^@1mx!Jvrw_hW2qAb%?68t{;y%tb3lGuCR4-;SDk$lV~RdcqPTTSH3dV zV&T5q?^?p`psqHf{%mRjz<0>2#<;eFUeWV5^||Hx_{H313rDN+{7(4pq(#+REbMLV4oE&@$19u2j zVpvoG$(&jnj3wtBd_wyHdfP|9@GDg|e#Fy3{baC?uw9BqNjV0UK6 zx2<|+?=Y1?YOFa)9F#>_*TJI#Cm_F}6Z9(N6k?9|kPANu34 zO$q7jmBn}1*s2Sq=odhaF>3p)4=IbJ%PDnrZRCn9K^f^yk2tMOQCU-pdaeGGnDY&z zxUwQ8cX`Je#L0hT_NSSjZ|^-#kn5PQ<;aYbS9xOK%7TlRJ(-Z`4vbl|{>)m~=eI}M z5yN)|saT;y#NL|#ys*QH9a2XJI{l(nJQaq84h*xI(nJgnKyR{+ie6PUj0|4`ki1tkUfC z`+4Gre!|_~yHk$4-?n!CDLK5k%lAP*x%cg)`SBN+5ZLDi#A^~(wk$Z8{(3=tZb}_w zq>UI6tsF7G)y#)9_koX9Dl~dU;g4ldSoFAN;)SO?j~paIeIm;*M|}cSR8o}RpFrg) z?hdRePxXV7*Tq+sdE=TJ=hPDs&R_p!W&ahOVSei>MwPD+!6>y9r4+1)J;D~neMNo1 z6)HnAfC6j+z|k!Iq+xyIc>lu7IQ%D9|AcSd>yLl&HD=%HM%TXgR;lsEVkBx;y}}Rw z+dbka%P8GKrvOk43{GZ~?#1DFt^NzftDKSQD(jgemdz=CHF5{yC=G~K@AI4TxzvT%t=7ku@SXNyxjuEjP-fXF)}z0y-#du8Tzo!boF7$2RY@Susw%&; zI8DV(d`8vjB{_yJNB)MJfA3it$6(NaJHY;i>^7QGr<|=euACj%d(&y1BcHHE7>xw)lmw}jtiuiw^T%W|Gbt^sufDq9l?dKpe5$OeTF14X zs&ubn&(F6hh&Dlle9s0ZFImj>yT7u!X1D-94;we7VmN-Rie$5AUS*|O4JZf9zY$j1^E$BnY1{~v%hA-Ke8V&cvGu#)LxE>Sr3o8Gt)<_#@43dDKIfo=BAsj z!}Dc<=CNibJZnoG(?Eg>d=1+G=qYD`+|I^?h^li0@vKp^e1NAn@p{$iiG|>pPbG6Y z+E`oq6rv0ng$gY%>F!OM#Av2ehurocxRI4#VZe1oiVXw91UHD-rmR!|+?S=e9;JzR z5y$8nv!h-AH0+vQ`pA1p2oO7xcN;NcfNj!Uvj6aTEmlp&D)HUEU6sV9iU8CJ%>=o{O7&iHyEdWIvw7G-(o!c>9jgw(Xhouq5299opQWS%NHd9E)AS+8|dP!8oIp@5G$g& zKien|!xsccvd}A!TQyx%l^fOVsVxljCv;(B7rZ(l;1vW^Bb&?=T8 z8QP3>gdCfJ{(8pnz3e@zT3vksLP2xYoD_9jmXx77P&V=bvgAZeRNKJ}1;dm1>?0gq z@&KZ1y_JrU<$GAxzFUNWFHwYBDr_k|g;ufR4%nz`_-qQ7gzhxu@(S+|aSSR9dRu~r z*UB1fy;_4J<1&%AAl+VhDL0P;gP;#6+{RrbjO{E`Ojbi5*fs5lu7skF!=qW7c{YBs zFqFx)3VsID&z83a7Oc9EZUy77ubRigCnyO)f4%r|4g7(4SOZ~k)Fe|e%py=Ujw*+R?C%p!Y6 zBn#BJf^USG*E+WvzOWLrHUXfo7C2u6ixIv8Buv1=!Ze#~u}5<9f(B!9nL_BZPx?^h z1cvFaUb&|0&1Po{sC1y;BMzuw`NeKMreM#*g4mQjV$s9`*%n@Rhfw}afsg!>0@Om| zNZOU48sO%iFfQYWBQnMq{xMc)Y*LC~Y}@9KX6hFWg;PuyBnz*B z*)_yfGY%Hh(tHPu=?d1Y%4IeS+t`ulN4V!~FpY)>*0wKj-9-#94ZZHKzHdaHeS})*bxG0i_``x0%k8NB8teXfQl4wle2ai zXCw5GdNTI8;{LPqbfbL3_sS@xAWtFTfQbDlVy_TR6UWbHaSrgBgrrW#x>PoHWJA(P zm}O8PIo4dJ-Xw^nOHzO5Kg7ffAOjR3a|U#w1l~(aE(@1P}c6RhR2)0=kjG zUO5(KMY}431SkxfMbUdDc-dr zSe)cviV}k~MF&vy*Z-dIVCFcEv%IKxvsyvgq=6u|+Kf6+Co)7f6ja1ECoQPErX|g5 z)VwiEPSDOzUr)chQ9{9!Qjc<{)_VMdtX)EyZ)9uB%@nm z7K>d27AMs($TT$cnU|En40+skf=P`~KFf^-X~_%6S{#5iKBW^A&jcZkLY;JdjTTYn z!gz#cC9e{>UcQK$#~Pt<#m(`VN@s{~`0SyUT^ESwZ?Q-B`YtgDPwBci(Vxxid~Vw26Z;N0mNdkh_o*gTm~YMROa~; z6WS4~$vCJ+>Mz>cN03ig4h}itg5ZU<0kPR+NAUDDZYkbstF7Q6f_;d$c6MmA^h^!W z)Poh51$)v1M?S;yt?z2Vo;3`%&pVBJj`A^1X-L2st1FJ~Zq`|-`sq&K60P56w@Clo z!ANH94;S+?q*H?CNin@}ESaooYap8H6(SHl_^wKxRq?8AN}b;3_2K2!x_RIs zHLv5FyYfCXc~B@&5fo>Z$pqc!gOKW*^ssn$@4nf26% z4vGz5IT+XsG(98oeQ9Klfk<&T^*QaID^HHJ)V>tZj4$UH;9#pkh`Ik>VG6rX+)YBV zW~u=hD9OnSo&Zcizc;Jf>XO#mAv3tBkqbzvM@Cl$2_f?dRY)S}H>AsE#nMrI7xnOq zxe&}{92T{(8!#ucF<lk{?}P&o!>s+@7rg8=j^lA zIeYK#H;q!aB-B==ZB6it9KQWU{5#XBx|=fb=C{=?S`mnfYXpLS|YjD@-;(>aq4*e@%@Uy>QF{w9gHgf zF43D2M~;F(Rb^L;>XU5b>%*TCM&k9ZBom^;vLPI{2&TYxyIatE0qM|= zMnZ0mLDtD1G&?~QmXz|3(H$r<)|a&<%{a_J6mikX*d)qtAuCx7#?HcUxqRS5 zu&+|^w^xv^$95^60T`|)qpd%3v0PGd2TYy&RII(sUy7M0ApQE|A$i=0{JcmPx30AN zvjf`J{K6!g?2wnL*4wFB;a9EN+%K8*20MCN58mtUk3FyQbU`FOwD(fId3E^>({`j* zd&BmTtqYoCC{>EHwQE!TAvbv!nsq=AoxLFL`+heeY}|x-YTVnn=AMypMACql$wPC& zw=F&2y;>)ys`7P6cgCn0u2p685e?1e{VhhJ0mP3@{4AqZ`u^~tU`>zP7YgUfEqNYE zwyTGPRc>h`GLGIQcFVHMtvG|OaLqmVV*UIS#H4-29(9U;Ra@8!V&|o9R8o#Q@`LQ6 z@uT2)=E>L3++v*BIX2l`Y~4e5!?;2C@MXJXlW$bhe*6hM8#c*1ydPz=ROcF*3eEoX zZNFQAiST*VBcX4(s7|5lt1ElkDJzMd zj^ClD@61s;k5EGr50vI)vo$Qo$1?}q`{Rw=(*I~L z|0$2!l-v5r&CyMq|6L7e$DiyM{oLh8hD`uFk#{Nf86n)}fxOqhxU!vj@0l8+QVu!W z?{k>}34o}vMmcT4s>aHepv*pe!+(bpt2tuAF%3rAJI2%)zIbX@@Yelu&V1zEv|Ha6 znVh-60U1P_D#l`o^#ps=7N=a97`;-8f(#A0r_jk5QVQLU+`DPoqr<=$6Q_6F-S^O_ zE#*?-UsOh+_NJYmlgoqX+xD(AQTGUu9z(YHTVy3a|W4;K9dkKj>JvQ}zkivbc zeA0PdVBVzGo8nqF_Vo_>BdKKiZDQb``&)P67JZNylsWd$Nc4lv-SJxcv0{^dW{=M* zC0t*uEO_!J_1&OE4Gz9}`7zG?=YyhC9%q&5rs=&o6`tR%vR^etE^^ZHlb3IvtEx*) zHynK0i5g_LyTuE2oc$nVb@lF?KKU%A1gX=XUUg;G;nQW_yFOOKgY?ZG12IR_2kQEz zM(li;(Ps`WTsLxHJ?a}RBX$PSy@%0*M47<|-KadRKfcgh7M69hrfXE(p6hQVzMAsp zdEzaE^qOLP($Z@MX+-3tZ)VXgQK^JdiaszwDRP(E@P z@kL|m(aY4^pMLhSA}#9oCyjqp;_O589T=O2RSFqj?V7B&Bf!2kGS4VRzBF6OdvnqB zgmBc0pjukN?~mt{uq5A6ZT87NoA5yF-fv`!D2(wGq~%PW=~vLJhw%IYUg?hE#IXksiV`*c$Fd_RYs z8I-ugQY1@#=`U-)OS{|&fs%zwCy2OzDBtI zqGsc25_&7G!zAj=^Kp#~fW(T4$@I~f5gyw#bESP7Miv`D9F&Un&26rseAx1YITLbx zTbEWGPP2Yc&%q0GTDHtmvx@yyyq)Yz1p2Qyv4QA=Pxh?&oH;ae>f*)f_CO z8^Gr3L#6>@E*h!;0f;uTKtrw$)D{9vQ@5e)AkZxWe~TOaN4MyQh>?`QH;cG6*R8w% zCu6kc_K%Q}-8$U>)DO2ca36Go|9@R007BD&28!}4RsjytkkGs}xC^*Rvw;3A2||TD zGpHIIgz4gNfS#uV{Z$z(F6UvPb($c==bJ%kJ3u&)Zw+M_fly+{R-l0<1;i96KzXL% zsn!Am=${x6`Wp)AI)cIf6UF+}Y3zn5F4^*(^Z_beY5Ur3UY{Flxq+Bz4-!}CDj;!v zn$5lqM6@HHXvq&q3?!~kO4vxmd4e@I;H3G{h>5IS9$Z;@wNMV)?hV=w7H$X6gR5Eq zBHs`d1RClJRX_tcYX)%n2B%QafGk3Q25@W+z!k|sEl-06<_U!#ZCd|hw|_(9&0|2a z1Va^U{Q7=uxPj<*j!)bLP#7{Gu{bv6tOZ|Qg2SJ^+qr?*oC;JjyrF^D_y-j5HeKmI z562UJ_+$a!XPLk2ZScLB37jv+fUiqqu_ClEi{G(PfN+TpG@G8$xCL0rR)ag*ZQ`%? S5fD)0ZInxjIGRLTz zUsa8oSF7MZ$H5VmWFa8ozWvv#5-xusQb7E-aj4@^9$}bK+_~JkfPGVv{SMRk7(T@R zPl)eV_F0o19MzBi*5%Kwz>_b3sjtc;p}_U16HijMc_+n=7i5W26tM) z+NcT?ZGF+J$YlXK>;ZesH^^SQ*enA)>}JrpyU33<^PTj|3bymotjI6M{?Av7xvtYh zHJ<@b@5B+NxZ9MdrtQ1mJF%{B0J2(h&zm!Qxy?HLml3^d2p`miq(JV6>W!;*&8Zq+ zmtbFcO-N}9oTI!O;`T!q$7LTS%@zbn|2jHv64_cS_;|D*hxA32l?Vim%R*`ZQpRBkgoXP8^XG7918i$VGz!@!WrAA41A0{q?CsI{yjGu6q6PHPmj!;$t!LDThwq<}H z!SZfsd5JMyYp@f6_Egdq0d&8wc(T?+wIvxxdYVW!hg=?<2ArxxE4kFp7UPP%N2r=7 zC`vph8xwU^|bS)ko0fJ(Rki$o%;R{Nt%gliSbPxK;d26?%@)V5h)sc$YaKD@joM zdRmtVi2j}}1*|Y-IwZy(KeXnSH@Pf{=G?0!_~Koa5ToJW?zg0hI{Pc9B%({{kkuZ| zd}8Ai+D5N?Fzi=QjU_|tH|lipGYC$0bU4DJYipAflNfunzJLv-WE_M0qc$;-tAh5S zZvJ8OB}}LGZ8M+rith|sfOBgms!-v(%98*phCWeP5U_TYF)W1}JuCr0l)oODF8miE z3SojIjA9avLzYy2Hl7du;OW=e7ULne9~Uai8V%jv9n8i$hb{Tp?Q=EpH2ZyEjc_fT1S*nKj!2aosbY@l_GRCTi)Ca zo<{T+DzFN_UAkybWog3d+|V$PudX1qaEKHGU$lV~V}5=3bbI(rtEmSev*p>@_I+-3 zNU-|Z`M9*f=%L}3oe6=HCJCC3moIZrI0UsNrf{IvI8MLpn$W%P0wQYVC5i@@&qrhh z0QJmajQ@NqjNaNHt*j>*)j=j}Kt$t`@~Qr(L9jXe42G|U*k5Kyk+T>V6Y-~sS2;+s z{8Xo9sBHzX%ln`8`sQ5vWh!CqP{vQdQmU7B<(W;D0UZu~2m4CV<1|n&ISr5f%vK)uWNdL&sr8{8}V1bd@XJ|9$Mi{BY=;ro_kzOw-JR6HpmzTQ5iy z`LjVrfoG7Ga*)|duh=i5`=%(NYddZWT}J7rn^!bWaTk)l$>|J5A7TbntW0$h_1Jn# zd5nSGF!&?jn<9dmhFFaTcTbt2)oTJ5Qbo1o6l@gb@Ej?SrWb>BZ#TW0G1;~uvrkov z-!7r`uFLP1%I>9yzSsuQ-}j;Mxvy%REkWs5JIgUHPTmBgkX8RycIEWZeYtk_6NNcN zmr91F?3Gj#=9HcJf!_uA5fRlSW0M&d?Rn8L=g30_V`j8NRPY4EMQv2&H4fHA|DLeZ zmlO1fKvBfWsXae(L$Gg5HvTEw_sjrXx7JVc6w?DZNdtPTS{c=ZjE<@0 zb!>o z1pyY)q9!Av9uZ>MIXoepJVx;mDTq>IP>Nk4WXw0;%L|?Q=x;XH_h-eU=?#dK7Rw#C zeN(UfjyGH#zixk&Z2=fNZo9+q0%OjBmx}mMZ>%-*f`l&(EWvw#%F;%CA^&r_)uvp4J?tD>qM%!Ri6B4zUf5R(rwr z^M5fxr{)mB#e5J7g3I1ZOta@`r{o6SLoVqmm+~@R^9Ax^!q|0x zvE-AI&IoXK<42jAmSPWJg42rv19&nXkY59Ne-TbnxK|ISfV*cgfZ({`IT(d?-kk^- zwMzDr+M@~q1x9>D;QH{9Q(16e4^r@MOJTNxE!2Kt-dhl1u>L1i#v*9~mSB4}LBRT@#!@Zwz zS@qHQq?*ka$`y_C34%X2fkydj33P`!Y!S@xdO2?=YyIviLz8$k9;mb5}4=ql{jzEI-JHh{A2csMon{Sl191I3cmeSo(h_0NaDWsA%~t*KYXV} zSTV&0QC3S`Z)@%&O}!JFvd8tKkjk_yAq_Hi8x~vOl)NaY$Sa0Yo2o~JB>odP z`-4H+FT|MtEKWuDf#DMw!Qu6!*i_ExSsc-4|H)b#0o;=c*g3AjZJ10tmL<01Q^~AO zpL~3(0%G?{{T}A8(P%9qvT7UO_~wnJxw7sRc+rAv>lK-Bbdg;tf6o?IQ8Q+pAg*jJ?v?Qa&?;Rqv-8F z!uGGjpF%9e%YVO%uh9|oZqaa53!M6r{pK8|qKC-{B&4ptfXuX*VVir2w5~p-+dV@Q zQr8r<)ZAY~tM$eEx{6Avcdpm%4sZ}VPCu z>V3_C(B$Ni9o8FsvFq$QqN=Pl=5mo%R;?j^qWrnDl_peZ*7x6_@UCG>V5(FJs1?g@ z6|?(rZ0eIgHp5a5&K&~aH-a^snd_Fry>YwqJU7038T+ENxnyG_o5~4*OA3TZ-}1yo zP~QlEK!ZtM@&qE%0-^JJG{ET{v0H{u(%b=H&merEHh~y~|3<%F4uBe9%w}jg69vmd z(Bg7Y*n8ozbDbU%4s-Xy={F_e9CHokFEe`^&A8jy$&WUh)NUI$v0takT3nVPOdlTSpF#eOSY;2E2xC5K2rxrU#!uw_blUQ_3pWyOP45uC!w?hl{_}z<-LGM8Y zAhRe7nL~ZM!4T4}hjL9ywWaBhCDs?!w~FQHPvgHr89_%q<6G@CSkF>61_#?Zn^2Ao-Z>R$nU#8S(@YQTHRB!bRyDG@VQXjl{xUQmy?IA}@Ot!Y3 z0bi>x;{OnD@@5cP`~BOuPt^Yx;rBFe0cyKJ`u+e0|a7RG0LkQ z(TAYiSQesk1lnj@84s8Jx=Q5}Z!J;v`n@4?5Mm{nt@5*W6;kYw)P;&@e4I0Qxo#JVHSm7Z54^h zVtE(d+i}S%WD|DaKRe3$}2nEx~F=BhkmQ z$IP!2q!TuwS?Z3Cu2brXuU!<>^KOd2ITL!*FufH-K)l@Zu?r~$ir{rhHHUAJ{tovg zmQ};&V0f27e8taPd1f1nL^~9ZbOBeD`2S9Y;u%p97V>V%-EU@AM#%F$WEiswD`0;w z3B3}Ox65I0g~zh4O^2HnnJietUljk-{||^&L4y6Twy3I4RQ>M(M* zudPJjw}jOcff&fe3_EG6xhQ#J$eh7`Be^$$6lS7fTXML zmy$3NDP3gdO_$gl$;DVmHq<+r9hJk8!x}|qiFSCMzY~ouq?DPBQ5&Vt;n`msXs-rb zj%|~L>~6JErI#MZ>#Wz6#M=z{rA!0E52~-pJw;QmcWH~MmjsYFEmOZaTD56P5+k9& z2ReL{h>lC@&XJy42-r|RYacwxyea!NXV3Q zW0)N73R2Wzgya1xlO_9a1=YcEdk9lNgRP&^@+YN(WIu?<9F@Vvv&Kjt5b?XZqy=5J zW!~Q(pRtvB)LbI-NvBDq@TY-m0gl$m8^tH*sh#RHNp>?UI6gfam}2}&zaif5oAVHe zKY*J*zk+=+^)P=><_i>gg>fnNnIfEGLgQ0z%W$mz08Z^toKaISnomJ*c3iP>5;L#n z@-ha&Hy(_^x7*^*=L26JIwSHbUP2i{9OUW5hw94RvFNCEhEx|C1-F5EeRY}v^3e2* zG;PH_8>c&@lsa+*+ba9cgA9$ceB}w>M!GLQ{iR!Q zgJPqDuJUWO_XU-du(aE*AWfX5g~+NM&b@ay_-d-|{6X!om&SK3h)?yd+C5}9ZpL;c ziJM#;N6lO6j;!^4yg$HkAu)NgLE7J|GWnY*7*-j;=uCmF`BH z@==3rk$PB2)&pvB74rTaC94Hta!kD5JjzSDpE)L{EVA?rHH~f*xccgV2e!g{CF(-^ zhT*o`6yCuvqP3dIJ(KDJdEf6@ymRt_DSR_@potFdc1*=`{=5_-AX5(19!66E{yS!a0cnuz z`n?;2#c&wcP#XAK2fbm0;DT*KR!d?Y6`niec+LZt0+dAm` zDoRgQ&Ovy-YC!zFt~@o9(YN5_Yo=_FKE>%ujO+_^7^U$FtzWpCamWhKUqyThzR*?J zVkwnVc;wf=QDa`or8^KYLM50pdBiZpmgR%nni^b@ zfS=jknemU75AiSTKxsjiN`}$furEJ!O+Q`SJ-RJX5D@G?)S7B}AMpLdYy$HCLhZi< zr8-brjX(nDvl6=0GSdP!Vl)CEX98}9J49(g)ki`R7_q8_;B0RJXEpaASL&Nk?i|}` zvHdLWPw;@kiS#d1mn7t$``~?dwOB>{Sa*esW+Z%jVC>WVR(baI_10EN{Q0p*|58to zhT#;p7^!BcrFhm5fa-w;JCAgpihhM{p#m)K*HwuGLv_{JP(C-Bt2SIHD0>T;FVuBb zEyloLsm?430noSQ^j){_;W*fi(+|yKnbSyXT{bUiTSkc(&xZZww1;?0AmVbbV&1qa zMyO(btHY_V^qN6fe{*V|C2gd>gyGLL{E8`C5whZ>8oK7|fLR$Y`tE343!8Hck+YU`OS2OY0-6 zQuG9VmLNzt8-rBB&at4zN6$v@h-99hqSU?_XP!3?Iwdlo+}a3w=AS{~T>%6m4ehnU z=2=D$s&#ET)ffi!@va8`HmfPh+~cGk>hgu&$wkP(KFh#X;Z)jWTIfCh30-xVGuDn~XGt<|@`H|6v9CfxQm%BSmD1`W?kZAh zRU6{^+Eg!6arw;g#dZ_qC=u|Jv-T zyR{&ESC@KZ51Y@Ens3)B-2*=2(4UZ`P0vssWOV4+o7wU6abolnLk@T##*ZE-+3k)r z{%Ydq5TN}nx~Jnyc^?9;&n9BRw@Hz5F^{*G$Vl4y>XSKEksc;AbDLazY!~+WnkB`B z<8a}_c@ZM5^WfD*zW#nz7Txc5sYEo>|1$`3poYC-p&mY229I`~iU!CSidj_JV0N^W zLGPp~tsm2S4 zdEIqt@rG)va7*UXVF^h1$JA4WBidk9=Fonag?qVmF3vbi*R6B=SDT8O#Rxv$){rj- z4tE;%aVK4=3f0D`#U~+^-&Mz(L@6K9%&S4|f_w!rc z!Hr1>k=7}z{O0Ly9jB`EA>O)cE-@k^<36$7ZZaJOpLw0Vtl2=NQ`Ti^%H>?CG82i)8qja+|GCf~rg`)#;lJxKY#?R9E>(=MX33<^z-mgDkP#+|dX>5M!!g+%NbM-It}sr!V7|AF7X`pA~1Ye#Oo>4^a5m| z+wwy2=ptVvZwP>>@WZg?kPzYwc+}wJCsZc4Jg5XB@Ti>oA$&n8;tR3p669I}&@H|Q z;~nFgF?+d6&d~JZQqmN`VM@E00vu6@hS!T)C0KOrVe$yrUuOufJz~E%G`ijWq&IQa zIwfyUj!$YkMLk~Fy*8i%5prEbSb~YLG0aI0gvbxl_7Q;4VrOmTa21CoW-GK4w^Ztm zb4awf2syz=SCn1v=q^l>tp19|tbKoPZXuLLCh2~Jm;~UMf56baus&n&ff^$6gwyl- z=>qU@Z>lbYJ}GqvdQ8q=xoJq>6_i%Qc;c~|6aPdz zLE^)vCziwiacVkV%# z#O6P#phn>i&0n>>Zu0ZRr>Ui~9W$lxdt96OeQY~ive;Jdb3KJ0Q2tkS#}j`N549Sd zPsNB2c-fz;x3w)ko`Kt5glL5A)+8h|`v-~2^tP0x>I?4KZbCMz4nQ}Zk|sKA!3@`_ z$`Jly&s#aJ%@)szu{`|7i_zvW+;ViDF2F0;`r{DPnLd4*T5WIKZl%uf!?8i&BP__H zCV5iS*Y@^kdPqi(Lgjcau(x$>V{jq8#bwMRZ$x{Q;ao^5=e;55vXm`qL9rw;G@J96 zhCYS89?d8x?-R|?9uTQiJ?sIt3j7reUH@(Lo?^cD?W%0}RCbm2IimN-W;ZSzMWi#5hKR)NZcI>n zZ2W3uEYf(E3FwCBl_uOyWkuDo8VNl&v5rb#q;(+zaeaGklYz60AZb(hePbG(;OiD+ zSv3h;WGwQ|V0qXWUD8R-DCgXZ6?OyPT9?Qg2I7RwRJ? z-cwvlNqQvdpf$=&wsy4}7_N0R_l|MbbZ>pHp!%SE46uF&8ZCzRRCM@BT>AudYOV-e zw~~UI$T9|bw>Xkj;3`lHJiM|B5FkSk5Co9V?zcu$ctMvQqK4w5o6Jd{fvw?G)SA{1 zFeZ!eVLE505{f`p<~f*(gy-_+JBmNj=hVBiY&xD%r9!ASl}L@0R?GFQ zdT)v429iXE1X{xdJpOjrV~{c@)a+46Y|Uj8UTN99J>mLwcxEHTRAU%EpNhR=hzP3G zPX+T{fJuU2PEYTXptBTpLOo&X2qdGYBn^hA!V|zG=DdaVOB~CskCs;rKFQv)*6Qwv z&+@{`!?IF1>nt z>iZiA#$&&<<|!!uE8Xx>)abIXVi*-=8p7UaG@GYhE~LfqTPrmwSR_LpHLzuDs{ljW zqNH>>xMFg|bBGhPQcT^(I-A`$glkc`ItI1Ar!j$}h!;2mb z0$y*;c-{&EjjXzmYE(+bqr*3MR9?UgSZ@Y&lFTBRsRAb0NyPQ& zum=_`lGJ*HtJO1Z9bL$<2gpbiS)dVYRbdzuADBV+^B#pQrio`PC$Ry!JEyywOC%gj+l9n;n zr_E4_OU;AYmRT{sp-U8xx*au7ivi!uj(4Ya1?;Dq65~;B8?vnSLZ_p=EU-HLlrIlC z1&*~J{69Z1qwqsU0C-$r8?p~DMI_fn+W~fogfQa@7fH$l$^Tpup@DGR|f-`JE@R1NzyX}RV65t&sjpt|E6XAJL9Rh#eHu#irvGI85j|@~i=h74jR%4T`n)H)S)&1|B(-D#qc`|wG~f;bj8=i{L(iZrKepV zl$KSYl$YB3_dbo#LC+7zsp^3!9SFHA2&qXiw8rsuBfF|3k3Y}0>pl?B zaP?-C$Y-qi2egZTRtJEIYTNZtm8JTPiwJF+OogX>(>xB>s{qb3B1WuC$4gGxTHXb9 z7D@T>O-C&;sQFnG)RjM?B7|U_!uGRHQrW#7xkTK zytuFCQN^+ayA1~*z!ArpLbE0Rg7Xikg;6b#KAcKu&t18y6xuA_YRd*AgCSahzls_yQcixVY_biK%;c1ggrQM(Tr zRuKgShSBZ_wcGjRJQ8R#DV<$NUv;oHmC`KWB53{FETWB6k=EKL$|qLYbyxo4dO@ig zdUn&CuelGgXaGzf88&JKtVxY6OnOVcVy44tpOg@JpF_P0JVo&?jcy(M!l%nxy?87e z*maHFPJaQ1WSZH=Sg+u%7w!yZ9jDHW39nxWFiKetc=6m`lfcGS&;5uH_IZ8A-WhJ4v-sEK%j=g?ypUOi6##KeSjEk?rJ3Tx)c_NF#n+z@7D|ZQ zgaqL{VZVM#L%qn6W9{{1@*2MVEtmlx$qV{ zN2_71Bq==|SO?o&tAs3jgL$e2mE)LIckldF`ct2B3BFkajOu~2-fVo@St!^MSbrrQ z_`PcJ>FXC&prb0_H?%%2+t8$6m*a+uq#SpiDSUTYe%l(dn?QeZZ#+jf=86txY#eFP z30u&QKHfTY>T=L<9aE2p7+YxCN&C~PIkn|h(lK>!*ieJD31IBpA=*fzWvbY7m>yi7 zKAKev= z)0^BM>70ILMJKCTFutZn=ZNy6+(^?l2AheLKX8Jf5tP_~+f~Dv8$(@m>|_b$>-|dB zIO+xES(bEbeUUX7=BA>0-jyDs?!+ulUBt1L7Na&JJJ@GPmXkYFU@DLS%;?*-CLq0o zsUtpiCsMn~l{QN*zQ=i3@&7}9&ruFFr;;w-$jKGmVJhI_?H_abw|9D)4hRe!ck^A^ z0o=8veI3@JrqvZFe1-+|NT_@wJ>ETAB?5bM?%Xeu9Cv`MC)Yy;K9;PMi#O^ z1K_*Qi?-47w}JoWUQth+EyCqn_nw8RV;SoGaw*i|{i?7p4c6 z;;chzp7iui_`|#NKBb(zk$uN4St(t5?(m!R;9Ts3{B>q2d1A(Jv}Us1u36%I#33xgJ$_gdhVDuc400?C zVoY(A7N${3@ubc6-^w!@?*X2CITgfj*e@+pG(6^|0k&m-i}(bOsX{b`%MIU*J*PK) ziF)okk2ie3K9AeBm1D6!j0$D)Hy>4$`7Nmd=4!tksEAt#F$q&LvL6bu1%c10a^*~d zXH!RPHT(*zV^{doqfG147R8qRC_Ig##DsBl8So1<>$1|6^}ovs(}V;G(OJv^7A0bt zh=OewogN&f{1qpm#vW7i&jS2urty<0g!*(mbU7)`%ec~IaJhonziP~mJ#!3#^7+dC zeBopsc58ZDQ)B8b5y$bRP6Ea6pR}6AW~X<95?{5E$)Sz3Wu1uy%FjzKsb}6yp~eE2J|#!~>)KBM}ca4bePZ7aJZMz6z>|!rZi? zn`WdTEb1=0YtmI7f$k}ZCv_l?i`M$@jKyOmXB1FRU1Zy9sfb)hFu{Wgw3LpWCvldC$#nDc49Lxn0<3W#0K=@5eR`+|K^f+hEayBz z4LH77G^fn$5Gy=2Dz=t6brQS#ESipos_l=Q6Bg&pLdJ$NtrO9ZC_PNQ*1aAWD&>JzC-!f6rYFQ5p&KtLSo>@<94 zXx!V-Wk8QW+W+h_lIrk zm26e#8`v*uo&g8`?NPY-G7{1^q9TGB)U*N`9Hq#m0X{u)*1vRU*V#wn&rcoRGN7_31DVTXd^dyA63XWN zg0*{Cw*O?KE(*8pOEKp*+zOl?9R_a~RP&3!~ z1DB*PfYS5dzl15+LdAls*VrP9re^^rx-;p$u(`*5kP3o*NS7~AQ}q@zGexj^2yapQ zun&SFH&&AvAHjW@uzJR!1xAw;4qbjSEP>y>fKsp;#*Cvi$>1^L4-cj-&QM^c-+W_8 zFSu(-9rPsQogp-1vqo^6nE+@%@X4)6I+fe0hAJ0EmvA^(<2jPE=K(%c3Iz!`XauLKz2}dxN1Sbhax&vp*?Bm(=j0(Vl6XG+ybd%X&(0BS4=i^|Yl=8f8;dgo?UE`jsW>cR1OqSNy}!|R zdNHofIS(H9+_MG;4Baf~A34%f#6 z>ro3+1k%|yohFR%S zJT7Y*tdytv>a_C_@eQpz>uwSKf9FAU4?V+t!T%SO9rD;b)I)vy7V>{(PwjpJfZDKr zs*i+UpQ7t&rSStUVL{@Mb_EAWcn5}t<_p|K&!z^qcmLE^wFKQ;+D;rm8$GICr>hus4%v^i9{ZW z-k@1n@(i{l`q&72N?)j^%r^Yam|P=8PlgkslA!Z62OV9QMH(FZSjo%M^j|WZx`1#p zH&Ofh*%!_wdz55OZ9=MFSw+rGoST~tRO>NMIG&YRH4&)mMifP7>#GYaKpiI&=|tK6 z&}#RXA)Y|btkWyF;pHV>9Y|AvpYF`6-9rJMDMt);3_g#}e69FAD{2y?sSBhF-fMWG zbG+2Qk62bWswpDh_-t6@l^V2GkL5(sg$x7`0{Edvbw zb6?fg)ypB7u+dC#T5wtLD2UUr6b{qV@RCbf`qb9RmaxqduiClUYP}jtj3lj%aEX_Pn6Iq-mcz zpmJOz^7zH;Pn`V9M9ik~Qz@KEADBL>qGy)0*e}u>sFiYKTZKjw9X_W1A%vFpRa46$ zJUdtJ@Ay?lJEDk}%}&w)Jie&d^L80Y>XRX5HAf{F%hA*wU@=9h(R#`yCs`}rW~t0c zd7Q%_RClsH#pS|q`6j2Fiv2AqxW&Fgy^Pv$demw^`#T{xr)HEJgD4l?6g2Rsi+c=Jl-iNGoKng^yc8Qba zG#?1nz-TRgG84bI4<5gobgUjDX<+W5nOw*~Q?p6~yV>XKj(<8IoXqUek zgmz^y@Njr2Z~b!N^w&w75AU3&J_5Q9IcVCtU8LR%Xtp+4=*aC3%B*gm%ziYkqXTj8 z!a@6VniPF#jc(%qX-^5$ax6(gO+q~4>U$90XoRS6BQvJ7Zz7-B!dJpVqA)qNS5B=L ztUU0C%hNb9oNF+oG%B$X1x<$ei&Mo1y=f*~Tin(@HdGsm$M^I4}S#MSNNKM2ps4I-HTlx~rir_9oZj6d;0 zh)3tayJqoSa$|e49dI{xe~>3s+>z!ZOL0&HnrH15uQ_?)$ZS9D;bMiamNBS#O;>{R z5}bI_R1CzM(^T)i%U$)Gpu{yj9KLBH28@WR>*_HsaNGz4&2Ug2uw5}%&5ZZiM8hj+WtKw#`ea}u;Ek!JU-CqtKjzi=08drV`_~+9R6jqmb6OkYwCNIt zDH4JC?becW&5bB$4Nffyg1#{BPyy$!8nmQvX}1&`fMRW`+z%T{z@YF*2m{AQ4DTXd*9A81{UH4D$f-Z^m091S6=JA zNURqQ5f;z=)f$K7O1wa zBv%q?s9nUfZGn?|Pi!D@`-)8j*dQkey^E-dHH(4C2| zx^yih2FUqipNo|rj=upLWGBS*y~ zJfdim_z2>g02R9N8FLGNY-UH)r#%S_cR?p)MN0EQt+mq2BcLEGa=dBPI=YuRvv8wP zn2N(z7f29>qt)3R@0=_k>z5fTPQCDK8x_A~ZPVNN@XskI!^}z`m^^v$l8uYp#fU-7 zy%}}#+L9Ufy-~}4v8FfV1JJ8WCext#dz z=r=AwTHisVkep*hosdv4`my@-Sbl8_@nhEeZ2fQKvWe-P=Ck?N5hG{fDTI{GVDqzb z9|_{A+cfj~HNkOUeu>cgZwCWte9^TUq(>VJ=;sD-O>eqeB5F$ahAsx-y+d~I-~3L@Tb0YmAt-`@8$4b+G973R|UDk^uzb7 zL)#uP14weB1oOtmsAyX8IV*7Zmr~?W`Vq$5J}=jB4|f_sZ`#@c^LE^{eUIG7-M=TG z@5&M~ImHA6XrfPZ0fIak_1C3@n8(kkQ({cqdk_MI5(d5z?ojrfnE1D(e(9}_An%os z_?hpx0s5heXu%$!#dc_?Ew8c?svuk1;O}{(Z#MCFimQ5iG0+0=M|0`R&!)`&x35cY zl1f0q;fXrnkD#~Uc5mXN2h;fdiZk7lI3G|Re=?{$;eG`hS+-nG^zib7(OjvPOmJJG0}vhc|Pw9)okE(~OQk7UPczt>12n zl(c^stXx<+eX0#5_Rs|zPPkHd(K7crRszpa+$+@0Zo&h)I=lmjKQZS1rUd*2`xZjohgXECtV!%}9k6;#PTnlKP7xQC6F=I~$Q2IvC?$YIxJwx4Oh19)B zw@M7`%ROiP=b}UUjwnq_{S|E78NYdT*O60rJP*f|hw2_NJbZo}HJMY-lOHQZ@+jGs zyb#!MfjV^ZRttn*kHQnM8}vUPntv#5^+)HjeJrR38+w6zMfMo_1a&D?Wd{(U z)5@YpKs>)6~y+o$Dk z{oo;ee~-rZGm}53GH0JOs*E)|rFN}J^b`9{o#+>g*BWE)KA0VC{zFatL|B#gmH*8< zzRtB1UT!t*{M*Ug{7>e-Ebcnbs#4XM%yF0Xl+au)@u!?V<$e`vXZ|za^kWJ$+u+O{V|MS1iV=>P91|RKIi|eu zt>fMQ;IkMkBa$=4c^MdX%AgIIZNAw3fD?Q$!E_GWqlZd&Vo1xfdETew%E&(1KBZvg0C=$z2Pz82x}OiOFXd@=UH?B*)kY<^?R_ zn7nI|CgW}>PkQnzF44*It9T|`ES6((XPZ26snO)F#nw!YykKU5mOs-uHF%Wr!lLLyvP2r6PyidU6SRzI@_nEw)1tr<>MP~J z65wge$^I)vnaUEu67#YU#v_l9dZHMgkO@}YUnB(zW3bPW``Rujien4GifdLWf)yes zArlmZ_2s}YH<m z - + + - + @@ -23,6 +29,7 @@ + @@ -36,6 +43,7 @@ +