From 2eaca4eb3476756f8fb225f27d4752edb475b4fe Mon Sep 17 00:00:00 2001 From: Lellansin Date: Sat, 8 Apr 2017 19:13:09 +0800 Subject: [PATCH] Add storage.md --- README.md | 19 +++--- assets/storage.jpeg | Bin 0 -> 110289 bytes sections/error.md | 2 +- sections/module.md | 33 +++++++++-- sections/storage.md | 139 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 177 insertions(+), 16 deletions(-) create mode 100755 assets/storage.jpeg create mode 100644 sections/storage.md diff --git a/README.md b/README.md index 8a2e117..8ae7fd1 100644 --- a/README.md +++ b/README.md @@ -206,19 +206,20 @@ Hi, 欢迎来到 ElemeFE, 如标题所示本教程的目的是教你如何通过 [阅读更多](sections/util.md) -## 存储 +## [存储](sections/storage.md) -* `[Point]` Sql -* `[Point]` NoSql -* `[Point]` 缓存 -* `[Point]` 数据一致性 +* [`[Point]` Mysql](sections/storage.md#mysql) +* [`[Point]` Mongodb](sections/storage.md#mongodb) +* [`[Point]` 数据一致性](sections/storage.md#数据一致性) +* [`[Point]` 缓存](sections/storage.md#缓存) ### 常见问题 -* 索引有什么用,大致原理是什么?设计索引有什么注意点? -* Session/Cookie 有什么区别? -* 连接超时有可能是什么问题导致的? -* 什么情况下数据会出现脏读? 如何避免? +* 备份数据库与 M/S, M/M 等部署方式的区别? [[more]](sections/storage.md#q-deploy) +* 索引有什么用,大致原理是什么? 设计索引有什么注意点? [[more]](sections/storage.md#索引) +* Monogdb 连接问题(超时/断开等)有可能是什么问题导致的? [[more]](sections/storage.md#Mongodb) +* 什么情况下数据会出现脏数据? 如何避免? [[more]](sections/storage.md#数据一致性) +* redis 与 memcached 的区别? [[more]](sections/storage.md#缓存) `更多整理中` diff --git a/assets/storage.jpeg b/assets/storage.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..19d7c04159a8dda7128b84be462303821ee5e8bf GIT binary patch literal 110289 zcmb@u2Ut^0w=lXx=v6vM2?A0@dM^QyE*(J;iAV?Oy@sNofFL48P(bM-MwFsRuPQ1X zq&Mj;^Z-e?8`SsvzVn~w-2dL^jPLBdGPBm2)n@iI-s7LgQ@|NrO&v`D0s(+W;6LDa z8t~N!bans$eSJU(002^e5ONkE0wE9uP=T=h18YJA0O)Bs0RY501B8EY48ZqE0=b>i z{C*SU68yy=BFKgQg$XX5pdPOQaz;)bz8*eK9-ds17sUX%OFH_5Cmg|a3ZFj(&-8O7 z3?~8a2$v$rGFCB{!jETYRCUzV5k@A4nmSiBP8FdMv+?x2LvRKF+}wS=O|&j?UAu0{ zMKTRa0|lr6L4e=J*2h!L$mq%m&%f_e{{KAo22W)N`b186{ZssZ2hiHt``CiY8-eJz z?R;$AK)3<`2w7}By?p_I=o?th6X5H40;55g!5b710EkcYWpMlrvz)-Uf5R6}am-BA zK^#@kC6qQc-i`o3eIh@XzpW$4hx$ZDF?Ty>cMyIC!YZ~-Hg+I92ErHI+&n;-h7^Pa zZvPt}$A5!uY;OO<)5gZ}ANaQ}ASKxFWoIAHJ2pY5KmIo#Zg>1Zdz~h3@JZ?9t!)Cn z89=)gyL#xIz?2|d>weq75QOPK__H&p(I0rk$xr(#2%q4u+WM%2wgi{}fB>+wxvU4m z>>$kK=XzD`4=iEh4ML~*1P0E&I%a?1+uj}~fA|ylyWcT5vF{0=`%d;cf8lI<9}QEm z9F&2;-@#c^2ZX^$Bd7>=GP3|-P)>qYe`oWPUO)}P-9E0SCo-JynFw}LKPf-O@%A%0 zk(n1P-*NEPJkb%vfwH*yfY2#_=tWzb)3(4^fU5dBnQ4RNAT9Koz0b81c}``pv%jnX z!k`RLJA3!5e`JG#(RJyB=Lv0$=bh772l1iV_II>S%0W9r-}?BQ{-y2p^)@>x2W<$Q zak0@oiQSX7_B?%!PV589Mo0i$0n~xZ02kl~=G%Y=-~u@RSgl?KfBmk}1Z)6rz!9(q zME;cgrLZ`yaR;BKKrpZdxPv%8|Il4Jt+faI!E)R`rN3!K0Eg3B|5FNAU>B-S9lOsq|;Ni6uc1h56Az5`}&!1=!^(*x`5LG8T3 zr~6+W{>6`Io~VathG>9jif9-x2Y#J$`J*YqIm-L51pjc>2c|%7zpY{qTFf0-`in!z z2TCnXc!^LMlpmCxkcsdtAVMewYNAF62X&JMOaEH$L~6f(Wc!yb|Jwa8-ig#)|EA-g za%v%J=|583{;L(}$-kEPuU!6B;|$n=SbF~z6M7%|9@+tIf_{P4LaPBTXan>E^c%G9 z1pXtl=BafY|7p$S)S|AS4$gmZ#7f1M#IS$x|7u_Z)}FL~;sGCD`#@hX_5gJc&meDS zM<-t{HE=Yx=hAVvy?B93LQGs108YmC6C428W;z|SAxvNYRp!+Q0P=C*xNtJ8a-CoS zfDI1-e4GaW`n`XZ@oa(N{s;i-x^4Zu{eR;Tp1g%mF|s5DCNp@!;1l703i~fIOfWC6T5;4VQTK?cD~g4YC91Wg2;1Oo(91SQFLoypr8AoQ_xlD0Ujz15)xJtVG?B$LlPSjUy>M-rzEdQ8c2Fc=14H46r?ax2~tf`OHy~z zDAF|2SETi%y`&4IM`UNn&XXyS8IswN1(79@<&)Krb&<`H9g)+L^OGx+n~}SaN0Mid zzaeiUA0ywUprGKUkf$)FaHfc$$e?&j@tIC+MvcarCYUCT<~>ap z&FUGlGkj;%&)A#^Ka+Ll%<1~O(b)-g^oL7DiN zbeQfiB{98Y8e}?T=3rK1wr768{D!%gd7p)iMU};#C5{EfGQe`k%EhX|>dKnTTFp9s zmhi05S>v+-XS2_?on2*PU{hqXWs75b$2P)Fz%ImY!XCn&$Nr6dmxGf-i^G%SDMt&( zDkl@CDyIwQ6V7_hB^W(S1?CKU0&9RRb1`zMaoyp{;A-VUpJP9#ea`RPi*rBD9dYw> zU*(SCMsbhxkn_m#IPg5-Y34!m!g%$0LwQSiN6wR-mpkutKK*>h`F%cqJ`28BzG}Wj zeinWm{$T!6{xJb60l0vdz)OLCL1IBUL07@&g55#{LefG`LRmsx!UV!H!p_3ag?la# zU68-ve&OYXArVRuH4%T2QjzJ4Oc$?QjJjBTab1*G)KWBAv_ljxCM|YHEMII?oK9R< zJW9Mqd`m(|!d4@C@6vO{tVaz=6qa-ZdiIRt*4!=J*2~-W2;l5gVvSR4byGa zqtr9i%ha2>B6P+3N{v2&zOH_X{+Pje19yXJL%>kSFvW1(h~LP|=#w$Av5|3>@w|z+ zNvKJODZMGe^p)wJ*(I|iv(c*pSN*Owo70$EnU|RFTU@qyY%z6B^jg@p&g*BdJ751` zNn&YkS!lU?L*qv3jX5i6s~D@noBTHeZ+@{pYkkMM4nc#kLA<|3bj#w_t6NwbLz|a2 zySH_2Kf8^#RkuyIU9nTOdt$d_uWbL=e!)T6;jzP_qq1X)N{5Ua4MaZ$0lqABfLQ zpAWta;56r(pMc*zziEFJ|15t@fO)|CK-xg}z;8i9K@Wl!f;EE+LI^`_Lz+X+g+_)> zhpC0V2#18<4sS;CAnzjQBD5lkBgrFOBfm$9MLmw%iMEKYxyx}k;_mD{t$U?0)G^*M zL$QjnIrjudg z!DM)H@nhP@!H;KC^i!&ya6O58vXhEP{gNh?mXl7N?w3B5aV6u!Q{JbKo?xxM8=^vvIY_v1zs$(LCC6t);)!xb;VyUfbt(&GwcKwT_0*%Aae$D17<& zRqktbr%Y$nH|cMc-=)7-{*d`m)g{~YpK~ zm(MTk+}(Mq`LqStLdl}UV(pUVQup$W<+&Blm7~>|HQKdj>jLW)8>$=M(AUs&o8Ftp zTM65&+eJH4JI%XByAykEdq?|m7*?%n}HL=)!_B;W5;gC$DTIc zHm7p|DEK6B09VCZMF2o`9h^IK0{}Vo@3q${2ITj85riRs@=5W3fq$>hPAb4T1W=?3 z09PXb;7TI^WP|xU2vdUZlc~3vDnKA9`A-H*PLhvX0z79w4M8qB|$9 zMoe#PL&ELFAQ74Tf|Tb{c@v{a51Lo)G>s`~rePQqnTAa`Fo5mo+rC zv~_e%&90hTfKxJCJ9`I5CubKQUqAnVz@XshyZ2&Z?>~rpobn_!Ej{CD=F7bNg2JNW zl2`BES5#J2fB0C_+|t_C-tqa%*WSMVfx)4l!z0r(v%lu%7Z#V6H@CKTcK7x%2Ztwm zfqMYI)%r)X|DqQys22etA(W8hL@x+I0GOe)ghc1WiRsjgNo>66xg{b=87?KiC~qR; zku*Uw-uCVxXX2HbKEHXQ+Noy$cZx;*|I+Lq#r~z&C^%&%I89Ij0w@s_3MC>Y0uwPQ zINKs7CM735P2_(PUT#Z3N3 z5ZRl;mF@I_oZ4Bz_>qFi*^3101)mE|BXUWMH5h>ZDaRIYF)aT!Lt&Y~vNO|TNWTen zVOj?@&d~)vP`>>xsDcw2r?N<<0&_K-z zWxduB+mY+=^ZU$=Q`B_a!N~@q@gilQMAez&0stS)5I4j0ylIy)H*d0GyAPUDy$gm*;azFF)eq^4-wMc7{glUL(Kh4vm#EbD3pWo2@gVewlfVTz@74 zrolHok>Y*W4J|J8V3_hzrO;q70v+}rnZWUpU=e?T(lft&+qksGyC03eH16&cRy_8z zHY_>@tZQ>-Wm_{;7y>1>+p4{ua#ajBu;Tg6R$n9IdrLzZFb$x2ABK~@->i*F_ktbG)Ok#&C*0`BW~todX|}oXNZZ7x@pgT5UvFmrN2lb)J8Mns(4mpin=Ud{ zx8W5kU6OJey|1gpYjd9LqB5}v)I{K?89&tBTDdFnx$8$k?1bAhG|UrF`KF`%qXF+k zp@rVthT_onVe^e86Jch5ihWIal>8!cWyVcWrx!!TWK~-nH9o9#;D=Sl-ha3DFI}jmLWkVt#1swUJm@u=O)_qe8(Q}&)FYlGzYTsj>^?60jcx~51H)X1*-Ge&R z8GSHRD=V5sZtK-TY5x@Yz--slKxp|_b;)XyAPa0_31d=`C1;y7SZ{ENEs8N9ix4Ig{*PV={@WqqY?de~hz;qT7+Rie_rd z&H{^J-+IMZH^xjnNYr9Qas$tAbPI3h`09hKJe-Gn|@v~C#x zb*bs6Y&vUdy%&qxJzxuI$-@@8Tch+;$Y3>~U^05Y!60>er~~=12g}-LJFvd?ttwXW zCw+$i3FO+Y%O;E}e5jgJs^``wO-x1Ar}rPnEBBxLXcr1}YFegZTBJPc{C*+um%mEI zTC2}sy(>oVNGlLN!_hy&{yr@0dc_D|wY^t$_`H?4hG{D6Ox-bH*8kc!gte0Dk{4AC za6L&?puxmcy1JZI38w3QK*RqFiV7WSONUqb6;@uTo*;eirg!BBlSk%-wJGd7O&TMO zfE@B;z_|;+8VxZwTk7}V2U)kdo#w1UU(cpJRGao`dcoAQGe6_=Gq`VAf{ZIsX78~7 zNh^b~2Jkm)lKtonDrCLJ`LxSJ*H&hR0r{GvbPk>bt0+rvq8Ny`sOFnM)XXYP@dcXs z3>2@D3}&^z1oJVg+^&xo$ScXZu_ldpGbQ0nISqKXfc#?@<|FR6Rlk`zm?O_Jc1 zFz}i0@4pmUt<}a7T)S??$orQ4-Niub{d+jk1*#c@>5FxQ1fJUSIipLc9UYdD8}7EW^F&F5+Ni0IM5>Rsed zlTm|Sc$E^oRCzs*JSL9r^^5lrK|ygl3z-Wq0(7h@-CbE4(1vdGCh={@06kWRqxAY> zW~p<-?M`=^xeJ|q5XBg_ev8GVcqQaCoG{-9lWxRRD&s%R+QrgEO13WiD`{A3reGXj z@)~<#Q{%(Cp$fQwlxj@ZGu|iOam?!x;hV2JH=;+X@-|aiRRlJ7zc%Grh2^Y9J~i-H zuQH%*30w7J9Cu63tjkh)iymr+#fFRaGwXI&+9-D}kl#+0j4-q?Qh-`N(dmE(?l5BB zA6a2_F>X_EO6w%z@pqVLgS4L-Rq}5`hi_ADOFTIO&3Cx6+hVqPS%D_9>w#$2?KVpL zq)#?lsv$YL?fUsY*Q%esm_f1xhBVcLxMXwJGF2_@Ck}c`sIm+2ZfUvvK^NHj(=l)-ad!@0#eeS(a+)8Fy#H7~rFG~!RB7%u0W@N(8YkemOkWSW zWy^rLP{v}YNb;l9E7R3P)@58ANiIi*O=p(R1iJhXG4>zJz16~X4A6EMD46h=mc5LV z%q0J>1KgPeoS=l-UXclHra@y+SL+c)n0iz2^MbE2iI<@yxM>6w-zZxisM2AI(cTK* zzvOu(P$}$1VTMl^ssz=IxPM;j9!l2t0KOxRcy3Kz6FZ%=CO=DcY4N~3v*Ty&`=1Bq z`7rCX>k}j5TY29brV7s9Ou8S+f3YA4_VnVz3!J8Q*lgc!Xd{n&N9fQBEb>|Py^5Ki zh;eG*7$C>K$5q|QKL+k8&aTi8#Zi6bf#FO;;z{Eh3{oKBm2&=q>|oJ8=I}+-&eHg^E{)8U&9GKxbQzM1%emF>%!x29RnSM^%T9gs?nlrWD7Loqu&&8A`P7L?_S7$n-z&Q7fxI8X>agw zW9n$N9JA)GHIzV7Yvqrr z^l;ooYxw0TuE+d+bdoOWj=0-daIhBg`XVjfU=*(YUQeH+q`wJVTC4smn{YmXAQWLF znF~q?XC!iZbW~rwTE&x6?K`0 zUTtxF=arzNeE0SkFgLtix!r+fNH<7ZKWc`y=p>!Fkb=wLgS6k;mX||(%x<_B{@Nw8 zD(B^}@?3u;t!Btj8=eI%GTCnU&=_km`0^Ndz#kirba2eiak|?g3zSkyB-Iv;R7Cd& zDD&^#cSJ-4#~F}hoU8t!s&r63NVBRLhjcWgdYWef`LqgOShieka5*=JWgqNMpejc$ z_M@U29L5dzP}LauypE}xY-K@(z|+WO3r*9ozbheCO)@!$2=jlN9XOFOg2#6MwKymcjZf0@K)zW)Zyg@I;oudmZlVXWwJlU zUgd9W-`+Y*>wu2bRYN0}bR{1?mo(p(C>*s+=}53Qu&C5CM)7Bt;#_n!?){sGX`iL6 zA(+C4SI99EBU;8eS*)yhxs^5kungq%y6cR`sPjdOM)A7G>(3T$O(8qA>jLvDooEbk zX|pjNkrSK_8vHnZxWF-xy=Aem-?sO$0#{ye4BRDNSnX5P+S}EjEQ^=k!tX<&%J8#` zc;aPbl`K}MjGKnq$=cyrcsFf*kDZ)EeV}{reEoe~)-hnefw7?Rnwey(&YBUq9P><8 zQP<<@+|Bg$w~NBphIPhh_lV0-OZ6PRi6v#@q$0Cd$66g(8y6)E`D(#2Z~^_P^=v}0 z`O~tXbctU=8Rv~WC4%gsxw|MjT)ql3CaVK4f-d+*A9R-ELCuj5lPdA9p=i|Cj(LuT zvj?SnnVW{qh*&&ZzwfBx%bGgWBihIE8TOeHL6GzpyRTmqpYO(9lV~r0S{)VP$kSU} z*f*Qgyt1;}CsLU^bU~Z!*H>yS{#Qe(_^+Ijb(_^K_G!3yExPGz`&7IUXh6AiZev7t zsu?SciGP9h?YUO<+^H{X7nlxssRkp;c$TKjykeln7+|}j-a5%pOE$IX9;#k~dveo# z>lpCkadem5H#>}5mJ$ik-c(8FeE(8^FJ9+;`QEz)!jkC-WsOjtl5r zN{nPVt-%qMYKsXAZx}dWR;v9RomG*$)ds;cxlHO&ovPK9ln3r1b!>{W%8JD*o?EEXspD_V1pEjX*y}Y zdRB;Kq>g(ZyLr0fB4_MO7)`5x zX;9v{NULFYLgFu9rM))~6cW%Asc2M-VMK6IbHjbf;GVW0U6JN6-@TF^j~&UWF>g2?Z;qzvTD!$n`w@F|M!<(q@Ro5seZW=y=EfzHTmjI z?|ZO>etjnsxD4`6$!!=bo*{HuY@{&U<`__ViR#vS?xWf3Yg#;cQ;XeLQ&whmcgj=3 zb(SUp_O>WGTs*L+)~3|uJLA_!#{Sy=*tl3Wd*jat-3}y%fB#;AFnc{$a+*qBXZkUa zWK@yIk_>zBz6B4d+jt1S17pN2G_TtCNHvi?->i@i;nz6AxU+CZ3>r3dazOXqVo)=R zlL@A5Px`DO9)-+-D&K2lsE&SKxv_uXGPbjXC~6?b(+37jTi?Syc#-Qawq+CPek~!! z0l&F{P{dxs-4CUmon*Df{GgaE97EihD1Ik9rW&39N`Xdq;Omy*=Ry36QuN+oCB_52 zv4^NfTgT9KcZ%dz-Sx?jiAt$=>=H&^sl7k!1AFI9p5;mJ8%g;Y%(TyZkp>sx%DJj%Y=lHr0 zXtI93W%#Yt^IHd|e6V0N^&mOKa-1f$;r1lU@O3>@Adkf(%VqPJGp}0M_JiI8wNH@L zg`sAUoKDtEGMm;0@2w`>w|I;U)-uMo1-Nc;?oQ`0HP|D_uqLVQnTt#Bw$rZqca7s$ z<8dQd(;llW;4WiK`t3Q<5xh2jea^34J^1tF#LGjvblV;k{_*-E^r+DX;8L$vcXG!M zWiQ0j9H7DeA=`}T>T}1k_y)<=eHzcbbe@29rP86vqXw~aWATYvb>S(Y_89TPPe&Y0P8ks(1K)?tDErE~%a? z(9smru_@6^@$RBWmciDnc*FO(wsUZCBVypqb~EzrLX48gE4~-RRojF=c*H-Ga3yZT zEccU$u~g`y$WR@xnL3e6W8-e)5tEGtisc+M1-u72;vuG9pgq=R+-RC7EAGBqv4A-y znkNXmIs6a-!$bLdcoL?%J(~@ke)ml!&ig=Qb#0n0!~Ta|GwN$@Hn<(JO))!H6su%& zq;Yd8Jzcmd!7&@&)4j*jTer2a$AeC5C@K8tQ&v%~UvUt^+cW|!pWoXlb5?BPyF66q zlZ=ZA6)e-39#(P=V~vv^|Jv%+ts~*rHQQU))w+qL#N|qVnvCUCddn=E8Q#saU33?} zc{wLs`S~MQ-5NsAsfIB&cIU%Ror>5aO)>EtM0m(hXT2Qmk&@u-O$&=5{e#L61K6@v zCiNs2@j7k=^Z zMtGBM2=1aP@2r)ruJuj~__s#`W)GQlSaR7-opN6sFxZ(2D0M@(1U?s6_1?=RlMwh^ zXsk-}Igk6P2B65p{jhW83ctsA*O3uIEU0Fz~P7do_(W3`;Y~m39)`S zr2HbhONFC1ls_M1IghMt%Mbd*5lyp;syzl+;U)P4*nr6O;6|2dZiqvl3kTA~4WOr)#)aCMJLsXgXM-oqd zmNp7k@*6oYaKmYdq!}5P4eP1B8G5^CSJIQ?u6@;km!LH*>qiHUm8GMHj@s#0LR!4o zM&8kRYh6;Nk#5AQV&td0?vLCnEGPwfuX_x)AX$JNn=j zi&s3srEYdhUvD94iHM;L?wQmlksGtZfjQ0obH0JsYX`qTGxF71rf{n}jECN}GOM!z z9tB?3WN4YBsW3sQac(gJuvY}}e^jX)ZYL!Sz8a~b!OHMe0CE}-xg@`gldrstfF)~c zNW=l*|3_5;hZAI&p+hLRH?fkQGE;xlNKW*DC=0r*DLLv_p@b@4dKdKrG0L=Hgw9&5 z7wpN~wqE?8c+D%C&TnC;w|)cDgAOskv`yz=w4^ECJ2US`mE)z6)AsO|6)T6FBT08(|clgj*vl^{N5ekEB)n3ivJCA6(eCVkq zHxPE1dwD4>!FoYoouZmF5-SxAIged-*>n z+m==`4^rCTZ(&hbf4h z_CP1bR5iZ2hN>!>GTX&63VKE}fNuQD?(Ums-bAk4Je6&PCcjK>-Oe(K`|YV)aPEXS zdjw>(mo7HxAeuUKbJjkJ@UerIXJ(vBdY zD0r^ce!5u6X8KbDjkQW=$lDiLeUvn+YRk&b?j)^)2nHAU*E6ZN`bpo?-RsSI(S}?6u%ZK^1Ed)B!F=R+59(bUf_MN3)FQt0>bIQSm zf#B$o+D#=L`2AWxd$;M)s6m+t$B~!`6(_vGHE2I)>Xh&iHO8FEcg6p(uf5othm4O{ z6TX1jLA}Akrp9HPMuLZbKF60uNk)a~?7oS)ay5C(8?f3oEDng$&6!@o>=ga#WjPdl zDrMIVT`aWgNl~T#J)8@+dyNgXHdH<9P9hm0PQDt0CD4K^UEQlvR*>C6CDy~kKW8&y za3v4*tolbrJ*GrT8 zpb3{`R=$?4AB^aL4=1(2IPBkj7;reE8b~_^gl=)%pR86AF0yO$RA64!o2G&p_Dda& z8>4PF(8f?crVO%6J_bY#%PzoMO7h*l-3RxL*F1D8(U&9V$rfgBvC6l6$tKa=MLo0@ z>Zw%J!1&zxqVl4Q03cCRDti}3t@YuJ=`_h|*|cHw;k|+Rlwe2ZXg2Z>qxWpECbIjb zG3cCC*=aaMs7CY*`3j9sz?~mo@A1OI$T_d%`>H%K8~d8F|MV9pVNa#u&&hT#ebh|~ z6eT9Pp?Be&>FPWqw~~N_qI;0)fmb5dVmPNF_U<~K7t1h+g}+Fa8hSb2=gfY8UWbM^ zvM01^j)-W7CGt77}78}AE0kNXQ(+wUZY z2^&r$RvV^sVq~L@^zw?w)c09ahuqbn1Ea+*#Ycl4FN7>5-}GEO2BxoJ70U6w(Oue) z4xZj|JHS;tZdgPFqV{}o&*07*G@Y|`LbOaJ#b<6eTwk{(xA9^NU-H|h3e%C$0umvVWFRBYYhTcd-S=~DSW z^Mu|ZuyWb$hJDivP4`;Su!(lNxzL%n&I6>+;{>3`egD2FRqu^pic5?G9{*mq7I=c&>sfzq@!VoCu`^EA zJ-H8a=Z#!jCoVwNxYXX|zU5!!x+wLDtb#s5Op(3&=PfaBEhN4& zJSfx|voL!MP+_(<)O#-0e$w`LW8+b_HHQc3EW3W~SQFkf&8_>i7?4(*9rw5O{LLNz4|7w4cd|d@Zh1WQ>W;Iriwf%S(ETm;1#r804?abU z++;wu=!Ba7OA7Oxn+0`kFk;DovgE^d1BM7sWhWsvNTS6D)Rzs6GdvEleeiDr3vO!R zk;u)@4Vbv3wX+su@EHn+wF$7zpW@l|JB4z?x^N*imOW+HEnj>ulA%lQx4aohkW*~g zK3<*~JaI8x>36g1I0nwR$_8JD-B<>vC#yZ+R>7NPP9|rMjCBcI)vDbr2jPb$gkB)B zcSpk!l){feGHU^8{~|b&Lm;+$G~jzsbO?OL7(Jw zomx13Xer<<+E#WoX^@K?ZOBug$d5^qJ^+11b!r3nsSObSX(5wCoXSi%r2{Vc@av7< zM`ECaKKQeSGwE17^0bY1Tz$4LyPT7`|0hIB(rk771Or8%$>93K-=!IOWrnNHN*|P?(`P4J4e3I`{TO}o zjj)FcS#|!JD!=ZuJc`(5+&8FxHGbntiTh8IYR>4v+JvJA#Z#VLX9kAGLahUu1D_F} zvngF4=u!p0p0z1Q0mh(37U9iFYvWpAtmd8^HFe;53ZVyZaPdyEC!#(GuA)%9`0;*Z z!yyei?>7awK}Zgtk)ML6fV+4Ru%DGQma|;D(yWwYjAP0^aa%e6Vh6AGgKZoGqG)iJ zmbMFm%}K%n`1a!9Y(}lg*=mN({Y1Q^wJGjX@iBnhflX`et>@v6fo|kIQB2}BiW`3# z7@#pXTh^M^zXfHU+Q5lhTl^crd>#%P4#f)PBt8v4WgjH1)xWE8k?madku3w&Hyw*F zYaO~wzF>#A}=t{p-Q=8mx@JkfSxpc=(BWd-DY+ih@CWe<5OprUMVr<0%fF z_>D9Y3q}FR4(Z_npZvqE3wjKIGrTR2|HAO!aAE%^E(8~E`f=qcgPlb(xY56?m4}bU z3bx$rZ#XeU5e++96h<#!N3 zkhlAleQ7h3;L<^|Cr;m(`=c%%F>QkN>0CpDte{6sFP8ITZ_Y;Rn^`}v6YfM-`*C*t z4n&i6FklN{9NzdxSmYGJ=U3G}1BO(Of9^2kb1iLUZoMyC<_I{^7G7N`x^b#@hZVHO z6GW!^m1=18lT78-ucN+x8~^oR7O5x3;RjVz)5Co%Mk03@zyU?!7JOk6uYU{xh@XBp zJ}wuiO+CwA7<_g&(%SeB7Si1XG&&I&tQj;1pwCi}je>TmBDRB2f4=9*);gdCPM9Ix zmrwn8;_amfydmgq*w0kjl_1bBk54N>t^XDKuuXO}?9||}|LlU;hJWv>u*9dxYk#Z+ zvbq<6;=@n;@oWcbnXP@kYYxv?4{Kko&mWNHK;&Qv&Ogz2@3I)HThg;TqcD_#8Es`g z)Vw=XgVEL+R^yO7C<;8|?)CKhfmR}QFDJhpteQ(O6m&{151Kw- z+5ePD`sHi&&}45t80q&O&L9ug4n;Ah4b!&+^Y9_z5Ack?P)uU*PRz4oV5A}>$NWo5 zhuVs|co$Vdh{aa~x?BmQQ*O9?GLrm@2C>QH3DU&wm2oZ%IH-ulk}Dc9%;|AH1wZj9 zgb;WssC`p5r~w@PK`Pt8bg-p(JVV2b(A1}JZu~&r*kSP_uTOKz9hRD`tnOwOUnkM! zwR$HFosb|f*XqxoY`uVod-uRWIh1(|e-dMsNj}S=vK(D!o$ zW1!Qc2icqv&W*{bIHl6UYCL0H>pbZTY~M>P_f_8B*29+dy_!Ajov$|pEoTt4ecG1V zCQa+`3`mX1bZtuj8{$rL(~)`;W)JqBQ1IM|f~FN0x&bnO5_)-4;&(%sO!$oO6bcOr zMTA3XA9jE%-vdQFljwt3m4L+ttiCAr0)js0zzzIJqrek<{XkSy82k)=C_l_5SzCJ- zl>&YdZwF@KLy)uJb&A$r&|YnuV#h$*BxV^@`AX>ZCRukx2OdDW_NbK3;Z4S1gUMSr zJQZmcG7k`VCjJKv3)PDa(^}XIhV;m;6WvSk-0j5s)u84CmfD}g@(nPX`R6Gs5Q(3hyIWp(>uRr*R%7ECa2>};(sXY z?V-TlcH;AjVJtlsJj=WHU?vF+AAXE6j1etdbkY`T&E;m-tEz|w>k7B=M6b0|-?wgR zVfS$VNn#oN4C!rGe3f`5loAIp}gM*qeU` z19FoQjp)QYobUJWS#Ayp?a9eZfJSvF2A@5+5~{T+3%10J6-0tj_BRYtHg6D(o{W{E zYr*^j1kxQ7GtVsi)j8|xgy%fK(Bk_WS}=5Z=s!W1gNgefymk^Wr1Lw5ugFV&Ve7}8 zr?0{iNjz3g)oR-mJ#Fm767e&L(~fi%*=o_`4-Qp~xH7GeyZ%0dU?^yvgaY!fhY)nf zz^RKeH*KNVh9oQm>1w6~-qd4{p%p-ijoIKWcywV~SJBNGwl%s(O@(0+1aOZwW(P z4Y#q=3*HA+J8g=&Uvi0FW<91>cJ2p^b)r}F$5Sf&a!Gpr{K>%3kG{AfE(mF9$3&?W z&6Dmte>3inDR5q-lPBAZ-(m4o5b{t^xGkzWcrRy!1=-fsuUy-JV@RC^_D~t^sEJNf z95wpu3h#?WsVEvAC>RPSIJl?&Og~r#*K2!14R49SmcT z!6;l(u$LxW)Jxwx<7+nWNq|EU~Yuq*U!C@ zCIe(iE`Cy`<%vQbw2S;wK1-RF0{d$DJ7>KObycZ7HHk>#tao+u{onRZbQEFFEX?f3 ze))wOfnT$1FjP`4UC47gsIPBs5DzEb-VA7I=^jHarlI<}&QMyN13Mg1c+iY1a`=T_dATp^lj_t8TGrL0Gc5^#V(R=Y|aOHQZ8o` zM)g2UU1^GPaZN!dLaNq;Sq7;xPbcTYzCdN?Z^I^vd-+_?1XgxSi^z1WN#$$Ag9CDb z;7oFHMQ54hQG5hAH1-7IOg>REm3Y5(?na`OpvfkhX!p=B4Z zhVM#~efn}amM;eUql3IU#TQa$(qY$iSKY@zi)bkBL0)KF?9tO;w(;ld(E&?@--1@T zLSq@ma5E-POxf8}u;0|$#{ce=j~=Uvx0_rW0~hD*p>PYr%`>hw+^aXf^Z}I8 z0whX3+0VBPxT4ptx4VgT%Vf%A(p-syd~Ph9b5mEHPjnh_8cpc?@Hz%TAt{i?8E*kk&lGW);hn>4_;ZhZ}GE$p&8Kb|s(jnuua#)mPaCbYQtl=kD z4o5x4W-0smN>jb4YxRU2?gN%=I%KxKvnA%pWix3fi_xbW+8>;WGp`^Ygf|8&5sIk$ltiY73h} z)hXapQv-@dt-iYjDUf9M1*A=mPd4F%J5)rlZoMijBT|B}QE9$LZHSPe@T4pC!^~{I zZWqxP8(d;Wr0u~+CIoB?%T(dWhBa^|)Y8dRJ_DzbbZ*3N?=Q;4C~A!-fY(HaEj=FI z3Duc4oe`yxdw$(J*Up=bWCJqB*}rS>&Fb^IgwE&1V3V|4UI|H-*eOg1_=gZEi_L(9 zTG29R`;7{9Cy}Xb2IlS5r}g$p;Qu1whigIf-pkFz=ow*scw5c6xL)*II@XkjrP&Wy zm9@(lE-g&j+1>IKj3s&gv8&GU#$;1S(fJ*b8X1$8Nep8scK7E;sA2~63rTqqZ#Q3Pz>#5~J^5Tlwh^h5APpTMIUrmeWJHpHsh>#E#@5@03H~{Z&Day z{HB+7JLk3uZ+L#>IiDeFM6+KyyJoxh6qA#CP304R?AZ|Q``^MtT_3dyEOheM2b(Q_ z)w==9P56#w&(ZB1@Dskt{T=0z(-|dNi}^A3jG8#i^?Nui*1QT+GCf~$_D)DnXYf+{|{U5 z0o7E~?GHy$Q7N&YNDT^7L_m5cDgpum0wPi)0@6f!FHsSY8UX<*5|u6`BE5wU(mO~E zy$2Eq5J=&Fczo`?@B6K9Efy>1taHwuU1rbBp1prlHo97t=%d)0nrO(~`J$3LD7?R+ z;CH&PmBVF3q8C)dg^!&+`QS2;omyf|Fs`YByafbW{`n_;L*p_Rq-u4S!yyHijaAPb z_r_@8ybvYn7L=l;51aJgiWa`PZD+vmjl>R(<-HE5Ya}pz`Or2CQzCm3ljb0y=9dEe znmjSDZdK04!^70@0=tTN%g|6rsZ(T401l;!mx{?uNg)+G^I6dRt!M%wG>xSiFI>$PJwEZ;EiJ!6ZR*r6cd39~rJz~#x_oG-`o524GWiGuEx|Mg zXrGge5^2gWgEgZ4ZMfJyM3-|=-;~b!+m;avGEGB+HmagRFiJubWlkdHUw+8ar3w5o zRI6RA@+C;5yp?xLAfS3-5t!1@NGdB?bC68$uB;%JCllf%$*lCm9=mD07WI-a(^! z#Dj8YwTO&S^>c0f_3@;}Mh1#Z;*;bfF^ zpt8Ddc`ooPbR9_z*T6qMi?XMD1CvcD%9ze0P`|pl&Ke; z`J*m(JXvjM*nQAPOm9_gD?_u#mrYD=HCaGI6sMEcx6GbK!RPYoSYSq`?Gb_^BJ6zK zwdW2aS+~30nw8)!Q(ULV6R4ir@Y=I`C@WlyG;3L=*APm` zm{Vp~m6P3m*<{7$%dns%i77e62vyup`RgN9Y;X8HbFh`)5L`e}VtvS&_nI6;d^jS>!1!6SW$YhlS;t}_GKmX463TM22 zwwpq^Z033AU>{?>Kf7W~?wNXL*R}qXxC}jI4}&~T_7l?<$Yx4Uh84(Ul(Cup?&W$J1Bku2sZNJ*rFRZ73Dk$O%Q4Lk@4| z5!Ra(O!*Er1ZT)P@xRJO-43{06Y9!=WbTSO{Y&Bes5#z1SD@63>woJAKy%^zcH_TK zwJqLjhwvG!6Z?AyLd@!E#)H{}?tPLxRpV!K6~oi)U(nESXt<0CB72bT1KDj(;b=Ct zx}x6MAP2N#S#OP*sx>STM1LYWtM0*DgV(7uqsyU9b<9M|MtG@Vi=DqZeDAuzfTuOf z{)_(N{d=o1upDRJs|G(mXR9J5A0&!Q*J-9+E4SW~=N?edwIDrSF;+;hAP!CBe?z5s^A@DWUU7aF!Hb}`$XFKhg-8Y-_j(GjYU`&k*EB&is$jHlQga)x_&f862!+!B3a;m;)YPCP{R{UrGZP6*W5yk_l*Zy3(+uQk0O^-J7HjL5I8NXbh-MMhTr9q=j zg(v3w)sNT*Yk?&n&BmviUzP{pMf3#cVB>UqvBUmsnf9#K*`f5`q=1<__S$CX<|n0! zLh%_9taOek@zQ_;g1&UHtBW3KH-Vh~xmsN6_ec9=>u`etjQ5KqY{??5rBzHfK&PLV zmS^`&vRK6_k3#v@X%W~NqDRgB5xB$l(4~|;${ejJ1g0@drT4e`NvyT|VQOp~5MQz- z=(;6B{rQtU9=18!Gw>V#`qPgbzoMxX_uEelzE5YD(Tl%gnmIc&+M6at#M{i&T{H3) z+t=#EFkjSKf~35lh4L#8%B-7r94>w-jFpVo-+oTRv+dF&ua_G)_xziHn!4kX9cwN| z-#wmVHK_0&Dq#z5R}oC;vkipE#V23wVzd9iZ|TgT-u*}{iIxBM^B4|5uLJN8 z9~%M017_ey#A)Ey_l62RzQcvgZ_rU8Un4Qii{K|VCbL$^OYj9FIN&z#8{;kyjnV<1a6w>z65s#YLfM#8-!BR*2+0x{wtt}x1Nj>8qsJ2K()c|y~w z@_Y?HUoOXKZ=u3md`j!g+V~^rA5Wu$GZskiRm>?@sPUGPq_-!j1m3m3gjT3p~(I%f=Bgm?pY+@H|=+?q!3+~}ZWT^#<#=(B4U zz1pR^|=r-?2-#Uu6iOV@y@u$QbM3HiauoE9^(tJk;9u%d^=CLj--&oT<@_FU&|1-o{-JvJaGvh4?h-@Tq3R^0=pL8j?#|Qu(v9WXIN?{ z-Y#?KYRq@y`R<;zG$3$k5d zxq&vz0o!|$d_S?(`Cwo*RGW|J-zz>!iCHycK{C8>CJZgp*)2TEQMc`1feCwwNK|lb zuEL=HIz*fjYr&-6O30?5V@lRecmSnhhTH3v;k{W*M6!1FtW1r%oTJZ)8|-oY;gp%W zfto{~s{(@tvJ!!BZ!63d_HW42I}4nlJvEB(mnU|olOGIAGB60Co8ZqayG)Yyolb|! zKXEr5HJArOYy;1SQY4$ph4x<@g!p=a_9VsIi*$20%%FZh;{~RH1yjCg-@tP)P|*(> zfZKB1I^1J(bkd~$4sPdk`P4}`xX(z0MEOaT7i2|bw&$xbkH>?!&P=4HdMuB`ze>NX zl__I9v)ZvI_3NwUKuRheCg&}^7u`qJzgj0z27OuCuYj05h@2qLsZIY8eIsrL4x-Ag zq6LOwDno=L&_+ref}e#xg~&qyGG!?aKTr&oUs1PUi3iCwLMl~?sF%L1=Hl&H7eGCM zrdCLMoYMvWz*%1 zFu65INn)@BMN;xg@ecb(PQ^_r>vz$fZmFYv{TesJtXHnl91ONDK1-FXEfER`OJ$u5 zJS{A6qMLuIW=Z9vW$m?$ZXsrln)mgYElhe9MxN(IRhTxfn!Srnh(&&unViA_f!^@6 zHYzQ!uarzWb6Wl?`YtZ1H~e-W5NrqTFmhTNQ{!>wz2_9=kS4KB`+kUs&7pWEqgH!k zO8tH^(7)e8jz%aX4gv6)PmKKY-*Rm)^hb+NWQsO$<+&xtedA3jcbW9bmUO@9i;O{D zD501%!OKVAmjbwC)r$U82iniv_WVvW)VHts&D9xSU^dvlvdxS&!969-F=R!|Bk0uk zU>AvxyIw7Vq?86M)n#6ucMVtLA{lbb!p7rTd|!XzOe!GiW>!WliUnkF1%Le()=tUSkL-osn16Y-KI>?rnDQao|*HKgV?-|0x40Ht)H?m>!M;MpMWo<}-&>SrD#bQEy<)=~ z-Vi{eIs|tR39pL6R>ZFTUNu)>CfZxPQ~k<5{mm|>f(=N;C5 z>BC`(+P5nu$$cpvO23FgH(RrD+3J2_(hBWzi89wH^NjI$p@M86C1T7&q-2ZHn~!=4 zb8hUXbsfpEw&>*jXVlf2b|rE!oSuNnM4z!w4h=(}HyJZ~_C;=Piv7TEKlPwcjSH*+ z2oX}!+sq)|us1R-hij;<72{@v??L^CD4AoxGXP99L1n-jvyPASW*n5F<8f!IrM&ITkUkCwAZ>#sh4zupbi(fiOAU# zjnp1!P?u$4JabkGVleok%m`cC5X3>Ih_WqSHpUzc|a<~KQ~rKmx3{_dE(KRs(6@+ z*=YO`2pKE>flMr<-Jh-vos-IR$?z7@8@k=Y$#adHR`$7^VFTt2TFg75;ZPmtKYjK2 z>UKWTjx*maDs*%Ny@p!~bAiv;mVEI)7}Wmd^BzCk4y*E`*Uz8Yv<^1SJw(PsegPYZ zaN894c?NwT&*+@mhZ|mT%%O&5L4h|v!t*{_S;i2bZei)Z1&$tpSS9iV{d9sXHHJ1! z+5GzR$DkiM`r1i#pQIK|-3Cj&(in#Pok)VynzKv;6Q=##FCP1ZosnKr?%{E&hg#`+kH_X<`tH>!Bo=SSTlVIw2(AHr9uZ{-$YMMod)#}{E50~XS;R3xSt+qE~ zuP`!>EPE5?YU1{2``xP{W2mO8sFHiUwSE}M9uv>b$~QC1kYF!NNoWMB27)`B8|c-L z%a7xFd|X5JMgMl+XH@*596h7rTIGPsu-7|< zz`Z30$b?DD>MQ^Fk7G8V3x9q=;yvMIQs1X}@Tj-ci{_PDg3YZflgLBD!z}I3PBrp( zP&7kii#gjmhq?>vM<86J_#c?$Pj#g}nQg38nrK?-9y3-Rm;IQCoQV**Mtn{QZLU%> z?s;^MKF}&AKb^iK)K!2z2>YORQy+kVG061x)Bf3)KJe=Mvw~p|`|JI!ZlC=oWKfkz z6Y9b`nrHCk&dbrrGxtgpIq(09&R4^Go6V|5_vS;>~&q@^s2%&*o0l}hmDs2hJY{bt{h zm@a@1pTxBK@NpBDB4U!G8q>rsJ z^*|*6u|HO|L$=vOa+s|zX#Js@M0&xgg&0$TKcwnE+G-ja;_9hx2E7Z?Y`iU}JWyZI zqLXdkfZXRa?$u(feDAP<8VZ#eaNgBKF|Q?1dId5u&7sV?II9pSoJJiM{jv~`K+dtt z=Z3gOuj_aCt1*x5dDpn5g{}kZ3!g za1?J_{s3E;0ELxDd0MqgC6M)20y~tDY6prp)jZB`KGJS+en0s;(L) z^J`~4ay?Ds0;G=aUBj9RN9B88Zum95;>+GMfD3EII zmYYy1!!_SlOZm9{{NtU8P&Rmh-{|`i2C(YDcchLkSKQ5|(;=JMN_yI&sfH=uf-1Pe zJRHGx?=w56b2DQ4>K0Wp2AAD>$2Pg}+f4VSw0y=`8<*;nkgxs~9%D<{_R zD_ieV(K-2zfU6g`l{x(e>(8ID`{61TSM|xcj=xnf&21ZM7_P7W?O>kiyzO$b$Nj_@ zl+b6)+*c1K_!X|TTh_SmmPKoD8t4Lw=(i3CABan7lhvrT&|VAJXE+Uf0p4ze(+WhTuK!0xJxy{F%v~ZlW4Tm_bLi0Y zLSy!+!}H_`oKqA0w7)VXm&)HX&mpmPa&pz&aLX#<^|~^$qBC{I1J%Et^4al*T_Ky5 zy_k+Md4i~p*Q_stmeRHeY47N7=Wj74E5_6e3KN9Q*xj*4}yJ3|%mzTho} z(ZYXM%d{`^OL)LPu-REQtt-0kaxm(|V9*HExvQG~azodkV8V!P4%>0VN`PRa4y&!R zzdsr=`{b7?(O6YSM6~_d5$N$m-6+Em$iLJNf{psxmP<^p|9O|H(v`I%_V!Eqs|Wa0 z_GrOX$T?ym{IbIU{6&3?U8>{ryxtDC;d^U>07~6@YZ_}25M6znZ(Y5;@D`=eUlcvn z&SE~fRD~PMYgu~y#Ny?5^7KS8tL{Eeicka`)8qkDZ4TkbvR;K(QQ9Q{-P_gpI7s>q&&IE|9_!?vvjls0kwo9Q~7v6N0;Ckgj? zpE8%WJYFNc=Sqy2MV#@MD#4YdyA(ey77Ltruu6>o<6nQVZ@IwkP1|rm%#%!Qog~Tq zXU|%{*vdnmdHkE)A#;lq& zj!eD6%a=ogs(+EYi^TWS1vy|?Lkl}#vbWWwne|AcP4A$Ry6^%WgXer}IR_0D%3Mo) z(KGUdEpy!Dgem7SY!;dia1A#&3|rGq3@J#y^pI!c4%i9V-rsuGrfM3=K59o&w^tIx zLpDefXpS-mADvI;Tpj8s=M>0o9B)w>Mz_}n8wNfNtfF*$;?E;5nl!+es2rQGeoir893`1FokKEm^4iEzcgH9=RkV+$If>%=m>PSvCDeOZtqhS zL&QsHfUhNL9;QWx5Q}hLnndeNhI0c0)<*ZrCIqFnM2ktSuw2xq8b17`4)}Orlj-nR zId@y@@pEFYyK~K(4h;vME~P=PD94b6dyH$*X8vfK6h%`L=+k>Nm-y}tpgD+X9dKJs zt@KDFh0pkK6UuD&G!Ou)oaTZ5te+^qL^lsE3FyZ}596epMZ(Z0tBF{LoQbtJF}la*MS7A1DPR%I2A@~0~7 zn6+1Np9zSMj7M|d^I!0z>gIsTJjzpodM z)bPzgH|B9$b3)Y><<#CGw$rbJ9+Gq*^&D#V!dH}J=~mDX^R@9n<@!K$5qR8HZn8-`&i3-Tg90KG^fVP$zi$-j-MdqUAuU<8`ENM^r2qM$24mUc@7i|ktAqg|{Aqe6yH{(C!6Z8!iA_E-eIZQUt=O|g5HM)g$G1==T zQtIzK53YU#)5W^#d_`qQAXzo%v^*b{Bq>ZuSUSwJ9Qe!tpfG9NUwn(+&rl{rejE6t z7|Mdj#WjoKX6nL((?B+`Vygu_iEy%}ZO@VDTNV0F$is;VTvF`RY&3zGmRSo;Ypq6& ztF;C)l@hh)gs#p3`(j@)FPr7rm-m0SeH0x`?xG+S;4?XaoMT2>Il+|&ZHbF@WP;o1 zwNzuVn#pB={nub!?c-g}Mj9z`f!ZLM0}5uOoCFQ?(s;$r8g`5wL&c%AHo+l-ox z$V1U;Qu2O0yz(OQ41(>mpzE62efX^&BKJ%+9GGR(-6$Ke8WY&zRBPK`^khGYnJzp$ zpMM95g))nkuOD8~bo5fNoPoS0C|b@fH=C>zFbpw+MOUAl!Ca31iVrfQ#fn;I6TMoF zK;T`oTOv2s^x?H{6=rqSXrn`N0PuoaxZUOEtuW2gBU_~$((P=|oW|HT7otUVsiSFJ zeFgqnGiR+UCvFzi?HD?6R3|9b%-8x!W*Qr17mxJF!zV&wzf8vLN@aWG*S*miNmiH` zjl{AuMg;-gVh;IhI(P=FIcxA`@d95O2tiCy&B5 zM{Vj53fy9l8Z@5ikHxVPoq}h{DGwjmZD{FM`)mnUgKver1K z5H(Fn*?s7|aRRGQNa974v+sQfy}Jc^j52eH9QarP!pX>yT$wX-cj`SQBY;s85!xK0 zYx`YwD~>8TI6qp-!UNaP?Rz@1p!?v)NtxCQdJ?ickR-qGc;ERfJ6Avaecz(bFkF|6}q&*`tBC?2g>U z`ivQ5%D0TKv`Pn+^J`cOk)vHmu9T%hZT((zPYoE@+avu31jf;{+fQRc%5ZM}lB|B4` zEi>$OY5BN9W^X&!bfBx+toc4}zj2>c;_@16D%_^7Zrm#LdKuGi$Q>T`AoG~E6KdKa zL9tETLhI_9df1_O6(LzWw;ukAgm=*Z)bI;n2!3w&2gJ_G&@&2j|#9UJ9hM~0B&(OuCyh$UI>DCt&W^2BPOrzfY+*)53eLM3x zmk87ROsN!0H%9=&c;`B#Ay$65z>KSWQdW0p;9Y$rXMkO{f=i2oK!--_#q?|PEliRe zkVhk59kh(WO1x`ghTnR1yI-tM)8G=~Tt(d1!NTsOjNjPENX~QInI1M1LF@N!H@nnh zjdI&bp^B!zA~Sxtu8DrSpl2SMQz!=yH9wUwTUaPj+e5tFXhf@>N@Mo5$5oB#DtF?7 z@8imid5h7`T!UY^Y=0Iu{lT*i&Cf&t2PbNny>-oRPtx)+&M8<@@N5ZIqqC>1yf-0b z(s9z&hnA0Tqzd}kHT2{sQChB+%0qpH@bx_>dw>){ijMm@q`8mONVgYv38?qcZ%ZX25drvt^Qr$nCVi}Jp=Ok2c zVb>o{{IQ5u;WDK^fv}fd{6nzNx|z=L8++JyjyEn@Hd6qdGcFqN3@0X=m8x3}3VK9; z?yxVh>Vc=C;f!-z%N7_u(MAokr^w^MhYLVbb8z4be@0ni?JN*?@&?k6gkaf$*N;G^ z$mO4?H+U6zqw+5FBN>=-$1Fe_>-6b7c<0C8J=1$_PrYFSMBdp(qJ|h+KVFqMYc}*c zvx(L2Hlu))U_@0M@23zNiK%Xtrq8Cy8q$*dw{2bf>|Z?YY6H;^#5R81Mu62C5oCl{Fv!W^1e#Liivd z0yd!}bkHBTYzme0xh#h9@g)Db*>gUsu7EpWQ_VbkB#)!{TFnz#(JSmRsr>isW8!|; z`l{Bx9QQ1z9T%El(R;Y!DtB@6e65Y0Q?_xNjSX`gz0Y`3k9hmSaQ+==4U5DZtJl=6 z_2lhoUTyZMl_>U0`}wLfR}SJ_%k8%z7yN06DsxfVW|pRXf&E@m1E!{rknSh?O&Q6`S0Ty3$bYgNplB?!7P;V<7N0@B8m);5JE)AE6u z;BK-7j&>G`khC6EF#Ad=BeUltZIfg{j2~v)Pu9MPi4KPTo}M?7`3rAI?PRSW zbj|gSKqsh7Wk5;mx$AvE3EJ~zB`>7(DPc@yHHXZqdGVXOGTjQ~&JzFho%}mSnf}t! zzfue*2Wn-ir9Qkl4=f{8mEP49w?I!RUG-kt6Vhp6m7aM0wP)nA=2dCnXvum`5bBxi z3)jG`5ZV(%?%8j<^JcTL{8}yhDo?UmZo2zWk+`~gU+c{HFKM5+gLE(p*W)K_KD$mP z@GKmTnn}fH_1cbHzRNn*$|B|iG45xBhXop}5(li^-fkm}tCB`|^_E<{*zFpG5NC@h zN$9h7acyqdMDG?JtB-+$vWrzX*p+^J_$ei32i6R^De4E_n)06ZQv-!!QUrS1d*=DQ zsq=NP#*}T&2=icVk**)o0tNw*)I6Qn`YCv55LtF!@k)*2938CW&mEc$#`e?;7@voV zcel*%0>F~UdU3A!8ll=Yc-UtQO#V-HeMBSQ`75kCX6Mpa zFZrfN;}CCZuFuFz7vVDB7KNC;=5%Q9i&Z+{t1PTYu#6QG@Dc{s=@PPLugw%fS+`xh zf5flJl|pLv<+#tb7+ohJ1|pL+1W!a%>}5<2m00=eKCiy)rnk@^v#S2^#X^6ax(YK# zaC^q2n~Lzp`A0f;`6K{rOuNhw+sL?EG3IFoRJ_hmM{$2bAP@X^(RC%v;ib{usWXBY z>P`6XpFkek@k)*bHC;iP&s;$?c_WBj&I&KS=!WY#>?|PCejW-`=S-=*Ys&eZ#c9X? zlSe&9!3%jHf&gGdcKu3eV&Tv8?3&hh7$d}S{i#{k>Ca{N|#99v&n zg)Dot@951Q0)5|jFmYll;PF+5wz-!i}G^cK=V?@~C zrj;uv3lTnpp*hH#H51B&K9DR4q!eoiia>w$-3wA~{Vey4Fi>spG z?Wea&?c9dE&ONE#k=0=$GB;2qFRIPeN@Lrdkhjm7i&Yn;Jr4R~fTeBn1&0VFv^9+& zt;@~BYLP5FyDxO~96X+VFXm%uo4+S~M!d!8cGKmJA-4U;lbMxE(>z3ZTwP1~HjIdT zKysXz_w(7|k^wPZd9!l*aS;)W3sp}NcHaW~T;k)V@V;zYBBGv6c2v;Zh5w(qFctDai*+~E{QHb3qB9XO*u3(;hj z4#@D*VX%e2sNt|8JwTo}V z?w|hji~GOA)d^U0v|)32Du>+AK>}$EvniP#zG^v(eZfF8j|?yAwwzTdHXXOK?%L1x zS2FzkRb+GNkBN&ayZbuqbDddfvJ$DPggbesoZ20T7`)(SIKgr=@x8(R2Ap*QA*VhC- z>Fb_~4r+vNOFRRr?to3A%di*9`)`0bMe&mU_GR03ESC!^8_KC*g%cu$|A z8A$+6gt;SN`<3Pz5K;l2w*418|IvBil$bmG^_kz_Ts|2IT!1o;f1d~LzuvSx;Vi&* zFc6e%`tl7oyL&naXGdgu{`lm@RSnu@O%)KY=)l`FLdpN0IRXm!k@0yOpE{hiYLLN` zW#seC_%I&)fm}cY>M5t}*XLBoBV{e~O6F&|sXm$B^|-Ry>ESvJQr;W_dsTsXt`h;~ zjTF{GV^TYq7jX7d+lp*RGJLWPiDf1-{Q!k1t$5*bRI zQm&sJtV$yEMpY!)?HcSOg@BN=2#`zDn-_=#HZ5)(9)ZY*(yIWl7KALB4iv+q>-LFo zd=-r7pmqfM769J@0z32W0otKE5fslk*x_llPB<=N9ka87$tDiK8--Bt-gMwwFkskh zGKNy<)`3#=&?69A1^{_j0zYK_mo1&OPta5dn~MnLB&v>jVtW~&y?;zv9pD9B17GYv z<|S7R3-n`x$X`wpsjS1m!qxmQD-eTpa?=sWtRi`Q)^OUt_*e$OAgxqzsE43ipQoCc z0P$Kt76nLP0`=bK-dFiUJ*In0DCfp_P_;44=GmOE`4{}sSPe-Tt# zS=2%JVI+0r7vvx@@vk=2{z|3huT&h)DIc^}{LjlljsI}41Z@qP4e;LCQ>8##(Z_5T z{~z1`{k~GJ@}LJi(M0@VRRj2bx1 z1TQlmVw>v-=MezN(f_stfXp4O9{>M&UzcQDaRf>VP@|LqMiypqhw>7-iwUc;Fa#3E zK?hbu8?!BYOs0gliD^$@N7FXy2N>%p;&|fk^MGlE6n{n@fcSywa2}wDHBQ#(j(dy} zb54h+VLpqBg;e zI(WGcvgQ&^`HQQoiwGU#L!Fj1X(h-P3zBpaai z#ijv3FX@x^4?6-?s>MO~1?i|)n~^)fGk{+9B;bvI;;8;`V6TPRir57M70AeZ=*SA& z^rLyAi~54j=#>zq+tC00Dg;*sDMe7BN1#9b)UOK@q?eF&cZObG%OTwb&DCd6Tp6qu zK~;hRh3K=d%E?49X#^M7pL2Fel25OxTA)0^z>*uBdpdtS>{TEOI z4s8D;5LDh`|8sHXJ$bD2=U?LA&67&#d`P+Z*YVc9Q77A1L!cHv|87( zZ=yJ6y-x9|7CL#Z4VT;mh~oHrK$nSul2~b5fF6y!2%PxKn|%dzWuW0lAOHXh_(^BcORj{^1N6f3k3d7FN$}1Qx`^DAX_W@7T8uO8 zRKCbx7XE!j?LT#4zg(XrS^A@i@;d7^B@MpWzvpx4NHqZR4(ML!900-wbVgzYMD!mt zH7WPo>z3ESyH#hF$Fiwdk+Eee*5bePLo~Sr@BJ(NL133{+v(sCAn~?#L1)T#`{jCc zY0&=>04Q8OX2T39r$4q32vGdLOUJ)z5CMqF$>-9c?m~yE)Cia?yaam=1vIdy4wqCG30nFo@X2{dUG{=Yn|EAY)Dh!35VI!4es z=#4$TJ|Kx2-1MrjX6U+Z^1$5Z?(OEx1#Kdm3{%L6|NKjbydlZ0Vzb&B=YtfNxKs}o z!jJ6cNVx{ULG0#rv^r;L-p|j~&a3L%6POp24AiID*f|mPso&9A_MF){{B32B@;KT29#4h3vjqd&Q{#> zLue@Vx~!Uk$vmM{zzXqO)KUm87IF;u(N=dj1kdw)P>1P0q&nL&>n{$Zb-a$uqC@vQHKg~emVn2EVHpF=ZS~pN)`Awj# zlWEpv5Q{*iQt=~r2$G>Bv(=Dhq#O|jm{tM=7@CZckg&k#^z29gOUv`Qj1!N+_hG}z zRJ_Lltjf|~wImtNpx{EE1|{4?onmzaEI&c*B>F2}=fe@`XGy})BPCDK?PZRK9L@m_ zoxLqD?%t?(qy7Op9S3TJm@e4)L&ndp^xHw9LvW^E=2}PB&WS9TC-5$^6|qshb+F(7 z^n+P@>3893bwnnjHWf^M0Yk16@i%XW9H1x5J=rh4U|!0bn{a z>~u(rIQEhf@V~7^tjWNa6xv7tRteP`*^@{Te+&@i+d%;e4gP^4fFb*TfOWm?e_h$Z zEv$}N4IOem<}`87j4HZ-97v)h<-mI{9~$Ps|AP>QXdDHYDh-u%>=ZU`|8IN6&BPzm zP}IpSB6~o_0(l$y8Knu3$-(RZVyUCHCQ`2!akv9YJZ3c2^>#YI=reZc4yQFG@t8rx zl7MPb4*1{&T!YX{GzP4d@&6i|x0?Nz&$^#tDeDGNGym$u5pcN)d^_m?pOEcl>Wf+c zuOtuNrvS%T0=^gM>A^qX#{vWBr*0p&RV?sZDAlqnBq@h*0Xcx!s8s{x)Mc2B2+xLW z0|YUE1AiDO2sxzvXY>JLhr{GA06xmd&38>e9C1lma|pT|bIjz+uO}$&p^hXC?$N|b=}p3X=fNu^G5`q&#NYWp z7NNCZbl)7S3eo$A9&D^Un`*=g{k7H3*CDGkS1V4vnm|kTra1xue;WWj`*I3R+dre( zOop5zaB>b{bpZEtx^>I-e?$pSq|1~2m-_ZZ=QvYqQ$Nj4)Kod-E z`^+IlI_@KJq~l1r4`iTL5q%5j`=7o4?V1mjZrx!a0VDc99aWbS^l8WFiRYyT3%vog zo3mz8y9(--+^Q}+%M*)|yUCE43;1Llg>LTQkffjAnO_%^%AarbNWFtsn=icWVBTsK z-0NlddCi`Q=jX4g%1vv+%+~`J8TJ4HHDiM|!PSRA1$F-)!m~sE?>TD6XPsr(8{ZdK z=i=r$Z~0K{ijU=Ze0&%KqIwV`$(&N!YDG&)qg{XU=I1lc8p{HH+KM03_F3nzyn>gU zmchx)D^^iU-h94rwm0w-&h61A+}N85RPrBZ!~L^Q_Mg{D%S6=a%icd;zBiw#!4!|Y1JTaWIjA%?1U-1o+Hz?lz;lyblwQ1 zC2F@PEAx2b$;8r|=X@f@3LD<40*MixJ78v4u@Q#Tfb;hmdK^b}F2zCXw+;l;I1m4UEkUFC z=1KRV*#zT*K&jDNc8agz7XxlyGWz5Lj}OdFSjH5v>}P(j`(*YM&TF=RS&5LepRKD_ zYT-3`S4W}0w?JSi^1O3e)z7^s20_houG6xw=RO8S%SgP9e{)mXH+5J`ef=tbH~O8c zx_QOAHeVM1DM&onJP0z9CJj2J?3J?`Zl9k#mN3irbKoqOd$+X0jQ&p=i;!W(!@19H z{lR*X$<;6Y2aHXfdlyw@L7cY6rk)c>e*#%hT2}aLY6{y9`{{*&MV+pKk8-KH!TL#z zr+JOEeM`@k7qs2HK1TD#Co2x|HT%OPedYW}auApF6nGGGC0pD?KKhnfYmiQFt+1$y zHTIg>J{!_kd`tU#VhO;S6U^6GKHNA{&#ZB)A~gJN?V>t}4dqFOqge5Me=*9?g9DeCZoV_`x>pgKB)!)bJEBut18BD| z>y}x2cfA`F7zx&Q+cOy|w)lKtO|oAv$!%*HWX!wp{;6R#J#SmTEOFQ)ZKhHDPv}K} zq&Asy{hwG2a5z}-#{rov(D{UoTlbyCAJN=40s`-9B~F^}K6sc$mz+BFv1Trra+g~c ztC3Na<2l}$W;d-f%b{kW#z#}i526UPd`6_~e05)nOP$`xt3J~o%^w-KE3SE;y`vP9 zFqBvxQmY&9ur1~k#>dGThXbUNfDYt3sWX6nON<2;++ko~>H|QtkoQp-neBA_Oe#|# zM|1h!_Y=vUimRZxFR-+o;$20z-G@CA|A#|%|D&b@;#*q`=vU~ZH znR{Wb0rej%=2O8H_34|QKJm=P zi;xbPlD|)t)UTz?RU%z#M48AIUaST;xA9TU?$~78yYDy2_NI%kpImaPNRLU@c&?E8 znlPrJ2(Lmg<8ALVS8UIfbOKih)gg{`91M-mMBw-vP_Mf%(!arkhRGe?`Hh zw`|cx3hONpQ7ZY&RB|kqMj&S@z^+wKW1sH}w-*o(6dwZvGj<>xXwlH+fQ4~->r+)7 zxPe&9F}4f8(p)(86VBXmHhV3=Q(bV-s-MuUK(BveRnKsfS#k9>;IdCbk56Lh5fBq# z{pc>?PD9he`nBKP;fsC^m*rYB7!K1Q?-UIx$$3}pn2r`Yj>`*LtCq{pE;wGVy5JkV zdkFP$aPpxunJm<;4v@{~a2=q7GMYENs%GwhFW5=xKZSA!o?6Fn21@yh!r4}x6RQ{- zMbRfd#wj?C+ODLxef3<-RdCgF%b|gMV&kWH8mfvm)&*$CJbZ;f>< zYd{Y+)Io&5g)Q`a;C9+jJwdA}lgopTGkytnA@HUxgweerprE@FLovN)BJ%FUqCrtq zBib)z4~?US3e}PMe3fmVdY!JRtZA$0fsRFssqrud*zpAf7xb1W=gM@S7>X7DU1-=e z&DT#h_?}gou7&QntAV~|b@JXnM=I?Ah2DuxQpr=Tp)>2;b95>9zb~BeR;aCKTAXkA z-K#vFywO^&R5U5KoXK)!8}lBhXkuJHq|^nIb*Ysiu>Ji-L&S~#bi?eQm`3W3Ju;U4f;kj9$MemczBDhUIw&l`+GHwl2=Hy zB;EDapA*jXn%z2}b?^=Bl^fa$NPGSgmij%nBNAsP_{TwiMX{;!$4lzaB-`EjE{;0- z(Im1Op3?h9B3DvSk$)|g_s%<*h%A>!lkezKZxd#`y7_PvOFM63rqrJK4c{ZZc&n%evJd=pzOds1H5ubtc%}CuySQ&xXtY0%M{MEML7nhur?W=14 z1d0(*7b4Ph+KzWr!YS}w!#UuN?Cv_oV!>>ze`v62dPVp`Yg+?hh-kXAa)33Uc(-!6 z&`dO%%N%>g@Fk<{DD)%@?kzC(VchPtmy(|^KEolTIJy>;F2iKIH?R|2av+N|N{C)Q|nP;4e&>)ZB46JBd#6GHFxe_c~ zN>>*~Jt(;C{SaoY&J-jZsyA8W$EJQRF)ZHH>My$(_@H98tm(`$x9i|1`!&r;%o3Oh zgp|PnxaiLwGrJ$WZd;^3mcgJOGW!7diNxV&1j@gep<28fl6TK6yd&cp> zB0AR2FV`w0eMp$Sm62rA09jf&24P!(mX$u#P$C-+UGs1A>HS2hz18!yLUFmko7%uR z)W}!G=P-phLAiLx7=9cL#w7CIs*HFJd$A7*}MdO9V zk(m~?!E6!gJBXSY&z<9EqW#-lY4+Bib20jmuyBO`tWJ`2|Azowp6VvnBLKlzsfa5; zgAEoMS@M(Hj<>6zwkMb6*5HHPu9KY|nDOLK$p*BEh~O+FnGE3))eP8P);Aq(vD^|Qr6ec#7- z+RqRzVU)gAof>^JD|R-Y3`IQvU9C_-nZB#_ONaS`EYcD~^Pk zQf%0h4kVi5@^wOR-uQq&P(v*Y_V$!*W}gmT6zt07QeeTn<6UEVveP@y8FxfMo8zno z_4|lkKOe_!E#p;0Ao`T7GZ*lr4KCL`{U*y~``PV)ty=lJx0Ln`SCC#P^&U)zzmybn ztUNPZBc5up9qIJM&1yHhcP*7{}dZk};;-=^Q@G07;LM}@^njOhB8ui8-dq>Xjhs*29#?cAB?i+mS zo~9m)KCv-IF085V&sJ#oiT?D~{*skdU=Mm6&!JO4-7|UZggNP9#P<5qar27CAMCC^-0?Q_VxKaz zk0D-Lt;4?~(){Z8W*`09Ge^Hv_We0N^f>^4IV>fSK^5%QPT{|fhP%F=^x2kQZJ*`- z0`I?VL&HwpIShCIn!{#1b31`VzndgIOt?6~0T>fZT6L|%F7X|&{IzGCW!EH^&aOs} zGu7}|<<8yvMt;}Gx{HH)r$ijd_nXG&HWHf=ob-Vp^q9fmeVdurzZo>^O-WBat{=Jc zN%Or{Drc#zwxI>Yks>{=&*S~A*1(}ss(2UPf9T=%oBWseQKS3;nfQl-$3w?qe5~Fq zn(EtEG(i)>J-7QW@yO1sY6|yWbQ3jM)Z;7Gy%836=kv9FCHL;-e4dLxngGLR4>F5C z7>GNQ_-JA|Ec!d1za4Fd_V1@B(_&L8ubQ6f$?=#4aW$aUHJI#cAyE$(s=G3D3ySSH z#ID~9+cLZ&+@J8R19zL}y3jQ)eP#bfSnN-4T*ELs>2A~rC7o(5?GXUHp z`|aEPIa7w{%Gsa2?_TC?-WOmL=`B6cTLXXPQ#NaPVs&46C2}b|Cq4M17|QNA z2o~O(d%Re=^1kv6XKtdU?yF>>BW-q-;YX6roiMr{>UDDIM(X7i)$9fplijOSJ`(Js z4EFRwLkAGsHpvzxIaSeS+k>x(mXHt_q`>M)J?`Fs4M?#`@sK-DowtyF)0x{{{M~7K z{0*HMOBq_3l|^kWoPjeAaY(K6g-4@RlK3&rl@m?onXLjU#eAaU%6QN}+)tfDVO%6^ z_-9np(R3%mR4NpX`rh2oi=MVQGP4=bV4sW?k5FD25Np2*+@J)zs` zEc8Orn?Mv+pw?AZR-fV=0$&pY(q$kp-aFH&I?O^t5Nl#u6!h%FO0=pjYMV&lfRk_} zx)5FV->w$fK_CdKIj|w!KL#W;dss03e|$N-H5=f3-ZND`4hyCn_yimN%U%G$#^;i7 zmTLCULL*%v05J9Dy2Jf3?*{Z#O7GV_g0PT}3(r@QSAfh*{`ycpHA{p7*G*!%Klm{VVWq2*>z48G3FR7nQtZviON(BMT5n~?2Sg{aR9Q#qX7cA1hj{;OrZ7KWm!}y8e z=9k|5i!tXWQ(CbE8_X-Z(CT#ZcnMV(8t0lui?*NA-)Y;Px^wioQ3vkA(P1roBpQgz zx4A3NPEJN=0NwXxqh6e%?7XYT1+nXX@kJqYCgsfBUTb9Us(u536Di6D;!yo^>Tuko z(jN(|IPx)zclCaxvabrwyhd@)!Oj6K1115lj8@wcdd$bb$CRc#VF@2ISvU|jsSc*& zd!?;?`7RXMWQZ@8#=p_N^x!tbWJ+{M`uU4e;blp)W}X^S@s~7ZF36NNBX0)~q!R9F zSL*<)8+G&k$2R~6z1Ta7?sEZ#CM7F-tF%A6JM9r__$N22!oY2oz2H=w1J!Nh%R{ zXt8R8zi?Z}YgdnYEN-(5XxlpA$F!g3J&RkExA;u0OtM66@riB>j1lVf8Ikuo224nN zyY{C-!oI1ADSQ{*dVE*)P8ab(vvQKds>4`uKq^JjYZQILf<>2GQmi0Qu|e2`>BvAO zi7^K`l}hy>ZG}7yBoV81q|ts(MWK_)JFZ$L zj^rh~SO@>uuB6oNM_E=Z};jP-S&As zq!~shZo#DC1emEF*$T4*}@o6>wF0FvcWTY-*HBHGEjw5M|;eVgx|9jtoU9T@!cPJhCkfORX?gPzzTI1v);$uB`# z4$2xS_lZr=wh3~ac1h?tkN9va>&JR^j&Ru}%~`qVQ8Z+h&Ms%?Bxu0+IO5spo59{% z!k0tIE_A-~&JP3+*6>0vTR};R+@K+jdA6ecVe2Q;@ zQiNyfG5ZFKGE&qs8+*s~tQ?-jaoN2?)-%j$IaTfOZ02?X;Ml!WkLGyg2PY>P0&7CP z=X3nIDXS0#MOFRBvO3o(E2NW~0Wa38ND2|-a7h$pMmLo@v2qSFy68|r!R}s{tZ@!0 zg9K4c?5*2@;IiN(jD=afT$`GrF;#quF|!`ow3jK|*i`RaPHfX{P?urLH=oqdnHj!$zNh<*i zj|X?okGJ%%orrD_q4sUW^2(I}AH(FKp7r-ZZxDI;E}gbMzR>=q|ckIkbxc zqEuJGkH}z_5PbH!83Q+YSik7Vxm+WM7;ii<=?Ra17y=X$3Ms|3bdT8U%n2!TzZooB z5gFV;HPu$C)e{e;pwIF3`T>Z7nQHNq6U*7-j%pTfRblS@eX#nc?ytD?_h0tGYSUhj z;$D}_uFBUKct_WGonO)Jx~Cp$h~ZK;#v$_#I(>{#zb-L1l65IOJr~Kd3!Rl4Iqtz{ zG(KGd>y-F1zrP5D$bbJ}@yd)X{WwAw)s8q)fZ#<+b<0#UzkH(c{Y;C|qgO=E2fdES z93bDeOxV1(dNgfxg}1J@Mk=rH?Z=PB@5^PPQ1fR610ZKC^;I=F29dh7&*eO;0@b}q zTog7@NibeeN%n`q)90s}ch`!DHoG$3x%&L5)>BI9 zDagJX9}dG8&2I#JSuC7^=4l2#4XG4DY7pYjEQe<-F{xN9?pv|U8eKYBi^xY*H90cX z%QqbGe`M`?l5qK^dD!{&Y8TNO!b9iR{QFk*G3CyOf-+T>KJmZ>Jj&ab*P<*&{0>P4 z^b}RcIpMcMxAcYGya6w)yJZ+V-8Z#lALt3oH8U z$g2*}z~F`?w#cCicctWN0x>cI$XtSDN@=pBYpE9pV!U30SVuSvx5Y3cS=*LSoYedN zIUWm|F)%|drWL+4L_FsZYy!V(^viO8n+hYIlGHmcA2_8y>~z-1MR-z*{7`k*C>YW| zv1zxu61X%@DLER8mRps@_ARH26w(pHwa1vwh)ncyR8x5fhAdwzxqYII zyssxFN`%Q2rS2lV+yH_*>VxQ1vCl!sIpI*0`dI~DZZY96Efk>6W}(5;lsV5t1XsxH zmw)bZ$!BZ)ldo|+W=N&A`qZ3n`f#hyTMNnw2a@mZ zQ3))4l34GfJY1YDJ$zp~0bEo~nI=_$&X?cLxNOYmNnby;wXyMejyPnK6DQAW79_m< zVSkeRQ8G2&{sqp-?c&YQ`V6bZE=3LCudqk;^m^9ssacmVN(0%EVTwE@)82bQS2+IG z0iWP1!k&s0;AmrLC%U(K>sBaq40Y3#a&puaN-9RGVs`$PC?WL(b~WI{ZE@rX4{&!Y zvdkcjbO2Qg*y{ng(XtQKXRCpJ+vwD zsqC$2pX+xD-jFa$0%MITW~%{J+y}`G{mRjq$kCJGUvQoRojqkMC+JN+;+5~>Jp1#T zRFF%*sFN5Isg8V-qR<_=@#7Ib~N!cTNb>Q^!(^0EWDycOs?nn<6H_8Jm~ zePky;M+lEiC(sf`b(OVCEQW8y9P@6m2uIRLCw`3RQL-i|V!e;-pTH0|>t-ta9KXa` zg@w5eUkl(AJtwXU=^3HJvDm&Vo^rK;zuKoBKiyi%7#Mn5n(S2Qet3Je?^ ze0dZrS?ss0;UgNG17^Yk^2bBB^cl1CS?orCGq`}A#5Qr0xN7|-jSB6SDHR$KTXMRV zDPA*pofykh=o?&v;h2Sqlhj|PjSb+u9M8R(=Ij?+dYCcg!d!j8NYCb)+mEcfMQ@zR zO7>=Nj7JG}bQs4F%?b$lzFTb7z!S#O!!%O~J5t#}v`iA=$a4AjW9v|j1HTz^F&*Dl z0&US_rnV&>mO|BohvDT;edFb2U*a~OIF%)CZ9%SZtU;GJAyhH+OJb1+ly)k1W2>p; zBJXaJ=p>?FaX(Uv;*`+tuM}~q3LO1qwlZoiMKy?+;i&KCp27+-uT+)mx zshYgx+-87@;dN47m`Wd?B!6vnR8MWh9q>rYdh!vt5Z^8pXZE?JbPHU!PaNNq1OXnp zkAm;87$xNRXo3lYRT7NakA;50!0P5J5`#ETS5jrX`EV{b@@ z{>U$OPejRX8*zzF|1B6o*IZj~lwA#8Dw85bO+ZKfhtP@i+0B!_nwd<^Nf+|ot zc*VOgw4qjTBW3> z>B`@Mp{nKc_kH%W8YcuVAvG#bcK)&)fgik+H!;Q5YsaU$VBRW`ef!d<2{y%qNB8G* zjq59eK`3?Z;07$Fr}E&5n0D%AvnB5ac!y)%n@MEOR@_%vG9sJ~WN~JsroR3v@#S-f z*q7s4jqqXq*!9FX5t7nCQhaRA zL-pF~z00N7E>D#*ro7NZXzz+OoqUx(tHwl<$(aGdP31&tT$X5l75cIBsd-^dfQ-E4 z(PTl<{~?(8=ykLp?jxD#ZuyL~pbdqh&e@}6x+cZb%<`B|f8FMmo4rMwToz5G#g@Y} z9pd<7s*bl*=Zvo#o49rIso3jRx=T;Bp07Rveeo>o4Z4LEWkm+a9 z{6=nJhoJSA6_2%#RNNG$ZN&E4Y*x-B|LnZ8B%bRDaNep_ZR+BMfH@hf;{m0#?ET+N zuAV7>_M5@D%CD`P>{*dIGCzDc;kxJAa@uu6@6l|=c_wGmga(*On+hB5dyf5<_5y!f z^3{i4Uo2m7Zt-Ok>2S(Oy^nlNR-qq%W3|i=7KR@UQqv##G!>aTDzCj1fMPxzk>!Yw zF2MT1MFomT`BN$@RVW@3Q?(z@?XuPK*S;$0m+OLsT!_49Q9nf+=uo6SX(j}1r+b5P zNJCd{vA*(LM6#zDFZ%PXXJ^Rx>$FHJgfvqJV+$VFNY_Xnw|kus@+j&?c}1QUH+}Jo zS`1&@My~b>5q6>%-~l)Ux8(-5_p?KG(_cv}m_y2Os%)rmmFqFCoJt|hncpg+yq4yl zk$d}}(1cQ+)X;Un@KFZsd4mTfx1fCl^;aL z*!$?KhA%hpVa+K$=Nz|Gd3lZU!-Lxh3x@tnx@zz5h2d%A{ON_Bz>4k!Vbb`Iy+ghC zzIlfcx*!<6UxmR*Em_=q-wFcYLDlc!kibLGVHf_uy!Fn+!R&!d>~_gA*iD??6KSZ| zfO`X%5`h0^F2OMg=aYv9$9=*H27$@!wPl4Re6?>JGuFMJbLPtaHS|KtCjRz$=Y``_ z%9kz|w7#bwq&N2;B9L0OdL(4MUh3cr`22bOi;VaZeT*uQ93({&M{+yk`xBR4h?P3> zZhn6DBZ~v)bVxR}lgESPRRW^v6}v{I$3|)f04GF;te4-+ZV4O?tkE&Uo~5^OTf|c} zNqqBXw6+jV_fcERZIB<889h0prETXUrsQ+0tMTvPb}X|6SayoESr>a+Y=T9I(B#C= zI|cyO)fJ&Zi8kphKpfG^MChf+hj9o@3r8wR==&sI&rp%&QZ@a}a5>AYe;cZV`q8s$ zrZaKDvEkgkf-3U&sLJ@BS4u*&PSpU@sbM6~s1Cwn5A;rCebqRFN(X0&le_?g{RVM* zpg2R-VR7h*jaqrFm<{8L+TLN@t1la;C<{Cpti zD>Z0w6Hrn#RjujMdd7s&SgPh8n%XUDoE4gy-!bOwD_cbd;XmS#BIM&3KP4Yh|H(u3IXWusD0YcK(K>!0H zWo%E_Rk9~Nl{kGwt;?{3KP9rgVoY+I`(N0+Cmv#~ zdUQtBYOEQe)c(Oy}NS`_<1G*SJ{mDLnXPfvRfxfT&DRt6@snxsQ?h_U6{_IJbOYAJ7+dy!QWS zpRp52_vvOqAEvk|o|+cr>?XRvkIZ@E(=IT$DR*rrJGgO#oU;hMR2drp4?@CKa#ZVM zoJDEV0?`q%9rq2M+a>3;p!8X14S}vKU+wsO$wY*M-f#yGr+Q%u^90mG^Xg!CO{fO* z_y;w{1Z=Gj$71E<=J*>kr5re$G`oKL>clEw>O{_U5o5cDY+R8b`FsIS3 zu^axx?eHjpMRbMxsTwKw<#0>?k0D3LNX;WQN0i*$jlLY@WG@S^xS6mdsZXdP_*?IE zn<0+cdg{)YnWQ?-AAHKA;SM55JdchjnD`hf|Mp(*_bH18!7%cnd|(6%vE4DR^!#8S zDesn2yoonA9QDl7ZW;GUoLYG)Bd#&CB>&c+Nz(H{bZ2PSDLJ&wsTXIbj=mn~!3Qzi zzs0~Ok}Cbq`LOr1S0h$j8{>syI73ZL@b0ymPC?JeNoIE5{cr^XEYgKl}tMy0oq-Yx(=iEmUO#{IG8)E6{rn#fr) zE2Rf}gGqSoM8F!qbbq{;b+m9HRMu6TKVvv^qXgN7>>|iQWsM5dir-;nxgIn#o{#V` zbZ--%W;z_q=K#OkkyDs(`U_ziKziI*Ny5dq^91jY4D&Bbw9c`%GR4a9B5t=7U|w3D zZgW03{hrH&s8-rI7qO_RX3@QolZ$ieDHbgg`TC}n)IE4%sabQ&jbWnVf=+3DaFdAP z>oA{Ku>uNtz{=T44xcd*KV7aqiatvDnjCHT8gghURa$bm0X4@T`z!3!P=p--d7JxQ zv@9~!m2vtoF1`&ZluSXLJ@x+7v8Uf3`ffec_nAF;MBB$J>yEgnTN-m?j*zNYXwChs z_Is~hHx3PB;*;!3?1Pp00}W?|n>Cwt)(w$e6)6(K57rICws6zwQ9j)EUMwt$@oLqn zwMTsn!@NG@AG<36&^dhyPiy@M#B~^KGp`r=t*$Bnonixgz0YA3@Ba>ZS_Q`Q5^CE@ z+p*sr8GrGGpaGo;!Y59E)#9Od;BN9Wi{vQn3pdDOdx6`^7?T*v&&!(zJr$aj?%E11 zOv4MtQ`<45yy?^pnZT&FwIPAgkrxH3{1fU$#UpmEUrMY!TN(xxt%Y-Z9`^TZ9xi%$ z>CKl0Cf+-vqa2I@I;A0vyq);?yV>Wbx6bX%eO(7$3X6p#?47q-D>=hzB2A296q;b} z>uTVQvQ-NdX!9Xiwo;dMPkByj8MD5Cuugi(E*bX^d~N1x@muJsbJde@c{T3?4EQ+tmOOjrhdvgCsnngdmyVZRZ)O5SIk<; zV<2Yua~+y53(_ewY&%_ojq2Wg?r4Z`c*F+`Ldao2pt3tcRuK)EG8z3crN?G#KfxU{@Xc!b zNXtd#bwsSIU)p=H;X4WUsgYfb+J9MxKiraSReIBl;<0LFV77AF?ERqU$i;|IB?0`F zx^LTkfDx}D-Cw?lSI7>`Ub>(xb649nYU(YqaTQhnn}O-!6~n_EzWZc}(Ct$dJY!pn z8>FqV4-57%o?=lKN|W@Dp?%PXrM__Ah>oM``4o*RL# zqjR=XAEZ@==UfwdarK4XRn9Y{I{*=|T;K{Vw(=AOL=A5%D7KE_4e$6_o6N_3O}V#Y z;F7!EMSasXlDSq$ZAUD(;g(6kmo~RjOXjG4j{IT+?tRZ0MnNdDRj{%Vn2|a`XIA+t zH!%wLTQU;Su5r6571Ci=6^x=Cr7q73O*vFQ^QY;BnLm5tE&Lp9g9yeREtJZhjg-Dg z7>T;a`$9?i%gUVPn1`dI7h|8r8E+siaC{};JaglchP0WL^rGIm;^J&c?|5(92DuyC z0VcFJuoDaYbvwDufSzG+$=f&3@lDlh^mHxZcxwg%VKPQ;rW>%Gfh#b~ zIE0Z`;y3dGoc7IiB<<$up|%h;6(X*=4=!YuE@d<}k4|_!bu*0%DDb;oJ5wuv1XWkd zdC-4%pzH+%;j>+d_?0pGGm0y<(DThRL+g^pR>Zag!h)k}PX7$!Ta~WINQ%dmo)pn?;rp{_> zyx-rTZ>U5kn68iTB2SPs>sUH7DM4IQsFG(!9~mipz?5s{E1$^GardxjlQC)g0{h)Z z8wX9z2Y+rSjcneas68=R%CX>kB^Y8ek6)0xvZaO7-di}Vk}NGBF!w0kOpc@ z!?=?|7}bS}JTaFa9vaoua8vFr-)vA|PyISC>b!yDSggRvCG3x%${&3A@kWiOWejzv z?Yi5Ue-Z{an+&4=>PsMV z-Al|VhuRHwM7ZAN9I_mJPZ%@!&A_1w3=Dv31}Kzy&94)*DeED*+pB9M^a9lD;XeRC@S{2fM*d%|B5w|3F#(g*OSd z^uT-L|KFw3{mku7==&D-u4kN$lLo%_n-`VrQ9AUtp19y~&y??6k7y(C&F`Xh2R{HM z%G>h{H_i3L*x$*A`;4{n z%}xEf=q=Auf_;a5Sg~|GbysNlSzzznH0-$NSLjw(!8g=#uRM?_Y@{TJ1D_~jS!I+= z6dgK=df*qaMfZ+Zv-53T*5}wkV*(NDdqrf)QO|;m;PTVa+-Z6XOz+y!b>D#k1dD#N z{akDXL;Whlq67Q`#B@>EAc{J0_EV$pynRk!4yKkucIQpuJ?6!9R50~stmO9AHuT-K zA7H22bn z1WgOy*-SVrT^|V?tBo+g$%Gy0snbeH!=bW;1=FA8|kWFnhM04|*yD z-#J8JCd|~KM+`fHDA(arje9BJQF?h~dq-#I21x#Cj-%vN;8112n}$TC zf!BdU-#W{p7h%1w0}wqU%7MJ=Tm#)++v}iz7Z~>!vD^OlQ=O>q|5d%c!lM6q1MGYg zdSk*hdP6t^)tnEC(<=Me{AYUik^y z33=V5=!|-#bx_UQSic_6Z~eYg)4heQ>vmpZt}@@C>ln`U5?Bg8XsDY0_@(L2?^*d+ zp|N^&wWExsmDgMP7Fup`<-y2NcqIO$a!cOgJ)U2mGR9GYuH9l=?AeZK7?!mu`jl{- zGGSh%H=S%~-dwqE+x&*C+kU%VR zZ(=FhDhFwxo8Q1etZpr63(LqA1N>VuH-Ao-iY>o`ftKIG`0Gk$rQMf*hi_VVzSBe8VU&Kg%!T6^(5(06%F_m`+ zgLpu_KoA}FANpieSrya6K)niUenEDasek2{oYJBFP~#;G$}Yi4F#u=*_nYAyXyJdR z=aU%e=wtu@+YY)63A)S{boChC{(lwlcL$(9c|*48@WpvR{tQ5VHvT&}3S`C-Y%dS% zgT5?-uL)BO|I~jOLk*#`_p;nSwNbmP1gI%K)eOdGv+|F)-PlDC)*{CHKdSUkTE1o* z4dRSK7I)x3y<6ktw;Vc9T=i$WyWd%Hf#txo7(FIJ;-o_Xoj81mM1I!J$#qA)o*noG z$HJtdr9}XKiO(I+6pYhG4mP~a&6PbI!o`M}G8y26e7oJc3aN1~^?DKw${)K0DE@2= zvVy|UIo7y{2k*Obeu|BC4jJ72!KDtL=gT391ME&-5zf5@MYS@A+ZTz&RN9Fkz|! znC%{(2~>vvU4hEu|5Qfp=V{ObLaUGYKVz({(uCh`NbXf|dE{Sjy^e`xPqYeDESU}ox&T= zNcZGrEC<+h3k=q#p;dNrVBi^n>?xIy9aJ=Wl^wSkLV?q-k5JXUp{s{M)aTy}#}a^E z4J+2tCl7etyh4r})cfTt3Vd!y7pz)fW?(x`LU)oAelxrR9deEilx(kb640%0ZJs3T zzKnh}GAIjHkN?cXEin3NR!h7$_v}Pa(~HU_kK*(Z_NmDYlpZIyM#5 z1WIa$GST2#1WG7;{DkBTgc4XJ|MCXZktJUMa(Wm9p2|VCuD-BXlI8r1h{obzNqaz0R-J2tAep zgZTU*Pw-|aMMa8!5>N_VC$Mx0G*t^Uy!GuZ5%?CH@(OF6uAeUHNyNC8;t-)vJGJ2Sh#=OiyB=pFQOOR%;WrrnueoIPekcMgK$b z?LXD7y^j35b|UDyv!EaR!E+edy)I6%0@Ld=H_#sG?QT#E_CGtI;!g+QDS>D*2|j*& zny@|<6X+IQ18u=bpqKBC>}CJWFuBJQhM0a~(8GU~S9k8e%D_zxqTLemKwtdLMt_*? zzqGA)V?IDf=F0=_k@{8yEMCCn#6=>ix8MBHm)cg*~yi|*b}S}pGd+iVns12LmN_c zF3ZAVmc-*ca^{Q&0LYri0>bA*i?8wC!2kk6=28FmLEvWC`14btH$zPsE&%ngi@-T> zckRl8R)wGKAtms=Zc~)%g?(Lyj||?ZSD6BrOqL60_|soMpBIs5a2mXcyex zQzC~M1BPEeF92CfZ1`gs3jWjY{_phJ7KO~jAnh1(rr_-_Jqj5A;P-36b*$(b9c3%w zDX_MwyLxlwb`rPwg%UBFX!3D$1T22S7$KL-3i+A)Zp z)9-I8wd}9}ufj2QU~0ghgT$n--C<%Hug~q^jyTM6hlkK0sz=S6jKgSqL5Fad<@P0^ zLCb%ClTK&%)$)QCM!L>v^2eaqQGad=A`^WKBm6R{BDHgBSrQYQIZo1yG6Zo20MUdc zaeFyhj(a?+I|KE(q})D`#=B$vswc)LLRJtenFjua;X^p=Uj=nsqgKWsD`N;GZUu50 zC|Wf&uuApddDSc`+A{+F?arsBQds*27sg&{NpIpyx-)01)n2O%92X^2fnt$sj%W%X zKC{odAKuHN;g?m*A5)RP46`X2^ff5%PjXShFK8>y5_0&vqgxs`cMX>|GxkH&KkhhA z#})b!Tcn)}B}VMc`Absg`h!f!4}S6hPbAO^S6aVikHz=RFsFXG&Jy|(FWM7hCo#6f zIrtD0_lMpfQ^n_RnEs}ZBXJ%7{?6CL3*vYdkOvI>Dm!m-^HJQgkxIOmm4b|wKpH&k zDa{tDjq11fo@Ov$@Xd~48tXrIb*At*UO3z8u9%ECk9QiekaH8)4;x#$4qX1@L90}= zd^HDEGY5SQC;H>~yR7=N2f(k!?>2G#T_t-TzBYrX?hrtMjz2$Rp6tHv4~ZzS3hS8Y z5A!ux!n$mx91qp4>{|3Sh&n2zC(AQ`G<){a1=)xFGV)+;^HsTHlcAl|IKC#KaK0?B z@5kLSudbe0>#38Pn>Yv%%)!zOF z$*#@Y4eYOsaYSgF%W~Q)27ny@^Zw1F4{E4vc>K0V>SWIGM9 zflOUD^UIRMXeS(soKTPvxip#4bK&)$LM}cmNguua4Vsrh&0ZD&r5r?P$2>pE#z{^Y zTLi}s$x+QhJGqFOG@L?uYS3cVZ-$GzuQnmty4j%#d|AMs%69tdzrM|p=+06ek3JV2 z1+mfJHsJ5Z*>@G(E@RThuBE6j>VcP6*tys#dR$$!t9+%KJ*Ux4POCL|nf4QE6#VFX zHyLNYV>p&sYw&-&PwiI~`DMS?B0v(Zf}>ptS5-ozBWSi~03g6n`OhJa<~&u#u>&_o z*q_QfeQd_;lDl{Lp1AIp;;OzhNL<%M{PsWtwh&T{52g#0k_aKP(QF&(L#t`!YeB=w#8%!X8D}D1rX2D3b){s2OYx?vX?ABh+*- zsGadabU{jIdiBv<((I;&vkEQVbExuUF>n$Z=F29Fju9Fl`>1#GqgJX<=R9Mpyxh$G z)ynlj$MxIP^Pk`c>;0bT>kbuAXB6l3)|mxV%eu`H-rWz%wLW`KDoU#gk1bf~$Bee% z#xtp0j=8701qBbtb$*IEjUJH-u42Q%{vEz( zx|!grl9imudQ8bEo_dw?brc`eBbrI6p_rHzU;DI{^wIAZaM|F?78oNEp)W@`;-}#U z?XgdMExyI3ygea5!+GM<%yLq!d}UqZ#)x9oM2>1IgCkr%bIu%!L7k)Mk5xSHE;sXe z^3i$xc=-orzT;-QHKnb=Se{B=|Wmg`Sd<7rlb##nKA?}Cgo4Z_TMM(0A&Q>U`vFzR{_b(PK4|t*E zXIC;{_^=u1Oy6Anp9nZNqnA79qWt=a$4Qr9Hz{BjDIfzZ!)OdfJQi_vkZmqtND7X_ zv-?Z>=@%!^+g#lnFo+ag>_zAWe6+$bV097*Y)}~fpRV^r_5y<}Pc=QIH;Igh^OVlb z90VgJ&>L)7YtrrBjqxn0dr^}y`=!HddMXQAI+!PWYvBc{u1%}AYbEZS5{D}gsd>On zjTLvT(C%8fGfv4C?}2^btzUP7g1c7SBb>L(XfgTDYo)L7)$T8@7HNyaoS91@X5JHw zGyMv4{i%b>y)Dxx^Z*J&ELm~M<0DQckUu>syTr+w8CQA+t#mKsjvv{T-o!`^cdv;_ z$3Ki}vtF)=BwZGnOZ;6}Ptt}k;2Wh>}g%v4R0QpY*Kap;a)PF?` zVW=W!eFgxS%K|I6l44b{R6q5N+{I!FX#?@TLNc5i4ba}A711Eff}9d{o;R9eG)q`g z1EwfHoKw)Vb@-MTK3%l+T{@fOb#w|^a|;}z^EPOQ@7xE7Nmn~!$hlTqV*xp^cS@ae zjadiT4GeF9$};@xGD`Fw8RzysC*bOyLHoopKWyDn!soy2(7woe;6Z8m@2Lp%!izwm8q=0L!AMiAi}9{$S1vt2Lveb*=kJ^&vg z=T3}eS&iyS-*0+ofukRCw-gfuv2g336+~nW(BJhs8W-MX3h7Jhd#d; zXMdO5T$N~}fR{sunwq18&}@bHm0SLVXUpHp9O;Ggg6!6}G};asC)!}N*MmvHfeCf` zs9oJHu3N^yNto%(M4FJ^`V=gH?^P~|OpET-NeZiFIOfyo29e3|bk)jNd3!{4;ozj7 z*yB@$j||@);FwkFX49h;EQm-(LE+BoEyI)r({$Li6+;M)(V#Ub^vb2HeEXQ#bGoJ* ztR5^*al3V`WA-Djz~sJliC2E#)a;~|hXe6O4TDga;nJZIwywI7AasXsoxotqaN0x6qRIkAItD zo^()0i+Vu_n1XTa|6?Gr7k~qzeL?lY{nFjORV?Q$>${WI@W;=v2^b`G6z zESLd4LVmaX_llZ+v|vYS_&E>tuF1O~k#HQJPd9e_)8Z<#&e!cLD&)*}&;$aj7QDzN zqI&y=92Bzyz++EwL`QUQ$B{ZsI*h>5IZ@bu(CR@zl0yEIbp(nMO{AY9wY-7l_-1N+ zsX8slyK&|zmn!XIN<~|#Lqq%lm;kAJIZkE7CUoqI_2lS&$U}%d@QKL?r?VlsNHTB; z@BO|&qr%T)gZ`SFYqcx~lW$1Mu>x<=rDpRD1{36}x zCz8SKBa{mi4q3I#?ODmUWQ%9_Y-||V5|mbZVck0mnIJ;Rl@WXO$cu^lr6WYwSsF%; zQAP2nK`6`O)21&gX=wZH5rK>N_YaRye=;Z%pY+Z-g@5j+1ZZ)`;+!IGRk>(hGb-Va zO&6e8Kkd8=X+i|;+>1v$@Yu#5xM->;MWp%^qH;{;Hhp{!<_B4^^*TefsZ}J81aG6w z!VauC+}f-Y{1R*v4Ym)won$Tn$MG`7Jli{KR^AvW5%40h&}Dvbl*k&>982({jTr=7)O#Q zsD-^UdAl8U)!Fm23GWSRVO}V23VYre(slwqG4(JA zH8-?X!QR_`55-DL%B8|jzj~M#l4G*3^@E)I2ZER4!jif;zNwO{xNtHfMFy1WPRwmFcrz<6zk6=?Xv3Z8rVl(%1trR&n7f7X9|wEZR~>{2VA z!?I*RJH=W@F;_(~orUENQMvEi7rKPcbmi@KSy3Qze1bp5ENpbaalH|UQ3TAcvLVGb z_50ncEP*H^NZ0*I(S1#)W4SCKr)hAeVg|i630@k!Y1&S;`&4Sj;p8veKR00+FxOv( z?)R}Z8gtwUHi*>&K#lFH4&Q-y6dM!$q~xzHZPHZ1^Y53+T9}1Ahi}xDEMQD^Ed^8E z;CcAk1Vo7KZw5~4Q=(yyGheaviPx|CZx~H!9NxNvX7j<;qx)KB>am>V2Umq_;)6G( zy=_Of=f8#=7_kd_X#Qf9twa@Lx{mmTC-xh?L;_*Zk=8nQzi6|3uaT247)Av1Fz?t1 zPXo5H7YN))!?tp{qMlQib9yo|Pl%6Q(_0EWz5V>mectuZ1oVYek0da#FdvTWH=UO7$ma9hy-kV@OkU2} z?@V-DD0lDtxPj-H_u%uKuIQ@Q#!8mAzN0s1BE2ag*%U9+52>V=Q4iObdMDSBzqTY> zz6o07o%a@2Rr)`)y?0zw-L@_af`SS}1O%i+ML|TGbc94iKtMp6bfPpt1Ox;^OH>4u z7Llfa1O)`7gep=)kM!Pq?~+gx67t@KuX~?;&-tBw?)~oX`)jQvbIm!|nq#hv@{DH~ zLC+%2tU!-HcL$dD&4FgIz=l3I|6J!}+j-BM-zO?R;1%*vBL|C65al)@GZ>>QmMM#{ zhEKei=qjT*7)q!1_;sYj;1f*CDxLuaP48%rZ+w*MTZ193^ZZQ1O#MXm4Ybz!zsC5; zqu5psv4)z-{@y6xa%@7&pXRb&5) zhgjgj5HK_}Rg4XGEy0BLmaaWqz2+?p9{1@&`jG&|c_C(E?R-L=l_tbWZqajPG2{m? zhTV+gjc#37=Dy}*}imbH8Sy2||fR9|X3+AEKrqqv{50m2SeUg6vu-!KiGL0=o1i0&@hk1@s%Gre zoxi;r_X0)8H_GtBegcPV2T&knS!9jGVwX>)D5C_)sAxJ-{1Zh z>84i}X{0K10x^(d%R;ai@IJwL45S4l1l~|jp)H@NYeg>iXNV?b&pqzAE}h>F3N54n zTIOr0E?F$?``OE+fUHi4=lIa+Q~;=t3iq)!j_FJgj(LII`gvf|17@}qe<}Tb-1RJZ z$J6>k6c+yjBge~|Nqvja#S(0~+TzdMZ|F^mk3_4lC9=fKI@{Xj)<1svqBYcRN7*Q- z-=sZ-t6RE@g<@7!(0hMuEc>3Y1CnH?M>y-3crZ|iRpta#n1_W>g0GwE0nlsqm(2(F z_J|pV2i51pHJ%45sw1Xb_c1gC_OcprLg^4-rV2l@FBV2&tLb*R1nB*Su)%ghzV(Ed zA&xCfV`SiSEWc#0Z`Ex%jLwJ}?z&`cE^pwxf0cf?5q`4w;2cDV0_|0zOU1seI+vGe zWgf?z;Oj$*0K6`uTrXeXO8ur@DzSYfK4{j=J$cN_K;^pc61nkUh}Acfh@CaAuFiaW zeMqa%B8Sw|R_R3lES;R^#|YumsVfp{(W- zVe0LAM@v*=lAFRY6ng%O?@s}G@9Zk)nF+QT1orb3QTIeCXNa4klt4?R&5Nq?r-5_5 z6`0@@%M=B|Q%4eR1iEt~cN5jCv4>`6s}o!T6Bo=8>#RlvJ8>sX+>Ca}UH*NpiDaEu z8_nl$!4G(iOE}_Yrl;_zQ7M*}g`~kBb22G{{DcFD@fCyD_WgdZK)ijc5}v*3`6k1= z*9Rj2k$U%U_0eT8BX&M>8EJ;yF*I3^%cS^g>|mOwUcG{hsn@p4i}^Nf zn2$hZ)#ZhSAA14e0a#DG5CFWx`8^SC*0_~i99XjtSQ}FZ(b(w}Y|#{LmAHuQAQiBV zP($NJ4J}PH&nC|h181OgL<0~#(Yw)N<=o7`MX}yz>z0&GZGO#7m{bdy9?{+l`vkCh z4tg{dl?{d62z)(!D6+vzBh2S#^X}s|@(qx_4SNLItahB@w$O^PKe)3qgeuwjSeH$GCP3%B&-w|0SXf?F7t7Qz+aRBE9I zUJ<0qQ-6&tzK)0!`tS*a4_m1@Pm#p?)Wev@;2L%31lx2w@LMN&_C>5?c z_n5F#9D=_rSe(msm>e-%^)51-x_u=?Kg4jdMz`oN6#G~i+Nckt$u>kK5TtIDjk*3j z9s+8$AL|>fsiQF9xIBf;~&(^Pe+gZjqHL%8+X31sCw%g~Q|>D4zzvVgr!U z<=@f14(L`Du4bpev8^Tm!vY4gmA7@!Q{eSAeXw3hV-{5l4uNt@t9J(kW_^3mC+tX);Q@9`s`8iUo(g)XhV!Taj1w`tal zk_z})2_`^+X-z_$H+)-z>{g*C%|Jvhg=g-oso=}@oQaxvk6+FhI>(Ji*T;OM#`PfH zA#}$~0)XvMO-U69(ht@T5q+neo$2xd2;RLx$Rdw9o^>u9K{~E;Z|#!;YuAF-R$xkS zx><(=vaVC2GH$pA$Ffp0Wz&d_D}58bAAJA&9RFrQrYg*GRna9ryh~mY1GqzKaTz5RcBs}+WMuIsWTvoQ6B<)z?d)BTM2%{z%Tf>QWG{; zeH_W*UX3mJ=7&D{0bm5W-RGOp^+ZB*2NUP?T>kp&Bg#}K_f2&myVlg>WLF+QmHIt_ zf5)R>9^mTrTvH#F?P+a@RY*gdTY}9c0v#6~{S<;!>38LcDKFRUrp1L`NIuxsfRy~$ zPao3|VY$^+{m&j201j4#-82`VGO11>q&$BKu zWA7h<9T*&pgqNpzUyhp$3S6wQF4??QMIOpbSdw|>Q7y_{BIF_#u!vxz7|Ko^0d9zI zYU^MHYTZCUBPX2*#rw6*=;Z!P2sv1tezg@Rl6+3!RlA~$za&i|_hO8^RilSU=r+Ol03Ox|;7^FJ#vp3T<76M2ybt@w74)OjJmbOik$c&0IRP32 zptpj3`+*7jNC#FoE`-2SS@^1almE;$PBD1)DS6VHxoUP#${k^U$m4~DZGll%ReH%= z@dcP)eZPPt085rQ{HA)Jl21O7Do^mqe?uQ0vqfShsV2`wuZwiUn`fGZbyXj3TL)gR zFJb?Zez?)Jag*P71_)mx`0|^iFd(}AaXV^@$ zGFXIpldV6Qp0Dk)I($q+H#WH^O0nmAImztW#V(9AuzV;#osx1>kC4FSr9ohcASE6J z3v7uByBWA@u79pqo){?aUq30Y9Ldl-KolT5f5hZIu>6i=fHVLiqXPVZwibRC=!mQS zhhzXB{vljFXg}GW?@-IHU#Zxo!Kx2Q?oEc z$#|mm)i3So+|qVEYBweN? zR9gas@HN}@qZ7@==du?M3oyw_sdDS|;sjn>&+)2=HFiIq1=g zW=s7Q=)@A}xHqJ&k3V58wn)yLVvHz2LL=lqz+gf*~3N|3wp9 zCG3==i_wz%p1HlBdSoLXaW(%Z&FSyzYiGhxyo*2;HUXNxLX@8uJ1r}N_q4k%f9%0k z+R7tV%NOTO`oiurZfdKE&~*P$NONkI()|)n^V;EEmh`IdFg=bdHKMoY7HjOpekW4P zDzm&R4-!V>(5cyFZhZd+5T5%Fukt^<%SXqEyWDg#Y$+hW=;)HDdilMNJ&IV)lW@Vo}!C)-M*hXj%g zc$HcFfKlZz2E3^8!j(VP)f`ZD|BSE*w;<1LJ%RS0hwYpR`g6-A|4%J0{eEmEt{ngN zsg*m9E6Zb$f2PR)=lLG00MIBEMre^OQ)K_Pab{eGU zX`axB$ZK*e(?i(JzaNU*-v#sAEx*^1x%_BKoJeJko)_Ph36ANR$ZX}q>{D|ilS1JyLn%}M7P$w*jAD} zocS$^e|LO%`|rCg9NGrVY>f-x))#FNo@h%G;BK({q4WK2e;<%pMu51T{=GW1Q|pKi zX+Hf_j!iP<_ww@meSrRNasbjj65Bs5{yg1`KjI|*M=GEFj}o`=?^>`P$>hIn@mp#a z(w^=7kLx`1-!C(;fYUtjk!}Bdi{F9(v>5y!_J-*HxO+r-g8zrzV=f2M`u}zJ{Qc4? zapivvtni=LPAWE-a3l^8`b<7VK}eA!_B%iY2eKs@eeXOzu0fwXR22%yJmI0Dgs8PmWGxWN^XL#AunpD$ao1x4YU7O}QR_0bqx z@MNT$goU-jMHB&~>o;32iGqX z^#MjKwypOG?f*DKt(P4EQdtq$!(-Y6sG`!qj@!?kMGSBiR*ljX4BqYmdfkSwBfIVZ z^CC-;|8H80{)T}5JsXN%=kIw)`{pc9MFXBUDF6n&qt~jXcXYA~oIs1g03=oI03hf+ zDc(p~**59H3fvp7EOUVZ?J@souhjJ#s0{Rvn-%AB#*khgJsOydM%ydSz7sL+)+czt zs<5=1RCfONnG09MKjM?!7X^_M@6mgD`;AqWd7SpYuLx57)f$59?ziakR^J3*h|4nx zGq-@0p0^~;TS+ren4~;lsAxfp{I;3l)n@)vMhUZs=e}7A*GBl86E9!GUbO+~#SX2y zy`~7@$xTSd80|6f=rSKr^ZHyie_Sqv8!jWor8YN$ZLX?n%?E=XTRT~9B}DDaK{UI4 zH0FmsWO)BP*=5ZP?c{xbQfPQ+jf-eI-7UKg1Zirq&4~zZq7*rtBu5;I-5zH`E*y|s z6HrFh{oJIRi-J-i6Kf@XRRg#SOUur?fi>sh($CevLC8qD8FUbcQVct)_!b64zRLj*uU=qHo6|8`) zKniFiVN=Em@(Y~q!F6*ny zj67N@pnz-%-se_0Dh(M4g4ANX9^Ap)#DHMF%I{`j9Aj-FC2GywAD!ti-q&Wd| z$%WpgjF{^UeH<4QvIJae!RE2<)`y#gq%5G&6yV+K`=^dddy+0j`yS%Nrq&~R76xhB zs~7M$4f<&1Yty+-2TLc>lGuY|y`(1@e=aK;fUqTf54BVJKeA8K+4Ys3qPYQ>ZV^5i z(=oSBM{8@o)V>A48*Uxv-cXYxezTzUkP5qTQlK}nqb#O3!h^fg_yVsfiw;fDUA-sw z@U)w^Sbk=7I+Y7xv@FAJiL$?Th#Bs?byML>%*(sFjiWcbgKr`tEK z2{8bE*=!&J)o`Y|`5Z)x__FKmV+LpgpvZ;I?tu)g${J~)Gk<(Hr)Gj>b>gI(C-qmALG{D0AW;$a{GrfH1E&^JKQ1GzT*%cW^+1IUlz|MgPay>(g8 zmg7;6KzER86VeBNZypBhl6oCg=g83gH$#HwdkT;->OiwVKg_nof9V)TR`tZq3QcuiKZ!DA`exc8_b!?kO#;$Q#(Ua6m z&+r+VcddZoL~O!+PF{m}*=p*==3I=!#Ryx4*%+JX%H%+&6C6R3BsHaMaFz7~6lSox z{4M;g50|lqCG~j?z%LV{%cObPC!-E0O|3RR_{rhq!?S=wcA~`BNWF{izMq)dG|Khz zH){#XHvHjh%e@3P)Uw3^G+~ib5?xxij%8l}*xX{>OAmfpkE)aaz9x+J!e2DWy^ni8 zbwKlns>?$+(&heT1^z6a#4uo^C<4#i>FVz_2`#f(|MMW-)pfwuIh1zmi4fr7|6a^q z{i7#>+Ze6{miFiw>HlMKn|=$yK4nGNGwh$s_Pb3Fuq6MvpMMAixa`r16vmk9!2i!SfA<0`z15$Ee*b$i!5a(XFwsEZ zMiaYTs$OqL^wSI^>AGD4;#w9_-`3O=lslXr#PybEkoEZhDyt03jTz|9Q!i3?A$az( z?ROnSIJFdWluH5M>O-v(q*36zezvP&sD&zR*NST!9cgbeQVfMc#9fo#> z%(q={aC+kC_WQSttrhmu#5e8hR>+{(y>zvo-pbsZ_Cxj=Y<+m?|X?@l}MdEnE& z2w4gQy!Lw-QQ$_EgG6;ylqtHge_c|4PbT+C+mDRcnPk`x)DNt!1gnyM#P*)`$u7zc zChg7rjRM;#W#=XE@X#+}($xAC*`Nj`6n_j$PuORDAdR2w)Nw_gAy{3--E3^W*1EQ( zDjNjUOU-a3)U9bJGq?I$V+07sotRM2FK(T(K8 znS0kWF)F%d!H-Km>Zm+y|%Ajdq+UOmfqxE(aBhKuDPVre0RC7l6Bm`;?+3uwCQ14 zjVRHxPLBYF5pTFCN#~VqJT`w@(Ke5ocoV)g&k|P+-tZ^9pSl;+=!dO~dHlIu-L<)x zDM`hpd}~m7LRaxYCWZYR*Hf%RwM{Sk$y3#-G~R#FXopm9PIo3b2k5g(LNhR;)^jtw*kiJ3>6X-`J6Mr4Dfhx_xRLgmxHarz8a1c1Ce zFT6c*16THB={c5n-!gIwYCZcx!&c2<5@s=SYe?=reYNbQvxb83D~Wk#i)z5V#F5xk+{QtRo(8WlHBv~Yp% z=(CCHC%yDL5cuI|tfSlc0HzmD9!xS&Cwo<|`eVwj)J!z72PAQ$+KCjADIg)$ zwaXkA?;4xz)y#!bS%C>7MpLZ1>Uly{D?QbKE$lLju_e0A9?~_SLC^2*<}`hGI;WHR z$}RZ-6x8PlRwv@W+r16FF5=tM_eQ-PA;u`Jh>Y4d@KauW;NLNe(SPV ze1Vlk)ey;=Y#rRpa4cETL?9hL1n9e!@k5&B7C|TEY@v;yti7C3T-bAF#?%4V`0%zPmg0xsAKD>kN6W41V2P9x`@GFy3e!oB%gBK=)m z;n*#yd)Zgvzv=e6X^-I2|2;&S^LwS<8}ODCkS#|Gq&*#XFQpha1LZZOa#jP**;34y z$J9r?IJO*TRK0t?e^R^2((wCu?)2{;*iEm?x$rpk>pv{`T@y&{)&Iwzli=xqA2$4W z$TZ8%l(?6(P!31_GewH%Fjt+(tR=X5%n!aZZ2e(V7s}d(cXOd@`bZa)eYi_@8Gt~TJ zx02heR3=Q^l-j2B;V1KcG^3KlrZoqdQ}vXi^%XCbswyt|mF+e&=y$tw8`*GK^@y__ zK0glTTAKm~!I$dwB%YfG#Bb)Ocq`6mT9LqZL|9V_A0a+DvFr7w&O*eeE0R_I1$W8$ zw5yD{Zkz%4@eB=ZZv+Tm^A2OK{0fL(&=foT&^2xt;mQ~2tXdm>o~WV2nq_>7NOw4w zIE%PSxrFy=;(kt|=ySarPLQN@La5`1gRoy=q+|&A^zPF6XhatbCU8|<^m~_KpWC`u z2ZT>s#|_dM5StL!*@vol<`-c+PDm+@OkI&hfP3)cvb!&mTR{-V*m{s6l7Z-kF#(b8 zc|0uCOUgG}QlM3$1AJ#{pqu5zKF0A{>U_S`CJaP;H8}|$Mc#dXwcb-s?_if>pT}cf zf%F5DHEa1L4(fnk9ny?@leuXcaUPyN+Fp5o`|e#@jV0Jc1#R0D#ha3Vbj1OQSq0L9 zJ?h6r+1Jmpxd@JW{gyK^;Irv@FEc0<)3kq8N7l9MAX2lGUpPruR-s z09C2#9{sNS8Giirm?j{#N7AbOQX4p)e0kLCQ7?iDO^RV>uY69Yxz>?ML8$G1Tgosi z0$#YoHKk+m09U{208cM5I*oiEfKHz3wOvOa$cSv`OSV8hV0!fa1Dcc#`=q~vSx>~) zW-Oz2^lCw*b8SOASNNQ~`?7My5EKqRO@02@J1lOE{NnhjU|Y>9RX-Qj?NoGlvZ|MaJFe3A#!V zy|H$pL4EA&k_J5Q9Fv^y*z(?USRdhc^3V|*XVUE8ktG9;mq3q`BZahenUAGAa&JNF zok;Wqt&K_!-AqVU{KxLzphS%|5(ks{JGwWZXEl_3el6Oa)UscGf2uru(l z>%+q;s2eIgZ4vL%7H;Vo+yu%+0`c%kdgA9V8W{&I#fx9bK z3~xSvPtvFiS)hNjtj>%;AR4qiXMA^2be3|z*7>wByuM$Zln(=)2~Tqb(%!UPGd9^P zbncx%sxB59C!Y`G-e+jk3$s2()J_ARp{Vp@i`LV~y}lmW$p!jb&AEOBeAj?dc$#>( z#tl&!4E+-!!-5$3cMX@7Px4&`YJu!wUIV2(qWM(o6$4+P=a#6{TIXNb;BIrZX+H6m zHy5rxW8mW&dSKfyY_1@~YoIsU(R#4_J}@Hffo?_$E>)K6nP-^pxX;%OuC9CD*{nW~ z8JHwH5P^zP5w4v?j|~3^P^So6W6h-=%9V7@{IxzFi_-zz>8E;KT4(~kom3Di$SbT& zrpoa3-?wa%X3K()@C2=kWYVc`qi$5xeEFpA3vJkp0<%zsVSx#?a!UqpJu7T^3vGia zH?Hj)hzw4cY08h)$*)CtVY)CQ59DnKaqG{-`lq^)l~)k2T+Hb1AQw_E)g-;$O5_T# z$xxHwlN+FhJhvzvQ_8HL;ze-6an?!oRGvZVME0#)@T#}Abr%XqA8###{B~ou=IIjg zpc52YJi{x>V`$j(H@Ba7zBB#xZs&IO>F91Cly_OeRqxUd`B3JN*K@p=Tx9b0e>_?e z@)4Alb!y1CZ5M3Orp|MC&1yB%|9dxrKsDapWWMrceC(4XV>%tj`If2~J?q^^367(< z=%Go>>aMK4zflR-2|t7AFl&ugW(JyL$n&kwg-&`D7#l`=Y6Dc!5m3|?=Ao`3$6Uqz zM_CP(hnNNHI?i#9L;sz?J_eb^fU+}4*0a$;S|y*j3_w*P2X{%0n!rD&)W5J8(S~js z-BT4m{o~*^(NQO7FsU^((ZG9SUsta> z7Bba5u)RrPR{&sHA+Cc(z945b<#Z^=4yaZVu>Ll6mxv&0$iQ=})V}f7ihxy(ljO(K zh|Uy2`B7DK|LLTxLZC=0dJkSgjG11uz=oIQ<&WL?^u1Q*drx`j)XRQ!MJ66&by)lp zT#S9omCQVdJTT_))2O8eFxVl7p$BZnk238qTRBd}q0dpk@t~lolIA>oOnrV2(cf^Z zD#=FMm)|(&-qg)s-s9_fqD_9G8;|h}GkR|VPGSOX4@i3_Swud%gn?Wq& zw6@sm4u8y|%7ws0I+!h@w+T6O5B?&h@(}>m%r?`W6*LzN;2^USVE~?lt%jp1-C1|^ zaY)|jx0hO5T^n?S!8hWb54RDA`oO254&j@CKF1cIk_Xq&cLtxFI7}WJj@u5Xj+Q`9 zwg@Op2%KBW)Qv*{i6fL#*yEyiYYln{K$0Ju$pjnbBhwqdf}Hnc6-~!z(#o7T8?j;U zC9xTMDnKfW?`DJfMFF#iZ-qVxzSd@#WSm=4-RIg}EI|lRTd1r=mzlR!PI$<~4)n~h z%fTz6Y3*UQ6aP#c=F{(O)3C5csIzG8mJFXn}=AF22qiZei4 z5}6{=7jO~3X*lSb>|z{oeCbo~wF59rtK;sVzLMcI7Ue=!ra%WMqH}kZ$e$$7SiW00 z&CNFg9eCX=%Mw!6ws*BVH$Xg>h-s)Wh_-bYq#DFK0LqsP>bmBte_}P66aHkex1ou8 z@#86t+|!=m!=fA6n}^3u597qXgwAS2?UX0EG&0*)>yb4tf;05P?=4~7#E%i5h|`15 z*EzQ34!3Z|NW`m@wI{N>C3yG6%|*j3;QLJ`DGWpn=v&bf0x+B_y#BUL-PDKFOr9^I;V@uMx2{1jZGN!sXq*So}_8&ARET*cTU-Xdo7Vn z-gCpNCpr5B&grqk^3&$5V2}4+*Sbv1hu*C*vgK-ogRk;ahIAAJ=szVYbd51+1`15u zCE8b2W(2jJ8eSt4Q2~P*4Vxn|4O46Z#~^Y>pF)_f!Ze#kQF7 z0NL^iId5;5*EYxS^=6XYXxGv@L?4t{^g7ZR8GJDGLe7yYFw~j7G~wnH^hT6b<5#*% z5aZoxmh!a+NPBUTXvJ5(n?nH9LDM>zeD}!%MU4#@UiX01_^jEhy4~NQhvra+eRe$6 z{xZqI?-M|^`3UcCSmt7D)HjJd!}`ODw0}Be1uben(iatnLv&Kbhh(s<@U?02M$OKA zD#y7;V$UvaH;pP0N4R*rX&5FIngeq-$Q`zNebQjdR_guR$r#?CunfE`d;{qO z1)Gk`wwxJ$7Pyf-r12NcahAc{b*O_ItAZibc;XzOh!C^mY^DkvApm zr$aI`5IK}f{ZD1UbSp6{eQ(pYsCfRx8o|R-(aR8VdkW8|nWlB~uAq{0CDrx@ovyzwQ_m`D3a~^tFGnT;nRt9^9)1aLa(CcQFC|9~ zX>Nh`Z*|=Ybk2PB$eqcRVX8ynMtJN8cDh9Kwub=5H|y9DHvOZ}L?(Z-k=v)zkc;G8 zP)yAQm0#I3$PzeM}6m!~%_v)e5KqiNvT0qVN zrTs5Qlo>aK+1f?fKeF51=dJJ2j8<2p{XhSBS1*IMT`}yIr}nM-u-ooBoYg z9(tBqeN9(58!27e6>Q0Jn8H7JJh_tK6V7ZVfl;-gO{k9SK?sB_aRMt*)bhP8CH1J%uC=K1=1 z^Jz=ODTs=#v!becrCbqUibqm|&MX(?lCMvcT)5u)GK=hY#%-x64P_C~bVwP&WLB*M z6PaJ7I`3rnv)F0s@!Rhk6I_Rzt+?xzKX{*iOVq%*IP2qM{Z61+V+`u_q-}{w%BNgb zHUX>w-g#zxin$8x^4ThRoO$Eo+^5b?#dCb;Yufk>OrJ>Y_0I*0+SNGxvR;GSCw}(9 zm{Ge&?Wp`EWSynWV_$czzptKbbMF(Z2F-?s)=0y}>rBvRa44TPM;lSwJw|oapM`Vn zEz2x^55RARpe5Ak6eDirPOM24qUR3!74?cxPGHQ=Ct(Np5|b`JZ+7;TzV-^j;cit_ z=nOi%uNiSZ`~kz+EYe};Y)w#a^=T&bhVUj#ncCi{Hm#vH&5K;dVLsp9`U!s&Mj^ks z`VF4lETS4xw7u|C8m&aUepzk0O5eK-vAB=W+zq6f8Py zI?8FTp>c}W9@@FCf3IaXO|U!{K?&^xncu=yUzG0VMWT@N23Y1}PvS%Il$6SC~?GJogr)jmI`6sW>VYF4CNs@;L|kdKbInKhx-e zAEO%J7W7}f+_Y|Z5A#-}rQ|H#yE4?YA?T=UARtTeZ)kFE%@6o>=|)zN{#~pXxWb)MSAn zY6Lt=Bfbg9fhO}F%y2MZ@_ctYqVaAK7l&*~wh2B^qp{7k6{9b?C^oQS$r4xg&Acur zybCJqmzPCOhpH9X>a|)x7Ui|h2)&#@bkLf0iJ~o6lLvyS%rQX0<#NzsU=wyTEo{v* zvC~OlXFNXi%H>V}RRzC3>xkLt@_gS_zm+F)N;b)UhQdpk(rWuBDc8wCd(sMeY~*ma z!)%!P%YO2ajhu1{j;2l^_woYIalLQ{jAS%8agXcqD)J=3898Q(F(wIs0s6ytmblM2 zJ!|J}Or4w)et#}L+tXiYWO^{dT5IkZkUoTNZ1xDzXnbh_!g6L`8V zMW~o$E?d3LSl4OAj!ZV0r}DRSdI`&=$7r-WNN=(y=;(BfwobZu)*>VZyy!{KP5LMy zU6lQJiE&V7z|f#MGSWqf0q@$^#M!oGA#^%sAY){RVW_u8i#Xt&IJKUcON>M8eI4|L z?zR#*$NGScI#*o+C=Eq@YFt7m&rK`;GN|cdi&y^+W(djtviKh9rx2Lqy4V~JYKBI* zL$LO<3wZnYb3b9lW0Rzj)-r<(@3>zIU8Oe5VD_p&eA#S8fH)DIC073UTe8#WJJZkG z0a+16)Wr);-tnimS(EKdxbY&>piqkT^iA#5jm1Z0%)tMGG7q>}S)}*jVH_2_0+H&e z($D@JbH7w7FgYP1vZeILS=PROquGUo-pG40j@H6A&9Ch*Z8e5k0< z$or-CPR5y^bX-u&Asn{oQ&TSWMvbE>8+M9ZWU>sMVA1n>iZE8PuzuD)W2{l816g#| z5_vxaVK_`Kh4P`_mW}#E2HXu$yR3G*WzVh*_iOyHf39x}^Fzk}=7gd4kK$g}nkJvC zB*9T|+ob-YE5y^dWPA+Z)O z3TC8sC1RrzX1%D9b9!gcXEfQwH)}fMN$sv0ttmlt`24cHN+iD{f)?GBa+aXd^QF)F z;+3)y+oX+SW@#$h*om?Cex8X7HK&W@a8?f>k+E~sVHuylXujL^SWp-TZN2M!N-6H1 z9R4z3is=1>OC{xQU%uBoD3te$&lCaTpj^99egGD7@-qP(tfYE~Lb|?)*@G``pS~MT z31DK{+l0yL%!-fRqjo+Ecofr2HQr&mRYqnm+}^kH1tYnv($JM1fl`D=l6c8D)I_8t zv9)x59{@{nNjl@-Cm8bLXp;XI_VUuI*qbch2=1_Rt-REZPN z6VGjja{(_SP+@vx6BT66s7(2b=8$)nz-xTPL_E^XAx3xfatXCEu_tLSUU^Jgq5mQj zwqT7tQ-5lUS%RbgGZ^?(&UQ9Uh79f@Ad8GPJv(O^oN{6wi{B#GzuXU|+dM^$fq0z- zU>!{VLc&Iyf6E%qanjiCrf;@pmu`QAgwJ^$OLyr-v0MK~V_4@cKQ72#~$vqx&w#hjZlI(gu$eKlDRU+;B?@ zNMW%8^cs6QKp#I>A5C;KCBXLPdtRNJTMs{RqkZa`(=aF`x^XTw!f@y$S(`?~2^hkECr0<=_?Kr(B8&nBI*AzQK*wV^;Wr_`2`21$- z%XMV&CG@Z30Jbc6pl0hA#T{n#lGJzWQD2_9347XSAOj6MA~Ksy)vfc6FB(aH+i}_(&G_zsBh0f2Pm9(M_hSb?jLy`o-(dNnPc%Yv@4P0SB+EZh^r>f-AH!w% zUYZn_Xw`Qphe<6a`6{sBlIKbTJ^O;!j2&Kae{ps)Qqt*Xjn-#OEc;AK!*5SNUU!+x z6N8>z9XzpV{LbO=_U7jXJIn-2PPaEl#}r(o7R~$@jiWfd6S}y%Z}42Kz+YeMtnn&?2JsC9i~$2V#k%eXJ3fzW;_+@8dtbU0`x zGhFEkzDJ48XBN95s=^Vkth)a89PPWp!)_bM%Gl6kHHLv3?3b*V%;fO7ZDRf!51O7L ze;5@2!>=`;h1Y}LU>#E&#@7y$!;?kCVG>c1E7lrh6JS#?%ubE^&wzuJ%r5>YcH3|( zN!@01K5aTFRW5A0YjxYp?;H-_zKD9><2?56%6dQ?G3lG^k3xD zOnbABmzxK^iOdsd#2_6oZzo0Vqc&&D%kkvrMdyv2wxT8-pG~McuOdTX%vHj8Ov4$X zMg2LbZ9!Qln}7M059L=reK=ec%JZsFM?Ly7awRyz|B}j!8+rk|f~9c2Ctpi<&yRpF zQ63zA5DS3Kwge!73TA+@5WF^2i5T$^tr=T-sul%(uW_odxh_3iaiUA>;(D?45DXQ=aYUCvoFJdL?uog49 zg7Q1iH)*T?_6SjZ&Dc7^uXo*`4yAwF{?rK|Ui9HNd=7xn(Jp>Lu=j^%Xj~jme;_mU zqkG^0EJ(Qpuw^H@1ElK!Eo9ZH^_mMz#6%lKzz3NcHkU)pi4p)jy>YB~g>b~^ZI(EHmex&0{fk>gi)4fbEWH9!Fd;KY+b{9Wa%g6r^KBJT-#U#qhm4Nc*Jp3)8U z3-EcQ|Cr2Rgh4h=x3n*$vBJQZQ`NCU#4#Y7tVj_gOx3@2%iYCoKiv$AM@~dm`b5_k zv%Rk`25QKGiEjydmIdfLZkO7$#U4Q`T_zvuO!>w}nN$Y`_;NE~%%9o#Dr;!%Uu-hA zg{^4^Mh;$i62(wk;r3P<&8U{)Y-@j5@eZ;w5idmaP_(JBCr0Aa=JXn!s}+B(lSICL zyoX%n@%dP$%#EysJwbnkxj-4dhilx)G|A}l?p^4uYEc!p4= zK*#vRb$(}!Pm$%Z5%2US1iFnEMyei2+6d+y_$KInTXe;}f!pqR6Q*8E&)EWRWy#^O zpU{C%H@GEV=}r0wWy=^&CxlTiiKD8_fN~8L7|LZ;RkC;j;!@N&6wPxN>BF^AzpE@| zu|}37TCt~2EudzmgtoUu1}Uu5P!Rk?$A&bQQjC~V^YwNM`sn>|Acz0y(3{WePYjbu zW2GgfrN5l673#-_w(TPsAQILAdO@>HMT<8bTncUYRW%lNCx|K-a|9}THhdXD*sX^hD;=eS%NH6?H!U@FSyr^9R1BINNb z35U_M_7f*JKOCCw+zwRpUsDiTTF9c|kKGz~;X4?L`DmMAos%v0)%cp2eQFbs=q}lG z)9aZhw|vx>q>9LXPll`M4lyn~SreL}S6$MMPVOqGy6`wosISt+0-21F{jRD1Z(sE8 zuqS0VMC+(8sH$A+h)0ZY4yMixeg$~fQ9lZYhg_{P9LFl8Kf@*m&O=KX01~j8w}2bg z7Ss7-J7N*527SVW3Sk5Pv6yWF(&&K*Y|Er{_SXY}!?Sn>%e>O59k4dB_ZR!?#iD-d zi+j-XkK6PPdikoCD^HBn!8h*??dDxyIbfVc?uLpqGYV`XWELk`@u)^L!=z8P@xgP$7UUxD&@nhoXT5g>*w7w4HI?u#=57Ke5Z#gPA<$P9lMci^#&n`REzD{qCh;+h97TV*%Sef& zp*<;iR1-rXSq!=*8ps)yGtLGJB2p6y8_f2hui-@|odlhISaf5+?P7x1=b6eR=qV&_ zdt+=LSp^~x`ebH1@V2Ie&=)QNH|KtA`?z3j?co!GbB#|KZrvQ}S3=ncPc-;omMpOf zDg0CO7s6nA2V(g$;}-QDQMZQ;k?WQ~q4pl%y*g z8?z{XF|OhSfb-bOW2lFf98YYTaq-b7+rJMrL@tbd#j89bXDD#Z_>qSOxSuXbr@Ar- zC3c-|+|AbCJ3A<1ys+$K$b|7nvrsM_#!^i1bB&v`B5vF~@QEUTHqusoVyl3>sEVpi zJaC)6L|n8Gai5kCXn9uemMED#=XTJA%kYzOeN>7%7R!_z)0-j^=FXK!XtYsYJ0VumF$~boaP)y-jHA580Fs$W#yl`$T8w=63+k5=29dTS@?!Z z$=g*HPJs|F5~SvYUj3p#=Unv2vYPiCq_<`hj@y|iHMbph`(lc2)3u~B&8O`4{^(-k z*VMFjFa4CD^X8yJCqJ}>UxX-5P=tj@z>kS~lKqyCU9Q}^R5sVnf)!kUK8JZa#OH~> zIopn<<(xTQ^5H#OwCu$tIez4XC^2xAjD8`X-nkw#Sh-C2B__O)v*;(Q`UQW8)uW~#uBc)NwB6n^JK}YyQ_eMvc;?XH0QJhHqHW02tWFa5 zfv~`jP3yc(bv^mz3Fp@KAK&u)z$VVx;~yT*aF3U#6S8hgRdQ2}*I5JWtW`3YR$0Lq zAXpvoNaVm`nGD|394iNEPFt=vhHi$b><9C0Ybl0N-xqE>jRyi6OV__J!UEZ>BD(2x z?D5mmV#mcsy)Je=xm;iGl0ND**&Gpe{s*(NBb~H+qUC|UKaC5JX`ZIMBB7y01H95> zA6JV?a0jU~L*>(drZQ4Wm9K7v<|%>9y(JAMQzeZx_?$wN$VM-C`?8WhoFP5*$=u*` zl&%W?I&}ZX4-S@gqlOHbtkOD0wrU;~=`E?dv}qscTx8SvcgA_|^PT8@*&7>n|LW?w zZu6`Ep=%xKT#OR{4>xa2)HTE2G#kl~6|)DCv%Tlbw_vDYWWC-qWm$l?^U{y4z??~n zVFvN++=ICPMc9|eL-qgvib|ht;bz4v$T{lf$2ywB_X+TQ29m)G<4S~Ur3Ya}d_KH@K! zPqi}+?*oNAMV4Y|_Un~lYDx{aU5c>VOVn})r6Tjilni2#pHsCf2UcIbQ!lhEp@$F$ zvisQ?7nv}ZcZ|cF@J@sTqOs~2;hvmt`b%eB_(oU4AjmDWWYMfyW}FY*_5%!H0@pPe z^0;rz)yd=!P^E;F4HDIt@(uAYGRAO|-8GX8jb{LOS{Yw$Pvs)uXf&=bNK#hHVZxgq zgJ|$4C`RBYSHZO^27Le8`+lYS_{|wa+U1f0GC6c7 zd(t+3v!m0jU2fltD`aMSY5Pda0Q@88kdH@}mzXs^0E+gBS>!^M0JOKm;356~Nsv+lT($UQp)$(gTs%L&tA{chNQRP+N|F8x4JYnB7kCq)!`J ztPWbIz@B5qwEva?G0JPD`U+G6av52kLAik>WS;@FP?2L5yUF$@QNZ?XKSic~nZ;-T zswd=I>lETIsV$myPNnBG_)LOMoIod_0*&qE2;v~r3}*XHm@!QXkRq6_^$$Zzo#{iYK#8h;$-^oVLbBs)Iyao(6;k|uaeOmF&qGg*sp)Itp zPt)4|w0CA}5B*2$cBIcxECKuYwo;6902btZGxDgCX*lPmt0@v+x_i{NIX=TQzy}6j zNcZq(1M~l}T4<1t+Qc-u5s(WEEJLAzk*3XnE-YSz@?J#a+XmhYN=zr_I>&!P} zT#c@+3EC8pIXZy7|H~|(vuor3s&AGI4`||kDHONqAb+fZ{&(n%Y5Z%LO|E02Q*3?@ zmOp$)!H5NFQuGmkmuSo+3g9MJ;4841VUfaRGU2jD=AQwJ1LI|L!2Y9iT(>6FHswEs z=&8~G4vNh@b#5Nh_+Ms8C*VV5HqFA1=vJ=IyRdlPPXTC-X5ugDtH`==)Q8P-_21V4 z@VD#+;#w_9t01BaE6q^&{_uwU|`o)6J1aF-g zZ*i#Y8-0qd?l1g4^($?$3G5RlIAhyMRL~5u)b@)-C;{Y=0c{`KFhgL}aHMI7QlXy0 zwN8aq@1g&BD&2FvB_NFJdphB=a>So!vM}HC2v@+iDnwbq(Jc0bY(BEnU)Z$(bTpQE zdKKG&pxncShy}wK>e9bhc+b*b)*M*-=lP834jjp9Ev;+g?6}PE&|bP_*oy z$0C4;;%ysPnh%O`Dq0J+Oh)*KF+>;!zTYvaf)(vt`2k@trbLJyXbgBX$^8>m-cMql z_cyZ|$2NQ7W;|8a?#T-9THp@($g?2=U|t=>Y=$>@xo$p#A+{hm5R;hAhXm5UgYP<~ zklK#v+$FJ$Q1wLHoo`0H2901GD(gT59L+VB!Iw@zAb~2ZVTr?B~yG>kxdbw!6G}|s>=>8P?+W?{o zeb<6(IcwD9w1r6#anXAVjX#NuU=l=jfbZfH?Xc>U8}xCIf{k;{`b69O<(U}R49E66aRI77|nK*##@*gD*DJ2cj#M@+58 zMZl_@o}4BRj<1mtZEi*Gv$#@1B+ZI#imVPqW(V+TJ=ji{{UBzT`gPbh^uwf7nO>Q( zF&W8;Ubg|gAqy$)sbB-5Js0z+EV{&M?Rn7*@8Ec;Tf_00nJ7#smkEH^`Rn^f)L}+o zlr>6M=p!$5i4npJB+T9oUz3sl(3-ZFJq9ywS$$YA+^26}_NTOCUrxxf;+0^EnVup~ zT8D?EHV%Jc@a81k%HFA?S`$fhQ}dJ3R6=i!7mmE0tkQK(ET=`u1KZyw!3FSIZ2z6d z`a&nDgmZ7kCN|NC)zq;+qGghsblmsaP+;1C&46Z=f#-6AjCp*x-3Qz64Qw0|nbi`C z{Ki{MlaTE4#R~v4A_NL`rjLZHwb`+F9m;&OHd%6N(T8=*;N>T|>yT zk)5`zMMBND*lX;Ud0PpUp4D7xi0x>9=$hh1l2Aw!?D)U6*qimta zFZxOfd#4!ZlNE-nu>I(tQWDXs`a}(_aSyIa#@9O2FUK+DiFZC0FlH%BM|-6S*MtIa+cnm!yMWE?mkHsMj z))gDo)RnBSY5K=)ys&hyDfaH%=yFvT2g&0{6<-=J_;H=k0GB!@wP$sjR?R`H18Y!`|)(D7S4J6$)XC%RBhVdwj5Me^0`*@pJ%h? zx(Cr(<`R=2gGX_mC+C%jNhEznZMrg%SpbG*N}SP|Kd3D74fQtx14c*wpkIt2;6@`w zI$u$wGZL)@^($0{ifXET$5m@i>dVd2Mlqq@zYApU`u)+V^ImMPXtoGE?2&MH}7TOyTs9a{2b=g5uA-fnj|T@4oP` za{?umRIlS5??A3snSJ_nKI;exFk%CyuIfKnSY|PZ|P~CU@yBhajEW_!o z7;1Ntac5K>Q^SsgxiO#(#|bph$ki?F`k+gCrdgTmMb8vzt4$hJLNeN*JkYyXN>CPh*IJcCtN5BP%EKPqO|+JOEr%*Lo;sX3v`!Qd=U^nh!J`6)` zR_l7?KX-#WqahV|rNMge?EVw<56cYSfam_3zv7JfXf_QniyT_*Mtuazp$cSj8OenG z`EA5PPG?_EpDjVWfWK=-{O@-sm(wv{&;{L$Tl8D;0RvznppG8b7;r*N7SeJ{dt=#p zF@1K>>6&-V(B`A~C2s!@iws}bm)svd9i?U2tNkgBg}V#M1H&~g_;!8z=FKKUKWh6H z(}buz=t+oP={*yw$0Ti)E>3kAp^*`BMkjm>T-`1-w)(j7Ywu?qG^P4aGOxoND`zKR zU-JAHYyb}az4643p125vxcM-t{sG0TGtLl%*0 zKJIuGtc%LLEcA~Cn>Y1afGiQtz0sf2Or9&2c4DV}Ks?Q0vIY7*yX_26!2(Co33>%k zEbI%q)RL)uLpuro2iY#v2b=tFGFXM*7z5WWyVV?YN4*~3;O%=cYPEh%8mmkv(Q-i? z<15e1)tTys)gb%;mZ`)yRFB^>XSTpBa|Yq>Zty0AGR$CKV&@ZrnZMIMWe9hyZsgDC zzx9A~S5-j!zKh7*S_Yq!<24me?j0LK2~ogHszJvpl?w9N96;TygWdTagU(3Tz%hz zacyq{4l{aD+iN83TGA;fuqU4-D;ne#DxCVhG5B@r>dGsRSRs?an%6Zh6grWs7Ilbr zh|JqNI=s=s*5Af=SKKvvL{gUR>5GXfV=_PGbAi|7N9U>G6XjIPJiAU2WsZ!%6O~?u zYzuF4!pk&a{#gPGx@R-j(Ryu}XYa5CtLDabiSCA?BrEn&%ekqndu)0l!vgiM-dvK@ z8A~VHy?c7B7CGU z$Sq|q{mGoh&OGP)y)5(|g_}GS+bTdZxb<{FY*JmvJVwUzq~or>$S&=7Gs^Re*J+gC zn@tZl76bzL@(zD8pLABo`v`~IyyLXp30@BQ?D;Z0;b-VSCI#~*(cu_yLR5&s-ZgKhP$wdcO3=m`g{f&xR7I)vLg|!PzW@gKQnb*Q0dr+DL0)(-JHYg3+W% z16Pxbi5Xe;Hcy&)JZ3C>RF2F%t_j?I#tDSiRg(9g=nr_$%QmTd7EfyF$6Z+3=ZWvC z-g@a-vcsTPmcW?Qm(*2W48LD}$i@dmig3!E&qkc8Z$!}b*Yw~c!;@LMO``8O;EZS!%TYwb?0g*3Lx#vr#R&%Kw$FAMB-A!^C*(a$B!NCwod_ z>d~L2`wv--K1c&uih)b(8;3_GlCk}~46XlMiU>?xH}@oEKxquVX2w2opFKz8pL=9s zsuM@U7yM`56?-;tvn?g}Ozn?quQkq@zkaX#?aA-y6)&ys;$f!ke%^jAiR;#5u;3Lw zHEY83v+V`}*2_3BpH+;HD8(Hjrz!YzC64ZHED%aISEwvp-Kw9_BwFe)4UVfGD!RXo z+NJrfW2Gs7&gxr++wy^t5ru*b>A|tpyu7bI-z2+Iwn;q8+3MDA;QH2?)1@~la%qyi zH%P7Z#+Vb*u63!fWBzFVnHB*&d`G!fry0H+6xe~EAX*ZWLkk(xE&qx5h%?}_NoS1*TS2%d0_ZkJMb=0T zk7K89mc8J;D5+db-Gi&wEEfYXE(uhr{V)tY*wretW6Ju8ph z@!Q_C2X>q5w*9M4=pO7*@6$`39@!-g)B2W9#k#WQE=yrDjrQ}h3|N|gsLPA2d9k}r z-9PfeZ2R#YdMyI44w=LK_gp!Re8sZ_eZqwf%Tb`w*(f<W2}OQQt!pkaGE{!jypgKARd5q-09 z0Uu~}%Dj-?f0Hv^UR*tBiaRg};*Vu<&$1GQ4kEy2pdsw^%$ew+8S8^Dx~{q?We9XU z_33)ppqOTK{w7dxM&?(kFrZeIaOI#eXYr5OdK#zA9RdD$Mpj*XVpr71bk>whzcsGk z*}*h{wzlS_TEclZNovP=DBpBd*1e{X>-yEs@jJNv&`*=6bi~RrET+F2Y`tiLy`g*O zR=^4}zKUfPJM1-G-~$mf2!q!Qtp>%5v6+eqx_c#m*JMr z`aUdn{z0!#=o%GgpTuN$S{%RZ9d`$1DR$}XFIovG>>9Cr<^W-M}H!_Uv=)3 zg-#pTRc~qo+iYyWz&idRAe&bozUBZp=t#vg0LJH4B9(Jw;TWXjC3l?oY!zN9$~Y_< zxuE@7kA&UUsXz}(NxoY9lGPq#Ab7fa`LY98=n_b7=i}YCWvdkljXe^_0qj4>AhQN4rb;Oxk5s+E*e?Iqz-(`$FZW zJYJj+aKHI^DNp2h<2B`0w+8RbpKxJ%il1Hvf_5yuo;b5dSmNi&nls`;1rT~A2Y$eU zl1;8BJ;sfy`%=5NO*z3|yS75J zq*5AwSJ6N-RRrep^HvAij=Lb{q{vEA1OJJdGsKJvkIXf)U#VT$3$d3)TVa(k$zwbe zThb)iy-!Vs6nn9=K+UeNls8IoF`(&yJn2)E)vp>GeHa>(vkZV;^k;8d>rPLgh+ce@4q6igMBji=k+~AWCm1GjMO|(Br zW`{$^dpb$P>Tpq4i6^R9XRUrp?Jybjm>)%sqvLn`O}+jeid>)lG=_-tJ=R)!_w}@k z`Ec2l+BZXe1?=Zyhig>nc?=n^r1RZs2x8?YW7zk^gm6Ei^nuD*jw~x49Quc zBUOD2e*4gQUiiV&Y%X#1#r})WxZ;f2ShlQ1$<@K$D?U;X+~-&$K3E#&ct`(^^OEV~ zpJPulKhCckKMQEufIWu8{A?+iuWhb@8c{Z6cI~Ct%l!T|cVrJN7v590O4YGHWIA_D z%xz_zQ%+Yc5xcEkQRW0uAbkaa%-7wa5c_nrUf6Tm9J~=*{nY(-OvQDak$LK3-WRbK zszvy`;wtl9edF-FEf~59X7T&y@1Pg4j8FxC5_a~15Uex1*J-4=^36Ek?jhI{j?*b?Xj6MW-sfvxkQIa%FLXd+H-v9X<9dBMB_ar zooZ4!>*G)LGCOzgsOrPQ!G(S;%+nX&{5r-+dHk8#^|0?EMqMd$H=Frv30&fIMGo^u!-*3 z=Xc`Hemm2=e*e_doMvAtLq=loY(PNeg^{j^!VERp+6xfIT`vv_{SXRlz} zs--^GNYS$$ct>}`PlI@AOXZifX8tLsc7AIVX`N~U2ZpI2R4;_Mv6YxmXD_aX6nl}1 z`g#Sw4ZY?zBQ?pz9q?tCk2D_w5X&{}6f|R>ptYI!rH%T&n};9lWMtX0y6>)LHz#K> zq_zrnxcz7gtvN|MO{z&FIPt35naX-YcdOz0-sP9A>HP=q)}0newI2q7y4bK%*v^21 zb`1H#heOEw4n0=vP8;8!$+{X=IJRl6=Y7QOXDIqfk_G^7;?o;0zDrB_H3dh5x?1Sp zV{k4Ug`m`^x7wKc?CeOGq7Zv^duS-lhi%&DN!{aN_AiE^5^ckHpNhnzwyLFWqgnJ9 zG?&q4w^3iNC#i-FO`IQUTMi2rf}C+UEi&$VtMrp$!HRA_kugg1VU+aTax84oll{TE zRjbTXWrd#=BXcgJDJ*6!MBdRYM8jg$fiGw5-#8AnnT2Tz#M9_`9Sjzl4kbb{LYl!# zLpEl=nI67@zRoJn=%^MlpuR}hS$xae(WfiBsQiG_g}Jg%Vu|l0cO>jFlH7CtuR24l zd4sU0J>mIoYkQOyED&L^XNY16eEs~{Uo3qHI(OV?UA`}J9&ErLQv?I$1GFI_)qpo$ zzwbn17Gvhiq=#K-S2egYCeP@OYiOqqZI86#4h>S5z}MKyep8y(kUYMobL5p<$zwN5 zc9M+)$@-Co-w;^VN?Fog!D5tJyx1G&q$AXhCOJPE`Z0<9QgRJlg^nG4*&k_jQm|v8 zHzc5WzjgBUC+GAv&h_=D6{|WN#qWx?tDc*j>-uz`nzd`qAJJ40c|Jj*z^6=W`j)rT z1Mk#w(tg|3bFaMYxIS3GofYp-v3cBzez|C3JS<8=2c@38fO7e6F_ z#sS-9+*Q+;MH_#tF}a8m_PYtZeBz|jx$v2hnTT1db#>2%Q%~ZfKHQTA#Es@sju!i9N0x!9Snj>YTU0%NR2akVm8&d5l zT8c-w`>XaMXh)#Ev}5;0iH?=z%1fdVh@%QK&}8~EpJ(=FwZn+Yo~mri+%qgz~jUGNP5CE;0J`HtRP|7}8VSEU0-mW=)2h*@xAbg?8LmGXo^N3`8S zy+DB}$xo~ej7<8)^4b)KRJ+8eX5QE`>I;;fJp&0-I&lP7*bh`rD05B0Lp$HrX8r;! zLG(MWDF6O_)@^ed^!nk%Z7@;R27u#wFd2>yXM4$2yOxh^@A(Dy#YD_*>O+M z#g3;R*fbD9HX50+AxU+&Iz@Yrt?5TT-c{SLa+4ON>1hs_YmAEJQCom-= zb)WL3HzXmO!`FQLdhK!9I4r?31-|doTR(G{g7T%$CylkgeTfHP=EnY%yN!9&^ESPR zfwchsJB z#!)4wK|#jmF=TW>i9cso-5u==?q>g7Skl+Qy4>hyv(zn=A(AzI*(;(pJ{2bM#_Rt1 zdtj$Of?@X9W9F5+WqtQZk(GFl-}T7TTSD3U!lW|k$+Bu@B=ek~1u4;p>EyUoud1R` zH*9s4?s_<4D=gY%50x*=f1gGag*Nzu@<|W7%=+eQK6&qSk#yP*LIuUg4K3Mnles2d>FQhG%N&ubU*wV%FZ5Tjk^K}QVwRt7@56O!dLv?X6gh2< zp6erUMf20!!m^1P^#sC;F?;BY^jxLyYqu)tmLu$upa|q=?U1F_Fsy#AUU*6T2b9OR z>CtTQijgDOT?3q^+biCLx5 zOXor6>fLHXNpkUGSx9WYAH+|1|3WX4D5qTC|BvyQ`8xbi634|~Eat_ZGgZUP;CrVqi&I5Q3HJAtQNpqP+Kg$^a-?bzN0pGJ{{wbZSoo{ZyhnEC;CSYh|c7`p1w^ zqXih^XlE}Eve>R7p5VaJB+D&@o9I9L@&2-#*GD$T#ukLrHNlZW)=O2XLjdb6->ZG-iRJXC3@I?NK zN0J7;J}-Is+mBVYGOPqWiv<}}LHS;+_`R^zg}U+<^LURl!g>HYQYdbWhpi0d;qwC1 zp1jJve9*5~;8o&f`zy;g*xTTfr!fJsP;~+i~ zE=WnxZ4VHge%#n+B)j9DY{tWN?eelH;QF(73N>8W%|DQ zokFj3$Fm$MNXF#|Sl;F_L;XX)2$YbQ_Fq?m>85n44b&$G=UANEtSgFuj>y#1!>`$C z(aVKq2f^67{dab7mUN}piFNW@wvIP@3a8Rzdy7A`?~ zeF|&pxX11TI)|yOTX){)b=)3MQ$D+BA#vF*@^byXgv((_gXJOy9~KX)gjBiYQ(_4x z;Qlo=x8#Iv+QptGX>9b}|5@bD`kr=+Dnh}J9`2`%)w{}iJsx~^aw%gs0lw69VBw9r z)Jn#7Q{~s{p<;_SmJp9>4)m$1zg8k0ovV2v?h>c;%?#!q)5TNo=SvaBaqq7)eh(wb zb<*ngt}dTp`+QfBx7uH)%A~%D!{9GTnh% zw;e>f4VBHBqKZpD9(Ia?AAV>enD`+n_WotJ<@b&Z1(=6#Usst`!|_J;@Gz+vC7ZVa zeiUB<0*{+}p(dDr_H(BAU0c7Vou7_{atu^ZdypZ}dngQk02DhrE-{JPx^!u59ru zC1ux*98$<5aRr^c+Upu5s!A~T%ZnBW?o(Lhgk_%U&AsA)NkHs|tQXNJj{X}f+WSd^ zr=_U_F71U3F{ed-x=8zc$@cam;NXxh@jQ%I7@#%rT2n!%m9yTL?AZz9q*RhUNMa!h z-~9}T*|O%X=WNayvav{;m`8`8wc3e@kJ9_SA{vc^lqtEHr-~uDrblr%hh4cHZ~Hm3 zrk=wV2bE@SIrPCM7T2VGA)aI%DnjB4o$M$qzEY`CD!hT#qFC2KtN}89VjcPNNY=)_ zrw5;Z(XOv_ZAhS7fpW5$0io{&es(NdbI-qd_0}(+nDnE!#6AZ(=JZ4&%5lw+^4aM7 z_~Ub59ZKWy=PaD&_YwVTCc}2cv$bx0$ZBzxB@CSE^@lTq#c# z1Lml;Y}5-j9P%lw?QM7Wa$qOSA|vn6Cjdli5w{)AV@^>JBXQQqgK|hPZ@duK7{dsm*ns*92SZ;4XUe9k=szfs z_g@`3_lnw?`%G6trcLWG3#;w7yyB8WlR?IBut_z?Z7t<{X*yXWw!PFJonMo5f5K)B z&&{H>Hm*tx#dN-wyz+TbS2g`pi|Y%kBhAJa8t46xBv#d12TYdIsU09z@&?82?r3?5 z4$_dMW~o=UL@SI#xXWTHDaKfyT0&u4iK=TBD=D$pLs}%1tIqOsfyo)K$CW?wtuFRn zt|q)#d;c@8N$@OcRIHnv+nVa?#nUGa@u9TR^P)aHuHSS+-+c&;{SM=?cM{CX=8Y4uSPC8ape|KFYE1IZ zrD!d+fz1$f_7d5B?ni2w;5Ls45%lv@+eC64zE8Pmd+!rSf0pn*q9gTih8=33yy~TQ zWgnWwsCuc{a7IZ!VV=vhPfgE$)c*nO*qq|JUryVL5Pymo( z7mFok@*Osaqz=^@tRkLP*@CU!%@dvd;o{iQg8>h~lqo~_A0PbtcZR5YW`=M(o3py@ zj(J^{&L11?PZ#{ksX8?AK86@2;LAweuB5VE2ZGY`8lkY~?gr+ALc)|0f*^e4tTx+` zz$+(fIBC)NzTO)AJvW+JXy-$uFbgA_XO(j5WR5nMfWnpRLo+qjf?B+Ovu@+aM<|Xe zEj4ZFdYIsa@fl;$gZf{-_2(ZNKP)KIUxAFq>{wt3+jrOOrAd`hZV~9l24xogz3=lTIc0ZW3R*5tSSY=3+__&u1)~y;z!1 z2mB;OqaLn+>v3O-nGNdJSgv>bnI7B)uj$!fh5tC8_GGa$IlANB9k%Eyj+I;r+SJ9F zY}Yyx*e1X+NP)B>MNTxl%as4htQG=><{I1L2w`GdaP2lPIat4%JBz6KUqCicL zI6N?aup)4~vyeh#LqBeo4{fBr&A;aRR;x&l>@lUg)5B%Q@HfzJk$Xq0>HJgXuB%(0 z!7bWhqiA%A7kl_go$9y(SI>I4GNI4G-5eVadUwp9?CckbfkF8?L1&i+wt9>vy_5^Z zCbzhu@{x(31+Qg2jY=)fOD%q@#QIRxIO@*o<+`aXkn;9gD42}=t_q(aBA;ZlrCWbX zxaogN#PiZ!JG*T+XZ;|&=g5q;G2t#c46$@VlLAd?TeAAwkJN}lP2e~^l(`BJ%v)_l6% z_2~AzTl7#u1X4vzIJQD&&EznpaLN}{wFq^&dNjzsqgiHgk8%Go*XiL6fkm*Pe0%v~ zX;ts&Qo&Dsj&bC9V~W=_O7WZDzRLC*WfWx$8Q~E3DKcos{Pwy}_gCR@t4}0Gv z_|ie)oD&A{t6K&N3ur=~rjK%c)w9d1WH=+eeN#n97{YUgs@Wb-4H!wOV=W1S6m0^u zw^7rpor4=;hwr{uv7fG&IqX&gBVzMje)!6-(Zo1{{t~pv&sbqcoR#tu+ut2N{;c`~ zZ>i2u>M^1fA;0aRJN<%w53fo=F?ZXuo!j>hsK^L%-8XKn5$u3VYmh>XNcr?YZFRlZ z>!r0`;UcheZPO@U78X&r$~UVG>@K&@vuHr3RR|uV;GD0quI=hYkrr*KU<1`(wNXfv za@UivxNBg2&6r_HDCeb{zZt;?whOIF&rz*L^Tj^K*9ek4aIweAoG)LaPd;Gmrg~xn zzF-$MMzRycPmeU1KyMY)Lwh=nsu#Q6>Mcak&uHg{65z^#%`)V{Cq}yyW$61c2j?zQ^N8XEe~#kXJr6=ro*ClN#V_wZUbPW!>D+I?Zu4+*INQ8(-E~vca3Qv_ToL;(ZbH_h#>_GHRThd+uCXtfLK5 z|J5o&6k<*!HbQ$h_j+G8O06J9p}BfLr_oCEK5STTUE2UP-4W*4Z8&pB=;gGfA7tgN zL2I>x=6fK@yqD5jfl0%%{I)r;xodp<)42P))folRk~K3rR}@bm_t(Df7$RO494AiT zC_8Yp2TvJ|OKfP$)jp8gPU9Dg;9K1LS+T-Z9Eo36dL5kq5&57PQr6h4mhQL$`35~| z0xa)aAR-Uwi;aBdIViLU2yp;Hc~q60eWW~*>LGxvdDu)tN8$%X$rRmzha?Ds?{}ifRK3L0j@yH_V6lU@VYI$c_G)|D?1Kf2B&@^uwp6N5pA-Gr z_Z?4GNC4+F2=WZ*B?&~vJBTBel(7s}&{8n%Zk&_vRzI7jXQd?&WjC&g(k7C(n}bF2 zG`nsI*_bBt6|NI-M#LY0+9xoZl0IMR&maB-idkigOdA4$fHpD&nJ zuK{8{R!V{`DQ7cSr2&T-oBuOH^U(K_C1(QMjr>S z-JOZhZ|#D|jx!%aY}!e`S(3~?b{SX~0o!~~wnf=~4ok5LgQnb&w5_P$y2)l(1O9&V z2-1g0lI77+Cj3TZ^lyXk$F~Uo==+{cmQTnb0rf_0vm(2{z#Mtoy}cwi&kKG0JI;T>fUcUC1*-_7fx8wvm zm6Amq)pG9l1x&KXXvbI}Xd(bzi9k`Nn9xkZA*XdvY7VbK>07!$Y?EhPT1y{C6i=-w zhs#Q3fv=SLS_QZbZLHvkk%}}rG=`)5AV&Ena7{I{}j~k?wj0riI1lXEI0mYfFSTXty6#Z0R3sZ*?n^O zX7?7j$wlBGppFcfr0)O@g-HXa8i4c+>alnBl63VhsxI2?C6fpAe|W$UBT8v>;7EX3 zEakCsK6b8eIFz2PQT|mg#zGNjU>JBalWHfE9cc2;f8E&K%c!3yAFg>7^;RqJ83qFU zqamPzzeStD0VQCXYF1$Xvt&TKk3eCdKZF7EdpDK)iqVxmI3YXZ^}|4WUst{df*67M zSN>Ws7LX_k5ZLmG*WIL()7Wa(7V*sTFUda)0+p2)Ei`CHCrkPms^F9>lW7~wy3eNV zIs*>fL(fT9LoZUTHOjy2b(`1y*snZmfduUt0ikqomfM%k*cS}!4sDW8BI3{Ze)6Ak zl20ET54^vuD=e*^Sm8!^3>1u|fx}#^4xn#RX#sSIq5JSYHpyQJqIO8jWehF2NoMT! zc*SyqjmZw!VFe^70mm6gjvD7uaI#zpI?ER!Sh^_MbX5k}BqZuv=w4aac6Lg9OwHIp zEF|2y@1`R39Ewt8?8_We3`Q(4&6!Qmb>Z^p?CaTDI3xr3+vJM!ogj>fA0d%F=jyQf7Ep3o)Z8M_YDVAO+%LjdU%*FB8yw5 zAQmxec^8%Ou_ls&>y&{KcOf9ymr|XD{!J)rD-DCw^M^r5>V0we0o!*A~aj$IxT?% z50pS)0T9lj+zA+6r9GK&H(;u@#^F-KQW4vz1}y@~oYtZcWS&)xa5YulC+@M?yV7unoss_P0!my%6ENVp1qfn)z-g|h!AR@kjF&ogi0G^X_ zoeR|V4gAFt0AAO;8ng>E{5tP&gvqf0{8K$kfd1qN!A+e;ECK)+6YLvueq`kk*wqI8 zNOKiQgW)Yku>&Nvfbjnx?|(e=96bU!rWc)O z?(fcH89ax}>t4>oFrkd)6={uDQ~P9 zFE{ro4}zFpE4vcIr6OuwT@8P&;TLgTXPtqRDUHn_Yx*$pf=c&cfkwP|VPiCd%IiHq$3>Oh$KGrTQdho5X29dM7iSNR7dQ zX4~Ig)&bOTn|v(w#L#X8$mlKH8X)G7=Ng=AI2PldQKPVwD<#0v(p=#5a0!-iA zDyI*;`^9qo9T)^-s6SWHlq(9*`npr=d)u82VkQyv>mT#|6RA-s$`uc{UIO4xxTkHG z>-V=o-lKuB*Ym2sLo)>&eb@U2eWgF?K!z2R!Zb5;-LLPx*V+4zV>{dSR%Ybx1tm2( zXw?)!G{uYobNt0J4cj=Dx3X5xwl)GQudpbjN8|&m3e5l%VG~Q2H^W{jeU!q-@nm84)eEFmUQWRm(eW# z^Cp-*n8?`LE3U=Ax$thW7+~D`k1Y{a>RN^}UyTI#; zezQ-ENk))VlJHIA4(sp3N0q*WX)XjDiNtI7e@5jX2BZ;_Y21rUl$C*@vjj_vHuk6!+SVZ9dG zC+T^T32F05gl_`TbPPe14yd%Ov5csKmm8GZZ&K@EBI0K33P4~xN7-*6K*lWhFrb9E@7IGLpTq;M!uU4cq!|qov9?AB9zuCy}?Dk}+!q+pSC|Uc# z#BIRRPf(x_Oifa=66O<9ekxqUrcES2xN~QoJ-Zq)Pt)>C{_4c1=W$|_IsQH4y{GSp zDVXIHWTyH0g6;Y}uuV=L=X7>4hJea=`?3d1$pa(n zQ?~FSCOmJC(H5jpqs_oGL%5RAio|{ISulH z$odO^AAbNFtN|QPUz%U^-ecHuh`~g=&YkbS3Rz%W`-wnM*(1Vhk1rdi2UCjC%;|^@SUo z*8m!mu?{vfq69iN?*O#sAizw5h5X4q(gRK|jCVb*a%V>YAW3WZ>Ooom)}-15Pn}Wi zy-R{PxCU)&UvHDlUdOm4t`HXZ@xr!iU``399a}+RZ9B#jVyK|XH*b~b4Gi+R&X?4T z_3V=h+g$UH0%4|{qI>0_Jw z8;-4{MG1M2q>NEAPq2NythgzV5EO=6Qc8M!~C$+5Le`C?T?{k>xk zG5_=I5BPovq=S}f;Vuh&w;3;Vf}Q={z8~2Z5z8GJVhfxu-n0?I+YFP{GbslBAgcGl zFPFsU2*7&U5AtL3)P?MuQCp{Hd1FnQIZ?$DSF8*Sa1;7A-`u3VH8nx?yr&&cFeFYS zn~PRTUVn{uAr|mE>(AY7!dM`WcrgEPo(DyrO>eJkQx(^*_<8bb<-GORxv+$!r%Iax z=wu`WIltL*vBtB09FaSdepcv$hoMtB{pp9ihisJJ1u(TKx#o{%6O-GhOq>U^=OMy8#f;c+6m+Lo>b-|{Uu16(q7e!#Wa&nZTju^YyNO`CG zKNM|sM$pT?e2j~j?MZi<%RQ?U)_z_=K{l;h)uG?*xP^M3?26s<7cK@TR%8=fp7HwR z+h-d4%3ZFt%G)YaRiE;MOuLbSX%mnwUGqg;wANZ5g~+}evo4Q}qw(|a9IU-I+n~$) zKd9~|nMb)QSwknC?h@^IE8==OQ|Bl`O|#*kCiiqH%{?@aS~1m4{lSh+Ci zrAI}fJmsr_;D#a1La|!u(<-c&S*V`t(Pl%4jX$=82omN zo>uf~rVs;vEkQjLDo>7@~qYlceByp7)x$o4f>+ZLl78bC&X{c}P6N|anUe|c2l{U3wf zfM37s_1ZfQ#kVgMxMUytcGIIPbG1Y*n6mqCX+!Iqa&Wxcs;Y|xQf3cu^)iiYXFchCspy&GSAGg}l3+2wMFOo8`~ zmpJo2sDW|;F_~QfkTGC)uHk*Rdm4JP?F!W99nvrKL~Pl6@g3&8m$q#76~b3+gzF7# z?EQT%12JhCKw#Rne;`g9%)fepX6yS{rK*wR;+b7uUofqG@5*nZ6BlBa&b9F3=<7|m zBOY6&bp#Xi`(5DW#X=REDsNk(I)E@n9Ij=Ok@TVsFkXuH^eL^joS_A~ubscsX@NH; zg#8w-FDbu(8YRv4mwIOAiz~dRiH7F;h!%_JZ8j#ODQ|50eDiD(z8*GMil!Ia* z^!r4c;xjS@BbHL*cCJ{2hgT`Q$g9oPQ&si-O81d~=zzu+3wX>c$VHo|7JG$@?S=~c z*~xbsL1JtI(fMi)jjh`!HM#n3HsqW1#`jeViit_(Aa+BvA77Ny#A=XEB${N{rd4zp(Ofo#$_u)QAEDQmubCx~bWHN|b4PpjFSgJTfvj1+*i9UYGmq@UY6 zY2FysDWD=)$~%H8@xikVZmfF$1*)ox+o6w~H%2h<$92hv$?E-Gf# z=%dKzH0L-vmK{HY72LphF2Cqc|2dAV?lO>&FW5aBVd^;2oNo0)v5N;<1z^F0ADn6U ztVixWEc0B(K+$w8C_8N6+5Lh!N2{A}jC7wH>L9w~JfjuHluf^0;H}t6Ogp zS6F^VK_afJ{IKlU{OtG6cZy)+<4~!rZX$1ADxrT-ts>!#bB%vA{?vS$NXF^4r^-o_ z{K;k26fvh;FTt0R4yDWJcB&X1qLz%5%oX>W}lo;=oq?xCwCv4{rEr8 zRF8K7W9r`Nt%4!@^j9eFSi}3MIm6LAwnQI-BA>S-f^s6Z!Jec(TCH>^j+D1J^^OeAmfux7k`wO4#G%125e>!fia3ldFa>C z-{C{ENRnQicFsM9D0&+GWp5*zI3h_Q#;fBpIEU*rge%hf@89k`$D+`#BUKo^QxaV z32SQ4Ynk#LT5YX>jgz@t`HyDR!W#FabuhovJ$)jPr*_Ec@-d4pn@POjJ^0stWmSMJ z-se-SqK8=LUS@vyHhjbqt5Mf*?gv1N5@QI2~RbwZ_cTz={swvL!rb!N(Fie^B z#&I1zLwrLm8|eU)F`haTM%B~2tEO$bS1=c4AiiW6j(n&_-*@U2mmlvF8et8}M;p0P zN{UGPd-4~fJ!T-K!Z-kaBpCmdnzN=nb-%`)Mxcm^)^@eO z!Z{QMW}#PTa7XCrWv``%tAv!%trnaMvc}x%Si2J?m>E>6mOs!ar>43PdXWIa2Tp~s zY7I1gn6D=LCn-kQgD2Qn6Agp1oxe*hhzh=)M+E<@lOvlt1U;<5l1Ns9>i#c? zOd8(}u4Do*Y*}PgnB9PyEKDuA4Q-zt-RLfnPYaVqB_xz9H6O%o9%31xN zh8V`d9WOg$^IOnd0mhphHd0Et$=LA+ERIK1F1#l9tg7Ata^TJn(3D7P%`cpQRpj=^ z*KrR`I5*B!ZAv$Rw_n@x7~*V9$S}u&^vXmvu%!)VUXz;~pG1+$p46dotP7{v=LJ}F zeD8n=bN-kP+7`?%FIdX33rMX{Kmo?|2-xlG63{In%I2hkTwk2bi5Ql6e7c6sg+rkW zHcuPU;(c(-w+9Y!GQK_;bkctPJ8fR94<^Bl3o!CLrJK%OIjo=h7)@J(~@InNOq+wJ$j(=~00%YhD)3Pu^ji;UW<_)+ z?ZPa@WPR|#sqgT$-hm!9^VpnZCG*KNu)4xHi{?U0gCof-w3DFQ{>lu96ni)V%!n?j zJLp`bu$p4ie1j$Fk%t8BTtK%)`Mg3zN#Am6njuuD;*o5?n3jaaOH;X^Z1fB|`eyz_ z0>_OwynLCDhi5!p5KCfOQCgk<43v5Nx_mT150;ZQHhg=ygJJwg=5z66(s{>Ys6gN1 z3CT2Ho|9)n{Luzk;zMc|?v5^np6tI|a&0uaQ}s&J5ubLw3cCO+4Hu0Q4_JSmCcSTy z_p_j1=4NtdJcQvJ0?mLeHWk%`1LA0>6<|;|wcYbkUq|%ANbp=oibz$4#k$6dzq-&h zMi3cKV{cw~8%SX)A~AxpmxelSd0eScKTlO%{F1e;K;ZnQhdSZyR-yV^z{j>T0XCPN zzfm`5u}s6Ii+4sa33ZP70kQ!vKXr1fojl)RbrHXax59)~bowG0hVR&OTuC_z!M{;^ z?8Ck^$$mzmf#2!M#TJkVqA1SdOZvRlZCc=k9R zfMc;emKATxT~QJSkA0#WmignDC?q_3B`B(?d-oDQcyA28@Cx16%>o=8@5imogPWRx zqgi+>ZUXx&Co&*9^dKh^Ny-Awtx}fY=l7AW1wO-{gyyR~i5>wlK{Mc$p>KVPFS|dV z#2fOwIZ;((8 zRdmVs17hbpMw@C3!xK|VoJv1xb|>#Z%%fS7?U+>*4L zeMoIkZBo+%CAmO*yjIT5>GRX>h_lz|r-h#BNAOb1HQXBNWrhu>2O4^Q_+}WMcKG4+ zO21x6Z`KpPpenu=(2;v_dRL02Tu7vgCe*hIk7+i%s|l*;zCg+%_(4xDy=q`x?*}^# ztX1MY{C1TOS5Lnz{PJR=F2jU0O^}~n)_~7^H7Oj?37l8>v;}So-@ddZxo>pHCEu6 z6&YUB_f|Hqzd94{Xxyfwlruj2V$f!1$&}zo#!I@}~X7Vi>bX#sD^!vnV0!IttF%d{ALV<>b zKd`3RN}xaJDp&2ky~M1}ybU;^nQ7+(GTN_7=D?1x8%#3Eu$%>8C6=q>z{1n&fQ$cR zBU;ZqE_t2Co#mo+q0UxZRM~43+P)=MEU$ohv!r&C^m9hnkY{m%p0MYhVY#UiQ-*SX z7OA;wYvbKC8@mUw9t2!!Ajh?WC9l9+Z8Djx{ZEF#7L@MKh7>Zs|NBwR9*9`w0^tn~95*LbHT>`rl@)uS;G3 zDRSbbb~weB6f=W2p20R>$q11cE9umFHQ}ZSVtyTeS|iZBrJL1>|01;jX6;)zOpToj z#Z+;CkXvSakNJ*w~yObW+&SMRXW2@3jfcF*ZEWD@z_-Q=LBf9BbpC#G`d1ZKInk+WnZ z!~Tu#)aiI$Ke;I|N2m;v9!S`=Z~Z~7wCMK_zvZ`Ua|b|+1zz2%`oSv^PvsSx7NJLA z+=-H0w0}4us*M4OH}0)NbXG-3IPBVCQifg> z#)z7)-za?;_tj9`iO_OhL@2@o^6_j&eq$R|%lJ;%SZ#du=SAMfo_)E#$V!!Bj#d)) zRW4}><|}}w`VG3M?Y@*D7cZ|PMW-7_)0AD(9j>0V#eYr{iV#wNhP}|BM6F~4h3%-* z(t-2wTo&_zY(56^*=`ZfjdoZH*?kruDL3lL2?LW@PQm1vrpGUBu+<3r^uzky$YATm z0v^3`ckRJl^DtTultsmHeXu2}jm8!}7U$v~&BishfO=&{BdCf`_@Dq_jap*}F8y~p zF}vdYVP_?mJ-;`n(@)%rG)d|<`n-b{VKU3Q)TQ)=(D1hP`a5oZp>^{ak(f|Hid(W7W=3vmctUgo{Hk>8+ow`m#a>{# zx|{C;cv_SiTkxhU4L|OBjCn~s4Ai1y`H?u^kVv|mqwAhK9`JPTdWN}p-IVw2$BT>j zE%f^?QKOdNKm}{v>8-UL#w^WVYeVOb3DCr9h_h`gWdZ@fp9$OReBnZMLR=#XustW>g zx)1t(SUAqwWsQU-9-1=UVlxZ7^PbXx*)^Z{4{H#afGJR4hYH|huYddY* zQZWj{nb6qK^8pBA7ACw-=Alo5;!t3tQrC{Q=gw39(roJT8lNymf89N@c;&=KQ4!nh zCPhmP_uLr^jvP!_kHYeXGS=PaD|!9h{~r9Lz6e?Ceb8V%t*@qdA_~ZuHYYN$Y7wn$ zKP_VUHV5SvaSCu(mNi)oDv(S&@;zl`{<_xBKqoexVze#5)0?9DZoM>RqQwLS?WXl zv=K(T)(P#qDWu_5^>NWX7R-9NfqPN6K;NAhm2qBkrtT@Kta9glrz^~p5W1to-Cmv= zsaKiui9gn}KXyg!DyeZA7hdiFO1!N3Mw0R|3>Nd`jfx=WDmn^B9e>;xytpGS4N zsY@+K(D2|hG@%g^t6tkJ>c`vFGfW}vOs?X!^Ub{U+0OIup^@ID-p=ARJF?zVciNRo zh-`fn`^S=`BHDl&Z|v6US+L{Aj4IE!axUB`*ZfCx()2Xqx$bzZ`#>Ajrq7`k3+02| z`n0Z=D^bBx6Y0rsvU9VXfv^7|v3PP=8jDAQ9@bvjb-}ITlszwn5xRma0asp16L(Ff zVw=?z2+KaxSoZGKy6O*u>jJ;iY2Gx*yC5gMS6BM6y5zh~a(AwTNaO&QgouJEUueaQ z4gJSD0z>R7OslZu=o7HLiZ=kFw}>#9sR75-Y!0_OqnhM(VRv}_hD`T@f(LzH-ziDX z868y^`@$UTD+pwp?Q*mI6q8OL&-4|tOPT}o!9r#rkrQY61%F^tOTiO}6jBy@=(_uw zANzbwR0jw=LXmobS#L~jbz^0Tw}VQSOfEvzDeCJ@gs7(#VCHJT3Gg^dVY#$*4`FCQ z!nIDE&#)u~&LAQ`iG<*h!<5_(nHqHgUpgQDifx!ep;=3%f^|MRFUpVKEJaM~oqW4H zj}7cWm*0zAQIw3Krwe{E{QJ{geIF@i!6{?=FKmVB93~Oud^s zn`9ghS#z~%l*vIV2^)%^ls?Btr}7gBM?qw(u206{%iT{~@MI`I)s(+r%LuxCBPeO2 z8a-^^de$F#1_m!42P@)7FkcKb$2%`ns&~(b<6TW!Yi>a;#R<{V?zT*huePdsLoM*On_#-BkcG;RDU0PLMbLqJXvYA66 zt$9g&OH6uR);Y49H+>gLy#9iADKEaN)2tf92k#X^2NOcRy$a>1tNjF@xM;=ev-=qB z94Eq^_5#KJFs(Kx*C;UC91D(BiXwhqM?Sf~Dao+6{8(!>^w#o5&D1IvUqFc%B+*8A zJ+apHO~A%rcjDRw<%BO`b5_V#vTCn=(L5y9nZ~%YdussOICu(({P{ND_dRt|-M!Mm zqw!K$qX0q&A1b~8EeE&9DKm+qBU=rw3K1lUS>>q{rdvk=x~EF$w~8-3tVfVvRbXFF}CEZ@KR|JG91|WaeppycT?77g-KYC=yzqac0nW>~qhWwd{;PNu5x_ z@&yk<$d@P_q$lg$t*=7q3CuZecv=5sl)IR0_lV$gGjb8;y}xjydfT$rKo8dD)>OZV`cE$L)$Ua`oP?V zxV~86usXV&RExdnyGFlYF3cyr_IV@mv!z?tb8!7rFD-AVzbg!eIYRb%^Nd5#HgTvZ zGZ5|dqMtHCVn@N8NX~3QLO+Mo$GgA5s?6Wm;eok}qc~&^>waVb&Y~h7IPK1&jvHEH z%zp4FQqP4i(D-;OUC`jY`$r?$Y#Z6uBsm3uB;OHtTP2+yh*~+~7{!q!qr5=l893FE zikUMMW-0dyDz*Lj{?j@`v-|0Q_n51V9BLvqK!%&m&?>Dv`YnbSvT#2oHTBp89YmTi z((q%5=`fwzBsEB-?nQ@IzRvl}fw2aQ(X5WkTz)+xW! z4L6AXfc4!E;P|#tM~##G{H=Uy|C-# z-&AaG*7tu^*wt&$uj&qcY~D*dwf-r08hTP+bsICXUHj}*+vtroF^v6}6GjmVSai^~ zH}fhTV~EEofg5eq6@DC_Q*qu?8~a&I2QmuD+i+=lPZ)i9H;T-Xe^I4?N6o=#sd0P< zT|qnHgghf6X^Z8GPrAV-I?7FSp*C-!QIrO4Mztyce*5cD#*>GGvBf$mH9f`V-}-Br zGOrl4=4#h#9HH;NCTh-bgm*sg%G|?A%jZTK><|7I-<C$0 zINQng00z|ax?9})AY^xGQ31g91s(pdC=2z0XY#VuT^^`430dEE$slDM+rYW)soTP0 zo*#MjV&Q(ybCS_Yk)_@Q27`XQkGG(b=L^rxYvc2pbbAjP3cqHP%?FUxH>S=#2-+%s z3nPZS`pUu1xti5|JPk+2bnmxlEjm(O&Q~A%?|)W=YfHweZ-T^wn<`&t7k} z+MQ`=X!yA%aKy_?^mc5*YhS#H;<8T=XMCb`KBu2r$a?-0`(71)FY=W~$ztBL=5E-w zTrccVWB-HooDrL}hi>U)_wy~-ufD3wgD>$s3X@r_ zB#W?BM}eKL$C|XCD^xn;I_8mwOV^w2yV;aWycx3ur3X>00WSyD?I2uYExK{=4G=bW z6i9;y(bLYZMIorLU!Jzp$Vrji74gmA=~x?Qjj4vS5N^n9AZT5(ze(uH#Ms{8JP03B z98lXPU%D715;3y!zHn2c1+C8Nb1sMln%^E1znPtu({c!T*|49HrZ)}S%cf`9j(s*? zsgLOLWaFLw95C<(Fi|G&smWov5akufh-U(^ozj(e;@D)W>vtU>i!Yd(T<3_bm(=Ay zLePwEUHR5zmGxVD8_JoKaOW48{L`&)$(-+)FiFD@gnI)piiVaNrO#E#O zKhFoqqbyM~=$Ozm1o@V==ncyK^@qZEH)00)+HDxMwCD1Ta;~1Wq|hMAui{(i_5wOFi?fVh-bTo`pYwbEutzU0BzseBz5>;4_$M z&H+1ch@Qo7C?k@Mq7FS?hUSKOst;$Nr?n4zrltfeHx+gUd{+oEX&uPRJ-ceHC+;Y? z4Utg0ND7;YtR^TogIOo9JFb*tgK1Io9ajTOFF}{3PT;bWi6XHS)&hzJ$?e=A#5eS7 zY88Y1+98Nffg+>$f^pOKZIQ|^3U6Y%PwkoQrtrRtjYS>hFd**MhI^DX*1?$8muH{| z8fft}Mdqi<)sZiYbK(9rLF%-MboGs+?rXMaCv5pC`k5VyY<45|@cd<^ot5^;p+x+v zQ3h4OFBzJADxdnG5V9Jpo;6H&a(l|t(lAl9B=AP8ak?XAyJ~>@t1*+J(DUPSsrO4a zZ)d%eu3GF(N|kEa5S5+`4BSC?E#LfZpk;O6A%XMab*oT00=jMTSU}u#Wt$(Ved@N% z%|a~Mc*qs(uz|XBe>d~fct*^wdGPiPPEWeQ*S=g$n+6Dt;xOe#l0k5eu`_lY9w-bubQ zmbq(Z{LnRPSo3G-&#jgsm zvJ!0x@(IN%aDUNXV#*mm`bBF5ey|__W&FbjSb&q7-yauVnQ+l)3IU zyd*$k)TqAiRCrI`N#Sc$PDCBuRu@c?Y)sK3AQ37eA=8(|oAu|#Tg==m(8`Yzy1$tE zS^1*-q}9ES^EW+6@fbT1<3~Ljm}bb<`zA5_s*g!+&EUOP%&>PN-@!}`vdf{;8RQFO zU>smv3f`)F34J%kC4}`hJhT3s(=oJ&4AL0!V!6iu7=*JCCwv*5Nydaf0yY~)&cu3a z9rifbP2_}dsAH(n#wuEd&x|YkUh?q*Z@C34)?8*Y7?7^&KHc$NvO`ETJQK ztDlj_Kbf%zR*G%B4s~B7dM;kQ;z+c0@kHP{m)C3zr%s8t?*SW{@Qj(WNz}M^R!7I3 zaf0NlhmoN&<+F4_{_Vl%8M`8t?}W-#vdx=#CUV1V4Hvf=rL4xV+VngP>s_uSpyoUp z{PTdQOXl9d#A8UGIS|KF4?ZNqscUKQ2?g zi!YD>0V?I$x5ehP-fm`m;IpvWuVdW_w;-^LjJP_Rz%3 zq4TxktrZ|szFPL-58eVl4KaXcM*q+U$DvDVVatZUzaw$Ue%ok)% zb9hT!dy_cVd`M^S5LDwi&ZyP+U8dV?@q(+4-;)h_y#7>z?yVkBY~2;t`K5uCT#qJx z8#zb-b~S9I-cm2yJ${nuQJ;!#KCl+AUn&TQ+s$kj))KEIzaA_*tFWR~)g|kCiRT^= z5Grw@p3}r==j|%e=x5vA4x=$rMoZ`wQrNnM|2hqobG68A;hp!$`OjG_pakUoJq!cDl*UnpqEWaY4YKC?saldLV;<>)=1vi~4bya&g3U zYvHz=T5p-lh;-ggMRIt#kcc-cx zPt184c!{sD&OPU1^BmoB;xs{#`zfmaqJ}_KSr|7 z#3!}V>nVG;{yU>;Y$1O#zAohK2N-0U3_0Z(lXsUlCs45&=Y4k7u-J7rycs9Ac{k#= zqD3}FO<4Y6=i|`V1d@42C?Co7-6FtOcUk57Tym+qJY0`=G?{O+f6shqXv8a!R!+OK zYLw}Vx4vuRt0IKu&({;H@u(TwRi1{nd|KaW|DBH0=>?|J(8R$dGJq>0Jaso_DR{61 zra?+53{Vn1gHcz?n-ho$4~Zg+4AkHHpeQEIFpVJOOlVI&ZXGjswb~hdU~5z4?i_kJ z@_gau$4$d2^EOEi5bxExg5?GeZ2%CHW#)=vgb0y0)v?sDTpdP}>DV z$trL#!=T(Q9!1*e@SEg7!(3pzlaDg%a*#P>CeTrbFhtjNF_P6|SjZxYH zkYCpTp5a!o@XA$ktn8mS6Bnkic9c{C=UgBxZ7kw+vOcDM%XX8}UVgG@PO;1d-U{R_ zSy0*_7v=gk`wxWBozqqP-2?GpFCy_k=&<0fQ(P3I4GS91ghYcz!+^ z&bxK*yHz#iYjr~PJsq>LD>S_cd^>@0-OXQEAm)-?nmZ6$%P3H={f({=Qmm0fk`jAL>GE{Ed zJbH29Ey|dG!>np-%azS%R3LwGeYke*3a+xS3;MZWT{@WCDt%Y1LNRC7OH&myYm}sy z+gXJ95(OZN=y#%oAOF8knOtmR>Cz6&rlM;G1)J%9fv=5*CV<$mgtPEpv0=bb>pN&J z%zs*Pmum$9B=P`|BOidhhZ$0bmbz|F9SF@In1!@F49nFu0-PUDR`7|e_ff>Nx(>)(L1fNo0buS;+0 z4YM9F6wI~}>}&%G+$7HB0Q|y|B;XeK*2#UOP&fg|{X4kF8gLI@0ETaSKUFg%3INtH z6af|GSpD-OURrUV}fN2U==e__JFU zA=7CzQ6QrC&xiExB^WgSQ*FdKfEfG-KkAZMb4y9>Hp~FTZKKW5Vo>7N1OdSc!GOZuOAR4M?NCuz~_N9 z-~-cHY$e)~-l`EZfUdCKx22^wDL)6(m_xj{nMEj<}yYqJ#h*|veSBYCW6BEf50DJ;1cb_BIXdiF{QV8#s><1W63C!M- zyIZuWeF54hCSJO`>x}$c#J{8gvg&^|Z69p}IBUuk{$C{U{D%ZPTd3eYv+lpN1X$-k zWNB0Q)`;sPhwY=1@C5G}|1T0CNKsrVls&jdWBH>0l}b6D(Lc3?T)Ma~H88TW;roh( z{?RUA-gGoxeGr(?nc*;rFxh&ro(h3PKCb1o+cL8v7CSe;_jh*clh;#x?^DsGd$Fw8REdCkC$unSp7@p z`45n3YZ6jr6xfY9!aEvXK&I+^t*muoGky{wylsz?`OL)u{48%RtaUd<9L)+$PmMH{ zMyvs_$MK%={+&)@lC%K;Ps}zjd~>JB?{KQ*q5Ml*Y$xJ_2mOIX0j?cLaR$zVB!7{F zBljOrNmFaY>QXf@!1qs3qP`pE1S06ln)M{W+0F(B{;kqTxef4K!we@zfwdQOpHrLz z44`QY!5^Bfc%<&2__xOal#ptI7KIGQ0^Ys@#_eU`6!2GFq#oK^ETF|v&`SDvA}jxv z?L=)Ozzx4Yg}YM%;Uoa@z>0*Vg)|c8e&IhDdG6mEMbxkj$JBG~lq>^G^RW=zAJwM- zS26p~`%h^GRy>di-~@m8zOaCRfG&V7ohd-~{twY;Z*BjUg@7WItnELJZ27n3|5DOk z91t9hbYBIn!~(Jtaw*O=fUbRK;JZX1!#!nx5&$%h_;q!F@bKG#BEiFQwY(x&P1WVv zgA#v~-!Jj6#vry?_jNfr1|DYLzX9mkeZ~LPF#t>aKYC$F7y_uN3R33mr(mP%Kyj`< zc(@y}alfhiY~=rHctPs#bh|`gM)+JjH2o=YJ^_{Y#~pu*156}91OC27QU7cJdm;z@ zKs;zIG#Q8<0CWiXXZPa%>R!NyKXe%l=0I zivvRmxqp}tFwb2mZFS)H78H6!Lv)l4WTNP}n+b zpcV}X3(Rx>(*U^g#{h7{FqH@OJXzi|2L?Cezm&dj8NbZrK)?gj_;AqEA5`HwQo!FT z{6EGOAk;tl<3Bo$DtZ-N><|5;2M!F1VA=>=8vSD^{j#W5py4epP>ZXQ#lHsIzGe<) zhJUx}AI%0zTfg?Fitmq}Kh15B0>GF3$H@P?;isM~Ycil0e|3aE@Y4HhwEaJf^}z4| zRh5P~3^i2jPewI=SnK`^@}HLb*XWPMFp>InaJhd?7Q?^OJppDUc0jFYR{u{2)j7fo zcAvsq;2!Wtrn5R7;P7=7!v_pdI`|>y9P`VSUU?_UAsZC4s_511amQJ=F8U|8Yx;xSG(ODA2l;*L z+g!djYwE?67E?Kr(C|};oxepjcK%^-NWm!H*huRG;@lY zk(-I$niq*IE4(ZBpgLEBVm)VG2&d=rx6D6qC8FFbB=ostshRMXijgb)FUPZ@f?fze z=@QaZ&b_Z#rWz$Mg8bNTmo+K-Fgw{TJt#aU(v`kKqR((mj{(Rwx?OzV`n(_6sB$C= z=_G?U9RAJr&nxMWi$tSCwfk*0=&lf6Qhj+%zoFlim~TH4Pc~Y4OaEs<8N60m^r=z2 z=A@HfNI`c6|Ce*}?iD;Cg~Mtu?MD!gPV?+*vA?#^`+qD*M5*-$Uwk}%@cf5+Mo1^1 zHn&Nqt7PNV+BFS|0wuxiS_p@%lM;ZTxu`>s`|ff zn!hpb@0P6~b^gEU;Nu<;0nRgl!PobHf5Q#Zaa=Y~70oX`{A{{6&5%ztIkjEYajSIzX>smfhp7Jn&~xxV zXOqI>n_+CevR?w09AE0*f1_n#1|%_9M7x9)@NdD{8S269+H`&>k^^4>jr#%p#7ke< zsQQabj&xxa=NCk^oYa4qaI@{aKKSGuXK?!UIl@r?>m$Xs%@$T6x+KcrbPe2keNAiq zM{wVvej|;2(Nh0FEM=oJX3l%{%vV;5OFPTak+oPy7=GHH4YkIo-fxVk6B{;OxT(Qr u{NGGP|2N7UdT)?dtn@a!)z%{7O@W2i&{019%jcFHot`}f&{9Fa5C0!;qR8_A literal 0 HcmV?d00001 diff --git a/sections/error.md b/sections/error.md index d6a077d..96f23a9 100644 --- a/sections/error.md +++ b/sections/error.md @@ -134,7 +134,7 @@ Error: test error 错误栈中仅输出到 test 函数内调用的地方位置, 再往上 main 的调用信息就丢失了. 也就是说如果你的函数调用深度比较深的情况下, 你使用异步调用某个函数出错了的情况下追溯这个异步的调用是一个很困难的事情, 因为其之上的栈都已经丢失了. 如果你用过 [async](https://github.com/caolan/async) 之类的模块, 你还可能发现, 报错的 stack 会非常的长而且曲折, 光看 stack 很难去定位问题. -这项目不大/作者清楚的情况下不是问题, 但是当项目大起来, 开发人员多起来之后, 这样追溯错误会变得异常痛苦. 关于这个问题, 在上文中提到 [错误处理的最佳实践](https://cnodejs.org/topic/55714dfac4e7fbea6e9a2e5d) 中, 关于 `编写新函数的具体建议` 那一带的内容有描述到. 通过使用 [verror](https://www.npmjs.com/package/verror) 这样的方式, 让 Error 一层层封装, 并在每一层将错误的信息一层层的包上, 最后拿到的 Error 直接可以从 message 中获取用于定位问题的关键信息. +这在项目不大/作者清楚的情况下不是问题, 但是当项目大起来, 开发人员多起来之后, 这样追溯错误会变得异常痛苦. 关于这个问题, 在上文中提到 [错误处理的最佳实践](https://cnodejs.org/topic/55714dfac4e7fbea6e9a2e5d) 中, 关于 `编写新函数的具体建议` 那一带的内容有描述到. 通过使用 [verror](https://www.npmjs.com/package/verror) 这样的方式, 让 Error 一层层封装, 并在每一层将错误的信息一层层的包上, 最后拿到的 Error 直接可以从 message 中获取用于定位问题的关键信息. 以昨天的数据为准(2017-3-13)各位只要对比一下看看 npm 上上个月 [verror](https://www.npmjs.com/package/verror) 的下载量 `1100w` 比 [express](https://www.npmjs.com/package/express) 的 `1070w` 还高. 应该就能感受到这种写法有多流行了. diff --git a/sections/module.md b/sections/module.md index 4701081..d7d69b8 100644 --- a/sections/module.md +++ b/sections/module.md @@ -1,8 +1,9 @@ # 模块 -* [`[Basic]` 模块机制](https://github.com/ElemeFE/node-interview/blob/master/sections/module.md#模块机制) -* [`[Basic]` 热更新](https://github.com/ElemeFE/node-interview/blob/master/sections/module.md#热更新) -* [`[Basic]` 上下文](https://github.com/ElemeFE/node-interview/blob/master/sections/module.md#上下文) +* [`[Basic]` 模块机制](#模块机制) +* [`[Basic]` 热更新](#热更新) +* [`[Basic]` 上下文](#上下文) +* [`[Basic]` 包管理](#包管理) ## 常见问题 @@ -17,7 +18,8 @@ 其他还有很多内容也是属于很 '基础' 的 Node.js 问题 (例如异步/线程等等), 但是由于归类的问题并没有放在这个分类中. 所以这里只简单讲几个之后没归类的基础问题. -### 模块机制 + +## 模块机制 node 的基础中毫无疑问的应该是有关于模块机制的方面的, 也即 `require` 这个内置功能的一些原理的问题. @@ -68,7 +70,7 @@ function require(...) { 再晋级一点, 众所周知, node 的模块机制是基于 [`CommonJS`](http://javascript.ruanyifeng.com/nodejs/module.html) 规范的. 对于从前端转 node 的同学, 如果面试官想问的难一点会考验关于 [`CommonJS`](http://javascript.ruanyifeng.com/nodejs/module.html) 的一些问题. 比如比较 `AMD`, `CMD`, [`CommonJS`](http://javascript.ruanyifeng.com/nodejs/module.html) 三者的区别, 包括询问关于 node 中 `require` 的实现原理等. -### 热更新 +## 热更新 从面试官的角度看, `热更新` 是很多程序常见的问题. 对客户端而言, 热更新意味着不用换包, 当然也包含着 md5 校验/差异更新等复杂问题; 对服务端而言, 热更新意味着服务不用重启, 这样可用性较高同时也优雅和有逼格. 问的过程中可以一定程度的暴露应聘程序员的水平. @@ -80,7 +82,7 @@ function require(...) { 所以这个问题其实本身其实是值得商榷的, 可能是典型的 [`X-Y Problem`](http://coolshell.cn/articles/10804.html), 不过聊起来确实是可以暴露水平. -### 上下文 +## 上下文 如果你已经了解 ①② 那么你也应该了解, 对于 Node.js 而言, 正常情况下只有一个上下文, 甚至于内置的很多方面例如 `require` 的实现只是在启动的时候运行了[内置的函数](https://github.com/nodejs/node/tree/master/lib). @@ -111,3 +113,22 @@ vm.runInThisContext(code)(require); 这种执行方式与 eval 和 Function 有明显的区别. 关于 VM 更多的一些接口可以先阅读[官方文档 VM (虚拟机)](https://nodejs.org/dist/latest-v6.x/docs/api/vm.html) 讲完这个知识点, 这里留下一个简单的问题, 既然可以通过新的上下文来避免污染, 那么`为什么 Node.js 不给每一个 `.js` 文件以独立的上下文来避免作用域被污染?` (反应不过来的同学还是别投简历了, 微笑脸) + + +## 包管理 + + +整理中... + +为什么我装了全局, 但是提示我 not found + +npm +yarn + +锁版本 + +lerna:一个用户管理多个包模块的工具。 + +left-pad事件 + +greenkeeper 等 diff --git a/sections/storage.md b/sections/storage.md new file mode 100644 index 0000000..67dacf0 --- /dev/null +++ b/sections/storage.md @@ -0,0 +1,139 @@ +# 存储 + +* `[Point]` Sql +* `[Point]` NoSql +* `[Point]` 缓存 +* `[Point]` 数据一致性 + +## 简介 + +科班的同学可以了解一下[数据库范式](http://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html), 在 ElemeFe 面试不会问, 但是其他地方可能会问 (比如阿里). + +> 备份数据库与 M/S, M/M 等部署方式的区别? + +关于数据库基于各种模式的特点全部可以通过以下图片分清: + +![storage](/assets/storage.jpeg) + +图片出处:Google App Engine 的 co-founder Ryan Barrett 在 2009 年的 google i/o 上的演讲 [《Transaction Across DataCenter》](http://snarfed.org/transactions_across_datacenters_io.html)(视频: http://www.youtube.com/watch?v=srOgpXECblk) + + +## Mysql + +### 存储引擎 + +|attr|MyISAM|InnoDB| +|----|----|----| +|Locking|Table-level|Row-level| +|designed for|need of speed|high volume of data| +|foreign keys | × (DBMS) | ✓ (RDBMS)| +|transaction | × | ✓ | +|fulltext search | ✓ | × | +|scene| lots of select | lots of insert/update | +|count rows| fast | slow | +|auto_increment | fast | slow | + +* 你的数据库有外键吗? +* 你需要事务支持吗? +* 你需要全文索引吗? +* 你经常使用什么样的查询模式? +* 你的数据有多大? + +参见 [MYSQL: INNODB 还是 MYISAM?](http://coolshell.cn/articles/652.html) + +### 索引 + +索引是用空间换时间的一种优化策略. 推荐阅读: [mysql索引类型](http://www.cnblogs.com/cq-home/p/3482101.html) + +## Mongodb + +> Monogdb 连接问题(超时/断开等)有可能是什么问题导致的? + +* 网络问题 +* 任务跑不完, 超过了 driver 的默认链接超时时间 (如 30s) +* Monogdb 宕机了 +* 超过了连接空闲时间 (connection idle time) 被断开 +* fd 不够用 (ulimit 设置) +* mongodb 最大连接数不够用 (可能是连接未复用导致) +* etc... + + +replset + +aggregate + +整理中 + +## 数据一致性 + +关于数据一致性推荐看陈皓的[分布式系统的事务处理](http://www.infoq.com/cn/articles/distributed-system-transaction-processing) + +> 什么情况下数据会出现脏数据? 如何避免? + +* 从 A 帐号中把余额读出来 +* 对 A 帐号做减法操作 +* 把结果写回 A 帐号中 +* 从 B 帐号中把余额读出来 +* 对 B 帐号做加法操作 +* 把结果写回 B 帐号中 + +为了数据的一致性, 这6件事, 要么都成功做完, 要么都不成功, 而且这个操作的过程中, 对A、B帐号的其它访问必需锁死, 所谓锁死就是要排除其它的读写操作, 否则就会出现脏数据 ---- 即数据一致性的问题. + +这个问题并不仅仅出现在数据库操作中, 普通的并发以及并行操作都可能导致出现脏数据. 避免出现脏数据通常是从架构上避免或者采用事务的思想处理. + +### 矛盾 + +* 1)要想让数据有高可用性,就得写多份数据 +* 2)写多份的问题会导致数据一致性的问题 +* 3)数据一致性的问题又会引发性能问题 + +强一致性必然导致性能短板, 而弱一致性则有很好的性能但是存在数据安全(灾备数据丢失)/一致性(脏读/脏写等)的问题. + +目前 Node.js 业内流行的主要是与 Mongodb 配合, 在数据一致性方面属于短板. + +### 事务 + +事务并不仅仅是 sql 数据库中的一个功能, 也是分布式系统开发中的一个思想, 事务在分布式的问题中可以称为 "两阶段提交" (一下引用陈皓原文) + +第一阶段: + +* 协调者会问所有的参与者结点,是否可以执行提交操作。 +* 各个参与者开始事务执行的准备工作:如:为资源上锁,预留资源,写undo/redo log…… +* 参与者响应协调者,如果事务的准备工作成功,则回应“可以提交”,否则回应“拒绝提交”。 + +第二阶段: + +* 如果所有的参与者都回应“可以提交”,那么,协调者向所有的参与者发送“正式提交”的命令。参与者完成正式提交,并释放所有资源,然后回应“完成”,协调者收集各结点的“完成”回应后结束这个Global Transaction。 +* 如果有一个参与者回应“拒绝提交”,那么,协调者向所有的参与者发送“回滚操作”,并释放所有资源,然后回应“回滚完成”,协调者收集各结点的“回滚”回应后,取消这个Global Transaction。 + +异常: + +* 如果第一阶段中,参与者没有收到询问请求,或是参与者的回应没有到达协调者。那么,需要协调者做超时处理,一旦超时,可以当作失败,也可以重试。 +* 如果第二阶段中,正式提交发出后,如果有的参与者没有收到,或是参与者提交/回滚后的确认信息没有返回,一旦参与者的回应超时,要么重试,要么把那个参与者标记为问题结点剔除整个集群,这样可以保证服务结点都是数据一致性的。 +* 第二阶段中,如果参与者收不到协调者的commit/fallback指令,参与者将处于“状态未知”阶段,参与者完全不知道要怎么办。 + + +## 缓存 + +> redis 与 memcached 的区别? + +|attr|memcached|redis| +|----|----|----| +|struct|key/value|key/value + list, set, hash etc. | +|backup | × | ✓ | +|Persistence | × | ✓ | +|transcations | × | ✓ | +|consistency | strong (by cas) | weak | +|thread | multi | signle | +|memory | physical | physical & swap | + + +## 其他 + +zookeeper +kafka +storm +hadoop +spark + +