[Beignet] [PATCH] GBE: remove stacksize 64KB limitation.

Song, Ruiling ruiling.song at intel.com
Tue Mar 1 12:23:23 UTC 2016


Please remove the .swp files, the patch itself looks good to me.

Thanks!
Ruiling

> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Yang Rong
> Sent: Tuesday, March 1, 2016 4:14 PM
> To: beignet at lists.freedesktop.org
> Cc: Yang, Rong R <rong.r.yang at intel.com>
> Subject: [Beignet] [PATCH] GBE: remove stacksize 64KB limitation.
> 
> From: "Yang, Rong R" <rong.r.yang at intel.com>
> 
> If stacksize large 64KB, the formula of calculate the stackptr should
> change, form "threadId * perThreadSize + laneId*perLaneSize" to
> "(threadId * simdWidth + laneId)*perLaneSize", to avoid Dword * Dword.
> 
> V2: Only support UD * UW, and UD is IMM must be src0 but IMM register
> can't be src0, so move it to tmp register.
> 
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
>  backend/src/backend/.gen75_context.cpp.swp | Bin 0 -> 24576 bytes
>  backend/src/backend/.gen_context.cpp.swp   | Bin 0 -> 155648 bytes
>  backend/src/backend/context.cpp            |   2 +-
>  backend/src/backend/gen75_context.cpp      |  34 ++++++++++++-----------
>  backend/src/backend/gen_context.cpp        |  42 ++++++++++++++---------------
>  backend/src/backend/gen_context.hpp        |   3 ++-
>  6 files changed, 41 insertions(+), 40 deletions(-)
>  create mode 100644 backend/src/backend/.gen75_context.cpp.swp
>  create mode 100644 backend/src/backend/.gen_context.cpp.swp
> 
> diff --git a/backend/src/backend/.gen75_context.cpp.swp
> b/backend/src/backend/.gen75_context.cpp.swp
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..97d2449336071af8cfe132ef5
> 96aec8af688013b
> GIT binary patch
> literal 24576
> zcmeI3O>87b6~{Yd69`FmBS4CBAbQy#GBaz>hu6Ed?5xqOcf20rFJ{JTIYEqix@%?%
> z_jI?at34i~EJz#(+<-eL2#Pqu1(AS25f?%tgf<rtN3KX5k&yUTf6TPUUmz5LqH5`{
> zc6V33diASURbB0xPWfJalNO5e29Bo;<2zdq?!EB2%f{!WVT^>jdGRq4v;44gak~2>
> zQ5u-sl~Ad}c+X|B)G at 6C=Gvt|SmVEY%w4$Awmes|BU!Y3|6<!Zg(jd0oI at a#-
> Py$_
> zjq7ujvP$**)#vEbpV~bqgMOq5XabsmCZGvu0-As(pb2OKA2kBfzhrzJmHJpxF*7+o
> zG<AMt>e`yRzLZ>lJULH4e>l0Hp4n9X<WiqB0Zl*?&;&FAO+XXS1T+CnKoigeGyzTE
> zLm*(<hVe4&{zEPJ@&EsH{r}G^hVcRPN9cP{3;GQ7-etr19rQZ120aA5_ayE?-+~sP
> zd8iDPpli at m&=b((&|jZ0j9)`PfbK)DKo#gw=+BQE#yilP(08Hx&})zf4WQf5XQ3<5
> zW#|u|G>jvNLmSYu(BB?2jGse4fqo3V0Xfji&=;ZW(9_Uk&?C?#=z~uf#xJ3_p>II1
> zK%3A8bQyYpj~YLNehLktb?6!BFOR}L^iAkF=q-
> FC`33ZC=u6PE&=u(K_&D+oWI at kB
> z at 8ToK_o1&q*PsIQK0d(w5PBVY8dB}?E9g%UMaQ-H<j<~bZr{tvf!|=gc6{&XX!6hs
> zg($KkX6<oX_URT?mg7W3#}kdsosz>CKdj!llM5vFX!ugh&|T)DR31nsmX<=-S9>??
> zb~qd-$<I*iSsta9O0qAQY1eHkP{0Rv?9w%IOqbQ|85)Fvq!;Pt{7XrJj%V5%>fxl&
> z{PM(^6Q0UG4`x@!rZY)5cQ+D7sYg at Z^T7aqPZ`Lc?RMG>;IEj(wVc>a8NtA$+7r*4
> z>;Hy3c5V(1WHU9!U}q>T;govVxrJjHt6LL(Q^`ZS(i7cWdFBS1>R59sAa<^NR9P&a
> zFqYQ#ScZ#DEp#WAN+m at Oj-
> 6(sGIw*PJnhiM_AA{?0WcrMhcB4TEmJbY{@vPEd#6#m
> zQ(vvNYVED<ty%`}iD;_C4`Ij;gMKb)ic*OXCg;R)zTh*VqPEGu#-i3kmP`&jZAJOj
> zb9BNu`m>qH6KTFZMwU15L%1*djF5L$rH@;md=I;)n4mrrEDlI)l0qNKFirYjJG52(
> zv;9>tIr7<Y{)fz}<a$irc0B8#zLU$VMgX+d{!XpEdnZ9~Rw4g=340UB+~ty+j$+hN
> z-
> VpbJN}{^O6i&wz!W&K=n*m8S at I7IQ5s74ABHSG^8gj>p@||=(?MZN7n6oRr2vRO!
> zPE(rFI at pn7+zXEZL_pqDorh!a^DJj+DK&If^2O6r)6!XvWn6%BQ-c%Tx<!lhg}B}C
> z-mbN)&1S99%4MRDR;YZe%|gV>^|`iGfs}?QEFUo8GDlTiqR!TVip)&Bul5=E%f2az
> z9WpV3BW{m)fY5XUHTt`fxElp%YzYtSBp?Y5Aw%KDeTjD|cY0x}HsyTUvfHjRA~xW
> 1
> zD$wJ;U`p<}1Y2m=FkocHsbUggpqz8f0Sho6G2%iMeduvph5y2h)p#4>(vmVC)pjTD
> zMLCrwPp>L7uSJf;o)eFKANIM!avT#>06cl(RJcWR at v|{k4w`f2`NjBlT6rqR*Swok
> zdB=4fXFKj0qQ2)gErICkM@=zK7nPjxP>oHVpEeZ{uAA$aB}5q$gfnP!*Jekj4(yei
> zld(7x)r735Lgo&_T3~*l$~dY&ypdH6ac~>K1h-Xy^*zT{p(V=2GR at 7;&Mi=f%NccR
> z{v`@AMBuH#J47o>lAdzDSa~6!#o0<lB at E)B;*>6*vYD>yc#?@aP80=cBaWLe6TrI
> x
> zYi?}j@~TC<rV}s~!Dq$V#^!dn8!$Nzv{#KunD#p8Fwb+>azdNYi&h{7;&^3p>naze
> zL(>UavG4m=kKgZxuBH0K^rK)Dl&nKjOy5s8+4h**#yHtF9gMJ1uR1R!cLTQ_Sbb)P
> z4t%>fDRbDVZe@#St{N-O_0VSB;Jm_o;q`<$I422q4_{nPW{Yt|*q}lQqAz#R?+K_f
> z3Dh3sQlWsMB1)r at ZE%aZYA|v<j6Xw;mu)p*lfye|J}OeZORk4_4H(+DFQva!Dh-Fj
> zV$ThWp6HdF*g#NPLDUv#-wP?|dm%bN-$aB9W-
> )%qY>al6=a0ziMg#8MtzFt+L4daa
> zbXq1%hjzjaY{5q4)@jei&UQV4{v#OK47;!$)n5v<S!=AWSGQW#+x3llYaeeTv{r9z
> z)tXIO+ip;mcB+k5eRX%E+Mu1?#?E%LRwQboTB`rTA!Vc!O4_Tp*0*<CRNdOAy=t
> QY
> zoBPWV8V^q~mBe!fANUSO#fGL3rYlv|l!aD?o*D~m%rt_-
> E|Mm*P2clXp_rG@|J4jn
> zooGhrhRzI3C at Yw+0ySIA6)P#Sq@`w5#d63y@<KtLuR2hkOn0PSGk`P686g=rZa}`
> G
> z8=w<VXB1U<O`zsYuPfm{qctyd?Wij)6GIR%yvh~8*yi1l@)A#BTY*9ugCO<kyk<N>
> zqN_>_k`kAd|74jMB=Mq~B2q<}*ha73BqI*1h#A3qeM!H06Ejq0j_P=IbZFHR>V-*F
> z9uaM*_5Y8suKzux*8f<FMu%GWzn|QHS3T2*CZGvu0-
> As(pb2OKnt&#t31|YEfF_^`
> z{C^NoU$Nsa*~z~Su-?bFUHq$HtG1VGrl02)Zp=_YrN9?nwf=t?>-%N3#>e^}|JII<
> z2e=+VN6=THF2tZHU6MwhGyzRO6VL=S0Zl*?&;&FAO+XXS1T=w<7y(L-
> Xsb`M<LA_k
> zKQ0 at N*V*HJKjUTjWcwCwsRK9EPUUnXVY;6fyEi8rexohL|M4Ew$o7dXuE}?SbT
> 4+i
> z{(l4O`rkro{g3VD(GguIf9sPbpb2OKnt&#t31|YEfF_^`XabsmCZGxYPYJ|d5hg$E
> Y&ipi7eL^_)v#$6DzL_5asvm^?3z~da1ONa4
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/backend/src/backend/.gen_context.cpp.swp
> b/backend/src/backend/.gen_context.cpp.swp
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..e7ce964c3d6b55796a28fd4b
> 8df5904baa0ec2b0
> GIT binary patch
> literal 155648
> zcmeFa34EPJx%eLzaY4lmy<R|GKuX%CS-MeDT1c9-
> 4WvoU(z3`soaCG&rzGdZb55F;
> zRa~y<MFa#dD!A|B^`idusw^Tdh#>CE6;a$bTyWvK^8Y at wyzjhQa+0=y{*n)0lD_Y}
> z^Ugdo^UOTYEbmbBwyrJS at r^6%_<2fQ-
> TIGzVcQkQJh^VwqPn`>Ww|)}&+hWF!p@=D
> z!(F($+%%Cb6syoQlrM}H^VO!I?C?4HVy>xD9`^qp%@;GnrD8R|tJ*j`IXQdG3n3OH
> zupogMB`{STS+?d$bt{&)G)uT+jy}qJ`qKtyd}QI~f&>;Mupog22`orpK>`aBSdhSi
> z1QsOl&n1EC<a6sTB1`+5Y*}M_Kl5+<`yli09p?87BKHq8|31R}{&wX4W6ZzX%<l&y
> z_aAHieU|yX%DmXV|8eH}Y3BEpk^7G~*SpQ{pGWRL!CW6TzgL?K+xQPQ*UvD&u
> Z!G&
> zqPd<izaNa;f0DUgFu%7Qp#QM(KiOQ*o8PxY?jK^V+x$P*2-
> H50YexMHnco*j?myLB
> zKi&NPLFE3^%=HoT`$SV9HvXrZ>t~wZZ;9N0hPggwe*Z0U|4?(?)}OqoFgE^Yn)~DC
> z_tzr#pJlFF`Lvk|VW0mObKmCg9g+LbHutxi-w#FZ|Esxvw)wryR45z&VUhbEj@&=o
> z+_&$4rm1lDd0X!XOt at 0y{&URr9`pOQ$o(VD^{wXjQ%!}n at q6aF&0jWh|0r|c*3b
> Wm
> z+&|jfx8?gRQ{ip=$C&$l=65-
> A|GDP+u=)L|$o*r at bzA?BGY!VZZ>oFU8WZmF$bEBp
> z;n#u$79_ABfdvUHNMJz%3ldn6z=8x8B(M)9kj>TAiS6+h8K`4qTKny97^L5TufnTg
> z5DtaAF=X$Am%}F5AMVEZy%R10rWos1!Cx8Q{~tUEzk~mUH^X&sE$oJEuo|8YKf
> |85
> z8D0s)&<aPwW8oLrGGBpD!1eH2xCUMUmq05V26tgomEjEd7kCEL!OyYfz6KwG*
> TMyG
> z28azf2rJ;(@ONy+AHjX_J*dK3cmn(wd-X2(AiN&Vg|nd<o(8|i9{whL4Bh~*gV#a^
> z*1-v|2A%>x!ZyDTz6bAut6&-
> mkcS*R3;u}FbO+o9SHguLeuYLj03N^x at lH4&&W4lV
> zIFPdZvo*ZZ>&`K`{79jg_c}T^bZ7cIyE``wboKURy87ySw{Ga|=xp#dwr%O^K7FzG
> z{5ntlRHh5n;W4kiG&x+#<rjPBnd|+X1DQ>oJzYKhJ(-U7O<g at 3d+Q6uN^$X86JT=L
> z`r)Z^*<0ty<;F at iTg}^ho7y`wZT<b7eFN$leY0_LY<HzFoE_gdo*nh0X=?I{C2yis
> z&U-rx<?2*++$-lt3zcfV?2YBQS}1zev24|w%$BQOX at q~|JxQv^ijsUeTP>7|L5e1)
> zDr5D2+^jdLRJ|!yr>t0>;bE0Un_&Gfo#K&F*{jb^RZHF?$&A<P4ULzE&uNr at bdwe<
> z7AKqvK)@xH{P?o<>R&3PN(-6loG4ViP5GkN)!)Xoouxuf{<%RffoW~cbH9t^m8XU!
> z3;oq{K08q_!R*UCkLL;_^}Q5jM`!z>Ducxya+mTbj+DqrSEKoRZJjOpq=M_x<;~ig
> ze7Wcil}h7YDAu(eDIO`5k(RDNId5pUM^TLzilbipwzfVghRJeiw49yL%Xd8Q0+rQr
> zzB)ym1ue+wvBG%1zTlncRSM@)n+i+UwKOkZsc-
> rPQ6S~ba?QWuN+vtbDx&^jigtLc
> zpIGYsP%6&z>UdDUyE;~=EL%?j5T8`Jp3d#{{rT~{l4ygsMDDA~5R-l}KkWzfg&v7F
> zTbbBMZhEp4dE%FU75P(=9gD7#ueSAXv7zgAy&E3OmY4X?NvTF&Kt1oDER2s26o
> ${S
> z67i_tlBs;Tyg at 4YI<KcU)7jV8+oxry?~Z4O^5a`emB!)me70;WyuLS7&K8HqxVd7+
> zyUUaAma~o|DU-hZXxlg~AzLk#U3uD6hQw%^oleCh5sm5wn(r)1d-
> ankCDq at yv6D*O
> z-8s-%KWQF}UZ-
> 4B?v%6UhToddKILjpetN^E`buFUx4n?7j)l at w&R6o~o%x&+IN7R@
> zzSy;phzm4O0xC_km7tX=l+ikGJn4FJr3ljG)L at gihM?}plF^`BXyThf)kq{}glMGh
> z2rP6XEX&X>BTTmiUKso%t#K5JTg#=9g6M}Wx}J_?$1A1-(21F;dKX4Ii at Czc#=<T{
> z8hbL_ at _GilyWNsel{9*h3=&iHs?<Vz?L1na=b0K)KUFML8$4;yiyP2+I}5}4u8w;9
> z2iMB^@$9ZG+3Hxm|JUNW$4eBtbb_m1Yn>NT?T+-
> cCMc9!TL*cew at ANMU#(Pgt*vwb
> zqGA_GN}M`j6VgD`O?&T0#pa~dD@;s|=O^+k-!%Q`-g{S5-FbDAtIA|{n9h1A&jPhV
> zad><Rt#)FeG?6V9CfA29Aq)CI_u8-)k8|nh%I-?j at Xl<xacpw(=-~0A3*{#ICtV{G
> z?(NKuPvsM?k4zO+ZxOv^m#~iJi%pOrAK6T<P@!rzj=Ar30%oZ38Tw4omvrefM46F
> +
> zMTR=7yQ)lSsyaDUo&AB~v3zby+T83xZQL`3%xlFwQxJv&m6`6_F+rp>T&Ymo)v8|
> =
> zq|RH?1m5!*ZH+PNYR?yUWG5J0^yf!QI}2Iw#36H~v7)b>%<wHg-
> Z)&MX2^pSu^Rh@
> zRueZZSwiosqi$0%x6V0giM<;=P^{#=?0AV*$<TOA^~Y#^y4CXTMz3px;VPP=lBX7r
> zRjZS&O-<9&(~YCWsm4-yv}s&NP-
> $A<DDj<Mn(``RrK$0pH<sO*N2?6y3v@$XmND$)
> zZabdc)HCRH)5S36MR_o)9rw0Q4G|Y{sAMJG^AjthQZ<0i<ynS3UQut}(%H9Rb6d|q
> zTYFb`*TCr>VK#OR^mO+3dmDTEyf$xZTi-y}hQV&ec3TJgw)XaSHhPpoUJbBGki2(j
> zs_Jd;8ra-BIN-JQobGLJ>+2)V)7L7|P;0&XPKLNLBo|FmAY;?nG6RsRWKCiiU^HW;
> z=kX^^2#rU)1XUyZyf;>wl$SEZM?+3C9`c6r-c%(&GBu9+Q~BSSFIQ+$-txv4D>743
> z4U(~Xp50xVDl@{DhPT+u7I%B&*dt}nJgG$D7jDIy6zNuIO)}1v<ZmpK^ZwFEmGtw
> k
> z(o`|08u3~$PbJ8gB`*^tx~$!jO70T3JjXjGDmG0s6=O^iBl5<IdE;71KLhR}H6##`
> zyei8&`jWg}Qm}zKQ!b2-RlQHX+gsk;vfS&E#=-USWJzqHVqMdcI<f!7?)@|Nuh{=~
> zeok!vufr|y8n_yE!8$k^euLfrCHNfN2A_l*;C*mCTm)O88%~ACz%BR%E`vOD!BY4
> o
> zw*MPp4338b;e*)xFN9N}4NibHApU^cvGYF*uZLkc0iF!s!_NN#+yXC!F*qB<7a()B
> zPlKnzU&yEA^-q%Dg`WipEJ$EM0t*sYkidcj{$G>81zyt<W!3vurx*p8z1m?oGKsZa
> z9jO-^qQN`**vfHgM4DyfJu!q?!KTH==NFG|5ZBeIxJt#fJDRWdV8+%jHog at dla0~i
> zM~u0y4qOf9kEPyn?XQrVVmxZQ(Y$pL4%`a<wEUSm_*sGfp}}i5FCls_k3YqC$J at 6
> o
> zT{=_L5~CYkiyxhblLHe9TfEv8c%ADfH<TtCwA0%UipyCp<J2xxD=m$~6O&bCYnAa
> D
> zuUqG}1pa9WMz-
> s*S@<gw_mai2oZ6&Eib2Fwf9#sVV$VbLS}LTbPOi&OB>0)ft|&CX
> zSp>GS%nglNaW-NfQ at BZYhD+9?D2{b6;#s#Zv<2)IvF9<@(JfwA$*=fx)IYkg19mO0
> z_wOx5IyRFDDfhhYV+*aSf~7p7{pY at Wm${r={midhEDmr??3|R1k)2a({P)zJ?1;E$
> zPqZVP6ETX!eNCg;Xgn+RiyKvbdZs35Lw?dk{(G2DZ_%PUC1o)IeHW{i0man3);7o!
> z-S#Z^Ny}Q#rX`-
> =W+@|6kksw2puwmZ&s=_%F66{|kC|rLh4nmA*+La&rn;o2MPgMx
> zrl^K+Oc!-cLct`fs at N=r_A<3;Ww*P2V^?>lw?wN#a-t(y5{N3~YBtk6c9z8tuYIV2
> z&QVg+QF%+0e3bL2wbl5=^7>xft!!Svd>Bq-Rjjrh+TTcJc)V1}*W-ihn3|aESMEZm
> zy+!gD3g)PE{|Tvrp+L4qc(_VLHldr;s1ZCB#d=-Cxwp~G4$+fjZFP}2V*!jLrLIQO
> zh!2=6 at x-NTry3#<`+qI=^XEbAf4h$PA#D6x;Sv~y5m*9$!H$>t|102hSPfsrj+eRr
> zm%#*#Lo4hLcVo}L4W?iOy5KPQG`9Q>I0=4g-hU~-Wj_C9AZa=T?!;!l9X<=^!A1}}
> z{*T!2H^BMO4Tr<e at nd`pUIC}UBKSRX^PhxQKp#92e#spC58&f)J-ihzg%?39JO=Jy
> z{(To at VLNPw7I+3c#N7LD;2ZEUcq?25GCyC129W&$H^L4WfKy;C90Sh=nV-KO-
> Z}d`
> zy^PDGI_RHZmLTX=@L$o}=;?EM0lJw6eW}I0=5{uCer$wlw2&`XPobGG6BwSj_k0
> ~Z
> zoMnW;DuGPz)=X!2f2T}j=$|1x@#h4Q2TjnEj<suJJx4qE?MNQcb>5kKl$rR9xPj}{
> zJjX=#oP1_7TPPc)&tE|w-6#{gbPk~ywNOwYb`s9xoixI7R=O9tYStE%hwGb at 9#yj3
> z%8Rtz<S+g5W-
> G~r_eC_dDuiZN;`UkRn%n1}SEmK&ineQGs$dajXHQ2=p7c>^rRPSh
> z9-S%f_P&ltN!1uL52nT&sSNFX8zS#ms13RfBsVnV<%>2DWu(DTFShh<tIt(rs-ZmG
> zI8>@uOB0!~?D&Xpi13o6+P0y$XIt0mm6?IwOqYF;TWPv`+d48`Jp%;k+Onlp+H?4l
> z|JKE8y->2;ST?R$KG55;T0L(5uI;&&)dRgNmh0#A-!(ng*VA!^dPx4L^@&dVL}#r}
> z4B96KYki`_KEdp<DXp30*3&zn9^iLP;k(b!FW`4g;WxB*=@-Z!H9fJhy<4S--!+Ec
> zY{GA at DSTfi^{uUMqk71#)H8{RaIx^(G;CxMQ#spc=WWB0*u`uz#%~O-Xq#7e5`Ty?
> zPUwTUYWtwrs9P3#4HlU^bj%2|La5(P(mJ<{F;3H_C(-&r_pPcck~KeCg(r5asa<Mq
> zBMj;A6VtD{QYVpfOFtTBvNTz5mEzog69IN?nWE1RtED{@L5m%oaI>w0Zm!B$W
> 3tMq
> zBKWI1G08B2D#99y>KH?sTvrbB%wHkoEoEp>%y;D)yoo6a_C#;>%2Sbn{3N|o7li+
> ~
> zlY%XS-Szry4W9k&3|(4V3lkGl)5bFJBVg2$mb5yR2uVd-Plq3MD9Wi^%V>F|zPVu)
> zL&MM={j%m=Eh8iHiXihrtV*7fGTF#t1zFd`TF=bZzRr%W4Q&Igr0ebJbh4KweUj&{
> zxNK_Tf;91<2x95V*@hxH_r~)q>?{{{N*c1coGi1F@?)jvNEzSKx%qNQrJ0}zZ-x?F
> zyks(ugQl356@&H>=Lzl(sOROrU+(ThOeEXqw#y3B307q2$#9-sCiO(uEN`+TD-!hT
> zR6U9xFJ*J`ZdMT4oHMjkvBfort{#~w95&%n!vfwtnGedE0vR}cYiDM#!;DkY;!24q
> zB>J8C;g)*5GVQXiwQDPb2<nXghVAAJh`GQzr2<PZk&<5GT9~AfRLL-N==>05s8lYO
> zri0tr3e(^dG67xQ&HS}lyvx<;yqeEX5rh>L$#=%|EQ;x8HPY}oTdQS%d>+aQ^?tQf
> zd>N{jhR0<Mm2UcJ!Pg{*R_nI#U8zOF&Kp?U5hQ`cMOwZ1+17X`>EacCh*{|D)IV>%
> z at 5t4$`_3sh&^qs&z{O0ShtH9^X%}-
> M=M7_d7KW;o5iGMP?<OHEN?{R&L at MhNi!7PY
> zt1om++{opzZ*$nI*t^}>#bW=riM7ekXR!5O4<|tjEQ1F49`^o+-~})N<KV$Bu=PI-
> zuZL}L6#N!D|5kVvWS|NDhQ0rJcrA=V6Fi8We*;_rV*j5F&x6g-0>{C3vH9Nvvak9G
> zI0*iV&3`|99X<+ggR4P&0vXs0C%`cv>-)ciKj2!(!XfY{^89P~9^4K$!yDmBQ1Z~C
> zSor^f1QsN)Ab|x5BuYR!`sk1D$&&nIjw@`zNx9&pq~f at qq6H_VJG{ksXRq9&-etYu
> zq+D=PE?d9gq-2sS-3Pwlr2OY|Qu;mw at nqrDv%UrE*28ZTco>y$ZO)FVIr|oIsQFH#
> z1W#YC-
> tj8PM5x&R^7AQ~hsOTjq5j2uJGTCHa4Eb5s!)VR_&xUi*WeEL47?ZK0~bR9
> zHo{@>TYLZ?f)~QMupJh|L-
> +wc0T;u`@DM%#+53MLTnIa1J;<8><KP%L8orGm;J at H%
> zxCl;!74R#30sjkMhp)japc9(lZ`l36hfl)Ia1&e(8{p|6`~ANTH^OC*gHxaZ#7FQW
> zd;yn%oM(3k><4o8-
> CyDJ at Jg75ZO{SFfuFNR;M?#%xCmrV|EaJHJlGF at z#4(Kzz%2u
> z*~|ZBxC3NQ|D|vtoC~{Q3#@{b at E~RNWl&{CdFj!&UKFDpv9cs2*<mCespiG%5x
> hpd
> z#qr&qOgco|mD;1JHnqs&H+*yKvGKAxlz!n<MI21QroBR0UY$52p!`)^wI?*bm`D7=
> zc>Mjwq^i6>_rq*S#=j-m;zFbNKE0!~A6mOTx9cp~SrCy3 at y1=ztF5D2-Iuul$C-zV
> zaAbt-+47DI>nj_)mem+3`d at smVyx<?B*_)1LPY(m+P%KUd9bNT?e60IfC=2IvZn}V
> zw#agg$2Hj}B$8#f5pGzPeyXC9{4_Of#qG!SK^%H~IwR+8W`=iJ`))kXva at FtH}f|2
> zh?gtnE3);>n=X~l at gp$)cAXtHmtmd75`B`m)>vspmY2>Hla!G&_k#b^7L9#Fv9u*y
> zkxlIGw9Fjl7<>n*^O|__b<%mKJL$m6R*E)SM#h=Wtt3CU%6q8h(S!nbc!$lNiJ4#e
> z)#;Cz%IefSl`Q>O+{LVmDw=32*3SCoUB|CpwNk$6pek6b^*NIbk++2w?1_{To1o)s
> zcb;!;otjqDNxoOTRLrYMf?xrTn#G!~U)B<=wh at 6ygoTPZCm^2-{PHS>XjQHC^)mI7
> z^nPa1oYg)vzF$XS5 at 2hpTfzLwih{5cBWlv4FzGJEwvYOi+$_ at cm??-
> q$0W;^>@GE9
> z>MYf;am;PX&3~gwsT8Vn!b!YdnbcFU+_ at fI3+WqV6&CYtGV3QBCF|KIxu&UQ_1
> I#i
> zRhT{~vq7~wzFWzR at Y7@L?i?+brY6;S9!meH<2le&C^mm0v%wqTOqXEpr<f;zI-
> 7!E
> zL>8;W>YkhfV;6VD`w+j+ at Jl3AT}27!^m;B^9i>$Vr7hh}`lHj~N2MMeRj71qx8;_U
> zXs5KDr097tsWHA1Q&aVNF)7;-
> `kCVtRVdRnDnTAoYW_4CVx$kA%nuhvWc#ctQufd4
> zHEW*UwjSEUU>3 at ntm&fVOahtLBi_(lnv+V}cP=~+mYX)uB#5tu*rvm=MdC`5r#d
> 9T
> zmbXo?q~A%V{JlZ%7jJEKs<2cbU!a at Rq%mu8%L($#4pWO&--~3e*j0fr7s;t0jY-1P
> ztByT>?20UDX>tI~DO<L7DgS0yM}xNm0WUL)%B8r2fB9np`@Ba9tAlZz!!0EK;9M8>
> zRA+iOX4p@?sWa2HF{AusYrQ%NB|kL30R|2w8O}|XDwTrTpu)^+SyEun4U*}=!blS
> v
> zR}i_Jm!xNDbrkiiig(h;wB(BA$FE-FoqxWpmv`@+=q*#XA`A5E>)k9bHW3`JA_(8{
> zBj8 at 0e!JFA%$2Ldm*jn%o+67{Wf6<o*`WW$y3EG$7Jnaut<mAf<!v)O-
> aO0W;&xM8
> zbYuxCCkqgHF8rcym9o%kQC_HmtAmkr=->b-xg+O9`KRsZ>N!gds%LEj)taQ(dc<Hf
> z*z^<5vmZ7w<9jE^Y6pu^Hgn1Da+}>`n?W5h<+f$jnA(-F@|8f at A0s>IM_7X#J8X<f
> zbV1$YX@)($tXA-)Pg`Wto05^;9W2;c!>^@FIhn<66ZCK+c^WSY!v0B{5lzcMRYi1a
> zfip-Zv!i)+Vg$7nEiKwa)G$k^vUF~=JU2$#8%L9<Qx6!^7fX}U{bfZfsmg9!y=V=0
> z&~-tb$)GxqP0mttPAqZH$dLLOoCnf4wrkhXMC`iJk2yx4;MQu^BZ!4}%rW{jH>IEg
> zPnFpJayI;1jQwxVpT843{|b=({>Q>$@I?3>cKy%bjj#in;M>^rH^N)tweSkq0XaAu
> zGH@{5gRTEQxDbY+4UUBGVcXvhZ-bY at d2lZDf~*g?7aRXe at Nzg8%CH?8-
> ~nuWvH4|f
> zz`NlhI0d?(8N~Mg7)(PCECM<2Ky3aGz)Rr8Fb-XCDEt8%|6(``*1&;qFLu4`6?i#R
> zU@`m}JN{bO1c$(1vE%Q9ufeC_Vps$F!MCv6Z-7fc&gxqOPk~<|_d7x4|7IzJ*bi0C
> z`Qa3;Ot$&Vm1j|{@i&#L8CeR&BBkT4iqe5qr^*RJD4~fAa|pHx+NexCE5h-F<1k^C
> zhr{qLe=MwHGvQid;he3F64Hcgj)hwhey_7o#>wJ(aa^PZ#Oc*onHnl`#^8+MFwbfV
> z=ZH>vFj-ff8og3r?gQ+flLyA+_!2pnP1}o`d;7Z1=;f3ZPFo!4>+0ytg!3asCXXra
> zM%c!*Nr>I*aLYBe4K(OrbU`_S4Zk|!N%Mqj(HT3LG`e<jyB!niC;XwfGg519HIIg_
> z1<n at jYYD9~YhNtKS%rT>PtOpeN}zaeA~8m44+>bu{YkM#Tmj+47-
> 6Ls*Y?!n+U^#Y
> zWG>nX=nR{biAO;eGUrqS4p)7-*SOPGFy)Wf)+vYd1hvbYq-
> bTRo>0SDREPL4ws&<5
> zY|bQw at ++<i7q7RG_OD{rRnu{dw1*Syh}k+}crHDR$+o1`t%KDP=V9dvVtTgh>Pal
> T
> zSp8(*q1Kws?4J%-
> {J`%OHJ`26D2qAxru_0#&$#}Bh at 7S1jdfmUUnRfI0z%G+Y~CQY
> zO|e?96R+CH%19M9`T9rJ;_1z(BefZYw4RpUqD4}x=BjcXg(#ZWulK16yH3ANZwVK
> d
> zhA4Nn%iX`@TlP-hMPE(y#qyFB%jrJlZ`GLuwLg*&tLG(4@;Alq$3Kyuz`5Yo3fU1?
> z8ZlQ~Z7fM?S<Pv-rk=E{Hk*+p7w#)fMwGSZ=W4Z*zn{k-u|W>i%{1R at cud;fzrAg1
> ztG^4$j)L(<gtrg+{fEkXX;SZFima;@#qMea?ci~IeHhPygGX{pdu!|O)3XQZkxmqH
> zIXUeiA at UWDCsT@Fb=8GRM*HGXN>w~~b at D3t2{d?kI~JP<)GOQq4MgETXVXD
> V3AK2A
> z-HZ?dUE2|qjb~nf-egD=TsH}}70dTux2HC;P+#Q;BzOU-voCP154EXGZ7Ey5(iZp(
> zn{C{vNiqp{+`eM#G*T1led)WwNkBqyt_E&jH#qSm1ee%N&55}l{rx!GIoNH0b?aS$
> zH)U at 7T5KU>!Dgq%tF0W>JHVd0t=*klI(r5>of3?+2m7F at RogeS+dQ_15;3Li0hQ-;
> z>j~TsjnehZeZ#FBndtv$_k%0m8cIVytshNrqRh1AwrPoRc!ZBfP;Q|;-E^yjYWF|J
> zG*YAlWb<>Z0RFKgZ1*LjTg3jCJ^!y2+mrc!`+Yq*`|o;q5lp}acsBeRdtc7{`#8J`
> zE`w<p0NDpn2bW^&Z-(c<-?8t%0acLw|C`}(_%n9>mtY*84?Q6B{l~+z;cjgEe+QZ4
> z-w!^6Eq@(M!SkR69t+>Wp8p`c9AwS^D)8Ws*zsQk`A*ymVH-
> 5V(eOv?d9m^Dg^$C_
> zU=)6bP5*vl-}m!d_C<USyZ+<wc6b~7JFJ7>W7FRRSHlE!z;ofx*z{k7cfbo_8#KWF
> z at J(cV8;Gp05qZz_<2N+*hd+QtfjQ%fnAx9V$eG8Fk6GT4QK at gEua1RWWmUaRn
> 2B>$
> zETl8XuEUy;v-&Ljx6e49^+V0-m+(W*>Y4CE&gz?(&9CB)ssi`SKfUkb0)LjAULe7P
> z(VaTX=uR++{na0g2i%d8R3|Z<T(_yNVy=!hp<=eZ at i#bKmhYF~Jz<xIvbNSNDKOAX
> zw!h^i=1!w{;4%zBy``*nh&Gd0g{hNA?T?xxux{!W?WR_z(u-Ze&M|K}^9ERb%5m)v
> zp7qmaj9FuTlC$AFY_o%gajv$u{=-__k)n`_Ge?Vi)#}jbJL*pJwMIm*Myr6)e{r1}
> z at uT?hMRaOPd~to67T;ddr*rLG(mH~;AR^A|G(liHr*&9yVWf3f5n&K##7*tLJ>J1Y
> z9M!S59ciJa;3M5nxHwIic*hed%suZ|L<OVh0zWpZ+rnva-XYd^;P945Lsw>c)b)hN
> zT<5kQ at Z*lfw3oc;d)Z67=Uq~?i}H>AkhYy$C)Lv6&DKfP*iC7V)=^H`1<nlJ-GsU-
> zGo!jPv13v$J?l4G9qr$va!BgN<|YMP{j*77A9dBq`A^D`nXX6}Xe at Nh|F9kN41Gtu
> zKZ^7nbL~viI=*;kn%40}MinHU4qEJg`8NBI*rVA0-Nq($?f=uT`(@q#fp9PO{TJbF
> z at K$&+$U1;dI0Wv;=AVWZcntgiTmNG)2%Ye3co6&k3s8X5LC*I-
> 7=D7Ce<KXS1~?Rc
> zi;XX~e+IU|Iye at d3kSoGvGxBOE`t(03vR{6FTm5`SJ?Hhfs^5<*z;F{obmTVZ1_uI
> zH7tTB!=JF<?}d-RMQ|qk0K5J5a50EIpNI8u5PTn*$-KSDE-Ug&{INrQ``c0X-tOpN
> z+nm!P-E@)TY24G|lAf0 at B02HN!acPx*FGPe?2<UpPHJ*0ZNke9Q`-
> tuo3bEocj7BD
> z3^&my4#n-gxP52t#B92`s#S@{5!l0K^O*EMiUcnyvOg)hNGztLqKNk3IvPi;{zi(>
> zwZyXOz`|Z3v$Bz)sKlAnkIpbMV1Viv at e(n^qvnKl1QK^BWivz??yx1&<@+kN3}g0w
> zYLy7~g=|%!#n));nQWB^_C;z{p+!?`omRfX1zRLy!AW-HXa3b?pB2D9sV at 7h01}&`
> zYbdOVi+=W=%7&O*KV_eqv6muHN*^V6YEz3zijt>ey;#lqXONXhqAq7MccjYJWb&
> wh
> zvY%lF!;iDH<<NBNrJT|9llb;cu4%!K;#|8mIZ2DeWwPh>fF?D&L~5)BF;7;Vlw|NT
> zmm07y@`_%1Wb$f!^2vsN@(?9)oTFN9vZ){HU2L<B4(#{37d{xQryBy)(K)Yu3*xO+
> zy#}=`!3jlwT;~RuVSU`A#9O~7P66Nb9CuQu+5d4Tb(;MjaYG08Kjv`VO=7=d|Bo6Q
> z_M6!H?}usF0?&eH!XL2lUjxU(Q{V<{{66>{cKucGB9L$SodKJm0X%pnJQ?<b2e9?O
> z1z&-?L3{zb;S~5+_&Ij}$Kg%z66l5J!u{C$zl6_&toQ#9*a6+J0uBW^6YyTR8$Ju~
> zg`IFJJOgCU{{#31<Sf7&;BqKKAFPCDfUFPr349lBgEzq|p$HqG5oG_r><PF6+Tlp}
> z3qFLOz^x$b1<r@(f%q2=hbO>a at F_e1-
> +~W=d^_MJa5}7jL*O2K3%lSnXo3UbTa?e;
> zAmwzUl$HG0h7li;xH^~_*_Nm}d0tVLu+W2qJq%oHP7aC!4hO~BN(iZJuy8;U*Q*x
> Z
> zsh#xdY>dzdpZoor)rq)~b$3ROhKAnk*sEs<<S$<ngDez4uLKM))>A5}f3us2glGH}
> zW?HHwi{k+{_{UZw0FhWU=}JGoV2X_xc|O8ktf~(m*)QBnOi4ZGwAZ9IBYEsbatsb
> $
> zsiI3!oZPk}Qd{scCYz=hVo#cR9d}vYX0l_K<MDh at Lm~^#<Tc^pZ4i`Q%#V0wip<1V
> zQ3U<YOr at bhMY5-^ZE4%ESx!z-
> r94wvQv<h`JBwM_Vd)%U5F|tW6{=rj%hT4W(*XUd
> zJh(mbQ40z}PL&BoRZE-T3}BOsx*%1yh9r0P_HONVl++Suce%Xi5v}Q={cngZv$-p%
> z>_G*N)OGc3wSm&4oTQ;!`Yxw|Ge;@wKHJq1#`U`zJpSA5+?Uf8?8Ccb>R~QV6S1
> gX
> zCvKIpcJ(EP`6teKKAt{Fy%Qivf?sQ#nx{O~;#IDuEuIc$lHJF|K`oDkzDW at T<yN#4
> zNgh3S`=W7G8lSG{A8g;_a;7fJNicIQ;F=x_#A at 5(tR>5GBB^#8_&E0Nltek at _Rm_d
> zPH(l(7LUuYD7x63c9^=@T*gL8;eGG5TlMt-
> DH@!sGp;soFUaQ~_S$lDFKwN<U59QO
> zdq^(^>N5Dt9WY2uc9x2`YKvgeZ&6BUHy-(SayP8+#KY<iI=WSF2B#T9X5*aSvr2!c
> z-PIxWtzTynGZ&v+LiF0dyw9T7-c!%*oc3nw8SgOjkQjZ<K613-9?H;U((Pd%rcAot
> zJLQM23tp`Mk|LjFyJf;Wr+O;B<uWa#zx_;A-C4I?O3Kt5Vp}hr-6S?65zQoLVDYS;
> z|34B_@~vW1V*j5Zb|pW*#n%5R+y(D}|Abv2zJTN40FZS6*TD(!Z1 at d+fKS8g;BvS
> S
> zN-zR)_TPF~11n(#+=nmVde{ka4&YPZKJ0%v58!<uK7mc(!BgSS_yAr5J<tSC0a+jL
> zN|5vZ7J;k{*biQhou7pPSPRQwG1SAivGHYJz$CQ7ks$W|9q<XL!2a-m*z`YxYoQ1B
> z1F`SF1DC^*a3~xE_hYxqnSTEX$H5WsWcWR{`_JJzkbMA0!_(p0$XjGC>j!4}(M9Nv
> zd$5;Vl~NSLnPLnZE#Vz?;ph77bH*5!QKucbhM${l8_a3is81gd>O{?Qza{;?KjM at 8
> zqh0I^LqkdPlK8cj at Q~Aq?7X_TKp999eXToy9`2l*_r){W9L}UJ$ndq<GhTbX<?BM!
> zw)7&~+eL0)xQ}v9^tQ;|Rw6aQt#LY6TDUcQS1i2kRmCOMx3^E7U0F+H;fClYO;W
> 6q
> zW+YQfY at wmuY^|CPd_KHIY+tx9ideo at sy<$rRLa~mx=?4?6=iTdj;M+m%#XxPkh
> 5A9
> ziBHXHTg0EDEhZQwT&=;vnD<6js&d4Cma>yo8v;hzs!E$SK2$xJ8T~OurVe*-^cHUv
> z^E^vO<&0uj>sI6|@*Ieo;h0BpOR{2aDY2+O_44v2PliV7OG&;lAa1q>Z-}qia=cvl
> zEy=!I*5OApp%R>sQYU#bkEb$12|1Tz+i7$MtOnp~-PhEb<2}xAqO;i;aqhS{JgZHa
> z_<mTMQ%9IijvwWMaI@$yL6JJ{I5%rN?;zelv$4q(*($b%=Bdlt6_crv(dr`e8PoN0
> z(>&uRMy?TBDiAfFPZip;C7R8~jU}>KM%Ae-pK<3idAgOzN8Ih<$$Zq6ulUJF{I<1q
> z4|bYY=-}$0F!Nzd*^MUJly5)xcWvp&^lu*AxUt)Yk7r!kV1jDma^PD at eClD-g8l4I
> z=pUOJ85z&dTNMVLiWC(Xak4mWkVvN-
> SE at nWkA^vyf7}T?Z5}Cw?X))ijm=z889nu*
> zdzydnIls_MNZ)L;ezN}mFbvQS8v8$EjM3Y%?=J^g`|rU|vG3mxvfuwDa5DTE8(z-$
> zpMd3156^}_VaLmQfM3I};GJ*{?0~KCba)KNT7Wuu4Yqw5PKBi)XZ|mO6862E?=Lp
> ~
> zSK%XYEnEya*bGbI5Rkn9PXIaV?=5gC<Ur2(moxv4hNIv;*!t(fInWQs!OyVuuZIg^
> z2nJv)^g<nc5xf7buoJrAaFDbAJ_%RD7_0@^Lm=n>y$O2Yco09pLGVj#{yX8#a231
> &
> zdf<3?BK!sU-vv?*ACR(0|MBap8n47B^r*$^PHmHUk-
> pCJu!T2HjgN2Pl#+Um!Wn7s
> zMjO1b1~1E~slnsux18V6^Q>6qg$7Ro`j?5Jt-ZgVCnYo{lRom<9dDT+Jf@?K1&O$k
> zYfcpB-
> 0Vu)e{Sd5BePzl&iWhO**wziUTzQO;ShoK!nzNT3wzm7GwP&kvK{Tz<p6Bm
> zy>gaAHQy-zHkPHn!0=TLyfzYbeC-_c!Y85phooO__Bi{>xo)1-2UEqz8FC(K(xk)*
> zb_Kqh{;`z6Ymx#>Hj`pLJ}K}>O5oK=fn}VN6!WU2!1Ar!q`)ha0w<jxBnH%qq`*Td
> zF)vRFoJ|SrFEerFEc<|>X$}pR+`uxYniM#B7Aik4Ba!yTB>LvAd5?`mtpuw`h^{9;
> zT0h1&G&p;vH0`beszqJ(ZE5S)RhiHmwrs5zbB=SSI=TkBdV4tXu;&a6A-;+cF%cu@
> zg4tK`F%xNC_0sNWo~r$2ie*_ at 6uP9WNdI7d`*baO)rO5~XRf=J1^<+FNjl|PI!;O3
> zQHov76g!^EXi?{pxDdQpw7LM?ht#?k_kxjvC`}9qJr*UcVwCFW^#6IznhfrowJP9v
> zDT~1veUr_i-
> zs<ugXwx3g^Au=4c at J;C&@#qnVXZ^av#d5>1*0 at In)24^KGBkwPLy7
> zIm%_#f7vtIoCkHUN%xlYpj_6SX_EAKl>e-`7g`KJC&7RAmYWv+K6;^)_tET}T<8&m
> z{{JFTRJ$@-PK!jv?aC<WFB09j+ujhZx?66<dz3|@o>7|kUKWX3=TD|X7fE-(pG>?i
> zl5T`QSIP#Qq(bvW>Xw|2F>-~7BUgw&a%E-
> sip`rF%4E^KWOEw6MutOm!)XL$SA at nd
> z0xeG}Npsuzl^Bf2btG<7X=0LE=_b)c?q1UIxmP4mL~<(4k>>3vY{{p1`{_NDhbcU%
> z5E8I$!mIs0Q#t$g!r+ud1j;fdkm1t!IH$n&j}=B(dl?dnPPQunI at 3@&TJzdk=xNI&
> zX7iVePTNIIjml at 2ctFAzO%2hlj;#5QrY@;sOi476NuE$NZbMeDq at g+4_Rlwx)KF-2
> zn)-8D!E!1$2KigPF+CRX!8)<HJL;VGdLojPNVt<0$9Z)+HSUbZ;MV>&IVCaE-P^M%
> z$&W7!H(S+KQCY#MVi%!lzi8NzAD)?EeABAk(k!x^!*gn3lDtrQ!?`@yZ>E*ZIixCu
> zHKenz-=vd2=JLKi`#%0ie@^WGMr_SriOtFUf5F(DpTOpq at BR(I$<P4*0&)hxJ=p%Y
> zz+2#@P=tSj(_kGO3G)5Fe}y~n2grH=@e!O1Plq34^M4dBg$yhQ at dtbpoBzEa-vC?(
> zzrgmFJpgj<zxV=9gZ1zn_#L*seDm*Scr&~NMqw++UVvx9L)iO2gKvu65Axl=t#B;-
> z0lWV$cspDTmp~rcVJXzXud)4ag?ECS4|pOx5oBG!4?+9_H^MtWz6&r8y|4!A;Sl&8
> zJ^?v1undE+1`dM*;V1Y7?tl-%Ye3E%7=!1*$xsLKO~C(wSHfAa37!p7UiZ)JCom=H
> z{?hG>x|=qJW*niugr$4=K#|un=Jn at z7-`7oyyg-|Fu+%_q$Q7$Q)2R>!|Zt^T=iG;
> zGYr(*f}To*Z1g*lh^AMx2HD`htSh15@{oTyH1^ZO!r-P+KsqWr0`=rug2CcZ{Y=VD
> zJ(vt`h9b1X$ixU!Zt4hAZZZJnzu=}3ka&Om{7MSYRZd6ZcVGz8?{{K*KFpF~_p1c4
> zFj#`QdTU5Y3B?^j=lTh8Jv+o2+#rR{AW0Q-P;dqR`Gi79xv6EAa#PDJxM^gDuPoBM
> z#A1 at begX(7*Ch7nHK`NPYf_2aYqPo!YizEhG+O=lw3+RNVP!&dHJ00>%jcO;*<{Q}
> zL5Et1s at d*$7ELvw at MjITw+fnO{Et!4$OeZs$)(DNnnBQv1C5x_j8ksvW*pq)H9>@
> d
> z(o2Xi<))4><)+pP!OeN8vYM;>qsyZ%)hudRSTCQ_i^(_bzCEW!SXW>40r7n;IOk&?
> zW-Oih|2LiU=TbwG{OyTu|3{@KzpbOcZD8K6{Md#i<rK2oGrWaP-Lhi|>tspj$O7#c
> z3~v&&W6Djf9aC<mkD8puZ=F`Y-
> &qX`9>wFRgtYtfJu2<<99W6{kC|R~v$6m4#$5a&
> zcK*lUQrHY)`|l55CGfl80 at wnp;c at UC?E3e?`EUvx4v&GGvFk5`U2qB<0J87 at CU_
> Ot
> zJ^u&t_t&xOuZQy?568n3;T~*x+3){qcrjc6L(l;y!%6U4Z2DW_Dj0=UcoKXMJN|=k
> zA>`l`SOJH_e(+=L`Om|LLH76$gUtIc0@>p)X9nH@@?C)U!h7IMSPFl~hW`@CcLAp
> 1
> z6gUEYirxMN_z=7nDsUQXfCe}e<U0Z1g*!mj1Wdy)w1RvW at UN7|y&&HUxCNw
> qZi2{<
> zot#N%g?2QO+<dL^sRu+DIs9iw6kJmq3)GxJLd6TrC>64=UO%1?(r;e+HH^FXFa8>y
> zPk1=?8vS at eNcT0OS+ExQ&%P(5SHd|>xMj^z*9J^qC15B0$zSkdEBR3DI`Q at v;bkn
> J
> zoN+%p2@$x-3olDZS+Kx+Z6dSw!$Cv#4|`O<m$O%VD|^svB67s-
> EljP4q%rTQb+syM
> z&-!D#?_5uH*lM-V)?N2k&24>_cIL}Eyei0E<~6p3MJzFt&_b*9wVB&?9*x6fSt_|_
> zjnYxbx?Nh2TtfG39dk1bl8v_~>RFM?3C^9VTz&JdHO=~GYVp4C=TV=diJ8 at d)YIwA
> z14z>66G;vJMiv0k)$Nt!MZBxCX0e9Ub$6<z8%`6j7D)51<2UM`xfNNGT=zl3dpe(|
> z)}th*+$4PC9BbRdnRNVob4dDp>t`%S2~JwoK9eOjQ;VKo?Wmzj%96SHw8dCn=M
> zbd
> z=}TzQvR;nM$>kcD41rDjD44q3^yqE;V*ekGQF*=CmdyX3Wem(4u=Otnng5sl{(r{C
> zzYE?371#)}=l{#t_*cM5 at KksZ`~Ev{2fPk0gtMU?j)Om8=ga>7&%*n`?(u&Ne}4;G
> z{}XUI3_%0 at 8QcDU;8Li-c96aP$H0N`2W<Rr!|iYloDcs7CxguMKZuQgFMJx_2h-3A
> z2f#P5 at o$F9;A~g|GPnO>cm=!w24Mpn1^a`{=YI=sgm=SkI15gKqd?9A_$K!KE$|M
> w
> z48-
> <d1V6;Cm%02mLJ8X786bAP$p5`@`#xmu%e1BZU_8#LPhtmAzPiy_ at S30#rx`qm
> zatb;j^&Xjz)w9S^EgGIp)qz<tM$_cKXkc{T3g2B?YZd}UqheP(g|X`0xk_~-X|X`U
> zXh4OXr<Y8L{o$27(^Tj<Stsg`<g^&%97Co5tP97;Q;G^xgwl%K5MK^Dnj4{FDdtDn
> zdr+TsOWbvO5Z;<K@`i|ML)zTCk;Qma0c-
> e})G5KomuUorQk$Aq;loQUICw7Ryzmb|
> zahH-Y<Asdu8nW2RzJxKlHLE2L$)>gSF_~P376<6!Vt2W=LqkJT{~krjf9{KD-T$05
> zS{9Tps0VlCvj>WK&gwzNP5&>dhlmD140F){Zu?Hw0FkD<paEnyK5aCypaC*Hz584
> P
> zuuM2 at 9DoL(=Z*~!`ec9*HL3nt1_&_?(5*FqKG(%P=0LUxNKfvJlaxm(x<te-IMJRh
> zH?-
> L}6 at B30UQ<%bOi$j9n&QK!q`9Ak4V!K`KN|hlYA4KG9oS<3W471bVC?@PV{zV$
> z&3`5AhO?muWDmfT;P2S|zlN`aoB?<zyd2JjA=m`6{(nFC9g+VUeg*G at Yv2Otg0*l
> w
> ztcK6y8_2<_a4`H8f57)az7cpPbij}C2Ydsr1KAHC-wAvid=o!_>;rfQTn)QH)&v{@
> z-^T~=HIQ=w<V?Ve;Q6o;o(q4(4{#5>0g7-K{2V{PXW?bA84dth?|&P}TK}tIH=G1V
> z!1uBFzXl(J*TY5dd{_z3g=63k*#F;#YhfIgz+(6d_Ww;F>-+x=j)dpHZzvBblmCwT
> z1Vle6>mkWV5I1vv*JQ-f)9Pw@!v3t;jIKKMGI2P_ at R228nJKy!_KukiyxeYT;<8t$
> zc-
> 1_IIhXUJg=&TUSl(E^oDUwC$#J#!Gc9%g_H&iDIk`7d45sdVB?|G at T2VMU!FT9m
> zP%F8R)phGmXz&o7+NU2#V{c?n{PJnSOe*TQ?Olr-NqjIty5ob}Q?_jF3NP5VeWT;G
> z*io32(|~wiF;gg3s^zKSYN1rDcY at fo#8Vm62lu3^(8sY^ww39UO=4R*dj>jv+uu_s
> z5u4OgA~pEU+Pb?o^|WN#y1QFeZ?^MRIv&rS6t%sOtFob$v;SASpGdYjNN-
> X><ZGO`
> zW6`d$u at Yn0)4>Jt<*4Qtw85ZwunA?Sr{0%}UqLljU&!WZH$<?1TM5T+q at h}EhJg
> |`
> zQLng;J at t+~Qxup86WL<5P^sW62>uEs$<(o3$B)QQ;J`Ak51!JQP0MCl^H~;YKZ%+)
> zz4a-9h+-uE^~+bt at f?zlqt-
> PCMYT6H0J92dIf!H+#rcM~W=%)ngeCO++rOOaMFb1&
> zUn!UQw|~?3s6N<j+2ImywyLX^5_Zi|!Y5Vsnfe-2+o|qS$&)&|xK6JnS)q!jvgdBj
> ziyqmb{~bH8!_}X>R1{pi$ruI4jT8kZD_Bf>rW$k1-t<_$sM>UpU1HzZzFEgEf-r@{
> z<xr#H-%^C}L}-<!h1t}E;yWkrRi?^$uR50Jbe}9e=FYq~o-OjPir1o(Fg%tYKF6cC
> zTC=%H_gNmN>g5X3yArm_IIJ<EbE1VI33QG+bkwZrKcc3r*=$GWLT})21 at AEV^-
> m|H
> z&u4G5^!&Ci(gD}-<0c@`<L*^8jC3!Eajh-)*ckzXMLAj}pTqS(P};~8M%5jxNDf0?
> zS}kX#NYRB3MRCg4ly2<!f!0>#0FeK&>)V{|6x0w^yAwt?p|XkPt&-iTPqA at jp<gYZ
> zh0-sRzw8TVJncbhr98rMIBH{hBz5Vdnx0<UQc3O%ISFehQ!8f4p_#RGGw7$$y~u`t
> zT><oBD!Zhr){kF2>{CH@?}W4mL=enuMx4n>x_B?oY>NGVC^rAq#{NIu*#ENr|36
> ?1
> zPJ)N9<?n-!z=z>{=z-
> s2yWa|z!`W~mh+Qw||H<0_n_vo7!GqZFvhM#z_%Dz%{@)Gn
> zg6&Wb|A#$)JG>Tlz-
> o9bd<9$nN|5#b&xM2FC)n?Age##6!>|et13BaWRgeLh?_UNo
> z=l?xydD+u{0~Fvika_>7fb8dg2 at Jq0_$zk%FX6`^HvWC^J$MzI4K1)Ad>K3b3OEVY
> z!_n|7Z1@}Cg)ji?U=bV)UqjX+ at 2jG=y^(#L)QhI3iPBD5F*?humgoYiO`=>y`&Y7Z
> zC`-wkn8Na=bt|>Cq<NPb4f8+sJoQT2w9=NkLy|bl`3mRy(Y@^UilwTT=UZvx5<S7x
> zQ*!3d>Q$>&tZp3PL|OBf*5D>Wi7Rq^S6@%Z8Tv)RNLxa4u7-
> L&%`>ECm8CpVKWqo?
> zI+OD1`WD{XWZ%1(Bt)+0q_}M#Lnx(-Qtys;QJ(3!T`#Y{&s^uuf5>)g?17}OXe?AR
> zx<A2;t#U4yHjUlX81)oQkz9VH_7oxpk`vv)Mt17`6&Y?0L;@+{6Ib#QQA%)sf07$L
> zbs-
> @*S7$u4Ty@<8CA#ss`Zt5F+V%?6OsC6M3K+v#cbo}5x3x9x%351#`SuFy|E&+*
> zuQAqjUW>OOJQYN`lJxy1TzV9tIfu&;rSEU at 7ySlFBd*wxx%PwZg0x3Ri@}{*1_Ua!
> zJG%6|gaMhBxo&vMtDy$R!PrkVW7Dq8s6<B`951N;ErWX<i~c{)`N2aA{8RlWzP?P
> 5
> zvS0VryJVxFjmCcoLRT9Im4cKsxOY@>%p|lL%&>p1s(`qRz)jtDL>4*yb??*~l=x97
> znwS<hlYWr}PO5kbZVFNE+6^DNeg*fO>Y|3-
> v@~>_bJdLh at qN07w?14azFO^(pm(Jg
> zNZi!TGbzCn&s?>wHRYMaqgQF>DZ%}T3P*%8>5vk9?{s6cZsrP43sd?D$>HjZ{a9d!
> z&bc3xot}1JXZkPoPpu2H)!{Mai`RB{J&h~kYx9<gH7=idvtJ+3S`&XOwLs15*x!!W
> zgHFZ_F7u&ICaJ>`XOU_=iP89j0`>N^=XDE9jKJ-O0|AKgx5>A^6CMw1 at uatlj-B({
> zW&B`d80x&-4nREj>ZbZ%LfRreTi;ie7QSWGKA1C`Vg699trr_&YBI;dQE{G#7YY}Z
> z$V<K`F&F=~bsEI0Z%c!hT76qg^$iMMx{%b`7OJaK0J>yVcz1X}Ymvo?R*TJN-hnER
> z^ti4T(RvVs)Cr2F#ZH!nYRPPF%1HgGalj$=|5EJE?;87m#Mq!;#pZt-oDcs7^4-59
> z;W6-
> O?EaU*c6cWI2z&o7cmrGpm%usD4Vz&T{1N;AGw>Q1fz at yjd;**QTxbW`1MnSe
> z{ddC at R6))GI024=1K}sw{hx++!X>Z+PK7pjDtrsu|9vn8U2r5E3ctbj{{*}qWS(En
> z0ayfo5W634f;Yg6K+gIbgpF_<Jcuvg%kXx%7|w!a at HqGb_W##G=KkLWuLao?uo
> -0D
> z|Bv_r#6R#~Z~@3(fKHJ800+aL at CV5E0ly8Ogd0K51CadzS&%dTo)7Yk04XEcD=>#
> 2
> zj~}NNd9$1y9&<A0Ckj<MEshUCAI+=Jk`&Os9Fxlo{G4PZ`bSy9W>4+m300jFe5BT
> @
> zo42nooHmnMTJs2cNMX<HHMi0dV)N-
> Z)8&%yr5)h_Ua?{V2XNpRCk;t`k=lEQZorYw
> z|E(}2*2q{@?kcbC%wdR!0ZP#QdlGH4HDM(Z`*(sl>t;nnvv;zh*5=9ELWj9`J}-5R
> zZenqX at _rPQmyCQwqW}2Cm6DUh(wb{w&Cs?~IZ8VbR`|W9QXungcN`EtOJ!AdS
> $<cw
> zoNXMLDyp?9kIsUey9!Au$Qm1Spj`dY`tZc0F at sY?B<d*$gpCw!-J1fv=dq|pyG6s&
> zmuc15W1V(gjJ#o%cbJbw=#aI)gD;xZ>1X8s;%yJ*B%z)Jc{$HKnb<})by|g%e0#>b
> z-7`O&u$nn6O}nbubz#JMjL6M!S7H0#s5{VJpUJOf2l}G8P2Z>_<#hkFb*U%$B94=S
> zEFNraWmdy{-(B>&?Sh>k=!lu0al1k(P5BvVX^el3+e}4<;+ExV&INyZ0I|^qgWhqw
> z(NR)WM9J`&l}SkFIM>Z=tgbk2pR2#lr@!T`tG_y{y?e2DQt-wOuQm9G^)*YMV|#9i
> z#r|V%u{imaUQEPW^Q3{~BPG0Va!2Bq6+uby`wjv(Jef+0U)(K;@rw`=;+OCy{<M+q
> zhSJ1jwmkoD0>(B8$r1w$PE%3Bn+)ZiSb*lHRkzYq5}e!0Y)!LueK9Cao#vm8`p6v_
> zD^E|ZK5~$3>aa8|9nHJ^0t~wCne;;qes5OtQgTUCh>34=*9koeCOuN-
> 4vp8DvQBnk
> zWQQs;dum-
> 6gp<PKN|G>~HJYX_NxXLcRXr3fYBT>T_Wv_5D6cj4|Cz?P{0ery*#FaT
> z3LF8y!PdVGUIfh``~M%pw*M)70X_i#4r2Rng;n6eQ{hM0`gg&rpad&G&I0 at rHvb#
> p
> zO4tVS-M{;=^WP6IgVW(8H~?e~z$@WQSPXIoz at hLL?E8D+e?jd3mxHYFZ-
> P4b3U>ZG
> zU^jHbk#H||{iQGkXF><aI)Ep`_p$3g19H~iWgu()cffjB1V6>Dza1_GyUzcK{QVI2
> z{B7`RknjH;4!_54{|vkW&H&l(|9xaF>-ygVBKOxr(vNgmVO`*82&pw}+KLwIET at dH
> zrZ({jd&)@oB$uStFAmbQSgdb097~O!D9Noq%#4oyWE`7MPP=U(wW%9B98sZXk
> YOlR
> z2{*SqCrJ)9Hn&Ljt>F9~BQn`$G*U|4s#PwbaC;*oa$HS9A0YMJzDp+f#4VjR!$;0k
> zO6J!=*r)f>AlOuPQR-xi|Lj&{28i+nhxSsrT$(l;=ItzG(!J#8C_etP_f&0{Ej+ZL
> z<T at CfoRiXD)k%UQekb+<*<&7D`+>~3mz`75NRmA@!hL`w*~^Z0QX}d|*<9*B{g)
> _Z
> zR%Z?a^S!wbGHpnX^SOVpecsOJ#1XkYR3$zhw|k=(I$rf*%{g_vQPsH6B`1vo(nUJI
> zE?J%1Bxg5;hg~xbS|qgmgr8XGrp;NE()OKs9R3;arbA20=)m~T_R<NrY)2frwa`b~
> zLs0kX7p at oj=<uBHjD57&|A%3GenV_f&i at -
> ThUky6_df at phEKr@p%+dC at dwB{0QnYx
> z?Ek+TE`edlfP4#3)&=|)yZ?UpC0qp)a1=ZZ<eb27!YAPE at M0K%W8n|@0AyXj$KZO
> 9
> z{Q>WU9ykuZjW6I%xB;$&b0Guk;K}e^d;;%>bD;_&Am0nf!k_R5$ohbPhiMQ$K{Lo
> 1
> zfwzF118@<H!U=FNd<UO^>=$@1TnDd(Yv5Ek41R at A;8wT_Mxhm+1hQA)gD?*A
> ?Z34k
> z=K(wc{(^7dZukg{!n0t1_!0hrFM_NEcqhCZUJ5UPm2e<PS$#dlXJCp?2J7xndX{<r
> za9~-
> HJM$ngZK&4KwXLsn%ibHRkq|U%qVH7QvR at hr57vyn#@69KyVoZ2wPe(_V;{}>
> zgd<CTG9YxVI5j>l-w*fa2ILEL9HGa1tnPPH5PH^ZsS908jF0S)Xxq(@Xw_p!M_u;%
> zOkP*(1|h85)9rivZsBAabvlN8XFF;3BXKQjHYKn>Ty$!VH>0+Hgwz6_=y~e|siDDS
> zh;@K6{eV!Me7jSIYHnhU(HhCyeS-N#y#g-
> ?%}hgV_Adx6cN at G=XqjkANeH2tNDV at h
> z7a5hS^ks)_I}WTQu5B-O7PCX+GKO(?am!bZ&FV!RsU*bDp>6Tu=lz|x@>=EsxT_Zc
> zMf|8^%iT?}zIxMH_4V1{_QlrEHc~1xYtL3Rl}LV_$Uy}8VRbOZTK>6o9eEDsH<Xg{
> z1MtimJ^3jm>x{A`MmLnrlz&Y><%rrNM^WJ?=~9A)RP$hml3c74OHt7A^}w<9&1zj
> $
> zNUU<DMTAgiKhY!EjaOtT8>)npE4L==GFU at bLLS_OThfq2op#bwe*Ms)X9};Xsr{N
> a
> zX~N;so|Y)RVTVN3>3D5Hv6ryS<o$+Hv05&TQ!u6i$_XcaA)13zg4!Xu*V%NkXj7nH
> z#ck531nSqE8Y`6}S0%#vR2N-a^m-5{AO1|ge at zk>t5ji^t(zX5IroarXynR2a4o`W
> z-tfrQB9(%Ff?5>v8 at Lr@zLiLtojlt(RH{}>6PdB>_=qS;s$jBmjJi>0O+-}r**B_p
> zgkPKd#>ilF-Y;ydme at Wi`Kyi<D$CYa3KM)In?syt&92?>HSbsJyr#ZCJ>T<tbF_?b
> z<_G78C%d}E{(mY)qxzOS_Wz_YAZ7ml9U$lbb%U(^e*l|a*8X1u=fHY+3Va`X{zD*h
> z|D7Ov|33}az!(g|255k%K^^=IJN|C?5L^QlI2Gg!0NDp{FLwN=;TCuwTmvtL30Mz{
> z;aRXh+>c!^Hvb*)DYyzILB17mA}oR@!2{U&_rPuNE|7BrcEc%f0vrs##oqs4cpa3X
> z9sU&#gs)@kzaK6FIXhr290K3P*8dQ^98QA{kaYsGKj8P+`m#UZ?I7m{$libgh(F*&
> zkZ%SY3=d%Ye*<oYo8Wr55~e`*3~Yu?uo at l*a=yTSK^a~Ea>jssJMgg}W%<h_|A6
> kV
> z(@z}Z;F+mnj>G%>Q)D>8Ws0qULs`z5;h2C*l`h_!EHPG#bpBBzG#J$S-J>261kWY;
> z#+f6Z2#urc2DH`w9>O5z`OV`7&--b1N7}PG!L8}6;;{qRAXm;9PlXV*Cu;$j$V~Y>
> zQA9wxknEt!Poq1UkH1y?(+H0L+;0F;o_<NTdJ~M(SFa3GD)YgliT~VZcrh!q<q$d6
> zt@$HJ8IZ}*b1FDn;+ZbiLot;{iAg`<#>Cr+e{8YWw9Z=|yf!Kz-nN5k#tYpjxmsX@
> zEbsHLCe=;??O5!cxXjakoUh+#UKSpDX&-$kOHwvu$$F7k6`e5m9y}4gtG)NZT|{K!
> zvo0suEEjK3Oz98lB&$D2dcI-At~(}@q-G&gMohMcJ|QqeQ0%;D&{?Z>4eRjKeiY<2
> z=eR>n#t6x+DP(1Dq;HdQw*{qHOSCm4EvZ0c6%-
> X9DCt_>RfCA7psA?wJnVt4GXhU6
> zwM6wYYgvSZW|fiFTdvAc?Q*yww|L#UW;q2>)%^AABK2LA2Njn8B2 at wvK%M8
> mP#ZI9
> zh~SB8NIwyeNjrm+V&aL!nDi6zm~iUyUs6mwkr<PH!i`B(BZ6s=mT#q`|Iy^DO8+Re
> z at e<=#-Seg&qIjOtdDKEFZMp%cw0Rk-f0@~yYl5I}ogn5S>ejg^iL~lfZ|ya~Q1wnQ
> zbCGVu87A9qJNP1 at bskBqs#hRI%a<%!y~0g6l8VQSSe=XVycL^HmGud#uIMys%{d
> Jo
> z{{<yvH-MBThf6s;YwJ8t+{*NB&9JkP84Ig>`Bz(ezjO#xE@}nuH66F#1(_hkuICRD
> zf;dx|%D#%88DzUnC*1DXf;An8bnlAYGM*E}aE=tJoJW)?jb!w}PD+*$yNR5*tFf$Q
> zK_2a85vep&iEnpO6ll6#Mg}R%wj>JMukBJ%_|;cV9k7}9{2$d&qTU!T%9o;ov4tO8
> zbVG7zwuGzqIh9XUm*mi#e-I083OV|KTz;g^Y?>f3Nz(%@$wy<Pg-)DJI43Q1;&j4}
> zw9x*lOIPsX5l%|Ce^P-PIPI9JHC9!)fn{q=Qq0FE1zz}8fh)QhXN1K5$Na4OqS%Yr
> z|KrB~za4x3T~LA?$h`j(L3{vTf*av#cqvT64%h-M;K2j<0lo=x-v2nrxqyelU$Omv
> z3o`eAJA4xU8(t3M&<!WSA at BfxfG@+Ha68C11LdrMjUeX*w88JN|8Is%pbrj*{op
> q2
> z{g*->G9Y^f&VWN;fA~AL{@>sOa5-EG{{idZaqtD~eK{+j12(|Z;ZNB5^3A|6!6!lX
> z4)nuncqaT6d;fpoTIhu}a2Wgs0e=#1fVaXM;SJCSM}Vvc_&qlLZ{XMPHYmXfa1hA(
> z03U!$-
> ~u=u20?88gFuy?DL2uW*nCXjyH!9O%LxsL%Xam2%x^6_|Mzq=ls16d1~$v_
> zDD<ZO=2}UQ=}`3QbETAL3?7;QNXg@@d&I=`p>}bSfSxI|ES9OAsnSyOyDgho#HO
> AI
> z at 2S)s+I$3^l=N8_-6odKmTYxwPo`C6q^Qb;|Cz#IEVr?<XG5o4H<#jhoL_1;=8MDg
> z-
> &RM$qJD$zZCwNPCXuS<%)xA7xYEN6@^s#t&KB6ZSt_e at mP;JAEPs{r*<2;4k}Bdf
> zFHL(}Utd>epUh$Ti6Qznd}ifxf#^7}v-i}%c_!yM>o<6n-NoUta;aE2H>*x;UXm^5
> zmU#W$Tf7kwR*(SM7f<|{oI1`f#&k~e4hGxJBl`2-wo_Cdhz+I5-S$bZkn={$r3tUx
> zJlo08j!egPR|><~@r`<it3R5fP-3DnbGz!r{asr+)_4;#=2qtfsiR9r^7h3dr3wSP
> z@!d-
> JliA%exNKZ562sihd5FWyj*mM<Q)YuO%FSbkrpLgyRL<v=l%#q%Q_0pM;IdS5
> zCCv_{fkdwS<(Cv8bcMHJ%pFk_M%V+pCzZ`mkZsA7*rxH)P<FgsmxP(*NNUu6S%n
> pE
> zsNAM<Eu&?&z!P<8c)YdMJX6To0`%2UC^4=^a&Dw4C7ZW!LX=jcE!!R-DGyY-
> gon6l
> zA4*hA?WUGGpZd^Rq(48NSH~+jYRg+B35iY?sm85RsP(QiQz-~lJc%#eP6#L3`nkN3
> zTF}$GRV$Ok$a_k?lk<(7bK5-ilgp1}IefR(V|Q-S_e#{!0LC)y?%Ud`8X$jYC5_O{
> zB)IAc*%I#!p{LHVrj`5jmbMQ4G=J3cwEhyB=^C|_9PSmJN-HyjNqfVkQuy{pywl+J
> zti5yMQ?ra)l4|YzI;eqsxtJ~Qo_8 at j20ddNasBo%VKOy2Sz^jWdYD{kN*4BTG(X}z
> zo=TBe)ix at h#Jp2sD_d+TP_37=+g|W=S5cnU7oaDR?K(@=iL`fS+WPxD`v&xADam
> od
> zI!~i3Bl`!F- at L<Dxe0GB_*ysped4GId>_;0f*e6drc~pyxt4w)SYsot4v$SwepI&6
> z;lv1BLizEE?O**cc)#$91z~D*8}ZIrM;<kJewA|_$CBgf3VPr@@cyc_?PWLbERLyc
> zZihOVoF3XMjqpt{IdeQzPBe}@ojW(hxv6fc%!Ue23Nv!9Wsc)PvUK5*LoC(Fmm$H
> 4
> z(}|voC?dyTT6JklEiM^Zhi2bH6w9cR)y2st5;~q)zj~)0L>8)Y_Vwv&bnVxodQNvf
> zMI~{}{2{8jL at b}75&It#v+je&{?8jb@(yhMtDy|*VFm0DpU1X;HM|n!n}4$Ie=QsY
> zU&6kZGXSSyC)jTRJcYmS#h(8XydFkD&Hy|D4u`K|$KM85KtDVQ{)P?z8TbU;2p at +r
> zSOszxz!$LL?}BTf0LR0 at a6h*DFX7W5HvNmC51s*cV#B`_w!<NCCpLQyhG77XhXd
> h$
> zZ1y|hX1EF70#`s8*1?JJ5H|ZQAh!H27=t1BH#iHP4fiA1x5HcD&9DvDfz023AG`ft
> z_zt`pWPSfOI1&CxS$qpV1OEdb0#!b~jj#0`WgTrWog7Tv(qhlc2^5HHz4$|Po|oaV
> z)48{{PUY6fh?F>_jYZ51bCYq1 at BIs25pPMe*TvAsLxK@}V#nB7n)mol^nlV4j6#^B
> zkz<(kuyVXq9Npoc6P`H!n0fpws{$+ea`hBeNo*}uRQIJ+L1Gpp)ZBY^UD$f<(oh-o
> zH^!TmH;TA2vM{5*Qq8rt$`^w&li5PKempyrXA*-
> vtFE at OQaCry#|n&w(wP*Cqg%pt
> zvEE}B-wNVS-S-ycf`pCbAe>VjPmLq`^#0k@!6M~>T_%N-
> E0i%3G8C1gQ%$feRZoKU
> zj*L|DffbiD2n>Qzf}tw at yrMov#hqq|7rjYQ!ov(N8$5Z~^jkp_h^>It$5?FH+Sl3N
> z-__fbdERo{{{#=EHO-(oP{}Yy{bg&x5?Yl2L=)8lzGo*<nvN{xfEk-2E~~M^?3r+v
> zqNF(hBvr;D_r>JR_9Noj#;CJvLtA&If1t0cqcg+jg)$voeA!V1*w&3kBGBgEzOFNR
> zdj^7F)}83)I9hi0o|r`Hye#yXj&FNc$H3-Hi=G=I>9U+gotmQ$A&aO%nWmb?Jy6NB
> zs7F^tZ>dcE>d>~OH8u5 at yy0x|xT?4_ytZ7f+%+-bjTG|Z_-~4N at o;!7?9~2{rY7+W
> zu{8jf(JF6<uc*rK$R=50_xh)Xc%k?$iB)~RW!JF8qJ!IL2CT0oD<iLJxiHKJWX7`C
> zouSD6nDMDNG2?Sl<>fdY+-ydg5?zJPzm<kxo3tpRB`{T-L}BG~8RTb#rK_JaI7)uf
> ztn1e|b)l)_(b$%tV_-~L$&W8vU#Rrss>+s;lzBxXITZb;+pD7reCdj^(Xsg1c3NBV
> zLhmG<la1{Kp?J${aF*!U-FH*HkWSK+mOl>{S4vdel!sJ at 94<M(Lh^{y=h=d1)>xEi
> zJY{|XL=%UUl8;+6O(7v^@`xEL#QGC;wy;t6TS`0U?;N(hOLm0q2V3%dIdn9yIx~#E
> zDpsA$<PPw4V)f4f`K?aE*Ev^;IHW+;m9~N2EnOS5^TbXCD91}g7f1oOkVSQmrs+3;
> zK*3w%O_c%mOEs^)R%iwy`T|SK#JigCbh?EQ`+SU5xLVClnQz~z%u+N%d7KdWn#
> 6-$
> zEuF8bP97`R^hb}x+!l8r`f)U0%$LbX8%xIv!zRuSZr2C0LbX!*S|lbWxBgQy6h%Un
> zp^gWRq|lxfzaUed@*7UXBOwYsy*O1B at lz_YQ_kONp>d=j`>;@X^f+BxwsdxMw
> GDJ;
> zwzYK+cFyGYttQQaOG7X(v6A)Ws;`qNr<LL<ozN9jYXM&|SpkQG+pF#)uC!-S9Fps}
> zwjo^!l9rsz)TDKt=$fzd*EVJfO?;uU_|6fF%_j?VWE4hPbTtdca`9}`koOu~UM4Z7
> zg(^e*ygHGaYUruS3{t3)Y##ULA!D93BGT)T=9Q25L%e at RzpL2)^7BG$Oqu_;-~YP-
> zTmPld1Bb#vAbb8lhn;^FOu=c;1}B5e`9FxA|3!Esh#z1QPKOiVFt`s}|3cUWS&(`D
> z{op&;`)`Kza0FbBeg6)SHUC$^tDzkZhVNtJ-wId5^I;Vn2nWDtvGHYHzs%#m0?vcy
> zK`Y2PfIG4I3n1SDl=*wv%l};1A7t)c_VNE5eg-m!FK7PAcL3|)^VsuufY|$!Fbs>}
> z``Gf=!L at KY$XflAp$YzmEq at Ehxqqj?zrfSr$)My-)Q)<ky>4Ld9OexZK_O+Wi#6TW
> z3iV04&vP5U8p*mBwC-&PYj*8j)y>Z~!n7V$#b{%hy)zx`k+E7wrmxePj|e5&-*xIF
> zv$ZwoTtx-z at t*9f7v=b<>T8>t{BAnOFk2dxC<do+jYBeAuA<n?7$qdpn)~0uqMR3;
> z>tnv!?S#>ZQ4z&8!;BrUc^tFG?^Kg|2vVKULr4#9-)|INyhl!{6RJ1159{7+Uv<ZR
> z&f>B`YbNB2tG4G$5=IUEjDC~fms=^vdVW59sXPUVV`eGsd3*?Q=6%TFSsCeD&3
> wEm
> zK)w~BH_r_-
> ?i(JHG}N0AY&)s2`nRI*^eU@@inDTwZ$mX;iHhCo+HD>BAN?Ep+6Fdk
> z&TQD+*3(0Ozoi$OzhirEpWSt9rmCDn1Xa(!N2%Mh^!UZ6Get$I=dXUeY)#99JTLav
> z%csIm@|JUCxAB-
> nT0vZ*A?;_ptz@^cSXQHlM$Cj_83h;@_`b^0%o)PyHd&W(@=7~F
> zm#v6TG<3^5|9q(gA|(lG&qQF9XRVex(U*1+NU at Aq$Eaj at L(oB55jfJZ0SSdH(nh`9
> zB7pOl at 88x@>uDtQVz*FrBAFsB7jk*!EE>~)FGd>Y=JnhB2jmiO5k)KyO0NBt3RX?{
> zflZb|4c;`IEtS#DD#Nk(&308 at g1EvCw@6s?ZbC|}ktC&wMk^~dvgS|JS|p}$Yfeh9
> zZs_t at qLvyg_D>eZ$NTc5^EL&fas;!vc1#j#HQQw#xIW$-_NM-
> Em%RHbkG>#TGp40z
> zUp3I#bWZHh*2FA0Gyb*-
> nmTU{;JC{*u(|9bQsJb*1%owRtF*Pmk_g>aX#T3r&8bB9
> zmHcK_aHu3{bmCA?l$(rAZ0^xnd<2h*fx6Z<T#9;hgzc!rl?f_RiOE+UeqgJb<X!Vu
> zO>VrRu_!sE5A-m{(H>5E<&CNnl4>DJL#5D4z}&GX*VxN*Q0By+rm?t13X^=2{$yl)
> zAUB5|!0C#l)FVT+`6%wtfM{kFilx9ZgB8m&e9+w<Pe5)H^?jncov*SLQ{^!1&{rG#
> ze>;E6kL>-Iv;SAYO85=-{q-;gvhRNxJQ-x2znuFo=lg8}nd`p|o4yqm!Q<fnu<0L!
> zJK&@6I=B!H1=;KW0CxSaK)&^N1UwFI#GZc>yb8{OBjMNB at UnORbs+Zr*&yfloe
> 7VJ
> zuVUA~5q5ys`D@`Ra3A*lSK&WF*6Yg||4)KDu<JhuH^7^q2+bh2{>S0v at M5?KE`(-
> ~
> zbNlXs%i&d!gX3Wd{0_VRqwoTlgk{hGa_0X5 at Fip{a=ubzo&F=WPkwCSKSKWFN7
> $xS
> z{b;gLyChiO5O47_nzg>kXWO?kHk6OvBq$g?Ix>BIWB^YISu=KfU)MmVS)?s<4#u?e
> zle({rSo5Bxe$FC#E7ioDo0 at f`kf?rCY3+egYKH;~4yO(#znNv2Wpd{cZk!7aC$ki_
> z_SRM>Dm_tMB`6&kf<;=itEuKS6w(%7bo?}1!*)E3^S0wuR~A~z*`lXl^*71+hc!QS
> z$iU_knW1F2Z|>^u46jpTa at +m%hXnNJ)9|&*oCgo4EdErHCLQY_9~n^|Nd9L|36z
> *s
> zcx8A$VtuhUny+$#UA3???+uT!{3AbJr&8uIhc8pdVe!b6x1KkfWx`o~#nHE9o0??F
> z2-C!Bs#U!pvC0m1AYZ3O`tEz(`-c2{D)LyT5mNN}9s6*8LrqbrCTlwy){{(?i)wCM
> z_k<}`kK+WA@)^38HccUws68^xq3f-
> 3 at cU8^s#kmsWpK}3C+4oevi>t&8>sY26+2q5
> zP2C~1<6)5)xFW``nvRf4g#X4#Cl-8`3Me;B4E__U#Y8h}R(I4p9)Z}JE9EYj_o^=^
> zaU@;VZKV{Aq;GpPeM*UN2aA2l3V-
> *Cl>=v{ny1npp001+<s3|<gdu523U9vArf%WF
> z4JA`*g~Zh|Vi%8 at G<2V#Bg0!R4+c(g{VMhas>}XK6$$b3fuvm{<|h)nQfYf$=Um0x
> zJfq at uGOhB{Ub7l$_X|22$M%}zuuH|li%OILYmP%oz*PN|rY3!eX*mg{F&*^l%xo
> Cd
> zJyUSsxsfz_Fb_skFPCf5{(Aj?C${K)#{NIs*rm5%^S>W10PzD<K=uO2Ie<UM?w9 at l
> z7r_85hQr}U*#7T at Jmf&m`uE^*Am{zdnSd{Y&9DXz0yzutulNA|0`Gw-I2jIxd+-Cu
> zS^xhH7ef`~jDK1Ge>47on?TO^-wkrM|5kVod=Fp1b?{0M- at qWqI)JV4cl-gL13BL>
> z4>^!?{+|r{!5#PoE{9W~3l4(Efb0pl2i^nYundlXU*Hq?5&RJ3y#MdQWpFwyhA-n6
> zxD#%N&%!R)04w1z_yvA}D?!fqZ-%FXl*RXE_7Rv;s^OO?625%Pk<Gq`$vL;#I{cWN
> z<K*V0OYIDfQZM1D1}d4qbAbIj(_{If+JIFk>fOuvU6U*xt$5YxlFam|5BXLYUa+dQ
> zQkp6c=e-HFD~M3xFnZx?#I*MN6{oqg|8{b`P^C-
> K>+)3M^+J9zb6HS_UX2cLWhh<n
> zSHI6e5_KXsSydYN<7D2-
> 4E&|%baouaM at jP=Zf|9IZ2Ru&p09;8{diOwGTcWR5yj+-
> z6=8+;M_92M<vU|7BI;- at ic4iy%Oy5YlvSdGYT59-<)TW`4*Ws`PpLsk3ovG1($ao9
> zMtVP{`hed1ACYJ<Boq<KyrAEI1x at P_GbSFH#VS&Mtj(?li*(hBQL|VjB%^r6p_d*=
> z_0RdHa#9~TFSlO2cu9cv>NyGBS57^DB&y}$D{fntP{k45H#cvd=){?pa5^Q`wWsSi
> z_hx(B#8EOdH#Ch}`nk~Nq>FMKA7WNgH_-
> i~W`VYp<R;FE at z=%gttRJJ(YZA_zokaH
> zdy=f0T&#rmPP5yC7DNINX|x}e7Ubt8uB~S6=8~i~zY#-
> F!jG1wnlL328pMVB#)Wm9
> z?4vMV)*0r!{NY2qvOUaQV?y!zjWj6C8oNeOUx_(NX>-y8@{)Z$-
> 8EYW>6X_&Y_n5y
> zlQRE*EN0}b5&QrD!_I#ZTnuMHJ3I&O!OoZO{(S*H0pbVvILP^b+o2!&-~jjycK<Ko
> z7w}pTpFk5l7Jh);|6P!C0j_}O!$a8oa^ByyFbZoyz5#G6$T<Kzp$(n at kB6UQ>wgR6
> ztiS(;7s3mm6PCf#;AU+8Yhe at o9{c`wxEbC8FM^Zc2_S0(-UBZMIS)Yg1^fW}{(86=
> zHp3>6^ZcF)kB0-`K5YD3;W{`CPJsPE&hmc)OhZ3B4er3UzXEcw80z8A$o*IFL%0XN
> z3Q`uIfSP`!1<8*bTOmD_zr*;vI(6MYe#ox>jb4?18*9-l*vYW1(_jCa*_o9iQR?(#
> z`u{c at x9s{O-Yibu_$o2~w6OT2)AA7x^Pt&*Ykl$Yz&rI4OcOlnFOIy$>2K^xQOO4n
> zCw1h7B`vF$p0i}l(jBgURFYsbia_kLC$Ii^nYLQY5^Y)TCf0!K-uCshJTCUKl*^8F
> z&1=0K9KXMYUpQH8(ImWL(wwzMQhg_XG?>3KuNINJS(ruOZqPZ1+kK3sUVQz_K
> a@&R
> zo>UgdGodWRIZ>`mX2$cyr8p^qx?trfN7o`r4nC%ud*?Wkv>^&2>4Ls5?kp{7wf+!S
> zjz5KxDV13njEGm85Y{_je}@~(oSKIf$DA97`(TYFCGVI+NhKA<OwA(JB5V at p)gEja
> zrMHGi^vP|(4K#<A;665^blre8%Qi`}bE at Q4IDQ3QrTwwG0w>koHCBx*@s>2zNlQ
> Z|
> zapC}nT2{tNQ{y?WTFz%>?|*)R1C2&T^5uN7I=)-
> GTM1hzs<nnKtJM*W>iB(cXQ5o3
> zLQzWEtrORq$WF at nmEzd-i^L63 at uTe0QR+h<XOB at 1^-
> hej(QBX5Cq|LZRceHoAD&W^
> z-==sZh5EHkOT0mjS76ps64}qZF5jy$$0wM;eEX!d(<*b18b5`MWSToCLQt+08S(8}
> zObkkrH29eF+o)rED>`jvulv3=bd~gooc-Z1>9OBUAgt>=4y;rA6-BL|q+1Rr!>UB1
> zC3(eaeTfRfQrC=LfQ?==>yPPsOi&%nS;-p?ZaR45Z?YS{rSA&DX+dd!yS=KTjgR2x
> zXUlGzn7`v2S at pMV*~&T*<sKq|TlImWYPU>x9zX9$mgBRGySI{^m>kcut;TonH+ai
> r
> zB}&NuU8r<3^QtO{&Uc|QSS-
> +1?LL3M==^9Xlayjh7A`5{5$6@<9BHQubVcjWu(I@{
> z?3uKOA2S!zpVE#D^&-}i at GpCKZoKpY;qeYfwfW0Dl15QD6miJerT-gE_Z^RXepRDi
> zl~>n%y^$1&+EkWFaxjIG>X+yo<n=JRdpfq4$~o=Po3}6=Eua@(B~H4?R8%+TW9{S
> D
> z=((LedJ%=|tYWc4IQ!eTZbB8AL!hXLg$6z!5w79fpg84#Cuaa^TXgJfBxj6H7<29t
> z69q(3%j1|Ws=txW+ew~0PRmPbWubAg`-
> tQw+FJd2J*5&=(+^LV>iPd?U}#<?_NKG{
> z|0ZnxOCSUFZ~)wgP5%}+8)VM^@7VF5hEIW<^M4uqJG>Ce at B$cu)$klR0N#e3U
> x6Mt
> z4E~Ib{~35SRAB`2a18tr8~@!P^ZrX<5gZHGV%NVCWX at mq{~rN|!+!7;?0h-<?^E!f
> za0#@-
> N@#{AxEy=`Vi<(Q at KpFC_WtegG59E43Kzf%I2Miq5AMe1pMov02#$uM;3L at l
> zAB1UG4S&Vn|03K7a_*nZ^S=lVH8#J<TkW|>F!H4~ux+c5i<W1#WO|?a(cxw5o$B
> FK
> z1li))vYOFRaH=#hQJWp*?5`s-UU+fV<qGOJeD$?ioq$pQAfQn6H76pJ1`}Dhlkn5w
> zd82!f+whCZrK!n6F7-v at C60%xoI7vPhF&&a!Te8u)gI(2R)Q&Saf+_lu1#=?OKK5k
> z+Uh*>F+KU0DGD<p%okZtp%!bf#IzWza=H%GkFt!k%&Z&3qm at Rnxo^?8qcSzmV
> n?V4
> z*RUy*TDHXQ{dFUlX(5x`L!&w;B%N0$yTVy^GOYKWQli6~x<X6;7K!;1QtgXmgNF>}
> zIE`7wD1Vt)^<@&Lp4gyI;qaD>4lfq{ta}plyFSH2Z}qS{h^yr(J*M2_QG~z6%n{5S
> zMqH*bCHCdAy)UO`7v|lYhdWvRWq0lehk96%=yGpb!4aa;KGe?5Oi{M~o0ZEM`6h
> so
> zm&EHVq)~;!L)0bTy+%nY%SN_eo4wGc-
> ;5<ndSIK3kQn`=OKC^C=JRaWxZ;(;m+955
> zJ+blpaipJS;*Y)4Pf8$zSOJ=?*y_lI#Njk at jeYUO3c*i?E)>puLBeXEp-5E~O6ZCR
> z-3b&bFqS^Kt-%>{kuO^v!mZ;Ux+;*_V6o1lsxGLeY(8<|RC9A;f>VBbztp#F>6A6c
> z<^Zn1QdDNPYNid|&WU`clFych$2gI;I+huqqU+#)8Psi9O}d^26M$yoj8x4<-A;5h
> z_l;rE6$!5jN01O8F*0RY&%x#ka?bmlp_ocL<8AB77IkAQQn<y4uCmU?oa&g%BX%
> Q<
> zTd0gUWL33ui80=g`fv!{@pAi!6O}(#vAj8Xn!>K8jy&W0;{3 at 6H$aWfR`-!qN2?pC
> zCMT<td+W%{Ahf7l%rT)emWMkK_63p98SEQ}UqW55ma6 at 2M;xMleCyRpjM^~
> 6+?);d
> zPcZqwoLpo+&Snk~_%*!d**NQ9UzmLeO|i-R|0-<IHyitZz}Ta5_J0H1f}Q^X=!W~S
> z-*>^m at EAA{Wd8o6a5=mR&Vw#E3Vw?Xe>c1j-
> Ucs*7lGLLV&8uUTmFmiA0YGkYeBx>
> zcMo>_x8b93AxuFloB(nTz&Ehr-vJYFB;1Srek)uD=YyQ at -w%E8TWt3G;U2gJu7GLS
> z2#3NCvE9E4Uj(u3-v-;^U*T8S at ppmj{cnQ at u;YIOH-
> UVg?<n{R_WWINCtL$V&<cma
> z{mArI5ZS&-<U5}qG=Mi*E{&H)8{^t^r5Qi!`!g%jaM;<DxmA8TW<9SEcy|Z4>lcT#
> zvI>eqCbgWLS}4liF|!(hIU4EhI3NnYMz&HNsBrJZmi4WJ+imVnT-mU)!CW!(S?*I>
> z1oja=05+1TPDGxm6Iod$>ZW34xQljD?H>r`e}c<@u3B++cKKIH_lo(&=6||X<v5Vg
> z{9<#~Upnqwb2gH-
> lH8NFq6;paLYi4T5oeMwiE713gMZb?CnRD$2(5R+U>Z8d2RUhp
> zd|E0LPt399$5^fS?pkq(B#42TezSAKi4u=Mn_7wBTx)HuPBh!85$AfiTGItPiCz)@
> zr)g<ylHp4Rxa-v(7{b$r at xG|f$DMZi8S3+P(ip0R2{zp_zv1cGT5o5*%m at 4M$`p&V
> zBAMlk*@XVvx2kCCC4gj*u(|<UAhxD6-ej4bagvn9FXHd-^c^dVBxSQsp<)K;H9Wv{
> z+1wsrxEgxEn!{1sN)39H1zyW+Y7p9A-
> $9$Q3e0yesNz2_NtjA9wpjYIMNSWQ3Vv>$
> zq{TrIh>w;W%6`yMJZlua{=aSxM$9RJD4%eEEo?^B&%4gNNEo|u7e`iSF=uW%SrP
> Xe
> zH;|5VkqTeR*hAr4cJ<UNmmx)E4GWV*QQ)D+f_1#1%Vr3!YM4JA$T9ulwEACI(BT
> 3v
> zr2UvBsR-}NwaGvb>Y20$eXZ??Hst}cB{!6ObFjcJ6iPV78{2~ybBBr~KjtND6Hj at E
> zjZg2uZT8(yvL>lcMKQNH<O82JWuogO0nF$2Tb*CO*eq<)DYR0H7G7E@`FmHxnU
> 8tO
> zO!Kn6t$9t-*7MHi;a$b?nkeP?#^iz=!Xwc+HeBe at STB&99->X0Q<$`3iF9 at INt<lO
> zmbBR at SzkG8x~3yNWh7NnSVu`(3YGuAy)yxl^Qi9lLQIIjV4w;TFo6#f+iO``tyZ!u
> z3tMEhTFE2rmEDzPS-
> 6JL?yNM{YG#?4)mpMhVFHGL11`XJOe(~NaD*dV!EsT95NuL0
> z6!&3sC1Ao4%;AE#Fy#Eb*T>i2F~{oQD443hMmt}BeZGGEuI}EtTkqcCQVPSe147Dl
> zv^7a)$t9C=t&at1M-}O^y5X?42em}EX)SA&_me?5g*E8s47+r#r{G{@>0vvoY;nps
> zt>3}<AFS^pNt}5JVIRpv%0O*yDHf{J&{MKu&siSXrRxplH1 at pN>LMtGMu&J8|H<}
> x
> zwJgZC_~f)oy<V-0%35W*b{S^8UM)&V&+t<)W-
> UCXC*M=qvY?YcW;sQP{=X5u^m@@x
> z@&Aum9aZ-Ke-Ko`xj at eTm$?5of)|2o!3N;s`@e)OK=%H>6-
> ccAF)#+!gWm<R|Nq<I
> zTi{;sQSd?VejxUPS at 2vi4hFz!;JereZU;s1DDZu31Ah%(0wf;bQ`iEo1LuKHVh1RK
> zaj+BY01t}(555NO1UG_fz;^Hey8mav%fKP<IB+{U|1R(ly8i3H5LgG+fIc8G{l|dZ
> z;r9Ug{p-Qy;K|@)^q=(M%a2#jr{9G&N2`zbV_rWdc_51P%Xj4dT5JAFXd65uK6E~s
> zk;PL|dYwXaxE_7uc<Zv-ynZY~G21}id|hb1Hkz-
> CqGKzhKvW_M(rT7DF1WUTMXDkL
> zaZVd0VY6|O`C8j=a$0M?2F%ww^Tk=JQsxDGC7QK1&W#SzH0Eo-
> e62HI>&@2%=4*rb
> zx-ea}ev{b=_L1!bx$E5YK;-
> qo29A(u!+MQo?UT at 6IZHu;578638%+LUN#4hO@?L{P
> zx#RluP1FqI$!@N<=Llw}h4R*+8W%|66!0%_Kts7SbAU^UxmUD7JiJ8C_Q{(BNf1j
> M
> zyiRekZj)6nBR;`u?j6^O->fB|X#y?9Ib56b=Tf8>NxOba#>>cB6c^)nZj-gS=uH(z
> z5grnCw32b+H&^dvWuB?F%_Wg at yfhkp#>G$K&DVx(z~`OnrC;@aaaw<lwyq;0;-
> l$|
> zP%F$EmeR~jZ%VTAos(CJKffe1G)^62fMcCih9EImE*0b(rV7i1oQ87gshQ5YM=GH
> W
> zR=N5YYy&}=pLSfN5jKFZ8L4?Z6#O9VPyB$jVp+T)Pw~zhU^nl&;}?D$q+f#yw&z95
> zn$y;vb80frR6DPm+Axe*S<U3su5*8RIv{V(T0_Ini!-onZYx|qIxI`z3?~)IHJftu
> zqAa$s8;L5 at V7YS}b{`1_Ub(M!9*gY}InYZt6rg9V?ep7mWHfT=F~bw`Q?+3?Q at gf
> o
> z31_P(^-R`1S_>b6^b2M;1cIC_b^~d1lB0Emt=>E~KH;qQkdysO8=sX~NFa-i_ehCd
> z9EX7CBlfuw(Q+Q1GREzEb)oTE+h9B!IR<Mi33Aw$L^v{^oo at vf#O2W*^)y^z^oxL
> V
> zN$S=HflwP*pIq;<zCS7bIJ44b`4MRC<BXGZ<>ri&cj at VjUufm*^eNIUwX2kWu0tSK
> z0eQh~!}?;=ap!OZ{441!V=f<#1AeAh?ihhgweze7kuvJrN;%qvDC9yWUn2<tlp2Zt
> zzX{#*CaeEXSpEMF^!+2?c|gwmI}`i>egA`C9vlQ?;4JVkAa;Pe!C`O#xDWmPHXw2S
> z{ovc^@ArcDfGUs}fIVOhkaPb26l?(BK$pJ()Pd;rPXYglF8?kdcl*5_$a#Lh1wMct
> ze-K;+E(GU*72wP0^8W;G1J{B{ATj)>f$yN--wW;mqVK-|h`;|ba1r<^dj6-tC&BZ;
> z8Q`7h``3ao at DRHG55Ub}6pVmpfv157=)*4n>B}3XKacwp>BlXHp~)59TyKvpR_h}A
> zS~IKp38pH)hV1K<ai~1^no?s^T>EKqc5<9N)7jCxP$PPelRVDeXf9PsC~H{;lbdV)
> zB-!h-UbFGaaK6M=*I;4pJzsjTzmIJXvJ&ux^+ak}tZJ;mR%0Yl8;Sd2ha6)Vcy_r~
> zo14Bwan=qX2izci!+%6>HuDuxG`4GGWW|b9))>OwE9=m@&F0;!a<ex^0GHb9?<
> %9z
> z%NX$+Z0?Op`)Z5LXkFg`Yk{crs at oqd*Eua3fkhN9Hqq8Ne-
> TmN?Gmn*@i+5qhO5L~
> z{@5MnYc<xAN>fX~#(=G8<^UUJ50$D%jQv2(1Zp7=At~$-
> PPC~9Hio`v8tEzMB4e9K
> zG}P%H&ag38sng3^Pg(OK9aJ$<*n0Fu1!Dn8JT(k4smq9wYe;Ndx;(-
> MS@!%CiA4R^
> zQI}-#Fps3ioga9wUuj^(5fJUzwJ=L-RXmg&j5W<vBPrv^+XTV7;Fqu(tkTGFT8*HL
> zusj<zGj(zQs<o^7H|sD__z+drqP3sO^QDDGc~<34P0>=|A#_G6lN5IJ$JXm_6qy8F
> zt-daCmus&}-
> fHDdNYADoa2RQX;S{G<i_R0qB0da&@C*%V^5eFfx!xu^DO~(LVYc9w
> z0j)4t!P*^46FyN_nVbrtWbe8Jn-#G{dM9kD^iH~dEtq$HX3y6wU2KbFPnKQgxIVXf
> zl1C6Y<)XG(k;Hv|foBjYPg8EeR=Exw)-Jo=3(`hSN3h}zcByQkK0*m{4uXsJuD>$f
> z(iR1>YZPis8N^(Hi7eMGCrbj?^4HNsmIKSlvV~hO)$p~;$uh^cC1ae*vVS>Q;-$`S
> zctAK#MhlFYa!Ro2^%U_qD$XUM7W3hFsCV7TqTZGxpF_Q{!E1W7!%u*EyQ7ON^
> ~TDM
> zkE`4}z`S>QaEc0+MXTKrR+d)t>eS!5PA7vhWms|vvQ_jW5f?IKA+JtM>I<&SCg>P5
> zxn;OGI5jmqIo;cAOzXXZav+ISR>PvK@{;Cm@^hD`*GuL7_BB^pxP8bA%2E;27N6e
> f
> z36!s#*ldk=ze?h3KqmB34x|>rYubsdh2<PdL5_UffjuYaJH&^opJUPf%cBPVOuowU
> zwa5Im$NY7L`RfY(D=|CQtN#Ba^wd{~zKZ|f-T(I?^!*#aJop{(5IX)(z`uZ30rCIO
> z0*L{Tv;TjD&i`>BzW at DT5Xjm8j{~Oz*)woEc7VSEe+-7f)4;dT|Gx-s1J{G=z>C2W
> zsDK0DVsIvS2>ZYr!7O+ at 5dZ)4!2;L at evD1vRxk>Fh8^I|;5JYPau?tk;C^fXw}9=S
> z2fP!Ve;+6Tx%=<w;NjqN=>6{puLVcJPVhAFKiB}i4n7TJf4|rUt^;#G;sP!Prvcd$
> za0}Q0R)7!Czi$K5&wnO;o%=DvnKOl3gtI26uJs>xGz2B2KxYV&qM7^Rknfm5t|dt_
> z2xoVGW-XREVb-x}%c<%}*j_&~jkEfftE$z9Htj+^OKuuaoi6oGtl}9pD)HJHvGAK0
> zWW%zL+ZF*k)@9X{YAnuu%TzX7DT}V+-K&egQT%>66~ES-
> Qo?z0!pcyX*{_cdd2)n>
> zP;z%VRw$zg6Y~N>up8LQ2JV$D(}lD!;U1aX5)wuD$h;N~q0waXlt&*W>lBBCZ1x+q
> z(7Iy1&okYJq7Qc`y`K!>J7G`AS;AYYg~vatzfqU`;WcfEpoJp8Om!(SPRrGddW5q;
> z6>Z$pnj}F*ZU+vh-LSpGahCd~O%sl#6smKz;7{2FBFWtD46Y&OXiQOK<g?67Y_ya$
> zVn}Bh at 3UmH+Z^2-T!^&n?8EH}IT^<)tLMkA{=!3Z)v_r$(=+HBj*MR9%FJ5T9+lDh
> zhRF_l=NLFK^%lLgHDf&YPug10<5b<6(c?F|x24DLG*$f$Bx}2GHz}#d%|i6|FPoK0
> ziT0Fv5nGwoAy#i%*9uLk;Lm1ZKDlC+JV3%$3h*uwv#XMb*{I3_Zhc62Q?2OU(m$e
> Z
> zIuw#P#?7;ryx+VKmegUAe|ejnTN)}={B8}%wLDwlRwOy`DC5p(w>f8WbZ{gXqgGq
> 5
> z^4eneq&ffpDs<7iL?=c6FIv6yGwA#h1F#4-0Ezv7D|juq1;}~-1+WpE20n~_e=Ar3
> zTfo^sV*bAh{uaCg)IkaC0h_=hft>mOL-1Z8=L4(*ayGzO;Njpd^!zu0qhJC&8~iqS
> z1o#d*|0lq$;JM)O;N$52?*i9 at bAZJCzXDtb4ueJThhPnO0(b};fZX}_MsOo|4Y(TY
> z2hRkb#};raxDHgnPVi(P_x-&Eyct{t3gC1gX9Ro{yaOzPVIb!OL|_H at 9=3qb068mQ
> z4wS(JSOp#fWE}2nX&=Zn8uSS5%g1sl9FnDc;!Uhzm6Xcu2{fMafl=EXjira$i|fMN
> zHegR%UzfT(5Raz1By|EdjH0aBiaIa*Mps4V-^6q>WEtMWN{f=$jkJ6VSsi12VDGgD
> zy0ngS%WWJL*Rz$x at r^6JFQ__OJolHYvf%1YUh^M>ci(SRcIwi2k7#NLOygM9!t{e
> &
> z;7S(i49-nYgaDu9PDDG*`W_wJEEBHaGj%_tjW~^ZFHXb(pKi?>@yX9t8hS4`Uj4?w
> z9wj27BB at rktvO>w_2%aKFHE#a7`K1fRmYbbWFq^ar5DpxwTAP#IXM%FO3Q(Ra
> ordO
> z^Thlc<mYw{J24@;_+sAmCEIp&cv)MNcxmd=jwKExi;*5M#blaKC3G<ji7$+BZL!h@
> zt<-}LWytBa<O*emIF=d1myD7b{35%)-HyftTSz)!oh2?&R3wc{k6N6a<v+nr2D41j
> zc6-X5l}P<$6Vn?JEQ|9x>C9laT%1kzi8`;pG8|>?!*(mDJBB at Gbj#urnRW!-8cFTa
> zU1JH_ at GkEO$u`ib`DPvlxjM?OtPG+6jN#TdJm;l&ND_G^s>A%s$u%juxZN_IgD0{(
> z*`<iM=GT|C<~9%RP3d?!Z8(j(SY~9(Mo^#>C-
> gT{TdWecWEqY0W}=mbecSGr!(sw8
> zBcXy#mKSREW}#U=<PQ+gev|#jIjdLPduCYjd)~2)Q$*Fa(LsX=!<v&|_Iy`BOv%zu
> znfV}(J6ua*bxTdzrDCILvqvD=oWi<G%5=?b$b>GMIgW-k8cVe}?_#;;xYc-GWt2AD
> zXmEObv at is%&P<jGxRY$nPsQ<xVqt8Epq=XMXd`(Ht((iO1eSI~oD%t!(YfGIbz$my
> zqrsqZqHUwvXMVu7unniG=M^$ywFMU at ABNTNL{~3TYp7<>t)}9-
> dmp2k(>!7xn!BW3
> zV at WHfksMkx9he?5%cfixdcJ996HBanlBuKIc<*heaRpm5`F4GtT`a<e`W<DaGTl)<
> zrV^!#j(2BymS)qpr2Yi6vbm at Gv;7P}dtS59tnbAVN|2>6#AdC at 6i~M4f-=Q9Sb?+I
> z3t!?vjTiJn)kGxvq!DM#?km^*T`gm^C9dF*!;R#+mZduRX>n%#Z>ZEQE-|H(>>A13
> z_Kx>Puk+U-4NzbhQwd+<lOPRCP>J7MBvl+E8ZrkJKU*)kcCsWgw1v2evAky9cgv}L
> z-6c(A)4pDQ_K`&kiP1gjMA{Pnk9ci#PW1o1R>iyvonQR_atFZGpa~k_(ctsw`~M8Y
> z79eK<><4q;vEZlZ{jv|>P2ewpoENwRBp%>VK+X%4{r~rXyTM1mUEnZ~z5frQ^Zx^
> Q
> z5m*FI0PjK99|gY;o at n*{SD@=(24ru*tHECI5c>Ro0MYeF!B5fO<@~>Y2cHCYgO7l
> _
> zKneUWdi)Q;o#1WY2JlL70GtO-19HdTC(!G!2YbM!;3=R7d<}j6L*Px|<=`41I)4*9
> z6+9B$gHHc<;BUZn;Kkq~@PFv|vR^=S{SPlw-%nWq45>rxLEz1yg+62ZBTV){`7*8v
> zlRrJ(qyp2FM@|io6vc?dA-m{Z%>!7qX1A&-A^CsF&1Yn+!die|#*rCV33F}&#K<ZV
> z7rW{f%_TZ!3tgYn?(`~9RV;XaXnbsIVY)CrHaJq;KJ1p8;24~isYiTjsom24VvSHy
> zVtf$Vc8^c)+&($JYeH6NE at s*_G+Z1ljG5b#0?(iHfhn at vETUt_qRvGPUhYr)al$?m
> zHL(_3u3)SJI&{9X-JJFdnYR~Ks+A_gvRLk2u(kxPOXkgR=@K>Bb!#SPzw)>zo%o0$
> zLQ=;EnafW(dS|!}<<TZqT=rg8*^M9zgb1Os8gZa4mv+hS22MUmm at OpL=-
> }mkyJZeZ
> zKBFB;8tO~-
> U_ks~N5&JO)#4hwm~ETbr^_7oSKY5ok|J%pxSzWm$L+g54 at b)mh<oHo
> zAoY7U!;~2$$3XJFgH=feGdNmY=qLD7`$=tB!_^s%_pe7Q7feW~$e`|~hNW8l;C{K
> G
> zV|<}doz~t8x39`=V}|D>%GGJ0c_WmXyDH+LSS15!W|Ny!0Vj0kkQB#rDZMZml;>^
> z
> zqRSg8IIv|Ts^NtBguH3Gu`NFszI<q8*Hqy$A|<!RCYA&X at 5oGevpv&61BnZvkK~i;
> zhLhI(ZQC}Ap;Dx7VezXg)wv!mQ2*(&FPO!KV&tX3?bxv^c(L2AAZd@*iGP>~qU at aL
> z&|jEr`|&lMMacVUPtKYX4?ioMwmIlhOWIyY at KW!#xEh%`63>UwF%~$JT*vBn+d
> +>j
> z*O81{&6UoD#BX*a5GxB%8SN>_J76NGh5%d5#kSpi^)~wnRd5a{YA1aJ{qXZ3Ga=
> uW
> z^u at V0O6TFC5U;&V#d!5da9TC2Dl_)s06Hp?8$)JjRaQ1**U(XP1kBG2tXz<}H6zd3
> zAFZSm%#e;_PL}app@^jX+ at Ub7A4DcMxBR+Dy!4SOt3NNX#uLhkN-
> A5*&82er6o at No
> zI&Eo)6PguMW|zKFUC);7EfxL0fI|5W(LvGwC#`ZRXa9-*zXz-aj|C5+-^(3<qW^yk
> z+zGA+CGZUJAo~4Bfy4p)377|0fC+FZkhlP`1FQpUKp%Jlki7xlMECy~_)G8t at MLg5
> zy8qqa79i&ZjDcqXi4piZc7QK~2G|Oo0Up2}a0hq~xDi|ht^ng;42**F!H2OGTn!!#
> zZoy6<u>f*6z;mok;O*%AOJECl06qT>@B*+F+=ost@&0?jM&Nw<FF~i at 4c38&fz
> Q#O
> z(x-1fG2K3?>I=h2P&H~uW>y)U&L^{cEDT5ugm9BM7N$FzB(2IBypc6ZTAd_F(>~hC
> ztFd{KSmHNpU6W{@X;mHyTg_n`>v8^b>5jE>hzN>Fp5yBXEW^&INsR?E$S$yPM3
> ?kP
> z-
> &&^KZ6~<oEqlNv=&Jc)&FqUUw9I7llg*w+SC++B{8~$;`fRIKW0fWMAYwKsUayc$
> zoMUTxu<B%vAg%30^#?C6HxB5vtFF1$DVeF5l#&%R{tQBTy=gyuBkYqF?|H99_}<
> A0
> zE6-
> _x?oSSSM5{0NLJ_oUW?l9r9_Q3uUb1b at je6up;Dg(pPQAR4M<M!Xy`0Y=*1o7e
> zQok2xS-B&xxS60)+Rv$z_1YmdT1YgW9xWjUR_?3UO0zS%K?brjJ~Ly-_tqFGK<qaf
> zfM>|a9F$d^6+1{NawU}Zmnu~~)d8!BbwOxh<|XXtoSrXXIhcEFKK+KcrHGl at p@kA
> f
> zYgwiWa6J9X7r^UM6Z_Qi2DvESmB7=gn>U)&p6%scv6sVhzD6`Ghi2MpP}!x at L0*
> -M
> z=gTuCJaS^Bq6 at vL$4*9Rv8#^nQIkuN8MIms4PydxC4I9;S|uM_U3=cAIToYQEH6
> +8
> zj_g=4)-l&1hzgwdS)(E1)Rr-ox=AdP>5FQA-++3&eJu=^u-8mb+<-Z(18)jJiSw?B
> zg{{zrI&J7JG0NG#9G%)8j0fkG2~{)?$VsD?a3Jy~18W9`9B0(W>JJ(rahc$wtJfT=
> zRM#NvSbLaf+~rE0LrEi9v5e;_T9W>mDvWM5$J|>IpyLK<x#Z^Btz88v`$D at ZtG48
> p
> z3o(Jy4h9#x7FzAm08 at r1+E;2|&#KIpOY(TWa!?ADQ&-
> uJNc}4FW#%i%1MgMz9R5}b
> zZQJgxatZnH?!i4py0156TpFMiC(TI9gh7~md~O<WR+$}Mlvt^z`%l2&oP|mQ&+OY
> a
> zT^Gw->V>?8E|sLyQfHF~HFVX6^98?pBV6LQR_i~lLt6~2beWD4Ll19{l&cA~(sfU7
> z<0y)!M2u}bj}5emQQ;a2c`(5GfpyDt{qyZNu3UZbl86vU^GMWR`{O0VpW*W`zk7+
> y
> zy&)c%DNf`ftX>@`>Y<4?Z)UHjeZ^F``*E`A+YFOUaU7#$-aL^(;-<p<LCT1*l;Zoq
> zJ?voFwms%j2ljD&!tXxzOyb1p@~UBDh+48(k!rT4WA)70GBds$O%0E2#YZ%?Yh+p
> {
> z>UkuQN$n<bo~6NA99%M)^XyfCg3dqR`C7~`dR7<h^s+BEOh7n?-Nkkg)Ie-
> rkUY#A
> z=Lh%VhIA9>PE$p5G;A<y at Hp(9LK<l0sZuVFx6!=n8A=9R1+y?ZoF;-ehAHq`B^{1|
> zF^x3d?3iuAaa&;WyFUIke<0$HO$<ec!HD1LJRHjOleVGGLt~??yBwTEoWnAQ$NB
> %i
> zVfFtRt8w0fzJC?i4xR+${QqyE<9`#p4IBg)g72cc%h~^51lIx=|KH31MXwi~{>9)$
> zU=FMY4+mdChkpx@`v7+W+28*Yboh^eH-
> HxciTOVQX23dd2KW*B``zFT;ML$&;94*R
> z<bJ at Xg0G<0-
> wbX7b6^X29QYo3{@;V!!Arp$xD4z9Tfs{37;rlHS8M^V14qFQuoB4m
> zfnUHT at Lup*@KP`V#(~5Md=~q_JHabK1w0F!2fl)x;7%Yh0xtveU^9>yfz!dG!Ts0_
> zZUQqv_5;Xyf)58WF87_74M8YhK8`o$*x$m(0qg9M-
> {s?8ZO4RD!D*h|_Gk|L)7C~E
> z8{i$+6L#3q2#af at t9+f?2iCtOp|lwBI`+K=GMlY9ZBK;6iN;uLln%$y6y5Yr97aYJ
> zCb{p8ooXtON_KJa+SMA8zhiWw(0i3!oFqrORJoxmR_)G1Rp1fJsdH~e+2zWu2!XX
> H
> zX~?uj1`%{c{*doD=EK-
> bwg0)?&aW9%W%poV8YR|czr4niS{oLuCr$+OYJDVaV~xo+
> zJ6-0<+(N~$jMEWyt1yWoqiPPlWYikOgGTL8Su9HXjTW+0j`d_CMVMHE;~&Iq_hzJ!
> zpbvyBgF$qI_e(J}%it8M=Hv`zCI-cYx>}n}*XN+ByeGYbjx7OsPJ5;ARAE&O*@Ya&
> z%r2KtI&x2QNq&zxo^p;;$w{)TNjXxEYLmUl%(Wn=$GtF08pre6WgJY|Ho0cTu`_M
> N
> z?Q6NMQF)bUy?Lx8FZ}m-
> smHZ!S>zB?QM<;vMS&u^A)YQcCx^aHYtQWHl7+TyRR<E$
> ziQBGyp-3PrZ>fTDid}U+zBkm9EX`r<3|Au0%;FvmtE{SurIt8Fw{_At9HFaoIlH)b
> zm#Z7eh>vZE&nkyRv$HZTrd_9Zop~@b+ve=&W}K?q&g)h_bMl;;&tl;#EqG}K+Rt`;
> z7CC(>(f;1FA2;JyWx5N+FgFTw5#j_UY!wP?RScJMfU^<FR&fnQ5D|%JqEd+-pq#Y9
> z+g^2xS#}Kyq(L8m7swD<K~Pot7SbT~-fE;GZ)KI!rLFZ=51%#-&>1f+J<;(AIi+;l
> zHaRAmB|RaVCA at x~*RW+-w#-
> SlhAeWmodWJLvZoQT{QT|0{?;Qci(kkyz@?IOvcPHb
> zU}=kUPg`GXJZ+G6(<Y2{1kNU`nCd6pn6SX at hPjIVe-=8w>X`WdD^~v(|NozZn?Vs=
> z0-gv&|Nk_&8OS++WiSNJ27dq^0q#ZbzX#j_UIm^Dir_5J10??cE#Nia3UDdd0tUgk
> z;H%gI<V--hFF^JIG(Z{b08au>1iuaL#~$#H;LSkn1)IQ+(f_{>{tbK?d<nb{+yo>h
> zK+Xx+0ak%C!8frBd;lzg&EWCiQ|SNKg4N($@Jw(P_;2+8{{rs=VjC!er-L)WQ@}&m
> z0OY)YcY_*u4tO@`1&;yuVGDRSI0g=Y4dC~{&(Qzn9Kjoavk#2&{{e6Y_%?Qc&jQ&)
> zAomUa%-RIL-
> j!Vd%2d<h_|QmkeAo2Eu4#_v95o^Djppp8O^3>dW)_afp6#7_Qam@*
> zvUQ9NZRarCR8eJDknVX8pUa`eE8XT6h_4Xqr_RBd&QU0rJqlyPyNiR9llVWz#`({7
> z3BU~A&MV1E0jUh73aTb*CHrKfO}wX#X~DHH(H!^K*@Hi2!7>NUsDizvUaE4UeZ
> yRs
> ztm#arm^5<CXHcuDCJMwMmwlXMYGicWOg39b^Jr$iT&iy~yXZ7vIp at u0Y3ATW4
> Zc(6
> z(gwqGoVn6g)1C6eUQ--$E|IjOQuX^!M+vqTFN5r?z=4Ji8z1rMPITN?#@I_>Kn;E8
> z2$`E(<%KfDLybtbu-
> L?ZR^uEJIW5Q5MhXh3W^#CYad2d0e8|#{TnDf?U!LGjL1d at k
> z^_5cnRgr!{LFIV6NdBPg8XGC>93I)zE0w{4Db*<V2Cs{&&kRti=(=o#@2X_e#`plB
> zNt3^bnw3Ua$yB4oa$A@*#p3KK&(mECoNW=%ntx+rx-eR}Vz?N-
> qi^sJS46pPh1|_V
> zidK4phK@}{WKrDd7yBeDH(Qc5mpJIa?5ox0Me7;DwMrn&rcHVxEmY7e;Q>b6+H
> %?8
> zq#3(prD$(`(O9nHB!(%NT63j{%oqylal*MNT7&oYsl$rO4vrMIkM(ArAfDlb6GEAy
> zBP<yylWDLi+Nam~S8nvFM_H~haT&P>Xz2bP6X+VLhUtXIeU8qtd$jp^a8B=;h_8n
> b
> z+CNNBv!xrytOO=EOZ(>8SusWFVz$8(t`}Au!e1{9%*0ddTdd5_PL!H62S%8-u!bPI
> z)J at L0Y9GG+!Xe@!*v`>=9yGhKK#k=ri{5Y)Wyg^wlP5dNM>hA$8K1Hbi`zMrY1keL
> zqPooQ^sws^iW-tjJ}s9K20FBBl79=MgWLIcY}+{UkImN^hfc7|g`!dJ_LZfwGWqgK
> zb#gsY*qGg{qr;~hs3N^X1O{w}+e$?!tlOO%+;f6-3g?lCv~t}vj#=DG0_5EClD2lZ
> z+N>Xm>)=}`N3-
> r1r>R?G?4NX)naC#MMi`R1R(Wju*gU2;c{EWvGEd}+w9XXk8|w?Q
> zZ^=0~wsTG2?%!7~YU-
> l6Yt8+ul8<@n9X7UF@@t01l*4H&sfyke&bQgs!fTe~(zBB#
> zJD!?Rlz!}abDW5x4aJJg90!>?DwYx810QjvJ3}mEP%QQDt*jh~&W||P9N)KI;v4^d
> zrR#ka=S6`|WRoY6N+9dnUh+&xpxm(8BehUhr1W*@g*>`uAaU#i?V#uDeL1E#{k
> @&y
> z>hyD$M`%N^3V?LeV&i~tX{}S>va~H{Z}eu|gwZ+Y2%SnF at e60n^k1~Wl1uPT<LKG
> z
> zW$MHh`o>YH)NUA;876<rb4tt52-5ptzcTo0Q!mI}y8+e3mb!KW;+T+{{z&vp(Qpmf
> z^AEWmO>iw8BAu9OJ_ at y;R<4CG4a4PHAaxEO(HT@;`^phjR^Ln&k9O6nR2~I|K
> @?(0
> zNjV$zx2^}<=Fx at Oth39(2mjcMiPXp@(nDEK%u{9E-Gx+{I}$A#KBv87>(Q~^p}8z>
> zX^uU}Qf!!SilD=CJ4PIZiM5hpW)N)nTqe7k=&aGe5`L?yB<*vty#Q|PyeP0_?M5>6
> rOG8*<OuN6@#52YvSwb#J0#e_Dus at n_9);G?wp8G)^>M1 at 8@>J?G=ed3
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/backend/src/backend/context.cpp
> b/backend/src/backend/context.cpp
> index 5adeabc..0991786 100644
> --- a/backend/src/backend/context.cpp
> +++ b/backend/src/backend/context.cpp
> @@ -398,7 +398,7 @@ namespace gbe
>      uint32_t stackSize = 128;
>      while (stackSize < fn.getStackSize()) {
>        stackSize *= 3;
> -      GBE_ASSERT(stackSize <= 64*KB);
> +      //GBE_ASSERT(stackSize <= 64*KB);
>      }
>      this->kernel->stackSize = stackSize;
>    }
> diff --git a/backend/src/backend/gen75_context.cpp
> b/backend/src/backend/gen75_context.cpp
> index fa8b029..4376734 100644
> --- a/backend/src/backend/gen75_context.cpp
> +++ b/backend/src/backend/gen75_context.cpp
> @@ -66,37 +66,39 @@ namespace gbe
> 
>      // Check that everything is consistent in the kernel code
>      const uint32_t perLaneSize = kernel->getStackSize();
> -    const uint32_t perThreadSize = perLaneSize * this->simdWidth;
>      GBE_ASSERT(perLaneSize > 0);
> 
>      const GenRegister selStatckPtr = this->simdWidth == 8 ?
>        GenRegister::ud8grf(ir::ocl::stackptr) :
>        GenRegister::ud16grf(ir::ocl::stackptr);
>      const GenRegister stackptr = ra->genReg(selStatckPtr);
> -
> -    loadLaneID(stackptr);
> +    // borrow block ip as temporary register as we will
> +    // initialize block ip latter.
> +    const GenRegister tmpReg =
> GenRegister::retype(GenRegister::vec1(getBlockIP()), GEN_TYPE_UW);
> +    const GenRegister tmpReg_ud =
> GenRegister::retype(GenRegister::vec1(getBlockIP()), GEN_TYPE_UD);
> 
>      // We compute the per-lane stack pointer here
> -    // private address start from zero
> +    // threadId * perThreadSize + laneId*perLaneSize or
> +    // (threadId * simdWidth + laneId)*perLaneSize
>      p->push();
>        p->curr.execWidth = 1;
>        p->curr.predicate = GEN_PREDICATE_NONE;
>        //p->AND(GenRegister::ud1grf(126,0), GenRegister::ud1grf(0,5),
> GenRegister::immud(0x1ff));
> -      p->AND(GenRegister::ud1grf(126,0), GenRegister::ud1grf(0,5),
> GenRegister::immud(0x7f));
> -      p->AND(GenRegister::ud1grf(126,4), GenRegister::ud1grf(0,5),
> GenRegister::immud(0x180));
> -      p->SHR(GenRegister::ud1grf(126,4), GenRegister::ud1grf(126, 4),
> GenRegister::immud(7));
> +      p->AND(tmpReg, GenRegister::ud1grf(0,5), GenRegister::immud(0x7f));
> +      p->AND(stackptr, GenRegister::ud1grf(0,5), GenRegister::immud(0x180));
> +      p->SHR(stackptr, stackptr, GenRegister::immud(7));
> +      p->SHL(tmpReg, tmpReg, GenRegister::immud(2));
> +      p->ADD(tmpReg, tmpReg, stackptr); //threadId
> +
> +      p->MUL(tmpReg, tmpReg, GenRegister::immuw(this->simdWidth));
> //threadId * simdWidth
>        p->curr.execWidth = this->simdWidth;
> -      p->MUL(stackptr, stackptr, GenRegister::immuw(perLaneSize));
> //perLaneSize < 64K
> +      loadLaneID(stackptr);
> +      p->ADD(stackptr, GenRegister::unpacked_uw(stackptr), tmpReg);
> //threadId * simdWidth + laneId, must < 64K
>        p->curr.execWidth = 1;
> -      p->SHL(GenRegister::ud1grf(126,0), GenRegister::ud1grf(126,0),
> GenRegister::immud(2));
> -      p->ADD(GenRegister::ud1grf(126,0), GenRegister::ud1grf(126,0),
> GenRegister::ud1grf(126, 4));
> -      if(perThreadSize > 0xffff) {
> -        p->MUL(GenRegister::ud1grf(126,0), GenRegister::ud1grf(126,0),
> GenRegister::immuw(perLaneSize));
> -        p->MUL(GenRegister::ud1grf(126,0), GenRegister::ud1grf(126,0),
> GenRegister::immuw(this->simdWidth));  //Only support W * D, perLaneSize <
> 64K
> -      } else
> -        p->MUL(GenRegister::ud1grf(126,0), GenRegister::ud1grf(126,0),
> GenRegister::immuw(perThreadSize));
> +      p->MOV(tmpReg_ud, GenRegister::immud(perLaneSize));
>        p->curr.execWidth = this->simdWidth;
> -      p->ADD(stackptr, stackptr, GenRegister::ud1grf(126,0));
> +      p->MUL(stackptr, tmpReg_ud, stackptr); // (threadId * simdWidth +
> laneId)*perLaneSize
> +
>      p->pop();
>    }
> 
> diff --git a/backend/src/backend/gen_context.cpp
> b/backend/src/backend/gen_context.cpp
> index 0ea0dd0..70912ef 100644
> --- a/backend/src/backend/gen_context.cpp
> +++ b/backend/src/backend/gen_context.cpp
> @@ -148,33 +148,33 @@ namespace gbe
>    }
> 
>    /* Get proper block ip register according to current label width. */
> -  static GenRegister getBlockIP(GenContext &ctx) {
> +  GenRegister GenContext::getBlockIP(void) {
>      GenRegister blockip;
> -    if (!ctx.isDWLabel())
> -      blockip = ctx.ra->genReg(GenRegister::uw8grf(ir::ocl::blockip));
> +    if (!isDWLabel())
> +      blockip = ra->genReg(GenRegister::uw8grf(ir::ocl::blockip));
>      else
> -      blockip = ctx.ra->genReg(GenRegister::ud8grf(ir::ocl::dwblockip));
> +      blockip = ra->genReg(GenRegister::ud8grf(ir::ocl::dwblockip));
>      return blockip;
>    }
> 
>    /* Set current block ip register to a specified constant label value. */
> -  static void setBlockIP(GenContext &ctx, GenRegister blockip, uint32_t label) {
> -    if (!ctx.isDWLabel())
> -      ctx.p->MOV(blockip, GenRegister::immuw(label));
> +  void GenContext::setBlockIP(GenRegister blockip, uint32_t label) {
> +    if (!isDWLabel())
> +      p->MOV(blockip, GenRegister::immuw(label));
>      else
> -      ctx.p->MOV(blockip, GenRegister::immud(label));
> +      p->MOV(blockip, GenRegister::immud(label));
>    }
> 
>    void GenContext::clearFlagRegister(void) {
>      // when group size not aligned to simdWidth, flag register need clear to
>      // make prediction(any8/16h) work correctly
> -    const GenRegister blockip = getBlockIP(*this);
> +    const GenRegister blockip = getBlockIP();
>      p->push();
>        p->curr.noMask = 1;
>        p->curr.predicate = GEN_PREDICATE_NONE;
> -      setBlockIP(*this, blockip, getMaxLabel());
> +      setBlockIP(blockip, getMaxLabel());
>        p->curr.noMask = 0;
> -      setBlockIP(*this, blockip, 0);
> +      setBlockIP(blockip, 0);
>        p->curr.execWidth = 1;
>        if (ra->isAllocated(ir::ocl::zero))
>          p->MOV(ra->genReg(GenRegister::uw1grf(ir::ocl::zero)),
> GenRegister::immuw(0));
> @@ -219,7 +219,6 @@ namespace gbe
> 
>      // Check that everything is consistent in the kernel code
>      const uint32_t perLaneSize = kernel->getStackSize();
> -    const uint32_t perThreadSize = perLaneSize * this->simdWidth;
>      GBE_ASSERT(perLaneSize > 0);
> 
>      const GenRegister selStatckPtr = this->simdWidth == 8 ?
> @@ -228,28 +227,27 @@ namespace gbe
>      const GenRegister stackptr = ra->genReg(selStatckPtr);
>      // borrow block ip as temporary register as we will
>      // initialize block ip latter.
> -    const GenRegister tmpReg =
> GenRegister::retype(GenRegister::vec1(getBlockIP(*this)), GEN_TYPE_UD);
> +    const GenRegister tmpReg =
> GenRegister::retype(GenRegister::vec1(getBlockIP()), GEN_TYPE_UW);
> +    const GenRegister tmpReg_ud = GenRegister::retype(tmpReg,
> GEN_TYPE_UD);
> 
>      loadLaneID(stackptr);
> 
>      // We compute the per-lane stack pointer here
> -    // threadId * perThreadSize + laneId*perLaneSize
> +    // threadId * perThreadSize + laneId*perLaneSize or
> +    // (threadId * simdWidth + laneId)*perLaneSize
>      // let private address start from zero
>      //p->MOV(stackptr, GenRegister::immud(0));
>      p->push();
>        p->curr.execWidth = 1;
>        p->curr.predicate = GEN_PREDICATE_NONE;
> -      p->AND(tmpReg, GenRegister::ud1grf(0,5), GenRegister::immud(0x1ff));
> +      p->AND(tmpReg, GenRegister::ud1grf(0,5), GenRegister::immuw(0x1ff));
> //threadId
> +      p->MUL(tmpReg, tmpReg, GenRegister::immuw(this->simdWidth));
> //threadId * simdWidth
>        p->curr.execWidth = this->simdWidth;
> -      p->MUL(stackptr, stackptr, GenRegister::immuw(perLaneSize));
> //perLaneSize < 64K
> +      p->ADD(stackptr, GenRegister::unpacked_uw(stackptr), tmpReg);
> //threadId * simdWidth + laneId, must < 64K
>        p->curr.execWidth = 1;
> -      if(perThreadSize > 0xffff) {
> -        p->MUL(tmpReg, tmpReg, GenRegister::immuw(perLaneSize));
> -        p->MUL(tmpReg, tmpReg, GenRegister::immuw(this->simdWidth));  //Only
> support W * D, perLaneSize < 64K
> -      } else
> -        p->MUL(tmpReg, tmpReg, GenRegister::immuw(perThreadSize));
> +      p->MOV(tmpReg_ud, GenRegister::immud(perLaneSize));
>        p->curr.execWidth = this->simdWidth;
> -      p->ADD(stackptr, stackptr, tmpReg);
> +      p->MUL(stackptr, tmpReg_ud, stackptr); // (threadId * simdWidth +
> laneId)*perLaneSize
>      p->pop();
>    }
> 
> diff --git a/backend/src/backend/gen_context.hpp
> b/backend/src/backend/gen_context.hpp
> index 22ec0ea..25cce85 100644
> --- a/backend/src/backend/gen_context.hpp
> +++ b/backend/src/backend/gen_context.hpp
> @@ -110,7 +110,8 @@ namespace gbe
>      }
> 
>      void loadLaneID(GenRegister dst);
> -
> +    GenRegister getBlockIP(void);
> +    void setBlockIP(GenRegister blockip, uint32_t label);
>      void collectShifter(GenRegister dest, GenRegister src);
>      void loadTopHalf(GenRegister dest, GenRegister src);
>      void storeTopHalf(GenRegister dest, GenRegister src);
> --
> 2.1.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list