From 83f2dc18f96232520806b60a64a243e62461ba56 Mon Sep 17 00:00:00 2001 From: Spencer Brower <6729162+sbrow@users.noreply.github.com> Date: Tue, 21 Jul 2026 16:43:59 -0400 Subject: [PATCH] perf(mustache): Improved performance. --- AGENTS.md | 22 +++-- bench/bench-better-redinent | Bin 0 -> 395608 bytes bench/bench-perf | Bin 0 -> 395592 bytes mustache/mustache.odin | 163 ++++++++++++++++++++-------------- mustache/tokenizer.odin | 170 +++++++++++++++++++----------------- 5 files changed, 205 insertions(+), 150 deletions(-) create mode 100755 bench/bench-better-redinent create mode 100755 bench/bench-perf diff --git a/AGENTS.md b/AGENTS.md index 6e17f71..b852169 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,6 +32,7 @@ thor/ ├── frontmatter.odin # JSON frontmatter parser (supports nested og + lastmod) ├── defaults.odin # DEFAULTS_PATH constant (#directory) ├── main.odin # Entry point +├── bench/ # Template rendering benchmark └── defaults/layouts/ # Bundled default templates ``` @@ -64,6 +65,7 @@ thor/ | | `sectionate.odin` | `wrap_sections` — splits HTML at `
|}sh;?ewzk-udQBLk?x zxaW{Z=O>V3Uwyj?ayhu$^Z_LB-h=bIN9VPd#f(t5E(f`z^%8%}Vi2SAhezi{56%l7 z2VW@gxBP+#8D8@E{_*8!Fz15@=Lv|UILJ|*AHb3xoyUD!5Ae4NFfuT_6az`{?>*G~ z!QO{|?>SI_yJ((hKH%8=!=cn^2dFr8H9YBRcCySy Tx;DGVzyy?OD52E!YXq=$)hvB8~A3Zw-;6dDZ$^$uoN_ag$ zYCOJw^yobPS_#Dd{;~7;YY9-OfLI_uaC>$JaCm~+OAHK#-@y7mMT4sGZ#O+Ve|lbi z=+XJv pq>gJ-%P|V7%-hcpely2VdKJ9Q Cwv~< kZ+j?S_ULr};cEEJxAlo9 zzu&o+GO$$J%)r0^v8MSaC&VfjDR%yzC7{gFc?{G%?|TGN+ 8-qk8ks!zHRu&Tv`OTb}z`tY~RjfAPYLbdUPK1?7ZUJdG^JX z2hf1f0=xT#54Ny)xrqVE3x!ZEtw;X-|8IEP@T6y_yl1CB$IB8>anpJHMFCVn%Og E)5|Xg&xD+0%%S_2u__=G*!3r3F-zHB1wzr19x|1$Kyugh%r+h}O>_t-h9TJo$aD z_;h{)P1*{0v|g&?2KC6^-T(jJr}LXfcioQ{lfdkkzMT(1eW})yj-dGt1|NR^lMW4k znfY6fgJN9sAb;OJkdIpr@OQibIkWX7f8R<_*fHMdJkk7s9W)cg-^2_mRXR_39DK#> z(fm`PSk~~{%NwBaOOQ<(_y7NQ+{S2l8&n<_fK=}L16oS(|3ANn;x)tnpomN3FFW~~ z*Q5D3i-+Yu{+4y1r4)|*`655k_$@Rqq&f1}U2^<>$?@AE#u5(C<19Zw^-~)E`-^Fg z{8l2DIKUE|p2uB&fKoTZXGi}0kRJk=dcjJ-jV5%>Eg;PjAY)&a{Rf2-4`^auYa=tm zz7$Xs-WSx3R|7SIE9F3Qmo^_j{f6T#A3$0>{vY$O{8ai9l(Jj8LBX`^2gHZ<9*P$o z8*DfjN?09_v2ZXn|6nZ1b!@2NU}Pv^b3Eq4!N}13gQ+A6B*X+2Vq$3i!Cc}F5@Lo5 zF*7v(U@0*H39&$hSQwgru$Cx-gjk_MtPIUR*h=_7LTpeWHc(I5vs2!;)1Sko^8;uh z3R0sdZ33vs)+Ve)HgWJ?PQ-)8pVvQxDFMC5kql{4M(!7#R4sooN2)RjTg6zvLgI2jl;j zD?x(c2M%{0Y&dA@arwF7w{Hg>JosI{zXXkOgI06|yBgl!=?Mxr&4VB@1`o;GpaPhG z?MKhfPo9@weLLvj%kO&1m*4fW2c%=>(R`c1m*4raFTe9?kIvtY`~HJc-X7aPK_m z%fI%!=jC@E2Va}70O|ba%kTQxgY&a5zsqk|ewWXlivL{{zZw4b;r!>oKlQi|=Xsyb zYtf*lVCT<+FPWMjGJ0_S^k_cF=+S(Q!GnL-L-Qhb5B??R>|S$&C|k!Jpyr~Z=7B~~ z=5261_&~(5@c;wE2YW|O(CDUu#}1G~{{QD^@KF5V!+9XhgFo-U;R#^RdNjWg@aVkk z0cvR&fC{SCZ~QIlAjU4?1xk!sLJO2Y%Lu+d0+E^*JTAWQU<6hA93Ghm4ukSf=O+)% zLykK^LmWQ6tShWp7+ei6`Si-3I|S<7Tzf4IA20R%f6TM-A4rogzw;;0=7aydyIDSf z28h@^EDIz`j8PT%ww^2zgsC_TQc=41HNQ{ijn`a|@oJB52LqpOj||V|pNu7+Jez-t zlqT)~xx>})q))G`?;#e3*Rsg%-~Wd^8h?T8_vClJ=+S)OpKrIw1>e?7C2XFSMG_^> zppjoB1+524WML`}gH)96eJ$_NY3 op%@y@qdhkb!5nQ-%j9V}0^y z{vpEO3K~Q5>~>P{?e@~}>@G6!?T)f= yWubC)o}4*u533=9mQ zX-M;yOQl&aL2EKRcZDDfEb;T)#U#u6C3?eyYOo`e7(wc{gA6UTdR^?ftL3A_>|5(P z C#$N`i{WXE*=<_uTb*f^N!{O^5u!T0zZk7qHgSqoCjy_56Rr*YZTMt6w+E0nhFN z36Iuqr7VX34ZnG`{x6XQ^${dMeFsez6_3tGFOK~A|DRujMTK9G`85YfT#(uDfJgHY z0dSrL4ZYr82y@3NxI5x*f`)A!AxpPJ3)H|%w=Q_}+AduM9;dBa&J3E;SZ>I|un#mc z<=J_1rvYd!*Z)f%-7syI2yJz%!0O#W>V+8?7z{6YcAhjm>G=N=Z2SN;{$T)G8|DFW zq$ao*2O>ZVvtIar19`$lMS)+C*`xW0LG 0=|}i`CCA(7td}T6_3`pCC@#(V^n@LSjU z^= _-~$$qP8mjz&KyP#&;M>59^Eb~5>5>^ z77Y9?iT^>7=c2;l)y?w51C&C#Yd|aLK6!wQJ^b(g|Ce?kCCx`Hkg7D0ou2Txt5tzV z`ASHXTP_1fVG1v7XdX1D0FFRVfsWk&Z+xQx%Hy49LCwL=6P}&dJv+a6bpG{d{>5Lf z@7wyHzwZYlXvGWie4t~44NDDwizleH_WyvV+(DFE4>Arsn?+{LP>x3x)@LI{$fS z9`k7aCr}gR(fQHi;7b;dT^}ITMZJgOClAI$9{&%f@#nMVtzu>XM;Ls(4b-yXVM*i9 zznI2fav_cX`lr@!{H>s_nn&{i0gwNnNMWqM>Ct(?$MOe%FKA5^$N;#0sQZ?Hk`l~) zMxew5uE*It{vR|v0J8bZN@j-F!f6x0RXxO1{yyjb|Nny=puz$oV^{=0R0xX#i1J}E zNaN4{lEz>1A&o!(bsB%ki!}cHUupa$KhpTGe^2Aj{|RMZPvg)3o5uh8UmE}Q|D4}B zub0e9 iziFT$iZcuh3~3;*d4u`@pdN71|NsBf_)B=BRx&fB@s}M) z<9~lJjsG<(gr9#Rjlb|BM;iYv&=NDpgK7L$A_o~f7*BXKA20wl%Q`{JNnU$_Oprh_ z;k7^-e~Bs^LgWa@Ob8#hnXLyZvwS+A`*i+$kv)-#!L!qq!Lu_Iw7?BCqvOi(nZMpu zz~i_pXt5*1%hkM~ZcK^nf)#L=9|qY1;p4Ui6rrsLDyDgKx2Pn5BCI 18I(L2jQe$1DB z0;b=ebmZS|W0J<7_uP?xdyNTG8h_sVH2#uDY5W#OPty2rKThMnawLtv #r@-ld z8OR@HCqaJtv5c9)v-v-Ny%9LmYceq~7@mZVhdMUc@YL|PyaGkf|AU^E=S$zd
C^ekL-UkJ^DluKCy&l+9tYpCcqkt7U_9mV{}^)l0m@1;JZbzT zH`4g8{|4m*@W@W{K>?5d=RBJKG1lMp=)CA-`IEnQAtM9B1gQO~$o6-D^Ybr{gRj^; z{vR?t`C1y$Uh-%@=-}}m K7!}G5T|MlaJoIe~nKa?y_bK$>!EX}p`Kxra~c@)g72IpnaDvz|*ZzauX{O@n3 z@xQ*6#-IN e@f%e zzn8{eco}5QJ&-xK;pV&!OXGk4GL8TBt2F-nyD&v}Q5AVK9~5}4o5uhCVH*GIM``@| zcVG(dU?^08wtrhsR%rWlUh+8jh{d;4MbNX;N07sl@r>vHBOd<`dTO5c{C~*P@)m#V z>A(N~dv@OP>AV1{%Jt~&Q30_%I(t+=ZA_4w8Q|Pr z@1mjr%@W65R6uPT29NGJ;NrxmyI8=dyIKM)?cmWV1IjUHz+>1xDh{AtKZD_apUzJ{ zoj+fcE&=77QaMol>;P&|2!Naoo^+G&=`2yv04;1c@aVO@!vvc0k5S<`&Y}YHhexky zbRnp%RiYxWQxnv*+6kId^y!6o>&2c=j0|b~`JhQ4{`V(8JM!22f=f>ZpUzZ)mx&w< z48EO;zMYleRqYiZ6G1(l&JdLd&u&Yf&K{Kupnhq0A;*hH-JprxOZ+Y2Y@qchJ}MF5 zCCm9BUT2HS0Z@o`PEi4^MB?vD1}#;+?bDf~VgYh~z-x18e)j3^0SAs}x1eXYCx_?3 zCoDdl&wP4W53{l`yjaJ`$l%cpGTQPqf3FmG{7 zeHfp+@^1?fV|3}f=)!T(@PKoJjT8g_)B}#4M;yOjaaBCy$@s^k`4E$b<+ajHj^B zzC@^`d?hWJ{a@VDr&GBEIW z$gzW#>_5jWocDo~EhvBd^yy_aV}X{_FL)M#BCke8z@zoQ55LRvmIFS$Ju09zBK)m4 zSwO8VpI%YnAZFNnrz8J19yX^28$pJWR1Z*t=4k1gm!PGkp!5k&+2FchKWH@ws+~<5 zFgs@~WMJ42@|PoM)EZPnw9Ez-p-_u`Tc1Fd*S!So^*21}WBH;s*|XP#&G1s%1W?CI z%(=lvfT2{-r !R`>l+Pc45_a *W^gQkeZjg93|6!_$ z^ym$jFg)qg4VuF0E>S4}by_lBOMqI7Nc{tk=0gG=|4)=ygO+&LfBej!@AL!YCXlf# zoS<~B0I7OFMGuJi`YeW_9^GvRK#H1wu=DrN{`3F8NA>}W&;0oiM}FqdheYsa{`@H_ zpgD@q{PiqspZV*3*aSZF*N3oyx-)DB9{<6nyo>@F(3zu>04j?F3{Qd@cT*1@e8>te zmOxX&;88qK7f1n=%b-Qm@x!17HYiWMeXW2L{;jt?_&x6WbpG^Vyy|25mcO?K)LQR6 z@7Zgk=hOMlL-XBn7ZuQ~2!ls&h>F9D)e@lg-l1+66$e{zvTO#8oAPfvV57j_t_t$z zP6j*3UT6>g#RvJD1wmr1w|zQ)R?GoK8l#8h!CGhB-6!yp9G_lRAvI733Q`*Rc3yum zsfmffxAT`zcZ!Mxs0>o@=se-0`M{&~K%D_NC_n+xvIm?rY~(yTUwLTW^67jAp8f8$ zG4SXNG2rn0f5fK~r2qTnmpq{M^n_iY&CP} iWXpI+Vr{>%)og`oAF<|oh)U-K`< zI(bmL<>EWf-U>bs#p@o7=N&CscGlekjT|=rVyu4%p3z$a+E~?klD}i|zyJRoEm=DG z`)7h#E}bm=J$;}~+xvh2|J#Df3I3KRASS5Z<8LhnNnHW!zRlkOYCORL%cDC-C85@q zaEJ-0B0}s%aw8K1BCLEgA9{d#kDw}{PZ^YgKx1zQKr4?J?|Ew8_33;7Dz|+)P1t=p zbJ#%v_3{s>-woCTa=^>Czd`+v_Xj{J-xaicVQm&@8JR1C$8lE 02Pp+iU-s|0I@-pk7uVVyrTe0->wWVFMWm>4T?sK&;0cu(<_in2dx}=37WP9 zWoTqYZb*tiyVqZ;gA!Zk9u-hu)?>%V1+LfD{*u=M6%*hlLvM=;xVY$Sfix3P8Wo@h z1E^5}8n*}4(V#{Jhz-iwpg01V0$DmV2W&pbG2jvwy@BD=y#!o``gWJ72>5o_s6d+- zKAkF{CPt &(9SzY@B$>z{=2wWu+{}Q)Y3pr z4E}l!Q1^@hBog4!3GSysN{r*KpaP7+qw|GF;}KBbA8A;@qt|wFFf+qGN6 s(cLCNMHXm;)X z36O}b#b0IypU!75E}Q@v1Ih7-A&gzZ@F9$6GeO=IEt?7+!uY7j!th!j(O`j%S9KyZ zY=vlWg=qMoh&JZoX?dK#W&NlB{|&!^#|0etryTQO{Os}n!0RW__7KweRO6c$pq-GN zr#(Bbfj3(I_32##Zgv{Jh3=kwZusp*)Y1R{L4#O=Eh?bY 6d+^6&X&N5KTv-8FaP6lQM z&t4Wi4^Y*A)U)}xfJgI>|0RJwmQTwsfKr(UXt@0tsQdx1#s;-~81{jd&+P;?^FS@+ z3}yyMQVRCz4N(zr3<7T%7657H@L+^w*4Hf{t_RqdV=gM}Tpq0lO4(oALD;aptRVdy zpqh#uVFT1?tfnFY =&xtzO-ImxD5wlV9#3n2li|~O7(D6G4oV21Nsl^kae2+N^E@cYfZ`V9b_bu% zlP@kkgU+~uhTcKV6bFxPj|`9IpJL#~h%kREs3!rcxH~_2beE`j_;kK^1UHUfxNikT z^+Au;0}lLCkAdo?sRtYsKD_J$mG_XO2wq^>?V$l`CJ1 riRmcsua0cb`5PgQjuapd3T%K%Mr9+#hb9zO<3bROTYdUhW7 zRD2I=%UFO@FTCq^+(iYn8V}qSvGC~iQ855*8`c1=$4~I-d=Cl-g%=g}j0~Uv)9~(g z`O5%q7W9DvyxT{`0_0zC^T7bb;&|-`3U|<0`b*IMN}tXjpvflw^*>xX|202j^!R?y zQ`x|SxkN?6gYh5OC;u;k7NCN*P=bbz72hN50L_g1bpG_vJm{hL5;U!3d5*tb6x5Km zd{BA`lz0_ }dwOEf&1|1p)cdVrDxXu==l2F?$lRV*cPKA=?_ z9^b!tbY6Qc<;lPPzXx*-XmQj(@ZNP7knHzwo!310*B|%fUk`KWv6n%hL8@-hxO;a2 zhX-iby1P!oqxnB$iJM3Bf2I<7a4K8|uC#x6aQ*<>W(l?J`)f0h8!o;8#iL{Mb4Jha z_kEP@Kw-<_!}!mG@!V?-PyY4i!2%$j6vQFlJ^0rj^x$7F29>zx!FUYhYXQ()hJZ(N zMFwZ7sz*1UNAod`*J_3b3@?Ee!f< OX 1} FB;!~+8Dl_XMH*kdv>1l?EK={39bn=T~rVSbO5Mq2JKYwa|YFeE-K(v zoED(klwZI_#eiRsMa8GnM+LNV9W 5_Xp6(0_-_9?d%}+kK8ou=bO%Q>`U|y?(=e3ZhG?2#!J^vpyJm712wB)u==SxsW z%-6DnlY_r?3Ik}bC&*KWJiB=~eJp>L>@>XO+5C^A$ltg1Nr@V?J_qf86a QYa8)WGmqv&93GaRir)HIe&TPA z1TR5yVBp_oBIsykB3>%y0UG$aR{HKGXi^3~|LoLIqszd+-{Jzzkpf=bEH7Y_ITAjd zzkE7BdUoFM={)^n;y=)c*-ejb85N&y7Zr|{1N<$#|NsBr!1xlhoF3XA>HOir`Jp5b zd2s^Tl7!Af&7bN)otA@;bqSiC2OA#NH~jSEZvj>God=sA)`Qk3sKVDLEP}32VA%>< z<@Ma~+X~3)1kmzc$FN{m!%MKW367viTLxdy;)EZb{A)jWc7F7{{1UP_;UH*%0(5bL zCuDKLDPMl)L!O<#cY_OjNb%lz(35}dJ&((;J;7@eeE3~Id-A*9@&vC<_~gj%a?4Zk zpW;2x(u8l2r3uGVwFw>v zA1HKw^xy=IrRN<4og)Bl-+?AAC0x48EnGn}E^k4_Vz yWY )Vnj&^{G6pUzVrnz!og zJi6UED(XEf57k$JT?Cp?^RPV3-w)pY*lq98Ya;)`VmE00&VP`BuX$VzzrB{*3#wNQ zZ+mLq^y&0B=*+ip?0ol{!{fL+ctF$zye>upJd+%I7&LX@(QCUoiJ1Yicpuz|2MwHn zikzBXpnZ3s{cyGuVJbX3FYa;&Ee`@6-T_h+j!={XQv^`~I&=fn7cl(=-ERge&mE!1 znSdIr#1)^%AWdITKat&zgklujeL*Tjq3tDcb~4LR9~E#p%Hzq%_nIACjzX$5=oUQK z>gvOY@fOH&Cd8Z<^XWCXa#8>VAh_20SO==LzQ6c+11w3#+wm)Ilnz2RC4q)3Odw z QOf7eLmvMR_*kCc?**-T z0-IvO$iU##U?W~#`Vb`1>;y8^hP}G R90q(s%K$TSn4FGrEc=32USoRQHHW8#( z3o3gQB>Vq_N3ZQdxPkzX0(o$t9(b_?q@dTf87>Rj#kmtSSmoP!;YAxnHWgJ?5vn(1 zJ1BEO+Do9K%>h)t1b~`i5kB4F96r6WW*0#vL=3d;0c&D|Th{PK2xvG_0<`~C1H=+= z{C~-#^Pop}h>8ZdwaC}}gQ=9I^Tcb`9iVLQ(JAcFe8eFd+kO}Uko_7U`xSh;LsUTf zH~2xzTAJT*`1Ho8a5x4z1_!(_5&`c;QGl*;0k3UATOT3;Y9$DGf>zC5^X&ZU(fJp7 zOYn!^p!)N;N9$W3e%HUA&3~ErTR=sMXYc+8pi#l*zl >wTJCPW(EfS-eaJJR=w*XLLkljE$ pdu2w>h#6dt^fZ!9%~2L!034#Y&OW4m+wGP)cl8qzx4@dE~tTz`{ivA z1EQ4S %C&(njla62$(Z-{{9c1Kh4PyjNu!1T&h8=dG4o2rS!%O_E9?d`gl)Uq3 z{&9=HMH K_dJe$G31~u&^ zkeZZmGlfBBGQRWFd;o1WdJ40}OA Cu&-?Mu=IDUFv**$tg`8+_o2s|%%G(Y;`(JLe7(fIp5GXq0?Kd8sj`Q7l_ zi$j}1$zwi9&+9giUfcN*%%GjX(QlX;_UVIq1%ee!3_hLUWv|i^%nbX|K{*~g)a3%% zx#rt>@kPyNaJHTY(d-A(4BjAnr5vvL9w=9WHG6?_G-zBBR9rZH290j{s0bj2w(c{) z2Nby5!LIon2Odx`dj}g(Fasrs|Cd0cYe*WGAv9iU18e*U(Wnd8Xp2>2E<)o>h(;TT z#wl-MHiCxh5aSo1`WduGA2a~!3)*3D!K3rDXXihU?mdw4tL`4~_!THaXo9wWf|h)N zx;Ws0DA-7qiwbyfssJ`-bqq43!{FL-phVBJ`Optv{w0@eJ)3{A^S8Hy)`9kliYqZQ zcqN-m@?gC7|CtB>z6%Fluy-DNt!? U;>1@NE16 zQpMkF3|hg|dB}qkw5VI5L>#=6#K-bfk<`my;Oqw}UqPENd@N7#H$MdlZW9rA>IebN zf}QZNJW;#}Zkjf@KnY; ?Y7MLyult_b_ILeW2RPaVJQ8S1_pb zQUER7xb*!a$QL~xy|zj)MV_4(cKLzQDrlhnh33Zp|G}nKK}{`+^60hw8j5OS7|6tP z;M{-c-^P5HQhkqJ+f!&tLqJLw!<1G)mGU=Ng4zWgJ|Y6Xofka+pMVFJJV^YQ3yXk( zL(8`keb4_VHt0eni_Age%V_3 @PKdU&lghf!6i&9OaassaQuKaGr#BrnbK>Uf~Ej;;@wVAVe=vbqQDtVK{Cjp zV0XAf6eyu72nQ(;0abCG7hWi@|NkE}whkJ@MwD2(e;7fh|ACf}CN+Qyp3TAF6077n zGh_)VWRU~5@z2IL9^ksjMMVPC5(O J9iY)x zU&}xI&7h6xp51jnJiE=H6^;S;ut?C6m7pq8;ziGk|NlMzpYd!y_MzoK$wAO;fdObd z(gL(QOaQcAuq3W7#`EBF7SHD6AAEXCR1^$vBhUADhsXqYbo #KO6_E8Fy|%YNRRq|@1t1qg z3WtNBK7R2lP$vU L^u zmo@4Ogqr}G9RqFZZBfYp&C?xk0iRq7?%edUZh;!#08%B`qS67SXRt6Zyg0rVG-Y=Z z 9n^+h;n}0I#_kd0Z0{2oqx> y~;o)HCXqx-`@?rIgw=)H9csS~S$N iG0J zGx}Pds8!}~{;JNv;Cb)?ixa;93j?Sy0=e0v`7o1@<>{IUudOG5`~-3vC>TKJh|H-1 z%`)@1fVNPAX5>L~pd1Ze+YAa-PyoC%1C4G9_NWAa7BLC-s3bsX1}H56r468T0hD%t z(h5-e11KW8q4C|_qXLR=kc)1B kE+D&K{KyV7f)+0GNi@4RTunln=5S z#0S|8a_a(+T>>pCpi~HoJ#cj;08O2m&_ Adcc{5Uto#~C@b&_ z%mF8Se$6>5km_v;c$ycKl98)7k6u>s4A4&c7Vs(t@G1vTG 1CC(0gYj{sGI=B!|@iC3oHzvZYpSN&Y3%)KwP5&(&@1;kum6n =e`3F$?0yLfkz@2o^K%(h94@eOPlG-H%DyBNW zgQDnRJV=_g$^+uK9Z<&|fI1Eodtg_gO% EYy<>x_ZaQGO0^MHpCO8A_=1qmOpqv7F``JD+gur3=2@e#O& zINqY7!46539=)vWP$}>MYsXtuED%y310cE_Kx-+Ex2Sj^q;5l{0-#b62&tn`sRXE0 z2105*RH^_fRe_M236*MqN_8NlnxRq?pi(msQn^s61yHFK2&r(W)CQ>34wzIoWW|?H z_ZDy&2`y*@K<$H09nhMt(EFg&(W3$q+P{F4kpZ#R_TvkSGSDgLCq25SfaN_}FYWxo z$iU#i?{doUTgw3te%Esz{I1tLI;W@vfW(its6>F0J*XJ%ge-^h=$xYh8nyK4+@ewd z-gNa^iXU{2HYgXq0BQPvz@zyG7k^7SH>lcdQ2`4ce89r5(ZT|XLeQcj&?;2J1Fuz3 z+Pf_(4siWOuyVR&xku*~70{w#P&IV{q@WY35Y$EkH{zFoOLTacX!@uq_;l*1>`!1| zfOy}h^N~;IN1tBS^n0Mt@ljEDp<4 pgd{i<(&I9);I+v)d06D93iwdao!ykSC zRD*%ygJ093fM3%gfnU=hfM3(WfnU?XfM3%=fnU=>z~guWsLKax9f6dC0ti&(gS2_> zhb D;3t0gCJHEl@8nfg}S>(0n~;zza0#2WlmQn_!?mC@dU70RmoH0NqLO(5IJG z@+~OW%>gg!_Uyd*Lb3$ZBr8<{MI}ftsJEm59(V_(GeHK>${Y*OvQ-E0)IM}$!A{UJ zDo5xFD%;dcpi-zrMZu$2bcru0v|GSw?M2KX(29NV;)oU%P)`*!46gz5qXj5Zds|eH z{fyJ6pk6m_&vxplpnKBf4KoACb2i0TJO_>(7ZnYD;yl-J5#hPx;Py7ubM*&73w>%- z6nwf%R5Tj)fD;cxskBG)9&oB*C=qZqd;+qq+eaniwF|#I!#>d1I(VBVH~>9*_oz$& zC7WK>Pq#tA)&q{=7ph^P)w4@fKxxgRyGI3-#5_9B@`oSr(R}LB`nE0{6k8yjpmFEj zu)Qh#E$?JOlXQ iU9|x1p!)BE#Pt7#XthYL-G#X_3lvD<8$@(TS!5_Dg>*m zaXIjo3@E^14&3QQtOG&IzcN5k3+kqW1|W8=UIhkP9^YR E8n7G0IK*wo1I?RdmQ}54AR%ja>=8Y#R0VC;rk8H zR?PngKp9U1tn!2h%)(V3{Ob>S>;hZ9YLym9`L0kX@UXnV-y{LbsUR!UA(KIAU@Jif zBG`Le`~|UT5@^|3XOD^k$nf442;B+EC!op$wfx#csQmJPw%0w-vNmY5O5_VjY=O$E z7cu!n z`2{pv3#l|9EU;3j<3VW~6uY1`wxEmy3kT$q9yBKIu>)4pgQEwfq$eCwSVGABIjHcv z3){K#!aNU4AYqp9=z#>9Xm$iG@&v73YX)8Q0UECI=oOU%x7Z<(`=V+OQb-Xj;Zgkx zN)@2c0EH6B@1W2Cg_Z`kFu+>}U`r?l&yW&|aV}Y502;4`he7>mL_*O5HMo1{fNMF> zijv~pNWt&{lw-PGRKOJ-Xp=g~lgJev_F#bI;T9F-U;yca mbdpkV}10}51Af!lq(Zj7Mf5#08( zJXq@oEyocD9)Ly*z%?nT{sA>yeR^5XUS($B*PNmP()Hqj9}@$=2807L7SyN(8423U z%^!XeG&Y+7DtR?Q=dtkj6@CSschCZ91B1?c&=ChUWj}cwe8le2EAq*w8`6UD>0}WA zu|f5zPp69j2Z#fTaS#VA1B!7FN5ZEwM?e8o-D-Gr<_Lh+I15 q%*>!Ge#i6r!z$$!=tlCpnzX6M4$p(@^1mR&0ik*0$K-!+C&B= z1xS)W>L$2ATE#xStPih%;@d|>VgCUkcncY{{_ll&7PNx^S}56iau?{pB@cd=i-!Nf zy@Tr>{I2Ig4P8))3u*y#z+1o}pcXJ>*BH3%25QQ5ZUIk=IBa9|>D68H2xMuAN&%#J z1U2 )m0yK`&32`C61`9i=vm?O5zyLm?v9m=5v<`!R+d)tf2O3xbvQ2p)Y#3A(e8VWDc?dT*`q<{@xZ9khekp1Xp+{6&tLu2L%R5 z1*nt*`5aW(gF*xxGM$i84kQjK Q7J&F0gwX2DxLJeKrYX0 zJC7nt{S-%}z-Rz%a{#Y$?`(necVR_7s5Ah1iKs}%QE+4Pl27MrXcVWUk?t$-$_iMI zZSxU?ua-I>`D)b`P>G!aEwMr6COAKWi(^oS*YaSkBSu*aTE_`5i$TSNPcQ4j3!p0C z<%>v9CI*l(pi%=={DS66eR@k&3i!iMdUoDLDuMrlcl@=0d#0dCftFW-AV-Rnfp+_Y zR(ya{T&Ilyhz(9~oizd+AP#u60o1JlaloP9StB3;DnFsc@Bd? }3tJrz+K6J{(HR5Ef;B1*rK}#U|4U7MdRZ@@2ldK9eaT)(9}v;M0(ZAw z2zh{l(MLrCv!^sCt$G}14y3 JkLF*TU`svteNTbLPjI{KMYTJs zvo3gOo&YW4L~>RginG$dPJlWKG>G8QYa0y~gE V0Cg7F1--T& zU@@4ph>b)eJkHwYN-(rMQJi%OJYxWL7N|4j(QA7EECzEHXx56DNIZQOcWB8IcGe^C zUPf4wcLX~D>MYQeBOblB9$+z;v%oP+L?ou*aaM;5!O*Hkan>1Yq_hQ^3is%>y#f}4 zIg8jN|Mv{;(E8|%>?}~*3DgRP78KxWs`Xo)4Y*w8L2+In*eTFZ1MML6=(P<8i@}@+ zPI&(hf=Y2vLmO1cf(k@_ffn$na2jYX5Hw1_FA$<)!LK1Z?F^_HJ_p>9;n$EYhjPJf zg3c}AehkPga67+q3#2~-8s7y?PYJfDctD#|5g@vI3uJ(}bBhZ2Ea~nNP@8j$N(K|? zR42_Il>(3|(1b0R?osIg(^FI?fK8jCG6U3W>fWNV1GEON^&5W+sD1z~Edoz7cDJY? zO)r8*)Iif$pavd@hRrZIfFcN#|2uO)m-6(0yDXrRfCI8!VGno$-lKO5c(x5RJqGsc z&K*&zdE)PxG(qRBfTm$y^aOz_jTW%-G*I|~rZqsdB4`c+G(r!u3DnvFxdhZ#0*wHI zHsXT9+oN-h3aAPL4PCcR 3r&O@GYeN5`tJILB3T!o$n35fj0IbY&rIFH)!?sURYGXA_qMMfX0Ue z!0i&yfHyo|!SMi%S6D3ifbOV$@6&no#oho=14Y*C0H~d?1Uy&o1KR9%&!_X(iwEwY zkwoZ;K+tps+TjWsdj)M21npvh4F94h9Iyp1Uc?80x);wqI>E+Gq|`V86yu!S;nR?y z)DCh2h~5EO7;gBVpA|Ia3=#lk18_mo-J$|ooB`@jWPtDDT>>7v=kIF<^ ogC3E3t!&pl!yxHcz>x z_JUha5Y#M148$J%B?TJi%sd2A?xA^*Km5Qa4}PsfAmZdF{y1Ki7-oh~{1GQUftGrJ z`aqxfBYD3^GlS;CL5f^dGF%P6ed3RUr~nUm^}+%al8-!4PJ;jsRv`7KK!X+@JDx4f zT>XLneFCWe1e%Wnt)2jz)!74{mjj7|HxhTND)oVuJk0@@G?1n2o%apDy|8Wtoplj@ zAPsayM+9hVqNqo+?VLW)dZZT6eat?+rtatd{|BXYP+1Sk3=W{#9}iF=1KK0P0M-g_ z#6qu117}-X!}FljS_3{80@B fXYLk&VMgK z6^G{@P!$8xwHHLV8h(4tu@_Vf`F4Ks0Uyz*z(4hXPv;|#gRd0$ryOdz;LGp&%!A+M ztjEEJ3ND=wJUCB)P6|)}1psJx3A9H9lnOvz;BQq2yRZdPc=qzvYk=xwSXl exykF utA`n+Hn_^3UFh#a}G2jdQ?CW0qO;U*F=FT zD9~^hXqgL$?zV00fkY5!$YvL)i1g^Z`GRL3Xd&Jn$a;&;doSilgU(Ukqw)h37 pDOqfuLF#w6+6OYjA)T_;mMx*M9i)vR>N UHAV$mpc@$y zTTHz$;sPdRZqU8)3E$e8I;0yP)XY1J2nVy>r0J=s-JGJ8!-C;sk1Z z>`?))TI${cUhU*@@EJ46Wbo>v?j9A;>LZ_C+nIMkL+n35vvc>hLh7&vu=BU5OaReP zUEnoJps6orklm`2!MYxRbgh8u0 =MGeE8aGeFCwz>Ezr#USgzBA_Fozzpyn zlH)DlrC6Yv5tPzF%gvzSbjA@9PLP#pTU0 ?!FJ?{u z|KIQc=)@In1_spiqRYgX8TQ#RFfi-_-JiA-w9g7O)ZNhtN~5+Na9LB(+Dy %xC~*hhEkbDxgdW%S)i0W}q30 z0#I%PWnvGMu_RFG2+FhIoY@I!g@QsFtg?3scoKCVD9gOq9mv4219WaO_>KX7R(@`e zUfUx&%nbWL>jZXz&Ue@ex*`s=ru07Kgcv`lOCY5iKd5%YT|D%*Kw4m(&@)0id%#U% z&?+~mF$JK46I2#3fJU`I-Uf}Of&@T?1Gun)6%IRY_8C5&nwy^w@-^rfNl*m{Djz&L zzk|2$zIYRW;hk>i(S@xCe0oKB&cYYSTLgo0tLO @VEW|k2TuP0-0#} zt3=pie|k}VX+eBarH7>zf9p+ {+8pQMSsmd1xmO) zntuxNw=MwnW4pmh1U;G$a)5>oD_*W(1FcVo&zJaE{wlF m zvzUtbTUEd;=3M?(DKLvAk-t>{%wjF!Z)Fo?VAu^>j{-jX<&6Mn6Z%R1mdBur+CbC& z!mzs#zCZHmJmG=mA_VZU0EhNN?jN}A(`!2S7Bimv2QGUwAOGjs&2kNNAQP95rH2H6 zOA@H`N4}&0axDXBe IQn)z2VcLX>7?MuujwS 5|u?KQ9is-P#bg8JK_hytCtE&w_;O#;+301Xd-j!c6tE%E>z zmI+!-rg<8YszLHE?)ZVn;lYciKms0}pfu3yq5?iVUyuPb)T;q%LmPnF(D3yKpk3PV z*%pnppiX27XkbAUv=kTA^aicOejz^>G!ze#=#Ej5*ad1C8-lNI>aJ070H-G3&ObiA zw(r%L8D7o-9m3qp>Yc#C06J7#9 {KxpK;y8@ 0=byC>|!U(hJU9`J|} z|F#Mak6xSoF8tdZI6Zr9Dm)sG!{j0D1d%Y0#zT)mTAF`-h9v_2c2I`|C6R$5H34)e zP6nt+0`7c);s>=!f+KDDc7l)cC!DM 55`v+PAo2m1z4^nk+vGM|N(#fZyV=Z+)7;6 Z;?BJAm73h z1bE>OO79Ugmk%-koMt h+p04^^ o^9wi&fNBEJ?oFT0Ju0A{3it?m zKX%ZO^(S2ozky2ih}TN+^Oiu%T0ld#p8t>eSZ@LA;BS!!`M9$O+$#Zj8x#~i-4?$5 z>;L&M*MQmp1rnf+GN>H^3Q^FA4mgEC28Mh ^OX22g?ob!Zhgfc69Ow}8$& z0F4EJ#6g`tP~Ql2pY+7#pkXq|niY`eK`SXhBgZXoK+DTJ4}&}maw^D0urvxP`q0nb z!?U3RbS59h*?R{)JCAuDd?)W|c+6u5Y(s@7<1ydPk09&&KoJ8P)9Jk7(fo_0D9EGp zy2lRag=F;}ipL>x(EXSE+YCGm&w28%|H{A3gVDqAqbL9Rv;5l%m=L1OP*IQO11uiR z$N!X`2Az+2viTWviH6~S@bVHwd((w~8;^yj;YnZq^=Cc)gAPLSu>4p05)?k5^#urr z`1B?)8-DXud BHjdY4X9r>pm^F;U@G=c&1 z{MC~X&r5)6O_0}oIu$_Y+JiFE%a5S?p?ix8C^0oZv)=*QfZqAh hZ5TkhoB!E^k3R?J z@?OaK4<5ayEB7!nc=Ylf0#VSs3@W(}tz%?pIRJAXe=GR#k#0!FCLxKR@;LYkyk}?! z(w?CUkOjJ+JwqNlVM*MB@dRkn4U~+~Bi5($+v_M$p$LxHLQur+LZtYMKAqoS?IHec zVjhNvAo1(Q2-=gxzy2uywlF4yC^J+Pd`n03!9S&^Jvt9MHa}o4kubc(zl}%C!|)&| zmw;~e>OA3Td7%_7KD#09C(q6!uqXo^e1}Njrs2Cm2jYGL4K9OLS%3;1aO&;_6~C)2 z89{w1(3}(~>R 19;~xd3ckwKJ%+k5Lf-rODRYj{H-PIUan*1TFA=_+3AE@VnlCEcfn)j=fkO zto6WHq5>M}fiF=3mqER(?{+aWfbuLT*}mAQ2AQq_O$UNXVbCDSYi3{2UDYRiz>69{ z4g{spx@3@VL1utw$Ur+nJ+n_*fEH#1cyx+zfXZ_4_)cdC2Zu*z3 wB0 cyvcY+8~;s)?X(JY&!|O z&u6+9)aLS0NqF(v0o35~>9wtrWM(J@FR@DirFj8ROAwsEkvn~$bOK6TAQkY=ALy)2 zcnei~KBDoJqX)7D+Co+8M{cJh<<6bk!Qm4GqPly)ZI>6N+Zh?aAr7iZAYDUn!|P=m zXtV~S%?|I-ffla8PLjX~7|?P=kmEhO;{|-X%OyZP=LDZl8;sBq-ve?tD0I%+gF=U3 zuz+U$;K2bpKmZ;bGV>6@(WDD978)GFeK>++)i!W&6obZ^I)A>%-i8qp;3VzSYkNYR znE?_i1%E*kT&DZPnHgTb0gV=b4j6{+vOyVV2Cqo&ode!~18tFk8v39{AvlR0hcxTK z?aS^p;JEPVE*0?Ut_6pd0BBL7PcQ2?P&orC&Y)un&|6*R+krz1d^DK=sBr)?6J(8G z3;0}bPzw#zivYDfA=9F^f98N1bvfWkHn6R|qLSjE0N4U 3P5$>y&h1Y zL8L&12)M@r8ax0k>F(}P0j-4K7i0vbQqZ`xPp5%LX9R~wXN7>raR*SL#Nct<0hDPO zJQ|OHM(2>{2fACp`aL=gd^$ZqcLKtU;TLoe;1>jI1v&BcVUJ$hYhRh5hqr?cF#z{c zUpQofI_oT;<7l?Sq#>P>UF$(J3dWFQuU>Sl_zyk`29g$G$E+)DgO6(ZftL96irzB^ zr59Got+1n{;N!~9p!Eely`t~7!u3c&^sIvD5k=7hJ3-q8G$MAOg3Z_RL_Oo-0H01C z72i(q=@Va |9|b2#(7~sVKzq6PT`qVwziIHayjtrAI%2B%*#Xe$x}cM27(arS zqBEZIYPNaBP 6~j zdi0v!o5#%H(JLyx7*xN1_vpL{kI$FJn;98U&)aQ$0~)CWRY#y|2(;W8lty56pl9cG z&{4-8pmADII{*~ vE2XcFOHXk)`HGJaHE1EJJ6cTH|ClsXd=j&dv0^c_Vx zKJ#t;#^0eK3v!c-iicM(kAY9;X&=qc9?ie`>&?Memz@J$V{`y{ysN>6v6{cd6f|`E z|A2?(;nH_6SAs@tVeLDQ=HCv*S)j%6_n>zW^7rV1+RL5aJr2HSLAnP-@t6nWF;Ew! z+egI#-oFH$AIzA>Uvd<5$=3nb)&u;lp!^BBeDFNzi0%429-SXv-UF5D@(v6ho%cKr zzGL(5wbAqVf6VXz^a4tF``-g}l`!OHGw6L}{P{8L7e4dnhp<2R%%AVW{sCkqdm4Yq z-8BA^t7-ftXF*nju0MphA&o!(Q5yg2#~{%=uAG-$IS-et1aWSsxwhWsZv~z54dUK{ za6tp^X|Ao8_*+2-4}xwf<8LYd4_cG({#Y9S>*Hzs`S`99d S!LQ*;Pb5hyZVtEch5KbOY;`g|IH{y~_+gBS`GAbx2*z~9lx z!oc9wD`Vivc+B(vF<;Ab{Jn*sZe(*bXbk{pRL-fv#-N(NH5oKw*?Gf9^8tS!sAz#6 zhTQ_byeAEG`4FhG05d?9m9OO){`P**Hbu+R{QYe*pakus;^D*i5R{ie^$V!#0cioX z>A|V#c#FydP V}aliSeZMlj^uV~t3CI*jWmM#y*3x+5EKk(?yW_H{I zTAJy&o$)1T90R;1yZJ{of2#{9bM$62`*fc3(0s?=#0fLir`JRSyr9IV^Sei{=t3rD zh8O1^GJ?+A_vy8r#>C9P-|<`=w01y6!^iR|=*k`k{{D~B3=E!@XZZVHNP||Zd M@W;3{#59!rR0S_>P${g?n^zjyz8?fN& zg_J2CkYEED>Cr2y2EMML2doMndLKVRL(jAM2=mJ*P>}%+2hh0oYi~%HfR-I@WCUFt zYY!0st+jov2VsMj*uGYRut94(UW-B4AV0k3g0MjYeXfT84NrFZs3gF`&`b)H23%A; zz+nhd4hh2sMrMW=T@S!v$lswW1`44^KE24{rz8apKS?PD2G^GVCHbJz7_^lG6n(Ie z18v u>m?{{Hq@vjFo2fngBFjL z7=aw#dF(~1ENDF95`W)B1_p)(3oZUuaQ_N)BgiR_&f^}P*IqcuGBIpqd|e82BWT$u zvKv7)324D7)I?#BiJ(b+kTW}{fR~$sA{@NB^f+YOI=BKtjc||&9=)PRr$U?!8pnK{ zV+cOl3A9H66rUgmKyJV}?g~#=pq3cO1)w%gM-TMmgE`=B|DXT{?Uch}8^}nHUQu %KAu(PiM8Zk{nS1E_fD;r;pl|4UG>)3@^+ z=*&S-(b5UNzz|$}L)JKeOBB$oB$xqOUJKIOo+!@104lBeBS8D*x_#h93uxgjsAvIc z0TnHv>z+WK0W~Bco)JAe1r$!u`(S#vfY U#gh#K;QIMga(1o-&d^$})M`O%d0BvtT#~NHz0z5kJgTfkgP6Mb2 z1U2$s2pfYA+e!hgg?$1#t1ZBn-{p_t$(92?{H{NJ_+1~uEW)rL6U_p!*^mwUJ>U)e zFSZ+j@>_{YfGcRk9JGO}^`vL#S08?tmn{c;`CVW6@Vi{}X#ECi=Y!HMD6k-7&TGJn zlR=kOCh)hof?G1bJ$n8Ads?3L n;GF^y)!Sgr^coN>z@+g1Ha)`ho(5yV@8Xn7IrPn~$ih$SLc<}rFb2a=A zYGu_KGBdoELvAm5g2rI~dUn3|0NsF{%m#{t9&k+iTAt@`?h*op9Aq(uZ}xW!uWlX# zkLH7aLFbVcA9mcr2p*1a2c2r%8~-14&{^|&Ay736R(9jHfJblee~;#aCp=njdvso| zOYrCp{NT}B^w*>LAA8Xw&=^FkAE<`uHU!-ga?zvnuSa*~50B1|9?k#w`TMOvw;!Xp zxATPO{}cQjpyOE^YWP7XlOHU7_3{tstR>KRuj5um56D$_p1t{u;M#B|1KdF#o}KT& zSNy@l-}C=5kLH6GzLp LF8ET9Dt2YoEhmA-ws2Gpv6&JRQHym3`{>e%p?vDCoV z@;+!p51jhCA*qkQd6pmpgLkLQA79J&{LSkG85sOKO@6&}|M&m@1a!qO4gdZB?`rt= zf^-~A ? z@^3ro$#{al6VyZi^%}sJ6}uX~g{G62JfIq;`JY2^rYmUo*he2t&?Vvm{5`)x39}P4 z0FBZwIOxN8(&InGCEze);YaNdyaAn8)eO3^7<|ug{cX?Alb)6z`FlXw@#Q*@b>Jnn zY##p)x*DE*ErZm4_G|{-PYiMZBY$5$=)Q3${(KpJaGdZ9fG8h+1rX)J54xWirB84W z> 3hZK>^I)3R+VS;)27QzjYlblYzT3S3xY$xL_$Ln)u(d z#_EE?_ciNR9T1HfzMxCSJsD4WHXk&2c^vHR0|$IM4 MWZkz z94)o6hT{>?94M$ve5nr(yd~fxt$m<{7+iAVPf*CBwjD64^kXw%Z3aeA7YH iO`y`~ qjb{O$-IX9QIT zEx*C5%KkC=@cVw-37P|OH9P>iVEwZuIHB;)2GeDiKns-uKzm>!URxX9b~U{1(aR$4 z(R_fzqf^4CGlB!*j2M*wME(M8%?H e{(Q5_$Ciw2L2XMoeypdR)N-2T0;g*`J014$B%VGW(yi@*ckX*qd@Xd zkz*`uj3_QV1Xd1he|C$AgLc01w+4d>-d+)Y-_Aqe^NkPj_ojo+AqJhZ9t84JvlXjH zZ;(al! l{r~TDj769c6h5Hb>uY(7zgYyySkLTF7CzlM<{UoVKIQ_xo##E9fAZHW zL+fXs&fgyYPxE(3F*7hYH`Lhv=kn~lU;6T;AZY!1=ULC@pAP&@(?R#<^=3M}=AYov zeDr`v^WS>@wklBl>ByfSquT(wPbx)s0*K1dT>zp=bV2p!jWmAH&GDcc JOko z_n&L)|5Ayx*4w4RY5e(r()eHh1_?h;b8UT6vLMYBbm#pv(7+vN@MaH)!GHZu8i;cb z!nqCNv=sjbjoIA3na2Mf>wWTdx4&KH-*(%B@wG?u;f9xv;LUdjN|ZdBf3cRz_`+^@ z@#JP;@XWqs;n8d(&dJ}h7BnyqN;<8eV9vf^;nN)=4hlJO0dTNsfC`1an7^PU>)`cj zjtw?UT>LF>KvPJd>!%NvzI|!?7j%I9Plw`I(23@!Jv9$|Hvbmj@8JS3FTL$?@HLCa zz7L?b>i_@so{FD684r8>KMXn$IszPqGE8awB{$OeuYU$z$CL!BFPjfQZg%<2Sbx{2 z^Tx{~;8V&^dmenv=K24y;epo@(D($6r+NNA?b-aBk-x7VRDU}1=bJEr;v|O&)WFV9 zVNw9`VwgbnC#XJp0g0vSZ=kl`PUFx2o5uh8UmE}Q@0{;A@0F}d zU%{M3AWrLB{? Q`_&{NT}i z6yzaL(A{pmUGg}MpP2OVS_7&50Xo}E(4#l@zhgsSO&hm{=Bc|eg2+VAU5M`pI#Ml z&*mcvzMV2EKAkn<8lZXsQu)pS_c~s)g2Tnv@)l_J3)I2nZ>|BYmubCSAq_rN8B%xi zcQA4=F!)%Wt`mCs9lRRot>JA@8369T_41f|HXr2h?bP(>j4>BLZzO~6qX_^NUY*Xr z|Nnov;}<9^fwB?an0v_%Y8~<4{+P!9{!QqP(| icd1r$X@5Loj%w&L7Z(3TVq0C_REw zs%Pdu&_oZk%>uc@9kfi@r %-2JMOl=>Tm|lmK5-4>I&K zf4z$e2WUAJ=s*k5A?BbXyIDYU>EPXjAmczIM<5r07Oa56z^C({Pv Ajklj zDs@oc7j!W2IPL&i5(7T67d)fZDFNDp3o@Nw(19b3Ki@?q;WK}|gTzbFiYw2~zdoJM zKq(0n!ycVC;p1fzJ0Q^vvcsoS)2B0$!=p1(z^AiP!l$!P0o20s@aS{|Pdht!bUGS< z90Xd|;?e170b)bu`5YZUaRuUoTm!OL0DL$4aR< A~UA83CSo1}7=#%=7DM zo|Z2?`Q2Z7^xEdWVq)0m3YtyjV`N|eUq|NI`QpWQumAsdg04Y&-2poA0j>yi1049a zJ>Sk7zMVH;oc98)60uc>D_8}ZW(Hkq0zOse<%@L?1#EBy2SExz_awZS43T>M66S(+ zFe%^8A1_KFvS;D4hd{ER(Or (gu~MFG@WB{|C*Fd-U3#fU5*u=mx$_%(wHyi$fh? zr>=s_o&uQzx_IWbiAS&PB)B+eh7Y{g5afOti0vhC*^3}u5D#7eDfsOHHZ~Zp;4Vl3 zXshCj2Oz1=Lms`h)4D)wiH^OH^9Czs?_p*DE#3X}f)^qn3fHX<(ha)A9^~ZtAOm`B zzdwh09lUk{w8R2*mqnuo+{;(tD!|SI9r596cmTAj>P$Omje`kjjl+iLObni#A0g@Y z56B*6(6wKy+Tq6Z!Hqc&l7>XWjTapV6*+JfpgRY58iAwf0qD%HWROL@w%%|BPeDdl zgB4tOan&7ei6&gdYmf?%B_Q7@gY 2w(0h)}4#`A+`uwcmq z83YP6P-eW<2J$iZrjUJb6~!PGpsfj>pcBd-zS!CZch5|?BG6r9J3)&+pu1TofK2MO zt$-^4`39WNLH00#yoBVOK)5o{)nnik3{vI|G6Zs~nm$|w=rYBfpltmz2Xp~rcMo(b z0k*c}*kt%Rkx!DK84A(J?@XZM@c(wg)|P-)^Ev*%wDa$O1_sbEOtvok+t@vNS$l+; z8C?0d@i2JyHgJQwp3Ohbl&d;6KV)?2Jo){m %EYVag|kJ87h};w2mWo} ze0w|WK% s>n!IW|A~ z;Mn*JG;UO?=-B*#-|^rBp5|xv2cNOIa2|7PerWH=`4P0En!%-$>oEVedS-`)|NHs- z3;zHA@7Vl+-SOZ9A+T~DnDT=U*&I1PHb1v_;XDsI>7Jp}>M(r0f=BZk3D3?4FIwV3 zhbywEfYwNY@8kn1abaLU+5e{j8ms6$4I11A)yE$2{RW^lQJRoh08oVs8s+flW%d39 zxkduqIs>irXJlXiZBzzrx&VuHf_4*wH`#SUmg0k&GN3jbNCmk02ikZGYVLq`<%9P5 z_SUEr_;eflbSHCwECN;KAR5#F0X26VKy#&_!8lFmI$}^aqL=kJwA}?-cmf`IG5il+ z;q~yvUJ39DFYwk_kSwTG1TqZdA;A_ENCOFW0L~H>kog|Hw&LZWMP4z;i@f|lGBJSW z;X#@q`(?rFqd|4g&ot0H@)q!6JD^4)%uvwGK4?q`)YkFn)&}_r =g~BzN9?u`P>%!L#!y=nw_|R#1BM?R*Mav*!Vt$OV=6p8G*YfF__p zjU|vVpeAbzSbw)0 2QBmru` zfn-1@>j>-vO_us}en&aZrPu$zhvf N1z1~rMwSfAU1&;h@hb^2GB+x z(8Z+;AZx%^n}e m=k-XfxH>r7FBSp-Tym==MmT)1aIU2>0JUSZOWhZ+o85gXuYc=G>+*F~;|PYl1k zybkKUAAF%ungr^Jf&v(H=Vd4;5rPg=1g-w|>19o R%GnD);&p`KrPhn K@V`eV*q(`^puAEd1~nJ7oE1D1>+y0aIP5`J)q~fCfX8GzAvqA_ z2SI34vvZ9K=(adej{{V^`SdOUyTqe6lhyP8dC2|co}F(&m$X-ag4?(AFKEkRjz=%= z(kN_6Cjpj15lIJhp>_f!d4l3{C&-uJ%<~9#;t*)QJ;Af_CnIQ C^y78a~ygV4>S_#k^N6=Dj zkao!R6QB}$`881G2i=JUTC$e|PS8EzMOL5=7Pz+S^l$+6_do*(plg0W;{%}6i$P0B z_%-H$SHSQKMi}r51}N|gdVp8hHXZ?0nMhqQ@Q^>KX$V@I8DRL 4I=jWPvjJaTgVM`H3YHfT{w4eW0lH>HH2$ z_n`WMIY%V{6ceS!K9)~w+B**(e97Tz_!gYfUMGOl87R3yvi0kbo&W#;XV~x`A}s(` z?b!Smn#yH5PaS;3!N2VT=QT(0Q9#ZA7)#lqW`Ml}T4m{D`INt32jsWTH=sN50uDap z;NNz@gY$&v!KVtIoJU{gf>z5l|6t^AeF#c;-H>H+p#D2(fiq}V0;vD|@-#@Ym(~0g zq)h?t0)wt_V`N|ebtXV92Cx{oO#yG1fFivDBnPT&L6tkGXAYXf0SyCs^s)*+fEWi` zCI;$dgR@XC?6?rfO|&2_pyf9pqd>_SWE5zy#{=a=5YYSr_!tlmP&);*$L}r=`f(ue zV^> VYgK>SaxS32_r>ogFA?gZ2x;ya*N}&5H*2A;!UmaX>>PFfW3| zIx)QnTDt}JVkcz12dc+dFg)e~x_AV%_oUbM =a>wo^1@1R@_I$-b}h|zfwT H5asau6ia?W4j0np$oFonhgzUl@Awf@kLi@Hu49eL4?#cAoImyx@89g(u?$ z&x0>Gd@~Om25Id)<)eAXaVO{u2A^J5nVF!4<(GVVWt|jQ7+wp3Hi0$%0x9(5cfRD= zeDI%Vx6B2P*4rg)9+ut`CF-aOd|OYJ2*Okx2B|3B` yeh33S~eJUk)Z1(B%7O Wkop|7+Q=3p=gIGU(4+Yf z$a@D6-cv)BZ@mQe9azCpuY#&t#r%AI6*iA9{2< z8@y)m=mzZ}_*RnW(d_{mUjudePV%?<{{R2~brop+)e(W{!(gR39^KBMnNEY(N&MTL z6~Luh!%xN%!`73f$}I; f8cck=nP#3W`=#SpiBX}KXNB@ z4B`cM9cV@e9= =-<=mKh$*MN@qi~*eveE`X{7MN*>ZG)hTk--K=Kn( Ge3wCtiU;T@=5M9CKE13S#h@;Kjf%!T zP>}%MEw>Z2j@GyH;ftPkptXoTDh8mAtc8c>DbNMZ2B0BT4RBWkG|%Y)TC?+r1ymgg zcz`e8DN&K|0NuO;JrLIbG%gQny?AtoGI(_Rf;P{98XKT~Er 9T~MRLqnGu{ zW6=0R2&m@)IouP}VAKE|f!OV%qTm>k#Sq{a^uq5D=%}|N3ZNlwkRd*uk3sPTu8g{; zKxaUDz-tOY%?@x4(|Vx9i$DB;Bfp?4gJ-9nZ)X~ZXJ?pzXQ!WpXQ!J2XhWF>$SW2e z2cNNkeC+^gIe7T=vIZ1^4*0(LLLvjy#=ZHH5nLRFfcy$NTdzAtB?7eGsY4DV-VI)N z>7pV4ifKeDu_;1MB_5skL9yE11KIur+EE4C&lLKiloRYR0iSLg72nqX;LEdJt{a{N z-`dpz9#IE{XQ@8Or2-zUmr5jjI{&{|X98(>f#iHTe|mJ@d(8?O`1=Wp08lFS=;ZL| zEZ~6p+oKzNH?*4oh@s%w=_cWM+zm3=-CYAZc)LUeGZa=8f_96%d?Az$I<@U3D7*qd zu1EldRR$=m3VeE5OPZM(Uc65Ot*HLs(Rc)u(~z5Oy|%`Mpdre8FTBk_+c-f-hJ(-Z zvT1~mL}jpplBMVmCQyj6E-rwLM1giW`F1{Z{C^2`|4#E83(wBepFQ|@90DJ5(JT#a zCVdBG5b%VCXXh1g#tsJun7K!{mx4!kk%R~1Ip5w8mH(cKpL{x>`)FSGZN22l@AAvH z^Oq;%uOfa=##2RHKGs1R{B1?x9 {l*4Npct1)uI9 z1&{732_MGm9*RFaHIIM}TH|+lV0hA}^WO$WAI4{(4!T4UyWvSs#!toUu7)QKzrD6G zJPE2N86fx2fkL-j)3^11g{KeWbDz#21;dk|wG2N!I{&>E1c@7ZF#ZFJgYIkxEj01~ zS*v- p+u_Ps>564mSLGybhk| zKC^%mUFm%$2FM9spi{MdJ8wAtzl6AzeL6z@VTk(7+o0l#wJ#f%NI}(+ y=y$54`;0 z1=_p^IUmWPqekTi=ya1Gh&CR0M2w%+@T7+=L8g~gax+m%cqWE1dcr>46@#qxx==A1zc?&cw2~zFR$?VY? z%<=LhLcm3Z1GMXy15~d$ARiwK-r51${f2eJvu}5rfNysmc!z2Lw6+du0F^2}DiQG7 z`jJoPOUJMmzd kq#hhgh!KqtX{ z@&L6zY$MEB7+${4Kxw~#+ut6YpFIx#w)Zf+=V5r?L-W3e );Q2&?T^jhdeY7 zc}N}v4MYD0&FFN8sBm}~-U7Eh3~zw)xa2L6qoNO|O+ac7HNVjStqE82?EL20`5&~L zy++xQe;fNo#^xW|C9cgsbW7bl{~!1Kf6nmaYa7FFh6i5GWMp92z~~9;sY-8P1Rn*~ z8KNSw4>ZLHS(Ep&n}LA=+y@5lbAspxHM1a!Je&V9gO1EDN_T9qHz-YX =HK%C?Q ~2>$*5|7&-TUfYki znHaz`rjI}jZI52tryzzB=)MXNL(-$y_8N#G;L&S)9K>LUG9Y$nef<9)?EGlQILG*x zzkh+JL|5HrVgUERU*GGz|ALK!f#LNn(E2XNFi;MY@BvNrhJc5F>ykY?KY&^l- (uhU1x z2Gl(Or9B2v$tnOk$B`c#F5r7}d_bor9d`v)#phfNPx^LVaSRIZ>AdUs|GFn=5!y#k zF#@^_6nw 2F@o0Xd0Geb$%;g{~u2Jy=C%v5@hdAy8 zE% 6r`#PW)^4!8Jk&ZH<%b+r-P&XFGwvGNAZJ{xPX;_ngQ5M zd3K$N;k6=I$#xv3oB_4^Fk>8?Xh8WfG{C3xHaG>}1_iqYdi Q3MdkMJ3+a`5y=A38DPyv1VC9t!3UJaS`U=6zg7V!Y2QvmQ1QX+ z%V_M;d?W(7obE1BQSj|FG(7P7E@%Qq0o3^o@ag;yPQLeCI$wEq9`x)y`r_UK28PxH zAYZ@|k0W?~zeGjh^#ZUZV4Gi00kgq90iRAoP!chC-R#kM8016n>>((nGGJtWke@&k zYmnvTpwtBqtJVXh8$3F1c)$V$TxNheJ)o1fUP2NiECoXnCR{7%bWjBpSGRur_y0fm z=#~i{&2K!w }7qBOZr6K>LKiqX{0MgGppgF){2*1&uQ71UYQiZcxt%)G~UpPz78w{yqs) zumfCjfy=L5;B{7@mcolFh_WkiWe{`bfy@D|Ndqme2~&ZMCl7di`nmvKpNfA6*Qdf) zV0}AKwTM=qHvg~Z@4No#|NqAS|JfNB%7r_B9(>8xaPq(|&}g{f0mE;vvpavNGW?Kd zuw}TxzyMwk)A@tn Uo2OB~2JPhR$2Ve3uoP5xE{NQ^w6?>kBU7+;? zhTmRm9egR&aPk94oX4^AfaAdzY>o{N>>V3UG^p5j9&>0o*8twd>e6|@q2al`L&N!o z4j+|2psw5B4i}Yw4jm;b|3Q7YKj2ygHck)TAAr;zfShLn9{mXA1dUjo1&_FUa)JhB zUVzS~^KAah>9`x@F&}>48=k$ ~rFww#Fp zk>5e*8*;g}oUBxH<=-Zw>Dl=EBLf3NiG*wCEzsH`uU;8JAIsNua`5*3|AU^Lr$J5k z&YQlLuWR DNa*duM`HAVI>-qxrX-N3U-CJ0^xAqlOwTru`7z^`I3{9~?n9@h~_x{sc|Wmk2e~ za4{c%_7C}eFZy;~_GCQ$61>m|bV>*Vs9YBCZM_XzE-%5~w~!6A>lhp#j^NeJuAut` zUTdNBCp tt2Isu505XW>Ld%f84z$;MT+yZR{Rd9p^5qQYJ zr`Po7QYHpRE1fuSNX0Q0i+l9yR=oustai+k@f6sMm+_#E3pCKcxd<9)K@fFC*B}N% zLJw?k{b9%EhaVil`2`kw8^AtsY^dQx3d5Veowr_3L+-DDjvD-a)3@~rf6F#drQHc0 z^KJnjMe5sn01~t PN)HBJJR>t9?icULEU^0P?yjFlo&JkdqCqQ;Pu+zsd>n7 zE{h5{B0xtbbccY>G4)Xa4R%gX1`Q_kfL9{C*!3AS1`9o{5j=G3!S8Y%w1`BS6|__N ziAQ&diUVk9!2>j6Y5;Z;Xt^*Xv{r+5E_a>*i@ux(n*ZyJ0ZkK>s3d?UFF}q0)ioeC zXdwb9se;&`Rnwr13}S;8g@B405F3>8Ky4uq`vn67==u%t*&m?6V9;71kT_^A7gV%^ z*r3Hzp#C(74Vswc1O?)8$Q&}LR}T`GU}Rtbtw;s2L9IPd?Ezwg=9NJUbwO;<`T_7H z>+u#9@VarRIiML*P-6q6#)A=5VuF^nL(Y8#t(OFegC=N&q3S^s$)G+sNE|eoED99| z%}s-DEd_~#_78%N-~+KibsA`?B8UyDKS490AU0@y9B3#H#0DJ#3mTsTu|ca3KubbF zY|yy~pmn|=HfS{hs5S$!L8Yub)Lzi)1W>gB5(gbW0a{cEVuRLHfL4Tp*r1Kiphcu0 zHt75qaDU-A I2-HfSLn=-wfaUeHQDJ*YV7bP~`yUywLx#T{rw8N>!%I|mvQ1+hV=lYmy& zg4m!f1)ycAAU5a%8a5cpOwO zfy{8}u2IqP?2S=j1m$K6k4_2jWlo?|Q$SXN7lOp72)x!rY7c@lxhLaMpH7wc9{-Q} zbUya%JmYJ5m%kS@z5_Bx!K>Fs!>99}kLEl0&2zmWDjF{qW-u~%TE63NSqN&~cGsv_ zcy#l;cd@Qf(I{ErWBJgB-{+x^ Ztl!-r=8j(9`mcBmbO(E-fcL`CadTf*&;N=F9K;$b;V%G+hC`za2Cw5CGbV z0%{z*oc;a(f6vYfphiLh$cY)C9ptR>??4TZe9?3WEt~%ibYdyUJ)knNq6)kU;VJ_I zL+6d=2h2Oc