From a3d1968d092a1658a6f2ebabfd5e3fa0e794bcfb Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 09:13:45 +0200 Subject: [PATCH 01/11] Rename context -> ctx --- .ignore | 3 +++ README.md | 2 +- docs/manual.pdf | Bin 196488 -> 159595 bytes docs/manual.typ | 10 +++++----- docs/style.typ | 4 ++-- docs/template.typ | 2 +- src/base-type.typ | 8 ++++---- src/context.typ | 14 -------------- src/ctx.typ | 14 ++++++++++++++ src/lib.typ | 6 +++--- src/types/any.typ | 6 +++--- src/types/array.typ | 4 ++-- src/types/dictionary.typ | 4 ++-- src/types/logical.typ | 6 +++--- src/types/number.typ | 4 ++-- src/types/string.typ | 4 ++-- src/types/tuple.typ | 4 ++-- typst.toml | 4 ++-- 18 files changed, 51 insertions(+), 48 deletions(-) create mode 100644 .ignore delete mode 100644 src/context.typ create mode 100644 src/ctx.typ diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..7f8cdd3 --- /dev/null +++ b/.ignore @@ -0,0 +1,3 @@ +**.png +**.jpg +**.pdf diff --git a/README.md b/README.md index 46bb2e4..7c74108 100644 --- a/README.md +++ b/README.md @@ -31,4 +31,4 @@ This package implements type validation, and is targetted mainly at package and ), my-schema ) -``` \ No newline at end of file +``` diff --git a/docs/manual.pdf b/docs/manual.pdf index 7df58883e80beea042c68e949bdd2524f4d2f509..01578f1cc9d11427c23aadcc4b675d6ea3f63ce3 100644 GIT binary patch delta 107041 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�d*?7WsR3bf&5SQftYqp#Yi)5r-UFCK6O!V@6HQqon=LU&~O zAP<8Lyt^3l`W7j++u(_bd*)g23s1|$som!F{4*>V&KBG?`b-(E>qEm=7@PF=k+S%S zZ39i@aokbHvg|`+kI04>c6ad<;PIXY_M&fV0+s3tQB}dCkBO-+pDSHcL>ll2C#zwz zW}HTKn1WLWP#JB4nGpetqp6qlg9-rGuY+mYm>d_n+q>O6K-iEdg0H75`+GI4?Hs3A zz+L)dJ)ynX;dKkc{6u+ub*djuvGn-oX4*W$!T=n&+%FMI*6A1k|4)&bXobZ3c$07T zqlfU_ngiEq4QUssuLoEyA&cu1rb-v90@QVE{t~$UAh6$)Y?cAIMZ2!Ug)iY#JKMW0 z((Lc>*bKa2IC=#QBM@KuS5_`29&tISY@};}#wT4Zr1UJZG)IlCub_4OY)yJ>Jzfou zf5sUt$!@L22#Bmw!^%$T6;4ThB8oWPqPdpR=RW?Fn(X!9ajtH$xcb6SJyp>$Tb?KR z=;*^@9J_^TMlcRA4|(MY?$Fhqc&ecnL}%PTRj^QpwEG-7Z9Hy9(xW!O>d>w6=`QZQ ztr?Ctz_)6vR1g6qom9~@mzf-=qjdSinxKjv4>6e)hz(N1BWM_L@%pJdE4JvsH` z;~l;2#sv0$L#$@nwhEtAAt|ut;w!a0&xXLn%feuv=?MmSxFZl+{Z;3Hd!QPdG)3mFTB=RG+?nLV<5LjBBvIx@Hx!WlB8dvWsIBVW9&t8A}+r0y1cMubfg z%+xHM=6vav-J`j(@EZg=?H8pF%!lEJ@t2XFCA3lE*~N$4PdebEn9K3sVVQpn?8RFD zCFKKV|I=4N3hDG9DyQ}D{D7zoYYym;a_4um(>(a zuHN9cT}El(OYnYgyS@D3e~UX|-V~U# z*+Ac1J2TA$aUQKm&ISoX8M7JQj~QeP(2x>PzrC0G8vac7Y8C2mmj7d4GCaT|CjyI`jtWexj&+cglk%}R(HQ|=y)Vl4L# zz$q_R8I>4~Hvp3v2WRT;Gxmzc19&FA&*@*4@y_7iU*`V~go8Ehy$K}1u0M_KMVsGlTV-t9&2rI`7d2N_-+8^3<2IMi6!C(lE%3(}qYOj4^ATxY2 zzu(&QUATz`=E~eWXFz$6gjr<~=WrR(oS$jL9R!kv2uI<8SITbFC5>HK3~qn;VYM@w znEDz0j%IxCD&AdN1aLrNrTBFE!u(liohPTB!e~3wSI*gT_|(HglOCZuIY$Hk6QMe5 zeH&zq35mv!4MZI&!~}f9PTN!`bXsREpS?1NU&O~%sL0@8o&bz?uG6wvTP=1&D_v(k zQDWFAo{HvcW25MFA(v#kawm>>8C&%XKzcASsyUB+VB7zOhn z!#wwb#jtUQBPMc6&NOQccBl5#kQ}}B=p*x_D8B}3*iFW>$+~aS7mD-U-%d}<#U0r- z+f>o9tTXa&H34jx6%M0`6H#s7Ciq376CDm2Pn+uxT?N4$db5f_YjMK@5S?f_TH|rB zn$UkBs%^{A;lrWwpb`FPyChRH9(%iQ!)6+>=;l(BmjG>G!UQ60Mw!8(pn(Q;#sdW{ zy|SvocF7XkX69*aRU#+KR7U_GI7G~K znI}04^`!PXa?W;Jieo|~h)1%O;e&nv8cIq0pl6c5Gxu8Xz&lbh$T9Z`;cy5}{@QE0 z6^J!#mJMJCw=;%)p3gJ~rzP5oAt0>}9P=Y6%cUD=F!g($$VGeLBgG@CA*X(@jg zG_sFl`}6P{vNyXsqX)265T+!KcCIm#(`YJOo2-sID=;Jrf;W6E6qu!k`P*PGMnvFs z4*VcDFuK0glz#?K5Z{%*vq>!*bZOvsWxH)Z0|Y?lb~nmrDx0|eu&8S-ehKWx_Cr#XcFXA4L^m41@~M~6WD2%*qGHaV?IAg1C=#hy z%sB*X-5iS9g#cGUA_dap@pwyGXK8IjC_rjbeIm)c{ULciPzX^ zGi|8wUi_=p9w>?Rmc4J8ja!ci*jPaIBIAqPz$2J6dr8%eYV_BIOG4i7ka?jqzLkxy z$Pmj0R#T{{2*;PAY1Yg1&)QGN$O>osrOt3@GoUFVsSPr;d200T*#PB~J|NAa6a>P1f1NG?4KCUdpo%=fum_xrnU;~OgS3DQD-Y@t6Sd@N z+ZQ4}@Y4Y_6Teju=X0IHrWkBE*n zmERPE1o$R@br88wDQ!1{v`tvj$u2rk4H8 zG9~e*!>0hhuOUfM@#~m!0J=x0Jr;D9aQc^GVz*tr(xHKK;ZkdetnGchPx3>I#qVQi zl-x`!sXufiA4~~SCqoSJg4M^@D(fy4cMlY}35Uj?M%1un+#2udA+D0EM>I?CND&%5 zJap&zMiV?i+fGhZ$jjXfa$S_>3xk3DG#DsLVkoY*Q&8q71E(WLF$3M}D82aO4Ziv<9$=I@2u@O%h=-RXo2J&u>RlmTU z)pIwNi{x&X3brwGnJcufZ}5TD-}jYzmZd#c-&3&-RuC=F6<8Ix9Gc=TiAeB9aKHsF zu{7jn8%%BsZgQ?90ebFu3-+c+f*aEk8@y!)8xCXSfT6yUR!casFzjzT;)v51tuCwwqe`5;@i-lwwHQp2SZ0%xK|JvvgJXd)8D+x+Gu5Kp2>q zkbehG2p4mtts&%VKw7ZJJZ4fI>sGA0I*PAk>u{-rVUO3U((kZ&-)#QW?!0~NT1du90i@-sb-PK*y=8C=XixcEqNyPXIk8(|DG1i|8-jYr+3aI`UlnBR?8<^4N@jmzt0=iN)e_SyL3=J*?uw6bJ_F~<1YC7d-qz&eFs5?!9_5!Nq3 zceS?kpfR2E@TGN1QsA17<%|D!aRZ2K7c}gb%AU#CsTXmS2$TKMskUs4+I57pWmEef z3z8)XA<98S+@^`z%*M_0F!t}SqT~}lk0t{4LwDW^TFZ^3v;I$E&mB+Y_kSLeokV7K z_PBdQ_D(7kC1sb9z1P)1A`*G1jCM&@!zNkTGf7$5k&%kh_?>%6b$!0CpFeta&+}gA zz0Uib=Q-z;r*hr*cpelOsQ>d^pXU2*(U-XDZttz4``GxC6kqLMC?cu1BL#I>UWukA zc*0I!JwgC>kl3u%SC`V_6AH5>cl2I4-;xnqZF*6<(C)}Pj_rAewA1a4y`uPT^vo6! zy;U#T<6prQx?u>BtoEdz$nOi$BeMra%yx-wM4xvaema$6+-w_o=W3u@ z$K9?E2UVW=HE0cb6j=^jb`l)$t4k!&n^>ebf1yKMkKrm$Sg_)z-D%)nG3sS;BEY~s z&6tC<=TQe2F(?DgI(9I&yf+)oEU)yY-ZkO9_MkXg$A1fH_SC-kb3=jEs2O!8|LTk5 zKJ~@Dnx4;ss$~*fg7V%l)oXCAq`4PRLb(^>LS3BBK{n6zH2}xO$?LN}v>Bk%eHw9>&Ww%HR zbRylgS-1BFiI7mToRiX{;kPpb4(<|IQZ+re-!)fc`-1zG`CE~;*(G9edwo4VEgKL8 z-it(Ul;D(5W1dZa$9^*DlU#R%xu5?%@MWn1huMILjw#W7G+zO+aCt+jZxz$GS6sPL z;oW=>DakMe&9bCe<%=q^(EJR4&VsSZ4ExZgW*E zbmRV#wu>fW7_^4wvyPf$xe*hnAM}cz%>8Y^o4y^xUn8 zZj>+U80Yz>e<*uoe|lH6*`#vBcJz)2#?7~6HMWd7J+nLCj*5-i$Dk4PL$dd(R`{Fq zk(h9y^H08s*}k7K4R^VieEtLLv04W0Gd(p1Ws(LB-sY7^9(oSb9^SB|{%2o0Q>=S+ zhl{-(c>O=Ly$>TD*PTVFby{g*KC?WB%0^DJ^HqCI66Y?K>g7&JO1#8yB0gNoFqFSA zQ*Y>W7XNU&&L_T~af=+D+h)@0<<7q4(j5ld=^q$2wc%@Hn5v`?eA${=cwRB>=EspT zvF(oS9UnvO`BX%BO=OBT>-BPcMz$Ure0)#Hh-GV^!A8iS^z&5Fr zKD5{=ct!(B{~(9GFJAMjr_uDC$$dA|b8qp=6(z+x^RE39;F*2}fQtn9|Yk*Mt zdDX}5(N%jZe+tEdE!=Q>4&=HG+<*OFAHPx7OHzK1FKBS#J7s)XyDVhisSQsyAJlpu za`L-thuz7#*sIOgeZcnd?HOOLPgE#kOEmRMdci(xz0=`&d{LM5qQ2|xM=@xVl+?5l z!kTpUH7_j}{WgVcX2`K~XFHj_Z?SW+rT^`(FFA#Q6NxeE%11&b(gc;IJT&R99M4MX z<{3IoXPTBw>i^Yl$?bBAX-B1b_>)po4)s0eGg}#}Ut`g~CS7*sAA1DL9Hx_PnJF%? zu)WRE*lU$xVy zZf%nTCaPR!+jlzJR1lo{eJ5^TkZ8-iA9ZT^W0#?+-lslsacq?coV=Oe;2h5z zX>GNw`Ic;l%ZnJMJj2^Q_Ss$T0W;}mFEiPi$ci+xMGqlH2b*n_n?y5e&gG^U3MS5{ zv?rLBj@cC8f0F#eHZT)pq|4@*(-xGuZkh^s%_1<09@PoHQ~K!6$dr`eYUMzWoaDNV zag7`iljsEckJkNQZ;$i_qrT&z6UaEBmuUEfjupRLZrJFHN{OZT*Fwl;{C)rW)3pX~ zhy_PZ@oSzl?YG)JVy<2(S)$k$V}&6KeJx;SqkYLxk0eQL_Zh9cEp`6It5u?Q)Lt6E%Xc6J&rwp z$G7J3fhT60cgZa)E$oKhk zi3c{c*0@THkUAr-3U;&T3fN|*EQmOtIw!C@_I3JVBhAgjaY1%rQj_LhFHdI{&Ic>= zNBh1>#Iii`*OX+r%Kf7>z-}6rI#X+%CLeXU*slIy?Z^3x>92=e%Zj28JCE-n-AcdQ z`zd&ej#e@td@EzH>Gem3`sw8j$iSOjzU}8lQtw)^RxdS^{3nZP+Kl_vnNkLhZJ&K} z_>{0u?)5Yrat!Lh?Y-@ywdY<(_cuDZpcLMq6<=cNu2) zM{S4w!$BOUYGq0JT3b6mhkxm=rd>LK=s52^EWf>q+4^yf4kg4|c<>Q`bpVs_81L~BoX zE*0xEiQE0mrQ77~vD@8iXP;|W&PQ4n;ndA}t)7dn<`AD)w^Z54gWqEVsK8Q1gv=Aj31y+oXj>}Ai#HJ^k(?oxi_ zB4~z-lf7DZxp}x@%)@?im}#RtZ>rx?VbJKW!qA8A{iPavUMIiIoU^V=OG@9I4+qnw z?Y$FgebbcY@-_?FEYfbB;!%}1HV&HbwD2amY$n!CQ_n(CpDt}G9ofIY!d>`1=ZTHZ z1#EDkK+ZXxWx2)D?(PSkU3~cIg(9_fjqCc1H`9JZw!x&CrRp3$2JZ|Gp#{fX4rNPL zQtfowX?^C}=Oev_PQ6x9+VS*mYv`o0Dd(?!!^xo}AGd)mXomNCnfP)IN`93kj^&3 zf1l|=Nw)mus~-hp!2Rkg9|a$Zx@D_sD?myD4MzC{m4-)F=S zm`0R)Ae*l{e)Yf9%+I;6;*gZM(VSh&lNi$d^1v}4{N(9p6>d_cJnBlFCZgQ4p*z10 zFm6w43ztaUe_sC=jiBn+xJ#6KW?ugI z;i*dL+ZcmgUabdbI?H4~TOD)l^IJC9JD+niqM$id!Ss0HbWu{YwL(r6N^{}rg^)5O z%ish~%d~RKQh#61pYQC#IW8%Xq?+T~k=MCX+qI&%V@Y58n>*N`oukDGXRoB4RC;-r z*?MOci+zdpbnUp_w~IN!i>m1w$@pdNp(Z3QE83rv8^GYA8LIE zP|whH9gXkgF6o!d|Jtd zXQ(8J;pNxR?pP%}@6WyngEqgz`lI4bHk~{NN{u8quL*+?n+o38!< zQaf**NEawn5_qr?DUV>$|n(oEFbv z#v+$aDj#^9q4=mJ>Cm1oy~puhq$P=@JN6O24^ZKE%ruLiDpq!wTwZ>$ulgbBLvN=0 zyG+B;-FQUB+y0Wk6ynI$M-Eb`sH5i^K9!x;s#*8xjs`z;6NY|VdIC+68z=2cqaxtDfXDea?ukNKI0+xt$P@4J=8X`fw%W`S?E-g$mgW8=@b2KuM6 z7PZl@i=X5@`iSYB#&-B8h;h8)f2cKYTfrjEbVPXW(3kp#U4jy*P7__e*b4}i8wbA5 zV^KG52L&^4Eai=Vw=ZJ(c1z?Pk2Z}5^IrZ2Oz-)7E&Y4d!k@?l zcr4y!wH2sib`#jn@yIwDEjd4X<6g&Rd+Bcvc}qNFN~NXLrt6+$HX~|Z-PGF@cbku^ zByz8@$qZMJrvHeb@QGHV^6Ht?y8?>4mq-pH_T}D3qKeIRJ@Z8zlcPy!k+Gha!}%kd zQBV`Fp52eiIMrWsvowCwfjcnqKOhx-d(JaSLt;y(=Qa)8xTMsO5Psx4T~3y*z`2L! zbM-1>(SDN9H63ZX;Ggqadc7W^;UO~OLgkCtF9UiO&WkDUjr26n@jA^qU5sr%Iu}lI zi_Htk3-SAT)lU+&G*y>il{;hcj(>-G`mE8`o0fm+9eKkuT(9>4;d4EZwNY~Ct!Ghw zmj1dw?k{`ined%H6y2l7^0bn*WA{y3P?>@4nQhW6t-gW3619G8tuL*38&9d^=;&kGp$p6c0~TCgQ)!Z@Szj^L%a zpE+2>4qvB6L&t}kIC)skVP%4qEE8Z|nc_5b?(QBvLW)ek@PJmBbd}_`*S@pMWyCQ$ z((SX}te5Gx#~%y1V`O?i_B4lH*6T&}#1aiNTK5}8i6t)w{leImghxfXd#)P(f<1mI z#oXJXY{hi;FuNnioG=T=eVW(E4$d<_ZnYs2^DJIQ6c6p`U%Fg7|jc z4IUFB$4+qX2=(8(5X$@Lp<3}9rk4tDqvQ5+koE?%$cwW!Yt+u)=@pf9xnXkSi&UUA z^V|3FHzxH8X0hULMVqCFcQW`#xX>$8(Ml$9lAo|1Njuc*B^Gl5;ajrhZ7jwIgX%aV{gz{zqZ`^&czCLJVab3v)9>2o1poidFt%b8rZ(l+^I zc{_6kBeF|XrCut-ErKtW^<%%HfstzD>_HPoM>A4wATc^Nw?kHaNzPI>lvL(<;N0)~6At-(HqB)0(C>ZpbLnHl*=bI*E8BS%WYwca zU&c!_w6WkmlMcM+veJ3R4Qa`J`pUzDG4HtdJtm|a!8xD3R3_`LI#7Rq>Ff?kNwIUL zTUedwtWQWrUVP)ko_B@Lvwk7lpk118aHjwD4QJg<5`)%U(DV(u+pR21EE6H6Y0JCL zJbe`Pob5DSUO|R9UD{SV{+g%6b6MSdO|`RhZ+_BdScRFJ6He13x*qt)7rkH^%jfDE z^WAdr+BouLo2LBZep?SI*W^Uvh8wAm{fiz5H7&TEWnd4zKd8#{=n=F3raE}8;_l^R zV)v$nTU!@N^onn0i#pRHT~b~V+wlEZM5f;X3GaY}=l2Q+Hu@hLi>_;ejh?@<_Z>(Y z&-L6of2-_1Q;2$gORVOcg;waSJRR!E(g@g2m3gQ1KIs{{CG;KE6|?lce;jM;$t!FzHttPq=tW(C-@f zG&nXL_lyNy=B1dj=cie`oP^yK=uKR~h0OzYabacEhj>2_8(hvTTpgIBl?opT%NVQ; zyB5+?Pg7!d>b04=tCf3{oZz^{8FzOJr-78^=Mwa9g{+T03(*fgQ|-67LpryfkpD>d zqy)`y1D#4Fsd1-a?T6%MU74fWF|k)m=Pc~1#5HUM#o{(d)W7~v{HwgWwddj-MpHfdh3|8VumdJGhy5&ElBG2c-fwC2Q_h*2NzVskSu{A6FdP5 z*V5zS@18%Vg5G!gME#Z0hh14bkyZBFb{9ody*^NR$}xiUDg9aYHp5oiCMOa2;+2;M zHp0=}x_U1pPxr?tt^9szdjdv!>x(`&l^&zvGP$=?4w>UmtDH3Y6ZQ z{H(rkg6ZjiU#ED9mz@P0eLKDU@LpoW*U#+Rg>C1TeK(NaUSyw~`}zKnIn9k13dCQ- zniUM!KA*aaZ@fvGQvag0S+>8X=`&Ab-@P~s{585=tx; zmFK&N=3?^>+c-356;Tm3&kj@Dw&_hgabM%q~aic5=|P!sh<4_+}<$@M*U z&}Z)1mrb*Q-~u_lJwZfnl4f{B%X%^Kh(wJ@%FI2Vs!&PZSW<=P=dJfLi5EmR3cDTA zk<)06KfPJ^05N3?cag`#Td-5jsPd=&D>tOsGAE7CBRsYgw7VN|?V^ioVhq}cmv+2R zKeprKpfu{Hw``#6MSb1Lc%QRFH>-v{Qba$h9;zOwh~_;wuT;s9~hREZaOLMgLt(4I;=dMQL`jbdQTzC;yjJPCRwu# z)_}ZXd6NlWj^%v6csa=zU-Au=KIuold3*0}Z-15ajyrce1bs+@=;zBAR2&`gN<@$` z;>Tx~4Aryng>7HT)vjEraaENYNEQ$3b=;lS`ZY{h&GtyAaH{qbx{NNhr?2q3r`k31 zLfmGUueN%U&VH3!+`)KQyu3=0@nQ2_gA)NenB63Z;`H0D&BnTMX?UqzKcH-9@E~zl zke1E^f7J0;Gy6Nt*+~hXkG%iM?kHytog0bSV`ST`L#jOeoQ`fwu$$WEX1A-3T~ZRE zhzT?E4cjK}jH^{ZZF{8;Ncfqb3ccOO#&lmOBzW4aw}~hIeeU_2!am@rynP7^dwXS2 z=*%l2&)@fUaj6&BncWx}avb$%-XI&26PLb?_I84)NzCH7>+}#CDevJE)|-n&oiv%C z!VPqx-SJ%VJ71b0Z54}}4R|lTSr!OeDl!q7eoBuQ z20j*#S4c%S?o2pmYOow~VJbmSHS==bv`DDSy zNdLFP=26E(aIRXFMrPnz2N}(x%Bp80$UwBV@mTHU`N|h2sv91+9QvZ~%qGsJouG5& zPOPm-kJ_u)2Wg$JUdssTmB?(({>XD6<5tY8$7WFxhEt7K`-4*=^Y1MQcH28H1O|@r zcw5eV3vRq^aAiaN_C1G>_}VyV6O^ufHbRPQBad zQ?P#&(>m@xM<{wo%9q@)%y`72J(~D~HhUs`gDkB5dH)Brqy)G1sR+y6^I!O?lx(H; z$GzGTHY_h#x2>~WI>@0rb!>u-GcKvG>+>lKueDCAS5&Rwu=+@nC(M-Ctx&4une>-zQ#?k?AOMaV=7FgL*)Av2c>8Gy8DdByE zoMIZ&hmHkBR{fgU!y!8EYs#u7V5@bU+hRJ_8uPU+FgxMC^_jc-7w{zEmi=_I#|Fi~ z)qoX*!$<4B*nD5G-nu<#`KXa^oS*Y;RRxdKTqQXlmF%9Mnp)br@t$EN_sUQo78W>> zd)Tl}u|ej&Jcm?2gxs2PcVgIEsc2b;`r-YP740*d`}I;vRJMI%nT$418P45RI8p;_ ztG8nc>Ipgg>FNIO_fWzbq)W|AdmG?J)BVqrSSR*M46vDOWZb=2)^#GiqOa!aD4uH> zVvw9z76>dj*7C7Oz-CC4+xx~z>9%*bWw|`0kLDQ{W!&<&H_$$sOy^noQFXW3?t;vW zQyKx$O0+?nnfn?9*4}md{M$X_t7pb38O?+VO>?r(Ky&?AF9l zowSrT#%B`jww|$$qgfVjtPap9w>0gX+Q?{7vPIYWaz*1Ho3D0z*^Rn|LL95>BDltB zM6qT3K{btI}*W}nQ9s>)ZgxUN>2deXh#z{+tn zw66BiW!=6M4!amOraVD^Ns>X0b6RkojlEKXi)vu)$HT==d1IHhy`9KVP^>gU!g zea(q#g)R(}!I}hVjjU@ra*^F%A2=ZQISW;^hTm&5f9TFoD7wF9iry*jz)<4c;|*o( zx1PAvohYgHvPtgdNaI$h%PRR^J#(ym;b|b(yOPQFfYB=kL{*ziqnqq#z2@Xi_e5>q zCLfyKkbXKk1%GLq=$)~1Wt4(8Ww?UR z8_v!6UHBe;vjQ4a)9|OP!Q}s5gZb|x2PtbXSHK#~%FYVp@0}G#EaJLwoT2H*;tjY? z#yd?92MNhGcs}R}w};PPztQJ3Noy*j{CQx}E6D?;6uUhLwOgG_G(o?1KCktIQhF-a z_PUDMjci7YW2J+|CH@89f_8jUy7A~5(N=G>WMRm7)iS=qk6Y;AwSb#)uga@Za4i>K z4kcGkMjtQp?VD3ZeVX^X`ZGe7TXxsCFTU7IxTB*t?|$5$ z!~H8}szq0h7Lj0pNn6e^X)JX#o@taB(Mp;%0MJ!XnK{T{#r z*~IZB#fmAGVMcY? zO|fd|(6zXrA$P$FLDJ|L3Da%qW%xoo(Y{09StcUxIf{|7FgzxMX zUu1$f*^bqf=w7Z8AL1EzdVWHyzwey*RxRaG?lSkO&rffsjtWJRq@0TGK9<4_Z1d=i zM}C}h)#*h(HkKGae$h`KFFKX{=`Ci@1x=>m*n#RULZkpasnuwYjX@wkseB|x-}Dw!K`r>ag)Kgn_E6AHQ8z(&W3M0+Kv17-YtEH$k9mVuk@lXS&Q-{@S{ zfC+l(Tij#WELUfx-t zmTEvlYiL+~nl_)FZIjl0laO8K!hY&kFFyIwsKjU{S`&{0*C@BjlH855_l-#G46w{a zZDeLWk@)4Z^RL_jUTuwAH8D)d=9O??S0T4R9MVwiRkW$uxW@*?-X{GA8{QOpFMw-7 zJ#zVmY|9`?Dg$&X#Jse-QA#G{MibU2RJ?Yi5_MN`SmNwtC zpy>MRD!fC}z@}zjFn`F@M^$8V{^pP1V#pIVT6B^Um#j%!7&=gE2HqmPSK>cEwH|NCPad7ND zt>L*SboNMN{40d zR~`4Hjo2NPn>RY~Jxf{06(xb=U}saYh_I1F13h0TD!y>d+6<& zY8;A`kLnNy^PkL(T)ovQ5!{|O*J$I+Iks!|V9r#4o=9I8;?!IZrv-zLV)y4%3xDPd zT3s`a!x4^JNi_Q|f0XFP?k~JF9PZQn&AvV~)r{ZC{K5>k&yI?ymnY=jlMXk3HrBI{ z>3V0>D5077!uS~@&i-6Q?8T4UWHfCa3kJ7Vs=W@RPwV%ywl}+Rs!ut`GM-iGU5wWr znKp=L;~D*w{{3|P$B~w*Q8d9H>!2xm*!{sZ@)hh7jAbvOL63za|*MO)x%%! zP_JGZTb=AU&u_-3ESo;B6;vyGcQ?DWU^5)ik|OZ*p4VQ<#(2M9tdpI&Oi8(MfyO;WzP)y z$9Lqqa_;6EV2mOfdYSuM#*)6^%apg;A9i<5vOnxw;-8lAE&1H-er_v=l)Lsc4oP=2 zBaJYnGP}_+-#e4v|JqkdbAEQ0BXLk=y8XfJ{(Sxy23K2A{4d7n@4dFy zyu6#OWQ&j%ILE0mL?b|Ovzej~R;+?|NuKtnf@-tOm^k{w#z!NrsLZA))E*xjl7htB zzFN*R+H&uAy+gQN9(ii~xWe?(U9ad8!lSF(4U(=rC||4$3#gEviT?if{L{vW)I;JL zmYn^%O2WZ=yp01B&Z)&P?C}~fyIRC7J>PXh*cd7DB)O;PpgZ%(-Tu4Ad!@_rbvHNIWe643bb>J4lTJLtOiM zbf2fauP`{mZ1qzB9Y;?uZ($+=jw=ECP50G6Ebzu+hzDLS1=k7<4no{;)-#A(Xl;+` zD*W1R0YhstIy~PD3BXs1p=~ROhWBY$;I?9L@v2}Yv<(8}7m6X-m1mQg;F(GZc-91- z!OtonCRnQu;u0ZHGgDS)Ptq>-_sm~!Tcyk%(w@Veo&A#@b#ER~4 zuu&N#OeVt&H&;PSn+RA1aF!e%9;kvO04MrtNFMGl1NYGW24UVvQ~;)c9jYM-YH9@d zLN!peRXNz&`x~B-5ghxbK)@ofDEQ4kI23ac@o;51B=i?J8V8P%LlFrm_*@Mn0f#(? z7&oneqT!qxAng7MXglQX4_ntjI9Rq865(CxI}#iVwrYAx=aC2$S*?hqTAB5F;ZFgHXVMv+M9MXB{L#3ou~AIw0iTMxcn_ zU`+HFi~?`8 z3uqe#iCA-#723!(*?$xJ*WgG5_)xkAIIO~Ri1ja$bJ@T%Eyz~RdI52ZBN1yd{HC)u zp;*-&k?c8$KO{Ec5g-V`OI?u$Xe&&thrpE#fZ4u!Agg2*#7lZ#Z;8*oPk!~-5B3BRqRRS7ZK`hz;Ns6sU_*a+UtQ6Sl1u*Bg7toGPKs^db z6d>6ENz-6qwk9Boe?6qgfJOn2L*R+9TO%YzgNB3JAVJY}T}D#53;6nU2)Kb|4VXTa zGysc?HGVV& zGd=Jj1Re`6nuDa^+$LaG`X-PtkSN&T6$p~j24IY-a^P(kEKvbPz~M1)R5Nh+>?Vkr zXO-rf`Y4`+M55uAzj2xA(F#~RmH;catn&DcxMs~&L=3#Y2MG6vDGEdx0f!;r;m+T< zFkLIe&ajGrCF@yur8m(pASMPpN&#HK0Ssl(`nx|tt-$etDe1}P*aAB@1H-V70axg6 z1(u+6`4<_41U!TMbQ^r_HHbnRP*bctO=tr@K~QnPE@WJR2Jmwdw4tfper0@M5*Aim z6^}X$P)OLf1vnNZ%ijSef=kWS0Qkk{ikDYy&Qj!{Zge?k_x?&;dz82sFH-69|&l4l(}DODn?~S^8B5 zs~P-o6X^NXPN1B&2A~qwP6}-_tlbGI!xZk6hsPVi!@5qObu+S-KpQjM0?7a2EZRlM zQfL_20|`RlGdHI$Xcx@Z0*rF98<1}_1j#_H1vutt*PnEWS{o@>#6qJ%?F1poC|qz; z3$VrBm*jkj`ggoVqKGS=?$Qki&UFJp$met-Ki~JN^es?#Iyk}<7I+PbL1+w|*9YxbY5v>+?Dz;o0GZx_Uck%hHN?oXnt;)3 zYFi}>Z+Q;#_^D2akAl7livhuoA;NOKAf&u{fo-4lksTCpWW*5BCfwmH=X+^v$Z1 zZ5e`iRz_ryk7(ZlPpf(f9J#v>=GQ zEG#qdAINK_Tt&vhJw1>Z%r*eDP8t9s0VPXj3_#odL+Z7tTt&vg)~~^^;5`7;OUa-5 zpgdS7FV#2+($Vy5NPGp0l2@1h0}D$PnivA?(+lhbcyYoHdV!s816xz`!mjCRRYD^C zqZec+3KsDVz*2q(akKp~E*T8o{|l$dlQHQwYT7Ze*HkMlh0`wKxKMx7^JGAJ}_VdwSo-#7GePT;KMK^$+3Hb2#5rb8YtnreGpXHvZE09U!+(14j{Bf zLAG}22jVpi0u%iiZJv)pqQ8d#?3z_qd4o$>$VEKJ@-htg-{l0)7$gOOs*^If0BWEd zeMipoD4YWDI1D^E1{{Ght1y27ivKO+AeVp&gEDuZ9R!MB9tD}Fb?kQy895G#NUwy} zpNqIw0~5Dq#TAM0XgFaIBEZR$kOKT+9NNZ#Tl0<;5;zRZH39mXHU@Z~90Jk-ST6Vi za1l6R0uuS1$#82m>k4HY*@9ri1i*|qG#VTOjmF{NnF*j^9BQTd2hUjG-Q@WP$lXK) zNE%NjK}trzY*Ubs=$fRzMW-?(Znfr39|LJfW*AtL!V7}|a~T2wgo4IE3n z_^Oy7>8zTBi$Y)%20>H+r3gF<(BWt0z#l1cf})LS6N+2`f?bJcrywZ}Dn;Sfey=zQ zZXIhXZ@^K!K>!9FV23A0fKtgFU_pWWM#SLB``0bu6Vo6HVjCd_G2B{u`K^z&;9uQ#Y=LSuk}sCZx~JRlHdAft${c7Pv)z<`6&@kF3NDtIgf z9!?vFn50*=yyjKEHALmWV7>#UZ2Yk8B$yWubpSP!Cz9k-BFNq2_>%!vGXfr-nS}5w zkjJ`cSXuve3~-_^NYi4-by#bzyQ(A*$&;YM$$by90AR|+3xWoVCeMMXdPJazA-ay> zn)9v_#KQ_x5Lgfa9pJ@~{T5v1yp9;fZU5@hDlTC~n0Hek5s(RhnIIVDG2m>5@8m@W z6-63)7&{GdaQs;%S}`S-2p<9g1`!Z&y9p>^Vy7Wdh=7Firy+ww!eE+-R6t0RD|k(C zR)@Evo2!gML6qP*5%PbREFW-5=s$fIzk2>ebIW+&kM7uE_81qq1a=n(M# zAguz?0@85ZEOe2izL0c6;{h z{0o%K5VYvKdU;#B+S&tTYxThW&PJ${2Le!NUl&=I1F~k?gujsg0$oKm2ARnbJ~9WT z&=ANUoHNZs2b})w4>z(tY40VhtPCsxY@ucE<-PU`{9bu#A!Y3vASEp=jG@Gbu#~l@ zr}at$B~O6{FE4vfZ+RPQFME0K0C#%|FvYLoYh#cAiSnD`mg`~V*Ql)&PyYd7=V(jz z5Nl5g)0JvTSn3~cSW0pema_HsCo=;VHGqXHVW|~N(i$oy-v~?DJ9?k6_oM()Mn2GT z(%R95(y-b`2NyTsmafO;-Q65ry(v#tI}3i=A790$^if#K(VYUY+Cx`sZy!%<3bmCC zXd?XQhC1PuGC^3%-P+TOqA1*|=-|{Ez>iF5WxN-b^7e6eSplKQZAmc_@ONQhkm>E` zAz}WNV{OO}D9ws{eY{;9U4ccx)G=co+Cd^hXYqxP_+@UNT7(n z;lT3aI)Y%G4NO<5;lLFc>u`x!98s9`FF_=NNZ#1?4-+uwAbZQdZ8!|sD*v_-5#&+j zpEgiKVyQF;$dRuJS%o95sv3nQQfmRM0uZQG4c6WW z2smW{iX;7zXVuCe-65&u1}$LX{x53;nusD7b$^Qk+A!22f;J+G+Q=9La#dfXKkkJA zH3T&iELf?dW`YG(=9&^$g~k%mbOZgblMwSCSpWl$5M4(QECR1@BWED;-(Ng1xSS<5B;?C4zXzf->OmMvzwUn zW&UtvHnQEP?-Rs(VCk--g7)QnNMbxsJ9Es`oCkQfw^I)5NR&=J;Y z6%8i5!U)PB_&YuUAZ0G`uheJ^b?5*%9CjUJGy$kM2GHR; zwPMigeF1}^PRpQ%01I1d1b@>5IdfebVZG2KEGQbN0kQuf40uVp&f$OquVah_6aRJe z@awgJ1uruJ99jQ=)DMQIbyDL%MxrK&L$3=@3@Dq{2?MOO&h9uoxV-GQ`k5&92LVAq zuVaE=pBFIrwSnW0(D?rl2FwE2`3K0~>)S~G5n_14`q(BQsK<9OlS8g6ut40b_jCeg zU4jD%c%|?G{r}Sw0*<)O7eLXq&Ljj-r2bJMS(o5iIPhkBT^owJlm&2LIqokwvi?CM zs0;sUTxr9R=Pl&FKLUdH^y|z-B%-O46cz!>XewOty>QgHpzHzuzYY*fU2Gt+2;8~> z1`Be^I)Xq6>*#@%d+N}}BEjb+6uy7zKO`2oA+>{Gk=XxWf?q%AAc^alfJ&A+6tO7q z_jiYZ{*hP|c$@QgBc%;PT|5Ff+`16MqVVgAcaSR9s~V(WYCi%c4%Tj+YS3V8qZS5@ zTW@1DZe2nGZ*SIRI4~F!VfkN>P#~D@foZ$3o13>V^3Q2k`mPRc;5QIs+jc$^8{gQrZQHhO+u7f}cmFSTYis-6dDQ3W zuIlQl(|xx2BjgJXl}t|fFD)Y-J1p71{{}296LS&~Avjvx^#Mwp#sL~gTo9k-7sD?F zZP;JG=#^}hZOjdAjf{UWvHdS2EFWKz2F^Ev|Dvfu;#hG%z%9U8hi%8zJpM( z;$UU4;>@AOz}Z1Lgh>SV;LvrN&>B#2oKT4W2aO`QbH#~3BPG!hfw)usdZ32-Kc(U*#XZ3p z{ui^j1#z!BJ&9O|IAO8>P49mqe#>;CGX1|RF(;v1f@46iv9i{o$bx_SuQ{SD!Z;@R z%Q`xR1c)T$dvJ6}Ms`Lv&ZO)@a5A6+&I@-Tf#2t9+>8ZhtdV9U5r1fLEVg{O_C0Y+ z#cIgjYKUWyu@NoeVtEqc=mObqtk7HxB8TYDFC!rdh_oQ9#99fMD_2Tm%|wMnI_IKU1{}9cPQ{xLJ}g*2JVc-L<$u)`?s@WdT@#?-{56Sz^`aK!@kQ z)Yu;&I-0AEW<+QxL6f~?v9aJrc!Jl^t1de$5>llugY2d)(0g}e0FAcqnFzHVu^pH0 z;0+O;X}KD&m!S)R=jQAc$}aG6Grelu(Y5-RHHC8f;0eR{W#N1kd3LYxjw*OLgcV{f zeRb+v6>?<&_O$0?KGxcR8yx+0jsZ;+Y>F0}++x$$-MaItD;B_`9sX$fgMMA&iWEnX zxTtzBvB&*`RM={7PXmzs{$b90KgAo+ zIb3;T$y)A;JF}>dxn(gWN;%%9=hOTLtRcOM7W}C;z;9 z)_!MyhJGQu$$Kw)*L|J}oaj~2Z@cE*(GBb})0y$oy`!EWoI{hf zOm)t5&UwJGEOHKg&;ZUR7ULGL)VCTtO+PXoq8CGG2M=o?trHq8G%G4*ToSB1E)drQ z*7Vop*GL+HM*OBbmzm1Cp*6H~a?e=rMBWLTI_`69muTKK9fPh>pYRW#H@ zJby2}lRsL+o{Y%A-m8Sxj&8|x;=S@%c}P8TUTUjkY#OX^ENWKVII)T5-tJu8*wZ;A zaH?|NI@`SRS^k(JsH0ekJ5;}1Ien=-N>Ue6x2$6`wX8ij-zQn(Nq?;V*zuinlsQW8 z{JcM%drJ4&1@7UB0IyfsqA!QnJ9(~D1`EOr=2T`49u3A-j#jsN&wAJU#u?kp3;wsX zI^enc(fp=p%ImeasLF>fN*9YzmDDZ7b|?5H?OF4eKld}R4U7ZhUnyVdUBA2_nVy5L zQ?CuBv6!A~4h@I1$tz?N1h{I*HLVvtEG3nomejid3-8`n?=wJ6R-M1b$AW~-pH`1r z-iU#aNzD|ual_nm__6vT>nApH8x+$tHIrC<(Xy$i@pceAERlcNh3jAA>+}z@w==}u zkgRwCUZd%~W7l$ra(k}{`>H*nA+(qtTOtTVrfSX&nJQxcH+1ZKBc2_ueXbpk-iP!v zvZW_Lo8Ru^mP+U0rYKV81&8PB`A`@X>wjtGcsON>kL&bPALr|`QytEiS(EtOPe?}u9Io5z-ba_bPY;f| zyiE`5!!5K&Dw$_oO~+afExnF4gj&zr@6dz*!)s3olFwt$1>yQ*&ngnmR3`u1>`L2| zm&4(B%ABc>%VCk}=iWHC=_cRZDUcF8g~#W3mEt+M?rpM^a$#!2Rd+Z(opLr+&ZFpA z_$oD$(mT`i7hrkqo3YNr6?GKd^J)AtefqGv@@##o=l^KG3f%0v|15dRcTHp;NIP$E zL+c>7wK{wmmt_L7UhEG=Q@Tdqf8BkIXBmBJ9!4|kPQ2?JQm1T9@Fcg40Uw4>2IFke zD|)S4^;=G^Ucu`{tEDNoKm!B4pp*1Wo@(f+?`Kr8&jE6&$-H;5X7Uv{DOeDA8rXHl zyEIt+(H(dbm|3BnyLNNYs_2546Sdd=m*NoeW-5dY-AwIw9ZQkDf zUPo&F6H<-+ATX~BZUw0Z2CU`9z;-i3K0AW*skQeVbbj z(1iq_n$3?zJGEMnTJxrOl4PsYeB!O&u>evI&6Q1zGlPrz7->t{CdZG zsH1`@`XLTYT~SUrZ57DhSh#}?2qI)^9)Ux9FM4zfK3h>(T(5f|0Cx1JGU&qB>#f3& zj7Sd+R3Y14=zF!B@ah-Yw>3!Mf3IROYi6UfHhSi$7UQ6uTrRZ;H4fOrosMsZ!?>7EIu1%vtaMSF_+hsW*F8b@ zYXsnktJYuTevL2>_UQFkS@?TRLRAgZvfP>an7&DQizV3u%@@fik8a!3nx1~J8pG>0 z3IcFA=P^0FKRAp`WWmS3A*P;Bb8;J%YX4g;^uusk#iuf3oC40VsmzEB+i<}MEEtE* zSN;Qzos{&`he@1>-0!z+Y z)y;#lMvTyg!*~7zjTf=WpB-ewo%tOxZO2U+^1`$@CmgYUq1Q!^iZVNpfD6TlI|cC% zQU(+{sSAFsgP;JZ8yUs^Zh#hPy`#Y;r+0S_{bZUlZ;YM)T^W_wG%m&d_V+BZ{?*AQ zW_e-=*Ys9Gpuph)p2{)Vs+S-Ck)USZKO0<6%vQBwQ;87qo48N@&qa}GgibnrD6S~rH|dsG z_Dg@_xCI=Hkmv*T!Sz2kGl2`zq6)>zG`~pJQii>1CjtIc(dFSzSFX?+GkWmzX#=T+K|6sV62yR3|D$bVF zx8&=_+pfkhs`25@fWW&uVzF8=ABWV2I9;GRW;l}VW6KQEIc6Y~G33h%@;Q#m3DQXq z%2@0n&-$!^<$7+P+ukr=*4w}>{>t@3?7X-?`Y)>p=vH8Y^3?gy_EkqA!p&!0ap`6;j3-2u;Hxmo^M2m2$+k3Dar zTj1)q8{aA%9+c@%KJ%Y!QbE#qfdtV$XdH)ID~MoL0TD-8kad%vP#ovG>dyytF*)#Q z@4nKI0CwZkoB_Jgc!_MzP*$(%7}i)3eeo|LzO2qtzlfTDko%6)q%AQa%sYeeD0UJ!Lx8bq>PQRAmu*8*#!Kn*tj4b3w(vV;5z(a&U@g{*nbz zj5zMA-}1N%;E~{p@nip@9?*@!9q~89Zz1TsgQ|ti+*5J*^G0u!_gMZ2QJZeH=p*`8 z{%G#g@rchP+}Z02%G<}Tjie#5tl!GB238eU_l#Iu)Zbwk&zFV~9SB+Hgl{NzWe1pd z)o;9Sj`qz@H1~})sQ%Um?q>D#k7YO{Jrk`EXJYUp1EMxWTff#uY-+>LiCkmbhVl1x zzJ*I&5$4j{woRaJ6>; zp8E27Y8iXiu-x+aV#i`pnlmb>11%;seD zLS8maHPyLp4RCuE*C1n;`7jb}(a&nOvB&s7uggnJJY;x^bB1dRhHyh1Kv~9Tb-Z)> zu_cBp-qM-nw7Ij|*_lzlUFGR-{2}M==&@(mInp8oh@RzXK|AHERbxZmFvoM5b#C9H zzgN(|hcd9Xydo@oWS`5t6}|q&v2a@U)sst6$;wIG{07v5cgzkOoMWmt)veD2s-lMm z6{IdtPqlf6$R;s$E+w7+0aVxs&U^p|`5A|C1K%0P(CKpd9#7d`Z4_L26m*-K^)MG* zEf>*QbK=5a`5tPSwEB>9Ih$!9Yv z8(W#_-b%Sl-+zuM)4J8vz@mZ2WsB|sfy}I84qkeyJ?y5(a2bH^kZk7S}X86DJKx~ zokW~Yv(dVfDTxDE^3!fR0QRvh|;K`R=3Kqc`2X3}=hDE;1B(1)9J7XdNF#8puawDHJpQ-0QQV!C&Y< zVt$vp=Ai(_%*RaPmwGniT}=p^DA9;rZ=J^O=iD)yIt|iLd6?uEAeIS-H{$VKgdPiY z?Kvr1eEAA_ zw)+k~{-m$yFv+qdyo0i5MHKSCZLJi*eN11OKF| zvBRqmx9W>Ap9K+#Fkmw@18qT5Uu*HHpwS5N7PLXbRKFGOJpT#bcw#FIT^frq8g^}99{};9ad=%}4|4GN zfe%1;j7T|jP<<@{mO>8)ACg1eLJyHN!%J$p-QxZqu4MrZXtg50gKuXF-vj-5@MuP0 z-zYTcjiDvZEYTwxE>##7?_1059*yP*T(Vg%lo=N5WqZ`-jMaC#jpls*GvUiIEIP^k zXF9+NVL?7**03>BS*aTA_}NB$Ga7{f2lzY@DJ=eajqGW8j^R_GKO?OODiYqiPC<2= zm+_BR_VVM^kI})!KFAEis{~^bOVTOkr$OGinBqUohkJ5tEx`Pw!6LR!e_mNj_0Fm= zm^uw}auk@57oK}XUStX>ra})@ zcL6JzRJJfGZWwBMmcKxyG~zwXS-b)3r?AjD^+(tc1OEr$WJ$ z$}2==bQz@ToKVTApfUJ4g8H!UhY{USEFPm4JpEhohP;|wyzSIns>mc}N!@DX{Q=8q zF8_5tWXGWd%NENgiuKC*$k{a+0Dabo8GGWGNy;g{75pK=Ig6XQ^GZ zvlqou&W*nJo~_Z1h1k?z)@~xf*}2jA82E^3pTSNU5eA;y39krQ(Tw=Bko?9ON1QEF zN!H*TeA+$28{Xl3a=i{_iv1oNYMX-^nw)se;v78FZ3YYp1;q%&I3ZN*HDS5KkUdm{ z#C8cfwRpYjX7}Ks33QwY;Ke;L|2s3L=!s{hd&6c^TlrDu5g-{d@Y` zgVFap)B)kj7K=QZt{vMqUs7wE8z@l)VT+AoOnzL-x#5=BUt%q_$gAV{>r!_JnfMP5 z+vQwMD*80i+sgmG3#z9mZA-_)j;b-xtqx()BJ1dDlk7CBRnDfVA35v&AvXh8tmnXy z9T4`^k*^;9R^YhW06>Z;*AFZH%LxlT%oi?}R9&z(iSv={!dbjVkc&4j6tT!#+JXe<_3VA6YbFM5b9Qjb=2>a+GTcC~TYtFe_6!KpuS z&JinurJ2~hM;odO1}<;w`RaEo%LIAZ9dHRF-#-I;lKdC7kTB^7PiRM$6|K*IN51Eb zQf}GT%5uak14@lyCKQ^Qi7NHu7uH)U#8^n1Z=>{8RMI1K`>{@cDRq9%mUhkvk>#wu zKeH~;8FTuf4qGCb4e}5f=j?KFkj*+E(+E0q`0fSr(G~|J-UVn%eJ4^Wo`=zip396i zlZqkhsk*@>TP6fODX;~5|DwsLBR!C%#3WVsHNPY(1c)U&MWm#*y`TYU*I6#=hh*2W zP9q>)C9#QKyG=WGF~3lxwG7p4z&7$`!S7dp2U^R5&A89xB_k}3jo?E*spO>N#XZ_- zyF|<5>DU)0jxgLR8anSVvWAasjM6M7??Zuy{qHHK}RfM#m z+}||c0duGvCT0lF5iDoFXeRHu)Y#iQKMdOYiN3N^N|_(h<5SeTF1ET2)^F_-{v=oZ zYqpoA+=td{PW#Y+SIwKJ@4X&@>0$~3Wl7NGh0|Nkn?s8Ur+BNjZ3JFj7T5FW%h_o8 zr-i;sxq1|)4)|Uh!>3IIKO!f(>~9hR$ACm`zzR<_EF6njd%RFqX^9E%5}pXrYbd^( z0~W596TVigW}&+_N4ketRUvnHrau7xOjCvIfUfF__WZ*Ap#Leeyu;jbE_}#LVf3!3 zS-N5(E1kn*xT~H%K2;=Z6>Zqvc=Wsa&PCXbqgU6pzE3gJhgG1+xQK5An4L+qp z2B|0xw&PyRGVWsDwo`vu7B0|3@k~&l(5Q2GLPDa`?oqISEwk}9J+oZc$r-Ot79aW07Tc%UEj+##E!dh&=T9!6&;7T?)zKE7Z&GY$5%~eB)%&g zbRz9-2@byfWB2R*!5(Ut4&ZpHN{!WR=H0P@-P zbMQOWbdOOc`t6{9Lg~0(B99Z5!wJ)J4cG|Q-c+1{Z1yz!UNsiP5FICW+IVo z)x*PqXq}yv2Og4_dfvMFwpY{?I^MZ1MwWYUL&RMMezsZ2@3mCQ*DNDzUyGZ=wp&2O z!gi)CnF-+|GLm-BQt#7X+~}Ykz{FD$O8Nb#1LJv9Ze$G)p2h9Fdgc*^aFzZ0`s9!_ zc^nD}+h1N*%!;ROMQRz`t#!tr0J?Nt1?7f(*eUdwn$?_=fq;r%8>fyH49&v*cqW@d z?$w>&29qp*7VnBF2$_$LiScxJlpfTdWe_ow8I$>*b6(c3g#O^Eb0TJ*23$5r!o|Jt zq>tzwLIqMW^T!jVGvd|>HZPGIw5YTn6wWmbZXMH&SPv&;K=~h*sg+3whjf_UW4e;j zSfydN#_m(G(of>Cj59V;p_0fbLDo_A%?f0diFdls6-4B-){W$+#!*=eRt5sW)7u|j zzhla>?(6UZ@qZd~ZvLJl18z)|zvc#~;CONPnHocfODlbPQzsb@R1NWs9e>>4gg1n^ z1_W~5XICNjKurkRk*YxGsN18ehIW@r)IZ!~WDt#&=O-uU_NMp8S}12h5C@-UC*9T#?!z zS2>pyWnSl77kQ)iE8X8NJMBhGg=*Vt!UhO}1A2xlx;8s#DXDu!ab7VtI;^)O*V%|} zEyj3tdOU9*Un_7e=Na<70_gE5(eioJTf0e@C*)&T<+Jxub9!ahDTE7F{9tN?Um8gY!7z8=o-A12=%{M|94 zJn3&O_CW|^y3bbh(&F`l?z1YwQG6~_(n?>enR7xaeQPFMQi@13D@(ks0o;vCG;>iD zk0N{@za7>_Cl-fAt!xB>QZ`X zkuJ8~8F0;|1(lG}XP)j#JUIuMC@LuHsKpQt-?nH+)$a@E2@vL?h_O~I_Wi6bMjK?A zu|mPmv_dSkk)g_SFEsn@L3x!-F(zrW3X(<-j_p?70JKW0h4tpxa~dvE-luJK%<&t+uaN+DXqP*}c5lcVF+IqLrIO@$6Y>A@$dQyJ+ z?X0~KJB_(Hg;-RC8;>9BmH7!Z+l^@JBBbRVT9oL6wdO}gf_f1X(P4ja(GgVN49xtc z3?HqqSC}J<7)2cGSw><{B`8-~4a_sX2GS(Efle%6i+!G9LzE`^S$=N>M-)w4Hz^x) z`Vs5MbNyU3)-HEB6p{HtvsFFC+u?S(1{kU%Qu{FZ9GKXW>0n4iD>xNMyq=cQHvO!r1LNiI{t?LEc9u!Hf?D!a2ec_>JcxL!z1EkxvC?zR@7ppZ~kEYw{x20x^pLb?9+E#y1Y{8u(?eUY%oUcVk z86Q&%Ue@UIbQuf3YC$5>!&oDXq0np#7(Q2~(Ujx1*D?P_rp{wOMOMKj6nbZIq!OR_ z6aDaDku=o;8G9aUPfArSVzo<+_12FgIt1RjP=@kd;wPVeSHbYSW<)L=&A zV;q{v`S$eco4ti0`jZz7tfPbdmb}YJUAVH}CZ_req=cV&1={FeV%eG3@TuZ(fKcCuGcE(gSLRaV}ED;}>InydtK`Q7K{{w_l{6-zZDS72v2DNfdvYMyst_I3Wd zGyRk;e~H}FN>VfdcC|D}Xx$`YK{{yR*aE{(I(eL~(RLiPSOV&MDxS};#ZY5^&@TC5 z5EWV$!9??pNj;(VE963Jdm$qNXeSj7g5K|`9JF68Y4~}kiaAp}9M^eb@%tX>@)l`A zno>Mdc{c;Ibd6lxw%!RppnwMR+YwR~M}1BIoIJ>qmhv~1*9R7`<|IK)?yM04Q9&^K z)*NTi9LhkM(H(DYh8d3ZG8pO>%ToJ-EBR;c+zcY|W`~8R$?f%EG6qBfEUqMymOC0C zTX}F`9yWZ0FDT!TqNyXKavx}BSz35YplDV*taW;3$fT`&dR@Z_yYj8`xIU@O*zHzl zPn!g3x5CvY#Cb;_bz?BDR)gb?b~C}$A$@`{g_p?$enqDKX#1&|QyHc}QP@12Xw1=B zZa?g;&fR|k7f)XP(63Pjp#5MCrYz`5QLie`t7{35z`^njq;e)%i|=NFl&2L%8*H!| zZ7$3yZ>eTvYpRB2`!vel{atqh-gPFZ-#PPV#og{4q^FOS#I7=;olq-<)`H2k&q0+x z&;EM9`+e@-u_=pP<=~dv()=rM<2=^Iz~Z>9>F(lFC9vzrwY(|-NR(NA!HVr&+>Qe! zb`rOKGaTWQh>eSYGIFbqRl;b}@&mWeLD~8lPT%t*&RXwk-(EE8Gf_jA+nw%~`gL>h zaTwsmdm*h&Ya}X3|7(lP7v7HU&h0?w;Fm~DeUfL585I>5N5Xvq+pqWHq-#`lOCTDS z+a-Xt;KekH^(bTnFpcSO75{0zRXX^mh{Uxprjoe&H`Ri1%=Pb3RbUb(F6b--ok(&x zy`ZX<94D5#@eF>X5XbS5Nij%>$zWEd{}u5f-vyIWQig2viB!vC@Wf^5@B;ws&O${K zuxhv7Af}>{T6tTjb=DZMEHUDj*Lhr>Ix z#;fLoQWWN2Eu<0@XmIE`7DmxPlQ2O~&v?XN_eBy60tIl82c&U1GeBLG=qL`c$j(hzNNxq$U zkNoyOUzwlWX&<$GUG;xsGskFoev5yQeLmRYAGg}-imot;b2;4`i{q4Fe8c23*KHfx z5)zWU>a0olY$;tNkxeO#l}7o}zT#U=;JiNU0JP2$!^{&i$=(O~=lA^=IrG&D7Vsu) z@9j(Nqb!`iA-el{(H^|zrM@>8_{boPp-R`awB&YzN&YqB zY~$iy`FX;iF&6>KDX$f&t*>jjs3xTqMXiu2WF@G&9t*X%n5F*aJH-z>jYs6}-Jmil z56BKF(Qtl!(_LOH9G1fRk{k0AAC)XE{mv6-8%=jyrzolmI3N)w}H3@G@rDRw{SV<$y8(QZ3*io>wQ<-Hi zbIxL$dv%ACK0XE^1|*o*y(@Tqlb(U)jxZ0kUsl^IB#x_{>Ia#+Q}0~;}h z;;*gUkJufxf|o4rw_4@7?NiaZ4Rj#vq<>odw#+*8HtiG%xp<}!z+1N4cI zxy9!5lyj-HV`6y>D2vVX=3#%$Di%V*=`EJACCt)wH5HZR6||By4P{ssMwZzOm`zec zp@SPD`oxorCc|LqR9VPUY^WS`iOCyRF;dG?%Z$zQJDj^n8wL;3+51OBL9*qOtb)V7t1IGYq>Kt+u&GgJoAPWwW~A9LsnYpn5TFSEvu1^HqSM6HEv zE%mVkoOHNX2ZQzOaEJ)2lWysfWLE=6cFMG7k1jT+jd+g#%c8h>NYCkTr&91h)$=aY zb4K60%k!>*0%2+rGzKi>u&2!0Zm$Xqy65t3bir&4@Mjb05k0kRm7<~)=*PA(H7V>n zH;7WE)=(QIS5rzp4hR=;iL`b{$N9Mh0XKj;C*X#SduvUzfooJbvUA8q;1S5SxKtsI z)^52ZLOgYjbQV4T2t!Q!xH#9;G%F~RW#QsJ+kYtSOm-hn&yJ^6+aKGxy69tZojpX6 zTylO_FmS9$;~Vt20U`kbP2Md9BQ8QFXccl>M6AE~y}x_zd$^@3=QPud`f>@*2~bJW zkqX>d{bI0T;!(JztwA4^fn=V5YUHpp$jhj3d8M=FszA>jWQk+!1A%&S|IRScF3Y*< zz!1Z;^Dx}8%X>yj@vc=!G0gc;SZ6l9W#TVAxWe0PeE96I*Wiu;Xf#1?ZRluIS*Z2H zvgN{?4?>mN;!Mkf@8R4wG6rW+!;>piae>0(BqrI_8&XNJR@5}V(9-@AB!(-pTl$H6Wq)dp z>AEF3AZ<9a#LH6vKMGq4{MV4Impf)Z#}6$(uV2%Y2rQlsSf1}7ws=u}T#K@Yzr9V{ zExcVP!!ljFVGL|y2*(r(zu`!04fJ2e%@^ zOW1KRuYpzeA|!Wn+7?+2#YYwPRvJ;03KhUb`1(a`mDP+7tW(#BE02jIrIln`+&tUgdMd-KfxZIRf2wM4 z^6XF6%iVQ4Nxw2Li7`r=R3j6A;AE2DbLmXo3UfE7XvwkaH5W$EEYS-_YD=PN&(I6` zEn}6#iBA^{teE?^rf9j3emdX{`SBH+N;wRhaBG`1veAZ3N2;vqCTUD7jSO%UtbKkw zu<|N3C%LrHzkAs%Ev>0KF6^F5d)t4qf@tVI`X3wUKLR8`{xUnD1<#eK@lZleE_$OR z(M6V^Jt8K0lmKqt=cr_a!Y7Lk0Ru+lUaB#qpPFFPdA|jtQ zCocduYUZ?quPkF`DQMtBz$8OJflt#6GF}YQxQfrO%;nzi9({U@P*O_D$0$q*hd}DE zg=v3YS?nFj)}qR4`wOJ%bH9N|ZLrilg$c`FCWiT?MwQ=mKaa z;?00{wW{%8rT1miszpO~IW$%ZV__0Bb)jXp3Ye>Iza}#ec_arz4B`!}=wX#I<%8i~ zuMNT6IkIDNjC!&-?fz{HoW4Z%q{jzH{D4yOs|AVnfbVzrbot?}e{Sz@394T+jO!X3 zX{^d==&6RMCQ{>esvFlr$;q8nyT|escD@c%6mg>z<9^8Sl zQ=UK>iv2!lW`*;hN)Ydm*Gq$OfuGh~wbMdh_+rF4K1?}+jRU;TL!+pqgFj!JvU{`v z+aiU)u?M~<;XvWJnIPw0a!SOiw@xI3MOir9p^?Vi*@}hakHI2yD*lPVzRzouM*`p8 zuz)dLZGEe`uzFs`GGWn!$R($X`4iyw!zRPvH6%-LLpP0n zMHzStiL(p|s8Wx~pCS5&yqt7i63EyxOtfD_dV4RX{eeVcYeP9hSsG1W;sl3KIcdG@ zw+=%o{5kb6nI_06mdTkYv$*|UIJYGJIV?24wKjN^c-7pLn^3lD%I=q0mK%T;w4yP0 zP~S@Nv8m`xC%d9mRd&0w&ZoZFQvaqRemVwMe^!9mszA2mtSVBmhF!|L#izi;sa~*) z(pt1Z&q+%e)qLS!ow0``?B~?QbP3jSa3ef0QqmXPx6P8CeUkP!Xtycvs-5)rNY6ji z?^5;Yt9YHw_y(_%X=X50JD5OCVs_`9xa?mOi698Lx^OH80eYujJq)y_$#e{3Ry1DT znPZAN7tYG#CIMZui1O^TR&9L?SPY|~_T(eo>g~=capTQ)HnGnKpu}NO(3bK7WP8aA zj8y&KNx{7-*+Y1Q>7BrHZB*W%|1QK16(P68(PGg|^rOde{waSG)ZBnX6O3^^)yk5Z z&c@t!h9Z+k8tZa;H~ac;yof3ebA5V@nYED!T->JiwoD5J|z=HhBA^9!%!r#v$Uq&9}y3%b`e^P zg@cmM&b^U)A1EDlMk?4!G!uqDQ>8;9{pOt1JWq^#2HHq*uzud_W$LVTiY9u(G8{g% z>;}Bqw)|HAll!S$zH3V&iGC%^%0nBx(fe45SW7a#Zpoq*r?L&imn<%rTZ}WXx?wh_ z+ksd@u`%FBkcynEyQyrImb5pCeC(Qe|YM&v}`Q-3Y$!o9*jRL zDV=}79$AC(dyLP8+gwezLYO(rq>6CO&v1RuCdPdKUR|*t8(k_{oPq`%Cko%9_>kRw zR-J;b3aDQ(wo(BFRQJRT#A5DfgAr~-PSpyno{Qv<84i{ z6nqJJm#XDc*^Ln)4$vk;Q4b<$rpv$`t*Tu+ueRHuQ1jA*(ZXG{bxri=*jY*2i%C%x zx_K~2#9tSbpPAmxO4Z=u%k7+BxuaWYWzOp>=C=DT@(95HEU=Od#J3TmaYJSF#1kj0 zjPWnYHfY~1qIiS9N$h`C5-MFQnd#duMzJO?%pK~H7xmlCS-H)#{*bP^@a`}kDlFQ> zD)5}rpk`xp-ssFC@bMnXZ1btU;qPojd0Sg=AO1YeSX;Yvzwgl9dr|0*ayw!(AXO&i z-dD`EYy^(Ov*240(1{~2B`D0OOj9gq=#tj@RQ%MQ7zoPNo@g+xg&P#Gu^0J6reizR zR-i6edJ^Z>T3d*npB%Qt;F8?dGN66Dwi1Wl(hy#^Jvc%iE?`bQV84}`h%>qNr{T7A z{AQj|<>pavy}u~@X*ugV73I_JO44AU?O>6wln!JjX|nd58aaEb5!S%@30l?&Qj;LJ zq@IMsvgWOSzf1nr3ze*m?bDPo!}aj05D$+grt&?zeZ)vy0q@fo!*5MQP@xVTd<#TMO0jbel;UJ&owX*2iYfhay z$q2|}IT=2imm?sVdfW#-SH(&g#Es48Gwq80s3O)`&MaLi(HF}fLK~#~sAC(O-yXKB z@yg|-N4VOuH?-Df1N+(-u zdn*lIwIRUvGE&U8bx!{^vQmo&0~za=u~hli?6PpX{`uIfRF^QTq~7YS-q*gm_zt{J zlzF=Jt2ZwQ)hf-L&QHoJf;(nT2){~K}Zz{6OoGEk+-N#P;d?i zp7IIUUNXD6-xQ9SLY6CUn$ukp7iDFb$ofx5@VG=N-lSfxM@QFu!YCy2W)5WiTK}4! zbsrm)tv|Q!8w*t83skBf0)gp&WY)Bdt20ZHpARNsuA9T$}t>^Nt zy7;=QccLcLvD{+dRqXl}7t};&Y}*0To_&z=^H{K4(VZ;xUk|$^8a)X*^hPDTrw2}i zl2*BtggNEka)D!JYh8J1@84$*QwK#wv;*=pM=sI(Bq=VQ+CI4gr%1Hgwm?zKL~S{N ztggT0+r-wopzT@7&jh<)F1jN7xSFl6v$rP~-bDJh>xU&|ZrYhr4eTH@pHHDr!)eao zkk{o}n}aUs$g8s{+MH(W?14cXDwV&{;a z8qF{X^_c0w*ywJ~X#mj}wP*mq?CQ}E=#kGaB_?5@A09q;*kC@sFQ-kOB8U5tOZ}5X zOXtvZH!s9C;^JY9PYDP&D+oT+va3Bh3+zB;C1pm7`Or7n%2%>^1l|lrX$_ohOEcF5&ni0(HL5m~ z>v)44dfI1WbKg^e6$Ik%7UF`1x4TO!$m2|i+D4CREVxs%{WM}BnTECxcS+~Zwyi5x ztNOC#dilyrbg}uRi@BoruSH|0snrKv&5+nS`OFzBm ziNwoJJr+kDI#ReF;#nV3dVku-qHUf&?ZSiZDmqJ+8Of0Wj`Y|^E1%nWsJx=j_)X!! z$lHEz1>!w%iGDJy?l^;3jMM@yj>e`@9qV5|@|j{5jHaqBm*1Ar&d`i?3`}m5ih3yG zw$V84qA*W{tZ_SfyrRz|%Ic0Z6vKRWDErnetSwuRa6rdy#AGkdlAMh#qK$srtyFKF zz>`Sk>X{JWM4$NJIv;6QA{mx1Zcru&dYmbYgtk!wWPg}Dfq=?VPl8G->5mgFydj=Ei1I6bRa!bUDAy^j?zYNUN=Qg!L7*QZWekAcz{ZBwIQYWLW>8@&;SIvFF0DQtecDZlqG z$z>$KD?%nNj#og>^HYL=oD$T5Q)zU3ftjVRj=fc%B`)%)#In8;>>pGq(PMXVSH+P@ z_lbTPBUltSA?(aUcIvi#HB3hUIx$G)g%o)V2buzBI=BbEYltt&MjksvX|WMYG{$Z@ zRIHB)k3Gw%$<_RNwWJX|qT(M+bsO+Jv!(~OT-L^%?j+k>I-J(>zYO1CtcAVG$uhX& z*{SJ&M3AG#L6L=p*?1QJsNv{WF`q}I`iZXC(Li=%V2dx6?Jpv<45P7pkDz`zY!W&a zI62XRdz2_ItHCh9%-9d-(BYbvQ9V3r(2a{?O|=x1>@)Vxa@X zjZ(jhxPJ<^HPx>ju_z^4IUsf=7bF;I7JXXCo@Aiej@pP`A#9FzRlL*4jOMV&)qxQP)Z-N}U7z>UX0RJ{~3?y`Wdp*xDS z+z8=A%vHcXPieSiVGS2utG=SRlYNbS>oOlI_27U(lU!m!;P8J!;!n&X?GPS7D^SP3 zSWyd$urJi0{g#QtdY?k4iKeR_f;M!{d=Ep``JSxFHAtbgs>9?aw+zGJ&dx^J-5hF- zF4?w(5vTK7dz@NE**}#dMFY5RUO1t$pm;=eOE*HCE_nxoQEaaMw>3s??q-A5xOmn9 zLiY(MSUb}|o^pP+jf42GU1+S>NK5yWeORsXoYT$}K2z?rFvRoTig|mt5sLInkpN+oX3#oe1KK@{7IP$c6#e$ zE+Z>#c91A)D^Zh2EyKK=XoE*Nqf@QU;>la#h*(v$s*g;LHkQA2z%wjDIJUT=)1H@( z^~Cz2(p`Ion6_PI8= z=Pw7^}*CcH{B=7P9Pk4LZp5q^U{xMFFOhrMf|t_P~jJ)X|0NT1~Nb0x9Lx$zJWmP(4DM z5`!R=hR0&Im?lM6l{u*-dG3I9VL(fKq`D^OTyVgCPWlbA8W3H1m#Zszhj@|9;g{4@ z+de)~2*0hnX8t`hkZDyEyqR38vhuncSmz^DGQK z#Vo5CA4!N~0n~4z-Mf3BX(m=BZ*z7gBO(%KzJ(3l zvwY@wm%c&-%h#lb2bz<16MIQVA#ZEew2Qk9jG_%Q1tAsVAcs?U=Q;Z6NqUuKzg$X5 zh6#IS{ZbE4b&TL7$d!XIM> zJX^V1ZSLvoLt7lg*K&vZjE;ucl?>~qA#K@2ep}PTfXQ!KHL5Ysw9}?Bhj7(pA~#;@ z-Si5whiLMqO0F+*@5)ujnpq%c#7)0`R*|r{xv}}n!*e_5!Tb)X5ACe;-Qh^ezgQ9;a(o;{@K>PUBx0^lA4QjgtjHAy%dSTZU5+|`h%JMy_zko z3d{)t>O{TvC_FP~#UH&#Jht#g-(X92Hb6fX7>wS1CdccNoNXrP-n@}6uaFa*jrY7H zF_~c3$E_l#MElsz%)a&}w!lE{AQ$7f_z<2Rr|8us0$n4;L47{;cO&KS^B%8ArZ%UA z5VETndID@mB!TI`J2(;cUb3{-F0qy+v{=5h9hx|@IPVkY?$Mk$VN={boO1V ztc%tbBct%_Gb?N|DwRUXY+N`VpTea0{|COBdyQk(DC{z0`2H*zTl)w%#{NGuZoiaJ zIz`{(p6SJjUU0+bMTP%&!52c+fZ$L`y(=U-VxJpg|M4X18{V->E;S%L%4gY1yJ!1>eDHK}Tb+!v;k~o0OF~Nh??bK?c_MH! zHvz57y{K-1JO0WIZ{}EA<1~Di2S^dR%WeM0CYje9#Bux}uSM$7${i+YcK0Oz-%mcX zpV36-_anb6p+B$Wc@lrlZi(J-DD<_g0FA`Q3?T+K#y^WlwcQxP97$!|7{l)JrQJxv z;7GL%qjzx>%1Xj^iNzPKqIXeO*9ixlyR)Kp8S|CyY<@1qDKHX+4aF)O7y>_|Npvv@ zZ8cg<<{}#l6TBgCgH$WAs~@au8p_o;>m4?@G`$-uj4!6;61^5$eOVh@8!UsY(-!ZM ztg0IjtkgPY8eOK@LdGoFtF-FYRhsnmx?LVtdv+!|aG|C*YJFL8q1h5g?=(}bQtqG^ z;jNDUFE-vXDz2s58css+0Kr{@yEYEN-GjRXclRCKT@&2h-8HyNaCdjNmlK}vx#t`A z{;1JCS69_sb5)JqyZ7jtxRo{L``Bs?=IezswJyNcDa>Vs;ViH9Mx~cS7u8H@#Z~EE zou*OHf=#NfP2?v5pM_$z z+|2G4$o<`Tz1BSRP=b!1$a5i%L@#MUV=(cgE%av673ZVXxRee#zcK=a zlL)q@My>8v<677pwlX|L*f@m=5mi4{We~6^Y7Vn30?`M-Se%U8-oR4{zCx2YPu2ff z2bTvVFH;#;WoBa;Xn^=r!|wvDzE^nP+7ZsRJY$9>TYGO*cs|yZWe&=n2DAG{=kmD5 zpz6GOYoG;tES&qsG-sN=^onw4YMe$PwE}VFP{v}wfTw57*X(CIL@c7!*9XGy=1Bnk zHQ`pO#L3nAC%0|-eEHsvo`c>v>^P+Zl=~UVsY^=c*{|A~mtxA9mlMxb47FI_7hCFi z(l6<+x`Q56THf0ukUy2S|J1$I6#sB58ER@>DFwR6>t@Ze#Tbq3`0{#I#hhWQ{Dl-Z zIe5ps_-cHIz8%aW#KEGsW7V-Hk7gbjUR z-M;aM@g1q*jdvrZU32DJ&(i~aq^TY@5!f~>5Pnr%?Nz9E@KOh=xD-Dh^*J`q494R? zCR=Odo!Yj9{^WpnbT=}X7=f@JkzurGbf6z`3<_gNcJ$o7cFRv{%vnW8WCWC6iS5t$ zq);INAKv9=--#y?ky|o+D?}*-oJs(1C3^;Z94Afdn(}=X9a7K>TpXMEDj-l*Im+4dLhUU<>lWQXS8Mt=bB-7ek!_eHF zQa>}+T&S7ZNUyrfjGy7^>fYFx$3?#&)Dzk2#bm%C$J|K&|D8e*zKO`H3Gq=0SXtUx znd{oUx`fb@|6hJ3O#h!>$$w2kn3(@-67s)hQT=84=3@e|FtgLL(KE9WFcB~l{1<=- z*!~AF&=W8){tJQ#7});@GBOe{GW`p({9~Q+--#Gr%}W@V{~cgvBVb_pZvc2DW@h=@ z{yT>0pKM;c{ZD{}o`C7K{ZD|EiGb;~{ZD}HHNf^S0Zi-+1WfGz%9`aL!2YiupjS;G z2K|3c0%8EYM*f=`D*=d+{%`v)4d|8TpZ2c++iT!ose)d4LI2{_e07kCQT<8uk5A11 zS_R%@d{Sm6Mp_0&Hg*CUCVEC%MrP3KcvjZ8Hw^R)477|)ud5T|B#q0=%FIX$Vr60b z$EZf|yPf`bOM3zuMiy3DCPrpP#($y$y4IrKO^l4~2|!G2vAG;A$WaZW_UxOH^lUYSl~B3mZ{yyQ zVR=i2?QIs&nIEY8zJaF6mNu} zH@$3c>OpUM+1}KH_}&-<-w65NkkA_v-~s+AKAZ3xd@Bw6TcJR2m0^D?6zHuo>~D2q zeX9)nn~E4-UnK#r^z3h%Sl=|UziDE9)5QL! ziSDg=^CZZxsJ#nxTue=FwKxMAV#w?PU&uAT z3Yy~t&!U!pEVk#1;D5*B7={JclTRTmHIAW=q<{GXj-|Fc(KNIo2a}{HS}=^%)EuYP z$Zr-_H{oE1>%+%FiV)A2*#O#;AlntnGfv;-!5_ChXD%DTg;G7P^>iYl z6>$lQN^@3OIZ)G>dl%=yndgq40XOa3v7<()>$iH%AE8B&lwfSq6$$i@p(sg3ql2`_ zkUQ;sd424|pq9W0)Ohn(zGflv;f3A!n!(MSirTOdHb9kecp%AZBR%ddq(jIds{xhv zcwg4wiOZ0>-Lk*7JLH?-7Jlf*93~(!KxPd}>Q}TIwJy6Tb!X=N8i?i(mF0WKUsFCy zLZM^TZseuq_1;aqyEfJZG+FEe+vYo~Y@ebh#ah*?$wIF|t1*F7Gqb=z>j<08a|6Y z&EAjRAAIY!YD&#LxSf?w7gxbMMnCf6Kf0d!ugpqN+*o7KXw@q3521mw%X?9GrlbBSSa+ zjTT|Ggl}eF)TG3N!jd|N!AsJ%mRI52Ie7#E5p8|B)=YE}jl(`%gU^C_dgN~*RT&vxLQ{5pv< z8BJQU^wn%7T?xL#&Id-ZB&-CmQ-7In9M8ClUY+hZc*(soO21-FcgQ0x3E}U_SCa|t z121V=QL{#0x+=%URom#n{$^w8Q^;GHv|F=QS)@Tcl-bxL$0m*!QtWe#nr**!iX|$Ief=!HyR<}sg#LxWGbaV zXjd=R^~BC_?(>_5~vI;LHDemg9LRqrw)zp9j72>@M z5&=T0Xr3=V?UVIcKpMd2MtcUyi}mn;@R{qES+29!C-n;F;!kA2eOZbchhO>UJn}pSX>CqToA~6V6izlL+v6iH;UhMgf|-U9 z*wx1N2CUK(vj(=8abiu|*7eS&-D)@VpiUv1#l7RUxw+%@5n^R@WtkbY-KZ|qiFytO zuJex#{NgjuKNcaq*^?z0#RxHlmpf8KAyR{k*8Da#lYKEcok5 zrg1gmZvt%buM4sw)wm>?98=IoU(bwT_d}OOG{-EbP>=YQ#MSy8)Wu>m6)AMD?wW@yV2HU&*V@t&&>v@E zhJOme69F>B?XeAmIgLLwhLC2u86%l~RnV~>Zs+c0{0#A4NS;(x{xFQr+>=M$u3G3{bSY(P3$B$K9c|DQ}@#`6WC*@hU;BmTW?x zcSj(roo)DiZ4ISE4}IL|MCs^OhT?N4FM!H;8lm(NkbvJW#?z+RW|M&Mb^8`^HuR| z{oG6Uc^>xcagrahRZVmi9R~N#$XC!aYAgs)+8v@pYdn?kEq#>FNQ&&{?d7E-zMzAm zcno=Dd?q18^-E`!BX`B#%1pc4;>T*^-yJDK0VeJe{O}&B_+_3IGZ0>WjiqUmd|Fk8 z#e6*IB=8K29Bw1rOlR1Ism$cPt?86~meR#&lg1cnBMDtyK@&bdfy%nQ;-`HnjqJ7h ze13Q1`@u6yw$BPF*jG=tTGqSuv$!8ab66Q-&w0(GVFzXCMjh0~UCATJlT({4_Vr88 z7VylI{e6N&dU^sIB0VL>p_;dQ$w8J< zH6pY_S&IVJt)!Q3j3T8MX^f^m*c%5`5jLyz3AL-+nt?wQC9B)GA_c>ThD|8+cS|>0 zMGFR<<7edVaJ|e~u|sM{#HQe-ZsKw82Vj+Y5dooR$;LmCIybOD@7JuRB>L;qn%`P_ zRuvJm%8yEq(vMn?d|V{Y-H~03v`2AkzgU{H7AmM#>SS zI*P@x%tI>bra0;s5pSO06I)&0xwd|&N2mw8WjIDYW=ihy=)hfX-GsN(roe3|0~)dx z8IIYUygB@9#S8?IDbF&rEHH_UoFZksva91<2a=@^*s$}u9sRX zH<&HrFQzRz9FsbQG<7Y-1a4;8$MdssMmP_34TPaPMmEYJEa6nkXYR)bDBbVpael zDIKEj#Tn$CD75xTYGNj`RVXw~>8@g}`ffIpY<(UR%oD8o!_F-d<5ks3zRS{_r%^xkw8ZAD7;xiFkA9Wm@gp^-TCHz}}fg)8ray=(84o%$b zw>mWGF>#7>Bwla?QsynC1qyFY$$FVDB~2VX$yaFQ*Kh1K)D)sUfQ*thxG0%iCV{h` zX>;UU(p#)~Q7DzfDb8qcX_IV=*d^RNYG^ec-K7a6Yd4%j#cns)tfBsSa z<3-f@7ccp@3jiM$_D;sv=vKy0=+UUN>T#!2?-^DX8W43(eUW$e;-zlx14yVhBB1Eb zv|$JDvN~a&6U&2nX^XdIpvo@D{8%1YJFy?@Iys&>*KnWRbirPH%7b`GW^eKRu%4@B z2h$Ki7gwEV&t$q(fYNNw3$^*qD73?)i!LOtRX*F zo`M5HY~3%k?)}=R@E0?_Ww*S(UmnvsXC58a$N>Sio)whv3jmtzR=rc~x%Lze5V?(S zqjK+EL2eb1A>jNKiZ%W%^bTSTa+x-H9or8doH!Y++*+7`zoi|T7rNP6=~k7EEE$~^ z3f<zKpq)AwStCi?L$!av$95b4nI%-61{)Ba2Z;=J(vZ++^Mn9I+nBPPHTCwJF`C zHX`7)v)shlksh(b+x)O2Mr*6JiCzkR7k5G0X2Y|Iv?D=l=eY^9BjdTF7G0$AuA!%f z2(b3rlo=5%wIj8SVTx(1|FemPE@^2;xCsx;_%CkFN4sf|SJDv?Yll{}DC&@kT0^xaLi+GTDO|;ZJ(Nzp%&ije41#Ph; z-$i}0eJ1iI$R>6sdMAwJTfY&bif83~C{VeVzgN2#=OD$64;L57-k88JX*P%($f=MA zelknDYH*M}5otzx#*9d`iKFL8OxT;$GAsQ0G8~y2Yba)ygFQjBN4FPluh2-tO~d_# zCN?#$Fh@u}Yp7oZ&4BoVG0I^gq_XIcu<6wljPE*jX$x&ae2--h)uiUKvRd3#(N%Mv z)FKXEOk0#J2YG^Juh3qmk?P>P&~;P`kfS-FWl~qI?W#Rbb`-@E=`a2zXHCA8SrUsR zEb=`2BpW{mKbvXdX2N7I_8Xm4B&kG9cEN<8N${mFv($A0*w(u_;=0!xJt}rlR|QuQ zR|!{THL{X~<#>=NXEw*)k7|W`*?C$I;_ng>VglJ6^5KhG(vbq2^z70cR321M0I|oH zC+awH68W5Ogo^!$w)Hp^nhDRbrJ@NryxA)`;1lk96eg)SG$Q>+2IzCD@dk3Hk%yHr z)Dl$LTN4r!j3xy*RK0x}wq|oOputw#@@hdf>K4M1s6PW1TcC5#JFq)}yC08H?y}D+ z&w|h2o+Y0(p80u*fdYHQ#Eqk?H5P6+1V%3)L8{Arsh2+pIbtJ!iiIn%((Y$zOxL{3_sW04rkh$}AuDrGK(65kK{i|#@8W>BHu`{!6*u|Yneck(h z+fmhfE$WnVCXB!VvbmI#v3mobzUMMZ{4C)r7?M+h^*$|1M;7EmqJ>rdsCug@>s#cl zRiB%dlU4%A^NR2)^UA!$o(8NEEq=D#-#I|vP5YyKfWDtL{(2sp>X}vxwJZqOT^TQ% zX)9Vu2V@=`N2Q<{z_ zhvkqNy5&BeaE_xzIy=o+*CQt#tqsCU>;ROTQKKCXbkp{U?ut8>;|QzHjO5MGXuBt# z<3ssqnm>BhO8@8CBVPZej?y*=$CIo+>DePIl7)8k@`yw43NR|!bDsV$cLsEaBctp5 zr)cH@w%~DgL{H1r;{GccVU4RF<__r(7pPh8DTiC=j0@W)-f>Tu4lXmAz%tMRD4XyB{L4xG>oQbi9+LU&>ED!Q~ zHFF6A;fC6#RdlcK<_{$-u5&;S@<|>A!>v=VVc`FY2e=nZ0Xkbqhh6w{kwzWTg-F*; zgE}WpI1+5|H$D$8-h;W16~Cp)Vq1TI$boJ#wEGdSssk9!`a`sVqNPG>cOMq7$~Oc|=Z7P2iltE}aXV zh+|aWrcYTed4WqG4h-;z0lnE7l&;oX9A~yePLWQYDwJcqfct!J?o9(`a4A3B8|PUG zX(6Vum{lfcm}c;ewL9Y8$)Cm`-w{ZJPLG!k^FVf)D=KPxUoN<2l`x459j$->4|s`= zmGa{L$x}Lj`*Zn)_I=%{^0S5eutGV6JNSXlOC8?)ProGu7xe4rr1p?gEZ_0SuyQ6| z_y=pw!<-YZwl%CvWbh_^-d!3^UF|7+(=x%5oHbdq4c$>qh%3c{c(CjFbi!$iMm0#L zX^yO`E^+n;#J0gFEN5w&7h7_0nwg7qFdAN}2W(RSWAfx=emu_##Qj3{G{gMc1+u!P z;5nLRb!`^@m(|B5vo%YqJ}a;56E@RLZf8BaTcuqEtcN4WREztCNe+$=9U_(3!t%Jc zlFQ0vYO{E!!{u&{b=p^d+&@15iWo;=nu^T_GwPh8pzHflGut%8R#|zb%myQ~fZ>9J5$*4hku@gRjq3f+| zgY=p?gtaZ|parQiV7!dlY3{K`_Y{pi_-7d%HGDqIHp`pz>0NcoMqiI2x{aa3wp!0> zOp7Y^!L`_sI?db4dg&N9C=1TOZ{epwQ6Vz`FgeN!E7#A?E6+BH^?PIELuqL#hwxc! zyH9lm>?$Ds(h+3Q3 z$)-o-C3Q@zmi0yFBRhxdpo}jirkB&DRMTw;|+xv)4X+QMH7vOo|wbUB6DAva9Q>*g^<`jsBc-jd{aIKW@fZy9TrWx ziUbx-PKAV`wz*|BHXTbBFcz3U=awcP0jXRZmQOi_E_3z;Ai3c|74gAPG%PcsYeilK zqpx=jYtnw(oy}`=AX)?@MZ2Y@-aMC!imB~3JopMGBTo4UTQ zh3+`*&%B55?o6W7c4Z?TMa+Z+Eq?u$O$ky&=9)41_}vG|+mjTTX0Ve3b|3(I0Vp0a zceE0`d#>q2!cEox(s0?&a}+eAb8irTolW6VIwzP^=vKO6q!$!nq14L2_`y{B3ECgu z*|OS(u;C7zB=#b>aM;A8cp2jR0<{T&$~jJ>W0?s$+}VXKUy!^S+|RjMW4ngo$>dI= zuRo${`S#k)S%SX&9A=vKw}r(iFbBq$CXE|Hmx}BrRoa@7Jb@;)r#IB|EE)n~Wz(HLApqR9!=We7 z$MCEhPfVpg=i(r9K1)SC;(kZ+wwM5O!6Zm8kUZpmsWher(a7dkxXI0ffxD9{bjW=b zv3${x=0E5>(-S2e-##qhUia4BuxyrNgr@*-uE%020I$YgPwa)+f3=IHNbVne&Hgjx23wb52_2C zdCKo{Kz(++#lyh&XMA;IV>yIPN44F@GdGzgB2;ZGVi@P;LWEvL(!7$%sNgrDU z-OF5`_sn@aKi810TphGDH;Nzku|jeho82tM$S^3Tx3&DHx4q^x9~A+I%F4V4nT#A8 z5fAG$K8i?GJ_;7YW`e37Z}d+%zgoI}MA~$uAF7=u=4|I~PF4FG&2fg(ljLXk`cHgy z)z4;S&U-!OICcBXNewkDpLTBg!&O^0APS4rL>B{f3K7jvhYm(g+ko$5>gi#SP{^=A zVt1!u#jFKx1&Om>x{M=0l&BVYABoEnsMH{YNF6OyD{DpkjRLOFFEZt`a*uHpvSZIP zOQcaemPUZlbRXIauBo(Ycw!X+DO}Pt3Is{sI9?yraxV(LyS7h26c9Q7^_Nml#v@y3e$mZYMmVLrQOX=MJ2U(IHt$4-WFawF7+xJ23FFqwS5hyL_-XLxjy`=@!oOjFo&=(pGv8KN4lLv9eX&)Ps6qS zYxGOd9W8`f2*Daq$GS<1ks^a$5Jr>Lde&v$I2Z+L{-1Lar2KIVMBqPv(UcMpAt0vw z(Hd{0Bm@Pa&q&n^#3M^<|I+-G6|Un0cg5`FJu-TZ!oM4mX;-*3Tv5pGJzn;4G>=$d zZmiuLZ5^TRv=T>2EE74lx&2cFjBQwP#3$eJ;ar5@X?`dj)a?N%1+tI02#AUyuzxtI zK@E58ygag~Wqa*T)K1qDO>J;ZWTRXo{VFU6MXQFRoPu)B-L;-!iD5h`f*K}XjAc@9<)Q6kr z$5flT!a4sWPS=hjti&@fv8oJ10LUdU&@ng=3J^P0&Tk9sAGfg6I`dcTj&y z(dW(PgX`7E4EAyQ!=0Cvf|M7gY?9!k2p>Lk?8thjom<;!A!>d@pJZ`}`US!bF8TvM zJlxiV*#p=jek^i;Mup6!OVffW+>7=Qv}Bv|Rj+ZYVW_~8JcUZ+zK!%IY@k;h$L!As zIi&I~@{wF-IHo%aTbGPnfV(*FcAR@ zfleaMqH(>d0#z)WzsGx9(p_oBiXKf&v%)?NI0DQOzgp3y_RCl>Bp?X)an>=kSvs8g zdVK6At&^f1+x1&Ck-8I1ibwAhLXhMk2h zvWx6+E!%$UL_T(Nv!PX9w%cQMv5n}h23^?tWR#r1@GePcR8k$veWk^b9HwG;V2Y#_^2%A&JC4yXG(KnPUojj#(r7{KY$=Hz>@;=m_wH#`^554ogN2w| zm~}idQf;ospd8u|2-ybNRGb}U1~OJFUU8qHwf zFPu9cUz+;epOH>{=fk_1*VYoZrt_DeM)O_Zeaid62yrkZya`c)hQ83bKtl#b`3Qz5BACN0n$o%CZ(T9g#-F3=pI8R>)ks1mHrM!)2VXtb_^(@^x3 zIQ<9p;uP()LFc z%WX6)Tv|-Kzbg{mEnQWFrr`<1mZ(W{rzSd)9Qm)p+NwP0npwY@A3{Ln>H83Kmt>U>#FU!W~>onw+<^We1S5$ma1l;EjU75+46o)t1i z1P03bJV7j@a+pu`1?BLa^q{$qpT>d)#u+J zT3qag55ic!eDE%lY&Cx#pS#&$LY`lELC57*g_O{{(nAvW{d9k@1gg;zE5S z5Kd^TAit;qfQI{V1N*;jC?Pq3h6Gob=ZdGG{{|BUBVkM6LaiZ@CLfXkYK*g zzWY8~5T8Lt)1^dx;3B3RFr#{T+OnRUOi8f&PPV_|)F-P9msf{PC?Mvy5ZS?~>KZ#= z^_Gcd59#YMNr9RQv{!#VX!_?mMt{UMO&BM86LA#6p(UGqE9c``A_p1rFRt5KeT(71l+<&-IV zsARIKVKXx4#Fvp_Trx-St}QzPP!twDzK=lq)(!HrgC`F#NFT0BBfUAKfgR4|*6rd< z=G=XDhW&J@c_UMDFyPi^!EP!cIeSKf9)?`Uve-GpTXh1|J7Ga2?=(8xB3Yb>$<8SA z85zaOI4paU@Qt5zniZfUsx2z+Bo9#}69x4*ev`!J0#Q)VGT69YRvV`g<7nb*;vdB4 zJ6b5CA+reiA(6>p9|RW1quE(jpH&24S3ggOT(fV?q;%=;6#IPG$Lg6A@y=*5;+0z(*7fxpeu^FJcR$A_qwwCu>f5JKeaY{!XSQxd%s|7~-ec&!xpN0!P z>*o~DQTE7fF1eQBR@quraOrk<HMA*DFQF8pl^t6JNfmEt^ zwhuPXfkwiDV$u*U0uot(`%2<1Pm2D$6RyfK-Bo|4B}Yq0b)%otS>$c2rrx|0w#IuF z`j0&ge3}XNvS#lPP1Oy&x*pjz8S_BUvvEE%@bbS6iZ?P?jM*$845f^pdXt=eJnqpR z0DDU^-koE6Pxu-_`=}@c7m4C68XBlkU1&^)@;~E9jobJKj*<#j2lCP zeDLpio_xmLtDP@PFyhH(yTC5)uB(f#pVRc(La7f&mA>DgEgU6UM@%xn9Vqk2)#xWp zGaL>1EERX{)CJQvcf1?Wn)MfAi_!?t2A0)mb%UJBy5i8l&zb}B_(rkgxWiTm@_Ly1 zO3tV@=bd}jOPw6-&<`nWR zzeGmJCK98j!Ula98To{Seb=loLsyRO-@xy>yeEy&lb&(QldYbmI==Ey*zKxiOa_C2AFKEH zt%Zs7x5MTN+hdQjx}&HLv-XrO1_|$OYUA^1=@5RV%`s(ai_Ih~507AC>v>N1FKDiS z%;wYmTW=NG91C>cpJnj0K#T$U)s1HyPLQq7&gq|fLrW1B{aE>41f8pXuL2Y`Hc0N+ z8cdsBd?F<8zeO|^V-d?@VMW7Pu#$C5*L8@0f#wq_VaA%hww@+s3EPhZje&Is&=l?V z^sqbSJq%f(vU3Jl#NIb2@ox4X2CALRKI2N7v@m9^_f#J+TIzg?$^|a%%hGi+>OA&G zGQGHW4ig!5j{BU;UOg8bwE>xv$mAW9QO}Yy1WPa{Nbq!|LWvTp^U|&bGlvq5{c`gt zqeeaDn}z#NDuN*kgJ9M_R&Z%y3nVIX<8Bxn){Y8EWs6H)Zx)n1gn#_%#A?4=s<2g! zC~nBulYPtzIYu)zvk+BZya{fpxKZF7e4yKn=V~+B&(1h9(>h`(QwPe^=t%2GJ!F^i z{7xFv+v^widuuINu=ai>T}vAy${6r>O{3XNOqNpI2^h_r+X(PQSFPIhM&^uugMe86 z%xLWNZGl+sAgHj#PX!{4QwdE5s#(`Bv3jRqn1A7Smz<$7dQ}z}X}N7vL9V05{o(7m z7-2z6SD_g*kB&(82q9o9d|1YXhpCzPcuuk2^G~nLjkRsh!Lj5LQ*QlEa$~^)NT#?` zTOc9t$&~-g)364oDfq$0+5Y`(e?P3L&BFHAGFcTS%Q|NlKX5#?A^lVYGmmb%uDkje z=gG+5+Xx&R1;aLQ@s?NNURzy|c$NI-ZGS{`sM*=^>o_pGlhT3oKX_71>C((Dg}785 z64)x{NQj(l9C%J~k^b3mW<-@$_ZV*GBPlI*@_IAS2PHXX14wnYJyV^r-BBjGAD|J! zEh^5X#`_hu4)>CHtX^Unn$Qu%e?Dp{nW_pK2nxFtZmjH`J$K4qt>|%;)+WB=98wEu z3(-0u&P0>eqU{8vT8fApDDa#R8}>k={T~mYf+rN+^>8Ff{eAqAwL6F3*YaOq6Ijwl zTTjAl%SNMY3R|j8f7}1mRhzR`VQKEnr|#l1K3&AI(~T`zv7C4VG_JC07@er~LqKaAX0k zE)g{(jb?qPRFd({a4%Ghhx8+U``VJ8Xx_rc`ZunQ(h%ly`2=vc7`gu0kw3VElHUI@ zVbd5(yXCO!UOf3@EzPM0+GoRshas%ipACrQ4itP zEN#riE!V8ge7`COtnJZMuOC0Ka}W#K%*VmO#Gqf>7xVGYe{8bG3m4L9?y|RuqX9#f zi06rCUfx}sDT0l^AHqSKF*zSmRanNwPx{kE*WFtHm?et*NZ_%#oH$%%<~6ri)k@?% zJv%Oe5m`7%?DU9r*3Wx?G;c)u(Re6~IbwGVxISeAM&m2I2rC2$`QoFN{?WCAn?BF8Ku>1CW%QiY`xDvHQjWO7t7mHN)^$W1`I%4F2_|lkn$&7SnU@M98J?Z+>b)B3%%$AP& zNY^5;wVp~nh&|H4x7~0bFR>7SW(TR*K;;HOEAqBOXy_hR-- zw0M^TpQ;CA;q@(eh?GQV$916)ThG9xqIWOav@&c%OF#d~GS{?Go8 z>naN!=!LJm3bU3rkoEku7V+P+4?B1}ZGZVlL&EB~59_tR{uSgaO4Np*S98`(N4kvd zWn;w1k0=G~iMuspo^WULx_n1=mCJJr&pHwF#Xw#zD+CfxxE(*28?BDC1^vh_b-?=L z05OwQ2Yiik1G{Tn<~5~#GIsv2JjlkVdrJ|r^)VZ&ZrS0%u9oc%t2h7}1a8g44aF1z01BdtBY!?&h@yV zuRC&pi-?&+#y5fp2p?QqrIAfHM{tJK34&E{q*76ov+A&z`E)@;c+mPq;R0>ZKc_^e z^*d@M-lcwY02*4vJxpw@NevL8zLFA~ZDV1)VpH%m=$gp?pf*Xa|KN*&-ic?watZz5 zWpt9nskaumTl)LLt;;ixQ8Q&Bq=8e`PzGg4c*@Y|H~F}9wl9GL%Pt9f0NWi424gZr zpU<#}>RHSzGwdW~PFNAzsy-KuzsV=SOn=me}DU;b>$sb0!Y z45K@EXwN*&$Z>6AunAE@-YbyV&Lx+=Uh7n_ig;e&_n^C2J&&G8GVkSEbXvojwo=n) z=)+6>_=l_S%j8~Zx&v~fq-%awJ;yqfv{MPcf{a{N#p{1GSNNHo##{&TihPrADz#lS zjW!?*6WuN`r$%}-=NSOdO;yB>^tlwqM2&8tX`9Y;Bdj=DL@tv$q8F>xmDSOTn%Det zk7y24FBlhx=S3(H2Kz@ATu`X56o#oNSWE@|roEhKDKU~NDBDc4b)g5T1$ zv@i!7WM|3HvTyi~TJ_w4*jZ$#USi+4ZEOdatUIi19V`WJIMx8i@hn8Vjkin1hhYM_ zylaT+9MmPYvQ3~b%Dm$)VlTxzoWwiCx6UMJMq845W}U}pKG9if4fSrN*H;n}=LlBF z+b5U_JQGMtY{cVprtxRNq@wU4hwj|fk@T?MfJf|$r5E)ArulT z<$e+7$E|EOgs*^83%8X`_?Fuu;dC@!7Ohin@E-|#(BpT9%CFz7>}U3eU6vc$VuCL? zv*#5Z=unZ$?#q$C-8AXrUzzM+_BT1r)9GlJpIw*6Z5>fIHq>*psS6~hcBMvLw~WpO zITRQ1X&!vV_8ijmrbByDJ>j2%a3L}xuL)U~ikx|u_r4TxN}piDr{}xs{YCxRgSK(G zqL2Zv{41#)_P$EM`R@i7Mk6#iYaoyLV1#cm8B-iMbXKv$!wgo8^@{o=5BErCBEcJR3hhDmP z3~+-Lc@f(INMV{^`OUI)a%I{Su{T)XE76Ate1?TDq+1)68lM8jVp z!dzvD)J=Qp#qVR$sj2-O?l$h}`?--~;OFUuLlE5f{&buU`SEZ}-?*t99|sp5*N6=R zme->asI2>3tiYz6NdJw`tB4&IyK|=rhh8#`4!4gF*M$20fkA4IJh-YeGg{ae!l>VJ z;FzV`)R%S1m!bwI3gAL7#?;f2JZkRvC8wud@v^JTzThaD0)ATM+EvP5-C3vNUDQjh`juqqd{I zag;_jipkhEoOlQR&d#p)Y_1L(@_KqA0TK0CS->sMJJ|Nd8xTuFX0DS@T&Z1FTyH)F zWKCCZfxo;%Izw9?2Q^Ec%?HCJ!uD34=d(N|^jp8XT4Ve%OPv$utd_%c?$SxCF)BkY zz{A=QonLFiH(tz-dza1SJB!QvOP^85MZz%|VX$vcpX{p<-&1AEZ9XGGe3rF=jj|js zwPvsV0)AzSAIRN??Gykd#<5poRlpXEy`WROk3aSAc?DZ_zum)r!v z!G5*q?QiUSgZkiV`!TP*Cl5Kvg9~~N1~A*}YAtnOYZeyK76TAh2~tFA?=riTv~fM; z&87?J-v=DtzgT#=uF|@Ol{5sRGp2jAq=Bv)%H80Zb?;_-P z`_UeA-eEO3XfJRzE=;+PuveTS?2gI(0IJl1rAuU`d|pYFe#LJ({Zp;{hcxgjA7G|B z6QNE;{X5}({hwgQLv3ULMzLx0*zft=GNyF~SQ*3t6=DkVjrlr>Ei45v}@zXf13X z!`yapFI)F;Wvld(;E&HBLVMQ)5cNTHdx4Y;{wyI=u?I8bU?XtW56v3^s#W>7gz4{hxr+-a~7<{OAq|`Mo4%(&ec;T zXRIq}k>byzGbd(6bnXH#^Ds6^Jf}qjiQ@|>I&PHisNM|UH)vp*ckxRZ3PTl{H>tw(eSzW`p!Whn4-f}>9f6zWXhJ86tepd(B>Iv8OSce$U4RiJl z7ovzm1^-Wn&$0g$93%}ZHPrMl&om^n1l0Sup>4ZDn63htFJJvKM&quJZP#|s>@i%dNPqerC7yJm&vI4d|P8Qkcn{MntmC{E^y7R09E43YhL^_SCJlU2~d&cvjH2cf5 zCz1MEqz4~B)gRGi*m&R{Xm587HejaR1*hV|#PMD-UBNuP;3J4tKSNe>)o94%Lxe+^ zsgjxeOnP@~KUnjg7@zi#CY+TJb351k^wnIoYfR}n*UOo9KNwJ3?Lcd35IISO?()Ct zMjinrM{_Mb$ymX z&jFwEJ=;y#@I|2Bx-ZT&f0D)HE_;D?c`*I?I()x}R3osd5!`a^_%~XndBb8WwoDy3 zbY>&nY70)O)rc7B2u+JxPwkoI65uL5KV-u$wvAxUP6cULf;;c*vs(T>g3i-zDq9K_ znynd7ReNbAoLdqOw}%fsQZ$AZvq@=@g14M2)GRMc+69m|H#e*<+XrcU=3VSl@1GAz zcw0c_50_HCrK2?`6#xbn2Pg5z(RKx`PAz3#wOKl=rl;+DI99E_xTrs6y_s9kOoq~Z zd#kjNr4Hv%5~G;x#SX^=B8gL%p3#7DIgi+((}F`{1xV0n z&5qWA%K**IDNiX+E#C>t<2cLgin?0r#9Yagm*3&jO3)x?nwxJOpp-AP_yrWXN$`5C zT52KD;~#}Dxj2a)nTj%g9)FjH5_B&?@kONj|8aH~Ky5`|qv#XdDNrD|ySsaFFYaF4 zT@xTsin}|dxE3v1+={!qI}|JO_<#3)_r5!C=DnFW$;`^mJ~^38cFx%+d(CeNJWsm1 z&cc!qtx$J+1Qos}dz*`Jf7^l_qY1jAIiYhyc-=m<4~v*K&s{N!x-_SBMs*Bbp@5HL z&7AWe!-cL(DhbKPPYWnTRiufnVY=z}x0Og~V;6ETf+$+BT%JqjWhdZ7tb6DW;ctfX z{+O(o@bXb|vHoPU^1+S^z`k#CF7lb~M2KssDKLIan4pP^O{9Oo21<5 z(`{JNutg*d0JE$8ZYl2nLpL--2M1Q6c#gD}=*BG=GE14oKr!}%UFjPjI6iXF#DOuH zd$z9<{p}gQI9g8Qh2CZE$?^fFT9*R$YnizK^zG*a^>_3iLBmeeAmVF&g_r5!Hjj*Y zPlcm!1_mQK=PacqS{HOWqoPE_fs&NJnD)Au8kVK@$uvx{>xt5%ujRu;we#Rk*Cm!s zzB7Z6&oOs}cT4j7$#nN@Xs37(oj&wq!emZsvBkYdHGu;-oXWDBs z8KEOq)XCWVnJ)|`;TbD62>A6Il!bSCJj$+r5moAHUPI37aSLZQz;>;3D9DF~7drM~ z)DC|ZZrdztGjNyT23s>)-0#7ng9LYREIxk~-YdyByT71rY~&~}02^zqMbLJ-p^WKO zj^AV*Ztg-gF#j};Zl4xl+PM~6jgr6Fi$2!2U#}HO5gzLNy+ZYZ6n zVeLm_^H67a9+S*GD{=I~ZdG-IOGqsE&l1CTS@r2;&g&7kf7AKDqsoj!)pP_IP2*B} zI$1(tZ$+Y#Vh?h%Y1D1W(`BbzzY>~fY>D*+z(-PFD}<)#ZkDMw924{3b~|fLZlLe1 zoh9)u(ruOSZI+n9(ElCRmMqMG<0Tf8-demp4ehyuUhh_T@6J`w-GaC@)Ud5DbD*d@w%tQ&? zoIygaL670fZ%Vug)))*#$w#Z*`c1qkiolK>kK}U}>_X@rA+--oD1Cfj3lt~%16%py z?9k>Pa;zxFG*%~&9kKQg1*Ru-rn7!IVX!3jKt9&GVFM0!8khsLSHGDGcsB76&+F;| z)xeFp4`DyO9c~_N$UI{9_hJEFH+Fv_xM1**{gJ)7ibISB=e+=6c0S3xAtUbMybfhL zyi!frPrVf*9*Q24_3Vp~i=p#}WXA0mJ=%!={|Ij>7VttGmG=sIhrMf>bfMN z(X-8t2g$#}bUxi+0bTyrjk8(wnLzR;yn`t8Y4+Bx=kgvVRYsFT&nLRSCIVps9Y_bN z1u-Yf<1=KTR%|Bv|p46pxi%D_aQz%br2 zFH@hWDMQfc2^}SdY@06ew`aR>u*1(HUOOoKK9=jKC|j#tlq$uemb(oRqe!RFewEJ;vC6S5uYW>#rKYRFeMcv2;&MjEV zwwGznv7-D91HqS8J&mhHXq4_RNGTiq*f)W<7C6L4KcM~_9b!ltXp&5IZxc^f(I~9X z;wiApP9TX&-mW{BFn`|LYPZ$@LCnN4tWNpyCFx5_x%Qr#MzP%}D9bIs3Y<}7=csvN z$9W0Yh^uE*Cpc$5Q_Iz9Gu4EcVlo{{i)5Q zvywKin(`F=V?<}PpfN>ju2jy^QJXcj@Uvq{WLMZnzM~IUWOny%e>>G27Z`bB=A)MU zsWR7ZN)d|f;@XZGOkg#oqC=I9YxsyHWYmGmS=pS5f&>C2hR({(jLDf+yf^<$Yj8Cu+aAv`sO3|4eS zcb0PM((fVx?Wacjk}xoVB2$d-KzU?)Pob+Xu0@Ph|3Gz8wuR;e&0d!V+BAr~m z&W2LX@(XB4lW$7FKo6xwTx5NHd186_waU~~60LG1VM%dR$l;V$(&(s+&TdMYQY>pJ zBP)@K)=`AQ-gf(Qmp9afyOH{U*tHPC()HgFyJ*+(Cs9tn|Xye^D%E!NVCH+r?yVzRfDnDWWQ z7cS*a)v}S~2$bsE@MNo@XUbMn!!`S^g=R}-LwE*Xyc3h8pn$4CO20&{pSOcriGxxg zlBruw$Cf{wb$whpFTV2G zM^S5ve_5STVXG?4DrvxA^csb%x`#72}+sgyBK4W30|?z^i(WaS>_0{!i; zt0a;s+feavH8Gmv$6~ep(lID0KkV=M3@POK+m{l+K7#pAmzswFvN z*#t|Tm$n{Dbm5H>V;vC}maios=@}+p`0dVUgrt;iCi0jB7XwSO)fHXY2wGERaSR}z zU5F75A@^1_?dlYCCDTO_=XDyImFXgdQ*GaqmwEY>)^G+|k$KrhYd8fR&2*8+37UbL z@ND5Lw}4BL@wvC!X|rdbc|2Q{w9ns>|7N<#;HcR5#AUiD-~>%VFL<_ulpnNlI;WsX znJ$tzvGzS2%KYWXCiXp8$`1-S81_ABnJ#iTos-ZBo-Hor2TdH&DQFzeRz7XOcVtBF zEh*&(ahyB*9#Q4R3S@t7vu4`%8ss)^vl80VNibAUd9fOKh1;xx)?o_zCsVBgnJ3e9 z2CAHSnM><13H9bN>!58fLUy+AG03b{!C9Y$HfGk!;21AJ=Q3**aE#}mI^0`U%DQF9 zOx$LzwC&%KN4dA8m3<^|au=Wn+-7C8%u~?*%*#qz=4q&%vX4Fvo=s1HvX27JzHN^o zSUJ52`6rLr58AOw=usxSGR_aX9!q5(NgP_+o=?i9(@+KF(n%<%GN=Z5hx>OqvIUP> zG;Ok-)rLbMN>yM1oH>T^7F8!7mtAE1UYBm+DTUtxeYLNjy zX??MKs>>H_TAW}$w2W(8e`-n8i}$1bJ`Ooy20TP=+5wYc`8hk9*nM3{GSsuctDu%p zC7KyKR9K@Vsv+)l+mhc|r3)4~hN`eO`cH3wXiAOEAe7ZO$|Q+QwCM}zlUi!&0_R`5 zd>u}#bur|1XGleYQoRy6F26u+v?2zvY9g#6l_El1EHkO$M?L-)a!#;|vBUZ1;p%ro zPDZcY&F%vKuZhV+p+*q7l$Oqm6ck=3nG5mPiP*RQ@qKAA4gr?4q$8GKNVwMXpK zMD#f4Q`vkCm6}KqSF{S(Q^FL3j2QbI1RE`Cc?&FhiN51l9<{+NT8mz{Zit#v zkr4vT%{@^gPQNwi7CS~aaW41Ra24sx@I*UA^KvW?9g4^hfjUNQM2fsY9e)m4WKKXG z!!|5Me4r|`Tfw5aXl)L^n5l|rW3yY%qLgTDcKz`~8ktd0#}N1sUS@*JFLvs)j3S8T z%Pn(}babv+L%h0Yl{aR72?2{Kcixmn^gc)Cs0~ID9l@V3+)-0XGF%{KYwnmSO&JZ4 z@|RnOWOd}Cspv=oTn{LO0`1pCXrmC9vWcu}uDL11Nfpe&RSD zEyXNakM`p@9xg>J@{n00DCSVGO75Z0NC;EME^>_8hX|g2Ba$zk)c3YaTH&DMCBuBK#uqBCr$;>wxG0>j3WnbU>JevCF=Jb%ZEGVj%Yb zBEW^9HC#1f5aK28CQG+qcNU}(!UwPi)WB-PY6Fd7+fjVrFFEsLnQK1^Wx?nOrodMN zm=W9IbP;^8E@3u(yWJth5E@87#QN`Ca1>wyfELuU>YPf(aG$fMSQwZXfbifF3|^mF zmtS9Hyii{6+dd;p7mZtqnR_b)n6<;9qg-gv@qYPRCr{Ap;1kT^L*Aj!`E}U?)xqX+ z(rk$bB$lNSDt}C#Wso;ka2m8;C{0gZ9LHj6>c!IR=P9nBLbk%pXuw>)DrW_!?soV# zs(UUldc!oqmHW($*}e=pA-s3w1%GN#L~Md1fC-%*HM%m^X1jL)MdXR^|8?Ej|Dcx)=0Tk!oQH0p37wFrXRO3;+Y2 zV4MKeu&;2>z!roSlm`+QcozZ}W~p^!KLB7h7= z6mW`o3VZrL#sT=h2g3h34gkE}wB7y?bci?b1b6{hM`(xFMfAa`#j8cQ6g1^A#og5E zW`d*vnSe}yQ6L*I6=)3C4)7tpBsOI*MKiXnU{oF-tCh&-H4+lROt1%wKMrH4-j$iPMdF9Q*K z?>P+tLx|n@OxdU)cn~rO2*Lm%3;``+Nnz1|Xb5O9mOxG*0R#wng#?K<;pTL0g z9G!swB0u4C{txo=BfPG(+UHM61sNjr0{?*e{692Df&Yd+ zng7>oagvNOZDF|ClZG+{*m=m`voqdxNp>FgcYKrMKbq(NZt{?Gyi1q=t5<-WlRZf^ zi%^-9oa-IC{O{*^`N{eIZ=3N6kpG9m{O?|V9`bj=@_#ko4NQUm-TPkzCez-35ts;) z|NY@`lBBXpsQFlVIruo=?MpsxRvwQ3JmllxW98%H;^rpjVCUpx<>%u3kA0a`l&uEC z&6za1N0vr*4nzX7|HM>d_D z0s@_lR9B7SqJKNve5gHMH_CIN)P-$tf%h+`2Z0-9cNyi?)qcmVdB=pqAA&!a zQ!pXXxVzsZeYOJ|EQp5YazSjviq|6r$Q=CgK9~_xh`6KRYgLpqgCvo^b*6pb@D1t@ znYQl_8$>?x{J4{+yIECEj$ruR8~$7hKbbirFR(4UcQ{Fh>2Z)Eg0R^Q8;bF@zf~Q{kFn}#Boaza@$#(Fa#Zv z+O66gDOk8wwd@1|W5*PbcoYihc@iF)Fo)t;C@Eg*uroNtW@M)$mgj$bvPTWL{FYfzvUwz-P9TXi@j9nnU;1~7I zb_)QX@n1Yl5$rVxapffC%;a$8EC^Z)qzUA?lX?anKF>bJ++=HLD3=?==*X59&1v!| z=6oMlcUHUj+*|=xGf^{%#I@L4yj(n7T(7&+)p6)rd{_*w`&NfzQ4^bk<6lzom1(5- z*J`yyHIrd~wP&@gA=qWE&DgW!Lh$TqpsEF2wA!&+cm8@Fe4e#By2`Y6vYNH3+PZOe z5UUz#g5M?b8vIZql1SILbER~xbhqpK!}p87o$$S%mp_INhQIOOfc?jwo5q8GKzoE$ zzReRLOIpHcBC7#EyMyTkoQb4#&o(p*JC$yLS`cRk8|TDtUf@L7(|c~ssJY^Na9;y-ufw zdU8C*%OIoehaM|m)h#Du@o zBir+NlX@Ifa-4mbjXn8Be1LLbd{8kSmy;*d<<492sZsJx{+Qk~I&=81Nr5)Ff@m(s zE>QfezXLd!lnH5*k=r zAVGY=41LvUSrC6)Sp}aSyeIlo?eGm;L~rb12}jb+asi$u!d|U?+9%%vb4v=|bXs1C zL=F%uNo(Ps-oBl@Jq2HPBOQXfxC>~_+D~Bw$xOz;?*oNcc;5j??^a>X*!vO0@mR;lvj=fxA{8)@&x*Uu}EMXY@HqfC!Y_NV^(l_ZBYPtYK+S`1=?jfr6~AVw+aohTRqK*9oWqXIM~d7$gn|hSz+bh-M?0g6VS6 z0f!&oupo1SLfp7#Jf&P7A53ILq!61B{vMNee)~mO3p#67+kn%Jy=yCVMy!6=j7fcF8MfhW|(;2x-!HxoJ$`GK{tokX8C3V2!j6!Rv6kt(DL8k~~PGUrs zq&O5B*f1@NXv=6? zqDMTKRQja}<1>lfp=R(H^;%t6DjOh1{(uHI4xgz75 zP&l&M&5nV3>4l&0&Iov4sB~9gezA*3X)JS*1~(42fxYJnxO_v)T=hb zqMr6&Q!axg{_J<>6{{lG^@vtoY9aI5;d{n|SxT>hOuriMxy&XAvbWXU!+k1>;lmYj z7#w$iiVO;U6~S^8{<$MEA}Z6&_AdouKQ-_#k%ZUzz6kxTxwrY0uP`UfuMFdwdbYwN z9*gMo687JXP4D{YW-kU&S`A$v(8TLjoXBfC0*EF_g#J#TJXZ-=HMKOViu!8P@yb$pt2s6p0 z82p7H#zXoJ&l(wVeA^Dm8XYkhft-}ytQ4z=xMUJxEtU;vQnZH3W1a&0S|Xl`(Wi=N zqrQz4totqL5p#DRE>1;Qr&>Jb;S>sf{@BNM@Ck6!Z$2B5r?M}#S89EnFFr7C@2N&^ zf51$VzQMn>F>Yl;)g-XRH-0b~ZkW9}_3fd6JV@Yo8qSqA5L2bkfX?y<#EGu$4Z*RG z@4y?-=Nt+ptXuikEFUVNO2ud%0=$y3+T6eB{1mhB8v-ij1O@Zn{)mMk#{hwK(O1;B zWWz_*Lv?U@&AU4U79^fc5HFigRZ+y%?IioVc&n zrWRYyi~*yN#r)3ip};y8?b+Xeyyz59_DU)Am;N41w8qmHQUDR3gZO`%1L$26jtjp5 z8!?_ori;*Dc^C+N6^lM3V6@A##Zdt4lnh#=^6YQOBCe1+BJ3$Ao?wi$5)b67Zr_aV zz{Q2yMp-B@h!mC7sFnfNVIH?Q6zkd}SO!1Y^pl}?t0%i;F6&|v>Z>_4+DHmm%RuEY z9QJ$~LPB7s%G#%o|G>*C8I!&%navS`kH4LX%E>Jn_RAQN>O=?)453vU6&Dgorf#MELykxgNY}Kz9eWT#^O^E zkFFKD7bl7C-XleTybxlAu8n#i5yTSSoyuS!1v|E4*{^NVz_qu%FC4)bxJh+7U1Eh~ z?|ktfmklTXa_fEq{t&VXwUQTh;D!sr6~hJy)An8X3<;A8a{MOSHq*I^AfkQn5H^<< zHV->uk`#`>B7J}&TkDcu9!m(b2diMZ6(I_;|F#x}1=Lz|J@<0yA>MqL9V*KeZYUs| z;3gT<-3SegwB}vD#KOF;FF|meylB-y%PyxWx+=ltml&hHOxH)E9w)J5dl&O?0c zg$>N0V4JWOOt0&@3MdFAxV|xsI|y$7Gh{*9M>lbA6M7FsBiG;xumqg?0Oq-R*$@J% zLJ2zg0306TsPAu+E`Z2&eQqT$n7+l9MiFZg9+>?|Dv8iDfzUHJHu*<_Jn*rG1p_-tDT)_45ayf_s>zIMOrU(tU4lc9&Y{6OvmO`dJtS zm%n)@r^AKue#IdTR&R+*Vt&}#K>^%h7a)GSEcpT;dc!P?_|csue$OWr91)x<7u0dc z#gG7YAuZbsn39upIkp*SlL3wU^nOcOl!H5xpp^f3Bwr|xb|meWB>J7Lj;c{8LD2jg zszf0fF?+6$%bfs#mit3VTBsbQJms(@yF7)|kQ!$+8XeV;9A{)SZCVn?E{YqCd_S_S zAb}$15PzclKoYVg6=pkkAJC^7i5@x>vkUwzfk#QkOu0a$I7H~ye;E?hVD{BBUAp0aM-B5pX&aZTIuR@o}4 z2jx;e!Qsf{#>ahw4gM?O(!CzhJUY1hFI`xTEUBv>$3ZQ{k7jxk;a#PSLt#S+?I*sb z*k_}GzZLX@ebLmVX)W%*_@S;(d=zXXf|8K33Rw;R4r^6dokI||( z@u~?nu7@-sdB#k)Bbzy8;RN5o51)X#rX(vkPf-d)X)Mtcbra^9-vlO@W-i&;biVm! zB&w*5JQ3_0|v9{rkg4?YBb-;YfmS5i_ch+6hg1jEQ72E8^K~*zy32 z#XZ?`+~{isbxL_zF+r|$T`|F%sf=CHCS3!=N|q)$$||h})e{ECpTDnry;DX2q(ouD zzoL3*`C0ulrSZ;_hX|<>K1nA=i(e7+dN_?`BwPO8-^Vw4o&5(^9Uf%u?gV|1SS${d zwNFOsQ?%A^sn2ov2_-;^QIm@vhWW@~?NB5GR6NPBl)x&Yq$*sy+O93YqO$o@p2DPa zw(54#VUQe=w7eHn(l8Zc9Y$qBj31i|Tt9&<%)~BqUlPLoOz4xt`m*ULlH`VU5ub~t zo>2H(MA&>$O}zyiyR(XXs?bN^ICh1zoX%x}Qp215u{P!d)V~2|+glQQJ5VW;fDRv% zQ4{<0lNq*u8;RLR&-)LV1}3dtYI1%$ZCbkH?qQoau`{1tX?Cqv6ulx7#i>tZWm_AP z;In_CigN7s+;5M3RqMkBq59HtJo7e#U4Aucfhs#je@>J)AutdH z*~)~wqW)-DzfFjbV2ORFQ?f`5{z(fwZSEGtF|A^qoFYEu>z(K^`&|>Sqm`F;OH8zsabl zuo4hY{1GD(@krt*KR`{uhTldQ5`4&m`^dC z28~3Ny4YIt`?gpAy~{UV`@Z;Oq%5u5OI5xLEJ9jLFqr_2_w0~-#e9uH^J}%|$@$a% z^P_X8fVYaUkoib57L|K_|JkztGSPC@vcF_KyCH~z`eN2;)@jaZ#_8icQZv$M7*7Bj z#9Pu<`1$vz?HS4=Jo#118jg4t3Yq5Z{K;qnLgD3+lytXP0Z_IgDIQ%nTKBuU>P%Bi}?5D)N5p#m5V^mnTMNpRs3!MWJhJbP=eoG#cgIRk7u29wg#+~Qd8!D+uw&@3^z?gEBwJ1iunY#e>$9B1b*VFR1~ zQet7@m`mao-}?ypD9TU8g!>=*<2s<>>K54+UokYZ3=>>7G*F7Th7V z5Jpm;=-Gksx3YMCIUd%-{(=;%;1j{dir=}-NQQX)c^qF!0w7n-_wRZVj` zc?DOU7hcSbx**0rDrTXk4O6so$fQ6FWDQ!m|~4%ycI@B8+2 zI9r+FNwCO=%SWYY6FTf!5*i1pQo*o2yo4-f{-VF}%yNfzdo`15>4mlx=9 zI-|OLlmTr06r4NO;4__s^23wjBqi4$zL;0Zr&Y%>4%W=zO!L$p{irOyvJ;Fo4{($< z^DgpG&#@e^5%I=rLZU1(hrRx0mqz^2X7Z0x=G3ywWf{R&g{U~gs0%DHtXXHV*G}VK z{(s8pDz{JVlMhVD1de@?oRcS|kZ`9Px;n2ncl?{UUML29$eT$m>A!!$m5lMnExL7Mo^=Qyc-AP*J+MMe)47f=)(wiui@k3i{25 zYxq=BJVIp$yj<hvRN7<#~!tlb)K(lhCkbcdq5w zFc(t3ut2uuQ%@=ce%tJ!FSdtevtNtekp)Mg5hvtlr*Y;=W`h|RmW1g`?X9@+y)^xjls@D9e%z)_0UT>JmS3=&I~#>_H#{CBvYzF|nMWUCd<@=uXdmmh;lOI{6qLkM1=12p#!QS<2I#V_#k!le)+0ZF-k_n8#J;P7xRnJUen0P!OX5HFE=Os zvD53h$NXv@+@-@J;%V0EbJC1knYuqtk|fyK`-LLvoY((hn%Dn2k(cPNs)KgsKMVCR9OspV*xYS*H6&6A}n>Cfy?fN&aX;%%Yh(Z%gww3bNO0Jo!84i z%!w*^<9Y6A|BK&qQe0f%)B6!oY^gdh|3z7-Adnsn++$xYC1-g;I{8B$UN>zIN?{u) zT#xZ#`JxJ?+5Au?2*RC&z(~hedJ6BYWzg@^g8bn17<`?3?iim<4GhF!I66t z^6jE#aE2{SNx$AVt=eVHLX>ir3{!(I%1y-y+!Vc;U$P{BAZb);IAHyR6A3e(Rc>gw zzRs%8T|^bctR`-@;WtY3S<2h!ye#0ppXnbpdhq}YA*|8o4@%ihPxnYlM+qz+v4=+> zXf*U5f$Y8e(#J4LK1$CcfBin>ss7d6&hfM3Dj2vj|LT>rv@|I0_K!Z5ITZV7wEf2Ojsq+>&|>=^ zLhepu>aTW)JJtf#ij{R+e_tgW?@lwlRomO5iUl9Nm$%UIz1D>XOORl4&`D)d)gJ;PQ zWl8uznpHzKnegl#ItKzgUT_&r__zpiF#Rznmjlnz%h!YGB7JC%IjBE@C|d#%!@x>r z&k|MF7eiF=x8G88^5Hk66e`4{GK6z^)nm2MB0nnAz*bnwe}E@si3|}Sq*9)upbggg zlJwgK=^HO0x`i@=e0+4i23kWOb5SAz3X#2t-Og;RKn8Z8ydRrH*YCbVZzxivS*MzV zE;Ta;Jp!;Hy-=yBxZsEVcUxMj2V^kT8U@TNtiiNHm0_vak2(8)vB-b*A6I$+zp4Io zT<(SWZCSBsWz!GXpoS^`T8;W(?*w0iWofPdMYn-Q>3iWYb2wB+gK@c#DxRjO_sR;M zF^gvm8;{hn4jR*V*WKzQSG5)K$F1e-A41Y_Z+s~z2jytuQfNoEi)hs{41j4ug#AA)Uak^DZB{^suw zqIZ=nU~)b4yiYX_T!Uk|kBDbc;-~yLM?4z@%1Ls6J1zRGa?;W8=^*9h4NKdW^p2cs z`f1w6W(6`}Ehx%0~B*@6v&AJFqr_0xHs+4d= z2l;i>g|Az3|LL)(TG7P7F(*3AM;+};sruKSg3l{|Lu&uxaKlQ7&(DN!y>Rh%c<8(j zjT2DKmI?BC-P#HkYgk~hXG6LMQgz-?42)Z!hJQxi;8VD0u5^q_#(X{nw;T5io2oa5 zKDMiz8TEL!cOufUJFL`4c9eM&O*C`)^yWys;#lGO66pCeR8tY>{$^nQ2aZ;l>P*VP zqN*X53J~gfCJWN(^Z3a88~gwJ{#J~=;i`P9(LnqdzzeFS0 zSNE1sLAs$5SJZfmT2|8_S)MjN^x}#;lt+)H5bH)(&4xCEMuc8N#M0u#_xjPz>Jr8H zH8p$U z{dlS1Ch^LiMR5b_MD~guwq(7q6<9~)vjbSi3@8d1wE@>0s~5(Rs_vU@a8t%&e;dqM zZM=V>C`tp1W$6vD00DM@_&9*-uT zBbn%mE@4k9Q)v=qGIZhzz@~Br1 zhv4h{-){DpS<_Dx1Af6)K(eyJKbIBVpTj3mqBGvfUJ$s%JV;>v@3l3pB>#H6pKH>sr-Q56;COfT!xa6A>2?CQ#F4C*(FrHniiCVMr8yZ1Di1CKTL zDi!LeQSDZ!&sycp(=~W$Ww<;y3X!NGuPA7oqDD?*gIHj>P@6jm94pvNPh7oM z$)SU(A#;~g_w?*P{7y|4&sr{D$yigyd^^EbW4H-cWxm|>3Le2Ss5=fQgE}L1Mh*5P-dNy$%*#ed&F6ut>A|b91JxIjiX+1LDwg0G zt#Jl0^Ue(uOlMJz8b;+D5FOvWV$zoZP3{+oHBU)lg^3SGdAxy~G{9d7fmgr8sF_;K zTVyT7D5tWopJ#CY$;YVwh_R2@86viZfNGXfOsvQQo@UK^v`K+GZ2=?3;Om%fL8na6 zO(xH>t9;aHD@$PV_H>KGXM7U~$qw=}SC+xT!d3gKD+>>MxY#hAnn)vd{CGyRQLX47 zuhP{>;*}UKPR7)QUPoB9%QOsntEg^Sx%Ss~V$qTcV5&t~L z6g=OCXtvqCEwnnNWve(!f0fqp{`o74m}UQ({v}P@=05yU_(v){|E;(F)S%cBA#ywT zOJWNt6^ejpppvx^EAppdFLd1N#=z|DZ9s8Rt2Z9p7vJEzY}xQA!9(IGR)x)j1PD#e zF@#UklVIhX2{$bom~&8;ZS5?saU;0x)mC*hJxSGiuXC$6?jBD#8OTuc@+Q{sXMlO@ zcKkpcvZZoLS!R+oYFYn1^!4+3VE-yOZH0=ks6+6>-&@k0&$JpQbUEHlzwVy6Gz))O^v%6&&O@!AHGuBQc5$ zF)8_e;%xlAi*v5Uhr7y?V@td!jg9yYM*f-)+6 z-wzoWyZw(OiJ5YokAkh#h~5r4hO4;oM~kZaSJrxm8g+T2y-Bt$7GPI@;sr%Pa8GVq z3!jQ?mf0AMh5##xEU75LdB&kxi&oIYIjva$hD%**h9!at70%-IYssdKco zYe4iX94o{8_))%l0A$*Ol`1@AYYZU0^c?$FMOp-Y=ekvRMqom)Q6T&4l~46e;xNM` zPk~1A@3+)PCDD+Vlp7eZ3cNuXIXh>t`_Kcy;K5HVx+~+H`c+7(-apFJJ_xg?VES{3 zXJz)pq0R}yTp>Y1h4nO` z_o))zO$omHuUB5(5m}F*jf(A)rDyqto@nmQO7M%2X4JAvK6`%#K{3^PHgDPGfGBI zf&@KjEi0ekSH+nTDgU~V%0R>OC|t##YzaynnD0y2^9ceCj&m(#*bM5GE_aPw=o~yM zj^Ja;X}*EOW+px*9c^0@Q~7C;xDRGj*iP2qB^_;uj>)PE#i? zV*4#Kw`-VLs<*9kKt{VYw-#0KDeLuiU2GCLCdm67=x95_91>NmIvrMuvnbiI=8})? zcI<|RO@NAzAvV1AzlO;87jE(JQq#0e`H9qw;7-9G61yrqx0}bv2IJD(5R`dBTEX2XxQ|A`j*? z{|TTQ(Nc>mhSBhd$_#IB9~WL{+I`T_C)SOKshO2VZs5@ZO)Sc*DZXUeS8tRTLRIXk zYk9y)BTRFQVz-c~esZ4fpypx%S8;>ia7H8_NK9;8)qRg9=-7G2-cOgkAwi;3I@Q`K zbfsE6H`Vv}+CNE+258vj2h_}bGiuVW)OnUI8M~=2+OMU9#)F-tvmqE%^h`D3gypx! zKT;y2@bbkpDk9rW?Q+G)dE$Xo_g-5++tI*Y>Sd{^I!|oFP5K?*d&D-P!mvFHe~GgE zWi@+H91ZNhiOMMORV+92vjLPX9PDJD6k5FQRlynY(5x$T#!r}NwdY4C)#Y2tORM8% z^)b&HAW>^M$OwsOt?5j&jF+H}8B8Nf@KFc*o;4WuAz_ayq?Yy@DUmR1JuNw>+|+?9 z)%&5t9y8~ZL5n#i)~2q$#Wf0^o)3jlRco)}o*WCFu5}VZOTfI0gRguXl{}NM7Ut@{ zu83x@L={^+<;{gKtou1S+t!#KufeTZ=8^4lb_vZWpcgBny^uXt{T9_Kh8uV!FV7ez z)|_6G83!$2OgJu=xi;M~F_9-q zP6P-Mg?nUpq$VD*|X8bLq%g|P0D6@YjzF-ROYxVvq(y}NC$$A?XXH`fV+#mW-T1PM2Jp$}IS zQI`$v2KtZ{u-qPis`TA_$NXdQfv4s}M9_t23u*EJCIBy5nN0qBdj>>@jClFk-mJf( zjoX(V$JB!b!IbgA`vnaR_1(ze*Dx!yCCI(mUJA5AuVSptgM-dMav|A52Ij)pjNne9whNYdR7o>yOlhlgx7vXmsIaRP zDz(%jw#!74ykD)>rys0n-Fp{T2sztwk5~r&2lLy?6;k{Zdh7m{HTI=@r|Yf4;{6&d z69|U#A~Qcadw}Y)ZUXVzm2dCq=1d_T2bYOnj#iAbouwwPnEVrZJoMW*G?Q&pjP>9+ zXf84c<Vh@$GZVG*e@&T-Ur9_lpq$!n2WfHH`HC z-9Z1o_KZ8s?--1JGulzNecdUHwID;ouZ}MHjS_#6@7^3Hw7V#>sp1)su^cUrWFNwJ zbpyl2C-;tG!~s`o^W5^|r+YR>A2OeWSdDYbb=% ze2|`f(i@@ZTYZEdZyIs$Sk1&WMWo-ozvQbzK1s^{6TYu}{#j+i(AjMv=vZ=XVt*<9 zK>KKOyNT`byV#nBnEu?pHNLNEe$_I`N0OO+j7Z|y{SkaV7@rXGgB}I1^}?4+$jHv? zP5Otzm+M08$?&JGZCvvS5bjjLi{mwH2BjSc3*O!BQ_Q%2Az-{rQi4gdS z5Vpr0F_Pc=zlb`vGx=M$+|@kAnI3uQUMfQE=Jwg?Yi0BALMAHiKvcupKremrm4KTj zoA2oyC&?VvE|@mfQ+}40A8w&gzB{2i+Kban+J z_L?7==Jpvz_F3UOK$`i|4A&nc8E5y&BWG1YhJhRP-}Oi>vn6J7>mOrOu!YJd3#1}f zb0!cYlahBvcG4|1EkP~x*-5uWRQS3n!c}t?j))A8p^WqLd)CucirHdFdtBSXk-sR^ zJhKA5fZXc&&TQOI_;tKX!sZYAu2oakj?T7}9sM$f69Dj8wJwozQ~T5W9or?J>IL&3 z@W-b1XGZq1B6r0m2_xlj;D+LXX&u>ehw@d!VX;;CLUpX<+vRxNEC8{r;t7Q2^!5BL zM-D%Mv54HQ-z;`8V|do_0CEelj+7)E@<>^<o`vNkbyD5?pKuj(h{dj;Zzf zoUYc>*u;!&Z1`oUamLAtuIR3Ed8p;bzl(MAeaV(O@lT*Dt`9`Lt?QG;jM?x}kSDe* z$BTuW#%tJUCuzk|@?zB%p|`v~Pre(C{#}fcvDB|br&hgKteULbOr?T~R8?l>)`EbJW;q#g!0u_vKYS zhj6ALk_zH|4oyV739z5>GF*S-3r2nxXqz8;gGcy;TNO{XgB9PrkDAO#0tpv?zJn33 zwS$i;V`(R2X=Li;Vrge8EE!*&%J2!?cl3W~xnlpHEmv%8|8BWr{hzC7rrAQV0l|G& z%pf2$GbsT4!wO^ucU6(HvXBB<0F3M$EZ`<9_CNN&Ab_0|Y#hv7j9l!@Tx_HOu0O`k z1@46cf?u#P|1ls3xLpds&Or)J5^MkL)e~gWT6WqTAWCsIq2tW#C<7DJy{WBIk zgB{$nrp(UB#l;G~3|^4~Tq`>`n}0ATDR@(MHX!&iJ9s#_uZ)Wn$jlCI{Q6VbpH8wr zcMUw88NB?TRx(6WI}>{&D?~)LSPZ;)L^(VOVP$bOO%=NT{kQq2X->?>(A=4n1;E0> z#{3Vqw{sB|w)Y^_W?%=fF|z*YGb3eS1>a@PKgq{e!hM8hU}239mE(#>g{Q&-mk)jz z{f z;)V`~?suqAC1NBm#TqdOCY)``Jd5l&!m;~Co;n{oA0}K~?K4ZcT}uybT%M;GYulVSaga)OxrsdDw`eOFPas|mepG{7WVBlpi6S=+$Y#Btx82NY2{KPz zp*!w189eRghiN?^c?F2eS_oEs{0~bLMWE-C)Fp_+J&5=4x7WIW%A13?cfS|D-EUf~ zW%cx3I8Y_QJ2bCFM9a!q(rFgVVG2JJ3{b-j6luNYz~Xr!Tnv2KsWi@lC;q~;aTZJ) zCvw%NbPL2YQbHL2k^~FfaIkm%vHawMrFBYZg%82=Eqo7H`EGKmd9clp^lpOPEdn&I zegUKPZADY?0g*R^Dldua6m4(-0*4L#3y6FU@L&Va(|>AOw4goDR3|X>kj}7@WNTg9 zu*BGKGtXG3YsX{olypM1RMx1!v|8I?9R3Xn){s*oq0q65wRPZ31*!y|<|Amfi8gFaL%ADgT!Gc&!FB_ev+8M=@gP z+)M;1-e6pjKUA|iv9<4x%w6fCv%`7ZJaAFF#SoepN7bf6+CdA_^i%Q^dyRV5eR#Tz z-k!^72lQIH?sDq>65ca2pKs~q+9q`LTlI{-5}K2nBjKaS@{OL~D|dcy4hA_lI3Mk~ zji03Q@ZVi8BRN-%zBrt&?fS9bjkM^GWoCIBpJui=JA=}_-`Fx5vl+Q{{aSCXXQ!6r z?=tzF9+#iH13W69m!0?YJhJJt^mSBPeBy?Tu^QtujqE>nuJro>;cX1GjWKN*8h_!f zRaUPUcrV_Doe0=eEv+_YVuFNZaFF^C6YY;;?6)=(JVNfVFEB2SXxF-bQLG`;u1%hN zxGl$9%NT58eKLC@qFu{s>auu?g(j4YA`Gb?ZNk~so@ZH~Kf!bLnZ58#v`4;_O}LD; zr`}P%oVvWa48NqiMBC2x`(}?#y9SrprqbyP`*53`Rc(HV;fT6x;|$7b32RAekp}PX ztS{KvQG9tq?Oa8^w!8bve3xw6S)uqa>(mNt_rp_P}1OmOj_+? z1Ky5CK^dMqqX6@$tOJ25&+iv93m?`F#>e(GArflP1x7npu!rK|v!c$NU( z2gm&jNeitDaSNLZd75kG%p)(iFKcS;uj5@-kE$oPZ9C>WMGDd+BD#EJYZPk?B+2%P z_Oa1}93vbO)(X#qHv&RQ7QMJNOIK-loyVNe|23g-!$h+qne-)E%kk zC>tu%ep?61AZq`Ksfg}1#~29Az?A4*jFTa#kWMW@Pzfy2J{cr(%r|e<_ovLCVh}${ z1iCN>!p;i9nFL^W*sv?Oljc>qeSv8q4aC%mfqzhdusi>P>!a{aQ~}wK#$Sm>M4vFo zsrZXjae!5^zgBS|dU>#y#TPM)05c7EhH7GVLArV&9*|47*nW_-0jAAYhHC8Ab*25U z#QVV`1_U~&OB;yqL`Z(UIXhqy`sX_!pZdeEmz`sKpc8)$S;x4?_aPz<9M~W@m-T?c zO7W-O_;ioMi!%NLaL)S-@PXG`Uo?P%GeCE9ByvFU`Ov>1b&92f()NJg{6X&AE@fNf zS!*8Q=^li&+HVeM@c9tY?HYkZ9K5$qdi+I^AI&{iil6AV8`2K*y4QSz*~h;i)}=BE z$&q0h{KcYmfc+KEMq5D~!TRYI<6a|@JcPqZb++{`yMy+ISTihYPX#kdQ!kMN^)g&` zNSkBuz=q#F`7%6+tiyz`lAOW>?L+W*OxYk_%P|Nl*2<7>Vv^eBA~M|m(!DMOXIzX` zy%*8rC!{Dcnk1r&8``Z0b^vzXrBTrjE^qA0gIc>blO{R$a4B>1CS8OZ4bj33;T=A{ zygd6u0)|w~!h!l~@|A90gJvl)LL|4Qz+I>!1Do zJs&{Pd9jDskoGz5f#hsDlNA>D%hNn;K}XnE1~{8F#5S0Y65lODgwq~-BlUu{OQD)$LY|@e*_l>4&dZhM>zNzW-PJTnAllG0APre&H_lXyNM91MpLUeqLGySiw+jLB7cb*5v}LRxR**O{nG#jOEL} zyMBaxfQX+ij)8-aRF<(I#pJ z(ejZWF6&YC07NY8&PSQqD?hm;>Kium`?-;zY?_*$}4ha&fYc*%A{n zu+X!U;`S!E-k-(UNtXBL6%?SFX`Z-&2-U7>*qe;#&S~AEzr_wC(iL_(NoK4r`WhA{ zx;fL=C8S_``wLHoPpe9lsXuRg*NN8nYV3`@0F6jc7}DDMIW558HOZj9M}>qQQuEoCFJ->YW+m^VO?Mn+M73rEt}^o$jM@9VNNwr^kR?E}cO0-^Vf%w(38 zy^!>G(#XN0rV`IUUklK<$ICnB9n-xD`C?mfNCG}F29@zi@taW*7k2wjcvf6xK+y>0 zz(NZ9-()F&u2}f;MN9cmarx9zheVZlyLW9$$ng;iLy<$-sqmdm?lw(zVqCr;E|s`{ zt!ahMdkR|0w8njrw$NXtiJ-VoA~}(9xq>`YBL1jSU!fpfKI}UPbbPIPa*>ivmdccD z2>NB57_i`N6km}ak3x!`7hl+|#jS}rJvF41Gb?hVTq49QVOsO^6>gE^n;^xBwExG& zWT>%vCfMOmPbW$dZ!E+N&OQ`{3Q>a8g@XRlG_Z&^c~~?GB3!FMPMDx{M-eTf%R=J5 zI^I}2Erl@jL&aR9ATL!R!=C8i5#BKO58ea}#q-H!=zXh|!dN$m(VN<0;KO0U7K?!vl(v4!1G7K6^nSq_UGmhQ9#=F5Are26W_YIA|PDm)P&>ay9d@^H9yN zLE8fMHXyV*pEIo@z{W02oI(3FcUxuBw4KFZgY^~t*$!N$T7DK)s}j+`fz&m!eNuW@ zYT)Z;P+Z1vg!KtK`3aFwr%v>9ac@hKpk%QH3K{aR#67$y^GAO&LXjT{#=HjAQty@! z>C*>ixmUhV3%A99jz9Xp@8aScE0!b==s!h+dBGWVg!SiEk{*^icn?$8FF_enSDwHk zCrjidIw*r^V&^KSIlx~3-rE-}u~JpVdxi~jf>I^0IE8OV=!~b#rK_FWmf}tCVWUJ} zi`cgNo!{;r6qn@X0@|!@iRAN2FH|~d3i+967zOCX)(Z}ke7x+; z;IR+we&AjVGq{`;|uCe)sEm&AqHNQv6kl#=1>_1{|48c9zn~R zCQ<=v9=>2xLDB%?J#%v^@|4in?dmesAcXgz-wF8)nk83rh`&g!-7Qimey+sed8()5 zJalGkAUXa&CBc2sU@i3m%orjH&kofj%c{3>p+0-63A`Q2}w1?Ec~p*XdsBn+j( z^b>Gt85-daospZ0iI{k&F|6d6;&tecJ3em0Ft&V8(so{Wq8M7Rl!Sv!uATnDj9dgP zDEJ^564Xv3r1zX~x9M&Ap?#_pkGoC8niE;`!EN1B1O*W$#f@wj+PW+*;DoE#KFFbC zI*yw$3}pI*M|&&(8FtM=xJ6on{#T-IFmjorNEFg<4=gJA#!9in+)oKMQa7ALx4@)n z)_4IXbz{M$*@9H*=LX7#^67z`oOfr)NpRK+IiJw!`>tr|4ZL$c2VJv?QOpy`iA~0! z@O2c~wW#QToIOBt+qr||u0NG@2XM?lD z?Jojkry<;E$nf&*Z>&XlQYs+x1#|E3ns zO97%Rfg3k|U^g)&kM^PK@-Y7l&xb!di%pB`a)MxrQC!BzaDnT!EVmGAD=96>O1WNR z&sV~cqncBNpkN-D+>7ndia?iA_H7NT`W^COpsqq>5NUjDpFgSn9sG+Kg^=}o} z62YO&+?+L6+iF0npY7X_o^9pJlfa6;nK{U-Hi3@(HT%vI^TzmyL4TBHHSma3R7ONH zS1?ZLL(BYp?UiDQaGU=_ynDQ!Jr@RV&Ri1=MeqamXXccK*d{AZHr)Dz(ifYd2Gvqu z3l#Mg+9Invl<8)2`1~iOPp8=W!cXVji!@yfBLqRYU#U4q)J&wwLq=taR*{JiY;-}o zYgZ8^Kdr2omF;z;edu)=4wcbY0%B*XN9;sYKKy_S&D)76d5Bxdkp~kACgS0IrBrIF zxfg7k2R>F%^>$P|i%J+BkpWBe+57P#fnJ#hZNU_ckHj2P%UI$_K#BB!nB-@P0Nz1b0 zU$1|(J4ASCo?oNH69nIJY zt1>{!nUrs5PlEC!xpPP~QP*Ju?#C#64P6uEofpx*$|}Cs%!y)pdB!YL(9hMdJrkZR zr~qPU*>`AS!u#-=S*E{j9q7k{9nq*xq!FXx^{+#Sua)z1CY_v3;ia^{ zTleq4L)@+J;}9UP$4!ursw^ykP6+gtZhs`%>M>cSak(j%`UN&IcUuw#6U~iGMkS-- z+Z46-yPrKBRE0h)u5LE;Jcpf96Z1bjC;Ht4IgkurIKJBP&e8o)Zi~!qR0740r&Cm` zqzV33e)rOCg@+RE4@K6Gk5%y-HQ>usA5l&wHQ^}+%_iR9jFerGvXtu(sDvA{A4P5` z)LR1~3=7su6Q_8@|I|S;twac4PlL@r2hQ4(xu>8Awq&QS$vgr1aEbv>co$>+}oB0;!_GRPC$ z2N5Oi?s--?2Iw+^(v4Q%NIzF#;C5drTFZpl1=9S+YDL=h#rt5?>=9PV=ndOIoiMpF zv#g=6tg5J{q@xkT1Uh=Z(k>Vodj~(fUnxFWe1V7q$PTnG$k;w-F)ef=m57`ViKUQQ z6<$cF+~fkHMrw)xy9dq5`1?l&8?`#qVouteCnZ-_Z6DJ8hVb+|T&0hzPB0SZ$G)sw>+&Z1?%UxyDn|$J;f%8j5pn&cZpnLo5T!v zpT0l~JLUDNWGI@mO)rMkIlm9SHW^Z~sZ=xm!GSZ*+VwMq8IsRewwRU3T@&9Dsl2<+ zLL#D@)zE+w8B}n-C!d$bV^>_tRWeJV?WFANOq7N-U1;$;(#J7P!!VIO7r;#Bj)Z{H zEv;fNd1`4}zF1vSS-R7fY&KHDH!YR+<|@CGww<9Ta{7@W|Lx&qpP(gKda*IVi^Dcb z(BvB8#=YYOWtC@81X~T40#6!6?GU9T`iZ}C>uDd?2}CNe{S$FHYWe|_8#IHaa1{MZ zv%#(OWn|W_<@ciE;&x5MB&2WJ&W3fJ)jQzs^*-A~%G7IYhuZb;79abI^8Nt!79uTS zS?hOILn1{Z3U>u$IYI)Z8*IFAL>W07LDf+fYz3L7c!x?iT4LyN!HcJrjVKQmg>nm2 z>F>zKch+g=fm zB5vNec*<@qd%JHWI4U>M-gXaq&NDJ@<^&m~e@s0YV_Lme+U}agtx8`O8PNA3c)3Nm zm0fl$vp9wcf?tRd5`tK1@?W3zzaY`iluSY7?adiL;N?b3KpHQ5B@cZ>n)IKNs|e${co&EV*B$FcKu$6%_}}qL>x%6VkuU8J)ankLZ|28(o!LI(g{y`luxV)X0fKL<}KO7HD*+y2kGiB2;w~t-%$@PDQt(RX3ZNeVf0{HigD- z904bde_dq{(9}t@piUz*b_FHT>7pZZXZm}3rRU1Jzv`I&ifgLqcOA>oFE)zatZJ;t z#R1Tgi?i)ZaiN4)(A$|^x4#P%lEq^qEX%bMHkdfNoM0A4&k+enmVjBtMpTJD`oXEd z_+#CU%Yy^9n8blox3sD{WkOwHVM7y-gwKqeWRWkgM}TJtlgNF`xdSw|HMCDIv(oa> z1w#PO(Hm1Xiaow!T7bO;gRjVPNL;6dkWp+6+Ap&pz6EnDy~)mwa*PGsWSBr4>eFU7 z_j9FyG1o|TT4b1N2*Y}?_L;l->+q8huQR@gZX)TkiyV%~_;{WWXi>>PVy6-=xVUO| zA7OBeS8D+}Z#<@vDhY$6Sz8;Qh)9ga7Xv)0G0JJ>)oB{NE~crx(5;Wg+e zAhKuipkKZ0NQNw*szv0I+Vz>fe&CtF4%)x7q2kjA0;tohKzCYQf%d>>zZ8|$o8V-U z$c%hzMEX};cdR)T=yYL%gH(wA0ELrZlH2t*j2jI)4MAO;>W-lKAGKfXuiDjqUtaru zp(0{|owEvd!~d8Erw&7f`<1apZlQ93NR6*NENosZpvG1R`}?*8`Nzjo{K!b8&}tW_ zZ=4#D6J#xPL(0G7sLDYV%<7Ga*iENrCG+^BR}W63YDb|2lXE#tt6tjPrn*sOt4%Fs z!1=abK#uhIn@l5U)JNAzLmH_u*_LmWv$bqmy_t-f>JB&dO_z{nfp~GTt*Xn#Te1N} zs&Sh*8C%$uxDGh=y)!?$R;N^b!?w}7QEvkQK(`%*&mA1U1QgnJ(<6zc+Mb(muhAx^ zyG*aV*Sxo0dNxm(Ar8twHMnNYs)f-{@saXz&GbKFoMGA@JMv;MK%wDS6xJXC&=5U{C_vlzpwemZNCN0jh*jKiaz7E zWEJ9GaWzu8eab%F^zk6ttGh?=6E5yQD)4$K+C{BUT*`fc?QjuoeY){{Y`b=+O4(9> z4%5G&^Xsd+$L`wv2ONP`McHM3MyPmN~{qaWq6C-{a5EE{H$D{ue>%#zN9s3Kwq7iaV$HEC&JH%vM z4Y|=|>_DCXkYt&Ehce3jn8+^|5>I3P-I&>*@KoQ38QRQ_5w4E;M`m~rACVnjAxdz%E=~@$N?nz8vZLA@oZOrf9OQ1NCnTVS2ICT- z{&JJG6`o~;oF{zM0t+X9gSCyyF#!=e2fJ}mqEPa=@8j3d9`Hv={ubhkv%Ksz&I+Rh zS!wuH^z;Pe<-WnmPsi;e7Y! z`rYY|HL;M6FDfLJhNd=MRT7|bET-*ES{0ic@4(gY-`bHgKu#9PWc^*b+r)6y&FN`{ zwbhcE4c+F~_Ofsv?1yXH*BcoEwXwq^bb2}l;CKCE zs_c3fXF+vg`{=ABpRl8TCgeEm-G8(9up0liDDaiD#n@=>e!9TkY3>^+EW#ug#jS_t zIM`ZHWy23I2q8tu8os8ICr%!(N8+6F2pXKdNwU$efa8g0^cjY z%j*VyJFUrH#EsRS{O*(xm;Vf!336gY5CsN#YqfUBvW#0l&ZL zvOK=hK42zbJWE+8>${~g#jIn*lV+`l#)e&HkFnl8$OB^$^$!`u*~Q7!&=&kEo^b~r zlJnohoIeyF%nxc(VxK`)NAh7=@zz${#f&D)L zFrS8%lkL9(U}6j_*#9$v3%n@U{~Z940$9MjBe4HF@`up#kN+nC0D=Xc|7%|W8#n;= z|BL`rg}}PZ{~Z7`cfcyp{}};h{s6%Kp8%Mw1K?r-{dWXBhwH!Quz`tCfBb*VVPge? z1OJuCA5sp-e`f}!K#_6)|0@v=b|9Fv^k1oR{-F+m{a=fc0ZF--x&HBgZ}Yz~hk(rg zen?>c5QzRCzf*w>(vR$nEI`&jg47Ib03cXH8_Z{7Wo71IWCnnBv{_idBGqhcENp*N zs#&?f;E#6oAF|PBQ)gpSI~Op&2uw8sKMQ|iB8CnUrk3UwE?{aGfbkE*DSk+f5EIDy zKY2#LWQt-L75R(A z{-V$SAmG2Y7yXO=HBamx#PN3v4(7k;?=_BpieTaRTOh}uB0$V6oE-lw%JH`f&cB-8 z9Dl12`dbsn-@JwXwG23KaN0tD?*+#{X|w+8uCe};4D08=iL(BaHmm60L;?Sl#45(} z&wi}`tir}B#`+ijT}JHh_N@O@2mt;I{Zj?tU#S5^;~9<}Ac4u~*O1t-EG(RytbaLT zzVJROs*n5br(AcGsr8cb$R>8Ik~ElMlEq4JO8e+aqzJ{SSiB~LH5A-t1F(?t zHVTCaYcJj2d+;W$7nR(^AcjSJG z{slr1rXDJ|RFg`i7I*3f_4om1yfm#36!o3st#*SPf|ZE$GAnI|A?@4U97{{*a7#v!MeWmm+0?WQS6Syfdl~rVWt5x@sQzUW zzG4U~RGu$%HWO#Vkj1KMTYL#2G#=1y)HHfL&-a+jF@+{SrV*-1et?t$a6H+*tm|%P z(vrHjzu-eit5;!6lfw7u#N27LgWh|Z#}dS-N6x_ zft}8s=8pDcSkJWUvi`E%Nx?Im6<^HQf>8Fm+G4iZRH(~`j-b|kpbK9|Jm@vF^`P#W z>JgtOTyw!9Y2cSR!Gi3unj5b7H@;zF^QQ&rV-&Xx-$DLpyfxfM{?)sogouRPPZUbO zBva#*;#ipqKblGoFD5K0`%MQl&@jkJPfXUkFeo2Yq0BhdPb}iuW+YVsEz9bq8`dn{ zt=z478gv(X7m024OVjY<(?Bt4acN0usob15?bBl=OUmwr#Ik%@-wQ742kZCio9pW) z=`EorZ7k!b4$H%4Y-AhwEqqz{0LIGwL?2d13r1N|Z%0E@Ra1efNUTizxKmY~Yr!ua z&>{0*=d)_~vQ;x1?y38ZL{~%dWxoEfnE%?|`D^_KXZwbI`zCPk2pTkagt<+zeIrSw zD5+Q*JC~nW1KD1whEG|gJ9s1;Hy2GCO;Pp6==s78J8W4G7D4i2Z`-Xt4ICs@i&K&q{9XB&f=d znUl2q1Xoo?Sp^)j9{dt9_F*YzF8`&ya>OQ~U2mEsW^SUfYauJX{i7ZegIJ$Ej@u@R zur6rD`id8J{ee1*;G!M>X*@Q6s)t6;kYZi)WMTK@XyI&u0;Ek%dCfh3ljWG@-mzgJ zpI%^kQY(2dypeEzHPRrHuZ z+L|lzFORo-9uNd|K(v5&`NRE`I8$Hh;Y3tE6EUB|bz^>dRGvGhm;V=@*6sbxd}YV_ zah?%~Rll8mn+b0ib)L(gu}e`lTuvjgGvbWgwTHG(+VHEb5)mCWG6N1Y_le#Qm_PDk zf<5#~g2>>rSne7E95uTE-kP(2Cgs}{3HS{pJ)f3#Q3%;?kz3wH?~;xaETqIflM&PYehie@q&Qqf+11x;W^^D4lG)?^niQK^(phI^bzM! z?$-~ZIH$;<6vUJK=qvHDCRWjeaEPK#0;7aS;%`Ekyupqb!h4)rqT68I$i z@YSwh?-R8JO2@a^3F-OdW8YV(r!UW`U#DclLVO4HO|vHn5^xif@1?KZZnG}=L9$$e zS$P=4N5j^`1jF9wk%}WQ=KdevlYUS#4E(c6QFsktnY_+W_r_~}WNbE0Ivda+_Nk^&47Qc+|Ju#)25DYKY_XpqPAEmS7A> zAF^r=)j@8GliqN1;#wAC46G=?J|$zkr+6S*mYwavG$G&>Yy9!D?KLlb`o+zO?wG6z z)T2MdcTU(sk`u=oNi!fMhTFa^T+i+4B|hEe2H1X<0Z~UQaWU zfITd=^U*ZXDb^|7iASt!Y#3)pYzJpYZO6>C%!y@}mMQjZ(0Lnh`KkXm(~x>flaFxc z$ErAyZK6@5S2^$*7BS{SNO+cLaiEywA-e7CZ5pnxig%oz$?f9&Klh&?A2NJIK%J@q ziRgU=L9`fB1@9|<($q+0#N}utx=<+(DLj69!A_4WL{|Bw_SHCpolbFBf=cE?DRNJ9 zX8ty9U_#F@bHvt#R2u6S-m0MZvqZ&hcvH3qMJ{-XXS~aJ)+862t-(*GycaZXqtzd2 zJ`X8lQR(O6-J~kLn;H}>CUJAmKp*zYK-NS736@wDL zKMn>@M%aJ`A-GNw&jfQ6H56f30yQC~ZbL~4IyshGL-bd0_|QXjno1A;<`+=-pr-?D zNk~HhWF>i|1F!|6@@Mlo=>mkU2`2AnyP%MvvGaE=u*6i_1{^I2s4?&xu(g*fc@FBBn3Gl&@|GSD&R9{qP&x>Z_G< z-LwW!Pqy1<&)ZGsq|C~y(kltS6jkA=%&=55QZ0X4Vx|;TaZ4p0KOa>IbA}SAc~Z1n z3_arj)Id?1ntA8S+?JqPZ9Nawh*LLLrh(m-F=nn_?Yux`1DF1DcmW^89*JGua(s78 z93ka8+IQN2uhLs--ZoEU!|EL~W&$!nIp&`2w=)jLEBkKz+7?q`hFeWAuQEEtUPEPr z`b4Dtlii@PG11mcS`*lo#L#cE5V>%Pbqmpkezhw$x^Gs)!%}8#bYp`}XNX&)#2yAd zw56uQ78afNQ-MkKhCk>CAXb6C=I*Yn}JPSW2is5QY<>wVB-P zkEEJJ8(8gMS_?DBQf@3|Ca4j0rpK&}QDepp*DRxS?h_&Vc8|=yLHtrn2iXUHkCZFo z**V?^Ti2f+$#?JJ4~V_OyozzJ~R0Y+LHt76xCcnoIaIdvTKX&FbP35O(6BfO7`)p)it3KlI z;=kopO>ykEUGqKi@7j<|$?q3k10Km>U2SxhooeZQoS= zV!yt+nUH&sFK;-LlEBW~xdXq5Z>;@}??cNWMyJ@#x#MB{vt3rt(e&ND)-TW8N4B-m ztp~yzV5iPYRgB$-Bj$)FFHAl?sQvPxK4f6}B8~tbU8*0C(*5tLJDUSxP4E-<6n`JY~KIN^^YkgCm z6_1Qvab@j-FFb2Mw>(lGY4yMR4TO|MUwV6jIu%}GslT9)aVE?qwy13sz}qvRwuG6IBNs5!Kn#7_{mG zrD5D4Euwxug{SKHauK4T_CuP)QW?IGmts_PRo4iq`A@rwLPVus4H!M}j4o1jv*?Mk zCwiVj&#t$<1TbH`2=spH*pd*3tPAn}V6g}E=y9$s`KSJHO&NNDMg38>e}HBvrvel0 z0TP@y^=RG5K1VczFHF&GFy6g`5_1WQ0R@JDHvBxW06o;q@fIQ8HE*5~NQNnVrvo$k z{#TAJB){6;&Am}nUU5ESJGOsCU#g}uK!Jsel+!MkJQMm z$2KLsBS6zMM5u>2$OZkbsVsasncR+7<(kSfsKdB zMyu82A`c0l0B4q|xU8bYO(hew+H$q0s+KUGsjQ~O+Ga63`eCX_Hj~v;$q*F2fE6dY zC@kwa+s-|eLvH~HHUhdR;5c6Ky2l)YT*hlH?VgS=r!D(-U>}A`O0b7!Rhm}DSP_37 z6uZvc!_hh*WCS}qhFVh1TGr8xG(f2*68_AZWMuI5DFBTYw4b7uGIUj6I!B7U+SGKGb`Mt&SYeQ@Ca^m4f z)mf8#U7aXGiYOEHQlM&CvBlkMOZ1n<@0(hPGB$N_u60YtCc2WQTzO8`M^Yp1p`*oC zMxxr>QHf2~>y0CNqSs+^6Td%0gOooej53a{!T30}5iM6ZB@Cf1RQBi&@)PZ|@bELu z)YExoYlmsdjM)3pe`qqqSJu^vE~4WsT(P@d*k zzM`yUe*(U>A$EYqgv~hs7Sv|7YoU62NK2pwbj~ePum~0r6!A$H1}wfCA>A?{yo?NK zk)3S~JykgR{5I%;R~7BR^4=tK|KkPs98x)~mQi3?zg8r^1ru$Ryq>~Fcf*QXS?^dm zX8aPK%x7;&%I3lV_7uzB4p|YR3{$$a5HZ@6+!mb&t@KP&ZY#pPOi*^1+ZpTE@`nd( zNB|;R^3rK>iSV}oM1+W>Z<(-aA!^||{U_vmQso*IV0h7%dqZ-4)Gk7I4RPC_oDuAdP8O^`> zj#I*jv^;@_tc)5OJC~M(a>l8CGN)9HjM911RE6KPhR~NBK}|T8s@Php*tdB%1s|>L zu+J8uLKGM`+`_M4uyW4^(tA|{oQ3cdYI)vKbVG?}0>A9Pf-2t20DYqvhleY=9CW?S|hG|k2`XpxcbQS5U+ik=9{;>e_sYhgFXpyI`m zK{$3ko3!FCE&f6o-an4bE@UU-)Tj(gz)o%p_aPO!3`|6_wWBhmL=78@H@YT~L6l;a zA4>^1Zpc@o3SUUm{=~rXlVVRELpk0TYO2UE+NF)09`yZjA7$oXCf4ZzAwD|>+1&vS zad9jL&X-fdrbro~I_mS0b1|j*8pJF{qFKaXq{;`BBt`1Gf)EkeW_cMbLN&*aP2P97 zxzXjdVRd=JIcQ1Wej>NjOY3V?hllrMX&4$z3gm7AMD56`mna2<;>=jS+e@Addjxt* zB=)qZ%R8(b+US(%X4BpzzUpou>VNjJkjKMA(c6sQS3ib}F93&>93g}H57Wgu>{eG`G#zH%B$=@q&8{yGq!2gv+ zv+!2ZsaSHSK-8xL$duwRtKysrUe#+f?XJ4IbUYF|Ryr1hyWE&sMTsry0I97J zOY(e)tk(&A)uB6>xC_i+-T9Z%E9Hk zeU%`sxlxRIgi?%8H3)(Ty%y?9UkvgMR$AMuS{bII%LCp&8Iq1`JeDYf4%)?;2rCCYTKKf#${M@CgRBFJn)L*H75|E+1qVvb(@DZQX4!+kVxr zPdvyQz3du~*z@p@JHq6;@nt-Y$9ZEqKF*_)qU$paxs9wLWs*&WzUUiZF!w|rDtvRS`^o{0@>C;ac zD5)cTdfdX-R9}#lwWp+_;Wt9Ru`(}^XPkQ@t8*;*+Nz`doRF^T1`8bysdR?9a*j14 zOa<|lXie?pD)%U?0Z!E_joR2sI`7X|*$TBgJ_$~~7QXv<|89%f_om(FRD-^ftTal2 zSG?uAoqwaV2<^ngx0M#9;!BhF$EECc@mitn0bZT6Q?l#H*Vqwd+$3~UUw@>W6!-Lt z;>)1!z48>{$&nAzh6ckgQp0so(R?~Vl8Js5b91#6SdP8sRh50C1Ji4lDSU>v-|l)b z6R|F1V@x9A03%$9X1!2veYWGhw-EUy?aQ=5kwcMtp?l#^WEXTrH}Q#V;psA6r)rZm zeg_lA{0N*X`h6$y@HWFN={`& z!-Dk$d@hP4#1E|a)P;(*k1sKau;Nh)3rt=Q6J*2@WTJddwwT#4+;plAK_+6S>*FR( za7rPVF#9Pce^f#~&~i6@>P2|Fzw(nKYIMkIz9O!*ZReMUkrT)W9=wLs_%14TC>7?U%X zl!USsL^-e!LP=7HOQI4TKE0SDE*U$;d>8Q%%lXx?=$l;g$SjUgB%A^2^Q|o_N-Sh6 zf~PG32A!Q-OKpd(h7kVKWw!%A;i_yBd5WOc>+@e_838?D@4YRr3=ZC?{^Ah%*W!|8 z!ZZbyF*mD}3xqg^kc6uPG0Gqq$53356^co)N&uII_U`D%m!t7M8H{{((JzJUe5?j^ z0?OYuon>_J^13J+7@h@G-5^k->ycTGyuy-y>v^*pk{J%Sghl`p{LSCtWbnqcER#=? zg-iKs@-zntm{kOtkmT*hA9?TW-yP|OGK(WZY>zL?kt)1Pi`ompSMYz`ezn+%k=h;B zuTx)eIYg^9r_JusZt=6`EW}Wf6%?aBSy(jt^L&Np>SX0|AhLyzagIItb@3V1ROfeL z@RqQiL|s4J3KA?K1)OB?%Yaz?PNeM2SUd?yXKibg1F(gyJU*AlMqSixk%-A@bG(`z z|7lOpY^Yg!!^{|}d_S^s-_!apt;L3hlPIJ$G#jCet=x#|V!iJTR)GHXDV!kGD~r4y zc*;R|f)=u&w3ISh3l((1pTu|rZlirSXQ~0bRB{BJC!Lwf%tlKAO}oeh8bhi)ZV0|! zlcz0LG2lj5aOJ|CaRJr2I~y;h2DO&ErIGs=mLwhsz3(CibaPGo7e}$aINc#pA8}&> zCe@65#a=`uN$jWNNgVk`_5akZj_y97U+;~B+Ws!-HI!%D5q9pzE#|d)>5U< zr6rzv0wvcOddz09U^k+d+=$4Ce1C)95=ytsC0>WT6y|&LNIN7B4wUQ{%Q*gzfVhdi zFFQ9?s_a4b7|%A`EaJ(Q6TU;0_8_10fob)FuhN1;daTR(e3MguWGYLD?|4ij8lq0S z6BRg_tfem^J#5b)L_Bwn_?6I3l{un>pthrth_& zvy9-R;3s<6=&GfQZ|NNPmcOh|@EtpD6-oqy#h361JnnRib9M*NGRr@y6do^o96)WK z6pBqzq_eK0k!lLncixhF1>!;%^ieyJNqq&IMJsYmVo4$d^1RVxLewrhdYn@!~94z;7cIN)Vvu^dy$ z4qWR`g`veM_)|&vTPodnGYV8;_HT|^99Q~!`Qd^wtz=3W>xnIWGX2wj+!+mKg|VmZ zxTQEb^w5_)ogI{9XkUi8$@vN{rdkeuZ*k+TwmNwvaEt4#lg&WOkmp_V;78-u1qUX+ z&wGo%CfDDs!8G8D8U3**urEpE80od?1ZqqKDkT-7jj^CFAJGQjshWZo;XpM?Q$*_d z9);{)*WZv(4PQ3rWc9+aGrVNZ^Jqwq@8RU+L_?z3=*;BFIkx?JI|2G6vv{E?F5l~Q z1_IhnNQN)%5Gm&VKCH!+yRw+O2w2lnMT)71lB19GG3#sP6#drKVPYtI!YTz4C3%l@ z_b%;8>gRd;-7Oxw0i3H58@!1TmM5eDObqVJJU zhl82m_UjJbb`~QdRf1T5^QOc5$9V6YDTk~aownD(lyC-XGtr2{b)8cFvNIJn*Jd_hl@29+{`5eqRvoW(X9*KnW?jrB$ z6`|=ku{;uy8)z?Q=P#4`uM4toMn}+B;V9$QQL2Mz#jNsXeYrsH<0>>Kg71s*wQVx) zrc?HY677y|%(q!YC#*7xKdQ?Xwl7qr=-y5lBrqJ?x$=_IRijp6Fr$KDh1Ti3L{P|X z#F7lrk)WaCK7(0ExB~NrtjL-|(0$jF4?H5B-LE`$yaf>k`G$-gZ>IS&*0;FwC*ypJ zbxQfVa@SkVoTqQF!?$+6OB{!Pe8WwMZBUa>L{u35HJ|Kr7Iy1)k1Wf|RAp0@06hPZ zhr_p>-3p$KB3>C9wy1hABYW$;pVeMLbcqp)esdqrW@)N)2Y}; z)ZxRNGuV7bvKKwSR(MIY_@?58zY8v;5|WNfyvxHxi%vJTnt-Ksu%9bRZp89=kQ>9m zT*1cN+#*g-JZ_?VnU%wrO|Xj?V5(QMY5#(P@VLEx9ephjck0?Wx3a`hKztUEtEH z@EZHgE9l)HH}Uo}r*`Opb_b!Ogx?>Hcpq@mmY@zq`NHjj^mKDiksk2A3#fQ@h5AIe zM}ByoSlaFu{FKGSaZ8(_)l2Zmfmm)J^mMaa5fY-gNB=Y@wcDX^2kyAYqkS5@S$iJ7 zPv4f`aFOsQ7WmIL*6{b$&5kSkhl0%)@UJ;d@%n?ohw~NWm-aH3M05Aw&JOlrx6L?B z$7iP^S2}J_KL%j@ijplPfaO7E`?bbha08CQIDl#sKRFYy=PhaPCG$PQ?#A=vWjNyV zJG{iXxIVS4^PViUE7sX<_5Gs!Z-_ff@p2`Ye z%-C(f_ULyd=&HTz_3+fWM{MWJ9VLcS3U5Z}j5e6&V!|eWY-U32G^J0onTAh;P6bCa zL!zE$DHcW}%VWF1K*56!Xv}*|r@8XtEX4TW7^tKpJee*?^l&dxKB{&_cv2&&Dn)pz zzvJV5%wk^pBL4N1Tn~(%6uX0aNiHGnxaYF0pgxHqmj2Fq@={Dk@TMi4J7_NtHk|u# z8SA_!?IKTc7bWdta=AJ9R}eiktrj>fazBTXk-{Ym&p5xa+;@RAM7frVK}UsF?gq^~ z`jzl@Q74l52VDCuCG$Qfh+2I;!r8QO@`~3-7GD?Nc*{)dL(+8#2N)iegamQU(rLN4 zR|xNIyO)U$@TSd$A97dDd{FZfFRfDPn(b!R?)5uepq3CE)b}8O*?kAUk@N|?%T-vm zu4SOmz&08#eF(!PJ~?lFBo3%Qj2UPngjJbIBG12Uuyinawd9YNQz7aocfpX5#Q2rJ zQwLP7&~?>w?YW>EoOUfZC($bV#wlRyTz@MX3YQ{5Nj=EOrBX=h01`i)xN5&8^&^>( zrjQgp90%@*GhEkRjh0+0&-_>LESkwkY%!&FnV^(b$SbM&so?IY`%CsP6y%mLa+~+Bp1u|EQgIk+v1nwd z#!T#Mq6(}*f=~_q<_nyW*s;+mPt2R^=*yC=S@NYi&O(?ajaa>Awmo-n&Aof`NtU3L zWzd%LD_yUh1q7o)$YvO~8X3#?Hc_ouPMCw5;6S1eZrK4dFnXSvI)&>E=k-pPnoUZ4 zS6ul8^%8?KHxJ_SJf{W%>E%w4&hL&y)}+IFc7Mtk`uJ4T&DRJWdl%KVWKQvkW0e)h zIcivHU+U~%noL?I3?}=7H8WX#4(UE$&0N%Q7vFuO2sY+cyVj5h=rqX|@L#nYw9u)i z#0O7HY~FQ+pj#KQTju6f;4> zB!(0_E))_xAQ0JxULm|C7f2pLyj!4;{`NyMbw1=)j{KFV@1fP}kDA>1&6G1Zv+9gL z3_`PcG#sf6YZ-`R!E~Q7mF>(wjbS>kSTmF6MhcG487k~fv4vzW$p$mP{_2sFr2)BD z3T+_tOz+DFnW0=&+1eXlMDvvM}Hxroe39t@kfYHva}m^U2)yI1V_MAXYAhWM4zDaQk*6%r<=l;?9X!RoVn*75?O6cfVPz_Qohl{)xv& zPpyKswT93uB?5y$39&e$afUC_ZAO95%RIpufj1!U$hmFu;Z{m=3KB>B0Eqy#U3IJ) z7U$NWYM2 zgB@04DrBqyD*cnCuz-(4Zv!n6)kWLf-I8H`K8#t*#{SSQH~h)4V}kSm2H%dsaCq93 z86Q{huKF)p>+J@0Dg8*s+y9f6c30~S3TZnA2{r+=u;J&7p zkTv5|oBH6nfw^>AHYI*f{>829nr8BI&&rs=;LC%wY5I5lQ%-VtNp_iBCq+kCs*E>b$FMucUd@&Sw&78TR{5$|oQ4ecVP7!r9RB`n9ONymYU3 zYYQ}fvGQRa`VJJX58vMww~McMVo77`5mt)qT+4xlH@zLo-dm<959KVJOuc_V@EK#S zEf+Hl@{@;QyCH8C5i?u4o^zXU$UONG{^FPClb84FiypI`S~N(qPp_AVy}+ptH>_sr zSR=Q$%R3jm7DZ>QPM)u4k~vrhF*KV!jxZcU!tQAq<7T&~KC$#_u2ABVi-sWy)b@M_ zo{rK0>&wlD7L^cYz#D!46-k(}HHyyW66HWLI#;BF)J|o!rW`T`<@^hQVAQ~VZ|+D2 zd_MCKVJE;ZP>axPb_-cA);G`nG-bJa%~Ti6_UnF=ami(u<-pk67B#wNd@fN+;!H#x z!AUVSY@QGe#9gmy8IZto&S)?gjm z0%n;7oB-O~8z;mp?G5U$Gg9QnRoY%KSDy+?A)(~H4RmKPTZjE3M_EhUzcJmQbI4@a zh1YbJlCJ7Nvr;QAkO=1=GSx4^p3Afjm-|{*IB@y$K_gaKc?-TjLWob6VhrZF+o(L)F#{i$6!`q5QVhaI+-=~RJfs@IH zF-};{o|kV=W2}^mYvVSlL3$hJxl0r9O83AS?s4qQh#}@KlcB@q)M8-Y*<5LIielFA zZ4hL@wZGNWgQqI~*E`-p3=#rCJ^oqfHgMcM^PXIVU0pfzo+PX{HszoWx`eMx;y8tb z8$_4<+4Y_#hp44iMyH^UtWJx|pgi(-gN)Dd(QDQ{n)>FWF9);BTgHF98((WeOdmrF zx5`N4k*?=9;hl;$$k5BF$zw<#jc=OVKp>xf`8Mi}02V@i{3sJOBjPw&CjKxIeHwVX zu#^_;GrJLR$3`fmHyqMZ@)BBrYG4LBh{D(Q{=7K=yy>Q4_So0)Q#KgcuspoiGn_Gc z44RZG{rKdtG+qLEZCrRvgpB2M1;QIF-rJ(eE_qF)y}{GCdcLN0zTWWJp8=eyAM22b z^dy(;&p0o~ICWpQFTmm^hU`-_`T|V*h}CwSkL_#qHfD|)>@{kE;skZDeR}d)3T#8z zK6MN;PlJ!_PYqF)r?4y)FXo>qdoz&YN>75PH{G=%4RdPl2EP8^@hGLP!C1qQ8} z%Ezsm*w?I@D8aeg*U-9QC0R4)ExZ*b={}9y2cf#ds;(6#KLR6wcOD9u|G#Q9m zCL9;kEAm~^<{bCkE4E{uS`*lETN7q-+Y-XWJ?XI`c=a{dHu#5!P<4ktt?Le-8|V&K zr;$rbk9s8R;8*k}E88_O%~@Ft5!h;^{HUWFtr404Ztm2Twn>;%Vi~Y18pXA8m~TxehA2z;3F}V3`zpzZ%k5pc$>X~U zlht=E`PChBN)uyNZ^te)cTC;sohI87sxP<_CNCZn-jvKKS&#G*jL7}e{6wcaT&hxG zQm|9^P2xo3CtsJOsmM<>EB-Z4FBr$ zqW9ToqTu3qYXR2Xn7_gJIr^sVrDB*g&Bsg)oH#rk%y=t?uyQ7~z}?{ZqNY;1Qh!yE z$WPRWBW&@|+vm)&h$g5Q1qiwj7$i-dCah|25$jWFJ|nOwwCGU$Fm7v^W-sF#(Bd5- z&}JQzoo!-~>Y3qhnH-sG$}V-(^}r*UQ!Q<~(%j>5NbwT!k-TO2*7QrR)Li*<>%z88 zxUL!q)p{f9tG~m1c=L%AU!zke|$teBMFHcX1guFs! zaoMlXAlX=+U!velWTS%6gk)n){2C4+l(lJkvtxX8O4(PYK&mlD|X{1Omv zy3FwGMaU@i=~44vjFOx&4#S*&?iS$ zM9@m(#aZEe7#0Up%gKq8vT^d=PVM!npffvyO~P`K#W`#CKy)1nT+mj_+7 zM-Mq+sGOSL8DDf_hHXMJ2EAfWG1P)HvX^lnscr5CMM?9q@=yd$8Fk}j zKVhT}KKBBa>wffwZz0==4$@P5A3muTF?Gr}RNgm!Rj9QTnpkNn`Y z+!AH4-uTzEP`?gBDJ*7|s6X;*WahmeL$3{qzoe#FTrQq8yxKB0#&e4juQ@Z7->v<; zh*%L{(w|}l!A_cf@d{dA44f`D=><91mDT_A#9xxG1;Y51ZNxRHTUt0jp%0t`an86B zDx>NUSsUrCc#K!XNUL)(!q+OgNT@SL75PI)V!KBN7h>8;jEjb;i1Zq>BMPrh-Kx1w zXmlqd`4-RA;!&fFe@O@=p-N+A;9Z53j2iNw^+Fw?@N8s1B023iI zqDLk(T3YP}f=3xVf5BQ2mLs7)aX~K#U@6>x;QgAVSX{l)nt$+xV%xmy>XSqqRP|Jt zPjCAk!6#<>km{qIKqN5AjGoKW-+@& zWy4m<^?CL7Ng9k*a(daO&%NLkh0KO^cN4`Nt|e=Lg3P5K~Kwsj%})V9-E(}N-uw2+bz)itPp zB#^LUxv3elxr!=*F{~om<7r2^?uzXU;7klG!uBz!`5lYM&(cnMPOnaTsC2Jt7jWp7 zP(pQ3+e%@a&~#I7R?Jau-WRoSn) zTzHg_zWqqpQf~2(^G<3|ac21%HmY7o>&3<^sZKpcR9u#KVD4(T7#DYH%`^QgM>b?j zpIO9l+~ILJ$kl_6_DsPuaRfDodyN3A1(AxE>mOeceVY%pYI#9}5$PkLb@L>L1n4fnzH|&snRmaT;*539Q!$P4L2v=VM_KRyg23CV0cd;E`_}@W# zxOQgPt%g8C4RLu_)~@g#g_h^spW))sraR24ksc*$Sf9}e?!TROPf$m3I33Gg#e%O$ z!9$g^^6@(upvSjM438Cf;#s|%UM8&44o>{GWQKVxbp_5y_+Fr$1Dn`XBwyOLlUcMv zF3_^DQJJXj>jj^sbL3w&D=d}YTs++XtLr7wbHH|Qe#0PkEBI^XN5~OX8=3NCfvLTq zOTI0y<-WDDtQ4M-lNw)=m)4EzqLSnijYT`s_5m#cbNV4$ptHx17$d(~itH4lR4wK> zX8r@VA#(8W8xI}jy7cM8&(r*a7WGpe6xctD9a1)B$(vSgJnz_)>SRA39pU8Kw-xYN z96lWAYdtmzCDyAh+!$}hHLd%y)6QEQZpqTD2lQyc)Vg#%`q|OwnwcyY6q?<%N?|md z%%Xn)rC6EO9j6Cnuv=O;g_TV8ao7YOIv&5`tF9F1+t}%UaDiT#V@UvOFa+6%-n)PJ zanF#bsaI?c3y3GVie)TKX;M+$w05kRn1mcYUPCP%lImmiOtltRBKc}c-Y{aGo_>Gs zz!C>2AYLcxhC|2zuNj{Ggdl`u16~__ZnuCJQ$c^WTWy-scKA)GwqLP4Tp^Yq98UtE zq%~S*yyN@~zSi^N4#(A9;tuL=Riaj=2H+E)A;bIQI}Yqr-{#(a8ZnJKn*Am*025p~ z!C_pbUdl0efccaGx;LY+Dm5xAuHYZL>bSq`7noJkGc6-J-98wrdGOF;nHl(X6teKR zo>>2Q1|B||SqQ&GmswITYbv%`!ruK{JjOrPzEqa+UjF(~A(LQaHBEN3rWsVPTAp@o zyt~E&Ub`I|?Qngp`Z+Z^=2hn$VUu59zq)d(^|(96^VGAK8SJuCYHCeZSc(yWKH6wI zc(^=DQ#oz`PBmUrh{O&2=BSzrb z_c0MsvHNJ3yy3~@$UJ8_1I9kO%<#a<_u#Tt4+4W+teITLohc=6-59Ytf{9f3-_LCpaN7xTAlQ(J=0%+_hK|Z>2e`HGxCy{PF0=*TYf1ieGEL zLNW`;s-QV9|Tp zeda;v+i@YY%-(~&TC0hRgXx1rvZDV&hu-E_OCzmriNf))<#o!iL^b(~zF+F%2G5z}mSYR@h>qggQwGh3_u=Ysh z!|?4Sl%2DsbIxs+4hlcE^m;lnT%1g4pH_BN$kaLy!Bu@tmLZxF?5c60jqcPp^)_kC zsFJWRXJB~Ggra0C&bR{URZ8^g-YUlhM-ngD*0+s;>K{sFnBJzb6*ez80$qMyAuB~(0` z`ONV?VuxC!({20j9r~5P>5Oc^fJt3ty%IGYS@horDmwUm6ybkY(*Gu*LK%It6f+VV zBLXC6u~<`k6C%=>!TYIXA=6aAIR3*6tSibjtZQY<T;Jl*$xu2jY}z*is8oqiiZ|2a^WcYV+&CO-0F+8oy(q#rfVN1;a$+&>=Vd z(=W3}g!C{pbi5tnE$D-KD<0;cIC)jfM-%qgtbhoVy>QCiSnR=RuH{LwjbN#^jJqTF z8G}omjk7teL5bNXSlYp%(3jx+#hcbF`?RAicc11!-jXUM2TUC?wI9xiRkJNrL?m~R zRJ||>N}nAIf0ic5b>!ppoHI|;{nXF8{nAcK_zjbNB;MJ$9yHD+iuuhc7voKghL$2r zKPvj$H1O3IM+FkdAlK1Zg;AKdg*${sL!EbM1<<+XZ$Q*clkfX*CTAhQL6BDDo!T1d zqjSuW=(50zEQ5i@QLm}&)3cH8oMAFIn5kvD2K=%iphgDnKj^ygz#7DjVv$CMACjx5 zj-x9QJI;IhZ=f|)ns-IN{d)GM@16RzvYCTcw=BDAG0np9+tx?d_dFEmotDbmcQh3^ zuZ3zXu+O~*sC?v-F}G8#!NIkUyz_mQlR2;b&kAo`8H`-;5b1UL0(;lcRj9nXU7^{< zLqpLb9;?HCB>LoU(JIh~M=Pg?^<3hY3+$mX6^i}>T@om$a=IF2 z(Ul3(hpS)X5O1V^H`hE*5PCnn4*Ec{_MQ;(?Q|nj>eiQZQU6ZgEU?5pgb5UC&_k9l z42j(o-zQ7bNY(*}7p6(F=3=ZLmAz7+icur8BV4Lqzgf36?o#ZDHb!0+zgV;*=zO2| zQ&Q|o z*dOFIohIXQR|p~JJ?Xyu#dRq+4B7RTI0CjjQ4*8o{)CgRM^lV~V`&gIi@C^gwE`=V2 zH)5+~?khIh5a)8lrO!Q9DURMKkH8VkP4!AH1?yADvZgdbR zBxRPozl}i|$z)=-Y;bM;(WGN>t^QsVTSPVI^5dv75&oBgL(749jzcfM6Q_=lGtr}! zo<&lmT;?pi{Yp>i5#Ir9sa=AnpElP}M24lNjv{9T4_mueyzU|dyr+i@U&JbIJr#*ui+B5J+i7-2Z`Vg+4E zEq5IEajYdzq#leJ?j{SWVFf0$aZ&gPy^k`~)1Xlo);LGLW*vHlVuAQg@AfM8fZP|F z?qNJu){CV}`Wbr$>VYU|!UG%_AwkD#^7Se-BJSp)qLC`mDYXibJBSF>w4R8veyT2x zPmM26z%+rd6xkfu-irQJl#-pPr5*%kkA}YcYcc5EJN!R7Jn+`#CcHMIpJII!B7g9C zfOB;`54s(*vkvhZ+{8m|Cjkv8=6>=p3J`RIK5Ir_FTD_m+joeWpe^Ks+qrN|B^f2c_ub_MLGLTTlO-31dCUl z2>Zx`|JYqPdme?StRl|gO`!U@6lu43Okvznx9m{=_@qOy240;VCqnaxh=r+1dMn`o zcwBKe3kjw__pM!bcfp9!aDs%CiFs(=p5L{~Nr5g@eE2m#y>L`FhT^B~u|r?fn7oSf zbJ+|T2C4P+hpn57I-&YdMP|_`3&LM0HJ?B{>FY!(HY$X2YMg18;0OuDkK24j>Ki8Y6ed0Cgu@huZJsoc>YMC$cZdwzBgl_n&tS0PMk?Q zF#=zB!jM+49lHBT)jOl{M@@rG31#h2Df{;8`caa{1`Vk5ATjPjvGZ?E7j>$s!Z?1H zG5TCRk_#Ng;1%T?Mi={f?PvS6M8$9j4M;ZjKR@W@*M)$`nVUKB%mD&D@q<2u z49VY=f5U!L{_m&+aR{lzQ@v*Khv-fgwpTv z|4=+@{rtP}Qi0jM_LknOFgXxaWvqW%}2{0H()C{6PhYn8+puA&&bG=r_s# zg)uRJ5XWa{Wd>~Om_W}9VP{}w1FYMK*#S`|wr2~re~ul3JrP6#LG&lhKZxHn{}+J& z&qHTt=44>u0%8<6W(GDE77i9-c4iPD1O`*43HqEf2H^v@tfh_BmU&zU;?fO;2c0)f5>nFHizubwuYP>zd0a4iGK2s=!qy~ z5J=C5{w~p84FV4PFXV5k{~P!x9UD8K<^?zuKFfOj8OcCwF)%Z6{!cm;fNq%!^3}i4 z{f+$1_kRMP>G0Wr=mZ4CfHMLzAdqM{04+5@EsPVy$^0+j0IctiM212PtS?yPul3>n zjr~pdpP~GJq#JxTV0G;5fUX>f4d7)3E+%3&W+nz!X5iZWm+R1ne%5W`I-<>^X>-m7SS^6Yw7Wy~}@)C!&x- zyo6?EW(O+!b8-HQ{+|hc)Bk7u^G4&du`zIffLaW!n+@m=I03;x;EDpuKl}eEn1&=k ziu)f|EG$0jKiJ=_{|Uo=jwof14Jb=3%~@h0r3gc3c!yQ$k9LzT9^MTmLNfZ zW~3E_PNJP51OoOyfZrtl`*>4aR-hl@1ZD%~W&?fzj*t~-Kmhks(C@wZr$1^R3nx%xfnEBSl<>?9A_W>cAYuXcRCeY+ zV+Q59hxvPgf5`tU{Fya`3@!&31JfVAx6DAya4>NKVvj694+0p}{?A1N#R?6c83fd3 z5GUw2HyqAC6Z|IsFYteG1Dy@~bGR};U#2X8q9S0d3rIRXw?=8yg@G%JQ55SecmriPb+Dfn5e%dx7mpG_Zt_ z#r+5PoAJNE3IEa2;IIH)4`AR6$bd2fo5c*c3Ilr#v@PuavPx@x2s7;81Ao)}zvFbD z6Ac0u(B%Lkr$9;tI#nR0vH(%d%*Ms>&#AE_0&`*{B3nbKVE!@o_niNJ=pQ{X0zPmd z0Ko^O4`#p}n3I(WC>4OnDUidsfX7PyZub5lK!;}s0ba;JpZ(_zM&k4N;QfRDhx5OH zKi4RHpr-+H7?2&9fg2oVPG-O$nHlI@SUI?ue;290m|400JkHpkJg3 zMTA@=`YWt2oEqm>#_h{*i>nJd@)iB>$G*=Tm6~}LG~cPZv=v)wAb1l>d3(ez!@iZd zJr=HV`E_?kG~`wo^aVGq{jP2vH&h8%ZhKw6clM{UV!Hr6I0GN^{OFaOyX~A2I@EBw4b=X=#)F|)Upj~EuDODmd6)BHoPDO48 zf5qyA8v4LRR3Y=UHk6%E6cNtN*iJUw_0vlqw3DS@{CtsfMCq3n$;6}~9ux1`plvIc zc7<^m3BnzI zm-DjS1Z^h7oLL4jouY%$Je1}4;BxINtLmQwnn~x#U%(fHk(pr}b|jnq{zG$u+pR?>lA0>0T|T_-dT9FYC{l>uJE#?Z8#8rmj2jSc{Msq3kKiUf?~kAvaWGC zXkQ7YgcM9?)+bvgBTGM0uZdYJ=B|Il0%5FOrtJIf#ft2UEqHE<(i3A1H1$DLulP!| zYHf*Fb~J<}1hdqQ;MYQM_>1_>^me&>#Ou^mUq;F;?B>r*yEtnbBq?V#te>UcoD44{x`wd9HYFfd6ta!YbmTz3LqG>9eG*6fh5kCk=sF>+?~LxuZt zU82wg-Mx@eZI(=K&i#g!%uxeD)PEM8!x>$|VLMNC?nCFa_+<;h>+n$?6#MkCOm#M@ z3cGjwvM&tj`l#Cuw-hqSc5u^0btk$5=*egzhZ~SCH4_lb$vs*bl-~s?h7>fmuix@Q zAR97)?bR3H({;W(erxZ%{nF-^L2H*kYC;KPH0g9+{s}7Z>&isD!?^aa$=Hf15k>Ur zz*Y3*O43}Tlqzq4$4dn{G`+@{9%w-!Id5UC_XYK1;SD`2qY58{6 zx#Dm2AoAWRITNkNPc(qbpDb&YV237PWgr$&HcLaUTWmJzB@2vp5Hn0i)7_c5!2}rUBfS zVVpJV#V79-X^d1j6HG|qYl5(ps?ytDO3Perc&b`DBM~2^nRqe8_`+TDdt6#@^P&i7 zP)Kt>2=|8!`}duLG~@!hUtbL27{^B{CMLjVGKN`vE;!_|g|k~yI>DUt1&xoYKWg%d zE&Q!|S#`)9Obg>5YlK*(jF~ZWM|vOJ8Fj<16LzzgvdIb4(3-H_?U#!R8Vv-SkOpWl z0?7?3-r4HaHX6#Q()315Esz?Ziz;BvLWKn?6Ke$(VOHB2iDLV#pqGW~rhOjjO*01P zL1w?TyK(2?%?T`kctHq!Ex^K)yO>@fVlI?WI|9S_;j^sALwD*xS8jb+EBw4ShqK*i zhbDIUbqw^D;4nAgMOtfTZcrs+5yrYI6}wmF4@@eiH11bTFix6K`-G|{p92m$+J-7! zOL*r&?`Lv9oz3pLgO``}P!s3-r`i(0D++2|PCsdz#%Q_-|wjmD4^*`LDjGcaU5 zd{Vt}eMQ7a$)I@kFBrSF0w}5;d}sKx5g3Bi$enB$V;K6>WIej|;NLOj#Rcdp!Mz{5 ztv!UwL7KL5ih;mc0DRD}l4gPrcUV~ro@Op+HkkTpH6)W{mvLRN2s|&!@%%BOTB5Wk1l^zaUcWyb zdgBOz{XF2$M;Vye{whahTGC+z{TRn3F;MNVv4x3C-Z2K2ktmj|MiIZPS|#H;H_w|0 z)8O1xC((u`^$XxwHH{~V71%aTwyBmT{(hq3*4BKt+T=zaJh6P|a#>WYtmm^ky^m>! z<6CZjzlna5wky+6Sdpl<*6wlHa&_?|HVDQ}{;9UrGqq0JHOB{hKXQJM-cagu>3Vy+ zNfCufcbEneYM6DK1dS~9S0pl4fGBy57S|J53XmQ(@7w%3a{6nVd?)$&)mJ^k`Q3+a zllk0dxQ0s+__QAfJFYe#N;j8rO_D7%3SZU8Nd`qpS*~MXJ&2gf@XW%KgsYJ)jVLM#~3R=jiT>%l*?dd(z=Yf==oI*C}QnY;zw1b|x-1$iC(KXLJt;*R}<8 z$Okk9G7MZHk&v7`PX`#Gdd$e%oxTY3Z7b%4^LJL%8SXI*l0z9|kr% zq*xbooo@yEGNaFG`{NNyN_{`r-dRj2=}tdPA`ZgUT1I?iNZg+A)#5%A#eN{%5hM5J zbU079f8d1ci|Z1&C}Wmht363Vli9eVve*l$5z;>$#GwdyUApk_&8qW~2@U6Bn{r;h zC+9fI>@!S9a~#bw>@bQTCoY22d6DPaUMe05%L+Ge^qSm3UAxI?qGQ+fIoRXO=4bat zOYe19n9~MVgNrp)+ju#<)A|~o#V1{^w4yw8pS!lWwz%G(I~|A}jq~?*XLE>8%RFy$ zUcQ$$-v%}Kwx{rq1j0d`s0V-f%B6{W^PSBAlL#7kC~b9NHVLq^|3J>5AsOwGk_ySK zqxAUfRAVyXE!PtP&&*8iz9R8)SNxGdftiIP8O#~T9;V|p> zz%ujV;GFk;;h)NKE(7yGU*C5bXPCi=h6IT=3toFx=p+@Qr%B(~Y@AJP6D6#vpsM*F z4V4+`UwIG0ZIMX5y6uY~U7P>5QxxFE{WT%_cS}muZiU!O+^Mk$M@*kezDd04>s=GqW*vnq zp@GD#rEB_v@2n#24wEtx?(o`J1)E1)q<4`N`g|F*1nIOKupaofe=s?PDDKOr?OcEJtuWP+Aq@Qu~ck0`ZrZgD9AxQZVVGKU!JU^N=ib=cV;i9*bYl z_e#ppTxRK5Cy2$8m}}!Z!KfK@Nw}gSG9!#3y)weW0WIjlcx2eZICSmc%R%|0z>~fS z+-zt45q{`~Da((eh&dw8DKM6v_V!K$>?%0u12$a!Hm6wbxh~*Eh4t8R-QZLutDmV! zjI=`+;mC+SzV@ZpZhSO7(?`1gux@4UR2E*HO5;_E-Lx?9b?C&8`<gmXU1JS_R0=Pn=A~CSnTMlq7x+AqY^@!aG z^D5HKyvn*Q)O2W!CxbMgsx4FI08^EqBW4PEqUOa3rqV}D7Scxcz&MI#=Sr{VI%1nx zf08FO#VU|vlZll?7Km-dDzI*Da4knXb$c@5#1i&j0h|WFh@?BXUcb&ZR>k|gAC^4| z1fxp78{(|U|sE$tTq!d0m4Dh(#);h z9=U7qTyx@vJ5IKeqz`pa!tBvGAnv>3=!0aba|hJQ6vg-W$Kz3)3N9*!hBfDi)~--N zZJZiJ!E`sR=9VW3K}HAb(T?gHGM1SamA|OkR5V-I-3I(@)4~#o7&&9Oi)b<%gv{X= z%#sU_=9r(94O{Col+>p>0YURiPef~7j;A8UV{uj#UwNAdkS;cD!CCNDJ%j2%`h~1w z9H%Zz!#E8Utlpu=zfIS|J1>fuR5kc-Vi^>u7mr4Y}k#)F(5i-o=Q6+fcZgr5QO5(U5s{eWusF& z?y}p@WmhK!5$QG&ZM4Z-jpbdEX-oX2AS1}7eShPQntgkVDqLv^-mn4k8#p9 zSEp#ZN89izTZ_@CLbc#$nia%K(k(&Jg>naK0m{Sip>twED$ZGlBC4q2j-lU@^VLO~ zbPIn=YUTgdRLlKiNISDj)XIvfLq8*{*K6Z78Xewry*^pn>01HNx`KwjT!X2N0VCiu zRjTBC9%E0g*si+n#BJQ82p-0dtL4i|d#;rGnduJ+vp;Ua+DeVR%4`9EpcIqxx+S(y zK+*imLBS}a$BC{00!8@U=Fz0bdlsLY%cI{=mCeOTz2A}PR|W21PtsmX031X8a!Mh_ z>7Etm6|OyCC1G6k)-_GeVE6B5eXt8L3-X#kZmL;dD|cvxGCM}-y&BYF^U}=pw&?!p z`76g=sIJY1n_>PzF`Gd|pJ=rd(h)JYP3hCY^gZ}C^Ardi2PTieHUr-&EXBo9X=Ckh zOwD`ggpnf_+(v@KzpJ>Q4FKdAup>Zkko)V~yJF*qYfP22kou(nEK6dB2rWevIuTKm zDq(@g(^Kk-fo69}hP7s|7S4b{69J!7Zc0>=yWxjKan~y%&R*>QtpI)4tT;RARw+{mG>Y- zh<(o}BB#-Y98LcI5X=H514*`c{8u)e_eoW?z-6LNgoNa3aVvk%R*{p8L?(0-CczNvZkQM(LWJZ zBG#knjfFqtae92T@DZs7pDN{+y#;5ws@W(OL5|3*d8b5REiy1^OF7VG2R9VmYE2wz zH99Ua@|YuqNG+x=wJrJS>%modCxEW(UC;Zrl2gF<%iRuCVLH8x7YYH+i{k7q{4F2v zv*+-kU%QUAYh>K>N8-EZWgrJTO{*bn>1_{|^sP*mLneJwi+JZ>7Hg|3sS+DwvZ6*h zxEJ}>$Z*Ht@$4Zajn`B*j4!U&UrPO?^;1f+tgb@_oh5oAKw9gWlNZ1Rpa3?+Fs%*n z``N=khkJ+1hdF;P{!}r^$6z9X3u%eDsNeu%On(8AI}QjtlQ^_JvQu5c>qjqqyfrfyt zp&KL_^<;_)py%VPG)4lrP4&a(Y4XoLMv?%Rc^sI+RU9V6oph8bO=bvGJIS;f767D{Y1&Zix8~%` zh8NJi24rVwBst5Xt3uQRV2eb{vKdkD_9!ii8zHeXcMed=IQMG%sV+mh^s*eO3$e<^0aVsVIaB`fH!$0=8vZZ&j%^Lyv}`NOu{l@8yMdijg) z1)pV{3{q6=5OPin*`>txFvl~-TXZ&HajqkE4e4dZG9af23Z*a}NgOC(vGE4+;0a4k zs>_Jrm{Rl$lyqdA73hfaLRJVfYmRKsmeS=Mu65C7NtzV9FT)8y~a^?LZMnM@0xS z;^#k?qie|DIbuR(q9{{j?n)MX2ZEzZprVak2ZBHyAE8VS+=7M#G0T2>Qb-97ZMvav z8nP`S6_B=I%*9_51L=jMuhmhv=eO!$2>(VT4?}bl1z_--pay1vg00lR>Lbfiu#-q9 zR zdcl%$AbXQ>*v;{F2$=DfkJXX5K~R57d&77CAzCB2Pg3x&52y(`Jf#CP%9HkwBLn~t z^Fz6BSwJ2F_2NYG^X&wW1eAHeTOJw&!9lh_eEL*5LqN~N2v88O9S0y+fNTCw!ban4 z805}q{S{@REKWy~#^p_>a9xik7Fpv5yBRkQKGto4;1WJhPBAEj$T*f1z1p`qkV2+- zz!U6tKtk4^TNd^=P2C=;myL$&)1r-uPlu#g^4`pb8_$uZDK)ubR}Rd{<2*G3N?mdDr3=YVn~m$#xsZ)=BtS{V&LSq2*@%z z;=%?oPywkZNTd=vV)49Z$UlBNsa7ZP0NQF;e`H!K6sXMS->~*LV7N-U@-BEhBaQ?s zm#9+GeA=`=Rho5HnwA8K@!)c8%bB{r9kU2OVLJ=;N1rlu$<4VF`@#r#dvyLjOe470@Kj9b ztjRK{bQf>uv~=ffeYU!WSG=M1^Y;R%XJ-NhXvCi6x=Sux@#+>@3=z2~j6M0r=vWo{ z#kg<)MZ=Dg(Oq>nHlPF_Gi_aC|b)5(MXN7DRX7uWxEZm$1! zZeW%lTg@&IIbc~^CJt8$sn)$N{uJglLS1siiVryL;ZtxNxpkER_Sw@mt|kS6aT2?L z9r+pPU!z9ebKGrF0Eq@Cam_G>T1rNO8XMo1Iasy0i3b2B1q%!7-w26JE3kkD*%y?! zJCU@}X47hxjl)j&o1D+HJBfE-n+0G^w~J1@f@hikAHdkqwn7% z6nSDzGKM^g97gx8dHOLAV0Jc2Uiu~)qZTd4Z4jaejvw1jja3=0N(+-aLZ0fVuwpE1 zW>nCE3vfzrzx#6h#H(YMAN3UGj5mdHHF&y;&>Xn57Jq7rYlj!7O~GvxJVIQ{+LjqU z9efP`B{1?Gmvvyi#cN~F(HGD|0HnvE5T|V^!Xx72IM|z{55(PZ2UwUrc$nU6`o~qB z53x0UwU^eLH08zfSJ!^UHqApzW_=FI;nOy>7VyuhD05ENhJSt0sCh02bzwS8dkEjd zh_UoAY64e*$XPk#^iHX#oM+l4{ek|_{%N$tg4*lN+=Lsv%>JOm^jn-TUfm8pG0jOn`TGsp`acs{G`8JIsy^67$Gh<_>MM=i5CXc zf;?p%6t-54p+y!XdJ8!wxIKrG8CYkSN+{~j`a>&_E4_BSY&%BA~BM*~FM$Hkyg5CQe3RA>|3I{>B2 zQ=Vq_ny*F6ulWsg`)&FB_}uTPt`MY#vYjg1jWa!!pH7r6-j{LSaJDvbMk<@QV7FbK zH~^~(DuxKVL`M++f^n`?MOgC6abwphmY?y`_JB^lH!PgRwd*dQhX9q;sQyJt)m0l& zD?pzG68tw4XH0&S5=tg)16}-$E#P)-i&+9Qw2>Z)bJMg$1Rv5S2^}kH2J?~`vZR1z zcR~=#*xQ~<8ta$3*etdKYd6rODmS%2EGNfjL2MSr(AGisk1cz02A0=bdnAbe*$UB2 zXdA4o+bKl=?6oJ1&DsOHR7DvkBz#{Xa83Aa!UMQ{o|??|N^uRddO_R58jzMa=(=%$ z6Q1BfoI%p5E=cWbWbe?h zKUzge?W?63Exc1hOCB#f?j85`dfT<#@Q8{4KM$h_Zt5hOHS}L5An>7Ax5uDIlP~*T ze`eK4BPsyKzvgvjfu6W*88GgX4HGyHj~iHCpnb)SVTQ;l2YYzj_GA_E+4opPL&nvi+9*bk_!*)fU^0XCZd zPl*)t{+c6Jve`12C_e+)3@>7`!aNFb$O7Y~F9`h8Qe*Olg5ppvaYgat{nwX$r{P78 z6BEI`O>>Q_KVgleBOB+^#$ z?cytffdqI7`JMrBuMSp~s7fI?rkU5{tR>zD%ak!-)cJJwA$cwjl{!JdN`IffMvJ>b zi=7%GBfBnkM`lhz673!)9he`nsH6hqEAa^7X|*|$`!9g9P9Ek`=3BR~`|;_mYNEiG zUNIXk5L&WQ4G5c$Vz=7qGozPSU?I~ zq^`#PIviwLh0SL=pli+&y}S-f7wQfqLzGQUwd|}Oma-w{pl)pvNS&WCDu_w(rvwXn zSlSM}Q8}xiV+s5?q_p|xEy3tGmPa+jl-t;?D4J>!0X}IT+fk!K^M5NvZ1Q_NFJ~F_ zUA#}_V+2Auo*NwfJ2OgdI{izS0HbQ-Q@@|JBYgLOz2q!W1|6eehDfZu?F6B{BLdjv z+9)pbaYsqe&DaG_STt>Z3SYXboNYYiluq^+Qqiw^=aoT{*^>(Fh9V0r8$}yY4n{96 zd7R3Z2VBY=hZH=YcA#8E02ki>I*Zul!+^6!jh4JFgvhV}t^NZ(WvPFe8pt^WK5ayq zdJ@kBWo`z&WRX|24Yu_xgI=FzLMfX>`oIeNU^^8A-FgijX6g8u4=)cI6v;XA>U8A` zlPV9Me)hL|Wh&)uZuBdtr))+Hgz$4i>1`kp20)@n<1Ii&3{S%??j4T&{)kFka#--v zaJkuE4a8x#8e2?n+-x)h1#8tXpJGEoTJ!^myxRQKi>u4bk~|1 z2A~|rfOcegE3p*ni&9)0L3NfbX;=JEA;$`sRo~OGR*N{LC1J`I<)^zbmD!-Z zcuf&v%L#EdSHE{O1$*E?_%1kZ=X>{10eCoQ<(X?(@(k7p121e)w~WvyX_DkJsBFWZ zfh=&^*ql@oU76OP%Di?}YtnkSm&mB9+184Ru!*78%&IDKfn3X|&5Cll;YxBV<&h;? z@6@ULr6ZiPT2RMQL1fA3(cue0>IKO|RLRQN)Fc~%WXUtFdvl7`C(>8+W|f^4I|IF7CH_({7qY(^oDjnvMo(~SUe`GhBAj+!{?^y_7Xh)nDD zK7v}JbK-16y(S`W@b25YvCpERUuk844=7r8oRr2#D9(n9$JwU~pfbc#oE8f;?nW1h zmi)IlFP4Uv0wPd1*a&pEh;_~#fR6sj9X`5ld(F-}7}#GOWt`!Q3}J!LyE?YjXEH%t zl{jx__9@X-g*!Inqz)q%cX39crxFqJ-@TiR8=u>x9`7EY@)*SXofg-qW`cQ2*> zTGt;KI-lO65FBVUw`Lxa_mM5v5PZ4PJvC7DxUX!=2D}V!FvzjrN(xsRhIo{>59m30|`vW((xX};ar%Uj6gn6@!jq!L&l zp%&MNH$LKQT;M;)w&?Uex{{F^eh1I)tn~W#r805kPk^9oncpq(l>ttLYHglZ0V0J?{FiPFhD))SMXJJ6wH15X7b;@aFp`S@=Dricge=pJ2&u!uLR z8EbMr6r5RmVL>!A_5_L(wludB_QbghcA*=L%*~+L+&gKS1r?%60kAXr{^_`I?lrg- z0W%Dp?LZ)_DteQJn-eFRo~B6jT1*4isf29w&eQFvop%#EU($Bx)i?f{i$A6h_0BBE zgxYMh!&##J$Fv>*rFNEOP-lk^-yq1Z;gf6 z=>A7_{NHQ{f7*Q757+Czk*fdoZT}24SU`;bqeikZasAh(K?cy1i__(BuW?5JE=D0d zurmi_*#IhiQi0HXDZ`Gehkn&GXGHdEbJi}}c>7;kv?al=@fV2#O%I4^0wzu2+;G(Ygb?mdL zu1=Ne_NfWb;|(|n+_vcfyfsyEY=3HB^}W8G*OX~=@)Il*g&KbFmj4Q^qjUpj>;Rv`@ANpb@?ecXXSQ7eo2sBOC z4)N+`aV}&91?URNUCX;P;5cn*VjBCj>AKho-rBjrzsA40zM;SQGrJA(1u8&r(3G_m z{^~<}w+-#R$vKg#G%>c$|3-?N__Qt_r%fB&7Yg0-t)6Knt&H2FEl{o`=XCc()*e!Yq|qBgbBt| z@5cFCTL&kB?FoD*DtVmek{=~(*2K1@fQIewuGa#hZYr01?-Hty*I>6Ju4W*K@Pa|c z1-aDP_F}L&bos;0FHmt&Beq3E<%%MN=H}t(7ui${Mv5oQ?Rl|b;^Mj=7a{G#3`|-f!nfpBpB9Cet8WMRM(+M5>RgwWg}*lX68O~t^o zwV8h^mVR2CT^ zZMyK<$ZWI!COrL^>Kyd!THC{Oj#r(w_AN9R0P6!9VB~A%$qv%vV8X0 zJ$jLM_~ZktGB;<_pA(_?&-WMp8=t(Fp4p#T`FZ`17nDINgUba_IO&5!baN0zVBqU> zr=f#KAnY3jJGJ`~00zIz-6xJ##x&NO@=oc-Gv1Pgg4!c#sszIl z!l8U!pOc>jZ&CEHFA(coj-8pdce0@9#6gZx9g>c$Os-V(C{}4U2`a{|Wd%!Ru|{Uq z!}*xz%4FPdi(S-#y@wg;0NP^y1Mfr+>xQJ($jK3;OeBc_0bndG|G+#UjtZ>Ti*vI7 zHKrFUl8s|ygmj|r8sS1Sb?`UxiL;Gu>EN$5a+FKe9qkMpVVYBp&ibsGcD4=>`iZ*a zXa}C1Q!PXtv00;NcGo>P`&frlz4iXGpXp5lQ47%wUib?<1SS&|FnSamyyFXC{P`32 z`erdoq6ozH9e{~xeIL+={w?7JUNc{4N~4UA<-7uCm7|^9)gLBJux5A+inH>nnq`!c z(lJhuOW=#(>lZ}V>-BQ!s?d&kj^Pwanx+ivEq&t_lt9aX%x#00v=@4(Yp8Nj$7cO)Et85?EvkH3vCordb6bN zVq?)lJs`JCU6b|{4qyE-?18K&&`++;?uo2NYost^0|IN^=pYv-!;3%8I=XUa=>7yc4|^pL81K z@C=lcZlGvS(dxhB`{+){@rQ7}B6xSrGa^g{m4SH1#@&nKC7SzayN&M6sou8z-jJTzgJ zTXL6|$3y>pafi%~bPwhR_h8f6Za68KFEj|$wme7H1>=25|_jc(=fj}2s(N&z$xIcRnp{JT!MnF!1yF!=B#w6V3o5dL%h z>KtvvZT~ZNt>c-Bqj9pDdgNcC2`e=`ziTJvnU?4C{!vtNPb?6&Q>u|`Hfz(q564)o zH;JNP@xWGe(RYSGVLlXsUI6cQ;lB@IuRpDkB3^4@eJOG;!d!BFlZmNn871!(CI!&6 zhYJF3aAm zNj^^vSi*8}F5R14f=~0M#8T6CD;18>I+*>z2SiCW?1yXfXq{0E5t(JYSW z``#?pdc1-5*Pslw8xu0!C)TLZw?pS|QVvgwwx)X)?coR^`$rM*Vz6zxd=prHmsT^f z;I0Nmf081HYs{}BUP+B=g#zY&o zkz0g6>A?8gysCx^lH8sA(MU;**~ddBwO}mb62XD+;mN7mBA$7&=R4tkQW4Ag2b<57 zDf8^kjqa5LcchDPJLNWLJ24K*T3go>6=Q3WgKgP>iZOP^hUXnJo|X4)a~mnZ81&VqC!%8@?4d4QX?OzJe2I@k zj4%4MPIEWHP`DIuMP32T8`Y+tG$TAeD_WS0o9nw+VDJjJ?xcS_*K6bR)uCGj|HmL& z7uV|%9-UvK*TOS0wwT(48cm%rCBO3m{ebimU`ttrU%VzU z>gNv{=;1`$uK<{%OxiWDuPY^ZNWofFdyg%A5ZvJ*8E)4Lv63U?lDZwu2Xs~qjY%VG zNN6-XL43%ALld#xK|@1B6ZU8OlBh6USul;EJ;FnS+lCGG9LaQ-E-b!!bd&cT>NJmXL^^BFq<#`Q$EWPbnP*#Qh^-bRa)S_|K)sf^Vv@FY=( zsK|IKIUH4#EzM={se09`r}P(!=cU7GB--8F{`e+pKD@r(mkX?Q2TC16?_aJG9wp1~ zH0%bmFn3SOWmn3NTPwBn2NYEZQ5qp7ARnAEert`OUTw()!7VqtJC`Z6T`qvYzy1UN z7Dw=$z5v;er9N?o!h^Y|{-5^@<6(MjrjtO|IxIISvn&PQuVrEs@X$zf@*DvcU|#!G z5w6IA?n$O3t~I!@EC{6pQ?t&~e~HI_>*h8-I+*&)@-m@@0CN#0rTtyYpbk+`bBxE0 zckDbAHxtt_O@Np5odY{pbCE3T70{LM6WAf|$p%m?BrVE?)eDDFouEbC-0<_LS@}%3 zb~uwOtlXb(;lwsr&vhNLY}qw?YLwdIrh643^~qb%%Xg~pus+Y7pN46eu|JzNWC*71 z`{TGipVf_7a}vrJSUBg-jGl+{a~Cw7y?U~CQX$n*BLCsd`2{JZcu|5_5R7x%C^ccL znglolW68)lan>`}5S_RTbI#c6r*E=Bku}#)X$L)1hsnq}vsFdi?{c)JUN>_eYoEF< zk6*{FWyT?0S<5!!Hs$)lQG>i#n2cYa1lpl)O5k_3VY7{2|LtDZ#IIwX#1Hd0!Yyn* zRHLQGE?YH2p45=)L)3g$h=`Q{u2vn4#{#e%w++E8o`Y8rDs8ebjbBGYqwWflHC<(I zpU90#Anw|r6JxiF1-lTvmt9Vz^;%&};I%22&1GsQn?0p0f)`WgsOa%U$SP^oT6=OX zX)Woo&Wcvt0BNUh)+(sg#nQ~~j9;?2c zyHhPf=x7|Vy?=Z`+9Iu9Hr%v4Imqke(T85Iti(;ww)+#&#n_p}2@Go8=b?54>n!!{ z7;i{GH=Uu5I_S%?)Onq6HwU5*jrwvbC=bbqn$<|^En@7W)hs+0qv3_l>pIV+O`e`6 zB`=YNB~L3m&wVO~7H1*STGOwQNdSV2k53(wz1p#kq}nR5QZuWLBeu@WJJxc<^IFt0 ztDK|d=+?E3Fj4Sej|xTln@)e3%Q5r%^!P&Pc$7UYlw+hV+lcfkX<$Gdu2!x!a=^W5 zMY7MRu593{Ml9l6X{@-KR_g}ky0wr;QEl(BE~mz-pAiMduyKgW@=;YctO77hkZIeD z=-0Hi3IE)~yQF$FM{RGwE{;y)7t~~33F|CU6=3$nA8W5B_GH95*=;Em)NtvxurY#K z{CQw~p2%9OtnsM>SEj9F>rHQ6amC@EYx{C?nx5ZSP}X};)@yZsEcjdT1)IXB$?7C) z^)Mk`!N(2&jJ&cnObZAoXaY>`3#erWSwh+H^7>`;)mHv)s9DkNEJysMuU$Q41KdaS z;!nzRd)ay^P7C;IRd!$8s2HG_>Eij3ooXg+d>-+=?ZaN`T)@)o@ZQA`H3ZkNc`M1N zb=@b*v#|6}?PhM zNTkwRfZ80~*xoYLidGFs6?e~tMs3plIP;zefxm&i{0M46c3|&&Yq57j4R~nbCS1A*V+&r+IV#5CCKz=_ zHm`eW;#+Pa7ww!nv2QECLg;@Lw@|Z#5@NdBsuz3O{{oIPcLBf$oq&!)?rdeqLnz5M z&ir2D^?L|Lqv$M~Y>);+s*?3EX;I%l<
    mUge?kW}s&%09=tQgygutmKFigXm@KWs`x4NHhUJ|4@R2ty6;>|4k1Iysgu+QxvNMtPa z`2(n8*1kb^Rda;=>5Ow@4#rj*wh$<2*kwH~K^E}Tt64=_816oxAe!0QKKp6uqlp6mapPv74xi)YN*gKAF{oE0~Um9tmdTK zRGb(0;Vd+cxcJm%a?2%SXt0G7^o}cG#Vd1{hn?a-ooJSENps#WT0;Qt2 zl^RY^-SPFf30Pj%qdMOWg-*0})5Gs=M_K;4MH4~6JV%#81?|?gN3T{bMx2f-DE%?$=Yw!M5~K3 zh^mV`*e`77EZ4n)5_t*K$L+40QJ5f@HOgyUqp-8Vi^ij4i~`>U0;9?1Kr3C|);Vkb zvBhhXR@o3WKV8-#s#lx?T7gnvX4L7I)DxP~M7DjdFc*|D)0<0I4n>4(rJ-v_OA{1! z;RFq6h%FjBh?)=TtBFy3;g!r8g7o4!xFR6-i{xcM=VN7RMIoQL^GMvAVpCa(60Aqm`?XhWsIfinA)z!8a9!y%tpM)}E^F73ygz(kgucS2uj0^zj3GEKT&0 zi^f{nvPVi?S=avf4L~}Z@3fLaZj3mzvJ@=1zq`kJWK_stUGODNqx4-wcG? zFzu|O7X7o}lsp1M8!ozI8n1k9lNWvFeT}=VH%O=;$s7lO+eTmJr$#VS__EKn75&C~ zx9}1P`j&y_MSLRs*ax_MU9_DimU#7IT>6}HG7Eyh&A>4?>cphtSjYM7M*C*^x`_S* z>+j|yN;4Pc#!~Z%Wa|J5K<$UZD-xC@jPA*bLFzG=rqk~&<5oF7#webXocx3V-=c)t z7L@MU-Ys*$`R^hT-Z_QCZ^a~ZTBJ5u;dUwG?;JKwph9xpTVKLaOU9CUE*W5obizY^ zC@8p%b6BzGq)K!mL4M}+fhWam5>bs#*r4n~aS~jRo5vVVoA*75h4$2cYe%yGj5A5@a2}A zY4#5Q#}29Gc3j3mt*)+0slN_;{CTBUdn{v4d8lb9Qf0O=_d(fP)E4qZ*<;H=k61TK zWOpX~-19OM-np5Gp*EwsfzMDzu$y46AnrRsqPSKAF)P$B*7TIt)W7_V3EAm2N&!ojO2$MM$MY$j={-VzE1 zRO9XGuf$rWwsg7O7jJnbH}QJqHDz;J8bO<(6{~u9bg$AMJs$l8t0eH6yx;jCSF5w&It&ezsJk>Iqx z7Q}}#z(+}_Z0&KV$QMEY471W3s)*VxBO0x>w~stWvwt(wV-f5xZ99%1Fjf7a*m2tb z8Rv8LKOK44>y_~A)0+g7e}X1-$E>MT9~1S?0XOt(?5*EN@%rYq^#P6A+4+kItQc}v zGY!qcpx-=ooAV1yy7R^{T{t}WF2yF;;0W`{fFY+z*bP}^@)mL?SemtqXD(?@n#=J1 z8`$Qx(>!yg2Glnfa;?`H93Mh?3&!Q%SU*H{0`*EcL= z@C0g)Ml+Ep(YT?VmZP?gz85X(LRk%XHHu&|#tvC@|JAOe!KG$+#I3_iSGjAO27r~l zNb4J4oDH}C+UWavS|o6CvhUgE>!eF9b(r%s0Y$b>MNr+~*&OE9Tx>&vQW>16ZG&+o z>CvEaiMBa{)r$}nyzk}29L_1jJfniDkg`u#vP3?*(lirAi|>}_DVd;}`tfP!-g=$E zL`<=cxL+kV+~Fuq4G#;6T{E&a3h-2t7>>61*a#Sh-NwsZT&rf1)v#H}{wy9S|99ja z%NJI=L({?O{SpJGFAR&+;;kCumChKJ#Ay%299BypAi zrZRss)1x#fgQkVTfyH7)!uV`-2zy|NS zw{r|hwO0(st$a0Joz6%9mGQ~#!|TJg$zX4OW8ODQk+n5ghQ?SZgXXRRjT~x z_&m8maB;Hkbf2;an}-*k4_7v(32_7w7E$fG?SiO4D9h<29VOEbn`uS*%Mo_ongn?i zeiOQkl%3bkaYPY~>TsHJw04AO9Y>sw8O%ZnDdhmu z)}d*ho`%aSEoec`D%`_E2dq|eP_P=JJG|@0kQy&tuCfJ8ud*bVQ8tMy_XHKFW)rg@ zOQmdA_*^rZ0;ie0ljZ;cMkSV3xk+bh6O5%;%qhnAhFiSDkURT60eHaQuPtsb-Q2l2 zvH7n3elB2r0EZ`TB$^D+9@{vf1wrrm4I-YDajH8Jhh?CQ=Fl$&5gG#s7arDexeoEVtRVj?0bec5wY?wmkCY?JAIP!+>K;esYZmk)@?1`7VB>VTsj3g zpXuf>|A#}P8&FT49RT80R_#%B(Gk#IS=i^~>-03;Ray264mEpZMb~w7(Rgy)e*=Lo zMMGcL42fzWGesb6BR<*)r01>+b za%BDh)*Z4!*C5<|fS!eMcSH0gAaOl2e{I68_HnN8vgdl zy@)!>`uy&dFzd<_A5|we zgdMlG4t@;ERlvl1xiX2Hq6hbbkxvT?dey%#wPjSid^&DAe*CCxHUGGN4b6YZ7jtzn zW&9$GKFr{KVTnCIVFvgqB@^JY&QBaU3o9IXzMih%!%F(I_r4lrjH1YHpc==NTa}QZ zG#`F8fy)c|@n;R0DKT84(h|GwPZE2uLf3m9tX`}e!-gUuZE2rfp6foGawPWDW>>T4 zsRHAXu6mMfvDh;Nc79r=!KD7+^-*^s|K4z4vlb#5xPA24Adbl1d{9ME>0^Y&I4k(t zY2(QKmXP?&1xqBfWZKMab^X@3p9vZ!w(R~}7dcD*Qx{qO-?|8ux&Q>0rrHQZ`9FS# z|1U-IzupFx|C6-(f%pAS(&|5Dl0*yWUjdOux@-r5O4vAw69JYq%XG*( z1;lfm@Q^S;GQY?1XxKoPsNFG?2if3d>hW<6Wvr|5c+a7-s;aWDvi3M+uWj1NB~s;t zYthtO=lbu?mak0d3t1HK%Ob&K4iiOoQk2Hg%pM;J$IDStRN~K9B3;o8X2EZ_WR@b_ zj&?c&+uCowPI3&2qXDr$lqV~cldwjrIOaKt&~^W1Ni37{RpJ#1Lmn(=U+tR_JZop6%-s^l$W*5!4+mD15Gea1QWz6*3$5q1%b`boFKxheZt zv8~gN-acwEMSoo%@PjrQWbb(~5^v^e7X=%1)%wzR+ZpDs14wQtc`}%>uiqJoajc^U4;Pr&aVLen^Q0rz& zqm3ECBO*+J+JKm;i5YaSXO5x`vEHekhr{kgV^(J0b~BsaZX4R%Ztj}!8oVI2N`xXW zY0U`c$CkDLR<^5quy_eRVEuGFbK(8<-c5cEVrIv%+oanzy9l4(p3~&nTJV>b{q+G? zXd{|VNR|b}Z${XZD*-*v&=4WHF>XMW8R3rXyI9$R!lex!?KU4SD3g?+a`A#()+esG z6?Z(w&=w_zBDy3M+>ZH#d!V6lIHDwLg=tmhh~-$GIJKzSCth>J5riCGQfKfi>pgA*p@Up;FSW7UXH5dwUQW#mj)mt({Rrj!T+(v znq4)o%|dUIfa*iKj`RY;S8cxG0050%ELxDrlB^;e!{MpSYB; zW4Lq9^FO$o-6gtB^aedPqArbO%`&Z^7N#|i&f8;WGVAZviYZRfu%u=*eRr;UP6v|9OS zciz}4S(?D7hq_1ic+9|!NjjK_sJPs8u;9 z*0pyEn@-ypnTMhkoUKw}n`%a3%`z_VFbiiyOEe*`b~}z=u^QVU{W=2gKMh63G3)@| zoID#-znI9hV;J+#htixGT)9&2xBXpMo_SIJA~+EQ$D8U9rY=}r-#+;++4biRwo6F| zc%9{66u)x2D_W?na#A=&JEhS~BOh~7_6C*KK3+))Qbk}E(4<**CWidyGM18 z>YDR?=kwJ6Qd^>*>igB?HCDWbupD|9Q(Itv_yWto(+W@EmCl}JJxk7J*DyaYJzrA; zdw=+s?z5(E@uPYFCJzMSp%=FLIAPc}T<_xWYFTLAEX8^p;&Mu_=P}Ho6RZ9Qy56|O z*HtHhZ|o$eN@vkKmqjm`f;5b7q z^9D^08V_Ub`>`Peay^cg6Y5%PWkP-zr9S03>-4W5RRhAqM`9zoPj3;-lj}ZD^VmQe zaCI%81jTIh3hXTVc-$GDyzOjccRUQsHGFLEEl(2X9C`bxhhhX=y`&=PLZ;lubP2rN zDSey@Z+LYAuSd&+F_Uv5Cph}*Ce=tnC8?QikJCEee$QIsnHQcEAPuC(u1!6hZ=D~V z`#xOpzj)k`LMi2cxO#khcsgfx2bM$Z(VHhu?U0y40ju?(WxtKKN#jTKrKh9vm2gg; z0*v1e-+ESRAL@+Gh|bRcn1UK$YccL!eF6Dlpx&D9mDEk7p#_yBv3w+7S6tX_R>eBMMrrwX^Z>0alI2aN*pxL_3|{)B0aiI*Hf0CGW1@;pzFHU2(Ry2|KgzR zQ_STaaK+x)R*?AnQE>C?^Yc^C*5n@EbHeAKH^5tgThmi$j77Xv2h{39gB2ykdMEQB)7m;?)L{NOjM8 zyD1ay%!h`bhMTC7-9KEe0~4xae4{gY3raADrtfYS0M6}7+UfZuRuFtQxPs2~= z8;V4kubY)0Jbn{ew%+$&V6tj|Z%bLnc%*iX_g#oVJ@vf*r=BMABXfJ*hd~DcNF%{d z3`@>6k1u)|T#BfRWZ5-v25%P#gdg{WssB`0c{bMV8M*!0TmnE?kTK#K`!m^`dYujZ zV>VT{mN2rN#}Xk15uW-Z5EuH9&0cI3TA6VQ8Jr#=f>x9V7K6ZrqBtN9u)1$3Fd-;xU9cN%~P7O$!@!A4`(@ zXgZ3q_Cy*;1NrbOP(3a7Qym8vIh2wh6ZUs{BQG{WdT$9g0j)vIY}&?PMcufRsf7pE z8MqL#XnbZE3FCSz23&uj?FX$FvHm2jKtc_YA40`UQAypLhbb91Rv((96r(@4Gi*(K zZj^=>S%nP(x|$V1{_t_Gvjd}b<-WUsXkfr$On0;mq2aJ(ZbWxMv|V|V1^segyLana zs4qkOqg7dD#iKNr0hL~mLz;(lw>Y+UqfWCHw&Xz}<6Oyf9yvZxV})5l?`4V_#41kI z9P%TuwjRGEs(N>a z{tk9BoB?em7BKd%A1x(*O4SW7HED(ddD#ZY-IbwjK7%f{wL@k@eoN2>_{d|5MvA!<_w?CIYLgVcnfGJlv8cBpjj}hC8n92Ljwnm1`)g){ z_naep%U!$PLD}umD($)Tt?uD>*qk6`qSDlH}#|srT0)BiOYe@c~fU%-0(=Wo{^Y&9$8D~mtfSpbI{C3kmax@eX!+HAm>=E|IkLBUTz|f#%awH!* zER_`mf_uVHHPJ&hn=wrA0UO0~eKAi--OTe!gsmr*q+aj$V@H_8cRbh%&=Sb=X7pez zz8n;HbFpJDWGMa+$4+f(_&6Qv=*eesfF<QJwmRlDCheNmA7J$c=ti>Ec@kJ+;Zv-V|7BVww+y>(0#LQ^ zxSMPyn#g(t*%sQQ!0LQHTgDM_`DK~iY1+BR2o&nI4)(J#ukBz`n)ca`1-$C~MFm{0 zIq&-p97BXjp__FmL}95h^^2rt%XTAP#Ii_^R0UwBR%mK3z#!Fc$VsP_6*x#)Z4*BY z@lUU_naWLW?qN)T>SO+U7(;VN028U%l;brI0Cd zr`6TSDGFq}s5W8vXxtl_uP4L8I9?vbiP!i!L45q~Hi9og$0va&_!4nj+PDRGP_ri3BM&?u|_vl|F zfo^Gd^VzsoRS9_$E^zgHieC)#QEd3TT3T;2xS73KPTY%e2Ljo?y*(V=G<^r2?GJ8E zdEdo)$P-s{i-~Vs1!&w)0Z~+z!Jt&q$q}60hITjCn!w4CPhzoB73hNo2nger&Rl1X z@b0!q-J*l%^^r04J+1t<3C*O$DX6JD%;Zz<#zp>TU*rf2vb;^q`r^_on|Rm)Vbc>6 z(MYh08_UT#qzTecb9vavm4(>V0AwG;B25(tq9v(p6~f(5Gn7qan?>Tb-x#3v&aJn@;ymrwsq4&3vDk+5r-i|QSJ%7d0gw1K z8A8YUgd{nOAzO^mx|uVCt+broAEoWXvYA>Xkg=02X^_LU2rT|~Z8;?GD1o-)s6HoC zuJSC5kQ&SYTl6;&XK6BPDeBD^5xJJmMi1wa_V?cBwa<)l(VafM zT#3xTMnQqZixYI^pf1cUAsgg)F#mnz%WbkA2TM4v@}ryF6e?XUYIJ{YTHvU~0@O?s z9LHy{UZ0W_CX$*;WIVQ-Sn%K&9LrK593_q453x@T0c4W7>&;q%=tpU-FBmCg%$}|l z?I^u6X8wd(U~PLV31#v0xLbCWu0dyVY6j}3-({cTwX}h;cMm`=CjZn)BI zLR~lAfW!TI_79>Wj!qSJU7(2pig5ZS3L1`!v}HS>l9I@&w(3}Hw1Mq}vDFI8dS z*2pYZ)W#KG?RA7NQq@j^yxhYCay}N-)^eTz{`3|ZBrRbf^FV-&)L*;%{`x*4%cJmG z%thMeIXPSNImeA(=K`#h7-U>+-~|Xi)`Q67njgAE5caYde?3y?maf-|Q$ zmJ&E)8I~fjQ2`#Vbh4{YSVl3`H`h!%mr|te$p&jW=}xRt_YrkpCFlvv{-o1+`dHl_ zbm8O}Uh11F%T_A{Aq$ODsZaPU(Ag(w;~aaYkp<%ROC*DxFOIY zeKqs8*FHOM$fNr9)j%s=xuKB8fQ8CM8S%_n8Lf)9#F<1TWm44|&dH0Ii(b60<^;I_ z#fkayi}+`AKaQBsdk0GB_1Ok0{Z^ z@kUzl?GRe2$BlZ?dLqaj&fq2dk93UfE7CW*;K$t6sR%8VAfgs#9;pj0imj`er0{W- zk5U*>rJS7HBdb1-Tp9qI-c{v#>tHZ>Hx8?p+{9rBf89|US>n*D6!5PYB44-4*Mo%q z1UDpO^Jf$J@_BPrIacZlIwp%4?z&llWy;lwdy-K?q*GK(BzvohWU}O^jT-^(TbYD` zNOt7~-1Yev=Ck40@V!z*J;6?s-$WZzRYc5Nx-rH140t}wDltZ@A(eNYT^z?nJ3foT z!=oA-x@84*Qr49bi~y#W-3s`OV$=N3OKa(+kWO`26xzR55|uNt;|nc{JJS(g%*Bl2 zJ?gX6&1AACjLWA|c6(P<6L;x35_fUWWv?T{<9!LGl6T7`vXsqF`17RIv`WA{=4JD3 z)JUaq6J%@ivQ!ftHNuMu;{32goxIo^kNdbv7xgP&aTiH)>H*!|k|&f&#leH{{QHC% z(=v}(C@<&CaQ?HQvw{p)?`2NkgNcgRHh;nKVF={(#QW4C-e$4MorOQVD0$K6 z5Tq0-+0y46?iVYis@(^Y--S?iVO?cLoltKtol7NP;uCq;(WtBxLHrSG`lzN$QqG39 zFnf(YiuUf}8wP;eV!Rn2s^$HYS#|DCPDq)M!4;jOBLC^omy-R$x_rKvxW6u6Xc&WP z#{w08sChBmh(B&QUn=rFad2buKfxjDd4;rf2;}#8Tz{Dv*32kKvAiiv80ag_r%@>| z*bk|k>5Z+pWm(ej{;W$c7(yqgSx}bzV4UyakbqlK^A3#6H6VFg)HaQvm@8`-o|pzA z)Lu4{8u`55(co?$)^y;rX?zkqv(JEYV&N@ZDu+28;Ygce6-Z1;tUSRbIyA7{plon; zbQzU&4Dk-&)<$d3i`o>3-sIMsD@AGSR3qhZQCRt+AM?3;^>@@P3#};LN*D^P7OH4Y zr;1QwUYJ?zUgZ*<=t}1LPnfi5iMPvA{8T=CN0)(I8vm{nx z>8EdxVkJqxc{Pah+&f}+^h;M~zQ>h;swOU3fumG)@*akYt4i zWJlozY0&=LL-c-<;ZH>P~===)l)`|CxB}Lbe?oScg297r$q^HM|W&zm(D4VmzbwM2EAh zNE-b1vbj!z0*azs|Czl@pZc#%QDZyEWFauPOE?0hoC}_&OdqAe~F=B ztt_mu@4l1$#9l9{yG22U-T<%^WRDLT4j88I z^<$y!ZkUjEDXN(M#br>m3rU6BX3$HO#;to~RiPD(KS3uGT0#deVT%6O{QF|uIJ*dG zX+!%#p&q7$g}*kYgGKwqS31Tg&kE;4BfpT9U7L;-={t2>a;#MsvZNTU2`o7VLfVlc z>^HVIFiK1Q^l!KgXy-hrup8$T^IQM6&MoZyQ8`uOcYMR-|CrJ6c_wH*FLk@Mb(aI>c-NUR*M zpcLjrO`7P-K0(0O;X##dW<73ENL}mGM00N5h}HpGnVIk@E>R%SFHr1j5Aw8CuB8-N z4iqCdWe#P|+_hWsS8JMy$mt0N1SeK&I@e%_E3!`xWYdEIXXG(MGL-i&yli+h&F1F4 zfBuXG_xG}o25pOi$Mx&TJI|B_xm%o)#{a@&`emaXngZoC6dyFp>P(OySz?;TwMr%h z7y3`+81_;hdH>3!fj(EmP-!_J`PkQ#02W+;cqDWJB;3(kks@fWF79}Pzk!dg_tZuf*; zo~X%>QWSQvhKOK7wm6AeO}BSQ=i_o&{WBbtF|*A65fvankVKEpvm6!2U#InXD|{r$ z3DZRCshQmO9LtNQ2@KL&=_Z~QW`)Oyeh1>wy>}n1GjA{yRqutJU;h_wGYj3tC9mIj z2NuWHWF&(WETWf~qL`>goIb%a+i-vS4&7)$_Fu85ZJszK7Gbl4I>qW6y@RX?^!AJM zVI_V0!fPO8#ncw4dc&+7616jx>*-Oy_K$&*mYTNN0)KqRSdE6SVCpHw2)|lHR?ANl z18>pAR0vM|PRYUyzGhx@pY@NedE+O^)u z#*!D&4=ue}rNjSCsIuc=o{BJbGgbg-!Bm6hS-u7h5kSW*!sr5NXTt~ih0EwpKOhO*Y0feO70 z)b_<>4t5hCl)RYdEQN!Ny$GN#MEDSHhMeO<5$|f`AVa^U7-NxT1zS|VN%K~>&)ngw z<{u#H%=UGV&3B;F<*;Ri&9i)~v?q{qGWdJo*79iglg|Ot#$V+2r!itehnz$k>c1Pt zNS;4#=@CLbKTB%1|UosrL_96_ob>8*GsBziIx2 zQfg-Yt04S;$@s+n9T0&+B$$+t+5b{i{PVPwf3$g@|Iy~9AUcB)rTn4+6{E`KoQYH^uR~_ ztlB>jQQbGDb-(wsMW7D2e-%vvpUim!di&e{6%pkd8MMDlyEJ?}KlM)%8yr4Al@$Fe zBBH7ckb9BZ(D!}1zjz(2tiF#C>Ug}I4o?3!2f^lAq<^=fw`syVA&bj}oL+;P6W2`C zU2Lt5x~;fvux-*E**)j{`?rUejzWhUw`5E97J^?-v;e&%Ib*n%j zC>RnBE;KuDWN&vCUf$f zZ(B5xzax7x?Ie4f0Z&g5AKm&=m0b%WIfav+FYoV!V}YO`stfRWsEJ&hUE_WKSR|PY zZMwhMr3D3DqQ2hkJ~L1^#3^w*5C^lntd4s+o$f1hLW*=g`6sV>EO)G(=lMy+T8%-> z@=^3TV)(h}k5Ei#sB7}FzS!8#6Q|we+&ce`fp+7Efl>1uKacyj<%qg2fi~ctT1tp* zLY~$J(&1x7sFC=AFpNRf{enUk9=SlOSwJ09j3yuS5U2SL~6@-vd05SX)* z;M594-LeS$$#;r*sy&hM<5^-S|2VUVtoMckMkLE|DLuY^%YH+sf89F0Uw#Nk^*j|3 zZw8cNsGeNVv#{GK7B^Ywe0Hd+53gSL$!sdXC-i#i`=|N^b79z7N8LvxgM+{zasm+J zM2uCk5hRV+FR#I??0O1P`;;qP8IO!D{>VFxJ<##%@*9=e<);1mwY>3QSz!Rj<$`w& zoc>x~tC2gdy-&mJtzih(y(66Is0w!rWQMe=BfEk)z|I;ktd{ZldLO#enUvT;9FMNW zP{Dljd(^YFmTzGAd_OGA3C@$kPDfS~8)eH5UhN|8FA+|9tsS+QwZAkG6Uw^`e8>ui z#R+5k1HTO%9-bs_?A$MYymC(pp5jwu0FDKPs2l+ywWi7jj|f`xi>r0CU_P!A>MUKj zAsVl9!SUO03M#55?wN6{5TG)*>iPNX2_lgtU`3g8!&iW;Y4!X#4squJP41*6FUKtI#+ zPUkOs^9;Zb_QexKoVZZ*fKX~PlS5=dp%JKu$2+uQ*wX+`A7560Tiq*Eos{8kwIFfBx{{$A6FlHCb*; zD$XHbeU?%$B)sXDbLG30yH+Fh%osv!<+`z`_5J}lh-bHU$`&esectbi<>{7X#`9Bg z53yfyHrinriK-39(XQd{^0A4%NkxC0B^3gSYy-Qz$_XUf6rH@G1AWnRQXpD`$D?*J zrVh!d48};aC!lT29%`lnl<;p-`_-KC@< zo^pn3+7Mnrk2VwV?jbkz!yS#O^+o}{K$uSXvxje6(wXPI|B%4Xat@^CASoy=Dxl`@ zoCr{vNwY}+Y)sB!@#zFj0@JANv~Pks^7dgfWX90BPSWVbCmB~&nWYphndUwJ#*(xj zN6L5%ZSEtJ6FCPB7x3$+g^r)I#JFdnyz=85W-!#P@U5_kGanUJ=6o45$LW9xq)$PD z|L8?|60qVHm&=>4BkaqdstrI)FY)Kt(od`d?fo|Z5G_wZoBy@!i=4{SW?SYNFIMT+ z8e3Db4i zh)3>0HsWt|Tq*!iqhe8o5Cr!Dv-TFe1u zMLX}#jd=8Wmb%FtN)Pyx>g^P$>Sus%?<}}i+yZR%p*Rid&WXwoIO6@F=r!;ND2%NL z#utqYuJa5fHDC~?L<0-NBv_nWVv{6zk3PP zhLCnnho7)E2_fO@iIUnfAfwsFKu=j83m7pW@&#@~R{+gsc83QK(w}dBkJ^ z@D}6I>C77sl!r77e>>v{;0VNNN^-b4>_D>VPMMvS3@XUIz;pYL{-9ZTCTb0mQi5M~W z9vs}v@0z9)1Eq%p%JoI)G6ntO3@dXz02!9SG%1#W2~k9qc8o+*2p(95Ojhgsy`uhc z15)~#*a$4byw>$IJG>P0PXsCMn&AAqUE?W~XhYnW@nYnP`oqM0=+Q4BTD1doaJ6Jw z7*NG91gsj2?xb{q_Oyt+aCQ~0TsusC>AmByN6rznT5P{p`&)At(tjTWO^Y*(UV!`7veDxW@6C(LOT{88Q0SBp;ef{>Fh&2zOP4%<>=Lvgq*zOg zvIB4IaK1+J$AY2}Z@EaM;kdgbGjQBI0y@q6h3eGbBp!vDOnZfzdi`=DPSdV*Lyk15 zP1)OYV-)pWQ&1bEm|K@LX}(^mJ7~Lnz_zVkTy115ovd%Pu7^CerxE85-<1$YP%Y+v z7f98gOdqb-6*Qm@9KORKiXmK>^(ITz7r~XUqJgKVgITbry4~z?H3fbzu5SG4pqr9N zB>Ei#hEvmmNLdjFm66v!mz-_S9f5j>`tZX^*p^1uIMn!erGx}a%P%pOmLAZDswI*) zOh3xowLyZX)auot;8pCF0(R>GWf*EB)77=|Z)D_8Zym+jX!i{eH#v6lCAhH|q$>xnKrw{yl42Ll7 z#n|guep4eDUa>F($NiIRlHB`t+eUx`wr?zIae;WWi+Q4x$EVgUYaFW+xiqSqoUc_L zoyQ*xlJA*WpKK3-;3=+~+BEQR4JS5_dg8#p)788S1Cz-K3_7Mcca@Y$nOe&}AKkH* z@~RgsVt$NtMi2p*pKV-TU>hgp3i9d;kx2nvU(v0_>Rs#G`jWagPEp^i7HPv8yaevT z!Z=-3CaE<%4HXnz(WzmJVS@7`zeJWKD-ALbR7Gxg9O>uU1!ha)N0 z_J{=STSh`}@4L6ERX{lvYug{Bak>)ll66WS6sjNCOEd#&6-%2K{Hs}H0$gafVyWLO zh#FtS1##Sa%@{_15M5x{r@K04OkDW^_uvj!LTGlvb8^V!r8{lptb^E<7e>KkL)6VB^M8j-QlN<-G8N}YP z>kh<#kuD@zvuTHG*ze;Z>f}z z6+c;H$I_*pI{G*Y2Nac`GWsRrRd_EMx%tg1N30^!GCyBZOEK-V=x_(l)!FKe%1({D zZng1`xXCkEPjxMtG7QSap-EAaOi7@Mlgk-he;NSg<|J*J!&B~+XgGv%p{*B-bXrBm z^!-cXLq17Le`<`z7I)Ibd`L2N+veRgnPEhavQ(J1%xV#&E+G1jLiAvn`2*XOeIYuT`rW^$gDXZuK)B+Gz3W|q`_fwS%jAmAkVZvAwpb=hV}3owtqBF?9(Sfi`6HBV zw(;X=!(=4-K2RZn_1|cUxcOz3es4y=7(*dXJ=~5htKf^I-XwK4GL`X}{|~WNwy_~THW2u|p=<^GG*W4| zFWJ{m{a|gqeKJ0?dRt?|;gEi~ybyc6jc{IULn6F;R5XAcd=70TGRYOjXUNr}ohp5# zZfi1hzxd0o)WDSj&=Er3eggNjXfnq#3HkOl#w2=+vja$NZ9J8Zt<0Kl);p-Gu^hkzR+cmJ!n52{G~x?k9bQB}H$+ANXPFW2W!X%K?f@ z&kYP@q*f@_9N~VJx1g<@BhhwC4d^Q_sIwFn>bvwJqB=C^k0E;0@D44AKje>NoQJf{ zuOjCA9D1cEO$L}6+YB$j^`_!m(s=ZO8?M%nH^ggLIy^dpbG4c*6#4@&T5F~)(VFxS zLchc5VAPta%&W(A5s_oK!0D}eejQh_ZkH$rsk)M|;gPbz^t&YBwH#3du?@J)pzYI! zk}N4~QFv0?Lw0~f9R)JG#8NaCOiPbzq#}+`>>=#+an+o¥s01Q(4i(J2Y+RqeI~ z^hx^g?t-%<1D8n70WN^+7I)T-GD=BMTYK)AmYq-DMwT=zu0(e>-YnuO1C1pjZs04hM0|GDzbtx6;K_1b zXRGdWb)HWc-L^6%U~&yVUhml(!Srp@cLKY0=11mH^u=uAU(1NT?i+qMsu5@$q3OkA z+M|l`8LP=&d;q$fp^XqZNH+Hq*Hi^Jdm`SB?ZdHZOYaBmrdNbw`4MM)ahNTG*I_>Tc6!ySRDQ(!sj0Yh|56~4V-1ewFJLxSNNFsT7kx@pK}X{dn>K}26~HBsf|@d zj%(AESSxsM8hmj51~i;0rz@>y`g$JfR<=l5_J~Nf;^S$LJOm$6Gl6bL8dfL0U>jwX zs4Gq&`p48l82Fw}PDQ0mV$#its9tZmjserDx|0Hx8SR6p!R)Ap`a)o<bktl zEpS5|MMP3u4a1j}ySps`yM@L5KUG>4)p4QWta{9McRvjCs�K3~+S`+U6Edo1mZ5 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 Gbp8*}=9LHl diff --git a/docs/manual.typ b/docs/manual.typ index ceafc22..5d355db 100644 --- a/docs/manual.typ +++ b/docs/manual.typ @@ -21,7 +21,7 @@ inset: 8pt, radius: 5pt, width: 100%, - text(font:"Consolas", it, size: 8.5pt,), + text(it, size: 8.5pt,), ) // -------------------------------------------- @@ -68,7 +68,7 @@ This documentation is generated using the Tidy package, and therefore, while every effort is made to ensure it is representative of the API, there may still be errors due to oversight. If you come across such an error, please make an issue (or pull request) on the GitHub repository. == Terminology -As this package introduces several type-like objects, the Tidy style has had these added for clarity. At present, these are #style.show-type("schema") (to represent type-validating objects), #style.show-type("context") (to represent the current state of the parsing heuristic), and #style.show-type("scope") (an array of strings that represents the parent object of values being parsed). #style.show-type("internal") represents arguments that, while settable by the end-user, should be reserved for internal or advanced usage. +As this package introduces several type-like objects, the Tidy style has had these added for clarity. At present, these are #style.show-type("schema") (to represent type-validating objects), #style.show-type("ctx") (to represent the current state of the parsing heuristic), and #style.show-type("scope") (an array of strings that represents the parent object of values being parsed). #style.show-type("internal") represents arguments that, while settable by the end-user, should be reserved for internal or advanced usage. Generally, users of this package will only need to be aware of the #style.show-type("schema") type. @@ -110,7 +110,7 @@ Generally, users of this package will only need to be aware of the #style.show-t let modules = ( "../src/lib.typ", - "../src/context.typ", + "../src/ctx.typ", ) for module in modules { @@ -224,7 +224,7 @@ For the most advanced types, creating a schema generator from scratch may be the name: "my-type", // Member sometimes used by other classes when they report a failed validation // Helper function, generally called by validate() - assert-type: (self, it, scope:(), ctx: context(), types: ()) => { + assert-type: (self, it, scope:(), ctx: ctx(), types: ()) => { if ( type(it) not in types){ (self.fail-validation)(self, it, scope: scope, ctx: ctx, message: "Expected " + joinWithAnd(types, ", ", " or ") + ". Got " + type(it)) @@ -247,4 +247,4 @@ For the most advanced types, creating a schema generator from scratch may be the } ) } -``` \ No newline at end of file +``` diff --git a/docs/style.typ b/docs/style.typ index 1994570..a2bcd85 100644 --- a/docs/style.typ +++ b/docs/style.typ @@ -31,7 +31,7 @@ // custom types "schema": rgb("#bda8ed"), - "context": rgb("#afeda8"), + "ctx": rgb("#afeda8"), "internal": rgb("#ff8c8c") ) @@ -58,7 +58,7 @@ #let show-parameter-list(fn, display-type-function) = { pad(x: 10pt, { - set text(font: "Cascadia Mono", size: 0.85em, weight: 340) + set text(size: 0.85em, weight: 340) text(fn.name, fill: fn-color) "(" let inline-args = fn.args.len() < 2 diff --git a/docs/template.typ b/docs/template.typ index b17edf0..471623c 100644 --- a/docs/template.typ +++ b/docs/template.typ @@ -67,4 +67,4 @@ //v(10em) body -} \ No newline at end of file +} diff --git a/src/base-type.typ b/src/base-type.typ index 1668b47..8c10c69 100644 --- a/src/base-type.typ +++ b/src/base-type.typ @@ -1,4 +1,4 @@ -#import "context.typ": context +#import "ctx.typ": ctx /// Asserts the presence of the magic number on the given object. /// @@ -54,7 +54,7 @@ return ( valkyrie-type: true, - assert-type: (self, it, scope:(), ctx: context(), types: ()) => { + assert-type: (self, it, scope:(), ctx: ctx(), types: ()) => { if ( type(it) not in types){ (self.fail-validation)(self, it, scope: scope, ctx: ctx, message: "Expected " + types.join(", ", last: " or ") + ". Got " + type(it)) @@ -63,9 +63,9 @@ return true }, - validate: (self, it, scope: (), ctx: context()) => it, + validate: (self, it, scope: (), ctx: ctx()) => it, - fail-validation: (self, it, scope: (), ctx: context(), message: "") => { + fail-validation: (self, it, scope: (), ctx: ctx(), message: "") => { let display = "Schema validation failed on " + scope.join(".") if ( message.len() > 0){ display += ": " + message} ctx.outcome = display diff --git a/src/context.typ b/src/context.typ deleted file mode 100644 index 878d411..0000000 --- a/src/context.typ +++ /dev/null @@ -1,14 +0,0 @@ - -#let context-proto = ( - strict: false, - soft-error: false, - coerce: false, // TO DO -) - -/// Appends setting to context. Used for setting the context of child parses. -/// -/// - ctx (context, none): Current context (if present, or undefined if not), to which contextual flags passed in variadic arguments are appended. -/// - ..args (arguments): Variadic contextual flags to set. While it accepts positional arguments, only named contextual flags are used throughout the codebase. -#let context(ctx: (:), ..args) = { - return (:..context-proto, ..ctx, ..args.named()) -} \ No newline at end of file diff --git a/src/ctx.typ b/src/ctx.typ new file mode 100644 index 0000000..0eb21e1 --- /dev/null +++ b/src/ctx.typ @@ -0,0 +1,14 @@ + +#let ctx-proto = ( + strict: false, + soft-error: false, + coerce: false, // TO DO +) + +/// Appends setting to ctx. Used for setting the ctx of child parses. +/// +/// - ctx (ctx, none): Current ctx (if present, or undefined if not), to which ctxual flags passed in variadic arguments are appended. +/// - ..args (arguments): Variadic ctxual flags to set. While it accepts positional arguments, only named ctxual flags are used throughout the codebase. +#let ctx(ctx: (:), ..args) = { + return (:..ctx-proto, ..ctx, ..args.named()) +} diff --git a/src/lib.typ b/src/lib.typ index b1a3f48..e8b5fc1 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -1,17 +1,17 @@ #import "types.typ": * -#import "context.typ": context +#import "ctx.typ": ctx #import "base-type.typ" as advanced /// This is the main function for validating an object against a schema. *WILL* return the given object after validation if successful, or none and *MAY* throw a failed assertion error. /// /// - object (any): Object to validate against provided schema. Object *SHOULD* statisfy the schema requirements. An error *MAY* be produced if not. /// - schema (schema): Schema against which `object` is validated. *MUST* be a valid valkyrie schema type. -/// - ctx (context): Context passed to schema validator function, containing flags that *MAY* alter behaviour. +/// - ctx (ctx): ctx passed to schema validator function, containing flags that *MAY* alter behaviour. /// - scope (scope): An array of strings used to generate the string representing the location of a failed requirement within `object`. *MUST* be an array of strings of length greater than or equal to `1`. /// -> any, none #let parse( object, schema, - ctx: context(), + ctx: ctx(), scope: ("argument",), ) = { diff --git a/src/types/any.typ b/src/types/any.typ index f941e4d..95a1146 100644 --- a/src/types/any.typ +++ b/src/types/any.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../context.typ": context +#import "../ctx.typ": ctx /// Validation schema representing all types. *SHOULD* never produce an error. /// @@ -28,7 +28,7 @@ custom-error: custom-error, transform: transform, - validate: (self, it, ctx: context(), scope: ()) => { + validate: (self, it, ctx: ctx(), scope: ()) => { // Default value if (it == none){ it = self.default } @@ -45,4 +45,4 @@ ) -} \ No newline at end of file +} diff --git a/src/types/array.typ b/src/types/array.typ index 9786c2e..862c9c3 100644 --- a/src/types/array.typ +++ b/src/types/array.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../context.typ": context +#import "../ctx.typ": ctx #import "any.typ": any /// Valkyrie schema generator for array types. Array entries are validated by a single schema. For arrays with positional requirements, see @@tuple. @@ -66,7 +66,7 @@ custom-error: custom-error, transform: transform, - validate: (self, it, ctx: context(), scope: ()) => { + validate: (self, it, ctx: ctx(), scope: ()) => { // Default value if (it == none){ it = self.default } diff --git a/src/types/dictionary.typ b/src/types/dictionary.typ index 77a1478..22f30c8 100644 --- a/src/types/dictionary.typ +++ b/src/types/dictionary.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type-dictionary -#import "../context.typ": context +#import "../ctx.typ": ctx /// Valkyrie schema generator for dictionary types /// @@ -18,7 +18,7 @@ return (:..base-type(), name: "dictionary", dictionary-schema: args, - validate: (self, dict, ctx: context(), scope: ("arguments",) ) => { + validate: (self, dict, ctx: ctx(), scope: ("arguments",) ) => { // assert type diff --git a/src/types/logical.typ b/src/types/logical.typ index 1134fa6..3bd889b 100644 --- a/src/types/logical.typ +++ b/src/types/logical.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../context.typ": context +#import "../ctx.typ": ctx /// Valkyrie schema generator for objects that can be any of multiple types. /// @@ -18,9 +18,9 @@ return (:..base-type(), name: name, - validate: (self, it, ctx: context(), scope: ()) => { + validate: (self, it, ctx: ctx(), scope: ()) => { for option in options { - let ret = (option.validate)(option, it, ctx: context(ctx, soft-error: true), scope: scope) + let ret = (option.validate)(option, it, ctx: ctx(ctx, soft-error: true), scope: scope) if ( ret != none ){ return ret } } // Somehow handle error? Not sure how to retrieve from ctx diff --git a/src/types/number.typ b/src/types/number.typ index befdbd6..16b98f4 100644 --- a/src/types/number.typ +++ b/src/types/number.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../context.typ": context +#import "../ctx.typ": ctx /// Valkyrie schema generator for integer- and floating-point numbers /// @@ -43,7 +43,7 @@ transform: transform, types: types, - validate: (self, it, ctx: context(), scope: ()) => { + validate: (self, it, ctx: ctx(), scope: ()) => { // TO DO: Coercion diff --git a/src/types/string.typ b/src/types/string.typ index d3c7746..fc6b499 100644 --- a/src/types/string.typ +++ b/src/types/string.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../context.typ": context +#import "../ctx.typ": ctx /// Valkyrie schema generator for integer- and floating-point numbers /// @@ -69,7 +69,7 @@ pattern-error: pattern-error, transform: transform, - validate: (self, it, ctx: context(), scope: ()) => { + validate: (self, it, ctx: ctx(), scope: ()) => { // Default value if (it == none){ it = self.default } diff --git a/src/types/tuple.typ b/src/types/tuple.typ index 6b27850..34a692b 100644 --- a/src/types/tuple.typ +++ b/src/types/tuple.typ @@ -1,5 +1,5 @@ #import "../base-type.typ": base-type, assert-base-type-array -#import "../context.typ": context +#import "../ctx.typ": ctx /// Valkyrie schema generator for an array type with positional type reqruiements. If all entries have the same type, see @@array. /// - name (internal): @@ -19,7 +19,7 @@ return (:..base-type(), name: name, tuple-schema: args, - validate: (self, tuple, ctx: context(), scope: () ) => { + validate: (self, tuple, ctx: ctx(), scope: () ) => { // assert type if not (self.assert-type)(self, tuple, scope: scope, ctx: ctx, types: (type(()),)){ diff --git a/typst.toml b/typst.toml index ede1849..dba4dba 100644 --- a/typst.toml +++ b/typst.toml @@ -1,10 +1,10 @@ [package] name = "valkyrie" -version = "0.1.0" authors = ["James R Swift"] +version = "0.1.1" entrypoint = "src/lib.typ" exclude = ["./README.md"] keywords = ["type", "validation", "zod"] license = "GPL-3.0-only" repository = "https://github.com/JamesxX/valkyrie" -description = "Type validation" \ No newline at end of file +description = "Type validation" From 1d57957e181817fbfc508fda0ad276323e83bb19 Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 09:13:45 +0200 Subject: [PATCH 02/11] Add attribution --- docs/manual.pdf | Bin 159595 -> 160145 bytes docs/manual.typ | 2 +- typst.toml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.pdf b/docs/manual.pdf index 01578f1cc9d11427c23aadcc4b675d6ea3f63ce3..787ffc4ff96f5e8d9fb5b01a9f9a1ee06ec60349 100644 GIT binary patch delta 21947 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 delta 21317 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 diff --git a/docs/manual.typ b/docs/manual.typ index 5d355db..47ef829 100644 --- a/docs/manual.typ +++ b/docs/manual.typ @@ -5,7 +5,7 @@ #show: project.with( title: "Valkyrie", subtitle: "Type safe type safety in typst", - authors: ("James R. Swift",), + authors: ("James R. Swift", "tinger "), url: "https://github.com/JamesxX/valkyrie", abstract: [This package implements type validation, and is targetted mainly at package and template developers. The desired outcome is that it becomes easier for the programmer to quickly put a package together without spending a long time on type safety, but also to make the usage of those packages by end-users less painful by generating useful error messages.] ); diff --git a/typst.toml b/typst.toml index dba4dba..78022bc 100644 --- a/typst.toml +++ b/typst.toml @@ -1,8 +1,8 @@ [package] name = "valkyrie" -authors = ["James R Swift"] version = "0.1.1" entrypoint = "src/lib.typ" +authors = ["James R Swift", "tinger "] exclude = ["./README.md"] keywords = ["type", "validation", "zod"] license = "GPL-3.0-only" From af4bd363a64f04982897e7ea4be9aa3896496d7d Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 09:25:29 +0200 Subject: [PATCH 03/11] Cleanup - Moved tests to typst-test suite - Removed failure tests for now - Cleaned up whitespace in various files - Renamed ctx constructor to z-ctx --- src/base-type.typ | 40 ++++----- src/ctx.typ | 15 ++-- src/lib.typ | 34 ++++--- src/types/any.typ | 27 +++--- src/types/array.typ | 98 ++++++++++++-------- src/types/dictionary.typ | 23 +++-- src/types/logical.typ | 30 ++++--- src/types/number.typ | 75 ++++++++++------ src/types/string.typ | 180 +++++++++++++++++++++++-------------- src/types/tuple.typ | 30 ++++--- tests/array.typ | 10 --- tests/array/out/1.png | Bin 0 -> 538 bytes tests/array/ref/1.png | Bin 0 -> 75 bytes tests/array/test.typ | 9 ++ tests/dictionary.typ | 20 ----- tests/dictionary/out/1.png | Bin 0 -> 538 bytes tests/dictionary/ref/1.png | Bin 0 -> 75 bytes tests/dictionary/test.typ | 18 ++++ tests/logical.typ | 10 --- tests/logical/out/1.png | Bin 0 -> 538 bytes tests/logical/ref/1.png | Bin 0 -> 75 bytes tests/logical/test.typ | 7 ++ tests/number.typ | 5 -- tests/number/out/1.png | Bin 0 -> 538 bytes tests/number/ref/1.png | Bin 0 -> 75 bytes tests/number/test.typ | 6 ++ tests/string.typ | 17 ---- tests/string/out/1.png | Bin 0 -> 538 bytes tests/string/ref/1.png | Bin 0 -> 75 bytes tests/string/test.typ | 9 ++ tests/tuple.typ | 12 --- tests/tuple/out/1.png | Bin 0 -> 538 bytes tests/tuple/ref/1.png | Bin 0 -> 75 bytes tests/tuple/test.typ | 12 +++ 34 files changed, 385 insertions(+), 302 deletions(-) delete mode 100644 tests/array.typ create mode 100644 tests/array/out/1.png create mode 100644 tests/array/ref/1.png create mode 100644 tests/array/test.typ delete mode 100644 tests/dictionary.typ create mode 100644 tests/dictionary/out/1.png create mode 100644 tests/dictionary/ref/1.png create mode 100644 tests/dictionary/test.typ delete mode 100644 tests/logical.typ create mode 100644 tests/logical/out/1.png create mode 100644 tests/logical/ref/1.png create mode 100644 tests/logical/test.typ delete mode 100644 tests/number.typ create mode 100644 tests/number/out/1.png create mode 100644 tests/number/ref/1.png create mode 100644 tests/number/test.typ delete mode 100644 tests/string.typ create mode 100644 tests/string/out/1.png create mode 100644 tests/string/ref/1.png create mode 100644 tests/string/test.typ delete mode 100644 tests/tuple.typ create mode 100644 tests/tuple/out/1.png create mode 100644 tests/tuple/ref/1.png create mode 100644 tests/tuple/test.typ diff --git a/src/base-type.typ b/src/base-type.typ index 8c10c69..ce7f848 100644 --- a/src/base-type.typ +++ b/src/base-type.typ @@ -1,4 +1,4 @@ -#import "ctx.typ": ctx +#import "ctx.typ": z-ctx /// Asserts the presence of the magic number on the given object. /// @@ -17,8 +17,8 @@ /// - scope (scope): Array of strings containing information for error generation. /// -> none #let assert-base-type-array(arg, scope: ("arguments",)) = { - for (name, value) in arg.enumerate(){ - assert-base-type(value, scope: (..scope, str(name))) + for (name, value) in arg.enumerate() { + assert-base-type(value, scope: (..scope, str(name))) } } @@ -28,8 +28,8 @@ /// - scope (scope): Array of strings containing information for error generation. /// -> none #let assert-base-type-dictionary(arg, scope: ("arguments",)) = { - for (name, value) in arg{ - assert-base-type(value, scope: (..scope, name)) + for (name, value) in arg { + assert-base-type(value, scope: (..scope, name)) } } @@ -40,12 +40,12 @@ /// - scope (scope): Array of strings containing information for error generation. /// -> none #let assert-base-type-arguments(arg, scope: ("arguments",)) = { - for (name, value) in arg.named(){ - assert-base-type(value, scope: (..scope, name)) + for (name, value) in arg.named() { + assert-base-type(value, scope: (..scope, name)) } - - for (pos, value) in arg.pos().enumerate(){ - assert-base-type(value, scope: (..scope, "[" + pos + "]")) + + for (pos, value) in arg.pos().enumerate() { + assert-base-type(value, scope: (..scope, "[" + pos + "]")) } } @@ -53,25 +53,25 @@ #let base-type() = { return ( valkyrie-type: true, - - assert-type: (self, it, scope:(), ctx: ctx(), types: ()) => { - if ( type(it) not in types){ + + assert-type: (self, it, scope:(), ctx: z-ctx(), types: ()) => { + if type(it) not in types { (self.fail-validation)(self, it, scope: scope, ctx: ctx, message: "Expected " + types.join(", ", last: " or ") + ". Got " + type(it)) return false } return true }, - - validate: (self, it, scope: (), ctx: ctx()) => it, - - fail-validation: (self, it, scope: (), ctx: ctx(), message: "") => { + + validate: (self, it, scope: (), ctx: z-ctx()) => it, + + fail-validation: (self, it, scope: (), ctx: z-ctx(), message: "") => { let display = "Schema validation failed on " + scope.join(".") - if ( message.len() > 0){ display += ": " + message} + if message.len() > 0 { display += ": " + message} ctx.outcome = display - if ( not ctx.soft-error ) { + if not ctx.soft-error { assert(false, message: display) } } ) -} \ No newline at end of file +} diff --git a/src/ctx.typ b/src/ctx.typ index 0eb21e1..6d5bf58 100644 --- a/src/ctx.typ +++ b/src/ctx.typ @@ -1,14 +1,13 @@ - #let ctx-proto = ( strict: false, soft-error: false, - coerce: false, // TO DO + // TODO(james) + coerce: false, ) -/// Appends setting to ctx. Used for setting the ctx of child parses. +/// Appends options to a context. Used for setting the context of child parses. /// -/// - ctx (ctx, none): Current ctx (if present, or undefined if not), to which ctxual flags passed in variadic arguments are appended. -/// - ..args (arguments): Variadic ctxual flags to set. While it accepts positional arguments, only named ctxual flags are used throughout the codebase. -#let ctx(ctx: (:), ..args) = { - return (:..ctx-proto, ..ctx, ..args.named()) -} +/// - parent (ctx, none): Current context (if present), to which contextual +/// flags passed in variadic arguments are appended. +/// - ..args (arguments): Variadic contextual flags to set. Positionala rguments are discarded. +#let z-ctx(parent: (:), ..args) = ctx-proto + parent + args.named() diff --git a/src/lib.typ b/src/lib.typ index e8b5fc1..cebf0bb 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -1,20 +1,25 @@ #import "types.typ": * -#import "ctx.typ": ctx +#import "ctx.typ": z-ctx #import "base-type.typ" as advanced -/// This is the main function for validating an object against a schema. *WILL* return the given object after validation if successful, or none and *MAY* throw a failed assertion error. +/// This is the main function for validating an object against a schema. *WILL* return the given +/// object after validation if successful, or none and *MAY* throw a failed assertion error. /// -/// - object (any): Object to validate against provided schema. Object *SHOULD* statisfy the schema requirements. An error *MAY* be produced if not. -/// - schema (schema): Schema against which `object` is validated. *MUST* be a valid valkyrie schema type. -/// - ctx (ctx): ctx passed to schema validator function, containing flags that *MAY* alter behaviour. -/// - scope (scope): An array of strings used to generate the string representing the location of a failed requirement within `object`. *MUST* be an array of strings of length greater than or equal to `1`. +/// - object (any): Object to validate against provided schema. Object *SHOULD* statisfy the schema +/// requirements. An error *MAY* be produced if not. +/// - schema (schema): Schema against which `object` is validated. *MUST* be a valid valkyrie schema +/// type. +/// - ctx (ctx): ctx passed to schema validator function, containing flags that *MAY* alter +/// behaviour. +/// - scope (scope): An array of strings used to generate the string representing the location of a +/// failed requirement within `object`. *MUST* be an array of strings of length greater than or +/// equal to `1`. /// -> any, none #let parse( object, schema, - ctx: ctx(), + ctx: z-ctx(), scope: ("argument",), ) = { - // don't expose to external import "base-type.typ": assert-base-type @@ -26,13 +31,16 @@ schema, ctx: ctx, scope: scope, - object) + object, + ) // Require arguments match schema exactly in strict mode - if ( ctx.strict ){ for (argument-name, argument-value) in object { - assert( argument-name in schema, message: "Unexpected argument " + argument-name) - }} + if ctx.strict { + for (argument-name, argument-value) in object { + assert(argument-name in schema, message: "Unexpected argument " + argument-name) + } + } - return object + object } diff --git a/src/types/any.typ b/src/types/any.typ index 95a1146..50c3d42 100644 --- a/src/types/any.typ +++ b/src/types/any.typ @@ -1,11 +1,12 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx /// Validation schema representing all types. *SHOULD* never produce an error. /// /// - name (internal): /// - default (any, none): Default value to validate is none is provided. -/// - custom (function): Function that maps an input to an output. If the function returns `none`, then an error *WILL* be generated using `custom-error`. +/// - custom (function): Function that maps an input to an output. If the function returns `none`, +/// then an error *WILL* be generated using `custom-error`. /// - custom-error (string): Error to return if custom function returns none. /// - transform (function): Function that maps an input to an output, called after validation. /// -> schema @@ -14,35 +15,33 @@ default: none, custom: none, custom-error: auto, - transform: it=>it, + transform: it => it, ) = { + assert(type(custom) in (function, type(none)), message: "Custom must be a function") + assert(type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") + assert(type(transform) == function, + message: "Transform must be a function that maps an input to an output", + ) - assert( type(custom) in (function, type(none)), message: "Custom must be a function") - assert( type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") - assert( type(transform) == function, message: "Transform must be a function that maps an input to an output") - - return (:..base-type(), + base-type() + ( name: name, default: default, custom: custom, custom-error: custom-error, transform: transform, - - validate: (self, it, ctx: ctx(), scope: ()) => { + validate: (self, it, ctx: z-ctx(), scope: ()) => { // Default value if (it == none){ it = self.default } // Custom - if ( self.custom != none ) and ( not (self.custom)(it) ){ + if self.custom != none and not (self.custom)(it) { let message = "Failed on custom check: " + repr(self.custom) if ( self.custom-error != auto ){ message = self.custom-error } return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: message) } - return (self.transform)(it) + (self.transform)(it) } - ) - } diff --git a/src/types/array.typ b/src/types/array.typ index 862c9c3..0e1f451 100644 --- a/src/types/array.typ +++ b/src/types/array.typ @@ -1,18 +1,26 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx #import "any.typ": any -/// Valkyrie schema generator for array types. Array entries are validated by a single schema. For arrays with positional requirements, see @@tuple. +/// Valkyrie schema generator for array types. Array entries are validated by a single schema. For +/// arrays with positional requirements, see @@tuple. /// /// - name (internal): -/// - default (array, none): Default value to set if no value is provided. *MUST* itself pass validation. -/// - min (integer, none): If not none, the minimum array length that satisfies the validation. *MUST* be a positive integer. The program is *ILL-FORMED* if `min` is greater than `max`. -/// - max (integer, none): If not none, the maximum array length that satisfies the validation. *MUST* be a positive integer. The program is *ILL-FORMED* if `max` is less than `min`. -/// - length (integer, auto): If not auto, the exact array length that satisfies validation. *MUST* be a positiive integer. The program *MAY* be *ILL-FORMED* is concurrently set with either `min` or `max`. -/// - custom (function, none): If not none, a function that, if itself returns none, will produce the error set by `custom-error`. +/// - default (array, none): Default value to set if no value is provided. *MUST* itself pass +/// validation. +/// - min (integer, none): If not none, the minimum array length that satisfies the validation. +/// *MUST* be a positive integer. The program is *ILL-FORMED* if `min` is greater than `max`. +/// - max (integer, none): If not none, the maximum array length that satisfies the validation. +/// *MUST* be a positive integer. The program is *ILL-FORMED* if `max` is less than `min`. +/// - length (integer, auto): If not auto, the exact array length that satisfies validation. *MUST* +/// be a positiive integer. The program *MAY* be *ILL-FORMED* is concurrently set with either +/// `min` or `max`. +/// - custom (function, none): If not none, a function that, if itself returns none, will produce +/// the error set by `custom-error`. /// - custom-error (string, none): If set, the error produced upon failure of `custom`. /// - transform (function): a mapping function called after validation. -/// - ..args (schema, none): Variadic positional arguments of length `0` or `1`. *SHOULD* not contain named arguments. If no arguments are given, schema defaults to array of @@any +/// - ..args (schema, none): Variadic positional arguments of length `0` or `1`. *SHOULD* not +/// contain named arguments. If no arguments are given, schema defaults to array of @@any /// -> schema #let array( name: "array", @@ -25,26 +33,26 @@ transform: it=>it, ..args ) = { - // assert default is array + assert(type(min) in (int, type(none)), message: "Minimum length must be an integer") + if min != none { assert(min >= 0, message: "Minimum length must be a positive integer") } - assert( type(min) in (int, type(none)), message: "Minimum length must be an integer") - if ( min != none){ assert( min >= 0, message: "Minimum length must be a positive integer")} - - assert( type(max) in (int, type(none)), message: "Maximum length must be an integer") - if ( max != none){assert( max >= 0, message: "Maximum length must be a positive integer")} + assert(type(max) in (int, type(none)), message: "Maximum length must be an integer") + if max != none { assert(max >= 0, message: "Maximum length must be a positive integer") } - assert( type(length) in (int, type(auto)), message: "Length must be an integer") - if ( length != auto){assert( length >= 0, message: "Maximum length must be a positive integer")} + assert(type(length) in (int, type(auto)), message: "Length must be an integer") + if length != auto { assert(length >= 0, message: "Maximum length must be a positive integer") } - assert( type(custom) in (function, type(none)), message: "Custom must be a function") - assert( type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") - assert( type(transform) == function, message: "Transform must be a function that takes a single string and return a string") + assert(type(custom) in (function, type(none)), message: "Custom must be a function") + assert(type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") + assert(type(transform) == function, + message: "Transform must be a function that takes a single string and return a string", + ) let positional-arguments = args.pos() let valkyrie-array-typ - if ( positional-arguments.len() < 1 ){ + if positional-arguments.len() < 1 { valkyrie-array-typ = any() } else { valkyrie-array-typ = positional-arguments.first() @@ -53,23 +61,19 @@ let name = name + "[" + (valkyrie-array-typ.name) +"]" - return (:..base-type(), + base-type() + ( name: name, default: default, min: min, max: max, length: length, - valkyrie-array-typ: valkyrie-array-typ, - custom: custom, custom-error: custom-error, transform: transform, - - validate: (self, it, ctx: ctx(), scope: ()) => { - + validate: (self, it, ctx: z-ctx(), scope: ()) => { // Default value - if (it == none){ it = self.default } + if it == none { it = self.default } // Array must be an array if not (self.assert-type)(self, it, scope: scope, ctx: ctx, types: (type(()),)){ @@ -78,25 +82,45 @@ // Minimum length if (self.min != none) and (it.len() < self.min) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "Array length less than specified minimum of " + str(self.min)) + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "Array length less than specified minimum of " + str(self.min), + ) } // Minimum length if (self.max != none) and (it.len() > self.max) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "Array length greater than specified maximum of " + str(self.max)) + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "Array length greater than specified maximum of " + str(self.max), + ) } // Exact length if (self.length != auto) and (it.len() != self.length) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "Array length must exactly equal " + str(self.length)) + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "Array length must exactly equal " + str(self.length), + ) } // Check elements for (key, value) in it.enumerate(){ - it.at(key) = (valkyrie-array-typ.validate)(valkyrie-array-typ, value, ctx: ctx, scope: (..scope, str(key))) + it.at(key) = (valkyrie-array-typ.validate)( + valkyrie-array-typ, + value, + ctx: ctx, + scope: (..scope, str(key)), + ) } // Custom @@ -106,9 +130,7 @@ return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: message) } - return (self.transform)(it) + (self.transform)(it) } - ) - -} \ No newline at end of file +} diff --git a/src/types/dictionary.typ b/src/types/dictionary.typ index 22f30c8..bb2d52d 100644 --- a/src/types/dictionary.typ +++ b/src/types/dictionary.typ @@ -1,33 +1,31 @@ #import "../base-type.typ": base-type, assert-base-type-dictionary -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx /// Valkyrie schema generator for dictionary types /// -/// - ..args (schema): Variadic named arguments, the values for which are schema types. *MUST* not contain positional arguments. +/// - ..args (schema): Variadic named arguments, the values for which are schema types. *MUST* not +/// contain positional arguments. /// -> schema #let dictionary( ..args ) = { - // Does not accept positional arguments - assert( args.pos().len() == 0, message: "Dictionary only accepts named arguments") + assert(args.pos().len() == 0, message: "Dictionary only accepts named arguments") args = args.named() assert-base-type-dictionary(args) - return (:..base-type(), + base-type() + ( name: "dictionary", dictionary-schema: args, - validate: (self, dict, ctx: ctx(), scope: ("arguments",) ) => { - - + validate: (self, dict, ctx: z-ctx(), scope: ("arguments",) ) => { // assert type - if not (self.assert-type)(self, dict, scope: scope, ctx: ctx, types: (type((:)),)){ + if not (self.assert-type)(self, dict, scope: scope, ctx: ctx, types: (type((:)),)) { return none } // If strict mode, ensure dictionary exactly matches schema - if ( ctx.strict ) { + if ctx.strict { for (key, value) in self.dictionary-schema { if ( key not in dict ){ (self.fail-validation)(self, dict, ctx: ctx, scope: (..scope, key), message: "Missing expected dictionary entry") @@ -40,8 +38,7 @@ dict.at(key) = (schema.validate)(schema, dict.at(key), ctx: ctx, scope: (..scope, str(key))) } - return dict + dict } ) - -} \ No newline at end of file +} diff --git a/src/types/logical.typ b/src/types/logical.typ index 3bd889b..ada613f 100644 --- a/src/types/logical.typ +++ b/src/types/logical.typ @@ -1,31 +1,35 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx /// Valkyrie schema generator for objects that can be any of multiple types. /// -/// - ..options (schema): Variadic position arguments for possible types. *MUST* have at least `1` positional argument. Schemas *SHOULD* be given in order of "preference". +/// - ..options (schema): Variadic position arguments for possible types. *MUST* have at least `1` +/// positional argument. Schemas *SHOULD* be given in order of "preference". /// -> schema -#let either( ..options ) = { +#let either(..options) = { let options = options.pos() - assert( options.len() > 0 , message: "z.either requires 1 or more arguments.") + assert(options.len() > 0 , message: "z.either requires 1 or more arguments.") for option in options { assert-base-type(option, scope: ("arguments",)) } - let name = "[" + options.map(it=>it.name).join( ", ", last: " or ") + "]" + let name = "[" + options.map(it => it.name).join( ", ", last: " or ") + "]" - return (:..base-type(), + base-type() + ( name: name, - validate: (self, it, ctx: ctx(), scope: ()) => { + validate: (self, it, ctx: z-ctx(), scope: ()) => { for option in options { - let ret = (option.validate)(option, it, ctx: ctx(ctx, soft-error: true), scope: scope) - if ( ret != none ){ return ret } + let ret = (option.validate)(option, it, ctx: z-ctx(ctx, soft-error: true), scope: scope) + if ret != none { return ret } } - // Somehow handle error? Not sure how to retrieve from ctx - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "Type failed to match any of possible options: " + options.map(it=>it.name).join(", ", last: " or ")) + + let message = ("Type failed to match any of possible options: " + + options.map(it => it.name).join(", ", last: " or ")) + + // TODO(james): Somehow handle error? Not sure how to retrieve from ctx + (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: message) } ) -} \ No newline at end of file +} diff --git a/src/types/number.typ b/src/types/number.typ index 16b98f4..0543e5f 100644 --- a/src/types/number.typ +++ b/src/types/number.typ @@ -1,13 +1,17 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx /// Valkyrie schema generator for integer- and floating-point numbers /// /// - name (internal): -/// - default (integer, float, none): Default value to set if none is provided. *MUST* respect all other validation requirements. -/// - min (integer, none): If not none, the minimum value that satisfies the validation. The program is *ILL-FORMED* if `min` is greater than `max`. -/// - max (integer, none): If not none, the maximum value that satisfies the validation. The program is *ILL-FORMED* if `max` is less than `min`. -/// - custom (function, none): If not none, a function that, if itself returns none, will produce the error set by `custom-error`. +/// - default (integer, float, none): Default value to set if none is provided. *MUST* respect all +/// other validation requirements. +/// - min (integer, none): If not none, the minimum value that satisfies the validation. The program +/// is *ILL-FORMED* if `min` is greater than `max`. +/// - max (integer, none): If not none, the maximum value that satisfies the validation. The program +/// is *ILL-FORMED* if `max` is less than `min`. +/// - custom (function, none): If not none, a function that, if itself returns none, will produce +/// the error set by `custom-error`. /// - custom-error (string, none): If set, the error produced upon failure of `custom`. /// - transform (function): a mapping function called after validation. /// - types (internal): @@ -22,18 +26,23 @@ transform: it=>it, types: (float, int), ) = { - // Type safety - assert( type(default) in (..types, type(none)), + assert(type(default) in (..types, type(none)), message: "Default of number must be of type integer, float, or none (possibly narrowed)") - assert( type(min) in (int, float, type(none)), message: "Minimum value must be an integer or float") - assert( type(max) in (int, float, type(none)), message: "Maximum value must be an integer or float") + assert(type(min) in (int, float, type(none)), + message: "Minimum value must be an integer or float", + ) + assert(type(max) in (int, float, type(none)), + message: "Maximum value must be an integer or float", + ) - assert( type(custom) in (function, type(none)), message: "Custom must be a function") - assert( type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") - assert( type(transform) == function, message: "Transform must be a function that takes a single number and return a number") + assert(type(custom) in (function, type(none)), message: "Custom must be a function") + assert(type(custom-error) in (str, type(auto)), message: "Custom-error must be a string") + assert(type(transform) == function, + message: "Transform must be a function that takes a single number and return a number", + ) - return (:..base-type(), + base-type() + ( name: name, default: default, min: min, @@ -42,39 +51,47 @@ custom-error: custom-error, transform: transform, types: types, - - validate: (self, it, ctx: ctx(), scope: ()) => { - - // TO DO: Coercion + validate: (self, it, ctx: z-ctx(), scope: ()) => { + // TODO(james): Coercion // Default value - if ( it == none ){ it = self.default } + if it == none { it = self.default } // Assert type - if not (self.assert-type)(self, it, ctx: ctx, scope: scope, types: types){ + if not (self.assert-type)(self, it, ctx: ctx, scope: scope, types: types) { return none } // Minimum value - if ( self.min != none ) and (it < self.min ){ - return (self.fail-validation)( self, it, ctx: ctx, scope: scope, - message: "Value less than specified minimum of " + str(self.min)) + if self.min != none and it < self.min { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "Value less than specified minimum of " + str(self.min), + ) } // Maximum value - if ( self.max != none ) and (it > self.max ){ - return (self.fail-validation)( self, it, ctx: ctx, scope: scope, - message: "Value greater than specified maximum of " + str(self.max)) + if self.max != none and it > self.max { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "Value greater than specified maximum of " + str(self.max), + ) } // Custom - if ( self.custom != none ) and ( not (self.custom)(it) ){ + if self.custom != none and not (self.custom)(it) { let message = "Failed on custom check: " + repr(self.custom) - if ( self.custom-error != auto ){ message = self.custom-error } + if self.custom-error != auto { message = self.custom-error } return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: message) } - return (self.transform)(it) + (self.transform)(it) } ) } @@ -86,4 +103,4 @@ #let floating-point = number.with( name: "float", types: (float,)) /// Specialization of @@integer() that is only satisfied by positive whole numbers. Parameters of @@number remain available for further requirments. -#let natural = number.with( name: "natural number", types: (int,), min: 0) \ No newline at end of file +#let natural = number.with( name: "natural number", types: (int,), min: 0) diff --git a/src/types/string.typ b/src/types/string.typ index fc6b499..1f56c7e 100644 --- a/src/types/string.typ +++ b/src/types/string.typ @@ -1,17 +1,26 @@ #import "../base-type.typ": base-type, assert-base-type -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx /// Valkyrie schema generator for integer- and floating-point numbers /// /// - name (internal): -/// - default (string): Default value to set if none is provided. *MUST* respect all other validation requirements. -/// - min (integer, none): If not none, the minimum string length that satisfies the validation. *MUST* be a positive integer. The program is *ILL-FORMED* if `min` is greater than `max`. -/// - max (integer, none): If not none, the maximum string length that satisfies the validation. *MUST* be a positive integer. The program is *ILL-FORMED* if `max` is less than `min`. -/// - length (integer, auto): If not auto, the exact string length that satisfies validation. *MUST* be a positiive integer. The program *MAY* be *ILL-FORMED* is concurrently set with either `min` or `max`. -/// - includes (array, string, none): If set, a coerced array of required strings that are required to pass validation. -/// - starts-with (string, regex, none): If set, a string or regex requirement that the string *SHOULD* start with in order to pass validation. -/// - ends-with (string, regex, none): If set, a string or regex requirement that the string *SHOULD* end with in order to pass validation. -/// - pattern (string, regex, none): If set, a string or regex requirment over the entire string that *SHOULD* be matched in order to pass validation. +/// - default (string): Default value to set if none is provided. *MUST* respect all other +/// validation requirements. +/// - min (integer, none): If not none, the minimum string length that satisfies the validation. +/// *MUST* be a positive integer. The program is *ILL-FORMED* if `min` is greater than `max`. +/// - max (integer, none): If not none, the maximum string length that satisfies the validation. +/// *MUST* be a positive integer. The program is *ILL-FORMED* if `max` is less than `min`. +/// - length (integer, auto): If not auto, the exact string length that satisfies validation. +/// *MUST* be a positiive integer. The program *MAY* be *ILL-FORMED* is concurrently set with +/// either `min` or `max`. +/// - includes (array, string, none): If set, a coerced array of required strings that are required +/// to pass validation. +/// - starts-with (string, regex, none): If set, a string or regex requirement that the string +/// *SHOULD* start with in order to pass validation. +/// - ends-with (string, regex, none): If set, a string or regex requirement that the string +/// *SHOULD* end with in order to pass validation. +/// - pattern (string, regex, none): If set, a string or regex requirment over the entire string +/// that *SHOULD* be matched in order to pass validation. /// - pattern-error (string, auto): If set, the error thrown if `pattern` is not satisfied. /// - transform (function): A transformation applied after successful validation. /// -> schema @@ -28,35 +37,45 @@ pattern-error: auto, transform: it=>it, ) = { - // Program is ill-formed if length is set at the same time as min or max // Type safety - assert( type(default) in (str, type(none)), - message: "Default of string must be of type string or none") - - assert( type(min) in (int, type(none)), message: "Minimum length must be an integer") - if ( min != none){ assert( min >= 0, message: "Minimum length must be a positive integer")} - - assert( type(max) in (int, type(none)), message: "Maximum length must be an integer") - if ( max != none){assert( max >= 0, message: "Maximum length must be a positive integer")} - - assert( type(length) in (int, type(auto)), message: "Length must be an integer") - if ( length != auto){assert( length >= 0, message: "Maximum length must be a positive integer")} - - if ( type(includes) == str) { includes = (includes,)} - assert( type(includes) == array, message: "Includes must be an array of string or regex primitives" ) - for each in includes{ - assert( type(each) in (str, regex), message: "Includes must be an array of string or regex primitives" ) + assert(type(default) in (str, type(none)), + message: "Default of string must be of type string or none", + ) + + assert(type(min) in (int, type(none)), message: "Minimum length must be an integer") + if min != none { assert(min >= 0, message: "Minimum length must be a positive integer") } + + assert(type(max) in (int, type(none)), message: "Maximum length must be an integer") + if max != none { assert(max >= 0, message: "Maximum length must be a positive integer") } + + assert(type(length) in (int, type(auto)), message: "Length must be an integer") + if length != auto { assert(length >= 0, message: "Maximum length must be a positive integer") } + + if type(includes) == str { includes = (includes,) } + assert(type(includes) == array, + message: "Includes must be an array of string or regex primitives", + ) + for each in includes { + assert(type(each) in (str, regex), + message: "Includes must be an array of string or regex primitives", + ) } - assert( type(starts-with) in (str, regex, type(none)), message: "Starts-with must be of type string or regex") - assert( type(ends-with) in (str, regex, type(none)), message: "Ends-with must be of type string or regex") - assert( type(pattern) in (regex, type(none)), message: "Pattern must be of type regex") - assert( type(pattern-error) in (str, type(auto)), message: "Pattern-error must be a string") - assert( type(transform) == function, message: "Transform must be a function that takes a single string and return a string") + assert(type(starts-with) in (str, regex, type(none)), + message: "Starts-with must be of type string or regex", + ) + assert(type(ends-with) in (str, regex, type(none)), + message: "Ends-with must be of type string or regex", + ) + assert(type(pattern) in (regex, type(none)), message: "Pattern must be of type regex") + assert(type(pattern-error) in (str, type(auto)), message: "Pattern-error must be a string") + assert(type(transform) == function, + message: "Transform must be a function that takes a single string and return a string", + ) - return (:..base-type(), + base-type() + ( name: name, default: default, min: min, @@ -68,79 +87,104 @@ pattern: pattern, pattern-error: pattern-error, transform: transform, - - validate: (self, it, ctx: ctx(), scope: ()) => { - + validate: (self, it, ctx: z-ctx(), scope: ()) => { // Default value - if (it == none){ it = self.default } + if it == none { it = self.default } // String must be a string - if not (self.assert-type)(self, it, scope: scope, ctx: ctx, types: (str,)){ + if not (self.assert-type)(self, it, scope: scope, ctx: ctx, types: (str,)) { return none } - + // Minimum length - if (self.min != none) and (it.len() < self.min) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "String length less than specified minimum of " + str(self.min)) + if self.min != none and (it.len() < self.min) { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "String length less than specified minimum of " + str(self.min), + ) } // Minimum length - if (self.max != none) and (it.len() > self.max) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "String length greater than specified maximum of " + str(self.max)) + if self.max != none and (it.len() > self.max) { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "String length greater than specified maximum of " + str(self.max), + ) } - + // Exact length - if (self.length != auto) and (it.len() != self.length) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "String length must exactly equal " + str(self.length)) + if self.length != auto and (it.len() != self.length) { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "String length must exactly equal " + str(self.length), + ) } - + // Includes for required-include in self.includes { - if not it.contains(required-include){ - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, - message: "String must include " + str(required-include)) + if not it.contains(required-include) { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "String must include " + str(required-include), + ) } } - + // startswith - if (self.starts-with != none) and not it.starts-with(self.starts-with) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, + if self.starts-with != none and not it.starts-with(self.starts-with) { + return (self.fail-validation)( + self, + it, + ctx: ctx, + scope: scope, + message: "String must start with " + str(self.starts-with)) } - + // ends with - if (self.ends-with != none) and not it.ends-with(self.ends-with) { + if self.ends-with != none and not it.ends-with(self.ends-with) { return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: "String must end with " + str(self.ends-with)) } // regex, possibly extend to custom like other types? - if ( self.pattern != none ) and (it.match(self.pattern) == none){ + if self.pattern != none and (it.match(self.pattern) == none) { let message = "String failed to match following pattern: " + repr(self.pattern) - if ( self.pattern-error != auto ){ message = self.pattern-error } + if self.pattern-error != auto { message = self.pattern-error } return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: message) } - - return (self.transform)(it) + + (self.transform)(it) } ) } -/// A specialization of string that is satisfied only by email addresses. *Note*: The testing is not rigourous to save on complexity. +/// A specialization of string that is satisfied only by email addresses. *Note*: The testing is not +/// rigourous to save on complexity. #let email = string.with( name: "email", pattern: regex("^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{2,3}){1,2}$"), - pattern-error: "String must be an email address" + pattern-error: "String must be an email address", ) -// TO DO: url -// TO DO: emoji -// TO DO: uuid +// TODO(james): url +// TODO(james): emoji +// TODO(james): uuid -/// A specialization of string that is satisfied only by valid IP addresses. *Note*: The testing *IS* strict. +/// A specialization of string that is satisfied only by valid IP addresses. *Note*: The testing +/// *IS* strict. #let ip = string.with( name: "ip", pattern: regex("^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"), @@ -150,4 +194,4 @@ // Transformations: #let transform-trim = string.with(transform: str.trim) #let transform-lowercase = string.with(transform: lower) -#let transform-uppercase = string.with(transform: upper) \ No newline at end of file +#let transform-uppercase = string.with(transform: upper) diff --git a/src/types/tuple.typ b/src/types/tuple.typ index 34a692b..8e43681 100644 --- a/src/types/tuple.typ +++ b/src/types/tuple.typ @@ -1,37 +1,43 @@ #import "../base-type.typ": base-type, assert-base-type-array -#import "../ctx.typ": ctx +#import "../ctx.typ": z-ctx -/// Valkyrie schema generator for an array type with positional type reqruiements. If all entries have the same type, see @@array. +/// Valkyrie schema generator for an array type with positional type reqruiements. If all entries +/// have the same type, see @@array. +/// /// - name (internal): -/// - ..args (schema): Type requirments. Position of argument *MUST* match position of entry in tuple being validated. *SHOULD* not contain named arguments. +/// - ..args (schema): Type requirments. Position of argument *MUST* match position of entry in +/// tuple being validated. *SHOULD* not contain named arguments. /// -> schema #let tuple( name: "tuple", ..args ) = { - // Does not accept named arguments - assert( args.named().len() == 0, message: "Dictionary only accepts named arguments") + assert(args.named().len() == 0, message: "Dictionary only accepts named arguments") args = args.pos() assert-base-type-array(args) - return (:..base-type(), + base-type() + ( name: name, tuple-schema: args, - validate: (self, tuple, ctx: ctx(), scope: () ) => { - + validate: (self, tuple, ctx: z-ctx(), scope: ()) => { // assert type - if not (self.assert-type)(self, tuple, scope: scope, ctx: ctx, types: (type(()),)){ + if not (self.assert-type)(self, tuple, scope: scope, ctx: ctx, types: (type(()),)) { return none } // Check elements - for (key, schema) in self.tuple-schema.enumerate(){ - tuple.at(key) = (schema.validate)(schema, tuple.at(key), ctx: ctx, scope: (..scope, str(key))) + for (key, schema) in self.tuple-schema.enumerate() { + tuple.at(key) = (schema.validate)( + schema, + tuple.at(key), + ctx: ctx, + scope: (..scope, str(key)) + ) } - return tuple + tuple } ) } diff --git a/tests/array.typ b/tests/array.typ deleted file mode 100644 index dd5c628..0000000 --- a/tests/array.typ +++ /dev/null @@ -1,10 +0,0 @@ -#import "/src/lib.typ" as z -#set page(height: auto, paper: "a6") - -= Array Tests - -#z.parse( ("hello@world.ac.uk", "not an email"), z.array()) - -#z.parse( ("hello@world.ac.uk", "not an email"), z.array(z.email(), min: 1)) - -// #z.parse( (), z.array(z.string(), default: (0,))) \ No newline at end of file diff --git a/tests/array/out/1.png b/tests/array/out/1.png new file mode 100644 index 0000000000000000000000000000000000000000..dfaa8c42168bcc94207bf9ac90962f431498d15d GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ*1|)kVnp+td7$17NIEGX(zJ0(rLB(^DilaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^Frm Date: Fri, 26 Apr 2024 10:21:10 +0200 Subject: [PATCH 04/11] Added CI workflow for tests --- .github/workflows/tests.yml | 44 ++++++++++++++++++++++++++++++++++++ Justfile | 23 +++++++++++++++++++ docs/manual.pdf | Bin 160145 -> 160067 bytes 3 files changed, 67 insertions(+) create mode 100644 .github/workflows/tests.yml create mode 100644 Justfile diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..3ff4679 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,44 @@ +name: Tests +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Probe runner package cache + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: imagemagick cargo + version: 1.0 + + - name: Install oxipng from crates.io + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: oxipng + + - name: Install just from crates.io + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: just + + - name: Install typst-test from github + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: typst-test + git: https://github.com/tingerrr/typst-test.git + tag: ci-semi-stable + + - name: Setup typst + uses: yusancky/setup-typst@v2 + with: + version: 'v0.11.0' + + - name: Run test suite + run: just ci diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..7e5eaf3 --- /dev/null +++ b/Justfile @@ -0,0 +1,23 @@ +root := justfile_directory() + +export TYPST_ROOT := root +# export TYPST_FONT_PATHS := root / 'assets' / 'fonts' + +[private] +default: + @just --list --unsorted + +# generate manual +doc: + typst compile docs/manual.typ docs/manual.pdf + +# run test suite +test *args: + typst-test run {{ args }} + +# update test cases +update *args: + typst-test run {{ args }} + +# run ci suite +ci: test doc diff --git a/docs/manual.pdf b/docs/manual.pdf index 787ffc4ff96f5e8d9fb5b01a9f9a1ee06ec60349..28f2ed703d3764877a8cfaba4df722c09c35e48a 100644 GIT binary patch delta 11394 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 R2Ei~}Jt#3Ruj1_+{{f~gFD(E7 delta 11494 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 UIyjO;5lA=`MlL9*q Date: Fri, 26 Apr 2024 10:27:29 +0200 Subject: [PATCH 05/11] Add missing ignore files to tests --- tests/.gitignore | 3 +++ tests/.ignore | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 tests/.gitignore create mode 100644 tests/.ignore diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..f3c95fb --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,3 @@ +# added by typst-test +**/out/ +**/diff/ diff --git a/tests/.ignore b/tests/.ignore new file mode 100644 index 0000000..bebbf3d --- /dev/null +++ b/tests/.ignore @@ -0,0 +1,4 @@ +# added by typst-test +**.png +**.svg +**.pdf From bd6f5179dec889aebc63207c7fe60f5e85ad6ae4 Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 10:30:45 +0200 Subject: [PATCH 06/11] Fix manual --- docs/manual.pdf | Bin 160067 -> 159530 bytes docs/manual.typ | 206 ++++++++++++++++++++++++---------------------- docs/template.typ | 3 + 3 files changed, 110 insertions(+), 99 deletions(-) diff --git a/docs/manual.pdf b/docs/manual.pdf index 28f2ed703d3764877a8cfaba4df722c09c35e48a..bfaf87a056af618489c49d9cfe5b9d9314ecd857 100644 GIT binary patch delta 11535 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 B&)@(6 delta 12103 zcmZu%by(DEx22`KK|s2MNoGd68>FPAK|rND1{DcGx?8$iI;5prkZw?rlvccRzBu<> zxbxRMd*0u>*Is+=cxI+}39oAnFQ69v9WMq9n5eOa&WTiZSdb%c8?9LB^r;MJSUkA* z1+Y@e#HJsz6cZaxtp9LBbQWD`fa8ytNi6s`OX`LrB!yificm3n(Rf6ez5hiB~uem9#1%f-P3bY&S#{u!;J zGA{Cmmsd!qv$LJhCz+Yn%TERG6)OVN*t>9>nrtunl-@7RdO}l)}D4b z=y6l6cd`4vJ?(1H_n@swEcw3CsDP#bHrw1IVgU}031|E32FoM`@vtCA#l|R5^|Lcx zTf894r1{;?lhaR6#I+_`*nv z-KG#)PVcxBVyD-9t~O7Qc3;VQ!xMtOza!5ps?t;tQTosj8}7h67a3+!;c`Q*UAQ&k ziq(qjK;?YQ5B`0Nw-!w^qL!rX_n%j*yAMpuJgk0w%CMo(BqQ+`I?99PtSJEu6B zwV-STAXsEO1mYYC!cJCwK3Lln->lt3os4@nF&CY3C`0GCQ-jgj4a?05%~a zWAFRr?9tHOA;n39FN!N`0LO?=6mpBx_}G_PN+_8oQAi29Pe zCF86$EBBUft?2GM*Z57t#>qkjeC_m-@7WvkGd|^u(*l;BdF?G-bYw6(^13kzd?HSg zJ|gv|up%t0VxGuYV~|Ph&7*S{ZX?dNkYv}u--nxpU4DrrzXLiq0~s8E2i3{%-I=cB zOf!%@`qnKAFSrjZS$(8~3h2xXG|Kq$LLqwcR)fb|*uy`zO>||hRcuJwpyg^OfT7JO zO$YL1Sb~16ZKWOyLrSK=uy76{J0>Mo-R#N384(jq0_H(p;U6s>uMd04a^jgx%ey7y zT$n!hAUx97oM^Z5hYo#787D{;iHxt{p4Z53J`<{3U%E<9ido@NuJO%vke|!_pN=VA zEvC%6jU%89!F4f0qLYYu1$T}wX@Px_@ar> zK9#~cZlbyx-@bC=h5F&1XJzxo*3!ADM2?Nw-k=$-?7@|>ejl@Nh4`j#W?Y_!5z{v$ z$TdSkvMIafj(#=UTtru)%^Nf`T+&<(73~qShk3PREZAr2 z#|Rl~!xAT&&t-I+zudaDNc5bgVfR&P*)^Zw*z{nrV|jJTy9`0T86x7|L|w5Vkp}_T2&fOnf57_u3AIoz_SdIONXdgLRwaQ zI-0V!p=3NiQ3uz%s!<{+{^Zt{O|?5u0FvdD)JW=l}%5a;14V(pUXaML3$Bio?w>p!d9OXC|7QoAW15#_6L;s{0O?!- zS;!8X+~MRKfQA@4j;-;|0)A_bTenej6m3Eb3zJkh@!7t0^J!3M8 zof)A}e7?P_Y@>Vn9GY^Z+i*sOL~ROjwarDP(SYyki^~TDULZzv_;?Cv+L?!8MTY6Gce z2$J|9QJli97bg2TE2b*cs0`=uBlqxye`Ss|%aE^ZqYMO(lw9MImyI{-sdhDw>{>s+ za*SWBOCdaaNt1Q3}lXua`Qc;%jjAtEsI2<~~d!LiJkzDuFOkcF^GUVNrZ+Ea!p6512zx`L#9DZU)eECX6tY)OYZtJ(2o1>x z@W1`Eq{IyBHpP@~frM)SWe#7w-JhHa>7MB-jXZ#R*b&xjj!=(8zKaPq79sYSeobrj z{3|AK(t@ur4ZeD^AU>yU@HSVkGi)hOXK3*Gj=-$0W}P4LQeUYR?g7$XPg#6JKHLhe z%TS0qlF-WN)mTVny*(G=sYarc%6M7hna!#f_Z9P#oGAr?+K=D!rb8C0Vc{yQ)uzvE zD5l|*((jv^KV*G#nvAmj^p&n1=#cvUvc2O(Lr7PV0ab1dZtvIb7d9Z zSG-;UZ<1Zxsq9L;>iN?g1@~FjUq?*J4Q4kXqtrF66NNcx+~3dLk@}6w-D$;xep75j z!}qP+eyGC~Aed17Qqw|e&A5+3JOk9;%j!5B#dc8cu+rz?L@gOeqN+<0S4s31Mup0aX_xTmK(0o{{yeLz!KCq{%r(vD+=xY!)#=tS9HX!Xr zX3XU2DV=dpa75KvnnGq<)eFWi&I1EA3Pa`cep2L|l#@s^3!l!4W zhc8aI7?58to=bASrqQPxmo!TBcGV!J_8ZzD!Enp$C0Lb}x@<4URq|=wF=l-dER>S) zXr-}LIiqfFfp0+Ce=_h>qXUWWVXp3?xrW3s#nExMYC?HuGQY)ei8!sfBEhU+1$YAkKE zHI=gcGd(x*tK{k)P#ajm`tYY$hK+nJ@s6gy5cHcLBXLg66p;a%kfMBJ3k@FCSA#|K zSS1r$kutrEL7RbgT^C6FG9F`d z)%DJ8g#6%n#)yZyN4+_86A0z>2}*O8Q~u6vFJ(^^$#KF4Pv+;hyV-% zga{={nxiWx!d%dU3I1zh0T?Gfo<^suUv)wEPrw8tAc-2a=p0C6{YZvBGXG^0NleKY z**%TrMG7o0+_S8W_wJ1)o8Pm-;rJUOvl!-=9DkOkrK>B7#HH^|1JtWNPH%I0(19iXEG&^#iwp@JM7|w(RMu~q-+}uhOzHX}) z)ZL#1Ut|1f^b;reqc@*OaDDuvPON1iTuIbr^vV8YE8nT9$;(BLYbEugikzVO;dB9Q zn})r{gfKIKiY}1!N$PvQR$*h`SW4rJHscmgcjucm%eUk)NCEEQ=yBi&n)Gp*u=`Nt z<H6cT5HfZ0?VhkX?P_xZ?)0Vqmk41P-OXZ<(wK*V;wHPD`6R7QiyD`9+H5M9 zlSH_$qToFeHQ}%;dBtU*toQnGGK{x5g76#e?BxAblb*dsXDJVA0&#;&{_9+G`|4A3 zFwA=odc4&CMV8<0JOr{8eDOj=r#4HlW+XvhbxNT&8tHPunUHT4t+D0?g+2`#_}ThSc4TmLnzLFq6!>}A z`)lDsxQCLaT;9yfQ5J{C1`mB!Vp_u8kaX0zElH{uenAV@ef4Cc#$3C_KlfUK^eC0G z{i3=4)FIcf)#6K?8JSEq4Tr6mKfAZ-r!|0e0E3(2_dh*Cx&4I~{U4>t!Qm@@a8+5(rDe^mW zq_A%y2XN~6412@AHhrwBIfl&bK_@(8*~n)Y%4Ci#+6me5jaUx#&-w>MnK(g{TJrP} z?*U@jI+sUKPDX1k86<5uZV`Siop{@;me~}J~gQ2md#*=jLgn$;p6u} z&3xqfqjW6;+|)Qqzt{;mtHdLI{IUr1po^;QUsjETSGf-$(d4CtN7QMebG zM^DuptgflGPvs-+xxvKpY*ekSdq2H^QBWCqVZCA1=4uq$q$lrO{lGRU3<-X)H9Ngt zy+H!P7@||K{M`{L{^#%j-DA(20}}lkLrl?%@=d}j+r{g{d&}7|!UM5yjecQOlv*%` zl<6Jzi?M}yaABm$@nHGh9LXrmIkCR=<7H=VJBOYvD;V0JCx2H{kPe}H(X=jkjy+#yYV>|V@ZF7l;C5@T8XpI4*-PQK6rSH z$^5V?&{B9KK|f0Pz^uei@Kpf0PTb3{8pR*%-)gs=&27xnuJpwX4 zLhM|Kva3zYOKCo-SZzP@C8Za$y;jrqcYNnzU?&}2<+bg)JFA{vPnNKwnKhZu6mxh} z0R?cl+YPGNmffSIB@BV``U)GzCd%_RWq>P{XBFVdyh|+0G66hYT-0CP53XAgTS%#b6-vLJOU5-z>0&x&H^wzjuXqFyU$AUG_%fTS@+Z;hk8pS) znTRQVpaH2Z`5_A-c@g?o-~{EH-??LexGKZxpr%#TrHlCP_bYXbN}LbFUtero4mj;R zFnLD9;qOUt;!jsoCebvHKP|8j7O9RTSNA1+$WAmY)q9jb$IA6QTPypF+na}A;d^xU zH^t@%FJ~>Y@X_?P@Xe}T_hz+pgFo++mI5e}DnA2G;VTbp*{N{$AJ|VrgV`Knm4@^wIqDra?CwPs6XP*N))Fp)~)Ckri4@Qv| zIXHiGX`vSmietQZ-oMF(p0@=OnREt~A(-aLcMaTIS63j!a=FGsUi+=wHyo0~6&hCW zvyGqRu+Czal?H@8UbN)YFD>QPOU_84ZyawbjwNLuL;SXz<9UGFyM@!T_!!qyMZCl& zr>RZXC@zP-l#^eFlJHIW+0`>GiQE{<; z?ktBO`Us-qB|#-M@!*3eT6ng)$X;(mSVZLnpX3FGRjV(4t2X7b`p zF@Jy03hR&rQrdlzrpcZOMh`{1!hUbDMiJF~AY5d2Dcyt*BG*c1ZC@F+!nJq|SFL zQ@Kwx7&81nFKKBZdJ~1e!u{F+lt<+kt$dE+%l$nD{8}=uMc>rbgmx0Y#;U5%V#ms$ zuw>||Lxhxmp&#l!z?#3o%rXto(}Tap0Zf&6MmK&Y+^VLU+Hxm*lC}+eF(&=6cFDqt z`(;ub0xdhe*0ZsMdFaF;5SP@yXhod1riQ@tUSHy2dqKPjTj3td=qU0WM{xe2aWW(L zdGZWm47LOX6np4!x_ZTS7B(znd+Kk6^$jJeb4hi!0Ya8ER7RygsxiDgSd?r--S^ zeh#DQqv6t$D6^aUt~T;pW>?LG+)qem>fp2I&YU=+%Rg7P_98zKf?Hh#lT~kYqxm^4 zQ!wTu>)(?sTSf-7cI(sqKny&8bCSAzh{^qSBOq&~Hz3V#q#wQ6^3_*e$(N>%q5MqS zhHo4l4egebuRA$$7MRVRe)3cFebeo6&cRdJ53jCadBKUkK7b{L3?6)>()%N6Sf2N( zY@PAT2X8y5OCO82EACv;LHpvZ+$q z;4Uj_<;I|{uR0yCY>`1fGe4D6tBhI<**!>%N|{zNX9@cvuke}c^-_f0XW|4L-U53* zJ3Y0T3He-mX_dqAKz>dSo53=i6%~ySo8zV4JS0h<`Wtre>y|wx*_&M~4T*8aaUQO# zBL*%{N$;~*99_GkAs3=Zza8FuuhB!#{w#p_vo76^n|AuD05*us*_Aw#A>mu<89JpM zTr7+;~4#)f4jTIGHYrXqF?z+OEx4Qltbk)E)SeX1!S zCv!ggE9t@dAZCPTd(8Pg&`y72$qarM|6;ARBEjtAa&$EKa}2wMX9(au9^4vCqNq3{ z&YlO!`-N^@{#4e0`&+VNWhL0p>s!*{3&T!H-f{E~$qM^j$WB3qwU+fSJrQTS_s(fO zDg8o6z_wWvV*c(A1lAAUGnfR?P^q|+E=-qm42I`|HW*-YTNH@T01E%7i6ttnE%#oq zy8&wMe@GPB%j&t{Y$+5dHGGGzbdOIri^!|0>7mw+JNb3BM>Idz=d)@R;h&0O^9zLq zb4y)39QpZ9Oh~sCaOX7y6p4jM3G&ed{62l2B_5dgp8Bj!A|<8gr8xg`61&fwt#Zcb zWq^o;h0!ESy6i`+tSO1Q8JPU5ap@{Qhkb(7QDJrL%)Z8i9+EWn)ad&SsV%=AM#x6Es+z^H z9J1qeCl(f&uY&~1utTct6gQ_oU`JOEjd~}4TcRCfOr1xE(?jo-f8HW7ei5^u@1E}5 z5N-7L%6B;|Zat<)k7G~N=XgQj;uOEm?{iaBlJ%Cl*&D02o1O${e0~*?nbeqhvD#YU z=i4v$R*}S2Wgm%h&Jl7Mygm(RSpHw4sUAL>)&g1xHV!M%#mrwb23$01v59IKsp*+- z2b7;Fap%_<9?B=}e!k(^Zt$*saFi&Y7~J=8h2}+%)!_w1U_II}lT|^=icv~_PRYD$ zrX1g3?oHi{Q#`v`nEi`->|oD@b-hphzVNCIzdtu@?)ACzZht zPhYZ4h64q_EPxx_F?JTf@Y=;Pe0>9KCt8oBR>lR&J9w{@YREAgJD}Nq;~4J#n8d|6 z!07Z-kqS#N^JXfH?Of;AB7FtZFJIKXeR(6&3Hc=BHNu|b1oc@LI#SG)C4`C2(QC(x;a_w9*de@tb9M3YEud>p(X20MWTg&64a^iVfrP-L3>uIGV`!os5x#L(| zSy#EfIO~;^SC}xS56SS3{s2BHn#9$+5pv%zS^+;VMMh5X*)wA3Xeykf(8poOhPtU@ zJ5n>mrd&qy7~UsNQVZt@+s#tLc~c#9k&&TCyV!V2&1CXs@$G{v#O|`=t=WAi4MIdO z&yBv%ZwQWTmvp1s4xUg)Fh40G@p}3>gB}bUo%d|miT={+O8TuTw5wX!@PkB0`U}T? zB~#l?|GwUuc=^R-a?5aH{3<3-B$rZ;eTHw9xs~w1b8+w9V}mBUs;wC6g`Lu`*xM4j zHxwz0!*LP~&vC!`O2c`iO4H={gTGvsSOXv1Gq;bvEgaJ;bHr_6)#%y9v8&QqjXSJG zYbDM7_`L5~bGM6m(iid!8iBsj=3m|WCgUe{-c)PN-^RT*QA9-q&1uJ2k&yEI>uZ=qLwbxnOdt&Q@9$QO3?rw6DE%`{qLrv#MBDAH`!Mqj zIG4=6wMu;VA$!s88>Tj|$m#OAOM(+fIO4t!NLiAKHCD0rsA}|waArEy{l4}CY+^OM zt(KLhX3zR7AC4>G?3y%$g#rmzgWq=7HLTr(hWSaFR}TM7TUWBsNYwOdoXiDlGYJi{ zY@ZS7x3b9at8Q{pm@zckb&j4s{jE<+vmVc8(i8k`2VErs&c-LJ>$7e}f(W(doc5b0JxUUn%Msfbg6+G6Hk}{% zrv3bBOxy}cbj8y-h{L6IK_Z1IRYLrU@2i3=X^a;r`ncK};YzGVa!QHeCL)f+v* zReOqOrb^l(u0d@hf={T zuwDHL0xBz+%h@3@QxYaXnw?we0o}Pu4)Px}1&iIoDv7*ya9r*G^mk`tSE;dQ5~uSTPZ z;#Q;_c1uoOBr$agvvTFJV`GlIR0dinOuFs4;vdyZq${Cgs;G3o#;nF6z9&8Muzc!TqimvJQsn}Fz9+*!Q+pUQeVS*hHfaQq~_ zj>N^O1{%glpbFben6~b=6Pn=MkYWkie1q%BR6?IqCH?xtuTxqkG-JR?+{+cZ7z`>j z_5+NoDICSkN0C{yEoAOS$cG;!7P+b$gVo%_sO28)X`KD8r+ox!k>a$Ni4D<`sIhY>E`@tBRm_H@Syh++ijlk$t- zQ&Y=f`#(#c`?8Mxk$GCL$9()yg?nQz!HKrNw5~ifiK5rcSW-*+A$utj%S5#oYCGb6 zDBjY)9H@m}|1E9^Q~EdP58(lwws?m))f6^Utg37k-2+lS#Nh=ey$*L0f2dFqnQx=i zxN(IY20vx5=kk~~j%C>t(HK8FlsrJ;c-11C0hdep^4+90=SmPSO+>wFcSDou=(C$QmwnAX8dImZNSC`ShgwjKSaOyzd$t_V%Fcf4PROH`={$N z*y+9Br*Y$G51oF-{~c*Ce5$En$UC*BHpnR*_gV83o{&{YdqmVRHLtXJEtBtPhs0NJ zoQx$8Gb`QfSBoMQ#?eH=YvC@cyki)&*l!e*mo%^#Y=Fk%q3C9<0tcaB&HGEaezVVc zVw(?|28xDO7iBFTqu)OVe(s(Uj^pd=`iZO^6Dn>EZnMwGn~_Jled&j07B0=lDaR1F z;5FtNG@GrP+SW1Q#lp~n%wLx>J*3}j^$H}|lKeGGmr7Nl#a_D93{sdE@7sRzEo=kW$ii-Vxx{{%}9+ z*TTEH!Ju?~b}3`ZC3#^MUsYF4@7NHDa9mZFW!=<90-mF(Y!*%6gO5qGjZYj2HVT#s zG}U=ptL4!+b&+;#`VH)EzJi{UQzmmP8wRQ!!_T=tlQ`AI+rz@E=Uk5kJ62U$>w#<- z#E`##B&wIw#o$3_1Hk}r10H-97C}`9OBpj)D;925C}rtaRL;A!~S*QKkfq}pn%(sL13_u&_8^j`~!d>=v~wx z6hpVcfZ!nb?dU)V5coC=U=RRy#|9Px-3ADTgD}AGdQNi;15701)~5heW`u6%1_6V> zZ`n|J07Gx10)T*sJNbejgl?k(z@e~zpF{pF03Z+m1_A%U(O(n+fiUoG$3QR~@lP)Q zbq)@M-*$qMEcgzU;9I#tB?5?2HQ@GzAR##7HW*YEK)26^be#bEg2)rFJ1O$To-*h5T(Sg9wJJErlz}w{EX#Ov16lgH2Q13hogWZW3CDuDO2;lFg zf&5SV142;T+&u_}+(8Y2!0tGP2m$WU4}smH8U-2x|4-TdU3Ewx1PTD&p$iIx-T?yz z{f+u>&``+T)It9rFequ=t`Z0o4u`Y+)d>HgepDcL+8RU%1^hPELSWEc8{{tiLeT#z z{eOin^bb)Z|2=(Bf02OSEhixa;!fUSz&i~I0t4OYgedmGcL2hmklPi8guwoR=D%QI zaPS?a!vVm%HX!Ksg{Vf2xI;A@a(mnYA*dFNs+@oE|G(70VRw}dhu@6^)q(FgK>+V` zQ3wKbd!_>+2-N)fJDtdX4S$podRK&~MtCPW1neIV|Myvh(Cr=oMRoMsqDB?*9UVcD zs3~^a2^0VY{x8CRJAnd(?hJn@0CuNULjj08eF2IZV|M`lr!D`*|KIeZdfxx@F!WAO zhoYw9Z7rbqgWt6w?ldzf2nhd2Y0Lgqen2Ry6W(qhP}Hh)JIAQi;Lc8kY76khqZb$y z$U6fQ3I^OMDkvCuXAnYB+tKY}fui#A51jvoiCUuWz(lF(-{+M7K_molH>(iTruVn* z{*zVI@V;{)6e=W?81oXt67v6UvKpeIJjVE9V)!nuX3nmj&Q{j=KqzX-g5Yy-$g0cz E4{nqh&;S4c diff --git a/docs/manual.typ b/docs/manual.typ index 47ef829..35dfcb8 100644 --- a/docs/manual.typ +++ b/docs/manual.typ @@ -1,14 +1,15 @@ #import "@preview/tidy:0.1.0" + #import "style.typ" #import "template.typ": * #show: project.with( - title: "Valkyrie", - subtitle: "Type safe type safety in typst", - authors: ("James R. Swift", "tinger "), - url: "https://github.com/JamesxX/valkyrie", - abstract: [This package implements type validation, and is targetted mainly at package and template developers. The desired outcome is that it becomes easier for the programmer to quickly put a package together without spending a long time on type safety, but also to make the usage of those packages by end-users less painful by generating useful error messages.] -); + title: "Valkyrie", + subtitle: "Type safe type safety in typst", + authors: ("James R. Swift", "tinger "), + url: "https://github.com/JamesxX/valkyrie", + abstract: [This package implements type validation, and is targetted mainly at package and template developers. The desired outcome is that it becomes easier for the programmer to quickly put a package together without spending a long time on type safety, but also to make the usage of those packages by end-users less painful by generating useful error messages.] +) // -------------------------------------------- @@ -33,28 +34,29 @@ #import "@preview/valkyrie:0.1.0" as z #let my-schema = z.dictionary( - should-be-string: z.string(), - complicated-tuple: z.tuple( - z.email(), - z.ip(), - z.either( - z.string(), - z.number() - ) + should-be-string: z.string(), + complicated-tuple: z.tuple( + z.email(), + z.ip(), + z.either( + z.string(), + z.number(), ) + ) ) #z.parse( - ( - should-be-string: "This doesn't error", - complicated-tuple: ( - "neither@does-this.com", - "NOT AN IP", // Error: Schema validation failed on argument.complicated-tuple.1: - // String must be a valid IP address - 1 - ) - ), - my-schema + ( + should-be-string: "This doesn't error", + complicated-tuple: ( + "neither@does-this.com", + // Error: Schema validation failed on argument.complicated-tuple.1: + // String must be a valid IP address + "NOT AN IP", + 1 + ) + ), + my-schema ) ``` #v(1fr) @@ -105,52 +107,49 @@ Generally, users of this package will only need to be aware of the #style.show-t == Functions #{ + let first = true; - let first = true; + let modules = ( + "../src/lib.typ", + "../src/ctx.typ", + ) - let modules = ( - "../src/lib.typ", - "../src/ctx.typ", + for module in modules { + if not first { pagebreak() } else { first = false } + tidy.show-module( + tidy.parse-module(read(module)), + style: style, + sort-functions: none, ) - - for module in modules { - if ( not first ) { pagebreak() } else {first = false} - tidy.show-module( - tidy.parse-module(read(module)), - style: style, - sort-functions: none, - ) - line( length: 100%, stroke: 0.55pt) - } + line(length: 100%, stroke: 0.55pt) + } } #pagebreak() == Types #{ + let first = true; + + let modules = ( + "../src/types/any.typ", + "../src/types/array.typ", + "../src/types/dictionary.typ", + "../src/types/logical.typ", + "../src/types/number.typ", + "../src/types/string.typ", + "../src/types/tuple.typ", + ) - let first = true; - - let modules = ( - "../src/types/any.typ", - "../src/types/array.typ", - "../src/types/dictionary.typ", - "../src/types/logical.typ", - "../src/types/number.typ", - "../src/types/string.typ", - "../src/types/tuple.typ", - + for module in modules { + if not first { pagebreak() } else { first = false } + tidy.show-module( + tidy.parse-module(read(module)), + style: style, + sort-functions: none, ) - - for module in modules { - if ( not first ) { pagebreak() } else {first = false} - tidy.show-module( - tidy.parse-module(read(module)), - style: style, - sort-functions: none, - ) - line( length: 100%, stroke: 0.55pt) - } + line(length: 100%, stroke: 0.55pt) + } } #pagebreak() @@ -162,22 +161,21 @@ This section covers topics than the novice-to-intermediate users are unlikely to == Internal functions These functions are available under `z.advanced`. #{ + let first = true; - let first = true; + let modules = ( + "../src/base-type.typ", + ) - let modules = ( - "../src/base-type.typ", + for module in modules { + if not first { pagebreak() } else { first = false } + tidy.show-module( + tidy.parse-module(read(module)), + style: style, + sort-functions: none, ) - - for module in modules { - if ( not first ) { pagebreak() } else {first = false} - tidy.show-module( - tidy.parse-module(read(module)), - style: style, - sort-functions: none, - ) - line( length: 100%, stroke: 0.55pt) - } + line( length: 100%, stroke: 0.55pt) + } } #pagebreak() @@ -192,56 +190,66 @@ It may be the case that your type is simply a narrowing of an already-defined ty ``` === Type specialization - Intermediate -If the above method is not sufficient to accurately describe your type, then the custom argument (described above) may be suitable +If the above method is not sufficient to accurately describe your type, then the custom argument (described above) may be suitable. ```typ #let specific-number = z.number.with( - custom: ( it ) => { return (it > 5 and it < 10)}, - custom-error: "Value was incorrect" + custom: it => 5 < it and it < 10, + custom-error: "Value was incorrect", ) ``` === Type specialization - Advanced -If the above doesn't work, but would if you had access to information that would otherwise be hidden inside the schema type-like object, then bootstrapping it may be an avenue to explore +If the above doesn't work, but would if you had access to information that would otherwise be hidden inside the schema type-like object, then bootstrapping it may be an avenue to explore. ```typ -#let specific-number(..args) = { - let internals = z.number(..args) - return (:..internals, - // Configure values manually, perhaps override functions. - // Check source code of schema generator being bootstrapped. - ) -} +#let specific-number(..args) = z.number(..args) + ( + // Configure values manually, perhaps override functions. + // Check source code of schema generator being bootstrapped. +) ``` === Type specialization - Wizard -For the most advanced types, creating a schema generator from scratch may be the only way (though this definitely is the last stop, this method should cover all cases). To do so, simple define a function that returns a schema-like dictionary. +For the most advanced types, creating a schema generator from scratch may be the only way (though this definitely is the last stop, this method should cover all cases). To do so, simply define a function that returns a schema-like dictionary. ```typ #let tuple(my-args, ...) = { - - return (:..z.advanced.base-type(), // Shorthand for the definitions shown below. If you do not modify a function, you may aswell omit it and have it set to its default by base-type() - valkyrie-type: true, // Magic number - - name: "my-type", // Member sometimes used by other classes when they report a failed validation - + // Shorthand for the definitions shown below. If you do not modify a function, + // you may as well omit it and have it set to its default by base-type() + z.advanced.base-type() + ( + // Magic number + valkyrie-type: true, + // Member sometimes used by other classes when they report a failed validation + name: "my-type", // Helper function, generally called by validate() assert-type: (self, it, scope:(), ctx: ctx(), types: ()) => { - if ( type(it) not in types){ - (self.fail-validation)(self, it, scope: scope, ctx: ctx, - message: "Expected " + joinWithAnd(types, ", ", " or ") + ". Got " + type(it)) + if type(it) not in types { + (self.fail-validation)( + self, + it, + scope: scope, + ctx: ctx, + message: ( + "Expected " + + joinWithAnd(types, ", ", " or ") + + ". Got " + + type(it) + ), + ) return false } - return true + + true }, - - // Do your validation here. Call fail-validation() if validation failed. Generally, return none also. + + // Do your validation here. Call fail-validation() if validation failed. + // Generally, return none also. validate: (self, it, scope: (), ctx: (:)) => it, - + // Customize the mode of failure here fail-validation: (self, it, scope: (), ctx: (:), message: "") => { let display = "Schema validation failed on " + scope.join(".") - if ( message.len() > 0){ display += ": " + message} + if message.len() > 0 { display += ": " + message} ctx.outcome = display - if ( not ctx.soft-error ) { + if not ctx.soft-error { assert(false, message: display) } } diff --git a/docs/template.typ b/docs/template.typ index 471623c..381813b 100644 --- a/docs/template.typ +++ b/docs/template.typ @@ -64,6 +64,9 @@ // Main body. set par(justify: true) + show list: set par(justify: false) + show enum: set par(justify: false) + show raw.where(block: true): set par(justify: false) //v(10em) body From a9d9f69585683a7ec64ba83a448b6444fe489505 Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 10:30:45 +0200 Subject: [PATCH 07/11] Update README.md + add CHANGELOG.md --- CHANGELOG.md | 17 +++++++++++++++++ README.md | 40 ++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..cfd01f0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# [unreleased](https://github.com/jamesxX/valakyrie/releases/tags/) +## Added + +## Removed + +## Changed + +--- + +# [v0.1.1](https://github.com/jamesxX/valakyrie/releases/tags/v0.1.1) +## Changed +- fixed syntax error in Typst 0.11+ because of internal context type + +--- + +# [v0.1.0](https://github.com/jamesxX/valakyrie/releases/tags/v0.1.0) +Initial Release diff --git a/README.md b/README.md index 7c74108..3b0c26d 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,34 @@ # The `Valkyrie` Package -
    Version 0.1.0
    +
    Version 0.1.1
    This package implements type validation, and is targetted mainly at package and template developers. The desired outcome is that it becomes easier for the programmer to quickly put a package together without spending a long time on type safety, but also to make the usage of those packages by end-users less painful by generating useful error messages. ## Example Usage ```typ -#import "@preview/valkyrie:0.1.0" as z +#import "@preview/valkyrie:0.1.1" as z #let my-schema = z.dictionary( - should-be-string: z.string(), - complicated-tuple: z.tuple( - z.email(), - z.ip(), - z.either( - z.string(), - z.number() - ) + should-be-string: z.string(), + complicated-tuple: z.tuple( + z.email(), + z.ip(), + z.either( + z.string(), + z.number(), ) + ) ) #z.parse( - ( - should-be-string: "This doesn't error", - complicated-tuple: ( - "neither@does-this.com", - "NOT AN IP", // Error: Schema validation failed on argument.complicated-tuple.1: - // String must be a valid IP address - 1 - ) - ), - my-schema + ( + should-be-string: "This doesn't error", + complicated-tuple: ( + "neither@does-this.com", + "NOT AN IP", // Error: Schema validation failed on argument.complicated-tuple.1: + // String must be a valid IP address + 1 + ) + ), + my-schema ) ``` From 39c4b15a1bd9a67e57ded482405f15764f53f7f0 Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 10:47:10 +0200 Subject: [PATCH 08/11] Remove out directories from tests --- tests/array/out/1.png | Bin 538 -> 0 bytes tests/dictionary/out/1.png | Bin 538 -> 0 bytes tests/logical/out/1.png | Bin 538 -> 0 bytes tests/number/out/1.png | Bin 538 -> 0 bytes tests/string/out/1.png | Bin 538 -> 0 bytes tests/tuple/out/1.png | Bin 538 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/array/out/1.png delete mode 100644 tests/dictionary/out/1.png delete mode 100644 tests/logical/out/1.png delete mode 100644 tests/number/out/1.png delete mode 100644 tests/string/out/1.png delete mode 100644 tests/tuple/out/1.png diff --git a/tests/array/out/1.png b/tests/array/out/1.png deleted file mode 100644 index dfaa8c42168bcc94207bf9ac90962f431498d15d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ*1|)kVnp+td7$17NIEGX(zJ0(rLB(^DilaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^FrmaP0T~@04zeXJ&CSiFW%ulvT<3k#!plp`%l*%Ttn^uw zGyDH;h6%Z!>%|#1<^Frm Date: Fri, 26 Apr 2024 10:49:31 +0200 Subject: [PATCH 09/11] Styling --- Justfile | 1 - src/base-type.typ | 42 +++++++++++++++++++----------------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/Justfile b/Justfile index 7e5eaf3..dd7db08 100644 --- a/Justfile +++ b/Justfile @@ -1,7 +1,6 @@ root := justfile_directory() export TYPST_ROOT := root -# export TYPST_FONT_PATHS := root / 'assets' / 'fonts' [private] default: diff --git a/src/base-type.typ b/src/base-type.typ index ce7f848..9909826 100644 --- a/src/base-type.typ +++ b/src/base-type.typ @@ -50,28 +50,24 @@ } /// Schema generator. Provides default values for when defining custom types. -#let base-type() = { - return ( - valkyrie-type: true, - - assert-type: (self, it, scope:(), ctx: z-ctx(), types: ()) => { - if type(it) not in types { - (self.fail-validation)(self, it, scope: scope, ctx: ctx, - message: "Expected " + types.join(", ", last: " or ") + ". Got " + type(it)) - return false - } - return true - }, - - validate: (self, it, scope: (), ctx: z-ctx()) => it, +#let base-type() = ( + valkyrie-type: true, + assert-type: (self, it, scope:(), ctx: z-ctx(), types: ()) => { + if type(it) not in types { + (self.fail-validation)(self, it, scope: scope, ctx: ctx, + message: "Expected " + types.join(", ", last: " or ") + ". Got " + type(it)) + return false + } - fail-validation: (self, it, scope: (), ctx: z-ctx(), message: "") => { - let display = "Schema validation failed on " + scope.join(".") - if message.len() > 0 { display += ": " + message} - ctx.outcome = display - if not ctx.soft-error { - assert(false, message: display) - } + true + }, + validate: (self, it, scope: (), ctx: z-ctx()) => it, + fail-validation: (self, it, scope: (), ctx: z-ctx(), message: "") => { + let display = "Schema validation failed on " + scope.join(".") + if message.len() > 0 { display += ": " + message} + ctx.outcome = display + if not ctx.soft-error { + assert(false, message: display) } - ) -} + } +) From 05a312aebcee0f3e9432a42db2d0975472537bba Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 10:59:35 +0200 Subject: [PATCH 10/11] Removed spurious whitespace --- README.md | 15 ++++++++------- docs/manual.pdf | Bin 159530 -> 159553 bytes docs/manual.typ | 13 ++++++------- docs/style.typ | 24 +++++++++--------------- docs/template.typ | 8 ++++---- src/base-type.typ | 1 - src/lib.typ | 6 +++--- src/types/any.typ | 8 ++++---- src/types/array.typ | 12 ++++++------ src/types/dictionary.typ | 2 +- src/types/string.typ | 8 ++++---- 11 files changed, 45 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 3b0c26d..2a214a4 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ This package implements type validation, and is targetted mainly at package and z.either( z.string(), z.number(), - ) - ) + ), + ), ) #z.parse( @@ -24,11 +24,12 @@ This package implements type validation, and is targetted mainly at package and should-be-string: "This doesn't error", complicated-tuple: ( "neither@does-this.com", - "NOT AN IP", // Error: Schema validation failed on argument.complicated-tuple.1: - // String must be a valid IP address - 1 - ) + // Error: Schema validation failed on argument.complicated-tuple.1: + // String must be a valid IP address + "NOT AN IP", + 1, + ), ), - my-schema + my-schema, ) ``` diff --git a/docs/manual.pdf b/docs/manual.pdf index bfaf87a056af618489c49d9cfe5b9d9314ecd857..63e66f50690ac801b08e94f62252761cb25f6d7c 100644 GIT binary patch delta 5379 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

    _qwlH{xY)Pd9!gGMzq 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 display-type-function(x)).join(" ") } @@ -74,28 +70,26 @@ items.join( if inline-args {", "} else { ",\n "}) if not inline-args { "\n" } + ")" if fn.return-types != none { - " -> " + " -> " fn.return-types.map(x => display-type-function(x)).join(" ") } }) } - - -// Create a parameter description block, containing name, type, description and optionally the default value. +// Create a parameter description block, containing name, type, description and optionally the default value. #let show-parameter-block( name, types, content, style-args, - show-default: false, - default: none, + show-default: false, + default: none, ) = block( inset: 10pt, fill: luma(98%), width: 100%, breakable: style-args.break-param-descriptions, [ - // #text(weight: "bold", size: 1.1em, name) + // #text(weight: "bold", size: 1.1em, name) #box(heading(level: style-args.first-heading-level + 3, name)) - #h(.5cm) + #h(.5cm) #types.map(x => (style-args.style.show-type)(x)).join([ #text("or",size:.6em) ]) - + #content #if show-default [ #parbreak() Default: #raw(lang: "typc", default) ] ] diff --git a/docs/template.typ b/docs/template.typ index 381813b..f8b4173 100644 --- a/docs/template.typ +++ b/docs/template.typ @@ -15,13 +15,13 @@ set document(author: authors, title: title) set page(numbering: "1", number-align: center) set text(font: "Linux Libertine", lang: "en") - + show heading.where(level: 1): it => block(smallcaps(it), below: 1em) set heading(numbering: (..args) => if args.pos().len() == 1 { numbering("I", ..args) }) // show link: set text(fill: purple.darken(30%)) show link: set text(fill: rgb("#1e8f6f")) - + v(4em) // Title row. @@ -29,7 +29,7 @@ #block(text(weight: 700, 1.75em, title)) #block(text(1.0em, subtitle)) #v(4em, weak: true) - #version #h(1.2cm) #date + #version #h(1.2cm) #date #block(link(url)) #v(1.5em, weak: true) ] @@ -46,7 +46,7 @@ ) //v(3cm, weak: true) - + // Abstract. pad( x: 3.8em, diff --git a/src/base-type.typ b/src/base-type.typ index 9909826..aa1d57e 100644 --- a/src/base-type.typ +++ b/src/base-type.typ @@ -33,7 +33,6 @@ } } - /// Asserts the presence of the magic number in an argument of object. /// /// - arg (any): diff --git a/src/lib.typ b/src/lib.typ index cebf0bb..a0a1b98 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -22,14 +22,14 @@ ) = { // don't expose to external import "base-type.typ": assert-base-type - + // Validate named arguments assert-base-type(schema, scope: scope) // Validate arguments per schema object = (schema.validate)( - schema, - ctx: ctx, + schema, + ctx: ctx, scope: scope, object, ) diff --git a/src/types/any.typ b/src/types/any.typ index 50c3d42..29b1495 100644 --- a/src/types/any.typ +++ b/src/types/any.typ @@ -3,15 +3,15 @@ /// Validation schema representing all types. *SHOULD* never produce an error. /// -/// - name (internal): +/// - name (internal): /// - default (any, none): Default value to validate is none is provided. /// - custom (function): Function that maps an input to an output. If the function returns `none`, -/// then an error *WILL* be generated using `custom-error`. +/// then an error *WILL* be generated using `custom-error`. /// - custom-error (string): Error to return if custom function returns none. /// - transform (function): Function that maps an input to an output, called after validation. /// -> schema #let any( - name: "any", + name: "any", default: none, custom: none, custom-error: auto, @@ -25,7 +25,7 @@ base-type() + ( name: name, - default: default, + default: default, custom: custom, custom-error: custom-error, transform: transform, diff --git a/src/types/array.typ b/src/types/array.typ index 0e1f451..c78774b 100644 --- a/src/types/array.typ +++ b/src/types/array.typ @@ -23,7 +23,7 @@ /// contain named arguments. If no arguments are given, schema defaults to array of @@any /// -> schema #let array( - name: "array", + name: "array", default: (), min: none, max: none, @@ -50,8 +50,8 @@ ) let positional-arguments = args.pos() - - let valkyrie-array-typ + + let valkyrie-array-typ if positional-arguments.len() < 1 { valkyrie-array-typ = any() } else { @@ -60,7 +60,7 @@ } let name = name + "[" + (valkyrie-array-typ.name) +"]" - + base-type() + ( name: name, default: default, @@ -86,7 +86,7 @@ self, it, ctx: ctx, - scope: scope, + scope: scope, message: "Array length less than specified minimum of " + str(self.min), ) } @@ -101,7 +101,7 @@ message: "Array length greater than specified maximum of " + str(self.max), ) } - + // Exact length if (self.length != auto) and (it.len() != self.length) { return (self.fail-validation)( diff --git a/src/types/dictionary.typ b/src/types/dictionary.typ index bb2d52d..a73ca47 100644 --- a/src/types/dictionary.typ +++ b/src/types/dictionary.typ @@ -14,7 +14,7 @@ args = args.named() assert-base-type-dictionary(args) - + base-type() + ( name: "dictionary", dictionary-schema: args, diff --git a/src/types/string.typ b/src/types/string.typ index 1f56c7e..5e202d0 100644 --- a/src/types/string.typ +++ b/src/types/string.typ @@ -38,7 +38,7 @@ transform: it=>it, ) = { // Program is ill-formed if length is set at the same time as min or max - + // Type safety assert(type(default) in (str, type(none)), message: "Default of string must be of type string or none", @@ -62,7 +62,7 @@ message: "Includes must be an array of string or regex primitives", ) } - + assert(type(starts-with) in (str, regex, type(none)), message: "Starts-with must be of type string or regex", ) @@ -149,13 +149,13 @@ it, ctx: ctx, scope: scope, - + message: "String must start with " + str(self.starts-with)) } // ends with if self.ends-with != none and not it.ends-with(self.ends-with) { - return (self.fail-validation)(self, it, ctx: ctx, scope: scope, + return (self.fail-validation)(self, it, ctx: ctx, scope: scope, message: "String must end with " + str(self.ends-with)) } From 198f5d1e876b784091670505bbe23ba716a73d61 Mon Sep 17 00:00:00 2001 From: tinger Date: Fri, 26 Apr 2024 11:09:15 +0200 Subject: [PATCH 11/11] Updated typst.toml manifest - Excluded changelog and docs --- typst.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typst.toml b/typst.toml index 78022bc..3a60af7 100644 --- a/typst.toml +++ b/typst.toml @@ -3,8 +3,8 @@ name = "valkyrie" version = "0.1.1" entrypoint = "src/lib.typ" authors = ["James R Swift", "tinger "] -exclude = ["./README.md"] keywords = ["type", "validation", "zod"] license = "GPL-3.0-only" repository = "https://github.com/JamesxX/valkyrie" description = "Type validation" +exclude = ["README.md", "CHANGELOG.md", "Justfile", "docs"]