From f2509492a102b6e4c18270e322e21d58004c4128 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Wed, 16 Nov 2022 15:48:05 -0800 Subject: [PATCH] progress --- README.md | 9 +- datadirs/datadir/dev.db | Bin 569344 -> 131072 bytes datadirs/datadir2/dev.db | Bin 106496 -> 106496 bytes package.json | 5 +- .../migration.sql | 2 +- prisma/seed.ts | 6 +- scripts/simulate/run-local-net.ts | 2 +- src/listeners/seaport.ts | 34 +- src/node.ts | 158 ++++--- src/util/criteria.ts | 73 ---- src/util/index.ts | 2 +- src/util/merkleTree.ts | 42 ++ src/util/serialize.ts | 26 +- src/util/sszTypes.ts | 6 +- src/util/types.ts | 40 +- src/validate/order.ts | 30 +- test/criteria.spec.ts | 69 --- test/merkleTree.spec.ts | 55 +++ test/util/db.ts | 5 +- yarn.lock | 405 +++++++++++++++--- 20 files changed, 655 insertions(+), 314 deletions(-) rename prisma/migrations/{20221025182511_ => 20221116203342_}/migration.sql (98%) delete mode 100644 src/util/criteria.ts create mode 100644 src/util/merkleTree.ts delete mode 100644 test/criteria.spec.ts create mode 100644 test/merkleTree.spec.ts diff --git a/README.md b/README.md index c8e7d2c..3d612ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # seaport-gossip -![CI][github-actions-badge] +[![CI][github-actions-badge]][github-actions-link] A peer-to-peer network for sharing [Seaport][seaport-repo] orders. @@ -153,12 +153,14 @@ You can query for orders, add new orders, and subscribe to events. ) { chainId offer { - tokenAddress + token + identifierOrCriteria startAmount endAmount } consideration { - tokenAddress + token + identifierOrCriteria startAmount endAmount } @@ -257,3 +259,4 @@ You can get stats for your node via the `stats` query. [api-docs]: ./docs [libp2p-website]: https://libp2p.io/ [github-actions-badge]: https://github.com/ProjectOpenSea/seaport-gossip/actions/workflows/test.yml/badge.svg?branch=main +[github-actions-link]: https://github.com/ProjectOpenSea/seaport-gossip/actions \ No newline at end of file diff --git a/datadirs/datadir/dev.db b/datadirs/datadir/dev.db index 79ef52cceff0908871f64d92f89f90144552a0b3..54746da5093f559c45fee3af47eea536da934e3a 100644 GIT binary patch literal 131072 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 literal 569344 zcmeFa3y@^jd6+jdyF0Ia3>L2;B!XD1L;@=k+AGdM7xv}WvgPAN|9BzE1_kTqp}>AN|neeB}FN=m10yW z6)P{(i7cyBiSnI0-96nsv&as5O$*3vVDI$Yzx&*C{`dL+|NQgvOV1aZ`bt`@msRtM zGx5O0!s>O$?Buf#JFJ@85?RiU+0_3s2l_hW#h4i~ifo zokuUuEI$7DWas;{>8{kldA+E5KQ9eWws*Tf*L&lmW_4Rvo=YJ35XW^{A%l*9=C579 zG`+a;_}$jho5;H8y<6zi&u4OR=X$o18`VU=+*Hlo#?iYA!>c(0^w$$_svHoH`9@?9g~>;_f}rHb*pgW_PUX$mv1k<@FEg(;jJX*Xo2hE=>5eXoSmCleCnym zFWk&9b+eB4ctJOn;rgLp=7;e$1nZ-$YQFyLJ?WFUu2oYfOQ?-gtg?%(V&fC4RD?9k zH*Y>)Sh~^2YahO}8#jy9%3FM5ZMRg~=aLpnC4KjyN~+Q9e`;{H-A4_u6R8AVdPs&u48oK}STe@6r-Sg+o(=${UTrQWY@%D`YJv}hR;SU{==X%dgba6W!L)@T~9M@xpwnb;kl39FoxmE(^vb@tJkjFDy$V?$(6#(-7(;bL)&ug z%FP?B_W1&4Xl3c;m8I2!x%0}4hVZ>R^Vh=p>BSeGx|@^_PfHB_dj4~>Gc${ei<3W8 zJ>uf*6SF69ZJ%53O<`5jRM+oj`5MKI3VNm9CHg2IX85_iUjsa<0lKuw(~{(;QbT$!@Xv@ncr7JGX;sv`w{@S(K>Ba9_d`m7` zKjfadI~(U_7O!8Q{QUPG+Pi9{QAB?!Gxz73y1X)aV|tjIj=}q!WmMCUc{{;sU|h>@ z$r>lw!tUakW~Et7i@JWZ-ZOe5Pwaj&zk=smZql{U%7rarZ_$|aqQO2ou|)azTD@ZI8-r4D;OrZ*?V(#m^u3Q--S$Z?^N$& z;hRZqarUiT-=iss{@ZhRUZ0#<6k_u8>lt;|YxQEItk%oLjYD z(;9hY3SwZRHL6DAO&xDHcFR|Xzc-{;x>BANE5*j9PSzDte)Q@&R^3naSF>JG#^7{c zCk=SGCF^~n|I>W5J6OGH+@|$N#oL2V9eHG?evZxSEj+&X&~IMvZyURhQ?**D$Uu#z zt~J&(n`ai#v#PJ$cp0yxu-eCA-@CHrudPf?FMd+oP5O@$Ze0xDV>`Y$dokOaHzyXF zW_zB$at!1c$T5&(Ajd$CfgA%l267DK7|1b@V<5*sj)D7yfzI6I{41S{=RP*$G|%b15cfK<(@(drZ#_O;a{576&L<& z;omNNW8r^Y_@jmYY2jbaere|GGc(gKovWVx@iSkY`s1mk$@Pg}d>d%!tUoyakxA8g zYGI*sIWC3m?RrBOEg8DLS1#ALglE-MaK>scd6sK=RuEdD?X0D)W$7UHQfY^l>xrd~ zczEt3b86xGbu)|-RlTKlEFrD1RxZ~{QOQbD-)gT|wo*$@7}*R`2v)5nOUo5^&Gz-u zYG?({iZ8vD*tP;5JoGwt!)g;+Nj%RDwdJcQ@*Snp$c`M>Q(o+Q!m}Me6~d4G#7Uws zRY98iA>%7$hsut0XZ@kUwI5E}vV`rKN!M%At8DG<{C}@KaFzxe*vLfDQ62Bl-!VMu%^B=}={()aBkblt#{b|8eX+7=O| zBnX{EdXZ;)X&lFPqJ@?+QdB%9LF`D^m7(Lt#FAK{a6A#XaU9wypLROp!BMKXO^Y~_ zS>R49Y}%Dd?G#k8he*ON$8K2dNJ%S-rKd%hSbpG2<`D{4gO5mrT03ChO|_i{O2)Ap zd8y^gG_VrsdqJS$&idt1suXv46wx#$-Ds3OYj3A=3aSJS0XhjgNXLa1eqal@#s*=I zusmN{o(u!m3WLBz`#diUr41Q9+meCp!QYMuVSDL^uJjF6A}5S3FZHByQyKEHI7w}f z;2?9(#(=^mF zbye6|UpPjW?E}klGHEH+Tk%FvwoXA858S(Gnt+E&VyXPJL*cj}(eXVWiuevBk`@XE z+Ih%N$lQ4oW?u_!k!d8$6D~1Rq(%4&Hi>+sK?e#7BJv?x$`Y|F96_iS;jjdHgAtI> zC_z5C9l{3?v$KBb_zJgB2!SEYp4x9mmFhj{!Xtg)7)5FaFm@Q&c3{}hMkV^NI&*f> z2caY3McYCh_?C-mkiH2xGb`8gL+;u_5=izvl!n#zqg1m%OY_M{IAQ2Swvv7jYA13$ zw3{18j+MgI2}q2RNDAqR*o#w0%Q8C7#Zk^fEAui7+}!r8ct7<{!FjF+b%tKY?^ta& zO(T)W5NgLBbcuy#ZRo;C1*pIvjF`V81Eo_0%J;MtN08YM!^9?(?sV2KjL;?WHc*}5 z<)BuY&-73qm^xKnY^uIks=6$a^VV&k1Za zn&Sp&bkvCFIo_e3_L9_%1K+~_1S0V4#C3gmP$nWMiX!idm!gM_$M8Fl(7aDiZi88b`p2j!6{}fj6xco_X)R{caoCRvO-*~ zD6mrB*N(KoEoi0;-SM#ZX>6r2BJ3l`VTAH_aSB}(C)$d<&LcB(c$kkII+!?Fk>@}{ zCllWKPPrxbw~A9%8)aoQT|vS<(vr%9WMtHI!A(|{m7lD7(XuVq3Ib6zx=<#b4#PAQ zn$(#lZ3bpV6u_%0cH`8Ge3=+);Yc3~9VS|1x9uRplMr#JqK=#%#izAp2^25*EY)nsxDib={5?e*#7EhrKacex=$1tJ0adcdX!-RIjE?_fJ%bxTc zj1`vvTaOznP)!)+Fo0k1o?LE%=*&Yx!qE4D1R$f-k5l{uU&o2>TM3HOXhrjc)Pw(> z2&UVk zapXcPb=ff3uEs>M=ZRS&yC?h@biVB+olj3@a&YZPu}Fy<4a%ALZq2GCC9ib~Ilu{Y z@j&sqJn$@xt1l4>Trl=;9$tb;`NM@GG&?BiIHB5G>>bLo37edN-Um(E=LpD+Hii(kI@qZi8;Z(bA^ zAG+|z7ruJoD;NIeh3~zveqrgtw_P}Q{*TW8=J{Vd|KsPY=U+PSoPT8gPv(Dr{#WOJ zZvOk{)%?o*`{!rozCQO`bH6nAlXE+BFVD%j#o0fd{TH*pHv6B>c4p(*!t7I=+WlW< z{+pR!p82Vn#>^`-{>)?3e>VNErvLHum!|Jb>*Y1s9$!|>l?&Lq1{F%x9$?u;0uE{6N@=ts{e&!>SCe~1|TiZBv zcw2kr@>aXD)$+IZzkdLlChXoU1NF-F#mbM%>dv2w;S=mnaL~{UIMW3Vo89CU9n$5s2HU^*@$jTuV zD1!;>&OuTifTktO7!|%-Ny19pj?R%+3$_kQ1JF_p z%aqM3-P(#bOQmpo0Gc+8zhIu*tfV!6Th+D(ppvcQAr*?Py{57_FEs!)u7RJ8yju)0 zYOS5k0Vum*!#a%IlIeb2FS;8?(7m0Q$V>LzbZ<{Lf<~AQK&zEZ`SRULyrY_p@`mn1 zEBiQZD6!Ti++N%-`|Wa+96{S{N#MdZ&`nti_q=v19)Rvu%%;mgx63>GGA=fw0cf>m zb}R;pB{iFY|F#!xut`HG~U@NuMa@uUHsg`=N<&x zR;ji1sR3w2M9a;dyW^H*wb%~7X8`K)T|0YjW5dNGDaCIbLHBm{pizd6V6V|=hN<)2 z1JD|3#mk_jt<6%SvcL8EAQTF^*_{1gyREDBgVzS28;mTnIk#HL)}|`eUmbu(jBI7I z+IP#^E(OI;_M!1saf^X1cMCIikks_1@;@;E#TRmj3;>l$2@>tbuM9xLJv=VkKzG6_ z`-{!u?E$DPBHe+3DmQM0`)>8+BWQ6S-mqN*wf46+i*ePtH2`fgGA0tJ;}=!U)vcEX zpbhqYLH68qtJ(55+u@4?&>GaoxSQ|pdIxTGw|a8`x?RooxJopj}Jf_b;CL4yE~O= zuM`RK9}Ph3dxmoiv{vzUwu-X)+yJzQYkNoq?d+8|HyYuy1JGd8NVoZJHA$lOR;B#0 zL8vm)osDd5?{1fC?%Dv@&0zE)77V6rS`9v>nIZ z)}~kb=m1n6pnq)xZ8gMRZFj%*kwK{8$!t~|n+Hw57H|EP0jTR+M6u0xx123&FWD`9 z*8mh((s8m`d9vOpr$zCX2cURj@TB=}Gj;aEvc2)0N6^**L82g=Rl2j``Mb^9UmAec zb_`FN?^+En+S(QEZ~$6`pPj>5;q9wrHw^}%yM`ytcQ;g3Tf6vw1JDSa6J)bWv|X=N ziD?Z${e8oe=DWp4wbI(dDIb7(L?WC+TjxajUTw?B9U^$#|UHZ#z2+pk4VS$xL;w7ze&nSoY9cQ0zk#cKo5aud$U zX0;XiTbsp}etH19y@{`q&1$pNY&RV*d1?TPe#TcZBk%7Ng;U*2J}>}{TEt-YCR%vhFiguqIfWqx)v+TKhQDt}2ZCx3FmhmVKsZcA{Q{8HBJTU;>AZT(( zg)M?I6?gyOeFISPZ*YzoxokzP+Frwcd;l6`oMWJS;a+QJZ*%{>15h7bcSwbHsOx); zP48QKP%?-+k&#~$n?4ZU_LjeK@GS$-TG=8`W1wz(JKfyg5RVN&D@Zpf1faoA665qA zyk`JfVq`lTdEcu^6nL;W08OzAVFrz~3CFd9Qm2gou<__Iv^qdd&@& z?nB`DjR#I%o^PmUC-sueZsZipBSAa7zGF8IS%Kgn1}GM5*6JGm0C+Ib4MNszk}WG; zG7;MQu)L)#zrDDyFhad7>>M|o#*U>Fi3-O}0ul-Kf>gaN&RL*~yaSOEnAUPAh0HTJbfn9y2Ya|%)w)>r{<|M4vyT*y-K{%tR>$UL(IUVb(`nR1@e}BE%-5NTkB?Ekc~j1W+S?ZH0Wz z8kIj|Ck0-;c=FO5!+kqWyoZ+>N{{Bs++w12utueSbV?(KSfNr%gaW`YRc?zvDL^TLF`a60Y z$%|4uaF+vIQ(@9(az!Qu@`WqXF07DwwZvMoavyR&ug{;jI4?AdJMdejV(DP(6pI_C z8%l0;bs2x(n?f8rq4m)@lVBlnd&HKR_mi2kBrXM|9U)POF8NHt@8o`|azZn^D{eww zgt8qS5t$_?=qu9HE~Qji{nVPjTnJWDPZZ)%EXn2NRqZ4(Wf3cm43h$xdwYc=lhJ*k z&l|I&ChIUMm+ACIeWO*{)u*8kg&}N7`!8V~yKx$eJa+2tjhT~|Ck^{mDw}E0V5f8M z4hPAuA$c;{ui+b~(Tig*Z)w^v;Gji5q+VvtcFUBO?Ce`dek`R0CtgX`>{WFiva6pWTaQm@oa@8FSjrp-m)MzZm&J`J-PzhZ z4T&U4$sw)a9=pS|J-O_WxnEsg(Uh1jX;0afrhb%?JIAZ#tg1T@0^AU$6nw^&m2>O83i)~Rw}pBS}E9u3*9hYBa2P# zR{^a@-r6qMPP$5kmAyi_*_vai)g?QC@o-&XLQ>n7XHy5{`{bB#AgS(fS5^}@TBGFB zRANzKL3sN<(CF2vW4=?CD$jhUc5`pH7Pq0%0M6g~?TA?#`Smo^k#CVAk4#Zd90dUd zF@8!Rq#p;auqYWJ?H<`FXJL6B^S>}4@j>WZp z=Y3q;cT98r?|burt9o;jYxT`faP7Rg%Jnx&(i>-TrAa&2`U;QI9Uak*CFvi~}l&p*rMM?5YcFfIMR^+A*WKeO<&TqgqZ z|G&EMvw8mCAfx;0MOJFv7;_f;+}LeLV(Qt7cJ=;N!`Uh~j;L@5 z_07nt1wu>p?SB5h_uXv06(=|dcAKi7{|B1I*xQwP(P#K_D)5$TBWUi{=Wy!)*CwY zTF~Cs{ro@BEDw;aXuA?N_V=BGe*V7)%_zwBf0Ipe($D|*pxJum=9b&qh~s|#AE?P8 zIN6H!cY?igbMq+w--BipEH!JgN}XCi|KEdV6s$y4pWDr}pZ^D%Ze) zWGgD|?6r4GPO+c=??JN_Ilr@-2wJk(8a9SKstx+Ry(VLW!yv=$?wI?egY9KmXr@W)v*$ zR2)&WD*gOF&@5Mzt*E&#Y6p#0qo4opK{HJH#C3O^bo=Ea8XbN&TW`5_5H%rkKmX5n zO`hjatBBf$D@)a_e*V7)&3LlBSGK%edC<@Q_n_H&<4VQT&C+f^{|_|F5oIf?ZdYsN zji}Yn|M#F71>0)Bc;M}%{rrCqnyvR>qmIWLrTzRr&@8`{t*BkLEBkd7^z;8cXhy+g zTWp4Lu+z`~_n;XC4=9lLEbpM7|L^6dvZF5tfn#mft-XH!zXz2j`&6nmw(7Nt=;!}? z(8J?QJJt@RGNPaV2b$%z{Or4RQLWi^x1ay-L9^#pT4J}sX`O!lA83~K%0}L(H!5Bn z?DzBkJ*Zg8Gb~bjXrs(JYd(iB;4#giOdwZv!{|B1o@eW6JEQ%jC zxBL139yG(`{>E0tZE+r?Cr3SKhDm#KXLqAT_Hq!)9+R3-sIcj5Czc)8`}u$KU7+mP zfL6C`aUj%oKmXr@X2+5AK~$zl-S4N6fM)r_Y(+a;J8?*TM?e4HgJzhFDlOS;G=hHq zzX#3MtNjhzO3T~*{C`y+<{mRl#%-^ewCi3!|KEdV&)tsbZ^a46e*Pb5mYK{(Mnx7Y zTcxdj{=Wy!Fj;PGZ=`A~>gWG^&Zl+rYN+0y| z|3I^RX||#$N;U$uvDwf6_n_H|ylOr5%7O0Z|2Y|9jx`;g=%_o+-d6jd*3bX;!zwXqM8kRyI70*`Trg?%j4{drjnu<^z;8c zXcjUndTkl*)Jy&RKhP|Tn}uYodLYZYt!6*}--BlR%#ARO%Wlc*=l^@qY^%mujYNf8 zJ4gBd$TJz>!($C)3Mt5Fu6Lnwy{h%&U>txchKnn(HnE;L(jV?VCBExU1){|9Qa z$JvV7>CR5NyHPyK|97ET49#tbNN??K9_9bL&}_YKa+;6hx(eK3mwXZ9_9Zd?|3TlDF5Gu4rStw^8a1vP$KIn|9?`7 z=qUf+g$`v|2J-(WBq|2-|Jk{X;Yj~L{{Qe)$55zzApd^|9f~y%ic{QvRr++hCSK-qsj^S(15naYaKcMfpDh}@WBT~1~fW6y6+zRX9S?0;sR$|tIUzBmN?>= z5T{Kj2^ZeyK6ifhQS-q^%m+J94Sv!#NlzWcRv2aHRyjl>gNXBziRK7X;`xzQoEG#` z`Wh-u;Bsa-xchUhJJGf2iZ8E$~kUMKy&mqp_f3EvMA2ux|~*beBb39v8_14 z%V8x>+;D)2V}%?M5*9^NDo#1}jaSCuGY;ZVXP`Cb@=1;8B;rJi%LzJCzZ~}GG4Yu= zdG;sbr2dbD_%tsFCFkaGU^o^dxWzH~UL4Ce#qH^#DL?v2=Y04qBh|h%~Sws$#rexg|rwb|Hvk@5O2rt!i@uUGjsGNjz!ZPOk zQ0#F&DWW#PoOVX2QpXVaN8{uZU-SqIn-kp-*C(beG2-tuf=1Iv1RavvaZfd#rb>bX zlN_o_4Cy%X8#<{UaBz?VR&>e0uBYr&IZ5Jh_R5WMAEcL1@DqoKWb9I^V42I9oNxv{7NLsCNk?8Bmo}Y1kUMjHyc<}5r%0_jcSPjZ2Bmh~LWk4T9XK@WNTj91G)XN* zF*-*YT`O|P1voBUL`aq-sZc5iOpgGAbPm}|$Z5_Vr<~NIy9Bz>p|=Q~VW>n=9E_wd z1eOZYn{&cpB5XGHQgLQkMriVYrZ9*$rz`_Y8>#)VSpSU+P?w{x76&F78S0v|7Y+r! zHpl)rz=|T}=qk44P*=WFXngbR5sl>_jmNDTu-f;Y-bVp~a%Cl45>L=?gtR2a%n@ly zi5GnqIBY8v=T@l(h{^cSWtmDnT1Ys^D{5Cqh;VF6?6GB3upraO=>(3WhnQ2g9@j~^;}p~NyIaY`(b{xtL>AW@1tk!W}$HLCfC3utYJ`>0zwiy)0$5lM5Znj`B89RfI6o!~-i z(-0xWFEyJ88r(=*ljpUR)H1;#GZg-jI9dNw$ZneY&}s|k7~%Elri0ufxdd)d)HE|d zRlmdZ^5@P^-faUmZl;`~kY#V#iL5mjyy4~qg*A3H7K!!9hMtn<^hgU0Z>+X4t8Da8 ziYY2NN%3uwUPLBHF?tp)?R8@Mli=Q>V^hc*aU3~iE2YrA>^oeC1|0Op3X%i|Ot=ca z$z=>0$!zhcS-RzA(;Ia3Jm$rri2X43qnk8)`ST;6ZO z3E%NFmmj{u<$dqr;y=LUy|X6&Keb?nn6MW9{=(+`moNVMS#jp_xi6mk+T>#sUs%|g z{gq2!oBP7Nn*PeAFV0NP{M6ZBzwp|bFD-oK(%glwPjxPQX>RG<+=a{2*Cy4O*XAFa z3eWCO@60|q^ZVz+ndj!eG4-40JC|OXEzbSU?7aya3)*Yo4)_Rq;8Fjg*(0$}3blf&7R}TWJoX^wqr&UW$98e#=q`f4 z#|H^TFde#G(3M8hIzsqF9BFulyGX+Yba!GZ9z9J^ zC=}$#1PL%~PH{KAZ8&E@11*=1XzbuHN0MeCbZT+K6y4JuCrun$6X7koG^0t`Fye`V z6Z*Zx3BA_PmDr@1I44cb9Qx6)ai>w2@nrei=Ng=L$HB3UN$MKOlA6*WT4tpPh=X#Z zIU9~KO^pcIP!%I=9npX!(ew#K@x^@2bT#XagAl~f0vfP|1)Frmq25+0BN%8@?LbId z^Paq!q@D)n$8=EAc+?Pr_7>f7FvotxkpiL%oP44ihN)FjbVkYadC1O(#s{=ngckx8 zdMQ0FIL4s}tmv3#Qm)k+AqdZG8%zqq5`ay^aXv9XikNeQ)X8~=)kA&D~v`&%nOdy5kT9Gyl^|C)P+Tybl+$X{S|R zf-AruMbYf8=q#03Y|ZJD7RDa?GdC~|vd||_cgOLWeoR9@i$kOlA_h%x|A@YLL}4&O zY#P|eaj=5!YDvVNg1#%RpDG29)3ecksymJ*F$hX{UhF_8f(bYs5XZG?43(fvU=lkD zlgQ{VIuk)w){P;wL0ssl4|K;7#39&TB3Cr5Vq$^N#v!6988(e~$SfW(onvU=6(l$# zxHf@6P-#5L9>#lrZyeu9F2Ak#jZuB}oy%tbmA5 z&`C~zdk;S}(n(o@+4IDb4oh)Bze$)7(vbm*=*F4QfDAsO84Z8B1|^A3BT$$mnNRj@ z-EoL*(e8*4i7}t>5nPGi;K0k2;1Rh5nTQ>YS0x+(T@`v3>33)+nGz*QuXe}b%oPpq zaQYRUlOR9tS`?#mG*yzA1EQmXetGCN%TaVqMG?^k%`jC&$P|_MWOp1kf|eVl32IX% zwAVy6gK0R2Vpc_;KpjXAEyETgHC^A>9MWx+K6T8Eh)?2N>5c=>XdM1MXkg0K?n^ElW}*jH#+j17jy za45=sB-#Kkmna~;2{3?kbECgu=+PCFV)*xU$5Aw^g)!h4j9*BHBeO4}t*#4}oCtpg zZ9=UtJ6anET7%w^pphO~#=GJ8c5fUsr=qggH$}emdqjgUh(Ot-m@(Qxn%;&~)q~&| zo~I9MYJ}D^?dIrysovWiC!szXNymm8FU^hIl)W^J95O8$8PTm3zA`!*t3sPSv?HMt zdem7CZ712EeQS3dY!|jFC47U8jM1vdD-<-{9Yug4f!=gbMAYFKR1_f|1m5&K!*i!M zZtyMLaquBA2GUmos@te)3wP2)x)Ey`+e!#J<(hu7wEjg56kGccgG*CWwimRJdaOH+ zFK8ZxRMWB0kkbSV(a&j27!X}ct1oOJ=pxv_u`RSBf1n9$Jw3UT$U$NL7$3(O+du)?oAC5dI z+IphrW1n*pI2F{mLTvV@>|;!Xk#Dl6K}y+Q5u*&;N4w)7{feZ5#LVN-!_Tla2jYmA zV9V(%Nel#~gN;D##4hPml(9>^26P6#%)*pPy9&S%=v70oVOe4WVhRM4aYXgjMa0; z#&&y6{(pMmYi2W^4&?v8HeZ{93Qxw*NyiHSLrs5h;r$&{0A!-FFrC+RoM#-9B*nJ$|QIK9)^ z{}4dJkB>W7-jjWOHv9VH+1JN3!IPi+$glm$bk>}iy($4q%q4ym?mFG>>FkPc%~sPV ze?!kpTJx}3v&qq#KC5(*CIQ60ik|0Gr;)?Qqv>2(G*g@%m?F(h$FlBbivRYP@8=XB z9mV3fj)R%vAOF$)oZ=&+QykYP$)@-}+|MaKJUYd3|87J!MFNdveeV-5J~YaU<9brr z6d${vQ+#j~i{mKRso0Ja${-O;@`VpHn<%ra0(zkGqF7Q~a^Nc0Z?h zb`*=_Zcno*Zr#r*o*A9u+uiy0{s=%e#qYSEQ=A%|;_w&zwnj6 zFe}U_l4BspK#qYN133nA4CENdF_2>*$3TvO90NH9at!n^utr~=x$&a_z5IV~*!*XX zfgA%l267DK7|1b@V<5*sj)5ElIR*$3TvO90NH9 zatyqCF_7o~-@UZWSC(TS$3TvO90NH9at!1c$T5&(Ajd$CfgA%l26`CC^Zz|e*$H2Q619|@c-AmhiWjO|N4CENdF_2>*$3TvO z90NH9at!1c$T5&(pof7x|KGzz{xiowj)5ElIR{n-^Grx59=coSg%x95L zG>xlQo}RzL>*}UzY+k)`yYTAmD>rWP@0I7Dzw+X(=U!O4_1cw>7he0&;ioFQvTih0xpwu+D)YGg+zW;NW4d22RW}+}uPi@*bGZ+hzvetVz4);w z?~0>7Ho;E+{UZ|-=lCZ}b0y!wBF`f92bHe`L}pEId(7b!>L;e{gy+ zeCTeo;~DFM%R|g(^NA-WJ4@MoUevn&a~VeID;2tLGdT~^4TBcSmh)BJ8GadQbF^TDaZ{?L+w+c6IuN!%K`S#KaFCsA)-b!MQ7Pu~s-lNr~{_Dl3 zo|^o^%?wjF>u9JKbW<6wANpl}7+*uMKFX@*>(AbkK8fpEHFdIt+Bn53yVxo=KA}oQ zNV9zN=JSQ68-2X?;Y+)5vskUX#V6KwOQn4-X|Yt&cOR;x8qNNv24~xS)DS#V*oO?$ zpUI2GO68>S`=m@&siFHHzopC7);)jTJUv5&!R2zP8gJhi(9;7`9RAP|i4H%qa`VQ^ zw{I=MrB|*FQFgsg(e*UbmTNa}6`uRp4PzLtJbkqfy?X7+t-@LXmRu>k+#Lh1IJ7O- zuH3xAYM(D)hE|qdURhc#m^-h$Xb9iCGk-0dpI&_7sk=$}@U+CxujfBEJ2SJmxH$Pk z)gvy>J~4X&*Y>&f-V|0fO?CZlmakFVsGwKsdPGZfF`wb*_I?fUs0QeMB9r^u*vPwn zLRXTvgvZt03VQmk-*2eWT}*Ratt7j}=Esj&!S37+s+GH}%Rr8JXjJ-Ck`#^bsnRVS z7i&fIU{~FD2gaAsb%iAy5|u<(s^uc+9J#OC&AM96tgtZ|-7!wq&hyu<%}y_V*Wz1p z(fT3x%-z{IH?w&C`sC-o_t4%|D~%%hOPRSp*VN^e(Hqml+;j}y=PaX|hRoXuRs-W& zeoNLk$rg4O&onE|Vp`PooAsX28+l^)lNo<4l?{)a`~leOt-$pj1yBBV#^875gh91( z3|Zey)v`1_z4*%YyD`P_sflB^X6`(FW@Zsz?(+(Ue60?YTRzPtGg~G5PuRjJoT!da+Sf>*eCcp*mk279di5Nu?x*^zS+6K# zaJsLP20Yx7^*+)6X+GK=tX?&4(|V-h?ZKyxJTg;1$L94G9$$RuH?Q}%jortoTCG%M zphi>I8ta+OGYjZh)mLu3j8{@v?c=cTU0L(jR;H#GKPm1e{l^KnE{@+jlh^;hdt*EK z%5n_k7|1b@V<5*sj)5ElIReNs%*$H0BWz$X@`7q2Z&ekQAt%X0hc zCV#(9RYLaLw{+7nuiSX9e7L|!v~SzCZ--h5 z%eG=yCsvvUF&`CPZ$7pg1yP*%spIiMk!YsldA4>u9f?r*VH%52x>{>jxIsYKlr3#b zD9=u%j(pi2$4|pF^_+mIc!G!WRmYZz6-GMowG}wpal*hBEK|g`YuQ>!slrg`zztJN zy4`Wo#1WC}Ij$>Jnx@LO+!UOoB8?Lng*p&n;KXjCgtQ#3BTLwR;z}n>sD0Mpv^!3c zir8_IFist*9otb3D0Vz2wzQ6I$8~Hkwh}9_d|~S-jbx&|B=H?P=4)Y;*xhl$z>1*- zGzhc>HsjO_6IUr$2tTrvb|9p!c^`OE+NtY#0aOdLoj4F8bVPR?PX&G??8Nev@Lk7~ zjw2lvLv60+HM+1OU1s_ah#;C)g33cg2V~zBn>Pbv3@VK13T~y zyFge5c70EXC%M^LG{o}gpe`} zEjJLJrZOgKKEfkz#r?Hfb=1C=Em$h2H{XTFSSS zr9;Fc@qIWg4t@Va-Equ!83T$tOiEgjl1wX+u_Hr2@B_>B0=UR^!BOm}R9dj7Ysu7c z5S}3YU>`p|C==iT99yXnVFZ~iU#6atAu{4e5rXHyzm^h?^25LjeB@S2CxCswqdQI* zYaS?ln|bqzSok`$JttKOi?=-l3CuVMrUxmRd<@nZ4Ux1x0sCI-j^n1j`Cr5;)<`V8 z4;T7D;zoYr1u%c8J>mL3BWVQ-1!3$(3ECx%k%TmPx;u`~^y4syt=Jb4A_h%--wl=H zsnB-fFm*y1F%?IrQ4&Qeu@bl@RSF(=!q|VRJC06K6cMyaVh1|Kj-^>nkh*ppssv>M zlh{$1L`HuJM?zNC?OKTq;zCD#pgWFmp-k!{SJE;Q3xrk(xk7bCT;WVF4uvaVWmX$P z3R?vNL3M=0UC+L ze0vW++Epn_&@sf48if%=3aOTmF7ndIM|}&0^tqZv`-~;fX$h(|Q4xgrw(dB}5sCCX znATq8hM3+ zDb`Q~7!v61W1^J}&!D2h6kXwA8-$JJ1^g}DaZ(Rv52UXIRJT#pR+3m2T!~oA*j7S# z66icN|~D0pgZu;Tdu|sgGunX{=CYHbhLYg`g`@fh_~H zqJ!Q+j-e!IvV{Mh-nuZKsHhNDfVYHEfY3~0iyU|u;SN zUqx0bG4sN4;b+*|LfFl^6sh434oux|T9h zpdi6$NhrsfAh%>3fp!Vp7)E7 z8cd05Gqx>2U1DMb6+hS;2c?g%i4lhLLK__o&b@$zVYXa&D@=ULhze$3Bp8~|#!|a@ zND0()lgr(4;t0L(;7M9OGUle(b2u%;wF@l><@j+DKn0_C?JxiXv6CQ$DKafnSA`Gs z@Pq7INE~X((*b4+x}?}M7zuH8gc~KG!xB#5=p>G6;)ECybt@fE|s zbs`l=2YraoimMkOTp-ZLAjA<~njeMT+6h|J zD0x&m)*w+1^TR;HXZTPtY$`7F#(_ZiAemo?i-$sBg8_2+u!n)dox;0EGbUb$Iuk6~ z!&dr^6u4;!_xbKP7G5~YQn;b9#W7^{Fb7c-$Hu)yb0J3TSuhp8iw=O(LJ>JU$`K+# z-Ou;NF?s|`4#5S+TziHSQvuFwd=P9En;4@*@fOg5tVjoVQg-Si_lS!-*Bb{96ek07 z;^FXW=j)!v)yqdyCzI5DgtjFXBQVJ z!W9G`Dt2-1+0i7%jW&BTJck4q+gR$zvaqt~rkUrnlK|h$R<5OtD)+GT z9{Umu4A@6!1sd$2&b+|3LbwgDF^s0WgMVy4ZOO-JXt<2W8q$4SCPjdA`^MpzK0tjtaEPA zY<51{#S=f<9futi&kW#LD8^ng#fyz6hkm&BEElYO~|*yFTNZ zWX9^bKV!SSCjbB7#6O={__j;WUi`refBXDDng8?oD|1V;-#7E6>EAf_N9QgO4Jc3j z#N;pYp?AQm^TvboADLAP*RQM2<+!9oHS(N&f&i9#P%iJ`y;Zl^_O!9__xAD~1kRR6 zA3k=&YA35Owp_)`i$ttMuIZ&KnP$ygc75&ra$kd(Ug1VtLrV z0n)L&V>b?20Tqo3i^ZC?y2gjh2eG?^X?#Fh53(6s>OwcBj(Jg=b7cj z4X3eVDK!Pg-6TM}uB_^1=(iO5aRklG&P^D9&?|@)w}2zbejv2bX>G5-j=;AHc-CIb zu0h(Xv9H;tTGsNKQ;@2##tOXPKCI!@OPPRu@Pqv|$jvm5jFK^X( zj$w&=dSST+KR5F0X*h4}rM-S3TiP?vj8M%sOViuUolU|pr&wA*^m1@*qrZPs>Gt~h zOlu4-Zes^kmg)Q&(TB}gZk|GG46Te+j{c4wNAieI1@1CoPk0iaMXt!Cfb+B>?ZOIf zoF&$h6-0SV$D{N5{E3V6LPNO&zf~%h4z^CQxM8}X>SC)<uYpb@!79v?HV4N-C#j7j)SV{{{ zyppWhtIBGRy@pSn%SeQ4&~tgEY#`W~ZkNT4DBaoGI}M4*)DROKc)7>!Fl|pRdt`N1 zmshkMhD+Krp+N#NL3r(!$qN*Q2gA6skJEY@9wgf3;iC^M@c5n6aN*bs{OFlu zYA~Z=6InO8)j$x%xeqjYb?TV!Bsait<~y~Ud%Lx`4UGnH{?>0t z%+koOr=bqXB_hkjMo85VBadV9v!oC4A5B`42uEzvfrMsKTabJRh>a3SaD^9!(ch7+Wp9~u$Ql_96X*yEYYH{V{KzPgv~g5I z^3o<-ha)oH;rOQLNawP8^YY}`v$NmL zyAG}3IPCzX#tfDrScNF`SJ{<#-YOaGB`qRVSQfI7q-%CT`pf<*`CRE)Z30)GL?;p+ zB0ouTo_JiW34;3RL|lugA#p0o9V|3y zN;H{3Fp)T-PsABC$>#vqNGF8q4WpQ?pG_8xpy-)6dG;sbr2dZt$tDKiAq213Ph15LMS~;tb5QxT1ElFTDMWxN~FXh{(<$k;e_Su!Fhhunw`= zgb)FNZ}NiV!rfE}!nG7Tm}o1ZZc+-QA0!0>7(pkKcChxBOh}eV)s*~PG9Yf?FjgwD&(Zei|MJ5ca%|(TSGXg@kl+QO(c&c`Sl1_hgdx! zbu!zLEpVr%4hdR|NIVkgMoSRrp?)bOOGiP1p(yzYl7b}KZIeiOhY?wwJ0kLHgHk(g zpyM=g2ZvG;63A4_m~5#gk3lNUicIR;p`gn+OJwPlB4JM|${?LAlZ2cmaY6|PDwN_G zk`feXIOK|aMK*x6TS6*`L={PskbE<#CTar0h_Vq)F2E-3Nxqj*oHkPXW3m1l7oaXB zG1R}1P9pz`LV&U)Mr`sTJpc zWm|$Vb3{rh4@Fm~SITKf)({Pd@%Um)oQ%m-QsRM-DIFogF*Odzx>3P`od(qsven>?Q@5)R(w^r~=oIsbQn&MA{_TNv5(OMw9Sk%jH087uOk4<`xDYw~TEP&OHT8 zY;=ecm_RdSI8?|Hc(#qmvrm!&$Nrnl4Tm1V+rJ94|9^Pm7bg}Tzoakz(uF^{@W}b^ zng6Hr7w0}X`=yz$&&*7}bgp{#$IpCq>W`6m3}o%M%IWUuqo!oty{2>{!knRLA-y~@_!&Kaw{ zM7Sj3hK%Pb>w_QekyzMN@=MwI>zSK1#_oHJ7j>Mu=KRb`s>A z&`^XS#HrZ&y)M4nOuWXyAQe|qRF0oURIw}()9JipZBOV;3irXZEVVec+w8Exc zsnkwE6)N0^U&n6XER0#a*IB2EVwfsLvQE^^nMpSqWzX8%shol;XaFg3(W#ln51?L` zT^iN1IDC|0vrC|~4i5n@A;4x)Elpt`+jLw9OPWgS(4z7W(o^zDtx=Xe7_+Rf<2;a2 zMTj2T6-z{8y-Zg24`f;nLX!0NEGss8c!Vs+?pW<{ix@lWS$)Kyv=p}w*!^VEQmnV) zji79uf-V&A6C(llY@gZ9S^T6hi>($J3g7dg2$g*fDg+^eb`(iM1ykNeIfMBc#TA)U zTI|dyy+B&VEU)aWQ#~=ldD~kkgurm#p4x9mm1=N`72<@-5T(F|k}@Si0k9!~I6}&p zG6F=VhTbtJS!|4z$%vyGO!7J;;D^=o*=ZVsMmmO#rdi>*g`XYg;wa~tpdni+7Pz@h z*khmA$Gvl&sWKjZ9lt|jWXv+t&N}rGLv)F}4OAz1A;nax?KJoIqVg%|V#1}IbfGvM zzrvi)a4CT``WiQctsrho07}SYQyxxSkF5maFNn=j1nE=V7@*NnBOXD9Lp?oi0c=N} z&*awD-oJRo zJ92iEM+k6X*37K;({@tYXpnQdXREuEetpw616_)`!UPH zJI>h=`8=#U%H;C^hof#s`=_DI5R;o z15unH;#?{RxWK;VygJ8Qi70aNk>F!$PPt(iIW!*xlpu26hsYEjHD_Wub7@C}A2~42 z>3VALIk>~&JE{?J(?ia=yBr%1OfD(5NfV?2$$XoGzal2`_}uk4x%1CR1(A+oQ;9nW zBcKDnsX@je(Rv%dh|is0yjzeF1wYmaM|wmEZ^^Qk)`Y)A^9Hd>f|SaIHJ78F!d~GF zkL@jUCJ|4Cb4(Z!jz>aYe0f6`1dnrk5!*t2r;2fMmjdcx+_lhK;-sx9`{uly@$^=x zgX6Fq>6rpuGjNMIfkUdmczm1|C)#IvGoW-i$`y0;lfW5UFV2KV91Asv_c&=uvX>K? zME>c8fa?+wjkX9o$86R7l$IYJXCt*wESq8;8ZD64w*!|Wqand-jx`4yFZDRi%ZF3s zJwm?MK9Ich*FNyJxq)CGn|1;hBoPT`5XK`|{?5`3cWyj#lw=wz*}*d$>#(uaF4)U< z>@2&^GBq$HeNC2NO+~AuZ9;ohIIAE``D-Zq*c@S`zKZf{Qif;;MPCq(IC4^vS}n`8 zpP-P3>`p9FnpAKy7j;Zk4UGr{=WkW)@m(7QPKb$gp>OI0cp?QLk)msY$?=n5=D?yw zK@T}*vWgUPab`+#PL*^d*@x$7o${$?p&e zN7s|crBEMpNHE1N5bBZ<6?Ysj_m(*f#0e+N@{+ZN^(JLYWhAAXG#)W&I*#wsOv7}w zAg@obkBZ`eWA~hD<|Ha{JOT-v`6S0gV-=s)8qkwQ9#m=tCV0c?RJt~x^f`;`)5-#C z?^+zf#fZe2$)~W7)D%bPIAqPaEM*A#RGhr<+XkPuO9qn!RA94D$2ghjn<+Y=P?@qj zbU8()?=T{(hmMFmlp6kj*?SK->C&ps|5oSR3*Ch&5)ENt0*oaB4AiW^ltzcQ4A>N{5J#6&s^PJ~|-*4Io0!D1Qga6fVcel9s3E&Wwwcs-WWVD^^qu+P2hDozBQTC*5 zV1D5|18Rb?r^1n%Fdzg-rVw8n2LT3?Yg6mN#wG8H^BznBoTQ}nx+ZZyIk!nSPa{k( z-{Pe39ctF7jWz_>f&98Wsb3Vg+Y}Oq*yR$3A$giq0xW|>CiwO_4zd6ol`Cx z?d|UYi9!To*V@rz)1-cL*AH=d2h1{PMMN_}u>o)g+#leoNSy^y$s!AYzX0k$(4B)8 z%S`;@1}T_89hoMz|6sxh91^E2g(U!?@p00iDZvI$i__bWiFlIDfsqcr7M2-l8YUK> zKz^akxqmyLV5s>2_hFiU-@n}$Gf4v=yh^$NwgMnXr2O2uYW?4EH#_wa75~3l`+&Cj z{Eh#x^!vrhZpa)(4PO5`A5!u_3WR|?#{e3_b<8U z@qvHmpTlde-Z;E!etBtG)0UU+e|QyKrj%pk`LiSEJSHTRZRT$*^rY45)BihuvU zEBT7|%8uf+7czOpzx(qm`HJ_LR)k+>{};}u$q_sFir zY0WnEiubvauXy+DC{Am2$SeNs^RMJ9UX>liX^%{K#ZN!sO1|RVvZFX{R))Odr`~-f zUvV=#iqoc5s8{^jEBT5W*;kx4FG9WIZCCOY*RvBnZ4!jM;@|w#m3+mu>?lr~#lS0m z@Xa{RMK4NeQ%bcA5M^lu#vi792yiGsew52aTpvm8$3_Rm3ba)`c-WcT83hawoGz)a z0K)L_n$_$mPMffxUXc*;m3zgN>?=;2oglCHHQ#w9Uvc@&D^8h;Ag}nQzrK>MxOCo@)Z}euQ+W2f_la8xstEAkbT8za}Crh;w`&!+htx}ankCZHd#Pk@%3MK zC0}taJBrhmM5$LSUCCFR&A#HaH9qPUA9f{QaVGnU)5iPd6~FppSMn8e*|j)ryk5QH zZ(O-oT;U$ynE9Bt`SHz)*Nly7lV%Q`U|3d#wH4+HbA>@Y>tfUb1%U+Sb~G*5+6LeD!BnziagktM%2V zty-)1T=|EU-&y(K%G+07wi2%FtUP38arqO=KfnCm?F;KRNTBnb*u5%sgr4ku#gQPvw3+_k+1_$PIJP%RM&tfG^<8$o+(5OE$=^ zKcLjsJ}|4*LU#~V^G4xi_n*BnHz~D5TIwHQoP@?pvrE9?!PY5 z)IO*J7u|XBX(np8tD=Ss~ty%ua?{>oGgtXeBo=5el zJQ(@Ceqc4SQZfvWsJsLLsezjAy3t6d}!Ahs$)B#J)XQisYHSp9;vy)FJr0xi_TlJ_mI`BKa zW|(B9Y6kN)5T+W9R-Bcp{<=n~Y;?-)XhLchC234%zn2=t(x6@ovr;vKq}U{_L4Ekb ztW@>aiYt0rF4u3pEOk4Q=c-1MNJYNjlm{=!O4au!&F-)lCB^4YNZY)Xt$I{x_6OaH zb#N&wRXwu&QnBl&jpt2B8)O9^X_W&r?74c)x+N<;(kf9fuuI+Wxml^|(SQ(#KPZ)+ zGa;=K(mK*A&4$}5lJ)ZJ(^3LvGLro;st>Bg(X+BrHG>Dunq@Tf+A}Al1)wsIv`S}a zG)C=S`zy0jHIiPjY&5NW`59TM8p&#J6m^*7r%y;hcOxNA-pXhcY^PE$JuNF$YqHv} z>TcH=JvA#;Ycj6Y+_Y2aK4n7c6Ky@xD)n-`Q7uHho3m0igM)B*FmjvuCugN<21kV! zxvEkAD<-6%@Q|r0?>wlQwP7ptpOlrV8BEGXksw#|%d=9|-w`kYM2bgG982qIsY%kB zuS#D=lp+>edjAPosUuYtl}5YNYSfI!XQfBwOijJnBAac0LfWVbM2Pxq%cwWZmc5si zs_(7!jBcBxsND%^t%;jkwOnYmYh*?Zcd}ATS}vsnw+(*#c2=q?!&*bZE$LOZCZyoV zk?kv=ZFk~E6x4<{Wu@wS8$HgtcFDVOLYi+8_ESA76$)v-GVDAqD^)$RJ655PbQ+J% zO4auk3hjgHFiF2GD^=gCcRTj5I1C>%DTQDN;s)NiP-qsKCD(p*R;s?&iu#p`S#Aas zQdPZp)UpL1gm8$P8ON50A$45;_Rc)JU85Ma@D^*I5%u3ZrR(s__ zJ}gC#$V$~n0?yv(HV4kbC!|t-Mz$4Wm9)s|X_)rIGE$5)q`g{^?c21k&q~!u8hX@i zJ7N8ylTymQ$V%d~2f=~U4{O8gvQqWEPBC8^h3V)^C#0&PO7$p;l7b%=iVw+3Rgc_y zEALkQ^uZ_6qq3%>ijJ0L^-F_M<3U-e!qo#Yp`A8O{efAjN`5X;d)uo9>9rHmJmK-9 znu}hiZI%xj(KT7A!g1~zozO83{0C&ED*OJx9XLU=Rr!($sjB!vG+?)|b-l_3vsJy=Sm=6xrmQk6semim@z4bu$*i!aVdi8dh}40=T)ZFcUH zm8u$(_AqYPJ+poFq*N>l)uTba+01tf2lviO6^5qW##veF7Vnjns{Y!^sGrsY`<@e0 zOYqE9kNTB^QWPicFUm^Q4E7qewi6e-_sB|Bf5%wpcb|}+g%ZCiD?Nq8eYdPs^>++p zy?I%BI}p(uS?MX1<@Kyo^>++Zyfz^{i}bsik)DRiUCByMVa+a2NYBE!E@h>sP*4}M zQZ<8P5YdGRsZ>9lhUc8mN>5>1&Sj-)2FJjVvy;*@n2R&_o4s-QsN(OactMTi7`9OE z|IL|OwYhi99nQsbdvn*#Ezf>(_7`X0H~Z$<_Utofz1jQB{L|*gHh*ICU7N4mOgHy8 zuiISO_{7G~ZG6|p>o=+!H*egqakuqPt^eBk_pg85dUyR<>)!g+YoA^F-L(&{eG|Tc z7p&d5cFkID^-orRa`oM-uUgHoK7RF~tII2Yx$^TX-@WpNmD&ri| z{Fde3^0Sxy<@+rC6P|$|S$g}@OP6k4x@qa!rJ2Q#FaFfxdlp~4SXg|*;`NIw3!hy0 zg@yMnym6tv@YDrk;qLRFng5OXADsXC`TqQK@C$tL+~?+gf9^vwzc=$EGjE@H>CCM& z=FB~Ef1CTw+z)Z@ALO2!dvxx;l~DVV*&AnMbXv83RK}9CdPS^HXH;xx+U&O;OA39_ z)gl=Mach8WqkV4TgG#K6xZZ8l3d7Xa{%Jy-X?IYpX`juCP5E@qZ4EeJ%i2Glh~pAB zKsLKws#ZJgUQ})O+uA>5#g>RYGTsX0RB3;o6`LX^PSU5cVWj=tgt(ww4%I1eVVrUn*A60^09p#8?T4 zhux}U9h4mHcd}x&OGrL*d--yz{q|*Xu~SfX0-p}Mwpr@2fqyG2cBJui5T+%N#kK!G zD^~rE+5hd1Z)m?cA#QUm0_BKLo2{e@(r8KhjjUMhi=bYs9#~FS`}GNNt1r$8`E=Vn zFk0!Tqy1V|tOm85gcYt|9qm`MVl}88w^M8D2d?%j6XF8~72BG|tKAZ56qT;_%csRS zD3tghD%7}HYrm8gt3mBkyi;iK>0g`>`$ch4$frjmp*q!QA&KC-&v6VQG(D^`jw->upQtwKlpXjXir==z0fZ`h2q zpP3K?49Klt8XttDqBqj6_S0Fhn$WhDwmS7%Py0w#toq%kc;#9*GPR$&EG`T<$EbUf zG4Fv2;nYm+C$nNTq4{(;C>DZP`-!Yr_1kJUn(!6&v>zXf8{K}dM`^v%qM%$l!$w@u zKAaUBqGY?Re#zwWsQp-0tc!S%#KT5v*R>y=5ZCa&d%lQWj)z{OA88-TiainArDC($ zH$v@4vSL@n?Sk8|D&<7`;Dor+Ba74)acQLY2SqQ^{(DwziMT#U^Y!{cSNq|tSoPZq zTAjdX+u8>v#9ZtF=}@mm`ng>$wY2wV#N5?ryx0$uemSgaKa>@#e*42tw;C2B?FT2s z&PZT`c9gi%=*GU&)V@C}R{b8<+u@*>kG21AQry>pqmWOJiuH== zHmlnAWyNYj({iux4iARf_h!Ya-y@FKZl^!e-ZvqpY>C2eX*~7&-hg-0z9%bI6WXsd zhC$!6wfAPls^4}mZR-$4Xx}{{mbizdI#xI0evLGL?YpvKHKD%SEV!j^p#8V3SoPZ; znr)94(7tm*jM^dvT;AMoQWADxm$mQ6h`G2UF7yuyLBCkizC9~e{cbi#2cXyIwQsvD z?u`H)@m0slje?Ue3wS+SbXUOgEEQSm@~cUG+W?erRM*bDpGyC%dqo2i3Tuhtuc zQOT)k-si)$d`WTd9PVq4q5k;yS1t)=|gIPTOsoq4tifSWT!` zuK1leU(vofD^~q(b%s$?uoLa=lj5!%@ABp_yL#}sw6$-_iq(X+iqz8%gO2vLtXTEC zOqox)(>c)o>x4M!%JD9Z=PS5G%tlH3#*7#*4q~fRu$$dvpuIIKR{d_-_{yLy)xKdu z>~UFlRmTQi2i0Z7+Sg~rYC==9L+MK3X>ZAjRlhrSuM^gXsrGdfVi)g)ebli=r|H-G zmiDz-@zD-#IsQTKpsM|stXTECRZH6NT(q?}Pl!1xC~T2_`*@f;JvY_9CM#AGN_fx7 z=SL0gOd>Npj*sqZ@et-_L>5JBaK(%_@HBT+S(hkV)fmr59CPS>1eN?5O?{s zry7TTd(`WtW$krYu^LoVVm;~mp7zyQu^QCWFScyG(bm3dLR|02@h-1M)u&&xN?q-> zS@F>>>9xvsd6a6e$%@sWCbe$oz^ae5S5Js*Dh?ryH|$!NKhPW6tFmG>sExQ}W7E3Y zE3;zN??SU)7rZC!wh6Ji$Ec14`a!?lb&J|7vSPJMbf-|RbVrePDEEI)dx^IBfz8I| zLpT0-sPna?e@$ zj+Ga#T)q4&%dcI&Y3U!AzIW!uOU0#YW}m(I+lybr4P9IKz(Ql;q4R${|JM1Z&M(b< zIJc?2WNt90&;G^iw;adYpD=fLm9Sa>h6LLpum^C|LMbY&=5SO4qa3Fc+AtfSy{5u> zj3q}Qu9E_Po&eP4f@tS?Xo};81kexcb!z6JucziRPt^})y#cjk6z2mUO5GRm`Bdn7 zKYrjbQ`G9H0a$aHxz0d6Q~=>f#tS z<|N2#Uw7P)P{V>|2ir5itJH7NA9@7rE)dEQ&^kb=QV3z1^b*G^SiA5SD56g)p<(e1 zw68sG2xR6|kbEiRVt9cjqeLs9N;jdzA_7(cSYPTnVKxO*ol1XDe0A!(;KTzkgN&a* z`!D0J!E_Q+>uK>_q2M^c{T>0C2*Nt6iO@fDL`gS`hay1gkYeh=1^X=`anz)ETYJN} zYgBZ4>kqAIN0kE}{4#O+Y>#$N&7BXzO2^6h_f1*^lt059&BiOJxnADAHuRf+7g{S_C z(1Ek^uL#Zgv?+CCT2^3p^H8@3!b%MnHs!I<)d&p>M>1hc`r^>}`&o$1<)f8Z?Xgg zq`nvmm~lIC!i+_5EwiiH-T-*$i9pXnqO1saWQDR*uqY!)&QoEFhtUI!Hp-1zmc5g9 zJPO`y6W9-k9E6)gD8|8=7lwA=KiDYXOHddrz!M?&Nie9HeE2#b(S|^vJZ^{jRB9&a z5nR3r1&bgXfNKR`GllX>(?PwFK&S-d1mwyLn;|@wf@YY9Yr}7j+X*~~k=f0Z!J&iT z@-`rVhwm6Np$L|B(2&6cr7~Tog4(4np0p0jkkt;e2sM${j@y|M4|PoA%}hh4Ali?L zUiK%TL%=dKP!!Nov2DU=4Ye?u7W|bU0@@iKVsJHM;W0-?hEE*7&y-*yW4iQd^DoEr zz!tj428CLxNgdy@(GEfi>%wEt>Oix?x6Bd26#^I$q4eMq9y0ad8dF1_Mz@Unb%p5d zr_G3*Ies6`0uCwGFEd5)tH5aJ0oCuqz??@v(}|Sd0A6Q40cWOM+Z8nnhBpx0D7kSv zq~AmF1ujb9x@+yR8-ydeh- z(48IuPM|0_*ExLw_k`OUbRgZJ6fy6BSL2M^q0%`KN_or$!KHz_AdOO3)g2?IAev$2 z)WN;RZVyqpkfc-NY;%57R8M(y{Osd)4C;a1Cb1%sR}2(x_p z;Bh-3#iDh+JV5a1WA2`Oz=MDnL=VB}!n*S5D{};#IRGFL1{tdzb?*sUef;!sJFGES zMA$;qHG@UrgINSZ4b<{Lm-AnszCd&URt?&Z!f8rT!6jmSNijN974AdE?XdJHjA3$>#HvT?#n0Wj}1(4(gA!62(@;Dwb`CEr-U3jT)o} zpjKc{$3Vr9XC@ga*rq_{1tWpP7=b5|L(&U9m?>g@ z5lDIlABz-x3>FXv`sI7@f4^CLl84zjaXqnDTMV4maREio!5K#4@$9WQ7BqYZ+@0{wWkB+gfl| ztb2^xad`)T)X0uvnfS6^P(A2&*jVUJ>T@MyqjEc7pQMydo3c$42$QhgNLF*l?Mzul zv^;JHTs`(Nhp!H^PV22Fw3nI?$6oK`{}gvPendjj|)Tr==?n=c!;GbO(4%1Jx$XM$)0 zkp;St6BV_<-HyrOawyOhC`6V7CZm8xffx_39PscqLo908-dxGOOS83)%Kg8-dEN2- ze{p8C{-f)?^+&D!j~Qd_o7bMTwz2xtt1n%3SN?kC+g4t%aAg#- z_R*#LFaE~j>lb$y{`bNUEL0XAJpX%S=RawFcJ70@tLEBs56|5)`|;Vg%|2sxl`MQK z_es8T{4?_+?TL5*fZXC>1<`@So+~79JCJnjT%vPP(Q@DezjPY~U4Ic7ZB zBe9dWeC->KFI>=2!|{S%WQ}sU$N1;|4z&j(#PyZyAl3^eupqr~26Lbh-gc8X0o+M0 z*1Gof#|;G>5MhF|K^S5}aNcZiM}S=f)`fE_wdC5%eM3OOK?~(_2N4Yi5lC(5aXs&A zZ#ix#WDSAp3=@gX?S*?Udk%Uha8&ghvKc1tuo&<0#*QU4hK+|+p+Jdg^811u!*|8W;!kFYb?-mEFl zJMI=Kc;M3Ma3+DrW7Av^dDu6p+}W5)%jaytY{8b}wgPhp)Panf3^T|**elw99XEs) z#mM29b1V#Fo`_?d6C>sZ1}7dM?dVSsnDSx}1QC81fys;n7*o7J+BY8eD`XFIUBpKu zq=Ydru^4uo@px(E;O6|qWE0RYZjTses9gbf#7Jf4p=$G{%o3bZa-YjBJ z7O?(!fHCqS7893A4Ce%E3$Q{qbP(R}q#X_s{tSo|RseTZY&o@z@hU+rnZj4XNpB0E zE8VgApM1>OfZsvP%q0K7aXUI>WEe9nLI5yfCIjV&Q^hfWxxhso<3)1d#>Qm9T;Q<4 zqUImipjpzf1lqgfb^t@e2g42B2RjX{6$2LuN-xhv7=swa!|4SF9$g`&85>a9)g06j zZY@SIzJA;ezC4aZt_hGIau5K*h7*h(z-Yt8gPG0v#|;iE-W>~#PDEUd;TpzH7QjwiNW$fUZvp&H>Sliwqb#cnPsc_&bIzx{@=P z5T|(PVCey}jl0H4JJX>B-gDfJm`J!+a6WK(L0jN{j-m5|0L%f{5eOlsh^@i01~U@W z7w8+&Jm@p*GS>VfPudX@de%SY6(%W$MQY-V0>EFqD|tbj!r=szFMxL3jN$eq7?t38 z6eKLreJkU3#F>K^fjc7LWeNI%cf%fId{Ih3!p1Ot6PaL3a=IPeR9O`GM1d}4SMH4` z9+MIio1>MJ6NjVtZ$(9dqy(y#4-6Ww2jG=pCSi}mpmq$11}hUx(W&;v@e8qAgole8 z0@0=r&Nb|LVF<^;3Kxy&^$>JjoKT>lvdFM31cVKxO^ay${c$^7e`q=hxI&_t7!Leu zc&|7x(6?B@pm<@&6B$M;VYkD{2HzfJinzq^pgWHncMNPjmJSvDIJQv?5Z_{2fyM_A zl<2Jxt`33**l-Lw3{bccV%!9%GA^1}YTE0LUx*cqmmQ5EG*g(OT(IdEyE+o?DInd% zdjOXUcRuttD9s%BAXVYxMc?MR$dB8B);u2zdMx@7$GnBF94j9$K4%E1!CXiZLm|u( zh+wZ`7}6&9!Gy~#L}d>ex5KX?kY>OcU^7_QG4N1X(gueItAH!55J__IaJO;U_1F!_ zSeU#%huTw5+5z1VPZI%l6Bh{_!oqEZ9mNeqoE#t|;1*}k+MG7H+_=6GFuT1A~+M3WhT)A=ntV!{rkj9k^Z(Cwhp* zMED1QCQ;)+_Hy2#+&OhD&iw=^u>{6%wm`@gkP|QVt{b<*>fzGN#RkAY03C7m=CLDD zwy<%q6WMdTDxL>?z=AeLbVu-Fu`M{(sQ0+~xSeUyEY`;D033@)0RNPYDF(1KM-*R+ z-EPOwkP~tc+;A>n@P`UFD0F!IO_mq-03M9`xE)jv_+}iv1S4RvL6@=Rxg{%7Jh>5y zsfKZYZva0ucR{vZ%2gejaR2;h;E3Apo;8bRx;Adg83u|>g zVI${xkBCV1Qtk4KIE;i~b8ua_qW7=ESbA>}1PkPKb#qq?ogbwD_%?qa{+XpWfmOfgCJrCI|Ux07tq#YO4 z&s9_mAY3#oX?W>yVsWjpv4?PJp#u1JJgzK!4rDF?>^jg%v17t$acn~~7_4H31>!sw z5h_~F7u>AehH%MojlqC}@KD^KT&(b7$ri%^zzKs9puK$D5SARS1>zQ1lbC;kVT$EO zc!Ed(aD4>T(C4fUju2v0e4N_>q*ef>Ly6~@+H1!>BMCRbAAmAOy@%Wlh+U=vl8j9u zgN$XbR1Oz5Ifb~pMi8HqKt^Z~zh!Hp9r3TA$WSswelVQnGRD*b&yM*C5-d?-hMD^T z*vPn1Nc-cmkXM17 zj!ys++_UjYk~dB22-)u>)4+)knO7|Sf5iXyNp0hPYa1(%U3w1ue{Y=mkoL)Ofc`(x z|G(`i`U$(qvNK6Ch?`|Pzv;lp@4@uvY&l!@9)Wbo8FkXN{H-0w-%Y)3c%bkk63@dE zC7wzUiV4C?VGvG3qPs+Z$b{oHh!|3+0KjobHZKWUG)e@5aDZ?IlJQ6897!?+MQ{a@ zl}}g{e-KV2VzQ*Akr+hO1-Bd?KJu#ZQc5yC3GXDg5RZX4E)v#@r@uc=UidQx#H+k0 ziI^m+AtY51KxK-4_#pr*wE*-1-!aLR^4~=8J)%0~DyyVv5b`9>E;+nDBzuIA$QR&; z7VI6OFY1?Y7tyY_yN%mCCCg6Vazy6p{4eyJL}{k^F>bs0hLagxI>jVLdRsyQ1^L!^ zd>JdU%Y8`FaX%7X6qhRLWiUHI7Dd?v{#tTK(v-_C5p`IbgiJLa4H~Mz zAj8tyW%3EE5(H;}Y+@;71e0RGY}od0yhUgpk||3UZ_N(C?U1+n3E=kdz$hNG6P8sC+7za zKRCsR8<0B_5?Cd(kz{1clr8!JCe)ubNwX$tmIx)WToTdH{$%AzmIq6QEDT`?B`$gA zPBOY+nja?lktdV9bc$t)NWxT+c(J1i+zQ2Xv?H6x@yM4o_3g;nCN@r14YgI|E0eT3 zAfmtk62~AkMSX=RLh?o6`XmfN8VHIR)+k)?s8d&Rb2xhmDll6rDo9)&+9A{)(=N1+ z#IA^}6SqmE1cSXy>If}Jc-Jz$Bqk+?q!7<13`(q;P_XRUn-}8b8IK}71iL4j7OEn` z1OzgPouHG+mnBt`cm_G85}CboCwZC~=Ce%lBRg-fx9Fvb!DS9_bv0)k<}4an4xOvU%W3`k}LrD>$fkSR^1n6bxILLKcIp1R?Qspq3?abyu6@n;)(w`7CX-1jh)H zN&TB7uTZW9FD?NuZn+S@lO#Y6G|py9kqEz71i+x;CEks3#3YcM1p5-fu7nIb5{Q^W zxV^~aCpE;|Wxs6gLF5%|?_hlFQa*~yT8Ns3$PqOwd7-4O`;dH*lty?mCC`d9JnR={ z1r}CGOCcUg{*prhCOPBeNmFgfrX`hxEM8pQRH(2Wc}KEU$c`e>BqbS|?kV?G*tmZBpgP$o002c;DH@V3h)pAQszc zhXioP+1euImq7Y}Txn8Kv6m<~z;cz+6SSg~Z%R%Gw0smIkrGBuJt-iNz>)An(j#R; zq&i4(f+W?EV1O2;Xg48?irg#G7O8Y0xt3I05(x>^l3_&J9qFN@hO&A{)TG8h78}8J zh>rp*D>2l;(6oUyBRIq*QUPj`1okR;(r$QVhC z-S&6LZo?SkNQW4b;6Cwo5&^htP>x6?SYng^h8a(N61fUg;gGg~iOjr{??JCEnAaf( zCHWF1Z;^38Q3~ODD#Fm-WG|6tC?z8BK6BY7!G~2qUJ;ogWIK>~O8yC2gNk$05*@x6 zr|X`avnGd$g9F)K%sXR9PMuf~p{z(K3dzC6 zY9-qn23leImNXEO=?`yt(8`TV;pQVBIqt#j0lALX-W}NW_>xZjWPis%CdG*CBRE_4 z1AQmi_36(}yt~cSatm!Jum>D>+%X5!rokOP=Ygto4}W;3bEj}<&(S$H=;Tl4*Q18; zs!64^v9Is$qb~UO*xjV{U~lk~XR>84Pu;ak*Q&1Fa6_hRr$BVi(KYO&)15o>2mC77 zqJg`M1xv}MVLH3MzDKFoUSxAp?vU+kl7|t zwEQ-#+GMT=+yF=nw$pt(fJ=B!?~8{l!=;$ zTVEoI@!ppe2sFtR%#**4urXGWP&)Bi|NS5_DR?(LF z0O#56cCf#V_S(x+Z524X`<9OPl5|f>0xa&}RATMO7Mr#Ym+pUNiq7IipJR%oQbcsX z$KJ~{W>SKtT_Rf}L>~mBaTP_+z zs&e*qYa0PxYZf56#rycEjXmlgU44%X+by4~hhy(~LKqEqH?=vtTuraQ41MvL89ECq zevTOuZ~LjAGk?IK@OPQTB=OLizzq0QKZVJTm27X5C5$(oij6&I3x_?|E=cbwA_ri` z;6BT}i%fUwIVg`Kksb&D>U5>%jO!ELO1#(PQBzKVt2D)V7TbrH?sL1{BV%;}7yTUF zqnPGY?+aN6$OboH49D6>aN9o-uPyQ>A5aKFH3kx%wajvJ|Op|}u)7w&qY z4aNBGu4CZjk;noIkYYSmr{nD#TzDxo@cmtD4+o&(>l$>JZ;VW;iY@se)mqn=bxi{IOtESz%ze1*8-f9M)Gj$o@dTr zoMo&SS%72w|MQ%|)aI!b$N?32yAqdhcPXCSqOLdG+cuoNB)@O&Io`InOZ^p>=fTud zbjuf=xt>@6AD(6@I2zT{d;jzNCaB|+N+J8Z_=u?Nuy?k1ye+OMxOZ{Cr@N-V72zJ{ zHiPj&Z7tUPU|JH*!&~lg`<**QvT%;h;pC@?;&RWkzn^FIP20JP`u~gi|BL$ni~9eI z`u~gi|BL$ni~4^qf;giu>i;k5|A8C=qwb>q|Dyh%ybAKrh|CMn4jE0{C&8oyRe~f6 zVzQ)3fxSeLAovova){Gj)c*_e+C}~UMg9MO`1=2&`2Rb#&1*Nd*VDDvu73N`!^sm%tRCLEWdp-Cp!E!(BCqwJuAPx zyRC2IWQ}(~McgH&&e6#e0l|bhAtR0zc*oOpr=OzXnJHpdgTo?yD7FKuH*|aFn4&WQ zsWX4TIKIOxaN1yVaVi9_V@Fwzo|R7-Iw)u zpOXOaxO292&M4QC1_YGnSbu_YL{1?K@Q$YtPu+$ zDh$sPA`rmw$tfZ)HT#$IEWv5BcMmUhPvJ7~x(S^cEZg9Yjw9RywTbO+D;;XI3Q z>h8U;qq+wG^*S=v)~@Ro+^;KUi{RXgNms$-x$82P-Y_Z_T6+u4I!V`q;7FvD}V$kK>+LBb}%+>r_sFfRE&(0JkSh~UV9%YkIz z1XOVVf)i*90C=XtgxVnrfqbfN0VV{nkjf)4Zu80EE%n>)oVvsGlNwEpIKWT6@E7_e zYmQ`pKhM&fx^tImXLg>NxuY9QJzum2vctbne@@9*h^KxhQ!Dd_J9X|ZRkOCGS1wA$ zpeU9u>3{yP+dqf#1Jv{bDU9jUe>l(nnRW&ax60WIm|9?-I+z2i)$j-9 z6a$#l$9>Z#-477YeUmZ+vTbd5TdGi;?S1U0eJYXNWQS@b;J>kdDQ%Ap0_zr+G2j83`L^x8Y z{)GyK$}jvU!WskQw$M;f!o#@;nzqTFOH5%cj4GibNmkUY-C-91 zH`7zS%l>|z^*43rwu{*d*iq-y$?FtLcCQe}tiQed)?Nbt1<3P4|0U&6+uN)&$a9lm z8)RD#@(XH1xTsJYr7mFGz@zU&$(K)dpheON8|)anTh<=`Vh{ZVuSe=`$J7ob2!Tl|0yW@}_TZ1FcUQG;B!Dj+5+>0KVgxdpnp8 zy0M?^h%0V7aHqpt^0(hPb@{4v8cy8;-~Env?v(OlA!dI+&+?nPb2p{3{4OVebM;a) zr_R?JK=`KF$+P?bBvW?&ORas|g8#wd6T zBrI=1ZLmjzG1=Ao5Qgn?@KV!16*0o$Eib(N&Z&!&2L)YgP(PPn%|F#QImAx?sB6j{ z3;j&pxl6a6xj3nrQ)iYHSM;=8uAgJ(0JS;Yoil$xaRkPW!6Cj!ZT(IRd<_-xQ17IP zv9-0c=a5wG@5Sz(*o4#0-K7^O#c@(P*Kk~16nwcH$pgN$;FJgF(2AB6n@;|m`NMfs z2PW`Tv`Vj7dHyQr*5P#%j_afTsg0L3yTe|T6ww_5LPLx#^tUlkg%WN@Pxjq?Y$oAh z47Px*pbQe)BA8+!y8r>qggF-Xp^yhaRZMj-L=M0W2$~6iFyIJ)AtDvYTn`0nfYNmz zEDDP3fPjKdMz~Vs1f&Ae!yEw)it6_*h$TEgQee3O$N)?QEMgxRu3d6p2h$G5;d3sj zrF>Gs%UrinLbf_2D$V|&Td@w#v6M3vP?=xPGta=POvQYBc?kD>9uQD?y-(fBU!H7CrPbM#U*GscHRM=W#MYRA{op3CjUe z0`06o-BFT4@wE`TfTa!*4IV<^->6K6cH`gNOlc2p6m*1k?iN zaiHr2Vk9I4D-1WGup;}={sJ{#TD>3=(xZl!MzS*4b|R+ zB3$$aet2lxs8HqZsgAij4d?IldO!DX#%=L+CzG5zHObRDUpVIOu#*IWXBf|z;vl5% z7uLL3NNt#HNNxb60^uQs$woLp(a2y8K{=;D!Jv(X(UqAHek+0<;K#w01*;M~s1TjA zP>dJ|5;&)T0VI(Q3Sp4;p+XgkH=hdr1j0BtMP-tCp8mbDB65M@1^N~AJPXGb zB?$5mrT2JGgn#lbwv(Uokjr!IOk%K3>qj`xg&*8~j#e{*|A{i*W;j8(Wd{!0HH^BtV@BenhfjQN8e} z33)S@Z^5Mi@(+wh`bhA|%F9j$UFy|Oz^e)93m{bifncbeuvLH_J=#Qf(ypCi$I3^I z+n(~^&o`q}Ue38_-r-wxsKX!$wxgeb<gK>VWOUVF~aT)5WfXN-2SF2}dx*Og12l zf;b15BlX*CGta_z2^}&ZQ|zq()$GD~ZNl^f%{SYc1p`_DY=IQZqXXbn$Dj|OsC7X8 zfnGE`K7b3DW+t$4f)EJ39q^oxcY$$nmzvR6u0H7Vfxu0BCp^#n6a5O|7ydp@Q=IT% zy#f9OL8OI6ObpBgUlUU+71lt2Hs!{{48jA4Mut-hRSQfQo<2i-{cw=Oc+Wk6lQ!?L zEP(!l3py`MpDAZ8{%XL)SQ^5GNo*H55BPBbfqU}JarHI7gcZl6xZGOL<;G2UigTvO<(k4{Eo|RL9waFsx*@oX z1;LqnS%}Jaz{u^$*1FBmoLfTmzK% z=@CT_A!)5}(qmEJQIC7a{D{E8>lhG#%{vh8`oyfEfe_eYLH);WHNmJQ0iPFC zOU_l8;ej}Aj@y~i3x4gm9XK>Faxuy|wj-P#SYG%pgjzkuG{)2=*a2!7mBUFC2){Gz z-e5aIVL`k-O225_jz=~Q5f3=Qf!2o_MaRtIY6TfNbh?D`fq&+*o$A7|OIi+S`v8(r zf*Nw4#$~x!XnV;U>Sr!2IKk6lVyx87~!u;;ZdhnmD?a- zl-|8h+JW8!9uPxjgd;t{i7VxheqvJ2!3z z9uG_nvZ?_yCyJ9s-07J(OiosZ4~Zsp+(24m>QHlV!T)!`|98RvcftQReG1Y;j`h#9 zG&zqtX=ggL|A&p+LH*&rj$&M;;^YoMX(N#fRwle9UY_7o!hM?97_Phg1^?d#|KA1w z-<`|JbYvXo+))UfTSj|Wmg-g}}fzyBwk%S?b21ymuNh~0{h}v=z zy(vV8Un(NIUkLeP%c_stnU=?T+|HDgEEo8H7x;fVVTlX;zyI*~e=AFG*Xp_ZYMc9; z*KICsd}8D0Hoj})^&8cVn>TLQxZC=t)_-mN``5p2y}SObb#MLZwa>2o?%D^}zG>|x zYcE)O>C&xBH!WSeG_&~e#h+Sy&*G~W3yV)!ynbMQ=3Y3rHTS@|+1Wpx{mAUM&Aw)~IQzue zht00e{Lh(RocW%aH_bF=o;G97+#~n5x!=tFQ0^OYgWPj-kIvn9?Z&lh)^e+Vvig&& z?_Pb?YJTE&Nv{()Ffx@_m;6 zY3cWteuS=np`S0Ay>Uj!0$a^Np8`|z1p5F!9Qbu-*!Odfo)A~b0wdsqxS(5A+?|bF zkQG}Zjt0G=-an}1{H)j%aU=2yVK*)3yh$-94ykE~!y^%>E>>j5IZGZ2T6`k=L`LIK&f@^QCYDX zRJ+s-YlhX%Ju)j+gE}(9TBjZ)xkpThgJkjSS7e<>NxxiA2f1r9Vm%PCZN*i+ zS#xs_$clXtH!JN<*SD&>$&)q*Oc0^pL7kqzUcXRj4ifs`$ zoN&-=R7$z~PKf(8ofI??ck9hoSPn|LFV2b$5f_8eFlp<4?mk(u>Nhl=)k33g<*uF( z*Bex)tBwuJr6SpC`P{v;Vow@R>VU)zYu((vvSQV5!yeWLgDA}1b5aZ|wV^szZ`Ouh zRQGdVloeajctsDIaOp<5dt}9`-%e0ED3+^!?(P%f1Pe4!gIbC!^`aFIa#v-=>bpI! z3-Zanjt}gt$>guc<*D^oDVBm^N~=S+V-=3dGgr&d|%vWW=ue?$&`j z>Q>@jE|(Rn?`|b}!KoKYIc-vmPPNsbHY%OYK`_W`|C$x6#gzArPNm!!X#bKGt1)k; z2ce|bYX7{MYQLjS;Fb|KbeFVEQMqJ(*Ash~>z{o3SgbTtC$fsglJDet6XKvnmbg;6 z=|R+X3Y}4|n-PN~LF1{@ZuUc&p=;3$=q@?(tc%Izvf3s&!gvJ-43~s|hVcg<=|e zc5ZJ%oUiBraY^Higq7yH!`yCGtR}ReSDiYQ3%Q-FSoPa?`=gFi8|Jnr#6b)iiyG8! zFwA!yqnO*uiq&_=m8#z31HOS*8|q2f4w|*xjaji8)M}|vF8hNt_qeQB z4QeB7^bN08$UXM5_{a!WgBrI+QQWnX+?Qp=YEaXlRPT^Om3z#IxYjT9F>91oH1nfM zJSv6S|IUh);u-~UYfvqv+UK%jrMT+dMy)VRZS9{X#1U#wR~p%HM#aXUSkpe66(5~M zZfjt7^s@GkC*rsSloLdCcBxwJw0lvt-EV9EkQG}ZCa2FRfS{oLeO7FW7~;*oXDP#I`{ds-~qc8C+hXcWTmK>JKq?2B0MchZ(^4zy2Ch=aa>9E-Tt z?omnYM`e|!Wu4w=BviM+#tw@p_;=DQNQ!m}nKA9DJB2N3GfnFXu z+FxeHs^6_*J8rWFwNFflJ9L-3gEY?Vt=($ZwZF)U)pvJEDfD~8MEmmzaeE+^rhHn@ z515d!tNo9xSPkm1T^!VWtF8T6R;&iq1G(IZpe!CU~ z+Q%n8t;A|j&3-)68CmU5CdF8Lt{T*W)u-yA?`t2M5SNvuDUBEE`lyfw1?`WsVl}9p zHaIo0KhXY2)&J*m+Qxm?yp^Xf)fV19_x_n*;}8F@{M>eP_#;z#gQ?!Ft=VCC!N3oc!X+W(qBDThbid3vkTUy zu5Y?6s$ZVaQ(yt^lx}t)@Dh-WnIx)1x$OF}XT+e81>^?cNyVp3NJ8xr ziNhcZ#x9iLdYkX6sS}T zs3IgIItCIzH}WBHE)mcJR5cNhAhX&C{ls!op8{jn2S|y5Efe~HxbWZpNNN!US_b%O z6LbJ97xKqF7@nz|vrQuaFu?Ud8M$lKsNNRWPA2&@B7~n(OBR!BPM)`ErNnQj(gh*T z$Hc^wCYTD;e*!@r0p046%kP9vXi6zRIp*MI>H~9^D!_D)(FxGC`}~$RVBEi>NybZI};8=O=dKQ@jRd0p-RNA$xhMkZqvps0;_12VM@S zr2*{811dmu05LW&hf|;im=8Ub0&ua5L(6v}ml_0z8dE7B*GZ6M)}zRZDOm(Ng7QY0 z*!~EyD#;NNSevM$ zEE|((0RSpMJB4?P>RSQwq{HOoN7Uol5tX5NJqmRy0f0&}Df_0f(_#ZLn;1*r9}!s_ zm}%hb3Cc5-7m}oE?YPda?>jrGx3#}#g6^z)rYrQ^Y#uN@s3#9lu}m`+z!6H9g+o?< z8k?RjN*^Ra)GlS^fO@ds>ACZ|*w+9} z1R#Cj=JWs*1x$eIa%yr=Su)GlFw2jerTkgEwQ!BIi#^LmL*KdEc1q<8#7E_1LQg|{ z_*Bp^L1;41j?r_VZJ2q}1lkIfM&&&l1JDM5tbjxbfj)7;z2O+7%9`R2>Q?mu7@NC$ z7CIDO`v}ymNa#pxICHjOCi8a9&;yPWXa+EoOq1#owyG#j(?k_B3n5H*@>g5%bWkB| zQ|1wXNh-v{yhWLL3?xX3dQo*YRs`^te1PvqFGGPAv+>!cgv==jWrI_B%K1t5v&06_ z2qDNjQjqQ+>*nN_--06cDVd>)*#oeJVq_mgJ!}pSO8@{LtO!bKSb;}7<*ot<5tT2` z@u~B7+M*~D6815AIpyH>-rCv)Pbr3M#y9-!oyZD}onU)s+i~`B^$Y;e4k-a5Tn^rE z>br2C2PuolqVkG;M40g5~P_P6(gb6aE=Nb6`PpB7hUFrpWRDYpg%H|cgRtE=7N{*3U?r4H>VgLWq87#Ix-TmM z6dtj|DJ^#d+9Nfn0|UQD@OA{#hi~D;NH~O@yufZf|DWS@;YS@EOcBg#frF67Z3mnH zKu$sE=17t=3Keu`E9?L3`TB+bfpJ@OaCweTZRCW)KG_9M6yqSEw8LP514(9uVCQ&_ zg}urOr>28ad{i@L6%JA-NP#z!T7S%tbFh}Pw$E{-sWdnIN z(i(u61U@2Q1E}mf-pC1>2csGE2T(pRnFF1($OD>@L%{Vg=YU@nYwd*S;4Y%ArT*WT zxj~zK>+Dl!mu5aZGg$c2`9CC9fAd0Z=7!A=Y&JF@y79+zKeF-Gji+ubt$%p#VT)h0 zK3Lb+{$lBx#ou20mbK@s-EH-wt1q9QU({CpmA_f}j+Ga#Ts_xbc>nUREWdX4W6L)! z{o~U2Eva#}j908i+18#;h0w51icsOHy zpq7Be5wHzlO~E=NzZUp3E7rdGIMWP!I!(|F>|fKR_J;y#$O3Ula0CO3=?6fYa&z;QBZz?-;gb5X)ld%(CI3&%OgE|}-A8h{f{OM=fs_`bx0RB*B z&4s{(JOIF$5M2=3$yF!qaNl-O1)NfDVq-|2t2iPb9k)ZO9?5|o@5Heepf6BBUSeXM z(j|a|62N6RU4RHjU!jn|a+4#6!fg-b6D2#x1I_(11_jCC$m3E2CK%*Qq; zNT%z=ph7Yml+wY>i;8st8FLdCdo*wP+BY0G#MpvP$cSJaWB73HqANkBGysv~c;kAE z-ZStk3FMWDjbib-1kFs4v-m@xz4f>uAeTVJp;kId(@3{KzXMGe+n1}bT&!VTgrWkB zNg$GNV=&`xUOXFap10*j<7!_sek1-h*EMd^7}!+8L!_eT1#(A>GS^I@HIcg(O9t>m zIg|0T<*Af+xjA#gjkT{nZYWMtScj8@f1*bWG+r&%2{!zAdSKm>AI#Fxme&gJyNpWs89XxdbrGf`=ZdyX{+ zp0DlQFkX#d3&czq_W;kU#{V3`2W*x1Oli$qYYgY zK3)8?9vA>V9tI4iQ~*SQIbh=g1`1*W$;4dnX%s!fH3i&)mmIeP)PsX2jeVaMaXrV_ zkic2dGl3`6aX{i0Vl4?iC9XyM2zVT%6Nnunie5BsCt`a8nT9Vr1hm0m1h`!CVr+Sg zbX&@CF-@ud!Cw)RW|jgi!Ln=<8Q>%e&=;M= zy%F*+z*_(lgD>!aPAHDsVGbjpPVsGm`IhH8hTacZMtRm1H$67297X6e0_38oa1h~v zfrc(jLUyt>ZYRJgjxt8|0>Ueo1|ctH1;R>arMO>H^eD$u-U4KbyS+ei}d>77tD%$42Mr^Z`W=%0E6tK%6CB$I=qh8Ju5K5MKxMYku602lOOf z0rZQwb#WhCDJlys1i^@zaGv7!L!pRi3RITh-?5}qmJ`|>H^_6w?YNwI{F@M$5*HBk zCNLQ|^KnB7@@2@?2zW!bJ+FtSGURfLIspO$#}ttQ{XXM%fEfo$ixD9U9v>%{Bp`%i z2`%VMy$=2@ngswM*F&=apcw&%%ML)p;h(m>XB@Y~ci^=G;{&%fn8y5IGK;y*k;qzO ze{mK|H|agv3!D=m|2W45_?9!udcx&)regB>(s4Un{Qw2w0)T56#||@tOEKb{1%us^ zcLP5RpDO5)AjDye;Cp4|$P{pBn8r;f?GR_g$LvtO&b3oEC{U5CX*@URTF!OK-l2$7 zK6=N&%}WYDp&a_mxoKFl<967YIGWj3Tw8G>a`^}uE6#fd$YE|M;19B@ZEy;46yszD zy%H}bM?4MrA# z*5IzqonLN&0Za9y9aay3Z8-7-BT?X6&|Xjl;p_{ja4^WK<;F;w8E~rjy>NcwdQ0V2 z=E?Q!UgLIv#sN9U754!P0xujA|zJHl+u?g6$RUC)uhfO_{Gw*zV=`^uBUihC{y#$YZ0IfHs( z17R4sn4s)f4wXP)YnV%zz#u2YaUtQR7oN03s0zjb&=EO}Fp=?(0-pm}j>FYAk58MP z^8FkS9!DL>h&WE^4?{}-gY=o>c9DxoEJ3tz+|IOq{_40Ll4_Yi4mqwB3{f5{g9KKNDY163bqOVyRMYU59JfT_ zxZrdDhuA7fQ3?4kAGgCUmvIrWBEqfM2N-W)x&sM>$tPwYh_KjR7~9wx(1|f2tT%jH zY-QB$V@}$ESxh(`7=Jv&Vob9}0*)}TPZiP;ON(J=WC<_gfwBN3B}@g7R331oyPdSd z;mR7ZSu%iZaE9Xf=1KtUDUNN9FN`^~5sn!YIA<^C1}87ED2{5}bJ6oJ?*IR(@9S5( zb0-G;#r>b!2J$b65ug!?<&sZBB=O?@e{uiEJ$7;bzuk&trLR!xwtOYnAtU^(WIYM< z4X!UzZpp;rA4-czg!c}Y7$NXLl7z^=B})oFA9>dK1TP>F5YmS51`|{vJyv}K33tM- z6^FtZPizL?R)A{`k3BA8fjS2@mb~i2TV2&f7+6obXbef=(xrDdw`4+Nr}jqAQnO-?C@6SY!7?H zCtT?vL4jT}jL$QPIDZLM*hHrYx$x%vFPwE2X%fO+B7frlNV;PXm_)q%WWbY7g)fmZ z7fCP|l35FaT8a!6&ou#PLXMIIP3{$L#gu$VnJ|K@xaTEN4u3z<6vB)o+~Ze=j+Tfs zNm;_B6w*WcY!6$kAX9ocvKrm;AnBiD4kgJ}SdfL>$7ZQWxQf|?9V#H|3tW=&&q~OX zd6b1LOkRZQC4-#^R4~>p!2x{2K4XU$+ar~exUS?L5>O<4+&4(E zH;6@$L}=mGl|)6pjc_p=@mA|>533~U`_jWuKs`F;^UNVGbOI63iox({d2}cs2?W=9 z0Q$bHQaUP=M+lQ45Ncq+@jdo98;{In_91LK0o`W|h)S^!4FUi*X$cYG7s69G^4aW? z?Fj7_$uXicLK0hDas88-ZLwxa4q*I9pd@G=9NyDhM%CPNavN3{5v6I`F=gakYe3Qv z8~x=cHc+$zUmSQYoi#j1( z@xhbwD;a?{)iPub2_>IwNeiwhk^!UO@K)pO$P-Kqlz!+_d7q^9^QWoDZs4;CINB1}Iki^2_|^<&?#sQ6$08On=UVSNcH06moaBdE)WVUsYG z5TPb1m6{cTDTHbXyAfl>lb>hn5Wj`zS(jWHLHr_`3eRYKc(pDgf8WWGPl$A@%~NO= z^m?;7V&q+YpLJmxJC?B}OtjllDuR;A2fO=Zpp&l(M^d^c8RzIcsTmot1BgfQu4G^c z*DS#Zh!F^dlR*^3d_9@1ByP!;CSA*dLD92AlA9%wfp}SZc19JS3fJUH&w0ef0 z%o6lEx!AJ2P!xn~$^A|eGErdmBh*5)hjLuA9oPdFx34~hIig2kMWdqO~+k?)p-^x9_^$}<1kg+2h ziXMWoSIIY;rE~O<@HJE>1hhe`5lTSPg~^0rgfR=mTo6+Mvx+m9x-4{{ByOQ7Fc(<0 zLeWg_869T{N-&gFiZSMqkOSo;`D6slp%Rg^hvGmeDoIQeW?24yZfX& zGU8h)DRA(vq6Vov*bVd@(SBHQ3_R)GBsxkET=J)QWvTd;2&)Uz9NA-1s>d-v!T~u? z4dOuz4y$g8bnNuU7*)XdH~1|HQck!q%unh}^V8BJ2> zFaXd})cHvc1+8PQGPeOqv+N1p4F3XJlM)k*b2b|3OW68i3(>`d+8M&d7J*~RPN`cX zEfAv|>jiy z<*Q_piFwFMpw3G)HnxkT9bs0n_=ROzD&RzCV9hujtXQRFd|)#&XQcj$go}stP%1IV zauAXtIcdqJO;Sk=V?=0$EdZhtI9cuav=wpRg)Trw_bO)hw8#3lh~lP z$nHT7dB<;2C^0IzSvb5V<_(q^=aHy940Ha5eF{k^lO^>MV(3Zr5&0F^8JxISH>f{~ zd-<1)liEHW<~Z+9XrDw!4sc4|C@mycDk^lc6BLDxUr9*A=(%wAtQ+h1So^!R-&*_OwYR|qaO>LE+Jn~SSO0wV zXIH;#^$n}_)u*jmtM^>_hn3%1`QXaiS6;RfuI#KlWMy&r6U#rp{NCj^EjO2+vFt40 zd+D>_@PBCO9ZQEx@zUPXbxX^OpIrRK#rG|~d9l6t%tdeUJ`0~)_=ANXTX^TfZ42qb z;}@=9Se^f?`Cp#@zWJ}6@6JCPHi7%j{qx)(&Heb?yXIasSD1U^+{5SAXaCpiug-q| z>|190v(KG<%$!X|vlN z4y>;Jk_ln?Pgj8Ycs_&&TbJQ7j`i%*xVCS0Z zdq=GyCBJdAepz}1eyhIM>a5&G-8$TmnJ<|FHKa;I?g5edk%Xd-t5% ziJ*umJQ}6vt$weKM&51(MIP9|<#KtK)$YFUcZj;*dv=J}YiX2{K#U5aQ8f0cU{fhm z@k5hT<+D=x6p1m>R3X7iCFV=jZ_It}J!`LX-{Wld@m5}nqrh2v-gC~JYtA|5m}C6M z|DS4AG6L)O91i^Ps8fsYw61jk^fkMBW6{aYJ3(~Rx+d~hWW05!ou9e$X_#siCVoe8 zjJG<2g%dW$L8?_z=_``(@p3wZY~S+Jt-^(`NP+`>GVLY){H>{0MP{%5ZhN^*!a=ih zE7dAw_3rxbF1?oCo;Dv&wJNsxH95K6c6yC@{w=9im!CD&-yPN9MhM&C&7;;CeD9-LKY1FLy z?cw!QtKvjfy;|6v*lc@^H{NMI{W9Ocscr_3dz)U)a5`I%-|>{wjK0ebK5n!k+b&sa8eYtNyN) zYxsRTp1wZSs)%{j-%Xn1X|6uczb@6_g-b1O@R*$@f`n$uK)5pf< zUz=)mTe5QGXWM!>p0xU{uSm5Dap#&4c;eYDJBkOdIclwsYpfjAt8u>H?uNtqm#11s zL$Fcm?+&`btQ{D}m!(>VXaQh^`MdqDJ7_kX-m6os4T6m8S%|G!r(PT7UzKY0>ax4# zXM0f;%$wcLm!?}OCtlA&UvEuXoxWX7wUSx^SS3H(ZMu?EoK%ilYjf5WKTT^Ax0Zv* zot1C5_9wIHRL-M*$luNP<6g(qOR3gw12Q{XTKmzsX|=kwVyd;x&pNua+8xrARJj*Y ztwF+Kccpa>7eTY`wjWHjI!n?(rnF8+#;iYCOkbI9h4MM4dR410$GLvk{E}2Fh%C!d zy=q!beMWNruccarBGXd6a-HF*lQfJkPPLNm0p=!ucbr&@e8;SP(NXJkNqX5+y-Ef( zH#ZsgUy*9<4`fZs&*~#LXikiIKGoWTXxdu$%BR>rnj~Jjbs}q0ezxZKVtqn&f2uXW z=6I@CP!JCLJ<{l@*4#qYr2K4S)ay=XWcO07?f}k#^}8B)!zI8#JJrh6lRlN7UA9}` zx4M>f)H<0CWKBwIv(}#U6TfGsS|_yT)ZZQW{b6?k4O*(THffyJb3w?R>$*Lb*A1h;k}m&m!(?Gp;$9% z4Lg1CP`&(1Q>`-lIa6AZ!)e%yaqA^Vt+{1gteLcS=DB`=y3>nOt-}Qj1-7(y^Y$#5 zhm9AdT03J_j_Or2pKI0|)A)s{)>d5yPbWWHpN{8a%Z*-;YK4;?n4`2V1`WgN&7v<% zwFXo1RixFMcMWH;@V_9{>Mnsgs9yPv+;q|Fc+XF@nsru=>Q!zu_NGa#{k)@A7bk+1 zBfojnGm%ah51yN99r3fa`pxmQJzMC(Aeil)c?xb!{?@zUMD8XLOLccLg z;_1Bh>{M$lkd-4p+k|VoYcH11O0_~=!pf0WKpE5iY-E0Zs?}2~M_On3*>o_gFFr5T z3M7s%X`Sce;cQfQpLx5r7dHoi?B9H!)o!@0CYYViO||wrfJba;wdbv*-l`eTNVRs^ z-K1`5^#)Oh)4%+jRBM~x36d$z07YUQVH2>M@R;XG?^h&GY z*MVM5J}cGg^PWL!(%NqaZK$zwPfNG5e}N{_I_x`cw>cX;HPwpv0j1&6I+*6iX1Ck_ z%%j!@+ZV)uw2np{{P#ikDXG?W4PQn5-Nn*LI$pm08L8IRl8vPPZeutNYhFjcmTpDO z3wRR0dFC(XLAU2!O|>RDnImbfw_H73B<__vt$|y^#&WVRIi351@nRNqE~i@IDUy?& zR%5yJ!*;!KDb?y@V>#Jrod$E%XC}jgRI9_AeM-5!B^AjOpRv4up8%7t$1Jf zgwl%B?heghaW2&wFW3vFv?i@d)Cry5*;K28odmy2Yi;Ru+DSA$^Lb}qxi7cW9@so) zke{Y?($^7naHo?0f6KYQ+`IOXYrk>rN3VVJwdS?gTzmPo&$#;WtN--s&%^q+yn6HM zmt4L7>X|Daz4BXEe(cKIue7hc_KJSxGcSMQ^8a%A7cT$c<+oja`0|67pL_Y-r9XxV z@Fy<4<5Kt1>n@p>o_6qm9sKiyUpn}qgRg}Xuz2wNgA4nAvj5xr@85stet-Wf_wD`9 zh8ytrMTc(}Ex{+ayMMar({JF@Z{X8!;O=kWP#MM4CljYFzDeL>>7)5{(rnH5-gT#W zG}fo$oJg}j>2e9TqrD$KYHqt&a~p~mVt@M7t2MgG-VYr$!$m8Otu)V*&fIW^i@m>j zr+L^XLc^CdJA*b#mG$A?4<0pJawN-P0i@Wo+w*xn-1~vUW@DLHEm(hSz1zS8O`7@U zH1F>Hcd2F&fS{$N8D6zoehL5L_upxb=hKFGA=2DV+PTGIJl*@gqvpDVrd&^&=j|yt zcEj5H-lOKY&QII6G}l8&ACvZE?|Y7#qdG2*x$atXmUn6mWAD4~G)D`XdFS%e`R1b5 znwx{Y?>cI3Beujlm*(!wt@SA%*!#|-=3Gax-l}V}Mm=8UTD`sRIBM1{ez~c-Ha4x< zbU5kkefyo}a5TeL(N))yuG4hP@qF){cbWs8AR~XfWpIdgO?y1ckN3XqPO~3Nv+YT< zIh?>%73TKdanu~vIG{~inp+5PMlCdazV%LXzR87|FKPB?c6~BvPWRq^yO}6k7smn4 zJDSI>MjOvC*!z~F=BTHXQ_Z5mw~h(-U8`S@TFbphQq4+5PX#MS!!VD6*JN*%Y6eyfUSFb>?Jg8r zer~+?^|#%g;qcSJ`A-MuKOLM`si?v1)4};q2j?Yt`|03(`03#MCkxJt{@>^9{leb0 zw_N?Dt53f&zWlqFUw-LZ5B}t!vj4X({y!IQ-uH|5efEXX`469e*}1o${nuy9XWp&- z7wygb!2icztNZnILG%5LQkq!U(Wa z-Dg8|4Amnw5Rh8J*bCFDFY;g^bn&+K*en0Y`rp@uoaFK;9)bEA-cMM+71u5d(~#Oj z2uzg{1skwl3avDS=#BwzH*B9!$x^Bb#1oGY0?^g{4@eg;rnS7PMbkofk1A+9 zZR*li_rEmTMQVE@19oHlX&BCZ))2*2Q257GFu}17Uw5p8f2ejt9))uM7{YS8K~0=c z$;w;&@LxRdG`skcY!{_lbnjE99F{JA;-jb8#TRG0C^dqV>9Xdayw)j7%LnKY2sb?y zofNPl`-5^1l6R2F`X~j6tf7}n5d4w)E=zXwhd=R?r`g39Nf*;Qnp$X>nH`7*pz(#P zSBSoavl^0lC}u^_j8({D(TOhPdF4tW!Oy|Y3xfoe)Y8R&|E|;Q;tR7~1d<^C55qZi z+X2PFF^Wmh)l%>e%{-*mRL)XYCfxU`JPfi~H;~%Egxo$-8Pdg%|EtsN;tR494dVxL z51!CsP|WL7n@MpnI;tWFg@YKDB-b$5MaH>-0pZ!h^Yj*p={CK>8da`(U6r!SqAz zf&G%YK&r)IakgCP;-A0yG`slxV_nP%TR7FS(1gRb?n8)fph7?eEgeQ2F@gA;+Di^u z%Cn)chf@UmP7`Tcn<1l zWSvkBfPkECib|Q%8AIL7Q`_ZZ2dCM^=VrU;L#RTTEJq09CfG*|Ijk2JCkx66E{8DX z*och66^;2}=liI|;P*hX!A_z;S>EFR@oT5q#pg&D({>TG0^}zsIr?x_V0++TfHD|` z8uW+}t3dq0pcEW>Zv+x3a)p!|*%dLC0or0P?W-=n`!u_Ff3}O%;p#T(y5v%k>^SQh$;{}M^uH1W<(x1c2MQT0Y{Dr%}?p# zpZ)1+cJcGGZxQuw8-s@(R7#>D&I0Nt@anT75wBw%K&papiKw>X1|keA98a|2R)|Kj zbn#D5)nEL)V_k$F0s0h}Zjf<-?H{*{{=r!xYTYmjARNhmd{hM~?v6ruVbHfBo{FHN zXQPOty7-5u`4*py5f_PZC)ndiB0-J9)evI? zBN9#ywh)&xj|>=^H+brBQo)_z(Zyf=4@m7mador?te!1Eh2HVlQ4_w;+LIX7v=tcaqmy} zu0HefmmS0xzvse-&i%_XALfJq_P!ns=8vOiiGVb0LWp{Ep+Iy7DibJxxMFf<#qie! zIDX*dMK(GX#;t(sC2a2yEfGNA@J*mg((}2ZhtI{8I3E^DNm*Fm+@vUUV@0=uDm8bP zic3@h+&b(!WYb`@B6SCQ5_jzcz7nDeu)zuJ3&A7)3GPJ@BN2`ChJ#Ky8m2z_6zE@~ zR|Jy`igGx7lpjNWf#MK90}uvz%zOkF8P){7ALMJ%HAR6ggx?5|3?vvznD+iK{^=h< z2m@L)L@ZG$h1m=MAq;R7F<^Pv3}BNy;juC4vHE(F=vh8?Y4+I&g+KCH+PQNVS1(9w zh9j7UBZoiCzGeFhTNprA5txQtjPxb9HYihw-Vjy*a27zNgfcXA8n9k*gfVw0O4$Wo z79=c1QQgQF9m7P4)^bW=g<15Sl7$Q&Aq9~qgf$AL5@z1wJPf&bxk&#+qUnTY45C+% z0CB@Y&=1)v;wexXA{AwDNWtWYs$vcg4<;F?LRfowd{Rh}M9T$Qw1l7o+9P-eaD`A= z!nw-v%V`m?a`EnA7z)rWefZtc>)-!w(Xv7p4k#jUL%A+NtpX1Zf1QtH{zaGvW)bK{ zcsVQ~;TnOtom5p`Qt}9up$x zgy_t3@^DU}?#7V?KOS;-ocM50;8wGW`70>kVY1)>Z-sgtq~i&)Bk|HAJns2I#4Xc>wB~&>p zkX>0t0uNrr(~D&wiGitCAk+!U`Wzn<={yU?LRiO;$V8qIHXd$a0saEyrFgtZ(uMfF zuq(lX%4UTi5!yneOu;AS5twJsAuCNd2@Wt=MnbGVHxa@hSO~NxVFyCIPmTphizHkL zT3%cm><+SIGROCa(YL$~PnIk{bV-m20rZ4QjX3R-Y(`%@KAKT0J)>wY2Ewx{a#;v4 z`$U3J=7e@MkAv@{$_$$yZ{CMsm08Bv>8PdVp|C_o(dRJL=Mb3^NUR8@lv~UdIDnmE zwTKcSTd^QyWkQY$eWvVh3@>bWI(HhFN?AMzdvVW!P82n?h+RjZ5fv^U3r>%GFA)A( zeor9p-G+?{7AABi-R1BI*k+P-V4{T3i&!ueeF9=7SPiQoe-2_d%UaK9 z{L}A-Q4LNxfv^*@ff`Eo@RMvpgVE81ZYqiIs4KaR=Ow2noL)r3%m9B0$45AJ6MV5e zgpL809Ty4`K2A}`7u`@aT*HL0isU}fdW6AORKr|RlZCDhgN(#4nsJbFLJ7xgGfBC? zF<~2Xh+x7Y#(e{K4A(3o-sQ=JJ_pb1-K;?&x)bY*&qeV8i;xt9WL+R9Bd7zH8&|<6 z+a$kss3uu?UJs;qt=M5SMd6%-gD*r56Ol(=7p^RN#SwIj5?;w85Q*{{GM2emc{n#Nd(R@W2${ zDG(7fiL%1JD2^jx4_F^XvlOFb1ZUJVM?dh3s665xz!3+Rqj>dPDDUOL`l-83>z_0p z4F-?1Ymt*>aGY+W6kxJoy0~3qzPPL4nBtA-?4}4|R|3!2N)V1D=U}G8bipPl=aE~4 zsNC@@xsqRoK^pIge*&puRE&+HTPj!ut}98IS4K4mTaH^3>Vi&85|`JWaJxrjn(5-y z#5F<{Q#fdacbl*X>c%3X$dyc_Z1LHU@8r^t#YbI{(4L%-I6688n}Ragrny*1g;`Ww z+7Oe4r&IVvIbBg?P93cB`^8(tKjvFpG*Wo%W%17Wp5H0trT2D{IpB8sGSvNF+uOVP zd3WyrA3XD~_~8F1UylZ#@i>bd66u{J8X?x^q%LqJEDJaQ0qVG7RB%H50*6S22(n#b zC2=vw*T89P+W`v$@2_SU)A(Eth=sNMZ1Vhn$s8sGsyAaRBOt z&^JarTP_14TPZa_TudSRW!LBqDwG^5q*C!&EiM~A=9d6`0$*}IAG63`{bDGzUqz6X zyg8Rwjxw$eSVtk-q$UW<3=5@%Ik3z3*pltM$RB;pwWFiyCF!Gy*XA=iECE9HaAvx^ z@B}}d#4X`hUM#U5INvdDkc~nDE7G>G_{#-M{7>$~#C!0yi69dPz(T?A>lF#3aQYOO zLUC3r5w`{dyAUJP%$=Hxwh!?%**PwVaNH81f$toh0Hl}kJ&6oJ)d?v(SMC60fKCXK z;|^+lqL&1IadAyB7rB_|Q;5sReL`Fgm}yZPh4fRDaFH^mvs@>!z340Rw;(xHF@aZe z68_*%bFy)&QN09B`8|*E>}0U`VdJq&S069NlS5ya>Eu;|72x&=rXXKVIL=`!>)w@8^0mqK1wv1|4k(KO~8f_Lxf~G+xAsI6}|rZe(F<> z@er=$RECw7n785$c3F8(GB@R+D@U8#NN;X}IxK!pbCP&CDF{0wQ;r=)%3Ij^@$gs{ z5DBAzjuW3FpNb2>WU&*GCBYM)2O^n_-$0BcsFaH(g1BBBRSXoC^`J_Im^&g-US3%Q zQUU2|3D-eBsc~D4;8C`7J3p9T|`ov z3q&4#lTVb_Ar|Noc$Uj78X+7V=%({qVj_|#41DRxMz8rGY}@>Cf`D8q zbRihN$1&WU_xGc(y?k^gZ`}X6aIvT0F2^?~U@2<$>^g4$a6ki6i-ejw@kk(Z73T)P zb_Xy*!~oP6&LxvFmt;-eE%SD5sJl(4?CBNeqXKicj{*g5I+(98t}vqn*VvE5`b686 z>wiEb7ZGPvpM_@xJB`JaNGtaZwzdgjHW4Ke;$Y*WAOI;kr!JEnf?o*PxJihtISoX2 z;|SIT!vST6+zur5{Q9+Iv*{*WkmLaHWpjTU#`=oMKSDABUUJk{^1`)#kGJUV=WlT7 zXhJvc|HxtsS_^0oNCwivay!#=pfN%FfTkc`0+l~WT3mf1dB}x}P!NRiT;1_y(BU9N zmn#?Z)gn8#lCVMYPPvM=1#A&T3Z!SayyFFx#Ikb>M3X0~;F4q&T zbs?cu786&AAR%Z&V204VT=*kNWTUD?w9V0p*u@c&9Bf2##i*j7@l61p(|}tn2tQPR z$cFnkYI*LE2DI@guCt-J7&4(zUkGCf`Y8f^$nwduVDRDiCL}92Mu;kiNI=_uZ|(5z zll;)Z(Ih)*JIvLN*NR1g- z1X<_Y`Kru~QNbB=^$Im_1us`1NKzqGW1)V-|C?o8XY>+e*Wy#L!@0DJ?~0#fifhHh zNaTQfD5ybha^lF!Js%rP3XG^=Nc;f<0v$fZMnKCD9sryfij^TbAkm40bA;F`WL**Q zV`4f1rkt_qECV7v#1UlIzB7#8@GgS7g!EVg#Pfyfog~dYw!^#6sK0+SqZ`>19S{$> zD%{Q(vxNU@bLl3EiK|Jd1tbr5Zh(N5Yi#jW+piRd=h3OUXE^rXlqrC0^lGr zPhQ!ocw|7FDls{)>Z7LQ6c8ty1IH5k%iBlS0%LCj62o&MhfkEjrtVNU%nU+2f@4H) zO9Bfz+aFdNk|BgCI19PvV^+~#5Hz>AYB~WUj$oD^qAysTfYl({4t(t9s`!=>cXmtK0|rTv3{d+?7A-hc3I2i=2*4)lYk z?0(7{Ho~nI9`)AtE!{ayC-lV-kd*-!2 zy!N4M@45EawfI`~+6%5-y!vmh{`S@PU46&Z&ehjmec0}Wzjx(l536RaZsQ4q z9Ji|vZ&%s!@8NprI)hGPMB2}1n^mpqpgjsBdtz!omukkGunpv=<6O%HLuHu*Co8pEHu4NU3*`)IVZoo+vXe%JBjua*=9BFI_zD}#A#?he$>1! zK2`&p*xqs;`XlYfvdwBjmy5jK8c!zL-^n(s3GH{f3q4Ny+K=98R;9~8eWYvkHi@Cu zyrKQ=&1SqnY35R|cZXd|dvCT`jT@p!&XGw&d(TmG8(lxVS@~&L2BV=h9BO|n+pH!O z;*bR18DD#Mwpoqao;S=zw_$5Pa@4HKrX4jfvu1?Tq?_0N`)sqC&?U+0x;ON-+ja29 zGFtz%8n@N6mauy*wA*#?G_Q-U)xg^Eq!o_5u6DZ){!X)+P&?=tx$)fBZr8!zXi(FpZveR0n_9tj29GbN&3-v$dl-_`_0lHLyAAbM=lf(2nZh z51TFdCsXF*|nY=1=PwdWc+%+RDRR=F+^6XIg>2cI`C-Y`gOVz=ztLV8;V7HQ99h=t+_c=BR7J!=!!Po#w*=e>E__opf5mcC3AEwi)*bzK33WQLoK)?Qdk8)wq3oG0;0+ zM|;~*^O_z&4a^>ep4V*WwZEQiRukHpcgG^{sx7n4YTRZptBrHcSXfnQHTFvnBKZT{jAPk-gAn*=9v9Fb=GGz3DmHG}SEB1mt%3>9`S$oZ5J)O)||~ z$E4Yr4O_F(KpSV96*a-g>bK&0cd3n1&5GDSapC4CcCfIArZ&trJMzottwAlZTQhBt zZC2wpa&v3p^@dtM)l684@SXg0V8W*tg$u2hZ8oGinaq}>upesOY_l4-({`JU$+V$$ zj+)n`3Tj}po;&D(lh)eV=A8WU3AK=I9B-|aZC2xkoUmigsV`}!niXNP8kjp`zG`D# zYh;_%gic%Cc7M`nYV~aMnk{0)pmX!FR!cPt-!jyxbZy+j?nKQ*OES&e45fKC>E^og zkrrp0)wuIxYs`;3T9j&5bj@mDQ=32J)?F>kHmeCW+;+oQOmr>CHmh-aZf{&)_&v=} zHFGDCfIM9rS!Sc%Tr{+|W}DT7E-kw~b?uRME8DEbz3BCQvH>0K;XBQTWYOxSdMMB~ zI|E01OSW14?P0GG&D-OVb~Dv1WYVA!=~{oeoIA5AJUb8)6nz&hjLx^j$Nc*L1Gra4k z`-Q{iJ6uu9g^tNX&1|Ei{k=8*|C{%&eB#od9GtyqTzKBOFF6CJ&=cN_{|Xu(^`HGX zu_h|)36&EZ4FGo#zy(xA@RY>4=-65wcpVTrR2YGHCz37zSYYcYSOW?X8A%d#Q4A)x zny)xvv6=@q4|azYyV8a&-dz z3aGJ*h;*TON;-k4HQ_|iya?IG^oDdWNdqS#0Soerye%1g@PI@cQA!u}VN&!I9{D5) zNfb~jViI?@L7;EY9e~$zYVvZsL#Ib)L04R0+a;(4C;;)y+ue@ zvNd)EOjsqT6pH8ylZ?p&-mWU8R=omPn)oDW3jq{KYFJ`@;QGMJlZOSjPa>F-3sPm| z^gyDy1nf!S8$|KR67wf0Sfr+#j4e4J1UcbAAev1@Z9r8BZE+50F5s{TtQQzH5$+~U zL;jdhGP!$7IGACQy--FFAzsgM06YN95DS$BEOjH~6P|Ryis18)W^^O51MG^bUCGnr zJ<=$=4lvbHoX@mKl$PB~buG9`vRec^BI37_^JFWreOUMUyae`^{cIM2HSnfEpO6X9 zfvPBwG-7uVR`!xgsX$`Ka6xwoaLbAb=tJp&k}E6_2!JE!%|c^^U|6XO0a`=VG0C1sHwF9cCw*?6(i70I*O?N z?HLt>BWk-6NcI>Oz(W%2fQZqv#Z4DTFpAb650U=JOs8Zb5l8VLvh$$JkoNahJ+(e?o9wBIjpl!vN=zB7K0tdoC-3} ze-IA;;txJ$xCNy_jw`7HEFD<`rFVWBtAW%*U=}$r3i-GU7}BXEtTQrV;AJ^;z?D^< z&@4r_|JJ9TqBkCW=$S`be#3|}F~09{Sel*`jyWWH@Y_i3f|lTL4A}`%03o&BaLJHj z;ot?KK_-YQ7PPa$QUMaSbA_B$_Nvsu0`=v1^vts3m8okY&*x#WB? zd?z`5N;FBfQ|H7%OR5Jjg{AxfvU`H52}x9et~TJZ0dQ@G@J+A?Tq>!^yCOvZ1BFYb zUl80>0or^=R!Yey(`9biQp3T7@gK~;b+qL<1~37D5x{UGC5^g)WFena`}@)0bB|_p z!-!Mpl%pDkWGJaO+z%))*cYH<1mL}2mYL}7*%7tP?pRcTNu|%)XH_vU=n{M`*G%gWJvXuB>WRh0adt^ zX8^$Pf#1rhf{U(8B@Al~ivVg4Ya>oN#@i?!5GN>nIGqWwIIi*}Ilxi6KTuw=NLV*v$pFo`gxJXsj z!XB#Ri++hLK8aKu;7Z;sNrK-D*gJCYVWOy#MxVj=NTvgeL2ez$Ys7D+`j!e;^2h)y zf$hMVWC0JrHd6xy#x($P1+f5#4e)WG13ZCWLTZ8Ij3KAY$z@$YEde7HUH}sCGU?=> zSsW3q;$dNH&M?a#iN4}@KH}g{aI4_RaKTRrDhzlfGcT44Hw-k6rj9}eIgbujs%=$ z065J{xhSTQI(8RpPaPpZIi!`iMqw{;+sFj4Ir0=V1MG2yxd6N>nSMaE)dDEI66ZC* zYM)Xp$(=g@Klmd|BR1A&0SLJhbZSH`sMK}2$pQ1{S7XrwFnUmg;6dPRvs&XAcM+@{ zp#A`6S)jH!c;G1MBOoi2osA#JcBV4K#k~+OIqGw1%-v;X<*v(J>Z z2LI@<^lNp~J$U6s|Jnl&_^YRc?fkqoZnS_zv530DZrzFMjn?q?Ry)BaFa=AN{yO#n z=Mz|5`~wzsQObQJ%m9}I_1JEN<#NqJWKh;yDB_#&Irj+GBE*4G7=~rxPRbRACCHhE z=Y!sr08DM*-T1gUDoI13B*aenM!dT2sNucjB}cK z-J&X(eVipOIvj*tY8)zV03(7F;6-2-VMz4D)ph&sLqj}>jB3zCDr7m|V&=eQriYe! zT>m1RGN~yts(QIfi9G*a^a!yj*doAu1^mp@7}^a>4eezw%gmZ7L#ttx7KE3!7#a@Z z##i z0GY>^kYj>W({aDLo-J<`7F6vZ!EJX zddM!p>@&8nOiZf;)0mV75qd2{fMZe)F98|iXB7`dqNG?5eB-Y3_J#-4;9m5iqx}{v z5neT9a2OHaG^5%UgWEKcn@`)!S`K&%Ap$O_4xTV%5kOk$6#)j9x*e7%S6Cbvjw|7V z6Z#)09f(uMu*CpJbyqiDer(p%z|>yr%^Hg~QGqQ6hB@CbCD~^JXpp&7f!r3w!^#!i zf?2}jrPoz_6)K#7GTUB(0P}q3!CimZvE7y*aj>c-=?t2d)tYg?f1*{m(T3BO{>nV+ z^RSwWu?p~YltGqqG!?3t0Z3Na{${?CRP`#sM(%N3EAdt-1jR|DvR=yVsJEchPP|Cs zlQ0EPvI+|bkszrC;WSe`FkE*bhXTI8y8hC;4=pDPa_GhjYc^bNF|-USH}km7lH7S{ zH(#QLmUg(*tSN`9HI1fzt=rjRXn^+}oLZadzhFeJW$P+sF}+cbnaT@I0g! z+7o`CInFYV+njDfG8X}bfrmALlK@9b_@OYTLgqoRDWcYyXaf}v6pImVf;pHVC^;X} zSzL+q)%6$MeQ0Zk%dC$_4Nk+84=rM`0 z$ew1|XG{cDRd`$kQ0+=oirr#4F69b&pZZ(4nyM0(E)ap{#=7(1uD{^eymdg0o9Ym- zlZLlwp>TNedD}FTgwZy?(7vM@A}WHtCzNfMVknYv9OH7ut8k~r4ibAK8_E$NMMd0| z9rR|&Tt!m6Ky)M_AqGnx;U0n`xYs#?q!h;yBOyXcG6ncN!8njV(dzma-gRgcQLx)a zdP|6vc!irCe1fOV(@pML8(-=do$L;<^U!X5!LcPNvqtF(L&FaUC#W)QF*GP4HpY^D z=0L`wtyc9?zKE;gP>(8%y+)~Qm@v!1cTjZ8)P_^uxAVNM@BhQSYtOw}y;8sY-b=rA z@W%(w+pk=#-Ss#l+Q<0XXgkZ6Z(dbg3xKKui{6zd1(Hv zYuA(qdo((QAX>Q7+%lfnXE_OBW3K99l^7_cEKZTKaWWzp|Ds;1R>)nur6f<<26{Q0 zkSp;@sTw0FOYoc2KS?hF)TF;nf^b4yL_&pyQzhF2-w`fop-{F1%Gx3FHoRg9kJMm2 zm5SW`0Xxoj9_YjwV%ox5cg}#z*de zf?8e>!G4R-1sMgZwg_>Pwg_CQ!4(obwh@W>5Q1?^gozK5u@c(xM-Co&;1UzLdO><7 z)c_S#tZyTLJl1@Y?){xS%n7lZoI+HqIqFQ9@ z*cK2qLD~!*HaQL68-Xj5f)FjBw?NFFC>Y7z1X@=%598wsbGPv+WS`xf_+7&qZ81J9 z5_6hbzsEk<#w_hTz6T%S9;5l6m0rwh{uDHEY5FJ+<|A3mC8MC1N@VP)wI-2P1eOFA z2eAT9q9RqTNvR0Bif9}77}g*(S#qbOn7%}2ju1UZm8lm=-$SAxNhFd=gs%jKwd)*R ze`I}OISipHizDtFuNl-Se%gFKGI#I|v##M5)&{e|?GqY(0>?Jw9AqDO6%lza&J2(Z zlD-gh1NHhaQV|^B9g!;qp#TpVF;v#y`nHm`rfO{J*yv62ak5-&6V(A-lwN%-{_F?L zNV&{Z!TAEX4cIX*Flj();Y&I+ryM1g4n(J9m8ePCb$mA-;mVRZ^o1=6tH<1RLCTHo zVRwuD1)JN(@sNGi=YxA%^uaDPbMCcEPSm$`g$Y zO1fc+z^qA}pSvQ|4bXp5ISv{KPz5FDSXJSK1C&IblhW5D#--uba<|bbsCK?Hn04(L zk<^o0N01Kb=`%CW+t`ksNB7D{xVC8iQ`5FX&7CfD=d^phq|qB!Lk{Mw0%bl)AAzC4G6B30AtlJ1CC~~`6lfx*B7j!_RT*NBpsFY_r^;H+ zIRaF09`LKF7-a!+N7-C}>+vaPOdocp$#6uT;=~J(4EM%xvd`Nsz#T{T;3Ln^9$xFw zDNk(VjnG+5d=?;DK;(D@1XKjKkgKwHp;0kPMUq;MUa^Wn+2uehaht*}Fa}tDED}gz zSYX`=)B{fg%3fXfNV4EAvp6CAIh`4LUiua(hu2!EQ5pC_zZK0Ria*qulkyrK|J#i# z5C1It%>Lq_79NFCgy#eXqL?cez$xKW*~Kal%DkTxz+2+AiJ~ePIRG=@qfG8HAe19Q z+&IuKq*WwDg$j#k0e2BF56~!Z5h2bE(>@e5p0T?A$aB-z|D(|<_bGP93wz$(Cf~AQ z+u5gSW5{5)IGT4J+l@z_bN883N7umYlXY5blamm5T>2~fEbGz=D-u~D(aaP^WsD1$ zQuyNd9d(93)tBNr6`0k+*4Nf&$3SyckeXc;xOCAU5SIG zi$C?z)9m6P+r?d}a8(z7_cXiM&vsGBc_FPQLPV|;w4PMh5Kf|Uh2nC6J|HV7km7*P zg}9kW+l1U*6BrDM*8^~Kq>CT;*lBjLm+hhp;}3i`{G&L7CzhLG_h{yc7jtrWy$~I2GlA>~bt;DNNUP))I7QjVlQM7;!6211W; z#}T_i>JZv7xHyH1El1!V>~h2gfTbVN2Ar{awu`&Qv{V;wyAh|-#oDnh?iiR-UA%op zpGp^#<6YeCaxY!{J3t+j*L^BojI&+b^^PQ6{L%k#nq7>fi)qu1)nhTE5`nQspo-kO z=rsXzG-7a#R5D>GA@9OigES_IfeNKkOdv#TBOHaI=Yvmq$9Jx~s0-|gf;B305-F~t zehFCxn>aHP)KoW9i$yq5Xzr-BZxJZHXsB@h5*ekE z3z|HHGaOVh$v#q0Nktt5f3Qz;#1Pv?G9jS^2x|_qpA!j*!Uv!7c1qr5qEDxbLAHxf zJ45G>da-bSzp<+1?89xH>fD=^#2^tQBODN}11)!)4lQ2WiEvMe%+iR!UML#>y zzMw29iUev#xiU2EA?F~`DTDAQw;GCTh*VLejvGdKGVTqo8>wZ;P$4Id+(6#qx4ioF zy135&*Y~bHpZtIG@;fhm;NbUQ_Iuhz_r5n=Sf2l(bH8%-56+%D^L(wkSKlT7zq+xi zrlTkV?{C>{gL-K}QH&?wfM|D7A|M|@$__((KnrjH zMprpLx)!5TxYdQZ@aKc+HmRvB1S|WzO$2P`(cN5?)#y@4!4|Y&)Z57188d%6N2YY$ zrF3BHala=`usM6jKDei|cYRe-<4e_MwCtt;$z^=5-kHxFljQH?jwjmyv^M>fc_gtN z1m%QkUFxY&uqjdOln38}t5QaGkn4@97f54+4wzG1O^K-ht#Sd7S1dG{6a#HXu0X;> zLM@mB!ibt%jEx$~^w=_wTdm7o z$98j7IKD1r-V}m$06oiiHYP}#?(Y+RFNzHtqdWEiX+=TP6uhKB^|D^7R7GZ{LaH1Q z$dX$^8K6iSL8fr`xx2A?P>nAIhHOcxJzNE>%LNlW=z7y_#s|1G{YADT{fPUOH*uUT zy#z3@kdT0*4A9f@Io!`Nl@7wtjkSqA7ie-!+HMxX^082x~1JDF;if~1Mw4gQvhl;>G zwvlIHZ6agXVeGra?ds+r+$Niq&CO+> zw^^GzkM8E`i;k~N=8nt;qpJmzky{(Iwpg3wuu}_@Z;yR&PiOD?>J@5y8>czENkG3C z-*V80;oaY+WFwQG%RFu~ci=IRkx_^##O#0zNmVj-F%k-MG}8#vQI~_)NXa$KTC`l|MdrGB&mELT}g}HRju7k>#Y?Fq_9dprjjgV#PGdhF2|uIxZBj z<3UxY?hEa_0t7e&Wn-%(h>l&ycYWm@n>%X`U%OhHi|KMOo7J|-wPr9~nMZ5|FaRQp zun^#K5mXY2dGsGBjtYw$ctNg8(Ue^UFsoE{i93se78e6zOHjk$hQTC7U7{1>p$V>6H2tjnFpc4M_J-cEZe zYTlG5))+TgpHe}wX(yiG3F5DfWtn}x$1``VcDrTugqcVzO0UK(a@yaPyfeGbXGOZLiNIWj`(JDrC0xXVA1X~d3goVg(VMs{RVElEQ7RZwLFQRF1 zUm!E`@Oz@yzw5g{WhyH4{UB2U{EmDDhYWZq5K@Qx^WG4XrFX!m@;w5jwZ|bY+7&Oj z4K@)b1Y{Bk>Ol)f{0>GFA)|zykkAqMP}zb6nK)Nqt3e2YI$?C&q%Ihc2}ySVr$9+^ zaP=Yuj1n-pStc2EFLIrN%0<4KxGJ1Quq#o&MUI0wtne;)L=pwS&QiE_1$FnYphAn( zBO4v`8iH6kh_(Pqz}gI~Ql~(HdB#V+$CI3`Z{2pH5&KIXcgydHnq;}382?9jg=j_2 zN3hr>dV@`c4U+Vw&}sw$HdrF-BGD-V;1bV~xH@8l6x_jMDY0JSHAu{{rQx3eBqT0| zRH(4!$%qm@fbKQnV@!sGhuPyO3`1H4fgyDv#EFrQx^<3uu6)W{9t@zOo#SFmSc%ob zZ+fzA`G?}8E$^g7rgly8$YMAt=nj>*1jsH602C!<4x~)TDG+l*zz@_wGrGY(w`)!ev@?i* z6gx>(RUwMB3!JXh@=}KiZ7*C@T>CM`MZEcW=p|h1V39cWKhEQE@dFY2m7Z-qt0G<%4yf;Ofei&hWzoCqpI&UJ1^Bo<&VQB1YqyQ%yJ zyGD!+h&P@BKNi6!Cg=HgGow$Vni0p0lY!tbAY^(?$pHaBST*_0)Oca#rB>s~Hp$`R zO!BT-MdFYrR}zCL(txiHU;ubdOHd_AF zZaVN+Li!p5m(Jy=1q~3a<8bHP_KC`KjpP|T^wybgV}{S zfvlK`p$q^YpKuKXmq-B$!(l}Do0NG1TXhWi2pn1H3Fi+d`I~=(QhJDrupERIL};G- zn8X!`qvOE?2*U{w<+>-?Mt-e-G{+m#th*+*c@ZZ+f0Yj`iGG-{I4yxTNG&4s1BHtN zih>$MLzqQ%DA|bR3t9-<4XDwEpdHFe4ggB(g>)LxUv`_2(&o97;hs}F0<$5oG(;Oo zSs>(TQ3gQ(j>r#}XDT9cY9oIa*7`FYQG+HzCjn*Vl{5$`yC>E0yUzdL*t_?*{+;JOaQ4GzK7QtDnzwgjyO01;^y@0#m5vE<>%sGs zsL7&7$;ouNO-W-e6M4-(Q*jlWWxY!3v+5OcF12PPTnsAsrT&F-KX_^>muL+aF1L|n7KC`pE((uig)GErJ0!hZ88M-S{sAQK9jr385Lnv zfUUDi3Na#3qK9R-YGFYkeLx)-wFU@YDKgxBbYF9PbQIW7`ozr5mU=r02eU0^E=#+T zeclGk5OXKTIEwv~9Hk+%;K5w%!cOKo%)mN#}rI9H3Pn7GbNUY=3gTZW@`~VAn z^Xu3L_jLBIuf9@^FP*zW`a8eonnCJfFl2XZF?*Q=f94T8SccVD_sV4E3ml9I$EaCG zU%3jsAILMiS}anb>yc7|YaMeLf=@~Cm=NK0sc;9}M=qAoGY&IMLOwj9pk`R7M4QC= z!mr>#U;!^XOlqsw-+gQ<{}G!L=mVN}uCJT3a@VI!iXij2&AQxqY&Tc0JH9Su-co%!D0`)Ovh(J3Pb2=)f^;K9kufJ4HgAc;BG`0G0?FRNc_9qsN0& z9y+B81=Q3q0CuHP8H`FuStN)w3MRo65^Fct3XRP=E}hq9i6 zbIAU6Z02k4K01X&5vKFWvc28xZI0&n=wxP3cAD=zx|^%7IJP#`+^O@fI~kE|u1~hG zDOt#u2ot4Ns(gEIXYVz~XKzaVw>lHtuIco=);2lu>xNef^C&oZ*fdCWL zrQpAb3yW2?v6^45MwdPjY(@uKm7QlVm-R(^a_82OnTESPW~M6hxQ*4^d2BaVUv_+D z%Ggx4f6yd7R=2kCGli0RQ-}P42|_G-{|(^JwTk1X*&LiKCc=jrwVDDUjjcK zhecuOcXP$E?pMi2!Tt&(f?sAS&Z%1#l`ZH{kx%jfFCcFQvk6ybQDTAak1J3}3Ns+v zfp`*pv1GMKUlFnP0Qno>QC@X?24#fm7S#6!lh9gjb1o26-yGqw54KsMJCE<-)tBCV z2GzNzkMh$|JiU`d+3fjUpGXB{26+4vvX44}Mi;U&;b#cYr>MGK34I^@TvQN96qgBI zlJehu2Ic<$l)e8V_x~@xa^v#+()S&FaR2u%e(d7a`(AqC%g;B?edF2pp81gW2mF)& z2ESIf-Ymo-!tr)zgSvBqy=sHj2=ERmOg#(em&zNV*hbmHw5ssc=mZ9EfT3LDMpf{v zLZw_NQCN#41oR_`)MjgW1CM+@x|c{V5!Im%&y zM1qZsxWI>roFbJM#-J(4p{;Jc>G%jch$5>)#10qDSw6SeVuVC;$-W7Mi~ghb#N>#u z2MIRrM!;~GUYu1XSm#0{IX%=P2#%1wgF0WCP)XMSmj+|1MhMGvz|GeutB05pL1#eH zAaFp)q8`{h_D-iHs&a0oCft{{1?9t*dO3QO1BU+qU@A>E;1UF z1aS+AVOCFKuEZ9mBMDcxh^b{KF_c7~3~_1q$F*@Q*|x486o#7Sk>9CHXAPhDFPN6T~kWg zJ)|!~G%g{r6MZl8&=z%7)YnP!3$7;NRdrstZorn%T6J0 zaeWD1wj#8j-TW2Lt`?jvLr_+>0pKn@Ijt{K0wU{PzfgtP$JTjI=qA+NpylY=(XY6B>^x7vfLtT zN&Oo`U)>_SmK`BBZ+(@T%ofYsBJXT7Le2;BTo_A+f}9$Zrkp*DitUH(k%?t6SU!p| zsdZ$64Xh9Me1Omjn#S!HlfvlGlT?e8f+=!1$bs<=2oV#3fN=pyPbA}bWs$>~2aX2g z%<;@_;LJtcHHydpk(zaLt6K!vG9z@BM4i<(GzWuT&9H`Bj8G6d90>$41YZU0OS1R; zHJMv{SrW{GzLMYt5q&8D@d#Cb_mGiGSq(=AW)~|X*?k!ya0Hn1a&#K*F`^%=ZZI#?Y2h~~-0!|CC~5Z46`WByC+L!6Ze zU8I=$V}RE%-wA~{c{ECjQ355&#+8J#1acCrw+r_Sd?4r(8EA6yw*A#Df^FFm*72#7 zQ$B6A-1c&`l~04a;^p{LoXJq2;hT`PWlb=XE(Vqd61liMe8fQTyI`Zm+;G0|#K|G2 z2vfw|^3P<1EJK)oNvH4w92+pG6QxJK&_M_no&uH!MiV?JCBI~jeP$MmgCH=n+!#H_ zUfm+xmK~v_&eVB0w|kRj-=1$Vha58u0Bi{^7)S$Q`e4&WNvc=4>lQ{da$m}UbxO4vO79qFn2qnd&R%vcB^_hR_~k*W#---wHl;c@@e2_6QzP6t&vc8hTXuw`DhNt) z;7`4v84ue+1b))H1+FhM$H~UP1jh$s4-?60fU%U*j?ID3gL{MT$r&h?2rG-(!6)Sn z@WZrVb2(Plr^U|Mm|FzivLlqBx7vpdy-{=Z;WoD?0ZP$Lczux8VMfH)6p?gH9afap zhx;!#3hBPcaD&4D#!OJc=F&y-AKQfIEz7hDb6VH)YX7#ZFH_+MG0_yst7_;1L7U{G)p@YKNx$v)gQ zIxP49r|o^`-nD06ZCv@;%OAe{xtF4Y5A6Tn`{j%8xbMd={P~41I{yvl-gEXJoV|4B zYqSyn@UQx7b!(n}<-#Pn?26$vg>1GnuzGdD%bk4Na0X)zkPAShQFs<`>BSqt7Gt*Y zv3QXbO|y{TzI3sVa>3=SlY@>rUXho^>tY(%N9%2~E6?ES*6i2_^J7jMTShpk_v#KL z=39&qPY4HuouOm^u-TF?od_}DXW;fjswCGs{AGp=2o0ZFoD#X# z$)ehorf_9V_l1qtFeIv?rqJl~S9KX++iAMfG3mmSlhI<^Gilo6pWxm@)Ce@2+zzB% zSPfA2RKSoH^C*tT>H*ybl8L+%qQVqc0E8eYk4`Ie%Y+)DB$r=An@Fg%y4yUoLxPf8C$F-b_iE})(XxK zNn9Pbl%2yJgBk)h0heh0g_tld&v>>{o5w|r{fUVp)Wd0naU$`F30u2+yK*6}ZjFwO zuqU^8Pe$m~g7Mfh8(WNU7mI+`hu1_cF-(XeYK5k7!gjjRJ*(z<-6gWWb4U$jSrUjI{pc}T=<;{#6e~V5|e5Pp*KW| z0Dc$p6KMSEay4{t-Ep9jP5xMo0Dgfd_6csd)!)gVihcX+Lp4u@k>(?iEDQ(qG3v5yxUjO(?6G?X}VoQtNu$P5QZ(-`}Fw z+2ujLBt3-n_b|EaCV;fE8rfbe!5Fow8`Ig?*Bjdic8Iaq?B?-LI7)XFiFs>1YbNJZ z=%7_An{m>}FLi6WoteasA;fIq62aMmZAaJ}e~6*rbrTnpbkI8C=a2=#AL2Sr7>s`^ z*l$2I={ZNmTesw?fw-*xGO2mgHkKkq;5V)4G@!Z)7(iF3bm_G4$CcE;1L z@4fA`ul``0nhIT!#x_B4Ml4c7WD{e+{d<%nB!1E_+3BgT%;WkOoeXuibFS#-s&Nb% zqsFE}M{RF3MN#NZ`A@3TkN2$@mW{S!A22==>)hoF2^~i@D33VVOrF&LnpTn}Mq+_)5q{FJM@$ zq?FGU9r9uo_65#A%Vp;**!5NI?qgF(A)+jMt}~#pqdA#wF*bpAq{b$>=Z$A(u0VXADW?q1ZE7mGNX^)E1QHoqWd$03^LCaXvF2 zfIK4TA^A$8S^{UZ$<#rc?3oo7uvJBC%Z-gHDFxn;Xt zvP0Zk+Y4c`LMIUE5xa_ivMWa5`s(4kk4+(y!)VmgXVa}X95>ftwxmP7q!apO~ z>Mh4trOcZ;<>F~?*=+Q;Im1azY|K^m`JT?)8&)^f=w9@qBh3y++8 z*O~9&gD1t;qYu6H4jqNIK}P|QjFZcxkUAhgNhv?9dO%mXcEF5tJP`Gr2NZ0~s z2F8t=3*hyFs7LS*OmpHPVl7T+T&a)*30=JaBHJ$ex?3%kh3vsf%A9|5;Dsd30ItCl z$~A`4FVu=4_=))w@|zRBqhx?T7DEw5g)Gbx#1bQ)yaPZ3u$LyfuOS-|NDCy{@VL{R z1TYzRT%cw|6(OK7@(Cz$NZ@c&0sF`B7dSq#qd*tRk?#$oXs{0`O)xT2I|`hRAQJKX zLpyno=%BLObkjfhq)*Vj-FiH_H=ELTn0esJ1IWx<1jK8`ptK0>g3p7|2O=dxuDVZ! zjOSU%q)2rrIcj9Dpm^cLKvhEkgn7FN)k}f2KfEuJ(t_G%d((+55)~mb zj1z58J;AbGPr)X^b$5SAWjG< zHSy3{HmIMBP4d_Tjs!DB5;!K%n&czOE%0cV;8F=$&kC165J9G1RdwpIRYqeOm3tNs ziBUEXVu*;~Qg;teBPN2d9f(%hqY#Z4u+Oj-U;t*nLeL3Y2*iwsJogwKIDkP?aC_vi z1sIFCHEC6#pHd+NOCSY2QhLBz1?rk`{bVIWEDD=gz`ZoqDGiAfrO&{QzS zKpcVpk(C!tBS8f6|G+e)6a}3VauoM;j~}a%=Nzg< zzgj94A`VszY8muKmBY@DtFUPLxnho4la$;XK5mQyD}fgeC=79RAz>6+PSmKN^nr^H zvQDbsK$}C!&dv;>V8n7m-^Q**s2!ajmLNR=0Y%XP@n_D0Aciu`=g?*?#&CZMEd~lK z;A5Cc@b_$4gqpy}A2Nac%qL_9Nfiow8yh9X8q`$@AQ8|w4ggS3&{YJY?(HNW+lkwK zU_5sD&8d_6Md^*J3rPc~8BEj!=8@#Whe|98+~8d#2g0j@bBVePNNd=vkS8*DwC(Y1 zU<_fab5g^_#Y+|htX@T(s|*nkYoZ)*=965lz>RO0&|d;{0?{(FNd16RiGcre!vN_> zM8i6@rsxg?#5{OvqCvWF92I}HUPuqCkZQ31HtLTf|TL~ z0v&V}*M*u!se>^&!ho~lO9BNJzDE{?V4m^w?(K5eZt{=+Ysi>y+}ZQm#!<}<2g4i# zt*2lKa5e<`)D}iK$N1yOkwT&fmJ5pq$+h8QGI>vsbz#{Na6>*upJNYDDuvF=ELV%R zh2%g9;~1M(#m67hO9|@9&?hcKNB^K}l2J#JcTRfN+h#LBTHxs-8;Q}TnCCCN01 z^{RzJ6~how%~hs~0Huk70Q&K>b48|6w+h(Mx$DOGKql6j-weGfg$(2ah*r`S$ zIz;IWW}4F$e;PVo*kCAS;X((`=en9e${D%+A*qKC2VD%fM;%ZV3lrtUoDC$B-$;ED zON0LdO(;fQN3bi5#jvyC+wbAN#})=)O~jN6MGs)?lg;~D=l{oh*Pg5N|K5J-{Rh9Z z|1tFcy!)BtYK(ZO7s%Qg**C_iaser!#?v?eIK2 zZfuTyl8NbM9*KhiQpV;YLPZ4>F1bO_nWe@JUXM5cSO;Dq&j&=`xjgSwZ-0ID*Y7$u zRvwuw3|Tbsusx?YHhCE*i(l?Mwi~OZ8e2LWBJ<{`Y)B)@wI<_!e~YnYiG#Aw_ju+O z$7fEc5>#|HY`SB@0^4xQZ6*wk=dlp}i;?^+mHn#a6j^~BL{)CBI2~0vBJ)))(Ca*0$?+z+VGD1}8z zs|!d5AvtW6$`n$U@V0gy-}Mz$Ia!M$q$KJrm<7Xeegf3{@jD+lIB2c~hs{aN4x{?dDcF|IAU4 z6|Exr3%+afR=?AuIMt@ODgM~@+nZr+*nZqls)NW zbSe+om^21cufNS%kX?w`=WSNz&ICC(S6wx_4T~wGQzu<_2~V}2n{HuIj;+LFAKcT~ zyT0nE@ogYxVE|fl7dLA5AYO*s?7R%TIrGSA;2?BBY_SM83LM~EpiPn?`GQeEc81IY z!7?wYlnSRn{d0ZQzU$a5b?X^S9CsKu7F*0+CMBME+-6tON^<$_mwxNuj}I>F7cTnutuFk^`G0wS@7(=o zi)X%8d)I%Bm;m@Ei6l^IerPkO&*;u-Gtw{SwBG5M$r5VfCi*@nE`~W4AUpN}chU+{ zmLvnpqziH|fDwR9^lG6weX=q zyGbShc4Fd2-1=ClF%*8}8i8^p=m6yyAJK%njn9zrE%V`U-jUP##N!ioy^XJ9A8fO? zb{^k@5>e3n&$@O^VZDy#PnYraCjD-05!+|E;jiN}AS1W{`6GuYEyUx*#)jDo) z=uxRL1T9{&C1Wt0WxYSIZ=((>)Qagj%06#1L*OIOqRhcI1R)|xCwQY!m!pUsu?tdR z5&)AYvS1z&bHufgIU?<7lGiXnn~37@I&zTSVQO@0hjrcI+#c)OaP*QC*#NCU?UDI_ zfIrDH$SsAM!#4}i&5~fR=w3C77}TkJ3(BfvtACNTTVuc}h#5Q5Lim&@=}7`aL;$q7nl>=KLuR?#-%5}7VM zMt~_o7YVgkPRK<`B)b&pqaj5;3RH>^RANA&Q-rg~H{|vQ(kO8O89}!Rui}jr(Sy5< z&XUoQ$S`WchjeoLL6DYU{L$#L&)clcokv%Y_<`m>{m6P8&YdZv!(W_{P+MX>cq;%j z5Ddcq592E8P(>g0>bNTE*U&l0dn}9IvydB#`N);Zr0vK(6aaX@tAf1&f1NMrNhNP2 zdC2FhA_@fNZ|6a%K*5HI51X~2#ARdlY+g^1fL%kO=i0CNK9`mgA7PYiZ&tz``(T?zxbyf5 z5-i9pLgo*S9T}fK8^=T2oU;hYFoE^Tm&$Pw4&g$cv=kr!(oAp?kg{|uWF;!Z(!oc7 z^Jfu4A&SO2oa9DO3`!oP^EpX}79h_pRb4*Cuh5G?7Efc6hzevTiI^#HDH%j}H15p9 z8LR!olO%jG8wEGVKEQTUu;)~uBVsj~Rb&)FG8IdtSFN}pSS%>{e6L*LjAo3`01CcB z_++UfgUmxG$0%gOWc5RmiBR6)A^4D7IzUA@&(L{dF{Ac}-^C&%E^xQ;IWj&5+L?6o z+iWu77(KFra@c1-*k%##JiZ4dGO*!Cg-tbo>r<@OXpTqjf<*|)Cz38j#LO&`453vl z`yz|!mXe}TN-FRygH$N<)A8DWl zP$-t+sp0T;$|ksi2u@%)f?!Y+IrsU_qq`}$|4qx$SO`mqGVh5wpMf+c=Xqkw2%v0p zT^{=Ygo9^P3MhZOP6gdBm^}0w@E2u=Z}X7Fk;jN>@@qRnJMEp>49GxplrGxrYkgQx6&eE*;9e{lbM z_ow@B-1qjMaq&N0{NFDA%EceP_J>#g{L1fL`PnPqb7gYn4OenkKIig(y!`u@fBEtc zUH%)FAHMjt7jIpB@ZxhWp1JRj?)#1V{`P&}cwg4pFK!cSg!=Y`&d z*Ih6!eCGLofBv7I|GD$ucYb#M`uY6%&pr2-=l;dHUp@D(b6+5oo_p@>*^i$6 z&9gsx_M6Vu&%XNXi{Tvnvortr%m>bV`QgZ1_FTL>6{=vUJ_(uotKlrwT?!iOXK6LFp*B-kTU#nhw z!L^H5|IO9kzWTna@3`8z`r4}xF!U$-de+%jo(bFed28IlDuO|hgqv6IE%VcMPkTkW z8Pm9~FmBAob+22?Yx!)m3eo1h*0^c9ZOzLzs~BfvG3)27eqGC@o1rgUmx(UAMl#Qh zo0^+xURPQ!kSkbN!K-Nl5{f{E=LWl z?#Ro_>2=lSYMNCJeA7=#cYbmjp`=+&rsp8B<}-hF4R>h9{UuBmH~ z1XN1~0}hTYId%*V!A@)-mI;sqh>1z!mDm{BMoCy+SuA2<;{awh1`Nn1zx`GBy{ArH zz12tOuIoJ3YgkYB)OT<7+26Roz5o0F@9iFpy2I*M<(pSIw&>ufZ~K$#%d*V~mm)0B zzn+f_oxsDQ`jz=+W!OB>!kvB3u6{+fnT=vqa@}>NU3YBkR=+&otVXOm7$)GmX4Nmt zH!H&o_h_~QMMCwZ*=8Z9P`%dQ1x@8J9bS@eUWNL#dBEA)t$t~?83MNzTA|m4sqS!h zQGIc~Ss6C+_76v1$E$uxrrAA`0to4rop_+{MDD!$qI|P541%D=Xp(BxFU~hB!@9;a z9nShj^^3C2V-a+gFW0A<)7{-Ot6!LJR==C>9#5u&PW6S^<`IY^_2q;9fn#=pgX#-% z%`2^^J{aloK_{&~Ki{mT!)UsHU`+N7s$Y<8-XV^m=J|BcKOFbFgX;70&1$wBLM0v^ z7^CWQ^UbPL{bbPH_tReWv21e}{)W{&@AT&f_PkqtPQF=nYJW8MX5(a1y`67Xc8}uG zsB7-bs<*PuApuZj*Z`%Wy@TnjdNbdw*7yD-?j}8Lw|XPrtn5DUJ3C!_W>>Fgn}v8? z8HUVGKZ>VE)ob}?HK1m95Qg(kzj`&_tn41|54_P~cu>8PZAN5bwPBCDMl=EATfLlX zUTxST-I+jaKCE8KH!Hi1&SA3Coe!!Pv(3N|P1UJ;qv>Q64rbL0`DWFrp4X2Dw!Kq5 zpKTTfaP{SGI)}PAN~`Dc&8kyj{X`n(U|g-{n^mWF50BMxZzRepzmaQR&oxzkJ>RVCK26tD zel6R)!8ug<*ZF4Esi(9(m0!&^Z?N7}ekI?mI`xz|rt-`AX4R>u+$)v;H`~m0Y@NKM z@~`sEs#8z-KPtbJZ(gm?6AF#WzsxjmGEh|hMXq_B#G&$w`DWFrr#uLi&t#hY1sWEs zb1X~_oV|Ic`sRG|YDidM?%?pC`lf92ocN`h=LeQC(T~DT^^N&vH6#pOcgLP2)i-3D zht%b%FQ4x2?e*pdi|Xt1&1y)DAywCh!*R8pZ&pJR#YZ#uFz~CbZ1XN5SY_D4NC$m? z+N(D6&FXh|(*8(;G`QNxHg{Ph>dRwqw?FE4;%YtLtafB)VegG*!)~>fZ&qu}8~gj? z12e8Zo^9?Jgy&=l_9sy?9_%lwugf>9P95)ub356Ks^6GzR-M`>a6+Z!LG`uSW^sa* zVSC;9phL8;`kH+6YDXTs-HF*ftiC$ayov9vd^Xp-4w0?=alTpo?o*U$<&Uz>8!*kv zALg4?r=B7mEB`LvtUC1+ELi!2Z1V=%uJZf&=2fSj0M;tMmv2^`dW!j~{M&5v24t%8 zyZL6-si&x;%D>4stI2c<+^PIdws`~jQu*zCv)VjPp(B;ws#L0UQQ|t7i4DJEL&NIh^iQpU5|>sd!{8CNqe)t6SM-!pVrWGE=qr;b^woKdin# z*G$1P&0Tvk8_vQ}^?mtfH60H37gMK~^s4X8HbX|ex~|31a1if>e)T>1W;Gos^|QPV z_px{9o0Z+hL}~|yqw2e|%>W`-K5}1o`ar?r>O1qzYC7yYfwrsd1=V-to0Z*TO&@hA zl&HQv+bpcl$}q2oaAF*L)wkuF)pVEzyWYYN=GC|6o7HrHn5N$k-A?r_nP#fdb6}dv zZ%Y3EvC1Fc*Z=!V*M9Wsr?33hl^d78=F%H3rWZbT{`=1TRP`75D}UO4mUqFdu@v)&!1gsK&a2*poAM7_C_ij;hd)Mg_1Asl2R%{Je%Sa4_-V`6BJn> z$OxzmqkI+38LIWspQ4gcgbG%QT(AlRu0;7G>Y6D}quw_nO-r#F9PQ`@gfWaCP?AwI zEX*FM{4Ta=ft|r&5TH3m>?&uW+&)(~ek<)YEgz z7i|jCN9d72bPC#SRpm)~8LCT^p2%~EScyiB4E1fG@gU?^%;_8=7SdusA*jkhdkx_N zqRnKdY-;2|tnw>B9m9qYkKwqyD&)REtD&;+Ie<{yQBS)9Tc#T zswHYP85APEgtsZ&qNA}$>hhqomyQSfOtzKkF0@=I!Itta%DK=X1NJrtnqFA-!?9HlhGOtPUiHRd?F!qPNA}T8)c?13*;3ZRy@-ncde8lJh zz#)H5_(fR!r5I5JG4N86(qlOylSiSS1?pWUF++Gy@*^S?i=rWER7!s-QAE$lmvVat zihS6^AuXnoS*lnOmvdt(I3roXo);$4RS9}d5K88!sRT6CH0?|+cQ!pdC@@V)osr;& zPQb+o^nF-Zv>^&iHOs#2f^B8$Y#q}Wl4-RU6t5*b5Elc|A3 zb&^yZdrgoAR7nG%7ezb@Ezz%}WSV)v`~}_+$U>l8D}wU^Z~}nyJ5+hR!G3Z2x6Te^N%%^8D zM)px4A_kiVJD%?Ge-Z=&EKYqlTPI$fEHwUKv?!Ue92}BEgz*`U7SY$B&;?p?rm3Bv zrAgs4kSw%dDW*lMG3M;!Z=fJ&r&tU2f-?#%mrpKM>dH0BTca3`Rd%iAU6>~G780mi zsc;&zE^IjaMF`NTkeB^Kb{e2U6v8s19DB?tVW5U}gHA>e1D=|k1X9b>sA;*KTr?b{^gv^w+ z9;M0hE_{=D3nf~pe0ErW1_Nuih|Z{JFyqs+gHx7(9uiZOH)2THZdm@pF2qSk>J9&f zx_wOL(C1T@r|`RrBAak|CKeL%lhNWZv=~2l2xQL{YJiy9Q;uEKRlv+J{pAP} z`W8ygsZ_?3O0B?&tmRX%PUaV)ge=uo!<%-(>9C064Fdxqh3IzR$H=1Lpl2$wy|YJh zevlnxZ88(_d6+7K5#{`let73uyA)$CuI|}Om1_nX^!Zxz$1(7%9o7eq6vp4C6|}G~%Ad;K2OC#=tR$ z=%xs9a@6DTkkS|BISxdT*_PGEg@g?WZ&p~I1l9z(hyb014u@q0G!(u9V4!@Ph(tn3 z2LBbO5!5yCQ|M@jgMI`$7J`nlabdZqFmcKK>MQ(zZ-xJlZ+z_f_h0)*SAYHLbFOHY z-*ahp@vmI?$@8B%f9~8@Ro_(Ul??zaw~udaR8qK-L|QreCuyJ+cqIz}`J8{w*Nf+$ zsXb%<#v!v8SFZ)(mh4L0xS(s|-rdFxhKU7$CHSS%$I{mE&5arusxWg|tOC}Ff>7os z_sG5L%$2&O52UT*8xOW^74SVt!4dc?woQelPjj~g zY{NUs66E9_i_FT>w%s|tqHN1nLyAhwD)fAscrIWYha~r=?0%B};1Q4A<;}6%$eb6j z59clWlY8Wg&di8k+Vk5wzVtxb*3 zfNj7Z*NGZ7K47P?;GGZ`kpIRF7~&}af;&@--Fi}^Bmp0Z7>CyYuUyt^-#Wgq zId&VMiz4=|4;I&q?9i>g=xk$G+F##3KCf)c*8UR$#K#ne{S+}$z%~L?Yu4nSVXg_9 zaV;_HxUN=%s5}*2mew%qaRZt+>Xi^>=cMCWTK+b&eSB`yx(&cf0qgSB@cC!TguEtE z0oQK3Ex4kShRx*)!Z5$qqz05LHuow&7M9;x>6^&badmTEign5ZJH_i1ur4Lt6))j6!|T0;cc$Ov=G zBCEsybMItNDQ(~O@|!ni<|bOIfPMK=|NJvE^UM{LWp9ww7=F`(ty5muDcGxkb@_VN z{Bx1HS=zcg%a3f#O*M8ZV!VHXRV!c}B#i5GapQwWIeK#czf$?-%FW-oaRdJU?xl}j z_~CP(;)6e3KOYUZ?h#k6vy+xB|K^Hz=2G)O%7ds;lUfdoAU<@siYK1@12t`AYf_T^ zq+3WC6P6Gi08#~_-a*2iXgRAKj#P_)0?A|f0#Ob?W<4Tr0uer{_EZs)_93tX6}seF zxLQ&_46iEuszlm_xbi=Rxbl0?!88jbfh4>|MoD5I(9%lWm!yzKNLpxjMF>GTmi#G{ zbgC#$2GrX_V$7fMxClrBanURa!~zI$6Sy-WIYoY(Bsd{_<>v4WR^yb3i?S8XYP!uj zkbL6eiB_|v&C&QT;f!?$e$7id%L5d&@4q+5>$KBltHg_}NU9f!s~L#{GXeka5gV4Q z2$4UsXJLxc9b8=WE%_=@JQAL9iFi^%011c^yw2o(%LO+v=h+cS2C zY?F?Cx#7Sxdyu}3~atb*)$1t(WfV79~mUSgi)GscMK^OViM#* z$Vo|Jk!^t(KahjaibOV%@QWpM@pnEP#h>`e$|s0+lX@Wl4v2vqgor&n+7XpRJiqkw z{bAX@_uh!EFWa)U*_6kfxrCY(m5^3W6UPiwI4L7a;%yWjNECnypq81)eG2piR8Ayf z4`laZ5+$S#7#&hDMjWyJKzWe?a$t9XwiBWNcXUtw9n1DT z_XpX|F59xT&qZpK$yJiiBR^sQt0P+nPkl%dmOZ9XWWQ}@47#t z>#`jstBlEbn0B)z^!c#a2(?X!zG_5*qfrCc;Wklz(8z?4H<_jQufPt`(Qr5k6Ujq^ zFJa$|$=#)RqT z@5c{3m6zcWklcc=j49{(@HiT zOr7xzTecs&@y>g)9o6N_vpX?9JZLbTTL+t(paY4iI!tu(|013%_?AS|@Iit9L3jY= z3ki5I%pCp!gWz%8)@%(;1{>;2L4MTHNT_jB;5-W(trj_btX0YhOyrwuq6lXDC)lB_s($_673!$KHSS-QWDiL zHhGCkf=-hofSfx314+s83%E>x7X#M>!jezqf(9-Kkc&Vm31mLXUA*KbuASun4=T66 z^41$}?%w#W>pybs|G4`5SHJkmYc4-^>02)TR~P@c?2FNL+aZYRC>F@;g8Vz1BlO zGH)HfMA?_+_*7746$?A9doExfh?cB{e=WOLn#bqX_iS~6e2I=07k^EN(UHBk-X#w`6qNbZ>Ea^68_3fPw$tlT5q%Z^vmpbB+CUAs+!no_V~wTQda z*eoFeln7|#a?+J9UfDW+?t^VxBdIB1TW;&mJr#QeBYhz7b*OsI)!KvabBsnpwLgERiw?S@26Ig zI1ovDYIR7xk}jvhMARoq_3;ToPHG0J?EoJ}=z)JiTn&H4jY$n6g(?NEBn?v(zzIlE zWlv(43>*1B>O2Tkk%~%?%pny|t$IR*EG0g1l%z{Dx++AKI!V!}CkD=DWcWSB)84gv z{?wTr72v6)DkJx^`H4hK^cXE=p?pp$4T>P(B+5tK3B^>DSddDArWeov2n1-nh~=WS zX{UtX1vG#T^U@6SZ#_K#m*B~;?ClTccC<4t@YcY$*U7J?elPb486%TY80f$W@>7FP zURC;#06w~|g#RgQL{y$oB-lFsF^OKZgi~m)rBI5@yqhkcT$Lcc?Dp+@o!vhqF=xqZ zj~7S7(BCgof=Eh_gfZbnU6m42Vo0H#&@YSZC~15tuY+5FsRfe)#S$bO3274-C;CVN znWR3AL~HR(R5>^L6oju~`bS`#fF>yn3wm1a!*(1oM%VslHN&}z^Na@ZLzdJn4eGKn9WnImx0x@`#Up`C}$?oW%A_STDHpk zM>q*kZ;0n_1)yUH{*%3@svJ>oJ~o(0iG}zICGrS4iy}Q+IdLrV8muq^RDQTL@8o;i zp|=gS4n`ddexP1d;Juj@xn;2V3B66mU&?7oKqkxxPz6AVDcd8(MPVideF2F{)<25q z3DXcoaUFIM;p~@TioB)yf!te92UFl%>a6poqtTek@d9rRtweU^^5@M@@P10FzAw$~ z{97L)qvEKy?(KGaql0;onaw-rt}>gSaDbImCtsRRY`isIxurH7*V~&V{UL&LXP((0 zk8{V><|p)ZNxAK%xs`uwkxkOoE^>4f?{W<@nyfLG;oG?PM3RXG^ zmSUuba^c9ITm1q)j*tb(O@*5YKr>-yz~K=v3+ZlLMs7De;?8i}5s`bm637myW1^NG z#|JbUNptY6K-0JcsjBp{2%x3;uJ!FHT5;|xH4AON*WHQwMGmk{iv7(`7?_eMm!iF8KXCDz0ZM?s*xttCe+Xehs^$XvC65Xp#8 z5=1f@Ky?f!Xo(~Q(oUe4xsY&XogJE0+Jx;TOmDdXQcFZ>L8ba|FdB~f1qLV|70f>u z8KAODY5Dk4vAku(42fOH2B0?P39N?R(L82=r~_#_W=n8wcC*o@43glook)p52nktJ zPbehhPeL0cBXo9HRcRZxm+-jVml&4AWoJa~G}K5eAuT0!x)V%R-I_h=KIfnF^{)A6 zwlE4PUALvjEf?x1J84il88@vu2^H?aCc4pK!>v)9M~Dn&L|AVUTo$5d9$_R9cz`h_ zOp*cugbmRLT?h_TR2`tRL7^TPy*j_Nz(Ixw4!8TF<@c>qGEnnTcXr^JqXO0uM#);9 zdn_{hO51j4NrV&I?h7@ZjGQ_&jYTp^hY>NG?E60LpCy2|X5GdI_+WYyqWD&$p5ixn zP16Jm!6w6n+NR2-C7h6L#Ch0rOWU`-gt{%acN}&EDK9f~v8Q>X1AN^An|n@nl8DZl zxpb8i)dV0;nU2wNxsTW5c2p<+O0hc(uI&c9tPZW5+}Nd-hFFyu!Y~;EAq2mwr?AiA zKe;Jngy2)ft1^h3pvOa52&{|=(Gz?om_RwYply4QbxI)0m_`c?m8b&NiF#qyocwc< zxmnt}+ET?!vqFtKhf+HpBha&3DBvw^){ODFjF-UUrf^`){q4! zt1q3(`d5b+MKg8{2p9=kos1;^h-DubOv;+w^qX~%0d+2EAjC==ac2oD8$*;`V0#ku zRoi=~uPr)>-zhRg;%IXeuYMqkmC~NI54cdCStC#LsWR}XI|#WK314Xl%N+FwlzfFk zQi(Dav`|ov#T1)ashtovjma$_Bj{0XT4S@P>+(s$0 z1>J{B9guVZPi2unl?qylHuZq)4$<(4Vm*4013E$-PbU!zuSbH;JMlBz#wQ+V8)+VF zn@{#_b7z+&kbU2${d11)EcdwjqO;A*vbL@6|HI1dFTd5inX3E$&tCnvS6^`D8!kVo z@c;kt{I8t9aqjEE{|_I|{eQW2Y-D?LC9o%TunOaIDl}K1H*-@X_gJJi&6FxHD*oIc zNujtm5Hp6mmI^^A=ed$;BW=r;ivi5BsYs$VX zh6&182#$q8=v3yfh1!X5! z3<~H|?$XR8(v%2NC(sioHXQ6JMMyE_Lk52$Cq&h!<{*VgIxvD-ib`w(J5kKceAVX6 z6zdeu=TxPzfOWb2Q|__I%q(r&o#U_HoS9;q!dY7<5{m_F6Pm8IpN$V5@z}j`bL=)W zA`94;8?4-85%pk*J}4+hGS+m^q^EM+;{Xas-loKTL;^zOTBX>GOO1lk#2_|c+aS=zSkZi@Q}o?4~OS-`eD3Nrs( zq`J7Ybz8?@vpI62F{93dQ*qG(*5ycGbB}z{nOP1?i_2^szv98Rsam&FWz+(;<=mj$ zcXd}HJ`RcQ-Ympch^ zkL;CTg2*d^!>I*kJ)~lz22-_}Hhi~^(t*+9?jlGc2@{qS1ll_Ost4M(E~#6$VeWMB=4B5rqpc@VMi&2o1LIn;(L8U%qLbRCTM}@>EK? zfOYu|B>${HE8PA?f(ybi%5&-v=6FHVtAj*@?5fcOnov(Yx$~4&r`kULvIkqIZUv`G z*afW1Zz1{TLNl|Zb*uaT4^?iz_|~g$K5=7uUFrW_^{>3|^7ztU1pEK9=YRA3`_7H4 zf3fmI59j`0>RXmi!8M5>Lsktf=nBL_?wBy<%c{B)Pmq#0YB3_L#Wd76ZG98D74UqO99@RsHeEgyC2@P z5Jj)}msr|3DPSQnM$o?!N;Z*!Awf)+5*Fm7A{0PqfItY$Ef9ZT2Fh+^k9g+M zCvD8of>|;lF2n_as!P>kD7Y)QVAK}jmPrUIg7#x3M8Hvb(HLYt@Fy~Vz-=k=^C|vz zQ&A>_oy~y@W%>LMU1bbOHVBMQMS%j5T2uR>Zw2wBd(a`*&`4Zh8VPS-uNh6NnKY>C z;CG-{B1|=jSrb7r0#VF6$u%$=wJ1eIC!k6Jg)#z~+!O;%k0~7pxGE8@6h@p_N0v>A z(2;Jmh;=eN5!s&Q-Nk0llNei-Ms~YLV?8RQXCfMFK&eHH1#%?Po-9QV_#TS_fVJRD zMB5C-613V_P!vEy_6+2mg+=t1+!X!Asv=`g*hVZ2VBBFIgruy@G=>RLwAYAl0ZJov z0Dm4~9eMzkHZwFr!%svDg(`m}_n>2P{N#;WTj2c|ZN$ocxY;8hO$&SFEfB=dYju{5F8(J`D5&dTP>0vbR%;i%PWnuQ1_C+>bP0}G`i2IA(BGq;R*JQX@ zdF=2q3kmD6+UpuwSwZE$@ytCl|8tEB(LS0X274 zr^p6~j4N}84&~P}QbyjlX!3Q8DF+YJYu10X5F%w*iTHVCh?>gyM!Ah&Q^k- zOQEmKML8uBwA3JKMt+mbGE}Z0z~UHnr(k)vziFXlIn@TC9VEk!u~S6USQLhtA{YrT zA!@F;f>JyvvYf(0D3zh4D3R9?uUAS5S))RU$wrA!CSq{7zL-d$je0RGES(Izd$4IC z<#WC|s0l=mj}E3q+<4MhseqG%l-0+s!zRrTijPk?gS|$1T)6$5z(Bva zdEsSp0x<081XHM>T#?dAv#0izg=@!{@K_lvy}bs^RKjE`7^N4VyQOaK6|z{(jrg8&3Vd1f z3nLx${b_F%{J0<3dYV7w@S3^D)fb&DUr^c^xO3c4wq-eIlx=D)bkhDv+wF%1Y=h@} z9elg-0h}{zm@PwZ>i82lqP3clxM5o}TZAm48k-Zh^Tceh)E|O<^-cT4-BJ5>?CthP z{Z3rKJ~pZKpx(v@=&txSjIZq7$f|Srv3o}ZUVtpt+EN&A1vTy`8d|GTSXjYbBb-Ethi$^Hy)IR2o{r&L)4p#yE z5;wke`|xmbpJ+3L*d1JG6uRn3y%9iap*LVzg(ACNBNIdqx%C#b_77$JUbi`Zc)hFB zwm*rI@t_d;Yy^!{ zN35S28y`I4v3t$t*vV~0oeX>3_@F~xuz-Cz>vE4pa;>GWDO<;{ez0vTRoJoHotWLj z0=DJOyxe1vd0E=F?c;Aywyoh(WZcw==XLuF|ENc)+WK63nx}kjHUCV7LSi(vcBG|k zujV>U3B~79V88>yS+?h{F4;>cqQ}XDj{4?XBN2ryw2wrkWZW~Z&bJRhT z3ORd=0!6b{Z}>IT4WrI%LY{-REnu5LEMv`_jSnareUxKoZjPPAa@1K6%#nbJ zcG;HKUis-B$hKsEa*ynmO(LwC*CahyBS4rEt}&VvR<>L4T#;~S*Wo@VuE?4ziRfP4 z|9?dA|84mH|K|07cx_$&9>6gtm}Qgg2CG0?HZTBu1)4caY;FQbiIzO00yDB&|X5 z3G5l9E^z~?pGxfz3z=^Zvd~r*_6{eJXAd5_g)$}2wqumGu(qTIq#E2W2t6G`OIg?- z1+$|xI>+5fYk`U&ab$RHx{)Muo8GE9u}fAS?3qZe(WxYRB#R}X4&Ok1-fcI*6WU2! zYiTV?L!GFJ#-LtHTV~XV+eVY!sI(DV%T=+*y^<#}f_i_?5F-}de$Q|QMM}De!DoMR zk42m)&j=}8hB_{V6%S@fmuohapVT>p%(DRX1V>230Eh{}i|9ip@Y*>*5r`zy!IV6$ z3OzP#)5W%A?`Z1Gcjg7QJjv2!esYhiFFM=gD{b5Ma#iMWk0#`F+%z?ABTbu(r$tKD zs0ms#F8_@CKq3_<1LbQr_5?o0CWsQM$=e#TNN~B47Y1RV6D%lg-PUqd=#d>c#+k5- z8aZ$3&e%N)j9ku_&pj5Im2OOa#zniy5baV9IO_16z=UT{(rlpt`vs{KNccs9&83pw zB?pJFS`?6xBYDNFTr2WWTfef+72Br0!?{1DSoQ1&an6^|JrTK{Tdluk5mgucZX13*^#@m zq|75*JkOe=K9~6*BiGlX>46FP=-Cf#iSn%Zyc-|z);07TB@<2II{cJSF2ILV7sQH2 ziVpt){S&hp)d&c|qa518Z7IC8B=$JkVcQj|ODHWNQuSgGEFAjecxA(M5CsGThYt!| zCk|4Imnrnf7SEsBXNrBEGw3+G6E4(ec1o~qErgtZE;2VuTUT3B>XAFH)##~{&YBw| zm&M0%Z8sWnsSmswiVS92Z`QRsqz#<8KI|YKwcw)r2F-yW^W?Z@8$hj3K?!u$KdEUU zJ%(o9Kp3VaxxRV>P=RpEmmeZ(I&wnoi}i>r8h#{Iwqh?ILQ(rL7Z!ws}tZ9ouwOu4p13%=o&`5jn)fy zdyqoRKagCYmLOM#Zkg3h>de;BStjKV9>>vJ5h>_K4b)5d5!za=sy8wR^U;FY?x_ua z@33R1oq3U%8<^bePwtWNIdd%-i!P19@}=cY6_ddDgrEZQUFQdkQ8@= z38_O!^(^&J$T0$uNI96-YBywjR<@}d%TYg``Js?0X5aT||C}q<$UPRBd!=pLUar+{ z+_y~~UG~wT6C4H80=5C2T(dp@%+(|$p~<#D*|yoXn=q@_Vm1b*Zo_K>Sr*u0YSfv( zWv#o$wfvRmTa_zMUU|Xge{%WHTz>7P-@Ek5OUe1xr59iPxr=}9V)Mezg+IRVBe#G2 z_TlZXzV(?~f92LYF1+;C<@4Wl^QUee-F)SZU%K(#H{N~Y`t`qm{X^HyYrl5wZ(Q3x z|Ie;HcJ-&Pe#=$w%5Poyo98}z?nlqOM@k#1c#&%b223Q5ntZM^#5=7@aRNe9-)qBzJQ7ZneK4; z5WqW%hb(MD6A74nb~_PH1*{f9)Q>Kwh=~gmJWws)IQ?XC}37d=#V!B zNe|Q>&x>gQGD~oacx5*AN|a0lP#Jyw8<;oj^zdREh$;gX1k?|#&7^#ge*w*whu6nM z;*5o~$iDL8C^f_TZ90|z_1+hO;l;<`h=o}jK!JuE0*@Dw8_?$*6(M*c z?$RR4F2HW!Y>)+j%k~YZ+(W%Yxi<2+HU-g4HbeZcQLH$(F?y=_~mVgPoSy5(T8d*(czwld0r+T;aLb39L5J{gCIW>iAohL zg(6C-Iq+NJ%0EASBPu$$zq))CNMF=iMTZwSBO!7f%sQRKUBX2@8KN^#fh<+FFzRUd zWl->0PURO)zDOcD^o~vkpwOBC=s@|EGI*fUObBA`;9Eh-3cxx6`^thrB?96GL?op1 z!phH|ei1NakX{HeW14{7@F9}`Tq(nEabpw@pHvzBO`06v1<)$cYYP+t|4W#w@@G%K zh%T^9sVtyVHI@|>9Q;n$?AfImp_I7{#1>UsjUWoNAGl~MmUt{DE?xP{CllL4y8uWv zMC}Q^LX`$L2_jLzbsebi6BH$w9zq|&j9@a$N1*$qFKD6b-f;Rt?1ThpQea-Vd2vjI z7uZ6snnOe#=o3?~{M_ja0RRewB+-xrKmIoLEBrHV zKE#9&7K4!hM2!q|=)p@zmXVc1O$+K5QkN9I=-&4rQSSh3Ank+Pc8~@D9qCzCH57JG z78n7mL01^N}t%yA3OaXal#pN*>NO*7J`ard7z;Tw3bpFFtKz4zk=9DqCtDb zIH9HhG8~94KI#{p3_NQkai|Z2q|GD?%#p})5*!H=8VaM33ULYvn008BSR5UqF;1Zc zsbH7mQPV0vbNWIhiBJwszlTE$}Wk6vS;IhQR7ApK_K-X z;E9ocuYAjiW&CqCi~y)NTQ%1CKMJI67# zZ}b*_-G!SFW^uL-N@QF}ydcGdC4~YMm-WNW3k)0QK=Ug9 zJPTN>a3#WW=YC{865Kfy|re(}loaA2USPC*-ReELWrjr4{G zralx+dgg-&4bVUAjMUhP1_)qpDykANY6zik-}@eb>l7shQOF6$2}O7+ia0OW)>*g+ z=MZm&Ix|kFmcw1bhh$z#1c5@sAkn_^^m`)VcsKFbIP&lvsNuw25P*%v(Cg9XpI%6Gt!M_7;=2+7;wb#N@ONYN_Bt7OQ$ zsPd0bzleig$}xSp9>*d4Qld4F6bl;#hk%9_VipW?ae(8ea^z5>S?EX&*d&AvRSyA3w^c z?~unzIj)$^0o5!41uc|)fzYS+fJa;x!k?ms#ctxDE0wUp{;iW2Vr-eS7IOth6Q7I% zQ=moY9kD+!=0y1MG}y;u_8$Bk)T;P?{w6$}+yzYkYfrz2;<*%WD&~H|t|}eL1(Cfo z(%8T7SKu&Zcj47=6>#$%+!M}FD)<1K3K`hx_sB*~btN7LyBN9J7)rF5I|y?a?~G*; zGL`6)6!$}Jp)7g|k~r|C&eIIP`Sg2m#2l#r!c!EztTf_)=7zv{Q7VLEiKj#|k~&T9 zd~`nv4X&NSO2`P1nHoSkf3ee9Mb-R>75Z&Pb z^6?9(va(-)`aM$eKpjy)@3J#<4Ttb`R; zf1~98zp(P-mD?Y@^*`Qv;mz@lPv7|Z>)(k6K z&j0fH=DF{y{)g%Z_y_-yf0i$O>elkHi&w8)tyHdFdGYcwXdX*yhgCoJ_+#JxIJZ@* zNw@@30Yt@}?c;1Q7pV0l?0wE2kO$A^wlt))`8R3lP(O`O>@c zidQnPSXTT?Uh&($|6#u3llfkhY%uP{=dJXmUh#V$<|}?M|B7Wrz0@ntALc9G$-kl; zm}L~ab0L6S(0j0gi*Hue{>UuRhFId}n^3%L>t`SA5UIe8qRuo1{j_w$n#kyq^gcMtOw-UE50%Rirnsz6(G8z5fSxJ{!)52#7Bwfkz^q$ zz`KwbCD+McB9t!4JCwsvz5Eh=Kr6~ z|0^MsXY>Eh=Kr6~|391me>VUBZ2te*{QsZ&{Qq++-OBBk-m2e>Z+z?ZAH4RdtG|8q zxmTRa+m{v>|BDO%^ZC!5zo7X4x@A)S%kAU$DGr4!pAP6N;3UF-(X}VD;Vc{#sG&7`l_>)6qn|EzjOTF4F(KlonpW^++R$cUQ&c}22lIDIU65PsOCai;=wyF z_;(^+tvY#opQ1T%BZ;LqHBde+DjKDVo}V&&_S?tr*&ID#v|sW6MZ-b7N7mu&^*!K8 z*J@z$&oEnrA%!nqjSUDST7ys-C4>T%X=h z!A#5R6k-els+6@Z_gG|RmbUHA@w+x>ri`3odNL*;X~SWWbw^q7x^){LP^*b1LQUwk z32_SNu;n(j8c7lgi;=*C_L|JIueX>mrS023e&^=Ql)Q;zMC$8K-n!5lH}#p47QHnu{krvI>r3APjShv zwigtzZmp)6`fCaUvOlVu&bDWkR%*C&{PxY6DYhxLr?IAwIw>Rp1x5~ClQnZtFIfM8 z`SvKs?roc6CsGvZOz?Wy-4MtYKAG(E@xujwK`%7fDs38EP4m5*00ctUk52@pl zQY}H*IpEM)Y3sI*-?%w)b5R@+5Bk6|Ci+oWXyn#i%)G~0;4Glx3n+gHMU?I1H*Aia z*rv_`DEPZO_M`|)D*8ZcLzjPs&#P|KEW|!ky$sbBfTmNkMFN`&E+g=38Y&Mbru-IJ$rIE9IrNltgrDo{|vLp+E4zu$evQ#x;w`$W!)OL zp^Tk64WjsH<{kz`Zax$Ptp99$z~~uHjcO5(OPhwC8ijsgTehC4MzImK5a7_ zklOfrlQH+miDl|FEpAFhJoE!jTk5+4_7aMrS^$WfE!(O$O|!*4rzAEA+lUUqUbA7F zEw&}IAlaSsqGz`aQKjqwkb5k$gOs-I@g=dLEO*W6xLINwd_K`=?CCHXG#d!zG~0<$ zCsgAbEw?UJgK%TGNJd2ta3!Z6Wix5pijYeQuVOXytLuYC=2|x9Iw1oD*sKO#qh&VgHbu2@9!zl%3YW9tc9etQAik!}C7XLk<*zUK=OQz+EY@#%XSs_0ocJF1tuw^Bu`@mxX*;mncz_)5qzmC7(gaZbC8&_*k#NDpdeXW72lom8wPR)na9DN<4 z=rAC_LIJxD=2LACu}MVbG<*=0=nEw!Wu_2%8ZcRMHd3%ojSaLK4h&+3$@mcg+O&_w zq3qiUI|s%AQIa#;N6)O=xA8%d`B~b&$CpHbawi+(M`5(sH-!SEbJ&}xlP%>0^OAa9 z_nN5=t6u}6HUO}IX)wA$^|uSZY- zHPHcs&n1K|wX_Y}OQJnl-aK{?uM4-N+Wi*`2%?BY78oOFU)Fx|&v4FpIPg&aq&3l+ zvyr+D3|NYx00^R%Nl|>Lw?jyaSc@@**02@8`NDM$Y98u8B+0x{gG(TgRE12RX8~c2D?X46rX(t<`x+B4{O#InSZ6NdwfZ} zCpZ7p*r~IvV=oq?vEOI@`3=ZuJh!Qv^#-gudX2SDWEA$}w3!09HsA!Kx(c54l?W%% z(=ctr3X;YM`yiN_It{&9BRpUjtrkNAqTQ)S>=C7H*j^IV$&XOLI#+wVwlF7)&JY*w z%p)YcX4#+obCLN+O&Ua90i0n>E#y%tSA%VmnMrv%oDNWgzz+fCji?iQ&;p4_E=2(F zM8U$v#>o65uJa)4blD-&$-cES>~KDx**er-*F4AkbCLO1+PcS=#C7uXPsUE2U!7@Z z|7bo43(P;EoRs~~gVEE8Ymi1jEw7U(OKS}+cH5AyK+FsKlGAjXsNwQAOODX${vQhe z|9$S1|P8)i0eNaACU2mno$E;LTkhlc#xtS#NC(vtw+0@<>N; z>o`#sp4@I%79Qecs2usxkc9@3R}l->t#DkS8s zo2YKa54KIIA%&B1JU@be=zn3cf; zZNn+XHt4UXu-z2FOXc(=a*su3Wog^CkDuC{m5dwph}hP#_Qvk~ut=;dA9c<@KhlxA zb9`4>m(7O+2SR5j*2NuDSRIoB`$_I7$g%pXjdbSO&BXEA@Sl@OZCTKLAt2$2?79mP zRRb1N9rXfkS~EE9N)bJAnm_qq`xF+;-9PXSwWA^mYb5*EH<67Gip=X4QRm9Mi>%hp`Q| zVDbplZTR%;gDS6Fi6{j¨ zpj5-*hp`y0Hw5S@N@kkF%>uh6)V~hwXFw2R*g`D~Gdh%_D=wKa6nHqPI($;MqZ*PuV2l`z#H|KhC zl(>r`=Xvgk%RMsJ3={Uw&}x}iDLy=wCx^eT`E3PyzjV}E4bD!peKZQRZ4d3zn zVH84S0zE#Q!1w}i?v`3hrOH-H5ul_<7H`0e#!&7|^oR zLu9Inw$L>#NL|q|V9?++HngVEZia1`RQ0$CQ46Uc<|WZ=2xFmOg{2sx7EK6#eG-G9 zidbfhAn`zaBZ#A2maXeYvQA(lHX@fO53U8&IS}Ad4-u2df%2LGi&-|%=)l;DXaIki zycio1tjhAuBzoL{IU*TFE0k5sfPU-WhQn4aTWEhsh+VWG?m@_(F)Q?~pJPDF5;ZYQ zhG=6oA=-w{ncO|TD<~zS1rc*#HHfQ9U_C<38ju3&1tRGYz`q^B0VGKaE+X*b!Wz$3 zD7i^Qpdd9zHRIu1CL1nfiqPW(b8ddZ(}>3vxlYoqZyu@UV+C2|-jBY$eQKP)-ZYc`ST- z#8_?Q&XE%0B1W(ur51dC=zrnfx6tna4B?Oz;PB&8k2Xb&^RESLBViybbTyz{X3^9j zFzPU$;M`>Oa~7gyLyZHwjV?URoQ==0b2WJLy+OYEMD|=Q3oa`HWOLY}IsZ~}vIM;G z*$5S)wgdfsNL2-%8~Y~9D1=lW`fC`r@X%b5HlxcqKNEtO{12D*6$A7LfxX8_`%>cEbTN>v)mAP=HA{yK)&@{o=YV{nZ+d|^$j=uCdHM3}AeY6V6~VmWX~SzNum{#F+EyTL zpsI&Ko_jWdXvWKdq1_3g?)OFKiGVereOzr8Cyf3f3)Eym!<`C;y@-L~LPw$_1ARIm z9+E2zG7Hp0;6;P>-R8+7&En%XJ4^vxPTLQBHh$+1d={^n5>qyDje`M5JqSx~2Fx(n z)WI65ycLZ8IOiZUBuhllK$bkA5v0AO%EzM+#1w5EXx$&_iZ49;xqqO4G<@T|6~BI6 zDhvE#TR$_%jBX?cPVEAsLn1N+aX+N%$XO6hL>&tG3UtFrrzIkbN4y2UNOol0XSn`Q zaEZ8#;8*Z@f@)U;W(MR8B)g(nfE&%A+iVJWa~vD&8KPbTNiF#g)B%X(nD@4I15qL* zn4ow^6bkpAy&bVSPHnjE?I4%FF3J7>d6mCfx&4w`uetfejic)yzxGGh zUU>DJu6+09AHVc-mtJ%6i3>;PKYs3y&IQ$v@Yf#U&+_i_F+o=>Uw-@c^0BC=qDmAQ ziLeQo20z`K6QY})r;-OTKMi#g_6);pi)`$!2gc7<EFP7pP?~Fb(ABN{Qqw zpISagnfQvVi592HDw$#hi@|PRD_|n=S;t@jSX@nISMtE&x>Ug;6{CJ+rxY{b3*b)3 z5|9ocoh*qIAa&ei(D<={HnQgd9Kyy_2ZIg}Qtq*lPB_CB$rj|T(9Ix(fyjxZaiz*l zQiM`3L4aFyT5x`Ws|CyFFK=I6fn@HFBANA7eYSxvkvHleVq)7eYp9{%Km$8%A=ip> zZjbjir~K1=C##}C6J102);o4fVVH2j)Y#++LXXK0$L&!BFZV?;yngR z;yb8nipUPsq>jgn-O9gMI0w?H(sYykomsl@4+OkpB{k$I>zK{i)55{1B~cw+jT*N_ znG7wfr8hYDWt*qR$_myn@o#QS{BX)BsxbJp;~fnK!)}3DfwQ9%RWe3E!Dnnd;lb_VFp*_1tWU?4n2tA!gdWwaqC-q@S(KIYUYMQ>L30BPCvd8jY%KRi13CL8Av$!xLfQK zsD06|te|TfD`<~yR$>3)WHg>7`dn5}ig(2D6F);#Q->J>u^{57Rt;~72`By>jyoGT zPzqj*(Mi$ZWA1=BM3ad-Hv*-&YXA=;k_rS=LZTmdg;LiN5o$@fU^Clb17S&~^!?S% zzUS&qsE+BS`|~iF49x<4&yER1iD)ogZqt1L;sNGahDV$LuOB&0N`sjeKyTPx*>zb^ zY^x&7DOy6@3UDKtcB09oHVMMGA)qrNeHK#(=ovDPbb^IcAjN*fQUmg%+&p8v9u^T2 zLhQC8MCHcFU0NC@UfDD;fY?KIetZ-TI)flBV4@)ss0=(gG0fw3<8q2HZRE5dC=SMs z!dMPpRutOobcDdTsZJ8D9HyL1DNYuIRzW7IQ6xNFN}&@IFK?R2l^iiCM$y|{9QgC` zsECQUOR^oX8_JHw`?BH5^_+c8D3#d?1ZBnYg1ZD>Yx%Prho+#d5T)m2R?W!w$?kvy zAk~<}EXxG~IDTpr{VIl?(79Qyv^M&Ac>wokP|cZXKr z><{e%eP8Mf;yu}~r3-K~z_%$ADT3up=XwYX4oMS44mi3D$g_!%!#M-ncLH24K}(u| zE7w08Z$3r;5S3Z1kLmjh`MwW`^R9fabgGYb0VmV1ocrQL!l7~ zXL30tqUrndn|(he0_G}(aQf>9GO1yoj}JE*`UvDnmCkgN0#)er1 z6?ta(Z3xB4Nz3hx(gZdzAvut%04A0O^F8^^%EFgrE@%qvrcPPHQJ#J<4GLIDgc2iI zMPvyip1``}q6P4TrAPKv@^_$xC4S81mVJi9NW4@6ii{iHIW7`vii|knCNZ!qT56U5 z|4qsNyVu@*<>1nHT=H~C`g^0i9=I%9t;JR5%#~r>RxC78L@b*yWlUNaKp3*(h^Uet z#G{0y3uG8T{UnY>2SgNP5p^Xt#SsA(g|jwgL{l=7Tqp&u0Vu!|M<ewhJ6V*sb zQjiGe>WYW~TRXUwfWWw8NZ|5ABpCl4S9dlV{1q;ZoEw~uRQ-~^BCtw&1Pxb_7-pOw zX>_{e7;E4>+V=-}4d+p|B#KS-?B!R&zC^$c5(gYBDgw|(7Qq{Gi(uxhl!^@Gx-}%A z+10roF+>!#vf7x5pO6-B9%AF>*%!E52%bCg#GFCV$Tq$sNnL)(rkc}32BD)5$ zH+l~Z=QMI!%=%uedS!6c=NY4H=ni;!5DsQ|^7HgBEy-LN)#<;XQUz z_H7(7uyv`x0>z;QCIBNRnIoNQSW07%$l|@oKKcph5u%7}=~Tmm+agA(&fi58f8CsuN4$IxcBAPl|RuoLK@c^2V#w+%p9Z5;X1)^4da1lF$LN7-_^C+4m&v zMv#c?yJS~bZm|SM&@iWy6$A?7Syi}CGQJ^P? z$f_r}Dmw3M1i-c=LI==5bhfF)=QafsG4UNi-!YS*wMFk+?!cjFq)W`4h5WAnA&S4_ z-*8hQXpCUA=-3k>u)&ov?YO16IPr2ToMj(Tb4B<7-P&))qOO%@3oP-vU7dCh_z=8CG4M}_;pM-Q|jDI|eKm02! zV>y&%wc1?UaIH9gIEwim@wyChj0EbRY3n$w-5=w%&DsFJYNKCADuoOjODqy?d5%2v z^>8SWsU`OZLSE36;28#4g*3mc+0&X!Rt$^X#I!-VLh2W=2 zAIPD=vIGypUT%REz*FWt*GLPJ1m<=l{A}#IU@pl(fy)9ppqnYM030sho9qozXafk8 za4AVscp%y6BMYENAW)EZ{TS=`cL@n|2FtyiGsBiElX3{y!`Y|hcqUj(Fzp#O$fEyu zcuU;pXr|IPLP?cOXZ63Y{^jbt z`hn_et1o$)5X9y11bVO;_W9-)pMPETv{j0*RPYk0Xn*H$SO2DLs}#ei$a!?=n!S!^ ze}*pwt_HRV`Y>Osk^CRlhf#CEj>4Ih1e1!;Y~t>StTI zTeIu)d#TeHA014SgKR5FDLeyOeZL=@-G#TGZ3S}*EP~d(1$gji6818!-X7o#^;TBg z+w1M^AMIsZxg4xUe`mNm+8^1$ZnhPT=hf%~X#>`HnC@g-!Jn;u@5maA{b6s^&9-tC zSry86rj|RK9v*Zut?rRv*W{h;X0ZB+WLrn1LX<^eXSfe9 z%s9@r?vUP6{Ty_n!-?MyqikyzfR*~a#;i+rbbkB-fA&14#w7eayQ#b-SR3jKbRiba4qUjW?MC?UDWsvoX*~0x2JtD z)9TC#o2lPBFw&8?-;eKPTW3;MBYo8&S2e`{{Xn*LN_JcI#xPBG2bLLZXIuC2PE>DL z(R_F6yYnZqtw2;)Yj9sb^3tPuw3Tg*feNU%>dyv2*FTuNKie8f99`aOVI7V;3reNef!;+R(nA;gZjP3 zV9@XA=I~wF)+x~q)f=NDWA2%Y#XGaDUC4#hC>-tWIlaXwct^IC)ZA(mW>$Z)duYwx zo^55TaMU-ulOxaGUl?!8wsQF*B};D{dEss{>{)Nkw&K6xO3=Ea?Q|S%=)NV>YE8*5 zs(xN{ok6_cAH6x-dL-CTHTwFHcj~)u%C;UdfaIu z&ZN8Jy3I_hIU~QMey_8qhaCvx8`)MAH&&y7B6Q#D&+K}(wSz~jdc&ckf}P$$E!zqN zZ?zT&09O+{xJQ_oHGXxrH5LLCY31JE>Fx%5-;iy^ z1*NW?*7?q16zumGezp~RRwPLMj@cU@P$ZviCC;%TpqVfTeUq?6rd6MVUr@hy>`eT< zq}O$_tw%Vd%3dP8NAa9UShjU2*(7|nwT>q+Y0UBY80j;?C3}prT>kK+te=t~R+17vrnEK|P$?}edi&te^ zL85Sr;GN@1&+RPS^y{;&z}0kRQGfqv9POIkE3>U+J69`33&UP|IN1HVY%5#cYNcrX zuDK5^=W8>q+K8N~>dDyX^mgGc{F-cQK*UG=Ug8JB<~V*uwpHK&%A)9KmIS@-?pJ49 zi59L_${{xh>nKQHe!q2hu}cCQ-dS*CTqPZC`9 z)xbF#cZTEHS7uxHh$C z4)*mg%d{TRy22~jneNm?Ma7sK+ee+(o zr@8%+{>7QrfYz0NwNG*XlsMcMWm<{Rf%;afdq327co?eEO}h5iMZ)^rF? zVD)=(ct(eZ-t#i8R6GFWkZ<1A%!wb&M$gT(h6{;$Nozccy5@L(^jN0VACYEMzjxY8 zJ!`gWJ?DOF_YkRz)hO(du@ALDM?sPzBxD;q=Wq={QuZ{6DY~Dv%d31t(jRH zt$kk*APHH++ZPsf$134Ls~M2mMR&h7B4dw?$XF7PlvypnMiMXs7#K-5Sb#wiyFi%5 z7zEht2(S<^GP_xP4hIZ#SkB=2eK#_zUPM$&86ABZYNiq-RpzaVeD~dZzxyr!@BhD= z8*PJFo_p7`#w@8PefLUkv^64as(!DT?kDknIJul3#i5vcx#2A8j3)cWrQE1dr(mwu zH*L1<$)siMe;z0sgI#zJRXxzWkKPN`mIbkL5w z&DOxWm>V5+$?K{4X5+Ts8}BtQy4c!sv~&`xRRlXfm_|Izl(Y`=H=?c4qB*KOO|PucqGt>4)Cp{;jpeeu=w-sQrj-@Wt`m)?EpEtj%OFTeDnOWQktvh%Y$@7;M@+PX36Fw}k|H#})dXTGdw z$C_B3?!eG~I5)gMrtqbHcO7f9w?7_eKa?Nd$L~;krQr;ldk5W?_V4q-~d)uYDjtEQm+-yC-fVYVG;H_5=B0fJAe9Kip#i_0GQb z{rO=qNppig?8WA!J#A_4&ku`Cn%b#-&mRx#!9e@I+;G1R#8~}q{h;5mXQrinZ+@5} z+uS?S8}N-)xJA7+`}K9TYbH5c6Tkit9@5~m>6_!_Kk)s zVRxi`XKom+9b<0yk&hvD9NF4;JIcygGYN`emDh0svfP=p6cU~Kh@rw zA5OqD&EI)*&o}x9uJ)eXa9a>u>chQ3BMXPoRQvYaaBE62No}UOGp2WAzoUIyeweFs zZg-6Scy!P*C)&Tu4@*5wefX|UMhEg)?OXH1K);XgXamKXb`ojdk{_l`W`0TQ&9PIj zPc!YCbHmL8@L6hNqjoYd_N=D%?)>nKjjA?s-5y1DR-b79Ha|S1qf))KbQmSwz1e~G zP5I$H{9QF~uaR_`@#H}J#{BRAL#{qNY|O^Py|JtPoBVKJ5WccvlVK+eM*F+kzs?W$ zEGkDboOR4zV>(H-cjbqhz$w(ks0Wdg4h`*{`C)XC<|{VctB1*MmTB+E4@)^(J$ah= zvDxk0+W(m!hGg*gjDd9@xXqdN4NJrG6`Rd6e|j)7wXe?))0i+{G0*Dk4QEqR`?~zF zO`Tgkd7C1(u1EXYzse7DgU!!a?9}%XXPRhVn;TBY)OqH+WnyQ&_Sn+CCO1rlo8pJO zwE_BAyA)-$ug(qQq=Q+K;b7WJ&A~yc{U7<^4E&K=v7lj1_9y$H_P^(cSNg!TugVW& zx8^HGnMd_dXA^12YVDEsC%NJME{!(I?)m9{+wrhH zf1Do{guF6r{$B5(NqJHGqulU_e?9jtX6@mD+cQVnf6EOI!Sc>ynRMzmQon0yf0!HI zLsn@X%#4EF#teT^`-A-OgeDvHyQLlPpguIT-_H&AyVAoZR#RxK_mg&@{a$`JrtxHc z$2P~UkUFRKySd>W)$Vyf6V{Ws-|f$|-^mSkrxZEV@1~kFGyA;*?YHy89Wvu7cn)=-n-#ftX zF}2^!4LA23@HaAVCms%Zjf0l<8@b`#hNN0#c&N8`n+>F1) zbO2vGn%n4)`d+85{c3(#8j#e7H%2rN2JN=?E4ktHKw6aKUk?uI?TI%HwGZWoL9)$b z{SXDF-E_aD{c?U-nr7w`GpD1pZu{CV<%Sa&FXmwlq5DMNZH3w|=7*`}&sU5F!@A!Y zn%XbqhsgxZSBxI|R?`oB?dNmD^xzz)UH0pJKhB1Z_H+4RLi)J}J{b)s^%e0@)4cjxp8_9>8<6eI@v-;Xk<%g#>7(f|5V55^03bdch5APApsYly& zI*_S`yV?iy!+lt4)$iU*nuBTN>}fxd8#WIxOzL+Bo&EZl>sH*kl)frl?0KIaix{cPa!9=(NtpTW{om)5=`0S3;3RQ0zLZwhU4+@*^jgxCYv82N_)ue}(*gV|%rwX$R&B3n6oaf%NlH~H ziy+)GY8BWRp-Z9*FG54H2Fur!mPk?nFblEsXyl^PiY~3hO#u$mSVgBQy&-7=A|F^6 zU61tm3oDuMHK5o)e~n9jB@`C0Pzb#S*xeMeWRz!Up+uq;QLL2y4)jDk$jPBcmkvv` z+)!!IU0Mcd%8Ji5(Alk<9tR|nK>&RKu*cUOLZ0c2C3uC;X2Hdf|Wz5V=@2>Z}V z_eQ<$_%WWJOdbAYXwYM$rdMh(R`3(<2~a4~%ERd@hC-q^-FSWv99Go)j-`o05%X5- zr=)oMZLihcr~Uc38&ZDt$N7R3PKZ)+U#mZPoL8`{!94leHMB$Gw(QXP`YEwq zYuF!no;QXwO3%3DymH0#iYd_4$k0nxja9Bxigv~HYe81>YakD48v}m2PV@4{bGUwZ z-{KnesrHN!=P>&*)QhM}%=$6Xd#7F_np=eT_SVq29 zeF9cmln!3H=R&_yt+59;>=8zC_})dy;gk6pGQa)3Nz)ua%y#dV)%tSwv2( z;@d^Y0?9Q&S&i}=EP-W^=v?m`uhGucPt)3GeqP&o^~c27e@vA9j=pox_FruO%J%nd zf6exI`}4Q`?Wb@3EuH;8y!FnlH*P(+b>G(Wx6WMry^9~b_{|r;pZ&?R-*Wa#&o<6}_SsK8d+E%7KlAe+8{favJ!77EV&N|fzgGDEdCven z|I@-7q;sI~>4j&0%!J0ys|(+A3{L9+%I2Vey9ft$f7G$#LJk7dQo{;wGH`If{8?7` zHU9PJ_+KkfwvrFt_j=RrY~U4gAfA>QR;Z2s!LE_Echf=+#M5el*`D`o3;_A04WnK7 zB|iMACm$}DZG{*Kr#+PBqP;>6XVap4@3*-Xz>>lU(Q*ayXk7SXKN>c`b1_Y-aVnVIhaJnGdUZC)3`+7=@O?Pw%{1`-0;q zZwlgD{p)^rc(W&^8LaB(p^y3>ca=^PJ>2Aqwr1n zCzoNRWDNJv)NBV~VFBqb!|J7u+}8>!_YOmQryAfrR{X!n;u7;H$t=Y5f ze*eHL4X(`4#d=cR_s5n@xH!zl3&oTF4{a6(C%_RJ3u;R;O(j@RvrCWd zxE}e11*AJ-8uNaTq239HS$AAmK)TDYIwf{<-|7wxudsl0mtl2E(nbf*Vipt@knRG) zR}=G_R&4)mmD_X-P0clp<9-sW!7*&BqzLLTWJ34~uw>|j7Q zsol~Gd8E49##v=5pu`% zv{!iJ^01n>IT%NK(|A_+;`}hp2XpXo-5Tz<&0e$cMa#o#LE}z3_UYj-eBtu2T2PF` zsNr@xg@gRCv@WP8j~bK4ZW4D2v*ls+F;`t>3&l$jF*SilhcybnN93QVSjm8J^92=>gItnER6EQ(l(*C;(oJb_U(>W7%mU1 zt+*R>!->}o3VX}LYTgIEk=GkVlfoc3teP(76LZJWzS~X;{pDe`72Ec(Gui9*3%%uG zwH15xCqu8-EOhh3=w;4rixVD9(@D=ObQXsZMG@=JY0T=g;clhhe5ya{>5R~x@2Mj0ygcbJt=(O^01oN?*4Qyi=zF)_vVM` z_nJF{ZGRk$l5wZ-J}d-0lu?^+(78;@kKTTfg2 zh40J{OShOh26TlD8gZvz_>Sda^-{U}nF70Kl8UXJDB=CvTcRt^00bq z)(} zIc$2oC*9RXQb?DF)x@IxQ8F8+dLdaJK3=h8IE&4LLYyC_HEG_O(Co(h2U$ESL`%ca zAF>ruvYb$9YZt=hVKwi%-5Pl_e20hf!(Gt=mVcepAuyu+U3hSLc)nXYUB9o78-)j! zht+OD$0)2f`mMqjp zgQOJ&h0k3cR_`1ILffyq?ZQ7>9#-=<_d(u7giNo?4}&F`UsUku^xPR+@wLmt^NR}6 z^`_nm3$IxoR)=V$8^d~*n1xs8hs7eRiTQ2oV3Z_&;Z;)qzqtMD+O_9hz3)nN`Qc0N z+WBF=z58|d4cvVLci+I>H*oh2+h0=c`^!ecfH(s#-7(AXM{B|LA z&NiN5bmQe}h6ukXz?qt18w?V<=M8V`h^EH!d{BT|{n7}G^IL@MGQYM9WLG3tflH2edkwqctb<|D;W^FE5E;Y8AFQ)Gp?DT9W=tv+ z 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 diff --git a/datadirs/datadir2/dev.db b/datadirs/datadir2/dev.db index 903537fa59ccc517bb34aab3724c45f82ac2a3c2..00da866f3d780ba59fefc7fc0ba3c9ca415ba58a 100644 GIT binary patch delta 3109 zcmd5;%WG6u7@s?tgh^88I@RE!3YJ28imbOS+SBeWaE(`txg+l)VSJGAc-J7D$7%^!!-o?zlbMBn;JHN;Goon~U zuH7H|{Eckp=HB^i=GWujO}Cq!hmHJX=i%+{&d)miFJ}%G6ENxgsR{J5N<3BI8jo{a|l6^0;r0P(x8P4gqT2N@c2kWIh73oi_R0gDq#L( zjPg93+6pkPNCk``WFZ+u2UNn0P&PRZ!iT_|mx2K|Dn($9(4?s#${S!t0@s{!VY!%S zG#btPK_mYwe{j3I|4x2n-^gtCV(#{i%#N>*Zm@wJIN8|5y+;0K=g^K5uU((~X5t=- z^TWj3400~ z)1ne-K5mhjjfgomQX@QY;0eO`dTs1FalsOQL0(y{byWt_^vpHjTbLhxOX!)Xus;Y|I@Nb{{zGzhL5ru!}Ro1@@fpM!f^g$dXD-F zwY-I)_8I2z_PHO(8irX*mWU42==okxOO0AD8W972JI}4`&Cl_L;i9n#_TJi{XpH5D z>!Oi=pMRR4$`51CZC(r)kAZlP4UZ1QXLNXUz~!x{qw9rdz+fZ)jlPE!e|>mB$L4U= z8eq7pTFuF&#*SN)OSp@plf{h>ntRGFT%XEXt#+^S38wdFkpy>TRaLR~gQ-F5@>a*r2JO`b3%&U;7_d$%${A!)eJsJJs8jEt5r zACIEwNeSi9%7V(3J22^7{W2qwQwC+Q{$ZtJsTUUcBEb zyV>?V*IdMT#+U~py`H_?4=-F_jddeQw)QuS?e+r@tTgKN z-t=$Lf!#nA7z&+rRK}QT3WaD};2deDEU^N23`?!1nE;XHL?Q&kTq0%#b2($u$ra+c zM~Zk!Et8T^WocNVR)Tbla!#>820&WLEPy5$o(j0Oc>FW@?N;OYpOg6X=&O}uFIB?w za>!$UoQn@mEnY0g!rh?2?STP`15FSrZ7RoTM)^jwmKX3avPmmZhSVrmU4J*wr_RDqpNtcTsNV zM@Xr|`sD!{bl)DpaD+a1p+Hjzrsw5nLFOTvA(H0ErELv_GugtFAh5P&smw6uooS^W zNvM$U9;KovzFi_eetgXD4su)~$7|hpdheNwW8|ZM&LtJhMzz<~+N4DuDezR>=#PCF zLuK5-rSt1vVITn84lz=+A;m73oVJ=w9E`E$3FJH8 z{x&Jchr!=hlH%R%>U_wXbHUZG?eYAiCk}<((|dO(c%QBpGQrMHz5Kfn{~e0uekhis zn~fl3T%D_)+z?GvtNpp zX8+22Im5RdrvtqY8(=tVna}F1kLjxOlWi%c&?pIRh8}rp_HHvE0<;}+ISmSF; z?re%Mp^OVTHkN~sz}MmaG6bvDYEe|JK3xWz)kg8Pqrac~7!e}If$FgP8+%d|Se#Jc O`x|rjpDc$=;`<*DT~e6< diff --git a/package.json b/package.json index 6e4a99c..49aaddf 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,12 @@ "@chainsafe/libp2p-gossipsub": "^4.1.1", "@chainsafe/libp2p-noise": "^8.0.1", "@chainsafe/ssz": "^0.9.2", - "@ethereumjs/trie": "^5.0.0", "@graphql-yoga/node": "^2.13.13", "@libp2p/interfaces": "^3.0.3", "@libp2p/kad-dht": "^3.0.5", "@libp2p/mplex": "^5.2.4", + "@libp2p/peer-id": "^1.1.16", + "@libp2p/peer-id-factory": "^1.0.18", "@libp2p/websockets": "^3.0.4", "@multiformats/multiaddr": "^11.0.0", "@opensea/seaport-order-validator": "^0.1.1", @@ -62,6 +63,7 @@ "graphql-scalars": "^1.18.0", "it-pipe": "^2.0.4", "libp2p": "^0.39.2", + "merkletreejs": "^0.3.3", "node-fetch": "^3.2.10", "prom-client": "^14.1.0", "reflect-metadata": "^0.1.13", @@ -73,7 +75,6 @@ }, "devDependencies": { "@chainsafe/eslint-plugin-node": "^11.2.3", - "@libp2p/peer-id-factory": "^1.0.18", "@types/chai": "^4.3.3", "@types/chai-as-promised": "^7.1.5", "@types/graphql-fields": "^1.3.4", diff --git a/prisma/migrations/20221025182511_/migration.sql b/prisma/migrations/20221116203342_/migration.sql similarity index 98% rename from prisma/migrations/20221025182511_/migration.sql rename to prisma/migrations/20221116203342_/migration.sql index 11592a2..c20d50b 100644 --- a/prisma/migrations/20221025182511_/migration.sql +++ b/prisma/migrations/20221116203342_/migration.sql @@ -50,7 +50,7 @@ CREATE TABLE "OrderMetadata" ( "isValid" BOOLEAN NOT NULL, "isAuction" BOOLEAN NOT NULL, "isFullyFulfilled" BOOLEAN NOT NULL, - "lastFulfilledAt" DATETIME, + "lastFulfilledAt" TEXT, "lastFulfilledPrice" TEXT, "isPinned" BOOLEAN NOT NULL DEFAULT false, "isRemoved" BOOLEAN NOT NULL DEFAULT false, diff --git a/prisma/seed.ts b/prisma/seed.ts index 7730d2c..312e9aa 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -3,13 +3,14 @@ import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() async function main() { + /* const order1 = await prisma.order.upsert({ where: { - hash: '0x0000000000000000000000000000000000000000000000000000000000000000', + hash: '0xa3c92e0a25acabf6f3a11722e6d2013a11ff2bf9832c5c7c3e1cd7ea2fe2d06f', }, update: {}, create: { - hash: '0x0000000000000000000000000000000000000000000000000000000000000000', + hash: '0xa3c92e0a25acabf6f3a11722e6d2013a11ff2bf9832c5c7c3e1cd7ea2fe2d06f', offer: { create: { itemType: 1, @@ -134,6 +135,7 @@ async function main() { }) console.log({ order1, order2 }) + */ } main() diff --git a/scripts/simulate/run-local-net.ts b/scripts/simulate/run-local-net.ts index 2a2749f..5f68fd1 100644 --- a/scripts/simulate/run-local-net.ts +++ b/scripts/simulate/run-local-net.ts @@ -24,7 +24,7 @@ import type { PeerId } from '@libp2p/interface-peer-id' import type { Multiaddr } from '@multiformats/multiaddr' const opts: SeaportGossipNodeOpts = { - web3Provider: new MockProvider('mainnet'), + web3Provider: new MockProvider('mainnet') as any, collectionAddresses: [ '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // '0x3F53082981815Ed8142384EDB1311025cA750Ef1', diff --git a/src/listeners/seaport.ts b/src/listeners/seaport.ts index c1b7d61..67f11bf 100644 --- a/src/listeners/seaport.ts +++ b/src/listeners/seaport.ts @@ -3,6 +3,7 @@ import { ethers } from 'ethers' import ISeaport from '../contract-abi/Seaport.json' assert { type: 'json' } import { short } from '../index.js' import { publishEvent } from '../util/gossipsub.js' +import { emptyOrderJSON } from '../util/serialize.js' import { ItemType, OrderEvent, SeaportEvent } from '../util/types.js' import type { SeaportGossipNode } from '../node.js' @@ -158,6 +159,7 @@ export class SeaportListener { const event = { event: OrderEvent.FULFILLED, orderHash, + order, blockNumber: block.number.toString(), blockHash: block.hash, } @@ -190,8 +192,9 @@ export class SeaportListener { const event = { event: OrderEvent.CANCELLED, orderHash, - lastValidatedBlockNumber: block.number.toString(), - lastValidatedBlockHash: block.hash, + order, + blockNumber: block.number.toString(), + blockHash: block.hash, } await this._publishEvent(event) } @@ -223,8 +226,9 @@ export class SeaportListener { const event = { event: OrderEvent.VALIDATED, orderHash, - lastValidatedBlockNumber: lastValidatedBlockNumber.toString(), - lastValidatedBlockHash, + order, + blockNumber: lastValidatedBlockNumber.toString(), + blockHash: lastValidatedBlockHash, } await this._publishEvent(event) } @@ -232,9 +236,10 @@ export class SeaportListener { /** * Handle CounterIncremented event from the Seaport contract. */ - private async _onCounterIncrementedEvent( + public async _onCounterIncrementedEvent( newCounter: number, - offerer: Address + offerer: Address, + publishGossipsubEvent = true ) { const orders = await this.prisma.order.findMany({ where: { offerer, counter: { lt: newCounter } }, @@ -257,14 +262,17 @@ export class SeaportListener { }) } - const event = { - event: OrderEvent.COUNTER_INCREMENTED, - offerer, - newCounter, - blockNumber: block.number.toString(), - blockHash: block.hash, + if (publishGossipsubEvent) { + const event = { + event: OrderEvent.COUNTER_INCREMENTED, + offerer, + orderHash: ethers.constants.HashZero, + order: { ...emptyOrderJSON, offerer, counter: newCounter }, + blockNumber: block.number.toString(), + blockHash: block.hash, + } + await this._publishEvent(event) } - await this._publishEvent(event) } /** diff --git a/src/node.ts b/src/node.ts index 7d5e5bb..ff302ff 100644 --- a/src/node.ts +++ b/src/node.ts @@ -38,7 +38,11 @@ import { publishEvent } from './util/gossipsub.js' import { isValidAddress, short } from './util/helpers.js' import { createWinstonLogger } from './util/log.js' import { deriveOrderHash } from './util/order.js' -import { decodeGossipsubEvent, gossipsubMsgIdFn } from './util/serialize.js' +import { + decodeGossipsubEvent, + emptyOrderJSON, + gossipsubMsgIdFn, +} from './util/serialize.js' import { OrderEvent, seaportGossipNodeDefaultOpts } from './util/types.js' import { OrderValidator } from './validate/index.js' @@ -56,6 +60,7 @@ import type { PeerInfo } from '@libp2p/interface-peer-info' import type { Multiaddr } from '@multiformats/multiaddr' import type { Libp2p, Libp2pEvents } from 'libp2p' import type winston from 'winston' +import { exportToProtobuf } from '@libp2p/peer-id-factory' /** * SeaportGossipNode is a p2p client for sharing Seaport orders. @@ -108,6 +113,7 @@ export class SeaportGossipNode { web3Provider: this.provider, logger: this.logger, validateOpenSeaFeeRecipient: true, + revalidateBlockDistance: this.REVALIDATE_BLOCK_DISTANCE, }) this.seaportListener = new SeaportListener({ node: this, @@ -183,8 +189,8 @@ export class SeaportGossipNode { ) const displayAddrs = this.libp2p .getMultiaddrs() - .map((a) => ` ${a.toString()}`) - .join(',\n') + .map((a) => `\t\t\t\t${a.toString()}`) + .join('\n') this.logger.info(`Advertising the following addresses:\n${displayAddrs}`) for (const address of this.opts.collectionAddresses) { @@ -201,6 +207,11 @@ export class SeaportGossipNode { this.revalidateInterval = setInterval(async () => { await this._validateStaleOrders() }, this.REVALIDATE_INTERVAL) + + const orderCount = await this.prisma.order.count() + this.logger.info( + `${orderCount} order${orderCount === 1 ? '' : 's'} in database` + ) } /** @@ -531,6 +542,12 @@ export class SeaportGossipNode { }, orderBy: { lastValidatedBlockNumber: 'asc' }, }) + if (orderMetadata.length === 0) return + this.logger.debug( + `Re-validating ${orderMetadata.length} stale orders, oldest from ${ + block.number - Number(orderMetadata[0].lastValidatedBlockNumber) + } blocks ago` + ) for (const metadata of orderMetadata) { const { isValid: isValidBefore, orderHash } = metadata const [isValid] = await this.validateOrderByHash(metadata.orderHash, { @@ -540,12 +557,21 @@ export class SeaportGossipNode { (isValid === true && !isValidBefore) || (isValid === false && isValidBefore) ) { + const dbOrder = await this.prisma.order.findFirst({ + where: { hash: orderHash }, + include: { + offer: true, + consideration: true, + }, + }) + const order = dbOrder !== null ? orderToJSON(dbOrder) : emptyOrderJSON const event = { event: isValid === true ? OrderEvent.VALIDATED : OrderEvent.INVALIDATED, orderHash, - lastValidatedBlockNumber: block.number.toString(), - lastValidatedBlockHash: block.hash, + order, + blockNumber: block.number.toString(), + blockHash: block.hash, } await this._publishEvent(event) } @@ -576,11 +602,9 @@ export class SeaportGossipNode { const event = { event: OrderEvent.NEW, orderHash: deriveOrderHash(order), - orderParameters: order, - isValid, - lastValidatedBlockNumber: lastValidatedBlockNumber ?? '0', - lastValidatedBlockHash: - lastValidatedBlockHash ?? ethers.constants.HashZero, + order, + blockNumber: lastValidatedBlockNumber ?? '0', + blockHash: lastValidatedBlockHash ?? ethers.constants.HashZero, } await this._publishEvent(event) } @@ -628,15 +652,15 @@ export class SeaportGossipNode { address: Address, _onGossipsubEvent?: (gossipsubEvent: GossipsubEvent) => void ) { - return async (event: CustomEvent) => { - const { msg, msgId, propagationSource } = event.detail + return async (gossipsubMessage: CustomEvent) => { + const { msg, msgId, propagationSource } = gossipsubMessage.detail const { data, topic } = msg if (topic !== address) return - let gossipsubEvent + let event try { - gossipsubEvent = decodeGossipsubEvent(data) + event = decodeGossipsubEvent(data) } catch (error: any) { this.logger.error( `Error formatting gossipsub message to event: ${ @@ -645,66 +669,92 @@ export class SeaportGossipNode { ) } - if (gossipsubEvent === undefined) { + if (event === undefined) { this.logger.error('No gossipsubEvent from gossipsub:message') return } this.logger.debug( - `Received gossipsub on topic ${topic}: ${JSON.stringify( - gossipsubEvent - )}` + `Received gossipsub on topic ${topic}: ${JSON.stringify(event)}` ) - if (_onGossipsubEvent !== undefined) _onGossipsubEvent(gossipsubEvent) + if (_onGossipsubEvent !== undefined) { + _onGossipsubEvent(event) + } // Parse and validate order - const { order } = gossipsubEvent + const { order } = event + let { event: orderEvent } = event let acceptance - try { - const [isAdded, metadata] = await addOrder( - this.prisma, - this.validator, - order + + if (orderEvent === OrderEvent.COUNTER_INCREMENTED) { + // TODO: Accept message if counter is equal to order.counter on blockHash, + // otherwise reject + acceptance = MessageAcceptance.Accept + await this.seaportListener._onCounterIncrementedEvent( + order.counter, + order.offerer, + false ) - const { isValid } = metadata - if (gossipsubEvent.event === OrderEvent.INVALIDATED) { - if (isValid === true) { - // TODO accept but don't rebroadcast if it is invalid on the - // lastValidatedBlockHash but now valid + } else { + // Try adding order to db + try { + const [isAdded, metadata] = await addOrder( + this.prisma, + this.validator, + order + ) + const { isValid } = metadata + if ( + orderEvent === OrderEvent.INVALIDATED || + orderEvent === OrderEvent.CANCELLED + ) { + if (isValid === true) { + // If the order is now valid, check that it was invalid + // on the INVALIDATED/CANCELLED event for message acceptance + acceptance = MessageAcceptance.Accept + // TODO: set to MessageAcceptance.Reject if isValid on gossiped blockHash, + // and rebroadcast as OrderEvent.VALIDATED + orderEvent = OrderEvent.VALIDATED + } else { + acceptance = MessageAcceptance.Accept + } + } else if (orderEvent === OrderEvent.FULFILLED) { + // TODO: accept if there was indeed a fulfilled event at the blockHash + acceptance = MessageAcceptance.Accept + } else { + acceptance = + isValid === true + ? MessageAcceptance.Accept + : MessageAcceptance.Reject } - acceptance = - isValid === true - ? MessageAcceptance.Reject - : MessageAcceptance.Accept - } else { - acceptance = - isValid === true - ? MessageAcceptance.Accept - : MessageAcceptance.Reject + this.logger.info( + `Received ${isValid === true ? 'valid' : 'invalid'} order ${short( + deriveOrderHash(order) + )} from ${short(propagationSource.toString())}, event ${ + OrderEvent[orderEvent] + }, ${isAdded ? 'added' : 'not added'} to db ${ + isValid === true && !isAdded ? ' (already existed)' : '' + }` + ) + } catch (error: any) { + this.logger.error( + `Error handling pubsub message for order ${deriveOrderHash( + order + )} (msgId ${short(msgId)}): ${error.message ?? error}` + ) + acceptance = MessageAcceptance.Reject } - this.logger.info( - `Received ${isValid === true ? 'valid' : 'invalid'} order ${short( - deriveOrderHash(order) - )} from ${short(propagationSource.toString())}, ${ - isAdded ? 'added' : 'not added' - } to db ${isValid === true && !isAdded ? ' (already existed)' : ''}` - ) - } catch (error: any) { - this.logger.error( - `Error handling pubsub message for order ${deriveOrderHash( - order - )} (msgId ${short(msgId)}): ${error.message ?? error}` - ) - acceptance = MessageAcceptance.Reject } + this.gossipsub.reportMessageValidationResult( msgId, propagationSource, acceptance ) + if (acceptance === MessageAcceptance.Accept) { - await this._publishEvent(gossipsubEvent) + await this._publishEvent(event) } } } diff --git a/src/util/criteria.ts b/src/util/criteria.ts deleted file mode 100644 index 9c610c3..0000000 --- a/src/util/criteria.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Trie } from '@ethereumjs/trie' -import { toBufferBE } from 'bigint-buffer' -import { keccak256 } from 'ethers/lib/utils.js' - -import type { Proof } from '@ethereumjs/trie' - -export const ErrorCriteriaNotInit = new Error( - 'trie uninitialized, please await create' -) - -export const ErrorCriteriaTokenIdNotInSet = new Error( - 'token id not in criteria set' -) - -export class Criteria { - private trie: Trie - public tokenIds: bigint[] - public initialized = false - - private constructor(tokenIds: bigint[]) { - this.tokenIds = tokenIds - this.trie = new Trie({ useKeyHashing: true }) - } - - public static async create(tokenIds: bigint[]) { - tokenIds = tokenIds.sort() // sort asc - const criteria = new this(tokenIds) - // Add tokenIds to trie - for (const id of tokenIds) { - await criteria.trie.put(criteria._key(id), criteria._leaf(id)) - } - criteria.initialized = true - return criteria - } - - public root() { - if (!this.initialized) throw ErrorCriteriaNotInit - return `0x${this.trie.root().toString('hex')}` - } - - public async createProof(tokenId: bigint) { - if (!this.initialized) throw ErrorCriteriaNotInit - if (!this.tokenIds.includes(tokenId)) throw ErrorCriteriaTokenIdNotInSet - return this.trie.createProof(this._key(tokenId)) - } - - public async verifyProof(tokenId: bigint, proof: Proof) { - if (!this.initialized) throw ErrorCriteriaNotInit - - try { - await this.trie.verifyProof(this.trie.root(), this._key(tokenId), proof) - return true - } catch { - return false - } - } - - /** - * Returns the formatted key for a given tokenId. - * The {@link Trie} hashes the key with keccak256 on input. - */ - private _key(tokenId: bigint) { - return toBufferBE(tokenId, 64) - } - - /** - * Returns the hashed leaf for a given tokenId. - */ - private _leaf(tokenId: bigint) { - const hashedKey = keccak256(this._key(tokenId)) - return Buffer.from(hashedKey.slice(2), 'hex') - } -} diff --git a/src/util/index.ts b/src/util/index.ts index a6897b1..e3f917b 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,5 +1,5 @@ export * from './convert.js' -export * from './criteria.js' +export * from './merkleTree.js' export * from './helpers.js' export * from './log.js' export * from './metrics.js' diff --git a/src/util/merkleTree.ts b/src/util/merkleTree.ts new file mode 100644 index 0000000..6777378 --- /dev/null +++ b/src/util/merkleTree.ts @@ -0,0 +1,42 @@ +import { BigNumber } from 'ethers' +import { keccak256 } from 'ethers/lib/utils.js' +import { MerkleTree as MerkleTreeJS } from 'merkletreejs' + +const hashIdentifier = (identifier: string) => + keccak256( + Buffer.from( + BigNumber.from(identifier).toHexString().slice(2).padStart(64, '0'), + 'hex' + ) + ) + +/** + * Simple wrapper over the MerkleTree in merkletreejs. + * Handles hashing identifiers to be compatible with Seaport. + */ +export class MerkleTree { + private tree: MerkleTreeJS + + constructor(identifiers: string[]) { + this.tree = new MerkleTreeJS(identifiers.map(hashIdentifier), keccak256, { + sort: true, + }) + } + + public getProof(identifier: string): string[] { + return this.tree.getHexProof(hashIdentifier(identifier)) + } + + public getRoot() { + const root = this.tree.getHexRoot() + return root.length > 2 ? root : '0' + } + + public verifyProof( + proof: string[] | Buffer[], + targetNode: string | Buffer, + root?: string | Buffer + ) { + return this.tree.verify(proof, targetNode, root ?? this.tree.getRoot()) + } +} diff --git a/src/util/serialize.ts b/src/util/serialize.ts index 072f735..e716e7f 100644 --- a/src/util/serialize.ts +++ b/src/util/serialize.ts @@ -26,6 +26,9 @@ export const gossipsubMsgIdFn = (msg: Message) => { ) } +const defaultOrderValues = sszOrder.defaultValue() + +/* const defaultAdvancedOrderValues = { additionalRecipients: [], denominator: 0, @@ -33,6 +36,7 @@ const defaultAdvancedOrderValues = { extraData: '0x0000000000000000000000000000000000000000000000000000000000000000', } +*/ const defaultAdvancedOrderNativeValues = { additionalRecipients: [], @@ -44,20 +48,20 @@ const defaultAdvancedOrderNativeValues = { export const encodeGossipsubEvent = (event: GossipsubEvent) => sszGossipsubEvent.serialize({ event: event.event, + orderHash: prefixedStrToBuf(event.orderHash), order: sszOrder.fromJson({ + ...sszOrder.toJson(defaultOrderValues), ...event.order, - ...defaultAdvancedOrderValues, signature: orderSignatureToFixed65Bytes(event.order.signature), }), - isValid: event.isValid, - lastValidatedBlockHash: prefixedStrToBuf(event.lastValidatedBlockHash), - lastValidatedBlockNumber: Number(event.lastValidatedBlockNumber), + blockHash: prefixedStrToBuf(event.blockHash), + blockNumber: Number(event.blockNumber), }) const toOrderJSON = (order: ValueOf): OrderJSON => { const json = sszOrder.toJson({ - ...order, ...defaultAdvancedOrderNativeValues, + ...order, }) as unknown as OrderJSON json.signature = orderSignatureToVariableBytes(json.signature) @@ -91,17 +95,15 @@ const toOrderJSON = (order: ValueOf): OrderJSON => { return json } +export const emptyOrderJSON = toOrderJSON(defaultOrderValues) + export const decodeGossipsubEvent = (data: Uint8Array): GossipsubEvent => { const event = sszGossipsubEvent.deserialize(data) return { event: event.event, + orderHash: `0x${Buffer.from(event.orderHash).toString('hex')}`, order: toOrderJSON(event.order), - isValid: event.isValid, - lastValidatedBlockHash: `0x${Buffer.from( - event.lastValidatedBlockHash - ).toString('hex')}`, - lastValidatedBlockNumber: `0x${event.lastValidatedBlockNumber.toString( - 16 - )}`, + blockHash: `0x${Buffer.from(event.blockHash).toString('hex')}`, + blockNumber: `0x${event.blockNumber.toString(16)}`, } } diff --git a/src/util/sszTypes.ts b/src/util/sszTypes.ts index 99b9376..fa309a5 100644 --- a/src/util/sszTypes.ts +++ b/src/util/sszTypes.ts @@ -72,10 +72,10 @@ export const Orders = new ContainerType({ export const GossipsubEvent = new ContainerType({ event: Uint8, - isValid: Boolean, - lastValidatedBlockNumber: UintNum64, - lastValidatedBlockHash: Root, + orderHash: Root, order: Order, + blockNumber: UintNum64, + blockHash: Root, }) export const OrderFilter = new ContainerType({ diff --git a/src/util/types.ts b/src/util/types.ts index 88f1f54..7eba007 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -1,13 +1,15 @@ +import { peerIdFromString } from '@libp2p/peer-id' import { Order } from '@prisma/client' import { DEFAULT_SEAPORT_ADDRESS } from './constants.js' import { Color } from './log.js' import type { PeerId } from '@libp2p/interface-peer-id' -import type { Multiaddr } from '@multiformats/multiaddr' +import { multiaddr, Multiaddr } from '@multiformats/multiaddr' import type { ConsiderationItem, OfferItem } from '@prisma/client' import type { BigNumber, ethers } from 'ethers' import type winston from 'winston' +import { createFromPrivKey, createFromProtobuf } from '@libp2p/peer-id-factory' /** * Options for initializing a node. @@ -180,12 +182,32 @@ export interface SeaportGossipNodeOpts { */ export const seaportGossipNodeDefaultOpts = { web3Provider: process.env.WEB3_PROVIDER ?? '', - datadir: './datadirs/datadir', - peerId: null, + datadir: process.env.SEAPORT_GOSSIP_DATADIR ?? './datadirs/datadir', + peerId: + process.env.SEAPORT_GOSSIP_PEER_ID_PROTOBUF !== undefined + ? await createFromProtobuf( + Buffer.from(process.env.SEAPORT_GOSSIP_PEER_ID_PROTOBUF, 'hex') + ) + : null, hostname: '0.0.0.0', - port: 8998, - graphqlPort: 4000, - bootnodes: [], + port: + process.env.SEAPORT_GOSSIP_PORT !== undefined + ? Number(process.env.SEAPORT_GOSSIP_PORT) + : 8998, + graphqlPort: + process.env.SEAPORT_GOSSIP_GRAPHQL_PORT !== undefined + ? Number(process.env.SEAPORT_GOSSIP_GRAPHQL_PORT) + : 4000, + bootnodes: + process.env.SEAPORT_GOSSIP_BOOTNODES !== undefined + ? process.env.SEAPORT_GOSSIP_BOOTNODES.split(',') + .map((b) => b.split('/p2p/').reverse()) + .map((b: any) => { + b[0] = peerIdFromString(b[0]) + b[1] = [multiaddr(b[1])] + return b as [PeerId, Multiaddr[]] + }) + : [], minConnections: 5, maxConnections: 15, collectionAddresses: process.env.COLLECTION_ADDRESSES?.split(',') ?? [], @@ -365,8 +387,8 @@ export interface OrderJSON { export interface GossipsubEvent { event: OrderEvent + orderHash: string order: OrderJSON - isValid: boolean - lastValidatedBlockNumber: string - lastValidatedBlockHash: string + blockNumber: string + blockHash: string } diff --git a/src/validate/order.ts b/src/validate/order.ts index 9832b61..b145aae 100644 --- a/src/validate/order.ts +++ b/src/validate/order.ts @@ -26,6 +26,7 @@ interface OrderValidationOpts { web3Provider: ethers.providers.JsonRpcProvider logger: winston.Logger validateOpenSeaFeeRecipient: boolean + revalidateBlockDistance: number } export class OrderValidator { @@ -35,6 +36,7 @@ export class OrderValidator { private provider: ethers.providers.JsonRpcProvider private validator: SeaportOrderValidator private validationConfiguration: ValidationConfigurationStruct + private REVALIDATE_BLOCK_DISTANCE: number constructor(opts: OrderValidationOpts) { this.prisma = opts.prisma @@ -56,6 +58,7 @@ export class OrderValidator { shortOrderDuration: 30 * 60, // 30 minutes distantOrderExpiration: 60 * 60 * 24 * 7 * 26, // 26 weeks } + this.REVALIDATE_BLOCK_DISTANCE = opts.revalidateBlockDistance } /** @@ -126,10 +129,29 @@ export class OrderValidator { ) if (updateRecordInDB) { - await this.prisma.orderMetadata.update({ - where: { orderHash: hash }, - data: { isValid }, - }) + if ( + errorsAndWarnings.errors.includes('Order fully filled') === true || + errorsAndWarnings.errors.includes('Order cancelled') === true + ) { + const metadata = await this.prisma.orderMetadata.findFirst({ + where: { orderHash: hash }, + }) + if ( + metadata !== null && + Number(metadata.lastValidatedBlockNumber) < + lastBlockNumber - this.REVALIDATE_BLOCK_DISTANCE + ) { + this.logger.debug( + `Deleting stale order ${hash} for being fully filled or cancelled` + ) + await this.prisma.order.delete({ where: { hash } }) + } + } else { + await this.prisma.orderMetadata.update({ + where: { orderHash: hash }, + data: { isValid }, + }) + } } return [ diff --git a/test/criteria.spec.ts b/test/criteria.spec.ts deleted file mode 100644 index b44721c..0000000 --- a/test/criteria.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import chai, { expect } from 'chai' -import chaiAsPromised from 'chai-as-promised' - -import { - Criteria, - ErrorCriteriaNotInit, - ErrorCriteriaTokenIdNotInSet, -} from '../dist/util/criteria.js' - -chai.use(chaiAsPromised) - -describe('Criteria', () => { - it('should calculate the criteria merkle root as expected', async () => { - const tokenIds = [0n, 2n, 1n] - const criteria = await Criteria.create(tokenIds) - - // ensure correct order - expect(criteria.tokenIds).to.deep.eq([0n, 1n, 2n]) - - // ensure correct root - expect(criteria.root()).to.eq( - '0x53b3f895048e2d2c6f6ee23e9ff7298ede6df7bac908008750e9858ed8fa727a' - ) - }) - - it('should throw error when trie is uninitialized', async () => { - const tokenIds = [0n, 2n, 1n] - const criteria = new (Criteria as any)(tokenIds) - await expect(criteria.createProof(2n)).to.eventually.be.rejectedWith( - ErrorCriteriaNotInit - ) - }) - - it('should provide valid merkle proofs', async () => { - const tokenIds = [6n, 2n, 0n, 1n, 3n, 4n] - const criteria = await Criteria.create(tokenIds) - - // ensure correct order - expect(criteria.tokenIds).to.deep.eq([0n, 1n, 2n, 3n, 4n, 6n]) - - // valid tokenIds - const proofTokenId0 = await criteria.createProof(0n) - const proofTokenId1 = await criteria.createProof(1n) - const proofTokenId2 = await criteria.createProof(2n) - const proofTokenId6 = await criteria.createProof(6n) - - expect(proofTokenId0).to.not.deep.eq(proofTokenId1) - expect(proofTokenId1).to.not.deep.eq(proofTokenId2) - expect(proofTokenId2).to.not.deep.eq(proofTokenId6) - - // verify proofs - expect(await criteria.verifyProof(0n, proofTokenId0)).to.eq(true) - expect(await criteria.verifyProof(1n, proofTokenId0)).to.eq(false) - - expect(await criteria.verifyProof(6n, proofTokenId6)).to.eq(true) - expect(await criteria.verifyProof(6n, proofTokenId2)).to.eq(false) - - // invalid tokenIds - await expect(criteria.createProof(5n)).to.eventually.be.rejectedWith( - ErrorCriteriaTokenIdNotInSet - ) - await expect(criteria.createProof(99n)).to.eventually.be.rejectedWith( - ErrorCriteriaTokenIdNotInSet - ) - await expect( - criteria.createProof(1000000000000000001n) - ).to.eventually.be.rejectedWith(ErrorCriteriaTokenIdNotInSet) - }) -}) diff --git a/test/merkleTree.spec.ts b/test/merkleTree.spec.ts new file mode 100644 index 0000000..eb82803 --- /dev/null +++ b/test/merkleTree.spec.ts @@ -0,0 +1,55 @@ +import chai, { expect } from 'chai' +import chaiAsPromised from 'chai-as-promised' + +import { + MerkleTree, +} from '../dist/util/merkleTree.js' + +chai.use(chaiAsPromised) + +describe('MerkleTree', () => { + it('should calculate the criteria merkle root as expected', async () => { + const tokenIds = ['0', '2', '1'] + const tree = new MerkleTree(tokenIds) + + // ensure correct root + expect(tree.root()).to.eq( + '0x53b3f895048e2d2c6f6ee23e9ff7298ede6df7bac908008750e9858ed8fa727a' + ) + }) + + it('should return 0 for empty root', async () => { + const tree = new MerkleTree([]) + expect(tree.getRoot()).to.equal(0) + }) + + it('should provide valid merkle proofs', async () => { + const tokenIds = ['6', '2', '0', '1', '3', '4'] + const tree = new MerkleTree(tokenIds) + + // ensure correct order + expect(tree.tokenIds).to.deep.eq([0n, 1n, 2n, 3n, 4n, 6n]) + + // valid tokenIds + const proofTokenId0 = await tree.getProof('0') + const proofTokenId1 = await tree.getProof('1') + const proofTokenId2 = await tree.getProof('2') + const proofTokenId6 = await tree.getProof('6') + + expect(proofTokenId0).to.not.deep.eq(proofTokenId1) + expect(proofTokenId1).to.not.deep.eq(proofTokenId2) + expect(proofTokenId2).to.not.deep.eq(proofTokenId6) + + // verify proofs + expect(await tree.verifyProof('0', proofTokenId0)).to.eq(true) + expect(await tree.verifyProof('1', proofTokenId0)).to.eq(false) + + expect(await tree.verifyProof('6', proofTokenId6)).to.eq(true) + expect(await tree.verifyProof('6', proofTokenId2)).to.eq(false) + + // invalid tokenIds + await expect(tree.createProof('5')).to.be.rejected + await expect(tree.createProof('99n')).to.be.rejected + await expect(tree.createProof(1000000000000000001n)).to.be.rejected + }) +}) diff --git a/test/util/db.ts b/test/util/db.ts index 204e6b9..c1b29b0 100644 --- a/test/util/db.ts +++ b/test/util/db.ts @@ -48,7 +48,10 @@ export const simulateOrderFulfillment = async ( ) => { return prisma.orderMetadata.update({ where: { orderHash }, - data: { lastFulfilledAt: new Date(), lastFulfilledPrice: price }, + data: { + lastFulfilledAt: Math.round(Date.now() / 1000).toString(), + lastFulfilledPrice: price, + }, }) } diff --git a/yarn.lock b/yarn.lock index b03adfe..630fcaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -210,29 +210,6 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@ethereumjs/rlp@^4.0.0", "@ethereumjs/rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.0.tgz#66719891bd727251a7f233f9ca80212d1994f8c8" - integrity sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ== - -"@ethereumjs/trie@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/trie/-/trie-5.0.0.tgz#c98da2e09c082ae2f874e70bd59adf712f5d0d01" - integrity sha512-BiFv9hQZighlp4445kfG65X+tc8eEfpP32RMKzCELmSvChpwmtuL8Xuxy+aTYWQEMjY6s4gAVLX/J48SW7gwQg== - dependencies: - "@ethereumjs/rlp" "^4.0.0" - "@ethereumjs/util" "^8.0.0" - ethereum-cryptography "^1.1.2" - readable-stream "^3.6.0" - -"@ethereumjs/util@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.0.0.tgz#52363fe29113c0ee70c8e9df20bc713e00089720" - integrity sha512-Zz/Ovar0VU/CaYHLvigBTjG5PmkG0OzjvRjjoXRJbJcdWJoTCN2N4BYgoCBOZomKjaAT4ABpQ7wer6ZFOglvjg== - dependencies: - "@ethereumjs/rlp" "^4.0.0-beta.2" - ethereum-cryptography "^1.1.2" - "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -1247,6 +1224,16 @@ multiformats "^9.6.3" uint8arrays "^3.0.0" +"@libp2p/peer-id@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@libp2p/peer-id/-/peer-id-1.1.16.tgz#36461ce565371d9e897b49c38013f2ae9f200f38" + integrity sha512-frt4wRNme5fR8sFl6LLL22brfEIDR09ewE4ICaRzYC32wvI9LK4oXfMOytpW7YUX1nH/r5mOcJgmZaDW0y6nZQ== + dependencies: + "@libp2p/interface-peer-id" "^1.0.0" + err-code "^3.0.1" + multiformats "^10.0.0" + uint8arrays "^4.0.2" + "@libp2p/peer-record@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@libp2p/peer-record/-/peer-record-4.0.2.tgz#a4e8af46dab756308625fad882c378ef001dc8cc" @@ -1488,12 +1475,7 @@ resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.6.1.tgz#bad3e77008c7825a0859304ab8b4177703cd438d" integrity sha512-Gptpue6qPmg7p1E5LBO5GDtXw5WMc2DVtUmu4EQequOcoCvum1dT9sY6s9M8aSJWq9YopCN4jmTOAvqMdw3q7w== -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/secp256k1@1.6.3", "@noble/secp256k1@^1.5.4", "@noble/secp256k1@~1.6.0": +"@noble/secp256k1@^1.5.4": version "1.6.3" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== @@ -1794,28 +1776,6 @@ resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== - dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== - dependencies: - "@noble/hashes" "~1.1.1" - "@scure/base" "~1.1.0" - "@stablelib/aead@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" @@ -1967,6 +1927,13 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@types/bn.js@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + "@types/chai-as-promised@^7.1.5": version "7.1.5" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" @@ -2068,6 +2035,13 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -2078,6 +2052,13 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + "@types/semver@^7.3.3": version "7.3.10" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.10.tgz#5f19ee40cbeff87d916eedc8c2bfe2305d957f73" @@ -2408,6 +2389,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -2433,6 +2421,11 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" +bignumber.js@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -2459,12 +2452,22 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -2501,11 +2504,49 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -2631,6 +2672,14 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + class-validator@^0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143" @@ -2799,6 +2848,29 @@ crc32-stream@^4.0.2: crc-32 "^1.2.0" readable-stream "^3.4.0" +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -2813,6 +2885,11 @@ cross-spawn@7.0.3, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -2975,7 +3052,7 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -elliptic@6.5.4: +elliptic@6.5.4, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3270,15 +3347,44 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -ethereum-cryptography@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-util@^7.1.0: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" ethers@^5.7.0: version "5.7.2" @@ -3352,6 +3458,14 @@ ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + event-iterator@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/event-iterator/-/event-iterator-2.0.0.tgz#10f06740cc1e9fd6bc575f334c2bc1ae9d2dbf62" @@ -3377,6 +3491,14 @@ events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + execa@5.1.1, execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -3824,7 +3946,16 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -3932,7 +4063,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4084,6 +4215,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -4425,7 +4561,7 @@ js-sdsl@^4.1.4: resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== -js-sha3@0.8.0: +js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== @@ -4485,6 +4621,15 @@ k-bucket@^5.1.0: dependencies: randombytes "^2.1.0" +keccak@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -4768,6 +4913,15 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + merge-options@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" @@ -4785,6 +4939,17 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merkletreejs@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.3.tgz#ec527079a230bae0fb9b0693844d6384945d7c09" + integrity sha512-u17CAmpQq0sv5BoLX9X9ciZ5ps/Bk3YnGD5O7MiHnOHgWkXPg8Mxa8NSs+VS/XVAfBYkewhSnA5VnNzaYoZe8Q== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^3.1.9-1" + treeify "^1.1.0" + web3-utils "^1.3.4" + micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -4907,6 +5072,11 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiformats@^10.0.0: + version "10.0.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-10.0.2.tgz#e549ae833dac77edb534bece4adf1d1a214879f0" + integrity sha512-nJEHLFOYhO4L+aNApHhCnWqa31FyqAHv9Q77AhmwU3KsM2f1j7tuJpCk5ByZ33smzycNCpSG5klNIejIyfFx2A== + multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.6.3, multiformats@^9.6.4: version "9.7.1" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.7.1.tgz#ab348e5fd6f8e7fb3fd56033211bda48854e2173" @@ -4947,6 +5117,11 @@ new-github-issue-url@0.2.1: resolved "https://registry.yarnpkg.com/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz#e17be1f665a92de465926603e44b9f8685630c1d" integrity sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA== +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-domexception@1.0.0, node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" @@ -4973,6 +5148,11 @@ node-forge@^1.1.0, node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gyp-build@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -5002,6 +5182,14 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + object-hash@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" @@ -5309,6 +5497,17 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + phoenix@^1.6.2: version "1.6.15" resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.6.15.tgz#efb2088a310cde333b3762002831b79dedf76002" @@ -5634,6 +5833,21 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5648,7 +5862,7 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5675,11 +5889,20 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scrypt-js@3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + "semver@2 || 3 || 4 || 5": version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -5709,6 +5932,19 @@ set-delayed-interval@^1.0.0: resolved "https://registry.yarnpkg.com/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz#1f7c065780a365f10250f8a80e2be10175ea0388" integrity sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw== +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -5903,6 +6139,13 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + strip-indent@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -6064,6 +6307,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + triple-beam@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" @@ -6241,6 +6489,13 @@ uint8arrays@^3.1.0: dependencies: multiformats "^9.4.2" +uint8arrays@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.2.tgz#163bdbcf3f7403b0781754e0436c268548b237c2" + integrity sha512-8CWXXZdOvVrIL4SeY/Gnp+idxxiGK4XFkP4FY26Sx/fpTz/b6vv4BVWELMDzQweSyyhdcuAcU14H6izzB6k1Cw== + dependencies: + multiformats "^10.0.0" + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -6280,6 +6535,11 @@ utf8-byte-length@^1.0.1: resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6340,6 +6600,19 @@ web-streams-polyfill@^3.0.3, web-streams-polyfill@^3.2.0: resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== +web3-utils@^1.3.4: + version "1.8.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.1.tgz#f2f7ca7eb65e6feb9f3d61056d0de6bbd57125ff" + integrity sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + webcrypto-core@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.5.tgz#c02104c953ca7107557f9c165d194c6316587ca4"