From 0057c6824e16388664f74e4ae55ad1c9c42dccb5 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 13 Mar 2018 11:56:49 +0800 Subject: [PATCH] auto commit --- notes/计算机操作系统.md | 148 ++++++++++-------- pics/b1fa0453-a4b0-4eae-a352-48acca8fff74.png | Bin 0 -> 25600 bytes 2 files changed, 79 insertions(+), 69 deletions(-) create mode 100644 pics/b1fa0453-a4b0-4eae-a352-48acca8fff74.png diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 451e7181..21c10f7f 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -49,18 +49,19 @@ * [死锁的必要条件](#死锁的必要条件) * [死锁的处理方法](#死锁的处理方法) * [1. 鸵鸟策略](#1-鸵鸟策略) - * [2. 死锁预防](#2-死锁预防) - * [2.1 破坏互斥条件](#21-破坏互斥条件) - * [2.2 破坏占有和等待条件](#22-破坏占有和等待条件) - * [2.3 破坏不可抢占条件](#23-破坏不可抢占条件) - * [2.4 破坏环路等待](#24-破坏环路等待) - * [3. 死锁避免](#3-死锁避免) - * [3.1 安全状态](#31-安全状态) - * [3.2 单个资源的银行家算法](#32-单个资源的银行家算法) - * [3.3 多个资源的银行家算法](#33-多个资源的银行家算法) - * [4. 死锁检测与死锁恢复](#4-死锁检测与死锁恢复) - * [4.1 死锁检测算法](#41-死锁检测算法) - * [4.2 死锁恢复](#42-死锁恢复) + * [2. 死锁检测与死锁恢复](#2-死锁检测与死锁恢复) + * [2.1 每种类型一个资源的死锁检测](#21-每种类型一个资源的死锁检测) + * [2.2 每种类型多个资源的死锁检测](#22-每种类型多个资源的死锁检测) + * [2.3 死锁恢复](#23-死锁恢复) + * [3. 死锁预防](#3-死锁预防) + * [3.1 破坏互斥条件](#31-破坏互斥条件) + * [3.2 破坏占有和等待条件](#32-破坏占有和等待条件) + * [3.3 破坏不可抢占条件](#33-破坏不可抢占条件) + * [3.4 破坏环路等待](#34-破坏环路等待) + * [4. 死锁避免](#4-死锁避免) + * [4.1 安全状态](#41-安全状态) + * [4.2 单个资源的银行家算法](#42-单个资源的银行家算法) + * [4.3 多个资源的银行家算法](#43-多个资源的银行家算法) * [第四章 存储器管理](#第四章-存储器管理) * [虚拟内存](#虚拟内存) * [分页与分段](#分页与分段) @@ -548,63 +549,21 @@ void philosopher(int i) { 这种策略不可取。 -### 2. 死锁预防 - -在程序运行之前预防发生死锁。 - -#### 2.1 破坏互斥条件 - -例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。 - -#### 2.2 破坏占有和等待条件 - -一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。 - -#### 2.3 破坏不可抢占条件 - -#### 2.4 破坏环路等待 - -给资源统一编号,进程只能按编号顺序来请求资源。 - -### 3. 死锁避免 - -在程序运行时避免发生死锁。 - -#### 3.1 安全状态 - -

- -图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。 - -定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。 - -#### 3.2 单个资源的银行家算法 - -一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。 - -

- -上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。 - -#### 3.3 多个资源的银行家算法 - -

- -上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。 - -检查一个状态是否安全的算法如下: - -- 查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。 -- 假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。 -- 重复以上两步,直到所有进程都标记为终止,则状态时安全的。 - -### 4. 死锁检测与死锁恢复 +### 2. 死锁检测与死锁恢复 不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。 -#### 4.1 死锁检测算法 +#### 2.1 每种类型一个资源的死锁检测 -死锁检测的基本思想是,如果一个进程所请求的资源能够被满足,那么就让它执行,释放它拥有的所有资源,然后让其它能满足条件的进程执行。 +

+ +上图中表示资源分配图,其中方框表示资源,圆圈表示进程。资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。 + +图 a 可以抽取出环,如图 b,这就满足了环路等待条件,因此检测到死锁的存在。 + +每种类型一个资源的死锁检测算法就是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是发生了死锁。 + +#### 2.2 每种类型多个资源的死锁检测

@@ -625,12 +584,63 @@ void philosopher(int i) { 2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。 3. 如果没有这样一个进程,算法终止。 -可以看到,死锁检测和银行家算法中判断是否为安全状态的方法类似。 - -#### 4.2 死锁恢复 +#### 2.3 死锁恢复 - 利用抢占恢复 -- 杀死进程 +- 利用回滚恢复 +- 通过杀死进程恢复 + +### 3. 死锁预防 + +在程序运行之前预防发生死锁。 + +#### 3.1 破坏互斥条件 + +例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。 + +#### 3.2 破坏占有和等待条件 + +一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。 + +#### 3.3 破坏不可抢占条件 + +#### 3.4 破坏环路等待 + +给资源统一编号,进程只能按编号顺序来请求资源。 + +### 4. 死锁避免 + +在程序运行时避免发生死锁。 + +#### 4.1 安全状态 + +

+ +图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。 + +定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。 + +安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。 + +#### 4.2 单个资源的银行家算法 + +一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。 + +

+ +上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。 + +#### 4.3 多个资源的银行家算法 + +

+ +上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。 + +检查一个状态是否安全的算法如下: + +- 查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。 +- 假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。 +- 重复以上两步,直到所有进程都标记为终止,则状态时安全的。 # 第四章 存储器管理 diff --git a/pics/b1fa0453-a4b0-4eae-a352-48acca8fff74.png b/pics/b1fa0453-a4b0-4eae-a352-48acca8fff74.png new file mode 100644 index 0000000000000000000000000000000000000000..842b2f6cbad3096365f308283be840cbb63b25de GIT binary patch literal 25600 zcmd?RcTiM8_bsX-Du^JGksM_ZkR&-s&I~w1mN?`jISD9Paz?TvX&5p{k|ZKoK*>o^ z$r;HE>Gk-1zx(R_f9uw*dQ@4|jOX;})4hB5+H0-mEmTAC9zHexwQJYzDJ#ioU%Pe# ze(l7`<8tcRGy#f<{P zX60YLten1md9py1CFVtVb$M2CNkB|&DG&w;7IR;{|H*477M~3AxuXMzEotpXBFA$! zSeXGCeZUE$Mz(0d)y>9?i?icA)imx$y5&ZR{tRx*-%!RaqL{;tqM)asp)3L-c%EXM zLIRUKv>Kt@#IxtOF;-G^#kx}MJTEy~{=zU@*nSKhIwW~UkSXNcb-KUea<~rnxbdRi ziS`x|U9?IHquI8r{OFB&XXIL7uZWzS9LnH! zaf0{$fRM{#5Ag-njOWf=%&mLWsEoUKXkK1k4F96TmoHzw*H~+M7=3j5N!=YwJCa+q z9e8y{@3}eohQj0(v3@n8JzqJ=^l9dy_1lOZVgh1xei*BSTDB-zflA6SJyq^Oob7Nv z-rizwFd3)Ls{L~fjZ!cJ3P+n$KajGwZ*j7dQd6U2!(W~5nQcwiVy2Um7+5Jt^=qu; z>z#g5mPSO-L?HVZF3;w#(9*2zBT4L<>-M?d=34v`m=y_6Fqn1w9x6En1+)dyv^@w- z;%jhzzCQ%fJ3T#JvyX^))WQp+`udL70(M{26ig9q7^2-cXj4EAEC`Ueo4h^+#F_WE50X#UW+GnXCu18eA5_TEn7MFoQn6 zzUF`bbYiH_;ure6yKj5#%#BUlC)V;cL-D=VDKjW;YRcD4mQZ%nPUo}yUhiz;e~$`2 zQmFp7kF#PmZd0*~FDX+npFBDuVwge}eyho2Bh{|Zu*J8wwX3yIGq*e=8Sx9sR|rC@ z*h-X&n^8jT-IHgBV++zqIk~m|T_j|E+JInfnwVCsiz|D#)x?A#yNZp~M1Wb<8C|M?_9x>VrWz7aP!XfcUo;hV zy-i%E5z+5^v|49}T)a@v64nYts1i8w*oS1{8hqGMok}SCp*^ed`w8s90RpPT$5vdN z#cL6E*~5ni&zUkb-H`PUy(1BF$*T5f?&{8$1NeB4fDj+zHZgGlebGI5L))#G8ic~d z&cz{_vNFndy|@UrAIVIS4v|ynh&9|>8H!8gGBgK~Z%4pE^@~>{GIRMu#h;B&Q_#|5 zo`&jmLBz2y@qWdO(`EDmfq(yO3c+{CSx;BY!$ZMTeFAv<*^d$wJ0w~pM#(=#P}>hu z3zw5i4#>(st#~5JjnR*3`RI47;qc-wnWUo@fw8=p=>_e~K;TrhrRx2ce7*?=c#Sif zx2%&T1%@Xq$Ix($SRMEJ`3fp^$(8`aMYHTz@!k6*21_XLJM#c9p>!5 z6=aFDB*1Z#)x14-HBM%1ZX`ijXjZy7-q*`9bXO@dLK6!8d zP@ou2qhFJ(FoR3+QQ~Wzrql&Y{hK-nhi;L~t8a|Lf(v8_A^7J8{_%&Bd>^J%?cTGf zwVdzu>(x1=Q?vJ^rWyOnH`HkLLqT{u6_?XRyxMcX89{d&q@yQ-5`B z5PZvn*-;?Ht;Z!!v;_u=AJ4jBnEPdpPLVGQ_b4mviso*jxugPObWYVCNi4qew5wIW z6_~|m8F?8It+2de|NZ?N5Q6>4zUZd;FC3Ns=BzfI}{Yajo@ll^{YGWgIed=@5&g% zHbNTV_ja|hv|@!7jCl!fObVQ{32xfQ;KTK)&3^Q9Hn=X~bDM|)?}6J7S6E1zj5}Fh4)Ch^VrDzmGm=pq*1fJ10UAESS!lydVL+|KoGBY62|3f z*{*uGoZ02LD*hti5dsoTcUBgcI#>QeOc0llDvh8~tKp^DtD`AvOh!HnjMV`n*v_nr zH|i5ePKY~6XSgsRG%wc?cJELTM7%KpJ$m>Hl}yUXUOx{u>BDi%G}|tY3?p~A^P^e4 zR+a{{XRI8@k|x^%+t7GFt1YAc<*U20Dc6)xKB1r)T{^DdI5%uUqra?~ZT?bZH=yBJligcxx(1vkzrc+Ixg` zA4KGHDA{pqTdWLbKhm#e!6$#*Bfaz$#OFc!Wx*T?B;vUuD_sXn;8JdkNusjz1H_^OYTZTuGTJv=LxQFOKIiHH)Q)1AnR}h?BWfapyUR@Iz}7d_uymy`}!YU`H+Se{azpi>`|V8!~5y z?ARxdjqgR8x$cGtCVgv`3v~WC671RQUm;$9;bjK!P&N_UI;Woo>JlW!S>ki`&bgN( zi};I$p#zyhQW-}|g*6G&C3TK7Xn*PD_{X~CS<|=kdn^6Vj)c8;-(QZ%$t~JY(V-vt z1YR7b;pfVR5opyC=j7y|$t}J{5U=O=$M%%(fJ~`ZV-=IpQ31ATJ9?Yh24002>VjMG z{=1*M;@3eN_X*${R=tU==y4g0ae`k4zjf^N?SRuI3jce=#8lU1QMD$x^U+)tbu`C&J0xvI2genYT4p1u}TNs4B11e7d5^~p9 z=n?{4i;Rruc}I!PB9JBHg@MLN{;zBN*khsV-l6j!sK?f{;2{sdr;ovFxU3Dc{`>Op zANfO`##VrA%_b|&uxo8hveI^h&3$u{n1o$p)a03*92FQ3<%7*Bk`~{?FQxi5qj(;t zdrLMG<+KWMbY*QpMnA#EJ6Z=aJA>Usc}$jw8`JYbwFbA9*h_pSramPwvVTBi>9WH> z3?DkzIZXZf{re3TDO51%T0hOyDpaGYy;w-CpARq$1dD->8jRw}{MBXn`dA6OFtYV; z*FzAg+=XiCiKg@?Amjcfcfn1CSTI``T~;hT2ugu-*xNcCEVz+({1Z1gW3SLq;O- zvbi;EHm0qu&F(TKlLFi+4DM7@Qo57lyUyX^C(&5(Ecn*i6*Ci4o+-*zMmC&q>`HNa z9aImPD{%FrEGAelDc5}9Rm&&Qo!Q2kjPg9^`BuG;HpCiP!oNN1Q|3Q;s9xpz#S?c} zoNA>=fyI=e}@WM+XApZ=JEo-Pmd}VGXw6_C6lS`6bM|K zKRo%dzIIuXk*Rwa0eqP148)|)?c`TKZWGbT!C=Xkn-;ErB>XWSr;GEUDM=e3vP+~k z#1TaaH{|e1{6Iz69rF-d5i&3?gi;to=T&R021Zk&4_IsDGTN~q9{#9b+&kC*D819a zv*&1MzM}4VnL+Jir;d-0wIB8Fc-AEigLod3PbO_}C1xdwP<`gm3u2YmXAj}wvb3~R zaOBl^gKeQP@Je#dXN9&_bG*!uf>Woo(wFx!&QBG4x!KU#th-rN%j+YWQt+Mm;lJtQ z@&OfbadDSvSsktZXE62T=AHK7+w3zbzxz@+(J3l}JD_NK?(?~afC8OQ4b>;{!obRa>{j$r4Y`` zL^F;M5Y%N-7Oz~8DjLE^Y=T02P1zhUe^8aK2dM;k*loL}WNk~PoJ%6 z9=R32NWJ_1XOq{4{d0wktGi^7e7mO_IpW0?9)u6jIf0ix7YY6YITD8cJcBYB8%yWh zZmESwC&^9>+NxYDC%AXXSM6iEp-7dCm-(XJ05M}SMw9F;i)$0n2x~kY0(e#H*|wO+ zXQhFKq;UbIh>A zm@(?^#hW*8q5_157dO<}Bax8Qn-GpD$*XfW|AC~0OD}B&NL~92JeVv#^eYm&%;O4vI!k`tQ}c6~^n43WPGuZpTnSZ%DzP^t>I* zNqwyUq1*~ftyJ)W9TqjST9DV+BE~e7&aXK3TGbIxWNyMFung0kE#{?RVnMGh%h+8f zVeoV~vnd?Xh)USs4ZcluAb7+mm@+)|Vw*`I5%4d3UD2c%Ff~6WCgY;tFlFnk4CPjU z_Pq$D&Y#YxL%}2F=chemrP20^v8?kg2acN~ zMRA}yU$kPQGU#5N6@m4hxPU-XtDiP+^n)6RM7!5JhlN9^Hr3H#BT-q+= z+drFhF9Pzs47^sLtUsOe3-vI<1|&W{xRPtbT9$9Vs@5k+{fdogX6fKniYYkg7Kj9I zi;GVR4K;TC;I#AgAb|G!M<+5^sTL8}r|5RfU8GWZJ5*sQ1!qVro7$2+t*SHoXc17)=cqZNM104Hhe|2*!oKKg@RpB!V)L&|F@TbsJWdV1bVJ0lbJ zJ%O4tujf0IHBVgC%)04z8x;{ztU}8yn|F#I34QG4jS+>wkUAdH*BsB`1Q&umR+SNA z#iEejK8Db}bVM{Qo(jj>P>KTz{}T72->f*Qh29P*UF?Ag+I(XMDbN0!pfb>dE%lDFr+pEK$h#@PyjL)Yu^jsNF ze`zCSa6O`0^OWEpX;xh~jzP_oxTTqhhK`lk92#++po6-Fkt#~h;|M-;Jk#Gk zQ7+HTC;hG+m25=fZ*bSxmMNZ^*EI_Og_5=WQq{96F3Xe_F==+iLd8T$8CMcD70h}8 z1Xi$j;)y^dwiau1vaFDD)I8@4etVFnQNH$qb|#06_wQ_yx*+QX@6wlVkN5;&7bgpG z=+E`~T=bqdaa8T!teyGm?J)pd zI?wTXdfL-?OzPh4CEbO;$uwlJj%CyH;F-gN{CUhKwGk>4aAsDb1!8R-6e5)TR?(t= zd;C(7cW7K5ehRsB>cQRMTVZ9aFK;}I8f%1y>q#+A0JvTS@ZZE-mZdv%kf;^5SQ0x zz2l6|y-$zbb`91iSmu+q{28{o>tNS;s3FQ4t$W zRaRR8vl`2vldA0UU&hT)@wp~st0^RTGGFpn~NW%%SjRZng6V6 zr9sN!MLs(ryn3O(ol)$Qni?0aGD({v)olf~a*ZAN>6xV+TB!h|K(ACiZtsFyBY|6) zJ+|oAe|z)o8mp6eqaFkfMjIeRY10!Gx-1e4`4mGSd5^2x{7-&|$6=;=-YSioG`xH! zQO8z>Td}#JUGglJSuhoFHly_ViANTO8Yov+&E{OoQKs5*S1k$GMI|zU5N4T_SzPP2 z3t`uU_7_Vv{j}*W*Hs4{0T_i})w9)+i&7YG4inJ_p1U+#K3cY2XAA@fjP7m-c3k@0v4A{i(O>(h4clo$WR!s|fX}g`BcXt&`B^r)PYLrCHJ>LU?Qx z=x;=x9|Bo5x4f35*F*>YUcT?uYd-XvReqM1eS%c6%Uu*pL$WQ3B}hNK@)z|@f9jZl zIR?1v`OXlZJ#Gd0eV!p{!7VY{#w}!P7hf@5s;9r|45WpeLuo0tu3-o=U)y|}TA9R6k8_(4MiIrQVLbbHD*{R;gy-VR z<4VwZHS6k>yKv6ljxD)cm6Jd!{`@|tYt8c?ALI`esd!{%Q`~)% z?lFtKxBSuYwCR?bhyhc&ML*lx4Aa7xaFBp?&l5t|2aZ2Jgs%6e%x>lM9u+^(x)lE8 z$|rf`Pg@(g!ET?6p*&Q5KOkvYmvNQP|4E=ld0%a|bhoJ2$R1ZgQ6ZDg}b{V2h_tuq3S%%N40tCzY*i{=L$vuANR2kJv25VClr$ zfp@)bEbP1_ZgBJFkVOB+eV(FRS<6$HubC463#{X(f+}URH#l*_nU$`}%sRr>;vQES z?}pKCMwu5TQXXV(4PvwfAM5hRGF=2CV)+{j#98+z8dXrfC%Z^H^CW)}L7eTrn@xOM zAzZc`-j)x0cvI;XOcOl#Vv|R|8-k!X>!dJ&4fMt`Eg_QF)M4z0iy5U04JxR_{fKBG zR!6n81w3i%dJPPOWb2|NW3gu|D`II^;!BP*sJsmUl8$ zg*J&&*44=L6;?!o_J z>p`?d6|*~_0@AOamy$LwUprsTq%ZtJ|5?VXNpW#d438`p|1DGP+3S)JH2c(X=r=re zc8K9H*tV_Hc0R8%Z!}S_Z8NaH+Mpn}6{{;Kd|`l_ShiH3*D$zV{2PK?SB~AW>`yIr zx?gA25ACi~w0+fl7(yNU=+brh&x?>5o5+OU+KcB-`D?3u;s6U*!Z-}>Ni2s?{yejN zC*F_j|HIrshTgLKaqMEVJoCt=@2%Cmas8B*q0?Hj7-{r3PgG?4fMrF;4D3d0lqLhz zfAY~y<4I6)SjoqBslFWP`f<#H>`S=Zxw_QM-Yt#WA~W3eg=L2Xr4zbMJj;qW#-1o-*2Qk1pspC2$iZ8nyT5lO~&eYV5S*n=HzdRoglJ*BAf9&~Q4L zDr^j#f%mna4^rClZ253?yH0i(Qw1mIJSlL7pispqws_e!f@aK#p8k0%Usw}j-TN26@Em%mB z$R7gv3wQw(l5JDsHtJxFO~KXtSu!Szu%5CFg|t7=!<$)*FuX=C zUD3xgoO(S1ybss_yHQ@j%N>T+b5+y=jMbKoQr}1F2jjR;gd=tjcalNxp|n&!Z1)h#mkt;#2e`s3hMRVzdoGG zvv6GmCk#DVLPbTXZAURe&AoUnRg7|pkkdcN)m@Yv z6&b1R^}4rL3Vgdfmdxhg*ngnx9Q{%N^zlLY(mOT#%0vUlMm=f(ms-2@2uRQ&YA%f6 z+P^-D)NHoP34h-pI{bmShA~*MKt-~8(W+D?E-8n7j&BulT?oDjDK2&=CxFNGo~4+w zo^2&HTQ@QQVb${W4~#(rKb53nP>MUGPB0{vOIxAu^cluh8R~|;{vNF;EJcy84rZ6R zSfH6Y>&_&_6HM?h1qt37d11N9B;t+uXtWlcO0y=#%BUjR(MxFc74poG#iQRk70+a= zrH63!F;Zm~6rh4Qy~^jjHwA?NbG zn`;M~YHw6}Bp>Ha{i7@}cU1xr)=XSVuH9`$;=M|{y@x(2O=1OVY3bDY&Z%4NANX^A zgSUuhQTKjOnoq8%aFWWw&GNFhfz(woPR*GSe(u`e{OZSW7k5RCAYGVNZ!&LnaPN7@ zk@4cOsGWe1U*c1@bYE#vz(o{)`+K-i(S~MYvV}DJ9-=?}Nx6{2{8mD;?rRjdOG`2* z*!m(SZ?8SKvVB-+`F5rP5i4QM^h|#lOgsyo?l6}$=6erqi_6(-f=y1`(ov;e>*OdB zyv4!qK2zBj2P2y6gAyWEmU6Cmw?SdAZDvqcqPEM;yxIS{(iO>4kyPn$(9}?t@cZU) z&8xIEm#mnqZp-gFB5nOl`vZjZl175}`rbX)R%Yt1O-IafW9ETdZ|mEP8ddlc)WQ>IXI&Pv z@^xg`mQpHNbn8=(t`{$*7^qtljBcyQ)I@8sFk)%9ktK6)z4# zrv|YMSqgLY){==xdBF!c?#e9*8d+aHcT}V%`nbSTh44vwgO-A#XPup?pGzuX#t~aE zo{D;?Kw59v^q~9u1b?M_1!~t>a4Tk~dXW!|f=7*%q*O%eEcIgAt}YD$&-<33g1P%B z>8OeSMiCzTU=kF~hgXg4UiVT+RWq*V|FYcrxbZtQ(a!?K6rLo_IAFH@?Wb%(lLg9E z-F1b{`N>OX0{G%fSD`HTInN0zBC0mj^CArlv#TNjynOBC?}E+GPqmj3vp@h4navQi zAJteX_4<;Za*&rGw$$U#3u|O6E=aUhoNV4{r9}7qmb^T%s2x$q@+}L-2+|j)=Yucp zxeAEFAQLQt->Y9(D&e|nVxL%RH>NF?-E>sq3wGkMmH9fyOh6XjlTEQtOeaM&^*whAV1jga=dM{R#lPGZB8yaLMgfpt&z6Idg8@tf4*u0QlM`^y6(xvXAapz?&wZcM#{ zY;KmFR}(L~91;^gF70=j%=$NTdv!vW48|)=D(Z>|$Vj{#`i%mc?|#2{0!!#1pnM{& zK3|FGeNa2n8uSV)xH2FiWAIiWd@#Q;jQQIuLCXHwxA27}%b z^~bm`0*wsoKQVc>9fXXeVcSM?1)v^mzZ7KmFUsFvU+PbT-}X2?pD2IP0a)e=wgr~s zFVH2?e8UbRsq^=j^G#mPwJ&gP+!&n=uSrm|kLs zi6a2TbPSXr!j)Jgr1dK@a+V0p3($SQEy7`tFo;(-bSdMX1JorTxF)c2|?Di=Du+wzsnISzl`~GC;EeUDHxiBlu=jg9-ct zU5du#VFlCIy7+Fc!G&3;+^G2I`f1zE(l5e_&%$%C?< zeGb7RskHgQbOB%d23ni|dL*jO9|ZVl8@LL7wLMj%7#O+_Bn}|35x}?Y7JCwQcXvPE z_ zv^eSVv4~h0j3;-1myz*c^PKiUHK2{pWjuP-aZBn99E(={iRGe#WZ0$OI@=yB% zQ_tpw0dlh;5W|(Tjc&`50d-kr3kR5z#wUd7|EIleW4|rITB6OFdQB7A^4G}7#b&m% z&%m;DC^#7YPf-LBBi5La(n^6uB7ua2O8{r_+Oz6Q#sfYz4E0LK|IE)%;BUz9s$rY} ztM0>#CQr;&)_;UWY?!$Yr;t2p1d`JOEWdfRlJy_?5u|~@c2#9wSOTXhim#!kN2%1L zjSlA)fizI<;-vxuynTGIUMZVV6fxFh<~UPVOlW5TSM$Px0`kw~?_q@pzvsCwpo$sFXl^&e>@U+G<`B48jj)HG~u)?z^%#)R({ zFwo)S<9`976wEvE&3C);(ziJhe&(2iwG+%n1+U|@fcwU{`al9pwkOc%kWRAqh=?Wv zgWZJPSK~8AxFjfyPpM~sQVhQr`Z)A1Mco-wn=ZFn&)?>jmJyF8><)*0>YBg9Lq{93 zFbGa!VGC9Qmwt1DQo>hYd$uu8%3=zLAb)$=a~U*q#DPCA3m-CQ4h&}NpI5&lgMU(- zaxZ%IE43huT#)OlKk|T+E1~__k{3VBlAu^WEhF*(nx}9NOlZ7>pXX!4I<-KA3CJxI;+#i1UnU+pHzV!J$$5-RD+KErpec0uwy%+WCm@4SV5MNKumovV zlCHwq`-#(BrxNq8_G4PR8nD@;&jSd>vSgMKKs`Z!3A{W%#bkU;Fl7x!6?DJt1L^;N zT_Td@p3eyH# z%9I;5j%EibbYjKo|6YUyp1xlT3&FtNU}R!p0!&_tK*%%$4nDyy5N7}Hb*bDhA|0lx zr|48U_V{#O4dc>^d8$>r(;t#-Pg5T6OI@ADt$%E_=qB`!sd@s_szyQ%gj?5t(&jpT zdTZkk&)OZ?-_@$u{Clyazan_69NBi?qt@>X}pU%B;#g(X(uH683rv! ziRMe)f*#&C%&-n#iQ;@|VnV`sOK5pKs7TXqv+@UX5NKkO0B$Q>hbv3Q%2>12595DY z3|)E~Nix*#YgMoDCC%MH=mSD_tb@xYXMlvKTuE<}Y5CUj_+E(S8EvJ`HXlqRd=dDO z8k+Vz5XYsVRDV_Hz6Y;9{}%Fvep3@R@|RK;-UYT4;MdX&aJU-=QDFjW_yic`4i$Cs zd12}q0(e8>`_Y#@dX(r#tp0%Wditl#C>`q7RiHR<(<~hG;a%~~TQqnh6D*z3lqzsh zqa<9@_g_;o3Q{J(N_g3W-*U<`5%uEx&O+Q@m)X5Fib)@#XW7N_fUlMYg65$jcD^|_ zP;?RWGp7u015^$9o~KV}Fepm#oKpgJ05Z)`eR>4&|*~0BjKE|=!a~|1pnc# z!AK#RLzBz-upPb88xBdgX#}Yp!)#%O`j8w7Ves~%Al*g3T}%70s7+2!HWaP0Ff>`( zV)>sI6WwN${xj1k?E-wD-xf+$GsO%9?zCM=W(e4RkitsoDz+$@)$0e4^-$^&9>&#| zQpr8qI3~uU_+}5m6zW9Ez<(ArWSV|WvoXqs%ie|4Rwg0))(T4hFdTN*nW8?hd~#n) zeDzD&0);keblq#`3eFdRjlJ-t!0Z26^6uXqo?xaLNy8x_zgIsOB@}eYm2N(NFtst* zS&M+!QT>Y(vY?9qTrE9qLr{tRaCMdR>m@{qIN1ee#4+0yN$U%%nEM+Wt;6u{mgYbQg-G-PgWNuoBDX+GAnXpLtIW~(<8@-Eor zRXINb$sc2ALicQYe-cy16YVgn;Na{hYh`I6!3m}W7dksk_C_4uP*%o zYMXc|_Tm+Y4-T(5i*jclZ{;@|3HmK_$@O%%92>0o5!j^y3q`}sv5yKv3u_U%Y%N~j z6!WD!{-Uj|*bZHKtWAT?xh6}d?+&b3i~VUtz$P>{F{xOhQwBxDI6}h0*6pL&fs~~& z+F>v3V@e;J(-xkb+(ZB$d;_vhx()m2e~I>gQhTB)tDxHO z5Tw?>6yO)EpV{NVDIh5iYrDFj@-9d_tXYX0?#B&m6(I1X=jP_HfTGheX9HKW-KD3fiHjL%r=V+_r?Vq3$B3vIYvp;6tK2}*} zv51O@Q2NV+Yr8RC#wBU($ea1xGwSJ-E&`F?xn)+-iIVO7Zc#jS8*Dg14_H-90e_E0 z2w%VEZ#roy0$X%LeEfZ~_rNw5W}WM=6Jv|DCVT-_=~}G6yi~91#y|f(N%;-{kl%q3 zMo9(^JdKBnizhxqV5*e8ldBDH%v#I`HWd=&7H}N2O7E3XC0n|?Q zCEMN(Ym;C@vK<3#m*KfJUGPaH{>&Wpf#64@oApKD_R9W{l&+UzADpX^9b1~w#x6NM z%R5Y9>;`tQ@crXsMc_=j53H~iE<8KU`>~>{`N3lUE*oaHKt1V9f^z9Jrr^(tziAv{>1xdIG|qYS=(07$alf5 zc-(fr7X=(kBvVIVqb>j|0WWq7$YL8q@nYD{M@sE|JScH38l2{PT@*b;c6@5NHd&Q- z`S`zgEC3^i-L-|2?xXKW*+c7IP~j!W#?VQKK5MTrZNG6rHE|4TG1Smw5}Up@VDyn6 zFV!D=6~1WvuYZK;MXLI}I6KFGM98?9O=1uCI<1YZOeJ|1FsdbE_mnz@BIa_HKd8ZX{u98cx=Y`+$ZuE@xHVE={Cq>--ms#UFIy%PM7A606>6S=22ps3b zz;uphb&k@~ukj7*o#%Bndi}9Q=gH}*82~qSbkb96EC_5-p#EV~<3Tv&UqSr8Dm`Ym zxwovUsi^F2pwsKb{VXf|X8<%J!6LYX4pu_=_W$P#UKkd@gU|s1hb`y-6*eFr3;siN zA~dpOvMK*ahJUGqup3)sYy(92-}e50dHWEcY@&d>0qyAb`wQ;>EQtT9r>T#&X2R(t ze1A<@=VG(&sAr5JKIx;^z}aaA$_8&Bu3VBVu48Lzz*k=!w_SAtdPb|tTpn0o)J;^k z6^;Tyj;{rVMQ}z3?%0hzBD4FeU9ZWLE0#_o5?IzPcIH~ZL6BQ>emfG2gV_&(Yf7=g zxaB@2CF<&yD_qEV4uN9ob}fP)0#_i>)p6ieI4D{^fFA7b?P=$}AlKB?gq0gnVIc~j zIO0}UZ7zyHXdXFFlxJT?WQC3jpJLex_BU(T6qZ}XEg(SZwlXLWbUUo6;T$OJptOtx zEJwjn9M)ZKvhWJ{j7Z5fl0tAtGT)P!Mt?2Ql0axa(Y%baKym2 zl0))x12D=anXb>CJzJe^m@S6gvhY;`0s_DZs*jh^9>Z-a=%^aY{xGmu=zyJOB9~G3-@$=3;N1bXpw;{- zjT>Y9L*jWF8McfAR}V`6RY#1vUnJoOiU+sAh=zjApos@8Irj`Gu#j4k@)*+qwWt$h zr^8wfb~6=>&0=55-EczM;fX}fM!(~7h`SVKl^GnP$vy~7S`aOJ0~zc|U`}9FB?q8K z0hHN)zP=?{KgkjIss2~5Q@yUQ7itAAao_|~E^-1UbznMz<5r9c;9{$z=bEB5z(YO* z(W4b{l`~N-{{yHs^!IFGmk;2CkDBQF{-bH&!)j&Q`ewy%?7PM~iiSt|bG(Rl4^6n} zOwaVDLKA%cDVuVTlt5ibEohg|0qq2}n|cJRN^)iY4)a31WRUi1^=bFXq5?^=$2OLt z>k8n0@hLydOb>g`C(NiFODO*3^0&$c+2T5o8xqmRwl`|6O;BK^JOtJvIY8hY2rl9S z*F+Ki3oqKDf%KlIiH;uIvm*X6ScU~3IJl}WBaE;outp^pzWo#e;q*CMcI>}c5FOk* zm%sK*wAQ%UTgyatupD?y?J`}Zl@^j5$3Urnk>K&;vd#SR^HUpWo_HTTfG}o;sIy-2 zoVY;BS>5P)f;%n41jAWW7SU1|sdXnf6!l+2lVqT;z=-mE6rW|^dy}>Rz+hMnXR*{T z>H_;GFxKk;+>PkZiMYG}V~>MGt&_TAr-tXrS;^nkV;x)sFPTgxYZ`HJ+hAfu#2rD; zY=T;u!5y&v*Kgfi`}7--NZ5A(9BX2`gkx0LRmDDUr8>^&BNIZbKj}!et&{j_vBC=L zjl|NSxQ|_(hKFSA*buMy_?}WJFiu%bqx#=H=eeu4bj!@yw0U8KCTLzkCn(&Dzx0#+ zSwqURHF`Rhm3|KW zo~$c$+O*fwaH2ZS`G>k~8zG)alh=-pS#-3l9Us`SE4J5@FI^E1e63kDUUeCB%tO(N z^3Ul$&biaS%}Wwl6{stnd_7M;N%yT@J@cu}d~3_)BOmSMmsh+wzy*l9DDc=A2UHPu zR#NTJUtTUQJa|I36=NcM2>+4Bn-@l~x)xLa^!6&}n=|_ihLU3H*5>4cBXee8QHxR` zWHC%)R(z2Y?5nT#NXUlgf$_J?u!I!xUq2nl9A13u%YHqKXRKgTzXV7tyJTNm?&M?l zlU=h5sy-VEZX;>Hql|f)O?nWzQ1I7Tx!uv5r!+1U)pKRvz83p6*q&nS9%og*{Op}N z2}IDrj7sm@6Tr`{0s~#fv`W_wvqgN9u;p2AD^nRcA7OTl1&Z&Q{XpQenVF96JVAjSnIMh+g)`%bVe1wY!D7e80;4F z-24nUuP3ITuL<5ua92y)GGDZEP*Do1bl}J1A3xy>Jey3{$?RI}BM;!Pf~y~6kE#IRN{Y8Jl{hMbv>im0I%-xSe>mWD*rpi_BF%Iy+L z?|#N~89y1*59+3rI_iFWJCi_#$}x4d;_iA;Z9P=( zlx;nLbW3QeueKUM$GX@DdD&3J6h^*#IW9vIu*$Ql)x$XjTy#Hrvpe|4f93{W7Hf?2 zai=Exy*(~y_Sr|r1LoI)o6umANr1OW%k8nySw73Gh* z_bAkMQS}evc&x&a4$U|t2y{$ny@M{i_l45%M+(I+DF;;s)d)PvlV3RSB(f`0=kd~X zYNEGM7HPnZRg&~!lv~LfZcCmjcG)A+yLkt2R}=KCmPaOWsf~O{OtPEu_Fj~*AoWtM z#Sb0Sr@*ULQDe)Gp6NGMfc3ir9PvbDB;?-`zvShLn$>4x_vDVnf{gdulU#5#>H0)P z9MF#zKylCwD7I0SsdB);T`LWP$o*REsoq5k6R!ltntvW?{NcSM@h)%BLIv(DE_6&y zx4j)*RNWlWDa1t~p+E?C$<{9uBED&%=tut!qVakuYKrdBBJiFlU*V-^`2emI9C}*( z$|cC?8p^4wsU6i>RTeR91!ze$o3dTPhAbqcGAXV<-o?SqN6=h#F zInzLvz3KMLRf$PrEo5_^ZFi|wS-bmq!!x4ybrdL`xS|rj=-_ucx1K7PB)y}$+%RO) zEnI)+%H3Q0Si?3~qA>#v2D;>nKtWPt-`L1(qZ_aHt|>S|BY{Vi{G8k7snaZ~qKcu5 z-jBUb8c!2XBBuwCVug=c|6+RX>HR1aUZ1`L2U4I+9G%30;<&O2ZEJ=3yUjHLNe;Fi|Y2rCgQ|0t(oFift3+*;9M;-X?SA$ z>aVM(xA<06sG<||k@*oF;lM`pp0W1*8AAB*IfK^$IQZOhIBp2(VG)z@RJ-GpEg6Bs z?#wib`F$R7FqT-3GaLsI%%8dfJ1d5n=?t5IGLevF@>U;?xsifIcKfmKg)O?GwFaVG zAMy}e5>U~}a%bt3>LDw9T=~?3W|e_>Ba+sLn`?wU12;(sx3xHcvLfE$6u+$*OBb)j zo_H5L8U?}|IP8|Jl|S<7Cg;Wld(z6zPQ{HB_kb0aJ_HP`^k2XZ-cwe`7aJXd{Fo?7 z!WaF8v!eNn;oe&Ub1bv*M|s&>bqmI8KT$3Z=xg|u(k%!dADB;5R1o!VBhfO|O3YUM z{6TFoJ8t<+G_YB_#PTo&C-4^J7b-8m1o{ZiV2(tIR8q3Q4%drMq(c(NS@;&fE2eY7 z@-{jeEIvxKxpHM9hdCk(1*+_6O43ojwI;@FbIWDlTM#CT#Hs~wTKdu^N1cj6`_}B% zSVHLn?kN)I&JJfW)>s zjZp`YC2YHw6abSO3;`Wwk?tWg^yL~PMgLLa&xsCuJaBWk9d4Bd^wnctM9+OPY0K|Y z#R-X=`so&GyeJ1tgSw7^%O#h(W3k?fhKy zj|n}Ct_$^@4-R=E4KxK6;Di+F#L}>5j{DK#{?h<&loVC&spQiZL-Lqqqj7Ue5x^nx zy?;VOdq5EBKKq8jKPCcizkAG$!i8Nx>pQ+!NSq2;=b6~!6g4?Hg@j56KN|G6h=xEi z-5o`nw6}4gw3s^uk*!4Jj)TF-$Y^%&+oFp@MDyA0RdEB)gayiZ@%=32=WaBb^7$ZP z8zREAF>QDk%452gJ!#H@=~Em1rb8Y~bgMXs_0O=lz-|COt=Ae- zm85xu!lxzEO!jqaP(+XEgEU8QMrAl?bVTCm9|La!8J;qQ6?5Z9LYwbAiysA5jR^5H zXF6U3qX`(xu!XjBT<>M4a9S5KIPvkzwLe@T3SnQa`Z#Fx_$kL)ntzyYEC4?>zlGLd zjd)kKS%n4@U*T8F%n|q!}(A1w@6|* zM@l}!8i)wj2mF@fN#6ZL-pc7)d^1~MmuEYZ`e-MG{~0Q>Rs0@YP5%4w_q?ain3!;s z4eFFpkaL)rL!i-GtlxagwF;(|mkcmE`Gq}!E$hew-2Zl-S=SA?4%_GM`{a|!)z~qs zzVSS{)Yfxo3wpn0lPRPd1SNAZ7gq79ER2kZ<}{lke~89kenq=M_f>LSg)fU*pIjfU z-pva4A$vp8q1qlS2-g4;OQ3it)}u|-zoQ%y`E`wVDWUPelqP|*{v88N?i6XG`qXy^ zxA(p+cjhj+Up3EvR`3*OU0-jh2dZew6jXbNerCCtXRmfxaEJ1`>+s=9bV z@7-3F;E&F_DN9DBxy$Vy0O6TFClz}yGn&F`1OIw6Y2x`K1Jn~pJ=I&ybwqHn^xem8 ztR0*H8(0r9C|+28KMQ<7Or`muT3rTCoV)Vlg906*H=AN=ad6pl{?~_f&4RbWZ-;Vv z-(dQ;cekb3+oAHeNMjdr;d1R>Pk+BLPJG9_z3``(zky6h0X`}_`-$qcl8@w{n_+1@ z(RDL7^mgwjykX^KR@nbR8qNd4eU6{heH2bnj@KVgWdWs%N;~>W;iF%nNE;kGg-T+gGg^cyAI>Yr(E@)BcPKo^WjGR+?>l_4J2zbJ%;zi#2w$SQ*5} z%Rto+%=azFuX4?Q+##wtRPAlWCZ5~vwo^o3^ZeVRUtWpbsX92zatVwe{8~`sRh!q{ zlHRfNyGzz^hVjPnAkCLI7P?%{e&M{#eV)jWh|!%8gfsy>%v@o$VC&t?hCbqHy6JH0 zxidlg=-PAM02?BKig>u8E-inB!tX(^m|v_F9A{J-a;s8K_kZiwnYkAEqAs;>N1uBN zaf^S{%8<~DTb{Cz+Q=(dWH>(x(dS)X)={GqAqvMSyBc_RcKb=-7l+M5O&^Yj{+5Ip z0`G!qwgbrBUcdW1U-`X)uNq+=a(Ern$9}(_heo*mA-`B^xNf;n)gkf{AwF0O{s01| zd}`H5K}^GLpfiTx9zNA0j3gn?`dhSqGc+(JC7T6vYy8zH)q<{n_~nq5{G3kaE(5cx z>ZrOyw)lg6!rNcgmm?eFaQ4|vkBkF1Dj17CLoKDXC?pjv$)4~be}D4ERan&`sJP&> zdJ!{zDR#r-RkK!I|E*cxZ(5XZOG?h6Q~e>$&V${Jq&M^4Xa9s2yZgXU&}Sy-4{M7_ z)5Xk(=G#sR^Yvk-nx=cK*3nl_309w6za6Zt-KX&Dq|*B1mex&)k;Qb zqI-KB`dM8);b&85CzLhIKJZRwK$}d@=65JraMRiN!VvTVN!vO5GyG6-Je}gWpsBt#}k4Rqb+{8RqP6_%h zX5PN50}6$uGJ80iv_kOt`*8l;i# zl!l=sgaIWbM?^}bMUf$;rE_Q)nxR7)hGrNTIP;&|b9b))%l&*;`+L^f`(5jO*SnoQ zH6^8$a~E8^zkf!hF4S1PBWif>P4-0=f`6#EA}&>=!UAZ?uI#c(58CB-9J>kHd##if z4PIMI-#V@*Fa6(Lek3E37BP&@%Zct&q3<*=9tRKu6U>ql3gM}@>#I3CpT+6v%E_io zdZ;6_&)nH8uB#&;lAx6Jd7A-ep9Lbuuk-AG`MgZl_y1Jb!U!i9e3ygUI(8vhgG}U5mBR%Le1H+Ou z;fThja=phj+~q`cQCb3!!+rBSq+X^(Xq`qe65?Ro?Ay=Rj%+GGyV~^AcGYErnWtG?xR8{ieML{)&IBQo3N558*)w4|=yFRu zSRzx3xln>_@xeou_0^$HTH~%|w2Qc7GrQ4Cola4fx8##j?Vp@&XycXcqt+11Ai+`t z0~G&ajB7bG-?98|j=2o1mNDzFm~TfT>-1Dg#5J1S0_5gn<#5r;PWcYZrh3Wn3C;#o zhMHIu-mLm$%7F27mTPXCn9UdQopAH!6KR!h2#$ zO$5U+%Kkx3tnrkUammDE3(I-_>6g)SdegYCs7X59(-MkIqhogJ4j8)5w^iOBkX5sK z2V*2i=)~w8@ZZU&8nabhyniqnI!j$S{X25@1{|q$8a)({Im^iRcNF&fsi#^}W8%dI zzTMo85Y1Epp?T6=eDx*g{i|A04D*E_#dZVVt9vO^M z!#!7R6Ynl1_)R7G%NU(Mg?#|f|11FQCucT=0Qv&mK5>s3sw7n3c;8H@Cc3RWNYgY? zPAvd-uZ#Zp3i@|e^tMZpuzhSd$tzE%?>r8Ctg~=}Vz(=ZD!w>di>|CRUk-B&!k!i9 z5{6lNWk$^Ypf?mu)=!wCxle5WY3>CZG{I4?4mi?9h6`m!;{wCR`FkS+3moJQn?gOS z*8+Y}y*aWoTbf%jakvycw0+Xq=7l%4v5tY10EW6f`BIcHBVSyk-_l8G&b?fZ%?l)z zcl89f=``2nox)0Evh27IVr9+kp5=*{^|d+c8lKX}7VstfUa|R$p|Gs?Ev9*QLM#If z<5>PuOxni`2`|-*Q~yqDLYl<`P9}zog7hWCn~44xGgK-%pQlyoEj5cd!GLx#%)K2H z)IBu$v1ShtR3$bSp;uq$X?i3}Naq zf5E3pdPC)00a9%E%UHctA3E{)JA*#y&z811N``37ndR);JyapT-BtqLxa~aSp@8bz zdhNIVudU=xM?kXs*mU3(Aun5Y+ZcMgaywwKs0mqt=pf?=Vo-)Js%kBQDQ`UHG_l zbV&B!0xy{8C(K?Qz*7=%iat{G?#ZLEm*8`GUoAF&s752Zs2O}9!j>B5~SRdQ)#eY1Gh&Vt5NaF=EOGAn- z4^S|3iDXjVhn3q~&7g2ePOLARJVYst(>gPR=7u^@ZC>UHAgc7kv;ZvTDWTCvL|oI? zmbT}Ak;HKR*5uU9F>Qy^|uni|&Qv^c9mT=}nX8QY0+o z_p2F9(Np{JZS7AN>Oozb`17@}-tleQu2n$G5OwgsZSAqunpAQG-mLJ{7%v1oezg5u zd3iD69n{z^&0K7~gRwk6jEfamOxnt z7+cRawgKD&tksmY1V_vFlYYs@7u~M~A*IpWPR5fs4jHWoaeK45H5L~+kxS`_%Zjjr z&(uFHL3TMw=+NCE{jPnp(BRhs+;xZWb}bf>14&%0OHy~0ZgWxCz%3VMSvQErhp1@K zS#epFt?HjIO<^SRxu7sbc=AigaB=MFT+!%TvJ*dSUov+uq7{*yc9{0cy5#TK$XWl3 z0u5osIen7xuFe`8>j~n0_3t^Rk9xs@to*5&-4z>iaSNZSE|$+{xHNJibi+C?~cot>#6?y zBF-JWm1%2oz=S~F2HSkr`#iaA<V3j|q2Q_8>o&2HrEIJCDn>aoA6DfbLZ zS1uStI|qLlvYA#LHTU!8fBzhPj zafwVl!%AZEe}GGIs*0NhYW+so2o;T#xspjMamZ4!^4BBMLd>iSC-6`*Z)Pr^=*BRr zw2*mywP@%_-XmyQvvqX)0&ZI6NSNM#dgyl0o^w2?m4k~7)PF)-wE>h=?;pq}^xTbb z8wjjdQVNvb!}!gP(LaCS*_|II?O0oe+|BP|M^9gJAYZ-G5~!SM`yFJDGuZE zf^9xMF+yJz$#m?+SRcF9T8EdthF}yTTq+88Xagy9c+X8j4HqBjlF3BmYuXfTILA(% za53)tQ63Tw0n-HyuLZ)%CAoE!|6~i|El8b?!MQ5a*aWnJm2NfbFG!7k&(DYfH4F9L zVru$@QUKOZW@MHtCVp|-khatdMHg@n_@vzWq`xr4D^rQ|P+Un0VqYeqaE8#Zxw7h!I$H_QKk_bAHI9}5w_ ziWs_b!Y2vppxJZVDqVWT<)7LjN0<$jQxM3tA~Hl_-HK_MEPWy7N6>^GWujFZBCWAr zZU_qX2&hkNlcKM~M#)>jgT~94A1{l4$Xs?1YkIMrANXo9y~1~Jq`kqLv7E350OCKy zPRP)zHTyDHk>jn*m*&uk3X%CZ!JH0SzgPmHdbjH)4{}Afd!fRRj^93Y`i*c_%UO-_ zxh^4nY`-W-pHDOp}Y#`%{8>^6@3f;5P~Uu@@e3V;(_3mTPLw)krTQY@*neCxX) z=7Q>0B}83g$gPjR*G<)zlK=pJ#s-k*pSxw=A5lBmQ20f(>W=WKW~ihqN7&yJ6g7t| z9D%^6!VcEIbNN!kC5K`can&}8S4t}eD~Nq8*85i;omGT((8dB-1>nY#42K~@h?KQ@ zoWl6K!%RJ9KB5fg83n35DpaUHr`7~ajSzipwJBuOGZ#fqG7B22{w!!X;CwbZ^Hg&q zTpUsDw>GsDr7$)V#wC#0mh=uBD)eK;uRpz&sqODE3dG4=S_X2@&STdv`EzH+Z*O7Y z$;>bN>`e>T`;zwy%3LfgKNrH@1~19GF@LFZYtA4~_&edAKCY^w!GLm`JHu^-OVdY=-(h zIdZj8+kqEwZRq2+hJnx5Y8$Gkt%(1rKt0pF2#I0HZksM?=#lG+Vko>(YCAY6)3<0E ze<+YHhMBP>$9r8g30sVFUwfUleiVSHbKbkiNT4Xu$%yC=tB+`851d=dxr#M}yBaKM&t&Vo^2_eji#8-Mo2d3A zTXOh#WzKvd*}CLE|2A^CMG)fcKUA2_5`wsc3qy{AFvIdFYYRD$|K#uZAO%z@=U!FCU*7m?` zMq)tvhtj{707Lw}Z5-=k`X!csIluVF3KDEgQ2-532P5_{CaXa$AC-%c%)O@{MI8v7 z`DW;Bj+(DZK2V+B1~MB(|Dv*WBQsBqyt2u?(4}$Pc_@z!l=cT?dp>xG@;Q-jSqcy)l}+R`8zH;en53Jx z9mJ62hLqEDXt~APv(v2>v4>Q<@2ZvT{m$ueBkMYiMBhv*_8$pp>#5(h)uUuqnCZ`x zJg^;!pE(}w@e9aWc7qv9F4KyK@A=xJ1QYTWX2ej^_4OhqR{m)J2&!YL0_z+d(@<;a zT{)R(N?8rpa5ggQ`%rPOWneTiByE~$TQ&7}d(U!KP&nT=M>s!`oJ^*_jn*Fl7Z9dP zruMfX{*zl(2Smn(&?;t>26MKAyTC7dNkG2QPVexo=TiHtT+G=M*2IEFdG^z?y~NwnES0< za21NI7BpIrS{!tSE8D=twQK)y>1x-~)#CnA@(fMiS(saFz;DrR(mU#%h5y_SDaomP z?)EP8L;37F<>ymI#%rcWQ1`sa8X`3Rd{V;0EAMk@Vpw$f2Jbq@W!StHv2SjPoConJ zdZi;*;2ShySXj0Wv%2hgE7c%N6cW08*1~Dt3E5+1s zStNvyv;a{{U~5G+OzA9(y`s;}ZJtCRkI3>$qJn?orQD;6jfv@y$GZNkiG)ot4($is zYiDHkx{4>gQJwdFj8Xlw0LGL}N3S?Z)&~t3zC>}SlU8;|Qpq?KHfMWe^qGVY>cQm^ z)``m9sYn;PCgE7u(NOR|UmW9T$+z`0>0aooaWjoEHDmiLgDm5wE_a&_W@ zKppL{+X~DiC-!820 zPCz3`UC}R%Qf_*$8`Hnkl=F;NR6#~}B83)Gv-ent#KlPz#&*@dFz=-J+erxLGiY4Q zRrVIZh6}>&2cq6JrtE=-74x`5G)~%{3p-(H4w-~*7-)65;KW7N7DBb(f00QZ>W`03 zoKN0#Qi%WC^ib)&4vd^iLno95LfYiu%UjslY;8bbFuBO@qw62xb z&tp2?p(%QJm*4kBli=kXwQ}D9nVrOK%JQ&HBct(9NycX3@MGEbC+-lLDyHKir2YLj z#>PIyfnBV4o5Bwl2f5f$M;}PuLp%18u?N?xGbIOT2m6?c{W+Ib356%Cr~r@oTEc9{ z`GBY96~5A2RoN&ova+6&fs^$YmgvS(@s0%lv4B-p4!|