From d26c9e2b64a0becf1c5ebe04df12573b665979d9 Mon Sep 17 00:00:00 2001 From: Katerina Date: Sun, 30 Nov 2025 21:42:09 +0300 Subject: [PATCH] t1 --- TEMA7/image1.png | Bin 0 -> 98912 bytes TEMA7/report.md | 570 +++++++++++++++++++++++++++++++++++++++++++++++ TEMA7/task.md | 104 +++++++++ TEMA7/task.py | 75 +++++++ TEMA8/Mod0.py | 3 +- TEMA8/Mod2.py | 3 +- 6 files changed, 753 insertions(+), 2 deletions(-) create mode 100644 TEMA7/image1.png create mode 100644 TEMA7/report.md create mode 100644 TEMA7/task.md create mode 100644 TEMA7/task.py diff --git a/TEMA7/image1.png b/TEMA7/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..a18b84d4a1383658dc1efdbdccdf1e19ee769f4b GIT binary patch literal 98912 zcmeGEXIRwN_67`NOeBedNo+w{q7>;!m2Qb5U8&MF^e#j18lprH&>4CaY0{-j9h3kL zy%%W$Ga$Y98F<$olAN3;IbYuEdA|L*u0%%gSN3Z6eXq6mlUu6tbYGwSnudmkPT}TH z>NGT8+tbi|QT^o+_#4v|l}-5LkdwOnRhryZrfK-_xy2QgD>O9up-0L0zJSkP-M^{p zL_@Z#G+jCF%V|CuF zf!CzWqJ&h1lyI96dBbB?F;$%l9^j9!=KFkshyVOQL(}~IFR}mmr1I1K6Mubr@#IVU z&;I%(^6gudzdk(RIQQnOzdp79^tt$M;5w*YVv~oF~%{sieqFRoPJ+En;V;N(qNvIQ=-_GAXB(ly=$Hx z@2VKeBD3=Dr~sRS>yTr^cn0;MoY<)8ApN;emr@FyqdV*e8$-OIootsx|-+ujMk;2=t_56*{G?h`DBv--WzMW z_Nk+6p?o$lfU)Pblm%tGrnz(`Gi&nE8Kd{IyK}g@Gse<6`lYH3AiI>W$s zo8+-rwJGGe_URa-7;mWDp8LjtMPheP̷)@{!JW6@sfm)awv;Mmk;w@u;JIpbm6 z;v?=RH=ceE?=)QDwk$|pnHt_J)TA6`wei6wuW>J|+`gC9p(j(zb<}5be2j}bT(NAq zp0N-NZI+Q5p%_5V+?jMOfVa3?eZXgP*r`iJJXMqXlv-@|!^5;`xw-Z+CGgE@fv#8T z8DX&w)e==+o2^1kytvkQsdU2%S6$oux&ko5RAyFgV}HI$P`ZjXSd61w4mYTJY3$c= zb}SpCL#3lxYwdA418D;%@lkIl(kfr+5T>pcw+2Q_yB>5pBP&a3u*7Z^Uj9_N=2J#- ze(|CE*U%gAR?HPlccv=omDpk37NJRcO)1 zThxBl3T|EQIv=B@V<_sgyU~)BSFI;)c8-p9SH^Sg0!zYs{)##Eby2mMe66*9lTgy@ zTKXn<-I(pEL^8kMsx!QGv?);LqVF)TA#`b~gnQ#99JJ3#|sk zM%*XHNtx0RjuPwL8mqOedxA>*Wu}tOpPq@?eK18K2W}K;5-KCMh~M{JF1m5bnA2~o zmi2VH$jru|L*gf2wdr+76cO+ig|+ljrpRHy^?CAigYD|3T8Jz-jfzu=_^zFy1nlEH zoX^f07fbF+`?cd{kWQK)I1>2{%Qaa7Vr>f)S}#pJJ;p3qg5O?DQl^X)%*Zp`T_ zsw=9Oe|j0Dn0zCc+XajrmeQRpAKJOKJQ0*026)7(=E0#bYx?1OhLx(xa>%&S89X@hWK=}Fo-X=a( zOIz3MrBl#gK@-3J%qZS(c}-zvq-yu4zNjIwj76K;#EEOiWi-K2P3oU=@xA%@OL*Hh z82uD13jC21SGd|Lb>_Iv+H7B5QL|8!^4hw131z1bpBv{^cS=Xu+1s;Z+~nn08}*@K z!Be_R>;|8-W{s9RPpg-&_v&ZmUgU~2_Vvhcnrb~^m^{{7VAj+*7QkwBR?5|Oc`fj9 zC}m-|0&W4hYxJi?6ZOy>Pgd`xD^{y5;)$Os>r0CJj4CiA@NQ|d9s~WZa97RY^pPqr zH4zKUAo!BuSz&YK9?`RsEAP+qx95Cto+^0wd493EhGQ*BKSMQx~_DE zWzVjH^|^sU_p(6IJ_Dzh+rf6=)BN$SAFS%SIMu!5Z986GxB6J~u+HklfO)JP$4(s1 z%g1|nzBGNuCEb@t)*)^E;y}N)_nvB#lb5xKcl;d6M)xx`xx*jRGk^HBnfC@6b*&Un z$#IuN#^=q*70JnAL-{JLtDeyzPM*bsO#uT>Myfe{y!i?(a~PgX5>UWGAYYR4+Te`~ zk8|!+kl5Rrz_G!5__z+3Mb1IJDBIha#j!Q8`jLN%e?LZC+dThHW!9hJLFl}6&A{-5+KcX(^Oy5lqNB8&K zN`^2^jV^($(yPsD^Mj?B3cJA)wBVy8K=szoSj~lf#|CB{iPBeNtB&ez{%iwIZ8C*md>#AE=`Kzk zLl-S?%9c` zizWq~iaezCKI6QneDKt0K?~sF)6qjN6RJ4&DT{uIrt-b079N*gx{Ngi_@R_%R28U! zWrHkYtSY_yd*ghDkG)zB6i^|r#VR*!3RJHXE(H{@MFE7BPC~6hXR%G++T4J!VYxE_ zekT%zDJ14xCb`ARRm}Sz12pXsN@>OhDyYJr4;WJW9Sb4s6Wqt2H1-2t(vSu$5w3{d zm`lMb!DEsu`1^}5HDek>Vo|Qosa$Cc_gHO{^P8^TUEopW83se9<{DOLPv(?-uuknr zmOqoOVrnggJ0*2NweiIje?|1mW(!7M^IALLkvehOJ5bY=01sR<8-cQVX<*^Eb>xm* zBcT(aa=wA1eQ67Cbm18QP1>hQjSV@q8J-0|=BOABST%XZLfC%j&3ITRT-VsTFW1m) z1PZ&JCn~vJim6}8#R|7xGRc(O2u~Z!?}&OF8VRK{Os~lDw&ZMfA;-?yoy|q#owvt* zZ$(#tog8mjt&OY)3e3zFdi5O)(IaL}K4p?9=myB#7{``c*eaQ2ty+~q*#Trx z&{(ORqo=jOx!%76B~xj1cVv@$74V4OPJ`TDho$&PUiD6Gnlw0&dI3-WHf@6L28PwtzSBJN8c$CCnmDLYz5``GU6!H?I^ z7;2W8V>=O|@!Y3uqPJAfScCgU`Ys0@ zq1!v)9DxDoUx>KQ^>+f6y&dDVP^J{!?y)-THp-`(Wx2KWYH_lx=Ch;9B^*pXYaOX< zsSq{c2+TBY<2-%HefT}Cb;_mHW?@bbN`{AueRH>SxovZ|Y-xIL*h0hJ?xOK})un|u z6C686-fJE5sYX?vT9ZZg!{uvhU1~Zlh)hKF6kRwXfxe6BgfgH%ZSMiNRm&wy3Co$_ ze$D|;amAWO8oDY}xXx#WsI@|2!=d6&_%-BLw^1KAu|eCy@gkH`%OJeFGPSbU2;c#U z04_@|*_{L5%$)0cd2}SdfhAT=jv^A>PPd5g?bV}vnsE`Rh#=@KHtgKRMgZOr7i(Xh z0sjt?cGg^}+ANoxoD*HhsAYSfB`({C2t$Gbg*H zCZkNa<@Nzl2%vm(`p(^lnG%qZTc*GY|b(h)@tXPnPmenSB;0?{2ZvS;D$LWNrXuC+!C}&Du8IY z@avQ%#pFI1Gh-$}ifbQgEcdRyeVJLvrSad8S6H{keeBUOZZV5A)Gnh8j_!$p3yl9X z8U#1GR66SGrETo9Zu+im=~HrOZVbv-f?3g9%r+=tagr))B20KAI3Q~-c#=0tGDaf;bh!L^F-rQPrEfn#x= zxcUolRXs>65q$dEe8XN4uA0ma%C)4L!6GXS7hCQ2rKv8#C|wkiH*QsGr~R{baELQyee2Ai>o79e!^;Pw`{5>?aBKYXS5*bNe4@ zXwvLJ^2(^8lX@4B+e(wA35@_P#dauoipU zQ)*ag@I8<99-SZ!>{p>lJI`h!^z8>M?=AsV&7Iqv>ES_2LC^B!&zr+;dCtGYhb2AxvSWVnl@w{#TAsgo(PpRdAKT7%SttR5wf&{AFcQ)qr z7mIy2;5&^0zvkL?`5YS52O=k!24}C812H?P%2niZeZn904iIe_$;fMXR6y1F2t>L z&FxeBk32a=>W+;+0RszH{01}h#!=(gO&?hFa7xBk7AmT>sZPf5+nF^TDJ4L{iZHG1 zN!K_TMfk!Mw}IAims-@l)&}4W2_q5w)n(ZB(um;G!FKR=-GRJC^M0nBiiPsJq$ke6 zH!_7uK#gy?RF2IYK0Gn0`%DKEEkTPO)PtH2qr8K*~*+uv3Lx*E+Q<7o;ou@w~uKnLfi68(Jn zA%Qn;?9Arrv~JH8wq@pC%t`Q^$!PR-@|{x)LQ##vP20$Wv<3*3Gw%M?R)9yDi(@Dr zr$r>qo1?t9Ns)C;BAEcg!W({ee6kK)q`0%CME0YE=vi6(0)Brl4mer(RMXrX!i<^s z==@)6?0zVEdxTMQBYmnEDeN!GzM%@}F^_i4+8cryb#yl>Kt?k(92TJ!rv+X#U<^5# zJHD4A9aI;TpSerZPd?j$+{nEPrO=@#-)bGdPsuCT2b-&$ycE;jE0{fSe|z{P5DYEJ z=3=|S4Jo%Tb4m#uu|TbIt!KeRC{>X^$;&mSMjFL9RBxxbe{cq1OyQPm!c*oQw3_f1 zSHH=XJyry;z!V%KOVTLM_p3!VU8*`L%86pZ@zrg*DN*maGY+r-RbVa99g+*=Qm3wT z96m1nOy8kOH2Rx@ooO{cy|~U-x+DuM8-lGpCe=uUGLJS}K|HE9;CLI-5ure^1F}+D z?hZs5Nf(My7i7#Q5v7T7J4<70-$SkhPI0?zcnII7q0Sv%0Gd#WTB586z~i6*P8(}{ zC?FIy#GFm9s#tG%YO@l7Bbor+3vJvAvn?HV)wL_`;VuQZ{|O%Tyd0!nC#YRoj~D?Q zw`MxUcEaTLg9jAP~GAIg%lN}EFNLB6>K?_{CJpsw!%_1__0&^$vLarI3|j?gnjp~N)cw@)bq#e(>RGXV+=KSJfHN*_PI z^>>2&q{ZyeZ|4NrKoJ5gE2Ph6t8gAn+mkLp>)RS>7-qEDmbWy z@@(KX?4p20zP8fvh1~8yTiUc2q~N9@So8s4aXcpeN9Y>uN{1tmlAtwKZ;{}UHZv4$ z2T5mpJV;;#{+oolMnLidE9H~CR-SN|$ql?10+k}-2a<&=oD&bRC%svdJgTA zr{vmHrRKvBbw<@6tq0TyS*VJB$%o#eYQC~lLWPoZTTk~ZF^{A!MWE+%B zMJ%YR`>#GdK^F)l(9)O}WWvy!f9w9Iw_E8A4l(tMORQ`{UE@cNWO?+J$8tILd zR7VAEG^^E48S+4uwRUa8_ETRw)LFE&KM=#slkZ(#ZRE*Q#ufo4&g2>Bo&o1G+XsPJ z*-B`5aVD5mP8KOrxpu|;Nc2zOkLEU18~r4!fu z#gftf%{?vmqE};^ULaO#HN@aD=qkWegG*(C#eIyI?%y@TyH_bNNIF}F0P!@vdS@+6 zLzPQ4Ivd&RE9TRTvI_!GM1}wdA$ei7TSHANA{W2bspJHl?6g`NWWielh}p~Cu6g~b zYIB5#UL{gBUNRNnc=#Z)kpy~Y)EY2-hnZ|(a#98~3R&CiQ+ra~Scdkf3zFAcV7c{m zIeep_@=`66 z@77p&8KP6GNX3blV@HL<%zqNsG!tpM0`WG9RBY3o^~7J&jD-ENjs zee@%dyouk>ab5+UOfs#FV)a?O&A!$RA)Jlh+X2*R3P>$?P7X9bWGr}yyt%xBMsBSJ z^DyusG5mIm19$1}`mBzNw`Vc9V1e@*2*x}=jy@h1-(TF{%PSa-a_QAgFW3iRMw{72 zH31UPc>7N%dsKqJ5k3f+Mz3cX>Ba?e#Y(;6aXOVFDF`xclULh7Rs_Oy+Ti}%@i2n* zmM~S@`}X_|P3AvN{2L*X zGq1+O%rhXzNbJrPBJt>jkXTOMGTr`fcdde*=V85=o6Rnyu48F4<7^eVjp@NG0G5bP&D<3+C$ zq>(lVE9nGkq_+JgD8n;bPrC)#^jK%I9#J+&@dbXMI1`~L<$Uf3I+k=De-2b<7qk6` zv@Gv|L2J8Imc0Qrj;gHO4+kKgCS;NH=yW4e++DnZsOQY#L9Ws`cE}e}gI4GwAmc{J zbqPoL-~6CZ0CZy#6&T0HlQ|%ipyrRzkG4LL-p-^q3!QyDFamk>NraL^$M|5W86I@X zOq1)t4|VIGGH5U**aHv-16bVv(%|B)eUWdpR{7jzDZa@Vn_R`aWFW_?9K3F_seLg7 z1_;X#>6Q1USAU>DKFRKWsCxwzORdrlE1zJ8J3&B}W4L5n5lqaKd)IG@Q^^dW3SNqT zBq9=^ffnI5X^jCSjgE(9xYit^)!aaVOgPe;094w*d$}%r5I6f$3`2a6x}o8NK&~Bn zmZ$UIp9>;d$nEN4Q#85Fpzt0_8XDyB!Z;AP~;Gnj!Ph7m0?IKHHqouV<5^HI3EVr{o%&S4kj6GqYU$v=3BY ziRly^cPR=E0qF5+If3EJY>PT>gbxNVVcwe_R!3-U6;_DjL`3fhWMPmARe?8v&G84Ak!_u!1tj=UNCHju%a@1jvz-3N*=pr@|mHWMyiYcR=GJN{%wErVE`4 zCm^L~j$07lKbM#<>caHj3(%@R%Wo)~jQSPZ(3ZPZHY_N8=P1+~W3zn(?dR0&o^1e0 z&H4OTB7g~GBCS5FPoOHc!m~#M=}30Bd~Ds7rs9j19{|?sPlk-fUh~Da)!UQd&q$vg z-_gA_MC=m4=JfrPYSytfibUQ3s2fi=1#nrF1XM{$BR zQQ0WAH2(y~?u9~Ydez+remmyECn<;q$iZJAiN6bq!!*5a?=F;{M97|ekiqP7VHFii zo2MP2HA;dmnkp7Sn8N1orq{t`Kp3qAHY*&S4-t*150aO(>=O|$2Aa=P{AL7H<&|Vs z%Bz(!)MAElh~hu|B`vqRzajx#heo*O&n8uL`xgcMRknJl`4s+o9H?&M3DrwUm)N7f zv7d!bh?aaKV6C!Fmlc>4$kvPS26Ee$94h<4k~8lby#yQTL+E9?0M$zz$K;@HQ)<=+ z$iv})hs+VXcJ8KP-f3A`A$4K%fZ$_iv0t&52CL z0Z<5_ak84oAY^*eY!2~Od#LY?^YwA}-+dKM?}yu|79&frcrU%xg=E6hfI37lN5Ga> zxuUoL(z{~+eE=D%V2Uni?>7!DT0;=&x{p1|s;-BADLZPx^i&dHVQo5rduP6Ahg=>D zl~WY8vr)-|R}n>5`+M&RT9Bwk#+(29cM4c&X^O-Yc;Nb~WN@Qvxs|(?--8!Zyuev^sncNt_(9w%EGU`n-rBpmuF> z_c9CxJVR@6!evQ$Y&NS8oJAV3eI-tD5z){bhmJQ7aguI|VD?x|HA3k#ICUn^YHO}_H8ymRvXc2z3_iN%SH6Y!|&};|latO6GJ&N*nA zXT*tD`ND(i@Ue~{_yenq_-rR2aHs>9(Atyoy&(83AVWCZe`M9Qn_Y6zVS%tH+P9K^@n<_}=l0&-3p(3@yz9dHA`uslL{Hca`;dSj?S8sq`B#ffC2 z+P(%*k}ja(3`a!-8?ymkK{a*ggoZU58^Fz#NEEllzWlEi5t;=Ef<;*>8wOI##Q7YPgs+nbe)q^ zevvsK9Mm=G9Amolx;slJ?@4QPcL@j%VaUNVZJdEkU@En;v{O+6N(Ex4-D1@Y0cqG z?p9mtJr1-?_b)r@g=cu!_8_8Ql^iS<^T|o1BnJWEF3zkiO1vK2CgGEln*D5dhQ{;< zn>;?Fv~k4aUFJWyyj(qNkNS|)prgFn8PYLuyuPg7H6Q2H8a+Poqe2GAG|p`@nX zR@~me3PLBV8BLP}X=Exlt)?YWDfD&(@#)x`SeSa|C~+& zpoAvBR)G$kR!ii9QX7d{B+$k7P?e*sRe}IM05c&$UEIAu@z)kdC-(!e>w+=>(g6p03p6Q&$|F=fThyDrA=S`&3?x}?WMk8J-%Zn1 zd~E$1;wBoV&MZ>HwHqO(V`*93e}McW4}*Sp;v{>}U=!TtBATM3hYplCP))u-W48jTFutyRMa?p)&=rTOe8(XI%unoWO1(tbE8 z#lmdVCBq#3B2A1qGj)17iXEnqGM8ontLnHg9sKD0!OXL{0;*d`c4O0p=3QaO4aQUH z)Ze&Vc%CYm*YH}rfA*uq%&TPXQcw|=GAF1%Za3(Gi>f<*1D_r|LAgf(+afl|i>l7@ zl4cpWFB%9Tfn)ii5k~1|Q#2QYsy?X6g+pLH^gY%T#$#GgUlJ<88MSEkbqFb7b4FNG z@cC)zsym_?EJ(S6e?0J4bcci2QNT$cK2{^Pcm6O>Im5zdi@<0v%^frq4MX07QELc*3y(msSE{HBf{4BJjVvX=r>3 zMt|bibYb)d=~v???{a)I^y~BzYGnb0;-*LMfxa#mqF%BE^yql$4+}q}rlNzN(8T-} z5-Z4zj0c+Rx#*?7FOTvS-E#a|#rF5#zD3idSX0Q)ijZf5G-&Q-X7JE-W6M9goRh(K z@C{!EPfHtMO75&i`tJpQKm&xThs-~Fs}e=e>brICw7zXV8-bS9`x$iNi!MFl5CiCe zL`wxMgvUDpKN@e&nXhSzQ*vo;*;pSv_(o|)arOMfXDzt@e$f9Lod3W52mk-?tmtk= zXccgSOarr(@qSfn4%Z%dRJXdWKd%SD{N0f0<2#_86avaW8DL`$JeYv;HXAjILqbFusFf6HoRAu!$34*y z+V&M^+%q(8>CXMvWtv5PiS2HNS+PhY^P=hBRWxb~(m%gy#uEraK}2n_s3p||YDXmN z{#FCZen?XxLS=1+-%McJUeEK3hrx!^xqn@lMmXRjho}=Eut^~Q_t2Y(IOsE&k$x9{MKr$xP$Bqny@F%IqjtedG{s ze)^?-0#q>x;77Qx;zgkQy*nNjNS#eg@Uq9I`0ekZ3JHp1?8{zqxAYqjn+f(6?C?NO z8Fi!&suT^4GC@V09Rv)=Fb=lAU77{Pi;$#(WkX|?y?0E4;o<N`lbEV!gFs3$Ar)S5(^%5pC1PB*a#qdMgX+Sy_7nR2Dy zpMxC@&7X9tp7LX?-ku-xPBH`hzP4?|L zb;m#0wgMI&K?*ge92=c?VMw&F|K}j~K)u3?|Kcm2kWYADUv?CMjS8k+DnZFK&5uEo z#fgu23o8`N2{j=wTgOEs*wcNA##+Vh(2EH4jn&KY64G>x?ad=t?fJ}F=SMNInXxo*gAaC zXVI&!R?y0%{-k^(`O(3S4p_1!=4ql5Eh70=LOC}~J zbaK9ZlyA@1PlD4C`t$jOz`v)$H1y2ZdxADY(*7O;98{$UrXF}uc*9KiS-uM>sUgXd zjet;Ewa@P9bZ^c;J$M-LQ$}8VR_(*Z+sBakJ!DvQ?v;|x*0-6UhXwLzXVk@C0AdTOj$J_1ChxFvq^&pK~ zuJqwKPOv1>G>=&8>Ci+?Ag~ql;j_ztu`W9a`Fcw@U$X8lecP}@Aq*#c%gShI};$z#_FI4Ux<|01Yk1X4RdwX$==C4Td3Q z?6B(~-$6wH`bYpVF#!=I*vW+1TMCdPLj6&|B0+z^?}+nF&F+}QnCgrr@~Tyl&Tfwm zr`N*2``tqc{fsrcFF|f1_}SXVj+m_LU;Ir1M*UfYvMRfF+Y;mEma zFUPPy9ZR$;>}`uD)IvE72#u344&s2CX1uR!K0~zB2?l>nLHg!X&11Npvz;*=`*o;H zgzcMqjv{5#X+%yru77na!E~PRMy0!{oH`4o0z*k&*G@RZHxE{A{m6 ztQaXYM?X@?m;AoSRzfyjvbc@GqUim`;F-1;T!c55S7EbO*A*1-J8AD~k8{S_sxztB zSBZj)1)^;84>u7JpJ?!73}d=@4!G0IV6dG=jK(qJ)0+*U0wYJGBtDc-#6BPB?-l$( zqHOtbLy!qhQmks1PoKlZWz?7MPt^U9Lz$NPq5^&Z5^VFY!;4OYn8w=u`#qI|)iWxK zHlRmPDSAv*)jE4CKRH1!Ha`3VlWur&uM5yS{*&`P?MYUNoi@L?_ zK6o=m*!Jam?pJv8E}SVH&)3c|56yk9Ea#HC{hXRDPNeyxI=>c)_uCU5uu6vz|CCHP z!g%su->O=RoBjL^Z^q2*b7_Tjb1olWfSEiXTv_gfRw&3^I}oV%bbFaor8|^=DbKjvIu0-|-RGXVbjCNbXam8O*j zg59-%kd}%?-w20lt9b34a$;7Vp5`x+0Cw_JHLM3#24540oOBk|rm4lQmzG<<=z_2I zgT;EhP7LcoCcGzk!Ma6F#cvzt>Y$5_ZeWQQ+M4O)~yGs z>VAcJu@WTEs88{wG;n=!5l>bRXky5?9)yX)s1FX&y^E;JSC~Jl^OX#>Ogz^XQ&t3};o);I>#s@R&SDx#7 z>9dQuS)h^bP#Y0!M^_t#I~(h@fC*5hF_+n^>LkDauXNiqO5o&#O*c#`vis5?Nd7Z9 z6c*l2ZhY7{E@t|k*igN7j^W}#qME(Ur96{{6ct8@?+@z#^eq^nCx-g*hD7XZmV#dN zkA$aUHuT1!HoU8Vj#-c1q4P}$bJL;5ac$OYTU#6VY>jjPwBuUoiJ<==*(dbrQ4zIY zKs`EHJei(`C$G=P#(9`KiZBS*OR~~9{q|qa-<1gwQ$PmvFj&3y(w+T7iOOVjI@1f= zEl2BmNjLrgF^CBxmr2B|*#9Mg!hWqi^3=HHcANj~%s&f}Q;9kkgRC?RqdJtr#)d6d zM@G?1_f!duSTTi2eo~ICfkc~hPicj7wDT6m)gVggZ}9lDnrHlC7qh&zKCdRr z<<=g@yic12cGWMP$+78kkUQ-k9WQnCo)8uMW6S@!{9=P_Zo^tKCCx$vMhDH%LxO|< z#b{bue*0E~-lW$7XkA-^OR?o``a5E$;f+88NKuI$*Sb52Q1ZWp7+=ZFg^D~++ienV zkMhsQPZRQXmw2#^-`Dc9eY3yZK!`Lx-4^H4BIO{oPacJKr`BjL>ufI{kekXdiRPLA zWnP>L>~qa!(f1$`q5J&*46#RxFEte()5Us!U+B9(n-^r!<~bRY#Z+Q&_hJ3vC^`qX z`IsVm!^+Q^_x{)Q{pqj`ta&W@Cc!}PGyidY1qO)%rZ+&JSG4h?OB4Hhk$}&ooq9X- zO(cGk5Y-Q$uPc0b?thqA-y$A1m~yb}w)y?z%4V&?_69=kODTt=*LSZyJ_&2%JQu}V zbW6e(_C%hb6`U=FV&&HHxwZWNNIu%eGSHo$$)^)nhPerr!*@%x{uWyi15K}PliEoE ztlADRJviTR#lLZ^MOP(DoAk{j?8UnVx2>~#_yx9Xia&u)Pcs9&kmI_{chks=5Q@K_zU3*X9c~Y3vhMu1JV8fQ*TcR zUGC`5uY10d_?X&qP!`0PuJq~?{Eu_MWOJN122*p0P%_BDlNZ-4Zd?{b6lx0F=l9O5 z!omzYo)5XX(SLrrhiCik@kV2OJ33oOq*X5ZP$2AP4`Bo8Po63R4RpV8B-ux) zN#CaDgUQ~NAY(R|pUAHE1m9KI-5}jE2Nf|#65-j8by=u?uR(8W zU+vLZ;f86xNGO})5Fd$>-g94Bs30x8xb_%!^l}1EGVpPM(N7LgY+w$*;O!BDx)Qrn zi&mv1++Q#U2IvB*Lv%D?RPOM@fdZA!hCFRBd)tKD^6VA!+Vq_K)$TBfP|*J~VP}@J zVj*S?%Bhd6G^=Rycrc)rlb7G5NYfZ;!+ubzCm4a@!nIE}=b%ba}FB zlS9WSIu4_V`IJOZm12hj4|wx`lK2ftiz0MyRUVu>=x){UW>xD?PK0vqZ^@V05MdA6 zpsj|{y9$l;6`_%=oCsUIk3@}oJp;j|56%Pl=)WRrUXp9rq?GGWVOKEfOZbYD4JO#3 z83}{sq@_>qpA#M&BAA4-iw`{`PpgrhO)pe%%6M^%?izWNxx&3)c)&?V7djoO=O@MF zJU@?vop=j)IoKz)@*Szl3#cuYx6BlVK+5zdk1(=%&D}OSO&0J|0Hp^uCt+wCqcd{( zb)h5#i#ERPxJJ(vpadhin8@bRQGNk^S@-)AFF<%AvG<3{$%4{>p>ZLFH@$5wFCXtg zeRti5A2}{RKjy1mQL|@lgY#UnqTe z{s3jK4dn>E#sU&DeZ>iQaqGEw!-Ivttn!p4zH(Ky%w*Cmk{u>1==pN-zObE{)IN@B zV%N6|XL7%b`Cvu*IH94&p6IP!sn<2r%ctwJ{v`5_-}sZ2?`GlY7xBi`KDBg&0Siw2 zjur^5q`W+@O=^BeZz~au-Zq5Vt`r=Gt@R^b0v?}|h=DwfO5TgbI-qEi?8D|iAcC8fdu*>C6;OsFcAy7J3=+WJ ztHtUVA&)2{Vu_`A70*q6KW2CZ`ZzQ$-~9``^tDv=GWN^Q<-%#3yx!MZdy<9d( zOpWA#F~9|07&an!ud>5TPIif2L6<6uKEG`xBsL5>i0`>|2iU~ zFq2)o<)ORr{CrbVM+2*X+a_#Z#PmDI+F?&=-vr!h^ewtkJ$SdJ{g|VN{xbC- zoCmt?&weCysYO;OCwOBdn&0g05Pmtz5iiLO8@(4|Jk~l$q_;3O0b>mHXHuh|PsZ>- zPXantIRE3St2f8;i!T{H-^qY`U-}-Gs~h!t&llrlHZHg&Rqo8dRvav#9wV!I z>pp&6`!dt49PHuaylz`Cpbm8vt0t!c^IOxSa%GeaB6$^Mci$Bp?DW8SOsUMw1nQte zRH9tIvj0p(BqJm?NADChyT4EfQzX40fgAZzY(Ok5Ze-nmV@@yUJ<%-ZR{<5cVC*qr z#ETQZ?}Hh3A*qHNd*80?e5#=n$y@F2VYTA3!8ICclgkzG6D^%$^`4~1d@(V%0t@>( zLL@VXE;{8D!!+0D!qmtLLQaPJ+J5F>u;G}Pv!#dbDt=!EPV2x-HH-Elrx2j6?zlmK z@fJ+4Zq6zZcN9heTeo*+)0Cv)kf!Vc#e#_t!gF~JXqyfBxUEda5`Oy@P8?uAE)!

w%feCqVj~&9&ijLMwgFA)H3!;Mk^`V{4GXyd6=b)I21JkFr6NYRK0M(<(vuF@OyYCRm6WNK;u>M0aTZ z60#H>I1+r{UelkC;05%;77}0-TA?igMT}uN+ibRm(E_({yacW@3!66yZAVr8bvhKYel3DFkYC1$fVUo1*p;W-Fl}u2>CWor-?eq~l z%|80{Xzn4|ATR?)~$u;9DU9vzDV0r!|grTKt?!xoDFu@*iALZ z+H;SlS8b}oTy(Ub@0c=N^MP(O3W9?)Uswt1ujv;2{#1MU80UW+j398^X3aXN=AbTHUs>8hAYtUccJ zwxO_%pH`&LNNT#9OBYyOfSfYSikFQCLbn_zfaf(za-ErJOmu=YR!h$laFx~j_0ZUA zlK{>lK>?1SK{4SvA_4O`DL%X7TIe=WIAoiHU>58OQzSI7Mn+ze+Z?860+IAOD*>Oz$` z0K6v^77InVg=qAU-H(xd55}6hy8+v+wsGnh=|bVzo}@-b1qY*p0ll4(`#so~FVQTK z%v*A&0PH#zzeC1N2|EMVGhqMUVd-b;4}&R_$YUm=0ff2^bCP7PBN9 zPxdotULmFd(;=|`ZMpfw9ou|VNY95V!-mqz-?x{>2o;MQaDGvl|0H-nl$*|KpM#4> zxxmJ$KceZbm=1S%ZDi?a0(ox}aRnuTc;|&UXl#`QA#4f?)YG$C(z_M2A4CV7yNIuA zu}T6e3GOc|*LHRnIbm01oa2qo^tRHsx6yM)4WmmRWF0|924M~WZ7bhRK(=0+(V|xc zc2h9yN?7!bgrf-wQi~_s$P1tWY8#494@*g`HWNp@a98{h0)W{NiK#f#Q6C)i+yZVO zh;vsJw%)ftqr!K=AlPmT84b7EsUp4UOU2im*cy##@PRX>ow3EPUN$JlSAh z0IH?yeVlN>U9}wOf(9OD5+daXUhLvhS4h2hE1cHa-kuVnc;;X)`E!Bln=HPUBxbWs zLuIhA0TH4fj)@|k!QX@lc8{?~aBAXs^r*^IE2(XHHIWmJn4u5!-8KWHiJ8qIrS`cE zq}$`Qc43uTQBaaGmBHysAGjV?+snds1LxuJM`E2tDK<~TtMJJXaE5C%FZmD zZy>!|0R;v+iwdg1Lgq_|aI99+HJm)F3TzmYSgJ9tT5o(vUG%#%2UzH18Wnb4KC!hm zL2Q+3x<_Dky;<(222+D2{pTb=_N`~cxs7lotPdC2#ll{@g2ieAbm*zRwY@Qj22Su4 zJ7l5pApJ?|e5W-WtoY(b>cr%WC&$i)!6_cl?&gH~A7Cqlt4G-f?PHnT41k~#b{EgI z?byT3#73p32gLzo!>9{1L9mbq`Kv@EwmzCt)?GRfdV9d20GCaIgA>o2MJOVaUhV(m zHLTa73iO;YoGma9L@VmImP|~+!ReY8XeDe?f%ln5uXN6&$Eh!jgZ_kAQ8g>H`XLYs z$SWfoXq6wNaUd6=E<=r*h_^drCR9*zD>%Tfp&SAIAel8dl(BDrN*>qk$}?*+tviJq zslqw6@d>!d+TK~IX9QP?jJz}IIg1fjQ;J9Cs%hqg%ic11+j5$(5mB7WZy_H7GlOA` zwP_srBdx+zD*_D9b8|)hb*G zA8a_`yf_0-s}=GpLC2WAO-85Mr~L{+&xU;-`o?IDX<~#?ML0YA#wr@s&8YKqXElv_ zLGwam;*-&wFl}IprvMk>qUB=TWo)0mxH$xENjCh}^)jbPsFPAwaO!4R;biqL9Jm$( z2f9d8iF;HJit&T$<&^U6c@WyvfC@wEHeIg6JvyW6+W#X=C=tg3nuhsplI#Y-p#I1C z14MQ=)vC!tz&%jG@!V9^Ht0C_1A0=y3dnSpukyth_9D@voAXRGZ~`|6HAO-i2)IJJ zDk%gG;))(}Hv!GIt}solDT2fw5981PQ%Gj50dzcWov`BsbJJ;?)U=AO`9Q+|uMAyd z3uAe>iUmd0OFs@+XMvatXM;5+K@QHI$4&v_A%#2ii6;I1J<filCdgcTmq#C^U(;hqpMC+SxE~VwRVgt z3ihM}(h7@YO0-BYEo^DL*I2R0?}j$ek4Jaqg8%nu;r!{j1LWXjhRUHGna!{YS9qh& z9Q|cpbjb%9Funap))hILe1jd@$ZFG=e0j{_4|W7(o}*KzVRBhXBKdP;%f%9<)f`%Cqg0 zErdXXcseb-IRt@4YFo|oV`udVtK9cR^&0XdY@KQr)%oKYKm3O_Sbhg*wvj1|$bwA* z#zvlSXd@1oG>cdEkYnNL2tzRd%4J*QAUop@QvCJ=D-IInX`?sp)FHTH;C%32qw z>l~rd>LaQ$qM!+Y-;V1do6ra+{>QgPc7aGdq{W_4z3I8Gh~nBJ9(u2ssV1Oc2^a13 zN|ZrThG|6N2b-p*Y`>)|7|J@~UI4pIZZwK%>WRQ;VgQI2RXa%g1S-p*g8;2?pKdx+ z_mFKN@%IxrT2^Ir#z}nO_kKU8C=+^8HlRg6htwfqc8&WQ^UT!2Ula(0X8> zJ2qHcbuyvi51V8wp@LB_XODsr7YCr@F9TWxW?SJNO=DYX* z$M`?T8TXEJFMIFzU2Cqn=6vQepV>eVq<>4>mCxlKoaDvIz{{vgU^`W!_UuV~=hMak06nIAQXXcoQ8e#uF%;#N;|vSE>IpK;xgBXa1_ z>_kyi#OYfZV~xT~-&Mg3oQjl{2mi3>3SOi@5gNm;>gg@U=o(XTbxzV*DSH1Rvh{1| zhU(G_UAiRDpP$AKXH!>gX&VT^L0_*aNE(Afr67u}37n&GD% z;-HcC70X1iLZlI>>Y~L8*B%>T+PxvYsWDw6Q(fMJSdA!3YpHYMD62nkXClW5g5AT)0Ng7bCi|GWz-OPKuVYc zCCf(dO`tGqFtef}xJK1^@)gkFjDr19>ZAFmWtM2b8arPFR%oZp1CUQ>R6QwK&2e&Z z%5a&36Z8ne&P z{rU4v)iEk&`9YzY#e;V`XUEyb=DLtpwt&)jUN>)nj-5ibVW3YQ(SI?*7Qn5Pk0QK* z3sZh`7f5AdMw(Sc2w`tXsMQcE+4tbR=EwcYj$dBE+bxQ0lCA0N`zxEI1ff|N6&vX9 zNQ_j4qC^C)At?7>Vx`|a12JP^kq!I% zIEOGZ>)k6h#3g*EpIRgYqbE=Y61;ii?UWo1ZnA%>h;Ykw0^X)PT45e5i~yvRvrWfb zVKx1_sjsX+g(37jBG0*Klg!y7lp$~f+Gj-58KrZnM@xeU<#fHMoLJt#Emz~JgwQS3 zoQ3f(!_}Isl)}q=GS5SCc1y9^B*z6;XvdkKIt*pDhv9}zsRt>)0#SN)IyBT6N*shq z3O3t61pz*HvyX-Bm)w|9z(VzmVi9CGh%(zwnaUmi!DTE+`tC7^W>KO9@`2jKF{*x` zREaE-dmvd6qjhAMWb`F zhaIRPd3ul#KD}t(I>#x}7jYsv#D*dvM^2mFnSR5}bz){5EsLE$a{_^CPVEi~ zlK^=h{b<&Fe(%(KW_N7yc8=?0SgGOO@Z@A?VQ3WmN_o5u;s)$Rt8{=OLqU|bxN;K} z@J|efc zHVPF`WqX>?7<%Y;{uVltd*<9;VUi~v1%-Y$Up%k9@`x-2aOF}->Ni_%nLz`x3`B0U zF<|LDY)3Dwl;j<*7WDgY?<{}j8db%-p(5mq(6s+`&&$^ z^t{QtOl1}dz35nG+`bygVJANX+Tq{Q1f2fda^HIvpyNoO{OmpF0UJWQA{Dzg1d5$o zjN<+NH+4YyT{vhXHwf!T*q5b)BPqM&KT2D0AUk_B^|6PDv~ax*@9(ZZ{^z2KAFF_` zXw1lxu_Lbc6DDke!3d)Fuy;strwja;A}G2PL=1u=kb9oz@oT@P+B2`1jTQB)ae;nH4F4 z=PKZ;t9T#nqYZFIN%I$qpZpJ(qeK;;B#t===y@Ru!1v2HqIb9Z2Gq_b(bS;5co`XW zUt@)4Am`2Fj0AqH^1qL+>b}X70MrMuH7FIcOr0HPVz;vaa!k%3E4`>7lPA{VApavL z_F{y6K_68ZD~_P6Moa#H&y8 zLq38mm=jY}wW$t?p<8Zqq5GY7PlCMwPDd%&qSTxiDIRJTg32X&Zpx}vC4iuC!5N19 zCH~3xx9X)7rec}W<|T?4I)TFJ%bR7UKBJvCGg-?u_5iO0D5ah6zNwm%-!mep5X}kr z;==!f!!!K`_p?^wJfV9S&RHZ*S8P`IIy%?vZCiEToTf)?0YBf+Up&*UxWtbSL;cg+@nD3<#S@u7&Gb>|C(#%~g;ZD1btmf&9`qN|6avAH`V&6=e#| zVrUZ0ayZO;{>pNJrR!YGDAv1GAV>AMye<~t5RKWa?e=v@bd=vcpxkNqIwoLiG&^z! z@-V{8=$1k-gR&=Z8+7(j8jIk=YbaW6?2t>-jg$RBgSqBB4ipFgLO*fsEK^f(O(#Ad zsi9ol=%_L|6_z#>gD+>U0fm24q_f7B=A))ZKLg&!TBf+CKhbyNNzS?*Q~Zj&1I3nc zUm!ag?}!EIg1}us1Tw`(a745>Z`JS`d}p#Hud}_)bD(!H-yXFDmzA8)%O*j5_3`VQNLSaU3sDQWg3~Krh*ZIki z)*#FgDKa=gxD~rfx|tHes+M}`XnjXjd-b+&VGhJY0H271jWPV~@KGdE{`1yD8u9Np zS7a}UWq-Wi=K80{8H;|1xPE?R>i&=RZ`gCKz3r>LTlbXyyyw%8f7p4c;j7Q;o?iUn zU%&m^>0(?uJUIYYzwQHSBD172D(&+PS5;k6jK)Ac1t8q z@2H>p>g}?VQ_XA?^KTWNn##4`Qt*>2qRV=H%7tlX;&*#+TS$+!eyOy8W%2TX>wcGm zxcJ;Z3E1V@6HP@Ph|70XAd=G02A>-OJ#_OP^;L#(TJ$AU7;^T7QNPqPwM^T(G_O3stjs6 zz$VkiPn3ovnT!Qzh>`s2@gH1A8=1wvjVt=NKbBq<_!Z+grLkGoz;7KJXUdIJr6ZSX z9Eu6c@tsZmy&E?c23nx}#8I_EY0ZrPcw<&|Hwc2j_J){iP>PA-h<>&MVl%K6V!UqU z|GUu7uVRezg#O{Q9Jf%c@E?1bp36d+Dj_8Gv(Vgj6a3Q2CMGaJcue3a7G)bNxFIw{ zKIWykmIEzC&Kne~X2;TQ$srL>ORGvMJ>s?zr71el(Wk{BSL*)SB!+9zVIEkE-w8N# zd~&h*y7S#12_!^b&smC`a!IPE&y4$FZqfIn9-MXX&(Y#PT}~&S&QQ;`NN6^8ezSho zO|NmHgdp}pY=A~Ui)v;54rhi49`E_>QkKtn`mOIZ-`DmP3;6)*Wb5ng3fNn%sfnGq zk&>dub@!Av&G{#MGZ@8`Rf*wEdX8>m(KJ8o(ag<{QFTe%MJF1!N% z`R53hF8pW#W76(Yk zJ@@>_8r#WVv(-QTb-okbp$CnaD2apo1ViG=E z=sFiiN4f96^WfiQz=V*Kd;D%`K5YWvTF#CT-o{g$$~?}&F8mOlkWstlsP|SB!Z4_% z^Op_av2D`Na)=K|9jJvC&}!L|lf9hZ&?-&5`{{4`cO}heoi!SL#y3*Lm3@G)gRre# zzXlGptApQ21yH}4`}|M&;K@3L6`fA??Z*%Mi?PKwLPYsyrXIjbx~$m}p-CD}xQ@-| zRftT7CF}~3;w_=O10Hbl{L91uJg02%))RDXAv~p2;my4YVQKV3cNUDWfL)!q%3OIU zPK|qT4FpTCKY~Un0O6OVLuMvQ%iL;$B{)luWEriJgW1NYDR^)#JnrcK>6#SAA$a-% zs*Ac;HA#(n_(3U>I(Rd%&8f5qf3K_CwTZJh{+|2WKK_NC(jXr|1Iz{-Jd{MkWv{Ef za{*L_p;BfS!3D*<7~W1Z_~(gPXG4L3_w-ZfBoV7s!elHvgK#N$v8Xf0hl4YMxDh*J z;x|~}5pZ?13Uwps&cD;2+L+y)+i^6;rX|AODAo)9t7IWtxo0zP1r6|Ak0l)12HWzY z5U*a``r{7DX~E~j=Ba@|`0`am1j{jp`KCy9waT{1_Hpm0pL1U6?P2Vk#hQmzEmmp1 zlFKmtv=TfpG&q4VKyZV6O^}4fEwAy;-I}S@=sHFY&407Ri+IdLmxFNp3mCn}2t)=m zb)~r)LZ{AP<8tBk&6(E3SVr{`?&1#UhulNS&{+CV*WdduvgBR{4myOrK8pm86ht%_ znCY1p7SBsk|Cj{*dg+!!Jm2|z!~kpm65e)gy?o699_Gg24D<8+l`O@Sw6arAH$qVWq~?m^qyr`{4?8pbbkWN@nK2L4kZ+B(Yp`V; zx4!oNv(pk_1EJ0eiLW{vtb|kaNtTGS4!D)4+MW!_aP6?thUWs}eC`39z@hqgca>78 zZG~b-!BiVuEVx126oPrX8}=j39xwl8yb%3a(Yvc zi4Os+Ch%yuf)HWzIal6M@;^*ojIQb0v2ANm`G^5BO<32n)1g?ZqDj`PtJ=G+?C~AT z#B3)1!(~SBA5L{mK|?sHjsWn8O94Ix}z` z|0uN5Q4kB?emm+eVt;?5(;x!>EMk=5H6&dhXlik-^L>5VU)_H$k#gX=FZYl6*06d2 zc7me8)L43sqi;lp_eN-&vU+0m5%2W17xLf4D*<8(@9MN=x_JLuOS7a1I&!^lYQ6P+}{96lvFPPGrXjTM*-` z(&AD|z$*$TcvAN#XzaWBStR0$55CraOwWaFbQ;=-Nze-9OhqIaDCqjr%!gr!r*zY3 zM@RvaB=fDAzpa59ud>GQtcsGe3r8@wrwbYYWe`gv&wkMMu-=+RoI!x)E=KD}tF?d~?0J15cyiJ@FP=fI_PwK-&$;J~VO` zqk!JVrilld6F~Pk>L!XE-Xo-x&{djLfk{izSbz;QBaXz~@T}d??n2?MBbGEJNv?y% zQPRXyMz1=0=K9RP-@0(l#b-x-6bKT|@KZ+*j>T~2@Ph_SGeSI%LeB;GKm7C0H)y+Y za4jZJu7>6xrWOL7qT>41y%5yP{ByAgFq&$lA`98`QqDpcxH>c8uKeP>u-xRl@6;r; z$uwvp1_=t?#1Jp^t~qV!}jHn-b?*lBk{=|ab3wIieR4`2CR#QGoi=@ zkSi!Bzov}#UK4fs0cXBD4D*u8c>%1u`=!V%EOVY!`84*&Ep_nwXv`L+nVn+jw8*6) z3cziKT#thOdpt>IzGQurJYNt#kjb3mOa#T&Oai`CalS zUsj7X9TH*)oEK(IcJn>I!7BPi()M7=L5h#YQ&_4!#E=oqu36ZC`awnYqIUt#V$7o` z$IC?=hgu?u*0TbmF4{&kbsIm#etsq_E{6KD*{{C6*O4j2VoV{WA#l+s?g7l;d%=_O zcbRG6*GsU)NcuP5`>z%C6`M0FgT~kUc4z*LVIC|oQhfr2$U4}CGgfF6|GyaerAJlz z6K3!&k=E7x$YoL@N*9&Ge_HJh9nU{V%od33pq=bFO?8FTu`!G*%^RiiYErtR z5hCT;uSxQVBrJ!uy;Ju=4J1AVEc-MNC>zwXj$(e(AkSP;LBOq`HHcjz{% z$vFa1%a_TwQLb8|IqxC9&gBQ?#c_*^YTXv~{)B7C@T!Vk&gUYEKE=~_AFgB%kHq@@ zw!-LbjiY3Y6eCNqW+lUf-SZhEz057)^=bvX10j&@76U}J;pCCH06I{lIX_t!S`;MK z0vQ_+YeGYIC*G;uv9t^GJS#o}j}Z@_btS0+Lh{!j^{jzeCNlAe&pN92?Oq!kpxByx zB~jbZ&`>!dku-3~u9Oqk_DwaJwm{yq!ew2DW3F0mm15U_82%AwCcE;mSgyEL`tEfA z^)j!hR@Dqn2=z_7!a3!~LNIAS2_eZ~YLT{%x_w+o zW8!K3!PX;I;q#b4RU`#nXoCc|*> zi|40{Y24*736A0aV6_s0k{D9}Doe5Vq@~8Sw7RFUGIyK`Z6EyN4wvT|^(p2fF>&0l zE=WErGkj!0YsQm!wxRxOuxX359|cUmm!83p)M^>O$?q_-%2nfjov+hkTqo3JzuJB?0?D{X&JC_h_U00%gx>eQv?YD?z{)A zQ;8SJ@~SfNDxGVvn{)oo+`z zGIZG3(WmyeawFX5BkxX#n^d{ZpKg2)BMtqvUh=Pv9vG&SSYQq*^rUi)DjH4JHH%T$ zatDq2>yv8WMP@tB2ZD0#xE52_CnyNDdj&5C zdJSZt(cY_*1Rn*M5A)7&0W?w$K>sFw|5C|T0kcVChv)taMup^bZD$!<9_~jBBrNrj z*UoI?k;H=^86i&VmBnR?)YRg_3Kj%=>jR;kMonkG zUxswGlp*hTX6SdI0P9Jjt6~85qC=rI7qVN7M=a_Kv9cnBwr z;v@zXw0`~oMQC53h$2R6u$fR-yMbGT( z5!Ok&YYWgy>z;z`eo7LXi(_yfqfyP{xZUL~5udL+;@C3SoT06D=Lp&gD|)gXR~|1v`1Wuc@IS2y^tLX+rB5 z#Hnun@z-ZG!-1ypL9tYg2GuWyDhUP@Y$g%xiopA&x>1MpBq?sOF-9Vj)1iS}4V_JL z(XE4-5(^iLfzl0D?T3h$VfFb#U8`ScY&{JFpfOBzu{sxy8m+?!IFj!rJy;L#OU^z6 zrncMG;6La;URrTR63XO!%i4yQsHUhFkJ*EPC6&-Oy@Sa#q3h3vw9pdWg19VY*5FHo znjcMEpF2`bFf8hiBQ@rUT*Hz*vB~KpF%d-^!VKYYa^+IsZ?}rW;6pkOogFw zUDTog9axOD@Y6oo0saG3Aq9hM1qUUNb2s{1P`Rhd!WNs4}Jl&ic0H1%Ij04i_Q=;04O_pDR|4T zHI1cw4%FH|{0(SC=wqjnEO?ggcF0G~uFrL{;m;2?-{2PZw2%jKcB@3^Bub5+Nr{z; zvZ48yXb2YrodRm`Lh#S?k~V&LQ}W$bmqN|;a-Jzt|3zL;xx1bH&1=ZGsVMf%g_qYf761w>Jd24;zaywCuxVza~Jx#gYwWwfdAQO+VK+c|=pjta#pD)y~;&T#%LJ zQlEnzFnSm0Cx#|$@T{+_HBGF-dJd@kwN)?x>G~41(>zIvl#Kc zr9LG+-|nRJ6yS`JDr5ea--h9EY(E0o0Wv4c5Rh{UbdnT@3JA>}Z;u2+p1+c%H|~Ba z>vCL~i4rPc0`E%@%K|-)s9sx7;GHp7+3fP1`FybZn2>TG; zYBm5?^Cu)mBNI$LfDY8$2tKL1o!6Ui6gCm--`cr^Yr?P>5$sap)7~el_1A49&6ETmS+EC`Sz0B1KeM){WtITO}2Ts66hRK#o6xkKX$m5t}R0e z_^+j*ytjJ$HP5yKF?yB2B{0q)l2mVHc269Y9AK0vjazc7M~ooeIg@>ec01}IDsV;J z6sHE|LqPV*!+VOyxlV{tuk9jSf*`_Qtn78J1Wc%OZS!#Mp7j`uNc3+g6Bf;l^0tAY z@hhMw?evfFC~>lByzwL=N zPc($W3NSK)?H8@u%sVs3Jb5P3PzxdvAiqJVy-W>Qwn8K+a*tFVhZouhpNoV55JokPXP}H&o=Nye{09nKDEy;$@b-y{tQJu>F#yOQ zR-l24|Hp)R`XlYtTB79ZO(Ze&THe11Cxu2F)WHB8rx9RF|NNWa6v!jH9|M#DT}HFh z8n*kx6@kEZ4p*=TZfUPHy~%&#CX|K9-^49kqp5)*r-1G3&UH&rEdcS|kdF*JJ#Q)E z6nIPFE=wm3yI037>nwwhD~HlXJ_kSMqdZU)LgACysbVG#x0# zNXHz)l>xb8xR~HGFy`dkkQ_&pHyAd4KMSSjIK+6nRuqR0Uq>Z{s3;F*SP+ch8GqQ5 zFO|-EMgnF#z&+%Sb@&yC2ROEPPxZ+;A`XG{#=+*~@i%6?BVJO87jB58l~g@7{)}3D zalZ!a3RfJcm!P<^H{K_b>zf#aX&N}gIcceG<8=HJe-F^PZ6=_GtC~fvck=%FjBnkQ zpIwU7D$K(@Yhw+uLGmT(r%=PLy3F=~Y?wpI@jx2X3|7!*&% z4bIo4seV#eMeu<++x^-0y9be5f1O zP8V6$kDx1{n-i-rH!0`Xlx;8f(=k`PtZN1T4Ag#jh+WT48bgExa~49&8o=F{94}^n zzkKu_57@3~QAgt_Vs9t0G1ZGHqa}jErncb|n&O>anOy8k}n?CuE>A;SZj3Kz6S&Po6 zju|V|d@So6a$4xt06hN>@6jqk%SI(ttFyTsdLSnw8|N7*S?whjDP-|={YKJ0P*zAx^y;o0_LH%J_rg7 z72#?(GTB6jC+-|eZ|>k??)PWE+wO?j!uMv!bWPmI&F^IioXsG zXK85(+S?0RwT~HbJ0a~4F&Zj600Fbj%<#?5SD6I`qs5vZ&BSe?h0es&Ond~<0h)L9 zyaf9JA+hC}N20lRG=m;DSqWFebGQ7#JK+AKZY{&MLO^X6?F*TlHaGrVX0V%ofG4hi zSB9ah7HFb>5)X%bx`++V%$+JlOWys|5Khm_S++m1rf6o1@^T8_7U?ra+*PN7t$;B2 z*Hgb9?+K2n0NF!8gS!CS?r_EFM@lRZ+=RA&^})v?a*caKXW07^lx&K|3oYhnG3N*S z>@|1|^k9@A`Oi>GMxGmj>g*ebohuo?iGdN8`in>7K^S_qGFx+A8Q65cI(IKhB*35O zPfvK6h+86VOk8)b??@!NC)uIqxUGGraF|+Pe`jXV+%2|$2#Vt9SU5K znjAdqW`Y4DaqyXoj@xOSA2>#Sd=}g6s35+%)c+5PCMeIxG_w1B=S*%Va1KZm?7%y%LdZ3`OY5x z&8VZvJHY-X(-;XJY^?Y5GAXtd6^-FR_U%5nh+8xVOumD+6Ui7{#75T@Ito073gMip z6w8X|%^bPpcogE7@lC<52SGH{H?|b~p%Vd8Ba{fKW20b%AJ>)iApPOoCk9f0b#Q{g z2gVNIN<`xg>ir+~)?WtK8pjrsFM!|&Tt4UN79{#|j$`N6Q{Lu15-HeR6nkByUKx$Js9ycnjgqfHa?6R0=w&rhu<=g)0lLFo#|$0iB1e+z`H;6SpiKoX}w z?7ooT%cnShox(v3vb>N-B38o&LjntzIVvuQbT@`>=I_Po?|F~i`x8Z1c4@dH(>}7+ zMoR_+I6O}d@q>S~;q#8MFnq6;Ds=Qo{3<{xgqgW9^k$C3n{4B7u01j;&+t9p+8y!N zsQ+)Q6>=qTJbv@3ZFwKeT$a*T&i(VcJ!~sEoaxu0pbI4iS4Ts&0;$Me&oO?q#^Ka( zJipexF?743!5+#1;#Dh;ZU-ZT0<6SD{<#dxKIxu?G&zv;lpp8mx{mmITS`^?7|k{{@=9$WUW5nU$dhy z+VS>-DQ=(!@s45KYn0Oa?T0(T&PtMGWUU764J;tcnax`N3|A^zi{YdoAHqL4S<=`7 zpX@A0c{nmHQxpnm4*;msZc#7HSX(BScFkb4isO(K;r@xM%AXyh%g1m2o=(K*P%OgQ zn_2t$+nNO~l$H-4U-3VT8jYderS@;@_a^C4c?hk?Xdp@CS%M=jbpvyHgh;UW z?~J#Xon0c%77w42RT==3=V~j{M>Xg8!HSihh3W)CUFrcrtmIn zt?BDHm!afAbpNBW4Y)Db=J>lR#m2mU*fueCl4X!>9SczfLmLipelk|hb_^s148=e{ zsNlsk>BVrFm28&(aR){nZbVfvYke6i?;xweH8LgUUHO;wCz^BE2@~lr@SI`SAr{|a z6Hf}MY%BA5Ph7(xrXhmIL}b;_{NUHF8|c_qUcfLZ`{T#5)HKL292TdcMG%fb!Y$b2 zSqhmd5Hf|OfF4G7Ugu*u+f$v_8b^E8y#(J{O2HBsPmIbhg(Wci%@%-k*~B|blfEY# z^3b7#ixku-UW6IqmyypS=J4LI|FWYi|;f)2I)P612c68mS~lX zvBw(aX!sJSVglEIrDfdF#}Bm%h*yp;A`< zt_?(VgZ>qA^DI<%U0+-%bM_m!&1oiuc1R%KNYWx?zeZ&RY$yD*aS@B0{F{5B{Pk3) zbA|kekq)v38-3~3n#DR1D0ZVR4Q_$p?}*wo+J!*XW(5=}Zsu8`F$pidL~{?hPM|mZ zQw3rX_oa*ec2fKR%GN}( zMnkTyF5g=l=+pX8s-O{C#%8056-D^g;w87i4JK}i^HIL*A-~tqoE0IC<598=_!D{W1t$=(1Ek7$jslFNvr`Dq{A(~%m_6F8&xy4#i-8hokURK$^Dms^CJHd>U*pDY zGzNzcH{05i2V7e$=|bTJI3*YPubo%{p$lYf5bY2TZn4tdQXoscw0d(Fc)R%a*O@~r zxGzo=4v=@yZ;sv&TT4(ykg1>QDCBz)8)WJR=Hwo2r=Fi9-5cTvMM+b$X3;bYBRlwS zlgK}paXZ0@qh_A57Q8h?IDwvon56Q*aROyG_?xu5EqQLr3;bJAIl_!8mfuXgPQ>d> z{o(OqYJKM~r}rB2VkVMK)rzKd4F~iV#H|E%3d5a|>sH*TYX~AqpK9fm2Y3mf_fgKb z11)BusrFMw!(SUi4>ZRXBW5`OHs7s$$;m$bSisG~>Smm) z3Vc=MgqU6_cz0 zjHgE9iW?wmHipm5@{f>z6XhA4A9X3)ScYJlF3$s?lu-{udNx0f^lu_-Czsv(9Bd`z zIH6`Hb3PZu4%;T6HwYSvg1_W|3mGA6He;=8ztf2b5_LBKX&DxRSEu}Lri<@nj_snz z7kHAtkR6195YnTL3FAPkB>Mgl{_{KsL!QMm&bWn`;(5com~;(qv_LxmP0X1!f-_0H zFfAYCY+6f3z@0+njC^%)VxryB9t>0-;vI{yN&XHmgm4nEp?;MpzX8vdePN_jQ*dmp zI2S7|^b!|{;^hyB&(C&P?ng0~SfY+OoA@Wf3NSKvsTbaTUxy)lETkqkNZ0e(X=CGL zp2f-%R!;s;OZ9Yr3RLDhhBrtvA&r6SJj5)AZ!cj7>EX!pzHaC&BauzipO~2d;!w}W zz(K)6A0|X5BczE6)xPATUP-Y>hf6`XIx21Q3_7m2=BOm?$|@Fp=~0 z7Jm(FE@KTm?fN3#<0`1lQJeRMFiM%Qeh`!6xSZ2-TzJl~R)a2!ZRr7#a9wc$XWl!o@gY8~v15f6A{K{_-EynCLDg}a=GV3HgDfX&% z*E3gb2xmfIzUXbrT=4)BWrj9Lxa zbPFI#j+GZykvgi}k2}H-D7O94`bfFMn}7JVya@VYFwXQ2WE_rK07y~MK?fQ$6QvY%!uB<#3;r&U|E`D8f(mA5nt3oYbD(cknNDfZsLb=3L^0JnS%*c*0Iv;ab*Wq+$^gHbr4~D!I1v}_cvm<#hq`%;6!mB zF}<^6o&^7hd65E9MWpfX2M_btxZxV#)K_3qTCn2$NG!hXo)fjusf`Fu#7X$J1~%YZ z@9$`e%-tU$2yM9^c*j-f?S3)!7U zJOUp?@2gdFbR@wZJaY0Ns>y;s<2;*5zGPv_roPUMoeYgP-H}B41WSlrj&^%WJv0R0 zTGFsB$lue>_En-Iyyo-7NEJ)yvOzWI26ft+&-ZWT2W{`^s)OzO_x&_KyVSaLt#!@$ zPc8RjL=1Yj)OPTmGR&8(A=~|+CxHbBEL7fCAoy;CT#T+IcvU{*7H^LQ@*)9-2H~S* zhtGu(OZ0$RnhJm1G%)eP?kj=3A5oGmOK#Oy-4|J}JD{!F)tmmGg@8y$fN z!>$hv!ceAv6ez8?B6>Jjad&_u zyBuOB&=x}r5&!3E^LgGrP7#SW+!nx^{S@(mdhPU#A22XXVtG4}{kGMfo*vXA@!%pK zx??cJmA_$OTlv3vaXfbZfN`8Aib4k<+Xw0mu|;_fiD4zmv%cQic3)LWs@^|=Tey4t zf4GIpLp%@Xekgu7vHO8|g&)9_Xr!pb1r_}6yDyc(zXqu=K@?5>aHkX|U+2QP6Gv!scEkSg6IYdKdK`M$LaWDNhEbrT0y!Kn52Tu|O7eI+Y19$I zkODpi!TeCp=R3ekQE-9s2QrE^Fn+u`1*Hwl$WX!0RDm@aO!G4@u03^#NHjDqzN=It z6N8VXK$@z-bnK|hTk^lH(VX{wbaibcI3_*FeXD}8HJ~XMADqkW^~cfd{RtfAoK{JQ zS>OR~{{V4p@ue~XOOYM<)~PO)CSZl?adzyktY@1v8{i&iLR`oTe8BgxpBd&kz=tj`q zPub5*bl&UGMSrf2B=lc`6^n<11wJC2_+}?-zgvQtFfKH(j(B_VkUs?rxoR;qxZJ9h zB`}mzXD*{a8RV_uSM{&`7YaSbR6xYe%|}341?3|R#1vJ_0EMQ<81fb|1eF{_kA9J% z=Dx~ODBMiC^xsObuX~m1?muSt*Lk89VE!k&{F}?TA|I}j5m*CabXx_Qf=*-M#31H8 z6pcZDA-iE47XiD3>awE1^_h%I7)aH82xeI@2(sIm=pikI3(k=Y)OiB-(U$TvL5ZV1 z)sOJ**2A5o?l_PEx3Xg?Vt@}=6C+H4ehsr)tAfVCxav93a#00MxHK-0IZT|O9NTBs zQ=ih1JTb`WS;wI1Nps7I2{5J^1d>9*9i#jZ%A%dn)L9p#Wx=W*-i=jt!_d8r%x=s= z2Td~RO41>WWlSn42Hl+qgCJC6uwAn_QxUSS;Oa^<k$Sxj%Q|h{wLNnGO1=q}(YmYJI(ywe)Fr8KISc$(FDu>T7)o+4Bwu5u3 zzju0w#%9vs$gA65{sJRbWuk*JPaK}*Lq4kY8onm1Azbfw)4p=P@djGpurPg2%Rxg99IOcpx)67pIfnxt< zl%P?sax!)9%z7lpPxQOvRdk&^mYT-n;`>-jWO(A$2S}JFu0tFVKBbi;cvGD>adC8Tmy=8 z-@DR!$Lz*(7x9^Qf#F%D>$?8qulW4M#YmJH&E!4ZD@5$v?8Kuhz{KyDpSc8H`-$>t@cg|}2kSRu znC4-J+Yeb{@Lzl4pMX~WZf2xL-(x;F!`m|TN(7K{8?ahsDB6Ki`3+KTefJQ$s{G`M zL6wK}L`+XMY&ZYu&qaoo>m$@WTo*527bONFi*?cLYv)k3qQIsi#i+5!2`eTS^OCNd z;ko9mk(?oX;@Jpl@Xp2R0;~!vA?HH|-k-5+4O?03zSva6F-(M7x4g_87 zJ8q-MlC|yzR#J+h?f;XTynHQODDrJn7UZlK&;xjgVIp#@8`@+fnAFO&IluS!t}ps4 z;YtL^ zBDiv{CVg$n5Y_{IkBZi1S5? zZIwqg%bdOKe#JVH$jqR}@!^lCI`0dYDXXnMqC+x4_l824U7*k7GUW_dfkV;a)T;uK zUT0R$&*&5DL&O;gT&d0i z=Sp{!z93}@G(kLg$Xf!0>>KPMJ>K8-KA*7>OMll8IXww8SfM4|gfF4G%Ee-v)yQjhQ{-RbS~&ae~Zwq4rhP@LHW zVWJO@1{69umU=-b_%S*OoTS|=w4U%L99OjM3XaKbde{28M^&hCCnmanR?_nxihPPs zv)Y1(8aAPV2O$f=W~pe<5~Hfon)7L`-L9)T03JBGC~mnj-0z0G6--{j`8$*OCaN?( zcRMrv8n9Bil;wWq{$vQFS8U?_A#qg=G=ZR2{!3W=Ky$q2*rD(Pr&=~bq|lYe+@h*2mqoY-3jzp;Jg-{(*03%~Fzj z0!JoI1ybwhg|T>2=FGW{d2P&cQ!994pl2s(% z4KOI95Jm(xHhL8VOF;0~Mi`p66K0q|K1yvGFu~kFF(mUh^Y2M+9Swcn&)veeZEEr8 zK_LSd9_m?i;R$d}#(H8_p@8^Y9?J5>owo1IrLkOwRoo@4Mr9UxiBDTwn)ReIfB<6j?wf4J4UV)b}G05BBi61}@Lrq;d9m@pi3uPXYi;;*D zl7XfGA2HCzoSV-@59vvv=?|*i|Ge3C1pey@8ujN#&AYPhK;a6NOt%^{zHydVQ@u_* z9{;oUzi5;#ntm2Ce<=zauKqMO2xo%TB35rQDz!Mb2m7=F3P<#y2v+7dhsqhmk(!R) znS)s$=5Th_ae)6H6e}lx6k3oR`Sd_?%?D;H3J!(Rxu{c@O~FqVcS(< zt_P_kz!rjCD*6_O|0tX_b!d$jh3Z5c5Jx&eGA4zd0<4x)63%*J&kfw1i^4IZ8+oba zeiA7{*vx-4Qr0=^2@^}c4H^@1n8sSjSAx}jhK?QL=WEo_Uc%GBTw8E(N&t|owX70#>zINW6+rs5zkiZ^EW0@e5j ze}P*Hq$O2&H#ZHpD<)HPNIV!!)|~cy!CuP~JDB|2GSqsZXpixk;=#y2h19b?{LMM~ z8(g+_&pX)=RFq5#MvF+bN?JaO|J;9^Iw7rQ?{lZSUxR_|YBJf{%#zB`$v-8{2P%$P z?Q3)BL1a2};i!Qsesjqfwy|2(*f=2+qfIb0?jI;VBP={(O+bimmcG}M6vL!#KGpa1 zA|oQ?TuhpGjr>ZP=+0GU+b9!#{Jy_2P3ZfB&60ZR2W|Q9*!tPSDxu?#fBV`4 zY5|({0|^=h2W7)sd5KX*r#jRzsX|~tm6Det*FN~>@@5u#vu5Or<4(a2 zgt{@60tKchBjAY`w*jdkfdP=V1;+r^K8BD0L^;tb!PWBSi1<#nZh@NpP z8gr=G9KUURIqHRML-36Y`*cMh2NLgP=xx8AzqkU-#X>EU6#)IJE)nKlG0RQBKi>#5p_1(5hR0%q6YK5dA=ry+8GR9r}(j@bn+mC@oW>N}%XbtA}8?uGo+KG|Rm| z2vVHGjTr*yxweV!8M$;sM6JK!mC+eStDX!2Ee)i41p(5(l zWdizW-;Q~p#Uxs?k%=rjdZ4C2KyF(S?dTd6wWuzu5Z1qB65(%c{+SivNMPksNH`1wIQiL`4XX1`^MEr; z=<4diXD+O_RJr9fhjcj%`92y_hWE??Uk=&o?hXGXvdzXIdtc^8)i+_3H}XTSR;hhARZ@+7POn_Vq_=4{IAI=}WtvwXVQ+|Q?cdiiL7qZAXu>NT8`6BG`C9xD_% zn5SAdg{$T1uplT7y~KaUGp+J?GN(Twf64*^>RIk^{ldzw zBSUZ$>HXe;x+0`1COva?C)fg*9)!Vbg5aoCm0t6{R9&oRf669w_r&^?7bFbS!g;+E zLrdi5{kv-4p<-{d;i`rTNK39JP-+1~NZ{j1zvp!u_9zk#01%{O>ZA~|5B!&r8cogO ziH9$`_N-PHTF6(vqnRe2^q?f?#CMfqg>b7Ar%gL z2!S}1bm4n2X%53LKcvdkRDv~}>Jjye})kGZgjffzrQ?SeO(c*+3GsdAHaRKU8oHh9nBNOQfmX? zE4^QdbUa2|7yET?hlZ5>c>^@ilx(K?Iv9Kf*EAFb0an2o=>3Hk&dM$Y?*S?uNCO7% zlwrOH$e8@Q-u(yOU0-Pd#x$5GS5_N}g9=%O35;&l0)B$l?#2e2ZEL!I8+!$>D7`zj ztOj75>jU@y@PsHhG9~qC#u>w($hZ6x!39BJe0Wa+R1;?=Qmm)nn5N%bXk!_$3yMP+ zEEvq}Lc^iisZB{)i|S{OEb#Apo(J)X5eJTr1}C0sU5AQ6BpqkHXqAM%rETdda6|a% zw+8lJiPMqAEmqSLC;LeJ5tK^xg*J=8^&Tudt(-p7?6=W6)=bY+zU-Cu58_?F1sG!mNcR+1Nz%?x*zNf!}rM#Yu- z(mR1gaYiPR)V62igZe8i;(Bv&uRFk|;2ZlLSTpw2(db z3|-8Rzs5ELiN%~w+G{8l2;&SGTLUlpPKlI!BdxF zi29*X7f+jm;UBmkchD&aQPj+~!UL4cELjUgy!MjsXj&(fK9hnW^j0*QF7R@{ZBxKa zul%t_3%^*w+;vqn{3sI0-C<>q0z^U~aV5r_8XX9I^Xy*eZsO`rjY%h=r-0hd^cE!c zf#(7!&bIGfa+RX?t>U8AeCD)*Sf*2jf;?H=j1=swFT&ppNf}cQG5pg!+TetW(-ATSt!^OnUin%{`wRtUQDYy zTXU@KF0BuULt-@XoP#3V;Ct+vJMBjoeva%HAr-&p7GF^FPmN zjx4o9Dix*&mK3L0Ol_|HpR7-8?(L8Nk-sQ{?46lya%>sYpW#I{Qq;AG!92| zlBukV0?$hGf~b!aMq%F=P8{hR!UU#GxhaMef4a8HUEP>*OvU3CqqbGel#_lkvczkG zb9R?5Y84kzQuW7~$TK&PLP{TdoKq+<-QqabOWogl`2cgts(9oqg}A0-r$_$+DbHL; z1^C2sL(DwGxDGheH>c4m{$XWncHv?+MQ&4EyVTCoLSTIHa78 zUL@2z1qSo{GDY6VcZMXGa5C#qtLMnb^xa@%7~Coy&d;aSk>sP+GEhd4p(v*h-g8D% zrrTSN_-dXVGuizbyunZoz`>Hi4MfG5?`JVg6T5B3>&q30iC=DM%zQ$rzJWb@IU!lACk0I~ zRN_8-(I~#iU?~P$(2}T4JU<7RVpM)|KJ#?PzEh!#=1Mh{R`37h{JNl`|6WhM{NF^-?4+ZX+ zu2z_~4~H}ij1mI`6`c6S8 zwEcZB_C?wajQFnGvgW7EGDm3sW%MmIx%5Ij>k5QFAk=b4ks|YEq}Bi= zK(fv+TDs;{C7_&GF;K2B-TW{QO=fro;>RbE^2X-k>i0nXF#<|&6V zra91W=G9@hDut0q)KgI0--It)?X;t77DRKXB4+>izSp8BTCj4p_dZvOe5~&`RS)sl zcnG|iZ@K&Yzr*j+QXB0^W2wH_Z=P(KODodKKB>^=eo*DWqqe*NsXA4aatV~cNV`$6 zTGp9n3g>*gUM7Svry;M7X_lDMGk3$u|D>iD7H)nF7OM?EQDAO7Nisj-C98mAo_ z!6h7?tO?D20Rg4lqU@V|>#n%?!b&(?(b0ruQLn2cy z&0vMqYTNV1O#H%m>2x-ks ze_hXiT%VuuIW%Kuvp~RoHdK!Hy$-=I{-1534ojXT-|Dz{^DYCd%eaI2*mm zCp#-+)KwuO`(qCHemb!l>P$IE#AoGw6JZ3RP4fA%F?4eNKb*Y>RFzk^Ho6m|en!!g z7#oNrks?J<5D*YB8pRC)N|kP-cL9-ZOvG5xO_PoVk*@SAMpUG1K&o_+UIe8`hx@FJ z>`lJ&-!cAs$H*8b=ga1O-?i3Uvp(~gX9t^xsl!usk}8dhLe^7)?<`f28^*j4c{zNi zLsx0h)52{bfT@iUa$n+hE1@K(ZRFvEc^WhZ_b>i;FpP!~lCl)jaupi+TL`M#WZXTX zO8o7>+f*H6Y@OK`3-MvywT#U+688uQR{haYF#Y_gjtlJeWdO1*|Az460SC(qz^WaA z8-zO5>Hz8Nc^gofXu~AaR~xiTHIb(DRgsRF@jvF_9a1rhX?jwfe#sJ`au}W)U$R@f zo2=AUBDuZIWAyD-w}GcbA>d^>v%2^fF_Y4}>VYUbiASH~^a>kooTZW97CtV|7LmRA1iC8)9Vy9fAR+b&UTV=i<=f(rt|2 z^Ls5%UCU>4KwW0Cqr+=HBOYigQVu)l?WejZ@Ke07KJOr9NUcnx?cJyB-P1D;qi+>p zhQFYGWTWHxldf+Y@16wohVmZWVOfBtKbgT3Ol9*7GGoSO(44eYJL;g3q@|YVxwC3X zfvRZnR#B0PVqRwt-1Q1}9F4L$)L%ntGVijLqyu5i=3{b;s=23ejpQG-C-IwZ!ljWN z8_$L#vC1-LD(@*+(@1fI6~V=$y(9`qI~5(q&bQddMA@^Q{P(@~>w^#Hh2LQJC$o-y z2`2`obxck2ZT`CKNNSKQCE*{t^}(+<<==(JV{CmF#cQ(%%uV03jy%XwlBn8I{;Eej z5i@6XIOIm}fv$ojP5R_}D_RT#R$!YWjwg``(;(M|#RH$iYNI1dF7VU^IzU$ zJm!ja9Z^dyywSNC#8IqI%Oy{G|5CXp18Tk19P%yP0egzO)X(fN2Q>yz{tcIPQ(K@B^vE#?Wy#{fh^PE)_DWwS6J-Ag8q!Fyr+sAhiQ2HmZbR$>~u`U zBfYp1G1zPP5yF-QuQu_a2J!D-Kx{k^)No(n)T;Gf=dlB&0Oo0GTqoa&GOWi7Ff1Ss zBM$fzIs|CC3GR#6?AT7mYCrG_IfH&1U}>;F zQpq|TE#uFi+E_1RY)W>vK(lyng(c{YCfm76f=QO?)dq>`uM)VwpRD^JtY9 zbOajUyGP2DB;G|bcdzE_5uFh3Dy6QKejLw+{2z!LnfD=<&bWPSk_P^3OPVmW6W)}L z?*?rU(TMhTNBsWvZ5KD55&kCC`^%SPT#bOIG3vgnMT9I1kS64?)n^_>pV-$=Vz+rA zD(2;h;Xl+oLpf^8+!xS#Gq<6Fogwu#b|^GFDFvh8z8O0m(%8taj%matUs;vFcZd6B z#s*i=5EU<^2jKXiJr(0DnbOWU*@~L0A&`%DL(eSxL#_%6liUCso-Mu0+|SgF|G%(8qD?8o*@Fy zhsD*jv}FF87k6_sq%{tjufLPp;{o>+ztT9y9$rbCpU^LuhUUc$m5R2J#?CZOKcBvwC!Z zcuWnu_QQ4T8ccm?X1#a;GtH}L<(}#BY{)$#(X_ZE%Hq{HzHmXCvhW&AoUBr1Y77e5 z8SggU(Z{5}Xu3IB;%E?o0x;M7HD7=YzoTh9shWaSiV8*LZREsrYwgMZ^_(W;C$g94(rt8lRxNcYS%q1v|AtW z5|nw-p=!0>_U$Nv2``=-#b9^S!$J?jr48S`>uBiS-K31vRTdTkz&EB?4g&AU6#;r= zX&?Ey3zKJ(NFJQ9UI%Q+=CT3iVWU!BIGobTnn6#@h=L!rc-;G)*GTprM-AKvR0v6> z!Qz5~38`wNK1O)z!R_TqI|$+-DyAFxfJXBNf)Oa;GO{3lA)Nc^#TxcKI|P$*&rROd zs#`EPFHWOIx1iaP$X~X?Z&4p!9NcVE`G5hK43QMEwzfveN>B9sz`Fs2gup@>fXqu9 zwX1UFIk}e5U8fFAwkt(Fc(DBnw3)QDH2Edj&`t$2r{=Is^UPIA77z{J2xyGQ$BPpus4zkyo^_H%UF+XvdhiV8C z1QINFDg?YqHLnr{xPu!!eZFGPJ@Oo*a)5?!DE@Yaw3}kALOdI=1o7#*OhLOK?j16E zmk|9^$;1Lsa-{QfiKG&W-I=*fC}sUx9#BmvHk9toc?KikG zlp>UVQXcbopMTf|$=Nqraga(=2JG89$&S`$f=7Rv_L?cJMC{5joQDE1nrd`;!I&WD zJr8Z9G=Opd=(;Qsb)m#VP0(WA{gd|9ePfAbm6v$Lyyj*IB9I>I0;1*e9xA^u zsSi^(%KZ4%iF|e8lnzh7asb$L40by*OXuW8H+a&3+5Imu%RZ z_bo-K*lqd6@UG@>_p1&YeiO;(k~As{8}+Qn&Uf4H|0@~F5ywp;{a_?*Mi2qU04sGW zxSq|NWKcrK=g&=D4b+X;ZQGLDgqVSfUX4cUwg?|8t;nQ#90XG#cHNM;FyZQBi~PyAE(f2TvWq>wo&4HDy{ zZhW?RV;zd=zTA^O^AkRdNeAdf`6OaAKhcakpz{t)vk@EfuLdMXhNyq5ed3-_Me-vR zWgz4%3m#GrFQ&gKvahfcDX)+%p>Fe<`J9@O5$LnYb)xOcCeM86Dv{xVnp|W)slcW_ zljg#tmYf+hrgvi^1kUHh`3Cdo4R}dqbA*qzwecSTsV9FU<21ER?eal{i>7;~{*5xu zr24qvrUuQ-J}d#SC&N9r0`=TypQfF2+c~fA`_uTv)sRoucvUcb_DMWpoJ9dCO_!N? zxyX0|irUSaJiSQvV|ai|T1Li!(cY$I;8a8S_d68~kLMYB)g)mvc2Sd|VT7%aht`{n zGvk3nm4E>&TjZa`vk|7r#(b7NuX{nZ0X<6H21Bme;Q06B50ZAWn7nfo^vCODM~~3} z@4i*^{VTgcG=?Z8XyKm{qyY2Zh@G&2Knd6M7lAWmq|0BGCYi^Nag|JeHCGF&^)bRy zV+?^Xx3w)NQ%^|I-We2}q`BkzCG zX5}wBu9Se~1 z4Gi?as4}&G&nkRk<~n3dKs+@~l6Qn^9p(AcWM8e&^+9kO=b-nEL9WE_wI+a5JE|am zqSTZoKc5v})NdGwVb!e1@q32|t>>`GJjJULdY4rCiB^Ux#$>ix#!|J=tu@@f`XgG` zV(R+w53=@_#f8^9(I=~zXIQSTDyu1XUlZBJjTmQeGp-^>6cx?BSf=w78NC^vk!j|t z)jLnz21!w^_xwzG#~Cg`rq?1{WVinDvq5jLcSJ8o?E*B4I=(2ED2XU9i9jg}KSL0( zXRp2Q#u4;hgD}f_Gp0i<34AN6;8XVX5580`P}VI4Kl99_v2x2ySBH9p0P}?B;+fP!1R_QVmE0Q0nXzPL|C~hO*U& zSTAXA58hQDdBa*lrz%!1#Ci{nyr-E>a(Y~3wMH43pHYfK(oR|sY{JX{;fWB#bp%Y$ z+8QQQ>v8DrGc=cx;$W*BYh>A&8+lR(erjw|+lgrw%pEl<0zPK-YOuW3C7Qiyac9*kHTw-oXXA-;1n1@x*F3jEOA&M=Vk`17h4vW zwHqU^0TZb8#$3Q!-8j}WNJKNWM$&wDA!lG|xIt~lPFw2Xo2>oKBL^y{9aVJz%_)<^ zfh7%}Cd;SQxtL!`7E*pSB=zqvjL?h`xy!U1XSz?W$hMFJO8vXsOAZv-$-J0Vg@P1Q zZcl6@Cj=7Lo$t%NR6xsMSpd%JenV~MBLY^Ej||PEu106++1mJIzz*wY$9fmfc$B1K zu!xvUFe5*kcm=2b+*SGJ#azzRkK{k=`>R}ba&+{%-__zq=r>tU=llBf%Lev`aNCRt z5i2N8n0q8-i`WNgbG74`Re-<)f+{JDBnRu%a~DpXgrOSGG2#5i7Gq_J<~@_u(M$>3 zZ-n?t!^q7|2kWSsu1Nyw7+x&mt)=erv*+acB&sy+X?l3o={zsc`PKahq|oL({w#y} zMWY+Oe$j4igPOheDSIy10lm)L(Hu1P8Zy*>& zqj}w060j`|6pY{)YDBd0Zm@6lAneoDnLwvkL^2m%QAhLvy1xV>Q^Wwee4QU4H}OwL z{@fA)JA_Y7tLZmbCmEJW^#yvmqfDkG7>I_nE7y#rZQ+ zmOTqU`M|4e(UJ?IKU|JpRX$LKGwrVlId$9sWs46l2`ix`8DDNHug8?W;LErk*3g!# z(6U8{*R1!VJLb)8)*cHnJ_GOQ!L)cOhvMMe*^i{y&3Xs9L z7eh87HX&!dB%5UK8ADfov?(Fu?B!0V=NFT8kz2@h`1-!xn~Xwd=EjYcK|MbG8#5zA zN9g-l0&3;EN2;nS@_F%WrV(LlwlGtIlwg0dFN~m%%0*zq@jAxJgy-rdAL~wu5#>X- z^OYO?XQi)TB2vQ3H*wGA#w^}^fmd6d|bt-e2B5Oi6L4xeuHvl4)hu zsVKo=jd@Uywa1P@amcQn9=tsbuTv zfV>xLTNS^`qX)*da7WC$>u|tpn;K{3S2P)dupTD^xJ(tb^H`X-Q}T@EH-t!J2Z3?XK11mhaR$Ci7K8MgT|QSn74Av~Bd!W2aTa;yn3 zj+SY_p(no({XE^uhnCD*?^Wx!&Ml@fDj3V@x5zZ-R}hhI`-=d_f^&yF&@5!iyu^>C zi8{z;M{YCBkc?DNmh?}vf8YPts+$Eyi(+C%@~vrU8G)~`tZQXuXGeP=)UIaeJYsF$ z2F4{~WC%wup(zo=HsjGK&fQ+fxm};&dsXtPO%zJ343U-Kiwv}6NgV=_- zfo2T-4NXbVX$z_wfDpJo%*|UoPQ!|paFW5~kQ)i=7)xS_WkNBLYd)LG)c{z#OtdBQ z_9r$jG2f}YWJlIW>b&kM!+_{0#0g;m7^1|y7`j0VI?{AY$R2(){=)uS-5JO*Vts?t z*SlrhgL$-a<5|fPp&scscP%;y^NcS*wvM!Rna~9+hs&IKxn@o>A3)5mG&wXtSJ62M zCEOhfWCYXu!(M83zf=ymgCreTye+ZQ|H?j@ebo-e??F`xs2!uewZsvl%=s)XVejXc z4-G{uNzK(Hgemi1e*g`1Wp*^WXq_kS6;!XEI#bzEt}`wk0w#?lKIE)wy;VH~mU1iuHX}pn8#QuSgd5Y@YtggmyZzP<=B79z~O%9}V1MqxO_d%>Ih zgsD<0#BsLS@V(Xr?cE(Dmlt28*FqaeQDyFYq#KUT$;tV{qc&b8;s6rQi!EYWzp^}J z5eIvb=cLWI8i7c|y+{9XeM(6%hD#4W8)xmFA!Aj|3$^&3%61<#4;j{amwO1u)Ub9i zsT3b9%x5#q9_FZ4H{A+Wa&Qzfzx7ie*+9{z4)F=NXF!-*wm+|38UqMzBa6wF7TBGr z*j|+Hje{KJs6`5r*}=Y3sfnAT$`HK_}7*wrJZZ zu8fUi_%-#F(lW$yGO9z@1X-KA@Eh+C$2RanGtx3s{d_CASPHR6XW`Oly6WlanEmka zBct+j3YgRP&zak^znmzHlB*#W2)627sgY>n+96taZMCgV*)2& z^EgV^SXrhlCojq5N#>mrq)ekQXl{ptiwXU4y~N_-a*sVSa$BhIl8#9 zGDdeVg;6Z*MQ7}202F`aTi6Ex1SFraU{eb}sA0HF{-ZgqJj4Ov@XAz`%VKWWlbNp@ zDykyI6H`|bjKUA{hb&9fNp^&YA93N82PN~VHrX+x7Wc0x>clg~zJD-L+ANtU#DJrG5wVD;|1g7HDe{FKSfw*4Mw*=i z2{ZRnWDbQ6@WEqXn;vN;5jN*q@AWE2R;*=Z7Wa_sR~ zm%Mxvd3k7Ny&q&;nN*~-=1t4 z$6sTrQuXmApMLi1r6TqIoLM}BfiE_Kwyd>(+$v~5FKTu#@wP2EYREBJ|mx`5C+P(aNj0j|k z=)!;fn$RtIi;x$n1Mlf_10%nPn;@W8T^A>`u^3(=+l^|`4!G*vL%CF8~D^CJ9pNP%XrM={vA9lHF)C*LT5 zA8E-F5H~QEAcnzJVAp_q18013CrRANc)A#D% z@NCjQR=a}b4pdxYT&)i#5lD(lqGK!%<+t;VOHQ2F6>LwZ&6k0*FaAoF*lWEQiCxqp zF&6mp0&_5z0_`O6MQ$y=$nCK%4}s*6dmk7#ITDt>h{+|$5G>iwAuAgsG8icujPm$W zm<&bt3PTtP6stuLX&i@gq;ZgR+_<=EM#4jU!AZ#L=r>Z`=9L>yMoA2L*s?Z0jfjwX z5{Hd2-JC*8AffNSY!YNd zhxd_kNC2S&1Q?j~yC+Ze#hIdrRze0;V?c2Lm(j1Jm4Oa^u!42+`v?wNOV2uu3^7I@ znmD7JU#+f62S!YLZgaxJ1@y*&br@Ad+Q}`GF)`xQ71rVEl8AJ$5o2^wl#+z_UPY6p zf~fOg6YxOWK`)EBg>w^Ds5OGwyRd{yPl&LG)f&2e8~~`8un>^e831Zlllo*Un&_H< zh}k0V=`PXiSk;7K_nkgf0?^I}K%SR{r(_12jbxx6}C#=gqVA?U)FdQid?2d~*&k;%JAtwNcQCk0mmS{~`5 zE9vQh8KN`b2B(Y!VG=yw>{LgnBBih^zWF|qe88Q|O~mz~!+>DFfhm}?B{UMD87bKo`SNvxCRYWuUj+q)TXIu9Xd)S|JLUw|;=}3iS*s_S@jn*_NZzV5CAX}#!h-;oz+>_T4T&X%NtiA)-3Wl3L~l>en~;{#M@{Ge0%)KH41)%b4iWBH%s%?K zKz)b`d*1N&(d5aI?ru}K+O)HE8?@dOZ$IqERiuRJI?~Rqd8I;^Z`}gLy~oM$3m=Te z=W%(IT*}>~OV(6q%uVJE4?5?|{JDZnK>l0Gb^8AXd8o?IIuia3Zs1|(&Dy{9_zO4r z1A1?iNRvEwy=79~xdJvxvKS!b!T@w{}oE7=4K{W=X32k`TW=NY*D-S&$)|ok@8hY!o)q! zG`mzOunR@8TUX9lG{YCG&-V&C@jYDK5xT9A0}XQQQfjtnbtr~^pg!<}N83v}0YiWo zTbV|n8c0;>i6KlFK64$sTXfSqah2WW<(NEg;K?oG(Jj*p)g+qo7vL?Plh0SOxA%K} z@s@P#%E{JoG1-|$F%$u zU=rK}PKk8AvrtukNd#a({~PZ!oX5?~qXmVa~#WNwp?lo#m@4(@wN7cFK_}nw{P`|)D|&bWg+F1m;&#KO<;Fmw zyVJ|0qJ`KH7Jm54ZBeUTK%RT_E@85uq7v9e2t{{ti8zAiNMvRX%DfPG!I!Fd(f|w# zF)Cz9T(dn2C^6hD@p*eKo5LnO&Hpmbr*~&aC4@w0VnFqO;|wBgQt6V`}I!3EkU$oE+!k1-cxkV&g~*xK$E+5HJ$mM0a+$a1{RP+ z_q$VsPnT)5deAi|Yl2TM&q4Bqy9hu!QK!D@;q9PXIj{{tL2l&Bw)$?k_DeHi%Fs<9 z|A2tq3o7*!X=5W4+BhBpwq?+ygP}s*^M+O}BaT%1SZ|6B3w}${ll$9)nNjn}&jg1` z0HFW;xiUI0PZoZG9MV+oNFX;Z@lUJ-6;+1~aW z@yL<`!>}@EHdxNXb<*;2HY5FQWZ}!p!|w?SKfH#s}f z3SXvhOYBZ;B@QH`i)QL{T%B*Z zM`Ao1U+B_0Ib|d9o2Al_Y)Yyj{R4`UxJn&$`Kb4RB~?L=Rh>R*PokD8G#-feDm^5@ zsZ7}%Q^XBdGrot>c5(e#RyBEJdEoD3$3N_M%in5Do9iV~>> zhci-i`a(Xk0q!3yflFDdyjCWj>Ek@7k=Q3Xt_@htP4IGgke;AR<9G|Hv-XJ zv7=GL11UwD@=w$vM@&dlnNlM}a<{JVy-5W1e-h#+dluaM%-+~h?LBC#a)H0)IZFdY zH8YZblFIl^&yMTsC5>MB@!$MxVh)c6u(kjGNgv=`bepscK8&6Gx2KZ3k#R(%r_?nA zy~d2zED&J*OAY`TT>m&!*Uc>md-pxBijY#l)53toYz*Z>0^>UvFA-J_YnTwQPNok3 zv5qAOtY2tHIrm;#U0k`#)v>aiW6=OpTtju%9+Nd-172lPB-~X141vgNr0b%aj3tiY zBs2s0>86rHn|Q*)jFk`HRPrUG)u=o()p|RFJN?1 zQ_--p$q48WOytb&XWhRZVEQ1n*pd%j2ax7}NXqH5*+Pp3VZSO70d%w{^&pCSq>LbC zq^wA@>277z}kruTG&v<-Y+ld8}kJ` ziv2p!lMsxijir62lzraC*EQp47KppTRssM?@)FJzA zkxUQ(?t$v&2C%0N$6+7g)r(tJ5kl4xgFHdZz02Mqh?~IxZmdkkw!8MToCXF&@FzYS zUeLuxwY@u2!n{hOK(j3D7TO@xsOr(Y`7_2kC=%@6vYVCU-EWH|n?O{JYSX|%iqUiK z*1E-SC<)uLZt>Kf+l>_Qk?A6q=;$f(oMwgM3=E;7d1qXuNcN8Z(_S$kglf8Dv7oCi)#)k#qKa)3>jwW!F{+>{*@oEhHT)psqJ4VGJScsL{LfI zl0OZe#fCfqkG|@T!5q{PKi^#15J?G;BwMTd@g<$eC_{y{wk>AGBFlI8etc>BXIx%5j#>jR>CDaRT6#Bo z1R0xmK2zuEdPxA*|4*A2nS@-fKokIwK{U@x10qM*d5k8L5Twtlv-5H8l+q za8{lIf8M^i3pyyV$^1*=JkacOjNc#}FKp}L2}EKU-C``M6JOLfeyM5xQRb*$4bKiO zB<9DPS$b)d@jFMUrud4hAt;nr_Zt)Ysy3~$D148F$Ogr_YfcT+W7q)vU@=i`3a=TpJ}mrNI^%j z_gtn9A~V~3Sq4P5(YAGhxt?IgJ)cE2MdNDQqpHR69F#~T%y2!O&IiQwCMnLhbNSl3 zBcH5m$>TQ2D&<9rFmBg1J{y(rP)Da_Gxx5b-U2zYBkK;F3D;WZ%nB*z$GB=q_hG!PJ_OtE~0}ZLzTUTS3a#gh{w}Y0v2Q)V< zSC4^(RLmy|_@mv(V2-cRY;1gymLAWLC#(1F;=-@|6BY9(KHvc!j!3&RJu9;njNO!K zvU;&z5^Yl*aYj2W;gc7E$)07LO-Q{&F(1j<{7;t|urQ4CLCNpGe?c^`va{yYrR5B8 ztGp=^{njOmC4Q}9AfJuITg~3_ z)(A8*5uY@x(S~*Zg3(!ajGylLp{rZoD8L)DiKixIBo>8lkF40wk!XTLuBD`5PXT?4 z7#Vd$N|(v=b4wmVL~x6Np>KFsmcT67w6h#w7(qs|1h-EKX8j0oVU+bOD}AJ6S#CrM z(OeIp*+NccP6GeH=-o9qPfc%1W|@kGA2E~)?`9jrb5uY@Sy|~CQdT^iUseY5id&}& z#KG&UAyJr)j8=7)B+&^5=Z1-_{Ya$}Z0kguho=L}Q}_kT|u}*JJXDxOEvet}0mtna}x&*|vg$`c~@P9_R%9~9|Zt5*- zb(%!-4l^vfhh3%%#yp#v>i8aiK>K4EOYdk9$nTcfY~2Hoh7A1WygY|5i;ydq&#HV; z2>%7PNy>i2n}fzE4k*acFrkqp!UDt?Js{0q>{AtXDTb=T&oTjQ;bPgNNCJ>7?t#lB z=cqY_NmDaZbqfs?VMDA6;4z{FjjN?)N~$Zas5H4pRY_Q~z?u|IBFBgGQ9vEoUO?{- zSHh?Oc$w%kkeg=cPxD=o?NiQQ1X;cmd&vAR+t`xxI-x03ia z!J`Fh1zFD3_vAl4CbE7?icJ!e=_X%^09li!i9!VHdh0SIb(RSGkWql)+h+5S2Zwpm zSUsc{wMZy(7@8(MZD*i=M^jdjQynbTzP(GK(i8^lRCEfyoOzakuP4Samj)Rt%gucz z6nD%ExbQ1@1P)Sn_hkvOA&bT|RHT&)+YZ2O)>f6K8O$Zm8A6~wG#_r2VZf40EruSz z=Lla}*kAzUmO?2j6c@GxUXmd^`7Z+ zU(E+!4^-2OVz!Z?OW?xPuP&gIUiJC8WHLb|capwjjRe-Xg;@S-!21^4gP~KxK_qur^|bKsea@#tb=ZTF&dCZ5=U6JrBswST9)kNjAH+Nj*~Jj7!9l z?32gwba9~*#{#^!$=N$hjdpZ}z*|n!T1pQ>xp;`g!WBvdbj!rvsn))W%P>5I6~R8) zK|Uf|SN)M`lH$<7(ZtOA==j^F%hXK^pxT2Z)#du>B|Tz>8|}f#yePSnxyHE=v+YG zhD>a1T=rbX-k!*9(-}{mk2PQb|tn<1B}U~`IjPjqjP4+UOwlD*a+84#of#6e89#8jS8W1Jq^ zee&mLUxOh3hwZenT2^Z6c^tuToZ7PHfA1zq3*$%&5FUpFxDUCZYYQWj=cid$F7hu5^f5J}>QVZ|~T9>KNp3`D#`o~ey3323n-)Cd|AMOt$|6ZQknxE(Pkgjtno~boM#Yb5baw6OeR6 z!qxSp!7LaMjB^d<#>*pPX98=!)?!QJv)4+} z!Rzva(mn7|%71K8hq0OY9^Cggf+Wzg4Q9M};p z538ful^?%?biuQD2=Yu((<3wKHqEtK0&?ZOmNOWg{lZ@+RzxQC4-AxoUXI3%CS!y9 zzQ6Rs&oDJ94-dlxSz%62PAUzQTk?doWAd$VJ+`1@=+;;L#WP{_2?MZo*g?_r)xCdm zmXK6jZe7PAAynYaR)QnDA@R+HLzo6of~kok*>!m~r`*8tv1xJ*gZ0T`V)}Uh{OQXZ ziYueC9DI}9(V>Gz7p}?00P18>X_$<2+c>HUeZQ7d-q*yZRw}M8oP&G`axGJSy(sOa zZC&7EGMHVb20!EF&7T*vPp;N{W=lF43m`utT+5yd0tL|eV!Tkkg?|Clbq_e~O(U_6 zbq^Qm>?nBzIpvLv$aVVZ>EB**glcqlgz3jWeX>C1fC7Z&7!i&?2yeP*4vt z$W;`;C8vaeiJJn0HjaR7P8@Cjt`=#!Acr>c_c2P@?z2x6%rThhAjI{}=w61QVJDS5 z;~#*jty}3dnD52H)Lb;N2eu_jE6!;;tx{2tjMb|L5@Mt(VlH*YKH$&7ZEiyCg+ApN zJV+z|zIvn38^YCACe_WLU8@6Oa*ivqPvus5NC>KjG zVnt7GMGrBaut>TmpMgmL=9$n{fhJ|qJZp+VmF&Y{L$rSOkAwqCKt@vl%Q3mz^(|pj z6^An**>d3wsa4_8Ak?iZ13uy|w-g2`lyKd@cxg>Mg)I@g`{KdR6SvXrD33U z5}hCPJ99ho%)oBIAm=ATf@h~@TSJZiWRrM<`Xr%x**WZ@TSBNGmapE(z|FLLNzd^2 zaYL!_42`=LgDb+aR|%;zOi`O=Z*y3Buh+w`M!iPV>fIAUAhJ3i*au1D=&07sw zbsP7(tGXWO;r!+|S9RSTl^cG$c3Pym;?VCMKmYvqisSpuf8FRO9C`l(-;P%Wzx5tE zz<0!dn=2dtL%O?HXlagU$R4}9%Q~DB#uCR&OJ!m#dQlN94##i89w{sKH9^hXsH$5J{@*Tibpo=MP6D;Cl#i;z!3fjAC>or-<= ze7^nmTa8!^ew44N{j~{VjRt2svxu}RC1GZ!LCzyEAotu+*mnHRuZKFiyQB59&XI}8 z(038FNk+CR$EzMG8>iG)r<$v$oYi@H`f|z0(f%`C?xCfL`&@=IOH2B?56})AJc!?r z*Q9V$v)w0?P3XZV{D&vh1mzjkdvL`1~3pZMCC5sb!x?h!XRKV(OG-t;7+}CKe~ypkB<*#QkkWn;8hK`l8t`y zWLJt1)m6f{F#6rQ6FYTN-v}+csP{ij-`Uw7u`HxJ-cszo%dD$YC@O`wI8z3d0)%?i zEZ;r3hoMM2sg*dEG00YCbr?ovSYBR*g8ID|msf}EWEV5J5v!e)2-2)x*q&?Gud6#c zrb01@C9QXEO5xuZeQYmT)*DwV}tm|cTW#Sczg+Bm#{KZ zDbYB0E_ub8%_rBk-a*y>o=tOhF9syN#dP5f>(@Vc`SSNLSvRecKoM;W=h93vlns+| zcpchjk56cLa_Ud+7;x~L0F{(dzsK#1RcCpGQBhG*AGj)mWsC>wQxpz*uerlrlb|Qr zoD>JD5~D-ce!9bry)IqcN7X0B_J#C*RJ}{4S@=`5x$xMnDpnV=zZl4bp1DTTJq2GVM zThJS8kn@EtBBxsWaL(a5b!=j+UPfYz*SyD0!`u^XZEd>wo_XZJp%nCKsUFkkfp=5t zs$TQ4B~MSrd9WIfPV<~~{n(UMHPw=(iNB~-$^2!@Otk0Q`-jBw8fqo(>ey6&QciVy zdwb0@4>yB+PXnN(DgdAA@GUbrM$?E^;iOh#G8_HJMU^A8Lei8jsxTMl=3HbVrm$F3 zp-|Rc|NFLtb+KHX@^{TPHBiq#{qVyn1B?Z)ZAh~eKR<9n+_Ltly}f;Lm`sM;+{77& zSni^_I&I7jzIo}=rJpu!ivIGkQLpew#9sRYV3fMU?Jr_vi1A!|OyqH3bUT@|sgYS@W*4FBngj_|AmC%3gq zIgyYSk8y)u-f+`fTcvC!nxdXTqn=f<4*~A=V2FfuB{;Tf9w~DWkzFT0^F-RQClVLi z+@yGS0EV~J4&~3=s5sy8>vKHX?U1COl`Np07!N@bP`I^Kcvi9`tMQTA`S0m(03wOP zyN}S|1Sh}%pGd>tFY~%Y0~(mzcw?;UleKp4EGs{A_UyyPO9hnM>v33SMT-rtkJg0?ncOj$7-#YJ{^k1n5J94_Y1}!@;e*FVdbfz4 z{rf|EyXMo=hsgU)CLe)vN+BB4|J2TZwrWU?sXtBacksJ&{K4T~5DFGY$mhdjvI!X4 z3tcC6Mc?sbgJw;fcHqM``5Sq3ereaMkJ=-s628y8d6R&~o2Y;Q?37MYlJii@wHr68 zA!zYKt<`O1Hy(N#U0KIUutxvbD9%@ z&9nqrQ>}ezZ*NUpV7U7*mEU;$4MVTzgp#kzH+gapWXqELqYU^64=EE!3Zndiqs?BofFAI~Q^9zUOluu1g2JvL< z^_t7|8%_)NAHOrTc~mJ-IL2f83lyI}?h(-tP)iPq!NZ*;rp*yh@lh)%gZu5)KhOJR z^*<=K=(nVv{bc(embc-Yg{z2n1`0|@Xyu&$ScyRDCr-`;B7v~9wPkmEgXBE2VT^yp z4nedHY1L0o9R&Pa&m@lL*Ur5Y!Qz%CnS!Sv8=5fZ{57Ge`k8kBWUpJZ#xbTjo*`9Z zrTuU2Z14K%`iK-3p_3!_C>r*O_VCY@>vVt1zp;1gTDHx*_R~f|o*kncB4JXZ-1y8R z$M4*C=`zcb@FOjE_gvh;hcIR#osA#xEJ^o7H6!gr{oT<`CyQu27LDl%=eo-h?jO1y zd*Jf-!ZKCDI?2C_K5MD`;BNHIH{X~P?G!f1=8hU@3D$&PbNs}KyWHmVU~vcyoP{cc zr5cg@ze$l*j%hVIdh~`88>Q)w_q-R~4(k3x*T}bbYP;lDyLRx^HLCf*J7y7|GGnWe zAOJz}NQ~8_`&?A`ZpDgN-82h!ne*{Z?&HKXxsIBp)ExTf(sFT=(#`$WMn*>TFd1zq zGGUJxsXtA1q`I<>-1${4R?6Id+jxTClWzH^W^aEDd=l;g&yOB@+Fq{EeR9}1o8!@l z6AsDXnR~rZ>q&S&->+L2n30hIU1%0ydsXb>iBz-WDUKzzi3V{1mQrbZKn;FWe(hi- z^e%^-c1+Tt>l=gAh2S5_x{e-eOt(%uTl6ED2w`Ra!=_E9YqRV;Ie*GkF4UJ^b}vYF zT@~DzF$@wvVLRUQmbg@oy+ud*#siPPXQ$X~AbRLKJvEwCM{;{tM(d-nj{}vjcv_jQ z9M~A;5MJx1yB>)`+w|OJoQ7JOr8l~Cl?IvAA5v4JJvth6Ixp<*-N!JlS)&gNO;Umm zW_0wteNda{aHVXX$2m`!cxh~$(i)1Z8Z~FRF1v~Ox@uRz8zlDFq=eHP&kDYCPTv@= zuQ>dbkIgyS$B!RZR8&kpAN8?1#@BCHTI|EV!!r@ye^<4y`O7ft98Xm@t%1g)oYqGoH-e(EDMlOPfQSOD~RP$LcYk{&lxWb~c!>&!4_7F&oME$H$(7}at>UHh= zbsBFp=?x%S6OM;de`2Ig8hm8Nnc|su)rG3mUQ`ml5+LvDD5XuB@h6T0MeA5ECGo(( zNL}W_r%3J?*aTdG(0`P1hhd_EJNFQ85TbBf%_9Pnmb4MDiAq-mx|+Vj7G+mco^$@k z=G#okhiPFZ#ah9Q>C~L_L5E`O&%{{iIQ+!inf>Q|r7zqy{Et0?>e}OdaH}i0yk>rZ zm_xLb!=#)=oEQ!U_O>wMYK?QrzS zkqVgV(&W{q@6r%f43CV6l?1$bbL1wcj23N=`-EM_wtRyW6J=^8MByh64$A;rMO;^` zoR`|yoRfhwvPy4y`emSgJJl6ws12Jpn*~Jq8AybE({^L4%=yyq_sXGbz@&aBn&sDNJaXh4?bYNKOh>n3rVyW!VzQ~=e2}*ZkQEqnDDC-s62@GY zt98^ckX+9V92{{gw_VteS7z(XDWGFu6@TZ5tW%!`oE|ikY{&L1Vz+BSk7yb&WLEac z4qK&@ETo&dLrKP07_NJ^ZRNwON^}Dl__NJdu3X8fu0+n&$gHMg&i!rf`<w3)nwQjIZUi5^x?|5RN^n7nQbj& z6R_j>0pw%y{Vcj`M+aK-Tcy|LX(i}tJ(e(f<{m8TmTn~xQWh%p050toF@slyg_hdI zPs4F>c9l@xZ~RX3nqAvRFEwY6&p^U7Uxqc8aAZRf1(lMjJL zF$^Xr3OA5SL*TyWT*ncIY|pt#Q&=}8#Z{-|5Ta<&OG=bLn|K_|&HhlkYdNJ){BkV% z((={1L+zmT#bpQpiu@rxMA8zuRCcH~#FUT0tX*#@Xe{{8pAly;3i|6|#;zyCgVT6aF8Zw2CiU&QY;8V%u@WgeJ6b@N=)(yi+6 zBS4OU_uY`^mciYNmVu+=|G7X#m=U;j?G++~oYo&zV6B5?oD<#M-EqO=5Gln$?@i%+ zQ>_~%teY~A!$GaYOw1%viqNCb;JbRD&B z$@WIGl~>$arYw#wbyDy2q30I>UVQ=zt=)^}-rY)JFvMqpUk;9uJ@ zGk5*wP0f=hBk>X4!yeV}oyUe+jT9%t%gh4b;ZIMrilOHwRc8ey;(>w)Sw1#q)IrpEqy7@yv{Uz?MNMp0sjSCTDn<|UQ%Rt| z$7T3zU^chEkd7L(W0qfXdn zaC4iz_-mB~T=D}44phf!i&zF$KJ%EiKq|0nl;fRMdL#R{R<-d#8$}G`;pLNfii8Sq z8OgrNA`R15n-H>5=tSgSe|_iB$A+mQeDd=04imTP^1Zw)Hx(^gx%RQ!_#g>~gZG%< zA8&C}UA1aeFlsVvt*cewBj0=R;)Ubq4~HfvC(X%1>XV~zBxOVYAeuD8$sj#}rJ8)a zAmcf60cP&4)mtP%%`RU-vzV=iNANRcsoE4pe}P!Tylm!~1p1x5b%b{7^+q-JoX>IR zjALvJ{$;@0kiq)((6t^gG}rvKYJIBL{2a%v-_P&e+Sia4Cv2Fz!`9Xo_d@lbfBq4c zRpFF&d~!=TLe%(LfUto@y4kxYryAg?;_zZ1jyrbkI);e$Sd^lFHP(!yE^lD_Y*Tsv z&}#hQ5nL^G_$y?$aaM6>i)ein_x>a<8%Bd1H8c!T(2#Z>jK_5jDzK@+IdRIlpFsMq zmISFVP$fuyWu5C(!_6Lh&0%}imD|~u7XzunHhXw@5PwcNe4h?7M_R}Oe!Fa$X1bLQ zBj!uD4hi>~b8!gf*|FmYyx+IPxr365L-1g7y%C|dCQMSG+GPQCT(vM_JE&^N{EhX+ zB?a%KaeH}rd5q8{hsVdYk=8=O>TyTM*}(Arx}^U3xuN-oe$T}zO~Miiu5SNXcBBri zjhgp=hb@wnzP3rkCjGhZ>C+GQ%>D6G?I-7(`s05~#eZ&(+T&ToMxiL-;s%Hq2}jL5 z=ijxf!s;8!&m||cDU`w24c}7i_-Z$lOTl}A9_eUre*oXh7B8dh-;=D@NJIHXKY{(44VcVXQ!Eo&yEMH z=W&}yaP|2}rVG!^vmWZ!YA)72@OpWsSXQ^H0%gKT@k}B8tc!VVB8S)dl0t>P>Y^nH zEegds7Cmi-X%;n=oh5-|nD`rHobjabBfG3?D#MsL>zg6$x{NR)$LREZsr&Myf2;i7 zDRBh}Ewy_GmZ)?JB~u-Wwtp{x*?a=Lysxb$3q5B(D-fraM+xJ_lJac=zImQNoR8_K zADTjAY`Si9$LKW_Fs%Z`P65u6I@Ygo@4)gDznJeg2t3ABARd&`bAxUo-B9%8L`hE1 zWRgosMMVoy5SaJlo5q2WBnN!>#^!t2_>d^Ccm$^GyHEecE@@*GKzaU=@%>w5 zY&_$>T+_Z-a+lkw_t(jZyAN2az`wnh`cBeb55C$_=nD-bKmE5Wti=Ya{_@K&cu?r+ zGiT^u^k7UxWib&?z%Vy+W_DIH_kun7e|6KXg6gli1^v);bm;DAq5=Jfe?9w?(4`Q& z93!t;&2@4UktC0VVjYQl14WE#;Zg3n@aZJdv#3vUibgm81Ya5Hna9wwx|w$O;Dh+z zz8wk0x>G;%7{V&8@^D$>j7EA)=B6lV0gs$m%N&brKc1LV2V>k_mgpGr3Hz?U=WVi> z{_@cky`3LgW-&F^va@*{GEW3&i0NpWz*(#++|DYMVhHZ2s@%?!$89=4Ph_g@sk*y$+D9^StFKO{q` z3(a6rm$;LPLuit3Xw!dpN~NxwyE*pfR3C@>*sH zx=fV3;bm;xsmo1`J@NED97EIeBQ*SP0q^eP zDH{Y7*u5S)_4C$S{Y!aJ5N^NQ8u|;HWTxkAHWWV()w&_|EkYUk#!WC=*REbYjznpy zef!~*&_p8jH!hg)3oi7*|LQ&X`dAl*V4Ty;Lj;O*PDYKjssOZs24-L>nV zo13=f;pHuct%L5{Q(`XdGW@VOP(*|(ZU5oBEt}r2{SCWjKR4sDK|tdOZS=!+5etA0 zOs-!?DW)GOL}XxM&kwa&2ULMFw3}Qv#zqqdiQ61zfJ7GcG~q^N ztG9cRSKqMX*z>L4E5ky)43p?Xr`E=uikfwGD3xiMj?+1tb%YunccRKQy)W77KGOs>>Ym`}czNzE!XpVw=uEwKG<-pVW zJ|B17uachlf7(0qxSI3!{~u+kj%@~Yf zEJsQU1}AB=lomyqv5v}8DW%9zN@P%$41J&1vETRodwlQ5@A3Qo{`&T~AH&UY&gZ;8 z@Aq|GujRTvr#mdli@Mvpv0}&skAck;$F{wnKdN-gUgCs4)2B{Iviw@pchZdNi;r5Ut8Y6GP$+^B z#IhkI4OHNq1249Jpg0!u?c_R&q&BXf=&pF+Elep<+eVfBu{x;e? zWlQ{z>ptGzMiafVLzKFQUeM7U6pND{n?GCT z;qynknnV3}vCGlQR9fr)tiDwf%b5vp33Em4Cdml9zxhQ|!))0l+@a`8 z-cNk9GVXKkafchkwMpd^>aEfGOa1pYXigV6TmSXX5VHewE_KUyOIWa zfh3EVH_iIArE=gv$K$J;ic^3G0**d`Lb2>l~9+~-4H6%*np4SnOiuKoJu2Z8p^ zBLhuhrbBL?x}kNVxYTInnY)x#z0+S`B>~or%H$i+mK07^JVPgv>T#sCwb>PqCS{io z?j{SHf?Nc)u+h8O#cDy6%9m=hXM@;HjoO$AufSqvV-Ro(DB1-C_GM&|o`*n)r3`^5%QAizfx6r;Xg)6_YCZvDn>yQ+eF%~)lj4QC=zII_?d)eU0T@AsLi%d7KvY8$lXGEu z$Y%VWISWgcR8h+(<-8T-6#2uE_if|njIW5C5ECp|i7^{iq%m8zq0;5S%|Awt7|}EQ zh8}w8P(r=x;K74vP#bsc+I0v4%<}2Y&CW)#o2YFn*d?r$^U-Y(P5U6mMMj&tw0etO z{f&)2EBw)6DI{5gh7E1my7q@=?_|!*Y|y*?;rU@?f*88WtqjvH{`vRZA40~bE?I=C zF+y|5DZPd1>xRF*5sKop6q5v(>~Az^Ii?jehZlwj zIN39*RY^urcJ~f#;JO0H%w%CLKs&@K@xh}$!)UZ%uL_<5qaHEhrzyVW26K_RG&yK9u2!z^ zTw0bod4Wp>rP0-}&MF>rnP9zsAg&3!a~nOcLKrxnN_+muA?guTb8?Ov)S2`EFBp58 z%DTv-V^}s6zhDT;?vc6O3 zo5rudwg;bBvte>!U^Bg2+AT7H8SoC^83Ee{FQ0-P$d>iA-8;4e8M7N^L4nT9C5fiM z39=FIM1JpnTWmFmp`{N7X4h=B(C-o#1*SK77+Z6Aqn1C%`4P7G$lr|mFm*cH%&RIRKndH5~3~c?pe5Kkqg6X>|XaKsH3w1jLr1*_rrzH!RjHr3a<{Q_iC`o!^--?m2nBCE?G+GzNtU2Uq1n; z3T>u^EQ*Bt6vu~!ak>;VV7B1niFfc?j3d4^hl?T9m2v+`Xj$CgLyI0dL)=ydtancH zz8egi*bYu)b7*KZ6}LSyUm+5o0;GcY&N&s>f;?&AKz5ItBVS7lS?(#yj81+ zCr=g*dnx?FRBg$B(^5e~Sj)n@-2d~WdgQ_=kL$lXr_X%|#-8-$Md8ya#7wGLN#*GEN3U|WV&Vjh^-FMo*LK6)ta%x(tvV3su(+y$?%CMda5O!bK z2=~MUfyB8XvEFy>D+Vc*C&EhodrTc9h7pYxIUqdcMvVH0lr?MCsLww3w8u$d8#c1J zDmFE-&djOiX&v7QQhrx=8#LEw@_b%NM6 zC}NCy^yq=B)tc8P&LJ{h;u*e1syT&82W7y~oYLiDJNdlxsEtaYfmnJQEH}-YHr++= z;NcEygm}GKQW6HI$DK@H@=;41ExAkC>ElUIfl*_3er57J(Q5kiUF=JP)yH>I#E7v& z_CGWkoh%LF2Yx7w34W(e0cWP zgs2HIf_LTEvfVC0JKPItT+zV~!!Yya>PAh?yvy5%oTZ2qeWLW>KoV`A^3y(4L2$+c}TK|=lSz( z20gE`IeF^TNX;JWZIMUG&@>kwk@+ayYryw`SqKk3F)a5XtR+*ba&tJp=`Na>5@!oG4;Nxz%InSvE zajzNz?<~@YxRuh)=Mu{_T9MSo40@`yOLY_g}DA83DBLWkOJ9K!|4R*4anz0Vb#|f{YWD)%$+k zVEJe(b@+^g!WI!}soBYZj0{5)YC862IOB%CVwoncX=-4L3n;MNJhFF(R#WG>P$>Sa zG;H7gSogyx@wIBZe`s!CNPMSKj=gfX28Y|^ImCLoQwAymoejZa^6fo2_j<%_=;F7y z4K{?gKO1A-abI8>{zR4a)_{>7U>u{c#}p-=hOYhkO(LFLXgPJsP6B}E$N)+#d}@ti zubNCc@N4yvtoc|jDy}Z7n(vEMFs5fvpXh)Vx9;E6*d}>Q3oOX&y&>FO{IVf7-Ot_H znqQ&OA|Q+iIMnfKbXjO!Bi<1>^SyuTch>GdvfYDIE|8;qp9)M(jj zJlJSa>7h|a838uILk!{b`?bYG6~BJ1S=b==r+7F_Ol<%~)xo_R%T}PZ{hR(CinmG`0c?>(Tg9ACv1**%)M<5fFLjF*8ayqMDP9^l z@-c8^=A`5~Yw<|s?u$IP|C+GT*ork`{0Pho+MaW7KX?^COTJa<^676+2L#-4wf=Y8 zFWopd*DRz#OOt5ty9F*B`P?MWyx*d0c<8PvWs;%O#55qt1dXr_)#cfz%U<-L%rtVV zAyNiAwY-uzZz8E)8J4p6hLpBC?vga089Ur!#|^5y1@LllZmLnEa?shs8nQU-qrQUS zvt+~YUU4M>1T6b|i#gEqXU49b=?t+VG_*==mGiFjx?bsBo@HS4^)n`DhPC;2-TL*p z#QV(aZTbz~ufe?04G32^{ib&KcBB`BQ5p_8~yzy zjJ}247yCc7a8BrRi}G z5s;3%)L1IM?*e@47sWcQRYp*tJAXXHZ0NgZNioymU5^G4%FLm6JU7_rfL-*YUU8wF zDef>F33PaH|Ncc%oIlEpDhtsxx>GuUE(+jYmXBo}_e`URT^_-HfK*@X( z@0{6Mj0mCqE_Sb-vH$3!;Oa#c+>wqQJ3?NgH)eKt&(=|tV6?YOGa6q(oSW3YpW*|Z z*ZzL|c(u+^Z+`i(XE-zR`lzyIY_Qxzz78>VABSPOVn*n=zbxX>arfd=P@i4D7q-h^ z3G1I(HtGuTUfeG#_1YH38NL17Ru#V))W$JOnk7Z{XPoGgtu>4^$p~cy2(XP5AoppEPKY#X8@t zsEA^(NAha&Vg$bGy|?J98)-N#k-8to%B6tYigzUjsB1%&HJ&j0_uqe4U79%caK?r; zYc6t4V#TP~TGeI85;f1B&1N#D(= z_u+?o@j#a1d&d{V)wP!^1k6#c$JafXxFRhr4c*UBmHT+wgeu&Mn&{ovJxk7FL0WvS zY-Gs8=TDwI*~_XpxBBNTUl{kQG(YT!x+o+9<66xPolYMkvqlhON*A=m(>jjqv8B%} zYlvPer?dX!FqnAZFjr*}X)2rkIqE#;O>n15jpwAAY9+)t5)%?`2BnJomWwexv&B*# zgX>E#mVs({?ej#yQW%E;v#u@RYb-HU+^fPvQ?C02wE zafUlDW(=B8`!&>kU)S93xCkmBO?)30`CK9h@K49oLJo^_Y|-Myt}Mpw?C=d1&+8*s z=opJTW4EA=K6+Ks~V+-Ta zRF7Fp9~aGPoH9PpWO5bTw}QtJWBiKu2di;2jD)_U_kp_Ex!%g`?8Bb3C`Z%VrW)M@ zvkTII+>t&8w!0LlP>MRJOjwCTP%G_g1@|fU=odXpdz|eF-p7yVj9-vQ=@{XF^(-v> zhDZK*^QhC>;gB{$<vwDqGIBzQ4 z@dr~^yXVG48_aa{8(>qqyx{F#;CII?_e@P&CQ`?O;$wB5(*WlDv_2-FJXTj5a(Ql_ z{{8KN{2C=PP0{>UE{u2I!OyJ=JLlff$J^Ns&dw=kmQ`IGu0Fe|eCN)cT#Gti@1oe)n8;6M90A8DGCw4@Yl7m~=nn6a8hrUxLMUJNIOCpZ)VsG@au?3~OfyB2 z%llW&O9%e=UV7wD{8rP4@y-hJ+rK{jrwc(6f3LommmeF7iu(57d4zD7tTZrvB_91~ zs8qC~az};=P%c{Z+0(j}-b-4(Llk?2;3ZQT{uV+Vg~esaDq2xuiqkwt*YSA#K4mjE zfQVJ`f*Sr#^2drKLu!}YrQBo3If}|b?|r?b%pX>)z_6`UAzX_%O}P8WqpqU2Ka}p; zmOZ4!BX<&#s#O!elnt4`U90lhdw3T*U zrC3lYC`=uSr?Jp)O%e?o_GJlQnk2Z>@7$VKUmI{}kH)x3+0J7A*P_QdDE@B3F>?Qs zrmOh9?=6QS7%_7Wyoc zSpl)@yk71vzQl~VuXl_1656}=>-Ofs3NJ6~pH8>@;s5o*|7Rg5Y>^`b(Rc33j_K0YL@ZoLMR2IoP*m|p2qvfi{48*b{dr(wu)S^#smS5+R$gfw{a z1uN&gs%VPc?^A?FlDK}RnchmH1)aK*m4u+StE-s#IU0lXu|gkE72CaXrrX6{zUz&g zVZ}`Ro>l?U|4E9}1h!1;R8Nur2jyWi6cD&US2uF1SOTneeD2yn(cV~0X@bkQZv7%| zCbR9*FgeU@9LE>$&P}nQF7Mqasj4Dx%#I}w)?oFwBVPKswT~HGyDfP^`7YF@kmD}% z^MbzvN^%?Q;R2minwyBRVgZIf>uII%m^iX_%-4#f<5F<reXa$GtGkL_n=M-YZH3>Roxs4`g@@y| zFMVW3LJD!3oaFJPm={<|9afuwk0aBp9X?3GeI!{yz9>kNpd(M8Iu%JnXm~-7LV8VM$*h-Cn zV;X!*Z0u(|>A(;nf0W{9ut)K3H2Cu?$zJjZnf-KJ&=NXaA}_wE@w3=TcRF%65@Bb))n%w+HGXueI?>IB3?*a;(sV{zi9`$m4mHyZPSmcI)R}WmBa^TzV zt%_Xu=DGJ10T4g&| z_hrcz3=Pp_Il4+wVT~*HKqZ$RTzdWl!dVy`;z$knXBS?HN0+?>Px`9h#ds zUheJ`l#;tn*Q>+v4+kym zi2lH6T0XF!57CItsNx0uhj)ZZbNu=R8cLNi!NC>>Wkw5?nqS0Wt-{m4_C)C;g~z>$ zD~bD|bS}Zb;ukp4{hFWLc=6gIGImuVo}C$euk~>p?IVmkboecKIXxbZb0W4F+MG%r zW4W4Sxp91@eILxf-#%~p+b2Da{E9IoFc~k#Uav9Ixa%hlauG9>Drqj@c4ovHR4)(3 z$aj_QUOyX}W4(6dntVum`9*1FnK4(jHck)m9zi?U3AA*RHi-+ArQokYt`q$-4#-g! zYoGED=Qz8R9V*J+zy*I5e@SJ)YogSU~z@*8_-U2j$S6|V4M6;}t|rXUZ8n{apxsGT37 z%7W%_Dhi+Cko9}P2a5dT5Xm`d%a`jIVlA0qtFg=U(RCDCu|g|V0B(OV%LpqC+!P5& zoJiu@C$C%}D@|Tjp0S2#v#|iti~BfVWmr2wg)z-RhASA;2CT_pMncroXd{JRNbx?? z8x!HUXj<(!{3P*B6a+Ai5y(7X-wkm`}H?vYG%4jCcMUpd6Nl4{jIVBY4 z6x?w1Il+B+91YHx!;utnmy>E3lIfhFUCUnHSisH0=x(5rp%Ac9lGjDZg6WV+0YW^& zXQ?y-=%JPm53Db~&Z?W6$IOA;yp4qJedn@p$9u)Jh2>8scF30`d=T?ukR$H&4t#wO z3ak4mJQCmBm5Qt9&z}zqXn}N~Qe(oAtnMkS8ZJVzo$cO@(oLK&!u;@~etGQNKtp}%xLp;EX?koBFMiZiYTFIvB?wJ>Sec$OiekqN>3_jcZ{1g>~IO~vNFT0ymOx3t>jL*dWxhjLhnE;*^mpd5;+I- zIT59rg*ThAcIe}v-IfHbfn7Jh-x1o<^V@2Uy-LAQbAusv-*+&G$PkLXOKq0vlvg>PH zyB8=OOE6cU%104jokL2TbGPRVC_TV>A9aEplTTKb^Xe>xHl@d4PJh=^(@KfVDU_{u*Q}cg_3)cCnY_7@}!KC zEl^1?fc&`}1zdF$33UI(r8FL*dg&mzoHK0ZM5UQ>j$W`LVPpR-~%KMxy2o zdE`mKXvw%S5lH=G9qhS9nF(#!@vU5~>?cVGDjE25ISQIDrmE~CJX@+u6bkgU#8cbq zw2=Zn0*WekDa@`_=FR8EW1tc*JvrV@o!)br0HOP6WP_#Ql=Vhu-WzX z8i)Rk{-LN;f^`eGAo+F;b6c7EPbT8lnIUg`*{B-y<6N-k@rs2KK~$TxD5K3$nd%F=x0dIhjT)yG4N=0Qi(AWrNo(i z7rO?C6ptGftJ7xXQChsk-I5<*Lbz)ep30hIsQrW6Cco6oJ&#OEjtnxUjo~u9IiyqX zBM|%1FSuFuH_qvgh?86@T839GO{pn4>Ss8Gc$rcKsUCYuPN%g1G|CsHiit%TJ&y$S z|H4Lmr`unD8QL4>-TnP3U20v;%yPpjWdc*h3#wn{mmDklN%FrM;yzk`?D?&|hVmwT z9hmR%q4bAoBz0mB4dx2n+7tMsA(fdUJ;I_tmSR0WAmaaMJ~m8gcI5u4HYQ#QMX2t? zT0SXWL0Z_NEQe0crU;^eniZD5QKh&tb&WN0dX<0Rnqh@DDW&TLIlnjFUz(`ApN5rE ztm$ergl$OE;B4&~b9(GVD@{dWegtf#emH2(|>uk;Be=@eXCaO z-f=>r?@++CI9U)(glnd7*o0CbL({}k01qlGpwb1oWx|DQDMgBf876pHfqw);vm~8q zg{9kDS{Ci8ogs-49Y{61Hw=oT6ZU*bFCj=4PlA4>QKgBD_7VY2#Kax7e-k*{w(X9U zFDik_VVLTQmVA^L(@MJ7meoG@*~aK4kfb!?LEaH}44zZ{bFkNv43zvc89E{s2EJfr zf3wvO-I^VcjC>m=#hZ2-Dv@*->88{v!~VWf3h2z` z_RkAY=C)7_=|=XvAO)Lv0S#Ji82I2P(f)MCDVm1P)MtgN5#>XUmyhf*kkMzpRb|rx6vg`>JC9Aihs;nz)p3YcSki&64*?!PdSAupA@YAX5#TeQ z`sUkc-;HEHbi-zd+hr`3mq32Olm{L*;zs;2hbOz5O7X)6tL7-m?4$nkZ~oM@X;YEA zM7g6z6Qfjyp}AnWu1=$aNM(Xlk-N%R4k{^`ktc7A8=`_iKN(fCW)WLG?#-X*k^M(I z*Ka_Wkm`G+x&?%dXF!9@$`acm9wUA839m?;0+3*d0_3}4~|K?@? zN>Bc0EE)Oe{h$Aqn3tFT4^wyl0~b|z1NwrQhyj(&VOT(qDA?9D)X5od2vqYo%R18& z)frV#<^kxerNp&yWYqlnuhz=rgV&ch#4Ia(j6UAlE6HS#Fo;tZ`sk%vRk{%4;3WEl zzg9I0kG*7!U%rXo;?sC91%|5B=t6S1Xj7C~g1{du;?_j|y*Lq2HiG89`e481e(hch zM3k#=!= zM3M$iiCv_IHaqlAjzsFO zxRUx~EUW!ZPd{y)H9hf)9O@|6BlqD*%kzt*3J85|Di3CI$ z>OkqWCtOJ*iID2z2xf@vE`}d?2A6;ZWsn7dLwe!2!JXr#hjr7)2rdBEZRD>Ue$9w5 zXUtqKGhj2OwZz;bGvzFntY9hP-SX8afHj1w=v%L67goNJr0Bh&(w&fWkj|xUj!6gd zrQ0BG7T?G05#5j3_`9nVCuTGchLwctsR;wo{k#g)RIrY^HaaRsMfckRAjxl zo%R#y{mO88^}RMay$)!8ZZmO8OMjG?u4=*1&J%@qk&Mf?Oq_C&6H1n}^o(39fKYynC_)4haAq5 zDUkuXjYVc*|6Zb6a|@U(5{Ao-sTf`uqs~ko2Onvm0={HHZ)L_B;B(`^*(WcE zkOYSNFR(_idRW_g+gsgo4;E{Qq;qsp-Ot}M-maGt>JW~g1a~=mB}M25+;Xm9a51k* zTYY%|YP08=VbpX=m4rI5hG{D8UMhk49A`pA)=}(lu9*WoOV@eLlY=kap&~!FU2CEe zT>^*xJn%KS)!O7?)&nNGsWkhh9F4@g;|k@T3`TepFB8|j4o4d^x%F>mryY9w#=5Jf z`-w{;`NllsgxNg?_{3Gt`{tVt>Q*T(G~*Q&lz38%V2qO1dfeTWwtcc5!4BA+KEb1^ zr(l&F&lYm58wTwZZ_()0%EZ3;XoVFALzpoY&*DDhsY;JgK|7b?p36$x8mhO6p5FjyfFm>NB34ej{BUpv_7AgBmT`NCo%Z zd9AXXxJ#FHj@PVDZ4FNcTV-*SWhc>yVQMuI?K%4Nh%un}7{5}Q%;G(+e{nU@nm$xHx}PBdZw%(e9ciV{e3m2SQ-_x4d@+kNJi3l+ z;o-GT@P{<=P5&ijD2vMk&{=W}Ij1s1RcEJ&mx)zi`z^|&wJ)BDldE~hOfXe`<5wSK z_jbP<(8YwoEKtcr50RsLf($s7OegHQ+CU}Y7G_i#fx`|hJ7Lb4f%kv(%BW%BW%PGG zXLwJ#8+S`MPvJllKHQg^^O8uoL{%o7xsRgcNN{=H8Gm( zOwSSONf_bdv}38Unt<`!tHc&%brfC0muPCBdU)%+G)LhrM>Eq|X;$~CI%~AQD>H>< zkCVeAVd8>~TZz@m3(tv+sG)1^!Gk|fqps_I3Rmyw_bR35pZPZPaHiSu+`Il!oN;q8|+$HJ@6RtBR~n1;_G#^v5Gmq{4-S)j=qO1md6T*#oOt$%H}+_rq%tXF=F;_cFc3^LDX zYc1r4%*TqKeerjvB~0OwF*r&WE>H$IB+R>3nRVl4LytX)S4!Z-s(6I3ZZc1KeX!vr z&d=mik_FhLQ79#XeXNW-MNB=8HCXx;qlhrSif54^ru@^`Ns-)BnkG}=NqOV3Jh&uKqAx_52)(AnAIBol8LBEmQ#j5zg}2qv?ZM3{h` z+~z*pMkCXt`HHh)euVdv%}>> def uspeh(): +... """Подтверждение успеха операции""" +... print('Выполнено успешно!') + + +uspeh() +Выполнено успешно! +>>> dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh'] +>>> type(uspeh) + +>>> help(uspeh) +Help on function uspeh in module __main__: + +uspeh() + Подтверждение успеха операции +``` +__Вывод:__ Встроенная помощь (docstring) для функции создается с помощью строки документации в тройных кавычках сразу после объявления функции. Эта строка автоматически становится частью объекта функции и отображается при вызове help() + +### 2.2. Функция с аргументами. +```py +>>> def sravnenie(a,b): +... """Сравнение a и b""" +... if a>b: +... print(a,' больше ',b) +... elif a>> n,m=16,5;sravnenie(n,m) +16 больше 5 +``` + +Проверим, можно ли эту функцию выполнить с аргументами - символьными строками: +```py +n,m='7','5';sravnenie(n,m) +7 больше 5 +``` +__Вывод:__ да, эту функцию можно выполнить с символьными строками + +### 2.3. Пример функции, содержащей return. +```py +>>> def logistfun(b,a): +... """Вычисление логистической функции""" +... import math +... return a/(1+math.exp(-b)) + +>>> v,w=1,0.7;z=logistfun(w,v) +>>> z +0.6681877721681662 +``` + +### 2.4. Сложение для разных типов аргументов. +```py +>>> def slozh(a1,a2,a3,a4): +... """ Сложение значений четырех аргументов""" +... return a1+a2+a3+a4 + +>>> slozh(1,2,3,4) #Сложение чисел +10 +>>> slozh('1','2','3','4') #Сложение строк +'1234' +>>> b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1] +>>> q=slozh(b1,b2,b3,b4); q #Сложение списков +[1, 2, -1, -2, 0, 2, -1, -1] +``` +Применения этой функции для сложения кортежей, словарей и множеств: + +```py +#Сложение кортежей +>>> k1=(1, 'p', 3); k2=(4, 'o', 5); k3=(6, 'a', 'b'); k4=(7,'n', 'k') +>>> q2=slozh(k1,k2,k3,k4);q2 +(1, 'p', 3, 4, 'o', 5, 6, 'a', 'b', 7, 'n', 'k') + +#Сложение множеств +>>> m1={1, 'p', 3}; m2={4, 'o', 5}; m3={6, 'a', 'b'}; m4={7,'n', 'k'} +>>> slozh(m1,m2,m3,m4) +... +TypeError: unsupported operand type(s) for +: 'set' and 'set' + +#Сложение словарей +s1={'a': 1}; s2={'b': 2}; s3={'c': 3}; s4={'d': 4} +slozh(s1,s2,s3,s4) +... +TypeError: unsupported operand type(s) for +: 'dict' and 'dict' +``` + +__Вывод:__ Нам выдало ошибку, потому что использование оператора + со множествами и словарями не поддерживается в Python. + +### 2.5. Модель устройства: преобразование сигнала x в y. +```py +>>> def inerz(x,T,ypred): +... """ Модель устройства с памятью: +... x- текущее значение вх.сигнала, +... T -постоянная времени, +... ypred - предыдущее значение выхода устройства""" +... y=(x+T*ypred)/(T+1) +... return y +``` + +Создадим список с измерениями значений входного сигнала – в виде «ступеньки»: +```py +>>> sps=[0]+[1]*100 +>>> spsy=[] +>>> TT=20 +>>> yy=0 +>>> for xx in sps: +... yy=inerz(xx,TT,yy) +... spsy.append(yy) +``` + +Представим выходной сигнал в виде графика. + +```py +>>> import matplotlib.pyplot as plt +>>> plt.figure(figsize=(10, 6)) +

