From 91838e7aecf3eee4bde70001eb60811027eececf Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Wed, 29 Nov 2023 08:46:34 -1000 Subject: [PATCH] Add new CLI command: Search --- bun.lockb | Bin 342400 -> 343464 bytes cli.ts | 170 ++++++++++++++++++++++++++++++++++++++++++++------- package.json | 2 + 3 files changed, 151 insertions(+), 21 deletions(-) diff --git a/bun.lockb b/bun.lockb index 43fc0ec32e55fc482d0e3f9bd2a3452b314555a1..00d627a2ce70be44ca95aeca154762d4d1453387 100755 GIT binary patch delta 63354 zcmeFadz?*W|Np=C9=m3fm@*-WNfVNyXht(;8%!973^`K`CNm6UP7aBgNmD2^t#omB zKv6oU5+$NiC^2;_I;)h9QYjsMpRcv9?VkE{-=EL-`+59+f3+X;n)mg7UWav^*0rv+ z_v|(0-!)kEOM{!vZT-QLfzKBFa!Y9GZzCJr{>kAtE>F#Q?8URLdwbQSCeK}M%HM3% zIppXyq-sdBvKf72JjZeJrx#~W8tXX4x!FaNVe5%#;5g;?VB@iiuyNRpwH&7&wxl>e zZ#3y=^u0u{-e3z+Qr{a#rJ?hV6uZ3f9Fxy^KH$3rYp>>)8y$Y=%^9 zQ+QKsGi)qY6*?4foQBxqoQYF%iX5k99mfgdPtVTJ&nqr*-XKu@3;O*9qr`ctA@!8wvLotJblub33(+QNUwBlY`!tY#l ztjhnANkEeFtLPVa?eYQw-axy{sm|&IznJ`->@li&2YkiSd8H+J`NhR&`0+Vd9sVrh zWt(Dkm;hGuba24$kiJ-PZyM3%V{)_eCs6L_()|31g^p8Nn#Wn=IBgTXW|x&uEFL#G zd(4EQ@L7I+O-si)hXN*8+ZlTEm}{UOPrGEVu=7kd3zR{kjom{jHaiO>vurIYV>xX3T)HJjlB{KmvLw*FcQ zkpFRt<1p3A2dDb!cfmE!+>ZWbbw*?lb`v+*iff^Fux2td4V>MIqNXKL;?={E4)nij*b<-?oq$!%UnT>mLHTN%ah~-j zV3jcg%jr-)d4NB*XW*-aN6+`|dstO?>ZN`IhG12}>j(MAxsUjG{DtS!|5~k|9qb=? z8CD0l4l77)YIE3Td+{gZP_ zUI}NQzv*;r?E4EqLSC{#ve}vUiHz|8kfmV;4;?bpf`D2~Cv;Ah?gw;{5#x}r? zw|ubmyV>~mmN&Khcp|LzJu-#b{1(~DSmS^47xRPa)pU_SOF{OQ&ogH-|ju}YVM zRsXfbsv>bV{{n16)V{(ce=T>};!#h}=c;`;` z<0s}6jmu$VUnQT`z`WwNsouT)E}^2Sn(&YDrgB- zCuAqA#^oGq4>G{<_@`X$A7B<%GwSFJ-?pCV#}6P~0{moI&6Lka_-Et?v-}fegS(_o zv$Ffk{dsaHRs+=O8sBe-Rds)@@T;+qc=ellJv+bHDaKc|4$k)1gV(U?hqYK$yWFO) zh1GP5UZn52&hJ+)Ty3w+&n_ExGeFh59;=a!?)jp7zzn!XcGet!Cfv#a)UJ3679U@n zQ#{7ujK$Z0U5r&fj+*CJBprJiej;4?{3&tBQPiliy>Tu;-Ar z{2UVMl)VP06?Ur~pqCi17WhwNRgrtKntG|$zRjtv6>%ZHR=k2MbC{rPPj2L3v`^>M&&O8*SLRI`+m=bcb%{Sz z8{9*68|=R9ujs?WE%CKx6#vsPi1@bwG!g4mi0er=%n=r>J2dIwA7&CY5k@t?=XPTD!!v zoZ2xK^jzs5C_iV)Bo&s1uL7G`n~2o_jLpfJ+?M_0_jmgh{qsg};k|yo1H`MRp2sF) z#}~Jqo;@+&$u43)TU4C027Y2H5%&{NOY_D}Vr%L+%kkC1=*imVe&3I-o>j!_+&S!S zuGcVc=>xvUSg`G3$ajnlKFBxkI14XM?iImO;~oogeT*`n#rP&!!6%PFSEIBEgu zG(TU1d;N>A>Th`1_iuL7>o+X>(*iIqdfsP`_YUrq7Ui`a&*Hn`QUA2N8+$6H^r1AZ zbLV1pww#P@g1zT4|FjC@t2RH~<+tXR$Nk#O!KxNrpYZJ2py{pD$?b z|TZa~oQ8LH5#Z5S=VOi77e)5|)`Ta4jpu~$k<9WZD zg;;fWeXQ1uTGs#JIluS=)<)0n$)yv$igw=O=YOAgjmj%n_4j(Lt{?MX^vW$OFDIb> zh!*tcS({IM1LC6xxC~$Ix`%?a>V3S`AGllbHGrSkcC(|HG7KQA4OY{B5=U3*qpJOW%fhOh z=&3(yqg%Vd>16|KC8Jo|p0<-GjEnlezwQ@z+dutA%);ujo>Np*P}DYOn%<&OH4c#O z6zutL_-EhKSoK=FH~n5sz-o3r3|BSmTSA#^%vgh`*~#EOgW38#a!8 z&!<1X>mO@uK}p-mMFo>@bqnJgmd$0iDWYT6iu9`31nnCNu5{LZ;iqS}t-ZN(D)AcgI@o$;1nBU# z1*6A1KYr;K_}c+L!P>9vaN79jb0}sRM09WRXD`f^dnfN+ziNAO`r+nw9i@vwVZntP` zPKlFl^Cw|de!uVi2L1V}z}Z^nohQ+n{`r9at{~l+6){xN$=d2i|GeamE{DBV@yYla z^FOzI{1H23^gx*SW*g~$weYX@>DiNt^P-pO=vff$iCVw-b7BMqsz)xt>V%JWZFC*G z?pHru3v2h1Pd)Pc4}JxQm)+*qZ3KE-OXjbbcy0qDy@a3;18t4R~KWBjf4|J}M> zO}r}fwG;3fX!il-EP7gfofnB$!{ef}b_GDE%@Vh&akIb|?&`)3%j(w(c-^!k#xG=n z&E##z=>DC=tCD4K^+L3gW7v*qH^V&jF4ED}Iodma9+vR&0q^1!UG*pP79Uy5oJ(W< z1N?cWPdF~%onn7p?u+m8doQhaz`G2;Mk%LIv29q5_d2X9d<#~apQa}Syt}4-bpqbn z@e@|P-Mwyr-n*3hTR?LFr@d!~o#-drfz>djVw+;e5ikEzta`CKwm!B6HUV2&a%D0> zXHNacPik^&O#NX+zn=KS-R(Z=a#PPnttR9oKECSoBd5f^^~=`bYkLo$>MrY;8@SsI zUl-O+cygpvlt2-x!zQF70_U)Sz z?#}#Bs*nrkkl}8T@DbPru!deUPh;s)&X7E+u#FTC!8*fE^iq6oQylMk7c#}$Mbn3` z#AB|hlhTsHcj8@)=XGGl#!w9`wpP!EOg##4XM)=QJ! zaAqXb`ZV4`aCc;+ga;AQkP!EFax6|y-(lwL#T$U<&zv@#q!&fKz$|xe??_<1yRCO5 z{4Fu+pnzMIog90*-$=j7^YGM@)H#yGeA(6~5j9|?D41?mn8dNXA@ zp5G13jnLzGLv+}1?KAzM_U2@$4_=D9qbwzSJt2(~ozp)lydFv-xejK7Ns1lEN+9Mo$^yLKE>iD0g@{A zkv~7PtyfFaB(T)&H9QiohABPc&BO|~XF_P@YrKxoRdB8a4(tB0*L*i&M9bj$=ewCB z(t>9tyYoh*h4U%Ej`}s6aU+@a5LG&;vp3YKlegfHObN{+)Ya{qniBq)P=Eip)U!8< z`$fIL5_j&XNcbn1PDp!N`>GMCS0Z+~M_jy~)R{VK|Os z5xmsx+bbnBoKSbSZoib!bA)o;9ivlg(KmhEzLAvh6hcG2gQ=H85yu(ndn1y9*%5d9 z6={Jd+;DazctIC8GdnFjt4p-{Rdm~{cvt8=4V}vnXQ)!4`Gf{36!_4cJ30~?+m%Y{ z@ZrY@`Nz@{TDzN@IVLS!(9O|@SG2Z@6MqHXaBmX*PUs4clQ?u4!_B3W;vexs^GBtG zos45siPf(i-e50%b$U|px(qinCoS|Du(R7YCnazAgZ55r?)z|r>-8s~+E_3|#vunmOLbg~5NWV)HTX~DEicV2E< zXagza{cxXPM9JlX?l+bYuc`vU4mk=7{v1bTnxjXVwLUk`;%i+$?O$p@_qSh3*jS#&@ z=v1cO5HCj|p#qP6K!~m(wqur!9Dx{%IgsUh?hp&?$)+Yj-^9(DsEKlW`xJ-kxS zVCJNF?HWZW&toqV%JxDnhebnk2=(yl`#B-Mt?9$P>CQ;ZcY75_LQgWsJGp&}Q$k}# zF^Al`y;8#W6XMh?Z{WstO9~uxdzD0j?JjfYm81oyUgmBuNeevahD#&ipD#Ohv1gG= zWp~GE=dUxt>n?YSS4V=~^W5!Mr-e;k zbamzW8QAIeni&bjj@Jk(Q#V4Kc*QB(2W+CakhLm^UIl11_68_bE8J<$Iqa)wvc-`^5{X{rvvY*f2trp_htIOBP zu{bQ%O2{?!BfJaoxS-K(Eeic2xnN`@1urjjYgeWPR=d3_BjJyUQbL+HEGc+uk-NPz zEj*#9<~99kJQhOr2NT*Ub{sAO{$(*3DR#GCmlk$`{_A*{~@7%3d;)S^6k0q4p zWz#m{VLU%Q9TxrsPX}O=LEq$*`mL(v?Qegc!Z}Zz?_E08zd(3i=s~>UZrvMFW2Z%T zs5<;mypisFA2a1`-bT|Mhf~vfQ~u!n6OU7#xa#4_u~*ehxBzeHv235eN zi*{%hA*L?Z%clsbG2Aq8nK|!jcixR@p+#5IdhO=I?<+(!8`6@baN5jh*D`3KYw^Z- z^Z(Ohq0CuYE19x^BW|w+k=cY9S@Ft^gJeREo1liTa&NGNcfMwv9>L4?lt4j5OS6n;V+j~!*Nq~MY3+|0gd zp?24MOLrtCR8ELJJm=CzH+)MZ?9B0JDO2&{q);keSFh0P30*`n-u*{tGai?@o48`n zwJCyybKQB1(n5CwD3E6CBXos&DKu@K*R-mX&@MtF+`c!bgxcKT6>)P)_+dgSni^Io z*TT6_gA_ddMt7b`3q0a(Gm%i;`CgARb{T}ad9AB9Nr5@;+{Ib|wk?i?5*FxcsItom zaRuYZFA}=atBt!bTAS|(4R&`>n_f3L&QveQ6;*uX>9J1;QA3)Relxpvk3B-@Dz`2r zw|1G99=o1Uk&Y4k$#pXqq=kClqKm8+&c_J(OXydGxXi&iEQ*F^5X$q|$AsA9u)ub_ z_1Gf9guDt*)03S!ySEqc&Ubg*kXnm?znrHS?P^r)0z$pL&|X69H||LdEOzHDO$#qt zOeMU2Vs8}Qg{MAd3GTzDZi$<@EG^u12?ctP6)Ai@-i3JHtzh_dJgsE@{bt-he9vFc zFTqPbmhyT$3H68xA{|%GC9H$yndwgx6Gg7=?F2p)d?lu?v4AkskI1j zZn0XqgxI-iJ>a(Ib)Pc>>fGUTub5D8yol5 zjmJCR+vDG^(6Q>gisvsG+Dj%Z^~z$GGlmemH~M-Vp@EpwbCg~Edf^`s0=7kc>) zJijYA|3k0iF%8C~1W#P-VF$! zaF6dXwxFouZN$) zy9m#(&Ubj~!n$tU%}K!y_q(+p;il#OW3!fP=0kWIDzDpuNAGv%@g7&o1AdwQRlfjF zJ;Y2Q!y|agz$JG;a;%NwTAq>=KL5e!+@+zx$q%}jtJA{w0M$X1#r5<{JhhO%=i-0H zL%v6Cd$HHR^M}8hcOF>NAB%+FhUw&>L;EC!TR-f#&YvJN@zj&YyK(gEi#Cq)f|8v_ z{98TmL=E$3klp1R6EvoCzqZ;4k}u;fuUb4^;f8mOKI zGE+jU{UiAEW)R*;;<$JIEIAhE5*)gSlAXsmRXk6WIT>DAC#Z;LKVplv3GVfKfUai1WQyC^&un$iqv$TAf9J|&Z5%1g% z<>6iA?WgW0N-}n92d3}G~I=}CkMBL!7!=rt?QF`1{{uJ=n&{VvCjY0{Y z2AJWdPEXW~3w?>_9XNc}(|#{7EbOpy@pyNDlD895t^ELGl?oxa-GymQ>Tl_{ZCo7Ib2 z8xONx6oj3Ffs{s^@|&x6uuEp zJ<7RL$(f7S56_?C4PNvw^E7=^ax9MO#Bq7EY_B`_rAWBROa9UQdR~sFKIMA(Q*tdF ze>`^(>JMgN`YAbfYjk1BdfIdR%2zR(cM#RXJAjsi@A3S#O*c!a+uZHj(!x`>`NyNO zWLS@m47a)*|3v zkwqSN`AK zZPk%br`PBb@36B8sha*=T!Uvj_W2|}-`w^Z^W}BFV%|+_aM&p+v^Su|h8yVOgmYg@lJ z{C5QD{b5Prop=L?^BdmfO@FB-E+;887w=*pVF%j_8pp33%@q8)f`y|}81q;TAO{-M0MP;Wfm zE#@7ug@kk%e>eD&P37I2hXe2XO9uOf@}zKkykjXtcj56KE|-sAE%)AP33d2@#(KPz zkm|5YmakMS6B}EgZ&WaH;|q>208JtB-5e zU^Jeen$s(M7hZQSZ}pJmSe$-1{&;uT?@xG6b;fHJURUC{KC_^2!t3d6Nl*TS%|4t( ziK(B7m*u6>qPh*wUsUDQ|CF~fiKCAwZycWDSeRKR9>(*_`+<~8xc65at*oxRg5RPS@n1r1&35<>nbLrVy0 zIQ&&(H=a&ae}QfNg+IXl>@C34C4s5K-UmlB@i=ey`V*ddluB|@?DVC7%K1f3#Pj=C z`#~H{84}XAz*o`ftW_@w&##GgTE%$E#>J1gO?YZII~%;8Z9Z>L8gBQsAII{{k~JPL z;vJ!CL{j)ZyfiPLD)tLre>{5cz2w+~HP@)S@kV-4I`~mM|4gV_loX!$jbAZ;6}-=S zbP7$_kN2;+lz1pQw{;R^ThCwH?!X(&5&Ub=cX<9FYX{x-+h|=_xxy3h)VF@h<#_5c z)`NY??%acsaI^3HymTV(A`Sb_t^G|}_%5I_u~2ZL?6FC_Yfb2+@2Qq|<2#a&KNwUn zv<#0kg%3*JAfyI+`}EL>hc!EN;`AdV&R&)G9j?PuZ?bdL`wn;)DplxbLjDf4!w-H3 z_>0$MJRQyR_yB6|cac!qkKXdZNjsU)rCw=V76LE0y}plxe}fH(vT(_fXlWYtN3BP< zuwH&C&s%+4{p5ECN12@*i=!%feG^`WcfRkjdcKBttnuMfe)gN@_i{fx*P6R%7f&apJ>`yhnxYMV z^P9{tvP2BTQ+H4b$6JYak?)c6eVdY-7LMNJ_h^|aWfWefmr}F&Uc4*ts2L~7@kjk$ zU=VjD$Kt5j{&>x`Q5=rhu>+3}x7kxSmV>8(X3x*o z>JdCOz`uk13eOhOKPlKbY_``5q=l~!`;}nfW;9;HOY!noznK&a);9A(r0LI}lWA1g zCtktZLU=k)xgTax`yNj@7^9I%;q&-=F+0(?zD>u|6@o^*nH28BADbzk?=8bqnZEZ4 z-et$U{`~owI>y^zgm1$0yHBNj@(1sF{{HM(DS@}lwphj}zMkJuujpV-J(C%x5zC>v zyi#o@+5xDuzJ(0e*Yn zm{r0nJkPf(U<^`+O}AWD1BtK4%v`qx&Kx&bNOjW(UE{P{@n3$1?>R*iG5e+yPGY?+r~k?%Wy zWmS+tDtNI?Co6x6_5aF-h`ZCKTZ&aV%aLCHvSoh%tOTlttB?x559uW<{-7LQvMT6d zIlN?*{t-F6YT7XVI* z0NH@as24cTn<~34u4&aFZ(1(f39%S>^@vktc*&|G8(1EXRX%-tOt!JLO>F#W*jV_P z)=vyDRg|zLK=nKas{+rn3EE*5f4+@Rvhf$$_!R4>VRc4y#VUPwYcIxXMEctJEXxOC zb-bYghDrwWtZ>&zj z3L9V3>HyckWoKj6Rh3vJon!rZ)}N16x&?~-qxE+s3vGg%Yyw#YUF+AhYLT&AR>6Pp zOD$Z6)q$2=ojnPw95CZ<+Au?&Tkg{Ppp@e zW~rcnnrE&2p!H?t$6&on6;|hMLmU4`JMNDWO4Gz9tZ6mY&EaQZFShZrI#3Vm%c@KJ zT3=Q@cL_FN?r6+u_h4gAJAT#oR;YnC;a^!5e5sB9pID_IWYf#aA8hRqta@&^^+(jA z+f~zSfL^l7FxvY6$tv9#n@&~*Uuk_=#gD_P<$2a0Z{uYZKcN<HxE?U(+gKrOj|XRy{T!tE5%@Qoftz zSS#PPeoZT6ESFV<>MpZDHehx%;qDpi+-0$>j=#eCvMPV2^=0MXW9_}xuCnp6>W~Mp zEwQg*PsDy;<7Jh9pS2%qO6Wzvi}(o3kMpVZ4_N<8L0vWov5tJ6EgsVVgbECFDqZ)VAQLo zRsM+Okr2~I3A+JQkqm2l*aS7L;(J*xs|xh7eod`R`BV<+J7_3h9e5?{owDGd?Ct;Ot zvgQ91t9*qvy=*=Fa^E*Yng{Bd{N`-wl};F*udL#)C0?h|4K|&uYBe9L_yt&v z>&@18v3kiW{ub-ku=b568?gwhgMp~Uxn3pJz(Siy(Lx9 zj7kVJ?4|UN+Vua)>iCb@bh0|`lUU_{3R~A~pg8ZEy$x5@+>X`jKUt-F*%tGv&9~F$ zlU4jK>({j6)o@kob(`*=-d!<(fcKKswq~F8WtH(m>&wdj2&;njV>KPWw(+uR=eO3E zRs1hl<@?ogS@pwFo#84dz*(RKL9Egoud~8h@mTBEw8~f8@|srs1h@`R53Bt3ZMy$r zQ~zCr%@}9nWmV8g*7vNL-y+a55HuTF*rmF$O?9fZO>F9#R!ejX%VkySnbwz8@NCQ5 zSYFerd)irE!}5X7Uq^V?gk&HvDR zu=@K`3OeF)^$4$;RvmSPAg?QsMt=pHlq&DaGHPQv9b6A=nSH1=2<8|IsSz-=9+W>vPRdC)A(v z|NfNX?@uXoi}v@Y6n}q8@rREuG%0F+I-vzazHZT)W6#3s(+Ry~wE^s5eOcY4>C*|l zWVPS<`%{X)Kc)ElQwn=h{QW6~mWIDSrTF_(ib-5kba|MpYs>%8>T>hed3qEUd#q@FOIy|(Zf8W8g zwjbO$q;1JHDIZmx^8NhtXANIIvT+vqWaPIV5wH>6M3>VV28W zZGMuOX|l#+W|{kB%1mGa1;yr5P|gGjsxYes)(OPt17@4-d_e9*z!rf@6E_jiXcC}w zBH((nSzxO`;v~RaQ#c7QtpKoF;0BXW0BAKCP+0(&Z>k0M2y~nbSZFFH1LhP0_6t;* z_Jx4tBEX_TfNS;%91zGT0xU9BMS#V{fWrdDq!$BvmH<{31D2RW0!IV}l>lxt%S!;O zN&%r#z#S&56fkrOV2!|16PN;soeIdA0$6TV3#=1}p9;9!WKRX;P6KQaSZU&>0UAvQ zluiTOYc>mP6-b;8xX%<$2TZ#Puv_2(lW-NF)eJ!8Re*;~wZI;Mjxzv{n2H&IIadSr z3#>NnuLdN~1T4B5@VMD0a6lkqCSZ-Jnh97u3vgIqtx2B+=vf9>IScTVIV5mIU{D!g zy;)ucSXB-Pl>;`Ita8B63cwnHXHB325PJFPnr)K&$Hjm6d=UrdnW+K*#Flr8{#YBmdO6-ZnN_{9+uSE&{B) z1@MzOBydDv&?3MuX89t(s#^h}TLHhBtXly?4PcGHQ4=tL*u{Vx6X+cb1k7V5Fqn_n z!;4v8VobJ7E%TI2$iywd9B1-mjyIcSVol?JV8W(QrncE8Q^zFSM!BtSr`*chI8a?v z4G5fQTHlVTXDVdso4qn|ru`k5lgwP1lg&Pv2By=Un0QkqbBg&)rlCn+ifLq)$TT*G zFy_cIN*}b0gETSAmjPBS2ZWXbnwqTTfT4E*)(A8+fx7^)cLQ?n0wkE#0_z0g?*_Cm z*>?kSR{*vMB$~JtfJQ3;r7Hj}&1QkE0*NaDtxe%dz_fb+y9L^qgnIz3?gdod188fi z1@;JZycckuskj#~XBA+-Kzq}E6(IROz@k-v3(P)&0|FWM0Xmwh`v8mY2OJhiGU@jN zdOiSHc|V|&IV5mIV9*1A6tnyRz^VrUp$7q-P1b{ep$`Gp2t-WaAwcZIfSiW_>1MUS zI)V6y0o_dY!+_jJ09ynyOxz=YMvnqY9|80*n+3KCBt8o0WeOh!Oj`}uEzsK}tY*CW znCUWoO|?uv)A}*YC8k2Azu7C3W!gWE8DQqh3^e;>E;XH=zzi}~GK0-$GDA%I8q83$ zL}r*dgfT~+{Ec8b%1QMT40?( z{8NB2Ci^Ks?$dxR0y!q`X+Wd(fYPS{7?b`opyw-ql`jL9m_q_b1O~kVxXmno1+Z!dAhZK;hsoLj82Tz;jlfb9coh)4 z6Oi*NV7XZ>uudR;C*W?Ay%UhT3$R6CrHR`GXjBa--37SUY!=umkXQ}4&lFYzro9H( zE%1Ozcn#3%bwK57fQL-Az#f5)uLB-26|V#4{1dQWV6|!gPeAf+z@mQw9yj|04hUrI z2COkvy8(;e02~%rYtr8U^n4Sr@(sXK=8(V;2 z*JOPJ82T|_jllaR@G&5EKOpC0z&^8DV4Xnxe!xd2dp{ue6TlXM{U+`cK%-9qrJn#k zHJb&t3M76C_{N7y)0l-(LT40Yr$Ik!I=Z)F9C-Iel+P{0(yQ0SotO3Cv!;Ph`^w)0Kb^! zUjbHq4G4V=_|0T}4H$Y5utwmh2^<8(egnuksI5fMJa&-fdYwr8HzbKM+24>P_Yh!< zK*+=$0yO#-PQeA76sX8EZT>A0M}#$@H?8S0AO(ta9AM8 zqz3^#V*o3IfKKL+z!8B#F@O}aJO;3;79dm$(Ai|w0t^iS)(AvQAOwg#4v-T9q?^?O z>jdJD19UUl#{qJW2W%0@FmcBN8pQ%ij|cQHn+3KCB*p@InZj7Wv@l?|KyQ-}2DGXT zs0;)8nreYP0v&4uE-@9g0dwjA_6ua0_H_WsCjb`J0Sq+z1P%yfoB$YPs!jkbt_wIU zFvO(S1@t@-u(B>-m^mbHL}1W~fDvZ-iGWr00HJz-Q6{S%U}$~78iC7Apgtfr4vk9o0P{_?z#f5)%>fHdMRUNM1i*fQD$_mzkbDMUQ3Aj<`veXMWSjw5 zWU9^pEN%ffEMQD}3qa2^0V`VomY72VM+63)3AoKHKNGMj5fDlQ++ng30YlFMtPxmh z0%rkYTLN;<0xUPH1=b0~w*=g6vReXjTLHERtTb`00F7D$N?QT$HJb&t3M94$+-C|~ z1E!q~*e&pYNjMwOstus>Y`{aNT40Yr$2NdROhp^OoO1yC1y-B(=Kzx10v4SEc--t0 zI3SSG7O=)twFN9b7jRf$tw}!@(DOXN%5wovnL`3c1O}Z4SZ|h}2Uyh(5NZe5V6xf) zhPDT+5qQ=Fv}nbi56Ec`*lbn{tP_YoAMm`%J|B>K0bq;3787>?piu`v=>>q7%w~bD z0*M^}+e~2xz_gBl-2yM0gpPn#7Xm6f0(O{cfjt5pF9hr~6&C{LBmwpdRGaomfaGMr zq9nlUW}m3#=1}?+p0JWOoMeZ$;=2f&C^f4bUh8C`|)= zYBmdO6-bN#J~M?8z_c!a-2z{jgf4(q>43^EfUiuoz#f5)>41Z#A{{WND`3CCA=ADq zAh{c0QCGlsW}mY63j~u{{AfJ%VgLV$5Sbf^0rS;(L-L#$@*-Np3H|7J-n7 z>jh|(2`KFaINod)*eZ~i2?(3QOu)3>fZYOhOhRu!t3H6r-hjHMT40Yr$3B31rlJpE zPG7)&fjHB?FCe)eU{PPd$!4Fx0fCHufOu2Y53u+Wz+r)gCjAmX&;EdwmjD`@Ljp$x z2K5ItG0Xb{R%HP~S%9V{D+@4m0AP(kGZPp9h#d&X830Hys|D5x#190tFxdkExt9XA z2qc=gO971r0ZK0gv^1LqwhAN;0<<=Tg8wsJx2gm4hM8H zhXjrY3>pDQG0R5)R*eLNMglsUtdW4BqX26JA|@~j5PKOQXA~gatQJ@&5Puns*?`>wy-h+kpw(zVWj3I%sTSBH z&~Y^25>qi6FlP*4zd)90KL(IIHdwdMshjFNbpFpjx}j@ zo_uCkLE?w4cl@5vF!s~<>5eD(`tO=Fwo4U zSl&9>Co{-&8jBgcwrXs!Wia?jZF6UF@adZ`tQDTjKVqMl&4W2i#WlyK1f7 zR2*CvAc6T{VlXz?HBlMP#jo3#&tiBmL3sykW3#+CIAiUKNx=reP$M39cH&yV>%kiN zRNTY0fRY_j1A@TJg<6UA9)ph^vYmt{3m>CpKreSd5a4sbtLa^rn)@% zK(Oz%YiCsihX+Erb17dnUr0RzcbUT3!IMKvcofqqYv(Tr-WE{XZ_#1u_UCa(6j(kS zTVFZGLBpk!3dR%{JI;@$^PJ!fp-szeWJ4lr=M?+@)V=&JwfthQW~uY2?e(i@vC4Rv zWNRDU5bPNf*kiI61W%5S{txgm`FZE+UzDp;_N<+|AoxHa*kFTt{vPG|;HKcn;~Ll7 z%MOm2P4_FJYuOK7hT4|#oJncNFK#-AvEYN5XFbid7f0LG8^2e#42DSd8P z7*4NvFFiCy=@?39uaBIsEmI?Yu}sg3QNvC^k6Ly}On)M+?^EfkYpT$7NB;Y- zFafP6pg*v#YcrogxDQO@uSemiz!vCYn8v@JWoHuB(~}Kx9>Su$ z%gRo*ur2UCo4JW)=fXa*3H7WV6?h){+_I)H)wLb^!m&P9tzrD=QJl_T%g(Xsl3*9WG#T4kmQ1*V zO?NI#mC=*Y&e2y^H5=R6g!@*A!75ET?~wVgSCr=Jz$NPT$*_4mh~j8ZvbojyTbUUR^@bg>>3Z0_ePBQ7E6XY{(~foK2x0wkq+Z!J-B7~KVVYy3EgPou{|uXOjD^EtEi4;r*$7yD z%W^E!11@XBG#NFaROwMjPw3EV988tI49&MJ&!)Q^wh*S{JL4_9g76%|dQGq_oA6x1 z5o|tI(WB8y0$s2LSRHr_dQ_3TCR;X^uzE}LsnD_wsU=HR`q%mR(QypkV~?b45UXUXm5W3>VP^T?dy}!eZ*@!udltF zhMwhId=5R2UO-#Wi|8e^6>Uc^qgT)l^eWnkb_Ka?R1&|35`T7v$8ZbP@DJJ1y<8;wS~3Tol%hjdZXV%GwlX)1=r^e9Ur zsLM(Y?YR?`=!=u*PxV)ei>eQ&5A z>W_M&UZ@Y!_l>&H2tBSskFZEVdZdMJcOFC!p-0f8wJ2z{*)cq(P2COnx}|v*Z8o71 zG0n=h6V%PdE9h0U6X~Wx_Yn6Y-8aObu_bS8bDh+3n;bj+n@%gC6PW!hKuM_K4>l!kOy(HQBb zp$RIdZ!6FRgxe$UX>9lo8iIx*-OU^%E(<#V>G3CR(Yfe6bQ(GxHAml(?t64t8-pJR z{D^)+KO^1lyuq^eCekg9ZeiX=@1PHm{!V%_R(C9)qR)`-RCH&eI}tr+=vJgVki}>T z(v631H10r4k!~<@(3QF|7)KxvjYkvEFH|BMI~wU>Pb1JsGzwjgE=9T<(Vd2FB6QR6 z26_|iMQ@?Ek!})nQ}8~z0i8g(b&;MpyB~W1eO8}epQAl!FM7*Nzl>S0`+-TQ02Ly( zP~MXvufUE*W6+7H9{Pat^v;MLy?ZL!#6;VIUT1)wLQkXh=oz#DZA8zarDz$_bwt;V zn~|Mxb8k9MU&OS5U7**h$p)Ris_F9<3BcdWc##)E(W0T(kf!L{;co z-I-lSU@kfy9iXt!(E!3-P-7I28X`T)@D_9{x|sv6LiZtUj|kOSz;GJdT_ccNQRE*gX`KpoNf z=p57*z0Se(cECJTOhxp*r5+8Thgs`xeFa)xL%LgEigbsrzvACTW%TS#-E=oZ?I^SC z6@KkQEm3`-?!FJBAJI?fYor_FL+DAg7CngWM$1qknugSnA*dfpLYHSj8zrJs(Fy1y(tUz-qjNK= z;=na4aWDQxq_XsIvbsq3E2`X4+lWw7JY}lM~Bf5XbJiU(yfGU9hRb+l`M-MRE4V>RS_L{8(K((Ubj|UER2p)NB|o| zF{l<=4qJwzS1_RLml!df2=z}gsFA|@D z?T&U5?uNYpwPE(ZioXM?j3bn_7~P5%p%PTQc4bb?h+vs+h_$%s{-gqxBW+%^iD`%! z5l8pE(~uTEU3zqzsoPIof^_dR9qC4F4$`Ja_e9sBN^~unjjpj_UDI@J(>0E3TbZ}D zz7a<^S-PpxR$IPSU4s(PkLXME1v-olp-<5#Xg~T0eTep<577H)FM1EXi{3$Rqc_n% z(Hm$tdR=c!zeZpUszzE5wxU&N3wpuC<;67YtBbTQ)~k^=ek;(u=uvb#dK}%2)+1fq zwL#R~i8hDYBrZpHqTA3CGim~NR_a$}m0fD>GHbo#R|EG*E;ArXH%{M|sq$>mEbOqqNaJQMu|brBnOmNAoO4h0Vf{ZQ^wX>*?n#?2T8PrsJfL<~Vo^oYsbXq%w2><3K927t+=zV!DN(eQ zs!;S`$`~z3HroCFj%k>pXz`{T>u8KownPeN|AsbPtNQSb5$; z(Jois=zP!+s%*&{e-&DDT$T9^RI|&)q6b%4<6W~-(P2{Df67<03@=@D{MFqbBNea= zMGJ|xsAl*7)j?{uHrgPy@O$(f`WAhL4j|>%nW9FNMJJmQD?%_@%WnvOUW3<6`z8Df zq~-1d^genAX?asQ>Op^L^H(*kBQK!m&?fXOVmT}OFY8&fYjv>bnEiL_+F$k3LGr7D zU!zx%ChJ$I=7fDk=f7rjv^84L|CcTLFAdUA{@aFV{A;ez(UvGf%^|7T^%~QEH=Z@q z{dqWRHu6)-P(#Z;;Frek2lO8Le;C96yB2ed8VxS<&eXYe(dbmY{hCeSCk|x)4B_ZV{60vJ z_v?U~qSipi0uD4OOh!infi)C!%A6sPx_^q-g7qc*4=Iv2G?=OF!;CULP0 z6hW!_mrnY(OdU}Yx)3F!PDuZ@sWVDLT~Qa5j+D6@>W+FN<)a{{7gGA3s0UKdsJu+e z6xM%k8jck1i+eMq z7uc|T6)vlM(KIs&PeE6q>1ZmNhGw9vk&ZP*6LS^;Wsdel1>u^tRV6CXwMdmvMzvOX zq??d>L+?3WkJOksXaSm!Zbb9Y4M-DG>6V~dkgLM=Ppnj+x>Z(@(UvbJY|yP}5mE(o zfM^AjE}ACFq7_s3t4vkAX8F-!T?#L2!Y_ekC>p-YvK837(K$$omF`XyO&4YN!J>H{ zB76bT5Iu-}0NszCKo6rw(IaRzdQ9X0IDu!;MzjGvgVv*`&|385|Ecafz@oaIzIXRt zL{y4MTXrd8Z%7v_8lxsEXcA3gmtgOTC00;lFMv@-#bED>5(`F9QDbkQ#@JA>V#D50 z@%_y`cU?4?|NA}9_r34)>GR{>44P=eHL7ES|0$u>mqwwb`@C0}a+yPikxxg*pCU66| z4%7#(0olM+;4k0`a0$2woB=X{4B#~IH*f(s51a#-{w%=H`JU6L%lH!m$+D2<0Jj0I z=q~UG$OG;H_klT}ivwZ-u5<>{2S^_R&j26bCBQA?>(>B3XK(}G1Mh$Wz!PQB;3$m* z73lyiP!A6+k+Q0|0#+YiKgTs|gEdhS&sYPT&*uhwUcl!Dd}hEEvuXIqfCoBOdjP-< zDuZX-{rEZW)VcspI@sR<7yRpK&Ojxg9AE%=E0-CtV|wAbERc$852S9uc3c~gx&xj- z1)w}o5vUAoMSfMJY=1uqy$IJ%NPPhxfS=dk-4EVUD-W<^aG`Rz?f_yhq-6m&fZt7X zMariF8*t4h1h0|u>B>dmPk=STCvVGu6kIPwx(J8|<^gj7{&~0IfHSl(6lqi>{tN_a z06hSfsv}Yspgr&-&=zO|d&d)SP7W?VmYo?0IS&kYjCj|*a++e z_5f+XPGAR+0yF`_0JiUTU>oo|kPK`FHUXTs1=tEOO<~{QAjbKB09+;&;Ad}8zp``9 z4|r0!OHI>}?guUae*vd~OyC4?3>X0%1`YuSfdc?H;s|gQI1Wq)xRb{}}0DfQ5RA^aa3`JqNh5XGl$z^};oK zI#GgXK0hx36bCE;9iRaU zkpCKZ53n}4oEFcy#oR(JTMS@9EL3_v-eG!vW`%1zpcG)s@1^mPAT#CTJU$=d*E|gX z2MQxnPk>L@Jb)O`ahPR$R>6G)?s;&jjBBRngMS_^D%*U++L~Uw>ss+!Hy6 zkDt8j+Pbqha)R*O+gCG}9-yd!*Y_nsu<%fs>FKqbB!j@mJFu2_EzJ%p8!hSa!Lz#2 zlE3ye4a8j_Z}*@<(KY9W(^ZFtHx+(9-aha;QzK+tZ;Tbr%ReXfJR#~Y&hYQ9Gf zw{P{d2i+@%S8j%!KyM#3LK8uI$3w`0bP0)Jl*+-*Hl+TXw2J{s6^aZK$##PDD?aYH ze1cRKpIJLFLGlm8tW0Ul+SIOhmrv+1T-Nf`i?zWTc0{`GRrOb!4nJ6C&T+%H1)(M$ ztKC4*N;bIlFS##V)}k72tfn1><8vYS}`cCDSG*;5h3A zg05}8b-CXrHOx%#kPN6P$`;Px0D`=!Q!f{9Hh6+r6rMdfA!qdcpB|N(xVDgx+-Eo^ ze@3HnAifJ%?^9}ChP!||BK{_kM6N9{zX};Hb1X!VGn%#nXU6L<`eeSR-${8B!8V< zDe{~wxdghELKuZ)J1v&3kdLfRhGf3pwb|ai@wfzXGJjl`@%6LCHH;TO)MQJGrv?nQ*>0)h!{=*JgIy?;8vkP?S9!$569x|OGlHRx- zbS%pEw+7xgeR<#@l@6llY^lK%$q(K=c#7n2Fxm-i?#${l&VB3Pc_8!?KDw6nOhJu* zfPh7heX(-MPB&?S!pYCu*GIFTo-&7qFfI4kT6ZB{mcJgj~wpFkp3!VF|UX8 za;g++sD|Pk3ud~^-`Dnn`w25$0Cky$DjKK+F$elI&&^d3J_ z2A#jRpLYOeUo>_)80}FR4X*Ru!aD97*ko#BGAJ1Y+G})-lgAV?Thi+^j`1@jKV1n& za-S)=P|F#Tt6?4_WgGO0OnRShyS}%B5EfQnOyg%D?g~zH62w7O5qX*T$fgE6yS1t3 zsnhy+2eDQ)(a2$^cx~;q&9UK_2wJb@LWMQttd)fRncLgb&&k6EvYK@qKz|Li#w zBJ)TA9;;|E2((-2kC{-x1G1bY^+Ymo7K9M(ptM<#xI4lgchXiPsxA)9+*F`&@bM1D zDvKV2*bt0(2Oo`g_<5Y6{F3ZNI_)?$HWt={i_o%Od!J@OIRxd383e*Ay_hX;=ArtBNj;{#l=8qm89^)4bySx*8RzWt`N*U{z7*)bH50=f^kc z-CkygP#k9-orpstwt=7~8nGp{SN68lr8{J;nys~8>(eZBD?s}cHb z4%D!l?x8Nj3D9xxHJ*EWsn!qMm=0k_bTyA((S`1TfStxr_R{N6_a8Yxa2@E2FOdV^ zjy^n~tWD;b?c0!pxFCx5M^RmSZ<_k6)Kb^oo6aFMmO`u9DcbGHvsiTHL1m?YGC+sd zqy}@P9uC7HA5R==CpB(tr<)n0(>C#?9djj5!w7Ud9$ohRK0j_%<-}_`rKONU6N4|P zf_2xD^*pp^H|WZMuI>%@Kc!!;A{wdF2Tdk50)h4lbwFZ#54v)o3*O_FS2=>x1Rb}_ z%b#NBLHkW$Tv#glaovR(^(?BKF>~tcPwA}#r2y(0k2EBJY|@Z+3ZU%mNXGImzI1gM1S|$R$M5>%Ol?@xMU~A+1pAKd3)c zP2&;~loRV?V-134jkLdaV1vtPvyoITLSB5C2TW#C1ZEzs`0h51-y=B`^Yex!3zPe+ zBB);KVkpy47_M8->l;_ET>n&62l|`JS7oR;fU^{&a{HVMVaQO$QtatWo=YX8so5WM z6m+UD`57V`iMi6D8as1#k3YD?WbuGcV2dD#a)5I#|) z_spPEs<)#%@2n~4R8-;j+vLf_0jYtp637fe2`IGWJFc6z+}gBR%< zeoYP6pdqR}8)z2y0oAffkMQR&#n_35iKIP<-gfeLMe#YCA+UIa?_G&oi=j*9@lge$ zPBoe;+EQXpK5==vwyrQQCE|*}qnOPUghd3Q$O``&%Se(QsO$3e=(a-d+R^l%rN~#OZ_>ZEuj+!kbG1W-~VJlloKKCEAmK?EVv_=p;oEbdiuyZ_(mq4x&D7;B(=}| zkC{bOL_>Je_HS-4y0Y$nqr(hH{`7oWtUrdIkqH5anlC4Ip-8LI)Z+T z?X+u1-cu%ewa%sk-9Lx{p>hYYL{73l9A5jIEy3nu^*WH}A;~4E6(}6RxRQl;uW!QM zzc*8KLk=%18nqpDptOGaW^>Ni4%F}tB7Y1hc+nMK|4P}%-D*UdDOS_cLy%@Cr6MsL z0v)e)yZ+K`_0!X&wI z_8qCJRTN582Fukn<1iRJ#4Wc%(_{Ca4`K&jRwg;v48U6-ohbb<_OqNjQNP<@;Ms|6 zm|^u!R0?f?i?jN4bvjW;JT|uIBrNcD;?8^au?>5FDoIscR7XlXA`QU$tJ+azX4vJZ zG#)GFoTHc-UZ=9pC4JC?&Voy|zm^Zl?E8C1h{KypSc1IkqV8E(wx*`J{rAbRuy3%p zpO2<=R~mN=2C39lP`Kph`+j>gsJoe>E^@e$i3XpYXYNE`W5-msbyqr$vc?EdIDx|2 z`O7-h_<zpl&PpNspWk(tgdoH8IpkS{1$h}-c) zpDYb|k!q%Bj2vDgPn9?H>QcJS&*q%(!^!;w8qh~AyZ2_?nljGKUYaS!AV=8^dJ*k0 zW<}dy%{j5u_XOlyPLoc+V5-4?>_xHH&Hi9Kg|5fjOj*g-23vNog`Q$MVXD%byiQ7f z#?KfPJ~p`z4Fbg{tjnC}BQ`?E#O-ZwneO?U4rA_}lhQyFU9W!B^@ij~(@sf~v@6Iq z16%oy{prgLEUS|!E(0>}rmJ_AT?x%eI)Hq9vEgeb^B73pndpJ>14R|}pQa}twF~S8 zsd?4NMv!_6TQmo12_=@yJ!3mN(r4HF&dP zh|t3n%PNVX%YR?3xGqi+@b&<;I4y-5PogMCqQuFmjn}-hS%r;LoZ+!=kBFqLr%~6W zNXk8p?KTex$Gf;~yWW4F9~=Gxto*Pu4dK2UO0Cbp6DCE9{hl$!IwjPfxpDv~)R{|> zWqo*8yZSInL|J3)VWN-iiwesbc=f|p6y#8qLwC z+V=kblM=2+E6CaaY)G7HQ(52-(j23Zdm1Y0V|oqTd9l`#`k zS95|Njc#RQHzm`Y(_%QKorRtHgMxR(ZZ)b<{CVRq|1?v~poc8i3J~x~o!h8Z+M8qk ziZ&DMMGi}Bdo9zq`rBh~%{f_A|1Ze(ezaKNB{-(sb)A&PJ8pb*gEl#h5fOak<89|J zg`|yBb70GHV`%1IP-2zdI9mtv*QLAnEeJTV02ID_oD-m_GM3Uo5%@U@pMT-54oPaV z3*VFuS3XQxNDSHI#F*jO)9y;^s?AeSV=Zq#f9&n69kY2967jHzQz3WV*~UfM^o3o;f9XUqBq>@ zGkUUBouI{LP8E<-7Ig%SnKl2(nBT9Mg=iX0NhoXV4hkDkG`rTXN!7h6f0)YpX(FR( z$wll~aoeJ!=`E-YF`(uhXxCT$AFOTRHQhw*uSulGmn3J&ALnRapO>0w(0R8dqE07$be*y7QFE$E|onvwM8P=S@zMW%2e5Kq~T(q^$lz? zna*C6{0vhji_j5PbKf%k(ftmPgpaBa5av+XOORw0)x9LnGY4IQZvS~|$wvs-7T2iy zptMWaRvb4~#F^YR({0b4D^}%t`C6esW25P!2X?;j z$UAI_>olQ2Zdj-3bonx(s;WU%D&cti+R8svSDQ=4&Jg3@L1USM-|pDDnE2J!eBS4m z(fTYXs1hB>LJaOVQv_-MIT54w{ipzn^85spPPzOhN zylb(5!mnT;5i=FzGRVTi-oW{%Y{yM)Np@O!me6MP7>d3MBQ%e}Ym=a`vC96=JukJB zNm}1PQ%@ZV3XYt8Uv3X*@Z^grf`Z*%^gx|TsCG!5%2}w_*)330w1=|8rPB#?VVu5Y zW}_$D#|cAxWwrUi`1F#-wac5Dqcd5*$X2R@ylJdgr`tMp+F{BSv-VG(((Y>zUxY(?f@@vxc(S<;&sDjY zN{dz8&pdCLaHI?8c+ zW90COaOKBW9!5Gp;+U^;2u+~lH{oRMLBUgnb74(a-;2rNS7Ow+03s6NZ$X%W3FLYU z8W^2Gb}tc)5CkSC;CCRT9=b+}lyM8Ed=87r9W#8B;#%K^;tI|BcjsbHckyk+flsFX zs!9Ii8bVKXa}k{CEulfVkmO_5e#RzC#2}LP!;=%;B6{{j6L`)KHGNW_x_UAhQLK?n z3!4(Ag-yq0wC@h8iCji6?!XHBmWkmoGOg|UB%SSJun$1&1p932bQkJ>4FWr;u=}_> zBZjog;o%U$hNGp`a-n`Fi*{~dZWE8_w87qic-a7R?d7!LE~14uD0r-`-ei| zI+h(yp-e#ax|Yi+|1NYKoIqdQ!_;mLA~{dCXD|J|?Ypt3+A7j0jg44NoA0r~mebLD zIE|hF);!|r564+$P1?L3lzhGmvEr!3eFUPD6vfF>8dhHR!8n2eu%smG;~$_8Y@@O| z*@=7~NNzZqZ1q6$H|ByL2dn|FYrhKZ^Q}RtIf$p9IOWZFiqZU;TBD;~a_Xp<0rQo{ zD9x2t2t{}fZ@zhmL-Tax_~88*$YQ;MvSr!P9W8cNiP~Pssb=rdVw6IpC>m49Jh+cx zCDqA;Wh$(s0eNU?gOxOu@4s3}X}C8U@Ht@i_AN)E=6um}1NSgYk6D?Zd<2T1&r=j} zLd`=S4*A3hwF@?Jes~BkthSC~OUN#?;vv-Zoc27F@I}1lKbGvvM=yu^8Kxca=Wl7m#TAW>M)cA!iNEGY&UH zWoj%ypm~CLvx<&A0jKWX@lU0N+NqTARJjw@pSwjYAzN+C9P!|9eIQD+zkzSyRxw1b zFZ<)N{7LV5^iVtK7hB2w86rmpH7X%HSSl)l9=?5sjfSLcV)pc&COw1ueLlz`9-MuK zm76lK`WuIA7k(d8+&y<`K@eQCl2Mdk)7xPrG=_;5_JA#XsjRpX*WZ z)L)TXq4(V(;;K*V_k+*e9>fR7>LRJ$4l4CRYWaU2d7%wN-q|mTj=U;&bL74J0`4s$ zuZs?0x9Up-q^&!JI%~9um^}3Ifo~udb~xD5dnxWEJgI3aZFq@xV&(c01{#@0`7fm& zM*cK^c{DWo+x$^a-YgoUlvCa`8@!9gyn-)9?V|Ws@W|P8{C*07BuFun|=X>@H;di-E=Ih-w;0?-ryPKB1k$MDm0%d7X{@A};@U7dv`Kr87+5qJ6 z1a5c0z~P!EjX7#@_y&*ByQ#rjI93MDc#D=_qCK2s(NiRbTPViMkBEv>PCxo7+gA}+ zS^PbtM(?Choo)}szC-)0_t3g`Q0fB8ddJ2|r&oMChc=d!_4uWWCIujN+e>o`P}N+@ zDFE~MeIkJLtkWRuY~@?M_gJ;2f`FTo=wLm>X3At2|6JL{ z=!JaN+s4-wx>=2^v0SN0={JM-&kKm|1|zJNfisMNRXONRukC^S5GJ~%G} zjEWG5_cb7Kzk{^IMy^IRwX&r)mqM*&y&?Lbs21OLvf)tP4@sz26@M1>)k336E1WD) zTm)M`!{;TqK@U*G(CDaey=zw0Q~LL-#xE|YT~Qeaduq?pG@a~^U#i%pll6i3j|t^l zSJ+eU%gmbH&E(d51fxc0E@@o44%ny&r|3kCt;S}@h4dFLhV{B`Uj_TECZ(d6Hn$kI zotUcuCv_Jnlfo?!ZgGeA?ZtRz$O1KYXp4()n)Kg%0-MfC_=XyDDNdI4x+#-sgDkt? zObUhZb2!St?Gn`Ylqh$q6~G=m(jMIyz`ef}oT;-D9VI@4_o^)C+R{O!DucjD&m zr>fR&#rquG4>2>rDx^5x{rI!=mr_vSJp3wkEeS10U!_qcQBVXz!^(6KZq7AqSkZYwBEuGu`K7tmpJ?ZszDmtV9Kb@1FDp8SqN><|!2-Vp@bGH<^-*flpuAyD-1iX0xG zeoPs8?@5`wnu^|)oXU4-HkccW2qxE5JlOXlj#=)ItOveRny9$Du$fCx z6Hu^q>-Ws)HfBm6o&@{xw9Q}hdB1IZmpUVm7-H^<5YVqw>aa~;WgJyxSGeQ7sM2t| z7+POi_ScyLkN7A6+1tymh)p%@F?7A8a8CBnJWf*R2q(Ac9VgSsw~U;iL)<-C25qVJ zNYtj8uzStnrb7;z_0i}N86Dt<%^y*a1BUi?pyV;5T1@?~$VqnP=Fa4YwH{Hr6N)!NW312^r@8G) zMNS!d9964E7R{|j9?o*v&$Kxh4v#i>bXMA2cz`6CMHOP}Ajm6_m;^C=W=amPy-i(Q zps8msge|0Xhko+=rB@%bEsEH<;i!+I1+)=Gjb&bnnAT-TtxDOO58pyj95gXO<(G8L zMee~ZZ?2bn7+bv(YPvtP@~GM~DugPO%DTD3D>|-6lMd2*J^GLb=Dcig-6-qr)4lA5 zfeZa7t9(K8^A%-Xwtv@hVl%k_`(|@Zlf+C z&E)k74~63*AYndI)(8p9y`_3aI7Jbj$}NTx)p~*^zZE_I_0;K;hW4)5LDdN;idb@} z7Q%XKH@Fuy@8o`f=5C|MMmbcQM;E{FZgka>dEyF*!6I%m7X6YON#?134`DGK)h4`pSqH-3JmBYfyqt zgNI>nNv*~cE7KvNmxs%%pPba>&{8jG@ilF%fQGr1qDNk`A5Hd>?XBvS66z2n zrad40;vJVzNuzaNTGN&Ch*Q(c!Mq>kxddfH<$6?`GxgHYwmjTJl_PL2ItJI-<3h;qZEFPIw9^g- zCnr2H{Y2CsZK6kSvRm`YPHSr6KB|V+8yb|*Dz6+Iz7w!v*ybzuA+9oG^3$B4E==%w zsSB&I$p_7;T5V@TP8HE5Ose{+qHM3LSBi#Lls$D*?Pz{QxwCz%(pqI?UsF{^3-CGL zYWNjOnLiagkG`%Xd-z7cs8!I6@-G}5BZ6+^&BQ$ixVTGyEHo~f=0LcwfcwMRO$*)T zEQ?R01(oCw*PoY)fcZ;s;BoEGHU&Rd6a4?GM^7rrgRSu6S2c!)|J1KLb*wDEHs7YS zts>i(b1~)CtWom=WeqqtEqN|`l@^~j;ymSpM>TvY+1{dDe3ERFGPI@ad5`v3TNHEt wQ1D|W6nFQwAkLO?~W;5UM(7)*=KO)W_v!JJU)45&hCzNCq3|WpGJd{zxp99;^}k2 zqJd3HFYl2MIG#6gW^qozSkEiY%PE=yyMu^hJg;m4HW_;fHVM1Dn&;KQPA#68Kbmx7 z;SKQL347iNSQU6I_A&euvFG8doF(|jVNbxXhn+?-6Z4Cwde0IMDjPF-;$)(|YDan=Uu8r1 zRvUXiwy_fQBTxhTD^4x!l%o9NNjaXk+Ful^U%HgE%J!wRi=3T~RXa-x#^#U7_q>Fo zY`;89=P3PznH-bP?QoUeiOy61wc(rmd*N#42aY$x9*w^c&R5y7b%XS$mW`(!N;tlF z?Bq!lxCciGrxyq1dtczIz%_n$xc=a6cp9FUoK2#O6gv*9YTXT2HEzPn@6On%*KWqD z@e8oDtgJm&@l%Q?28X%UuMF1@UGBdZZW0|!-V=!H?}rlVm%iP|H4v(bpMlkcX^K_J zLm52PU{e01+?HcUd%f^g!zK*2j+9e8vtZ1G{HcvduXIPdd}E4>i>J<kfp zs{FT@1SBcTpu1=tHakK zUbY%mhuKZbG*8=yY=?}=%b7TVaz>X-oH(h_^GZtcStXvg{AAnANyX!)^-d7nO~5X zTa-VwIKSYciTUI5roKtKn(&)wkL<*f8Iudt-iakec~t03`a$`=JIgM&#`rpXd8#e9 zcxq8W$t2G!z-NTYip~rAt+Z@pn%x+N6QLQ`xsCPj$1)kqdbkXO+In6?{6%C`0cT?6 z4@+n8u&-g2z8hTgs%C4u@Y2YyiqvcGdDOk^MErW#x}-bKEA`4oX4nm-3swatkU$&A za97Z86vQkqn;)|SPzqOpUw5zvxcXds;EkEquEc6)>?9qNr)>1(>BZW3p2yb)br)6x z`Kih+C9v5YAU_d3X!_JF%+B4D2!3p;)yfo-Z9= zEjk&iA^7QdT40qi?EFv9 zwi!2ISq^2pv+Ypags&D(clJW8D*Sza+kn@xs^Fmu>~T_vPsXo)HvO*yq+Vzb+yJYZ z{V~AuZ^%#=zdIRfVeg|LO``d(zzNQtN4(N?9c;__zLh;tNx@|HC(rwOs9l`X@~5%{ zSwX|?DjMqNBsM9{9bro!iq+OukW(;OyGL&E=#u=2W4%T>wwZ}o9p&dywqHNN9*zH+ z^Pj*fex>7!9WTY!gHLe&1z3$!hUKMYrx8%b`Yu5PtAh88vnDFXS<2MX*sp1S8nd4u>~#1=1k3bjs)uGN3fdO z#rZ|kJU&w=PtDQUdQy>251yAb-uBcV`F8gjTQX&0?u^``yN3BMM~^@HI8H`UvQNpG zny3C=Fws8{J-&3u1bg^vDP7Uo1-2A}l|Q;DXH0G}YhkkG7htt6?#3#9Qf|?>Tt>PJ z>9q&u7q=WYaq?(y(G;8hJh;}+MLES&3ps32Zb@Q!v-Atv_9XSOvC*@2XlXnRX&^Q!Lo;b0DgAbsS zv>@AHkHa44`~<94{H_v>2YcOf1hgmJg>8bZaCTgffX&nSr(;!65>^Xx)l@q!cR4$b z3M9j?x!4}y7p!K~bZ3`cV&h*PY8T>s*<(mBnm`NepiAunY3;A9*`)NuGCNP|VbwpY z%B_DbR@I$~ZG^2(yiQW;^_+>t-q)qJTI1%}{h$X{{ct8$>Gu(@^p{}OfAN#_@mJXX z<;2zUqKP@B<7xm@y+ajtWaHO(@oT;faET`*!jL0gk85Zm|>-5SKn$gTrtFU{B*3Q9`QlO4Y%2uGG=l?@#Kj)-edSW z&=`C9>9r-j4oLFgfK!Tcr%uh!Evg=hPl$>61yeom+BudI#>X)yyppF3&kPay45t(|hB7Tg}{JdW@rfK{^e5j|c40KEPM? zTR&+18h-Xs^-KS<0gQ{U`<(H?!M&2A{FdX3J+Jk{cG)$;9!n|DQ(ArO-B_)b`PfF- z;~%lhsvKX_r4XyO9r>uOjfYh&)?0gO*#iVL+}$3t)fz+wjY?ar3U)U;-gG}HseWm{ z$8D-8wl1-8fB$NGn6I!J!>RdGC+6nQ%Khsq_@8F~UuXSeYwTKUvpzU(Y1!!nRNber z8kLnKknQq>J@DJhY`^Tm*O-6L2x>Pdn4+=tyq`AMbQMq8e6yULQZhxW)k`8?%hlTkaoRco9w{V#@9R<;o8j=MZuIwoY3hHrCaxsZD@W$e$YVT$K-qcJ#S2YOYY1j zd;MKU>P$8>r>LNt^T%$sHGT!Fiad?g01kBau~#gglrw?5?fjx%{*85;j2`uxZFhI9 z`tLieru(PZn%Du(cEGBCQk`vy)wKVdYU?Ol-?07m5?1BJm;Tlb{;|g#U;45e?KswD zPs=G2#>M?R%mO8%u9ao?hU2gWt35Ig<*jpiZtL@pBO8 zp5$gNDv4EZtaWxu%VPHKiMf3~v^;*!sqSYd*Kb(1-O?hgjx~1j)Rt37>E{XU`==X{3^RivGVrlr=0nYf`PKCPI zV5j^yE8q?)TuE=g`CWY9UWQsIccf@uiKg{*~>4_@s!B+3lp) zWSF4qhRGLsXMSzdbG5B&bMHFhH4byIbxH});VmbR9`8;5#uixO5}f(18%`G=pZpgo zBl!$1(2$J$&MvL1ogez%o;&h+{*qsmTlD8MH}{sW*$Ro5Y7Ffu{a>r^LkiIR+Je;q zF3KNQ!VLDF#jk@u)oxziH9y*P@n?Bl?G}yAo$9S~`5(fn{1<+*E&l6Sfz?_Xtdn?6 z|9ZfGSCH<^iWsW+WWD_tyDqt-%jH_Dcs{;%v%j|dlV9DC(F1Cr*+BoRg@1RQo>Neq zA3sgUS3$fdE;(T5#9I`o9(fU~1t0I)_&)Z>Z#Lb{&SqoPBhy?3-z>e!)?^|;5hJm| zhQ?Ux1hDZ*d$s!|R+FaOjq!M_{C~G^cPCyIy2uL!4RqH5Wo&xdeZ34(8VLnU?62GX*IX5-_a2Xig3~Zd zKiIF=VKv?>uqy9zY(wngnxWvXX)soMMW=bzbNyzs-5E$m0o~ zm+iMdFFjJdn&Wn1G{V_IIC?3eF_azh%R8k;cH#{W zc*YT)$Kwyjm*WLRM}HwS^f1q^&dEMVe>b6#hj}D1&W8~C7hi{G%c(&R9xf-Ei#I%; zJNhhMPTY%}#7wr0nMP<}(3toAb?LEaeWp=c(jB3?N3-$H!>cAQbfrJDT`aWGU&r^O z{QZ2-^V_tKh1U2p+sDFtkM!5K&j_{h_k+s)HW{(V^YnOz-##NfRL5VJ5es$l_w#+F z-zG-#+WxFqMyR#FE*1-w`1|?(n%|~FEOfL#lka`~b$oxy-`^n?{hH0X9kodC%iE`h zF7Rh&#zMFG>oQ~EZ<722nHkY`T+#K2H!gYwUaz3ip^Vh%n|R%9W*T%FW3QAEpEwTN zrc*5Ru|Km@ESkV}q+F4pseS$Zu2nH&&-O28u{z^UhMDBibWr-AFl=Fh7Z>FXLZR4o$s&f5{s^2mUkp;Fn6L~ z;W1+=wlXs{dIl?^1D+=@RN$}c8VlXx@9!FmzE8~A#Mn_g^4NG~l&dpdMvyC$?zjx^ zT)gUjs7q?-alcLXSophR{aM{Jq9-=;ygZ^f^yaig9CZ|pZI|Y^=@E+@bsWzH{DWEP z(RPG19>jG>jn2SR2itCW2Jd{lpy|=0S$djHwj*-=bvEdsQrAJ#H zZ`){FT!^QR^!&_NDpO^DuUPbRm`VwTCVD~>n}XTEoE+q@>m7?;2g@V{ES4JnqKV(O zPe$~t6KpnMht$Y;yo{jwD+s9@qe>h(g0Z!CHTz8Xg-cTJ6cgr`xa zI&@y`6Kz)}(kZFYv3RO#P(A~(u3s#)&EMZI7CnyLr86<%V5W@1vz@@)h}?uXP{)hz zA=Hsn!CZ`xmGwh6J{?PIscy_K-W~4@Z zye|I1_UX|t2x&-yRH4)S{exrCF=yHVaa_m7B0rl$vUZdiJB7oo#>qvufnp5$U!GE*a$;$7g+?w%fblTc^B zeV_D5TeiQvAanoF|o*p_V?h3pMgY=<} zso_65`v-C}A~{*?`2NA%^vJD*f=WexB9tAl&dl0Q3WcxiqIO2=cjea@g86kZAzPY` zz6Ec1(6(&0#&JPt3!(lBMO$~bGc8ys;W^#?19=(Y$GiJ&^E0A95l8RaMWmIUAB)_| zMqC_}k;G_?Q7AOkpE*7j-q6!uKRzSUfVI`$-!MKsGJsG{5PF5?$B4!g%Zh^KWCc#-qz|AA^rbS0r7aUMblW{g62op5u$J12u1w;#j(g4tbjKD!Q%AD2ZYY@+jmcoo;Vyv zx?}uImgzWu|I}D`#c;oENk;hl;r^_WjL^ycx{_G5XvE<&KKs{WcpCp;7YhF|!k;xQ zBh=nsH!T)vnG-CSY3Y$7LbQRx0xLaKbhyxnw=4?lONxAIe~_{`uk_cB4x1j zAk!0sSd_)-(dy&v`sQk>Uuv{39(yU{6k?mY5>MAXoLn+e!%vL&XO(6|_W`x@+RLW1 zC)f<0&OedycV+(s5j!B9eCwg zsgcci9sCWM>7ir%{pB&P@!DJ#i_V#3>&aoeq=p}z~;;*mB2(|F{SHz;j3T;CAZ%AtRx&lF1&Eoi&aH@-T!c%qa^1V`Cu#4>|0;f~S**jXQaI)woOX*n3>u8+a^R=bb)- zJ^iq^5RWD4;=cQn*K1~#e32D+Bm9H&+9l4aa^T1aybJx=SGB7~pre2A)*z4`oJm_< zY#YPCatgZVV!!Qzj7Y6ZXuYoUq5~D;*j#*;q(&ddQ_F+PqsZ@gV}j{9a&|oQETLkt z&=i0FHL*zNQhLrmcujgVv&{C>5y9!e+3cvYEy;M$Dncfei&(5*m zi#}IgmDTb0FN{T|T}JEt*$dMnuMz5?P$Lh1aD=x?RN$wSSP%orE}tUY8y{Wxg$%3CIE;g?F9?D}2Lz zzwMHYP&0q#l31kTYW2Lva04MOMYIf-q=r1d&5haxX5JW!+_*p|N)^735SMElI^!D8 zyC|qm&1>V;nLvmMM7l~s(}Nt_7JA+l0UNO>s3HwmN2nlR&938O)ZajkWrRiq>=2WNT@61H-DT)<^*%yRSb=sDDt#5k_YR9U+?#*CNH~;T6VjdwWK-))J~=dy0$P zZg?6&Hsju0`YrJfkYqhDD}eNU^bp>8c#H%YdfsR+s_c#DJm=Y+{YAXA!zmBpDIb%I z+t&^^*?eB$U5ckk8H{c;>E^0e%Oml)*d-tLL(!#p_UJlWyoJYra~D(d7P}`_(}^b1 z6VFbBIgSTc=+Wo!)I3)Ht7+A6n3ZIXEw%HRb;|yDF`f=sU7K^{6TF~fqsQDDUpZ=c z7rZV(QJK5b5^*{PbtEeC0UlR*x3#Nw8=G;^?XwA`DinQ{5SOG3n@UN(J>Dto36Y+7 zoL$GHhp)KZpS2<*vf2W&{Z6PI+2|q8Q{9%?p0#~hhIc^_NA*Jyf8EMh^u{}F`rx5O zbgT1h0~_5HFH6lG=sZ$hpBjAwPt{|S;^wTua(l{TIxuG4@KlH3Awl$V=Q01-MW0#j zAGj|gTH|ip9txwH9q`mg_KxuiJas--2AqGNx!XT*e?~Ovo_Lw6OK-dmBw;qCrbZXw z6$RN9S8IhWnmFcrCprtS}r0+@c1>RYBOcuOm_Z=SG z!D)#&isB@no*KOuPbCM}Md97|`3F{IM32AUb`WK8k{yeuxot0`ZgL*AWov#P&yK&I zQ?SuL8jJRSz^)UDWUQ9qseA1V*^8&1RVdJCBZa2rL_4T#8ZQUGQ;0IIj0W$-SI|^-NTqC}^%Ad6+BhvPfVApG(9-jY*zkX##^cjE}#6o7_H+eL; zS7oQ4L`a-YplL5S&sOn>$Lz8UN{(jZ+4-jpXg*$d@^PI)v){%$-+El@X8LW`$D)_5 zw#{WY%2K22@y;RzkFUsm+~c;L)aIqML>#xPbWDx5w2qm7k# zs;`}xk>{&=-SM>28BbDH;Az^~ad{T6qs=!oHCk<>?ODd<3f4HD>S-6k)p)u(V2)5q z(hG-=-Yzwi?YG$!i~6w6q_DMp7tbE2^1Zag7i|aFgJ$9NBOw){;}_%EjYwO<7CaTg zaI*O(Z{k8G@U(eM#OoG#tl02loBUZXXGFgTDg#>rv*DbV;`_6DY#g2zp*_DmkEan1 zHq2=FW!vwzwrAmKby#mSp4LO)MV8<(V>+Zq-XUbK4r*_&8rS%%TYS$L|I;4jB`RiVbMXz_G z*X-D_zMn{|hQs|Tj~pYf+ofZBekh*0Ako(~hI4}BMc>8KstWF5qDgO9?+Cy0x3okY zjgalQEAcdC*u_j*H5}%Azx3#NTkMQrQ2F7`G=JusvFIw8?H9HEH$2tX&e4`{#``$* zd@9c|X1>J?f~k6(V_rxLz3Cr#i(AdNY_CLuGe#MnYH3%}dc1#4os-`_eEr%jHCli- zI;f_0qc`xhr?FaCbBSB+ahNmguU+si2vX|2_yXQ2JQ_PBHQMzZJA-V~*Wzi5$Ga#s z5_*?iMs1IDB@{d!2rqiqpY?7=_>Fh{_3vgxGq!OXV2?`s@4{1UIsft;e#bU{);69& zyjOKdFT!)nkr}??J-_XH+|dDtl8=#Ljdp+E_M2VJrFiNwyH9SwQ!9hG$X=xk>UY`) z^t?a2Tf0O8n%F#8*quk4W+wCa}uVoOId0A?79-a;r#6_ONXOV^ZT*ePV z{*?0AkE=cxoQh}1R;%xRJk2sY;lIUG6%+i*Z_*NX*xsdk7>)&a8ALIU*>^VM9j;+C zveOO~S6akn;%QWZe33bLZG-LLB|_XdbG;w^#Qr5u4L?+w8Xbj~PI@LO$GI7=S8$xr z4{6nKIs{jl%|1Omj@{C#;k4EBrRePnk=pj+`*{r?)641_UNBw?0 ztulTT$jJSI*AXw+rz2^**fN9T%_o!!rzcne&*EhVsnlngpU1aZd2{gw62~PM<$dhp z=!)L_l8P}cdN0G%SX1vG(h_lWuCU7_{cGFV zY-c1a#8Z)+V;)aS#L>}$T`95)&py0r@r^Bw7SX<$cv?8DU7pC{w6pn{9be;h#^d6E zj!pa4b_hIKI9f8)ggfU?@zl5=VWi=Y^q0Tkjdp&UA7W91=cX}_rnda(um2$wVa(+?1Axqb5@bd&FkE^Mh=e+`Jq-JoNPKKs+Vn zhoYk)X`Wt;qAPrMY#>L|riAKsLa&dMm{T@%fX!rf5p?FF)atxk&kESE79NAcTVt?_CGz0(g* zf*D)P42`5R36NpurKNTbyUl;I;TIvVO!d zFx}D;abh@}6B)r<@Xo@cpBaPgcp7;g!O?ro5^W>w?Po5YErfjG)rn?SB$N?71XU&2 z!KrPGUpvzomI`i54bO_2wnva=6I3Ha)pA%wB8835r@4^c&d`URY~L*)NBW;lo5aO4&faxC3L=- z8D*3f@SAOFXHax_du?+dN*fy12?cjN(O_YX!W&5%I}n@j)Q8sFho>nKc%ie+%$lL} z7Aaov>u~yAJPmH}scJ(ICY2X5vrh@t4|!(6DWQRw#z*3XOs!_2`fZen=@Wcp!zjzy zu2_{pe+8eaHe`A?3pFXNMg)^5NY>Y;(zBW1Bb$KOEQ0v{0rm82@1F7vbiS<84M95G zP^4-MNBaDoRXPSoMF)YPfE>c=i|K-VWL3~iXD`O;BdY=~k;A8|4Vm`ML-ozD=Ap!F zRdNne85KyM|BY4IR|Kj5Y(wVNTJ)KUn}?L_Dwj-F{(PkP1?|Y-s?D^}WBd5#nw^%D5D%pxcl>RjvBxPNWLnjgrrly>j@- zs+{{de(<^98bI(%q~2=hSG6keaa0{`aPj|7Y?LxyaL4yvz|jF-bOrx6Rz38J%m1p& zFRSuibM|$|t6KFyWQ!t9bqV-MS5T2O=ci*e#4)TYkm+nEtVX1Vi|^xj zKdj0dfYkv9IX=YkkLaUyZ*%+(tfKC8e7WN*9AAl5 z!ya_;4`WsCV^|$;4fY6Z=>`I7*+#4;=WAHLyw~}r0^WA^J*+Z*h*ir!#j3zB9RJGM zZyn!*Rk`~e|J`x5Liwv>YicVvnt%$b=OP+oo8ouG>VR2T71SF`8D1Y}`#ReXdop|~ zmM?D_-&FC7u{E$2Sd~8y+Z?;f`Kz(jwG})`KzsI^SZd^LcXl^c2mBJNPgN`a6;g8!J{|Ks@J?E7~WP^FLHn;MtsS|F>IN9CLLXY#Td0$xpA^>7`m zVvg3ge`A%su8Wsd@yS@_Z|H1e7cZ;e3C{l;+k@!8PoOE#l#Dt+GgpADD$v~77S5ik zcr!dX)I=-5I~_M{dY{GaDEDk!O~AG;b-GgXkyUB!oG+`RWnk5uj@Vk*zApa%h7FGY zf2#mhB->S}zpH?(f)_epRt*^F>>#WvJ`Ah9VRXW2!JmJ4g#dm2lT9$&>v3hF6?dsi zUe)S2rEu9Ytm=0eR!J+If2H%U!YbW-MgGN#U+v=cq9}c26)7IEq~M%AgdnRfK^4F z!s5LayC2u3Ra(2)Wr(F?(Cab75o-f8MZpU4XaO8s{?=N(tU(g zzK>n{Pq6B--B^A8&Z_*`o`%2&S!=OwIG?J??(|G_Fr1DDQP#$N%Abz|%)*iJ5itPa%K z`LgQL9?q9l&-KD8U2n(#lU2GtE?+;THzmii2nl$>t;7FdmHm8o7+LxKoxK37E*j|k zL0DCH1Xdqer61}1D%LK7Dj-NW$|aOl!DE~+tAfU2)&7f|KhDL=Dn8G}k9YnA7cZ;$ ziCCd2)!4NJ3SEN#WE0GWMxpvGGy`Y5W{0iin)ew zN_MRrXXP(+epM@Uz2mYv{8H!3D&MWnmz95;^RY+c{t0llT6!EOFQvOv>CFQE_CR}q zw*t2r_H}G+>~>d-tdf7^?8lDFitoS*edhdK&i_)7&wsMY|5Y{iVqHz`bp`z5GX8I@ z3iy@u8ixHY{{fd@R`I`KwO+%lHTelzbAPfY*@$W`qN-Jfh%%ZDX`v?OxZ^{K!M9M@ zv^+jkf3V_fx_p0UHSkHqt4_%(2V2jjmz7`N`LgmG$Tv$VzEoEeDYzP-lbvm*Xg*b~ zvNd887_TQD}JWqSbO_@7C;p^$3@7hJ*m!@m7nhXs#XQIb6i&G zI$%|yj?Q*=@l~zjyF}bcvI_}Rf$lD0RjUK^fXnuD@qcGkU~iYMkF$N9?dS5zs+?@+ zXO|MtfiJ+SfD2tjRjUjG9hcRJ4|jf5t8^nAmsNSAuv*gjSjCTb@v`!pP9UI!lU&5# zTJ!1&q57>zu4tBOnUe&5R{oSan+7&X}(|LIGO?v34QZ0|UE|07Zd6i2$AFENj z*7*yu`pBxRMb58k#jkT*R?B;-^Z&+<4-R-636$}6mrzy*zRU6DSPjMs7yqBE8gQ>m zSJft%gY9Vak?mQ=`qoAXA94w0b-+ilI?&@-o#3Cts$$P$^^pym;qBc`&5I6KwMxDT zu3|Q0<-g+6$;yA#`Bkm>Yj9QT4VP|O&wX@MD)yRt4?As-RD>nq^h^gY}fhEQJNFX@IL;_XJmjtcpx= zzN~`H9B=M;RjbZv>G=P~>Ugb>;O9^3lvFaRQ`))%q`QLt&Z=VVT)b@9OllfRHTO4V zO%vsHgekh4;;=pBIIA_EjjuA!ckvfsHMMfEs#HE!A6Yf3!1-0JW>S&kRqWY8!OEQC zq$eDy0(`1kRp6f||NlJsXBym~xxokf&y#=K6)#}4LSD4)e`U2~|9SFH?`e&)&C;!1|Xb_jC+D-p?@=r(Ty!_9T|9_tR|EHe-XtDhB zf z`sbe~|2^p$J^1R4Rge7h`wsxdGi0ylYf4~$rJqlm!ABuX_OiI z@f5QmFVxcv$_v#p$@!t4p<Ql@qp>35)hhU8cx8>G=(y= z%u6yCo0N%|OUz7}*=CE(rKZIsOsOfynC6oxXxAhPDmSeP0NVr>7Xap%odRh0_2H zrUAAJ+-y>&12zd%Ob0AATLflI2eh66xXqN$05qQg*d?&cw3-RnCa`!W;7+qsVD3yn z)-1qsvuG9|Z5Cj!z&$4OV!&>Jr7!epg}octH2W`D7SuOySjl23G^N3VdKv763L0R4f2&H(LZ|EC95=2Jo>dzXs6!8o(}rou<{b zfNcVcuLXQ+b_&eB7Lc_Nu*)o32uNE9*emdb$y@~3EwFqM;7hYdV96rDfa?HXn`PGl zx?Kn0&q{lSzBSoCV4uKhf$vS|dcX=Fkb6B~k69%!=z2i%V!%%(XE7jgF<_&>UXyeK zV68yO4S-)wr9j>dfTjkp-xL}^0|VG9@S90l0@x%_u>^3?Y!R5T1kn1%P|xro&s=t6 z=t9%{M#wG*e{R(3CN`F^nJ1HAcFI&UZEnUy%p#d1%$G9NP3A3_M02A|)a;R|VY)BH z)HKU5rrT1AjoeDHwM_P{@Y-gjOdS)t4Re$kER$qb$sBE>w`1y>9GPRxI+&M91DZYnXk!W=05o_2uvH-4q&x`NBvA1npuO25Fylc$>xTd_ zQ~nU3`9pwR0-2`O!+>o9iysDbGCKw4J`BiO1;{dsRsqsh0rm=XHJOh9b_*SskZHIUGuRYjOoO!?a_d?SIn<=A18fqgSO*wxwg}8v2WY(>Fw&H- z2Q*&~*d>r-T0H^SCb0Mkz!*?v?l?31;&}o4S?MO%Qpb>%^raz z8vp~I0!%Q=o&t1x3J`f3Fv(;;4cI5JT41sXJp)+rG$8jGK%rSBFz6XTawVYHV8Ba&`DWQmfNn1VA}<3LnCzDU`vg`CTx&v`0V`ex7so1|9(YXwSP1sGE)koPK}>1%)+P2p>R2Co6O3fyc`UI%OvsCXT) z)NB!$@j9UO8-UwP`5S=dZvb`)EHkaP0JaG%-U7JO>=c;01(5Y7V7XcJCLrxiz+QoS zOy*mF-2%(s0<1K91eUx781OdWKC|p?K)1I6k*$CSO!ij5K7rK&51G(AfE8N-x$gj0 znN=s!55#S}WM_|cEfB_!^Hk)N11G;?-i0lBoYO;3#_6e*Oc-@3{ z0#@t*TAN8?aa43zPXJV7I{XF9BbgJpxO<1Pu5J@U>a?6`_-ZvZR42IPJN*ke`+4EhF;{4L-olk+Vg@ms(~fxRZ_JHT3jlJ5Y&no5DZ z?*L7|2kbY6-vb(a57;X3n@RZrut}ie2f#tIMPSAcfYy6-DG@T4?a`&g9>^|;E+u{> z$u@z-KLQfWPJy{U0>p!x5B zT>>el)j_~EfyD;_Cz+iBa}NTt{s1&Ji~azl{Q=l3(9C2W0_+x8ehARQ>=9UUC{%0l zfH0RDiAO33jXPQtrOkacmxnV#nvr1r47?7L*ILG8901^`b z8wFaMq-ub*0wvV|sismOuNt6f1klD5MgR>WfUN@QCgljgCV`400PW2dff+{tT2}|e zOnG%c^XhHr3sN`bsOfTl+Q2Ajg801b`;Y!w)4Qj!3h1S*mM!_5|f8A*WF zM*~Kh@}mLGj|S`#$T6+z0=5Y(t_v7rb_&d`3&=VKkZTql14ugtuvcK5$xH_97FeDP z$TxcgmLvlP)B{W~%jyBT)dNK8116d5`ha}`s|6;TPy@h<`heU9fI_oMU{C`&0lvvO8IX7~V57idlhhQjR-mLQz?e#byrzJrrvPp=g{J@-oC4S?aI;Bi2G}G} z(G0NEY!R5z4A8nc;5Jj<9MHTuV3)u$)2anvo5120fIH1jfw?UJS*HS)n?3T@O0!2`$!UNArvvUY%T5P$I~@>d33$L{w*>4HSS|3737r90(Grk* z24Iz0B{1j=K=PS@M@`O|fW$Ka8wFOIq_Y5P1xn5WtTB}Wd1nEdwgRj(g{=S$S^>5S zJYiDK25b_jI2*9RY!R4oHlX!6fTvCQIe_Np0CovfnpWomwh1gg7x0|fDKPh3KvrwO zMzg3jAgwiEufU5Y^E|+Af#v4`UNU!=lhYQE*cPx+V5><=2dot+Ne8@ZDh2Y=0ZrQh-ZO>m z01es!whDY;QrZJH2~@NPY&Tm3X0!*i&H#LD$}<4XGXT2;cA8c(z&3%!F~Fy0r@-78 zAgcplms!*Skk$dPSKteinF-h}usjp+rP(8}Boi>8Bj9VZtRtXXM?j<#;9Ha339wIK zwZQi#)ETg%6Ck%UV2@cPFsL&iIScTU$;kpFW&t(|>@`VU0BZ$Gx&VGPl>&KP08P6B z_M5`4fCgOwTLpeIDct~@1S+}#4w@|jGj!f--9603N7!7}J

NcgQY?E^a2d%4XA0B^#*k74T$ss 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 G&G|3xXHq!; diff --git a/cli.ts b/cli.ts index c9533e57..8d99616d 100644 --- a/cli.ts +++ b/cli.ts @@ -1,43 +1,70 @@ +import type { Prisma } from "@prisma/client"; import chalk from "chalk"; import { client } from "~database/datasource"; import { createNewLocalUser } from "~database/entities/User"; +import Table from "cli-table"; const args = process.argv; +/** + * Make the text have a width of 20 characters, padding with gray dots + * Text can be a Chalk string, in which case formatting codes should not be counted in text length + * @param text The text to align + */ +const alignDots = (text: string, length = 20) => { + // Remove formatting codes + // eslint-disable-next-line no-control-regex + const textLength = text.replace(/\u001b\[\d+m/g, "").length; + const dots = ".".repeat(length - textLength); + return `${text}${chalk.gray(dots)}`; +}; + +const alignDotsSmall = (text: string, length = 16) => alignDots(text, length); + const help = ` ${chalk.bold(`Usage: bun cli ${chalk.blue("[...flags]")} [...args]`)} ${chalk.bold("Commands:")} - ${chalk.blue("help")} ${chalk.gray( - "................." - )} Show this help message - ${chalk.blue("user")} ${chalk.gray(".................")} Manage users - ${chalk.blue("create")} ${chalk.gray("...........")} Create a new user - ${chalk.green("username")} ${chalk.gray( - "....." - )} Username of the user - ${chalk.green("password")} ${chalk.gray( - "....." - )} Password of the user - ${chalk.green("email")} ${chalk.gray("........")} Email of the user - ${chalk.yellow("--admin")} ${chalk.gray( - "......" + ${alignDots(chalk.blue("help"), 24)} Show this help message + ${alignDots(chalk.blue("user"), 24)} Manage users + ${alignDots(chalk.blue("create"))} Create a new user + ${alignDotsSmall(chalk.green("username"))} Username of the user + ${alignDotsSmall(chalk.green("password"))} Password of the user + ${alignDotsSmall(chalk.green("email"))} Email of the user + ${alignDotsSmall( + chalk.yellow("--admin") )} Make the user an admin (optional) ${chalk.bold("Example:")} ${chalk.bgGray( `bun cli user create admin password123 admin@gmail.com --admin` )} - ${chalk.blue("delete")} ${chalk.gray("...........")} Delete a user - ${chalk.green("username")} ${chalk.gray( - "....." - )} Username of the user + ${alignDots(chalk.blue("delete"))} Delete a user + ${alignDotsSmall(chalk.green("username"))} Username of the user ${chalk.bold("Example:")} ${chalk.bgGray( `bun cli user delete admin` )} - ${chalk.blue("list")} ${chalk.gray(".............")} List all users - ${chalk.yellow("--admins")} ${chalk.gray( - "....." + ${alignDots(chalk.blue("list"))} List all users + ${alignDotsSmall( + chalk.yellow("--admins") )} List only admins (optional) ${chalk.bold("Example:")} ${chalk.bgGray(`bun cli user list`)} + ${alignDots(chalk.blue("search"))} Search for a user + ${alignDotsSmall(chalk.green("query"))} Query to search for + ${alignDotsSmall( + chalk.yellow("--displayname") + )} Search by display name (optional) + ${alignDotsSmall(chalk.yellow("--bio"))} Search in bio (optional) + ${alignDotsSmall( + chalk.yellow("--local") + )} Search in local users (optional) + ${alignDotsSmall( + chalk.yellow("--remote") + )} Search in remote users (optional) + ${alignDotsSmall( + chalk.yellow("--email") + )} Search in emails (optional) + ${chalk.bold("Example:")} ${chalk.bgGray( + `bun cli user search admin` + )} `; if (args.length < 3) { @@ -158,6 +185,107 @@ switch (command) { } break; } + case "search": { + const argsWithoutFlags = args.filter( + arg => !arg.startsWith("--") + ); + const query = argsWithoutFlags[4]; + + if (!query) { + console.log(`${chalk.red(`✗`)} Missing query`); + process.exit(1); + } + + const displayname = args.includes("--displayname"); + const bio = args.includes("--bio"); + const local = args.includes("--local"); + const remote = args.includes("--remote"); + const email = args.includes("--email"); + + const queries: Prisma.UserWhereInput[] = []; + + if (displayname) { + queries.push({ + displayName: { + contains: query, + mode: "insensitive", + }, + }); + } + + if (bio) { + queries.push({ + note: { + contains: query, + mode: "insensitive", + }, + }); + } + + if (local) { + queries.push({ + instanceId: null, + }); + } + + if (remote) { + queries.push({ + instanceId: { + not: null, + }, + }); + } + + if (email) { + queries.push({ + email: { + contains: query, + mode: "insensitive", + }, + }); + } + + const users = await client.user.findMany({ + where: { + AND: queries, + }, + include: { + instance: true, + }, + }); + + console.log( + `${chalk.green(`✓`)} Found ${chalk.blue( + users.length + )} users` + ); + + const table = new Table({ + head: [ + chalk.white(chalk.bold("Username")), + chalk.white(chalk.bold("Email")), + chalk.white(chalk.bold("Display Name")), + chalk.white(chalk.bold("Admin?")), + chalk.white(chalk.bold("Instance URL")), + ], + }); + + for (const user of users) { + table.push([ + chalk.yellow(`@${user.username}`), + chalk.green(user.email), + chalk.blue(user.displayName), + chalk.red(user.isAdmin ? "Yes" : "No"), + chalk.blue( + user.instanceId ? user.instance?.base_url : "Local" + ), + ]); + } + + console.log(table.toString()); + + break; + } default: console.log(`Unknown command ${chalk.blue(command)}`); break; diff --git a/package.json b/package.json index fb68b757..23c4985f 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "devDependencies": { "@julr/unocss-preset-forms": "^0.1.0", "@microsoft/eslint-formatter-sarif": "^3.0.0", + "@types/cli-table": "^0.3.4", "@types/html-to-text": "^9.0.4", "@types/jsonld": "^1.5.13", "@typescript-eslint/eslint-plugin": "^6.13.1", @@ -73,6 +74,7 @@ "blurhash": "^2.0.5", "bullmq": "^4.14.4", "chalk": "^5.3.0", + "cli-table": "^0.3.11", "eventemitter3": "^5.0.1", "html-to-text": "^9.0.5", "ip-matching": "^2.1.2",