From 4d8ca9c54ac07ab3bffb5948cad456ca18726fe4 Mon Sep 17 00:00:00 2001 From: Gao Junhao Date: Wed, 23 Oct 2019 23:48:58 +0000 Subject: [PATCH] doc: add atkbdc emulation doc add AT keyboard controller emulation doc and entry Signed-off-by: Gao Junhao --- doc/developer-guides/hld/atkbdc-virt-hld.rst | 77 ++++++++++++++++++ .../hld/hld-emulated-devices.rst | 1 + .../hld/images/atkbdc-virt-hld.png | Bin 0 -> 31365 bytes 3 files changed, 78 insertions(+) create mode 100644 doc/developer-guides/hld/atkbdc-virt-hld.rst create mode 100755 doc/developer-guides/hld/images/atkbdc-virt-hld.png diff --git a/doc/developer-guides/hld/atkbdc-virt-hld.rst b/doc/developer-guides/hld/atkbdc-virt-hld.rst new file mode 100644 index 000000000..249f4b00b --- /dev/null +++ b/doc/developer-guides/hld/atkbdc-virt-hld.rst @@ -0,0 +1,77 @@ +.. _atkbdc_virt_hld: + +AT keyboard controller emulation +################################ + +This document describes AT keyboard controller emulation implementation in ACRN device model. Atkbdc device emulates a PS2 keyboard and mouse. + +Overview +******** + +The PS2 port is a 6-pin mini-Din connector used for connecting keyboards and mice to a PC compatible computer system. Its name comes from the IBM Personal System/2 series of personal computers, with which it was introduced in 1987. PS2 keyboard/mouse emulation is based on ACPI Emulation. We can add ACPI description of PS2 keyboard/mouse into virtual DSDT table to emulate keyboard/mouse in the User VM. + +.. figure:: images/atkbdc-virt-hld.png + :align: center + :name: atkbdc-virt-arch + + AT keyboard controller emulation architecture + +PS2 keyboard emulation +********************** + +ACRN supports AT keyboard controller for PS2 keyboard that can be accessed through I/O ports(0x60 and 0x64). 0x60 is used to access AT keyboard controller data register, 0x64 is used to access AT keyboard controller address register. + +The PS2 keyboard ACPI description as below:: + + Device (KBD) + { + Name (_HID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {1} + }) + } + +PS2 mouse emulation +******************* + +ACRN supports AT keyboard controller for PS2 mouse that can be accessed through I/O ports(0x60 and 0x64). +0x60 is used to access AT keyboard controller data register, 0x64 is used to access AT keyboard controller address register. + +The PS2 mouse ACPI description as below:: + + Device (MOU) + { + Name (_HID, EisaId ("PNP0F13") /* PS/2 Mouse */) // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0060, // Range Minimum + 0x0060, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IO (Decode16, + 0x0064, // Range Minimum + 0x0064, // Range Maximum + 0x01, // Alignment + 0x01, // Length + ) + IRQNoFlags () + {12} + }) + } + diff --git a/doc/developer-guides/hld/hld-emulated-devices.rst b/doc/developer-guides/hld/hld-emulated-devices.rst index 5c5338205..d16c86f6d 100644 --- a/doc/developer-guides/hld/hld-emulated-devices.rst +++ b/doc/developer-guides/hld/hld-emulated-devices.rst @@ -20,3 +20,4 @@ documented in this section. UART emulation in hypervisor RTC emulation in hypervisor Hostbridge emulation + AT keyboard controller emulation diff --git a/doc/developer-guides/hld/images/atkbdc-virt-hld.png b/doc/developer-guides/hld/images/atkbdc-virt-hld.png new file mode 100755 index 0000000000000000000000000000000000000000..4c54806dbfe3e126a86cc8556284458cd9b4c439 GIT binary patch literal 31365 zcma&OcRbbo|37ZUu@4fW!^!L_TSiun3K2?$%8F3-9>>fvQdY{yN-Bx$?0M{Dl)d-f zd-HpqgU0o~KHuB#k5a1hdOjcXet$gfub!zY%aN0uCc(kMAy<&Uatj9sPXh-B_XY$H zd`E4=M+$twwYepSz)5XnngYKeFp{|;gM*V1M7pbY0{ouXQeM*r2Z!1g^8>fvkl7Ij z$N99v6`9+P+H-wDp;}|E6I**V55C^H|GN9jb+b9c3H1i^_D;osrSEKNS2?UWB8mM& z=?&Pw3MN(RBA0mOzZ<0M*I2!PGT?^=m$5K-US@Io6cvYui^uBbwJx?HHi0ae*mG)> zY!ch(pYL&vOI6Rmr=Dw(TTt4x@x`VvVBhz=dTNpVR9~o(&N=^g^3JPM9q4ylykn0_ zOK!t=zk9N(AN~;kC(T_V)hdDX#nl{RrEOfM=)-QbD&R`( zULMbj^9e<-!uK{_LWZcR^W;x-Nod@_!#@|Nw{kgiBEyM~*E8X~ADaB-IBwPi+^|J{ z#pA0YqT&==(o97+d%PYg_yd!06#CJ<>kys7)%kX=lPOFd&+Ck$E=w1FSQE>?K7LK6`V?CiJ|Qo$ zQ+@6$Xo>C8^1+h$fv)>d<9$&{l9$HAQFEWs?#LFPXvtmxqB{4*ksL`4FqmvAe^-6}lf^p~5 z_fBQq?C{4e7er99#AF=vk^F^^z7mt=iM+TF;8%!dEEM`UPtrvUb3mX3V^so6heC*$ zhKP56gh8!O6*oR0oHI65GO7dzc$5ByfKVXQhZS>gBf5eFro6}V%#+5`8c2b5m~T(T zrZQ_5Mf4h*(#q3ay@=;n$8&bAXcV$lno=o}4Sgal-(|1pqqdBTh^;!?gP(T|Pm_ge z!zbhe2rQ+ApTXQz-09~HxasFn5F?2=Cifs<27k^n+$J(TBc6oasTZPesS;a~IWO{K zEg>iT5?JCZOO}afVe^?WW5>4%C#t(^HSi~Tbb%#gh$x(?uQ|zx65H@QVl2UiEE{Bx zHz2)d2+7w|YKjeU#d~l8cjH-PL>Y@ssO4kFOp&wyk6^$P>w8@ewdV0^^S1(zxu`eX*Jq;Xn}&U==i!dus}dZmt#Ph#1FRl+lR zzI_+E9%NW;doB8hM+@-|muGnq#szQ1Td1lXf?r&;%#(bvAS5tTrm2D!;)M{sWd_OS z!!7@Y2>blE5oK+@=|)YpQl9*UAB-|U9+5T0`H^w_hd{ddA9FSL+;oPsOlfWESD@Dq+YoaJgoC zN-k~3Yy5zGg{a1&WZ~itH-kw~MPKJ7%e5g3i3;LIhxN(?qEr*9*qOkAwG_q;Bk|I; z2AVYec3R*t`n^MQiPpu|bYrr5^n6|>RQZ8GFE{X(W+4IL13JUm>e>NXMEle7d!L5V zCrrXGXBWdf<98>=wN;^YLjfvnq3@XyV~VYE^W3&vVID;GYR#oLTA6a^0~z zRhrmT1O0XwF>>NoyK3sp`{U0#hW(_ihBxo1GfP>X4MfV%&Jlecc+;?vb$>;B@S4fZq&ym502G+ORTp5|i6B zXJc3S-wd9MbuOcdy{w%3Sw#r3***FL8`U)1z88aWZw$AB41>v?GO(8n>Gh;2 z5Im#jGBqV9?Yg!k-p4(6S=zNEfA^BhpkvXJi`~}^FKA+qwB1O12%|;mG*Q|`ul;V3 zRMOWZYBQ;jxUTJLJKvELy>~>+V`BP#N*UT2`6bPK-=>k4*iD*&xt=ZBpG{ELa^2;L z#OAHR>P~h{6h63`(9zZW;&NM|%Dsa6_VrId<+GsIJRNfXB%Q^+S5KOF_pZPNf14ne z?db}UxO(l=vd@Pzb}lv1_HEg^?wE?%#zt*bFQpTq=gihGD?9U)k`y?O;>tOKO!{n- zT9J5`%;+rYKkG|u)W}J?(%Ks~2bYOJfirzO@i`SD?K-km6C0Q$81Ix})7I=;pJ^d+ zhOmI-PVLVTtCAq*+>Qaa@gK>l$n5J{jOc#?)c17TOY51VznCZWOGp@A93I+VCVLWE zFkh)I0^2uSBbb_Pu;_Lk)}$!*eXJe)!Y!^bWYX(*x`@7_yi0}tKS~yrmHH;M+U^I+ z(ouhO)_>>ogyAeBdr+T)ghbvB>Czn0^yVFR{aEjGbJ!-n)O90b=y7~5*(SSthkLiiNfs9EHmbC!_F*oY*R|zgQ&-q>HZ)f zjPAaCt$n2R>GxDl+1XAe@lYE2&8~(YN;Zr4Ali~MaMTjZ#W&Du#fp0^r8#~v(1O`J zpBwF%vvw{RPy6##E+{dg+h-j5PD-^3s(g2Qc9@Ql+c~S-phVZO7kIPWkYG* zJhJ4DfCzE852qsQZ~>nMKgyyV?sCweUz5DwaQBKvt3{UgAf&##QRIeNWFOP zp%mFo4YK&}52-P3MjWIQ3cOV~ylO4DYR%FKx>DnC>dy4infye_7-7`fV71W|@rL^1 zvt$PC6+PRR?ygAg!1T@(1^yGG5>LWO?tALX1yK`Tz>9lNjUU6L1F+{rg| z%P@Eb)bWq~v}TZ*06n;b$V_iW$EBI!64e^HCZWRNM#hm7I>X=6Zb|aq^HvR$B^#QZ zYHnXE7=z#pb8K93y(^74(}Z2e#a&aCmyYNE!Nd^jda4%LcUuA;!if zsB|yU=hCh!9iQ{)%~?76$;~q*+ersCae--@=S#VI=N9i|A%$~0T|a-$U!d|4Zw+E_ zV;J9gW;DZ0KKE(asnd-qdn@TjSEV#^{PGSt+VZN#iDiYzsX9=L7RlJQJh;6Ln)ES# ztWucUZl!%-4SDpz5!(u;G%sXIdYG^UpP;tF6ecPM?+)`9mr!%netS`pRLgY8P!ha@po1xn5rp1M>7a*ul9xf=k0r3*KrHo=lciE#ylm zAC<@SjT|Tya^GP5(^i*?oo~@poUZlYurgph#C|0{S)_AZx%L-4WsLGFm}=tiVu;=I zP15ky>+p5F2sU^u{kJkRKvHn1kU z5#OJkP4caGV+eOrf9)Pg9gOb~uGqPD6I>IAB6z|)b}Cb}@bFVfD?Z%xUThgC?d0** zZ+rB>; z%r1{>Nq>d5H1x*aOYg4?tXWzU{r0+!m<%AwU5&(AKXLkj#|G_^SRiF3ud(reh(h%HkAy zJhJJMzZI>-x~+>h+%#8aO%2aC>OiM*Cx|&tQiR4`HP!j_|=A=tO>gjx~@UPCllgdQnjeDNNg~LQ|}EOTf%^^ z5esqR!(XLAVR~Hm;QKT})G#+i*b^56MnPqFELKdoM`2VVz2n&wsp3B7vS!1tCoN$n zea3kw(ZW{U^I1<1^qVqdX=XR>M4t%Wme9{ml5a~Q$2g5G*1YU-02(y7i6W>q1~2`Y zKv)<;KdIffe_~B3$a8Bxb4a=D5AbX-zq5$LHY9OD8Bi*F*Wip33e(%^F6sVI>s%~> z!2mZvV2*$rATWaV`WOBKIS1pXIu_u{wMEe(D2ywoR;LwikeOg`Ye)dVt;*cBv!@$* zY~{pG!zPVAGlT`&%eI6u4sZ7KibdVj4*tH!B!RCWN=Eu}7Q@;=XS~(n+n~4|AX`rc zr&BC*efZJh_4ga-4?}hRen${q56dQe#NlWL=BvUULrFx@!^ESu=V4}LH}6bAtub(H zl@fc3|DWiYVNVKk3c@4qczBAhirbST->7B(^4ot9DLD+0I*OaGDrZpuI42Ot5cF?6 z51-%KTKPhh=xiK|WOmkz4PDtaeV=fKcm2{=f*LpeK37WK@+Dl}M`FcFoUpo8>%bjm zt&c>64{EIq>)iG=!X|i&0tVTuNO<^BdTpa$!edMCE3SADld-u`)f-`cn&1vA!%3Q9 z9b2I^*>}|$&)$)Ta5x2!H-aXrbneaiK zv~F^>-6-$gVr!zr&0Hipyk;w4tk5Wu;>J>xR)@<}=|TO0BYgwD;^1dQt?R>f9#7nQ zBl~|mJzq8Pxly5o{a-buJ9)(3U@2EKg}t@$8utlqA%3Pu9_|4*q|+{DDtg%Mj{Kf{ zkX#sfP*?tf(zLgZL4r>L9>NslLBx8UnNp0lyp|Pi#By(ytTsMc2; zNT`G&!_s2~FHZWEI<-I;zP{=k8D@8Zn%7cs4-_1ihR58u3#H3z^cUR{9{B|OcC51T z1+$WQab6mJwmxbsC(->8S?%RXKscXn6uTkcSU6N3WLY2=!mgV~fWzsErwQ?o!cE5& zSVMs$7gs!iGliGs)0*yd?09~Vf{Af*Oq4C6u0(RO9hkn5ptUAE8|#S^Dk;w)HT;(G zg#}0C;~;!9zRa!n?zr_6@n(^1NN~dD2mo<{#svN1I_MBZIu>j22WEKqvBs=&;=@0L z`vhS^HANHeiC8HMLsrZkr^%HaFdUo_$MPp5wwrMa-$J5qPlyTvo!P@&v3Z-qD_ZL@Z?nlrNtJiB1xZL@5|{ zk6cDZbSV8S^&1m3zRv;ZO&NXbBfui)rM;GA1W=A0>EEF17fy+lHj6ceL{Iv0cGu+E|RZ9-PV*G9{b!fMwNNn^r=P13DoNTR< zy+^39E)mxB)=2>Z@3;8*1ksswXLJ`aAu4D6juqH%qI=Pp(V^Nm$Z1g78I>UE%j8ty z#XMvibXKvBOPwd`C~F zhs9>p=+|t)%t0>n{}W$_cKSQMK5m)5JrmX>+arLr4-2Okh_ia5=6o4`;KUW~izo~l zqcQsx@8c00(W`Hfo%qr7Qr7*Fuw6)^c$_It1v!rB6iqEcwU^9eL^?o+&ITdM;~7G# z7j+z7&2IGleguSGL_VBsFKMV3O|Lx5g3FzycVZjGxgvps%Yh75a;cONp&w8ZXn_%R zS40>tx6G!y5SrDqfzgYUS1=hU-XliPe5OJex>1JWKiv2KE4BzSd49rEXd*DIztseh zw@pB}+}|+xc!>Dfs3U;{{muO@%%R8#4iEJLS$R$*qR$0;C|xB%y;qDE;$$%P@>ml5 zRLcTlf0<#Fdtly&Z-qrJW`wEkS)k)PNwIFKpd2eBiPQ4BgA~Ydr=ZbVMvSqLCpGbW z6n`fqqb{B%-9>Uecfjj!E@IB5BU89q$ZTkr_gqVAO~BmL2kU_s~-89~IX zjKC6ZVsFK!;mgQ%(Pl#ZH^j2Nx?5!3VJe`>x)AQsADRmc>3HC;Sjogdy^0sM&Sr&~ zwMdT0*nCGSJ0G2>h%wgLt0hJy%wvcUCwi6G0M2DjSVkCex!rpsgK|g(hTLAOBYtrK zRi6h{V%O|Xs1w7K*63glBUbr1axv=iS~XBwhjAgp(lpE^hF@nWm__vt@?4%Ox!m5H zDI738sOvpdEi$%d;X^t2k=uQwaG`kri{*%Vu0b9?h3(uvP245R@n|v={Ta$Msogp5 zUX4(AAgCcZk6z9?0W*sormbunN9P{&8x>*f5|){y$@JKSG5=T&B)# z5{aMzG}$gfjY* zyAv4hfSJP19clS&RczvXH!szM$jUXTm!?c??vLDgO#>gj9JK+9phhqZe=>u;#TM%N z2{@zIdlyV1Wz|*t@VVSB&94OKU%yl%_LAnz(iKLr4j;LmJV7bT?+NpIl$He(!K@aJ zi>%S}E}6IzJh+pv-E)6a6W<>gKlK{RZhOhSZbEnx!)zd(yUtOd6Wi$;B1k7bDDWfRz^+_ zW%TCyKt9ymY;VYOyKip@-^zsnb9cdSFc5;@Fd^7L-)aT}nah4()eSPI-xCR?h{d#k z(1bHf#!>SOl!Vmuc@?ov{j6dOK19+_RJI*com3N3RW@o>e%P7^=GZIPuXBdlfnn;? zba%AnM+6uC8&pyZ4f;Dl=F?>udH=;mg-ROgN3p@XS^UelYZ?3;3GtNd&!WPUKf8`Z zZe9;9HmZ32P`-~ST$UpZx%y0WpeZ(gx&S{~Dk$GZmdTqt% zb4`*(kRiON)R||sY%j}`BHSz9UOF3ELghB|nYn~N%J9J1xMwbIt5D=KLtpo{J(tcI zg!@ipQ|sOgN_AXxkO_I%2bURy^nDcE z@irRf)DuQ@-t9${ahpR!!MR;|P3B}yQCc_lS+C_gM+>ff7%F7m*IyHzTd1}mx=T#9 zm&`+wTwiWs=Guv}TyH2%R@rr6oay3qKmBpVbNqE}?CCivx$Ty;eyKvP6j?4=CM!Sk z?l1*xv1y=3eX`APf#Ky`@PfahwDyLNKBE}DA}8_VTBBWM!rX@-rzQo;0$<6psd?6k zzLD~vUR>syiz;8s6*KjvB84!&_`FepXP^bJe;Om&NV^6@OcS~y&Y~EI$xb=)WFzIz z#so|!>3bADnv(|D*p>uJMO~PBda6*N4 z^e{1dH?t0V4@feLX)IrKK76$Hnz@E6L_Mmkta!i=v^{JwpBjNDV%r|s6`ID&oTxUx zrqtWO@(-M4L*U06;}J2 zojex@`i_u3^xn^^Wriyzv@hYWg3|S;;7k&jV{;w{8yOp)rLW{lk(_luIc13zr)#wN zdeOWv6jaEOFxj}nRI_=Gm&a3^U_`TS}cheJ{9F< zkGlCEK72}BG)sxsW|)1Q%+|?EH%BLYRV4103hZ1P97;AUZToIcgWm4(T$e;U`fdhP zY&TBiXfHHolg2ZS38S(WNZSWikOu)4%;_C_8+gebQTtmvE~~BUj9E)-@X=Xk;hF?_ zELvmmQVrn&`!V%oFX%V9i1bS6_#u`&21X4SFj-z(VLn=fl-Rtv5fL=_hRAMuyAr>| zZ{AS;iTagW5^K-Ffad|-pabGAMC@zG3)3=aruz>J6j^xnFDUZQF%(Jt2eovr^4siz zTxa86)_l!H3x8=kH79}FpKZpB;H%OsZ+4S@fRg%o&(`>)Y^|p~_}&TU9ix(hHtjjH zm?VpZy`&$O2ZAaMKAZDtK0#ZReFBBmlvV)q0k0)r5yN3h+Hl|D}U({Kv7_{rK@ zXW^72=zMoBK7MQfi|hZ3;xN8=EX6SFmu142hoN8fMyh!-)RbxD#BY_vFYuybC>`5C zy%V-h1=xz$6$7lAC1-J!9hk)yV3cksfULmS;16WA6nCxN8*8L0Xr^q)iyY|f zd~qyGV5KN1KLT~IYN10b(02j;0{9-V!Z{*a#4ub@+=2_W>*3Yr9gLw=Sm#(d{Ce~T zll3V1@uO?laYScnYLzjVoSe@yg|xyBSA*2`5?mq~KHGTS@`*V7!T`lAhS*sJiH;Fw zMX6wj9k?~e;jL4^t;;qUu9yc`R_I?PdzyWJTeg<6GvzEw;zumgoF4|kz{r0Un8PPa z`d`4U08c(<1HYfVvgX@-Ro=>g@dhN3gD-f4cCh&NUx@pP1pXlnC_A^oR}yLPQIaCN zJi_oLJW#X{;M_xe>&?ivwAe}Mb#gBCHe?I8;-_q_?7!$q*_rk4E3i5z5s5WIz)rw< z{$MBA^8_*Cr=KGHfanZ>S{fA2OKN&sf=x082QtcRo7RRvewRBK8x6BnGkLX0==baz zPht8N7lBGDqYm9`f`^RK(yL$$C#*u&*FFXn%$$DjA;jrjK=ceSjw16)Y$(i@66w*> zC)Ze5gW;1Cq2!0rdAf_(zaESSKy(6_gJS{@MXBBzwR%$ARpbNRH(^FRi__!w#6$J&@$Zfl4I%f7Yb)?KRKePle_QKWF` z!S{j0TCKU;0y$sBv<2U~=&P{sAxdAUC!&H+OKgox(is7TJ2*FG<$Oo5?p=B&9 zuK8Yij(qP{mx9%(u&n#t)h3UBQ=>YlT(p)~{&z4S0(=ckJ}peyNj6fEW&Q@btbcc% z<2+eBHfn5}9QlIFetQXw05-TX3CO?*;JpgV-^bxp;$uPtUa%#~rHHTOJ*}i$RufdP zz&=>+x7<{HNI#BP_8<9!2^N6KW}WH3{mLIuc@62G*K~g)i+2xwjZzJ?uS_s2Fp@A1 z#6Xm5FnfSc7F!vy2%Jph_elZ|fMFz3Nz3jgLI3d4QS|yMG_V1{WKYf^pqA@Yw#;zS91KZ-QARRy2xa|th!iQ}L99%4+Zgqp z`Ojz>v?9i#*dfTIIh;PQ%%Cl`aN5xXIU>%ook>)+vu_L_4y>L@f5i#IhM(I1#>o}K z%<>z0TM{6j!5%`8>{~|TI10KURDa}_|Dq!|4T$M^aLe@KE}wcjY=~p(L5zhsz!*3^ ztW*d>Vgvi)I6GMYOw+#+6#Pau&tq|q4zcxj8q-8lX7vEXf-wZ<5N|T}U&1S0bw9vI zu>-8X@k%*v6X(ANFo!0vM+;?27QkJGyF@zKz|Q`;nhBf<8y(KD$X}sx*!+h7D>Nc% zl_I(UxOi&`MjqOn^spxx>c$W&qOb3u%UF`~2HS;0eEVvhHjb&;{}C8Kfy2#V57V=^$bWc>w;H`To1!s<~Fy!%xxtw3E21D*cc*zPV6=#&0M%p={4DG{pBX4@3?-S z%9pt%1=eDa`%(b^&*Hum_7qadzzoQn`)FYsgl~;#)$x@&AbovG_ zJs%Chm%8`LUD!GB3S=lKP-5|X2aNla!(PKiKGfPi0g6tqT=JUdjA?5t2wk#2?L^Q} z)4zuD+@wJ?rV^`ZAo4EkNTdF6AZHVj8S~L(e_N2UIg1#~O+*McV{foFsLjSPK;Sed z1RCUw;0AbJ^A*=zvfu6)M-tD9)3T!!g``ndP(?`iqXdK~Sa~TsgO98^GLGKLNvv`B zksj}Fu#5>lpwnfKQhJ)GAvH-3KGHn!2L0F-h}ISvGxxOA?S-ydDQfVEt#katpQXUtADC|_U*#K@e+A_U@qyAXfUor&D9e8SATZDsTe$Yk2(waQy!uBJ z9opcd)=348Gr*fCqY`Hi6sn*CH=DWdHY?dkHUq&yWLdNt)%gAxDLAti^dVOQHTqH4 z1~~IiFHo?+IDy}d5VNQe1WOZ4NSur!n(QLDC6z|5O}$=C@Kd5{+>@P;3e7ozO241- zmSL>%vO2tIC{bRwOzt^#&^Uz`gVR5z+v=y$Cg#O?uJPK?p2VhM2luh=teVsZC38^o z@416fMtN()oOC&9h`RhH z@o;yv%pgpe&W}wS%HT3CRuqr=H5&TIkS*hz)v|4%T)E@iJ&pE~%b~1RJwx)Nz~ix%7^nw2p+hqxE5Vp|Bz2rXdwqx)D0KX@dL~8TPu=;Fh?~!eEsIR!Ca> zo&=ao*>tjzowR;5?ojWWzM{&pXY3OF4NFFR7AG|LZ5ozsMu+Vsw&-};6@@SKwuH~v z4VnuPspxb`S${?*oY$0ZeEpngWKK_~L!B>tqnteV0$#^Cp?z4vY5ok4?zykVG&6 zTrGbOy$g@z&Ql`_dXTDiQ%jPtw+%vhgyL;-WeTU?ZnMbZ%SIq5++#j7XPtjS} zk~jQd+U`2B=9Md)mM!^-`Tds19#WdIzkRPgJ%)UUx|C#y7dJ~pI(rV*K9Iklc6y!_ zuH-`2CVMfiZQSHiVZ~WtE>vFyY|wTiWM%$;isDg9M-gdI9R{MY_N{+VeGgCYcuGz^ zVUld4L02X$nVn}1LNR%Kirsk(x2@0C^tLK*`!GeKj-Nv$KHRfi_05R2!aSxpZM+!O z=RBI(gH8%!lX$B2fN=9epN7u7E%TKD`vBRz)-;4m@%FvWiX3;X$-P(Gxn}ce%(5FT zoh~=%zEZ(wk0&@E8)ALa$3mB#zQb4^)5x!!%p#KS2KiAjjvH1%fDN1{B61?A`xcuI zuSOETNN~9=8*!it&KT|aR&b9d?zEYG+`)%ERUhQEslEQ1sm7Cw>K5YnnHx@A`EW0D z?jG^*Pt$EW;jhITu|WiDpVzHjb}iwZ5|8Mz;kJ}dbE|lLM^THOzF`}!pZ2>r-Dqdy zw`C*tU)f8M6-rC{#HLL>U3Z7{VRt@EPAy_Pg#T3|d>ZgmybsHft$A}1l)|$8RI5|y3$;GgSe6#=gB${r5s2$&a~tR?>?lxHXzsT9`68*X0@1kezQ*_yU9# znazlHqGY!ak7M!x%h2@5*puk>3EJG5?C+WUNa2*?i~^-3izEw+yLuDx!z8hN`P${% zs)BdwcJ1nB8+w=>Y&T}5p6<6AuVsCNvrQ>8b*B#4D@b4T=hqsi9r{^HVpi}E56U&} z=lW7bVIgupy3r;AEpkn8g%W z4F9XeV?TTs5kV-<=G}mgGJB;_ZUAAw7fTwkl*K5Uw*s^^UFH46dJ_*HNp3;Ey>Gt` zI&p<8*CCDC`_G6-kGSD;;w5?(7ai6_9YHq4ZeO40!SKQYirBRH4E+{GBx^y6jSHMm zv-N8bqoz``w2d)cs4SQMwCgQ^A{ZGFhr<=MIIwFtZ0-$ehgp17_A@0xw*vr)jqe+& zUalT)b;oe_UM{{F67szw%JCNKRghtT#ON550F=Pz8nwxO_PYZyCZ-D#+=A@7w zuE{tC63j;$(ow^|yY#Bd}!OI0t|5?lwd$0fR!s;ICHZmj>lT$G6_Q zfNTe#gE;mf7Ka^OzFF&xLNBLB`k3s>tbvPixkNv;Q2R0CS3Lus^%hlA+5`)`%j{QS~@Ef@CQV_a`gV{goRqAMNKm)gv zg0=RksOb=aNt!#*`AC(`63Y1FwfWD6*c$A0f7OFSC}L|8UU>!&nDVE@9d%ViUIX;( zJ+HvMcNB1Q74U$=1*cW>hBHL`AaS8jm~_a7UX6y+BF)#*RceTl0fF6EHeICr1-g&= z3$}m*TyqgGEIWhE@$(JcRz}1X6V>Q(dcEMY{U%JRAWR0f82|kLEc&uzm zHXkC3qsy`Wc6A42^NWB#feOFp&9f-Kb{6SoFZim1{qgwbgD>BO62lL74<@AVhkG3i z$J|enM2fAY5pN^y=V$jv!uHp?bw z!!FYuUw8Hwz`<%{=I|8I*Xw}mUc_|}52^KpH-C{ae|sK?y~UdjohLB=!#AyHd0RlX zbI*Yg{WJQDR;f+0S?BEV=zfd?lDjB;{2NDcc#k_QKHq&OjXit8b?Tr&7zI_M=N3aT z?h+5YfG&fG>`SPn=KB}AJPdFGm9JkF(E30YjTNJpuis@AUC-PnB|GS+=u} zw7#c)sNl-M#q#~)**NcHp4Xhp{ud?mNLKECu> zUo_#^kpM3j^MhyxUy}ke5nPg9!lwKvYu~rULFGqspz+u0;b+j~IpXl%+fh)&@%Zeo zj|=L;XEVcl91EJPB5NG>{=SMWOTNHd% zB#wWH(Pot`pdSCGaKBk?Sv7rCyP~uqC114yKr4gn{1(;T!KL0Aza}PJpfnpm_(MQx zzJ-_sA^8B$!<+9nyD>U<^7vwqp)YHTof@$tQ?^qCqE4cn6!Um|9*$ zt>2F{I2>;|11e|$fA!21)cblv-^DTM{Pm2u?yiAL2Vw{HB;h!^lu9iBYL%FH_Dt*M z(l~d{6sBt|_{b-noKe@$6|!{StM@Guqn5h^KK3No`c7$q#uP@4j)hti1A*2dMm{E2 zNBTS#(}ddVH$jL#Tp{;K50wliHkbA5A-dSLB02`E7CDDnTvTy~-L=WcW3&)2*?XV^ znK?%WFPi_jvj~O{rE76PW`+e9-M z2A4!2O~TIKX+AE->1>o0mpZmJjj=GO1qnXkd+KFy)|2KjpMl93a-(Q*OIqBUQKWer zr7G+}Ih0~QN2^Dh?#NB=)}>9+_#J&$i>g1fiXB=nQg|v`r#;PAl27s8+I8etx=QHX zt10z#w)4>bkuw%Iv`@w!EtP0$*Hs^|dVB~`S${VC5cm7USs~PgxTUNfPC-;(zKGr8 zE5=DHu)*w+C_CEca8Nvy*A=}P?`=`K6MtiZN#J7{|HTNjjKC`x=TF_D_6B5DsXa<% z^M~B$1Hvhe`=QWp)DQ$DIijtmlm`7N_1;=92k-tif?kut2yS{;<_vn`v%~EHdhImC z=8r;7W+OifrMUPW9J!04kF)DeO1FewiXiyKF9XIs2M1QHBdONot%u@H3&;>ERSPGzjdzQjY%mvBU%{y z9H{y)c1xYP_aS3`z~+9|fZ5$EYxOk?+Ca@|P6jB*k{Ic=}lX9Fq_!~Ge`-K4J8b>kXWT(cf@h_5U7%tM6%Ls(PYJODQ z{_>^iKyyWBtYm$1W8Mk3wD6|A2r84{toY8I)akU=@FwZ5UbjYRx=V$pY;!C3Kgf1E zRZPF+K`mz7kD3r0S$QYZR=O<}%8ch?y24s~CX$d%#Hr1P1<1LPxkEG6GZ|TzD^9;^0(!o~MIH^qZh6Bx{^Qqa2a}q; z@L>Km(FE8>%V4q(HP3`167B3)L!R$vo!K8>Y8Pi7mWtBfL)2n7nR$0qy_;iC+W{FX zRyFtg@v=CK`X@Ed`4^tx3#flh0T&2Uk>xrXbH^R6?UWAJc4rf^?ptgXGwn_<^g0Z! zIqbRq?bgujeYc(SL4!1IBb2e_uEI5!yn~PBdhpTT8<0g(z0;a!{KW~<`LBh%ewTM2 z$0m>D8Fc$a0O;v8eU{jbVU%Ij;l{8A*QldH_4EUZYwlZni6aZ&-a9j?c~LR3(M(w} zksBJTh;HomY~CgsvVf%(uSw14!`oR=e<(af_dy^p0*yv{l>y*49T3p@KuG{krOCSl zw6Yr?FPgsj2St<&UMg~8vh_MroBpw8(9T;Xy-$x6gNR7&4EG2m`TS89E+eZvEhGX} z>{b&8Bz=+QeitF|zvQ?_t3iDwmL6HF0GzOEQeB+>&rk3nlXJd9eTJl@NaN4P4PoTB z91O;Te{7ILrdM0SOV%hS5(c)Px5zk-t;b2ZFV~4^JC2=+?C=nr)*~URQ+1A(_xjN# z+rP6ove27B>pEr;w>98?aK&YBl9kSVsg=FgNp{vAl20VTwEm|^5sY7F{Q*1Unumhs zef6&YusJSSKZS-egxfI*YK>WP{M-9Bl}vxz-p4SFl zbob%W=byB$QJZ8#E(gPxN8Zr+aV~EUnBUAI`a150CL4tcCJmboxM=0A7CEC0idXxrv}pxdVyJ zCho*QrchzeY;GE)Fs>Is$hu&P{j(YoYF||e-QIM%0bwYGm|+C{U|$O~mz!6ykJ=jl zfT+dp{lSWEi%fV>YQ?0~{bA?xUt=W{5#&16aj;n)u8pJ=F@K{)3I9WL z4OV_5)i_|*W$L>+@<&-Luo*@<@W{VM1az0=piAQ*kh~wAXPCY;L%3L8@DIk0UvwbKp9}tC$gS^a8-|?VM@QNlc{Ha_(HQ%D~}x z;!5VL3gk*FXG!7z8>xbI5ok_8oK8}_j9(QEA;ixh-tTjF+WfwiYdP|<>pA=tR?z<| zR6!wbi_iO`5-OWKVnMx>ObadJ^7$_Z7~Cp$zH||A%)?fpds4W@!hI|xVDI2ZR59%z zr^l*i&;*&1w+k=7JhTnypfdMli{YJEMk2$2j-@D=OiVn>z3NaAM+s>U$d_2U=<`?|I+PLf}pB>wAbNW2hurNF`z z^5|c?%9og~;pq)k6P5S*IdbK+QW@cPaaxSi;8KSbunx_!by%FY7wekNxRHviha3tm zFiTSZ`rl=HC9Clg++}=AgdGXXO1$Q+`nLuqWDC zH|LQSefNBuwQ+%3dr2J#FM+@bD+>6#H3(*@kD`LVD*DSx&?7LfMa=2lI>d-x&%U$i zPg`9Jh%42}U;lLQ=%o^y9O$WInM%j2lt)HiFwER^@@CPWgq=pTkGD2 z+$d!1?$6xh9%+Y~_V85K-S%-QolAEtJennt=kJqJqjUGC>(`{~*UooHxit~drIxNQ zl|Jd`>$S-dLI>E#0px%-)sN0}?@2CTPkCxI+vhrQr}V5q-CyWYslH!88kM5;GHzrG zo*k+DIEu(zTW&I}$u@HW)Y!TRyqeZcDwnmN$f42bOB+5*rHqF?gx8*`Z&6)kx76Kc zo=!!}UwGv}EzcZooBWnUukGbOjtv1#F$cZjxs45{5RlPuP27VoMwokB|veR*(398R_oSFD%C{&_rq|6-Tm(7sN;^SGD#T<)~@BD(#e zZ%%AvvD<<}ptk$xd`YjrG3L!Kn{7mGH@n^|uM%huehk#;QhZD+|C`4?^IYN)wJril zu$tD+MXeR1#OYEA`@Nk~m&$pX+AGdXa$dYPRsaTVN<`T-l?I4gJY6G>zkuqZ9Xc~1 z?J%eB(2?uXioxosCoB9vr9v!Rd0@LxwB~N_%-oo+OEQO>^;P<`b@W%=UfMQVy_M~n zjqfi{X+KU|e+ork@|{CW_6~I?bTGN~xS2?SbTA><{nbC~V6VyGUg4v1UB-|?R*INe zC-ZAHR%3!Ov$z}rp-1R)hZ)(x%(#-(l2$E#bYM$8skrT^8VryqH1o5Afb$xkLWgEe zAfl4Xrq|XPZmzWJxNeQ=NHRCMsbJ7~wQn;wNqxL``aLQ;h)(DB1G^DZ3si?bBxWIBTx24{=8O+JWVyu4Tj6BMgYy<5O)gUEc9Z5j{+`gg zDgiknITuiwJfAI20bl+zJV8;a#qIyuJ!?W59LG{$UjKC&T~2EL`lwD*$wiH1bEjSH zov{bljN7~+;6F=)0lzO?bss?VhsM*P-zAO@ZB# zGtlnTNr?|zG3o}k>Jz5;QdE3+_r^_2`Bj(Nul z^!rV%5C|OToDNHx9Tx3s;Dn|hkfES4jIA_?V`<+HAX_m`#zOg}xO$HD!XSdt@?$(_4{Sng}Ig&Ltt~oW% zsUwWi5-XE56IKcT@G3fqtyFH6Zbr#X>zG#8e-Ig{tkdy=S_|Ubtpt0^KPGJ0$-OCT zP_cA@9|h^rxB(FZ|EEeTa;Yl(U_W&yt#qs89aq>)bx)x5V)NtZ-98G8&83xqM&kE4 z7pzaPiw2!l@*%`#p|sPwH?0p;p9GE?*xtuqN~HIHr}56+ZZAXfB*N4ONH+dhPJm4% zX31Zs?qV~01;YPPfgN=<<1CUL1uXGvHILm2=D1)7swM4FhIMd>C3#L1eT&$2$n%F+ z+oe&Rgy3&W7*YmjA8t5-h5$P`Oj|a*cMmesPcx&Q3{DMEN<_h#7?f-Fsfg3p} zXf?q$^r4c?E9j{z{}eMw1_1|lxph2F2J#l{a8jq2Jl7cFdV>EgMiQ@cTI)aD^bN1t8``B734aBTrAB)trkOHlxIeMmI5nfR;T6d>qB8oW zXIav&$J;3mWw+%_UcB|5cdWpb`_j4`B!i#nx2)xtDQXY_5cr#LA$ss`&*TW5PC+v> zS}ixG3fc!YhF?MI4oN9OqZnfjPE}CY3Lwoow3!@Wv${;u)WZ`kz~2h zH*Yz%oN<5Te!g6mVwvpF3e$kWT#2@%MeK?dhjirUg_c4^o#&~=Fa&r-=C8pXW(QEF zo<12$i)c+9kmH0oIVnRP`6WEjp7329{IX;*nYcU9zBgm8iBeC^J9Cr!O_!9U-D2&d zT+KJRUxbsm6C7`-Ewq@JlFF{BujS=cxGGnPJ4i*ep1CsYy0-glyVd>DMo3NW4Yz{r zd2rVBjrj%Lq?Mq%$+2{1F!$mT?LCXwC997MtkXfguD2WR&sBHet=j?=7@@p)@_4Qf zhItsl(Bjwgm$(e^{WiAB?do{Tv z?BUoi%(QKcYv=LrSzVf!dbbj?u-@@>-57HudkePsBW(~S-LqYA?rYU^72Tw#QRzQyVotvA@3@8NT$#E)kiVg(w_#ziG^%goaKA83y(wzK zCE9g^YD&eTDJl`fn^g|xj|<|mUx7*n;whZ)SP$~61g1PZ>7xq%y8z6Kkk}bg(du$9 zG&XReG)rWJ@bUW7FJ6oO+?msBh7PFGs2z&}p$)Oo1saRo1+lL7`AfDrPTg7Cj>B2E zVkkN6h(a87B;DUh#fW!G&28C!Sm<@3uT!~NazMLy~+X=>ziLzXnc3Vl)5T9W{bVyX$;da6f#YDfn6#mc(m|*VZ z@W8?Y@NWod7`{9LMK-jl<9$Hs;K+rUip~xDL7K0erKe2j(dO$IMR)(vt_2K5u-5cH zS&t- z{BFRX1|LD-2=w6!jr%$|@TH3aE|$vur1c1`Iw&U)O3UC~q}EU>J0(vd4o-|b++3^v zsL(NV;$U!>o*Jr(6|{INxJytiOV%Lv9^pEo9;Eo#S8NA$>?=kQ+0$UY6^78&_5e=1 zsX@!jXeH_GhNFIR!pM_RI<&a=L<6ptw=(ng>-8(}4g+&`TLF>CwuTL$#m7O__b)+0 z$?qXjq*;`N=p4ve6;`RAXpnie15v;1Rc~13b!!FdDwcPOkHY1A=0S}Xmsjg?eWQdUE-P1U=>9R9*Hk+P>j{C@#(f-=KW$5{~^%)?iXI^N%_F-N@W%?c0 z_zuz)t}T{=L|q`TUTcXmJ?Tw@Xz5@dT%#;g%;x}imoU27$fvUsDBOj#5?rHr+*ae>DcaF8AQ8X;lFsr{u%A) zOq2(`{-d>UAt7ay_@e@`=z?dipoVw5$Z7@V0iuwH*}lpZ6lgyvlqv zG@d9W?y~ORKi;1mX{?IjQ$o~_n=|$^CZgYz4)u_(e7S4W*NJ@9tGQTg?bA6k$-Fy^ zJNAk{&-u0x;wR%^i(FqoyX+H2JW|Z5Dkh>kE5m0WeXeYE_Zy-n*<@-UW}8#`+?fw2 zB5@d7g7uUE!!38JXcWXZSFzpU=;eY8aGZx5HtYneYu}G!FgtxL;JF1Fy*wn_n$obloJY`(!nnP0XT4suWhAwk~ zDxAw_Es38R+vl@WVZ46&kzrziFMIeR%ie$miX({?Jtm1V=yhrz!$rN6zQ3F$&mXDv zFKYdOe;qdW{i0~KXoyMhh0Ck+m2vv{Uk*8J)It@MhjpLMwYH50Xf{B#X^wFgr9#B+=8Lzcj!bI^e@GE{s7P0YOWjo~tJm$tU^*-@DG=i`PSo~r~ia4O7>16lx@5(!LT<6lt7cYyKi-L`7;wxhwp** zWT11`+^s1Q1)P+}3q-x75Kka?;XZ)oqXA*yF%k1Gdsl|-U>|`tXbJOMXC~lM{A4&9 z4%#jPU>kC3q-H+(5Wr5raJdI_0n`6!B7$i71L!lTcj=cRs2>#6rcu#->ygv4?FAyp z2KI4iFmITjkTq{G92o5Jw*rf-z%XC0%sbsYGJWiO50OdK@P^w%5Sq=Ok|ivSuwz^w z$@T|upCS(O`t-JfA*COl2kQmBEkjSSszhsrOX?7zLtkG^Oi)e{RW5L=I1T;!#|bu$ zR~$)UQwF#Ej?3Yo{;Is6NI&@bTeS8;u&8b_e5=mGm@H8mf0t}L@)F&)z~IW{e5qfE z2GF*|({l=Y-oTc(5&wS8rSOq~lSgaa{ej!*{UjCC(;jV*7nqZ$DgqrmMmTU~Kq_H~ z>3YpN>evMyf#?qp#UGPRd$AqVKbS$&eT4s&eM0~4Rgv)Yn>-`r&^rx5V$gq>9AqkQ z{8EH?Tof6Zl8y6SJz)nMcHWhCw8praTi^8VrNbswZ{Q8`n95fx^Uh3bG{2HSdWD${ zx-23PBpYOO!l@9|f(s0FCuC@5q0Pb_Wla3EP5)ZMLFy9>f@n z(!NZ(EnQOIB@rcf3JrS^2oY5};rw?PgABHrl?Q_kBnG`R>p1-|AF^f9OpX89CCjoK zQRw9*&*L?cr8AKFCP(JZh-ZQ&=gY0EBC?k?%NscM;TAMRKh=-s4RYT(v*ZI~k;D_^ zK6*_QYH?BrNWV{$aE7!gL`Ry|yAauMPHdK{5z2ruM%Yigy11t%H8%7aJg0z0%1`ytMm8Zz(FQF z2SiHp_yZ>!K0C(fKrU(K_Ql$F%sIW;Qn`KBYpV`AEGY3VZFJ|J2Y_YTaJK=~H8ufS z-2}CMo4nN_xpvix)6<`!D=U!2EN_8~*a#aq8XP!7ZPOX4ovUL@GH zfR?BhX$GMne+J{2%24Yie-|!2q3!5TIh$0{)X(slqvvWngfJ^G?LIxdn!O$@o#37( zv+w5V3~ldi=Sf2pF_L+2JMm*kO9^Y@{cHLoL8giN3Qz@rm|x3X0&s)KHIvl z1Tq(h)&8>!PA3p~*Dy`Fsu7wZ=@TToeMH98cZ}1k{tJT`56|2&2S&xkO-==*Au7`% zzVFiP^;U=}W+Ym9f+Bz*o&S;r_PhgE^mZ<#L5*Wmwlx>KoSL#3-I;w#-f<$z^8our z)zU{I`m0QVqfWnryp1cZTh6At>0PpCyhGznKF-HjBWOJ9X!umY!$L6LC3Mhqq0_BG zqAI%^9(ZZ41A)T})_3BQtKo+d>kh(lbE`awGO^A0-6&zQii96H33t`aD;6jOZeKf_lE|r2NScMUZ z2Fa4_B=D^caV#aOO*~_<=#y~PxL|b-mJ!xM`h4(-7BXijsxP=V-lRDk(@krE};>!?g-$c~QONc?4%TAElI?}xf zpT3so$ly?p#d6>gz_t0jq9t&F1Tj6NNfri(HhC>yj8zk{TrY511t4=x0S)Uv1bVLG z&p+p>1WtC0HM_woiI+st=!)HqaM%qv^V@YAmYph(ov+HOX57oysjk|DQMTe_eU04~ z_@lyNsUOSnhvb_(Ei!4qq?zC!n_-s|&J->f&UreO`J2Ne@#nX@#nvdP1VSca0aaMR ziqMoer<1Y-edD2-{Ib@KR1It>r}S^2 z$0E7zS>Y3?v?8Z)$o^7XA>$S>6*fno3Y#$1zs#K^=yP(N%7`rkN#4PH7}aSF9H_to zCKiZ#Xnlj~`bE#Bl)!BncK{ma0#ZgwVQE6uZUHfpdnY_V@7gWG)ojqbbTbx_5@JgwIRT8Jmh63-^R5TSrp$$Y*AI9+sTHA*}$#cU`@g z(3+nUT!1xWnwD`hCN3`K3$|7Cq*aAe+nIg&wTme1kNT0SUU~v!w-nRI6DP1thvjl_r zC{RTt(6yI6a!?4T?nsI9tlkygZ0*c=OZYPnH*glG&e-$th2G+I0@8!}lZSv9!xeA}xJ-~EavK8aLG{8w8~jZb0mK>F zU79Zhy8d1oHX10&+SM0d0sU){Ex-0wF|NzQbj~8f1kx0MrRslGq^>M6Zn)7;4T^qS)b6d^} z7(ZRil2z*u^qle0bu0_|9N(IOe?Lg*^CJ&lG(K*;Gc3AmwM@C4!N4eRv%vsX=3ny4(p_SX(7QAirBmnr_;8YrNY!6$JZZ-_j&!? zO22JMh#V_n0?V>1+>H)7r0_$SOvR{`;mPK1l%)NdS8!LRKF?g8IFG@=e9p?wn2Mpf zu!=&6!Lz<;$sbxDB_R5ErzCm9ZOLu{zzVH5W+|IO3*81W;2Y+@zH*^t-UUAv{l2zdyI=hVO7omzmVhY()5r||;6^vz zTbG=))zHR3Cy2dHUVt$U3dwvwn?861xP|SH zz)f_q7bG<2$`QT5e~kr*`TB|k0*3su>z7P{Z%_RuxM07zznK3CuE+x*-=8uGyu|$9 zBucdQDS+`mCFdC0uH-kF{(qcQ9KB`T(@vH*`wLyP_GC*Yftm#mA7{VUK%|`Oe+(9@ z0LAiLw*J+$qq34s3Yi=8i5EprO*AEqCwEelL{JN`^yI3SAlw@RKuSZnHQH{I5eQ+q z5};_YoC)x9oxs@`-Fbm4>MR7^c|fGZkoPW~W9f@^6<}v!*}~*>(xp9|xWb(=Pc1%l zD!aEjf$#TyyIuq$k<-T=Z5EHC?ea22Yr*Hgnp&zj)6@LiCZ8pBYU)!vS+bhD%YGAB zlS#0W+VG1?uURnX^2hs0ap6h`W$0Tl&Z{qK3b^Hu#~rm6zJlz@N+RvuSlB}bDe~ZsE+fNP1si49~9V6wiLRPT$ z6=BjtNov4o%`~{Vr1^ekP>p~%;yI>G}(cjF=0w2ps3v-z2?saiK5U$ zgA&D|J5p;DY>y4PcM|>u5*_KWpl+d*9w8U7e3+#k#jT4 zP3$d(WnuzCTL>OU`63^$S$8Y_&eB@t^pk`&>p;)Ao9Ql0{p}Z(LEtO+YEGQO?}LK> zJ};vla&;dV#9k5S?h2Dc-OG7$Mr2xa%X85!hnbbu+tr;pPrdmf@77pC#oRNuLA_e| zb>3g_hMSR9pts&5eo&5aK)KIY7R#Z@CxDCk(Xi1Mf`yH!5vUnO|E@sD$e)kYPRD`f z4#x$ga|T|niLZk9f*$CjYnUgBQfmJ7dR(3!3z`dn_Nl{~ppfK(+mV^8%d>?3oDIwl zI^;r;|6n`e-P4mHQ+*-S2VJrW{|Ok(ZP zC^*S~HUgxb{aBg-C}qTOj<_T?b&OgB*bQ_VQjB=_a{Z(S-)eB*GM&sYalQ)jQo&F} z!>`b>rGR6z6GhcggAaGxfwv+s!KrRqGxeXr&!J(ky;_>h9S-8sJ1Of@vf>g5Q5*G!$~oe?zdO{aQlas>f2X)i$f zmEtBw)6?e%BSug)Y-Fwpc?A<9wXKUS_10R@+s@&k$yS?%0O+fccAV`L3YeNnf)LG;*fLz7-HU z%4d8BboJ&Ddrq>E7(5wk+drSYx)eKNoD{kiH8+3L;&d2A0_)g6H%m;fs1P7SpDClV zQSAEewg}E(q}hBoNJ0ngaK7r(=q5GfesQ4m;*(`+t+)Gnt;Ot(cy~@w9paCHm3gKm z&lEn}K#I_`;QnYC!@BY9&WOKAdu$FvabCv!z@!x#&NURClu*GH1V1o`ni>9R& z_Aez9u=vs5lu}%U!6wIS8Ezs0MNb~#n@y8Q`BpX8E8EtQiCOycF=)uYt&Nmm5vtWY z$Dm9tE=;5^((TRWNpBf76WGgpD)&^#g=Xv0Q0#?Nymp}s(;aV*3?7{y(eU9?JJS1e zZ0o3IkD}w6T$LcQX=>mS8sJBnmD|kz3x}ZUmevA(2PZfJbPG=$esbOojS99W-t!#= zT{`KNM&Sf8o9geq*jyXb#WMZie!9AALL@wt*x}9n){&MH5E_J-($+WjtHq>(;uOY~go?q$Aj5V=B+fg58BSOdafh#P&)s1S8 z?m}V+S}jAZ$K4?=4dYu~qH^z_0^SI+#l2)oTs+yf5AwnSORhMUXyfRQl;%v!4(6)z z_rSF}ZZ!LYY!u&YcOTLXi?|lmrJRAVX=;Cem%}z2#N*Rj-+ESmuGGCmZ?vdwaPogG z;dJv{b4r*Vjgv5S**YbP_TnVcqCv_Xy|u8QwR3Tp>SD1E*ab*b6J={F*R0E4v+k~e zk2s{LU#8SN+3w3r*ZZ|!S?hHnILNN30R+h zns9}j7h7V|N>q!MOW@T+f4;F53rR z(H=h4rVvM;JO?vY@TEo##P3kI`y*o2g%0CE3DErlsBcKg{FB2Wi8`m7gt44iBy_!a z2wsPx9fa?Y71|fm|3^uW8|@qsy9DBDnV~Zvy-t2CP5xq&grNuV+8bNkMdn_d^(SkT|^*c$&`^p!$s5(?m9HW#{{R+wh*bn>g z{-w%8hMlYkx<#}I^+~96hjcmT<0zi7+NN->pP_xO&*fW10kS8k#;~V{K|xIo-4t=0 zaoRscE#95USVI! zvlSxEOAPJ42urcrCWmn^qk5)E2tUfHnhl+){6VF7RMhlX^TxCYy<5Q@bY$w4ebyTa6GAb;=qr5^m^3594-g8FO#NLl+SMW;V?Fr0 zNdZ=tBc~;zd?{y1LlW!8lC)gn!W2NyQ`mL>;Cl$pk9#?HE|NcS;5Nkg>!oi?kETWy z&EISu(=o+}&pqV|5Pd_W(Ab>Pa0dhD5D*Of(O+5Z_;|+ZnJ2tkTpWaV;1t7j*M(OM|eOlkY|kqA zjW7_W?oj`8V&O1Hu90Uf=Y=5n#%%82@Le8i)8|CWF3KJ`YYQ%|la)Yo;+!Y-YOeF2Uanc!1RBpR zOT^EWKo~G54)lQdg}eZ2u%_h5;>s8CsZHf#A*GNDtsjV2l2t!F%=u-~mdhktEq?a*9mtsu4a6Yokhy z@;`H>=#yT8ilzDN{33VurjWitXS9?vgmnIP>`!r}WmZaTc)tp{Ea=QW7V2$xZ-ig(u~yxz@4)qdk| z>|t|3I=T3Pg;iP6zNCuGvBGVkyY`LuwTU=Z1lhAI@FDF<5Bql7_zZIg&YK93@2^>> z1KF*^|A5hQ|HaDw1n+=_c$haj&>{s?D1cTb5}OM;?^>MLths`Fxj;h3cBt|4C;I{@TAGpr7X9*lSBrd(U$_Kn^W6c>hzjDP+)h zT&K~qoQM|7_*fJ4P8-%7PpW~?JzWzxWzXXjnpbN<{se%|JSTuhh~Q=L?~7!m1Bd#( zvOGw(`0s$=r_TmF3dob#pA2H!5bhTQSv5WXo9pxpbWmG{=Ror;!*uX(@KP3@|KPiW zRSL~+DooZaln;>s?gw-XylOhh2Q|*g0z&_H@3XZ`fQQaGaMk<&kmY~)h>$F+fkrUa zQYOG>T{%|js`x=D>=O8Ck6~F1uvbps%$$#j?vLRe8Su=0i9hgyfzJUN6;Q}<@B2K` zDdK*)JX=uz>GGJaILrS4v=D#sTq|%+@2tQ%4V6almXCvvKz^ z`Br}`NT??kVF5C*0J6;s5CH#_=TR+t#Q!D$=fObv<}i^kc19tmBbqR+9cE6cC?;a< zKbR$ZPt6?uYMV7r+T>*anMDb?TwSR4!zXKwyLmQpzU7nO%o&u!2kn@roqFAHQpogL rj-%x!BTH%s*O$t9u-kSCd$Mu!pFQvF2f?eO|8>O3{9pmv`P%;g79wnJ literal 0 HcmV?d00001