From 283b9f9d24f9785eb51a2762db9784071f85d252 Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Wed, 21 Dec 2022 16:30:56 +0800 Subject: [PATCH 1/3] refactor AWS handler with modular handlerRaw --- serverless/aws/src/index.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/serverless/aws/src/index.ts b/serverless/aws/src/index.ts index fbc7881..46bebc0 100644 --- a/serverless/aws/src/index.ts +++ b/serverless/aws/src/index.ts @@ -136,9 +136,10 @@ const apiResp = ( // Assumes event is a API Gateway V2 or Lambda Function URL formatted dict // and returns API Gateway V2 / Lambda Function dict responses // Does not work with CloudFront events/Lambda@Edge; see README -export const handler = async ( +export const handlerRaw = async ( event: APIGatewayProxyEventV2, - context: Context + context: Context, + tilePostprocess?: (a: ArrayBuffer, t: TileType) => ArrayBuffer ): Promise => { var path; var is_api_gateway; @@ -216,10 +217,16 @@ export const handler = async ( break; } + let data = tile_result.data; + + if (tilePostprocess) { + data = tilePostprocess(data, header.tileType); + } + if (is_api_gateway) { // this is wasted work, but we need to force API Gateway to interpret the Lambda response as binary // without depending on clients sending matching Accept: headers in the request. - const recompressed_data = zlib.gzipSync(tile_result.data); + const recompressed_data = zlib.gzipSync(data); headers["Content-Encoding"] = "gzip"; return apiResp( 200, @@ -231,7 +238,7 @@ export const handler = async ( // returns uncompressed response return apiResp( 200, - Buffer.from(tile_result.data).toString("base64"), + Buffer.from(data).toString("base64"), true, headers ); @@ -247,3 +254,10 @@ export const handler = async ( } return apiResp(404, "Invalid URL", false, headers); }; + +export const handler = async ( + event: APIGatewayProxyEventV2, + context: Context +): Promise => { + return handlerRaw(event, context); +}; From 3d1e8f90e5fea74195347f93a7a7fc5ad80c77c0 Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Wed, 21 Dec 2022 16:32:03 +0800 Subject: [PATCH 2/3] add vtfilter package that depends on AWS impl --- serverless/vtfilter/.gitignore | 1 + serverless/vtfilter/fixtures/sample.pbf | Bin 0 -> 207077 bytes serverless/vtfilter/index.ts | 21 + serverless/vtfilter/package-lock.json | 855 ++++++++++++++++++++++++ serverless/vtfilter/package.json | 20 + serverless/vtfilter/tsconfig.json | 16 + serverless/vtfilter/vtfilter.test.ts | 107 +++ serverless/vtfilter/vtfilter.ts | 226 +++++++ 8 files changed, 1246 insertions(+) create mode 100644 serverless/vtfilter/.gitignore create mode 100644 serverless/vtfilter/fixtures/sample.pbf create mode 100644 serverless/vtfilter/index.ts create mode 100644 serverless/vtfilter/package-lock.json create mode 100644 serverless/vtfilter/package.json create mode 100644 serverless/vtfilter/tsconfig.json create mode 100644 serverless/vtfilter/vtfilter.test.ts create mode 100644 serverless/vtfilter/vtfilter.ts diff --git a/serverless/vtfilter/.gitignore b/serverless/vtfilter/.gitignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/serverless/vtfilter/.gitignore @@ -0,0 +1 @@ +dist diff --git a/serverless/vtfilter/fixtures/sample.pbf b/serverless/vtfilter/fixtures/sample.pbf new file mode 100644 index 0000000000000000000000000000000000000000..b8e26af48e5ecc2d893c59244b0f4c46870006c5 GIT binary patch literal 207077 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

u%I(!2IZZ_K- z@Dwn=E~}KOahQVe(9_aU}l$&P@aq#NMiKz(H01h#!Xbds}j2zo5DJ>yJ zOS=@EX_SC&CP1gt5x?S&%bb25_BLKt@C64cg1aR!iRe=1+{`3QZATB-&Gh4knHfr@ z;T)HmgZJEeifSf~z?i+xoS7RLSS5=O+VCL$u>axCfgvm*7Pr`gb29_&|ImSh-*)66E`y;u)u`hbMuiciA%wvW9HqL1&mCwQ zUgg)Nr-nqJ-X9f?ja9HL`7l4UUTGUVK0-O~ZF5MIPC5ns5F33&s7O9)R6XktP~a>& z?ibED-NL{)ZT{TuK@zVj?21nD<-Nh-JS2}0g5jv7q(uhnDmNIC>zYS<~n@I9#NT0&Ng#h+)BFsf>S`p8wYRdD)XsSLeH1F*i66{O}CLI z9d)2dJiB8hLVcL)tPQG<`-^ffUjZhmv)nKcyIhTb8Uk5 z4-sM!nm5w4HyWjx$WYq#-!X=Yn24UdJm2JW}N^@irABJSBU; zZ0cd-_06a*ihLUKq!bkC)rb;mHsB5h><|w*H4MQETRu$ghu6C_#5^V;#2P&570fjA zDL+?&4Vz9 zKt(r7q0G;J*+|`hF2hBlG@7TtoeYTfxBq$6!h^xiH9KrT>_f3j^_*|P7BFxNoc`la zPuT+H8*X~I>{SDQ^2fp+caQHvJB0Qw1|CJepY_QzHEa}r(YDqWWSe3DVLHl2Rs~;kB+wejuwM<7oEa?_?+a z>v_9DLA;BflO6ayFL;x(oc&K8MSYmihgIQ=8Mx`}a^MAgN<5XBjzX6}4w;rT2qy%N z_}Jv!3-fFeL#CDC88gJd{MAFuz7X`$6iJ5r{<6> zBW+x}{X6U93O*t1Fbr>BPEZCp{l1@!+=};XSP}X?Ede2=oj4#eLgWuI|M^j#aksen zfXoo03Py`?U{$h3&T=w$E1en&cqU#QgSoq^6|#n%$1*^xsk2Hv;)&B-v>24z6E1h# z5c}Bp2Lr0w<4*Yq{zSMfI)<-EY!EIckn^vwVWLzHq=Zr12r2=7~(h9>63XLuJ>=vR9 zny{4&+|G7vxY2@n@h5nBycnB?qHO#^I!c%VtH=k*F?`p&IooO#2Jm~#G`(`=5Qr!8 zg(_{4EAB;v6Qqh>MK;ERkGyH2gLs>GGCd%4ws{#0nH!TG65}4Q_a^B3y~1t#pM-o8 zrWGcKPcgf+YX{SkEVy||n9N<}3H|OYDVR$}#Zuc}{HTs_-&DW#5Cb=WH76c^sa80H zXVVMZQ&?Ys^_4~H+}%hIQGfcB9x9I*=BDnVR}sR6YSD*Dr`9?}12{QX9*9Y_90(#K zFEE2ABI?%``Vq!^p76MX?#0Q|@+)X5!&5Cq%G(eCt-(9t2}E(j;uIcvDYyW~gJ6ME z+~J%EIg`MZp{IOf8{sH`bZd`!lrXA7Uvbqp%3XMG!mH97nWi+c? z%Xs^RRcl_gnoy7TOFOgEku)i@5uK-~46YABd6{Gp3a23#726-EcZc(~Fnf#vYv$_1 zyI!mHLBl^EQ|>NEhNg}f4XGFHXt6P{#ZM+88cohGbmqP)l;esV54XV!yaWbhofLUl#lL?EvNENLzCKO-**)ktxVM=<58lH1r`jX3ft>8K z*RQrd3J;hwa3$trjj@B%6m@C07_i+Do@C%EI>*66=EsxRFa{5!s2;-jRlNpoB+_c3 zgUaDQ9>Ld+%F`0KPRg(~&V|fw;3fAUr1rgdiUbyRml>C9E`_JaC)Pe~H%G?jY=lp= zj~$Y38`p1rViOTo8`nN=H5$yOZQwDZN_10FPPesyd8o$c0s0}(T)sYIhrPNVc5UN>Sj$SV>A?Kk|HqsGrhHuxC=-f|`w z?NTa~5uzynq;WSPin@>x8&wzivqTPWI%e0b;Dy|F&FGwZIVJwaqz*6#U^5wjTkikC zY5+Kf3cGZpT*w6K)5MBbz1$3g1^?5Yo8GE*3kVxK4&exX7-eoogu1~BGk%V!(wn#6 zx4Q<^@eJl5xF9b?^f`6o{_|1#61#z0h@{?n@)-*n#M2{7I|e5AoooEzvew>ch!uX( ze+@B)m<@fN9D`qPS@TY<<^rCM*Ct`pHVG-vzg!+h6GTI1#6Zl&`z{T5I+T9Se;Hi6 zs(1daWIRqSxNWc9g|)qll7{RX-;VWh#HMQ+6<#2)!%J2;ur)m!GDbr?FfDf!No^(! z;_n)TrCYwUU_rbbtwsawk|qUsrQml7!8(P6bXFU`jSS11r);j<*xwDI=?+3;R;~CYvLxQW?hOm=$E(4r zQt9R+*?>r2`B#Rz6!Hl|qY2U8%Ve%^e|6;t_7FVdJJDri6J1T=U=s{MHDGfJ%=L+{ zH&`g3ES3(p70Wa;JW(Fe$c={TOr`i0GE{HQ`SByWx&!f972vL}k7eq}vqQCsuM*g< zC1=1^#OGFw&cR7veT@P8&Ff@1 z=lpcw z&kXgz_OTkfgEaQjg-=^>U=Y>jb{K<=VAG&^i3wVxgX!FsNS*m6Tsj zu*L4147^s&dHIHa*SZkLE8K?ylLJkI)quea>7`XS_GA9fe`xSK3u71Q_gtq?5HA$h z`UiyJUaw1q1CqyeOqcnZU^e9~2A)yoIq)pr;$G#uCJ>9vKp`(9{~A=ywyZKNOiR5Y zqK1u26N=C31n(vmtk3V*WwkF2j!etqQ-xnOLdrUgmN3@StgEBRMF%2GP;0U^+qcO% zyyMOL4%9kUk5_wcgL61kaWw&}V-}K+7iC(XiV^ECVJ0+Di~Ko!9Xi(@nLQB2BRp_) z@29m268IQi9i1$-Cpg|)h&+N~u4c$^uH_ZRl{F;+xi-8*PVX&i?)a=$O2bRIrBcxs z3Ww;y!LhM4bj)1fdl_)$d+_863pgC_Q6CN+LLt$J3BxO$E=m5?ohTCYgah16q*Frt zLKVg0e;em^=jcH#Q5Lw4T=m|5Iieyu>Bb=!Z7;NU$)v7v>W<^N^3up;;i_K942@|a z2r2jUAO-mw(=GOZy+;#ae1ZO?>hp~POcpF z=BRYB)s;EB;rwJWIVk@NYkho7#(BdX3%;n;6vxZlyTg+ODSnyG3E+l5)bH);OnX|| znTTmTBdhNdGKX{De!(gPZ0ernF@yJwl~8b$J=H+GGfKG4ftB$_&mst8mIAE;9nn}C zuHIq*gp2G;TntotNRcQv;?7e!NU=#FWw1Tk|0bjT+REF$thEv-4y7%bG98e4eTauv zE;dyuQwkg)ZM)^z9t*1AneyJ0!IyI~?kU>p@23Rz#y4lc*2t-d>htF*GA+kt*ynUus7_uGo&+aNhbdWJoa%p4iMFKwTjlyXM z7{qf2Z|NFf5)h=}MQS=6Z^WgL-GR@^$UU&-VXIypA3+P4azt{qNLh%?XcmcvXg1*s zG9GlyX6R#vjB5}s%m#cLjApv!9y=vU+t@X-GIzN!tr ziVycst2fGd;D~RXNL^~R=m@c)%((fTBQ;zU&lUH?C(xn1OC2YK)n8rV^+V2S&uG(e z%k1k>qDFjr`x8fNMZj?vEticfyjo^%gJ*xmAxOrbq*rmQ&-w z9|w|6)vFZ5*3xGd`-V);eNHh2_R;|mBIRa*X?3LQw`96+dfP z`DK2z8Pa5)495v{?wQaz>iTe5@WxYV>`VICGoA^_Xx-sJ;gEODi5Sx0lH?iG1Twqo zaB&69?|lv`j8BTwQ)Bpq&PTM%8uMF6 zZImC+?%bqT1R)+9mZgEHEUSaXq&9dzk={Ii^xGM=DhWT)dZi2ssTeZ+-dtOroS&wm z3H%PgYxdUM8*Jz&`ocmv8;B+}2y+gG$t|%uCFX75o?GsBpzpP82$$tRM?}mktY<_u zxQKLp8Vg^|+$cO@cH=N-s5%j6+3yM7%D%jfhnx7|{M`SF6-no@<94OI!W zxuiJIwZSfOGt*i2dKRt%GgxTtw|9L%*KX~!hQ+>eND%W~G7hG6lgF_7%u4E>{luHM z*Psxt)36zjDU8zC?*H}k9(VB9t?78rU~(rh*UC&5r0kXl-m(e=@ruFwQUl#`py)~U zH}rNfNx|Q3YeF}&aEdU>t>cbTWmgP z0ezsUZ*4Begm5P_AV1OmR@yS>FwB%Fw2q#Hy#GpB4WSv4zed+p8|PytThL%bnODN)pT zlCr4^gD1Z_;n>5kTQCj3-noD^67s~&D9K##ve{PBuUlDAuC}~<$6dAhbT}lY<;tuq zF@ceOA$-0F&?-Iu1Xx!eefGVD)bQ4hFVtdyP89rV9Y;LXElSVZSfHf;>A96lYn7(( z9`};Slx*ikI@{7FP@T7XUcp9F zgAVC+v-M<#&8z2lI95M@V$PE`Y^8T?&$1jqmA3HoNO|D z{K)P<$4S6Vje~VQ3tIP24$hC)D2tlQm-yDA37qtwrF&7G1nNr-eJAPDBM*OO)e6o9 zfvp__P2OTMSWe2xJ+}B_< z$nJc}LvYo`Eh4bzPCx#P{nbQ>cBoFEe(}f71G?dH2Q(% z!8Aw^Mg1NYj+1*GD5S1%?+yX|54f@hTwP?r6IdTyobPu~S-jM}I1-^LMutZT-1O@) zQ;gpX*AXpiSnYvFCb!R4N0*Qtu-qw|!duvabPH#%)qs-lE0VjU_S5=V>q2xWn4U279#!R(zji<%S;=JyT8X2B)2Ll?#M?0HQ*suNE95k{*mXl*< z-ur8|)EX1V$6Tw!ljQ+-YP8Duqk_An@Itb}Q0@U+*8GD7WntH+FIa{AcpksESTR^G z6_3>+Pr6g3O&y(l0d5yL;VlQOz?cgAy%(}Hm#b0cz^}R^LLy|WB3zxS!u$x5;bZtgs9(y2D#MpGr>mi zV<(4%*<8q=UJ~{?Wxy%bb*QeAf@FB3CpU7^g@uml2}Sz$APcd~?>XQ+o+hlUn<^IP zp(b}ED0m`w)3?$7qFdmT7viP#+w_HPmyktZergq21Rvk}&Q^O}FV;_#4ZbPPCL6nn z!QX_zy9KP3Pv3Q5hy05=jE07c5$rWtDNNWyESTaSeeJmyYPE&%bkCvIfvw;&nMZH| z{U83Xn9({x1FxR)50mZk>UBFTypB)l8+ywsi~9Vu+l`uu)3NA!gf*F!SCgau%{y$g zhIdEb>o3X!VCkVey#}m18~aZ(gpaNH(5l%F5yDG4D+8T;BrR#dq(`fVR2{Hsh>>;; z>;0LqYV!#TJOZCeu53Pr>cVVJcD!+lD3)W5>tKT~3b*fE^?D7b<9&Ept}JFD zi$fF8!vBmU`>SEsktTfi>6~3o6PVN50965YNVUV8j8~s+trkB{MA8FWK6uNn`kC%c ze3=z}9M|rbY<@Rdy8Mt3}588!>LfQ z-0(1pi(9|8SC9TBUFvy(Hf&k{1nV6mT>qS1TRZ+FJ9E%7l;;IWOlg98(KYK( zYSKN3ibOGv1mnr8hm8Leso%q&9L2=tH?;8`I{^xOE_l_&d6hzN~E)4VQnBdy+Nl+DPVP`9F7By;Sjxx^YFg z&C4ADt-tDLPp0}QbKqXKaXOw^n9G!7B9#itQKZ1Dnl;Uv$kurB#a&jFKKx<+w-uqO z-=}#fAcPk5l)dSmCYOti4i=v4vun`+gunO_f+x|D^rd;3goIkIP|vX7^!eb{_pHhd z{CeFIG?ngCV@h8j#`ub=s<}eVOfow3RzxdfZ2jd~vQi#$N(Kq55j_9|4GCF^`H<>Y z>UqZ0^hk#{vtW@rc)%+gfJN z5rz4PQ`n2w7cMA=#^fk>IHc(AfT?8=)p`rj>5rX>oL>K5kTb@mM%AR7@st5sRWvRF z@w9HyM^?uJcuze$01UO7E0#?R8ffhg^tO`b|hVafk_6H=qtu!PunPsx)*O7ja*1kYi%U%bg;$;oPi{M$; zfTfOj^(Z8`Z7gU-r`H~`8k@y4T9emOg!WAh8U+r+aqBg(kqd-NE}^j`Wh$iU<~Lp> zr@%kH`pPP+n2A=5hDl>-biQH2NONBzt89e>^Wi1sb*S7jpJpdVhwA@V8e6#Bs`6zr z9S=BIAl5AJr_0h9h4yoDnlb%et0^={3Wb}$u|E!eRptHc0MJ^5)C+p)NE-6;05OkM z@hfEczH$GweKi>o#>bjY;xR1^7t4GfWSNQjqtaQTHiW1|=5~W9IpFMa3IM@Q!wz>* z6|No^54Uh*;C@sEzDk%$@ zz%->b(^S~JnVUnqorO2l55K&{YHk7VXxt)AN5IKP@v@hqeE~h-H;~oxVSQmJ3i0ORXVAOoUU+Ul+*kDgMwF9$gX@)oz z@)reEZ!8`Y$6Xm$OI;A{Rq+6wTOiXCT#1MtGD4w_2F*iQKP(`~q-Nn=2N=c=7dG=_c%MiyT7oj#!`Y6s zr_qb8mhWV}XA7tPeycUdU3hohH_S!^9&U0-$dv^?KActS@)(kVhl_f%#(4YVo)m-AZ$^$gt;qaC~cTSRpHaC(u|Tp!+^NmfSv9u?v}xw`Qs)-}c!GrP^o z9c&oCm)(TMOlr?!%F}{I=YPq`@wm&35HhC(Ud8K#X+PPO1A%n*VN{$_K(e3h&tdz1 z`8Ju3+h2ObY6SqhABKb&qWTv<9qpHiM}TR5+C!SKe#RFTFpT$SXK`ahT4@N4!cs8p z;p1(Il9{x@Y{EOF=GBW&TLmBwN_K{;$c>D9Ass=lds>!H>(gTb$e4x;RJY{0N2Of+3#;0Tq*? z)I`E5ZB_HWIg?H`z&0EIkcOnZY;i(Ho;XU=|3Fc9ozeV#MBqN*6o}vz(LMCQAqcIR zMPCs~rw2j&fsW7vwDXYgImKYv#}?AXgiKZXk#7Wv7`5ck$K(soJJ2{j7+*+F z7GfTb>b!!XdJ2+Dl)&AW!`){z>=Ux8w>riAcv<{IRB2$T1|P);8Q)k>`yi(u5ZTr& zO#8-OB0+p0zLOh>8GkT5Ny!}wMchHH4^9EAXu05>~DgZNP56o%}j2GFks)ifQ{*t!Cow^o5q$qu^J zDFFF2;v29*|FKI|hY{`@3wV&+G3Plz9lsP`C6+0<*BIuK!wGc~TtzJKXJif*J79=W zP97492vW7DU4=p9B(|V%&n*c{9H@>@0JMyxvjPz2uF>iLI%9nwV&Sc6sRM4ndsDN; zc}R_97)Evhy*Q?Hszjg9vhD;EN4y`qE&zXl0wU_4HNKw{)n}Pg3#^dDOkC7`uEGe~ zmpKPCdP@{cfqpFd$(}ku#i`RQOJce>9WjNF*FYhK%lZ)|wJ8Xq zt7sqipnAF$Dop$|tgap=y2yP_4N1H)wOpJch&Ugl`YAWX>0WU1HMkHfQgA`B3w}kW z<$k9iT*u-Wl|BB*U!1ddL7>S;a*@B0@{*B;Q^-*#EV513Y8*j6#a}A z&}iLFLOU(^G1C5ZtADbNDDdD4pMtzXq2L8+J&<-c6aRM${54swk2_!uuMf`o6fAw?^g^3vOx8J#CLn9W3R|+_hW`I2cvM)z$5TyllRC_Fa|qpl#+@;=Ke9k8xy7lVg!hCGF|*MSAO(Z26k_m8wQ!=2-7&9_&{9Q4`fthK zE8KrZD^8PZ@a{*Je^9$xD)>0PgEQn%UBVx4Ayz8WrUusJlCaN#`SD(6315)|OsEw| zNP^hwcaod@L{{63@BU@g8HNy?y8$p0I`GpA&p8FahY4?F%f`8W!Jl!n zik8n=(Cay(b2?BBefor;%{oMgZWSOj(4TH3QX^5XP@T{eLir}w!ggHO=k;J5+h zGurx#0`Qjpg&IQrzcWs{n>YwA|A$kq37<~up#S2u2KI% zQIJ>(LNbB)P9v58>-)1g5IRS{IAV1(02=0pLM1@ci_zu33t~nODCd~?>Y}=t1EI6$ z?wR{*>o1AtHLYi-42e_}Nev_5stU-VAnQ_cN{JG>tkImq!NENL{yVH<1-w5q8`5J3 z)FuY?r9}T=H$~@kp6~S0tdvtxTQaDmrSqMJ-a;0~Jx&dN{EcyfuS`w2Lw>5H&~Bji zCq_(j^5&A!`RVTatP>JqQQ&@vgRogylhJl zXz8T5xRuP#W1sJ_>Pg|Hi6#7$gg0t55elRTg`_$f1RGEw3!H@$jJt3QmS<<#&+E|M~nKpV{Kgq!}2@qSzpYh9zsKh?>uVj&$?gk6FkxUKQTo zKJ~Kh|G0z`W3nQ547y}ukkeFFO{b#KaU)1K$z#-=WKX^O#qmS6Pw03@{zzXrAQgus zrTU<&%S%SY?CJutTbKUpwy$c?p!tn~LP&v>t^fa;@8W>D`Ku$ZS@1FVfVwL(n^q$R zlW59&3qh|jVOT)&<-0jGP&d#K%_W$StO6e{$N0mL8>l{^Fm~1fag&g$YZVtR$jyT_Gzzf1l!}E|Nhf^q~i8Lfr(Nr$!!-6V7UT?@)=Jx1> z)Ilcl&|I90IPj5P^ZD+hwXP-bX&(4D3P$J>g~8D-CUCCXTX#2tq~{QLXbs5U$)In# z|*k{H)cKbwf(u1_0*IGDHido z9=Gl-p3|1j@cHIUTm%|ztC9C`z<~0mQ|fZOqhTf53G|aJ)e=C!!ZV(NIQIxwh8Q7t z8Y5pWrg(rPkjii##lzQS3PG9Xd=VO0Q33(LXrdc);cQZ4BqimiOV=S_4S|cf5YY1G zOCm8eEg`%7ZRfLac$PNOm5^@&TVKSU=2)2VjkVf%F9+($vy1GWb>iEaKcqLJ{|#{g z1yLAc-S9Aq!AQI|)cFzJ<#QyiyG{g<)s{`C!3wx3_P#(+Nn~z zo0pk^%VOvFAsGBML}kO?q;vzqt;20;a~}uV=Dp8uv_?1sL<5juynRAB+g@NBE~Lad zPq4p(i()mX7n0ZoDpGANEF-7bvSo|EsZCB8Z_g*kaM@UcmsW(>MIN^8W=KX}QwkKVB;k#T#4pu@fXPYKLQ7%H?9~Q#v>vh|V{bb6~Rg*TKV9kruwXB50y*;qCP%X+poDA+GJE68*$-u%Q5 zHJBeS={PP|d_I53n`ooxV3_G^wEDV|ID{|z^!e%2s~(G9{7l7WZLh=CIRbiGei%jfItykc2XFWPaG=1j+%^}inpXx@*Y6d&`ZZPf6__EoN8%Vj`Zf#O3&TMsh> zUS9a>z3Xe8(eX=d2L^*Ellm~PQ|>5nyRC{caL%q5jz0Rn16|R!Pbn)+%@h^PQX+^4 ztK*QrvQ7Bz#Ag;Xj_0(^RVNE{^b(*TOQ&eo9fsK60ELq&yAU{@0_l}g2>jQfkb(bS zDIU6%gr8L(C3@kZ=qCpSRGLjI)S^#L1G|~4Q~^O(#VHV+{LSZwtR_V8@$zwXObJ4^ zX^7IJ#5Mu4=a8JgR-<99)?v7n&Zm+X*5iEBx^3cUH|Z-qkG` zc`4o=#Xh)+R_FdfBKWthn>C|0utEGv=Pqs_qP7`s#V=sYdL*fnoLc6Dts*P%i*KK_ z;Bb@foWWMS0fnbhO+I&EXf!d}0zbroQS+-a!85yNv6apgMB_qI2bFVkM2D!plKd5B z?TCW~_TtWcOu1VM6+{;wxFX5gYvExItaL{mXaL9{D&>9X1Pv@x2Gjo$`oYZdU2XAo zbXH7Z)ElHzr{M8pMDA0Yj?_mc7DIJm^K|mzm znra+YHoY~-wt0kXo9`SrxKgz*W6Qo+I-rIWG2Pl?HyM&D=7bXtRKbVZPBTWtXiY`y z+RgnV4^EsNSx_4$hc z{|-_6!aXSfe2@G`5F5(hva623je?jwe=dspR~*tCU`r2 z-gMTLWqyevXt*B8iz>Em^C;=wF{cQ4jkeAbigfG`vZt;^AQ#u_fUPCN|Fr`IX7=(7 z$gfiFpi%Q+a%h@2PRLBxBD}iyQ>zIPNat~w8{@vJG#&YYNhX zdSk8i{UAQkxIi9&r#RqvceBIdIGIHe5J^>y>2ad_EIYlpXdCUZf&PNM)5q zK8T~&X~w5hI6V?LBCG*iPjJTRUg;a)AtSqIwsYFLL5gS=brf$9I{ckKN z1l0Dd;f)JouE61H!!JFWp!hyav3Y_ZetUBU2U23jmh8815CJq~i>nB4QWeFMrX%*v z5S}($g*W#7+X6=MwDRk&36xhC>Bv~x-3E6oV7g(G75gCBM7G7r!|%tp5cI@`-jJ$vS1~=R$LvJjeH@t z@~5Ad5&_6Qpl>ejw&MW zlU*)%3#V2vAImbS&XK=Kv%{i|J=hh$;JmQoej!$~#`;Vbfp;Tu|=F5UX;`Wz$wd_RbCDh4qbZUbv%%1Hb+5ldhtyW>UP=fkyU_j*<)D^W?Ptbj~&l=*Q1= ztrs9TS`GCW9?dQ2(Uf`k5b##AP7gZZ9A473L%7x#gZM{p1ej7<8}y(W``hnbo*_fs zp1w9cEZL&-1v2?NzkT2Ol7bg>opKqGe0?^YE5Zh=F4Jv9K)mU|biB2587>=5%>}n7 z67)x_enDi*zDR1^$1~fvC}4Qxvdyv^(_lTXl7NyadxcEx0tZaa;@xtQ>l+bNAsZs`P^qdxDd_ce z&)StLczgQ-*`SIgim7X{<=MSNpSb=^*pc@4JO)=eo2Ggu*|1m1aL;gHI^Nkn$5X}= z{y?$4=dx_r@g~|%pwAt#Kdj>g?I60@P=IG*;~BZbG@_cP*=t1BY;m9(-q(IuDx!;`1$Xf1bYa*7-H@k-_sShlFc<5k>OG+Uwn^_P==OXb#IkMbP4b z-m4qZ*7n#& zL6W$b?&38d*>X2~(x&($gTIID`1>ARW|e_UaQ{}`DCXm-wqSuMGp70lT=fmYG6x3y z5Pe&?3gsQ3BH02QgY>ae#E(xk?e$j- zSU-K6H*{WZz}5UAumZ)Df=For5S72SViHvu(VV!_Kifo{y|t% z&6bnKyw7>>Lc&KsK5HSTAv~vkwRb=B$3!TC)VSyq6WT?U0yTLmrGhJ})*RtnETpDz zf!E+zjt8!ZXoD&>D7>8Wg}fXjmv#lhkbT+D2^}GS&>d3Zkc2BiF-AZTd<_~GZibXN z{!lu|W!oALKCh- zNq_%uI@}o**v`&@brKt%ph7ww4wi6-@oQglLY)kHWHr3v1F{VEe6;?q+O$H#iuiJA zOh7;rI%rl&LpI(%U{NHhU{wxZ0;20(2Oq@i5^JP^kPvDDHp@to;l!c37mks&Q(LoLU7aC!=mWIR#mHI%cDHlpK*&<;- z*)XS^!cn}ld#!uIn5#y#L^D)Wl2dxJ6c1p(NkwexNFQ@xcG>j6yk)h<#_`VbB7HIy za|;r~jtT<7aRP`oB0rNvpS{aIA<|)sQ%Hdx$U+49Kuv2XT>h-5Nep z-s3IuW!&UvxUnf)iGqN2h`M~n2FCH~wrBLoz*c&}XqNSQ5uG1I>yq}f$S~r;R6Tcq zK&B{cT07rrxeuRgTcj21SI`p~?;WUoi|NNvT@(K%NB*-8R>OPS4ycd&bfm^^)Q zoda85+2t`R=cWT)<5Og<)~-$miQ)URCmy$ez(vwG(=$228CKmp}HF(6o77I_K z_+MpP1bs$Mu0u{KKi)BDg;LSS@C_xeqWk&ad4Dml7(`wjB5nD?0fXDlpq<_#oIdP% zV9~h1uGJ(inDf*pR$FvDy=S%pNtR?z4E1OAXrKgBYL3F^WK?f)ps>Yy=BY-gvm{3A zs?W@X75Z-SjDO_N0jI`=eG8Q`BzlBwup~eENYg|?&ap2@myR#_e0gnoL)H-GBvZ+% zS`%dS2*c|=?z3C^CArJobgvCA;C1fx%yg9SdJQe)NB)%LgOrPLI7QqkrVxf~2f$+t zTn9DD1NkZ-{A2mP6}68A@n+8};83MXu9Q*A27w<|2?p%X9VVyB2?w6R)8ym$nm(Vq z02zlx&S>Cdbz-}gQG=c?S>s$W+bZxC8T@xwer$b7!(Vs~gdp00@AI>sUQ^bZ+Z%2j z^}>4&P=~m(aD<@j5KSC@G?>o>mp5@sbnwqEkj9d}Y@p;%Hu3k zBh*NT+l;|k?CVdP&+2CPzaita|D|sqs(lkqcy(H5kyQg!!VeIq;Nrpx|#&hSWi(q-kCN2*WXPCrE}b*0vfpPsl2-HOJc51m-66P$OvuzT47 z>qFgmLwrMFEh@4@nwrjuh)Hk|HzF5M^lsEj`5~!Bj`B4}7+Uiq?M5V1H={eyS^hHU zlmdy_A4h*r?h}u!d~9>A{;!=L%`X( zs8D_r9fDWcYXbF)AYf4rhd?i`75IVF|Buf%K3A(hh}W{q{BWbY4oxTyC{n3Jcg#R! z@tT&5Q$*lB;J_1j9W&22xh#&Fj{avHDzQEZ)Rl-9&XtlBkzr=3AIZDdN~e?o9NZ5F z1`366q_c_R+u8)IDFDZpT@>+07+_bjN}eWm?+2Zd;5)!93RUF%7^*vpTCPVdPEbFy z&_9vYb$p0mJfW%&0 zhluiRg0JIYOy50X*9v*txH+LQgNtCIry8L z)fRTw^Wf2N$BTz8SPR}(KfPxj5?@CyNz>py$MXSLIQ*qEP)YZA+s-ex880eK39k9Hn>srET|Bane7g)WSD(Fs4xwEoIeNXX%K12A?8w|}|g6&t#? zeXUk>|EX&yig)F2p-Ga4s>VN45lON3q9%CZ(TwdL>;X`6m+VYuNDvPQ(Kc|-LHxuS?+jL)kV zn}cT((X2*%_>n)2*JB@MC;S`E92_g*f1?9@FPPnSN?r_-_gxx6u)68#h% z3kxF)T&J83CL&pHHxtW`xne@=(D+TLz90D^v2@($q7^s8$>GuPOvQw|_@1gJNM>s` z4~{t-Z{E4RHja?Bpu9XV#pP95rZ|xr5u>7&w5T?@Akt8)W_cmH!Oc8uhxMPoX%&Nv zb>+FiV#pUYnxhSFGYf@j;ec3`F~UX%*p832Z3|ozPKMf((pbbtgXgttLLdY@Zz|;q z7!s2pPcP*Zhcw_ik?JDA!Cli@=kW0S@|07TjF-1>3Pd6^P|t6O{jd7`LLT5YIUpS$ zY+DbfcGJZn#bqS3f@#7v+ja}-#HmGZIh~l_wkQaO%DSxIoe1*H)`!8G1|;2wY+w-Y zY&#ejP{-&-5=VPdT$1(V&apMuxjgL6d)K^e)e8oI_T524OtmH0*1Y}7a4Qcw%(4$Y zv|zwG+_4~djVK3ILGpP7Ntfk<0+iAU%S9DNY&N4U&6eLrTE5aL3dt@zHwKHUtd@HO zW>~_OMz@ouynDyT);APp^b&zqS zCZpz&+SZ;4`=a-RYW#n^y?1~VMfNz})ww#SNji zMZEmELolMEq8I=Zf(g?pDq_x<74^&sJOgKroZ;^K-Yzq9|NQ>_{qv@~r|MO%diA0* z?l%dubq*d4!zc5FnC#w(RF|CK;o-(}ST_nOKu87?lOHyG_M(bgVDPwNan+zGf8F2*zAviE9b#OSHxZ*!-2DSR}`ba-G! zYKx}I(3%YI5)tP1s(OYlx_IC&_jVGV)J+-9Ww=t3Ax5~X%tVwdw57mCRB2v_VPbQ` zT^wVFr4gnf7Jez7UTf;OK<#p1o!7xM9m`M?0?>sHg6UP&zI%z_QTM-zmkfO5b!e%a zr3!j7O8w!)BdT|o;nsb1Juyh|$A9OR#mUn^At2n2Cs6g84h<^F|NiRdYA=I(-2Ugi z@?@3?Ph)5Z9cIhBqMe|v;^n9RQct4_i^)`E?DWNgwO~#tx#Rdo;Vb<9~Pwt8sMiswYg-oqda)*(^k@pRAV4 zS(VuBMuetiDzG_JY#lkk*I+l?UC##l!uW6Oj?5mdjk{?Po!BST&Q^$m@_TtxJ?ShM ziyQ52EOQ^BM5J*(*94w4%OTeG_h$Oi6`oCkdPN$1@_^H@LQk8(#r(ULch|5J_q5gEm+UIv|#!Ylt`(j}Q zVGeP}*_oWx-@}-ikk5yUVVWPn8C?m zS9kNeX4qOssV{M8zbLq1Y3UEkO>j%U5@+Ct^^C9_<69U{rivU-WYhLoT)UVU z?+JS71lu0UFf;)~nFbk*E zFlBtT2qNig>nV}F^-5%Va&(+G!%`@1}}zR;vPfQ1J)s8KbPEmDt1Nsc*B%363re3sXn3Tq8o3 z_iox$&$1)_N_2+bU@M~KP%SVS9+apGhh}OGUMD)Q5&64UH&^pKMCcdEH=S()gwSP4 zIKqgU%8UDX0-Z35W0EPMWJRf%f}k-G9*m9@!UA1szA7?yR#k$uXi!;I{35kq1j ztPH3IrocCr?u&xAFI>e`)-uxIWR!EM0oHTiVvf~a>N>n}gxUz|!)7K2ipNn^65?7U zzkjKjq?_BoBY2E55j_a8de-UIW21rVnTpCfn0UC3Fc>z1sixc-vPblnaGP3>d*t`^ zhQ%P#-d1ONxJ_Yc2o!}=hBzgvMpAv%4u?2vJ@Ts$-dpX7Ed3?1$~mUw35v??)?li( zp-M))6yh=#C6T)AV(u2#R!5r2Jbi0e&AsLZMEULrA%T zy!zCKswqwSUFq3S;PqA{rWmd9BOplWOnFT`Ss(o=w>-3!IGI~WDwWE!4J`tw)`b-C zYQsoQ#3iAmyr-!*R|sRpn29!{HbGcJg=!FBv|7vSaVf8>BhAtu8o%<6k$K%J2N0Tv zp;keW1S_U;Zc9iSeMB|m4LD`j*E7cHy7Hx=85zU0#6b1HDW4UwjZl~jho>CgdSI7^ zOJ+SwjDA&qHay)5E4-*G{sc<^2YfcLQLANuP^==q{@*RtjtS8%nOi_wkRo8!YBx+dyqKnkD*Ct@i+h6z5}mK=Nx}3z z`bF#z&k{VtQo-~^;#mt~glKj=1Ej$S_3=lTi(l9CfO=`59Rgr8A-sN% zq}8EczFhIfi@RzL!T8ioiC!{Q1=Exv`?Dt z$+8s(NyFiUw_w7jm%a1OuCi^~u+}c0N;E1mlm3t855&$z8Q85jc*`HX>7!i<;jXM) z#81!5ljagRmvgzjXB7MO{t;sn+$3(pd3#gFI zmf_n0R%0Xf`_8*wtmXk-QT4tA(C&PYatWFjAsla^S_Q?0uvcX;`vMybYid_SoGNBy}!$xNNL0~BQ-tyBv+tmRr^da@k))i#H zOONXe-2iToO6@EMx9HX>Y&=X1(<54RD#O^BEO@J^&ak_X^w?I%5~2?&TUvV=FU>ZO zXBu$}ACHNLIWZ7(yIVfxjOVIFrXlF^3T1YOPugI6je>wV)FWxJg36i!Q}?iNH+K8R zD_*Q-10qCvz$lmUiE;b(&`{kw1W+rD^7?1a_-a>^TzaPRwBNB0Z~!Qc=gro-fN~Qi zU3c%MdeX(p7tu1fmuWnYOa`wIN^PdxgD1|b4=nk57glsL^)9%X8h}uYj6Me4Oznz1 zu^Df<-~W1ZHKk71Xp3XMGyTxm^w#Q1xfe@b{hwMQ2=b@lauAmV!R@VKB=6kZKLWomE9GQsyoHPijLR<5XLGU--jYcwFEE4rK< zxx(UH1{Z;C@|E>uKA2uDj!iej^qfG99nv16v8MBg$D(@d$jSS_Fq^BMBLe>Ew?qd6 znRnPyEcM4E-_xS?)(+|iab`Tf{HAYqbsLCP^q-VozD$8C)s37gxlJ|3G2C=|rib0|Fy7?fzv+%@Epv3U_L#iz0AJ0NGm;Ep)=GOa zlAQ!LjL;bgMbmXxppS^4Qn~bjd#hRJ(#Nzb_$6FET!_v9T|J;LEk3W=p3_&3F)3|thFvIJPtE=1m)S$5=_dl3-yI zjRtNkB-SXtC$V8G>xexFkCpD-&x`o|XjH@LxjK_=3r_lXR)1QpM1-!OkA-^;QF@(p zKTg670b+hQyvOjy{}djB@79y2>1Xm2q1hh9x=;>FO7V#~E0hDtj>IdxKEf2j;dxpF zcIqQnJoW9awF2x^H~l9m17744uv{8qZl|P}0msLPlr$s=u~C=Fg8w5BH`ntz^mQlQ z!DejQt;B3Yp8?0$$cCSV-Q>MYo-r}dG4d`}9rP%raxw@9^c`WInw{QPxS4lqoNq)L%y6g>vC4YS8 zN3!=`7HdPCR^YqulEJ)y`~Ay1wk=&cVzmM`Yw}lZ9VLaN#)4-`k43AykscifJ-X`s zC(qiIGETQvb|^FEbg`vryx`?rHQUHVB3^nb)Q56BkC8iHMD+jOwr$z2Ob)Opekzuk zRiqFXc6TauS5GgAAg8(X^AD>jGj!Sbozm=0#Mu1+RSh}dV#sQ2OeGtOHuxn#la{I= zd@F9Jm(_Eo>DzsfGi3>~XL)9+6i=1Q%}x6rTg>`tw3(@9d>K!ir#`>*++CG}uoVMu z7p5m<<`xp;&4zgR46+(rMs*Yy*W*6Cf+x;1^-LzTXjL&_4g=Q8w7O0=I1Vk#=PZ8t zqFTRx()|ymLo-w*>c_*`0y;{PcZu>1KzVLGEs#2+Zc~DAv~M618>n4TU&ZR4S5FqF zTYB!J)0_U#-N2RlN3)*Ib$0G8Z-bcJ^)~(k$%#9zxo+jIde~r-_(iUqP!3M^@JwC;CkSG`Ym2Pt1R&L~)Qqo>WFDKLXpe?J&8sd){?H_OsIn4JLla>VC z&*;5{w4Fot$vJkD1#Wl2f;QS0*8Q>Zo(YxY(Zv(h3m|xN@m$i~dSYYi?(?Q)_dd8{ zM$7|y#uQE=owN3>_yx;5VE-8zOP~JRC~NG$g`B(y=s;C?Lmc7WyeWcm(!bt=pc5lC zi@{<2X4`bD14Q5y;v2ELWHvXF4j=|bh|F=IrTD`|;JSPyJ%o+voiRI_2+vK8n$(+U zNjvGztk!p=7LV-C^qVw4*Vh%e_9AsKObWgwI*a73A75WZa5!Dnz9X@WJ?>0G#b}!; z%ca0gHg_LXQ194i$67GXlW_3Z79HIuSn z(ly{Kza!BSWvLsdvK|`dsiQ3HZPEFWlh56@p<3)~-2ZpbZ2BOp1bjFxN+Iz1PmkpS z)=?p>2XHTFKs#74>}9pAsD>aW0ey&Y5D_IS3LyxKPJ3*~SP;o@#wFZ;xviWBZm=xJ zBSBJW3xgMr(WEPw9v%p_MDqva@_fc|#8Qg2!h%13Mpkc>E2H9)pj=Is5-%6xCr%!t z#me2(j*X4YBt@4Cb%Pl+xbTvmVaG`u$Y}R@lGSH|Y_fF=$#UJ}Q+&$d^UYE45@OOX z`E4YS_Xx4VGzd~h*RmI}P``E_44=W*(*Fs=t>i)(Xyp(%wi&KDMB0PUVq(A=;LjJ@ zYk~w5T9^|#7kgtRyMY9P2W`Y)LO^g`Pkbp%T=4e-J}y{a)4*36IA5OfIe}bBnF|4b zh-Lv_6y$j!;L_0PFOq->yZp%8$LtXFFYwT8{BM3fU_DTTu(7@*9-vkoAF|-(EAnS> z#iFvpFph7@Z+%wN;pU5Vm=Lg98p5VRLmW$Z2db*QD=P1aaF=;sboPh%7T^$jWWx5- zGu<7zW5)Trbx6{q-`Sp&{NT?s0Gz?~$B9<_hK z4GqFZH6mR705{s5ue?}A8$dLmD-ykmu^zeuv=~UNEqoD#y`iH8UsgiA0UV-{1vDFk zpjYpFqndFPy>Zm3&h5}yO@ZpS_NHdqYPVHU_n0f>CpL96(lx|k$@!$0gQ!`dX-9k6 z0|YQ&-&KumB4m}9Y~5K!x0=xJ`c6%MLo}yJiO(<;*5jcY81RdvHca&!66PK~0cZ4A z;uFR+RLn7d0~cHzCy^{e<_DrOJP1UZuCIKNQWAGU`*}(XIG+? zsL>H&U7z*4Acj?`Tebm3#H0_C!k<8kcOX9qz6d9RS3suC-ml>FC1bxC6%&dX4%}po z^xbw56fEz5^O~i*hGaC@I$b3{LZYnTcTSz)cj_UK+<=-f2fK-2`YOW|9J__jCz((_ zXBJP;8E+K$F9Licw|~+3jlA{r^;LYk(M{kCYcuKK*{-PWh*JkyrY%AaZ)SQJbuH|e zBDLkt{ifvg#(j%Sv9DJyrujJVTIqfZ1IaRES=WJPtV(YFi8R{Fb@TyUlKM^<1go!9 zCovo~aWs=0djiaw{x+X=6jQ|`had5C^O5KrBfnD5JA=NT{)|3NIEKv}&vS002r-}; z5!8X%SYD16qHyo&FhK%Ec;F^07Wf`eG*5*Xm?k}V0&Jyx2G@0-1|^o!ArPfjFY99w zbV9bBQR{{TeJJ%1tm?rD8ksf-D<~@mW(mA$HcJ0f!%sx#R3dM$XFHDmBl(!Jie;Q7 z#M0b_qm(QosZ;~66j8?hE68|-<^dIYiCQv008T|Av}2wy{p@b6rh@sCBsIoEXOT+g z(39;_4lEq$f50p0a7u(f2V4L)h%SkU8~r;P=8_8j3STeE|G%w)W(Lv>{vOp=M`F%_@Ym zyQDsqn!cn85lahGK9=-!1>6Xfvl_87Qci=ld=c3~rbkkVXo?{aAQ?=yB~1#!*zHe! zSRjG`yY3JlSRUE};MO*>5I+~4eITA?tx3IfNBI`=G?_HHVZ1q>59S^&i6N#N0@Ce0 zQ3TP0luHoN3^mIc9UO`1ok1j9wBfQVtzxkQAIhltn^QiN1I5ee~e z)$U93V^ch1#tEaBfUo~FF-`g;=?JuNpxCiEOwo~=e2H2)*Z;j%kv4i)%Mbi9U`GpL zoSDAofgmWQHx+dwd0?9FA0IMlv7yYBd!xlTlhtc2`bq@%D3?D|!&3r>nXib4$b+E_ z3F6>NJZdMr#@0BQ4nf5rC_H$;gSg^6()hcU%GW4ye65b5iLS_hBKoZ1$_|v8TS|Nq zmB3C64xgc3zG(p;&M6#k7c`5_ z@6pMQVjR^h=7e!xg8Px~Z9Zj1^QS;gD1>IE?S|8bD1y z91-KKvKuiC@B^LY_w4RFvb9-gwL={cl7%tT>9)qnM2hzD%D9vr4G%VgLZp_GY0i@L zKCo?s2*?#;sd-k2G{K@i{1YyS!#qyKDbN|}NkNu1jV_3PZPJMo{8A>*?4CC1xukQj zTVWj!%+_TPR78~m5W6ES{uVcw59$rxi@w?V1(??`gT+#AJeAy(%Ya2%&fX0pIgnTj z1J1Q_vtbC%Ba6ybSD?lSX#K+)D4V_xz8pd3Lqou0fo82Fm!Q zbjQAvbvws_*O~O0!zzlyQ~P_-d4tIJuY9zc76gtP{Z+ir@IbIaD;ee+U^IpZNZlPy zvl(uJ8BdzPQwJZnd2r~bNfcr}n34=SVVZt1X<<)iD>)EXMp@kxNnXo&tZa=|-4evb z^kNcccB|=x;KrcWG_aT8VpI#Ii+fuPoG9k)&MSq?3N-7g6;y*t;53bx2^B)ggzC(tf1?ay=ejM`7ANTW zEz7B2?(Jzephug3Qx@AS&D5HAL+_m<;`^UO=OB5-6Hit14ALK3U*vayez*{Ypl2Oo z+K&h9jHI7QrVJ1KvvFfHWqTtUW1djOO z(Wk4JA#lW)i};0x?{RXJqH0fAkE?QG6gaxw`&@E}9sh}}tkvrm5yS}(uY0kY8{AX1 zuH{xiy_oS0eBdk7XUYe57qnQ0YXnCzIT+502TDDnsfno?&+k{!nJZs%cMZ!7dU4|y z+*T6pRQ26jsKD8S=|Tau%UE@Ec=Dp(&JK@Kc^kY6s%EilgMa=8+i31-Z=IHdu-rZE zKG;h$psG$sclg-^Q24b&>OaUB`o3OLoNg z>)POwjh1o+&4;6FAzXv@b{u5@+##8CJ!uV+hHQYxS?DK!Q6R{cBTF_O2dqyWi^4^S z7T+NOCue-ljX{)z;=B2u*`#W_U+&7hm=O`JtH7rx@Z0otKN${m~^=M*38U=z`{ z6ytPgJQSHIu&U!SlHN_*lO$UbMK>go?of<9Fbe+8d^lMr-v!};3=%F9*69+(F(!>4 z>QlgE4lCy%!MH?%Wp%;juT&RC1AV=+M3`gb~sN$amVanc=SFwtb+ek=Q;G%yFOeC+ogso@Rin%;Ep_`^DVW8vB4(24PZ1%H6P-gmzsRBG`3*2db7d#(hB-TU>N zgW#Y2fIkgJSCPXNxN#q|j_g}%?~$dMV{}=M?B5ofMh^~71lJmH?GIv^mWF6!1(+{m z4-L3*1Iycm8Xdn}a?S#~)7RdsHufaCv2}&InU%dRfs}NQoo+L1J|O<<#OeUg2Ljs) z3t(ET)a*I3oJmHeaU_&xYzP76xO|+rwg{eTdGZ=53CvKGVMhDl0%j5raP&=5zoydz zj}2%5lB+cG2S#Yp^CaK}J^Eg)Dx>H{&6|zQMDgI{)mjv=_;doHsd;J%jNoM^oE0me z5YIrcEXIO)sT|!DKRVx2#df~r%#c65k5#B?PwER>o~y{bl#Hcvo&#b`+CL}A1%u=Bl?k0Dop2WkObokB zh1!6wket60dHtugDz1WybpI;;Cw7w8*fOevSwnISp4HxAOR02Y0i4y@RQXM1CK!(C zpuEJ`MNW;ml!r$K{dC#wO1o`!)8AYQTpFc?C2By}CXn}40*LJc_6hcUrYT=4bioL} z05(U#AW<8;8KwzD6=2-c8;crRJJ0$FrK`tozDN-wZ)5^%RuU`~S@9TMio#QtUro{ACySA}-}_#RC& zbXiO_%5sp^42V8xr(%Wyz8~ljx3NLR(2Rg1wLSkL++KEk{B5;ZkeT;hEBz@iDw*E} zZK~iclBn-0A~Rp{RRP9wc0BskO`jkuUdYH;xq6I#CsBLU{o*=C?hsj zQHFzh4c~AsmVkCyb;@_u;wIBydR7UWi4U?3nB9Ulsi&N3Y0jjJX(`7_kSh))xT&ot!~zai;~ z^7PJxU^G+$#}9?mif;CGP@Brl6Tr$>4(HO%&6!A{u8VM~1hN3kmUSAm$2pV0mu2GUp5Vo)BKs!Pa!vx#lR;oWZbwZhcgH7C8?^MYxitPZAhE; zn2t!cBQ6MuxYsO>(S+Qw1+E1bnjN2*QPQaAV z_YB1j8#ctK>u4FbpCl%{X_G=gO~m;G@Bq#te>OrBcWYTnz(ouF%ZDUT!;a&)ks7gd zh2)$=*s?~oaKpv;fb8)iCV!C^;AML(j`mKP+xL( zOL7wB;`wt4wIxxH)1t;kix5hBL9t;dB3bQOou{4*4t?qQNA5rOp_;dz{%jB5+v>#{cb8x~P^Q>Csw3cXw-_(veFxCiAYk z5m=!!z=vdm2_Zn}cCr}QV^N4I> zCvx5x@WC{uAQ@KJ&=bDkP&rEl9Y`{>4@j!80(+E0plQ;$7?|c8&C8I zyb<$33s2FFv&mlyl4{4bEbuHHaBl&}P-uc-fqb)bl*uv0h{;0OdP56rEhcI0PD?*$ zLU1&C%)6uv(J+)I1)T3g^G2;^!PUVuke2nNh>-}T;M^~B`A(tRq*s#hgAIhwC0tI5 zdn9ZdwgRz>x&DrcJh+)+cyk}YhBNP0ZjsN49&5tfzll9Ka6l&zj!viAVb@5`>8$)x zy~DmF|9{W^L(dU>EvhjQxKj^S%AsEO;D+E? zM5-N7>m=t1B7gpKZRXrc=$6Vk+A6+luqi1*Bt9(zKFPzr$b=W}7YcWWW8JMW4yN^B zQ^d)SN|$pg6VC9u!8Um^>r6<8vP`6rv9m76I#VR800R10iYpg(YiMt5Xau*l35|i! zvav9Y@MgTH5)yfB@9CAjz(=u=kH=^tqR68TPPz~nqJ0$bO9#$pgP6!!B@V72G<9rm zlFgzQs|rM8fn)HtJ;DwvG!II ztQ{y5*I`+tb8wX~J|r$PDW7YybRTr6Dj}U3DukW|vDoiHQ2p17$%)qy z6Xy3-#5pDg5`t7T03MB6PFRXS4vw)zYcyeZp>|&&wX`v6It~l!2GRuX8WMpb^z92` zxj&ap*7x(^q^BPy$eCpC4s!wo1}fM(M4{BWcC%QMRiXmO{UI>Yh$6*x67Ue8TXpKGyQHWIdRO;iXGVkX z2Gi$C;gB+hXU`)x;fhx6V7gv%_LIL~Q_C}+ZXLH%I|ek!v-gokhgDh?K`+OW6ZbC7 zJgJn+Gi%9N&?WnRNPJa`iYm+!GBL=8{Y)klsd15Rker8z{6ih>4TL^BZmandn>eB3 z*l-CpqBoPt4zbz}kJGV#YFB+2wG@O``D=dEOps8|f*V3k?rG^4jttm+{|+QjINcua zus4x2$;k(2z;$)O3z>tJ>8@G?ZK>Y4s9BO0o?g^*`@o27XFp^I88F-eK~Cg+k~ohf zS+xL*{kNx(!H8m&qny=L7DE$?yb8mz9EAIE9<8mWM0J^sQ%jLn| zQl4cxlEqlKCnA{9Y_;CENX|6*-RsV*PJ&LlCOCc6j6u&4{V;H2!Z`~h)Z(6hGk^q? zE+f;+Q!}nVSa7t4F|iomfAp|=@~~pgt#~=O;>+`@s7mw;kmliq zFro{D%BkP{bYC?KOkw@m6zHKe%Or%_C8ca#oo1KMl%>czfAHfM>UoxR-4zYwgvuu4 z0aVo9Gq47W@@~zCBOhtl&&uB=P}W%dX)R9{yw|)KJto@LAWS_0Lgi+Ov1d+F!^uW7 z*~+Myn%@8I$mF^1+gipxaI^cgx0Z$oT16o(Zpb;jb8aQUz0FSD&0-=vGT0Ry5uh{0# zWYLUqz;l<#s5pp68q1fEBq_yZa5@EnG`U%45IrJCCN#OgiDqJzq__7U;}d-l4d_L% zI8t3h0xw!rj~G-JQX!&;LPv|!VkcUaCQ~rS$D5>t7iQWjhe>|eaHEzUjdA%*YLsM* z_L>6C6h%qX6!CW0fuSv#e5Kg6IP3)fdqS$+{|_)LD17H*%0do zX_c+y2@+6C5rGN;soTrs-`pWYJ9$zzg>vs+#7*i#5y zG3NI8jU3a`;aJTLdO6@7gJTT{df{pWE}C8fEVEJuTy={LcC5F9buE(#Z^~WDr$iB4LPYGfFLYnsjzPu=zwL zO0zXi*qzAqT={El$U(Jq)J1N`VdK+HvC!_opBgcCLLT5<66hJMT=HUdg7?s6qkpoO zkVilXh|I{r_3ntIDQ06_E~eOiq&25@?H+X+Ot|jR@qY-w^OxbYcGvFgcjMe&TSu3r zkM&()9b^0{-^F=xFWtpvihQNdJus1$daU$5wOxIa35}zh)xuwBiqoB6pYU4T0Wsij*KWt|YL#`r!A>(@U6!-$=jHX26 zO=*n{>AYYXxoM4xo`-m0VTr1H+kz9)fp}H{?O!+Wr;Uw!>jwd=Cf{m41SYB6Ge1utA6c>*ni=5mE6X|SQZ zoWNeTYy00UfnLacXK$@$%!BL82jpHQ6B{gs+&CDhn4@7z#(!TYYR9?-b-CYKWNR8j$T3h*Vw zhaH{^3JuC&h~wKrmO1FMjmcO}b3>{S?Hb=R*cjK7p@}J>UDsWxiPV-1QjzwfCJ-k@ z{7hJE?2%o{L3Fo3buy9m=I*#4ccdg`L4|Q0s)8sv%`qT{2Jr`zi88TN+y!b3;y6Hn z7dhRfX?YJwD3-=Rm>aN?9_K?UxWjirDGY>4RHj9Ap~Qtob^E)4%x4w5ibP~yu_Pvu z=3K)uAW|LZTtfT>j?X5XaGN9Kn%OaMeA5G;h0w$0yy)0ERH_-inBTL#)Uv?uT9^a( zmK4UCf{G^WJYcg3!sT64qG2%PY`61GAKF6iuu?kkvyJ)<@i!?}!q zbl8^L%X>p7>g{_{P69JkvDJ?$g@GxfA=1?u`LeGZNUbqdb_XvSlf$NL~PE*eodPSQP9jskf3u zyA7@xjA$ec>^x2S7B>!V0!gC@)KKvH`UH7_^~aBwlHG6tY9F_j?5;TA3yL#hLaHSO zI%)|C?ihN9WrN%cxhIP5IG|zyr0)`lUQsr~ZQy~^R=}2(9@^MJH7$q=Ar-u`!hQR8 z5(y%f+0-!x)l|Uz#BjhC1snjF^q~HZ9NelcxOT&!0{!>`tMx_{o!UwmqDNU4X*cO{ zM!DJ1tWgnG3IT#`KneG97WjWQQj8zf)KC#_HnRek=f``L>j4QHX9T9$5eA6_oRPn< zzwHH67=s0e7d8*AXFn;JOe_ea=sb+5s^Q?yi={GOnk@idy$55;j3;I1gs?rnl{^DNH|7dbRm4B+&JDfizb1{IibAT3)v0h_Q~@H7^@|B7mpCNyYZ1;;zGo3Mc8sW9;pk-A1FfPjL~(x7K-4mN=jSTmb5 z6txr<_54A3yRF1DgqVvSMr5Z=e%T>naS0knYO`c4ov zPL1*&?3F;rS_aLJ^{5LLT&ig6aJmVq6Edi*`NirwdRTHkA@W<#zgk7}5}|8iuSCA# zTAEsvQquu`L)mm1CJFhhkrSv_&?Gge=I05v$OfeL0|YO-ts%Sl&Y#xQzAyy8h}+~=(b1R}_D#Dwr>bQ$>! zV#`7ta|qf5uf=_52o|wYPKt~98Mrjra$2XbH%!e0wA7+Yb{sBVb_jI*qXMtuHncBj zs{kj`tP$FepnUz64QHITi}kPv*dyPjgI2SA6M2A0iSi&xnM$#}0OkrVr-uLRO8WS; zk({WgYAb;~GHDfIEMggO#tPPN=^}*3^2QW_qizb|R8m!KaGI8-@vPMc z+l|dQG8yMWXhGUD2rfA!)<_vTsnNWTNnloV-9;Bv3r*7djK|nRAdQod4ZBoM266D& zK8EmPhl$5ws_SuN#BBfa!fK`jJqHX=#c*04D}*A)K?|>A8DDj>cHN+S6)+2r8=800 z$qR>kdcyIuPUt;$-uyYc9%n5an&nHgjvtyoZ_yti-K_a@PCjYK=jX#GUpV2oSx3Up zNhd5=xCl}WEnM*XS&$0<>^<_NT@T01^5x@a%|GJ!S#ySVeVQ`_8qM;Y1xFuo!mNeI z2BN|b|8kkX%K?{J0~)W2a`eJkzZ*K@kFyre!L&yX9Y3^aXyG5>?^A)hoq1S*s377= zN6uZa00bbJwnFsLc&Jci=jR2k~0eG?vz-?Ie1z669*p#IZH7IidBK-iX@)LH~!}#x$ z_<9bu=ltPU1dmDp*5lJf2$qMjTNe(UG;hw({6$zvNf8z-nme=*{@jl3`5+76EkyDn zW?c&BR^~a(dMOsW5x?!kbf@M4ti~36K8zj9z7N6EMF4kUy4TA99^DPVttSAubSi*n zu`RD4`u7psjjtDD;@5zn%6x&}Uhe|{KA}uSpFcG3=()3D{9*pgfv>M5u)fEieB7dW z_yDu$$hq+OBP{4F#Ihy@U^C9V&7%OE7Xk1*R_GHf=toTQl?LGB0RSIjb)Smks2#cB z_~VBb9yu~<_xu&UZ$eDh;E;TX8GfA#UjK0dPSuybUZk^2p(db{$;JGdG@#4fz&pc?A~yD0a&=IJMT`wGRzM?C>A)-$!t;!Lc0_42C0_Cou7i_{Zb; zbitnieA@|N^o z^X|=H*Ogg+D`x*#g~xlYzz?Slqh5OyeElyD#4FguUlILk#BvW}xfEyn%_RW$V?p2J z>vuT-+pwA+RsgKW);)&fvJ7i|a~{CenE38S0I&1{xEB9dSp={YzkP-|R$(VUj?F%$ zh$DG4Z1+R+;q?|A_6M*A%Q4%xIMc3a2Jjko&kk(#Q`r2o8vxvfYiJo(d^6&^636-l z{NqJL@HtjvGd``t8T38k`xz5ojjg-{8+bSVy9p=Hmi5>_SAiX6=A!HH@fNJy*O=$! zEP#ue;h(opW#RDytjPyBRn9|1XXDd)#Jd5@{}une9>4tqpSEKOPhq+@5Z5#KdL345 z=bivo<2pDUd+%%PpO+BJHJI(mGJrK$@EKq#msyMWe!w>Vj99i~54?)suETk{4$;3L z;{LY#`~|x1yHTn!Icq10_8rJs_timVQ)~^un^WyMQTy*lBc?;n6P5cAGR=~3O zTaZ?gd(S#{xI)wB!!bU8)}na}=Fd7VGhyCBq#Xj_r6Bb%XW@e5hk~q<-gD?r^X5N# zHGG->=*^kqh8E3x{OU!ItnW-HA2dkpu7#d^!hne1~V|8>0bS zhYfiVcbvs3+)$62wea{VL4wcNAo%ko%=IOfvl=m-fv<~k!tTVrT06XbFMu9JQU)dl z&ikeK&zc4RS75$><1TRlmisw&>dUy@z3KvZ9H+?l1pu3Ip8kTUpTlo&W0DK;=?pwd z&g}qjKdy@NG231E?|K}hjW|Wl$A$AFCIOoo=neeiUd*-@>$@1Ae!y~9<0x;%`hDF4 z9k}CioaWzS-PWG~;9)!_zI+y^%Gr4U_wEPa`2>K+v0negZ>L}ZUktB;iSYCpR_QeS z_oMLue!&WVh*f$4_mCeD^;HP&#Qu00tGNb8=~Vo8Euwl9!Ra_&Z{tGz5f9Jn5&d~s z;a>ziV`l@|Isd46L&wd5PcIDT;^65$d|HW!@9qNdBlgK{*vFub0^^PA=|24SK5kAQ zW4Aqs+1BIU{T7bO9r$`LKHZMR?!aQ7M|`(P&=D(^U`ITT4ZIz@>`AQ9ZHRgqws!*} zd>B{EKk?gj`0u~*4{((ZyUy?^4G%8%{m6-c9dANJ#4K0LybrI~Vu3|47Iub~FTz*F! zy>P+F!xMND=C~aZypA36ckJn#v2vH@0D!p@95Yylx3QXMV`=Z=x4UrUp2KXPl>l6Z z-!>zHONYAxpWemZ`}^=14F8MZSp;7pzSj^uj;{}4;`O*nuR?s+BZAGC_Z5779y{e4 zoV9ClV}5WA_WU<92 zEAVv#KK&O@*_-j{Jp}*3TAhJUcVew>!h)_u@BrpG1#56QzTSeboAGrAf@={xgnul? zo_!RNZo?J)1cDFokB`d$)*l4mUHo<-5_&IVows5AUd1Hau@Bbax9_k9FW|QeutJaH z>xu~o4g~NVF4yO=jCXK?T#uu$9zDHEANES@j;s9&+|Dk> zQ};7Wd>0n+DW>}lpRU51eT3ce6Tbc%!JU}y8w5MB7OU}TE24iAm(hoq<6F#e18%50 z_5^S`rn?WpJCgxy#vE@Q4&X5)Ag{p5v=|Y*h3HpdSH0T=U<1yX>+v4)EM5j*!GFI% zEH7a}|HgC=BDfg;cn}dhiQZWh2NB>?}yGCso*+tdtT8y5Z* zetQm|zQ%92Bfdv5+uK;vck$^>d^#V8;zCUPAwGRGoCN351}ySYtkuJar{QXO9%tigSc6j$>6e&z3%A=C8eR3>d|$JGQV3eKeKx^;n4j5N!hA2Z(p)u`%)lMS8iVd6e>KQy?x2r zf3CakpEqB-ed+mC;`JtY_~@#up+c{3!N#n_zWO2#?-ve}S}V%%zHugi4LE_HX#sEw z_QbFM2WhT&5(oTi?39lu0eJh*0G4B$?%oH$dpKF2#qk0$FrV4>3#L8~chFa{(>EOi z;0#>B7asv&F`~H_2ljHzd~puIPAvW=yg1#1lk@&oM6(#td@u#T3)qL(rr_hL58}sl zIE-)M(B8ZsfE74Ur{g?03y1bQoJhA$fYc8G^~7hsxC!%IIb6hn@P5e?cvF4p?+7=Z zfd}tDacFjK+;3t)(`yptZwu?tpWf5(}efd3X?mwFV z+=R3AVywvpcvilO1NQ6r*vSw77aO$=kB{xR>3!4-A3qzuGTvE%_oX-{--5rJ%(rkW z<1-&VgapV(+p%iTe1>^Hj=iUO9bH_?P-LnUc=6s_|B?RnB=!$=n6`923#vOn+O1 zKeWq@_BW-w+{2`Ca$98|<`3z0tUM5Jq8~~Rf;I1fZIYJeD)Ih!BoeQ1X-UoHBU&r7 zl%ye$i#6r92c82Ab|zz%)cuY)lcWgA# z@v7>^B_=IJ(h>Tlbd%J}yHacB*r^-9P$^oGO~iJV$4~NPIrpGfj)1P<6A+;FU}p<6_L4UE(1z4Z7LH-@uciBV7>&((rHPOdYYmUHy$5L zH}YqY8`-9=gj|xQ&Q#-L50!F}h?LGvlq$KIl?rrAZmhI>Q=Cbgt^H%;Fej$wWS29g zcu|$oFl_1cCFF>nuCynChYFR4N%f%|xD4N9K^5th!tcu)Nl%F{Wex%pC5=YjW}URP z-#S8%d=H#$oWq?#5^5eCDR@jqOXTN_>+%Npj0<0we4CbN%YbT9n+%Ex8INg_qooY^ zF~3r~Ln=Q@e*fo}$Ij4kPv=cP2Q)FfSwpB>+*h42J98<4 z(3M?@L}`*GTT*d%J{?J`d#8`3@^5{qB5}~KOZlCw!@0$YwA7TVm7#R#k zKu~L0lmmNWlac5q;TrjNqMEtLOt&X8QB8X}sZ}c`RBK9;3d_f9&5xB^nMisjmoq{5 z2gADse6ctjnB34axZh8gc+Hb#FeoU=O_S#4Bc%#`hF!3b*QE4$TshL&IZ-W|@k)`tNB(dlYgS;J;EQSnG~ZNH&Pi@D z^83{!m#&zS%H?3@S`}ASrLo>v4pQ__jB}k@1=TBfm8(=-36{H7DtUZHrRVU^ia(La zlt~W}GYShiQn7Me6W^vbMWehW!GbY!M?`axcyVUBwF#zULK`sm=udEM(R|zJeB%GH z^*%sST=%(XpFU@{&*^Td+tY1#d%CS|&$K=5opENeGx3a>ab_O7RXfG*tKFyF_jaFl zU$N!oUADYbK?$lv8LHTbjo}(%upovQuHgz|h{Ow&Ay+)Zi+F|`c!ml*OV=otZXgyf zB94^Iju}UjB!9lLuz*g<>EfMBxjU<%TXiB*XCtxOcMk?mvl6)*L9}*)YN^QGidhlhpD0+x^6j#Z;kQb=mL^ljcQ;~#N7 z*-owvSvRg~;~8{@|7=G#9V|e|We0J<1J{eB2nV0`aW^V9t5JuAVxN9B{haJ+r9vL| zJI6fRuq|Ft3ReF}e+|ahz+v!emd5&H&GnniHJZGmnGOsFOtfw_i&?N~t)jy?6>F!L4&xDdgmcWx zN?y09XewE}OCQcACx$yeC!x>Ewp+Jde6Ub6@oL#Hx4GUfGukR?hO!*$Tm`P%D`=Jm zEmF%;9Jmj0LB1_#nngw%1u@)26LD_bz|b=k@haIyx(gL_h@=e%{bSx^H$?gp zRQ4yxl!&&Fr%6<)=lYycShC5MZa^=SZ%tQbt(K-u=RNd|7lpe_)m=!9?m<86=}b`i zBcfB@Z{}ksuCPK_;CVJ%-((*kh#Pc!%5|ylM>gZUIMs;OhL+hciTmtz`G+z}gNxWk zeq1!`@n{V1)G7N-*Pepqi=lV&DOcd~HT2^MSWeeGhoW~f)p8#CNH`9x&@8Lv9h{?; z8!$ZPSl4d(@tfoctSAK^I50V|qRJXL*Ax#hrVQv?I%ic&1(d83)QT_ z*PxnvC=&Nm7g)CJ#k9|fxp-fmCr=Cx`i{4m7}ij4VB~VWMkB9Tc3$i!dr4aNN`Z*a z)1JWS#M?=6xVSMc`{F7+Pr5zjj%-Vw<7qi@fgMY!?T*-%x|dR=RpL_Dez8o$sW&M@ zbqp;@RrHfognx%*c**u8PvmYBmBN4yW|$uNW)T-X)1}s7|Kyk9{3?zoTCH@W(OVKP zu^TL-)D5OMqB)$_8d6>;c7|1Sg-7DG)LW^H8=J9Yi;G<^bY-{;B|FB9cHK&Kn_Oau z7~v6wLDP1hR1`0eL$W$pMjiDn*6mD79@Q+IP4SNWuKpZ!9KF$ymUDy12>ZFT(ubdP zDv9up242Gn0xb{kb%r3^g~!`Tze$E@&BQcOKWEnT)%DF}m%QPC>@b9IZuu;cLT>lX z4A;aqcCrhXr@c^*D&eNOhp1N?)NNS0x?~sJ9J8b&q%xu@W3}_>ngHF(PIfD$R&;Tj z9hZMZV2Au>u%5@Jj|vpbCa_FR%Lk~C8xD?Qr8 zU9wQn9%(-8s_uuh&)rF;d|1yi;sdb;&Hen2?TfqeJ(|&+iD_CA!`I|zNRAmu3N*T@ z?MNe50q?F~tL18|c^D5jV?~2;qL{uYKdwlML02!|Lvqv9%b9tE ztp!~il<&*kjC(GljN{R^v8L)X(Ld9Tz#b8@pZ6uWVGP4yHq8qbt8QCdNZsjryw)-T z#dAxx(Wkf^KDuPXM$50IenYfeP%2Cqni~}Da^h0Zhh+K?DQv)tLShN@2+)R#xcQ^I5q7h@{t)fIL?8wA?XGKEKMN7jL5F?XInT}woZG=kI zi!YLSf({*b<(FirpTj0v;GI#rxg;qyD(PiOG}>R&jUvYNAXF;mnL$~haf&u1ACBRV1%LWqKh6wOjYQA9eE0iI&Tvij!2?-oGw97n8SG~Dy=GasCbQ>W=kpR zR5e*OVZL(93inR=OI%g9b*Yq%la zNOhjvFQafJnl@L`=SfL2uvO?TGA!{eM0$xVKf@GD47=BFu@Ik$Lk!h+%V_+a zwU#?oN;$?*kOX7m9>arZVo*?+8(JT&@o*6k+L;^O)=2%qXf z=2&EPo0=MHiZxHArzFH~o5?BK9ahX~n$Pw3GBNCC?1;I_q_|5k0@ZiWN#`|;YDG7Z zv5KYzhS94HwHivlt>h8GA;pRfIK`=XqDD*{k?+8FZ6`vxgDJe%i8!s^OMNv-jrz;| zx~0EMULgiQEuW(P1yUd9=*on?a2X|6==Ii$zDuM#`TV-HR+^E-N@>}Ubb}Pmz@=77 zJIH0Se)^#N0@{G!(KYdk{GQTtlH^~+WLnSJM_wfuFfNJdc|8p`S`jzNJWYr7H5;$Z5WoUwf5l<54yx;dKm;>dApjc^Cjs8`sHsz3r}=OWqUC{NMlo|vQiNxGR} z16ySzu^b^T;_5A!ot0-3B6oskW(Uxy1WokleX4eb#SVEh&4z?O?= zY@T$)^fpB5RC(7UAZWp;q9IKRk1kAMAv~CXh@Lok*f`}83%!)}2=$qnIc{}Om@Fjyo z$n)}|J({tcay2Z&%)UdHGT;!U0j1&;&QP7wSQ5SEZr=zhFUY6KDH$%33I8N}23-VV zyt^_0fth%)9);D_eRs&H;rQ0b`$S)^2gQL+xd4M>2_~#K%Oj-l`W(TeK!({nSJ7I! z9NOFAA5M~9u|?iSGiZq8n?4fD%_+6&iuTdelHQeDNUhiCv)68wy%p!s3l=%nORPu9 zO}tNNAeGG4@Gc@Q(9>*5X=rGunVTc4Cs)Q3tR)I(*%HoPCd#l|bGA?pSc{80bdD~u zN_xN1ahnR~oH~NJS)=2{Vcs1Q@6(r*uS+p2m5Jx8j#tq*S{vutmWSF z+eCCuGW55Pi{(|e9!a)2b(nA^*2K_Wq;4iqq0{6z%^V<8r^xK!h`6d?3Q%n`-NcaH z-Ag@DAJ%<)syqrcJ` zsEo{BB#l)Hr%;orjRC53&MNU;JBSp09 zK92D_?1yAK$u;!NBp#y3wv>HDAA{Solw3^fUeRbuJ~vlQ#;z~L1(%yHg46lb3#8ke z)!rc7U|NXIU+fetvIJ-Snw&K!OwDFipV;`4tkyJfJhg)@lg9lu_3<(yD}OI3&yh|G zDaQ*)^Ru?+_)^3IVFzes6$G@E8&U$jfth5r5&&1=UwOShu&lgg;0&VotB+Lcch*yP`*6mz{}hsdyRPOb3S%gZbje@ zn4T$?n@^%^We$RV$FeAE0bX4(i)P(JL&|^&C#zuu(1kAatK9Tra@=N(Wqw&_?Yvjm zPeyK$vgt&Q-4NI5{3FXWR+sn=qANDexf?5Gn}7q7F{*A>2c z51DE-#yEghw*iDqTWu+dmLC~(c#`PcrUzv8O>%{ZfzwpQ%h6typU6#0(H!9{s&?K% z7*Ye)>Xm7UiMk16hM9W3D4sAN={HWu+hice$H@|@yn}@HxbzAET&GRFPsB-*OYbBB z4`IG=ZHS_=617YXeOQ|^FA?P~k#Kpqc1hihKboKib#4`;8ebt+oh50Grlc?}uhIKsw^ z5fPj~8rDDuwv(x=q$fmgN|XU9rfru+r58N~432b7!)XCfm_s*iaxj&Sft!|4?s`Y= zb{fsX9JzqE1ORrTgQ^~|1b_|275Sd5^0ne#>IFH2SXBW4Hth9ODmKoMJko=sIF8IRlFwe)YFP# z!U8yH!_*{kj~vic!vfNJ^wDM9un|OCx>S4~4V1KeFLIN<%c*p^-mHq|O_phDeqMWB zhKau~e^+*boYN2b0f5B7WRA4gaBVVIR@#<}fUL8HJjsAQI=P`j1yGZtU}h9Kmni2_Y(#nF$(ML zL9u)@>2ZRB1v}({t3sV40IIF}lR;dIG}DN!b#yX_v?{kJw-O#TCkH2~DYj*HJo*!i z=LxMTWw=#G09r2UtgaMY1OOOr8zmdw8ZY~-*er&oT{c4iiFF_~KHQsYRJHLivWqb= zQo2HKg6i_7rM#VM)3WJ%z%dn4iCkuABHRbXmvf38p~1S|7nQqI^+HUPJr zFoJyE(uN$*C=JZ^djp!$usm=9v|$B+alPE8%Cx2p1YV%@uDni=h8R1Lp7fTG4k*Yk zY_avR%RD{g0^sN!PIq!}wP$2dqGcrldau~RsiYON*A=T2wT=O$WCAc$Um$MFGZ~2+ zQm=#DzphSzX&@_A8@08L+Q4)NYNv;*qqcBqrhs_b0T3zPM(G?!@7L2QuN$eSN%8Mt zF|MWd$xBza7486a&HL9$c_pAE@froQ1am=iE)u>IsV8PR>cm}yn^MK9>2Hvk=SjGq zcx4L?aCurnG!9GN%p|xq)4|br-AZDgjhxhLi^J4eRP04x&g<%0pTO2O1`p()9AMh;~RR3`)wOy@N2{6WPF+wsw%A_sMe9O8%GtCO3jP zQi_*LmdV^0pf%b-q2ZyW0|5qL4n)b8+D=5VqwKP?(X9$&WEqY8wl`1c3S%bNP4pQZ zMO#0||a%_41(L zDfq$`r#!GUpunKQVT@fTp>Az>u(E;R1(-Mb3nQbgz(6ZG19Y+2j{N;OvXLJqai_11 z@Ga8ogLwO4I7i0pEu>Ro4P|))uS%K)R~9&cQ?_@NvPQ)N-dNJbyR7_UGHn(3a$|z8 z#Yj0%SI`Cx^c~k?1dKqnF|*yY1{DBLMj7{HDlQ1jn+jNM%xUEU@$KUjEuxT`8KXA* zI>;5I!iKnwmTXDiGoKr=Pn(|1M`88z*K4&@Bud8#j(6bx~Bo3VXg>Ho45kJrW=u+0%)A0;mH{l zoq%jmRIVhpkdj)WkSzpRjy;LX42j*ep>`Co?pYVZE6_*`bASwWz(hbjuC5R8AA{-& zP}tl~S6IswTPf0dV8g^yV}PmJ^F*yl;^HTcBE-W%q)fPo6PU>zbV!#^L3f~o1;e0L z5URhxW&w**j3zrfO7*+b&zCCz&@+jiWM7^Z-(C&s|Ho% z9eYS`b~~AIqKX;#h?XwOAX8iUyzlBc0M8byxH*IYIlrHmiY@R)PMa~bt>9h=#tYt$ z$9mibU!{ZcL)?dK#+433-2nsOf?9uvo|e@h5GSG7_*shURv=lOyzBXj&cm`~EBHp} zTBD=6QCvry1`F+Bq;Vb-!-M2_1LFfeZaP#!O>G`%J9dDMVA9m_{~+5WWE=QdC6uBf zGYgTA@tjy-C*N8EYEFv=Vn+tUAYrRZp~V#_2rzj?qBxd-!Li>GNdPtn;ziHJd=o3j zIx~Qx;VsHIdYUheD{nsf6JkvXj)CjNP|*;1vDkpB2j|P0TjnjZXc{6 z3(?pH@lehMCyH?@)Wj*pjTLRl#&g>W$V+?FEh6GBx|8zkoff8scF^D_nMj#Qy zKE8)PiS}rCvjz}s3S1j~kkE}Y??4>V08wLHQJ%2gA#HFT5(2R5whd0^F3?2(J@5pt1FY)@sQ5h6APsaQV11dFIqO({24H<6JQh=LeoL>t_x8ANf}V0trVz5#}Hv|cpJ-0jD~uZriDU2+!E87L5tQqRfP**7UH zm*)ir!W2i!Rj30NHrTip78R77t?M9xOf@L|F-3=#{Pl8LN2bRJd{1JC113Gi?pMaaS3=ExEgXdl>c4Y>u5i8zHk zEdjD6qzQTp!Y*X<_gS`N*6=3BLeX$DjZmjn2kFV`41_%jTHEw(6axTearhA8^@3oz&Uc(iq3uDF6L6Z zkbFZbp;Ms&XV>x#W!7tft?Jcq1R%gG84Vo4_W-r!LDtuFX+Y}qLy zp{ln{zRoS$>zYs|n66uuTo-Du!O9endVLncfs)(88}QBUu@&^?8%Z1L5q=_Mj!hAdMoPJMkHY6g*uhm!(7}>RWNW*py49G z*9#Z{o7Q7p7upt*_9A4WFVfdjKPRR;Ju2B2hzEwDS6W5OSNbcPwv)zAk{AV8avR2I z(Czd5)m2L>fT?Smt4c+fZ}10O=~BBN?tt1Q57{epis&|Z6jBBSBXD=74$vp0c)*%a zke)k;c#z84R;Lh_#4Ug~cli zA=(e1&r2e9lX++?hA=#U?#gRPiC+TA3#E;3#)$w2^mnX?m*{OACB!2Mu%*P9VY#A_ zDb&jqN=5$^EC}WJ-&{L`O@fdMAyMaNXu5#t2HqIWDR6c;W@S%}@!kP1aD30PLG!ls zUK)Vn&-(*5d@eFA94yg(JJp?QIoQPkY%9Rz7rU|@+O&(I-xin2&Xfx1YOB0U&baPq z2xIuZd`n(p4{)5FI;^E#M_M*V?y(+=L#k)RYu(&I5CLMNl(vx<7%&Xgw5EjtUc?FX z&B0(&&uTa$l6bqTltwVh#TmMrVeB6At2gK?G_z)=HCoa{_^$jo;&gYVTbhEDabP-# zOqfU9JBR~lPXoKepsnP{xm1W@MP)C|I;^)oi2mhygr$dQw_oG^ZZMb+D}q5%po6z~ zpP`r@n?}$1y~9t5*OY@`wH0wl+*W$#(ROn(=GLk=2wIV&zw-f-mR>+=EQwpGgQ=%w zv;?#p5WoVIvFu9dNwo-8s+iL~D}XN2(45}F&`JgUPw`(R1%1^t`v_?lH#&X0h^Gx7 zl&etT>`~NJu(CJ7qa!ZQ&u$|dMn^cN3us_54q=MaenNY+0>T2NCglUW0t>mFeKlUS zzRp4a(8Aw3EdKMEcxA3j|Ft3*n+V`;ws9A$WlOARbHfaYdEJH!9DUO z5x2Tdb$!hWDh{w4#o<7SOhW5el>s1?&i(bd*cGH693Y6I#q7|-t$#y}c zj+Qx4pV`o`xe>a4*~l5JoM$B>0!_T3KhKxlCAWy}XblSRiZ;xZmr1Tv#>qPXcfmxw zO3kl?^Y9;cdf~y*Zwc`pwaPVj;5>m!L_)I`1kxgRD%G>b25OKfg&4%3H=u|GkqxMG zo>nsm%@Hyp(Ro$$AcfWg#D*Pr(7?{wn6VpW4|LKs`4Gz{;f1NpVTY}byMe6(-I5Z1 z=nlJvVK`HuhhFIFfesj>@erPHr7cQ(H5Fie1F~|AT!?rbKxcGOR#_G4!47QoL@{;? zflvmoy#_+YSl6AThKU_xc@Y)UFljJ==VcWVKQW2XK*=*SN5l*Crh*S5l?0BK8uj61 z-ch=B%sNMe$$|C;6(FAQ;UQ0BBA9~5+d{IVR@sDMa>NmK)=(Y1BAC`TW}6)8QghQd zz2|7!t>E|#zN_?<%t(hY&xY_6eYC17o@buE$<&b$JZ*n^(2H~8g|7WwX|EH+qEO8i z9bfT>aNlRid6uqJA&0q2u4$^>FUkkHkSkFnC*rj(H0pOiorrB+n8jL(po+aJ??ih? z$sR=H1uPCu7`z4?jEzjD544)n`9R{DXC;h+KpvO~r7N|o@);TF&{le1ev;9(voFiG zi4!w!_~Xq8`@LwcyFwymMZSdnEbmHnGd5PGgL+x%2>U(y_&89t%_Q{9R8ebLQI2{MS>zMumfa3We36pBvz2+V_@1k#+Q#G#ROWu zn|$pO{BOvcP&u0B9J=ke^b#4-3e%AZr8s&oH{5QI*+mPd4;tCa$_?-uK4e!&oWxtS zn8|s)BhBTYZmY{&y%=|f^-vjfdE_N94{Y%vk}Uy!&}q>Hl750MEgJ}r%k{$~+D}ZW z7h*YaqwD#uG!2l$1F8Z7pa6n9L()+Mbo(aTO}h`0u^^Xg?INSGBTS{|Eo=~zMu7`p zGjO@M!8Q}st3W__mSuvW{w?T+eF&}2$)%L);`;P?j7qZH+#1Nd87i3uX#EwkiSHxm zmDqKeK29qNCWlx$o&`?Q$R(;uP(D{+%N5H|-Xn^=lJhOHvzqJfDrHW__S+^yVFU5q z;LNyLhrhr9X6^UTW|Cb7Ih|ymFgU|V<`P{iwx{j}AuB`vnPhliXo3D-BzG`$2cdi$ zvRoX7eA$l~=3!DKeLQw;gw~NhI#MZ68)GGa>RqK7V<5;Q+P?ygE=HU=5cox6^)c9( zUU<}Fq+2V|S`O$^%M}fHg23_uu^~}T6eDzmDl}J?H+3cePS}!$@JH-d&QaAU3BCBZ z-A+q8ylVW1E+Esdk1>Eoc%V@qt1R> zAHGV~JQc>P%Etgb6gaz1s;EO~gX36pD4q2X7@7s-X$R?i>Z|CJh|`amJ_vlYK|J_i zh|df<4H~L5=!MPueYm&@>xmKoZHzb6Jl66rld2{akoO`Izex){pp6xdfvzT!QPBx9 zmYr}O5V{|gm)ZBp8zkCHqS8swy}?`L2u2A5w>Cr}m)S-N@fL(1Vl{LhCUQlXpJYYP zDYDwObT^u#GuDtPR-b22f+Yk(6`Dn6>#T~phB`vdyi#y%Cy`uVV9S6)X^4SpP!$dF zaio2wcsH>tz|EioLL;sU#A9&BZ-YRp&H`$bt!x?clKd^1_d|o-`^3<^44fLcaK7rf zwTYpV)Or&->D){BybN4s;s!x%s?{qDO}>w$mKuD*w5}2e-B+6H{K&mU#Kc9KhVs^j z@@Nl~lOwt&K9m8@df4Zj3Rj*fK0JXKyLI@Wct*Nrp+MoS!1_NH*# zfb)7cs1qhg&XW*BQ1KpSGT`F*go(W+KTQUY$~n^>?FXBRf(aUiQ2&BkF-k8IBUeK{ zqj(^q-jJUo9+UX`To{~?M_wQRUs1Br*LO*_R^h)!?kd`677+yUI(!lE%aM~>T4M=9 zCvQ!Cm*{LgT$-Kl-y`oQd2bd}3P%JOI3u9CIru4j!`{L+yar+KAK_CaLR5*O)4iWa z>=V2mDuU+O>Wm9FlPic`L^lE8Uch@tWEJ|E)Aar$;3c6cx-4&2Gk_^7Kr_#g+c-o8 zt5E6}PhG_AP1^Oii82CII|>U!;yaMWy$1vn`1ttC&>6i!1T`~KG2BVqj(CT?t7b|$ zU_MYy8<`McLO)_W`3mXr!R|P)SD{g?;>Y)^syis&N6`IM2x*%Xv5Framg%@ zi10$JJ*9O6S~JcPGs3_L-04-h8#!&ctgmrKJ+X_NPi6K&p-WA(Bi^LVp1~l7B4Yq} zAsoaU#&3^V6)Ika^S2c4kL5Bsx}m6He`Q2Z@~|v2uAT%kDAeoWE?WsbPUc*Ce{ml0b7Ks!!U z%|w~Ucn0_EAlJJoA0%0jstF67Lsa<|`TELN$VgtZM`PXc5sdiyXlL9n#>3&7`f=#{ zhB{CX?gDDAT_>}QmK><(u+fm^&XX4*M1X-4@LoL-y;GDtQ7gt7yhsm{C!q0yE}&|9 zqltuIz#K)QrbD>$E={jFNt{{4+k4Tc4>TBu;3TfPZV@buUIFT9-{?9>&S?EHUUaqk2t^TJCUgS zDtO{;01TH6Y?YO&=2wg=3OK4qNW;MQgO08@(|ecLjlm-L^p#(ev=gLU-iKM@kzVoK z5pUGcZjhEca+eHtwm_b8RC&C=2< zS7i$35*9H?vh$`a*1ba2iiY_3B1r>#?1jV~d7)v#C!LbhDalq%zu;oouM0q%qeE5oom%BO*huai8=yDY$mKVub_i@r{ zDMMh*jfCL4MiR8+ZMr_o&CYN!KQx9Md!L*Ic?r}2=5$~`6#Fd{xt)~JZxmKj%12`D zTO>1y%nF5x;?=GlU1_bD)5KkRl_RTUzEwX>`&soQ*)Nys)LsYOGyH&`2JK)&>2ZN% zeQ7)Km3rMo0&@{s!HUvsDXXC`i^{;j%VPceBt4uPw~%wxR5!rUc#kcKFB7R>Z_PuV zXlwd9X&uUzw#kpzPQhSUx$_tc$nEH540z!BjMaLFiQ(;C8DkHkQvf*c%JXs$wsJo{ zZXd;dD~qvrV9ROcI(nMtflH3{48Knhs%-l=`h2Dm6m-m?pMf#AEmKu12x8%MhM@eW5<9)eEHD*H8 z5_M943`+%4w0ghK+D<*cs;~@SBdm(?ZyMuz}Q5aHG zA&R=5ux4|>f;0V&mkZAj5Qt})+Gq>Rysn{k@xFXbhS0bWh*wjGv<&Na3!x!qgEX~~ z=uEnh6``PMKxn8W0WURX99in!-8$)Esc99gzdHl$e}>SK;6 zBkDv^46K5E0sI~X=ZL*rICDUF#z7+6k-x^p7hkRJ#Alw`LmqclK|{!v2h`penG{5+ zrxzeDle6(50`k^s>te0+b+6;BnzdE|;|3?MD`lf-7tE2}BrJ9kG7`w$ML9iaj`|`$ zopr~cE&<@>h}IQ3+evT+92zv1)iB_o;z72kL3J*g2Z%bI7p|@jStuQxSprHEP#p9R z26fit!A72=PZNC**Xs9?c-su=vaMf`w-V;`Zh&yopa!p@sPi^zPt}n;e4*B(MZkai zj3{pTy`mQ!cYxD&j95)pAJPT@XSAUHR$r2{Vce`04HMiCNu^4zU zr7FJQ*zQA!m*`R}K1s&zkbXrod%<{?kC2U#@P>QJ+^9R%qcVgA1~ADT@|);9s-OxY z(T^6pBe-GD9J5Ojyvbpr;&@z^4=9=8AO@!_teq?~v=R6Whu8ycp$0*Kp&ku8Tv@61 zC6{ZeP1Kian8gkF0R>7(Z;!ETj2t00U_4IHZ7Fp_AYQ>B3T4ol@f2uXkINH|IWTGa zn{Y?WUgmGuO8o6)*e#>h*h*CVYkLt+SJI)xlK%oTsMo~s7Mj*;d`#GlOf{%NwJxr+ zy>v-0GMj>y_iA(?oK94BLx4wVqk=e;vYzTjsf;$bK;*#qo`iopOG@>G+vH{Fr@*mB zDnz@e63kdQUp0Wx{32C1*2EcpnyE!w3=O4g_DUUq%d4pbo7F|VnMP5N1=8#;OHccG zTtz;HYGaf?*4yHQa)hNrq^$U`dzqR@n~#z=py$h@a(gqXRGZ=$HDMmLm|GMR(t%QqjhxHt#ZK;;Z6DLF$@Pr=|v7JxtJucU<)e+;JqH21=OLt zyGww$fET7lAD(H|S2=12YJPvchB3=hc$kcYjiOi7fVtj)EHq=DCRM9EAm)_Uy1I2J zD;#|mYE}~tvz<`@*WttLXYaD5o|YWmr@TZXiu+W+KjgA?0}2$#EdXlm?CS9XKdR?; z6U*kn33kb*3XT1R)LZh;F>V2hM$|%41NfGsXgCd+FRB~hU?GhGk5b1bF+pZRm=EU# z)Pe$TXN4S!PeAT_NEs4;4|oj3kYy@G3C;(=J9u4G(4h1OWQzu1Mnaiu0um^O14g;j zaIhi3_*+iN;02T{LD#{O`~%&?QB(~qyM7I0D52?SlnO!Kv>>e8LHu4HFmF4s!Er!- zgk}p!LP3z*7Ai4O1uxDZW=tE_`qi+mS6Sk_cSEzDX$2!m3^*9{Kui=tt%+2()Dq=7 z3~R9s5hq_(w(VhNJ5zztm}nFXYkUM?<7BtzH%gB74k?9u2#N+@re8DsM$tm%j~6RX zA0-2*7)7-UB-CIik>s3DT_az2Y_AAyS?D4=^Z7i%)PN`ejG+aA(VJh3#Qim7MTizr z?>R3&FGCE4aQ84aNE)P-CgL&m5XuMeFk{ciArK9ST7k}@Zi({`SR1h90QQm!3+OJA z4hSf=1)dEE7>EjdparLniei-Vxjxb{TdeKxDLJ0$Kwr`7?{6S?hCmZC4F#ordhtmk zj000DLbc=bzIfP(rKVY?#a#8N&=Jd5s8B(_&%$)6qi+<4`EB+bu_Y9EK!U)B%z|xA z);eBPv5lq`LFtohB><+-NZ@uEBCu`b2QuU12_S@e-=sPlcMPAF5dFB*P8`m*a5LkO6FbNFr<%N%UfiqJl< z>{)$Vj`SqB!!v8*gXXur_*<#Ff4BRU#TMD9>U9tmSHRDv zCmY$b(SXueK|nFoM3iw&p2)a>4}j=gVRtdFK?zELx?W77pFx1^w(DSO3EB_vfyT&) zf}$LpfD5P}Um^`^0N)V^;IXVWj&n^d>Y}_&{(+3r-w7~~z-VeZs7jWz1}q2peLVsbyI3Oz1P zqSPEb9Yub=r|YX#%z#8>trX3+7IPP(*Jx&V6ruHtsq^$13>kE!N(rShKwqIeff7hE zqeuec1%6c0k(4lGL!deEd9hoQukKcw2uoX*<7@0iQlLI!KUC%;*Qz1(MybOqUCYqc z0OL%M>Gn}5X`MCzwaSa~k{qh;6bGf7s59QMQV)$sdzuq(hP0iOP(7*x0lF8Vw5{_eX!~m zalGpWLaP^$EuKn&r@ifn{Rh(yk#^okjf zFs0hvk~R>HLlpp`Vy}D-46F{H@hZJ4FHtb5xo-;zHx1?iaZ)rK$UUh`qYcaIYt>4g zwhL|4ha-DCDfa=l8AXo(Y_i#(ljNA9X$5rgr~`LU{|LpB3kerS6+*8(%96w5`ZNZdi+_c4DVGsHY)fQfSNoCQ(mI#JhG5W$~l&F#Xv;{Kvm>w{0`vS zIy~j>)XOrKl;L&mrLrjh#=RR6T;VISI*=3FwbwwB1JweV{X9d<{r0M=kZ5M2_d4kv zN#^-o#Z2Qt=<|;&nc@^G-gNjB1g-`&mE}>rEL=7Y{a7W9UB^&zziOU@Z?6>2I&XBscE!sJC<)AoAC$c556`UgN+f3|kNUl(Z z3MCR^>vj*#p{Q6xjAEIN=)Z}$3F!f<0M4SY2I3dMf>K{PwjtD?@4CeSDd6+(d1On% zeW784AzoI`De7276t@5zEI~ks(qc$<&NFZ|X2M|KmQRQ@JP_o@%4VvD1yK%`BsM(gi(nOk(!N-zB#G-0Cg~n`Nq6y z^{<=hwCj*=ze$(Yz?Pe4GfMnAm~&UOR)3dFudpG0%R7??0L!05(;~12QZ=6l&A2sK z>8yAaC*U}_4d8cPt~600yRYlX*4S$Zk7hU`add9-V>Byij;$#H#U7t0V|7<_UP3zt z1|nYTM_Gl3=SZFITG|(TN?^Ae^%i;~0rV3Wfp#sMBkVMNn@sf$_s!#~t=dF`Dv>6} zLKLhP;S`RLW!N2w*aGMa>^J&F;Y=IOSK)&TKJDi?h#Cz7wAm?06(~VKyv`Gly3m%P zaE76}x{-lWWCYy}-a``Bjd(Q|ps`Ut0i8h5ts2CMV;GG!gt+}a`4uWnAgqMjQ%200 zFx)Rg0&|$&BEwIOH+8p!1Zkx95-K>aqkedOG+u<*wH=o_BRN0Ea!1L#WVGHuD=5S; zv&U19Qw2t76TUTQ5%kOem|X7{!>6EHlW^TpWyC%`Ve}&kwx#6rlRuJoQ zX;4ZO6Jt@9ghD$rl7vSyV>Qa^v1k<_&(-`{01X$&RAf0T9hO@ z4$#J1*b>G3usE06$GUIASm7nmp$OVE6JXcnu51~MXT1-_IPcKaY00YgCs1@c#OD>a z7&IZJn1M1$&_2~K0J^y*e^AETT#c%NLvmIDSpq}%YAI1*~4BMU-*9zy|)t~u#}#&iLd|EEFyD6lFz&!F#2KIGzUc|*_4 zI@Ei}43OwextT-CtKOz6*q`Ug>s{I5b`v!v0C6sLZIgS#qHRuwu(%%DLUH~$yqq$q z_Zb`(5b99F4v&IG6NhLbn8V)?f}euMPceA|9bniJ#vtS5V;#euUJXX}1$GeBX3mB& zsjfhJJlsaX1Y+Na+2zsw@`}#jV5?Mk2W7YYy(^z;_pUCxNDg_U0$2;s0Q#~84Mj$OTmFx0e8IkOHI41O$LO`~g;*oHsR?)}LH4O;<|p(|bq(LKU#ZtjW!sOYOK`^xfk43g0gBv&4zDW{$F2l-I8l zw-k&_c$J)!F95|wqXqUZl=XS(lH5ul&ylA@9xXZ$$rzaaw&^gKoeGlMI!+VHRR~&& zLH-2AT^xdge1|>>g`k zyXMu!1%5dB^d{7%;wnQeOVo^Kgsb&H){4Zy4;28#Xax9XSH?nr5%|zuvZJm*j`x)ALyGc-D>%)Jw}(e3>j=joL((l6 z02nnZFBQbut}BX)esKrMO_Bux4n01e(R8~N9~KwjXt@rvlH4wWeW-447->*KC}v{w zXquC&lnSVMtmi?+=ON8R#b1BE z-!jV`j=**|d4+^4P&W;U75W+>r*Yk5MZuRg>aW(jD8?j%h)%=Kw^XXX;u&6eoa}cE@PcgK$1E z;F^`TDRR!c`qj4XKl)ev?syLV$ zzDC)@HyByw#>41L1buw2U|9e`@h%ULw=wpci3u+W&`!`;ZA#*K?ALT8DZ^ql?rRQx;6Qn*6b2UqyPzdZc=?acg_)vonvl_?+m2FHrW`2Y2PZ2sss zxH#(leN9Dcrw{Kz;O|*}=(+iYdpPI6{H63~y1$V9*fl=SPoMeYg*7Mib6-sNf8miw z(vLDVrFF^pEuB6>9>ul(_{|6Fbn%N%Uuk6?(LdewKYVi0?}hxQSHH1vKR?NSudaTo zfM3Hz=7neahs|3SR-DS*{fY|dEm{pOTJg-bhbx|a^u!m{H2#l$V$q7HU%#<%jh|M3 z+NE}X7Aw+=Rvh`)hb#V>eM?q}j1|_xif;bL-@5tHHPYf*&o@5VV{4B>o?fR}Zl|!; z{$OqLmP7viYY*0k@>9sc`oe)xM_{A1=|T_xe7Z}k}e=S6@2MdlZERnivyJ>>t- z+&?V*`?o&5_YYM`#}j?H`;y)D82_hlJY2CgbNdg~E@#mdvi#4sJpB7y=6fwwU<@vE zKYX*wr$5-CcmMRk8dc1H`fe-zna_F_ekZf={|jAKk)9?(()sZ1&iLvWBl!f6(610&!8~( zgJ=Elo!(va_bc9onwrZj`g_E`bMD!Xeu0bUQqRb$MeyzYg}1>!cpG~bt@=)Cr>tTU zpUV7&cN+1%i&h*?eFsA-rGMu-`xdRbko=nR@#_S9?}Z2Vqln-za_VH;Km4J9e|KSl z5Rd%|t#kd)pyAM>C;r*5{(9kwer%oiG72+4`um4=^uI6sT@_cXD_>6Q0z+{ZTiSc4 z|LejP{+a&Uqlq0=*=IiZjSns9*8lV2ieJz-GmLfHm0IgrCCn&V@$}`QI=6T^0ZM=~r55 z&;RTLr}3e|KKoz3^U-f`@iYDV-RdJ19GTDXV9|a2(+dyRyr*9%s$ax7M;0!u$nvfK zbYkHu&*^t#RVn<|RkHl>qBVc1|68n5@zI*keq^k({LdGy`GNkOFQ}QX{nm9t{+El^ z{H^$5Q8l}8H`#@|3HhJ?^1;;B=$D&ow_)mZ3cdxT^(TeB%Uo}x~_wQV1*P>PDK69<1M!Da* zpEG~?%Z2;-Y4znU)k?0D{;m6YYhjfteqH-k3Y4Sz@dNej&bJq?^ZhUXoT**OCS4qj zZ2$2)3o8z`zlTB!juj81o;*MG?A?!6V2bzey&|%ot%`2YWL+DvFu(AzBL1s|g(#RT zekYw_V9RU;tKx-Kf589j(1Xi;MqDfY%_p94AJMJM9}}tNjmY^-ZZiLvXaBym_G1?> z@^Am`gMVg=SDJroEcp*X>@=sJ_}}ab`5(KIFaGeJBfe{4H6o+tHACfzceEGY--q7u z|2_FH3(tP{_wU-Okr>d2*U9qh3oBId&F;~< za;X-3L^XWl8~@*KF1O_&dn*JAbix#{MCs}+adlpux;^$v_EtQthy>U^f z@CE)i=jT7VlTV1&N*J8Kz7{9;h?>~FwQm85)&k(=!ufN&( zz&;&Jo&AKWrWP67$M}vvdUxUPx7gdJsy@j7K6Hz}{FA@^_Je=_^rKh0)x5wnJhZeS z|Bv5#xZ;xjZ1;!m`{9bm__w$GY~dPjXLi=r6tdJ0o-qkoLjLPTfBzoe8>^p79P7g? zg#6y36>lp~$7)xS^F3VgS^lHvfAP_82&kKW^#%1$NpiFwF3It~JahUxA3h3*sQM2+ zk^V0EpC%L6^6*TC{N@k-YR`k`{o$8?!BiN}#osLAM_>Kxg%v+*UNTg{e&=ZX9{-Dl zRi6?&TSxV!shABr^|2>D*XLol{q$oW``yp;7Z=t)Dt5Py=~?>^J{3In>CY!`;^F;8 z{MzP=AN_h_Do>{~yeIP|>wm$j#XE1$nNxcoJjJ!<6+@i}KX#pvzkc^8fA(O-2e}(b zj?+VAAmnc>TCv;vO-=m|Lmyl5d479gg({v&a+S|S!pFN%QiYE)tHfF&%Uf8-#ao#l z*Hyka=YNbJdite>d--1G+E-NNGauU@hZp{?B5e5aSJEuSJ{}hT`JxrOGtYemNQqdy z$0GjCZ$JEvga1EWX96Boku~gFw{LgXy}d6Nh(Btc2Tar1hJ&PUV&cl!XzDPDzIpirQWx)%+w7kK3?&@S-4 zRHnagyQtJ^u6yYKNyB&s5 z-M#x#cT@&=;WqQ0p%2+0LODR{4ppX~DiDP*)bR3!i>U*c*f(q4hFDP|Yg1k_5bDa~ zr~f{@^NkqMl)R@z(i+ja1G^8DejsT_iInRB3944?ryE;7R3x0R?8%pmAVJ7f3}HMga5{N;sU)#IkeWw`e)*5)x1xk3Hj5iznGU)< z%3dI9=#y#ps?IAEg-cY6iIl}A7u+7NBVxC3nMmXEfC<%>hcAE^FgVuR&CKKL5| zk)aSldj8o1AH}-BS@Y(6d$QBTq^Jzc06SmX9V=&}WoN!*U>!guLi9Ky+AaHG7GVlz z;#T>CpMLx}CWl$vB)Jmg6hUdC7EhTzd0r(JF^e0C|1v@Pw_g|TiIw+I_&}09T(4tN z@Ot^A!hlVz^q8KhyLgM@r%%j#XK$<|J4!A(C9N5)QGPlHrSC6kNRq^u9>rQdL|YfU zvp@FxZqKP2Nnk6BK4JY?gs3jhks4;CNTg)C7*QKNM{A;%O1yS2K}4tLWQ`=U=|&|$ zuRPlDd8|C!O6Df9p^kO3w?6Dt($5%Lv!oGhx+zxrflS{)#6?3R?4H@UDp3eOeXnbS zBBRrE9t=cLyPQ$Otfeyj;rj&#VrAHE1cQo>^%A@a{D_Es#&!9U#6}e+enG?{Pgg(5 zSqKEKY4d3{mkwh?v1Ev87tu-Y?PE)oQk*ti&Xm9$5kD@!L`0;f1}zZLnlc$+319x( zzhX6su4l1v7fnBl(sxD3A3nHC?7%D81d@SR_pz4K+|FcA4%#M7QZeSenkph-#Dy(!*Q6Qp(t7 z?8=sSU4lg=NWVhNa^sF{iRgPVM-a2ZcocN`M9WN&evO!A#*JWp^d`vh)4fe6l=4J& zCLHsMjJ26e8|SF$+l*VoQYGubYK>s$a!4h%3d^i)Zx#RL_pMrbIQCuOQjt}HCm7=A z{r!k&AnUA>jm;dY(Kn5Lt`MTQiC<}z;61`PM5g~z5V+*70i-%Hn}djG&_F>(#b+ba zFA&kfWTeE)2+%_cp%+WQK3&bmt6Ean`zQd|J~V5rQbD{3nSPCkP9BJ1i878N;sUE} zzeE||y}9LrQ)$B4$dNy_7 z#k66kO6;+&$&j3EKZvJ}S%~Pd?12f4O_G?Hjfg{*mMqC4ClHS#VxMJomZW1A1yu$d zpe|c`rKFO$hAbj>cXDbOFjxUup)g>xCkt7OtpwsFL`04wBbHn&VdGVOq=3RDzj zSo-PT-sw?FvDnleW|n$2U8c{YbeL?z(W4l3^Wdk)THaSAv>T5Wu}LPnbVVoh?&sC? z9%D~fqD+g$1OIhI%r~wKOQ4F!6B`h*$ha^pMXXI~DP(%_+sj`^d!QsP4J@m&PZ^Mt z4K)D=irC@%nIBHX`sgVUPFY-RdQm$%>>C!GSBPVtgK&VV9+0vvVkZ4eAtcy3_f*=! zZ7DUP65uU1oChczoEv!#RZ4u)RTPKM5p~kDu~O2+=NF_0;)uf_$DwHV(Sy0PDYHyY4kBC@pg5G9iJ2#c^)ANXk$jH4Z zuD`x9|Fn|FCF7y6q-SlaN&qt;BF-AmLT^ioBm8vkHYCGzAXn1GFW>V}`bE>>Tq&g> zP68Y(BjTuOJ}3ZeVpdDxr>icgc|^^0v8_XN)GYep@zb%kV#fODsZ^Yj+_h05R+}2a zQO654k03p_dF~G}8M8f&wGx57VS-uY-`ltR7-LR*F7=fNoBq{)A=BfCIP19#$GKzT z2rxV;gjr-RAi-2?l27B&6#=K7H_7x{g@f3So(uh=t)d>^$aKX&zPeHxFfG*_vDh6t zQ0`Pk7}`xCz<5=C&LUZ{=?PSx@3;OOtIq=C#Vko{OHfsU^ax_+GDgZwU}V~U=siWw z3QH5HSMgsE+&>Vp(tJ5bax-(0+WsGF?O^GHBbJ z_pg-0BrZ#7to8hp+&Hk<%?7XPQIQUw88HkVR86_q-`+z8l;_4lX>_pyf$EdAvcI%} zuq8*8k@3#LIldzLn zY$KIccg-?=0}(s=o))A6*5yD6I0O!M6@-c# zDw`mNOlktrgNT)trv#}_HV}A9`{K(Bvt~tnd_YF|L9OJAb;sy1J%-X3m(A5jJ(tRq zNij%|BVt?G3D9X-hqPa@$VQK#zeCK{vST{Q#3n6OicC)_gd}#BHc>l7d^W``v)?0P zMd?1hotQ20Cacqk*iyPjZ?{PL_}ct{h{dI6;KYy9#mo5k`>w}h?J+z3T!mz0i#a}) z--Cz+>0qa}F%?WDV5fkH6T!0;k~y|FkGAQjD1C0)!oJb~rYhoTVjm(R5@3TCPke@m zO$=ro1~4MJVi|i|NZup zh0%0yKZ^K%$a%fz*Z-{f^qCm7jv1$AM+h7ylmSypKYafEMNz^lwiWC%ju!4Vm8Iw2 zp6$)ldgSR`a@tZj41m&Sp9(2p16QakBhwjw zcnCHXMC>cy1F=Bj71KrkR3+>!hxkK2HtN(POi(u7|60joVR?%VJSb6J{B-}PYWm9Z zBU(v|bMVv8QTlv#z)A6F0z1XCCl&e4eKzWtQWotRtR*sO$K_bMS!@`v(h$tBr~2S7 z{s1VadI|+DI|?U>XKNQ5AV$77epY@>A*eWez-oi!XG@VP!%w%r|D95njTLk4k{Cbp zZ+@li+1PM6&FUK2d#kMl7N|tR#uRLIUYF^+h}c=a8)UHA1IyToh+XW^Si|FL+!3GTW(Uz+Ff==Ck2?TL7h*t=oy8uh$~Bv>w~Gr|FM5Uge+EM zEb2!E1Q){66Z)vmq7p&+lS07MT;8O!!=lM_1zhoETR&GCZ@FpzRrW70A>z2PDPMB1 zr3h;i&prR$(%1($W0(ylZMLIS4SZmTOe6^NFT%Uyac9DZ$CtVSn23t$fwOOL7}hyS@=NndU3hTUi4-tsF% zEHbWv9Wc|u)cvWSc7J{T%~&40&HHmC5f4+DE_nB&O|kTCrF-FR7iRQSyBjzhAz}@5 zH_5{cr=kUL@0Jp4_VtTa0a4(oiM?fB$Dz{7WGk27vnlC@Yenx-Y;N zLB!Gln@c5u4KGZ*goxv{J4)fUM*^`L5o;JxlPF{JCAAz&2W%>p(pih*T=pQMoe_~? zj)^6U4k~ro$6PTCiMhOlh#iawBob>7aiMlAxO1=(qvjH#^V-y0mWda@B+h(!65X@s zBdSYm%8?w*oj#Fz5>bmqFt0n9?_MIc08vfi$^TD|Pa*081*5FQ##f@O7DUZvvI_iH zp`J$6Qo1x-DwBIraB$Q8mD1jg(r)lzWK%P?jx0dL1?k)sFGx&0jfiCun8mZ>O^IMx zZT(isrNy!u4AN{g;#uwsM69rYYY8X^@x+QBE-5lDG1X3Fy!fl-XWl9}x~Sl~HBj z2w!2qoD3(pl9`PcOsq!4KDe65RDgKmWkj6iyNIMsB-S9}1iMCVWGgDpWi29F$R;8Q z?E9%ifOaT^Uc8|LJlO+rfJ|Re04iRFFt1=bNg&oC;v!iFnZ%o41N2pe(2Mm)h?K`j+pMp4uF-B{5g6=t>``#FFU}qXUK5B} z)-E+Q_wkN1qM9m}r{O9GjW2@U@ekIJ(>^rDqS*9N% zVm1UVW)7b5#4bdfV)M8qetHDs0U}mF2<6_n>_)^6ww^>bgt#0ZBO)@V^eX8dMC@iK zZN~WZBt+kDJM(U=wyoM$KI)hfe?7`iFMs>Q))=)+I0%NVSer)M?BuS0Y>%aP2@O{{ zT7GA@O6+2eD<*dGfcH*Y5V2Wku}X0HGoCp8>x)V*ThmU1V=Ze{bvFYp7Kk{LwigIC zmN9V#5tq{TfO97Mx|sM85wnBfzG-7i1}4rTVr~%5di068{Dg?Mw5Gn2$h18y;~XN^ zq+Pm7N&kz8ooS~knJaU=jPr=-3c~po82aLgpAm5~ZGUC&a$G>fIeA%M$;?_Em-H7z ztVnC zEDFNCon9sV9T7cgXW-j1lN7FP!zHzkZ3}i>r5v*mu`lg7T-jx74wf++5qr~)RZ147 zqhX>E5skrJl~MuQYhq#!BK8CqLtWThkBNDR*b?lnlCRnh1rB?5K>-q%#19d1#Ivqi;@HPfm&6d=g@{w0 zvsLU~Z*MQOj}Udlvk`J)rW93ij%U?U9uwE(MD3L7u^ik^M#K?zzX6VP@WCB? zc|q#CIX)FUgovd{^ZQHwn8iM-5`BfzFFP;xll<}4=NI>@IkdQ&21o|x z)2HSDH}VlNpD9%l-!Dw8M#N%v7eLGEfr+(y<7gkL{X`aCbRTO*n>#otn*NNyEN7 zRy9r{VwRK}$;hTY_4m&oROMghFPYd5TTO@Kag=^aa|uewzL#1;*kB{#sOA*3 zC0nReB1jiBzpm7w-M9tJMG#Oi?(%eyK82WN#?9Fh2VtKRnAhj3a+Vtpz+pZ_97td` zAg0~83mAw=kie{+ugY0x1Vf-;?ZtG&F>no=qrI4xWvZM_#tyg%(YwqG5wp>_5@rW> zrv+ae57IB&RXJOXTdpeSFk&_vH|0ngQ!hDRtyksjGQw;|VpqpwaX!Fl0x>&{C$3ta zh7DLwL$1X4uKO&+>^3%ob4_o5)0K$X&o0fw)xpHNuR_c|<6>YEzZV$h=WS5>&nBVS zDp{BZfZD^rFpr1^VYNllu{9ABEr@6lHo?{+zL(1MX+*3Lj#wl|MuLomh*%?>v`AWZ zUX62k1`&&eeNYZIcVVIx5$!A&yPQD$9T81Jr$usx5{O-|sO>S^)RimQ6IZQ|5YcMd z05@=$GL2V@{~}_(sWVqfVoE(G&Ld*CX-lruhqahW1nD>LsO4B>TmfUv-0S-uLrkl& z9T;XTitqn(wyJVkjEyiqB=%dG9&C6+=>uEL`(VtnwvRJ8BVxZ9MjGe~@x;6rR2j$3 zjaQK|9}x%5%RnDs<}sYhlZZHFJ`09_*3&St01-_Vn8|t>$6r~YmZQ-E{@fAMDVFg% zB2JnwW=kG+Hj0TiUQ=bvwLq+yUhT0F5zUsZFoUr#jAi^|k1At!^3f70%*;60e|h&bq72}h!dThI%xgze;=bAmX@p@l{It4kA`~ zx4^M(;s*0wMC|mg>nG_FH~#M-Vh=k&hI`KOo5S}JvDI_xDs8$05hpwc`bl1<`{FP6 zAtKg!7Wa?d`NT1VK0?H5PkaBUyC^0;MntD)5g0YuoQa7~5Yg`GxC-$pBGz~y-ccla z6_&9d5t}^B49xl%CO(fN8o|8IzCI=nAfnsT47FwLfr)=1Vx8v%d>6LLVB#PmR(RI+ zmy&Z5h%XSaz_Y2JBo`zQ=iXMwT!#rEP&O+%6 zO`VX=bXPTfHcD?Ztq4nSUlpe>Keb2AgTA^;IJJLZ4rX) z-Z0UMh)5m=HlG(F52e2&qJ>=mjoeehG8Q3X2g@aLNdyzmB4SVEULMn;aW3!eRNIo> zwN7**hr2|GXz^_5CpmIK2Hy8C+pWqt>pE5|nc2P{@0{8ZvBK3+DU5Y_aUk>b?GTA!4_sJ1crvf>+4(h&W|ApDA&y|6rmU5uKKk;LgJ| zElj)~M?gFrxKR~PY(PYZ<;+!T`vxKoT9#(@)=M@bVw+_PI83uS0hi-VMC@QhuNK>c zh%J`gSrTRYYAoX|M08nBLHwUY9jgZsYb@uW9BlSdW%%e9h={lbz^;HD%PU@G0LtR?2+$n}m<+{?9Ma>8>{I|M?q|h} z9Q3P1fbLQVy*M32BwXVS(2o&N13-cVnSP=GaL=1nG~(ie^Vq8pdht=HN3Yi0rvTuz zNPw`jL4-x@R|q&?hf-uDHpS-%$OZ|c;{iC=ZaS`f)60gfFoY7fW*;KrsNrxXGikxDq%48Ql<7K?s`Mpw? zlfIrBNzaxftPt%(L}Th|xb~c=${s+(e&3!N$(*P{eu;?rsS9hO69&%Z7$SOnCu$@Q zQ_C@N0udd)^EHw+(KGNAB3e?L;p%l_U4BBuG2iwYNoJdSoXdGcG^H-9k-RL-3nqR= z#5Uid8p+M>9Ae_1%Njq3ogDV~j+RT5DZ6;_+=+-4zGisyk8S@k@yVhEij0LU*hyp} zR~J6;&1qbu5Q{x@KVl%o#QTWY=V_{mZb5NL zcOYVqX8{mwF~G!5L^OH!g9@409v>m1&C?DFN&JC^pMHXfbM77pBWjIX=KsD>ZH=>< zCQIT;tDi1^Q6-i!<0XVc!^X#7QTk)B-Le z;-uvq$Vem_zgEl9V1)G<>@D#nor{Reh8;j8PA&@&G23_uCb@VEm7lgh-KNwwaxE_I zYzMBQqV!9qgSkv6QnhxOzJ$`d%qPK88E+x+)0Ytuxnmx8G0#t5LFvtAxK5RD@4geK zGYd1H$GJO*fYs?p*rir<{ zg@|=#u*miz-bTa*^U+?d1+haAamd^X1RIFB99t04&04&dX7?^4wwiZbr5x`e;smoe z^>WzUhKL0gh*Z$)>i7GI*knEo{7B-b*Vh1ADn8EfOae`8bApK;a z+CLW=!4dWoWyDgTn1Q7?>)j$JNelYPeB2Jrj=1R^)Ywr9{UsOiqQNuylg(S{lU#@K58C%}w zmMln$o^-1BLLkH~A}$rrPLj-Q++*UcWlww*lhN4sfFK1~KT|Ii_-WJgn?H^bmu;s5 z?8Ga&uZueIw=QYj8%y7-*#{>EO^xl_sMl;M1ibVFuBtFw78740Vvo2qM{=^&7!!vP zv02)dBlTnF<(T*i5$DD39H}T##@o9uD(!K`&=!__j8Lz&$n@hq`@f8Rn;qt!oZfwP zFCum_!We&5UZ(pHvCX^_X72c%zn}j1(34-sa#_Y+G*H4rM4f1VM(JlgYv6i08xL6J zY(CtkNVp`O?{)FOPuos?rw|*xa4S{0hZoJ`xtGp;6Dz}JBSg1~gd$b1F8JwhPyKW{ zMzjvtQp&Cg;Th^ON^c*qu~gE=&tOkI{o)U?-_I{;f%zwPoj>X!@iI!^%jQ|8xgeL+ zt;bt_jQ#$c?O>2uP_SQ2?7dRIjEGZA8}(Nwlw&O-<}(>-LlTG%L@czf$Yl0i zTo*rmf9}&tdu_FL6-ai7y02Jx{q#eWzS!DaAZ6#Gbnr7e@s;xX$P5}e)4_AwiPNjk z#lFZ+7I{s_*55*8-+gz}zf?l#utwJ$)jR>G%bSn^(e2h57 zqIQ8t0oKexYd*9~A(k?~7khlqnf1MzzQD7mf28LqJxiu*-rl49{*v6*m$|s%Ev}z# zc>imKSYSL-r21?{SKn`+IjW@ZHE)Q-hKr9M`2!-lO-CT;1{=ew#UDbe>{n$RhFiVS zIIegEt~xyL=U7Xu(_ApI4KDV)`RH%UmGontz2GO8I8QwJ`X>sp!`Kd?_L<&|XUzqO z*u;DWuFpy!o{A%u=CbRC@iI>B_*Kc}xM^;lMA_Vo$JzIYIBmL++k31YJ=1U@R@XDe zGjKwZ80zR7M4U68h(s8R&*k5UIKeKA_KL-}_x<@wE{*IQH>D`9q<*@1-ZKgj*@wU$ zSDp31hwYi?mGsRlL{Y@$AJ_FmL~ONgy~>=j;N&(%#un@LjNUt$rx3B#x+5den(hbN z?xKsa_G)u(N>igIM|)`JuEyVD>3dmRx?Y!O-#zgAqo4i|BSf)% zK&M`Mj?_VOsZ#>nk@;oz?=c}OG>1*>g$1>X2I-Es+vm@|5-j4NaSd#6;l=ehmj#(_ z|L5hWVhlX{4o3Y%mHc$ixu;{qNoMDR2qt(+055VxoG_g2Ws%IJ>pp&cVN`}$Jg?b9 zf`ODAhnGubDgd5-zB{t%c_pvP6N2Pn$4hFRW!ijHB@R~ZhNwSmSoY!c*M~%|{gCpb6p&Ww7sui6sr+D?|spSsOLj;O{bT$ytTC=v`A0 z4J)G71@3DiBJ!+E-?F&c%5*s*mV3JTM~4-*2d+fKZevGSG9*sh3mRKj#cF%Va~Rr` zEl;={PsI@zt6{QCAQmDb5|OFW2ZXAK2IyBC7G23jFWv=j%0;X)(dLN0_Oj@gB}y?) zTF-+=Z@hgV2)Fq@QixORWv$52(_e|Q5`870Gme3a0)%O^YGs1-HAI~700Dy&-Ybuj z(uJ5~9&oQ0;;%6I=<}`1Ux_tZJG&}?&Z%Vj)7q^YVyWxkaRrGFLMgJ*U^s_}E{G{E z5w>?zi4Z-n5JvG(c%99Y71Abi1#y&2-&?(6Q!J;==G{5H&kx^6L=W?gO0c-e^u*=0 z@5W^8EZ8qbhi(=s?N{&rs1Qee+iIj#7nB1J%y*tRs}L8w?XUx2Q=Z!Ha4q=w^IK!N zoV37%*6XD6AR-o77eiFgc#RPJZV|D}x&Sm&rfcD~>JTF4S~tS98Q+U!`XwTcTP|ky zUY8FeqLpc;3Bki;`V}H}TDss|H?gFan5w;&=C zTr$p&2WBXgzQWkm>tQ9ZVJ}?%L9CB9F{_=8^+0TKdj}EAnQbuQ%Y%uA`5!7Wc9(z! zGtyovkwGtP{Nf5>68Dt1Iy~9ww>?g7V;g7{3({W{3?3S&+HSQEGE_0ge3eP33(v(w z8GzYlwGTDF9toGKLNaYtAS&)IU+9pkOX9@9dr1lb!QsodIqZGQ3YqeTr5xXRL8(_~ zWQWQQx3TxoxBu?m8Ed^ZQ#aU<*#eJuM0391qYx}6n3Tknw=y)p&qKtDvW-rug3a%^ z97_;!sdPC6H(~24mht2B&wm&z$2w*qHsk}LzPBjT3y4@$u|pg6pu|e#r)yOiiz{|& zqerBeSo48OEUSk2!8fy9a7ou9;#~C^i*yI`K*GeUh&Wt*-XaYQ#Sx$*C*nMwMupTcw9;EuH0x-<4>{l5dCg{!$+}t z95giNOQt-yc^3bUCF2#GDx@44S^{erEr>Ycfmv5z8y!qMjfk_Jm3<{G z)4DM6#oT`@xpXpbtH>8oHH;vAcI*1x(e{EDV*4~X?PpynYJkmJmu79u9L+c z$6pPiga7TxPhzcpruwucdcjxyt`Ig75$CE;!2vm2F{4Cu9cnncOp$T0{FFB8Z;VIF z(~S-LV!2$h?E;GkM{ z1M8K-Ks5itqco}kVB&>1;uMX(E`o_w2VVRlR@zADP>yXx@MdN;A|mgF-c|?%UU^@R zBf!(!&Au>}ab{ol*Rfnquy-dTc4B;@|05y}vpY)?J2k;@UEE|@rnh#i_OSCR2wL~LWX%mk))VHxKUv6bB+gL9R5;%7u`V0YP!Y-5IHTtGx8 zyD!(PF25imVzo=~Eb!6ypWJ#h)~1nnIN{Vk=CucJO+E4LH?h>S?1__sIZy`d!T&QN zI+HJyNO{citrBpj6cI;k`wQ7u!?xgGQ2IXWjsmG_5K4!$vW4F%WjL6$twaj24Lita$#Ak>TeaT9jZ~C=%yuy-S>X*?*u10?Y4n8;W`7rz zA&QN)r*zU%GAsdUM@UmGgfe}b42?r%dind96bLe8=>&Ur;x6oWMC@WjFK?BPKWw~G z5-J|>fa_N;OYfdIqA~J%NBms<2_p7;=GH`Q3i`;*6?Ldux=YQa+XJp&y>_L~BVwax z-&NeDmcHMNq-^aR9cSVm@ z8o_c=I|)4ehKR0;jatdgCO1s%e`?MTF&V8aAg()6q5K>Xi^}HfqsJy?%Ax`fK`c>a zv{h{H6{Qg3YsV4nZ9%q(;&Pm9S7mgSH|r#S;*fZ2qe@&XU8a{R*utfjBZHnf(|V;Y zCUJB4yu;%yBEgy#mX&Iak?Daoe^;v9!Cn*Z^)}}hi0JBjT!;oCREwKNf9Z(H5XEEF z5R3E}8J$q0%L+mP*{hZQhfS5L5IEpN#BoMMymm1$>y=nGEP6I%6NwCiiPzRGQYy33 z0`3V3#~biEXy1Xf9C#CM9dnDNB6j4D`}|Xg*yCs}mWK98ApZ0F zNu?Bs`1>A;uMU?;G@(P8B_+~~XJ#`v@D;S7~JgEoA$5{0U z(tjf2jC*e_D@S~6EI6=7%uW}?wu)Gm@d*Cl`@fxwmGx}Z>Z^R;9f&wpwNfiRkl2g< ziHNgRYqU~*{89nOLWnrUa_QCKFU($|lw+OcEU3zC(5T8KsIZrwSBN9l*%^|^<_Sz( z{<%{j)_CBN-iWCUx9abRSm|kit7`FTe;R%Hv!^db+k-_s?<$dABabC?fHew20ohQ( zVi&}BqSc@Laz%(FF0jolwATzuX7`QIQ*M9z?zdR8Ur1hEDkZaN5qHG5Ry=b#M$C2W zEs~~OpFnIzM6+Xmk#r3+=&Lf|_+rD6D>5Xpu}_!Ie%tUW4j6op^18x+%Y2`8Iw_A0 z2~2E2L_?o$U3B`z#Bb|ntAcl0VbjT_q6y7%1^P3hRI3;b}|Qkf^t6P9}Jwv6G@X`a<d}_|mcYs7zPzJ+;p0S~$34zlY6BH{h41lm`1Ry*@)lW7 z((4>AlH1=Q4sYGyRpbT!_6O=7xP4OII7dpr`yVogq*riR+24_x&xt&^a!k>S#JZMf z=J3YqnP2eXdyFH!<4PY`LVh4wbtxmOf8s4!Dd{7}hf5%;}GUuqG9^P6c4{0Gs zNO%-1l|opbJ-mn9xq{cU@|HcsP?ORSeQ3y@W^y=m#N)qUr)Xv?+I@~ zM6*bptA!f-HbOTkb$*424Z)87p7rFeIV5`tKUHiKJ|&)qYu+IP{zGmNpRs;!KT6Uo zN3JGWQw7;qMt#Dc^`}TDZ``K2K*rYG-b%_slke~eM#|k{boG$3GA>&`NqCXuSuFY# zq0V5*(~Cdp-qHnybp3mTrZI!F6&mo0gi^X6`&w7SeP!WxJsN>gq8SwU+fnFLJ`@ZbFNULqZeoY9)K1^LJ=`W4Ub0 zQ~{n7;u}p8=e*JxYJ~yzYWlX)h#3%us7x?s3{0nTi&t|hh_9}W# z$tqLaRuKpe@6kL?w(u!1u6Ag|%D?26ttUluh&+chkoEkCcQjXiJJ|jqPtPkq-oT43 zC6^ovi6xXWA!`qTi1^NQ7{0HPidT8#hr-M`{MbDDI7xYoW@(<~3&(MFR`CPz44uvY zHC^_Oy2n)kFWNiwR!x~fexQW}T(Fi(Q$?`G@z*n6moemJKyz}nh(j? zfXf@wyGr-)gWGv=kNqv%VsfWk8p_MgtEq+20JB(i19^skFl#z}fR2$NqeE;($qI;k%tE-{2l?yu+}g_YbflJ2y$XzIiUKI|D5DyoF{5~3YxsBn$_c6vdP zIaF)}ADfaPLI>Y2R5p|BKi_qRw^WODFYrN4%I!asSNT;!7AJ1ecP86k(0poKs@Z20 z*J_rS?A98MUd(zCV(G%O5s`_aPDr)a&|ehcnPR(csXG{E%R;AaNTVkE&thn7iGFbP zW5ZWz?tDix@;%=BVr+#N28-xWdQtgxv3N{4msK^N&&xJ8lMybf(Z!YBIa9Q9w~eSZ zI%ugrVDWxH9teQKQE05=#`&(a+O_r$LVs1{JWIq&`sTEIg%SE;Mx#u_g<)^0uU2oN zdZWe{&bF3`my(Z}ck&}^v$Ae~OrK6`HR*x6irXItE##i3$YXQJJbsntzNg6W#|96+ z4~G44LmlBN;JvavSjtpfKKG zs&$GQE|^{8s*$r>$sJdUJJjBvUQ$Y%Eq0h%a;{6c!y(s=O|Kc=PPiKCEXuwkTZE$I z3f{`cY9`%skF)N|v~nGI0*Uue8-IV*eN(1S@JNwAPM!GB#Hk+LjOh~}9{-3(KY7Ze z$?Olp^zqXsdbCr=KQgi2qr1C)%7jT1Jt^!jt0vBTWZI0WGbTM!_3)JYrc4+=bG%2# z67DSa=w?1ReL9HK)KC0V&?FhAO`I_0!D)Ba&lo=;$je+1oP-{k_(0GoNz=yPJEK0D z04B=&>!(Z`U;oIRQ>RS7kNvJs`OL}kn3?qxC(aCtlKx6ExKvn&O`J4w`rQ-jCrzxE zM>DZ{NjtOtLHHR6jr<`h#4V*z;sv3ka z?9*nSxLW@408<0}n*=1**7MEhQ9< zWi;bqdDM7>44V4jw2AVN`Y8`Z1l>Am`uKaM%#d#$KXvNFN1}p~CFdw6eDLHc_l%!3 zLmn3W0zqh&!O;9OXH1WB4#_rd;sZ0~y87|cC&UT|KOO`{nle!yJY(v_Y2&9~$qTA? zV@aQ~(u(pR{BAVJ7(C-)NF6o4{ytVui)4z`Ioe)O{?SwJnLKR<$c{nqcVi;IxqIr2 zScV{N@PjjFPMJPQ9yH@Y=se@=C$KEW%p5;+Vyx_PaY-p_#^MsSfdq-4K7)OvKI-2= z%MW6GgO$i8S?Xp?{gXTby1J|ADBF&exlO#piN3q{n`Jb zp3d5K#`Jq;)K5SKg6=ow!RZf0JB-@oR>?eQe0}{yXqGD(LM7pA%^WXZKVv%dq$?c( zc7oT+l|`)6m$R{Qty~WO2Q52IFWX2ht-0>{y8B?qxQaJ_NqYF7$Zz})nwtVM zZvTkfClapeef|Z0t?eW7GWnH!LLUB#%qCBgx``I?74tjx#iYMrmqq^oYw{3prrk`3 zECc1>x?-^FHIVBjx07&4zU9WEjLM*MB{@LEf0@>bCF$npNzOQbzU^N`eo9zM#4fs) zEGKtl7?bW#3VBUA*CbWu5qEzBKPYIfG!;1Ia@j1ECF?VtnI`+6#23tuO23m~B6rv> zZIv!M#qFjSUwSMXKJQ%e>(^;t?Nto*d-=)bD14X<&Xom*}W1 z(Zfdb|1^bZQcB7|0D$E-|kFfEzhde7uQ&W&@)jdJCv!Y=;4%>4gbO)|Slxi`0Nf}Qu} z`Ll~|P9CwEPnDcuQTU9PhU&#P_3zsDlIy5>P*vEH-JkQrDQAD*UwPd_^?X^C)#h{M zUALDk<*lOCWis}VHolQxCzyMP`!-=j^`rC1WU+yMh%p0-|$z|2Nsp1P#4BzCS&@YM43laX|K)>h6 zctf%k{EsGjD`>vl_r7trK0~HxSCQh!o+O1g-uetlb@<#(--Pe8nxK}ib$s?NEZ@TXnvV%NFoYbFE zG@?K=dg!=`V+Yx^qP!Ka9hyOq1Gg=obWgf~bRaStmM@@uUAkOZ1`_LPTG|ESL&@4q{h7Wn^g?}LFH zKH%oOfpEVvji*k0l0PPtXj2Nf;%7)nD|}>~OI)V?U9*sozk^Z5I4N%oF9y9SUS1mD z5!@QF)<=9UDQzs79PTCtei0E{$miCJq&RJwXOaPwxM@TfR5qfIC}xjxW>kjtBsn+5 z)IgH_W7qIs@%K+{;J+co@Q}w)j(?F1&LKOA&Bi5XS@qS=65doUa&PLE^VeTvvcOAT zK7;w*L3u@9i#g@azIIDWp3OPZMqGpS)uRi7spkF4Z-roFpN{PQ}4*qXV^H+wJ8RJRg>m(4AVYMhI?IkLrwl#jg+yT z^x<;;nw*=e%NGqPcAL#?^Gf-ak$nnzai?w<%tz$|AZP~3aasGP_ZgX*JWglJ6zB5~ zo+JfDE`xpvJmFF9oW*CDH8l@ho8obpa>~-&-ZI(aE_#Z;)j^BOo%-BRiPtQb`?B51 zx}yGBMpJl*Uwjhwfp?SeCPKutY+cTnOffTyOPyv-AADo*dFTztg&%~SynZPWs;r#* zhDu_*u|H?2ujVZGPaytuowHK=r`wBby_&Llgw7(`)Mv;9&-EZ#3TtkK5c-T$?{F_zk)9 zEi!JH#b>?F!R5cnSBe$)BoVGce3}1AxXutNDdIB&ezB8y{Cvqs-T?~>$FCtJ0yogk zap^|0)54ho94X8op%l(s#hH`05l40hsVZ$D*ALO;{!IP?i{Gn4i*^(7>#j+K{h%u~ z+3Za9Ny(O^0QFFZ)0&-2r9O5oKPe-xpIjjZ{6a~vR$MEz818od9SjA0X5YGz*Cr+R zn@42M`82$;P5e`e=xt(~W)Xjo-%14At;PPFJhQuhioN6-2RA+_TB^%z;wz+BZs++V&T!|QZ~Nd`-q zOhvL$vlF}+v!;Rjj@M)qs@&e3WJ}o}Y~-3Oj{ksUfMZc#TQE=@7%?L~KQk*o|JI!B zS>%S0X>i5$BSWe8*A@S-%{jyn^aL%BIzky5OSzboq2g6qo`3Tk|M0^cckL4-chaEsBr7$= zo@vvO$>TY`NpJ;|bX+I7p&-4gn-Fq|fMV%i&fk%lYYLe}gH_+3daMqYO9Ru+QT?~3 zTwUKm{jB%BN(8=-c=IBDF|WHut}@-cf;WVRRVMTP5XY6IX*qKq)%vYQcgUHUK~1h? ziE|ZEXQo(bF3NCmPKUN{X5fApXUQ{CP3D{Hdx#IFd2cXH;<~~7v6o!433`tIb?t5C ziv+Cc<&oMva=g`}>s_?n#LQujPk zm18jG!HtlT|CLg12wL^7G>Ej8OStm;2HkS^X#EX0+#IqD@(&S@kvZCuclqDQt%Y+) z$mcnwxTqz}rTa=7=;r&>|G|)rq#uoZ3_|*Oor+(Lj3Wj6%n+`c28Ab%rVnmf?P`y81|3K~eB%lfB*xiwDX3Q$?eH^N!+7_1km z#eIziQON_4H)1q(<{W7K5@z)vP>yX2X|+7GCw86k<{xsK6_f8wtT!h!)z%j zDEs45Ufe;}YPV{+{Bp}M9iKTs!>3%Q7gDT7LvBqdC?=1*R?Ns?A(d6PZP_vWn`;%W7_SQH}Xe8U63rOU6v9<4OzD({waDkLS|HX&tHMLyI%S zPMq(={O(M;n4qFX@j zNtNyWZ%fh_7D~R9K>icN#qCF2C-ke4Vz?L2@4(H0fEw!LqPdklfdbvoxRS zAJw@ktmfQd`WxzlSv8qv_ZfJpMC)>yizbqcHgfGvvxu0qKqKASM>K!VOG%tqx|P;@ z#W6l9_j)}yH56}2bPxTEe9zAzTJC#NJ!1&ReMXu!g7|@czxm#My01t*zk+0y z_y#4-^xaH+BUALQTODI2>F5_Q82L7f^q%%-B7VW&Asymx2ZP%ay!4K~i5Iseofqn} z{lz5%=aV4D(7D8Qy6N|ZOU(7-HWR1QZtz?6 zzUAbPd_Nm+OBd_Y7DH=MJ(M^YZxW*<_@}E^r(iQVyq|Jo&^^QM9kPwY<~26`sSkmihF2)`VoTg%s&^ z=CFfLuFK8m90M$z!=lNzd6Rf|YDTT0PiZYF^uW_ROc-x}htPjL6O*=vi1Vw@IgbiA z+fCPW6Q9m>x9f_M=eAWr*w%8S=RFL|oKpIQj@U9jOl9CV@686cUsBPd2l|>hc*SQ>EXNH6Xd5 z$Or~iAF=0o^HNP@Am~uKp#?6Z#R|{S7fHEEG|K`HQEQ+Ef_*AIx_jQ0=D1BgHf`%o*G~T;#H6(0qf%L^zv`&*!u^)J5A%Yfq;?zTCJl+V~c+v+udg;Mfwuek;ch zh9Yq~jUM8CWzvm3Ph5eV;*rd$RkWbiX)|$-AV(dt0fYf3+Q-my-=4d|)rw~fOUt&B z5jxHqOcs;DeVYaKUPLy7m-T8g;0rP|#gZCbN!%)?)=QfPwk2!WN51wa1g^lI$w~ z4cbQ1C*vMYZ02uCs+sTsseF?El3z>&ZsIVWd$^3_l3GaQ6Bt2^$(~RDt%&i83w7(f zgItr##Bc|(4R}PZeVojA4bBcrqq&;x{pfK8&k?)n_E5dQ08XWJMTU^q|CjJAV*iEQ zbIZ46KYS0T%yAAl(q%R#{a*Q1nRr>(>|acBGjqF$;FQ9I^DiTg$$4g9|6#;>ce?op!dd>})LP!= zi9Yo|WPw^+n|%WP`GbqC(FPtRUJ9LZE#!wJ!;{x$owbqFxJOlTTp9bf6zmm~IL_UN z2=q6`~g-=yT$=epbVie?|*AU zG?x z%SyGrfYt8PmiT!g-PXwEc_^84!rN`Kn={JE0$(I2QI9OZzdR>-s9l>RaYnyg=XNAwD2YJ-ANvqj8zUHP1T z`%Xe%P>S;g5sw586mHTAybfj_9VJ1+8MG;SgEi#hG!!mxa6Avb{u-D}c&ZZwnaWO` z)u1tX+(Jq+R~~${m4wIA61PTcD6}TI?HLABx{#lrWKTC)N@*aUILs+dk5x+rK|?e` z1-vKXHn;=CQIsm`Q=LgBDL+t{<)$WMPF)h@n`AKL!N|Gy+PecDqrlgI0YwlTJ_{k{ zRM=%#WO>752Sh(>z&@MMFO|yNFLtDzFIcV#N+~YMY6}<9aB8;QlWMeT{IC~ux-|CD z{_@+xQnJHmE*dg3SL60myGfS(8G%v(*ZYfD3Eh8(Ng8u`FU@HA>3J*t$!E$($~tQz#tN;nq1J7avvVXE-w>obfH zkB|+MG?+u0zxjMqbWE0ud;4|yH<24W8na&@MOs}>fY{P(rjW&CPtt4LX3lzRwlSbj z4bvo#ozG3vB!x`T?isY-Pj?@SN&2JM*6*V4AfKy)SLDVzZ}eHYpwCj~;VYdvK^Wv< zoN?*l4Jw;9&CRcM363ww`O}Rs18TM;kaJO%;gHLr@T{ey5 z-kfNT>Go23>{KkrH1R;NDgEC5{iy}UQCP^XGHQ+0`uslCSyGD4EwKek2$2l?47%#a z*pL1oUXsrQ_wv&-gQJU_Hjm&e(KNw%xzT2(5U)KuWVJZCP>GKt*20jR)D_n`h8E}Z ze|d1YceswbCY?a%G?`4Whp%u~*aHxu!k8@iNUkGD{i!U&B$8<#OFvdJ93=LnxA_i| zDrczR8awA%P6lPd%I?qB4$9!T6th;7l&32;>Fs?oo+kNDt!T43hgWkpgYgSe#}zh` z{Ae|@>?7&Av$1OQ6E`FU4w8JcV0ME$f?g0TCY=C5wG8$mb9vTvHg_^_913yYODRta z9peS3$w&K}#$IpKW^&PDX4`L}&;Aq>cn$cpElj;gGQ(ER>eQOE1$!vPV>SBqawx;h zIj#SXu{RB~qbk>iYt_7Jo~w54dEULdd-vSwbdpZeA%TQJ2nrGb86Bda;u#bV=U@yW zMnnvQ7!ff<#K^%gMGT0D9E32)3A~7i7$PDf21LM!(|1?z>izlaz22*T^!~A?TEnxR z;l7_0*96f!Ni$bAC+Z(`d3Mrr*ivU)Y)z~#AD-p8m6*0{x8*(v?634%cIl4h?&@gm zJSjMG5wUBkk$zFzd6~%n-7EJ~La&K;6}O8~#hO}%nf&M{q(-Pf6Q8sSZFiNS9JN{# zEGy2*wSh}Wt})w=WBXs6|5$JJF|w!|78ewl#=wj=YX932d^GHcUd2210|V#gg6K3$ zb2xj<%1(|Rb1qX_a#qvUno*@=4Q2!~8K*-YKk@d69_n!WtVrDS+-u!ZY z`C%84{7L<8Mlq#No?W-C=ILh__4-Qf{R6ZkTc>q+?aZ@>jg%7&Cn|ZJw=9SHAG8Z(mvRp6Nj9w@jouyQjOXQ+dU7r!|_`Z~RiyOEr4 zDgHA4u*xW#)8(Eg?s^VpwE(_Q<%PB?#ii=5okMK{?q*M*V2PS&opxXID)R;DusWwAq zaEcBr3g#rMPez>+#Hi=2V-Jg}gl^7R@HmS^S$+0Z$Q@?n8vsTF8p zrCm14I2=qV+s@LmCWU4tWUE<0EQ}QuDHC&|J1dM2t}HT|4wk8)x{MtAlqeB$Tby%- zSkwfYH%oq9(;PjtHND2EbcN!$C8nEpnyPsVoC*1+4Hu<7 zRq3XsZ}p!SmCQ<3V)4FW9o{Ae7Yt(#)Fyw4BQ~tR5skdFhd#1`y?q zUhx6?*y2OeTM4fnIXa71kTR^OE#TPFSk~tQm-h|!utAL-tc}w~xjS`>08u;CtA8TB zVaYvC(OlEa$x44=l5$a101#J#79%lMQy$6oDXJc7Nev7L^qzUFT)M_wDUfY0=xK z4vudiQRkQ=L{D|>B5V1U8?vSDc$atLw|gG?|gR|dh6ot6Ki6RDoMgY z)mAOqG;pT7g=bOtZ~s*I!9_1jtQlWyu@vmYOyJtIK3FcyiGQE0z>@yGS2#YMK9#}}Y>)0RR^oeq z-z(apH_qHSvVoK$Gk~y8`#Q;E!E3Qx>XjLfzT}*o)WZXyimg1=f z3Tqv$=?FULzMfM}isVFs9?Es!<|h_u0#gkfLlrV*ma}VY2NI9VS46?nAoDqORxO(Y z%4n)X9^nkh+k5@zL3O`zWL>N+BW%!?41*eojo2%AQ)SY-ay6#z8@&o4-Lv$K&g|%^ zw&G_^^rLgE8>CaW2EKo!glqIo@f?JFd9oweD^0)5rb$r$!x7JL*-U@{-OyOBQy!eh!+(YJP3Bkej{E{7h;8J^Di)in!}k=4k%v1$I?Yr&7{H~h_@I*(IvIsF z{ZpZzxeRQpPuvk573+4x6A80af7u=Ep2?1pd{*L)x#}lxT;6T!qx9ZI2Zy$EMAxAg+5mV3nPzsl94e~B zYd){{$^9l3YsF*XII3rlZe>lJ&m7ZfbzCJ^rX;RVup)z47qx(fTuJBKC7B=S2wI`P z!DMWas;0q=jJYcO^jxZ;o$XviRwefU~ZLz?de?Z?PqwPQ_DsH*vvZ=N$E;~a@Cl04 zq#xu)rvqK?GlyD)4)=Gr(ubfH?0V=I&vn1KMXzq23;iz$mT1F%UN`B;=gAs(w8mH7 zT^%9iB0+xnIyCaRZTMklsl2yWcaUDwbhnY|*k@as%6kRM2^N-^hZz8Gi?33d(L>b` zbhWG5)yO$cN&elY=hDs%dTCpaFJ=Gj`0#t=l%$IqITy;)_cp$gmdMb9^&R}0|8&-j zb0r%W;1D}h9i;9G6h=_!Be)cP^_BU;A$_d5naq|7oMKaLt()hT9G+V<)E)Xqoj7IV>S2G9tsUkvz}| zP8cw~hExd(IfdCu`jp0DLyjsi5zHj*Ev2=5MGLXMgZodxd5P<`cbYXdg1am&nJz zK+FXzE?9XA{n&AzCWzI?CmPa8Ut>SGbjg{gp2&weVYst?+ONK6FmuW-BCahR^TDyq z7KAE}zk^uI-&H;O=su$rBLEzl@U}yGdoKiQDjTEkQ#4hA`%W3m|&&BGVtq&YWB1t zWG#x8w|aZUGs^FoI9(v3RWlcpV?xo{JwXM1+{i5Z1A~GdEn?{S95A0 zObuAMi2EXGi$)hfR5X-TC%M*Q{nXVWV=OZk-9tjp9A3e(Yc3%?DXeAfnfJ}sTHDF- zxyF>X0{z}J(hGtaSu{=5O9-!~Ox9yD}_nEay%)l_*aH?<9vZ{R5y`+d+3xwbL@jheoAA!1=P>WWw#DHXnC=} zn(b!@Q z7pldr3HbQjR)qZyi6Zy9un8{Q9~Pq z6|1wn0-Gi>O zj9{1DA)y3UAao1dh21(Eh;x#B@wV&JI;-f5gEz`&#FpHsyqBA@2bdBGb!cU_#`pW7 zNjvLC8DzC&9o2Yn7omGG)S{cHPKr?*r>U;1)K^GVEZ1~iI*?`RrGm)U{QMRf# z6DwJO9QbUK_wD&_{uJ5qld?8_Jhy{y$1G>9uCVSXw7cX3wj>|0{qsLdOJ(Uz*~f*o z#%M8eiKqu0{Fg;d<6LE~RUdE*=NS3+Uin4z#@uDnEW-+nSsTmeB*zJ|BJxMBme+D5 zWEd*Q6ql%>QOzN^qv#qb7FAEqAZ=UH|0T)Rzu|$G(*CP-Z)P)hUQUstjM55_Ej2R5 zYM&`0gy1@iYGVhYUJZVE80vr6{M)o%nO>EDN?flQ7J=HvDM48g%|Tm}1k)6yY%bk1 zml9`6zGlN;(pq)8uX?+5K2k>qv82ioo{AVz;a_J}Muwk&NA%Z&h)VkVLNfDzz9PwN zpUh@N?`fUCrXjm>6t_&-jCrnfCZi_$DGGOREN|Sk_s`w3Mf%{x>wRa)qAGSI0gsFI zL6z#~BEQNQ_H?@Ckc;L5dFRvfb=K1d#x84Z;b!E5r>UILHiFg(?<@;T3bIJWP%v=j zvbt;*gfhpdEzt{FYDgs)HkGPMtX*%Y9LbI%ym)jaD(i_xZuy?;u8iXBxVsS0q#|SK zo+zao>x%?J?2cad9eVS`gMHhGI|H{mYmZ906q}|ThF;S~l3R_q6+JIz)OI#<*1_UT zR&pyr6!5K!o=CrXCB1#*_1f!XDvonF^qL|y8pCYKQ#C#p3?F+~yB+}@kk0-~UbWv22w=csH7pD>axY&O-#r!RDL3gV5*3U#xEs900CZ3%t(SvLk9@ z(BJSKOA35uqE*s{!;;8aRaVf(MO9`U9U?o=@rr3=kYlgx1;sp5%$6Cia@4rX43wC_ zV0bSQnaD8Q@w&?UO(~zX2W^>k;p$ZLT;zsgIfEy9GA@yI-N-V13oMF9lrYnQajwh_ z^}EZDXYw|yn>B=;HAv5`N&xlW(`~L*fKO(u|1HjhKWQ zrM89egJMaJ!8XcB8SATtB^i3rm4Y$2A90H(Q+_2uOzdyH##;2L1smHN$XcjX*;vKB zBXL!Y%jVCcgsnnw)e%KelR#Wj`6>c3?uDD?C$&xYPF)I3G0Dhp6Wq9}79)40h4r^| z(daK^4VJPRjKl7&cLp}hhFNgk%znjc*t~@wssJdN1R-V{(iROkp14o)K7(&iU^q#enslXo8 ziCAnO%LD=@lS!q~)x>$Pd~t6?N71LI5B6_mBZx0z1cGfvv5%-NFzZH$>q3@Ii-|Ih zE^vi1l8_&9I0s?JnLt*L`EBisbY=Lhgs5JM@Unb5IME=fA^RxZ~Lf@V|G_Xy; zHBS{y7Yoo~OnecN-+I^*nqs%K$W`P_u4e1N%y4udAhNBxHNdnoI8~9RxwME?0peS< z#R8zPT277dqyY@^f-|Ip_s`S@Lr?Wvu2K#oi2|l9yE(81N_|Km^#ZI-!1hsB=UrDa#mwVm$^reM6hNnkyglf4#F|YG#Ha#HMBvO0pqw}*J z(tD@=+MJCHr=&JqKOm+*Vpir9qZ;{Y((0AHvOc|f!NKPAsZPZqQQ4~22ThumycU>C z`Df36X5)sryC6?*8hlY*$5af~3*|=D0jk5p45~~$(It}!Lhgi?{L6>$PHXt|8uGL| zx}PkY3K;E_=J!BEN;U`#iR%a=)mJ|Hd|DF3tMTGa@`>jNRg6{cxo(B+gdcwQhu?F$ zJ|n)*9Y&(&vhc})UxOs1opa8^1ZiF8x(q=`!65(i=C68#+{fMLu6>H^V+WPPKegf= zBgNCpQ;IDq`6EV>L55^I0Z#L_zrT1<_p@BYwjYy6oycu~YSO3KUMh~k$ZyDxKJ%Mi zxhKb;5!;LJ2Sa7S=aH@^2{tF~?MTY~^w zj+$>?duKX~I=!^>mU%vp*VNR?n8#Zxpx?Tr#tL67X-iKY^s2e^?*3--p)Wsv;pX{? zyLEiKG)ijCQS$_qw~m}VvpY8ETJMlA-}s9y-ExcR!I4ARePn%0@GMDGB@G(+yc^3f5?8;1kB&dD#v~ssWWY6iBujn-x(WghR%gtU$riENJ zIC`awLu$%mGD<)YzeV7by0TYzfWAEXVh%>?vVz3xR?QBqc9AgJ;ZoQi6R#+klI-HL zxAStc?r2~qftmKg{@X9_4nGG%=}TtJ7znu|LdAT%&74~Fbip4xY(X--8uH0NxBPXl z0*HJ|Z#UOk1{>MNAkWx^ykHoFGZUv*QvRky33;hkzC$lvcAa$wL$io_dAb55>p+GH zR1wK-S~i=A^0vexzl3DKyh)nyL5@f~U2py(9b-VRp14__7H0-;B=KT)wEFLjk1Ov_ ziiYIoWYzY*_FP)jrO%D+)!JG`pX9C~(kaH3>3084qOyPC<}Y5+{p>bmX>`zRsOpRukiX zM{<3MFXx#g9Gool9f|(`_9M@xWy^GT{{!0ksR6}N6+>R>8E%Fn>L^g{oR(F+^gDMG z;9xKR(x^Qb28?vn-WdrFFPx%p6!wevkzrQL5woRn9%n)$15_wvg2gSiM6q$43$#)=SZ1lmtFFe3 zl=*b;-j$e;|9#~}X=5-U^Owr)lc)M&gfAa7=8mn8Xcqu!xAaPl(zl9l$vfdAGAksE==#XwBbX^RhzBYX zDXRUz35&F%B&RD0C7%vw#=b{)f2q5ktKb9JpuA0lU{Zx<6vzU{@Ra(hkE@FZFQ=vtGg|5=`95*pCBOCjeABb^<=h)8^8SdDSMZOS z6v{CV=8$IfwK#+j)m(|G)tzuKl=8Uo=BCM3`+j|J&W`F86 z>(YJs*R@ec^P{Y6Q^p;|PE9^+iL*l9bYQ;sVftY4fVQ2$yp3Iz!(GIhHm7(#r+O2d zqR(*s&@nZ=#ItH_ROW0}pZtJeZ^J({-wIfS*OjhS_wa<#frRFHAh0C?*IKEBeDQ`g zU4Bmoz+@=xK6hu+%E0V(Z@I;(oO^);hhr z^ptYG#p_r@-8kH|F&x715+fi~z>aGg?APv;{xESnz22*tq4(yWRMz|lTn8Q(lt$#$ z)uvnwwRBSMOHSm||JajmndC(7a@JZ_LzHtFQ3#6&=VcVO9;9deN6A_LMX$V1@2PEe zrh(koG|7lQM)KK@&gnZf#5(W=FaPTCwBNTr>TEgR_Crb6|KTW6>Z z+`HnW!t8&Nnt%AGnj0I}=;wpt%SwT%XIQVWT=jt-BWi;NRsrmSd4JLa1pDNM8~-=$ zbC_OOyieawn3|O_fVp!Nu3(B9Bsc;96fSdaN-Yab!<-gWXJmR#@$-?#0GH-ne|jQq zBt%T^S$(!LNo%CInr~%zA1{XBBa?mkNzBFry`nzd*?2&o)}p=^Q$?W7ZgYu!m~8Y1 z6G`^-UdaKt#P8F#65xPfLuQOX7L;THLz&YI!+2uGGlIng6P`5iP;!GjvgJTJ zsv>=%vC%sNa+%lE;24)h5D;s#R3Q;cF zvE~tn5?Se!gjkarj;d*kt15(W#t;&C3$=1aQQ&P`7Zv=P^pwP&H zX`y*>K-lQW!KEuQnql zqP~3YrZ3HYhSWf4tWg{t> z6e`q;4N0x)u#UPj@&o~S?)F|Y%Yf3oojrh*hr>ebH5oyMiDC6K)J1@vdToo*H3U9f zHx#0bq~w;W05S}oz}M<B(f5@BGu7>Br~kes>4AF3@Ut7o?(yZB^#=ML0YC zA)+U9)AfH6S-kx_*Ll%@jBh3-=m!`1O-smMmRx?oFb8G zCckne*ame^2s)#K-P!qRvLnCPtJy-$-RcHXfJBZ(HfQmoU0OSoVLY&S45YMCDn~BN zCb-vRvpt=-sBgdR&a~Sqy~NsNoyS{{78Ow89a|KYDi`aV8u@|9+VfiC&yv&kaIfAZ zz0i8l+Cz*A2nM*;aP9=hGE58R^bAg^3d4@RuCGYv; z{184&w>q2ctz5~O5+<$s=!_Ik0$`Q}Cmh1GXu(_ppg8Si)@cWvux9*dJGMxnrToA@S1+DI@Vp+pC@zh)7}88bc=n3 zd){J*kP3|}O`-$z+~?@k3NhT{z~k!r0BYbJ3I;*wD&au*)_PJy^zyGDX(y}eO!@b#AThU6T zP>wuTG&2&*)m;V<59r4g-(cLlKJIlp`XzBrk+)p)g&VqCbPavo+a7LVR}D}kJ~vq} zQXQ~?Wh6saWkZBx4&mg$kRgr7CI)%aV2hying$6aqbjc)Z2592LPSWccbngzoSBPm z|90AZp5ANRr>&bRFgZ&U$756hs9{9RDgBJ z^8wz-vqV*;PHJlWia6hb`}L}q)7Gve^kDF|b}P>~1BS-1{@PuH9cqwp*y96J$vFbC zc`H(Fmspu%2X<0qD5_AZL~`sV0uByG3RTc2CSp-0wl3@BeY<35_)gRy$i>Y>V@Q6Z zQCtC%j^ZxEmt9>J=!7oY#ep(d3!1Jnc^F@an=R&64pvfS;)Ue${Nl5hf3v%02%8yu zWVlllAk^8w=5d#cxM{IyqeY>Z0bEwd_?YkX@>~X$@4{~-4`3$uQ5LAO-QwEVlN)9^ zMs!fLSaKo5n3R_8olaI+N)iRPqc-Ujkl zVf4nFX;UMsaN|G!tB2DT5VVf(wALFU>ovd@&2qrt3cAADI`|(E8Ax~EZxUz4fnKdP zeJQiqftDdEEj4mEv2OElxylkEtbOn>F%DiuE?RQe;Hx3aFAmn7H$9Seih~v3034hV zSVXKrm)A0JAeIBMPo)Y#T>@VCMRto+Nc}d^_%>ho;GNxR8=&_MUYlrqKqq^Os})!^ z%911*4AFEOR=F+1G~?6)LWkXXe>qWRfApn&cXb;Wrhm5|lmW)i0s13RI|xiLo^`?n zO}8!zI@qSZVZajPlx)suq;lkUiGj8I^S?|Rap@!eUU^iua=gl#t-gFEC32je2&SLS z7xU@<=#Vk}?ih4RkWKPJrVpyv+-`VLvQiqcD5|l3;4Q34YaV6U+opl(i@$f%Gw~1sT?D`>NPB&{LBSQaPa5G z4p;3-@*jKUSJBU8I_v(Pt;=ib!Hw#w~La46J5hGNkQdL4k%>^*eF3jyLpS+gb4L9}bh4cmQNp04` zRWEC*SZzkIec?`-8`mEa$Iy3rWy^Gje}lfh&``C42gU`oYj~U%BJ-rrs8LZxiQJRn(CHSMzR5E!Q~V|bQU6L3GlTbfK>=%5q@|Up{|f1R-EreM^hc-E z!bg^x(T6@cK5-1Q^hmg={5%o*Y?CY2iq(@8eVygN8E_T%1)>Q&rd9@q5U$?8CPH(^ ze}5$%#Q@Njy8t$6Oarjo7Fz|@LL!A_M;*-!O@@-7d>tSguiCQX6|?Wa@}PmgC0pPd zy#_-1qW^3>J09i0r_IL`#~s;M;@inLqwL=a2+W&axjyaeWO~2*c4jZD4X=uF!ftZ1 z6)itDbJ&t##j1WbSr@y@hEq?yPZ%i^vQnR~m1VeZcS)tlZz0F0hul;PWm&J5MlkNgY^+40{O zUzC=GORw{sJE|OOR$L3w?tdLl)C#n@k;N9j`|tDR+Vq9;h0+F+%avTYV@ZwZ)L8O# zyI*0Z-aD-2K1&4dmn4uUlkL+0CLKRI2AoE! zU4|z_npth|{Y4^NPd-4n=FAYIE=Pc#p&eN9GP@Z7R`OXE+yCp|obP^s{&m62{ToQ5 zLuISxY1B!8QKAP5=8f#^6uE>&o~wsQKg0YiiP)ooEv$2t{HNF6NXI`(cg|ckxRadw z7&(el*G022)0cB{AOkxW@N9ETMp{-=JChTORIHAS)tTSnWe9ALbU2?&mh!f*{SdEQ zCz_v2uOK(Lqgou%g2uO&n9`g%6k;4GxBH*U?I9bzQH@tRNNwWR%~h$w{&^N!#&>(= zeEKwt>@!oya43YIB86~3Oo(JjH0si%#W%nA|JL)Ne=7HX>-o>Ua{u?9>+)ZEB^~;A za=>k`iwB61`zq-#%sCiB@&y)tif2B5@PY2sjMDr2_D=02hl$R(x>jp3YnPuDn*8k9 zOl}aYE!C+b?+ky~N@*q3~#j~5W2usgC_w*cyY7h@GhBEMJsKM0+|pc`tnltF`_p=(bpOI@vgg-~Ajx;qrl1=3 zl?NRzQW@TM>rr9UPVk}4a-|aqO4FZ1FkpqRO2pg~m%NcS(*`T`COA6B#agZbOQNI= zOf>`s+|#0T`bkwW8|HaV^%02aj^ax!xbHvhRbN3Lnc3r3rkq)JH9v&@zD5>qA-Ph` zV3CgR7=|}Y370Z8DuQJWaiDyW5cF=a!4MeJ87>5XaPI4_W}WMZ{QKAbl8);VLU+wv z80=%&Xett%;Q=p5AI3}R_QZ^$DH$ICC4#2{;F;!dK`cF-jJj zz?X^)@&<{lS(}@J8s1=narS(#i7b6EyW3r>DP+3VQN`?#D;YyB%h4#Evg=sqMERS$ zzMpn^7=601$9o;YiDE2j8Unrs8;^;eUxE>-I!HTJrnawYUdfjvO${07(-LU^@B}D~ z3#?x{5TAUVg%!WI*KiBU@SXk!(k`?z$PmQya#?mn#v5>SF{76gUZXwCRTG5(^S3?O zgcm(LKdMQ3L+*9N3=pXWU?$+5r3@&_j;ZmcMF$G3i-z2MIp+lEZX!WiPfY5|uJ6T=7I(r?)|&t_zGhBuX)SZty2_n$2V>S5A2D z$(Md3IU`#y-tj-J!9-~1x#itnzRALT`uYFN_mZLe>pR0Wiw77WG4w)C8I5)_Lm`RA|Bm#)(XO3ymyTe4WGFu6uE;(V!~%fWJ_0LWyJSH)sL8=U)^8(En8 zU)k_j`ZcTQj`nMqlGw5F6r;`2v}~2~Rb>=zYP4cmsjEfH8RltXPDdkSnDcCMaZQb|l zw4G{VJ4ELxQOR&5I8xkzj*;Z=XrR~QhW8=EF2SmI`CRruSoBSx8~2t@tkLH zxxgm*Kq~th0)8+&<{=C~cONhRtygCm-5+nu9Uz7$n_>Zu{(@nNV25}i9xELo&0Itj zUD4#!ga;dCk-W9n7MPDSPtI&0L9OA5g)9z45M@APqB%8VYE}q3J-XpWy2JlYVu4)V ztDMK}|H#sHEsInZxn7)w8<^8hVItF7xGKHycO}R0+Fp$i0I7XTXPGFgkp{e_jJC3d zh;O%b;FM05uYGCvOWny?O>bA9JL5-R2EyV|TNJ#=F{;L;N3ZkZ*>|SgGTK8kd}+(4S%$$ zFf;D5qCmp23^H7tt#U~DDZ2!**3f9ust4uFs6$W5;KmD8pRKCqNyVTJVT=Hd3~9S+ zXjCpCo|+8w4i*Rh=U09=9Vddao!!k1`Cx-1=RyltZ?jtC?8ml5! zrs;q;7*HY7b-6RqF<$94P@yje8;i3VPokQqHu^cyhO$&ODHq3bK?D#ySS#Qc zD{`8j7i_yBOUQwkbmNmfEEp=^*niP0-CYB4pLc0)0~xT8&xZo>ZTZ>?4ACHh0I#Dv zP=cCAlgf$z_f+WC*Zt(;v~C+7@@MjAxOB`5xe9c$X+qU3NH+y!x>UOaEdfNLF4ERd z&}hT*u3mKjm#w|=y2!{Xu@T!23u7y{B5%f|icBYSgS{&e{on1?$k40pr{XmQUW-&d z3Vg}8q-IsDq;}ceEJEsU{%mtPJezLvwq@ITG#HerXudnWOHpct{N`Ujo0b};H~RNw zx03)V=4@3}9DvIW;FthGup0%nRLxPOv@Tok@g0eGlZ+e5EPg-nhTL)O<7p!%y+Yn? zR2DCjIy$YN*)4NVauYmz?^|h^BHUe<#%D}-Oo1T4WojVdg*GlGyWb^US96X0Ah~s( zy7wPxohsd9UG1IMFzWC=mN+B_)S-4Ot3eHgixp&s`Ir$xbHnofUcEfsVC=WoNo@zv z2B;DUv$GkHDl&>a=ZwP_+?(vu4VOOmhweV8(&yyshKt-fF##x# zfOM8_xPQkSZ~Ddlw3vZ7mPv{$N34`}<9^$OT9Ifh+~ zwAsg>GvpJ0d4+!EIk4^vA%bldZ3_db0? zdxcJWN;OiENi#1BnR!&veTj7Z{Jz^>pO=mg=(h@MDTpmKMxVBAhhy}9XfLHSWcH(^ z{PtaU^~!J4UIM9;A34i4SeJ^!s|8yYWJ8EYMRAz4%l*jsVHpR?U_yzGh?Lig4}gW?@dk_~d_* zPu#!d>E0(E(07ux#&8nh4jI!QvJD9t$nr{B{(+?F-}cG}bdPqztitQT(wNDG=D?sO zmr`XGDCK_n)n3tvKBtj2t73jw2jV2j$RHVTrZl?;1FXey`ToD&kGHOqi>pGPw6o^{ zHmeTAHFluzPDIr{iMLf(>cFXi9XW4WeF%ENp)1~gYhG~eEnEi0jtOi8^TD8Xbf^L$ zD1Txo}ZMZK(u!8USAH1r=m1s;Gm&rBmVTwgKc+CdZi`Z2ljR z>yf{(lyyZQ(ocL(<%l(~v+e#QWF><|qHIe`D%I81R9qeOZ zrWGD5Zz0Tjjp0v@hi58mLJ@VVzMJEWtyv4;aM|n*~wWPC)IedIVgzLah6mbfj9RACVDsi zA-U8+QfV+Ok`S6Llm3zY92*1w3AvSA$$MEO+<17-dGe3n&wnSJCr=Jt;%~vrB24Rj zL>`U!C=MM~cftMgIRSY&lNVux{4lhvN7+BJ+u1W%kWY=A8U&e&5>2z?4*Wr8l<`(w z051)4;RYvZPY`H^Tp3}xAaFcJt`;msuVxs#YOCd(&A^V~K*PC)W!tT&&3u-OQge18 z78hE>Bgxr%{@Xj!mB`Xp>czE(Px0$=ow~MikzA#Iu+YwKoyXWe$~t?9{N``xE8IZn zQ`P-qrJ*GW>qKm(VA1*OO0kL5!5U19lEJXGA&#A>6JA=02ZE4{hfaS3X)V^XWZGt= z!$>YG$&TvLu1l5Hr+q? zmU16k;t{Av78IHt;#UmU2bfWd=SK=|0Zg(cVb^8B4fDp!BDj#g;z2(SHHX4C$~u7e zi`jayMzSAR3F3zxXj99VVeLK(f-ds;Djb+3bNB8~Sm%04zV`8*Y1dzn=!^A@{C35O zz#;?34l5Q-ITe9u@6Nd6fyYIZh&dm#PjR{X0!)m@Ng8M~1KrT~miUw{RMa62NaCLDLj?au~| z?285u{#p3m7nbR9p&2pH`u>k6>icpWA%_ONOiD<-(KuZ*3j*xlSdb_6;jF+m*zRuo)9 zPtp5}b$^U+xw^^gtKIAp5ngI>IN+sXK?19TNB-za@NU>D%ck{XI`NmG+VY1`dG^UF~ zDLfWA_@J<&Y##zffWnyEYy`z_z@xS-O^rt;A6Y780YZ>ONfLA*K&!Z>{zW+^E1Tmg zYj{3VygG|F5<6}n(-@w3Ff4)XG@Ivm5fVp1ND#;G7eou*ax)ZS5*KT79_c-73F%!O zS#z~4*g0xgH1sJ`Z#Ha+TG%q{M`nJ+3x2QI;eD&S1C6wkB)+_GfF4T+GQ zK=8CI37L#zbov}c)N^^G8mbx4y?LT{T(TN4OhGm?0aMfkL|+CfX1*W-dqxT}9u@(x zr?RMGGstpJ;nuP83JgT|)P5zb^B@tpj#0~VQbP18WCLWT63c@_6wD1dt655(iE=(C z=?-gWUGO?MHt5eul?MDinUF7m5{x|6MN4RaF@eAoT&n~rd-Q&gG&lx-1Qc!L-@v6t z5AcseY=ASK!S=s_1#82oQ4{Q0b!8kvGA8@vHbP>gNI}vm$d+scKphr>7(4X@J(9NdkcY&QL+m zNf8~)CLv~cnhA(I0^W+lv)fQt;0vI#$HR6&){a;J_6J!W=Jx$QycopFzyIs}zW*X# z_%0VW2uuY8TO=4@je0=}IT_FVFxc&Y-GEUdxrLBX4F(9}1e2(k$nH|i5=ljJ0=!AY zd7#uHX?Y07-GmgYc%%SdKu4LpY9RGIlpW5$nADNOSl|>jGieu)9s$A<5hNg{yqF4j znAf(?U_>Jc(UJDanL#Rp%L)cy1&+idaR(Gelm3QX6;q^#U^2W@v1acp1bvyAZDzB83ELMh&XcZrR`hZ0yPkJ-b!`WCof~6T4so02@ z)iNMc&&|^lEM5+Oy*Euu>7GjQR`Q8Xt5gBpAfwrC7BR{RK@4rMC3GY`uvO7^sSO`W znJW}$G2E?WT`XXN@dP#EQnxR*nKkiI-s;>j6Rn{B|JyXaA2eP zJTirQcJ2RT>doUVyUIH6z4pBJJnwz>ndfuQo$sw%b5&}{SeZx&BnBA_b5Ox(Gc?#j zF-T&F5N$*nP!SL?f<#&dfyO{1jcsE`M5Ix9c|{RXXc|${3h#GUZq?`gL%gZFb%wpy zUh8>&&u3P(>VQ5L9jh&r|}$>rD~l@mK)*fW2S16SH9G+i>URQNAVu*eywiY(ka=g zzG{TRFhUX7mpfX-xy5s-vNN$PwBJ{EiV?mPw%&EsHhA1`tKR?)D{4}VLis#wX%!nH z`J=b?Pu1iF_Jf!1!qepUJ0B+~Zk7RHxr1Qi@L_MsQN3eNlUQ0+X+i15uR(Uw3>0(++JVz)omy<@=0K(tS*SGJ?3gtCLrxX6 znB3tf;ZioR@w&M=>ju39qYsR!MRA~ghDoJsSWx!-jFOpHQy{Fw7~oQf)4BBmx=ek{8mdESUuysUI@u+cku5EJ`;|HwEmA=&; z^uTT9?*f%$N9>XBp|n!|-~-}M#L;Pq$}1FQ<&9>{&M#b(FRIBO!CU`@i`V2sLO#%X zoBm-Wh=@r&HC^hVZYGr{qs*tS_gpA+PG&eQO<9i01bC-546l#6Iq%IIhN`i-Cq1*( z9jakpKoo)9&1_r}s{3t~ZUQ5=whoE8XG>g~iJ~fTLz?G_){C&lC=AQ>ltpH0psb-y z-5R#pI;f^17nZwWwnP$I)`VGY%N&(vU~fWx7SIazXBz*jd0>C@(${&Kd`su0#zSoQ zNW#di31|4^gu&^}8gRW(i(5SPJ=p>-aD|2a)S_t(Bqa`eK6#WTxqvDd2eU zn#K&ljYW(!#gzP#_`m87d=}ie+;X6oX;Jz`8B-1u;n5ms&N$n`Vx^F~o~4XW9@Db<#6M+j zn31=gAxN4q5L6>9DTA?#VLrBH^+tpXfvt-WCU2Z!d&72)?8+;#si~G74A~}KM*5b; zy~V4$))jB4OT7H!CHqWnjq0;JVr9zTBWU-}{4$ zuhy3T(s`?Sa}Z6Lq!`|zK)SuD<a zAI3SYg!sqfJfDHUOdJi2+B(@<$EjeTwrTa~L|{9#DsK6qiC3k@4-pb!c0;-!{X z`IKKUwa#>%i8YEULz@IjuyHil=&Ts7zo+}sp}Nwdc}~9@B1169J;=LC-1RffFLlr> zm|7Kn_ECosF(9yKcY(aW#p6WQ+^(Tnbx#|3s+5r<_pt?$@Es`ou!FRQRTt_{rK@sJ93A$9lKl`; zKcUX5%lxi&Fkuf=)y<8@pos#;GyTM*S_=X*f0AK3g}e@njZ;uzY|YN#8knhLXRC(m zEU0GsuoptTo$70CrEsnc51wwYn2odgoLDi21hu7f)A`zup~S>Q-$bviwNu+`BOJdv zb`UKW)B~OqLE{Nhy>q3!JYOcK9%Gr9E46r%@p#&(ROmv@D2Ccpi!;=D^t*IX-_Yt3 z=P8qOYI*kdRdaW7&}OP1FJE(l@&h5!#-l zdLicZ0d>?eJtwmoSm)I6_89RVdVvVVID@*S$6xrn>=XZ6{iaxk%N`qGA^S`~KZv+- zq-7(oZXKe!ey3_vhpHV1T4LC^?x6Hs4drXZC&bNOGWKlpI21742t!Gy-+&#TLX%dL ztjP||mcM<5Gq=N4rEzXNL&kJ#KPNi17tt(o;XcUz?3x6x@%4X6ed5UPnGsoTE6sQK zv7Oipse3sPE}*YJueL_6;}wY?Q{;Y79IxA6CsX)j{!i3?ReLU<|0&C*v`ZDah1H-~ zzocDPrvoq%e*Ra{A6cE;u0XxPy-w8NIao@D@)w|=(|2ZS)63qg(V+2;7N731A60i? z64dR`!>`b0i+%E4b-UeR7YOBf^~8uIEhABlf@a}iQ6qjseg5e7^%WI8@_T-8aW~qO zUtYlyX%Gdzmtj!Lr5EuM_XO-kq-?7HiklfZsNq*JA#Yw|(%5Ls?Dt)IjZ}Vn^f4%H8`@8!QINqN!--vN>Bc*6>d;SnSeaAf7o})g(QoMV> zvkJ%CbF{>v&w&<+)tKF6F*NV`*J^U7{U?9?NBggKtNi5NM^^4v3wz^Wq8_+zo?9NW z4X4yO)09>bta!3ijAD;0wG8y=%Crn8nuu*EVNn7o(`Dd7+oOk5`jm6euYo}oY#%Rd z@?TYxFEK6o(~EERX(8`9c>m(O8Pybx{=vaBZo64-6bEGSEeZqZxF z!j4w_0$&Qnt1!;U&^WmH6oc6uWE5*r;}{_uX&p`1j{px_5oPt`h!!yHt8Oa777%g? zr4wuOJP_TkZLF7?A6YTO*+(zs-!u%Y?_K(K#GoDh)s06)SO;r(m@4Q39`?d%t zNoupUI?Hpzv^p9dhpKBKoUoOsAZ|YFA3M0&U)_z5d2WuI$nmJoe@K+*bPq@~z0HZ+ zm$i*DV+e&KhdZE)vt6e;H+f-Rb%*Xx+SjbllOvn$YeSvc!ee>|t!!0{ho|NA#NL|U ziS_P}+_-0)uHBuW=uR}Je2sYSuZU@j%_h60W%twW*uOC|XFn9mKbD`x|ht%m7q%) z!&Z{{M^EBMGw7&t7Fyn5wwGZ_HcC7nyR23=%P@q&O}JHf1w|nQ#%vI4vd>v=l;b)S zYRjU5zbPC0De{B8`9Tf;5a8}4+XKI0Nw4_!l(&8pCn1z_T#+8#4!@=*Z#M1kz5U_+ zz4vZYet6|${`trP3Nm+WY2gYQ8Ny#vEn~4dL%3)WX-B{+veU9IQyb;8nfVc8Hz!4a z?_-m%2aO>Z@NLnC^x75pVYo3~kPub?9lJp7dcx61il`u5NG2YG1(!Y3qghpwZZhwK zNUse{Cp9}=jc1P|40yI(;zAJvV8D1M$z8?%{O80~Yud5cXuu2(In|+-Y|Sl#a549- z2fMb9iz}|rc^EmPP&IJn9a2%`UMtSro5uQNpnK7F(br^mT@0ZPr!nMxEM-rV?lv%V zk4V{S%?-LN14r)$8sv+SY&Kx_-$daNYN*)cwn_Z>AD0B`n{jB%d;CN~wOM zv^}ha$d^DKXiAg8mYvVI1y0=KnNJz(_cE=Mv^z~JCnwv^-rBUB4dRs@sQg#<*r#sR zN4<$7DX5Q+^zfx(Rxl3hk=|-ztCNM)>9#h{&1P6Qw6?RuXT^4G*zOEKt^#WZ;A2MS z!5ErU(#F$+4I)BFVk6(^4_CBo{m4~=*438ddxK0hWKOSs4v{J{2kpyD;YsXn3ahI( zDVrjdX{me~IGF?XO*i~kqFYnI0(F6d$0K^p>ZE^~V(Bl{?K|2F`V~|IokSxD7lXej zp6lHy_0Q9O=ypWBI@KG^7oPdaQ~baSN}5M`+2N6!%??^u#lRoSUl3=~sxzV*ZE>Jm zM1}FD-xN<-n&x!0rD=VaqUm?kS2IQQKvH?*&U0!rTQH&rqz4?XXe&XYe^32sw3Hrp zKL*V^MZ5g4H3sc7FK~^ozovF;3;j(fOSJ~vW3ch)^YM3T@>jO~z(@aN|M~bs8xNs( zTjygZeRkLICV}wQu(+UyJE&TE!Y~HvH_5tg4_HsZSUBoAh8T4ylp!xtC8+(iQo#Tw z%h!ZS0%4nhWyc~TRt$1cBh*lp#mZJx^$DBu;M3Rr-~R1 zA|F+^nsU5XI1>yv>&|tKgfN~Cz1Sv>lZIH%p#IP@evbD`o zRx661>54;ijk|lSVi$XWYPS zQ5$Q)*7`uw{$dHMsA~irI)2AHuo_op#ULdLv`J?AfR|lwaml5IzG|d*?UE-+8cgH-A=H_kM0&xMeV_LL-()y@*D%iWt zDf3zN+|ce3EnzDI3Ij?KhS#C|y87Q$vZiTs`K|jj%L z3TmlGo*UHco{dyGAPQM8Rc9?7Z>}mhc*&pa)L~W&WOjVR-wP8Km*L80qz8BQ(54<^S+k1@Qn@uE;g?pAZ%KX z`O^1l2k%USO}aYGAxO;G(i|^xk$JXf_(hnDR?w+V8{c^^<6GI!P}S`YJ(emz%Vd z6F6@#&$Ny|&VTw7e_a?)ziGF1)?dBs#!Il+ZUmZU>5x?d8aD z2DM+@BVHoC6KlUF&cd?rt?|{l7T$P`Z@S~vbbjM{yB;<~!GCPH``>Kn(|7-m@9clg zG4ZqCvhE`K5%kSZx-sV;@Jvp?`5KY2O0==>{`m81@@vBWtJnV1{y%)RkdK`FTz+1A zmRanKit&}pTB+yyW${-)#Ub}YEOE$@<%5i;-tcf72ees+hfHFV#vF}oguDCT?Id`3DErKkaZ(ENG<#Ru!kLE?Swlf~G zmH&!(2%LVDn>`4#j`}UWnP!Rqts*}8y)Rt+h}RIj{l@gQTG5?&Nop%2Fm3&5;O z?G?4#m7P_anL-o4!XVuN1-eh1tV7-5mJH*uz50Jl$P{1PPKj6|^R zn{fo?usLo zBarqwA;U3843Qhg!fdbWJn`D@3I>j}>kU}~YzxN=&@7zZ=hl`rO8oR>)eo(54X+bF z-%((EBs#1jXm_|LHQb^IzmwxvI%lx9Eokxyv0Iq+jsv)v${yQK*?Mlbu984OXi zVRX1xSw$o>iVCuxRWG5Qsht|lOHQk?AjR9-YP%vHgTv;!JI1lf)#S8Eh3j$#2W<*b zSEYT+TeRYEH7z28y{_ww*9%&gm>G~Na9vzwJO>bwgR=v@kJ?k(>@Iu15*-p{JRB=s zxL7W{h}OE8Z*D&^($^ky@W4+c4h1E?P*g#qzQe2~geTxJ^GE_jvzA^GzvTmxw-O>s zXm8AP=22HED~V;#m*dp)=^f`b7sM8aLX^Cy34y4Vn*9Amh zjvP&&(e#_nT4EO*q;z{}?8`}Hh?G2wh||%mHcvIZKBdNAb9yqWZEB$p z3bBNX0CeV4Gw^pO&ZW#DtPO0?q*!q^I!cbgV2|p_lYp(##^B#3OeTY^u9Yyo?NVtY zipASn`lo zmminI-94DO?K*^H2rr@mPfc6XfCnxBn%_~AC)l69^aNcke|vdfcAfx>D^+DJU?C*B zbb64^dXa^37`MLNbkTOwO0FMDFh4b~s9ta@3DG3s@wke6YP07wBe8!{lP_rY2Ohcj zeEwHWzIOVigfUrh3{)U)V zh@MSH+W#ep+-|2Ouw)$U(8KU3+A$hY9ji2wG@Zm+WtpBndS^*6yzW<4n~{9u<0*T+ zVGe0+$PRmGZ|Ot75{{iVPs{uaR#-KhS~`khL+w%(pr1zK5a7vXf9IwDyubCnK)%28 zDeHdiN6THz1fD>1BD_Gys6ybMmaGf3ku&RM-r)gyPfql7uP#x zBhXZIY%{TtbYo2&=Sp=bRLO}@I(wDtyVW}1``_1q-#*bu7uMN#)#SfuUL(halyOpr5ZEn<_~!PejTqxL6j4 zEgISxTSVxV`qTrUQq#RFr-u{e&`=ZDVkTwngsX=S7^npb_^C$6hOVr&0#l2susgN$ z%TfBh;Mw7L9EXqVTuUyu`hX5oanOso0K0SnPA?!N1mafHK!^tXxDjp_$CouR^~WGCe`opge;`-qrypOzM}m33g*R!OCdVm&4kWNr*5lu5*1 zMGNJ68>=LIwhw8xw@Mt|31KlyJ;W*U=pFp$W`^@0@4k2gZ)JG?2LFDQD7;|-z={(s z5po=oxQ0bgcJ;g`{Usipd}ydVApY2Py=640_(gHj$PeBBg)vow(>l5>t*+RmiYJ)D$Y z;j0=rMk{hL3DTUUa$xszW03aPYt8IfvDEb-hCXd1<6z53l6G)1z^=Op;vVDJ40qIS zwh&vV@F3BkGuafs?sJ`9=Q;xy@Tg5ZqShG#3E?Q2wH>QX(n6TqVwP!YT&Z>eg=-ea zh_lq3prXSz79B(;Ym*W$eVorj0GT*uKq9X{Tgq0Yn*N>{ueyOq$N6Xt3(=zI%(d9t zoy+FP7ptpbULV`Y4-Wjzn;1YGstp1t6*1Iy`*4?Q2y@a!BKLaB!4ay9 zG)k$xvQU$C+0V>ABq!*=!nSZqhjk_~sKriCH^6x{RcM+_T=)$N?k4HBt>AfY!Ht9C zYU!G-py@T67*@baRqqWNTftL+C379J3KoVjE*tnZIOC2QT+<4HTAbZ>vc9@nw~)Gl za>NZqp2(kQHj6bJK}2=dn^+rJ_Dt0 z!r&3_R=L@&FW{x@$NxYHv11fKBGFN(gxfr%Ul&iRwE^-L_GrUl;_bj4VxNCGK?+TV zvK85IOVQ|T>EYFC*e1~qf;D9Y5`KgqaBg^?*c~-9?B5r1iN`AXG43;u)v_EZhbz@u zM=C0Bf804NR}fR%jx-kxDbRKzz4~9`161Ygc`l#&rRsy)TU8@#*`jfXjI?r01}4TE z0)AOF@dne4VrB{gP!w6H2XWo)Yb*6++7+fZj1cKCkyhM8cprBx6ch3vMenY4!Yo{x zyrC0%3P6h;jik~JqK%LcG5L1!<2$uhtbxL<;9SM!>U~Jud4+q(L2)7!Y>GXVfxjYU zhKPt7MgGjaV%hf8YKHGn!(zyPS&YKvM6t$A0fvUIURmH5yBf-qliKaoByq7Xs+|!C zZ9s@0mE#-|0FGQu+4&mb)CtoP1w8A;Mh(dgDGwi9rD}9C0tFCB5zXgdGs zsL*2Rq_o;*(9rPO{*(Bs@f9($B9QcDD+*wc*+q_6kGrw%_14xgm`fap;a44QaR|U^*vE6e*I2=P|I!Y(Az$5pcYt0Ue9Oi~5{r?P4JnN>@_lsC zE=k2~yDU>&>^u9^x<@Wdy1((si@PL~?oTgXm3>jiNtjGSJR}AI&$ZO4`>E9M5kYeA zY0G46ZVlW7wtE;SkrpLsBbc+Zb?jDZ+nhl93i+|U6($*>Vx*IlnRsd# zM-F4b>|5Im*X+S|BQde^9ak-PiJTo)5h0#_#C((7Is=s#^H!>uQ2zL91;IC?*vy-f zx;@&#h}Y_}L07~rgtBD<>;rl19|HfE*4zGvOW*D)`R>(E7=LQqEJjk5m>#t?Q}YMJ~8cp)DFmh zrL&>-9SD_>8*K$LVJM$*KS7);klWe-2?R!j2O06Om7odnFxPaO#tv#HOI`g#tP}7E zC(@CWilo9H1CD=yFpKO$8nl*=N(YO=Q}tmwR8tpKIz1L9>Ayk2V~Bk z#)0fNPutI2JBpa3mko$0Z@p>BdgABzYg}oX%|h7EYav z8RJCvbEONR&+NlYl9+Bu)wUZ0`lcrXGkHCxp_g9%ypZod_O|LgiB^nk#99^R92hBs zFPb?K%@~O2ej~+!iLIj(!;y^E*Y;Ha&9333np>CTwYQoY5eIn>Pa1x_OksA>aI8qW z)^ASPHrsg%ZXV7M*+yb@FTx0p&Bd;p%svz?xP%Jv8 zCxg1h6q+#+R_%tWc#I|e9l*@_ZCEJE@ zHY(f`Skwgy!5Gy6lQP{Xmd+lI98Hda-d}~=DDa(lao*3hE^%MGKIJ`elwKQyp)OB? zQMS@sw{8`rbo*W$P(21-LFZ>z)NH}PyE07EYjWA{GHy{LE;st^uAGzc++{GBI$rEr z`ApvoJ9;sP{7X9MEK>9pG*lhgFEHa}H;8i*LPGf}li*I|EsWPf`4c5WSE56J1|P$q z6~CK0%(+p2r_F(W8OHNF=e6i&30De-8-W5qHLWzQHN^jN_w4PqotiBq4uuN4CJt}} zi7qe%pW9y=ql1XeORJF@-lQFc(pzT`3sIXQByI|noss5YGv<~&st4~l$5I5Sg2k?y zb&;wKU)f&~nJMX=CQ&9~(;@@X{+X(8+fP>QW3?m7`Wr3!(-5Yo= z3#zDHt5XN&pbx+N2GTZ?j1@?cW)QHd>d{rs%FZ<#mudJ==m~&sGc` zC`Yt5Evs$&p6zuh@8MWPZX>YqU<9)#hgjruvenC8=5n-UMKVx2aH}y59gZ=l?~hfb zjYO}NwT6v25&C@J^5I#v5Q%qqRvKXDUKL`9UW}Z0l}F%7OTXiWUPfKXqguB)qcFIq zX1IKNX*Mhc8S{KRy3k*yCI2Gq-?;DMHTi2HU)p}Xb&uKH|{i_byUTlGM$O6wXotr zQVzUcd|aKxJK9>cb8?|(#TikgFFd?BeDc6nbZ~J>9N6WK$~W6@7o#W}Swn<<_}ZW* zvXLe3?+xd*tvt=eDKvvU1)b!}3f4PQ- z%-?_V;`_JcH}dam=jOdV=h!XDcv>y5;4w}g%`_~KMM1V6miPCzT9$|h zv>PVMI@3pp-zr@&T?3PE;_-S8f%N{;+c~(`HEh_FQK3vKD$j1>+CBXLwy4==BM+m( zP|MnN?%GAoA)PnTu)-~fd9hnSBpjDWjST4nki&T}hf^0FGNU;{IHJ~(p9CQ>wr-ij ztbrOI8WdWSO`tD_P*;?WjQimj>UkH)^T4Uvc9DTmmIpT;O&vq3LCYCLS=)9}v&3 zq30_XZ`CWcj{nGKjE{WyD|awgGkLy_&&@xF!K!hLXS&RZ}XoV2crf29tyP!Vz7z$Sq)#T z_g;F{HTlWtbMc)Ai9)uLj=ecjvwZW&6?j!r+%t{mdvGpj4lIHTUCBheTEn{b9e;K4 z=3Xn`8GkG6UovjjIyjhw=n8X`Spv~xuZ+6VKso`_mMZen5@H*(X@Nxr6S!09C)OtYKYt^I{ zWLCfLg#~UkQFJtKl934p>!anL3^N91X35l%c9214;%BRRyql7KpryF_^lB1f@HXO% zF@YtD&aN-ftQaL83_j`I7LZnGxXde8J0`ZPmX&ndrU%`KjfSwST$=tA-@=AwX3$sp z)o>WeG=b(3QEHD=pfl)SqO!wcjRhYu5c1Ms0PZoOmYl+`O#$QK(YrS&E_eb=LU|_W zxdD~2E4R&?;srC$ZCFxIn^3+t(VQ!rkIINH+nLxp7aq?H;BE*jSPkUYi!nlp5{6m<+->;p8*Ijd0N*lr_?N->3dNa~$bIXyInz?e*rl<&* zubZ&CvgmdySU|utmh>aD@M9B>^a?78+@KswXpl^%$)3jDV~}W?DxuSW87I%+PT;on zI9o{OCXJh{yzBK0gX}_StR9@*Wg|`+=wjGJPQUmbaguwP^!=97%;!adL zc=UuKScX3gTgvz;*?)dX9yye}P z`5ruLE2D?@+$*JT5Xs&Mu4QBtNsuQP9%Rt=;KP+&`U?ysdIs#)7Q`h)M^F;+9I(x( zU6D;*Xk+HBV?xr|j^Z|bQSNBNeleNiE)D!((8lv!BbdPC)RCZ;qa7;B0{1uYBEw%H z0mv2OK|7aD0$IrKjXHrbistri*-+Qy5m#FO25B`7S!sIT-fPz!(R^}* z9XeWR2Zxe_VD6SX8?JZ65Q}8#4lXF+s9YDNy`H$`*dGw_*BKJ<<-*q^9At|}ub_I} zXoCw3d(utyY~Ip?7R`NpEK}#4L-^nE=QNgZ+R2aQz!4KN&r$OPlNM=TY1#_l3fL`7 zTZ)hodfP5meV>DWw?_xf--Np*UVnsXbUbw>k0tWxsC7IQ^yiOgZ-76Yfh0OAyGwC> zov%?B4dEUUVKNI^ja|yK3Y;GXTu=rlN6vIJ!c~I~Q*-EEFrGvCq;vQ)B7WyN`7_as zig`>}=8*xg8gL^TkAojOiu|wu12d>y((W9WIrY@Y4+doOrM&R1;j)kaELNCoN>H}c zKNm|ZY$Y%dn2oQ zpLj%A1tuw~GTFANCG3&_o!OeQ^n~4w)Ce}J6%0)&H-^~!0`ygy+1?sLhoDPR(Y3%8 zJ5S%RmMQSec+Gpnmk?Pa1NHdQm;YqF7aRsT3gzT6qa5G-2(AgOn-6C-Go{MM_) z%heGkLPbY*`ODp_>eA^|2FvDte2PY3okhdWgRS`Nkt71lCU}~D`ZoM1D0^5aI10RA zWZ~e@lzO53syJKAA|tRRlvn=M1u%)hO*1X~f_OE|$%r{V|8WRYTi3k+STCQ+Hp_Kp z9lT5YN0ePadf1U%Kt+B|!|?4j4_~ZDPRK75AE}TWk8Cu$w4sG6IUm(|1@j;SJ0GmV z9`5MgdTMAnIi;HnOM7*U-^Qa!O%rjimVCmrzxY4z-Y;?9Ysz;A-*zALeT;K}hs}J` zXO*Jw?7KsfpjVUFhw7J4xqIRDmX@byw$) zI>swRac;uQ+|0^BRhVm1ucIC&2U|7)u z;`zb!_Pp{sC#!Ig^qpkUgIOX-RL;GA*PPW5+&WgrL4Hz`*H=<^#@$x5Mp4JOXb#6K zCSYqGW5HxoRw>5uf^nA;J!=%MUGL-@joyDr=Y$n?7WFPCn!C9nyZ93=7Z`D)L^Y^! z%|PG_#$0A2Wb^Z~6aC?8S7K1&j*ekV?3)3;(O~mNi>D;shJ2Hw9PS!cH`LR0P#jeq zOVdKOE$U7uqK0NNX^n?&2B29{^h@?R-)4I4X9VY~^&7=@@0}*i~p7lH4cS6|hFL z2OfYf*W;bq6B((Y=%7;grh4sX)UG;R^hD}C?SNh_f;a+I^^V#bnHn-Roz9s01y-v) zCOi+>lM?r#A1hIdb=!ASc$Wdungl}YxogGFiToa?)LTr4vZ^HQ+E%~Uh zfAz~3pQ3jO`Kj^^(Rtl~;+sc#u2Bxd27|e5rNj*|HySFVm3-6o=SpSB@eu!mR%xs3UBIEOa^;d94kYuoJ@Q^&%5%4~I%3 zNp-DWQA%$3@f=RlfFwg;*lTN@Y`2)rY>iF~3JAQX3yscwTJlES{;yxT`1xO@%df}x z%6lY<>Vz3}dU!iwg~St9*jBGoOLr0V2$L^+#^z!Uwo8(>zkvbw;mKjcz(B2_Nm#P? zc5ICqui_qavZ@j$ZODLmwV!yw5ZVmG9;^j2Iq=$n*HLplI)mNaa+GJxEuv7fq6Cq` zSj8^eWJf3BwJ8&^$(l@@9L?2sDw(f=!V$SxVT_kDGpoIBf`C=cUgRu zI!0J^qQ|L|v<8P_gVev7*Yl@kvxJ=VP2wiaA6=WKO~0kPQaAdMm0R(uZ44@6gH^lS zMQ0I{_1jNL%H$3EiYQyms~h{qFNwP()FHb#Y30>oc8a0cp=&IVn?tL8oEM?vT=$@G z8`=V?;f1CZIZgqM6_$c|dOZSK4U=P@=`joJAAq4V<^nOC2>v^EY9n){&ppuj)` zafAs{NXQM_a16j|pph^6bg+$FhngFzq24M3=(J5c{aP*gf?>bRojt_R&-%wrRL&EMXKj`nxsRm-m{FA1uFj)W@#NA z(}RK1p9+UF8=4|^Tr0Vnwp)oarl5@4soG0$&KJ?NhwECG-h?B>HMS@D+|D=G6}FT6?YfI(6B? zA4<*_K3JFwt4?(|)@;f1a2Ydm;N!%NIHP0KN`^-d>+lomN1&{zu>l89 zjyBH_iE6@KV|MQaS-%;`z34B*{i^8sGOye8D26eujiSz6Z_CXw zqBgcWzILp0*1ysk`UjZz6A6idC@L@xiswGRRwhXl?>4af9hb}x%k4Vl-AuaS`0dc^ z=+qL*#2X%@Ff-|&_Q}q#(~{TXBKm`iOZ#8VM-Ko*!F`O=+K7)6bJ{xuwI1TH1yx3v z%coTPcL?n!(hVn4pJho9nPs5lZDcovp*xh8t zOn7ZgN{`ot`A2-6?bM6IY-_l3 z)%5zu{`BroxZA7#xK!6ypx%mJYHc&1vQmqLOy=sDPM2MWb~HY^sc-wx zSFJt(NsjZS5gr=R%(|_Cl`KcY88_N#L{RkO7SH83AfpOad#+!UjcuKzl9bsYEF>YNfvuA2OB{BgA!2F3?vV`q9ASvcuOSd1?&HD$a`Wc|7yl%6|;+bKeMhiKPc(u^q)q8sQeh!l2J&UIhITVyP~IYr13!%3|%zii40HzAH=^ zs#H#h3#ZsGXvs%Z`#W#A_`>hRk}-RO`G^s$?aY{qMS|m`n3A>IhCtlAr4bz5( zb`EN{^aqgxuXmtXb1xg_n}(y|?x01Wzg3I#5e;T{Uh0QZwd~3z;;e{jp{Xg;HfDo; zD9~j|fsG4GGviN>S z+*oUshun*MJ*ai~hYdm-L2S|kl^Z4>QtzT~rG((;gLw^clGXRvzy`UtIJKfUE zJzaKrFTbs|2TEk5Ei*5B!YMcLjrF4=dyQB@<)knp265a3G7TUI07x*TAt?l4dZ$GnV6r$rd2RMV9k_)RH^we|_V{%Xp)Fp!}{x!4PqtFuqf8 ztOo34-tEO$t!CKi=zfnuH$0)#!RIJM%HqJws#;-`wk#$-%-y{TA~BEOh01RtUavum z`nOB(ah3c|{w@16w5$|*UaNBe&;d!dC1|iCLg}BpEdeo}Nb<&&j0SCXZ*C*PcFRZ8#HXhKlb*EFZy)(aQk8Jjj976rjHu6hUiQn z#E@$_@aATxf2#5idY20m>s0Wv>~yb;SKxMBQ7@h_?iv}k482sn=4`YwG39C~e~S1i zHvx{}3q9xQwVFB1xgLGzU)GXC_UA9X^HiR1f5HFvNnMabl*B!@(k?Ap$w+klX4%$D zJQt5VN}Ydd@(tDgr*~ca%wJIDXFBf)zK*;7TBl#%sPu?(Kz>tK8q+Kbf*4NWNU$Ts z%nilk@@j<{f!oj1@zn_r49wcBaSm;zWhVvI>Z(240KvL4>BR?}q+sZT2Q9*AHYBEe zn7gSKLG^|cwu?~j<1|e8bnPKG$N$$Uj1H}`V^W+_EL3ft5s$qD{#4A6^Dt~-E5?1f z-&ZlIGKQ;}Rg5zvo+$&~%DM3bdvTi6`(hL`;8_|mjN47@a)LWf-}K!QfvY8Zu^P?H zF4l;dUiPm9!uYiMt13tlfv0~*dz*|e{4mUdu0d5F_&{OZ`e?ug(E z7)i&SQhENe@KAXI6mkH)5VV&UV$^YAg}hNqo@T%9-`=->D%>O=$iD79A_g4@$Jrn< z)(VSYF&KYJ93$rm9e;DR2dUoga;c7*&St5o-Cc?{yu#3dGw7p5{t}KE=uB=iqm#HDJYbU9jah;bVjYe$CK~*L$5-daSIn1>> zq|G9SDH~=)IcS)|8EoCCixr0k4QoK$`y>k)8q*R65iynrdI=?=42Pp3Ie0~&yPd<6 zp5L}$+wp%MqeeKyOsULj0@uRC%Q>MTWjr19k?o+}6FJQ8aIjEM9m||};q#0ny%xeA z?DG&?>vTx-o)@HBunABQOKXbdePzxQZAiF~Fe^w6ET;(4A9FphhNkN0$NwVmackz^ zJbZT*xWq$gWOe*s>K!!DHq>y|h4ya2zL&xCZF&jiId2vH0lw-0K6y3Oyk1AKp;yD% z>gvhBVY_C|poWn2c+t$(^1NXPC>zzawp86$ka z#m<4;$mi>sD;$M)R&~2rBlUzOEB+J{iJ*h=dnj+g#@e?>_-{dAylE5`GYx(#N9qrR z+Z+W@yc@;X&DStrm{@&Ih1SjB^ElJ-rw84U#3vW}1()EA12pWR&fwf_U-YJy%9Cq_ z+2TdE@0+yb#rA7{?fv^p?^*JHWZ&pKr2hDm@V#>m_G~h$M}188dVNo>m8GApOSike zS%8e@%avBEM^S+S)HVO0>9zcBlrDwnZYq}h47ajpD?8?3^MG++x1nz4<|s^&aSbSlo6?=ggwl$);;eZk2FqkWwVAv9FC?+_A$p;{g{H zqStK)+dGZI7|#D&wB*_LTfTAedpw>r$yZO7;>WL0^kcQRJQ2#D72;0C8>z}2FXFb2 zm~F@AFol$4omnT04M(;=6nA|N7TL#`hT2=Fce>j4rV>AATa<~Bmsd;m#z#N(uV~2w zs{Olv{Gt78_Ig#m-~QC(uHMG%8Qu-$!B|YC@KmS>L z6tA-7Z22I^qO*pX(OX3Ntks}%@@f&?F%G_o5%!CrG<{SRR`+kkeS(_&Ie)I6tDbd0 zu00^)Q~$2#YkNQa-1mu33NGp9AL#dp#nIjk#w*0$^r;FonA`H>Px}LL_%-TZ;6|w{ zPrq7KUT}a==GQha^;_znppkaYy+XW9JVyU5`rN=&`15N&sV$YGn~HM7yTlb=6sH+~ zyi1%}EL!!!4a3~sCG$0Ge(y=Q)mUwkEfmU~y~aWYFqRaMyAk7_bM^j_#x!p43H8?1 zmN~yZOn6ecGry`OKV|>m^B1qykI1h%Ujl*NLbTc>kR9k&quRUf^dMX9Y&-?ta#G1? zR5&w>k+BUWHdAM@gbqLo`T5>gCJ!;?`S*%3ThvH{&RzFbAYJ9MZwdA29ovr&gSO}- zFZt<{@`iy;)Xq)|go9Lo=WXm9*Y6V$^e%til{;rXjz`P?6vzc$+#7zHyZbYDs^XtT zM{(Y!JzZ7qoRe9z@(S*c(4O--A_<=Q8SLr*fUDr>9~8IWx%Q0Vl^JHW;nhxb(=Fm9 zpT)oagW4wq#8YjFAM99pDOPyj7xi03{1y>)+{aH(wm+z*=NLR)ak{;$pB{fe^j1#w zd)RG1Ve8f-mn*klVYW{{`FrBe#QcRvbtAA4>2 zN^!Sfyg%*^-g5oZaj;idZuP|XJ}SuAgGLja`W01_X*oqq$h|cPB-C# zJnrS<#O{k$zA65*$Tx@Ge-(wKW8wU|hW7Ve zU%Pk*19|Fq@d01{kfN;I&Tr}b%1scBe)c<`-M`1D!Q%B969>Rp#Psvl(JP?E_t02i@3Aj{cpFPcwIBM!hxcFh0abqPvJcjG z>AkBp`J|y69q(8qUuuPK50=m; zbmi)^A!8F^wHP@eR<>f2_H06+`~jgAP`$n?mM5InVqhLzX}pgH&mRRFP+Y>x*b3U} zvWxNnG&gLZW z4q-NQr^ucu?hMDxyRd8!#;+Uod<0O%fp)5H2>cgK*5A=E%ijO(i?4fH-e3P~`XDJb z5^xYO3SCu100y0UI@5G=*A;K!l?hSU>82*KTBWm;$!WrR1Czn*KJVl=nmOsqzkBgj zPsnd|K02 zB3)|(w?WuYRex?;IT{QM9wTj{%G8l-?3A{vl*}>24`mu%dsoNq&yJEgmkc{5!@%y{ za8YX_@H5(kS`onKt`&*3l^YD4iRFP^ZsqGP(-ouW>|hh@X*gRBNn%mULm9opB96S4Rtjb57R4fijI7LP>ODAtn^Q;sz-K@WuRv`IVN~sYlT|(Vu*PMepn?a zWHy^!HZH{+vQs#LaRUg6p2aiGffKJOD?RYShG%=gt6n%Jq$`;FiBDPRXUzL{K#At* zDIMMQ!h(m^8}*(`r{QiilXYv9UKO6k%{VenON~gPv+!f*;w*GmcXdy-eY_Ahu)HKv z0h6X8?U=VvKjE#A4oksgx0@S_(r7I1N;w}xkM+^Fbfyckw+5~;KLnF)v`Lr>W1i)T zHeKdhc6KzwE=Z}4FCm^}hohzSlHgvL6pKxKxnor55>D!1Z1;Lt^LaRzYgtBYYAAo* zc(b^9b%tH57Z@Tr=SS%jVqr6cIdfedLmX))kl)hKkPuMq_1KP}3XCZ8BE%HzQiQ%R z>2FwA--TU57H`qu%)g?Y*B((HKd;6eV9pYI-$@+xw}8E_ge^b@0Nt@@Y$+{S0Knoo zIjOGD$k%jPH<4_O)%0o}KedUiPRWs(GGN5*+BkIhriyGxCT2NQ%D1S`T)Mg$Q4zZh z^DV_G*Fzx5u0QB8tcTo2C7Lv@*2ui~N$2mTB76mZrNrlc1b$g~}KrP_rMsTO&XH_bz>qT)wIErs}9WYdI{vbY(}B zPrB*R{`yA=j{MT4UmVIewck_SDMr;yDZ&&pmgCsa9$$YkBr`gki2rEx>_1KN>t9^@ zN4xTT{kify_95Zc&7EZO%xNpnTNt{|L+JBSUN8r%5urUwQ2qY}P5)-YaQ%NSz0R8a z#laVgn?V}_=*vB}XsTenG{u2UTF82bU8C8?SesOh7ry2LTJrP4{{E#`c!_*R`~K=P zFcGXmOF^Snik8#IfD-#o{L6;_UtMPcCr4T5{d%gZyQ`}2>Z|&`X1eD-bBAP-$w3GS z1cKa$6BtM!B-u$K!mfy1vH|42!VL--A)vCsor=*VRuw$N&F3A}HhrgAp*&5r2Nam>cba@>xp7q61`5j;P_JRs&>8 z2N%0pZBpTCqt&d&4FlA%xJe6&cS_ap$ORb1g@DgM7WDs_XjFmbwKp4hpWz;7{p+n0 zEnqP&IFDyGsin~j$^luTV^z!SMt#u-r3&9Le=QxbGW$V*irO24IUjgy8Bo6x8jb;5 zYMFLW*MYjxUhRzUjiYQe;Qjo1-{I@_)0OS%F@J&fn1pez!UcRoh`MF6E{vPlJTh40 z59<4dd%m*%ZQmFF!G5x`HAU!WM%XKqsBU|{XdY?PL@hkf=WFD{(Sfd(Ab#b(mexct zmGK3^*cn-bUyFGw-o>yE{K_bI3`VmthAscPoECyPO9O3y)`tg$rY1Xnq_ZO2)83iJ z{iHZ`>*m`g9?y2&{#*T=)FvOo3$>8Hp$_v(_M{$9b(Lmoi>7gmw%Viy3?>a)a&JZD zyJxE6g4S?msvgMIz$w~hFU!s4sveyx;8x%Q#Q*hBc#wV_J4dAKdKF+U3Kfm9up-}_WCSjImW>YQ?i7%yI%%RT3gBhG0fxJ`i%2zU-z~=jZw+POnbF6`8Qf4#M6nMgJeUf~ zPio%FCO{i&MZ%6jUlGzgV-7eyjU+iTw_VuNEm_#1&tQ%HjEXL{dw`Z`5dL&Oo;snF zWC)vpiqSjtLwNe)7yf~a>Dz9fc(SwXpSC=i-lAg2#kfe#rHKP-UWgohC{~2eiwFr5 z2u$3vahx8)Dfp~*p#wcOT-o-{5`Jj7i>ys|OdN5teOqH2_+PJqyQEc3#0oX7HqC03 z=gtb)gS`mrAdm|=4+;+HUwUx@EPLg$A28gF)~nMMf~ffR3O@9Ecmb@zLH2knaM|p>1(32wO44q#7P! zl_Vu_+`XrL(7>+c^;a*r;0vzX68o;e_VjxS?GoKX7c7&(1I2S7^#(g3Bak}K29Uam zh4dOh{w0M)uG>Zei6Rfj%K+SK1_YDzP+51*K#9QUFF1z%?y=VB?w11lZIQK#@ z#267q@;?{~B^z+JqVXh=!l=KiMRau{33Qy$Wp;$j=>&^T*VR*l zF+DPx9ogz|tSyESA!0VYhk}E=cMxG2zXRgR^#L`;{3BEk<-9-v6=rq4+Gz8_$S-8FW-9N1Edkkx!%PH@W?O@7Lm(Z%A;9g6x#{6h_kjuE zH`om#>WNG?;KMAuiEPyJH9O%c1!n^iaO^^e{8`x@S8xA5ga_zisMFwchlF3Y16v0V zZ{Kp2q374eF*QgxfD9xO_K;CKIu2Y2ehBP6^p~ozD&Ur3ac^%^-&d!qt~|M=EKYVk zK#9N`#^L0}^FEmXoZeH@(9BiYc4Dm;sCA4RrLK@x>?X6L%8R2ey151}Q+}t2R}4;c zpiv_OV2+^r>ZG=1MzcfLYB}U#qA15k?O9Er`fbc?saeb+^gC`RSP0dKsren)1!D2& zvEFhJACKBcnK=#S#Kd&|M}~W`VLgBIL^J$Mx3_zn%P#YPlfc>?SU4VF;24oO!M!^#L z#Bj@$q+V!IO9LTF(zy2b5%xJ+Lr*6)H6D&9(}qaQ1}doY(rIsq4}-Fd85%3Zn2vUa z;7&97oLxyLWbEo(3RBtd`uVH3me?l2f9Y1f3r&rGY8yin}K6>8ti%61$6=jIJ1d4O;zh#7By5eqM()=j+hIEab9-aj(1K zn^Rw^FkQrNESN&JP1$xq$CSgD^kvAmLa|yVEt+)`5*H|yRwKCR5Sj-1o4Pbpi+=eFj5mrs|4w3!07(MjH< zvnErTyaT<-7>V52}Ak-m@@ zKQ)orwViAZBQ0N^K48|ofedgDoF|R(-q!wxI-)ko&E@j-ep=C&TY=8ne#B7dlUaw5 zbn(1QlWf}(zyQ2ngpF&65Fi21*fQRBw;8;cAMKfVcr)x5Q%`1JP{;OQRW>JxIiZcB z9~nz0n6JSKU}V=LgXGjw7C$j0qQw4)hlZFEeQ~&-z`!%D^M5^Yye+1^HTuKE7GMr( z6H68*>FNFI5r_#UOl%X?QdrF-cr}%7tuzS9X9C4^hZm~U^1gUqCXI-pm^S6`WAJFE z$wDKWjAd(9WC)ahF;qfZ(n#k@sI?Xd&Y@D_04v1pNH5aPbgmaYF9MBDi-5MeG6l0x z2(&@P3D`cENzhrV@P&e*PNd-SWw^Gj-Do|k6qXZSA>CqV&etmzMhr~L`^ptm+o1oT zaF(sYuI(^U$HBe|`&T;zJkP*<0U>8A;^x&Y<0Xu#GcK z+;4`8299~<4shnviBf3IYNR?8CVIb{*p0o**lN~NHFTY`f)svyktuFYiFz_m8{mmix)7<+vB4Tc33)joc6>*FT}Nu7fCmGq zi>&|<{qQ07F36rV+&g{Nn|FM3?+o@bpS?M>CAJB2IQd=rw|pp&w0+oEM%of3(&B!% zEtoHXA@p+}5MO6y4UF2s)@nOp+(Cc9^&qhzMG*)U>z?wZx(SrEut;f{ z$AXV!w8#or%+Bzyz%AEE7W}~q^6Qn7@E5?FEUbf#EEI8xu10w8taJjyMI%=4%5}S- z=71@5Gb-_*a2vOBGrCorybv0!a1sp~1t3)7DAEqNj#x4RDBr$MU8NsgCX4}s3gxe) ziz7lfhDdjwR<+C6gHWgy^9erSR^JuIa519X2p*IuZ8BdMCgb6aTHM8fDlS0OYoG|x z4XKme!Iu_DZ(0AR@uzIo-toS{>o!c%xdaB z9gM755_%bPYhONJY=)udr#80N)Bb2!tGAb9?EAAW=|Yo7g#Ja z3cM@3F?Q_k&c1aKu|3^VAd*(W}#Y^RRo{3Ek#KvN1sXpNg*!kE4fZ3p|gq& z_R+;U7(*SScn&+*b(M8C6|9X1Nw$&2NoCDM6|qozkNyA{1zug5VP9uHtPXV|Q<3{@ zgo3%@nwCl1dha|&>{pC`0$=2Xkf5-?;k!z3oPMhUcN$KixkGhm#8wf%5%QM(n)z3x z8Nmz_da`dZ|DphHh7bTCHWAAaMYOR-wtsBADrOe0PY?`SjeFTa5KdNDcN#YfYj}MA zKR$3jZMbjg)`#DnXoAn^_UHCZp}z$f{3fL9{wCU+s93UAH zigXp|Mwl^)(Grx=iEt*Z zRf}4pr^o2)$k*qUVp@M}9kMf+1$b$QY)IxXE_$xs)lt%HOfdmZ2efbxH#EJZ#b#F` zZ3QjeVzvwnh@%xc!FXe_nv0`SoDN2O2@EQLUo{QTx!Cu%Bi*@wKAejC=N*7{rZ>m3v#|0wET2hgk!z9pEcYB~R=i+o#^i!MJ7krR_W@Ju;oib%T?pe~ z9BUouY77FWB%X~RR?tBR(8~aN1DjJ=n(oX5a(HxDV1xWUSo-AaSzoQCw*i@^m`F*A zJ{5LS(a4ZnTJbS9utfGj{Q ziB~o8VIT&Wt|id-2=!#TqaOMQ;P7}0uykcDflG6D#P2pzpaVo$0As9Luo4gDJLxB`U5|xIDJx|aYS|PfqCMz6Vjs#m^lTaqQY3Q(JhzC8uS9z}gH$DP zNkp5ymQvK8P5Ikevmi7fj5kt<`(QEz1QPAEb&HrC6T{>ES#$QOOrF!7WsEAcXkk7r zCKyFiD^&7L=4CnK0)0$|5kiVgG>PGO$)XYT2$LaDXk_ToZ`5znJJ8J|#h6SbWMtB> z(HG;!p}So=${)aG{prMXn$vyid_CuMSmSPkw<$N5id1;wtj7bOgz$1^PJNxa8$+Tl zE$k)45Ak5;@lGv93|sWeKuafTN#sYQ&27A@`ZL13_GDr_Bo)z5 z8}A~v8}6mL_31kk&G@g%ek1yJbTh)7QGY53i@+@yk!lPXTwZE0{{a`#A*@k=S>ZmS z=ejY|2)w0CC3a8S_W%vLaRN!x~f}4s4VY!91d#P`3cIJNQ6DymPCN1+oXU zG8X_^fLe`>cS|CGj1{WlSSYa|Oh>#p0&<`ZSolZcDCGN$0#*y?4iaX=xCgsqE+SOb zS_Ugd%yPTPutp*zy$W6erWrzZsYq1tI+XqoP$V>u)g(;%);Lezt8AbE9jnIH12;i0`k zIvo8|R9;36vz`d1!|G+_Wiv=fnXRN=?Y>7K921WOe8I^JVW{80Z)lHp6C9YugcD?f z4Gfj(2AdT-=jFr*m*wGk>S?&tEJ!Mju4emr(z=IwpXXFr6(h}Sx5Gnq(HH6tAlMiT z00Lu@vT#vH7*YbE1%Ut)g3qC}CIsj4pZ}+ZJ7(Sbqlvpc!QNxM82BNgh)LgoM<-~8 z8cABI)fnb`K>5Hb50ddNs`g?U8Io*7Z0eMkv?QigKvrpH!%UP=tLcptvccY<@^|u5 z9?x3W&gqY$l3`^KW?=^y>MA_<8K)pDp$-(XB?`At@!m-NT9nc=b%?+J}>)Oa~0pNg|Kx%NInT zKSTFW9Z0s2q(`@2^DRu%9XXK3tFDPz3;lJ|w#k09gd=g4v=fX7H>xk?a2qvbVSFld zQWVN1(K|T;IusVt-bL+mhWn^#UG&_F!`7!jLtZT@f37T03vmz6H3iG{z(MG%b*;iML#?b@SF*&>{C&Xpr%h$C89p3 zJ&$h-nPXr^*u2$jG^YH4CWhp#I6vDkuI-A?N>#{2m64lsf-D7s)o2Cn&=7rP`ZpNE zwh%xYTj_s^s!7$ zgQSV&qBBLku4U?}flwaseua*^;4>-=RyLYV{Xx_$#9C~94f{f@dZN5s^Uv;J%=JU+ z%~v`0a#87zeQzpMFh)$vD=5TUWUs9BSEh7P5lFUYaEbBUyZ+n&l~PM>%tuq zO{dR(EOd)=7OTMsDKuuRcB3`g$W<9eQFyCc;fCAC%{O~6L8mE=zsW7?1w)KKUYN>~7o z$Xt)d;8N;E0|D@JcVE7@V?DyYC%oOa34}hBt4P9)VcCGzPjZlXekxYRrUMmSyVpTL z5ic$j&yiH~J9CPN zu0m)?F!11Uh>azqRyY8)4GK~gHk_^Hc&2D326C`Cc%~+IeV}`ZvbLXp#okLk(>^Cw ze!Qn1SIwOWZJSX)ZYL2AFHO96=wN%x&(migzsH^4muOi0aOB=wc*Strt(QK(e(wWK+k48V4$sjK*Nv5j zs3C2xrmvbKRY4uUDj>2Q`>M`H@4viL9oge^jy+Xk zy|b2xEqq5#DYX}K{WeQ$U3Y}cN!e^weg0r@2LIuZId3~?+*3VmQYK1 ziGy?6{Or0;tvuE1uODnxYw2VVTy4ELxl;Ev3&nAP4UY12!~HL1{e0hHexvMr+ILLZ z>0h)ac~EVJ+1J=F{+Kc@*E8nALT8HHzf>pF3}!-Jc~YghvA+>$rb7DB zGZP8CrJOhu*iMo#*>Ifb0QjD+ZCly*X1d` zAy4u3eYf9l|0#H`u^If$6lZ>|Z+0o%J?kLt*ky*Z2;61PnPF&CM&^HCwf?vIi83am zgg5>RzbOssjeSSy9oPT7QeCYoGZrGJmP}Q;mITrvXFwc2QTIF~U2YuGxBP_6t*YgF zl565hc1hmq&3(t1YX3ZZF3Na4)Aq|wt3h=OUZl?c+HLAqU@?;q8w^J~{r)OpVt=Sv z4|et!F;ou6Bl$0m^_JoGSiAQfD{p_)T0V6DY39*|p4QNUnO5CSrKiX9SB~R&IQL7s zbPvDW_l2+6cNAZ2-E5pSZM(W$X@N<7$Oof)lJ482)||ZPtd7}}&fcaXGjhmg=%=pr zp}P^Chj0C0$8^=7nRoEe;MezO1)vS-SxwubQn_!cL)!am-F@ZQ^2F&fLS76q__T7i zyKq8rt~s~wxTKSWt8D4JD>S&vfnS9HU!$)^q3HRUWDAk;nK=MLhL`%Fihj}xMo>I-6vux$07QI$l zIKSrhAemcRG^y>3zhTNg{AFKZ`TV?fT%u$3LeH1%^n!gID-1Vk&OPPye7CSBBB}OS znWkp7)ha>fz}D8#iDTKB3-a)uFw=TewazqptJ4!p_dh+TIV)yAsq|wL#|Q6LI2hws z*_MSYe5`gx_G9T4n#xcs@5!KYnk@RwrVDl zp=dMjX8SdOo~#MIcyVT3Q_Z=Z(QYliaEd>Uk^)g#lv>r1x#3A9)C zDt2RiCGCFSF`DtRx&b_Ud9J3_cy$qnJ9N1nHJj=7oRMhO7IcmtwaR!{WpwTLAjLKF z0j^r}|10m5rN1Nh{42xlw)X71<(&Oo?F}^p*34!OZD`l2bJSY>Mzv^fU%f}FzxzL` z-&Xm#8r}nF?k4s1bz1LnDz5o|p`-_qm-b!5z1gtd+gJaa2IIhm(Wh~QN*Qy@*`X#T zyuP8OnF9=*#M;j{f^z`mYIUWCG6CFIfaox`^bEO3=v988T9}V|D$`xk(hGo4c5YJs zVE)U!+SC>sC#w|Xfi>+$k=1>sjo1r!F}%?5B?SsX;I-D`ug$XCySi7lwG;+MeZ?8I zT)oj)dMqk(6+BK^B&axQ3y^Vqb4(-Au)Mb#+P}(zPtJZHE8_n74P9Iq}V`OY}BxkM}Iej!| ztysHp%}FC;XXXNHMmB658(B@|ku@i6TtAx2NR1hz8_qm^?dr9soH^r+Ri~{wX=KAl z4U>xT%A+TYjjkUZ`^sp|sJs%UxP4{KbJELKj;>x^Ids)Yr;Jt(UN^d?vV7ghiK8{M z^2|l>%q!b3QZ=aJ>qf>-t3lr5NUPSa8CiY8_#Ze%fCK%}M{(UC#jDWVobu8WmyB#Y zW##HsYbpyy)^Aw9a_!h?W%-7Y4WpH1avZaA)%DQbE5ARB&DS@}<~;_RFB7F{b?Qq- zP98aPbOW^y9lzkUtH#(mk;fqCuFPdaZff1w+6|*8ZWul31bISyee*Zqq&nsqYuBE{ z5kHdXP2h~t4f254|3j({?u$_6wM(SppT8*;?+;SEFSUPe^T)rOC;M+?D6So% zI8UC?LnVr<7t8M9)Y%D)*{Hlzr+D2@aeI{F+AmT3M~>nVd9okM_kM&_Naf!{6!#P; z-ZCi8n@+J=wmy)0|01W`BK5u@yT6pLT_vAhJ$_;-&Y4Ydo}B0!Dc+UJuQw?EQ$D?3 z?(uCo%J(daAIMRDmZJDv{&tnz$Y=7fb~_Z;%QyDO*5h)H^W{*l$Tu#Q4|YrOBPm{y z;@2+4HmUbLsrMcE+OMZjTsm0mblR7WjBTKuEZMkW<>*-Dz*TEbsVpAr;rBjeyq#5+ zOXHy>A!Y3N4w=?BFqKDl?VWPGr^0N$`KUa_J8gr{zjE{>zW&aiXHcH=rz~}^kZ)Zo_pw8^Zjl1m7rS!d56afH zQamihZSuFBQrs`aOLAM^l@DH!3wTQYcBSk-DqDY)t*hk7e~@SYyj0mLfBTLU&r6jX zCsnpSl*<1s z_i?{`aG7*Xcgr{aEC;www$7C*SIh3zQe}(W*7xLZugXPkmLoqeyWf?E^MX|QrBvA@ z-+fSCoJXX}RZ{t4xuff)$~AJAAIYb;%I>*RQ}VZWrFc+|@*`>dqS;gV zmK491@4h^b;xVbRN51t`s*)m0!wHu95HlY5aIn z<#Rd5NAkC)z7m9BY`r&^;yKxRwTI$!X-%ILDISq3{~_OaTRweGw!RgkxKMT!S^oI`?Q+W>Gs&&oB@g3id0tOQ3;4G~DQ;<{ zxI{#$vlk4s0p=Po(y8#3@c@TrV(ukaq5 zm2Yz>o>c6(nUuIwn!jpf#p<<{g=^PtSh;HT>h=HQ z?!TBIeEhy#&8_mNHwQTEy?>WGy+y9`w^P`E;{myvOQUQ)^_X12kK{t19HjW2{P9^B zw{$3ShmXiDUH6LYKl*iwT{8H*DG%Vs(n8L=Mm~9HgyM5K#=X*ZcFEM|r;Ki9Wz+ck z|CrqI)4!FA+SSJ9)sM^dTo7dQu^Z*5xaFV6AD=ve-PewvdmR;Cmm_YIx8OgekG`vg z;_WjjK9Gt(`A{lu`6r5do9zE9QwioD*IAU8Kc(b3E+1iR9OWe)Tl@cvTi5=fmv3#8 z$9~BgiYw$*xLkHWk!yN&t6bh2G8%j)pIjqN_*vlHxIGBImy=-?`v*Deqt| zM@zX^?&!Z?ldHL_lj32i{F?lXcQ^RtFCWP9e3Zfx=f677X`kmJHAn-L@V3Qskndj zTjz}bw?}zK?RS2={CM((nD&e0lXEof$vJOzYj3G%(Gn(zU8 zH9+pAlG%Z*&-~d2eAz-F*ydiuvisyq^u7}6#YQ4Lbf1b09kqPk4eHBFW*i!cMm!jD zkz{=1!>Vn1su@mBK5noa%V$%;gHPEn+o{d${@T+0KU0^f>GQgYo5kB%QdTqi0msAt}(e_{S&ZCTz-P0~(2 z*?&fM?h)&&!373WAX5g_FpJq;tx|QZWeYD? z2LWU?&QXgOo)p zsl-qYisx;SUHb6C+@!8Tn|5T;Sbs$Qs0yq1Yy7*66@4T!qmV}cvG%R3Xr*H^y+!}5 go~cp$bLSi%5o3QLk?ACZbbIoN)?5fYmQ{`ZA2BYD0{{R3 literal 0 HcmV?d00001 diff --git a/serverless/vtfilter/index.ts b/serverless/vtfilter/index.ts new file mode 100644 index 0000000..8065c37 --- /dev/null +++ b/serverless/vtfilter/index.ts @@ -0,0 +1,21 @@ +import { + Context, + APIGatewayProxyResult, + APIGatewayProxyEventV2, +} from "aws-lambda"; +import { TileType } from "../../js/index"; +import { handlerRaw } from "../aws/src/index"; +import { parseAttributes, vtfilter } from "./vtfilter"; + +export const handler = async ( + event: APIGatewayProxyEventV2, + context: Context +): Promise => { + let attributes = event.queryStringParameters?.attributes; + + function tilePostprocess(a: ArrayBuffer, t: TileType) { + return vtfilter(new Uint8Array(a), attributes); + } + + return handlerRaw(event, context, tilePostprocess); +}; diff --git a/serverless/vtfilter/package-lock.json b/serverless/vtfilter/package-lock.json new file mode 100644 index 0000000..da24885 --- /dev/null +++ b/serverless/vtfilter/package-lock.json @@ -0,0 +1,855 @@ +{ + "name": "vtfilter", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.109", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/node": "^18.11.10", + "@types/pbf": "^3.0.2", + "esbuild": "^0.15.7", + "esbuild-runner": "^2.2.1", + "typescript": "^4.8.3" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", + "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.109", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", + "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==", + "dev": true + }, + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", + "dev": true + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==", + "dev": true + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "dev": true, + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/node": { + "version": "18.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", + "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==", + "dev": true + }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.15.7", + "esbuild-android-64": "0.15.7", + "esbuild-android-arm64": "0.15.7", + "esbuild-darwin-64": "0.15.7", + "esbuild-darwin-arm64": "0.15.7", + "esbuild-freebsd-64": "0.15.7", + "esbuild-freebsd-arm64": "0.15.7", + "esbuild-linux-32": "0.15.7", + "esbuild-linux-64": "0.15.7", + "esbuild-linux-arm": "0.15.7", + "esbuild-linux-arm64": "0.15.7", + "esbuild-linux-mips64le": "0.15.7", + "esbuild-linux-ppc64le": "0.15.7", + "esbuild-linux-riscv64": "0.15.7", + "esbuild-linux-s390x": "0.15.7", + "esbuild-netbsd-64": "0.15.7", + "esbuild-openbsd-64": "0.15.7", + "esbuild-sunos-64": "0.15.7", + "esbuild-windows-32": "0.15.7", + "esbuild-windows-64": "0.15.7", + "esbuild-windows-arm64": "0.15.7" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz", + "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz", + "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz", + "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz", + "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz", + "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz", + "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz", + "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz", + "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz", + "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz", + "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz", + "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz", + "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz", + "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz", + "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz", + "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz", + "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-runner": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.1.tgz", + "integrity": "sha512-VP0VfJJZiZ3cKzdOH59ZceDxx/GzBKra7tiGM8MfFMLv6CR1/cpsvtQ3IsJI3pz7HyeYxtbPyecj3fHwR+3XcQ==", + "dev": true, + "dependencies": { + "source-map-support": "0.5.19", + "tslib": "2.3.1" + }, + "bin": { + "esr": "bin/esr.js" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz", + "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz", + "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz", + "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz", + "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { + "@esbuild/linux-loong64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", + "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==", + "dev": true, + "optional": true + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@types/aws-lambda": { + "version": "8.10.109", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", + "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==", + "dev": true + }, + "@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", + "dev": true + }, + "@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==", + "dev": true + }, + "@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "dev": true, + "requires": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "@types/node": { + "version": "18.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", + "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==", + "dev": true + }, + "@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "esbuild": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz", + "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==", + "dev": true, + "requires": { + "@esbuild/linux-loong64": "0.15.7", + "esbuild-android-64": "0.15.7", + "esbuild-android-arm64": "0.15.7", + "esbuild-darwin-64": "0.15.7", + "esbuild-darwin-arm64": "0.15.7", + "esbuild-freebsd-64": "0.15.7", + "esbuild-freebsd-arm64": "0.15.7", + "esbuild-linux-32": "0.15.7", + "esbuild-linux-64": "0.15.7", + "esbuild-linux-arm": "0.15.7", + "esbuild-linux-arm64": "0.15.7", + "esbuild-linux-mips64le": "0.15.7", + "esbuild-linux-ppc64le": "0.15.7", + "esbuild-linux-riscv64": "0.15.7", + "esbuild-linux-s390x": "0.15.7", + "esbuild-netbsd-64": "0.15.7", + "esbuild-openbsd-64": "0.15.7", + "esbuild-sunos-64": "0.15.7", + "esbuild-windows-32": "0.15.7", + "esbuild-windows-64": "0.15.7", + "esbuild-windows-arm64": "0.15.7" + } + }, + "esbuild-android-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz", + "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz", + "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz", + "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz", + "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz", + "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz", + "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz", + "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz", + "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz", + "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz", + "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz", + "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz", + "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz", + "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz", + "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz", + "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz", + "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==", + "dev": true, + "optional": true + }, + "esbuild-runner": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.1.tgz", + "integrity": "sha512-VP0VfJJZiZ3cKzdOH59ZceDxx/GzBKra7tiGM8MfFMLv6CR1/cpsvtQ3IsJI3pz7HyeYxtbPyecj3fHwR+3XcQ==", + "dev": true, + "requires": { + "source-map-support": "0.5.19", + "tslib": "2.3.1" + } + }, + "esbuild-sunos-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz", + "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz", + "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz", + "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz", + "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==", + "dev": true, + "optional": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "dev": true + } + } +} diff --git a/serverless/vtfilter/package.json b/serverless/vtfilter/package.json new file mode 100644 index 0000000..076be56 --- /dev/null +++ b/serverless/vtfilter/package.json @@ -0,0 +1,20 @@ +{ + "dependencies": { + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.109", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/node": "^18.11.10", + "@types/pbf": "^3.0.2", + "esbuild": "^0.15.7", + "esbuild-runner": "^2.2.1", + "typescript": "^4.8.3" + }, + "scripts": { + "test": "node -r esbuild-runner/register vtfilter.test.ts", + "tsc": "tsc --noEmit --watch", + "build": "esbuild index.ts --target=es2020 --outfile=dist/index.mjs --format=esm --bundle --platform=node --target=node18 --external:@aws-sdk/client-s3 --external:@aws-sdk/node-http-handler --banner:js=//$(git describe --always) && cd dist && zip lambda_function.zip index.mjs" + } +} diff --git a/serverless/vtfilter/tsconfig.json b/serverless/vtfilter/tsconfig.json new file mode 100644 index 0000000..3ff8c9c --- /dev/null +++ b/serverless/vtfilter/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2021", + "strict": true, + "preserveConstEnums": true, + "noEmit": true, + "sourceMap": false, + "module": "es2022", + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true + }, + "exclude": ["node_modules"] +} diff --git a/serverless/vtfilter/vtfilter.test.ts b/serverless/vtfilter/vtfilter.test.ts new file mode 100644 index 0000000..05cd0e8 --- /dev/null +++ b/serverless/vtfilter/vtfilter.test.ts @@ -0,0 +1,107 @@ +import { test } from "node:test"; +import assert from "node:assert"; + +import { vtfilter, parseAttributes } from "./vtfilter"; + +import fs from "fs"; +import { VectorTile } from "@mapbox/vector-tile"; +import Protobuf from "pbf"; + +test("basic attribute filter globals", () => { + let result = parseAttributes("attr1"); + assert(result.names.has("attr1")); + assert.strictEqual(result.names.size, 1); + + result = parseAttributes("attr1,attr2"); + assert(result.names.has("attr1")); + assert(result.names.has("attr2")); + assert.strictEqual(result.names.size, 2); + + result = parseAttributes("attr\\:withcolon"); + assert(result.names.has("attr:withcolon")); + assert.strictEqual(result.names.size, 1); + + result = parseAttributes("attr\\,withcomma"); + assert(result.names.has("attr,withcomma")); + assert.strictEqual(result.names.size, 1); +}); + +test("basic attribute filter by layer", () => { + let result = parseAttributes("layer1:attr1"); + assert.strictEqual(result.names.size, 0); + assert.strictEqual(result.byLayer.get("layer1")!.size, 1); + assert(result.byLayer.get("layer1")!.has("attr1")); + + result = parseAttributes("attr1,layer1:attr2,layer1:attr3,layer2:attr4"); + assert.strictEqual(result.names.size, 1); + assert(result.names.has("attr1")); + assert.strictEqual(result.byLayer.get("layer1")!.size, 2); + assert(result.byLayer.get("layer1")!.has("attr2")); + assert(result.byLayer.get("layer1")!.has("attr3")); + assert.strictEqual(result.byLayer.get("layer2")!.size, 1); + assert(result.byLayer.get("layer2")!.has("attr4")); + + result = parseAttributes( + "layer\\,withcomma\\:withcolon:attr\\,withcomma\\:withcolon" + ); + assert.strictEqual(result.byLayer.get("layer,withcomma:withcolon")!.size, 1); + assert( + result.byLayer + .get("layer,withcomma:withcolon")! + .has("attr,withcomma:withcolon") + ); +}); + +test("malformed input", () => { + let result = parseAttributes(","); + assert.strictEqual(result.names.size, 0); + result = parseAttributes(":"); + assert.strictEqual(result.names.size, 0); + result = parseAttributes("attr:too:manycolons"); + assert.strictEqual(result.names.size, 0); + assert.strictEqual(result.byLayer.get("attr")!.size, 1); + assert(result.byLayer.get("attr")!.has("too")); +}); + +test("1:1", () => { + const data = fs.readFileSync("fixtures/sample.pbf"); + let result = vtfilter(data, undefined); + assert(result === data); + result = vtfilter(data, "*"); + assert(result === data); + + let orig = new VectorTile(new Protobuf(data)); + result = vtfilter(data, "*,extra_key_to_make_shaving_run"); + let out = new VectorTile(new Protobuf(result)); + + let orig_values = []; + let out_values = []; + for (let layername in orig.layers) { + assert.strictEqual( + out.layers[layername].length, + orig.layers[layername].length + ); + for (var i = 0; i < orig.layers[layername].length; i++) { + let orig_feature = orig.layers[layername].feature(i); + let out_feature = out.layers[layername].feature(i); + orig_values.push(orig_feature.properties); + orig_values.push(orig_feature.loadGeometry()); + out_values.push(out_feature.properties); + out_values.push(out_feature.loadGeometry()); + } + } + assert.deepEqual(orig_values, out_values); +}); + +test("filter specific layer", () => { + const data = fs.readFileSync("fixtures/sample.pbf"); + + const result = vtfilter(data, "water:natural,landuse:*"); + let out = new VectorTile(new Protobuf(result)); + assert.strictEqual(Object.keys(out.layers).length, 8); + + for (var i = 0; i < out.layers["water"].length; i++) { + let feature = out.layers["water"].feature(i); + assert(Object.keys(feature.properties).length < 2); + } +}); diff --git a/serverless/vtfilter/vtfilter.ts b/serverless/vtfilter/vtfilter.ts new file mode 100644 index 0000000..19038ed --- /dev/null +++ b/serverless/vtfilter/vtfilter.ts @@ -0,0 +1,226 @@ +import Protobuf from "pbf"; +import { + VectorTile, + VectorTileFeature, + VectorTileLayer, +} from "@mapbox/vector-tile"; + +interface Attributes { + names: Set; + byLayer: Map>; +} + +function unescape(s: string): string { + return s.replace("\\,", ",").replace("\\:", ":"); +} + +export function parseAttributes(s: string): Attributes { + let result: Attributes = { + names: new Set(), + byLayer: new Map>(), + }; + + for (let attr_s of s.split(/(?()); + } + result.byLayer.get(layername)!.add(colname); + } + } + return result; +} + +function writeValue(value: number | boolean | string, pbf?: Protobuf) { + if (typeof value === "string") { + pbf!.writeStringField(1, value); + } else if (typeof value === "boolean") { + pbf!.writeBooleanField(7, value); + } else if (typeof value === "number") { + if (value % 1 !== 0) { + pbf!.writeDoubleField(3, value); + } else if (value < 0) { + pbf!.writeSVarintField(6, value); + } else { + pbf!.writeVarintField(5, value); + } + } +} + +function writeProperties(context: LayerWriteContext, pbf?: Protobuf) { + var feature = context.feature; + var names = context.names; + var forLayer = context.forLayer; + + var keys = context.keys; + var values = context.values; + var keycache = context.keycache; + var valuecache = context.valuecache; + + for (var key in feature!.properties) { + if ( + names.has("*") || + names.has(key) || + forLayer.has("*") || + forLayer.has(key) + ) { + var value = feature!.properties[key]; + + var keyIndex = keycache[key]; + if (value === null) continue; // don't encode null value properties + + if (typeof keyIndex === "undefined") { + keys.push(key); + keyIndex = keys.length - 1; + keycache[key] = keyIndex; + } + pbf!.writeVarint(keyIndex); + + var type = typeof value; + if (type !== "string" && type !== "boolean" && type !== "number") { + value = JSON.stringify(value); + } + var valueKey = type + ":" + value; + var valueIndex = valuecache[valueKey]; + if (typeof valueIndex === "undefined") { + values.push(value); + valueIndex = values.length - 1; + valuecache[valueKey] = valueIndex; + } + pbf!.writeVarint(valueIndex); + } + } +} + +function command(cmd: number, length: number) { + return (length << 3) + (cmd & 0x7); +} + +function zigzag(num: number) { + return (num << 1) ^ (num >> 31); +} + +function writeGeometry(feature: VectorTileFeature, pbf?: Protobuf) { + var geometry = feature.loadGeometry(); + var type = feature.type; + var x = 0; + var y = 0; + var rings = geometry.length; + for (var r = 0; r < rings; r++) { + var ring = geometry[r]; + var count = 1; + if (type === 1) { + count = ring.length; + } + pbf!.writeVarint(command(1, count)); // moveto + // do not write polygon closing path as lineto + var lineCount = type === 3 ? ring.length - 1 : ring.length; + for (var i = 0; i < lineCount; i++) { + if (i === 1 && type !== 1) { + pbf!.writeVarint(command(2, lineCount - 1)); // lineto + } + var dx = ring[i].x - x; + var dy = ring[i].y - y; + pbf!.writeVarint(zigzag(dx)); + pbf!.writeVarint(zigzag(dy)); + x += dx; + y += dy; + } + if (type === 3) { + pbf!.writeVarint(command(7, 1)); // closepath + } + } +} + +function writeFeature(context: LayerWriteContext, pbf?: Protobuf) { + var feature = context.feature!; + + if (feature.id !== undefined) { + pbf!.writeVarintField(1, feature.id); + } + + pbf!.writeMessage(2, writeProperties, context); + pbf!.writeVarintField(3, feature.type); + pbf!.writeMessage(4, writeGeometry, feature); +} + +function writeLayer( + l: [VectorTileLayer, Set, Set], + sink?: Protobuf +) { + sink = sink!; + let layer = l[0]; + + sink.writeVarintField(15, layer.version || 1); + sink.writeStringField(1, layer.name || ""); + sink.writeVarintField(5, layer.extent || 4096); + + var i; + var context: LayerWriteContext = { + keys: [], + values: [], + keycache: {}, + valuecache: {}, + feature: undefined, + names: l[1], + forLayer: l[2], + }; + + for (i = 0; i < layer.length; i++) { + let feature = layer.feature(i); + context.feature = feature; + sink.writeMessage(2, writeFeature, context); + } + + // finalize the layer by writing key/values + + var keys = context.keys; + for (i = 0; i < keys.length; i++) { + sink.writeStringField(3, keys[i]); + } + + var values = context.values; + for (i = 0; i < values.length; i++) { + sink.writeMessage(4, writeValue, values[i]); + } +} + +interface LayerWriteContext { + keys: string[]; + values: (string | boolean | number)[]; + keycache: { [_: string]: number }; + valuecache: { [_: string]: number }; + feature?: VectorTileFeature; + names: Set; + forLayer: Set; +} + +// the resulting blob is a vector tile +// includes only the layers specified by key; +// includes only the named attributes +export const vtfilter = (data: Uint8Array, attrstring?:string): Uint8Array => { + if (!attrstring || attrstring === "" || attrstring === "*") { + return data; + } + const attrs = parseAttributes(attrstring); + + const source = new VectorTile(new Protobuf(data)); + const sink = new Protobuf(); + + // WARNING: might change the layer order + for (const layername in source.layers) { + let layer = source.layers[layername]; + sink.writeMessage(3, writeLayer, [ + layer, + attrs.names, + attrs.byLayer.get(layername) || new Set(), + ]); + } + return sink.finish(); +}; From b421ffa3c0af9460bfe58ab9b7e87f6b729f38de Mon Sep 17 00:00:00 2001 From: Brandon Liu Date: Wed, 21 Dec 2022 16:33:08 +0800 Subject: [PATCH 3/3] add vtfilter test to github actions --- .github/workflows/actions.yml | 1 + serverless/vtfilter/package.json | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index e493349..b3547ed 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -47,3 +47,4 @@ jobs: - run: cd python && python -m unittest test/test_* - run: cd cpp && make - run: cd serverless/cloudflare && npm install && npm test + - run: cd serverless/vtfilter && npm install && npm test diff --git a/serverless/vtfilter/package.json b/serverless/vtfilter/package.json index 076be56..e682d6d 100644 --- a/serverless/vtfilter/package.json +++ b/serverless/vtfilter/package.json @@ -1,4 +1,6 @@ { + "name": "pmtiles-vtfilter", + "version": "0.0.0", "dependencies": { "@mapbox/vector-tile": "^1.3.1", "pbf": "^3.2.1"