From a2234d18a637fd56c6ddbe0a99bf98cb604d0b3b Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Thu, 2 Jun 2016 00:41:28 -0700 Subject: [PATCH 1/3] new procedures document --- targets/DOCS/oai_L1_L2_procedures.pdf | Bin 1696869 -> 1652669 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/targets/DOCS/oai_L1_L2_procedures.pdf b/targets/DOCS/oai_L1_L2_procedures.pdf index e14948f5af9195b59e06b4b4aefafa065756d09f..0f47195db1c70b27f17b907a3b95174d45e4f292 100755 GIT binary patch delta 110207 zcmV(1ZaOl59obZ9alHZm|Ym+>wE6aqIfmyz@VD1Ve|*EWbC zAs`(R1Co+MN=SEi*8l?y4l^(_G)M~)lA@%fz)*sq2&kllq;z*E4U!Vy80Vb#y#K$} z_pMp$nS1wr?S1W=okh=(Pu>x34_1N0P<%jsK}mq3wgFHOASfuzFDNKP$j)vAK|#TP z)P(FNU<48Zhe`g2gCYV9LVsa&N+1-*Pa6&cXm~;aKw$t-OcE$ADJTdK5)_p9%Mp%{ z1So;LAdUcSet-rX21XLHE5hA<5fEn=6sF8yM*x=tHvlLhALk?4apBjILmPJ0)MMYM7zsvr zfgJ%q0RwbEZs6a@_zBqoMlKNKZ@nSh3FQq!fB_f<6ygAeAu$o2Fh?)~fGG|zRM!IN zx`ScAowa^D@B;qy1_0y-{+;em^v^^P*soxag9F^n9R%}*z?=b25GWX+tD?n^@PmlH zFe<`-bk1NDKvYmrP+US70QLZYeH>f_ex^6_bqD`40)MJ82!8_o-Qn&4CkzO1AjAob z`6Kj4g1o>06v7i6=>MOFe@lcwAixpgfCAWqogpy7f3joLV5i?QX7~t*55Q6o!#yBC z@aOOElQo83j&K;%_aFCP^A*t4F*7sJ=lPBJZ<~Sw+y~&#Cn5;o6A~2!0DqE99CHZ# zcbdN&@E7=BT7Nwd{)BcnRZ2@a6>jRDiVzi@c{p#|5UmEi{byMhiJ!(}jl>mTY{ z35p6jU_QYA^8)+|`Tz0$XO{ns`u}|)6;CMimznFA{r@q8+#pcjKMoiwd!jIFp$*3@ z2kgIHO~JocSsUyK@pSudt2zpVSr2)bGxYB^LXavDAAhi;9t7p!@|#0{O#zc03W0(3 z;7G{N#|FTM8Q6c>Fbn7K0P~_+fAqCIo8HQ>S{z$D}W&VM`Xj~eVb9-j9|^ztZ9yxUZLUbmyC zdLE6g=&x3aX%d~IzwpHw$6AFH4YTLkXN}OZ;-UB$@$ZuF`j8GE9u1Md=)YptNaP_5 z+>8@0^tYH7dU87AH&bRLglwW?qqCr8#5pAI8RYO+SWnfU8S^hLoc=WK^G>>u`2{iW zvwvy6Tm0)n8I=%&7}(p^DzBc255VP|r+{$I+n*?wldDSJQraR|b*U;FY-1=;Rl*Oz zjO!nq6lNNaOq!ispD|2Ie0hBZ7$!D%*$A#{_Wx1iG1JxkiSPK)v-*>+x7|z4fu=>W z?XnEc-oU%cE|$^LQ<52s&v4PG-fK;!V1ISWTfCEAPw$=Mf+D2-L-!QU=z)s`f`S(J za9go^7`8=o0`{H+me=m;e3&058-se2TZdhRiRoO~e|)yPTR`U`tZbM0h$}Zkx%qMK zY&@sFR5iGEI1DYYJ6}%CuTg#$ckt>C;m1!kIa%RmekmHJY65y6BfBcg7rFcfSH@RewE8c_Qx6`BPmLZkwqbb=eV}pcRLRd6amf7iK z-r`vtK(Dm3@G%3m2+9b`6R2zILYQO2jodKNGthq zC)%nNHTtkLP-rZUR)2B41b?wA!aE@*1FZv18zZA?Be#0|@zf1!BHNxET+62)4(|ErNs9nS7!U5F`cKrbCVxqZrNq+S)deCn zJ%L|^f212LV&Ov4scY0w<<)~jfk(cyOrw_%9hlgy<~(+St?KJnMRY~HSS&MakJan* zUhTZDJg54!>JUROILBDJudQ*a{lZ+ZtS8>fUu=#xWz_1V6>tsl!lNslRhaJnF-}UB z(HC<~{%K9xZ(ZEYyni&R-J1TOC`Ahe)$I3#OpLx$TqMz&oR3hpc>#?yx ze|$YFtK&OSNcUBYxK~i@p{4^YL^MM(fZAL zCZ**>4vXDQZ@BxCxV?qAbnr^zV_)%{Y+Jr&3bg|_?dSgE1%Inu=NG7Q4%w2WC;e^T zf57mJHoV^_uQsyfIOvZ6_BbdFd{NrF3mG{Ezf{-;F-8u)Tu)UB~clk`}xt^=w zwylCkBUuY1!G9l5b;K{}^c6b}ZJL|~Fscw2htq1oL=E@7IZF68hF(=>tNNW3OMIif z-^rP@%++(zsDAFEb5=9zzpP6RAbAeN(eiQ_aihY8)V^%u=w#L2{N~ms_ttdeQ8{fv zx!bfoyWqrg+`DIX=^HoNa+Bwh1)L6Bv!L(U^^}EjC4ZSrSPX1FjFyd+lq7_8@5;rILv#^Fh1&22_BT+6nmyVvaHFM~7# z;MzpC6r)4WOv&ah84}+U`z~v*Ux@{m=2Y3dKL(+)nepXxfg8C3Sy(E2%qee#eVOj0 zEjf^CYk!XosJ2^N%vj>Mm0i{Q^~b6N;SrES(Wj-XEgCWv;OpZi3h|~241sGV+zHpG z4LheGbiBDcA+tq02ISOr)P?UGRN^{t(C_uK_}AZST^|hgIl2Cl*4DDm%p{78rsLqd zeoiH^k>1szS6I#|A-J12$^CMYJ`54$l6+Q|?0-qUmk=In#{>1J$3F(^ACD&3$~n=9 z3Dc|1>4Cfk{pgH)scc`p=%xH*Q3_y=D8l*0eXINPa;z%zXPPP}M!EJso+o}V z34eJ4<$^j_G-plPe<_cfVX0e3kED)#wpzG21&QbbXTaH_G$Z3M5Avw6gu^te=qWq7g*Vg?Z>OFCC>1G1{u)5^U;PkV}qa z`Elpl3oxjdFLtB`LA;7??Y^`o!ODhSZ-0UA6M1>sZm&nlL9<_=c^qrCC*~_-HJlTD zSf-N$D`6Z>d4eIDfJ-{6bO8tfWa5h_fqgc8iz4B@jy6AewZf4X!q|kq{QH(UKJON1 zP(XRla&*>BclmyPOObrTaUpx}6dnfvs-$3B2TV`v!l2YsJww#an#RKPaJf{9M}OSi zs=(Waj@*1vmC$BJRJo#edOewnoZ*G-^t)8m+T(@YufbeQ@;9MxDF(NJcGLGf`42pK zwwESY&kkgyc6o#Rx@rd53E>Tub2&aZor2Gip=6_-bmXQ$6`%g?;q_;80Ow1$#JE}? z6W_zyNwUE#R_i-{4{4tjxqIz56MtthK1xhG8gDP=M<_@O)n*+YgOZk6_xEGOupv1%)jqyW2e$j?o%m*>wmp(TO1?{ z3t~ejyk{L07H&M&lNgiOw1`7WL}GK=EtNA7Zz3j5PbGCy3O75ELx&wHZ<*!roWgEq z+Ax~VL~sa+c$1ev{fJiChJ{RbD5||@B0g>EO4wiJudwRAd_mFOYub8Oh1_~Z;H8}} zI#$1mAgU|HO8;rgZI!#|X@7_j^-674erV&!LSkCHN z8EgxExjs_$iFp)z{_<67W|L(xw|E=Jhw~hlK3LYxD!Q-coWoO~mVY-!t$Unih@j!Q zGy#|`>?w|hRxULWK3A$7Vf9+h=Ye#>@>(56e@&Izxv5>72O0LWEwFD7skiL3D)X)J zr$7b9x!CX8{m-Mwy%u-0=BDdc^F)%r1D~@6Q6SvpueOm-DO)}r?87YPaPFox+%Gxq zMjr0MGbrul{1bggiGT1}6cw3c{AnEU`Avf?-fZqLtqRh>i019xBb1Z zdJQ+?<6Zl9(0Di&*=mLj%4fMpH&Wn6m^u|n>+C(ja)S{6M1Oomg}_|S*Upg)FK6N zwxi!TbA2!Ip?}inB|*tpRxIA@O;$y=*M&$j8?Z@Oi&1h!ow@l|a6@Y8qP@Dly0#pd z7RP9{87SB=8YqCEA2)nn+vbd!XGvCzY8O>rpIhCYqTGqTLGh%aoV50KQ1K4|*Mf-o z_K94Uz*)PL?F}UkQ-Q$suYoW z%l7*wY&xU`pZJ6B`4UQA2bWKa7?v9IOcvL6mfFTPV#=8^srF$u^{05LI6J0S16#$K z3X!wBV&Jwn&C|@4iFJfBDeKUW`tFI3=u7j0hPay^y~#SQE!-D~le%F@$9dD{-J#?% z>bgditAE@#N}tl#Vai;Bs@+n3^;A>(9@n0fbfi2m;(WK8eM>4^I>F;MY<$@>1O?Sn z1SXrc0YrQ0pAmW_jLl_H*T#(^K(+tymY z7voVH0|r?>rhlj%pseT9i0b?e)~hIqhZ zz@3AkdNLQ19!vd4S}tgFzLn62hKNgFkSIV~&s?=+WI&2Z;(8o|_4SfL8gne_mUWBG0bdcYJ3rRepLIm&b+NQ&W0#>c#Pe(w}VCP!%mE@+7*6R?-OR* z(>F0v>yg!c`$36|8g*W|B-J6-({~8jCT^ffr#KZ|WJ5&Lq{9tqFBluPKEG<-lYdJt zr_CZr2bI+X^HHYB2RTGP`U-`cV%KPM?Z@LGu-+EknX(%jfSLQdPT2_uK(Bc*R@l{Z zszY-wg66AOR%*_34~O(xx;On(^6-=^pYPo7a|f;45QU7pZ0J6~vCDe9ow4M8a(1)) zo~Q3L8)83o=HRI(p;MrPM=OtLvw!bHmWvtdk*u@ZCrz6q#=Pa&A5b~ms}M=G{hSZF z5p7dk6}DjAkgtp?CLb<62Jon5$~@QS+xS!^qZans{KB#$GSn=r*yD}2yvCcbn1~1b zmTYL}KP$xfvIpxJE!MpezE4|WwlOc;=tilLbVAKHBpiOs2w56albcQmaewL$yLeD% zz`v1kc;Uqv+~LMg&e?0Y)S}eTGXeEIXQmZTrp~)*emJW5y1d=(Ypuxu$Th)vk zC$$s6mp@2R0c3cNcu8h@@Yt0O#icQ(I}n3@FNR~&D-Q3_qC-72oFV=(51zq(ni~SOo!$qD~_=an=5}HYL z;bd(_nk67JwqTp{gch4*zIkBY~R5jcA(u{@|T^&(Uz5c(YNfreCScm&TsLiZ^qpOG2OnI>$eKo z*8+vpkO#VUzgp{(`+t!iy%N|S|sY90y zTsynlc&*d<=t@M^Ovt(=L8MqMy*DpoY(L$mdB8&p46n|7ZoGBy@aA!0Qqq99%qI7z zf`c?QSVH!-`r>kVan`T?N{VK_H{%;E`O#`j0cQvLA#Yvhb&6z6k8P;)kT&IW`IlfHDuWQ`oDP4{F z_^tt;e3JbBVX98<3Y(Z$wIRKcIoaboQ?wOY&#pxJiniBeGqCzOk2a56PlHrw98FZU zMtOPGsF74kuEz4Zt{yIc=eJChG)4lR)z_Pm1`ZY}BBDEKJ{fh&cdipT(Oz78 zo}ZMW7bt}r%{tVmc{FsVFVQIHEs4tUnbjKo#j(wBG7cj>4v|zEK~umt1AvlMTPU%b z=djq7et-MLz;n(lec?`fDW5xaPnd-dm<@X*(XRGnTT|?HD2>D$0y5pXx>wtoj0lt2 zkQO>0>sRma8fCZ_cV0BtS_eb3PH{xxA8uK$F77B@2d^> zeji|Nk~Natk{egqp;^aGE96c0`7&%8?q6-V#$MvSLmPUzBVdF`^PkUXS%PN^pI6V^u5r=wn#ogS>2~qb*L(h#1Gta!a zD|VeJqCZo43`@>Cy51>#S2;};<#NNLgQzgG5eX;edncDfsEMO09>2s|9-u!Ed2JPa zwgRx&_d^Cmga+ofX^qqvQbZR@20Nig+&o_wy6 zX*K!FiVvJN~)?DJIwTRIKX3WlN*k50mxUw>oA zp|e?AN82)AJFgpkZJb%Qu`e-g$H$xEs=mtxi1o%RJ6Y$ZijGZQim;*7VL_C)n)?+> z7e3;kK|GU^cT`urZ6^>F5=hAB3cwcgv-%9(C+)e2&eRm4zuOz4$wxOfV_Imqq8HO! zA&*w&3~Qrqn?9p?J@BPRc}Hk`Kz~h7yqTtwY0G@sw2QA=rKjAcAyT1H%zNIgJ@1$_ zSDE_*_37H4s%UuqIv#Pwm)KcHdfqdlo~KKf#cKQYL5}GseuXAqw!)VYQc|T+ns4yL zctc_%Beqnk0oEBB+(N3(+1DM9v-HiBye0{GV5I> z__)I!##y0JX2~sS=@j7uO2;%-#D|Z6_;ooO=h`jW^VuEQ@Q9b?ko1eSl6sYIBz;~$ zJKq}G;ZT{~FOq<)$h)9|OTX$ilO%A}Fu2BN!YUhuHCAN9O*~|($aT3r9{Wd`=7c=6 z?CAFb(UgelSoAKX(~7R*JWvsKIJA zeVnJG%htu;u6|wn`DIe6G-xXrxmyoRYyU_h`?FGra){zbQkj3(-VW_Av~u`S8D zYX&DzE#pgr)szoKoDW>cP{El2#`$F0d9NHTENUqziI)=M)PG_j;fdJhfmScf zsuu7*Hb$K&DAwzu^%ar z<(_`Ftv>S;&d{X+7k;3Eg)xE#EJ3is;*K!iBVHNXzV5YqY_HMH5#sja)%)rFfFi4; zQ2Jf=NOw7=8Y6OQd4E9n%4gj^+BeVTd2GqFSF@N07dKZF_&>p07F}j0zlq&@8iz|J zfd{WDVk`E`x0L9@!uEVA25H7_{&l~>kgJ4)hP$w3B ztP`pAntDvY$YyUnS6El$^AnxhQ0CQiJJ0_C!W#1clY?VF3QJB{SW;0dLrqebpeg|v zljLJ;4Q6k3axZUgWiN1Sb#s$mWKaZ4PFPrzvScCwGLzM0HIoKqJ`prA3NK7$ZfA68 zG9WQ9GC4Ju@h$-s1Ti!*Ig{~3BY(FAP#oA6Es6%W1lK0GySux)(?Dav-66OIcL{F6 zJy>v;;O_435O`!}?#$f#f7N@{Ro!Q8-)FCVs+x>gQH4&(#MTHTZfoO2$3)M_4G@u& zlVSrfGP2M!GBU%Hk*QiZS%Ll%!;`6l92_ldZMgqsAmRW5I=#t6flhCBa(}iq0BL6{ z022#tsUuY9nAQtXaTMkPJiYAWsoDt!3AUj_}wr-9%v2vvom^lGJvYNh2x)c6f(mT01(E@-rCch1VR*trB{(nFhpoJCC=*{4d z%7FlJAteCtt--(Ab2N6auyb;xceJqj-6F&9FmJakW@92^Yi$j(adL$JU7x6h1IYO8 z+T9ucoa`qXTUQ&;zksQQjfv^+CQO{|7}RVm?43bUqJNpZiQxZ{nSq=DY>b>7ES!u0 zkUaq8W^B&zJG`p99e?N#CDU*5TL<2rcD8l^)3+u--WH~yw;y;T|4;9KNELw= zf7QnLPe3UfQ(FKNdWlUrhhc z3-E`_{~zyvNBO@||9=Y-ceb+nLrwXI{{N!}T3cAT|7Gw-WoM_iwUD!YTMnE5HPrz9 zxyo`N6ANeS|9{m=IRW3+L&(PLjpB4ntn`emf66T!#Vy=GCW;nL#^!$#=|8i0%VA|< z15&hgwD|qvym>J){*Uf$>x@6Wy(*4x6Z=yIbbMPur$2`K8-w1K?7!;}voW?c`Mr(I zZ0rD_g9FeV{*4fChz;P$^tQGpAh$pG4q%|Sv2}WL0e`&p>fBjx>4?Pl&4`R*W?yf? zr{g{E@ITI?d7I{wB}Xq7=a3F+mH*LE zRh%J|IolPS`R^I z#D8aL7yq4e(qJbvF`fZ@QC65r_2pdT=d2=^qqO&)MiL(ck4$2YveD@w=a+M zh^g&+zBXd_z#bRKO2ql3JqMECzCZk86;YyD+b#D8j|F8tjXsIF7NUSJvl;YcNORu zJEfPi8yyEG@4CsQ04ViKC9IUloZH(C5~69XngJKN*|K%AeLJ~mB;ryB{y@^I))~!9 zLPn++wlJ>_u$-aE%~K(3aI0 zUv8i_mUt@mVdm$|G5;^MX+A@IzP}r-tyeSuA+FDrrK}ayJMF<74UN+j&ZnApf*%5GBd(3;s<4xmO2f#{2I zohz&i(G6qRhdyTCsTY{n*MELa52#4IeY^aTj*pFEd)S-%&y;X#Myp0*saW@0J3rMU zuoZr`GUH)}Vp_&&28xrNUcb=Gdf^%$cxV*72cc5^B7<{}c&C3io8qK}z&DAkF5rQN zBpx%`+tT$xRPnw$P^?0hGoP?c_5zbq%oI>=_@##<4jluaVyven>VF{dj4dl9xCaes z97Z>WFVBMnr#TLU<5KA9mY20IU?ZWq(3+x3=XbR#d9n&Vz78yC82`RTWft|h9&Qqv z|Go`jlsYwBx{cWWa{Co6PqET3$FTlx?;u`35K%-5{0V7uv1|0F_Z~Ko?HdskE!{=q zY7bBIFFewM7?H)^?tjOw)4X|S4Ly5$X+LnYLNaxo4KQNjQ1F3jvP?`>J=0+@AUsu( zKkC*?!6X8c4Qx^CocI+`)Ub*dBM`lV0S|(5;Jj=>{2oun1tyVYLIfdrKH$YTJg5=# zt9QlY2{$dcY4u|%>o5QGkLbb0oQRe4kop*=$6%c>^V@lK8h?(7Uq36vjUFp~?J2A~ z>}3SIY1HW>6Vc`gJ3lPE_#Wcw_b!Mwo7WmTx17ou#?0McSfw8+aXt;qJ{gMp80(}W zRiW&9R*8$=Fe{d9V_1MZ+>bnULu_VT-$k+ol0(5rTkF#*_D~J;FrSjvNEF%pg^C@m zJW4_DdWNg}xqny59T%zrZKip!_e>7S?KhGEjT4Uh+n3#1my72yiuL9d$Ju&^u7H-3 zxmUWEiwDElR@^|ZA+l<0FFcH2-I;k|)Es1Ae%f(;3UzhF(-BhDe3Zv7;8`Ib_*B67 z%1K4AQ&qgcq5=^nTEGS;RXX2Ac-Z%4e=9`4DHkiFCx4*7Z@r%#50+ApRSH$jDVGmA zsuo2(#5Rn&F@;z#U@%NaA~+6K3+!f#QS2i;*`}>@?yYYlhzWz>ep<+=4S9I|PV9R* zM^6Bp9pME;iQ4jKKaD$iC@K$Jn#0=}^3)H>p_)d>@?Fhgo%;7Bt$rDP(Q&mcwPi!I zb}PhPMt>yq?W)y512>40>69~IB0q0NC*T-tU}1I*8$KJi7IE$`ME9Kv*fW`o0%Q@2 z6RRBF;Q17U>^`(o>E zV((4YDAY`x>VoiXRaP9NQY28*G5g`T0t>%OdVec$+N~(Li;c$YN_Mt{n*(PK723L<= zKz|o$sph3CF-*=)W*Mys6u!?0Dk>6TiOig8={Z%oP29ocx553P5nFlzR-MvRgHOEq z$WT|g_s~Me`QC7JDt83BU5PtqA9*$_*R%ITn^;um9HHwWxmJBa`htVKZ>kE&-*7#e zR2cNq;9yEH1OP&xbPvJAymL8XDCM~RLVxcM)3zbbnXt&KgC1H&crcY&X@MyT6|LvN zDHBF~gLCkCTlQu?0YY--p1XA>wS234n zT1Kq~N+M1%OYx?QNM+&S;M}TCqBpf-kiOAp7$QJ-iz<5K1JOXgH-NxCC4!M zh@^&qrM015(>aqAr91$OIO%tg$vcAV*L4=rzF-KROa5}=h;~-j;43Vn=6@05=$@l9 zr0Rx(I60CH1=duXnS%dGjrteayNMch?8mg-d34@6obW*ZVIiwAqoz1kUlwmgZ9zAC zp0?N>6`h%=b2h@ZQKyV9Iq9ja$m6-$fe*>*=J2wR1raPxV||)a;D!~F#(DAKVR-c! zKOkDf@bL0$8g|1Q2#$gt^nZC{(j!ba0ZkYFewg?aS*Uk#yvwNYDl@|8_9O7x_pHkV z*pAV9v(##i`+*y;lQi?F{^5lAzW&&q+Vsi8eQrKU*ltLcMB2DUb zx{u(5;cYT+h3sqe2Y)cnvzo;wZlDl)hBPKw=hcuzt4wSNY(}e{SjH78_LCu|$8IJk z84>yoi^{DE zeK!4b;;1l?lph0*H_6Q1v(5#p!BF)SqKD|EN4K+izg)cviGNvOn1Dj`9QcU20Za)I z%EPHvmxpR5hD%b&g2*F}EZtU|FfB5^p_Ecpm&Oln1c~eI{V?DW zEF;NN`+~rxe}AH?TAxmqJ)iS^cuKuX!DOLcAF~?~`~zr^5Yo??C-0;qI3#rD1|eQ$ z{G;dC#t-(?2=b2|&grwCwnc>%HM25K_DtuS1YHpuz9&K+kk#sf4IfiFPA*GR!IC_A za9}m0d7m^_jJ$J~il?C5Pd^pUZW=1z%+{dd^!ZI>0|woL7M z9@3)s?|&IvHtW=Li8t@4Bed>cil>Oe!L)T2c(SB^F7u6y(U`$O8QwBe;M;4ob)D;U zIc3clJyV)f11*&&8eCM@+!_P9zjj%AZysSrhe$zn#p)!h$k54UIhAN|yArTwc@C)U z-z6B~-Ihz>jj;OA-P{6hy5P3BW!njhwGTr?<9~`Ag;!Y4fCg8B9J7Xv9|mFFtYbbx z(w8VZ4OhTJ(Pvcjdr9b)@D!0B?i+(zQP}_%+Ue!_-Qb(DIlg1Lu zrMCoM%AnN05KB6GMS;AssaY@T4p#X5^{y&NiI|E`N|FJ}Qf<`1{sr=!z97`xWMTgJ zV__r-?AMCdbG{Rk!1->WV8Z)`U%WbN+J6IVbom?HgpA|E_UkbRKbuNvE60DYuy+&> zeVwT}Yg@)BZWn5RWaXKmy}PYU&1-(4&jQw-C2CggGBx9zXm;AJN|9veM07n_;=Fvw zMd#Be24+*=O-OQDQzMVFm#MfKPT+DKDDF~LqdHGr5HND{B*{0t6msG zqIcRyGNP3B=)X$6VcV4DhB7x#g@2TfkZve_#$HeL3tO0LZw4Be?L;{lrBtsbt_6>K zINf+zT^gwq^Re?0a!VjuFr73O_j~(Ko9p6j402w#tgv_d_8qZEU62yu@qUfZghwIM zV{_Mez?}%-AntQ%o-X8rTho)WMmMI$sidMTo9=%63$GfpQ=iaM514|UPJc*7@5$69 zQLwM|x$1j6v(;eiECj8bCX~h2wNs!lJKTKe>96Y?c6+KMV$?pR1xfsqrAS>emx8nt zlLG^vap8&z2A|Jmh=NgCeBDSx-K-}ErxXj!P0>(D%M*#S80s)90M2COMt|ZGS>-kb z({oC>nvYkv>TqVy3cabR(Dex@UX4WllG9w& zeEH%1-4{%>1Qkq1i6%eRg5PeSy$V#qQ z31w|9;H`qdJs_Gt(5Ju8PJrXSQExKNQVbWw5Uw&Oe$Ct{5`TM1>m3@^k3v<6MHha? z7*b(z#%LZW`7f7nKi2lFwleW?waxI{Nz_Vt~*Ez1sYm+b;yFps9AgtTb`1ty(fUi z>{BB@(na0Y4iB2cJY{=Is{#Mz6;{4e9;b~ZWU&Z%0v=d7=7_8%$pSRLUP`0<+{IDB zx_m_XDAh5)E7iSF{`!H1K6iU?lzm>5f8d;=0skznuYa(SZn~^_1aq6JB=6=j1Cxmz znfbnRkbC&!J?eLBDvKgX6iHj7d&!8?epy=F3!WyLUbp>G#vg^PkquFEj5o3;;AVyf zMV51o`;i`d=22SFu|4)}paS6oYm@53i>$f}5)s&*NV)+V;&`;uC0Srt-zB(_mj!!l zvGus`jejoVui873&+8e6e!sk8{axr4!M9M9b1~N&3FYYI8F&B>dRI9_OLR0k2H#A3 zjL2u!`|V6wlkJq`)t%K)%Hk8AC`M@+k`;(%BBAmKZ@9y2YXG!E_-BPilpB)pFmNJP zqHQcVJ&5dIdnty7J&Y%ViD}Is?wrKO*SdYx?F>E)i zQ0*sKV4D}M3IWRBm1zj5!+sY{=iI~3KGIzjNFen;baymGv%4o4_@cU^6UQtde$TR2 zq=D-5^_E&%Ldwm0jjX7I?ifdpFfhWbpFT8n_a(Pbc3zb7C83TxjnAPS2fwtp(dvBbPnAb{|QDC=Go!?018PN2gJx#%hS zgd}GUUg1tVv;~%asbXG>XE`Hb+s5;ntaT>Nf3p{b+SqOarbGP$IrKv!JZz3%P)JD> z81eXuGwuw=K1DPxjMlzhIIL()OVvHVB=8$MX9Vg86F#OCHaM72iM9&ZJ==nIet&Mq zZjv!Lz7g~&UWl$$Lh?a5ZNcLJ*yAdOyA`NoROsC7WvA(#kPCSJE2(|T+pMWDBL+mL znZ?=@tHB35*s?LFj^F~wgfC~fm732H$9B9^hEsr)0?U4v>NZ$WfO2mBnN>*2-DoF7 zB`yFC@0V6}&$^S+2bN^cS@`t1B z`DC%P_(q^jFPl183lfbnd}-cKD)Gu+2s94z=a&KTx0=2f@6a!*ril#cnJu7!T7yhp zouhQ?yCpt6osxDhOO)fGr{OMsRRm?I$Tx0k@M;ai(oE(BzS+~%g;Z$YL4`wb);hmHX;V^0Iv7k74>uxZ}rddVm|+Y$}; z7`JX$oIUpY*~0KNUnjjZ!~5*_Z{)Pak!DuG#=MRFh7to0>xc?Fgv-n&E^Da>7^hF0 zShKO1QtRm!ts4q?o87)(SASu}IBp%qs>v88xO9x~o4$rP>7Z9%Np8U<0RqsFHhWYQ#zA`FKC(?4jTGs6}>*pqa zb83!jY~-u9MJUEL>3so3iG2l0NT-9LbTtDe`UOhx~+?8EoKy9BFu;(40I1?}ZAcySwRWcl`S5-L6 z0cw0^Cip{E6&6$PZh5{lQZ6n=Di`lhrSYt}NR`;kp+;Nk3V*vTg!tI0(MMkeNP(N< z$0ck~cD*=7rHhsw3b%mOil#d$dgXeTR%{q_twg3wVGMyx5khsqQDv^b3R+VzT(V^e zk6Ion*bdnHa}zh?b?mPrt%ye3LRS@j=nCnAUPrAsGzM{;MD~db>Mxe}R8WOTFf}Bz z;s;W&;(e3|GJkE*<&k5r#U%yE5j!>FnjY++RJlx$va&eyl~MWz<~Qw3+6qH%_Nk5V zq3Cn{!BJsT&Wlk>s@-(UT7IoxZaxGr`C4{RT^7o7wSqsm4t-Hk_D^-qs~2UMH40jt zm$RoVa&&5Dee>&*ynI|oy>{)a;ybvHWjHQmMN()ZRDUwkLaleQ8x|EJz<+@EQnaE+ z(qD*hzxG)148T&>605hZM zdo#E$SMDq~tnJMDDScrb>GlUo++;Hj)qQK;6S5d%S_;8Vx=d}JJlPQ%&!;69&d#RW6r)cOc-GD#{N(yu6G<{tLi*W{*m^vLYt{pcye+nYjg z4R3U07!J{#(0Zt@&5GVhY>f zuGU1^P|GwJe4#_l2}egfolc&4dVkZ4&s5k-fgwgx!9a9ZKXwNkGUIyOc~}L`@e$z` zGV6ij^q-`WUlmjQ>&daJk9if>y{Z>Y&TXi)qrU2N_vd;rG(lmMu6{G&>@Cuf9t+B7 zi+86-iGf^T@xOSdv&)iM(?RH zx7hQ65v~zEcG>iKvx7oB)sJiHo6AV^DUJ8`W6!$SGbTI9{w*q`g;0OYXbN(CH`mnB zU8SKSVWM!zMJ__GmvD6q4S$s69{kkJzIC@5v$u7MNbiE!3-U$Y$pa*K`fPMWe#+hr z|A*v;U<27YtatZLr6naE)Vcm}z#(&@kw9ER$VkE|T}RmyR^v?!_dfX$GVsSmoMu$a z9E1>Ava9OBvJ}f?mgx0EE&IC}YF~JP(`p$h=q~|j6x}<}XThTp1ApP5^m25WCGZ-& zA1Fgc6*GMLxPgiV;ee#f8mwCd${&qm%G4CDL^|q)*ln=zG=cAb_TWwqMt9vCB(Ck^ zftUz{u{g>;mA5@8=jfLb#<67H`|8ZX5W|V+^{qxx zyM1GXWlN?DJptY)Ab%?zkp*+xRW9b{F8|=n_9*z?jUM&dK0f)2oAkkNa4$VzS#>M{ zoAbQIKI#}iHlC#APqMk&F5s4OKA=-r7HG`VSKDK;#TLdjUsMNt^0nfO<=H+X~bbtR7)V2i!soK!-0tH-w z7fwoondlzQallUQ>4tgc5`2g;7#-*bq|RzcwC4|5{hDYcwl3R`BQ^vR@xB?)w?qd0 zVNny$C5cpSjOcqB*vSO2_lw&d&>`J61^GSDGG^F-p^e0BCggUv0Qs}#wk@Pk0CGT$ zzu;0*c8L+?jX@{x^AmsX`gV!ru2UK*lTM4P`}#&cpjHd~9YiWbKo|$yQZDt9KQvKC z)dRF0*#lbDo$v&8QKojH%r9=U>uN*I>db{J2+Yh7o5zjs_w8EpB`i_2aM=% z2X*habwy?s#;e3_{maBY&qy-132i-1HsI7nsSh-5EDVRqHV5bX?>Xh@ zS!DHALU>;E7@GIr;)lK`Ur3XsAQ0H!eVPdUlCFnigyIh#R%@}1bl2lYE_~6V33Z*Z z05MyT!T*5*0DIp}g)409TQ%&n0$ELF?TTx^7I}XrQZ>Gw#q_O4Df(V{rAgojPmt;~ zJ~n{igJT~NIkqg*)Uk+oav$9@z5u$5))lIVxt4;Vk(L?OS&T!LH7wiDru}a=k_b&7 zF#)|)nQ&oJJq{aGQX5GUv)J;;kFnd#pCT-yAs{ImbUhP@i|`8tv|md6g&NSrFSZUl z$J2lL!nBr(-N5lHKl8v8!NXba_lSdnp{;1%Q~#7sZ{CB|1o^QpmYwz$g3$zk*=^^c z%&JHG)Jk~yjRB=t?mb)>^v#M9-&>tL)S+9V+_7N451+%Bu_Lh_GOUsT%X&m)|(2Zev(tU;ypdy*AO)kR+CR@R9Vj>U3&I9B&?pRH%?t9GePbt-l^CCd4JYtFqGykXQY=!M6wXD&9SdkV^6@)S7`Sq-;n5o_qp1T))7HnB<{-`qC{(Y-`oiy0o>iYTZrGUL3 z#R9)zha01sK%;>44xHeYniGk%TDjc?uw?69Ce^QJ-IR@Me14_@4}Io*e^P3mDo**i zRGI$+b^ldl{mmXz-!HiL0--WI^_G9<>Op8P(hov)%}*rw3Hne1OXgu)*a8dbw&$8b z0#;y91eNe!qp@frX(U8YK7mbZ!MH&^WCnKQ;nFq#5r#2GytXWP#_&!B%-;FY6q zdHq_vec*CvQA0ChaAOraxKIesu7Z3%?SQ_7W8gdzWASwDg%Yj8IC9J9UhWeaRR$k% z7ZDbsyNcnzlktX_*!07xF?{5?#eHqebVohsa-2HSzPsvc0T@>~yOSj<`CE!su*FF& zw|pZ=zxSP;5EkML;!+Kxx|4rV+=i!VQ|hMkfKbY%zN4@WrDPR#F-@~&^xz&>n{COy zP&@ZVO;fz6(?14l1Eov1>Ee*QZ*LFJLRmhkv-?gkH1=!d748c3G_OlW!sp?`ck#8S zR}~2nemf=3&JnWaYo`=ITPhugfRNjkTS|Sb7Q&KYlMsL0D|x;X@+^P24)I{_2wq1+o%H;^E^K;4(r zuypFG7H9JxDs{6Z(Vu@B2;GrzyZ2aZ9Lhw>^`MWFoFA+6V$gfpUC}aR+dD9e_v0B1 z_e`0(ySn3=7hy)fd4x$2^dR=*S{v#`)>1p7nolP`kNZ{7dm;y@*&> zqyZA#2hGhsuq)L?0_nh#1vy9)2*+x(FAo&D6t4FPZi@m? zmL4qQVcG>MZZdxwnNlpFSd<}IWmR~g_f{WL>^GoyDGZ+L0&Y}fA1f0>@lK4?6`2*# zuTe?8#AmrEuRM#x&Ml~W||)TfzHiqvKCSw7PtN z5l`aXUhhLXnLk_q_=;2}P8kQlF>Nll{|UUijyNtZ{epkRQhd_7_s%SN0sL589Gtxr zcKyq_UYrju6Ugn-^s_mo^~lx5BprVkmAx)UgN_&?JuFP&ipuuBkhn&F6@KmMGHMm{+)Tr0-ZalM1~XcPY|CNL zw7iJxMJi8v=R1m9G<__0xV)b+ZlSZY%~;gjG|glq)Us)kHUR#qz`$nbC$pndyVxKc zK_nZkTO5F1T5Or(37M;XB@`+&l%L~xWPms=U^;*0mj0If+hiMGzpDE(Gto7-l6nO$ zfqTx}ahpLfID}KCfv*Rqt}?k@-t}bp7LlhN-nZmkw|9P%5Y_ucu!L}xBw@6z{e{b2 zCmNWCtGgK61dj44kQF&7ZZpQ7HXb7S$^uWkc0qk}{yP5$ZMZo`3T19&b98cLVQnB~ zZe)`!lQ9fcO!1d0d(fx?6w97ZrS9QwDNki!J(fr24_5%>QC zq2vJtqcJvRFd75YMj`+YJmCP42mmC0A0%-f2m}ZNfs%g%kskK}%3v>;JwRI!@BoQ` zq6j&ZkZ!&nFh?gerq17w0B#5m03<0X!T&oPpx_GifI+|rfHoNI1a-w!gn;1yLnH(S zMf?6E1-G;l8trypNXXmUTM+DjiV{S6ILh+y1H55qCx8JI1@-WP+5>)32IzoYp?^^m zB;)`XIl)kW9EL~-v^UrT3cwiPFbEWZ!i0Dt?4ce2Om%>vh895A4T|^!*7^hB2mI9> z07ww@uXKM!|4IZy{0;^~AV^m?Fv1sxa0EEO;81|Bs+J(y2h9%vBkX^F0l{z-5)%*h z0>j{7I}G6W*1-T(1$_V*!|*SDD2NBl4UG~+!Qj6*3jIohX|oE#UJ2>y3Pqq%gunKu z4D*0OFn#wG`s;9A5J+!?|KBSI7{cD+7Y%z)Hz8vL%-s{Jq5KyHV*ux-bfF0Bkh9LZRc8nS7@Mn!Ve-D@sz!Hd&9|!>a_4?P76-Ht9NCe#X z-|*i@EM%^(tF5HL_ZQ`VITaO=J^+6KVM&01q&N@&0)fN<5)xv6fWUv|`Bw-2X8+r& z2ZsH%yZ^|jfp9#}WbnkB>UVkZr`>(O#0sOOq4ickhD1iIl@_z^v141xwp#Sp_ z{0{m5Y5!N2|5g6~y(3jmIQ+Mt`w!s%@q=AqaNoZW7(IKUF|(nK#7qd{zoDkkKLf1| zwTF4S{g2o!%_uBRMX^(VrSkM7Ho9WhNX|tZTZzRVlSTdQ z$pa#ujgC4>A-8oOy=(HUM~Y3$bn-MwI`9KWoPDE*z-+s_>aOwtk=hA&u!y#l0m{&=`!$p1D~HMitE9d z-G&{1Oy@79(*cz99F%$*I6AD(%bvq``31i{>w{IAv7{nSHe23y4E01EAlbh%QBQ;< znRVvuyxC4})(|`WKyJdTB95-poI!Tm@FeCZP6inij7Fc3D&febh)W$J`r*tF}+xz_|rJZhO+F@!vcr+ z9|_+!P8#w0IB6m9=y~VRbn=}DWO*hfx)$PQz1gU<@Ajj@T~Qf8 zLCQ57At|z2tsTrM>5oekZ4#tR{OukEF?g&oRCpR8h~?zaM7Rc*)10R%+OcGR+!9M( zf1&1faN5iGiL$MZQRu;dALI%KnP*|0KoXHX8+ zZpDi>7hNhnj%*<>GEba(S7fHAa-el3ylNxddb_%{9I2k}PYAl>GeJi+xXsnw;YkF)I=2Fp6fg8}6NEE*IZPqL_#8%Q^R##NSn31M;Bt%*-o#1Ims%M=ySseRGtkgC{6=s60 z&s^|o%im3r>#0v;kxI*}lNtUf%OBpqT3Xrlkgf82Q+m#waf7{^UIt3(v&Fc1`pQm( zbR?7VHvIVmG{bqMoh}qK@pcaI4F!#JJ!|ZW`fTsH9Lf@VjX`xk7jDRZnMjz=k0j>U z!H`|UA!9v_dIx{ak@EK_`Us-0@6BsE3ipI|yFvioc(|fz8RdR9o((en)OO)s1<*8ZF=8nvQ9tahqa}+BF4|kDXoO? z-U|c;`bUrV56TyROlI&sX3T+++_)--fJfXAgA1z-lb@&jD~NTL4-CSssy^k~`Kc+%v2lb3KtC0Gvu@U9ycdrjE;i8HWM6M?y?@>L zfoHHYLFMl3X0bh2RqvN>27%TlqPN0WLJWNXj>Ck&sJU*2xY>_)h+KywYAi14-xO() z+#7v$G8Yej89r_tMN-XSSH*{1v|-->MN*sBkCgRa_chz(y_iTC2&_;Zm$xSruF& zRMUZf!Ia8x(WAg-Pv(ajn?F~D=y0T&HlT#No3=N-E^?pFPv~QP)12RgRTh z4d#AP0n+cwK$ShWrdWCl!;6+HMHhNR!k z_Af@!N{c~4Z_tn0lKZkEZ;E05rHR%Z;kS85Som|pm=ABD;P=Q^L&^bw5fka3guZq~+ zO#7(A=g5Q%e=DU5S@xees<-?cS;wMzpCQ|@CT}{&eh|?45wiEb_xdVk-`+T|u@I+obk#n-}`c zFvcMIHMdu%eF@A%`1q(4Y%yO!v#>-Q#)3SxAh&y>V zrq43|ieqoBChvBLnPw06f=LsX z-<-wqI|ZhBo?D2or=z#)r;Iv((#U(WlNPi_mPj7#>>q7eE5pjJEK3gVqokjFY!U8Z zJ)~MRj=BiQ#mcyg_g%~+e8*wjICk4zFC_5naw0(HIxYwEd!|QBH$bl!ZxfXxd05Jv z5V-awm6wo-&(TdGn7@|)wM>9>rLY*e(qO1W?zbtTl>LmF#>`npvLL~KEg{u128O}b zVPH`P+8}SaEf!mljnNxQUQ+?K@_qLk4lCuoqV=Fm8<>nKA@0&F?q+%jx#j0N&C%fxKpD1Q;uI273 zlvPqJce=kEJs2isS$eg9I4;_VAIlu|JZbDJ=!KpG?T1@c$NbZVeFfqts~tBPpL#qm zwM_o>+ROGcQAcClkN7($-9bKQYV6kq4B^Gwqk@5jts}SJr8Sq``8e98`aU}iQd^gk z94bRw{n~-`&J7mc;m!&{JfRJ5yf-lh_u9DS=jI;g_z^=|I^}zRbvQL#GxI+^lQm;~ z>zWQd9FiY_(~y{6vrU*Nsc)V?x%a{4&Q$VEY2Wia9ZzC#8vb^1S!bVMN&h}JTBo7- zO*CBiC0UD$f`(NT&mHY^(x4{8qV;R@j5$OjeP}!$UUuRXXBn?`0@FY;*Cj+Ai*$wd zlCya*KzeDU?|J5bSr_v-{a!7__4Zr^UmAp@I=D%?@R2W<>n=(<+juKP(v8)o3%gXm zWB%J3SBXxpTEqVG%`90G?7p)1ubizKC=kaYX0i_o{p9A9_kv|~&LeJg+98OU;{Dz4 z*qL+7vd!J&-F)0N_}-<=SL7VI5_^vI5fFSFqrTchoT%)7z0!Ja^*orUlOc(E$Ns6m zN(%K*aqnaAkU6^LY;r+%YLn#+Cwg?=sh=<0TdwataXnhKgh{*`rD@p7dv?ghOLOIJ7Ho6_afFs;n2K{b5+aZ* z7j~uN$sZndIBBifOJ80oI`_THy;@_-G4Ef&Kvv4yq0gKr1mr|5`Lv!mY$#UpRZV$3 z-d9=Lw?vQ6JL+mO#_K<0zhHkULq-2NbS6)3+g@IO1j0jRB~n43L9#u?IEBT*s~xD$ z*h`*k<`TPIyDh|2k@K$V=HtUDSKfnq|Z@2PQ}ttdUrXmjJit>!t! z`Xl-rGpe(?6L8 z)zLP8T6?aS|CmqUNp*Rl@#D-o)o;enA<*-E9i$e}9J9@;a|uNZ}QI(J&Ara7zU zRR2h)!LkKcW5{MZI#`L|z=+0gal+x<|jI_ARkQ=t5m~Ukj(DVbYj;rNQ?6!dh zx9~_q@#ljcmIafq=m@(w6oHSCo)08Mo&=F?Hyn8_Z+D*rX)c)h=V?zaipb3*#+Pe< zA6b3BZ%QXcMefCt6hW4C(`-fRX1F3t%B`4EGs;9ky=4t4xdK+B=g|Pc+s!DNU7S;6 ztF;$lDKg_`u|IELrHD1WiVgM%)<(!7-ZB6!QKfg)Jx@*K%+^2u}?kK{G>D;Mdy#lZL9|8m4FT zcy$gRTz*q}R4>>4Ago;|MU_q5Sg;l-yMc#&!uL^Ae=;0M$2K%sIWDska){bm+zazT zKCoJzsbGEQeJQT{NigtnelU7xI7p2ApvYupxV)aPioCeFs`}L>lSFL2F)B2F=f!k+ zzwgGEp*N}cMg?(7VwY+jjw{A^Z^*>nu_s1l#&HJJCN_4*5Zy9z;CU4tfHa=Dt4*O{|kUjfh;Ow8$1^){J(H z!Y%LHeBM*OK}snfmuFO!2AJXkpR#fEYX;crYX*KUdb@h$sT`S?8bcCz%o%+3=ANYB z)pTk5h8?|^B7`qUrJGNVXi%&qniDR0V%DlBJBDyPxuv1HabK|)glA~1I|At^ zaTZo`wJiQzsVgBH;$nK?Qe0Hti9Kvq!xi@OD^m$g9w~K?v~lUn8J&fDT1b261=I|Q z2w9XYQTAO1`ooNIG?!VrJ+&mCibUOk&Ke#;wtd_^|30guIM>!ELQ!dm^DKhol{SnC56rU?rM z1}&*4wPKwLuoKLGDX8mtW|3kNF4RjuQ}1#F;j5=S#Nw~=83{N+)u4R#iq-R_RW-?1 z*P>=`zTa~yz1?adK1LgX<;uS}?qn!nYC(}mf-~}fmaDn;Y)GbT?W4EOmnZdLc*Xq~ z_H$jaCB3z9?_Qg+7!_bFtLCCe%-ArS^_TJQj_yAtfprdlD*fD2Zfr6?ha4a?g1Ihg zsJ$tr;hm7x*ju{a4|i-Sh6qaCQnLJ8mdZ55?&?IGxOWH@|^@HP_WxmG9 zat|_%XSE-H3dN3PQ_D1_caC4G#0&S0JwSW;Ox^di*H5PLwD7f|dTC_OmRj-5j&I|& zZlu*LyvFA)Qs<_!pC9-a1O=ewuy4O(-x!jKO-c}AJCfUP1mfJy(cH%&)-?x~p zNfkuAs%{Oe=;nG&)G#&)-|!+L^tu)%iLiTtzh1?7V&KKuiRj|>wz5=4~n)X}7*<+tV=Jt8e4UqP)6(KiUL; zAuY$wkhDs3&da5bv$La=iM!h}I}#LW=Cs)jr{`}Ew)qvr5JMVEsbh&PA2uPQa?F-aY1wIkiVdK!T22oHve{x}I}*>t`ld-p(6$ zJ*=I?{l2?iPTrHsXMmh<(wDkmxm$35rO)Lz6GWr3KkCmR8iRk^M(uJWPZsrY{fUK^ zmuyd=2d4z>hv#m@UugyINwiq(*fBId5$gIBx<+}qzi z0OF^Wd>ytboE@FAZV@DkcpAf*|H(<@WJQjO05Y|#_3$xyjK!;syxXjd8oL{R2`8_G zZG|5zQse8D@U&BtnW{V@iER)KROF2w)_?&ezO0=>8ma?P1G%1}9|EMBy9FAVdzZMV z7;lZ*84FXqf;k!`Tsbmb>*ctv)jzIe8q_nKD9rP%ks@fk5fSF$KDO*3!|TR%R$+mq zlyGiMKxE51rN!_Wm8q@+nhyzoPuC{NJEm}?0C3JS^BcJk&XblNA9>#;7L`DXb+%=` zpzf3(IvzJ5E3f_D!8J(|SkB67C0+IAK6=HMkXc2pcLjoEF_khOIjy|OWxPRrXL;6 z%ThUKHcy^@;un?L-O>TPeDd;!E9FH*S8?uZ|ErVym)&xR*+IKcPXxCt@^%FhrMLW6 zehfNI`FiXtYM3L_e#R3uOVgg4!4hBGIJWwJ9-rVbV|tSlW6xH0x>X>WgL^|_b3rFI0`RJWo~D5Xfhx%F*Y?gm+>wE76Ump zIg{~3BY(FARFqpAHjH#hH-dw758WUs-Q6|7P(uve-3Wqo3KB|5mo!KTlG5GXARv6> zIp;n4zW=}0_pMornd^@0-q+suy&oQ0Dpd_uaZ89fNCx5vW#wQ43IZgRG&DGX03eWy z4G82!r=`^dL+wHTv7^&!gIrv}5J$m3A|zcvW`9taP09=k3sizQ0_5H70UTTa4qibH zK0zQ5zzGBj{3j6NA_$N&a|c@jl-L0B5J!+JI;|wc$;$<7Z3BhX`Oi-Pg9RgiLqLF! z<*#&rxC6)qY+>dIP%?wsfE-{IEzIlz8W0OG2gaO+5pr+t{@k8kR{-kWPq}n1Lz-VZ0NKAO&hT5-wq9k71YDb1q6T@?7B`zQMs5!mssWHSp3h=Y@v zqZioG8ej#s2LV)M6xpDjP!@ohqvfwaGk<$m2rS>s-3)ARW)2JZYw2bH8F4j$8BF0n z`dlqsz)nzCHdnCyFOBTKXkgnc?Pw_pac}@RLS4~+txpQ<0*Vd>_?uH^`Jb_2;t{SyN-q5rm7gP;H&AP~q8*I43Hn#3IzK?_i;6I2LYfiZXiFOKOO&#&^b5&mS77gz#L=^ zc0~Wp4l{$S{>HHLcL93>41loq;{X7Eeg6Gr1nV$Mh@-vN@9@8lm|a3cRYp~T`5(#u zIwd3^o&Xu$@qbxW&A|UG?hisaM=J&u|-ERow0b0QRaQr{dz+Wl;{F6h7treAddeVsss9ao|QnBU^j>V^?%Ai&0r%U z?r3fQ??!@MWx$>wOI0w`!shQT`p-GQ=Owh zt-o9#*i8L*Nohw5h~=;0r8oh0PNzwOn-kPURZbiMtlHv$=`?{z%KPK;sXNMWqu=00K4pO#06lN z`;B0nioX$zQ|UK?aVr0d_+gx?zY&a6{WpSfYWzmr0Cvsa2&O^nH-c5r`Hf%|bbliO z0K4A5NB|aT_8Y+>&3_|Uq{Y982j;VY*uxI#KNfE8Uls?4-}%2zkAL0r56A&v2mJwI za;$#CUkLmg!qi#W{}Bws)_*`)F`M6|VRCJ}oNPdje?-7+f6xJ8%IyAtu;u^B4%6oF z8^Z1o_CKg#w-!6(cQIHj?78-b8@6(%-)>m06YSCAXb-Z2{ zkl(w+4HN2Q@8Z5BLG(8cSYEZ!w$7^0sUS- zY>wEW9*{p0U>t6LK$u>SKaL3&?)e9V@p=6LVSC~Ido{3K_6E89&HZ0PYT@Pr+YIPm z7b$Fl|AYT}T!KKJAPe-_X^4eTsBLv<>rIt7xd-d!SLEf@wtuJuz1~P3DBbrw9~(uK zj925%5~h~rBtxmHGo|5U)4t?PM>iv$hMieKODVFsP&nz{b%_(!{DB|moz@^qO9+|u zC|_#SI_`0z8U?ng0ipqYlFsyf7+)9HcEwiV&oeSv*|1EA;%hbn~}8YiC9whtep zM@6#=9n>?#iGRm)F-UXMl+zmh2_FNFzm{l?CH>*GZV;b7xVYG#)z_QKb@oo7yOOs& z9G{fHTb?Rs=*<^W!o)2323I&b37#v-(j>0q$!@s3p+V&F157`2weAbG>{NGzCqvwi^v8ZJHf)E)-4-s>=2W((x3t~y%Y=3inbqemV5O?<~AxBvSeY3s78_hb5XeoHs zXz3gYNXLRXX8vTMRlQ>2MFwEyvsr6E@Aa+03xDSJ4#wS*s%qM+RRCQie+#}ZTEslJ z3jNoD55-tBX=ICVbz>2gb&N;k4+1o6nH$!7`B4o)@2tTWxsG=3Z%)-MSX-@a(JS69 zdv@MY*J4s3?&u6^xLY;KK3wfeYNpIaS3M5ZgtLIWNnfLV{KIlH+@PS+MTu? zl?fA1WB%bZtUbeYT+?a#StCr;SIXi*k7#e-{pnZu=yg`+HjlO0xgEC}!d^=QD!-K= zHAkh>A4y3E32p+dLU2WOa4jJp8X|4wOMhy2><&LLy|)Y!x@_7J;lE!YG49d`vRT+l*^Qx*_4lR|?YXfuRT zojBFRbreFK`L1{gYHf3^Naw_)vQU_+c)eeDf$A?DGLAw;QH7E!!qYa%3l(kU_J6O8 ztjfD^hfIx2QUukCC&|<44sk>;lr=)hG4v0N17@tcLvPz2fo7tj?) z&c}Wh_#kAxkKnh~HE@B7kZ)4F^mQF@e^za129J4lLiTo}HTTNAj#MW{Nn2z2)cxGi z_?9F9#|BI5MDjqGHEOBsP*z2(vwz~awUQ93j_f4$umriAH8vM^a@v!&;z&kW+3S9Z z@PqQ)+UkB^fk#oP^T0u6&UyR&Zh)Xe1-&dXCAF^M%{*}3@UHWX9w3Fz%i{Z(8qrrj z@pXmKfgm}Ic8sEtrdxXL*(4uM}>W6a`%l1X3gCHAp5Z@8{Z_spDmoJG3@RULtelHl?Cg*=49Ixbm1h+qBjCNeJ*O!B}72I zwWn0YqI0|A((3mgH?WbuIDb70Tl%;RXD2_fXF-fJ?tlDNgK+)bTcVK>q7OCV$tJ}F znQTguNW39xHyj{k3mY;?G2GpzY;#>qbD~^Y^1UHx2uK|WO zu^+vjBkMiUc)Z>dWPhhNn>>x&-@3r0G) z2V09i&s)P1G|dd!_IILOsu8^)C~|J^mh^gpWM9jdF=XnUQ`4)Ae=&P?>~D1OBOv_i zIkBI8;hJV5MMo7?o!qfuy!6$+Gy3L6$QKmydEf$-1S5QsM1RyGhnfyaOJemF&FJnFheh=ZKRE%&r+uV;GJhyvwoDk)^NoL6V z`!JQ%L|kRB%74K#?o1LL1KzF(N_-S>IpV>|-fP!a*Z7agVQ&)O6S@qF&wGUjGOQlZggfR!RI1|G+9CpSP9Sp}_-7)hSMbYz3HLo6=AIz0T z^7_&x-G9UUquOl{y~A*_?syJ3WV=q?a(|4&TYAZwq;lR1Z_k>`&~rQ|uQ8cL%Ll&P zusG`hn;~y>x`l}?#gAtNq130icRf#-Sa=n1dY!Bj#3q!71>>{v8uD-?KuaGzF_FxrmsaUc5iNAr)0}xt-AVj9UZ+*J zF5*l!xHMO8f+c@il;Obqnv<9wz9+rbq-@*okgQIKPhJN7olxlIwJXoud*Yu9=I+iG z{C_i>l-bH^?`7k6Y)XS#-_!(yvg|^_GFf)Zri?l5HM}N3d29ncDV@8;XBa)FS^bk+ zdg@$+GU2m_j|BJ_5hZAYZb{e;j>D|;pQ2z-4ZOW5t?AEoG~F+kKv zd?JHzO-h8retv{i<;tT;yr=K{>}*3G5P#by=UY}t+_Y8!!2}hdR}}ToB8*y=w*Dbv z-M8P=-oBHY%QnrjttTcbRL!mN#yu|$Sge94Xe^Z6xe2`AIZ_2LUp=3vS;!UEU{2Wp z?KuPMGzCFvKyH)*C3gC%GQ%I8-=11Mv@g3s1Ls-l?@b($9#P^s(?O|hS|(p09xMmEjM$Q_#~h_&h&*o9t`hfhL1kuHa*<6FO2 zAA0HHjE^Xz(}--AmH_rvtl(wm~}c&Ss3lbWYw!^OGX8Rpg& zB!xW+;~hRYqcY5(XXK^aU+-q2+k0L(L$`iQh8jIy35|eh4(8`H!Dfu;Q-6iZM(0#j zWsiMoB<F*XfBJ zF;m|{9=K3fSL06WjiFbH!qbBGc9_Vbv5`xKt%r<}GS{fH0=GCBfApB(}X#QhP3P!7;W9(-!g;Tc$#-)x6k8jz80 zQ(?v>kZSfCUaX@i4}asRpX!PF;_hCGKWR!xVxGB~efvQ(0@a8-zg=;W+&3E2el|qn z`s1MS7q5n6X9A)Oux8n)L=(>>?Xwk9Bn(@5glPC?^=HnVNq{;vd06_w6@CQ9^EjwD zPw#CG^X=Hfpr~;8kO0z~^85^`G7>?egw6XltD-%yXwYk!8h=)@L%1NaAYYZ45!01r z>J#9miYYakA!R`_Cc1^;vQmi`*GSJKN#-LL3H(6|Pc>MnzOf4_q7V zU27EcCu0Vhn?Q{sCPZ1rk#UwoukajjOojZJeZ>SG^n_J3@)Y;nV8UUZw|edytY z7u^M}dF*l`oMMzHu!VV|>bHZg7;%(`V1Ei|;=ao1oy<)>bz;JD=#BOF zWRu44&bu~J8oA5%P!ng`K$SN?jA%w-Odd^9!weqH%38WfZ4nq3ODZ76Zu1f2!=UBH z$-I5B{^>og=3eo}tCo*~N4Cjujx!IfNs=A$q>3{E;fmn2n%WrF%i^VMq24k!C#p|* zo17Vm$A1@*qJ&c-%s0T+0XY@#Z}5Fky&SUdNwQOjY({xncx2C43md!TTHI0;f<6f? z0d3EhMBDgUv}QEhY3<&AuL}+?BDm1EH}PR0(WyEO0q5%sV~VXdKGWCROdF6Em5`b; z5*yeT$PDIOQnao~HHpW=f4XWP&M?4FsvUPI`hPq|F+a{h>_`tFllD>V{-@|bVt7{Y zfii`Nlux%~osc9hkUDv0SVy!rLA;`vy*a_e%i<<-u;-a9gn5yv-Ae@N{&Pt>SS^!_ zq?dO1iit}QyAxpJvXbu=s`V47Jo_EIESu)X8lPBQ=zbPpm*ii3ss51Jlj{+ZZi^3j6j`czK6_os{)B;%RAGNBz2Awti=h47)iLVSL(Tz@)d{}Vm8Vab ztT>4}w%x`hf?jQfOuJHn^g>l>M?{V1d5|S4Yvq`Sdpp$+v5hcH93cVmZvr)H)uVDujB-02;3h~ zl~R)HVgVh!cI7X-)NiZ;LD}+dDs7fe5A=HWPZ8J7Z0yeL%cS9%Dp)=}7F={iq9Ov- zV$ehc{BzqXF4<1=A6|7P?<8UkU2)UGQ<6cLhM;9z9+W06&7`Us`dg0}URtpdh<`Tz zr3iCI&!0y?l2Ix0yk!sv1`G|J@1u=?fH_lWxrCXty3cK^W1}&2X+jt@KRF4YMI%Pd zh#D(}I-&hYnO+~fgWk5jCw|gT85}=R~D+eH(2wPb7fRgGJoh=GDpd| zJJ)J~8NG?ZU?xRm`^83O`78xEke)gvpgXrN9!2|ju~VZ=Tk@{uMO`^x%oF-^v@KRO z#;LpcmF1aI4zrT^x6PtbE`KE)iCcIM@)1hZ=WxJJ!LbatV^Y1WI~?DLf$fwB`!yO@ z+fyj-A1S9~=@sRL6wvjEGB~qeeCNfTsx-44X_pwnGTivKq2+i}j?6zt?H*mo?Ha7w31xh!*?_kKR%b>s&XY6#+HV^&g_1D zg~09B2pUzukz0x{SN(#7m;_s8sZI4{L zsRx>A%QLYkUcbe68-EF+ZJ;|vwHVS>xQm~rblb$8LhTtT;(vOUSoPr~`eS&avT^?g zP@0xBeNB2qhwHK$ELZgec?_`9ALG@J!S!xlv27lY4S}m#s!|Y0Y=MX5; zgrmgTHV_?Fyez=u7E|1P+>nB~d0SWc4HDO1v8AHZ5jmr=s&K&D)!`wSS>0~gSb}ly zs_)Jvq~XGFF%U5$Lf1w^lisCfndN*}nAJv&MOHnNceDX%t}01nOp>Qlo1rDqG>PK= zIzXxZLUx5%4}a5OtUhvDqm=jOoN?T{Q`0?3zXMk48hZ}wxZx7y96PS6SwS>@x?8$u zHwEvs4i)*27xx+Oq^%hHPJg}zPh*4M1QIG=j^A%Y2@#FWv3{6#C`9L zT&!3`CE0zcc3)9tma=%EFG+=9N;=1je*boiL$bz@8Jc>M_Nn71SUoIqnY;9cgzjo# z7-`hrEil=*nBX<>6n!8g<(LM(n98o4T0o`0+@orR*U^v&%MkUlFa&L;bFGDHy>Yv&lj=PF=L<^# z-NTC$K`pMIO0>d1ZY0toSlidu`))D5hU2B<;3&@7dFWwp>-Iq9Af&+}GtLOsW2Z`eiix9=?|R{^+g^ne z>;h<%QEhy0rv%ww8ssjM9;X*|Gj!gE85zIjBy;A_ z^v6sLu>t4*iGWi14^qh9-f8RfbI)g9rI;bnpo?Rd;_yOMZ)zmVoboAsh(_yuAdX0vYbn z$SBcvjhXQ?MWChNgHt$BD0Zf>2aS zgUx>~6z)K<9;}_g4%*RQ5PHfcww+g?u!%%;$lKZwT8HO!^kLkv0h9GT@5q4qmka-(K`wmm+B2q&`8)bd|5TqydAopxY$ZX~ z7r5eZPMrDc$9cQH8kK5f}fag`0=X2>Ro~k6yiF z+E)bus4+^>BZJS5$63M- zL@C@J+``*kJP>0IShGP<%VSYLk|!7O)mTSbZSrE0JOA4z`? zDvv|Iv|_H{-3DoRNa49@LI7XPWXv-F69ca_XY@LkK7AZ@+Rr4xu%a0)GQa%Z>28c; zItdbLmrsJA>Ow(wt@X36C8OqYUl`vgy^yk@^quBHva|iU;XP{!7g%-w?tO@qPMyMa zuxcWz)sXgfn!HG>olp_8GG_*RTseO`d72TNp-Vz=^Wd6;*G$AzDaf>3Y{Cw+fwAJFs2hM?effN-KPGty?p$Gszt_xh{Y0WU^6u8+zH$+1?o_pG{b*RdAJH4 zA)O#3Zs^Wp&@`UiF|`l#vH>UdH(sw>TMLdIC{{rXnBT~w%X}e~5cC;6@7Y^O>D{I#n9I$W-G4C<*ma^oq z>9Y?+rE;+BPR#42uU{vkp>cm(%s+Eg7HEpWpjE!I<#dr0Wb-zt%;zZPN9{F+>c#m4 zeUl}a*pm>yfAgZJYJhG>^R5<^83P|#Q3y#-LxVlM4{AKqEnxS!Pbh?h^-^U&o`h0a zY>d}cd0RG*>QlAA&JQo~=w_m}oLgBz zqhMg|27IX380!{w!nVKW^GRFK-3O&9Sjy9KYMgv9yr_8-axlhCr)_u{v4Fi#^sOyuRpvlj^k z7AX3SM&p*g#i=T3@OtHKM$$6u`%)&c!DJtfX6Z+54c-)1n$>^PVun?}+v)_JuGb2k zKnw|b4?2`%J{-0-p;WGx{J}fvj(WCZo>hK5_o*O;r*&I0TdLC?HQRZHXDllv4-af0 zbQ_NmUuU89gr5kymsn{`--*mUn}WkvoQds&laAs{j9EX@4MBc@s5kQ^mi?9XF2`ak zlIuEIw=~)*IZ=Pl2SFC7eX)JCC6Wr|6Y$Mc`zQ8xKA7|hyt)IV4^d6M&0N&nXujQn zVW$`Paeex)*S6)E9z1)%HA@bQ;d(-gjjz^s7?D|qF-yiqM+xDN?d_IDyepr7ej8w3 zr12y^O$EaC;lhssUrsyojR1L{B*E&p#h13>9~9>XTU>uI;$oeY<{NpKX7lmy4^R&k zYJ=?`+B7xPUjU)$8S4~Z^dp<92CDfb1knKFwL}?1J^>yKv^Ql11~}}g19TSC`pgP1 zaZwTF?fgPsJWmC&Dq4n;iL4D7eJ(>%J=ah;d!c7raLSp1@u;l-M#-U|l}%K%(=EW+ zboy};9jAZs67j&mC7}q+_mSYh8hAB55fEw}*eE3ZMsv~xD!%y)>kW(b*>`KYQD4m9 z0`rK1$8OB5 z9>+FIuXyO{)@al!%3PE=CgP#>71?+e@F+~~y}N(;zGlCcV|SDEo6nHW``}NDpQWbX zvk(-LL+|Hg)^Djhom0qHLUs#9IqJ2=thw-5&++l5KhNYVXXhgatpw%sY({6YJez2K zrnj@4g1x|YB-LNmc$*R4x+`jM0tsSr;&nxJ$x} zg5Q5a)=0pQ^5GeUEuN-G#%@sYz?Uc8zwBPy3-o*vebJov_?Fws#BZYYc0Q`OJiUBO)40 zS3#zWgpIMu2zg}bHHk>{gT4CGCM3nteuaO_8H;>0b>=5K<>VEbE_N~a5S@eBdO^Iy z(=WX2A3hDYVlwZ}Oz9nS@go}mRWN&$*&pqB!22V?hZ(u3*=TM4!e4bIyT(OsY)^BJ zkA!`5DrzQOW#N4VLRA)r`Ui^JF<+oyZBh}q6w zH7tNUhPY>Emi2(*vFpoyu@kw0?O$o|BSf+FZ_g*IvYalUY+sram8&6@q zmEuj;jC#|jPFJcnF06wcU;2)7zTp+Iq^F8~56(%n5sD?drOP05v0*|JzT)}j%X(Wl zYSG?{h1y2u{;NdjR-JUJi8v!UA=`fy;?H4oiWN78`S1Qdwwg5S-QRJ9{NQ{fI~iZS zM`%PbfBDl6bDP$@Mnn27YX?q1Q1AXYQ^mJs#K(>To)cS>yfW4?5V#nRM%lvFsFHu>hq-UYQO5ax=|<2L$!-;~Fy&s{#Y> zMd1+5fxfCzHdoqKcj`mW!w!O!NJY@}vk2wt0JSgF?=LstWtMQ3nTaf~lu$+I@?UjS zJK318_N+YBpi@Y#L9r2Twl#kwirfTz8dVnWXWO=3*^yfE(RGs&ZTNQ89VtRu9jO%< zZzS=6=}_a*`^aU&rp^v=PW7YQ%pD@CO3X?GDXoQWb!O>2#G_lOF3CEz&a9!_e?G*x z_3(O%24w%PAfn7$^y?2lR6RNP1i8xI2~L;a2f9;>_yj`O?C z>2H1P=!OVS)2LTC@rjPSDeysQt3Mv2cK9t z(<0rO4}#ZCl;(dWZSH--ubnvLfOAg}R8iNz!r z)0WLff%vh>Z&ALF6HlpsGc9K42VAeH|Cq1jaTv?9H=QW`avRllfSd@mGP}w>@#?a_J0=eiZ<9t7szA=r5kPI&op; zSJ7a%HcWpOQ4f}vp~Qz?X)JF*ezulun5w;MH1Wkzb>hnt{Oc2H9}3RjGdhi2BjjlJ zMW%{Lhjgt&HGg6iPA!JrDAFL+wK)#vv+L+d=^sN}(Mr}S@)kpe>N5!2u3y$xI4 zXFnrGk$=?iR=JR?eI%FD9;N56X-{q}*SmOxMGI<@Iwnt$m7oQVFou>L}#hH)U z&Q+C(j?dSdzQLmH`nZx&3gnX7*~2GEm-#iJJY3klxaj`aWy#a?>$S+;r&_@@jJ2%S zQ;Ni!kL8t(=a;v|C2>0M6<@zU+*c8NMm?a| zbBQfc7Kzp;P>=j%Q!*e!!{erw##MQ_(VF!^>R^YNm81C0MbEW(h1flGn>NtFJ6`A# z;9#_De3zl^iz|&Bf4=t2jJ|YXONM!BT3B#GiCN3&ihv9;cCgoGw_PDnE3%!hKg54Y z3G#}Xu0??5$=DvwXWH*SP=}dkl%yz%3(zMnodos8kTX3)RL$|W)XRSKA@57epcMxs zim9lZDERDnMN9*GLwe70C6g4`EJ)vMkAhyf^HcxK9DUk@ke15v^znSR#Nb;ue}76ki^W1LECPs zF?pMp&-zGSEt?LoxEfqXf(^OcqRH0DXsTKp#_DIAXb$bH2MKnui{@ksWl;|?HpcBd zp;KhIIvA`cK zXt^DISljV)DpE18qeX?YHI6mL<;9)6DY4c34!Uzwz4?E`;N^Rs(@W;(b$ zA$jZhA%TAfb1j_6IzXX?+e4P2U1^VW)O!8BX_7!yU_k8+K*pVU6sH7f#>)rx-*jo; z6Rntn3&~P9nz2F+9!0EYoO4y{7W&?VCdyMDWl?4Bat}t^$n>fOA3cs(fQ8KXt8p35 z`GoEFTJ`ic#Zz-Sw_b^XfEmCQ(%4P} zIcrEV?zjlCxRt~*T_6_ccORgZW1SAAVj7#X&EaHe{Of4{hIkNFX{=34_UI^)C_$sf z5Jy==S%}NsW7kLVs%F$Ri9Dkx`Wc(`x`8CkILgGjKsUG&mF4X;+UYpWh6H5hmXYnu6+iWWa@X3?sK#lN6=8u!EGdHBQbM92(TAD1Cb#8~0$YT!yfN(kgTq~7sqJp>PxF0me zIEum(B;9}ZQWcc0k%K_-0J5QAx);{B3?Jc5svZ_qZ*vZ*%!`3}-9imngvo>c^xohRPf4y;=Lkaf`JeRoCTtc2>P$k|Cc2M`Uos+b$% z>QYa4XV0BCkV$lLn>O;xAdg{6!v`{LGdH8f+c*wNF3OfN7&}z$R0TCnA+?N-@!t~; z_o{z`v92PSvoOv=-&9k7#qukdL>>)-(|)W{VJyv@k>M%GwfRA%sBW@+@^s09fZ_hz zJ)oN**>!yOaBmV`-i1&jj#!&zX6cJ?YD#i3aiZWPDN6~X9&dikk%8f-#9k+S!8RY9 zN0VX+i=eUWxOA>TLj#5wghIp`pSh47sG)ye@vU6Z=7-M*MS1VP+d1jHeizu$w>0*? zIDM-4x@NnzMO1au6)JdcsRmZd`}hSzYEJtHl>6gDjn&vUgOd?rD%IJF-05$$(WJxm z_i>1q;!Eb7?WSD*Os}Fp)7uF5h<|0$iyh>|CXkz0QN=+2$;s!rtubGvRc9CITZMm< z{-Jk(bu|Aw_n?CV{>0$Y5;2~T(9GVv)|wSuQ2NtC=dp1M<#X~gEa1-F>l;#HL88@r zn$j3qRkR}?Z&jp2^x&Rg{mZEDE6Hf^hoqWPnDOV`Ww8lE&30|L!!Z4nKqgRvu$v?G5O#~2-# ziS+xti))8wngHB*V#-nj!+QGF;j`H60nox{85_wTpjwz748&MFU$=&Rv_9`YomEuW zQBM-;u;O|{9H~wAB~`TL-B*TA{F;xEYOnAbdUK{(5~KEuBXK;x3z4=yXDMmo7IdS- zd1|L3OHXJrSiHJYk@S=~c?)QrvNw5+)WE~L4&s>YBZ*acEJ zzVoTr>7E=Es|~N=8?Y(B3q)LX72Wt!dyja@Z6tN3a9_aI72B5L>Lia!0Ug@3EiCr^ zl!6uVqY&l5tq;yXujy?!2Z2;GN$8uZ&iRjPqgRSbt(ksLP`lK}$kl)I#f=Fy4r4RR z&=cWxxJkl37KfBx7-#8!mI&}kNj)CUU@Dr7IEfCc_fFGOm#Xt$K&={G#(2HG5p5bz z!?B6+&D8QfV)g#RtD#l*!4WG?BB9~QA3oU++L9Zm+$+M|4Q`*lb=BWt(Fh3D%04@? z3c|Dwn75A-Xu0MsWpE5RNt~W7qWC{(PIifxRw@BM20~L%Mo>$an<@dt1Zgj3Y?oZ| z0Y;ZJxB(NFwkrW#4MI~;Mo>#DLrqgtF)){wvH~XsGd3(&MgqnJZL(CT->l zwNrtB0g7(+04^Q?7rzjffDk7qfSZ$3@V|x-XCZ*JnLEf5pu!GNgn)rAXmnB#M=xiP zwT&w@&3_*Oj227)Eha1=u=nQ}+2WToN1JoRW;D3yj|1n?%{HHenE_SYe z!~MtmuRtL1-_B+h77zzVGq4v3Yz?pi*#iM;vdZkPp02C_GqB}fhGzDEE)b}{nY$Ut z-pm|o@OR~A09lDQ05d4T|Il->a0WTLy0E)|?Ej+3@mCmVmu0|~QV<6RAlTIf?XUWz zLC!!6XxqIw{yAAYFvJ7w^B-UZ0$W=BMZ(g}kwY5{a&iMINdLzKDnk1$vj(~X_&7N^ zUvY8)fKC9Qr-cp2U*WZXyc~glEB_Wl8Tk1)LL32BP!d2tkQEU6gXZI6<_-k7I=cb= zeEwAYFGAzu0$749Tmj}lYY-UicXX&2X!Q?<9= zd;K>5`+PYR^flyUbXfjj{I5<@65hQ&=s(4A{*I^swt@fz|KR{_-hX+x|7R>1|Fbeofd9>)3W3ft5Wx6*^bI-rI4z)G zT>qaJ;BS}ze{=s=l>fKU|Gx#vy4ljB(D3#kFi;)h z0{ZK+0kCm#a{eD3bm1)Qpcje@^sN3?0ipZ!zbR$F77)w77LS{cA7JL}Z03aqJ$fkO z1Nd-3H`Eg7`S)l8IM~4uSEvgBO3x2q1#w3E>qMc$!Xfd0m*^kF58#mejRXK3QoqqF z0EhH%BnaS;`40}eM*9CEL1-;zzY)~Z{5OJTH+MF( zumeKhBUY||zvVpt%Kw@Ae-+Ts7XKnXXfO+iJ@mx?E8*q+OXA@0JKs*=*6t4oEztfC2(8}XH{^m=_D3k_ z6~_VjoeXLVeFOfXhF0qMTMhMfguaEq|I;^KuK!4X|F>(r(BW`|-Vl)Aec*)>b+mVL z`6E75;`9fEQg{9XLV5l+=7TC-pm*)R(V())4uGW0(9FaG<*3j}%sEzrKrLo9?tZ0keXZ)zn-J=k`>BCT(BM#k$8MDV%NFMRN^ zQAW;`n|6{kwX7lHBQx+_@{BEi`1WUyHITv* zLSj83kQVtJ_cY-RIku?*f&oL4?)*cjKrhdKUiI$B$4-~Mw}M9i2SD)^4pl0tYm7v0 z=Mh|#J{9ez>xjM~PAs0YLAslkg7(BCTofqwTCzQw_}1&YL2Smz>grJTmw_~%ivp#- z8vd#c?y(jU1 z$+txzZXLcb6kWm8?j^g)?^pb@x>e3aeb{7i1`lp!hPw5rKPNLkiz&l6D^!*78&Xx6 z*s5Dd5NHf_Z|rB2w{48X7*0mVXD~Ob26jQFZ#; zWw}(u_2VSpUoq8;v6{2AKQSd+(z-!^W=@AJ&SERuA{^F$LzJx|T?76NIFEe+}BDKd%+RikwBsuzSP zCEHl)B(6N}Ag21RXMQ%C{;bt zGI=ekT)vB>6V-$mXJ-?#n-kM<@%=5`Hv$nT&A$2-Qe^wpuM`@7u3PRw1|CrPeEKEw zyb^kK5jpJxaUxnFcjl?76akkJxFWF!qKN*!idyh^E4 zU&<|=IdrwQ$$pWOtakF9*Mi1>N40|(PoA&*kUT!0RhD?bUYM$=q_aqe6pu~cXFO!{ znqajh6j563qan$3r7rb|M;%QMl1n;L9Bv6r=xQik+BXM8D{7gy!Bmk@dP(A0eI+BqYTb^T>_OR24j=H7S;t&zg6L(10t4r3`crq5TWJ@wF=??dr z`0rc@zu47QR-pD2fGAgElk{b--{||&DePP8N!?oE1&^APHFE;P%2!|1lW})KXxTd^ zs z!(fJQku;iF#|;775($*ciSHUuVXdKY%)eOc)p|Xrl`x^Q$Wgw$X!YgOzHA7?**y1E z1W=#%F66uugr>$~Yij$g!Tk`!?CRDd`sXKi=5ay<>vy;_avTlL8Q4=g`|N?a+n|ye zre&*^vT0HA$gtr=}eQI;#uk=dtbMtpT4Yh`R4A)XZ)t6qSh6MIt zb_bMzq1K<|0yy4t@Ql>=wFP=Wd-ohziTkIeWotcQ`PXTi+qvCKvji{@RX)0}Vs0*s z0{4E?N+V7yeYRV)+Ib|5#+0>*nLqTJl&Us(wDFeAt&cZ<5W7CQkhe;c9$507%itg0 z>Kmyv;qAT`2Cgc7#dQ=N;gLramJgexGUmnF?wExX%&K%AAZL8qFR&3gY9c?JDtMVyc34ZHG&|aY=Wd?0z0J~3{5?DF-DURoxvU?0Fz4-7s$AtPb4?}`#Oi^` zmn3kS;Ra`aA_J1#(#8dNAX#Jd8VvCWC$@M!BwY?t?)Ws2&#K?j6Az`$aXF@f(Hnd@>G+0LZ#3*JZ+)Uj08jShF>7?~AE zES+V44^K>n(%Me#_#R~H6?gJOfO0|g=cNo`{YnmDztdBnBGBT;d&kP=pT?*>_MYb$ z>$@E(Raa!09xXi!W;7!ezskrYqbOY?)G(t{f`5^M<%A2Po%08I0<9|o%5v}SqLt_} zHN}j1BuH|3_dILkR3Ajq8#uzhO8R_By8_97YaUo?&wXo+USMFn4c=uB5PS(ZLwI1p z#7X(!0EE{du)FP}mP5zu9Ab%eba%YuP@eUaEM`6xpz3+yrdGA$x)Trw_q`#*QHvFc z>%c?GGhXlPilqo3Y0Af0K4Wd@97NA3t?`vU!k0pzf(FYHHZa*jssXJV|MQJ@u)t1# zxVOhF!^-@?t9I|${jGvm(!EQUJIq2wD2?IxQeV=GC(N+BI*A14tOx6o$fHotMR|2- z%^#lBIybw+m0vLtGxhCCwMDanRm>b7)aQ5+4YLqBTEDaQpkt_*JWFv~I7BR!8A@#%xr2?M}Uy36+3*fg}xNL6LBe;E5bBaK~{O!ipO_tq9(7^ z{$fNkcojb5aXpbf*NujSk&c`2oyof!%9EiF;{7<1#C@a5Dwe|qj>4ufr0SUX#Dz0K z(Wi&+>+SL@R-C@(oYbnrnC8ZR9HRFof`tnZj#W*6JfAh})`FT?(8zGX43F#C7MI`0 zCpB3Eyo^<*G(_hw zG-(k!_9QeqMk?jzfhBmf&a`|?(aE5kg<+e+cP0awX6P!VC55-|VV3Lz?BN>DhJ3WE zGMBn0H#K+ZI0y}UsoIKiggT&2!aaMA7F+!Q#<2DCG}K2-j~=qY z-Yo^_hRw%g?Tcg)rY_4~qP5>lvvaa<{$07imikOg|t0xT^t`GLB z@CL{zKQ*A=4!Z5}#5X$Rn=F}|IG4aA+LcNkb1S)IRXkZqg6KY{GnPRPWMcYT-cE|= zVilsimDephl@MfR98qQ>)k&TA^$vB*;IF>ZkaEbPaunmR)G04ZUNGsE*{!z|6#hGNS7J zAe=FWP(3}E{h9aYVb_p5%k~)H|zMA zZ4->%I8RE{q;_WcAs$U;hi~UCqBNsu$2i>`YEvHoRwcQAI@nG=#qyK6_(HPU<`?(4 zlUK4q!rRh&{v`rY5K|7hoy+}LE9-TM-R@ouf-1jPf})}i!@$&i?uV0i(OZt07Y8(e zPE73}N>6O3g>{|xaR7fuId_>JIbqC*k;mXAqs%MqnmrTK7v0k<;^ANioW~o9@8m5K zdgG0;C3h}=Q@*!Kg(UB2DTuOqHLDAwmM8`Lr>cKsn%^e#xTT&$D0ZT8ON3YwL@CKk zb7cM3%e_W7E4cmhD17j1T8K@iOH<<;>;!K#`cgJk1K^KEHsCijOx#81Xyu;IaA0x+ z<{hvgju%H=`wCP#HtO|cStYh7E2E^^VKf;9@$zVY{_)YN=4aEvmU4nR1lP*8MU#`0 z_EjQAW0*12ZB+H{gw>W{Mm1LM9A2#bt{yhISikzVrRec9DyO7_)OXa2Asyc%g;!1= zxA}n(|dcM0;b-e_Vx!&L|rBK$^dzxzndn*VFD*;x6~|e$sNGHyZbO6xWVm zM|fd>jtXcph-Yh3H1Q9stt0AGpDHoY25SLYaD?i{QY+*>;bYr7`p`x}kM{2hSsiCjUL=`x_-)h;C8HYUw zj+dG?HGLz`H`pwkEYdWe)So|opi*6)hxz(PMzj|{DM`EPSUdg!CYmNy&%&>GD!ARp z+N@t)V*ZFht7m{XcWufIu28Izu^ny=T2)RLe3svWo=(y{v_ZH;M0EW9)Rg9P?J8&CE|l`v@+kAYN&EV1{`46A3pNJ zR-KvVx@6l4zCYgjPMv2xRwMfpUWOlkeA}nwEuV>V;*6X1D@HwV5P0q0*l(`*k{4O# zQuy2SJKK7lxWn7!CUfnt&yML6sL2l}zY3-5b4w9p)IRalxv;ewqaG>1{uJ#*l~c-7 z9*ncmq$8&dEjdb^idxqs$U&X#R}?iiw#U>UL(r-mJh;;$!N8z!MPYn?dZ_1rNN8sz z-=>w;cNg{hapk5SWWc==UeAr^qe!ay=7}Bs@$d)0C2Nn%X1D4|ti>6ozlGv@C{2U9 zBWS7NyD-a?Vb&;0W|G|(>*)TSE{kxn{UFD~TU#lG8R?Y1DS zRPn)$D0T};AU!>L4(3ftYqnE=gZpJx0luVA0bTm@hA{HNz}I2rH=lBC&<++zCztou zlks@wb^Y4%TO*@D6bP*6f!M2P*h%k5!LJ1Z;8#zL@VE(@UFjHTMWuMI`+!4VD)Lvn zkQm`{a~CSXD130eT~mqU6duG4@-q$pN!S6?ctJnc7Z=S4C40N zdDjm!KJ~wn^$0%Qi~y4ragjZ}YX=JxW2Bp8>lJF9BPn-EP~RB3?%}4MJ<0pb2%%r~ z?8O0SbvZ&XI=&5a0D6OBKxH6q}8Y=)&#Qzgpy1Ufv0bK{eSGd-g&o&8C5DmNX5`p1j{s& zx~!}J@oJvYZO=z-ww`y^pze!1#ga%@FlPC2N7VCedHz>9Kl!K*_)KBKw>U}4ep%M0 z``C!fYNIZYK(<` ziM}l#*4T2kWmcUlwmzA4_Q+F&O^#Er7@v)z zw=~8YF1MS0FdiGp`#if@+%hjqs<(2PYs=s3;OqWLDNT@IcJN-*sBxkM*ES$b4SR7q ziY@P}8kYTkUSAraB2c7Zs#9h(p+Eoh1D^@CuGaKZlbnqgLi5tOa`N`)k*Z9N6mMwY0z9Y3$$6(NA)kMN0PJ zPw>!i`gRysT~7ZcBQy48iOXW;!L`&q%u~yT>7KW33F`QM_2qIm_JZSXc4^5y$p;@) zsX=&ueRm(0gE5D5;JejmN-aB_VaxYE8fV~w`${wM8mhC!04bl@nzEUb2g9HQ62EKV z93~!TbG#p76?>tfN zm`C225qTFUI(C)A#6K7TtAw3LN=`6?Q2UHceva?eydnNNM{!jo5{T)IR5Yx*qLBMR zbA`0>YuxiVmsYFKjPK7_@ZJYX54FaMpSOp5o*yQ`FXA9EAO7MY#37zni_#QgP@vs^ zqTCnge`(}E`zGt#Y&@~39lS`Rx1ad!(`zC-%ON;pTawXqy=WzgTq?T&f-WZ1G%}Wo(te0W6kgeDNJTSWNBpw9XWZ zIx&&e3MxUDSw$T)@hGJdJ@c!jc&>+kMyLQg#D0U57{s`D+Ogn$$rA21V4u5wA1{Zu zk+J&ML%=zVL@zmxD@INvne|wN7Spu#tF7;9CjaP2(9Rti_=oewP6TUuV3BA$NS(aFT#+|JJ zmcMwZUFpl6!ybZUBh{M|M#RIWreR)LuA4}q8R?m z{W=2;r|$W)DzVgS#JSfZJikz3ZvLjzHfCYX!uaIgASdf9*5}D?P))7w0EMu zUjQUMdP-zpyTok)$$#}Mw}nh# zDJYs-V54?*3yV+(Jq}p_!bd>tN6e^##Rx%yQ+tMRD{(ubAXYop4s&#W;+qY9xF!TM^=3{W@YC4P|c%9 zCJJAXTjwN1Qd2mxIENZ-mY>gl?F`Wfs4xud$4O+lDZm;=Wz(vy}5mhM$2geZQ=)kU^I*#?we z%>!!2S8`0I$=xk(V5CO)qy2KiXc9Pr11gZYFlI-6cd<3kFNZNHhw)EnB z_2N5?)qV384S-{pe2EI}9hc5|a-soTUW}Pmgp#5Cxj3?|9OJToPqnBB8REA&vgb>~bUj!T)G~GJ6#*%J@P%*G38!IrL==BjYy<@X}*A?mGWgYk-2eB0WM-6M}ua zpichONnuoxUc?HH?Ss1F2T2h>v{dHrp4WGy= z%n~&d-M&1nwcAhuO!b+5{MWl*woPgpb-ka`_#iRmw!%h#F>gC|?WJ|(whdLj-Bjt_ z0iu`pGhh3%ng>KD6UUCpv-@)N3V=g$pPK4)N}bRI@Wg(N@t4~~)$2{jdc3vFZ!JI{ zDkvoJT6#8e^wPo$H$*Q0FD*r-pFizqgCa1#^1{yG3cA`Dd_y1LTrl5p2<_+GV479t z>$93d`y^$5i+@jd?t-Q=2!G`<)AwP@W*5^W-y@|hy1@fauHNPKTNgZS(=7F5B-^x! z=hAVw9ghe$mP|N$_ZMy2XUm+pu#_mh7x5PG2H|*MeA5^TVs-B=b?xBpo@r!txBGL- zIjc`58^T}i1LiU8gA2rSFO60xs2E%lYz5?~8*ZzAP13>WymbPX&FlB@RJ*@K{H!qGz8s7QyO|+V!e~&vxa$xx6_`I4C+nF2H!T*%IJgi~ zejD-#Di#&_v34F|x*GUSj%RqcCXD6DKs3>>+WoY_#uEiFF#Mxj&*i#&9MjFOk z1AqE|a61N1`O@nLA*b}Ts6ok@U`lpMz&+Ejv{>V#cJ?3@E|>2DR|-p60!h?EL$CRd zsK(g>CXa#vHb!emUbzPJs=z3TMkShoko?N;wOVPf+GSI)eB=7LUe#JFH|sE5$DSoR z_#2K_4$H`$Yi}JPea+EI)$EskwV&(jycRrvB3{wzZR3VjOJ0SWaUQH^k?fYNyt&U^S40uGoHmeoj^|qO7<}56K zWL1a+mKVZ;G2vW*`DTRILo%Eo>4UB^_Cw+!3oLBeN-oY(*4`&;HRN7B^_4TvwCPvz z1I81yJ~U>hLztFZcz|;U;j!$V%OHocw3HD>udL9I^JY0b#5_kv8DtY(O2f7NB^eFl zD&o)ZI4xh`;q5CUW|cg$`G0(FD$RL+I=>(^GMSKEG9TOsfQ->*sGgOr^~tU*TdmlK zN%Aqezc;ozmKa#AzvTdfrvOW6?Sz4gYu(jJlvEReJ~?P-X)_gLST^nM zf_s)lf)Zh8;fp}Zv`Py%zhsFJnpeC{eP}k?Al9S%CWbenej)vWH2F*MTM!u6_#b>>G=C$wTDDI-?*GQeEw8w_Pjjau(75JE5guNs5rA@2yGPcnDg zZ|@poRlUpKwEjw~+B{*?rmyI0ARH;mdCjt`PlRTCv@~L@&}cb1wU7*_EQj;C1f;a{ zV3cOj%5=ja^#Wa~8MDIL^ZeS1RI-2)?7ml~u!D-;X-$#!Y= z*;r>pC*ddZf$612&OUL#4f)v801bAJ>v55$m>%Je@YYadgBQQ_Zniu*bw#4T6!JBx zHcJ!rx3>@qjxY{iU=*g1WlerQq|2T-E(vTjk)%!P+iD{6H!mfB)k@(}4>!b?!8T?W z`8pYv=0-=BJBAr{U{X&6tVc1>U^V$zSl01`u++y_A~RShTIodGTPg4wQT#OJWj;Ya zZ4#c*M$ekjV2v=J$(a##mJ)ad(c|IGx*%YhQ0e>v4>s)p&ilIxdcE0x7pLUSR8)i} zV+9&^w$}q{A;*}1>>&aJ|Bm@+)Q!t{PcagvsC@@7Uv*4MhE!v@R*KDFg9PH*djT=I zkDcRuS&N@#bKmIiOVr0|OLD`8Z-JD{+&nwh74ceEagKVNtDDSg+Mhv~ za0d~elQK9gJ^<2RuWlV+R!`|D=k)^iXa+xJ z#$96U<3TB;uF#3v+IzhmexzI)h>OYVvj(iWo30p*6`y?DSMl>flsEO4cV7n|&R*M6 zko>0$X736)+?R%2yv&3{9HM8s)F-me1jS_mNwYnSk$v|@G5AhspNR2&KGiFiXVbkMPJP=^N5%oPfyOQ9kD8hHt{&2n z$y@UR+gBE4i>5Oc&%q5Q>l$pqP2xDNGj}`W5Eas)`?qX(nF)&BM5hR#C>{OxQaLJ= z{qRb8>l41~>ksl%NSkH2cOKe-AY9qfd|jbzpej*+R88g$9X~%)Tf6g4QaZB=k5ZHx<?+?x}m$DfZ=;*XHT~t)+^1Nj|vt zwNCw~sIjD_lGeg48f~XEg20Ml`h#dA_xe|5ikeJc!e9}7m3j%OR_whfwzH+@7u0t|LkE7-H>gei*t(ZSz=G-xeXCC8Qvv|e2 z6myT-%exa&a*}Urb!8gHmkMW7 z7h#e64CRp+w+#%BPMB!ZU*Q?i$i1bVM3J7D+hPbk&j*A?r;h9+r6$VH*6wpk zjF`~wKqOqTOzgo~WXT0UlVYV(NL2({tlc4@uh`@pF8${X;}a~R*JIw9btDWl0o|7c ze}thmXV=tqZ}w-e7q$BhSkVt6!U&x&Hr0kIJ~tnPJ_$z_`%-1MxS&rrzdGk-{kYe1 znuKe2AFl+Z{&lh<(@!Zlv-Cu? ztju1%*g*kq_sNfLe%=K7D_fnDIo2vah{$=3#<#;!Gl$-b$nki$O-ud?h;5sgvtyW7 zI71jx^ROUu^65?w%Im}mtbS~A1j>(n!C0ZM{WcmOxn|hA+I*t46Q+Zrm{`oWe`A}Q zj`4n%tpxD+(^riMxPRb)O{o_$QunBRa7>Lqkc$A0&hB;~We#BC??iQMC87Z+sK>7AxGWyT{+w_j2$;_u}rs)>AA$(LNYaWNu@( z%Qx;yi*!zL%}@pVM24d_0Rc}Nf8n|x!9o1+LOs3!mKix?&uchDT8;BvCTOdX`6TLg z<4f^a91Ho5B>B{@R_$Z=1(Ape`60*DGlq_4*D&<9)w0wU%rl-%14MpBj67@A2^qtD zdK5qs{>MhvGJ&DE0E!3!nNpTHz4FnmaW`)=q6V<`BO50#ktg}Lo^E?hf55AtoQBVG z??!z$xo+haJx<3d^j1tz7|;hvhBa0h4XaJAV+rr(R&6J+DFfgc^huib_C^t}A8SJN z2wsC(kq@tjqKk!I+{*zPrBqjg4Vj}=dD8^@U#C*rDna_C;Q zC=IA~p&9q@!C;DL7tBO;e@qf>g;>3_h;)+0S&zeLrJQVhtUP#j%v$d;^183P;jy{v zhk0BJS9p&q{gv$d_lgd|$i?D{)dTT^I|$=K^-n?HdtQwaFV`;R>jAg*qUz75qx)_` zH0qqf*xY#(3s>ebaxd=*1r} zE|v$@FWcfH>@%=_VN(Z7OWjKVBKauKJs-nT~ov*)3l~2Web@ z1J>(r1(z-kf6;LA47=DLaD?}?POp=1S|Mf?zz^)n~N z)19p)sP89BTUEpdyuBN{cJpDb)f~KDI_B1~L}GHnFN+gpWdgmxF~(9+`IK&=`wG7C z72Jb|&N_f^#nm$vk8KobZI*&H-W;i13?a|Taa*@|@(ZUx3jNV!bv?XsY+W7;&Es~c@ z+*X-*vAfcLB%wo;k)*eHPp8GEjLQHFvHuvH-Yivceh>UHDYqt;Hoppr zUuCNd2I>xKZIh3vy+(n#+%o145>oFr1NS=I~@urJDeIdY2= z97?+sf7Nka0``F!k;AVKoV}d3k6rj6Pw60{aF&s8tI-U?N7Wdy&0?%mr$B{Ey0n*X zs}M0*H1lY9NuQ@JW0X;FtE&bwgY9Her+{JH8Wybh-%e+v3z zjd-RnAUIx>%u^gfiPU!?gM$gohm!B$^SIqYsF;lh5F>uX^G|mU2=}9`a@(8%XWxih ze;VxfW{-(6VzDA;)0nv<-Puw2OB2kTgK{h%`|EAYP8_k;3e3Zt`XEdhB$)Gx5$r59VHK(uy`${ZD261%I zF5yC3_8f*7>)Vwu%X}E=qs@%0HBE7Nf3$_2QU#WjSaoy4e(1BJ(DS=VhSJmdYaT0F(kNP>}JJv>XPG?xXol8Un|*re^5Gp#OkWyQDAuYd>{ zre-gx7MT+RZdQ{Q!(iVuSQN$!qwWUM zhWXl`bB5=k30P+~bwo|wD7Zq9isxg}*$NDFbz}1XHSeIg=_8m-O(zp}b}C-u3U*0S zfdA|>C-^O|zRO)5&I%=`h$lY)yVF#Ef^tZ-PwkyfxLR{$zLE{Xu@9mHe-lk2d8YTB zt@Wc*|H{eF2|UK}bH{LZpZW;~MizL*zD+)2+L;9Hz_E$EPtWa|?z&Mwg=;DXUKXt$ z?CB4^bTrO}EiP9gVw?F{gE>GMQpq`(-j2V=UIoh|WqZ*_FV!={^BFOdR|%ei?(oHz zaw}OuYqdSxO*-><=pPKke;8HbvG%ni53cC(@5h5!g)H0|CEbNGQIX`Wxkw!<(rHYS z{Vp6iAAJIX7`d@H$h5ZHT^A?|VTp8XvvR~I80;g*gp-49Z_3|OO!M;99DbyX6hoqb zpR997bI93!%~u(5>!_Otl62sHzBX&G{WhbyUOS7G?jop%Lb`6{e`wp2VIo8MI5&{U z)okv+QHkI`wSC>MCrC?yYa0)&a)=jpIVEINC6JGid{NvqBcrb;$!mQu6HPe@{LYpb zt@p@*mzDQv6F`G#jSfq(`^%GGID#Ic9-NBC> zrXQP0Xyh^@h`aM8f7FH1TvG7*>|xRVS@F5tM-D3@0yvAvbYLu{OCjp*yHd?Wev+9$W%}f{;&xVU_e&)nK z-WREd3qOy(fBvo=E;oYmGuM5-(NmpF&yDuDZ)CVP_%6amagGdcPY52AvY9b@JKD(q z_UVW*m{6NPJ5UBrn_f4uHG(5%X+;S4Ds}wq>i&LoSUzSxy%EwXfN-ql(iel8H^t<9 zHJ{)@VLAq%9{e0#oTgWa-G5U?xet+Yr-~CoQXc0}f5d$jByQo2zfHdluc>c8_d^JZ ze)lDz1KVdKysy&Lmc|n8d`S#b?h-q8Lj{f8NC8e9XLOV7ij!t8$M~vH2PNk90Y(=4 zpt$Wey?CYqFWEf`nji~is?nf~Q3|$W;cS(LpWm+-Z9P1HA@~$>__s?)Uv;l9$y7g( zE^gd2e;wc~C&Ij)IM=liWy+vwOPyoPXT*E4(TsFjr*B%|E)Vo8VzdlA(n>k;9fcti zhm8Pz@YXFTN+k11&vKiu5`N|Ubd2GTi^S}Qo@`W1Awt$3b?9Px=}P|=ey_1v?6_52 zHKe)7jxKTX0Au73VXL;qCf9fbIo|mBYq#j7IyO4Sq`aC5%1?0Nt3?$PF}CTUx%t|D z>EvcpE<#rShUDbiaCz2C2VN$$OFdB$=HVT=*8c}N{P>lZ@wNdImq_pdECxwgQb$Er zmwNC4pqCu+0s96?SyD$uR<|AU0n;WCHZuw@Ol59obZ9alF)%nYGMDi#0Tu%?GcuF$ zL?f3y83G7@(w03V+q48lVNfs}k68ic>f;WvcR(O%{`VEY24V;Bi;IhL{pAjj za{;?UKtL!!3y5$4yC4}sKxcpf3*eLe19XA&z})Sn*|`8- z5QGDNKpzYTyL*Cd0ly0dXailqe^WfWS~V(!&F4 z3w8$}$pHpxngAVFF!XO@&A$z}0RQv`z|X_~Z@7QFe+Pm<|8fR`Krk0qAk+r}wFlTi zoWTGcWlbK0H-ZZQgxdZ#1UkcENPnOw5aJAfv_TsDl{pZgET;zmA`ASdJUGZ5;);Ot zz#-1ROXU3>2H9mLsI3Cb#RUvS!0~?PrwDNegOF|a;r;t$ouDu;sP8|(4g$5c`(1>s zhbylU6yoLqR#W`P1S!J1li7n20AW5pJ~2T)0N4!x_69ld{tj>G;|l&u$^To7tia!Y z*A?aputOFB_J`Pkk^k^~;XqF?0O9Td_V@i$@n3|;&kwMLfDiy1ussBdcNZNg2HX9O zk%#XN@dlXlA!m;t!1w#_-)~Qm<7EqjI{Vz2|8>5+re@lTMp~SISNyL|ULNKR@Z}Z; za0>_u0EC5v0V3k!0RR66`M3Q4mHwB1R2K;OCpEsicxq5P7(o2*3XrY)UlpGJ3@CoyQkRSa2pU3|%m;ZlL|2xY6+u;A-gp@s;o&Qp^{iXl^ zQ3G8d&OZMbAP3n4fm{kL7;-hB|JT$Q{P!Yjfo&lkF8^1nh5#a$Lk?>1{BIk7A#i1g zH`rDef&e-EH7@@<1Y~q)2o$UfgF}AbGyraXKED5>Lv9<$33;2qkw^8H3XEK)|1v5; zK``6jTPGka0sy+Z1AXxLki#V)EDZ4FN3N$W*!!=!2JrGgVF;uP09lG|F#xaP9TErdD*cN@`2f7icZeUrt8#|~0KBSqND#oQ zc88Gc8g~fEu6c)$>{@pS$*z5eknB4DA~7Vp?j1t1>)jzFyZ#+QvK!nXApo!89YW?} zbcc|9CU*$QXZkM^M`i}RLr6=TJA`DnaR-8&z{m&24sjLj0?LK!yhWi-eKE zKrmG0WY?VjfXGV!%m~>AmpjOh zEb%UsFwzx@T!%mO$eLh(ckD=K*niZ>j9u^4$Y8F>hY$Ln6A|M7NBZCM5JL9P6?rYe z?m8@l?1rne2mFutNQv8Be|{qmF#NAAzOz9#=#PH!BfD`ILHIWUd;ZZbVWc@6`3n3? zimVy#41_!U5dxXoU82aVlo#RP4*uilk#!=xV1GCuV|e@lkuCRs`~xDp=5+@Jklx;Z zKxBBIKOnNB&+d{#MtTNz|C{PR_Yug$9obUEUk?WIvicwX>n8yi>riZ|~Mr*5?wII~i{^3ERevj9Q>=-*am)qgm zMB0|hW0uD9^Y;!1*sS%tJososF;UnQVq${$Xraw=Y0c&GRdQqFEow~gBiW(7BpT(d zi}{L`Yc8vT>Bgrw4R~415}jUn&UKE55#oOwEhJc2YBX^R38^m(y6A_xXr> zV%4nBc~LWt+m8uj3fZ;~wl(huVsx@%yOs)6{N#Z)4nCX0SOT0FF*5@Kal4B`c+gxZWMnJbLe8_s|Tl3ME&ed48!1mO3&7~!!Dx2LQmS60VwegS?I3S z$QE&SYlHJ}4b9g8zk>=eaT=Ouqvc;{ zu`4Th7&f_ws4kR=!#|_rvEK6yOOxiC({}6EEE^!4LG9dSE)R)AtQdzQ);cS=cG9N4 z9Nvp!mt3~#*=agGWzlTh_t#FFtfn|p`3hlw`d%$zUi+96ZV@lyhIOh!_4?AS5`P?{ zidiW@HYUnxvX=J8&t9xa)S;Wub90EPMz@=JZ1@yF*YjttjXUAj@qocED=FQJ{Lf-P ziG=)+rer5vYYJ_#xT=8Fd&6wbt+$;BJP0lNM#OI{&)kJiEMM#IM zFm1!X(*?ak$z{y{8uCy~2RK(w!-iYFrxNkAUQFOw|LvlkjblT>sJ2|4qJ3nl@?)QO z0VzRbd-sYsIWvaVrC+{Mxdm%7xGh{)mFzlut(*vE za_2XGj=(y#2_7kg!=w0%o7#79gn^uKEOirvX;IB8uSI_7mR3s)f{2}eW5#+iL(gqm znLm>K=ovrp9>EqMrG(gu7H!flWvbJS3ANpd3R{M=T0W2HN~B6X6%umK;f_0S0;n$9 zNaW-bXKYDZX@vUfb!n*Yva!-etA!u=3a?s*^1mvG;;6dVkgpR}%isCFJE@EB&q5G< zP2u?PI6@J}iI0g&E~mVIYN1kxOtorwZgsW~uysh{TW+6evwr%J`My!1PQHs%x+;zB zkwg)rzB)6Rnluh2-FeTvKPHE;xy{#O2>$e$P(<5*WlqOjnJQlDi6d~#~$hjtvLmTq#T zJn&}2&HquW!u2PAN&thF11+j&Ly6r3P6;9m1D;sCleGII@6y`|===6S87)78nM?1lqApMJwoUS8rvWNS7dyo)E{UCRp6Hw7G5I0+&4Z7a;r#rDgLA_3Vwa-r0b`b`uLRv~ z;Icr_G*PT%Vy0(EVKU>2nH6DhBYye=c3--E)WZZVQferb@#iTFG)0woM;=yRCyk9z&tsjaM-hH!>Z}Q zlam$tvJ@l<15h2Pvpj90g zyx~b;>IVj=H`__n92gjQ^S*Fx#B1zE0fD8h9%!f)aH_DB$-#B9#Neab>A3l<+TG>= ztyxlkfk4ntCi%pa!)vsLvcsfeh`~JB8eNb@+$x00Cg8HpR#hSAKc8Hmdqll)HhPgOot5cVog=P zOXeQ#_O?8l>Cn~PVCnMYw`$ll(2ZDUBrJS?*3m!q+GCbL`sBVe=cA?&C_Y5qP@v8% zZ)GvN@;y=BU~rCPk8FUW(RLHti+nPw=lgH5OR$O_yjl8%UO>{R{N($Knw(ehH1eT( zS04mss2eJ2sp7ilK#61_U!WgNt6`^=*mT9%wZ7T+>Nxl-6|WS$_GW~tN_R@G)8tNn zNH*KzpCaykt<@8sFUPWL6Njx!2;5n5R#Ua&6w;?WnG2ynHO8`Gr?5Z6YC zGNLeUP3P*d(Y0VdM~dW7W;ve|X70lA{(&^ZbPiZpS{G$AQF zMCA@zAi2#|yqrfm;@7vak`f2HCXyn8d1E6V1ds9o{M&e&3v1D*>&h>N*8pu|(<&P@ z6rlTF812Pv^EFopl|j3EF=bOS&)k~xs!mCKx}?)A76ydk#(ai<|5a1Ks3SUmK+ED) zGK$E6g5$%PxdBlc|Pq-;bw#^02VZvdjl#OZU-zZWVIm9|Xj? zqlN)@pDkPQ3w?MzCvBa*R&z7|f;XvBf~i+7Mt|{vRzTS&83C2EGupOKL}$uPBZ-?uk4?d!#`B~7=nOAd5f$;HwoLxPpmp{dw9HLsR}t@jGq=4gnnk1H*# zI5%ExdW_$PmQcpWV?XJ0f!F#a7e7rCq~!j!jtWEpV$>CT=sDTt7=EbO_nz;r8N2Cq z+64Gv5;IM8Lys_r1$*LuINNw7%L~%ygAM4IfyrGS*sH>WYHxkJGtLj}?a75;QSm0bu(c&&y>DQ!s&;6XG1aQ`hgFw&=)}3gswDj7^O4-(S;Ng`(yheA)H*-W zxL^W6CEWny&iM;xe&rI8S@2yljrkR0yOlbBooWn<_%we(i4j+3 zPeK3(kHShtIc{v_5zOFo55A5sCaczA!;z<+4{E6`lo@sY4O&C)LF9SVj zzL}(IrO=RDX;Zy_WF8IWV&KXj^&+dA{;tv;AW}_)7_DIrqj`hwb>9!Wi}TqcRbh18 z;NZ9CU7x6!Y+eM_-Y+4lmp(r_pq}g2N?W;McfVx?U)MSg17_>oezt`*BHSpQ36Q zA``kGPJM!sqj)A>D)Fj|qmJ4B#OqvE5U2Su?$L>!=Z{%On(}xZ`sWLIEm?YUEkH{Z zfdqf>Hxt_j`3Gwc{8@ozo~7a}8zqvrYV(<6awS#4+od|8A&uR!yE~#cQk}<1KVZ?N z6>SnSmSOCFM&@(U2z@6MMxu8o%CgS~?_FSU?R`3$V{l^AbRtIn_M^dh!6f>KsWGOM zX#k*$KHl`a(x`e0muoUfk^0?KlWpu%)5Vp^ie&A5y7~ujZG3BmgRrToduTw{Wjehw z@jfVZMTCjI7J+j3-pK{A9jiQH?OA8KvGE=39Z{F|%T$KDUr96o}b)z}e zK(VhsNV27HUkY@^HmyCXpzRRT+-p>IQ>u9~Y`jvZIF_O;f|mAEnCBSwW|V{MBEm2- z)jA7*KeZNnE!zz3rsGMTC4{UQ&20{y)WGZ=y1Ju}9RVi21-3}AHtuUaRNRT~gqLDu z#@=RsFr&x2$HGsNtjqA5Gdwv#WNo3zP}0yk=Cph--yYF8g5(FU#71VmyEy;ybwl%t z4>_m!fNSYyr02bMu4L-l{sNx|BJGqZ5YY6QE^6eK7hmJl{ibtLg#zHK#%VJQA=l9p zc|X4PD~!KIO%>bKfWhqGROOlo8i?H zDTVufc5Hb>D&j+60VkHZ#ba{H=rZ^onu~QkRgond$t;a_jD-w9SEkesPW^IpS>c~+(^p@HgS=tN;|AJ$G zFY>6ywo?qr24R#oEndH8T)8REIZ7QHI9eTlYeNvoVK1+`-Jm*xi82$^SC)c|hdRno^y6#=A9}$J$#1RGvG;lpwgYCfUaFPH1|@7Ca-Mk zi?;j74n0v!0`^D9S{N>_gET0&Ikfk)Ga}3$+9<30P8`xbH?Usm-?|n>H{$tm&Em*2 zv_=&3VvxWVOTTKl{eGkcZTomwq`o5bwcO^_Eg080wkbck&@b{ryZboVeG<@r2-e|! z9x=v{eczA7znfY)_QS;X4GnSpRp+XmFZ+sJ>bJyvC#(JWB!Y(*QdevFB#lOaPe-vW z_Ih4*$uI+mp%>4a)%8<(a?ZNfIEQxQUM(yVCU^4N-&f0J-=k%D#=7M1P20`4XJ+-k6dQaj;^vZu7HoYqLfC~p< zkoJ98^E4e=oO*-Hz`PouXDyqV{e3^!Zxnihz=~xkjrE=={jxXmy$Th{1a!s z-kNfiVXeMm_3zZ3zS0!ETVbS8-lI{rMxRltPKdFEi4k8X;5Hi$t{C@!B?HOUQBOz1 zOdG{opv*0NOk_XRb7=46I+>qu1^oriY?wld}opK#_XIpHY{e?|f!v`O*Dy zyM=&HJRWu$pi2gU=!3a`3x3jejxr3rYZ3vXY2T7`yuTzwz(u9$&a9O1&{A-PO16aV z#Y<(mpL(4Y@JkV|dzsQM_xzfgy{BV>{>eY**&DN>GQ3;4{tR9|WU+plr&_k0n)|Zs_0) zI}i!22m{BeSng6Ew!dyAxiCUJltwtghgz|gltz_?Tbgj*=(#0cNZXrOY%Iy)S>_2c zwjo(K@SL&XORnH#EETUFf152#u#Pv|(tvw6FD&;Yw#{$JvbIfEa`xFPrxY*ku!W75 z?WV}u$csl53s^0G)=MQ!CgO?Zw87Xe6e@m(7E@+IKTAed-CvCr@Er45>EOwF_QbHO_mqo!F_-={tBXMgH(zp^W%5 zjD-?eo+^=tY7K&2jyc-pEgPkq4-W3H8sHBP}Tcwf|0Ny(U`yd=T@EtcH>1y zaXs!l!~pQsTkEyFprCLj&qr&=0!cQcEUhQteY!9yWml|8!iS7QWhF8hfl(+pj20?} zO-7`DUy9zj_oq#_zPGH1n$S$@_Z*`odYH`K8`J!JwQP?}mn(DELF@p^mgjb`r5*?r ztI&=LWv3wcp?ravJG86tNL)bg)QR~;*~O_<=*@vd#B@sm@vDGN&s(?Sl|=NS1Q|x} zhrXpKDm>!lPnfs%p^+QpxLjvthzP^CYe~g_W}|(LZf47Jsr?9HrU?>Xql0O_K@Rs@ z5$vXrOXor{(z4&| z9U<7ed6!1RTz!qW?<{B zd}QkzFK=7Sf%sKjt%p6@*rtpn`^aoW`6UI}xOl=@UQ7sZVSFbDWZdbfu{%FBF&Zp> zf(j$+`Xob^#qlP63l!M^dME$u0F^J&F-e@uX)Uw2AUrub_p`-nEORmnA$lX`AbRsz zps)Nvj_T9aU4FX?-5s%SsxLZT#n=FU-aYCmdXzl?ROJ6ML60dMiNQplyFHPXieK_x zLel8%gxpLc`9Mgy;%++kCYNsOChI`=OBF04O--vvt9vpa0iDQ7HlPHy3l=UGJVf3? zP!t^low!@2h~gNA=WvkLv@cRkv}UWXLoIoEY0+1Uc?iB3-CNH zZ*^qSQC>%@+qX&nF%-2E<%gea7?9JUK9*|uV({YZP;vsp);suEEp}~#X71H29*y|M z%+>(Q9tZL6Taw*NBa0?!uTb*dq46!sCI@n#hGP|(A&~|QNdPjQPzvd&cUe73?IHNRbfPW`E@NztTq0CrQ;h zSkoAPaHD-{4-PY8qLtK|OaGNd!vWX9k!MMj?{|x*Y;$taPIf03pXm1zF5FW!YR)(s zL48xU<60zOsw9;VzSggM|0VgyTk>OLE&~3Q*rZ?4V2^jM7xKr-l`B(!-21&`ri2BW zl40Q?2iCTq^0|%S^);rX^O$@$wwry~PoFLy=yFajBw!bG#4?70c4hV z7o=c#EV8PWQ$^6d3_sw1HuFJOGUK9-#_bL)PP^9$sOnX%yV?ave<$vlihNN!MA1$@ z*<$h8#migxb0IIdqFwmY3z3(#(rs%i4o|&*tey9>&va?0^r<>c$+^YjY5phB?K;TkSj(3Z#10`mnL?&?kg;k zp2mNC9)?SgX{-5RA*Pen5HHw*v>f!43-1bzJ{4^Uam|bkH0mfHs`T-04}|OYHJC?q z%CEQldSCCB!YWvQe4)G{n}c2F_{F5Dn5|h^^($waaormig?Pxr_4vD@Cxt@ViRHtZR1liwz=ZT=z-uaG+sr8(Put{Cl zmO(RT8N}*doUz@djkA-ijbpyK4{?WyowAzOWoz%BpO=0~bGTJX9;Gho4G;33)8yB& z&}KOSNe20Uw0R!KU01|zvEG{nEHO*u$?#w)dSMltT?9$JSMF>9AZlBke*rdFD0odv#&$2bWeDi=W$F&xv?T^ zeEE3GpZ2j{^w&RW66p8cro5&BiwXy5JGZ1Aloy}a4V}ELrd7lSJZ{*YXzDLIc4>SQ zTV-s1`ylX5nUoH{$^&WR{zm=i{2b$4ThvM)+PC6~t)l)dd`!6z^rJklM?Vd3n0mIM z<2&MiEa;Cfb656%c;WJ>r=-+rJ&vAiVXms8|H3;_JV4ZU%`@Krpns>Iz&FuWD0wSW zarNYV?r=&a8*H3Lm*GAFv}L_ZOdRm-0;S;_PY}_D!DELg3uSMDxlD?(&Q_wziLZ$$ zq{21Vb46ru)Orv04@bmb8+!=fWL)dpNJ(LTu6wc9dy$knl&Q$uDy*lKoU zCRA!=(2?n|ndR!|9d|_(*5MU0aAux2=jRj@O}GlFeY{wHnvg+cbrXOAh{0?g(y?hV z7%~!hV0$rSt+pUQPky{yAN;O%G*ABVBhhak!pMZmSu}|H?JG{IEV*X^eHHIYR|FbW zy8Jt^(>On}TF4b^8Sf)T^TaTZ;S)SN)Yj+H0(||smWxjN3rXv(LM>f8$Mq(E*Zp>Q zw98K#6%Uq=I1=qypK8CS7}P8>+2qdEOK1h3FBcjCHtBO~AVr#=xN@g=mkb5N60Jqd&Tq093+Hnh{ryfZE-_~en-hq%Nt1JE8c%8_zeb)E z+z;03baPo^HO-b9jmJB3x<%K2m-l4}(Fs7l5Xwcb*0?9v*<+13^7>>#?|a{)*JoHV;|yX>Zbu&8OA|>9Wx*gJrjH7 zvquX$8OC^ zqWP?->6&+ocPp=iK|X!a_1sk6Z(FuLPEuU%BzjPf(ed3Fa^jpGS5b2}7@-Hi68uOP zBH&j2^E=-w7sR)E_PX?cC!IUL^cJhSp=N5l#vI>Z<{y{})jcWhXtxN|R#ts0utY31 zSE$`$HOoLeXcm2@q-w{pl6AlIg8`=vUr zR1xCCG&N*z-JIQj_MIvZk#DkuL#<<5TE=a1<7i;=n~*7~_eHa;!_gDBrX!<(k1 zt#&h)k@|(_g3>ZFVWKfK&Hz(;^(fndR)tIy$11VhQT^#HD#h!Vj$-Njlbk19eJ?x3 z10N*}=>_Vac=#vW=F z--V%nJE~0?d-4hbi)vleg&=_dwsSvP4Er&~MXd{yPj%$C z7s?(5-=S(#{<}s2ucJX5B@)Ztid9DL{G#)s?@_*t^nB;(Cl$;(DigVvVi{&r;}_hcdfthjg$M>*xQUx7-`A+rFY{>PMse(rkrGz%uOD|PuOCKv_cjUowaSjU?81(V(|t30*2QsyTf z)BZ@xHg}cm?5=6?1V`<)35OBM9&`5wWp8p!ap*7BUr)cGQ%`n_y`?*E)lf1WRAab* zY~`wZgw;uYKO(;-AkZ#gl@`Sy#+ftdDK6`id!DZ+_Y^2C3vTyytvkP)Z}#8Be(9tN zIGKL{!{n>_m>um#6>1zJrdHmeA=Z6wZ`BOTiBo3x=yGQ6S5j)ccmX@8{{7b3ZWP`R zxT)YNM z0zB&AoQ&b5&tIYAdbEd`v!tcHviT$&CWT3*kxpr!q8uB{5P#o=$6mlzkif*H3ftH% zD8(pkh6)dzC80LNT3AUNjn8%oJ6YHvu~btGFwG5cEQwtBDRg2 zG+go|>;3bWd-l==;~otkl54N?&sJULWO!0Tl8D1K>J3^SqRyC0A zYLt^E=(9$!3RatCzKbDwy&~#=Tq@XV+GDS@F`{LKE*1Ljr87v1pH(fkBAFBEWUjkrBM*A zk1uoJN2FGJ(#sWn9EnETf}8%5+A0g;FW-{gt|5E;$5+K-bK4vz^f}jmP(_vrZC@%M zP%$H99=(FZ_UWK4FOMJEclDdMe3cP&eiz2<6DIQhTNJv&XP}50bHXvoJ^i<3&&(kn zFaj-e%KJ+O$3@Iq8vUqIRFX2qAyBd^#qhAN*3T>P1J)QuO();Z z)N^E8T65gXp-)*B(K}=KRgyq8HR!cyGT;-I+GE81&75t31Z*qSIK14(*KV#jZJxeObPH7PYU3^fYU4$ic)0c}-E~`t)*9 z)yqDRo_R`9XJL4|7X?pGSHMn*?`v;aH^aQ7R%LR<7JWx2Iku0{VhC8H`x)*HhHj6k za{aCoo@ic5TR{z%+&{j}kZ9o; zTq83)9~Jt4SPlRBoa-h#JwIFD0b8e1$sbZz_V58-T=FIk#mTk_rrpmL8jN=j6Yx`` z@q$Id2|G95bd5&tE~6~nD}kabL|sMGB#3!4_7mm0ZbNZC-Gb}qm}{;q9F z@?rXa)B~x7n`ehswVdUju|v_`IcsmrSyKBFbuMbX%%J{UAT`IPjkaw;EV=;h)-;k`^%XZ872w^!}TTGCb9qHA_^`O ze>ta^%7%q!3>SS#J5}{l9Zv^3AL`-z=-vZRl5wZ$#JV~Rye{HScC4AxHY4sKY4j04 znEB2Rl9O+IHLYAwP=PRJ6Miy-Tv=Pjsnke_AG53T=J%9$4NdSL97pV|hLXFH37)4LS>%}_vw0zKV_2@2 zF9EBMoRpV#L`Pld;EkjAEw{YaY_HDs5uS>(F%f-Vb4}_I2EiCp7|PLh!8abyV!?9K z%Tukrf_lu^?NP?*dycPp!5BYkV|&6K49T3!TuBmqWEk;(R<~UxU|Gy_E5W7yAA>U> z3zwrw0zV5`T24e&O)Eo9R8*IL@BtT>1WE$bm)%MN+6Gx#PDE8rx4laOE7SutIXRQ@ zL?VCPSxax*I1s+;SMca;6IOgv$G*G4qG%Hz3T*eF$aL(jET^)KH2;2wq)17QY$qEe zK!PImh#HP&z8QWTN+~);1pS-*LIhKEoupVQjZ&<+g8#FWqWUr+gd&zvwD6MDs7y%K zli;sRW@!3H@~vY_NMWrohP({6m|%$06l{MvDdjMavz`QZt*y5QZBa!L=NfD|iCG_* z=t*4nY@rnX5#-e+)=HvcfhgwgM)-xH6kR4M`jl+{1`8=VQCeXJjueaJ?KpY;5!~iD z(}bb%6m*r=Sa5>IljQHw+4m!K!URX7^N&aWpz$f_XB~ASG3Oarb=p->ksTF@Q=)%@ z#w%-%Dm0>AHMsX-d4FUN0^8} z8O|h?0VaV{-N0nNEFmze(P(1c+7Q9>(RjX?SC@O@B&Z2Xry(rKLoltReOaCNqVn4M z=_+A3{|YO>|NiMGhhWJfED;P>{H=d93`_Q`VW9_L34t#)?OcCy!6u zXdqy42HU-x3XP>y@j8H5BO;Bqd6P)~AI~Q7T(1NkW!LgiwwR-g&zyTX_jAtgxqtUL=Yc%2b=?ycQL4@x(y`33Hq+&XCCi#c4MHgojoh4Zm=Ko)dNO;=8-{T|*6hoAVX~u^VHm~hXz6{+GUQdd1H-LxQ2CdG!jFMn0KbeL$G$WpG#wj8nJlm~tW0x$QKm|nS- z_;mPIldH*dy5d`2kCS@fopW8+lC@S{Yu5Icz0tm^vF?Ev_odtw{$U65NA~;AvN6Ws zZ;EHM;3J>N`rF@6IH4eA5xVeOfEmOHNs&h}q${Ib1Bc5j*CyC51( zjgzx?Zp{5F*g0;|U-s|Qe+q9&g?l z59^sacX$=xD~NN2qST)&3f=3jxQyFn#S_kcgFIj=`M%yi<>?86n$G9Jr8GB1!S?6x zHXK#kUwEn|Dy6A5EBpwV_)M*2g@j!$4u zvySP=TFJ0?w9lks_j~))*1yZ;UQ+bXT#k~PW*p#jcHv(DyL(^Au%P14sF-w+h&>$R42B@l;DfSm&C)`Uwq0w4t9l#%{O z+_vwpDIqxraofMYri*xPV$H-N(=%|DoZo5q=Wh_C2uH#r+*E=CJJNI;hrt5)`4Muy z2=@#J7Bq8GfqpHH4D4Rua1t19!+kfO_k8{OwZcz~l?DD`<#&y%Yv^cid;RKO{6aBc zG>3Q;QK1q{Cd;;S5NWJxt~Zc?W=LV=t;2tk0%AL>;Kb0oFd~ zz^8T`MdpG7KbD0kt~XCjVd2F$51IDa)uWp`9$NBYS=gjj6*cAB@gc<~_!Jy~HcTdj z!3h!QL00=)M6vIi2PK&AzZM`elv|mmT?GEwlnSPO7>$Y%oVaX9wlOE#T^1HD)7&xR z6r241%1j|Fyh@PY`lRi+0SEG82=|y_o#UG*@SFurH?`b~f5Rn;ydA>b`QdARz`dD7 zU=^PQ!1-i~Fo2CNqvq>yVB<~_4@l*}lYw$62T5#_aWmtBt*Ps3q3)q)>>9=)}Y ziX;*6OygYN3vvQE9U>=d&(jMaiyL}znt*3|@k6@>VI<0gBd{IAky;!UCk7-0@YBIs zajx&&V8K#sw^uxDXnawF#Ko5P6gpBtl_s7KStWokV)k^hEKwLk(cV_}GS5pK4`aFD ze9zNdX+F6*O8kNgK`u8JKWNg#<9;U0KUtV@H(17lhROkG^gMu((*_2qcy8n#^Z<** z-o|~zfDg)CRL~=Zr+^1`L=t$dNhEWNiw7{YuqkYN+6c5ssOK{gk6HL$EILRZOqK#J z%-aYgRJcS@FZq7nke~RYb9?~mO-G#*K>C&N#W--ufQuKL)x?uUE-r*aoAGDT4Q9a* zXX}T7gPufwf{yd;1k=^!#6uZrxl!8hW5z$3?Jcg+eO7XFxh%gVaYsS|T(T{$cj{a+n=L@~R?L7uc6${z{4cRRTX2L9Na{d&AG|I5_7NWc2X)B1 zWP&30Z=(*~u`wW;0OgxBUa&QeR~QjHL%8wR?)>E#g17%G2IRUE-C=-vk*)U$PyX74 zFBq_T9nk|S;sXVnse&ME3)Kd_c?2MT9gc;FFv5(#Qw~Qu^s-l--4%@LaS4L}UQRxQ z`wgMsuhso!xc<{*g*G|;+0{X~Gyhg}8VfTgJbH09==Njh`C-a`-~QhCwAaTbye6BW zp8F4Op)rsEpCxm#h{}1cJ#7ECF!0wndI^W(A7vc#=1=%(JMj$y;ZuqM z(qdEE503Zv5-uTw=r&3GN(NEyn+*KOg&A+T1q-U$*aX1VV1hjwoF|yyl9af_1|?r) zvK6AwjPTzU(qeFd-)s+OTN4A*+`+U`w&6dsG>Sn{%Lvpx`3uP+b21L}CKL1lXk+{M z=Z0_6G|}Nk28#ySKK!XTL(hxr332n@eJM1Q~KG*;l|!!Cy8bqManAo=M623W+?m;D?D7^nz2prAqg zc2#9HJ1^__g&GVx$)(3(V*URvOcb9X8sHF^MioQCqDb&yBu~~8Dbq=q)mi_KUZ+s5W*8WV{iaskU0md@RAGtUth;-kywBPj>rpaok=sn zBP$XWEXEOMabH4TOdlAX0dhr+@lf*Gf)$mtW&)Dr3pC_26#BY-i~nmn|3<@wLd~&_!Air84GrC6GuRxAz2u3 z^1&pVa|P@@W)YbWl(yqw@A-&S;2}a30b$}?J5Z-!CBTp@$ZUMk4K_AhMxtWyphkc= z6Tk~RAV37tX4qVLB3P4zX0j=6d-CS`8U+pv3xQ8kj1$X(=arbo1&c%&PSwyy?_jX7 z;F<_g5}Xu*p+}7)P@5LxIm8UipQtNz5hMVW6)-YT=R{vx#shH_X8XY;;qkQ92Uv&` zbFtm!z=(=B0V;N68UfZ&Y8&Ffnl+?pAa4Z6fksG(`Kd(`YK1>|fzm7@J9-CqLt?=` zRZfka+vaLdh?RzY^It=P#ev&6B{WD5C?EMjM2y5r)!Fg50|tZ$Hq9a`fwgi( zHVg*{fNr3uIhzrZ)Bh|CIMN(;heMY{?(NdI2Lx5J;7nN9gUAVr9f$&;wTwaop(!LXpg6*aNhD;#2y7PTVg~FdV*DUK z1rAy5bSNg738ANU5uAsaDI@`);z(peN7%&t!u`}Z8TEsO1uwO+8b*;1oO2<{fYilA zGKT3KvQeB%cXIfC;*P*1MIEP&X@DmkhVZNloOS}tUP473lOl-ZxD$0Sg#ONFmE{b$ zu>`uSh$Jd>1}nVuW>@J7X6+nCk9!r7p95YWtNQ_?l`v}2tKblOxC{o2lhFdeH#O`< zpQAiLK8DQ2^_>>5>{ zM0|DG+d_BYZ{<@ETtb@3BcdF3yJP6%(BNSIt6PVhB-lV?AW;g2pOt30|5jsrTU$r- z?PzOZ9H_pHiyn8Hll;9lF#QHe3gi^Q5E^ZS*e-qp4oWC7mMx5RmQ&+p!N_~1dfSh-h5h}E^|v!&m?OQ!j8y=x{ZFU%1!JjwUOBrm2258aIDgCaVKp=vi++B};40VA z)ZPi5-po42BACiE6RVjx_>paDRv*pC>K!Kp79;QmX)p$y3=aK_`zCTQi?j>YiLS6& zq4_v3Ozl-bKnO`5WcyN5(fl4#a@hPosamm-lJYOvKAh#>r}ua?d6#0Q@p`p5xcmv1 zCV!rJ`%lTa!73b4k_uD#lTZ7{Q+YJcR>nfDkXlfI@f_k2G!wfHi@Ozs#ZwgggF`mX z5GhQo;6lk79FhAUeMv>5Edv?NceLb30szrtYIlvW@bNbf3o|lVHuz(VwX7MRw-Fcw z)_PB1CMEnZzZL+U0>tSPtDLNG1r@l95T~JeHx@HB>xZ0RCKb=Cr@eVRXNO5P78Iil z0P+W3(8Nn*M`bCD1q%J~*i6dXsXx*HCil404tdgdwByi3Kqe`e{iA{(u0R-k*n7uE z6vu+)wL0BVzgva#A9%_#W_Xw**zP((h(QGqSizo!`56tMfedMwB{CO%ad6R>nOCD@ z0f!k+=GmFNL5l=lNfKqhts*j$`dk}c4A_b?fqR=sLa3Y_V=={bT$nZ{%)+L){b_xy z#<#UX7SJRKZy9781SSIsFoUU1mn=-if8-)@Xzb*1zo(R+7t3dt+j=iRmK}o=S#rL) zc%}Fhy5jXitYCTG1Q>*nhHyWj43KlphVx}V2Yx!f@1DoE)EiCS+0aN$N!zL5qB@a} zA})V$JpG5sJD7{IhNzt|Qo-U})QMq*hHHuj9+ZvgaSUA5N80R1jw48+{9303X6>iLrfu0bwT?ZdtnfpiLtiS7^bxo z#3p_`q)e6b{$1q{M#y5`H(uqhk|kmY(_PLqSJ4$X015VdoC+S%yYz!^?x3j48xzThM!NnGUF1M3jVyd4m*Q9G$_;6dld=NzAbREXx;%QG$Qi zRrl7vN}da;;Mnc}lt6TxUZ4V+?V#gdPr}g(84PnpSr-LCbhI*Q$S=I}K>3d(n25Hp zBaHSqDViK?)Jv0p@2iKz>?ys6gXnx$`5JK?+7WKMn|=4aWz4|6MR1IK$DSspdmZ+- zX$na4C5mH6AXyUz7TvMH$kEaCpPi8dFgXRsBu)VyFC)tEvJ203G7cUm5irvyfTNx; zlKGcmBq1+h4%@|O9>LThF-Zs7lOK4=H&)cD37>`?varneY#AgC6I>|~9kuXTJFd~> zml}Vt!K=LM`P<8GqIec8)g+~*^Q18!*x?J^{*F`mGKVirDt9s}=CPoxjvxp^uaR;m zc*=|)c*+k90oZRON`pXKxJSj$1W)Flj+P##vIvwFa8AUUljjFM01^U;GpLYl6gLfy zvkk}sfJ6+L7px6{ln^o`KBVS0ZV}_TG!b=9@gKBJu@APCkfbpfumiR6qjxAZIx;2j zoa(<)3Ww?xGdQr`7H*7T#KLhS^mvSSP2@W;C1tE%8@_I zPQPa?VZWUqkCT;sC|UV+4i0(B@1^x{NR^KBl(LLDI7X#ezpROHd}$%36VEofl3Pnhv`IM$?4x$ZJ9FB8z?FmL{FX! zck>SRH=eX-R(?OC3jw1XL>?r(ne!@x^Zd*<;&p=KITqhr6(!Gx3LB%9aAw6BncMdZ zVTKbRLX=Agfmr~ilp^X z;8PU6muP4>5ZzPcSlfP>{vYj{ zm{J5fi-rWjVZE{NVN&xwN9zso|1 z3c}(hu*u$;Gy{lX;VO*99AZ4WoMVO3bPg~MS^$C;gE{|9F^XAm5isC3g$voUgQAI< z0$)5pbOnh@g&U_E+A=0@oCa{?bO$)b3*l%SQG$xhjg-)&94 zjZP9-)DQ{Gxbdyf4IuvhrlE28wZ?u!+TWPGQ{Z+|efwuUV@iBq)c$GPe}}REW%Lak zt60O$C@UG8QFxH6(%j7byDu4=QN$RVQT)-0bvio!cB7k7_&}oF-?#Oqdc(=0jf@Q`R#Rlfm>DE~@bwu(EDF(a42b?CJxIU? zip_XJ2^BGN!g^rhL^b!|B>U{p zesi%4KL&V7d>^B6oM-OqK&!g4%#b1JhbZv*F_wx@5vRkHnJ^JVBgcvwv}9~S0Qz!7 z4#eG(tTkR2Wz4u}blU>qXNF&)-%f&fv_L91ajS$umoiZhi8)SL!Sn!4Y_&1Cw`H+# zrwtWv3bfUUWQ5z5Ja4?l$S9gHt%5=yGCM08Ydam{9!6UC%^-^FXlYV@vaM4F(3aJO zFs$tZULG?w3VhXsAp&1LzWZYGe^(E1z9*v9Uf7`j@{ix6*3*3QUyi<#PC zeP=>Dnc+0IJ#iNXAyWyhj3`Z7rB<9!EDe-AVBkxuCo5*8xJ3-k%BY|mm>2`>oUA-D zax^v!3kw<;%waM!FmU`a9`z`Iqct2QrU|4vfn0~hzi&FX&J$p)NXAHi5<0raDk@;Q&I&aH)h)#1=*WGI+Gc7eaZjc8Xaz%UqBFvXTpwlY#9;fD_Ywx$ulnnV{rNPV zg3GFmi2UvxpMYpXl*<1eI3W2ygh1F^%V$TAR{nOK`((32HD6G`>&>Om3v5SDS6 z;`^*RfSE8Dzkqw;U_yNb9kWm=V@4>4QjC7^5dDfB!A4MmCfsBob0OpW2Oiz1IPV{l zYV%l2{Jn=m8-zU-wa|HM#X%$Ok*j_Y9MBZO@B4_Pw;vt|kkg?JD*grmj} zaUrM$Sljc=rYxAE`~nIq+~{sIc7!{Sp-TE&&`$d3yWj~9x7Zt+1MEHLSwyqN#@ia)8q+T7%t!;&c%q^zx0X&`FxYIZoL zFzsdicE9Tkn0~{71v#8BFm!>oVvXS<)70_L7#~P~9%%#90*b<89PYy_$fbZBJOe^z z{pal03Kb^-94tJbi7#UWpo2LW&B8k=D*tGX9Z~EV8)Imi!GPjhSn#@x6oA6`dld2+ z?Dsb&+Z5cLln?*5@b{_lFChlS-Cv^C|19Lf0?aQ8D8Ft2?^!cE7Wal{9b>C~@xNBF z5ZF2b?hLNt)B;wsgakqFOKw4=Dwlf}D?0Fh%0$M+*gzhU`VQTtp#W57k*9;OV1h9E z373GdEk@J0x_@_oXD1cT&x#yADtNJjq6JcgsMk<+%(H2YmD~ycUWe-z827EK-iqR1wEKH3ly0Dfj;+bf;3Qdo1%qqlX;f>^0qKLqzY74QeVI$ zB7&f(fyNKC{ir#=7Z4cCJXRP?jxE%iP@X^G8i@vmwouRghB&;J8?jJ`7vyykrh&`5 zsb_ve>eoa1w^~g5cBqMo{`D2(MYfzh9UVFj$k}LlT0+pGp4!Cji39LAXIo32=|_XrUP!_)Dd12n3sj znDIlfklp@?b5o!Oflvdxhhhyn6d>{c6J-;)gFxJYM=;TB0v+w9f2`-{81x>2NmtU} zDEv1RdVywFwg~rooWQ z#RL5$gJQ=Kl>Yn|rRl)WmqG<)GX*svQd*-RdF;RFM4+RZ6F|A-&vZ3M@|GaE^8|0h z3E%=B|LcUQLO|S?S7ID2|FFYQVJWiKLGUgH?&9JHit7#ru zfYQv1M~V&#!Uw@QccLILh!dPW4uvj%>{lrwmJUM=R;`1vez}E812MPZy@OPdfr*R% zOd*U}DN>(@D(t-nH~S{-rcMJkHN4^sN{IGb`Og%hkprP_PrNQ@O7iGFhG~np-lzK_OEWlLfz;)EvDCH+hYvl~7Y}JQGB}$s_RJ5JB@w1;ua> zOvm0Ha6X(*gK?Z6p7{N32@m)R79sLh&@0OCj1I9sl!eRZVc(HZcmVqMY(u<{gq>`L zln?@-8wl9RfkVo3_~3KpPu!TKW{m?>1No^Sl6sR59xMAxHFC=YUB{^^AL3H+SGtg6 z4SW~>+6M@Cu7HvLQOarNjE4d9@Sjc(-;=-XnCC%e$7ld56-9DJ`KJH1gQDp$)-Vke zL~OYD|0>onK6n7p&XsZJLE$4_UW7yR?{vXY#CXk4DzH)Hzw#IHv8xhfC^!hd>hjv6##(_mimGT2SL6Se>U^g2QYbrQv&9SA`{?ujq&~ijmcN@RE6L>nPA@7$iTgc zeTU<4_gC*ghz#ccMVagWQVaNU7zk>#ak$Gy;SQFIzq=?sr4D*w()TFnE&c|2&?gf# zdE|$G84Cl9*Gi%PQu{#z+U&|Q0$iG4;3X7=jK;8z-vbl{^Lru2_xUx@<-WgFg+NsU z|3v}n%W}lKlRx?|wb*YI(8nNIANkqP2l!v~11f;0L%rDr*#DCPaoT@T0K4!~M&Lhm z0V+t*`Y#IL`z#901o)8E3k3f5hB70`=lmZ7@o4#f>BryB4CwqS46gnjL_Z9o zks#2BMUjg-foGKrfTNtlS^Z%m_ zjF7mxOu;h7{)V*-tP&XqIJisnyCu~7jPLo!>9O%d0_QS@W$7p=LPb@LgsIDp_tCjY zg+MlG%gt}l;ZT$ipqTLAR5M920!cAuY;gQHg&pW)(E7W?Q1WkFWpF>39>$MB*PpnB z(ms?6AN~trl=vQi=cm8DcS;2ubs^J`n>n<|zvu=6ncZIv0!H^?E_e?!_6{mxWO@ZH z`7eC<2NJCL7ja>zL0RwL1Qm=i+`ke=gE7u#=lrGb3=I>U_CKj%Fxxc@$~p-QA2Gm? z9|c3fZ(zv14!-;g=5`WTv?lofFQ;Xuk^u~)Q$VYMyyI{efI+cMcIsP71JK)~fI=lV zSof8mhGy12-#1-DYrvuhh1403gWnRUhX?Qb*fsw|V0WD;J{4rvt<6W-i%u|I(WKIUD5-(g;MmjH53#AFy$VYwM|Z_;JcUTOeI$ zP{O;xC#fiH;7$}*A8>SYeXv|g=j*v6N`e&^)0|3HC?u3SWFBc!QaPchmF|A}YHnKF z*F@@?CG10%2R*3tHE&sFTrRD7wanoNJ$5Hv?Cga#f!i-vh$!Xz#09U{bP01wJ%7G` zjfRI?lOWIe>eih6(8WiWUM#yiqyB5~qmQNhBZrEVB;Q=9+SZi0Ty6g1+xIt_HW%9O zwGVh<@!;@b-B_>IX4_}`SKxz7$~HP_Kk#K2;qW`6+G~2WIHh840$tH8YmQLEvR2iX zX6~&?Pv7}?=|nH-TOiXaePfP~U!D}Z-5jN;0}`)=`d>UQ#X3{HyRT}Ad6${{msX3u zdTy^{{Bk|dsmoQ-yrxzTFjI=!eh%;DXh@Viu)?Iv#Qk7_mB5vjmBuzcq{Wdw#JX5p znf^|zo6DD8e!+d*_HIucUCD?mP}-x~vkj8xC_51Iw5Kbdu63>BxRKwRK;p<%7tU?r90VP2TGq@?f(4a z9f52%nfe#{&bgt>7T$^9eGN}62zTCZvEhz$ii7?f5p@y7ecQsFGezRNYK$yfMar_b z5540E2`>zJDR{ZrU8h|<*mTDSx=Hudoi|M#agLgA%3rD84ZWD%U)k|sZf!(&qWGy; za-Hwx+?VY7-A=ACb#8X9u{FDf^~L45_Ya4N*PmG>Q9rPC`sI0ZW*-U-7uK03R65uZ zI=E%z-FeZ-eKU8}@#LFk8-<^Bx>)l0q|4b4p2iRPqR&g@aoyT|sJi5(@+zkj{&XQ+ zO>%Od-ov_V1!u~LhV_if5NX!Zo?9}>+deV3(7xmfS!Tj=qn zwvzsBnf>PaoTq##kM~*=I`^#Sc>JlgxpNczZQn?^nD@IV zdc12vBeJ<#`!lgFV6e@qV4p>wjohi(z6z-w$K&scKA>znW2mojI{bxJP<3|Cs-ZKF zl%j4fjjv*z>rb#h`7G(yrauE{-R_faWhHP1Xf z`)8sba$Gm%injFhnQd}=ry0t}O*D6VuPNSk_xi@dQMEHHRB_C4v&c&`L#3a~W1~WR ze0`V0|Gu2miZ0uwoit#2J8LA;cGNR1=#X}D^r5Vg+$P^9d)s$kuYLe8djowuN*c08 zD!)bz(-#gOB3VdzH|q=Szh3aby(hIlX?lNE?a1BUVcN}UZUZgT>$T#xOxyT!fpZ@) z*G)B?bFF%gZuUr42-(T=6|K`k0!6O_jYt=?y#FVKB8?p*kXVe;TTkBJlOh*U&4$nLh zbJzaSoW%VGqOZDCAMUlvEbGwA-+5ip^`#6b*jo6}XBwrORkkQgzpud|!^(l@i3>vk3`S-m)?scy~u?Xto2 z7oAe6TfhpB+W>p7; z#(g*tQ*!#XW&Pku$42L}j^+8f1cfA?dqKFs^|-d}vu){zQuOyriIod4VauqCa4PRz zHqdEvOi{#_W7mo=LT}6WhU;u`TvfiW_MTck{njM2hDFRGw?s&n$vOP zrNWCUIg!P@>`&%dseR=fT3&LqM4cg%B3{2Pp&DSS^ z+o}QILrHZ|a;_OM z_bjQfY+1MwjdRD7aK}OV(l7OXpZ#3Slj?_7m>1NRgyhcZ($g7@5xf@C4li`2gl%Yd zHa`cVT$E?6;ul&_|3%^S<~hRFyH5D!l)NQ6$&VZ_TKBxY_N){6i|Di9dzX}7oe|qj zTKoRPzVMJ6wy(Sd#cmZ|T;O{k!c(KjOX1QXeI*U`P^Tw0izL@7gq^0Z>yq!>xS>YS zM>q9hyYl_)m1pOXzf8XuyZ!c(MN6IHvoGbyKepa8IM27@(fz~xt2Q`2zm&$sTA4ju zI(p%a!Wl6>`HPS4FU*J+bWy^yJ!ry6%4;ko@gy1T;9qUYK^3nY)pph!FxR@7{Dd_6 z$R&HRWqd6bdo(xx!tN56{AU7mW&eGuxzB|4^RCuyk1Km(71-U98@}u&{d(iJ^hlgo z4A14|_q*HP9eO$Qt5ELeH`+C>%4hQKn(G=3?OyTmUGm#^!q0#5zsqK>a}D9M7Uu1f zcWd9nFYnfKdMCw@=jpWy#nJg+YY4vTpZK?t&P}V-1Fw zxPsZot5{AM`ahF=9M>oQb$6?W;F}@#$IDBe>us^<;|Y59<-=BgweUfy57(;%%0_eb zq7RwtN_T(#@}c1CLA}K2(vSONvN|sgV4UQ`_TQKh4u7p~L;Fq^?`+}u>*;(|3k|OC z9x*MsdBNrJC^whR`kasl30|~)8*A*n*LyX+4+ez~+cnQ@c1>KA8|ai%^U30Ua&Gq< z^Lh*QFj4DV%u*k(1C+OCk1HFcoG)JETHqAI;L^Z!7%(;sJgyiYg$r=agHQ+(#{P^0}`X* zJl4w=Mx6EKJ-%l7%jVUzs0957u2H4pysm~NNzViZ@75kX&7L(Bb0;pEhveync1PO8Et`ix8wqFAG$K7vl*H}fe?Ncp0(wcPCR9r0`8`kNLQ%WjokZfw&eS)(49 zlH%q6DQViBm+=d>Zu7=CUQ&ea-UXyHc>ZVpdkdK|Tv?c;lC{ZfOz-d9x`x_douU?m?~u2ny) zW3$Bz&e|Qay+kJ-<|$Jn_eRpFOi;i4jcQqosx0aE9TG_F+0P`6=&b> z8C_Xt6+1}TRcbflkhODe&dH2JmoAk`=Cg#PpIoqUF>UdtA%*h~cI?Fomn+zDOGNK5 zn)RM~^Q_pz87g~6Xiq96Bqi7nZ@(nFzi;_@c77*o?H%Fd8J9ZmzrVbr`0}W{V+FijKbz+Onr7;gH7r zuA%Y=UuWj-jFUSg|0>0LnFk;7{i6ZTdx~QH?XP866DbeMZG-RMy&QPd!^f7K@_% zfI{DsTm4Q48iz(6Hq3rhAfO_~V&1Qp9&pCIZP-hw?1l(G=1{2=#jpJUH_M$l=`LIN zuI~~h7wkP&m1~dxa&4(D0IxIR;!9>AXp7IbCNSH`AAS-jq?mSZhhMBk-oV?%cpX*as9;_*aql*IAS z%hi8#WJ$EZv#K60CvBV(r9Y+0u(S8h6|1LLaKUY?a|Y%K==Lrh+!UVZ=%uoB2UldM zuZP#g@HqN1usX|zPdhd}IbfZtzdrGl!%feJ zTQ+{2tFi8spWl$pM{#laou_slQZLxd>#M}8*jD-Z{O+3p7tT@lyCo(~Uze2BO(iSk z?=PMoPB(qt^tikG6aAT#CwoLl`fHBjD=dL;E^aG`{4}Q_-1C~FI`+E^?$U2}&5gI2$x+>CA>yn&ki7i~`E!ww zzlnVK`VEKkPR`vwkH;B5tynCilwQ|beBG?tMewxAbOG8P?EX0H;_KWxx+$0j-u#pZ?V{(9a)W~p*C5T;lX5up58 zdr(9CaTvgQHMy#dT9dY42u{pBOc>3*Q0i8O`davbNG+`9+fcgsjGSq6jmzI@=MJS@Dqcs)tiEwIsg%By<%NbASu(Kqb6uT;YF|Bp^|N2Kf7q875NMAmya$!FgtOY+T2 zS&sb=PSxwb+vp#2PgbJcTsMDZ8s*X5UD}nqtzNA^JimrUa#XuM({Uf`@@AbA>BLp5 zXPl**wDxB<%E)DBtZ$Nr8CP!T?G#&|Bl}srq{V_YOA;2`{<0!a9b@JecBPceFH&d-0NgdLs47mJY|> zQ1=U3WnIU?@Po~Y)(a&`^_FU(RhO2i&oni+rGLHu=#=l3_+atiE*4ow+rW$q($7Wq z2e{utlujHTIn!KR<;`)sH~CQ23y$z0GH}T^GY)6HR$v7il$3wJS zo4|PGlbT0#TsVF31AGNS=^Tz~5`6*|A>F|~5o$*hhn7e7m1!K~nc?y1dHVW%3_dK< zEYQvTz4+B~D(#cRtl(3}cpu@H1^M}1@D?dKm?9#x_`-Nr$d;wmy34aG()8&(V7&ik|N7J@@Cw z9=GtHtLc{PR&tvbY(J7;-+8$*l0JRf(`!8z`}l0gH&|xLABj3}MCQW4Ekh11+tycQ zl{s0~Tb4e2p#Z!S#U0)|GB#5=mfp^QR z+A^f;IGttG@U>89`quvJ@GtGdH{_AGQVw1Mbsk2gB9gpYj4QR=w}*@b%?s9j z_cBI!)A?kF$D)ta*f)>FRcsu|SATO$Uq|~6t{Jv2Wn!PqWA``mp)-9|ew#Hi?rJl_Jd8S~jP?{puW zR`D6OJhw};W=rS6b(E+0f#vC0zT^T-gK?q6%9tCXhaIF-aq34N&WwLM?D@FhJa3tS z<}l?`;`R+&G+mD-v$v|BkG>|xFP6R7S$#Bi>vjjlb5GRi3My;kHVoX=^S>II_TL-(I$a2#B79X$O+?B8^eZlriwF3*n!#Lu6Z^e0;X>~Y#q=t|pMq9X?iaXwd z+iU#tw)LL3qjfbF9Zn?b$M`9}ma1@~>T|!J7hx=*x;W$^j?ORfsHj^qsHrS05Z76@ zlV`5jx^0iPM$qU^lJu86S)5K!dNnFyKkPZ2t9s&?$-3FfzM9j5Mfi)K3S7BYfA#JG z`=I3p?~|84ld4G2Pup1|8TDqp;k951cBCv&zpf3d@Lgf)KFdYO9m4G4$1M*hbh8`*0? zbj-bLGhP=c)fh^Pj0pL54QDp!uSGmA)ys4bH9qft-92<>(@5>65rgO5PB*MyexWAP zFAr;Je03;1TKcBJ%-V1_9ciS*g)Im?)-4x%bC_!7g!UPq5v zrIAkAYpr&u*6-@qxQE|ATyBf|Xn(5uu4XDHm+F@dc?asMSmu&^p7MOAt3B_WJ3^Fh z2nxE;rZ484DkYqG=>)Q%toz*l!ULs!DsQ9)KE7>j+xPlzOIKz0h8Ck|1?I2JNAhD_ zIzHBNCYs?%$O<&#Kg3C@iJM_Vh8=pSb|E$gygZ*+Q~a?|Kd+rS}xcQLh2skNs)TmpN)E_*LK zx8-H;=%%njD>t+Amb=I~by}x}wVZsE-huUB!Q-87v(BoUZ>ICLC(|ET$SQTLBb&`? z2t=}oj(4q8nr3*{D%D7~aVo_izR z-yfei^jb>h>!(LI?d*EX^&*PTK2}zI((RNld$m-F>&ViOC|P&@2M0Y2y-teQxfX<4 z+iVRVx!y4QMocYf!{F)!cXOdm;WfuE*B*EG^5?>YvHF#jA;)w$9b$W^}3f zy`a^!lXgw>XEyNLh&k>*CH_Q5mUff9OH?cJKK_fbZkX_$d!h!GD`f10HY}Xg^o8nj zqoLKL`{2STmOg#ORQE;u16ONm4-Y>nvkd&S%)x+Ct75Rae0%U-_3#hD`9Uc=HT3Bi z*Te-)d!#e_KHu>bo_0b>j?PgN!F!D)VtD5D3Xb=S+0~obFpk?!BBQqriP{A7J*SD0 zn?i)YI?qrU#ui?(GkdTlJbt~&E8)4@EtTDD)mImD+L~X&B#yqiFu=F;O;am7yWq}d zCGraF)i4RlDP96Vr~&jHi{P zy+(YR=SmyzZMmvwTj7$m;;w&1MRa9Tp_V~>wWe0r{uzm{eLR&KT)__EjveirqQ7cK z)4%R}_sWBg^?QTJ*Y9Xp&BBJaicGOo?dZ<*ZQsUo++&x>Y|q4)-kdqrXW8^CUKt;L z))!i1+pto2)J=VR5!jp>88b(ybtp40Ibqpij@61~7Nd_GQibR9-rbOOi|-{#=g#8Y zPuB%f&en3)`1TV*IYF)Zsu0*}6;@0-VaXoOIE+;gSVeQ*{7eqI4$R!q~W|RO;c8Th?WXZM}_dW#&dvgaQE&$hKmIRqR{ga!PL7t5uZHNyArGQ1=k zBQC|)yZUsw8QVnb< zU`;(Cp_g-61t0Bs$Sv`Rn2WHg5RJu`Je$?3^UkfMxKQ?}w9Pe34$IIV3aMG2-F5Nx zJMzndqAhzi4y|nol-;(r4p}==JcN}>e-^!e2hnS7@oIY7s;HrP0vg9ps%9uTu4wLj zYWc8uX!F;Y=L0X&Qwi_2j_f=xRvUDqMtg0w!Kz;K*mxe}Q>{CMMtKuX@f;CiSAS1! zQK}#$W>oJCdsI)%;y!hY@K}S*vPaXm$z;)nkm`{l2MKfj}QGH{6dOx*G$28c@}mwTCjLrsAJeq@^4<&OeM!@* zYNGo`f0%a;s~@Mss(+G#eaF?@xluVw#K?8;qAI86ierjx#>dqPM~7TT@*8buZ<|AL zE;?d=b5>#vo004Cpzsn+dhy)dDf1W1x>Y%w+`C4Xf1WjW#=V^6h|!^(m6>^Ido&X5 zI?H=iqZ_an?+^!`ltLbGB*1X3s+2hP0yFrh+)FVUc68ON*Ui9WzO7)eBjQ>;C zS3pJ8c5Ty*Ac%A*DIm-YlXQ29ASK<>-3%Rqba#h>NOuTQ(k0#9APACvJn#4a>w6!Z zb=I1-uG#l}?S1Wi?saC)zURb)(jw1oT50jMa}MWA0JcWvhwk7il#MqzzV3dKS=21G zHk4?fPV=wmN^f+L%ZjJ?^ck(ZyqDLXQaQS0OW)8sq+*h{#{ws^I{@k=9WT*p7B1t* zLcCl(y~Z``)wS}(-!9q|FO%|pNw<4!%3ww`?cl$wh5oCRBh;@CFx?qZa(nQ2nH{|< zKXZm|K&&4$n~Z)MZojJ^hrJuxS6x%DRJa+RIk7M;+oQOHJU>`}(q6)z((AQuRz#ib zsIQ!vPtn`~H^uzoLxA(Xfl4PYkbs$hlc~&i4Z_pNnAjNe5muDhGg#BBqEq^mzrDJ5 zo3~6rm6pI%39d#xBNAFaEIinPSQ*5aZgh8I*)B1oRGGj6`#6#UuPdz ziWEYfxRi3&mAVzjGk#y4T>8diKVO&gnPruI)1f_6pi>4Yw90nm@(`(`@aGqVV1?_4 zJ%3=T+oSGb&15#l6zr|5dDIWSyLuDPHu^e~6u$H}J>(6tGp=((=}*Z~HqBA*Cbjz$pkQ;mHh+)aB=K07k-)UDXa z_pKLpd_rj$GptWzSE{pKDDg{uqo3a)9l=LJp`Kd4cf+fj-s1f${Firet;v*yxt95k z?PvqF8?w_E(`J}pOt5}VR&BtE5B7eUA>rat^WKNt@p8L7bGr3s1Y&-Y;NL==f;jJ= zot`MB_eIrsm2|>#a8BO)wVY567@DT4)Uy{k$j9$H_|;~I2TjsyO0$5% zz3_hSqPi`;*u1-g*QX4WUha3N+HPlimr46yH#W}B&(9gI8DxaaqZ;!p&X3L9a9B_0 zI`fe0B}nn8Sz0#)0xjjBI13qV>GIRv&faq_SE&~j?Pk?sM(tXL@2fl2s~efk+S{HZ zB+cD$Ue}3$$)De%Nb`%eev781Fwa{Tq?7XyiZ=4Lr*v~isjlwyD6_4#rG~be^k!8? zX9OZbQQnC0sy=*rB&U(N=9$qDtd4G72M4*;N$$Z^@T&OaW9ji;q+OLfK0!i!aIr~& zhX7eRv1R#M1HnLPY5yva6n#`77X7i_aXJ$=@voqvpyBvS?J&oc!Oy*MU1c}pgD*AQ)07w)XX?}B(e4(wc{2u^6Kh-8B_Q;7l zpN3J2V}xzQTsz5{^a8HRoxyw%A!*6zKCVzgLt6Ls2&q5$ZNGQdkM87iXYlRMpFaq1 zwE@DyNtb~q!*v{%!U zj$X5^^0`Cg9{5LdacQXgABzMT1ba8@T(ulz>VkUo?E6OR>uLE-GdC~adb>u?K*f!p zQD-F>n@_Sy4sw}l>+2F%5*i0x&MRvadyHbuD&6^f9{hTwAH0Jsg8 zV2742=JHdK+}zhzf2rS%j|%Ook&YjJ$qkfQ^}N=kI|aH++-XPxlft#i99$z?n3O{czb#t$_Weg;?pLAs?)Eh@U`9M>;r%K{Yh1}rS5Zu z4^llXmH++zrSuRu(8%cooGqHr7FK}1`F#FY-d71&ql8Sii7kGXwMg~rWaLg+%Wv)fZ-uwATBu5YTeWnGv}MsWMvr8>#~Y-2 zynm0Dtj5(*6+G@&#dgdr!Jsn40@Cy-+|(9)vp_d6%Vw7C>@><6(G)9DxKNU-7eRG! z9aKN68tU;;dU7f2Rz+N_0vAd3euZd&j4&pW>`IK_ZoH&lNV`?w_Wo;1rZ-mRfLicT7OD9 z?+hvt97eq`$Es3kt6tyU88;*$eVQyDw`=1gN4D~1P++Y)W9mtIEZSnkX=+%ZOy-s$ zwRNZGpl{K-{s2dZ-TUalu-!!?%py z)7OHQt2DY`#d5nc;1?Z-&o54LQ!IHlb?bK$qDiDuWR7;X$~Tw;4r3VnUx>P+f3{Ow zRGY>Pz0?*)Yql!JziZ|1Azsd3+pTMr#pF|O*CGIZpGtZ33kEh=MBXf3uPK^GHx441 z!P%MT-e);E2Iz;08|K8nr*SK*Uo!Z2%+E;l*nX@Y%4iTp>Nxl|X`ddmNs;Ilc)+v5 z<|aZb(5y`*BlsAxaGZVd+_jxAdD$^+OX8?aSoRLu6C*r}?UAWT@p8g=(NfZKwqlRz zD|16sBNL4Z9X59vkZR>@Mt&jK3yC)0^-4K?UiJTK#o@wUTpAsEc8E{%isA2*Kd>;f~#HBleMZpzMD(Cg#L zY`oJ2kbn2>WoanBH8cnu@5%E_ z1S%Bl-zf#r@iL_CjakMVD09A8VABH^HP%FT!`? ziDr(A(xHEGU?y_d!II9c^)sYT01+e<;HJXz2oi$&)J`%8ZLEO9#6o7$=~NA#y;Ey1 zj73C?%Wk-c>4t8L*v=?|bY(|re)CdtV3%d8{*e6^r&C?Q%E0)YrLtc144mlaYFT*P zNZiEj&bg9f&X;)UqlXk!^6oa>W+|N{xK%U)AuDej(wd~_}&b0b_I@usO(L#!Gv9i9`9#p9S)m^@$RNhb5GR?U9C%pP2L z?8;-ICI5=%M?PC^oQ+bEaeCpRWmZooyy0qI@aTeNeCZEBxBfKAv~{K_)jcgPWU09= z|B0@?YPq}A70s|3gMB^kn6}A&N6E~~KpX>kI3G9i%11YblRr3fZRR;pDRi>f;;#0- zNo(;~&X$U3dE-ErTCT*|W>Z|$gOnr&xhNi|YYCR@DG{WM3@#hm=2cu>iD$BBJ@gJG zMI&XRUuOKx)0q6N51UWO0Z_lA{5pmW!+ve0=+B=ax{(P>rRifa5+pat|i=}?6Ei>8~YWF?&?#Kjbh{k2VZHt5=T2a zuJeZuoDS(wL?JNKc$w}DZ!_<`2M*;rEmJ~++Uu25<-}STa~=FZJNe>CW1H{NpHD)_ z+o?HjikC;V0y{c{xyUa|Jdbm(#}DY02v+X<5qwRwKhuwm`@FVTTgs?!^3ji0`|Luj zC5a8Kmao6<1ag6@`;o$MJ3$&D`O|T9`rIfYWPG>!UB9XW))Hr; zTzIP!ced(eY8Ps-J&uD^?obu&$7ZGY?J|+oZYWMX5?K0(A{SNTyrwe*bnxwxo>02#za%&k^Ao#O8d_2CpWCH0lZM9%lS(M*f$(t z>%R;{G2Gn4mEQ?)>~k}&yvW9?LesGz%cjfo7bVY}h)7*G3s*wcuVyv?4L;MyFM55& zPn*xA_+lLE@_ea3q1ui(J;**oBa_33WRfDVr2REb+`GX{Y1MSYIni8UOJJ6S*>c5 zSFfXv1j3oLw0qNYzB(5Bh+rB$*pFV$Q-_3C}s~Sd%ursjZ z&_|E60Piyh?UOXKV>P3?y~ggfCfbJELu6{;%BW9?DI|;E(gsh3pe=JV*r4JFzEm*Z zM)M`W??p-(_pKk;t{Z{-j8XNQnB&Tem`wLK=HL4@ix1+WwSW5nBWc zVB3N=k?X+0kiVP1@V)Esi#Yd}d}SwLI)L?c^=qWr^bA|~uiyn;>@E&{(w=0wJA$gc z>N#xFr)#f3gG@l;j9|uM$-eYN8fYY$T`@|jZw)BeDc&ggC&~+AC##_ORp6j^3Ri-@ z2%FfN?eYrqv?|H4YgEO)K@)HGOc%%GLHz53Hk4f2o0a*Hj= z`;&)MFkH<%?hm5Q&TMrY&ztB(mLpJC2}F=DG)^XLd-;=bbDeQ}BVf0Y-ft66pWE&( z`|lCPim#;p?!(2pbHAGS19KfvXKPJE`A#5lRc3=yTaW6?hXzlZM?LPABs!Q~7O)`5 zlCPKUJ!<3UyEGb3NI|iU&SyqBNinAbsyl`CSDXrV>W6qY+B%EWNE!IfI|U4+rX3?? zGz`1*zbRme8kbeNtl_J(+YUVLczKSI>3`cyPh$7v`&4Z7hi-c~dyf=DH>w?*K!5lB z14ugpfv3Rwx)dd5l7gt^BN=#Q%WECV+cWY{y))Oh%-Bb(1z)(5#+xy`l`2#eV- zPKuda71hW|b)ilp!;fc9vXkdM6k^{aeP@`|Egv4GLI^n9$Kg3t+_ulj5`8r$>XY-%-wr*Qf#AI*mEa3pYtcItM{wNw2=g{yOX`l9aU+G!GDh8LIHr`Cd_36N+CEtoV77)}|R7Cis-x33CY_ccQ?2 zQFBX9-4YyVy9q@LMKjr4d>F+q5s>_|_`dOqp|A!j1!4*P6F*>whzB6k2io|1tNdi8 ztt{+u_c*<=U4uk(@i)6=={Qp+{Y(iF^^2*R*Oy^OJC0gLx6oC*5xe&CsxzZzg;6%#USCGVH$mEFJ$u zEF2LJGB?i%8|}z@k|wY-oQbrfCr+2)A&Ewp%K{MgJlmji#Sp^i7QNK6~8Ax9$8%+P8H*8a1a9}}x9cyt;c8=UoH%o@i=_k8P zwu)rRP!6BS-??mM0Bz6|*2mb3ua3Z`s9ueN4geQ(OveAPupMD^`A^%?jVXS=(!RoIZS#&w{K5 z=7wX#Qhv_Mufzrn!h^ZE@+=BI5e5qpKWBE-U}rT*k>V+weVxdDWigM@Y?s7=kkIR) zxrj9NkiU2htpaP}u%tj{&I}bObLCY8%8lCz~l=czH(<&lzLeU}@xGPo_vte64Q^TuCFU;-^Hr zk_eJ6qR+#l;bzgy7xYX}Nk(d;W7kv}wA6oYEhbA)sn5efdJlgU40o=2w!UPA;`Xt_ zT8z$`DoVK=9CE!=Mdn)$7sL`j2`K~=r^|*5B{pQ^N7D1-DMUu$Ci=5LT_p|~3BoDj zbsOW^3B%20gOxr~_JEn|zJ$`)M%?c%!HdLFSafi#p><-FFsl!sl+%&Q&KsM#ikE@L zn(Z0OKFSG0{@CsYTNsX|kfenvlx7Ace`;D;8zG#gUF+AeqCA5vwRCQK&+^#*;6=yu zV)g89$>Ou2QluZx#JyBJC)n7hUIG^l|CplLH=L_?b?Wh6OMki3YMU0F)&F~{$ z{)}Osr6E?^S0fULGhqFpyu!l8R>J4v`RSb7g@5)ak|J~33+EgAuDrbyZj^!-ImkLA z{qE|VjFS1=lRFJFvkJhpAJ<2T8n1aNM~#SI&d=wQwE3V0r_bgNOCqW=X!^CbdG4%F z`|%V!nO$?9d2;S|#TM%TkQb4M9XHmwCSU2p4$Ur|Y-rzA6S}>_yNwlXfk-9kK574C z&dIF0iNqtR?KShM@*phywlg(CzH}mc`z{!xqqF=-x9zjB=+HbvuYR+Q@0KPb!D(Ac zzX-+71QTX^=pOHf1vy&L_*zi{k#4%4HwLJB(3^t}(&E{j!O|#D*cE|Mx7^O7(E@vg zn~*+TJUXtiz?6#Cdj%KwVUASQIsJ2{M8v5EI+%(^LGn0^(mJWOZ~*@*Cy8 zFcB+1CDltd&r@p!tuIdw-;B_`$^3QV40K~c@VIKTVlbMy#8S{s{VA5?7;3v7nz$OO z2Gr|W)Fu)W&)XTl2KhhcE!dP*l%Ek#RKNRp1K>&R9^>(qaS2;c)?#}}hx$FNu-%bh zP8JzLhH5|lD5E&dVltuLqKyG_J#K0W+l{5DEv71~FK&gXl%>gc5%{gP8dB1|_q>b2 z)-HSSlVPCD=ytP^=a=W|HD5Sz&u0kIt>!KW%QzKBsnSK2hRaY{tZ#fo3vKG2wM>*`gx2mhzcG zCYfcgw4C=A_d(G9*V6TP*B!ywoRs}u%U6zO*KR*1TNZlW1>`TVR5m&GI+CpqXS(Gf zQ#UL79HSuYT8wy)Lo z^KPeWN1MP1W)zN-Sa7?i&5`c`48tl7Y3j}j(1XtMnh_eqC@Pt##x3Ck$;kWWR~#z7 z@3Rn#eu0}HR8zkolkouEFFTs5wx#?nk%j9dzL#Lk)- zK3KC_4Kkq8@5w^3DZIi>iNLD(@MclWjU~-fN_c1*)wDDj0f@i^3t*WWNUa3DuO{p zSiYLSxu{7ToA^VUwc1kZTa~OhGGI2+kcHGqUFyB2`o;a%CGr$6xyHtKeK)${LK7m+ zwbWi!o6wj2L2Ck^+L8$b<-v@kAB+ zfVH9p>A@WGuomg*_T-{6h8C?oKW(86mX`-sV;y_VLr=>@12qX^VwyBKd`HJT7OPyZ zv~^cA`U2R(X!BQg=eFMLzRP0GdUWv}^N?G^HPy?XSNZhZHx{+&n*jj5ZDS`-2pe^iQVbcKj2~Sha~GH zasWatKkZXaIGr`vH4?K>y(?ZgP)wA5i)^N)tZEsQ01$|9?Y>&GCVQ7%-4a1FuEc?= zgV(%Mq#cWWvR%n{--9fRcuUdQEsJrDP$l@d;g`_5FI3Sf!*GL%pKQ@tQl z!j2D&`(*T6eVw~`5SzGkAH2`rmH>GtWS^IqRF^VGxs8eo1%Lnu9s~fM^nQVoo16y> z;ej&%{&_LjFyP(40ih58IB8^ovJwe~LwWx782|u+01%+RFc1v<0ONte0so#C0N{ZE z?^*tv>mLjbggn5&U1OkR39tH;m z0scFXfA|3aD2NAuct8RLf&X#_2DzW|fgKEj06iQFgF@lJ2X=4-5By;ua0C(te&{s< z00BOf5OKfN|1Uc@_%Hbp2mttjGC&{@0(mg@9z%fs!*L(~|EmcA5D0=joDc|t{#6V2 z7zFS@*88FN$G;;6@<8B#htBXo0pR~u>mU7rJWw#~fiyrc91eO&0!Dxy$_fM{5Wt5d z5cs{<51fI(;gAPK4ZP1B68;c`LU|AmCxk+wzz3BMghFAEhZyX>G9RQ42!lZXQVVv^ z@xQ#t|C9f|XaEnLfx+%`@*on}J;Q$Eap@R1(C+IH>4EeW$_xc0jVEDtT2EyUM ze;fW|2M7Np;e8pwA4-h?-6!;c(}??gJ~$(Q2nY~@d>9D=2KdWs1Pt_WK>{KWJfOcw z5D>(Jlz;$0&_lKEvHRuke;q{r|LO+;czB=>AfbOl59obZ9alHaIdllOeGb12;E0lkh|&e|85noNL>z z5%WOyG_XFv|B|DY)faQ7CsAAt7&XZ$Xe7QV@=Ce^KD!2Y5qJt^i{& z5{&QyI{|(H2Izy_z<-bl5_14dT_MOndK0)a${U0L1276G#1RZbVj?_YPGAH8QygHT zr3)}{2gCk2>;7@z2mI9=08kM4PrARNeQPYwd8D;WVm7=VAlLpmZL?kJ=n5(51NQRr71 zOqbPQPAYIWH!uu^B>r_iRR{v?h-tg8(4WaZg2BCE{(lM15SWwmFAz?i?m}iTh=(Uw zOZ6`ojEeX_Iu|esATBH{EGaDt0DAzyK8~(JztWrfx`Tfke}TW$7zBa-?r?X2GX?}W z5aJBR{1N*jL0(`03gHP3^#9+6e@nzbAixRYhypl(T_7;x|76Fg!OnkV%GO@UP!LZx1l^a)QI4zW;ImJzpU;6;)GXBfdX~|FJ16!+ik$0%F1d0TFRw0Pq*d zBrz|6|4#Eye*^vo|66Mag8X&3|CLb-<_rf&|G|K1-rqR9{-Oozj>3chFz^Ba&Ts_ruZfCD1B5VF)-UBBSrj1T4)sL- zqri+ze+cD@0RM6MS8Yd61Ol^^zuAE~*x&N+8vqRU0Xq^;j=>#e!yi_JH=MjzV(=DN z>6ahoSh0A`Bj7)YX!JZIC3wYCmKHjXI8u7m(|UVmNsaqZaf;>Af3vod;7MJgQT=(q zh20C|p_O{#i9wpqfxJzn4;@TIi~^>Ls{xlDe*xwpk8o?TKWTGhd3Z{Z8s<=*c(-f# zeCR+=_ePGb7_F8`=#X5XzY4^fJ+ldUJHnCekUmPshK~|pBIKpm^&uNMJQ}9R9JprD ze!)i^xD_j!?|*+mbJlk+&-s1c)nQ=<`>xXN=$So_^&ET3A|MN_cbbtgU5pO;z! zE#BVixX0+?4dhjGwT_;dmPutw#zUj}e{h;Dz*INnPN9BINu-_mt1>02lLw zh3`w@wPE)%Zi{CH>^%=GsoK?VS{NZ8hk8>y2)hoG(7$&0l)Sr}NAD`CW}g)I z@-%xcj>|~40$eo`h8EggD4`KlE%Ig2O;{A4*z01?7t_*cTNy9yiM9##eRwLJe=E3c zUSd`sFP>|}y1W%5(6?R{(ybg8(Jp=Dw7z&$T&!$My#Y5r-7WEsQto;F%~Ucx`)QML zaAq^oAVotd2B+Y7X|#>V;qDJpWiM8@>NqkBQ~9%{zUG1pZ+^6vDhF5oq+W;4hTM~Y z$p;gv`EB&?gB59>9##j7R5Ti#e{f^nOuIe%oFi>@8uzYUV^6jD-qjst1{2ehoV$Jt zSZ(89`<7V03@x$yLrZMlinZ4OWW}GQ;6h(;vW_nWzd4wf=YAG_ zI?@TA-|FtYp?sI1QB;^pp?^ygkXOW&Hm94F6@4aEA9wL)Qx|_3 z=e=hV#U4<09RfF!>tE|nCLtNJfBaD{of#-x6hN4AEmyzcwo_SsI*~TlYd)F)vo@RJ&uX zx}5hrAIdJMJ69cJ?g-B_74Pe5pXy~=3BT)&^YWLNr+YbObJ7ODL1cRLykQfimp{gR znQr>kN=I-;hwgh1e@_cPt;S~^e^8XlePxY|Mq*|r-)U~rXdSM|HW35iVe{lt2`xi* zcIf%W*}EEnMA`-GX1dK0a9>Z%N!J}hdY#^JP7w~5mkwoqPmZ;F=~MVU;g9v+iL}%C z&3PuIWIY*?;C)liTX3tR^;YrFwe+X{!ufmcxjHXt9C_%ze+(Rdv)OgYM3r#fD_VL! z(EjrrhHtv*-I%!Az@Fu#Z=+I^n%6&Na5Ofcm~SEC!?G^r!K&-@wRDLAzWI0=XfE`u zTUlPQ{O8#ZR^fyet8BR6Df^Gp!Q-xAj`osILp{{q-{!uFJbzmR#Z zXDhpHtK-wke^dcU2`7@A2#dOXC5}Uzr{(}m>bDBR>2zV@Ci~u;MFN|{@5?eY{7wp` zzthQgb0sWu_g*$=UAXF>RgU>D8&Cj9UjuPeHgXuMe~DzvFq*;4;6%_Q7+>n1GmVCwh@Y=kjbud%|V{Ea8z3FIy9rnKD4b{4xh4oX)+ zIstG!5(33?ZQPj8m0@bH|pLP3idgc#Ju0t1U9ZB~#u;enF8af=rAvR)utFd4M}NsEnUbJ zXQI-C3&S@URKgegi8fK3xxoDR{-f2Ltyp22e^CA!aEk%>WbU!ggiYgH#!E8~@1 zll@p0Q-dpEoXt7HAv%C7dg?bq5F*IrS5G2`j61C=#8O@DeoC78qnV=E#J+<2)>%Ha zi?b-8l4l7z{ieIpfS|QluE~UmgZE25M*ylQZ(ARHht8EzwYOrHq=PMmmHF{x803kZf2#M&}zz|ZJ_;(l&9c< zC*StcB-`16g6uATkY7*b5C<{5zHC0r2e(`JH8PZZtec*~0;ujYusyP#JP&ZWa(fY5 z!)mNlN>qSn?I^U9 z;@#syDXhUq`cFn;blziU4a?>>e;-MNhNz!${m-2l;M%KWZshP`*UM@aMSSP5 zn`yR87PAqYB4XYYMNmJIRrV1Piyg`e@7ajXEdyzX>)aJKgMv)T&wUncyy_GWW`zpu zebLX1%88VB;(2m`HWM> zwyY8PsTbW=haHqZtUSPh4doMzH}hkTC#;?rp8X{5SI0I}%h@`(dbT^P6V^ORrumGk zqDle#zL8=-nbzb2iX(UVIw`H$x{yb*owMm8%e5btezTl@!-{KUe;U;K(X?%k%MuYZ zGM^#@vxB|D)z;0XAtB^WQY5Ze%lb0-hPb3kpUGcGy=s1X*Y;7W!(1!u`(v6P_PS-c z4+y70d1l$zwH^K!Q50T_JG%2Tb*njIi9dm_*@Gw%Zc5kN$X8UYod^4{`}4TGDfRM2 z$DfghyYN&h2SxuEf4*ZRgsdtmEHVDHj)a01LH9py?J%zj)51s=9NZ&ZkcO|F*ae1c zj>`H+QaN?y+&|r*s3C(=-VCUHoLVWhekRz{p7fE=xxdTLx6mt$<(plFvR~=vCz+8y zMeccxG!WwBd_QP79DmYgi4DqSm7*Wbb0bcgenRKsJ;_Qye@u8HxuQ;FrRZz&;PGBW zCQeGpDHN_ew(%~Jh$SiAi&gk^y*gU`W$4Y>`LpdJwRw|6FAu7a zLb%(}A6>YAe-`;r8}XB(6s$`ZrTP*zkR3H4GAzdI(hnr4IHS(od`o#CRrJwbJsS^O zk1PsfblZ)UZJCUfLC{Z|J|FC|#;ww2D#Z2Pmfe_N-JYh}i6)?YUSC31#Sm0@F7z-j zVxeO)n>BFG{^jT(n@%%$>3rMrKFE1pnD6J6q9@p&u)&!)-Gb&g({)yaRyCioNTN;^ZUUc zg*wVl=5{5(?H^laSjt}15G%Y~hki10e-U}7I45YBr#bRt`e{}EzEG?zfeAg=P21W- znPt=sf9>*zir=Yxia&&@aSLmFmhG>jo;LEpd0y1@@{uW5?QX_x*$laO4+hx8vS$bi zs;dG_v}^~6_uWY*_INSg?(sE0JxIVebeFtW(wzY%RhOtChmxOnM!Tb;o?QvYIXC^Hh1|$zH7o48bP& zz+=GOgW)=ISJGZw3Wb0=wlPal`lvfpl4{MQ8YRz%Pf5(mhr)jq9Ix<#l#e`Pqb=KAd7C51W+=v|FH{U+obC_0~%y7{G` zYl%&xD2cpejmudNIYcnRVrgM^8F+D2Rb6A%UKMLg5r!6RJz^y=-@CHIrF znZiXCI8FpD~;?Z;_humtZ%cvUpY@GMf8Y zO$HI|)7+(YV1tkiCUx_sD~~~Z8ijYB>kI7y8ZuGe_S*fzG9pqn@7r+1nf>sZXvSi` zHR!iwOSkYvIo6jWSl@K9=A)=QU8&{f!o3DJD(!?58i8Ta@M9*((zvGLe@uLc^FY|; zqZ(tu&D6t7FRtJ&H$e)nK9i+Z)%xB^sP6>}on#_S&P}VsF_jM`9c~*{wjawhJjLxa zQVC9~CV>U#WGJC$BP3S~vAv7C#0z3i%Yh}ZD7$l2g+O~fqRvX8^H$^#&v(JCv&(J!jYB(IUn#5* zw>Own507NxVyB##35@e`X90;yDDs<|0_b>tDxSqU5IV1?&UJA>+Ir-z=QW|p8lALG z0)04nyQxkQ$dY~8+odP*qd}PUB92cCgGX0buI~*k?xgF6hquLbf8V0DnjNbG16-M# z*fBew8neaTgCD##CY8kn$-gjE?wm{4bH?#d# zA^WN7=*Ld}}g4;FU;-678I+;iL=9eV|UePtm>t9??=_Uxw~B>G;R*O&TETbqlgyb07} zmqwqz73w=UNAOKIG|h!)z}bjmC*PV8HTVr3xO{i%11&#~fA_3Z&l*aRYooM0^PR0h zzZ=9k<88p{b~(BhyJso#pfz5sQ1eY+PU`sn8{3va4_z?4BJH)=kAufIkMk1}1|=1? zcslbAQZ!-l88~%?B}$TP8~&=1#&SX;s7t+$uAisKm4e{&N77oBKNFmDi_(U07q15{ z&-o}P3oO;Pf8HkD?iT$1jkS5Ojg41(+C-AHdCH2pjF531Z|C9kEhf&dlS=E_H~ETJ zqdwKv6H-i3$R8%@XRokJcvYC(F|{IpdUu+xR5$rrtpDxy+Pze)0j{I1iC=x*9h({82ibrNT~ zOPtra2`>!;W$~ifh8uK_hVS;jFwLqaRX;wnS-W$2Y&(*O%X9~qL^g$}IpDi7K-H!_ z^p>XQe~84jQOD)rYp!%7(QXG>pSv~BSws(5OnPO|4;{#VOmozrv|kViDSXa0xZX}< zLYU8mw9@-LcwdX(pun@Zli5=BAQ+l{iYpFpx^2CdJ*X~wn_r)^kc$#h6m3(kZ`7i- zuQ}59bC9L^o~g_a#R>Ht+BN-a5&{#;mRaF)f4O%&^{xvRWB4JBV$QYds@1M>(}EKp zOmTQ@P4I>Um?L1`ftUOwQTO$0)Tjqluz!{vlUR|&8smYh{8~qjc10V$+7N%7K>fJ7 zvic@&A4jYH*e=zlB{mG#EF&O>%QB&=>q)qVBAMCPZ3!(B842`XbdRywZARPR^{wQikzH=+yK*N4_JDg>s@F`t>u)CgReOePW()pmUO~-Q}U&!;Dq4X)QeOnsE)jmA>zCgC4 zpRbDR_}Jr-C00R-{&2D%K`q&*%TmyS;4#daIe=rL3L5_aC z(GqZI6glvLFJvoK;8~2#bzF55)?9Jn8#gR)BFpsWD$eZb z7T6fVmG5c9dIhU5e6(qT z)fMPQEPQ#Bj-VysD=VVhpLx4?{awk=tcZT37O9t6{hHU@({CoAC?#esy}s)k@~K)K znX>_XYZ>4ryg9Lc`3tun?!e1LWF$MRT~%`+d|jUZu#!1^Z|clWe^4-I*}pU*b4ydr z``shKrE50%T3$^KvHaMejyQp~0e@&VX|Pp*oBE`uVJB7Yfa+3Lrg^L1x5#gw685U1 zr4G2!L5kO2)!~SFrFgcZ%JK5W+foAWMVJVCCbwoz^fjSmKPN8XO)(J zD2d;)5Ad;C(wPLLe|#(Tt|%=elHsY1Ic=bO{?WuVm`YzI zFJye$9d6vHJSR5Azuj1s*}ijP=~mK?RzT}LujgDOd4G#7e@6eEHjM(|4}}88IHZ;=4&p|82G*zM7Y!hp~Q| zGQ?Kpnw*{fxoO>b;MO?9+TtCcBkeQRjzxj}RB9R=FP-C{;1>-=^Z3{YX3OqdZ8)4hR=1qPs26 zX^simBhu$((@x2byolvl&Qtp1^!keMWyW~|s^xAbf5etYw*+ykoY46AU={a=Iz^tS zBy2ZqR2mdc=cMwRP2&g0QWo{;MRx53*^Lrb)Z6^ak)j<>e&vgc~kB$;W0K)?A zfhfV*(~64zFY>8U*qfnrTOMtl-$V11)EKMXy9%@_&yIi)IjytEgFZ(e5AbQ*TAcO6 zKK+76?moSdZ`=4m_BpE2vGl!l4(aF;Ji4rme{9E&$fuyNsr!#+HFdKF8guGoTdo*C{?yJ4jav$e7bp{OHeurv5HgFA2U0hh?&u5n$@`dR46({T90^`wLT!H!!ehv0e~(nsZg08-CD>5~m%KLkZX zL{yVdVTulKZe=fUY;|)lbZByAWs~P&Py|IoL{yVIVj=-ClU`yqlb2#T5j8dnFHB`_ zXLM*XATcmCGB}s9D*+V*F*Y_elkr3&f42oxo9PxVOmQi$MFSLfcXxN!K!OxVkl^lG zw0J2FrMMR<4#jD4E6`Hh-RY$>b7tn8|6l9gm9>)Z+5WtH@Aq4wqt?`6lLA4l!17QC zjE#$(Qy3tlrl!OP;N;|C=j7x@r=!!ghdF}(5~I`UgI(S1p%CGJ8OXSTfv_i;e=HF8 zWTys&0F>Pw0bD!)E`DJy0bx!~05>P6(0>e}uEGFWpocvOpvDeRhC;w@=yWnrXKz<~ zTRYfOn*Tfk7_FHATtY$utbe!zq@2L6_SQfMKn)1913Nusv<5l?bfDJuV3_xRg~h_^k&7GPuV2nJ}#tFptqV5|Tj1oYbw=;#K0fAR-<0PP)t zR!;_hR1O5lOKAasPXzy>=Vt9{?+kNece8i=O_Aewn5R>ggMeh9PEKG5%nki_eX{nh zVC$!2_vZMsvknlbC&c$JU}Fyf+59E}a(Cv?gV?*cgOz0eGIuHoK=#%!fEC!*9)kW)^d~Xc=1=_8d{=uffC=Z*>~R4&e}DddGJ6^?5ESC* z{g3${{pHZsmr;;2Wcicv-#Te&s29MOM*zUa&BysPuDn73fu{%mfB%m1H~;@||3j(? zwEwF%&VK?bL2RG^F3vwWJRRPDczFCZ7L0$b3=`nLQ>a6qW*H1%{Act{Ir%uPpT4;M zpBLZ{m;b-H{~hK3Hv0ctki5I2;~#3qKlJ|}HPFf4(fcohr%`r?J*|Zr^l3RD|7&Uh z{&SVpz#w~fr~lO|f5CuH>mdcPeHw8#E?#y{-aqB`Zu0hCV34Lg%-ZhHLHbWGo^m+a zL%^C)H~Zf=&XX4>=l|%Qw$9q&=~i)j>e!zupxe_5!v1LPZw!7~vj46_4q^=j{oY1y zK7Ihu)fMQC{xlFzh!5b)^|ZDiu-6~+4&Y#iKw(cVfG5uWe*hb(EBfy?3vdHC6n~5U zL_7cvrGJnhfJ6OnB*+Ee(E0~G`Dy=+_=Er)PZxs|@NWs%(_C|a{{^4yZT^P*PssN7 zh5B^(|CsOsIPCrf`2ZaD|APDgj#vMJPqjJz4Y{9^IRc%mK>rlL&-opo(gdOR|Q;8_5D*Ww*Y{{&EEE3l=+{EaB~E@{fh(F zlhL0k|Ep=%?yjy+UHxO%o;vy;{KtI?277_6(HCZ+)*@lA>cZNuYoy3L**3;Sk&ZI1 z4Y}FIi_B4B{c@8Q-;;H6-Y%+qkYDKIk~e?VsV?nufBkM{?#%aRJynA@?1;(LWQD+sYrIneGKxt3b@Gl^ z1b0&nK0wPGqkCyGZiDyes(ac!|FV4U^icSNfBv`W73Ao!u=wT>4TVQWrxDx)l+60~ zJVn)o7Xi32=`ImSF;kJ?{hh5!RM*Aw>2=3r1F?03SN&qig}lc=`b)gs*H(etrEiJ{ zuD`^T_x3hQrMi+a4Xp{>-T6&An;MA7_-U+Fa{8PBmObmVQ0maW&1%143^h0|lHgvh ze_4->in6a#=Q+WNak?0enZ(@G9L_P4`XHoadWaC1mi&-NVu6G}dpX_`aEDfS`kI{{ zqrA5UyibzRFW5`)0;TZ0#iJOg^q>=6PGu+T?}Y&0vRcbQiq-n6eX{dsdg*BFsR{ay zqGP=~uAhR6N=;pX+nnJ|59C#q4Uc0{49Sv=2P zC6mI|dyuRNSDl_+_+l%fRykn8guVyn~Mi^p~ zSo#t^xR~;ZWBqMC__CVUyM7JM@=2|Y_OIthe+4V zW&{q1&QuzLv;J5-iNOUyEp4BZKLg5I)`${@5p;2o!7~mXS1ib1lc{*1r1E@~!HAd- zeYB1VZzg)@Uv+yR%=*lx_O_h&AtalIAmY8?^Xhp7b3&VaxNemBf1ia725zbEf;E!I z_O;&il{D=3bHZITn+(v&7>h(7@0Of=jPwjb4rk31bwVnrWO7Hb^$wBN`HY!5p9SZV zjwrlOd{C9CQE@)2CB$x-n?(10M1nphh(7bX+{_nq55+bF0Szl-BZn1|;X3XSF)gFf zc)Ix$9cNZ`?Bf2lf483A$9`p3LO2$zId&2LGx@ZaA7}>+4g{_*A2;hgPVUDU)>^;0 z%{IFBgtnE<{bGAOxv@-YCk^u(rmH3KBO`q1%_)p#7NC1Q;Vk43<>^LdBBg71t4>lZ z@{NAbp_ucRAQQz#&HDu&9r$S3Vm>sb^7$Uh-GSHJ>yhRye+9&E`$9httbOJuLuHiY zRl?DO6^J3l*JJBPLZg|RGpHp)hoVgsB9c*!;4aoV|V~$XX2+v8Cqef_q0ZLn_ri;2fYnS zNUm?IuNa8hZ#!-*w9Zb&BJ(Az7q;PF9oOz<4oA+4J0}X=-TB~PCV$Zwp6r2Y~ zcE71a2=OCzHTBtr4(q*fm&I+m=b^lC@|&Ghxc$kV1`h2>7J7ee#rvAcveq+0#UVAo zO{`(kfBl($(gJ}@TdgQtnPqxGI?q^LnDq7A@X}Hlp17Q;w!TB1%hU}baR_OLK~nh% zTx~{69Xa)nTaJe6t(!JBK|IT`se)0YPA%d5ZLHbc0^j}vV`^EGV~n1g^m_dTel6hU?n=|CYZ-YuWy0o>N4N);b?0cugp3D!g%qal=3 zS_Ij9QOyFDX%)RXM1^F{T+NFfDxHO!on!0Dj;Zp@A3zaW9*yl)=LR6)^x!gAv%_2b zf4f}EueWZ*Ih&IA%;Sv%z`&%q!)7bhc}g1-c3nl#S8mQ4Ll<9wzi9s~$X`chNew|C zl{Pt&^4I$`YtjHrkmnl~YXGdQ=*Sms+L??87vp&$?$@eRt@gphukxsnYR; zP*qkHZbr0vo#IWAR^PMcWzz6nXN<|no=*~kjNCPC@~QVJffq-}_w)YaPFpEGwTC#H zatPYpp7ewkG?;oA#75tZ>$+#s;xE1-WoaKk-ne`pGn zR?+i`bo0(P8P@f}em*&xhX~hFpOZoEpvU|`hy1mUpX4@cbDltS?nO*k$cU8VxK&Fs zZy=Aqrm>`#i^!*>4IPu2_+viGPh+sRJ!;BRxpDh*vxE5Q`gZ852*t5Hu<-%Isb`i| ziq?fGG0|j=Z#&@IY6rVf0`)v!f(t)6SHG&egIldLV}3M8FF#1&_tJU&~;{{ zk6lL5jjwr^DM;KB%x0PO+_uBM|C(f(#|ep{ED8)E={9Ch9~nSP_AeY|31TnGo7*$6 z^20Y5K{i6VaZjHoDd-=Ca>q;>f2AtMrqtLJ$iRTXX0MI4Ns{keGqTF}f7Y1UupXmI zE`54(&0en_d^iX931x^ngbC(emB`3ibu`!bcc`=iE2c}H>osB}OP1 zWRHQjMBjlKky3>(YW39-TdC2~G;-k!>Ep_OYJRmTwZ33f($!Zck7x$V_Fq)2uFV-P zMHrLc-#o_6-1OFE#_7u^%&=V_S`MTbi_uV4eRfe7;ly|O{4K9W_$3i-0*gZHR6##H zd6d%yxxMktpihK~f1*hJBL<)Ofv#?2HeKF){>PCi{T>a_LZdlR@AGH);2}zcAa{|% zgRY3ksF@3l6rC?LzT@9J_%mbaX}a9AXB~dZN^2VCzCGBonQxKweBSgi6=8?2-V|;-02Mj;#-u9CwKq_Sed22$@dD z-7~H{Hhug*Q4_>jS{ee=qmh_hCQOwQM`DD!do zi2CuD%Gq~Oi<9n{;tdSgX)S*bua${WCTaS6ESL0cDAf9<4vZ@e2Rn_TK9{f*}cXmKVf zFl*V2KZNS#lt_a_7NSkBYsgT@{I$jmtk$$S32fM|M&qfZ!k+jHpd|Gplgd1??2YiC zE-(0YGTx+Dzt2s-R!fr(+09Jw(Uv;4+ED(wI(tB`Fq9?p4t+QH=bkX0pO;GQGm9lso`zUReW{1OBcm3bIBM1W&wE_(Bfuu~H&aUUk%#rn zD@NK<`q(qc%EWR7?600Jy=62%kxSeAg^h3qsaq@UjnD{wcU2RvMa{&fq{xBzN^i{7 zMy@n*gsx`y}`zg_tV=k(jJ^p#p)wV7jLLa-LImOfCb{MS2(!^%gmf}vUypX zI;D!;UlSVXQs>npPrC0MIJj*Be<0Aa+F1D(vO`Jkn{IH3F$?>a-)&OUAmGm zdk_@lQ-YfBDfc3$$LG!qfg7>FA=3NuLQ{krua-M)gI*$oLq$zhKGW@#M^Qa)f7pQ3 zQXia#nMvf^{)4Ggs)#_RV_iIF+m#5CTnwZ97VO3L)kB~(KiYiM;lp`8zY9|uHO_$6 zf+G3BQk*HBM{(8xXvZSpi*!{LM?i4JbIEukv0lvKUfzS9Lxu(JmIOr1<*%u;g!(Ao z0D|dQ%^}ofs@k74uqwbO_c$Aie`TV?^iVz``{50!bW@zuv+uhIReEaH;~w*H4+|6X zxj_X|yGK_Cw^H8f1*Ti+pEMce)mW!ZbV5~>k7AEowg&cBD)yrSA`^>zQZDVv(9A9J zabMxFVwu2x&^UtCxFQE8=7YS6Ll9{f#k*HNz+)YrGCr5h*G4B5`j9%DcwO-n`PYB{^~orfsR zkmnsxz7~`IF~7C6^%NiP>NOEvY5Yqz7_ZBcA+=;obHvZm-5kDktZ*GsphxtLf#Dsi zpAftITc(`Rb(?5Ar?tN2e|35#C4SA;7s^(s{ku)hwayZ(&Yf7t>m3|5rO7XUsgI92 z)C1b%}uZR7RB3MELsCkxkkLSu8_RH4fDf_y!^n{@$sTYOG5k3YN z*)Yoc$>qn9elyDAQ!bBZL#sOnUw7rLaDJ5`y}ve@iOt9)+cjMMI(A^1jp`&ly2-t` zNZ>7%}9M7z6O{j$#ynoM3P`5)+{TI_ARz&ddnx|_n zI$_=7ef08_QvEdr648Jj{hle#Pve;IIif?pyR5or4}Q^=8Y5??j8~zp}EHS=)`1Ss)(%!wYpY}J^ZZ7N_ryF!qV@xJ;vEl z(jM0oKgW5YdhpEF(xUX$T=RCE&z4=hQ9@Fm%O`NL^o|p#cK0N=;e=KOwJ(ls5JH`T zTfU?Uj2<|Be`e)p&!6<(=}X{+Dd$7|6>ad^Tg#vazoZZkcFkw&*xCg|Yt58uZ0Z~$ zfE%;3e5xfj788pPHhos~Gi#rnZFtk2wbb?9^{^{a-rO;av2vtqP|d_47E)da$JEyW zScl1vN~{>aE25*I$vDb>;(5{c{5q;iKH03Tk%e$Ve^@KQD$tgiuRzVLrEc#CanQ1A zf|jz)SmeTKbY_d=XVW*P?KFE5yV4aYKqYd8frLKlN7-z_E%LlQ(?y9lFGF^{-E453 zuPFv!>wYsy=9ZAZ=2g}` zA$8}We@IMs;FYaK9&D}nqo=#aXd$UVu&on8QOPvz%b}dY+#L)-8cO$e%8``v%NlGc^ym6o zOH$!B<$TzS#L?CBAraLgBhoFQ5m)U5D)1{Gf8SsNO6rk0o=eN_wreKyBqD22!285j z^sdMeLiCm2u#rWc^p!ebs@XlO@@5@ghs!?Iv8yM0HKPFiB=RfW=ty4tVk;h}xf29u z!rXxsg`bL!njaJ%Sr!jR{pFiG=?vjELjoy^(Y9F(s%&Cg%{2fN_JLn876%_B#+AW` ze})pJ@Tm%Q3tHSMF6`DzJB}tcN)Rs!-?KtVKcr?XxgUzUU&C?r4RId_sUU9|HoXyf zf-Zihw9R;#I~8rk@fa$1f zCsbL0c0tjRV`RqFST}q%DF6-Zs_Vgwf0A;QCA2(S*;>3GR(fDb(zeC0G3^;G7ItEQ zqVlp^{Iz26=hc{H{Jp&Sbh)FHW+0@WPam!glf@dnyl{d^zWM=!#Z~?IG&JSXFpvDU`T6`HOIFTKtL`&_p3q|sU4P5K$e47hAxs2R&+&aA+V`&$PMr-tn| zP?dB^SJ)|>)-zFXP9L`L<`Hvce>So$IyIGuwtBrLsUc2uTi;94Q?Y#G(e-89=2s-l zgrN3JaUCrU5Q>Ybc9XCr5y4VJ&Z+NsNU_r)^N@&Pg1V-Ogx0SV(qGbcm5F00=(hH2 zLzrqqDQpSfavc!C!CJCL7ygX-gJq?FD`D2~b(&YG42JqZV99>I0rcn0f3ScI#Y43K zc6$;dc|hOQy#fVpuO0O^Xb9~)JHer*K238m{*Q<)Fuz5S9ovYK3#P&T7HXN%lu#>{ z<|buNT)dUC^yNIVob09cDBFm3j6jp466-MRnIV?O>WvCEMO)P_@^(v5mtl!z5%SSH zPR;35Rsqyk4I8cI1?eAPf33;Q&0@7sjQ1p_%jPe^pc$C`cO(Y9^qRoQoxBm$lqIe07n>q_Fxcrc z&3J9gLH%qQ-xR8%f1z%s#Ol|pG&pc6Ue)fM)i%_UqFeJbTV24Fh=5~RzP@$gms*uj zLa|N-EEYSPXU2L>F}viP*!;(VJe^M57-0{0^o54c8SBPS#S6j>a|(}Kw%*b7exn4C zXLe3wUxt1WdHzw}FSYlV7yc!0fA0*4GlRy70bekM_+`NAf9@C6qs|Sd%FFV&m#gUf z^PP|a!Gh0Xmk-0aQ4i}_8Inn%pRTUD&fmP^OnAn0CKCMO6691i1{ttfo&Xdx62W>g z`WSp%2e%kikUzIAk4^^krp&KCjLX3tw*(uD{?983B? z%B~!4N%7-{e|2%!1mBJE;H+NIa(>K#WA&&LH$)_ye!S0TuN1R=kwXx9)+~@iqOQ-N z!2Cf-g*Xt{-<*l9A! zi`zTX*xXIr^ikPD!Zo<}}Q4yXd+ zoVUw5tD0l@vTGz+Es?h476*F>`^~H-p&hmXa;8FN{2*sbk`i^Y=bqG4rbs4uxsdmW zLswLce^PRd#Ny}&Sh*T~b87E|Z*@Z+JW($(aW_> zjLIe1Idv2kUjU1Ci9+-g?HzPvMausmG0J*!e`vbp_95_IU~wxqVF-!v3f(SZR@*tV z@FZg*l;nKKc`uCUo~~265(V_`!VHV$2O`z5j9Hbl;VA|Om91$N`LvN}^1}BtjA_*KFW<;w|s?g4HLo%U0 zf1p@gDT5#P&u=V2dbNHnc3HHSN-bI|Y(iNE?pZqZ48`GzJTJcnrH(5tFRTcff^7G1 zx&82)A*Cj-T~Z@sCdX?-l}TGR?h6<<+Sbo*BbrIO_AEv$1k*o|&TjajRTs8A;9749 zbnu`I?`>!oPm~=mfFGfyVyUTv^k)<1f0ti(h9aH?2Svj zG@Ybot)rzIRaPd!xnd~r=0B**-aPJSWX4-}3a$k0U32bF_3Bx8Ox8hkgF#S*_=14E z`)(lrJmS}QmmaS84(dv@qVdne$ZxQw*`~<`2Bq2Hm&n#{rAd1TCcgk3Q*KYs01v2B>A((5MYOLDv0uA zMmp%-2Spusgu+`v6l!sm@n~>?*@w^OtL*QaXbBqlDle1*ll_RQs>pE ze)FwFiB6U`AS*LqcAXd-MYd%RTU`O0-l6khPsaZ6JqV4?P6}m_+a;G%5QH(n7xaor z+>erxvabL)uKpOEKu_OG$05eIN%_XIfQcrjdk`7Z4+tG!Lq`YKpM@0o3=5>?@0mfu zKEe9vM-UvJPchK0aSKx$Q@wmZ&dKonuZ*icMIDeYlxx%(xf>UO&8^g8u&zDVeP@tY zwWz_j8p*Rs_GugfHga`WGq2bh`m>}tS(QTKtEhD+>%N42{yxbm3z50Q^7dnU@W$o8>j(p?zir|7;Xz4reBESPR~KTG`BiDwcU&ZNz3>7H z;)H+e58*3Z+V$(jqW|LKBk4$X8vGOf*YADdHe<&ZLhe({?`q;X*Bazsyc>6h^T%Pa zXWNhcYuUsj3klM#c;YYx&^s`lev2v4BQFE*VUe;p^k!#B>5pu;$(fY&2D9d(k&#M; zk0%0IdX1A@*u>ARON=DYRBDcmuoNV$Y5JY>`Ky>S7z>^#AE^kxwvELtzAkKTC0REZ zAuX*p*Xx&;LEf{CE@gx)fqa5cvoLL%S|TD5e?LxiAz>g%EWfTV(1Pn*E}&!Q$q19? zsH98I#D|5$19b_5kP+A-)56GKPMVU67plQ;jV6lfu1bh-=o#V|%1aCnQ|dO2THl|TNT;*cbu|6l(lD!(U*Lr5su?;?2Eo2i zk8!iFcCOf#EbW~LAR;i@z1$Q2BS1oAeA0H3_GR$%bZXEUQJm{y%IKzWU>%DnYgckY zlS&=FzTN4xS~Gl*)j@1tU4)u~E5yV9$RJ*5BK^ zuZkTDJ(kF$dSUY1)X*(q6T=ehvkN67YWpmjSydp4#Sjw(s0h7vrz=8Q9bj}$s2GXx zrE9^f5+O9qv@Hase!d&$;1jF`pfGLL`*rOm_u+a)3O*n z@_$DJmQ+}~0Zd(IT@w`her)FxY5^onZ)$NmzV7QeRz)P9dGj#!v$9mwjy-wjs3bDy_%)L@6`(0=4W{N_G8cJSBb%L4Kb_=8R`S+XfsqKSPLeWjj z-`)wVP$bm*297{g1!wO`Ef{Ph zh%u+S0UXQ+5tiQ!rId9P(fMLlwf0kUBOm|vK0L3wS`5GHp|i!midyS7?bn9M9lg># zRmq@92-!eNT#lf1ce?=u6&ORdB711L1jYE^nlK4ixD>>k-3}KuOsE-lE z@)ihZc&Bn+tV#FmEON3GLnAWzqDg%HjS6m308TIs=P%lhve+E>N><=Me{`*&E=j@( z{LH{IrgUZ3!JWeWK}v&LQW4ph<_1=g%h*xfbCTV`llGimUmSeYU0v$o$kRc{Z*8pg z0u|%x+)eM^Yz@Cib(_O(-}o8yKEL>out8#{EY6ECb|lL^wz69{_Dez9m5jFYa>Zh` z1R!R9QGl2iq-8JjMdFyXm`vwm8ds!tYNP*EbA7n5J4i$>=!7jbrsvAV*tpq&6y1EK zIfiVjb4yT0->fTyNexEK-b}e};pZoXv2$D8sGoZ(ONT%8j{X*o(o-V7@}p$9{^vD9 zlYUG|^NQ!^TTy)Ruzqqh;vYoK4B47ULSQlq(h`(w?Cog2JC}B@(&#nJ{>^f!Uk!SD zGNF{abLjTg2dTTKLwAJ0G7Zry;Bdm0Qn|p@uDGYm?>EoQm|&lutKK_K;Ou8p;s@_9 zk{9%*QxkdkgJ@jlxJeRlJE^frN{U~F#Z}w`CaR7NQV1v(eQ3ZCdcxbKX7DQ%FYvFq z;s{AXWKOw(%4)*vnvQQf%l1Ffss9fTTcirP6cXVxEx9Jxc|8iL;VdzE9=y=%*=_R) zko*?Ensd85YQuJW9d0e(T-`H|W`}60&ec7G7iUPaY9J6LLx$B#rL^KE8TmWnjce*` z$v%a}clTgDJ}yyr3Xh_cg1MO1RFXYPg@P1(V=E)j=0%vKLJ+PtsAx@F z%uGhe@oy+$xT(prQ79JLp(Q)lYCB@d(@56hZlBFKl)=G>mY;~uM8vh&lWDx?oH;&_ zhuMLlos8Vc9JX}IN-KP=O2>z%p!;`$SL9wOv-dN6yqNC^Xw2K9E28zp7%)EZ`hph? zX`qf%H``DxCuIfXG+G(zu6uhvGHQ?G8#8oaGFy=Ko}^(wA40) zg?gFB-OpNRZQ~A}NZy2ySd`DvS%b^yyK`gJqw|*9^a*CQCZodg1;T#6+=;tYqW`<8 zaB@0RjjK-vqcK41^5ia24H%-)koyL)L(DGEZ@I!q;NizSCr%sQcOMhT5f6*ZwA9sO z=lplbf6kEg`qzqs8$0;5Fqmhxmf9xq;V!HBfmnE2u@WqE)Xu&WYpy5(2~BeuWj2n> zw^Mix3#J4T!B@Sirfce948xs$llkeZow`0n_@mWLE-iW7xv1$n3b1AD_DB60oM>8Y zp)}RxPQE5r!t0ydhN%h@^i1~R{%{Xr&-{2(*G8|dvE3;7Cws8`mewGo!@z#@zry5( zoTReGUp5k@0`a@4I#yxuA#8HmJTHCEDI{YF#Cy+b^q9P!dw&Xr7r{TR(hMhXqSuX8 zn^;sibhkO4S@F3w2Yh-W%v!0cwEU)*2bLx=ljP6EU4Qd)fM;M#FWrq(K*=mirY2q3 z)*~^my+W%6;U}DuKI0)eMV&Z4w-z`F@`TW~BVpfy5psJ)>@?)eFbPF7qqk?vwG6dvH-x6#)tiPXP~ z#QHcKdwf`wSJmW!49CJ4F1fjZa_9zc9X3Nv(ETE`+@P`}Uq#z{P1w@E??>k);+ba1 zuiedXZAQju0I+?i{u5}GLZcbTI`C=I_Wjl{Z`Z$Z$?!qaZ!9$^rSo9c=Q&%uD-ay$ z@nE4#ZMjt*SeZmj)rsy@X0Y1IP=m_YO8A)=0aP>At=cBF+b~gY3`#v^F3ri~U9+hC zM*g~wqXW^EWpMt-|BXTN1{a_8Of~|UDvBkJSpdR^l%*x95k{^E_G^*7XdTN@s%xxJZ-tFyVW9npW0gNZdPGaC_8 z@?<6^9q_|e{dwkmuJGbP91l#|;(mx3bcBr-sBNvGZwWEN8r=+L}>%fQ$34wc+wmjeS zJ>P%l-FI7_*!G;?PtCabb+5P&_x&fx_;V5A7*IyKO9g5y{0Cl0ePvbUCp5?pafm=6 zlplzQXjHI}ueg-EOu?SS`OvMCfG1GqEi6RE=8hC1!h1%t8}Po(6i`Pcq$MJur2+{J z9sv?K5Ac$7nt?nE2`EVh)DZ0o{6G{&bu1&{`{?>J%|PXv(?bZlX+#iE*Vst*eeD=f z&pQYQ3)u(SPLu*Sh_8C8Zt5+0L~P+MC|G>T6haRWGO{0C5b z5m9CUA%#ZWKLT?C|0sZ;1#1)iQbHr!1xareN(8WDP!y;P6R^MoAdQrmz~jWiJqPfK z4M1Go0{*5V3hjXX_@2-{VTAJU&6@&+hJ*d4-OBrC82RUBr;mu~=iU`)(7Wi~GzcXX z{Eu196%?`8{1;H7)&oXKWOyJ_Xe8KINa^P&=;cj^8?uo88Zw9o>&E~R%u|r}pM)SO zstYX1d_$|*jVeeFHSyLC(OoLCzS^%V;VvShhwgW{Pi{RigXWt2-nr_D*BTvN6kC~$xkfqyu+`O&{R4zRQLF+2 z8o`l?{$sg;CZwQ4fqw(6Gd=FR4o^MGV8{=O9^Z+|a91H9Qs3e~x_kh%+t)()D?!u$ z5NehX{NOq>$RN)>N8cb+h~R}gA>T8iH@t`6rJsh{Uz)Gq9+GF` zp|9V!Lg#C^p}7e9;NBv;-DQ)bQI9&?{MKH zOZooDl3-M@7k6o?Ujp#12tUygnT3e*d#>^MY%g@Ertqw|0V9RGxO6!Ap);L$R6 z3P=F+j-RcUJot|^Mgl_2vDC73^eDVGj1ZUMUpO>3lYbo+3 zn%1e|vo;_P_P)QG%wPB2_unkpPMM&Gt>2W4CklAmT~k1xwWBHK zB~Q!dVXuJ}Qf4mo!5Ov629>pc<6EX&nhqPXHDBqp_@@fE7?1XD%c=-Hg@kt%QytjE z-9(0Lt=^NrTGWm1^dlmgN%^-!dzi!ZLks&*4s7|JWrL}zJfWjAu>%%1pPwW=5S6vv z?8}4O=2Js(QK_vvSmk|;znKK(wFW6<2`Jd#_9B6(5YU)4)BZ8vBN+xbA>kQe<3Db? z@k?%7KKl$kyDgLhvpR68@Gqw$acTSq!G9&8pJwFL8urRDyI$WJpXS$_24}VtGHxrR z|712|p?tdYQHxW%`5lURSwYz%8Oo7RfrIv^YVWre%L)XKFayZBClX?@~J%VOJ-N$avkFr~}HYg&>J)Njj%&n>wgo6~sL6R6& zxGu>D`KWAYwk;gudJwEZM<;92)gWr?TBWor-3Cf`vIKTR>;F2`2+ZB3|Ex{W+XVp} z5P=?jf_#R@ff1pHEhu6*zsR(&@rbXI8RGX2j^kYTXA)Olr+vDiWg0~jo>3Wk)nmio zIzP+sPxYd0*CSoG%de{>epx`ELNB~b%`3-UIz2vnEOg(C)$J{Nk#Q*oy z!J~T2qzE`#*dO<6EjpADhMXlB7RlO8S7iKI zK2N4;Pgy8yioA>2ZMFvAm9=e!+cKLTHcFkfG}Ome=>iP!@arE>Q%pa}+N%Krh>n~k z50ayB^^pKwj%b+`Hq9EGs+|No3w>tYoG)zkK-(!OtN_mZ5UnozQ z99Ro7`a=uHenXG&NZX-Q(uDisIIk^`{iD0`2ubk8EM2Zn8>Dkpp2@(a1$Al7Pmr!2 zV{u!vQUOIZIAwe#XM4-kU@ja%nc%t$mMyAXn4z)Ah0@+tE8Th@hHHhRW*M;iI}Wva ziYLqFz8c&W|OtwOV&HX34(hj{-@;)2CPa-pRMsser$2GpRw6b;o=@zJWQw zl`EwE!KEl7o_k?ej`U%dJ4RvPXCSknhNSy2>BSxzi#%-;I1B9dwq_(U7w@;(c8d-B zQr%XcTQmKd2NQU5Z!o_a@HIk6G;jkS#==58e9lyq6bFf!9&+nqIg6;i{uzO~O zc5O!KM(;y5`3dRhD~}kbe`P79<1H!rPXJ}h$W8paKn)1jvbNrJeI@qXFLHwwZi~@Q zQ~Fb={Z%6SzI7_Ci=ueNsW(H?J=9_(`(3rSvUM~B(E?3%;c7^(zX3u~wQ9ol2+ zUxJUh|2Uvw78#5lQSR&Jw@a`To5&`82ZMP?5Si}dr9>}b*}5gJPN=^B9YI1xYCaSm z`T=JsWv$J8A1&9U@t-!_a-wCyP4WpV^lT=*>{(fMuBDcZ_?3AAvVuO(_d(#g-bxA_ zO#=_vZ(T4G z9bVcY`!;@2s?2!*r!dWvV|hetx#ZN|nB2%H3#R|tQUq4l(IUUErYRa~@JFP5KFr0m zjuu6(Gn{)~n$$q`UMG?qdIfSp^pX`;a0N(W5cc)YUcvH3?2m<;=|)Ag!sxv^^<{2s zr^oT%wjctL%znaqb{>=0eX7|L0!Iu9Wr#?QA|FWhTpGMS<{I{=7bUZVS}$9ss{8J& zjw9TiaUfTz>tW}&Nl%0;Ls`T~FG<4r-`X2p$*-;aK;r$d+Exb*!${Awq z<~Ju)v$KDRBqg$rd-`gaCXZ%$n+JrIQ&I(Q#COnytJ*ql2bQrtCelf+x72;m60i2= z{!HuYK2}??ubf1uePthz>7n|U#@IeJC%ck4fDHtOPPTOGhtB2tVsEch^2jNq*Al8A zNSC?<&Fh=LrvE5!5B&SWw?I37IxQNz-s!W4xgMPEFty(LBehz=fSR@XW)~O`%#+`; z%H=#ABf}k+^{ZrUlkf$;CvGV>d}b?b&Z9`Ni#7{A@JWKJ45>BcO&Nn>nd-0ieX%&B z*F7?sj{iDX^3UZxzUN#?{4rJzX53%VawU%67x!ZiXvy~@bIQNXub2cDaw1^nmYp1n9XeZwhmtIKefc7RZJHo++Sk1=5p_B%YGe&5igbcV^}mSAU}~>HO(`e zscCuziQ$S1U5-cwcCRA1lkFFr9G&ImoV;ZX5tJYLZPIWl)l`rhUIUN59BypF{q-Dm zJfzD}S-p6=sXU+BFXe$~m$)D8XkQQqdnSwv~{SEW002^mcYAK!shy+qxQ5H;XVAP zG3o2nwljhuMS811m3$4^VBW+h2z8p}8@1kg@KOy@!+f3P(FUews6n8_M4H=$9)!u{ zUd0Mn4F~<<4Vp4s=sP)R)WkF5z~Li9fx{zDZ)7?Fr1w0RmNRV~z3i>O+y$=BrN$AX zci^g2Yp*91G{76VvWZ6~({|D^=Vh#lDX}_{Ak%dH!lgu?W8LXXHOJ|jVb32gmyk1V z>$eh0pzeveJA8FKY){&}BNXZe?tVtqW=nLbF~l;X!IR7NO8oYZZX_7OV)ce=z>$)X zV8Xa7N@n!nP~&{eR3aIEM&J>fnyw@7e%$Qz^TrQ$0N`xpEWTPF3(N+scfS7==i0j( z$y!z#(^Orge-BmccD_|H^w9~)*bE{pJp6f_ycrjIgI+1VdFmNOQIf5|i;LK>%qhe8 zaqaBDvFcIK8HJGfLovk;Q5lCdkVbrg!0E4}}OtCm?3+zjt#!4xpls9GF?SpL0 zrP7~Sr=g&_El*~0@P>9XRpx|ZNg^m(6FF{SP;O>MqbpX4ZterW{S~I|%E=Ql!5e_L z%Z92?zNM?UJGR^sxrv35^VCc^#D45*+^x*QK>Y5+LW$;7)>qfT5AgW4rOItHn{8bI zfTK|Jfou3NZ|t;)P3uT0?Kwq5Vx)X?cA&Zi=!3doXy{>-g%ssjc7R4Azqez zM6DdR{+*$;tchv4cGw_R^uBkLyK!81hh>O z`lusC5{+`bY`{mYd84bdC;7}$?VgW~-xuk8UZ=TeeP&BN_Wzw_SxYsTe1DGG=exRb zz^L{~{OM;vJf_~^wHs)oBEsKz(YuWK@PE-fEL|Fq5*+l)dK|)8*6h|qeY=JTMvLxO zdPmFOHIvsP6?@^vyla&kn#j~s8YI=`0}9U@x`r=hf-7P+^}vw*a%e&U ze!9AhMr@8jUvmZA>Yfw{!V?9$^arxGFX)}o_IL{(tbEE7Zx5(zO3lG5Aevy$JBoZC zbj=7esqi0EdwzT`+$M``LJGxD!@qQS*h)TTi%YH(t*W!Vc=O<;4l;BZ=}-!{i~ui& zS!~>q2=|1peD|C1`LwK&?Pn8M*8Rv}MXrGwLn&!E14cFXYo6KnvVd2SrMFjfn2|x+ zeJMnC4-_j2y;dD4ANYbII=+%*Sn+QzAV59TKcaacNTw==&>{Szszx*h$-rTSfZ5 zT$%&_)NXJ0h?_zh0&xS6vdu#PHLAFS_3n3LnGbVD#b)AmIKvz&zzR9S@_s=X&DbBj z|DZ}>le-QVESYo`1-)L5RRc*jk2~^c3o(#HE}Tm3J)++6K6^5^zU zrL$xs_dM>lUsji&yiJJbb;+s%A=KT%7Xqj(!+US0pIBW0+wc6@=sUYD3n{I{{rUU3 zzg=s?%es?APz<^)fE_9gUfkPlt)ScW()wlO=#*aPG{N2g3BM3C;xe0#A_m9M+!o`j zc6F`VaDG+^#^1L{X!W`F!(cRQ*6)CB)lp*?i+@@xayiy`RQ{}ECnZhvCJfcPDfoI@ zh(tNvo^$RrQBii4U8gio)sf{tVNEJ+*SJ5k+l7?)cr4`Efzsq%m6!}$X@#Z9h7ja5 z*Fv5545u_wbWPSzP)HzW$846m9`w{ht45owv_`(U4WlFE^KG{HPNDSoAe$Xq81MI4 zO!VJ?HViM=+sm={M!n0}lY={T-D}^+W0q@Vr~OCRXZaq|F}8Zn!hCWgqIHj+;Rli*hTPm4 zekH_ewivOkvaU5YY^`a~y4mGlsW2Ene@DH#Dz|c>l z!S(F30M{x51(38IRh~_L+E#OY@#` zBdAp^UE8`oNKBB1rdM@GVYx0|00B~giMl5(@CLSemtawL5_$QtAg7c2$`{z{{+Ti@ z@fj+MqEcAVhl$#gM)-WIwGSVDtKg@eUAn;GT@zc|5e>VFX=4O|C}{~=pCjL<^L3B3 zi1{~9@nXowQ@!mJwV8I03PFSmiXhtJs6TA@KzaCtmys*IAIVDq*6U}iK@|hiV%=O6 z(CCeJSRp(=#Q0)B$4Nq49oP2nmMV*fw&%!y)h&Y6R|4=}`~^?S=#DP{Ry02cwfi<} zoKO>H7vc!5@(YS@wvbLbV!dmfuT*1W;Akf#J#sQ>?0lYx%99GB|2kN5N+4xyaz2Y8 zdeW6D24;l5d(w#Xl#}h+8?PMrw4;y*Vl)MJCDZ=v1`J|kYuk)@H9gr|Sw)c?87cZ3 zCh;vKanv4N>>te$^we|t>e52g z_P0&Mn!P4eP3vjpLWqAoH+kK0G?PPNM?HAst6Y82A!R$c$gNHwbGs&9C46@9{)V6u{m%e^)bh5P@F+-8ek z>x(IJqEp}Y-k>Hi?;qaGJxc>6 zpiT)h*uh$o$Ty^R=d$ixqCxJ$xxrm0f!+zb#?Oi|tY*)Ur_OsGc*2BoAnSH%KCz82 zZ6J0Lm6jY=!;~wBP9sdCNk0CX?FBblre8OOH%hxs1bm8Lv;MD>`Lkim&-1ulI2_<4 z3VkK923~_d^>I7~yHF!{6^_Vsu27nz>#zI74))n|yyY|5LkzH%AfPaNxx7MC?5qvx zEjbbrxO5Aj$E@%LFW5u}w5pXhBQ4v}l+qlh%#OLg8j~N%j|2vP{Nn*-^R{)>NT%4So3|vI)OiV=ocl1B`|7%Vjzn4Q{VfsIqTFh+RZ2ya?g$c&V&H2BP zT1wd)sPr*V9+U}vTU)^$9hL#0kRC8sIAq9Vo(a3in_K!p5J*>j>^BrA**-}=-#uqt znKTv}&;OZ*czXbb!tym0eRLLAMzBflbspvxmd0oxQdCyI>KZ^-SGlzR8wus*?0q%O zf4)}}%bSF!8H}KO0tJ7fP80p19Rw&~Ttkt6<6VH>**Al@D}eCEgYedZ;Nk`Z$HsmO zia}X|29V9-+afBNfR6I62J0o1ljGraW%s3O)FkkHzry@sErhDOzrSbs#6U!D0OJmx z3U~q`|5J%Eil{ON{|j!`kqInVuj`8zA}8T@Wo01P*fyWs35z*66AhENvI!1LyI6n5&ghJTRL|zzP`Se zUT<>`Tm6>|m{mhcS6fJM4*ux&62$AuD_P$(5v$Zrm)3Wi9X&XW-(XF~R&AYKH_Ys(bsA?&V&sp)~~0eC<*2$3Qy?Xn>RTNi*Q3~;Xj8N@ig zUHJHTpqR+mM22+`(08F1mp@#gK=pFAgu1r@o-bVDh6b?7K8qR<)dccYf>#gs2yC-k z&allM)>Sm4UPx>~caV+RnVy~)BDDXC!QuQd>uUw0!TR5L^q39v7wM~EX=`gRWp7qS zIDYSB-xTET$qCerGjI>)`^`JmgYXjn(o1ZW_zVL=gIVut zd5`uW>!LmZmd{vEkgEM26vhDcea?NbI+?F%&oz*$`5qLg0QD!%eek;RPl<%=s2&uu z(s>8)vGNbb{oq5j&sZYvC4f{)A$BJMuD9Y9SD5YBfBRs0dQggjt{euDjF#T9Zbj33 zccA;({@X0q0HAOVS{@t0wH1A9wYK_eUtIW)d;{(L8ux-kya5;wP$8p#Ul53$>1@Am zMCy(Rk(0L0Jm@0?Xc;AG6Fv#yBM?5ILfF>ckf4<Y8;=`YtOC~=PC7nq3IH-(F^S^Me_{i-h_A?uGC=rtS-O{8$a%>?KcK_ao75r|Ph4f!C^>xoDDK!X4@{nT>QZ;VP_bT;eGPYJJCcdJ<#X9uPlt!> z9lCEW)X|bUvTJi}V8~QBsD41XT+MEYr;$fYZU(M82XT@+qn)z}$D$v^f@Xu-6-;lM zQaNy**bgau&A6xO`+bQ9;QzV7N#@HKe9Y0(cqf)?B;Z~OJFm+nwxDZn5U$870kW3| z71Mt?Uc`FZz|ZBZlnC3d-;9qNNdShhC$E&DxiYzTOn4-lEq907q}NapH>fO!xO#tn z4Yt*iN1<^m_B;t4#lVxw5$3;TRy^uen3uE;Nc4CAVp#|!7g(%O>Sr#p7P zn?!+ax-|_SHexS=?QyWS0+(mf$FBaB=aD|ioa)PZwqWiIf)5t~?JR}*!MW0Vh-FB! z*BiHPsptB5J0R$9VX}Wu8Bme=<_#u<*0&OL5RBeESS-Sus(FX)NBr9pqQai0vp()C zM>l^X}|@=Y|+efRKvt69XRJv5t7+m6mv17ttb^9Rm`%@9cRtRl)dcQWwii} zahu4-J3k=EuIswW^U zcf*nR)#r96udqK?C}HsOIKR_I*eYi(Ly!xY;Q zBWE>WQoHSpJ%?N}T=(OHK@momtAdu@q8QU`Oy%w5sHeIf25`Jg^-}2mJiXFN<4iG^ zj272RKugns%Bf8?8mGqOy3;I}8z2%grAM*#rrKd^JAIg(S>|%uN(gi171sndR5Fcm zoZ1kk5kIFbg$ey!JSQ9^Y}RS0l|PSgtxsuWU!LA%yokMq`DCu1ZSt4GgJG7eNyVS2 zh;UcWZr0du11dx5V7Yk+q_pcOyR-!Vc_H{nx*J>FdY1K8mo2)PmEKKR zwHWOf_SOVxUwnK zK_F-=&-$hhEs7z!3P!a^cADtoO3CFj9LyV{VMe zsVRpe4zuW1N1vnk5u8Sd_Ym2xfzF153P*B|2d5kvtX=#1qNXMQ9f7&bjE7?_{-@N6 z6I`O9Jv`p??@%S3?h_}aHYF(>c_vo($wWF@ik9cUaz%*h7ZqFUqcxpV(O=-On}$ z%6xHuFzcG^={v4wYS+w`)LFDx)|w4av}cLaD01fB+E%kUw6*lx9=VqfdM0XJCds}? zI_Afuox8(~jvvZmjUE)-zc!av@6O;D!!0vefy{p;{Nc!)`UBn41WAcd(Y}7u#c(Qj zHY`e%ms>1OpLDAQ^va_l9vPP+@E<5g7<>7r$WJQr);hvn{Bt35DwI7D)>OvUsa}#t zY|2*EFA<$nBVHwWul|rJxJ)M5tu5zIBhRfZni)$#^5#L{09UIf(5dsH->br0V4e zy?sm`w+AUt;en0iJAXW{dydKyMeGyj+qcD;e|OV@wiiLYD;(b)7C)>kF}!j%%Z;lR zAM?@fo-}TH;gZOk&7GaR)5ZR?SA*4q0u=AAehssf$ecNWrv&?Te3`+T^UKXj(&oAX zA4~`4srPdQgTH#fVy?2Zm{S}(!5JzY_+oMvDCb2;Gut>_Ht4u3{@?$c*wa~x(i zyA$6b?zYpHchwyo;Xyo?wn!^n3FM$ut`p{;RT4}KYDeUXp6l7|fMp?y*)A=o@#cn){w}aZy#OJe7;VR1YcR<>EJNz$S6+~-+zoT-4nTDsFzx4R zxl@5>F>E;trX2X_L}m^;=T5ZbvTG7!t;QLs&eI+%cCO`L(}h<_Y?Ca|&0J8W=AMKq zkLOvQ^ms$T9|Mi8bt+b6k8@(b)wd8xgNCXs!jd6g?@%(x*#3V z)a{&zwNs_To!v9rN~FdS1>EfDZ(3-FFkyy^Tl*xjMBl~i40YlXYMGfp+CWpU-a-k3H%u;& zEZ(}^o&4CU)>cb&mo+ZnWS~b#7_J_Jn4}_|$&HRo&R2WGq?U}jT~^Czpx$;TMl!QT zX^4BiOWFEVD@%V4gxKrg1`usVCD_b+uZX1RlsxsJ{MbTDw*Jpm$8W+n*;rpOAg?x4 z{~q(aU==8ag=}FqG`Z&3b-EVA=yd^wIN5q$j+iq}cVO+B8IlG{DdT?_?%G6e`YEeiLjL+UK7TB;8x z1?aE1#H5wS>><;aSdL9+gv@tc-2|fHp8bZgO2f^FT4wm?)lfYgWB!c=%olC>It`1` z{~cT*>(1lA9%}Ziz*nlmOOtg}=__}&4roQWgH&B)77<>KGaUrh8c!^c+~)coL)grh zaqwYbF&nIkP-%u({nE_Ds&OZGAc=r;`|so;H@+m*BILCTb|Ggw9c@15Pa4^fo+(mv zO$U@gI_YzFWf)GE!EI~+xBIZBny`@f;hL{`A>18MQGepk-jB%qDO9=aivk7CRX`&6 zd-yPUKuiOK8Ffch7RB%v7-u7)sFqoacmkz{vFZn!&I5-)&pXr9%4bKPDouv_cX<2I z^?W#chA1@-Bbd#hPQLBHFQdys3?fuyOaupv9TVOkHa-9Q6eq_ z=r;;+g1)e&HjZO5*6Z8EKjoI;A|l7#xPOuZV~R**)EOmjtyeVVXDT1IMTY;T_r3a| z`orW5z(!ejd{>w%QfI%I64g)76GL2J zHsnIhoCY-Pg=x0MKSSXtML2RY@m&4#VGZ>T$mPW38YL?a^l+DzG{va!pn!snyUq9{ z^N=4ew;S=7n4wTciM?E>I2QY+WkUOa5aI98Th4Qvlyk@!i4y3B4S{5moKjxnYcu%? zL__YEMaxk?y}dWB))w3_(oy>ar9G1JUusghFN1AMbDue`rz0tW#~fJ_#9-NU|B*Eo z{%UGraP=px5if9s&{o_4jh&T?B34OA*N*O=f{K{b*}2)cq{X-4a!BmVVf12N z3kNsHSP#-@W7cKDXxP}5E!6ZM3k8v0Vm~jp3p%M5_0mtD(X$L;>)4P49L5?`V6(L- zh1VGQnkZykhf%2+Uc#w^RBfyaGin8DEnuI1|K&;o#@3Es(jC3AiGw%++DXreWgfE9 zJ9pHQ9d*WNPXT3j%(x*cNw}<+B?*7ic)e)ddXZhMK6Q@sX!S(*ZOm$jDMafmqs1~mRTFsahi3jQy2Y#HbYXdV>`jMRs#zqM#7y(WcnIzN|C z%44xAUnbY_9QMuKahW&YRh9#tLh}b?e}4U~rb4Jnot9pebsB<=$d4!#N z8!PGLLNZ8}e>9JiFPrudd~T6`c=s*-O4-i3M9F@F#ONTVIK5Q@pn*Q`+f}Lptw)pF zk|d1GxLm0{M@qZd#CqJ8gZ?3byGhY$#H=-xlI742!-y9b5_7rm-!5F$>pXwmi+{`& zSIp=E2-JPsnkX zATiG)RKc$Y;@$rNN;QL)-;`_`Hc)jJb46C1f55d~DMrYQNxLxzObcY)t!$mOV1oXU z^WyyN?$SuwwLQSvdVQk7anfwA!UT^YXPA4>&_Rm4x4Kx681njAzd>80HSL^d)}Hi) zIxAVzR%SdJf&WuNZ^E5#R8A)|Qcdveny=8)YA9kr`xRpV@MraYq}e2fNn|^zX4{-i z$nUEZEpkHEU8YmvFyLvrqCG!Lr$X1SFyfhFjQfyMc1(mL8I~cAlkymI$r|W*3MAKY zL){#cd!Sn5rGhj*LfzZ4OP?bk^O$rB7+G?6f**FdbjSSbKsjL#b@#a{qKNi+xdOBQ zf|E-<$WinR3}SZrpAE4M6Byg6j#`F6^=&=Z9Q=O(Za|U0smu#-Y-Sl`IQ#i>`cFH_Y~uINm=crF z;!0R6OF50;Sn>BtF?_72x2vU#ym4V7uX~TaRQaupTv8fYOZtB#DSPiG_i<-u;eip& z!ni!xsqz);Vfs6kmyJAeBn~|HP(R@Iy@m`trVm=7j8cdwVw)uWJEtYf5PNSXy6OC}sy1 zEq!Pfk#sI%PuPFKwv!K6qP&1&`w|pGcRwZB$GpcrNx;@Yc63;yalJeHqTrcqR+d&# zUQhv95C0=aCdE7t)@&uve7r+^1l@3Ja!bqpwj6=)8?BdYLqvo3rle&JYVC<0_=pM@ zu}GYW1+F|KvymY*9&A#UuoR}KKD`0Qx8}cED~&UlDTRM5mdkn?`7!9A68Z2JBOklY zu>ak5NMk%ON>XbF3+~5d08=aBGq2{WdDTfyDiiph?hI#Q%iR~JC6%O5u>|v9Us<2H^iU2pQh^tI<)p*A!HOLfoz92_jSYn(p6*T$f%NJQ^Tr~SM;Co}PC*T4y33*P z1!0gZuxGs2qDXcvuaTQiI3)<=H+ePC#_>ezSEUM z`UffQoCtMQ@uO_`otaC>f7nJJ^+^*KEp0vD_K3w)FPa{05Z4tSNL^-*I{*lEIQ#|7 z8^Jrkqr|x;odAZ3HCok#x6w=0eU&CkeLsH}za-2d%pa7Uy*MD~FEDbpU=opF^&#Jv zAx|%6@W==E4)rdgqcPt*MuC97P`K-kZ(5bmUWR|#Qvl(=hr>H{2`#l`BRBn=TlqVN%n~mEZw7Ne!p5eN>mq7{%9N7K zwG&hEn~jGa#;$I!tDFN-knn;NtmV|1Qomxtgv6&lD9d)4Fx-6rwJtRt-(r6m4%7?b zYf8jg>>9?%(s$%r^BrU$+be_YHKNnB!XCP=$512V4;;i!?3#Y4@dzYdZ^!v~?W(E= z+d5r^oW{i{n*;T==HlS4lm;qX2F7w$GQ~NA*2r5@uXzhumP31fM3%8R5%M$w!>*p^Gm(@rnIl~{1Ky-qQ-|`o{}IF zP`4&kNp@@Pzl42t*pj;&AJtrDqle{>IHbNNKzAz|vV z7()A&gM+6mSV`wPtCHS@S;6vVavZhX#ckt7v=4cM1^7g2Sb2Zib)Xe>9s52|!$T6= zP16A|0F*ZU2$&g?(b|zRAt6n^+0RZaL1rc3iE-x7xfpcyYfhL!z9&O`R`X~%XZ2;M zxa54(*>-VXc-s^uGdU0-q$%$MJeklEf9rTyi`UxBWMbWaG-yHbB_gP{KkJ)Oj@{v`24cze?Do7*(L*~#itLl$t@s8LPTZu&jeS+%=r!>u;j(e(D(GEKNqFa=sCWBN}UA@v? zRE4<`()4=!$x*iL$-7*1=A2?m8S7>ci&P~kyx*cj0dAWGuB8oWhADP`&rG_)GFUCy z{6z8rM_0e*V0ScXPLk|QjW|(CTk_~utcZhvK8=6zELjh$1dUI#A)~NedzChG9au!M zyfl60w=4CvEed~=C%CA@9{kDEc_A%hDx|IMcuRHC{56ThZ6aB@FPp58C2UI{?AYx#I`4gIWz4lx-0a{& zFU-nQ$Sq$rppn5El{X=0_9?#4gu<3;-}Qbyu4}xHPu+Cdc- z3k{hHx`n)8wcmgmpaV8Km^2jLvZAIV^*Vond0WTm9yh$IKO497=9u%y@TR5xk&fmj zOL_T5$7J#Fu&%vSva*_C#vo+n4%qQUyKjH(;R=U>hk~X%d6wm3R&mPl}^y!3IV%Q~`N&kDB$jjFl z;C#8LG$&uqYDp+*1OGSO{RPr4Lbrc5!{x4xX3XJf*~)7A!v(cpYni>Ny)Y8I zO=qjNceP>3*q*%N%Eb+u&C!CBJzE=evb8SevkDmXsBAu=?ak%{IKej(cQr@JN~0>O z66VvkmQ&?_k~4exwIF}?%WlmqkQ!w`ac=;>Y@9G09{T*ts@~b1BeAgz7bs#*P6pQ~K3 z2=a`fUm-Es{ZV7sxrT;hvh)cn%%uiS4m4jy;x>N zOx70Olh{7_PZxhrS>^$_CUf&J#-a=|cv@;w^&5MGzF8xnd+4P87W4onYF3hjSw{xG zQ?-G*Sx+Zif9Z8+bPfF41~zBJa&6G3gQt=;`-XD&hmESYc({|)FO5GFKhJu$|2X5H z6zKaoMTabWoPo0KPJ}{mzI}YdJ+$@?x~v+TL{evOELeXQlghF+xtsd=N?{>jXMkDw z>)?0wS{B#-5MFtu1;(O)&jrj1BRuuTdagGwhODIJI*gW_xblu<6ARVz)`s^Q8<_dh z?62#E{FGU+80Q@b9Xbx3%w67lo)vty(8Xu9t1Ob(f}JoPvQKty!O41`u->s#Vz0XX z`2of%|7?G{ZbL{1vI+eal3{T^7e-Fq?so*s&ebg_f_N%@-`-w*zNEp>*Do}q2Q~f6vUNy9am8nJRTg*b!fXt$C z(nBI2TYQxl61`dnnx=Rjk87X5TMCToaL2`3Tz#4;9=MOJdOW6KKd;{C5e=VkjyZYH z-&-++T`)P3D4T>h$6ndIre=fJz2~|eFQ?Cf-rJds_tJ!GylBoa3JyGWtQ@R54MvrL zt1*9o59(M#0Y4;*vY#;1ZuoLhi)*??Xt;)wMxpyfUyXdOFxd{c5Hp6X zPl2BjSK^{*DviSB&^;O7;Mb+|f>C>=DhU{Fq{Cuz`)E0)y;X5}t2Wz9H_-0|z!zxV z{o#bA3_D9ZtksrJaQg9S5rshCv1uI-)KPy=T#vLH#6J7tEsM+ATQ+~5HTt1!2^MeZ zV+QZ@CKd9FM$MVl#YPM0a#ETypwGyP=Op89zJPFOq zL2ql>AX3KIy?7)!))v|I_~bWLr5Z~2=#VxEqp;S}_c40pjT3^?$(EX4syE}f{uJb*6&-f`f1vD;nMS&SK6THRzsj>GGh)zu?~XaM>)0cip`w2?>k}8|Ld7ib z+%5N-&!|)DDv?Q-JQ`0S^%mPu z!ah;m2eq0g2sPdV6)CX7RQOo(qQh&hv*R-Dqnc#j7*wkaakVA19#a)iB{y&@{Qb`g z{n}vgy=2NR>}EW}CoCd74$rLHL z%L552XD1YRT>F3LjdSA#`v`tm)Wg39^_-ky&9BEgvN+O4jni-#6s=^A5opTYY>Z&DTUn0@QyjYG8t>6@eeKAFjcxZINY# z*?>uW(h_)ev+TRS$<1KEx@G<$l!cKj20iF!9i!A6(wz_Abx%FsS#ui>f1uKyt{Si8 zZVtTJFvLzKTU-u^r4@>IMCyx=sIaa)sMMRRor*}HRKlgZl_L$}Wa-u}a~DARIzx<_ zF_vIgr8<8b7v&!w;7O`-8(y7SXj{D)GtzC4I0X|R^+0cZhZNAUVyae8U`=w{VfY$Y z_4O`0XoKNZt;ucT&V1#)k>)(5&g#ubOwfxWF(Jl$EmXI7zfQhVDx~(DY9f`O{Y&R9 zntdcHgwC3QLfo?bS=uC9ZM%?BWOQg2*-IPC>6L#P+!Qjat*=Du?2!yL(n z{Wb@S0`S_1GhDAz6W*__kw_)SmIQV=lNN7qBA>3gJ$i)X2Z!5C1{X=_8)TBmZV}At zsOj88NA~(*$gSQ6jUHFBUAJw6!gSiu%hij9^n9(py=;j})X1wmNqL<5wk?n~rz%3+ zz3G41i-s%ETg^jV{=MfaZ*=iIjr-I2c>7$F${O_pniEs*R zDZiPr=9qvXZ@VRngL!uj7oyp)PZNK0CzxVpOOW|ZEhGvb)85Q`A}W;Lm=NpXT`5|w zNUi*&5s(tis1Nw!k}%JyPKxKTCT!g_1%qh_1q08M-k8K&GujN}lXl`F7EF$lEusNeGv)H18SrnUa(J?DxVc7>j%fxpe6?AepqPbSjybbC^)o(<2Gq?V6QAo*6-2L7 zE75c9_$(ztU4AT2PSpOE|8SnvAfOByUvuXh(4BVbyhvAp5@%}frdNxXV8>FisXr8* z%a|-IsTfcdEN-3@E}9SHr8R$zK>e8bGD0vvI6{h=F=FkNZs50VF%fS>yw!7B~5Z#ZSFkr=oVpT_$6GA zOSjf4hp4hovlN~o%R~>ha$S-NP8N!4eohn8=f$b0(RAdf?@zHX(mHn`M^b!6@-a!4 zO@QhXW5T%@?4lCKRJ4CX{NeZIld_g2NS#)NsQFF7l5spJY} z+<}1~ws2{en8nKnay91j$Lc*ImC@lU&jL%Bdz7U{ja8M0cd5U);S?8cqzTTTUk86J z^H4JxnODZgRRKV~d9B*WLRp_;m zCA#*`(`QP2yih|NsF}uuzAQe>876@QX64od$XM0c(!}H-qFR9F^i)2w&tBI zVW}2+Z2RUQ2DfTSnb5`)v;km!`mPWcsdkduNuKhhse6Z0fyERZ))KbLp>70-W$Y>8 zeVT=SVD<|4 z`p!D2tCYaZ5lVIO(W(FlU)f%L|3MltwPy&)1;>UlNnC#!VGvcaZg7~WAhvS{1IdZe z^@9;vp>eHv=A@}y5eH*wt$lyOoC`LeBXpuZYI2k+;Y4v^T;JT2Yv=?32ggN@mIL|g zJLf^SgJ8mC@D|MLVnX!xB2oL?miP1)?=?CwUt>zF#hs@6-=H1UGjI(wSaTsKm~>}@#&2a#ZUf${PQ=RF8`m}<^tQLl#ax_{sWge7XSHXttN>!ImCjrF}Y%gaoXfJ4aaA;+2FKI7om%y|EEtlEt0SuR2C;8&g-Gi;<1H=)iWA)3io3f*aS0GC zNN_7HTHM`Bad&qw6o=yO6ev!C-t4{4+3op%-^{&}nIzA$XRYw0kpbG#>4$zcW0;oCx9se;_`p1A7@SolQ zI9NIU4fh}KzXE|A|8_RBumC$anK^oa9IXLXAbTJ{RYr*w;t62}m^oVhWoTx9?+S+c zo4K2T?9I%f27hO629Oa~2be(%{7-qV7A_zsh%2ir$o{Vq+5QRx?Xt9^r6kzF0q6*E zMfoc~DUb`$0@`*jwtr66&Jpb4=<^?71#+~s`l|>_Hzzi2N074{P+sakCQuQ|Z<#d^ z0^nh1XMe-a0RTD!fSwjMY=4D+*Ya`#{;m9546VS=#|i8Nu!0r=^aEJ|p&uwdu4e8) z0K~-&=;!mN;(rke2M53sWB~z~1Fb=hD8Hja#XzfnF!bADDP+m2Jrt=1GIVnt;794V?qC)m0g{a;c3-$wucCM4r#Z~wQN{%`&NkJ`)uWbgGK1L!EbL7;1) z42CX;nTv~= z7Yg*~p@;|I!vWn;OQ7f9qYYqVbp%78E&ynGegG@53(8+73LO@IHu1ki{~%rfo5XL# z2c5Lv=na5P>NnyCuu1=m_}Bq#GQSZgfKBc<;sUVA|3*+g#oq|Zr}P^^`ILVnD4)u2 z1m#ox7rlYQee-S@4Gqc|a zYH9u(LD|h+%q;AGfY7Ik738;^>tFdlJMgap8rtGt!~+dx0k(&p|9>Ui+>eD==g^PR0jG3LW{Ng140wD{{up^ zclZrCpqc#<3VPwOfq#=hZK2P@Kh)4noqnsKzE03*lH>n>^o^V2Khpp08aH%QoS^pw z_;(+;p@llxySe@mA1ZPF142u8`2#}h{B6twRk}iN-hZP(%XYOlbG7-y0m}J11L)<& z2C;Dg{;mhQlxz?W@E;D)7;b++XzSenfY5e${Dz!RZ_hs`Vk zq57W-z{1Uc1==gf-&ZvBcK9#;`!NgzdIBv_zRiOz1cPjAgWB(^#fd#wcE^#{H#@^) z^#{UuAhZj)J~m1((q*TeB}^?V2*y&>7E3~==6#77zu!%G8unxct|iOmKwzW?wk6J4 z@<#42d#r(EmS7_5uY4)t+t_Du>ZF*a1_%ap3A*!tkHLJsT>F)KpPo8h_uuj#0~`RK zZ?Gtmi6K$q*`3F55&9I=n~+g`L#${V7lTwcEqU#)PjC^S=v#^QNWy!sZG-5v(bd)A z%)x;at{?e|eO0^_A+HE=y%i|3$KrRvpV6&+A>zX#gEe$`FFo9?N7t_Oj7ezf6+kpz@7;-Q~LF zK6u~}na8JJJjW}pR~M1pJ|H{ulp6E={C0om5)jXA&wkR=@Dsc9L){@>2h7lQI8s`9wgUPq!{cXnBdi5nwW!v1F8U>S*fj# zAF%GDVNBVLFvAA)+;#o|qtDZC%x;A8ap!0Fi!(yf8Ip&7-bm2J3OI58x~({Wk~oXzU)bHr|>Fe z=rG(ycre4y1WdzCm%$<8l9joeXFkTOCx_^ttWYJh4W#|q@I*HMLYo!QJv20l|{l>dJQMo(UyR(R90-ycnV_;g>4>xtyfEUPAl%K@*-R5@}kvX z>w!!V-T6G{O&Cz0`yuF}6NIA5WNT{st>W_i48yWj)A9;`5U-T4o`wpSo&89=cme zfyyhdVnbYeM^=ZI0mIFgqSNd$XsI_y5=#9y%$9Q4qMQIF9WkGRh@~C@2>)Nny;5vC}aN&YxB8JbaPXdXR4; zbkyjqi{F@_{@mtYx$3ygEHk1dUz{0f!SyiD+}>j8C-#vQ`{62cdoJU<9?V6%l?q2G z(_DiI8KK&{#493yIL%OlbD;qVPATJj9FUALY89GTm@`YP9+EB_F=uQFNFbLqLRBBf zgG#HK^3DBu=;^Ud5G4Uq)AXdIHshSSWFxAFb6QK+d)A3Y3}XF#fLy|yef-diNFO0?m=i=jkR_*d}n$y{ydbXXc`%R+z8De9 zwqtLBBX#qpV;-q)Xlq*E{R7 zfRgNohe$=5bWKrXE^(r4?tRbd7?np6)H=4%aS5M)!IT@2oaUjW_T0DT$OSt3`wx4p z0sOB4=LnBX=vYa)4nTMfT)X=|N?BB#&S9o#CwHeSHlT{lgeebu>5R3ZOCT-1l*Tx1m@gS$85M>l?7Kt@$vTwo zS8aEH+8_9KL%ls_=~m_k-n4s1A8h5nk?LK#+GP|dd|4m*N^&su^H(#>u1*5JIqRXC z1kwoP3lVM|D)ZV<&Tp6`-KMq>s_TT|Y5_&ScH;CIsi6+8`G>F-Bqahzrl%r&ZCi&8 zWGu`wQS`j&yzQ2B?-i}58(#=2en!DQdN?|Y=Oj#sGhiF$5 z5iYK?98pz6-R|@3n+vlCY`GN^QB&WpWLp#~ScUYFA$>OdNSKA-vD)3WM;$|j#96X` z`{IE;9cdfpYX3WsVCfZ`h-LNZ>Y$1lZGLrI# zW*nYd6ID5_cKlJz53BHLPwVlt*=|%!^fa7!?@iv{k)ICdiuGej5cZ8FDqD`^I|-Ub z5v!rUA}p8*j66H~SZkM8w&FaVby}@|24k8Xb%fd*?&-=}TRco0@wxYsaKAjqK3jbUMzQpB z)zyYgj~%hVJ}d?32#rV5Pkb$ZNvMQ>YUA9CC0imi9ZGg&e>aVdg{w=0%7;Z$_ZD0{Y&0MWFi(wBe_ zrK9?r-cE{TV-&o6E2mp>CeF`DKdQt)td&9+$E{<)268+a!1{Id{>6EJ!N!=4n=^VOgZaFv+&eDF@a4fu?w2vwhDDBZc$GJd(T4Ts{%uQ>q`>+Q~}z z5#F}Q0uzbyjC+Ml0y8Iou?%^cyi*lQ%7fpp;^4|gOzrS+#~I93WskpOI;A|on!ajt6@&F849ATNg> zS2xCyyO}4x*fzlEO>iYeOlqf>9^p`>cldVRBTCVWbWG4ZAUE`X0brFAD?ixDC0Vwb zi!CIoZVtM~oW79>6x@;8_b=j$0GqPO?p_^4TUoD*?{)WT;8ys(;TI8k904XDa6X>C zkKA%f|8YnK=tS2JB=^L0URc-p7z6Nkl69BvkrhM_8-4n)WR!lRUA1pwir+oGA{OfC zfc11IzD?RBt~XJCA6@j|I^}z>SU~iinv5W$SF^GpVu_r;f2#6(y7_$~ms|1$m~1x^ zyGVd3PK2DqG)u;Rz0_-Lvy9U}hs@_yRTH7fba8TQogM$3MqkpVN&x(c&<6a5hKak# z9JTDPb1azbfO!WDu+xv@t^;`r9UHY;l8hqT)0Ht|?GUPewES2(6#v-BWb^as50IkUJi4!U|+WTX9RTb3dx&MBM|4wK(g zE(UdMhYPNpJ?-!i*4Q+3Xf@=i1c~%UU3|X@4W3aj@&PxFqqx(iP}WlKmt!yYbGK@_ z(i%s%r>3)xH|3G^NkPBP5Mjp+%)s1k2o6zc9TS zN>yVU`daU(NwW2<)5HV&-D(zAV2fOMpWObkFIO3mN7!&ckVLRXZk@Ojij$_u*c1}j zCtHWYyW%PJR=Ip+p7>Jf)r5q6OS?dAjFlg761E_JC}z68-cUi?g)O;Th}h8A=4*vx zYQNR8B_kGV792Mvb#m%Pj_(JvP?B)dJYs*|*nx62IWETA?`e@^~r&Hm_#8@A%yG}|@Pj{oDy);491^_MDtnM-(SUdQ`BMQ^!utWy{4jO!@1cSFEi z_xgTwh1c9Kq^|_OO~1FT)rmQ}Uv4nh9{=T(`V~3x@$|YtvNpRIF-oIU)Tg8G0N0Ft4x7D-XVE4X znEocR+u;-q%8tOLx@|$GDZ`Ahm+1+1gP3JveQ43#_DZX$k{j-GqR9<+AOf9Kl3r}^ zw;u;?SJgZGu#%q-??f=0h~ClCqGq9g-z7C?I@h^hW#qq-5Xh%V{k0+ZVqsu>L`l6h z+Xm%ufp~Ixe?1Y0YhKr{C9gR=0z`(ueDMx*6$LZlJ+Y%OUjY2-nGp^rZX<+-j#@;L z>$VR#JXn^u;)O&HkDa|x?)Z`iuD5F{euB({ux>(1;g@Ic@lQOK6zxKr`q(pn+zn*H zvh-weIMrPczOM;Yv2Fimfk(8pGEd$84wbi@021TAnK7i-uthLC;i zVqN=xZPyM&CqsUg-06##M;9Jq5bTH?F1B ztW6=y&Cr`eC7YgVZ3dM0~yHD zYDHJ(umiNlryf}K1axT+d>r!6>c9%d8^}!Q@pi9`S9AG^4WD3P?*0>hGe80fbH0TR zIS=bpHOHi#1!ti3z021QInABDZFzD&+Nxam*cA085m!bda=`JS6{r3;P|1;i0dg>f zx}ClJLjEvDriaz8eow9n7krdWVZ3j#49(kS0}>9aV1w5fD6&PfiCe-gg?X}7bh{Lw zM^26Jg}0-y;+YXy2dX%KEk~&dM}4>EMpCMjU)T6E_yiJ65P@fJd;P!f3h%z(M~^5L z!lR&TD1>F0NnX~~|8z4?@3!xwI$O&>j1T6?*rSWKwBLcMuvY#CMNK3kv8x_IO$z;dBZ687QL%l=yUVR!{ZFOA>Zp#*of z;Y?1DF&Uqap*Gb=8!oq-<{Ez)&1sw6{M)`9&s+hu$J3I7K#Hjvj z5w>kWh$`mdbOcL(&bTUu{eE8xo&r#)ZmLsyEUrKAESJZGQr8Xt)xcw5kl=}o-MDG8 ze|GGrWnPWW$#ze5A}}RRO21Ql%$V;;KU=A{5Be{zj{6H=b;p_{RPn~$29cELp~g4u_kgN-WJucqY|icU~j~?3U;54-h@7DJp zWa%e3&mtxI@Wy#)IDb2esVt=(OiPb`UF5o0et0YS6Xv;T!*t)^^rDD$`{^$#)e{pn#&96Lhe)b4o3FtA~T## zj)z;-pm`mT4(!Q5sn06 zP?wB^RZ|dfKWr?MQWD0#h;ePUYNP*n&V=*voz!r1wAe*^sOQB|0{kKt664V|7akVj zylRAhrU0Eh^%nU7U;k?(2Ws_a)dhWt6s6bPQm!G~NucdY&ThxgPuas8~yviu-n2CK^EZ#GJzgmm~IWj^9*dg{CoJJwWyw{F)Jdh~j zYytMU>-TZ9c^et4jUNFnV8nY#u^?z!;Uv~y!n7Est>0{I&rgGSh<_3)m=pRJ%G++9 zoZ%WuGfAcBbtG(=)o>;f-dn!^sH8g!=jb!Pg*E~y^{T&d`{)#47Dc-VyAwD5m?5Bl zuBWpszKlIv1uVsXtzGWRnZ+7}WFy&|6+*zpqN-tDUaA{UrW=^LT3_GP)iOssJMv2W zknq;G6jZotn6$Yh!9TD*29H8QN>+lD^^Sk2`?Wagd$wBshF?tzO4`;?XSYZByfxJv#x51=~z8+UVJ}8D415~40ECW$SdSTz`9C8B@=xs>!mY&Yih!7Z?U*~v zQ3>xh^e)Rr7~}h{*u-JW!{FqCx(S9R*G<#=bguO%zdysHzl4jM)hIt5m^@Jke-&QQ zX3WgUlUvE9M*2`CB$Forr4;hXqiWGP4o?Ly zW1I5$0XILzAzFw%NBG!`72LOfa!om1Q#*rsD0^Jfw8;-M26N~%C^cz`VCi0Qiuckl zv9iz>C{y>cSM!jP{*5eyX<~PinRELMFZfME1r1y_Kqu;99fY74lnw2D?Ewd{%kCNnP#>LndfR` zgfy}HEb0YB)aJ$s#@?La$$|C9Ae07?WUzP;37dbEpP0+(jKp>z8A9-*@k!^q zt8;em!90+o%AEovjS_*d;0yOSlPXm`nOr4CUxZ@KSgozv>n)oRJpqJ|A8y`R3cmB4 z(7fBO{EX+mC#5gv@`*`*2W^A*$z=8>QiL8~JKIJQ_C*LysbEa=H*8YkknSN?b4rq9 z9YaT&B>WD`c11B{{M;mtk`_R#c`q4HExL|e7Esbyow~-^NH0!pJV(pxV>doyGmBo1 zZOzZgkce;gmJlVuh-Fj$1Iiy(EZUy2ytAXYnYQHtWu2O)V9afQmen55RHIdyErP0p zH)g4Lu-R~}uh=2fMuWqtl-cgt?}zwg%J#`-%lwb^kWJp2{Q?c*%}}7aD9!*?)Eprj zXG9TI(N#DBC(hwD)7J$!#1X&T9s;!+`!NCfJL!%19P7FgWGAh6)kJQ$?JxVM0TcI% z)!jCLQsch6N=-a}R~6Na(P}5y30?#4l2}Ef0PDFXk;r^w8YMlcQ?iB-GMhfzJ0qczIrs6kXkblqFY=8WaGE8UQHlEwkWsu}XmO$m69wd%7T>jYn$p^^BDp*; z8|5uvS6d_C)TS_UTw~x|rq*7Px+nPw?K_eZ-p`*B-Jhh3kSD(<8Fiw3^?}f{C#@JI z6m5e%81Me|y>QTvwV?psR5#^HqD)<@nJ0;*ocQp6!PmiV4J-}jl$MhXc6FeUBF;d2 zsuw!!Gg}3@J$i-N3H(1!bh{KdMN!`(aO&53cfH>mt!ZE{Y9L-q>rr#2A@%GIcUlvW zzTuSD(uF;InU;`44(L)SXgX_ujdk}j1?F{9nj&G8k-Jw}_W*Y_jy4$rdinv9T(qmO zC{?q6A+I=bnXn7{Wm50@n~#mn_!XW0%4R9+VU}1$u5E;DG9qajB*+7Ry(UCLNr{3x z7%d0=JZ|82JS_ty3FS$URuzYeyrgaRGvDap_lxMEThwus??Os0pSr&)v72une9fv@ zYiZ~=s;s6!!pq0X64Iu)`~(_o?V}JG@#1EGxi_1FS1f1)N(ry>9`deH^UY8Rr~Sg_ zz3NEGeUUAa4%4@CMR66ScT()yWYOE+pKcb(m)^ahr|g5L`|(VUKE^oxh8>ST+n7C7 zwuXOZuq5fx6~@ zyRM3$(ogk$l~fp52OIv25kWXterAIm{O{(mjPmLo*Tx7vJyON=1eu!E2O9*t29gYz z!{{yZY*r8Qw=7#HOB530qEZlL_f|gLDp;*r_zOQi=C_#0?kk3$*j#ajCt< z#PorvdBZZpi8~i|7)#m4Tnc@+9(Kcjb!(ZiQzG&&T$8ft5-{;?=wGZACNAxU;kcHA z_0hf3gaL1X&T|JDy^)FZmTFuaqK{B6)a#dTuci($E{dMg_9V@Lt*=#vjdQ0;{c&Q% z;T6WiTL<7Ps@_cZsgK^VkWD3pVfOuE#WX=#Elzl#vSI&jRxnJv6#kR65mH5e+rbqM zH?3&*j_=E9$$-5WLdS$?(9v|3AzGjpeNfP?cdCwJj6N;iK~?k+LR#<-bK~5GMlZ-K zU9`Y{VR%2?gRGJa7Q_7qe0&Pj(iceE&H`O0xbGmE{i};wO8XRT)#I0}BQ<;8uS>Np z)E#7TpJ6^)^52K$R0IU3WRJdo=aA?lzU=k?f>KeQo%8Spb5k_zT&g7DiCNJi6t~Zh zM-Zq`|B3~-Jzmoen}TEIR1oy&)3FY-oDrWy{hZYPJ_1_;aBW6?+ib|5ovWpCU3;=R z^zo`lLq`}HXVx^a8E}+veaJz2XH#S^dmS2N^PouZ?Vrm@C zQ<{@LCi^=a^8#X((&v_V5B!pys+PGG=Dr0h;2=@C&)X*>$kq!*?CSm-BhRsD*f6T=4w(H%C2qNheuvUqVNE2K#{*Z!S@&Q3NKS% zej#EGJ-^uSW62C({#naU=u*;&!zuo#6YCdr6lNZw`s5KGa8G_L7Jb?1e|%V#^Ql0a zCE#a<7W33DH_w+-Y6FxZkYnXn`A7V@l+YY^rdtL<4)n%%qO&MM`N_8xU6GFWSp-I( zk+~-e38UGA?u~8{5eVmV=qgf?RwLVqwxVPgoJ!sfawdLneC9{7Srkf! zr7V-RajKf-Rdum6(lQM%S~cET3@RL~3UcB}4D=g`aS|JS{j7|yWM)9WTHcIB47cZC zgZDWj3NeIr>E@BnM2qKgHI5jO4cHpb?yJj;5e;j4B3;9~fWPZ1e?V7~G;cGZuj1ND z*l5;x`H9tCNpNUQfPj$ZffcNxkl@$*qh30N;5K-GB4{rd;hJV0-%hp51Z8a2-FW4V>}=&u6kvU`19+Fx zD}SJ-D%c& z@}|!=KkZy>b?-IMaiPN!d`O4 zSGNBZ$$W;3q;$dVrzo=#>htTVcPwOTiM5V6pNxjIsfUi)n)JACCHmM|B{(H!&+DpW zwpvA^c@U^0G%BjBWS8NSZ{Enej2VP?&eMw1e|SqJ1nXHoTfX@#gR%B>ER*T28hhvk zzkhYs<2#&4f4BVu7nc?zPZZe#McN#lsQXU@mu?F!Z(WTPy>WR6pWGj`N0YUwN0y7y zgI08@;psIm>*)kMN`*!Yr0ZUzeTk#*!4N<_jQCJ`u+T_im8BONst(>43UCY5BK^M2 zWOa7F#Dxsdmz1swt`4Wv76{Uj>l;yDV>#zyz>5Omf6pj7ZJy{C&S!O~|XRv+A3-B7J?4;9aa%shCB73aD}*+FpR2{Af5BEIp`_Ia&eV>lin8;%v(HRR`QI@0UD4Wz5nMhsANQ*8`5tTeV z->7`Umd2m6Nkh-0t-fKP(&@ihj6Mms1jj zEyEOSC}{lUAPH|V^Fal?!D+*G{`E{w&q(n{F8=FOf^WLDAnxncY`q|r6A8Wor(Zbw z?1UgWW$eba@H1J2RQe(&7(n>2=p_3i`%_rcT2#rcPh_KFBL-LhMA!Zr5|VMiLy9|b zfBu_{QiAVu^a)%)f4C_LBhEY!fCGDN6q!yW7>TyOzl>g5UJDre5K0mGO-0cOn|-@i zsePoR$>H^c#m3inkd?QPume<*_-%WV^;~CtD^IGMRYybDmjF%web(1aa7`np*wXmU zBxy(8Z_<1rsX**-gk11U#VRiFo$y|pe>~lU?hPX7B?^+&n4x!V86_csU*@c{?iIrF zR1||!m&H!|%4Fe3NttZ-ZKA30@}Ve`_8Xn38P2Tce~vHf zto6xiW#e0w14*POY-A=K(N>X3iB2?)9j@3qI#BYRNBkBy)k?EV z(uF$vmhV9(;aA3jUz6C(j)H*P$k*JW&P{VJLl2x=HQ4kD_DYcRxSc|kD-vX<7@cBH zpQeYrvP-O*4D|1_7^Efd8h^due=6%)t49S~DaXOv@oPkzG)&QQKDRgw8kxJ%oOTpG zZ&~zt>(1aD$T&r`fe|vf$nqdl!=7zkH>?f2Uprz%u;C`{bRU@GteJ}*nA#NO@$VTi zup|t?ycN^F@Skr)Jt}wc1x~WJzE-G9eYx>s&cLM1SXZ#w!hgjc#$-09e_MI-QNc0d z+i`DKOT3G$xeM`VjP6j(gF~{R0Iqc0^;_Z2(>k2BHHDwTVwBp*9}~tuiwgp80(cOg zjmD;<1@`kZFVv42_Cq$U&fEvokG!t!xnpezoHvRr(&=>#6|WGt@HGyrhWxiyBSm|2 zF%Zv%NtuE*Saacu{HOcBe}fwu<={Fa<^^Jx`&Me35U=Tp)Q?^WTg@#A zjWPFRTA!FfXcoq5r5JYfb9ZiK$0jmum2pm|@?O+}-*%rfKJ2HLf8d+=kiE$18tUyZ z>I}K2rqQM~mP7tEXtMK2POe@3o@vuHE>P{t*KZB|?N&gmEFeM+jfMv-I=?YER$$_r z<-wL_BCNy;92(a)*YzNk4l=FZeC3th4@-alM)S4N!pFzz{2vx0_6Yn1V|4PLIUzL5 z{FH%s`c9z?DUxe1f0`hJ9A2J7WN5RCdELUJL2SNEwJZVN>W7q%d@Yl}2Mm+fJ6H+w z9_zEhREal7gtlnY-5;CV4X<-7n_>gX`r=MXu}-knTX9xj;AlDxCL+bnf%cz7U?~Lo z+q>zDLU;laO?E~Z9ZF&lLVt>V6YGv5P-v9W;9o33Vt!>~f9Iv)O~Hl!VYqGUJ)R^I zUW4Hn!(7j#u09VzJ>?3uU@I=rgTx;VCPwukirtM<&N}w`zEJ6T9nym)%q@BfLD5bui>Tx$9HNM zJ6wl@2j(_rf04orN)=xo`WVc}OvrbhH)2l_Pg0D-pJx8J!9}XpI=%KlArv5 zw#Sssab;s-_xTl-Rf;0wlfEzK{Clc)~f${f>FdrM$JGO%h2AJ%dMrskLFCg z+v13Q`<=A;kyS;t;hdb{R2HL|HI9MRqXXdQpXBJmf0gG8V(qUu%Wx5F6OPp1F%PpFMZGzD z+ZBz0e`7lXlg~c*@)R#1%|^>sKRkP(lZtV1>PQ#-s#gM51y%S-&=8FH{y0QYGI^-l zS~}VqVi~6+NoQ57IDQf*+hVX4)4juX((0alBd;qKKGT4Nw`O+_vkJc0#1GS!j5Z&@ z(PiYVtMLk8^m`{uj&D}Z>4@MQ0{WUVc&=7@f2^LvDLt5f9I09P#s(8rmB+{OqLXb# z`oO#oDV7QNYjJkxV%)_Te9*#vXPn|KBBMa1$>2$2L?w2)cu%Js+|!W$EJQhbSZ~3A zDUB3uopOwi6*bpK|5~}tvcZ97cHL02znEiEbPW3fFe2t@*DLgja@^{AeO#nFcz#!Q ze_>_1@%XBj7Xb%`bG8|1`)qeK%%Wgm8(HXTcZu4jO^W#PQlxE%SC{^YE{`FiuI+_v z!uLv)$=UGAqsO8W68t>t&U+HLLMQkL!q>fsaX*v7wwrsR+=xSGU)dreCGKTOi!x~( zb-KOoj!2Hg`#7&u&6FOMQ;qg5=gZauf4KphRBck~UH+?0$;QARGZ>ee#ipHbfo=ue z^=@t?9v_gp4(;TPCQQX{`21281qk-sfKRgtj0iQ!0@XP<^e-`@Gc1IVY?-}!k#eLM zt}cNJpZYg)1~lO5CCp`u6tqtFcx*N@BT*!kDp75cPD0eIk&?E~mOBrAQ0zQ}f4zB^ z&%xJdlY+ve=jS_MfEz|icq;yJszFbg=QE}W1}XXK=TDe(n*2^M?=FL@1&xfmY0YLs zeTLoU17{@o-l{Df!ED;<3*0fLBW^6>6;-}R<#n>mR$0)w^n&@C!Z(_jP9e!>beA-D zI@oXHcUnyQxL&ZMfU*#ap%44qe~~zC1khE_wQsJ8ipt2Mq#NoE+KZcI+aqG3AM#Q# zblpYRba*-5ljoXeocR>n$8ko7qJ1yQ z&TavrQo$lU8}S-@=RPE~C-`Yj)>n82o_D$a<;4BjQB}b458nFut6-Ibe<(MPc}%`s zGrFcRBEbCoHexMc)9n})jUXG&`h0EwN3e=^9%pgU;;qh{T;IqkH=(|C zaAN79%v?QaOntlq&g#FsljP{RGOCC+Wt26qyH)G`h%39I=a*Hf(W1dXu$|%u@tdwv z1gz^-IP6KCMug#&>s*}{f0nwFW&RKfYizq_#V|l2`;a^TG=6Jl-uU8Vq$jz-c-C8Q z23WDh>ZHHEA%#v|ia?|%%)h!-XNuV&+GeIWXdB!A=4$}DR^Lf89P$*m8-w#AvB$ON zqA1Rt8yWidu5iL)^y{n8fS8%+$0l}}?dSrwNT)-~s~k;u|0-<$e;7!=*BE&s*gBEF z(V>x`?2B#LIh=0%g8|TG^-BhIR-OpUL-kR|+m>E*DZ=D==KZ9ojXIg- zcv`a*0xbkcBi-JlwNXv;7W{kgNgrN`GR<*@&V~U)-GJ#c)}=K-noe1Q;P=FG#>_eo z?TwS~E3=VklNV62fA?wI0mw|GxpeUI!L};M1oLDsM53>X`S}x$37hu71N?g!p>CtG zFsX?!97mr&?Scd9KL@|6h!dYk%sf`XXB5X}?`IT#Wo3Dz8Co-maU=a@LTGT&G~j!5 zP0o!&z%JgS9ndZmtr52741Vm>Y-8P58sx8b8qJQdD|Z$ce*tg39Mk&02eW6~qTgu~ zP2!||C^-N2{V1rT0`K$Equ))=0r|oCU;;i~eFA!EhI3xFSbfW+0^cE?RpMQIn5No( ztLw;v7uJv4>G8H>TWY-^8Es~Eg}9zlVh-D5;-1hYXuf)dG&AYnqk3a5Jg zF5Ckm^^_aff3g$cO*iNC>E{`?o=636H;Cr3B0lv8aq?t8GbJL(_O%wjFx#74qHS4K z?n{%yPxFZ0^5&+HkcFGeJwNS@-I=w&oYyYT{JuEmBHP|8-@C1JO!}~1MKwQ~dEhI$ z&zwzZ)@Aa{g_edTXzI0XN8Tp!k)*EHhbB^;xfrGGf6Znz88*eiaAlSu;p)Ht1$Q?Y zybt*46a}I4lE`hpia7C7F36DDN5bh`QE?2>r|vdB@Of9*vreym;Phw}ejB1}pd?yc zYleLR(iU7?H|REmwW0aK8o-Dn5kXFx-jnW?tiyc!BXGMe=Svki40e3DuVHk3lIIY4 z8l8{RHW3ClNGJd!g!)_I-3y*8Sa!qWZkL5Nr0?HZX9w-kt5$@7T;{Nq4EK{{XP-cV zZ~h+&vpZgwv9kdamyPTJECxeZT2n+tm%r=*pqDB}0zsFa?E$<7Ls(i-L?f4g6#@uatb068cGE9Uy88asZnGApk|7lO@O&#%Kz(0jNVw!5}C1 z|Ae3uv~+T^<7Z)Ub#-M1+Bz~r9W36^GXh+}PL=?FHIO67!3AUn_+2nS31|!YyE0}p zYJi3%*zs?nq9O`*1SK!`gSVgWD*+kgPdQVPsYZcdBi!3qG`13+%3mMp)+Yq;Bi{!+627Q-rk@btj4wh&dF%_jd)b*8Q&vmw$$W?w^IB2mF^o2@0EJ5PfKE|Gx=IIosI$rKbB!|No-~+JbG||1p3Kva=IxDHNfw)qwn8 zQ*F@Si>wGT13TOPU#+YY5Vjnm5DS}sf7=Lllmfef%v8Wmrj~z=%l{4m7TpF60jWS8 z!M|@B023Q4>;KWgw$0QUcAGfDj_NNJ2)0cBWt4=NLd||}9Xl5{0O;TVbVp-_4Hr8X z7r>JZww`7nx4-5Zz`_iHI>B53uQ;-v`Rg1z-{VE&3aA16af!5f6ZWMf?%* z0$3y-5g&j>@?XTm3Sg0XL~H;S=|{v4V3B!58~_&CM+9S+e?%~Lg+~NqSA0Y;cBMxI zV^{tc@xs_u9ubUP^%23?)gBRyUHuVp0$4O25iA$YM+D>3c|J|H}V=UWk7cu+XOeA}&}kQ>YDW8vZBY ze?S-|=rIDUiJ<>5aR1iZJHs~X(FN8O^G6q0ZsuT@KVtk=L!BM|aDbUuJVu1+Eq=dy zpg&DuiCR9U4eO?*yPYKn@`nXX2L1!W+Gza;gq8khim<-eK0-EF&5xmfxL~dj*na$> zhZPBZWQRFJ|D%RwZ1<>!1+#;_gpmIn5hvR}(*GV1C#<1%uzL#n*m6!-H|%Vj9sh_A zlh{A@=QnZ&IsUcQk2bId{n0NrST`OcaQ#Lgmp|IY1v7VqJq!Pm!fJN30Xka#5dxOl zW1_ITmBq=@0rbZ?!s>K?a)tik0E^-L2ZXiUX={X? z6SMd9{TYh(rX-Qej;g=7;MGr#tnfL}_Nndgt5w{6_WXxBYaIfAR_nJbUdiG71oPF+ zPt8p>7`?`Dg|7D<6`a|(<=fiyj5#1?76eE2YW=QfB9ruljP@s6(`kFsf;9D|7bTWQ z$h5Tw%otBbBEyki@bYqCJPB+OO=~F?s}P->YL%sOJQW!^j3brWyGri)%FeakyHLmo z4_-?q`TiZ#PW~)^?faXg-A-;|dE+s_B=u&ef*CHl&qZI?|XzE8~#N4A#LOkB!0XJOD*VhI>?h^<)QyvT1su|J;H zej(D{U{+N!6sepM)w7l>?Ii{@v2@?%LSkn?jGP~0CroXBbGEAkRx&c3$@Wl$Ay*yW z!au3N{j4ay5mvg&IveX^5S#jKbyGSv%%F@Kb?&{M0Yfy2z#)%QYWN^<#Wq6DQRm`a zM74_PlN&+ZGK8D(+^lf6E`I}IUkOMwYMF{l(?en)_z;t=v7;PCy2un!&`eG|nfsNAJ3`lJUZFVE%G{1629SOjulG`5GE*;Z#WT17hH z<8?GG&;luh98L48jwQ1snD7S`NeK<;%oD*G-t-9U?N7>x2ca7c00|NrblN_WBN#x{ zMBKp$=7k7Z0t%J%A70j4I&ISpW_*rQYm>jo_&$Dr-mln><>{1r&Gk|3^>xAQD8mug zzSDX6YqoIyy!(3WmU+y6^Zn3ECZU zKc`WDsQ=-ulr~fO;#7J9Otn(UuU{?5;AjxTZI5&=O`LFTUyd<_SV1l6BN7>IJyZSa z_;LVg27cr|@IoJ~E8lCc9~CkSP;t4;GI4k|G37Jdw~^et%H|Q(%v>(Bi zSJQF8NP&OoFs&sbYv+JVwEfZ&@FC63a1{Ps?&(qRy1!KLSWwd;r;!h&#``G-f?9@H zG~FPyU$;rvjMEX%9PjYfh;awM4)migo-(&l6hVT$W+OJ*EyR8u?2u7}GY8B-Hj{FH zgLV>`ls{C~2czzW;N>f7vR%@I(2pW=_fC?`P-Scxo21LiR2mE{if} z!k>Uw8Ms(VN{3o{C>?fL%ggTZ^!s30Zl%RWxk2J&f<>8vXeg;!B z&U@|tVjI%XNVtzVZwj3#SgGC?%sk*;I5$_{ctPvmc9hsvZ~jbG;$aLap-j+!uy81g z7S+?~hqpEN+7o8KtoY^{pB9^gc|FvY#EbxK@pT(+-a9+z0}U!YC7U~WaQ3V!G?K#j#%J>KVC`bq^>YE_8_fw#-U%ssrqPLt4jYmFFc?_w{uUs(T54=iZXpIbTKTBJ6MKbjQa&acq=Q1fGA@J6*07{3TWc zn!&)zlFdSu=(gYD@*HS7TeFwuYOGB9c13Gp63Oe9A4N{SHi8u?R=aXp(;lhtas>hR zyEcN~C5p$~dGX}8o=)h^NPWQeN|WNNDw?}eYPMo#6Y={c?aRb7Dwzs@@RuItQHA?n zp0h5W5Pw~T)0rLl=IXWht@Y1SmoI546qpOJq{U45p7UqnlcPmi7wQP!@<9xxb49|7 zU4YMO&{@iR*}bcMk_*6 zTe>#cvW!MWpT789yT^8aaORi-A?4|g(P<7WDGb5jTD~F%HXLIVfB5{(mF&rKKS8k1 zY%6+Mvkmi@i5qHK3DIflw)ph-Ii(K)7qr*0Rx`0}MkkbxHw2gL5gba!{&wM%y9|VK z)Y&4Tnq!PuEJOY&s~*_)Ve~21L+Qp=HKEQfFB85DiVh=Tq%h8ZOVC&b3GY77#~jpv z_nl}&$Su2l;4355$noGyILeAu{mV4pr{ZbPG*EwvBt`$bP*y?$_ z8N4Ips~cH=?n80-y~!?DemVazuh+9LCIs)X(M6a=rE(6fWfcAF*XSgrXB_z{w%;3v zy2E7=*v2r;ld{z&?1KH=ptN(0;7H!`-bO>i`dwkQv{R+viu7}*Nv<$Ng)Db40m&$R zNcmN%Vcr@apND*~#PDaGH`>Q=vHMR6l~MzJXU9^1ckoNT(o_u)+XY;1LzP7=g!2uJ zjVs3_U8zeFj{KsUzXt8v6<2$yJHH7`G^#&dT-bAvXT-GCsm3Z1*yUxRKP~zZ9UWvQ z(#5veHP@*Ve5^>=>U*3mtS&?*YZ5TFXAAX3*(Q#icePz+4uY$ zQ%T%^ejM=a>9OGlX+6WEHzE>ddPCLWE)1Wy}l5@q~Ym|jdF-^A7ggVC7LUQPL zKpq=fW@q4y^Z@n>@Fp6LJ1RAy$dM-<< zX7Y^WQjEM#$|5EJx{_7rvQ25O$k|gOpS&o4p1d@w))oBV#q!qGE_hxsY1*E#)ivJx zV+{#V&s8lBitbF5$Hqvfa_$eQU{4PBQ5pF#TI+o*6k_PyHsHGtL@X=0)@Uh1R`KmE zws81miC76&aIhy0zGzC<`GT`_Jg538>QbDP5BKRzDdt>9yxg~P#zKYY4EE(85&43D z8Fs-3edm~lR^1+#OEV{_ITWH<*d9EJ4Q^g~p5M!7sKG3Sv%y_Xp`WhVP|XM;#1xH# zYGWys>`c;%@es|3E9om{O7?5yzGZRG*GlfDC4Q9Zf2AWFv^?Fptf{~)~PcW_G$ zGw=BuncbY+&Q4TI-Prgp7d`KA%ko55-wTI6{e`}!&irD6|%3KwJJ z)+k}v^v8Ip>s0!}{>vbtXgJD>7pb>&L>}#d_dIjiWS8vJDLkM{OKWGO5?b_LySmLr z<7nE9BahZT#3a-D+lbXf@dv1Z=)x;$CwyewH#AeCcr+5K1@=qlCN7`dJEFNw=x$#x zRuu{+$%AjzY*@U%5cKc+l*#LV=EON;>GB&zcnVO2VUbLS$GuUcD2BMh$MZ-YlT6I9 zTJtF&UheQ~wvQvLLMF{rM>=L3m>Nk*3fb_*8yl>?K~EHLo;Y!fa6Q#}t1~G}`jENs z%+t^D48>ZxZXi-q$g}#y`Ofzhm|{Glklv%wZUKwZ)}+<9e7CEkeN$b3iF@pxd-hZP zE)*H-nVPbHfxEj=H>Fl+u>9>)c3A)|-luBIl`}Z>*|LgZKYMKA_AL{^)$IDrdvnIy zP6-8Vgrw|ZLs2Ii>#aFm1ETrnV%vFRI6}WzkpgxBi+AF(iv&~R^kUzJ=oN#IHL$pU!)vuJ<1b@txLaR-baQ*XaL%sDSKz5bY+=j}%|>wM$uMj1 zmP}34zEYe2Ds|YNAdA-*mWYSva~6_mf{fjO!1v|zF9)h$O7;`fwmRs6SkUTUr|Pz~ zKcgv^hmS(CGGkfOBdo2 ztEKr84z>4;0Q^@w+%w^6w!Q=wEaD(LxBGoE?TF@K^d-~$f zPu}b9nWOBD&-|NzIy;-FJ56n~^ze_j^v#5&^s_O{`fo0E-`2rbv@rM* zc!XCZ$DN1Xr(ckqWo#ouM9*4e`HE5a7cB*TS^DB-$f|? zMB80LFFXk|`+!1`(11=A%P_viO<;PK+j?P*OMTMTHp+E>b;DG1h$t->>Xr~|=`U~z zq>n=Li;6%G+SH4VOB?P%ZBz%*j=ynBQ(V*}vo^|f4^va+(G;Q@Jn%JDGxF*C{J_vO zW-o^^a0)QM%n;l0fIHyOEv@pq5r$-SukRla=%&zD?fe-vF?~*=nx~fw3 zmXq>@0Qbo97q^c0C+z@kB5fT{n}}ysnY#oFK6*xfSneAq*KM}ulG;uWWl~pHTMlsai=L4)v<%)@{~c`V9W)bl{>gE=4jD8s(-q?baWjgcRZP^28cyVO2#^ z#{{T(trd@HdeeOc-jFm@_&qKE@kRqV`}eBwLLrC;c9?*?QFK zy_WFkFEjpaTp7^Y^(^~5SqWBVbs<%MpN&{Lg+%?qyfK`QSDkNtb?2R~5|YqV0Keb5}9p6Bu+gw)+Vhuo>NRdH4;oSplB^t+Hw zez-=WGv@&vv0UIKZvw4U#+o{I|72?L9OI zU7y4H=(WjxsTk^^OgOjRo57zWNF!;}LYv+Zdyc1!V6&t#j=3mu?LSdYpRx?>sLMd* zptu`~=7_2g>HU(z9+4G>Qha!SYr#)QOMm`K%^0Cv5eY#>q4jW=6P28aQ8)6(n2A+e zv)A$|@|C1bp(?%$cCxY_{^`=dH!?zZsjIv!nia7q^b-P+4mj^%S!Sicy>qeqUCSC0 zH;VAlpau~jQ1hOZ`XG1V?RB__ed7;H8s5)+ z(EPsAR7BuMF%;bgGP=Cu+FVp`eQ+KuqqH#FM6&Q0$p;7tFDb4X2w<2bY8fo!9(kpB zFXdB|@`g~^^%)5+8n0J>%Dc&+2YfMFVBuw$oyz$^Qmr*OpT}nkUsO^6zdhRkj{{Ds=&zFma@g0#yRxL1pmCt~OBEY|c zV`s+OOE6SumF4A;uh{4UeP^acvasY$$I{sJ!{NyYairwB=yUS%i@`HEHEnF|DMvCA z;zj=-nv0&}f&pKDu>s%A!-g|2qzWqIOi|VAb=&lp3LJR*m_!hBfJW*Rcj64@A{;?u zOIGv+D4M#ZchCGkJE(GyQ{}r_ay8<;qf(;;X>jT+YBSwswk+|HbuDQXc?||+G3&){};*nw6KV7$UkLBKffRBDM3Y4j((e)1aWr43G z=A;mgy=u_$gZUFG8l*++$3y39hr?Op-fnXo9Ou`jv>3?}UZA~YhUhQJ!%I>SIX(Gc z&1&j>4$m(tn#0*wks)hc;2H-Wd$^OTt`i{ld5x`? zzVebx`iKL6cY<3TiTiner|DD_y;L@GDX%Y^-I+`%%8rR5!krn;Z2N`*v!bCsRykn~ z3Dt6~`$5Z+uq5m(RtuNEKeeB4k4RYKdqs5A^rWy?v;zO&y=1hoy7 zWcymImdcEf69c=N;BUbZzKFAWf)QKConVCI0?~_q^f9Cn>xkhUQSOaxikI=)OB3DE ztu@vjWN#RzIi1bAO$qy2^s?^>eKC9B<;Q7u|8MI zCn}D2?ymNlSw2PRis1h0mbxEnl7j#B)gs{qXQ$RIBRrW^Yxabb{y{(Kv|QQ;l-uQg z8yN$CS|P@tS|7~oBnZMrvZE44`m(H>^w*Ql;pT$bMy2fFthKMg^BfNvkRzETEJmxh z*WZ*O$uJ%Ne9K6?Vn4^lva^DZDZ7Bq@OqMoKc#g@Hs@Yy{7Z~e3vbXAFIg9DT`{RE z3F6hBH5kyTFSA}A+INY+coon{*2zPdM-rq3n*s166p=J{*Egj zqsUALIu(PNkYo!^>5qu#msEfBv#~oM!z18IVQP(6V!EtbxCJwBM!a8==3{!%W!_Gy z&sw1{sS_GC$vSKZYX=ViVLM+6mH)SGRo4c{Jfclf#DljqI9u>g1q)qDbdl_K$3%%*50k1g}?5GorGW~dTpbxPY>WWyFg zA^AI3fF~t0o33IHOZcCIMf$&lZ0;1#>q1WwZ|J#BES!!p#}10u6IgJamLxF@3s^YW zNLL*3b)<4VFV=(BI&fA;SDin+6Tf4Bz3Yh^{Lz?#JPdgFUh=l)*KB&1HmT8^Iqy#s zIYKpBZ}0Ccmi;n^aw{*^nQsGUpXdQ3b~)^VN155W$kX>`@!561$fW}sX&J?NYi-fF zDToa?6LlxTyPsYKhv&Myw3dA9T-}y8ML0?{AJz^>gazg_ekSNUy<({F%5dI)dZU7T zQn=dkOFe;LqgVwE;+G-$wfWm;MLlwq`0vE1;-@%27&Knf<*NFJ`3!zmfRik)Y@I5~ zU{JD9eI1DA_>DCp1n~Vf^<^h*@VIEAHZ&mM;LNUc<9Vz}9&~nDiSGRc*F>djk$&+C zS7AbdW!S|-lS9Q&ClW1xKc48E+e@_pv<`HFbmVNU!8ar=-5gbp*nBIK6#_K| zr)X&vB=^90+i0SKAfB++CT#xI_DOPosEIE+#;;Sy zjCQ{y-z(xF7WX#Tk~EYKSV0?iHkpT{m4j~GXx4~aj%#!j6HoZgyPM9!5Mn+969#H; zR&#PwIKA$^Qwj<82im)h7<5Th{9**&zv``bEn>*8s=AQB#@$RQmMrevHF^qIkP+V({lUmOXW} zAw`QPM^OW?LClw$DW<5__RM)(GpZ+wJO&~h(1*&Jj0#r~)npkBFW~hIuuXGQRK?l3 zNwBF+*da!JT9cbU9o^a&mRla}<<}m$R!mvgZukKyMP+hTN@}M4i8+?F+|4PyjhYxIa+R)LO36)e6wT^99hO{FkPeC-ay27e!r4?_$kM?$*y?zY z*q`Sat;OeS8{Z+fI+64zEfdSN16I? z1Vk_yvQQ5IJC+2#gv4n?1K@o_(`8Yf;FV76UpG|k#*Byeg}ESvkdvFfPhpSo>@B*E z9|!jr4J%dlp}mf(xQ|)oPA3dz;ui^jAi87Kqk?=`suy%wT7EC^phhVqv%}qm<}5@ciFBtfxd+s@ zC3JQ^-y;HPGG!9aT0_&=wB^p)GD%nTeBjJDsr*_UE?TVD9jhF(S`Q9J z&$bIA{IaBz#DEr6&Rod$zaEAa2dk%EwX4;**a!d+P3Q^$Us{AVZ>-Qqa+;F{Gl9^2 zYI6~PDvCKvYw=0u@rOH}A+gI??TcA`VeLXOBfqafg#-G&BgZX_CCYK8x7^+rii;5i zB}bpj{dP|6J@FSSqfZilVxpEdvS+>uP?1VfgTWqX!?*r;QTmk!U#a^trVI{o&@DKyI(JWmm( zTI)e)i1yasv2ePZ?0<>ka46-Zq1(9QZFJ;=?G^4tPRRIJ>rnP~gb+MFCiA){3oQ)4 zzfRg$N#lGq47^y4`e*h#-wyEVG1R4iDklT>7+{f8f(3uHKy$FJ0qE^F5=pC8vzQh4D;nlvPU zdxNspO5f2L1?2_~_eAwFeQSUqq$vU*qt|HQ8t19PzNd?nF zkCnXPv}io1jODoxwb z>(q#qMBHVr510xYqSC)2!=B^2r8H2Z5Uu}4y#Kys-c!Nvx_Uj!ufUs4?dM09T7_`O zHEWUM*quSU`X0E?4%l@ePJf9`<&vymMK%GxJY|SY&^E!)FGlpW}zc zcURbdUC|J+KaAZ;4;}NyFi-sIV@lfZX_DtXt%EiWh^f5@O3#RR;N@OUj8Og>HM+*_sj;{TeBUdENsu$J5p_$JNtrW$S_kQd<| z^#s!Tsrc32#k#f#DN`MPd|JVnPh3Tgy|gvjAbNG*73GuBZ=pPhG-0R9QJZyvX`<86cAA{GkM zo)z~CGXF@kN96QxvlH%ZVO^u`epzb)@2GLhiOu9BV8FTY!w(nwV1T}Csow-c& zaOPIO7`;^6*V-*GI1uO`g@8p_*;Ni7;Qs1Hf#Nnzb=On}LE`Rk_^MYd;=^EVK}HT( z<^GBmr?J$q^RP#i4&A-}Y7c%?gxt<{E_-bL?!?EwZvgjyb4p)Zz%V+P9DDLjOYMs0 zmfzuCnI6{|LSWEchTfdOjSu2Y3cURF0kTGjnm3!nIF-1-ne^ckiz>HYB7OtLwVGxG z{VR2E84AD1p!95(k_Pq1GBNz;Q4=jMQAn%e;xf;n+heN-t9$t{+ zi_LRho3d=mP-YCeouU%?q<{%kd~c_;f~eijLb1Jn>bDUg?X0&Y)Db#Cd}@VG@~l7{ zPnCv*VqmwzUThxCypJPwyk5wwK0}9=AT^}+g)u1zRkvrOOgO-tePj&lEyh@ z{3m#SC$Gu-@el3kjHxh5hYpfBo}1EDjcSLJhsK$*{wPLLr`bYhq@9t;vPH(mMnl?| zOzQcTgQ4$P1e&v{6q(Xo_=P@X>488+R#!&|=c0g1f8W{2kH{t5b$}g%n&Ix}w&)6X z@;uzcf^JXkIWzHmreyuO1LHict7LwhO

G4_~fLH23MXqzVY*3$p-%^3i2?h$rAK(EipHm#5ujfe-?T`7Zdo4+-_SrgH0wJ=4#!c>1~ru(>TMr(Ws#9~0UO6f z3LIXRiMGZ;V%(;++0?s)$n!xVYG}18?}saoRGdB^mB^{Ksti{0not?rlU>!vD^Rdk zJg;&weCphWp^dEcL-%<0ZUnJlSTadpC#z*-F}zGw4}anL_I)vUJ47{q!%RxgO}

MYPhWnXd012P&W*OX<8|%kYMsiMfhDD=>$&a2B^{?G z(g=CQtMjjU;}$0ac6Y>o?-qW>uZII#;z>8#G#>cc3y?`bw!ZZ^v&u#E1#3&+E1A^D zdN5G*;zU#BL(bbtjRVN#N3g8i*JG?5-ajbw69Y-5MJK6ejw|BP7Lj(XbT#u7Z!yQ> zto9tMUJajhiwr05rOx9^C!L!7!no0imTtwpm9+G*_<<*vl#I`RHm!v(P5;T&j~vLZ zkd9|6c(rpP4tPLnafM@+SPbjgO&e^gJDMO0erJgvfs=$gWQ|`ge6BBD@9Lou8wyrt8HtKPfs3`h{7Xan0W0>&~SuFMeeJe+3Dg2EbQd^>Z0ed*y& zww_U(gW*r@8-)z|8Fsg^Ax#wr(1o8U|;Z2pF>&xVp?W7x%?Bpg7{jKs;x=^+`z zfgf;td4c{dav4f98b@F49vGvgxqlIe?n0a{JH>{oNsKzI;(}zoZ|!03_tPcDeFH+8UA0HdcCTCv0K?jT)RIgVxe_V z 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 Date: Thu, 2 Jun 2016 06:16:50 -0700 Subject: [PATCH 2/3] tx_scheduling_advance removed and tx_sample_advance added to trx_write in lte-enb.c --- targets/RT/USER/lte-enb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 1fe49bf6af..6290953e8b 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -517,7 +517,7 @@ static void* eNB_thread_tx( void* param ) txp[i] = (void*)&PHY_vars_eNB_g[0][0]->common_vars.txdata[0][i][proc->subframe_tx*PHY_vars_eNB_g[0][0]->frame_parms.samples_per_tti]; // if symb_written < spp ==> error openair0.trx_write_func(&openair0, - (proc->timestamp_tx+openair0_cfg[0].tx_sample_advance), + (proc->timestamp_tx-openair0_cfg[0].tx_sample_advance), txp, PHY_vars_eNB_g[0][0]->frame_parms.samples_per_tti, PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx, From fd70527bf2b03ede4b54e1cf01362a54bd515c04 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Thu, 2 Jun 2016 16:00:02 -0700 Subject: [PATCH 3/3] updates for 2 RXn-TXnp4 threads --- openair1/PHY/INIT/lte_init.c | 10 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 7 +- openair1/PHY/LTE_TRANSPORT/phich.c | 17 +- openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c | 3 +- openair1/PHY/LTE_TRANSPORT/pmch.c | 10 +- openair1/PHY/LTE_TRANSPORT/print_stats.c | 8 +- openair1/PHY/LTE_TRANSPORT/proto.h | 17 +- openair1/PHY/LTE_TRANSPORT/pucch.c | 5 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 12 +- .../PHY/LTE_TRANSPORT/ulsch_demodulation.c | 16 +- openair1/PHY/TOOLS/lte_phy_scope.c | 2 +- openair1/PHY/defs.h | 51 ++- openair1/SCHED/defs.h | 18 +- openair1/SCHED/phy_mac_stub.c | 44 +- openair1/SCHED/phy_procedures_lte_eNb.c | 377 +++++++++--------- openair2/LAYER2/MAC/proto.h | 2 +- openair2/UTIL/LOG/vcd_signal_dumper.c | 24 +- openair2/UTIL/LOG/vcd_signal_dumper.h | 24 +- targets/RT/USER/lte-enb.c | 218 +++++----- 19 files changed, 442 insertions(+), 423 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 5c8a5ec436..e3128d7296 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -121,7 +121,7 @@ void phy_config_sib2_eNB(uint8_t Mod_id, //int32_t rx_total_gain_eNB_dB = PHY_vars_eNB_g[Mod_id][CC_id]->rx_total_gain_eNB_dB; int i; - LOG_D(PHY,"[eNB%d] CCid %d Frame %d: Applying radioResourceConfigCommon\n",Mod_id,CC_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc.frame_tx); + LOG_D(PHY,"[eNB%d] CCid %d: Applying radioResourceConfigCommon\n",Mod_id,CC_id); frame_parms->prach_config_common.rootSequenceIndex =radioResourceConfigCommon->prach_Config.rootSequenceIndex; LOG_D(PHY,"prach_config_common.rootSequenceIndex = %d\n",frame_parms->prach_config_common.rootSequenceIndex ); @@ -388,7 +388,7 @@ void phy_config_sib13_eNB(uint8_t Mod_id,int CC_id,int mbsfn_Area_idx, LTE_DL_FRAME_PARMS *frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms; - LOG_I(PHY,"[eNB%d] Frame %d: Applying MBSFN_Area_id %d for index %d\n",Mod_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc.frame_tx,mbsfn_AreaId_r9,mbsfn_Area_idx); + LOG_I(PHY,"[eNB%d] Applying MBSFN_Area_id %d for index %d\n",Mod_id,mbsfn_AreaId_r9,mbsfn_Area_idx); if (mbsfn_Area_idx == 0) { frame_parms->Nid_cell_mbsfn = (uint16_t)mbsfn_AreaId_r9; @@ -409,7 +409,7 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *eNB) physicalConfigDedicated = eNB->physicalConfigDedicated[UE_id]; if (physicalConfigDedicated != NULL) { - LOG_I(PHY,"[eNB %d] Frame %d: Sent physicalConfigDedicated=%p for UE %d\n",eNB->Mod_id, eNB->proc.frame_tx,physicalConfigDedicated,UE_id); + LOG_I(PHY,"[eNB %d] Frame %d: Sent physicalConfigDedicated=%p for UE %d\n",eNB->Mod_id,physicalConfigDedicated,UE_id); LOG_D(PHY,"------------------------------------------------------------------------\n"); if (physicalConfigDedicated->pdsch_ConfigDedicated) { @@ -644,7 +644,7 @@ void phy_config_dedicated_eNB(uint8_t Mod_id, int8_t UE_id = find_ue(rnti,eNB); if (UE_id == -1) { - LOG_E( PHY, "[eNB %"PRIu8"] Frame %d: find_ue() returns -1\n", Mod_id, eNB->proc.frame_tx ); + LOG_E( PHY, "[eNB %"PRIu8"] Frame %d: find_ue() returns -1\n", Mod_id); return; } @@ -653,7 +653,7 @@ void phy_config_dedicated_eNB(uint8_t Mod_id, eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated; LOG_I(PHY,"phy_config_dedicated_eNB: physicalConfigDedicated=%p\n",physicalConfigDedicated); } else { - LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, eNB->proc.frame_tx,UE_id); + LOG_E(PHY,"[eNB %d] Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, UE_id); return; } diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 4538deee13..18e232e967 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -7078,6 +7078,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu, } int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, void *dci_pdu, uint16_t rnti, DCI_format_t dci_format, @@ -7095,7 +7096,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB, ANFBmode_t AckNackFBMode = eNB->pucch_config_dedicated[UE_id].tdd_AckNackFeedbackMode; LTE_eNB_ULSCH_t *ulsch=eNB->ulsch[UE_id]; LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms; - int subframe = eNB->proc.subframe_tx; + int subframe = proc->subframe_tx; uint32_t cqi_req = 0; uint32_t dai = 0; @@ -7116,7 +7117,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB, harq_pid = subframe2harq_pid(frame_parms, pdcch_alloc2ul_frame(frame_parms, - eNB->proc.frame_tx, + proc->frame_tx, subframe), pdcch_alloc2ul_subframe(frame_parms,subframe)); @@ -7637,7 +7638,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB, LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, subframe %d : Programming PUSCH with n_DMRS2 %d (cshift %d)\n", - eNB->Mod_id,harq_pid,eNB->proc.frame_tx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift); + eNB->Mod_id,harq_pid,proc->frame_tx,subframe,ulsch->harq_processes[harq_pid]->n_DMRS2,cshift); diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c index 54564637d6..223afcfdd9 100644 --- a/openair1/PHY/LTE_TRANSPORT/phich.c +++ b/openair1/PHY/LTE_TRANSPORT/phich.c @@ -1416,7 +1416,8 @@ void rx_phich(PHY_VARS_UE *ue, } void generate_phich_top(PHY_VARS_eNB *eNB, - int16_t amp, + eNB_rxtx_proc_t *proc, + int16_t amp, uint8_t sect_id, uint8_t abstraction_flag) { @@ -1431,7 +1432,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, uint8_t pusch_subframe; uint8_t UE_id; uint32_t pusch_frame; - int subframe = eNB->proc.subframe_tx; + int subframe = proc->subframe_tx; // compute Ngroup_PHICH (see formula at beginning of Section 6.9 in 36-211 @@ -1443,7 +1444,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, if (frame_parms->Ncp == 1) NSF_PHICH = 2; - pusch_frame = phich_frame2_pusch_frame(frame_parms,eNB->proc.frame_tx,subframe); + pusch_frame = phich_frame2_pusch_frame(frame_parms,proc->frame_tx,subframe); pusch_subframe = phich_subframe2_pusch_subframe(frame_parms,subframe); harq_pid = subframe2harq_pid(frame_parms,pusch_frame,pusch_subframe); @@ -1452,7 +1453,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, if (ulsch[UE_id]->harq_processes[harq_pid]->phich_active == 1) { LOG_D(PHY,"[eNB][PUSCH %d/%x] Frame %d subframe %d (pusch_subframe %d,pusch_frame %d) phich active %d\n", - harq_pid,ulsch[UE_id]->rnti,eNB->proc.frame_tx,subframe,pusch_subframe,pusch_frame,ulsch[UE_id]->harq_processes[harq_pid]->phich_active); + harq_pid,ulsch[UE_id]->rnti,proc->frame_tx,subframe,pusch_subframe,pusch_frame,ulsch[UE_id]->harq_processes[harq_pid]->phich_active); ngroup_PHICH = (ulsch[UE_id]->harq_processes[harq_pid]->first_rb + ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS)%Ngroup_PHICH; @@ -1466,7 +1467,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, nseq_PHICH = ((ulsch[UE_id]->harq_processes[harq_pid]->first_rb/Ngroup_PHICH) + ulsch[UE_id]->harq_processes[harq_pid]->n_DMRS)%(2*NSF_PHICH); LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generating PHICH, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d dci_alloc %d)\n", - eNB->Mod_id,harq_pid,eNB->proc.frame_tx, + eNB->Mod_id,harq_pid,proc->frame_tx, subframe,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH, ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK, ulsch[UE_id]->harq_processes[harq_pid]->first_rb, @@ -1474,7 +1475,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, if (ulsch[UE_id]->Msg3_active == 1) { LOG_D(PHY,"[eNB %d][PUSCH %d][RAPROC] Frame %d, subframe %d: Generating Msg3 PHICH for UE %d, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d\n", - eNB->Mod_id,harq_pid,eNB->proc.frame_tx,subframe, + eNB->Mod_id,harq_pid,proc->frame_tx,subframe, UE_id,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH,ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK, ulsch[UE_id]->harq_processes[harq_pid]->first_rb); } @@ -1504,7 +1505,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, (ulsch[UE_id]->harq_processes[harq_pid]->rar_alloc == 0) ) { if (ulsch[UE_id]->harq_processes[harq_pid]->phich_ACK==0 ) { LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d, subframe %d : PHICH NACK / (no format0 DCI) Setting subframe_scheduling_flag\n", - eNB->Mod_id,harq_pid,eNB->proc.frame_tx,subframe); + eNB->Mod_id,harq_pid,proc->frame_tx,subframe); ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1; ulsch[UE_id]->harq_processes[harq_pid]->rvidx = rv_table[ulsch[UE_id]->harq_processes[harq_pid]->round&3]; ulsch[UE_id]->harq_processes[harq_pid]->O_RI = 0; @@ -1514,7 +1515,7 @@ void generate_phich_top(PHY_VARS_eNB *eNB, } else { LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d PHICH ACK (no format0 DCI) Clearing subframe_scheduling_flag, setting round to 0\n", - eNB->Mod_id,harq_pid,eNB->proc.frame_tx,subframe); + eNB->Mod_id,harq_pid,proc->frame_tx,subframe); ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0; ulsch[UE_id]->harq_processes[harq_pid]->round=0; } diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c index b32d56f5be..8a76ef6e77 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c @@ -42,6 +42,7 @@ int generate_mbsfn_pilot(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, int32_t **txdataF, int16_t amp) @@ -49,7 +50,7 @@ int generate_mbsfn_pilot(PHY_VARS_eNB *eNB, LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms; uint32_t subframe_offset,Nsymb,samples_per_symbol; - int subframe = eNB->proc.subframe_tx; + int subframe = proc->subframe_tx; if (subframe<0 || subframe>= 10) { diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c index 084b2b1793..325e0918a5 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch.c @@ -286,11 +286,11 @@ void fill_UE_dlsch_MCH(PHY_VARS_UE *ue,int mcs,int ndi,int rvidx,int eNB_id) } } -void generate_mch(PHY_VARS_eNB *eNB,uint8_t *a,int abstraction_flag) +void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a,int abstraction_flag) { int G; - int subframe = eNB->proc.subframe_tx; + int subframe = proc->subframe_tx; if (abstraction_flag != 0) { if (eNB_transport_info_TB_index[eNB->Mod_id][eNB->CC_id]!=0) @@ -312,9 +312,9 @@ void generate_mch(PHY_VARS_eNB *eNB,uint8_t *a,int abstraction_flag) eNB->frame_parms.N_RB_DL, eNB->dlsch_MCH->harq_processes[0]->rb_alloc, get_Qm(eNB->dlsch_MCH->harq_processes[0]->mcs),1, - 2,eNB->proc.frame_tx,subframe); + 2,proc->frame_tx,subframe); - generate_mbsfn_pilot(eNB, + generate_mbsfn_pilot(eNB,proc, eNB->common_vars.txdataF[0], AMP); @@ -323,7 +323,7 @@ void generate_mch(PHY_VARS_eNB *eNB,uint8_t *a,int abstraction_flag) &eNB->frame_parms, 1, eNB->dlsch_MCH, - eNB->proc.frame_tx, + proc->frame_tx, subframe, &eNB->dlsch_rate_matching_stats, &eNB->dlsch_turbo_encoding_stats, diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c index 829b05530e..a175f4cb8e 100644 --- a/openair1/PHY/LTE_TRANSPORT/print_stats.c +++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c @@ -568,7 +568,7 @@ int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length) uint32_t ulsch_round_attempts[4]= {0,0,0,0},ulsch_round_errors[4]= {0,0,0,0}; uint32_t dlsch_round_attempts[4]= {0,0,0,0},dlsch_round_errors[4]= {0,0,0,0}; uint32_t UE_id_mac, RRC_status; - + eNB_rxtx_proc_t *proc = &eNB->proc.proc_rxtx[0]; if (eNB==NULL) return 0; @@ -583,7 +583,7 @@ int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length) for (eNB_id=0; eNB_idproc.frame_tx, + proc->frame_tx, eNB->rx_total_gain_dB, eNB->measurements[eNB_id].n0_power_tot_dBm, eNB->measurements[eNB_id].n0_power_dB[0], @@ -621,9 +621,9 @@ int dump_eNB_stats(PHY_VARS_eNB *eNB, char* buffer, int length) - len += sprintf(&buffer[len],"Total DLSCH %d kbits / %d frames ",(eNB->total_transmitted_bits/1000),eNB->proc.frame_tx+1); + len += sprintf(&buffer[len],"Total DLSCH %d kbits / %d frames ",(eNB->total_transmitted_bits/1000),proc->frame_tx+1); len += sprintf(&buffer[len],"Total DLSCH throughput %d kbps ",(eNB->total_dlsch_bitrate/1000)); - len += sprintf(&buffer[len],"Total DLSCH trans %d / %d frames\n",success,eNB->proc.frame_tx+1); + len += sprintf(&buffer[len],"Total DLSCH trans %d / %d frames\n",success,proc->frame_tx+1); //len += sprintf(&buffer[len],"[eNB PROC] FULL MU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->FULL_MUMIMO_transmissions,eNB->check_for_total_transmissions); //len += sprintf(&buffer[len],"[eNB PROC] MU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->check_for_MUMIMO_transmissions,eNB->check_for_total_transmissions); //len += sprintf(&buffer[len],"[eNB PROC] SU-MIMO Transmissions/Total Transmissions = %d/%d\n",eNB->check_for_SUMIMO_transmissions,eNB->check_for_total_transmissions); diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index fc9e800760..1f8f0723e6 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -232,10 +232,11 @@ int mch_modulation(int32_t **txdataF, @param abstraction_flag */ -void generate_mch(PHY_VARS_eNB *phy_vars_eNB,uint8_t *a,int abstraction_flag); +void generate_mch(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t *a,int abstraction_flag); /** \brief This function generates the frequency-domain pilots (cell-specific downlink reference signals) @param phy_vars_eNB Pointer to eNB variables + @param proc Pointer to RXn-TXnp4 proc information @param mcs MCS for MBSFN @param ndi new data indicator @param rdvix @@ -299,7 +300,8 @@ int32_t generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, int first_pilot_only); int32_t generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB, - int32_t **txdataF, + eNB_rxtx_proc_t *proc, + int32_t **txdataF, int16_t amp); int32_t generate_pss(int32_t **txdataF, @@ -1408,6 +1410,7 @@ int32_t generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue, double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id); int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB, + eNB_rxtx_proc_t *proc, void *dci_pdu, rnti_t rnti, DCI_format_t dci_format, @@ -1419,7 +1422,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB, uint8_t use_srs); -void dump_ulsch(PHY_VARS_eNB *phy_vars_eNb,uint8_t UE_id); +void dump_ulsch(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id); void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid); void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); @@ -1474,12 +1477,14 @@ void generate_RIV_tables(void); int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode); void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB, - uint8_t eNB_id, // this is the effective sector id + eNB_rxtx_proc_t *proc, + uint8_t eNB_id, // this is the effective sector id uint8_t UE_id, LTE_eNB_ULSCH_t **ulsch, uint8_t cooperation_flag); void rx_ulsch_emul(PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, uint8_t sect_id, uint8_t UE_index); @@ -1518,6 +1523,7 @@ int32_t ulsch_encoding_emul(uint8_t *ulsch_buffer, /*! \brief Decoding of PUSCH/ACK/RI/ACK from 36-212. @param phy_vars_eNB Pointer to eNB top-level descriptor + @param proc Pointer to RXTX proc variables @param UE_id ID of UE transmitting this PUSCH @param subframe Index of subframe for PUSCH @param control_only_flag Receive PUSCH with control information only @@ -1526,6 +1532,7 @@ int32_t ulsch_encoding_emul(uint8_t *ulsch_buffer, @returns 0 on success */ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, uint8_t UE_id, uint8_t control_only_flag, uint8_t Nbundled, @@ -1536,6 +1543,7 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *phy_vars_eNB, uint16_t *crnti); void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, int16_t amp, uint8_t sect_id, uint8_t abstraction_flag); @@ -1663,6 +1671,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, uint8_t pucch1_thres); int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, uint8_t UE_index, PUCCH_FMT_t fmt, uint8_t n1_pucch_sel, diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 547a0f2217..ce5f756145 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -1064,6 +1064,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, int32_t rx_pucch_emul(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t UE_index, PUCCH_FMT_t fmt, uint8_t n1_pucch_sel, @@ -1072,7 +1073,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *eNB, { uint8_t UE_id; uint16_t rnti; - int subframe = eNB->proc.subframe_rx; + int subframe = proc->subframe_rx; uint8_t CC_id = eNB->CC_id; rnti = eNB->ulsch[UE_index]->rnti; @@ -1095,7 +1096,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *eNB, payload[0] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[0]; payload[1] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[1]; } else - LOG_E(PHY,"[eNB] Frame %d: Can't handle formats 2/2a/2b\n",eNB->proc.frame_rx); + LOG_E(PHY,"[eNB] Frame %d: Can't handle formats 2/2a/2b\n",proc->frame_rx); if (PHY_vars_UE_g[UE_id][CC_id]->pucch_sel[subframe] == n1_pucch_sel) return(99); diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index d63ed32fda..02bf98c372 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -218,7 +218,7 @@ uint8_t extract_cqi_crc(uint8_t *cqi,uint8_t CQI_LENGTH) -unsigned int ulsch_decoding(PHY_VARS_eNB *eNB, +unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, uint8_t UE_id, uint8_t control_only_flag, uint8_t Nbundled, @@ -259,7 +259,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB, int16_t cseq[6*14*1200]; int off; int status[20]; - int subframe = eNB->proc.subframe_rx; + int subframe = proc->subframe_rx; LTE_UL_eNB_HARQ_t *ulsch_harq; uint8_t (*tc)(int16_t *y, @@ -278,7 +278,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB, time_stats_t *, time_stats_t *); - harq_pid = subframe2harq_pid(frame_parms,eNB->proc.frame_rx,subframe); + harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,1); @@ -1501,18 +1501,18 @@ int ulsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nrb #endif -uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB, +uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc, uint8_t UE_index, uint16_t *crnti) { uint8_t UE_id; uint16_t rnti; - int subframe = eNB->proc.subframe_rx; + int subframe = proc->subframe_rx; uint8_t harq_pid; uint8_t CC_id = eNB->CC_id; - harq_pid = subframe2harq_pid(&eNB->frame_parms,eNB->proc.frame_rx,subframe); + harq_pid = subframe2harq_pid(&eNB->frame_parms,proc->frame_rx,subframe); rnti = eNB->ulsch[UE_index]->rnti; #ifdef DEBUG_PHY diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 53cab326f1..59cf11a06c 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -1577,6 +1577,7 @@ int32_t avgU[2]; int32_t avgU_0[2],avgU_1[2]; // For the Distributed Alamouti Scheme void rx_ulsch(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t eNB_id, // this is the effective sector id uint8_t UE_id, LTE_eNB_ULSCH_t **ulsch, @@ -1602,9 +1603,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB, uint8_t Qm; uint16_t rx_power_correction; int16_t *llrp; - int subframe = eNB->proc.subframe_rx; + int subframe = proc->subframe_rx; - harq_pid = subframe2harq_pid(frame_parms,eNB->proc.frame_rx,subframe); + harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe); Qm = get_Qm_ul(ulsch[UE_id]->harq_processes[harq_pid]->mcs); #ifdef DEBUG_ULSCH msg("rx_ulsch: eNB_id %d, harq_pid %d, nb_rb %d first_rb %d, cooperation %d\n",eNB_id,harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb, @@ -1885,24 +1886,25 @@ void rx_ulsch(PHY_VARS_eNB *eNB, } void rx_ulsch_emul(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t sect_id, uint8_t UE_index) { - msg("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, sect_id %d, UE_index %d\n",eNB->Mod_id,eNB->proc.subframe_rx,sect_id,UE_index); + msg("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, sect_id %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,sect_id,UE_index); eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB; eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB; } -void dump_ulsch(PHY_VARS_eNB *eNB,uint8_t UE_id) + void dump_ulsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id) { - + uint32_t nsymb = (eNB->frame_parms.Ncp == 0) ? 14 : 12; uint8_t harq_pid; - int subframe = eNB->proc.subframe_rx; + int subframe = proc->subframe_rx; - harq_pid = subframe2harq_pid(&eNB->frame_parms,eNB->proc.frame_rx,subframe); + harq_pid = subframe2harq_pid(&eNB->frame_parms,proc->frame_rx,subframe); printf("Dumping ULSCH in subframe %d with harq_pid %d, for NB_rb %d, mcs %d, Qm %d, N_symb %d\n", subframe,harq_pid,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs,get_Qm_ul(eNB->ulsch[UE_id]->harq_processes[harq_pid]->mcs), diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index 28c407b088..8af3fcf8d1 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -183,7 +183,7 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, float time[FRAME_LENGTH_COMPLEX_SAMPLES]; float time2[2048]; float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx]; - int frame = phy_vars_enb->proc.frame_tx; + int frame = phy_vars_enb->proc.proc_rxtx[0].frame_tx; uint32_t total_dlsch_bitrate = phy_vars_enb->total_dlsch_bitrate; int coded_bits_per_codeword = 0; uint8_t harq_pid; // in TDD config 3 it is sf-2, i.e., can be 0,1,2 diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index e18c0b1d91..89fc1cd7ed 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -178,6 +178,34 @@ typedef struct ral_threshold_phy_s { } ral_threshold_phy_t; #endif +/// Context data structure for RX/TX portion of subframe processing +typedef struct { + /// Component Carrier index + uint8_t CC_id; + /// timestamp transmitted to HW + openair0_timestamp timestamp_tx; + /// subframe to act upon for transmission + int subframe_tx; + /// subframe to act upon for reception + int subframe_rx; + /// frame to act upon for transmission + int frame_tx; + /// frame to act upon for reception + int frame_rx; + /// \brief Instance count for RXn-TXnp4 processing thread. + /// \internal This variable is protected by \ref mutex_rxtx. + int instance_cnt_rxtx; + /// pthread structure for RXn-TXnp4 processing thread + pthread_t pthread_rxtx; + /// pthread attributes for RXn-TXnp4 processing thread + pthread_attr_t attr_rxtx; + /// condition variable for tx processing thread + pthread_cond_t cond_rxtx; + /// mutex for RXn-TXnp4 processing thread + pthread_mutex_t mutex_rxtx; + /// scheduling parameters for RXn-TXnp4 thread + struct sched_param sched_param_rxtx; +} eNB_rxtx_proc_t; /// Context data structure for eNB subframe processing typedef struct { /// Component Carrier index @@ -186,54 +214,37 @@ typedef struct { int thread_index; /// timestamp received from HW openair0_timestamp timestamp_rx; - /// timestamp transmitted to HW - openair0_timestamp timestamp_tx; - /// subframe to act upon for transmission - int subframe_tx; /// subframe to act upon for reception int subframe_rx; /// subframe to act upon for PRACH int subframe_prach; - /// frame to act upon for transmission - int frame_tx; /// frame to act upon for reception int frame_rx; /// frame to act upon for PRACH int frame_prach; - /// \brief Instance count for tx processing thread. - /// \internal This variable is protected by \ref mutex_tx. - int instance_cnt_tx; /// \brief Instance count for rx processing thread. /// \internal This variable is protected by \ref mutex_prach. int instance_cnt_prach; - /// pthread structure for tx processing thread - pthread_t pthread_tx; /// pthread structure for rx processing thread pthread_t pthread_rx; /// flag to indicate first RX acquisition int first_rx; - /// pthread attributes for tx processing thread - pthread_attr_t attr_tx; /// pthread attributes for rx processing thread pthread_attr_t attr_rx; /// pthread attributes for prach processing thread pthread_attr_t attr_prach; - /// scheduling parameters for tx thread - struct sched_param sched_param_tx; /// scheduling parameters for rx thread struct sched_param sched_param_rx; /// scheduling parameters for prach thread struct sched_param sched_param_prach; - /// condition variable for tx processing thread - pthread_t pthread_prach; /// condition variable for prach processing thread - pthread_cond_t cond_tx; + pthread_t pthread_prach; /// condition variable for rx processing thread; pthread_cond_t cond_prach; /// mutex for tx processing thread - pthread_mutex_t mutex_tx; - /// mutex for tx processing thread pthread_mutex_t mutex_prach; + /// set of scheduling variables RXn-TXnp4 threads + eNB_rxtx_proc_t proc_rxtx[2]; } eNB_proc_t; //! \brief Number of eNB TX and RX threads. diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index 2174684126..62e0a7d9ce 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -226,17 +226,19 @@ void phy_procedures_UE_S_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abst @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying @param phy_vars_rn pointer to the RN variables */ -void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn); +void phy_procedures_eNB_TX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t abstraction_flag,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn); /*! \brief Scheduling for eNB RX UE-specific procedures in normal subframes. @param phy_vars_eNB Pointer to eNB variables on which to act + @param proc Pointer to RXn-TXnp4 proc information @param abstraction_flag Indicator of PHY abstraction @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying */ -void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type); +void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t abstraction_flag,relaying_type_t r_type); /*! \brief Scheduling for eNB TX procedures in TDD S-subframes. @param phy_vars_eNB Pointer to eNB variables on which to act + @param proc Pointer to RXn-TXnp4 proc information @param abstraction_flag Indicator of PHY abstraction @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying */ @@ -260,10 +262,11 @@ void phy_procedures_eNB_S_TX(PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag @param abstraction_flag Indicator of PHY abstraction @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying */ -void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type); +void phy_procedures_eNB_S_RX(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t abstraction_flag,relaying_type_t r_type); /*! \brief Scheduling for eNB PRACH RX procedures @param phy_vars_eNB Pointer to eNB variables on which to act + @param proc Pointer to RXn-TXnp4 proc information @param abstraction_flag Indicator of PHY abstraction */ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t abstraction_flag); @@ -393,10 +396,11 @@ uint8_t is_SR_TXOp(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); @param UE_id ID of UE which may be issuing the SR @returns 1 if TXOp is active. */ -uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id); +uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id); /*! \brief Gives the UL subframe corresponding to a PDDCH order in subframe n @param frame_parms Pointer to DL frame parameters + @param proc Pointer to RXn-TXnp4 proc information @param n subframe of PDCCH @returns UL subframe corresponding to pdcch order */ @@ -447,7 +451,8 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue, /*! \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch = Ncce + N1_pucch. For TDD, this routine computes the procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2) -@param phy_vars_eNB Pointer to UE variables +@param phy_vars_eNB Pointer to eNB variables +@param proc Pointer to RXn-TXnp4 proc information @param eNB_id Index of eNB @param subframe Index of subframe @param b Pointer to PUCCH payload (b[0],b[1]) @@ -457,6 +462,7 @@ TDD, this routine computes the procedure described in Section 10.1 of 36.213 (th @param n1_pucch3 Pointer to n1_pucch3 */ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, uint8_t UE_id, int16_t *n1_pucch0, int16_t *n1_pucch1, @@ -467,6 +473,7 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB, /*! \brief This function retrieves the harq_pid of the corresponding DLSCH process and updates the error statistics of the DLSCH based on the received ACK info from UE along with the round index. It also performs the fine-grain rate-adaptation based on the error statistics derived from the ACK/NAK process. @param UE_id Local UE index on which to act @param phy_vars_eNB Pointer to eNB variables on which to act + @param proc Pointer to RXn-TXnp4 proc information @param pusch_flag Indication that feedback came from PUSCH @param pucch_payload Resulting payload from pucch @param pucch_sel Selection of n1_pucch0 or n1_pucch1 (TDD specific) @@ -474,6 +481,7 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB, */ void process_HARQ_feedback(uint8_t UE_id, PHY_VARS_eNB *phy_vars_eNB, + eNB_rxtx_proc_t *proc, uint8_t pusch_flag, uint8_t *pucch_payload, uint8_t pucch_sel, diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c index 564a7951c6..b7f2e57f7c 100644 --- a/openair1/SCHED/phy_mac_stub.c +++ b/openair1/SCHED/phy_mac_stub.c @@ -48,7 +48,7 @@ #include "SCHED/phy_procedures_emos.h" #endif -void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) +void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) { @@ -57,7 +57,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) uint32_t rballoc = 0x7FFF; //uint32_t rballoc2 = 0x000F; - int subframe = eNB->proc.subframe_tx; + int subframe = proc->subframe_tx; LTE_eNB_DLSCH_t *DLSCH_ptr = eNB->dlsch[0][0]; @@ -89,7 +89,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rv = 1; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->mcs = 1; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0; @@ -100,7 +100,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1; ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1; ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1; ((DCI1A_1_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0; @@ -117,7 +117,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->rv = 1; ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->mcs = 1; ((DCI1A_5MHz_FDD_t*)&bcch_pdu)->harq_pid = 0; @@ -128,7 +128,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->type = 1; ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1; ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1; ((DCI1A_5MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0; @@ -144,7 +144,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->rv = 1; ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->mcs = 1; ((DCI1A_10MHz_FDD_t*)&bcch_pdu)->harq_pid = 0; @@ -155,7 +155,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->type = 1; ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1; ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1; ((DCI1A_10MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; @@ -171,7 +171,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rv = 1; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->mcs = 1; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->harq_pid = 0; @@ -182,7 +182,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->type = 1; ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); - ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->ndi = proc->frame_tx&1; ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->rv = 1; ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->mcs = 1; ((DCI1A_20MHz_TDD_1_6_t*)&bcch_pdu)->harq_pid = 0; @@ -236,7 +236,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t)); @@ -267,7 +267,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_5MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_5MHz_TDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t)); @@ -303,7 +303,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t)); @@ -334,7 +334,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_10MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_10MHz_TDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_TDD_t)); @@ -369,7 +369,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t)); @@ -400,7 +400,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; //((DCI1_20MHz_TDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = eNB->proc.frame_tx&1; + ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->ndi = proc->frame_tx&1; ((DCI1_20MHz_TDD_t *)&dlsch_pdu)->rv = 0; memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_TDD_t)); @@ -437,10 +437,10 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tpmi = 0; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv1 = 0; - ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1 = eNB->proc.frame_tx&1; + ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi1 = proc->frame_tx&1; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs1 = eNB->target_ue_dl_mcs; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->rv2 = 0; - ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2 = eNB->proc.frame_tx&1; + ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->ndi2 = proc->frame_tx&1; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->mcs2 = eNB->target_ue_dl_mcs; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->tb_swap = 0; ((DCI2_5MHz_2A_FDD_t*) (&DCI_pdu->dci_alloc[0].dci_pdu))->harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; @@ -459,7 +459,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) DLSCH_alloc_pdu1E.tpmi = 5; //5=use feedback DLSCH_alloc_pdu1E.rv = 0; - DLSCH_alloc_pdu1E.ndi = eNB->proc.frame_tx&1; + DLSCH_alloc_pdu1E.ndi = proc->frame_tx&1; //DLSCH_alloc_pdu1E.mcs = cqi_to_mcs[eNB->eNB_UE_stats->DL_cqi[0]]; //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28); DLSCH_alloc_pdu1E.mcs = eNB->target_ue_dl_mcs; @@ -482,7 +482,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) //DLSCH_alloc_pdu1E.mcs = eNB->target_ue_dl_mcs; //DLSCH_alloc_pdu1E.mcs = (unsigned char) (taus()%28); //DLSCH_alloc_pdu1E.mcs = (unsigned char) ((eNB->frame%1024)%28); - DLSCH_alloc_pdu1E.mcs = (unsigned char) (((eNB->proc.frame_tx%1024)/3)%28); + DLSCH_alloc_pdu1E.mcs = (unsigned char) (((proc->frame_tx%1024)/3)%28); eNB->UE_stats[1].dlsch_mcs1 = DLSCH_alloc_pdu1E.mcs; memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&DLSCH_alloc_pdu1E,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t)); @@ -533,7 +533,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) UL_alloc_pdu.hopping = 0; UL_alloc_pdu.rballoc = computeRIV(25,2,eNB->ue_ul_nb_rb); UL_alloc_pdu.mcs = eNB->target_ue_ul_mcs; - UL_alloc_pdu.ndi = eNB->proc.frame_tx&1; + UL_alloc_pdu.ndi = proc->frame_tx&1; UL_alloc_pdu.TPC = 0; UL_alloc_pdu.cshift = 0; UL_alloc_pdu.dai = 0; @@ -555,7 +555,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB) else UL_alloc_pdu.rballoc = computeRIV(25,0,eNB->ue_ul_nb_rb); UL_alloc_pdu.mcs = eNB->target_ue_ul_mcs; - UL_alloc_pdu.ndi = eNB->proc.frame_tx&1; + UL_alloc_pdu.ndi = proc->frame_tx&1; UL_alloc_pdu.TPC = 0; if ((cooperation_flag==0) || (cooperation_flag==1)) UL_alloc_pdu.cshift = 0; diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index cfcec35460..9d43f21106 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -101,10 +101,9 @@ extern uint8_t smbv_frame_cnt; extern int rx_sig_fifo; #endif -uint8_t is_SR_subframe(PHY_VARS_eNB *eNB,uint8_t UE_id) +uint8_t is_SR_subframe(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id) { - eNB_proc_t *proc = &eNB->proc; const int subframe = proc->subframe_rx; const int frame = proc->frame_rx; @@ -339,10 +338,9 @@ void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *eNB) -void phy_procedures_eNB_S_RX(PHY_VARS_eNB *eNB,uint8_t abstraction_flag,relaying_type_t r_type) +void phy_procedures_eNB_S_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t abstraction_flag,relaying_type_t r_type) { UNUSED(r_type); - eNB_proc_t *proc = &eNB->proc; int subframe = proc->subframe_rx; #ifdef DEBUG_PHY_PROC @@ -435,14 +433,13 @@ int QPSK2[4]= {AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),( unsigned int taus(void); -void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int abstraction_flag,relaying_type_t r_type) { +void pmch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,PHY_VARS_RN *rn, int abstraction_flag,relaying_type_t r_type) { #ifdef Rel10 MCH_PDU *mch_pduP; MCH_PDU mch_pdu; // uint8_t sync_area=255; #endif - eNB_proc_t *proc = &eNB->proc; int subframe = proc->subframe_tx; if (abstraction_flag==0) { @@ -508,7 +505,7 @@ void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int abstraction_flag,rel if (mch_pduP) { fill_eNB_dlsch_MCH(eNB,mch_pduP->mcs,1,0, abstraction_flag); // Generate PMCH - generate_mch(eNB,(uint8_t*)mch_pduP->payload,abstraction_flag); + generate_mch(eNB,proc,(uint8_t*)mch_pduP->payload,abstraction_flag); } else { LOG_D(PHY,"[eNB/RN] Frame %d subframe %d: MCH not generated \n",proc->frame_tx,subframe); } @@ -516,12 +513,11 @@ void pmch_procedures(PHY_VARS_eNB *eNB,PHY_VARS_RN *rn, int abstraction_flag,rel #endif } -void common_signal_procedures (PHY_VARS_eNB *eNB,int abstraction_flag) { +void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int abstraction_flag) { LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; int **txdataF = eNB->common_vars.txdataF[0]; uint8_t *pbch_pdu=&eNB->pbch_pdu[0]; - eNB_proc_t *proc = &eNB->proc; int subframe = proc->subframe_tx; int frame = proc->frame_tx; @@ -703,10 +699,9 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,int abstraction_flag) { } -void generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) { +void generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,const int UE_id) { LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - eNB_proc_t *proc = &eNB->proc; int frame = proc->frame_tx; int subframe = proc->subframe_tx; @@ -839,11 +834,10 @@ void generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const in } -void generate_eNB_ulsch_params(PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const int UE_id) { +void generate_eNB_ulsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,const int UE_id) { int harq_pid; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; - eNB_proc_t *proc = &eNB->proc; int frame = proc->frame_tx; int subframe = proc->subframe_tx; @@ -862,6 +856,7 @@ void generate_eNB_ulsch_params(PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const in 1<L); generate_eNB_ulsch_params_from_dci(eNB, + proc, &dci_alloc->dci_pdu[0], dci_alloc->rnti, format0, @@ -904,9 +899,8 @@ void generate_eNB_ulsch_params(PHY_VARS_eNB *eNB,DCI_ALLOC_t *dci_alloc,const in } -void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch1,LTE_eNB_UE_stats *ue_stats,int ra_flag,int num_pdcch_symbols,int abstraction_flag) { +void pdsch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t *dlsch1,LTE_eNB_UE_stats *ue_stats,int ra_flag,int num_pdcch_symbols,int abstraction_flag) { - eNB_proc_t *proc = &eNB->proc; int frame=proc->frame_tx; int subframe=proc->subframe_tx; int harq_pid = dlsch->current_harq_pid; @@ -1112,12 +1106,12 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,LTE_eNB_DLSCH_t *dlsch, LTE_eNB_DLSCH_t } void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t abstraction_flag, relaying_type_t r_type, PHY_VARS_RN *rn) { UNUSED(rn); - eNB_proc_t *proc = &eNB->proc; int frame=proc->frame_tx; int subframe=proc->subframe_tx; // uint16_t input_buffer_length; @@ -1177,11 +1171,11 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, } if (is_pmch_subframe(frame,subframe,fp)) { - pmch_procedures(eNB,rn,abstraction_flag,r_type); + pmch_procedures(eNB,proc,rn,abstraction_flag,r_type); } else { // this is not a pmch subframe, so generate PSS/SSS/PBCH - common_signal_procedures(eNB,abstraction_flag); + common_signal_procedures(eNB,proc,abstraction_flag); } #if defined(SMBV) @@ -1207,7 +1201,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, #ifdef EMOS_CHANNEL fill_dci_emos(DCI_pdu,eNB); #else - fill_dci(DCI_pdu,eNB); + fill_dci(DCI_pdu,eNB,proc); #endif } @@ -1265,7 +1259,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, } else UE_id=0; - generate_eNB_dlsch_params(eNB,dci_alloc,UE_id); + generate_eNB_dlsch_params(eNB,proc,dci_alloc,UE_id); } @@ -1287,7 +1281,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",eNB->Mod_id,frame,dci_alloc->rnti); mac_xface->macphy_exit("FATAL\n"); } - generate_eNB_ulsch_params(eNB,dci_alloc,UE_id); + generate_eNB_ulsch_params(eNB,proc,dci_alloc,UE_id); } } @@ -1335,7 +1329,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (eNB->dlsch_SI->active == 1) { - pdsch_procedures(eNB,eNB->dlsch_SI,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,0,num_pdcch_symbols,abstraction_flag); + pdsch_procedures(eNB,proc,eNB->dlsch_SI,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,0,num_pdcch_symbols,abstraction_flag); #if defined(SMBV) @@ -1368,7 +1362,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, eNB->ulsch[(uint32_t)UE_id]->Msg3_frame, eNB->ulsch[(uint32_t)UE_id]->Msg3_subframe); - pdsch_procedures(eNB,eNB->dlsch_ra,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,1,num_pdcch_symbols,abstraction_flag); + pdsch_procedures(eNB,proc,eNB->dlsch_ra,(LTE_eNB_DLSCH_t*)NULL,(LTE_eNB_UE_stats*)NULL,1,num_pdcch_symbols,abstraction_flag); eNB->dlsch_ra->active = 0; @@ -1381,7 +1375,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, (eNB->dlsch[(uint8_t)UE_id][0]->rnti>0)&& (eNB->dlsch[(uint8_t)UE_id][0]->active == 1)) { - pdsch_procedures(eNB,eNB->dlsch[(uint8_t)UE_id][0],eNB->dlsch[(uint8_t)UE_id][1],&eNB->UE_stats[(uint32_t)UE_id],0,num_pdcch_symbols,abstraction_flag); + pdsch_procedures(eNB,proc,eNB->dlsch[(uint8_t)UE_id][0],eNB->dlsch[(uint8_t)UE_id][1],&eNB->UE_stats[(uint32_t)UE_id],0,num_pdcch_symbols,abstraction_flag); } @@ -1402,6 +1396,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, if (is_phich_subframe(fp,subframe)) { generate_phich_top(eNB, + proc, AMP, 0, abstraction_flag); @@ -1437,10 +1432,9 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, } -void process_Msg3(PHY_VARS_eNB *eNB,uint8_t UE_id, uint8_t harq_pid) +void process_Msg3(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t UE_id, uint8_t harq_pid) { // this prepares the demodulation of the first PUSCH of a new user, containing Msg3 - eNB_proc_t *proc = &eNB->proc; int subframe = proc->subframe_rx; int frame = proc->frame_rx; @@ -1475,13 +1469,13 @@ void process_Msg3(PHY_VARS_eNB *eNB,uint8_t UE_id, uint8_t harq_pid) void process_HARQ_feedback(uint8_t UE_id, PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t pusch_flag, uint8_t *pucch_payload, uint8_t pucch_sel, uint8_t SR_payload) { - eNB_proc_t *proc = &eNB->proc; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; uint8_t dl_harq_pid[8],dlsch_ACK[8],dl_subframe; LTE_eNB_DLSCH_t *dlsch = eNB->dlsch[(uint32_t)UE_id][0]; @@ -1745,6 +1739,7 @@ void process_HARQ_feedback(uint8_t UE_id, } void get_n1_pucch_eNB(PHY_VARS_eNB *eNB, + eNB_rxtx_proc_t *proc, uint8_t UE_id, int16_t *n1_pucch0, int16_t *n1_pucch1, @@ -1752,7 +1747,6 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *eNB, int16_t *n1_pucch3) { - eNB_proc_t *proc = &eNB->proc; LTE_DL_FRAME_PARMS *frame_parms=&eNB->frame_parms; uint8_t nCCE0,nCCE1; int sf; @@ -1892,9 +1886,8 @@ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t abstraction_flag) uint16_t preamble_max,preamble_energy_max; uint16_t i; int8_t UE_id; - eNB_proc_t *proc = &eNB->proc; - int subframe = proc->subframe_rx; - int frame = proc->frame_rx; + int subframe = eNB->proc.subframe_prach; + int frame = eNB->proc.frame_prach; uint8_t CC_id = eNB->CC_id; memset(&preamble_energy_list[0],0,64*sizeof(uint16_t)); @@ -2002,7 +1995,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,uint8_t abstraction_flag) } } -void pucch_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) { +void pucch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_pid,const uint8_t abstraction_flag) { LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; uint8_t SR_payload = 0,*pucch_payload=NULL,pucch_payload0[2]= {0,0},pucch_payload1[2]= {0,0}; @@ -2012,7 +2005,6 @@ void pucch_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abs int32_t metric0=0,metric1=0,metric0_SR=0; ANFBmode_t bundling_flag; PUCCH_FMT_t format; - eNB_proc_t *proc = &eNB->proc; const int subframe = proc->subframe_rx; const int frame = proc->frame_rx; @@ -2021,159 +2013,160 @@ void pucch_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abs (eNB->ulsch[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag==0)) { // check SR availability - do_SR = is_SR_subframe(eNB,UE_id); - // do_SR = 0; - + do_SR = is_SR_subframe(eNB,proc,UE_id); + // do_SR = 0; + // Now ACK/NAK // First check subframe_tx flag for earlier subframes - get_n1_pucch_eNB(eNB, - UE_id, - &n1_pucch0, - &n1_pucch1, - &n1_pucch2, - &n1_pucch3); + get_n1_pucch_eNB(eNB, + proc, + UE_id, + &n1_pucch0, + &n1_pucch1, + &n1_pucch2, + &n1_pucch3); + + LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d\n", + eNB->Mod_id,eNB->dlsch[UE_id][0]->rnti, + frame,subframe, + n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR); + + if ((n1_pucch0==-1) && (n1_pucch1==-1) && (do_SR==0)) { // no TX PDSCH that have to be checked and no SR for this UE_id + } else { + // otherwise we have some PUCCH detection to do + + // Null out PUCCH PRBs for noise measurement + switch(fp->N_RB_UL) { + case 6: + eNB->rb_mask_ul[0] |= (0x1 | (1<<5)); //position 5 + break; + case 15: + eNB->rb_mask_ul[0] |= (0x1 | (1<<14)); // position 14 + break; + case 25: + eNB->rb_mask_ul[0] |= (0x1 | (1<<24)); // position 24 + break; + case 50: + eNB->rb_mask_ul[0] |= 0x1; + eNB->rb_mask_ul[1] |= (1<<17); // position 49 (49-32) + break; + case 75: + eNB->rb_mask_ul[0] |= 0x1; + eNB->rb_mask_ul[2] |= (1<<10); // position 74 (74-64) + break; + case 100: + eNB->rb_mask_ul[0] |= 0x1; + eNB->rb_mask_ul[3] |= (1<<3); // position 99 (99-96) + break; + default: + LOG_E(PHY,"Unknown number for N_RB_UL %d\n",fp->N_RB_UL); + break; + } + + if (do_SR == 1) { + eNB->UE_stats[UE_id].sr_total++; - LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d, subframe %d Checking for PUCCH (%d,%d,%d,%d) SR %d\n", - eNB->Mod_id,eNB->dlsch[UE_id][0]->rnti, - frame,subframe, - n1_pucch0,n1_pucch1,n1_pucch2,n1_pucch3,do_SR); - - if ((n1_pucch0==-1) && (n1_pucch1==-1) && (do_SR==0)) { // no TX PDSCH that have to be checked and no SR for this UE_id - } else { - // otherwise we have some PUCCH detection to do - - // Null out PUCCH PRBs for noise measurement - switch(fp->N_RB_UL) { - case 6: - eNB->rb_mask_ul[0] |= (0x1 | (1<<5)); //position 5 - break; - case 15: - eNB->rb_mask_ul[0] |= (0x1 | (1<<14)); // position 14 - break; - case 25: - eNB->rb_mask_ul[0] |= (0x1 | (1<<24)); // position 24 - break; - case 50: - eNB->rb_mask_ul[0] |= 0x1; - eNB->rb_mask_ul[1] |= (1<<17); // position 49 (49-32) - break; - case 75: - eNB->rb_mask_ul[0] |= 0x1; - eNB->rb_mask_ul[2] |= (1<<10); // position 74 (74-64) - break; - case 100: - eNB->rb_mask_ul[0] |= 0x1; - eNB->rb_mask_ul[3] |= (1<<3); // position 99 (99-96) - break; - default: - LOG_E(PHY,"Unknown number for N_RB_UL %d\n",fp->N_RB_UL); - break; + if (abstraction_flag == 0) + metric0_SR = rx_pucch(eNB, + pucch_format1, + UE_id, + eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex, + 0, // n2_pucch + 0, // shortened format, should be use_srs flag, later + &SR_payload, + subframe, + PUCCH1_THRES); + +#ifdef PHY_ABSTRACTION + else { + metric0_SR = rx_pucch_emul(eNB, + UE_id, + pucch_format1, + 0, + &SR_payload); + LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",eNB->Mod_id, + eNB->ulsch[UE_id]->rnti,frame,subframe,SR_payload,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex); } - - if (do_SR == 1) { - eNB->UE_stats[UE_id].sr_total++; - - if (abstraction_flag == 0) - metric0_SR = rx_pucch(eNB, - pucch_format1, - UE_id, - eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex, - 0, // n2_pucch - 0, // shortened format, should be use_srs flag, later - &SR_payload, - subframe, - PUCCH1_THRES); - -#ifdef PHY_ABSTRACTION - else { - metric0_SR = rx_pucch_emul(eNB, - UE_id, - pucch_format1, - 0, - &SR_payload); - LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR (UE SR %d/%d)\n",eNB->Mod_id, - eNB->ulsch[UE_id]->rnti,frame,subframe,SR_payload,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex); - } - + #endif - - if (SR_payload == 1) { - LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id, - eNB->ulsch[UE_id]->rnti,frame,subframe); - eNB->UE_stats[UE_id].sr_received++; - - if (eNB->first_sr[UE_id] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4 - /* is this test necessary? */ - if (eNB->dlsch[UE_id][0]->harq_processes[0]->status != SCH_IDLE) - put_harq_pid_in_freelist(eNB->dlsch[UE_id][0], 0); - eNB->first_sr[UE_id] = 0; - eNB->dlsch[UE_id][0]->harq_processes[0]->round=0; - eNB->dlsch[UE_id][0]->harq_processes[0]->status=SCH_IDLE; - LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n", - eNB->Mod_id, - eNB->ulsch[UE_id]->rnti,frame,subframe); - } - - if (eNB->mac_enabled==1) { - mac_xface->SR_indication(eNB->Mod_id, - eNB->CC_id, - frame, - eNB->dlsch[UE_id][0]->rnti,subframe); - } - } - }// do_SR==1 - - if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR - } else if (fp->frame_type==FDD) { // FDD - // if SR was detected, use the n1_pucch from SR, else use n1_pucch0 - // n1_pucch0 = (SR_payload==1) ? eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex:n1_pucch0; - - LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex,SR_payload); - - if (abstraction_flag == 0) { - - - - metric0 = rx_pucch(eNB, - pucch_format1a, - UE_id, - (uint16_t)n1_pucch0, - 0, //n2_pucch - 0, // shortened format - pucch_payload0, - subframe, - PUCCH1a_THRES); - - if (metric0 < metric0_SR) - metric0=rx_pucch(eNB, - pucch_format1a, - UE_id, - eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex, - 0, //n2_pucch - 0, // shortened format - pucch_payload0, - subframe, - PUCCH1a_THRES); + + if (SR_payload == 1) { + LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id, + eNB->ulsch[UE_id]->rnti,frame,subframe); + eNB->UE_stats[UE_id].sr_received++; + + if (eNB->first_sr[UE_id] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4 + /* is this test necessary? */ + if (eNB->dlsch[UE_id][0]->harq_processes[0]->status != SCH_IDLE) + put_harq_pid_in_freelist(eNB->dlsch[UE_id][0], 0); + eNB->first_sr[UE_id] = 0; + eNB->dlsch[UE_id][0]->harq_processes[0]->round=0; + eNB->dlsch[UE_id][0]->harq_processes[0]->status=SCH_IDLE; + LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n", + eNB->Mod_id, + eNB->ulsch[UE_id]->rnti,frame,subframe); } - else { + + if (eNB->mac_enabled==1) { + mac_xface->SR_indication(eNB->Mod_id, + eNB->CC_id, + frame, + eNB->dlsch[UE_id][0]->rnti,subframe); + } + } + }// do_SR==1 + + if ((n1_pucch0==-1) && (n1_pucch1==-1)) { // just check for SR + } else if (fp->frame_type==FDD) { // FDD + // if SR was detected, use the n1_pucch from SR, else use n1_pucch0 + // n1_pucch0 = (SR_payload==1) ? eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex:n1_pucch0; + + LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex,SR_payload); + + if (abstraction_flag == 0) { + + + + metric0 = rx_pucch(eNB, + pucch_format1a, + UE_id, + (uint16_t)n1_pucch0, + 0, //n2_pucch + 0, // shortened format + pucch_payload0, + subframe, + PUCCH1a_THRES); + + if (metric0 < metric0_SR) + metric0=rx_pucch(eNB, + pucch_format1a, + UE_id, + eNB->scheduling_request_config[UE_id].sr_PUCCH_ResourceIndex, + 0, //n2_pucch + 0, // shortened format + pucch_payload0, + subframe, + PUCCH1a_THRES); + } + else { #ifdef PHY_ABSTRACTION - metric0 = rx_pucch_emul(eNB,UE_id, - pucch_format1a, - 0, - pucch_payload0, - subframe); + metric0 = rx_pucch_emul(eNB,UE_id, + pucch_format1a, + 0, + pucch_payload0, + subframe); #endif - } - + } + #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n", - eNB->Mod_id, - eNB->dlsch[UE_id][0]->rnti, - frame,subframe, - pucch_payload0[0],metric0); + LOG_D(PHY,"[eNB %d][PDSCH %x] Frame %d subframe %d pucch1a (FDD) payload %d (metric %d)\n", + eNB->Mod_id, + eNB->dlsch[UE_id][0]->rnti, + frame,subframe, + pucch_payload0[0],metric0); #endif - - process_HARQ_feedback(UE_id,eNB, + + process_HARQ_feedback(UE_id,eNB,proc, 0,// pusch_flag pucch_payload0, 2, @@ -2304,7 +2297,7 @@ void pucch_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abs frame,subframe, metric0,metric1,pucch_sel,pucch_payload[0],pucch_payload[1]); #endif - process_HARQ_feedback(UE_id,eNB, + process_HARQ_feedback(UE_id,eNB,proc, 0,// pusch_flag pucch_payload, pucch_sel, @@ -2315,9 +2308,8 @@ void pucch_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abs } } -void cba_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstraction_flag) { +void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_pid,const uint8_t abstraction_flag) { - eNB_proc_t *proc = &eNB->proc; uint8_t access_mode; int num_active_cba_groups; const int subframe = proc->subframe_rx; @@ -2342,7 +2334,7 @@ void cba_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstr #endif if (abstraction_flag==0) { - rx_ulsch(eNB, + rx_ulsch(eNB,proc, eNB->UE_stats[UE_id].sector, // this is the effective sector id UE_id, eNB->ulsch, @@ -2351,7 +2343,7 @@ void cba_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstr #ifdef PHY_ABSTRACTION else { - rx_ulsch_emul(eNB, + rx_ulsch_emul(eNB,proc, subframe, eNB->UE_stats[UE_id].sector, // this is the effective sector id UE_id); @@ -2360,7 +2352,7 @@ void cba_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstr #endif if (abstraction_flag == 0) { - ret = ulsch_decoding(eNB, + ret = ulsch_decoding(eNB,proc, UE_id, 0, // control_only_flag eNB->ulsch[UE_id]->harq_processes[harq_pid]->V_UL_DAI, @@ -2479,11 +2471,11 @@ void cba_procedures(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,const uint8_t abstr void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_flag) { - eNB_proc_t *proc = &eNB->proc; int i,l; LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms; void *rxp[fp->nb_antennas_rx]; unsigned int rxs; + eNB_proc_t *proc = &eNB->proc; int subframe = proc->subframe_rx; int frame = proc->frame_rx; @@ -2617,11 +2609,10 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl } } -void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_flag,const relaying_type_t r_type) +void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const uint8_t abstraction_flag,const relaying_type_t r_type) { //RX processing for ue-specific resources (i UNUSED(r_type); - eNB_proc_t *proc = &eNB->proc; uint32_t l, ret=0,i,j,k; uint32_t harq_pid, harq_idx, round; uint8_t nPRS; @@ -2683,7 +2674,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl // Do PUCCH processing first for (i=0; imac_enabled==1) { if (eNB->UE_stats[i].mode == RA_RESPONSE) { - process_Msg3(eNB,i,harq_pid); + process_Msg3(eNB,proc,i,harq_pid); } } @@ -2772,7 +2763,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl start_meas(&eNB->ulsch_demodulation_stats); if (abstraction_flag==0) { - rx_ulsch(eNB, + rx_ulsch(eNB,proc, eNB->UE_stats[i].sector, // this is the effective sector id i, eNB->ulsch, @@ -2781,7 +2772,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl #ifdef PHY_ABSTRACTION else { - rx_ulsch_emul(eNB, + rx_ulsch_emul(eNB,proc, subframe, eNB->UE_stats[i].sector, // this is the effective sector id i); @@ -2794,7 +2785,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl start_meas(&eNB->ulsch_decoding_stats); if (abstraction_flag == 0) { - ret = ulsch_decoding(eNB, + ret = ulsch_decoding(eNB,proc, i, 0, // control_only_flag eNB->ulsch[i]->harq_processes[harq_pid]->V_UL_DAI, @@ -2803,7 +2794,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl #ifdef PHY_ABSTRACTION else { - ret = ulsch_decoding_emul(eNB, + ret = ulsch_decoding_emul(eNB,proc, i, &rnti); } @@ -3120,7 +3111,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl i); #endif process_HARQ_feedback(i, - eNB, + eNB,proc, 1, // pusch_flag 0, 0, @@ -3183,7 +3174,7 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,const uint8_t abstraction_fl } // CBA (non-LTE) - cba_procedures(eNB,i,harq_pid,abstraction_flag); + cba_procedures(eNB,proc,i,harq_pid,abstraction_flag); } // loop i=0 ... NUMBER_OF_UE_MAX-1 if (abstraction_flag == 0) { diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index 7a2a747741..b6b223bd6a 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -786,7 +786,7 @@ rrc_get_estimated_ue_distance( const int CC_idP, const uint8_t loc_typeP); -void fill_dci(DCI_PDU *DCI_pdu, PHY_VARS_eNB *phy_vars_eNB); +void fill_dci(DCI_PDU *DCI_pdu, PHY_VARS_eNB *phy_vars_eNB,eNB_rxtx_proc_t *proc); #endif /** @}*/ diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 9e855696c4..3f8ddd89ef 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -183,26 +183,10 @@ const char* eurecomFunctionsNames[] = { "rt_sleep", "trx_read", "trx_write", - "eNB_thread_tx0", - "eNB_thread_rx0", - "eNB_thread_tx1", - "eNB_thread_rx1", - "eNB_thread_tx2", - "eNB_thread_rx2", - "eNB_thread_tx3", - "eNB_thread_rx3", - "eNB_thread_tx4", - "eNB_thread_rx4", - "eNB_thread_tx5", - "eNB_thread_rx5", - "eNB_thread_tx6", - "eNB_thread_rx6", - "eNB_thread_tx7", - "eNB_thread_rx7", - "eNB_thread_tx8", - "eNB_thread_rx8", - "eNB_thread_tx9", - "eNB_thread_rx9", + "eNB_thread_rxtx0", + "eNB_thread_rxtx1", + "eNB_thread_rx", + "eNB_thread_prach", "ue_thread_tx", "ue_thread_rx", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 192bebd976..11401f17af 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -157,26 +157,10 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_RT_SLEEP=0, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX1, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX1, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX2, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX2, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX3, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX3, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX4, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX4, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX5, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX5, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX6, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX6, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX7, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX7, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX8, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX8, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX9, - VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX9, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX1, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_PRACH, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 6290953e8b..daeca00f42 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -139,7 +139,7 @@ extern int sync_var; time_stats_t softmodem_stats_mt; // main thread time_stats_t softmodem_stats_hw; // hw acquisition -time_stats_t softmodem_stats_tx_sf; // total tx time +time_stats_t softmodem_stats_rxtx_sf; // total tx time time_stats_t softmodem_stats_rx_sf; // total rx time int32_t **rxdata; int32_t **txdata; @@ -290,16 +290,15 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) } /*! - * \brief The transmit thread of eNB. - * \ref NUM_ENB_THREADS threads of this type are active at the same time. + * \brief The RX UE-specific and TX thread of eNB. * \param param is a \ref eNB_proc_t structure which contains the info what to process. * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void* eNB_thread_tx( void* param ) +static void* eNB_thread_rxtx( void* param ) { - static int eNB_thread_tx_status; + static int eNB_thread_rxtx_status; - eNB_proc_t *proc = (eNB_proc_t*)param; + eNB_rxtx_proc_t *proc = (eNB_rxtx_proc_t*)param; FILE *tx_time_file = NULL; char tx_time_name[101]; void *txp[PHY_vars_eNB_g[0][0]->frame_parms.nb_antennas_tx]; @@ -309,7 +308,7 @@ static void* eNB_thread_tx( void* param ) tx_time_file = fopen(tx_time_name,"w"); } // set default return value - eNB_thread_tx_status = 0; + eNB_thread_rxtx_status = 0; MSC_START_USE(); @@ -332,10 +331,10 @@ static void* eNB_thread_tx( void* param ) if (sched_setattr(0, &attr, flags) < 0 ) { perror("[SCHED] eNB tx thread: sched_setattr failed\n"); - return &eNB_thread_tx_status; + return &eNB_thread_rxtx_status; } - LOG_I( HW, "[SCHED] eNB TX deadline thread (TID %ld) started on CPU %d\n", gettid(), sched_getcpu() ); + LOG_I( HW, "[SCHED] eNB RXn-TXnp4 deadline thread (TID %ld) started on CPU %d\n", gettid(), sched_getcpu() ); #else //LOW_LATENCY int policy, s, j; @@ -414,31 +413,40 @@ static void* eNB_thread_tx( void* param ) while (!oai_exit) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 ); - if (pthread_mutex_lock(&proc->mutex_tx) != 0) { - LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX\n"); + if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { + LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB RXn-TXnp4\n"); exit_fun("nothing to add"); break; } - while (proc->instance_cnt_tx < 0) { + while (proc->instance_cnt_rxtx < 0) { // most of the time the thread is waiting here - // proc->instance_cnt_tx is -1 - pthread_cond_wait( &proc->cond_tx, &proc->mutex_tx ); // this unlocks mutex_tx while waiting and then locks it again + // proc->instance_cnt_rxtx is -1 + pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx ); // this unlocks mutex_rxtx while waiting and then locks it again } - if (pthread_mutex_unlock(&proc->mutex_tx) != 0) { + if (pthread_mutex_unlock(&proc->mutex_rxtx) != 0) { LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX\n"); exit_fun("nothing to add"); break; } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0, 1 ); - start_meas( &softmodem_stats_tx_sf ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 1 ); + start_meas( &softmodem_stats_rxtx_sf ); if (oai_exit) break; + // UE-specific RX processing for subframe n + if (PHY_vars_eNB_g[0][proc->CC_id]->node_function != NGFI_RRU_IF4) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 ); + // this is the ue-specific processing for the subframe and can be multi-threaded later + phy_procedures_eNB_uespec_RX(PHY_vars_eNB_g[0][proc->CC_id], proc, 0, no_relay ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 0 ); + } + + // TX processing for subframe n+4 if (((PHY_vars_eNB_g[0][proc->CC_id]->frame_parms.frame_type == TDD) && ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->frame_parms,proc->subframe_tx) == SF_DL) || (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->frame_parms,proc->subframe_tx) == SF_S))) || @@ -470,7 +478,7 @@ static void* eNB_thread_tx( void* param ) if (oai_exit) break; if (PHY_vars_eNB_g[0][proc->CC_id]->node_function != NGFI_RRU_IF4) { - phy_procedures_eNB_TX(PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay, NULL ); + phy_procedures_eNB_TX(PHY_vars_eNB_g[0][proc->CC_id], proc, 0, no_relay, NULL ); /* we're done, let the next one proceed */ if (pthread_mutex_lock(&sync_phy_proc.mutex_phy_proc_tx) != 0) { @@ -531,42 +539,42 @@ static void* eNB_thread_tx( void* param ) } - if (pthread_mutex_lock(&proc->mutex_tx) != 0) { + if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][eNB] error locking mutex for eNB TX proc\n"); exit_fun("nothing to add"); break; } - proc->instance_cnt_tx--; + proc->instance_cnt_rxtx--; - if (pthread_mutex_unlock(&proc->mutex_tx) != 0) { + if (pthread_mutex_unlock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][eNB] error unlocking mutex for eNB TX proc\n"); exit_fun("nothing to add"); break; } - stop_meas( &softmodem_stats_tx_sf ); + stop_meas( &softmodem_stats_rxtx_sf ); #ifdef LOWLATENCY if (opp_enabled){ - if(softmodem_stats_tx_sf.diff_now/(cpuf) > attr.sched_runtime){ - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, (softmodem_stats_tx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0); + if(softmodem_stats_rxtx_sf.diff_now/(cpuf) > attr.sched_runtime){ + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, (softmodem_stats_rxtx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0); } } #endif - print_meas_now(&softmodem_stats_tx_sf,"eNB_TX_SF",tx_time_file); + print_meas_now(&softmodem_stats_rxtx_sf,"eNB_TX_SF",tx_time_file); } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 ); #ifdef DEBUG_THREADS printf( "Exiting eNB thread TX\n"); #endif - eNB_thread_tx_status = 0; - return &eNB_thread_tx_status; + eNB_thread_rxtx_status = 0; + return &eNB_thread_rxtx_status; } #if defined(ENABLE_ITTI) @@ -592,12 +600,11 @@ static void wait_system_ready (char *message, volatile int *start_flag) #endif /*! - * \brief The receive thread of eNB. - * \ref NUM_ENB_THREADS threads of this type are active at the same time. + * \brief The RX common thread of eNB. * \param param is a \ref eNB_proc_t structure which contains the info what to process. * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void* eNB_thread_rx( void* param ) +static void* eNB_thread_rx_common( void* param ) { static int eNB_thread_rx_status; @@ -721,7 +728,7 @@ static void* eNB_thread_rx( void* param ) // wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe of TX and RX threads - printf( "waiting for sync (eNB_thread_rx)\n"); + printf( "waiting for sync (eNB_thread_rx_common)\n"); pthread_mutex_lock( &sync_mutex ); while (sync_var<0) @@ -739,7 +746,7 @@ static void* eNB_thread_rx( void* param ) while (!oai_exit) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX, 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON, 0 ); start_meas( &softmodem_stats_rx_sf ); @@ -753,67 +760,63 @@ static void* eNB_thread_rx( void* param ) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_COMMON, 0 ); - if (eNB->node_function != NGFI_RRU_IF4) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 ); - // this is the ue-specific processing for the subframe and can be multi-threaded later - phy_procedures_eNB_uespec_RX(eNB, 0, no_relay ); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 0 ); - } } + // choose even or odd thread for RXn-TXnp4 processing + eNB_rxtx_proc_t *proc_rxtx = &proc->proc_rxtx[proc->subframe_rx&1]; + // wake up TX for subframe n+4 // lock the TX mutex and make sure the thread is ready - if (pthread_mutex_lock(&proc->mutex_tx) != 0) { - LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)\n", proc->instance_cnt_tx ); - exit_fun( "error locking mutex_tx" ); + if (pthread_mutex_lock(&proc_rxtx->mutex_rxtx) != 0) { + LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB TX thread %d (IC %d)\n", proc_rxtx->instance_cnt_rxtx ); + exit_fun( "error locking mutex_rxtx" ); break; } - int cnt_tx = ++proc->instance_cnt_tx; + int cnt_rxtx = ++proc_rxtx->instance_cnt_rxtx; // We have just received and processed the common part of a subframe, say n. // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired // transmitted timestamp of the next TX slot (first). - // The last (TS_rx mod samples_per_frame) was n*samples_per_tti, + // The last (TS_rx mod samples_pexr_frame) was n*samples_per_tti, // we want to generate subframe (n+3), so TS_tx = TX_rx+3*samples_per_tti, // and proc->subframe_tx = proc->subframe_rx+3 - proc->timestamp_tx = proc->timestamp_rx + (4*fp->samples_per_tti); - proc->frame_tx = (proc->subframe_rx > 5) ? (proc->frame_rx+1)&1023 : proc->frame_rx; - proc->subframe_tx = (proc->subframe_rx + 4)%10; + proc_rxtx->timestamp_tx = proc->timestamp_rx + (4*fp->samples_per_tti); + proc_rxtx->frame_rx = proc->frame_rx; + proc_rxtx->subframe_rx = proc->subframe_rx; + proc_rxtx->frame_tx = (proc_rxtx->subframe_rx > 5) ? (proc_rxtx->frame_rx+1)&1023 : proc_rxtx->frame_rx; + proc_rxtx->subframe_tx = (proc_rxtx->subframe_rx + 4)%10; - pthread_mutex_unlock( &proc->mutex_tx ); + pthread_mutex_unlock( &proc_rxtx->mutex_rxtx ); - if (cnt_tx == 0){ + if (cnt_rxtx == 0){ // the thread was presumably waiting where it should and can now be woken up - if (pthread_cond_signal(&proc->cond_tx) != 0) { - LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB TX thread\n"); + if (pthread_cond_signal(&proc_rxtx->cond_rxtx) != 0) { + LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RXn-TXnp4 thread\n"); exit_fun( "ERROR pthread_cond_signal" ); break; } } else { - LOG_W( PHY,"[eNB] Frame %d, eNB TX thread busy!! (cnt_tx %i)\n", proc->frame_tx, cnt_tx ); + LOG_W( PHY,"[eNB] Frame %d, eNB RXn-TXnp4 thread busy!! (cnt_rxtx %i)\n", proc_rxtx->frame_tx, cnt_rxtx ); exit_fun( "TX thread busy" ); break; } - stop_meas( &softmodem_stats_rx_sf ); + stop_meas( &softmodem_stats_rxtx_sf ); #ifdef LOWLATENCY if (opp_enabled){ - if(softmodem_stats_rx_sf.diff_now/(cpuf) > attr.sched_runtime){ - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB, (softmodem_stats_rx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0); + if(softmodem_stats_rxtx_sf.diff_now/(cpuf) > attr.sched_runtime){ + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RXTX_ENB, (softmodem_stats_rxtx_sf.diff_now/cpuf - attr.sched_runtime)/1000000.0); } } #endif // LOWLATENCY print_meas_now(&softmodem_stats_rx_sf,"eNB_RX_SF", rx_time_file); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 ); } - //stop_meas( &softmodem_stats_rx_sf[proc->thread_index] ); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0, 0 ); - #ifdef DEBUG_THREADS - printf( "Exiting eNB thread RX\n"); + printf( "Exiting eNB thread RXn-TXnp4\n"); #endif eNB_thread_rx_status = 0; @@ -954,8 +957,8 @@ static void* eNB_thread_prach( void* param ) while (proc->instance_cnt_prach < 0) { // most of the time the thread is waiting here - // proc->instance_cnt_tx is -1 - pthread_cond_wait( &proc->cond_prach, &proc->mutex_prach ); // this unlocks mutex_tx while waiting and then locks it again + // proc->instance_cnt_prach is -1 + pthread_cond_wait( &proc->cond_prach, &proc->mutex_prach ); // this unlocks mutex_rxtx while waiting and then locks it again } if (pthread_mutex_unlock(&proc->mutex_prach) != 0) { @@ -1000,13 +1003,14 @@ void init_eNB_proc(void) int CC_id; PHY_VARS_eNB *eNB; eNB_proc_t *proc; + eNB_rxtx_proc_t *proc_rxtx; for (CC_id=0; CC_idproc; - + proc_rxtx = proc->proc_rxtx; #ifndef LOWLATENCY /* pthread_attr_init( &attr_eNB_proc_tx[CC_id][i] ); @@ -1018,9 +1022,12 @@ void init_eNB_proc(void) perror("[ENB_PROC_RX] setting thread stack size failed\n"); */ // set the kernel scheduling policy and priority - proc->sched_param_tx.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY; - pthread_attr_setschedparam (&proc->attr_tx, &proc->sched_param_tx); - pthread_attr_setschedpolicy (&proc->attr_tx, SCHED_FIFO); + proc_rxtx[0].sched_param_rxtx.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY; + pthread_attr_setschedparam (&proc_rxtx[0].attr_rxtx, &proc_rxtx[0].sched_param_rxtx); + pthread_attr_setschedpolicy (&proc_rxtx[0].attr_rxtx, SCHED_FIFO); + proc_rxtx[1].sched_param_rxtx.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; //OPENAIR_THREAD_PRIORITY; + pthread_attr_setschedparam (&proc_rxtx[1].attr_rxtx, &proc_rxtx[1].sched_param_rxtx); + pthread_attr_setschedpolicy (&proc_rxtx[1].attr_rxtx, SCHED_FIFO); proc->sched_param_rx.sched_priority = sched_get_priority_max(SCHED_FIFO); //OPENAIR_THREAD_PRIORITY; pthread_attr_setschedparam (&proc->attr_rx, &proc->sched_param_rx); @@ -1032,27 +1039,35 @@ void init_eNB_proc(void) printf("Setting OS scheduler to SCHED_FIFO for eNB [cc%d][thread%d] \n",CC_id, i); #endif - proc->instance_cnt_tx = -1; + proc_rxtx[0].instance_cnt_rxtx = -1; + proc_rxtx[1].instance_cnt_rxtx = -1; proc->instance_cnt_prach = -1; proc->CC_id = CC_id; proc->first_rx=1; - pthread_mutex_init( &proc->mutex_tx, NULL); - pthread_cond_init( &proc->cond_tx, NULL); + pthread_mutex_init( &proc_rxtx[0].mutex_rxtx, NULL); + pthread_mutex_init( &proc_rxtx[1].mutex_rxtx, NULL); + pthread_mutex_init( &proc->mutex_prach, NULL); + pthread_cond_init( &proc_rxtx[0].cond_rxtx, NULL); + pthread_cond_init( &proc_rxtx[1].cond_rxtx, NULL); pthread_cond_init( &proc->cond_prach, NULL); #ifndef LOWLATENCY - pthread_create( &proc->pthread_tx, &proc->attr_tx, eNB_thread_tx, &eNB->proc ); - pthread_create( &proc->pthread_rx, &proc->attr_rx, eNB_thread_rx, &eNB->proc ); + pthread_create( &proc_rxtx[0].pthread_rxtx, &proc_rxtx[0].attr_rxtx, eNB_thread_rxtx, &proc_rxtx[0] ); + pthread_create( &proc_rxtx[1].pthread_rxtx, &proc_rxtx[1].attr_rxtx, eNB_thread_rxtx, &proc_rxtx[1] ); + pthread_create( &proc->pthread_rx, &proc->attr_rx, eNB_thread_rx_common, &eNB->proc ); pthread_create( &proc->pthread_prach, &proc->attr_prach, eNB_thread_prach, &eNB->proc ); #else - pthread_create( &proc->pthread_tx, NULL, eNB_thread_tx, &eNB->proc ); - pthread_create( &proc->pthread_rx, NULL, eNB_thread_rx, &eNB->proc ); + pthread_create( &proc_rxtx[0].pthread_rxtx, NULL, eNB_thread_rxtx, &eNB->proc_rxtx[0] ); + pthread_create( &proc_rxtx[1].pthread_rxtx, NULL, eNB_thread_rxtx, &eNB->proc_rxtx[1] ); + pthread_create( &proc->pthread_rx, NULL, eNB_thread_rx_common, &eNB->proc ); pthread_create( &proc->pthread_prach, NULL, eNB_thread_prach, &eNB->proc ); #endif char name[16]; - snprintf( name, sizeof(name), "TX %d", i ); - pthread_setname_np( proc->pthread_tx, name ); + snprintf( name, sizeof(name), "RXTX0 %d", i ); + pthread_setname_np( proc_rxtx[0].pthread_rxtx, name ); + snprintf( name, sizeof(name), "RXTX1 %d", i ); + pthread_setname_np( proc_rxtx[1].pthread_rxtx, name ); snprintf( name, sizeof(name), "RX %d", i ); pthread_setname_np( proc->pthread_rx, name ); } @@ -1073,46 +1088,57 @@ void kill_eNB_proc(void) int *status; PHY_VARS_eNB *eNB; eNB_proc_t *proc; + eNB_rxtx_proc_t *proc_rxtx; for (int CC_id=0; CC_idproc; + proc_rxtx = &proc->proc_rxtx[0]; #ifdef DEBUG_THREADS printf( "Killing TX CC_id %d thread %d\n", CC_id, i ); #endif - proc->instance_cnt_tx = 0; // FIXME data race! - pthread_cond_signal( &proc->cond_tx ); + proc_rxtx[0].instance_cnt_rxtx = 0; // FIXME data race! + proc_rxtx[1].instance_cnt_rxtx = 0; // FIXME data race! + pthread_cond_signal( &proc_rxtx[0].cond_rxtx ); + pthread_cond_signal( &proc_rxtx[0].cond_rxtx ); pthread_cond_broadcast(&sync_phy_proc.cond_phy_proc_tx); #ifdef DEBUG_THREADS - printf( "Joining eNB TX CC_id %d thread %d...\n", CC_id, i ); + printf( "Joining eNB TX CC_id %d thread\n", CC_id); #endif - int result = pthread_join( proc->pthread_tx, (void**)&status ); + int result,i; + for (i=0;i<1;i++) { + pthread_join( proc_rxtx[i].pthread_rxtx, (void**)&status ); #ifdef DEBUG_THREADS - if (result != 0) { - printf( "Error joining thread.\n" ); - } else { - if (status) { - printf( "status %d\n", *status ); + if (result != 0) { + printf( "Error joining thread.\n" ); } else { - printf( "The thread was killed. No status available.\n" ); + if (status) { + printf( "status %d\n", *status ); + } else { + printf( "The thread was killed. No status available.\n" ); + } } - } #else - UNUSED(result) + UNUSED(result); #endif - + + pthread_mutex_destroy( &proc_rxtx[i].mutex_rxtx ); + pthread_cond_destroy( &proc_rxtx[i].cond_rxtx ); + + + } #ifdef DEBUG_THREADS - printf( "Killing RX CC_id %d thread %d\n", CC_id, i ); + printf( "Killing RX CC_id %d thread\n", CC_id); #endif #ifdef DEBUG_THREADS - printf( "Joining eNB RX CC_id %d thread %d...\n", CC_id, i ); + printf( "Joining eNB RX CC_id %d thread ...\n", CC_id); #endif result = pthread_join( proc->pthread_rx, (void**)&status ); @@ -1131,9 +1157,9 @@ void kill_eNB_proc(void) #else UNUSED(result); #endif - - pthread_mutex_destroy( &proc->mutex_tx ); - pthread_cond_destroy( &proc->cond_tx ); + + pthread_mutex_destroy( &proc->mutex_prach ); + pthread_cond_destroy( &proc->cond_prach ); } } @@ -1262,7 +1288,7 @@ void reset_opp_meas(void) { reset_meas(&softmodem_stats_hw); for (sfn=0; sfn < 10; sfn++) { - reset_meas(&softmodem_stats_tx_sf); + reset_meas(&softmodem_stats_rxtx_sf); reset_meas(&softmodem_stats_rx_sf); } } @@ -1274,7 +1300,7 @@ void print_opp_meas(void) { print_meas(&softmodem_stats_hw, "HW Acquisation", NULL, NULL); for (sfn=0; sfn < 10; sfn++) { - print_meas(&softmodem_stats_tx_sf,"[eNB][total_phy_proc_tx]",NULL, NULL); + print_meas(&softmodem_stats_rxtx_sf,"[eNB][total_phy_proc_rxtx]",NULL, NULL); print_meas(&softmodem_stats_rx_sf,"[eNB][total_phy_proc_rx]",NULL,NULL); } }