From 1939376d724a06fe25b9b96e843d43899a68c1f6 Mon Sep 17 00:00:00 2001 From: Gaurav Shukla Date: Tue, 1 Nov 2022 00:25:10 +0530 Subject: [PATCH] [WEB] Cache model parameters (#452) This commit cache some of the model parameters to reduce the response time of shark web. Signed-Off-by: Gaurav Shukla Signed-off-by: Gaurav Shukla --- setup_venv.ps1 | 2 +- web/index.py | 35 +++++---- web/{ => logos}/Nod_logo.png | Bin web/logos/other_logo.png | Bin 0 -> 33655 bytes web/models/stable_diffusion/main.py | 108 ++++++++++++--------------- web/models/stable_diffusion/utils.py | 25 ++----- 6 files changed, 75 insertions(+), 95 deletions(-) rename web/{ => logos}/Nod_logo.png (100%) create mode 100644 web/logos/other_logo.png diff --git a/setup_venv.ps1 b/setup_venv.ps1 index a4b9bdc8..20ce4527 100644 --- a/setup_venv.ps1 +++ b/setup_venv.ps1 @@ -35,6 +35,6 @@ pip install --pre torch-mlir torch torchvision --extra-index-url https://downloa pip install --upgrade -f https://nod-ai.github.io/SHARK-Runtime/pip-release-links.html iree-compiler iree-runtime Write-Host "Building SHARK..." pip install -e . -f https://llvm.github.io/torch-mlir/package-index/ -f https://nod-ai.github.io/SHARK-Runtime/pip-release-links.html -pip install diffusers transformers scipy +pip install diffusers transformers scipy gradio Write-Host "Build and installation completed successfully" Write-Host "Source your venv with ./shark.venv/Scripts/activate" diff --git a/web/index.py b/web/index.py index 25e18df3..2f67e712 100644 --- a/web/index.py +++ b/web/index.py @@ -16,12 +16,20 @@ with gr.Blocks() as shark_web: with gr.Row(): with gr.Group(): with gr.Column(scale=1): - img = Image.open("./Nod_logo.png") - gr.Image(value=img, show_label=False, interactive=False).style( - height=80, width=150 - ) + nod_logo = Image.open("./logos/Nod_logo.png") + gr.Image( + value=nod_logo, show_label=False, interactive=False + ).style(height=80, width=150) with gr.Column(scale=1): - gr.Label(value="Shark Models Demo.") + logo2 = Image.open("./logos/other_logo.png") + gr.Image( + value=logo2, + show_label=False, + interactive=False, + visible=False, + ).style(height=80, width=150) + with gr.Column(scale=1): + gr.Label(value="Ultra fast Stable Diffusion") with gr.Tabs(): # with gr.TabItem("ResNet50"): @@ -136,9 +144,7 @@ with gr.Blocks() as shark_web: ) = ( device ) = ( - load_vmfb - ) = ( - save_vmfb + cache ) = ( iree_vulkan_target_triple ) = ( @@ -160,6 +166,7 @@ with gr.Blocks() as shark_web: prompt = gr.Textbox( label="Prompt", value="a photograph of an astronaut riding a horse", + lines=5, ) ex = gr.Examples( examples=examples, @@ -219,11 +226,10 @@ with gr.Blocks() as shark_web: value="42", max_lines=1, label="Seed" ) with gr.Row(): - load_vmfb = gr.Checkbox(label="Load vmfb", value=True) - save_vmfb = gr.Checkbox(label="Save vmfb", value=False) + cache = gr.Checkbox(label="Cache", value=True) debug = gr.Checkbox(label="DEBUG", value=False) live_preview = gr.Checkbox( - label="live preview", value=False + label="Live Preview", value=False ) iree_vulkan_target_triple = gr.Textbox( value="", @@ -231,7 +237,7 @@ with gr.Blocks() as shark_web: label="IREE VULKAN TARGET TRIPLE", visible=False, ) - stable_diffusion = gr.Button("Generate image from prompt") + stable_diffusion = gr.Button("Generate Image") with gr.Column(scale=1, min_width=600): generated_img = gr.Image(type="pil", shape=(100, 100)) std_output = gr.Textbox( @@ -261,8 +267,7 @@ with gr.Blocks() as shark_web: seed, precision, device, - load_vmfb, - save_vmfb, + cache, iree_vulkan_target_triple, live_preview, ], @@ -270,4 +275,4 @@ with gr.Blocks() as shark_web: ) shark_web.queue() -shark_web.launch(share=True, server_port=8080, enable_queue=True) +shark_web.launch(server_port=8080, enable_queue=True) diff --git a/web/Nod_logo.png b/web/logos/Nod_logo.png similarity index 100% rename from web/Nod_logo.png rename to web/logos/Nod_logo.png diff --git a/web/logos/other_logo.png b/web/logos/other_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..85221e69874618d12e75f2a6c1bce64548b004f3 GIT binary patch literal 33655 zcmY&<1z1~4&}f1dDehj16b(*sin~+X-Q6KTu_DFYwYa+kDaGC0-QDfA_ul`1?ya7N00PH_703Zb<{9jlJ_~}0!C;%YD0s!+L zj^>~CFG&CQ^1m%~Ht_#a%!c|OY@l~G^#8zspugj)du0DoLa>+6Z~_1rKmPpy-3tU< z|B%wKP*HbQmzCi*va?|{Ft#%^VRW~#|2qo6>(2cLv@vluAal2|wsqom=Oh0IgZmHs zw;M!G_794)6(6~}tOA*^oudgEJ0lw-6FEO385tR`qp>Nsl8D%U!~fjzk()a^+jE0J zZf85fdjPM+S?NKR&#mzs&!ihxu31e|rCj%8$qk`d_v2Bg*`u)&Kwm0g@tLRNR5b z83_8?sxy6S9MY5Q7DJK8(rGp3Uql6CaeyyqH{Cd*U$W^`Ij{xXepX}=GQO*$fyJ`V zX#&t%Eg2}HzawX3z-lLlGC7DH|0!#_JL0u==4+;#OcBSyU_-Fjd}6!{aa;4b%k)}% zOZOUW-dp@inNT2@Tth^sb2fiarNw%B(<YnIb+me*F>CP!FC8kAl;gM4CW%BAsxTd9;MYV{2~zbBOmiDkMPs5B$_^pa?c|K&1&i&X>w$Ml9D9zhcFCO7iQ z0hI*4zcb~M`7pI#MTQ%q@Q%6Q=9jL3{kA4tS-8W(g6{r1&CeLjK*#QP_lBnWdtn|J zGZjYR2zA?+ptu9V`UA?^0VCCXAH|$lTC5_4Y=KWzQ_$@(`#E)dzU?t}T76Mq_`_7B z=w9mC-^*WO*EzSLUo{uVt1(oe?0~$~zX9=mMGj@rEY?YzaB+Q7Q0M$}voRslU45ZE zuHI;KnvPvQ4aD9hrW=!c!YaJ3qCFo8RF#6Duo10=5s&NqK*T--#6H4`;%hA6Yp?F{ zSE7>CDLCkUC<_%1iA#+A^8C>rM2wb}Jp5mL5fX1>osO9(K1Z-aLly6xY!xz)kG&cB zr`;}}G``%UT&BOn{0!VRXxzOtL^dS4RT%qG|M+lYfCqLr_B?=KkK=04{iDbRN?2F! zPI!A8tL4w2*dnc?J`(KtuDR%5`MA*+7gE_DCMNey5?j^Z*lYve;1ws{fCVEuA8{Bg zR@3D)_;PF`h}E+;R`HooynOik6~o7CkDE*pQaT^^zl)A^l={8yD%8g|{+%(7Bq$#2 z^^pC8k4E$uFZ}b`9UBXy3s5(6SKqI55(3Cj4wI9kn|j77t4_}0hEVNFAaBLg(xG%2 zzCO-|(?#~}>}#p&)WFPX-igGGx#tRbc-O&Uj579{ygtnaR|*31KJ&`VFC*ZarY~$b)OJ1ZgH)6IT6mo%EWT} zstysnV=i%xB46;MpO17VM{EYOQ@&ub2JAd>!p0b=?LEc*3Qe?PAl(zG4NDB3NJ717 zlMbs5ZL`wKlxYX+6YHhff~(@0Zwj8JGXMI)9}5Cu&2IoZR19?&6x>qHLIj9To8f^C ziEXs7+eJ>B4%1v#K+m?b4z*VOfgk7>+oG%}(c*rnWM990i(<6hb)$)HWSiDeI$2E0 zTUAVHpB8T>vmRJ_HTa0j=q1^^-5=eS5>;$msgV6w!GlWrA+X*bXQqscl@||>T!$7n z`M9bw zNOL$zXA!Fm>282icuMUbLHJk)YxvBQuQ_}j8YEo3An-B=;Bhi%2KJgzOiu&z%5*ae zL}k1&g1L3426#D(Z^*lT9X$J2ZTixms)T`Hn&@`N$&J?EPOsX2FLfNv>Y4^P8>@+5 zz6M&Nej|h)ddr=r=3f1Z0U2aWQkj$R)SF`3Jrma6TWR_>XihX$vXZADeH8&N?-4Cz#>wjl?cM%^B0OdcF*$gT1?+3;JN)mJ1dnid^>))06uE*4+$E>V;G zYiNI%q!j|1u4d&6N}^`o8-c^>ymP*G>>?r+TDRF5a*O%CWu(SPw^!V=!&xH~R6&du z*yd(>j#ATVt$OEtOq-6hfdNAGnA`z6b2?d#h!v@ZrYql?AU9s+li&V{uXc!SJ3s-b zCwA&t$d7%FtB}5Bw_NBXaaod?@8L%UQ?WN$&N^n7Rj?yb-#ZIdSzct%9mm3_d5T;~ zepNj)^187UWnu(6n~Nn0%uY9pz^YV43^xC#dSxv4p%Q0+r1UBmocBVkqT zK_^G>pHPYdyXxp?=huq&3(x1JzCQB_n%6eJvTxs#r^xx-1oiYz*vt7Ox4<{%Zp1JC zu=PfXZv)>s>_%_R;v<-!My~ZaC)1}tl&;TPhI+fhuAR>JA4eAQXUOi1% z3ER8$tqA3!&aUL-QR-^u?I{x<>}XRifj`c(htm>F19wn5b_K?~;JA!Ze1&#H+oKNk z+%s6bX6$ZCF1z;Xp+znG>$Ak)pzQDw1faZZWMcatqTXL2&!=J6TGMYLz%FPU9?Mm! znL|yJ*%jzY;X+rS_w9-MwUuP5XN~Q}F*bw-Gh?ogW>lox6}YM%YW@`-IsnQJp%ayQ zwg+}KjN>5qRUpO_RX1%cEuq@IzJJHj1ueL*Dy9E@25tIgFcoybuurKdbc^=_wHTu{ z_%osU9ontGkNR;sx!a}#TX+07I*T=_((RIeqf3jDe&?UH@EF0X>SxZWy2>>wHL(>I zo!QQ?VczZci&idlR8+zk-N$I}#V0SIs+yy1P+r1~*vPJWm#Wh0_?J^|24W-m6*YNY zYv0;nvVy4umH#G;1Qw3XUc@qeW($=Mp)lcTGg7sn(@aRDJhf-XapGtrI1g^6{(8q8 zIJL{}3)qz_{L$muRDYDEZ#onki7DJX)#drko%eiNR86Fn6~iF`x$)T>(=iiUaAVuUHzmaaBxtN$U#f*^kTBk~0*w&D6 z-9P%XdZiiCF{WxstPI-x39I8+Rn(hRLP!@cRXhU4DuWYdosyw3mZq{V^U6k|RpL$9 z^E~^<#M;Ei;Ii>PJ&v+>;n+?K4uhb(w#%?o)|~vX-u)e zBXK*LYJFagez04KJ%g{k!rY}xY=n~x+;1|HBiQEZn4vZNirF{5Q|8SVLENVIc=2@t zNRW&&%lGfx@-V=1cYz2Xz*D>t9!boZm_opkns3gn7ND73iF52GkUfoMTHb z^Mw2}QlN^gB0ly-3{15%HMKmFPjl5ro*-{}F*)P2n2%@28Ajd>0fF}{N>XMWuD^2N z;a#hkHa^=bnniI&?$yAqqed8`&Rf|nOry{*hzESF#g%-hzvF<&QNQ57@Fg9$b>}0C zE>px+;zfRFDZKnA#_&+WQmhaHV{W*qO;|KKKkB1Kb51_q-YC7v&7b;#6yna>T#E)_ zN68K6PzP|dLBdAaBM)k`jFzuZR~Tlq-sJ*|4=Q;6CTnHH+UA}S;{#}&wrG&L0gvy* zMukM131Vu0mJmT|*y!^gmbl*6`9$tktTR6hZYZSO@}{Lo2M) zPPYo``t`Z{o*tOMasE6bjQNJG!(&;b);F5R?YZEivjE07#dioNtFRfC-zlAQ2Qn+x zDtzW4g9%%I!}2^BOAwD9&_UL2R?|qRu0Y7MXj5Wh{zMw$wYovo#+)Ex1`>GUaezGM zAJWsfn#CW_?0&nrT_Zj}>|lD@2pkbRel*LleXPx$Wi~E)F8&iOfT7n)-#%e?Ai`(( zHWIEEhQo>5NPa)ugKR{f- z_py60)c9n=9d=`&Gph>xU(cb5tkrm4KczoLO!KVO9Ja_>rBW~Apwpzyme=;Z$G_~2 z7k}6r!?hx^&lIQ)Tjj1l5hgL0Y=4DnJsJ=m_qD0$4|9n(x1cR!ATz!xc+2x zLjIXp`*${1`wI`qlM}9AuVbRDP3}u3vu$Pvi(W6JUz5C5;6^W!M!^6cbi)e1I3ZI!`t#(IuU3@Zujn zIfOeUS#BjvJ&7@YvWlL9M^|q`jPXGW4|i~k5uzKeHCopMyPmgV7bdZ%d(Su=V}C(w z+il($5;kB<)ll%>a~iI-hquw>AH{Ecdj+!kpY#KcwH(y=qOhk<;anfS(QfILRual& zERjVY6G7VslRy5uOzM>;~^U7&+pM}l}|<$SK+c%(&}vCuyXpsOXU19*i1+L$L%qP$2td;`Qs-BdY6JFL@~T-C^p+L8S0NiLrG z^sjRy)7@ej8GjN1To=1%2S1Ft0=xy8%oHHmI|_lH6R8l66Y4Q9VPAqo;I>+f)0Iu? zX8VK-*r3RWyTWFxnIfaeB(;vpyul*k&mJ67z7aBaM!>hDD*ZWX8479a#Gl^9es#*K z`KFT(<>}_)<`HvOS=L?sKECxwnX89ST+J2@wTe7ZtzPe3L(8A%r5yg*9t9|7>j4BN zmntprUVyHpkK_Q5Phgz0P9x=(fMD`gRLAY=1bmO-t%W(Q9B@2}B6=gcHR>A=fDaR$G@G7}ngp3byJw&;WD(!TCH(EmeN{H4@ogMfujeH$6jk&MuF@l#jrlqv_ zReJUpXV%!=r)J@13;i&H@u}oos};>~?G<&wd@ibP|Tw;(!0ujg*}L-)VaR zZG}zN4z=;hKB$c!+(oc{<^pzW%HS^+`cn6h6D0eY2&EBUj(NIoF=+B`+Y4q4uiym3 zh*x}AkWLG>2%p!Gn<>^Y%M^SE&iuhp1yP&KPcRvK>P4~?Ns%eGcx ztQExrg~#R4okdY>c~#I}Ky+bFCZyui>}n=%A*v{!kObZ5B6f$|fFC*GFJEqo^Z&Iv zL9F>*KRx?287;}Bw7%Z0yluNNC!j7RPZWt~337wg#q5S=$asvfJ@ z(z_jh8k~+SZ+Py*fy+(js!@gKGnmHuwSmM<{YTO}SG%FTyIOCvvXej~|AX##hW6)Z zedXT}l2d|_3#LCVq2qBXQBmAV9QwjNjQU-*A>Y6GyC`xlAZ0zKO{-bvOx)SQ>U3Dc zngTT~FOZsQUyY)-*qFBZQGRd@B$id`TSgJg#FA+Kw?PubN3>?`)C=^?15ZoA3wWN0 z^ZZahEp&nP3T<~!BO8D|^k8B~`A#{JqgB?FfVlU@{cYV&1{UWRfW*Tj|3!w_Ybntp zAg1VtGo71MtW2rS^Rcuo3;#WLA}PO^9CP>vD*wVSe4oVg2UgO!*>v^0h6Xa;Z^geI zrf*;_Nd{=w0~swZ;^dQ|7xP)P4s0$vo!J7HVf#(6SJwR*19*e&3_G1-%lA(w%8&m z*ny#+X6(JqU?uCb;$W_PDssd04m)BQ4t8*IO2X&#YjZX)*_$V0RI)8+j#S4=Z8?vg z_sFZ+oedJ@hNj|i@}^<2p$1m{jwG1{UT{RER6MZ0w#-mLjiO z7h%J*K9zs(oRHXFyabtap2z~dEEdupZIb=)fTxi^QC6-mDzmiJhL(+?WRu^WXa1tv z5;o2fyu{r{dM3_){k(2hKCrX%}$24*^bEg0KhuuQ8@DIu8&MPX%AXKguZ8ZlwNG{bW_$MW9oe^R2x6vyr9EOy97v!f3!Wd3kI(*Nk6vf+o?H!qa zwz5Wu*Qo1s&tG7!OILYZ>rUX-MEIPzZ6nafhm1s~!T0Y>%UWzm1lzagj&FXZ)ofC$guZXPM43> zyD+Y&JpWXb?h+=I`lLL?2;kJm&Q6t{N-z&2D{jj|s$K38rMp;l3Hg7mE-@PI?Q7Fj zrLZE-qjuNY_6Fpy%jon+hT){P{p3t->ARefkHceRKIm=T6N!9=esg~p2twIA3@!o z#b=%>de3kZaysN#!+pwy<~XZ3-8{as)sE(-ns(5=(k3Y%`-XkVi^<(J8S}7`n8boK z<(67-3~-LxXHn=_i2r3_YujLDX_?M`Mqi$OkAFuc5v;+j#eV39Kj(T?B6$AGVF7RnGx5Toj zqZ>KXtzKu)^xfboowTKjjwoYMo4u}^y)ZCqx+Z@1^Zg!E?D@WDKf&<<+3;1RX%)7f z*$w1zmwm)ZsBX|7Dcu8mk}3XjH4}3{$?0mhn2KN&8Ino*Epy8Qws##aRX?a4hXqe< z7K1ya>|@oAP)Ytw|Iw8PmCCJSV6nJ*kiDCJGm=<-mOHa&aP>zlzJy$-1UqR^3Eet6 z!}TUY-3=ibOMrHVm$by`ZP_%v)0^1kl39k!*PHj8%T?`-j?S5$?xKL@Z70sJasoPk zGF!35_u7HC1!j7hFWrRTri%tbLN$nac0&^K71(kFhaYa;wP(MG)9SmYe3G`KT0XfX}gHEKP2yd?*bkL9kK5-+Y34b__gTP1Neg!7Q0b}YEh zN>)gn##^R{E9!3RRjZxytaYHOwqc~N{QjE#uUK=301xQ(R7yeRDs7Y$Q>9_>*>Hn? z6)ZQ#3;dTXn#6pXk*d1PE~N!eBX=rLO1atcJTryI5=kSc&A5+PL9l_h**+emJ(tT10-3bvZ+&5LC z%51l{s59#2ao^_>kE_fdgBweJG-G)7>uM0LZ6~rOQ z@EJNAc0DI2A#2QDp03tk#~@wvgpQj)6%CU5`^QWeE6crItThZGQkVZ|AfT!(sX)Ag4r7(sS*$HsbZ=U~hnbA-3?&))WxC=Zt`JO8y{)b* zH<97SacxjJH`;7E$_M4jPjIDJ<53NHw-0Js|CZAn8Hswi3C2S6irQ;wZOTl!)(|mC z2t>-c$s+2Jn{I?w{t65A$dEP^X2Ev#>_yD;)>>NGyqmLcz`L|Hg%CXP@cQ}_g+L-V zs2GVg@ykr;A*RKgxOtz0HV+v|l(1L`v%0xkr44nI#E1TV(^`U|vGLodPe-$Sx2wWz zY69xeX!otxki*X}Z3p5(a`y&;&pvIjMn=_m{6s-+6}4{zYVIZjU%K;9D=UJ7gTyHn z+b%1a$w)S)PvjWyl1eLDN9TD(-HJo+<0FCZi3>PU?+eIekyFGXB9)gW1SA-`psj;G zqA{WOA5%wSr}b2JAYUFEZ8Ltlfu@bJ8`3YLTVCe0Lgsk+AaA;@_q1|ud)Rn*O`|uu= zbL&1oq^WJ&5JgNqmk6I;)jUVvgqEVEz-e~K%MQ~7@gZ5BF)1(Nx%+xB!KtEo7w+%Zj^OF@)##dl{Uz(C2boSAd4DbRs%s|y*u}4lyFVH-+Rnwt>U8q+ zUdEXD?P`opttX|mIXg+2)rsw*rpwQaT+z~hX!WY}xvatxBRk;|@7vu#(9t+1-g4t| zuQ!>7K9hpFvS4LS2q06ojt&8h-SUz`owd6eYZ7`pG zI*}8l9Do0D#>m}z&i%t-Y6qt3>(n~l}1*-hDrN^3*wD(ad5`HJ`6=sWVm zw_k%7b2$F?C4LOoJ@>7){2yHPLM22HF8FV3Z3z1EQl3c z^k6VT9{FWE=uSpRPOW?d)(tJ<6q;r*_2N$^8rpn1LDv6-Cqn&kHa|8*E29{fDcsz{(^auZ%t}Jgj{hX{BDVBjtwjW zYK@42BJSkW<#E1Ob7vKh&g_EqLm@vHlIRK|e|$}PED}02^3eu}$aD^x)=1;Q>sh4F z-HRtsg*FQKSN89#6rQv0Wi*P<-n5TO@I|@yJrgMvBiPO(oLhRqh?Lms#R-BeTR(1x zdoY)NoXX)N-9|On_fb{s-IWjyKv>}_t;zQv0P;lYCDG2#>-Emm? z8nsw?HX=*=F*iUkt6qf(U8M!Q4ssN_tNG*Ak3eiqBIpVCCCARF&h~onv7$fma*u9p z{RGuk(R;%~bR4-6f@*t7DO8k;H{0q`T&EMjGy?u5weDR&t2(lC7*x?ok(g#Zq_TLr zRq|Sg)wz2vdQ+fV%ingYjX1WG{Y@OXE`>8l1iJo28;=(V&4;PUaip>FyXC&t2LCCW zCv&7OlJo`Tl7smGF&SnZ&)9^xkC^Xyl{$&eF8-I%ZHc8Ma+W?%SE2qaX|RS@kqegJ zs7#WFoHrAkF^+vTuAu$J_dhvrxtAN9*n2-h_K{&Hv(pT>7s_bwD#4^(alf5DBL~ot z*&DB!?N)J2;MmYCfPPGtDi+?j24B)ismHvbffB^km>@qbUP_hnXmJ_BN1gU!#L+K{ zd47YtpTuwWrv{u=P+j|by=aKT$}NWA8v#N}wFs|4y<1&ljl`9-)9z?W`BA|Q?e3bX zo?^!lP`Oaf2X*Q!OE{nr*Njc+DHI3xWo5QJs5e(|g~@ls+grdF+G#X=ZzQczj4hef zEHbl0vJ=F^ly-Eusl-=SQON^a<(quqYeVSY!uB|^lJ~1xcW}3S3-*@fzSxH0HoLaj z6>vyg-PAPAult=>nn2ZdO+#m1664w)8M^0(YDJmVVPEDVOWl^FsjwcjIne81o`Do0 zy$Ayh)r0XAZ(Y9x3obzW&R)eVd@h3YrGq@h`=s_w(i}~_8;9|QI$!tKY{-6U`7qPm zkB=4^*;Zrg=#-rt*)MmvOIB0iZz{F+10u7(erRmL3z$GBzXu3dZI?BvIRAzn%(W-t z>%TbF)DiGJrK2Y1mk{%u$p{f$FU)o8$D)XMEbv}3=X)D@Qc`&t4qI3iV!8+9%ePew zBg>u%Ex3gp9fF{By`R3@1j&C{$@3wS@lEvloCHHo(itn>aYh{*irTj_AB(SSIxYQc zE+TK)N9#x%rX(wq*CXpdxsWefh5`)JglyUy2kotLrn@v!Kk1t0FbeUp<+%&b6sdX- zy`L_;PMZ0>uQHS0~8Hi7r)+Bg69zy^7LMVZjX6pcR$DR$tu#`MO)pJmrqfvwZrdR0E~_v#?i^#Swe z8%Mg}_vrX*q)uf#3c&eEYGpm#wF^A4URYN=Lajf)v@68^^zQM1LPY{Gw+ACzK5RL4 z+jLJ#lg4&&Ix4csFAuza{~(kui0r%*D2!^VR;~r_F?*uQ*y_qGfIa^0vVy`k`OqlP z(9295@0qhUpB>NPV4F$gEwcv)W7d83&Him|C#sTvvP>$_?A2EuBb+`$*pEC*-6qVC z`1AcqJ7CF=!^gNY>vcZp9OWYphaS=6Xiih$Ys7(wpAFS$+piv+=pBzQHp^)kV-M1r zRMYGtuJ9w%DyNaDfN6=o)x6L)IC8cREKI|)DX&k)sxxy=Ra@R9q72A!@=44r8lwwMNJqj+b_#nHRO zx)p$cFe_R=`AG+87*={Ti)F`sM*iklH?-V^KA4;!%lGwxeX3BVwURdFITtUZGs*1T zcP}rH$j7NHzQ>Nwa3Yu!aGp7e?CKeGlNChv;j@;7M!kMpk;a=Igvk3^)0Ll1zcY8l zOq)a#&|v9XmXrFB?|$n@o)~1q7PJphrU6)@4Bg3>NeZl5QamN(4GZg|kctL5eIlVW zJs}Jjrevrpnr!E}`6LvZoftdb%Xe>*Q zy8lg&&hNoSSK>7g?wN~v{p;J0Cf^IB>pfB3_1T=KH%z+yy2dIBu-+v9VRPe#KtuF? z76z$IXQR1TW4D|B9Gqd?)NKC-n(qCYsw$-b)V@iOOIzNKUvJyKb|ca{Nzyen_T81= z@3ol8vr$vlJAJ(Nxv?FRfu{#t_jGw(wMTnq0Pz(%^rxiFY4O-h>?q2LG=7&u*vrNF z#n=i#6+up$%Q_mB135t}G+H8HvS0<0D;6C-FdaEkx0+#}s@sKWs?eU_lgZL6xFH}3 zHJoa^7xz4&PUqz76MIoBH6Lg13)h^JxO$|U0P_9T&&(yk$tY9K-p?6B0w{SNc04|M zWh%|>Y8kR?#iTP-^*=Z)sm@7nI8{5uUqG7rPwswWQ`&m)mrH}7MaAINr60_`Bik`} zPG4MD99Hm>#Y1x@X4g32b$HBrf?yhB(?lf66Q%L5`K7ICKRe z%$^6i#*r5+i4IEKH;$mz%iShDQ1eAaw)mN$sXd(>D(Vj88A&3~^h8*tsQrhuk;@H< zeS!mhvA(~~J-E{sWV1X#FSPz4nhw4SN{nw94j{nqwz|9~0_b_*OvnxeKHi5x&MeU(9%`NG{!MC2m0b41x$gVzV?5t}QM_fM(Z;bca zc+tsE5NS8p@p^dGoB>jg9$M49yioTRTs{MyVb1N^9*9E~@ws$6WXIsnUTk2`qf44r zOYKQMN1r~>09QS(X!w=xb}TL}>CrUK%em~f$Jhr2;M4UnU&pVg-qD56;57r$*LT z#rhstK5h0W!ua63OpplVa{6^K_|y&|jw#oFc8281*fC&pC}+3$KHs%%$glQ1xELf&-2_i~1KBhPN~K)A?7DOJ>LvU;1(P(aC^zXN zvgqccpY0C0s*N{W$j>d8Z_GKzIELld10x~WOzGhThmTxyBVFuG;)l{pMtFI0rU&cD z+C*>CS6ZFYW6_Iw@j&q)Lj5>uQ~(bG>dyzompo*xO9t!|Q(4xrlxD5ft2fDq)-La! z8&5wzmpDW^RAE22>I$lNw(#U;A(2k4czyB$qe-`trk-9*fCfAjPK7W)}@z6{feib6D+y1p0oAx!4{l^__-|h zo(?^F9p~O@8A@P;ulEcbK*}EqezWIuF_Tc3?doWE5loN9oVs?!!lOox zz2^edU3m2&nc~zIkcRVzXIs69afrnL`4({jFE5P-y?V1hsXr-B+*Ip*r2X)?uW^0n zX0)F{qvxfDvo!&%gFCr|Ue(z1w$u)y$REo^xK)0kloW3M{`)P^{D zur4=MOVZs}u2q@Nvk7|0_jEQ^hpGdrIX3~{nH#l~9&1rw3+WFSVSvgc#jH;j*yZKt z?=@p9A&YhyGA99w?<97N{k>|Sek9nNH4A*yClJwX*BwzPF>J4j(shMN5ucdtfKKop6#D)NAL80tN9Gq&*`=@T8{lBU0@gA1|!tI zz^*cxZ6PkE5l|m`IaG%eR9ZZzNKL-%|P6AjF4G z^NwDi@4g=onMJK5B8^Ot&vpeIXA!P4U&qlJ@H?!x-cQh(LR4^5?g#c0-4ceV1fv01 zi{r|xWnR4&Qy3@gO#zgiXYWHvpzky}%kIy!zA*e*Z2l_A zTl}!hovI#QMzMcdm$?72!4E4@SY?5y#a>?obIK7>&>_xOz7{=NG=>V#6vxOO z{b$1b71r|y5WMHUJr9Mb9-GtQ^igr&7P`HSEpd(9E_WvDx4rl{OIUr63Td-v9=1o) ztf|jSO=39s>4&$bv0u^B?u6>{$;zo-5Qgu8=}C6NHZ|fPR$_l2oS#i<;vqBrKBRMH z7EW{+Bgp6AN0>2g!c_A8_?d-0g{$91Lv-)-Nv+#lNAsqqhAmZm@m6>FTclsfyW{ii zpo&H;@}D0cyY=|b*9i^k%&@-bojsY>PZ;a!2<$r5JKTk|jUVcBpf;Y!tlAd+sqrSs zUF8voVi*nGGha>IfU%;F^u?k@`n*^@w^(zJ6kmxq(iB%kb3voF{O~{!z}+fWR3`Ot zT?w-fq?=X)+C49I|Fuj@fLA}C79pv(NLm(`9KH$;OGYlZ>VuJ)ddI~7!nFBx5QX_W z|FhZdZrT)X%%a>K8vc!zu+9^mCAB0dU%0jU!+meE9o~n8buOsDMwLnF9_o1+1c9jE z2jmV7xwZUXxve($De~nO7Jn4lW=wLg;x*QmTuo!xrA+qiC@}nXOgXlx-D3xvI{`Xi z_D93|;yPdy2AQ$>hT!daO)=)kCgf&9_jO-ZaY9{x13QnK_cD2CPk&DqHTGUZJ$@6Y zm0*k;0E^JYN?SA*w}@`7AJ>kNC}PVqcE8gJmy(9o71T|2WPE_H=o{?SnEV+`s&qLU6wCAnZlYZ8GDHMcp9N1%)Y8E~8{d z#GvdV&KqeV%VW$JQvKXqf;twJ@++De%hYjxC9Lw*WBh5Opa|K86%BwxfI z+{nv^V&XI%VZ1w>5|Fax+h~4I=ax17S@&n&*5kWl)z`H2k?SJ)J4`4qU3r5x1Q8L?^gbVM3>>^E75@7iSf}TemFJcRu7=CvRKOat# zTWwz6PX5Q~7i4zL4v`ploFSD177n^zq`{rg7ZfpnPUW9+**&ar!0O8!E22H>WFWOI zR|jZ&Vf6~1G+_y6wIPPo1yT8a2sDe*T9cxNafaJh{z{gu=d{^mfIdFwKI&%DC|EO^ zyV?)%3!@7pEWP1&cmrJtKSeJFNe@rjbt}*a%Q#xq>pi+~_oAQYQMDkxyudsf5Wjr7 zX@R3z)lZCSu|dmmrB2>^-4cY5rDY%oNNMDl`iOxPW$q3@7IdaM#a;RK3lM$N!7@Y$cLUT(Ho4jf^R)9CQ`B(X1GBey7!ZADxFlm zVA$Q{l0lJR{g+b)117fhQ?r+`oRWpwBI+{~=h*a#1-JaY;WV#`K`4cc+{2v4+{Q%@ zf3V`94{=sOoW9gibmt8C<3c=de-Cns5&PvAI$iBApBNwiuK~HG*>V!3#=}oz#`#6-USP|XfUx(^g z`T)*1NvKOt?$9P)*(@ifr${@LtUn3-`H@?-&Or=!5RA$h#vfNY!A!LVkW{ z4wiep8drtgYs!1#1JdO;8;||Q+|zqOxK->Cb;`6N(B(5e?=z5jn~exKf*86uSGH4@ zLBuzHcoY_3WHa27UeBayQb93^^lzDL@9^A!*Wzo^KFN~644)+9BLrIY&kPLt#{ z_$xrsc#vB-+0WuUlP8V|z>e!drM|};mv(^`k3SSs9D<^FJo2W-3zynq?LPB;k_EC@4O?aH_I&F7^)KQc++q z9HM!6bV|kX(%qz1v)>;EyvA3@7mQ-Y$sP-F<=G>EjF$`N3fN75D@?=><$~SqV#;3c zg`43h_=fN^c$%3FVvX(nx?!1TJHrsBu9;?ZtXFMq%vTCB13tPt zFo)kqll1uFJNgK5XUklIYd3#?j9lsx%nC;Dri|-iXK#{n4$nVf$k|A1q1I_jo0*fS z;oe`3iUis%c_cAPdCs`qsi?dU+>__>B?4Vclu@WAR`^xE6jP1{&2om{xj|MT58TzmU94Q*GKAJREa!e4Dv?w{*_XTd+tbl@RNJ=?}wIv#&UWf|X zf3b1Z$bEzMaxiF#k}}3brKhRT^A!r>%zwyTG+mJlIjd>OIj!|uH#|o3B_gU_3!xx2 zjF>S!*09D3g&GezdS`IX$}=3*b!GZEejO)|A4-B9t+nozHZgBv0Al)CE8LtUEk_9 zq3zbhw}g6k+7o&Fu6Dv7m)N+s3wmgLaH9_@Tl5j zOFo2p+uCx`=wWa>Mh54g`NNMdu5#1AZD7-m|H#qJ>(F zYI|7puV~vr{2~LZGXj9;avM3a@%Fi@2DvISnONMn|G8X5|zK4b+RyBJ1hFK z)f6r>En{O(Ldh+gL9HegF{WpQuXl%Oo~wK~$Z*&w@l71!)P3Y}6dr(yu+-;Z2-!hv z=is*%Mtd8|o9gW$$e#j1e^#7XrCqab15&}5Hqw-TTh_h7Nkk~BON}S-F7vyy1GEEq zuHAp<;{Q33{aRuM3XevP(>ISu>ME2$oOhJU+lJGD#_DMrGNpGqeZaNl2VD$s^t3!wHD#>Have2~R%SQD$4pIuJrCw}^};<(>8{kUt!A zoB8Q@>`)Tgz@YpvrB^yX^HE|XmUhIJ=j6}@yx+Mj<^Zs?{YVzH4a`%DmXuztE|TA6)?VvUDP zaHm#ma{BamBIJ{J-^E-*!mCu>IXK=yy1bFkR+ocCF`gNbrq-UuB)4wy6TfG5ghit= zc+hcD#Nfqw(cIDvrZ+Y3pj17R$4qQ2`afkKHmpo@*`bMnTsvj19RvrCeb0L-!PW0U z!CygfW2XgIqHr@b*?_=Jq^`m-Q!Q~ixBL|J_-{ch*@WVrRN7|eW(nw$Gmm^|lQkwo z(;#HsJscISxQ7|yW1`}=el`?P{`SqB9>^c%**CyK)C6GEhdp-aX@=3wbQ@jOxo^P6 zm<0>~PWN0}><8bmE=-H{1N)r1K$)awrfwklcqIj zL@6zqWX*5g{(S!omMHbX|Gl`p{4C#3Xz-M@Gsf#r;DpSZ4B>FxqSY2~rC61AhU zUuDhJZEAS#a+YuA9`5NgV)28M>`P z2v(;lk6L{6uQ9}U31@>O<8KMfP!UpvL)a)(vZ=;^uDj;|V4bF*P*AedAkuue!8>SD zGeW*8(@qn?I*l7;%{ucKV5_^!vz^}xorptHpl;ZgFv!PW$2upfXN6wo!ZaCvp%Q+z zs358Sg1H%8wO-BSL8uiy+r;dvC1#5TGmhdM6r^dhe7W9Li0-iQx3m~X7yg_R1Vs}f z_on{?l0a?0{p$C1;#8tQhN;d$P$0xzd!Z<@hfA_2Ie;fI!@SpYV3jlUnhRU^4^L)J zTU6H+L0$l_Psp}@t>f#)3&_~9=_!oMeDfxM9iZGOTg{06+jq zL_t)4p5r3uJ2OSAs79%hmp(eTsc-Hv;j)!)Lw>_Ya2$M&80vt&7p_)lPcQzRzkT?9 z6OL-cE%dDk`b4@lGfG_fwrb74I)<~U1I`2~7NF{}7=MaS! zM&9WH5|kOW`C;9ks!s_?x|E^w+cQyTquOE}1ha7aF*XoUbxPk=(LgF0C$Mt|6zkf_ z)aXM)BZX|>+P*T_k_vPyWDb#-Wea!-JAeuIj5?>Z{6ek)@)yUv`-@|tv<+Qq=hUW` zE=FSiHBzoFNb(JdX@AM;@uM$}43fsDI#sx@H8E0_fgw`)QL1bJ>#Hrh&0Hcz4ZiBW}X~osii0lt))ijS`LmKlg zpOm+p#dsXOn^n1rrfH<@f}{`V*N?d(RcvpeYd5cgTE8GBc?7PZxzIgrZD{8M$BVHE zsh^W{?0UcY+r*P=1^PGl;w`axPwdy+s5hAVT6SsZ-+rw?Zw~|XIyUx_Bjy`xZ1?*k z2EaHupa^kvdzU1jL(;dNG-vC(TpLIS1pp6&C!s~TdKnj0bYJ`EB0BrdOp#q9>AJgf zX}AG=X{z5yhUo!|&tMqc0E5u8y3^^6+}r6_H0xmZisnKTXRBA{Y>1U-$0c6;bx3|@ zdppI)8REDFSQ$A9A2Wkw3HFbxv3zs(V$OYEQ7T=$X1Jm(% zmmG!a<_dh*Uo+1DgebT0i~-oGqJ5tdQ7e@XZ=$6LEKd`$Q=OHSeS!)4hlUX@8St9G z%*HRQl$E59PCxE`M)CGj0)1BUaZl;M@6)5jB%4{7b;O_3i}SX7ju($xIoosa{2~TR z)h_K;;uk7t;s8;H^r=y$nSj93!|nMyddbnTv`6u6 z?%v;y05HtkMxA3a58yux`ejAN*S(feyY|wBh|%eHr!T#2?;^uD_jiSR-UXw-x9sPX zpH!B{g-hG-Z=_zN4J+tRtxHg4%8ped(T+0P>xCaz5H6Aeh2`4lZ2S)w9dY)zq1IY5;7y9*$5JVH6P}xs;W=D<71~^ zSkUL2ZQXinM&te)U%4Hl7=R)h{BH%O7 zdnQf}>3+7pzTTXo^|bX+skiwfG8F1h{Ndd zHB!QAhs}OWgQfG|e}B8Tund+NWWR+Ol3aX0NJYiJESPuTuj`TsOUaTq7J%+fQ+cB=Y0ybtVIb1CNj&$>Tc=8`v4g0() zn?C|W)kC0W+%yM*Yf)6Wt@ItOmw*(D=(8!b+A(1;!r*v4Ld?}pH$AwfzOEkc;ziKR zBO05Jq#q26d8t+74_iHQVfyDLA5#0~R_i`?I6{Q9j{V(VW-gfY;bRH9b(p-s*c`_~ zuYdU;KQZy%qZ%8Rh%rQh#O6MulD{kkx`0*L96e7O)n2#L1s5Jgi*&4wEzRk6TmK(M zGZh?=(O{Z@azH^@G7K}dE6!}X)f6qTxu*w63gWo7zFYnQb!eCpHA3a&PoFw%Z7=ON zbv8gP3D-!4>GUsYnT?b;>7vVMLfCZm0VyuCmAM3{@s0*LSs-^%ZelW=q4u8GZONGufl+dALOcoGVO!9X~4ExTCR3!0XRscNRfChPC#!ackto^Lt+8kSbX zW8M`nop|I6_PtHFZVBi!@B)Fk#??Ks*eBNI!+)W}k5hgY|NJ<1m3dU}7{Ffj)SK4h zMdMs0Z958RJH-$Kq~0UVf;Bdz(kMJpU-Sy+vV6;x(d@sg`~xjTGZhy#E(&+kj&gOR zd1h5oy39q)(;FRs;LCti<&`^*v36czIhIj6`fEK z`G#|0RLkn-T7A2gGeSP%RajD$2x$IKUkroyqwZ6bY z_Xjz=Bh0($+WQy3U<%<6&ompBXy+|EB{!wC`5#^1k-wp_nK5ahm{fA~<2#^N20KP# zZO%T1wlCW&abPYSx2q)mdsmLHJ1y?Gx8cC%v09b|>5k{S&MnJNdDl4m&VM{n6b1~V z?JL~?bN^A6zaz;%`NuOq_PIfcoJ(6bMn#6coL-g+Ryq5`n!A7(krRuLS$^R_O=%b#}m|I=s@vhQJ+97UsMO6l+@0 zrLHu`IF{5~^&mmI%QZAP8*N)}c91TGyhRQ=0bli%ibJ5k>w>0NIh@$qFlGXCyZ-@T z-zS~8q(nAH$qP^z4rVF{vV^Evc1P0R9o#moP(gFcCEcW9gcPp*U0KqG9)XbtaOb3h z2h_R36Y+iJ6Vq0U35jpg8ld%fi!a4eK6E_v?+qOXpd5huV1Jtnvu!KI%uUn+b4dHnhf}E^-+cDj|CLBqO~~LHs~~;8 z>wW8n$uoa{R^wIA%4=uR4q`*;D{Tf$J}sB;nPgv+hYIg_Zm=$Q8aR9A-M(k)>k;JA z;E6LlPIwP|=>;)8Qy7{Bl;C|2!4C-^!P4BOSENel5Jdses2pN!D8zUHw#?4YdL!a#31S zbVy`Y@dM{t$fab2362ZX4V~j7KTt{QHdbOhWo;ZoxswZkjyB200Bb$p5#;~HU60^v z^01Tho>a_zl^7+dhK$X?sB1KMn}VGcEdvWj!sdBOM#5Tj($PxH&5( zzvsP8*FAU2JNFqHk6pIf4}uJi%Y&1NeOtWzjokC$E@f`U!I+|CnDe}889!KxxhI|r z?QDV#x7)J*6%_UUCGy%Cfa-$HXy#ikYbSt*;c9_enG|5ibQwEl;g$@Xo%-@JnYZ^T zKyHs>Gs*)#yL9%bBaA``jRXpfB6JmG(oTX%je)|)c=$xCa?MQx=udG|6fx);me~yL zjd`ic1tjiPc~l^T5U}zB27&*mMNc*1#`xLcuUFL(C~Mr>eDLieMLLO#lpkXyYqADE zcNRKT>BIJSRjlUZQ#jVO!gV*P`~Z1~gugBmhR>|a1&ib|*_!n)-Vj(PBjX=ZGjdEF z?uBQJSh(be3dd_USfM_~qX(cb09GM>z3SYp89VnO3{V8XH}_#eMYJ(xior+`X6%DT zTWheBkct~Apz}9d8SZ!I!>N@)cuO@~r}=m-tU>)UC{gvHM^BsZ*)3fuE6H7In@?PO z?eeVSec4M?W4Lu~4DNocs``|l&$#eo()lZosZ-@ozfd6ZP(j{$sTZJRsGt)M!$bO| zLT~aRXaNq8lv^eljN;0Rx>o9G(;Rs!S@x@)uC1MjW=b+qM*;lk@25y>hJ0`piTu)`wISrcj^w`z$$piUcVCMq?NgW!(htz~4YkS}S!C9ZbeR|^$*Taq&uZ7v+W)xq^x&;*I1U@@l-s|m* z2)gL)x;{YNGO1xv&i%<}H-^yZp*^}KHQtG4rT>ZYu z{nG!|N~>F0)bsfcb~-Ay{y@Awe$)Nlz8(vlEPTJ^QfQ)b0`A;v+$Z~5MkQZY3N(!y z=ixP#%RAnKHh|A;D$uG|KM3o|IorfODtc8(f;W2q#&oXfvQ9?8?LQ@eZ?bZ)b`R5TU$w*=6yv*xkF+A4WtfZu zXjw-7*z4lRAmCnZMzwfAjn-|g!?Hh|Rc#;@Yb1d3z= zNztsPm5QdwQJF#bvLWc3YRkyjYsEKK$I7(=1)^}tIony-#yAD+y*75Fd1RO_TMSxYbu1v)z3aB0fvC%GmSs} zN5*pI#H$8bgk7-K5`Ucfd@gm#7Y~%TPH&r3^!Y)RjD4cO%{Sj{K+Da!Pl0J`P}d77 zN`Z`+`gsM7J8;GGE5@nN;)W@GD!)H6H8eDscrbASA`(Yu4}e|uH|L7ammNYspG7+V zkA5%)OWO!U)f=Ig#y_C|d8F=`lP{DJen1xoU_w?i@0NUKPRJL+sFc#6OO-bp@TJ=q zP@~iT7nHdbS3j}+KyH%k2=%QsCypB?&zbqebTPm!@GkRd&^fK9O%;H>0`6VFIN?9n26ihuQN`9X@xv#6zul{IV|8tQQID_RO6c6P^2j;n_jg>eCLi31XN?CS zhlI^0OoDsapFc72FnQl>VLTjD9}G8NU7PdQgv4IJ4K(9b4~h9!VwRq->8ZXeY1>i& zNzeoyyYiP;u7=e=Q3S?PFjPNidqcb(!%3=56mV_Z)~xTPAAIn^#j%3>cmdeE>(~w8 zV=F8KfJ5NuUV2mpJ`^}z0jR7U5_W4Ln11CTkeuPL7Rmr(&nyVzI~o9DhKBW3}H-#cd|baU(ROsfy4{) z-PmJZERMwPvG^$=srp!vWB0~*D%H>ntFDX?o}lRuNBZQ zysNkRq0=`^BCzcTdf6thupxRpzF*DI6(3SL#f@NkE3#kD1Ni27wDMeqMuw4#A@!Qd z_HwVeix-S4fT_^P`QK4fCkljC zQ360ZzaQY18il2|F5ljGl~8UE19{eH(Nx1tzkf07#4e3VwL{PfdDbMVs^0sXPkrj# z2)z4Li;_&!=FBkz^2wK;x?){6_cSXl6gxj_@r;b?q?C0@-4fp6O4`;GhzzlT75v4- zd@mUKN@=eEYT71ncVh2NQ++V@4hUu()gzzHPo;h%RZpr{iZu#+=4Nv_X0~oxbtje1 zV9W`PV}58e_orz1V`fIvEmX9w7wiSrCAw)&VGM6~VOC6!k3Zv_8T(SLGu4OGv&Sq( zb&gUgfueJL`kqx(7p(7iok*L(bHrSab7R+TdR%b91w#=uKUs^L*{>l9dm2~eD8qTf#4slQ zS~DGid$**S4tpBMkC`@k+L^^MyxqrV#PmWh_!3MnLA`U-ZKI56iz}Tf0y+Bm_LdWe zp59J;dF1>UuHHFq9XK@Rev26EyVa(bTtFVbxvnnGBAgtx=|RnI#C^*j3Mfq@Qhc+3 zElnJsA@V-bN$oo;|6ewXk^Q3BSQZ}X*EWe&VkGLf-*(?UkACRH7cg$^y+Khjz1Z%# zL80{cf0GJFFOe2WwG{Vit!ZfqsEx~lsBF%1E@A;r6W%`YY-nYxst50~wj(o(doS9( zAn`@*P$M>(^sKo9oD=R4;AA z$g$y8CC`zEjpaI_Q8AaCFZa{5#S8u4W-`_{z|6tiYkY)DGPA)0!AETC`!i?GyzQ#1 zu4>ae(;E{hxo?~Nl+dJpCe3KbAR$BqNq|cgroBr8SKl;D1mj59` zq)j|o*$_Mo3o+K~-oZlp^F}Rdep+QIe=)wzb{jAoYg1pZ3DoCLw48|w%2rHizRg;J zNJ>gY%uQFir6RUJ!wy}^ATg*q<5tJqY<1|n!$Oxe3}MK}(z5m;46?X6wwxqFI_|c1 z4epHu86wOb5=o#KBE{cqa$;er!imam%UNza-+2t9>_=j^Al++vySMD?@mS2o7hXEa zzwKYM+?kY`ua`!t)bM4zcFB`E*GI(@yYT867tWnN`)7-{ zBs7AgDn34{rEj{9cYDqWy-W_=i6!5EPU@<6U!R)vP(4z9x?m(L)U5J%t5ZPg34p^& zw6DJb$oL8p?(Tq{-px{p*#l7Io_PL@sZ;+lyRq?4cBErNHR9Gp5X_ z$1UX&>LtOTJC4cN>>-u^eaoEfH&YEy;gxaQ3ksUAAUnecj*|&#J|QQcEzt-6?N3bT_-{8zs&z ztS}hGaV@b35&1*>i2Wgc;8f%EWGR?E`*WIrLW&j|B?Ih$I{=P*QxWJ(zPp^`{^(dt zfq-ZhE2ORUAu%*jzh&^IXOoi8-SM%He)82er}efo4_Zn7m-3GLAK$kB%{|L=LGb)d z`TQ%^O*gIm)OGVNxMuQez?OtrEBFn28|i*Ar_vdT&J|vo z(AJE^Vyta)X{r zTM?)mDZQtvC1kC^YwI(+$HH(o2FAXWvJZ9OWA91z_iC}i5wL?A*RcmN^C^IM5xljQ zPrgn1R&-DkgotlOE*^^k;h%7wq)-kyg`)w53$*jxFXHIKLIoRXKST^MvHk+MM_xM= z!%2L8Yr!C^o{5-7s5yS;$raeH3#hxC<2U8n9 zSn}m-rp$PenZsYRw)1?<@eayaL5v`1c`up#ukX*i^pr28Qg>?LTXj~T7f1T}zVyee zS!unfJ_g~-LpOG_?}u&%!xQy9{fuwU9sS!$la@}zV`u*SNqs7>FVC#x=}Cb|%7^`4 zf%N)m-23*X>qYZYAT zkFMRz<}&Fy^XA@8eq-3|+3K!mG-g#cpQmO_nRaC&k-V@Y)1mTZo9s*gt~NCfu@C$h zef~?Sd8zrux@kthTeIzw+9I%5U12zvF%vmQ42UO|&O|m^fvp1gdVptn)+@9!pq61%5}UwlyAoIbTNnYqux9+2+rYG6hZ}Ma+Vh_!k{vPJi>p4N znq$@1zae2n8>iG22s$feS(j~`xVA+elhC2dNiIgs3 z3PhNR>dL8*A8dc3io!GieXhIc>|-#5y>Q>(3!VSFH?XLK_y+;kb#ESEMzv#qFZH?9 zqp2UIRz)TVwQ)MDX0@7gW8j}k)f*tc{u?vrfBdpJi_ztem6Y!c8j|ejSU&^$T(rEV zMdP3X_z+=RCB|8#%il0{^3*TH-Po_e`*Psr5vCx=EMR}I_90v~8?L?f+7(667dV!? z=gn5zrhMtEvuB-k)}WVPTyYOTcO;- zU&`NVfUk#1(wB~Y#QjY#aM-Y_Va$aHq2C~Y+Av)D6yrXVL)CA8{{OHcD#^*wmVx?vrG zw>RFUdvoeQ+|&+534UNphqWIXkX@^6r;2S9L1t>nkfz>+55t3iWIi8ZCd@gA}47xUYb3-0Y40*Ltbt{rP zyF3Ienzc9hb^y6JK{@;a!G(&@m_SC95t7$I>aWSeLC7UY; z2jJFb-%;-rV2Jm^$sF=&DagdX%c7i-gNDTS(^w z`Ui(O>+ueQ(RGqi6Ck{JlKu_M2=?RNZ|b7% zhXI%gc$E3gd{eF?Bf0uV_tm{ zw(g|Ef3qg%e}!62#$SJsV(JtB-e*A%4PdP$vGl7QM=SXz5wFDxs^hQV-SZ3^Z9feb zE<@7&H{PYMI=;IS&}xYh^sz0oDzjI1S6|`N^gKORDI~VLwLBTVIwBWO;6R>raUr(t zK_FLc-p$uw0%a{U^`-#GrWM#`U?JPo&~F>YnHFc6eqk z@OPoYZ-de7%U%QfVJFxZ*8DcWeV14geuodgC_{ie(>}o8Fbu-yvvSuR;>MFF!#7S| zpUwQ>l1sn$4@UeS!nkwG&%ZV4xhV2+Dz(Tzq-uq%LHq}jImih_wDxlBgFJtl^_kMIft%)qb9uf%d9#w*P!FS-J$LT!XxG&+kn`Ky+q1mt-5H-tT?5S~V2WtZqv;W;_H5%aG)C_kc71ON7(aL7pAbbnXpEBiegthB<);nOtYFBSyuXhUw zDWAG`Wcgg1dDetq;Gssvb9d8g+$A>gpWFiokL+ocE}-hS;`Rj? zf`zEYY-hKmYwre_9uKri9Ykz=MQlWOPBmE_jBc_QI5hU;HmRBwyx|594{$7J?feLm=(M>W!}6; zy5ILR{G9!ayASI6gK6&JAobfZ{vM9LeIHmHu~rcNnI$j~1KcWM0MG*=i@As>jUS<#2gIz_o>)YABs;jI1UHz+n{jcI|Wy+K(Y$Go!e$d$C1$X2jC9&;b40)+G2ESJu@`5Y#MA`qLid<;M;xb=`PdLgJo#zN7} zE-aY7CFv^f1DiHtjM|9&8&Svyy6SE%TJd+pB56G}tgDNx{vzWHZdQ(%LzoS*;!aO2xv3n-`56{} zzJ29gv)_hJV5YOKXu*;>73j2;q8uDQz})FKtkkWUgZHJG3ouAb;$Y-R6V1?>U!Ae+ z%r%ony)m{L%G-)SdCPaum5E@J1N}dNvqp>><2S%rFhA^%jg+{o2G0}lGT^=k0c@6m z(|rxX!m705{%-#K`CN2Fe#ZbX=5LnJpRylqF5kq76C-td>PFyOzaE;c3r)-{fwcsB zf@@271xcc6U?ze`s^9q4V~=e`nL2)Q&}jC+Hk{!1=MNZ`V~<1y*MWKD-0sMDcDeDIq03U@*!y;uK#G7-n10ZKBs8_QZ;G9nb!j()nU3cB-khPBU z9Cute6e&RMe{6Vw4rB$EG=CvZrq1JB}a5CB7k zG;t&?Ab*B<2#h)apBIrJs_|vj^;kY}o27VLA+g?s7xx|{@f)Dhe9u(%4+~cOjY~f6 zH~DR21{vBJO6Da%?6LVk-ZcQe-#WE)VI|DdhT=oWsKyG!L%S>G=aVf$eh&BaX zeoa*7%6W;89?N~Su zVZiXtuisl&Zkon%D1$)n*{;oUn?BPo!Uo8ha;D)a!>S&w`U?ju04TZOgG%JEQI3w^ zE|hr=`tuqnN>4zY=;0J

WQGTn>IfnqHv8WQ>GA2JpWImh~mb23|))HlSVGKwmOa z#4b4#IVutV1@}!PQrNtf``u4(++&Ycj;nXwlj>ci zKO{E&aMKBB&(X+JieC|abViDTUXnZK;N~ZZ^Q zek=5u+aP-W7!!&up3pvo#rxJCR_x!(nl%lb(J#~A64XVaoa03{(Q;@Byk!A)e%t&@ zhw63}I1DEEUoVGaLmP{AXtb~1fBk`kY5&?u-i9P(1$M z+a}y`?|nw3U~1Y*Ivyln5cin)xW`+``d;ApE7fqUFCuj6j+KI0gPU?(OIJdX0Z`7) zyYOdE{16sCx4m%3&=suHS0AX3tPvs!G0tLDGlr#ANA)m+N3gexPn`LO$u*TD;nRm| zp>E6{q^_la5Bk_biF+LYRQ(OWRX+d+DZwQtcHyGpM}X@ejlMLRl9-I9)b=PY{RD#m zzxg`AK-5a6!k8SEK#W@qfFv@IizUbrtoWYy2Xbt@l-UE=cH#>h4zNe~r>yrWFLp*k zKbIlBvE2gE%9(i9i{ViC)SS5{+q(}BvJd1j%~vJxV;_=D<81iUoXu53V2l7v65Bz8 zdNj2T4Mct=ijxH>>`22jFjhd+48tJOfk2Nk_#6lya7XjRPzoTOAprJwR?V&YY2~%o zt(2T{Za`^z%clnT{(~iu`ZBMG8!O45J^v`=L`s6P}+m0w91{mj@ZJmD&k)eko1j+;Fs?>7>ua zr4{9{+fN+0ZY&~5okRg2^vUVN8s{v$kN<_gT`vF;`v(z-eWg*#aiYK+taF{UB*Cty zV*n`NFCVzDpcM0g7lZj;*2It?&oY~poA(etTctHlDwSHRnfk?$mw(XNVDCSVpwF@y zk0(BM?BFfMrB4F%N29*1I{_IZRkI|4A7_E_XCAO|`> zFZ1KqQrS2y%cD23iSixGvag;qf6f!UfY$<>J^aT2LE1J=pE}^@S3rV4rcO8~ZSYaO z=E_Q+lg{RY$s)}b+n-RjiopeOZJOBQ?-RdZ`~dm=`n3NMhx{GrywZid5@MMLZ@e|3 z8{w-QVbk0mmX+=(G~k)GH6mwD86Tgz_Rg7i!b0bN(w3!KY1`3bMc@8zyz26&;uY+G zRNy^(@wCUz07%>h;Qy`&MMD`Y3EPjfjah)M#Y(Q(o2(yp<^#(vdt>6LH8r=5+A-*% zcV!+79V7_C8fO;5CfveHT?O{p#|l9jl*4idRzsAJUkb(S1fc2tkk`{%Nis(q)cpK; zTehoV0D}=T3_T6G>B=eNtfAn_e|y)^8j$+3;rCSEpRugzUZiLQxJ3=1k+xFFj0lBKKowpc z^x*Odf4z0YOvDLV3PI=?gml(`66oRDaC~4&qLok3Zikqj{YV%q_R6G6X#I2_3(kxM4IDvzI}XdT%5Y?qjFn8J!JH%x52nGjC~7 zXzlq#Edo6ilE8Xh1LN>EtfFrP*uTW{RIajq-0#YifK-Ct1)qWKL(pwJhZzh*QGAo< zd@&UI2~>wI%U^(Cq*4Am;;n5-a9KZZ~J`ZjDH0lVmF!=#FdML5i$?Sq9 zjS2CN1KIlVyVSks=IYRve&LnJrT7Oon|IK}lO~yv*QAw#;=YBtekb~u*Hdg)>3l`y z?DPLsQM2NXG2gVTO&=|3^UN?(ho8t zp2-=q^h%yPckTw%>2BtW^m|});+T0r!EE!r@EA|qkz1;jF4SLDi~zFsMK9Gq*`^{lfm8p+KrWHP#zoL;vvC->s@iryHbiVg>}n>3*d39 z*_nb8Zoek$wzFSX^jS$0a7nxIRXhm!Fr8_bICVB)x*DyA^9>x-9%LQp6eR2N8UD*z zk*L3#H}4&Y;}*uEF%_Z~GgoIl8i_{XF!Yg@F&40zbc8zC>JsqyT#64CE?ihwHNR?F z#IXm!toIfS%xejDd_EF%kJ(WO&*b34AHhokVGhv!bN+R1sq9su>C{;cj{&Bu0CHDB z0$w(I?(DfdhkBqN#VOkOEZ&3183n%~)Io)V*0TWLb0FRNCOH130Ofkto!}3gW?v=H zlJ+p<@$yyMdID2~ZaFtZ=%8C7o@HI;+e$wk?$ z6*t4Xb|$|Fh?dfb8Dwx}E;_Wq9{*^ZPkYf~Ba^Iq`jcx;A0x=&ca1%MLwg~z7=xCd z1w0|g%#RikF5JZgSHHbDcPOO%I$wj=buv!Sheb!NYvEzC0LsRXx}wf36SIa!;*`qo zR}O}N=_1GuzK*&K0^k(`u(EVQPohO#mU+#d0$_92)X>xDwaOU-vc3h);|l<<--DB0 z=My?7rzUW=+AsZkx_S#baPVRGm36xI+H3o0Lc@aRE<`=bV6^c#41iLPkNt<#Tz2lKlC*g||oj%tPxlinHm%U|5~96J_% zlIv=XJZDtFbGEWF{f(bLRjEgdW~Y+%bjA{DtVp+$wUb`C?cxXWL0*;zPQP3vRC4|& zKJxMigmGBr!Y&OR9)1E?HC;0lfIg#rx~>_~AnxC^H>#G2ih*3m4LH$d++72RHf^_0 zx2ESmbbsYxkfB5Ba+fw=Y*ZqCu zlc4V(=Wj{N0PyoE(v9}3!6_ruYG&f?KY!W?M@J_uJE=!w5ljakf8=KquWqMjYt~B+ zJ-Ph8r7K}_Sq>SzjhH+poUUNc;hnm6;zjTHp0)X89vH7S*Fo&l`{7s5M!30EE~fJc zS;2sAjL3;^h4K4!#=C&zLj96G{^Y-RA(t9iwBSKXp!cn>PKg;Jn^3DTiT0S-V4EL+s_@^V>6>|0D1#61cqx) zy9K3&sM~dyxZ=dS1#|!+rvqqKPH-ZiKtO^0Qh@TeAaz3u(88e{T>h+Cx9mZv!KGd( zLTepFt)nnsA4ihN(8cYb4HU76h8b6DCVlInWUB6Yx1d-@m}L(#ebm%mG8 z?LdNi(^OH0prxL&=lg?xYA5SgJJBKo^?|drP7WU;PkF-t`TwLdI-T=rTAkoHpupis zfdKFi$G6(XHu-DDB6!t8M9!q?qnX4ygRT)8GJ4u$=TI@qL7|PsF`FmWK|jSESG@|J zfV&(sY@*x@0;$2d%UINB?rVeAQSnMHy-|V^Hj#DQf$aV^EUX067!A_{oTn)VVvC^k z8R)@gLu=8)lr!BsDg-}D;nz}7(Ct^#B&FAUp!O}(i@ z4afSk6x;mm)?wQ+x^|hPBjO)cPf2@9+6l!pMCN?1ch#FmN|8)c&>sqi8_4I=SDo}a z%=3OLA_Y(eV~I3GKSdB8aQSL4StkwxK?*1kP@vru2mrs`Bs;urU_dgq2#!y4a^S4h zBldP$H7Z8jQ+;9rid{NOwWrk-+Yt0O-EiI?Z71^+x3GtTz;+CmoX$jxd)Jxfiw$!4 zl~BOur}G;Q=E5i&2ec%^9|0drHHu{)BT_1N>3AKafC2#p+CzbMeaP)8ILQ0?pg=;b zk`@tKLG0Hs&HTVMBJ_H-;5DnKHAM!eT6WBwtlM@wnv|92d+JA(XHB<~bx*p5M;M5W zBWx>`&csSi3x{JX1;KtOtZni+{qk}mJ1n(RFN;*|$8ZQkOar;LI!=0~*t<6i_*16_ zfG-IZ{0k`1b_xW5-*#FZo;hK5$t4DtOsYsCfLay85mT10q!9iUvFNY=+I_$4OQ$ND zUAB_|4Puua*L>x2IAE>L6qXte#PW8kKJ66tI7j*TxP+(%h|}W6SL9M$!x=@zKsx2D z6(-i2@Ru^qo*)Gj2q@4I3Iu@P5vm<-_W)2C9w9ODl3n1y zXL=C?Ez@)bRyLkvnBz{H@y9c>!Oxn=+uK5i3MC^!d{pmxE36K6QuXhft zGpP>mj5S-fNZEPX49!H8#jP151ev><&LEm*#?T*P>l1Ov*E^ytC5Tf_Uol|2XT*j8 z=+}#ak}T*$yn}GaF%c_zOf25?qIlx{Z-}y^a{W>{1*>di39s^$QYUJ+L)61v`9Js< zP#~Z{J17tUemjVDSZAdyA6)+Hw~X9_(8g0-h9(A=k3gCZyj+J2_+{cpKv{3#lJ!mO z=i5jX%IPKOAF~}^y@N&V?&YGel%Q|G0>=``y$;MUFA!$EBVOqw;f#@8} z{a5~ZeXDp?27(zc+j2+uwO00QB6b(!%)(~U>}QQr|NUEocxC< zf0joZ3jKj8|6;HoP#~Z{D-;L-zZC*?x64${l7rt^`L(rRx9@a|dJyylz@PT>UvR@E z&q|swT4htGskRb}%2}#hDdM@Z|DOQ-=ZX6Iiy*%FJ;Xb^L@1&|S<8WkVHKED7Z$jE zRee=HqV$ZwG*c2H_!m&1eG~{drS{RQd*r5KHfIXiYwjB_V(r-roMfGikj1K3SfXS9 z4|P`${FWp}m50ccid?;_L&Txk=2(Gn_c@vTqWAg$*-HWR(_q1Ku}Ia~5c!zGN^TU# ze(*)kYG=zDJiBoV5u!%q}e9f4g&vz&0%rnfDeT!{srd#T!?mfk0)jPLOdnG zo_6~F;Lvi3!P$TU0R{F$fdKILLzr%Vn(M{_Tz8HC@-D|yM%a#B>x80^=M(g69Vb>? zF4B9}!+!o8=`=+#4Mj9LN2~VHkKFxwO^ol$wREYXeO^S1jue@68e*IfEPCo-o;h1y zTZP#`kOB$>6zC8I0+CLK$kvT+B8WptYb<>CGzipR$wUfbo|WW!q^dB&I-*$upzT=z z=IP?{e%l%-Lr$D&RRSxOmwRG8W${zxDR@oc+!965d-wcu0cR^JXgwJiZBJ^ch{Q%n zGfja(q_79#=j_D7C;ftjPjb`?HUR}XN`V0IJ4(6kbYBki#S@!P0l+VZiRAGxk<7~N z6)04r#R`u1fF$#U<1Q3e56D{6w1-BEH;qR286r}60>B;v09HAS7Ms|A9RtY_SyUjq zZx2O-ya5H8Q6K>PW+Vwtv`7IT^cQR{5vIEsp0XohPANpj0k@B&A@DsyGQf)#=Q4i* zV80C6{956vn}q6o1V5=g*w5xQF*8WJB|=G`1O@H6kpEu{1?@nTh1o)iaeZ6>Kfu0r zn=sVVMMdAOQdC5Fe~hDFzLGCjTF-`OajxQjW^@}ba=}aN|5*9E$dNi z1C?ti0&x$cTteJqClPEv?Ew6D;;Pib$~;1pA|IWskO!iBJBe}$=!%XtZ8eB--V?Sx zT#NxQ0nh&b;y+|8^a*SC0003GNklIQcKb zW7d=aFGV!K{;bresdWuz0SKkTunM%xtltd}T=4>C1^0^Y4M<2LV!1;>2d^Ln6bLBL zDHI3*zf;KAO$#Bne?GYLd~wTD|LPBO${_&n!Qk4