From cc014a14d0095a54a1b2ab7ccf60ea330739979a Mon Sep 17 00:00:00 2001 From: H3XploR Date: Wed, 19 Feb 2025 17:02:54 +0100 Subject: [PATCH] update norme --- miniRT | Bin 355064 -> 0 bytes miniRT.h | 65 ++++++++++++++++++++------------------- parsing_camera.c | 10 +++--- parsing_cylinder_utils.c | 12 ++++---- parsing_sphere.c | 12 ++++---- render.c | 6 ++-- tags | 44 +++++++++++++------------- trace.c | 4 +-- update_camera.c | 24 +++++++-------- 9 files changed, 89 insertions(+), 88 deletions(-) delete mode 100755 miniRT diff --git a/miniRT b/miniRT deleted file mode 100755 index deee9a06e3244c06f0e7d359c2b27a0e7aba7325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355064 zcmeEv3w%_?_5TJ~i3;vU(V|ifHfm7BfQUgsHzdIu4H|`LR50O@2o*wv4aNsFxCwH- zuD?`@KiZ0>zDiqdsftAu+yrFfqYBg?rfO}Zh<6PN4OF92^8cQhx%bZA>`k&spzZ(D zw6b^3ojG&n%sFSynb-YMcJ9PJ2?;LaudnNJ7o|d%a)?j7NT2Q&PcE0wmF^mdf6sND z<2nY=e)!KP-r9c~`|uaWZ=%T87r#_)Fg?Wh9m2sbyG=2?!5{>jQXTX+`BVR_?$nnj%B}q$-ah+p zKOtu3FR#vZ9m)}3y80)&-F3aF&(41%T_KPfzoM627tWnCW6bCa=gzud?wr!{iVG^z z$6PRG^oWJ?M~q@5P}`I7ACY_IHTf=dONd~CjjleGJZ<2kcZ0-x%Kv!Fp{B*pJaNad zXKa6T#<){*wq4SS&eHUJ6aJ$-M0#byQvAzdH{*AE@jLVSpZMdG z7%;{^*PxOUW5BNl;#lxE9r8~Ej#&Bcamb(J06z;2iG}AN8XgON*dhP<4*9Qlpp*EQ zjQ{L^Pdngw5E*09v&f-cZ#wXEz5{%z1DfPkPhhI3r&vU4EyhD349r9o6kbk=a ze76I9oCE$54t!YRfTzs?PI{D#|LlL~I^ZAaK+g#d{0uwPI~)}z+bczSgaaPk0sboo zdMX{@pE|%-InX)AA%Ceu{>ct}d*1=i0EhgW9pJ6tQ7ru$O zQJlY6RJ>r}9Mm{(&cb=q{WE75&YWF5^Y+3;=|%>Sg7m!UbLY;VSvb;w&M)&*saeJT z;+cLT7kSDT78g!00hxshiv8saN{zfy-J=ay6xOtuP#XnAbYZ${Uh%w{Wp}yC%KZzC zQnRO*&YD|XSUTTUZ+WS~ox&O#fV0!Ij1S8|Ex5pFTIIv}C@kVB*~Jg|l4+lV{J%1PXs~-kgeg)5{p( zy7J-$ciq6nf&uc%{W#FbhP1yan_9^JmV7bQENi`{!R@Tn2_*3u1Cg zAZ;wrHClUH0iYfkBHXuw99-PVLe+j@Flu3qw@D- z`6eIU!Qb+6c&!b-^jZ#IV}lQ&z!QIKZSYl7Iefhh zUNw!wLpJ!l864hVgD`T(`j=eVD`d+u##_&f%># zc20y1#0E@pw8~ow-INWQ4*EDhXU>khYJ`PW|!Eb8e@KhW8aSAB#mu7>H zYvb^A8+?|4`)u%A26BH!vB8^9;qW{gyw9l|USNaYdk%*e+2H5-IDEDZKKeQiFSEgG zFXQxA*x-k+Cp9+s64CFgZ1BqjpKERKrGn3EZ16J#KiAse;{`w0 z+u%i_U5O#yZbN>Ibg~WJRLS$D+u+GdIoxN1pCjN!Hh7VMSJ>c9_i;RxHuxR^ueHHz z1)lXb_&$+8WP=-cnr!e&k-yaj|A&CP>Z18$;7PW@lSTe?8~i%~_u1eEo+2B(X(_L- z!Uj(W2>#gM2A*0QJS6h3x4{QhaXcX#{4@b?vcW?F-fDxpsyQB4J^wZ2=NJJ`w!v%f z=lRlY@FoHG+2DHwyvPRkE$4VDZ1A55c%=>gGXYQD98Kqo0-ojo_u1f00&js0zFFWY zvcV1fWj44$N2Lv3EAX$f!QT}4Yi)1?|5_W|Xivxncd5Mnjdu8h9NuJuA0yzdEzx`n zX*@mH20uyUPqx7gJU$z|=>d+Xzy?1};3=}f4Lp@Lc#&w=DjR&Lz*B338+bxCxKGg2 zXoH_C@HE-r1|HYz(fmm^_+x`#VDQHVH}Lpu@LJKX0vmj^!55dZ19@fIbOv9o@ayS%@y)y zgVzXnkqure@Xxlvw+VQe4ekaHn>60S_k-g z2YAQ<-rxY=<^XSWfHyh7bqDx<2Y9Ok+$HA8jB(1~L!txR>i{3@08e&+r#isX9N_5= zaGwKQae(JJzzZDU#`-L2i8+^u=f>B#-XLgn4d5;>`?pDgCrfZ$f}btH_e*eEPc{Bp zCHOT45WmK}CWVc(&T9OnZ{+m!2Y^5EH$Dm8$HG12xDnIS>$MU*Ny@)of}beCLlRtG3~!L&v>tE#ZIj?98$kRvO7K%8c#{PGo&?t= z_+SaXUxJ@1!CNKxX%gH;3%vNFK0KX0@qZE}xUn~e-gqVW_oe)UCHNTEuVJV%1hmf%-O@G=R0wFIw_;JFgKQi4yC;L9brnEGUIYb1D{ zlz){37gJR1ZLI{qUdq2lf=`yn!+Dd9znnIPx4l7LoZ=~KzQ=l7p-bzz|8+pP?Q(zl;*h*7C z8@bO)lM@(OV5KR5jm)sp6u3sNx6%}_MkZKk3REMbtTas=M9#9(6tG54w9*u)M*3K3 z3Q!|0ht2jezFr70kd?6A@lh(_wIGzFlM=dCmao{=Z4GzFZIhpjXPnvwggGzFNE z1y-5@%g78XO#x-(dMizVWMqPsrT{WB%1Tq<7&*&IQ@|KG(MnUG80llBDL{<0{L^fI zGNpG}X$ll0JFGMXh>?0LO@U$Lc`Ho;VdM!beKw^Zw$cq)RfG*N<$ZS6aa*+M0;)*McV_#2l-^~fDS(RXu+kJbMe40I z1x%6WtuzHnkteJ)1xS&HtuzHjk^8JP1w@erR+<8#$P6n@0Z`<6D@}niW{Im=2@fD<{#OKj;ywsfg2U1Ce$YD?c>OJ8G4 zPqd{kx24C}(j#o?b8P7|Z0S>M=@V?}V{GZe%cA-Fl`Z|HExpH<{@9k@X-mIjOK-KM zH`&rJ+0wtYrJu2-AG4(&v85lfrI*>#OKj;ywsfg2U1Ce$YD?c>OJ8G4Pqd{kx24C} z(j#o?b8P7|Z0S>M=@V?}V{GZe)wce(rN6YL_t?@O+tNF2>33}Dt+ww)Ew;^cY)uge`rJEq#V9 zeM(e%o39aa~_1B z8+6a0pRuj}li~XAtm3Zkv29JBGb<_IX7P*sV_E)-N72u)!-~3Jsr&K@rLMKFlCV|T ze%L<<2v!ROiET~Xt{dgazE_U_hE|!&&(Bu^fVlg3DZ#4te?t9?!-%a$VWLi>&c3`SPy3(B08J<1+ot%XxWF9RZ4Ks>jYA?Y+Xs% zrl|Fbx?QP@^i`JDxhmU!ir&<+ z@xq&Z$dlT@idnQ}Oqr}K-5Wwj3oM_Mc;>(9N!_fd)p<-%lAbPLwCxP~c)D7_uM%8c zhMyeuqrmuL+RfoV@wFmg(Z_<96!-O2)XhpTPzjh4?)$<6>oSz!$xRuMdUbLl9`7L} z>SV8?exTHS-Zy+73Dw{67rw6_o?QJ}TEh1wvZn(FW+~c$v&m0a)JZzjQ411nimKFV zL84Ao)&NHI0T$ANM4_rQC_$xGQQv`vL29>hsU731`YOY-GNh>Q20rT_2>11+f9>CGAYk^g+i(+OjmvX%A!5Pyowq=(B3!4xgCVk^wq$qJV%NRCTL6A2NtVwQ4#KPFLr zx4s7)Cbg(jmTn2*{Vf?&EkmF;9)xiSz=~L~-cXt}I2ESS^!o?e>!dVqUH%`TG&SH; zkCf(GjzB0)L64NCuOOyJO0(&JsWb&WQkrs(sAo!(Ca8hZ6#N?~&F{fsN2Tcv1@QzV z1^L_GJ5Z3Vm;Fa5$b7T`3gYYbs4{{hP%x@&JK&kRy(go}uKk>t9x2Fbj-+4%+d0fHc+=HEa^g6ObLbfgyJjqtqcXe4AKpITie2Eqy&2!qpVn4k5} zA90QFp^ScAi>wiuMV6EGr*u;tYN&WePF5_}it6TW6xGh%sBU>dOTOeX#^v=U-Zt{6 zy6MD>5cs&b-4tZJ;`q8Havy)e=_5CU`55Sc{3`r2X*vGMeh_{FQeHfmzQ<4}-vb^; zI(Zz&OCE>a&seh05(nz{C_jUnOacpWkR0(M^aCh*n%tuj&rat2B3(_cuk46_v{*8k zYxl|mVspedjWK1UhmJVW#vO5@jyvLc90o_6JLi1x?1r~F4sGa>Pw`!|5JAcB?Uon* zJV%t*BYQbdP(xmLJ%;ffITgu*q8=H{4?nk5fGDavA`W&niQ>{N4l*B#Df1*lB=aOe zB=b(er+&92^RGrakoi3q^_I*F`R+pS*-cBAg?5nK8`9P-^VX(YeOuR)q4_0_D9@0z zZYj_m9En1*kNE}Wz)%x8(r(y>WYN435c1}A1IdSgUzQQ=2Noylwv-mnoq;U6DFJZ)Bq;X z8b^k5g4LCvUkOg~ZYaW9Db1RIXMf+_)}~ccGcT*AW_li64W@z6#tX^Jg!N?fk5SfL zzzSjtb(>PB_f_0{F3MFE@~o^I*Vpq{XlO%Kh|i`fpSHDSXw{8aFb9^aP>qR25m+!^ zrYx=JI8LnELFK}FE#=gz8&HmtL&05rz@D}?wiQu-9&c+VjosrvjrdE`C%J0NChCV= z^)r17>TDjuSxSA6*~gG4iSZRb#5RaZqdaHwJTSwguLT0QF&Wb`ZnXrBZNdd7PAKJ^ zI0s5*z18pk8z>tE@{D|Y=J9-&vwSoyopECZm$}^FqbaT$s>+hL+_4{(?*m|PAL@*a zsbIdMu1m&GZt%G@{7h2642<9Amqd-)Cq(UaaFZkr(~~*jY?qL<0B+REQL{)+w`sYvD+9C_EN5`zV>s3vQt}3JairnBUj0H>ga@A{s zD;}fLS*SEuZPUkLuLY!%@<#qh;t_vy{|rSD#i+TN<UFVasG7~uW zu*-#Im98@AwZC!(-Sa>fs(%=nBgeI`{!**@Fa8-<^*&Mk;l*93{v@hiqZV@sGFt!L zd1mWNdG$AUQ9SBC=B;0i?K7Q<$4`*C*#l$r7OO9;|A}5|hS$N#;G<6>Z-4 z>7SxC&1aFNAxmZ$_zX`HH)rfY82JX-$o~;CVAL8cZWM+-qtG(uT{6_^+)xi@W@w!k zKeC}dcfMq(Pp2AbBAgrnZm7vSunhIL!%Ra>vlFn{a0r@@oRztFI6)Dza9 z*vLeYc(;lA4EQ(jnf2+^KYHoo!#H=%%q`N*~4 z#~(4-;hkP*)F_V>zxxn6_E&Vi@luJ$P0E14YpmfJYE=q(OFRYFXBgJ96_t-s0p=gL zJXOu$idoSS?73f|RWJ!_X~ZxTwt9_y{4gky`SJJ%RAe3HrLpWF7RiL6FmfxwAmNn< zk{_}{VmuD(=YuPe17JptS>_0~^*LU72Yvk3pF1#1*ML=>dYw@QX`Ccfu?^BDH%Wic zy<;Z#DSwR;mbuc82R-^rP%b0iuSLH4sC-7KWCTbT93++E!O|r!i|0THYTZtOxHEnd z>R|=6JTLnVgy5vt#o9j+*7r0Tnai+qnrd;#xY5k$%3#_IQb^P>J`6~3F^Cnl>1QIh z{w8ae*y_Q;KSeF4eFUhb9qo=j;1={0l_8Jlg7S%Y+#jPjEE-(EIvBM;U0-h3$f~jE z>)!bT z+UkKddZR?wJLycWjf58cv?Dxi0B5|snKXhc&c}UKL(v9v#3LeS-(1~+stZVs$?`E2D7eX zxH+?^K7)vEv}##YU9p)Jk9?i;e>6h?`9cTpXz`r4tpy85MW7Ms4-a^5UQNOT*y;if z+YQ*$)CRzwW^4SXvZFOY^BD=G#9HG$km<)*ImZ7Eb}h*gat= z?R^y6i1b{vtOe3bNLxI&HsF~pN+5Gx3l>#~s20!7p`5WF``a&_~nwpJ3=dd0#g4v8{=^jtEj$PQ|~bY5CO|ofPenJ?SY56GDBmv*S)Xunsnc7kNwpQN>4A_>AKw0C;ICC4D9ct>U41O;MtF%BvTY~rZ>sK5F;`0*Qs9*efQ-d#J)fTZs%xN-oM+29NPQDqWpJI zAZuvdvEN`D-@r|*6l~K6J1}4ev#~~pQ#@>Q;3tYUO405Hu91p*7Y3*a*lT$GAVtj> zps3dkLZ-oricHxU=<@NH04NP($;biUJgl$1j|kf0W82%Rh3>Ln&xP*m&%{ZfWquwB za~s*t3UxHDoCbP@O2Q(zJQs4r%g(Ye0xoJzf?RP^7YJbzyIn=L@sD}&bh<~0(~D>>$-e#mb|Y&unpt};S?Q}+6GWxog1oA3py}VzdEgFhU$(#ntJ;0XQ&RoedG;Q zCFSOd!&kfa$w@8NS zHzf5=hHA+7dfiYx*4|L{q0@AfkhLaKw*>39F^~X48bBQZiwwotUt^UN&K;Ll!zUVNN?2WVrV@ zsFS);e;tid*EO-9m5unp(uE5xWoyiHZ{Vgbg!N>-h`3FrjxSv_wOeDp;zV=lf_!dT zx^P%yX5k}lDx?(~Is(&zKYH$sHDNfC!LMhIj zc41UUmgI+9NJ>~qvLvX+$JQyjv^8Q9vSRXz7co}Aho@6d#YM!YXhoJ5c$Vhj3^apc zqlpy~4(>)s$jTrjyc<<3!57&2QScSkb{=VC%tsI%_zBUZt$3785sFYc@DxjBc(c@c z{WNSMMKqm^?IQhoPax74n*q{98=wK5?K0U_j|Gz#)^?Qxe2(FLELExR4t;+^CmdjN z3}R_3YiRwk-?FtWg9Ue@YC&>tu+oL=F_gGDp|<3zTlIA<&b$~ccwyV-(2;DuQ%5{` z@n6A{nW$RgNpkmjauqEbMaxI!My9Zys<|{=$E9(vgxE|g*SKye{7Hu_m*IX)E%KCKvD~V-|%ZPu<*ZX9A6wx#~XsYLMDILY_S_ z#yr?qOf>HcvCRoI@UaKlHD#Y)ITszRHpZM^(NEuqso||qE^7_YnsbrId#C3Rb~C~c zNT&v^8_n9ck~TldyBdqH;ch@BxdAs3^SK+~u&eP-Y-=%gHQv@nj=;ZQS7Tr!H73FH z(9<-SiG^ymNEvGeht}}k*DrsSIy=qSj@W+8HN}d?2)32MdEzwo7-8;zKviZvVLgZy zTM$XTpaeq0W9U#vcKsACq*OZW8&2Q6v~VF5>yqoS1A-(WBTk?g5%h} z=13Lmc|Zf9u6Fw?FB4m`TeS*IFtU>I3g2A@hO*%dLwl{^3*?`y=QR<@!IKvrLsKK$ z)o*FN_$8y&fqLj+yI795{5o)+vt|OVzM$#8MA)Hn(RTXKhG;=o+y0uMNGt24?P1%Z zKe>A#G^{T+Fen|j{nI~~ZC6|P-ogpkufv)Xdu4*Rc^VU1>g@@b@MUfGN^SlLGi?9| zl~ndRn3uwT%aR2zAX{OjZXb5ShG{0!r6$+3;LGH;@?gEq4?d;=6n;_gsg!RV1n?3D} zZ(&S)3-96h2o-($li^$56?{L4iElA&wFG@W!gq|omu}#5YU}&!jJ9$K2o5a%2oNq8 zzlJVIS9ioWm{U-%Zv2ROVe7Wx2ctN7YwT>o;}iKPPJz3=f;wLs#a*}rjpBOiY(i3B zYZNc-U=%0U1ue(f1Y=itm~E)%=M{_{;o*R>A3Pi|c7ullMw}iF7*TpSkRCf;$6%QZ zgS}}z3wy$P*`G)XR#GFiAhlRz;9T5~AVB~~Wd7&dwl*|Y2#|tm|q}_O7 zoGCc*3NoN!{nyBD`F{HGFVOxkbgq%_^UHa@`lx*7wpRJvK?lzb+)Esc9+0=T=4MHb zp^wDcnjfkKC!)_FG`YnulHHUW+wUS>y zl#iWB5XpM8(IH%;NE`Lk2HRWer7inFKv-dYHfmTp$I zg;my0|9U%c`~uZ>)-B)s4y2(o?!&dIqBD&1>o{YQg*MU*U9QwtXkjzSzR_24h|4$- zqyCotThGsA5Au z*@XO}#FW~&OvnKUmSHs1cudG~AVJpTZH}63#c@5E^*WEZ+6i06Jj+%1@i`_lBo)pR zDqJ9`u$V=1iapLIgp#@X$gz>~5wjj|ueu!7cGlLbe#6`Pz}#4EohsToE2^z<@10Ha zSRfQ*LI(C7MvV!HOp3cUCM-oqsVkOK#fD+r9h+?(O>LYGYOszHpa$S~;D@a)m*+;q zG%9X~p6Cc=!>`Ha5@%?eC*5YZ43(gr7S;i=M_Za;;2j*;ifh%_F+wvI{4qL9)gF}F z+a%iCh2@Hi7*Rzi%_uquWKo>=#=-giM9GR8qQr0t!g>xVxX}@DSfii)inv9_h>cLp zDs?nMZCKO62sIw9?9K>vHj~K?N2n7~uf7p2pSC&1y^oP6VI8-LH7?GfE7{03*ME$TmB!i-V9_VhYW`u4wTpzi9^)jM zd6!|Y98I@ELff$g^R$octnk&(5O1rgrJII>jT91%-a^0CiR49T?8l7tx4*^$!S4w; z<$ebdV0Fk-y`M_+>;yg)qGVR;?$G`24;pf`subpUqv*$wRz6!1bZd052C(Dnz)a)3 zTgQi**FVkC83*0d(NR{>I1bwX6^JrGS0j`cBs4t*4fznX@&ofr@z!i_JI|X378gi) zc$hHak6eJs7WYTn$Xem%&bk9^^`gjPIp!eQ?2OZpx&zb*<@(@l3+D^it{;taRus+- zqlzUK&SetL!ge@kOE|%q3t*P00~z^h^&q?@zELixwuDqn9n@cRPemC=#|KaK>ZBM1I{Opg7hIPm*$zRDajyRqC}_yjrf ze7(IBkF^R_ZJ-InO_lg3OZ{4Jycve08*>5YF&*f}TtEi3mXw?wtkpEWO@MFYn7N%F z-LP%`a=Vg2WWxR!v%1^?lXg{njTJM??;j04Zm}O2HcxJlV`XitV5Oj?X+)p{B?*nW z!L^lpkf9SspI%F?+(>7K^~z}`i;eIgM?Hot*+g2*PDLJAu?{WH0EVu6Obdi?zNDSu zJpzpT`teQ}_h1(ox9c&Bac2~Dg>fB58GmBvT!wm}d*1`Qxf9N0E@vi=67n6bQQKSH zULkX0e6dZ4b?BmhiQaO;o6x9SF#A+YpG#ez+)S?GubvurF#?T7^@tR|T-q`wQCa6COb8ko9fa*~gx$=Ud5Cz?~+ z1HR6I43SvU|(T7k6 zaesqtMxlKR(aTs5L;g>){`*!GU?@0}hlyqwnb z16%T{Lw5~?U+Df^$JIaoL(L4X6m_Gfxa-AkmkQdL7}%0_6dJMSB;E)tyfK;~;!}RW zwm(rsy@)j|i5m8j3*NI9q&`35WW7UYH%~h!nlg7SC}1|P^DU-7f;_=n@K*1K3}7ya zHjP|r+&+e{47f*phRLcVc8?o=ypSRMB;yD7Ju=~KGZL>7U?xeL;dohewoiA z{UW?P7G(!Q=`mcf-d=s0{|JZ;a?)cvf4yDf7b}T9yp7t5sf=fN>Dr1}cvACx#w)d* z7uwr|_=ynF^dn!}S3jZJNCb{}!!%TttF0p`!pBo4*T6()LhM*4<5?pCH9w)U3B!7< zVPD8#R_F8%-LAePg;8C@+Xjk);cx%3w zB+;mOidnPQXHbFmQu~!$@xhyVeIsTK3?V@u+0=wzQJ(fM#vsI|vpw#+(2r%& zUdajZMiJ7kvp#yvB0fi*SipkmBB|X558Ai;bxAqU?%kr@d!yPt>nOClp(d)`oDgrd zOo(QaluzO68hwUl&tlDAi4U9dp(+EU zs%KHv1}*KYo`$M%e-6f0V<_~-;4z<-h<)?XD#(dhUlR5ba!jP!_PQyp%r%?+33WMJ zcZ01CgxG{ZJn{VDhlqCX)obuiCjPmJmh*7?&s2$#xW}X2Aka~3-bC-4ElBd=Yh{ct zM7Y&5uMYx%OPS4gc>|DP;Fo`)yN+(!Zo!p7NWU3PkwY^bW8?H_iV#DX6b+^W1oRcH z4Zuc6##_TtR(#-slE&NCHkz$Lb45626pKnB+@g3y*3&MgA8W*J@JS za>|Er$?5V;+A>^{;n~T(bL@d^g@;bT%Jb0A;ho)3yfD)Cyce*iBj(nkyePqLPZn4ev9e?YMb`|KLb z83F^x&#ti$pMQ1@u}1hlia;`*m<=mKAW?xpqI@{g zqmf1+QGq~$eUc3y{wV9tN5}G+%rO+`aQD_flO0LQD6`N)+T#C~*~co0oPjnY8P^fb z2WrnU`ZSk?8(vNPxbKU?or7`RsOLIx%HT#`cTk@jg*qb-CX{`;!9wfr4%+=BK?apc z8GiHGo8br72NpGgHB%a}nI3~t9qe5EOqsWw4M@Icf$!vG;DgnuhkafEqiwJ!!(flC zhr1;>hwhi!KMwc?bp$TDhe3sbjy+wZkT9tmSHTyT zr;8??!VPo?W%W<0fX7<;Z2~NMx~S~E{|}~%hy@t@E8-k^{Y)gQsWdv!{V5JFK>d9c z=tzMPk{;Js-iO%DOOr^zNO}i82DF|jbu z2cAucZ)A6DUd2eil^h{KIn+Nc$`xR?C|9Nk?^y6gK}%%p_r{6+xM~S|lJ8!tCf~g@ z{_Q|ZmK}#nbmbRTW71<(XA7)*ysh)b`%DrMj~UY)?0dKM`XMZ;syr%lo!{2*eh*byoHFMexjt$&j13;|a^iv+YG=X`H^d68BBn4_t&&(3 z2z6lwvd7YY(~nF^j+*^r)UOlMv|hg-QKr#8s12=n z(yZC5?03mZp7ye|AsG&JoeE!E!bE2?2osy5)v9^Y8>A%F9MXRSLo7mMMw|OlVrfj1 z=o}gHZQIh)RK+jSv_8kvS_p z7#2nXonQf49W^Xq_=%9FGWP>Q5#-%-7Oo(=n{4|M4f7+#j# zX$>z6-4PF)axlVzctfO-KqlG$3S%ncYzw$N+VJ`+FsvcU`CrQ%D}lIe`^z}oU{xX8 z_HM*^56aSqp%q`Gv(2q;c)hpgR=rf$(k&F5$Cz2Q-MoO=rFQW`N6R2jmJ?U9TQP+B z$}qTH0QBXE$cj+Qq-?4yx{G!xh9HbLoyTUnC)F zM`I%9oidYv_MY;^n2(SK>PB=l#evcLFowr40KGj8lTK6~H9vX7eCGX8eB0i$iR~wE zg?C|a3cDYMv)vD)jjnVbr3siM5PpfC_!nEX3$H+x^v zYB&wvc^?ZK?4XKLi1)aXcNV&A5r32A(oVoe%hi2W72G-*UEU@bw z(!iZhHl=qIxNwI>35K^W%(V8H@B8MkwljWeE4h+ig^Clk>vM5mYvfd}4V>TYqJ!QR z;yXAsT{m|JdZo+DC45=~wUUin)PA!EsNFe&uc0yWaw( ziM<#rAM|&6j&)xb_V+*93Z5S?-a2{N8ahb{=Tlv z5;Vp*iZ?Dj?#S!~l*dUtS}*AA2x()nap{g1+@!O*!_P#0-8ieegbOG;Xd2h0J1aqg zb?{Ep7}?^|b>oDr`I$AhYYfOcTBmd$Akx~=z|ZF%>YTav%%Ya@^SMn!O|}{XalGeq z=Q4D3%#^W64eRr00-WtRjXq}Do?Wqb$alEWJP0W=Pgj~4>1e4R7rn_xOW8_})7=O! z&6K;hCu02(Fm)y#-lHiVw^P$%i$_ft#AE6VOFTZ=falK7Qs$A8^}sUx6jf>g5+8P! zlF3m=XDMHv-oaVQacF*b&Qhi@IqvW*WfJPuUxoJd`lwNY6I$k|aWi#bN25m0@Bec~ zje$jyY{c<#3HoX!Yzo_y(aD7azb-UJi%KzC93E_%HN+Ln_#5Kc;WaaPO!m8Rv%_s5 zK^`p_+3iM)1b*1w&AwOBrO{&OPW5Z)Fj9B!beKw{S>`~{z(nACMN!rTbj98c?i0A$@6Vd`0Tb~M6RC-c1&II0_IN)&V7F2n}x zda=v*@^K=BAAQHoV1_kLGyxVJU5x#WIZpfx7&`e{RM+Od`yHV9@mQya8++mOu$GN; z!)wI^Rjgwrwvf5UTct)255>%HY%9~-HNJWioAzZ#g%K(T;C8^kW;6_I4Wa`q) zr(nG}9o`_(VbXdfW+$ZA^g*h{&-7r*DC$=DA3&yPdK5Rp!T7ej6<$9n zAKw2aXm783|Fid?SB*KNsl;>3s<)prdgW=;s{1>(>i_yVBhM5PAaQ+DH@>p>Ba}xJ z@GOaYCywej3CVH|C74;$j&8oY8cUAV&d=>~>MWFmdJ9{um0(_lsCAt=jWD z-KG*zmX~JK&Tezt+BsV%T~BQi{=dg$s9|N}oh`bYp@W|i)+gT04B*x-$Oo3aq7Fuz zHv$&|ou(0=VIu~9@dUfsaw|LD&;j3L5A+>QJDoy;9D|FPcEY4C1{t!-Ok%_#Yp02) z@z)VQEuX$a8KJB3j#ivFnh1;0LfraS(*-#>8zZwJC%;~UXS+9VyY&wOa4P9p4~)YM zRLQ@<$((w|$&Q@*`>yT4sduCK-Er!_VEx%Or@n@~Gj(IZKbccsi67?F&mqqp=HG|c z`aHsCng1eIWHTKde&K<28A{Oo-s7hE?=7dkAOAEgIrYX>LF4dDH*}G+?-K`j={d_f z%-iqmRB}et>}bb-8=8e{gBt0FUmMiKAH}sn0Wb4iRt%;eEgPE{^2cG_bO?v0&`&VH zk#x3T)?@EK?HX1ar|5{+RzHdPg)68!n5zKi0Bb9f8gb0@4!=TNV%S)4Cyy0L3KU4} ziEYJt+wmSKi2exF5z)I@X9h%4qohf+zmU7MD!clf+;v+i-V9vXgJzheE=MW49)niR ziG=Cfb8`P5!q^~00V<&NRC(UtOE$`+d+9a{C|T-GR!gpV4>f2}(%h@@GfZcdt4 zka!cF)LSu?zZ*ygNa$7y>PDWQ-$+5_XN&UmD>mG6fBr@kimbw-g~sx*%OHLS6UD;5 zz+7HTROcOdF>>?sfh*{hxWa&lCL*G5P@rndM0tT{1(DxrA-^a@g|TyQ`_Hj+??kGD zV@nED;6*d`4R`}QD~C|C=?#9}t5L>`N&QGf*1?2P3CdxpcI>|DZP~r?nL7DFp-366?TmqJ{4gi4-7`v~=piHJ~#T;0wKm ziokBs+K$P1G0P-_>bMv^X%>v*3kZJ!nhZW?11x{dgam$o2J#OeRN|#*39gKF{Nk&M z0-b*GHR{rvJ10UY@x|BJ-_kNJ<=_4;XG#RQtw|gGDkAb9S6Y|%|4QUb04(;mO)&Kq z_qR#B@K~`|tOCliM?xkVbvqWJ)2^$3!w3w(pz# z9gYLqEPvnRO^hlrzHc%X;$(eQq{D^hb3p^$RJ)BvbLi1wNUWjS=da*WeEw8Y?Wz=J z$vW2UMjuBhaY{$1iT@2Rp@@NOdoXB zyx+_1{xL~eCNA4|KS3DOOmB|*mz=sU`euZy=?1dD;}4H?&oJf%4&ZhKR#Wt>Y_?Y( zD3dNHEB&>8_jf>OpAX7PX`@z90ep_h!&=1Gz7m8g7lNKjpTNKwo83%aff9}-COx@v@@E@5obxAF;96|b!>(WG0)HMfapVz>_4rRZMi(t^-IuI$%vwfM z1>KUYUE_?_VzY1$CF>Cr*EoSIe#yGt#NiV-x-VJBn7Fb8uJ|RZ{xX99#Q#oK8f48u|7B1?4*aXb?7OH#G)Eh^y|1jauf21T@Nfge`CX9XRH~U> z9Qsq{SWJdv@lj6QUN{z2?D|vgSyZJMuEi`x8zj~i@*79)z$fUbeq3xG(pC}$Y95ZT z<%N_$eWKESnT=2Q?hNed&%Pk~j%Rh<&~K{VAaC@2{X(=CO!wgy<9%-&@Z4-5>K8Af zJr{FCTYx0QsEL!3r#XT=?El#JA&`7P>~1Xaq;AK54a^OKE4J@`)@|!Cf#lM6K{#<0 z;a~h`#c**rD-9oKK#t%o%C(zDx|BpRu%&`cAXy%bvH2{pr4m=f7J<<@>c@fcZ$XQx zn~U(HKRy~oO&2my30RaD`6EUz^CF*Seb$i|iD_Xtl!~vDWv?AaTuQ-vNYBUq;W4C#Imn_j$ZLiiRgkZIisUPc z*VH(4MbyNkPGS+*TiI?((m|%~gf%i{>grJ)%hX%d#MLg#6uxc}mrUVi==>Ctt7l2d zUPL$E%_uFro*pgX`o+jt!Zq_-gM!$C)R6;x1u&94pmluUxtW$fmhd$YH1*vo zF0tfE>i1DE2HoEY73K(y`_)MSe^7!7?ugB6j3)XTeUeBet=o>?dZ^io~CB@b^e$YsLJm*T6XtF&XUzSHH1?3+Bvkm^)u4Q%4%HClEW+g0nXME&pr zxMZ)O=5}eXXpgOC!w6Jm?AGL68vL4ScaM-MN-!vjE$B8`>+$N_C{7jMdCRH#`YT3N z>r#nNw?l^*pJIPLp|`1e^a92!`ryLVYdKZZK@~URg?Nc$vwQq!$sfTw6->lb3Nzv~ zI5E>b018iwO$=%`*q4x~F5N;B>S(juOM7S|@*C3rli@(YCx0EJ{b6vio6=6-sOqk? zqpi3&J|A-_;tNzk_ZlpxnR5SgYWvZV`)%j5zT~@)}W|Ma^GWZ zyp&TV%YEAc!IRiB-q8^A(Rs`h&Ri37fGJ(V+nE5#(T9@4b?@?tMWPlO#>ic61UKO> z(^4+Dxm@%wtK}6^prCuSs2LTz^j|U}$ zv4OBlAGYIP?Bl!AXqBDf28tp_i)RQ2qPp{fL?L+Z_MsMREut$^iFC}c#=1?YBk4YT zF7+fUt@(xv{0+3hls4IG!5OPS(v0Er3M;YvHinEuNd3u%d$hu(=}f z9KO7w2H>s{R~V=GCNJ;F8&FKzibRA0GnncX*=ciCQUIPOD@qMF_cwXn_ePiI74Q;> zk68)&HM-oLE1G_U9oJ9Kw(8Vss8ZtI6#SZ>9h->B2Qpi9*{PydA7TQNRNW66L~W<` znpFE7sjk}Ld91$2W5Adwa;Y{VSCPs6Uqn63}r!QR5Fti_&h-gcKs8HtPEx$*PjI<=!?F>E*p!8yJ#8? zpWfq(h?GIaq1AWwhM|;y3w;3?2WCG3{nR8yTfthRCMfE4z!k_Ppqk;;-6`Pm(k+!} zvD6_nrA3BiHh#4LPk9Fpub@d;bl;z#5|Dv`X97T$?to`_XnFNF&{B;Z(xZ26cZ$r< zh|DbjSed_NnF&8--eF|EOJsgMD)V>9?0Jb*P}k(eXCz#0Sj2p(nvm2rC93Zq8}_`k zj&d1nitU{7b@oq_t$bP@eaeJJJd9bM-&NDlq}FNGG%O}GD65pZratJlKF1zb)P@-S zoZ(p+g1a2}tbZWf*O&gjXLWtn(0XIh@py=sIuahtm;MZSYux5V9d3=|JK|{6rX6u` z2xxvOMV_amXFkI7ZE!TIgDdc3iksR+DG-HZMP00ivs)=o^W1RuA@(p>!|K8$nqJrO zK^_R(2t=BJ>_Z6z>4pbz=uBd4whmT~%|3MRF9O-E2CA+O>@S-r(#B@DdLFzE0#Z|B zP3G(C&wxKR6MVING|BhE9XLv0Knf&!uhV5jYmX(fvN0W78EAR}KWwj_XDwJl0UPbs z=}Sr^2W)J+&g;_j#ISNJVDp1U3f{0`=Wj|~bKfxg#xhOShXcmBvT$I~{oDx)2L_u@ zL(HdS^C`uAN;RK`iziI?%aa*m6WS)jR(w7VM2Q`3@T1xfzya4&tzp zs8HU_koA2q6_NL8M&zBVwule7f2M~~y3-wOQB$Vtm`w2c@M$3QMLQAKe=!7Nk&ABY zu2?idENI`qx#nntLm*j$P_9H~0!~Xy@5lu{4&R}K zU^i!~=pd%&PoB=quKPkzOO2-OtKn+ezDjl>aw$wsPB2Kjr!)ptW^Q9%d6RXEP%L8@ z%Mlp@gi4%aA1ecM^eV{A32rO`9W(?w(2|>g&5g^6SZ?U{C>pE|MmhBuMZE!oUB&<; z2Px`AoRYs`kU21BE z0Q4SP3c)W|b76q-D#6e|cQ+1kZa9r?5qTiaNM&GXaRgHOe#~IwV<$L)j6f?KS6b759X?KaDGhHq2+rg z)rr2-rmG4B|153=Vr8H}_kh?*!D>>VcFM!4A?3NC@_eddZ>pm1QnWNhtAOr|Qq;Sl zJ7rLk3Mk0}FVcfGU$QzOxnm8=MZGt^+Fd2O(XK>s++4EwdrW!OO3HIbSCr>sa4AmZ zIqTFTtvo;arKCIyL1D+rlQ8c;L3z$UnJdp9=EhW>TOF0Bj{XXu7yEoywF64sR#Q1m(hlYDEf^ zYY3DprE|3^xr?b)UN4MI4pRvo&F`Hth^g0$l6qa+74_PQa&fBHW-#4xY?5xj*U_;e zYW)Nso5UxPH)FQQ1-}bk&C`kaE%EFO?gy3R<+S3Lj^_Y8N&PG^e#lco#qguAJuzCv zY5`>Pu;z;7);X4n%{N>-#}!EzJ1NXpB>5w)NCGKsj;fIVIOeTIK0#N+Q(;*g6|SSDQL{qf9xjZhwmxyxR)rP+ zcD1>g%Sd0-{>(qZ2*c=mtjcZH;tANZgvnwK&Qs9b0L?R;jA?6gG1Sa~Ir-QJi1c$k zh`e^36cu@~?`YQmq1EH|jd9p?|50H4Piv70E}{=V`WJ=@LhqDdrnE8c$r4gVwlQuM z3A6JTwQ0XSqU7kWX9vqzAtj^*EAXT$*vqDby7Lj@)6iI`h7aQF9XJ-OG|%r2M*=eK z!x|e<2kNj*F8*&Ezj6XckF9dvfghmJCi*`jLFl&#^zhK)M?Y1dr}cw@_sHl=1$t;C zF=kSg=4*&PGf>CQ415&h%z&aAU-#u_29z*Mqeopd88k~dpU+wN-Fh?F2azbHn}bL^ z5XVdLx@6eXv51BhvosjJNh+?2zT+|Err8;I2>LoSLwG~9Vpa?@cBoi*v1%9cdXf^c7E3YLJ?=|&&t5>3LOu6gMvLryteC68wTGM)EiKa z0PhagRwOlIv^kP38!V4x)gNJ|m6{DE2_wrkk$k`+Ad4NzLqgj9Pq zl4`Tc%P^o@D5_l?1zZ0_l|1PUCIZZ>yfnJX5YHcIV82UN@U)kuQDsa)7=j73C_zXB ziwFRI41BauEJ&s8O)a8-sPW8hb46&$@}1OIC=OC_ph01c63L5_cLTP1$>3Kot813-%?m zBGo+U4N?+CnXTk(e>+-DQbf7o?03mZ-VI*X4Ul2}+8d)ynG^w|RK0_D zAKyf94YpDVk^Kg-MvEu)PxyJ;llnTM@|xEf8#b=OFQW2wl{~$2IZp@6c)Gd*zi|CR z_+eLmEyBTga{XMF!u9*18%*O1Fy#6r0~YQ2CEQ}Vek2y1xPI6+%-lM1{S5bwhw1&8 zTSu;+;qDnLbmaOOYjpH%tkTi5u}(+N#)=F*j~1&l^qej|kBhx(1Fd4q8MZq(zDPjh zjZ5G{mr&EYv{|aS4-@i$4?+q7gBYxT`7u2Y!8iTf9W)fcu z>FPvZPZpc5mASi3aMxi8m07YZv>{&amX(2byUPXUMEh~9%Vj_AaNA*8(NYw(Nzq=& zW1aU(0sW|Hii$aU?S&!^oXvoks#h^puf0&lp%omO3}`B#l^jX~w4#;~hIDO34N_{J z&x!r`RtQ$s4xt3wLeTljS}G@&1VzzaVKQP8>*GKY2oS)C)mD&5sCmiy*MA3e>6ZO) zNu@z=4Mc@Z=UVm)mzMo{SsI4li^631NlH!YOYX0QB1)12OvlD*zQGTf29R`X4JeNR{HHMh$hhUy}0KU(&h!g?i(~R7;rH;ACRzYD+RD49tER7Gx0Y zRSdq`9ACBwHMkqY1uKK$V)M6kvHR~WV-q=s--QqQ`R9T{QmIqFHU z@q0#@h(f*E8noB+T~4J~-(1XK{t21WT4v#dsgI+hdP3%LAd}`^$VUQ?I1O5WIt)pT zddwWCzTa0SJ5U5ZlFKz)(zW&)3(4voh8DFlxZXFl2PGvB+Aq;qKego zn&!m9co`&w`f+@bh=g2{CGu5KXZ5rAZB8*J#|UaXlS^VeQ!WhcypWd_LUcmqi4Mo1 zeI0ld|Ii*4$32YRG>3Mkz7DH3cm3mVo1Ox5V$HkL4F>Sr7B`Z=fJu<77zVAQNswc} zYbvVwvT(Ck)z8Sz5vJ~3Qn3N#QDJn8afbvD#c>N4wND^ePQ?y*rq=Pac_{_8QR(6k zcAh||`QXL$ux%e>V%{K4+>a4o+g4i$DtX)JxDGKZs%=;bh-;vqD9~!YTx#RPX8+Oc z8eQa5AB(i*tQZr3IQp&bfXSS8Z8H%DLU~=JXMsSc`SQBmrV$cJCJFJ#;ukGuo7%~u zg^)d=$GULp=}`+IyC4Pk4*&To+-W#Sh?V;-q(~aNh5d31JL^N}pnC}r(i)^$!@Qo< z@X_BnLo{){3xcF?z+_OI{T?-;TPEXv6Dhyd21s9oG-7VlK-!JHF4voVpH#_;gF1=o z$*2I6%JrP+bfzabr_`X->3y*|2@#p+B`mFw)g0H?^H^x;eyp>=*?d?3Mle~eVWpzc z?!`+nSMB!Zu(|3c&y7vsPch?<#%v;6->5@Ysfpc)WapdRom9z+vkq|JRV;_LCw@}P zK9YoKe8`DDQ$)j9y?!AE6>A(05LsYDz#vrO#2?WAVA^Kt3kkfI^O6}z#qD!4W$n7? zef929Mm*mvYVQwvJ+=q;EdMTsOdG| zaLSiay+hT(7%&2O@BEnL-}JZxJVR1|wF|Vu(=v{US)!%Y$asVoT(1{KdBNGc$r$YA z%{)rS5lg->TZ`JgllD>@L;7`NUDDQ*YXAv48;>h~2y~ws(%<`}jy3{K=wLbZ)efX15>J>wnQrBkJ9YP-e?_M*5w$vX>aHk7 zutwgaps@!&wK|o?TsGok_++QBk&d>;2jMJQrX|W6+eTsx#8_8a+zQcbrSq((?xP7A z{(MaRK})MscDjye`=sYn#4`ed60NLO+%MXQnib<{?{PqeGq-{4M%16Lqj)3EOt4_Ye^N9Agq3echE@ruI4EqQ z`vJXIf`jN@L-I*VDAQfbFKC z<*?b|>?T%CIGeWhyCQGkAHkb^3KXbvt0fX7J^MZXPS2)E7;boz`C;ZAG$)S08YOWw zUW4HX4lo*m4ZuUFhZ>2zTWK9y?aQ;6ZEX;3MMDPT703+he*((&L|pSNU8SsiCvrAX zT}{em*&)w;Be2XBtEw>JB__iolD$hXE7=q=C9qg`mG|c~O!aKaXA;7tbS~Rag3Gb_ z1=$HWDTC|F!}=q;plmAoF|fGRESv1vMA9`0x!Db{teHB&OK z7QAj{o#F*18V`_aAepcCpA+@o<=F(ek+XO7GG>PW1S3 z4Ebf*jSKGIKx|UCMM*7JdfXe1Htu)P2M6+r4Xv9POThzdUUW4lNHWMc3J%C^I$0t_ z%iq1+E2u-WsOC?AQJ1QP0va0Mk2IMS6z60mK`qy9N^41e`Fl+C1B)A7<;St^jC=?h zO(hVb`9CBqYP|;a7*?-bmfx`OR8+vE)*tl>dZbNblLXY|1@vz0<^@UE0sTIlSAsos z3|MeCN;e=x!6}KbzPO1A22T2uP>te3Re-vJc?oL%dn%vaz~u)h1m(#?A?g-%Rst?x zNLbF{mt{9BOw#gs-9kglHwacXK|HoHsfI1GOEs=Y4lLg5x=V=jEsA#X!#D$q3w;%J zC+Ncr2qV%3(pkKqW zN0)x*UuE?WeL-v3;p~Gz;%dGLlG_TRHk`+*c?T69Kp8drU|{jVwsM$N)C}Mm&@;}% z$rvoSD3DCE_KRzlxu#y!m*{4mOcTFW3dJ8GD}?qP1FWuc&A{652@RFmO_Dweg8=$K z5DiRru{(ha)PB4Tpb_nJ_y^fxP}JJ|gD4C%T+VzG zosI^-2@9~iPaGAmi$aCcASN#KCYS9UOlg|v$(-kelq{c z%5Oeo+@?8&22wkE=kJf7kZEQ6^5_g@@hK@b-qFlqh?4(DNo;u%=J8gJOqfSu7`9M1 zhqD{exHi*Rvub8EpAPw_svFT{*bG=a446V4z+mQ*8Sj}RQ~pjfu3wC@t=LO~JAw!Y zx3_R}WP6(*V)+d-OBR~7|%PV3k}2Aj{apP{O4d3>s9$Zg!WzeP8Y+&VRWIs zpTSe7PT*e)0bn*G1y)w}V5S%f6ql(GB!YxDV(5+R^@vt7&xaW1`5ih+g?a}TH@W<$ zf!O`b6;Zy1Yjjz*zEG&aEM(BR)HS)v2XVnX@z25xfV0gLSVK9!u>N(UcqKRPOeqU> zG6onHi6qihut>hK*>k23b5dt~n=vJSvZ8(m9{LpRidohLFd%6k=A&$@Kz^>eM^X2|`sr68g-qvcIF`CBc=1e>#w&dkho68EdLIL2DxNc8 zJ3*v*KCJvqx_4t_=$2_2Q_(zZl~lCL^i&9+S|6DPs`Y0mJ_%la5Z8mi&7YX8 zUR!{oCyv~~%kffQsW(n#rAjzmCO%d!8Rb&dYl~u*o8?>%WoB=-w`cNebpA^JWGA>! z6Av!3SHbZa7ZM{k>o>hm(gMG}p1u75d6k)!P4uJwmCnl6HT75e-bWFXqUCw9R^&^^ zKX2d^S0Vs7Iz9sz`tQ6N9`od6{doAr_%Ma1ijLPQ;Y@T5mAedI5(r-W`wu$;~iWf7Kg+bmWK4IDR@l8x`s4kO8h!*T7y|!eHvd z4LRyN_%MU|e;HFU)Pr0(u#*vNl$3)Xccp`PS0=xq&qJDI?=& zj10~VOA$}PZZ9Txs!qz7F)icP&H9C)MrJqklk_iqe$u91s(1KP$;PBLpCIhX^SxT-hvn2K<0jtw-Z5%23X{W ztiGxg;*ixXC!kxJ01+lqUyXLkJ;M4!QSVGw)Ej-!Eipbo{ollYb@@1pv0YLBIT5aN@_#p$Pi6QDFB&+*w^^EIe74ZoSgU>|m(v%>Ci zA{!7V8g`fY5B$`%`bRRC@8zriU|tt-;k5!nf@>u8ly@1`o~pY+a1KmZ(3cKP(IyWf zBMA{+I5-<$j#cY2rohzY>nW%)M?I!6qkx&ql_(V~PlkNZwZNr$X(QV*Jij|gmot2X z^dGa;Qov`_<(nq8D8R|qI?pdV4>TjTHl6LvX9Z*vh z49!um#CLKgD)=u=VL4tzj*Rd`W==40Y@w0IeQ6P(_|x-+kZAst#2mPn>p(90`^V3{vrm$lgaiotfDs}BCLusrlmG#O zMvZ`qO9c!lRF+5rg0e(W3k@o9w~ZBBwc1*x)>dt`f-73J*s8UyR@$n?YF}wxs;x5r z@Ao<9%-k6QM%%u>_x~yP^O-r%InQ#Qvpr|M=gwyPr0^ZgtJbw;yWf4*6HA4J1~Ds1 z*3aR00k^TXgkD8hoYa>dQ$CVUim5A(u9q>>uX!la(7RD zZg29`A0uDYDR0f!#_M8uIL!O|?gbG1_N`iut`E~TCZ*`{?pIb%ia2)HLYS259tfBK z+nvC$1jYH6?QgiX4S(Ta?@*F#MDN4C@>!6fW!7%|bNPpyWK}`$39Tm=O~bg2m8Nz4 zmyuW7Yc~G%%L#r@Y4=x<56CTu^+7=M1-9DEGTkVv&5Qhd1|pE=@u)ViZ)ZM=@k>5a zHMwWfuj)9!=XqZYHmb^;-FFcbCKW_Cub*TWb7an$e8bskLZCNI{PWSRZy@!PjWuji$%9 z7!*i9Ap{J5>wMJIv_X>c=s+IYliEH00P;v6@&@lCuXSqgjltHb#T&7D7iz68-iYPb zsb#2*HM&3N>mQRhKEV+bOu{sbpx9;9Zu})JL0#+l`E{))g^#@?*<1uOSi^$*bKS;ZaPocDHTi2)wC)I6ye!_{ZlS=Aa zCnf54Klu#W+vIu{IZ6c;`LSY8k(hpa4GfVt{H+U7OEyDB9s5u#JZBnvPhJ1lC=oB? zuzO9Fs*}!jp>6_5uQ0Ra)VAh8MvB{L`ekL66e)YPlrp4I3&M?dp29Nr**gGY`PH-@ zSJOJB8vXwL$dlH!GwWI}+6rjn6Ez#3F5fmGxhu20)AT!2^z6d+N8dW71`^p3!9pRH zT|!&8@ezzDe&0d;tZfKlpi+$==9MdFaZUirKcve4#PX-Oz7mfAXa(j`<7->L)&hyO zt>4)Ir~DVYH#{xP6DzY>1D701x{yML+M`1|-_LvZYS>9hE~h)zEdKMbSQ+6eLv9Uncg zQ$;1MSIq%SZU5a2DXWd_Y`v-$0UNi~ZvR6%T8J<&$Ykaml+3g6?sq2h0y58Oy(-~hX0dx>-b0PRyr6ac%LLOg zuOxG0>s8wrY%=q9z$s?3twi-e*je$j>Pj%ZUV6IxW8@CFq@;DyN_0iPJ}drZ-2T5b z7ggu&M*+ObSisV|M6yc{e`_~hUD5(ktuy8zHn9B>Y(Ep~$W9QSUILc4pJ|2h-G1cke!lJH@Ofw118=%$Vz;)I<4%8+3(+Qo4k=ffw2O?v* zmRXN5QBbs_PxAvxD=)Y?z-b;p#AU^ZP{i1niV=_}Muvl1;%b*Xs%;(4*ruWXfKHnv z3@pC^A^Lt2iYi#zX!>1B& zF#!{UiBDo;px2igK7_4YfgkK$ZGGLw>RB7>Yt#KDY~)+FV1Q}+fAK$_;V=L2tv@`m z7wgR7`e# zY<|PiB}( z$yp1}Mgh`WA^#)gzf%5(W8H>zwK6d((S&r4slYdJ_#`GMRXtI|{4c52=^-ho$~;wk z$(YI!8QxJ+4W;c=R3%0x7A$NYGkSPp^vFbcMs*!sPRUEVtnaXvc94H)b?ImN+*QrX z<~Gbqz5#Im`o#=yFk(-2oCMkE^O)$*;svJ8gO zOFv?C2K|W9Df}ocuPj9{QUsQnik(s+OT7=EUv&zpftE~v%fsHfip`RBnRr$G(5OpC z>@V;37oM3e^g_&s;Um$`8g(~hBFWY_JATH^JhnRSFTUX!`Bb48*EoOK!o~&oJ9qhfgfE)g z)I58Yc2;I;XY4wv(nzLnOh(r%q@^pzBn}-`an_K;Dhr&i0i1j3#3TBr+Hc0tL%3m| z(Pg4XTek4*h3G)XBsw9~LlUi7i2k;DA%uKhR*|Cht3v)ZG0QMI%CrEJ<}Ybp_W9LH zX&BWB)LE7a?K}{jv~>9*J;LZblZR5<-;o&nH7=Tq!Qb%AVNf3VlE-!#9A#*FX|O||?9E5ER83W(OuUEZwokJVUYex5%)K5ATsT$;UP z{>o;wCkYy%opLiiV%R7hq=!$smFlrVl}1!D-fa80Pygs0ymUa1pz)M5`o`(sobp;5 z;1>Kk?u#kP+OMj_yyc4*uNqTPzOVV>fGL}Wuro24SymU4O z#|xUrj2fMq)GQiPRnDOvEJOM5MAL$~^Ol}Bn>~CL2EX1uVc-112nhDdj)$zpVt1sc zWsBH9>B$o!U$Johd9&v&gx!|-z=^;Ga~GYZ1IdH&MHS>}9V;;W9F0VdM2+N#6#j}) zFpsnl4RaS`1UUv%HKq^s)}seH^s2Hn+Xx6AiB3ABo2W$F8zJ=_(KXLryl}}Fik9gl zaskoJULvh&%qTq$mJ}^L^UHeNHD(kkC00aC>P9x+F{4Iw5SJcZw~WuuKd3&j^qeKf z!Ih`$T~Ch3?_ukQ+v0)o0jFs*>gy()q82U1_-(<`re<~Wv9oI?*G--|dG^WEj;lHT zWCqkvKYr%%la8;OVR?^TxMbm?g=fx6U;?w0^P}UICT1>MK7SHNv5AuwHZ7mKC^2`% z+=YwgVoEbirRYzdyKD)Dn&6m~Xqvxl1xD@-bC(QiPRwm?p4+g1b!FN7d5OjI7cX75 zYFNhn2c2Ki>E#>i$C3M+ph)AEy~!%T+iu;PoC9|!+?8b?fcr7r&2Ue?b8m7h z+`Vvj!tL_Cy~#ar&w!gBRO%ma%i#9<{@&zFxJSTU3Ag^v?yBlsj+&IpO3*cUl(_UA@9gc4d-w*e1Wy$30aL40vRDYgQcOI2YmciWy zw;t{v@V)iba6g2*1#ZnT$>cL|chx78@56l`ZgEVh9w*~dcW^J7olGu*doA3}a9htz zCLe@*2i#ZSJ`Y#LmAbhB`oUd!HuQu0{DNe%8ScAquZG(l$J_3Qd+9mJ%ZR6Wl7e_rje8cL&^+aJQceJ>ho6d&N88{&qz&xd-l3_~u}70S@r4NhYh| zei!Z>xW9zk0(a@9$>i;D$Krjz9dM6_yBqHGjmczw7o0qSTL$;$O^6Tf@2&tJ+#|07 zAKYiIO(tJ}y9@3|aJ$`*O!h8BIeZi8gL~uc$z&tk^S36G?Qk!LyAAHoA3*-YJ!N|` z87{(yY~Yr{y&i5Y+~?pffLrrOGP!}_aBqj3gu4Uo(8rR=ci`RyH@_?DJ#OeMgS#GX zJ>19PHp2ZF?q;~YCy}pkSHpc7?om6SFWmW0A%D7|Jf23r!o3gfEV$!;hJ1zF_6+hB z?oZ)vgByP~ncM~U7PzWA+UavBPr5%(CTGG;?1bKM=R6O+;qLqe$^q^kxc*{@&umcVU+TLpIu+&Z|s;5Nfeyoz#xTMu_D+^xTdzHoQK_2WMN zU2u!x?twdm_w(aHw#(z3KV3O1^POI~q3~v$zhO8@cEc79Bt=aKH4rN|_*LRp_I21C z*gh4@pAsuRI-YZ0xJ8ZcIePH$k^u-6{?p;kf^8K>2I8UIX8h_AUQK@UFs@Db&An}J z5}#wif>|v8Qg>2b&^-|vX}jPaLDqF3?Gcuor;87x-IQzb2S^wD1bw<^Ib8n}X{@ zzViY?Ec{6GQ1rKLe$d)F=cS$P7h38y1hiM;eA)i=ssnyA@Ez$z{zbrF5By_*Q*pUJ zNy*;?{5YIf+h6^?6ZkUVzfOLeF85mDXS;j``0oNg#+#PoQu%ubQ$ju72i-$Biq}y* zlv4!$?*sqsj^%8o9MX*gz6@iFJ36Mj($dWX{`(knJlZkcotADB@O2oIypJ(XDu2@T zHh-oxxn9rbao)8iFKO!@CoRy#7z;u^VUb-i)+rc$5B0e|kBdy@rT{=xkX0DlDZ zP3h6>sn367inMLvxU>P|wT|)z+=}wv2h9x7T#hklhw@GcrsO3+^Fxg9_9u_|SOc0{ zK|}kSu9r`Wj1mOR1O5bz4fDMEr}OC-wmde0ZY0Kx`^%?0fv*I9fBEzb@Z*5L2zk+A zx+aHH>G}w?S0?wLF6!MI_3$FlO!3yEbbC6&>Rki6EpD>IJfg1ifWI1ej#*QB)qBeC zg4~o|n?d^t#=Bof8Kr1-AG3j0i}LOTO;b@a`7p+kDH^Z5+u|aRWwQ&k!4lkf?oETQ zMk;%jy!woB-V((7itK!0{Gg&hr9j4&7h8 zyLCDkFXvCs)+Un+AvcxgbiC79;}|dJSFsZg9PcL3?8RK<1Ft>t=HLBdn#4A7e)i;y zWQT2q@p0bvIPj%_Q+k;`l0jnsK=Tx6b}}HXzMylDUVbUN^pfbS@usP}5%j{%xgPSjOVDS*Mx^rG8|MWP ziIeH&n#rkHOL)&~d(-)HzwNiUrgG>t$>gi(lTtFh_H7GCcv{EnLHknsfz!b?nI}Lq z!K>rs^*-Nlty==o>;lanZ%rn@>Wz~$t94wgKYsM1)4rEX9u7FA*O{V<*sK!ZX9C|* zdnSJk@U_5?^ztuG^UnkR4B%II@vbHy|HZ)H3;fIsyq>rce+%%tfj>I~e?}^=9s~Y} zyOPOaUVFkcCbTU{fNwWwM&F%GUYH?crB)JQj3*Zp^=m=1C4=TVp&@<<@ZGTHGs25s zlul6{7t$-r;$;@x#Zz;reP|1j{=z4BRJHM+dWMm^g>_tp=S$)OCe>7192=Rx2< z1pWjs-mOig^A+F+{V18dCIi1Ih5rQjcHnQ%z~3bJGKBTU8er*tSR*BVN-TeqJ0Vtl zsc%9ovEDy5HphKD8cR%y6=UQuF&3VZ!!OaPdhomtp2x_8hv}Gyu&ua1p~9qhz3aXm zjfJ@stmff&G4MMdNG9hJk9aP3C&!8}^G%K=Hu-B}rI!XK#LCtOkB)71-P2j-Nw zaeLEvbgaeoO?JGgOv$4y7zf_s2a`#d)6~PdJrm*i2$$DjCEuno-)fm}(_>p5cf-CS zhk$Pr_^t=vd`gq@#?sn)-_fx>jyok9E1nd~pAZXc6QZMOa)e1Vm8^J4k)VqwYmPY}KV;ZgPj(DMppW%1>{iLu0G{>ib@O@W$N*`>kS zSk?MaU95glY*tNd&a~L9iLrWL9&)7$=n1h>kf*Y{CdWNKHfwrp&M~oBQ)2ZHJBv{w zv&tS$Cd*A8U*R6jcu>CHcqTBOnpm}aVyw0{RzHyuA-ZaJeuq&Z8<^MIAiHQ=GC2jX zuA?=~>q*S(Q;}!3avo6HA; zN@oqzIW<=APKnK$9Gg=UTTl~gME=$ynW*SlIXWe0f8n#GJSN5#OpG;7i`AbJn>EWy zn;2U;G1lTBROpuKPFbXJ}?!Q!B^pr#!6BCuvH!#AnhOg_hS#i>di2&`#**-3=!pFSP{au zWrdX@jNb>vaN^)|Fb59iz`-0im;(oM;9w3M%z=YBa4-iB=D@)mIG6+fhjQR9P8jk0 ztXdp(;qlt-JzcxkpRV1Dzogy8XKHuDN`t>hyYF7A-L}iL+kT~Xr+i(zTfU*))1TAs zl`m*_^DgaHysO<){-)iVKGN>Eq;}^S_q04N8sOUq-L&iW(C+Gi+8tc2-O3ZRyG172 z*e{gDKb*-k={eu%z1HYC*2H_EiMOwb??@Bh93w|d#X214)_AP{)hz#?v-}@s`IT8@ zu>85kZ|B#lOv|@xW?RqIlnEWIHpqR;IFoAp*ba~f$K>SMZ18ptzuSc4n4CN-<&JN? z?#O^z9jrdsn_Nn8EB8?F*tL*3Mlo*n@_E_du|+7)DTdIlBNm%*ET3dNhD{|N(&^!n z8lPRa}{pV$s19^iQl*h+PL+` zonzcaXy10dxQ)hbG45vL zZZYmw<8CwVPUG$}?jGZ+5hne{O&GV#xYfq3H|`wcYOc=zhqvkWpUttWMTgsVUTp{x z7wYhV#?9ul{y7G3?TqE$b&=+O)3}yC+ugDs{&zdc-(u+c8^Lpo`#~r96Naw0;j1?8 zKRe04Yd`us>pPeJZHBIER{TX5YyO_bHRyeuZ3b`qiE2x6iRKR)*9K?1TfSoG45He& zyG;0-#?9ul{^|`K^IvVkzh+!ZpY0~`WQTno|G&zAuhH))M9RM3`j0gJU61JWnc;-0 zMmV2G4WFggp-Lql)%4cCWk38+?}xuEi(hTj^0Mov+GO(GxHi6QcU!Bb%QuK>;}&+3 zf7e$vzwPHOf6q?x&oTNJX2svXll;{te!IV6;~&&X{)9=t9p_p8p`GO4V)W0Bzp|73 z%II&$Z8rWfo#byZ{Mq_fcb4Cz-;T#@{8Ku~zxfeSt4w%VC*7T$ zr0cA_|82UdlO~Nxl%9Cz@+Hm7@ha%B;ls*?j$AI@inSG$!^$cTGr@A?Ko4_mVW^B} z2z;*kGir*)-(jXeX2z94OOK`xp=N0MN5*NAKGs%cacKJcVC6LZYt@?IN49QvNdJwv zrN8EQO>nmzt9M9$Qjw*vnXU;|+q&N&y@MH&)@PfUD!!aWXT4hg>HRGI^=69v)&bM| zbi&eKc&3)r3)`(7JzD-(2U+^|m71#Lfcp16!qRWMNYhU`pgy-@;HlH=`--OjrtQ14 zl+yaFt+MpDnyG$2J4fu0{ton9TK;2KYJzLEH;dZVpN5H+{?xB)5_#QbA8Jd#V~VA} z*DNtSh#ctXG38Zf=^LNZR3i_V-uLP){cSI3`n`6Jn-z(cKjtJ$f6FdS@XZ6(=VwrB zbcRfMSJTU}$t>CQYWXjr)@b?*|E7ti98mu=7g+iyKhpF!9+3W+C6?YUxu5}c_-K88 zouXf922ME#OmFMCR{nakw6fav)Bk0SrSE18)%kV} zC5uhd@4DF1Z#GLvciA3?vNCR}dkdRZJ=e%~7{ed(#1zQ+Oc^Cz$(y1XWw zuIYzn$+ccB|H+#y{Srfef+fguHU0OuSo((zJqobHN7KJ}v!$Q;C9Tix9a1axCi;bd zazy#w$0Jkv*Lf)WY=N0}zLK*MGwZ%H7tT}8T}~c*=d;J5W5;{tB2Yw^VxuTmS}luy|B{ z> zEwK2gu?nn(N}oF6+t7VB0JYGfRWJsky-x5-RHXj_$SLEk5pxs(JlsNe@c$K2p|05g&|fquu5sK9n4ql+8<7!C$$kYjXL z!BZfwn;ZTsLYR)ea7&0~%qn;>im8X2I{?MI0RiKHnV5;~?FL^1rqFlS+=fMtlgZDr+re`oP z{HlpgPq+C?=Bbfx?lM#Z<^?~0a$Jg6u%q4JJV++*S->nx@dmyJkw?1WE>OD#p{*9< z`xLaQgs(TdHE#GPz;6NWyD7ZXt@xd2rS)!*f>oUF;ho@0I|;|x1gC3He)pN`GE#&O zg}9>ONOgnzOH_+P=~qr*K1zSS>zf2m0KqxYVvomd`h ze?t9od;7#_B?{jlx{vndm&Q;t-GTm`Z-a83{{ke<*S*VBc#?;WfhXTLIJ^QW>dDQf z!{f&@r9IjFhlI3YZ=QR$@(mSFZa&{SKcW;8w?I*q&ld~JczX-IPX08gT3!#3UN?U- z#8<3B0nc!l-S_7~^DEMwB5?$v!cpN{kxzd{;0G4rlkz*9SYJ(;2UA(@dB~4G_zAC% zWuhy5uWv)gDe*l>CauUwkoX9wA?KnR`i_fVj<_hG*J(f<-|Y>M(>t4l1k})Zh{9JN ze;ygf03E8r?;sETJs8n#g)G&4w8PM|cOw_;;Bzs&S1!h+D)J4a;C|;0u!kOSxGz=U zA1BPTWd2P#%<6ym--90h%f$1k|3#?lzg#?j_0K{f_^%Mp-~3G|a{p%WyyxeD#os2L z5Byg^WB--n`Ox2m%3UR%zx#)w9{R5q&nNyOO1nlpANl`5Y1fM9WB(AS=D$und;JrT z-Tv#vbEp3ys&j*Qe&WA}k$z1)Py0tQp0A7NXR*UbcB5p*55D@t39+%%=o{jXjodX^ zMZSVG{=|8ZIq{(6go-Rhq(60j&Y*`)5F6@t=MM~e#02d?5j^I6z@W!X(BC2aNhglH z3+<4g&~FUpM^NKwX8a)%W20dqjUPaJOr1Uo2`+jHjh^;lp(DclkJ9c$X+2%OAn*Q=e~C!!5@kIqAE5ue@b9{xL|B+zf5;>3<4-6kY2@H#TA&pd=2iC^{_ z)yYT$A4li6qx0L*4b;(P;W)whkm0z2@^=xdE-WV;7_bLL8+I{Y1-q1{yNGZ&@XV`p zLM$`K@6V~A&wn(={ox6iOu2WvdCbhnm+_~fWtea|J%VC|;r})R@i^_T!?X zG`nrH{0mjD(*<0la{k-}MDYOqHdSW;=Hs*rU%WWYS771ApP}{#!4PHn6{j1dB1pNN<)er(<6&?Ez zWWmtjW$*>Q1}68#D0z_6$|c|mXP^}*-xUr$fNW?R8D5GoG=_v~26Cz33ZVKD{LYc| zD8BuSwvsVaJB>H=3!FtF*lnxN zSu}r%a=L}7fZH}l<*oy-6A#gEbG?qNcu;tARlKJ}15))z$YN!7P~~-HZZ_rhS~cmF zvJ0ZCL2+6&Bz(cj+==oEb+)|1p7QeDiqsw&W{L)xRN6H=r~Olex^vZ`l3-@Cd!{wMnz~(%IZt z?KY`ihp;q!ZLh3Vz6ZeCO;}ZpW|jMcg!L}X+AUQppm4WTt%z&|t5YDnwtUhx3fdNU z`3h2eikGpln7@lc%#&uh!4z}$I`$CQ^cyEbRb9+JZL@sZX8E+u@@bpp(>5!nn`N9f zz^4sYemG|ZecEv4(1-y;!vzU6Tt02MeA;jYq})q)fGmhs8rcj$1<_0e@(0mQ1qv%a z3w|hV09HiFu7bE7QVkb4SNR8ky7CvKeh(zQN0lLWonHbRt*M>( z2N?E=>|AHSN4S(t!t<5C{O_2aDv$?)ATK%U%j69G6Y~|rc{Qjf=y-&4qQJ$<|2$Nh z#35^73pj^N=KW6+=TyUa2!d-P)HYY*pB83%i=FqN%h94sZ;^P6&?l7t_mEh}>!>of4r(U60bn;37%9;mvE%wD?rTPq$KcNK=~)iRQziIPZnw=@yrrxzw*a` zI7OiW1Re!cv+!1c&NBedG4UJ^c#*)l&RQt7Sm5H|@D))!*TqvH(D)$+PyGT4$Rqn6gSudV(Rqng+Tr8gI zDz^bVmqb|IYpdJ|@LU>Q15bUGI})C+2-&PE6=FSP62dec>r{xfi>a`F))^+m`dQ-7 zS$|yl{{U$lxbsvv4v_DCH}7p=BTR-WnlJ)E7zONQ5J$EucgAVx?#^;@NzfI|PgCZy zlXv5esKqIIgvzR}CqbrD6nyS@`Y`N5Jbaw?)u4&qjT|fLMQ!|RS}t1`{SBy#hBSb{ z-*)Gwb=?-vT?y{-I^gzA>s0qYAdAdc!djcrB9StqyMc}OV9ajYg6N+iEq*BVblc`( zyuxk?cB?;zWpS}vn~mMd-cP$9Bk9+Uh7#It`L*5hYrEywcFV8rmS5Ygd~LV<+GG`k z#Y};OBj+wG!@&5nk&`cVXCdWq@C8!ZFi4{f%i;LPuML@B8#3L2mHrxtFb&zw092TU zjF3M}Lq;g90;UJM8@`Y>Wf2szF=Z5>!rGJ(&Q$@LGPg4L2I;ji<1E=2God%ejPk89 zV|cy_(3rX7f?dH7(&p?!@@jLYd9^u{xQsa?T&w~#XYQmRcLPG&puI?58qujy&8rQX z=A}WM7QUIh#-I_l28}cc6`(w=d-P)M6JUd|QPCQZxKCXKv0Ez>0~q=hEUoe}&! zd9_iS0A5EMHPS0%)F{WV0yJvwDZxG<3Td;(g#=^PbX?l35w>QHaB*178bNE;DBhYi z!j)ld)(BUHwOJ!<%^Klq6`)yjn}f$9-olh&yBiJ27&d~|usuxJ8n&O)V+|W;Qz^s7 zG^Y$36SQ+wkuhwnM*kth#x{^LY#ZUpHf#~rNhTqx4O@iujH$4G)*YD^8a&JWU5k&a z01cbFA;?A8U>T~C`+5%11!!(Q0vJ&<^p6tCIferVC5E;G z(0^j+g44V>hBC#bD}^r-H{KJoLO6W?poswIfTO>V7+L?yC}I@dUumzzFl;EiLp5>N$r|#Je-Z8dtfSQKHBtdwj5F-@IvEF4^N%!rnx7b*wSf+c1;XL(ChDsm?yi zupLWL{jstAxrdl$bQuqaWkjh>wIu04qsyQkT|Ua3pi$Sil3AcY#wZWH0qCGM z$$tfCOfuP(Uz=pY#w1rh3pl6^^5Ll5#vlu|G02S18f1nWgFFs{Nfp%Qcs@C`Io6!o z97{aL91}L?c+v=v2emQ2&&D}5syVeW)|}cHGk$A~30q@K8e@#>mQtcN#eW6p*QQuY z)TTI{is=%QF~u{slT#bwerUDE5R+ONLrf{g5TEi-Qfo83h17aV}e-=nFMQcS+|%9>t~H&Lad+V{iO99 z6TIO&%%)s4`TMI{AAw!+FJ80~yFp^%{O2uPqAnLW>|eO}Y;}de`Ob^T%FPjy7yHj_ zY*cMBuuM2#f}AS_E^!_Q%~b-IIW(f+Y8DZCl?kl#6J~&67;#pBQ)v^NQHLk zf&eoRwl?uGQ1fxx3-LWFV0%yiM#7j0p#=bWjgPMKTE587Hb0=x-!>&Z7;74ESryI6q5Ve zcCQW0o8O>%Yu`I-^RA?@K2jR)>S`6+Bsnd-HnYACPCib%2#yb=U}SV$c;jWai+7Gv z4IjX(~(7)*JhCYzK?X zEja$ta|=RxZb8T{l3WMa%q-poXu2`7+nEJnyGZggz=fnUlMCKbX8JN=F?|^$uzeZB z?MlgBa_YWp0XcPFra5(AMp$!Bj1smhC0u4R6N?`MG!qL_C`b2YgzZWRhtIZ0_Jj7a*nuzfJNYe|-Rgz|fPj)Yu%lgYCHOlO7%syEmVWJ{rj?k;5`oy0C$$KO@9$^t7VSJh-ei*9A`@}9z zVX2+Qc8db*oEm%=xT_mMghy`HhU>I5G*AMHQ~U81PJi3Wt?L3~=pV}H{cStp|1n}e zwOadkz|Su2v>YbJ&yjf$-%#{|@NSpk#mByRGYBf82q?kP>Q`{~>S_ zhJYA5(qMb1GV+6QuDu()rq;8Q1v^Gs=i&hi7Uw#G~0zk7mO> znz4ZMZ--KG65F0ZE@Ky^er%PBAMRBuJ}RXYN1pL1q!XpM5}EH+s!OI)g&w7fJW6%- zD8+iEcsVuuuTyhv|Mf89;1*o=8SdA*EA^+@s0f{2Gc)~{Su-mP%UY*dGb`exEa+J? zi^yy-W6dmbz%{c#YRxQ=S~Clz*UW;Sy=E5hu9*e@g*CI_zp!Q&{12>|1v_3d3v_19 zEciLs%z|Hh%`EWQYi0q@npt3fYi2>unpxaT*S-gHZ8|D~%BQyi9wHp`(fFL7_bfdL zpWX_1m7bA4y%nHW%zSz)K(CnDj!LhX`Mg^JKJQk5&$|`i^KJ$ByjuZ2?^b}X0s34b zEugl_r?&!V*6OQ#8CwBSu9z_iIl7~Ya>b0Puzs$XF(KB^6|=use_RDUD`s&sVdH_U zfM>!M@J!eO`%c(MUL5$pKViEW*=Hwg%z;^Y8zaaGo4Y0WF@nN>M8D!cMW$>8oJVn> zpt>zaXkc8h)P~53D3#0USgyl9=}2Puhu#~x5k8t?W{H?HQ%osHMb1WGcQP&mkgsz8 z3i^;p;`uw75a~aWnR^}3K|y~vh1QsFQ8U3jo{0&6LKW7C3hxrdlz0TEl?i{3l#^w_ zu?U7#0fer z_jfrgjtj}wPP!iNfX*2yx-V>D2s$EETRu+vi=fN<9VkY|7{9;mnbviA0gRYO_F@C^ zw{2@(*Hh-gRbdu}f6W$bBK4X@nZxo*xs8rz0-6OMr`<(&7bE?!gcKvD&b?QVxR?#U_NRJ;vVt*TUv_$*(5Uu?!@KgKvXstb# zR{L@U<`hJkE3!w19YQ38eey9_`qYb~PaqrECvUq*>u2AS`e#p!P3FV8b$U)|_TO`; zkDXXH6E?f=g!N1_V|E$ke7wVb_?@4vKdhA*$)0>(lGCAqB zQdXS*&@6E&M5ktnE%0Q|62q*AOhQC=zG2obro#GJXP6M{XNkXL{dSgkAJS96b9QdN z6Mhfa5aUw0y+6XoBBhYf_(NAAC`4Y>g)3ifp%YN|G5Rw6o!#B)Bs=l zPZe?#3a3qpvv%VM5c6@`i^S~2`x7fOzpmU`cM2jcK>NApgDEknX@_o#TRZf!u|wJK zUtZh?=RVNsbbfAN?2s5yGeO9q?J?7XT*5g_YSuP7?NH`6y4kT|-i0_NU`DABrv!xj zAx;Sh*&Q3&A+uwXZHGd7LLkMUH_u86}j*Tot>4^Z-X;-kZhfwLOT@HJ2suQLm`<2 zP?i1Kp^%;gP{pc{o&*riv_rCS-uz!+ha%Pv**zI+hpgY)A?vqxNc?usW*4<9C9>9jr+x7)UE-b zjT#|s)CgIl_AS81sQnY58C;QF8KXwnZbSbHurX@f9X5k2p*Djn%C>_mhTCoE0L_73 zy5}yiS-RJpdT=H2n86icyA3^_oO*D@U0^e~(wus5r8)KBit*dQ6=6HLB27YRqqd3? z_27y-#UX9fv_w6)N~dCal;L(8`e)?SgDY)xL6xCg4U=}xE)*(t~5rCur+Fgtx+Rft+Y|&+jQwA_^Z$+%;1Wk9bA2jupM0e zfF3)zdXyeJxMF%!gDWN{y#&vS^B)>qvCgLkS3FL$&)|ynkV&wEC)O^e!unZfm=Nn{ ziT~32tx>xd>5;8M4w#sOT(tMgbhMj2`xt^<@pJZ*dC;+MDmahFba*7PoI$cC(EWVa zrNFRYEkh_y3&^wMxYHOer-WiWzUclB3=M)R=Gf2a6J~We z_i~0{xCIhEPCH+{&3Of@!hI6L(zd>@D9teU4!I{XC8nUjhmJDB9olQR})m4<{!m z&cAvW268=4VFd9)YGp0lGl2Ox?KxzQ4*%=9Bb1c$RQYU{kI^bP^dR8)q5##*L_fSJ}ZXWyyl!69JUT3(NGwAPZNs)VtY z2Zw;yqPbXW`QJSim6MYj_89{DTaZC2nlTmibKvHefm_BivmTjUNy8 z&__AYdy|M0vk)BS$>en<5i(S3U^J;eRmk(4W{_tsjeG+ZWT`>kfCCNk=0Y?r*FOtk zKV^`|H>$aamVH?d-qKU$=Og+~Z*1je90oU2*35}&hjY~XpuNjEs;o=8oTC!*yPTsE zvctK{0Gr|58vxC4j_k_Sb5z21IJX_J8Cs1(`pnQusLiPep_ZZDG-HGn1#&N%u--ssXE^Sb^Mupd%t8SBY z=Hf-AZwr*~HmKVLDsnzTwYWpzV&`4J-x0XC+gzr;D`3KHE?0L7SmHLT?+H}uj6!sG zNen~WdFpO~@H&XvDo~B{EM$FOXzQJ?1HMP#nNAt_ejqfnoCgqoufX%1djS7XXc|#Q zKN6_f34{7Rfmb@G0={41)s74J0fAfGM)hNnak1ObsD2{gX6I9gdr%14ofiQ=B=8pJ z7QjCh_!f7GdRVA$cS;~`n}pu$aEE%k!1p^(fcg=EA9QZQAmdSiw>hsO{4s$abKV5} zxWGGHZoWSeVeNUw=?ytgiu~7Qe7i&7JEbqD4-A**&&U=DmcFMzE01`y#r;9xsS-$xBFp~RnfZ$=nS z+2B7c)utL;F2=L0Pu$rODiyg3!Sa#XEPfSP11z+Q^*I)eesa8Y7c^!`Drvcy$Sh{M^GMGcq!RqRgRC=A2Q#z*@>|{R|@`Z$u8I zk%{P|%S`-!jZ9cxjN49XJ%9U`jZ9cxQlpWHd`=@1mY39MWa0;n%>VC5P z>NPS^uaSvn7@2U&$OQPxv-@jpV$mM`toACvmzmv{#RPJQXF~ZRtouu$-EKn-%JY); zuZW@@O1;%hnSV<$Xq4yuZBEiejFH7xb=?;vn$k>E4o%|XcORv2z6q&ar@aMaL7Jb% z{lrc-?OYp#0a|>7*tVw4>q0a+i^r1A*LMG!5G~S@oJ+*Jb&blUDaxgq1vI42sbb>3 zxlPMI7Dzr$`%l0iqE0=GqIhCBhbDIHAGc}}`R=@s`eD*UrLl*4RT?`YL#443v`QP+ z;D9^?mDYY&3zCoAi=d+@2#F~@TsRv|VoFDu#H>|aXttdKG27N&UY)DuIPIcDK_9OY z1w%8GC>U+?1;@3KESacwvzBb)V2Nd~!kFVI_b0p))z0mi9-OEi zoT#d5v#j@DuvhV~?wKBNqMGwLC#pHA`DoTeH77M6oee9}@qCnT|C#xyH7EnH62>Pr zAMJOb`RF8=Lz$0u$7D(7qsJQqb=wPCj=ijPSvhVD!}*ZT&qvLsgLgAELIdU9OqG|r zGv}z0gPW;XmX2_R!oD(aJzzUICTu6iq)GfYuB3HI9sR!+qY3Y!4s)VXucVn1l|SN$ z!=9*of*yOKQXlFtCo1)!jzSK6aJhm$)bSrVQOO0W)QQR#c=kC_X*W~tiAlSeYW;RI z)%xvbs`%}`16R_*9R0l@yPE$%!d=!F`BPyI8DEk!2t^!xr7=Zz1A#9myVOsG#i)sx z2@Jf7VrW;CY^mxURqi)$59ybITQ=*2{VUeaAyU-|-O8cRU329S;G0$3vlB))O-t&=)<383h%ud5{eW zF{428Y6l46R*sm_fZo0hn9H^FTf|b*sWU0E-p5?l>wSd6N{*=yy^XM*if5lmG3$L4 zm8;~Cx|~S~>$iwIeI`YYsLPp@u-?Ay^qCYnpe|=p!vChTadJFe&ZLC(^q-B&tT8g3 z`#+N+htuUuO1Kkew=HwyVZ0 zMXnk@&A?*Eua|QurNr^;*XAhRXZvu%Q>&0E`-c-4ypda-h_Y( znS~pA!ssL<)S%48dqf?QLQ$>?nKd1HMiZq&&B6^mGgAyY8nbXi&(cg(s)xRa;VmFg zA@OHJ^FL7)=D&#rw^z%%P5Ibmd;^}>&C?|c`Ng&mYF9qU- zWvc$vo0N!qj>Fn@+K)s37pE2IYkKGl;!U`p3dMsSdUZZ~=su%JgdY0*0AD8NL3W% z=13J^;x|XCG^ajNCGp6{%|wxCk5tu=Q}@Zdw$1GOX-<8lN^|NXRgB+GZ3x?`4QUc) zYO|ISb)Sq~8D)-CX^DE@FP)0%qKn=4+euE{C-Y7=bEJyYN;ID()b>bK6eQ-HC@&^6 zN2+u@`bd@5T;Cf<*c_=MXpdA;xII!u*dD1OY>!kCwnwT6SDUq$D#V(;Ug>&NZqq9h zw1)(4Cv1;Y-A|7_QniB~d!&l#O&zIXa?;l;vEuxPj#TmJQ0hq4Meyu%q>A;BNw7zz zSi6`C>t~%|Lad)9{<8Jksm%ij>}t5@j_b2iq*_DFH59{^uVTD@&V4t`*^Q6Nr){U|PTT6l z!(_9j=mR8&4|e^;t_>iMU#_Nm0G2U6ya7mm+onzHqL0F#pQrsB;NMCAq1u1(rgg<~ zUcO6&(v2nDU@T#4Z)NU+Xfc*B`};Syj=^r{4bZmJ@9kvX1yQK)pEC>4@-D61IhVOT zD0j|f?hzh5SDH40tVPxc^01sWg8xbL~X_vKM9rj*l&wHa3qeJeB<-j;_Ng22QQej!_fOs zk<2jkQRcBZen!}?u=9R3I}9akEih@U1!f~P!_b2l%&|e)K`5_gOASJKFI#F5+Q9{L zc76S?Ao~vuLU|TGH3(e^Pxc@*a`1w=f71nXMYcrsS@dfy?hmr&z1jyS9GkPS+B0l@c<-ETm>?j>(KjR#m zw^EJQ(iX(#ty0w*US#gCU;o_W0-Ds2j$;knea4+~BpGTW$N803Y$dGyKUas^< znb+?5^oGPE%q(t5FxQman?uMi_vR3?FY8|q*rzun_5gH0!8EHPN_J&#%^_@G*5}J4 zKE3!c7&Xw;l?BtwBxuKcLXGyc#{c7V-!6 zWLhc+AX+Wb+V zb>cx=>ps>@&^WYWeuIh^KLSd(v6>&l&^7k8gdHgT(A3!MkDgAMg44x!p|*V9a%#A|LZ{5KAi%MD^4~=k@*+V02*XsyZoAo-r zwiq*eXqWh)fxd~CpuO7Z8p8H!r(5Z<2N8Zqk3EQ>2TJB30u!@yl&qew)x)I!$T0*x zOfnZc>0wgl#ZEb_gG@l~RH(X6<*;Tk4c5>4!em%KOZ#!_w`+BLoik>xb=rneg6p}~ z$@N_8`-`jq6nz4*?Od>!iE}@*?J`E*c6I!sql$ZVWMczK$L_Q@y2IoaIjxDq!$l| zOMIMm4i57;8Xw$~Al|=?tWrbF>$eMV|KZTotGLm}k;JaG(yiy&uDLz63n)_J{V4_4 zYhIAI68G=3W%$}&xFBzpikEB8&I`J62hb_VVFU3s?O7dJrn=-;2<2NBM9x-)#`EV3 zB4?^1<9Qn=1xFx$4sDMffE_m(+Wr)g@#IbR*UlfFhQ8%qi0}03wt1n>9InpOH$|G& zZGZM9k(rC!nd{r;<4`|GdV(A@Tn9j3N<~OtN=3+wbMY0oTj4X;QY8VJVFLvy^LZ%3 zW~7U6s{9r{b1~Ieq}^=v3BB3qqkOy3$8a;&#Wz)Qz+kSXI*+`1w5xgbXjkHLI8L4z zC2U5!_@>HK^6K&K&uqL?g+`fG7R{^2yVSw1vJkebETl2xU3^nzJ!R_cz7YBjb3GMl z>=B%FTBb`}=6Wi8Q{`9W)f;}Jz-u=ANUucySwe3vsKPf@3PEJ9sQNMK^%Ye*EtOG2+QyZwawZG70u$P^@Q6h4r)U zFd^2@a(~16%_UX%rV3{w`Me3yKQ0(X!s_YG&CHi9b&h|o-l@^TMuZ1=lnczRJS@@to8sHJ3Yh5yka)C6mrb`BKBp% z8HWPQ{34FC)xhYlVCs4C69|E|9W0l9;~hi1m@7mPzL-lWtU~fJxpu;OUW^&BwH9Po z5&dE=;anAxcjmZO9VeYRtv4LWH3maijKN?8)?hF^Uxnn0a-0>K(|U`^sm+Dv)aF7W zGv?T)>x1xp+fSq9_x`gt;e}!M86TN zC0>CfX5N#|aHK+B)_aPa+E5HaH8F;Q@mNDaYQGA_Am$X-By(Etc2a9Iq2tkJg0Q`8 zg>Z31PU{i0W`e@4nIK#l(WmtYS4H$`J;K&Z5U$2)2Pn{7j#$$t1KLoHjgcT|=Nj@B ztDS3np9nkG;QM8%xdzj_ZIqd7FgfXy0jw28RsWIM1}lE*&@*?*vkyJzvK}%C_C9mg zE~dizS!b9K>t~5SZ~buO8TW#tPg;9SqSo{q8uc>D400xhsH3URg~kc zUkiqJNf~m!xc9O&wbAK7eWaQ~XV^ePF88bp`7&adn=Z9>=~XeZMCGD&q2XOpnuaOW zG*P)}UC=*Fp_wrn-Sq;FwCaL&SiAho00iT?0!ifKv@y|9bwZ2(6+Pm-o}U%}(j|JL*QRsv~$H46z3&ziI+=-{1C$x%7Q> z4s{a~E!vG0?fh*x>X5Tgjgvh^e;W=u1fK%;k)n`)4X%^PX;w#xu5wI5<=+K#2~|0v zw^rrIlqw5@MwOBwUR6qt%2eghEL8?&s8X7x%3&F*Xp^l~>DC5Socug0W4o5IDP<&2 z@`rjA$seDoNI{k&g&B$zWhv4%Ly>NtJW>77!LiGGuEchEJ586jd7#duyLzBB@T@%^ zpJ@Ln3gQcPdHRk-b9w82yFAm|nbRNJ5ik03)7wQ;y2gu6R=c)3o1v@g!zLG0*OoHtTSv#2u>t~f?Lablv3py0>+m*TC+elC- zit)7jVVEB-;?I>Ae0YDWD}OvbVhy}}8zzSZ72;RH-QP&%JBzdols^?R3lR*tFoj~x zRG}kLMev0sdfJI1Ab-jpswUTcDK7d{*Ftg~>j>K~v)Ih}X$tzEOtujFO7{avSPZr| zt)eSwvWL4FM~TI&kU4eD(D61@CoIm@nkhsa%X7?lUWNJOS>1ESJ9#yT=7%dQ1HDw0woOu-5c6vD}u6Ih!a#DWAa*}*y;Xq4B zo_!~OYTwDvPLhjx-Y-Dvceidp=zjK{GQI$*-`)Bm`%e1ZEz~*t)vQkMJLz|~cn0p@ zweO_g-C9bCdf|v`xSjd}q<(j+v-?i^-7TKR`<(ku|E@1U>UX!e?_}TI`UE8(2 z1*7W-+XbV~bwH=U9FXK%^#8_!(MrUVy36lC?a2glox<;{mY}s<#%9Q0|ewRV>2OyuEdM-Y$gmyq4Z|L zt?c=KB?9?52``st&tir}VNDMv)>kdN4+|Np#Wccl_>Pj$b*a!U{NAK55&A-H={ubQ@`Od-^2wAWuQ8etFl?ukvOc z=h1KUI{J;?V8)S|P`DA2I&qB0w;XDWydA{YSHmCoPLyvw0;?XPpYts9DHNX7#W{;? zRr%dW)l=x&7WnaX<^Gf*U#Z`Ww!-w5mSQ9!>E#g&rgyDLFMDb}kI%yQuV2Pu8+Snb zFLgf(VVP-Cf) z$7!!efZL>I^r0YZgt-lB#-UWxZJQaKfyhpbP_WxJCs=i@QYS?yhLy9R5=duEoc_C~ zYq7($1F_QI907_keW)sG90ZRk)q-n66g8%Tthiojox5oM5;dk;?}lw%=f^sTjM&%4)X6eaC(oFvvvP}(`r2u@fa+CLNAuCwee2|bYGfdzMw-eP zq{bmRsh)X|Ewdtq`GIyE5?lc4Y^`ulK~uTveGyQsI!zU7h=%KNv*IX|aghdQR)MKT z5X1QcQ{87U(j%!p(xiH?N%aU&@F_k+sZW0oZhb32z$Bj4-89IwrQyv0PQL%>bKz(U z6*^!mP1z%9fmvz(I#l+J2{Fx&;O7!>*_zzZ_)`&X(Kz|RY<-<}Uz6%8#BB?FOH@Bn zqv>Gk20*MW(yU9m)}(p(iMpgGf`U)+9Hr*&WPkW;q6J!wvt=DukTe&IBSm}Xqo zNbR$AVmYhsI$dlceI+Z}W}=i!brNgCQp#N-+6&TGAcrX)j4sZVQl1&s_I9~RaV04D z^gmOnkKaMQe4)DS@2GAEShs_pS+_&{>ai0Gv!-Tig{e~maD8=!o~3JXeo$uu+Ah0e zrtco4FC^)kW72nrNncbKtQt5^sSOxxhWFc_L=ISLnFmmPv?ZqU%ImhiefyKl+MMg{ zO16XBWqOr=B@#bfdXkqI$PPgHnIkolA#bMw^VsP)aUso4oYNj?Ql|5$jnQH{@u94& zZd*-&c6}@(qm>WREEa@~S;VJCyBL#Dk7X2BXXd6M81YJGE;5<*fEJ2p=1n3%pnKUp7O$hjYy*VNUsJ+i-p(X-{fYX6$sxeg(zGl zrUrfgRHF56rs=DLzXDaCa2pWY@WUBNJi%KK*jqB_H#Sg@RDy2+(@QY2nIOp*9_gxs z=&D0Vp^R-*5usflxk9`v??#7~{0Q@})i;m=Cj-^zE;u*87_mH{xa+ z?OWix3WECESXBO1(lbfk+G?^&3x;G$jrTYmen|B(0}A4l6Y(v0Qm4a5HM_{yPC1}a zHz1fT`j(-{W2uD8OeHKmRde)!wtQ|~sMNzBv*L8N5@vqOJsggNmqCuHcu`~c_N{C= z_BFNJK&@X>lh*7rRp228OPT|$XG2+a-!;mbVG^<;0qxmQ5A997jJVKM4;`p|Ti5w8 zT*Br%bE?+&WmRV2dLPT8JWMil?<&Ab-iyAoO%xjd^KsfaeMKM9OVD~4*=vB#{FxBn zCv~1GkIe^f2QxaGt>Z-q#Xv+{l!OSd6&OuWIP!Tp6iy4Sk<`6pU;D7^> z%(fBo_MMq6A+rgDIa>CO3*HYE^dMR)zVu~&GsFEkak@P)Bat)A$?OF1t0}-0lModr zmtR43;sdm|KCgN1nVyV_lllc`^IOuqKWKzFC+lCdd*o;sSdk+pqJA=) z%DO_Ka#U|&XAP?GCV6}h7a9-uMnUn)N!M>TRq4_0bbF8tBqN)ksg3=E(+U|BNEc#( z(n60AXIf`N<=s8XbOjj2KAtr>f+Txk&}sc(k&Ju8r1aNCpk+VJl54(agG-BRMB= z>U^_iB&CLpZJ(57CCO*9MB9XHJ^dXdxFglQC6ujtI8*h=fyzKPcIGdtAM3T78G<(F zOV=&GNY=%H`h(hI;?_a=%;{h{1x94Zai)n)5BEo#JOYu}inC7z%}G_>bpA?(v&Ed( zQD(%_&L)+QnNtcVK$(jnUOUlzsg8LQ<_Q}|Q!l?@1L7A8=^E58oDiDOu9ac^k z`e(KZT@?A*SzeG`Nwv5x*}*m=(O$Ca`F^_|rVbxl$g+L`PY;CQ3hPm@qk0rd*CRW+ z%dGyo(=lCgx?=3p;pi0EeA}nESvB&YQ)*yJjbi(&8gXeGB1G%nxu)!?EBhGGeOg;E zokOTjRHt)I+VsV#`joRz-sjp@pJ!XWr&0G0>B!=y>~*D!q;oc3GDQqP|2ziUO2I5F z`2W~@7wEdK^gQg|bFo2?6vels(Y%hN84V~tbT8hRp)>}83lbz=gA0hD#>y>-2Z<2~ z(7**nI+L+2IGcRhKH319LW-aqgjab z_%0+i{gu4gwvq$d5&2yC7zlfdpL8Q1kpWo*ZB4^c-UMe+K;dY2GQE4;WbSp7>0m6u z&4gz)tudm=GI+7S8P^YB>F++VirGhWe(yG&I*5mlT7K+Q1q;yn)F}wLsPbr*ib6MV zxRaLrJ`_GkFXM;vA3gh-U7TzNdL3DLaTV0&uO$W3*g z{Gn6*zMD}`kH8g0c7As=>ZUFaN}C9c16Wax18_~KTL5g}dWqty3Y0F^e!)s5{LsM& zLkIH6{XtLe4=Gi87gS&RlSttiAzJ&BqFPx-1nTAKktaKd7tKsNE1Tk4DXNIoh%z=JtcO)-2(fvSlPR(VjlZy8^F8kO4YPSU3y?KE9fCt=tSvvio zkTgqAsW3YE$YPX&BxECtIw?B+?!@bqD0*avEHN|1er_GHNqU$f#7J(P5k#PuP?E9+ zOU{{^6I31)rQg{~v`CcxJx#0Q1aYMsSd&m(d>|2{-b*rXM;3m_GtkV#o$|rviG1&= zb_#j}O7Ot@0{?d+puf904d)GZM<;G?E2G;fbzuM4M;v9KNS=oKfbUuAaaXpNr5=Z~ z)MF=RCC{~}Sv{2HTN$3{Yi|kC8QNe)yC#e^9@bSq3Q&GmKKW>q0q>f}PC1 zou=R|C9_&UJ1+@svPK_vYjmJ#jSe=;CWrD!{9#Yx@3I6b0=}&_dhZL7)==L)A51SO zT#0I4^%7yzJT(gy$%1Yn0VYO%&+wdG-SWJ=dCrjmvp8`#yI&&w`N>bM$u`se$PSrh zW*t1-J7)Rr=uy+G=a}>o#^)vT6hl^9R7%+Pa(QYV{JI1y=mZgMpvenzS2Io8nvh+( zhqC0%uZ8p>S-Omft^o5b6wReyLOra3XGapHBQRJ1l@0@m(&3a>P@9RCTSA>|lT}5+ zrQD|0HpHb6lIah{GOh#6uKx*gAEmJe1<#l?Gr}=x8?NjVT8?gAMsh^V^AOrB} zep*Q!CRsC>6DoJgWYaT~u}3zM7ya%%m?1qJ**OVJRSt9?aAvH1O*8mlGcYs4!SWUH zw4%#*6?ZHk=1-;vM}aptfs|?B>G4Xsd!V9DO8L2G6Qf09WyYcWU)y}^b>MuC;UwNSlSlgnh=IghP1T1D+`o)vYm$!fE~TX z&h@Xf*URAQE)S_%j`JazXXmsPuuvj!?;eIMv)V?^$PhpgvqO-)n@qivDfiPU6erJG zn&6G?kHSM+(_-yzS}dyDX(2EW@Erc9ygX?N>SPC<>n1UQa(4QKy9y5XF#9Pf23*OL z0zdCu5(pQ0kG7=1TT69Kvt@Jzo7J3V_O+D-I|1GtM^MxBIkQrz@#L|r{hnpH2nOkU zKtnPX4M!|EVQ>rh2@4;96gNM}uyPC27ACc$i6t%Z<36_E$x1tl8zS}0OrYym)8{h~ z=d>fw>ByF7k21;B=TNaG#QgcHCamZdpys# zt(l$MF(528U+zxBsdL8xK#i_JD?iFL*zU73zrh;pXi*X*YjGq&qCY*02Mx6|me7Qp z(1pB(%*Lnb#N~+V`Pk=$_Y6iMa6`~P7-}B4HF47*D$+{RSx|FRU>GOor@&3Rve8{x z1(2LP%|<;arsxSB6=`W~ry{3Y{(B=mTYx^srWCg1iLNbih7mUrqQN!|_^y#Wy3#Ze z3eaX_EYs_);*e9axAb79fPiS0TJtmlIi}(k#*@IEv$H4hg{{^x8Gv+ZOG-n8MOU)u zlTY*%oW@@^$lPE8QZ4ABHk zSLPu=*$1-SZ3@pyEwJSwd2}Yr!4&$!$XN%785u<v82`_ zwbwuvrv~^kNXUADkX$VOF-+t5!wn|*haVr64VvGF`ya=@sQA%n|1Ru4DimdF$2VAp zy^Dp2I}?jf@FGt)u%(X8%4rCB&F*1R)fN1^g@60OVtxXD|1tjk4*u=N+a35<#XtFE zeF3G&=#C3d>L|Xz%Zs=aejRxhq6U7IevoDV883g8m!H9F9C zSNv*S!)q-(%a8K%*LnGQUf$q^=YqCKf=GVX{43n<`q#Yt0WU@Ng`X_$=dVY3InH{#wD6?Q zT|D7#7ZaTAnqt`;FE8=(7kT+{UVed>U&E#NCV%|~fBhyd(Km3}_3wF!F#KJx03tk{ zmq&Pcl9y+3X*rKeX$qI(CEi})HzhX?=t7h-l0B1diP4R1OmFVY+hs+~yna2TyN7|k>k46KB%)`8V zv|&CTRS%iRd3ox*Df911UUr|CcH0_gwrwP;9*I7FNTBs~%=_J;HH6gdiDZM&Di?uP zA(G#j^pSvCyiX+Wkx2f_@3PQ(u=pOq;nAJ8)7T!Kk4FCm@Z!<81SbR?KK#0g3H(pK zZjK2OyevrYHgMprr~(wwPe1&Yc?_tu7pQcQSoEOa(|Pk@zVj$AN6wok&TAV_@;*Lq zibSHe-;uuKn;%PX5sx3Xb)@bSy!r5XbG%_Hv*r}r?mcgw;oncrny&NaOv9X;HPu>oO)07zx^0TT zUAh@ZpL!I$sqM>AJ0u;mBi`YJYx0oodB-b+MY$;Npuj+`EV6Y(jxGXri9lK+e3r;r zMBXk@@F{)EpFexl zw6;BC_WlN5|61{|Y5Psn^1RvoF|_hx^drS$>7nRTXvZPKg&h%PYLa&oq*T-VF(QIo z1Q94i?m*->zr=1(>X(;mVqNce^q;87*h9bYA$Zsg}8;bmG6uk{aenXMJjhd#R z$Zryn-%#W?iO6p#@*9f$h9bWqK8nb1DDoSM{DvaGp~!Fe@m8vvZB#egsBR*W2_7UO zzoE!4nr5rW{S^7zsBX3m@IrOdP~qSJEiU?B?VJad_i3uYjOhtsLh%glqrXm6891})F zm}((ijR;dwqDDqJYGg#1iU?B?VJad_MTDt{Fx5i3Dom&4UWjW%4YGyAH6l1g1gD7L z6cL;vf|Hsn61v(#x*8FZEpm`hL*6)^EIFcD-TRqW;4mb^D%&pnTdKBB|Z=wvfBs-)D~U_7PIn z^X4f3e9^T2kP_$CA2hpfn+Kl<%{~o6iF$2sn_Zxid%n*+#M=+(YY*vb`+pdv5Pd&{ z+E3!&M_Bx}`4Ij@(X)r(Z@`Z`@NCMTVrltK>5-^XgmfV|z=Xti$AP<%Q*XTcJH!FG zsB8i7DiY|w^Xztn{QG(-km#O_cRz61;=qBT=z%T&r`huwZFnDh9$X&gl-B5m$*qfuuudg7sU z^N%OZ|N1t~Km2Z+Z)fvQvG@PSHqAe3n@7dF_Wr+#FzC0;18slP?AZh{z#OzjpM(^| znTft1PxoCgt(*4#2Qv5nDep&(*)$J+1zhWs)RwDDnu$BheV< zN>TZd9icMW8PV0TvpiKnrK4XZD$7Mt8O@8GE#PU}va@fAoFwc_QoA|iQqwi6L4VP`v#j=ZiQJZ*dF$g?vq9Vt8euWu&oEc%n;A!B~WeDF=P z_jOoj{u-d{P&7(_8zQ{@dxVDoY+Glcy_RmCF72jR{)wYz-#5)(KKLSJ`F6l|!|b_a z_PwTs(f@!(_e3X;81r(f{1>zw^`-pb*UW>06yvGtyEh@IRUo%TlZW;HrWieY_|wtL zz>Vm4zz|!(UIm@rrbZKOejPpSqVh(F>BI6+m z&y%yg+Wa4g6LPsPPrM)HiGTE$5}b%APdx6(_+Km@j{1(6((540PaQO+D{!U$5wyFY z;MwRuqM*zgPaHDkhB-yhyknk?egITIDJPA$PX^@4)6ym|C>kc2r{)Mcf0TD3ntTuF z{DFYZfBrp&=?9QPwIG-KF#Udn>F58tg=v_Aej1dz^>?f><3*5H=wok2BZp!0c+uKC zprpNuLKreOp`*cOTG~8a+8fmqQ{=}%1MjY*?OZf|lJF;&`=W6{f(hSWqVX?%(ZU}> zWZnS$efTYNvh5vM9Lh&vxA+r~yFJmLFVT?k`}lo;L^JAu989njzdYDEehZ(EzUz=V z)C!A*zkQ%J`g?4{y?21`siESOl^@Q-40!&q>2*~G<;TDw^J)H=HJ$u(UYmFsA4c5| z-!Tv0F~`rFkKZxfcg)jw%wy-xKGfkubB8!`_%++T8Qa+hqw^RYsQDe!1?tbcV-2&n zfyf!WbXZ#CgFCi(H;Z8fSv^%c6kRAr?GHz0hxpNb|9nS)&;X9-Q7` zbH&e^hflD@;xCuh(HbhdBr?b`rIt0 z5o`64*UgDLP{i@@+4H6k{ta}U!$xNx{0jTj8vVBz^ZwT8XCo|k^mih=vVXgH2#=$v zn}14dfUc1iN_r1O<44RRaJKLZI^?6jj7i4b@jHn4L)~Z2n_hW`pBuyH-bT;%zG5CM zy~OYieD&}CslHl#L8aT8iP;=KweMB)LHLa@S>J6Qp21MYFxk=hqot*|^eC72$%oCJ zZ(?PJAXf0DFRS&P_prJ@`ig0N#XNG!9Kw%ij(KUi2N(?=L!y<`;4QU~BY6McL1t zMrh?15|sU+9rLN3nfR|0W#u9$d*8%=Z_MgD-o!urZ!OBg^uy4B$A8O22z2=XLk9Lj zt(JH-am}|a(Lisl^9XNeocr$I77*ngsnW)2sDB71c+y$c-)nEv_Y)N5avv0xd)(8O z((ias{DF58?qR)6AIx~05Y$5N6NMOI7}m>FHM@T*@iLX)!mf?9mq|!G>@<8W-^;Y` zw{4&cyiAYXHv3+;w_r+{+vxUI4yB{Om+w0oU0{^WQ);4UJ8iv9pV*N^ zwR3ONtHcSpc$`T5uHSi)n)f#k-eZvFKm9|G69!S2@G6CSrzMJ=q#$s#lMLYZ2{){n8=EFoTnDqE($?SRlRT!JT#0Q9g#`W-R^AXyh zo_Ga+VU>F1ygB?$ILHPLnUB9>;#bV0khH#umk`l!QRS06mSo(1sqG!JUm~i=MG!>r z<$gT#`yv?uQV}ftiA9usMTyRe-(y1iw+KCQ5x|i|4d20p_B$jbp8G)l|B=e#rh^|? z7JmeCFtP>oW6M)S3f1wl{)Mk6ik_j({?y@*M4d<4{zdddsQS=b5ShQ!_DuA0@i4A` zfqL0%rSFZSvyZg>p49jdYD6D90)xwAtc07vL)f+FE8jxp51=ybGT0j(MNgt~^aa+? zM)?*R#dgw8Y$rV`6`@^6@UGa3psU(6?DH|V1V*sb>qqR%H)6yuA|OB6jk>ub9ND>f z=kF3n4f~gAHE~X32m^DT%m>J@$=^7+vXE5n@^oL-LQh3Hy^!iJ^(vO z!-Y2Ww**XTjsAY|C^}T8vm4B$82xY&CYOh!<7%#7*bzP7xpMhW2v%}Yu)?z4-vNkicHH~=en{W-&<8A7 zA?)V=1z2H|+k?n1(DDZcA-cPshZpHbU_cj@4wj6)@D(AZ_s|-s83_6Af55<$?>SxC z&v4q0J-kH=|K%1fe0s+%{M;5TH22{lM4S9`(EWXX2rt+(h*)TQ1DxPvHe93|Q8KMk z{52chHjn5C?A){A$dSEu8~OBB_AZsKokG;`xni5**+1G5p6y(2`gP)&T<*(F??<=T zD^GgzO@%>1hM$FLW`Ke6*!dQ5Tdn_LcB|*-t2C?MdONB-8h!ks=xw~&@mp}C0g&O} z0(eKWkE%@cS_B~o;*Z$rp#}(C?~aaH$fxsbUu)ZyRAs#x1RC;Hy(>#V6>$APE4E1O ziH7%^hkp)#%Lkxcp#42RfO>Er|Gh{@!pmtm^EK|GereLQ|Y;_#XQ=!Xg-8}{YTK>pKuOkP#>W2YsDik`C)y;s$2gW zm;?&(^U$zlWVz)SoGT}l%B#?T@5}HB<>C2T$bl zv@lUrEA!*DGCxi$^W(HKKTa$20(-$=V$wzERt4Mvd2gQ+^w_6P_>aQ zW?Ls=kt{gO>0_9QMUwc)7BioTW!F2L1D}aSa;=>EjK`X&?P=gm@#|3ui~SIWzq6(1 za_4Ely7V9C(#u8WT-P6MM`<7s#n%Ht>6b8rC8p?UArO?9qQ?*jWc?*yPKoPZVxAuH zo$g@$OH8;^V#1vgm%hX#JS8rD%T`NYV*VXj`VyC3^xG0M@yM!6M&S}O@#HOiiRpMs zOvh8AN>XAvp3*Py@@u%r(wAgACbvbFm^euC&z6`ts6^&hV&b4uvh;8+;gn5arHL((&Ej~SBNcn6r_Q+Y^&cOP&7LfewmZw=u5M+Z0uiX!Mi zcqu`qD?ToS!@Ng?;~dvtE}n3FyJ&{+^ZSIuveeEQOE|FpZEcm?=8>{_>~*rj{orqZ z({YgEdjts61O&NwK#&Fbc0t2^K(K(Y=>XwD0K%_qn%$6`M$Dmin8y&@fMUeLj)1`V z1GW~h{}Td%TsZrX%5Y0?xG!K^F+y~!?YV*IRyz=?U>u^9_h*|+>hXD(eI$i~7%GKd_QHKxh;bBS{QR1pAgfY2LUDC5N z2xF2vMvjjWXw!tLbYXg-)gRm;nw%WmVKq5|EA_X`nH{a7bWz`uGdo(Dz*o=gpr)k9 zb>yAYL5X?GLplN#FH!9C4(Sk`P7dh^bUJGC_r9ll2O6m!)bigw=fzF)yJpW7vwze2 z;E~J)9uGF|thanPw**uJV)d=~0+8jRH{L+C5Hu~^rs$%P?*(3dtFT`-vLYK;s3;9-Kyotu;8YKzWM>-z_oo za7j!_#0b^1#56^WC^7T!PShk(B)z@E+dwjwj|45m=pkp<+{M&EwAkLtp}L$%BZ(`2 z2WX-8iT39`S|GoXfw=(de1j$kXzXO9gxxj-%Wm=st`A+&$nZO@4b#?IF%P^$ZS4U- z_1DdwVe=r^@1$5MOxuJxaDyAJkyTtW4>UGS{F?4EdfRjWxL`#%%Ri^Z#sED|L9OLA zSS1i;4rF|qIw5E=5a7^B9(4gb1pw{P)8@b(OP~)3f!=%4?Ek6(;EO}(ZBY}^JpCeQ z_ay%`JaCd`|2{^(GfmOa?T}`ByXzMSpmGra<%;XM12jD8kpm(x5Jtod>qAex8CK}F zm|?vIu1HYTB-!uI_$n4SO@p0*LxJ!F7}dl;_}9$a`#FRp7q(FAcWHc;g9gOJu)W%9WRk3WR7@&XAH! z%=azsm<|oR zAT-D&Q4jP0hWm=*j(8}I@ZTDX(XR&3@PXe~i#k{XOp280V1|YT0f&Md{<1j;PJ~S% z0FN)5UAN2uD@2Jf^VE9;CqF|tk&EyP0TwUSe7k_f3oqNU3YA;Ds6x#>T+ZGdl%O$eIu)l#r4&>m9cAc*PmOQZ>+74%vT4ys@DoH4xpNQd~R{> z`q_kzZX*Lv2BOD7q4A!+|prYUdx})mBrO7jjQ)MFBLQf=$KmpfB+1dr~UN& z)w%U&Wg2G2FN{xI951{$w74|4xzZS3UctC;*6?cc;3{Q51>KWa@y5M&ZTTiTlwIVo zSpY5;ls#CyGCp@LrxV-GaMuRMe50U%sH-}-w%S;}vbnao!CzR+#r27aGrG8E$7kZf zN7X{dQSFq#V4=CCnq}M zlN*hNXRfSn%KImmCPxP2lS`{>CogXC!-_1fqkL}T*6RG#^|e(D`egP~8^jdX*xEWqfr=Q>l0KMUncKMP z9^+d9YD_I(x!On}#|qz+%jW9F@|D%ag&2KkTH$TitaoUUT@bve&w<+1mjS+ohM?;8 z&5f&d5(n+Z*_E}+b1SJX2=)W<*C*GOH-NPZV~f|;)^Ax_S6?Cdk~#xK^f?)W#q8?( z`r7)~;>O0@mBllgOG_Xeg!?ZvV@%VCLYVC*JsB7sofxcwVB&j9n(><-T+uOIUtg4A zU0=Iy$8&LQeSzN_Sv|Ad*vLUsrH&R^vq-b;l=iu=5Sa$&=C3Y}0_|$ebeeuRJaAsr`5Vp*P z>Y=JdZE~f_xyIE|VakOUt2b5fnj8fFHaE1TU^aEZPXA6s05|`Fwv^#Ghbj7(9l^FZ z+eMJ9PO$@m7ERsW_U#@e6GZs>0--Vc?Qrob9ay}<&Gq%g)yCv}&Qx#vsa`9X;akbj zhu0S^%7V(yZ!WA6rGeZVi_>cpH6hx-)A7X{iz1k%S~Qw8igVMzp!>8tCD zbBgN@nlcNuolM$E`S(WQ;_}K0c+&9PMq@@e{kBsDp=a{Kwa;NzH!t69T06S7qEnbE zkuUkFd+4!>Wc8ci2#QxEgiT1dZT~A}FHwU9X6aCXQg);q>b2aF=3~uV4Fo?IYr=Ky zwPc|>IS;6@pqHigmxa&QMfkO--PGf4Av578*>UEx9}#Hl^+rOx0jKM86PG^+NzUSN zK-BMw-QjpEy-i?Ny?l?WpU@Y}cCJf?kJc0%Kf9LS*wo>4~*K0YvBuk$;>>y5e9t4o!RK7CqwAVzN43AFo!2YW1;+p=$fu z(#qVGV{v=C`}JfzQ6I!qO&^ONdnPW&pZ`1_+FDP>XrMklHaR>pT0Is&^Gxc#P#>(> z-agmsJ8@>@Y<+ZOd|ErQgF1zJZ4e_oTbsU6dp-_t(0{)~b6gQj(apFpbY`?(ove+F zPK={R!5!xmjm^raX9s8M&w<5`uvT6vn#by5(uUCGdfZc}UmQF)fLX;?heyV%Lvcaw z$418En)`*9uB+o;bqU~aj**;s7nuVd&;sx;PO>C@ooh5Gd11?h?XE#(7K zXJwt)L;Kso!05!;5iFjAgnp@?nQCb-Q-&@M)W-N;`}``TYxc_)bj0oT`V5G8eRSYV zb+kS?g^|wI>nCEZiB~PG)y_>!O=DI%3QLXp9Mu%qK=4@b0X-haEXlNWccS#{=*XGD zI##_pH9i2GnjV;%9vMGdKL;Gd$415`N2_Di@#%qSt_EHR)^&buW2vVL%gQN0E49G^ zAPHeVTcDrkqk5%Wug*@Qf1Q0Ot$k)@V5mNQX|k$1Fhus$Hx}2SwpV)i;muW$3PlUF zQ^0WQSYO*-EaM9b1W7SpD5?z#(x-4Zu5@$)0~KY*s-J3(J#dJLL12Vq$sw{IPhxFjb$pAQa&G z@A*}_z}EW&Ztme$rA%S*TFFqeojhKYhU z0CQ)3Zsn!9TN_Z4RzQDIoS+1N2Cpp7!~BI=wJHotm2z)~5D&aQ zf(0Q2qcbERK?&D9QAus~!zF5m23O8*D8gPETk z8L_AV_AzvJYG6ztySW(swiF1EjNvL6%RI~q4A~D=PF4E)dpj##{oS42y&avE-k$Dq zN2Q~uv#-0e+*$7L#oglZuKv!BVPIB)2s1iz_S|$Wu7Ju3bjS!RC?2aj2w{i7JL|rC za)&VhZ_msCcBkv$XwSukS>ZmU6aq;--QAt8T@ZpXz!-R{uF>?&nVNo~KFW!ns)7f% zlPsN}8Ex%Y%-^y64!hQo?ivw`-_x1H9d9sSGeC&?@IY<4(vz%0dJUGAX0Qz4NHd&- zF=EC!f)~06jxFG)l%)M+Po=Aa&^0zNeU7AYP-v+16~tZo`NR{#f}VH+nvEZ3yTc2T zT5#vVfoT$2odM3pi8!etY;*QZt$RC`xy^I!x|LgC00C1}>KT0Q`r1nzBH(@)m@qws zUU|F(8li7c*Ouz_V`*dp&AC=lK}HsffP=}w>*1{sMXqI<5SK~R{AXU819jM3-P~AQ zs6$nkj&{`t2L{ho zx#R*R@^bDId1q=GvWI{%Ka$*GELRpA^B4hahc99bm)90rjAn;rrsN=RGn zQf<0AR)^F)a0a}f4vfHJH)ZU!XY%NmnTjC}V=a zH#*tVMVTL~Rw*Qi&{gj5N%7hO1S%OZa5Z-86_nW)J1BT1_4*-d2GAkm31}rmG%E(P zElePVWzqn$@7g(tix)?RKsf=1;08eh6eMIO(*v>)cYU)N&E~J3*a51&w7%R}%)vD+ zPmpa5cBlm3PQ+xDv?SR;blsHIfF)V!o_<|b$6?tuIQb6g@`jOpvE^XFHaPM_LGo*Doy+ia44(` zVx@An;EsSS!qJ&a)79F=fk`X4V6Z?ostHa~=E3&3S?OZt+?S6pJD*iKrB{X4M| zC4jbXwfXUhgboeYM$mWdy?R~ZKT8o5ufv-A*^U=J75_PO(62m=CL($`j)R)+r_cle zwDD0Cd$B;d{_0u-UeTAV074m#GCC|RN>B1dX~GQv#A^P4@BUK|e0w^&bAiJZE}j%1 zflg+nRagy#->1exK}x7S<@JeC^x6JEtuy-FP+!5PD}9~aUHv_k?%w|XN=K#A-BT`i z_jY$xAbofB_4apl_TbZ%GlbCP4Opi@tJ-gdjLwzDC@u&;8aWH?xhCI+P{QA-PKrY2 zm^2v>j001^Wf~4@^$LJt3`~VmmTl15i-?n;Fz2d3Oldr)9Ds_EQ}9(z;cp6{PP1pH zCgXPgn5j+0&psP>60v5Wii*;mh%c(KDD>26H3|)L=!BXcCZGYAZ}wq@(l(^gNg9v9 z)YOJ_1~Ux^$ zPk=0W8jr;m(pd|+Djr&BZl=Fj|8ZFRre?+mV*-P_5zwSvW?JME0S_QYs-#eVZUEc^ z3Swe9lW_=D_O>D#OX{=~yqGdqsPG_?gvER};k9#B;9??vJ~uQ{8=ye?iSI6d0!?8m zpn?kwf*eTrL!vX+M*tnw!Fo@*ySv}A)t4w<`CExLWM=s zuIxlwP=R2y-ne!hQUo9y-K4eHaRZO(c;KOv^k0o?zHI*Tdc#@5$s9=WZpP4>X@`&n zODH`lM|#z;oLG?%4hYzIjRe^8cUb&Rb@p^r$}oR)Rw^Ck{?6`lPY3?j+lvM3?5Om1 zcl4C8NVI<7Ei6HG7NU3=o`3?ub6^G&T$`Ag8WhDQ7!Ykq>^w!8kX(c_?=0+ht03S} zh0EZ%I&`TT%%6~Uq4(rIlqi50n{yIZ=}WMPobHI<^-gy2|e@763u^e12$niwCw1n-J8PYWoh z|Kt>6acYjEg+*w1gcJtzG7Z@oNHabGiZ(5Z4|z5G9i()17}_R4i-y6JCoW>_{sv8` zDSp1czrM7xcoSyo`rM7VF(=+KOZU$P5@fMDjQ2F8ab z#?T;od2wR;oN&U6WIT=&(u81_(1JDT&^QdV@V{8u@JtQTB88BIND3JOQp1`xjkqOn zeA>t{M3^t zLP7L_z2&~HUf8-jJ9{d9m7Xq8|HYG)o>9)$Wro$js)VqyIm}9D2Nwm-PX2ikvc=Mp zss)?Jh`JqJ$6~rW-P3YepX<}U>_dHwho?`+IS=_*AEMo35{?zu&oC&<`A?Q%N1`TF zpPQdYuw(n&i8VES1%>F&+=+PYM7%-sf)WhJ5%a`62x<}*Woy#A(o}?YtnmtVoS5l%d=QS%|D%9cvB< zP>}Kr;ocKjF*g#8QA+O8=OnlULMW%)0RwkJ=H(NUJ;n zF}O!#Y8~*-H&Qlqkb<-g*9d;2eyTHS^GZ2lAXpMiSglDNChhl~7mx#>66DlbO*wq9 zW0q>o^aMOa=*0LaCS&|8mneOkW794qmfaY(#kq!CNlQwt-~-JDcJ!e@StK-I8LX7B zaTSi$I01XBypTW(Z-gubIaC%2ulb0IREf?XOoxe#CzBWyY$MGA(t>ss7{$8mbq#M7 zEUYYcb~M(mDyQ2-ZvkS>p~Tt2a4%!n!2O=5DFudl=>-WFCfJfJrF%{;2G})CIs~Emwaei9a0!I*U^C850dkf61O+Am=8!KAP5?t^ z#wOeO?j|hh?a41ryF4fArKWpGryGjh1gs@~8NzZM0I8w18)G(6X7z+x^)o>3=@{x5 z6+qPtI0G^x8;cFlTkKsyLBIt&`ewlg`MpW&1DB7xn}Vp0HCYf44j2to^q->KHZnL3 zn|yWrxtf^Owt6V7tNQ}24NR-cJuE<%0yu%7rNJv3jXGjO;LEo^PBm`SHx{uw!0}wK zmx`%e$JqeokWYdVsT?k|X>af{Bk2UHA=eK=39MhNN+<*8H5P4_?K4I%$KXQ%qTv8b zkg$6i2GT>I+AqvLp|(RATC4Yt#@8k%rUr)SPOVPCt3zW#3uqj=sQ74n zh-8M5iZ9^=c4{oIpI8ljn<2Bcu}xYRUMRXiDVz zgpj58>5#9kV+ALK2Woy{lIBW4X8icm_yJ$40C$ITvtsnNVEP;ggLS^5V_uvU3Ymnztx*%Xke5ng&Xe!ZpvJpDsxYy8%#E+CfJ0_*8Kxd-{2&2#b zCK*u5&<G>h!sZAub{whqiHF!J1t+qvrUF^mLZfY2BcqXqdLoTH(aD>NK$!+m@6 zS+kp^S&ZI?N5);J`eEnj?&<38>#B5g^>lZ2G3c)ce#VZzp1uw^mU>|Yfzv{@aV7Mj z#G7UsG}8mwF%}vm$*csV(ugNou^$dS5D@Sr<|M}op7U7rjwUJ!Ezona?LA#!1V3X)5!65X)A@Uu8Go2mK-3HgLU57b1t`Ac)qj>_cOhYr1f-~)^`yLCu zE*j^JHI5O!$EX(k)TkCrPY`%NHZxt-*hfa*FU_rNEDEvn@GIyJ;)*H7%*p5yZz5nH zBoaum)e|g(hSh=Y2Eo-D*F>}dRXXWnM3tsOeFAjOjKe}YWc4K~wlYto*ooDUVM3tF z?wPK*mDjCstq}~6T3i$=8brM-nc!m8;uScBuHQpADkLDHHDB{!9T~<>b5fa1S+>O_LR0mxYjgAKYjp-bB2`2CHQn}1O)Tdzoca)3Vp})#*iZo|;4>qY_nkL#_3Gnns7bD|Umd9vuk=yYX7Ux&gN1t1uztFNoO(gPZoon5aw?d1~%dv(?~7Zx)ix zM8dGSJiy$9#dQiT_P1y(Z^Eh3V0R3~TfA-UwSi_Ktuz-0-x{2{Gzn25`L^79gD}2p zRex*c4FXd#8n#AmaaUFnxpg8=e&3>OoP9&}ZEDyxY|4y9$>T3nox8Rm;lLpP5|k{= zc=&=2$artDhKquEwmOdBFd8)Id*vRjN&zlQvIYlKtKflg`{R!bO8cg;NEVrNw_|F5 z6c9&uNMWkRKBHDy&}*5x;2vF9?@_V=4)sIfl~Wzu%TkE0qY5yh{*@6(!+8(zg%`zZ zEOM^OR*X?jEQ07MC)*(~NdTU5sz(J|pAW0BHft@`s&MTDp5gpY{w!107FEfllR57S^0ll^R z7TU#4>=k}*7qYyXtTrVp24H{)YmP7ogm8@6ZHkhoB2HVYL)~qIb0#`QboSrvzbba= zbPbWpvY9|QpSnnu!0wBMx?@$gAZnzpFw9f zkd@9Bq6ZRU#b5;*Y;t0OLpL+)B(gT5vnaf)EWdKUHgE$N3oDg#nY*0s`)FvA{4bPLLpLYADjkZeJ-RI&j7x|a8jTq-q~DTzNym++w%mGX@r#kc{)k;w*^^6$%#o97(oV5pT@=z2vP0C&Jzsx#S(~i3o8D} zn58r@uf%+G0<-C<2w**AL!n;ab*@CTqK=wX&vPE)3omW1$Ay_B@Gx%oKk45_*d{&P z;@cCr!$bzA!%8ojum~(hO}QvV!2X7D?5(*Am?iKfu`r;DF{!6tF4~NQBtag;mOKOy z%>-hi_wmTC_KV!Lr&W$&yCf#OIyE&up_-KyUqSp5@zweeR5nVF482GZ)xpUbhK9mU zV7Z&yhQ+&rrTIhyows##EOQKrIHTI5Tq4QHmRmB_wxfZ@4D; z3T*H{+P}n2*sx&Ast|m{S`wHKg~bF`6>?~Qn{2Vr35zY|2^0V?EkRx71}SMUvmr}q zM0)F%)Pq-Q78V*e6n~q702P=;(w7yHO-_DyId?hfN{JfeOj}&@km-leZ?h}hQ%fQ%DCx!LFmOl!7Cj87mH1^+ zFUs~+LDH0Gx(s&WT+`(|-?X!`QGm5e8}MpZlrjAK{?Y}af%*j7jPb_q4Qwh!$7g(+ zfrN}Evc22E70S%;D?(<@NX)7dV${(0r{Fhwjys|;ITD{7^7y{l+DK};5{s4y?zBCJ zP@~$A73J~*ia6M<9~aJ5XJ;nk#}NSE+11_C+t)vEW)R`h@T>^EN!*VTUzy$$85fX& zac#2!*DwFz4bdtxahpAH=*|*fKGwu~1R#%9Pxg1y5GX2-fS2xw4E$XJnjj-d7?k=C zP)rL$U{gGWAi)mog6~BbKX;OKbs`$S7x8NdZ0+mm?}z!kf~diMFx8v7T>~PQctpGh z20{x=jFQ78qt&2~@Y63}fgLDBTSXnZhUxC2^6Y|bo4cH6>kDjwlk0O=uFYZFp11f7 zjAL&;EI(u;=fq|&*q`I|&O$m-Q&<(e3Xmr;)!jly!wdvMYr_J(lWwOhh{_cR_&^=o z=_`FbJ(YSV+J$HX7*h=#4xmwCe9c9vrl~+e@FGZ)txaQO6jRaBSlNbj*>5o6V7ycu zcOl}xP*>TXV!kFIafUH8OzLUj1)2i}9t_I`{ChG|yGVL~FI%#bp&>b74gR9ThAU|l z$#xu5^0zW6;4uLwk=afcr8))z7Z(8JQ`kriiBj6MJxY}dTgEau$qJ1iosYHbaK{7x z)0Tl}NszJF;;>w&PPf=i`>5CFgWYsZzkwF%Z6B zMNn^(PKag#m##X1hzVsxcO&%RRh7e$RH5o)U4P&!oE-R0HLMTf`q~CV!l>pZ zL8;#BM{t;!N$tE7qLvr;L;oG;mwVqNl@o~`KbXl@lasbaJ^!hScAKi0f7p(0SWtE` zV}m(8aBEB_LpfnU7(#xP5PN-*Miy#>x(i%~ty3clSJzfoky*I?`W(`u!le_c+x8ho zS-4#9M4zS>^a(6$Y_rZnx`{1@l9-E37bgIyDHPFNh&eu2B z7ctgw26Tz^K}NXZIIUsRaXe2Q2?W$T9YWw41mBlTo^pGJ4N9LsbxRdUM9OBCsnAWw9B)E%p@i)VHw-|;SqymHp;}r53 z`~faat0+8R;EA$g&Ban1iXhY}l60x%Z$qqBtFz^Fs4`Xy6-m7-h@x9Z;w40_wpUgt z_ji_$Aw;BO#ryxT=LY7`F^$9R=U(-2PBPuxDRG)hNr>(!qGT4=ufYvSdyB9cH6E~E&1w;_ z%}0$m(-P7X_H;dN4U?*9Vn}M8bb2Qm&yXtB1FUdhqiDf75yp?KUjTA3ri~hh7Q=*>sN^DK1wtSyh`feK7*Yf56hMhU5<@;GW&jdu z))L;U8sxXkk}%zMk_a;?;Fd62rWS zSs?kc?|x=`s1;yLV1k2px#x&u%s7U5b#j}i!~#ZQVUcAME6cI;A_~l@H%?LCo6Kw| zv*^`2B4o7l`vpaMaRMqN^C0a52Is+qmJxn4w<@`euL?T^YI<*n3$je&8n=8D(zYP; zCm3S0fh_MiY1`l+cbH?la2dT)C{1KO8Ek@;iLURqJc&g#n%x!8#`Ll6aobN~J4 z<<~`|yr}9=dbt877PZ*Xj-8q!qhhrB;-clS(8A@9$`ICeUr(QF~+ zny8@~P4s;MwGDq?ib~%9tD9FAnFMD=jd?%}8@C7=&=e1u|H#d=3Smg?n%y-(%msb- z(T*`i)eH+%X=_V>BSQPg2q zWI|BE4~ubF;&$K^B)`SzCa6Mb(BcZHAl9D`Dj2 zM3r!$A)8gEm@C#VDsPG2!p;1U)wd#=19}O0P52i63NqFvF+xOS3X=;aO6+i!&QK^% zqQ(zzXf64!{wyFb<~i(O=9=XCFv%^NWwgLF?JLOWavYHybaOF!>0y9uL-UC`Tc2d# z5t5UR*#T`s&N=XRyl*u+q-!3S#g=K-cBW>b)DYZ5I}Lwlf-M=Q&H2Kb=}s@r{bcug zflPFiD_!NT(YuB%ki^(jIa+bYfq$u9XkJ3bs>j@sOhc=NOoFJM6hGuph^= zK=|PZ0SK+w8nEl?EHeMNV+%0bRC>6N9$7m$`Tn*5U2go$Fy$^GYLGCSHb~<8+jALk z4&6oX*N+OAXr#0soEddH$?yxUiE}30o06pJ*!dv{vU zK#ck5L`bp7Nj&|+9o{BY%H+~^!Fvw#MzP7%XB~5n1q7a9Nktg4aRUyjVd)!~#8CpE z`3XqF>LhXbAO&QhG0jk6L25aapQwGrhqd_aio^$-1)A-+8?@o+iKKt0@{0kAkg2;7 zo5x1M0{JVFR7^rlfW3l2YD^NEj-Q>_wK_U*iAFiyKIXFrxv_^^4*clJh9n%G(kCsR z_ms+AX&XdF_%*~cHdY@U$BxTWOx4oWTj^uAyZ$buf$v9nCs#z=(XooE)-|oT0OIkS zfVkj-yTdFwS*#uIZHeK)ALO=1(xZ*~Wt@;l>X28~-DT`i z>*(vnzKDKoTI=lT#(p*Yhd_fqY+G~br8v*T#MyRk#A`~K3|rAgjvKCC(dtQ#^>m75 zjNKchV8_uL?0r$nD46eBaM{}-ktSb1wxi}`PMJYju!=td5|@PPVdgxgv3mm`;sDN6 zDiv@FP(`S1hG2lVizowKj9O6W+4MZ038F*Qu-WLGUn7(o!X(o$EQHFX_BNG<+Sfq; zY=D{wk=#B3$|J^TGLv!{nNs1E4g$cj8@jg#dex+NQOk}CL6tmRPt7VKdjpq1;;gwY zR{qqilBp)EQ=MQSj5_z0P7q`W16f;IN;4iJgQL}ssGuHlE&*ceIQI6%cA7w4Bz;g0 zdx9XTja)$`qHGe!60Sz~cEZON50S8?(vw80S~E#1Vass+;uM8a0@c}BXv=3tlAz~G z8TsR3H?@J08m(B4929c*UclRnqtDmdd=2 zdkHou0)_7-sVq|AH4;-}We=x~bQfGDG0Vx>IH;#FFzW0~O#!jO z1>ZP+IWUM^1XIjC$-y#3o_E(Zl}H_sfk1_nIZ78bf7ALqCTaeMdz)8O5?iStH4qiX zmeG+5JcHnj*y3_RZ-~xMGDnM*^%BJnCs`r&C8kBEnJdQCBaq{8U@8KsE`bnRr!hvH zn7{pRjFNc?v5e4vMa8$eaK;y>F&8Wpqz0(DxE%D6h#i!OY)QFrxNo1yc~X_p~0sR@UB@~Cvwx$goQ1jnJ1m9bF< zJ<)9yoMN4Gx8nqYj};k-K7s39K*xte2-x^rK`V}HaA2J0cLAxAJABPgk+nCFhYA#6 zi$3Hv?*3P(2)EJWMe1VC%qNLhY=5CT!4{^OT9f#FoV_N&<)as%Bq4IlLzBmU0VTG| zy|^x!CAgfm*5;(S$!weqqpYlLF1zt{aC8cJ<5L@7GxIMxnJ*KvLei=eCSgHv$yd=Q zjG(ztKtY05QrMR&Da=x%A_iNzo<}=5T4fI)lGPOpOveSNY+||*AvpvX7?P1M2c$z{ zzI>;xG-f%1>;t_AE9K{THeSX^S!-T{T(7-2M8>gI0)zAYQNUL02Prx~flL)(#ZwcS zn?AV5YZRQrq&#BMM!9!J4^?SrMx;DO2AqOl8jWUDnC7A;85aFPvu+s9^Bju+PI z;S%fKOiCaL|Md1ZJ;O0RIppWmWvxb;xG+JKkw8xD(9bZQB5WJrV~_N~I?KqRYYUNe zH>l1PlTjf?3mT)0h&DHdHi3(QQ6>Q$jAtW!G+CJP3emJv<)};#fN2DT>)PC{%Zu0+ zCPzc%MRvJIV(J$bmjo^otu@68ZW{SmaeaDfJu5gG(p3ovW?r9z>kbsin@{JBSQ?4 zyiy}P;9azr=mCt4uXGO~Q#|q+BPVS7w!gw)`JivE}5A)v#zA{;wOA1!*8r7gMtffIF)kTajFyHk$v4rApsLknYIyZ zx5qRA1t<^);BX52?4?#$XCDp##7mtt{Pg135ww6*$w-6`y9!P|5!(}xZ2aNB)1(MNEc4r@lwhRyQsG@MyW_~x2^BhEqY{!rix&N^Z5S&!al}VEfr)OSQ;01f z5_%+?F-S|T?4g5BEXvl)&GpB(ZTdf(D3VzZ3Zn+Q0l>m|^w2{;e^)58V51mctJif_l^6Iul!sdG0|ihy1YbIoe# z2V^r1kIqDbXnIx~`{6>BRcXb_k1+tqdTx)8Pcc?OdpmW1u`xl0|+ z->zPB0`YWBR}aA`+2+EEQf;fG;=ZD*mj6}Ovl+@cS~Qn83azCzU3-|7V+Ck*2yqir zf?u+noN%&sp0&B?1Hzo5QR0JEcun#K+BgpC+A3p9tO0VaAz2r)@LgV5TG`atHD}7m zMBgDt_XMm}dddU<5xArt9OpJ~Dv>(S>_{VGKDEE49GD1C8w`$<$mR(%xm3s&Cb;)} z!gWa~Witwc34t4ss{U+Tj&U>=KCsocyPWbueHf>1&%iTcnHo$GiQ8M`X(#!F&bE7q zs2>(Wu@tK*GD{%j*GeFwYRmwM|L>F~#a%M=U8?X;)Drukr4iavTFhIs_Z z>_l7_ZJI|#4Qi5)OjNIk_l{{=={2;$j=|^%1*CEcXDGn^)rq5u`n&r2v1t-#ONBNP zq=cS9sM-iJPeJUnfJIqYfJ=LxSIX!jIhc*JJi<8Fg5r7mjT2x69{z(;j7^mcFKZ*E zlgyVDG+g2W;zYU#?@mq)U;_w4=VX5sr1fc1NP*HRQK<5gpM&_zDW>pnCr1rJ3$^Md z(s|+dP}mY^PlT)*y1<=V#rvU$1tk3H-cYyAroMbpRw3NTtE`9$N ze)D%miBXfOHlUL*A0B>6s%J*0pp4-n{AnWrM2C~Ugq~*moA1eyeexQF1|+ZwX?|i6 zL5H?U1!tckBoBFhM1RGS5q{i6GniAbI4A2ty4DscdQ_^Zj-RWKRQi|~3uLp3@O2(* zWjE~uL41~Z&USJqqaVY8V zvF}q(9DYPdIXhIl*TrvtWPgMt$V##VWv8EF7nU`zYz=uzU19&CW8M zHQTAge_%OyCdHeu20hy={X{@1tqln#ri;`UI5p*cfpT^v?LFJDW2GHp4Yj@293atrPgkm>Tb_*B5fi9p;qo?+$9 z5JhqtvN9ybVy>PO*Voq?Ywz;t?{PSq&{Z++GH2At8KkvVc9SV%ry0Yn0k!bQTyF@sJxFoj4tIX0b&9Z;f6 z+-^FIK~Cq;;0s5@!ITnehsG?ZNjMODi6}M5!Z5`4B48LKq}*Tb02RmSqDZg~Od!0FCxyo>eL+cZqELYKV};~wEgWrh4mK=K zUvRRKNFYqvg6>JEo)5f|xyqEGBOa5fGEt@V1dO0%7qmIO0C5ao(NltGm4iBvzDMi2 zt(bDGd(^wk&DF>djT=*@JQF^4h|!c6jt;Ga>&X^i@x%LZlHxUo5+GXK;ad zFpC4e;#4BBXTx~_tPX4v%_;Tluxeu>#?VYIk9@n9gD}4Ba=lZlQU$H4NN6mtY!+gnjIGo8QqiYyn{2K zTQn3q8wLn&j%6b(MH^(5R;Cq%Lexl~c%fmc!nr|2rmCOuA`Q38+7Nbl2rBT0 z9FJ`YWSfa8O!2cg8h|f|4?%0RQyjwVaQ8CJJRR*2m6n!oo|q>oBGpu%C<>6;@s4VW;m0VkeZ*`OZClr*;Ci112R1rAb# znRg?+9#GziGu_b^39G#ITy=2k7;_mA4M(iXeZVPttRX2}9URiSxrAvzDpKF{wz24B zZK8aGN+ojLyO-!VJCg81lzr4jtbkbQ`IiMA@+}-R z+{od=YP}TOduoe=9TK$@KOi5@qL=$&Wym&#m=}JnGO1faDMqz4!27e%M3B(8lh-m0)?;yBXeBeY6Lcz z1^XyzY@_lGy5*E(vClHWsPc6D5?HhuH{5YV{ua%H4}{*7R2mgMv~d~HMUBmM<`0pv z1`C$HFX(AW440L4a)FvT!Q7Awv0pCdtUvMj=sI8zo7>!uetOau1UK?nc`*R{r{0SV zqNr0`1M!_i7Ap%nI6chW%X6e>fE1Frd^yN;k?c1i)3P=w%x>1`fey-AuvYqXKcAtI zL1#8wBdU9LCLSf7Trst|e!3e}hEj(voxvdu402+?Gv$Nv39MeCraSH$#z5c8QDP!4 zA>&pcgjz|ga1j}os0QfHMxYuVWK2GAHZ86$wBHDos-(Ny7)Ux5rXzwV)+AVUQ zFJ@4L<4xk8p~FaAE7tg!uvm>Cw;OrddbT+5sBf5dR9!g< zIZKGCXNnmQwd2Z=Y?Jdhwx~ka4|Ot{uHgHjV3k=3tfK`RVT%5YlcXQWI;i^ER&-BQ zX*4V{I{_oj4B_0}VZvbsd2=eEpeb{@SKTb|+K*2petSJJ$`2e6oCB9)rgUN+wm!~3n>!TC=a)(Zb=K7v4dMc&j6korwu}ZJ}?_1 z7uF>#$T=K$4IXhepq^Hu5V1y$2m;?3y&6EH_Mp+~*@3}JvbbS^)%O4{vPEvJdG7_z zWFTQoQ&tIER?N49S1Q#?PIA>pzK7x35NeXI_%2MEw?sWai>SpLB4B-a+;;KW} zjJ=xyW(Wv@&N~G~R18sYOf)-?qy*x!UG6;RldU3cxFKe2fRdETliZB1)Vzr}w*qj2 z>WE-b{Mr@F^M5e-N98ir&f0AqgG^E!F%Y@blyt;i2?gpO^2$^_nYf(+`>?A9=}?q^U3Q>KxJ}Y%Z@fmRH5HL-{u-(=Zc!-eRhpDa!?Nnd`Y; z{sW9A$`vpfGk~>MtygpXrWBUE2l58^&g8{9e72w|i3XG{L?7}LD0^5T6f8$*l7zgv z7hEYE!8BwH!bHW0#&e7i9ny4+QD=ug#c0W$Vk8N+$Od2(hqgnb08|k*Bx>(+&6{Eo zt1|*Rv2RMz-3^=?HM+%~8HSF!M-o5kSw1WW+rR$z2F{SU6@-~2#>Qtk!1m?T>PFBq>Dp5$z=#3Oxv8x6hk@1 z!OmGnx10gcc3p{C5(LQ6q>Ip!-L{|^-KjQRWEN2gsTSKXNxs_e6>5BOu0pSk)$V}cPnifvP2WP);l{M53|f9Ic~Az$H#`d9JhL4 z6=Hkf7iWkM{`l>r%^NE0K2tn!dn#;N0h>5<;>>wOKr6!MJ`vLJ|FQQS@KqFD`*(Kl z-V2Ddgx*3AB_tvA-h1yV5JCzGq>(~L>Ai#Wsv<~7r1vHwsDLOU7DNRUd%>>%=b7EP zEkRLy-;eM6hhKQk?A+PiDQC`}nK^UD(uJh8jGWA55A%&g2_tyIE&7hPjwJ27l>t5` zsW_tW*|g?vXmfH7A1-M(s?OiwWFxw!_hh3x4{qZXHoKHwR_?riVUuFb5X?cdbLxid z9~tMCJa#CwM^>A4HLYV|+KS|EhpNh*Dut9(rtki_sFDWX?bc3uI?oDluP;h}w)e1# zDZRRd@0t-W! zD$>J;OS)NpLikHS#{0b8f*=9vvQsa-K+Yt2?gQv%sbcueU0-sBT+T&;IjV*CuqI_> zi0zL<23o<|P6m3=&pfW3#rRpd-SP+{X(TvbvVVMdDksIPuQ{re1|cp-!IYj@Zo)jP zX%eaYbhvh0kb9&KUag()Ihm3zDL(j6Y&BC`U67}4*zAk*84+mF6$4ON6+UrR6H1;4 zl{Wu(|LVG!()#3jx4p9BvK&a7e$E2iESZV>YPJ3X&qi31Zg074wR9;DC+w`#46(>L z96+1G1HBBQLJd5aFIgbzjpgp;Q5NMU7n@aJrgl5mw2YoiZGrPx<`)I^?N$yv=7r@7 zWX1t}<|$ADFjeN0lpej54))DWgb_T$-t=J+*ZKW?!es#@F5BN zX^-PiOWPnX1Db`_g0t7EVO2u{f)diw6Qdgpj82SBiHpQ#L`r0A12{elg1`tG7#0u| zlNym2mj;`v1{};{z6enfsUs32V^fk6lhRXz(i4YaupE>YffJAUBcx;G;2=(h!qzw` zB`7rw2?x4 zeaxl3qVY(66FoH_URx#rwhrxkV*(C|ByYHOS0biOr}l6~O#$fA3n5@VPJB|M5cFx} zldT|ow>x`kcalrRmYMd9#ly|77spJdQU#v{IOdfTI^+V5mo(kW(&e-zr z@;zE1v1(TBDN!@&Tu4=)mP0aNcX4;hd#K+Xudz1(~y<}A|F%Hmc6^tnv)IUt`4)~ zNOJ`WZ*KU^w6kHpw58?h(0wy?3At0v9mPp@>5Sh~vBVo)pLWx+lvf@srPrH@q{W3C z!ga$TfUTt02#7dt{6j{0EGagt%T*64vNMTSN~O2?l)3p%vJL$KWx_XZq2;l_12TbXSNhugSM@MBGGkg9dn-CUrYGwhSdiRCP z_mQP9%hpt9dbm_8yf))$oyd%|a>o+0WN^+8q=!ewMsUq421_bYYyhuSCSPVTr+70s z$}N6-Nb--PMbU@G8r=2Ca?nzPXv1WpJJQ0qq&< zpHbln5vhZrN{9An&l!Gc!d))FZNe?5yiLEu=1RTKDy-+4k2ecSRoR-Jb$1Sm4VUNC zOs3N5C?LefMJ2e#_FiwYBCTmN_aqs2>&d&6Iah#7foF-$VPnQQ43h^k85*d4CYD*b zntotkw^Z}E#3T>t;8pqNcnHOoLcuzNvJ>{=Q0hyMc$PS{uBALg2Uj(O#=84LJ(dPw zEa|c0?%C|-DFgCo6mxw*&U0d0E%L|5D+3vB3-rpewa`coq$@bJamecmH@K}h*r=8q zl#6>!F$};q9te6=qwI=wJBQ44>)eFf z`&9@zf*O+sbtjEGmjm3FGPUFaH5yPCxW}t+ThpqZa@IXw$<)Xt!_O{<0;bM}Y*2k* z1*yHEcqv8*@LSvrbq^;d*f^|C^2%(I(>%vZt}n`2CF|rKvzC#2k2T=XTI$OJ<4Vj} zbu>5Gxr@jxMRJJkjxuMSrG|>n7H15RKhJMsjgXq;NQipZlDFrDRk_k@G5jUS_UK_c zF~%jHg^c18YI)@d~1MOvur7I^UR;^o2d;ud0-)H2WMR0?c1snjJrOp5{r? z^+bSooTpf%X9{bw*4<8=Ih4A+Yn94(#O3}3daV0N@51>0L33+^(Rp`zj`ngCC1dF+ zs!D+J79}gr!=YFuvX4%0wPvYX}a8`GwqGT5B! z_Dtqsy^g$koV6pX&~@~V>T8*d;+wCM%qoi!?Y> zZ*7_CsCtrfdnzwjbAcX=v$e2L=a!1Ha1pT47%6uZD$6Z18r`4qsBSPRK7SNIu+geo zNB(P3r)Kk(UR#ztWj7?8JXSk^lT>QAi`x3-rF47m)$kNtaxTFoxGY87Yn#4XxVxJb zTMei{!M#LgX7(Px%8?7TY}dz=ry~Ybg0}^9X1K@1YOD-YO&c1Hg9FTZuo{TUzBP7n z_h5Vzq-~mHG;Hfysla$tpQ(wN)BqPt}`#><lPsInJ$&ZYWnnY_2^mJ+ zU^wYDN8>)kL%E})eMJm5tzz!wUU%$UhgGN@`+v1WL)}UpiD&N7Hgy277lenkxWZ{| zG`^hORx?GJ|AhQP`cPPz0*lLE-v6L|gQYsR#(YX=Y??6Z)_sWws1clLWg4d1*Pd;N6BA$epII}LsvDWqUUG~Lejd#``zNq!%t^I zDr8z9Ftg8;M>>4BmAV?>-_a``u zK^fE@ACI9)CUfOHa@Cv_@Q^N)u2Q&Ij*Yy(5pk)B5sBVYKQhW~FC{-#uAu=2lv4RO z^*Y)1$TCbVx^-{Y?NQl9Jg%8@&Xs#^yb7&a9gZ35U{5>t9>CrbekC#Z!;xyRF~w6nAiwHrJ1Xkky7t^(%`Z%X`ob`vzA$nVh}!UDW<<@Rs)09_pTk1n znwK2hq^Fx{WidP>WD2QHVNuO=+oEPuWZKMs!b{T=rx=9>(yd_FzWHLRouJWGSpLvhD6NF-a-# zFo|JuN=!l$4|9pAG9a@qW2FQ8b4+a|#xh%#fC1)qeDrXR6|7NDn@%mU;6icemYd-L zHLHe(gw+VGk@;pkOXf!h)o3Ywn|V~0oRq}FJfd9lT53j%jObxF@OSoATZ_qVpM;tD zL&5WDtLXIwfYA(=chI3&i#W=_bH+f$nmrATWvZ|~V?55WcxZork;X0Lz32NqA0Y*O zraz+st+B8aZ7%yIxdReQwvfbaI>OCM0H=FgSGWsVl=FT*^QqEE)WZ(m#|qx9)L9Ck zRP~hp@)wfM+Cm)Sxq+A;5t<2r$IMwY$z2etRKGklKUW`eIrufJ6>35TKbCH-n2d_9 zid=h4u!V7Hf}G{^3hWie@@Pt0CQfYK@wip3`(X*CD@;AYr3FYBI#CB~u%XTk(?nNz zghzNJ=a-<$HE+|cNmJ;jo)=P2V}{%tynVBXS9ktPdlIVP)IxnsGJJ+t(8#I1%f@4I zWV2dlQu-JXaEFl`7rN7V*eKj}l^!d7k6`8!=P{Ea>m2>6-J`OlDM;MxB=u=?^l$A1 zlxyVoep;#bGOXpymfujTdzi+2JPVIs0d@t{KV5-IpBys6rIomr;;57G!ptgJ$zuu> z-}|uUe65^;;ncpA&X(^`7#v!bFP;%HMN3&V{D8?2m_oWF10Tt3S;wr%>22>lRIa5Z zF00|i+cH7p_}kzb%p)HAN5@n>^Ls#G&nn>^Np0=CR>a~mlZ#;d8?@N%+M zN50wA{>@cc&+&j2gIsWd%Pr7SW0O+SeD~UNR@~dAnl~ew2Mov=J+oP?(Sx_$t$Px~ zgNNmMwX_q#?xygL^oS#Q&BuPhT+iei;-hO;_c|>Ta?jf$*yHICxN_^v){hl2?ZqKlhW$aah6iD>^Pog*|Cv zA`ZZ?PAPE-EpEZ8*m@o3&!p7Nh%$1wd&NOJ=*|meRue(4L4dEB zqxTTO<5#QX=6aitjRRx}rV9Si2unIA;K!8KC3R|ml{mAn2;6L5S?*wAhv4K0m!5Kte?u8l(wo8iRH zo-Nw5RS+wEhe+#Q?h5m0PWLm8JHGpOC6Gu z7GuUlC8e2x)X0c^CPzm{*%H$e!Xx3xFeO3;apY=j zTB4$Pst|EYJ}2%$$l&WfHT{Af1y?U=$9?(_kwEn-4tN zd=YvWmgP}Rcyn?rEZS^Icv)PctP?YaFO7;zPoZ!CM4T%6fGvc2da0tE@iIp z5a>WrFa}SIi5qB3N{&u+-C)*~O3zBL#l)ehkylq5v({A_D_a9`d}t!JKyeQ`l48vT zY!NBXL9~jZZeV>xpe5m-3e?7P4x*BVAq#QCqvKO;u+a@478eE9;xF;hF=;X?Hd?kJ z<08y^B(fqSl9O%e$x%4n2urQZXhQt(@Z|Kg@VJDCfjHMJ3C~N!E94F7$>bN@kpPom za1!~;y4h+FIo~Wx!IurQr68lxDOMpEC0m=d9g&uVGD=RRxtR@Rj!wbiP?};wcZ6yx zI5uvU6rY5K4vz&Nx)Yd{>b_Q-Vned!GE>d8QF_LBr9n?h1jodshNCjr zos#2S!oqwaBEebUhOg%3p+NE&2|jfjs4kAiH$voM(9 zugTFV$+oCC7?wpq07j z;={w!Z0Nui+p@yUd)XzhevM6dY#i)JNMJ7^Ym?=YWn-dGqKCxbA;`Y#PDp<=BU7QE z{35x6H2w4zdExjP^ShPk6V3jXz>hAcl5Rdlfzm z2H>dJcq~(5g(W2veP?J~Dk@G+U!p|mvRptjDbt&u(DVUF58jW89?tzWN*{%aMMD#H zN!RYKu+*UBScvtK5S;))YDgRtnf2VO@#} zGd$m!3bVAIhC6(U4{!{ZCM{(dxp8F`VRaJ+1>7CrN+(AN?4Ue;#(YdTw-vBxR7T|? zdT?ecwL)|K)s-+nibULoZzv5@Q8br{mTkZY=q;?=w75vBA+~{u5Rpe^H3)nzFL@LBZCFZN8Wa;Lrep&{J*CnXOq-Rc;DM2m zL7`zmF|BIV=o+W4%zZ>w3hWySuUS0^Z%rQ_1m{J;@o@vx_Mw#E2n20as|LINQd1%` zrjW^aYze<#RU@HNxY8q#=`DYr!j%DZ@dPYZ+1wFQ2;<{GBeT@1P-(5LPAOJWuP8J^ zhoTHOxdSYXW9bI4g43cRvHdF=O@J$=>e?LvFU1$vF_DRBtmqgV z0SHm)DIpz&ACl_%=3*S`ia${QN8ENH1`5rTm zGEqu8zUcB{&;k%+s@JXnM<;v&-WHzbzJVPUS6Jpn@esggIBs}&QZgf>6NkoON1S8? zc}J94bdDQ1AV3@nkF@v@;V$=OWKs%$G#^SwGPpn;Mh3;A|3-789afeQH!LD9O*+K0 z!puy%EF0%&6A>#XYZHUa{(x)jZ0E30h3Gg5VHOJBYY;*q&{cx)pLa`{1ZyS)>0%-= zNX;iRrBs0sfC!5l2tn;xD}3Nk*&#OEM|6UIbu;gF2U4 z4i8Vj2aAIrR)F~frV-2wntsXq~Oiwy6pN`WH;$eXxn=6Ko;OUGO2{N@Y^T&js z)VPGGps47`cr+&%6wxv9X+f;EpoHkO*d%gOOmYyWE!cSw!e&hMM5rn8so;iqsHH(_ zjg61s>*S9Jqo*S;=&A@y1`AbrLmkCiVXNx7SP8~Jrwoc30p5&b56JMFdQdg%W{gbu zp0ua|NlEOoXbz}N2;fLLzQfg15X)R3Dl(linA0O^(djAGAO|x(RM&L;VIWB!M9KPzk$**y;}F0jL_X)Z0th*-i%+*Qri`C+9wPJx{?0A@!R|~bgv)mM4Sh0;;V9so z#)vWno$EmD&Rs;^S;){jPGfq#V_~CU;~*p{T*P@wCb=UqzAzK!E$SRp1V6qkia9SK zVAo$2#q|PKmYvbX5arwf)US&Y&iCcznBus+V=w9a6al+F#Tj7ak9iewMN1j^2Tekp zT|bq*G%%lL6wc{~Uy77*7Awz3jRfieC7g44Wt3f26qkWzomDIFNfpaEV;OM10Mu)j zcU~tQR>8=x#UoJ2RpEI8k;?8|1fq|(2RaWk@OVW-8`zo887nFo+K6Zd$BW8_Hnuy0 z#vIWj3d!c89N+MMeYvP&_^)lp-!_RAkKwoNBFJg4h(MXD&hnsky=<^is8bk1&ZhEu zrwB0$^r(y^B|@FEWmKtZhPL@3NMe8cD-tC!+&H1L+$H0<7Lz%b)DlGFoygxgQU^I6cD?9 z+^FYV!p9e~isjrOlkIeV(i^c8ve!oUBda6Ok4IhRFGb-q4P&x z>Vb_6ZQ41+7>x~WUJd!0icJhH+eH3asi~pOe2byV%?xd}3{`3F%!WF#>%lDyzphUq z z9hV>A()kubcHO_TQDXUO#Fg%1IEs)Jot^bpL|5n4nh3ji_BO9hh;ByV{p^aWKRa{O z!qr;Q-FcdU@;#g%g4&(+YU8R)PrZ0A!+-NdS(2rQvK!Bd?WOqI)1tTY7-Q^qN476Q z5pdS3!yocDbe5~j%OOPF?-3*5hnE>D@ThZvj4J$?a~A^cyq)4zDXSs%&7zOtKllcs z3iLJnBlqB5bZEVw^9?2|XmJRt_G3QH4hf3C;`@p9_7OLHNn8>_j9W~+lS=F$;{(5C zIHUxza}u#Os>ZOLA4yyzQ}%pG##|zN5HHK8b&)Zz$?(_ceTMBZ zbQZ&QZacAQCz%p5*Ra+4gxL2Ou@FjU*uvTo8%-m&0@E6{JZ*?~b`Z6}#LGR11tH`O z+r%}*=5G<5>xg-tC%*kPu?L#fuq}U$SgbYi$KJ#;w}}JS5_8J8^g6?Exqig3gTzvC z#FoLtnqXMGcRX?6qr}ZG5X%lCo_&*89U{%JefbIT3t9FGn;Bl&k$42X!mxFeW!x<5 z|MoV*Ti;497Jl zj&DX>(4VNw8i=mS@Nt>jT#)UkTUm;-7a0CwJ#ou&;(PJL7VU|*yAvy4BbKU7j7%an zmUa780>k;+5tr{IUc`sZu&tLov$QM2U1go@l>F02zUyiEwB}3sYi>v&!*=i+Vweoa z$hT|^VNB20h}WMac3nbD_b2|AMr?}?XV@;ud+R4MTvvv-wPd(gTVhaUVu^ahsq=|n zw;=AnM0`g+zmhD=#T3S@mYndaOsUB_Ss;J?F_ORbxJaB-kT~!w;;^#Be)EXicMu}Cl_{f#GXA~o#3encTZ$d{X$W=&b*!Xw0HGFP8fXSh-=;>o0xXe}Dy9`fwjCdy>vHT(8(6hw;`H4qmJ%r1gzy3O7CXOcV zJxP3dIWgfP@flegx1`)?`7~o9hsiV}i1VbxXeg!Dpb*B)ko6ECbNGxbU6{!svTrV3 z!!&~{5C=^rYI}*JWt;Xo&+xgc#EbIRmX9#JRkp>JR~Y_Qa^3B=3_nwmxJI_%g{llU zYDPS=k62QcqPOJg&);E;ChPpC%M7oaM4Y&mIB){7+sDL;Er=gJL%b#VbNxYvYo`%o z3lR6q8ko_8;fR^UCOe7mO(ovQO`I;vp7TwH^T;QZm8E!O24mhmL7Xl7W@vqe_ejoJ z7|w8kbmGVBh@VI&A9?3-!%^4q>LJX9(v1A;>J!FZR%Uq3;by&Lz<2Uyvc9ebd zQ`tJlBwsD~fbl~lZ}geS@TkSaQssz83KG}$B7PN1Y}JnV_$M;{J!0oY#EFuhZ!BYY zq2v~0Jj2CgojiGl;hb+1yUBO8kvtPB(|;}7ZlkQF_|;4^cs}t>Sr4TKe&D#X$;#NT9z+OA@FljNL=BN;9>jF|H>aeixJ+7V)|F~mKxL>Ct`{F#(L z!=GSyrR*ckB(H93!9UPLjW7`;y_VvUI&9-`Y;Gmsxh)>*p z7?`vKy}^;Zn0;bM+u^{J(RqQXA3clsp|!!wj$!@k0*Chn8Y6ziy~fBn!+@i1EJgei z^T`ooMS+#LI3~X8jH^@P)p58wFIH~A)dkVM4zAu3Q_$NSSHx08I^Gsb_}f)cax}<0 zVjrLKu1M{Q->!+0b3i^2wwoZ=#UD5D+lS&Bu8fbwAJ2h&EP8#7-)@QJ#Xvq0H_+J~ zpNfy!=WmN(KI}8`{Z^3A#R4$2$tX={BGnTQJq{cz+Cok`#)&YJ@nXsnkO|_2#vl_# zlT#p*L@}_ZW3pI^T60Vh&#~#Iidtw{$29RJD{;C=;cqj<6JUSGOtAoc#4$_s><%(p z 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 diff --git a/miniRT.h b/miniRT.h index 85931dc..a359e57 100644 --- a/miniRT.h +++ b/miniRT.h @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/13 20:02:36 by yantoine #+# #+# */ -/* Updated: 2025/02/19 16:48:27 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:57:35 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,8 +69,8 @@ typedef struct s_plane typedef struct s_cylinder { t_vec3 center; - t_vec3 axis; // Axe normalisé - float radius; // Demi-diamètre + t_vec3 axis; + float radius; float height; t_vec3 color; } t_cylinder; @@ -90,29 +90,29 @@ typedef struct s_ambient typedef struct s_hit { - float t; - t_vec3 normal; - t_vec3 color; + float t; + t_vec3 normal; + t_vec3 color; } t_hit; -typedef struct s_hit_info { - t_vec3 point; - t_vec3 normal; - t_vec3 color; -} t_hit_info; - +typedef struct s_hit_info +{ + t_vec3 point; + t_vec3 normal; + t_vec3 color; +} t_hit_info; typedef struct s_camera { - t_vec3 camPos; - t_vec3 camDir; + t_vec3 cam_pos; + t_vec3 cam_dir; t_vec3 right; t_vec3 up; float rot_speed; float move_speed; float fov; - float yaw; // vue de gauche a droite - float pitch; // vue de haut en bas en radians + float yaw; + float pitch; } t_camera; typedef struct s_scene @@ -167,11 +167,11 @@ typedef struct s_calc float b; float c; float disc; - float sqrtDisc; + float sqrt_disc; float t0; float t1; float t; - t_vec3 hitPoint; + t_vec3 hit_point; t_vec3 d; t_vec3 v; float d_dot_v; @@ -198,12 +198,12 @@ typedef struct s_calc t_ray ray; t_vec3 ray_dir; t_vec3 color; - t_light light; - t_vec3 l; - float diff; - t_vec3 view_dir; - t_vec3 half_dir; - float spec; + t_light light; + t_vec3 l; + float diff; + t_vec3 view_dir; + t_vec3 half_dir; + float spec; } t_calc; @@ -245,17 +245,18 @@ float intersect_sphere(t_ray ray, t_sphere s, t_vec3 *hitNormal); bool is_in_shadow(t_vec3 hitPoint, t_vec3 lightPos, t_scene scene); bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor, t_scene scene); -t_vec3 calc_lighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor, - t_scene scene); +t_vec3 calc_lighting(t_vec3 hitPoint, t_vec3 hitNormal, + t_vec3 objColor, t_scene scene); t_vec3 trace(t_ray ray, t_scene scene); // Interesction utils cylindre -int init_intersection(t_ray ray, t_cylinder cy, t_calc *calc); -void compute_side_intersection(t_cylinder cy, t_calc *calc); -void compute_cap_intersection(t_ray ray, t_cylinder cy, t_calc *calc); -float select_final_intersection(t_calc *calc); -void compute_hit_normal(t_ray ray, t_cylinder cy, t_calc *calc, - t_vec3 *hitNormal); +int init_intersection(t_ray ray, t_cylinder cy, t_calc *calc); +void compute_side_intersection(t_cylinder cy, t_calc *calc); +void compute_cap_intersection(t_ray ray, t_cylinder cy, + t_calc *calc); +float select_final_intersection(t_calc *calc); +void compute_hit_normal(t_ray ray, t_cylinder cy, t_calc *calc, + t_vec3 *hitNormal); // Peripherique int key_press(int keycode, t_app *app); diff --git a/parsing_camera.c b/parsing_camera.c index 5a396a3..308303a 100644 --- a/parsing_camera.c +++ b/parsing_camera.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/14 20:02:29 by yantoine #+# #+# */ -/* Updated: 2025/02/19 16:49:01 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:58:31 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,11 +18,11 @@ t_scene parsing_camera(t_scene scene) tokens = get_tokens_secure(scene, scene.num_camera, MAX_CAMERA, 4); scene.token_if_exit = tokens; - scene.camera.camPos = parse_vector(tokens[1], scene); - scene.camera.camDir = parse_vector_normalize(tokens[2], scene); + scene.camera.cam_pos = parse_vector(tokens[1], scene); + scene.camera.cam_dir = parse_vector_normalize(tokens[2], scene); scene.camera.fov = ft_atof(tokens[3]); - scene.camera.yaw = atan2f(scene.camera.camDir.x, -scene.camera.camDir.z); - scene.camera.pitch = asinf(scene.camera.camDir.y); + scene.camera.yaw = atan2f(scene.camera.cam_dir.x, -scene.camera.cam_dir.z); + scene.camera.pitch = asinf(scene.camera.cam_dir.y); ft_free_array(tokens); scene.num_camera++; return (scene); diff --git a/parsing_cylinder_utils.c b/parsing_cylinder_utils.c index aec4311..6996643 100644 --- a/parsing_cylinder_utils.c +++ b/parsing_cylinder_utils.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/17 18:54:45 by yantoine #+# #+# */ -/* Updated: 2025/02/18 20:43:49 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:59:10 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,9 +29,9 @@ int init_intersection(t_ray ray, t_cylinder cy, t_calc *calc) calc->disc = calc->b * calc->b - 4 * calc->a * calc->c; if (calc->disc < 0) return (-1); - calc->sqrtDisc = sqrtf(calc->disc); - calc->t0 = (-calc->b - calc->sqrtDisc) / (2 * calc->a); - calc->t1 = (-calc->b + calc->sqrtDisc) / (2 * calc->a); + calc->sqrt_disc = sqrtf(calc->disc); + calc->t0 = (-calc->b - calc->sqrt_disc) / (2 * calc->a); + calc->t1 = (-calc->b + calc->sqrt_disc) / (2 * calc->a); return (0); } @@ -109,8 +109,8 @@ float select_final_intersection(t_calc *calc) void compute_hit_normal(t_ray ray, t_cylinder cy, t_calc *calc, t_vec3 *hitNormal) { - calc->hitPoint = vec3_add(ray.origin, vec3_scale(calc->d, calc->t_final)); - calc->cp = vec3_sub(calc->hitPoint, cy.center); + calc->hit_point = vec3_add(ray.origin, vec3_scale(calc->d, calc->t_final)); + calc->cp = vec3_sub(calc->hit_point, cy.center); calc->proj = vec3_dot(calc->cp, calc->v); if (fabs(calc->proj) < cy.height / 2.0f - 1e-3f) { diff --git a/parsing_sphere.c b/parsing_sphere.c index 46d8526..e09b5cf 100644 --- a/parsing_sphere.c +++ b/parsing_sphere.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/15 19:46:16 by yantoine #+# #+# */ -/* Updated: 2025/02/19 16:50:19 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:59:34 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,16 +37,16 @@ float intersect_sphere(t_ray ray, t_sphere s, t_vec3 *hitNormal) calc.disc = calc.b * calc.b - 4 * calc.a * calc.c; if (calc.disc < 0) return (-1); - calc.sqrtDisc = sqrtf(calc.disc); - calc.t0 = (-calc.b - calc.sqrtDisc) / (2 * calc.a); - calc.t1 = (-calc.b + calc.sqrtDisc) / (2 * calc.a); + calc.sqrt_disc = sqrtf(calc.disc); + calc.t0 = (-calc.b - calc.sqrt_disc) / (2 * calc.a); + calc.t1 = (-calc.b + calc.sqrt_disc) / (2 * calc.a); if (calc.t0 > 1e-3f) calc.t = calc.t0; else calc.t = calc.t1; if (calc.t < 1e-3f) return (-1); - calc.hitPoint = vec3_add(ray.origin, vec3_scale(ray.dir, calc.t)); - *hitNormal = vec3_normalize(vec3_sub(calc.hitPoint, s.center)); + calc.hit_point = vec3_add(ray.origin, vec3_scale(ray.dir, calc.t)); + *hitNormal = vec3_normalize(vec3_sub(calc.hit_point, s.center)); return (calc.t); } diff --git a/render.c b/render.c index 4ca0788..eda5921 100644 --- a/render.c +++ b/render.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/17 19:24:30 by yantoine #+# #+# */ -/* Updated: 2025/02/17 23:08:52 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:59:45 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,11 +25,11 @@ static void render_pixel(t_app *app, int x, int y) calc.scale = tanf((app->scene.camera.fov * 0.5f) * (M_PI / 180.0f)); calc.screen_x = (2 * calc.ndc_x - 1) * calc.aspect * calc.scale; calc.screen_y = (1 - 2 * calc.ndc_y) * calc.scale; - calc.ray_dir = vec3_add(app->scene.camera.camDir, + calc.ray_dir = vec3_add(app->scene.camera.cam_dir, vec3_add(vec3_scale(app->scene.camera.right, calc.screen_x), vec3_scale(app->scene.camera.up, calc.screen_y))); calc.ray_dir = vec3_normalize(calc.ray_dir); - calc.ray.origin = app->scene.camera.camPos; + calc.ray.origin = app->scene.camera.cam_pos; calc.ray.dir = calc.ray_dir; calc.color = trace(calc.ray, app->scene); r = (unsigned char)(fminf(calc.color.x, 1.0f) * 255); diff --git a/tags b/tags index 686118f..73d68ae 100644 --- a/tags +++ b/tags @@ -272,7 +272,7 @@ all minilibx-linux/test/Makefile.mk /^all: $(NAME)$/;" t ambient miniRT.h /^ t_ambient ambient;$/;" m struct:s_scene typeref:typename:t_ambient aspect miniRT.h /^ float aspect;$/;" m struct:s_calc typeref:typename:float at_exit minilibx-linux/test/run_tests.sh /^at_exit() {$/;" f -axis miniRT.h /^ t_vec3 axis; \/\/ Axe normalisé$/;" m struct:s_cylinder typeref:typename:t_vec3 +axis miniRT.h /^ t_vec3 axis;$/;" m struct:s_cylinder typeref:typename:t_vec3 b miniRT.h /^ float b;$/;" m struct:s_calc typeref:typename:float base libft/libft.h /^ int base;$/;" m struct:s_info typeref:typename:int better_ray_tracer README.md /^# better_ray_tracer/;" c @@ -286,8 +286,8 @@ brightness miniRT.h /^ float brightness;$/;" m struct:s_light typeref:typename: c miniRT.h /^ float c;$/;" m struct:s_calc typeref:typename:float calc_light_contribution trace.c /^static t_vec3 calc_light_contribution(t_hit_info hit, t_light light,$/;" f typeref:typename:t_vec3 file: calc_lighting trace.c /^t_vec3 calc_lighting(t_vec3 hit_point, t_vec3 hit_normal, t_vec3 obj_color,$/;" f typeref:typename:t_vec3 -camDir miniRT.h /^ t_vec3 camDir;$/;" m struct:s_camera typeref:typename:t_vec3 -camPos miniRT.h /^ t_vec3 camPos;$/;" m struct:s_camera typeref:typename:t_vec3 +cam_dir miniRT.h /^ t_vec3 cam_dir;$/;" m struct:s_camera typeref:typename:t_vec3 +cam_pos miniRT.h /^ t_vec3 cam_pos;$/;" m struct:s_camera typeref:typename:t_vec3 camera miniRT.h /^ t_camera camera;$/;" m struct:s_scene typeref:typename:t_camera center miniRT.h /^ t_vec3 center;$/;" m struct:s_cylinder typeref:typename:t_vec3 center miniRT.h /^ t_vec3 center;$/;" m struct:s_sphere typeref:typename:t_vec3 @@ -310,11 +310,11 @@ col minilibx-linux/mlx_int.h /^ int col;$/;" m struct:s_xpm_col typeref:typenam color miniRT.h /^ t_vec3 color;$/;" m struct:s_ambient typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_calc typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_cylinder typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_hit typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_hit_info typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_light typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_plane typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_sphere typeref:typename:t_vec3 -color miniRT.h /^ t_vec3 color;$/;" m struct:s_hit typeref:typename:t_vec3 -color miniRT.h /^ t_vec3 color;$/;" m struct:s_hit_info typeref:typename:t_vec3 color minilibx-linux/mlx_int.h /^ int color;$/;" m struct:s_col_name typeref:typename:int color_map_1 minilibx-linux/test/main.c /^int color_map_1(void *win,int w,int h)$/;" f typeref:typename:int color_map_2 minilibx-linux/test/main.c /^int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type)$/;" f typeref:typename:int @@ -336,7 +336,7 @@ data3 minilibx-linux/test/main.c /^char *data3;$/;" v typeref:typename:char * data4 minilibx-linux/test/main.c /^char *data4;$/;" v typeref:typename:char * decrgb minilibx-linux/mlx_int.h /^ int decrgb[6];$/;" m struct:s_xvar typeref:typename:int[6] depth minilibx-linux/mlx_int.h /^ int depth;$/;" m struct:s_xvar typeref:typename:int -diff miniRT.h /^ float diff;$/;" m struct:s_calc typeref:typename:float +diff miniRT.h /^ float diff;$/;" m struct:s_calc typeref:typename:float dir miniRT.h /^ t_vec3 dir;$/;" m struct:s_ray typeref:typename:t_vec3 disc miniRT.h /^ float disc;$/;" m struct:s_calc typeref:typename:float display minilibx-linux/mlx_int.h /^ Display *display;$/;" m struct:s_xvar typeref:typename:Display * @@ -424,10 +424,10 @@ gnl_ft_strchr libft/gnl_utils.c /^char *gnl_ft_strchr(char *s, int c)$/;" f type gnl_ft_strjoin libft/gnl_utils.c /^char *gnl_ft_strjoin(char *s1, char *s2)$/;" f typeref:typename:char * gnl_ft_strlen libft/gnl_utils.c /^size_t gnl_ft_strlen(char *s)$/;" f typeref:typename:size_t gnl_read_fd libft/gnl.c /^char *gnl_read_fd(int fd, char *str)$/;" f typeref:typename:char * -half_dir miniRT.h /^ t_vec3 half_dir;$/;" m struct:s_calc typeref:typename:t_vec3 +half_dir miniRT.h /^ t_vec3 half_dir;$/;" m struct:s_calc typeref:typename:t_vec3 height miniRT.h /^ float height;$/;" m struct:s_cylinder typeref:typename:float height minilibx-linux/mlx_int.h /^ int height;$/;" m struct:s_img typeref:typename:int -hitPoint miniRT.h /^ t_vec3 hitPoint;$/;" m struct:s_calc typeref:typename:t_vec3 +hit_point miniRT.h /^ t_vec3 hit_point;$/;" m struct:s_calc typeref:typename:t_vec3 hook minilibx-linux/mlx_int.h /^ int (*hook)();$/;" m struct:s_event_list typeref:typename:int (*)() hooks minilibx-linux/mlx_int.h /^ t_event_list hooks[MLX_MAX_EVENT];$/;" m struct:s_win_list typeref:typename:t_event_list[] i libft/libft.h /^ size_t i;$/;" m struct:s_info typeref:typename:size_t @@ -463,9 +463,9 @@ key_w miniRT.h /^ int key_w;$/;" m struct:s_app typeref:typename:int key_win1 minilibx-linux/test/main.c /^int key_win1(int key,void *p)$/;" f typeref:typename:int key_win2 minilibx-linux/test/main.c /^int key_win2(int key,void *p)$/;" f typeref:typename:int key_win3 minilibx-linux/test/main.c /^int key_win3(int key,void *p)$/;" f typeref:typename:int -l miniRT.h /^ t_vec3 l;$/;" m struct:s_calc typeref:typename:t_vec3 +l miniRT.h /^ t_vec3 l;$/;" m struct:s_calc typeref:typename:t_vec3 len_word libft/ft_split.c /^static size_t len_word(char *s, char c, size_t start)$/;" f typeref:typename:size_t file: -light miniRT.h /^ t_light light;$/;" m struct:s_calc typeref:typename:t_light +light miniRT.h /^ t_light light;$/;" m struct:s_calc typeref:typename:t_light lights miniRT.h /^ t_light lights[MAX_LIGHTS];$/;" m struct:s_scene typeref:typename:t_light[] line_if_exit miniRT.h /^ char *line_if_exit;$/;" m struct:s_scene typeref:typename:char * load_config config.c /^t_scene load_config(const char *filename)$/;" f typeref:typename:t_scene @@ -569,9 +569,9 @@ name minilibx-linux/mlx_int.h /^ int name;$/;" m struct:s_xpm_col typeref:typen ndc_x miniRT.h /^ float ndc_x;$/;" m struct:s_calc typeref:typename:float ndc_y miniRT.h /^ float ndc_y;$/;" m struct:s_calc typeref:typename:float next minilibx-linux/mlx_int.h /^ struct s_win_list *next;$/;" m struct:s_win_list typeref:struct:s_win_list * +normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit typeref:typename:t_vec3 +normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit_info typeref:typename:t_vec3 normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_plane typeref:typename:t_vec3 -normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit typeref:typename:t_vec3 -normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit_info typeref:typename:t_vec3 num_ambient miniRT.h /^ int num_ambient;$/;" m struct:s_scene typeref:typename:int num_camera miniRT.h /^ int num_camera;$/;" m struct:s_scene typeref:typename:int num_cylinders miniRT.h /^ int num_cylinders;$/;" m struct:s_scene typeref:typename:int @@ -596,12 +596,12 @@ parsing_line config.c /^static inline t_scene parsing_line(char *line, t_scene s parsing_plane parsing_plane.c /^t_scene parsing_plane(t_scene scene)$/;" f typeref:typename:t_scene parsing_sphere parsing_sphere.c /^t_scene parsing_sphere(t_scene scene)$/;" f typeref:typename:t_scene partie_entiere libft/ft_strtod.c /^static int partie_entiere(double *entier, char *string, int i, double *sign)$/;" f typeref:typename:int file: -pitch miniRT.h /^ float pitch; \/\/ vue de haut en bas en radians$/;" m struct:s_camera typeref:typename:float +pitch miniRT.h /^ float pitch;$/;" m struct:s_camera typeref:typename:float pix minilibx-linux/mlx_int.h /^ Pixmap pix;$/;" m struct:s_img typeref:typename:Pixmap pixels miniRT.h /^ int *pixels;$/;" m struct:s_app typeref:typename:int * planes miniRT.h /^ t_plane planes[MAX_PLANES];$/;" m struct:s_scene typeref:typename:t_plane[] +point miniRT.h /^ t_vec3 point;$/;" m struct:s_hit_info typeref:typename:t_vec3 point miniRT.h /^ t_vec3 point;$/;" m struct:s_plane typeref:typename:t_vec3 -point miniRT.h /^ t_vec3 point;$/;" m struct:s_hit_info typeref:typename:t_vec3 pos miniRT.h /^ t_vec3 pos;$/;" m struct:s_light typeref:typename:t_vec3 print_cylinder print_next.c /^void print_cylinder(t_cylinder cyl)$/;" f typeref:typename:void print_plane print_next.c /^void print_plane(t_plane plane)$/;" f typeref:typename:void @@ -614,8 +614,8 @@ proj miniRT.h /^ float proj;$/;" m struct:s_calc typeref:typename:float pshm_format minilibx-linux/mlx_int.h /^ int pshm_format;$/;" m struct:s_xvar typeref:typename:int putnbr_b libft/printf_fd.c /^static int putnbr_b(t_lu n, char *str, int numdig, t_info *info)$/;" f typeref:typename:int file: putstr libft/printf_fd.c /^static int putstr(char *str, char c, int is_char, t_info *info)$/;" f typeref:typename:int file: +radius miniRT.h /^ float radius;$/;" m struct:s_cylinder typeref:typename:float radius miniRT.h /^ float radius;$/;" m struct:s_sphere typeref:typename:float -radius miniRT.h /^ float radius; \/\/ Demi-diamètre$/;" m struct:s_cylinder typeref:typename:float range_is_ok parsing_color.c /^static inline int range_is_ok(char **token_color)$/;" f typeref:typename:int file: range_is_ok parsing_vector.c /^static inline int range_is_ok(char **token_vector)$/;" f typeref:typename:int file: ratio miniRT.h /^ float ratio;$/;" m struct:s_ambient typeref:typename:float @@ -639,7 +639,7 @@ s_col_name minilibx-linux/mlx_int.h /^struct s_col_name$/;" s s_cylinder miniRT.h /^typedef struct s_cylinder$/;" s s_event_list minilibx-linux/mlx_int.h /^typedef struct s_event_list$/;" s s_hit miniRT.h /^typedef struct s_hit$/;" s -s_hit_info miniRT.h /^typedef struct s_hit_info {$/;" s +s_hit_info miniRT.h /^typedef struct s_hit_info$/;" s s_img minilibx-linux/mlx_int.h /^typedef struct s_img$/;" s s_info libft/libft.h /^struct s_info$/;" s s_light miniRT.h /^typedef struct s_light$/;" s @@ -671,12 +671,12 @@ sl1 minilibx-linux/test/main.c /^int sl1;$/;" v typeref:typename:int sl2 minilibx-linux/test/main.c /^int sl2;$/;" v typeref:typename:int sl3 minilibx-linux/test/main.c /^int sl3;$/;" v typeref:typename:int sl4 minilibx-linux/test/main.c /^int sl4;$/;" v typeref:typename:int -spec miniRT.h /^ float spec;$/;" m struct:s_calc typeref:typename:float +spec miniRT.h /^ float spec;$/;" m struct:s_calc typeref:typename:float spheres miniRT.h /^ t_sphere spheres[MAX_SPHERES];$/;" m struct:s_scene typeref:typename:t_sphere[] -sqrtDisc miniRT.h /^ float sqrtDisc;$/;" m struct:s_calc typeref:typename:float +sqrt_disc miniRT.h /^ float sqrt_disc;$/;" m struct:s_calc typeref:typename:float strlcpy_is_not_posix minilibx-linux/mlx_xpm.c /^unsigned int strlcpy_is_not_posix(char *dest, char *src, unsigned int size)$/;" f typeref:typename:unsigned int t miniRT.h /^ float t;$/;" m struct:s_calc typeref:typename:float -t miniRT.h /^ float t;$/;" m struct:s_hit typeref:typename:float +t miniRT.h /^ float t;$/;" m struct:s_hit typeref:typename:float t0 miniRT.h /^ float t0;$/;" m struct:s_calc typeref:typename:float t1 miniRT.h /^ float t1;$/;" m struct:s_calc typeref:typename:float t_ambient miniRT.h /^} t_ambient;$/;" t typeref:struct:s_ambient @@ -689,7 +689,7 @@ t_cylinder miniRT.h /^} t_cylinder;$/;" t typeref:struct:s_cylinder t_event_list minilibx-linux/mlx_int.h /^} t_event_list;$/;" t typeref:struct:s_event_list t_final miniRT.h /^ float t_final;$/;" m struct:s_calc typeref:typename:float t_hit miniRT.h /^} t_hit;$/;" t typeref:struct:s_hit -t_hit_info miniRT.h /^} t_hit_info;$/;" t typeref:struct:s_hit_info +t_hit_info miniRT.h /^} t_hit_info;$/;" t typeref:struct:s_hit_info t_img minilibx-linux/mlx_int.h /^} t_img;$/;" t typeref:struct:s_img t_info libft/libft.h /^typedef struct s_info t_info;$/;" t typeref:struct:s_info t_light miniRT.h /^} t_light;$/;" t typeref:struct:s_light @@ -725,7 +725,7 @@ vec3_mul calcul_de_vecteur2.c /^t_vec3 vec3_mul(t_vec3 a, t_vec3 b)$/;" f typere vec3_normalize calcul_de_vecteur2.c /^t_vec3 vec3_normalize(t_vec3 a)$/;" f typeref:typename:t_vec3 vec3_scale calcul_de_vecteur.c /^t_vec3 vec3_scale(t_vec3 a, float s)$/;" f typeref:typename:t_vec3 vec3_sub calcul_de_vecteur.c /^t_vec3 vec3_sub(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 -view_dir miniRT.h /^ t_vec3 view_dir;$/;" m struct:s_calc typeref:typename:t_vec3 +view_dir miniRT.h /^ t_vec3 view_dir;$/;" m struct:s_calc typeref:typename:t_vec3 visual minilibx-linux/mlx_int.h /^ Visual *visual;$/;" m struct:s_xvar typeref:typename:Visual * width minilibx-linux/mlx_int.h /^ int width;$/;" m struct:s_img typeref:typename:int win miniRT.h /^ void *win;$/;" m struct:s_app typeref:typename:void * @@ -746,5 +746,5 @@ xpm1_x minilibx-linux/test/main.c /^int xpm1_x;$/;" v typeref:typename:int xpm1_y minilibx-linux/test/main.c /^int xpm1_y;$/;" v typeref:typename:int y miniRT.h /^ float y;$/;" m struct:s_calc typeref:typename:float y miniRT.h /^ float y;$/;" m struct:s_vec3 typeref:typename:float -yaw miniRT.h /^ float yaw; \/\/ vue de gauche a droite$/;" m struct:s_camera typeref:typename:float +yaw miniRT.h /^ float yaw;$/;" m struct:s_camera typeref:typename:float z miniRT.h /^ float z;$/;" m struct:s_vec3 typeref:typename:float diff --git a/trace.c b/trace.c index f405e67..b2882c7 100644 --- a/trace.c +++ b/trace.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/17 19:07:07 by yantoine #+# #+# */ -/* Updated: 2025/02/19 16:52:23 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:59:53 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,7 +36,7 @@ static t_vec3 calc_light_contribution(t_hit_info hit, t_light light, if (is_in_shadow(hit.point, light.pos, scene)) return ((t_vec3){0, 0, 0}); diff = fmaxf(0.0f, vec3_dot(hit.normal, l)); - view_dir = vec3_normalize(vec3_sub(camera.camPos, hit.point)); + view_dir = vec3_normalize(vec3_sub(camera.cam_pos, hit.point)); half_dir = vec3_normalize(vec3_add(l, view_dir)); spec = powf(fmaxf(0.0f, vec3_dot(hit.normal, half_dir)), 32.0f); return (vec3_add(vec3_scale(vec3_mul(hit.color, \ diff --git a/update_camera.c b/update_camera.c index 8c895ad..e49b763 100644 --- a/update_camera.c +++ b/update_camera.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/17 19:27:23 by yantoine #+# #+# */ -/* Updated: 2025/02/17 23:36:33 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 17:02:04 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,35 +26,35 @@ static void update_camera_rotation(t_app *app) app->scene.camera.pitch = 1.57f - 0.01f; if (app->scene.camera.pitch < -1.57f + 0.01f) app->scene.camera.pitch = -1.57f + 0.01f; - app->scene.camera.camDir.x = cosf(app->scene.camera.pitch) + app->scene.camera.cam_dir.x = cosf(app->scene.camera.pitch) * sinf(app->scene.camera.yaw); - app->scene.camera.camDir.y = sinf(app->scene.camera.pitch); - app->scene.camera.camDir.z = -cosf(app->scene.camera.pitch) + app->scene.camera.cam_dir.y = sinf(app->scene.camera.pitch); + app->scene.camera.cam_dir.z = -cosf(app->scene.camera.pitch) * cosf(app->scene.camera.yaw); - app->scene.camera.camDir = vec3_normalize(app->scene.camera.camDir); + app->scene.camera.cam_dir = vec3_normalize(app->scene.camera.cam_dir); app->scene.camera.right = (t_vec3){cosf(app->scene.camera.yaw), 0, sinf(app->scene.camera.yaw)}; app->scene.camera.right = vec3_normalize(app->scene.camera.right); app->scene.camera.up = vec3_normalize(vec3_cross(app->scene.camera.right, - app->scene.camera.camDir)); + app->scene.camera.cam_dir)); } static void update_camera_movement(t_app *app) { if (app->key_w) - app->scene.camera.camPos = vec3_add(app->scene.camera.camPos, - vec3_scale(app->scene.camera.camDir, + app->scene.camera.cam_pos = vec3_add(app->scene.camera.cam_pos, + vec3_scale(app->scene.camera.cam_dir, app->scene.camera.move_speed)); if (app->key_s) - app->scene.camera.camPos = vec3_sub(app->scene.camera.camPos, - vec3_scale(app->scene.camera.camDir, + app->scene.camera.cam_pos = vec3_sub(app->scene.camera.cam_pos, + vec3_scale(app->scene.camera.cam_dir, app->scene.camera.move_speed)); if (app->key_a) - app->scene.camera.camPos = vec3_sub(app->scene.camera.camPos, + app->scene.camera.cam_pos = vec3_sub(app->scene.camera.cam_pos, vec3_scale(app->scene.camera.right, app->scene.camera.move_speed)); if (app->key_d) - app->scene.camera.camPos = vec3_add(app->scene.camera.camPos, + app->scene.camera.cam_pos = vec3_add(app->scene.camera.cam_pos, vec3_scale(app->scene.camera.right, app->scene.camera.move_speed)); }