From bcf39d059b11af68d574f797032fe41574ff72a0 Mon Sep 17 00:00:00 2001 From: Alan Meeson Date: Tue, 4 Jun 2024 08:23:34 +0100 Subject: [PATCH] Add lancedb-haystack to integrations. (#238) * Add lancedb-haystack to integrations. * Apply correct label install codeblock, add logo, and add link to API docs. --- integrations/lancedb.md | 69 ++++++++++++++++++++++++++++++++++++++++ logos/lancedb.png | Bin 0 -> 41512 bytes 2 files changed, 69 insertions(+) create mode 100644 integrations/lancedb.md create mode 100644 logos/lancedb.png diff --git a/integrations/lancedb.md b/integrations/lancedb.md new file mode 100644 index 00000000..feb45b93 --- /dev/null +++ b/integrations/lancedb.md @@ -0,0 +1,69 @@ +--- +layout: integration +name: LanceDB Haystack +description: A DocumentStore backed by LanceDB +authors: + - name: Alan Meeson + socials: + github: alanmeeson +pypi: https://pypi.org/project/lancedb-haystack/ +repo: https://github.com/alanmeeson/lancedb-haystack +type: Document Store +report_issue: https://github.com/alanmeeson/lancedb-haystack/issues +logo: /logos/lancedb.png +version: Haystack 2.0 +toc: true +--- +### **Table of Contents** +- [Overview](#overview) +- [Installation](#installation) +- [Usage](#usage) +- [License](#license) + +## Overview +LanceDB-Haystack is an embedded [LanceDB](https://lancedb.github.io/lancedb/) backed Document Store for [Haystack 2.X](https://github.com/deepset-ai/haystack/). + +## Installation + +The current simplest way to get LanceDB-Haystack is to install from GitHub via pip: + +```shell +pip install lancedb-haystack +``` + +## Usage + +```python +import pyarrow as pa +from lancedb_haystack import LanceDBDocumentStore +from lancedb_haystack import LanceDBEmbeddingRetriever, LanceDBFTSRetriever + +# Declare the metadata fields schema, this lets us filter using it. +# See: https://arrow.apache.org/docs/python/api/datatypes.html +metadata_schema = pa.struct([ + ('title', pa.string()), + ('publication_date', pa.timestamp('s')), + ('page_number', pa.int32()), + ('topics', pa.list_(pa.string())) +]) + +# Create the DocumentStore +document_store = LanceDBDocumentStore( + database='my_database', + table_name="documents", + metadata_schema=metadata_schema, + embedding_dims=384 +) + +# Create an embedding retriever +embedding_retriever = LanceDBEmbeddingRetriever(document_store) + +# Create a Full Text Search retriever +fts_retriever = LanceDBFTSRetriever(document_store) +``` + +See also [`examples/pipeline-usage.ipynb`](https://github.com/alanmeeson/lancedb-haystack/blob/main/examples/pipeline-usage.ipynb) for a full worked example, and the [API Reference](https://lancedb-haystack.readthedocs.io). + +### License + +[Apache License 2.0](https://github.com/alanmeeson/lancedb-haystack/blob/main/LICENSE) diff --git a/logos/lancedb.png b/logos/lancedb.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fe74fce8bd312b3f3a3fdf2d163e6819aa080f GIT binary patch literal 41512 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 z z@?|2<8kv8au2|1;XxzvP#S=w}=2j6YOQFZQ>4e&Mj4twR4X2eXsIabmd>)#7!~Zui zApj3r60c7V9Uwk@k)JFl+e^kYRVW--EWc>~vdB})IarIN@k@k)ZcuS*lnn6^k(5X1 z%Yr)D+rBSI+HCnXC*Nh#Dai~yda+pvqw9%*%RPIiCwuCfCUUv{SIy{F8~Y}oV`tqF8_Vt><6{$+N;>TBHxazVxXO21eX?$%;d$!rB@uJjqn zPxp8mb}DK%d04Z-U$N1qD;Y~UQe#m7?9>YFJC1OzSyFwvwgm~ouG64ET`@)vA)N&>VAk=8#DC?=tux(hUQY62 zLKqEVjjx_d@ViZGaU!o7dq2Dy%H&n$_*$KS!$YiG{nSKOJoRMy8rR0wnx1=N`B)?*nmP zyaNe6;344r$ZT0$Ew#YncyXRo=bQ;q^QoF1wrV5e)1cd+@P6gw=gtzSpsy%3KL+hO zlVhb@ND>_Xr+}#)2!40B;#f3zf@iIs-0v~BkFGJ7Z= z`o&bi0!DQI`%(UVHw}vTLfyTecI`wUO?5V%F~@y z*Q8GRI#ZKv-fvZKq}!J62Q4;ShY$#C%cDVxYH=+7Ev$2h%y{BBtA8KOB+zUxE`IoUr*{8YP_c4PR^a zMaK=trad5e8wmBmMaRbvG&nE4_nU2o;DdzxvdXE#^QY z6aE8eJ)ptIWgT>G|6cJg1J8`0{2==y6rj3<5NnKLm(*#7i}C-MuBC_c?OQ4S=Pp2! z3*peY{3O1G-j2tyhqnOh_`?z#rB|xQnA$p`vpO1elXUWaP11ndmbAsZ!u-8-!v-G1 zy+Q=ide|Eo!-X+?E^nEBV2O$e3gw!<09T0T9Qx9=e6^rdCsX_s^guhp4u=VDAO`%B zx{2%;jNb(I7r+2%ro6&lbsb200I`le4dg3{P~gxqT}ZxZouz3js>0 zl;b;m^P(3?Y{1dG=ACr`k&J{NxGjYW@1^Plp)Kv&6cb3>XG&GBvuRu0YR?%)C5;iW zzxlsa0Ma~blEcWQ6zy6{uaV3AasrdO8En53W4l^S688&RvaFj;P20QS^}xihB>w_# zl%QV4CitnHE>M@-N@vuFJ=o6>c>CbU7bCyp+9y9WLQTBIk~QV*iW3_ttL9^#la_SV zdllk0cq2D#jie^DZV-F_D1D&+dwgiESa0^t*`g&=*r=pPyI(E#yics(Lc=Qq;k1jX zKzKT14*%PbIF;5fCdhi5kd}`%&@ZN4pj;x;?W81Y8(=Hiw(~)nq{L^yY^Jh?1oyEB zZC-BuQl&Xn=MxMXqlke7l5YmXZc?XOdKc^+XGqha(OdppL=OA19^!VVTprZkH$Aa` zO+`Nd5L(1-=(=L-2YFF=iB+uu66?U3lx9ZB4K zyLO9*RxdZUR_~Qnw@d*m8;^ELDr}YN7)U_q1%UUYQbd{kUW+ecpa-()e8=*ifOS06 z&JBpE5-ZBsagL8rAOi*oE^5wgR)(*~v}BtnunxTsm?XoAlJX{v5!u}2xGAOx7HF0t zhzIDWu8cZxQvUAVH@5Y{$bf^isB}y?&VKe;crw7%wddunSOGVWh!NYYmjnkmZgf zv&NkLdodH9}x5^H%8Q86u2J1TvFV-CNIbp%O2+u@nr(BZCf6W(p03crJHQ*%sT{{nf zd=iP(Zb|ppqa0c%LGVlJ{jH{XkQdF3o?Gc-z?L-#!y71~X^=m+>b=EEV;-*LAW z@Odswio{~AUU*kaGY9w|7mpieh9Ew~=9v`e>bE70eEhy$h!u*KENye}^Tykw;@?0? zE7G*klr&Ys9Isaa$!zCuq5U@X|D+5AFe{hMm0gKCaPY@He%22no*mv=!_nGs(zkbI z9N51kd?*$>+tlmzR!ZD^KWr~%YKUM*(Xtfby=FPSY1LO8Tm0MbM;=JwEze288hJ@U zF;z_uQO+AT9YTgV0Y($T$g05gOY13CYr)#hmqh5Q4-N`(?Zhw)@t&jB$B9^ifng6w z^KOJF@$VetaRA^EcPw;}3I;Alq;S%^g72ELKNK4S8v#I@LtMSz(iCSl62@}q-wH;j z^ZP=vEKU!;nK73_vz$OYfa+G7Bsu?$yFUf+wa>4EAp}dE!R$U6vLOgOPwCYB93ZRf zXA+Pdd)zOC*`==dV1* z>cwVko2sBFgkSm#11i9)9aDMme)qb0;EC=PNmD1KW>M`mF;$ZMmKy@h3}KqMk3GoY zXXe*)NF3;9a((@9R?M+!o}U(Zmgs|m_v6%3YB**Uy@u|wiKf~eg{uMXbKa_~Ztax!)@S5ocyU4@MexJV?(4jBG z6IK-(6t;(FM^0683nRWQwC+J{lj&q9J63s2Z3_=*J0`o$oNc{N_yUVrH0()|t0-}V zf4%k*nwu0i!~N_Hk)fTJ|D5Dp1WqcER=4cyz>{NU&YSxYY5ZyM>KU(n@om);*;R7 zZ^pOSEUN6AkQ6to3v$pUp!r&|sA@Adz*KMG(w4|dTe4^>o?5PnkxMpPys>en0i5{{ zSNPBT12mev2!Z0xyo@dM^2?heOJ~~p2pG%LxLQm|QN~wgX`sqY5KtJ3tiW);4Ur)T zUATZ0tYTu=(dbwsO?<$YsC>a8G7t&fV^*vh#W@m8bTYt4J?tbW|5X$j(8VNALKO zjsqJQ)5W5B{`^J=t^t?`9@+0?yNM6LoT_STJ)7(9DbXt`MfTGkcvrIVCUSy@q=FIq z@D4EGbPuRUVlmsY`)hu4ab{iqvWzuJgE!#UB!#hH6hW|vi4IBys?H$S-y0YPX~4Uj zPjTTf5>-|fjB7=^!a5Su`9fk$TebSzih;q86goXDFZVLccdAK_^#nAFfJq0ftqc2k zFY^f(NZVsgGWDdiTiB}rYL|0Vx&L2jA5eQTpmwX^a}zO2a3y1b?v~}fz~b~H`|> zCzigD7OlQ>h|32F+M>khNmqmX$H8B7Kkp7qkd zZCLtq1Atzrc5Kv-Nmt~9gdT{ULxiB~mJ zu+SLOfgP$|DbRGT*dY;e+%0G3NBRcz9GJFnUp*;(Bw~=Lwf_S2O)3oe2or;qVPCN0 z!#!#$pesa(arbs)=#U%x@5(U)%GG4_l4gef6Ko2ZHnDJ#z~b^%8&|ysn(N2uMh?Su zfq`sd#&Q69J~)({ID&SZ8H`}@y`FEzGLhg@#rJ2$2;Jeq!0HD(>{GwzG-#XrJ)r%X z6oB_a2^gA+P_hp%K}@FVn5bs)VxJ64bq!x@Ofw-`N&UZ4rcYTl?2YHfB0<)#OLNjIKr2S4iX+s38q1H{klNcx}T7-l+ z9GL?56Z^(>tE`k!OgNgdlay6vv$pR{D=mxcf#t4epY2`)1JXqv^tRXhm>6r=5#waI zgl~hef3M{XZUcdIe~?e-ol22Z?_q=Dl?3S9yqzcZ6}LOB$$QQowVVj^<&?M`DIjgJ zDi!Q_^!6q|O!}~1E_S$@?@56Ie3DuJf`_{&gH7dbM zc;ox&ylwN=+T&5r<98W5LOH>|sMFP2pKep`jTDZ5_7;SXI|U0!YxpObaaUfFl5?kO*i+Cpl958J&S!CJ&gl%HW~?zMdR4nZT@V!qou( zfe;8y;7h&~uiV+@nvmu!oPXUAhsnk4oAieC^*wkDjXsfj;*rh1!q0rc?nZXz2%5+!g%g0;q8Jk6XULDuHcxADNS7j~BymK+NZ)3G#9Pdar84awO zzN;xcjCBHwVd?g# zRBJ{FUq7$~vejOfCgjCce%f*kC=u;?ViEUQ4ghxx>pBL#YIBr$}`ef?mLCjs z(7a7&X=O&0_@d19$3>ZVs?`ojtdb^3bA0x@ndcpBTVTPpl1#CW1P=wZtZ|VgI(-^- zAR;C7c=V2cBaTJcJ5MwqfkoZauus{DCyC2Ao6TH?8%bIec*6~em;Ap;y_evklR|RH z)Tn$R;UI2L2K&5-Q!muMbmEl{?C*KN>l2)AOC%XKnk@5a(Z!u^qQcE3JXo~kl)w7A z!`Q1I1hM|^U7s>L@l^G+xVlwGl@y*}OV(|i)p!S`JhZB{58Di7W(X`+`Y@dl7&Dgs zQ_&bepz6fvZ$6nH+DOR^LER*qw6tT1-2#_6!N@3RU0_|9ZawjD&`Um0)wV02kkQ6G+XaAclbT8U+} zVoit?$LK%ZOH7sb{I13*e?e$mXPwRPnGmFzQ0!O-70=MVVHF+2u`zj+ukkQz%VmpG zJLw%IWN7za2P%x|fn;%i9S<{4_@SSo^-`ucjilk+DA$RYa`@A1X0m3T;B*|R7$VD zIlN6A=4Soj7lsMx3B2FW-Lmd%t^6u0kgd!x?nJ;u6Yo8}UWfhA*j+|ivg2q3MA5G) zcYgunSP2VDhY(0KB3(`^No|X%j~#k!NT&9*^UC1t(|DK-cc9pK~*@KQw8z3zShi3 zvlmNs+76d$AdO|sm8Z|{b3J`O{1)%fS<)FZ=UEPiQrYqo?t{xGe2|Eks>P14d-w9l zk2qH!KXnDZZu&`~YjyP5#kE_noCvua0)Ca_G)ZT`GEoTSJl2j?9;Q7$J?B!w#F`~a zsQ)4mKXI<(=e}o)v}xqOw4&E-8-AN9pMlz3SI!}B3E-N1Xq|sSL1r9vyeScJ zu-m&!THni4+gCu^yI0v5PT}ot7<=^+o*;Oq*u{hw_ZI_yD2zpcPXZgmeQYe_!N+`Q zklX*ZoDQ8Z$v6YN;@7T|*iWs%;yJ8uMQJPay>?eI>zTKryvTyVZu9r*AE-m0urUN_ ze2H5;J}$Z^Plycv8T$DRm0h#3(OVcif%j#@5N(dXY;3h!_~w{hRSM&_K#=_ONz_V7 zO0gt+**l`UINR#nGK+JYxQbL57;7Le1WXW(5U8{Pn9b>K~CL9O$D&yi> zWGowaeTdH9o;qAqn$n7^(+%-%KI;tvV+G!5qFklyFq4^1pU|8^ zI?jrp83q>5lk(^{4)q#Ozf_tc6Q>D?S#f+(JCydyZE5udHFT0KFL(6K_hyvAooRze zzcBxIT#qWTF)jcU+7Fq=O4=@yI}`sID}+o&*_A!nyV->Itg|FAkDB?X<76UK$2C*<&QmBhb&5R zl>&8M+~y?oi$+|ZhoV*Ae_IM+S=tt}AH$00v19BrNGBQj(ckm&3?a_x)ly5oEYrGE zG|fqO{c&lIV^%l!2lEq717g|*HC4Wj2{c|{ey}_Bit88D6x(qWriK82_##|Av7$Enec z5@KChGM8?llf?Ud+B?E3bz=2t#{F4A^MnCC98Eqd*_s;fGdY_xHZdoo2dRSZ&@MV7 zvDAKXmhh{EW2+mFn|l`q_Yt76qc81&9iEiJyPQ@(hH9AI;oizAQri;1)dZ2o*1s?c zXe%yd4rHwM_5#CRsPp=&7?z4W6+7-;56zUHiT39pV zuO3R3t8Tg4{4A#(-T&<2;$jXqr0D%KwlWZ*HE(MRL(+pXPh#K#5~uWBD=e~!g^cu| zIAs;<-hiGrg^X88_NgrEbP3Q{;_4gJ8{lR^OKstmA%A2_xm>KyYe!-IJiv3X|L)Qh z8IojYe@z3F`Z7{@0$ZUJx`K(z(*+0@vY#i%z(&~JdRzS;-zm!0`Wf{#7cl~h zF~F=OhL0&^>Qn25uNAuvot)JlmxR&H)z`@>7R`cMi810m?efpIzN*^{%`wV)xjsY3 z--iP&Jw%>Obu9k6?F>_O|0sRgxAI|p`Pz0VX|fWMd8!^zjlN0Xr%%1;6gu_X%_M|H z{v*A`Ewf88&Q}16TbhO>uGCY;H}?jh`BYC(CxbLkQax>lH0Zn@nQY`AIXO@Nh*^Oq zmjFPQOe9a(#Q_z=a6E!IcW?c)YUNG)ETDwEMHP87}2^QSA zQu+`X;iKy6ntcmDrYkc@|9odvc<`0+$E+-(Ef<;;@J_*C>qP$G6USZPj+q28ly?La z$hJkwGSg7E4>zhg&Y2Me>Qt0YtHnt``;Tzou11L>Jdn8=f#c`EXe8q=46)EuAV!Wn_tecsnK=LbmG1 zWrD$+IBiNHet7mg4fDay z)I7s-;(b@|Rs)O{B-Vh-J@I+bmRGAEB>W^pJZun&Har6s2Mw>;98@XLZHC(5IW|MN45}FD z=2%o--+`_DABAzlBj6VMj$|?CeB!f)ncVC7qn>UZ{}{F4oMq+kT-(AS-*iW=53ivW zlbf5v^%|P5DtHKle)aq+QAM5Kk1`xqc6L4gX`bGtBO@&qo6QVY-*`SD;V$2yNk$et zkr^4I7O+|K|lmz+V8_9!|bP{A>x6<{1V?vdyx{~qq);yo~_wVg1_pjH-9!_R| zdH;UBG%5*qTpD1tB?%=H9NFcYn?=9(xeE-_9w83|M=S_V*#BBSF=qi z(XvrrQ&EqAacUon3f}5LJSkkuyMgSqy#lziSkXX!+h{k7J4;0OrM0{TQvo%kDZhMd z)@azf{0%|86)he~T{oFGIy(tEaIFB06gOPTl{FB1i<`_pL7&RF7#zR6nRmVLE$iNQ zYh3|BOMaC@ap5i&sS#Vv9I~LQO~?W;IB+d2(D;%`RO0%DBVj&mT0(I_Uth+7M_oL9 zf7GNv*-J}Sz@>C+mDK;C$=IRl#ma8B{`C`zpHG@@h}ldsJzV|yk~{m6`@HA45y|-e zRROG}e6MNh6R?Tu(R^ii$(V+pxg3;BvJLXJ9OFIxu!|Rk#9~|^>(Eay-Kb=hqfwFm zrg#)IQu=cg%l{g9i}RT#6+9{l;|=cv=D__7e)Q_I`to;U%TA5#v9-XMZ1>X2maB@~ z^5KOMKHc@c=R!?@LD_<})G=y7=qdB<2kf{**#tWhms!&zi=xdxby-DvHd(G)6H+b& z#k#C^s$Or(Fk8}O>+e*qTgWgDlt6c)4?gp%80UO0P6KId>Q$Ma0IRQ6u|^K1h_t%? zS*v$T0<*&Yvt;d&{1*+A0=)}C;7SVroIB{wtnNLpdX+FA{pT(KLYa0j3LrMm$LFo3 znKxc&(6puBEg|>K=_<;zjP7@t{<(R;PSXp#gk8=@TU$YYm*QuvGes8bOSFr>o=IfL zd)!^U^;V0G4PC_ZzB?gNKkxSTUX8M=e}(J=qF-@uP+CW08l{?-KZvr%R_Z;%8Q|j@ z9NG)+@~ap$zy{%D@e~j;*e*Ve8=ePYv9N#+DXqbRc8d0BC3u3>96r2CT6B;nf$&i} zjgzKxjRy`oHgUYnmx;sa_7o)}gwd*&4Z;YTMGIUfSX_KRYD+-VX;w1)3cCThVDC*} z(cV`1vZym~!I|&WRr52l<1INZv1~8!A%Q&I z9wLqUX-&;>_oBkmX;I((UDM_@hI0n~9Fxs!&(KHOZ;*^`f~DCC+G73RElSAb$-uth zFu`3z8>Y9u9^B0E>~7p+qS-Vr1y^4bela0Z+AVG1iBn+2$ycNor+%i5PS^0$vmB9t ztHyeP050|i!-SMJo9&EhWaXo8fIVdSeh%)Fo-Y=)u}l_kCbyeReX3F3rq_#SErL!J zmzfsxsweCzrUBow>E0}5lRCh#)I|X-66+|QyvKCm&Z$4-j^lpKsKh6}bxVpx%T8KXzv zq)ne?v~~Z$l4f2Pd!-b+VopKe`@tlHuAT2ob&8njecx#HU-Qr<4KiF9f4VKTty3s2 zq$mh`x&-LfRC-H0+y1PXadNy3PcVJ?Xr3F&J~CPO^F*ow*ff+J6VL6Q>vc?RV!6#h z?n;3!L34kEPkndW3|KU&vEURfMuhU9WBdS-U+>fKje0X|@guiBcYit?-WJg9PIe!$ z%@eGyp-}*&7Bi;tCYMoE<5WLwg-zra=0xJ*bzXj$O25mHIw^wHG}yHwlyJww8Eh{QTSBM3=zmS)&9+(D*pNB z6fBEdW_ZUu*OMi->8r#AlS{c$DKpt9XC*-_Hej}fG{H}?m14fS2d^X1UdaZ3TyVesnHY#HiX|@L!+s;pZDGRXlJjSlx8+!Vt z?+W~e6ru6_ zCSN~EqHO7S&%`>!;capzR~&Ra@kM04_xAV`wF&&?2PJyN?Y@n(r6`Lbkxf6pTR>?| zT5M2_&&*I13oj+(C2!bEcGUHcG4+6Dwn`-vz&gyK>B0Szl5N9S`mvE;Wq!CG+NyBn z#VZY|UgtiNBz~LAaMizGo3|l)C8!cu{Em9Hf-Pqt%R8yBBSVvtmaeCOHN(2zo#+NsZD3n^@RQOkpyXr1QLUcU%icEOVaX>wJ+P=h(rTNMwou*742Ur;ln#Kyze7u5!h% zdx3>~Q(H8>@YByuf-B~6INFu#k6nZ_nSk`?QIu}8VR->_*&BXqQFrOp`x$>gGf08F z{#0;}^b0do_qeq@M$LA(_V%ls)BW;N?x~zUhqw($tQvIl$$1@R(#s#fGO#Q+!l(E^ zmQp2O30-LcCA~0nNl6B=j+iLEpvoD@_Fk9kR2R=6+8;303Cn&+jb2y_uzv;1O#%3+Y9v?fk0Lq)8`4RQgpS>RH3`Suh^EqNl zPt+@xNE9v-$QZAAN3gB*)UO1Krq0SuDIYYxx<5i^5_z0_oL=oo?fsa#%Ri<{@04|} z!VZCv|2j83CLUW&TaxQT^C!Jzv-s}9yUjmcaBS$uGIz0U*=+gRSA%UtaxLa&l7}G< zaehMtS68UlKi4~TeTW_>sWff{Z!lc7tgp_D(GlOB;?*h6*<;>e9`WM3Qf_o63Ci6D zh4+>@k&}|%y{PRzO&?ON!n{~gk`~W!lw(2^&2~M+NF?v)&{zP&WC z=)B5#?xj(VO}dkuLh=LH@I^P*yZ5tupCyYo;aLi+le~FNzJNbJ+DmCj-m*@QAs_A* ziAfI43mNa0JZQq}oa=G^kF$#!b_=gc7fKSn2D=v? zL;xGk#XN}U*XwB|O@Y7GtH%}t)oE03mVpsWf;O(Gc&)ztX!Mg7Eq|EjYe<=%PLFq1 zjMW_3uKLKTR0fwo&it19))=Y4p44WruoQ;4(BWxqO?UhTgRMppTaFS{`-srk(zAS> zoI<^1Sr*iEA5tQD$giLNbk}R+o|7=c5is_ywgopr~DK#GsdFjq5Ni>!+Hog;96gj}o3O2STN8-}P_hy2?ERRcWBZP_WT z?d|q@?B4vy%JR&1_Yk2&-qCDSQK1s0e^$>C5k8w%XY4Yz>0Qu7T|ZLW&&z!enTo3w zkTr=7%(0T%{fa6)pPzLxrttK=4bA>g6zvhJsk|aXF_Z1s*p12R_E@kEwmj`}_aStce0}Y#K;ea9E zl!LMtLY!x%%;_D6!}TFCE@6Y`zwBPseI@_~rB`;7IUz6N5=cj$2?2jx3j0lhx}(O- z3xvQY`5L42#m09;uU^SAV-5vZ$p=rGh13tcxuP4VjKJQvm zwH|mySwvwU(9-e^Gf#@%!XiR(vJy(QFsL?jKV8DY>l`R*WPU*q4bZWn_5U^4A|?&L!ohcDk&Gtbcp3OtoMPgVtr#I zZXuEPex(GpmAYHN_yLrS^lOg3XuVr(N9Ud##N*kA6=By98FM_c@lg!>_{cJ62&tfynFfyEgp-JOcgMbV4vIaQre*me4h4(GUmO%8Dp;^b?$rqMOqzQ-d? z(F4zqCd*oJrmu#-)L8feoKhW+qe3@iXl+NZGXHIkcm@tC%_6NNHa$BoKy7s&py2Mb zbm%g~$6U%|@vnkD-hMPS$ZNVIc4>g%MZ?pJwLPF;AiE_~syzB}4?)p(=)CuFU5ns| zVkch~`15eo=*z@jMgNbjw+^c^YWhYMK|w@HT0oGHZV*Z7MnGcI(%ndxw6v7cf|PsH zY(N^3?%H%ncS+}2+vk11@0|1ahu6g=-1l1d%vv+EX6E->844NZ9L3uBcXLiD#SqH$ zIy=iHDtBFL;1N!4H~|`!O&J+6le~C7u)d1ks_>Ss#k}~|q-(a^Z$9PB=i2dZMK&K| zO((ggEBh8IHcFQiGu6={wpabKEO=#=?nP%+FOZ;^xXbP?iR-WSFsnsj>DU)Bb-6M% zWv5G1HdJKmjm?C{LjHe{ZA--ThAz}TnNwCd)RA@f`=AQV>)k%bwOz|8EpL@C3GH8f zRh=BOBe3@tgBIL^I#=7$DI!uDQT;M%w$rmWqsr^?rWXX0hK0PMgPb9EKC+L>GWXnC z-oXprw&3n|;A>+H0sfU1KKCcG=@hMTqXv`8x}mW#%e=(xvXZe!yDTR>Hc=DJGFv}& z0YGaaUi>e#X5S7oH~kOeHpNA>wT^oeu7wEdGs77F7VJxLnF{)Z?V&tLoU>H_7L0+f zj*`JaYP@``COoNz+m6b_get)~1-B$I!d_2}M=6?8g(8)T8|QaMc&&vy4X66EPvgy{ zdCr(E=uDoQc$~~|+VWk%X7`?oX^^O?b#tOj$w?YlP#4~ZVnXWP80X@QS`o$>l@SeM{KZOek|v^ioT>Ut{)$Hz&vWpeZ0gR&|+vnxN~aSA|hAS zvLNAGVGitutnwiw>3}0Si+7goQy6om?@Ym13L8SprR=l1VrMtg@Dr3>4!tQY0Ya`{ z6A#zY)&!##CRn}7gLfk?jRjWs1&OL0Iuq$Yi&Qi^amF&)3%t0M&PiaOD}Ie4{SJ)8qeNB8Na zQl(yMop8YWEK-K*Smt;_G6OmLwuLremua~tBoxkApHmv~v4l%leqh>Syq>?45~%fr z$3U`E+j4n;Kc9;%J(y)%kSVeRulR2FwvS3q#b1>1f+5OA#6g=NXkglAM1Luls`pmL z;f0B<(IFpL^*NP(3GkfHwAeLE z0&6l}tU3ZR=T+vo$SfV2g{1R*739fWEOm7JAyTRf$OjTcM0p`~pEC8d(`=^^f9djiS z6rQtTB3IH+rk}3Yd;93r5kaBQ;GO%vLF&0FU4-a;H5%UVlfoTJ+8(~os_?GM`&7_x zMCZ&sEvFfTiG0%ngj7BGlx{Z1%p6d_7?`dee@vkvURA0x658eq=7#l$u&arG{N15G zmZznI!ISRbSL1}bNV=XZp1Thyc@;IFRjW!q!WhfwOi{@RvW7UY`v+DmO9e(^AJnL< z@duu^;ySin4eVbQP4m@^(c2RSFbj#B=E!;(6F$a`ISVE$TLH&B!icJz)eZZi{7Ns0<3Ro7;8J`9~o zYqx(b^QAR+j7MjoY5Me(%{U$r=#e^OT;v_@SxoJ8?0a^P5a+W@maGe%7(xOH+jm(K zezvGMAJHDn?B)gE_2IL8-M!!NZ7-k4mWswvC9XfGItK#UF7B5pATs@k`S9Po$9|KG zW0`b0`da`UAf>grbS5@9SwN#yl@v&gSrg_rU7|i7zPpR5kwkq@o2;nIRA~FakRP1-&9qaXyRvrI1R%Turmq{RNhGvcDpWX=wR&bD|HR3(gPQN+Aq{5 zZD(+rHxZ_`ApJo~^~bmRlV<$Or%cqPUbipQo67GviW=et5aNPrX}m&tZM={~WK|9J z306ex*nHogmv2d?1$WDMtQvjGVfoB{s%s-Vc~pK zFp&Zml9*=ux-5jKCVg{EvWc95Rag+^-r_BY{aCNc3 z#F`(2q@qC8gr|JDdoIUS6G?^3aR{B*V=)a)vQR7l5pD9>-9714&3h0{fa}1nQcpbv z-I6Ls%@8p-g_*a`G08c1qSO$CF6LDkVJu zxy~u9XO%5^yi?0B#254;4_4B$-?PcvP9cuoap$K;7k^1tCf9jVeQ2Ze#2y0;2@lW$ zz+P)AQC0(qXMQk?uTky$%ry{+iix%{`ms^fAehlfiu&OFAm#{M&c4&TUsj&#a)0r6 z{A%drSChpMu(_wZbORBB8>v~7LYZ@EI7D%~lVUnJ+Lc+z!eYlhoz&Mp@}qzHe%<8c zbA%Y77e}9SG_IziZ`muAYiXC+8HV`Q{xV4dvT_3r0@#y>chQfK+bQss>*_&QJkC$d zr46Mj3s{%&Er0AIzbxL3+oxuOWc$7C$^jOw= z=_VYsKpE4e*}FG&Uh8vHx>1=ZI%G%Zlip}d6nDg$olN`wE*^tS_N!~%U$>D;Gt?%>u9uAP=O*ecwYg%@80RQq><47{ zaq3;u&KGtpo2A|^;cvlbZ{zVzCtYg=$e&_WUsw!w$x<<4KOJSTF1+`MD`TcorEs*g z&7|0w^|KM?N=Oq|K3*}2q-fP(a|BkZ^zTKm)tf;gf;mD1qMUj-v0oIAn-C&Dd%D4?^l zm}W!kx^=mc7MmMmyfVI4AiuD9k1qE}2mQC@tl66jrOImnU3edjT4k|HkE8)j9g~to z21XA-(=OwqgvDa?m%w);g^hBf9^k`Y<)HpO#e&J^Ls%cbi%ImJ4FrHj{ZDS7`QhB{Ksm z)ILCk8tdRLP?bdsdfz30xy27~ypTjWUwRXf+L`1Km(+#-UHNQPhm$~dzL z$qlPy=jP5C!6u(DmG;+;Cy>vg$8KP=zl-2!V9hNG!4V3oU|g zBtUt7Vs8g%69l_a0=-#n_r1AXTJ)<`m+-S)1(Y{v(ck*5QJW;P$Cq$E6-usUe#qDV zfNJa4j@gWz)o~B;Qr*|{>LBJ;rXp{l-+9$1hzLR*g;1^ahc+tcCILpZ_5PTZsnkf? zEhJXI=H8P{Ukc0{JMZUnVhwse9Kb+;O7bO+7+?~8X5xw*_yNAP>)kgOswmii|2K)y zY1cCdmf~WYv_mt9^!@tSAKEjg(IMt(Ki%IVu%^lJ%fs3?9XmoDw(^_~W4Fbjc16{~ zA>fM_%;o$jjZI1#?aq)qr=R74kz(a9CIb!cufw(6vdSLaMX8x8;LWc+m zK~-l%u8UM-7^>IZwdt zu)e{+()~E?Ir}-PT8!1&Y|B`iy>^REWwDSmKV>a?8hE(iR7vm9O1J~fmqL2FKfu%V zEw!tQV0=r+*h7VFJ$dK=K?`UT`$_yTL_{L>$nQ~3${I|NT0Z;2fakoAxo-N~Z10KF zBsz+BU<_bYpvU+{9AlTGibn#DUMVL%oL9agL8kz$_Vs~E5R789XY|YQvk2q*uYu#2 zjpPp@0DJtgb8%gKp>Nmc@|Ch7=$+yvwrV5vIo})ieNOp3-E8PDi%mYrUHv9^#@MEl z(%&g=AjNj-rOuLM&vc83&FHPIos(1ydKv`ty#G|K{C9XU^^Lj9Vv@^iD-6nvVLtn{L&wcNqe>8^lnUb{1lJZJT7>{+dQrs^4rvOEZR zF_|Y#h3XR~4`c{fVh7(Hzn)1}nx0BkxT)O1g9A9SHJzciWc=WB0KgC(#^~n^(;#EI z*i@UD_UkJ6JZQpfeD=Ij_SW1(r6nTrBEwTFsA(vCx)|RLZ8kLfF*@-v-?mAnXuSCc z$6JX`#`Sy#T9#;41oM{kxX|lDdm``#%j(CRp@IK~OIOICNV^B)5GV4FrX zMGbY^3{G$@Lx2%D-+lb5>+|~j9%RX(olK-iC^GoLklYeSZai_rc%TZ$SD?_15Yf(B ziGtnvsEfI&VCLgJt3*4!Emcoz6sh151aX1=E8tF>DIg=Wt7ioL!@h0=?4Yvmq1WW} zobDcm zd+gq^1vH0M0PJEdP^CYt)*3%2U+d~#gbFR83c6)t(Mq@arc#U!y8CGNpoOLc2O_OM zFOmI-g>PQY^WF`-$vd5to*uPGZ-07uX@;Qw5UU;mOLt0_GFdI1F}xP#drEF8k2 zj&PZGIOX*=x_tjRzMjz!nwTc~DI9@iQ7YPe_Uuhqt>3m*soDVVOPv)DjIl)*|76C` zhX6~qZ}qT5YK;(Al@#v!o=3_@`I_OU-{}mJc$AauO#>!mUn9o0`V-bg>hO&4`u(7f ziho^7^kS6b=N~XH6R^!3`E2yFT26O`1EB@2uRDiVhqt>%XCw=7fGGyR%5u8q#kU|X zVgqVuyb>DCP(7@TRme`Hro2f#bxp4Xr;ur40(@jta8@S$cX!*3p2|Ihl(+$;_QPCe zcj(rXo*dtq;NJ!(wEKxE&;4Uf`)MS}mTl7Jgo?5jo|_Q3wy*{Rz;^L!5WvNxx?6Iw z{SOOoXj%0HRs zdxm5}l?keTkHcWxM~yaReB`_6Rq1a#{sth!NMY{v*bKC2o-Y~l zn;4=M=L4_p3J5r!8K#TIkM$y`2EnM!!XN~?dmfjKi)+H3}0#waG3xVQ0yNByaV`d3M`?Eifd9Zj%AfK&yHSGAaZDU7(iSHIBB9XfXMo@=;Ni1ffMudnIdcu#sAQfs#l4vu}!JM;I}?*e}1 zl;%s~rHJ8RRSIO1XBZd(Iea~3j}ZFW2c4AS=xp!zbaL@sJct`^ks5#W;XiR8Sz}Yg zxq+PQG@gYQiuD7O)&R+J5$*DLRZ%58GOP=-%QDDeL9{JsZbWZV9g}MNBj4a-WBQu} zcmuV`+qxn90&9oBSX0NgY@e-RKw6pg;4T+b(bFa46<`byL4{$Xh@;av6<(HE{752I z*39PqkfHIFf+w;iTp3>RIo6?{4DkERLY?KN04|nio z!=^2UKPf~hy-Gp?3xQR(-*Y2@+bfO7N+n8~CLjJI{N*i#ZbavI)~)EY?>) z-Zw}mjS;9n$8mm$`mB@#B~K&GCQ@h?#DR23bnYE%@%&whBsahad%v#!qYR9h+BzVE za1$bc1Jvw!VZw1M&%n@kI-QZuujW?fOS&_^ZbkwhS@!9TJTWeR#y91VwhkJHFbu*k zruGtyQSXL=j=u&@Q}ZAgZok>tlO;^nl1?mKV9!Fx!}EZ%LzFJ!B`JtaWT{7@ep1PcMMx24RXQ_@%Oym2JV3rngm^O^w^E-@l=ns)M zeK>eLvk-EvD17@w$KgdQ!=6IXs_rHxA-%nGW{Si|z}j`3Wjbyz(OFv&!F+8^QfQ?a zufK0kCC~e*2==r>_1BtPKB0lmCMHA-=C0oH9z?A{1_hgXo2omZxjtpgLI&+8{WE8P z-Uqf}lVSeSx%1BU<}6v1h_|hFGLklI76gB;;>vB{EP#pdEOk_N3;80&T-PYZq3e=HZt`joLT>uCwDP=|xrQ2-Yc? z+nrkMyY#3}AEDxwlU{xrlKG;p_=_YurtvZZmY^oso29L}F zzd!NnpmZXJt{gRKexe^Kr5Qf38^cjInDzy1XtNJo4qu#c`r+Jy-9}0by zluL?%9*~0;CHx^?U~UP4;Y&jSywCvt-xHWPRRv-{Aycy=sgluQWGtB2y{ig)-G2G> z<3o)6J7fe3V>5KudyDQ~iFPubpJb@Zer=Xv_zC=ZT1w2pH%%u+FRgj{81BiXV@o8K zq~4QeKmJgHIethh+wKS=^zzp#(T}t`u17Hjr>QKE>9eI!z@w14CWqrh^WFLHxh8P8!H~ZRLK(kWe5##hzRIM>aE;wq@E7 zdiw|Zigbdw9jWFl#Xx;nl8&Y=nm!Zj8NFQ_Cw)4;gFn0c zXD>}2AZ|Y^OyUaehV!`e9Z_RZmwOA39yWYMOGd;%h2G$n!&1Xfz^c6bOPU>kWPk^j zNs3AKw>HZ`KM2NN)r+t&EFu@?2)E%s5> z4~`ZsHlEs&)v{HQFb-b;6)hDBzWpE4d;jE^|8>#+fd>R)8sY{#7w@V`DcPARw!Of~ zC(?jy?!Df3&h3b{>w$IWox$C<%h|RvDGe)kPOCEVNLKVXQw3?6NEdRY)Ym|&_bVSK ze@me8FQK~EvWRvUen3V^#GdT_>+Yi_9eeou&VE{|EphbMo7{k<;?CVIRN=iRX9h)l zpOEqamh$I=6Aa?(Ql0qNm3Qyv7Q<&a+z4fUj&gOLbE;J) zIeR3ohX71y7d}Tyq4OpB(~Fi2PCIZ2F5e;W_@G~i%Ce&@Ks0q)PoL?VD)gu+^w%S* zt+2J1ofaIG7oLLjR6U+@cPjW8umGe#1)sg?VJ<%|Bd}izpoeRcb6-0u?A`F)$E2n% zPF@7Uh6y_y)e@c5)X=r1?;mgZzsT22J*}s|B6KCoh-9q787h41g%1Yzx7N)ukcY-54+|b!FetCGq57qV z&0NYI|K^XtW*1G=aMhZ*)He`PZ7I`}xoP6!J)Rxfm#~k&8K@D8&^J2L*QA8*^9ftR z?WdtW1RqJK-@Nk}Mr>w;w$1Sf{C*oh{1K(n{q2tq=JyG_*B}9JI)Lx=Bx$vJywWE+ z)n_p(21CoC)D6gh;d82wP*QAcE_;v2w$KL)fNQ)Hpo4lQ+ROly^dFLvLdf$dCA+#9 zRd!(yuXO{(c5uT*pWRjt0ZGF+6a(VHsp*V?P~&4DkN*Xu^bz{zz2m_t$6HG3;ZRNE z*17~8yO`iF>0`Pm3csJS56k#~MFqY3V`CQ%S=M-xbn>(Of;nwkh_6r{FxREj?6`W& zWL0iARTg=u*p8nD1TptOwF!?uMF0l>G29myRF$t@xuB!qu!}eEOY}4sOgyyY8pPuJ zwZ2@ng|$hpFh^}NOEW0Zxphsf#td)!lApk>a*Zgc zXo%ow?^O$7TI+QC*0ePLjf(RZyI%_efKuWmn~IqoH~3nep?NJm`AJPM1aj& z6t4`%COQ@BV%#(WeNcbUqAY@`#s$L9@Mbe!>nhars{fOLs6s#^f!t)(oqE}x&KQUG z*-vBP)lD+JWWwS|E92RCo$M~3Ps2CeoyRBD?w~jDZE=UDv*saJ&rQ{r zw`ZV6>oB503t9m;T0uG|#b*U2X`z-Z|GCL=13l~5?%Q9g)pL8)b?~s2O>iPwQPUu% z`@6@Ws2@w#E2dPY(C(t2(JvT&N)LmD*qOOIO)J)Z@^R+>Trae$Hx?9hk5?ndIOVA6 zx2;blW9zA>`b}MDB({L#Z&~}B=UaZH##b*7bu04uWs0;NO=$9s+~n_AQA-Jb+K^4i?AgVuHm7-=4{KT_W3 z-SD%|XBYgTlh}071vR$&t=%ifAj_TLZgE~f_{D@LcQ%8A`yA%gKSpz;WzN~yBsXS0 z+cLo#Ws3MMn2edIO4+HiOC&-fOWYmO#(^dCWNhU zT(1^Ma{R@VI@bqSgQ+E@dwF^5=fjLBn*19=|vWRbYLXHvvKWbyM*n1z2|aWuHf5h*DjXm5L4MT z8Ij4oOeAgeCwHFaQ7&-?v_$Q}*>_hz>I=hQHWAfIY8bnhH$YsMVo77(o4a;%!B`p} z{cm>~#SK`PLwl0(-7_N$Z);YVlamIS$B&0YoP>}zM(_&^!>uPmwesDjISiiG{CV_s z`^d8mV+bXNnMlf?j?bz_?ir&6tTZ5GY|2bdDmA6*>8jiN94=z|dftV!CgBs^w_-j4 zgH32+NeO8bPvvY&HWiP$@A1TC21MyZ)3R0ubeP`Rp z0CLycj2Et^RRKq+J%4bF>%882&k&W%u)QQSo&7_xvdD9{eJHs(Q1IOcmW!#^aK3Zm z&3Q#_P)dXa`^R@B!WVXDVbOQeGaM?a-9H zj$c^y=57+H%>0ooTevx-9QDp%+*Xk)41^4)t#1O=PoTAB5JonZidl!JL$-MC@{o9i?QhUqBsgalO z9u;iypSQ+i2Q&M;U^Ge3!4B98)s(}~IVx*;vjso2b}tEN44N97{`ltBkiQE=j1N zF%76J9fbj&VHh9JVw*hpmks1nZ~L7B$#+XQt(Y}F@gtMDsjSun)Ed6GI?fT?=%AP?g^rCga;Sz5nHp>@U4~G zdFO}l&I=4H+6d0$N27mAAwfyTcdcv0r5doM=ah1kosWEH_u{YQ8)=6|dw-8Us8e|J z+~kX+&H&cX2aMbxowj!%U+o-0q00BzlK*tXx%j6Doy(#LcTzXFD`Vw#{!fy`_P`vL z03B%ZBfqdJ+L6X8pj%_%j`mV=f<9 zFtzZ`6XFbQ3pwsLf*f?~JT|DBU3M9t3ETJkneM&D(5C$3`$1CjrhZtvFd%`t)A`k< zoeEk%(cPX*?jPS@6lFK^oOslH0Bb^I{&2>UwCD4mXAVK4M0cz5XhFvXPo2`FDMngf zx2pp3+6&m-_N4dLc)wcO7mP1gcj}F+2Bm{lQ5-92*{z&PZR7vm+tzG~!j#%vH}l&z zlVejaQT6a;QVm`ucNd}Ys9d{|bjC}3e3mSok@jEt#Gr62-pRO{UGY$?^MWjO#C(pp z&aWp<`xb-BVyyH==%RD}%yX4NDE1eW=i7ravwIR8cU;%Np|j|u9aMzD0mtbErbiyOP_RWx7paOnIzSd3dcZ71JU&{}vsR8*Z0Zul`Z%T%hBS0+Q;; zzDDlz)L1YT~s_+F8_`a9>&=SC{S( zJWz7xHI+^eULw2{OR?f@Zj)~>Cw}eR_WVqzF5wQZqy4=ZD~(ST5C&_EVQN*OQoPzD z_L&Ry@hN}3V@621`UBro1@foP%>A~zvLk4O1xR)56i{3V>LE0Pvsrmmn!d}xgod6{ zS^Ef2mrLhlY)A*gVBf&Z+I5Mr;MuY$jA-Ykm2vLYaNbVSv2EMXRO;D029-SZ$y6I!Af5d%O*rFW z5k#eyN4w_hi)PX@!Nkc~Fde}k5#d$7GeS%}Qd&E&ty;!Xsw6w4L`DWMAV9zDV_{f7 z)9v-ALKY9TrDnM&jQH1aX(P+q!kk_rZyy!q1Lx4$!P5fwkFjlMwV}Z_qmzGUVr>%y zTe?z{lViB>GT3_Kg@!_>`jFxzVuyrLYf3+E)(4xaCqs?cZU}U9eUQ}f0nz?cJzRkA z;)}0prz$2E_Al#uHtIL)p(IQZ-&2>7cUXSbE^Q;0i|8l0zN7ONlL$$4RsdQ8pwzlv zk}-tkhi574c3!+TL)1acC!JQm&GR=c7X8*QfKo zBPvB~a|h5NI%O_HzDmA%F}UTOmU^R7scKU}^dm7y{zYWdiA z$$l)+&-Dp@I@ljwK0LKXy+*f~a;VkG$b$Q?A?Akq1Mc zHYe&`FdE3lS^JB6B}_SV6uQH;VHyvST*`04@9c%j8QKyGKsvjPw?w{lve*qW>3}jo z3OYszy)CGY*GMZe4;Jiw!7D%f69Z$z_vz`}$O{T8Q+OZe-)kBbY{SkGAg)PD zENYeCGvYkwYz{#g=iB7kd(RVhBXAwZ6Dw_gNz#NLW)Hv0xHB-2tdbe-$=Rr&8pnzC zu4%Ci%RdCYYP|m;O3Pp}vCJgiA!=0#X+C}s2dY!yv4OGb?O#@tj7CpK)9G&bg2@V} z@{vRh+p_eSMdlo(XiU9!t&3=#71qMeRAL%f-|c#?2*uu1Zst{YiFP_|H5HLHS_pDz zcdC}i+$-&@l601>Fd(ebl4$O4lSGvinEeVG1@55w0-B?#1o~dQ^8NU1;X~x5LobFv zH4(Xs88X_EiTZKvcr`$% z?~a!_NXl3_bR(}fGgL?Y%nV87XLB_RkIj|UZFfpW&%C`XYBQ2*101HrO{`q-YiQI( zMl;Vr6F(s}r}bla-Z*oHi`CQ=SK>-9uL()HQEbl+JCjl220A1etLBhvIdf{s{Mb0P z?7fM;3v*##hNg)i2hcpWO;P)~ZN+-No43lu%#Y1Se$0ybqpKewsa;W)q*cV?8}0mU zZL?i03x99ANd#U@9mTq0ViI^U%?h^;&bm3$X%g~y5Zr`yYOgBDm+*q3rUw3PYEMir zn{$_XQ*q}vwPOt>m_K(Qe!wxm-l9L@v($)Rqz*{%+M|1LJ6|@K8ZT&)SV(`L`bL51 z3oW2Xv-<^ee5~55Wlljj@iUr5e~)mjo^(77G_@Jl#EcD|zHAf^sJ-=s4(!4C}TT@KB zRRHE)0;-u48x5s6<&2&auOe8#NAwbw1HO3=O%>yGC`axQbm2@7^b01CN?i@Bpr@~m{D=V(zcNk6qo;t# z+RG@3vq@0*#C>5i7&XO5fX!wty9W#NHsWIC%80KqG)nuK`<s*i_$>j)Ucy1WQK z^8Mdl0CHwPg~!38GMlWowz#_YcV#OXANH`S?>+*y@GN;HWHw)If|xNi*oQ(+>on?%;T`V) zaMRB{e&iJ@KAYivBTYU#o@2Le?|I-BR;_AZzu6f$Zo`q9u49%MJ z`SCH*af66mx}1CCRucQW_Xm}EX9g3FjyIDKd%}|7OwTGp1OC}cB232VoiDU4Z!gV+ zAa5QeE78Ak{psxK+-?vM%af6q!*$I3cGC(KMj|B+*ja7$lGiU4jKja-1$>L4N&EmMiGIFF?F3aL>jvhD)*QE zws4|>tw`X%o*$MCwxSyT7uV^VJ+~!{9SpAncI4EZaLQS0rN{6=55&dHuUo4Yp6zjX z?M(U1st$GK_RMJQp%CnCpb1&Z!@b*TH$DwjvPl$wC}%USV3;A*hhTIs%BxXn_AyeJj8Gvh>~b$!eV)wRcJpM=v}NhqJICpPMg9gV6dUZjh31(`R| z9Si7CLo+p(%)K5U?%e&pZ#sI&e)49E{ z?AT0MnL%?(w4`&ocpy5CR=U3gVpGg>8Vf6L-H^#on(&~I%RZV@ zKiKoA>(i){hBo^0+5riH=10>3sS}E36FQ`Ml~E#LuO2P#W6qHBlT=mnwR` z20Luog0k2Zz6ya!Ac(*BC4ZU5UE8yaZx}XDkU+E$^%=-BV5gdkGzE~9>hg{s2@lT_ zm3iB1H1^mObx>D{PjqSoMufF#KlpG-Et-XOHyp;h$gaX9C2Qh3pYMz|oMa%DiC=WC zS2xZk9Yu#vC%Y_TqR743q^6kTV^0tc6Z%2G6?k-@`6FuXiLw&*@YI)wL*w^D4aU9` zg~M7dJKm!C&Ivp4iCiGe7fP4$Ag!Lf`cpO$L{jo5MOP84Hh1g3Juf+mm{2v2!&m!( zww6-GtYyN?N}^UwE9&2Tib_+?JH`k8*tH8*R4n%LGJHoW9s>^|g#StY>WO9LUJ+xQ z>;8|kZ}LZMWzgO+Gwi1)340V0v$wl*f2{J|P|n}T?WR?HKYc7~!t&j3&3t}ub`v^O zEv%E!>mQZaNs3c3o9%S9yk}7%^oYxodTSwKRr}^3(`LSd<6@^fsVh^cg(Jjvp0h2x zG_Woo!iI@l#_Vv^1=8ccm)dIWzZU=Ncey{9ESgORlqj0zB^I#oMfFC zB1&y-vfvS6Z$`UB6Ao)Q{&{;akhPNBlvj-_2sdC8B>bY#OYf<15EG}BHf5bI?SCg= z1zpC3guLwtQaNM?18&5o8S^$ML+jt^Vv53AeYTVbA6 zE%I$=*Ip^sLK~l*Zx$S}4q%|t1y zyRW^Lodl1kR(*QS6jM4cq{OyLqU?*RE|PD_y>Tz6?JNz2ccwSXVkB7&bR|)?$ePYp zzm4{&b}JX%|7tycLzI1GRNJlfXlFjEqU56~UuF3rdL`|%xG@buDZ4(Ca9DjzSm&Pg zrJH$_w{`pzkuwSFoUR~QJdC+G9@)%mJ6f;L8u4PB*>`b--KkI_AiI9sw?6mD{;a@rPoWIp}J(JCyE?fQH!?^12tPu?eWx<`YV zbkm2PcjcLx-v-`K{t&0^g9L-DKbTrKU4GAQCWT%fIkG@SlxbW@1I939Oo~{)RnHE7 z3x@^n4as}lS@n9KqgctCqVSm}?pYkqp1CsEMqJ^r)^+J$z8O@0b}JJzd;QK2G!Bpc z?3GqDvY8eOgTE`h0`-tgw)4S7)XQ(wSQ>P3V}@^(tW}GRdV?J3N>eCxD(K4XyoY)X z+D{F5*JQpeKUkWti!|nvUsc+2Zq0Dr7aP&#peJlSJYi&^9u}#_O<^JoRj#q|)SWr2 z@BZc0PUE*5uhC%S^|R|-{`E~@xgVYp!E{Q7!@Lqz=|iyO)q@U3Q-P3NpMOo9|N7_M zH#Lf^m&c9muk4S)5r4NNmaROe#+qH_o-Jpb>k=1dQ^i^_5sQ$Zz*{~Wr>)Gdc6PEW zF7Y+zbzWO_v%1~i2Yet@l*wYXH%tN7tquHp2PM1j=CAg=JF9=FQyHB$q2NIx)(QCg zPr{*BlirJ)c~(G9_B8NAd9#}?g2%=*YLB@t^l#j7{C8XFo4i+&OZltFW;#~)Saw?Z zPo;-jM)XNi(+WtPb-nxBFMsaO7myJ-$J{x_*GdAWxO~y|owd25$?VzVbc~{_ktv#~ zn}D(_JC2J$5@6?O%4y13uL^#wAIe_LOR}UbEbg8bUYjp}ir2n;Fn9P`x2ZyL(CtEF zs0h8c5pl7_t<(U&6)dxlUd8+(fpDu+@)ahh%Qz{?nYitx8M{dvs2iCe+#h{6apHjo zsc1JBX?)y)XsQd^_a!P&rwL9~FqwViQ;qgcX=*Jqt@*Yo(6-Lb>(C{0Xdv@4@@9=D z9OI%SQDDjY6W{y~cIm@Sujjs*qn<02)%NY%4!S18d@)b)=gEjJvEf%9FIfq{gi~H- zhJ&j&nY>=d%-%~-M%svnE=>x%^h53LXDhsER~cmnV>8)#>Dp7 zTSBh*2gSyL_ow=@cc(-nQz!3ptAvT$nUh-DOLW^1pKz<(43}bIQVAYeM3>@5Ks!<3RpIidoLA zaYc2*z9ZFF_+-XbJFwmk8KTJx-QP5n5WAYre)j68zmo_u-GoZDZv;Ul@>%Jl0L=Fx z{44iQ1x!t{8E-E$XO*$Qj***2yDUI>D5y1G4^&Y2M z0ca8nSbN)NotHW@4UwGHa@ITKTH+E5rbRsSM9a?xR{M;l;6bCYi8M4TDK)0ufMZ157e=lyMJ1ka9D{*VXAzJ z)Y$)h{C{3(p)E=c-Pk{}PV2hZ^YjpT(^Opfz2f;|+ir+{@n&Ag4-(nAcTW?={(F4? z<}fgU=Zi{^%C3u?sZS8;aD>|jM@R0w_BIu2`hSe|j6EM1ue6JMW47ftCNl9S^lB`( z5=)EA#H2*@YW#8kv#S2za||d%qbbiLq^uE+KW=!fICV;=Gl$kLx%XM95Ps8es?Pe~ zUj+WAxf40Fdod7i2|?D}D_%2lCYI@M*K+q#t5@_K%^#eq6dhk|L-l0-@l|&Ma6#NA zC7Pby8CIhs=V2iCgGAG?Il79cYZ%KWK6DidQ<-byGwSVaZ%V!L1pR{Z}`&olNq zAhK<$^?CoW&K*=|o!1?vDC2O1bTYy3O$}7)MeMHG*VzYEh>N9XvB;Eg2pZ_$8V{BMb50i|gum+~v` zRVnqT(?`EUbBbu$dKd9_>MaWHL21G#9ottS`1_5p-^_^;|NXdsGa66^(So8+VbO>b z{;7V}kVOaEL=AD@1R^zOi1G73<{Y2~w62txaxSQoA4TD>3D?l!jqVq;L2GX-&6t1D zM;HiL0{$`7oq%beJHkPcS{AhVWYt~ftRM2W*+rv-g#0?TN_eGDiB7GG&PQJV^U*Fa zCLR5r!8?g7Z8?wOTRF|6C+<4d*JW!wN}00FHJ=~dC>9-`o4^ah{xRjdC=bAAM!7wJ zD$!vN=4fvnFT=l=CW}f4GUwKBxyHq_;dZJ+&RO{%{Bxbq0T+;xQ0Hf=k$%KixBqcV zdn*UC$Kkva1vgF>reMaOhg;i{5?w$>99XCKp=D;6(dv+jA2$|B4;5_nQlU}&|`^@9N&$yZPN%_?qEiKjz$(YxFhc`Ygv}yb2dRRzBe(3v0 z;4$o8Y&b%>qFU@;BOW`e*$xgrg_C-cBZoEdTc!UV&rk>XV7mZyMuMuZZKa2fMba2O zmeiybY%=h$9&urIqG9o0lSIBI6>K6a?or$WX@(WMoW5zX3gIzrzlonwtQ!VzDdIoTSc=j&{Hy8Yfsl;ha z-W=CMrX{IH1~{em^A} z!vIwnp}p7gujl-mC%}Won5Qp9sGYKf>9@&kF=n7}UmK|Gw56iN3|nsfd_Otcs!{{J zHOJTCH~$cO57<#wFW%$E>Ey2vT18i(`oiFiw*Ps484>+sB@Yy3AJp0MiByi!6jA+S ze;C?=Ibcb0Q~R>!*4q`xrW{HxcoZFDMS1|cYs#?FCJ2Wf69(kN5lmwLQUVUK8u0H5 zvl*s)RfN4JT@@M0{65|RQ0=Xe1E@-CH7YeVXrlhkEUkmmG^)*YzWZ-USb$mN44tsO zq;}G2nb98{N@{j3I#&66-%(_QnK4Vtw2cLK&SrPn(njBCIGSZ%;J3ZRP5evtDI5f|9OS%{5(gTmKVUj_h5G zIl9(tm4AFW0(m5UBd9pR_au@`u@Fwm#1-68^BLpD9gYX-h)VmH{cR3Lp<81^eR}AG ze;8@BH8cSu(OH;C-b0e0*|l$7?+rL*=lq@oTAh_vR!LgH}KgJ$o=04{QrKK z;TBR1$NphwISEeHU+FBni2{%+Gwgj1&fqbZ7;xVLxbVy0g8Bd4@C(QdU$GI=#7;d2 zJSVn6IUd^+_IG|%3$)4d`})~@n{Z^>B8lka{d@QZpYUP02o=biuWk})JlPP~nSdM-gVgJ+aR@tk^JzUbJT_z$|o zFLj2M{QoS|600IMjDP3_9OV?i)Hz(elE`ttFni4Y;mnU=+pkBY$VzoQ0`9Zx6A{q}I<39G3w|fETBuhvk6%#dgSPQcEdaBN z9|z1HGcbEUh3R+6ZPC49@Hy)ohG|<#36l?e_zls#sKTS#l$AqIivD|%0%7z4X+}x9 zRbMPyfq(h!De#rmD}8I9dQ*SGT_I{;rra=b%$Bp^5QF#7Cx6m?AOB08=#h+I(Jrbb~JWm|=x~%Akk!!H8 zQcC<^v9cB%?9jm9QDMos2}D@`Ph(df&h#3FeRb-T%4aK1>MX2Ume`ponvda7rj#X{ zauyXopE=P%$4TWRgr+3qqYyJ6X=_YADr#gUO}=#*rdFn0ON#BhtIj#ssox)G|G)3v zJ-j-%8KL8F$ z&*Q;ih2FG`2eqG^*qib)f100whvg##G>n(y7t3TAjoo!OI(fqOJ`s5#Q71-Q&KUSpHjQ=TFth=u}&|sKuf=V6sM24 z>NLbzp5r+WZfU{gh)ArrpV*qwG%t{4i7!!s z87gRuqX8A~32d1PD#Yo@tSJl69o!Pt^u9@9=2P!*)-5DVs#G*WpH2O2>SfW(&J6 zOGd)s=`I3%V~_pg24ya>D<>Gu;?7k>IG|D~#n#=f-Lc3U;N1dRDn4p||LUZLZ~*aH z3pU6%L}7}f_XB@@)|VU`Es?(nVV^Da>J^w9egyK|)1IprnJqCbilE|~XOTo#1T zF1Ku(APLKs!C{oI0WJbmna$e_tIs($`_Anwkmjt;Jo-O|FV9wLrf`G4yKOFpD0Hdn zG|NaA@foEh?b3aYNSDg(C+-L^b~KcHqPPl;sA|r30GOg0_;TYMj?@OPYLeI!&csh?X*$1`6p=9 zmPw;B3= zvzxx}j1fUQDRHsmpo#Xk4D4A6rYmtLBV9Vz3_Alw??^u6H~i9rDQ#be!MD{>8Gu^z%) zx={efsHREa1g7T_*ZLJQs>|+p5hc*AH1tYD=HuhRx@7JgsSOS~cvrxu*kVDpfN9qg zV!;{t*s4aZpAscU$~IUg1>HREAmN)~ddJ4N>)(G=(l6tsC@Cpd zI}>ep-?@?e{K@8h!q?uDoYcmEx)6T@xZH`r?NE-0eVMVuctY;wQqwn?oOwM2kB6Y% zCeHi5V8KvMyyOw*FdqMT#Qjz18b`qiGW5%fPEB~*5`e+P{krQ}Vfs*{GaF4=fYZ5< zj5R`?dcps_BW=`&C)C+ls zQAOY?&Mby?b_;$vBJ)+wni8WD?%69N#&ElgE2`NEIw^{vPh0xuCNLY4uqSePrPQO+ zU-rl-=!HCQ{`b*m9qSruYTYseXouJZ6tft*ySbLtL+{+ zxaJ}uT#F!&mWwEop5BVm*4!D<(7;Fx>2Yj2r