+>>> plt.plot(sps, 'r-', linewidth=2, label='Входной сигнал (x)') +[] +>>> plt.plot(spsy, 'b-', linewidth=2, label='Выходной сигнал (y)') +[] +>>> plt.title('Модель устройства с памятью') +Text(0.5, 1.0, 'Модель устройства с памятью') +>>> plt.xlabel('Время') +Text(0.5, 0, 'Время') +>>> plt.ylabel('Сигнал') +Text(0, 0.5, 'Сигнал') +>>> plt.grid(True) +>>> plt.legend() + +>>> plt.show() +``` + +[!Скриншон графика1](image1.png) + +## Пункт 3. Функции как объекты. +### 3.1. Получение списка атрибутов объекта-функции. + +Получение списка атрибутов объекта-функции. +```py +>>> dir(inerz) +['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] +``` +Пример использования атрибута функции: +```py +>>> inerz.__doc__ +'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства' +``` +__Вывод:__ данные берутся из самой функции - строка документации (docstring) в тройных кавычках становится атрибутом __doc__ объекта-функции. + +Для сравнения, введём инструкцию: +```py +>>> help(inerz) +Help on function inerz in module __main__: + +inerz(x, T, ypred) + Модель устройства с памятью: + x- текущее значение вх.сигнала, + T -постоянная времени, + ypred - предыдущее значение выхода устройства +``` +__Вывод:__ функция help() форматирует строку документации из doc и дополняет её служебной информацией о функции. + +### 3.2. Сохранение ссылки на объект-функцию в другой переменной. +```py +>>> fnkt=sravnenie +>>> v=16 +>>> fnkt(v,23) +16 меньше 23 +``` +__Вывод:__ в Python можно создать несколько имён-ссылок на одну и ту же функцию, и все они будут работать одинаково. + +### 3.3. Возможность альтернативного определения функции в программе. +```py +>>> typ_fun=8 +>>> if typ_fun==1: +... def func(): +... print('Функция 1') +>>> else: +... def func(): +... print('Функция 2') + + +func() +Функция 2 +``` +__Вывод:__ вывелась "Функция 2", потому что условие typ_fun==1 ложно и выполнился блок else, где функция переопределяется. + +## Пункт 4. Аргументы функции. +### 4.1. Возможность использования функции в качестве аргумента другой функции. +```py +>>> def fun_arg(fff,a,b,c): +... """fff-имя функции, используемой +... в качестве аргумента функции fun_arg""" +... return a+fff(c,b) + +>> zz=fun_arg(logistfun,-3,1,0.7); zz +-2.3318122278318336 +``` + +### 4.2. Обязательные и необязательные аргументы. +Переопределите вычисление логистической функции следующим образом: + +```py +>>> def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1 +... """Вычисление логистической функции""" +... import math +... return b/(1+math.exp(-a)) + +>>> logistfun(0.7) #Вычисление со значением b по умолчанию +0.6681877721681662 +>>> logistfun(0.7,2) #Вычисление с заданным значением b +1.3363755443363323 +``` + +### 4.3. Обращения к функции с произвольным (непозиционным) расположением аргументов. +Изучите возможность обращения к функции с произвольным (непозиционным) расположением аргументов. При этом надо в обращении к функции указывать имена аргументов: + +```py +>>> logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами +0.34498724056380625 +``` +### 4.4. Пример со значениями аргументов функции, содержащимися в списке или кортеже. +```py +>>> b1234=[b1,b2,b3,b4] # Список списков из п.2.4 +>>> qq=slozh(*b1234); qq #Перед ссылкой на список или кортеж надо ставить звездочку +[1, 2, -1, -2, 0, 2, -1, -1] +``` + +### 4.5. Пример со значениями аргументов функции, содержащимися в словаре. +Функция получила доступ к значениям словаря через переданную ссылку на него. +```py +>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4} +>>> qqq=slozh(**dic4); qqq +10 +``` + +### 4.6. Смешанные ссылки. +Функция была вызвана с прямой передачей ссылок на список и словарь. +```py +>>> e1=(-1,6);dd2={'a3':3,'a4':9} +>>> qqqq=slozh(*e1,**dd2); qqqq +17 +``` + +### 4.7. Переменное число аргументов у функции. +Пример. +```py +>>> def func4(*kort7): +... """Произвольное число аргументов в составе кортежа""" +... smm=0 +... for elt in kort7: +... smm+=elt +... return smm + +>>> func4(-1,2) #Обращение к функции с 2 аргументами +1 +>>> func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами +10 +``` +### 4.8. Комбинация аргументов +Пример. +```py +>>> def func4(a,b=7,*kort7): +... """Кортеж - сборка аргументов - должен быть последним!""" +... smm=0 +... for elt in kort7: +... smm+=elt +... return a*smm+b + +>>> func4(-1,2,0,3,6) +-7 +``` +Подобным же образом в списке аргументов функции также можно использовать словарь, предварив его имя двумя звездочками: + +```py +>>> def func_dict(**slovar): +... print('Ваш словарь: ', slovar) + + +>>> func_dict(a=1, b=2, c=3) +Ваш словарь: {'a': 1, 'b': 2, 'c': 3} +``` + +### 4.9. Изменение значений объектов, используемых в качестве аргументов функции. +Такое изменение возможно только у объектов изменяемого типа. +Пример с числовым объектом. +```py +>>> a=90 #Числовой объект – не изменяемый тип +>>> def func3(b): +... b=5*b+67 + +>>> func3(a) +>>> a +90 +``` +__Вывод:__ значение a не изменилось, так как числа - неизменяемый тип и внутри функции создается новый объект. + +Пример со списком. +```py +>>> sps1=[1,2,3,4] #Список – изменяемый тип объекта +>>> def func2(sps): +... sps[1]=99 + + +>>> func2(sps1) +>>> print(sps1) +[1, 99, 3, 4] +``` + +__Вывод:__ да, список sps1 изменился, так как списки передаются по ссылке и являются изменяемыми объектами. Операция sps[1]=99 изменяет исходный список по индексу. + +Попробуем применить эту функцию к кортежу. +```py +kort=(1,2,3,4) +func2(kort) +Traceback (most recent call last): + File "", line 1, in + func2(kort) + File "", line 2, in func2 + sps[1]=99 +TypeError: 'tuple' object does not support item assignment +``` +__Вывод:__ кортежи являются неизменяемыми объектами и не поддерживают присваивание по индексу + +## Пункт 5. Специальные типы пользовательских функций. +### 5.1. Анонимные функции. +Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту. +Пример. +```py +>>> import math +>>> anfun1=lambda: 1.5+math.log10(17.23) +>>> anfun1() +2.7362852774480286 +>>> anfun2=lambda a,b : a+math.log10(b) +>>> anfun2(17,234) +19.369215857410143 +>>> anfun3=lambda a,b=234: a+math.log10(b) +>>> anfun3(100) +102.36921585741014 +``` + +### 5.2. Функции-генераторы. +Это такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение. +Пример. +```py +>>> def func5(diap,shag): +... """ Итератор, возвращающий значения +... из диапазона от 1 до diap с шагом shag""" +... for j in range(1,diap+1,shag): +... yield j + +>>> for mm in func5(7,3): +... print(mm) +1 +4 +7 +``` + +Здесь при каждом обращении к функции будет генерироваться только одно очередное значение. +При программировании задач у таких функций часто используют метод __next__, активирующий очередную итерацию выполнения функции. Например: +```py +alp=func5(7,3) +print(alp.__next__()) +1 +print(alp.__next__()) +4 +print(alp.__next__()) +7 +``` +Попробуем повторно вызвать код: +```py +>>> print(alp.__next__()) +Traceback (most recent call last): + File "", line 1, in + print(alp.__next__()) +StopIteration +``` + +__Вывод:__ На 4 раз появилась ошибка, потому что итератор alp уже исчерпан и не имеет больше элементов для возврата + +## Пункт 6. Локализация объектов в функциях. +### 6.1. Примеры на локализацию объектов. + +Пример 1. Одноименные локальный и глобальный объекты. +```py +>>> glb=10 +>>> def func7(arg): +... loc1=15 +... glb=8 +... return loc1*arg + +>>> res=func7(glb) +>>> res +150 +``` + +__Вывод:__ Использовались значения глобальной переменной glb = 10 (как аргумент arg) и локальная переменная loc1 = 15 +Значение glb не изменилась, она осталась равной 10, так как внутри функции создана новая локальная переменная с тем же именем glb=8. + +Пример 2. Ошибка в использовании локального объекта. +```py +>>> def func8(arg): +... loc1=15 +... print(glb) +... glb=8 +... return loc1*arg + +>>> res=func8(glb); res +Traceback (most recent call last): + File "", line 1, in + res=func8(glb); res + File "", line 3, in func8 + print(glb) +UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value +``` + +__Вывод:__ возникает ошибка, потому что сначала идет обращение к переменной, а потом её создание. + +Пример 3. Переопределение локализации объекта +```py +>>> glb=11 +>>> def func7(arg): +... loc1=15 +... global glb +... print(glb) +... glb=8 +... return loc1*arg + + +>>> res=func7(glb); res +11 +165 +``` +__Вывод:__ значение переменной glb изменилось, потому что инструкция global glb явно указала, что переменная glb является глобальной, и присваивание glb=8 изменило глобальную переменную, а не создало локальную. + +### 6.2. Функции locals() и globals() из builtins +Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соот-ветственно, локальными или глобальными на уровне вызова этих функций. +Примеры. +В командной строке введите инструкции +```py +>>> globals().keys() #Перечень глобальных объектов +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'k1', 'k2', 'k3', 'k4', 'q2', 'm1', 'm2', 'm3', 'm4', 's1', 's2', 's3', 's4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func_dict', 'a', 'func3', 'b', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +>>> locals().keys() #Перечень локальных объектов +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'k1', 'k2', 'k3', 'k4', 'q2', 'm1', 'm2', 'm3', 'm4', 's1', 's2', 's3', 's4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func_dict', 'a', 'func3', 'b', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +``` + +Различий нет, так как в основном модуле (глобальной области видимости) словари globals() и locals() ссылаются на один и тот же объект. + +```py +>>> def func8(arg): +... loc1=15 +... loc1=15 +... print(globals().keys()) +... print(locals().keys()) +... return loc1*arg + +>>> hh=func8(glb); hh +dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'k1', 'k2', 'k3', 'k4', 'q2', 'm1', 'm2', 'm3', 'm4', 's1', 's2', 's3', 's4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func_dict', 'a', 'func3', 'b', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8']) +dict_keys(['arg', 'loc1']) +120 +``` + +Внутри функции locals() показывает только локальные параметры и переменные функции, а globals() — все объекты модуля. + +Проверим наличие объекта glb в перечне глобальных объектов: +```py +>>> 'glb' in globals().keys() +True +``` + +### 6.3. Локализация объектов при использовании вложенных функций. +Пример. +```py +>>> def func9(arg2,arg3): +>>> def func9_1(arg1): +... loc1=15 +... glb1=8 +... print('glob_func9_1:',globals().keys()) +... print('locl_func9_1:',locals().keys()) +... return loc1*arg1 +... loc1=5 +... glb=func9_1(loc1) +... print('loc_func9:',locals().keys()) +... print('glob_func9:',globals().keys()) +... return arg2+arg3*glb + +>>> kk=func9(10,1); kk +glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'k1', 'k2', 'k3', 'k4', 'q2', 'm1', 'm2', 'm3', 'm4', 's1', 's2', 's3', 's4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func_dict', 'a', 'func3', 'b', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) +loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) +glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'k1', 'k2', 'k3', 'k4', 'q2', 'm1', 'm2', 'm3', 'm4', 's1', 's2', 's3', 's4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func_dict', 'a', 'func3', 'b', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9']) +85 +``` +Внешняя функция func9 содержит в своей локальной области параметры arg2, arg3 и внутренние переменные loc1, glb, а также вложенную функцию func9_1. +Вложенная функция func9_1 работает в изолированной локальной области со своими переменными arg1, loc1, glb1 и не видит локальные переменные внешней функции func9, но имеет доступ к глобальной области модуля. + +### 6.4. Большой пример +```py +import math + +# Ввод параметров +znach = input('k1,T,k2,Xm,A,F,N=').split(',') +k1 = float(znach[0]) +T = float(znach[1]) +k2 = float(znach[2]) +Xm = float(znach[3]) +A = float(znach[4]) +F = float(znach[5]) +N = int(znach[6]) + +# Создание входного сигнала +import math +vhod=[] +for i in range(N): + vhod.append(A*math.sin((2*i*math.pi)/F)) + +print("Входной сигнал:", vhod) + +# Функции компонентов системы +def realdvig(xtt, kk1, TT, yti1, ytin1): + """Модель реального двигателя""" + yp = kk1 * xtt # усилитель + yti1 = yp + yti1 # Интегратор + ytin1 = (yti1 + TT * ytin1) / (TT + 1) + return [yti1, ytin1] + +def tahogen(xtt, kk2, yti2): + """Модель тахогенератора""" + yp = kk2 * xtt # усилитель + yti2 = yp + yti2 # интегратор + return yti2 + +def nechus(xtt, gran): + """Зона нечувствительности""" + if xtt < gran and xtt > (-gran): + ytt = 0 + elif xtt >= gran: + ytt = xtt - gran + elif xtt <= (-gran): + ytt = xtt + gran + return ytt + +# Реализация соединения компонент +yi1 = 0; yin1 = 0; yi2 = 0 +vyhod = [] +for xt in vhod: + xt1 = xt - yi2 # отрицательная обратная связь + [yi1, yin1] = realdvig(xt1, k1, T, yi1, yin1) + yi2 = tahogen(yin1, k2, yi2) + yt = nechus(yin1, Xm) + vyhod.append(yt) + +print('y=', vyhod) + +k1,T,k2,Xm,A,F,N=10, 20, 1.5, 8, 3.9, 22, 12 +Входной сигнал: [0.0, 1.0987569716815757, 2.1084991880768302, 2.947423339981607, 3.5475647818826213, 3.8603036233356374, 3.860303623335638, 3.5475647818826217, 2.947423339981607, 2.108499188076831, 1.0987569716815757, 2.209560170082712e-15] +y= [0, 0, 0, 0, 0, 0, 0, -0.25334827984566566, 0, 7.152382915540651, 20.1527847908908, 9.624947687157025] +``` + +## Пункт 7. Окончание сеанса работы с IDLE. diff --git a/TEMA7/task.md b/TEMA7/task.md new file mode 100644 index 0000000..469065c --- /dev/null +++ b/TEMA7/task.md @@ -0,0 +1,104 @@ +# Общее контрольное задание + +Зеленкина Катерина, А-02-23 + +## Задание +1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с за-держкой на заданное время Т. +2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: вы-борка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения. +3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y ли-нейной регрессии при значении переменной Х +Y=b1+b2*X +и имеющую аргументы b1, b2 и X. + +## Решение +```py +def signal_delay(current_input, delay_time, output_history, input_history): + """ + Расчет выходного сигнала устройства задержки + current_input - текущее значение входного сигнала + delay_time - время задержки + output_history - история выходных значений + input_history - история входных значений + """ + if len(input_history) < delay_time: + return 0 + else: + return input_history[-delay_time] + + +d = 4 +output_signal = [] +input_signal = [1, 2, 3, 4, 5, 6, 7] +input_history = [] + +for x in input_signal: + input_history.append(x) + y = signal_delay(x, d, output_signal, input_history) + output_signal.append(y) + +print("Входной сигнал:", input_signal) +print("Выходной сигнал:", output_signal, "(задержка 4)") + + +Входной сигнал: [1, 2, 3, 4, 5, 6, 7] +Выходной сигнал: [0, 0, 0, 1, 2, 3, 4] (задержка 4) +``` + +```py +# Пункт 2 +def raschet_giostogrammy(viborka, kol_int): + """ + Расчет гистограммы по выборке случайной величины + + Аргументы: + viborka - список значений выборки + kol_int - число интервалов разбиения + + Возвращает: + w - список с числами элементов в интервалах + """ + minn = min(viborka) + maxx = max(viborka) + shirina = (maxx - minn) / kol_int # Исправлена ошибка в формуле + + w = [0] * kol_int + + for znachenie in viborka: + num_int = int((znachenie - minn) / shirina) # Исправлено: от minn + if num_int == kol_int: + num_int = kol_int - 1 + w[num_int] += 1 + + # Вывод таблицы + print("Гистограмма:") + print("Интервал\t\tКоличество") + for i in range(kol_int): + start = minn + i * shirina + end = minn + (i + 1) * shirina + print(f"{start:.2f} - {end:.2f}\t\t{w[i]}") + + return w + +# Проверка функции +import random + +viborka = [random.gauss(0, 1) for _ in range(100)] +kol_interv = 5 +resultat = raschet_giostogrammy(viborka, kol_interv) + + + +Гистограмма: +Интервал Количество +-2.11 - -1.31 13 +-1.31 - -0.52 12 +-0.52 - 0.28 30 +0.28 - 1.07 34 +1.07 - 1.86 11 +``` + +```py +anonim_func = lambda b1, b2, X: b1 + b2 * X +print(anonim_func (1, 2, 3)) + +7 +``` \ No newline at end of file diff --git a/TEMA7/task.py b/TEMA7/task.py new file mode 100644 index 0000000..795eda2 --- /dev/null +++ b/TEMA7/task.py @@ -0,0 +1,75 @@ +# Пункт 1 +def signal_delay(current_input, delay_time, output_history, input_history): + """ + Расчет выходного сигнала устройства задержки + current_input - текущее значение входного сигнала + delay_time - время задержки + output_history - история выходных значений + input_history - история входных значений + """ + if len(input_history) < delay_time: + return 0 + else: + return input_history[-delay_time] + + +d = 4 +output_signal = [] +input_signal = [1, 2, 3, 4, 5, 6, 7] +input_history = [] + +for x in input_signal: + input_history.append(x) + y = signal_delay(x, d, output_signal, input_history) + output_signal.append(y) + +print("Входной сигнал:", input_signal) +print("Выходной сигнал:", output_signal, "(задержка 4)") + + +# Пункт 2 +def raschet_giostogrammy(viborka, kol_int): + """ + Расчет гистограммы по выборке случайной величины + + Аргументы: + viborka - список значений выборки + kol_int - число интервалов разбиения + + Возвращает: + w - список с числами элементов в интервалах + """ + minn = min(viborka) + maxx = max(viborka) + shirina = (maxx - minn) / kol_int # Исправлена ошибка в формуле + + w = [0] * kol_int + + for znachenie in viborka: + num_int = int((znachenie - minn) / shirina) # Исправлено: от minn + if num_int == kol_int: + num_int = kol_int - 1 + w[num_int] += 1 + + # Вывод таблицы + print("Гистограмма:") + print("Интервал\t\tКоличество") + for i in range(kol_int): + start = minn + i * shirina + end = minn + (i + 1) * shirina + print(f"{start:.2f} - {end:.2f}\t\t{w[i]}") + + return w + +# Проверка функции +import random + +viborka = [random.gauss(0, 1) for _ in range(100)] +kol_interv = 5 +resultat = raschet_giostogrammy(viborka, kol_interv) + + +# Пункт 3 +anonim_func = lambda b1, b2, X: b1 + b2 * X +print(anonim_func (1, 2, 3)) + diff --git a/TEMA8/Mod0.py b/TEMA8/Mod0.py index 6337fc3..f056c9e 100644 --- a/TEMA8/Mod0.py +++ b/TEMA8/Mod0.py @@ -1,4 +1,3 @@ -#Модуль Mod0 import Mod1 print('perm1=',Mod1.perm1) from Mod2 import alpha as al @@ -7,3 +6,5 @@ print('tt=',tt) from Mod2 import beta qq=beta(float(tt)) print('qq=',qq) +perm1 = Mod1.perm1*3 +print("perm1*3= ", perm1) diff --git a/TEMA8/Mod2.py b/TEMA8/Mod2.py index 88c5b37..a200ba0 100644 --- a/TEMA8/Mod2.py +++ b/TEMA8/Mod2.py @@ -1,6 +1,8 @@ def alpha(): print('****ALPHA****') t=input('Значение t=') + n=beta(6) + print(n) return t def beta(q): @@ -8,4 +10,3 @@ def beta(q): import math expi=q*math.pi return math.exp(expi) -