From 437a0d39b7f366db9755e654ed59cd58d65e8316 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 14 Feb 2020 17:22:56 -0800 Subject: [PATCH] BPBIOS system segment enhancements --- Doc/NZCOM Manual.pdf | Bin 0 -> 614846 bytes Source/BPBIOS/Build.cmd | 34 +- Source/BPBIOS/Clean.cmd | 2 + Source/BPBIOS/NZFCP13/Build.cmd | 11 + Source/BPBIOS/NZFCP13/Clean.cmd | 7 + Source/BPBIOS/NZFCP13/fcp-4.zrl | Bin 0 -> 896 bytes Source/BPBIOS/NZFCP13/fcp-4t.zrl | Bin 0 -> 896 bytes Source/BPBIOS/NZFCP13/fcp-5.zrl | Bin 0 -> 1024 bytes Source/BPBIOS/NZFCP13/fcp-5t.zrl | Bin 0 -> 1024 bytes Source/BPBIOS/NZFCP13/fcp-6.zrl | Bin 0 -> 1152 bytes Source/BPBIOS/NZFCP13/fcp-6t.zrl | Bin 0 -> 1152 bytes Source/BPBIOS/NZFCP13/fcp-7t.zrl | Bin 0 -> 1408 bytes Source/BPBIOS/NZFCP13/nzfcp.doc | 89 + Source/BPBIOS/NZFCP13/nzfcp.lib | 161 ++ Source/BPBIOS/NZFCP13/nzfcp.lib.sav | 161 ++ Source/BPBIOS/NZFCP13/nzfcp13.for | 9 + Source/BPBIOS/NZFCP13/nzfcp13.z80 | 1424 +++++++++++ Source/BPBIOS/NZFCP13/z34cmn.lib | 105 + Source/BPBIOS/NZFCP13/z34mac.lib | 122 + Source/BPBIOS/WW.Z3T | Bin 0 -> 128 bytes Source/BPBIOS/Z34RCP11/Build.cmd | 11 + Source/BPBIOS/Z34RCP11/Clean.cmd | 7 + Source/BPBIOS/Z34RCP11/cledinst.com | Bin 0 -> 4992 bytes Source/BPBIOS/Z34RCP11/cledsave.com | Bin 0 -> 1024 bytes Source/BPBIOS/Z34RCP11/nzrcp.z80 | 3010 +++++++++++++++++++++++ Source/BPBIOS/Z34RCP11/rcpbase.lib | 33 + Source/BPBIOS/Z34RCP11/rcpcled.doc | 62 + Source/BPBIOS/Z34RCP11/rcpcled.lib | 1327 ++++++++++ Source/BPBIOS/Z34RCP11/rcpcls.lib | 35 + Source/BPBIOS/Z34RCP11/rcpcmd.lib | 56 + Source/BPBIOS/Z34RCP11/rcpcp.lib | 245 ++ Source/BPBIOS/Z34RCP11/rcpdir.lib | 137 ++ Source/BPBIOS/Z34RCP11/rcpecho.lib | 162 ++ Source/BPBIOS/Z34RCP11/rcpera.lib | 76 + Source/BPBIOS/Z34RCP11/rcph.lib | 119 + Source/BPBIOS/Z34RCP11/rcpid.lib | 64 + Source/BPBIOS/Z34RCP11/rcpiom.lib | 296 +++ Source/BPBIOS/Z34RCP11/rcplt.lib | 256 ++ Source/BPBIOS/Z34RCP11/rcpprot.lib | 130 + Source/BPBIOS/Z34RCP11/rcpquiet.lib | 49 + Source/BPBIOS/Z34RCP11/rcpr.lib | 108 + Source/BPBIOS/Z34RCP11/rcpreg.lib | 165 ++ Source/BPBIOS/Z34RCP11/rcpren.lib | 100 + Source/BPBIOS/Z34RCP11/rcpsp.lib | 163 ++ Source/BPBIOS/Z34RCP11/rcpsubs.lib | 1057 ++++++++ Source/BPBIOS/Z34RCP11/rcpwhl.lib | 54 + Source/BPBIOS/Z34RCP11/sysdef.lib | Bin 0 -> 2688 bytes Source/BPBIOS/Z34RCP11/z34cmn.lib | 105 + Source/BPBIOS/Z34RCP11/z34defn.lib | Bin 0 -> 1664 bytes Source/BPBIOS/Z34RCP11/z34mac.lib | 122 + Source/BPBIOS/Z34RCP11/z34rcp.lib | 515 ++++ Source/BPBIOS/Z34RCP11/z34rcp.lib.sav | 515 ++++ Source/BPBIOS/Z34RCP11/z34rcp11.doc | 429 ++++ Source/BPBIOS/Z34RCP11/z34rcp11.for | 7 + Source/BPBIOS/Z34RCP11/z34rcp11.hlp | 390 +++ Source/BPBIOS/Z34RCP11/z34rcp11.new | 136 + Source/BPBIOS/Z34RCP11/z34rcp11.z80 | 268 ++ Source/BPBIOS/Z34RCP11/z34rcp11.z80.sav | 267 ++ Source/BPBIOS/Z34RCP11/zsystem.ad | 97 + Source/BPBIOS/dph.lib | 41 +- Source/BPBIOS/z33.zex | 2 +- Source/BPBIOS/z34.zex | 2 +- Source/BPBIOS/z41.zex | 2 +- Source/Build.cmd | 2 +- Source/Images/Build.cmd | 3 +- Source/Images/d_bp.txt | 31 + Source/Images/d_bp/u0/FAT.COM | Bin 44928 -> 0 bytes Source/Images/d_bp/u0/HDIR.COM | Bin 1408 -> 0 bytes Source/Images/d_bp/u0/JETLDR.COM | Bin 0 -> 9088 bytes Source/Images/d_bp/u0/R.COM | Bin 4224 -> 0 bytes Source/Images/d_bp/u0/RSETSIMH.COM | Bin 128 -> 0 bytes Source/Images/d_bp/u0/TIMER.COM | Bin 256 -> 0 bytes Source/Images/d_bp/u0/W.COM | Bin 3968 -> 0 bytes Source/Images/d_bp/u0/Z41.ZRL | Bin 6912 -> 0 bytes Source/Images/d_bp/u0/ZCPR33.REL | Bin 2560 -> 0 bytes Source/Images/d_bp/u0/ZS203.ZRL | Bin 6912 -> 0 bytes Source/Images/d_bp/u0/ZSDOS.ZRL | Bin 4224 -> 0 bytes Source/Images/d_bp/u0/z34.rel | Bin 2816 -> 0 bytes 78 files changed, 12742 insertions(+), 39 deletions(-) create mode 100644 Doc/NZCOM Manual.pdf create mode 100644 Source/BPBIOS/NZFCP13/Build.cmd create mode 100644 Source/BPBIOS/NZFCP13/Clean.cmd create mode 100644 Source/BPBIOS/NZFCP13/fcp-4.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-4t.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-5.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-5t.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-6.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-6t.zrl create mode 100644 Source/BPBIOS/NZFCP13/fcp-7t.zrl create mode 100644 Source/BPBIOS/NZFCP13/nzfcp.doc create mode 100644 Source/BPBIOS/NZFCP13/nzfcp.lib create mode 100644 Source/BPBIOS/NZFCP13/nzfcp.lib.sav create mode 100644 Source/BPBIOS/NZFCP13/nzfcp13.for create mode 100644 Source/BPBIOS/NZFCP13/nzfcp13.z80 create mode 100644 Source/BPBIOS/NZFCP13/z34cmn.lib create mode 100644 Source/BPBIOS/NZFCP13/z34mac.lib create mode 100644 Source/BPBIOS/WW.Z3T create mode 100644 Source/BPBIOS/Z34RCP11/Build.cmd create mode 100644 Source/BPBIOS/Z34RCP11/Clean.cmd create mode 100644 Source/BPBIOS/Z34RCP11/cledinst.com create mode 100644 Source/BPBIOS/Z34RCP11/cledsave.com create mode 100644 Source/BPBIOS/Z34RCP11/nzrcp.z80 create mode 100644 Source/BPBIOS/Z34RCP11/rcpbase.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpcled.doc create mode 100644 Source/BPBIOS/Z34RCP11/rcpcled.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpcls.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpcmd.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpcp.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpdir.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpecho.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpera.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcph.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpid.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpiom.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcplt.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpprot.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpquiet.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpr.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpreg.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpren.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpsp.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpsubs.lib create mode 100644 Source/BPBIOS/Z34RCP11/rcpwhl.lib create mode 100644 Source/BPBIOS/Z34RCP11/sysdef.lib create mode 100644 Source/BPBIOS/Z34RCP11/z34cmn.lib create mode 100644 Source/BPBIOS/Z34RCP11/z34defn.lib create mode 100644 Source/BPBIOS/Z34RCP11/z34mac.lib create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp.lib create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp.lib.sav create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.doc create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.for create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.hlp create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.new create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.z80 create mode 100644 Source/BPBIOS/Z34RCP11/z34rcp11.z80.sav create mode 100644 Source/BPBIOS/Z34RCP11/zsystem.ad create mode 100644 Source/Images/d_bp.txt delete mode 100644 Source/Images/d_bp/u0/FAT.COM delete mode 100644 Source/Images/d_bp/u0/HDIR.COM create mode 100644 Source/Images/d_bp/u0/JETLDR.COM delete mode 100644 Source/Images/d_bp/u0/R.COM delete mode 100644 Source/Images/d_bp/u0/RSETSIMH.COM delete mode 100644 Source/Images/d_bp/u0/TIMER.COM delete mode 100644 Source/Images/d_bp/u0/W.COM delete mode 100644 Source/Images/d_bp/u0/Z41.ZRL delete mode 100644 Source/Images/d_bp/u0/ZCPR33.REL delete mode 100644 Source/Images/d_bp/u0/ZS203.ZRL delete mode 100644 Source/Images/d_bp/u0/ZSDOS.ZRL delete mode 100644 Source/Images/d_bp/u0/z34.rel diff --git a/Doc/NZCOM Manual.pdf b/Doc/NZCOM Manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..59a62a0854a611a01cbe11fb388d4b5d5682f77a GIT binary patch literal 614846 zcmeFZcUV)~wg*ZLHAo2^HS`c#LP7!vO7A6vB2A_D-b6&CcaSbk>AhDG5$PZxT||n~ zML&r%&pzkAd%yR-@BXo}W*u{^xz?CtW{lq)yck7gVYmna$h)#SHU*@F zgJEDdOGluzG#DtVf63hjEQ+zPv%zIB7M?b)-e3t_11v6!wefQE@wBq>0wcbaD7d+L z<63xu#l9DKy1C1{`GHNr65=8-gd|uTC4!O^lf)&&P$H5jI2er(7eT<#FgW-eemHv{ z7fUb#f&SKC&ehcoM@}5|jo|6iV4#hwHJ&|u$u~AdHEmq&yzRjfNHkbf*}>V{#uF^6 zX>wN4#>&mw28{3I;R2)#qKyd}$F#@6S)w?36_B*nNM_&wu?Imn6dc)W=@Fc< zW+ui#4k*kx#FV*&D8=o`)0xYPa;Glyd1VB}7^Oy0Mo573a!i;K@2^d$VIGpO#ILT> zRh<`BE1pv3j@lb>;bO-|FkX@_GJ~ZnW;Kq(t`JXj0Bpm{heUc{fUIqz4&VB*H~L)pTvm zXu8?OUN)iGV#s^0W$T?4;8y&8JVQS97E6(2jY4W{>m-t(7{Hlo%g$3y%|JSYamVn& z2xYtb02T@X&D}fh*f0$}jy6QNsN)n&fquakq>ut0d<9sJ!f?WM)c292UOW@x!g_UU zuK<+|(PBXELcrtjV_}10@k!h-z)C`ghO5nVKCnrEy5;G_BEkxB_PnH_F6bTi5i~7n ze)1|^Z*3cxjf^n#O>O?BQB=+?bF2`Q=J__+$yTUl*w}z@kn5!W!y%t@!E&;#brIE{ z1+2;m-5uEwX`k~+JJYs?I7ghNUY(+0U?+MieN4Z<_3m4}%~z-8WGy+G^Q|{~o-7aA z;U9PtX&e+M{~HN&pJ&}rE^ z?z#1)D4Z4aB3@Y31<>5?KGMHu;|v77s}WS31Sw|P@G=l;MR~FcNNlFIJwsBwy?JoLX3v7~0w0lYdq#Dkm@-7 zX4s8rlc}aB{6sjsPd6() z8*iNSi{jQ8u&BO`pZAfNE92G)Fm8PjRffaC$RkL`g9T~Q@JZxuan z3vZjFE-HGsMdL^1PYVK`&X1wLu3Jar07dnDEWMA`F?=Z;M^W3t1-Gi<2M6NT3r{a^ z1$zrmFkB3m)wKAYLyP0GXC17)?Y(eMfD#i2!(lMkf9nVM-=~0pBmSBN1deBX198;1 zM)<_97w~(*-(W@@0slIhgg6W=fqQxh9Ce@sZaGFHB*17G8Z04!#9c5j5{_HbCE&O; z9E?JvaJ^9YN?Z@5I2etR{6+?+0`M~lL`#T)B~ag|6pkZ!#0`EJl!V0B%wO^+j$7w} zcrxNRj*jj)t`JD%(WBz?_&GSrOCpcbk~n6M+To_-=#DD~B2hT5ah;IgD{+PR#}mih zkFJ0Dvj1Oroqzd^f4Aa)hX?$m;q|k;g_q5dP>EW(So$3a3_h!9<7MUP;O_0_iJR_! zR@Hd1{x>BP_kw?xOx#EJvt*)vmP|Mt_tE^_>H1x}|D7rP-N=8I{T~lsU*Z4F!~g0$ z;6(>7*GjIqow9?g9d7FlJJPK`i@LT7Mp;Wo5GV0om*6nGVE!WVVqaA_@F!)ASKt4p z$V=cU|4n6#QzL)M&VQKtpZwGiIBkfKz$qcz{ZID9aq9Wk3;1inpUr0r!Kikw78AXbHS_KFZ*< zA#Nt|dL1Ys@k1F){LC{N_FwEbj>w3M<8(TX3{V`mpTZ}^#n51cIQ-~Q@%bN#gBnjo&)s4GLJWlR<^>nbDm)o>v8l|`|yO%PuTao;e$ z8*YPkWNpAdt%92m?tjD467kRv}D%BydeI#;qWRhA5LDZ(o2ZzK@Js zOV%BN$Px&Zlbg&#Z~&D^wmx$_H(+`=;zJmfHzXjEMuAa9YBK{#fn3BYG}iG~iiP>4KLe-SNsja=k`niv6q4Cd7&f80Al& z9bohA6|e>Bth)H^HV^DB)jI_w?soh<904wE)n{><9Um{ z8?W9=*UObW^0?il`p7|R$%>aHo=l9TCRZ;pbvv9@K67nDin>M*ISLRumHw~rZ*b_4o=og0JtDel1ES+?B6H13_8yjUbkmMEt`mxXb&IP zXQkth-j|;#GEFLR-p~mPw9Q(AJHOQ zq2OK|q2YLwDS|Vr1azySBCaYN>DcxdO&CkWfzqJu)0`N3=eb6qE=<2wu^muW8FN^e zL^aurt*h2kKk(m@p?0cbmU^)yrwZ!|vY(OLq75|#rdw68-y%vAYMEkuARrW;U-<+? zY2YKyKPh}@(lQe)y8|k`#fTI`4JDeDA=OiyRE4X@t;>a9?;yivm-HXAHEBw7eC(}? z0^M(@YCjB>y|rfB9WfnGOfPc?4TC25xZA$yelv(+xc_F*y0Q^C-?CRW`p$Aeb(lam zRk+38WE-oXnR~^?YtNp&AR4*(kx-9kB0TTFX}1ngPQAgQshRo;WuM`6<|=7dr=7gH zH@$zVN~&12KV(^p8G9-|z*5b}(9h8sNE!`=7f7x;aC?adpxi-01VDYx! z*jb}(+U}Qq6={z%BSdDy3U=OfO!Yn4>hJS0OTTal~pl)bjUNZH{g{B(HSLV5W8 zn~Xyf1~M&(O$5@mX_5_Ve)R?6snXQxo)f0}WCRP3+xc2vn7mikRT5}`yzZW3YLx7I(>1dCY5g^U&`iAB@=@2$;q&=P4h_8k><@l zB#yM-o)H@~kD;qcg@{$mv-=1qD4CS|c#tnl^XqMQRfa^KBwI*siRHBvsGsrOSP8vp zvR*yZhK5mcv6n!`-{0sZ(|(>lbTeu%La(>Dp22WU&x}&tq}s2_sGuj}0nIRb6iXkyw{w*8BuDpnZw=r6$UWq|q%hp82PS+P|m` zuYXc{_~CAsCn*^O1#g$6WQZ$ry@ciIzHg~^f+h7vK%ZK#DzS%3%XD(8e|gR ztOh-1J!of&1?UIWA806CG#Z*q-=p#Lqie!r1(8a!f?-uwF*xTg|xdG-3&^Ij^<*avVyHS z=jvp&OY0V`)s@a0*)i*kk3#0WkKF_op`mlO$$O?29fQ^BsNp@S;)`}QH(9U}if-J! zcT%@h2h$p8s9{K-8CT6IBT-D1bY5t3bfc2WbAfD=M_sozL6&+gbGFp?vdjxk!s&a% z>v&B~_TM-4_T35_N@pyfbl{f6^rTws&q=aM6xPqGpM|mBy_+QGxqfPuH@+YWEkXuI z-FHhGb|r)wH_(b*Czgrt=gdSu6-yIZq-dZ}(M@bKGQTe5%IC}zHhR2szBK1{@rfX3 zzE#Mxg)|VC1^21gl1~!HPn;Etb(oZ3?OaDq<>fSdpbRSK$YpkX8{hjzRRGQlrX9NY z>LLA=@beFgZ6=`f4sFOtPHsk?o9}HOKhG|^^hU)uC~t0k!*{*G8SCzTmL_^ofT60m z1G68#ed@6AV9qD4bm;7@m>Nl{M#fHC-0RL0<8rYTvx0hd*Hd)!yIx2 zkc3rsd21PChjT&o+y~bJ>I`!O| z6_@`>rDr7XX{QBO=Hs^xp73o|LD%z&s${UL;X?0P&PA}N+hLkW=dT;j2fy1EB)7_kCh5lKQ9% zvn(Hxelp*oF_p>v?rI_t(K<$@?)sB>yT$79fFXx>LNjKAI!Ud!XV$jn=RMwqD)j{N z56hJ&_ofZq+o-wT#{8wy{dRco*vq{FVt4=hL4idvtx7ckq6?Qd)^3IKd=ZfG~6-BR;?lXIaSBn27WBZ`u- z?w@IxY*s6{RK}YeqXa@~%(fN3DBJ_M(~*x;Td4^Xk&UcjZV+jGcq=b$)Tcwt%}eas zuH)yFs=CeB?t=727vn2ud9Y{s?u{yx4iV`^{=Zl7STCobf zLo&K{=?ezX)Ll$q*F|76ic_@IL0g|~txs#XHeFi^q$MQN`Apd39sn_Ht@CS!?V^j7 z!!blI<5%fnWDJQXY2#}CSYI;Qqadd%$PGWtE`Vu8Kl!*7(%u^gDNF?B&8fNV^f=!< zckEN9u4Rv6T>Xf)X6~Hr3{-Yjvfh}3PYM>dR3M}du*oAOwd@%8+bt5A7`?$`*?MYI zUC$#=V8?LXEkV?+U3A|X=4?iCY?FKAHm8Dq5@i^wv<0m)X$lb_iyJIjM_q47R3$^u zk}h3ZO}^YcSEI3!AC^^CI+7gHs}`y1?8q+|vM{&OI=hl_$~tjny{cz@;soD)LGnx} zea4Mm^=4T;s>yhP2F;Pld7*|B(Ebd1k}JbVLY103hLv_-JQ?l!9Dj(H_k zmqIJ{A@w00!j;~c8fQiIilF9eHVh?(BcG&8kiumdoqE}*@J2*qop+?+7du%~*T+)) zx1>VuNDu9zJ+y&AlY-q@5mQ1p6x<&S)vZw9q=|lZI;@VyYwk-ir*KMtdZz~&!@!wT zY9YO5vQ!Z%hPFz?HOW+ww3sTvt?Np9JF1r5MP&0bPD}MGz2|Mj&ma;%lLblJ`<$72 zXVZ8%ognqd+Kaj(?6do0<|JDv21qcl%-nsQ85T3tQ^gF3Vsm;YPZCmDlW2-XI9*f26nH+PU>SQvn)m@o z=iE|I3=4O(86UM(PLZ-(8XI`VNX@OO&IuxIx&o=dhTbBd5XTZHvDm)X*a1~))_UUhtHHfDvYe9(Lv@ph%las7L~k20bp{ogGqh0Y&}yVjb;S^JMtpAzX#4# zs{yEtdsC^wFH>;ae(aNKx^xZGiD5OqdV=SUq`h47wG!Q}*Fybk3{xvRH(wT+)K5ms zkB1yGwFrmQI(Jvnt%aZsLGcoSJbGi0Ck^fhsgtEw*ro>a|eIjp%oqLk@Lm?^R@bpS&szlMw^rg2`kCRBZ{o*` zwzh>Ymvwq7>S=AT*ZSOp7!CLRm-~Roo{Af<&j}DcRn^o%*^EIOI$cKz5i=&1+^rp+ zE2=%!SBpDZic-y9CvUO12om&Dw@hPoPoMG&sO7VZl7Dn;WuD%sI&4d`fyEXppBoi1 zSfuletTzJPIw3?fQGSmQ6Ng$J@Al;3Cs%~H8c4XTW!JcAmU!BB z8vOXn2UW^K>DE|C2_BtEkA_*s{2@^k2G+CiLG!9A2fifaBie%zlZZ}w@D+3OJ)7kz za)l=|M-YWA*nqFVN*t}FVPI!uZNP_HOiOz$A(VcOm0~-Ff&5cZn9dE|t6%j3_8rL2T3;yydnvGkZmqt*#Rht_OO;fp&-uO~AqD%?1`a@;{MDtFB(;E+JA3giLtd)cz-qFEo*YS7Ms!rIuCFi|9tVHV9 z-K2UF+Q&0wcRI##&glIcJx%O1+md155b%Zj2*uU9jaeaLclk=lmPYx-A=`bay2QMu zV<$l7`WrMAy64 z(kX>W(4w1Z(We|l3R+*JUI-Ap#-Mk(n46xvj32%0#C}S3-!VLa*Ls@1lJM1?y2;0&cj!F+AjGn4c}>8 z0$Boh-afc;M|}BQs?X`H5Vf~ogar#PFlMR0IbMJS#)MRN`-hso5wLY17i?KCzEH*N@q{x$gW1}SG@`1R%$RRO{!9H^tvX@rAIrK zWaThN)62h0$Nn4#$?Bd_N6=3iZqGgdJ zin{Ct7oajzFX$Vxq!kQmY7VEl?8X>jIbXd?gwC^d4u8`74yvaX1p{L!=)aKH#(3uC z-Jo)~8tHP&Yz9s4iM|WEMG!lAh3k>lrL;|02XBHT*@>`4S@k>&`J-HpXIl3a3Lk_! zdysh=%+U6l07q3d-xbhe6`ZCb$So?uHW>zTU(0cS)>UzEk5hUZF43mQt5;9OK$SY<9R~L9eUb9Hk}m| zi%*2}lFEpao?O`;ky(EdmH*_>o|JqV)yG325>!Q zbULy)cSos){L_mKQt?MVE>lISut-Nr;_jxT+;au8k_7odF=c@mVrxjAdwNNvQC!Q= z7w<}?4Zu6&OLpZ~xmN>63VzT23M@Z|{EElxj~$pLk=!Ydm)G z*;wC`8|JnTgjdIMZN@$nt_5K(ogs|nPK@Gi*(7`Rvam%c`qA^1)&~LvXRcm)ND{r; zUGuJ>c(1P@BO&UHy{Fn;+8gG%B87>DC{LrLx}DpxkA_DmG_IUqV*wNpKm=oy3zOsq zC+$G7%G`uxi`kh|0o>Giuxs!q1d%#Y#bQih)1IqIW{gyG$Jr624}i z7-R{CvX*#oy01Bk(^5mcg5$n~fLVd|tGa0rS6J?7d?VaN)f|@3NbMzt!*U7a$*pvU zQX~%ZvQYvXj55R4ZN%>@TZZOzSRt~;OA)s-CIcmMCLkGvqm=F_w%7Erf~E`$P8Hwkeha z7;*TyzKfSeOBFA+mGOQ9aZ`tXxJO zA7w#y$#jIUX&tE;Ox2V1&P%Gn(OWJ%l-r%V3{k7{H5v$NL;?7TWK^i?#_hi6RZ1+) zRWSt|{k6m{OlVya^BGi^SHwymrpbdZDwIl9AR&}|PJ+5JE^J#JjB#fM1h;ySN$lT2 z4k2RRg@sW^8QHRjlVe#Tg*okQqiZRz`QPSGXp$T zt!QE(9i{cZMj@YU=2|ttsc@6Ic#0<)0l*kp?y7g{xo-507QEFm^vrQEMlcFx>r>?0 z=b>mS@1CXW-28k#WJbMPi%D<=jEx71%G$_~LiTi>xXFu~r8}7BAIa4%%NDzESwVMM ztF46lWETjPSmil4O+PJ;TNF_9%&U$sUVdWX`HJW)gBUBRT%tE8rqWd@VEq>LW(_() zfv2riZU1=k%v6*k+)m6ef~PjR5d zSN@#-YbJh>`13)&cl@*DD0RfekLLf-=(m}FDEvy{NAF+#f!^Ln9`#>*^*CSeuO73b zZ{^>6**G`e&u<$?;pexFgMa<>w&4gI%=d`P|M2HuO!VKN`hOI@zJULmhyS0=1739g z4n9X+QwxXB@w#**mcK~+H(&cd_@e&I;4m?XBk0T#RY@H528{z9;1MiGWbrK! zxE5b)aXE?ah#x$IKQVFC;OGZmfv17OY5VW@BMj=d@*hux#;>wpbCT$k?`?8(^+34 zIoB4e?wJGR<7zH2-k5f*D~a1E^3ayj_qFp+*nMBlzM}PbXh7`t`H-#`EfU~CD_)KP z%XN94ngAHv5X3xR&fY{%I%hOO&o!vbv9{~Q-W?uUPYyuWo&Nn`)rPRNV&XP((6L~R z-A@hM^emA)`K``vvg2I-xp!fwX8C2hS#I)mjrBCt-HVZZmB z6}n_c&fOYG#tHDPy`AG|cW~DkN#JSIa zgUimrBlaKai11H-i0YGEju>my@?VphI0h*!jH(0#r`VmS7g{M9M_E;>4+GN8Hd*UM{Ob@V6r|~; z=MIY3UBaOmdzIRvH`zeIM?HR>7pev=t0Zp4+V)kr1`>eG4H4MKPeu-ms$jF7y75-m zBbZZTllN@P*3u0&yGJi3DA+uMaw7&C5XqAXjn>{{F@mjmP8V8+YpxeIlr%DWj9 z(DhQ6?FYiyVrnCx9xv_?h0(=ivzhI0J@+N0d@uqLL?rA`}4lTtV|Q2xfvNCemQ~c)7C&dhbH7(0OXO6tT^RaXocu z9XpGcg57~MSlx?ue8v)Yu_YcxL>`EU9mz=8(6WBR7nH4mWwrN8M_1-?^o|H+w`$o? z9FYgL9S>7OM2^*x@gQ^}L7Jr$`FOAaF2*OuOOB3>$Bg7V_?O55;{~XW6G&iS}bd-V$*F zEjp=RxN`rNzKz@oeOS$0H~&6M;0Yx(BM4 zO;eAhMPl9}I&a zw?)9VN+9TSjS0nqoE~9;Y_>-zkBR3pejl|nil`$5dly@MC9ZI9+W6J>#b%{W*7FXH z2f43Hl1U6^UFfm8VCT=pkF7iLC}bJwauX`(?x9r~GJE5> z{!p6Sg_nb?XVg)?<;Jv8oolzs(~g039A2L0AGufl+BODTCjz+dpET14WZ1qu7!odG zKcGUgdxC@*F35{EXz3UaZu5vsBSoJ+J1-i~8tt|%&&@t8u3)cdD$rG*SItK3z&#Nx z8o|3`dfCu&Rj|`*uOB(0Qn8d0WdRIsLeH&VH>Tj^2oNs`n3T2PoFWWyZ*bV zeJ9zBV)RN=%u3mOCsqu}ht6_Imt8t3&0|c-~RcAMy^S^mgSXB#c>Yf;XYqQ2yGiM1G*b3pbJt z8D!%lX^t5UD{6~4vA!uxtI00%!cgMlT;5DQ$8}RJk>I`3iz5xe&KgQ80ntovrsJMH zyng3($2l#(ZWbGo_NG_GtC^2)3wfqJYoL6bpUjhR`IyJvX#;M?3yL9W_fNQ$oP7a% zx}=++-mgAlopl#J!W$`E;6YQE)-{5%hYH#+=lO{WZQmuRsQih=X*1iF^8+%$B-%{ z9BXwwhSml{zUk$4fR911qFJ)mW9CEBFH}Z&mk-%1-X#RE80D=vxqShOz9p;~F*!EU z@|?*;rS9U3^tU24hJ7ouv8`__g=SqaTIB_Ut4x7|P!q^nV^qmw^TAjWp?q$FXx=<6 z@Zbdn@2IFrU+bl@?VDsID_a=Si7LMW9IE_9)i{CKyZ?FlIyjqC2Oq6{(P%T<5P@&E~FJg4FO&R!R>^w12Wvayy0% z>I!Qg%sNLC)yRik)~jMEBuprHf8R%loty5oF=$dY=xE- z)F-b+h^?GX-%?IQ|LIVD^g=+ZRD=qQmxqlsnvH@;Gw}%T^*P6P`Yq>k@E6v`s8Pb?BJ zCiGr>TAxgyY&Uu|kE!Ge-;aAB>WdNVP@$JDaiE2{e=wn>)ZOyDDl&ORIMt(czie3B zEgn!-oVvH_>tFMsA|~%XU^mcwBV)~88=N?}Sy%i5Tah9GmmR8jzDzx^v9!W>zsL6W zf#cYqyS1}`fXaSXqlI{lGLIXOtSYX@G0|QLaG^&rq*2P0N`~3Izl@A>Rn%{mztd&A z+YNAtC~XiVOHUu{zeMc_f9`sVVo@}KN?OIROgKke`1+~Hcb=vGFvVV<0cn5A4Kb1x zxpLMZ(X1?bOM(o$b|P;s zlTpdM=)LbMCt8RdPo*_asd`uZfTZXS4{4y3l@#38O2l)?$AcEeH_oK4DW7EN~q%LHJFNDWS>LO-9h0j!I(tGSh#bUhWQ%yx!gN+D( zpsAjk5CMi_IvB2*j_k=5Sep`{Uo+(@I#eK0iwQydT5yfy)SA?c6^eRtZJz|H*U--nmmk1Oi1zin6g%S?a zRU#RwNnO@){@59`0mgVJSb{oSLfKkdoC2Z4QlN(kv>sIsrSIXrWmuIk5#NC%YrDMD zlp7M0r=hJ~kt-i1ov#}Zgk|P^h_Z&VM2vi~G@lEiyBYbc%+eu2maC33qQ%jTf=>OU zDP5|iz4QN5P8<+ANdKHNB(k_(o^kDpin{$4tzVhq11e0L zU_V@p1)Kz!b&ZM9Z}1)kZ8Z{9i?q3{kwfyz&K#LYpB+F>c`xE6By{7Tnj%T zNQ|%xJ*CmmriE>WzUUrldhOIy${m^IODio$Bd*kPVqHGa6hdc zKI&u}r`1!=s4>r;6M*VQ=$i&VeSQr?YZ_+Rrv(LmuT$S*R8G;6OYi9bh`ykQ8j>Ql zcP36~jUFRU>_RvetL(j|nnF{rR&4;G>IJG&T#{TKhR^7QMz7_J_IywZa@^FQ<}wt6 z`2`7LHg=X>qcWRDSJ4&KvRxk(#}v z>t>!>fJ$6ksfVYwYmH9&DJW6}>G2rq>D6ZL1^o@7uvp5BWNro`^C{V=$xpBLNChp- z4x;0#NE4N9&h`*}nQ1x)>1?#-;U`uLheKDp&yN%c(A*DCzr_|}n-WU(nM)hPR2Jk3c&BJzA2F(rdEb=rs#i}GCjl1&c{7i%` za?*}VLR$|!b~D|q8y_KOw%Com8XEb}dk0PWjWFd~mz<#!vYpE1RuRq>eAyPGip>3PYbG zp@!UH&^t~*u4}2ISdnLyL=74OT$Z%;Aa%W$(->aQ7^X)YkQ@l*Q*Fa8=s~~?WE|Tv z3Zzf3Fi?bvSzmn9EaH+X$y9Mut;6=w$s%&*R4uzOIC2Js&WLDXx zbMC)fN2a}>3;(qB{apGz4g8+?SN9)u|2gruY5dg~f1AKRj{WD8{Vf7NI{%K1ujbg_ z)%;VpUyY^S-oHKhdSrsc#lrd7D*2lOX#eVSz+2D%{2Xw0;h$~mX#83DKR*ZDsZw#= zc~AT$fiqwKIX{0l^;@I#?>dX2C5|F2e4U&l%lNnPfcPo|&P0yCj;hhPf}=tlOW*t9 zqci-~1^l@J-vNL9pmdbL`vkt0;H}#*T(}7_oTVFgfc41qFOCx-H15nQ-t>+4l8EDk z7taJfQh_9HK{zsrC;QD@j_Ze;37qNvs3k6kx5s~H{RcNk3>^I& zF^nUC4;g_cgueq3FdS92%NJ4KX3Rt+&BI8 zx$t-VbwnLU@XvAo>(t+VnSV*<|BDpFfBDG&(FOMHoaoO-)U8}Re=nckVpaVlpGWSn zU%cJ_D!vu&!~1p|^!ou(9H8M_$$#k1_=?Z?dEq!B`Hit3?u>uw%Lw{S5S}A;e>~zZ z`VcplKhFl9j~`9H0zLlaY1u~L%RR5bLTt7Z}GlRIMM$VrEnBv;Fsxv zqs0H+^RvH1{BqCF7%>y01uC!7xsSO2SKglRjHU2;IqD~_pq@T5In`c_O%XOB5{^fb zg~&yS`I#X>lFYbBT@vjkU6u{hR`u_JL;Zz_r{2AWYnn0F(JgObW9&c5Xnyfg7-4?HL@Hd=LHEcWsDHl5n@Iu z?cVb*BDA+V`s>_62U*%j8sF@nc4OHsiKvPL@5$1n5TV*eoXeiWtE7uSGRwpLVrO9X z?n5y&AEA<(U5W+u;l%9oJg4JQCU?XvLhA+w#8&qa_v0aPeSneSb%|l^tV|M8;>rUg zdZ!xjsv zE_xpJm`~7&7@_4zAeS~&QgGS@D>d5lN}rUd>YCK(+ql=9I`PE)FXhFk+XpV_Y&s9l z%pOmYK{;1vhAXey+;%ao7va~OV!7Knt9SkQ>5#mwRlggzMv23&0hm=C*Cf?G>^@Vj zpWB*@akz8?8ZrcORM-1%v@MeKub z@YuvX&LqtTmSvUBQ73eBsHzyu5ad}>M@4V&tQq@qlzbUs_A0O(v)H-ogB)O{m9%=< zL7v37|89PM1Cr4Byj6V7X|bS!f9pQ7w6~>u@qk2!^EtZxo##Ed+pAPif|1+J^aW!A zvzLO_pNW**K#UceUniscX{UUXZDEz}Zd~=Uw@BGTp{K@* zdZT^a$4l)~Mx5e}I`hNtWCYxt+UZr^_3dXuZMB=(rEFtJ~2 z{JO_25%-)G`3&ft;sxOg+7C{IL=gC$kXKM`lvE_M0@WCqj%6_j2uE-qoE|e5b3qV_ zb9>jcnPLrcBegkhGXa`1Co(VVYsYAL8=!4Jm;$N-$&u#P?)h>9Is4DMwA<8gYLBDx zWb;3qMCi#e2$&Y{a&cq4tL5{%-sca=F@}1vz1bp_yDa1?Tys#WyyTdF19YQXexPb6 z{t8rJ7}%#ro~-Lo49M4?3%@<&9cY+zOiY|IRv#LTu7C&oc*PWB)%+4FtoAC9HIW^;ciwFj%hd6qh=Yj0`s4b z9#%@;MU}xP2wR^$?cp}$LP1Ly`U8rtJ&~daJTn8-bkDp@u^fa5*I_TP^!dUnOh-c zXS76VESho7vgl&&CF5o*QmA(KgVr<7&xlV7%eJyr(QAiCzar;hxGA0(Ib#*)rw>%5 zO~vhMkJRJ8^Dp%%#>T&^=)direp2*5a2@~Q zw&z>_pLZZX{dxbs?Gc0H@T0hYM1L!iCoWtk7g2r|`H}X8<0EEC~``u{9OLcWE4vbMYBg@-V;x;N83DfxB#A(MUS;!d&td{K%~xYh39KwOavNI zcb{ds=RLc`G#^(oN83+}uAq)6NPdnOd&pDbsj-(% z=TRz$2Dj#&Yv3?eMsn7uVz3LwF5Jd5EPA~S4_kco_y#?Z#joBqbC&hzUMiTnzp(9d zkO;ZA^L*{J4THUs?ShL(wv=v1OXDY{JIwfUds!iyoyL*Y^_Bu{ z(@Dy%hEH8oBVHf`Nj+@Glol{jC=>#abGK!Q(BjsdCKJ}zrA586KEtTf!0y`{p+O$= zOklMqr*4ourC>#hzA#^KsE(Ac@@}%iFmH!eZ?29yoRn7(Mi>$Y(WMN>e&+JzF8br) zF5;fhotM)Yk|HoOMxCMdT|7}^7nJvdj4G^zJG zP8d~~xORK)b*IT2;ci7?%-pK`APQb(&?i|{-L4!W2qbWPQm|5JNNTL*k~Mqw_0C;N z%~n3LpdLM~NJhXL;Uxcv>#f$b$b2vD>8E;&1WOP67K~VXyoHf(XQsEG^G(yIynBXS zPSXUzbn7P4b$5jyGuiHQG)zVcS8<0fwJHP6?J+jt3HO8hIY{LiQ=gx*>}o%Vd;B6n zhI5VXa=<}r%mcPtwjRyG1~N|bMGfto-MJYbwDD7`Yrupv31mP+N5SOrhxSdxf!uOzzT z(fz*qYzk9wpU>;Jj2Ap&&=PZN9P!sG`lMf?ALuL+=z6JuPRW;+11X2~k@@LY&b>K* zt#J1Bmy+nY@Z;?Y#cu;fYZ^Y9y=`2+#5tUjAVSydu{sSuJHt`F1GXF_WgmCyKpD9H z(OLK8dd14QFaqB=fma1ZirEuT{)^WLt7N-}n&cX}$Oj|}dANrDpi-L=65zeZMUr411a94ni;+jBXHqPVh`v4^r>j1*ssMAb)ww(=P8U&N)o`$2)vRSgfN6hZlnNgr5}*T$aJIiDc17&=i)J4cRuJ zvPoH%xCT`ya_2de%MHEcqpMmU?+D$fPmiw4d=gU{n}p!u2~T{ONIhH6W9byf%ouiy zp9upitdz*j6pNsy^izSCD$Yg9ZW^SQxe5-)vEEFsF`&w97AEEWaKg*+T%se1nY-dU zcFf4x6(VI)(!GQeL?22r8I^^Uk*sWDaX5GHokB&9Yr0cXb`PA=Qe1Qcvv|Ke)Xee1 zc!s#BIt&Hdc$VvX&_on;?gYgkSrvi`z&BwTPGry*9HA`bRI24C{jvmSn-ex3jh$Kya0?L(uAi+hbRaLL3DYXy z7%4oL+~fARxQmQex6PcPAoxKI|819t#ulH91y@|*QcN44tuVUrU89nA)Lz7;=v;1? zt6Y0oP~M%Ycr*8DnGoujxuG`$w#if+t)yn`H>k2^d)hLh;i6)sL;5k;io)pT*PNrV zuJV+DNirW?WzqsPQm|zjGRzV$=dlCWJ@4c(XL#}bOV@zgW^UuGoK-_)LuN@N3PUXI z4V#Ts21x(_)Xpp-yeJKLoAV&@`DBv9`ZIF4_Q?Hxj5kH#c*= zwM0XIp?>tbsS^5nG0Iqx{TY#cPyU^fFMBG?7ai05T2fz&i%(a_rm&kW>E;&snwRw!Hey+Q`Ca9gwx8Vkf&XP@KsJ<(DHJQH9et$WuT?pmHf}h_Y4XB?BO@5fo5BPN&L3`CB&w&OG;%t>o|Q-~QX1w%^#2 z|CMzHhhF~0R`nyK<9`ah{pVn2MhbuNj>6doZ(ze}LW^ zA3<+8`4-uBz^?>3ZMieV)z4B4c4{pc3u_i+MPj++3L{Np44@dWS~^?H7D1A-8+ZmGQkA@RTpt$s-?)t__f z_gPwb_vwCrINR-Sbh~cjhyzeGyxOC@=;(3UZSJ+j0WX;>7D(b8V z1z~iR*n&{5fXW`1?XZI8lW4-w-eF^!5dOq$?ZieocQ^Wc#zJpg00GQOfSq0sNz2(Y zY|#`QBQ86D%cW^e10cLyJ>{QCMD*7f_`!uadorDy2FKMenqudd;9~lHKG(I>^#h*E zhhui#^Jz+>0|Il6mKSNXk@{_w5IntP@+K7TfNIF%C z!YqkZjItj?L^Y~Ps!a%0#~YDH?y)Ugi_L7bwT@a?^&GtXO`_~QPp{GOJ69Cq$i8b- zdw7>@;ytch+=(F!6@oGp)XoooY~Jd%VFD74E-JR;&Y)>JMTkiAKLrSC9Z_?KWFCov zAteH_aKBwLe!ct{Mu}1F)uQ(tW7zD}<&5rnr9_6ZCJ3m!pI-kcXPakJBX3Ized`j7 zH68Bguyta=T(a+{&6I_2+_J`doj7BeMB%}`82a`!y_TcQ%PrMUz3#TQfLYo)Tj=B= zcDk$&204~L$2X{H#)l2+@<$?)afxqa-Q(BM^n70z>y7MRbvPM4osDNXfJAWmKF1z2 z{oYz9MD{MFK~uHaIi;1R*(bb=%C)d;^!CxFY~N&xkm3L&=SK-pc(ys6Kb9TNS@k-G zI77n9Vs5vAN&RAn-}~vcq5;pB)RE#1>m9|1tJ1S{$g<~V;>XwHn;#y(B32x~sN3)| zoFL09xO7P|^myS4rr7Z?VjOhCgFfxD!y=@kCBy|&_sjZp_{WBk_?MbFXV~6u>5PHMGbu?c-o%@pwOKYS)<*XLxdtNr)XSw5;%I>$V$n4m`fRl)er&>>rI$_L8 z>JJ?XF6b6TWGtF~ z%gt0o=FiprMbR^NZ#K(12ljxdEgUOgH&&Hr5Ew>Y9>wy+dC)1zuYJ5_G{>??SZku= zx@M|`Ad0|TEry)pdT7Qqxg-baYJSO^#oeY%n^6g~r{1zzgtPIl@d{?YuCQIy!uG@I z^R$zArZ(KaVHof~;oYMX{v<#PW&~&Liqq#tO`6!>akmOTgWzQOnQ4$(tEg_VwG?(e zEE!E@!0lC(JAWzc$YGri;Z(qi1^~-AdQ~)6_%pNRpCNXJii#&bjSqqsOV59l81xV; zA8Kh$<@=V}uvkNUQvHoSsc_9%?@i2gyjz=~&57f4e7tm%oUpzmPY5|Mi{HsguKN@K zDX?9PDu{U9RV+p>blngqJHGN*GYTebF8j%lvy_g4dt;+o1y4d;-TMZwvVDEl1C`s{ zJ_xQw#mzgykEIE4J`2yJXBef5$jT|XLx)z{LxNH*31>xBjM_?X!QBzM_4p_?;j+<& zy}(KGS2?VbqwFHfs#P`ztpbz7lmaGf90>BZ7PAO$y{De#qhY$cEbLD#GI+~!@!Y$| zhr72+aa`msn`MWo$dAjNIVCh(Tp!#U=zO6DT>&+u+SU|rBbNZZSNwGP6|sp9w@T?%bgaf>t1JH=4++BIG*D=%bs$ zN^B5SBNv~GYo9RhO3G;VDEK~m!D@atCr5F2#JWHSd9H?wiI}JyD)=jNZNA zn(#chXgL`2ue`aL;;(k{iC$~qEs=P`Cyl1_AEGPZxP>mIYk6u8YDsd}o5r8sjc440 zc?u{X#76ZTE)GH$cIe0tZr*d(0w`v_z@?V=?|379xWnP5y{HZ!i`o!ov>lJM=o4wb z*5F4U;d<-n|MH#n^9$xTQ`O)3&O$p?e{mT75ySD{G?e|U>9?!@t`5Zi2LfoSGiZ)&kG2mJ+Oi>G&}jIK%x zqmc{0WTN@EuQGpc%AZ^Dd(Pk8``=u{)#&{T+{WRr-TD9UGylPSj0Rc!VNv$?9N6es z&_6Gc{)Y~1G~4-~{nh9Q+20!Wt6f__04<2}ckSB0DpbKJLCC(Jc5Spmm3uzgt}R3x z7v3kA81$D4RWV3x{5$dZCJ>Sdz_sA%QBO1}ij^e_h4{(kyoqXa6{Q{6>f@|7Z{Uj` z+Gg^*$is(5YVQ=QopA=;64X;h)0@mD3sgpf*d*FE5NP6*@TR0{z$rUhipqP!R5Fl7 zxLQ6cf4I$yHb$wT-LE)AQjiwdFzcYy1~(9-abP0NEcm2OWjfJOpEjE;3ZV@b>XCbK ztA*kel$w;b7t#8{Y|si*Y2~|HXKd}>4Y|Z&PyT2X$)xA3X=8h*r*;q5UZ9}VVE?Du z;ERz8ieudCd27d8?0g@dJ*wRI_AWvOcYNQ+#a5VHm8o4xr53^N0v>d@D%5o%37wWU zgET!e&xCtkY0?zfarq-v?$K=cmf%dUNq<+NWDP}Oo8Zm;1reofI0t@wxmm^^rK zvjepAY_*$+$$3v`6Xk{ZT%YJ8Ip45^_y~P)B%1J~R<9w3FbM^L5Xn=aH~^NaWkNbt zArvD>ORqbm1sCd%xWFKjPFBTWO;iWZIye+Bq=S^@p7S#pp)Mm@x^Mr7gW4I>IK=fv*@JI)wVXfM$(#3%4 z%G~EQJgX}^BQ>LGf?e#2Rh`rM3d5^r4bASw&8?<{-!zZ(#GeXn=7C{x@i&0aS8JCL zC+n87roGIVvZWyi-bprG4%dSTwy|5E*|{8l46qt;BV9-doyBXOJ2X4H{g{ zRC+g;Fj5~}!a*mgXLPGtLJGLgUCMSY8Q$c)UIkjQ-|hua>g@(Ut&rNKs(BE0h;hpm zrvzfT5;M}+5x**bS$keHW@`0DdMd5C<6HMxcxBFHe5b!gCjZl%u6ow9D)#<^wKp+@ z>r$1?K|@m?=ppqHn3GAagZbf^Ei=I`D6tiTG!Bc|c??JeQtpY6_RF4oX71Igm$%rK zqElQtlNl%n&vC$>rsd<4cjD7|qtE21(UCMFLXPRH;83L<;3Q|Oki8>>1{&=e!w-Sn0Ydq8ME;ts$N*}++1Mp;l zFiUaS33dhQ$_R6hReeh`_vKhLHzv{1+qIc>f{TNwoE?mCi=xHizG;2R_G*!dw6v~w z2U{=M9YDb)H!=zv=Jk@=9N$Ww=E>TwAqc8@ps7c)kmN6kaDKp$D^JlyIpw4^D*({+ zN*KPDImz)Vru6Ygy6!%zTfuG7b}%$KP*_?*{Xl$l_D$hCbWVmq=lB`sJS7s{YlTT# zG4(a{-1x5hx?K|N1X8a!trjB|=xWr4F{v_C5?xIE1cmAI;T4A3X$t;+QnL9%eL|-> zS$+0Kvpw`!nL$}}ijx5qQU1Ao59wnOT%Iw&kzyfy;4Ez&eSG*#hhf67ByR!&)+)|f{{Ew`4>1~9}N{KW{Dxxtr8lU7k zN!cR}OAf~a4n1e2BtWrVd{xOY26>*xA&1#?){7<5);s;newT^B1#%H`Nl6H}fFl z-#JxXi(y@K*w`J{_SA1%!IZETLOt}HtglB$^`B-?g9xzQtsRdsDP{r4J7!T5zLC34 zN&}jClubnO^n1FuJuf0AU&a_JUk`?*7s9k-17y_rqUj1V1Gr~is;iy}bRN?@t!j!D zMXrcpA=g4d&Mr1*7#+8*EO{6aU7jQutDH^j;dydeF8kc4E5eR}^9eUmo&zgJ4~_uYVS4o}rn)uF+&d|S6^SKW%(objcIoourW{ZeOxP6W zXz55Uk}!D6|D>p1OFO@sH$!f8Vs?&hUW&=&Ld_2AW!E(~oP#cPTd7c!sgS(-J85e4 zuPO~SUC9Em3?`6!C8{LAT8HYVDY7L`2+Nka9-fK7jqODaa?hUFnDL0tY|=7;X=jtX zJT+fmCNt0Z=0)=rxfvdB){RM%i&{AnY!TXsZrd!;P`(ROVkC7R0wo+!T z|3T~}t!ehO_G7uxuEl`~R+k0cTE5(g@_UpBXDPRq_XBzWRG-S$#js*Uc&W2{_sY6d zN|y+CW9sx~v5d2PTBr;jkfDVyt&gaMCF|XW1Y1xS63YX#{iU^Ic9Go@L;RD*PFW$1 z__w#S2BzdT6xoVX=``b@PGrUQ zx_$SBY!q;{_v}V%g|}k*0mq8~AFx=jsL}A!<7CDf?X@6!`5)<1OE6?0tJ!PY0Smu# zlMgj%4UQhn5|-|H*eb94qTLc|GxQR7igQw!UL8qAEH3ognR)WX$AEg;UN>ts3sx{4 ze9&b5lDmu#tnTw!P=4P9E6h33^YRvYwinE-gZvonY!!s(Q{40>3-hu|b{x=pD4=tT zK$kT9leTamKqu+)^pW93h6%_l2Th|R{b31V41Jc4vb|t@L&#$kX0_7l zo-2Cds>c2GE&waEc)A=r@pB!WjiNX>Ix->RBHpTPc5+gVnE;qrN#sU@fH}V zMbIw+1OxQXK3AwbOODf%-Z)S|_4^M`OW2#^anj&o#3DVU?<&`Qm@W|^1%pXyfr(8* zyK~^amGjU$6xjI9^Ba?&DN#g-x&Pu$BNWnL~|FWY=B?xli-;?{L_M z+0vgMzRuvey?=b$h?m4=T-=JN~rtUu*Dd-C_Qv>fLStdGL2$@ak3`&&8g;L z*p}F--v$q44fG(ZR(XW2B!X)`iTEsugNI*e~GnNa{F>u%5J~m<8>oXzLGM8%X ziKjKM-V+u*&lLNP*1^#ihrX)i_qaVhC1W)`6mGGF<_%jLEfVVzC`n802#|1wgV_&> za3~pI&qNM1BdeX&ribO2uTk$`q}L6KbN2wp6f>uXAEKPaf(8hW{E5zNcPv7I*w1X4 z9sv_KB1ym!Z`Z_$P|Ou%J_X9Y4lD10RL$LMA|sQ9T>TwY++Oa9MV0g6oCXg|Y%8aR z9hs$<`m!jx?LQ<&-VZack3bcX#9th)J=J1%ij_1+e3xM-K?k|0jnB(mYhZs}CG@&1 z6htorxOT&iX7M05_Iyr4zfXV|v3U5wjeb|st6{np`AAnqiWJA-0#~wfW3C3d=I&@m z60msedwK0ZJk)(M%2?tAD(?2SsE9%eNH9>XCv4asa!0{n5F&X&x1surNmeiML`nq93YQQy#EZOXYFLtCK< zecKxckIeBhw;K$6Tt(4oh1E0mT!ax^s03rS4`blG$tzF~j`8y-^q}UmB=({UJ_?d3 z_afmVlu`N)I6#Ufo)a1@lZ}}07tc^5A+UO9K;1AgDc7}z&yRMf%o`JQ4k(&Y^Fj{Q zB%!H19+DN3^bp#WGH}^lUPi=ouQ0@bICFifentSC|xg5kmL(@q32gvvqmRCJP3KgS^q#@tUj$;$jY*U^ z*xjiZIFrj>Fpq9^i6wCLeidtDaKh)0tHQTfuO-FqrGbS43m~G?m%5BkEjtOA>q0dp zA!@ZIH~7O7@SUFn3mg4~6&Qxy_cV2k7r!WR=WIjO7*flL#@&bQTgQn%zao>e?BC}{ zY6cupL#;xI}EXfv9SF20h`T|qBB2|xb?u{u}5BY1)zGNPn;5B^#nu~Xw?%5!lhsXEF z+}?E?)icBlSUw-$f1q(Jxvx^YY*deuF;T>O2*nKf=2n*_K0VN$u70*Nzx;i8kNd58-cXHLGL&w} zvd+zlg|p4FuhJ#0;`K(iWXBtlc_oX?y^y*-$3rA)f5h`GbL~vq$|h)XNiNpsh6jdT~K zvK!U;E9*UN@;V%5+hE5~u}!fOIVv>_IR#!Rm$D-{rIkx?uL1ACD@ZQ?nO9%_TMKv5 z?ml}HEO5XLF^#PoMf<`ZE&KKOYY6CMY$8E-$G&h8;10mlX$CR?pck#MLklkxk z1}H(D&0^*rvbCExb-iukVaUy(QU9%V)*8&#DwtR)ZyDCxt7%2@+9?iPLqbhkB?vUjM=?Dz>K zMYXDKeWxM!^m0UP?Dq)l;s)ou6p2ZtC~MBZqxDBxC(XlEya{-{l^_uT^nV`edS zQbizv<6XVIhqB`O3QO1-PvFshHJ>>z3RahG_wJq- zr|Wuu5u7^4&>48fBIMnaQ|y>&s?qf=13seBqxcNqBPwQabo=tw+bL9Jl00kS6WzP) z{QQ=Y;){`Gv!;pAYP_;_y2Lg@x-=J*YfBSA{gnzQ%oLXmdH*J7j5Nd7PkD`}?O7!@ z@a1Va9mvtdlF%2$i?eVsUQbM9E;Hae;NW3&qz-XFw$%ImxROq# zhu$IWhLzel6qCd#Uj}|p#<8~3%7SDn^}b#qO6sT%g2*#}f5CZVr-_=Tq89$prvH_g z$0GlrAZ>cZN!O0wfgCQKxhS{o($3+wyn&qoHn29mXD32JF|?6G&m)(gh+ayHV}x3iQ10=$+K3^}6LuxK_=;qa zeJB-+t!Y50T8F5Z(nIsM5Kzn=?!)R$eCoA|^|P%D1BFJZZr%jw~}vP`o7G z*;Iww=c~%?0q^K@rB3y<^cUFp^V%9WN7##=!yYoyWvHK2ao8MVJE^uoa_(VlwktIuL>HZ71 z{Fhyc&R!EWy#aQpjtGm{qI`|(olQfmHrUBYZtZmKiX=TrkTNA0ZnxKMu(X9q9KE_Q z;q%+V$s|wbu19x^<@OY}qg4^kAObRryPs7V?pM9tb&_)l^B!tEdBm-QEwd>XA^Xzl zZQJ^6B1datG{P|Ey0uL&+uI9vTzb0@X7Uli+px-}mwDb`m!VyeonjfA0Vf}l`-+oWm%$%1%Gezxe%4$!Z#3m)^}6qPgTsfXoSd5Ll>*Nv{ai|& zh|%Isz<@=f$6^0=f#wf`%>_xrVfX9C)f!P!F@bra#jg&UdLtgLcN=`qB*ZF@uV}#* z@3x&c);L$nOC(tDxNAVyibt_(TI-o9^~CEF_%)G9C-wya-sp~G$-&a&0Yt{v=eMLl zQ1TuRb1UNKHm>IOm`x)4&&ysm7+c$oS-p9flMM3Zy$LQmzy%QDyiWQ^Ebs6Y5 z+su*d2fa~JS_FoFcr#p+mxS>^yO_A{CMXVm^g4EQhT$5HUNxFgTdiRss(bsyBB}N$ zEvh1&J8uJHHX{L_sn}5pSBN|+01$=9WNETHOuy$4FIqf4Y)wlM&jOh~jj9CJgE3SK z2QySyo55gl(%U$DmB6=msC2_dce_kEZD{J@nUfYG1xF2vYq&((U9lJU3G}j~OkdWp zkb5}tDdg3??V~1P9mQ>G+;i-}gM5$p3QX+4Il7KnuvQm?C?BxKWASTrSLAmG`&8_e z_h)YqnU)eRHE3vmB`gbLF0rd91Bd!qV$6Ue9#d6`>g$q7+4J3ux&Y05{lWZsc^7oe zeU{&`+izC}C%T!q41(mt*HEWQKk88M^i#J@mLq*_J3N@%ePn&02L;xNvWXY&=b63c z#$~Uu+coW&*8B*EW2&{dPfUM`3F)>dA)+tA--za`josCxSc|=}wrwlghaYI|-15ec zkz1J)?;S2iBz`C+8rHH`z-WY!!=1{`?MqkcD^TjI`ZCikGaQntKxT%qBId~GL+>fJ zV>eGEsFYh7BZnQ@>p7c^In;y%b> zUMZy_vhw8G;WHi^J7K3$mC~<-r$yQJsf@N5eJX8vMd=Tf57fA4ST0yN_gcPr9`rc0 zbcI^NlKTLlmF`LS0dJxZHXh8g8$g`vF>We<$Q)J2`qlYe$C;|4E)SHzbx2Wjs7$f1 zbVL!%^D)%4C{;t5M=?Ps0-znB*6{T}0j@D`F+DS+pLF~2SA>Ys12JsdacuersXU05ayKjD{Y{C?M?zX7R0d<21)rRIe-fgPnc z@VV{Y6BF-FvFxC{cteCkdS{c zOOMqE>;nOnc?T8K2ghT==ZEKbIF-j_2MERoVSqDrgeR1f7sn{r3nIN^@pbPubdUL2 zZI^1V8713N3crE zSG)aiM7RqNjAD#>ldU5t4m$mabibUVyx=h_Bm`VMyT`3%EFP@-{^4C zz;mx06gELj_*JCb6*wGf#J)X_g010pgsIyQtp&AhdKK?mfU%3f0Xe%UYGITyP(Mww zrS3^eyZu3+T`ivzKvg9)vuNX$SWz89OVSWy#>Od$3n9wfqQiA6+YPtCw?N@;WJ@7r zTpQ+}Ye$H3Jyu*~{9dH3ev)Gq7pctF>4|+~8JeCB%?8y=*~DG!Ie4P%t2}LArm8M}|-)J?JG5WoKlN7iZd#^;hlso{^iIn#a}qQZ}^C z?$U^tqXdSl<7tKU)FSMOB97gg?{;r(!EvAQuI z2u07zq1?PPb2)5Xtyw63X zZ8gC@1_nE4M~EXtH3xXtqRU5E(=YHA?*1dhQIxuztfRdJ8USn4sNc+~4Y{08Q}t6K zx@UI`;k}8V+<7#4-PAYSiZ3k7S_0nzQNTCsMPNmI4G=bGs^wgEAT#P8)#z%ME|~E3Fq^$uVdYpk_s!G zx5-<=!ZTG?sCQW3oaF4vCnOtk?NbU0ckRUWV6HAsVzL7sO9B3Md6=?S7Ai1wSO$^J zxDVi*E{zURPhu5kj!4D97`opbM!*)7&A6(#WBom-y!O@z)0(=7c zNE{3d`k7G2;Y6(f+A#Jl?NE?uTfX0+Z9ufC`(7cSHF4L%jb~*X zhgR?Tl6b3yQ`6RGAnnoqUea+FRKU+3v(|u#7={&@uFtdK)fxws49)A-JsAc;H zdw>OsAgF?mH?HGkkLh67%VaHgOsB##w`?05H?-oM##xF;&J<@Q=LP`B@4I#`KG)=DF0H)}0vKg%tkZ6=eU$RXFzN8Ge0Iv$$pYA? zZP)H1?xG!#?C7lA!v9NTzQBKt%;!~eL93F>|3sSnq+^kkL|eN4pr0X(Cg%8QB;!>^ z19pBBgX!>pZZ7-_#Q%T69`nz{ z?C93~6M4*4?r-EV!f5gfA+cY!zY8t;Q@Q^PX>_Gm@s}0wiwU7e7ES#APnfK$Q~@DD z`m5jHPW@H$;@96_TJY=9Z^eFI=IX>hUGMip5wU+D%|If;Xe1eWq(smH^ul8QK!sgp z3!sTdem~*oo|uRL{Z*DII)e79{Le%*^$Z%>g&xVPntrR74<`1H?*1X^iXGQ?{_cl$N{=XhKlqX}-V_C?WzH$U$mx@7X%(Tpa4d}Gm1=@l{2f3^J?K#wMfet%g0?|WAyO@CG5f7K)QR~`77 z_WyeE%gz0NMa5ba-XEOj=8s%?JUqWcT zl)tn6x%r+yXUIQKU;mh;|A7Ae`4#q`HU5`z`ECCCXQ49mU+NzwUx9y++5P@j|KxJJ z`bYnZ?e|i@@BQH}{Y?BXIqm*TY4=M7{|TwxPfoj^7rP?1yZYY%{dsh~od5FSKqvmo z!|?|YGl=)^d9Tq3!C$_Nf1?LOkMTcJ{(Gz;LjO4bk2n4gTq?hztNGENPk+~YP4!O! zs5q?GNTQSgOme6oXEAD`d>aL4GBUdmk{B$^`*fv50=fM-di^BEFiIeRR6hR-T@6%X zoEb)$Da1ts48);y#v-)nxKnvK3Zwva94^kLYByYoYhf@nSPqz{#hR$rudd{0qCgu> zh?SIyD&hzuB-qNH0Y>X{B&+p5Xj?2&W=vFK@<`LJVds1`(3Ep|6=f<%KhtKwPe({S z2~Z%wF``mTQDEyXQ-i<3fdB_s6pZX+MJM}g`xv_0T={6?!mwsCJ3-IqUK534My}g6 zhxBYWNL~(l@==`%bp#o#c}Xnj4B&*8w_V|_ossG{1ozQ`A)t#Mx$GML>Icpdp*PFm z-*B-JiPf^2Iq!aedQ`1D;-lMa+v2fP_6l&ZB@V=Rf@OO@gDT{YKDGsC7fIA_C(dDp zW1|i+~oSK0QS&qng}SY?39gQ+VLz{PPU06+G=>8ysx^@ zc~U%*-hLaPN7Ry|T25<(0=j1+XmLpnjAz2JLl4BCB|7H)h}Q{le$|%WW>Mef+Sn-3 z&ht8YPmK`c&9w$+XF{s!(auZ=XeuWgqL}2a3zX*NrfchUiZ!m{VHzi==E0Ob28srU z41cc`93L&>R0ujIuO)oXUdTV*=e(+3b6mA2!9ydzhDRoeoG-1>&)iqn?JK<=Z1}S7 zM5pGR53i*B7)73R4#Fc9S-d{5yLbxrj3qeG9qIuE>6zW^8Xx+jw z?MDnXC;NrqYcG6SsH8;D$)6JFP}PGG=PwIDV`I)@Ia)vj}<(TO=DG?4Sm9~?6+D&iwv&Lx15^%EP)7C$6?}wE>yV*AbZ^HsR8H1rZam2uYVNm z6JksORbbOENdWO(SI(}n#VQdU^J)G?4>(D>|WZ7gepDHk)W+LAhY_~TqxzurYz>+xzn zGPrY#$7Ge|J4ID4B`%tu-nJ|BHR*PAqP@SsohCbK(Oi+(P_A|BQ_z@ER^I-Bs~1%+L) zxyUu?c)HutGM>Bb&+dlQ7_5pf&wEg8{oqt(eqUC&RYAmL3d(P}CWLhi z#*}pcvXhfalbvN@``Ly@43IH03lTqIWMr>XCe54nG(}*z$+1|TXJnRxD95CQc-5pD z?^QKZj~4Las)10l%XmH6cRY}q9eL>zByjcb2(6{I0_B^eTST|zs+Hx245hns>dmDG z1w{%Cod?ayB-!vIsp!}Nr_}r!F3#l}*EtxmlG}t#!k}GHdW*HSk#FoZQif%QTUDg_ z0nv5bm7&SelcUtu2yOK{V${Z+y4b#4dO!#uDj+8~QzP(2J&Y4uvY}eWdw<05yC6&(?#o?@Q2eidWl(_9=hd_Mc|WZ z>wvrJkP3r638Z*SkQM1GXW3VYS_;)d*}Chhyw-w4$z7K*%%ObsKw$taxfyXX)ILeu zqHsw&z^dLH%v&z3w3ly7qH8V{z8A#w0GI86^J(B1Ryen^<_`)5xBO#%j7EXBrpMO; zhGs#w{tY>7|r*#ox+adN!N{Z2W_o!K5IUw^sc@0CH91HnrPCvH)t#fcX8!2wD zH?hqVQjcdbUk95Bke0T4L`~(I;oUejM%MKuOctF$k^)hD>L>>Eo0r_0j=xSw#%F}o ztc5foE_?GY3O?dTEjXA-XpAN?+Nd(5Mp0E>V|OXT^*hI!-6L|6r>-P<1>cSVM-)_f zm$K}L@Npqc<@xKmmc`~WlGg?afCY?N)VOPnZE);@!Xe0M*Yo$8%J^9&j5{i#Ne$x5 zG{DmS6oh)~I3nw&mb2z=+-%tgx{{duIJt%a-+qCW#|f1iW-oA64mv!yt5Qv)*qR5V zJ!4R&*B5-b1dm0GKCBVGV&?uBt&c5Ak@_F6O~oK(}jxUdKe{d zw^7j1{fe)6G&W5qagF>iDt1n+$Gf4{8kO>v(jd1gXJc_o97$}hnS;=!#O9Y${5+Xi zg0tcZENCwk+?==eZ`Z4*Qh`u6(Kg9=&(=?Ae4%VsVD3pSE46kxOyW0lJ(B|G*o;S| z^$=?pq#S$%lMcSIa6N9vx0I!vbrkSh+Lq@cOO9G%{iNxMrPHSJEpP#5e4s(Erd1r- z(fg4(U=%t#piU|XL(+s4RGu{h;=Vj3lefZ5Ez5U1MZW#crs&eNRD7B)@r1vbVvc1t zo(C*3br5>JMg%{L_HLc{@(5tlCOkLk^{h@v^HYnX>p2Ngy&3Yur7_IBkCShFFHv8O z&0n%SUQ7`7X7O^oTk-tSHPc1-(3iQg(2L@7pJz9sPwpHKh@Xq4?@wM>gpAJfcH8Yg z=2`PA1Ll5}&%w;EK1$=#SMD;sfoPxSE*R2aggLG~)$>j+)=&7RS-w9*LQX%1eNBqs z{hEc?eMbi~DaAK6kLcGF6Egj+o;S3=zxDEgyRK+LLD^X2a?p+Sf-DjpWT4Sv=*rN0 zr_U}8#Xz?YPE0lH*NB^>pWHh)dX74;otBP1jSO;+N1YAzeFr+CeoS?}-xbDVsXNE9 za1J>#WgVUfWtBM=PMfB%9K>O-?SEVfadKz&#`2x6!}x&J^+o;kLv5rJaiVkNXJ~n} zbfV;@tN96P4CA#MrozG4;SC0kiq%2;;>i-NVfrt`;xj<}h@)VFkOu!mdtjNlhsCH; z!8`xLM+CMwy!74^1z?m_1+$VSgOkx)w>4pm4+{y5_fJ)ABk}z?09?cDc_E_F>6o7q#mWbb0__68j;CPN4Lru-uY|onN*@AoADq24b*#7G;-wNQ(W0o`*&+Q1 zI(A*Oy#&XdAz7LxqL-9|v|sGdaZO(6xolq3METfhX1FYkGS+=?>5}ZHi-0CC@832E zsZ-dWR~wp7Coq;fxrm7;^i&JjEE8Zpv|hs#bRS18TkoJ?z0G7q6aeeyTAF+OI5zQl z1~Z>1H81?>cO+3JY_Ub_cugQ^vYR;88)W`vJ2Mv% zo#zG1i!8$04VX!0JT(jVl*SO0+@JE_H{1(RLt@w_wyA0f$p2&lam z5_lp2q~ya&;q!9jmTyvwr0;Ruisv~O)x1VbVtee>Z1)<4n|$RYwb}zbk5^WC_@U~u;8wggOfZi zqTp0IyBixUiv&te1f4WMEc#c^!_O=RDP-maQw<0$6yEZ`E~nX_G_NBu@-`j`*E0|# zP{dVW){kDTx1ryD#un!&b^48LVCjMf+@r|ahX;_cSyyM%;O<-TLe$hoXtNhL%_!Pt zoN;P3WvDl`oHHiF-^yBH{9DBH&sEoNE8)L^c>aTD1HJJ3hdbkMcr*T+VfBK4fE)ky zO7hnjT3$UHFE<}gD;qDgF6*xgN330@~frxzYB!^R|3kPRsLh-ep^b4{s&9R z{~-{X=Kn_^boi`AYES003uO@qcg0N7Q;MDzr2PJ&WS;&lDv%vq{cPx#U*RjYOD|NB zJG&sE8)GP%5a%J}nx?Qv3(36OzA+ynM1(V89QM|4-~6obG2I^B`Tf2gkfb}kRU%Cm$SN8wz@TzeRV+eG}CxHHk5w03t%aGh!m5Es*Gaf-f7 zT=-JZveBN7nGhY?%Q@QTgM}$4n+wG)poQhLCu^+EV5*+k)77bV6ji9_hg{?4nn~pa zgC~muyLjp!Oz-g~t;SD95I>-)05J5~(;_!9jFSP?TyjmqKO`D4GiTh*Sl&G_??ubFq{g=rSg8?0Pv-Yr^LXusFBoG=zJ zcDlVJ%wP4m0-|WRJ7QjakKD9-xpnl#op?%FeWO?%_E}*NccmCJ<8+0Li24OOps3aH z45ZzL|V@CoclS5w&Klb|!tmAK3IQR2A^OfxXeP8s;HwA68CQvJEp2Z@`B zxTMlIW#Q^ZEZT69&Er5dAV%*X!I~%_~rcj59cvT$oJay zl|52xdabd2k96Wr9{Si{m}P03H!gJjkRd{9)ZB6vGgmyNSa@1ZNpt?H>2B+2s{TV8 zj+f)ha4XKUA!4t(GsMV7&0MCK+}+2|DC#obEq;y7#tR6emMu}7e1_Z!rAAalT zku1h=0>rQPQ)bSgmOUnC1%&X+SnsZFiPY!x^I;;h^RI#X8PVjaE!pB(l{nD6|A^<>wvpdSHiXW70-8Yd+`AU) z-c{zS`nYox$lp(sPi|nfhcg1jt>7Hp>prByB8`t^b!4C*3paDF^POE*Cy8)A?a373 z$1oc}gXN#DkLyo2C<94%c=EGRvRgd!)ay{-Bn;wK$*16oya=q|(H zB|&;(yfV`-FH}>z&tcn3SRp9RhmJ;K60M&nbb%Sr3&Y?M8dC=iW6px99-H*-teeBf zuWIMfF$l-FYDdiv9@&!YWl%MlBQ}d!i0<-c1OTc2+M z9zP*{!AWdJXXslvP>jEH8Tq}~WwVnz&^MHS(o6wL!#{Ni(MLKPV>WG6^h}n>e4(U| z=GTZTzQLPb=tDKpZ-eI5vqu<0wL-uJy?~xjg+4oYCn9z>v4?RXII*f%rrvXQ>32&J{)L9T{S=WC$zm|nzdLy_5 zR*O$ZB|Gxcx7JPJmGgT#_k-`^vC?m7(!9?pwlD$2e>TvLi?T= zOw+#-kAhQ6{>Swxu=3pI^{t90P4aKPtlt;&SaN*nZdCIod%?tgCO_hblI?!H9)O|@I`00 zXN1?SYA!9zF7DFjzU#bQ^bfy#+&*1A@TI4%n0x$b@`r-lOOtyemE6@w0Ne=+4_5B* z$ekUHioyLG{u(v@QK)A7%v_aJZJY1+R04r4lOw#@N)aewtyuq3-zJUAv1rdz)&{Tr zXwS;ePi-6g2Q_P};%lebv)ttY@wPfu+OzmAnh_O37M_hDnEK!c4Rj2bR;1#Ibew&g zkP402fTa5|EVz4CN=q7wQ(@hwjnJl=FXN9_D^XF(!VdX5fiD@+H=M$;)ft*vg`<}l znK|n4?iRk{bG7Iq?fd2m6O{gbn04Vuiapi{cu&2yQ|6ILyEWJyLIon*fwc(M{kvA z>%bN5SZgHCN*>@{C~7=#QGQ@w|A{UNN4}uSsjdMP1yOgg)f(P;H#K`0R~4wkpNYIZ zU7D)Ggb!Aa0lm2gY=CSd&iLMZM-Y(2VK|4v2}8AA!cQ9Vd|_dsl$ zjjN&Qa>O8FSXJdfQ?en@y0jyPb8VKr9j`=m2KIz}LQn%Ls?nW8Z9V9&r9{Jj%wRo5 zQ$lzfk3z79)0a%Rx<66Z23Y#;0HH+0s7A@i*pzy*q7bGiY3sO5d;{s`JGPCDw^yU< z@GP=-8V^@55KsjUgBbUo88*rn&IkjnQ6`6V&V!n~|A)8pj%sq<);%quC7~EPDoqGI zgiu8cy+i1Tp!8lsQ$$p1fY5spklvd#0g)1V??ptUgMf4u74@>*Yp=7;KI@LN?mqY4 zzcNC?`@Q4Kn~^!6`J2z|ny!eE)tS(Kz@@nl`zRJ16RKXMFd$H&@3v%b>Urs*I4+AA zR}s6b?8oJKq{t*%IL|v(BDlP0yuTx_e^>GnMkgu(;i<<1ug|IDi!WKHvo|V}cNGHP5k%ANd07lp3l1kbolEsnYcEmrRhJys=6DYu$6KG<<8P~)wnKHu=AB6SIl$hfPS z1ip5D8#>2Vk`6rjuI@G}&0mLuC zC)IuBxm29FMrZei_!v;jr=Z3qgtr`~(dK@rX$&q0;Z2MZBpTJRyk@Aq^4u(`n*v;8 zGNf`b(=kAqX7ee?ZAY1u&_Obbi`KK`o;|q>I0E}XxsXs8>Z94RQ6ya;;M-2UXjo%R z{|VZ=RSS*+wyDIVdjjr~H{MQ7Wt|H-(wlcG(SO)i-+?^4F8|$QI3?~E^7@yQ=C5r2 z|A$2JTb)=~$=6#&-`mpLmhCsvQ$_!RiTfoc{PyCX3dt8W^8bQA{ARK2b+Lqoqm38a zZMJ_%4!_G27l7bzwQLcQf7GN!ey?_mTre2F{T*>(?Dp&NcY+il@w+qFZ#8%Ycb|)~ zkiQTqEn6E$OL=$Si{*dYfcS-lpv1*&xQloFd2he{?;khpKdSG4+S@N#MekyC+^?(t zUMRnC@B3{J7wF%whkxw!!kqcHXTR^~!eQ^%v)|>A|JdCxG5~Gqd7-vkP!7M|^q;o$ z7qrNKcBK9b8RvrN{Ow|Y8W{G^e)NBLV3^qN!qA^@)}M^v{wd>#NL<{X|K~&iG0gIx zL_o&{5x^MLL#%$8K1Prw8cP&Zs+pk8Io@k+ny!aMKxxUZNso`>vL^(tdfe zsUqFzKw(5!ufVttFFGs@*VH1@Z$*Bv(lrHxg-=3l?|Sk@Fw<5N@ymhw5Bl*cvH zDh-wM?gA(P*9XRwo50{Z0N@(?Xg!>HPh5FLOLM?>Itw69ESFM`n10$Q2FBD|SFSnU zdo2>Twv0wKPuJX$_cHM}=-O#m9rLn-Hg z<*5YO@V(@69)b;p@t@zM?k*Fh@2zw3y%1X>)-vNs34^Xvb5GFTr!67U2%*OYmbgIW z2K9^CnuPeUG14Pukdu4eR6CVaVbONXtoC zT%mSnLXxzGUVvMnmY2&m6hfRIwF{9`b@&JnRDZ@%lBb}}IEb;ZsnK0Q?X8sgkgd~e zSPpr~8%!tBz<@FJEBv+7`T83Yc#;vx+I zFQU2U8!A_E@5ToWUzmsqHb{OJ%Xf~3kx~e@ZK>Z!PcCUCB0o*PJ#bi(9&>A?<6Vjt zmy=$O{{dPt4reQ&<5@wyeh8Afg50qb2Lj+V9Z52rZG5SWhFyO zauS_fKWWA%6#Vcmh3xISB($tJ7L!Q@2^y(Sl2Q8$gswMzng^ez3~j1^?Iiqg-`8pP zZc4rRGLV(cw((+6TPZg~f@cOhA!L{OGy05NUcH!o`O*^_o$-m6l(gj;be0GKP zB0lFMh@bG;hLju=!=1QCqH~Z^ z0CDvM`phY9mk`_8@MGnQD$F9_wdsqkg+*--bqLkQ*Y>{i1tWjLz=(Az{)CRaDH&>B zwT-vQ+@KZKDJKcub?Mq}m>l}~efAQYL1M0b3l>^+#n_~7ju3-LngwCblI|cT<+iYA z8irn6;0-o8oVrrC-I4#}OhT{UxjD3DJwXa3Vu*HiZZU~1TH#3rJd@^`v!BNz& zUY?z>X@x{R7*}sDy*TTehFb=UIbC|px9U`Hgx!ki z$D(XTI&1FReps&PKwlwLYnHi2N6af8tYCag$y-^=Tv4o(6GrjL0+l01pQsJWvLy!) zG?151WibVII{+sP`neoxh7~9?v@6BY)fXdx%xKqghE~IM3p?fK2DH6%rt?C5_%gVd z6K%@NGRr7XCZR1v@$>v44_@ytc4ueXbg&Y~Z)xVnNxy|ImkjMQh#%e| zVENpv!SQlMP3gyQ62St?tPda$TOf)c)|fX;h_Al$Kj9S;J*=I;m_On3j`iN*_1yc|uMCaH(|> z0L1+^w6?^ckb}^n+YG@NCCH`9*2sQ6d#s1VTCIP}z0e2%(4@|pbR9NuvM48LvO}^M zJqf| z{<^=!@bmWOmLR!iOp^o5lYtbrAP{-;kOEf2*_q}Ueo=HwtHV+Z6*K~fC`njbIZgDK zWCXgIp;UYq_LyztoZKx!>L@FGlyHdbi+X{Vy)8YOd}s8f`A>V>l?j7g&Qu6-=Mqs9 zQ0pt*yXBrEY$Y;~#GAR1B~0}&bpbwPjHfpvuoN*16(LGHo{P$N(BlK^3_@aWhI5p$ z@I(ky3)F8bw$6Y>CX)e;6CqxdefU*h=2ycVHXmaNH8w?Vbg9lGD-R7&Er?Ff1QuXL zO|`0wlQS=`_~>d9OHVwtMNv$rsvUlO%*>!wQMdy-S|B$_9V=Re_Ruew9Ma4ZgBLQ= zxAG}sj%&-0w@d+4>PgE&vt}XfrNWfNcA#8q61<)d@rd1xM!)Y2LPlDpx_w=j@rMmN z>PPMiUU1W}#z74fluC!yrVuz>@BXk6{550Ve2?1Q~ZPIO=NA>xi{A#zCpcnFK+z-2IP!b@P10^o-R^C`Y~< zhf7zAUX>{HIQGd!UC#y3kDD^%1)_{EZBM)uya5cvt;sp-um~z3rqy?l6B(6PRjZzZ zFpM|6kdJE2%AA|?ouNq<_^G`b{5)6ur-L%*uQmqlqBK3<{OWR*6At%XYING}q}+LO z)x!tU3I(m%Q&!aEEjOJVzdY;eU1vsY79Bp~7oZUpoG+n6R{3d=m(WZe4$E-n>`3Z$ zI;CGF+bf@26y_|dz}J8ti?=E>z-}|k@`=&Ksepgdl#X2x%TPm!;_w3Amj-k%zTPw4 zeWPbtyIU-$L)I;Q5E!&0efvDVyCL97PNk#I&yN z+^1O63mmm5D99%PYx2Dls>uDoWU9(b-ePq(AT0QHMS_=s zO~FfLNRp{HbbTrBX`qqztN98t?GGjfrgz2?;6g}oGtIp2$X%@`>2_wrmmQxPU%PWz z)W^>2bw7+;K)19u7+*Vt7jo}+ElT6?wb3zSOX9t_cLh0egr$S(5rg`yr!65<1cI7s z@uJ)z(~mdKDEKN-%756 z>jypi*MY0L(WTZ z*+eD1cQXh@jnBm1ex21BCxd-&$rZKp!&eKySikLKvN!Jr?n}>Bv~E4gwv7uPT51l~ zTV++KOwF>dnxQ|#EyQiq*Ew!8>CY1ySx2{rhE9L#7JGXacj4SM;omCY{7}(q<#F66 zhtce28{f#tkH!5x?x~SQ6vV-Y3jJTKRrPl7yAyq~nIS1)V3y)oVQ%Mf8*WGEp0;v(QU<~Lv8}_Mh^_LgU);!UcQZdpSB^JCXZ`GYYVD`l%bmeWo0>^= zb2nFRzw-t$wzS8+Wd|{j_{RDiUtyX9Vl+6*$Of!d?r(l~E|;sC=O%-TeSGZke(#B7 z+q#&TwUs;0Cz*fXVI{{QHUnwsG~o{8=^H<}JG3k;OpTE35jBWg6qaGT7`fNX z%kF-AC`e~hY~8>$|E^+-jATA-AF%-Av!U&FUSd`GzVsZ09Krh@$d(n8cH)I)9q41L7pE|0AD`3rQN>>O3!AQJ*KelGHZ<}GBbfep$k=Xj)gxKx`j1iT z#y3sL8T=?RfY2njYg=N~_Y14vJSeCzpRG?(cRH&>nkvE2B_px`LX5ba1`Eb+&6}?KR zut@w+0clbJKj+70s`o#4!@Yd2CE7u$>qnOozIi_FCWO2gxyIulodoDWZ=4+^IXWL7 zC}pc9%4`ArwFnDRu__JwFO2Wn3J>Sjes3&^d8?b&v@i$v8cXxH=p?OPTgo(J*1b>Q zd35-#U^m$iKw4*HUki(N%v)%+L0kPqJROIpE_=U z>L{D&d%!h3Fmwb6Nc(9I@`t6Fkti;x-&5w5ZU!eQqNT&Oh}@M%ND4K{kZ9*3y< zxq8kD+CeIvhF#r6D=daB79X-X>1Hw%GJf9|Z z{q$Tu4P&+=DlAN$?iC%;KB(Cd%IWtFFzvEy0=l>WK!|nwqQ+6a2?0mCgTdj$!Ffkb z7)ZQVBdA*=m)g0+$yTu)<0(A!V{9w@juIl+{)cbm0VFKk8AL^6n|U3-(-D7{IZ7O& zJS|C;(1$sFM6k;ogliY{R77ELpa;xsPBX=WeQ|-8)u}Ff_$uqjsEw1cMMBfY>EFIj zQ_(Rb(%m6c3(|Ke?(SRCMX|K;NKs4j28&cdVX(bVl%a1fe?k^ z!%NEzRK0UuU<*J4;a9H~%w1iRd8k-QOgyMstIMgDC)#a)g>Z-Mr4x@(gSXi zX{#?EaD@tdRNCYltCHkMG9f8Q>OcdJz5n5W@t5U*UlIKuX~5sfJpOMQE&NIb|G4_! zO+x-@`tV0<+r{jX-_w$RGYR>xt!=-S{FfvIDTYA)?Ih%Xn3S^qDJfMjIh(c;k4*lj zF{@g!Mc#Z4R+TLYz^N;Tj8hLrO%c ziI1A|(U#QsYH^opGU=Dmclt>G1eFGr%>;Jukek1@9U*$!S+M2Iq!A8Xdhqg{gLb zoIcN0SllC}Txab-McQ1Y425JIB0>ebyn}MK7Z?kH?0Am+Fun_-4@+2{2|xro6v@O` z=M0LMsB@`?u|h@dC}($Cg_#7#b>m%R0a;7b;4E@sv3cs#Or%_9coi1QV>CR zL+Og595j^p`tg^FIL|Lcit0Hwu|W0`i_Q870lts{^|eNLv0Yn+URSGraNV+Wv+FmFBHm-Fh=rEH-zwNt9SR=QmlF>n zU(NVRdsdli^$%l(pH>8Gt@t`Z4Sj)yj-n-^^x7looZ63V+=nIk*$W3qf0Wr_Vx&Zsq?#n6lZBEP?atepB z3OUxSf1Zs@zzSDmPAbpDBbS6TmTg#Cs(R-16kRzg_r6I6SjA!)vqCo1V%&ZhqgSsu z3L}R?t|j>CGaZ82U%koU>}RE7n!0J<-*|yoG7!rBfD?j-*r$4vt~ezDS1{1dyzO&3 z5lV>;Scp`Og8|udRn@S75*oaWDq&foWc69nO?*v-c|3;meO!Ku{Aq9(?{`d*88Y?7 zQgD}4G${p|uajsVZ0vv8MOd1b9u;+H0<(3eNCJ@PU0BmckUX;SW2EscqYTU)VJDHB zO(t-rTzpMSLKt%;ge^f=zL^4+%OOXN4uKM}h5}Z&xPu6`S%XV#*#fyZhzJPehyi_%aU7iN{7spL z;Mo}O_9Y@3ryM0_|CZ8G)htipoJ&g{_!cnbwnnuPB%C{>dGnHeiH}8KIe29Y9V`bvuikLT9X}bzqMGH$tKq z)wSDdq>H{XQxP&4GW@a+*h@XmbT9k%aqay(5=vkj`ylTbqIo&=WtFTZ_NNu~l-Fk- z>EoMB(+JBDhBKuT{Kl#=@f(+_s4Hi(GVU3vPxd(}(~w@pf{S(3C*Togdkg)U#D(2)eeGF7+m3t3mGza=@(unq zJfB+TBCoOwB@F?@V6Z!3K*IKvJFjA|Sn1!ABPKPb9v$kH@`?f=tcKIp79#?{pj3C@ zI>NRKBe?kOZ4>i{Z{>^kwgzsozrRu^lv>qw(=$GfK538!>AK20KYPwdN3qYc^fI%P z=d|^*jQo?xY%@h~pF1?`1?^iW`6|rvFQ$Eb;|ZVN;$jxMYU~hHWT2i@E0vmw$C!dU z1KovhZ6M7Qhb&LJ)Y_T=Nc%UsnUu=5cy9T*%iqZQBCn-@KV4btxTo$X`ehyT-5+n_ z8ngltma7=Me8oc;OfT6F-lBxN_^wtw?%a)J5Mq{39OHj^PKH_D9)Tq;6VbwG;$+L}P;X#k&C(DobHD>VwA+RT#Md1=j$qN?I(`Q#ry z@%r$6@#W{qpUZJ-p&~TryP3BpXoNqvUN;AQ)#$$?fU6pCSalo@UkB8;0btf8X}+AT1L1j&8uUNc zh8@B)L4{R6ZDH4gd(qd%n<5=rIy{A3KY>ds5Qnlh!QTkDMo4Ta;GxREC=(QbNSGL5 zsiUo<%{|9uu@8v37cxO?`&e+D-n0NAOvWbU0+Bn+C!or-R!}1<=pPd#%LyV=QeiWz zjHz@@${yiT;#&=~Wu9F7(Rr|QvIo;gufEX~g%pszBW50P7Ba2b=_Wv<`OikW&h>|~ z)pM4+U@bSJH|^wW?+BPfO7e*g1i-x|n)$=CD*L&lk}qNwp169K;#>M+;hu_B!Zak> zJus&z7qdgQ!F(jp>g-F008p+DL9BC(gIxsR0dL8%cJHI#GIs$xdTrpF zaJwict@59jMevU{wP$scNNLh$_ZRPx*R0X7-cpY1aF+DFCT{1l=p=t;KL$5bhPYK! zObD9O+b=piC+Vc+v)!l#^Q1+FwYG%9f`Q_#-Pc$s*HH(1cC<2%kSGL62|QfYPGjAV zKb5K=N|ua?W@ztG&%6WV)KQzy8uHaHa{f)Q&02BN%OS>-kg}IGZH2?Fn`N^UC>(hJ zj_ksTHOGv+BU>CjnU_b#8-Tgam$F%W9u8N&dnhCrN5J`f-lLyYbM;VHn6J#bZM6F; ziDQ8P?p$x}qwqz8G3Qc`(nq>Tp|_m9czz4`B}RFDigxQ-c*v|U!ElSmW7C*Hg=iAl z&449^J`rjsksg@Y{-D#wM|c6*LAi%O!pNn;2`GrQ>PScr8)LjNIS`f9y$c%%=#hve zr;e({>791<%9!sZEmSC)FOLr>R{__A7OKelYaympWPVmzEF%`niP?w`Jp|GC<;0G+ zTsgpTUjRX^Fn;M>NNa|cvi0BUi?Mup6cOD8T$EzFvnvqrv) z*{rgD&~5-0_L4WpY0#x221%q@He8^Y$vF8mCncHfkN~$ZB%t zMG@!r0r((bk)}^i+`l0fyYc;C0f=7yqPKtt?80SIK$xA)AhLIjqCngwCB2c;{ zX-svn%{C}Sq>G?0`KNIKt3q9-{qfn|O)*PNDn{a(CXbj3fG=0bUd$#NSCsNLAGA0; zSPhy)R-b04H+bFRSOvANf@@b>cH`ivjV`|9jq=^dL*);QZqtq~s3?MLh$aoP`8qsF zLCQrciln2r)z-{aRlTe}Ig>RoDf2$3CfETPmdqU<+?g1MC#MYfJca2XLlW{r?-@%2 z6+p#`;6`;&qmDz(tUvEJb;qizWks9@FY5%WEhl#nb%BhX8|vN>XYirC&~OB0$%zKD zjB^VRab%`IR>Oa$+gD8*bVRUcawLB0I=v=GMgrb{=>bW)Eh@CGHe}xg$a|r=SKdX02+R9|zrlIy?fIQmsIb0SI zltamgg!J*_?K|w@ennP~fkL-csru86Ypd>OXowr(?iWnp9$HUU+dwm3SKT@5yY2f) zoS(PGz3I z+aGYcO?|^1yy3yEeTwIbq=qEzSHPbJeN4N=WFLYG2GYDj3wfzQ`nQOC7Z05@X&35^ zDDPS=iB{DvZk)?Eh++XRFY^GXb98TOs05w`M?k;33ZD0YgZUgQ!8-@Qvc|`%K%~+! z0w}FsF9I!S!yGDE2~s}d;M$;Hd=0SoPfGQFe^}UOl!1(R)U-TTqS>|%6J}Tmc85=s zcK8+LbJZzVCyk1UMcGBR=tgQ>w;DIoQsMzOQKqzJ8gY3M|KNb%cELS#nbid6m{Fqa z<8|YVafz89i4rsXrI?-%$WU;y)pt5M;YGKbwm^{m&tOerh!;^yP z5@@oG;>L?!pL)^5VFyExirJnLCYvEIkAto z@Wxx8thz{xKMLsrALGWUE%HaJRTd#d0}KQ!Py8;{*&YOptLS2{ubx@A_~`R}yixf| zmJ?{8Apg+thdJ}p8ZE5~6Nci2f#;V-?nga+&I6pWgG`4q2W=zZ1j`{HNp>atA z#mh*VX?^YaNaYrGxvBi_ygkR;E!?M5s-;hxzQxPcE=axbku0VxQRRv0p zPWXh?Y^)bVVh4cHOinM9c3q&m6J@OXNFB`Z?yZ&+L_7k9d*z=sS%&GA0_6*EGlyMj z>RkjnwZ_m_YMq0oRbovO)%%=$S_|df^dczcegN)zozBj?XR=#Yb_KPS zzM%j9@t%>sgX!|3`_mVy=HgS952kP|!JhNRvLwqTA1p90$oW`TE=}j<7&6q0Bs^qR zo|+|S#5#MwwiB$;;(M+q=@J=;ZlaakiJlDD`NsEU{b%a-C0rJJDRt=52;Ub0&KrGl zMfy4B-YMF7b_wF>7xt52CfJKQyGNv&Uav%S?GPt_1;*SYvKOn`%H{k<#DSE(+H?#?{IJfcLg8V$MrFlP zO0k&#ZNCG)k6ZB*Ro@ZJLBQcWo_8WQo>*~#@-3DTFN4&j}nD zNm&`un~$Ad#(pVteOuNjrx9t|m$iD+tMw%F%@@g-=)hnVJ#b+DM?;bi@1!?T+R@BN zH5=DvSc>FVDDMNmWf)_6oC{c!@-2pBhawGwrVm0Xkq4qULfMKagDmtZVrHpji?xZe z`$a>kX6YD%X!Uryx4A;+Fh_I?bl|N4$;*5IvD$cgFq}(_` zKbCz`V#xQoTJrcyF5>T&{SWT9Bc{En-e|yL&_n6nwKaC@;{j^6k4L5=CDy({Ziv2R zmk2?C)+QllW5W5l>Tyc&Dg7J6^8id;NeF1x{Na^9s zm!EIg;vhkxOC}U(tD8NK*)Qst{_#@>@({W*{g#Y)zTnSt4SFRt+Y4<&bQ%CcT+!Gu zKFPXAR!f6qy)>bdK_ULQxG?-kVTgvY?5F(FB}ofA8-iz;Bfm1J zmSUi80DuQwB2ty3z#P39df}~F5W;I{$IZauB;uO;MG{zxf1AO~O%#aICnuEQUsUr^ z4$x)4X|cJXu7@!pUnwZQh*vOwNvAe!C;;I^6lRHD%ub z`oNg(s^^ixVKP0j{VuN^dEVnrlI>#e%P8s~i(&^>rl)XpduO8Gjie9MBWIzU)Pka< zWD4NqZ#<^ul|Ds=m#Kn6tBJ}O9cl`n(9PHtUMEZwcP?sc8#~U!#51}Tt0hV3&y*QV zG~U!nJF-0Hy)VP zB7QnwtmnNK`~djLCC|*v@DxXVw{%e|?1r%E{M4nXo=2&M_{j2c&zpB`H9vN9vDGnr zF^+ry$`fQ8D%CnopR9q0=%p^nZ_oILk?=im6I|kZ=0`tw_4!QKhfZum)fb@ zQjtTM0Z7>|t3j1q;5(}egGLL3lVls6UJUqKpG@r!>#6YpdO&IBHEMYUQDGrl!{+Rd zfDXML)fFc)!2#t0ur)`Z(v663b23cnBR=={gz~C}n-+gi+~w88jNz)uwx{+yVs72- zzs1hZjw~A`<`xr2K2r?7Rvt850Bt+F0CB)vZgVul{i2_|+w0yitqp7@a(^6yW1SeS zCKn`{XQ|ySpo)}VIo3&~O@qdZt|+AclM#v3IB4MaZY@ zr=yA|v6!gFi$&W=j2^pM-!YBkep}d~(1#7#)PCctyeXSY5{JBc4R+f-?o;ItAp*1YD6(Wzj9FjdN_tmzMNvU`^9b$b{R{a6G6V(O{sC(9#BYLvzQo34I{`P zcl|+L(+nX%lLtJfTB~O#>VB!wOtlNK-cEWk6wstg7QKuSKqZh(kcp}oDFhtfTwcG( z^iulo)7UsrSVU07Wy(<&LpU6%LwdV98t5EcD5;NV;)%!t5+OC2A0pkx<3h;-%=&rW zlY_3jLPg<7$m-T>Bv*?f6><)po&m@~Hz{hh3;7->`HJON%jdKXm z-ip#7|KZr1!iTZiwB?X^UR5=YRToOZI%R6+<`)^H>Fk%U2Q@|}!!Ix59AsB-f8s0i=tXe7431zL%eth61CTV8auL*A<0V0DK3m4{YK;JS z*{@QZ3s9S;-52gO;InTrsI<{bUSCyK-*ITP@?b7 ze6)QE3ROHQoDwO*_4dF`Lwf7GEc&|~JOCvzAQuBwaiHC{KCsb_cW`TPS$qFel|V3C zSlkTINGqydj<^}v733C@(?Igco}=y1CJ1>D6t;>Ng`x8&S=;$PbEvqyJi0GslMqAQ zwv86}6yjj(eo46NOl|O3vfw~e*wj* zwu1mPUC2x5vJfpi4s)uDEmwIo6o?fT8 z*N4Gu4Htl?>&3LJWEE<)@tK3X)1Ek-ge{eRUdM$_J{0X)e+kQI0wJu znHLwIdaFQ&{}2rhnAC{hiJo!OnHUz9$yC#8K_3jDZ~Sz}7QxIeo&pRb;k1%I2&?Us zR}DI_dW;Y0;pWTYNRz421-+*oP$HWGWs-7qlTV2Y)PwHnOW4BZ0rWa1Lt{ zj#W-~`T}-EC)XCBOk1e zhBqMw!j@B~90H#eO3~|1!iuht5No&`&%2vbO%aMYKYIi0gu#+U`#EDYq{3el6oWp8 z?oBG!y4ws6ac>_9v1O>w(72ew?26y)meICK{B){lK&KoSq?Rt3kcNO+q7@`33e3o5h$?DA?IbF))+b!h2 zt*Scg^?K`^OjMY!Un&TAV4-#zDaqjJ@zK`S<3!y2Q(0INc@Cc3Hb(oy5AdhWu&MfVuQGw!^%FGxu1eR&Lx^~CkFg)P33-R z8-Iv4f2m6S);au3$N4o+=TB}-gi;FQ6@^rEh7i!%IC%{qi1Es7{{!7F>YaK9|0wLK zgHSTLfv=2Ps!;;CH(mr#Z;tLz;L9oN-gB1Cxuj;BcLf{S8ZuCtAXhW)DHS<$?FPgK zet^273mZ3)32u;LiSE5Z@l2@tRvaCFP%zWb^d7IOlP7B!RV03+%zfVf=c{ltCua9_`}QU-TeJ5-VHtJfb>;Y|jGtf+@T!JHQJeH@mk?ncf))Lxc{7THB|+ zh=c$%Xtbozl-@D3U{r^@RVdN2ULPqa{JkdDa&Q@8^hv#*89ea{*)g&^JjE`2GDWOe zN9-#9Rw8`;N)Ts^GC~u}u-VB9thH#i zb$~lRA|y0rmSrYo2sI=rp?p&feAgOO!@PVS_ndVpoTHTn?7^aP;hmmL+U=stXwiZ` z$Xug?x0;XXma_V#F>|oLFemQvqU?VK;;eTcd6#MeP0$(r8D14iNUwAKLl-EaMcui$ zx^dm*ys1U`>t+64{1PeuO-DL0UEi6&Q1dC{wd8)NUt> zk7YgB1DbuEk&NPEo)jq{IW0qP`7$es3%pzp+#y*zqfh~Hny48TJ0WV2U!4O_(lLjr zNfyz|--BOU5Mr6vR7oV~@N;3B49G`$k5-7V9hC&ps&?Ejyd}-=K9PJa#B4ar0S0LKj;~N;QiaGRR5O{Cl$|r4unFpIpvz9 zkaT?RsLZ;6e$4qq3}2Q(W@F~3PI>*L@-n9S#5RbwKR-e@jXP)=cPXg8R&IP`nb=c_ zF+U%e>aJ^%vc};u!sqWC@vY5ehlR;LDkD)-kk*G*At*?%?AqAkX%aam^M3#UY)A?^?oQ zTDMXavj7P%UpyjH4_qT&3chII61QG@#kase>bft7c_mxRQx_KSaCE#{m* zmh)K!Gp8YpG9A%^>;>X^WbA9%PtAU0dzi=yT%qeTj(K96TobuX2kHuo3HtD=Mjoc+ zkZB+^{w|c(lI(FoX^L+jVer-B?V?8`htNaj4?PXS%rn)tM@-v>HJp8r*R5y_{*t9P zIs$Q4#VZsqFj4ByZK*8Ep`sVfYnyJ-J*;{CFu{;SMWt6sIL)Bp(W1hdi>R-}BgLXAS8H;M<6T@J~GYPky6F+Z!SKL$0WvctE1qb?fUdtugb8r}R zgzV$(16i1n%?%ne4;N-W3oQBUnkovhYLsysr|Sl`mzYXyES3#BHirn89PnX>neP~I z+hTo5VpEP`p}A#@t)BI-0H`2nP{A(g=c4IhY=&<>aG|Vpl{MgyFC+F4|EeF-3I4P+)u_Vfor}^3*l6&Ou+gT4(MjoMn zZh=VPPD@l-hQuRC6NB+g#y1S7W({9Mh`>4QmgDMtz$F>!TQce07D)-qw=*6KuX9aQ z$~v`%?eV^M6_M_|cbHW(LhfEq-d_PM4(kqw0z7{{8gfxl5;MA+Yg^D1xpNmTR7|C~ z9jl&j+@>-v(^woqsQDaWDqQLz?3(eDO+@{visM6@ZmZ*$c01)yR5kl$XH%A{V(wW& ztvw`djOJMBQ1A*~=KhpQZH18T|~+ZLy$1VCJib$~Fpu z=(xV4(tPFF7}0|$XWj3`GwT>|V+(!fl7H=hlSS6SD~Tkf(@S;2$}>ZJA&aW-hQ1M? zcl@7~&jBV9?sQk+&lh8H{c9B8LY&`e3b)h^#=NS}nDSkjEe4-bU7j@|y4nDBRm!!%4H`zO`Xg6wfW>XSSsryE}Nb(aDU67FyUlLT@skH-W>qRCRbYu$vqk?Iyg zz}^X^bBX{1-%3~(`8-zXJO$4^8Z)_qTPRhPwp7j5i3w2)*c-H1ERbIabSZknHJYHZ zUl-M~buDvs9J|QRdT))R4jxFZ)3Kl?NFk8jPkfFLC^{m^2pEpZAv!-8SJvKmY^O=G z$B(+(wQooQnxrag0js_(E(MG&s|74j{V(d?GpfmMUE8K5Ku97bw17w_^w6tH2@ra( zqS6fkLKRU_A&}5}5fG8yOF%#bM0!U$A|leIOBd_&vYu7mXYIZA*lVx#?lHda@BQP> z9LXFr^E$8dI!*yksM_39H8**8y+)cjOR!(lkX7UG!V4O=7n-ZDimdu79$p=?Z_?mx zin40jRUF6lA}RQ%=+{ZK{X$*_55wGKAiftEH^;<&fJJ^_K+~leVV)e+-Kn(_ zS&3`Pb`<+V`A4k7*I6sLCB?u|CbQ>mgYa!_ppGWATKmKB+$*}|1yh>8 zP2G#<+{_GsRQ)(ex1d)JKt5WObo-0242MtQ{$hu6A)KMmkZFdmu4Y z+x_DuJ|vVBn@P%+S`W78J{Zwgj-VNOU8^_>$a7^!AeJPx=jbxp59c#nQQU zAio<{JtOdPHpNfsz<8EGH+uJjPM^edUAHw(s^v`VPeuQ`w6|`ESLJxc`7AnJR;0LB zMZ3}Js~5jqZSOVatiy`n~$bxhahh00rP^CLF!ED1QlFbyj#`0xQymcc^ zwq#4R2B9DYTFy=jW=L zcLi9Y^J{VHlBte@32q~n@iUkfBGCAVY{4+VU`?54rht$bA ztXi0J>-b(mus{}PXF=s|W-8<+oLUL>XrQOzx@Yt;qpKH_#jWh#y_=R01P!;tlN5Kz zuquB+D?d|V->v9%p^X_`k+KV*a_%luboQ)7h=)-!QoK&(@VoieWwVI_TV3^=gNeuG zst}3vF4Gw;!_JUKxTB7pq{xC6uIOfD_UkoxM;iYi(}JGISI3ee#}f``xkd>Vgt-SD z7bpuUR_kD?Q3m}D8ORwbGpt>>kiq{FMY3j;-kCaXvxSP-YT@0TksuFb$uzd5TY!CV zMCMlfjg$NGrt&xYLWupAz~T$Q^)WQoeqa>&$R7qS<4n*5SqlksKMywN#)z*eVsqE` zU~|~&Z{N=qOSd{_LHTmI7U>2wUvGrPu3*q2-q~`*Mkrg6Z_UFu?*?@#c#6?z@2Rsy zncL}=6<2MVd?2~TKeDR)UOxY==KlYnDDXSt>~9PFXGMYkG}?7efd98dfxnX9{$S(y z{gwYg6p)fSS6Tk|Z5)3|Ejypq`b%nA>R(gKs16g0=@EPrKqow{VzM19jzE=l(etS- zOKh(d?|^EBWqlkL<)n*@Hitdd3oqq|D}acap_+)0g+S@(E}CTb{&p|$GYSGFLu6qo z_K724*24rpA@LHj8bq@A$ide?Mi)l&t}am;#*XbGS0Db9aDZ@DPjBzOt$f4#&aA2j zB^8{Gs43O|iP2)hNJ!H@oZiGpoPJ<+zR`(}I=+A3jDa-yWOU=rZKj_i>4FGkwDyym zw<8Cv%HV-ra7ikss(8J+ZrNDlb`$0H(Zj}fK)sZ`!OM9VcN&O@=0-hnv>pN!F`kQ- zja>?$t+#cf(+iZG=ymI(@k6Y?J;<+ixTqEDakm&rc98wV|KetBkAQ=O&U* zHZMzlW~521OHd7;Kv2?o!GL+1`209>v^QK6Bu2s3$bhk9zvAnGS?tuEvVk>*$zq3J zN+K}PfV^lFCy-``2vAlJ%g%WfrvGDBZ|TVy3<`O&q)A}hsxGK8tz%LpOfGtI)ao`+ zoP_F;r6`GuZ{Rco+D{mw{52O9+sF!&w`1eoRHX zDB5BE%5I^k<6CvLnfD5iX??MHD8&#BM9<}d&0O+yV;M9|)75O~WcA1r;rFvs8BkEw z`A+0O(T#m*_nO_?+1(;WHhl&0jX5>xkvHtbD#9blxN${S>p9Ct>WAYo;s>^7Wipp9 z1I@R~uGSBX`SKwsGlsNhnZG3~xf*A`3p4U1?v08HL3jKq<}EB}L0*2i zHDkZ&YdJ4R>$^#PketTy{2dn6 z*Z1y7f0<@d@VK@p6U%3SYHAA%er^Wzeqhoy?o@RXxTu0p^Qnx>=M^{f3TEMNd@_Vq z)E6(JEn}T$yNSN#u=>DPlzL`Z?=G)Y?_~o@*x9oXc0jd#z5e;Qm>hBYu7^;7a%S8Lxrc5b7tnfmwgV*_vHg%s zj9)KmEVD_is0i?+VGqQjdjzfxDg)X)U~uA>_wcSpa`b8qMHK!ri~FxaDS!VK&M}vN zJn;YEDEup5O8Pv6{hvMW|HV<>KZw8@zl*?ZJ%wZcya;U4Q*bT<&nm#0B^x%{*heLGux!G^_-0TOS+Ck*j3v+@1jYGoVXOS=_-_z~07gXr_Ykm}XDZ#hJ zT{k6r3@>i87}m3%|8MZH06`%k|7i34>4*5+ulGOQJpU4bO5yLISO4q{;crcXzipVm zSV;fn4fB@`_s0$M2R7E^v(rC3vcV8q#NBSw0m~xxn z6Y(eTly84-nC>}~Du`UY+e`{}5!V?;Q|N|h25H-TlS)2ufnEG;OPQCSXOGW=;JY|~`7J=s`dQgcNLI6;$u8es*@y=x}F@~kwVb`t{J#wq4 zv37sK#xc-xQZ?032s;!&t!nb3=kEC814^z_{oa6f2$3Qor15jkk+blX(PD~p*aa~a zE``^gbc1lBHxvArWL&;?*kOV&krze;3xV2vXzbubo)!S$by(sW1eo`nl0rQ(>^tQ3 zzK_WdRihvBaH6`}@XxMs&95K;ss1jVTFkaAOHF|R5++eIGzO_6txPp7z z=)Qe`9K6;dwn7#Fd$K+xte$$Aqn7#k@gVYqa0MoOVeNrPnGwd+K>J`<{@1wa1LEg$ z8IGVeg$*AZtIG2UiD|je5bTcJvcD5g)Ut=q2j$z-P4M@V(p+%+J7lm~dBXy)+b=N6 zs)Qy`g&=41M#FBHcoTB(E#d7lC@fErf`$a>$iQ%jqSr-Z3L+2Fm*gapCw=W>{GQ6Z z_EMqX>1^Z&*u_eQb@%7dbslp_R(gEmC%RMo=;{mrS71L@?eQ-*;Y1`>`EWMsF|wh_ zGn>jWR(iQKO3NKOt)`1kef=XGmjHu_r5>5DJs%|Q_mZwz@5vKi@`Ka0;4Sa! z<9|N3Jx9n+YJ6vY+>d)d_+7nK>MGM5HJFaN`>Lu}0dgaS4>e)PWM(LjU`(TZ`iur{S>O8Mc@=Kw3^k zv2WfFa!Zqww6QRny!#G7tBbC*Fk)Y>jfK=;;Nnb;kl}l6R7biQdR@`MD^5(1=(8bJ<{GkiGATvF z92klXHsEkRj?RM?0pt>!E zmCzg2vWSr1#&_7M$p)xU4WF3e9IIVA8Zzom*UR|!g@tRAAO_m2u7I^G4Cjb&?lqA z@B#id-RT5BM}LaxaRjRibE=O+((@>jfFXlH1o;R=9F{|8vhV6!DrgN$Reeaem1id` zm>LmLy&kzGibGp;D^7|1mIA*l8|lL?MOb6Hp>#`JT(=^Z$|T5nT+gZRxMjpF>+l(~ zBBq|vj49V&3S+85i22}ea)uhueK{(eoKqP_=4*Om;;uG{kVQx|gVM9_Nu4XDnWP=( zGz#YX>qvPq>mm7A$8^b3ckRNJ3usUBkIA|`lEy3aw=##H-;*b&P#nm(uD{h}S|mSw zsf67rX8Sa0EIw+0R~yPEu5Q?XH2^5d3GtuMry6pZ&FEWnLV{Ex2W6AeHS~?&7L{Yq zvmwk;*239$3nV@x+WH12WpU=E!R5;mIs5_F-z_TX!!q6ZwGZiTnm({)$YImuP1Z53 zC~EH8X({;n**B4AS;i38LlGl)V`AqUDP)aifqKR<`?hY8?8D5-lFTc~hSR?2Q`C)~ zNciweLo`-9Rn(rbiXJrHd~)u^mD8hny!Kn|2GC|O$M=b zJ$%Zg7M`daqNkF8ImLQto!pgTo|hS{4{nYf&0S4mUM!eNF3q>Kwze65$~+j&ELb(v zddfTA&JyoGC59N7j#KD9)ukS!f)dA!_6?L|1Xp*Sbvtsf(rYzBb=PPc4;{EH5B0|T zLlo|x7TuRKaj;u-kqoz;mj5^c(Aw?%LOt6U)wKF1s_eu`H#0r&;&u9L%_5!bz1zR8 z@+JjN5j8O6`DG@`f)GQI=1~JKLbvKPl|y!32wWPRG?l5fpnq&rbtKL5cSoYN_>Gz=+gPz-Mk1E0`$crtnxU4ZH(tKLs>@~b)h7?%TM>`L zR7Xv1`LjeehBMZCT@nxB5A5aK^_dMG1Wk;Y59&l$;+2EfK8mDw6rO3KC~jV=Vbm_C zq!AH)Eu8SAO^Wa~mYcK1lFXEypIxJFImO9yq>6XqNpo#`aH-LVk-Qe!o2C!zt>$KB zcM`*IZ(U_fzUf1VQQ3VQ>H#d05|mS$3Ez9ZPCRnzTv8R@ofs1mWy$vwxYH+FdSI=v zUiyP~$hJIMe)ea}oyh@1lD4|-?oF-)#h;fghmoafr$>zQp#a?D<{EslMT0y6E>;{s$pUR_dI|^v_;% z|J}k!18~mPX9P>d=;pPTaj*I)Bx*&6qq*xHmDzMl7XK0BXv`16KKDE0$VUdoue)Js zv19a@w)iEq8~asXMN>%C=Zd`_wG8~i++gp)k6`hA89Yo+KU~QpRmAR2_q51!7X}Z2)=N9l~Et>Q`5`=&hDc0vNGLOqv}SXKpBEA$YPn&(rE< z3=i6yzgk^wYnYmjUsDP|IkXLuf~wiUg?zTYaH|KLIlP!y(u{AIq9<*FHM+Vr&Gn{Y z{Tivo)HW?A_fd8%)y}RurY2^9hc7!FGq9~DN83kqSLp;O)d?4>u3Kr38S*MS%!-IQ8yFV}xz*1T5rjf*ErO%~=Y9RF@TxKZmKU6M>LKG)*Q zs?1=^RoUYwM!(r63~@-l7VUKy?id|5tY3?9k)d}jKz%h9ug8A}Y}5=HyDZ42eifD? zbs6K{nF!cs$&e>6yiqiREnuR#=3bO7vvdOgGH~D&1FoLw!;h+{HE=OO)~8K*M0rP0pXY9~5s*5g4}CW#iIWNB|GJMgJOO z|9G1doTyjqu=vYXy4Sd;C|s*cdZAtGJ#of2xRwjE`)xfM9Wb0Rp^*49U8<{#vg|c`?HS88z4`vv$ z_(Gkf>Gg#S1Z@X~C;Z4MD{2t|$y>9I;GUzykI8_dN$@P68_p|eZ3XHK07D|~nz8$g zu>e{nl`JSI-Y!hFmIPq-!9k`~Geyc4Kxy^g9)frpll>AaQa6o7&h793vTr7^yKZJv z^s;=5Z}e;M=x*oo+jy6qDs_K(7rL&X5M=gCqFR6ZM{<8lk%LQ*kxi_StoslRT%9hNyF9xrPYm`r?%Dru6ADEqGQD-(l*UIr_x|Z&ZR1|(?|rByhZ7| z>qu&f(3p(dQ1W&qt#8~pLoU#8P+2Q#ivmR16%(t~s$hDL>|(Cy2U}l+f@r{Rkc5uN zNS~)eV_6{lLRLF3_uy^G)aC4zx_j0>FPn84l~fDd1p@smD~%>&xK=i6)1`?wrxN|1 zU>#L}pB+i!B|ckpe5sn%jA0s&Sz_E*3N@0(*PDSmA8$<4-3=|WZGADz(FJkRaF42M zp*-cVm*v)&e&wWvIvb7IiUP*R3Q12@+j99J+@MMylpCbCKg9Tn?@fzx*Qq!>2^NJc zkyyfCc4je|DoboHZg7>hn3%V`#Sd)A*db@rhO#a{|HQK=KGl7#i#a_4b(>DbD&^Kw zv#G12Z4)dZwbU`&8E7#1{`(%M4bg%)v4ryw0MNG>u&sX)oolOrN@01X#}|vo#i<38 z;A@>rw!qkW`RlioD0W>w38mp&h3;nM6kbcRlPhh^b6w|ReIjp$eOaa=aGNHbBSd`r z;*(1GTLc#UVRes8;e}OCTM3AJ6E?J2IEL8ZJ$OdWpUx*7g_!}#$J0U7Iafl7`E{AuWcy1A-VjUv&a zb=@2#X&A>D#eKfi{>Jm@)yo79fd!NnG&e_P$&%_jJu^K2;6bZdvwc0!b3>gkg7KQD z2sK1Y&6}|*mbV+X&)wRX(zL1J?((e$1jYPllHMxEtI|qx^={+ITF0j+BF}dC ztg}rk#9hdo`EDB;$tH_hJFnyxIal8hrS4Vz$QXX@UHAAX!bXB39EI0Zbc7&=VMdUT zPI4SepsC#92;YM|ja(3=S&E*}x|jNDNSf7@bZZd1kZE{#qM|hmuSt%O z7)KpuzT?3M@g6B25B#;gQ6TX=HD0+&q;nXnZ9`bOC$kz#QNkE4WR_o5^EAf9?fP$` z#e@i6O``f@tNlsEKg4avhd#3c)zv`>+9M%_C=>PML70 zQ?fq!di9FMLqeJalcbwm@vEN8OmUYbh_6OobiEj~fB(YyeoaN&ZNG21_7^;)8g@9? z-iOheG&vs_(RJ`B(w52LJ^R`|2jBok!AT~yty?lE5U2l7zfab`)RbW$pj zQe>rck$y5D;%D@P^XYrUVZvR_UF=iCJu|MCdS)K;X70a^s)cm!eyjl4ijzz82)WXk z9^t=ct^Fi&yn#Q|V^LqKTME0D{8Q4YX^-{!ax-WP8idOrfqzk|$($ZGL5F;)DW^Ts zrHdRga9d`ri$*sJ$3kQ5ZsJ0WRyPt5-J#SLSR%9&KqVH<0ss~puO;iOo<8{G^0A1x z>zZ4uH<5I!DZrq7zUBj@pQO!|Svk z=4yrf1cYq)*reiBjSNlZHAzS9cID#DLz-j!x;}%(!I|yr5t`aiS2v$3D)pks`-$=r zJ~EVJB2jM9UYIMpK4Q7muPFH7`-0zaMkDkXqqzf4G?tDLWuWOZr?eT)uNiVw83)Y0 zL0h^CG}#-73I~>OP9wh=8+YEN*nbq$q%n^E#K#603*?P|KyGsH9X07nsd7CEYui^( z66vpu2zG)(O_06%TG%_3MinJ{Qe>SA;_G2Ujb4MzcU+W!7*YP`ItW z#OJs|LrCciy?wlJ0#MRu+8}m15vSxC%%9k;?>_U`APHoGPmg^{lXyBpN*vtx8A!}X z-+2XMa7s?B0PWn65p#K+PvVVnyV;%U+uN%|b7P0h?1!eZ*R}{wUxehlrRr%#t~)&F z%+9Q9pWw4~Okdd7H5TX-eXozCht3ILj131;6(R8cgewzeEaIOF==a2c3CnKA>l$IQ z2h@Wl`28~~Jc`-CdR(&+=b8y#wqPne+k@xHqFC`{xBYWS0(Rf19RtIvp~RVO=4 zDb{IjhqftbOQgJBl-SMOGqj)@0u5jQX&wvxHsSuX%X`otR z(@N)YJ%ZAGrHd`TPgZIj8zwVQUmCIsjpoDGHZl|Lu zw`f?*T42mEP%~Ph#vOi`GIqB5Qnem2?sT9i@R_aRCO_2yzcZu#nlHyFXr~q`StAH_ zn~~V-j+ivt6rA5oPM56Cu_S63*9hjh`d=|TwV?Q>#z!A;^!DN?MMk*TUa@jbcb$0= zBk(-QfclDwR<$)%rjFY~sS8{$T!lGZ4RlhG`{JiHqu~2RZHL{GR{>>cqD{qdbVzbe z81C#;w}Kf1FVR&=GvYq$-QslKIa4j|_DJIHCT-}2nbFI2i5A!Q*m z7iDQ9;pU*ov>>~tCt3T5?C>|uBZ~Q`Y~%i5G(*q=p*av^&WWfIUX9j_kky3*=s^L7 zh4EL7xJ|izsCoNoKZX0Ia7Xll8JHMhf@=$qwsW`e*>d@{D@k(f$4lle z5-hM9GXhs)`E-D;#+_f#^5%xM!JTWomI9w#z_i!aqg*2fWAX=-iwrM+a+56f!~`lQ zT3K}xUg|(usu^t@hk?2!U8bT}pkRcxE9s7*fa{T^V{DOB*;82%^0LqckGNr=|0OHS zU@5sm6ZUU-7u-v3$r8Hbj@IN@CS=bMZAYEsZiYqz6}WZ$HGr6|&Mnb>#8s<| zpNz-kDCyJE!JOJ}@6E^nW4p-V`dP_g-V|1vjiW0KI=8wN^DOnSZe3O=OjN3(As;k* zD?xK4)*~)CvtK&&Q<8QUa&hgU1x<(-jg>brgd}*r&A4jb1`ujT?xbR67x&c|Qr)&G zyd3;A2Kz|@-8JLGa{@LsBk*7=kc{j{cCV@XW>XLQ25cL+^W2RptCoT~@x1i?*A$$Z z-R7^-?U#(+Cim00&&1~yZm_p8=;Q&`NZ)cS`20xz2TBkm>B_yYHecsGZ2RU*C<-i< zyDekZa-#`6R{mCdlB=knmVfokjYLJ*(Az&_kPh*DVxCP+@r_2mHoW1IxAo6Q+QsNo z1-l?J+%P^M!&rDAQmO#9NB1DY#R2DkNor-=S9a&qK?2k>Rwb-el~D%L^-z&F|M;^x zCm(n(sZ-WPUN+#Fj?k6wPVejo=Zrt)e&C;b#E&c1+1uY@#p!HoshN>xn?7t4gSN3w zG|ks6h#x*7!)|>~SatbugnGXAkgu-IHFq+meo=u_a+#tDS|7;sNhvNJ{ooo7Cm-*YO{;zWLhvdiK#T_$l#Xr-3&O;^tWL8r8^JtUO zpI4>y=Z8|rKR=a1{`s*K@-MA#slS9({?qA?zkk?2Sl0Or*k6L2{*j>cpBn9o|8ArG zKaX4e{>uL#D9K36{PThm+rJ9PVU*#dZ$z+1YyGKb9xlZW0$PX&z=?mFpbE!})40hL zCThu^hw)ThW4HFONY+K-HDFV^X{MNAA0&)^U^$7Dn`OwI5}C@=o?HBPd61^$O`WyB z=Rqcg%&}hvfPj3ax+c@%VV$c%8MEi{JVRP}nuhWP))zS-+DF;-$q&?6&3X#h)MkpV z!Qi6K4C?8X@@Ic?=dhGXdOZI* z!5UtWht=Q!s+aoo7Y?`Ti9k2FP55Ohe<0#t<(m1x^CQuv12R0Tb|*vwW%vMb2jkbT zy;UpAJw8`@~(ExxI(LHntV*jI@D1#jkP$x%5VS-zNE57uEo;i60P5r zKC|?+@LbWm{>rpt@}eq9QD&vHx`RFJfq9v{87be0rz>*PIKDBtn&{3L=gW;30Ro`N zc5EW?VB6vsFp15ncle}K4NiPv$T$RcN5FV!#ki{pNW2aWK2jqjqKmMM&Z38gC2mRQ z;?a@xWE_$d01!fOQXVH6H^$z0-;TK%_`dN#nAo!Zv)#x37MP8cZOl5y-Fk;-z%RsF zeApi?r1E;_3xEC>zRQfrGo07c*DdX%T^_Hmf5AbABRkphgg)>z`2w!9TE3GjSw_cJ zP%EC9wAOfF6+hB0KOR4!$#*Djl=7T4;iE;So`+5|c=MGpE8ruBVS3Nco2rgSYH70| ziYbU^#O~g!>^xyeFJ^#H{TK28Mf~m-`4x@j^HvOkCJ)T7@#)YTk1!K8Zl=y}w`-xFJr{{o zMVM^_H5_@j@AWS}d(~7;jN3P%T@wEx)<5yXJVxM=@t{mkVj+Wu$}e(t6J`#d681!y zEl{WnLi_D8bEld?lr*=XTBP8+?1Pj5@mD6w7WW|JNj%ihhL*g1J|T`xVSk5L9W5a@ zc0N=@`^Infzf=%eo9_qFRC_JGJl1&6;hTtq3`{9FU`j7^ji!qKI!|~9tz4|H@I7o; zX!+_aw!k19RCw`W#^dxjgYdUJYO^y86Y~&V7^QdL{!_u#MUZ;SHQ|t4DQS(waDDf9 z1XE>+(Y~{C$GAocKv3D}D0bw6`U8uj)+4D#%v}aLeevAkkD`s35Iyz<#8z+Aa}i#S zFy0_h5Gb^kFXK%D!!%;&D>(&$`-RX~AJv`)6QgcM?<`P*yDPseCr0ofDVn4pQzVC! zHA)_L;nuIYC{G#U`QGehijV=@Fw?1sJw5Gp8#>x6GEOmEi3gQHIkq7|r+Em^vZoL_ zZu?E3ncb}rnFR9$oNT^KW_z`(Ys#5~+Wlg<=l@YRk7cphN4x$dIJozFdyKLFak zYBh8(%$j|lz>2l9`-SP73zNR)4<8KHz(uQ+b>52XHya~<+=G+!}NPg zOsS9WKt2>AP8JKEtfk&`x3y7>Gifp{F#}Ov{$SLv*u>dvS2438E?J}mfn_Xr=`ZzQ z#CsmY1hwu9GjiP`*fLOrrEemhe}h`@wB<0}(bT*+qtG#!HYP@X=d(7IusEuDoEm-I z_Q6@3bq%?=ip`|^tBw*u($jpE*c0oR?-3^;tUWI;zG!6p`sx0ALc0ko?W~-d>;Q$P zgA0`0w@x8}SXJE=TRj*@FZsgh&YGTXS{oYD%Qj4!|AocogOPwL?)^M+x>k1s18t~6uQHSt*u+X{_ zFBK2q$PJdaXo)3V>p(J?tc#+5*yV!0#lkJO{P+IxfoUT_Ws;fC{cUJ&NJ=Nz3cM=4 z5>pPB8nr!A{J<-08vtr~&iXBiqprC^S|05*TD1Q@{H>CZd{1?Ta;8`XrAW&6v+V_wmsk~o8Cp{moJgJw~Jg+(x01an77Th zp9WxFn7L)1PtGEp)KjImoaU#5Y&!uhN0#NFC_!^&=QqNx%oZ1Y<4og5NNj7I9=qhE z#?MT%^)Ezho<^m+JGS-pjUlY55%7uKv*cdtR0~?#>fd*+n4P z%9W|g_2i?f!K^~2%WUUOqeQQ=LS@fo_w@&*?xN10+;(5_p>)XT?)G2rHI?%u%fz;L zD80WOQauq|(1~6$RU0k)j-MlTD zfx=>i05FT2Q>3yB*J9uN7ZOX2R$F(p9b`DSUBnKW+n?*y3>lhmqn#RpihReN$%U)+ ze{SE~xYvs#ea2`E2vQw7kwUOpi2Qo&7OKiPduX}2Tx4cM|J<+KTxC#<*#&*qi_E?- z^?8G)7rY4sob|T*eI8yG`b^-_YsD<#GToIvf3U0~|hV1es_&0a*ojzP zzMaWHR6L3g@W9!q;r5cqXbj4y2D~Y zQL_ZyBr9PUfeq9SAJkl(L`va>HqxVt$n4ZgAwVB%K#>-|tSW#Eqoq2}y>Xz`OEc!G z&^rTMR#6>F)G^r8spUnBmM}hN(RImcqIc1ADK9CS@8xd{r{(^~!#C&Iw0~&n|3kCv zf6IyeJM;Dbn)l$pwb=fnQt>}oY!&}ai|t>%3xBZK{{G7USSl*W{_~~czw12!Yj^%% zQ?^B-pCU&;?|(z)z$n4MyT6k;6xpL`PCFvIO)+(8pz!3|dvoVNj&npu;#`|4Y$dvo zQy^yo)d*hIz`v?n)D>ZrQ5gRlt0U8;B)u+0OJE{TB!N17VryzE96u)kkJUcJmWtG> za2n^PEz=h|mr5U11D)>|K z3JPHD2K^pj?SuQ6_lg~4c5H=t-5{c3wQ}Ry0E2%%yX2UPF0@vnE*xe^|4s30i~jyx zuax8wT3%DMe^N%W%lSF4Dud?$Yb_sU4*AN9A2@+F<6~k+9)M|@P($IYh}ff}1sEi? zMOUh3h-3$s#TOXu8yff=zH6*%RwVF5JE7r3@^U7gCh{g+PI=T|ApE7?)-Mw6u3gY` za6z`Hom59;An$C91BO$TqA106b}8){hS2Dm=@=tAwlFF~;2L-M0Lpwj8$L!2Iur!xPR$FHexc~?QT>$;9#qWG zQT`ns)P;O(EXwp%+~s`}1@L#uc9l3TZ>{`qpJC6CryOd_%16H**}=40bh>!_zVoib zz{CCC`N6ME?3#`IT36d77ZCH(LF}Bf-`>=^-Zo??DwH8D#+fJb4qO*2YFO~?2pw=+ zyQ}}0I{%t_nUC69hn$?7;#Vd{30+|VQ(@iW^80!!m0khM4uSv>miHx`RvL77LiSii^cKdcOjn}7+MPR ziA&GhfxUTXE!NnFVKlc?bv$#E05)md*V5Fg9Yc%O@cxttXOwQ`ZxpjmyQB2-lA~#? zMgE*W?e#-2qx5ZT>tAWd!U`}wU$+rTTtPR;X&xQ2SBfL>ZiRCm0V3eNfkI_04@T-pl+O4^>kaU2SN5T<=kCSRs=CwAO5!Ay=HX#N3A zu2GR@*4}3ztbEN>H4+meNL4-tVcew3s5z4*`CYW6z7Ep` zZjI5?1p^a=5A*u{;3h*~1B5)Ag$py)9H&lF>aYyu+&J?gSyU{wRzHj=-4$Zmd9!;z zT1M+z%{z^8R|1c}DZwp?1;7C@n zI904qgzCyFBfE{4!_;bfpZG;kgJ^c-gRhO7QQR)&l$K; znh4*!lQz-=KD|Mq9j-buNXFh%w%2r^9b#_<4Be!>{J5!JWd9!z_P+#5k*Wih55`rmmMwdUjYOU6;1H0c3Q5MESsruGWppzGTb;m5dsO&tK%%ud^^RYsW z%|Hfayp)`86YJ2~O*lVmc%!`JO}~&KCNAmqp`ZyIoV6NXvCdALj$-0%7BWAT@aOUsHO-hw)w2J zaGkD{BS+;u6?=oZC#JQv(UoyI8#an2ob5dZE{roc2s@wH(#a2CmoJien&z(7H91dA zuWU%?o!HhZ>RS+EMEt#Qb(`yAz)-rOtFgOX!a4j#GybUPz$JpQ@}>>m_&T~9r7NwZ zan<(_rctX-AWvUmJVNhO#CB9OKVG~YA9MQTp++iI99@JJ5+a*1+G`{l?JRunuxwwC}fPFIGf`_NtXt>y_SE zuKPqMuk;FjjHmo|XPxN_wEOflEnedPoZt;UCxME*t(Ny$gJtP*&9#GQ zia}lc&7DvpZRTZ=ng$N*NkJ)akgB0xWkl-J0K= zh?4y+@KG_pg8q+Nwncm1$TQWES1um|p1Hw3k2roCk=6RRS`wI^%zr>Bd@$ImJLgj@ z^%WlZ%`Jh<<-oCt>C3G<2xvXECV@1i-%>?G7ZG#toTU766Jy!9}a|vQxGieN;w(p_*UsOn~w;4-A%fsSsM7w42Yn`0+9%ZfFE<_;Y{Y zc!E4wO3Lr;F)UMZowh)%TD;G|D6qamTSBSlFV-`=qoTx% z6p;2U@pdYs4IJSWuqPg+t$mkl0peVDtxwe+(%%=gz_+}>gR3J~GkLpa|KU6>a38kV z8MvoSzfivSVPt<9a=J^;KUZj`NTJB%V-E1N5amS_g=Ix)XkgcxqHJ$2kQ zYQ!GrFX}pNT%ZmNBsNPVY}iF~ON4ynto#*)GKvnT<^pyTbt*@>J5z5h1Z%Ed?b|pC zF$t+;8QXb->Ky#!B={TO@zpTKz)>-^VXzj%1^{XXbR#ni=klX%FPG>nzh!b*lRvDv zPUPMA?rlhgDx)IGTDfAa_GnqQVVga#fF{J7al;?zQ)qE7Xgf1O&<>E-#>eWxj}mYC zs|uH6gLWP47kP7bM;!F?>#U=TZ3-9Mo!2>j)9opasW zmb~4w>fw1}TlaZfi+B%;c+Fl&B(EQOgi?8#(}ZC7i_oufO<9d5DV+4Qkohk~A2Za{ zwGAkK0U%a;e}LUZR%uaoI#6uFaz%+NFKz5f80X87^~_Hazr`Xdk~*Jh_GcMyrG))x z5<^K$S8EJ>0Zb zR~st0p7(pcKuh>-|I+RqSK7972dc)dn0#`b0f4YNB~*Fm$zNo37OVVrCWnnezv|Ws z#W$l3{hJ%>5O!Jt4H_Hw`iy)ukN9-EK!)o@375Ee&r+OC9(n7C@$*8!H?B~!MQbb` z`d$gc?~>Iz#Y?9P#hQyiGZ19aAWc@fVp)CAauL#&QXqWH;PvI=F-XEDz=9rIxF}Un z99`}M;qDw~K%-qUa)GgrdVh_Rb&hHO8o{oLs$qO|wa3K)n$jm^of$loAsSmMf)F=Q zNF9jbjxeL=bu~}C^uspbgxSy`)E{{t08HJ(-&=!s3CkaL`|3tTrh3>ima3);#s&#^KGjOGJ?zJevLZ{3rr|_RZn!~gifggDx+x}GC=;o8pg-Glh8q^Y^r->g3}<> zV%cMFW;ntD?UZXEv;<|o08gnC596#zN!D8)^iHrlNnLoO$(dYyiW%L9x-nTtMSnig zgZhtH)E5azpVrW|^EzPOdO4eEgq#O*NlzIRPW2chN(cqm;0f^8Q=e3Q)UG;PT2<&_ z*WYXH!c~joRDI+J$F6i!Rr3N$d42KkeTEPqn{T;hQMx;PH4^(P+ERSGT&0RI6+#5 zcI%E5q$EHJ)&RJHPD(IAyT!&HOZKK8?wv)(h#3yIr}Xd`rEE2Z^*2v?Yc-^ zz|JYRX6pP5j9$A5iMy#+{9RHxYxDF)@w_|JM+xvn=a9wIntLe)jK?*|2bB1;bRN&e z4Zw-dfk&?T%$oGTJ9MC|2MhDfTvMIp1*~zjh4UJeX55;ZK z530cLulx_HfSk<#WbpR?7Y$_J^9HhfPfTsocTAJVlcd#9^Si@`!3dS{J!%p9F%$PZ zFp)Q`2x;P~G+osh2C;FFgRvtlxe)cvw-?6F(mZW)d#*L-V2*R*=!dKdy%lt`p4Z)}uK3(=0@h8k9o3v=RmDP9~E)n`s^gGu@rwu*7OBAS%1 zh?G@qi(4r*Ym19Fn_FofgW0negrer#Mno$s+urDP=FgTUgn2IHk)zbr0hFpQL@GSC zqdyFHBu7e3NbsMY58ld}b4ixVK1`uvgfDRD`YC(ym-snLi$I{?RXe%=)CdP6B60A7 zQbSAb>FNDFJb)rac{I0FSvjdzxE;qytRy_*CyM*Po=uV`Cm$+No@)?&3E)+BVEInt zXMp_VctADu=QK)wRG+1K0cLTHVNh>7bw5sm#-&LsArjmCaVV_5bg_QL>y9uVCU8Ci z6gxOyzx!$xu0-iD$s%&#A8>Sqr*4s_!s|m5OeZue>fZbT+B}w!rx%rMmxt;+BgVb2 z-X9sIEAUeY%Axx3UPM27RVR(ZDsgBDufp^3tc%aGp|S4ac2(0gg2oFGgP>0mlx**+ zM~#21p<1>H6r{%Qf^C(e)z}&i!}nySwQb0KyS6S717p-@R?CA(0z-6szV_$Gj34^+ z1Ye`(9pBJP$BQVpH1Bdg>^wi$ncXFj8(7*$gttNh?z-Tjd=VKIL^R**kDrgPgcDq`M5GdfPV3Q^aDQ7TUuACxz|SqUtX6-5bi59 z&c$kn&dn-8@xiMOd@c%>Idq*|ZEo#3Agc6bn7?G-ULJz%) zp?3&HKm??h&_YK)bCYK7qmY2ThPN8jgzC2*xSEPAC++FRLo$|2{-OMzyx!$Cxj7p+2s#b znNf?~QITTbuw#)*-W!LiFQ!55fJ3Q}nD?{|c|6*t<*4yqrR*13Ua<=j{)J}}B#M() zyU{*U)gCW$H?v)zd$Y!GURli!qks$KA7qs|D2dc=NlqCiqzuiNXVi&1rYujOz)}b4 zQsO_aXn)UYSG(mlNG`8sOBvVH9OB{YbczfBt5@liE5Z7zs`0edcc6#ihh?1)E zbVr+rr`u%Bd9Gm30TVj{TX=9p5w(E61=Mlx=Jh8jl#!W*gWFl9{9yXEcbL{e)$QSl0lEFW78qu#Wb-E%71F0 zY(o9QoG%SpAdMf?egBTvPWj~s^rz{piBNpMl-eDRI!Rrm6*#08OT>(Jo1FLYn_ex> z?T_o>wQ4jI4Q&%-qyIGb@d39;3A4tJ%akvnnrT-x2Yd(|6!-pjvO$Ac3fT>K8HbPN zhS`bCa?$~RE0i~<#YX=jSYlQyRHAQu6;7A?$bop1*RHc_&N|oKfg@9tclbl6w(X2fVdR-6ZI`kKgcz}okGV4KdlBJl+Ht(5div@v- zF?cfQkNw0W02ldsL+NSr?FUcAaZErW&vT|bdajKQfRxOSZcHAfE>ZjH1D4_s|1cj0!ds-etwEGqt4Ppsnw zc*s~!I_a}KUg{;K4f1;u@{#JEM>lDM^cUy)4CW?A)(3i-Ty0>%PFrpa0(ZkJe}}~L z!TUuwCB3SPFRv$(8N&id6do6e6BBz;Q4=7VJ*eDR!jth~bY}|N=gp?nmjmh+sS4Py zGVIqohN)GGbqeqB-dl~VNcN=kBouQM$0rnH2rEW3<3g10Cx2lJ0@xOMTaQSFUZV=- zv?Xh%+Ff;tdp*4SOq#yO2smi_U{{Q;nEw4JFV*F}VpX}l-`+xE=vRvt@`T@5=T(Iq zNHaeO#WAj%OIT z`vKym67|Ea)`s1to*G&49%VQL5Ikj{5h-UWffWgcaJ$n89SLlAfu-jPy0% zU*CLT8urqZ1UsbVB)M@Dp<5V7(D&V`sD0p1qV8+J;-8C)Q@wDTd=p)Mt>5k_Cqywo z)!V0>vQvG53&eQ9Eh_nSoU9{adyI9o2qiiQpR<9n#^~c$QLx|`|1cNXxZ7hJxdz~B z9(I4%umEve>cKqExc$;-XZlK;{m8uKFWsS7o85F}W>p|kux!zsD>cVm(qZcvg)Q|% z?eX-y_C92vMA%CpVxUnW7lil*AzZ|31|lZNEHu_Y5r<0MUZ8}GiD6iuHb}y9YjB`X z%?;JLT^t+w>>4GH8A|Q4YFlPGcf4!yvT#2@Nw&2@%VDeK7lpVr1oZoB;2Y8`8i0fQK>rLoVywlzuh`fbZc*a z!V&qy1wBZJg@A39wksT@XEOx>!?{&FpmchtxHR>>Y~}p6(0>A&ju<;|jtFr>w#x#tYTCPCGOy zp(iPOWfw%jCp(F(!;~yL4QLrHzJtKZ(Qp^yK3$p)Ltv%tj`hdYMjDAJ<#PUFj4 z;n`E6jxXVnjb<_Q8sEx|VN+`3ZXqCj5XUO3ZjxlTi(+g$e*uFi0tv{TyLz~bCe4qh ztRA<&9A|$+?nI{0(ec z$SQRL4PLx`QSO&sA!)>CJHbo)I(uatccGI~c%Wb> z$(sILpT6hDFO{%0PTX$10Q+R{=kIkcU<{>sfw102roJIi{II2f7&yft4BiVjBsu{R zR(m88AItWD+IFxdsVFOy07<)r2qH2S9@tnSK18&M98((fb87#Ppu-+n0C255kZ$c%0 zpucbsb$Iaga=)Cw7uRGK3L7JWjVW4`Y-lCs<;LuJ=qnyhO;o3E-s0#+WsspE*&pqf zB|WCnCXrmM&W;XZJpENOc|anjq%JquYu3e0_Q_Vn5G$8UD;)~nM=dZlLgP-JBVBNl zecJjx=~S7+lAdmRE7Yh!?KKl1^E9l$(wtJvH+Dfu#Xn*D0>s_Iyt^6*7Z%4!wd!y#rwA{?MWyw{{EBKf zOC%{#xBw|(ony6qMXI?HH+k77&F)yR;XnXbUpg!ijy3aWG|}1HH@Ge?)z5g(8tY8F ze|N^$!*(~?DAvg+&b_#@l4LSb3*?y^^(`nyesa5ynA$Fy4V`8ZW@+X($;!M$== znSQ9*6pOQ6yLD|tZj&*241*l8zh=}t_PXj3dAuTwHTHSTiDYkmUZQJ5IekMZ)~A)eX)6qxul zpr26T79`#A!FA>d%7m(C{AGMEuw2_IkUbglH;j5OK0}OCqsEJ!Jy}Vr)8g`bc&m>d zcJB_`=83x7Kb|A>2-_o9o~c|upI+Ovuqg|aydL;wIA8)dZsW&xR2d=Y9FS%lsKbF0 zBKz&JD<>Izl*ag2fEbf@pL#ZuYqKso`=5C56Q#`(yTL;a$Aa-(Z%*# zaiNP#6C~9(7;QuGD%$aR;G*pFX>9^`dcqdP2-Ksz)8dUfa@0Zsu~GcDtAYn76u2jjRVumjLc|&q zo^9nun^TmkYO{+W%y|tolRM{o$d;h@crSNUK#fR)4M*het6^F?0IGZ7Vlray*sdoY z8$0v$6(&2{m0cmyz3{Z5aAvRYoKs=eC^W!DgDmadX{#^4m4h1xV@q_*2*?)9QK-Bs zaZ*01kZG&1xGnUkWbz8c85DIM+MN_9zVN6>A*#>_DRH7i0)h4$r^ivk!7pDm6(iBly&pSnL@9bozRYVrGM9EyQ#c!t?K??i*c2U}XnFpwsr8kl z%C6R^i?ZMoTbYZd)RUAWp=vQEu6^-Y(kDDMftQDN9wN^Jc8D63)LCCzV#c;Vug{U6 z{OUVdf2=!Z3IC{+EOk3EQlx$srS%Xp>+!H5uecd7 z`O{39@6S3P2nYJ18gLJw!9@nzf*7sm@l`2%-Y4P%xnao=N$}uG7DY00Mm%$NIFKN6 zgxP|eIfIzySGP48IWv}+fPgtT8gB^&vKkC_fz+KYzcy{Njs_X4Q7&yO#oAT|2YZR= zV2%4tH->)?J2TY38<>G-Wwo4E8{``_WakJVIiBHE>> zkvbW;_E)Wzp$cUcFZnY}RuP4(aawCkGrn;~W})42M+70$<&R*E&Y#SQ3{3Uh(`S15 zPFC@8N0M5a1LpkI+)|LoDq`M)chdWaS6mWU@kO(;ksTF`sOTq|D#QLSE@&z>#h zf^p}sy1O~M!L1e?rc*uW_>3T-ka?;6b4IWldG=_Usl)g>AaO94jQPq^ZRcj|1heSh0!V@?|FnVpDm?Xf z7ur>ql+eG81N}4o^w;$N@9@`g2_n=o0G8Y%U?nAv5-PRFvnX{}aD`F29UgxB06=N- z@K(?Dgi(A%3>x1q*!_Hy0zl+E^zGgro8yOTYV|=$S0qR3Qsy{Y)UW>N`oiRJ>b6=2 zk_{VNIhU7aiU0;oodlHzQX-|~%JAa!LTsS@IGrRm>R%*$=+ENaRxzUI4MZJX;&Bk{ zymZ6$705fe=;OG?-W4X=AFU&ZfsKB=W|h=b15qx#OHla8pdI(ipl8w z-FSkYu1+^d9wIeiBH~gXdZ8%=HI2JYQG+N9kV}0~+QfZy1xjZ6?4Tcj2ezbt0$ODu#Vh_a1ScaZT z8q7jv+hX%vF=h*M9X{?FI0cEvTr53?7)%MX%bTUyk+C2tzf%I5h?3=B+(3nZS)oNo z6^h57aS^(hQOH}GB>E#Q=O*YkF~R3Hhwm^U;jWUZEmh3D@Kc zw&)~HiOV9tTW9ZPlg@#^#4mOjQNCIldWp+Edobp(9PyUSnaa;t&LDN_;s)*Zc&ut& z{ySbglD@pb)PH{P5mHMH@@_b(rwyOpmkLwkb8 zbjtGFc2iOW-}oE9xF`|oql5vFCB)Il`{d)6ycqa1f+58*hq&;qO4a0M+|Z_7PU0OH z(V02TgCOM*4~2?e7knZsLx5{_JC}DVirVv@9J1FU@jc@$!c}JGeQ0DRVfLZ92ye)~ zJ-Cj@6U(Jcg?;bRUqNW<{Fd}{mWh{Ai*($U*|J+hBdDAXg06!?|8V>Xzm?Ls_SNS-&E zAenKymL50(K?DjMQjWCKOZZL%w>&c2HsdAu$Ph+u*v)=yz`4Xe+Zl|dR!ER0>y*4j z>?lZ+1Jw?&Todi`ifLXlke3E@-Fm%pYLAqJnR40RX_ZbuPkFu<#5YTqPf&)K3%8@QuD@Fy% z8H+YqbX_je*JjFTG|HMYubJ7tYO}S>=46k~W2@>8dds!xCVu?FzcSlKp?caXjO*&Z z(|efsCR6H>ZAKuH<#R;Cw4ADKkT3d_+zG$PLs*&yf@sdkCK8U{da%PEg3whK!6hz^ zo8nSBR}hU#JCpU?))0rs?G~Z@0T9;7v)QnYA_d+N5v_}Hs7VeM}-VyZsl6d z@~?ahc;oToRE3WHcusiV-!s(FbY35;Hx&@JDW_;Js?DvR`B1ccb*I7CrAbHg9{qK2 zZq}^U5mS0s6v!&-Dw^o8+<{h7TOv=NP!D<@5KZ$bkIdOtP&;&0QrB3|Lf#vbzhrY+ z1DRZiRUiLFH9K4$H>C5ljD;Ylzqx?D!BSagX{%#LnucTbR#`^K@;GjEx6BBR^Wfap z*t(lXJCr%|9VxAE=pB#On0=yY3Dvpro0`=y-!~7;k9ge{ z#Cvvmb=jp1Nt*6Ne4z9+6`2Vs3J{MdA&?T}rOUOChL!zz`l%8PSt`KnajCBwc+g5U zHJ)yAI6b&se!}llwQok*^|{%YKUz<7shuTBZlmaZPDI4rzL-x*qKGsa zt>vpFB5taT4`Z0WY(K(hJ)nN-os!vAm<`Xvpq;Mg99j=$ot!lUn^A%+3a~HFZwAI8EMw%+U6_3v)pLX-}^y$C766L z$_pI@(e>=n*(2`pu|~!}5`F}PV^^+{jdqr>_lG9sM3S9_d4bLQ-k)X(gL9=8S09!n z6gar}0YlSAaxX&Lz7%TkP>Ac;rV8N11;;r%mN&p7J>^=vSj~?GB?J zK6pNW0F$?>1{alHSskkinygS@8zW4wI=oyC{&79|64>$+oArh8ydoY^sP-!QPgKHXD3p8LgE6Y~9Bs`IE6_xbzKuoU>Uq9(7$)Qqh^G zemjC!d+6?(u#-(Y(m_}umS$*FWYHc7rlpM4&!M zDX5NeA#;2&p@#C)Rfwg`B0(|ZWhud%D1E_h>7w1t+Pr-^O-ME|D~V0$h=T|fM{`<3`DJD1K0rrMkWr|FeY}8D)Gp&~x$tp}uRhUMgz9O=8nkaX{CwGe zU$>siw$Uy-22+{#RnyWqKk3^*d$Ub#b7cpAjS~90e-cjrk_$(&HDs&(g=AB1H#_Dh z(tjSa&dLK?AfCUb9MrkOh~?y9*4S-PLLB9%-@sb}2ucN<3zhShJ%)pgCV-t~Da=%i zwHR;pa6&N%`$xx^jt$his5T+yp)MOn)8)l)L$&}4ye?wM#L|l$FG7@%Je>cWLPK9+ zXz1xE4NPaWFrN5|20`nQB{M2QhZYxPYZCx2&)FIFFFJ}*X1ole4N|fnp6EJ(uga9S zC1~SCgC~_JSmhLF$%eNK#^{G9i>~ciBBKx0a*ufO)|>Os5+bnQ3rFjM=c+vyboUgp zKtVi$zBAlk1@u2Eju~1{X4nYjfvzt;su-Vl-zX^2znoYXEm0)J1tgDU#^A8?s5sv! z`x3n$AiMKYAntQ%1<9b%qtZ9GceYYv_pVW$;~eq))v}%Jsi*l#!#x|FyqoN0h5S9) zt#092?kN58@n*edDS{y^s|;ghaY|o2%WzAU!v}x|x1^`q{aPN+l|}Wi4KXSWl3mYE zVWe?k&b82ug(`ICZ~;)j5#m+bZ0m;5SNmwN)iOZRzco}$$Sn*R|DqCF7fGh*L5~&I zLT$2tW!nnO9+Ow^h!R+g#&ziF2c{1&+wGl`cYMAJh7}dJ#ZWEpP)FzxC@oY!Za(jCaWpMn@CA=xQ|j)SFJa{x6I5#+1?bXwZQZ0nuo=@4rg7oKN4I&_ZS3@QkniEH?p>XLg)jcXT<*CD|liZbc20y+6vev433-TPl zEEPY|5^WfV+jt9H8t{3$W>ye-{#G&l9bubxFypHm%7ySEIASdmQM`Sm;$NpJUO$vU zHYldiESB6;MjHHnE1+ygD+M-J$m3vG9lGx*AR3X`tjj9u-7H^W4(zTqT%lg5QC4Ax zx2>p3uReP4wZY&kZgTnD)&L$8|K3Ey$Rbq5N*5Qf&iurlQ@xIkcpbh_A7eD}T19Ey znir_bH7diQ^7Q6LKG^<#KEX4d#b9>k?>u{t;w^)S=~cxUXA3`$Xess5h*#3UTG($| z=GAKH`*O2-yR$w)B!%N_Xhh?Z1d=vRgoUN+sI9ky5|r80Y^cF&F{d<7tah<7%%jIs z;Ylj*<%g@)%4Su^?x}@~z#F6B6c!mVZI0o*NO&P%_yy16ykqiBn%zMD;!b#Df%8n( zn<$i=n)nG39Yib0oJIuB`^YRbO}0yef4SiH{ps5cb7eEzEQBgc_6Hz=+xwPXpp7G& zvd2`cBl0A0L>?tyqmpXThCcgOD_t9VqU9jAnfC0tcgYcr5$uQE%X?Gnb2k^*gVD%_ z$=}|0?~AJ5FL5=3jK_%@w%%e@EnziuXORSi&{6E#0Q8f1mi+*Z#=2@~U~tVKnJub`DtTumbd`?SbYYoajc{!QIgtP%Ip4duuB>NWbwYx+C4;?sT@BPSW8kH&E)PcLspM=MWe zDXFVNEvx@H61tiNSkTzX*4xpG`608I@RcG3zrx@AJ1^irPyS=5KW>|Xm6zS06BM*@ zb@KMUx;0m`xsr^O?7VC|ozULyp3K7kaXbI92{N<{2R{Q6f>%>QSQa}xg~=k(RwuuAx>B*hR%Of!L= zvX=P60ePrSA1*e8BkO)!qIxZKT-DY;F}ulDh<+=FL;HoG(6CG=fC#@EL_tbtwbU%s zF6x!Au3dDaa?k({6UuC9yFJ5+mSXe^Wc>I}?di8~OHE!@9Zil54PetNERK#Q>tK=7 za$pIs6&5MVcMUO=LlTm)C9J@vwhoQZ3|=CO4bfPHcjK@}Ktv8=j|4-cHcyGk$)$uU zqPOpm#UAk8hw|nwHhrmfA6D84QA3z9M09q+)|$(+QRj_Til`57Sm7niqSxQ6^a94& z!JP8f!rG7It*BoCD{EWw$W+i%Fxtwzd^YmFi9iY3i0I(0ipm=;l1(}qO73(qBFX#o zm>UW9xyq;}J;pwkOeR|HD@KhBKs1>HA^^>IlBld1Y7tSubsz<}tjd3=b|>3b0{}T# z`&%Sd1CHA>0&q)u^*ylVLCs|7Gw`Sor5-h)G-kC)!P(isrdR{JWUwm_j(I}m(MoPzavvan;)r8fBIpZHZ4*TT zMQlD^wd!HIbAOvJqGzD9?$;ik;C_fj9r+oKC5j@=^rJQ_tdNJC6&+uV9fdYB7=@&v z7}}jgvp3(7iTCZwd=!}GLhtF`Xn$MGY@J#AK{NBh({l=&DN}cg@nvnizyg%`0j-k@ zznG=H6^g<*J5m`N@~ zhj04uo4;$9@h4UvfCy`0)0n2LS+fuiqwj1two6y$om%Ew6ho`*q}M*z>2SQ!!xhH` zTH`Yz`2p)ITFX#B)q;pNR#LPg#Xok~smWZUSNAQ~&>BMTr}HS)#f`!_@1&Qj_XIm@ z@2tcnjZ44tE+f}XR+4KsR2;PiFjm%3w}R3ZXt-Ihc@?A*@u z2~3|Vdze7Ek}zK!`AXGSw_K|vKhqj1(i;7iMh)DVeCGg7>4|lDXG;=W=_+mNp>$Q$ z`K9H6NBYes2f9v0H6c4+-af#Mn}%KD53&c|l=|q8YnJjlad2|L(kiEiYFi^mmv7h9 z(U`Hu2qXD2rARjF-Aq52JUkSY9hhe}G|w?{)|)S+$2QGUxFkWS2GJ~PocmceTsnu8 z`Q3KnhPFVwPjLs`RdeZ;fvy}o)D~WrEM3K-eh-2}(1j_j@Bw?g`1oF7D}G>|Ofut4 zg{*?|jz@o9LnuEwa#IuT(`cMKFcNarPSBAoGP5x$j6)Ar%w7E{$2Uao{1_|kFeDPK&Giobe)V%*S z(dv4p)c1S=|DI%#ON`D>pv#n7T)Jx0=J*2Iz@yQ0Oq5ISxgRaLOY z>1PMv0^*PnYc)jNgjh~$EgX`_DlSyM>5D2I4|!@DjVn%RDKr|ckQc}a7pYK?oVsE! zn|!-$pEdnhv_yW$SgZB{hVwSJV7hH73c5LPpE*uOh;!?-axi{qp9C=u4 z^SHa1Xaf@(IFut0Mt39}fKyp6)(4Cv(+=waZ^e~T^WTnC;a(`3dn(YF2%X7wm=PwFp|Dwy;Vr}K{-AX6mmnD3r7^v2Ze6cJWU#ToG1)z>eA+S2+=$plv%xY#q{ zPb$LYPjTjm_Fs{%Y9{G#^`4SBpD?yc4tHL)a~9l?iO{Akxc`Pq?}e>8)7i1bz#tK; zCDzO9=95forPDZPebbIn5cA}tEmpCl0R+rC^GHzSzOLK1&&x9z5*L6%-5 z5L@8;*3xo!HFt0EGiY&iy7X6RJn@mn43B{2Ww_*2bg}%<>H#2bZ!6yc9aQ(VUQBHf zKvKukM6f18xag)wL2HTG*R#fgogtUi<$A7{Rr}|Dq(G@8N`yZtHcdMBH3CgkW&iosoDJmr%HsU zk#l60*w1f6R^uK#yj-0PO?2 z&^aK`MHLD_P#-Q(UJxnpRG>+Ax9y%lhu3Ocent7x%4nyjcxS0u7bLSwJG-+S=>W1RyvDWv^x=Dtyq&esI;cT5)DRLD&-d4d|k#%6dLrT8QkzJ^*5Pl-L7= zd?oYSSYzS-MNJp^ecsFCSN045!3eS5(CD`s@^F{KF0271PcZ9ZkLys>n4ESkSv1nH zYR6juWby?u%~y1cBxa2YKUB42OtAFiEnv7Id~QwVDb&Xd=9MJ7I?a=8kZ zKP6JYDy@lv*Gu=0B$4jF^Z-gVtM-rigR=BJ4R|eE98awYx{A4%DE8)Q1zSO?x-~A+9!7oQLs)|6)b;ZR`$eSMK#SZrB+uvKiYbU)5pk=w z(MP|k?C=5=E)ksm4g-erFq03wZ8&Wg0SYZ{-i`-Y&wFbV#NQmhpwU@sKNJdJ{!@xP zq1ewmM=}A@Tia`LzaPVeABy4ij@v0jdG$1*5zjn4 zRNRyVAac63u07Fm2l`_{ssKZcbU6nQ|bzu~l|5$EANh@F~D@3z>vGl&DNFf?Ta#@73Y;2Ix|n&74UT%5=5mk51D>vK|N zi~lxz_~*Lyuf^{FSb_L|mmU76s>9!ixPQ&?U$lq_!T*;aq7eMwO(Oos68|4eB7Yn6 zzplt7u1aqI)fM@_4JeBE-@zpk+s&QgfgVQ-F_Q7;E*1B%9=6gq8(HvBGWc_{jB=Nx&N{dd%7b{Y{08`j|`tzaew#ySVjD7V7+Z< z1G&+j%gcP$3VGjj))Im=V~N^%?)VcIVlc}3Rm`#FH8D^_o25 zF>T|m&}x? zh(&A&*RhlyN`r~O=TJz@fXjB=wxuo9lERG`YT4e5UI##VQ9N=T6%K{@u_g@yfUBG(qG_u_($*9slKVsYzNr9Xnt?tP-Cn+9XFJN zGf77y_U02_6v3)+jO%?g9V<}dmW_@`M)_J*{hVHq_P0WVp>M-0b+1TF{EvlKH687n ztSiNP;wp(=OGO_3gnt^bj$Yn;{VDC4;*=HbJs91mB^9?G$G4FhEj}j$dNY-2pCzFn ztx>V?<2jTR7St{v`OfB-xXsSvxrp2mq0e_jRzO*P4(V3kmp3;B*#z6^tyb>zNUc~k z-WCAR-cyW>c~^P+bV%LDO4Sa~V(GFSf-nQ{F}4Z_^VOvMSd-$NqZJGfbzllp(cZx< zr-feL*0P%SjL6yU{A%5sp-Dx87>SHfQ<=>%_X-+){U(*VE z<7?813>fEF{9OfO5U^-U;@r0x;ro#kpPqCCfH`lqsurR` zoZ`q`255WNZCB@Ht%O*{rBqCUDHOE8hRC~;cTSg$Uwm-D=+Wg?by(Y^IXm4Sg3=SN zh|b@9?xmNb#T?#|L}?)7&%CoyNcD9Q#1ML-I&N~*gI%@(sriP(JrWd)7Dm~gHw#Xr zwRPK2KCtt$0LA*6^hq{#uh2RscraxurKJK{U0lQ0b7Al5v%46xg-O=dxjS=zvg9iY zlk`rq3Jj7RXdap4tj4DW;HKcIl6UM7;d`vPwQ(PEEWiTo1kGOb=kn^0LGK-VFkSUv zd97=Yo~uFO({t_%B^{}HcQ@`08VwZd`Jz-Dp~PE6axe}O5<^xjeFRvZ11XXz;*>Js z7e-*E_tLU=Rh%TD>(}%L{A-TXhsraK$jsrk9Pf|YHNiFlTsiYu9gF?MQn+uM(_kl2 z;@XJ)IaD;Cvw6aK-Yvk{;N~ltqG|EKP+XR&PW@24>aHB&O5gLBI5|m?o;rHJP&3*O zZuY@FO{5XlQ!onpY=Oey7aGiipyB5M9UuDv9ZkNSRC$8$M}n_nkB>6M(2w!^efPJ_ zehs9Mzf8S5SN+|>><)h*e~BcN#Paj^C9~RE&~np@^h*W0UO6GLpC41l-K-Tg$MbzA zZRuX99CT~5$nX(^ zTH5>t+k=eVXX3y1o$rVyD-1sRKI8;T@)V%(d}*-4r0vA?yM#n)L*wFiWIFy>aMWyD z-;C6O_G4sygQPf8L@%h?BdAxGNuF?$MKt!{XQ)_yc`j~lWWz9`W!CzQoPnM_MWL41 zEjJotyqyPF*+Ym=v_%vp+odIEUV*25CvroN0OV`pC3W|!W<*0UeIW|O_vuWQhTXzb z`F1W{VQ@xxwEtA1mU;0{e`=+-#K}YT2<6P#*T_togoW!!YMvj#CF2`=8YNn&T5Xl- zsTX=fFWlhz`W(o~XvcLT>yO%;EBAEi&aQ z4S@;)i1*0%_s*30)PP6Df{l5}PVolY9kHd@DCFDw1w!A5>&jnP)Vt0q_~uR9uQsg5 zk$*G1MV$SL{*+@n&hV!q>d{eTtD>F;Yh8)?Y4P)iHb$=X_uu%|CEi~<#)cVW zDC6{&=1E24sFo2ALprHg!gGA`z7hswkE+?@I+{5TlOCXoVSIMU4XF!Q<8@xwFV}+>;@+_>Fe>-iOi+$muBig66QBlPWB@^z4y#In_Z`rSZ=y*^Ne}7q- z=Tn5)2231@ZEm>#)4J`N_iKNK+3H^z47GMDp;BnQ*pfPgcXHCalNjN;dV=$Lv=SwOng! zH+~m`N2kA@5s^ek&e=+Zb_jG`4wC8g>7H4W4rLAnl@I364CfvV@OUB?_t+pU&g@mV zOVpreWaxr+6#;$&=fats?qu7~dKg3M=2zT-)Xq5T4fKG3LTv*rF!a}%KSL^sHTiki zapJ}CrChoQzkXPsT1F9NXlvEhMRfgvs#{QBl6O^K=Js|aY5Q9W6keBzJcgjNn#9kZ z6O_H5_Lb}jk0yDaxcYwJuj&XfzJRmcYC-V814`PdDuuL-?Bl-tY^=qprDLVK=Zn4u z$Pi&7!N*)pG8uNsUszgvXGxx|ESl-4`d;uVn&iqxa=E{=p7;BOWJ z>d7M-ff;e*2i>%#{k1mH;=z1v_6fpKTSR0l$P^XM!3b;sMGI)V-qYP)MCJD5{Lf=J zXiXThHyG{YvHQ3%aOCUO$)0cKs4%Pgb#Mi`LX~|q^str_)+$U;>ulIuv?UOeP};H3 z@~yU>OQ(o5gMR>J$;Q~1-OVvfd$m>;P4ZwYB~1C|->9*^?P==@P;%9|#d=Vf#JiwZ zlga0vyJXFpp^(3zP)Ay&v=3BjMQp_kF$Tjm1i5{)*=nCS1UJPug5ran@h0_=F#nhU zmoIHheg$Z<>n1AfIV8<%jX_GupG(8^rtg79Xr%z@rrhGe=KEHj_ z9{nyl!db_{Z$p{GB`ugwKt>QkGK}^w@T0|P3lG17ZPMu5PLY&{aK}P<_g>SJ%y23D z0SZLuS4KfX?{9|%9#QT3?4IT5LP*)_?(~P|P3+=tXuQc?unwMOs(UJ`BD+`pTcQJf zM7dvxKisF#AADb(*D)_qz9vg1Ptd#I$VC%h{YhYL*HaB!1w8&vME%p<1VfUWhibx5 zF*dRZtEzdBB#qp2nR^VYN4=+4aUMWc(yksP4BQc;+*^okyh&)(8Sdh~D)$@f-!g^2rv+ebKM|ctWQQ%vy zzS6O+pGTQRl;yq{Ujb6bcgL;3_cVaLt)K9gs6J+p=T8E+xg65QDl#|Eh(f=9gg4u2 z9Xj(jB@ua5&l|Ei7cJ3Web}dCvy#*hC-~?^UxVZjFihkIS;x>f)w7?wj|9~Z^w;mv za168I<{GgCd}UqVbq}kV@dqn?;a~mjhl{~SQXFLr?6n9GUxyzqph`HRzQG2j>Q1DY z=4ZX{D-?FWph^gNhYark-$n&f zbrU!q<5T{g5M(FVu}uy4tH)ueie zp@Vh%ASBLSA!}bn6yo{Q?i&gdDWSI^<6zGtLpTI+bV)~i)s0_vjMWA9D>V3OYl+L0kfeez`&*@ddz*%VNOqiyJVOXB@t_lqV+ICEAxGrCQ z)B52u%lT_&Bfmd?FBSjOzR@>A(mN{7KX+KM2WD2xOQ^8@n_$@N9)ywW%LZi`_<)l}H1 z2EH;IPU~A#ZTR;2Gwju1CZ0WE+QkwUVjeXgj1XFqvLI1fj z0Fi&!aVeV?5DMC=&4%7BjXt}Oz2<0}-&*y2xwr!?sYhE1M0&GJ1735uPHJVJw=HeddzsS8?GCCWJ^?+gHj%Tb%4TiT|= zIx64A2fh*j5P<~AuV7295{jaVmxuagVeiSW3J~VOcSXY&nhbb&&iXKfq71S|H8GD> z0Wn0xYb79Q`i~J-Xf!>kKpyK$EjM=jY&@I))|z;^Nan{PUJAag25oEK9j=v^3ylNa zj9+ickM%UQkDc0F@z@fAO^b(o8I0&i8j)_j;na)f5+tc9-9iz@Y?pZ@{7HG*fHuqu5e5{zl1vu18~gk{-6Cd@r?2 zqw6A-w;5R3MKp;-xUkL~8nDi^3GjEa}3{1soik)uS(AlTBX zoo~aUh^LdAE4L#-$=nSu4>Wwm@xkCFNOlqW`!yvQ3B+4lIExYuc~9LFeV#@SkL?6{@EPqa^)oLK@- z9tw9*1J5Dt?_t5(4b!6^%S#AB-XfUqYCPJsnR=eh|)U;PtPZ<5eXlPpf%ju7&f z?cLa;Gn^B7?2*ognxX)|QsBIu;}kCz#}isZCC@P zo=VEM=W;bHH0c>d*-aso@?qP3g+X?{=?tpHPu&gU#)fp}3O9VR+LToW<<(DR9a79o z8>>h2S65Bc4ZE7Vsnz7m3fPK^$1}JS>P__erI;H7Ul@J_0dE2T*ChFGF=tSOS}Fh$ z+c0j{|BJczj%s>ew0&s_Erb?2B7_zK1QL1?10a82k|!gC9Q_jPaY9-#I@sLwzfEESMBj zA{;@wIZ3;uT)6xya>zn`5%(sSe|a!}OUr9feaUTTdUB>T(OI|mYH4OzhAIDj-Gw=l zUh+MzNW5?M2!jNWHf$vqGn)Hu#`uwEBfe^7_HkxJGk({x_Q~<@H1T?3nuQHU%`CA; zjQbnrvtGh*-M0v#4XkUN1}6u8sb=cPSfic}hp{3OM|GSmTF6yJv8D<+4SvbOmm$WM6X+tHeufnsqP?;jJ)0mh3 zj)gbg-r_W|E~=5L6WA|cS@|)S0rF9A-;^)kWFT+&)N!LV8IrmaYVN6fOOoZp;d;%+ zbbzwy!)YD^);{ISU2of9S2T-Z`Eu82WYfGfshgS(?u+n{D>KReHeLo9b!9148#SjE z=arO?e;sVlnk8IRj~_LQT8sZu`kfN1GstJdUbTDRQxW)4{#C5>bIiv_1`8o?^#Vi& zWK6jVyhc)ey~NDIyO%Js6ph)6*1Gk)Wht@_`I&dQHrcPt={l(*qic)4$3!%b1A&_1#8&LcPt1}hI%ISKB ztRrZ_qxrnA!zB%boaMvs#y7p3zbo8{!?aquvz!-%y>)-2MP>U&xT|s;CTzb*NU?P> zxiTWIU1E38XeDxw$n^u_aS6328$XIFzmCh*d|EK_BjC!;CDwwwQU= zcJL*)(+vE&bp3ZN>=SIK`ir@zl~E8XVijx9i>7ywiqrC~3X`j>RrMaCw@_h@tvNF~o&~6jZDQ7wDLS8=uXsnX zs+g-_oEbF4lYNZ1wnZKkK`kU@^hhwIw^n%hZb;=;$*T|h#(P(Fx1TO9*ybPXt%fJY z^<6I@8@go{(`F+4f-HE|FPY(!i{49wE9>{#-mZdHj}O@*le!{jU9T7twoPq>hqxZr za%s5LH&tQ+$hag-!ih_e|H?q&r5K z$sOF=W}w=R#1-HO-kF9i8HrQDd({j}Lu_{1vxs#bA4%T^(lOp#! zD#%9r){}J`)yEgyA`eEH%m%U0uyr_Ka5&0vurJ2rWDE_ei@lzbe0nqUUi|itp;_z1 z>vW7u2|}$uM`?ZmH432TetVo>uG>*Fg+a01`%}knldUO4?UX6Y^rpor1~q=rR*3Ph zsvhcy32h>1@+t;XHTsvt1jmhPyzXh~V3{sb4R*j!CUQ)p`jQJ(OngOEG$jYbeOdG=QCqb+ExCHB`%P-gr764n^6OVRF3Eqx1v*xWS>Tz_zvi3_x4 zSU5dj9EscV(s&zYV@nJB(i`&3aD?2S7ZoW9k%%=E&3o_3uim$`>kfT5K$An|d}Z^A z>&x2mZ zo7O3Cw@S$8nx!mP-e|-2CGF9Ds%9GBF`CLOn!|K^skBR*DYR2w_l5bz#)S}c!0&Wl zMPc3WkA@z5R#gdhZbRp%Lyscr%e3_L%{6M$`8PrJyJwAwpvEe<;U%kdRtlFgM|gTS zGrG|~D4Bth#d(iqc3G+?mL6?a*mH|PNF=uh54adEGiHRsmG9E2%~rXVO#LbqwfnYf zGnIsPl3WCNc^uC|%Mr}b%3tNPWFkWm)`m=#wCCsP9-=qY=}Jr%$woaiMATS(eW+Yj z8iRbK?u8lfDa?2&3qKM-dhbIaA%Zw3cs!JTMIZvFuO}|U4-upgK~W%}GU)~b-xYei zu9b=^YW)(`L%*cLOl-@#un?bU5j)oTx`@jUoa-Aja+cGXrrpw^F0Ul!u1bpP9AEdP z3)n0~ib=&o=}dl2u9NnWN@Pi|rKj|*s?3o_=#yeG^P&m#H?q$?0o?&@<5Ki*J*_dsnu?5TKcko%sR~{&XU%jbW`W8vOTjO>2h$_ zQGfZ}P}py+g`T?fIBD1Mjqfa|oN#4B3sJhCsxzxK#cf95{}4gCa-_WLymWg*c7Y<@ z{ARCN*k(&qtNLuX-CBm6h#1S!U;%1$$@3?dACFq#9s>1^Bk3|!=G?JCg?Wyyf|V(- ziGh=~YF_3t3hsk$y38Mlc$+DT4uV4|fDa}NW4hu~`OD&{aB>**A9&%n7rr0>oU4NO=Qs<&zb^>)9XfN7DaU|vsYhjJuJ%-251pG8?giP@rGqln)O3W562 z-^C1B%_|%Dm$JnVd+n5&&P=z;ZQswfmP7Y~9Jg0qrY{Lq2lPPxDK`Tt{l`1|fA|6a z)Uo(Kt~34Dz#0GWGyYr18Gl;_{>LxypEfl9(MtGxPXQ_YSJB}A7M}6fg7LpED*Wx5 zf8CsvzMJp$AP;_7h5y3F@4udl(D?r)JtOskp0UbBcwM3Vm_cD|o;unbde>q%sIQO3+e!@UzM5yxU0cM`zO1g_j{CQ11u< zC9F+DNZ|ABo#%REtKXBRa36rRg-@rbq^4M9TS0n`u8lqF`3n#=Z+$sx5@p{rP5>n@ zKLlLwx5LpFUbGBRo4APY3)W)1ThVZ}s?jS?_h zqTyC#sR&3IJ&@C{9b;v(IqdMW9l!us(XP+&0#7gTNKG}TDqu!Kjah1|$4!0?M8d|n zt{N$hA}6b(n4Mni9V@m1(t{D~1YECjAxwW*2-n!*@ZQp(+Zt|m+0bq$8wYhI(Ta^y6qaWLE zzbeW9LDn`EV%XTJSF#ogthZzOl60BLw^grJ_2t(uYLC_$=4dv&2*lX6Fb&$>5>fc$ z-#CczY;*!zzlm(vl9lc|kVkZc>HUzd)!2@__Cm+h=!jbE>$^Iz*d5Q^QNZ(NMf&hO z(I_T{b+(mRqIxkv-)$p~Tf3hjNrT_FT5^$6V~j!XXkIq16++Fip6t{p5(Dn#1G3+_ z-c;uMKVAkfq=2 zT(hnoq$aNSQmoW!v3rdcO-HUOoE^Je%P?agRP#ixt^)7O@!0_oqtsf$Z%U^p!KwS% zSw)BF1qvUnhzOvdhzixFD3*Qf(0{}>xQHKFkA+cbTem*U*lacJ6qBPi7=EHFMWwE3 z9SxHd9(#3}ZDszk>F}cuxYs%XC6Fi@VxB2F>pIt{6CdzUORLHxm|m~yrMjQMUO#Y! zf&S1_y+K5zrSXGOQG~0$yAotFYUwxEs(Z?1uE{m2?>J5PrSWsE5Wq!5f|cumM_J+! zCOT)wPMFq@+3u%!Oq9lK`sbLLhBZ8l?$TxNg^YCJyP6TAGV$Z#~>ET8EMWk{2hnHQeO{^sSD2?lP zMt!d2rqmSn?G8cWMFTwmtT8+1FRIHgLk;M*m|613d6%V7A-dYu^{ir*H-6?$uz^S& znO|GZPk}r8Wj4*O+oPt|eifB*KQ0#un8%iKU1P4VGpBlED!$4gIVgP6!2MKYQ$Nm< zt+H!2zK^r4CMKWp6hfI^Y-{-%QiBaem^!cA+nqZvUDxMjYSYF!!Y-DeWgC{NW}x%; z>&0av#Ep8#46aEAT{YWme^ozRY`98KGZap`qU0N2Ug~$3ZRxRGZk#D!D6EdLY-}uM z%CbyVwH>wrczb3-2jNE*+#r4%$yka_IFaiTy*KZO^R}1l&j*yCPnNd7X+0c&ml84= z5fSU&h!6T)fF`m|5qMV@M-t^gKe+MYOMQ!6Td_HJ$#MpYSw9CDJVUz13}qWuto`h% z(ei^)tPofyvIf(HLO*=a+fwQu8py%&8 zTrYUK`2$`_g~}ijSvnWUmG6Kh6zj-=w(Ru|N21veWlcq#%75RCB;8bzQ1=Q|i zi9C~20Yy-%GXAAS#Yi#;vT?Zk_=xu)yhu!AxA76v_krW^Do-!^ee^+27e zO(xQCcqeWRa1Qe;dp8SDVX4o3_&@-omh<)YuR6W!2*3Kd9M=xxqCCw&53BR6WHARH z(0F43Z&+-#U;fkaK|rdIAA1fb53P1Q-S zXV`p;v>bv`5M;J4sR~$${nG4TtH0mc2|dj6`|U>Xm-Nq`j~ZxSVJ|%?QR5bW%9f*Zo0P~-?H(g?6GfJ_qnpk?zRR6@eZdvAHlXc z$B)4DMXh9$N)#OZQs7hq;zGr4cZ!SCm2P_Ih@fSRJg}mw*pHW&8 z+f_dkJ;?R=h(@dXFuFrVbe2X?^(TD(P7jstnYypt`@v&GbO|DX<~c6JQ#f+~qfc}> zMkLcolu~FBH-P&USGDKWB^MnSb9|wr+3WZq?K&Fi2Z*piP)V#x3C`!EYF9K(yE{}W zii6rM>h|~&VXPaN?4Y(OOxw@bP?RpXu4+zI;;ZwMyw0RIL842%+aPR3Sr8?~7*wAU zPEiK5-s^9N2mR2iDM*R0Okl5zGRgQ9dmY5CkL~Z&>jsw5oz}V{N6$Lrw^$KE4+g1e zck54v9PfPQC;1DNCy?a)RwM?6FzbHay7JIz_Fh=`wHlb0fsL#$(@M`fhO%jwRJszM z;XOadUT@U#cK5!1=rZDbf8`MkkwnvzP8${v=!vCWAsiafl5O8xo>ERUVo&|V9bU(G zB%Uei#|LASsF^}Rp~O&6t*|<^-=R6vngpm}JD?ZytV)UTkpH>(Y2~NHx@wmCem|S! z`tT}==4mJHkDaZR_?lgZ1p}c7Ki;=^)e_nP=18y{9Y}zR_a1N$x~*v1_iHw3x)g29 z)9{=ZImFvA#jingIQUv*YJ)SCA5*>(LRi3GUk?Umf!2G_bU$7IyA4Qw!HwCAz+Zm- zOAScx^FFC2y+)gfSPSz~2T-Yt;K#wpXus$BNdnG6)}GGg1DKrMC>Xx$7Cd2BPkHRBiRy1Glnv{Xi>~U2E?HBa-;J5MBY=%9N7V?yN%sk@o74fW?!P*i*^w@~N)zSMuxU#gsDY2D=-+DrbbdC&9!Ek3 zB9`8;*OJ+ozSj3;N14>atHV*98!I_S7yNfs=l&~b4>}W*d|juy&{#54r!L_mgjHS44( zd0R>bbA-901$hygpY+nL0Agpzp(%FFbz&6SSz5J#Ax7Ulh@rnp8Iyyas)~^o`kGAi z-Do5UMdKJ$J*9PB^r3?3J* zZiAVG^f1>XGRUMV%^XHFenGR$!o18W6a{QEy!044)-A@`3+pE%( zceZ`q==(vEL*<8|1eq4StS$iAfB(XdMCeBau@yLJ{9lZpUHOc~Mb4(Uc3<8X|t_XHbw$ zx)|U`cBWLlR%Nt_qb@b&a)(nA)$)j-N9F62C1&>8>lh5g<*DNU*mcTncB(Y>vG)4A zn)>flX2F6o-uvT$5;Gw8rP!_YQ*6-$`)k>-)xq^TV@(!g%Xj1!4z)(-LplTQ***_e zbFb@imO?C1>r7aKcUZ$hFJKK;TbIYRMRLS@OVK2FtsARf8a0X3C^l;-W(FKzIPl!Hr3GYpQAOiPe6u+}N#}n?m=)Hc}s)Xi`=40oU5xtq{YU zvdz(anaI664}XTZ=3o`Z^?LTgN({oj&Z=c`&#twsMw5^^mv2=lN%RDWTW;olVKR@l zv*7F{H-$P+3Du4`dlDoh`g!Xy>^=PeFim9=tzVBzOYrXgPkJ@`z2m`|*D)CkJXGAB zGQsc?7_w*5h7h3+DzT=DU6U1&KHyJZJqlpTyBIJ;_MIf{y$liRFCc!Q=eqVVlLYkf za#6CDJ&=h~x|tI_m(%;hl99^Nll9hFD|A&dpMu3#5_GLJ`*8Y$9S3)!#)eK-L%xPI z6mDc5+~T_7XT~*RXC^>F!<>WpOwam4HquOj=p2W~5cm46EsQme;UIbGdqy$N#94-m zk342MLkHXRwQCFFPABtsPEMkOrw6SXvvjkYUwzH=bcqB&krY24j0GG<`?>Dq3q?O@ z%L9N@n?R*`PSHIEhaL1xPyFR6ln*!W9KLjrLD{VtS0IS$Ug@{e3o9_68J?+wd-)Hd zZ!x-7`lpEUO~5_e$P1M2Vb_}}U%knId0-EPO`<%q4?if-1TyU@p4P8OG?N9TJW@VX zW$1ZJ+LOB%ROC_@0Djmn#eZPbpQAPM9qctvFlw@@vC*X@-7TJKH;1`ZM$lYOZ= zFP&&a1$rTj2wSBAi=M-DzC6}UK8Rqm)r=A?juM-}P>~JU@kh}@lj&9=u$8oyRXQ3p zk>+j?U?rWFhz5tPgNdX3Vd*qsXfg^KnhpX!82%EQ`HAne4M}hcJ94+ki!twg-|)qq{M@aLAD}%_iI)4m6@>O2kx%n zJ-~ZDE-V4A2ToC!vSkL##tw9%S^@_k)YNx=<3a!P{dT1Ezr$@@us;HBx|q5JU7$*& z@EENN)QMYY5dVL(Mfmsh(;p7uKkUMb*Z(qS7b*QmdFj9G7GA)9{}-wW@*=JE*Ovlr z`f1z@z4&`5$|0mL2*Psm2ze#cMWIX%C67>&NAfGk$RT8;6)t*Lf6!RWJc50kFG$0G zC93{?{OQkY{;zJKJWA&O{rD5JMqx6IEd(?Gof#(DYbH&51lcGy`O0&~)0P}%@q56a z(}OO`ZB$WWJn^&}CZ!(Uau925F;X4+^ahEJ&MiF`A8$|#+AcxeR!r0toRy5Wsc1=8 zuLso%z%Q*OLKT<{LoG@V*E0x=3m;FYY;m>EuZ@*-{-ZM` zI89M@E|8u504BQ<4ctW&w;Ul{SXtAwxnxN$Fj8CH05dbX4F*y~GJyPGC@!#Fl@wp! z6xa3u@Yf-6LX*n}OZ{6Iapo=i*Yn5Z&DSFOB$MwJ4S;-YTThdcA*^Id($d3c!1#oU zJth6S&?5>{{lfEK!mH%8-@8O*l@_kucN#78*PJ;^P-Y+wMO34+5~vKtTJhF_82(Ez+Ni^ zUN7r{6*G`=)`HFQDWeOE=VfP|+Nb5`3>TLaX7|uXwZL78v+u@;wbL#MX-S2vicUK2 zP3CJ1>Q-HlghQ@&b*%Ttq&4r!C;*c!n@Kd=-TE#Szx%l!iXRf5yF|0;g}ZeG-^)2^ zO>NYFZP4i9$!a)Dse6SSNA~V3i7ki$BOzV$3Ivp%<&F>%=<(4SsvS0l4ETFr<7|Go zeuE+0xW|iol2cscG4SY8;%>($=b}}W)fLC2XvEp%ZZsuH&$qqWv5$5}^8vaT=0x-! zpj$I^vXXR)zHK!F{^d}sM*_Obm~(ko)moUx&gHr}xvcPRj17B3^bdX_S{T;US`Kid zYtJa&;MK0mY3v3CaK<3lH-hbx#zGzo`JlqZf$)UG`XnbE*NP?2cP48cr;pT5DsC`r za}f-m{P^xSZb@6C!Q_+MXpGZj>w4XRx&EN>*%>5CTQUF66vl^banA9xnKg$NbM~d_ z!H>l<35Gk9yYCbG7<`12au+gX=Wt1lWq}j3^06^YNz)uER>Dg&E(#H0jg#b9izfYj zdD4b=wSyOTjq;@RgRVQLnbJw5dxC{-+~4byRYE37zgMk!%*vb06G)S@VY1>ku=eos zc96q&UI1-L3njBu@eRRl%)-ZBd~JC4sP6A&Q28s&S_x+iL}@L-!xQEmK*yN06lX>Nsr1nf$3&q?4V ze5Swmp?~9xXA-yGH>rd(rPV!ewkUT=g@HbIGnTHioA-q}C8zzAs+{)d%628c7q6Su z?{-SB{&ZSm-|bnS#cIj~L`mVpuyUzv&`X>Um1(2*?xm-sv-dTsVW~e#A1TI2X{Iwq zv-A`_VI3TuRI$82aHU_5^*!_SSd(V#Dmh9qZ#PX5CP3CBBt3MM9n>aplYc`1yA~A3 zGsZ1eU0a=9b~MG_sisKXGXMi9PfY5BDynB98;e1$Mqc_xrTq1yD*^8+gtDwNXx)w6 zP`s0&azN?_;hJp+n}*@>xEn~>K8{WwX4z7Ek9afI;yWifud(VkiOK}c5n=TV$|oL3 zu{qAgb;dBcTy24a0tmM;UJQHnb1v0oGT&Pp?O9ivPz8;>b+l7@`BxffX#~W4Lu|Q$ zIO_YIoK@}R;Gbs7G}s!U(>R=$=Vpu>p|-KF(T4HGdvM`w%gggMTF?CL3c2t};;4l! zn;nuatm6HvZ+SmhO7*X>@pYPIXWP6OwRNLKcd_@28bbC2>oP9Z!pfItZkS&&g>iSy zqZWr_-%91+X{uk}y@Y&+AzmdC1=)eEcds{gT!V4n7hC#f*%wVH{ai6$%S|eePo%bO zZq6vhl9}(dOXq>Zd6@L5IaY6%(+KFmqgI;e6V}b08XP>yh+aBHwynN_HkoG1a;lF8 z?gK^O+1-Gu3CBwZmcli>GGEvv4<70AhrK)2q9w(-PrL&>BivL`siFwaZIW0I34~Bh zS{Z({u1PxSBXC{3zjjV(WP6cU!bxMNIZpk|^O9^%QM5Y_!EtZr6xG&L6Xo6bRfz$d zA{Ik@s8b5f{PO4>veJqt1ufT3-L&h-GZv+@{;+5N-1~7+u!3`=Y-dT-uSuP}xbeeV z@qkOOaTEby{qAht!tgpj3-T!_fZrrVFPT4? z-&x8DAn>qNn>Fk2MbM5cs(s7HVl=j7YMl^$z<2t5{e?9f6P4tACQ*}t;F{FLXX>Z( zE|AFC7cXA|gk(!HW;e>jYzXCTdL#5D-K*G*peUcYU8VZYi!E~6DjqW#X$BzI_3$3v4Wdh4 zx5Q^xUI_jgivR{wrwd=^qWC~wPNr7v3@~hMweg?-Y#P9O+#K9G&-U&I`iziQ^=isv ze$gAp@H45hYi#f#5B_?mzg1Io=R0nnFN(YsXHS2*-j!gB8qUm3vb@XSl=H<>Et;gh zwCk{_-mL_eHx8cPG%48{xMguqt>Y2e)%>i~m2~P)X}y+eYEX%#%d)r69{p->_cCSE z-ZEGMH|E9!1wJi@He0+20K+uQNcV|-=0cTjA7$xpD_na#nTO|`>eaR$6dxF(c!kMU zh?7v0qj=o*=^w}oRK}<?J5;sPQ zS`zWoXzyF2g@yrCkXr76c8ygd|yn4`^B>7OA8hSns=Y^%sq-TYB%VabNsVvo6_y5iy)`7*Yu}k*Ebl%A>lw#C$>h1>Tdiv z0w^DuiZAyeR0(*6;+BHgt(# zg%%51iQRugx13k1s9HX#eDlY{svErV1o-Fu-SGg^3ZSmYqIy}=dp~pjoxE7VUB!cd zk~&ZfhN!c}u7XVxEb9F_bw>@H{T*usm-5z!!%tn(bp{`#PaHil!89D`3Z*y`i&9Uc zbBq%V0aQItH1fVpnMj}rNUf4tcm8ln51-ojJKjvMFXqb85uIdDI(54{OZ*b4(Q_i{ zW8#%!j&^!PZ|x)$9Xg(NwpJX(>kNX*cy~UUp(zE^h?R!G`O6OZm+NjWH5!|XX=9Y> zCnZ*i1lR3lP{nH?Q}8B-1Z@w05_(j3e4Ze?nT`(CeTUW%@~3lF^RSr0rh@uK{1{xH zyUbo4%w?n?EexdItZ$I5rShN3J}`Bh*(ghSinHcl0tv>xLXo`_A%R59GFS|&2MLeY ze(lfURO&bxqAeO?4gG62EwQO?xGN~3s5k2$5k7? zH`m7%8xWurO6Kunm6cEAlq+R;D#hY@HRMys$adMGbVYCPwhQDC@j#8iclb+DLvod3 zWmMS=DqGW}LNf}jv3fju7OM*`lZB~AZ~K@3Y8a#VVHgA>8*Yr0SM)zSSxm1LdJ8eO(@c@7Z^Q|fKzoH_INpZuutns4wk zq!wRKF@bi^<=N=arUpJV-alA_fSH$njX2|J<8U;$1O*L;_lKS8ZRFNU?o{~R(hhMz z2xwKVoTLdo6eP|#uNK6^zZeKD(iXk=0)(>^0A*N$GuWN9ojZLVIaB%bu6Zx%$Is7{ zxsLhM(m(hpy8N9{ij_@MHU5X9v0XI$tIC%?aD_wLK>@h*PyV3 zU)@u@?!CpT^FVoVSxM5`JZIJuHQ`dyMfoG< z+u&PvY?DO;3o17=>qL26JL?z~uAEdjnU8N8QewhyMPSJT~>*y9_)D%mz<%GJ;q zR|_(U888LHO39X0fFy>#)BAK560%wvCz(O|7i)BxJtsvTeN~}zI1P8Z<*j(Vllv%& z069q{k}b)&+)?q%C2>s$!IQ^^zM-Xbg)&v$wGEEXb#xJM>tXVpFDRT|FsvS4<+s0z&Ss=|wUophtOuY`Zs1SAIn%K+KigudDTFN@JpV zjK%BoVI}cNd8llDA@jUjY$fhRB5=)AhK;8pVp2SUEe>(lKm(4?JdAzoH)sQ--+10k5n(uT9hE374(x|?lcAL>h&g$m2Q+>Fz)xT8oVa?Z|!FXPV?`Q@BgZZ!^hk^SVw zK2&~o4av~2@TG{j;dE^?f$n6~)W=6QTHbb)IHS2;VKC|CakPmgZmh*yp48iDH0f*_ z8f{Rl`RW;A<*%$3-*stOK7d_8kJ}DpL^L>rTcKT?6|cu|_A&PQK>4LGS6yFKDL}&& zzqn3s$XjEb%@26JR>~}d{mi2HB>`J%pH(-pOsiOZuMj5m(5dw>mEI>K=(h3-Ypy#k zpn=Z0dXm$-w9!Lf&D8N$L~H7Mw`*~&iqo}_Y4f3YEA|@yL+{d|m?@;DqnEAwkB1Sj zqeBM?fUgFJT8q7H&WnL`8{BI*OZj#Xo;QL348Q!NQ!TZpjb8Imi}(P7X&y_$v?*E> zN;GcY))3H8qyqlR%FP8n&E$Z__ZfM#gU+BO<JF>>pvq2g>g+i{G$G0uud#lea=(zV4I| z`w^z`+AjAz+DhZ2xJCcm3rA3XYN+>cV5`Eni1MK=O5CR$Xi=-yjkK?l0Vxu-Hjz@J z{vN~&UyC^9qCD@}IL0OrGTZO!*6f_{TBZ4S;_Xk4!ivOdi|km6DUXnp%#(oRD8>3K zL{ILQO#2VvVr6j~c3da^*QvUd#cT40O2S4;xyOjnCjbzUOf$!Yx?bSslS`MAP z|0Mk(^gD+Z42fmcgjauaAcJ zKAOEMdvPDt8>CMo0Hkg*NTqX3rTwqt*B)cKH9&jr)&~VdRC| z_z$b_@7X=1`~?;HKU+rp*Ry*O|BczbHyRKote`;iy&|!}EFDF?DT*J|TyKX({ zWyUjK_n1 zs;iG(5d2BShSHrzMWdUthcqtaNr^q)gGp;LopVW_SkjN$>P-!QS4*Ls-tLxE6=JXJ zyZa*Cqmhd5~*F>m!|` z>tANKK$3-H#buq!_s@Be?M!ZY-QZ##Tlbs%o2aRCU?_6=rPhRv+x}ijH=^3nyPxiE z$m^Qgymz7F)bxl?mL>^=*)M?VD9Y#!fqJ_%Ma!)1)52t-Hm9+#R1(is$HHdMNVLVs zE|tQ^?gR7s{SA7`X^)&gH66HyeUf;ZZ+I-F+KKEJ6sGl`+Fb`QjrcEolCp>8lH1NG$ql+tyi*_ z-@09mzZRVU`{8kF=1Z>f`(i4h(2h^ZTTXXid*2% z>sbAr8IH^|2lKl$8q-L2^r1%^6U!BV@Qh%U2m8B~;w4u`{}^G*-TK)Ir5L@}BdV55 z4DavE-Hu{D=U9Lp=i==2M#7&x)TW8EIfQv?Ar&f7OFQ!&b!L*ZQP=^d3Qa%PE1s2t z8qFA9uGvJ3c*tSd(78u)yd08tWl&M@tmN$r>RVXp-PU>!hFCqAUZNxM51`26_s_Au zhwtmSs6MN^s^2!=e^hq;pdqJYfM%9kSEsza^F>W^9Kex_GT_dy(L)Iplgy*bTsV8M z>ut-F;Pft9DgJjblZ&ui>c}@9$>ASmZea~dqo&+}w;;ed|(mkC)6P1da zE$i&!aJ`!PV`yxjg5J2bTa}QqA;2cl_dMH?nPR_eMz&)d+jkVftlLd}Htrz#mXOYVh3A{QSD6|*dt_r@ zzy5Jek-sQT&5|sRS6WOpu}z_3_3Sp&>Wyn92F-lHrfa$LfSXb_bx#KqP+1qj$HdW) zm#>LVZ>!=e5Paz!x$FxI$3+gGn15z{W7Kyl?l6#=nbC~i!tHonsM%jRoo)9SHpx{2 z(vX7v8`1?JSCdFtv2n53%Ve3YNFDNKHl^YBY*WVbb_b=|MS(@7@9rG~Yc}+89ZFYV zHzb?JN0-~z9^c4+TNKPe`$pZFnJ%TzUds=+a7potBhC%>V0!b?sItTN(v9S@8+Y>h zYZIOs>)#41_);SudPFrr+7GkT{K&<4KC{Q%?=6@QJ`C9%?W(E{sXbqSCMC6wGUqF(1=VP zS`!RCeiEn>&nDVaMJ_$+1W5)!!dr>Uo{%Kc;2oXGVVFp~R#9YVS$+_N>*li~+W2$n z-b;pAbeSb+NzMd7Mut4&&1QExwqT$?A1!fs<&S_e%^MN zt&-zT{BWiFlkY1u%0Y&bS^dp%6o68YjSTF4C-3*?k$xszQu;aWy{P#7`HKYz7do}nj_&kY-Sf=>Y5@#g`}4zl zRFI*1lU4}I3-3KlAC8IW0Myz_b6xyn8;b!^#dPc>&D0|VKzzRu0t#qqY13mNu9Oh; zc_%xx6Pnn|8gH)CRrKn}igC1lj%TLR9GUjztVXO!@`kHpj5V;nnRdJ3rpN9H)00O* zoEn)LVbaNsO}oFO8;MKOb4LN+Q3l~10w!ZlnazM`N>_SD&2V%dK)YCo;W9v$A1{lW z=Dj0tVd~-sVa%4jY_iC_2PxGG-ncLK6m%)t42ax2p-vQZ?e8-1-%YKTj=VBhmMG}s z&SlZ!TGNV4*Ky}`klXv_K3abmP&VE&E?^9(PmmbbRPS+Y>>y#Kc-4;DGms>f)sOZz zbRH{8dcJJN*KspHL)#~IH8Odx#%ts$C%w$Memj~{o^RMy{J;XjDDB`_LNePw+%XCw z&~o9yoKEV~4Z_S=tgN@qsR<<0leq~p$*u5qapPwiP<{Nag+bQ6O6R^8MH{Z~@%MY% zUR8O#5A>01erfiu9`HF-mkqbkZufO!arj!pM@=PQVClyuyZoPVH&(;5K@j9J*i)XG z>A~+czB-$$e|tzwWQ(U3|DuiM>LP>z&MjCw;I)7 zNVcZFapiY10J*%(BAqo>*U%v0jb8}Ns7ZLGL9&=x8#UU>M7>ZYO?QM5V^y*C>T`U0 z=`pWz`M6z)m>#0xTN9R*{q3qygk3b$QjeM#=BDq0@SiY4mWHLL-s=nxxIagv#fpsQ zrh*GcT}GtsIeLk3ZEdB=*0%WbvCKyGFP=22eg_$SL8|713|}N;#?0-4S?>zddR0N;d0fEZm9-G3|Jn2$C28VKq{2%C;4sX)YOGc~Wgt0{xT6d-^n><#M{(&q^=D?CH%dMSzq8o*ARk= z+`&wwWkI3T{6QwTwn$nr;RbZPZ(6q95Ln;AB?jw$&atr{`>^*6H@05$HuEt1q}g71 zUYb6<&l(SOab8B9lfg!w8y1Hn+{l!FiLPFAr{AhiHS4kp~6i9U2}v zPd+q7bNSETgS7cI%DLhrA{sHQZ5Rx%tsDH-!E79zWx%0b{I1V(CEv(Hbaaminc!79G}FLZN@P~n{RK;o2#lnKT& zBOQE;Rf|b4nvID?8wpvf=ZH!LlUmrlI=#%Rp^k-e55=A|(N`dWm0{ha!98*d%3BUv zx9l}DS-wr*GYUQY`5QGW)z<2V^Ip`Y2~O$PaI@Zu)bDP#H+Gl9PJY-8dFV>Kx*HVZ zq>R$0eyO(@sFiPn|9?<<|K}Xn|Lg+&dzJV1NY;N#3hPh7_FtD#sQ(zlLj7woEZM)q zu>ZZt`}3Ori;R+$x!_&>XJypCZv6EAoAHC6x08v}fevU0G1*8z1_=Rl&tNSufpi*S za-C_s8T2(4AfVIaF2_j+%%15X+WYV%OZ1O{}FJqK*Sp>Hd7*{UEG< zy%C`$H=@};e3btXwr(8J%M`6(N3yFj>rSc}DAZZTOSU9M15hJ|GhQPcxTq>6PJcRr zspJgz{8z$X4v=Aosme5cB-nr@2@u)q>8GB!?Tmas|1ImzxJetDKfnFW;uZzZG6#cJ zpYgaurPAZ1>+=*y@NiLA@?69jHF<@{d8bj25sXP3C8SM@cN zHS48~g;YLZLO7rHoCJL3X6LeDX@=^^ zzY1a~9)y)2{gCR(F(~70@>U_tl)!Dk@E!H%T>AHETyIE*c-7fbpLAN7%`1lar*<-R zEJ1JxZtu=dA^l=Z2s`-q&{H{?l+k~y-#fQTL-{3 zGjGW zHrhTA_vt&S1Z@-wNe6;07C!G)y%nTxaPeDFP7Z&-J{!#|O6^UeM-6isg?sIB^?k1Q z!-;bRVl=iq5si6tn$-1U&HvgE? z(bLeW^rZbbwm(CB1GT-#)yc8Ur>@(0JFI_{wcbeZXyB&gv?%Z6pIg@(v;vI5plAwngO<M);9|nQOBysT*>Psl5T~_!QqNkLY>asgS-oOl87fN9E)BwA2 z(E-;(c`~NGz}&b5VQRU$rx^>=c@2!vKj6B~GEy{XMNzFE+yxp>B84Aa@iG|SAIqM+ zl|p`cGbY>SNv`i}5&ySR{KGsGLXbD{WQH`+4GrT9vF~{P2XpTo)nuQr>mra4Ac>TS zG?h*WA%xI7B=nlln{-0QNL5rs2)$Pk5$V#qhzLsWy(lOk(mRM?!M1tdnLTCg`OY_I z_Bng)zX{=avQ`$!^}Db8o?c8<+x;Yc%*C8umumyQ!|;;7iH?$&F{n5jW~eEU(xG=P zWbKrJaw^$@-r+%P@yv)I71%O0r9O!ubVc@?l>-wd@Oo(bP$6c!dc~2=#IG0L#XkqM zC)6ADb9M?Fy>$&|E{&~TR2aW-_Q49LD&uxxsK&UZZLwQgF5z}fnZ08j?%{wwlKc9D zY`!NrL_Q4@;(iZ<^Zp#=oa8X|oF;pv1Ji8{_1=L@;a>dD8Ff1V^aty}eRsmVzNyYh zs4NHFg-bi(Jb;G&rwZN57LHaZ@!`p~{@@SB=WyMwJ%JpAElCA{Gl3c6-R&T|69{$k4y_@f8jQS(%=EPAj*B%SCxeFa`{knZ zV_nq6(mNgm-g5_u0PjNUuO`Q^<7sb-JWu|#|sU#)eZy7V9paa3ClyBazYkbbAQ zrKy}^kW&xiQe#;D3n*oO&+!t;y!ZP2j5Pyi`QW39On&aym2@5!My*!b&M@<>t#BdL z2imhBSzffW%c1eoou$zs(^6M=DBA#y;LMI_+~OPJURhM}C~C~;dmOA@nCKSC+EP1~ zVa)2?ybW9(-pP9H6= zwD|LzdQ;{)@zK;w4@2(ZPZw2svM{{$J8FbXlgHPl<&3~ub~#^VXlOIz%Q5f7bR{oG z`$w!y?$8$<%l8-(oSQ4Cgl}f?h!^|SbBzrA}?d8qpRBu66)pQ3qbS!%AY==nRsKTkhRLrPv= zV8jCzRM@U<0IZEC2ZX!31Xj0R4vjdvmEP|5eNzB=V41sP^RDCZK}nY#b9gxMUf`G|#e&ppWyqF395+6D7v0u##& z5#eP;#@6(&Q#P7pUo8fLt$xLuO$s7@2qyXuq0mv?Kv(qJ($P3jrwz!WQwSROq}x7v zi^6T(FCwoww#mT_@5Y0~ue1|%7spn%2UOOr5hmzCIUKL^H|Ojjr&(@dG&g1LYuaFL zgIDLmf_cLf_<)XCSiMZIUj*VWl;`C%PdcDFJQ7Fk=L)jt&(bX?VVt*PcM!<-$Rm8| zk+V*D@!;%Ga!&8?{bhK10s6k9jieitg5|HDu zq)BhJqC}<-2s%T3M>R3ENk}0xl_Jw>Ee-lJs%G-XK1DTO?L2l~TV>m(D!3N4zwQab z=?6>E`2&}Edbe8o%fnR1rJ@a2H5})C&mYDJj)J4f(CDV$IDwQ}H;-g5udbIoLUAM$gZaU`YK-I6{W_; zlgKioWT>mHE4W~@_neS#kf0a!tJDa=!JJB+673;|zDfIeDg_M&wddnH1lM{&lF_xL zx0)`wki5l6UKE+iMv4j9T&!TZrv(wYHp^Mzesyl zFBZnaodF*HX_{YVLd@ z^0B*Dt5Z8ME6LeJatIXU*6FA9@La)mM5QGaiQ!k$X3W}ByR4$7#=C(CUSJS{2<80?P?R+_C`QnB<%{{ zPD~DOSMoitAB0|}<%w%(I+|WI^cRdu*|3xyuPLqNn6%SmzM*WPSO@* z-zmseLL@${?lT%rkJd3TJwaP; z`HpT6u-9OJ+>EA#s5y3{ZriUOxoD1_#lQIWcooPP)RVg$CZ%;;gKzcyPv8fbk5(Bj z!S7DcG0qAGfZ6cUBM7t7A}`7)uq%ATO>!2bXFsRDC!q#0(Rm`n-sc z&>`|`cJtBKYJNql1I>I4TIs%<%2Y3xGux$fg#`Jtc?-75^dUIPmC&?Pl9#80nT%0U z(H%2K>ALrqC~G|>LJ8rFT2D(}n7?y_wu>CA-*tQmp8U>C&n4Qvkkq~wNtbOEIu%8( zO?U3?=~heTl{K_LV)}UW&IHKN&Jt9%JnP#R)h|VbU+J@!uc@T^$m|(AMi}^R3u}8o z9rtsdwRpYhxhE(`k;!2FHd{L6E~e{BMuZJPh(Y)(|;Uzdgb18S1xlK7vG{d)}Q z4-@eJQv~(rS>fMqFCHG^(`J6b0i3>rCtIN#Y>ZSGPb|T#9%q; z=p0kG@EO$M8XxfeB)AI$M?BC8UWtwo$cYDz4{RdRrC}Km^Dy-C7sx|!6y=BHPChP{ z_?|98^rB`I0IQR=Kv)F9Q3gkB$h=<3+hJf=UdBXg)6yJ+$mWro)J3L(EcLQ7$jkD) zFE{h4ZrlFS@9w(@;B2dYFIILD+(%_`VBOKVYuGQ)rA=NJSxJj1ak|-WWyO*+CMaHP z)Qw4~DA;}be6Jn02C9bGU7FOa|jXENzuw?c~IfRL|j`7YJyUC;7Kb)R#vkIoU4#TPC7&~3fOAPlqx z{Lt^)IgIuT%+(t&mSyYl!yguoQLzp&_ZgdVvPIsjqHZ?6hzu<(P1@c;)F7We5(esz zdvF3XbNr(t5BS)pUz}60e>`(PNlR`v|2{2bTB|%(|B5xN^Bsdc^RN7E^9;>6&Ht>+!;S>W4;usYjs z_4^Gg|F6*nnTQ%tS4V0Z*8+|>SuP}*uwk>f1^LRR8%V|MAXc7{!I!fx&}@ zT>A_`Jn9t5hJb)5vyYCdpmEnt)34#aTf;xy~ z2ndUYZp$c)6nX z-Pon$Cfju{&Rl7p_c4=G0o){5NoQ(PY?)d-K%G&IVKORPcM9#o*dRzYzmU$ReXl&B zy(Dju1Lu{hA5&)0&2r=IL?M5)a4sFM$>DHOoGntb&Z_%@DObv!ivZf*^C)vQO+M9@ zYpKX?oaQ-J8(ufkK5en|151$s@B;RzW1!Y(npxLP4bXw+1_<2+8=P9u0DijXI{G*| z3=)Of$Jqo!^MPz!{?UhwbxrOKX#N-ZW&tcDDjK-wR-3ZlDnoLC@hwQX{2*3jm|faA z@WQ?LN67+=*7q<3x(~c!?`>JIK%z_6*odYP@VlW2JY*2z93} zEs0$;BkWzmQ>$@Slbc=nOp~HO>KXW%*-L`ydhVtZ-(ShZ&#nB#Kj!&R>2Q zd%j+_4YXsI?dP9xq2(5fs{_S7+)h++@BF-D43pJDIo>TIX`VFT$p!LsG71PbjbeX! zuK`k$#`(aw+o-}u72n~P%6D8T-!iaZz$vAKcrm?3h`c1nqaYT8F zJreuo)HXttUyGYzhr%w$CHnpkwy~Yy$0JCuuo{!X^yCkcP7C50@B2&Sh z>%Y~=v!-f*8;yzf9B~^L&cN;!N~+gcXZBUr${5?3IxK$Rmr|W>F)gxtgkGp zVzSpd;9|hvje#lzrW{o;chjwRrZOftUF%q+Nkb-rE<0SGeZ2D5Z3B0ShZl{mTk*4C zQ(;=|`HT)cfw4v03}xQ6b@>f-ozWd$d8ZuD<-4v6oj$vz4|tF)>z$Az;cUGbVZJwT z*Rx(hJ??&m;N*o^8SPZQ`+Fu63**=p+CX#Gf*i+2ZD>7Zje1ZU&@RV6+|8T`*S`=I zsL_|4d<#`PPP%`>_W>)Ma-W?QVRb?A1nREBTAjDrl)|kIzV$JH=eD?bjTzi<=b`&f zt(9r&Jx-$@P=%sY$-)G{>+1cV$FNMYjYaj(nWSH>!@%>xY_5bksTCdUNS>p@i>^eQmu0myVpnqn>t&GMteR9ZwLy z)_$5Df96;Fiza9f($NXuutF0{PP83jkt2bJPd{oMC`9G%{6Nj>cgIa(`B8`p9Fz}z z(nZ&Yq9eBk2)lK3q?VpZqRh>e#}!wmKh~J0ikpH);1^sgv)g_sBHmRSUfuB8ByLLS zlH$6KLoCSHQ0=l$3O$sGcEj$?iZY8bh2rO{hPPim5d!f|aY}}EsIDoa3MHS zB9UOX=O2Q7uj`fkmbK6OUWR2M@t_iUYqC5JU~NS_^n4a^<$3YDh&g_ZM>RLkInQc% z%oi75zK#}HTu}%~x<ucR zA%jl>eB4{bo4Oom3;-Dtr}?Pt<(&hUx`{%aqX?eS9P+BZR{JZ4NE}0mq33S^7v8Og z=uBCeuSO*9F^uyO%g17C)W8b`Y74t8ABl9|ol<|7_wxv^*KD`sXeSQGB>=F?kJpvT z$gg92Uc$*?h7@m?x~Gdt$5S!6s_x0o6TpzD)qWj`lTZ?hYm%tjS?H`x$@lSG1Qi|M zVV*(aRbuk8YqgnL=H#G6lebhpff*1T4vu>P?s`eW@`#U`Z6G`%;)ah0eA@Vrcw%DP z`ixm1sguQKxtpt3b?9>T_IghxOr`VN859Io_%)m|ItOK%JhfHvf1Tz_yoVT z!(~kY6WqW?JEjZuhY2~yzsrkFU0S{CdI;>9rlm!ts`OWl*cVJJmQtSXP|@)m2=E#i z7!@(y^tEVoHKIFm4tCwv(P-7aMslsl3K05D`2LnVh{>*dMDt*=5vuv;RGkOrWRN<=EKmjhOA&&2d_<4v8xric=~g z0tGkL-)*#qjC6pf( zI7+q&2^cdi8tSumXcbD+gVOscR3oxUbT!nin#;M)NJ9K5o-$g^cyweZzM3d;uawzD z3-wlD)GHdQfbB7j>@gZxZ9egG?p3BK2{A7Fl_$`jSUqPU{K&joMaO#%SNSp}9ml_> z0EvIy-Ej8xc-fhb$z^SMvhQoOh`_`qEI%Re=D^$6fC))R!zB^QJo2g`)!bEapBb;E zQD?b+-1gK3YcWve<2r5ak633@cEZ8!V2VlNN23D1!xyHNlYyYAj8wb5_cRR%guaN~ zgoNQ?F_YMynAP<}K>~sK54Pm%6 zAJ>^YuwcL{6A3d$>@Qz-#e8S3F)N?^yo z>GrY4B<8EL>u+8Fb}J!}K%Jsr;?6JI#+Vk7>^a0f6d9og;tJD^{-7&*$-Q5wt5o0U z9wq!`yx@B5lX3mgeQcrL0R;?J*2&u{+G)1n|ZdhT-ntBOJ(|vrN30BXY0D`>w*l{9GUMJm~b0H z1$lGrl2^GCb2o6d+kz26s}NnLG(V!`g|o{G(b#13a4bIV-!1 zKtsemYA7P>f8ks>000sFO<3O9;sD)4FLbqA*zh&FY8lV*pH=TK!c9HH zV}Z1H??$rR=nswTybGYL1Z$V8U$|*ii99IQm86+GMEfgV#_<)|RXU2BhUTjg^`?iny)U(ELeDgW^$zXY>mlF_ z>FDrF#A+55!*q8{o`B=R?s^8W$~{loU%f5eCWU_xjv ziND~Jf96B~ZE4im!)3Vs5+DDAyNIga@Ygi|2{VQTiW|?b@Q0N{PnZs`G2IWN&H#df2O?s)7Aa)oPWK#{}}+6kP!d(3#9(H zlS@&Q|F%c&K{OmsTqGm9YKXS<*ZGj2T90{ zdyXF{CBe`vFABl5Q~+qjI%fQXRdP(maSXEJ`HE7!i+A%;#95o@ zZUjRzflhqfpZNV{Eb|C`o53zL~vyr$q|56J`OWfJFn1<@2Ki zg%&>NfeJt+jY}TtRpIxvx!e*zloBtWZE>&jpAG#buUU%ElzOyuCa+61HFS{%F!>Bk z6_gR@oG$Mt9>6EGkYh5gay8`YGXN$bGw1Pe#W>{}1FP|a z1_a54!0lVSb8BmI(Ep?5(a{!n?NFi$+tX?1eM}Nq%67V8&Zz|x@6&G8(yow2u#{Es z!!%ca%TA71A7kQSpX;yB@QPC6fh87x05+vsyDJ5=%CV=mKEL*c7sPf8ndLfOpi2d8 zdEr^RAfHw zjv{nzeu$S5b5E*Wf2QjJe(=E?HgU^V!qo4-M!zIn+$? z`5*MK5gmP14aMPyi&TH33(f^mW-tDX^^3uI<~a(ji#p0#!T=R(UCy( z^UoHLb7?FZi6Nq8ECSB&xIfJFY~uxx8qatyrrNjt6|%+fQt{V z*baSo(p!37qD0L}WF*r*a%t%ju3*(xpqZ~USjRfAu*In7d4i_%ylYYR*(ONOjP&On z%6NsbY+qTGd{a3G4pY38W~4w9%l1`IN1t+LqdFQy=*ISBx8wB|{SmIE-7F`sEJ>pD zL!o3&@T2GmkR{_lUP!YvvUg_^@PM!VQkY2&h(FDmq-S&D6T;^6NlU? z5tPz{hZ3`V0Xh1a!Lt~EGDC-F6}WunYIo!Qo*s{jv8fyTgAH(D)zd1Vz~Dq#IB;j! zco+ED|BY&>k7ufQ;`6{WIMZY3Eix=CUaRwY}DI|1tU5 zA!qYq`2v8;W;J`ZYstW++Fpg0f)@gtmt^PlB;8IY3QkkHXgAt6$ontw_%N<=Xxm8< zTXxYL_v846w$EOx(t&OEd|lq+9Yvp)KB00{WA4k9y=S^Cmvb7I2&}%SNN;=CnV8nH ziULdz2$J3>R%HVNYLciOkt~bZ)|a}}`#7CupTt{zuSgyaQ{j8D7&vr-dAQ2t*ltwc zZQC00v^pK5Y%yp=OC`lSY8z&d?r^S4>|OF}W$7{5-lm4COkq5yoVlQuXVPB5<5a0d ztGUweP+sN-jB{=Jcj$Q?zZZ$l#ExvSTJ7*PzD_o;cT;&TYq8CE302nw)}$8Z^)LES z{T#%>zEn-;ABTy5^7SGW$ro$$^wcuYTH?ZYr8h(6pds(q)!bdQH*uFb(NUk{Z8_?{ zpDP~5INW!UJ6w&cUg!>Zap_y>t?=jNAAL;n3f^-;#&;9^uByyb>F(?GjtE`=TU0QN zZkV3Pb^89Y2h))oiC|+^U3&Ky;0-Uc-_X4ML)E&FFYlcTh+3i27RPHa!jSN}+&Vj( z-7vz;dUN)Nwwsub?z-!xcG=^cTIQrhwmfa(i})iYMUVQ=?E5y^T}9#>hbL{~S*E}_ zH56pBMP*iikWUJEXtdi&JyL&qA|??DnIh^7Yv~W=gT=Q9#%zAwuM;aHWa~ZO-p)87 z<)XLlPkyrY_Pudy&{D+)AfSAqed@AZ`iP6c$?ul|8T@VzW|yXG1}`6NUZuVjDuwwF zEf>+<1fKD2ajyN$fr-90H=@HByA7TLjGoYa+b}%MEV{%}#FV66eNNZ@hIXUXD}_AQoGx!>H7xvGv6r-&f&zv!cOIsyQ3m zd!JGP7o*MI;z93_dd6D6PDi$zYK}!m+8@-YMRK^uI1_dA)-1jPp3H3~Z%mf8pwEi}brJGI806&UP{n-$p&>;?rpGu{;fXAgGGLP8A&X;_Ia z41k_wU~%dr2!I*;vUD)n96Q|Djew#D6R)iwXiWPubs=5S*zsDUL#K`^QwZQOpYQF! zqp;|$O3czM1X%$q?z`0=Hd%WRW zr=}7_b(JM-MHat=LX4tBiQ>FA2bxM<(dDEk*zI;}26gD+>V8I_pG<5KO2~${LY^z8 z(ce{9{t3RKVp4n*Uhe7}Fr4b7ZW~6ZzGJXj!`#LHsT~)=Hw4L0>atOFUA+@qc$s;r zS&P+p>J5VTsL5|m0x2)0sVp0FUV7t+=#y&5E@f9kkW|>|P-TiFaa>_-`FXDuX6v(Y z^x{UB0GN+OatapJF!^jdrw8Vs?wf?5nCzk(TrS)c#g1YdbRd{k`QZ|6e`|?GM-_1L zl*nsE><`7l&yvF?3j)5F-4wN<#gKG^AuW_o!7yo15h{KU>Z?Id2ECyEF5vg8m~{F$ zi5QfyFGQ6`9OB{a6u>9F^h=tTq;E=!>uy>84PQ|a?OTiqm+C5X77lxPmSS`YZC%R02et*#ECJ_0f{DNtxmPrZh zeNQgJejg6?&m}Mjh1Iq?GCjKBX2TU{H1%09T&WbhBxQ;ZaUQaA{FMc=8jEQk8)UT> zcm`oa`}t}dILlZvzMN2#MXcH=^NPx9!^Bk9C?l)_;fwydqZx#K{HNR|#^x~J;08o4 zTw8BZtRI(pOLe5`vfkxSe!EY1I!n9*xdHK_7^S_W*>Tc#B2JNo99E`dL@RtwEhg-m zY2E``fy5CjbR;|p8dgzu16n5VfVTO5!4H!tUox!yuoIO=xcr- z3OBxrK5BjPliIiA39qgt=^SY8<_8uCs;3~!xgOcy2@1@!jH~hR{G5#9q*mLymbYji zL}h@DfE7pgj(oj7ntk1HNj~x-CW$ZldbE7zDfa#^?PfZ8me{LdT(UgJ?_b|HD~WKQ z5V)EV7+VtL(;4W&-${zHX)bGm=FLO;KwH;;Xp1R$&tO;6Lt6P(Y~h5^FC6~DJ&>A` zh~=N8>o=Mx)>td-RbmV8y%r2Ec<=an`)4BO%Zy3Q8d3U5nZ}VkaNhb;XZx?(zzjNt zcSY<_1Ee*j5*&NWjKMDGtAei^6e#A18gCt90$@v8jMb@e+8!1w`(|qC$|afWUv~r5 zk`fC+NdmA4{rZ{y_BL|*l$cIA$V6M6)mSUJifVI^>r)bTCn;-nfua*SfO=Y#!A;83 zX1eP@Pcp`%G2aBbdpH|!1S^G$ra`7yX5W6@El{6>c76lM4>c*S6Kx}C+4<}DoNI0w zOtJcq?E?H6#RH#NS+w`QR#joy0<=Yw)33IA3?kS zB0BX40s0#_`j?dKpXIxMpkx0r<@$q={b!i#pH#tr8*_>O&BpsX=K5<-!GDao{z}gN z33L5JiTmF$m-t!R!@n!&v4Vg+l=;~p*^5w(E-`8WW`-DbAg^j(sFy4oeZC9Mi;2lK zj3JKl+)d6W^x`?))JENB^4&!+kV%}Ap$Y!~TRKYiEFER+ki29gQM=qzC`Ouglur53 zVH`95o=vIPI5Ir8&SqSw`N5gi7t=zPcochHQYYpW5iYm)Mc`3$-bO>k^TW|DUwSX>qG1?I}cgnNSK8+{M1~fT|X$-mdu7=2Q8rm0j z!@zqlrsbp@Lh)~&55HB}lfS3Zxf3Z`#C571$IvO>WayMn`?A&xM3y-pFY^vn(F|ja z=t%bApgBij4U@VTCWnyF=d$N)TrvugY~zlXV^bNK^(j5u#QuE+x28c*4^|;z zk&bI`Gwq$6;h(BDf1@tgTYL9+bQWNS%K4Qlj1p^y+>O(~2~-ANoXPo!k&yG6$OFF* zNu#gxHVohThUk28lFTA#)!w8aev#XKw-ePe1p{M7lH+#V^W^8di)Fa8i_uP7-{><@WP%OpO32@hU=o(vR2q!yFHJ!I zxYN8emz`#UoQw-(YacmET^g@o*#A1_ogMwAKTbR!;bXmfI@dQ(eB*}fC{JrW&(Za) zNd}R)H*}yd%_$y_SsyQ$sgtN3jXYN_|7P)Lh6mv4z`XC{at~HQzS8k&^mirGg|Htzz{;NC!rEZbXd$yJE1C((`fvh>Lwv)$c*02a$n-|!tRqV-Y7 z&qgZEUB_j{I;5+U3f>vsPAEaD2NILQ83M9rEdK`D##FWe(G7u zhWyFt1l;_{AK78%z!?TGlBf-z)1Rt;bt~=Zr@q+d7lykyd>aSzjXP6oAk9*UjuhLO zJp84t)Q+OmUL~9#(sE&XNP<+%+1Y;;3{FoG#m|N@F*v@O=n0OBl)6lF6Pn^h-%J8t zy_MXo^QLH8IjteG-WU++g5UA2mQ2mBD{BSM1zc>DY+L8@a8Tn_fyYm+{uY7rV?Fu4 zTDT3qRcl)OeAUJ-*CaBF`}Dd#{KG@N3)ka2;IFVoElQ#MW^>l;E;6`c8_gJvL6 z|3gGn{prg;%G`BLl6vZOnb`UYhL18f^@NfW@eJ-BSIpebBNKfdJ4Vy%41Ov<%6weP zO2>BC2`v}h!-Yke`KC|B;;I}jrces}DpSvjs@~w}W`2M7lEXt9Ky+~9Oj*ec7uBdhVO~9(QN8ao(d#WFT~3zrx8BlgDAL*0+?$oX)%OKwOb-wO>A2=rq_ODT?PN z_bUZobeD=a%Ju!P~*|=kc@EN;_2Jh;x3{x{FdJ7 z`ztH!6ewW<7UDvN)FIbkwYosxa7F`u+ApzR)1G$5zu}c`o=yK)+|e?r(6wM=;}_nL z0laNxcJ+GZMg62(7DY?~F!yH?uK?#btG$2N+7UFq6n%eiL+?0m$%N8ax2z4ZWDR(e z>Hg@hXFiOIM2c-L8QabHUH<(RJ^$MM*1q!_=_|Rxhc}=389ingnTeqIrCPTE|9Deb zY-`N@S8%!Zb$<9@wW)9U9oaVqE?4+*Qtts~#{86B5fpBPl!p8UUtKH+F6=+taTF`# zM5ot8Z%Q51X{>?fxp8U}Jgl*1`Dao2M?o7tUb9TY%crP$ufp`(I#Q5gJQ70H2PQ*tkpfJz*~Ui?c_mnseEYnQRh+_UM9VxWaTT=s3{10x8Hi!CyOpX zbuUY(#~ae}A7VD|(T?^;_zW&wtIXPgE{%5AE z@37C%#t8e{r&X1JO1*h^-@ve6tp_|`3h{JHM!gy;{Tsh-X#nkdDaMOJ3UR$tQEKVL ztcN|Ncc?aR0^{vnL5h0)L^1NGk6CIl_U-E}%ib&+<3{G! zjDq)~gI!+2V;cM79Hj?Zj>xt`h(TSddcT9vpq?L^6Z;Q4qZ1s51I0$|<5tnv-GT-x z6}xwzLXQ$bW30WeRoeYe^xJ!B>;wDU0>v0=t`$94iUrvx3x`_SE?3fpCe!k4@UB7l z67}%I^&$m}ib=~rQB!aQRJ>sPo!%1&e)jG7A{y1ev6Wp@y9ZA7=Rtpgpq`ySEN0;2 zQAa3zOKCY`LeKAU(%DDT8yO+mO#s6U0wR^Eot+7j@e!og?+)M2b6tfp1z)X@*zpZN z&lLHNY6K~CUI;pR;-$@?X+J1D7{eqA<|Xj@$|IJa^7-oWQ4si<^bnI~Af9=tgJoN{ z69N4Nf%;Xk$v#v;3fy;m8@~Z(I6&2Yf~PLm>3l~eB?%d_2~{z3471!{4xtT=rsXO| z>s1N+@w^@IiWL$U*nfuE0U*nS1WC&cn7blrN~z*F6vH>^|JK(SAp$YY!Q~Q5JxXu#WhuvQNrFvBe=?q@`(C?!5pnjQ`V)=7A(paRIo1~;tV@XsKbT)?d8vAz^0=*z5hqBo0>g&zLnA?KJwURKb zlyU1kkrS%LNh3k&t)6I~4u+;PJTx)6W1llczJsMq!fOAT#HP~DfB_VT&;$t@C-T1N zo3nx9Fqp9_Pj^nAp526oRb;S(tGITfm-Rk$Dtrqo>92&_%&SYnx)jX{jzVAz(DKMF z;q-Jh@QFa}Sv2iPtW)I(rc5Ic`sB6T8c?{PU~!~2zvtE!$1*C)G^=Ae#rAFO#>cGS zq)X&CSLq`2Mn73z=#`<1%w4Sw>ugXXa6&Fr%bYY^IcZk(0QZePP$tvb>^Np%e_O0( zTRF3;T{yTRc4RQ|*?=mKK0#t2p%Rm46U;BOtMhd?RpxW4v%zPq-2tbW2yEC$U5pt* zG%}%GddQy!z(C>`V&Iq_nfJ`HBJR1=8s80R3*7m@6)~@0lA*8E%bOS%6_+-@_FZ=! z**A-ryni;gDCj@Y{>YZzQhvu$Whlr(=%dxg$zQ9cI_G0dSqh9-5DrtFXfwgf1u>2@ z(pPjnBz4YS$%nR|0g5LHwww7j@Dh9t#T(P=c6z7FJiibVTUS1Rr!!b4>>~-R!IB|zE1TfZk{4nlfg?N! z%2Z+KEv4|efY>XX)AW{IRfH2b0LB7O)w!!fX>}nMem_nntnB6mK~w2$gem$CVOxa3 zr%-HGamK?L^6h2-&b${tpAph3@l(>TO0;)S-Y3v$@Nqy_h;wPTb^9i`IzG1e>*1HE z3ruWxx@H?eJn<=9;IJIt)!V|`-QIt9MjNq{9&D{acNQX%+;=N`wixUsT=c zv}uQ@4XvS4{E~J}M*e2XFsLiHa*e&JsK9O<LqzBgLHDqNp;@M)hdh&z!`=vr#=!ij;UBI?&mu-i`i0okUe5 z)7O7r)N4N5VJYC3N#*L&>yGi3#D^yx6b5^F^B3^*ktI>ZcZz-6E`I2ObQdP=gQg#!&tj;@+QN=Kq;K{cCaWA1Ks+o6-6&#l8PFjr9lI`L`oj zf3|u4?Oy(UHuYD{?yTw4$KS=r|Ex${{4bv2e;&d57ag2`KIdPr?r&^LM)Ln)1grP| z?g-W&_2FxN8u56Sjs^WU6PY)Tg!W@0Ukj^_9qx-Szo6nMn;HrEVszVlB6n!z`u4&t zmJf+Hno&Rp28*T_6`x-30pOeX?=AcNcv;c>f^F`nHO$Wds>$I{>4bZpoGdT$(^)#I zMLE7Pf)g8|Fi46G>(5Asf?*VZk&AG?rt3!cj;3enY*XcgMKi4JgUS>T^})@Jj6AIP z1Z=y9Yx-*rE5F^ITplwRm|KyUp7#d(k$HYh(c7Qv88GRvnVqb=14X~^_BVP4S5@hf z746~xzA^NSmt@5IV%`qL^D5Z0V~&wij16PR>5gvW@?F?qj9xWs#N@cwrf!~5b!COe z_Dewphd5{Xe)@5O8IZvIMe6B{vnozp`1r0(Pb!7)P-1x6D}EYC`e&Bs^yt-H@u^RW zPJP3Y0k~KBDjRfjX_H$tRmR7#?FNZvYrC3Z1{Zt$(Y!_{;e4}wsS5a4Otb$fqR%!;IV|_1PJ=~Ic1~%O=?f+W~0Ly%#(^-GH_&PAZ^T)K5 zLB&-HG1YJg?pg(u+> zCM@q;Ec;SKM~i%dwM&03EKiBbmnhwHdR{ooXEg zXP@)*MtNBFKecAI#1CV3m`%-AGon0myPS`zItGWo1fSEqJA6~`WQRfR<#{U7k5p?H z$$nne!M*RwN$Iegxrg}E*{Av*tTog1e^t3?0YGW>3&EIFnAh$Dk zKhfRNNjoB!Y!-4BJ*t=9W4SC5>N{CLC1(N-Wt3&9w*hp+l$w386!%A|eI|y(1tfD!q3Q0Z}QT z_bMVPy%VZ{h=BCoZHRjKX3v`WX0JJG=FI+OpMM}Lc~^dT-s`#U`;PjFiDsG%94@~X z1CG85=}Tn@YxJW5iRbkQ2Hp95w=PZqCeYoW6B)Y}qTd(rg6*r7bA*n^4g3g4j!!F) zR#W~lb+2;P5BXVe`3aV6?xSuKHyOGcE>V;74(m)UJRBRSStonUYqr+>h4VK&zvH~T zL2c&=!_|A`ack{$eLuKGhC>gJq=~6+z$D)?8KLEtK`L519ykj%qxs0oA~xy??)4l- zSLjQ$Bc)U48M1bKw}Y0BCY=lcauIM)Tf0XEwL)0oNAJFKtvJQY{x#YRen1hbIh@N{ zC>(iHOnB>C+0ALRXao6dPjnQYotj`H?o+zV;yk{q7 z>S53yI$Xy9qMTsf79Z-9%-UI;9wR@pHTxZ%<$(XG8Mh(R31Yp)p#C6}?JYrAa!&Cm zUcCe73yln}Wxmg0$&?BeKbW_D6E2MjBXbZSL-0|hC$kNhXwzMZ43C87GaW)D==fxr z#F%zCb)dSmp`m0<>IwHkaV7#!p^0hAd05({KjO<@jD|Zj0+N+%-Z+McXWNflz3icH zK&ZMugI|2zJRer-yhkJ56Ki9t=P7Td^Il5nL>FZ0`E{Hxhsf~2NDH(HYvpYVk^j25^+E7 zehD*(^KRdrmo}M=o)@ywQ{TdF+}1Vb8m-+Wthpy&WM-8^68nN8q_CTo@9Su&q|>=TPYv8$uzenJ{q*2Sra@PNg1dNnkj2*SyOj=;W}@$ z>EF6~y4q*C{tQF53RKN;B(ogw>yZx?k&+*>Zf>)_0k{_ZidQ3JfvyHKr6~{9y=fKT zz_5}Rld4YU<(_p<0e`W|=gr}_PoCvSqkJR8gyZki@KhWvA5h?MuV9zqw>9-EhYg*JZ47#OY2RJrEn#a_^Hxar4wo zZ=vDwdCvUXme=b}7t0_P^J9I#KK+nB4E+iCcxX|neP3)0KWjKD)(|23?Z+(<8lla3 zCqsWS$(Qc$)lb)+ueVW|9wl<;-8I)jxT+MKr_^uMHMs2N!s@54t5@GPT1?7turBo) zt~Qqy>-pB?Z6uNJCmEG2zIriOvbab!ccIe(3Ia z=3ts}#Ot|@JzTF)ahj{>UilCK`01lIwu*c~I8k+@4MLkDi-u&z#q?;IbSMHFdszAo zS%!47mkswsjG;?9e*!8*MkGW6ld;R52erve_v{<$0P2k^7cadQHHb{F_5{KDMk@rE zTA!eJzt6asWH`-?deJ2)aLWjuBxY5Y?(9xU7n?|zA8RMpax5YVO+uYT z24Ggc_+U6*#87ai~X)--$DhsE9`fMFkq%1#VVMgUTBm;Il^j37z zLkR}p4Iyuo=z(=K9ODzw6-`fXN5rIiWZ4QoO3R2qlgpgI?;(o+uKnG>4-V>0)r z_{G4e7{+0z9!=N+V6Vs27`pzD=%ZL)%bs8|pYZP6w@*#+$xp8xsf(<69fvRnX|uy~ zE2ujxbuE!aR=S}{(2jKX&}?ym3h^W;5?W&KV57a+pnaUTOwW%G~?0|M&ddyzZhdO;igGZIyWho(2rMNMNVek zCt`pisS}ZONHYo*^?AJ5kzK>SFw4Fa`rU@k+P*`Q(AIbQ6gh-GCI7*B4t^t&Y$%V0 zNGiQ}mb@52%zRl96g-p_D!h#O`a_*)nt&D)3N!b;Pk6}mDfV^Ns zPNh&2l&33d*jY|DtF>n4lBMWRB4!7!N|-^U!Hb=0` zJKKU+KtwGpSOaWM8yDXI6NpFETe?r&7IgV5IO#*%;IB}RdL8P`Jpmauxkfhui%Szc zt{TslLL!)@Pts7L%&HJbdZDkjZkpZ&ks!is&VQgwUuGqwW&gWdY~pw)ggyy%niwn) z-wXn*xptYPrJ;J0#X9yZon=E(jjFY1A9jBm1KH1-|4@dw#dwri)huxz{V4SLtuY>t z+L4brMRp8Ryg1Y8a(yjgAZ_U*sByptbeJ-+&z=e|(!_li3^mb#aO;!Eb*9tIq!H@` zE%@pTaVoae*Ih9t3)`D~C~_j);RdKz>2(cbTWJ~%P`q|`#4$3uddwM95#Iv!b7(6=m$gxqvc&{Vr|DqwB29L!fJjqVt%fg+=hd5K zhiKI>BYUJUk`J8i`9lCz9Q-(GILwQ%4c!47$YDs+dKDbYAF>Q?T;PA0j-!x$Q7wJL zns-usZuzV|@T<}dBEvALRFmLG)U($8TPh-5FH5e())Z>oVPc655#Du23f zwK`-JJr1!!DarJtD`GJ8MUegs_C*D0MxYv z>2Ygkpi&mia;0LxSgPv}U+1>5Rht*SJ0@QzpWIWgkCFc6V`3c9Q4(o?o2Bugv$PB; zbkmf!$@|>Y=`1OR!&6Hvqi)ho;92S>#BY-`Ep9zSh&)~J3@MGl7-P+raSVXPDYI2I ze^Leug5Epm%rpIvu{|SphMJkenDrjWe#t|2MYCeml@1{>7K=oNPVsL^A9g$}c9ZO; z{TAGDJtkf~%F*nHTlL2$ir)1(P0NNk2GUzx&HO;QLCx^+oimRkLni?EZvLZMh5(}0 zGya-y#nF-nV#xxNVgvQ*(G6ePnDQ=9Winld@^_ve0>5XirzpnWOGj+cXS}46pxCd* zIkyZl**M-<2sU&s_P+1AxnkYg;GVSHoZ(f`TN5hm8PGN4MGO<86!TGtBNWB%Wu4yH zrsO(qbkoea{nf3I_K&)M4mi9H(6xMgo}029P8XUUFkir=L>!6HgWo8O6??!y)kB?h z=V=dLP&hvu*V|y(#~PVYRV`TI@I2+V3TMRM`?2XVnNTl7b$vrEr^297eEv=RMn#zd zr#QbgZj;-ClC55ISiQQo(61= zk>`Qc^bS#FSWksUG~|KkyW-}&3o;*}1}y^qPY>-{3(rWpwCE{+?bN%2qFtuG!p6JCp}X(xl4l7D?e6uHXsGUtP;aGP z#?*2~r}=gn;2b&9cV2o%-Y4oAJ|KHJb}rNL5h~CFh<2lWDMAM`^fNGA5bOI3&xWiUOsX*$!rp}bx) zfj@F>(AMG9|6G&1%qsp@n%sX0D*uBn_g}Kd|EVJPFJnUg0}T0ZvCn_UkpFA0=zokM z|7G3re@lYO{8LW#-!P=Sg8cu_6*&Y>h9h1ty1e<~c35XD^*<|eo1ALZ^xBt$Jp-mv zT=9&ueEA!N{e+z<(d!hLm#6@?eln|-RklRL`bHE%4G(p z_R=Zz%2p^b(qw}o2ss=sU$&Fb0#VrewZzq1fN^23kfyah(6w```uXNdSE1y4{Zj#QoXK|^~F2Y_)(aXVUw9XFm3uE*}3)tE|)T{~7(`S9u`qtMy0;^_dq0$HtNjOG! zNt|$#8JJnQM0Fe)tUze@G7#bUTYG{%nj>PLB$~qFgQksll_OYgPM&cb#!nk_5=S_Z{u@(Y)CcC}TfgZo$auEso3)*_y6U=m76zU)@3iQapgi$& z=hgK3B}pGh-S6{mk$yAksaOQ2Jssl=ERjrl#xh~io|3z=xx57}V>29ISb6ylG!?Yp zs>D;W622&=F^LK~C*$ov) zvm9Q7r}S~xKZ_;_&z(wMl|AwMO>+(1KBj$r3S~50)bn0>G)}oTpzSw(NArdNwZ^a* z-}>CxA0fi*n*&isYI2smiVE1f{f65MN^yppt3jU(Kjbn3IpyrsM--OF7T$3h(xRa` zbAImjqGHdoGiZA=(hfl&-*Z`5a^+B5KO$^GSa^Kl4MQRXvAx`?mQJ!k!`T$W1~#9t zt9y<<5Qr#gt%rrLyfygvBAlU>lO4KEXO13{5Se?I&N>g$*)fx;(3OW~u#%0qno3L9 zM5sQ^%LSSa-57^LD0?F#4PgED_=S#K=e92}(^jW(v44C{b3tOR9 zL>U#O@dd~eR+|#AL$q9K97a-6nZH=^D4n{GT|`F#_z|Q2WYVxgI3faSKFyVtzQWKs zvu5F##~yA5z;%2(`ctsr2Tdp@=QdToGCr-N(doiZm72}0ndu`Tl^4$0t>#%|S9D{Y zbGKO1%Sitx#IC%ITgps}Tz8r#gj|}3M%`F+HlqzpQsNx?s4JMvkfW6t`%}j$^*3}x zIL*~i4wX?hm$`>>1PBYUVIB(QuDCw|w}4~lbio2FAC-5B5UQ?GkwpO&3#oX@(yX6D zJxaO3Lj?7M)&(S8x??qc>`I@@)eDhpj&S-~`fUA~R`SWlwGH2oR?5Jd!@s3g`##@t ziPzrjdNUEHnK9I{Tq#?idxOtJ)lti3$_LlXB3+|JEmwGjDV#f5(Gr_-d}C;klMiZV zf^&o`T4g*F-RFq`I5G?64TyrmbUW1o>Nm8?7(lnqf+UVEQ;y|Chw`r)&z>;lWxvj^ zU1<(XkXs(^ollLfxS5=IkG>!y^e$IMRDXQhyEitdE&Q-XZp_5a^IXe6mumpeeQOdI zD$W{V-ma%gq=4niE~PKVe5*C7nzWF;opbfW&Levav;h2 zhV&&p?xSC4rc_gS>}$^Umr<`xbKh3Hhe@GXUrnEJm;?1=4EAi>tIyw~fgby{gKMtT z`Gve0@}SZ9J=dMM)TL!o$mawi=!r#-tUPve{)dd*Nsfr}tdjRxTvKE0cw<>%nF%Oc zK|}z>edX6Um;c#C2QZfSKI&VmCs9S6N~30lYuy-@uR&@CylG$2#BMxbDMwYk95Brh zw+_}-pcd5nFip!4R#Kh3T@drB+eAX|YN-K7zr0<4la903;OtM52z!3+Els|=q@S;2 z*b~2!GfgDajwOAjrq$v3h;A#<$}yN}SManQm-|F>7d5M-Uyr;R{QCIokvKb_!{!>Q zqTe#JRY*z{#bbJoDl9WqETL{Ph$$h3-fhr5XTRN;g;)P7?lM}B;A6% znV-K3K3ED*`rNLN-W}HruI=|cgsd12Zew`Y+gE(AaG%{NSHNmxjY@kQ4BX$C2p$Be zCh&Cjp!+@puB{I)H`XdGc+}`ra?4fbio9O(GyM?UP1)gN9yW73PBi=DNa&Z?wcf!7 zQa|B|Y7YJ|$b_b`kAIJ~#fSlFyUtT6eekVABdm z&yjnt=gnf)RHmc|fS z@hI7HKDF<-6Ew77@*$)$xm zQxiJ6imn{zhjkSm4qKY2&k=^%*ov~T5#wrxvKH(N=1-s7m4i93%GJ zpsA`JhmPq039fY34i)gP+#|Mj6|Dk2v6;JT9sCVp)z0FQL|^92Gd*vi?kd9Y#>*6v zX!js{SDc_}sf4(TMZ@_(gq5!WBhU-!G~uS`tf%OG_O?_hW5??qHHEU6r{u}v+W~jB zJ>dINwGv0SY7#_JNB~wn7YEH_FkGPS$fnh8q=cPUE_?AGyhti5r(E#>*!$Q5?mz~p z#+={DQQeWSFOwIw_NAHowxMb6k%(Kj3fXuKb{;o(vP43=ocf$xVdHN3@ecM@!P3& z<+R6Z)%F7bSKra4GPd%|&DPP}{&z}O13YsLqNsWJk(_xDof)SUd0)rD#RO~lcX-|= z0_yBTagmw(CuNQ>)+8@>ap>TT9)F7w5!NfQ9!mSFnPy%)F?V}Rmv?${)U2Mjd!s>c zWC9-4WQ3b?(l;tbiD8I}ncO1Ia1ppJI&;!>fD0t`z)USUh)5SyXO^e$CRMiPgV=)2ZZe{L!6?km#6^A@hpJVypL#qxlyvtRW$M~6aHYB zlHWwmT#poRNsqEhlCn{<6>JC<} zDNJs6D=bC;uG>y`G*>dPAtqAx7STF{QSdL#YGp@7zJ3%z&_=yNWV~dR!|}lEZu>*B zF6WiRVB;dungz6}p{iy#sMbb?V5UW<4W{R#i?#PXvy&2h;gwW&JK0jk*H71HT5QTM znB^LIxQ_wcjI#JqO@ms`kpB`T%Xx7Dfij0xY7`7mmq*%;pDySPh9lznoCi66)h&lN z0^BMW*0s8v_Qr)}HEAvfBwf)i5!NH2+pdmG`BE{`NW!BT^$DpM7wS)LSW0I`KvRUX zD1{IIH=}d21jnAm_7e`o#(^K=gc@`KtRd%~(PA`W6}7b9p}Ojbf$g#X@ovHQM%h^# z&$4&*G}oJ&7!T@DhEJz2M|PO5W+wRAzaf|7x=pc4MrcLBgC2T^{1W)AFVN_n9P|aZ zaZ`9kN_QdGwUS?o{(%XYKO=Cs{zq;1ES9+>hHNc=NZpc7@{eY0+O{t%EF;(mqf4`? zX3ABZLMcn;CNe};%qqn;t!yC-vpF#d&i@>|;g&iWoqaFb49II%0q%6enO=EUaU(H5 zHL>7T>IT#DPmwo)$E=>w(5lfMHDOSQpq#&@pP4Xkq47+%Td64_msX)BBkdFU>{@uk}L6fqm8E=_6VVP!j(b z#>sY?_1%Pk26eK7u+hOv(F8w_AeYP^9#3_|R2>5^0CGXw#=(+bB6O5PEm3LWdFkQ+ z8a8|IYwWEF@d&0bk@CD*PfPFbls?Ugj6(T7tt!X6P(H3VL2a?#jvTyMd<)CYaW`N| z{j|W=5$yV;;i8h#E{a>%6A*2v8yPzJNamMnORIAe#Tjf>zXD}^^T;BzAUh_oan3r3 zJ<*ZOF9W1*N}@|N>m!I%JZju}$h@k=*=L@!;`ebZFB+4z@#vA&y=#63%Z}rS=$Pl< zT2O00?Zpjr^(tKrUpS{|b`&ZU4{(CUyC3flD9zst5IXx`W}-U1*C!@F8M6pBO?jC} zjFbZj&JUHs_XE`b-At^s{}(gye*1sEme5xB4>?gO8rrj*U|L|(66&TB`PbY6&|e>@Mq6gDKy74@%z})z=!fA`6+xvDSr8EC)NPQ|FT^H z3oToNePK=n+O&=-sjMIZRcC$_=^c9fSO#|0UJ?zeYd&4?*7l zzJB;`IoN;ae*XyBUUIwtX*5>qUya6pj>gLTQ*ig+xF70rP~pEDjr~7vfa}xzzrF!( z?KwyO_CxNENkXcI)58&CSEKlqQ$ieGDBQwk)N6Euo+`v+HIp}mwj*Y_ybB|kN>${q zdz~+E%aK~`yVOK4cN@V5Tq8>FJJFNuZ{1_(B@?~LOaKMs7#7Y>JB;*ccee-ftg#yo zI}qHUim0g74Xi-K^3=ZtNoU$aHY9YG`NB}JcCa=r*X79}_ z!_{0S8DWGE2cJmcrOP(7^KKe-8N}_zrkFpIF*JaOj=br9GtG&VCgicd-*q8$0qgOu zl%t8mj&y^P`SxvXU)*hE#j8$7=~T^?KViG??p<(Q&SkbjhN^c^QGD_COr_D4LlP2t zJ1eHq;2lby!l}{Unt9P>g(VxJ^pRcL)a0x+Wm*SoBD*SfL!&Z1z;>=O^~zmUSi4>C z6Z__|q;!ZTeZ4ZZWQ~&(*n=Bz@GbomJ=i?a2!-pb878 z#HU9!ZQE_`c8}@9O#L>$4E^b*P26p@ek*TCNp~GE^5%S`;UsoMp>O_;YF<=jglbiL z>KPwB;4p8kEs38%PLDNSU1|ozJ{KIj%OCXVs!QXVTq58(!en^$a}rZ$U8a*Lec&yB zx%symHSpv1x|xRdMU~qdVoko^wXY!SufF(c%0ojPGf>3H*gPEaVJS7}rKL)N#3XMD zZHLBlfw(j2|kX^Lw&Cd04SE#Ma~WO+@Et|q;X4{RSUGGI9#Gc;!2|36z{$mtM zI+(qa`JN^7L*qO$2vB$8KA+n{K6QQ~izZ%6Jgtf-is+$;JwXCOH^ll}=@{eB{X&uD zs+1YD_pPOl0od1yoZZL<_HJpH($P-<2r#5ukJBhF=Yx8v+ig?D6Qs1p){v~Cz!=Z7 zDC}#Q2J@W^{byJ`7PDrJ^An1}{zAOqcIoWwli9hEeg za)$1PMNW&Bgm6%nzv1RTHh{6~I_-zU3G?-l!G(*)wh(w&&c zp)uO`TdFSKqrSbHmS@*9q4&8cdQnBYxtxa)+ z3EIe`0uw{S(qI|lTpx|HW{6yp&ecQrpEBvN_)hmq=gLxqLCE5*465(*vGtx&EPDj+ z{Jf_BB>rkf8@!gX=pK!HuvU(|kq5DoOUeX@&&I-@Wg9qgi=d$YZLqQC$7~~Lblzr68tBhE6Vc;uow2cK%` zr|HVhxZI3TyP7fSnr{+MLC;!$7g)K^51%r*UBcYmqGFijW&IaMEqFNcsi#ZQ z+_}uzW=w9q;@7fX&&_R)Q?500_sn_bN@1%6fy|aL!6X9UyG2Y?CJPwIUj%qPT1qix zp(S+dIp8cn%fjaC!vv4gdpGAAX~K^l=@&GZh-A(Ro@w^iuzO3U_FZ7tz`7RIlNMJ@ zbNfT6jYJpB_{&^Xe^{*%G;cT4FH zo87h@-+c~6xfouL^|@ib5}Vebl;{oLLzH%Q`X~tHy5Aq?Xkpf*HLFFj;`&c?dc;RYEDrggQ_16s z%-ei=a=Te)#~iForT67;1-_?guaN5|?Z!&}hG}Oc?9{#=V%=+^*q&BaN|IKxY zia@1KZYWfe@4!4DpDdOfX7|9C7z_`SJEL$8LXtWu88&!z;5^`Rt_=941wYa{DY zVVF*J`}Pf9>59YLa3zPB!bWilcdz_&AN;sz_)N@3-9dbS10y}fh4E;aCN71} zxavZG2Rt4KOpbS;Sbj(ANJ9Y8)pZq1lmm`(faPw5`GX*${JzNIz7KS_D*rHfB>|sz zi6v?AFQg5#YQ(YpDX<|ijzWh8WEC%3Fwm3Q&0x?JH%4;lOI;$`SQGaE4uGSL7eS(t zStU&ANlqX!%RtH*j|efxjS!Gv=#5q6W2e9&;^L)i0PKMl7FBo~81!y;8lA~I zRCw&EshSvdMKIFT8(&F*=yfN)Sy>z$-53%-ush&bDVmGScAL^mNf(CpL#fZ)OvjAMm|@mtDN5qn0gRU`rs z6Fpx~O4*MEI6q)2#vQoUb-2FeH9FhS8+uNIIvORbTOKDmY?L$723M*ei#fI__tHyw zjl4%k~g? z+;U+D?oZc<12A@TGEuc5(23HK9qbc-*dA266Tde1b+t!}z%qRH4hZ+HCYaLYkj!bmc7PQB{_#J_-}3)E^H$wt$vU|*@xg=)v~pnDd@ca%Q! zuL}@#RRQVSF+m%H7!8VPOh;EbJyMxsl%pow1MR3nB+B$dP~kgr%!r4Lg0GY3l3AD% z7~u!%)iN2Xvfv}#Vzs=&_Zs5PU~^Q`5W6?U{k(h}ZAUIGG>;aV!V9)K*eWUCs^*(| z4?fW6Dty;kUzh1@p*9v-@4PFwxzQZ@@j4Px%e>z+qYc9z}aNG zy0g(LBb_*b^TB_4SD|t& zDk@#8?37^TbOXXM2G{2x&@-L2!c5PMYK^!&qR|+{w}?`GQ{&TXuoA?;a@XPI3hAODlZGvTG+KxMDqYT zX|T1W5|H1g!M|5W%CR2CseO1NA`@F4v2XD;Z-GwH@@tEBc!7-p^bwn{jjtA`&=PaA z`O*`wfB-+qX~dw|P%@CznY44bN+t6o>tX&Bt2BdJB+AX4SH+v;urVG0VY?NfXyXHM zHM>|cm%Cmb8rq}O)HicGldRbj@Tl8Sl@O=S%pv_v-GiNXmU7@nkFKN4R$4l{xhB+4 zg!^jp8pCC<5?UrEYcOp=X(;WbTR!fqD=61pR=3W=U#sKNv5-}CTigL;CS!+4yW>E` zBG-?7)V~r!x$@K0Uc*ygu)gd$m|hE;2$Ih-^sV_OuO!j^%TvOFlf6bJg5Z>Xrc)U@ zDTc*6QpB%iJ*AUvp;+-%cX3}%lqJ}P<@?#hVaEqu0>1;IjlI$;5i0&biD3zS?-ma- z(j7{qiF}HFq*5y@ZOfRkTbVH{K@S8ydrE>(Gh~L~tjhF+5O?z*G!p(K`pr_Rfb-WX z&^1mztdb4cfyRqqdi|itBKQuqTBn} z*8>#maD!3D&m*7J$ZjKaeCF9bEdeEuWLKOFT2SZFY+rfw@vRtKKYzs_kY6bosNLh% zRo|M{@Lp)ERuM}y)iI0^)QWU>jokRIgsxOMZA4`P4F|bRoF+l1C1FITp0k@MXPl}b z*`tw|7=YkI>g4Vw8@>H?^OSrc!kfVTAh{j~$iBV$t5B@iK~_nUyF;~gq7*P@qEj1oJ(4SZfV=K-Cex=i~gKRAkIk~lnmZv@^ z%J!r0t){%TFVCV867F6(wh==P8875<+;;@2);tPhDg=Fdp+jZ3M=?*W)`)UFMXnBw z*Qp|Moj2@>y1Gs!42fY*_Plt#?bO{r`S{XDKLMro0a*8v1Sh{YHx@)`V7U;@1ph$# z&?;JKL;*9ki+F18>s9U78*hfg6EpM6GMq6yDr{PFhTOMTHUa(c$Ov=*U`}Ol_D)(eFOgQ0Av-dM!p88Z7+9FQvLlX@2qmua3S_a~sUSQYEcEYU08RHNmCq05!=^Vnm%xs&~D7OQz? z8J!lo{1WQ?Si0rX$DDNebbk_DK4=%RPxevreOwT}g$#s2_zTsjsJ1CIIRxm4LiYE| z9w0A7ETt=xhcXL~HWzIjtdK=`$zR-1rv`NXW^>2TMQJ&jdIY^@3(9DgPLbq?3Bp#y zUsEVFcBw1E^4{1RQ|AVoaC#_{GVNIM0)92Pd%r3%K1hc&UPIIIJEPyMQ??_d*ugnZ z(}B%;I3STbPiK+8PuBe7K?m7Cuq&>v*70o3ApII!4aud@AK)~`-e4icsOI&gVU>@zQ51ket!q{E)n*R7$UQjX@Pr=v1`0(6qAV2|RLQg2C@gg~|&Of;OP#ak?To6`{` zu3yK@>v%gxk zPj67ygAFiMl6OCE-e-KJ1BtBZ>^HX$wmwc7<*=Y>&ImMN#-PvB%oqKN_>~(8Ko0 zekt=gE__As$|Jg-I&wt26}eTQ4nt=kuT~AoJ*b%yra8nT_?I|968ZKkUw*VDBB>eg z5A55=hq}~8k$1F0DhD!m)%A_r$Im{B5@Z-UhltnXQD4Iu{G@a|#~u~At|DfHt^_PY zqshn3LR{{B7@288%xm1VOj}>NCfDX!H&@0n8QY}Cm!7ByEaK5MdMni$ zfsKnza+szUckj#Ik*#L@<@$zgdlR6NwHF@rYL@q8J51`B4gzU8B z#^ft(y11+IDwDFSxpO~uoGzgI=}*&-hR3ak^b=;ylDfZ3`DPv}n~8RI7i8S4xDy<+ zrI~O3%(Wnz;o4;Nr>&(mQCM1m6z%QrcW1n>E++8Zp>@Ak~HY#-;#q_~$6cP;({TH0fs4g!s zj}=%%9m02-z-1&7imJC&cwXn%mF3}RoHj`Jg23fzZ~XvEvsVQ8#$~~#qAMyjz7ah> z&*8Ajg({sWxI*ivL${)6S^eV9OWn?nYAlo=K3jd!Xl?Yox}~-1EqvT%J)+w`@dY}PL%plbd^0=+Jx>< z*zfu33%rj>dK|&bbg!vE_c=c^KLo`0wuiqfhn$Z2la+cwx*_7V%$O9EnvU)1D1XY8$`+Cx;pKRE4*o%)RmC^BC=u3qBNVZm!e%}dc&s~W-QQ) zqpCHM>j_ATV7?vOqIEZs)6G#+DJlEYv$L`grcr1lR?43ehX)p{BV-_D)aR@!okRrWTbi)zUGv z_uQZ=z$r)R`Kve)P;XMD8@Mo2b1uxn!PTe5Ev_UY+T@w+9hKg~2?drpo)_~gZp}$n zMLD{NFZ=GUUvxxj1xxi4wIpkL)@sw{T^V2IeJ?yAtE$j!;38zUrhD|tmlvmhK|4~t zF(FhKyy@X`eAXk|vCd)W(ia^+UKPWJ+UHJ*R==7(c=`0Wr~%arkCUmWHHdsW;3gUc4aTuBf7c|+Uv4=gX8UD zX)|(e4(S}HP>c-@MTM{Q)?%4?O@_WID0_!2iYErGl!PF9 znd1A?WOkJd;c?d-#EQ|nczJ?4A(7*Q{h)p!Yee45yC<1q)n9vr!nDOB(08_Koa1=Xw(lg zC($31ux+fP6x{I&NM?~}Noc)Y3j-rae}Wf9P)X8gOc=%^jncuaWn164hHdzc2PjJa z#BASzZD(`pzF(T~*&hk15Aj#;j^xmH7XmYl!!RqGQT$@>D-=9dVlo2QE5hHKMLFmD z^dT~cmDe8j1RC0dIL_vj5&C4s(Yz-O-g?B*4<4UfcYZWjdb%^``DL^@h}}w1?x)xN z{4x6TqYq0auIUA0##U@Qq(G-klLRhby6;}6OGbAdzmyXD;ff&n-aMCVm*9&t6ciWd ze|Z;lqNHOe9IylvO8mgOyL{#N@+R&Y z*>X$5kZZ@`k8{^L)0Zq?Tj#UB-Ylx~WIQ>Y*eA;u0Yt>y7GHzIx{o?KH zFB;#D8h=euBa?cS^FNBaxDS-)Um`Z*l4tTT6~8D3?5bAoj_KX)=q5KJDn~qeE&#WP zs9Dmv5cbsjJIJE%gE;J`&(tzCsz&&D0|JT`^?I!o3I{27ZNZng8 zE+7UPZy$|#G=hm#CnC!ZN0uTU>81e;*Tsx6cyJN`+n=Yswy+;BIYu>!BA)N8Bmzw+ z=^Q0@$APlFub~vCH5(gvDEU1F?&@6#MfwE0@GqK!<|yrC>@K4 zcEjB@8rb-VqZmrcojD3=<|w8c)5xjQ<<~RJAmk5%)C(YR&x)6OPJh&DF=C9yp^OM>2o*cJzf= zT_J$!{k3&H{XJneN)iq+|1)g>RhOOX{)|3RXV>8K6@zmn-|2lvrBUx(oUWSkP}eKt zKyBj?4{ATn$iKW1kJ*kN@M1kiBFEohwv;Ns7FN5>9nfSBM4)!@CBds@My%}3xc{~v~Y`>s2Z}sfj*iB!Eg~}%R2pKW5 zf}rQ#g2|-C!tTX1dams9khe$-HJwLLoZoR*+0(+Zclw8HSgW)+G6iAY4qcZN;7#gs z;@Zi%KJoIxZ{E$25Qet7UUei}sEG^D{M{${$g`uhYuR5sutxoo&E+DCrtfs%ibMYe z)rDFQ`_BWOYD)D2@z+KeC_m?KNW^N?cw2a0RefW*?ngxU7gs(SYZd*7B*#3aL8?XaI#} zcI-FR@y`zMvj~+xNVh);snNB2mJw#keVt1E8{mjZIl+g*kqE6~j%SWQ#U%T6nLf9* zZ!uzdw-1IUyuZqczg1ujP{??QB1=H&ZEEf8NQFZ)T>{j0JSGOpd;}h7HYt@xi~u?yM?eegL6&WZZiY)H_ z88E@C8as(cku%k-MQ)Kq1uZ}rjy`>8Z_-|K_YzY*lL9kbRG3`7NizvQSS^)@N=WM&mbx%u|!YpCL=Iu-J@Ek2M-*#!YrJ(*EsT>z0)n zr5J7F(ue3LjAHh&Fftbrx39Wh^d*J;{U_lTSv9^=l#A|0)!;E6#F3ofD z!KFYAg1b{nf#MDBl(v-O1h=B4Kyfc#O6@YgnLE!j=gxD^+%tFGbts_vh6Asj(e=PZ1>-Ck zpRb})gkDohTFH|ifnxjVIw5A-+7)wfS{snxXXzM!_=iFnzYvhg6ItPWf%KS#f<)O- zi`#poavtyGDt6?7weqT*cgDKOh2JT_T@~!P6<*m!rg!~nN{Co93Q>V8PL23Z8P)6O zJSi><)Y>EJ|M4u!*heH8#noU)vI}0za*RuL9AM8H4X3ADl=nh-fOuaR84Ra9jvc23 zhzbJ0G%ovz5hpmXLmCdr?!jWKOg>3)p3WGn< z!rzI+KUH!4BPaP!;c@>JGWj3cGyh*j!~NL>`u7$7Q*D;y|Lwm-Ir@18_&PXV=fFw+ z-GKQY%tZ3vWG4Tlwm|YPGyhv=B6+Qi`&XICzpu^0{?BN$;Pw+81$RAIl7xDOT!xKZ z8>y}f2=2DX!uf1_Nz#1SzkAcsdUs)iO57tEJ|9Sb4qZ3Kc2PyjSl3urn6@WY^%iO^ z8VR=~MgkB61`}=rj5-k&|D>JMrjfU1b}%a3fC&wkTh_2#^JF2j>)cD0nMlIV&(N{_ z$ba5ZFuOj_+R&9u@XFes?tBDj&DOvE3Rs;o+|oE^vQKwYueE2lQKS`*P!5Z)kpUl0 zt}1kiv~Ej^7CyJWY93Q$rc+bSw(Yt_`2jquAXxd0KzYJi>rBlkef#45F=CG)k_vAO z>R9s+Vi4bp>5)%L<669dSbNL+^E!2Hk?xiL3SIo)wOLhahgh=Ofnh}(X1KEI(Ho8Z zA?vSELa@=2{z?}|h;U(Xy7ZVsIJmXF@#C+d5x=Rsw>rY-I=Ok@asMbwTej>Qh58mN9p>GXbFvuXkDO2k;Yb| z85GtC!@Wj(*5)ora^r~%mUf>Mr&vqjZ4^fz8KdkP(J~8RIpNrb+At#acyl52+_H&wA{LtjPwWpx)H=$hcI0R@JjdSy5E{e-r zd>Ji4(?&;PX!c{M-MHme%HW`iOgcv_2Zp6k?!-6mQ`~AO|7M(s#_}$Kk$oQDn>zX; zk*f=@G+7oJU4pGwZlN4;D!AMk4;_upJVLFr?$(V)U_@;Kx9!}yRj1lu>*uHAMu$kUSEaeS6ZSAS3ZSfQu976L?p~W<#)&v(Kh>br=S|acWL1 z`Vc7nwo&Qpfj`rG@X2$bty7hjH z1rNOwVi8MJ@1eW=!nJq27Na^T@q@DXEz0FqGS7vLuhnizx=yBA|EEEs2wCTR7OE#e z{E=`AT}@bujQkPLWCQQa)W_8sK*tITSD?k%Lbs^29d(<8)7hw{TtBJUBfsXd(Nq@W zTtLToE7hwz5Vnvnz{8PHJ~i3+WX}Bin*#&wr(jIJa)2w(B}0|UF0=g|+WQ5ChrQB5 z)~XMULy;?8eA^ke)4FE~lyh(2pzG#_hN%O#Wb-l`i!3Lx1a^H)?|EdnDJ`Ba3u~Tm zGJp6G;ZT9R#~UR3hebvXe)qd@>Gb1p)x!Yp5)gL{;+E3vdk#XRcPdqYadsdR#0KLd zyzz|>-rW(btVU$$;_*-dkNZs}9`Ja3!7?uxoRM$IW_2Q*#DEUHYyIq*&sNb*QQ5=Z z>wg8)&Ifns_ zjjOsYMua%x1MY$41 zxlrhaHGpheIX_%@F72j>$R<@VND#dN5w1z0(P1r_admAhk{Cgw81WapC)Ab7a-tt-EsDJ7DN8Hn1b<5E9eR@M|gO|9OvBa=NHi1&7txR2nfw|Pt=9^v-G!OY}Bb=fZ7A_sGYuIBAqHn zjk`DG~iMuA?Hdnxnh4~}zw@xR=-Ps=1% zc}r(=yIsDv^$gXN0HXj#)WZBkCH`PbXY@PY)>vY(g1Bkx2Z!V*_4NJW%8eQ+ zOVOCgY*I_U`Sp>7+@j*C0qdfRy02>W@ZtqxTQP5L$bEXoB^bjj zyW`Go;#qVXC8wgvM(18eF;$X$tejb%u%5IlZQgid|Kb~4o@gL?g>g{N;m+Z2_B)DV zX%4#bxZ}<&4UG;9YN@BB&xH&FcAsQhsrPo@61{|c{}AvDWnS{EVAG+-vGk#gAHm|Y ziJMMYlgCkv8Bat-H4zenbzK7Bu`sr_i}yb{y6%b4V5OWTZiz}MhD+42dGpa5@_9w? z`|`p%5O$=&&-x7FPbqC=(Qr0T5h-*-L|rtVfKsgmdXE4cEQF1r6C3d~tx5$BMOUdqQL5 zR$RE&*GFF@DQZ+_p+?holYEaNPIh=Cx475$BZc;RgHj_-iVRu~FfJP|KW>44!6K{p zs>zlCOP%{6U6{w4p;lZDirrjS0ggeR!KmMr_%W~+uDh)OZ2C50yAZ;w4hQ4C-LMYh zJH>Yi$wUcNsQB09G1d6UF})>kx=)$}4ZTY_@TDPJd&Ji8z3!TyYl_w`VL*tre)4|L zzOSLG$b(vOYPCyO05J`ECKl{P>fB{8sAn&12Xd{a9(U7pyE67VdzzAf9fpQGL_I?{ zEqZ7F#0C9M5*i^kZHm8iOAUg0lYpyTOry)PRhJ~9i(Zjl1*`2(==n;Gt%9p0CmnXR zlMwj&h?d@<--3gHV#Qp{;Lq)czpA7ddj<IvS^1fBAf#d85)O%i!Su)X+NEugYh14szqI2oN77e1O( zbN4^18_z(x^LoeRbuE%Y#L4&J21$WPP#kjI7b%p;A(ZmXmjf0L>~aT3=nPTn?8+Wp zxvd5h*Ms65jHK0MKRcR>uMTUEN#}Hn3X6)&^wU_^TbmFksc2!g`SZAAJ~HeC0}brR z;Ad8~Sp6gmaf4~v!%KUTrF~p}ny`>T3f8Jvq$7TV$pMZ^^!w{aWhp};4EBKD&1Syp@C^!wn-2$to6F|`tk*QsI z^~>5*b)qgiqeib*{6V&+RiUPXSZYE&DiazQW~?VlqD6qrTvznNN!pKEw>R>BrW-0$ zkO5D%%8~-|NXf1bMs-1(fUEfZAIA)rS#)mC6FO zqXBCvY8oAmNo+}#X&UH0oz5bxMYqZJBxcE92X@haiG@5o@4q~aDcN;`?ng_8i9UWb ze1fcvxX4Jo5uJTAdKbLKtB@ROgPu%#<9 zuGnefQ(=;m25ONxsJ@Y;3P*akLSwSp%00n4VFjUTp#b*flDAacN6V!}Dma%ID7jr9 zp-XJta(SgmQLe%IGY0MF@{p70G*|I*t1nGb;sxj0b?!HWwvluUDFFpf;@39`Hf(!# zJotm4xC2u4Q@bOTjdb6q>Gr8=bN8AT*27WqD>LczS(^Y@(uP2Aok8;SBUE_VzDLqd zX-9@xyvKA(R``T8XvDfW$6G6yS(Vga;!0fK;;HBZ#@!KFF|i6P%~q9@@P%h|TzeI_ z)1X(=Qqsffg!~Ad)y3WIPaM`YXEvRUYk>MjnA7e2L#I5_#NU z&`o9*uBb&_%`RSKFcJ7WvUNS^k^e-jqpoKr^*I3$a>F8wGDTti+fxl#dBGoL&W5vqL|R~j5IbMuscDVRFTGGhI?#eEb0!^g&RAAM3&*GW|C(=u;R zu=AKU)hjcm09cUyu}n{6<&>hCihidiX-qW7l>?-x07;rYa4eN&uOd1iRqZR4V;U75d1)wX`^M+ZZrCC?8Bo9MPfoBAH(;345lb1!iZhseZ2)A}Jo zrtlE4oXD3M`2esMQtxH6Vx`J~G;GIzhi?6+ z#H@cw1th^C_g9uAs_|ceuK$ne)<3u?|ATJ%U0VosUD1BmhDz~22^i}7_pkg(TLIfwIhm4|Fr@^T>5XvrT=DA6qotyAAbRQs$Kz}{v6i?@A|gb z`CeBiaQtm5TPU!;WGwOjIEWpDp`=#@Hg zB{;X|4w3WVlu#=PMu;m)u};88p4BPLl(@CT8!idbh^HunNY*BRXsV0(^d+&V|Fm~ZmVUD5z+|#penu`&(m=@~mvD9-g!kfKP z`0f^_qm%-Ghjm!LBZXVVFro^ZIDvdd5lfX(2Xjlcz^T)SRXJ!|rDA30n=I+dkxiin zIUf@*iZ>24X;q&Ovv)sg$_~ygwp<1|QmzSqY-+MQkoB&RuCTeK5Lq*PwX%AHB@yZ% zU}OIA_3>S5Z}Tc!`xv0hhLp=l#`F=L1raW{{yJQ@2rEU4seHh@-}A{`l6IAvW>htBmk#>&@%r`_ind}=*8Jz?4Vbu}L)hETWz7*lNa9g} z{a_jIr-a2z+<7TmvHIYpyRxV+_lUiCqi8@=1i`j8F07NtJ=^Hf=t6`mkllGU+(kx^L;E=)k=Iuuw)q!#~IJ9}&UXd%RL%H6Ic`)hpI3(1_7STqP zf$8FjW#cTRM0@7cxmXPylNXEFBqBW4Q+o|l>zHM_i>!#%p2q3bZ*rv=*+3oqWZW?g z+(0aN!}_61)Z#)HaTzO%`@vIjSV;rWf{lmDSE0tD7#O8>=MR&z2f8VAnzrbvV*cKk zjkLQ_$N_jbcgW+k3egOgn;VHAJ-8#&bd+|~Jgj}l!#pkTmi5s!hX-N8SMaR5ffh`b z-v;bGM+(PYX?P8Be$pI}7iknTx=Qd5U$Mwfqx>mJRpbZGQ~(gyyp=_S08(Ik?;T|Nb|EnzNnllB_4)QTiwjqEDk zG5CB;UcWM}Pu(Dobsqr3Do(C_ELc;JB~FZ^;09e9m2upBs0cv;-2Ba9g;po+EfVXP zkAgyEj9kAgFWky$D{#-d+~r(DOG?`r5i5|k44}U_>r5rX{AW}WuvFj0U}1fxYg`x< z)*keHv+J3emL#8~I6(Dm-fO1repO^@w@u$&z1`RED@B%Sh~nO<)ZBe6*s;OM%D3PZ zcW0rX|Lz!TP{v}dRdCK0>s}N6kT0S7;7hN7KGuh{;mT!{hN%dIZr|sy@p@I+%3%K5 zE)KQNt7(8y^Xp2MY3E#VjjA}hxA(%isS{g+@AyQvWYitm=xRuG@dR&i6QKR)hjavI zg(s_vE1B-J{g(WypEYb`n0M z()14QW?zfQwPKlsjxZ#J8RbU!)I7MdcF#!4?PY&%A-^4^Ygs#sS~2KEiUKZP2c_ut zrgm0Or@q`D2_M`ywiTCkKz801W(sq*TJ)`1FuPNAA^Cgq^5)c4148tI`O%pKHUI7B zj6GsGY$j`F37+_!m4~S=qpvX!EFIrV#B0`<=X($GsTC^~c>eTY@&vr@zO{DuDf`Dz z&$Mix7Z!SoUmJ1$c+2K*yBb&HrTs_9guxu3;BW=a87v#b(lAsXsxIZn(87zK>Bf7Y9T>jC; zd#C-40CuDF=Ra@C`#mX+>@X%-+L_V*35+Dx>G9iI^W9P;f8U83w=CiNBT;0C-uoL% z`4{CzP0kr@mO6aM_BV~(w+hge1>}9XgI}J$4z^jy39PBaD_JI@XZ<4?K1ZL;Eo7{MBfVY@26GXIDnCO5nt{X@3 zAwXgYgc{_#l+UWzFpOmA&i!-y^v%i~CN&nN$ptn6;Ms9uRQ|Z-yb|x2_KjNM z^L!|KUfP4VJL`yL;LSNyvm;{Q2Z&cSr4=b>Psz}gKy#^SD?W@puYhrTZ66!{5FnD} zw{2*};x9GKC3kx|qRGagbT`SsvXSh$lo@w=J4yT0P&*24`ayl$ zgJM+oz>Mrbg^O?e=25o02m0;SndBx}u)1U(#wwI7nna&nkYgCaF&9^UHW>r9Oty`z zwsrT;y}L>Y0+@jGwLx(&LEW_!RK*nf_b71A6h~)m08Co(?q=QN@q@s_qly??+^-^8 z87~)ZOiQ*w$eAID(3i`iDn++ZlHa26W9=v@jZIxcEp9K*?LL=GAsPk!D6eA=T5@?q zQR&5lN>b8u;!q6!P;El3ea+VTTkQ*K4~xki+Yhzl2th?sXHPy2s|@liFYE9}O3MKxRysyJ1FB*$`c;_w#B(LJ_ss}Gwq zUvxfr?XQ$Yp!mHkJV7H&WZ*V~;b%v;$gqU-1{iKs(g9kn~aN{-r%~|CUKLnf3QWJC3;rfTx zrMxp0KjvgktD;@Q%0Pp6P|Y-jWJ9>}NRyy1k*Fb7D_&A9sBm(87e!5~&MInLGAm5Y zSr-GR`e2Q1Fp0e0|E<5_C9|%Nv)Oj0gq2e!F-dxteV7o4@~)-Sx8Q@^rHEaaK?swo zQ1NlyoTUnrI$qGPIh95o$vM0fRT<#N@`xVyDw1H%_tKJ+$?TKCw>O+f@Q7ybn4S zlDgVuB^Ks3u6`Rry@7Ban!~gTde{`oyi0nf|GB_=`>LnF>S>YrP)}raE%AwbZIp%c z7WM_lLV=bFP9#q9i*M3s44Mns#j#YTgD6#_kx3C#!e{Xb!pCce^U@op$(*XXBf(VC zlJ-=(>2}JtR^%N^IeYH}D~=>Rw3(@lL{WJ75qo->QJsLjVFkZHak;q52kGIjy0j#9 zyhr;ZxxsqP+OfYxH9w1c8WfeZoRioT)eNgOwL03L?IV5XM~7t`-1Rc7+$dP3h)o~( z(~}?suITO?6zj@PELu%SpYB2cxWJyRlq(I15=?|@jdPOPJ z#kg|PO5BDI&Q8UdB!yN*!m=;g43l8c=;=MYPfFY6%WcKg3bB1j=>{8O1 z7liL;7?^u0(yEHBh2JcWa>=xGY5qh=4$n_#bGZn4Pm}4Cg<6W(Fe^%T?6J*5L~CS8 zW5#Ouxv~_B+4zz#zy*Vqqha2Fv%~@;5zRKmzF$e$L@y0+%u|M!I_<*LGNvWwU}vgD z(%fefWC(L;tly8t3I<^cU~b1?*;AV21ef2QU`_i*FRi{k=_7w{~}1m#p};#_I= zf9s_jO;ouS;|e~hH6@C-dm!FSRk~L8XJSD*2695*6;>we+-N@Y&=PBz=3{-sc(}QJ z>n2K*O#gc%<}dsAzpHruSJWB($v^(S!v7#K|3OH^{~7C$`g`Bx-*rY(|E4z!@wfB; zGwb+s=HFKL_Y5d;IhlW%b^QA}qptrMoe?nW{}-K+{e7hxWx-9_z$PO!-QlYg3q{Wx zdTGuY#o6yrp*n~>@(5i=#s_4P_g7Ls*L_Ui*fiVYj{T}-Bvv;hw%!t@j2vvKp*SNL zuIi>aqJtzzC=o{%7I=<9Q;oKpLjxX_7=3U+XXcbt$WBd+)Xt;MGhd2 zxXY{(R^T?&t2eldNUZZ+>_YAxZO}#*;?QHNDYixu!i5FCv&z2dj*L-4XU(J*1bhO7|8s-0M!8p?58gt-h>j+ zrD-dV8kH~ePhb3o`dc^keai zgjn}yyQ&{~1mauiI``VS5zXKcPOH_R3_Zk~!lXY)hwReHsdT<4*}bgjOjD||V=NnZ z;4b3ywW_iT`4>al6QZw2arR35=wP9*eTLti9u>G4Nrt>?o>nq(GkZh_mWxbypaj>P zE|##XeI*H26dM=Smat2$c4xd&6|Hy$beHKToF6Yz@U~x8C1)(I6r1Vns8b+I%nzq} zRQhZ@TeYGs$Ip*Hnn#w{>~JY=s0mIeE3A-`LxHtbQK}(ZMi!BMFnJymq^?(!DRyW? z@mBOU!F(Pcqcuf(t2FSCzeymP*$t!xhX5g5jI)X$D!hb9W$DGc0w?Et90(zNvrSYF z!meApPFic;rl*@M^z#n_v4hveJQ?6HS~vy*m$T`O-VRN;(O~SuI@ELWBi#z_1&QV4 zX!{S!q?*l)U>83;VjuczlGNcZ%Tl*Us$8?nX!ena31(WBF7 zy3cPnY=~^YN%qiMXD_*@IPdYm!cEX_;4_72I9t((+T(l513q~}MHr2fD=3wa>GMtS zP}I?wEajz#Hf7U$pcrbxpp-!3gJsbK`8TPdv)%YzgnQO5RRr(8ToG+7a(rOWUGH?- zMtcUGs=k}g79TGtA+7a>X0?>w+YzdVWTuuDaMF8+yj#VkOBCJVWa?9I1P>jGl8-gc z_wfTXc$^g7p0TD9GL#tp_WSAVRfcmznHjxXjc#`PI8B1OJw+6hB(HB4^_o^7UAtwjodCu!CZV&y-RoGL+L(f)A*(6<*R79QVlJ##-n)yKJ)bj7H|k^ zJc^tKgiB_Dh!q&>3{?uPbA&w{J{zd^wtsrn*R(v3>1`Dn)Uejh0#mM!Y7CinX1TF3 z{NXp0`?O26ccm+kW*n2@ii&^EvG4f8zXA-G9lI5$Nt2jnROk{3K%49RWUU=(W#%@JH(aPjeFU4p^R;wuStfR$EU7^HwsG7lg2h(Vl>8zgN zX!m@~b(-_lG14)o(N?Dji;$FIpg3|bvR!Yy{@`dw?EWjp*@|ruPqNCd`u+8n0YuMN z(Obu-{<=I$5on=1Ud-cGWSuZx5(^owdND*YexG&9`JMrS8P|Hy5dS)O>lQs8ySVz}joJRe zySnZ6O?a?sGvh7od@LcLqVe%?*ADK|>(j=h>H;VA*Lgm?XH!3pO(nrNxb#xxt zk6;@gPX#+Fp9qC6Kl&qWD?#~{tKjSp=PX6dwe4nYY>rHSP|?%7%5A%~S0hq0SyLM; z1#I#zG{Z^M#x@bb7vXV!5YN+Q@-XDoVbHg-k?V@{og*f`9WGYlDk7klbaQ2Cz1pd7 zuKeo^dDzFiYTfHlEtg0afzq<(+esg{4`O3-A2(8biYDypDBvaWj&noUNOiRQ)3bOj&7TPKE_MB6{+zxL za-O4bpHV0MZ3X^tmvlx(^xkrtr{K;hpqiwke)`?=_MXw?nww0!T{$HDF?-2y&aTku zYQ*XqSZc^tM8tl$V6gmJ*iq1DzBAc42z`uQ3>(#X1j9bSwHJEO@F!j6k4;YPTP*5x z>>5(_>5mf{2K7_!&kfAXM;N%^aJOLuuXi-Q5|^QLtp+>UJS;pDK1$v#Ls~2Yzp5Qx}~bdU!Svwav}NN1-CdB~D4v zb&~|zmpuNM6Kk|fF`33~WU#j@(Q#xCk-XAsTP0X{=VqlQ5|tBvmu`F|aRa`oH@OL^ z5E?qB<#D9l715he+kpDeQyb~}n9(2l4kxiEx!TWEqdJSx>6GyONK{9?P6Fx8+qe}{ z;=80ZvbVw8rv2=*hu-Z;E&ynVxrW+8%4Yn8J&C3s*FcED`Y8$0c2JvZ9G?K!NqUUV zM_^X$i^+zJa)xaux8jCR!^zInRN28-?M1r~zLlLCl{kXY+0wX25c&9G^iZe~rC!~v z29@@q!9v~1me1j1l*AuuGITs~;wZH>af9^Z&)g1Buqc<7r-*#f9>JFu3GQE`6Dwmn zRyM{HB+&f5c%54v+gA3wEx-h+o-sf%LUhOxezX$r4n##{iNIK6jk2`ufAYf<=1QRI zd|mlbG@>0*P+e5fh%bcZ&D}DMp^6y!wtOp=lF;q`l`99IsYKiNNZrHoR4K45o~-MDc_IBMvfs znNk&267kQN{JeqbfgPt0RV6|xC8C7-*Y{pFON}O+54*VWsznWr9@#c4dad*ymn`z? z{py&K+D%9t!EN9>K5rkUZ-C#>u-+~q5b7VdlgP;!6T7{-`$AJgSUs7xzAXd4a!qk# ztL;5^3}SR_L~zX_ASb`Be2Ma4zEPs%wX#sXIWWf@B-S?H-IWTXgE7bkZbWpIU6I+A zfC_SjBnCaBAAfQhm3OF+>aG{v?Bn826?e!6(AlYfa8d-SaF?A*sWbvS7hM|B--@jv z>h5wRtRljn zOzblOFK%s>OxrJsWBOIQR%4z&yiD~kb2Mr0aQBv z$t`h>L^U!m`t0E-awd}p0?9|!$0tQ+z*tv(OHUIn2VPYHXVcATDPi`0ey%y7K)Kkq z=(vUDk&TF$y{Tsy`BC<2dNrwLhX&W8ocarTw*#{BEpjzNa&BPW+8=_##-xr9C8Rva z$Vinvup-j(zG{I&9cdYO5|v&@T?SF)1-r7*GLzP-_?n}w(0w3zfr>PxEWeaJf1$H} z_WSjw`7ENj%qvsJ^(H}$sDa!{i5L1#2_i3NUXOhvNSDtC5%TBaJoL3W3pRf&3CF5ss`}BZ4$s>Oyie^CjgGc-3ZL9gG>IiP@eTfvkGg4oZQvTznXc=-JRC}VM?OnQ+2LENZ=oLGzJ+DDC zFMJ$??to?1!g_iGO(_XHB6oXAH2?IiPH%=(x3N8moNJ|8kXxWnMK8HyNGL__tQq!o zsr@6O)t56jMM}%sU1kM(#-JEht=mhD>rsBY$AUgzLn~Ql)k7N8)anE>-F6Mkcd??) z*c#vM7h7`;N5BW#1COJN?1~lB8Ir08GXs+0(#XDsS$@Hu)`~1gUYAYmw^w_%C$&+6y8y55_@s6|{5pg;YW680<7`n;2^>9MxfpwI@Pm~)cN$FS1j ziGH+KK~N7C>7-KsKzBr2SIeuCpxcCsOS~k?>CCI(kuk|vm0mjv9v^DWaPf5Ws5Pt4 zHIL=LmZ_b==F{^pFQh`bkKE6_3g)`ICzL9j5#*iF^K`l<;52J^xQz znbf~&D?|K~$nQUA{qxDdOuQL8;u`&K=RD~6&Wv>I^BMjGD#8EQY(?JMz;xp*XTwRlIZVUJ7$mcBcq^)Oc(7y&C^+nGw5^xES4%3Co;x6Jke0!E zl4Pnjqz<61b4re+L$As7&`~XjCEDqeY`)uRpkgGY*FzTpIy2N+2Fl-xu?~t_+_|k+ z!RA8?kF%bs?E*>i76~W2O-S5^x+TZ~k`nNUB!@_%O>m$ZtfV@#*~dee>e7j&Dt)RM z321pFr~7Jrb<5Xs_pDy;1FE`?PELpWk*jqfa<_2!DXIZ6iFi{ET$W~Xu>UlEH>wsl z2U`nHGKe^Au{RaI*7yW~Vgcp!f@}2RT5e=FfQ8;}tk)3+{Jb575nim3MDQ3`9M(Ig z2A`bhaz$wD?aNY(Yfy~YCM0mForc7qmqd+deOO)B-b%Abi~w(Oqmd}F@7q=j@FZXW z2F+qNtw!{5U>u>D4H5P9qe2!I*bz);`X5C(CiFPsWR%sTU-SFsGK%8H5Q%qycHNI? zQJ^E=76Z>9)Uv9#KZE4R!O>`~Bb}c+#q#onRz2c5Hq!UA98N^ZW>%foD3b8p`)oU~3sy6pAar9;sD@8@!_g{hij z$@G5mTr3B$Jt$1(ltS-Ndr?Mwll3f(x~KS8yx)a8R{NL^KA-uXFOWQ~no;&6 zk}(tkAN!1mw(l#t_sm7k09^7K#=afa#T^DFVU{g0ip~2tYNK8s@-mtz{KYV%ux+P$ z1s??wvD*v%ZKYW1-i9BArXcv1oG><=Ad>?ICfO=gP@ZgP9}hmTCTk=r3R%$k6A23F_*Jz%5wuvsmDvLZ)aJfp7K zJv&j;24KVt=EI=5^4<(PUZs)A#BWO-{D{6eO$B1QZmMk>1DN(mafydfK0dc4EUjg16-C6>blXkM{g?i+SODKH%AWOe0G z1IFXVcm6oUO$!!B`=L9Qw}i_NA@uZT!6PTDz8kXV`u$Yri;FV`KI?1G;LvBEnBY*t z0YSRgWY})(t~a!lw0Cljtr$k}g8z+oLs~)*VFq2!(1AoaX(Yv#3PrAGXBvDpQDtQX zp%>;Y!bD|6Im!el(ICm|JgrtRm3J=ELPYkZB{an=8vzd=3g)3%RBaS~K|Wyl@UJFa zmo3>eQq8g|H9yOJ;&1@lWj++0Y`eI9vj31y`=~ zGt(2^j7iSl)+Z{Tq`|+6o$M?>$_uCim73>S+Nhc2$1;TWb;jHJLd|sAZZozAy4lTw zn|ZOk$PH_z{djR2$v%XNT7nh$sRWH9n|6!a$R=k@28_C{_0m#|O7KfON1>A386srv zD)^ufN=Rdb*We`XWA9bKog=_T}4T7Y5ojoUJKDFNwee+bAb#5b(oLn);zE4_Nf5?XD* zOO6jeDRR55V}GMius9O!Bq3Ew|6+lHPe7c*qG$5qHwT1D>HaU3m$6FlyoJ7J#5g}& z&^BweZ!DP(=dgt>o}~XR;aSyEm_`m--AZh$EuXiKGz_q?WYyRm{o1cN#x7TmB9U7D$F}|oA`ugrWnh=~5t>3Zzbb3%s`9S`q-cwXLLLz#d|Zih|%UHekz?8Hv<6)yfM z;iPcByT}3;4~4eYLG!v#`liRi10naHm@Pe&S&!Q3nmnBOY7!$lPK=>m2ztTUY$dn; zLp0$q*etI9%|O~4B|#VQ$8R&s*>4ZA0j7>Ww2nPzGbPT;tdaJro_+KC*&WHEq-dJ= zJnS~Q*y}>y*BCnU{kqqiKSnl~x2rGSI>PE8iblhODa6Cd?)dg95K5QkCLqL&oWnf& z!(xU191N_(SGInrH;pt>BwNg>PtqKNusfM+p(HvqsRPCWUBzr%a?63 zgJiyu{>t8%yDC{iT`>ZYDax2ZU_zNZeuCU}8kkh2?CN>_wb&&5p=AkD-pJ;O5jy8U zULdx~;;0$e+k}Y}1cQ>o+=R*8Laz?Z(ZC=*BCd$BtA;3hCwGzbp13}D`7{#ryk}q+ z>FRc=SlBSh6BiJ_L&x@-i;pV$W4vu#g7+YKNn#&#X(Izba8x0X`(WIyd<0)!>M0B! zTy{&d8_dE31XQo>tL%LrxSAkm`O?$0D!D+ zS7d^PZ_xC@Dycq9ri9p2TTN}8vgmwfSs7yNzj=@NN3|i@ZE~_zqC`fW!RmvI=eP@D+ZcsP1B;tZPA#t9Qhg0*aX}7Z~m4p#xr#sL9?Mq;f@b zbf`?wt-;DmRB-+65u`U!+&_fFhY>1xITWZ5ZSBLKNuA_0D=3uSz^t`zo>4nK%a!7B z;3TbUWtKPy9C8Ivp=LR7s~G!@A{A+Bq8@^5atsHr|zxFC!oAn z^F(cy1GV&SzstC)uU)TFIJR3ik%z`h^6UNgkimXF0HN}+00@DD~8UYC;Oie-W%^@1~nrV>bkR3=aW z5=d{fQ6nlOW;?vVNMJ)uVfCadQ=}un^C&vx+lNAalk7C@Kjh9B9D9m&;pT!IWx`V( zeGWkdyoP+dc8WU|=VO;YPZei{<9>PFy=gXZvuQQ1z#A}JH`@4J9zynVrK@G4Q`3D} zdxJ%+1phkz8&d+wNgeQY#EgEaq>cWsC^H6mF1(d)&y$WNNQ+Q%BHV`P%m^SI5<2=u zcTs>`Kp_3DnzsZ*^+ynZ`?B4r5HU8VM6)Sb8MU_e+fm4poOLICknpm`HrW<5vY$YuBdLhCJ%&|x9;!C;ex zz!_rN_gR?qYy>ul8h$5I6VHS`r*UXg?wT_d5i_p4$veFV*U(~?lMCe8HN zi#;Sd%NXaj?7nL>ghyqu8(y3|>A9H(UHam_sQVHn5WlXM!rC^$Yq%ZHp}t32Co6m8 zqp2I~x~9WT;HSrc%cOB?q-$~K4&n}csZ`|e<*s2nEx*^@kOl?{J7lLs46uPn?&CU* ziE9+8HoUegTwWrdg^)#WD`3iorh_xT*+D`;+BGJ=Of^O4u48sppxrh zX8X6uiulOnIW>}8ut5e1zjSSpU^I{nnI^VU!>I}-XDZ+*hyW2p$JyGDbL5Z^Y(tT| z;36_|ju;XG0*=u5*aA8bmq|1cSO*w{E_*`la65@|)b^tFrmg43<^|Ft+YJ*OQ;fG54NPO?K)^dx*D4?j>4l~&kl_!KT3F!?k% zJSpgQ=7D|@01%IFdoyWCX%^;exql?hi2n(`4+kH3nR8np#NVmQ!eAZD5M zHm?efRQrNwRbE-d6mN88W_m@YC=X=oit;uoMAOb^CLub;&6Ao(BR{3JQhfG#6pWC) zWGY3P4s9bkghO~uchv_`>T2xHri^$@`l9j}zNpJ4rVnS-KwA~h*~um0 z@#<%jUL@9UL0%;jq#)tPJSLS2W&ueVRkK_2HqAu+JZ!%vcgfhQ#ySqGQFB=q?WEVG z01x;aFh_AGMYzShvGsA87;F%=g&M-oo!Aq5UF`zTH*3x32s+VBo>Q zQz||coLk`{oW?a6-7H`9sA}`I0+gD|{(`Cgv;TMaOG)EzUwQ;tj^?VTC|8eP9X?w; zRXVX>5LZ}I>qk2it9vWF51dn~HtH^hRlL(4$JVxb67D+JJXubUMeR>HVr_iC*(6%R ze>Pqrd{OTR08-r4k2=|oIa!GQ%)vLe9|EnT$$7sxUU=Tgnra=1)c!>d9QXU=%6Y}a zeWhRhNca;6ov^u7^;^F~qNd4MpPeGm75Y}3MK&2{@ggLMWs}Ajyri^VJSIiG2?n*l zQb{}{9iA-w^=5^B%srfcm?a@{wcRR$PkkfQKG5y)a&87W9McriE`dhN4JXxho-0ws zPh3_{WsWyBe3G=rzp3gnlxcq>5AIPG2@Ch=Ei|fT;a?~C2ipnE^W*z|iNw>aig^kH zhutMUP@{!7 z$VC)(kYUQbe{1x5fCwP!%{NlA^x|W#!O&C%l12!dz^3?M%Mrs{jJ3u0UxAac=T)em zmRLVeC-R6%vM^qo!1#0<)toG+>rkO(o43W9`J8_TLQpiz zmBB0)ybDZj=>L4HcQ1#FvQm*hIOSPD{e5e#ec@`?Lmtu^HkOPE>`29Efy={Pm4sVp zcaGnJsP>1?+{i*BORZj)3_ZBT9|j(lSmGh?w3&MKgr6D|bz60{i{t!PEU^nyUc4^| zKP2n!AbefSS$mTy<2k}(Zt3RCID;i|V77Cvbi?LPFy6Y}SL}#QIl-BV(vJpsq?{qf z_obnbZUi%+$v~O{xaCT@Rt@DqW;XJx+GQeJY@c*R-F2tNH*FlAIp9$W>lrv)fk{ z8Gp*pyj#UyEbn&}wwEFe#fMQ<4{26Rc&cY(f(u{S0(b`U=deRTrJ1L9Cmd}vml9`+ zs`@E#ZMB`QU<`uu$G*vuEjjfKTeD?}WiitQ!W%ze3ixOuBa%W|)iM3xurTmtCS zaKF~i^W76b45;&MxHZ+RsN;8YF>XxQwMU0uhTD|VYhEKq{y8q>A6dB%hIa8QMH)x< z44#*K%X$hYcBq|h>z_G@z0dCW81QEZH%Z6rayLWqE2(1^yWvfhhI<-15|c7E}Q&HloxR7s!Zh8JsEXgbZp z9S`frJJ9qYcbywvVQ_0psOCGsfT0dU#FYYYAf7Ia&zjxv6>(&3vh8b2j0_udH zJrDRvr)xtEy_!F}Q4UJ8}PvpS#Qa@$h)MGq$e`D2NZQz`mQ`iaV{0A0*U)q?$NF0!!cx7tEq z_|NzlHlN=i$rgsIM`&XWwVb*GH+CTAAFFjfi7BmrOZJiSb{86-dF2jP}`aB=PZ`>&AOpdpHu5o5N#(1Mmszn;taZVlQMklC}Rd#hQ&_e2)x`&bGd z9F0u0jRH;{Mp#V<>2?`h9`fZGd?YmUPq}e%W)oUY_**tfZGptl$IKT<%ZAb(5(g?g7@23aMAc!Z@`{ zZU4!;nW%SO1~wm1QrcSeWxc@p_^%LUKgaqR{HGp~q2CR9+0-^xS!u;mT70xF8O9|t zf_;r^n+n+uQx36GU@jZKW1DEzph?H9X+3x;p8(Y$u+46af}aLo`xLaX5lV94S#pbh zIxG+3H;|f}z4^sd^}u&3#DSav0G@c>Q}00XaE@XIK!mNMfmGV3?oZvsYbjAh7@69G zhW4=fT4Y*1zbFhpQbfHI{lq;zE$HVw)*B5{`m|OPxBOURmc1_{bQtP9`6f9Z;k}u&gqi%J$&{abCcwQ9bh`~x9vemT#&up zwU^}&Ei_DOQ=hZqu%L#iMfIO0J#vSx^5B{}I)^;O&che!uDl4F#}pNCUUzo2v9ADD z-D!0?NN$f74}`}|xb^|$$WA$05lrWIyxrz6ymNtgw`K?Bs?&8_^SLu=@{C+tgJegp zG*ytMV>iM`3c2yLGH0U%6cqEGwQHtOhd~*r*^pK!w`+2FO)kb`6TsJhzmLSiHzeh=gZ!?^^6Qy9j7cwbu5HD!gT^|Q>=;pF-l~P`V zXotOrBoA;O>5nn%C1J299(ll-R$5lkkIXGc8Sf)Jq>QsvZPt8F_<%G5B-_^gx^9CG zd+WlUBzq^>w7)H`zIkLERc5^uIwz818As%SJ6c}u&z5luM`+j>3s3n9{sr(!9Fi7u zDk#(I(C3Hg0cVku9cjy@pOsREeGCAqB87z;EEHyo6jCUd&dX-{#zaOv(j4%K4dKZ1 z)F4MKq@SHf91kO%mFa%d%8w%yOlL z!{)HDS2EWg$1Y!liJ{;`SbR@VT2=h8llJPyp@8A>60RrNW>eI!of=UCsl5)G42O%8 z35|Pdiym#!xzp`^OLe;R01YS-xj1#L;wzP$E(`^-T7VZ_J|;=T36k9D0q)M)l z(EIun;v<73f_ci%p5_xB1R87sl_!}FH_n83QZ)ATE;|hp8z%b+cGZdcQAX1G;W-;W zmuA_UM!Y*cxE<@FqxkQ9iLH~IaljOg#>G-EiSpGBTmH)ZI``?L^{^`P7>hC(A zzZc$8f3;@$FUP+l{#LmE+rsXij8=oAC=PUsZaaRe8{hVSFkWVgL2Zozmz*2d986eFVI00gB{ zjlkEu(Y4z;C05DvW5N&)zP(Z6@3Og+*ktipkS%e;Fv(4e-hl$Bk2Kf#ZPnr#Fz!QW z85CCrrV(jdQvIhoh!!L45x{^+jIqMYmN0JMfhuaaVmU*(Vp&bG6)t$cTl`*8RV_YU zs0~qaMo6QJFccZ{^GKlUJJsFf=|6`jG1VV(-{p)YWmV?|kY+g*ry!bb;ow8Nclp4I zD@uoCcL17MMRarP8Is5-LJsM+JS2CUa>}7Lc{&+Yo04g2w4g22WmlVeA!M;;C}!ae zOQFZw!^V!A1DGcgKZYyC!WYpJ0FLYkg*X%Aj$xn*)~8$D*2jZc*~L-l8jv_sPY*yH zVKrCL+8>F&Emn$$BHz9%HGR``H{e6+jp*aP3hS~N^G6sUpCh*G~WU4-qM2#(u^6*j8o3t|)B0i4M_awboJ6F(~ zG^*bKgciU%mv?^qHNcvbfn4&XZGN}|Dl*?_`$Hw$Uo6)UsTgUQr$}r8MkVh?isNLc ztd|3|f>4ITd;m|ja0Qj)lU^T-GI+eIO9tF2Db+K(rzo(Y#urG%xlzwQQFTRO- z-Q7n~>v$sBRm4B;*`R2m-$a<36VL!bO?~>p4r1vQ7x8cz%90xb?d4!NKu^Y9)K6t( zNbYQ1{gHB&N>%<{Z7!cRxzWp(B3G*f>N=0px!13{;O1X72zpkz!(uKIExT$M+vbu0 znaYnVu+%pBdi=dy#nZt3XOL&R@0XMJqXh0P$e!6!|E6Ct(bK=xZTDc;Cxb?HP`cto zUNEz|lepr|qxdP7?0Kxoz4jJ=FdE9H+Ma)Nc>ap*a2T}!Ry9dzy|4QaAVr?bGCgxl z&Hvb*9BX9!4l8Cs%)LVrtDV?AaxZ+8y|y!8E8|vAUGUx+w3OzIN)0Na+ zcFUM5inhRiT?kDJIedF5oE2)~kbjs_r~bJek8Q}6UkE!vmqq*dSdu*Cx48EHVrC;L((v((`p+LYWu$==IPt88kG9v09zSaSHoQqtFk zIP8L&^AFys@XZN{i$i1bUt$4c*(6eLy8^k8W)G;^5kRPk*?WcicX{6J3@D#oqjjCq z70XLUsl}T+*hxHT#1_wjLK`?~+thha*7_+#QA3F&_K3&Ys_MdJ+9WdC32ZmHn!~V0 z%n{EgU{G>@yC=lyhNgkB-Ofy;%PflZ0!@1veYHUeVnVzR2MxTV#oh%*VT z#%f%C44gJ|uY0t)Uvysu{RvITb4Yo`=D&{(7VsmGM9ft@i_voB30&2@zS!?fXGGoI zK7rYG*Jm56GIPx?5g;|IH8xfkO!s7-BdtE*;;)FLKuvTo|8!5je3h9kq@_&-wxQut zhS3MB0!IcRuB`eIL#?pSR8xik@hpj(nY#p*nB=;E{WPCdH|7<}nrt%=mI_6-${ zJ(0&XJ&J)@LHVwSelfgG95p7C*gY?mjMZV+*xb0;Sn=ydG2Sw}K`s!*zwXkF9?5*0 zXACRKmgie4@W?C#9!MwTdKNj)s!eo;`%~zdqvfl&P?)mjH~ry1Y~8gWWlmOB*Nz zL~BnYZh=R_G7)NT;u+1Il27y8CUnYV4}S4ZSLMfoSxBRe=nsBg3kNXV6Li9KzdImJ z29~k(XC#F)C_uCP<(jpn3)s}Mw!>$dSw1{ixcAhr&$a#F!QpV_#rr!o*2Klc1xwdM z4e=C-F17nkvN1Vz3F>-cq#;T#T=LKSa_|Q`8G_d+$ePe)|lq4 z)Lud4b|!#jQF&MT5XL4=)*(dc`z_0gRHYj!yiqP?Sjn>di(dC&RmX2@@W;1WHZoHU zH>2j9=n(I1H>D4byr1qvEkz*W-}a9q#4$9Jvxb>C{zf0d1oV3->n`GnO1WF%uvWO& z$Jx&1CGM3z1K|*J8;vp}@t3JHNy2{ez(K1WHsQ0})%S~guQpq&k(R-gTsXIu%fN$- zpmUj*R?@q|?^$w3$2lswnwfrdJ@YayAg(f+y{R=@$z9w5<72_p+bx%re%ekg8b8nOul(P^Ou1Z+kLoX>T~j} z-4cC@tr1rbqTjk?J*uikn4qf+C>JtDkOQkKI3jfmrrPJ0SzRnjZMN!!d8KcbRjT?S zI*)odOb^qTxWAmIw>)(~2~PBL7cjXes+&S#^I5e$_=;@tF$c@rXndmTE-VfZS`49n z55QM@RBSvJW=FFREpk}{0CaBs%$W&NbEC;U{i4CC7Uk&B&~42oa!!9|Dbs$N=2ABk zN1vv0FAH}c3wMVa_>^TF_@QH&Jzw%2stor{A`hM}1ZpVxa6qa|w9!_YY$<~vcZbQ!tccp+M)7pJQBK1Yt_ z%y+yA9vU{*5#BA!?23}Hoo}Zy$0y{Q6>FUFUgTg?Ihicz6COb)z{uL zNp5Sqvcx?I{9ft@K37e-eyrOVrFc&f)6N34v@39bles@)QP`GTqo8IO`dqXn`5;$w(4)z*j-@*eNZ zsn3v-EYY8XB6qeXk|HDQm|s_m9z$OUEncOrP{4c`IpD>9&oIYP9Z)4P4?I4W6wD!` z8ky@#(r1wP9@Z_$*dwLa;7`^LNLq7YLXPR2wX2OvFbThi-+*HHBYTvX;)q8?#C47X z=AfV+=Aq&lq0g`=AS~X2rBc&AXQ$j1(O%av?ta$RCJ;}bKg_OM*Qem{TND-(q z5b^T$p~)cvz~qA#-@i60hK#MkJ2W|QsQY!txo@;czrLh?p5t1_ZdkqJm*eT>EQbn4 zdY-42xOBHmZC5TGW&54fiWl&d9x|cP3P`oG>0BQRwSXwfNaK=Lx2G#qZGMkBW378e zMb~7N>7+TTkMel~@ipDOKw$vg?v2OmZgw183Now{jQ0``eudhNphU||Icg*mj2l}V z2a_UonOT>UYcqaLR5Ij=zmYv$9!1@A@I@*IAB8gOljH-CsPBjMOco|&Mo=A}wHYZ3 z5AjXx_=(8kFOklwJ2bnUDYSl{J$mXPW|Vol{K+i5*)r9PRD4nzHtlR^J7*hvTcNT* z+sb-0D@_u=aDqt;c|2!xWJQi5&(yg%ciCjJ_%p{nbp{59%hW=72>@(KuJHN?@<}72 zC=9fTlR+YWebXeS|D`|?%xY=;x|Tw{o|mM9%QxB{DtX?PkI|}oHg+73m3aGY7+kdT zuNg_J)-*FbopYq6O1=|y8b;d}JC;kYDW>b19iA{1gFS0NbfY(b7tI@@r)!Ao4>Skuv!xJ zbW#%6xW=2oEa^w5GBV7&bC7Z2!*!HkF7s7t*8~|G0BjUxUO=&?pGX6p`UG-KJRI^> z$@D>D-{fRMzf#4!BUN4s=0mRnH}Q#?1RBO0S_EsShK%HGN?I9ym&tWC4R1QbTjjul z!bIA~0iN2X6Kdo#d1{g{eXYVcvti|O7!0f_={_3AxS47FMgj7;TaGC~koKFTaF!qw zY`+wo%&cWAP!yKcrSmr-TJiam8j<5Rl!KjVK>}@U#UHUSvl`NB{yEq7N z{n=1dd}tZdtEdcrZHY0pw*1tp6V+JC@R7u_>|zqiLNU%lT{lwG0vbQa`DzkQ+2J#@ zaTEj=FE_+w^Rk5BfLx;D%3@Gv*hW%T-yip#g`Sj-E5kRW^x}dLz-^D$eqX;mE!Xu; zgw8lSFtw#>* zO=C!J`)jiTqJ}=A3qSa%qaWv%G(<|P#A`OxbbIN4QLJL*{NYNBWKC0_?h$ro)T+-Ez{<+#6VluXwyW>eX=?9jHCBy1pZ{oI6 zC!jv>>KM31C-_A~E1gK5a}1a!b>5p9bVKupl$7y)y-|tvp??2c((GCWfZT&Fc1ppf zN)!7X2TTe#N}SRBXv~Md!#eH}VAmNSvtu}Ajiq(JWhxlUZf~XyVK?%WEcb1*nAvN{ zclT)-+?v3N%j-`yG_)M^)EVwOupB5Ebbe$*+G#pC9j!;%hCL=aTbQX!qbJ*ZR+G~HX7MS6>mhrzO1Zi?A@13VM&+7E5Jqn|80b&; zqa|9#+4`5EfCduaqwD>jZ zy^ePKWqD8MAy#v$b4lKXmHXI=oTp!DVKOUPrNtC4nVCCwD`J(q@8nyWH%Ts@u5zql z$25qCYFKJ$wk)Mr^@dfvaw^h%UV7e=?`0w1#%++jU6mTCqAsG&5VdlNO7$!1OgLh-1xN}cWW1yr&^Sm=;0C_r>V=H*Ky>`>B#|Hm z@s3XxNpfuh1q7##XlEmRB2BWmMEBm2Rf* z63G~%n?d-*34pkT!*Ugi_wu)nKAmhNmmTYkqF*|>Gu7P;ARyK3?eCdS9 zX?Dl5o_f-4A6{eXy9dUH-r=&+)cEO%JQD0Z*pK=KJkCMZ-vy{~`{Ue1>g~y+(V{M) zjy5Cyv`3!$HbNVh1`XhC2jn&#DF^Mu>D~u0c<8g6B^W>7P7W%nBBf22(A(IA#^|n4 z)>CgK&ZCZ>dTt1d$yJU4EYD6~poB^kS zdR;x#_ycY~dwz#Qe&F^k)py)RW~--+EfLETzU-q(wXzs(zM23>NQh_|WKU@KCaIA} z&Am6(2t^<6{z}aQoV6s6IGH|KQ2+6){`?HU=+aYRpr-W!VwZGxXkOb)kO*g29dtkA zr_5MX?Y5HefS|(0^PA&NgFO$A&;xv4-+VWf)XBp5+=;}?K~gZ$sEC;fU|tKP^%Sw# zHR^KVD=LoPd3{ZUJ`=St2|ov&aFCN_S3l<=`9@C54@$3ulL8f7r=__rrw6S}DfPJ> zQbcH^)@_n5mT1^c;Kg?zOxN@zuD+fIOoWbLsTGH#4bxit1vh02sjZP;iTy_0d{h~RXsn4 z#{i*ftV8|G%?=g=1ik5V%`2OQIcz}u&sMQ#EWo+Mp1pUlF>p;B)6h4WL&h{r$TpPV zX%fh363ujsNh^EA?8jS`6{k(x!eU~*-~3F=uulmga09k`Bg?cgxoqdY@WP-1jEdvFq|S8G9PXL!Opm~zS8h~)_6Fn~dKK2oCR!ptk4 z!A?MNAA1POBj7+4%IlGAoAqfM@6nhS+z!l!&|jz>caFvta}hb9+arUd%Z@v1#w8QZRRE38Ynq_v+s$iG&!rYi{%NVg?^COse-s% z%z|#s+Q>TCjQv33P~0fpfaJj)@>^`ZePW{$;xx^YAa<=jsT#UU!9h7}#6a9YHN-6l zW-=lL>wAf?P|DGcC6#kd%ZM+-3&)9SQr*1Vc;}V|-X_}FHd7AB2sa(N_^!OuLfx)3 z4Fj~=Q_TCi2>P;Wym9GZYZy9t$o!iy-a#4CkqM95q*d`)( zrk3A+`^s3S48g(H6~lLiWQi-17(&JOYl6?wd_t_QjzIXNw^j+fp~qu^61Pd`VRr5f z7wxM|Y$DxpeS7c=^Sj{&D37!o`hXkvRnTKWbTS4$evswH-&XZy>4xS$c!cSigbKQ0 zHE)UyidYn#rh0nqg$lUooyl*5t#Nb|PEhoou7v3oI z+uSn5j6Zy$Y4AX|3cZ)*9UP!`i7Vmp=Kbk9-XlLSHeGJ^#7Kk`t+}C}EI8A;F%dRR zCP&Rz{G1Rk1!qu;I|G?v#|Oi=+zcrhp85wu8qJh!+8(xK zk`xyhbMnX^1If>Ss1`TeYGx7C@E|jW-B=Qu#4~Hc**_HYKYd2Z^PpUZXk@%#f9v@!xQS{BH%8JZN09{**B&}cOUMyvS61#B z18;c^ACQI7{x+n`r?7Im6KLlx7b=og*3P?iQLGt3_vwc4i=alth79-eg~#M|O@$u$ zjPfk%q>yAaL3E`?ZtUEqp2PaAeERuURr}x)@?c?ns%aDVnt#t=$hcDDfq*K1-c>j` zlta~cx0VFN9b@G(bAoCHmTL^8J}(aXUJRkj@1WB^#J~PAn;*e0CiPdMx(G^=UF@$$oFXVGcJaT0M za`^w;(BB{CuLv6I3KhEo;fw?A0)l-U*+u@C6}y_y zxAnXlp%7P>C|5uK05um|KlUq2Pihfe+rN#(uDn30Ma*3t0$l!xf{~Pvy~=D66=j!@ zy#o0D-Nm1y|MQEKs02IpfB1;RRfx=gocfow|D2b++QA=zF{-xyj(feaVnjV~_P9PfpCa6pvLs7NY_AG7 zg5VjYo_wN8Yojc}m9@_6pBs^Ak(GoY1zG;Vte_bOUXPp_@q;Fz>}_#4H~uSZ5510S z^O9ld-{^(c+-np|9o*!4cu@!vir3#N)jEMkXds?JFqwhe9x(A4l)di|F3($*$y+UH zU*Rwa$|hp!tJ0Yv24$+G=huv|61xG$aDj@@3E8bG0J4p#W{d%EqBe%W&D>3ysivZq z?z1D!kmM;ftwZ+EMV!ggVJ5;9ZzGj?$Av6iZ}m`{DOrp&e;;Qg4YjFIQz78i7obK! zF5w}({h~ax-nX#si3`LTV?UQ}+?{$`=*6pF$);b)&O1cJhrR-Z_bgrmC%Vp{7?ob; zpRr)Mtj${x+R0!jb?HLOe_)lGEytz^dLz1UW5f;%D(_DbRT(A0%0zPpY)VyMw?<*o=vJiF5~ z4p6a>;y5*z?wmfg8zfCX%cQT`~=OaaW>5oH(HPFaXJ5@yWxzGfc{)dK=ZChq=~gA<7Pl~io#U_ z^QtgkWd2xLy=EvW{B^hceq_Bj4}tkrU4IFQ%CwCWYv-ryugW#29H9Mm)mQEu7~7t_ zPmKpIAMoa%B-nU5(&eRjsH1hDr^A+G-VFc-R1>*Pns_Pg6@l%C^T;)LR)Xb3*))}o zc^>(&u%DZ=+_*Gt&@>DYj;r83rvfp$jM^{~i)w#Jt_wPpP zvPqvSns7{?ni|LwU)hW7dX4z$lF3X`}SQin? zKutU(&H)epRY^C$6LI2NiS z_GxUi=EjjDk%^g9b$yyh%*dwAy1Wxa^SgLi@@~FtpvOmx{pu&F6VW!d)WSXV^1O?C zEAn7}!cYd|yvr!l%WY>p<#uViQ))wjA^)M4Yq(zg&1=N-9_ul^twCMOlkBcm*h&s| z3ZIF!EX`fXu_hq9B#LZ%`W&Lv! zj>{oK@@aGDLiC;4==2MDa;uQ%@xFR@PTwdbC9=W$Dp^xQy1mH)hB$jZ8L+7X?xcDu zv+>!0?*+mMNz_tVnR^e+LQKmimYxg9J=5MXG1ac#LFJ$Qusn#eOrtS!qwnjZj?BCj z8^-`?1S#W}IDI9ja;OkEkA&+p&xN=@E0If%tiTUiz!k55)Y^ENMy7}QqMU9wjOY?P z?1>;MbJDZZYY;nCLf0FzoNJB?^$ud}QY6dMUpc zJMK#y8}In`b9fIBRcf>yBc(xBCS676LgkhQ*@?e-m(*Izsffm8ty_O-_a>MlxESon zNsD#I>#Gb~2uOa^=stP;pcXs_z{j&T_MQ74!=3D3@V?;}c>c&`Y%b=cjDG1rf6O6x z2D`5`)?9yeOZ}rFW%%B&o~sSaleSR@eo@yb$&JY zgflhEG$Jm&Q|S6>EZXv;7tz5QX;SP>-QEy#!EhqsP%>Zli|4?v>zUp5q6XL57V2U? zhRd>#_33(K#gC(s5o4*vlZx}5PY~B)MJs8dT(l^k8hvfd(1=F7-5pv~mR)@zYi3%J zSi;2o%hJbVz7b(N9Q^c&BVBOT3CdK;(mKY$W1dhSYg>u2-ftYtikalB)}~Rd7GXSu zCC9`fAii9}+(k&co>mT!X-f^w%!ALl9`ZVcD+1!I#x9wG^PX#abFw*zoDm zOn!iNV~zu(t#v$_b3s@#sqKaB7NjWM&a0&1RZ{K9&>nOw+CMU<^;y{XQm?GD?&Py| za~cx_wUX9}EB_Tm!E@L10XzSbm^_n_fm-lu9!rS{E{-iXy19Ly+*6Y3F4?qN;fasi zOl>#kOZh3ptk}VQ^()*Ii92^~vr_3L*?R>QLS56$*Dz4x$B_<8b8FE$!#T;GM=MNu zZvOqB@6Boo>AAKJpSluEZNl6-R>J%hrE;QEoeHSm5&KF_koSm9w?35Tefc2=t(n9w z8U65@8-lHF{!D4b^|3L|4S%a1R*;CG-WY2Yf4=L_7kgC5nqFpbBj1{M+V50B#i4XUmTyTo6QSXXE2|1qZSpHYVY;dqUw*P*ETJ_&ZWEZWanW-IU?TY9?LX7$t zI@fQoRv1SHh=*8n4sF7@qz>TFY<7}hO$4@1x8d#vu!8%^9=Y_{!J3y6V^y`}zI!oI z1IVT|yU+&El$rtK!NC6Z=hW>Fp^$5{MzZoM`E5|e$wjm{Vm;&Hu;pXo z--NN!kv+(y%8EaQu|$|FYk9lGB@U2@U=(*G&W5!&l?wCh59O*@dz#xGR5sEB@txHX&;RF9gBvz!n%_VZ$lkt6!LwQIpRsRu9`-s6<(D^I(ISj*V#FP`0a7k6q z+{?29Muu9hs;8jJ^?0}VIF4%DTiivx#TXg*$OA^1>1GD$R0A4^VY$PpLwLK7%&Jtf zMA9o(puy0h)HM-k*_Eb~>LY)Oh(eiotT>)GRsG5&?G1NPgj-={7G(Y~@G&Za#_-nE^Ncag_zOJ_NauD1^R)%=(XEBN#iyWobANJ7+g&Ll-yA8_g z>5cNQBuR8Jkqe}By?JM>SI(!IoaM`=F-ll5&`LjN3w(d=aqEwvs)Iv!vC-G2w}2_z z3^9{gBPGge!`pdviMHB@Qk$P>yhc(PPtc;tXLC~{n5u#yW|2)vnp0raYzM>pC5hFM z9Un#5eywc#nDqO-BiaX;8qJl$#+PVUDY>NTkS4G=+hCc)C0PZ+A?TqI)99q0T>tH& z>{(VDq-pF-docWhGVx2oXqg z-r3ukk}wsDF>L40WcMjA4no2A7U-LAJ1y9~eRRK{f#D!cdLbnP08cz1$P=jEkiR^s zd}G1#d3Nh33-H^Z?VXG4P0Kl-l$!V(7VivV2hatN#Y9BR!-F#qPj^=5KC0v!SBY5~ zAy4E|M+qa-F9z0iw6n&l_nekdgj3*HO;L&5xw4`DSW?*3_inW;Z8y{O8|a?0N&ibL zKz}1{_shaU$&z(VZj;i$+%F>s(nsFuwKp!yZgX!lSe=4Z1+tvU0W;~}|v|E-*|IZ(c z(cCQb{Bt7vPjhd7R2=o(s`1(eW516XrnYIt;4JPyQ&cu;7%;2?8R3<%ic~KnL z|CD2paPv-NMPd@aknW9(koz0lCP~W0VuP{hJ9!cs5eOl1je0{4G|~_(w)O*FEV#Sa zp@{PNWu5&U5^Q*yt#F8LjYbuIA$ARvS4UA6#*^eEMP}%g$(eSZSk0~_H>miv%03f^ zGeaKvsbZ(_9Ya%x@9f$HYO^=9)FX`8j4^!bJJ;0~ifC@;X^I%R8Z+)y3E)JX9>*zu z73y+1;fZMujp!#Rtt~S9b_H zjw9E#CES`agMC$mG)K5bsK!7y;`f^jZa2of11f$4f+#F?;%Q)%~a#-hP)A(@HB1!p7? z4v_9Z+cKvSkK&<#D=Ozi{si`>o&#F*rlBQp?fs4R@2Jg0B6~y8k;V>DKZroVR6xY# z3x#aV%lOMx|Do3Q5k4mMk#7&4QkWuh9GXp%eXOanQ)zlt6{`0~6Z3>KN=zxUjUf&Q zbrF8~I&$lcst#o`qh=N+9=dNTTD}g1?|ip3hK6(!b`{|$2#QhR(J|czf~)QpHUZ*a z>LP3F_{Bn^Qr?@udD@OEa@W~$dqb`114%``X3sQYA+Spe4!`DKbv$JntLba>=QmR* z`9g)Aerb?7b5jn^MX4w8w#D=!gQGlBf^v2mJ-dB0fvlo88P1>2g zOgv#`;<^T91xmXChWe$-arWCulSRnRR+rqo?@r+n!~83aG(U8MgkF1GG>QBOW*-aW zd9+xoRr5$z&+Mi|aKy5?O=7sjs-$XHP;dt=U$h5I^pJRs4TXJEU)-wX*1f^v+Cy{c-!LQ@! zV@20nR7%C;w@3YihjPPsN_)4>@T=FtKn9yY0#-)|GC6)|hM@r_v_h(st>n=mT z&t!%AN3)QH@4~!}-Z!4L;+{M?{8ZGZl1u8W2&r4A$nSS4oFiJzpOR?l z9m^Az8qi(23;^nf*f}nb@O3+8F$Sy1#s_qnS$UatP)=RUv)JF^A2g9ZkuN(EVxpZnKNel9`;j(>5jQ4@ z2)eF1X?-{l_Ky07$Oq zk67S#n?uT3WTab;sTU-eH9ya>Vxjj|Ps6sH;Q&9*3O0Eu{k5kLMX!ujZUCx#iVoe76w2d(f)4vmMdx?Z_TL;v<9`cyc@iDG@V=O?lu-Q0 ziKsVvc4=sCpld00U7`S+&m;sb!2Lk|U51@yTo zlX!JpqU2&(OHV|z;nwY2RU|;4>8fQ7Pfn4O_EJwlK;=EW=UH~_nBd605}z*3Ydbq0 zQA(TKxg$2yXJYpfOCOIz*%_O2Kd~XV{lVy{n@UYaP96C<1;OC#5nYKxe=S0~a58_gJ_q zIRQUINdh)>TT2=f?Te*sNE&d|tRpFOFIz{;ksN1U+1|X_M@aD;p zLO1r&erV|CAPd>p?~cu$WVJVldZrsA(8+$>j_&VITx;2NJ0ZBCl$~xVevBBchx@5f zd)mgUx_8>iM#42+x+fddRPUvnHe!ef02IQKGQxUo>|?6DS^aWqbtaQRY; zJ)QcO|-|U4=AGY!WnalPW|jw|9Cz2yU1fw~li@pdh~q z$*h*&?3LJ+$f*d65c3mJYkt3X(+kjNIG|27K+j`$p~SluYLdJwfq7A1pV|n4m=t5D zG1{0Rk18S?@%KtyTQe}QLeKIObv-p#h@_xX-5Ofce{aAJH(h%SZVuUY1!!+|A@nFD zHw#lYE7bfW{J4Sb5u>_$zwc2^>e}yEQ79DaM+?r<5U$sUV}`}2U1sR6%Zlo&7|hEW z7wTNwXiFNF`CrVvXE>aFqwcK^#^^)zdyGD#cY-iR8-vknMDIi=NTLo#?=3|)7`;R! zMDLx5h=}Mx5G_*fU&1_KqOG zxmM1;8oyXT-iX%qRsM}FKRt2#+mX*-$31@o#{wY&9HonKA?ArN2au{PGpZ!Z z8k`0n+)$x(mBHs}$`o}w*Li`#gr#V8rH}T_)b1MAxgG7U93V|{rS+0lGbrwEZp;7J z+D!pC2@xcc1RkXTX2YxjixT0{Y!E)=9GB1cFHJ)@LgA?Fuvv{ELQKRD>zLp77 zMmYh3Z3s))^t@9`8^tJtByJMqGak0>@@Gg9?dOy}MxGc51nI?ExrRrjX`lrrsRIOQ{st zeuqQW5Sa>fT-TY%LL2szgaNM`@pU72i20Uife{x>8dWYbDXtIbGn#4pD394sxs;zj z$#xSZrz;zjnF*}$JxNYl_P8-1wt7G`%d~Y`F`5#f&vz|rFJNz-A_?Mrwr>28%9NH5 z&L!uMoR32+p$0GB#zvIAZOD9GNJB6l^(J&n)SWzE0wTY;+Mp)MDpJK{dduii$T-~L zt@>GgwrA_EJ=Wu&ZP~En{P~-hQV&3Jw>gXp|lA%h3&gGwt78Ls%WO||** z{zh(I)tgs8`I9kv%o%Ke6#CW8xigJNgy*F`Wu+oUa`!Wp45febPg)|+cCZ2Ktz(AHqK(k<^A$3b9xz^b9(fT_XnNmi2O zWeU$Ds_mP3I>mZHjC2XE#A1@=b>yaOM(X5=5+%^Cnv@q?{@zH!E8YR7rzKK>ZcBei z78ER->beOFrb=MXmMouk)rn|#h_){W1|!Ch{g!Xm!~C)xG${VpXBaYJ>|^H{6dq?!du8|kWCt?$sm+dNGedS zAe5R#m0G$H3a)e%^U`!N&^qVhn0Y}DsARMmBX4IgcaGK*nm4WVGKNC7*I>E{hIq$LUj z`QW8`ZZw!setbw?vtu;_aWu!|{0tT_coXq$c78bIPBEG z4B;NELNuCO!%IaW3DKpu2}3TLCy`K;hS z)#dSCcNWUhX#-ns$3%7BfPZ>pP40XX96V=lgNPxVhk-4sM70fa9|%R^0&Ywwy<)5^ zjQ--=hQ;idq-Wkn3aY+jE<6^G9eUCslefUU$YAYL_$JB(*>kIvEYN|vtZX2^FjLJW@3Xii+jG9~b|0H2M%XlL9C-c|mi^>!=QV4YR_ANK z)Hl68yaw7o*zz`!%#p&IH+~F8TP3RQJZV4r2GslQ2geYaM~l8UMv#n9%O*bI_!WQm z`%`6!V4PFst_e`8!lUx z-p(fjE9Attn_eAGDd#_tf_E-Zf*<+N_#J>%n%~;;w-o}bN|gw4KW|PAc|@QYvr0Ug zZ`KIw47UaEij2;wgY~Wgq6d)y%OM}RpS>Jz(p>i+tyUS|9H`O=)Kcat2QJq&lz4To zL`zS(<{*Pf8^8<_Fp7ri4;8G!mThNR#jfpa$Y!h8r z_!^DTr7^YSxNP2JuIE4D7WiOWZhyyYHaPSa z@s&#D8a>AN?+o7@Xg){(tZ4a7$$g{0dxPEK!A_;W&Zpd@53H_vb;jcDeBWQ2P=@7D zVNI(FUvzV!TpFpKxP88gD7% zuhB%^7RG{4KCbZ?VJ1+W23w3+)9xx1jt#WwYiC~$l_`IH68|iJHhnZLfvCFzB;coa1zu?E1i-QO z-pEPKN$k zOT+l2>nFuZ+9>Uxzc4M0v`L_=TeGQ)fJZBw)j;)Apn6?|BinwTKWEzb3ru^h^;6PZvpI`16X#I zNA<=j`%8dc2p^Sb?G0(|sJl1N)}@6dclxJlA?hZ5U2GfpV7_t_Cb@zsDTqfMdYVS>?+!`sF}<47H`dFZw$;glJt{37XZV=umN`A*5{3xZt0F}6^D6JCpvURiJ5)mEndt4hF zwghjCfb6URFv#2%FQs|A%+GcwhA}4Ou>RU<%Q!!eZS|WioHJyHi(97m<5uzo$;9KP z_-G7n9v>MxOXZpL=T$)Rn|rh!%M3J~JEXW#r@WA<{lZa9k)%E|L&(WyR!p2Ib4tsf zngH{ZsOcg6!?dgLHleAMV}RZ&O4Rjz1#AY(!HmX^J5@ZdUI_V{Zk1nIMGffSIUPxnj?Lzm+e_VBapB~Pzof%|mG7hO)@ld%IU;oe zu=fQ#8+vuA70*FWOv@B0%S_zJ)OrV0hm|fCl{Ip@Zkv>AP`2~70cp+%x7OX^GL%;p z;_5VS)lqE*$4@ShtZh{i=u^+{Bcl@f>#^%us#W1Q@iqU^0-9`sLdJvH!J>15eU1A~ zK3ZqTQSObZ$n8)1noNzXnu!>Jr((N2+N0dcga^ni*nK>k0k%{Jnx-toiuLw&YmSRH zs+zg5{=7Yi(eh4l8bh9^XpN)c}ZJ$>4W!3x1ihc+{7Q!Autu;vl& zILG-xkcYaz_jyijO(0eU0CK66MpuHqIiKqzvX$wKG5();f~ZwoKq~D3ql!gk={i+8 zAeyqHVTf`A=_5#HkYxPO5?E>ktI%&9g-a8@w*7YCt5Hm%wsV_COA}}y7kn3#($0Qf ze4iZ|rPOlpUBQU1`AMN8DQm}8QEyIoBUwFuR?x}#E^h;^=H;?|Cppal)to@(24AxA zkOYIA7z7Jse1ZpBmx!@cxx|D(j)I(Br~^vyP`?*}F0hVT%B4mxX}dC#QcqXQ{fTkrBokWAf;H+@q|iBH8f#GApE)z0v1NapcX(2dM}tXl(l~>%vYd^j z_WmVLd^U=tCFc{9Fo`!0sU2Ya#qD#>)%m<(2_3&l)cwu=rFxix^ zXQ^eu@Bjf7-6~I)wCK2$HK9=t9m2z_grcz^vFtv7(S0w3-zeUC zHQ&UPqHP%RR*lLG%8&mdVZy~2iZKQD*WEM9Br#l=RCK2WG%=b6JL4$ohHiCw+p zt+mtbfKvoWAul=Z#VEiNHT4G_KoTiS8*??C5~nBf2dT+j$Y`I1I@` zVzKLi(!JxIUxjh}Rh|+GotmCH15oKqfn-#Y1Pu1egU~fp4M_=TaaOj99S$g&MQ>c` zF_gt_mGet+-{o7nl|kj2>6AW>iyO=~ne&t3E9x4*NSWi5AcN8Njw2T)NS&z+JG8`o zC4NwV=p=unYd;KKWZgHY2ZfdlUu#qO_L2Zl@ieo*T_QsNH?BcOP{=*^-OI^sdvbiO zB1so0B)2K*)&F45}q=01EM|Dg~eXay*THf@w$6%YPe+!!3l z4HVGBK1H_R6tBn1;8x(m)2+9LV~0vBAIri5q2td#;f>p0O7xR<#?uL*2HE*q_W+w;i+EkDQ%`n{O@bc^^KE z;Ol=LoHtf42Y*%_!E8}UolsdPVx}c)`Uz`Jc?$_De>g^^`}{>d1K&py#C4R$#5Vfj zq!I4P;qyfZDtP;m&t&}O8!9$Y4GVD+x9Qs0JSC;Iz(Iwl_vGqaf}{(mDniX`eAxYF zWukoVCslv0Nr1E0Eaz^PxlY5B6}Io}Zx-u)^?2SR)ll?2(Z)yr7iGyK;M+MEub0=e zC;J2^n%tL2naIrXYD+->t0+IXbZ=e~QSO-7@cQYvT=;QjnXxcqLGUB=%?HOt5h^Qy zyVA`i4ey(e#5?eCM$x0-v?AU3Z(;s2AJ&Vg!Ux)5F}@@L6eMc175OF?8(s6}=7MD# zAwtO-5t0y+mt1!{Fotq{qsmm*`j4v^T1{8+&|RXTKs83sRDm03$D5K zU)8>8PRZ#BV07=N4?-COVemUD3x+qTpZ3Xu9|ZeaAil-Qba|}XzeclGY@6e52YP7uGNKTNGMfa&C@epJ zGwKMZALR_BGdxl)Aew3L$c%~mWkp50R# z6XTVAT&y>E=p;Cw==;M`ENrSXR7oKXn?eC7mRR^A+Imt$6RlZmbD_yN^%0>;=bj zB`0Mp-0$YP851k0QQ^M_r0xFV?Ps*HXZ|CyR9nKPMiJ-RGvnXd3#Jq43>cwpoVfh` z{Ma2M{c@u2aF<*JO-w8~6SJXAn-=9d{_?H}_?I#d>X-cUQnjrs!W{20lP0m+F=b1$ ziLoLmHfoz$!$Bjf^QE7J(H~ky_SWnGy~Iv1QXQ!VR{R{{NDiIxL~#NrQMGk-!YiFI z@Xa98uGBvFF;4L#y$Yq~Qni(y#-o9X-4~egRrUsHn|BN?2UlbAlKtz(FXHPDj3NCZ zIa_Sg>0z_Kq#7saJJV?En8nA?6@`?9MHQwSSiOa2#g^uqjSP|t(p)HmiSyTTs)3Qp zY}kpbJsH*Om8;HPo}3ewhE~KXTSMzQM%ldG_88Soz^@+aj_C!lUds$Uu?k}BAse0N zX18eCCC*pAgC-8RD7y9bFuzrrX&#Ij-mSRLH8^j%uB0QWywjD8TlNT2Sz2~p?8?X? zd8Q;@w5cG8nd<2rJT%QGYdmqKLXYukcCa^E#KoGnbZ#Cnrp|~K#gy!=uvYO!67!+Y`Z@9AMReHh0OTeug?{=PN`w4qR|5{9 zkKQbUxJ=~Xy(MDgBYBk*VM4USn*1ugYbQ*m6pAPOpcXmXU(uZk6f~K_q+on*vE*Q| zTPF9@ilFvhcnDNQNsdD09;?F*jY}QY_3C z7bvcGFP0>}Kf;2Y-(u*`2hbbCV>Ul_pyd1uuXd)VibpjAkK*1AWl^^Mp(pilS^}pA z?RjB12vQW9{KZo{h+Up6Zh_*F}~^P-*ez#_FCrP~CJvOY7&GF&=gv|FC*B<`z~Bdk+vy5n9MMX{!SloCkW+FD2eKvq8bNN@;s;m0ncv%akEt!wR^c+OmgtSwvCg zlV51C-Ain)$b6@|K%rlKvYVF6}^+?ywM_Rw@!|D>WkzTliXryzly zT@cX#UINrc$Dm&$`%~&(;||9fV~wFJ{I=_bcb{L~68t1w9r4{ov)^!hS*yZnqLb$1 z<0A{}&t$CEo0bMY!F}3Qb>5Rns#(21i#HCj$u*B<#m(bd)&nYLarrevNAPDdtd zw#6hw^Zu|DIM2m6fc7KVOhWsC_RYHfM12FgYyunaln-o-3r~jwp3pdw=iYCkno*)U z7Je7!F5h@L#Pr;DntNf@V7z}0zwse}yRr^*9vy$D*b4%Ieh)tI=J?~qA?7I=Jx%6M z_Cg`Orj6kq_2fA-dRk_`Xx|59U=W+?Q#vlCBZG?z%H7!o-!%pbZyQnw z{i4+)7`FH2-pJcs(3uQz)BZGG?`rKuyC1zHxpG6k%y#Qy9dK_-SMJVOp%Kd|%|>8; zmbVpEOlANvuhoGz^nFawolyYckfg~A?2p94ZFavxH7cjIt-sy)c7VSTg|^vLE!>=U9 z|FnKrmTj)v#jJ8|H@((Yy5l(BPF>yC@RoW>RKnNqe&2}R@k5#RErl}C%ZN%WG&5Pf zz?{Y+ldX-%hsw%3AwAgTVIGl1l~r-s$* zrSr0)Q7t~3iKTdicJpyHOxG|M`(ba_Z23s52SKwL@WcepnF9)~>AIf)2obd4uXpUp z-)UFUT#j;7PNRRxg_Kdyqb^w&#-0<-JcpKIiS*11PpnA~Xhh-f(f+2AV#xSC>MC zq0{#?o;ODDfx8dw6us1e-x3J_hS6_c+O{PQpGWvsY2afyIF_R^md4%;Xg4zhB$krR6nC)yV5E;}n`j8wroiG)k6#pPp ztm8K>0)QK=M6wV*$4Pw-ByXA`^HWvTsG(?r>aOF-4Lz;*v@|LwbzQ+$w6?axd_o#< zI((LpcEPvJdF|Qn%Fc%XobT;s+PEFoc+Gt!N~!Vq%Uhen7)mKgwJIkUk?@Um{HAfz zMqCnEjP@L|+6yJF>Fx~R`&eC|;}jm>zrQM}V_N~n)y_r?FjEh-StUKBt@3jk8of<8 zH`h0_5+!RkHIWDO=YRAwL&-+Vz7E<_Qulv|IT%66_l@rZxT7l>LgvoPOWPIu+k~ ziL9jkBda+mF5uH1p7feHf8CUq4i^Lhd1I z>nI8X5Nqulx929q+Z}h$?{nG&pe_PngbhASKBX( zSljYS54KNFdBwoDtd?`g@v zKtizm)7nj%qc~TvO+SRNpFW-XtwX!%YTqOeGR@;Ljmaj_ zsU+z^DA!AvEcR^?~g;{X)q7tA#0nKWThr&{Q=|K)P6USc47^q3uUyyT0JPJ za;R7Dd&2^9q9jOyU$je+TGNd_fg=dp>~L|w*tQoe!FzH=rMt57E3ruSmbX@@!h7t>qL<7RPN%Q@rcAUW}^ zbY&W4Um`z2RLeoOAsmtjR3lK9B&b#E_yw*!7MLN`p(N*3L2irm%y0?p-%*PXBPa64 zOF%HZRYqB;h;0SzevGMEl({Ibi63Wvi83P$8cz=>8gjv4-rr%$x1>re^>$A5f#G=y zib9M{7``q9(p*fOl>X>3aA(q|Nn~=tVc6D`a9BZ*yB&vm11i%O3()b@(HNuiz=J=W z>%1{Knaj`z2T0uX$x-RZnVVwvjKa{VO)#bZoSKc7W7r~ikBafxO`%E*w3|Kn^u07X z>Kd}C=Zh)iuB7)2_2g!eWMaV%bSw7)I2vIUeysZtIeKls&I zNhvu*WJC%p$+SgCxANujcqI5kUG4F$=3>(HQ=6ZSuX#XiYcW?_{5B6?JTxQgv{U|; z`EhN=lC8)Pm4M{WaxH{(|EAc+frMt1l#yLI`c^FLH`I{eFNrr@C=CBmO*e+iuDL_$>b{GQZsD+EtvdMt%cz;^qD0 z#>0rEuI2a+7pEH!GV8!7vj{$P3qSNqTHc7ToW*nXV@$8eDE-u3#V(DnKxB8`f5`S0tKsq24V zpZt^v`M0i(`M+EnwUFVGrZQ-(41LoSu~|$U@1{H80F-d-?&&qAmUNsVu1Z}A!yof)UQ0kU@O@rY4Wu3lcE z9#h`Ir4%aK;2B##HqQcdsz`?@45|4>eFz|DId z;%bvxpWBx6>?LJa)S|XZ2S18B!ETLUceW9WkP~WqFi%atA!EN`lK>k@$z}bY8lky^Sr0F zXP{E_KoHW@L1Wp-(0uzIRRVNIx1RGajV3mbd`|{9oh_OLA$fD3!g0<=8+& z14e^>YNBsxw0Q4vM>5}na;6G83GJst%D_}x`^#-!Wnd;M=Q91{5*^;mX62)3dMpBh z^Y1({<+GN|qy;d{SABngka?`ozuLKxr1bcr?pAcd9)`7-IQi#eH998FB`IAF7z=ic z-jS0+v~M+GF8LwevX312EXHism;2~wPMSVv)ya592u5+>C=8>hiQC&y8UrF5hR7Kw z&FK20)h0_}Qr3xzs9JOi7>SV{9c>@=q+}DM4YTKzZuC-njOZ^%UGI~ycf3}oJY>FE z%~RsbF;jo)J6oNx-uW1txtJ|6^bz@pWo~?LPe!j6U4ualbS<&PGhMGjE*PJT(P4w_ z2TK9!l?q?_m0u(=c_m)KGd@m);xv zUFE|bS>xdgwgjIG`aL*y!Enr`P9!d+#f|PgqG|3A2>BsfRlTtz8lVkR3D%ePQyQu3lC(scRfeB??&xsf+$<4ORyq2P zhn!#YcazIv5}RiUK=Vt8YKRghncm$V!xhSBs@i3SBgFcxk++?u)j{;CW8(`r@`nxV z)4um%~vuFY#Qu(0DhNr?x64@sN}hX`kquv zpq#PUOD}SI^mm~vyEL8!Jksao(o2Xhbsmpf*o0^|d5JZ6U^LJfKQ}C@9Y@1{rsDw* z_GLHgL*cLN%%i*5x^(I{p zg(eC}8sy^}pLlcjLhGGaAZkKwjb z6)=KSs+9Wm;&;IQCyxBl&a6xxqeuJAsr=5C#ukOsG0lCE;9MtW>#iqaen~h%vMvkj zltolxj&h%8WCM&GrEOSPC>qDD$s$E(Mc4OO*!)p#Dz08rL{@*qC5h$rz&DLEZn+%P zABvMqkc5*54vpJEgUhwXPQcRiy! zDfokrUsKH%&b68&OPhIA-O8anMUmbnea`jYR}GhogMz+%(pO==!^!%3Bei)?YR0jQ z&5BJME}}}RZ6DB3Xw9D?-%Y4i1a2lq?;9=EuL(&M%`D0`1*TJGWad+cy4Z~BwVt$+ znl5p95UPtX%Zgg%WbcX=QmuPmHzF6m`P4hchE9DY*Y$GVT@$;0K&HVvzC*P?ikHjw z-qEt24|(Xp4H{-u?O=N3S{aR;3;wLXTpV>*VMf^u(PlDrtEh(NF5?9_Y7v|e9Zo3uoYICv||G&%xMM@K)1o*ISJ z=dN@m!M>dn_)nYn(7tp2P-V*kMswyGJ2UFMBJ26p^og2XHay}=HFtlq%=!-?ahYSC z#8t(9n}){0zMsSkRFuSp=NY9pNSvbbrV+}3Rot+!p)IVquwmo9;H6W@Tnci|P~&K!t(>IwEf*hOhD%o3-5a7F z65jTgWZviaYMGd>FyA7?D^p?!s{p~W;C#t~DnD-yNK}=(7zxl{I-3pBF*kAzzJ12L z3!A=Ud@RG-otRxJH)P;4&g&WJ({8J}j(KQU$yJ2^U6{v5W{;z@60uor2C#ch9}N1M zB+POisI9RL+)_v1EoNjS@^*t8kW{j9RohfQrb~PuAfBW&Z&bD8b{md3i`!#kiJ752#|Dt?b4$gzE&oR{FG_!Zpm~EMN%vzF8(W58b)mz!~N_%Nor1q*^NgHTAQow(5a({OM{+= zC@#D260wwt3P(SATAYo8#p&0b^G}dqK-;bLho;7QOb_@@8>?rZk6DUnDt=`V+!u8T zqHSC@*-$v4bhHtCnGipW#3Ri1V$%0?aE=N|+Q!%k)`U&6;&_ECs$$|QRPi2X1lD{7 zANH!+wF9lgLs9kyd)~VfbxIK@ry*mhXMUU%=?TyCj7jX$YWlI$$){z^Ti5ZE5GH7# zWvjK6h*oeUzaFlO6I>GM< z?S@H3wAc~$aFjxzrth@=Jaogx-}(HKg??&|cD?c%PTj?H`$qlP>GISnr1aPb$nY+z z4X73IbR*wZV&@SVH3ay;GAU+KrpfG#pCuo)*ezVv1XkQ;R)OL@01)1roMYwv8UldO|6hQ%A zW$}yn&7QTSp!%iotMm$mBuAyj(oh!b!jb0?@=F`0<}m%PB0Zpl|LwgUQ8J$?U%r- z1i5g%Ym-~T<00ZvaS47b(OOlu#~CLzAg@v7icbn7l>kgh2@o*@*};YM`ff>mce~y; z#ZU_B*cA(&`~S;>9&&Ml*058 zNg}(*%RIESC-c!=R!FcKM{Igkm!{s}boUc*1DB-eS zc>DZM)6aS3#;Hk)KbI;eRw|GBs8v~UySB+w(aWG_Q^c4QCC@80O;7kNQ?^FK)g~D5 zvpsSB(X#>R(3bQVg&!V7-C%2+*AQJZyXP1gmg3h$vy`n9M#9tuY+`;sdZpL963cYJ zB*~#MTS%RamCM?5Yi$-gQc&k7@Imb51Ou#~4-O~d%mev`*6rm}46GnV(m^lt2-nNI zj8>XIUqfugCO{3^0GNQe3(T)zFX+zDrDMXAhm^J%L8@4LTMq^cWJcm$inU53SCQ=? znqzZqafGL)jfty_pY!mK2}3oAd+~*wE}iFhGc%Jzm@s6L=JRTUc=(wt{X3KI!u)Qg zxOfh=`7?th-qGk=zB03fj zA9SlY>q6sAsS`-nx&3UzM`W4C?0fy7eQ$dAP}5D@oSsv$w-6F_xMVW(`YxwIr}9aN z&_>rJzyRxCV{cgH>B?;Z9YUebRa0ca3{IjcO+uNq@Vcd*nkw;Z_OD~5_P~5c#>wKA zWe}l87s;&nJXdug~f{$QAg13ipstI#E{+1gV z6+ruB11~4EsKT(!l)#r^iCQle-<+tSHFy=_e9GQV;{C1G^Wwc$jQ+8xTr;P0+>Zgj zX1T+A{n;k1UjnG7h0<~Gjx#^HNNIN&Ti1%DiMZ?4aue$K+ld>cH9fkNvO(h=l_&Ro zp)8h@Pwc0KjVl!Fgznn4K5cj!(YAWv!OFk7^AvzzAp;cL+H{Ys&ek?U;vjX{)Z_6CR&1Gv?;wQvHn7) z3{5?$wZgay?^rmiW|IEJfKq>@UC!PH_%LkvTz8?Am61tO=9$v^6RKD$+sX#Ti_JT3 znZ#a*8S-fW_N{JEm?_i#D=E)3BQCBvK#OJgXVZ-M<#?U2#D~4ZdW_tr%ssQ9EN##) zQ0F~xh#gFlJin*G^*xSK>c7Yhnb3JrQnZpf`rPd4-t z%KQo)eExIp4vkQQ2omWJ-@c4s*q%}ueE-DfM=ecp;&~}l4}AOin2j&bqs#5|w@cTa-p8}!r*F4v755^w9DK?sX=NuZ$(y9h zCk4r|JlX)LWMa6mepJcu;(8nvFXY;2EJc*r(V<@R0iDX1Xkf`J) zA}|nY3~{M4rrzB=fXZWaJ@B$p5J9$5L1wGBPli7)H0-i z$oPnahI)JScX+zDphDw4HPvMWo_g(bP8-y@=m`5YBt3_G=saF&sojd7)t2EacNntK zu>hpE7ZppwRfa612Ya-rX71|zklk2{nwv4#t*qx+ zY@0{rJoLhO*~wK-lsV4JAC7NviZgdE*}5txduDSkFd*M2nCv6_8a_B?ftW0?OO^d93fz zmh_jtmU(!pq@{$EM_e@k1H;aiGL%bAb}wLpZIY<4fputGWX_ zBCeFZe5g=Gy7}QI&@-cH8d({kP0!EL`=E+=lOZ$y-U-}pnT6V@g6<6O(GwMqvoY8i zZ6?qH2DTsz2;W#Ld(`>at(%rV2)&h4xEfB=J23eYrKx89C;D^c*7CjcCtn5LxFoN4 zzr0fb3r)6FejBMK{4X@35vVp?^^qk|7UkZn3KwU?ee_9ecTHRrfbBs%NUNECxZ zWW?-CZGS9{RejxD9>l?MDlFWE_tT@;sm~ErH0oHZp?8mVmw1R&_)5tf3!WVTwpNQa z?=j40u2d?(OYXe;^YrWWtuAIhqxfpsdw4pxFRiJCGOAW#4BmT%IXWKh7z*sG6d_kp zxbv=6W$UfSeqQ9bx10~J!pl{;*Zr>{9|A{O^oXWjufHGqv72muf87GC)W0RxTTaKOA!qIBRIa=}cQQ&{BVE!w={73BhpNO6Rms#__vBLd_2IhadTlQbg zm;cI&|M6A+HDCT;CAj}{b6nxS*&P2D9p3-oL;mZU|1QCmx$blRZzs6_eFn4t|0aVu zI*@28RUpbfGF;B~x%2jm>*ccE+R6}oXvqz@Q#e06HAUR~dMw-PA0DP3m*7T-%8*y( z9NYSr?~=w>q&Qp*3g*;Ht}Sv_X%xKrU%|fMltyjC2Nhc^@mW9qkiXQ z`?c4jVl}5xLb5SVMQ?fNr3$hD4*eeiFJR*#88`9J9%*qx;4sUp83pfG-CjRduT+mG zz)FqR93>blf*(91%tVZzB~Z(lFAfo3>v|i+i}zW|uLZ<|@pQI1oU**E#+{=d)s}l2 zH3*?XQssWTP^q$YjFgT#GV6N647jp5!Wh>rfocu}a~e3PIS_RKyC7_xLbfGY3B)l> z6vPJe9Sz6@TVpV&obw5rR4c3Vt7+qygKH#{KuoMb`OZ6rx3BjubdWw`lZx2nZ1Wbr zX`tLB8nf=op|t0Ws5b_lt$dv(?d=3F27#zd)GkJC*(vDZ%@znrQAZ&lBCL_RH@Ca^ zwneTF2LphCw_Dyg;9!bh^K8=j>zH~SpORjArPAUe-2#{J@R!wau=dwfVbS;-HnXoL zT6CP>PoKtI2#$*newLg3nrtGrfkr#9t%+oOqP3ua>C8WzWb zM7NBKp#baJ&(7=s^Nq~A8a_WZ;#NYrq6;nkH@Tdw*t_*;AW0BUj^m>5?M?lTPSmYR z97B)Yt<6pw8MI$unVH3#Jy$u0>3FZv*RN6TuTVx?cPF(iDcvCNy?-%`zNZc@$G%e6 z6zg`hU7x@W)T8UgeBUZP!UNPh)$?3d&EGQ|krJl6)>v)$58(RUaGp#Zl8Ag8$;68v#L>09uq|TjO%wsn$;hV6GIrLVO5iX zGUA__W0VIso@&(X-ny&SnJ@q7DWj2}F+X#bm;ieagbDL!QrUCHefxj5<1pVl3v8aGLHxBY^CaS8rQ>t5zwB3MbN9l~a=j z8@!!S4F2_!i*VPT@?;#FvCM90^^}}=Ya&)a%sLCj<<1Aa$!2+y$DI>-@9@i;KN8A0 z4I_PnDpEtWc*V+`i$`w>m`S(1g%%R4Z;H%48XpYKp;mvcL;(_G&-@xweuGEFdM-Lf zOC}jG`^nY8xZ+IwWQ8q{uPiH7v?3<1ZD;j)Fi4t(r?N&Ud?ID+-WPKHktSCcXWrUG zx8~v-7OSS&NmpX6mR%L!%z=7!-wTAdSC#PVeWb{fG_Cu;Cd>A}+WlA)4AAlbgq`R_ zYse(gV?~N{!js=Hw!r<`+vM{WX>6P^N_E#*Ut&X6WfBuWNK+%0nXzn|eG8lQ`GR+h z)+RYjh}ysM3gwKcW*E4oC183j-4ceW>xL^Yijwr7KH8f#6*N1rPJ(MZdb=?`!&@OH zHrKJv?u_!w%_WH#9ZEYwskg;{LU2H;EExNm<6)GuF{d8oo_<>Rj>b(aP0}xs+~bThYBw-m9{( zkOP&2Ce}t5Q7P?9s$8~xTgwcYAdjsP$^J5@r@`N2?-m^kT5&}*xV#P)%^K$(bRDaV znE}Z1uWKZyZQhW|qz%Ms0p1`pA0zJIGZM)eHr7G=mEJWziNf(jI0ghixE8Y9siF0b zwrRXyZ2LLZ{7T5yxJd>8sQe|EZ~Ar4rdX_WE=@>xsSk4KBvs>{78AAfwZiG3QC?lH zJG2{pr#L%}RmBBaV27YgdN90PyUIdT!t9^t28FDphzSLI7R1Lsc|GjAGK=B5EmG3@ z?faW<$o@lku14FzW;Bom2%>!<$o9k~IOv8}S2sUt z)|8|PZSgHY%*#!}pmw~9#iId77&csmueySitW3N$C^ytQo| z_ev*P9is?~hz-$ZDZWQJA#AE8m+X`tIsFd3)IK?CRv_7{CiUHD{8 zisR{Aa7b~ct|FCiPh1z{SGK2B4A^{EYWL2|b}e^P z=kiasA&x$3>&C-Y7rqR*%K6=5Q(^^dI4GT(uo!hE=iLT9pQ6So?CE@gyko~T@F(A% z@{~#xp$Mn}0)zmecSK6)5JE2k(g{cj9RZb2=tVk$q4!=yupqs65D^sVUAov0 z=Y99Qv(GvE%$&J$;12f*#*QUcY#N!-1VYN zGDUU<)C)KmDV1JVhv$uIY^7Uk)5o<>@H$u>y4?%oi$qUdom6jV@%q(MFhrtixr@iT zxyJA@Z1-39QotM$n}2i&nvwcsxusV(EWoM#UL=Hq zYQp|#TA5K~0n3=kxbXsdpA3b5Sr7e4*$eO=7W=#xDma4mpCC%-ef*kiV@sLIjelDADaXWaqzi;^6oM~9|5;L>I=-{+u#?yV!$hzM?HJ?%(`o5bh{ z01@hZ4FA`wRoFm{=^(&H6-Jeqw;pd9Fa?<=Sz#UfmBtlykt`Mvb5$hj!rY7eO&gD% zQ1q?6yyK}Nc9I0qf696kynzaE?5+f$ZcUQ^X)k>RUhPQ|u+6V%G{KEk^fKL22j-XB z&m}{1N?;n;k;Id&Fo#u*k%;f4t2M>v&-olHhBY-J)>0!4H5@B#VZ{m#kUn(r@n)WM zL}6)9$aRcp3N5B0q*Ij0bqH_mCt~+UBm(Q#453za+rb$azj;!KV#!qDR?e0;*P)@@ zuO_7Gy zwU@}&W(KY4cc}vDLMWW_q=i1fj~gg??DwG#{4O-rUPp2j9R6gcbKBbKVQZ17eFjV@ zsF9kTk;I`_!7zbKn>MSdAGvXewpUq0o~}x*;$Y=NrID2;F2Un?BgzNCFHSG0oUh^z z-|*p@%`q?N8(*a>&C>8;yHOiYN>_7ZZcv|cJSJHN_VUmU8-kl#6W4D_NBnWv=cI?3 z=C{O2joX2ahVmU0MUC(vWX43)+GhbWWPNJ>Hm=g(9qkDt4Rme}vo4cLwbTzo)AIr< zeDK^)BwgKNju?^kAWw#=xvJXa)C(cHCDm~~(OH{w1m$c{c)R48@p zL-8JX3*w&S=yRA8So}xtv|d|u67B*Tr#_GM(Htk>sR;hUs#VOqzr;@ogL=N|YEv53 zBtv=<;)mCyp5>4sM0{;b!{r)3e2j@x@ay|3?noCG$w;QM$UJX5wb=Ps`J8$n zqN!d?L+$q5k4M_4Bjp9;b2kmfQMqX=Voe=F=f8YLky_C;sMs}7)PL|0bT(1vY%|cBq zozJiKRP2W{!ot9qLc7D1Xj{bG9O|+O|zl zzlG$h(4e6^El4xs{!yxLOrd}3r>Do>Y`d4rSgG`|0g&yeU@hCj`JJ;!jzPB>VO6=> zSYf`SB7rIgJ>J*o%*t3d^G&?eu(yuFh@H`%{m=N-bpgdK{*Nq?becGZdeX7u#+gjo z^zA5bka38tux=+lJ~y_6O^jJv_cu|^H&;Kpwd3=8Fx6B&3O|7YJ(c9H?lU71QcSlg zV}8Kv6eSo%5F7}V6cf2mG^1k_Ay(_)x&6TAb)Fx|DF{Y&-6ub+biN5^QS{x;x!aK+^jN&P`hFh#6h&$cxlVWemTUtyc6y* zdwV(5N~IKGg>|PER6KdyJ?ZP23#aksG(>wKO}U}=U%#*aUSfh_CBin!;UW3;4d&SX z>DF{I$Rwq_eGK_ysttmEd?)riuso7|ZH4%xPi#j_Te$H8SeZ%3qdQ5*C6Xc$pEJH1 zMG;m?HFMrKa8DZ$Ew6Q+Ii$?plOvb(5HPR=U{#5iM5-e zA(zQopxFz@CwlsvvwYzuRF$Mg_6|1{QG};+G&CkW=6ZR;>ZGDf-WD!@WlTgKI^yRt zGm?tOo{J**rz%Tlk7gt*MR`|gb_Q`V83Yru<+At60`*IL8?xdMk_#s?ISG}K zjjIzY_HsFc`ES(;Y9&u8anW##^lYWoMBaWGa?7#_M?U)qcMO5&lX`Nf zK1;4sgM5Go=KcAL49iKVEG(Oxp4YwKTOk=RqF>?CEx07UG;Yt zndc%TSeY6Atzkwj55{O~b^AB(XI6lY^}_q5pE}XuZc0N`o3gu{+|=73S1xptl*Z+E zuf8n7(K3V9kcUz)g!G=4M2xlQr`2Xi%~c=Fo!=;xer!z9e+yZ-0CblWa!-rY2r!_} zmzaus`I1!dV@%M4D5pZ0*`(j31@VmZ6K4uXzJ-rq<}98OY|zJw{-{Up35BvVLobjm zADQ(lszceHKS!MF$$D#kM9q@@(r=^3zc>wXMIXGs%FsDhA8cc@tV9nk=v8QsR8;Hg zV>Q{W{9fJ_=BDe+dxaisd>`97Tm>%J5iOM5Z2QRm+`@BCslRpe@AF8b=L32k>y@R8 z0LF?0mP3Z0s;~%>y@lyQDsLO{;jiIIM$hRe0+OB(vGU6ezjfi0>!eMeJ1TJVt+ly# z;ZCDQd~cV_6FNCzs4Y4 zypkGxv%yZbFRm(L?YU6HlTwsV((S&H#Wq8V3!urJwLkWheAVKFHTs_@ZXT(6PO04i zQA48HryRcVzM7*VItxE(3K%D=hy}>41#CZXWuXJbjG+-E|Ivtr%zuya{*?g!hhgUb zXt(@#8Rh@b6aT-POa9lo;WGbgH(cibup2J%Z@K2b=U)GD=Kq{aN?cnw|Nl&uvR@l5 zYol(laE~Oai_%xVm#6%2y@b}Wv*;%MY-c0g1NI{vT{(m`p)b2dCs9RZM-rKqodp*u z0N?S&l{&-4Kg6;MG`=WWV4g!?+SS40b}F;^98?3nX5feZ<6G;`Tjq8J8k&pc;OMZa zzrsgXSwa*zl0O4YJJ;&Mc8XxGxb`n3q9AGfnG_2-XgvnNdq@=&0U#kv?Mr%K?UTgt zT&grhTqTMCKFV2lghcfmGiQyrJ8W2mfN_2nV^=NDHgGbA2Jo%dl)h6+3&KbwMe0)A zs8tj4qj-Yx&B065={#0+Xw10{x|~)toEFUsIo1*)18Ryyip^rBLzW& z7&|{`pTiCA)`)PA-4JN7oH)?^f_lXqW7pY_=sFW0V-=2kKqZpod76H%6Q6j_CY*YQ zUVd_xvFB{k4znM2NRioHr;X9TeW|$ll@-;ZaeAY&Y)zqA- z#iMIWswFObWDO5K7CneTBz|>jcnTJkiDo{%5*K`z*QFsKB4gQPLfqUbJ9DnI9gN9( zm0r7iF&@yQH`j0e3vPrMyCG;alfJiFvqc_mAY)jk5DLM;*E*3d_qrf)Vo^!vC zhG(xA+_S%;!_|M0?pc*hbjVVuU(p#dvL{v{m|!JD8MU7$XPoxQ-mUgzV-qMwYsDDt zGfgx(2HbmFJ2ER`Uz>dPEPY33@lOUs+qm0Xz0=HXjHByp%K2*&+iT|IPv zv)2>K+W4Q^y;DZ+#}}~bu0L4MIO&IHbQP6g9@WR>`yI(JV)Lb$H$ouG91qX@qdg+cgDh z$@@VKDLeMX)+VEMKGBTtUvA6aQVoSrM{H;I2mgHka+2FlNsSEr<}+IQcRtVBJCK$B z#CNr$Z2Oa3Vi$+FIMRA2j&!pRGw_t*Hyz9nKT_%ioR{cpk&-uU^9n?f)NMbiT)vW; zlE$Goc}OHk7>-Qc`q+eVdt0@_~~fiib|5UVFOrvIp?UW@P>dT(2>9?)MKTHNT`HeWxM6CmSlzQqHk>qIIvIK~*VJq~3B! zj9&}}L7315vxXZ`MBl7|1OY#(@<&-b7%S3R^lV>Gi?G(#6??gR%e>UmA-?pMK(1*k zTAvjfP4v!1ZL>IeddHB0pKJjpGtNw8(1M`%XD>GNXMd+0oO#q(ti82mh>^9nIy3I) zowB^a0rS(-&WsjU_cIvL#h7c#PTnz|Gsq)-nd`Zk8|f0xQtoG^5zE>}>QE$jPb=RO zk*p7I-X@uoXU?eGsUNp>|HwXaDfeKbG)C3|$Wa0l(PdVbZCyG{O*9qrg{DTDC^c6J z@mcJwPK}W!G8%lp2WZWyjX1uq33eY8BTTXIvHljPf&J7V6Ok_t3vw&xPZN)WJVW`H zVd%N0u|q}A=B^)!V^uQb&^7LPGPe}v3)7r=+kDb6D>vdH>1^XN9>bT<(4VL>;GXa^ zL+7a{I&}W|wnepB(Vth8zdXO zBW6E;q*REFl_XX<&ceQFHkJ((wzHJ8#D53sqO8$rsmSNuTapW##jShvclk$$Dx>Th zO;yv6G8wI_g)Nx}I6(v?gIXbrboGQP+$qMRhgNbX`97TLz}{py^1c(r#8;1#`w*G4 zWfS@csEmaC@sg217R=Oz)5XYLasig370c2hWkkudAdqVYG|y*xC&QUhcwga_HU!e<`Gip<6P_ zl?@eA`hs3%hkxU|2{a;a(}tveNWK==wA1i$R42lI6nZ=#Y>e(xY#vX4{~*N^2SzEG zBM4Mn$G+i>QmBRQyyv7-{S%+I*+uM+b}gst%%WrL)nLzWW!CGZF$n+{`nniup4sp? z9X3b4hE4^Pg$WkC$(*CbhvzTr3JLv1E?3q0w9E+bcQoC0Ap8{Lz2EDiD@C5_k7nR# z>yq-!AUVt}b@iAnXEAM}d(gxtnq<@Ie@l!mIQzz)Yi?J|T9vh2&5MB7mNl8xQpR#o zR01?BFXJF*rlIa0O@&jPmPW3nB$wC>8&mUO@dsA(iR=7-4r?yh-46HjJKP>0)?Mh% zdIqP{ztEyz33(9s^%gRXTXy$D_eAT$>jLc;oJFtbURK@q52%OzK6;~(tNeUHT&>}c zy&ZGuJDIE83Dxus1oC|z)BDk8eg-uz#*dUHhb3LTfh1pEMWn0ezciL9@J?1p{o0{< z{OLmV@g17dH~wtQdq3GjX_6MA7en2tNZ;Btq*K4FO6Z{CZ0m`5o&J)UPjgrPY0%uL z(5%7v&Z`6J-NR6t)KQ(h=JEV4@%*j(e&-==(pm4N9K+ai$CvcK>_?P*6L!)~=K}A0 z9s-CVd;rgiEqp@a+53mZ@9BmP3dn>J;stePHf+ zQg}*dyzs9f)i+j$_Lw0Ql6);#r4KY#YOCfGPK@IYTinPoQdb8jqH8lJHJC|Cv^PcAh8X z!FX4fy)MgobwAhC);h*(?ksa9!thXH z@Q85lV)$vPX$Pi6NYbCt?D)ktAC=akx86h!K!#&}c@ELs*Z1?7=8dNoC5cr(pr=aH zX8y%ZG^c(#sfzI{|5M15NRH6uN;w~>;~gX$iavH+B%gDha@;&RKSu_P;S?2A2_eI_ z9)u-uQ`qt3M_MrUK_gO6lLlBV74{V~U#YS{qV$y{S+`D=9r(&}awMe}Bq*vWqD}IH z9_KdXjNcg09ybo|X%2yn$Tvl}k&?Y1>%UQYgr$qA=JMgETEnapJb389mF|6UmceSB zPgBzSuGd1mLFi)&_=$?6V56t^2$#Ed1Mh9ta;jsezKBNDqcVDekNTl{x@IX}6D>XOiDD(xbmN9v?@~ebvW#PDYe?eq>EBHKAX=YQSv|YtdmD zT2n$OYyaLH?U=4h z_@|;h*1pqfByg6W(kKm?o>cK|Edj5a9L}fL9vdnbzw8ujJs57s(+qM}D1mR}8+0C( zZ#_RxK#&5|`?Ca~wsvd9HvP>VWnyyVXADk1diSGHr;1w?Z$0Kzk=5(r<>Cv1H4`O`tWm|-6zhl_Zz(nL zqthyiGmZufUG2TM2yyGL4Ps}~#p_GDM@&yZsp+noap=bF87KE!j)~(YkVJAwEzdamlj!vz5$y!{b>DnC=^nX_-n&((|iNZY`vksC36EZqY$b$rh4L zj4VyeOv)i%n!4F)IoXM>7`MWinBXwpWdv;25=7@*Mrl@zck(NKeFmmeFOuz9?N{3P z7Ngj&ejK8H>1sP-3!HKFv}x0sa}wC)sh+juRdm-$eyeF~zqTsZh70wdHq8*Wi#ao6 zCfgRcoF}r}(na;Cr0?j;J#=G^Pr4zHx*R<#_pOzj9luFJx2qa+j3LkZM*I0LU)C>z zkBH6~@btc#S1!b-pPshbZrVsV&BCcw(4R2uY|zbaS(L{T8ZfNgOLj%pXa@lpknfNQ()AP_R9;jEXn=SXoq zY8XM7=3^9;s`o4Hj)!7c4B^>k;z#L;JI?_966AD!1C7JpLp_O}ic4!MCMk0J)Nehu zh;0%#M9A44^iq>m!{T~LJv5CpY;D(4l)9&Hc`o#PKj3xD7V#3W2c=JAn;&})IqRfQ zGfvYes5BcJfL(`yM>?wFJ>$d@TwzKE>gs1&-!8ic{veK(e7zfk_IPywtPaG^)^4cN8Zh~=0}dzt76`7P+^k2 zy;{wc2)@X`EQS7%xSW<4a&tFY(740bnAH*f{#1VcpCKo_9$d1Hyjq%3oo!srzt=nD zF1ZAxwf{tM-`*@9SWg7E7}&koE3PDps|Fc5k+p#0y`eMVPdz7a00!Kx33_kEd1>G6 zS^4i2-n-(!hme+?y;$9z(6jj)x?5n_#lzv&h_JcPgCJduP8tti+PGg7Xy*P0qF`q} z9z1PuNmI7F;$&@sfUnAo_FA0tO@?7jIqzP8MGEKE)}n`%9>(79&{%)_sWxfTt?3-G zGpv4^UoY~LHpYGKd#60T-}{L84@B`$TL=xjIbC}~6{hWY{#`H3Q^KVIL@q)`G>Fmc z79*CmuZ9@$0c$ed=AjS)(`lrIcjmZYKnRyVtv zGZTQeH9*&OJ*SwEq0#2*RxZy|M6l96hx`#U-h@h02{~E1xr(%@GZL|_Jb(JxC zDPbhGRHDf!v9OjdM`!@D`V4G{XbqwH`R%Hiz+&-#gYf-dXpT!k z#sAql7FL&rO8m3HEUf+?a(n+yqj)_OBPs?J|7S=0`uBeroBcoPi2tMC{jUV?Kh5x6 zV|4!}P5hTfQRd%T)c;kFqQrl&{_>AA|EH`>QdC0vKb@8RA2WR9B>!JBeE-qPYh}^( z$}2QqxTBLGwW~? zRzkZXa(!zlTsfYb_Ab^Tq9KtRXV{sTJZg9IP1+75T>)2%Cs0HLl^4Tje6c@9#PTo1 zJM>TgyK3>78*_}#)wx(dozW=-MeMeB0I0$DT)*MMv23C26U$d@Lo=-R_<@|g zg93=J$F^%7UzAoDR1Z33AnJO07zns#?_6BCakf_0Q~+l?lAIjs&!-V@>sdffoKby7 zYywHHuO$hyxzejfeHMjfL=pW__!1QhQ!-F;Q127;Yn}rz>>H^ytY@gawwhK@83tq; z^MHg;{H}fjSWL`VjM^NHw1wBPA0JDK%^GO|?J^BZJHJ7DRbu>E4b&FjDIK!Z%kZ4} zuQ}W~j24`DYUCwmK7aliBcuH{66Fnef{GrEezT%&5K)3bSI;PW3S5k-sYTamzQ565 zUvMX`u0znKU*%ip#SQNIH{lVToiyC7%_?f&m zS4H5yROm=wj^2peJLyl;wav;2>T%=x;>B}mtz|phte*z$emXEe%y%Y@pbd1JZ8)&{x>dID_o=z1-!j;W|ix=@L zJZ9Y`WmCpV+8g}dfb)?!Iebjx(#cY(UpL}rtMZRhqr3-q^xVxNvE#>!;0Zkp?abQh zN>IWqTVr7>ZTc*KR8U-`PY8m$xhs5HS#Q7?vTO{+y7@qh?y#VaSGe5}YP*z!+oMEu zI_c?2MN4#HE4MjF`#c1#S>`TR%9UAD9t0uhKsz8H~W~5oQPZY0g%@c^PC!s zwyrg!myMADFuD?PHqg5_wI6+9;q;PQ_eU=`YJlCEM@(8es|di{Xae#x$88V#hX7Jl z9yXdZ?`mKu1X#juGMcFLBKmg_p&Aej<4)_&QKnyIgOt`O$AiPmirPoL0$_*TWd`}w zzz_?%5|!kxX>B%>4JOq_V~IrM_)>dhwG*yY(>`!>#o`C?6HnuxQLKkUk=%&rkB$;@ zrddCYw~g6VHC^PvYIsqBY09HgygkoeXZwttV{P^S+;kT zg8fbb3G5$=ZY%f}U|OmI{%k!SHZv9a(#hAuQFsSqUl(>mrsnCxd4qJ7bJ4+~LB((} z35wv;%K*-&kS|-awhF$0^%vb3*2vo9Twn-N+7iYQS5gYHY104U5p3BiH zfxghpjgnhD&7vKc{wU$*rd6=ouw+PP+3iLbahYuKD#NCLb0^jG;Bs(#tO_?nP364h zBWTIvdA8ezq{1Zi8Id)U-(G0*rOj4na^=tQ)7k50U3s71Xp?7`@~`k0-A@)Ql8sJu z%&VgTy>5OO$n>jWMCBb6-_1fA|HJr0&q$_gnPlmF*$88NVRhVW(ddgP4wJgHg4al1 zmNKI0goMWlPy*{sse|Lln_$6r!&=T#_tV00QZQ>$yK^2?)lI_&kJT~uT+>I}*?ez3 z8UWOjft*}c9a{0?i*Kvni&zCt$sp^9c1oOr{ok<6VUjZXL%+6u!p#WIQGeS;9Ir?! zmzc;2Q=3C)YY+EwgMZzo-9ECS{Kl;d6BA;w;+hOd_c#SbS&dWH+x6Bysm&4CdV}q= z_aI+-ynU48wW^=u7~(=vM&9$GqTEkoiAI;Lr035k0M#|u2nH`jdi_{VI=DYj9FI?5 zs{R$Zr5HoU;e8DCPlfqTA!z83qJUq%@kGzbD@f~hvZGCRrve_riE?ma8K6a2nF1$I zs(gXI=J@8Cg$h~VPo>JCE-wK^$n0eohG1|?T@X6z7 z`E{QP61p@y=%aG5e6{b46wcUpUM*W&KCIs}73%33MGI>%1502L+8q&xkKZ^+k&_f| z(PEu9Q-(_+9Z*D6VTidaXihN zX#lx4hUpn_oNN%b;EtAG88YpUw(*X~1Yan{+9}$tfTT5rU85-S((FKJiWBv7G^SpMFrOrPSDvJyl(!!w^~ID=TW?J&;<@Tq&H*)&dt%TJ}4 z;aS52mQ562)q=~^fqzVl|IpQ4z^P{mtf(Q>hikP)GuR)WV>wY7TCKrDt3c&R;s2EX zCf!1zPM1&}4-<5&&~T73zSbI)JYNEd(oyh_=IG#$rY;wJf&C7~vGBSP32Rm{QQ*C} z_VQp{58UIww-{EG`n-9tm(3esT#`?=wb0=LdI;Sm-L?;qm6$L)P~W? z6!Vh!$HtPV8+t_MeO}iR8sTd6J@z2~N|8E#1CRFJM)_$Zhxsmeh%ePA9S9#)M?2R( zE}xc6rt(jwNkB7Fjz<`k-4!G8=Tb$~s^A)?g9c7`b>8o)d;#VKKK$Oeq;>9kD$ z)qUuQp=z+GM$L_FYl()SGu z$PxeL;Q$LdzZD86qG=@aa%mDPp(hhs6L4KuJs}_~7Q!iVmWsz!D*A95u^eiYsy_Ns z5QT_=_uvayjbj(F_}oLjrBzC93lcf&Oev)Bw9()QO{TJi$2a5HTlUnEBA)L|W(SPt zi@(?#E(*hvlRX7o1E^sy4EYsQ6T%Yf>UcZ`P`aY(L&K+~VR6<|*ILKd*?Fd%J{0q{!?;OZXsuQQQUHp_)nlb=tyAx|%J|gp3!||)zgh z5CF;35K2dl9)EjGd8X~d5Hi+Nl4g|`6Q|K?25RQkh81D1MqG~L^pvLLi%b#2j0{pV z`su%MEw8cz0yMg8dY=Ui#gwfnb6e`;y%vFkWL7I z%ZrBY{f?x2r1H~Yb8a{-EZcS<$QY9b9OgJTf2e2YB~_2%`jY^02Dz^24_f8%v<6_s z_C9oWV{5H4tkekibj6x9SxU(K*OK zvxo`n02<3p6}b4CmZz=KP>;fTy}JuftA&d(H6NAm#X-q}W*Wade~JWxSy^2&UzF>a zg3r^?R;>W7_rwo9`?vo-h*!&?A`vrrl+-Go{yxDOD;1XY_s%X`d(ihlHO{J76iwBe zp{g9UuPa&(T#`a)|M^Y9tWKdhdq4A>WlTnBIla1+kji$<`#^!Ffc1vqc5JRK0I-g8 zlBJR(x~Fse(wU>*VCR14?NT*U*W%JHGHn0o?`*h>&CC!u?9=skCJEkfEdlrY8QXYoQ)1!t@{o~DeY)2wgIo`ECxZ&4r7!aHRBN$Ot z`G2dZV)=8DBabL+H7eZ=8LX&2{qj7pEp+`99cCab%JENur^cjR8MmJRR}`m;9PGta z462lz*BRt_7aEa#T`h;NruA_Bqgoyc|F>#+(lMy`U)Az>N-hd2E{nJJAkB~-F2Uu^ zWXS;vHcrwWQ7#BMX)l-O9cypMMsqn|DZ$)@c)%*Izb8uiS(JIP&S1^qBZ{+BC%TX= zLxR%mNFDaGo>lz1f*N7NZgtiV;Fs9(_`$~pxA|K&w#SbNE6PzKD35cY4bR!>%R6EL z+ye4;^pW(a42vri(5z_)wW`4Xpp%02EwkxRys!9fCzkw8U>V!>T=*=hFth$?pn=70 zs7)`q$Y}mslE^+|KNSQsUg2lyw5It&mk15eFmSmC6gC42eK&^U607SL9As8|wI-}T z1x`^E1qTbZ-nr=}_x)wZW5Uq83I{pc9yNNsl+_-P?ZDZ=Ks}DVZWJ3fR$)1|5{l z5LUSN4cg4OCQy(S<3^KtHfL8_T!CBh1}i;>}U$4Ih(`g_u_%WmS= z?#i{aoJEW>BpE=a4IRR0L6X$S_V9!h)Qv{Z8)F2SO_2N;EmLIy zv8W@7@EG{SkIbaRXi9i8fnrHw42U~=dYNMAp%LNN-3en!Wk5$$fb=b)qJNk(H6bGT ziNLd$JA|HV#01n%+@@nI`oUsPeFQp%@e;`u=#r-^i8d@sP+uxiTlR!Y;0_pQqWwOb zl(LVz+#zgWTtCHw=SGxgCO!9eWc@|;I(oOFsAMt)qIJF;wZwxfsGtMSzDI*2mEt7F zyL>JbC*`ZFl<34aRsf`oLl9b_eP#$aGNj`#fVKm}Ea%lTb5f0FR4VBS*G2Bvan}&N zgS{iNWGz+hwoQ&t6309v2iroPgPRQNSmdWZ7M_XYx;#J2B%h0|c2R5Mzt!&R=DqEj zjF=I5>$TS=Fnm3v!v^#WKB|&K9?u+U2^|l#boGLaPY^}b1(fPOKdRaICm3Hzzw$hD zfmP3D#6U*HY933CBrMKK$B5$>rBrH{zEJ`_E)X|>ZgZc-K=WdV}hKC|wj$D-M79mzb!QzAdN*3}O5Dw(`|a z!kW+&!$)alD`|?>w}~Gg^@3MWJ2wRMC3{Dzm!(CCU#z^>ANhhfM3l;>>OBH@5toI( z@A|q|=OTNQ;%#GhlIYB0@~+J8rljam{lX->>l$ zyaRVb^5GkwfzNDr0RX|eTN2LSKY3d|ejqfM5gC-Y>OCv}u3Pq2dg*sPZ&buS6?uM? zVc4ke8Bm)UEFT!Lso%5V5N%)}cPHyjAO68r zNc^jz8ZMuS9!-5JuzyxNke4KlAnDxH3J{MpTuyQwHY)3=RSJAuuI<};Ul0o+H+#zM zaAPvE%u?&!X`X4R_l!?W82hvD+&2uOTtrUF71+Yu9PlMlp=4iDZ^*23ED=XLoqSRl zeDVACeD!TXhC+5G=wANZm;um}SHBj8IW7QoJ#^_)U?zvWp)<}*uU|ZQ?K^%WC$U5n z2F-uH>ORP0Bf~rgHjOB|E+iANkCW;>#ExfR`qr={fM08cNc!1+Eq`6HKL~* z%6y#iguG<`b+@x zlC{mlqgpHE^`L*eaaUF99#t9~hAYr#z9Rr%ZhSB^;y)O{g)P$!P3c=B(pT!cX&2rR zJJ9{vFgRR~8)o|WzyT09@w_xl1)o=M-$fGBxn?3T2IyCcN2>dnWVw(Ok zv97@dHvaHG8Hw7F6Bhx6C!V*J?DL(P;^CJPtQwHJ zh^AHs@ntW+wZK+k>jeGt#h8O$;v7Lg8;*QY#d~wfg!bsac+nTt2 z4at@I>xW+46zf$9@)`Bwa};`i!u!lht+MXd7o zFd8cz^LQtl8mPCQMUzqdW_?srZjYlwTfKs0IZ$1dx^`QW8S97i?16wTS43sJbU%)vvhq}+4Hq5 zw&M!x51xi)2S>pS_$RZ^-)5tsHS%=Mrz4F%=c!H#R~-6=KEAmf`=rylh`;fVZoiU> z?pk`RF@D)lKd{lXj3B8Maj`9@Bt%e#Yn&T4gNZ!3O`9Ld}#6tU=u1UjvnCHKgF zJ>5uhgsbp6yQ=_*N-5m>0o5a=NYf%!%hK&NWv)v-WW7wuSij5G&jWKoBqDeC$7kCK z?d`n^8Zi(I51`EB@18MqD%XWw!@8~Z1RSUPn0g;hV!ZYYPWDsZcx^W{s`A!K_m(cs zGqvPZ;5JT~J0t#jkOqhPOWS<6LgE);!^mR+WV?|tR2@~;{D;pGq4w;sVX1ZN95MDM zvi~vecsX{Ht3P(^>-L0Eyq{3_D8#{$Mro8X4v#K=_M=kqM|}M6CT%bBHKEB@W|MtU z4H>_NhOWDm%Qe87eWJ$x=BS9)4ba90c5gvNg`6T5ASgyjNEb*#f1tD9#2si7&4AX6 z--&du3A(oySGOhLClAODTmx*%#&!*CKQ~-vL_kdjz1d>|D5m0wrmWOcZAUe~13lJc zR0{!LZ{EfP!+8-OoaF>;@l=MC6o=(KTeb5O0phxi&R#e|eN-rB$CKZOf(PFgh4{S< zN*KpZ#%e#^%bHSO@UdT}CAYV4#`(suR_<2%XsGc;Sp^lB@e-Cz=rn7%qC{OTpp*l1 zN|tj;{uBc}a8(UredOCJpUbbMYG^LMW;@=)qsrYY@ zFnEkrWzgBzl}5BeH&Z1i7EX8x)NaHYzLJ1A3$3g9muSD+R1m9_CjENA-`^~twjy8hNPz+*Khz*UXsn33#+{(QjrKyf zBrsZem1q4jX$O9-)OR-v?x@B5aO%;b^JgWG2Nb6W!esn)@^UvwKrQc7AVew~AC&eD zt+f+>uRpwjTN|go0@9EC>1jpvX-_sp{GnaA)Xz#xOQEe`pz$gff^M@+w$ZK!KT*OU zZ9PZ_$9ZW#-IK7I(*MlNZLg>s`uc=lHRTS=B%{>fJYDafp9Zl^Dy=jIDGXd6)ZxRB zmLClgj^bW*bYC5G>2=8kP-kPIzrQa1!UZJh3(m*(Wb^F>@Qs1@aD|6ad&u(@>@9g1 zVV(5R%?XjXxjkvztM5J`S(QM9(?hn(c?_ z+>4n^qQ0A~$(ffU^S3_LY_4YWF5ys~{1U}7)NFCRr_C zNijTbsf=%*jTWCsSBor+t0)kuekjU&CKKz84sb3TbXPKn6s}Ti(Hj)5fpm(^35_`a zdWtSzZ@jDy5U37*nD*Ju9b37Zs_#`>hT03OQVfQiW~lc%jVmLB)aRPT5o?}C)uQ@Q zLD?eh?L*mYt_9{a#o8OcrI0ZQLlFrk-P}EFI{sF)yK|hRSR%8YaU;P`W8527?@PJ@ zvR$ko@^uFSRhoPaGqtZBeeYlka@d==`7$PWJs<5Xe7C??10TmCWT{P5+PeB;rDs9<$}Og0R$N5B;z^8 zEyHcEEaGQ&jq^`YZS{jPq6o__r2`TX_0}M|m*Z^sL)hAR=!qmU$X^O!N=&s@TWxai zD-9WTbUs{}yn^7!b|I-eAWcTNuX`4or@DVKhmYuN#4f0qYbCZXl0+`Xk8hx54;lR7 z$rZb`cV!Yy^x^8+u>$@+jYIObF+hDt&&6afI4H$SXR46Z4xsbWb2SgpokL+L$^k!u zllXGS_&llF<-CxR?jBPfRsW0`L&c{BQbetU&Bz=uIT#HzIR_2(biRm;H_y;j;GXH< zgeIaCl$dA?)rbVzXaxI^#e65{A!0u8VXcqN=`nug33_EI^%yRvM5$Ol=H zes*i%YEp{e{v?GYqHfOH36wT)cMJ$?GoT z)4>`Tyy!@6SmDKHUmSz90h`5U|BxhX{p@uF`B5uC^fLpu-fXyknMAyG?dgR^CCk~B zB=l_$*>750d$1#X1N_3tD22AAo?f~??+uX|7SGj@t7>)xhT#mPKFC+wE1R}I{Z8sZ zg3nk>yIW2ydg)cV+YTp1MF(4C$w|f#%7{AipfQfl*`4!!N(<5pZ^^$mueDQKS~;$^ zwFEtH>6LE*_FG=KR$Gx6Tof zuxo0Rf|9-RpVVmQ>c3H=421uM8kG-*_L^13q(rYVz#$tNp7A_mEl&<=z5c_Xd??8`O`OMw7 zCQvxn0BJH`E<@eHJ>G5>fl_|S<}HUSG$cIlto*tssUPV$+}p3T^k)>|1nYueKgy4( z0ft;_uhfafwzmCqy8tP1S_K;ysR189CRbGP?5|DmXufa1c$@N7X> zSW}pT24%HM!@o*3kcIM+xWnSDx-D~~@@VrDvB+r1Azmj`hPK8zx`Hj+hpG7f zx!;zRvWm7n8N{K$qZ_H_?S*elG~}zRHOKo1UsRI)Q)k!!8^6^ET1>YAH z`;Ta~S3!W{G}cHCeT#k|g>s5>;X1mU)_t=s zv%Gfo12A**5k0?l#cuBL+Tpt3uuD@7eH*6XlQ*C2Yk``C7w476Ychi)?ny7822zQl z^QXzVhi@9;jfUzIhtYp~zJ)$PYJG^>-Nu-L((9dxKrW>+QgyED=!Xs^BbWnl%#5;7Y;@xQ7 z4Jl$`*X1Hfw_Lrmm4|@mjEt&MPK3cU`Wih9MT0ybu#%>ta7a=PLx6)p*Hdss6Mk=~ zv$u^_FqpgSeP>Ya3z)}!EfIqjV0N~H&4qa&E2d{?1Y#XloE{ThBvVak5b|pF-22Sq zHyx^tehXbEimUobHBVhRs_F%fUFgU`Hc_*~fGH@F;Y#}G4|$Jbxs`Sps5H{L7?#WK zKN6=W+K9Dg^mn(^>v|=Iw9||K@*eW}^mp_i<&a z*&YU!N{e1bdNLao_=xJ+QBV2z!8qoLeLh^wIu8{e zx;R%n4WBc>GPCUxicbH0Fl0#rCLi?xZ$>FiMqJyt@y7=`S}vD6J=7V;Ne1`p4ziZ9 zzPuw7tiM;RN1r9vz&f~}ICHaL+DQ~LPnM-`n)+HCT49yo>7iZ=A$xCp?Z*1!1xTcI z0XWjWh;fgtUEmyK6ElbbX^D!ov+=w?06$pme}Q6Myq>g}wkIz!_o1ckw!#S5P6F%qkGuru^zwSgK8%bp3 zW4Sin@Z+9zDBY|tU~p+agWom+j#sQ9;Vj?EvN|$;u5oe|cxcJ$mCeq*3%=t?P{b$O zT>M2p?%0SzphnXltW#o{!qV6V@}4Iqd_(#pJcSEC?z;@7)Q{4rhT}fPl&uN%)pIvq zIqHE|=r9{$ZyKFFfdW+RkE|ntuNApOirL@UCi%5~Qi!AvfAGEBpmeiw(Gx7lQhQU8 z6D4-8{mx#L{mvBQok-zVj{JVRguv{;=K}jY#3pqw+eDEDc{Eg#2|41zPlcx)arz=C zOd(8Zfcl~sSlY+?L0H(W-)el9II%KC; z{pRtO9aH>ak~CaG^fyg-d)0cf%DoP-)VE6A_gM`mZBoB}0218D;yN0b??1aIsc-q? zT`b)-cdcjY>o=b@t+Jw3?aTw=-4LN~nH)>AM{m;dG%C@5v8gjIifK2~>B>uVcqp9}^+a)Xxj@2ue@Zw5&Ed zV}zKiPZWKn`R;T^o;w8gE&#a~vhT(7Q)#3=y?sk0V*4>a z=_)$MnOHMJ@ul~ePK)hbu?=N)aQ!#|xn5*h>mosLG20tr?309!C4qJanejBStadl< z2UcQba}7oLcw29u#TY-O+r0E=E}DN&7T(#B{C)d#06QtoP)!tk|qpe*K zd&nOOZ=!1SXnD(0PQ$tUZ$w`8_TDUV(_CXA73YGIP z!i8)VgUC{kF1;Ng;lawW@*eCqnfA#OpIU9izH(Wg5W6aH>-;T>I&N!Usi8Ndl8{Vk z6H&H2OqouASy$S+uwv!+3q?4f0$*mK zWr6~SM{(OQaFv~b4ZvAU&~Z;qtoBVY;q zJOxLnOdv1{_KDQXl9dnR;1=1Ec)5(A{Mbz3S~e+NZYEuB<;G>}8SS{-m>;d~r$($y zzjX~C4*$Gg8>-RIb#gAS&6MG~6#X?}(wl2u*h*nzcz8rKk&x-PdlASrA3m4;Vlq7| z_Q*h|wSM-}mVlCdSDqs}+omad-S_*wB5y9@DlQ|2*L@RwuIr*a*>SVt4eYq0@X4B* z+-DB30tZ7u!tXGw+)Oz2w_Bf%r_2*QYGtxLoj!xmQ35co_eCWeQw@pgJYV!+nvyp4 znB!x6HG6ee5}gf0a#uW{s$N~mxh8Sb+vk^0e*a3(ubg9xiCiiWGAffRnY9xl2z z#ad03F5t`vpX-rKv*X`kvR9!NOZ%CSfO&D)>!hGC`gRa-G_;&(@;!V}o=O`Sqi zk;M4;L(7BU44RQ_OyAi zqEnL-XSNFNN%nk0B)UEN`}upGR2iSb9oy{V&pCfoM_jcIE?FTsXFGXTY^ECACH`m18WfBqd7jb$V@s=q$Bo;YN_1V46PVZ*pk5mXS|}z9(L!M_KLhS^E8Cbr!hyeR(uMUe1N@8m-r&YV_IC=1r{AJ@I-P9qyUPgFT#wt@ z+CtoXh4A~j2jw&hE14<=%nGll(D;Gdvtx0+8XABy1+BrNl;nFvV7C*{ff2DQX^mg- z`|Coi%ze827f-^T4yvDKxQOf43-Px{ygvz*3<(R}?^I=y!|sm?w4RNhd7a+W)C|5w z#mZeg33elyk@rc0(m` zzliq`&365`qsEN%=LV*l^c)58gC(&U#46cuoURPftq^?)!H|L7c$W}W6`rE`t;SbB zD-QCk_w(!Sw>`?Pu@MW3f?O?WxcJaOzBMxxWgv%IaTTgEdOWiaFEJB8*pv`5S20i{ zN4cv8Kl$Xx&vH1jg(Cl`RPp*+op<u{fOG|mq)`f zZ9y^HFfzMb64q?#onB%>-h9hZ(kPs#6sw!>wO&$KWS?OK?ehq=&4^TtZPu$u!ud$` zcabq0C1n#)v>~&u(JS1c6Z0g=j zE(EndQIZiM3!V5JD*>dTHYD}z%KmCdM}{* zAa}b#9`d<@nz(-VL#!tQw@w3-sEmt*kLXlDlgrN;y@PdqJOKF!$?lN5)Pxc8^WbriLh)sFJOXKM0mporT^|#XD<2& zB((cGB;1E69sc)ZW(NXPt-cgE{Za}h&`Z3;rZUOCUHO=+`XD9U!K=^-8|)eC1(V5! ztpPv(I{Ijx7NVY_3(0-F>wzhHO>sOJXpNAnf(34=rp-q+^cj?rMD;P7DgXF9P)}(R zN%2TxO%bvw@LBLz9KX8R-FC-r)-_>EM1GW$d_#pl$AN@<4}qmIak2BT?kLu6Rzm)i zqmA(9y!weUF)o<(XEoq|K#qUoZGU09 ze+@bQf2w2tm%a1<{bloilZOBGE&n`n{Ht01AIS0VTJnE6op}Er7V-ar9RK#rf4tql zBS$ewafyE#IsOaj#Q#b8ozBO}6n&osO%@q0K;kThNgrazS9UBnslJUVt~5@^s+6Kh zBhQda26`N?V!u5qQ(yMtA@fi}=&t|wbYjzOI+0^OHFSkh9$)~3r4`qZ5=V`mi8T34 zx@N{BqH`Z8RLe*(C4QE674tQCIX1H z8cQ?YZsfTQ>7-zm(hT7xnShtl?nbsYmgKGC{#mWk4>DblFlMOk* z5>7gulY7$otQcd+SZAm@W(ne4R(!=5psJ6T{7R5tpl?`sBD80{6(HorCIG_lq!Jr* z(Kr@Bagk#ONE|)cA%jkkeIe@&_$l{L_k_`Z{gK*9lg$23ou@ULvk&vBH1>;=yv0p_ zn*7z0Pt${TbzQf?>eR~FxlB-uyl?;jNlR&!uF{f}^jV&@v;l%hp9tFCS@mvKK9@upOedBF;JYn1&f>iZ%_$MiBx(L z#bUxln0>pAxG};|leRtkM%oBzK*eJv+jrhW|Ni)16+7}%Np#qoh;gs#ok#avy@?f0 zCsNU|vLmv%+f^ZP^cS4uT$X5M!dC&WBS3$TtD5<_Zd8LgWeIQB0AUeMT1zYTOZui2 zF!)fKVH)`RsiYdenAfITDf@=rtD+9W6$yCzd%o=q@Lc8A$30ct(#MOBw4mG@)!qh? z!lb*1ai~vVt$0#IrJn=q+5w=?Ao$^{Z94(BpLaN0`_LPHka|1DOwQJshx01{G84v# zbcsvKt#;?c;u?lbj}QG3k61&C*rM=kmtUR5xb5-K6B^SMFbBuF$KSarEJs5(i+$S1BzVnt;7fS6aiSzX;*pHu^FsQQ~O(@291 zX)hp>T2g9?>c-cc3*ki_sB6@>ls@Bqi4)*gzrGu5r9B7NP%2@$Lf(PxFgv^aK{sIG z)sTS`AtncGNYW;KrcPT+232BON-{r2*uMu3bv=b4I^S;mLUD{N<5B!;da7KA4JHs;NsJ6(_~E`DYhLJCn_wEP3S3DR77-dW*`8+c=I|><2z7tz;E-0ZTG1 zDVeXd5|I)OUKutEZcAJ2@#+A0=4)P>cs`%$GTVX>qSgZPrTa5B`Y_$mM=_TB-nRQ8 z-O}x+(I@d#&&aJlD{72bxQd|f`(8akB#n25cWO zsXoE}Y3zT;grnNOoOFXN`l3xg)!h7+FQW7>Y5Dh1VmXj`;-mC5DH{G@1B{}Kwtks@ zRTk+no?mn-={aYXO?b2s>V5tiFg=CXMUg(J{W${iAvIXrg$;fUVR!5Jq0HoL{=6#i zTJJcWUPAkOT!4xju==a4fdG5v*sn^-`X-unx84eLzvkTGG+2wj)ga}D-n;y=L+yJ< zoinLL`q$`~FKxWCR>57V$hH~ilMiiKBJb>YWX>J4X@2D1fcfP|gc)EnTuwQgl*N zp3B4i3;fsKj0qhbBVvrlBnk2kZT$-p0YV7=m!FMHJG|ObmPiweM+!&u1()uqaHfD~ z3$I@H9+W#eSV~A*O}#lJgfyZ2?d1(bqs7kLTC2R|Y|a@gd8#9>+pRooSbNUuIaGaK z6xCmM)M@6m-f!RV!G*UR}6 z^Iwnkh0!oYX^P*5FKY5Z9GSB2-QFZ?@fz6hvf%=?#y{1ZRon+vqqy-@D}Osm0P0!I z2`B;MFbN8#A_$6G75=?wZ_Z_(k7uC^qmwbhBsse9+8gt6d~gxrSLTiQr9N1$-(3&$ z^A|MGgS`N8@qH})J?|5+J(jsZmQY3MXFz~>6IK6B=hR|jG?ka+WuzaPWbh$RX5xrKoYT_w&(_C?k@1zebRCs#09X!SzD&vzSm|d>g177WVh>Yq}L>M>b4Fm84O38 zQ;%+xBm}g&{8k5rjFPI*OvX@ZgwHzI&(!}jJ_LifY2MuwfaX{6iEuJ{6e_Z~GQ@vj~njbKnqkp5~Dq$S%Sq#4P~rJDW6nRgqgO4j~Dl2mF-^B`7{`E@aBgc`A=ow&RPMp$4KseE}M? zW0%I5d1wcJc*pi8%%zEyvolpCBz`;G$E)%K4ca9+GQR0j8l{jlaFxnc9*NSY<2(Ic zbG14IyCIe68uPLpam0Xet3sk5QQfGi&JRv<$a-IZSF`H5T$sDxQ{B*GcN0+gH#mw2 z!hW?hhLaNBml?*pIxwoa9V^DB&Dl-J3;LmEj^*diW%iQq?)NRn%?Swl$%^d*Ag2<% z#7f#ma5cHBi;a(ZPk`jxvV05sp1(JQkehk{X6FUqfEFKUp75*E_xjU@8oxG8Q8QpX zQdM6WR*%t5F=59*CQ_Ao@sajJM7vRUIV8Xi^)JDxaN|Q`f%jQs;VA%lMTabaE=Hrp z5^VQgTgW-miBp3|uEowvx8d>P08bxAm~4AQ$7SWC16_$0#Wo-<S|zl=Kj$$&QplpUi=BJC(=tW7XHw!=OKvR!U>-;%D_59 z{2kS^2LvSb2ySYjW+d5pf!cIuM2HPdiSMna2S9{qEWFV^{gokCKI(3b_2DOw)flK^ zRdePi?d97VRBY#nwnrGN^4lMAk@zw#N^m>-=2trws3+JPq^gtvG(8$wiol#L=pc;au1|_sWDX&or$g&e#ZeSNi(gf3+ zUV$2Ym8Ke5YC0<-MZF(gX~f>PvVKNuj9ztx|4G;G%5Y+CjdHPW&$FQ_nMs0er&i<4 zrlWjYJvRQvRsIL6@VArtuS@)YNfrL9xIvs%;_uql+toQ?)_-^n{?jtu|L$QrQQ^NW z%>DI-|12vI75=NX`0uPhRQMma{=XVey8quL4u5~N@`M5q$NZ_Ghk*(Qr4~VIWl^PCGZ`5o6*Y;HE?Na{g$0iKh(W22BdB6aW}WzG zNjbhOwmOPKY1D2BgPf5>o9(dq7sn^uNu#t{IfexT!aVFQqC{Ibj1Lc8%EfibfkB2w z1lBdsEf7)WN&mN!<9!oa^8&MtjBT~%4exm}$X2#e(ZnS5PFIe?^UEFhc%m0D&u;vu z|Fr9*v|+|TpFnTESpN1sAM15!&>xJ1F3uYcKR|xO3eQ_Tdf&lA*R}zK?0ih36#g3* zrFF8^PzXH5K&CIn=;r~@Ba#5B&=CAnw9gx7AS0LHh@`9cQnC6_R4F47&3mgbWdK%c zuhRp^abD4qUU-J}Uhvk3qQaQ64wV zqK+zZdwwE7svTY$G(f2487?h1i)X~f52U$i1t9$l3c1F@?}(QynaE@_@g6{z;Um>k zoZ21ou;$;YfEgF6m$A!GDQP3f-89O5w+etSKk4s?XA53WVn>*&3$C-b!v`9-i{Ok}S*lJ~RemX(* zxZYRFxzae{!R!~OqpgkI)@?m*!iLVW7w0COOUs4=#rgO}7fp}%!r9S5?tgqGn_)6w zdQ-thu?8T7R)fa~F`h1fitrc=f)aK|0YCjtj?oF$5b;$hS$?o(9`_8Qd;uT<_lY5H zCz4cvzT`!3bMSViC)~^*#9E#fUN8g~!>NTD`Z|Qquc{uQcp%CNqJ_ZbKVHf9Y2a-d ziCTb0m$lL6>iW9|M#F$_&tYb`hv0N(($MB3Or5$8m$LH%LDMtPZZ=SkB>-3AM4hEq&n9ow zU~N3_x!|L&;CI|5mjeM4$So^t@;Am5(hoMBo9^4}WsK(M@8MIif^%C$F-e%1m27?@LG6k>VUo6k`eC z$;V;CCEpQAQJ`l|eY^#D=TAqs*cHn-vx-J2U=us+qD9L`(J_S(ZQf#$S5m`#ye!AD zV>AVkcCqs?X%3gXbM}Mb5V>q7=PB7~(W0Hpx5hd57+q(<{AD>seSWr-BCF4+K@3@d zof-2$V+Z~cYC^>0i5X_Pm{(R{dNQmdWq-oc%hV)3sYNRbPg9IqD{~HDa?stc@|m+T zwGmTfwQ`&jn634j24Av``J$!EqK70_>k8|BAqEn1JuwfmaKx3~gH7i0NR{Wwm*PEg z;Wju)<=e6u7?gT2V$#(-v{rX4$HiWmlY^y2_AH)%GvXdRsaILBIi{L_#O-Noir9-H z&-UmPt@o*mQZUOinz}EbrPGIy0}Bpr^Ns$r&Dhwx;R^Cs{c_GA!~c||n9Zj{^Bkmw z)QUI?NPF8XU`}Tx60%tePw%hG&6>|r;_q47c7+Lw+2$1hY7kr$Nxt3CD8T8Cp zfz~|K`d&_zPeVj4`UqfI15C-W^SC@ zRO~NTB;&-$Y#HodEH?%WgF^TSO8oR@*X-J6@p@}m9%wL5hRTeHsyY~b7W&{jI$go> zyU_GmJo}?bkr-NHMys9R#vw-eVK)5Skk3r5VQ1l{^0}xbvo{7>g$|k0OuPftK{baJ z($agKyMq+Pd+{ov2?_Lsp}sn0=|Ax$s*l@UCLVdSC0&<5@&gYO!nU>e7b@$RsD#tE?hjS z6_0zM(&y{R3$_OL-0>yU66^n-s9DqY{1lin?Q6Q2E`ncfD$Xy7pRdBRmi2g)J|Z4z z8w_)C78WmZQ<;6OC%4a~w1X&MxtVZt58?kvW<Dz1J6!^w#i%L#Q7KacBdZJ zChO}ln#$&{k8xs5^Ql~{#(%UxI|N6T#U4Sd3ki)p7ra3;p^^iH6b0A7qpr9DJ~{a~ z&axsEGQ4*W1s*t)r%X1!d`B#8QgAiNm~klE)Qdfh$h&yy#+|0tCrFS)7m{H;OP<-e z-JtGFr2oEy`2FutqfLj#zS2u>4I&N@6wR^bnQ+$_RFV{zX+rRGOvhs6NMe|5U(f;b zhJ0H52=kCcL3;NxS|DE#<&%!nnSc|N^4tZcSlQO=?5FTF4Y4+Zq(m_{N{v<%8*jXQKDe-c_jZQey0o|-5P*{jA{o>hZ5`CqMF`8tbTY{J7MxwtKo7Gs)}1l! zae>pqrrBlEQ+2)ZlnEU{rOMm}l^^g$)u^Ff+uw+|B+F8P7C??mjGx zPi+s2?R&Gs(PJ13Du3KpbsnnOCg6ASfB1fXR9>Q`vcZnx=b{1U2PYsI3XIpEfduaWzv4aXK(kClOO3PMx9@ zdG+TUk|=<&RJ`76RRAOX(yc$!iXM_p+Pm58jpiGA1zeLWJ@sqcAP-ft-vfQIa1P%) zNn3K9R=}k3>5(vzOlm=Nx*>5dh(*3pIN-*8o`SaawzyjWm3F3xU#uQ{gVU5EBzEHz zFi3(w`2bd0XHu$cxFJQFETIR0cSdet)uyT;E^<{D&Wpf^w)i-uRy7dss_vC-puauv-2>4)cn;X-8wi{p#B=$=@m z@!}+)vT>#A{*3V03x6Zw;%0F`<#bOKIZ$|5wrO78B#*ozG`e~xw)Iqy#3y+Xj?sQ- zNLZj7siue0q@pPIm|OYGtI%@Jz`ubJbFcQ_f=TMDX8CsBlvAlSzD6b#kn2nb*CrZV z2oa>TPSk5_8(0naw7%Z{Es8gqfKW}MQ3xNPbjoc%iz+iQ-Fh0ni{40x-)>j}UR zYY-Mw+1Y*4XD1ZDEqVqCIzP_YH8>DY8BF1ofI8sQrdjxD3JV5-P>6j~o#;l4iu+u< zQCf@+fdZXOo&7IrbgfeCU7$M})TC6(Aqk}{kEpTf*-=v?L4m5!Q6v`P+nAgyi}1<& z46#GRHNz3w>)~TY5$?amO0Rloc2UjJ4!pl*5gTG2_~MH|WfWYLBEQZ|N-0@JE#)J} zkN||sS*j+qIU!}(Y3<{%N86yW;3!M556+>^6zLwhsnXum5Lbfk{UODV} zp5qk!{PB{YYdi}cwrXK(g^;1uBlDxu`cPV-g5eUp1MfE_PNg2?(svrZNXS%Xq@|0}t{f2nBw^W5OC4%2^dgTDihe?4RHk4OHejDe`|e-dW? zd&c0t@c)U70TrS+iNqQTR)fus7Clf&#GwMLq*}cs7|2HRPs3>AR( z5;AaG5Sw4l{(J4sP5E^Ex4d1Y1sMOCkSXByBI{CvUDZ13S&q?gUBL#(kaymL`-N2{VkXTPB`;c3g%DsM&{N zVefDDW#WhvljJ0e=q7;@g9+6bMKqb25?~%Bg0T~9C2s}U`zyWjTa2{r^0_scrMeR# zuMo2(q;paWKwe582KJIt+oe7~3uqC*a5tTT>LtTJM^L9!izc7^| zqEXxEA3d{Dj+O5g33mGBwa(EZf_m|_Pfpdjlmy zFckBOkjTjLKN2uweh_96@cy&zc{v5M3A|8V)Guu5@XGfl#&+DUS9PBJT%CGjusW&iVU=6| zee(3m|MT?6RQW3?h4~Yj>GKKZ@r&h^YbYPUbX$0A-{w-LzBYne1Bx0yI$KbqwU6#s z?9X<4s~Ef+TXNX_ZsA)ttT0A@NOIzttthl*P3b^U(+X1s%uBw4Lwn+XjKY|YiU+K#zcrS{u`rlToI@%Ou; zY0QK{j|}5M2a03Br(w(8L2kj~^r9{F8!YzmQHS#BuLiqjgaduJE&7qhlj~{tmf$m2 z5SDwgolt8BXt(i}}UKVH>M*?pG}|5Ealy`O`#@wZd%Dgo88Ft#lzQEBX@i$ z=jvTCt758}D&HMhIg6vPAJ5ISo&sr3E(#;&^o&+K?{HP<>RES|SBx?tn^W5F@jdaM z>FgE~z4W1D@G~$BD1~1~nk6o{CvwgrCfyT#b!TOjky-*-8ZfVXlM7|GZd`=Y+G*xd zmVbw(=>y}l$CPcWaB`lmEH!|zFreFzixe=p;!gN}&=fdy@Z1Jta3uUDDa~6HihF8T zV9yuiNcK&%z0KfR=Ci;m)7}mEmTP5}gFwUqh~|qXI7)w)RiGaIRAc0|rW&9EuiuK&`A1OIfy_|Y zA0v#>Pd8i*lih7y>rsG#=~NxN$d!~LP4hC^0p%&v3_F#Up3S4;nGs2a3E-uocmPtW zyK|mPJrvcc61;KMlDGTt?K#yLjHzkStz zWwW^g?>wu9+V{s^Op?^l*^^5F`3P{`bKSea6UqoG21d;&U~x z^R#uh`~$y@C)B@G%~H5EpxmocF1*Xzis2-lI0-O(3_(;2Sonq-VH5Sb32S-Eh+c4I zM~rlbd7cu3qCq^_OFT{ZNZ_AkH%~`8=gR8Ekg>6o>S7=*3nDr=k=_s%J&)l^!s)%x z(DFr$jv$dIk<`Ogd)6Sm70yOqj_3mHJ_RuI1q!M1Wwc1AM9pbK>9e3Yr-iJS&IEzP z8n8r6r<-4?(Eez+`cTPXroNoiEx06?e|xgM$VymO=7oLp0x?Pav|Ny82`}Y}g8d5M zwir&#bG=Kg+&64m!w!xbJ(fi;A z;M<5OCO~8Qh+YJC)N?n6W@PefObknuOh{vT5)tdnZgg+inisZtI$2LyXeZU9jOFuS z>lhvav7biTBaFzEDAvJD{t*ca z_v~d=x)9C+5pc+M^ZqQ{$9HbHU|>>lFbu2<;KOhX58dsFVlf>!e~?H+>@Q7Pt)%1h z9Us>rq#`SnQu|T3aqksAb)Vf)qIh5Qb-sH0qI<42l^D#`ELRl4Us8D4q6pC<0v(w> zPpvjiDKa$V*;KvKrI%x4PGlw~@)JPw4FUKF z_3gSRh&PUmr`2vA!cfpINYeq}!iFE&Nd|G~o%%il^5}y5KtKL%lau3*5;M(WMUkYe zNo05!(ya!v6K5wNR#b%ZemNJBx`#lxkJTY;Q$UEBX4n%YCpWxq5+&Trv-Yei6v8Wh zdRbjCvJFf4DX1GP=SZRD5tM;=#q65FM9`c*zGkQP5lDo1mCW#)w3?4YQM*hu13DV& z`UhwDGK7;+%Y@7nfXrLiigenk7{4(|Fe`|t<>$(OFmjY(XHZdUWvU&H6a$}I++xrmb-Mcts>v>{Xe z1i{W+AmGrZ1mc)oV;r#?0tU}15 zh7kpHMP@w3VXmF05+FuOZAOg)2#g0NV*B!jQxb(WA6-fPv1^frSQ5bT+L^K8MQ2Mn zZ>5=fMPVX+(jDZYVfHAmN!mJ%jFriW+!`-0Zn64xCsJ9@)9Cp3pFE2`RY%S~PTMdp z+$iDr`Km(GDL76o6dYZplDcoIaqZS_%NmZTboqL}R7BnWkPI)v_7%z{$r42|&0A## zr^8oDvqNap^@78_V)ywt==?7ti7BE_Y7e}wdhvBxZFdhmGTn9;b2OlVo+csU^xYWJ?xt&x5AmX@=Hx-;i4(pD9Vf{AC=-#slNH~@3<1ys=8pqpySV(1CN9a z9=!x+H)TV>5z7$11^;VEvo?nmX|5Hr-%y+H8+zBYCA?zB#5f*|C$y2}M#|*QY&)bH znYDB*`N_$CO9uDX7iud5dP4wf-SMsRmQ!w zBK$5}0iOlLAyG$iF)WA^ISAfH1QPtr=){H3!j7WG7m2d>ZhzobB=uypSbtE7o>wzI z7Bm!PpcbPo{#iTf56ALUJNEM5NDjAv_OxAbS%;VUPw%HLQx6!Sg^@Mp^XbbbOYro< zKv0$;@sQp?h2D-Rm@6w)O{T>_m>r0*H&2X!avIJ&rETp{rPE3aPu1fMEpi|Vy_nU0 z%J`}pWQTE{AY(1Y(&XAH<&?1Mx#n{4plh99m=1HX(L2__L^0?$xjSzkKCO=}H9_&& zZpO!w@<#d4m-IDg3G0=28LJ*tRitO-$uA6sa()KvD?hCzWoyY0b-f)rvv{(66fv>O zC~+u|qgldqCp~mC5jPyFv@wgZ|NAb`Bi`IcZb%7^Xg13^Hx+T?EuRw=agf_X^-{{) zC3X?K)bg!=TVf9m_{S1^=nmw+?*hpnScd|NwJhB9%tUh=)YP+=HJjZ(Ljq zQ%bfiUaUIorlnaITrFGIUxoqdN)Blg%l`S>zdc5Dslo@p<-xByqE#6}3iJM~IXspk+?bE8_nl?!BX$Z1=Qnq=W!T zqy(fYgce$W5PFf`OXyX4Z&Ia-)X*XHA|SnYkR~X-gx(YpkuFUH6h-9md3pA;XV2`J z{msm~=Uwyt#l6DHbzfPmm3494$9ewJyOAs%2oQGChj zUW-FJaSRfZm>3(+dm}7>qr7E3iz2b7rK0m9NAZaWI4?P~;@Gz^dvM;KP;J+-ibN}m zM2BiLup&t@u4%+o9ck+--T-Q8SY1_-=z-y{vY;8+OnXIO%Ef#pgs?7K8HVoxw$svg zA4pZzbqGGlRqS2i$-SxuKvDq8aAg~BHuogi*UzuJo=UThoQ{%u3q?F$_7;N1p&6@YLbQgX83ZVO{R&6O7s9nBi zIP4wJ%jw!Z2w<2VkfK#7fXWsyHNZI76wfQJErUCSxa=z0_{^3Jjw65AUkGX|Jr?*D z|2!8e7gHx_Lvw7Hh!#Ak^y5A^|6#;earonH32um?Fy{VLIbe}lH?`>nma%{G_At!< zNv}8r)TH0?n3Yo_UqC&W1r)@CR|&~(im@b*53uz{tP}}nX#gS-9vi^=0CvgU;loj;p7S7bLieA!T-6q75VSPEwDX>Z3!iik5(H)>2eA0 zfU~3n*>9;Xp$%Yfm56ReEIXnY|DW|rZK8VmBuezi&0~gieKjZ(k+?$5`1_fCI&p%;RC05_?L%;oja(H6T-1&T5GMP9YXL_uKDe%xd$b9C zB-lG!yiF;@R~NUw^(q4EIG%i4e~JdfTb6PquA}f3dK;3lA0I=&P&C@_c_SG$C4Q9y z@Xws@i-IETR(l|+8Cd%Ip(yNdzsEjWvd3+TV~=+Z&#Wt@3H|m?6Kh-LD-}2WGsy6! zhQ-P))ppwS*jtg5wN+fJ!Q4D0vLEo^4GCf~ED6@O=@^^zN{rYo*>;))yYW2V8u;>)Qc(O1t~WfS9)~__K8joT+At8sMaN&F7z-dG z0HNsAC?yU%FcJAv%-u&*cj+*EvQq;6CAj@9LE*=?`^$~g^w+HeiLA_vjbgT4-OJ4A zUwlWxDk_4g;f3)Y)!hgOaFo5l6)~^#BAFJirdQ_@DkN!#m{-eN$09(#a_Kgo^ekuX zX0-(aV9w1~2&32RCc=G)>v)D<-jOC8`#ipbYW9xB(?oo0O-SC=H$2YS_)p~|(N%yuS*;}cV&rDV=}7Jy_>N9g zYk*tN<5|OSKZ>DR!^w#fw2-b0I-ga)&SR4&YljKFbb?%Lp%O+F|6VyqYQ(cvJ^itb zXwUTlsSS!bx<5~ZR1v}zjb*q)Dpj0-+YAXWrqQJ~=r)X~)~A~PtZi2?lv*sxdK?~8 zA$(pN&xp1Cy4V} zAX{MEg-W{e1N_4I(4yex=6eUkx$X7urv@n>gI7cYzJ@mFQAVg9@NsJI&}WgWn`#tu zaoNY9B{T7Y)Pds6A_*WWqdn9_uonO$<;1OFAA_QmZE_om6hp z*cDhP3|32shJH1?b9|DJOf3FopWcFfmWgaLs5@fmGdk#_@0x?8#dkpa9MyIZtywjK zJnX8z!z0uJCR@KCJ$kR-MTq&*rw35U^_DxCCX>R-$zgcUdX!4On$9zoqJoK^dCOd< z{fnR&F$I12MnLl(aY7^I)@zp^v52%x)k!96`tTj^sTA&Knw!R3Cz0rnd9QoE4$U=!WEZD^5@QauQ{3!vN-+D%8yi2k1%u@$Ebms(wmsUmc(|bEskcV6+VRuv@RRi~9q;|ya>;qNk%8W&hi{2(;!qf`ae4); z1W2xs&dGXb=CdlCFua-x^O?-ct>MRX!PZW5L-}+ojhv1;# z`N@8VJo(c&z_&X5PVI9Zwb9P)g2@KOTk@*qC+EKdEc7k6M z6W&WUtQ~u-L^htHYCXX9RTx6LQBT^)-sS1eR)_BIO-brI9ZZI;u{K3tL83p#B>+B> zd#4Ob@N$9@v-h>J{msV%#DjWj>pdIeALBeX$#N%RtGi$@4AHMo9#C|GBg9ESZkQJl z2X%_PhPdKKM`8KrMdG)nY>4=vPHYISlL`DwVZbjWd+tw1ZMow$Ly$5`)}42Z63H%r zxS8fch&4?n6`NF}Rh6+nQ#agjPt$mFrwMCMa6aZ7?$;oqFw`tI(hrziQW!na*-ipg zZWX3sC)lm62M?%kxE|$HwYSaHXRB@`ljw8phur2eyQFfK%$CxS;3zDhFz}z@4nIF}v5;_T?%&x*DG-)I9$-p^T z7i2W$R;)6)OjESp`0vPi6(NrNs*lw<@u8nRuduZ<5_a%jK|R50i z>T{*ho85F|axzth=8DrJ1ZOWIxsZUjARM1LFYb&4!aGU0zKtyk$CnaqR4hAgB;;zA zi&PEO@YFm#O*sWbalGaCmB>z?^JH^Rry4ck9KEaGu35L_yU%dw?XJSPH4slIp}XE zZ~Q6Ys@gAg$Kdx`qiXqd6MZahTSGkUJe<5#Xa+tX8UCjHL?7li@af7bN${?~D z$?RxyjI;PQ75~)hv8aXF?dq_hx135yGtOi1*LcL%wddjJBfI7?;JPfK*vb&43nx@8 zq0yOuN`!PTZo6G?DaE_&CkMNz`p`2CqP4IJ2|2f-BM7<5?clJb#vhcQ5OJT`sz2!1 zqsG#8w3rue8>~P3C_5)4+fKnpIND5qCu%yqZN%G;hx8Uba}DT5S$ zskPYf;{b1V?r4%MUpZaDY6CPJPooZ(q3+rpnS^Y&YQbat9}|B;uqYWHf(0} z6;yvXdm#hSt}~LKdhAAc#ocqiqSTvpU7|+pnrna8SELKb;pvX{9GU^CPg5mxI5n_p zGMn*E_=};Hf5+MR2w(CTUU$x(%L&%W+o6j*R-{Y61dY+~_8)^cUI(k>cx0YWd(HSG zMguY7-6!M0;eT!Bkt$#Gx163Ur1db-hW2w za;BKy?1hs?8;y2GHE7!@_Zz`f*+v!TJpv6s0+ed!49e(ll!qHQk%g#1xwgT)=n6QgUJitS3`vc!vgWT3`sSLTGKkYr2s>zjS7KMBkQ$;htp<);jceG+&n5e(@P~ zy^L3t=03MNEw&u_Y30AGOcFVXGT81N|ccR=M@A=yY_*aVLd$Wdy zi@h(i`3*Aqvx*#fv!y>q4I*!D`{&PpdHv7(B9VV)0+Gl+0U8qd=iZP)e+>pAh5j`C z{zyD3JoNYUW4>7t%#XJ5ak#k_{&V%e+udL8_z!mXukZSYj7#u8h7$$wF;+4FywasAUpM*qu_At2g7*p~T+_+6BF>K%KxK{D$uS3!pH^ZuHbwvy7% z62Jf|?{o~Rhk*w_iVK%!UAF0UY9bY&K}b)AQ4k#e2se29$w?t}eJ4YqhoN(uqPlqh z#yJpBk-i)v41gXJ0q!L$ehIHnl(uwEG`wZ$HJH0l0ZiI*0|l z^!k*}Y+J>p(_p<&kovy$mdd8=RJl|u^Z{|VT3hKsPlL5>8u6_t&*LhR1?3s|Z7Jm@ z1h$s^_uiY1^>S{ZP_gQl30~;+x)!&U0l6!>4v^Yx5!W)k)X3H2@#B?p(l|=Z!N^L%z59H5wqzNm>!`IwDF2i z$8)W0HeJOG05T#UL4hpl`w}a@S-cX4Nl@+%z$9}8MYBTjp*VOc*R8g$&Gs##R;L;b zcOH%oN|eYRu75rA4Wq9^MUHEpj8LH_N`|bVW z)T1V`#T-!!g9q+J0V(}ZnQSRr)y0RmRIp2}c8%_DTi<&rslxHUEjfcJ62$k!(pWR< z<+TStaPmeBK=Jc?b+|$SxXki9N^{Z6FUk~R9D?sC?u;<0yIGRH*U36>ePSIg9i+3? ztmsoZJPG?vMwRw=em@S&B6y?yRm$L zt8uqZK07i(c1htN(Pl7h*6&E9f9z|Mb{m^|Tv~GwCUtpNK z{>j6gVsnqOm0?I41mc>oXKS8@XWzQc8v7NqK%K>R`_iK{O{z%y7fcSku-BY!!1U@QJoSB+}+W9n&v$W zC1g&gnuMl#w30`Pw%wgL)DZFFN)v^~&^J>rb{1#SZ4Ib|{jg>DpnX71IU6fvN#QmW z?u`9$UIe9^L+o2doM7t&Wco-w!cO|9{{IDs-e51Y0t1FR*LV`DS0 zczWqJ!SuRJ3^y~r9gyssFRH*c!l+JoVyRam-?+M7m?F5Fw=vgD!Rc{+aAy&X`% zNX?*p$|%6)?Ta2TOYd)izqpgwzfs!!QHvW}XQAd?di_DZ|4{v>WzD#c0E=xa6D9YZ z!TsW~=Y|b_*iZXWvFPsQTm@r(qOIQW$`;0V^Za06epvRjr&{f@=PlVshB>>9chQHm z)@|-R0i_rBqdDUncP;9cqi8H$$4DngNi{@Wl?*5WBgo0pd5-VM)N7DeO_{(lKkVHNI!^RzaxmN=AC1vqq*f4Wkrh;C4u2A zsx(h&Y5s@ATjz6K1+rIxala#As@L>UAsMVswGB=P`4Ho~k}`<6e&Zy>O5KKtR7t*W zt-*&lM2U!f4*7|JeNWDgQD<~OG*>KkkBNZ$;Yf2Wn2AQS{&4b1gX8XA5$APKT~<82 z>6vpbW23QF$PB*@Uju(Gk)m9|Q6M+F5~IZK18eGlM(vKc%$ywGjRyib6da@lVq6xf zckqUdO`n#%PaZ6HR*3G*v9?SqBWsnj6uD@oxu@iK+O%97rvBY&F<#F&?aLdfb``h2 zki69hS-x83`QP!kWPWiXg!`s{T|UjOe|<9yE}*}P=({*E>1VX4DU-}e-a6e-S1jek zN)L5~Z%v3@ki_Rk5P8v3PLTpRI8BdhYg-wZzo?_w|*x1e7y4+I86qVFlG&!llojpQv$l5W7{X88Va9Rsr@fpJEA?y zqvx(B_EBtH*Kf&>#|W2J<7&AGv%Qm5c?p80BXebK_ut^0jg!`R?baIVkhWD3w3^80 z(YGlO3EEzymRwf!<=(d{;N@pQbi;3Gi9~6&M`ba6wDO}8F(UF#bJ}EhwsSE6U7Yr* z9aH$)5Z1?Zh%mD$mYD5|8@6&{r|qZ=_<7{|dI*()ljTc=KB(%D+4>p}+t(@GSB&f- zCcqguKgK8cRfd!*bMNnx$Jh@hkQ@d}sX4*Q0qa`{vI{1zw;kP^Q)~#sWJ`Mh2buSW zmsu-<4bw&3D+zTet(Awf_3U7?AEjiJXw;bpMHftDbXCW7wPVCwL?QaRx-A+zN~>}-agVS~kjg7wJ=c44@q zBN^rRMNug(sb;@k-)<*~-T%&5ijjS3f;vo$|DZM#};@Qx0*WUXiYC~S3jd<%nj@?wJd+%H$K)Jry_Yn#_I zqyMngonEmF2cR^II5HyU`DR#qyakD3<@tmcOL|$ZCsoyR+UTS*T1rHw>^phxP4Eu= zIbN4fi_8vVtuw8s$ZNV!#03C0A*A@#-s=t#;aByB!SYuJ_enjmf$gJqC-@?XOI?|5 zVkZ~WGsQ2Kj7ae+C>uFeV8A|ka;}qSyj1`TA89kC7KjWb}G7dsV6uDiMTBHI8AtVKA9XQNh8(Ws%y zli{9?@{Z~g^4GKU&f(U?MkJc$hyuTTq1z&GydCY*gmzNy1xJk3H!uJ3cTOT)Ok{gv z_+JM&GnGC!+IW9wtKe>gVO42zTnL?XC(nQNyWddd+?Z&y+2)HeeuL8VmieX2Y%Vv! zUrMuzASElkISw(hPl8di%#jL?til=wPAE0BS&B5lrw^hXS3$;jRuu_uI3EKHcbooK z?ZqJBj!T|$SF=O`p4V)__A|NBSYzh>;8}ei{4$%iCzjlv&iha;w=yeUMHrrQf2KYS zG|QwNhtnIb(e&b~YUG#2TGSYlsgS2c#X&Ti(=X)cc98vhybn0w4mfUJh*RC!oKd=O2ZQY4zO24LGV_1~p!d#c=f)>;&8c{8l zBxDYP;X`4oU`hSUc$HC%3^;!rMnYV-zUc0Cp|I1b5Cj%Z^j$6rl?4Yzwwl`<~&ec9%*cQ}9@aSHy%c+p1eN$K^YRhw7u)4zTZNb$KVJ zy0@~Yh}T2ee&Ksq+Y6Dc3GMS3tiR%(r)twTxQr@CxS>gR7EM4$x;Lk6<7b0CH*VDn z`X(*;kf0I{(YYqswVhaIE@8dEanh!fN4r~BO(}Z*T?*V;o=*tMXDGa5m&49xDoh-s z9^EDvo&vtkOD6s?#-}XxGM@K(;k|L1nJD)!Nb$xXRpXvBnf^54awD3D`&Z*WT(nL- zOxrfBoG*w??cPW3QuT{x?Gs4hG-QssHQ4V>^5YT%%RYZR7XRy0O)v1FpKUF-QgbSq z|5VYiXh1so_4E`j|Z;!Go)tHR0`$$Z~ zvBVc`ZY}XR&=x%5NQRzUEr4 z{Dk<>Yz)47Vg&AAJD_sQQy^?3K7G=9Z!G?$-6ETtt<1_AQj~YzJZ&YjrTPi$HpN>M z=gjg_ zLT?YJ>lO3VDAFdTe*OHw#gu+4Nen z70ob=Fw9$d{aAM4@XXIt``C`15yT>FhKIG4DAg@)4%9+4vC$_1n$z5|9_9=~Vuta{ zJ|tE%WG=8MrH(C!jwR0++{)rH6rzy3e~p<^9fdXx1z(OQ*E!pd4m9!53k=xEuKk{r zI&QlJ#`;{NhUVISU5kt#<6XxP@Ujxekn5u*rZ8I`p%Ioz=W&!+$mIX zXJQ*@^ulxbknB%fkmE;0H|b|D#;yfYpTa&^X-`wqP$qeA@@bqiZEIBECh05kHSLre zpAPUNnKcyg4xoX8zmor?C?vtV@bxX~IaLU~MEe)BFH$iS)fpfO_g1N0(zgcHc+S5#WD>TP= zV%!yY3Mk1BF<&@3PG}mw&BGoGb?(L?GVG8H~*#)(+-atY@jg_|l&7;-K zb_~{PX>Ld2X7)Q*DJXSto8KZqX{u7>fc&A|$Ij41OXHd82qudIwkMC@;}-pk>yBF2 zXq#Eox2|4#!`5;4;}pq9XD3lE!Zszj4+Z3Zy77LPb`u8v_}o#)%YeuT;pz~4;pL2z zJ+t5Kj$uf={*kn)Re|$tdkBSUOTg`Wyxbqkppv6BiTj8M#`PE)S?n1Zn^r2{;J^aX zGFQmyQ{4o`*^zOYnl~n%+j;_FLFx;ekzB1Z89mdq0RCP^`gfm)(4yvbNv!wh+EyG^ zZ9(qTl^teVxePIjv_6avTB&bjIa{wJwz$K|tOm;udO-b@jJPm%i!H9qE-SFY9mny4 z^K>|^tuZAv#0x%Nh1_}`kq5NJYwx*-HnT7~CbMZw!U?LP;%PIe>>&~4t;P0MB|h(z zST-giqi2Z+6cPM$(c|?imT{?E=$P2797QV1PLs4SrH6T>k;`VuvuSq$;VTSMQAOvO zB}b}Wv{32u>za8=e_McV8-E#nsK$BWeYQ`E)h7L;TlS3hEz-vA=Rn9kXW zev{$P-;CJO(5zWl?0T>{5%4bIv+pl0?L$~&Z*@!8+nzHPEs66dnf%^2hrTRx@qBbU zD{{0Ao(xJLkazl}uC}quE;rzpmh?!i+ervQQ0Jus#@yo9< z<7^6N+Qb6efMq$BDi#L2}EzMM1$OQ#YLh3lAz(JC=sY)jWhr0*8AJnV7@fv#O5x<3G^koqU4RNHVWfoT_M8ApF z-iY#}H7PDBR|e!xbHup2js8m0%>7Miz=KZKz&m*Qxvj_c5?yLcs6dI&0lQpYvT4KW z(;|~o5M@3#;p>k*p{uP0*B%riOA~6~9C7EcHwz;-pICoWpPXTLN0{<`=AGTjsltPJ zkkYvteKaIK$~0TkUq&D|^8+7QkmHN9+VULi#6z|bW7)%+oV9WtV+-*#+wciG$%QYW zpX)S;1Y{=(LIQMQx0qryEQK|RArAaZy-_q3ABwjRLK@|Q0yXEj@yna;^CURQc={&} zeP@-|wF@vnF!o5{pVL|oE&D;2ms#(~K5g;7REo3zk>fC~lo=;l@8alHldwh2&mQJ^ z%jfA^Xi*^l*JXE+2M-EeCFD8cXF0R7c#X*wo!>^f-XdJ)D{9P}lr&oi z)gu;3P`<%hBKb+(^Y-6P4-kGQ8BcsnYuNVCp((>X29eveQCAJ^&FncyBQ7 zLdMRMRhX0l+cMsNSz7<;wa`n7Nv0Uz%fdh>(`%i=9k0;MKzxsE`7=RicWqbzL zc7|E3wy2B;4pY_&3*%&H#Vg+L^%sM2PnYEQj1z4$Wo#O{g1UD9UFn+wcpj5 zIhCs?oVy5>r&vq3gp!utlWITQ)+G~gMJAzQJ?YmVgTdor>DAGjlAZEsxG*$r8dr(&t!c7L;G;@mkh|kwY?Xi5cZ?ML<1qWTGw}cI(fog|GYI~3p_so~ z6n}RH|I?TF=g;8(pv_qDk2U|p8T=+H^WPQ*;#k-fP~`Rkcfgn-LA*h3=Gb9duae?9 zSz(6cm?1fAc(q5QQqrkBg|#d{Yvv}0Z*F*kNoFF30BHJ0D-roLfGT1R=L1btwzDZN zcIQH5k)St=yFA4hMz)5y8!TG|Q*Qp<4E$OY2InSKVYQLV)Dwi#jyG{dF>pHwHM-+omS?+PPj}(f2JQnF9%grJ=p2gW;OBiRT77gMm z*95nBOVOL3Du2QjFFu4a@tJ!JymC>$c|5u2w!dZ#XEi?oWH`Kt@M>QeA%6N8wHeW6 z-bgGFqfP>7mM@>1L+?CrOHe9Zf2eFC$HwR&gq8CQ3*wkx1=DPm)V+)U#~uc2qOV5wC>ZTa~k`zRdr(POMEFknRE?h*deGW zxBB6`n3D9353ww=GcPf>s?jGzbx}3U&3gD7?}_T_+M(dOL)mrZy72MxF{HUOZ9}@E z<1rC9cz~O)70b;weJcX6i98&J z=+|4_*PidW8do_(JJEp37+oai&im0X1$ByD(_&dNSeawSLj*G9G|&BLiOGG{5FOyv z%L=}_P+vjT64_yB%Sk~YZ@0cwovAv7Ew%!16y3WrhVZyUBdVQI1AR{M<+*9YQME-m zragELIz6Ni;4=2D!L|Z0S#LSOMa8!0v#_nvMcdf0Kw*LroT}Uq&@DIlfU(J3YmbG9 z4Vk|cQgxw0P3}A0Q~Xp=Fd%U@J}9&?Z|!>dqTYM}uh-dks#(8TN&Tl>1N1H*sk}Yn zcjjsdX>f#YqYV9xjb|5L-_4|5zq9-x)l=_KJ^z!|0=~omNK}iZ1dt;A!C9A{?c-A% zsq6O=z#I7w6^BvwKM7oY{j69UE~&iDrf08dpja+7Ew~Em5nyAUyin%DH z#V2E^lcGvUD(Jefk*2J!y85?HAI8z1%ZL*F9mKyB~%S2R; z2gh1NIk+F|lNYLFKVXsRhfE5Q+<~*FP-tYnZu07P-GgrPtP#Jdd^7Pdexg&>bnNb6 zF}I>?A!TiIB^3x?*qr(1D>ozMuJ(4Uqzcn{Vdv@t{R4j!XW9)&%aoVwg`?}q8m`aU)|J`0ppm? z>7!cT+O|8nPvqZfs1Dm1Vhe~9oDLik+e$WbMJFmRkjt|hnHj<1$qB2xx$t7}{Dh9? ztS2A6pDTC@O06mxwgCG-ZIH>RYLuO`mN9)>U7F&=o>4 z(IcP}UO_-;3bGs~hUmroES->lW?OB4lg1I90-kt4q^h&@4t@$|BKNR#hQ!R9yht{h z)CX{FAPWlC+KxP8Tp^WB%gWcyW&gZtDAP+Qd1vF8IC{DM_<#1m-X5>b6*>^|U zw7%Wu8QJU1x(+WL{p4FdGJrQwHYe)$2s3tZ?LEVq66-4%bcfW2H`DIEb-RyHpSoq| zYdnvt#0cZk{^LeQElo=(>@kI-`wTUU6OeoJ9$UDhDYWY$NI;c7mph@^rL~_Z;~=?+ zYe6+Lh`Deo-7BU_SG@4SBdIvQBJsSnPZRIDQ4aVH3|%b5&#oiG)QC3qF!^ol+ggZQ z4JD>r?wN`EVtlFGZ1wV+_KtFq31n*_g1iTB8JvAJym?b+ei&)2#)Sa|zK zbHBiXlZqhH3*~X-ZIV`SE*L z>QDOl3^Xqkcqw!6iX|}_ekn$0{d{ps#X32SF|G zRoFtj9vS_X#)H}XW&O8ndiDM5`OJ$qv9cB4rExx_knS;vYEeV1^XD*#WTLs;2ez?L zyt(Yxc!HckQ(BQgkT>h-Xi8d9k3DDld)exk8wfH9n_S? z*w@W$LEiROr-#MsUEeKtVOw`0`YxL6smP~^-jRX1BffmJ48>Ds9z=`Yy31b-E0Jqw znYyl$Q$Ut5O^DpnpdX*DBbd34)+$j0Kq{X$q@KR6ukm}ITyUP9R@PYLv zPwRC{ny;SZ3GgrxChv~GN}t~E`V1Ku(9(+Ak;o0)U=poY%4cxpfcID3D}T(|OYKK) zkxw|AjB%XEW&lu74JA;EB;99Gg+=!#kjv*P5eTd1gDY2BMIwd1DTF;RJ{ae;v!@)FWZt<&sp(fh)d zggID;RxY{6Q{zf$7TqBNUa6T(ZO>)OvG3BW;`i3Yh;+;roMctPgVN zX-&1#&2qkMwr1)^U#V~b=b|I^t-TPD@U3Y9nJIVP?M924UW;fSKjIE^wouZ2P#ym- zm8nZKm(ih;SHtLCWghFK^3Z*y{m}4*qqtwcv-?>MpNj2lhym}4I`qD2aIW7C9EXHS z${!vRjRLHFlrUk43d_g14o!8K3#;n`d!IPCm&ERsgclmjJYzmrxqs7zQ|#(GXQJ+e z5Uf+Q@#JofBoAO$C&HI)#`{lb_8*q)|J9LMkoiwO{QpD%{);sHx7+`>sWtL%KJDMA zHS(_l?>`$O|7-64?-bj=toiRw%qS7D|Gr}TKaP>B;Qt$HJ!~gIpS+d!FEMfg)34+= zG4ceZGF>_5NHn)eeYCFXFj}t#G+HJoyE>u`C978m%q?BCgHpJQ;me6-xHj7YMOd)K zdEN{VzVF^0gh@(WWXj@tT$03Y&>Z#XY8Dy*sn`I(j-@_~pQfG+6BTFhNFx-Rj5)Vh z2_J(Kk;kKadbv|nx8+oo@b9r%s&T|YVp(glfod=y9=#=-0>|NJjP1E$yN96Xukkk&87z_3S@XP25fS;T94L z7^pLgW=SEiEi9k7gf_(us^)eORUgrFlflCE=7>sq9<>5(1NCt6gQY92BmhH4r^@!Ki4hv^)v3eZQGMp zu#gE_5Wyn5Bha`Ry(87g66XUYi-@EU7SdpzWNwe+jf+vm^}Z6ooZG51YJP#Wag(M| zzT^Yix(?F=Hp{*Eh*}y@^XO&|a?Bt!MqIFVk&lB`&9Al>3h^C6bwcb)hjB?|uG^|a z1hC-=w7c`3V2Zx8IVTZ83qvQg9hHzO3@Ru?Zrc&hqOGR0cE+w(&4k0VAmYEM z6NTbHai_un#M|jcn!#Vx=|&_26uhn9_4*7d%1Kae|H=XPSNe`c4lnP zAcRFWM5u{~=+Q)`rD|vmAO@ksN4WX+DE7zURqgwB3a(M!lO)oSD@JFGK1(UL+C`hU zmkJ{nsZ(aSS&R0A9qf4s9zAqrL&2^bHOhT-9Hk?go9*rFhCS0frNubADtnV7bO7A7 zlpN05##@0XG`UvU;Q2n&M+u=^5Mwda@n|mNQdVW7dQLN%E|D^XSf@Wl$=3`W zF{t4-XJ(6xdu@VGi@r^DJSrHuk6R}5D9jK9Lb2}CyWCA|RPVPqJ7|X4pZ1jUI!^%h z5>B(-NWIC|pjFQSMO%^t<$Q8Z&sFRAjpq1ZP}-PTv96U$?lxeA6xVF?*?rX`w_?6- zy{RrH^@&}eW`=qQMk$L2CY}y z(k3KPTv3WyeQZkXT}Z8bR%))}Pa5sj=}WX7A8q&q{fL2_i>}`H-`VCjI4rzmBMI!I znb#&7nM#|cw&FUH3(Q|`?WC*elw|C2XfYDN>K&eT)2Zq`6TT80xM+8C7S}IfcO9q8 zGc~0y=0X}eSib|{yV16C0cws}mX2WNRn$hMqsYL>XbVu8-(FxE3Tn{#&an1~pb-?= zy&AvTxl5l`NwsQ6=%#X?k55LU(`;GCkU@G-m?=TsGu=GihHQn-rl1o~1Ve*ArjhtY zX<>IPdsPe!^3XtdN(sFeWAN9>dZX61@TvP0O(`FG)l0=a44s^?Yp@F-Vd)YhM(>k- zM2aB0LLd#4J4Gkb6Ur!`J&VIS@y0|I*A|=5S^Cee6YnJb?(|7dK1!lf$Xo+hzm+5! zhYoS|xe#i@-sTQ}qL|mZ_JKeYq|HjdPc_OQO|`@;H%1rF@y}6X;RUUFh@e@uc6Go> zV8-G`&TQUGF=F5r<2LrmK+tdEkc!SUUxdu1xm-_q%wj&AfWGKfPsj>zypz`N zTf4ujJC45l3^O6qMj+X5yr=dy_chHZSpd`jq3x}M+J5wWZ!94|5-d=>5G*(Zw-zV3 z6^a*k30kO7G`Ld=6lk#E6e|VVQk>x40;Lp};8Jht<(%F9?YYmKJNMk(eg4Z|nS5uG z$$Z}OdhdE)Ewmu+Hz+^mCNzD9I_d=sEOEg>3oJf38^k=FW!)uKPilj~kg5jrmCm+Que{bn^Uj+WvhlBy42XJ1mZ-*1NC`MJgM7jVzVE39sx z4%*0lM>#`kCIL4M!)KNZBQ^EBjs@%5QiJQDu;Vy3Q_|oeki)ykDZKjJqBGB9-<7u` zHy-fAAR`EC$}~|7rB&*B1yF+@Rlp^3^eQ^CRm1j^7f7JGumDIX(K;sGcZ%DiSrmdx zG%AvezLV5}zd_|$fU*EY)1)}IGIDp&6wet=2n9L=oS^{KQYt5G+E?-2KykjVV`&vQ zi%QndZ{P-^Q0s#v4ql?$fGT|Xui*8QG%es=K#J3bptHfUL+pc-sr4hoy)`#CxaVe% z-=#Y|6rPk+wF66Bbu;$Yq>TqgQw4I@XlQMx9f3;=Yi|9)+ZzrgAhj5c+*w33)fQd8 zl;YEnSj)HY-40J*`h6!%jo=fqFK^cOXo13CwsOe@YW@&P7|AxB4WBV~FaJ(WhaKyB zX9_V3impxU?ucihr?r_>@C#s~0F?&!X`hdAo0O5aLXF|Wm^34Ylai+1i^_4}2nX7y zjDDc_l9uz*8`=Wr9OAc)jjqbWD?Gxp*>8(ai?fxujC2iV^2Y} z^Avi&Sx?uKw%UQU8H0O-o+&FZ)c_S0_2b7sf%e7-M2><@>F^|+^_cyDr`O}>avKvze<+^|cvaPy z7A_zgjr^yORFUqZ4uyITMGPlAd~RKy)EHNEz4U*blinLUc=U#Va|8tr_&g}-Lmbm0 z`zO7&Fjo|_2UkMU{mDQl z&2gpt_3dMBT~%^pUqPX{wjBoH7+zkjR34-{B{yd_)jS0t0{I-j!8i4%MaghfFf`-A zy|Oj#?o}u~zAWoPbQ@`P@`My=DaIRmmz!L{Y^79kgL4(XjEJzN>-QXp2r!wcflA8l z-X?8jWewliupFO`qIJD=l zw0D&-{p5`l5{Q1E0BQvx#rmy9GHj#pBu1vO$ql7`tCnG>c@84h$QEd49DygRO8>;P zr%zlW_$um~u@lU5w=>{gz}D2)?$YYu+p zPZDZ)^qHUId%DH9bTzbp#$`Izi)g9qd7hh(Gv|%qAivz z1&S|hV4v87{*%yLYDrQHk+IgdpS+)|qYrG@{l<2%U5B zGa7BmeL8XyZV7XidfP)+&8o$jacx2z%Dj#p)n zw8F!N&w-VUBjogSel7u(9E6F8@{#ox{%xJX3Y(K#y7PT^=B7>2rm31^3lyS;eNd!9 zRe)4g)=Ls3;y!oPXGsv}0U`r(6q@}GQLqyrLaTQJmyssD9ii4NYx0}l&D1rdS75h0 zUwY8K;)!`QAD56a@iaKEd)GQ=IjX-v`PTd$$mxT`Gr;@FyC^p4>SDJvVw>S3s!Wt) zQ|{j9Lg}E9OOvQ5OK!?1o%U`0(O_Sn*8NA3C6DlZkyJxu3lu=77o6m-?8s!Z98I=n ze$bQxlv0~Py0vwm@jP??fu#(Uc`whCKfYle9UyXpU_um%DQ>ezFvj!Y-u~UeFsE9+ zc=$=~o>Tz&U_ajBqZmv0QOXzW0%Wz%DJ~K$(rc9{o1`;%=slNZ^y}$YT#}9~OT32& zH*d;V?8&xZ>aL|kWMBd`C>6Ezwrcfm?cDF^lWcinK5;%YIV7$2q-5dpX>!IDn7sO> z17~LYJ4;LubONzC8pRJ+?n*;rHXSohh~4$`aiM{z_8%CfQ^SiOHq5 zlxWGtl;RhtLWLunwa$eXL_;;DfM9njo=FeGfqMDHv}Q3nk05?Hy@zn(ZLRONM}0)2 z_0dr68ZE0rk1sT*9X@zSFF7e|UT{j)@ll|@8+UKT!(mN{Tp)j#zV4z-?-Q3i=CM5V zs~CqGipbhn209rPbW#0LGdVWAP4{XD^qW~*{18JhQwd`w_MSSA5g_VGVuLsVcS&_O zJgA}+i3>ovUUMReM8JJ72#~JfElvy0#b&lw>PAr$sxi<9d2WgHIg;7`x@q1Q8 z$5?z@tid7%@BVrOo#j^P1psG>0iQk929IvZpvNjb`{&l2iu2^Y1_Xdi#Q;&w3a7DV z+((jhKBW>ZN=I6yb(Y15}M>d%6Kk~ZsKpO^F z6p?JfqnvMGTRa1zzKmN}C|W|B#FDvrWFFSUuC6xhAs=mYFAY8H@PG;4_N4{-bvuB5 z4=4PPJpD3#!t2i|J4Wjhh>Fp}^$m^QO^M;7E_`X}1tvbhro`|hynC^oVI{P{y3hrg zq%zx{5MELhcCS_TdAl3x^xHco>BdMbW$A2XBtzx9PXW2>QJ$6ypr>JabC=-6@PN=| zj|Xwqr`n47(1wLjT;4IVQuV%}TN=K`zlr(@KWO4OLl^fuI@T!m7clLJaC8r8nsi5T z`QR?p_h67%?Vpk*|1Ny}rI-Cvhx?zCCI7b&>VMzq{(IT}ug~$X>vn%dOaD{1`*)}M zzpUH+yHoy;X;b7stONbW{*ILRRmJ~bcDg}8I7vwXNd6jBt51TAkDew`6UeQKjr5Uc zrYdn&_o1V6kETf`Ar5D&q>?P`Co}CYU~-OT93XW>wfZ2g8EJ9Ts*K#fiA~npFzLpo z=K=>6_R+%SNb08|X%8)M^6&;fGRLw|LAk&Z??%tpaRGfO2G5 zxgUZrNv}ff79E5&PMxc}BuB+hoH?bmv6m;$R-6ffJ5g1c3%uIj!NyuLAvVaEQ=DkW z3VE!r+<9`E66^$AcKphww@Y*wFO*<>XPFF6~MafHrQv*yEB zRovZcQgsSa16;dFeCOOWPiH>AuKy6$&y%u#&?PQH1&%4JW@Tgn^fdZ0W9ss%Mqc|Y zI|)J$)?;WntCTn}%{>`twh|A0`%y_+kE%jqojH|Spl}jFM8}7fimizj31S`K>KoYZ}p|ki=b=QV4-ALVTh}1z-G}8?o6Vp2=3wKNM*; zm4WFgw>ZaepphB>3=T#*QCt7-Ywz!2?4lrcUkHkAiJ z;t(q!#ULWBrm=?hm&bf|h3HC3WQEARq53vcBDO(yk0p*Y=Tv>Mh10rYF}ofsX-rqh zZp)de;=x2t>(gN|e{zB4@0V`X@sr5NHoK$O6Wd)l_9eqv(tzIBL`JZu=8sHVYnX|* z&H3Cn7_?nEQT~&2QH$!WUG6DXz{o3ZEgsbY&Jo+3)*A?mobmTUW=;CH1DrF998I0B zxtd+a%Ns-mMyaZ_3J6=lY7I3R7M$&uLw<@fAx)Kck>J{H6CY*bNE7$!vid~6IC=wI z9e|YMv9~}w;0WeDD}#ky?akp*<47a7ymgl5epWb+UT#FyxA|Q+vy1ZL{0vOVp4K*n zgu9wD1-1dkJ>E`kwTQ*K_Yf*=iWdWvy zJ1bI}p5m&$&DvF;SkF>p(bGrQ94aV!l8;?{&KR0wF(a9+(Z>EI=90|NZO+kxOye!T zjxP~E#(G-NvAg1!p@Q?I>2RaNQlXo}H;J*Fl1ZN8xDn(Y1Jx+h{e)S$?fljvvA%aC z=X|AR?-^^Khc6iUI7UR8bIIB?On=;CX|UTAqK9<^pN^~aFi^42%!Q+=-L$*#NV{k$ z{w#ltTKhNK9j=(inIne&LKM7|EtYmF}@xxIoeb>R%1r#;t6RG697>(#99W>-fnc3(?g^ zcvnrJmCHMGnvsxp`Q@LLF~!A(b|u4=I{dCmjeav(E+gn!L021hftFuPQ_PPThJORS z&b}DG)EF0cW7RE{WM8?7Z+NGwKYo{9wQ^iRA?@in=e?=K?x8`Yj`#X>yTon9G+H+Kom2i8Ff z0`Get@-Xvx-?GS-vhdz#ue`%E&ZgVx<|uhme@$hEl~mUg=(>fp5n#NS@q_~jqHPAl zi$Tma#x8(~$9Ub{@1jb(9Y~os$^))X#TaFN;e49dvDR@5xK>8(u1f#{I7ygBAP$tTn7}#N$pLOE)c%3uMmx-tA^T7uej1 z37?Z&onNP?vl&YZse?aQ-~czEr%ndpT0>4*zUK;B01=nN;C$acaq)#eY3oAr1*EEOC3zQBfnedUr3+laQfAQ={8b3bOywqP-W=oA0OzUx$f6})HfZ9m z)JH(VYfQe2y#tuRFK!ygl9h07hxQOMjS&5Y9*vC|0VS-+HT;W zi>2AyfoPJ?{>$f1OR5Q|D-gtyaxj@L--hICp%aGmso9ikKJzR{h(Z3*j8gGP$?+R; zcDgJu6ZaUzX}n!ux~5)QX6U%E@Vc_C2OtV#|lpQ$KrClkn?nslsIpsrxPh+dZnrQ2NJ{+JJh`P2=^~mv%Gv zn%#~bWO?NUG7eKR(*oJ|34Jd>JL0L11MO2R}ZF+$LZLgu?%MpvWhGeSJKo=h^wNIwHpJTkiW z&KBodo?dx&28{cep)u?}Gv;Yvz`GOmkgqPiPQOh5L&MO+?oZzr<}}RBxc4F|??@z< zhCI?4{TOj0@MrqMWfDfed*yEQ<>ipa&xwe9v4igCEN!lGhCVQ0eT}OqlNsfuT^gKw zZ#!b_o4z;S9mM8_Q$s>J$*>;YXY-1;$<(xd2EZLT@G5afBYLV({gp>8b*7F~;Jh+Z z(WDB1k5l;bOP}>UP+Hd?vWpj$c>}APFR=a4%Gg06ho%h{&!Mnp;9#n@ZEAI?U)B0_ zZ57gp(y1ca3sopJ~C(@Ov;zw$dyl6H2+S4=L7(3!kDY}h}wwc z&9TGuG}DUyZ;DB;qtu1Fn9{^mV=E&E2%=p8Ydwtt=BZre74-SL9mLju_|jtjoTjw$ zRqX{}J@>Ru4%bg4IH(59$m?SPI{op$Xy6HtJP#xz|W~wf(E!=U}f-`c$%Yoi&8f73L7_eKeCn5Aq#Xg zcQqh_a0p!Y2737DClFb#aQbt>6DfFMA-z{S01o`!#uGFJIV5Ke)NUg9x=$**13oD~ zF?CO(_xR$lM#pC%4yyv3=;7!E&xTg7ESVK}-q2L2WgM(!y}&b7k~k0(zR%Bpq^n1E z8(7!aGqA@U-D;KgC5NOSGSSadz=r>nM#k_BwTg@3HZ`Rg(Z=c)2iR}NjAT%^mRc(T z09wz{2~3DS7xXb_rMoIsw@B#bA<-k_|F}-CAC%%IU!UxrD$m+`R_1g z(+s)&NTej&7WZW3*)}v!XTEt)#Ypd8lintdVlBJgh zGvC}$dZ0%86GhS?6coqKG+0DC$fG^#6O9vh*0|*g52nn>I;x6i^xHo20*S32CGjWy ziHiqGgZ2$8OiIJy^tJxG*M2`A}C1`b;W&|*WiM8K3j|5k$F z`mRs^52(Ws#b?`m=#33gXR@R2dfs4Lx^GWCP+1hqz~Fg7l4l+Z0LV3&?NGbXjE9{Ek2Rf*w@GqjE;FMHKxth$57g5j>Ci|na(5Ib?}oUd6RnWLME|^H7yDO zrG_vOR>-?DVIr_t_YHcbfzu+zV31d2-%Tk7_qrO1`Gl9qUu%XF0HVLaY(?K$7q($D zrOVAyrmf55y^c64&0lJs-OI-8lY3kH_;-_o6NZF%hLZVwJVrr-GrsO=L*R1!@v>jr zKCjHNr9*&ajkdyPsOh^*Pm6qSN-NKUVJ~Tf_KT|ed2x!;X_I}@fTOXO;BVR3SznDU z1fqyG_)y6V3E>Y5L69sE8Nb;vg`{C}gK0x#Ly3*#4qqtX`sDq;l8A1iXRaucaYsB7 zg3{xmGBGPR_#$}3L?sPW7%kx zTte8CdeoFmKE`$O&=>uhMANBMCTSmI1BT}yZU*MOW;1&jn zW6J!~U27*kZ^0H?ihy{`!sVX1Tr%BVMy6e7PCq;jif&E~i)cD`mWg{DpL5c!Rrurl zRIUk-cuEnU(Ts=BI5=!ZN-7vgB*yh`>VHc~Ib$;-0Kr>@1~{@!x8sNZ2L9ZxlW;Em=;fe@h#QX~}a+{TuG@Dh~C3>-qlAFcbgIH~i}X{&nf)uSUUt zN-zILQ2ei#4E_m~5cv-ki2smYB;_P!{$=Uqza5#v{1+or3Xr5i#5GIIse~qO5CLEC z-;566n|J8T@KNVdMXt-R*&Oxx5HlsC8B+pdO+zW){jI)mD@=*+$?eKpf@;J*VOLbb z;hOH60WX7_fZHRO7?A`|MHq9PdZudE1wzKIsjzTDGPM!LKCV=v+CCY;0s#PeV!87q z2K_Z(oko^bj>FiFxC7d;1c9?3&5BDX>~L3F5?C$samHDDJd|_y5&+pynU+dehhYQ~ zRBTzVwkuR>WV}W~8z@t|jk!Ti(FtXo^}>u8Y*JVtE2c^xQQO-StqQK~QQ6&4@{3%R z*UHE+mWUJOzPGMyzCadgrb?ON1%>#)RF?AWoEjbwf>}c z0_R~qtR)#WFTm<*s8s465oss@7!|_N0YA@x)yPs}kFa8b!u0AIk6CUKl?2$?QB8~z z74yx~Qqs~^=NxcW&51nqDjGQKeaoE=xp3tjZrVQ>YD!ymVi`TUk5Ft7p1bR=*W7u~ z3C;SDETK2<;f5c!2#!$_nUUL4eL)%K!B*ny6k`%yQ?sEgf7a)WjTHf0HF)ulU!IQ1ZdeJAn!iurbg6spSQX$< zDP8dcMy2Y3Q<^M8e6X#C&D$7aN^=M?NMfHT51eJE?kex3oxn zIac!WE&Guk&xLy_Gj0~g-OzTLmci1TP4xoToYmj`yJ5rS%S+V#pcmtMqpzP)7*lyC z{Am_5b|x07t<-{{qw;)SYDZ;#oO9oQYck~@b}85C;=iNw9ss*WuSTfxrPmy94So60 zG^9>JAfeX4+|JkhP^ntz@nfA^z93~woDkPz#|8_pPcLkKOMfsjR9(Zp`1atu9iPi# z)gQ*s`AYH2JxW&i1YmE=y_d%;1})E2I&Y{HH`^UyiZuZ+VITkw%4X6 zA|q#M{?i=0X5#|@NhFp=4U39B)-{U*`m^i(%J<^YJ0Sn*r^%R3*? zY7^#)@!})T(tW5T`Aql=wK(^fzlq4jOMK!ZGIg(Muyvl&a926hN@jw zplQ8o_UA-SL`tT-ixwzl(Aw1{k%Y|DJ3A2(GcqR-8(GY-{^4u#^UO;v=GY5o&2H1}cGjUR^8nAAa7(IJjt| zv>P$v+jdP(uIg#hfR=!vR)q(AKtCY_Y8nvCI6L-ow`R+s@ka)5Bi7AG(9UkhvsYqC zF1MQGW5Q{sL4F=mV?Dqq3FN3_s1`}9b~U6BB?rGo$v}C%-~MTRgoHF|q;?19Q8{f9 zWKh7Y@F}`aVD?RC`8lB<>=dCZO7x1u%J{xZ4pgbxq0@Xj*lEmJS~x04qH+VC3XKbl zBCl({jU5>TLirl-3w z2qgv74WZCq-=umX4=ymefRV~~{oWQZgMaCdBelviG6<&u9^20k=19SMK^Bsa8Ea); z4pv>4S}8GuqNje`SLGM>NeRN$)_z}vJ$YjrYFc>7%$Sju2VZidVaZjzYmtogz8{p! zq4sKK`E){LKNErL&z-wC%fkx9zxNGQ^geZZHvc=bJh)Spi6aoQpXjgB5&qm%>8=rA zf!}wW>G?OeF#~U4*%)u!v%aM^?$hKD{>MpO8;BE|JzwFd*OIO8a#`(!_%jA(uUQ7! zc%%o>y9kG8Fuv0mIZYD+@Xlm6nlXhOUu3(1!Iw_Cg-nJ{Chq#E4$;28Z2wwAJk53X z*ZUF%44y_W{Y|v8hn@$mm$I6E=8&DM%{CLc_q3yxT58^QQQ`5AjH2=*1%_|j%BPKz zKqiLV^1i(!_szZxloAtZG-8wfUcflDhXBA#k+J2??eXatIopn&TcSaBoix#V0(qZ8 zs#r4abbQanhk?RQTl_N7Y_gbl5iZugmj?Q$zKTN3b)@&BMD?N)%k($`%=qp^AAiyu zF<>hL{Xkb1Bunjis0Z9(e0t}$;NIl&R+VJgdEw8{a-p5iAuBzK^9Hk|e9}2#FR~_Y zpgGuX-&3xC5!%uCRS&L(JZICsG1Hgs4xafbGmGIv z)4flkg`NTRWfeLBg8ap)Kl)6P348B(MU3M5izWM(*wtgBZnk0`FWe4Mt|nQ(>E_ly zbFu|D#5^jeU=P{aqG+C5aWc_WC2affR;^d*S4p!5x-E7*otigDWO?}2oa0$hh|ucX z&*G@w3#XyU#s2tami9icFW#zAhc~{(zT3)feF){zjK4kf5|vA(%y`#(pr}r~?IGPo zs9);zmNI@%q^e%cLHqtIhiHRWnUx9?0p=YO)gb`i_Rlh52l>bC^LsL(-JGPMbSTru-Le#RKc27Vgr6jKZ<^x2f$zR=@!%Xa{L^APmVCi(dBB!s zdVKN|`7x{>Tj^iuy;?^RS#y?@MK~6J2vMp&Ze14Zyny!qf=qQBAPl!NlyRZ%LJJj~ z)}Er@JcqJ|^)bRJp|0K&8xAwU;6hIy%qaISQ89FPA0Z>vi5$M`C0sWY3&c`>`QzpF z=Xq|WQNc$sC5p%aNbpi%FyYB!7LR*Nx1H&>&A^k;x@B z^^sj2HixuJ*)qh}@)WQG!B)K0lN8${B)+E8@6-z?rzEA^+^voNaE?Q5SncQ%1J@F+W2|t`jl`@lh!_6CbF^oBE(4(rVo7B zHVx0fnf)+E+NW5DYMM0)>Y!=oyjRbsvoh6z9deVWGz2t-KJubc*d4F_AGOnU7M}i zZCBa&*VXuj;#r^~X+rtofzdwU2)Y?b!BIhEa($x}I+I{kdZdjABKQ3YCNf1PS=Vo0 zT;czbS;6iZ556N2GNcyYvyd}hRBQnwgex$KF)f9^B(Z-B&zaPHl>$&^%{;XZN$Fdz z%zN5?C^c=TCZa*82~&okf^-FkYc!2*rT`6T3`Y~_kHKT6^?Y{TU0rc@=9zJ}p)N^@ z8D~<5C2E$KG9nOv2TQZYE&t~{%`5ve8^mXX3-pC$QhRA^=ay+w#QuH~9*znz=h zcDlzdSuB8iNo5#V4lb46L+JK*h4_csO`zUG0dnPC6`Oe*aUbDEv>-Y$B6@3em1Lym^LOR{Zo5EVO^hwnt%}Y^ge3aP06B|!Hxlv9Cws+XI*sX5~a<=ht0YOxE1!+rK#ZUx|oSiKao6YjfT4@PZ{hU#GV76Wg+L7@(6-?wj zp?&~W8G(8nDBrq8tm4Jfu>KR>=zRef$>9^o5#)Z}<|q6^rMz*=OF_Ob&F;j0@MLhl z0j*54xyJ9tuSGe1#L~;FA!~?GQ(r3Itdcth*#7c%%Q}n znOb3W{>0XO**0WX6JV`3*A*1i=d`sZ%{T7paxaZw#D}EoNlO*n!SUpAE4pHPHdI~S zdenC6H4f7CcAOr{FFLm!R=elh@qX?OFw++DPR_`64V+(3Vwy~|8+Wvl49PtMHIzf? zJ+NmvNF@ug+Q6ljM!|^U#Kuw*#k;K9Q*aiL5$!@%2;fo>1!n>o5fNu(vI{4S5^l-q zqGn2dtXpo_xh~?79LlBM%)OznNoD*pOG{lRx`+{J=7H4MOZWN`8_;bVL;}O|pS{o) z(05oqDf{+zU`(kzOj}3e?nWKBycku+B&RL&uEDabbkE2i?G`x$UY+%+1_Ap7q)LxO z_(YQi$wc~K0(~#geTZZ|EioD;VOc1}#y3Sxbo9Gev(QYB;lf;C8y7&K)rkSE7Oc5% zVNq-6l^~wW*b*}R-n$J6chW83N7Uwy`0Po7hr%_g+!}LkfWNFtI8{j0dHPMPnQl_u zP2TWtyBs0CCceIKqj?u87@I?6O!004aIHq{8bbJq@WNL~$K1$&4l+RgLskE3q9D-U z*~~TgY79ZlSVN0b?3Qa-Fy}vydHlbL6#oM`kpHbd_AiSOl7E%8{!@(jcQN6=ngfyj zC)6?I-`?}zrINqI2=Oc2!vBvs5Spt11{nAs6A5wfX*||WJv9j!tRTW>Ez1hlBwL>< z_d#%F54TDb8aCO&EE3D<0_fVMSg(G;SphKI->C>FDL)2qJPF2x`1R2>3PD<)+04i# z<{JQGE%;R-Y>zzEp0AJVwT6p0O9G%w;%`K;%+)6TR6a>|K+KTK-Art|k1X>xnnf7M zO>{Tfq;=smO^Y>#8A>ku&25$ zs_@2vC8FtxK5nlab8d&r2Xb@^4EBHL>sM5!!dED+)`=%w>Q3fRm>kuCq)u*^NQTCvOZ#1j0 z=1o0()kMB)#%G>y;3U#5O~>S3k-_Vp3^!4L;QC#8E@BNkMSby7{c&~SSGBab19(_J zf;3~FOVaCnu+-3;P$B;I)|CIXv>C6YKPL1d_gd4^rNjgnwzQCWeaz; zp**#!Gk=Nk^duQXl&0L)&-!CNasR<<3|Fl%bN}H}V39mn;}!xW8c3K&s@y_mXo&Wa z9EvBh2Ph)E^qPgJ?i`viM zqd=uvLqhfKj1{?yzBQE&Qv>;wl+UNZkf^cL*W|*C&1)(eKa`z|ik@}N@m$Xj=5qeX zA;8KW)tq)4lSt4D> z8;djK!_1x8;}H*0iwc+pnr~4xw%%eAEn;+p*Lbe`JSbmUv2s+vQU-!j6}+7{8`cB) z!5E|AlOfesP){oezq?xUHOIU>c`>^xo4vjbxaF%Xtc$}R_ZV=&6RYwyt^?9;0P6};C((Y)WMT zUmcAbfwbJ~9=?mej3k+vc@L!*)dBBu=CoVW$pPSFSzD`=5^wKyP)51R_BubKyjD__ zIdMjl6D|VSR1FUXT7Zfza-m>>_m1d?5o*kQ5RyV(sRO8S5x1=mB&Seun_z?wDkGnu zWXn8>wtJlQQp_+0px}OMzh@f@X1OKlo$#i!)A-%zEIoA6c=?a6FH%!eb=W6cbeb_l zXib_|`iiOY5Azf4cuDe9DSH^ASn|C{Qazu`2qTts7770D9ddd6bmqe#b&1MfdAUQz z`$oebq%7~<)7(iJA&JXoU!>xX>aLi=ydTT9>cu4|N@rD)Wku7NR{JA*)r~0z@9<0Q zT1eKf=xhEK>dnxknB%)YnIE8D)c-1bX5x;xH5s~!Yw&Rktln(+5pvgOLZjv*Y>+&s zb36eeMwsEc|6;&{DUM7`)X}euP7@)HkQOB%)jC zny?Ge^O26`nYifC0K4ZVZ;!llQkxQypNRf_XH-&uzOWWRtgjR=zRPUo8&JHB zJ{s=0Ex8aV0Idhytkf8zB=*u2*eNQAjwHNbdSmC37ouCeF>}|%R61RkL0l4SF-98c z(O=TxSL_m-b}BBQ?DK+O`iZJ%G2?Yz?AV)+&9mX~(mdFeSWBU_%cj6|Nm|7VtvN7U=AI_{fBZl&4 zD+V|k?;NS42K0Dq*E7b`xw-Cu9jCN4Ql{u+612d^E#2&b+mBHS&9x)^kJ! z0u^@3^4E`e+eES~8C2gy^w8!mEHkZiJLKB%GY*Ht4!_-y+gp_kRX^*7d}BD(K!@n* zL6836vZ@>I&%IoQEytLpG>%YTDn<{$(oX1*hsadnJ6R=OhEGxvk!;x{+5sAkllXq2B8d;gQ` z@`M{rX+r9+?syjk`iU@BoM2Ght0tct-V|}+uiIRqO;)AM<+kOWM-4YbEmYNxtma&N zqV9_beF5fJAhpOoW^f;byjZyTEab5nyD8nN!SWbeYu(|90e$yixWu(Zj-l(}qUBG1 zcDI*#hDpb`nYUh8sYHf5xRKIEQb6i3|Ee!Vvl!sG=IRT|xs!Ps6sit+;q+a? zsezvUz)6i=E%!ZKTw|i=8vJHt>QA*`RK@LfjW+h`(&nUypIv&kUgj#-chqImZF1Xr&9Auqjwox%5J6Y(FoI*MlITp)^e&=n6t2X90SMh!d9b3=VVd!SKo>L?b9H7A|N^(>k!u zC3@K-q$Hl;;&>pVJ-YBf#U}|xNat}%7Ov_d*gDjw$icC1Cv^q=(}YxPOQ@y9cn>7O z!t?PD9CxrLyo|akO9+DXXDv!~68PKnUM?+aX!-~lS!nad>)(3dNvBwW22p_kGG%8* zAC~zl4sheGS?bQ><1Tpm9eRIvYK^ony(mXaDaN;SU#$V( zn-nyJ^mnW3C&}paWen0h3DtbUFi=G<6n5Y+7}_MPEE@O9VD#bs~KkHcVJ_1 zVy%bub+?SrRyhDfF}sb0fR_cg>s(#3Sw*@G1`I=tIYPY+(fo$%gY#@!M{i2o1Npt6 zqSqKQ-FErf=FqX~{K56&W3l227Z6=_wHxQvOIh4>f>(2Y`iHH&|Et6MKf=WL`(WK)pYUJ5ss0Mm z|8-MI{QNi6|q@XQd(3}Tvl9y^KVao z%Ok|siBn4UpHSrf{+|Een@UdVU%#pT`v$Mte~pRpKW6au6aHrK9?xZ}miEiTSOP*f ziu&C%;`tZ$3&+2*KC`q&z6^?cP0IIYd>6*_ zbFr{w<^q8{ZGL)eSvH98^!0Gr?dtLHTX{1%YRxLr$3*xFHMA)l2hbqgGUG^_mj-VN zp*Q8*jTDwoyQ0+Rm@(-emcRF=30ZH%k`lsjW@Z&fm9zFXVwKhJ&D_{QSXupnTAIcTy)}z) z40aj-bj;?yjslN%k2PeMA6$Vk)RRfyijwV~rBRJqzi%k*#$|^@v*maraTn@YXn|PHpHA7I>zjC@q_>xQC)5)6g5LcmDx%UW0 z{I#m%P9K#gH@FodE?1iO>xnA1Tk}5bVl`EVj$kOF=&crt*zl0^36!C)P zFE2W%8l`rP`nyLAf*B>AaEEPp%(W4}**uRMVVJ|XB)u~b1TY&~G*w2aw8=oY8A;@+ z;e-J>Bzysn?BLFrk%PvBZM_7PV9|qA&f+sN;8&WpFKzO6ZU08#xHndI=BB?`yS`vA zdrXR2k%ivh{@qO;F!2bRQg~DxWAi;#zOH&6*ulLcc;%Oq=er>@%)IdatSeS8Z0mIm z`qt$`=Y~wLJX?Ig$I>%2tR_tLYqGx^r8AN>ZW$dIx6d*a@c!#r>NX4{y1W<-{Cd!& zJf4Fv!C=I9-tFi;Z%JfDN^o=2e?-?K3a6XN^>>JW-#9yPz8;mLpO9ZFx54y1xzt-U zzUn0+aF1lBqyDb@cN7kO5a*D?c6-Vgrqa$?p~oa8ieWl$g8A6wj-CRD-_ggT)Y!O` z7?p;byl=GA&0?oBV~EOkpFN>FpHb!2@swJ8dMm0#%mrWjrf0>2h*%pbjWGz%Q9b$y_*dT|_L51)N-pOqNJ3 zBbPgbtqFl{h)jz!YLb#WZwB8FAR5#ntqGe_AQn9_Cd3W!GtQDgv{4+A>ZH$koHhd- zk%EGQtpSKtBpg6N$DQfUiKmZQP3-PYlFaI2%C?$@42`X-I~@d@aCIwdAr-{(v#G9< zX%g`Zgl^EfO?o3zINqR`V+#hMSU`Z1RvfCxBEXZwnYzaZFg&QWs4PzanOz~FuVUP7 z6cnyTJH>WQW0EF4coc}|kR=t^b{a{Ml<-xE$!AOemlsZAQ5^AoEv3c8g@>MI)lw#{ z28w#60PH}PdUrXOwtDFYR5wD91m_37meX}}48`2Xf5@xnId2#_H7MC3x;vFWAJu$X zHpiHQht+8dP(NHQ=v9`9$};tCQa+6h-({^V|E88g!@^Ft>dIB(YaCg=sSu?5*;LWe z5FBAA_%#Nm#^B{gS}6R06#689r3O7p(q?k^T|%nHP^{P1be3);4y8BcSh1M`E! z*Hwd-LkS0jIzBh}d+sDxn2D*%8cSfw_suw0gSAXqHvEj$u`+$P6gA`x)wBn*y!-F- zyq4)wwW=@oGeeXN&+b*wgq9L;Gc^T<9Xm*K=RkE-Ai0rYOLa5KENb-41AuD?&%16= z8m-9-O!o-;Zd&+C->6Ce-`cxbpKpByvlx{Ak7vP_u3{e^*6?p|_6b1I@H$PXN92B4 z8RA~eUW$A;$NjeR6Snn1WvehAmO}6&?WwCSVD2fUtA2HsBcrPt2qRf^L1p>jP#i$q zKw5l0b06zDHO^;}Xh^a<4F&qBFIploN}r0)Y9H#2zk&6WeB_!njGHnYubi1*HC&Hw zek)LT^ensuI_AWqveuzVY8^&N()k%6MJSy9#WI-lVL|)sbbB88GVTN2B%;oBqXo{L z@}gE&U@}FjbcfA~Ma@HH*Hfw(Ib0-_`m%#}&{u7J_mmzw5xMl1JZGp;n>bQ-K}`9% zBN_uEj_7oKZbnUK?3{3y?NvQtg3Qch) z=eJNV+4&gZzasW=^Wj_N{%pEW#CIaD-BW$SZum$*%1Yg)OYRzXnewxe;FMq}?QIQT zsjo-40>FxUmvh-TcGC)ap4-dG&BQDW*i`3jJIJT8zaLY-^D1uO?fDHzmfQ--qoLas zj%`0QYR|vFI=`MfeZgplcp|su!O?l~n@-y>jac=hRbEf`Hrh6&BYfuYt_&HkqF?eu z;5>!&P!Ux?Np`d%QdR={d1ViAz0i4YS2$(Pz;r7U}%fTc<7SIOBM-!B^WZjtaL& zr$R~@5Bk-R)zi?Dc3DfQWf%Vhsm7mc-&@a-+=8V6`>}yWy$fD0*~#1b0=k~Mu^S_Z z!WhO8b?EV~LN4fH+LbXWgRh|ie6&Xc_GD_`rO8<}O%%}VA2vaxXWr%`;9kC zV@q^sMyZz+O3!kuvUHp|fAOJxh;ZuV==pk$sPr>r^4Wu-P1*DjWK2?58RP4+u-RnB ziQ03J0nWd^;Kl)V!r(?Eb#9279QR)9IauqfmNAvqt&av_r*NewsroBC*jad&Hg{J_ zUoABa-SEMQ{E?r+A)j`_Y9aMIjVffE+8)3VTnM3=NN@qyohb+s_D#T@qpvlvgNFm6 zH{zCXU{9j7?fRj?)uf|UvW3{Vq<{u0K&d8!XI&x5aznLfOqF5m#-LhSXw$?!!+H*= z2FkEjxWPM1cWBwfh*ANYg^O`gYqHng8#970$8+OFBd4N#Q&N++ufE{VYjhu~N3JHQ z&ANSJp4MO5Sze7lh}D%_6N*ga$4N5kXv?3f=~2L}mctHnH5>+D@ntx(}C8ui9zIRMPg zxil^&Y_fuxMg#Q+mCUhQE=LEP@s)>fQr0%I+-zniiF*RqpVB)C&OKF0tgy%Nb!QOd zq{~h@Djwhk!$igw2x)oc2@3K)jcWd10A+|SAwj2d8mA4W5wbp^fkPSx2P6->V8gMn zQ$I4})`{E74RDjl#wnbx^(L4Sm{}@;u2DLl?mW9erWo=gF3OlB-tv$jz+JVoioIN1)i%eYWx?d4f7~Im^S~A}vXbf2~#@6}v{jlxfmY zLMkH?WDK07QmOf0)V+03+ke8YO$iB>puuSi1PKno1GGqR3oZppaS84%ZE*?iQlPlI zTPej|QlJzl#obCNrSfZEcK3Jo?9SQe%${f8ch0>3F<}Cq?+n9auFrMf_v9j|L?=|8 z*NrbmcfG$Qm=7`sNrZo5Q|+SI^q<;MtOGC}4Jmp0{8~q^)hN=;+mIUA8_!QMq#lYj z8bs}_Hv7t>QiilNOrDjmlBq?}hUH7rm}zTgA(BsnJI*_BB|y5FW~49_q8T zv5G$KNGxk45Bhw@$D`)00dc#4cmZb@zs~T0ihN#{xqvtQRt?7Mv>J}_W-RvAAC;g} zn<2!Z%LPYC+UZ0I18lk~%!n{nF<8Khz3-$vqw@lb+Ks*ZRd~}obWFY%PKH;)N3JY~ z+hBISpCiXPRohE-vOF1g*4t#QVWCR{>&mFNa1!Gi7DEWI;!Ur%K!Y)ml#kOc4sH3_-)oVntJyH>g@ykj`k(~p(TZH!8VGTn+`i9A z`+(o_q7uW7ednr=%q;68iT@$xl{K!NrZBjaTk#knwqG#amF>hO^Nx`(4j>xKd?XAPW3mXIPng-+-9+pc7ezYq&_N-2yUsH+#& zHNBo2ECBqVR)34<6I6P7*wGdsv?oDOp)05`Dm2-mUCbsiFKE$(vsO|Nq|jI@u{2 z;>a0q{?ru%DYo4tDM*#AH!23*VQ=s&fX%EoALj*LfK_0g;mdY()ID6!CHi3lS_;dSeC)eDV>JI4K;K0D6Mx{pi45uU#uJs7>;D`XLm;z0 zAg=}Em95r%iW;^N>JX3+#2${`D?mHbfqXQ+Du$qABb0fpaZQ|ULiGChy;@srH=4Rv zA;{1p)SGy&kh+4QJ4`(Zs&Gc{(K33{B0yi!maD=9r0TG()G&y3WtIU1iGP|o6P03^ zeiN5xKgX*%;~D||&?Fv*Nbke|t6CXnFBzL`X_%yTzUB#X>j z;M1Xfc)uAn#PvTRQK}LEFpSnV-&Cbg-%}IgF@{R6$ZF0ySHHpvD3aSI^h*d$f@d9k ztJ7|8WvzR8^+}9i;r-(9&mYVt-^dS;#*6acWwUBZWesGg3{J~Lx}y(!>_5M# z=*cIIJP63=RWwmspo^btf|L(W>EP%7tQD?`ZHV-+9~(Ot1g@QWcMLe(Lxw256jrNo7yAofC7JD;X=Jd;51L`D-QuIg^ z?KNvvq{{3kRxlV0o{tI0a zt1jpWl_yI2O`>^6jeDs)pB{XveW03zB`9iZ!ZDXpwvnk+Fv%2GSiX@nfV+tsv88lW z8I7rWHWfN4=~t!P?CpRn)wZFMlzgS!4*dKPj?gg7p#kZNhI+{guuoU4P+l$lVk$+O z=<#Z)ORC#vtAk?E7BfSDxhnOe;3hRpO6jmb;pEnwL!sH?4M&#Qo7C@iOzMg+jeC6H~0 zf(|%Y`LXhpIU7o$PT}GzD5QR+n$x5B=ySP@Y6cb`uwC67hLM1l^!IFLe&p6d+}Tyj zPCwKOaRL1R4tg|`3BoM`Dl#d`qsLR>_OjKeExUC6H?y;(R|FJ!o5$!~alBjJNa&ls zS+gxgpRII+fVeTSjXs}9JlU=OK(rG6>4w>;wxbtRGNmLZ??tR18PZ1S2RZ#zlLN@7 zVoGCH*D@Lf_iUi2H*=wIWv$FnEKE9RZCzb($+0F&-xOZtxr3kZ2x$_5Pdo$9!a0RD&OIVWL6o=_J)#U67 zsLf086$}r1O{2jXLlU9PXQ{Io7)s(~tH-xL9fwdY+S&a4R76RhWKim^%OmDnFs#%* zz;J+ub|9e0O=;~OZ`B(L6LDCD>}7=wMUA}6i7{~TH(jc@gU21dPLj@z*9E&14^+Lw zhRhMuL~Q<4Z&#A(N`sq^R>b6;jMIrZJYSilKFED>Pn_C>fyT#Kmrh(ap3{-}4mipI zLyC##=lRMoOjN+Seb4%<+fKW4C$D9QZUnGIl2GmYuJ>RpzXWomOqB&};q=kl!87&t z6wz(h4fBCT`nrBc;+I>@sdLd@iBjd?_;INBlM&D>)-q*(maG8o5%9U)kNYL%kJf`l z0Gdur)``4&yQpQJ!n`S+@B*xw>f>FaJ1X|cv-^H;Z*_G|D?2v%=zUA&7sjeh?p9Ze z48m!y);>zI8H9QNH00*oUD~6C=w|OtG-X^JWzs@+Ps*|7cSiRO>`&V*27~(+nwS0h z4ccWgY8MWkA6}F`%=SBg+?sGZy}(7x=upV4_`^5`Tl=WVsWi{|R?L}J9KPZ_c?=;T zrp7K^VsplJWh;J*?YE!P!?sw`<9~b@#IH%N6M5Y;3S=p8F8VYVEDXYvE`V-Kcg8Pp zF?~k7wzG)s>`>%=3S%rtm6{cTL3!xuX<=KOrGcR(f^eR^a)I1O$dDMKLP_3x+mIQl zuO^1kO1@Usd6|0ZVy-gO4~mz5OFh8ZR@8bMPXHDwMGaXU67;HywyR+&LuPBlKIfd| zl{57y7K4(u59azgkHq)hH|vtBh3v^5lbuYc252 zx1TRk4aGJ*W}K6MFfA^aO?IbsFlA{6v9+4^l3xfJ#4Qjyq>ArR?eH(j)|q<*J2%#6 z`0gWrMOyaCZ7-|S@5b%-O=0wkpREPYb0>Bv92ZQ~p3Z3r1GG8chBs9b^bqr0)@q)L zmopLIeZFx&-yQTJtm~9&pAw+u=4uh&P^0t3lW&i9{Q$0@SmYL|4PN}_O#E_Bwe>9e z*;-PN?@8PT4MjXuDj`Ks-Y^+AA%QZ1-}l-MYR>#w!CqOHnINPVkj(edBgdF)blRn*;#|klJZhX^9s5FIBtD4zeHa1Sd z)22>M@W^raXn`3RrH0pE=jF;b$2XX8@&d0irJOyPh~u)*4z=e}#RlLs)CG+s98ZMS z5$_pH9+*6_+V(i^8!PVum;I7SmUEce%^I~2D~cQq-l0s|RCfztBMJhY&QQg-+-v|y z+JEQyB;I(OrtHCd5B3ZZMIYr_Wj)biH~?X++%AvcGXtnMPG#{1WAus5^sR9?0jtAO zP09XZ3QZy-`~+h>GlT8l48xpGqwlCNhi8f%>(Mpd_PAB8>n{o=`6@Tl?s0AvRmibP z^F3zUNU&eyuB+ChcnXiHTaRZsSsV9-2L+f%9o(eUpjs2dj=T3pX%gWZ?hnrDL z-M|&0@R-P#P_y4t0BMR5l_6Q~Y4Y;9aOI3DOB;^ow!OJ!u+BPp3&Sb$XvPszEsS#aDe#=p4I?ac$*Z?O-gsw7DTEeAOi_yEjpOF9U;YOCDFe>W z!P}$wl=N^yvllM(wq}Tq<9jK;ZE#!&ClN6vmuN1a3OAt*F4!FlTb52GnLI92Q^}Ao zKv!DVVYu*>IK5oCOGQ0Xz9~NyZ8lM?9ejm1jEdD^aKwl>ap2YaEzeDxU?6m{*6Gou z;>QL2B5COZgQe{DX$tj1ilc$&LeImhRwFMb!A}76NOGpm9d$^|va70=~P z>nE%g?e{TyZ89W(=LJ z@^-EAvZo@yvY_j#m2I}|$p!{p z`J^?7ezT|3MgUxGlUkHct-2!oQZ?!Z2ITbtBz+S-xm+%C>v4H_xO3Y!@xH9@szj#M z*4T>K-i3Q1E~D9EEC-5+KK|)hbb44 z$g!k8d{fgEshQDVr1J6|tP*<`&T>DF`1=|k|_DCU6-!^uMkB#ECt9nAlN zK7qoM$6Z>eQ-8709QsAiuUxP7mh&kNjyL7VT_*On*axpYz!`hvSeOpY>mOmYX|H^#$Z)1jkGT{FuX81FM4-wR}^LF?3va!3_uKqKk z|Bq98B7afT|ARSei9dt$|AZO-L3{rnm_bZfO6=dp4F9DFtf_HSEeB@{65q@2k*r~Z%b_@ ztHc(-5!qeY)X&q z2Z)vt5d#Gml5i}71lLF8Tz{*t)|L_|0m*6Ft*%`{OV`#hrF6#?s@k^S2ftk(sY%q6 zysEAC@mh?WVClax&TFU{I#^4d-;MyVZLUO++2nS|r%2i}^3R~{M-y2!U=$*}CEh$T zCyrk2l2mDr&+o@GEB|gebaYI7(d(O-%(|d@*mo7h`Rx56nF~OH`cqV-)hS$VKiHZ%@*I)R0J>Gefd1eSox-)=Hnror z*8Ycb&jNV*Ng*Ney62M+_5PMs3H9r`Zgp+-Uq?0i1SRXh!jg)EW`Ss2HxfooCgpM~ zmR?G;*{75rl(Y5dZfjxxhx(&J)G{N8EVkkGag9ySWDkIYzvk7Cvb8TR(n7k8c7nmf z-J(Gqp|L7Vh`sv*i7sJj!lVo<~b@%zmmw%MPx>*L7G}5P-kGa%ZC5 zOVIO#an|<99hY%nxzg+6aObc2A#+dV3XnH$&kr(sPjA*mihC@!NxJhSo@!~ybWzVr z%vfbWCoH|aeggUQW0Yb?g*iers+EOZ1G-k7McKe#Muji#XmE)ZX47`0rAQ(`N^@Nt z>?_a|-B^{8yt|y?K|jDTLjl@5Rb6cz;Orzg_|2<3naaPR3H0vIMo<1=m+bS&4cGT= zj9ZtAT7F=$svXy;EUTp7MX!idv2$o-g*mj*o1^q4J)=iQ-VKJ#yp4<96_8bvLo-dk zNe%&_L`Dg3_Cj1%5!|LJ>0UCBH`QKZaj&wP#r#GrHC^sgNDj+Jb<^E7_4Ji5eU&ef z&TH~G5L6Px9F~zVxR^spdec7{m9%>sz`f?6O9bR3BZAIWJybl znUWdaag#h+YUZOI*85*98xNj;DjinvTQ`p_@Riw9V$L7Q2hSgxhAJx^h8dJ>QzIQ; z&dYb>=Ma%NifkcRaZfYUrsN+&N1uJ7BxvyqpJYf?wa{Cym(HYEjP(+Q)$=@QH3;&w zV3b9U?r)6YuiWC^T6Np`r47Dcq zL-hAO1eR5*?aX3X{PIUuk%SLWC%cMVI>H5XbZmQ+yD@S^nycJ{v=nN$ioK#T%xh(^ z4}cFpdA7|GpZA-HTRKs;N2jsm_s~T_@JqxUG}3@n3KT8e`cMmOx)nTit(E0ZTBhTwUr4oU4VhH{QY(S=dh;=|Y3p7S z(LYlV2+f<5YviDFgn9y3(RSz&epruy?k-xOWx0fU6{ z!isIP5!?OSsC_D6(SxOy6`a*N(|)o2C#>J?E+>6<`Kaz(p4HrYx2E27dVQcdy(c$( zp(V&J-tZ-^tidg3bO%2+V`WQLt_P{+nx2wZ?n7{|KeIF6X-f9#oqI(CUoVFamcCkA z+{Uz=4sema}g#Ay*lMq@_EeX^sX7c}4Hk%r4jHN$At zlJs+a@@Dl`ygyhH?j?}!E1)OstB_fB=*zS!o7}5YJYSmhrZP{1*omhOR+J%li=kOI-<7LKq{Ndr?{t4jqi2xqwcVM zk+uuetIiJ^tqy=TPl=WXQFo+V__(YToLQU<4Ia?%Xe_9wh}ST_gE9(1WRyvxAcYTRSb|{89(Es%-*@~qv`^^ zj0GJ{oMZI|kHyQ^c?l~Kv+~T@f9%QCksZDM(L3V=@BIN|`}{tEUNz8RezaJ@o z3vQeG)Yi59$GV=u(=@~VyDFSP4a9fkI*ZaY+>MNC#^mxG_kaf?){{^2siSW%GpF3M zi~JQ?bXKN2|KKy7_PT#-w|8AU`c>=6X;MI3yE2j4kM=k&9lPysN7lkA`JiA-q#IGx zP*8uV9u9-`I_s0FH{)F&#*|%Vsej*%`BlgtdR+DqAEH@Rp8uom)iKOftiSQRrL51&SLM}Jp6xr1N6sua~O zB-dC98Lac}&3(Aq9%L4Y z4mm!IP`p*#m6f2Z4TpLio2#JKQTV4|&Ow2793&X0i5eBQ->yJo7f!v(2?G2ays1Zj z)|}CfhbPG%HI=y!_13YHZL;rTgITjB zvwa&IVpLThPUL)2XW&>rDR*470>3A~-5aV-p?RbiXg?_F2nvbo;GZ&+!}8>p_d`Yp zFJNYZ4&&acf-DzEMC|!-1s*u|I>hAR~?3$y8fHymwgRdRnpa9MnrLB30e)vUifPu%eA)l~6r zJi-QJM=Dh7%Mcj$c*<*!eY`Mvp1iocdmfH>c<`zF(u0>THQPuT^!m z<*(SX$A||=-k|0SP?5`1Zrfum?reh7l5h2@PFS{ECR6`#A z^Z4R=s+ql_Xn9m!L(YM=DdicVs@#bbZ2y8y#Z2Qu?n!a1WvpMw!2&$0B}>FeAbv4y zq@5eVMpj)UcT&sVS~GD{k-2XfYOVfwRy`w`U49OpsTTf>Ulr15$A~S#hMs_j_n^sI z2pC2-5hLlTp*XU;;df6pnqS2IXGyR}uU#o$k_oUiTiFX|Sp0~ArsPZ|B@7eAc5yGf z?AOe|DOtfPWNI=nHj~xs;q4}Zl_n0SeV8+wvZvLN(*=xE%gnB=LslJytRA;l=oGsc z;U7uaDNZ?Y^F|Q#>^3t%MwE9iGzIj*+bL%jZ5FO?nYZdz5l9Mk9_ATs{Fo$RzAYugQHKlCm>CnJnKkqTG4(}i} z8;^}qow)fBx1e^(=>~&;_a#8`<;iFi2%ky*wq50mrpOm*RVy!sktStTQT?@chSB9Rv? za1hkEsK`9qf(U;>_(_S;B}4p6>+=8+8oT}==PXrQ_XxFEws(v_<9qosFOS==w*$l@ zP|vcda=vZ)u|=nwKwc@PvIj;sYQd;UqWXXN=c``4#jzp1iJDz*$U`S+OH^EHzsLHEsQ*4X2s<}Ngs=ktl7FUv^2VuB#Iy=(`y^^-{_xNYBEoGjdRKSpwx35?kXmS*&tq8m z&)DhSbXt@08PPQ1>Bmr!C!eg2qt8N4pzlmc9&?b2xAyyx3Hb!><9dSI-^Ih=sA=pF3yR~UTA`Nv?yLukx2(u zJ^Uy=EHnb#6|28i5~F?#rfeCYn@4XbY6}kCK^1B@2hYi3-;b_b-j`_gVC9 z=|bO9v~W15qYB=2<$~tyWxU{RSd_ktR=?=u&eSQQb2T&L^6}z5e*R?1@puL*Mfy6F z5Zd8y9j@FI7TaEqWmMP9EsA|zK2K~bseyLpCV7yS1dUW%UoBynu0p0tQ|XPs-m7?2 zbYFIqP;V8Q#VxmIsRnWIn!}$`9jNw=snKCND_2EkPUsT5hHH_@b*1ij( zk$WaL`@w3p(^;Su}7nh>S-vI&(&0qN*?LLQ%kSgZo=1b{DZS)R^#BO1bLg0*W^*n ztJjB~U!?X@-<0Whs1~yrKfg~}u+VbgA2V0HNlahFuHu_wPLtW4nr7%>&kA)no|B*!zI|# z)VyGT)I`;I95hpOHumaeQGtFDD%V47b}V(88$uxU+el$qHYi_(xRK`rc=!QtD7YP* z@4hp8)a)p5o^O|3z-i z`^GNQaI*EjNuMD^{svPKqJL}aK#2Zr5C$Ro=j%5cEq{Tv2(iB<&k$mN)5Z{De|ff> z*Tw%#v?2bSYyOKEr|9l`lhwPy(l-zN$jk2L>py?WKY43^{f+5?ka8ZYGGpOa1g$Sg@$H z+Nhq`qA|!Q|Mq>|@uKX?(D?eB)e8D!lJm?KCnF&r(){Z zZME?jT>*v2txF*bUp%@CujRqc*CGZV()YyX5?v~eHDGe<3%fV32zfuBrYZ?u;xP?) zu-E`(<@Dd<$vf680#R?mS@Qc8W}~^V9z7zGbrr|`Kos?*ifr@PTe+7Jl(xZ}K*}V0 zdNI%DN6f8L!K0$>ZcmKF+Qz%9S`tX;?Ks;Tz2ml}s*-pFhVe0oeL|@{<}$vGPg~9N;XUdV?*tzs z>}%R>>LDJy6Z48XG2~4Qv7-NjmC+h+7;s6>F2Yri@xiCIA0gmkv_`TRplgy~frZfq3^{y4V3+WKZ> z*Qj;EhlKH2OvUsoS~05T??e1_9bKm?4JukuZWw@v2U+1PU1en3ZNo#cVAc0KG+bHU z`A?n#`Tyw5-6Jrw>;~AMISsygNBebhdBHqE?Q5rU!ndX6XWp79I$CteJe~I^XZOkJ zB3tMmScOb!@|_)os8s@qf&hkP84pFzvrI*g;89MelgYR?vs5cL=6kh}8$3?G{-_#R zTgbp1e36iztcaZ^Zc!4ka-Rw}l@gBVPqNF%vs|7DoBVbz`E{_({D+dRM?Rxy`F!{| zjt=xlk6t8d8;91oddSnkTy3M7NcWvYiqn9RhRZw=!l&*McVNr5j;m)+a|nhQY`X{dhgO4SyL;NCT7 z0w}uL*=y{}IKR2=hyFX}QiSMLrkb4Y$EA!)$n@8DkN^GLH=H z(*eTYlJGF*x_46u5H+bMm%|AL=jJHj3;0zBB$ctSNL7Lct9kKTqIZ_Zj+RB!L+BYjNS z6DpOYog^&sR<)N)=1Ro^kD1fCO<&S7IJ}C|lz6!BYssyrrMl2?@V+@%*QifSs+9KA zkV<~})pGVK{9E!MC!S|bp>hA2Rd`2($0JWDx6s5Yl)xU(ccD<&uy275bZMHVp}Af! z`USZ(_C%jc|BytC6*+yu%|>R)PN4h_o*NU2k)#>$$}~LpNFSx?coev?cn@`^b{G^g z*vbuR%0P8A!bo1@O9Ra%s~!mHI=-n1i6~F4Y)+;>*Y5K};K&)75@oqg z17RNKkdPsYYG2>`{Ta;G-YTqiF9 z?{;ERBcuxVqhrui^HO9dgtL^J^=w z4qWtVY~B14uk{^qf6Nj^t&f6Z#nq2}#JEUqrc){~su`%F9ZuZWO1AXDpwM_EMy)Mt zRz1bKYjZ%8=fDrQi47rUha{@9p_Q?6OUS)~Qu1=(*z_y8H88i=P41BB$OKpu3a{%D zJwtvBM(-9IgT~Bvocu21!o^`#Z<5lY-Ix3+%pkmOpa|65o?B)pHY;|1cFU+mc~GqZ z*S3z~Id`tK@{9mock#}*Kj6~1WeZBc78P!aEfP7NWQd6j^IsnxlK^u!69Vi z*Jp&mB`VtS;sBK_jsnP;oM zpQ%bGj=yo18A}QB1%1FP6)mdlq(j;7vg56wNm@PK_yuUC$oI#cglc9~c}tV7ZPK~< z(UJgT9wiBendOOf8bAcxUwsNLOmEv1Ek5!Gk-%%NxZB+BP5uNewZc+FEQ7(G6vxy3 zKw;;azHJQ+eJXC{KLkJ>(N`$Qn!4)ur+m{DV*uDu$&?+VJ2pJB{BSLm6kb%~+Bi9! zFv&0I51jZF%I@LLJE#v#_)QS7wBM7fxXnevwu4Y#^th)FL8{kH@|?Pfk&W^uMV9a= zmo%PB5nplFO{x`z@Ar8W@YqUCEo#hF4B2FyPq4x9LaQ2!`I{N;l5C1utq)U#Aqbys zQC00YR7xdy((oCGxgnmATqZhwgxXGS4Sdf_k;@wpgxNClmLB`8D@l!iR~jg}Ebij1 z%Qz5-K{$;92TQ8QC_0P3gRPcuFb%oVEOzb}P&ZXQ<%aE3e4q#ovD2(LULDfbn}oXP zO~D+qj@1gBs^2@CUl2N^D>->Rp`(mUh>EJz+^$8P&T$BQqm95FMX_twPs1JP?zi|kCbgdvCihr ztZW{C@P|vC+*9UqOS>Za=G=gA`z*;fes5~ucPhhAG5wx`_}79Z4Cibb>9|Vp za;ot5>n-Q+VZq4*9Vz^ifrih8wX5C0XRf#ueP7j?Egjbc{1U~EWSii4QGR!{1$bQ6 ztIvwf!hJrJJ=%LAbgumsxN<)Ys z_a);Ejrc7&^Id6)b9To=S(&1kdw^{`s4@O}2Ak8MLtq)RzDXyyJw;CB5J+m9u`c<* z+b2i6Ds7Oq$O}LfaoMnKK&~XfUci<+4tvCAqhnbxe!`UwKJ+%75jbf*<}m^S2Rh2= ztBTVTv4d{elHp!q4TJzTd7n}v8ny`Q*2p473p`gn@Px)#jjM_)VdDab&=U>1tioFZ z?*#I*e0iEU**Yg^UM0GAoIgftkraIHJ2hFwK$V%|ICjGJ(Hi%0F|vGs?+=W;4+81k z;Vg?~%TcC9hQ)=Kk7J5BBZJX5ec0ZMIf(> zrBt%BQw^{LGgEN!(wla+4quK${9O`>L}}L@;Q+!#D`W`HEXahQ{yRS0jp0Zdk%zsO~9dVNEGSV^1XE+Yz4=@Fd} zN9!ii5QV|fH$sx*9g(g-0%)6HC<3U0hu#6c+#5OEP-9Z;(ohut^;);Y8Iu`3LI8%? zlF?}Jf=Xc~o*@T30Su&(x*C7rfs&8a$mCgb>6n#5A}zRpMr!!d+-|)1oUsI?DwS3hYf1W`GkD@EBH08B zqy5tF9Xz}_Xz=7$xKW*`EhDTYd|if&g2j4Rb5Tul-d#-a7w#BzCK9nODC1`xJ zrm1F=F=xOymG7M@icvy7)9mvA)yDnuv1t&hPZjl##lNv&A4>tGwX)FsB$|Gk`@LjE z`OJ}2Mi-~NYM|wMZDE6gCQHg`Y7#_-`a!G{%>-h%KS9i$X=$Q_i|ImMsdsTn5)_O3 z3@$ei^$E-^*pdH3tTV&-QMsb3@`bAXmab-;MbyO~;oJM%OgT(lQMbIVV$Q#A`agAD z+5K7U0TJIXn_d<9GzhwtLs8Nm^uU&;Y~XCP&3V3+Jif3Z(Z$z%hWUj6cVXP!js+6#Twf_q7q@d^zW;Nh}+ z`m)IHHkL1XO# z3f{n04r9aDH<-hQgu?Onoqyel`S3Ub?`GLGlDgjs^#sUzB7Y&Hr#I)H>k z$HWyI4b1a?(Uw(y|(hK1kBku$}vm1c17QFG#vVggbRq0KxAqr7E-w=9vNd zZu#=qC#<~3r!V|z3&MolAyGhWj^?cWw9Q_LiVs|wTy{`PUCkR?@Lm1>0&V=j6JX&@ zv#Dfs;mS{2tS!Y6r<|ATmI0?6;U(>hK3n&JiG7fk6kVng*$mV(Tjl)3y5dq=WUgy6 zfOO2KE`kzV;Cv_2+xdRh;NZLWW3SCMD5L~nNu%_Pi7_lCTXb2bkkH(pc{PPIyb+xu zIO|Jbi2`kQ>9NX8(|2*ZXHRNi@luY=n^BQ}IL@`9L*)CM zLZR*8xE)=nwGWJIa3A^H5dr6z85bS5u=?=nW~#`Iq`)6eOl!3u(WYz}Ld*8f3QLLO_flieW(_YA8}36titUmE z?Iee?g^yhY z<*YEZJ>)XL+i=!+o5>1>*DF&@hDhaw_ky;G()YL z1?`93N)bACoj;~72pAex8jK2#6Sb9Z5np8{n5y>;YKXtoj zmvSEGYiYaTd_}@@MrcaE#_05Zu_>n{zEr+WE{w~(D5OCA_2es0)+LwGJ!=7*@(f0A z_(PSz7L9SG<&cfb-Uj9#?SLhuX_$42G4+&xli>w}ZggRW#67dXzMY``ypMEj=V;=B zZsAX{wS+s_4M%x_&pprknHW|pQsL{H40PiV#t9vAy4J=PHT>2kySry(^5&v$p`P7w zGMZQp(#E&XKbX%Qed2eaS@;^V`J}Tq^4k?7Ks;(AutXFTCvfePwy`6lasT8C$(>}X zQjYVN7UAXoh7~O9M@ZQ+@AFSDrC+$&D%N~y4LqHZdZ3q8mVK-gggnagz+6B6q5)(Y zX}mI@Xu&gRmYXZDe7Vhhrs2G?;atQ~?0d6ob{Pt1+29M3`a@OgTO=a)z_^Uvz@73n ztJqGbNPyZe;fO5TnQ7EvP#78XHTkeS%rZosV6_;H?DHTb&6;wz6}Ra+sqKZpcfmUy zNyBTx+p~59Y=5BF`s)uW!7==6z|rAXKgdzCSFa)1O-ZvKLikVwhPAz48Duw6;d zwVku_p7y3dM(qjzF(OamJ6QuO>kncVIz}3UeWr1)}f%Se> zikjr`ELrEp4@qRUO4=B8ltZ}Dg|dPnL8vJRPaqK|u=lgJ;?R_{AjgKARN;&?!d@1$ zE;oy(ALS_Pq@0YuDw&uSwoMBhS76gAniS~&Uc3GMh#uL0wH3?G%MJnU5CHq%(l;#2 zO%2gnXR$|TV9_SuRl9)oH8}DH*z~zF*(>_~UdZ08n#Tm*);o&E`$X}tC~nzTPps!BVurc!ol{tn?~~?!n;+pGfw%R4-H`)tPK4`_lnq3 z;$`VEeVesRAjtlfHp{njqaTfZYNgI?9O=x1Zi#4c+o}1kZANDO0A57+Nb)>vFzv)i zC{+)`<@t&^DUUEhKwy2%!9EW#8>go`skAlT3s?*)LdF!G0n~br!gHlk78Me&1rVJHbP?Zb~-v391J~wIHI2fF~~D9r*mh>+<}y4Nibspq8FxH4mt6 zieM%OrXbMmS^{%|vll&v6{#*jIx#br;dnw}f5UxZ|tdo>a}dHtdXX zrn-#XQT+ZunEpWw&%SGbu=Oem3cCjx<}l*b!SbTE&M999uj{v0Mk z;DdaSqWh-7WX3^mDn&J2uTP*a5T9!8aa96dF(bJdl+!`4_&pr8yeEf3d z6D5@$IKlBNt;o8ZS5oMwJHnTWR7%2NpGpM|+d73NxL)n;V_x#p`^r?>h`3L;faZL` zBMK-fB^(hbGLQrJ|8Vz~L2WIH`ZtyUAqf_o(%=x>wG;^uJV>bl8+Qo~Eu|Df2(HBn zYzS__rC2Fe+@(<3jXRW5N?U3#``q*2_uO~Rf9BkC=YDwKZ<)!=nyfYXu-3Dl-|u16 zn3uiPD5W_yd`DWjW&0@-_Q7z?R6DLlny;OkD#X)|4*)*R&$#@(*9#bdmeRLK;dzhV zuQ>N-;^&*tuc-h#V}fhH@|?cmmsR~p+(tWHH-=5TTSvvKkWc>V6_N^-JlYVpz?rVX*7 zAnB)FP9>vzv2f3w*+%ErUcK+UA@H}rBfC@gMw7DmnTH(E7I`lbvI+5bwtqG|paKW# z!?nu1=doTj37d`TGx+wkp{@ulHBS;~117YV>P!GpsTWcOVE}7s)P?HMh%IR0C_EyK zDngxvjEbt&kyM?)pQ#QX{BiX*O7QT7I|1fEP~+xTL8Qy5CXEXcxwK^n#;wEL5M#ko zWfAcYGQ93xgN+t=5<~c?#Rx6*q<&tvHPfY!l81T2;j3J$n4l)aQ@1r?izIWlv8z8) z(J`Gq1Jx5TrY*YX0pB8&=-5?UBi~ckq$zw{apUN@6hklLrh1PwqNUs7zN|dL_KG5J<*~~TZg(1 z8|t2OPfJq;Z0?}q5N|@haM?Xz2hx>wFRMzicK})%1hgFu*c#SGS{cSzMY|PzAkTJQ zTW!U42G1KS_NVA#@&ShP#n(zH6uf)9Bi&-7Qa7Qf944oLs&Xup->Em|$Ot-^r_SE;R; zA9$^_Dmn=(Wy0e7IUYpLT2O^>0Te=$G*SHGX3_00QhQ_c;JKx2H$Jr&s&7H0Ng{+T z)Cr{)CA1N{;k6s9P^KgGFW?tDICmV^p0}Z?C8;SvSv+DMT7~cjGw*u@M(Z54yD8|g z=uy(fL}fL)p5}skw?p`ZA!kSHhL6HO57>*)`d70G^8|$H5*kMfs(AGR4HP$ksR5RX zjkS_hmgPP{^>h2q+Jb+0=#_CBEN(D13Nb1Lim-Vu!FZMfJ>=&y&CR{~n$x{{9uIgM z>;SjRYHZYZpw1X+Vd7%3ke(pbt>UE|8VZ}BvxZ1Gru7Ym%GAD=4HJ==K}PLMZpTrr zYc^dWE>nQ^KE2@-j?_B#AtX3}@*Y zE<0RED}h=tCinTJd(^U}A=)|S8pJW=Wq*wz?)n2ZQeTHl8v$YUvz=j;QX;=0KXef-ga)BC_rVf+qHt{@2$!9a& z4~4KqOMZEDJu9G%x5#0G>YooS{Vm}6D;N5wY1Ka;TKWeoxEx&S|4cytH|CfA6mUtw z|D*nN_3?iVr2Sj7>aR2W*ORZmmz1vBRo($tovJIg_R8`7KLTkL|A|ffZ^!)muluX_ zBz2Xs{eRcjrL%DrrR`I4TCX>GyzaP^iH`rv*HunV&BYU8s1WBRK#v-57m`K~X+{~h z61|r};7>1!FYe|}#erNPPp!tPV62}yepC$A)hvM^Pltb)+}Ey})h474hB=uDo{5B3 zQa&iHYt5J3`8>kc@x2u8bcWZ?`0C2=7PJ*I}E7{MmO&S=-3Lwfs^I3f&A{+*a z(n^|8UsoS5yNO_*-H$GccY$h6kEz0-$2H2!i4(8ylec=C(Ss}3)mKUorg_Sh3hxaZ zm|{Sp>dON&G?;IicDX@YEp<)itVwm%B_;B{ZzQi;QH+l400vQna+3E}6JINoP@=47 zm+kmX_e0ceh@sR*+#lmp%^fH0saExygCG2l;jO;o1rxx!=1+1reeNkR-FTny`uIhq zqz1J2WrQpHOT8u?Rt@1JE@hN-N#;o#cp6ikkfa>11&j(blE*#CYY+jN^`5nh8-~~? zN>IVQ^I}M!3iZm$b_*Lx@#GE(P(Q)M34+EQIDZkR8K~H$hrjs6%@$g)=4r zsL*_sq*{B-xF?ZwY5<1g8AAZ$`EJnItj9425Rq~EO*dFS?o!?X`NJP)H&7V?pi9HC zTZ%H(4ajBihfsTEe1V_IlizSx@BEdxHR+eyom58CIT9 z4C_o4Z|N5R$ks>0ffUa#l5+8~^dGRD+w|ma{75CUPgR2fcTebjZFAgG@o({;e0}+?L7b%6N(4QaEc2>}iu1j-6j2+QM8jrFt0A zRT}_+S@^6hK7@FWNN`vAv9EkH!uA&?(G~LG?NL#Vv5|D8?c$wjAFGO8%jUe^oARW5 zgU}5az8_(_U?56#6In!)!hbq}!EG3~-bW^XjD$a&NGnkS7hjuf9`OzyKfX5Fau1Ra zDXs2#%0AX7nN%@=Wwe48M3Mw!=~C)a{7$Wvv&;pui(xX#rY6)M?X;POh+mLC3*`CI z@o3JdsJzj;_xgRPn$TMmy}aUsU@^)lm-nk64D9dob6cm{Leqn}^QhEEqH;;(Z19%GXvi z;^H17#q|XFEKOKg4agPnU*iUwzkAx9Mc95clocQHAxV9n2`trNHF)h+5dC$K+nw8hL;I9+v z!S7VFFkR=CHtZ%QR@Quh9DP!#B+|^JhYs;BS3;rHdT{LZns;{HPE}Hpo^EZ=ph#okhzkB&1i-E#85Afy~-dO3Xm1 zaz^3f`)%EnEKst;=~bT2m1FXmmSgpu@NUtwKw&|y*n73xk_pmGAdkDxBg?7FNBFFLgL|;pV>sai2GT)}s zdw_F%6CPtmC_?BW9yrI#vcXQ2M2{Sq`<^0wpXg~f6Q>m&^ERJJ8AOScFIza~yimCF z^){^(nY>OS+2C=H=Ja9Ctr$L+Fy_<;f~@mw^6|7Ni5Apd8e!+#%T}l?)5lSK+ZlIC zP^q@hJ49lZ6`ce7z9-Dxb{Mf$$<0K@y*;a~xIJ2I3u3~jE}J!$`15YaHpEFWAXKXA zSTc4aEF$H7p?7*z569)?wxCGNoj8qk!4Y1Vu~=WzD>kp!7dlJgxG9n8wQH-=apzD? zk+|f*S70HI24;~VnmI!`xiF+V{k5#KWOQ>-_F15O&TCHY+gg;U{W8<9L=QEi{hSc+ zQ_jY65dm|i&X3mlr;@fSRhO(Vcg9CUunhFOmn?Likag_q42x4!vn;qhN#SB~ z#3ZXz&&Q??_=E(xndhu0pXg!DsyRnIw?-0m%Jn8d3&65TDp-1YL#ch$bpEnN8iTm^NOCPvB(xW zx_6O^YU9#E)%Qv2mF<#|jr}EBG4JFtd=IOen;r430|Y}l1F}QhFZJ2xeR`5&v(8HP z)B`#}1BR&h$jOqQs}ufI-i@D2T)%7yJ%U`wZJG&HBmC7zv4oCK_I2d7WqA?pc!Wn^N$_u@fpnA{THOCH$$dA24BYe5~(W^=+Rfk)lG^joG z%^fZJNKIedeo`2={QD2y@0(?1j!70jCYhha8D{&mR>e&*mzB8}x+AC<7JM3`QmC|T zeb^n9kI;VFK2@va7rNf+J2Qklz@+wW=XEKZN_AxKmhz78`3Ox(I%Mx067f;ESzap= zI{kt!rDADQ)qONiL$s=*?iCA45yIz;*u*bsnIWaDl&Pha;rq;{9p8q^wt48J1&L-G zAyM(HL0gf_dl)Uc&p@2Lepqq zyjoS^a9##gKeEfPJJ6N4Sz$gPnS`AXqG+BVqzi3z@)){{iAsl2WC}In@{tWNmm30; z7C#PFGi$BMt5=lhI#NpB($U6&iJt^qg68-u+z)0r-6EeHBSYhCw)Pd>t23jke@5xU zglEgtX2SoVyn~v(yyf{|F~KpRT-NGDgPZD$R^fyB9lX)D^yh1k ztI2qLqK?&tfA$Gj^QIUu+^{#qXbZC!A|f*zHGAAwPsOYfbnIjC-=FhY4wbhcoT%mL zf{go*99-MvHM@LDboykN5cZ`a#x5jVy%tix=v)utZ4dHJj&9Fn7`);`dlpH9L<6v3 z_Y>H6-{EiGJZnQ&)9k)njO|fr@5PYWMpECc1-JBczRMfPsFBU7nPL?x=jC08(21jm zlzU5?J$zcq0eYc)ChOGB?M;|cZL}?LdVl1x8hrmXhA94xCYceX%$su{X?-ZYlYaH6~qo8DQfaMVK;ew!3}!|6Z|2Q)E&ooknJSoBu%B{7OQvrtAUUa zXz=x!l|JI2J=ulaq4JF7ZO4%cm6o-~16ExZTptFy6zog%S`q#h;U>O$Ta-)SdSo)* z+|?Ah=wPEiH-akkb+|CbNYHR$E1ezAAf>Dkrrx7dYukHDx|2IbrD2G*mFNBUxv{h$ z&60;Df7~<)hZqyupxNpduE#U`NQO3^nX*gTSY2$$4CR_A$;weu<`-sG6rBO-n}?~& zE0fjNG18WXJGk|nGk-whZbSZq`!`f3w6l=*;-NA=87(u3lNYpv~?;j zjnfr*iPf@sJ6yv|6b|Sn8|}@iq%#)RfF_o=x1D zeKn$GDI%)(nH5tpl};E*I~_8dUj?Zsp1l@>TpF0W@_KD2hBB`ylt-E=-iyyNWCTzP zHiq+S3Kb4LCe$G)&y7-85!%j6mK3Dw|94zY_P>kE{X^vQUy4fqYthZ$Ft-1GbR+lI z>f2w@jojZ$NB{1)w&LGQPygsZ``a=9-_ebOX9&9=9=*JM)6 zYhtWh!zD*dHD=ZbhKf_)0R)@jxcOlqH%Y7NpETQo?XAbxvO74Av{E&&BSD-Xh`jdx3sJ{bhc=wX+AIqy<;)&|Z!&R)w8>Gq8%CWyV`{CIhdlh+86ap)L@ zI+?7yn?F+i?f!o8BpZ&VaC~3oNjv(m3G7J6+K@PB4})&%9}Ph!74NYDHHynxyXu9| z@>fkG_4&5yX|#gMdJ5*9CK`qQq`BU=s@!c%Lnw)cesN9$kQcYJ@t{=&U|RiPBiNv? zs06${S=9S1>FADMo949SRTU`Zk+O*L|sR~50RHz1Lr7o$EtLa$MF4|H3>43XGv-4g7Pv_A-h^_ zsjNL1UVpci`g2l|2p8wAB-H={*;)alnKkO#hhT ztc2G~nQFXTkG%{hpWN3&SU{z$=1~W)R3isl2=}^0yV0mm|rFF zWnOu$DZtV;G=*DxZRxzB`b!>+Q6l|X6T0O3lAYL2@oW-P^SK2|pMolEBk@ zCbV8@U#x2JRz*Nm$ybx9i%7rxY1+57onzHj}X4Mk!^M5pTjv!?}U=LCgbcT2CC$9 zrtJ!>4f>fm#O9y=GW~FWP)=*ppv4t-w7?a|d|2e2zI)5}O=ye9$1<{U&+rAt{1IR9!K?*J?E^zy@_fF0cThN9`vVn-XPp zn?rgSIMsEjQ#pk#-(OFA?r1yBKizPa9hbhR1U%JyS}XscMUzUB6796A(OA¿g# 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

WCG{JapVVtFf^$#%Nd)wP=@5rt4nvz>#SUB}o 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 literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/Build.cmd b/Source/BPBIOS/Build.cmd index fdc9df0f..76a44e01 100644 --- a/Source/BPBIOS/Build.cmd +++ b/Source/BPBIOS/Build.cmd @@ -3,6 +3,8 @@ setlocal setlocal & cd ZCPR33 && call Build || exit /b 1 & endlocal +setlocal & cd Z34RCP11 && call Build || exit /b 1 & endlocal +setlocal & cd NZFCP13 && call Build || exit /b 1 & endlocal set PATH=%PATH%;..\..\Tools\zx;..\..\Tools\cpmtools; @@ -26,22 +28,22 @@ call :makebp 41nbnk rem pause -cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:ws*.* - -cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.img -cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.img 0: - -cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.rel -cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.rel 0: - -rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.dat -rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.dat 0: - -cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.zex -cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.zex 0: - -cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:myterm.z3t -cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img myterm.z3t 0:myterm.z3t +rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:ws*.* +rem +rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.img +rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.img 0: +rem +rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.rel +rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.rel 0: +rem +rem rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.dat +rem rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.dat 0: +rem +rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:*.zex +rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img *.zex 0: +rem +rem cpmrm.exe -f wbw_hd0 ../../Binary/hd_bp.img 0:myterm.z3t +rem cpmcp.exe -f wbw_hd0 ../../Binary/hd_bp.img myterm.z3t 0:myterm.z3t goto :eof diff --git a/Source/BPBIOS/Clean.cmd b/Source/BPBIOS/Clean.cmd index 62c3210f..5bcf9d9e 100644 --- a/Source/BPBIOS/Clean.cmd +++ b/Source/BPBIOS/Clean.cmd @@ -10,3 +10,5 @@ if exist zcpr33*.rel del zcpr33*.rel if exist *.bak del *.bak setlocal & cd ZCPR33 && call Clean.cmd & endlocal +setlocal & cd Z34RCP11 && call Clean.cmd & endlocal +setlocal & cd NZFCP13 && call Clean.cmd & endlocal diff --git a/Source/BPBIOS/NZFCP13/Build.cmd b/Source/BPBIOS/NZFCP13/Build.cmd new file mode 100644 index 00000000..2c53cfd9 --- /dev/null +++ b/Source/BPBIOS/NZFCP13/Build.cmd @@ -0,0 +1,11 @@ +@echo off +setlocal + +set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; + +set ZXBINDIR=../../../tools/cpm/bin/ +set ZXLIBDIR=../../../tools/cpm/lib/ +set ZXINCDIR=../../../tools/cpm/include/ + +zx Z80ASM -nzfcp13/MF +rem zx ZMAC -nzfcp13.z80 -/P diff --git a/Source/BPBIOS/NZFCP13/Clean.cmd b/Source/BPBIOS/NZFCP13/Clean.cmd new file mode 100644 index 00000000..a088f4e8 --- /dev/null +++ b/Source/BPBIOS/NZFCP13/Clean.cmd @@ -0,0 +1,7 @@ +@echo off +setlocal + +if exist *.prn del *.prn +if exist *.lst del *.lst +if exist *.err del *.err +if exist *.rel del *.rel diff --git a/Source/BPBIOS/NZFCP13/fcp-4.zrl b/Source/BPBIOS/NZFCP13/fcp-4.zrl new file mode 100644 index 0000000000000000000000000000000000000000..a6f2c9a2f99f39f2fa499c58992916501f2798b1 GIT binary patch literal 896 zcmYjOO-NKx6h8O8nWy>lOe}d#AZL6M&s?Y#rh`A|IAcT38*^q#1)GFS1$9J6%oa~> zBw|~4(PC;LQ3TRvc0x!vqrOF9D;Hs+kgFm!LwM7@PDFQc@AsX1&-uP{?r*QVBYi>u zP9h%tb|lR~Fc`X-LH=M{26){qeuT$;C)k{y|(fCZ^b|-i{8Q>M)Pw5W3i#==mct$ z6a83flwvH3qx}PYvHo(N9zriZY?ww*=Xi7+JzYZ+G4$zUlQGo8!@~$K0M7JWWv$s* zHKgxA4$3G0n14s+Yqn>1lDX}p?Z{5gP0 zHwoJoh}eeNCfy>k9v$6H8FAUG336!Kr2E9aUW?z^^DQFgKRqoYY1xaKoxyoxOIEBm zasX?zfK)pv7zyo?<*X7_< zuWa)CY}C3d_41~;b2bZ#YlPjBv@Egfgm$!D1A7sxo9pZoNqKAO8E8|M8nbxpvhv9_ z0v0N9*Dxedk}vSO4G~#pr)wG_GOpO65iH|$6j^+nN9ok*#96;7C%q01Baw70t3}A0 z%~B2ZK~(vos_I2$kI(vig(l6_7ECEZ{nVX!oBF77af$!O77^x754+DBPwkj=o7i?z zhRSW7OB^e|c0YeO+?$EW0<-et{m1Q;1pw*8m4W2Sxk}vpOlrAAz#683rqWd{Q(sYD|i3^ literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/fcp-4t.zrl b/Source/BPBIOS/NZFCP13/fcp-4t.zrl new file mode 100644 index 0000000000000000000000000000000000000000..8d3cb48ca1ec8f4cf1ee75a89f9e6a71710d5821 GIT binary patch literal 896 zcmYjPTTc@~6h5=N?b0G^K#XgR$QL4IA{Sy25VSta~N_fiUSK-gAXbzm57tYdkO_6j8`UmNu*bXuJPBbOnz6t<(B5ZyuKP&1Y~}i zeU>%y08o&XRP3=Dtt&iVIa%w*3OMC2sqS>@T3TB0chcjF3t>t-7oSAiI`%CB_}W?y WM%yXHAD2{BRZ+eo(PrNG-}(awOD`t? literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/fcp-5.zrl b/Source/BPBIOS/NZFCP13/fcp-5.zrl new file mode 100644 index 0000000000000000000000000000000000000000..a245621226e01d22cc5d645b3028bb3a28b75924 GIT binary patch literal 1024 zcmX|9UuauZ9R8hiliN0J;zD)aMHs)kt8#0RrB!Mc)|56&(&&0)n#^{^5v#^nNSfGW zb`iPTp@e`BzUhl1@ud@)bovrO7-&&@7p^$bA->2~TJb?~*w%?~Pb|#<4*+{O8>F{C+=ccpSJi_|`eG8BAcRRQgvM)fe<=JN-a0|#j0l~J$ zsvvN8$VwpCzE~Xu+bYX~V0&aQ0EINNQ9?Kg5i&W$jt~+~u!jhV%(7`d&NGdWxW=9( zL_5RYA|xGV?-DXM%`OuW9tV&dCTkP2CD#Zz#y}EH)SvgfF?6~I6E_9PYDZ*;B^)!ud0$zhu~ zwuW0F8^CoICL=Nfy{SHI$$mkR_I0JH`Ybtc*c!(_<#XUIfY|T5hG}K+&|PWDdk%b~ zY@0YO9m$}{ejyZHCObqax;t`pW8Y*O9GuByj+8q$3k1VYV9n#fMk6r7Nz6%z>La7m4y9Csdf8wEW z$x#B2tPKIxo14r}CPm=Bb>*i2N6YnX;zGTCsm@~3@4-AYQS=LuV1x)L6XvXXL81)4P)D6bJVeI z=!*Twdz*Kqzjl83a)0+?#zVQuJD=aUWmo{v9=)1kgCv%`0Pcg!m_jBSN&aO{2C-K@nq!iHIh`AXJH;jJ}ZK zcjeX%Ziq24y6esas*#b*!i8&74H{#JpWp{gTJKPGrJKpQ=iPViIrq&%G`z3aK>>dD zL=p#jiXKR%I(C=P-c+mvqTyY?ned(x==$5VE1pc1xOiJn@gm#yI!~R#R^Ev%Lza~`Ufc$TBe=K)%o{BZ0mJEB>;vY_6@9=wDqSyO1(j6S{x59iOsYcbYj}RJA(C109UM|_+f;_c$q62sG6__W*vK6 zjT%(#IOmEmm1mmxM{IAPtm68jjAE2c7&5{Ikf!TrTB^nfKu9Pc6A9)XdOSQ6uK>(3 z0Fs>&ZA7X%0>RDV3&;hVlNwh92<0q?C+wY3?uvPkjB=%z6Ke=H=1cXw0$vSfMuEz# z_R8#s0@vQQK*3(L;q#(=Ejo*7Z9VIR#8wE}+3DaTy@oFdKH@&z){k4-OI_DjYHz%p z%jyl~N>k;CMw>?tj>q)#8zvrlyJ(>D6$ew)jryU?&Kk=LtGHxlHh{l*M@+Y|VrFJN zNJ(9rb%mco6-Em@s8%ao8JfA@6|DppNhw;!;I3Hi?Nz6gf7m?6!Dn8D0&Bvnk8u^3 z;YD3Wf*|UKHvUkd#;(@0hOe;QVCCB92i5u0bz+M6?7~w{8*`yifU+D~y8*`P5Q?!z zib6Ui`6+RR$Rl{LSkuY5!=tVE5_m!0;a)4TBwveS1UrHyOa44p(83Dsqvw*$?Z#Ze zt|zLBNhS}eJSRiwGR(eLgGl5ZFQ`vlia1-^Q#?BEymp02rPq$Fdwzw_gbLn3?zW}$wR5}0v literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/fcp-6.zrl b/Source/BPBIOS/NZFCP13/fcp-6.zrl new file mode 100644 index 0000000000000000000000000000000000000000..6aa1aea92537db7ed8945cbedcfa3ff33a6e128c GIT binary patch literal 1152 zcmX|9;ZIvt6hHUA_Q47*BW&|g<8~jvwCIivelVt(o@x-fD6p4qbAn5P=uj22of}#IKec@QVS__{{maoI7 z0GIul?CjK7>U@qIJK;G&hU2|i$q>iA(UT-Lz^kXp zFsF7~ESnq4OiUAcVS1Fb=q)6dArqsik=&?D98VB_Ci2Euiuhyc>=X$^vbkAuv3r&T z2BtEclcBNc90^CW7jh(eW_+9s1X9x^;UCG8!BeB7;{>h)>>GZOPjBH330nh6m|)+4 z#ElU4B}l>`dk-Y;k+2*{!X0}bBw?71fh3%=6ktdY)`<`&eF*hN*mDT^W6Xt6Aj0~2 z9AM{p9AXm)g`?~eLeVqq3xpDW_BBF-r`Y#MhT|9%i@}ayw5~27uyleV8_b2}Hi}EW zqJVXwQV+$;>-r}%oZkR2*xQ%~7nVY#)?ky^5zS0&74;=YkYYz-)?jnkTJn%TxqK2! z_N$d^WLmpStsEY~mi4xhPXO3pA#_Y-pcm*1rs|e7Wlz@%)M=`oLuNO5q@IJuG{|+% zTO^@1?SG>5HJ$@!2a~YX)Cp=bSPjO+W-vET_DZ{aanE2sqQehwD$oC}rUBJ~ujh}? zlxMu}fH_QM^R!Y=>kWpnh1SdERTjaR?pFD(41)9Fwo!BAI5-;a7*@F5MejKdtaK~_ zCk18GyC8#9P}YR1PN*7ry-T?%+Sd|#wms_VSyC5j;7}*tI$UDD z?;|VM%xD!_l#hKiqP9=@*_#HFC|A7mbAV0t9$zds)QO;V-UV1Mtg_>%R|YVR{DzZ)dubG?rfTb9`*5eIoP^b(O9{Ly42=1<6k|K Bi7WsB literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/fcp-6t.zrl b/Source/BPBIOS/NZFCP13/fcp-6t.zrl new file mode 100644 index 0000000000000000000000000000000000000000..b75fbfb7d8116519c533ec0a8243b3565c12caec GIT binary patch literal 1152 zcmZ`%T}&KR6h8OP>?|xW?LxKV8qFQ1X+}uOwi?`S`6=D*ZdO>f-7SikhG2>-NtZ!D zDaK5>Aq!fbYJBoVstGanf%?#FA4n4*O&QlQ`q0J)6SFqd7=yN2v}&C73~PMzW$t&* zob%o9eCPfVi<~HbLjnF8jP^c1Sav}sbE><7l9_k~#3IN3%|v=Cp#Q(3V~JFzl1m&P zEMJ6A0M18@vFY)V?5mUP;Nj3=HjwG6^F@qYZfNw(M7Yk!5-}F-$wXN!!TJ$*^&V%b zG-gk-0SxPWsj9G&_O)yICJLjvK~gI1xJ#NhRSDK=r`WIIV~mFn$#T_fq~52zW8$?}Ok9 z;zJ;yCdT_gaMf@F1XmzWg5WCS-9Vu$$^C>xQv3-*qG^7VklsEXBN99#fFjzQ6SAS^ z35czrNH$*}QnOBr9hM7g;>Av#E^U|}PhtEXfX%N`{45Y5&Z=y_Lgij#bki~y<(N+8 zQ`0stQcp3&?qT@~73wbR&`5gKlI}ssiMY{R?C{SK0F_JNAtG#Dar5vQKSCfp2S5sI z{Bv?p{sk)_j?S%5mA&CNz!}gb=cH1r*V_CH5%pTB zyv~;i)gM&i2NJk3g!2-#6qN76IdGWry#&Z(YPW-5JH9Vd=jP{U=6PKCsRJC-3fvBc z{EjbJr{;rDn>XJ20>zevH42K$!lZCzJq0jkzf z+5+hNRU{KyDH2_#q_oEWCY~w$u@lqPt(Rsy@jYOJr`>+1k|m`^BqLbyVMS7PiAgBo zG3B1Cl5BP3T!H=@vW%0gz9_SG52!P+`J)`bM9Fdo^~!q?7b-p_VvE)to3Byvj%8}@ gJKa-wsQkWp>&Euo^Mf+Q%KNKdl`IDU%Ku0A4+#r^g#Z8m literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/fcp-7t.zrl b/Source/BPBIOS/NZFCP13/fcp-7t.zrl new file mode 100644 index 0000000000000000000000000000000000000000..8a12be0980ae8cc2fe710862833d185d82b8c5ce GIT binary patch literal 1408 zcmb_b|4&<06hHUg_7w^|EX?gulX)L+SstLHn~J4U7<4Tw8|_9x3T8H_h?qhVIvK{i zaYG8~{t5g+V$2rMUut49!^k3)Jfp^uWxtrZKw=EKZ){VOSMR09zrbJa`8zcW^XecjI~!d1F5mGq477Sd=*X_4$P8lR&2`Ke)AYt+(oijEJD45f$bM0zjfIo+>~j?h4KY+{mL@Xyd-&tz(n z2IHesX&QbeGI2glBYnvv?Fo)d(cZw&1noaLJe=gkX&)~-nM$R7;n0ylv>QGKC>?x` zPr}9@r_2N*2(hn#a8i_g0Ys2xGe9_B$|isarfdO-AkT(@2-fU%z|c!s2SVJ4Ak^N? z>JSP<*$W5-dsv*GarP=g;Rs726zOB1Ak-URml5he$+Ad-=Lsk_lT~80u4WL}nn00E zR)eJm9dESe1T5>^Xw&i1y7B2Ww=V;jEI{~CgGnbXFcK45TvmRobIfKk-;O?m7qVW9&Y%TLwkdCVPai zphq#LWox_|+BMnN=-}Nil|#R(V}Qz_wQc8f<$&*9um*L>I;)iHi+?yV+%W`@u z)QktpGpYB#gOO#wkz3vq#v#OgSjg?^&u5%d*^A&dvg_`vS~V2|c4&t7W=i>4)3m3Q zZK3>=4Z5`8t(;bH%XI%@r}kds(u&xQE@EHEab4@@N}+^HcfdMCZN5w+l(zUgHG^Bk zmpKBqsHSY0>}dinF1B;IO0E>-X{pKjFkdZ&@aFj{nCw}xY0U)FKaR~)aQHp|i+FkJ zEo^hm!j1Zj4cxr0>iJ8CYNLv8h{JkGC*{h$<*NKU_3S2g7}hrwH?66203~aj+9l8r ztGpQD8j0E{e~n$j_Gx~xXXDkKSLWLIZt?`X-~6!XMfqA@4Dkq0ky2@%N}NKCa!0U4 zJEwSG?)de+@vjc-4PTvwt>0ufZ!Mn_jXLCg9A}Gj3WpYRw@r42*lyDuw>|^E8 a){X1C+ZPiu=8<<-f5_)704V&Q|NlQrxxP^V literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/NZFCP13/nzfcp.doc b/Source/BPBIOS/NZFCP13/nzfcp.doc new file mode 100644 index 00000000..1eb1b0ab --- /dev/null +++ b/Source/BPBIOS/NZFCP13/nzfcp.doc @@ -0,0 +1,89 @@ + Z-Relocatable Flow Control Packages + 11 October 89 by Carson Wilson + +The seven pre-compiled Flow Control Packages (FCP's) in this library may be +loaded directly to Z System with NZ-COM, Z3PLUS, or JetLDR, provided +sufficient space has been allocated to the FCP segment. The FCP's come in two +flavors. Files named FCP-nT.ZRL implement extended flow control processing +when needed using a program named IF.COM at the root of your path, or at +directory A0 if there is no path. Files named simply FCP-n.ZRL rely +exclusively on memory-based processing. The "n" in the filename indicates the +total number of records required by each package. The standard number of +records for both NZ-COM and Z3PLUS is currently 5, so if you wish to load a +larger FCP you must reconfigure your system with MKZCM or by editing your .Z3P +file. For general help with flow control commands, see the file IF.HLP, or +section 3.2.2 of your NZ-COM or Z3PLUS manual. + +While IF.COM allows options not available in memory-resident flow-control +processing, fully resident versions free the user from the requirement that +IF.COM be present during flow control processing. Resident processing is also +somewhat faster due to the need to load IF.COM from disk for each flow control +command. Finally, the ability to locate and load the transient IF.COM +requires considerable code space in the resident code itself. Generally, +IF.COM is best used on fixed-disk systems, while resident processing is more +suited to floppy-based systems. + +The options included in fully resident versions were selected somewhat +differently than those of those using IF.COM. Criteria, in order of +precedence, were as follows: + +Transient Versions Resident Versions +------------------ ----------------- +1. Is the feature available in 1. How useful is the feature? + IF.COM? 2. How much memory does the feature +2. Does the feature require disk require? + access? +3. How useful is the feature? +4. How much memory does the feature + require? + +The tables below summarize the size and features of each flavor of FCP. Each +package includes only the features appearing above it. For example, +FCP-5T.ZRL (the default FCP for both NZ-COM and Z3PLUS) contains only ZIF, +IFQ, OR, AND, negation, ERROR, and NULL. Size is expressed as records plus +remaining bytes required by the FCP. As FCP space is allocated in record +units only, I have attempted to include only combinations which leave as +little remaining space possible. Sizes without corresponding filenames are +included for reference purposes only. + +FEATURES OF TRANSIENT (IF.COM) FCPS SIZE(RECS+BYTES) FILE NAME +----------------------------------------------------------------------------- +ZIF - unconditionally clear IF states? +IFQ - show current if status? 3+124 FCP-4T.ZRL +OR - set state at current level? 4+25 +AND - reset state at current level? +Allow negation of conditions? +ERROR - test program error flag? +NULL - test for no file name? 4+84 FCP-5T.ZRL +REG - test register values? 5+16 +AMBIG - test for "?" in file spec? +COMPR - test for compressed filespec? += - test tokens for equality? 5+92 FCP-6T.ZRL +INPUT - test user input? 6+25 +Allow "IF T" and "IF F" forms? +WHEEL - test wheel byte? +TCAP - test whether TCAP loaded? +EXIST - test for file existence? 6+106 FCP-7T.ZRL +EMPTY - test files for contents? 7+10 + + +FEATURES OF RESIDENT FCPS SIZE(RECS+BYTES) FILE NAME +----------------------------------------------------------------------------- +ZIF - unconditionally clear IF states? +IFQ - show current if status? +OR - set state at current level? +AND - reset state at current level? +Allow negation of conditions? +NULL - test for no file name? +INPUT - test user input? += - test tokens for equality? +ERROR - test program error flag? +Allow "IF T" and "IF F" forms? +EXIST - test for file existence? 3+123 FCP-4.ZRL +AMBIG - test for "?" in file spec? +COMPR - test for compressed filespec? +REG - test register values? +WHEEL - test wheel byte? +TCAP - test whether TCAP loaded? 4+113 FCP-5.ZRL +EMPTY - test files for contents? 5+17 FCP-6.ZRL + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/nzfcp.lib b/Source/BPBIOS/NZFCP13/nzfcp.lib new file mode 100644 index 00000000..db55f33f --- /dev/null +++ b/Source/BPBIOS/NZFCP13/nzfcp.lib @@ -0,0 +1,161 @@ +; Module: NZFCP.LIB +; Author: Carson Wilson +; Version: 1.3 +; Date: 9 Oct 89 +; Changes: Prompts for options if SLR true. + +; This module is a set of configuration options for the flow control package +; code in NZFCP.Z80. The options are not fully commented here; see +; "ZCPR3, The Manual" for a detailed discussion of most of them. + + +; * * * * * * N O T I C E * * * * * * +; +; The main code in Z33FCP.Z80 has been written with relative jump instructions +; for minimum code size. If the options below are changed, then some of the +; jumps may become out-of-range. You will then have to change the code based +; on the error messages you get from your assembler. I cannot think of any +; way to handle the jumps automatically (macros fail because the jump distances +; cannot be resolved fully even in two passes of the assembler). If you want +; to play things really safe, you can do a global search and replace to change +; all occurrences of the JR instruction to JP (but note that this change is +; irreversible). I prefer to live with this nuisance so that I can get the +; most out of the code. +; +; Another possible way to clear up a problem with a relative jump that is out +; of range is to take the block of code with the labels IFCTRUE and IFCFALSE +; and move it up or down in the code. It is placed somewhere in the middle of +; the resident options, so that the options can reach those entry points with +; a relative jump. You should try to place that code near the middle of the +; options which you have enabled. +; +; Jay Sage (May 17, 1987) + +;============================================================================= +; +; M A C R O S +; +;============================================================================= + +; SLR assemblers allow selection of options during assembly. + +SLR equ no + + if SLR + +y equ yes +n equ no + +select macro option default comment + .accept comment,option ; Prompt user for selection + endm + + .printx + .printx Answer "Y" to include, "N" to exclude commands: + .printx + + else + +select macro option default comment +option equ default ; Use selections from file + endm + endif ; SLR + +; ------------------------------------------------------------------------- + +; Command names + +; The CTABLE macro, which constructs the command dispatch table, includes a +; line for each command, the first parameter of which is the name of the +; command. These names may be changed if you wish. But make sure that you +; do not use a name that is longer than the maximum allowed length. If you +; do, the name will be truncated and a nonfatal error will occur during +; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower +; case letters will be converted to upper case. The macro COMMAND is defined +; in Z34MAC.LIB. + +cmdsize equ 4 ; Maximum length of command names + +; Command table name, enable, wheel, jump_addr + ; [ DO NOT CHANGE THESE PARAMETERS ] +ctable macro +ifcmd: command if, yes, no, ifstart + command and, andopt, no, andstart + command or, oropt, no, orstart + command else, yes, no, ifelse + command fi, yes, no, ifend + command ifq, ifqopt, no, ifstat0 + command xif, yes, no, ifexit + command zif, zifopt, no, ifzero + endm + +;----------------------------------------------------------------------------- + +; General configuration options + +NOISE equ no ; Don't display if-state messages + +select COMIF no 'Enable transient IF processing? ' + +PATHROOT equ yes ; Find transient IF in root of path + +ifdrv equ 'A' ; Drive to use if PATHROOT is off or + ; ..if the path is empty +ifusr equ 0 ; User to use if PATHROOT is off or + ; ..if the path is empty + +; --------------------------------------------------------------------- + +; Command inclusion options + +select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' +select IFQOPT yes 'IFQ - show current if status? ' +select OROPT yes 'OR - set state at current level? ' +select ANDOPT yes 'AND - reset state at current level? ' + +;----------------------------------------------------------------------------- + +; If Condition Options + + if COMIF ; Different precedence if transient IF available. +select IFONEG yes 'Allow negation of conditions? ' +negchar equ '~' ; Character to use if negation allowed +select IFOERROR yes 'ERROR - test program error flag? ' +select IFONULL yes 'NULL - test for no file name? ' +select IFOREG yes 'REG - test register values? ' +select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' +select IFCOMPR yes 'COMPR - test for compressed filespec? ' +select IFOEQ yes '= - test tokens for equality? ' +select IFOINPUT yes 'INPUT - test user input? ' +XEQOPT equ yes ; Test only first token for equal sign +select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' +select IFOWHEEL no 'WHEEL - test wheel byte? ' +select IFOTCAP no 'TCAP - test whether TCAP loaded? ' +select IFOEXIST yes 'EXIST - test for file existence? ' +select IFOEMPTY yes 'EMPTY - test files for contents? ' + else +select IFONEG yes 'Allow negation of conditions? ' +negchar equ '~' ; Character to use if negation allowed +select IFONULL yes 'NULL - test for no file name? ' +select IFOINPUT yes 'INPUT - test user input? ' +select IFOEQ yes '= - test tokens for equality? ' +XEQOPT equ yes ; Test only first token for equal sign +select IFOERROR yes 'ERROR - test program error flag? ' +select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' +select IFOEXIST yes 'EXIST - test for file existence? ' +select IFAMBIG no 'AMBIG - test for "?" in file spec? ' +select IFCOMPR no 'COMPR - test for compressed filespec? ' +select IFOREG no 'REG - test register values? ' +select IFOWHEEL no 'WHEEL - test wheel byte? ' +select IFOTCAP no 'TCAP - test whether TCAP loaded? ' +select IFOEMPTY no 'EMPTY - test files for contents? ' + endif ; COMIF + +; Miscellaneous configuration information + +curusr equ z3msg+2eh ; Current logged user address +curdr equ z3msg+2fh ; Current logged drive address +curint equ '$' ; Path symbol for current drive/user + +; END of NZFCP.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/nzfcp.lib.sav b/Source/BPBIOS/NZFCP13/nzfcp.lib.sav new file mode 100644 index 00000000..18f557f8 --- /dev/null +++ b/Source/BPBIOS/NZFCP13/nzfcp.lib.sav @@ -0,0 +1,161 @@ +; Module: NZFCP.LIB +; Author: Carson Wilson +; Version: 1.3 +; Date: 9 Oct 89 +; Changes: Prompts for options if SLR true. + +; This module is a set of configuration options for the flow control package +; code in NZFCP.Z80. The options are not fully commented here; see +; "ZCPR3, The Manual" for a detailed discussion of most of them. + + +; * * * * * * N O T I C E * * * * * * +; +; The main code in Z33FCP.Z80 has been written with relative jump instructions +; for minimum code size. If the options below are changed, then some of the +; jumps may become out-of-range. You will then have to change the code based +; on the error messages you get from your assembler. I cannot think of any +; way to handle the jumps automatically (macros fail because the jump distances +; cannot be resolved fully even in two passes of the assembler). If you want +; to play things really safe, you can do a global search and replace to change +; all occurrences of the JR instruction to JP (but note that this change is +; irreversible). I prefer to live with this nuisance so that I can get the +; most out of the code. +; +; Another possible way to clear up a problem with a relative jump that is out +; of range is to take the block of code with the labels IFCTRUE and IFCFALSE +; and move it up or down in the code. It is placed somewhere in the middle of +; the resident options, so that the options can reach those entry points with +; a relative jump. You should try to place that code near the middle of the +; options which you have enabled. +; +; Jay Sage (May 17, 1987) + +;============================================================================= +; +; M A C R O S +; +;============================================================================= + +; SLR assemblers allow selection of options during assembly. + +SLR equ yes + + if SLR + +y equ yes +n equ no + +select macro option default comment + .accept comment,option ; Prompt user for selection + endm + + .printx + .printx Answer "Y" to include, "N" to exclude commands: + .printx + + else + +select macro option default comment +option equ default ; Use selections from file + endm + endif ; SLR + +; ------------------------------------------------------------------------- + +; Command names + +; The CTABLE macro, which constructs the command dispatch table, includes a +; line for each command, the first parameter of which is the name of the +; command. These names may be changed if you wish. But make sure that you +; do not use a name that is longer than the maximum allowed length. If you +; do, the name will be truncated and a nonfatal error will occur during +; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower +; case letters will be converted to upper case. The macro COMMAND is defined +; in Z34MAC.LIB. + +cmdsize equ 4 ; Maximum length of command names + +; Command table name, enable, wheel, jump_addr + ; [ DO NOT CHANGE THESE PARAMETERS ] +ctable macro +ifcmd: command if, yes, no, ifstart + command and, andopt, no, andstart + command or, oropt, no, orstart + command else, yes, no, ifelse + command fi, yes, no, ifend + command ifq, ifqopt, no, ifstat0 + command xif, yes, no, ifexit + command zif, zifopt, no, ifzero + endm + +;----------------------------------------------------------------------------- + +; General configuration options + +NOISE equ no ; Don't display if-state messages + +select COMIF no 'Enable transient IF processing? ' + +PATHROOT equ yes ; Find transient IF in root of path + +ifdrv equ 'A' ; Drive to use if PATHROOT is off or + ; ..if the path is empty +ifusr equ 0 ; User to use if PATHROOT is off or + ; ..if the path is empty + +; --------------------------------------------------------------------- + +; Command inclusion options + +select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' +select IFQOPT yes 'IFQ - show current if status? ' +select OROPT yes 'OR - set state at current level? ' +select ANDOPT yes 'AND - reset state at current level? ' + +;----------------------------------------------------------------------------- + +; If Condition Options + + if COMIF ; Different precedence if transient IF available. +select IFONEG yes 'Allow negation of conditions? ' +negchar equ '~' ; Character to use if negation allowed +select IFOERROR yes 'ERROR - test program error flag? ' +select IFONULL yes 'NULL - test for no file name? ' +select IFOREG yes 'REG - test register values? ' +select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' +select IFCOMPR yes 'COMPR - test for compressed filespec? ' +select IFOEQ yes '= - test tokens for equality? ' +select IFOINPUT yes 'INPUT - test user input? ' +XEQOPT equ yes ; Test only first token for equal sign +select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' +select IFOWHEEL no 'WHEEL - test wheel byte? ' +select IFOTCAP no 'TCAP - test whether TCAP loaded? ' +select IFOEXIST yes 'EXIST - test for file existence? ' +select IFOEMPTY yes 'EMPTY - test files for contents? ' + else +select IFONEG yes 'Allow negation of conditions? ' +negchar equ '~' ; Character to use if negation allowed +select IFONULL yes 'NULL - test for no file name? ' +select IFOINPUT yes 'INPUT - test user input? ' +select IFOEQ yes '= - test tokens for equality? ' +XEQOPT equ yes ; Test only first token for equal sign +select IFOERROR yes 'ERROR - test program error flag? ' +select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' +select IFOEXIST yes 'EXIST - test for file existence? ' +select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' +select IFCOMPR yes 'COMPR - test for compressed filespec? ' +select IFOREG yes 'REG - test register values? ' +select IFOWHEEL no 'WHEEL - test wheel byte? ' +select IFOTCAP no 'TCAP - test whether TCAP loaded? ' +select IFOEMPTY yes 'EMPTY - test files for contents? ' + endif ; COMIF + +; Miscellaneous configuration information + +curusr equ z3msg+2eh ; Current logged user address +curdr equ z3msg+2fh ; Current logged drive address +curint equ '$' ; Path symbol for current drive/user + +; END of NZFCP.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/nzfcp13.for b/Source/BPBIOS/NZFCP13/nzfcp13.for new file mode 100644 index 00000000..40fb0c2c --- /dev/null +++ b/Source/BPBIOS/NZFCP13/nzfcp13.for @@ -0,0 +1,9 @@ +Source code plus the compiled Flow Control Packages (FCP's) +distributed in FCP.LBR as part of the Z System. The precompiled +modules are in Z-Relocatable form, and must be loaded with JetLDR, +NZCOM, or Z3PLUS. Now features interactive assembly of code +a-la-Z34RCP11 under the SLR or ZMAC assemblers. Macro now reports +length of resulting FCP in records and bytes following assembly. +JetLDR signons also automatically generated. 9/15/90 Carson Wilson + + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/nzfcp13.z80 b/Source/BPBIOS/NZFCP13/nzfcp13.z80 new file mode 100644 index 00000000..fe700554 --- /dev/null +++ b/Source/BPBIOS/NZFCP13/nzfcp13.z80 @@ -0,0 +1,1424 @@ + +; Program: NZFCP +; Date: October 9, 1989 +; Author: Carson Wilson +; Version: 1.3 +; Changes: Updated & improved JetLDR signon. +; Changed four JR's to JP's. + +; Date: August 21, 1988 +; Author: Carson Wilson +; Version: 1.2 + +; Derived from: + +; Date: April 1988 +; Name changed and code modified for NZ-COM. + +; Derived from: + +; PROGRAM: Z34FCP +; AUTHOR: Jay Sage +; VERSION: 1.0 +; DATE: May 25, 1987 +; DERIVATION: FCP10 by Jay Sage (ZSIG) + +; ZCPR34 is copyright 1987 by Jay P. Sage. All rights reserved. End-user +; distribution and duplication permitted for non-commercial purposes only. +; Any commercial use of ZCPR34, defined as any situation where the duplicator +; recieves revenue by duplicating or distributing ZCPR34 by itself or in +; conjunction with any hardware or software product, is expressly prohibited +; unless authorized in writing by Jay P. Sage. + +;============================================================================= +; +; R E V I S I O N H I S T O R Y +; +;============================================================================= +; +; 21 Aug 88 Added JetLDR signon description. +; IF IN now prints ' (Y/N)? ', and accepts only Y or y or +; N or n. +; Added macro code to show FCP length following assembly. +; +; Carson Wilson. +; +; 6 April 88 Handles latest Type 4 IF.COM +; 1.2 Changed command tail loader to accept :IF. Joe Wright +; +; 12/31/87 Modified for use with Z34CMN.LIB for NZ-COM. Joe Wright. +; 1.1 +; +; 05/25/87 Created ZCPR33 version from the code I released through ZSIG. +; 1.0 This code differs only in the more efficient way in which it +; determines if it was invoked with a directory prefix that +; signals that the transient IF.COM should be used to process +; the IF command. This permits the user to force the use of a +; more powerful option processor in the transient IF.COM than in +; the resident code. Option bytes were added after the end of +; the resident option dispatch table so that SHOW can report +; configuration options to the user. +; +; FCP10 notes +; +; The transient processor can now be loaded at an address other +; than 100h so as not to interfere with code loaded in the TPA. +; Then the GO command can normally be used even after IF.COM is +; used to process the flow test. If the LOADCHK equate +; is true then the FCP will verify that the transient +; processor has been loaded to the page in memory for which +; it was assembled. If loaded to the wrong page, it will +; be reloaded to the correct one. +; +; The test for the form ARG1=ARG2 was tightened up so as not to +; be confused by an equal sign in some later part of the command +; tail (e.g., "IF REG 1 = 2"). Now only the first token +; (contiguous string of characters) is checked. This extra code +; is under the control of the XEQOPT equate. The only option +; that is still a problem is the COMIF form '~='. Since the '=' +; is in the first token, this 'not equal' condition cannot be +; distinguished from an equality test against the character '~'. +; The solution is to turn off equality testing in the resident FCP +; or to use the alternative COMIF options 'NE' or '~EQ' for this +; test. +; +; Added optional commands AND and OR. These work like IF except +; that they affect the current IF level rather than going one +; level deeper. +; +; Added optional command ZIF to zero out all IF states no matter +; whether current state is true or false (XIF only works if state +; is true. +; +; Added new optional command IFQ (if-query) and enhanced the +; IFSTAT code that is invoked when the NOISE equate is true. +; In both cases, the entire tree of IF states is now shown, +; starting with the current level. For example, IFQ might result +; in the display "IF FTT" (we are at third IF level and it is +; false; the second and first IF levels are true). If the +; current IF level is 0, then the display is "IF None". +; +; Added two new resident options: AMBIGUOUS (AM) returns true if +; the file specification in the second token has a '?' (or '*') +; in it; COMPRESSED (CO) returns true if the file specificaton in +; the second token has a 'Z' or a 'Q' in the second character of +; the file type. +; +; Howard Goldstein contributed significantly to the development +; of this code. Bridger Mitchell also offered helpful +; suggestions. +; +; Jay Sage +; +; Notes from earlier SYSFCP revisions +; +; 09/12/85 Fixed bug in my code used when IF.COM is found in a specified +; drive/user area. The values of CDISK and CUSER were not being +; set, and as a result the user was not returned to the correct +; directory. The EXIST and EMPTY tests did not work correctly +; unless a DIR: or DU: was given explicitly with each file name. +; Jay Sage + +; 08/29/85 Reorganized code so that COMIF code handles only those +; options not in the table of local IF functions. Also changed +; code to allow searching for IF.COM in a specified directory +; instead of using the ROOT of the path. Also renamed macros +; to make code ZAS compatible. +; Jay Sage + +; 07/21/85 Corrected reversed sensing of program error flag in the +; IF ERROR test. +; Jay Sage + +; 01/02/85 Revised to correct a bug in the IF EMPTY test. First, the +; current record byte was not being set to zero before trying +; to read from the file. Secondly, the test for error was not +; testing for FF but for 00. My BDOS does not return 0 for +; success. It seems to return 00, 01, 02, or 03. This made the +; file appear to be empty. +; Jay Sage + + +;============================================================================= +; +; M A C R O S A N D E Q U A T E S +; +;============================================================================= + + name ('FCP') + +; External macro references + + maclib Z34CMN.LIB ; Source of system addresses + maclib NZFCP.LIB ; Source of configuration options + maclib Z34MAC.LIB ; Z34 macros + +; Equates section + +version equ 13 + +lf equ 0ah +cr equ 0dh +bell equ 07h + +base equ 0 +wboot equ base+0000h ; CP/M warm boot address +udflag equ base+0004h ; User num in high nybble, disk in low +bdos equ base+0005h ; BDOS function call entry point +tfcb equ base+005ch ; Default FCB buffer +fcb1 equ tfcb ; 1st and 2nd FCBs +fcb2 equ tfcb+16 +tbuff equ base+0080h ; Default disk I/O buffer +tpa equ base+0100h ; Base of TPA + + +;============================================================================= +; +; J e t L D R S I G N - O N +; +;============================================================================= + +; This prints an extended ID message upon loading with JetLDR. +; These are NOT the command names. + + COM /_ID_/ + + db 'Copyright 1989 ZSA',cr,lf + db 'Commands:',cr,lf + db ' IF ELSE FI XIF ' + + if andopt + db 'AND ' + endif + if oropt + db 'OR ' + endif + if ifqopt + db 'IFQ ' + endif + if zifopt + db 'ZIF ' + endif + + db cr,lf,'Options' + if ifoneg + db ' (use "',negchar,'" to negate)' + endif + if noise + db '; (noise)' + endif + db ':',cr,lf + + if ifotrue + db ' T F ' + endif + if ifambig + db 'AMbig ' + endif + if ifcompr + db 'COmpr ' + endif + if ifoempty + db 'EMpty ' + endif + if ifoeq + db 'x=y ' + endif + if ifoerror + db 'ERror ' + endif + if ifoexist + db 'EXist ' + endif + if ifoinput + db 'INput ' + endif + if ifonull + db 'NUll ' + endif + if iforeg + db 'REgs ' + endif + if ifotcap + db 'TCap ' + endif + if ifowheel + db 'WHeel ' + endif + + if comif + db cr,lf,' Use ' + if pathroot + db 'root:' + endif + db 'IF.COM' + endif + + db 0 ; End of JetLDR sign-on message + + CSEG + +;============================================================================= + +; Start of code + +start: + db 'Z3FCP' ; Flag for Package Loader + +;============================================================================= +; +; C O M M A N D T A B L E +; +;============================================================================= + +; The command name table is structured as follows: +; +; The first byte is the number of characters in each command name. +; Next come records consisting of command names followed by entry +; point addresses for the code to process the command. Finally, +; there is a null to indicate the end of the dispatch table. + + db cmdsize ; Size of text entries +ctab: ctable ; Macro defined in NZFCP.LIB + db 0 + +;============================================================================= +; +; I F C O N D I T I O N O P T I O N S +; +;============================================================================= + +condtab: + + if ifotrue + db 'T ' ; TRUE + dw ifctrue + db 'F ' ; FALSE + dw ifcfalse + endif ; ifotrue + + if ifambig ; Ambiguous file spec + db 'AM' + dw ifcambig + endif ; ifambig + + if ifcompr ; Squeezed or crunched + db 'CO' + dw ifccompr + endif ; ifcompr + + if ifoempty + db 'EM' ; File empty + dw ifcempty + endif ; ifoempty + + if ifoerror + db 'ER' ; Error message + dw ifcerror + endif ; ifoerror + + if ifoexist + db 'EX' ; File exists + dw ifcex + endif ; ifoexist + + if ifoinput + db 'IN' ; User input + dw ifcinput + endif ; ifoinput + + if ifonull + db 'NU' + dw ifcnull + endif ; ifonull + + if ifotcap ; Z3 TCAP available + db 'TC' + dw ifctcap + endif ; ifotcap + + if ifowheel ; Wheel Byte + db 'WH' + dw ifcwheel + endif ; ifowheel + + db 0 + +; Option bytes: these option bytes can be used to convey information to +; programs such as SHOW. The first one is used to reduce the chance of +; misinterpreting data from an earlier version of the FCP that does not +; have the option bytes. The next byte tells if COMIF has been activated +; and if the root of the path will be used as the directory in which to look +; for IF.COM. If PATHROOT is not selected (or if the path is empty), then +; the specified drive/user will be used. The overflow bit in case the user +; number is greater than 15 is kept in bit 2 of the second option byte. The +; combined user/drive value is kept in the third option byte. + +highuser defl ifusr gt 15 + +opt0: db 34h ; ZCPR34 version ID +opt1: optflag highuser,pathroot,comif +opt2: db ( ifusr and 0fh ) shl 4 + ( ifdrv - 'A' ) ; user/drive flag + +;============================================================================= +; +; C O M M A N D P R O C E S S I N G C O D E +; +;============================================================================= + +; Command: ZIF +; +; This command zeros out the IF system no matter what the current +; level IF state is. + + if zifopt + +ifzero: + if noise + call nl ; Print new line + endif ; noise + + jr ifexit1 + + endif ; zifopt + +;----------------------------------------------------------------------------- + +; Command: XIF +; +; If current IF state is true, XIF terminates all IFs, restoring a basic +; TRUE state. + +ifexit: + if noise + call nl ; Print new line + endif ; noise + + call iftest ; See if current IF is running and FALSE + + if noise + jr z,ifstat ; Abort with status message if so + else ; not noise + ret z ; Or just return if false + endif ; noise + +ifexit1: + ld hl,z3msg+1 ; Pt to IF flag + ld (hl),0 ; Zero IF flag + jr ifendmsg ; Print message + +;----------------------------------------------------------------------------- + +; Command: FI +; +; FI decrements to the previous IF level. It does this by shifting the +; current-if-bit in the first 'if' message in the Z3MSG buffer right one +; position. + +ifend: + if noise + call nl ; Print new line + endif ; noise + +; ld hl,z3msg+1 ; Point to IF flag +; ld a,(hl) ; Get it +; or a ; No IF active? + + call msgbf1 + dec hl ; Save a byte over the three lines above + + jr z,ifnderr + +ifendmsg: + if noise + call print + dc 'To ' ; Prefix to status display + endif ; noise + + srl (hl) ; Adjust active bit + + if noise + jr nz,ifstat ; Print status if IF still active + endif ; noise + +ifnderr: + if noise + + call print ; Print message + dc 'No ' + jp prif + + else ; not noise + + ret + + endif ; noise + +;----------------------------------------------------------------------------- + +; Command: ELSE +; +; ELSE complements the Active Bit for the Current IF provided the +; previous IF state was true. If the previous state was false, the +; command is flushed. +; +; This is accomplished according to the following algorithm. If the +; current IF is 0 (no IF) or 1 (one IF), then take the previous state +; to be true and perform the toggle. Otherwise, test the previous +; IF level condition and toggle only if it is true. + +ifelse: + if noise and (not ifqopt) + call nl ; Print new line + endif ; noise and (not ifqopt) + + call msgbf1 ; Get current if + ld b,a ; Save in B + srl a ; Back up if pointer bit to previous IF level + jr z,iftog ; If no previous IF level, go to toggle code + and (hl) ; Determine state of previous IF level + + if noise + if ifqopt + jr z,ifstat0 ; Print status on new line + else + jr z,ifstat ; If false, just print status + endif ; Ifqopt + else ; not noise + ret z ; Or simply return + endif ; noise + +iftog: + ld a,(hl) ; Get if-status message byte + xor b ; Flip current state + ld (hl),a ; Put result back in message byte + ; ..and fall thru to print status + + if not noise + ret + endif + +;----------------------------------------------------------------------------- + +; Indicate if current IF is True or False + +ifstat0: + call nl +ifstat: + call prif ; Print 'IF ' + call msgbf1 ; Get current if byte and set flags + ld b,a ; Get it into B + jr nz,ifstat1 ; Nz means if active + + call print + dc 'None' + ret + +ifstat1: + ld a,(hl) ; Get if-status message byte + and b ; Mask in currently active IF level status + ld c,'F' ; Load with false indicator + jr z,ifstat2 ; If current IF is false, jump + ld c,'T' ; Else, load with true indicator +ifstat2: + ld a,c + call conout + + srl b ; Drop one IF level + jr nz,ifstat1 ; Loop through all IF states + ret + +;------------------------- + +; Output CRLF + +nl: call print + dc cr,lf + ret + +;----------------------------------------------------------------------------- + +; Command: OR + +; This command performs a logical or operation by updating the +; if state without going to a new level. If there are active +; IFs and the current state is true, we do nothing. Else we back +; up one level and fall through to normal IF processing. + + if oropt + +orstart: + call msgbf1 ; Get if active byte + jr z,backup ; Treat like if if no IFs active + and (hl) ; Check current state + jr z,backup ; Current STATE false so go proecess + + if noise + jr ifstat0 ; Else return and show status + else + ret ; Or just return + + endif ; Noise + endif ; Oropt + +;----------------------------------------------------------------------------- + +; Command: AND + +; This command performs a logical and operation by updating the +; if state without going to a new level. If there are active +; IFs and the current state is false, we do nothing. Else we back +; up one level and fall through to normal IF processing. + + if andopt + +andstart: + call iftest ; Test for IF running and false + if noise + jr z,ifstat0 ; Condition met, show status & return + else + ret z ; Condition met, return + endif ; Noise + endif ; Andopt + +; Common stuff for and and or + + if andopt or oropt + +backup: + dec hl ; Pt to flag byte + srl (hl) ; Drop back one level +; +; Poke "IF" into external fcb for transient +; + if comif +pokefcb: + ld de,extfcb+1 ; Pt to external fcb + ld hl,ifcmd ; Pointer to IF command in table + ld bc,cmdsize ; Length + ldir ; Move it in + + endif ; comif + +; Fall through to IF PROCESSING + endif ;Andopt or oropt + +;----------------------------------------------------------------------------- + +; FCP Command: IF +; +; If current IF state is false, then advance to next level and set it +; to false also. If current IF state is true, then test condition and +; set the next level accordingly. + +ifstart: + if not ifqopt + + ld a,(extfcb) ; NZ if explicit + ld hl,tbuff + or (hl) + jp z,ifstat0 ; Report IF status + + endif ; not ifqopt + +ifstrt: + if noise + call nl ; Print new line + endif ; noise + + call iftest ; See if current IF is running and FALSE + jP z,ifcf ; Yes, do the right thing + +; Test for presence of colon in command. If colon present, then go directly +; to COMIF processing. + + if comif + ld a,(extfcb) ; Check drive byte of external FCB + or a ; If it is zero, no colon was present + jp nz,runcomif ; If colon, go to comif processing + ; Else fall through to resident processing + endif ; comif + +;----------------------------------------------------------------------------- +; +; R E S I D E N T C O M M A N D P R O C E S S I N G +; +;----------------------------------------------------------------------------- + +resident: + +; Test for Equality if Equal Sign in Token + + if ifoeq + + ld hl,tbuff+1 + + if xeqopt ; Extended equal testing + +skipsp: ; Skip over any space to first token + ld a,(hl) + or a ; Check for end of tail + jr z,ifck0 ; If so , go on + cp ' '+1 ; Test for space or control character + jr nc,tsteq ; If not, we are at first token + inc hl ; Otherwise advance to next character + jr skipsp ; ..and continue testing + + endif ; xeqopt + +tsteq: + ld a,(hl) ; Get character from command tail + inc hl ; Point to next one + or a ; EOL? + jr z,ifck0 ; Continue if so + + if xeqopt + cp ' '+1 ; End of token? + jr c,ifck0 ; If so, go on + endif ; xeqopt + + cp '=' ; Found '=' ? + jr nz,tsteq ; If not, continue scan + + ld hl,fcb1+1 ; Else, get ready to compare FCBs + ld de,fcb2+1 + ld b,11 ; 11 bytes +eqtest: + ld a,(de) ; Compare + cp (hl) + jr nz,ifcf + inc hl ; Pt to next + inc de + djnz eqtest + jr ifct + + endif ; ifoeq + + +ifck0: + ld de,fcb1+1 ; Point to first character in FCB1 + + if ifoneg + ld a,(de) ; Get it + ld (negflag),a ; Set negate flag + cp negchar ; Is it a negate? + jr nz,ifck1 ; If not, go on + inc de ; Else point to character after negchar +ifck1: + endif ; ifoneg + + if iforeg ; REGISTERS + call regtest ; Test for register value + jr nz,runreg + endif ; iforeg + + call condtest ; Test of condition match + jr nz,runcond ; If found, process condition + + if comif + jp runcomif ; If function not found in table, use transient + else + + call print ; Beep to indicate error + dc bell + + if noise + jp ifstat ; No condition, display current condition + else ; no noise + ret + endif ; noise + endif ; comif + +;----------------------------------------------------------------------------- +; +; Process register - register value is in A +; +;----------------------------------------------------------------------------- + + if iforeg +runreg: + push af ; Save value + call getnum ; Extract value in FCB2 as a number + pop af ; Get value + cp b ; Compare against extracted value + jr jrtrue ; True if match; false if not + endif ; iforeg + +;----------------------------------------------------------------------------- +; +; Process conditional test - address of conditional routine is in HL +; +;----------------------------------------------------------------------------- + +runcond: + jp (hl) ; "call" routine pted to by HL + +;============================================================================= +; +; R E S I D E N T C O N D I T I O N O P T I O N S +; +;============================================================================= + +; Condition: AMBIGUOUS + + if ifambig + +ifcambig: + ld hl,fcb2+1 ; Scan FCB2 for a '?' character + ld bc,11 ; Characters to scan + ld a,'?' ; Reference character + cpir + jr jrtrue ; True if '?' found; false if not + + endif ; ifambig + +;----------------------------------------------------------------------------- + +; Condition: COMPRESSED + + if ifcompr + +ifccompr: + ld a,(fcb2+10) ; Get middle character of file type + cp 'Z' ; Crunched + jr z,ifctrue + cp 'Q' ; Squeezed + jr jrtrue + + endif ; ifcompr + +;----------------------------------------------------------------------------- + +; Condition: TRUE +; IFCTRUE enables an active IF +; Condition: FALSE +; IFCFALSE enables an inactive IF + + if ifoempty or ifoerror or ifoexist or ifowheel +jrfalse: + jr z,ifcfalse + endif ; Ifoempty or ifoerror or ifoexist or ifowheel + +ifctrue: + + if ifoneg + call negtest ; Test for negate + jr z,ifcf + endif ; ifoneg + +ifct: + ld b,0ffh ; Active + jp ifset + + if iforeg or ifambig or ifcompr or ifoinput or ifonull +jrtrue: + jr z,ifctrue + endif ; Iforeg or ifambig or ifcompr or ifoinput or ifonull + +ifcfalse: + + if ifoneg + call negtest ; Test for negate + jr z,ifct + endif ; ifoneg + +ifcf: + ld b,0 ; Inactive + jp ifset + +;----------------------------------------------------------------------------- + +; Condition: EMPTY filename.typ + + if ifoempty +ifcempty: + call tlog ; Log into FCB2's DU + ld de,fcb2 ; Pt to fcb2 + ld c,15 ; Open file + push de ; Save fcb ptr + call bdos + pop de + inc a ; Not found? + jr z,ifctrue + ld c,20 ; Try to read a record + xor a ; set cr value to zero + ld (fcb2+32),a ; to attempt to read first record + call bdos + or a ; 0=OK + jr jrfalse ; true if no read + endif ; ifoempty + +;----------------------------------------------------------------------------- + +; Condition: ERROR + + if ifoerror +ifcerror: + ld a,(z3msg+6) ; Get error byte + or a ; 0=FALSE (no error registered) + jr jrfalse + endif ; ifoerror + +;----------------------------------------------------------------------------- + +; Condition: EXIST filename.typ + + if ifoexist +ifcex: + call tlog ; Log into DU + ld de,fcb2 ; Pt to fcb + ld c,17 ; Search for first + call bdos + inc a ; Set zero if error + jr jrfalse + endif ; Ifoexist + +;----------------------------------------------------------------------------- + +; Condition: INPUT (from user) + +; Modified to say " (Y/N)? ", and accept ONLY Y or y or N or n +; Carson Wilson 3/1/88 + + if ifoinput +ifcinput: + call print + dc ' (Y/N)? ' +ifcinp1: + ld hl,z3msg+7 ; Pt to ZEX message byte + ld (hl),10b ; Suspend ZEX input + push hl ; Save ptr to ZEX message byte +ifcinp2: + ld e,0ffh + ld c,6 ; Direct input from console + call bdos + or a ; Any input yet? + jr z,ifcinp2 ; Nope, try again + + pop hl ; Get ptr to ZEX message byte + ld (hl),0 ; Return ZEX to normal processing + and 5fh ; Mask and capitalize user input + cp 'Y' + jr nz,testN ; No, check if 'N' + call conout ; Display 'Y' + jr ifctrue ; Process as true +testN: + cp 'N' + jr nz,notN ; Not 'N' or 'n' + call conout ; Display 'N' + jr ifcfalse ; Process as false +notN: + ld a,bell ; Protest! + call conout + jr ifcinp1 ; Force either Y or y or N or n + + endif ; ifoinput + +;----------------------------------------------------------------------------- + +; Condition: NULL (2nd file name) + + if ifonull +ifcnull: + ld a,(fcb2+1) ; Get first char of 2nd file name + cp ' ' ; Space = null + jr jrtrue + endif ; ifonull + +;----------------------------------------------------------------------------- + +; Condition: TCAP + + if ifotcap +ifctcap: + ld a,(z3env+80h) ; Get first char of Z3 TCAP Entry + cp ' '+1 ; Space or less = none + jP c,ifcfalse + jP ifctrue + endif ; ifotcap + +;----------------------------------------------------------------------------- + +; Condition: WHEEL + + if ifowheel +ifcwheel: + ld hl,(z3env+29h) ; Get address of wheel byte + ld a,(hl) ; Get byte + or a ; Test for true + jP jrfalse ; False if 0 + endif ; ifowheel + +;============================================================================= +; +; S U P P O R T R O U T I N E S +; +;============================================================================= + +; Convert chars in FCB2 into a number in B + + if iforeg +getnum: + ld b,0 ; Set number + ld hl,fcb2+1 ; Pt to first char +getn1: + ld a,(hl) ; Get char + inc hl ; Pt to next + sub '0' ; Convert to binary + ret c ; Done if error + cp 10 ; Range? + ret nc ; Done if out of range + ld c,a ; Value in C + ld a,b ; A=old value + add a,a ; *2 + add a,a ; *4 + add a,b ; *5 + add a,a ; *10 + add a,c ; Add in new digit value + ld b,a ; Result in B + jr getn1 ; Continue processing + endif ; iforeg + +;----------------------------------------------------------------------------- + +; Log into DU in FCB2 + + if ifoexist or ifoempty + +tlog: + ld a,(fcb2) ; Get disk + or a ; Current? + jr nz,tlog1 + ld c,25 ; Get disk + call bdos + inc a ; Increment for following decrement +tlog1: + dec a ; A=0 + ld e,a ; Disk in E + ld c,14 + call bdos + ld a,(fcb2+13) ; Pt to user + ld e,a + ld c,32 ; Set user + jp bdos + + endif ; ifoexist or ifoempty + +;----------------------------------------------------------------------------- + +; Test of Negate Flag = negchar + + if ifoneg +negtest: +negflag equ $+1 ; Pointer for in-the-code modification + ld a,0 ; 2nd byte is filled in + cp negchar ; Test for No + ret + endif ; ifoneg + +;----------------------------------------------------------------------------- + +; Test FCB1 against a single digit (0-9) +; Return with register value in A and NZ if so + + if iforeg +regtest: + ld a,(de) ; Get digit + sub '0' + jr c,zret ; Z flag for no digit + cp 10 ; Range? + jr nc,zret ; Z flag for no digit + ld hl,z3msg+30h ; Pt to registers + add a,l ; Pt to register + ld l,a + ld a,h ; Add in H + adc 0 + ld h,a + xor a ; Set NZ + dec a + ld a,(hl) ; Get register value + ret +zret: + xor a ; Set Z + ret + endif ; iforeg + +;----------------------------------------------------------------------------- + +; Test to see if a current IF is running and if it is FALSE +; If so, return with Zero Flag Set (Z) +; If not, return with Zero Flag Clear (NZ) +; Affect only HL and PSW + +iftest: + call msgbf1 ; Test for active IF + jr z,ifok ; No active IF + and (hl) ; Check active flag + ret z ; Return Z since IF running and FALSE +ifok: + or 255 ; Return NZ for OK + ret + +msgbf1: + ld hl,z3msg+1 ; Get IF active flag + ld a,(hl) + inc hl ; Pt to If status byte + or a ; Set z if no IF active + ret + +;----------------------------------------------------------------------------- + +; Test FCB1 against condition table (must have 2-char entries) +; Return with routine address in HL if match and NZ flag + +condtest: + ld hl,condtab ; Pt to table +condt1: + ld a,(hl) ; End of table? + or a + ret z + ld a,(de) ; Get char + cp (hl) ; Comppare entries + inc hl ; Pt to next + inc de + jr nz,condt2 + ld a,(de) ; Get 2nd char + cp (hl) ; Compare + jr nz,condt2 + inc hl ; Pt to address + ld a,(hl) ; Get address in HL + inc hl + ld h,(hl) + ld l,a ; HL = address + jr ifok ; Set NZ for OK +condt2: + inc hl ; Pt to next entry + inc hl ; Skip over addr + inc hl + dec de ; Pt to 1st char of condition + jr condt1 + +;----------------------------------------------------------------------------- + +; Turn on next IF level +; B register is 0 if level is inactive, 0FFH if level is active + +ifset: +; ld hl,z3msg+1 ; Get IF flag +; ld a,(hl) +; or a ; If no if at all, start 1st one + + call msgbf1 + dec hl + + jr z,ifset1 +ifset0: + add a,a ; Advance to next level + jr c,iferr ; Check for overflow (8 IFs max) + ld (hl),a ; Set IF byte + jr ifset2 +ifset1: + inc a ; A=1 + ld (hl),a ; Set 1st IF +ifset2: + ld d,a ; Get IF byte + and b ; Set interested bit + ld b,a + inc hl ; Pt to active flag + ld a,d ; Complement IF byte + cpl + and (hl) ; Mask in only uninterested bits + or b ; Mask in interested bit + ld (hl),a ; Save result + + if noise + jp ifstat ; Print status and exit + else + ret ; Or just exit + endif ; noise + +iferr: + call print ; Beep to indicate overflow + dc bell + ret + +;============================================================================= +; +; T R A N S I E N T I F P R O C E S S I N G +; +;============================================================================= + + + if comif + +runcomif: + +; First we have to find IF.COM + + ld bc,100h*(ifdrv-'A')+ifusr ; Values to use if null path + + if pathroot + + ld hl,(expath) ; Point to symbolic path (indirect) +fndroot: + ld a,(hl) ; Check for end of path + or a + jr z,froot2 ; If end, branch + +; Process Next Path Element + + cp curint ; Current disk/user symbol? + jr nz,froot0 ; If not, branch + ld a,(curdr) ; Get current disk + inc a ; Compensate for following decrement +froot0: + dec a ; Shift to range 0..15 + ld b,a ; Set disk + inc hl ; Point to user in path + ld a,(hl) ; Get user + cp curint ; Current drive/user symbol? + jr nz,froot1 ; If not, branch + ld a,(curusr) ; Get current user +froot1: + ld c,a ; Set user + inc hl ; Point to next element in symbolic path + jr fndroot + +; Done with Search - BC Contains ROOT DU (or specified DU if path is empty) + + endif ; pathroot + +froot2: + call logbc ; Log into IF.COM's directory + +; Try to Open File IF.COM + + ld de,extfcb ; Point to command FCB + xor a + ld (de),a ; Force current drive + ld c,15 ; Open file + call bdos + inc a + jr nz,ifload ; Branch if file found + +; IF.COM not found - process as IF F + +ifnotfnd: + call iferr ; Ring bell + call reset ; Return home + jp ifcf + +; Load File IF.COM + +ifload: + call defdma ; First record to tbuff + call readcmd ; Read 1st record from IF.COM + jr nz,ifnotfnd ; If eof, treat as if file not found + + ld (extfcb+32),a ; Start from scratch (record 0) + ld a,(tbuff+8) + cp 3 + jr c,ifnotfnd ; Only Types 3 and 4 are acceptable + + call loadif ; Load IF.COM and set IFADR appropriately +; +; Build the command tail at tbuff +; + ld de,tbuff ; Point DE to tbuff + push de ; Save it for later + ld hl,(z3msg+4) ; Points into MCL buffer +; +; Advance HL to first 'space' after IF or .IF or :IF +; +advsp: inc hl + ld a,(hl) + cp ' '+1 ; Carry if space or null + jr nc,advsp + + ld c,0 ; Clear a counter + +putt: inc de ; Advance tbuff pointer + ld a,(hl) ; From MCL + ld (de),a ; To tbuff + inc hl ; Advance MCL pointer + or a ; Check for null + jr z,putx ; End of command line + cp ';' ; Command separator + jr z,putx ; End of command + inc c ; Count it up + jr putt ; Next.. + +putx: xor a ; Get a null + ld (de),a ; Terminate the line in tbuff + pop hl ; Beginning of tbuff + ld (hl),c ; Character count +; +; Pick up the execution address for Type 3 or 4 +; + ld hl,(ifadr) ; Load address + ld a,(hl) ; First byte at load address + cp 0c7h ; Test for RST 0 + jr nz,runif ; Nope, execute it + ld (hl),0c3h ; Plug in a JP +; +; Arrive here to execute IF.COM +; +runif: ld hl,z3env ; Pass environment in HL + db 0c3h ; JP instruction +ifadr: dw 0 ; Load/Execution address of IF.COM + +; +; Load IF.COM +; +loadif: + ld hl,(tbuff+11) ; Type 3 load address + jr z,loada ; Load as Type 3 +; +; Assume Type 4 (or higher) +; + ld hl,extfcb+32 ; Point to CR of extfcb + ld (hl),2 ; Set up for record 2 + push hl ; Save the pointer + call readcmd ; Get it into tbuff + pop hl + jp nz,ifnotfnd ; Too short + ld (hl),a ; Record 0 again + ld hl,(tbuff+11) ; Size word + push hl ; Save it + call readcmd ; Read record 0 again + pop bc ; Size + ld de,(ccp) ; CCP start + ld hl,z3env + dec a ; Phony fullget flag + call tbuff+9 ; Call Type 4 loader + push hl ; Save load address + call readcmd ; Read record 1 to tbuff (point to record 2) + pop hl ; Load address +; +loada: ld (ifadr),hl ; Save it +; +; Load IF.COM to (HL) until end of file, reset DMA and DU and return +; +load: push hl ; Save loading address + call setdma ; According to HL + call readcmd ; Read a record from file + pop hl ; Get current loading address back + jr nz,reset ; End of file + ld de,128 ; Advance it by one record + add hl,de + jr load ; Back to read some more + +; Reset DMA and Current DU + +reset: call defdma + ld bc,(curusr) ; Return home + +; Log Into DU in BC + +logbc: ld e,b ; Set disk + push bc + ld c,14 ; Select disk + call bdos + pop bc + ld e,c ; Set user + ld c,32 ; Select user + jp bdos + + +; Set default DMA address + +defdma: ld hl,tbuff + +; Set DMA to address according to HL + +setdma: push hl ; Save it + ex de,hl ; To DE + ld c,26 ; Set DMA command + call bdos ; Do it + pop hl ; DMA address + ret + +; Read a record from file in EXTFCB + +readcmd: + ld de,extfcb + ld c,20 + call bdos + or a ; Set NZ if error (end of file) + ret + + endif ; comif + +;============================================================================= +; +; U T I L I T Y S U B R O U T I N E S +; +;============================================================================= + +; Print "IF " + +prif: + call print + dc 'IF ' + ret + +;----------------------------------------------------------------------------- + +; Print String (terminated in 0 or MSB Set) at Return Address + +print: + ex (sp),hl ; Get address + call print1 + ex (sp),hl ; Put address + ret + +; Print String (terminated by MSB Set) pted to by HL + +print1: + ld a,(hl) ; Done? + inc hl ; Pt to next + call conout ; Print char + or a ; Set msb flag (m) + ret m ; Msb terminator + jr print1 + +;----------------------------------------------------------------------------- + +; Console Output Routine + +conout: + push hl ; Save regs + push de + push bc + push af + and 7fh ; Clear msb + ld e,a ; Char in E + ld c,2 ; Output + call bdos + pop af ; Get regs + pop bc + pop de + pop hl + ret + +;============================================================================= +; +; Display current length in records +; +prtval macro m1,v1,m2,v2,m3 + .radix 10 + .printx m1 v1 m2 v2 m3 + endm + +length equ $ - start +recs equ length / 128 +bytes equ length mod 128 + + .printx + prtval ,%recs,,%bytes, + .printx + + end + +; End of NZFCP.Z80 + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/z34cmn.lib b/Source/BPBIOS/NZFCP13/z34cmn.lib new file mode 100644 index 00000000..ad8c8cec --- /dev/null +++ b/Source/BPBIOS/NZFCP13/z34cmn.lib @@ -0,0 +1,105 @@ +; +; Library: Z34CMN.LIB +; Author: Carson Wilson +; Version: 1.2 +; Date: 16 June 1988 +; Changes: Renamed CRT0 to LINS for NZCOM compatibility. +; Added CUSR " " " + +; Author: Carson Wilson +; Version: 1.1 +; Date: 12 June 1988 +; Changes: Added CDRV for various Z34RCP commands. +; Added CRT0 for Z34RCP TYPE command. +; Added Z3TCAP and CLRSCR for Z34RCP CLS command. +; Added QUIET for ZCPR34 time in prompt. +; Added RSDMSG for ZCPR34 time in prompt. + +; Library: Z34CMN.LIB +; Author: Joe Wright +; Date: 23 March 1988 + +; As a replacement for Z3BASE.LIB, some usual equates. + +base equ 0 ; Base Page + +false equ 0 +true equ not false + +no equ false +yes equ true + +off equ false +on equ true + +; Named COMMON declarations start here. For compatibility, these +; are the same names used by Bridger Mitchell's JetLDR. + + common /_ENV_/ +z3env: ; Z3 Environment descriptor +z3envs equ yes ; There is one + +expath equ z3env+9 ; Address of External Path +expaths equ 10 ; Maximum 10 elements for MPATH + +rcp equ z3env+0ch ; Address of RCP +rcps equ yes ; Used as existence test, not size + +fcp equ z3env+12h ; Address of FCB +fcps equ yes ; Used as existence test, not size + +z3ndir equ z3env+15h ; Address of NDR +z3ndirs equ yes ; Used as existence test, not size + +quiet equ z3env+28h ; Quiet flag address + +z3whl equ z3env+29h ; Wheel byte address +z3whls equ yes ; There is a wheel + +lins equ z3env+33h ; CRT text lines address + +ccp equ z3env+3fh ; CCP entry +ccps equ z3env+41h ; Size + +dos equ z3env+42h ; DOS entry (+6) +doss equ z3env+44h ; Size + +bio equ z3env+45h ; BIO entry + +z3tcap equ z3env+80h ; TCAP address + +clrscr equ z3env+97h ; Clear screen string address + + common /_SSTK_/ +shstk: ; Top of Shell stack +shstks equ yes ; There is a shell stack + + common /_MSG_/ +z3msg: ; Message buffer +z3msgs equ yes ; There is one + +cusr equ z3msg+2eh ; Current user +cdrv equ z3msg+2fh ; Current drive + +rsdmsg equ z3msg+3ah ; Reserved bytes + + common /_FCB_/ +extfcb: ; External file control block +extfcbs equ yes ; There is one + + common /_MCL_/ +z3cl: ; Multiple command line +z3cls equ yes ; There is one + + common /_XSTK_/ +extstk: ; External stack +extstks equ yes ; There is one + + common /_BIOS_/ +bios: + + cseg ; Select Code Segment + +; End of Z34CMN.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/NZFCP13/z34mac.lib b/Source/BPBIOS/NZFCP13/z34mac.lib new file mode 100644 index 00000000..8ab3ffbe --- /dev/null +++ b/Source/BPBIOS/NZFCP13/z34mac.lib @@ -0,0 +1,122 @@ + +; Z33MAC.LIB : Macros for use with ZCPR33 + +; General purpose macros + +putreg macro + push hl ; Save registers in order + push de + push bc + endm + +getreg macro + pop bc ; Restore registers in order + pop de + pop hl + endm + +swap macro + rrca ; Exchange nibbles + rrca + rrca + rrca + endm + +;---------------------------------------- + +; Macro for forming option bytes + +; This macro generates a byte with bits corresponding to up to 8 option +; flags. The bits are filled in the order of the parameters and are right +; justified in the byte. + +optflag macro f1,f2,f3,f4,f5,f6,f7,f8 + +flag defl 0 ;; initial value + + irp temp, + + if not nul temp +flag defl flag shl 1 + if temp +flag defl flag or 1 + endif ;;temp + endif ;;not nul temp + + endm ;; irp + + defb low flag + + endm ;; optflag + +;----------------------------------------------------------------------------- + +; Command table entry definition macro + +; Macro to form an entry for one command in the table. The first parameter is +; the name to be used for the command (no quotes); the second parameter is the +; flag that indicates whether or not the command is to be enabled; the third +; parameter is the wheel control flag; and the last parameter is the jump +; address to the code that carries out the command. The command names are +; automatically padded out to the correct length (they will be truncated and +; an error message will result if a command name is too long). The characters +; in the command name are automatically converted to upper case. + +command macro cmdname,enableflag,wheelflag,address + + if enableflag ;; Generate command only if enabled + +whlmask defl wheelflag ;; Initialize variables +count defl cmdsize ;; Initialize to size of each command name + + irpc char,cmdname ;; Repeat over letters in command name + +count defl count - 1 ;; Count down characters in name + + if [ count lt cmdsize ] + + ;; If character is lower case, convert to upper case + + if [ '&char' ge 'a' ] and [ '&char' le 'z' ] + + if whlmask + defb [ '&char' and 5fh ] + 80h + else ;;not whlmask + defb [ '&char' and 5fh ] + endif ;;whlmask + + else ;;not lower case + + if whlmask + defb '&char' + 80h ;; If controlled by wheel, set high bit + else ;;not whlmask + defb '&char' ;; If not restricted, leave high bit clear + endif ;;whlmask + + endif ;;lower case + + endif ;;[ count lt cmdsize ] + +whlmask defl false ;; Turn off high-bit setting after first char + + endm ;irpc + + ;; Pad command name with blanks + + if [ count gt cmdsize ] ;; If we underflowed + *** Command name "&cmdname" is too long / truncated *** + else + rept count + defb ' ' + endm + endif ;[ count gt cmdsize ] + + dw address ;; Dispatch address for command + + endif ;enable + + endm ;command + +; End Z33MAC.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/WW.Z3T b/Source/BPBIOS/WW.Z3T new file mode 100644 index 0000000000000000000000000000000000000000..004cc957de530cb7f514fad115d83dd0a428540f GIT binary patch literal 128 zcmWFw(KR(PRe*r_1_4$H7GVYk2I**P59w$lFCarTQ#Hj}HN^wS^af(XTp*DPR$}N2 z;`;yz1F%AuTm}PEa}yxnEDuQ78)pIy(lp=$5;pum9XZ*#S%npeiREQ^r6oW<2mk;N CgBZU6 literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/Z34RCP11/Build.cmd b/Source/BPBIOS/Z34RCP11/Build.cmd new file mode 100644 index 00000000..1323b95f --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/Build.cmd @@ -0,0 +1,11 @@ +@echo off +setlocal + +set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; + +set ZXBINDIR=../../../tools/cpm/bin/ +set ZXLIBDIR=../../../tools/cpm/lib/ +set ZXINCDIR=../../../tools/cpm/include/ + +rem zx Z80ASM -z34rcp11/MF +zx ZMAC -z34rcp11.z80 -/P diff --git a/Source/BPBIOS/Z34RCP11/Clean.cmd b/Source/BPBIOS/Z34RCP11/Clean.cmd new file mode 100644 index 00000000..a088f4e8 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/Clean.cmd @@ -0,0 +1,7 @@ +@echo off +setlocal + +if exist *.prn del *.prn +if exist *.lst del *.lst +if exist *.err del *.err +if exist *.rel del *.rel diff --git a/Source/BPBIOS/Z34RCP11/cledinst.com b/Source/BPBIOS/Z34RCP11/cledinst.com new file mode 100644 index 0000000000000000000000000000000000000000..c26a3cf02c007453704ae76535470281de8a2ed1 GIT binary patch literal 4992 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 literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/Z34RCP11/nzrcp.z80 b/Source/BPBIOS/Z34RCP11/nzrcp.z80 new file mode 100644 index 00000000..52b844e3 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/nzrcp.z80 @@ -0,0 +1,3010 @@ + +; New Name: NZRCP.Z80 Joe Wright July 1987 + +; Program: Z34RCP +; Version: 1.0 +; Description: Resident Command Package (RCP) for ZCPR34 +; Author: Jay Sage +; Date: March 1, 1987 +; Derivation: SYSRCP (Richard Conn) and many other contributions + +; ZCPR34 is copyright 1987 by Jay P. Sage. All rights reserved. End-user +; distribution and duplication permitted for non-commercial purposes only. +; Any commercial use of ZCPR34, defined as any situation where the duplicator +; recieves revenue by duplicating or distributing ZCPR34 by itself or in +; conjunction with any hardware or software product, is expressly prohibited +; unless authorized in writing by Jay P. Sage. + +version equ 2 +subver equ 4 + +; Vers 2.4 - Add whlchk subroutine for indirect addressing of wheel byte. +; 4 Apr 88 - Fixed command list routines. +; Joe Wright - Inhibit SPOP if there is no shell. Allow shstks = 1. + +; Vers 2.3 - Reset command, after calling F37, jumps to 0. +; 22 Feb 88 + +; Vers 2.2 - Modified for use of Z34CMN.LIB and NZ-COM. +; 31 Dec 87 +; Joe Wright + + +; Vers 2.1 - R command uses ZRDOS function 37 to reset drives. +; 6 Sep 87 - WHL command changed, WHLQ disappears. +; Joe Wright - REG command expanded. Add REG E (program error byte) +; - SPOP command added. Pops the shell stack + +;============================================================================= +; +; D E F I N I T I O N S S E C T I O N +; +;============================================================================= + + name ('RCP') + + maclib z34cmn.lib ; Defines ZCPR system addresses + maclib z34defn.lib ; Defines offsets in Z34 command processor + maclib z34mac.lib ; Macros + maclib sysdef.lib ; Common logic, sys, ascii defines + maclib nzrcp.lib ; Defines command options + +;============================================================================= +; +; E N T R Y C O D E S E C T I O N +; +;============================================================================= + +start: + db 'Z3RCP' ; Package ID + + +;---------------------------------------- + +; Command table + + db cmdsize ; Length of each command name + cmdtbl ; Dispatch table from Z33RCP.LIB + db 0 ; Marks end of command jump table + + +;---------------------------------------- + +; Name of RCP + +; This block allows the 'H' command and/or the SHOW utility to display a name +; and version number for this RCP as well as the commands that are supported. + +rcpname: + idstring ; From macro in Z33RCP.LIB + +; Include only those code sections that are required. + +; include rcph ; 'H' help (command list) command + page + +; RCP-H.Z80 'H' Command + +;============================================================================= +; +; H E L P C O M M A N D +; +;============================================================================= + +; This command displays a list of all resident commands that are supported, +; including those in the CPR (command processor), RCP, and FCP. + +clist: + +; Print the CPR-resident command names + + if listcpr + + call print ; Print "CPR" + db lf + db 'CP','R'+80h +; + ld hl,(ccp) ; CCP location from Z3ENV + ld de,offcmd ; Offset to CPR command table + add hl,de + call cmdlist ; Display the list of commands + + endif ;listcpr + +; Print the FCP-resident command names + + if listfcp + + ld hl,(fcp) + ld a,h + or l + jr z,rcplist ; No FCP + + ld a,(hl) + or a + jr z,rcplist ; FCP removed + + call print ; Print header for FCP + db lf + db 'FC','P'+80h + ld de,5 + add hl,de ; Point to FCP command table + call cmdlist + + endif ;listfcp + +; Print the RCP-resident command names + +rcplist: + if listrcp + + call crlf ; Skip a line + ld hl,rcpname ; Print RCP name + call printhl + ld hl,start+5 ; Point to RCP command table + + else + + ret + + endif ;listrcp + + ; Fall through to CMDLIST + +;---------------------------------------- + +; Subroutine to display list of commands in a command table (code above +; falls through to this routine -- do not move it). The commands are +; displayed 5 per line with 8 character spaces allowed for each command +; (subject to equates below). + +cmdlist: + call crlf ; Start with new line + ld e,(hl) ; Get size of each command name into DE + ld d,0 + inc hl ; Point to name of first command + ld c,cmdsline ; Set names-per-line value + +cmdlist1: + ld a,(hl) ; Get first character of the command name + or a ; See if it is null + jr nz,cmdlist1a ; If not, continue + ld a,cmdsline ; See if we are already on a new line + cp c + call nz,crlf ; If not, skip a line + ret + +cmdlist1a: + if noshow ; Option to suppress wheel-limited cmds + rla ; Shift high bit of name into carry bit + jr nc,cmdlist2 ; If not restricted, go on + call whlchk ; Check wheel byte + jr nz,cmdlist2 ; If wheel set, continue as usual + add hl,de ; Otherwise skip this command + jr cmdlist5 + endif + +; Print leading spaces between names + +cmdlist2: + ld a,cmdspace ; Spacing between command names + sub e ; Less length of each command name + ld b,a + ld a,' ' +cmdlist3: + call conout + djnz cmdlist3 + +; Print name of command + + ld b,e ; Length of each name into B +cmdlist4: + ld a,(hl) ; Get command name character + call conout + inc hl ; Point to next + djnz cmdlist4 + + dec c ; Decrement count of names on this line + jr nz,cmdlist5 ; Branch if room for more names + call crlf ; Otherwise, end this line and + ld c,cmdsline ; ..reset count for another line of commands + +; Skip to next command name + +cmdlist5: + inc hl ; Skip jump vector + inc hl + jr cmdlist1 ; Back to process next name + +; End RCP-H.Z80 + +;============================================================================= +; +; P O P S H E L L S T A C K C O M M A N D +; +;============================================================================= + +; +; POP the Shell Stack +; + if spopon + +; Pop the shell stack + +spop: ld hl,(z3env+1eh) ; SHSTK (indirect) + ld a,h + or l + ret z ; No shell stack + + ex de,hl ; SHSTK to DE + ld hl,(z3env+20h) ; SHSTKS to L, SHSIZE to H + push hl ; Save SHSIZE + xor a ; Your basic null in A + ld b,l + dec b ; SHSTKS-1 in B + jr z,sp0a ; Clear one entry + + push de ; Save SHSTK + ld e,h ; SHSIZE to E + ld d,a ; Clear D + ld h,a ; Clear H.. + ld l,a ; ..and L +sp0: add hl,de ; Multiply SHSIZE*(SHSTKS-1) + djnz sp0 + ld b,h + ld c,l ; Length to BC + ex de,hl ; SHSIZE to HL + pop de ; Get SHSTK (destination) + add hl,de ; SHSTK+SHSIZE to HL (Source) + ldir + +sp0a: pop bc ; Get SHSIZE in B +sp1: ld (de),a ; Clear last entry + inc de + djnz sp1 + ret + endif ; SPOPON + + + if clson +; include rcpcls ; 'CLS' clear screen command + page + +; RCP-CLS.Z80 'CLS' Command + +;============================================================================= +; +; C L E A R S C R E E N C O M M A N D +; +;============================================================================= + +; Command: CLS +; Function: To clear the CRT screen +; Comments: The setting of the CLSTCAP equate determines whether this +; command uses the TCAP information or not. If not, it uses the +; clear-screen string passed in macro CLSSTR. That string should +; end with the high bit set. + +cls: + if clstcap ; If using TCAP for clear screen string + + ld a,(z3env+80h) ; Get beginning of tcap + cp ' '+1 ; See if blank or perhaps null + jr nc,cls1 ; If not, go to clear screen code + call print ; If blank, then give error message + db ' No TCA','P'+80h + ret + +cls1: ld hl,z3env+97h ; Point to beginning of clear screen string + jp printhl ; Display it + + else ; Not using tcap + + call print + clsstr ; String from Z33RCP.LIB + ret + + endif ;clstcap + +; End RCP-CLS.Z80 + + endif ;clson + + if reson +; include rcpr ; 'R' disk reset command + page + +; RCP-R.Z80 'R' command + +;============================================================================= +; +; D I S K R E S E T C O M M A N D +; +;============================================================================= + +; Command: RESET +; Function: Reset the disk system +; Comments: ZRDOS does not require a disk system reset when disks are +; changed, but directory programs will not show the correct +; size if this is not done. It is also good practice. Since +; no warm boot performed, the disk in drive A need not have the +; operating system on it. +; Ver 2.1 Now logs all drives off and forces fixed and ram disks to +; re-log. +reset: + if resmsg ; If displaying a reset message + call print ; Report action + dc ' Reset' + endif ;resmsg + + ld de,-1 ; All 16 drives + ld c,37 ; Disks reset ZRDOS function + call bdos + ld c,13 ; Reset disk system + jp bdos + +; End RCP-R.Z80 + + endif ;reson + + if tston +; include rcptst ; 'TST' error test command + page + +; RCP-TST.Z80 'TST' Command + +;============================================================================= +; +; E R R O R T E S T C O M M A N D +; +;============================================================================= + +; Command: TST +; Function: To set the message buffer program error flag based on +; error count reported by M80 or L80 +; Syntax: TST PN where PN is (at least) the first letter of M80 or L80 + +testerr: + +; Check for name of program to test + + ld a,(fcb1+1) ; Get first character in program name + + if testm80 + ld hl,m80f ; Preset for m80 test counts + ld de,m80w + cp 'M' + jr z,testcount + endif ; Testm80 + + if testf80 + ld hl,f80f + ld de,f80w + cp 'F' + jr z,testcount + endif ; Testf80 + +; If no match, give error message + + call print + db 'bad nam','e'+80h + +testcount: + ld a,(hl) ; Test first error count word + inc hl + or (hl) + ex de,hl ; Test second word + or (hl) + inc hl + or (hl) + ld hl,z3msg+6 ; Point to program error flag + ld (hl),0 ; Clear it + ret z ; If counts were zero, we are done + ld (hl),0ffh ; Else set the error flag + ret + +; End RCP-TST.Z80 + + endif ;tston + + if spaceon +; include rcpsp ; 'SP' space on disk command + page + +; RCP-SP.Z80 'SP' Command + +;============================================================================= +; +; D I S K S P A C E C O M M A N D +; +;============================================================================= + +; Command: SP +; Function: Shows space remaining on designated drive +; Syntax: SP [DIR:|DU:] +; Comments: This code can be called by several other RCP commands so that +; they can show the space remaining on the disk after their +; operation. + + if [erasp or cpsp or dirsp] +crspace: ; Used to call space after other subroutines + call crlf ; Start new line + endif ;[erasp or cpsp or dirsp] + +space: + ld a,(fcb1) ; Determine requested drive + or a ; If drive explicitly selected + jr nz,space1 ; ..then skip + + ld c,25 ; BDOS get current drive function + call bdos + inc a ; Shift to range 1..16 + +space1: + dec a ; Shift to range 0..15 + ld e,a ; Save in E for selecting disk below + add 'A' ; Convert to letter and + ld (seldrv),a ; save in message string below + ld c,14 ; BDOS select disk function + call bdos ; Not needed if no drive selected, but smallest + ; ..possible code size this way. + +; Here we extract the following disk parameter information from the disk +; parameter block (DPB): +; BLKSHF: block shift factor (1 byte) +; BLKMAX: max number of blocks on disk (2 bytes) + +dparams: + ld c,31 ; BDOS get disk parameters function + call bdos + inc hl ; Advance to block shift factor byte + inc hl + ld a,(hl) ; Get value and + ld (blkshf),a ; ..save it in code below + inc hl ; Advance to max block number word + inc hl + inc hl + ld e,(hl) ; Get value into HL + inc hl + ld d,(hl) + inc de ; Add 1 for max number of blocks + +; Compute amount of free space left on disk + +dfree: + ld c,27 ; BDOS get allocation vector function + push de ; Save BLKMAX value + call bdos ; Get allocation vector into HL + ld b,h ; Copy allocation vector to BC + ld c,l + pop hl ; Restore MAXBLK value to HL + ld de,0 ; Inititialize count of free blocks + +; At this point we have +; BC = allocation vector address +; DE = free block count +; HL = number of blocks on disk + +free1: + push bc ; Save allocation address + ld a,(bc) ; Get bit pattern of allocation byte + ld b,8 ; Set to process 8 blocks +free2: + rla ; Rotate allocated block bit into carry flag + jr c,free3 ; If set (bit=1), block is allocated + inc de ; If not set, block is not allocated, so + ; ..increment free block count +free3: + ld c,a ; Save remaining allocation bits in C + dec hl ; Count down number of blocks on disk + ld a,l ; See if we are down to zero + or h + jr z,free4 ; Branch if no more blocks to check + ld a,c ; Get back current allocation bit pattern + djnz free2 ; Loop through 8 bits + pop bc ; Get pointer to allocation vector + inc bc ; Point to next allocation byte + jr free1 ; Continue by processing next allocation byte + +free4: + pop bc ; Clean up stack + ex de,hl ; Free block count to HL +blkshf equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get block shift factor + sub 3 ; Convert to log base 2 of K per block + jr z,free6 ; Done if single density (1k per block) + +; Convert for blocks of more than 1K each + +free5: + add hl,hl + dec a + jr nz,free5 + +; At this point HL = amount of free space on disk in K + +free6: + call print + db ' Space on ' +seldrv: db 0 ; Modified above to contain drive letter + db ':',[' '+80h] + +; Display decimal value of HL + + ld b,0 ; Initialize count of digits already printed + ld de,10000 ; Divisor in DE + call decdsp ; Print digit (or space if leading '0') + ld de,1000 + call decdsp + call decdsp3 ; Display hundreds, tens, and units + ld a,'K' + jp conout ; Final return from space routine + +; End RCP-SP.Z80 + + endif ;spaceon + + if diron +; include rcpdir ; 'DIR' directory command + page + +; RCP-DIR.Z80 'DIR' Command + +;============================================================================= +; +; D I R E C T O R Y D I S P L A Y C O M M A N D +; +;============================================================================= + +; Command: DIR +; Function: Display a directory of the files on disk +; Syntax: DIR Displays the DIR files +; DIR S Displays the SYS files +; DIR A Display both DIR and SYS files +; DIR /S Equivalent to DIR *.* S +; DIR /A Equivalent to DIR *.* A + +dir: + call retsave ; Save return address and set stack + +; See if FCB should be made wild (all '?') + + ld hl,fcb1+1 ; Point to file name in FCP + ld a,(hl) ; Get first character of filename + + if slashchk ; Allow "DIR /S" and "DIR /A" formats + cp '/' ; If name does not start with '/' + jr nz,dir01 ; ..branch and process normally + inc hl ; Point to second character + ld a,(hl) ; Get option character after slash + ld (fcb2+1),a ; ..and put it into second FCB + dec hl ; Back to first character + ld a,' ' ; Simulate empty FCB + endif ;slashchk + +dir01: + ld b,11 ; Prepare to fill FCB name and type with '?' + cp ' ' ; See if no file spec given + ld a,'?' ; Get ready to fill with '?' + call z,fillp ; ..carry out fill + + if nosys ; Suppress-SYS-file-if-no-wheel option + call whlchk ; Check wheel byte + jr z,dirnly ; If wheel off, ignore options + endif + + ld a,(fcb2+1) ; Get first char of 2nd file name + ld b,1 ; Set for both dir and sys files + cp allflag ; SYS and DIR flag specifier? + jr z,dirpr ; Got system specifier + dec b ; B=0 for sys files only + cp sysflag ; SYS only? + jr z,dirpr + +dirnly: ld b,80h ; Must be dir-only selection + +; DIRECTORY PRINT ROUTINE; ON ENTRY, B REG IS SET AS FOLLOWS: +; 0 FOR ONLY SYSTEM FILES, 80H FOR ONLY DIR FILES, 1 FOR BOTH +; +dirpr: + ld a,b ; Get systst flag + call getdir ; Load and sort directory + jp z,prfnf ; Print no file message + ld e,width ; Count down to 0 +; +; ENTRY PRINT LOOP; ON ENTRY, HL PTS TO FILES SELECTED (TERMINATED BY 0) +; AND E IS ENTRY COUNTER +; +dir3: + ld a,(hl) ; Check for done + or a + if dirsp and spaceon + jp z,spaexit ; Show space when done + else + jp z,exit ; Exit if done + endif ; Dirsp and spaceon + ld a,e ; Get entry counter + or a ; Output if 4 entries printed in line + jr nz,dir3a ; Continue + call crlf ; New line + ld e,width ; Reset entry count + ld a,e ; Get entry count +dir3a cp width ; First entry? + jr z,dir4 + call print +; + if wide +; + db ' ' ; 2 spaces + db fence ; Then fence char + db ' '+80h ; Then 1 more space +; + else +; + db ' ' ; Space + db fence+80h ; Then fence char +; + endif ; Wide +; +dir4: + call prfn ; Print file name + call break ; Check for abort + dec e ; Decrement entry counter + jr dir3 + +; End RCP-DIR.Z80 + + endif ;diron + + if eraon +; include rcpera ; 'ERA' erase command + page + +; RCP-ERA.Z80 'ERA' Command + +;============================================================================= +; +; E R A S E C O M M A N D +; +;============================================================================= + +;Command: ERA +;Function: Erase files +;Forms: +; ERA Erase Specified files and print their names +; ERA I Erase Specified files and print their names, but ask +; for verification before Erase is done + +era: + call retsave + ld a,(fcb2+1) ; Get eraflg if it's there + ld (eraflg),a ; Save it as a flag + ld a,1 ; Dir files only + call getdir ; Load directory of files + jp z,prfnf ; Abort if no files +; +; MAIN ERASE LOOP +; +era1: + call break ; See if user wants to stop + push hl ; Save ptr to file + call prfn ; Print its name + ld (nxtfile),hl ; Save ptr to next file + pop hl ; Get ptr to this file + call rotest ; Test file pted to by hl for r/o + jr nz,era3 +eraflg equ $+1 ; Address of flag + ld a,0 ; 2nd byte is flag + cp 'I' ; Is it an inspect option? + jr nz,era2 ; Skip prompt if it is not + call eraq ; Erase? + jr nz,era3 ; Skip if not +era2: + ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov + call initfcb1 ; Init fcb + ld c,19 ; Delete file + call bdos +era3: + ld hl,(nxtfile) ; Hl pts to next file + ld a,(hl) ; Get char + or a ; Done? + if erasp and spaceon + jp z,spaexit + else + jp z,exit + endif ; Erasp and spaceon + call crlf ; New line + jr era1 + +; End RCP-ERA.Z80 + + endif ;eraon + + if lton +; include rcplt ; 'LIST' and 'TYPE' commands + page + +; RCP-LT.Z80 + +;============================================================================= +; +; L I S T A N D T Y P E C O M M A N D S +; +;============================================================================= + +;Command: LIST +;Function: Print out specified file on the LST: Device +;Forms: +; LIST Print file (NO Paging) +;Notes: +; The flags which apply to TYPE do not take effect with LIST + + if liston +list: +; +; CHECK FOR WHEEL APPROVAL IF OPTION ENABLED + + + call retsave + ld a,0ffh ; Turn on printer flag + jr type0 + endif ;liston + +;Command: TYPE +;Function: Print out specified file on the CON: Device +;Forms: +; TYPE Print file +; TYPE P Print file with paging flag +;Notes: +; The flag PGDFLG defines the letter which toggles the paging +; facility (P in the forms section above) +; The flag PGDFLT determines if TYPE is to page by default +; (PGDFLT=TRUE if TYPE pages by default); combined with +; PGDFLG, the following events occur -- +; If PGDFLT = TRUE, PGDFLG turns OFF paging +; If PGDFLT = FALSE, PGDFLG turns ON paging +; +type: +; +; CHECK FOR WHEEL APPROVAL IF OPTION ENABLED +; +; + call retsave + xor a ; Turn off printer flag +; +; ENTRY POINT FOR CPR LIST FUNCTION (LIST) +; +type0: + if liston + ld (prflg),a ; Set flag + endif ; Liston + + ld a,(fcb2+1) ; Get page flag + ld (pgflg),a ; Save it as a flag + ld a,1 ; Select dir files + call getdir ; Allow ambiguous files (HL points to buffer) + jp z,prfnf ; No files + jr typex2 + + ; Entry point for successive files +typex: + ld hl,(nxtfile) ; Get ptr to next file + ld a,(hl) ; Any files? + or a + jp z,exit + + if liston + ld a,(prflg) ; Check for list output + or a ; 0=type + jr z,typex1 + ld a,cr ; Bol on printer + call lcout + ld a,ff ; Form feed the printer + call lcout + jr typex2 + endif ; Liston + +typex1: +; LDA PAGCNT ; If we've just done so, + push hl + ld hl,(pagcnt) + ld a,(hl) + pop hl + cp nlines-2 ; Don't type another + call nz,pagebreak ; Page break message +typex2: + ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov + ld (nxtfile),hl ; Set ptr to next file + call initfcb1 ; Init fcb1 + ld c,15 ; Open file + call bdos + inc a ; Set error flag + jp z,prfnf ; Abort if error +; MVI A,NLINES-2 ; Set line count +; STA PAGCNT + ld hl,(pagcnt) + ld (hl),nlines-2 + ld a,cr ; New line + call lcout + ld a,lf + call lcout + ld bc,080h ; Set char position and tab count + ; (b=0=tab, c=080h=char position) +; +; MAIN LOOP FOR LOADING NEXT BLOCK +; +type2: + ld a,c ; Get char count + cp 80h + jr c,type3 +; PUSH H ; Read next block + push bc + ld de,fcb1 ; Pt to fcb + ld c,20 ; Read record + call bdos + or a ; Set flags + pop bc +; POP H + jr nz,typex ; End of file? + ld c,0 ; Set char count + ld hl,tbuff ; Pt to first char +; +; MAIN LOOP FOR PRINTING CHARS IN TBUFF +; +type3: + ld a,(hl) ; Get next char + and 7fh ; Mask out msb + cp 1ah ; End of file (^z)? + jr z,typex ; Next file if so +; +; OUTPUT CHAR TO CON: OR LST: DEVICE WITH TABULATION +; + cp cr ; Reset tab count? + jr z,type4 + cp lf ; Reset tab count? + jr z,type4 + cp tab ; Tab? + jr z,type5 +; +; OUTPUT CHAR AND INCREMENT CHAR COUNT +; + call lcout ; Output char + inc b ; Increment tab count + jr type6 +; +; OUTPUT OR AND RESET TAB COUNT +; +type4: + call lcout ; Output or + ld b,0 ; Reset tab counter + jr type6 +; +; TABULATE +; +type5: + ld a,' ' ; + call lcout + inc b ; Incr pos count + ld a,b + and 7 + jr nz,type5 +; +; CONTINUE PROCESSING +; +type6: + inc c ; Increment char count + inc hl ; Pt to next char + call break ; Check for abort + jp z,typex ; Skip + jr type2 +; +; SEND OUTPUT TO LST: OR CON:, AS PER THE FLAG +; RETURN WITH Z IF ABORT +; +lcout: + push hl ; Save regs + push bc + ld e,a ; Char in e + ld c,2 ; Output to con: + if liston +prflg equ $+1 ; Pointer for in-the-code modification + ld a,0 ; 2nd byte is the print flag + or a ; 0=type + jr z,lc1 + ld c,5 ; Output to lst: + endif ; Liston + +lc1: + push de ; Save char + call bdos ; Output char in e + pop de ; Get char + ld a,e + cp lf + jr nz,lc2 + if liston + ld a,(prflg) ; Output to lst:? + or a ; Nz = yes + jr nz,lc2 + endif ; Liston +; +; CHECK FOR PAGING +; +; LXI H,PAGCNT ; Count down + ld hl,(pagcnt) + dec (hl) + jr nz,lc2 ; Jump if not end of page + ld (hl),nlines-2 ; Refill counter +pgflg equ $+1 ; Pointer to in-the-code buffer + ld a,0 ; 2nd byte is the paging flag + cp pgdflg ; Page default override option wanted? +; + if pgdflt ; If paging is default +; + jr z,lc2 ; Pgdflg means no paging +; + else +; + jr nz,lc2 ; Pgdflg means page +; + endif ; Pgdflt +; + call pagebreak ; Print page break message + jp z,typex ; Z to skip +lc2: + pop bc ; Restore regs + pop hl + ret +; +; PRINT PAGE BREAK MESSAGE AND GET USER INPUT +; ABORT IF ^C, RZ IF ^X +; +pagebreak: + push hl ; Save hl + call print + db cr,lf,' Typing',' '+80h + ld hl,fcb1+1 ; Print file name + call prfn + call dash ; Print dash + call conin ; Get input + pop hl ; Restore hl + push af + call crlf ; New line + pop af + jp break1 +; +; End RCP-LT.Z80 + + endif ;lton + + if renon +; include rcpren ; 'REN' rename command + page + +; RCP-REN.Z80 + +;Section 5E +;Command: REN +;Function: To change the name of an existing file +;Forms: +; REN = Perform function +; +ren: +; +; CHECK FOR WHEEL APPROVAL IF OPTION ENABLED +; + + call retsave +; +; +; STEP 1: CHECK FOR FILE 2 BEING AMBIGUOUS +; + ld hl,fcb2+1 ; Can't be ambiguous + call ambchk1 +; +; STEP 2: LOG INTO USER AREA +; + call logusr ; Log into user area of fcb1 +; +; STEP 3: SEE IF OLD FILE IS R/O +; + ld hl,fcb1 ; Pt to 1st fcb + push hl + ld de,fcb2 ; Pt to 2nd file + push de ; Save ptr + ld a,(hl) ; Get 1st's drive + ld (de),a ; Stuff into second fcb + ld c,17 ; Look for file + call bdos + inc a + jp z,prfnf + call getsbit ; Get ptr to entry in tbuff + ex de,hl ; Hl pts to entry + inc hl ; Pt to fn + call rotest ; See if file is r/o + jp nz,exit +; +; STEP 4: SEE IF NEW FILE ALREADY EXISTS +; EXTEST PERFORMS A NUMBER OF CHECKS: +; 1) AMBIGUITY +; 2) R/O +; 3) IF FILE EXISTS AND NOT R/O, PERMISSION TO DELETE +; + call extest + jp z,exit ; R/o or no permission +; +; STEP 5: EXCHANGE FILE NAME FIELDS FOR RENAME +; + pop de ; Pt to old + pop hl ; Pt to new + push hl ; Save ptr + ld b,12 ; 12 bytes + call iswap1 +; +; STEP 6: RENAME THE FILE +; + pop de ; Get ptr to fcb + ld c,23 ; Rename + call bdos + inc a ; Set zero flag if error + jp z,prfnf ; Print no source file message + jp exit +; +; +; End RCP-REN.Z80 + + endif ;renon + + if proton +; include rcpprot ; 'PROT' file attribute setting command + page + +; RCP-PROT.Z80 + +;Section 5F +;Command: PROT +;Function: To set the attributes of a file (R/O and SYS) +; +;Form: +; PROT afn RSI +;If either R or S are omitted, the file is made R/W or DIR, resp; +;R and S may be in any order. If I is present, Inspection is enabled. + +att: + call retsave + xor a ; Set no inspect + ld (inspect),a + ld hl,0 ; Set r/o and sys attributes off + ld de,fcb2+1 ; Pt to attributes + ld b,3 ; 3 chars max +att1: + ld a,(de) ; Get char + inc de ; Pt to next + cp 'I' ; Inspect? + jr z,atti + cp 'R' ; Set r/o? + jr z,attr + cp 'S' ; Set sys? + jr z,atts +att2: + djnz att1 + jr att3 +atti: + ld (inspect),a ; Set flag + jr att2 +attr: + ld h,80h ; Set r/o bit + jr att2 +atts: + ld l,80h ; Set sys bit + jr att2 +att3: + ld (fatt),hl ; Save file attributes + ld a,1 ; Select dir and sys files + call getdir ; Load directory + jp z,prfnf ; No file error + jr att5 +att4: + ld hl,(nxtfile) ; Pt to next file + ld a,(hl) ; End of list? + or a + jp z,exit + call crlf ; New line +att5: + call break ; Check for possible abort + push hl ; Save ptr to current file + call prfn ; Print its name + ld (nxtfile),hl ; Save ptr to next file + call print + db ' Set to R','/'+80h + ld hl,(fatt) ; Get attributes + ld c,'W' ; Assume r/w + ld a,h ; Get r/o bit + or a + jr z,att6 + ld c,'O' ; Set r/o +att6: + ld a,c ; Get char + call conout + ld a,l ; Get sys flag + or a ; Set flag + jr z,att7 + call print + db ' and SY','S'+80h +att7: +inspect equ $+1 ; Ptr for in-the-code modification + ld a,0 ; Get inspect flag + or a ; Z=no + pop hl ; Get ptr to current file + jr z,att8 + call eraq1 ; Ask for y/n + jr nz,att4 ; Advance to next file if not y +att8: + ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov +fatt equ $+1 ; Ptr for in-the-code modification + ld hl,0 ; Get attributes + dec de ; Pt to sys byte + dec de + ld a,l ; Get sys flag + call attset ; Set attribute correctly + dec de ; Pt to r/o byte + ld a,h ; Get r/o flag + call attset + ld de,fcb1 ; Pt to fcb + ld c,30 ; Set attributes + call bdos + jr att4 +attset: + or a ; 0=clear attribute + jr z,attst1 + ld a,(de) ; Get byte + or 80h ; Set attribute + ld (de),a + ret +attst1: + ld a,(de) ; Get byte + and 7fh ; Clear attribute + ld (de),a + ret +; +; End RCP-PROT.Z80 + + endif ;proton + + if cpon +; include rcpcp ; 'CP' file copying command + +; RCP-CP.Z80 + +;============================================================================= +; +; F I L E C O P Y C O M M A N D +; +;============================================================================= + +; Command: CP +; Function: Copy a file from one place to another +; Syntax: CP destfile=srcfile +; CP srcfile +; Comments: Both file specifications can include a directory specification. +; If only one file name is given, then the current directory and +; the source file name are assumed for the destination. + +copy: + call retsave + +; If new is blank, make it the same name and type as old + + ld de,fcb1+1 ; Point to destination file name + ld a,(de) ; Get first character + cp ' ' ; If not blank (no name) + jr nz,copy0 ; ..then branch to copy + + ld hl,fcb2+1 ; Copy source name into destination FCB + ld b,11 ; Name and type are 11 bytes + call blkmov + +; See if destination is same as source, and abort if so + +copy0: + ld hl,fcb1 ; Set up pointers to two files + ld de,fcb2 + push hl + push de + inc hl ; Point to names of files + inc de + ld b,13 ; Compare 13 bytes (name, type, and user #) +copy1: + call comp + jr nz,copy2 ; If they differ, go on with copy + + ld c,25 ; Get-current-disk BDOS function + call bdos ; Get it in case no drive given explicitly + inc a ; Shift to range 1..16 + ld b,a ; ..and keep value in B + pop de ; Restore pointers to FCBs + pop hl + ld a,(de) ; Get drive of source file + ld c,a ; ..and save it in C + or a ; Is it default drive? + jr nz,copy1a ; Branch if drive made explicit + ld c,b ; Otherwise, copy default drive into C +copy1a: + ld a,(hl) ; Get drive of destination file + or a ; Is it default drive? + jr nz,copy1b ; Branch if drive made explicit + ld a,b ; Otherwise, get current drive +copy1b: + cp c ; Compare the two drives specified + jr nz,copy3 ; Branch if they are different + jr cperr ; Branch to error code if they are the same + +copy2: + pop de ; Clean up the stack + pop hl + +; Make note of the user numbers of the two files + +copy3: + ld a,(fcb1+13) ; Get destination user number + ld (usrdest),a + ld a,(fcb2+13) ; Get source user number + ld (usrsrc),a + +; Set up new FCB for source file and open the source + + call define ; Define buffer addresses dynamically + ld hl,(srcfcb) ; Get address to use for new source FCB + push hl + ex de,hl ; Copy file data to new FCB + ld b,12 + call blkmov + call logsrc ; Log in user number of source file + pop hl ; Initialize the source file FCB + call initfcb2 + ld c,15 ; Open file + call bdos + inc a ; Check for error + jp z,prfnf ; Branch if file not found + +; Make sure destination file does not already exist + + call logdest ; Log into destination s user area + call extest ; Test for existence of file + jp z,exit ; Branch if it exists + +; Create destination file + + ld de,fcb1 ; Point to destination FCB + ld c,22 ; BDOS make-file function + call bdos + inc a ; Test for error (no directory space) + jr nz,copy5 ; Branch if OK + +; Report file error + +cperr: + call print + db ' Copy','?'+80h + jp exit + +; Copy source to destination with buffering + +;++++++++++ this should be done by changing DMA address to save all the +; buffer swapping + +copy5: + call logsrc ; Log in source user area + ld b,0 ; Initialize counter + ld hl,(cbuff) ; Initialize buffer pointer + +copy5a: + push hl ; Save address and counter + push bc + ld hl,(srcfcb) ; Point to source file FCB + ex de,hl ; Put it in DE for BDOS call + ld c,20 ; BDOS read-sequential function + call bdos + pop bc ; Get counter and address + pop de + or a ; Read Ok? + jr nz,copy5b ; Branch if end of file + + push bc ; Save counter + ld hl,tbuff ; Copy from 80h to buffer + ld b,128 ; 128 bytes + call blkmov + ex de,hl ; HL points to next buffer address + pop bc ; Get counter back + inc b ; Increment it + ld a,b ; See if buffer full + cp cpblocks + jr nz,copy5a ; If not, go back for more + +copy5b: + ld a,b ; Get count of blocks loaded into buffer + or a ; Are there any? + jr z,copy6 ; Branch if not (we are done) + + push bc ; Save count + call logdest ; Log into destination user number +cbuff equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Point to beginning of copy buffer +copy5c: + ld de,tbuff ; Copy into tbuff + ld b,128 ; 128 bytes + call blkmov + push hl ; Save pointer to next block + ld de,fcb1 ; Point to destination file FCB + ld c,21 ; Write the block + call bdos + or a + jr nz,cperr ; Branch on error (disk full of write error) + pop hl ; Get back pointer to next block + pop bc ; Get count +; djnz copy5 ; Work through the blocks + dec b ; + jr z,copy5 ; + push bc ; Save count + jr copy5c ; Back for another bufferful + +; Close the destination file + +copy6: + call logdest ; Log into destination user number + ld de,fcb1 ; Point to destination FCB + ld c,16 ; Close file + call bdos + call print + db ' Don','e'+80h + + if cpsp and spaceon + jp spaexit ; Report space remaining on destination drive + else + jp exit + endif ;cpsp and spaceon + +; Log into user number of source file + +logsrc: +usrsrc equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get user number + jr setusrrel ; Local jump to save code + +; Log into user number of destination file + +logdest: +usrdest equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get user number +setusrrel: + jp setusr + +; End RCP-CP.Z80 + + endif ;cpon + + if peekon or pokeon or porton +; include rcpiom ; 'PEEK', 'POKE', 'PORT' commands + page + +; RCP-IOM.Z80 + +; Command: PEEK +; Function: Display memory contents +; +; Form: +; PEEK startadr 256 bytes displayed +; PEEK startadr endadr range of bytes displayed + + if peekon + +peek: + call retsave + + ld hl,tbuff+1 ; Find first number +nxtpeek equ $+1 ; Pointer for in-the-code modification + ld de,100h ; Default peek address if none + call sksp ; Skip to first token (if any) + call nz,hexnum ; Get start address if any + + push de ; Save starting address + ld bc,255 ; Compute default ending address + ex de,hl + add hl,bc + + if peekchk ; Check for overflow + jr nc,peek0 ; If no overflow past FFFF, go on + ld hl,0ffffh ; Else use FFFF as ending address +peek0: + endif ;peekchk + + ex de,hl ; End address in DE + call sksp ; Skip to next token (if any) + call nz,hexnum ; Get 2nd number in DE (else default) + +peek1: + pop hl ; HL is start address, DE is end address + + if peekhdr + + push hl ; Save starting address again + ld b,8 ; Output leading spaces +peek0a: + call print + db ' '+80h + djnz peek0a + + ld b,16 ; Display 16 column headers +peek0b: + ld a,l + and 03h + call z,spac + + call spac + call spac + ld a,l ; Get low byte of address + and 0fh ; Display low hex digit + call pah + inc hl + djnz peek0b + + if peekbdr + call crlf + ld b,8 +peek0c: + call print + db ' '+80h + djnz peek0c + ld b,16 +peek0d: + ld a,l + and 3 + call z,spac + inc l + call print + db ' -', '-'+80h + djnz peek0d + endif ;peekbdr + + pop hl ; Restore starting address + + endif ;peekhdr + + ld c,0ffh ; Use C as continue flag + call peek2 ; Do peek + ld (nxtpeek),hl ; Set continued peek address + jp exit + +peek2: + ld a,c ; Check continuation flag + or a ; + ret z ; + +; Print line header + +peek2a: + call crlf ; New line + ld a,h ; Print address + call pashc + ld a,l + call pahc + call dash ; Print leader + ld b,16 ; 16 bytes to display + push hl ; Save start address + + ; Print hex values for 16 bytes + +peek3: + ld a,l + and 03h + call z,spac + + ld a,(hl) ; Get next byte + call pashc ; Print with leading space + + ; Check for last address + ; If c is already 0, leave it that way. + ; Otherwise check for end address and if so + ; Set c to zero. + + ld a,c ; See if continue flag already cleared + or a + jr z,peek3a ; If so, skip test + ld a,h + sub a,d ; See if h = d + ld c,a + ld a,l + sub a,e ; See if l = e + or c ; Combine two tests + ld c,a + +peek3a: inc hl ; Pt to next + djnz peek3 + + ; Print ascii equivalents for 16 bytes + + pop hl ; Pt to first address again + ld b,16 ; 16 bytes + call print ; Space and fence + db ' ' + db fence+80h + push bc ; Save flag in c +peek4: + ld a,(hl) ; Get next byte + ld c,'.' ; Assume dot + and 7fh ; Mask it + cp ' ' ; Dot if less than space + jr c,peek5 + cp 7fh ; Don't print del + jr z,peek5 + ld c,a ; Char in c +peek5: + ld a,c ; Get char + call conout ; Send it + inc hl ; Pt to next + djnz peek4 + + call print ; Closing fence + db fence+80h + pop bc ; Get flag in c back + call break ; Allow abort + jr peek2 + + endif ; Peekon +; +; PRINT A AS 2 HEX CHARS +; PASHC - LEADING SPACE +; + if peekon or [pokeon and not pokeq] or porton +pashc: + push af ; Save a + call spac + pop af +pahc: + push af + rrca ; Exchange nybbles + rrca + rrca + rrca + call pah ; Print hex char + pop af +pah: + and 0fh ; Mask + add a,'0' ; Convert to ascii + cp '9'+1 ; Letter? + jr c,pah1 + add a,7 ; Adjust to letter +pah1: + jp conout +; + endif ; Peekon or [pokeon and not pokeq] or porton +; +;Section 5I +;Command: POKE +;Function: Place Values into Memory +; +;Form: +; POKE startadr val1 val2 ... +; + if pokeon +poke: + call retsave + ld hl,tbuff+1 ; Pt to first char + call sksp ; Skip to non-blank + jr z,noargs ; Arg error + call hexnum ; Convert to number + + if not pokeq + call print + db ' Pok','e'+80h + call adrat ; Print at message + endif + +; LOOP FOR STORING HEX VALUES SEQUENTIALLY VIA POKE + +poke1: + push de ; Save address + call sksp ; Skip to non-blank + jp z,exit ; Done + cp '"' ; Quoted text? + jr z,poke2 + call hexnum ; Get number + ld a,e ; Get low + pop de ; Get address + ld (de),a ; Store number + inc de ; Pt to next + jr poke1 +; +; STORE ASCII CHARS +; +poke2: + pop de ; Get next address + inc hl ; Pt to next char +poke3: + ld a,(hl) ; Get next char + or a ; Done? + jp z,exit + ld (de),a ; Put char + inc hl ; Pt to next + inc de + jr poke3 + + endif ; Pokeon +; +; No Argument Error +; + + if pokeon or porton + +noargs: + call print + db ' Arg','?'+80h + jp exit +; + endif ; Pokeon or porton + +; +;Section 5I+ +;Command: PORT +;Function: Display or Set I/O Port Data +; +;Form: +; PORT addr - read port and display value +; PORT addr value - output value to port +; + if porton +port: + call retsave + ld hl,tbuff+1 ; Find first number + call sksp ; Skip to first command-line token + jr z,noargs ; Abort if no port address given + call hexnum ; Get start address into de + push hl ; Save pointer to command tail + ld hl,portaddr ; Modify code + ld (hl),e ; Move specified port addr into place + dec hl ; Point to opcode position + ld (hl),0dbh ; Poke 'in' opcode + ex (sp),hl ; Get tail pointer back while saving this one + call print ; Print header + db ' Por','t'+80h + ld a,e + call pashc ; Print port address + call sksp ; Skip to possible second value + jr z,portin ; Proceed with port input + + call hexnum ; Get 2nd number in de + ex (sp),hl ; Get pointer to opcode back + ld (hl),0d3h ; Poke 'out' opcode + call print + db ': OU','T'+80h + ld a,e ; Get value to output + jr paddr + +portin: call print + db ': I','N'+80h + xor a ; Make sure high port address = 0 (for HD64180) +paddr: ld b,0 ; ..for both IN and OUT instructions +opcode: + db 0 ; Opcode for IN or OUT inserted by code above +portaddr: + db 0 ; Port address inserted by code above + call pashc + pop hl ; Clean up stack + jp exit + + endif ; Porton + +; End RCP-IOM.Z80 + + endif ;peekon or pokeon or porton + + if regon +; include rcpreg ; 'REG' register operation commands + page + +; RCP-REG.Z80 + +; +;Section 5J +;Command: REG +;Function: Manipulate Memory Registers +; +;Forms: +; REG D or REG <-- Display 10 Register Values +; REG Mreg <-- Decrement Register Value +; REG Preg <-- Increment Register Value +; REG Sreg value <-- Set Register Value +; +; Vers 2.1 Joe Wright +; +; REG reg <-- Display a single register value +; +; REG numbers now range from 0 to 31, although only the first ten are +; displayed with REG D. +; +; REG now treats the program error byte as register E. +; +register: + ld de,fcb1+2 ; Pt to first arg + ld a,(de) ; Get possible digit + call regptr ; Pt HL to potential register + dec de ; Point to command + ld a,(de) + cp 'S' ; Set? + jr z,rset + cp 'P' ; Plus? + jr z,rinc + cp 'M' ; Minus? + jr z,rdec + cp ' ' + jr z,rshow + cp 'D' + jr z,rshow + call regptr + jp regout + +; INCREMENT REGISTER VALUE +; HL PTS TO MEMORY REGISTER ON INPUT + +rinc: + inc (hl) ; Increment it + jr regout ; Print result + +; DECREMENT REGISTER VALUE +; HL PTS TO MEMORY REGISTER ON INPUT + +rdec: + dec (hl) ; Decrement value + jr regout ; Print result + +; Show first ten registers and Program Error byte +; +rshow: + call rshow10 + ld hl,z3msg+6 + jp regout + +rshow10: + xor a ; Select register 0 + ld b,a ; Counter set to 0 in B + call regp1 ; HL pts to register 0 +rshow1: + ld a,b ; Get counter value + cp 10 ; First ten registers + ret z ; Exit if done + push bc ; Save counter + push hl ; Save pointer + call regout ; Print register value + pop hl ; Get pointer + pop bc ; Get counter + inc b ; Increment counter + ld a,b ; Check for new line + and 3 + call z,crlf ; Newline after fourth display + inc hl ; Pt to next register + jr rshow1 + +; SET REGISTER VALUE +; HL PTS TO REGISTER ON INPUT + +rset: + ld de,fcb2+1 ; Pt to value + call de2bin ; Eval string at DE to binary in B + ld (hl),b ; Set value + +; Enter with HL pointing to the register. HL is maintained. +; +regout: + call print + db ' Reg',' '+80h + ld de,z3msg+30h ; Register 0 + sbc hl,de ; Register number in HL + ld a,l + cp 32 ; A numbered Register? + jr c,rego0 ; Yep + call print + db ' ','E'+80h + jr rego1 ; Report + +rego0: push hl + push de + ld b,0 ; Suppress zeros + call decdsp2 ; Report register number + pop de + pop hl + +rego1: add hl,de ; HL points to register again + call print + db ' =',' '+80h + ld l,(hl) + xor a + ld h,a + ld b,a ; Suppress leading zeros + jp decdsp3 ; Display value + +; Evaluate decimal string at DE to binary in B +; +de2bin: + ld b,0 ; Init value to zero +de2b: + ld a,(de) ; Get this digit + inc de ; Pt to next + sub '0' ; Convert to binary + ret c ; A space, finished + cp 10 ; Range? + ret nc ; Not decimal, finished + ld c,a ; Digit in c + ld a,b ; Multiply old by 10 + add a,a ; *2 + add a,a ; *4 + add a,b ; *5 + add a,a ; *10 + add a,c ; Add in new digit + ld b,a ; Result in b + jr de2b ; Again + +; SET HL TO POINT TO MEMORY REGISTER WHOSE INDEX IS PTED TO BY HL +; ON INPUT, A CONTAINS REGISTER CHAR +; ON OUTPUT, HL = ADDRESS OF MEMORY REGISTER (REG 0 ASSUMED IF ERROR) + +regptr: + ld hl,z3msg+6 ; The E register + cp 'E' + ret z + push de + call de2bin ; Get register number in B + pop de + ld a,b + cp 32 ; Range 0-31 + ld a,0 + jr nc,regp1 ; Out of range, use 0 + ld a,b ; Value in A +regp1: + ld hl,z3msg+30h ; Pt to memory registers + add a,l ; Pt to proper register + ld l,a + ret ; No chance of crossing page boundary +; +; End RCP-REG.Z80 + + endif ;regon + + if whlon or whlqon +; include rcpwhl ; 'WHL' and 'WHLQ' commands + page +; +;Section 5K +;Command: WHL/WHLQ +;Function: Set the Wheel Byte on or off +; +;If WHLQUIET equate is true, then RCP does not report wheel status with WHL +;command. +; +;Form: +; WHL -- turn Wheel Byte OFF +; WHL password -- turn Wheel Byte ON if password is correct +; WHLQ -- find out status of Wheel Byte +; +; Vers 2.1 Changes the function a little as follows: +; +; WHL -- Report Wheel Status (no WHLQ) +; WHL password -- Set Wheel ON if password is correct +; -- Set Wheel OFF if password incorrect +whl: + ld hl,fcb1+1 ; Pt to first char + ld a,(hl) ; Get it + + if not whlqon + cp ' ' + jr z,whlmsg ; Report wheel status if no password + endif + + ld de,whlpass + ld b,8 ; Check 8 chars + call comp ; Compare + jr nz,whloff ; Set wheel OFF if incorrect password + +; TURN ON WHEEL BYTE + + ld a,0ffh ; Turn on wheel byte + jr whlset + +; TURN OFF WHEEL BYTE + +whloff: + xor a ; Turn off wheel byte +whlset: + ld hl,(z3whl) ; Indirect from z3env + ld (hl),a +whlq: + if whlquiet + ret + endif + +; PRINT WHEEL BYTE MESSAGE + + if not whlquiet + +whlmsg: + call print + dc ' Wheel ' + call whlchk ; Check wheel byte + jr z,offm + call print + dc 'On' + ret +offm: + call print + dc 'Off' + ret + + endif ;[not whlquiet] or whlqon + + +; WHEEL PASSWORD DEFINED FROM SYSRCP.LIB FILE + + db 'Z'-'@' ; Leading ^z to block attempt to type rcp file +whlpass: + wpass ; Use macro +; +; End RCP-WHL.Z80 + + endif ;whlon + + if echoon +; include rcpecho ; 'ECHO' command + page + +; RCP-ECHO.Z80 + +;============================================================================= +; +; E C H O T E X T T O S C R E E N A N D P R I N T E R +; +;============================================================================= + +; Command: ECHO +; Function: Echo text to console or printer + +echo: + xor a ; Lower case flag setting + + if upcase ; If upper case default + dec a + endif ;upcase + + ld (casefl),a ; Store flag in code below + + ld hl,tbuff+1 ; Point to first character + call getchar ; Get first character (should be blank) + ; If none, exit from routine + + if echolst + call getchar ; Get first char after leading blank + ld b,a ; Save first char as list output flag + cp '$' ; Print flag? + jr z,echo2 ; If so, go on + dec hl ; Else backup one character + endif ; Echolst + +; LOOP TO ECHO CHARS + +echo2: call getchar + + if echolst + cp ff ; Form feed? + jr z,echo3 + endif ;echolst + + cp '^' + jr nz,echo2a ; Not control character prefix + call getchar ; Get next character + and 1fh ; Convert to control character + jr echo2d ; Echo it + +echo2a: cp cmdchar ; Case shift prefix? + jr nz,echo2d ; No, normal echo + call getchar ; Get next character + cp ucasechar ; Up-shift character? + jr z,echo2c ; Store non-zero value in case flag + +echo2b: cp lcasechar ; Lower-case character? + jr nz,echo2d ; No, echo the character as is + xor a ; Else, clear case flag +echo2c: ld (casefl),a + jr echo2 ; On to next character + +echo2d: + call echout ; Send char + jr echo2 + +; FORM FEED - SEND NEW LINE FOLLOWED BY FORM FEED IF PRINTER OUTPUT + + if echolst +echo3: + ld a,b ; Check for printer output + cp '$' + jr nz,echoff ; Send form feed normally if not printer + call echonl ; Send new line + ld a,ff ; Send form feed + jr echout + +; SEND FORM FEED CHAR TO CONSOLE + +echoff: + ld a,ff ; Get char + jr echo2d + endif ;echolst + +; END OF PRINT LOOP - CHECK FOR PRINTER TERMINATION + +echo4: + if not echolst + + ret + + else + + ld a,b ; Get list mode flag + cp '$' + ret nz ; Done if no printer output + +; OUTPUT A NEW LINE + +echonl: + ld a,cr ; Output new line on printer + call echout + ld a,lf ; Fall thru to echout + + endif ;not echolst + +; OUTPUT CHAR TO PRINTER OR CONSOLE + +echout: + ld c,a ; Char in c + + cp 'A' ; If less than 'a' + jr c,echouta ; Leave as is + cp 'Z'+1 ; If greater than 'z' + jr nc,echouta ; Leave as is + add 20h ; Else convert to lower case +echouta: + ld d,a ; Save lower case version in d +casefl equ $+1 ; Pointer for in-the-code modification + ld a,0 + or a + jr nz,echoutb ; If upper case selected, go on as is + ld c,d ; Else substitute lower case version +echoutb: + + push hl ; Save hl + push bc ; Save bc + ld de,0ch-3 ; Offset for console output + + if echolst + ld a,b ; Check for printer output + cp '$' + jr nz,echout1 + inc de ; Add 3 for printer offset + inc de + inc de + endif ;echolst + +; OUTPUT CHAR IN C WITH BIOS OFFSET IN DE + +echout1: + call biout ; Bios output + pop bc ; Restore bc,hl + pop hl + ret + +; Get a character from the command tail buffer + +getchar: + ld a,(hl) ; Get character + inc hl ; Point to next one + or a ; Check for end of string + ret nz ; If not end, return + pop hl ; Else, clean up stack + jr echo4 ; And exit from routine + +; OUTPUT CHAR IN C TO BIOS WITH OFFSET IN DE + +biout: + ld hl,(wboot+1) ; Get address of warm boot + add hl,de ; Pt to routine + jp (hl) ; Jump to it + +; End RCP-ECHO.Z80 + + endif ;echoon + +; include rcpsubs ; File of subroutines + page + +; RCPSUBS.Z80 Subroutines for Z33RCP.Z80 + + +;----------------------------------------------------------------------------- + +; Display decimal digit routines + +;-------------------- + +; Display hundreds, tens, and units digits (assumes flag in B has been set) + + if regon or spaceon + +decdsp3: + ld de,100 ; Display hundreds + call decdsp +decdsp2: + ld de,10 ; Display tens + call decdsp + ld a,l ; Get remaining units value + add '0' ; Convert to character + jr conout ; Print it and return + +;-------------------- + +; Routine to print any single digit + +; Actually, this routine displays the value of HL divided by DE and leaves the +; remainder in HL. In computing the character to display, it assumes that the +; result of the division will be a decimal digit. If the result is zero, the +; value in the B register, which is the number of digits already printed, is +; checked. If it is zero, a space is printed instead of a leading '0'. If it +; is not zero, the '0' is printed. Whenever any digit (not a space) is +; printed, the value in B is incremented. + +decdsp: + ld c,'0'-1 ; Initialize digit count + xor a ; Clear carry flag + +decdsp1: + inc c ; Pre-increment the digit + sbc hl,de ; Subtract DE from HL + jr nc,decdsp1 + + add hl,de ; Add back in to produce remainder + ld a,c ; Get decimal digit + cp '0' ; Check for leading 0 + jr nz,decdout ; If not 0, proceed to display it + ld a,b ; Digit printed already? + or a + ld a,' ' ; Possible space for calling routine to print +; ret z ; If no digit printed, return zero flag set + jr z,conout ; Print leading space +decdout: + inc b ; Indicate digit printed + ld a,c ; Else print real digit + ; Fall through to CONOUT + + endif ;regon or spaceon + +;----------------------------------------------------------------------------- + +; Console Output Routine + +conout: + putreg ; Save all register except AF + push af ; Save AF, too + and 7fh ; Mask out MSB + ld e,a ; Transfer character to E + ld c,2 ; BDOS conout function number + call bdos + pop af + getreg ; Restore registers +note: ; Use this RET for NOTE command + ret + + if peekon or [pokeon and not pokeq] or porton +spac: ld a,' ' + jr conout + endif ; peekon or [pokeon and not pokeq] or porton + + +;----------------------------------------------------------------------------- + +; String printing routines + +;-------------------- + +; Print string following call (terminated with null or character with the +; high bit set) + +print: + ex (sp),hl ; Get address + call printhl + ex (sp),hl ; Put address + ret + +;-------------------- + +; Print string pointed to by HL (terminated with null or character with the +; high bit set) + +printhl: + ld a,(hl) ; Get next character + inc hl ; Point to following one + or a ; See if null terminator + ret z ; If so, we are done + call conout ; Display the character + ret m ; We are done if MSB is set (negative number) + jr printhl ; Back for more + +;----------------------------------------------------------------------------- + +; OUTPUT NEW LINE TO CON: + +crlf: + call print + db cr,lf+80h + ret + +; CONSOLE INPUT + + if eraon or lton or proton or renon or cpon + +conin: + push hl ; Save regs + push de + push bc + ld c,1 ; Input + call bdos + pop bc ; Get regs + pop de + pop hl + and 7fh ; Mask msb + cp 61h + ret c + and 5fh ; To upper case + ret + + endif ; Eraon or lton or proton or renon or cpon +; +; SAVE RETURN ADDRESS +; +retsave: + pop de ; Get return address + pop hl ; Get return address to zcpr3 + ld (z3ret),hl ; Save it + push hl ; Put return address to zcpr3 back + push de ; Put return address back + ret + +; + if spaceon and [dirsp or cpsp or erasp] +spaexit: + call crspace ; Show space remaining + endif ; Spaceon and [dirsp or cpsp or erasp] +; +; EXIT TO ZCPR3 +; +exit: +z3ret equ $+1 ; Pointer to in-the-code modification + jp 0 ; Return address + +; +; PRINT A DASH +; + if lton or peekon +dash: + call print + db ' -',' '+80h + ret +; + endif ; Lton or peekon +; +; PRINT ADDRESS MESSAGE +; PRINT ADDRESS IN DE +; + if peekon or pokeon + if not pokeq +adrat: + call print + db ' at',' '+80h + ld a,d ; Print high + call pahc + ld a,e ; Print low + jp pahc + + endif ; Not pokeq + endif ; Peekon or pokeon + + if peekon or pokeon or porton +; +; EXTRACT HEXADECIMAL NUMBER FROM LINE PTED TO BY HL +; RETURN WITH VALUE IN DE AND HL PTING TO OFFENDING CHAR +; +hexnum: + ld de,0 ; De=accumulated value +hnum1: + ld a,(hl) ; Get char + cp ' '+1 ; Done? + ret c ; Return if space or less + inc hl ; Pt to next + sub '0' ; Convert to binary + jr c,numerr ; Return and done if error + cp 10 ; 0-9? + jr c,hnum2 + sub 7 ; A-f? + cp 10h ; Error? + jr nc,numerr +hnum2: + push hl ; Save pointer + ex de,hl + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; DE x16 to HL + ld e,a + ld d,0 + add hl,de + ex de,hl ; DE = DE * 16 + A + pop hl ; Get the pointer + jr hnum1 ; Try again +; +; NUMBER ERROR +; +numerr: + call print + db ' Num','?'+80h + jp exit +; +; SKIP TO NEXT NON-BLANK +; +sksp: + ld a,(hl) ; Get char + inc hl ; Pt to next + cp ' ' ; Skip spaces + jr z,sksp + dec hl ; Pt to good char + or a ; Set eol flag + ret +; + endif ; Peekon or pokeon or porton + +;----------------------------------------------------------------------------- + +; Test File in FCB for unambiguity and existence, ask user to delete if so +; Return with Z flag set if R/O or no permission to delete +; + if renon or cpon +extest: + call ambchk ; Ambiguous file names not allowed + call searf ; Look for specified file + jr z,exok ; Ok if not found + call getsbit ; Position into dir + inc de ; Pt to file name + ex de,hl ; Hl pts to file name + push hl ; Save ptr to file name + call prfn ; Print file name + pop hl + call rotest ; Check for r/o + jr nz,exer + call eraq ; Erase? + jr nz,exer ; Restart as error if no + ld de,fcb1 ; Pt to fcb1 + ld c,19 ; Delete file + call bdos +exok: + xor a + dec a ; Nz = ok + ret +exer: + xor a ; Error flag - file is r/o or no permission + ret + +; +; CHECK FOR AMBIGUOUS FILE NAME IN FCB1 +; RETURN Z IF SO +; +ambchk: + ld hl,fcb1+1 ; Pt to fcb +; +; CHECK FOR AMBIGUOUS FILE NAME PTED TO BY HL +; +ambchk1: + push hl + ld b,11 ; 11 bytes +amb1: + ld a,(hl) ; Get char + and 7fh ; Mask + cp '?' + jr z,amb2 + inc hl ; Pt to next + djnz amb1 + dec b ; Set nz flag + pop de + ret +amb2: + pop hl ; Pt to file name + call prfn + call print + db ' is AF','N'+80h + jp exit +; + endif ; Renon or cpon +; +; TEST FILE PTED TO BY HL FOR R/O +; NZ IF R/O +; + if renon or cpon or eraon +; +rotest: + push hl ; Advance to r/o byte + ld bc,8 ; Pt to 9th byte + add hl,bc + ld a,(hl) ; Get it + and 80h ; Mask bit + push af + ld hl,romsg + call nz,printhl ; Print if nz + pop af ; Get flag + pop hl ; Get ptr + ret +romsg: + db ' is R/','O'+80h +; +; CHECK USER TO SEE IF HE APPROVES ERASE OF FILE +; RETURN WITH Z IF YES +; +eraq: + call print + db ' - Eras','e'+80h + endif ; Renon or cpon or eraon + + if renon or cpon or eraon or proton +eraq1: + call print + db ' (Y/N/Q)?',' '+80h + call conin ; Get response + cp 'Q' ; Quit command? + jp z,exit + cp 'Y' ; Key on yes + ret +; + endif ; Renon or cpon or eraon or proton +; +; INIT FCB1, RETURN WITH DE PTING TO FCB1 +; + if eraon or lton or cpon +initfcb1: + ld hl,fcb1 ; Pt to fcb +initfcb2: + push hl ; Save ptr + ld bc,12 ; Pt to first byte + add hl,bc + ld b,24 ; Zero 24 bytes + xor a ; Zero fill + call fillp ; Fill memory + pop de ; Pt to fcb + ret +; + endif ; Eraon or lton or cpon +; + if eraon or lton or cpon or diron + +fillp: + ld (hl),a ; Store byte + inc hl ; Pt to next + djnz fillp ; Count down + ret +; + endif ; Eraon or lton or cpon or diron + +; +; CHECK FOR USER INPUT; IF ^C, RETURN WITH Z +; + if diron or lton or eraon or proton or peekon + +break: + push hl ; Save regs + push de + push bc + ld c,11 ; Console status check + call bdos + or a + ld c,1 ; Get char if any + call nz,bdos + pop bc ; Restore regs + pop de + pop hl +break1: cp ctrlc ; Check for abort + jp z,exit ; Exit + cp ctrlx ; Skip? + ret + endif ; Diron or lton or eraon or proton or peekon + +; AFTER A SEARCH, RETURN NZ SET IF DESIRED TYPE OF FILE FOUND, Z IF NOT +; THIS ALGORITHM LOOKS AT THE SYSTEM BIT OF THE LOCATED FILE; THIS +; BIT IS SET TO 1 IF THE FILE IS A SYSTEM FILE AND 0 IF NOT A SYSTEM +; FILE. THE FOLLOWING EXCLUSIVE OR MASKS ARE APPLIED TO RETURN Z OR NZ +; AS REQUIRED BY THE CALLING PROGRAM: +; +; SYSTEM BYTE: X 0 0 0 0 0 0 0 (AFTER 80H MASK, X=1 IF SYS, 0 IF DIR) +; +; SYS-ONLY : 0 0 0 0 0 0 0 0 (XOR 0 = 0 if X=0, = 80H if X=1) +; DIR-ONLY : 1 0 0 0 0 0 0 0 (XOR 80H = 80h if X=0, = 0 if X=1) +; BOTH : 0 0 0 0 0 0 0 1 (XOR 1 = 81H or 1H, NZ in both cases) + + if diron or eraon or lton or proton or cpon or renon + +getsbit: + dec a ; Adjust to returned value + rrca ; Convert number to offset into tbuff + rrca + rrca + and 60h + ld de,tbuff ; Pt to buffer + add a,e ; Add entry offset to base addr + ld e,a ; Result in e + push de ; Save ptr in de + add 10 ; Add offset of 10 to pt to system byte + ld e,a ; Set address + ld a,(de) ; Get byte + pop de ; Get ptr in de + and 80h ; Look at only system bit +systst equ $+1 ; In-the-code variable + xor 0 ; If systst=0, sys only; if systst=80h, dir + ; Only; if systst=1, both sys and dir + ret ; Nz if ok, z if not ok +; +; +; COPY HL TO DE FOR B BYTES +; +blkmov: + ld a,(hl) ; Get + ld (de),a ; Put + inc hl ; Pt to next + inc de + djnz blkmov ; Loop + ret + +; +; PRINT FILE NOT FOUND MESSAGE +; +prfnf: + call print + db ' No File','s'+80h + jp exit + +; LOG INTO USER AREA CONTAINED IN FCB1 +; +logusr: + ld a,(fcb1+13) ; Get user number +setusr: + ld e,a + ld c,32 ; Use bdos fct + jp bdos + +; +; PRINT FILE NAME PTED TO BY HL +; +prfn: + call print ; Leading space + db ' '+80h + ld b,8 ; 8 chars + call prfn1 + call print + db '.'+80h ; Dot + ld b,3 ; 3 chars +prfn1: + ld a,(hl) ; Get char + inc hl ; Pt to next + call conout ; Print char + djnz prfn1 ; Count down + ret + +; +; SEARCH FOR FIRST +; +searf: + push bc ; Save counter + push hl ; Save hl + ld c,17 ; Search for first function +searf1: + ld de,fcb1 ; Pt to fcb + call bdos + inc a ; Set zero flag for error return + pop hl ; Get hl + pop bc ; Get counter + ret + + endif ; Diron or eraon or lton or proton or cpon or renon + +;----------------------------------------------------------------------------- + +; Define buffers as high as possible in TPA for the following groups +; of commands: +; COPY needs SRCFCB and CBUFF +; LIST/TYPE needs PAGCNT and DIRBUF +; ERA, PROT, and DIR commands. needs DIRBUF +; If DIRBUF is defined, its value is in HL on return from this code. The DE +; register pair is not changed by the code, but the BC pair is affected. + +dirbufon equ lton or diron or eraon or proton + + if dirbufon +dirbuf: ds 2 ; Address for directory buffer + endif ;dirbufon + + if cpon +srcfcb: ds 2 ; Address of source file FCB (CBUFF address + ; ..is in the code) + endif ;cpon + + if lton +pagcnt: ds 2 ; Address for page counter + endif ;lton + + + if cpon or lton or eraon or proton or diron + +define: + push de + ld hl,(bdos+1) ; Get bottom of BDOS + ex de,hl ; ..into DE + ld hl,(1) ; Get BIOS warmboot address into HL + ld bc,-[0e00h+800h+3] ; Offset to command processor address + add hl,bc + +; Now we have to compare and pick the lower address as the top of TPA + + push hl ; Save CPR address while comparing + xor a ; Clear the carry flag + sbc hl,de ; Compute (CPR-BDOS) + pop hl ; Restore CPR address + jr c,define1 ; Branch if BDOS address is higher (use CPR) + ex de,hl ; Otherwise use BDOS address +define1: + + if lton + dec hl ; Put PAGCNT in first free byte at top of TPA + ld (pagcnt),hl + endif ;lton + + if cpon + ld de,-36 ; Calculate place for SRCFCB for copy command + add hl,de + ld (srcfcb),hl + if dirbufon + push hl ; Save if needed below + endif ;dirbufon + ld de,-[cpblocks*128] ; CBUFF can use same space as DIRBUF + add hl,de + ld (cbuff),hl + if dirbufon + pop hl + endif ;dirbufon + endif ;cpon + + if dirbufon + ld de,-[maxdirs*11] ; Space for directory buffer + add hl,de + ld (dirbuf),hl + endif + + pop de + ret + + endif ;cpon or dirbufon + +;----------------------------------------------------------------------------- + +; +; SEARCH FOR NEXT +; + if diron or eraon or lton or proton + +searn: + push bc ; Save counter + push hl ; Save hl + ld c,18 ; Search for next function + jr searf1 + +; LOAD DIRECTORY AND SORT IT +; ON INPUT, A=SYSTST FLAG (0=SYS, 1=DIR, 80H=BOTH) +; DIRECTORY IS LOADED INTO BUFFER AT TOP OF TPA +; RETURN WITH ZERO SET IF NO MATCH AND HL PTS TO 1ST ENTRY IF MATCH + +direrr: + call print + db 'DIR Ovf','l'+80h + jp exit + +getdir: + ld (systst),a ; Set system test flag + call logusr ; Log into user area of fcb1 + +; LXI H,DIRBUF ; Pt to dir buffer + call define ; Define buffer addresses + ld (hl),0 ; Set empty + ld bc,0 ; Set counter + call searf ; Look for match + ret z ; Return if not found +; +; STEP 1: LOAD DIRECTORY +; +gd1: + push bc ; Save counter + call getsbit ; Check for system ok + pop bc + jr z,gd2 ; Not ok, so skip + push bc ; Save counter + inc de ; Pt to file name + ex de,hl ; Hl pts to file name, de pts to buffer + ld b,11 ; Copy 11 bytes + call blkmov ; Do copy + pop bc ; Get counter + inc bc ; Increment counter + ld hl,maxdirs-1 ; See if count equals or exceeds MAXDIRS + ld a,b ; Check high bytes + sub a,h + jr c,gd1a ; If carry set, we are OK + ld a,c ; Check low bytes + sub a,l + jr nc,direrr ; If no carry, jump to error message +gd1a: + ex de,hl ; Hl pts to next buffer location +gd2: + call searn ; Look for next + jr nz,gd1 + ld (hl),0 ; Store ending 0 +; LXI H,DIRBUF ; Pt to dir buffer + ld hl,(dirbuf) ; Pt to dir buffer + ld a,(hl) ; Check for empty + or a + ret z +; +; STEP 2: SORT DIRECTORY +; + if sorton + push hl ; Save ptr to dirbuf for return + call diralpha ; Sort + pop hl + endif + xor a ; Set nz flag for ok + dec a + ret + +; +; DIRALPHA -- ALPHABETIZES DIRECTORY IN DIRBUF; BC CONTAINS +; THE NUMBER OF FILES IN THE DIRECTORY +; +diralpha: +; +; SHELL SORT -- +; THIS SORT ROUTINE IS ADAPTED FROM "SOFTWARE TOOLS" +; BY KERNIGAN AND PLAUGHER, PAGE 106. COPYRIGHT, 1976, ADDISON-WESLEY. +; + ld h,b ; Hl=bc=file count + ld l,c + ld (n),hl ; Set "N" + ld (gap),hl ; Set initial gap to n for first division by 2 + +; FOR (GAP = N/2; GAP > 0; GAP = GAP/2) +srtl0: + or a ; Clear carry +gap equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Get previous gap + ld a,h ; Rotate right to divide by 2 + rra + ld h,a + ld a,l + rra + ld l,a + +; TEST FOR ZERO + or h + ret z ; Done with sort if gap = 0 + + ld (gap),hl ; Set value of gap + ld (ii),hl ; Set ii=gap for following loop + +; FOR (II = GAP + 1; II <= N; II = II + 1) +srtl1: +ii equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Add 1 to ii + inc hl + ld (ii),hl + +; TEST FOR II <= N + ex de,hl ; Ii is in de +n equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Number of items to sort + ld a,l ; Compare by subtraction + sub a,e + ld a,h + sbc a,d ; Carry set means ii > n + jr c,srtl0 ; Don't do for loop if ii > n + + ex de,hl ; Set jj = ii initially for first subtraction of gap + ld (jj),hl + +; FOR (JJ = II - GAP; JJ > 0; JJ = JJ - GAP) +srtl2: + ld hl,(gap) ; Get gap + ex de,hl ; In de +jj equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Get jj + ld a,l ; Compute jj - gap + sub a,e + ld l,a + ld a,h + sbc a,d + ld h,a + ld (jj),hl ; Jj = jj - gap + jr c,srtl1 ; If carry from subtractions, jj < 0 and abort + or l ; Jj=0? + + jr z,srtl1 ; If zero, jj=0 and abort + +; SET JG = JJ + GAP + ex de,hl ; Jj in de + ld hl,(gap) ; Get gap + add hl,de ; Jj + gap + ld (jg),hl ; Jg = jj + gap + +; IF (V(JJ) <= V(JG)) + call icompare ; J in de, jg in hl + +; ... THEN BREAK + jr c,srtl1 + +; ... ELSE EXCHANGE + ld hl,(jj) ; Swap jj, jg + ex de,hl +jg equ $+1 ; Pointer for in-the-code modification + ld hl,0 + call iswap ; Jj in de, jg in hl + +; END OF INNER-MOST FOR LOOP + jr srtl2 + +; +; SWAP (Exchange) the elements whose indexes are in HL and DE +; +iswap: + call ipos ; Compute position from index + ex de,hl + call ipos ; Compute 2nd element position from index + ld b,11 ; 11 bytes to flip + endif ; Diron or eraon or lton or proton + + if diron or eraon or lton or proton or renon +iswap1: + ld a,(de) ; Get bytes + ld c,(hl) + ld (hl),a ; Put bytes + ld a,c + ld (de),a + inc hl ; Pt to next + inc de + djnz iswap1 + ret + endif ; Diron or eraon or lton or proton or renon + + if diron or eraon or lton or proton +; +; ICOMPARE compares the entry pointed to by the pointer pointed to by HL +; with that pointed to by DE (1st level indirect addressing); on entry, +; HL and DE contain the numbers of the elements to compare (1, 2, ...); +; on exit, Carry Set means ((DE)) < ((HL)), Zero Set means ((HL)) = ((DE)), +; and Non-Zero and No-Carry means ((DE)) > ((HL)) +; +icompare: + call ipos ; Get position of first element + ex de,hl + call ipos ; Get position of 2nd element + ex de,hl +; +; COMPARE DIR ENTRY PTED TO BY HL WITH THAT PTED TO BY DE; +; NO NET EFFECT ON HL, DE; RET W/CARRY SET MEANS DE/>> to indicate state) + ^W - recall command lines from history stack + ^E - recall history in reverse direction + + +Installation: + + The installation program, CLEDINST, allows you to set up the editor +to your preference. The RCP can be installed directly in memory or in a disk +file -- RCPxxx.ZRL or a system configuration saved with SNAP or NZBLITZ. +CLEDINST also serves as a "help" utility by displaying the current command +bindings. Type "CLEDINST //" for help with CLEDINST.COM. + + +History Tool: + + CLEDSAVE writes the contents of the history stack to a text file on disk. +The file can be reloaded later (CLEDSAVE L), or composed in advance +with a text editor, then loaded. If the file is too large for the history +stack, as many commmand lines as fit are loaded. + + CLEDSAVE is useful as in a startup alias to load frequently used command +lines from an easily altered file. For example: + +Alias: START + +A15: +CLEDSYS <- load SNAP image of ENV,TCAP,RCP,FCP,NDR,QUIET,&PATH +CLEDSAVE CLED.VAR L <- load precomposed command lines into CLED +CLED <- turn the shell on +... <- rest of startup line runs before CLED gets control + +For help with CLEDSAVE.COM, type "CLEDSAVE //". + + You may also use SNAP or NZBLITZ to save the system segment image with +command lines already loaded (turn SAVE OFF first.) + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpcled.lib b/Source/BPBIOS/Z34RCP11/rcpcled.lib new file mode 100644 index 00000000..6c2879a7 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpcled.lib @@ -0,0 +1,1327 @@ + page + +; Library: RCPCLED for Z34RCP +; Author: Carson Wilson (modifications only) +; Version: 1.3b +; Date: October 8, 1989 +; Changes: Civilian time now prints "12" instead of "0" for midnight hour. +; Put Z3PLUS time display capability back in. +; Z3PLUS time display disabled if date = 01/01/78 (no clock). +; Added Rob Friefeld's fix to SAVE_LINE. +; +; Author: rdf +; Version: 1.3a +; Date: October 2, 1989 +; Changes: Changed order of installable highlight codes and history buffer +; addresses to simplify installing a ZRL file. Changed version +; number to guarantee compatibility with accessory programs. +; Option to print user number zero at prompt. +; Time string separator installable. + +; Author: Carson Wilson (modifications only) +; Version: 1.2 B +; Date: September 29, 1989 +; Changes: Made ">>" the prompt when previous commands are NOT being +; overwritten. +; Changed line edit commands to be closer to CP/M Plus. +; Shortened the clock read code (ZSDOS allows straight +; DateStamper calls). +; Uses DEFINE from RCPSUBS.LIB to save space. +; Does not print prompt user number if at user zero. +; Optional installable highlight codes for time in prompt. +; Time prompt shortened to "hh.mm" for easier reading. + +; Author: Rob Friefeld +; Version: 1.2 a +; Date: September 20, 1989 + +; Syntax: CLED [/] if "/", then run for one command line only +; e.g. from a shell like ZFILER + +; +; ===== D E F I N I T I O N S S E C T I O N ===================== +; + +clver equ 13 ; Version number (Install program compat.) +clrev equ 'b' ; Revision (Does not affect config.) + +del equ 7fh ; not in sysdef.lib + +; +;===== C O N F I G U R A T I O N A R E A ======================== +; + +; The installation program and buffer loader depend on the configuration +; of this data structure. It should not be changed. + +shname: db 'CLED',0 ; Name put on shell stack +versid: db clver ; CLED version +ddsep: db dudir_sep ; DU:DIR separator char +ins_flag: db clins ; Yes = insert mode +minsave: db clmin ; Discard line =< this +era_flag: db clera ; Erase stored line on exit +save_flag: db clsav ; Save command lines +tim_sep: db timesep ; Time string separator + +; --------------------------- + +; Command list for RCPCLED, Version 1.3 +; Set bit 7 to use a command with meta key + +cmd_list: + db 'Q' ; Meta key 1 + db 'H' ; Backspace + db 'S' ; Cursor left + db 'D' ; Cursor right + db 'A' ; Word left + db 'F' ; Word right + db 'B' ; Line end/ start + dc 'S' ; Line start + dc 'D' ; Line end + db 'G' ; Delete char + db DEL ; Delete left + db 'T' ; Delete word + db 'L' ; Delete word left + db 'X' ; Delete to SOL + db 'Y' ; Delete line + db 'K' ; Delete to EOL + db 'V' ; Toggle insert + db 'P' ; Enter control + db 'W' ; Recall line + db 'E' ; Recall reverse + db 'M' ; Execute line + db '[' ; ESC menu + +cmdlen equ $ - cmd_list + +; --------------------------- +; Highlight on/off codes for time display (installable) +; +stndout: db 0,0,0,0 ; Must terminate with hibit or binary 0 +stndend: db 0,0,0,0 ; Ditto + +; --------------------------- +; 4 bytes are used here for the information of the history save/load tool, +; CLEDSAVE + +histaddr: dw history ; Pointer to history buffer +histsz: dw histsize ; Buffer size + +; +;===== M A I N C O D E S E C T I O N ======================== +; +cled: + call define ; Set pointer to free mem + ld de,-lbufwid-1 + add hl,de + ld (line),hl ; Set line buffer location + xor a + ld (hl),a ; Zero line + ld hl,history ; History stack + ld (recall_ptr),hl ; Init position pointer to start + + ld a,(fcb+1) ; Check command line option + cp '/' + jr z,cledit ; Go right to editing + + ld a,(z3msg+3) ; QSHELL + dec a ; <> 1 on manual invocation + jr z,cledit ; Skip installation + +; +;===== S H E L L I N S T A L L A T I O N ========================= +; +sh_inst: + ld hl,shname + call shpush ; Z = OK + ret z + call print ; Complain about stack and cancel + dc cr,lf,'SH STK' ; Full or non-existent + ret + +; +;===== L I N E E D I T =========================================== +; + +; This is the main entry point for the shell +; 1 - Display prompt +; 2 - Get user input +; 3 - Reset shell bit +; 4 - Run command line + + +; Subtask 1 -- +cledit: + call prompt ; Display system prompt + +;---------------------------------------- +; Subtask 2 -- + +; The editor returns NZ if the shell pop command has been given. If not, it +; returns the character count of the command line in B. + + call EDIT + +;---------------------------------------- +; Subtask 3 -- + push af ; Save return code + xor a + ld (z3msg+3),a ; PUTCST + pop af + +;---------------------------------------- +; Subtask 4 -- + jp nz,shpop ; Quit shell + +; Here we load the MCL directly from the line buffer. On OVFL, loop to edit. + +loadcl: + ld a,(z3cl+2) ; MCL size + inc b ; B contains line count, include terminating 0 + cp b ; Compare to line size + jr nc,loadcl1 ; OK + +mclerr: + call print + dc cr,lf,'OVFL',cr,lf + jp cledit + +loadcl1: + ld de,z3cl+4 ; Set MCL pointer to start + ld (z3cl),de + + ld hl,(line) + ld c,b + ld b,0 + ldir ; Move line buff to MCL + ret ; Run it + + +; +;===== S U B R O U T I N E S ======================================= +; + +; Prompt -- PRINT a DU:DIR prompt. +; +prompt: + if systime + call print_time + endif + + ld bc,(cusr) ; GDEFDU + ld a,b ; Drive + add a,'A' ; Make it a letter + call conout ; Write it + ld a,c ; Get user + + if puser0 + call pusr ; Write it + else + or a + call nz,pusr ; Write it IF NONZERO + endif ;puser0 + + call dutdir ; Get the ndr + jr z,prompt1 + ld a,(ddsep) ; DU:DIR separator + call conout + ld b,8 ; Eight chars max +nameloop: + ld a,(hl) ; Get the first char + cp ' ' + call nz,conout ; Write it if not blank + inc hl + djnz nameloop + +prompt1: + call prompt2 + ld a,(save_flag) ; If save is OFF, prompt is >> + or a + ret nz +prompt2: + call print + dc '>' + ret + +; PUSR -- Convert user # in A to decimal and print +; +pusr: + ld hl,10 shl 8 + '0'-1 ; H=10, L='0'-1 + cp h ; User < 10 ? + jr c,pusr1 +pusr0: + inc l ; Advance character for user number tens digit + sub h + jr nc,pusr0 + add a,h + ld h,a ; Keep low digit of user number in H + ld a,l ; Display tens digit + call conout + ld a,h ; Ready to process units digit +pusr1: + jp decout ; Routine in RCPSUBS.LIB +; add '0' +;pusr2: +; jp conout + +; Console input without echo + +cin: + push hl + push de + push bc +cin1: ld c,dirconf ; DCIO + ld e,-1 + call bdos + or a + jr z,cin1 + pop bc + pop de + pop hl + ret + +; +;===== E D I T O R S E C T I O N ================================ +; + +; Date: October 2, 1989 + +; Entry is EDIT +; Return Z = Execute command line, NZ = Quit shell, B = char count of line + +; Initialize to on-line environment. +; While editing, HL -> current position in LINE, B = char count, +; C = cursor position (0 .. count), DE = scratch + +edit: + ld hl,(line) ; Init to start of line + xor a + ld b,a ; Line count = 0 + ld c,a ; Cursor pos = 0 + + push hl ; There may already be a line here + dec b ; Accumulate possible char count in B +edit1: + inc b + cp (hl) ; A = 0 + inc hl + jr nz,edit1 ; Loop until 0 terminator +edit2: + pop hl ; Point to line again + call zline ; Zero the remainder of LINE buffer + call ptail ; Print the line from cursor position + +;-------------------------------------------------------------------- + +; EDIT COMMAND LOOP + +; Get a char. If it is text, enter it. If it is a control, scan the +; CMD_LIST for a match. If found, compute offset into jump table and go. +; A "shifted" key (high bit set in table) is matched after the "meta-key" +; has been entered. + +ecmd: + exx ; Main regs must be preserved + ld hl,ecmd ; Save address so a return comes back here + push hl + +no_match: + call cin ; Next key... + cp 'C'-'@' ; Warm boot? + jp z,0000h + + ld hl,meta_flag ; Shift flag + or (hl) ; Mask in possible high bit + ld (hl),0 ; Reset flag + exx ; Recover main regs + + cp 20h ; Test key + jr c,control_key ; Not text + cp del ; This control char > text chars + jp c,enter ; Input text + +control_key: + call menuinp ; Convert control char to cap + + exx ; Must preserve main regs + ld hl,cmd_list ; Scan command list + ld bc,cmdlen + cpir + jr nz,no_match + ld hl,cmd_vector + ld a,cmdlen-1 ; Point to address in vector table + sub c + add a,a + ld c,a + add hl,bc + ld c,(hl) + inc hl + ld b,(hl) + ld (cjump),bc ; Address to jump to + exx ; Restore regs! + +cjump equ $+1 + jp 0 + + +; Convert a control key entry to cap char + +menuinp: + push af + and 80h ; Keep high bit + ld e,a + pop af + and 7fh + call ucase + or e ; Restore high bit + ret + +; Mark meta-key flag + +meta_key1: + ld a,10000000b + ld (meta_flag),a + ret + +meta_flag: db 0 ; Initial value 0 = no shift + + +; Jump table for commands + +cmd_vector: + dw meta_key1 ; Shift key + dw bsp ; Backspace + dw bsp ; Cursor left + dw fsp ; Cursor right + dw bwrd ; Left word + dw fwrd ; Right word + dw linend ; To EOL + dw linbeg ; To SOL + dw linend1 ; To EOL/SOL + dw delete ; Delete char + dw delft ; Delete char left + dw delwrd ; Delete word right + dw delwlft ; Delete word left + dw delsol ; Delete to start of line + dw dline ; Delete line + dw deleol ; Delete to end of line + dw instog ; Toggle insert + dw ctl_entry ; Enter control char + dw recall_back ; Scroll back in history + dw recall_fwrd ; Scroll ahead in history + dw eds$ex ; Execute line + dw esc_menu ; Submenu + +;-------------------------------------------------------------------- + +; ON-LINE ROUTINES, EDITING CURRENT LINE IN LINE BUFFER + +; WHILE ON LINE: +; B = CHAR COUNT (0..lbufwid) C = CURSOR POSITION (0..lbufwid) +; HL = MEM POSITION + + +; Backspace +; Return Z = backspace not done, NZ = all OK + +bsp: + xor a + cp c ; Cursor pos + ret z ; At start + dec hl ; Back up in mem + dec c ; Cursor pos back +bspace: + ld a,bs ; Back up on screen + or a ; Must ret nz + jp conout + + +; Forward space +; Return Z = not done + +fsp: + ld a,(hl) + or a + ret z ; At EOL + inc hl + inc c + jp pctl ; Screen advance by reprinting char + + +; Back word + +bwrd: + call bsp ; Backspace + ret z ; Nowhere to go + ld a,(hl) + cp ' ' + jr z,bwrd ; Backspace over blanks + dec hl ; Now backspace until next wordsep + call wrdsep ; Look at char before this position + inc hl + jr nz,bwrd + ret + +; Forward word + +fwrd: + call wrdsep ; Are we on a word separator? + jr z,fwrd1 ; Yes + call fsp ; No, advance until we find one + jr fwrd + +fwrd1: call fsp ; Word sep found, advance 1 more space + ld a,(hl) ; Are we on a blank? + cp ' ' + jr z,fwrd1 ; Don't quit on a blank + ret + + +; Delete char left + +delft: + call bsp ; Backspace and fall through to delete + + +; Delete char + +delete: + call delmem ; In memory + jp ptail ; Refresh screen from cursor position + +; Delete to start of line + +delsol: + ld a,c ; Get cursor pos + or a + ret z ; Already at start + cp b + jr z,dline ; At end, so delete entire line (quicker) + ld e,a ; Cursor pos = # chars to delete + call linbeg ; Go to start +delcmd1: + call delmem ; Delete first char in memory + dec e ; Loop counter + jr nz,delcmd1 + jp ptail ; Now update screen + + +; Delete word left + +delwlft: + call bwrd ; Back a word and fall thru ... + + +; Delete word right + +delwrd: + call wrdsep ; On a word sep? + jr z,delete ; Yes, kill it + ld a,b ; Compare line count to cursor pos + cp c + jr z,delete ; On last char of line +delwrd1: + call delmem ; Delete in mem, let screen catch up later + jr delwrd ; Go until word sep found + + +; Delete line + +dline: + call linbeg ; Position at line start and fall thru ... + +; Delete to eoln + +deleol: + call ereol ; Clear on screen + ld b,c ; Char count = current position + jp zline ; Zero line tail in mem + +; Insert/overwrite toggle + +instog: + ld a,(ins_flag) ; Flag 0 -> owrt + cpl + ld (ins_flag),a + ret + +; Enter a control + +ctl_entry: + call cin + and 1fh ; Fall thru to normal char entry + +; Enter a char + +enter: + ex af,af' ; Save char + ld a,b ; At eoln? + cp c + jr z,ovrwrt ; Yes, no need for insert mode + ld a,(ins_flag) ; Which mode are we in? + or a ; 0 = overwrite, nz = insert + jr nz,insert + + +; Enter char in overwrite mode + +ovrwrt: + ld a,b ; Char count + cp lbufwid-2 ; Line full? + jr c,ovr1 ; No + cp c ; At EOLN? + ret z ; Accept no more chars + +ovr1: ex af,af' ; Recover char + ld (hl),a ; Put char in place + call fsp ; Advance by printing it + ld a,b ; Char count -> a + cp c + ret nc ; No need to incr char count inside line + inc b ; Else add to count + ret + +; Enter char in insert mode + +insert: + ld a,b ; Line full? + cp lbufwid-2 + ret nc + +insrt: + ld a,b ; At eoln? + sub c ; A = # chars to eoln + jr z,ovr1 ; Yes, really want overwrite + call insmem ; Push chars down to make room + ex af,af' ; Recover new char + ld (hl),a ; Place char in line + call ptail ; Reprint entire line from here + inc b ; Inc char count + jp fsp ; Advance cursor + + +; Line end/start toggle + +linend: ; Go to eoln or, if there, to start of line + ld a,b + cp c + jr z,linbeg + +linend1: + call fsp ; Print ahead until EOL + jr nz,linend1 + ret + +linbeg: + call bsp ; Backspace until start + jr nz,linbeg + ret + + +; Compare current char to list of word separators + +wrdsep: + push hl + push bc + ld bc,wrdseplen + ld a,(hl) + ld hl,wrdseps + cpir + pop bc + pop hl + ret + +wrdseps: + db 0,' ,;:.' ; Punctuation word separators +wrdseplen equ $ - wrdseps + + +; Delete current char from line + +delmem: + ld (hl),0 ; Terminal 0 or char to be deleted + ld a,b + sub c ; A = (count-position) = chars from end + ret z ; At eoln, no char + dec b + ret z ; Single char line + dec a + ret z ; On last char, just deleted it +delmem1: + inc a ; To move terminal 0 in + push hl + push de + push bc + ld d,h ; Dest is current pos + ld e,l + inc hl ; Source, terminal 0 + ld c,a ; Count, line tail + ld b,0 + ldir ; Block move + pop bc + pop de + pop hl + ret + +; Insert a char in line + +insmem: + push bc ; Make room for char in line + push de + ld c,a ; Bc = # chars to move + ld b,0 + add hl,bc ; Dest is new eoln + ld d,h ; Now in DE + ld e,l + dec hl ; Source is current eoln + lddr ; Tail move + pop de + pop bc ; Recover char count, crs pos info + inc hl ; Hl to next char + ret + + +; Print line tail from cursor position, return to position + +ptail: + push hl ; Save mem pos + push bc ; Save screen pos + call linend1 ; Print ahead to end of line + call ereol ; Clean off danglers +ptail1: + ld a,c ; End of line cursor pos + pop bc + pop hl + sub c ; Current cursor pos + ret z ; At end of line already + ld e,a ; Loop counter +ptail2: + call bspace ; Else back up to where we were + dec e + jr nz,ptail2 + ret + + +; Print a char, turn a control char into a cap char + +pctl: + push af + cp 20h + jr nc,pctl1 + add '@' +pctl1: call conout + pop af + ret + + +; Convert char or control key to upper case + +ucase: + cp ' ' + jr nc,notctl + add '@' +notctl: cp 'a' + ret c ; Not a lowercase + cp 'z'+1 + ret nc ; Not a lowercase + sub ' ' ; Yes, a lowercase + ret + + +; Zero line tail + +zline: + push hl + push bc + ld hl,(line) ; HL -> start of line + ld c,b ; BC = char count + ld b,0 + add hl,bc ; HL -> EOLN + ld a,lbufwid + sub c + dec a + jr z,zline0 + ld b,a ; # of 0's + xor a +zline1: + ld (hl),a + inc hl + djnz zline1 +zline0: + pop bc + pop hl + ret + + +; ESC key pressed - get submenu command + +esc_menu: + call cin + call ucase + cp 'Q' ; Quit + jr z,edquit + cp 'S' ; Toggle Save + ret nz ; Loop if none of these + +; Toggle recording state +; - Alter line prompt to > if save ON, >> if save OFF + +save_tog: + ld a,(save_flag) ; Flip flag byte + cpl + ld (save_flag),a + call crlf + call prompt ; Print new prompt string + pop af ; Lift ecmd from stack + jp edit ; Restart + + +; Exit editor + +eds$ex: + pop af ; Lift ECMD from stack + ld a,(save_flag) ; Are we recording? + or a + ret z ; Nope + + ld a,(minsave) ; Is line worth keeping? + cp b + push bc + call c,save_line + pop bc + +edn$ex: + xor a ; Return Z + ret + + +; Exit and pop shell + +edquit: + pop af ; Lift ECMD from stack + xor a ; Return NZ + dec a + ret + + +; --------------------------- + +; HISTORY STACK ROUTINES for RCPCLED, Version 1.2 + +;Each command line is pushed onto the history stack before execution. As the +;older ones overflow, they are eliminated. The last character of each line +;has the high bit set. The buffer terminates with a 0. +;The history stack is internal to the RCP, but could be implemented in an RSX + +; Save new line to stack +; - This routine called only on exit, so on-line regs not preserved. +; - Push contents down by size of current line +; - Move line buffer to start of stack +; - Terminate line with high bit set +; - Terminate history with 0 after last complete line +; - If current line is too big for buffer size chosen, do nothing + +save_line: + ld c,b ; Line size from b to bc + xor a + ld b,a + push bc + ld hl,HISTSIZE + sbc hl,bc ; Buffer size - line length + jr z,savel_err ; Not enough room + jr c,savel_err ; Definitely not enough room! + push hl + ld hl,hbuf_top + push hl + sbc hl,bc ; hl -> bufftop - line size + pop de ; de -> bufftop + pop bc ; bc = buffsize - line size + lddr ; tail move + + pop bc ; Recover line size in bc + ex de,hl + inc de ; de -> buffstart + ld hl,(line) ; Move in line + ldir + dec de + ex de,hl + set 7,(hl) ; Tag line terminus + + ld hl,hbuf_top ; Terminate history after last complete line +savel1: + dec hl ; Back up to EOLN + bit 7,(hl) + jr z,savel1 ; Loop until hi-bit encountered + inc hl + ld (hl),0 + ret + +savel_err: + pop af ; Lift BC push + ret + +; Recall command history, newest -> oldest +; - recall_ptr is init to start of buffer on each CLED invocation +; - return with pointer updated to next line + +recall_back: + call check_recall ; Is there anything in buffer? + ret nc ; No + +; Transfer from recall pointer to line buffer +; - enter hl @ recall_ptr +; - return ptr -> start of next command if no OVFL + +rc_back1: + ld de,(line) ; Destination for move +rc_back1a: + ld a,(hl) + or a + jr z,recall_quit ; Buff end + ldi + bit 7,a + jr z,rc_back1a + + ld (recall_ptr),hl ; Update ptr now + ex de,hl ; Point to end of line in line buffer + ld (hl),0 ; Terminate it + dec hl + res 7,(hl) ; Fix high bit from storage + + pop af ; Lift ecmd from stack + jp edit ; Restart on this line + +recall_quit0: + pop af ; Lift subroutine call from stack +recall_quit: + exx ; Recover main regs + ret ; Back to editing + + +; Recall command history, oldest -> newest + +recall_fwrd: + call check_recall ; Anything in buffer? + ret nc ; No + call rc_fwrd1 ; Move to previous line + call rc_fwrd1 ; Don't repeat line on direction rev + jr rc_back1 ; Now same code as recall_back + +rc_fwrd1: + dec hl ; Initially, HL -> next line to recall + ld de,history ; Underflow address +rc_fwrd1a: + push hl ; Compute position relative to top + xor a + sbc hl,de + pop hl + ret z ; Quit when start of buff reached + jr c,recall_quit0 ; Underflow + dec hl ; Going backwards in buffer + bit 7,(hl) + jr z,rc_fwrd1a + inc hl ; Point to char past command terminator + ret + + +; Check to see if anything in recall buffer yet +; - Ret NC = no, main regs preserved +; - Else switch main regs to alt, ret HL @ recall buffer line + +check_recall: + ld a,(history) ; Is anything in buffer yet? + or a + ret z ; Nope + call linbeg + exx + ld hl,(recall_ptr) + scf + ret + +; --------------------------- + +; Routine: EREOL function for Z34RCP +; Author: Rob Friefeld +; Version: 1.0 +; Date: September 19, 1989 +; +; Entry: EREOL +; Function: To clear to end of line +; Comments: The setting of the ERLTCAP equate determines whether this +; command uses the TCAP information or not. If not, it uses the +; ereol string passed in macro CLR_EOL. That string should +; end with the high bit set. The setting of the ERLQUICK equate +; determines whether to simply output the TCAP string for this +; function or to interpret it as does Rick Conn's VLIB version. +; Uses RCPSUBS.LIB routines CONOUT and PRINTHL. + + +; ------------------------------------------------------------------- + + if [not erltcap] +; Erase to end of line. Return NZ. + +ereol: call print + clr_eol +; or -1 ; For VLIB compatibility + ret + + + else + if erlquick + +; --------------------------- + +; This version just prints the EREOL string: no delay, no interpretation. + +ereol: + push hl + ld hl,z3tcap+17h ; CLS string + xor a ; Skip to EREOL string +ereol1: cp (hl) ; Skip once + inc hl + jr nz,ereol1 +ereol2: cp (hl) ; Skip twice + inc hl + jr nz,ereol2 + call printhl ; Print it + pop hl + ret + +; --------------------------- + +; This is a disassembly of EREOL from VLIB + else + +ereol: + push bc + push de + push hl + ld hl,z3tcap+16h ; Point to ereol delay + ld d,(hl) + inc hl + call vidskp + call vidskp + call vidout + pop hl + pop de + pop bc + xor a + dec a + ret + +vidskp: + ld a,(hl) + inc hl + or a + ret z + cp '\' + jr nz,vidskp + inc hl + jr vidskp + +vidout: + ld a,(hl) + or a + jr z,vid2 + inc hl + cp '\' + jr nz,vid1 + ld a,(hl) +vid1: + call conout + jr vidout + +vid2: + ld a,d + or a + ret z + ld c,a + ld hl,z3env+2bh ; Processor speed + ld a,(hl) + or a + jr nz,vidl1 + ld a,4 +vidl1: + ld b,a + push bc + call vdelay + pop bc + dec c + jr nz,vidl2 + ret +vdelay: + call vdel1 + djnz vdelay + ret +vdel1: + ld c,20 +vdel1a: + ex (sp),hl + ex (sp),hl + dec c + jr nz,vdel1a + ret + + endif ;erlquick + endif ;not erltcap + +; +;===== Z 3 L I B R O U T I N E S ================================ +; + +; Disassembly of Z3LIB routines DUTDIR, SHPUSH, SHPOP +; For use with CLED RCP segment ONLY +; Does not save regs as does Z3LIB, and has less env error checking +; rdf 10/2/89 + +DUTDIR: + ld a,z3ndirs ; No NDR + or a + ret z + + ld hl,(z3ndir) + inc b +dutdir1: + ld a,(hl) + or a + jr nz,dutdir2 + dec b + xor a + ret +dutdir2: + cp b + inc hl + jr nz,dutdir3 + ld a,(hl) + cp c + jr nz,dutdir3 + inc hl + dec b + xor a + dec a + ret +dutdir3: + push bc + ld bc,11h + add hl,bc + pop bc + jr dutdir1 + + +shpop: + +; *** +;Special function for RCPCLED -- null saved command line + ld a,(era_flag) ; Erase? + or a + jr z,eflag1 ; Z = NO + xor a + ld (history),a +eflag1: +; *** + +;shpop: + call getsh ; HL -> stack, DE = size, B = entries + ret z ; No stack + ld c,e ; Entry size + ld a,(hl) + or a + ret z ; Empty + ex de,hl + add hl,de ; HL -> next entry, DE -> first entry + xor a +shpop1: + ld (de),a ; Zero entry + dec b + ret z ; Successful exit, no more entries + push bc ; Pop next entry + ld b,0 + ldir + pop bc + jr shpop1 + + +shpush: + push hl ; Save string pointer + call getsh + jr z,shpush_err1 ; No stack + +shpush3: + ld a,(hl) ; Look for free entry + or a + jr z,shpush4 + add hl,de + djnz shpush3 + jr shpush_err2 ; Stack full +shpush4: + call getsh ; Point to top of stack + push bc +shpush5: + dec b + jr z,shpush6 + add hl,de + jr shpush5 +shpush6: + pop bc + ld c,e + dec hl + ex de,hl + add hl,de ; HL -> (entry-1) + size, DE -> (entry-1) + ex de,hl +shpush7: + ld a,b + cp 1 + jr z,shpush8 + dec b + push bc + ld b,0 + lddr + pop bc + jr shpush7 +shpush8: + call getsh + pop de + ex de,hl +shpush9: + ld a,(hl) + ldi + or a + jr nz,shpush9 + +shpushx: + ret + +shpush_err1: +; ld a,1 ; No stack +; jr shpush_err + +shpush_err2: + ld a,2 ; Stack full +shpush_err: + pop hl + or a + ret + + +; Get shell stack entry +; Return HL -> top of stack +; DE = entry size +; C = unchanged +; B = # entries +; A = # entries +; Z = no entries +getsh: +getsh2: + ld hl,(z3env+1eh) ; Stack + ld a,(z3env+20h) ; # entries + ld b,a + ld de,(z3env+21h) ; Entry size in E + ld d,0 + or a + ret + +; +;===== C L O C K R E A D I N G ================================== +; + + if systime + +; Print system time from DateStamper, ZS/ZDDOS/Z3PLUS clock + +; Entry point +; Print the string with leading '0' suppression +; Format: "h.mm " or "hh.mm " + +print_time: + +; 1. Test for DateStamper/ZSDOS/Z3PLUS and read clock if present + + ld c,12 ; Return version + ld e,'D' ; DateStamper test + call bdos + ld a,l ; Version # + cp 30h ; Z3PLUS? + jr nc,time1 ; Yes + ld a,h + cp 'D' + ret nz ; No clock + +; 2. Get time + + ld hl,time2 + push hl ; Return address on stack + push de ; Clock address on stack + ld hl,dtbuf ; Point to buffer + ret ; Call clock, return to time2 +time1: ; Z3PLUS entry point + ld c,105 ; CP/M Plus get time + ld de,dtbuf+1 + push de + call bdos + pop hl + ld a,(hl) + inc hl + ld b,(hl) + dec a + or b + ret z ; No clock if date = 0001 +time2: + +; 3. Turn highlight on, if present + + ld hl,stndout + call printhl + + ld hl,dtbuf+3 ; Point to hours + +; 4. Convert military time to civilian, if selected + + if civtim + ld a,(hl) ; Hours + or a ; Midnight? + jr nz,time3 ; No + ld a,24h ; Yes, say "12" +time3: sub 13h ; Time past 12:59 pm? + jr c,time4 ; No, don't change + daa ; Decimal adjust + inc a ; Yes, xlate to 12-hour + daa + ld (hl),a ; ..and patch in. + endif ; civtim + +; 5. Display time + +time4: + xor a + call pmbcd ; Print hours as 1 or 2 digits + ld a,(tim_sep) ; Print separator between hours, minutes + call conout + inc hl ; Point to minutes + ld a,80h ; Say print leading 0 + call pmbcd ; Print minutes as 2 digits + +; 2. Turn highlight off, if present + + ld hl,stndend + call printhl + jp spac ; Space before rest of prompt + +; +;===== D A T A ==================================================== +; + +; Buffer for date/time for read/write system clock + +dtbuf: ds 6 + + endif ;systime + + +line ds 2 ; Pointer to line buffer +recall_ptr ds 2 ; History position pointer +history ds HISTSIZE,0 ; History buffer +hbuf_top: equ $-1 + +; End RCPCLED.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpcls.lib b/Source/BPBIOS/Z34RCP11/rcpcls.lib new file mode 100644 index 00000000..e6264137 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpcls.lib @@ -0,0 +1,35 @@ + page + +; Library: RCPCLS for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: CLS +; Function: To clear the CRT screen +; Comments: The setting of the CLSTCAP equate determines whether this +; command uses the TCAP information or not. If not, it uses the +; clear-screen string passed in macro CLSSTR. That string should +; end with the high bit set. + +cls: + if clstcap ; If using TCAP for clear screen string + ld a,(z3tcap) ; TCAP address from Z34CMN.LIB + cp ' '+1 ; See if blank + jr nc,cls1 ; If not, go to clear screen code + jp crlf ; If blank, just do CRLF +cls1: + ld hl,clrscr ; Address from Z34CMN.LIB + jp printhl ; Display it + + else ; Not using tcap + + call print + clsstr ; String from Z34RCP.LIB + ret + + endif ;clstcap + +; End RCPCLS.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpcmd.lib b/Source/BPBIOS/Z34RCP11/rcpcmd.lib new file mode 100644 index 00000000..58a54e78 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpcmd.lib @@ -0,0 +1,56 @@ + page + +; Library: RCPCMD for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; Description: Command Table and Custom Commands for Z34-RCP + +; This is the customization file for the ZCPR Version 3.4 resident command +; package. Use it to add your own custom commands to the RCP. + +; Give each of your custom commands a unique label and command name. Then +; add the command name(s) to the macro CUSTTBL, below, and append the code +; for the commands to the end of this file. + +; CUSTTBL - Custom commands table. +; +; Add one line to CUSTTBL for each of your custom commands. Each line +; must be of the form: +; +; COMMAND name, TRUE, wheel, label +; +; Where COMMAND and TRUE appear as-is, and "name", "wheel", and "label" +; are created by the user. "Name" is a name of four characters or less used +; to invoke the command, in upper case. "Wheel" is "true" to protect the +; command from non-wheel users, "false" otherwise. "Label" marks the +; beginning of the custom code. For example, to create a wheel- +; protected command named "DIR" which calls the code at label "directory", +; CUSTTBL appears as follows: +; +;custtbl macro +; command DIR, true, true, directory +; endm + +custtbl macro +;; command ____, true, ____, _______ ; Template for custom commands + endm + +; ------------------------------ + +; RCP command dispatch table + + db cmdsize ; Length of each command name + cmdtbl ; Dispatch table from Z34RCP.LIB + custtbl ; Optional custom commands + db 0 ; Marks end of command jump table + +; -------------------------------------------------- + +; Insert label(s) and code for custom RCP commands here: + +; + +; END RCPCMD.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpcp.lib b/Source/BPBIOS/Z34RCP11/rcpcp.lib new file mode 100644 index 00000000..6ec69f48 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpcp.lib @@ -0,0 +1,245 @@ + page + +; Library: RCPCP for Z34RCP +; Author: Carson Wilson +; Version: 1.3 +; Date: August 11, 1989 +; Changes: Responds dynamically to QUIET flag, eliminating "noise." + +; Version: 1.2 +; Date: December 30, 1988 +; Changes: Now works properly with CP/M Plus. +; Moved SETDMA to common routines. + +; Author: Carson Wilson +; Version: 1.1 +; Date: August 4, 1988 +; Changes: Now initializes FCB1 before calling SetFStp, allowing +; stamp setting of multiple-extent files. +; +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: CP +; Function: Copy a file from one place to another +; Syntax: If FCBSWAP false: +; CP destfile=srcfile, CP =srcfile +; If FCBSWAP true: +; CP srcfile destfile, CP srcfile +; If TESTEQ and FCBSWAP true: +; Both of the above forms work +; +; Comments: Both file specifications can include a directory specification. +; If only one file name is given, then the current directory and +; the source file name are assumed for the destination. + +; +; New ZSDOS/DosDisk BDOS standard functions: +; +GetFStp equ 102 ; Get file stamp function +SetFStp equ 103 ; Set file stamp function + +copy: + call retsave + call dirchek ; Test bad directory + + if leftright + call fcbswap ; Exchange fcb1 with fcb2 + endif + +; If new is blank, make it the same name and type as old + + ld de,fcb1+1 ; Point to destination file name + ld a,(de) ; Get first character + cp ' ' ; If not blank (no name) + jr nz,copy0 ; ..then branch to copy + ld hl,fcb2+1 ; Copy source name into destination FCB + ld b,11 ; Name and type are 11 bytes + call blkmov + +; See if destination is same as source, and abort if so + +copy0: + ld hl,fcb1 ; Set up pointers to two files + ld de,fcb2 + push hl + push de + inc hl ; Point to names of files + inc de + ld b,13 ; Compare 13 bytes (name, type, and user #) +copy1: call comp + jr nz,copy2 ; If they differ, go on with copy + ld a,(cdrv) ; ZCPR current drive + inc a ; Shift to range 1..16 + ld b,a ; ..and keep value in B + pop de ; Restore pointers to FCBs + pop hl + ld a,(de) ; Get drive of source file + ld c,a ; ..and save it in C + or a ; Is it default drive? + jr nz,copy1a ; Branch if drive made explicit + ld c,b ; Otherwise, copy default drive into C +copy1a: ld a,(hl) ; Get drive of destination file + or a ; Is it default drive? + jr nz,copy1b ; Branch if drive made explicit + ld a,b ; Otherwise, get current drive +copy1b: cp c ; Compare the two drives specified + jr nz,copy3 ; Branch if they are different + jp duperr ; Tell EH duplicate filespecs +copy2: + pop de ; Clean up the stack + pop hl + +; Make note of the user numbers of the two files + +copy3: + ld a,(fcb1+13) ; Get destination user number + ld (usrdest),a + ld a,(fcb2+13) ; Get source user number + ld (usrsrc),a + +; Set up new FCB for source file and open the source + + call define ; Define buffer addresses dynamically +srcfcb equ $+1 + ld hl,0 ; Get address to use for new source FCB + push hl + ex de,hl ; Copy file data to new FCB + ld b,12 + call blkmov + call logsrc ; Log in user number of source file + pop hl ; Initialize the source file FCB + call initfcb2 + ld c,15 ; Open source file + call bdos + inc a ; Check for error + jp z,noflerr ; File not found error handler + + if StpCall + call cpmver + jr nc,copy4 ; Don't do this if CP/M Plus +stpbuf equ $+1 + ld de,0 + call setdma ; Set DMA to date buffer + ld de,(srcfcb) + ld c,GetFStp ; Get stamp (if any) to DMA + call bdos + ld (gotstp),a ; Store result + ld de,tbuff ; Restore DMA + call setdma ; ..for search +copy4: + endif ; StpCall + +; Make sure destination file does not already exist + + call logdest ; Log into destination user area + call extest ; Test for existence of file in fcb1 + jp z,exit ; Branch if it exists and user says no + +; Create destination file + + ld de,fcb1 ; Point to destination FCB + ld c,22 ; BDOS make-file function + call bdos + inc a ; Test for error (no directory space) + jp z,fulerr ; Invoke EH if not OK + +; Copy source to destination + +copy5: call logsrc ; Log in source user area + ld b,0 ; Initialize counter + ld de,(cbuff) ; Initialize buffer pointer +copy5a: push de ; Save address and counter + push bc + call setdma ; Set DMA to cbuff+(b*128) + ld de,(srcfcb) ; Point to source file FCB + ld c,20 ; BDOS read-sequential function + call bdos + pop bc ; Get counter and address + pop de + or a ; Read Ok? + jr nz,copy5b ; Branch if end of file + ld hl,128 ; Point DE to next buffer address + add hl,de + ex de,hl + inc b ; Increment counter + ld a,b ; See if buffer full + cp cpblocks + jr nz,copy5a ; If not, go back for more +copy5b: ld a,b ; Get count of blocks loaded into buffer + or a ; Are there any? + jr z,copy6 ; Branch if not (we are done) + push bc ; Save count + call logdest ; Log into destination user number +cbuff equ $+1 ; Pointer for in-the-code modification + ld de,0 ; Point to beginning of copy buffer +copy5c: push de ; Save buffer address + call setdma ; Set dma to buffer + ld de,fcb1 ; Point to destination file FCB + ld c,21 ; Sequential write the block + call bdos + or a ; Get result + jp nz,fulerr ; Invoke EH (disk full or write error) + pop de ; Get buffer address & balance stack + pop bc ; Get count + dec b ; Buffer empty? + jr z,copy5 ; Yes. Back for refill + push bc ; No. Save count + ld hl,128 + add hl,de + ex de,hl ; DE points to next buffer address + jr copy5c ; Back for another sector to write + +; Close the destination file + +copy6: call logdest ; Log into destination user number + ld de,fcb1 ; Point to destination FCB + ld c,16 ; Close file + call bdos + inc a ; 0ffh --> 0 if error + jp z,fulerr ; Invoke EH + + if StpCall +gotstp equ $+1 + ld a,0 ; File had stamp? + dec a ; 1 --> 0 = yes + jr nz,noset ; No + ld de,(stpbuf) ; Point to buffer + call setdma ; Set DMA + call initfcb1 ; Init. for SetFStp, point to dest. + ld c,SetFStp ; Set file's stamp + call bdos ; CCP restores DMA +noset: + endif ; StpCall + + ld a,(quiet) + or a + jr nz,qcpdone + call print + db ' Don','e'+80h +qcpdone: + if cpsp and spaceon + jp spaexit ; Report space remaining on destination drive + else + jp exit + endif ;cpsp and spaceon + +; Log into user number of source file + +logsrc: +usrsrc equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get user number + jr setusrrel ; Local jump to save code + +; Log into user number of destination file + +logdest: +usrdest equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get user number +setusrrel: + jp setusr + +; End RCPCP.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpdir.lib b/Source/BPBIOS/Z34RCP11/rcpdir.lib new file mode 100644 index 00000000..76c08bc3 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpdir.lib @@ -0,0 +1,137 @@ + page + +; Library: RCPDIR for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: August 6, 1989 +; Changes: Now allows "DIR [dir:].aft" as well as "DIR [dir:]*.aft" +; to show all files of a given file extentsion, +; e.g., "d .?80" gives all .Z80 and .180 files. +; +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: DIR +; Function: Display a directory of the files on disk +; Syntax: DIR [dir:afn] Displays the DIR files +; DIR [dir:afn] S Displays the SYS files +; DIR [dir:afn] A Display both DIR and SYS files +; +; If slashchk is true: +; +; DIR [dir:]/S Equivalent to DIR [dir:]*.* S +; DIR [dir:]/A Equivalent to DIR [dir:]*.* A + +dir: + call retsave ; Save return address and set stack + +; See if FCB should be made wild (all '?') + + ld hl,fcb1+1 ; Point to file name in FCP + ld a,(hl) ; Get first character of filename + + if slashchk ; Allow "DIR /S" and "DIR /A" formats + cp '/' ; If name does not start with '/' + jr nz,dir01 ; ..branch and process normally + inc hl ; Point to second character + ld a,(hl) ; Get option character after slash + ld (fcb2+1),a ; ..and put it into second FCB + dec hl ; Back to first character + ld a,' ' ; Simulate empty FCB + endif ;slashchk + +dir01: + cp ' ' ; See if no file spec given + jr nz,dir02 ; Spec given + + ld b,8 ; Wildcard name + ld a,(fcb1+9) + cp ' ' ; Wildcard type? + jr nz,dir01a ; No + ld b,11 ; Yes. Fill name and type. +dir01a: ld a,'?' ; Get ready to fill with '?' + call fillp ; ..carry out fill +dir02: + if nosys ; Suppress-SYS-file-if-no-wheel option + call getwhl ; Get wheel status + jr z,dirnly ; If wheel off, ignore options + endif + + ld a,(fcb2+1) ; Get first char of 2nd file name + ld b,1 ; Set for both dir and sys files + cp allflag ; SYS and DIR flag specifier? + jr z,dirpr ; Got system specifier + dec b ; B=0 for sys files only + cp sysflag ; SYS only? + jr z,dirpr + +dirnly: ld b,80h ; Must be dir-only selection + +; DIRECTORY PRINT ROUTINE +; On entry, B reg is set as follows: +; 0 for only system files, 80h for only dir files, 1 for both +; +dirpr: + ld a,b ; Get systst flag + call getdir ; Load and sort directory + jp z,prfnf ; Print no file message + if wide + ld e,5 + else + ld e,4 ; Count down to 0 + endif ; wide +; +; ENTRY PRINT LOOP +; On entry, HL pts to files selected (terminated by 0) +; and E is entry counter +; +dir3: + ld a,(hl) ; Check for done + or a + if dirsp and spaceon + jp z,spaexit ; Show space when done + else + jp z,exit ; Exit if done + endif ; Dirsp and spaceon + ld a,e ; Get entry counter + or a ; Output CRLF if 4 or 5 entries printed in line + jr nz,dir3a ; Continue + call crlf ; New line + if wide + ld e,5 + else + ld e,4 ; Reset entry count + endif ; wide + + ld a,e ; Get entry count +dir3a: + if wide + cp 5 + else + cp 4 ; First entry? + endif ; wide + + jr z,dir4 + call print +; + if wide +; + db ' ' ; 2 spaces + db ' '+80h ; Then 1 more space +; + else +; + db ' ' ; Space + db fence+80h ; Then fence char +; + endif ; Wide +; +dir4: + call prfn ; Print file name + call break ; Check for abort + dec e ; Decrement entry counter + jr dir3 + +; End RCPDIR.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpecho.lib b/Source/BPBIOS/Z34RCP11/rcpecho.lib new file mode 100644 index 00000000..ffe56183 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpecho.lib @@ -0,0 +1,162 @@ + page + +; Library: RCPECHO for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: ECHO +; Function: Echo text to console or printer + +echo: + xor a ; Lower case/printer off flag setting + ld (crtfl),a ; Printer off by default + + if upcase ; If upper case default + dec a + endif ;upcase + + ld (casefl),a ; Store flag in code below + ld hl,tbuff+1 ; Point to first character + call getchar ; Get first character (should be blank) + ; If none, exit from routine + +; Loop to echo chars + +echo2: call getchar + + if echolst + cp ff ; Form feed? + jr z,echo3 + endif ;echolst + + cp '^' + jr nz,echo2a ; Not control character prefix + call getchar ; Get next character + and 1fh ; Convert to control character + jr echo2e ; Echo it +echo2a: + cp cmdchar ; Case shift prefix? + jr nz,echo2e ; No, normal echo + call getchar ; Get next character + + if echolst + cp prtchar ; Turn printer on? + jr z,echo2b ; Store non-zero in crt flag + cp crtchar ; Turn printer off? + jr nz,echo2c ; No, test for shift characters + xor a ; Yes, clear crt flag +echo2b: ld (crtfl),a + jr echo2 ; On to next character +echo2c: + endif ; echolst + + cp ucasechar ; Up-shift character? + jr z,echo2d ; Store non-zero value in case flag + cp lcasechar ; Lower-case character? + jr nz,echo2e ; No, echo the character as is + xor a ; Else, clear case flag +echo2d: ld (casefl),a + jr echo2 ; On to next character +echo2e: + call echout ; Send char + jr echo2 + +; Form feed - send new line followed by form feed if printer output + + if echolst +echo3: + ld a,(crtfl) ; Check for printer output + or a ; Non-zero? + jr z,echoff ; No, send form feed normally + call echonl ; Send new line + ld a,ff ; Send form feed + jr echout + +; Send form feed char to console + +echoff: + ld a,ff ; Get char + jr echo2e + endif ;echolst + +; End of print loop - check for printer termination + +echo4: + if not echolst + ret + + else + ld a,(crtfl) ; Get list mode flag + or a + ret z ; Done if no printer output + +; Output a new line + +echonl: + ld a,cr ; Output new line on printer + call echout + ld a,lf ; Fall thru to echout + endif ; not echolst + +; Output char to printer or console + +echout: + ld c,a ; Char in c + cp 'A' ; If less than 'A' + jr c,echouta ; Leave as is + cp 'Z'+1 ; If greater than 'Z' + jr nc,echouta ; Leave as is + add 20h ; Else convert to lower case +echouta: + ld d,a ; Save lower case version in d +casefl equ $+1 ; Pointer for in-the-code modification + ld a,0 + or a ; Upper case? + jr nz,echoutb ; If upper case selected, go on as is + ld c,d ; Else substitute lower case version +echoutb: + + push hl ; Save hl + push bc ; Save bc + ld de,0ch-3 ; Offset for BIOS console output + + if echolst + +crtfl equ $+1 + ld a,0 + or a ; Printer? + jr z,echout1 ; No + inc de ; Offset for BIOS printer output + inc de + inc de + endif ;echolst + +; Output char in C with BIOS offset in DE + +echout1: + call biout ; Bios output + pop bc ; Restore bc,hl + pop hl + ret + +; Get a character from the command tail buffer + +getchar: + ld a,(hl) ; Get character + inc hl ; Point to next one + or a ; Check for end of string + ret nz ; If not end, return + pop hl ; Else, clean up stack + jr echo4 ; And exit from routine + +; Output char in C to BIOS with offset in DE + +biout: + ld hl,(wboot+1) ; Get address of warm boot + add hl,de ; Pt to routine + jp (hl) ; Jump to it + +; End RCPECHO.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpera.lib b/Source/BPBIOS/Z34RCP11/rcpera.lib new file mode 100644 index 00000000..776becb8 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpera.lib @@ -0,0 +1,76 @@ + page + +; Library: RCPERA for Z34RCP +; Author: Carson Wilson +; Version: 1.2 +; Date: Sept. 15, 1989 +; Changes: Chains to error handler with flag set to invoke transient ERA +; if a read only file is encountered. Propose error code +; 17 decimal for "file read only" error. +; +; Version: 1.1 +; Date: August 12, 1989 +; Changes: Now responds dynamically to QUIET flag, eliminating "noise". +; NOTE: if QUIET is active, using the inspect option or trying +; to erase R/O files will give meaningless messages. Use +; the PROT command to set R/O files to R/W first in order to +; erase them quietly. +; +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: ERA +; Function: Erase files +; Forms: +; ERA Erase Specified files and print their names +; ERA o Erase Specified files and print their names, but ask +; for verification before Erase is done + +era: + call retsave + ld a,(fcb2+1) ; Get eraflg if it's there + ld (eraflg),a ; Save it as a flag + ld a,1 ; Dir files only + call getdir ; Load directory of files + jp z,prfnf ; Abort if no files +; +; Main erase loop +; +era1: call break ; See if user wants to stop + call qplug ; Turn of output if quiet + push hl ; Save ptr to file + call prfn ; Print its name + ld (nxtfile),hl ; Save ptr to next file + pop hl ; Get ptr to this file + call unplug ; Turn output on + call rotest ; Test file pted to by hl for r/o + ld a,17 ; Proposed file R/O error code + ld b,00010000b ; EH flag to invoke transient + jp nz,errex1 ; Chain to transient if R/O +eraflg equ $+1 ; Address of flag + ld a,0 ; 2nd byte is flag + cp ' ' ; Is it an inspect option? + jr z,era2 ; Skip prompt if it is not + call eraq ; Erase? + jr nz,era3 ; Skip if not +era2: ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov + call initfcb1 ; Init fcb + ld c,19 ; Delete file + call bdos +era3: ld hl,(nxtfile) ; Hl pts to next file + ld a,(hl) ; Get char + or a ; Done? + if erasp and spaceon + jp z,spaexit + else + jp z,exit + endif ; Erasp and spaceon + call crlf ; New line + jr era1 + +; End RCPERA.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcph.lib b/Source/BPBIOS/Z34RCP11/rcph.lib new file mode 100644 index 00000000..34cae928 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcph.lib @@ -0,0 +1,119 @@ + page + +; Library: RCPH for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: HELP +; Function: This command displays a list of all resident commands that +; are supported, including those in the CPR (command processor), +; RCP, and FCP. +; +; Syntax: H + +clist: + +; Print the FCP-resident command names + + if listfcp + call print ; Print header for FCP + db lf + db 'FC','P'+80h + ld hl,(fcp) ; Get FCP address dynamically from ENV + ld a,h ; See if still there + or l + jr z,nofcp ; FCP has been removed + ld bc,5 ; Calculate address of FCP command table + add hl,bc + call cmdlist ; Display list of commands +nofcp: + endif ;listfcp + +; Print the CPR-resident command names + + if listcpr + call print ; Print "CPR" + db cr,lf ; Need CR if no FCP + db 'CP','R'+80h + ld hl,(ccp) ; Get CCP address from ENV + ld bc,offcmd ; Point to command table in CPR + add hl,bc + call cmdlist ; Display the list of commands + endif ;listcpr + +; Print the RCP-resident command names + + call crlf ; Skip a line + ld hl,rcpname ; Print RCP name + call printhl + ld hl,RCPbegin+5 ; Point to RCP command table + ; Fall through to CMDLIST + +;---------------------------------------- + +; Subroutine to display list of commands in a command table (code above +; falls through to this routine -- do not move it). The commands are +; displayed 5 per line with 8 character spaces allowed for each command +; (subject to equates below). + +cmdlist: + call crlf ; Start with new line + ld e,(hl) ; Get size of each command name into DE + ld d,0 + inc hl ; Point to name of first command + ld c,cmdsline ; Set names-per-line value +cmdlist1: + ld a,(hl) ; Get first character of the command name + or a ; See if it is null + jr nz,cmdlist1a ; If not, continue + ld a,cmdsline ; See if we are already on a new line + cp c + call nz,crlf ; If not, skip a line + ret + +cmdlist1a: + if noshow ; Option to suppress wheel-limited cmds + rla ; Shift high bit of name into carry bit + jr nc,cmdlist2 ; If not restricted, go on + call getwhl ; Otherwise, check wheel byte + or a + jr nz,cmdlist2 ; If wheel set, continue as usual + add hl,de ; Otherwise skip this command + jr cmdlist5 + endif + +; Print leading spaces between names + +cmdlist2: + ld a,cmdspace ; Spacing between command names + sub e ; Less length of each command name + ld b,a +cmdlist3: + call spac + djnz cmdlist3 + +; Print name of command + + ld b,e ; Length of each name into B +cmdlist4: + ld a,(hl) ; Get command name character + call conout + inc hl ; Point to next + djnz cmdlist4 + + dec c ; Decrement count of names on this line + jr nz,cmdlist5 ; Branch if room for more names + call crlf ; Otherwise, end this line and + ld c,cmdsline ; ..reset count for another line of commands + +; Skip to next command name + +cmdlist5: + inc hl ; Skip jump vector + inc hl + jr cmdlist1 ; Back to process next name + +; End RCPH.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpid.lib b/Source/BPBIOS/Z34RCP11/rcpid.lib new file mode 100644 index 00000000..dfbacaf2 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpid.lib @@ -0,0 +1,64 @@ + page + +; Library: RCPID for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: September 29, 1989 +; Changes: ID appended with 'C' if CLED is present +; +; Author: Carson Wilson +; Version: 1.0 +; Date: September 14, 1988 +; +; Function: Build the name of the RCP and append it at the end of the +; file at label RCPID. This serves two purposes: first it +; allows the 'H' command to describe which RCP is active, +; second, the string identifies the actual end of the RCP +; in memory. +; +; ------------------------------------------------------------------------ + +; Macros to build RCP ID for Help command + +; Under SLR and compatible assemblers, the RCP name reflects the +; RCP size, e.g., "RCP-21F" means the RCP occupies 21 records. + + if SLR +rcpid macro +rcplen defl RCPend - RCPbegin +fulrecs equ rcplen / 128 ; Full records +lastr equ [rcplen mod 128 + 127]/128 ; Last record, if any +ttlrecs equ fulrecs + lastr + + db 'RCP-' + db ttlrecs / 10 + '0' ; Tens of records + db ttlrecs mod 10 + '0' ; Ones + db rcptype ; 'F', 'H', etc. from RCP.LIB + if cledon + db 'C' ; Distinguish CLED versions + endif + db 0 ; ID string terminator + endm + + else ; Non-SLR +rcpid macro + db 'RCP-' + db rcptype + db 0 + endm + endif ; SLR + +; ----------------------------------------------------------------------- + +; Name of RCP + +; This block allows the 'H' command and/or the SHOW utility to display a name +; and version number for this RCP as well as the commands that are supported. +; It also generates a unique string marking the end of the RCP module. + +rcpname: + rcpid + +; End of RCPID.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpiom.lib b/Source/BPBIOS/Z34RCP11/rcpiom.lib new file mode 100644 index 00000000..d85e553d --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpiom.lib @@ -0,0 +1,296 @@ + page + +; Library: RCPIOM for Z34RCP +; Author: Carson Wilson +; Version: 1.1 +; Date: August 12, 1989 +; Changes: POKE and PORT now respond dynamically to QUIET flag, +; eliminating "noise." + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Commands: PEEK, POKE, and PORT + +; ------------------------------------------------------------------ +; +; Command: PEEK +; Function: Display memory contents +; +; Form: +; PEEK startadr 128 bytes displayed +; PEEK startadr endadr Range of bytes displayed + + if peekon +peek: + call retsave + ld hl,tbuff+1 ; Find first number +nxtpeek equ $+1 ; Pointer for in-the-code modification + ld de,100h ; Default peek address if none + call sksp ; Skip to first token (if any) + call nz,hexnum ; Get start address if any + push de ; Save starting address + ld bc,peeklen ; Compute default ending address + ex de,hl + add hl,bc + + if peekchk ; Check for overflow + jr nc,peek0 ; If no overflow past FFFF, go on + ld hl,0ffffh ; Else use FFFF as ending address +peek0: + endif ;peekchk + + ex de,hl ; End address in DE + call sksp ; Skip to next token (if any) + call nz,hexnum ; Get 2nd number in DE (else default) +peek1: pop hl ; HL is start address, DE is end address + + if peekhdr + push hl ; Save starting address again + ld b,8 ; Output leading spaces +peek0a: call spac + djnz peek0a + ld b,16 ; Display 16 column headers +peek0b: ld a,l ; Get low byte of address + and 0fh ; Display low hex digit + call pashc + inc hl + djnz peek0b +; +; Display header for ASCII area +; + call print + db ' ',' '+80H ; Space over to ASCII area + pop hl ; Get address + push hl + ld b,16 ; Display 16 chars. ASCII header +peek0b1:ld a,l ; Get byte + and 0fh ; Mask + call pah ; Print ASCII char. + inc hl ; Next byte + djnz peek0b1 + + if peekbdr + call crlf + ld b,8 +peek0c: call spac ; Print leading spaces + djnz peek0c + ld b,16 +peek0d: call print + db ' -','-'+80h + djnz peek0d + +; Print border at ASCII area + + call print + db ' ',' '+80h ; Space to ASCII border + ld b,16 ; 16 dashes +peek0e: call print + db '-'+80h + djnz peek0e + endif ;peekbdr + + pop hl ; Restore starting address + endif ;peekhdr + + ld c,0ffh ; Use C as continue flag + call peek2 ; Do peek + ld (nxtpeek),hl ; Set continued peek address + jp exit +peek2: + ld a,c ; Check continuation flag + or a + ret z + +; Print line header + +peek2a: call crlf ; New line + ld a,h ; Print address + call pashc + ld a,l + call pahc + call dash ; Print leader + ld b,16 ; 16 bytes to display + push hl ; Save start address + +; Print hex values for 16 bytes + +peek3: ld a,(hl) ; Get next byte + call pashc ; Print with leading space + +; Check for last address. If C is already 0, leave it that way. +; Otherwise check for end address and if so set C to zero. + + ld a,c ; See if continue flag already cleared + or a + jr z,peek3a ; If so, skip test + ld a,h + sub a,d ; See if h = d + ld c,a + ld a,l + sub a,e ; See if l = e + or c ; Combine two tests + ld c,a +peek3a: inc hl ; Pt to next + djnz peek3 + +; Print ASCII equivalents for 16 bytes + + pop hl ; Pt to first address again + ld b,16 ; 16 bytes + call print ; Space and fence + db ' ' + db fence+80h + push bc ; Save flag in c +peek4: ld a,(hl) ; Get next byte + ld c,'.' ; Assume dot + and 7fh ; Mask it + cp ' ' ; Dot if less than space + jr c,peek5 + cp 7fh ; Don't print del + jr z,peek5 + ld c,a ; Char in c +peek5: ld a,c ; Get char + call conout ; Send it + inc hl ; Pt to next + djnz peek4 + call print ; Closing fence + db fence+80h + pop bc ; Get flag in c back + call break ; Allow abort + jr peek2 + endif ; Peekon + +; PAHC - Print A as 2 hex chars +; PASHC - With leading space + + if peekon or pokeon or porton +pashc: + push af ; Save A + call spac + pop af +pahc: push bc ; Save bc + ld c,a ; Byte in c + rrca ; Exchange nybbles + rrca + rrca + rrca + call pah ; Print hex char + ld a,c ; Get low + pop bc ; Restore bc and fall thru to pah +pah: and 0fh ; Mask + add '0' ; Convert to ascii + cp '9'+1 ; Letter? + jr c,pah1 + add 7 ; Adjust to letter +pah1: jp conout + endif ; Peekon or pokeon or porton + +; -------------------------------------------------------------------- +; +; Command: POKE +; Function: Place Values into Memory +; +; Form: +; POKE startadr val1 val2 ... +; + if pokeon +poke: + call retsave + ld hl,tbuff+1 ; Pt to first char + call sksp ; Skip to non-blank + jp z,numerr ; Numerical error + call hexnum ; Convert to number + call qplug ; Shut off output if quiet + call print + db ' Pok','e'+80h + call adrat ; Print at message (quiet sensitive) + call unplug ; Turn on output + +; Loop for storing hex values sequentially via POKE + +poke1: push de ; Save address + call sksp ; Skip to non-blank + jp z,exit ; Done + cp '"' ; Quoted text? + jr z,poke2 + call hexnum ; Get number + ld a,e ; Get low + pop de ; Get address + ld (de),a ; Store number + inc de ; Pt to next + jr poke1 + +; Store ASCII chars. + +poke2: pop de ; Get next address + inc hl ; Pt to next char +poke3: ld a,(hl) ; Get next char + or a ; Done? + jp z,exit + ld (de),a ; Put char + inc hl ; Pt to next + inc de + jr poke3 + + endif ; Pokeon + +; ------------------------------------------------------------------- +; +; Command: PORT +; Function: Display or Set I/O Port Data +; +; Forms: +; PORT addr - Read port and display value +; PORT addr value - Output value to port +; + if porton +port: + call retsave + ld hl,tbuff+1 ; Find first number + call sksp ; Skip to first command-line token + jp z,numerr ; Numerical error + call hexnum ; Get start address into de + push hl ; Save pointer to command tail + ld hl,portadl ; Modify code + ld (hl),e ; Move specified port addr into place + dec hl ; Point to opcode position + ld (hl),0dbh ; Poke 'in' opcode + dec hl + ld (hl),d ; Save MSB for port address + inc hl + ex (sp),hl ; Get tail pointer back while saving this one + call qplug ; Shut off output if quiet + call print ; Print header + db ' Por','t'+80h + ld a,e + call pashc ; Print port address + call sksp ; Skip to possible second value + jr z,portin ; Proceed with port input + call hexnum ; Get 2nd number in de + ex (sp),hl ; Get pointer to opcode back + ld (hl),0d3h ; Poke 'out' opcode + call print + db ': OU','T'+80h + ld a,e ; Get value to output + jr paddr +portin: + call print + db ': I','N'+80h + xor a ; Make sure high port address = 0 (for hd64180) +portadh equ $+1 +paddr: ld b,0 ; ..for both in and out instructions +opcode: + db 0 ; Opcode for in or out inserted by code above +portadl: + db 0 ; Port address inserted by code above + call pashc + call unplug ; Turn on output + pop hl ; Clean up stack + jp exit + + endif ; Porton + +; End RCPIOM.Z80 + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcplt.lib b/Source/BPBIOS/Z34RCP11/rcplt.lib new file mode 100644 index 00000000..98d6b0ba --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcplt.lib @@ -0,0 +1,256 @@ + page + +; Library: RCPLT for Z34RCP +; Author: Carson Wilson +; Version: 1.1 +; Date: August 26, 1989 +; Changes: Some WordStar characters caused garbage to appear on the +; screen. Now filters control characters other than CR, +; TAB, and LF. Thanks to Gene Pizzetta for this suggestion. +; +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Commands: LIST and TYPE + +; ---------------------------------------------------------------- +; +; Command: LIST +; Function: Print out specified file on the LST: Device +; Forms: +; LIST Do form feed +; LIST Print file(s) (NO Paging) +; Notes: +; The flags which apply to TYPE do not take effect with LIST +; The tab expansion code is required for LST: output. + + if liston +list: + ld a,(fcb1+1) ; Get filename or ' ' from command + ld (prflg),a ; List flag (A can't be 0) + cp ' ' ; Null command? + jp z,lstff ; Yes, do form feed and return + jr type0 ; No, send file to LST: + endif ;liston + +; -------------------------------------------------------------------- +; +; Command: TYPE +; Function: Print out specified file on the CON: Device +; Forms: +; TYPE Print file +; TYPE P Print file with paging flag +; Notes: +; The flag PGDFLG defines the letter which toggles the paging +; facility (P in the forms section above) +; The flag PGDFLT determines if TYPE is to page by default +; (PGDFLT=TRUE if TYPE pages by default); combined with +; PGDFLG, the following events occur -- +; If PGDFLT = TRUE, PGDFLG turns OFF paging +; If PGDFLT = FALSE, PGDFLG turns ON paging + +type: + if liston + xor a ; Turn off printer flag + ld (prflg),a ; Set flag + endif ; Liston + +; Entry point for list function (LIST) + +type0: call retsave ; Save return address + ld a,(fcb2+1) ; Get page flag from command + ld (pgflg),a ; Store it + ld a,1 ; Select dir files + call getdir ; Allow ambiguous files (HL points to buffer) + jp z,noflerr ; EH no files error + ld a,(lins) ; Set line count + ld (pagcnt),a + jr typex1 + +; Entry point for successive files + +typex0: pop hl ; Balance stack for skip + pop hl ; ..to next file command (^X) +typex: ld hl,(nxtfile) ; Get ptr to next file + ld a,(hl) ; Any files? + or a + jp z,exit + + if liston + ld a,(prflg) ; Check for lst: output + or a ; 0=type + jr z,typex1 + ld a,cr ; Bol on printer + call lcout + call lstff ; Form feed the printer +; fall thru + endif ; Liston + + ; Entry point for 1st file +typex1: ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov + ld (nxtfile),hl ; Set ptr to next file + call initfcb1 ; Init fcb1 + ld c,15 ; Open file + call bdos + inc a ; Set error flag + jp z,noflerr ; EH no files error + ld a,cr ; New line + call lcout + ld a,lf + call lcout + ld bc,080h ; Set char position and tab count + ; (b=0=tab, c=080h=char position) + +; Main loop for loading next block + +type2: ld a,c ; Get char count + cp 80h + jr c,type3 + call break + push bc ; Read next block + ld de,fcb1 ; Pt to fcb + ld c,20 ; Read record + call bdos + or a ; Set flags + pop bc + jr nz,typex ; End of file? + ld c,0 ; Set char count + ld hl,tbuff ; Pt to first char + +; Main loop for printing chars in tbuff + +type3: ld a,(hl) ; Get next char + and 7fh ; Mask out msb + cp 1ah ; End of file (^z)? + jr z,typex ; Next file if so + +; Output char to CON: or LST: device with tabulation + + cp cr ; Reset tab count? + jr z,type4 + cp lf ; Reset tab count? + jr z,type4 + cp tab ; Tab? + jr z,type5 + cp ' ' ; Skip other ctls. + jr c,type6 + +; Output char and increment char count + + call lcout ; Output char + inc b ; Increment tab count + jr type6 + +; Output or and reset tab count + +type4: call lcout ; Output or + ld b,0 ; Reset tab counter + jr type6 + +; Tabulate + +type5: ld a,' ' ; + call lcout + inc b ; Incr pos count + ld a,b + and 7 + jr nz,type5 + +; Continue processing + +type6: + inc c ; Increment char count + inc hl ; Pt to next char + jr type2 + +; Send a formfeed to LST:. Assumes PRFLG <> 0. + +lstff: + ld a,ff ; formfeed +; fall thru + +; Send output to LST: or CON:, as per the flag +; Return with Z if abort + +lcout: push hl ; Save regs + push bc + ld e,a ; Char in e + ld c,2 ; Output to con: + + if liston +prflg equ $+1 ; Pointer for in-the-code modification + ld a,0 ; 2nd byte is the print flag + or a ; 0=type + jr z,lc1 + ld c,5 ; Output to lst: + endif ; Liston + +lc1: push de ; Save char + call bdos ; Output char in e + pop de ; Get char + ld a,e + cp lf ; New line? + jr nz,lc2 ; No, return + call break ; Check for abort + jp z,typex0 ; Skip if ^X + + if liston + ld a,(prflg) ; Output to lst:? + or a ; Nz = yes + jr nz,lc2 + endif ; Liston + +; New line, so check for paging + + ld hl,pagcnt + dec (hl) + jr nz,lc2 ; Jump if not end of page + ld a,(lins) + ld (hl),a ; Reset counter +pgflg equ $+1 ; Pointer to in-the-code buffer + ld a,0 ; 2nd byte is the paging flag + cp pgdflg ; Page default override option wanted? + + if pgdflt ; If paging is default + jr z,lc2 ; Pgdflg means no paging + else + jr nz,lc2 ; Pgdflg means page + endif ; Pgdflt + + push hl ; Save hl + call print + db cr,lf,' Typing',' '+80h + ld hl,fcb1+1 ; Print file name + call prfn + call dash ; Print dash + call conin ; Get input + pop hl ; Restore hl + call break1 ; Set Z flag or abort + push af ; Save results + + if typecls and clson + call cls ; Clear between screens + else + call crlf + endif + + pop af ; Get results + jp z,typex0 ; Control-X, so skip to next file + cp ctrlz ; If Control-Z, + jr nz,lc2 + ld a,pgdflg ; Switch to non-default + ld (pgflg),a ; ..paging mode +lc2: pop bc ; Restore regs + pop hl + ret + +; Storage for line counter + +pagcnt: + ds 1 + +; End RCPLT.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpprot.lib b/Source/BPBIOS/Z34RCP11/rcpprot.lib new file mode 100644 index 00000000..4e8a5479 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpprot.lib @@ -0,0 +1,130 @@ + page + +; Library: RCPPROT for Z34RCP +; Author: Carson Wilson +; Version: 1.1 +; Date: August 12, 1989 +; Changes: Now responds dynamically to QUIET flag, eliminating "noise." + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: PROT +; Function: To set the attributes of a file (R/O, SYS, and ARC) +; Form: PROT afn RSAI +; Comments: If R, S, or A are omitted, the file is made R/W, DIR, or +; modified, respectively. R, S, A, and I may be in any order. +; If I is present, Inspection is enabled. + +att: + call retsave + call dirchek ; Test bad directory + xor a ; Set no inspect + ld (inspect),a + ld hl,0 ; Set r/o and sys attributes off + ld c,0 ; Set Arc attribute off + ld de,fcb2+1 ; Pt to attributes + ld b,4 ; 4 chars max +att1: + ld a,(de) ; Get char + inc de ; Pt to next + cp 'I' ; Inspect? + jr z,atti + cp 'R' ; Set r/o? + jr z,attr + cp 'S' ; Set sys? + jr z,atts + cp 'A' + jr z,atta +att2: + djnz att1 + jr att3 +atti: + ld (inspect),a ; Set flag + jr att2 +attr: + ld h,a ; Save R/O flag + jr att2 +atts: + ld l,a ; Save SYS flag + jr att2 +atta: + ld c,a ; Save ARC + jr att2 +att3: + ld (fatt2),hl ; Save file attributes + ld a,c + ld (fatt1),a ; Save Arc attribute + ld a,1 ; Select dir and sys files + call getdir ; Load directory + jp z,noflerr ; Tell error handler no file + jr att5 +att4: + ld hl,(nxtfile) ; Pt to next file + ld a,(hl) ; End of list? + or a + jp z,exit + call crlf ; New line +att5: call break ; Check for possible abort + call qplug ; Turn off output if quiet + push hl ; Save ptr to current file + call prfn ; Print its name + ld (nxtfile),hl ; Save ptr to next file + call print + db ' Set to R','/'+80h + ld hl,(fatt2) ; Get attributes + ld c,'W' ; Assume r/w + ld a,h ; Get r/o bit + or a + jr z,att6 + ld c,'O' ; Set r/o +att6: ld a,c ; Get char + call conout + ld a,l ; Get sys flag + or a ; Set flag + jr z,att7 + call print + db ', SY','S'+80h +att7: ld a,(fatt1) + or a + jr z,att7a + call print + db ', AR','C'+80h +att7a: call unplug ; Turn output on +inspect equ $+1 ; Ptr for in-the-code modification + ld a,0 ; Get inspect flag + or a ; Z=no + pop hl ; Get ptr to current file + jr z,att8 + call eraq1 ; Ask for y/n + jr nz,att4 ; Advance to next file if not y +att8: ld de,fcb1+1 ; Copy into fcb1 + ld b,11 ; 11 bytes + call blkmov + ex de,hl + dec hl ; Pt to archive byte +fatt1 equ $+1 + ld a,0 + call attset + dec hl ; Pt to sys byte +fatt2 equ $+1 ; Ptr for in-the-code modification + ld de,0 ; Get attributes + ld a,e ; Get sys flag + call attset ; Set attribute correctly + dec hl ; Pt to r/o byte + ld a,d ; Get r/o flag + call attset + ld de,fcb1 ; Pt to fcb + ld c,30 ; Set attributes + call bdos + jp att4 +attset: + res 7,(hl) ; Clear attribute + or a + ret z ; 0=clear attribute + set 7,(hl) ; Set attribute + ret + +; End RCPPROT.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpquiet.lib b/Source/BPBIOS/Z34RCP11/rcpquiet.lib new file mode 100644 index 00000000..9269d241 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpquiet.lib @@ -0,0 +1,49 @@ + page + +; Library: RCPQUIET for Z34RCP +; Author: Carson Wilson +; Version: 1.1 +; Date: August 6, 1989 +; Changes: Now "Q R[eset]" and "Q S[et]" just reset and set quiet status +; without showing it, and Q alone (or with any other character, +; e.g., "Q ?") always just shows status. +; Forms: +; Q - Display quiet flag (always) +; Q s - Set quiet flag ON +; Q r - Set quiet flag OFF +; +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: Q +; Function: Set the Quiet flag on or off +; Comments: If QQUIET equate is true, then RCP does not report +; quiet status with the Q command. +; Forms: +; Q - Display quiet flag (if QQUIET false) +; Q s - Set quiet flag ON +; Q r - Set quiet flag OFF + +quset: + ld a,(fcb1+1) ; Get first char + ld b,1 ; Prepare to turn on + cp 'S' ; S-et quiet (ON) + jr z,quset1 + ld b,0 ; Prepare to turn off + cp 'R' ; R-eset quiet (OFF) + jr nz,qmsg ; Neither S nor R, so display +quset1: + ld a,b + ld (quiet),a + ret + +qmsg: +; Print Quiet Flag Message + + ld a,(quiet) + jp tella ; Say " On" or " Off" and return + +; End RCPQUIET.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpr.lib b/Source/BPBIOS/Z34RCP11/rcpr.lib new file mode 100644 index 00000000..e29a4f37 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpr.lib @@ -0,0 +1,108 @@ + page + +; Library: RCPR for Z34RCP +; Author: Carson Wilson +; Version: 1.5 +; Date: August 30, 1989 +; Changes: Minor bug fix as suggested by Howard Goldstein. +; +; Version: 1.4 +; Date: August 26, 1989 +; Changes: Now performs reset 37 for ALL drives under CP/M 2.2 or ZRDOS +; to ensure that fast fixed disks are reset under ZRDOS, then +; exits with reset 13 to compensate for bugs in ZRDOS/CP/M 2.2 +; reset 37. Still resets individual drives selectively under +; CP/M Plus and ZS/ZDDOS. + +; Version: 1.3 +; Date: August 11, 1989 +; Changes: Now responds dynamically to QUIET flag, eliminating "noise." +; Now performs reset 37 in ALL cases, reset 13 as well if not +; CP/M Plus or ZSDOS (per suggestion by Howard Goldstein). + +; Version: 1.2 +; Date: December 30, 1988 +; Changes: Now resets single drives under Z3PLUS. + +; Version: 1.1 +; Date: September 11, 1988 +; Changes: Fixed bug which failed to detect ZRDOS. ZRDOS' function +; 37, like CP/M's, is not reliable. + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: RESET +; Function: Reset the disk system +; Forms: R [d: or dir:] - ZSDOS or CP/M Plus +; R - CP/M 2.2 or ZRDOS +; Comments: ZRDOS does not require a disk system reset when disks are +; changed, but directory programs will not show the correct +; size if this is not done. It is also good practice. Since +; no warm boot is performed, the disk in drive A need not have +; the operating system on it. +; +; Under ZSDOS or CP/M Plus, individual drives may be reset, and +; if RESETSP is true, space remaining is also given. If +; the fast hard disk reset capability is enabled under ZSDOS, +; any "fast" fixed disks are also reset at this time. +; +; NOTE: It is necessary to reset a legal directory or DU when there are +; protected directories. + +reset: ld a,(quiet) + or a ; Skip message if quiet + jr nz,QReset + call print ; Report action + db ' Rese','t'+80h +QReset: call cpmver ; CP/M Plus? + jr nc,reset0 ; Yes + ld c,48 + call bdos ; ZRDOS or CP/M? + ld a,h + or a + jr nz,reset0 ; No, assume bug-free F37 + ld de,0ffffh ; Yes, reset ALL drives, both ways + ld c,37 + call bdos + ld c,13 + jp bdos ; Yes, do regular reset + +; Reset individual drive(s) + +reset0: call dirchek ; Abort with error if illegal drivespec + ld a,(fcb1) ; Use default drive? + or a + jr nz,reset1 ; No, use drive from FCB1 + ld a,(cdrv) ; Yes, get ZCPR 3.3 current drive byte + inc a ; Shift range to 1..16 +reset1: ld hl,1 ; Map drive "A:" +reset2: dec a ; Done yet? + jr z,reset3 ; Yes + add hl,hl ; No, shift vector to next drive + jr reset2 + +; Check for fixed disks + +reset3: push hl ; Save current or specified vector + ld c,39 + call bdos ; ZSDOS return fixed disks in HL + pop de ; Restore vector + ld a,d + or h ; Add any fixed disks + ld d,a + ld a,e + or l + ld e,a + ld c,37 ; Reset individual drive(s) + + if spaceon and resetsp + call bdos + jp crspace ; Show space remaining (QUIET sensitive) + else + jp bdos ; Do reset and return + endif + +; End RCPR.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpreg.lib b/Source/BPBIOS/Z34RCP11/rcpreg.lib new file mode 100644 index 00000000..d73eee05 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpreg.lib @@ -0,0 +1,165 @@ + page + +; Library: RCPREG for Z34RCP +; Version: 1.1 +; Date: August 11, 1989 +; Changes: Register Set, Decrement, and Increment commands now respond +; dynamically to QUIET flag, eliminating "noise." + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: REG +; Function: Manipulate Memory Registers +; +; Forms: +; REG D or REG <-- Display 10 Register Values +; REG Mreg <-- Decrement Register Value +; REG Preg <-- Increment Register Value +; REG Sreg value <-- Set Register Value +; +; Vers 2.1 Joe Wright +; +; REG reg <-- Display a single register value +; +; REG numbers now range from 0 to 31, although only the first ten are +; displayed with REG D. +; +; REG now treats the program error byte as register E. +; +register: + ld de,fcb1+2 ; Pt to first arg + ld a,(de) ; Get possible digit + call regptr ; Pt hl to potential register + dec de ; Point to command + ld a,(de) + cp 'S' ; Set? + jr z,rset + cp 'P' ; Plus? + jr z,rinc + cp 'M' ; Minus? + jr z,rdec + cp ' ' + jr z,rshow + cp 'D' + jr z,rshow + call regptr + jp regout + +; Increment register value +; HL pts to memory register on input + +rinc: inc (hl) ; Increment it + jr Qregout ; Print result + +; Decrement register value +; HL pts to memory register on input + +rdec: dec (hl) ; Decrement value + jr Qregout ; Print result + +; Show first ten registers and Program Error byte + +rshow: call rshow10 + ld hl,z3msg+6 + jp regout + +rshow10:xor a ; Select register 0 + ld b,a ; Counter set to 0 in b + call regp1 ; Hl pts to register 0 +rshow1: ld a,b ; Get counter value + cp 10 ; First ten registers + ret z ; Exit if done + push bc ; Save counter + push hl ; Save pointer + call regout ; Print register value + pop hl ; Get pointer + pop bc ; Get counter + inc b ; Increment counter + ld a,b ; Check for new line + and 3 + call z,crlf ; Newline after fourth display + inc hl ; Pt to next register + jr rshow1 + +; Set register value +; HL pts to register on input + +rset: + ld de,fcb2+1 ; Pt to value + call de2bin ; Eval string at de to binary in b + ld (hl),b ; Set value + +; Enter with HL pointing to the register. HL is maintained. +; +qregout:ld a,(quiet) + or a + ret nz +regout: call print + db ' Reg',' '+80h + ld de,z3msg+30h ; Register 0 + sbc hl,de ; Register number in hl + ld a,l + cp 32 ; A numbered register? + jr c,rego0 ; Yep + call print + db ' ','E'+80h + jr rego1 ; Report + +rego0: push hl + push de + ld b,0 ; Suppress zeros + call decdsp2 ; Report register number + pop de + pop hl +rego1: add hl,de ; Hl points to register again + call print + db ' =',' '+80h + ld l,(hl) + xor a + ld h,a + ld b,a ; Suppress leading zeros + jp decdsp3 ; Display value + +; Evaluate decimal string at DE to binary in B + +de2bin: ld b,0 ; Init value to zero +de2b: ld a,(de) ; Get this digit + inc de ; Pt to next + sub '0' ; Convert to binary + ret c ; A space, finished + cp 10 ; Range? + ret nc ; Not decimal, finished + ld c,a ; Digit in c + ld a,b ; Multiply old by 10 + add a,a ; *2 + add a,a ; *4 + add a,b ; *5 + add a,a ; *10 + add a,c ; Add in new digit + ld b,a ; Result in b + jr de2b ; Again + +; Set HL to point to memory register whose index is pted to by HL +; On input, A contains register char +; On output, HL = address of memory register (reg 0 assumed if error) + +regptr: ld hl,z3msg+6 ; The e register + cp 'E' + ret z + push de + call de2bin ; Get register number in b + pop de + ld a,b + cp 32 ; Range 0-31 + ld a,0 + jr nc,regp1 ; Out of range, use 0 + ld a,b ; Value in a +regp1: ld hl,z3msg+30h ; Pt to memory registers + add a,l ; Pt to proper register + ld l,a + ret ; No chance of crossing page boundary + +; End RCPREG.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpren.lib b/Source/BPBIOS/Z34RCP11/rcpren.lib new file mode 100644 index 00000000..6947bad2 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpren.lib @@ -0,0 +1,100 @@ + page + +; Library: RCPREN for Z34RCP +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: REN +; Function: To change the name of an existing file +; Forms: +; LEFTRIGHT false: +; REN = +; LEFTRIGHT true: +; REN +; LEFTRIGHT and TESTEQ both true: +; Either of the above forms may be used. + +ren: + call retsave + call dirchek ; Test bad dirspec + + if leftright + call fcbswap ; Exchange command line fcb's + endif +; +; STEP 1: See if old name is ambiguous +; + ld hl,fcb2+1 ; Can't be ambiguous + call ambchk1 +; +; STEP 2: Log into user area +; +; If dirspec given at old name, use it +; else use dirspec (or default) given at new name. + + ld hl,fcb1 ; Pt to new name + push hl + ld de,fcb2 ; Pt to old name + push de ; Save ptr + ld a,(de) ; Test if dirspec issued + or a ; ..at old name + jr z,ren1 ; No, use user at new name + ld (hl),a ; Stuff drive into new file + ld a,(fcb2+13) ; Yes, log to user area + call setusr ; ..of old name + jr ren2 +; +; Use dirspec at new name (none given at old name) +; +ren1: + ld a,(hl) ; Stuff drive of new name + ld (de),a ; ..into old name + call logusr ; Log to user at new name +ren2: +; +; STEP 3: See if old file is R/O +; + pop de ; Restore ptr to old FCB + push de ; Save it again + ld c,17 ; Look for old file + call bdos + inc a + jr z,rnxit + call getsbit ; Match found, get ptr to entry in tbuff + ex de,hl ; Hl pts to entry + inc hl ; Pt to fn + call rotest ; See if file is r/o + jr nz,rnxit1 ; Abort if so +; +; STEP 4: See if new file already exists +; EXTEST performs a number of checks: +; 1) Ambiguity +; 2) R/O +; 3) If file exists and not R/O, permission to delete +; + call extest + jr z,rnxit1 ; R/o or no permission +; +; STEP 5: Exchange file name fields for rename +; + pop de ; Pt to old + pop hl ; Pt to new + push hl ; Save ptr + ld b,12 ; 12 bytes + call iswap1 +; +; STEP 6: Rename the file +; + pop de ; Get ptr to FCB + ld c,23 ; Rename + call bdos + inc a ; Set zero flag if error +rnxit: + jp z,noflerr ; EH print no source file message +rnxit1: + jp exit + +; End RCPREN.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpsp.lib b/Source/BPBIOS/Z34RCP11/rcpsp.lib new file mode 100644 index 00000000..0fc5ecf6 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpsp.lib @@ -0,0 +1,163 @@ + page + +; Library: RCPSP for Z34RCP +; Author: Carson Wilson +; Version: 1.2 +; Date: August 11, 1989 +; Changes: CRSPACE does nothing if QUIET is true. +; +; Author: Carson Wilson +; Version: 1.1 +; Date: December 30, 1988 +; Changes: Calls CPMVER common routine. +; Sets DMA to TBUFF for CP/M Plus in case we chained to SP. + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Command: SP +; Function: Shows space remaining on designated drive +; Syntax: SP [DIR:|DU:] +; Comments: This code can be called by several other RCP commands so that +; they can show the space remaining on the disk after their +; operation. + +; Now works with CP/M Plus. + + if [erasp or cpsp or dirsp] +crspace: ; Used to call space after other subroutines + ld a,(quiet) + or a ; Skip if we're being quiet + ret nz + call crlf ; Start new line + jr space0 ; Skip directory check + endif ;[erasp or cpsp or dirsp] +space: + call dirchek ; Abort to EH on bad dirspec +space0: ld a,(fcb1) ; Determine requested drive + or a ; If drive explicitly selected + jr nz,space1 ; ..then skip + ld a,(cdrv) ; Get current drive from ZCPR 3.4 + inc a ; Shift to range 1..16 + +space1: + dec a ; Shift to range 0..15 + ld e,a ; Save in E for selecting disk below + add a,'A' ; Convert to letter and + ld (seldrv),a ; save in message string below + ld c,14 ; BDOS select disk function + call bdos ; Not needed if no drive selected, but smallest + ; ..possible code size this way. + +; Here we extract the following disk parameter information from the disk +; parameter block (DPB): +; BLKSHF: block shift factor (1 byte) +; BLKMAX: max number of blocks on disk (2 bytes) + + call cpmver ; What BDOS is running? + jr nc,isplus + ld c,31 ; BDOS get disk parameters function + call bdos + inc hl ; Advance to block shift factor byte + inc hl + ld a,(hl) ; Get value and + ld (blkshf),a ; ..save it in code below + inc hl ; Advance to max block number word + inc hl + inc hl + ld e,(hl) ; Get value into HL + inc hl + ld d,(hl) + inc de ; Add 1 for max number of blocks + +; Compute amount of free space left on disk + +dfree: + ld c,27 ; BDOS get allocation vector function + push de ; Save BLKMAX value + call bdos ; Get allocation vector into HL + ld b,h ; Copy allocation vector to BC + ld c,l + pop hl ; Restore BLKMAX value to HL + ld de,0 ; Inititialize count of free blocks + +; At this point we have +; BC = allocation vector address +; DE = free block count +; HL = number of blocks on disk + +free1: push bc ; Save allocation address + ld a,(bc) ; Get bit pattern of allocation byte + ld b,8 ; Set to process 8 blocks +free2: rla ; Rotate allocated block bit into carry flag + jr c,free3 ; If set (bit=1), block is allocated + inc de ; If not set, block is not allocated, so + ; ..increment free block count +free3: ld c,a ; Save remaining allocation bits in C + dec hl ; Count down number of blocks on disk + ld a,l ; See if we are down to zero + or h + jr z,free4 ; Branch if no more blocks to check + ld a,c ; Get back current allocation bit pattern + djnz free2 ; Loop through 8 bits + pop bc ; Get pointer to allocation vector + inc bc ; Point to next allocation byte + jr free1 ; Continue by processing next allocation byte + +free4: pop bc ; Clean up stack + ex de,hl ; Free block count to HL +blkshf equ $+1 ; Pointer for in-the-code modification + ld a,0 ; Get block shift factor + sub 3 ; Convert to log base 2 of K per block + jr z,free6 ; Done if single density (1k per block) + +; Convert for blocks of more than 1K each + +free5: add hl,hl + dec a + jr nz,free5 + +; At this point HL = amount of free space on disk in K + +; Display decimal value of HL + +free6: ld b,0 ; Initialize count of digits already printed + ld de,10000 ; Divisor in DE + call decdsp ; Print digit (or space if leading '0') + ld de,1000 + call decdsp + call decdsp3 ; Display hundreds, tens, and units + + call print + db 'k free on ' +seldrv: db 0 ; Modified above to contain drive letter + db ':'+80h + ret + +; CP/M Plus free space calculation + +isplus: ld de,tbuff ; We may have chained to SP + call setdma + ld a,(seldrv) ; Get drive letter + sub 'A' ; Convert to BDOS call value + ld e,a + ld c,2eh ; Get free space call + call bdos + +; Convert 3 byte count of records to K + + ld b,3 ; Total amount to shift +c3fre1: ld hl,tbuff+2 ; Point to buffer start + rr (hl) + dec hl + rr (hl) + dec hl + rr (hl) + djnz c3fre1 + ld hl,(tbuff) ; Get free mod 65536k + jr free6 + +; End RCPSP.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/rcpsubs.lib b/Source/BPBIOS/Z34RCP11/rcpsubs.lib new file mode 100644 index 00000000..3879e9a2 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/rcpsubs.lib @@ -0,0 +1,1057 @@ + page + +; Library: RCPSUBS for Z34RCP +; Author: Carson Wilson +; Version: 1.4 +; Date: October 4, 1989 +; Changes: Added modifications by Rob Friefeld for CLED. +; +; Version: 1.3 +; Date: Sept. 8, 1989 +; Changes: Added ERREX1 routine. RCP now sets bit 4 of the command +; status flag on ambiguous file name errors. Intelligent +; error handlers can interpret this bit and chain to +; more sophisticated transient programs of the same name, +; much the same as CP/M Plus. +; +; Version: 1.2 +; Date: August 12, 1989 +; Changes: Added QPLUG and UNPLUG routines for QUIET operation. + +; Author: Carson Wilson +; Version: 1.1 +; Date: December 30, 1988 +; Changes: Added CPMVER routine to detect CP/M Plus. +; Expanded ZSDOS datestamp buffer to full 128 bytes. +; Now gets CCP address from Z34CMN.LIB instead of calculating +; it from BIOS address, since NZCOM allows nonstandard length +; CCP segments (suggested by Howard Goldstein). + +; Author: Carson Wilson +; Version: 1.0 +; Date: June 15, 1988 +; +; Subroutines for Z34RCP.Z80 + +; ---------------------------------------- + +; Routines to chain to Error Handler (EH) + +; 1. Error codes (from ZCPR34.LBR) + +; ZCPR34 uses the error byte at the beginning of the message buffer as a flag +; to show what kind of error occurred. Advanced error handlers will be able +; to help the user further by suggesting the possible cause of the error. + +ecbaddir equ 2 ; Bad directory specification -- logging of + ; ..user number beyond legal range, + ; ..nonexistent named directory +ecambig equ 8 ; Ambiguous file specification where not + ; ..allowed (SAVE, GET, REN) +ecbadnum equ 9 ; Bad numerical value -- not a number where + ; ..number expected, number out of range +ecnofile equ 10 ; File not found -- REN, TYPE, LIST could not + ; ..find a specified file +ecdiskfull equ 11 ; Disk directory or data area full + ; ..(DOS write error) +ectpafull equ 12 ; TPA overflow error +ecdupspec equ 16 ; Duplicate filespecs (COPY, RENAME) + +; 2. Error Routines + + if cpon or renon or lton or proton +NoFlErr: ; File missing + ld a,ecnofile ; File not found error + jr errexit ; Chain to error handler + endif ; cpon or renon or lton or proton + + if cpon +FulErr: ; Disk or directory full (BDOS write error) + ld a,ecdiskfull ; Disk or data area full + jr errexit ; Chain to error handler +DupErr: ; Duplicate file specs + ld a,ecdupspec ; Duplicate filespec error + jr errexit ; Chain to error handler + endif ; cpon +; +; Check for illegal directory specification under ZCPR 3.4. +; DirChek assumes that FCB's have not been altered since they were +; set by the CCP. Therefore DirChek is called before other BDOS calls. + + if cpon or lton or renon or diron or eraon or proton or reson or spaceon +DirChek: + ld a,(fcb1+15) ; Z34 sets these to non zero + ld hl,fcb2+15 ; ..if illegal dirspecs. found + or (hl) + ret z ; Return if OK + ld a,ecbaddir ; Bad dir. error code +; fall thru + endif +; +; Set error type, then set error, ECP, and external program bits of command +; status flag to tell CCP to go straight to EH. + +ErrExit: + ld b,0 +ErrEx1: ld ix,z3msg ; Point to message buffer + ld (ix+0),a ; First set error type in error byte + ld a,00001110b ; Tell CCP External, No ECP, Error, No shell + or b ; Add any specified bits + ld (ix+3),A ; Set bits in command status flag + jp exit ; Return to CCP + +; ------------------------------------------------------------- + +; Routine to get wheel byte - Returns wheel in A with flags set + +getwhl: + push hl + ld hl,(z3whl) ; Get wheel address from ENV + ld a,(hl) ; Read wheel byte + and a ; Set flags + pop hl + ret + +; ------------------------------ + + if systime ; Time in CLED prompt +; +; PMBCD - Print byte at (HL) to console as 1 or 2 BCD digits. +; +; Entry: A = 80h for leading zero's +; A = 0h for no leading zero's +; +pmbcd: + rld ; Get hi nibble (HL) to low nibble A + or a ; For HD64180 + call nz,decout ; Display if low or high of A not zero + rld ; Get low nibble (HL), from above +decout: + and 00001111b ; Mask high nibble + add a,'0' ; Convert to character + jr conout + endif ; systime + +; Display decimal digit routines + +; Display hundreds, tens, and units digits (assumes flag in B has been set) + + if regon or spaceon +decdsp3: + ld de,100 ; Display hundreds + call decdsp +decdsp2: + ld de,10 ; Display tens + call decdsp + ld a,l ; Get remaining units value +decdsp4: + add a,'0' ; Convert to character + jr conout ; Print it and return + +; --------------------------------- + +; Routine to print any single digit + +; Actually, this routine displays the value of HL divided by DE and leaves the +; remainder in HL. In computing the character to display, it assumes that the +; result of the division will be a decimal digit. If the result is zero, the +; value in the B register, which is the number of digits already printed, is +; checked. If it is zero, a space is printed instead of a leading '0'. If it +; is not zero, the '0' is printed. Whenever any digit (not a space) is +; printed, the value in B is incremented. + + +decdsp: + ld c,'0'-1 ; Initialize digit count + xor a ; Clear carry flag + +decdsp1: + inc c ; Pre-increment the digit + sbc hl,de ; Subtract DE from HL + jr nc,decdsp1 + + add hl,de ; Add back in to produce remainder + ld a,c ; Get decimal digit + cp '0' ; Check for leading 0 + jr nz,decdout ; If not 0, proceed to display it + ld a,b ; Digit printed already? + or a + jr z,spac ; Print leading space if not +decdout: + ld a,c ; Else print real digit + inc b ; Indicate digit printed + jr conout + endif ; regon or spaceon + +; ------------ + +; Print a dash + + if lton or peekon +dash: call print + db ' -',' '+80h + ret + endif ; Lton or peekon + +; ------------------------- + +; Shut off output in QUIET is set. Return Z if QUIET, NZ otherwise. +; Uses: AF + +qplug: + ld a,(quiet) + or a + ret z + ld a,0C9h ; "RET" +qplug1: ld (plug),a + ret + +; -------------------------- + +; Turn on output + +unplug: xor a + jr qplug1 + + +; ------------- + +; Print a space + +spac: ld a,' ' + +; fall thru + +; Console Output Routine + +conout: +plug: db 00h ; Goes to 0C9h to turn off output + putreg ; Save all registers except AF + push af ; Save AF, too + and 7fh ; Mask out MSB + ld e,a ; Transfer character to E + ld c,2 ; BDOS conout function number + call bdos + pop af + getreg ; Restore registers +note: ; Use this RET for NOTE command + ret + +; ------------------------ + +; String printing routines + +; Print string following call (terminated with null or character with the +; high bit set) + +print: + ex (sp),hl ; Get address + call printhl + ex (sp),hl ; Put address + ret + + if whlon or quieton +; +; Routine to say "On" if A is non-zero or "Off" if A is zero. +; Called by WHL and Q commands. + +onmsg: + dc ' On' +offmsg: + dc ' Off' +tella: + ld hl,offmsg ; Prepare to say Off + or a + jr z,printhl ; Say it if A=0 + ld hl,onmsg ; Say On + +; fall thru ; Display message and return + + endif ; whlon or quieton + +; Print string pointed to by HL (terminated with null or character with the +; high bit set) + +printhl: + ld a,(hl) ; Get next character + inc hl ; Point to following one + or a ; See if null terminator + ret z ; If so, we are done + call conout ; Display the character + ret m ; We are done if MSB is set (negative number) + jr printhl ; Back for more + +; ------------------------ + +; Output new line to CON: + +crlf: + call print + db cr,lf+80h + ret + +; Console input + + if eraon or lton or proton or renon or cpon +conin: + push hl ; Save regs + push de + push bc + ld c,1 ; Input + call bdos + pop bc ; Get regs + pop de + pop hl + and 7fh ; Mask msb + cp 61h + ret c + and 5fh ; To upper case + ret + endif ; Eraon or lton or proton or renon or cpon + +; ------------------- + +; Save return address + +retsave: + pop de ; Get return address + pop hl ; Get return address to zcpr3 + ld (z3ret),hl ; Save it + push hl ; Put return address to zcpr3 back + push de ; Put return address back + ret + +; ------------------------------- + +; Test file pted to by HL for R/O +; NZ if R/O + + if renon or cpon or eraon +rotest: + push hl ; Advance to r/o byte + ld bc,8 ; Pt to 9th byte + add hl,bc + ld a,(hl) ; Get it + and 80h ; Mask bit + push af + ld hl,romsg + call nz,printhl ; Print if nz + pop af ; Get flag + pop hl ; Get ptr + ret +romsg: + db ' is R/','O'+80h + +; ----------------------------------------------- + +; Check user to see if he approves erase of file +; Return with Z if yes + +eraq: + call print + db ' - Eras','e'+80h + endif ; Renon or cpon or eraon + + if renon or cpon or eraon or proton +eraq1: + call print + db ' (Y/N/Q)? N',88h ; 88h = backspace + call conin ; Get response + cp 'Q' ; Quit command? + jr z,exit + cp 'Y' ; Key on yes + ret + endif ; Renon or cpon or eraon or proton + +; ------------------------------------- + +; Give space on current disk and return + + if spaceon and [dirsp or cpsp or erasp or resetsp] +spaexit: + call crspace ; Show space remaining +; fall thru + endif ; spaceon and [dirsp or cpsp or erasp or resetsp] + +; +; Exit to ZCPR3 +; +exit: +z3ret equ $+1 ; Pointer to in-the-code modification + ld hl,0 ; Return address + jp (hl) ; Goto ZCPR3 + +; -------------------------------------------------------- + +; Check for user input; if ^X, return with Z, abort if ^C + + if diron or lton or eraon or proton or peekon +break: + push hl ; Save regs + push de + push bc + ld c,11 ; Console status check + call bdos + or a + ld c,1 ; Get char if any + call nz,bdos + pop bc ; Restore regs + pop de + pop hl +break1: cp ctrlc ; Check for abort + jr z,exit ; Exit + cp ctrlx ; Skip? + ret + endif ; Diron or lton or eraon or proton or peekon + +; --------------------- + +; Print address in DE + + if peekon or pokeon +adrat: + call print + db ' at',' '+80h + ld a,d ; Print high + call pahc + ld a,e ; Print low + jp pahc + endif ; Peekon or pokeon + +; -------------------------------------------------- + +; Extract hexadecimal number from line pted to by HL +; Return with value in DE and HL pting to offending char + + if peekon or pokeon or porton +hexnum: + ld de,0 ; De=accumulated value +hnum1: + ld a,(hl) ; Get char + cp ' '+1 ; Done? + ret c ; Return if space or less + inc hl ; Pt to next + sub '0' ; Convert to binary + jr c,numerr ; Return and done if error + cp 10 ; 0-9? + jr c,hnum2 + sub 7 ; A-f? + cp 10h ; Error? + jr nc,numerr +hnum2: + push hl ; Save pointer + ex de,hl + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; De x16 to hl + ld e,a + ld d,0 + add hl,de + ex de,hl ; De = de * 16 + a + pop hl ; Get the pointer + jr hnum1 ; Try again +; +; Number error +; +numerr: + ld a,ecbadnum ; Numeric error + jp errexit ; Chain to error handler + +; Skip to next non-blank + +sksp: + ld a,(hl) ; Get char + inc hl ; Pt to next + cp ' ' ; Skip spaces + jr z,sksp + dec hl ; Pt to good char + or a ; Set eol flag + ret + endif ; Peekon or pokeon or porton + +; ------------------------------------------------------------------------ + +; Test File in FCB for unambiguity and existence, ask user to delete if so +; Return with Z flag set if R/O or no permission to delete + + if renon or cpon +extest: + call ambchk ; Ambiguous file names not allowed + call searf ; Look for specified file + jr z,exok ; Ok if not found + call getsbit ; Position into dir + inc de ; Pt to file name + ex de,hl ; Hl pts to file name + push hl ; Save ptr to file name + call prfn ; Print file name + pop hl + call rotest ; Check for r/o + jr nz,exer + call eraq ; Erase? + jr nz,exer ; Restart as error if no + ld de,fcb1 ; Pt to fcb1 + ld c,19 ; Delete file + call bdos +exok: xor a + dec a ; Nz = ok + ret +exer: + xor a ; Error flag - file is r/o or no permission + ret + +; Check for ambiguous file name in FCB1 +; Return z if so + +ambchk: + ld hl,fcb1+1 ; Pt to fcb + +; Check for ambiguous file name pted to by HL + +ambchk1: + push hl + ld b,11 ; 11 bytes +amb1: ld a,(hl) ; Get char + and 7fh ; Mask + cp '?' + jr z,amb2 + inc hl ; Pt to next + djnz amb1 + dec b ; Set nz flag + pop de + ret +amb2: + pop hl ; Pt to file name + ld a,ecambig ; Ambiguous name error + ld b,00010000b ; Bit 4 tells EH to load transient + jp ErrEx1 ; Chain to error handler + endif ; Renon or cpon + +; --------------------------------------- + +; Init FCB1, return with DE pting to FCB1 + + if eraon or lton or cpon +initfcb1: + ld hl,fcb1 ; Pt to fcb +initfcb2: + push hl ; Save ptr + ld bc,12 ; Pt to first byte + add hl,bc + ld b,24 ; Zero 24 bytes + xor a ; Zero fill + call fillp ; Fill memory + pop de ; Pt to fcb + ret + endif ; Eraon or lton or cpon + +; Fill a region with byte in A + + if eraon or lton or cpon or diron +fillp: + ld (hl),a ; Store byte + inc hl ; Pt to next + djnz fillp ; Count down + ret + endif ; Eraon or lton or cpon or diron + +; --------------------------------------------------------------------- + +; After a search, return NZ set if desired type of file found, Z if not. +; This algorithm looks at the system bit of the located file; this +; bit is set to 1 if the file is a system file and 0 if not a system +; file. The following exclusive or masks are applied to return Z or NZ +; as required by the calling routine: +; +; SYSTEM BYTE: X 0 0 0 0 0 0 0 (AFTER 80H MASK, X=1 IF SYS, 0 IF DIR) +; +; SYS-ONLY : 0 0 0 0 0 0 0 0 (XOR 0 = 0 if X=0, = 80H if X=1) +; DIR-ONLY : 1 0 0 0 0 0 0 0 (XOR 80H = 80h if X=0, = 0 if X=1) +; BOTH : 0 0 0 0 0 0 0 1 (XOR 1 = 81H or 1H, NZ in both cases) + + if diron or eraon or lton or proton or cpon or renon +getsbit: + dec a ; Adjust to returned value + rrca ; Convert number to offset into tbuff + rrca + rrca + and 60h + ld de,tbuff ; Pt to buffer + add a,e ; Add entry offset to base addr + ld e,a ; Result in e + push de ; Save ptr in de + add a,10 ; Add offset of 10 to pt to system byte + ld e,a ; Set address + ld a,(de) ; Get byte + pop de ; Get ptr in de + and 80h ; Look at only system bit +systst equ $+1 ; In-the-code variable + xor 0 ; If systst=0, sys only; if systst=80h, dir + ; Only; if systst=1, both sys and dir + ret ; Nz if ok, z if not ok + +; Log into user area contained in FCB1 + +logusr: + ld a,(fcb1+13) ; Get user number +setusr: + ld e,a + ld c,32 ; Use bdos fct + jp bdos + +; Print file name pted to by HL + +prfn: + call spac ; Leading space + ld b,8 ; 8 chars + call prfn1 + call print + db '.'+80h ; Dot + ld b,3 ; 3 chars +prfn1: ld a,(hl) ; Get char + inc hl ; Pt to next + call conout ; Print char + djnz prfn1 ; Count down + ret + +; Search for first + +searf: + push bc ; Save counter + push hl ; Save hl + call dirchek ; Check bad dirspec + ld c,17 ; Search for first function +searf1: ld de,fcb1 ; Pt to fcb + call bdos + inc a ; Set zero flag for error return + pop hl ; Get hl + pop bc ; Get counter + ret + endif ; Diron or eraon or lton or proton or cpon or renon + +; ------------------------- + +; Copy HL to DE for B bytes + + if diron or eraon or lton or proton or cpon +blkmov: + ld a,(hl) ; Get + ld (de),a ; Put + inc hl ; Pt to next + inc de + djnz blkmov ; Loop + ret + endif ; Diron or eraon or lton or proton or cpon + +; ----------------------------- + +; Print file not found message + + if diron or eraon +prfnf: + call print + db ' No File','s'+80h + jp exit + endif ; Diron or eraon + +; ------------------------------------------------------------------ + +; Define buffers as high as possible in TPA for the following groups +; of commands: +; +; COPY needs SRCFCB, CBUFF, STPBUF (if STPCALL) +; ERA, PROT, LIST/TYPE need DIRBUF and NXTFILE +; DIR needs DIRBUF +; +; If DIRBUF is defined, its value is in HL on return from this code. The DE +; register pair is not changed by the code, but the BC pair is affected. + +dirbufon equ lton or eraon or proton or diron + + if dirbufon +dirbuf: ds 2 ; Address for directory buffer + endif ; dirbufon + + if lton or eraon or proton +nxtfile: ds 2 ; Ptr to next file in list + endif ; eraon or lton or proton + + if cpon or dirbufon or cledon +define: + push de + ld hl,(bdos+1) ; Get bottom of BDOS + ex de,hl ; ..into DE + ld hl,(ccp) ; From Z34CMN.LIB + +; Now we have to compare and pick the lower address as the top of TPA + + push hl ; Save CPR address while comparing + xor a ; Clear the carry flag + sbc hl,de ; Compute (CPR-BDOS) + pop hl ; Restore CPR address + jr c,define1 ; Branch if BDOS address is higher (use CPR) + ex de,hl ; Otherwise use BDOS address +define1: + if cpon + ld de,-36 ; Calculate place for SRCFCB for copy command + add hl,de + ld (srcfcb),hl + + if stpcall + ld de,-128 + add hl,de ; Buffer for datestamps + ld (stpbuf),hl + endif ; stpcall + + if dirbufon + push hl ; Save if needed below + endif ; dirbufon + + ld de,-[cpblocks*128] ; CBUFF can use same space as DIRBUF + add hl,de + ld (cbuff),hl + + if dirbufon + pop hl + endif ; dirbufon + + endif ; cpon + + if dirbufon + ld de,-[maxdirs*11] ; Space for directory buffer + add hl,de + ld (dirbuf),hl + endif ; dirbufon + + pop de + ret + + endif ; cpon or dirbufon or cledon + +; --------------- + +; Search for next + + if diron or eraon or lton or proton +searn: + push bc ; Save counter + push hl ; Save hl + ld c,18 ; Search for next function + jr searf1 + +; Load directory and sort it +; On input, A=SYSTST flag (0=SYS, 1=DIR, 80H=BOTH) +; Directory is loaded into buffer at top of TPA +; Return with ZERO set if no match and HL pts to 1st entry if match + +direrr: + ld a,ectpafull ; Chain to error handler + jp errexit + +getdir: + ld (systst),a ; Set system test flag + call logusr ; Log into user area of fcb1 + call define ; Define buffer addresses + ld (hl),0 ; Set empty + ld bc,0 ; Set counter + call searf ; Look for match + ret z ; Return if not found + +; Step 1: Load directory + +gd1: + push bc ; Save counter + call getsbit ; Check for system ok + pop bc + jr z,gd2 ; Not ok, so skip + push bc ; Save counter + inc de ; Pt to file name + ex de,hl ; Hl pts to file name, de pts to buffer + ld b,11 ; Copy 11 bytes + call blkmov ; Do copy + pop bc ; Get counter + inc bc ; Increment counter + ld hl,maxdirs-1 ; See if count equals or exceeds MAXDIRS + ld a,b ; Check high bytes + sub h + jr c,gd1a ; If carry set, we are OK + ld a,c ; Check low bytes + sub l + jr nc,direrr ; If no carry, jump to error message +gd1a: ex de,hl ; Hl pts to next buffer location +gd2: call searn ; Look for next + jr nz,gd1 + ld (hl),0 ; Store ending 0 + ld hl,(dirbuf) ; Pt to dir buffer + ld a,(hl) ; Check for empty + or a + ret z + +; Step 2: Sort directory + + if dsort + push hl ; Save ptr to dirbuf for return + call diralpha ; Sort + pop hl + endif + + xor a ; Set nz flag for ok + dec a + ret + + +; DIRALPHA -- Alphabetizes directory in DIRBUF; BC contains +; the number of files in the directory +; + if dsort +diralpha: +; +; SHELL SORT -- +; This sort routine is adapted from "Software Tools" +; by Kernigan and Plaugher, page 106. Copyright, 1976, Addison-Wesley. +; + ld h,b ; Hl=bc=file count + ld l,c + ld (num),hl ; Set "NUM" + ld (gap),hl ; Set initial gap to n for first division by 2 + +; For (gap = num/2; gap > 0; gap = gap/2) + +srtl0: +gap equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Get previous gap + or a ; Clear carry + rr h ; Rotate right to divide by 2 + rr l + + ld a,l ; Test for zero + or h + ret z ; Done with sort if gap = 0 + + ld (gap),hl ; Set value of gap + push hl + pop ix ; Set ix=gap for following loop + +; For (ix = gap + 1; ix <= num; ix = ix + 1) + +srtl1: + inc ix ; Add 1 to ix + push ix + pop de ; IX is in DE + +; Test for ix <= num + +num equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Number of items to sort + ld a,l ; Compare by subtraction + sub e + ld a,h + sbc a,d ; Carry set means ix > n + jr c,srtl0 ; Don't do for loop if ix > n + ex de,hl ; Set jj = ix initially for first + ; ..subtraction of gap + ld (jj),hl + +; For (jj = ix - gap; jj > 0; jj = jj - gap) + +srtl2: + ld de,(gap) +jj equ $+1 ; Pointer for in-the-code modification + ld hl,0 ; Get jj + + sbc hl,de ; Compute JJ - GAP + ld a,h + ld (jj),hl ; Jj = jj - gap + jr c,srtl1 ; If carry from subtractions, jj < 0 and abort + or l ; Jj=0? + jr z,srtl1 ; If zero, jj=0 and abort + +; Set iy = jj + gap + + ex de,hl ; Jj in de + ld hl,(gap) ; Get gap + add hl,de ; Jj + gap + push hl + pop iy ; IY = iy + gap + +; If (v(jj) <= v(iy)) + + call icompare ; JJ in de, iy in hl + +; ...then break + + jr c,srtl1 + +; ...else exchange + + ld de,(jj) ; Swap jj, iy + push iy + pop hl + call iswap ; Jj in de, iy in hl + +; End of inner-most for loop + + jr srtl2 + +; +; SWAP (Exchange) the elements whose indexes are in HL and DE +; +iswap: + call ipos ; Compute position from index + ex de,hl + call ipos ; Compute 2nd element position from index + ld b,11 ; 11 bytes to flip + endif ; Dsort + endif ; Diron or eraon or lton or proton + + if diron or eraon or lton or proton or renon or (cpon and leftright) +iswap1: + ld a,(de) ; Get bytes + ld c,(hl) + ex de,hl + ld (de),a ; Put bytes + ld (hl),c + inc hl ; Pt to next + inc de + djnz iswap1 + ret + endif ; Diron or eraon or lton or proton or renon + ; ..or (cpon and leftright) + + if leftright and (cpon or renon) +; +; FCBSWAP exchanges 16 byte FCB1 with FCB2 from the command line. +; This allows COPY and REN commands to execute left to right, +; e.g., "cp source dest". Costs 10 bytes. +; +; If TESTEQ is true, then commands containing '=' still execute right +; to left, e.g., "cp dest=source". Costs 11 bytes additional. +; +fcbswap: + if testeq + xor a ; Zero B + ld b,a + ld hl,80h ; Point to command line, length + ld c,(hl) ; Set up for CPIR + ld a,'=' ; Search for '=' + cpir ; '=' found in command? + ret z ; Yes, don't swap + endif ; Testeq + + ld de,fcb1 ; Point to command fcb's + ld hl,fcb2 + ld b,16 ; Exchange them + jr iswap1 + endif ; leftright and (cpon or renon) + + if diron or eraon or lton or proton + if dsort +; +; ICOMPARE compares the entry pointed to by the pointer pointed to by HL +; with that pointed to by DE (1st level indirect addressing); on entry, +; HL and DE contain the numbers of the elements to compare (1, 2, ...); +; on exit, Carry Set means ((DE)) < ((HL)), Zero Set means ((HL)) = ((DE)), +; and Non-Zero and No-Carry means ((DE)) > ((HL)) +; +icompare: + call ipos ; Get position of first element + ex de,hl + call ipos ; Get position of 2nd element + ex de,hl +; +; Compare dir entry pted to by HL with that pted to by DE; +; No net effect on HL, DE; ret w/CARRY set means DE2Ziw#n@L`+ePQ zzE*olb`c15)vKyk)m3GG3j9fAMUNDEWQX_n;VgKhMeI7{xSl`r6F;2Az3!()&8b>Z zv&m~J@}*$ng`V@Gpe_5xiPbgVE{hi`Sh?P_HHXDcRBOSuHE~wwTu@Vy;4C9nW-!Xj z2EQS2_$C`ptEwof=e%4~##ecnH+fao^vngP6e^xJJfr0c&~?7uAr$|s5iD(_MYG{s zT8U~)Pxd?-)4s_IIN-JPKQBN4{y8sz;an17StkG5Z0bglYAT@9YP;oSLscog(oXOd z7XqPAtmt_IR=@%Pb_~Cof9HY~#Q)sq-&vs@AUsX>+nsa-wBXx&+OH)Oy{>vBR0yQO?a?_iJ=Ij-)nfb>m)lzL?q5_V~Wn4g5H1PbjS8 zpIPEQ=Fw!~wdxz`=yWuVUKdf0)+XY9aidw-!c7_2jork#^E59655imj$P>}SxqCb! zyd8wGd$33NI0Dtf`J+A`@z=es8(Am3JFo%53haXbbgU#f78c=d-DGY>_d44#;>EXEIY$H{0@0cqo;O9u zt$9QH8fygO#)uCDUlS&6kG8|wn#WHqe60CIM`xh(-}=YOGQqLmbpM3$ZxfVK-IHM$ zl3K0%Y>6#1MCaP}JaA_UaIFED0nBC7r5R?t{(*zTV2V#y|R8fu(2+5yE3MF6^%jNlFcjTrh_elo*P+b%8cfRO#l& z7aLiz?faLT4J*M;qCkh}Tm3=*_r4a{Dr(P+&id|| zNGIF(&O~?G@a{|$X;E}0(l^?Vl}Iso2tDr*{6QN$oEbc6(Nim$Xa~l%?9$;-K56P5 zOI4R9mTnB=Mk^b(l#T;U*08j+$V*&5&!h_LMXi5ZtMJI$9#pm_Z#Y_&GJ$o!=6K#W zdr>OFmYxW+<&v^8<%QI^ScB59X>Alsx6B6BYOu-+j5d_^)Y9I~mJ^9Xp%gmw|dr!etJUGP<-)w<%++BvC(%%s=-^_Tzi F^EdOcj^6+P literal 0 HcmV?d00001 diff --git a/Source/BPBIOS/Z34RCP11/z34cmn.lib b/Source/BPBIOS/Z34RCP11/z34cmn.lib new file mode 100644 index 00000000..ad8c8cec --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34cmn.lib @@ -0,0 +1,105 @@ +; +; Library: Z34CMN.LIB +; Author: Carson Wilson +; Version: 1.2 +; Date: 16 June 1988 +; Changes: Renamed CRT0 to LINS for NZCOM compatibility. +; Added CUSR " " " + +; Author: Carson Wilson +; Version: 1.1 +; Date: 12 June 1988 +; Changes: Added CDRV for various Z34RCP commands. +; Added CRT0 for Z34RCP TYPE command. +; Added Z3TCAP and CLRSCR for Z34RCP CLS command. +; Added QUIET for ZCPR34 time in prompt. +; Added RSDMSG for ZCPR34 time in prompt. + +; Library: Z34CMN.LIB +; Author: Joe Wright +; Date: 23 March 1988 + +; As a replacement for Z3BASE.LIB, some usual equates. + +base equ 0 ; Base Page + +false equ 0 +true equ not false + +no equ false +yes equ true + +off equ false +on equ true + +; Named COMMON declarations start here. For compatibility, these +; are the same names used by Bridger Mitchell's JetLDR. + + common /_ENV_/ +z3env: ; Z3 Environment descriptor +z3envs equ yes ; There is one + +expath equ z3env+9 ; Address of External Path +expaths equ 10 ; Maximum 10 elements for MPATH + +rcp equ z3env+0ch ; Address of RCP +rcps equ yes ; Used as existence test, not size + +fcp equ z3env+12h ; Address of FCB +fcps equ yes ; Used as existence test, not size + +z3ndir equ z3env+15h ; Address of NDR +z3ndirs equ yes ; Used as existence test, not size + +quiet equ z3env+28h ; Quiet flag address + +z3whl equ z3env+29h ; Wheel byte address +z3whls equ yes ; There is a wheel + +lins equ z3env+33h ; CRT text lines address + +ccp equ z3env+3fh ; CCP entry +ccps equ z3env+41h ; Size + +dos equ z3env+42h ; DOS entry (+6) +doss equ z3env+44h ; Size + +bio equ z3env+45h ; BIO entry + +z3tcap equ z3env+80h ; TCAP address + +clrscr equ z3env+97h ; Clear screen string address + + common /_SSTK_/ +shstk: ; Top of Shell stack +shstks equ yes ; There is a shell stack + + common /_MSG_/ +z3msg: ; Message buffer +z3msgs equ yes ; There is one + +cusr equ z3msg+2eh ; Current user +cdrv equ z3msg+2fh ; Current drive + +rsdmsg equ z3msg+3ah ; Reserved bytes + + common /_FCB_/ +extfcb: ; External file control block +extfcbs equ yes ; There is one + + common /_MCL_/ +z3cl: ; Multiple command line +z3cls equ yes ; There is one + + common /_XSTK_/ +extstk: ; External stack +extstks equ yes ; There is one + + common /_BIOS_/ +bios: + + cseg ; Select Code Segment + +; End of Z34CMN.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34defn.lib b/Source/BPBIOS/Z34RCP11/z34defn.lib new file mode 100644 index 0000000000000000000000000000000000000000..683fc32215df2f25c9bdeae6d120c5596ce38d75 GIT binary patch literal 1664 zcmb_c%W@kb5X@Do(huasC&W_h9DK4BA96_Il9H-aZY&Qi_Fc5>8IS`NcxK#>MU8p8U*G z5)4T^L?FXCfE0wr2GrekI;orw1P(i~rOt~S^`@5#9o(5%qjX4Fc2Ca_yZuv6;2G7J zVZH8Bw0BZJ`|ZPze1jc%xzN|n%<)JyCxH%A?z1)q79555^dQI(r4%k3q{U1)4YXLo zxI2}&a)e5@(K)DraHme_1&iJlg&47T7ca&0bZ7tj@%y)51X!)~fyjv-vhK~tq1iBTQK=!L@_g(Mw;j=&mN2j9|L74-~ylGc{RYoHdR zC#ilIZH>}m^dvJ8_X6tA9rJ?G6CU%2R%5idc*2+sZ5sNHfUc2>HA;)YX;9dije@~uXE!%3a(QCoW3LK!)2Y5 zqQy9W|Dvp=VXQTF1orAjF-=Nl31l8xj2l2h@aIx$QnVPo048}}W3(8Z0EUgl&=R9! x^aGxRYG + + if not nul temp +flag defl flag shl 1 + if temp +flag defl flag or 1 + endif ;;temp + endif ;;not nul temp + + endm ;; irp + + defb low flag + + endm ;; optflag + +;----------------------------------------------------------------------------- + +; Command table entry definition macro + +; Macro to form an entry for one command in the table. The first parameter is +; the name to be used for the command (no quotes); the second parameter is the +; flag that indicates whether or not the command is to be enabled; the third +; parameter is the wheel control flag; and the last parameter is the jump +; address to the code that carries out the command. The command names are +; automatically padded out to the correct length (they will be truncated and +; an error message will result if a command name is too long). The characters +; in the command name are automatically converted to upper case. + +command macro cmdname,enableflag,wheelflag,address + + if enableflag ;; Generate command only if enabled + +whlmask defl wheelflag ;; Initialize variables +count defl cmdsize ;; Initialize to size of each command name + + irpc char,cmdname ;; Repeat over letters in command name + +count defl count - 1 ;; Count down characters in name + + if [ count lt cmdsize ] + + ;; If character is lower case, convert to upper case + + if [ '&char' ge 'a' ] and [ '&char' le 'z' ] + + if whlmask + defb [ '&char' and 5fh ] + 80h + else ;;not whlmask + defb [ '&char' and 5fh ] + endif ;;whlmask + + else ;;not lower case + + if whlmask + defb '&char' + 80h ;; If controlled by wheel, set high bit + else ;;not whlmask + defb '&char' ;; If not restricted, leave high bit clear + endif ;;whlmask + + endif ;;lower case + + endif ;;[ count lt cmdsize ] + +whlmask defl false ;; Turn off high-bit setting after first char + + endm ;irpc + + ;; Pad command name with blanks + + if [ count gt cmdsize ] ;; If we underflowed + *** Command name "&cmdname" is too long / truncated *** + else + rept count + defb ' ' + endm + endif ;[ count gt cmdsize ] + + dw address ;; Dispatch address for command + + endif ;enable + + endm ;command + +; End Z33MAC.LIB + + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp.lib b/Source/BPBIOS/Z34RCP11/z34rcp.lib new file mode 100644 index 00000000..74908d54 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp.lib @@ -0,0 +1,515 @@ + +; File: Z34RCP.LIB +; Description: Resident Command Package (RCP) for ZCPR34 +; Version: 1.4 +; Author: Carson Wilson +; Date: October 4, 1989 +; Changes: Added PUSER0 equate suggested by Rob Friefeld. +; +; Version: 1.3 +; Author: Carson Wilson +; Date: September 29, 1989 +; Changes: Added CLED (Command Line Editor Shell) command options +; and equates. +; +; Version: 1.2 +; Author: Carson Wilson +; Date: August 11, 1989 +; Changes: Removed several "quiet" conditional assembly equates as +; we are now sensing the QUIET flag instead. +; Changed default of WHLQUIET to false. +; +; Version: 1.1 +; Author: Carson Wilson +; Date: July 10, 1989 +; Changes: Changed 'S' command name to 'SP'. +; Removed wheel protection from 'Q' command and set QQUIET +; on by default. +; Changed command order. + +; Version: 1.0 +; Author: Carson Wilson +; Date: June 15, 1988 + +; This is the configuration file for the ZCPR Version 3.4 resident command +; package. You should read through this file and set the equates according +; to the features you want to implement. Since most systems have a limited +; amount of space for the resident command package, it will probably be +; impossible to include all features. + +; If you are using an SLR or equivalent assembler, you will be prompted +; at assembly time for which commands to include in the RCP. + +;============================================================================= +; +; A S S E M B L Y O P T I O N S +; +;============================================================================= + +; SLR controls whether special pseudo-ops such as ".printx" and ".accept", +; and complex macros are used at assembly time. For SLR Systems or compatible +; macro assemblers, set this equate to true. + +SLR equ false + +; RCPTYPE is the final character of the RCP name in the H(elp) command, +; and determines the order in which commands are added. + + if SLR +Y equ true +N equ false +H equ 'H' +F equ 'F' + +.accept 'Enter "F" for floppy, "H" for fixed disk version: ',rcptype + else +rcptype equ 'H' ; Floppy disk version + endif ; SLR + +; ZRL controls whether named common labels are used in the code. To create +; absolute code, modify RCPBASE.LIB to reflect your system's addresses, set +; ZRL to false and instruct your assembler to generate absolute code (either +; a .COM or .HEX file). +; +; To create a relocatable file for use with Bridger Mitchell's JetLDR or +; Joe Wright's NZCOM, you must use an assembler which recognizes named +; common blocks. If your assembler has this capability, set ZRL to true +; and instruct the assembler to generate relocatable (.REL) code. + +ZRL equ true + +;============================================================================= +; +; M A C R O S +; +;============================================================================= + +; SLR assemblers allow selection of options during assembly. + + if SLR + +select macro option default comment + .accept comment,option ; Prompt user for selection + endm + + .printx + .printx Answer "Y" to include, "N" to exclude commands: + .printx + + else + +select macro option default comment +option equ default ; Use selections from file + endm + endif ; SLR + +;============================================================================= +; +; R E S I D E N T C O M M A N D S S E L E C T I O N +; +;============================================================================= + +; Commands to include in the resident command package + +; There are some interrelations between a number of the possible resident +; commands. Some are so close (LIST and TYPE) that a single equate controls +; both functions. Others like DIR and ERA share code (both display file +; listings). It is efficient to select or deselect them together. + +; If you are using an SLR or compatible assembler, you will be prompted +; at assembly time for command selections. Otherwise, select commands to +; be included by setting each SELECT macro below to yes or no. + +select CLEDON no 'CLED - command line editor shell? ' +select CLSON yes 'CLS - clear screen? ' +select RESON yes 'R - reset disk system? ' +select SPACEON yes 'SP - show space remaining on disk? ' + + if RCPTYPE='F' ; Assemble in floppy order +select DIRON yes 'D - disk directory? ' +select ERAON yes 'ERA - erase files? ' +select ECHOON yes 'ECHO - send text to screen or printer? ' +select RENON yes 'REN - rename files? ' +select CPON yes 'CP - copy file? ' +select LTON yes 'TYPE - display file on console? ' +select POKEON yes 'POKE - set memory? ' +select PEEKON yes 'PEEK - view memory? ' + else ; Assemble in fixed-disk order +select ECHOON yes 'ECHO - send text to screen or printer? ' +select POKEON yes 'POKE - set memory? ' +select PEEKON yes 'PEEK - view memory? ' +select QUIETON yes 'Q - set or clear quiet status? ' +select DIRON yes 'D - disk directory? ' +select ERAON no 'ERA - erase files? ' +select RENON no 'REN - rename files? ' +select CPON no 'CP - copy file? ' +select LTON yes 'TYPE - display file on console? ' + endif ; RCPTYPE='F' + + if LTON +select LISTON no 'LIST - list to printer? ' + else ; allowed only if TYPE is enabled +LISTON equ no + endif + + if RCPTYPE='F' ; Assemble in floppy order +select QUIETON yes 'Q - set or clear quiet status? ' + endif + +select PROTON no 'PROT - set file attributes? ' +select NOTEON no 'NOTE - command-line comment? ' +select REGON no 'REG - set and display user registers? ' +select WHLON no 'WHL - set or clear wheel status? ' +select PORTON no 'PORT - view and set I/O ports? ' + +;============================================================================= +; +; W H E E L P R O T E C T I O N +; +;============================================================================= + +; To prevent unauthorized users from performing certain dangerous or sensitive +; operations on the computer, ZCPR34 provides the capability of disabling the +; operation of certain commands when the wheel byte is off. In ZCPR30, an +; attempt to use one of these wheel-protected commands when the wheel byte was +; off resulted in an error message. In ZCPR34 things work differently. In the +; same situation, the command simply disappears. In this way a transient +; program or extended command processor function can take over and deal with +; the attempt to use the command in a much more flexible way. +; +; Wheel-protected commands in ZCPR30 had extra code to intercept the function +; and disable it. In ZCPR34, wheel protection is enabled and disabled in a +; different way. To wheel-protect a command the high bit of the first +; character in the command name is set. The command table scanner in ZCPR34 +; will not recognize these commands when the wheel byte is off. Since the same +; command scanner is used to scan the commands in the RCP and FCP (flow control +; package), commands there can be wheel protected in the same way. For skilled +; computer operators it is very easy to use a debugger, file patcher, or disk +; utility to enable and disable wheel protection without having to reassemble +; the CPR, RCP, or FCP. +; +; Because of the way the command scanner works, once wheel protection is +; implemented in the CCP, there is no further code penalty in protecting RCP +; commands. Therefore, we recommend protecting all possibly sensitive +; commands or none. + +wcled equ no ; CLED +wcp equ yes ; CP +wdir equ no ; DIR +wera equ yes ; ERA +wlist equ yes ; LIST +wpeek equ yes ; PEEK +wpoke equ yes ; POKE +wport equ yes ; PORT +wprot equ yes ; PROT +wquiet equ no ; QUIET +wreg equ yes ; REG +wren equ yes ; REN +wspop equ yes ; SPOP +wtype equ yes ; TYPE +whrc equ no ; H + +wheel defl wcp or wdir or wera or wlist or wpeek or wpoke or wport +wheel defl wheel or wprot or wreg or wren or wtype or whrc + +;============================================================================= +; +; C O M M A N D O P T I O N S +; +;============================================================================= + +; Options affecting several commands + +; DSORT includes code to sort file entries for the D, TYPE, LIST, ERA, +; and PROT commands. + +dsort equ yes + +; LEFTRIGHT affects the COPY and RENAME commands. If yes, add code to allow +; CP and REN operations work from left to right, and CP to accept a +; single filespec as its source. +; Examples: +; B0>ren b1:old.nam new.nam Renames B1:old.nam to B1:new.nam +; B0>cp a15:that.fil Copies A15:that.fil to B0: +; B0>cp source.fil dest.fil Copies source.fil to dest.fil + +leftright equ yes + +; If LEFTRIGHT is yes, setting TESTEQ to yes also allows CP and REN commands +; to be processed from right to left if they contain an equal sign ("="). +; Costs 11 bytes. +; Example: +; B0>cp dest.fil=source.fil Copies source.fil to dest.fil + +testeq equ yes + +;----------------------------------------------------------------------------- + +; 'CLS' command + +; This command clears the console screen. It can either use a fixed string +; (for shorter code if the same terminal is always used) or use the TCAP +; entry for automatic adaptation to any terminal. + +clstcap equ true ; Use TCAP for clear-screen string + +; If CLSTCAP is not enabled, then the string below must be provided and +; it must end with a character with the high bit set + + if not clstcap +clsstr macro + db 'Z'-'@'+80h ; Control-Z to clear screen + endm + endif ;not clstcap + +typecls equ true ; Clear between screens when typing files + +;----------------------------------------------------------------------------- + +; 'CP' command + +; This command copies a single file. The destination file can have a different +; name from the source file. Set the size of the memory buffer in K below (do +; not change the second definition). The copy buffer is placed at the top of +; the TPA, where it will generally not interfere with subsequent use of the GO +; command to rerun a program loaded in the TPA. + +cpblocks defl 16 ; Size of copy buffer in K + +cpblocks defl cpblocks * 8 ; Convert to number of records + +; If you will be using a BDOS or RSX which supports new functions 102 (Get +; Stamp) and 103 (Set Stamp), set STPCALL to true, and datestamps of files +; will be preserved across copies. The "last access" stamps of both copies +; are set to the time the copy took place if access stamping is enabled. + +stpcall equ true ; Copy file stamps with functions 102/3 + +;----------------------------------------------------------------------------- + +; 'DIR' command + +; This command displays a sorted listing of the files in a directory. The +; file name buffer is allocated at the top of the TPA so as not to modify +; any program loaded in low memory. Consequently, the size of the buffer +; must be set in advance. + + +maxdirs equ 256 ; Maximum number of names in directory buffer + +nosys equ yes ; suppress 'A' and 'S' options if wheel off + +slashchk equ yes ; allow "DIR /S" or "DIR /A" formats (costs + ; about 12 bytes) + +allflag equ 'A' ; Option character for showing + ; all file (both SYS and DIR) +sysflag equ 'S' ; Option character for showing + ; SYS files only +sortnt equ yes ; Sort file by name then type +wide equ yes ; Make display for 80-column screen +fence equ '|' ; Character to use as fence between columns + ; ..if WIDE is false. + +;----------------------------------------------------------------------------- + +; 'ECHO' command + +; This command sends characters to the console or list device. If ECHOLST is +; enabled, then code is included for sending characters to the LST device. +; Characters normally go the the console device and are normally upper or lower +; case depending on the setting of UPCASE. The command line can have special +; command sequences to toggle the case of the output and to change the +; destination between the console and printer. Any other character following +; the command character will be sent as is. For the normal setting of the +; equates below (upcase/yes, cmdchar/%, prtchar/P, crtchar/C, lcasech/>, +; and ucasech/<) an example command line would be: +; A0:ROOT>ECHO T%>HIS IS A TEST^M^J^IDONE%PONE, TWO, %' ; Character after CASECHAR that toggles + ; subsequent output to lower case + +; ---------------------------------------------------------------------------- + +; 'H' command + +; This command displays a list of the resident commands implemented in the +; system. FCP, CPR, and RCP commands can be displayed. The basic command is +; not optional; it is always included. + +listcpr equ yes ; Include list of CPR-resident commands in + ; display (highly recommended) + +listfcp equ yes ; Include list of FCP-resident commands in + ; display (recommended if there is room) + +noshow equ yes ; Suppress listing commands that are wheel- + ; restricted unless wheel byte is set (i.e., + ; don't show commands that won't run) + +cmdsline equ 5 ; Number of commands on each line of display + +cmdspace equ 8 ; Space in display for each command name + +;----------------------------------------------------------------------------- + +; 'LIST' and 'TYPE' commands + +pgdflt equ yes ; Default to paging of console output + +pgdflg equ 'P' ; Character to toggle paging status + +;---------------------------------------- + +; 'PEEK' command + +peekhdr equ yes ; Label columns in PEEK display + +peekbdr equ yes ; Include line of hyphens under labels + +peekchk equ yes ; If yes, the ending address will be tested to + ; prevent overflow past FFFF (costs 5 bytes) + +peeklen equ 127 ; Display 1 record (128 bytes) as default. + ; PEEK displays in increments of 16 bytes. + ; You may set PEEKLEN for 0 to 65525. + +;---------------------------------------- + +; 'S' command + +; Print disk space with other commands (recommended) + +dirsp equ true ; Show space after DIR +erasp equ true ; Show space after ERA +cpsp equ true ; Show space after CP +resetsp equ true ; Show space after R + +;---------------------------------------- + +; 'WHL' command + +whlquiet equ false ; If true, don't report wheel state with + ; .."WHL password" command (costs 1 byte) + +wpass macro + db 'SYSTEM ' + endm + +;---------------------------------------- + +; 'CLED' command +; +; Command line editing takes place in the line buffer. It does not take up +; room in the RCP. The editor will handle a 255 byte line. Although that +; is larger than the maximum command line size, it allows you to edit a long +; line without deleting something first. The history is kept inside the RCP, +; so its size will depend upon how many other RCP commands are enabled. +; HISTSIZE should be at least as large as the multiple command line buffer +; (204 bytes). + +lbufwid equ 255 ; Line buffer size, byte +histsize equ 204 ; History buffer size, word + +; CLERA controls whether to null the internal history when CLED is exited, or +; to leave it for the next run. Secure systems will want to set it to YES. + +clera equ no ; Erase history on terminating shell + +; CLMIN sets the cutoff for discarding short lines from history recording. +; A setting of 3 would discard a command such as DIR. + +clmin equ 5 ; Discard lines which do not exceed this + +clins equ yes ; Initial insert state ON +clsav equ yes ; Initial history recording ON + +; The appearance of the command line prompt may include the system time if a +; DateStamper or ZS/ZDDOS clock is implemented. The DU:DIR separator character +; can be changed to indicate that CLED is running. + +dudir_sep equ '/' ; DU:DIR separator char +puser0 equ no ; Print user #0 in prompt +systime equ yes ; Include system time in prompt + + if systime +civtim equ yes ; Yes for 12-hr civil time vs. 24-hr military +timesep equ '.' ; Separator between hours and minutes + endif + +; The editor must use EREOL. The VLIB routine to send the EREOL sequence +; to the terminal needs to test for a video delay and the presence of the "/" +; quote character. Most terminals can just print the TCAP sequence as is. If +; that doesn't work, set ERLQUICK to NO. If you are using only one terminal, +; it will be most efficient to set ERLTCAP to NO and use the CLR_EOL macro. + +erltcap equ yes ; Use TCAP routine vs macro + + if erltcap +erlquick equ yes ; Use simplified TCAP routine + else + +clr_eol macro ; Define terminal specific string + dc 1bh,'T' ; ...set high bit on last character + endm + + endif ;erltcap + +;----------------------------------------------------------------------------- + +; Command names + +; The CTABLE macro, which constructs the command dispatch table, includes a +; line for each command, the first parameter of which is the name of the +; command. These names may be changed if you wish. But make sure that you +; do not use a name that is longer than the maximum allowed length. If you +; do, the name will be truncated and a nonfatal error will occur during +; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower +; case letters will be converted to upper case. The macro COMMAND is defined +; in Z34MAC.LIB. + +cmdsize equ 4 ; Length of each command name + +cmdtbl macro + command CLED, cledon, wcled, cled + command CLS, clson, false, cls + command CP, cpon, wcp, copy + command D, diron, wdir, dir + command ECHO, echoon, false, echo + command ERA, eraon, wera, era + command H, true, whrc, clist + command LIST, liston, wlist, list + command NOTE, noteon, false, note + command P, peekon, wpeek, peek + command POKE, pokeon, wpoke, poke + command PORT, porton, wport, port + command PROT, proton, wprot, att + command Q, quieton,wquiet, quset + command R, reson, false, reset + command REG, regon, wreg, register + command REN, renon, wren, ren + command SP, spaceon,false, space + command SPOP, cledon, wspop, shpop + command TYPE, lton, wtype, type + command WHL, whlon, false, whl + endm + +; END Z34RCP.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp.lib.sav b/Source/BPBIOS/Z34RCP11/z34rcp.lib.sav new file mode 100644 index 00000000..a0272445 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp.lib.sav @@ -0,0 +1,515 @@ + +; File: Z34RCP.LIB +; Description: Resident Command Package (RCP) for ZCPR34 +; Version: 1.4 +; Author: Carson Wilson +; Date: October 4, 1989 +; Changes: Added PUSER0 equate suggested by Rob Friefeld. +; +; Version: 1.3 +; Author: Carson Wilson +; Date: September 29, 1989 +; Changes: Added CLED (Command Line Editor Shell) command options +; and equates. +; +; Version: 1.2 +; Author: Carson Wilson +; Date: August 11, 1989 +; Changes: Removed several "quiet" conditional assembly equates as +; we are now sensing the QUIET flag instead. +; Changed default of WHLQUIET to false. +; +; Version: 1.1 +; Author: Carson Wilson +; Date: July 10, 1989 +; Changes: Changed 'S' command name to 'SP'. +; Removed wheel protection from 'Q' command and set QQUIET +; on by default. +; Changed command order. + +; Version: 1.0 +; Author: Carson Wilson +; Date: June 15, 1988 + +; This is the configuration file for the ZCPR Version 3.4 resident command +; package. You should read through this file and set the equates according +; to the features you want to implement. Since most systems have a limited +; amount of space for the resident command package, it will probably be +; impossible to include all features. + +; If you are using an SLR or equivalent assembler, you will be prompted +; at assembly time for which commands to include in the RCP. + +;============================================================================= +; +; A S S E M B L Y O P T I O N S +; +;============================================================================= + +; SLR controls whether special pseudo-ops such as ".printx" and ".accept", +; and complex macros are used at assembly time. For SLR Systems or compatible +; macro assemblers, set this equate to true. + +SLR equ true + +; RCPTYPE is the final character of the RCP name in the H(elp) command, +; and determines the order in which commands are added. + + if SLR +Y equ true +N equ false +H equ 'H' +F equ 'F' + +.accept 'Enter "F" for floppy, "H" for fixed disk version: ',rcptype + else +rcptype equ 'F' ; Floppy disk version + endif ; SLR + +; ZRL controls whether named common labels are used in the code. To create +; absolute code, modify RCPBASE.LIB to reflect your system's addresses, set +; ZRL to false and instruct your assembler to generate absolute code (either +; a .COM or .HEX file). +; +; To create a relocatable file for use with Bridger Mitchell's JetLDR or +; Joe Wright's NZCOM, you must use an assembler which recognizes named +; common blocks. If your assembler has this capability, set ZRL to true +; and instruct the assembler to generate relocatable (.REL) code. + +ZRL equ true + +;============================================================================= +; +; M A C R O S +; +;============================================================================= + +; SLR assemblers allow selection of options during assembly. + + if SLR + +select macro option default comment + .accept comment,option ; Prompt user for selection + endm + + .printx + .printx Answer "Y" to include, "N" to exclude commands: + .printx + + else + +select macro option default comment +option equ default ; Use selections from file + endm + endif ; SLR + +;============================================================================= +; +; R E S I D E N T C O M M A N D S S E L E C T I O N +; +;============================================================================= + +; Commands to include in the resident command package + +; There are some interrelations between a number of the possible resident +; commands. Some are so close (LIST and TYPE) that a single equate controls +; both functions. Others like DIR and ERA share code (both display file +; listings). It is efficient to select or deselect them together. + +; If you are using an SLR or compatible assembler, you will be prompted +; at assembly time for command selections. Otherwise, select commands to +; be included by setting each SELECT macro below to yes or no. + +select CLEDON no 'CLED - command line editor shell? ' +select CLSON yes 'CLS - clear screen? ' +select RESON yes 'R - reset disk system? ' +select SPACEON yes 'SP - show space remaining on disk? ' + + if RCPTYPE='F' ; Assemble in floppy order +select DIRON yes 'D - disk directory? ' +select ERAON yes 'ERA - erase files? ' +select ECHOON yes 'ECHO - send text to screen or printer? ' +select RENON yes 'REN - rename files? ' +select CPON yes 'CP - copy file? ' +select LTON yes 'TYPE - display file on console? ' +select POKEON yes 'POKE - set memory? ' +select PEEKON yes 'PEEK - view memory? ' + else ; Assemble in fixed-disk order +select ECHOON yes 'ECHO - send text to screen or printer? ' +select POKEON yes 'POKE - set memory? ' +select PEEKON yes 'PEEK - view memory? ' +select QUIETON yes 'Q - set or clear quiet status? ' +select DIRON yes 'D - disk directory? ' +select ERAON yes 'ERA - erase files? ' +select RENON yes 'REN - rename files? ' +select CPON yes 'CP - copy file? ' +select LTON yes 'TYPE - display file on console? ' + endif ; RCPTYPE='F' + + if LTON +select LISTON no 'LIST - list to printer? ' + else ; allowed only if TYPE is enabled +LISTON equ no + endif + + if RCPTYPE='F' ; Assemble in floppy order +select QUIETON yes 'Q - set or clear quiet status? ' + endif + +select PROTON no 'PROT - set file attributes? ' +select NOTEON no 'NOTE - command-line comment? ' +select REGON no 'REG - set and display user registers? ' +select WHLON no 'WHL - set or clear wheel status? ' +select PORTON no 'PORT - view and set I/O ports? ' + +;============================================================================= +; +; W H E E L P R O T E C T I O N +; +;============================================================================= + +; To prevent unauthorized users from performing certain dangerous or sensitive +; operations on the computer, ZCPR34 provides the capability of disabling the +; operation of certain commands when the wheel byte is off. In ZCPR30, an +; attempt to use one of these wheel-protected commands when the wheel byte was +; off resulted in an error message. In ZCPR34 things work differently. In the +; same situation, the command simply disappears. In this way a transient +; program or extended command processor function can take over and deal with +; the attempt to use the command in a much more flexible way. +; +; Wheel-protected commands in ZCPR30 had extra code to intercept the function +; and disable it. In ZCPR34, wheel protection is enabled and disabled in a +; different way. To wheel-protect a command the high bit of the first +; character in the command name is set. The command table scanner in ZCPR34 +; will not recognize these commands when the wheel byte is off. Since the same +; command scanner is used to scan the commands in the RCP and FCP (flow control +; package), commands there can be wheel protected in the same way. For skilled +; computer operators it is very easy to use a debugger, file patcher, or disk +; utility to enable and disable wheel protection without having to reassemble +; the CPR, RCP, or FCP. +; +; Because of the way the command scanner works, once wheel protection is +; implemented in the CCP, there is no further code penalty in protecting RCP +; commands. Therefore, we recommend protecting all possibly sensitive +; commands or none. + +wcled equ no ; CLED +wcp equ yes ; CP +wdir equ no ; DIR +wera equ yes ; ERA +wlist equ yes ; LIST +wpeek equ yes ; PEEK +wpoke equ yes ; POKE +wport equ yes ; PORT +wprot equ yes ; PROT +wquiet equ no ; QUIET +wreg equ yes ; REG +wren equ yes ; REN +wspop equ yes ; SPOP +wtype equ yes ; TYPE +whrc equ no ; H + +wheel defl wcp or wdir or wera or wlist or wpeek or wpoke or wport +wheel defl wheel or wprot or wreg or wren or wtype or whrc + +;============================================================================= +; +; C O M M A N D O P T I O N S +; +;============================================================================= + +; Options affecting several commands + +; DSORT includes code to sort file entries for the D, TYPE, LIST, ERA, +; and PROT commands. + +dsort equ yes + +; LEFTRIGHT affects the COPY and RENAME commands. If yes, add code to allow +; CP and REN operations work from left to right, and CP to accept a +; single filespec as its source. +; Examples: +; B0>ren b1:old.nam new.nam Renames B1:old.nam to B1:new.nam +; B0>cp a15:that.fil Copies A15:that.fil to B0: +; B0>cp source.fil dest.fil Copies source.fil to dest.fil + +leftright equ yes + +; If LEFTRIGHT is yes, setting TESTEQ to yes also allows CP and REN commands +; to be processed from right to left if they contain an equal sign ("="). +; Costs 11 bytes. +; Example: +; B0>cp dest.fil=source.fil Copies source.fil to dest.fil + +testeq equ yes + +;----------------------------------------------------------------------------- + +; 'CLS' command + +; This command clears the console screen. It can either use a fixed string +; (for shorter code if the same terminal is always used) or use the TCAP +; entry for automatic adaptation to any terminal. + +clstcap equ true ; Use TCAP for clear-screen string + +; If CLSTCAP is not enabled, then the string below must be provided and +; it must end with a character with the high bit set + + if not clstcap +clsstr macro + db 'Z'-'@'+80h ; Control-Z to clear screen + endm + endif ;not clstcap + +typecls equ true ; Clear between screens when typing files + +;----------------------------------------------------------------------------- + +; 'CP' command + +; This command copies a single file. The destination file can have a different +; name from the source file. Set the size of the memory buffer in K below (do +; not change the second definition). The copy buffer is placed at the top of +; the TPA, where it will generally not interfere with subsequent use of the GO +; command to rerun a program loaded in the TPA. + +cpblocks defl 16 ; Size of copy buffer in K + +cpblocks defl cpblocks * 8 ; Convert to number of records + +; If you will be using a BDOS or RSX which supports new functions 102 (Get +; Stamp) and 103 (Set Stamp), set STPCALL to true, and datestamps of files +; will be preserved across copies. The "last access" stamps of both copies +; are set to the time the copy took place if access stamping is enabled. + +stpcall equ true ; Copy file stamps with functions 102/3 + +;----------------------------------------------------------------------------- + +; 'DIR' command + +; This command displays a sorted listing of the files in a directory. The +; file name buffer is allocated at the top of the TPA so as not to modify +; any program loaded in low memory. Consequently, the size of the buffer +; must be set in advance. + + +maxdirs equ 256 ; Maximum number of names in directory buffer + +nosys equ yes ; suppress 'A' and 'S' options if wheel off + +slashchk equ yes ; allow "DIR /S" or "DIR /A" formats (costs + ; about 12 bytes) + +allflag equ 'A' ; Option character for showing + ; all file (both SYS and DIR) +sysflag equ 'S' ; Option character for showing + ; SYS files only +sortnt equ yes ; Sort file by name then type +wide equ yes ; Make display for 80-column screen +fence equ '|' ; Character to use as fence between columns + ; ..if WIDE is false. + +;----------------------------------------------------------------------------- + +; 'ECHO' command + +; This command sends characters to the console or list device. If ECHOLST is +; enabled, then code is included for sending characters to the LST device. +; Characters normally go the the console device and are normally upper or lower +; case depending on the setting of UPCASE. The command line can have special +; command sequences to toggle the case of the output and to change the +; destination between the console and printer. Any other character following +; the command character will be sent as is. For the normal setting of the +; equates below (upcase/yes, cmdchar/%, prtchar/P, crtchar/C, lcasech/>, +; and ucasech/<) an example command line would be: +; A0:ROOT>ECHO T%>HIS IS A TEST^M^J^IDONE%PONE, TWO, %' ; Character after CASECHAR that toggles + ; subsequent output to lower case + +; ---------------------------------------------------------------------------- + +; 'H' command + +; This command displays a list of the resident commands implemented in the +; system. FCP, CPR, and RCP commands can be displayed. The basic command is +; not optional; it is always included. + +listcpr equ yes ; Include list of CPR-resident commands in + ; display (highly recommended) + +listfcp equ yes ; Include list of FCP-resident commands in + ; display (recommended if there is room) + +noshow equ yes ; Suppress listing commands that are wheel- + ; restricted unless wheel byte is set (i.e., + ; don't show commands that won't run) + +cmdsline equ 5 ; Number of commands on each line of display + +cmdspace equ 8 ; Space in display for each command name + +;----------------------------------------------------------------------------- + +; 'LIST' and 'TYPE' commands + +pgdflt equ yes ; Default to paging of console output + +pgdflg equ 'P' ; Character to toggle paging status + +;---------------------------------------- + +; 'PEEK' command + +peekhdr equ yes ; Label columns in PEEK display + +peekbdr equ yes ; Include line of hyphens under labels + +peekchk equ yes ; If yes, the ending address will be tested to + ; prevent overflow past FFFF (costs 5 bytes) + +peeklen equ 127 ; Display 1 record (128 bytes) as default. + ; PEEK displays in increments of 16 bytes. + ; You may set PEEKLEN for 0 to 65525. + +;---------------------------------------- + +; 'S' command + +; Print disk space with other commands (recommended) + +dirsp equ true ; Show space after DIR +erasp equ true ; Show space after ERA +cpsp equ true ; Show space after CP +resetsp equ true ; Show space after R + +;---------------------------------------- + +; 'WHL' command + +whlquiet equ false ; If true, don't report wheel state with + ; .."WHL password" command (costs 1 byte) + +wpass macro + db 'SYSTEM ' + endm + +;---------------------------------------- + +; 'CLED' command +; +; Command line editing takes place in the line buffer. It does not take up +; room in the RCP. The editor will handle a 255 byte line. Although that +; is larger than the maximum command line size, it allows you to edit a long +; line without deleting something first. The history is kept inside the RCP, +; so its size will depend upon how many other RCP commands are enabled. +; HISTSIZE should be at least as large as the multiple command line buffer +; (204 bytes). + +lbufwid equ 255 ; Line buffer size, byte +histsize equ 204 ; History buffer size, word + +; CLERA controls whether to null the internal history when CLED is exited, or +; to leave it for the next run. Secure systems will want to set it to YES. + +clera equ no ; Erase history on terminating shell + +; CLMIN sets the cutoff for discarding short lines from history recording. +; A setting of 3 would discard a command such as DIR. + +clmin equ 5 ; Discard lines which do not exceed this + +clins equ yes ; Initial insert state ON +clsav equ yes ; Initial history recording ON + +; The appearance of the command line prompt may include the system time if a +; DateStamper or ZS/ZDDOS clock is implemented. The DU:DIR separator character +; can be changed to indicate that CLED is running. + +dudir_sep equ '/' ; DU:DIR separator char +puser0 equ no ; Print user #0 in prompt +systime equ yes ; Include system time in prompt + + if systime +civtim equ yes ; Yes for 12-hr civil time vs. 24-hr military +timesep equ '.' ; Separator between hours and minutes + endif + +; The editor must use EREOL. The VLIB routine to send the EREOL sequence +; to the terminal needs to test for a video delay and the presence of the "/" +; quote character. Most terminals can just print the TCAP sequence as is. If +; that doesn't work, set ERLQUICK to NO. If you are using only one terminal, +; it will be most efficient to set ERLTCAP to NO and use the CLR_EOL macro. + +erltcap equ yes ; Use TCAP routine vs macro + + if erltcap +erlquick equ yes ; Use simplified TCAP routine + else + +clr_eol macro ; Define terminal specific string + dc 1bh,'T' ; ...set high bit on last character + endm + + endif ;erltcap + +;----------------------------------------------------------------------------- + +; Command names + +; The CTABLE macro, which constructs the command dispatch table, includes a +; line for each command, the first parameter of which is the name of the +; command. These names may be changed if you wish. But make sure that you +; do not use a name that is longer than the maximum allowed length. If you +; do, the name will be truncated and a nonfatal error will occur during +; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower +; case letters will be converted to upper case. The macro COMMAND is defined +; in Z34MAC.LIB. + +cmdsize equ 4 ; Length of each command name + +cmdtbl macro + command CLED, cledon, wcled, cled + command CLS, clson, false, cls + command CP, cpon, wcp, copy + command D, diron, wdir, dir + command ECHO, echoon, false, echo + command ERA, eraon, wera, era + command H, true, whrc, clist + command LIST, liston, wlist, list + command NOTE, noteon, false, note + command P, peekon, wpeek, peek + command POKE, pokeon, wpoke, poke + command PORT, porton, wport, port + command PROT, proton, wprot, att + command Q, quieton,wquiet, quset + command R, reson, false, reset + command REG, regon, wreg, register + command REN, renon, wren, ren + command SP, spaceon,false, space + command SPOP, cledon, wspop, shpop + command TYPE, lton, wtype, type + command WHL, whlon, false, whl + endm + +; END Z34RCP.LIB + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp11.doc b/Source/BPBIOS/Z34RCP11/z34rcp11.doc new file mode 100644 index 00000000..92195c5d --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp11.doc @@ -0,0 +1,429 @@ + + ZCPR Version 3.4 Resident Command Package + Source Code + + Revised Documentation for Version 1.1 + October 7, 1989 by Carson Wilson + + Version 1.0 Documentation + June 17, 1988 by Carson Wilson + + + Contents + -------- + + 1. Files in this Library. + + 2. Purpose of the Resident Command Package. + + 2.1. "Resident" vs. "Transient" Commands. + + 2.2. The Z-System Resident Command Package. + + 2.2.1. Design Philosophy of the Z34 RCP. + + 3. Structure and Operation of the RCP Segment. + + 4. Generating an RCP for your System. + + 4.1. The Z-Relocatable Approach. + + 4.1.1. NZCOM and JetLDR. + 4.1.2. Z-Relocatable (ZRL) Code + + 4.2. The Assembly Approach. + + 4.2.1. Note on Assemblers. + 4.2.2. Assembly to Absolute Code. + 4.2.3. Assembly to Z-Relocatable Code. + 4.2.4. Adding Custom Commands to Z34RCP. + + 5. Legal Use of These Files. + + + +1. Files in this Library. + +This library of files contains the assembler source code and +accompanying documentation for the Z-System Resident Command +Package (RCP). To use Z34RCP you must be running ZCPR versions +3.3 or above. For pre-assembled Z-Relocatable (ZRL) RCPs, see +RCPZRL11.LBR. Z34RCP11.LBR consists of the following files +(uncompress with UNCR.COM, QL.COM or LBRE.COM): + +CLEDINST.CZM - Installer for CLED command. +CLEDSAVE.CZM - Command file utility for CLED. +RCPCLED .DZC - Documentation on CLED. +RCPBASE .LZB - Used to assemble an absolute address RCP. +RCPCMD .LZB - Used to include custom commands in the RCP. +RCP?????.LZB - Code modules for the standard RCP commands. +SYSDEF .LZB - Commonly used equates. +Z34CMN .LZB - Used to assemble Z-Relocatable RCP's. +Z34DEFN .LZB - Offsets in the ZCPR 3.4 code. +Z34MAC .LZB - Assembler macros. +Z34RCP11.DZC - This file. +Z34RCP11.FOR - Short description of the library. +Z34RCP11.HZP - Help file for the RCP, gives command syntax and + examples. +Z34RCP .LZB - Used to select features when assembling the RCP. +Z34RCP11.NZW - Changes since Z34RCP10.LBR. Intended for former + RCP users, this will be only of passing interest + to new users. +Z34RCP11.ZZ0 - Main file for assembling the RCP. +ZSYSTEM .AZ - General information about Z System. + + +2. Purpose of the Resident Command Package. + + 2.1. "Resident" vs. "Transient" Commands. + +Most of the commands used under CP/M and Z-System are "transient" +commands. The machine code for these commands (or "programs") is +stored in "command files," whose file type is normally .COM. +Thus, the machine code for WordStar is stored in a file called +"WS.COM". + +To run WordStar, the user issues the command "WS" at the command +line, the operating system loads WS.COM from the disk drive to +memory, and WS.COM takes over control of the computer. If the +user then exits WordStar and issues another command, the +operating system can load another command file from the disk, +reusing the area of memory previously occupied by WordStar. + +Recycling memory in this way makes personal computers quite +versatile, as the number of commands available to the user is +only limited to the number of command files stored on disk. +There are some drawbacks to this approach, however. Although +disk-based commands conserve memory by recycling it, they must be +loaded from disk each time they operate. This creates its own +costs in terms of speed of execution, disk storage space, and +memory reallocation. + +The most obvious disadvantage of loading a file from disk each +time a command is issued is that it takes time to find and load +disk files. Especially with floppy diskettes, the amount of time +which elapses after the command is issued and before the command +executes is significant. A second drawback to disk-based +commands is that commands will not execute unless their machine +code is available on the disk system. This means that the user +must know what command files are available on disk before issuing +commands. The final disadvantage of disk file based commands is +that some commands (e.g., SAVE) require that the area of memory +normally overwritten by command files (known as the "Transient +Program Area" or TPA) be preserved. + +In answer to these difficulties, the creators of CP/M designed +some of its commands as "built-in" commands. The DIR, REN, SAVE, +ERA, USER, and TYPE commands of CP/M 2.2 remain in memory and can +be issued without loading machine code files from disk. Thus, +the DIR command provides a disk directory regardless of whether +the command file "DIR.COM" is present on disk, and the SAVE +command saves the contents of memory at 100 hex to a disk file. +Residing permanently in memory, these commands are simple in +order to leave memory for disk-based commands to load in. + + 2.2. The Z-System Resident Command Package. + +The creators of Z-System have followed the resident command +philosophy of CP/M, extending and enhancing the capabilities of +resident commands with the Z-System Resident Command Package. +Under CP/M 2.2, resident commands are tightly integrated with the +operating system. The user is therefore limited to a fixed set +of resident commands. The code in the Z-System Resident Command +Package is much more loosely linked with the operating system. + +The RCP occupies a section of protected memory, but how that +memory is used is only very loosely constrained. The Z-System +resident command package may be tailored for a wide variety of +installations, and easily altered within a single installation. + + 2.2.1. Design Philosophy of the Z34 RCP. + +Though any set of commands which will fit in the RCP memory area +can be loaded as an RCP, a standard set of Z-System RCP commands +have evolved over the years. Distributed as the standard +Z-System RCP, this set of commands consists of universal, +single-purpose commands modeled after the resident command set of +CP/M 2.2, such as DIR, REN, and ERA. + +Keeping these commands simple both conserves memory and allows +their use in custom command scripts. None of the standard RCP +commands require interaction on the part of the user--they +perform a single function and quit. Aliases or other command +scripts which build complex commands from simple RCP commands +therefore retain complete control over the user interface. + +However, the standard RCP forms only one of many alternative uses +to which the Z-System RCP memory segment may be put. Since the +RCP memory is protected, it can be used by background programs +which continue to function even while other applications have +been loaded into the transient program area. Several such +programs, including key-redefiners, screen-trapping programs, +background numeric calculators, program assembly environments, +and memory utilities have been developed. + +Until Z34RCP, all but the most advanced users had to surrender +their entire RCP to use the custom commands, even if the commands +needed far less than the available RCP space. Thus, to use a +key-redefinition RCP, one was forced to give up all of his other +RCP commands. Z34RCP solves this problem by acting as a base to +which programmers may easily add code. By modifying the standard +file RCPCMD.LIB, programmers can implement and distribute custom +RCP commands which may be installed by those with only basic +knowledge of assembly language. See "Adding Custom Commands," +below, for details. + + +3. Structure and Operation of the RCP Segment. + +Typically, the Resident Command Package occupies 2 kilobytes of +memory, protected above the system's Basic Input Output System +(BIOS). Its internal structure is very simple, consisting of the +five byte string "Z3RCP", a table of command names and their +addresses within the RCP, and the machine code of the commands +themselves. This means that an RCP of a given length can contain +any number of resident commands which will fit in 2k, from one +large program to many shorter programs. + +Further, since the RCP is independent of the rest of the +operating system, the resident commands may be changed at will. +On system startup, a default RCP is loaded into memory. +Thereafter the RCP's commands remain active until the system is +turned off or another RCP is loaded. + +Using loader programs to load the RCP to memory allows another +important ability--it can exchange RCPs during a single session. +By allowing users to change their RCPs "on-the-fly," loader +programs provide some of the benefits of transient commands even +while preserving the benefits of resident commands. In fact, +even what portion of memory is allocated to the RCP can be +altered in this way by advanced users! (see the Z-System User's +Manual for more on this). + + +4. Generating an RCP for your System. + +Since Z80 computers come with a wide variety of operating system +environments, it is impossible for a single segment of machine +code function as a universal RCP. Due to differences in +operating system and hardware design, the size and location of +memory available to the Z-System RCP vary widely. Until +Z34RCP, this meant that each type of Z80 computer required an RCP +segment assembled specifically for that computer. + +Now, however, there are two basic means by which you may generate +an RCP for your system. The simplest route is to load already- +assembled Z-Relocatable code modules. This technique is +recommended for beginners and those with little experience in +assembly language. See RCPZRL11.LBR for pre-assembled RCP +modules. For more experienced users with an interest in +customizing or their RCPs or adding their own commands, custom +assembly of the files in this library is also an option. + + 4.1. The Z-Relocatable Approach. + + 4.1.1. NZCOM and JetLDR. + +LDR.COM, the familiar Z-System segment loader first introduced by +Rick Conn as a means of loading the various segments of the ZCPR +environment from disk to memory, required that system segments be +assembled to run only at system-specific addresses. For example, +if the system's RCP started at FA00 hex, only an RCP assembled to +run at that starting address would function on the system. +Therefore, separate SYS.RCP files were needed for each computer +installation. + +Thanks to several advanced loader utilities, namely NZCOM by Joe +Wright and JetLDR and Z3PLUS by Bridger Mitchell, custom- +assembling an RCP for a given target machine is no longer +necessary. These three programs can load specially assembled RCP +segments (known as Z-ReLocatable or "ZRL" segments) to any area +of memory. Z-System users now need only obtain previously +assembled RCP segments, much as they need only obtain assembled +.COM or .OBJ files to run transient programs. + +Using information in the system's environmental descriptor, +advanced loaders load pre-assembled segments to the proper +addresses in any system. The only remaining constraint is the +amount of memory allocated to the RCP. While the standard RCP +size is 2 kilobytes, many Z-System installations vary +considerably from this standard, so it is still necessary to +ensure that a ZRL segment does not exceed available RCP memory. +Fortunately, this is taken care of automatically by the advanced +loader programs. + +Using NZCOM or JetLDR, it is possible to load an RCP directly +from RCPZRL11.LBR. See NZCOM or JetLDR documentation for full +instructions on how to load Z-Relocatable RCPs with these +programs. + + 4.1.2. Z-Relocatable (ZRL) Code + +The technique used by NZCOM and JetLDR to load a single RCP to +any address in memory involves relocatable code. Relocatable +code has been used for years by the "linker" programs available +to assembly language programmers. Since only portions of a given +Z80 machine code routine are specific to one memory address, it +is possible to create "relocatable" files of Z80 routines (known +by their file type .REL) containing all but the address-specific +codes. These files can then be very quickly relocated (or +"linked") by a linker program to operate at any memory address. + +Z-Relocatable code is simply a more sophisticated form of +relocatable code. ZRL files contain separately labeled segments, +known as "named common blocks." Where normal relocatable code is +all linked to operate at one address at a time by the linker +program, named common blocks allow the linker to distinguish +between different sections of the file and to link each "block" +to operate at a different address. + +This represents a major step forwards in user convenience, and +will certainly lead to more innovative work using the ZCPR system +segments. There is a minor drawback, however, inherent in the +form of assembly required by NZCOM and JetLDR. Before the advent +of these two programs, system segments were equivalent to .COM +files which were assembled to operate at addresses other than the +standard 100 hex. The ability to load a single system segment to +any address depends partially on the form of the assembled system +segment itself. + +While public domain assemblers will produce absolute object +files, more sophisticated assemblers, such as SLR's Z80ASM (a +bargain at $50) are required to assemble code with named common +addresses. NZCOM and JetLDR thus greatly reduce the time needed +by most users to install Z-System segments, but those wishing to +assemble Z-Relocatable segments will probably need a commercial +assembler. + + 4.2. The Assembly Approach. + +Those with knowledge of assembly language may opt to assemble +their own custom RCPs, including only the commands and options +which match their exact requirements. Z34RCP.LBR contains the +complete source to the ZCPR 3.4 RCP. The file Z34RCP.Z80 +contains include statements to combine the various library files +during assembly. The file Z34RCP.LIB contains all of the equates +controlling assembly time options, and should be edited before +assembling Z34RCP.Z80. + + 4.2.1. Note on Assemblers. + +The development work on Z34RCP was done exclusively with the SLR +Systems line of Z80 assemblers. Hence, some of the source code +is unavoidably specific to SLR and compatible assemblers. Those +using incompatible assemblers such as public-domain Z80 +assemblers should set the SLR equate in Z34RCP.LIB to FALSE. +This removes most SLR-specific pseudo-ops, but some additional +editing of the source files may be required for error-free +assembly. Unless your assembler can handle named common blocks, +you will also want to set the ZRL equate in Z34RCP.LIB to FALSE. + + 4.2.2. Assembly to Absolute Code. + +If you are assembling a custom RCP for use at one memory address +only, or if your assembler can't handle named common blocks, you +can set the ZRL equate in Z34RCP.LIB to FALSE, and instruct your +assembler to produce absolute code (either a .HEX or a .COM file). + +Before generating absolute code you must set addresses in the +file RCPBASE.LIB for the particular installation. Once you have +set these addresses, you may proceed to assemble Z34RCP.Z80 to +either Z34RCP.COM or Z34RCP.HEX. If your assembler generated a +.HEX file, use LOAD.COM to convert Z34RCP.HEX to Z34RCP.COM. + +If you are running a version of ZCPR prior to 3.4, you must now +alter two bytes in your Z-System environment segment to point to +your system's CCP address. The bytes at offset 39 and 40 hex +(formerly containing "width of printer 2" and "lines on printer +2") should contain a 2-byte address of your system's CCP, most +significant byte last. + +Z34RCP.COM may now be renamed to SYS.RCP and loaded with the Z- +System loader program LDR.COM or Bridger Mitchell's JetLDR. + + 4.2.3. Assembly to Z-Relocatable Code. + +Unlike absolute RCP segments, Z-Relocatable segments may be +loaded to ANY address, provided enough RCP space to contain them +is available. To assemble a Z-Relocatable RCP, you will need an +assembler which can handle named common blocks (see 4.2.1 above). +Set the ZRL equate in Z34RCP.LIB to TRUE, and instruct your +assembler to produce a relocatable (.REL) file. The resulting +Z34RCP.REL may then be renamed to Z34RCP.ZRL and loaded with +NZCOM, Z3PLUS, JetLDR. + + 4.2.4. Adding Custom Commands to Z34RCP. + +As mentioned above, I have designed Z34RCP as a base to which +custom RCP commands may readily be added. All code and command +names for custom commands may be included in RCPCMD.LIB. +Thereafter, whenever the RCP is assembled the commands added to +RCPCMD.LIB will be included automatically. To remove the custom +commands, just replace the modified RCPCMD.LIB with an unmodified +copy. See RCPCMD.LIB for detailed instructions on how to add +code and command names. + +RCPCMD.LIB also facilitates distribution of custom commands to be +included by others in their RCPs. Simply distribute a copy of +your modified RCPCMD.LIB along with instructions on how to use +your custom commands. Users may then easily include the new +commands by substituting your modified RCPCMD.LIB for their +original copy and reassembling their RCPs. + +Of course, users of NZCOM, Z3PLUS, or JetLDR may simply trade +custom RCPs in Z-Relocatable form and dispense with the need for +any assembly work on the part of the user. All three of these +advanced loaders are available from Z Systems Associates (see +below). + + +5. Legal Use of These Files. + +Z34RCP is copyright 1989 by Z Systems Associates (ZSA), all +rights reserved. Any commercial use of Z34RCP, defined as any +situation where the duplicator recieves revenue by duplicating or +distributing Z34RCP by itself or in conjunction with any hardware +or software product, is expressly prohibited unless authorized in +writing by ZSA. + +Except for the file RCPCMD.LIB (see 4.2.4 above), you may +redistribute Z34RCP.LBR in its present form only. I encourage +you to explore the source code, suggest improvements, and +document errors. However, please obtain permission from Z +Systems Associates before redistributing any of these files in +altered form. This will prevent confusion by allowing your work +to be coordinated with the efforts of others. + +The Z Systems Associates are: + + Sage Microsystems East + Selling & Supporting the Best in 8-Bit Software + 1435 Centre St., Newton Centre, MA 02159-2469 + Voice: 617/965-3552 (9:00am - 11:30pm) + Modem: 617/965-7259 (password = DDT)(MABOS on PC-Pursuit) + +and: + + Plu*Perfect Systems + "==World-Class Software" + 410 23rd Street, Santa Monica, CA 90402 + Voice: 213/393-6105 (evenings) + Modem: 213/670-9465 (leave message for "Bridger Mitchell") + +For more information on Z System, check at the above bulletin +board systems, or consult The Computer Journal for excellent +articles on ZCPR and CP/M. The Computer Journal is published six +times a year by Publishing Consultants, 190 Sullivan Crossroad, +Columbia Falls, MT 59912, phone 406/257-9119. An issue averages +forty pages with few ads. Subscription rates are $16 for one +year (6 issues), or $28 for two years (12 issues) in the U.S., +$22 for one year Canada and Mexico, and $24 (surface) for one +year in other countries. + + +Carson Wilson is the operator of: + + Antelope Freeway Remote Access System + Chicago, 312-764-5162 + 300-1200-2400 Baud, 24 Hours + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp11.for b/Source/BPBIOS/Z34RCP11/z34rcp11.for new file mode 100644 index 00000000..c60e1910 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp11.for @@ -0,0 +1,7 @@ +Z-System Resident Command Package (RCP) in source code form, version +1.1. Complete Z80 source code to the RCP plus documentation, for +ZCPR versions 3.3 and above. Adds several exciting new commands and +features and fixes various bugs in the previous release. See +companion file RCPZRL11.LBR for pre-compiled RCP modules which may +be loaded with NZ-COM, Z3PLUS, or JetLDR. + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp11.hlp b/Source/BPBIOS/Z34RCP11/z34rcp11.hlp new file mode 100644 index 00000000..991d5d71 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp11.hlp @@ -0,0 +1,390 @@ + The RCP Commands + CLED/SPOP Command Line Editor  + CLS Clear the CRT screen  + CP Copy a File  + D Display Directory  + ECHO Echo Command Tail  + ERA Erase Files  + H Display Available Commands  + LIST/TYPE Display a File on Printer/CRT + NOTE Comment  + P/POKE Display/Alter Memory  + PORT Input/Output to system ports  + PROT Protect Files  + Q Alter or Query the Quiet Flag + R Reset Disk  + REG ZCPR3 Register Display/Alter  + REN Rename a File  + SP Display Disk Space Remaining  + WHL Alter or Query Wheel Byte  +:Thå RCÐ Commands + + + Thå   standarä ZCPR³ Systeí Residenô Commanä  Packagå  (RCP© +distributeä  witè thå ZCPR³ systeí containó á numbeò oæ  residenô +commandó  whicè  maù bå enableä (dependinç oî systeí  memorù  anä +securitù  characteristics©  aô thå discretioî oæ  thå  installer® +Usagå oæ thå RCÐ commandó ió describeä iî thió HELÐ file. + + Thå  RCÐ commandó residå iî memorù ratheò thaî beinç  loadeä +froí  disk¬ anä thereforå operatå verù efficientlù anä arå  disë­ +independent®   Oî thå otheò hand¬ duå tï memorù constraints¬  thå +RCÐ commandó arå ofteî lesó powerfuì thaî theiò transienô prograí +counterparts® + + + + Iæ aî erroò occurs¬ thå RCÐ commandó generallù chaiî tï  thå +installeä erroò handler¬ providinç á detaileä reporô oæ thå erroò +anä  allowinç thå commanä tï bå editeä oò aborted® Iæ  nï  erroò +handleò  ió  installed¬  thå commanä whicè causeä  thå  erroò  ió +echoeä tï thå screen¬ followeä bù á questioî mark. + + Alì RCÐ commandó arå installatioî-dependent¬ anä manù maù bå +configureä  aô  assemblù timå tï perforí  iî  slightlù  differenô +ways®   Thå  exampleó giveî iî thió HELÐ filå arå  baseä  oî  thå +distributeä seô oæ options® Seå sourcå codå filå Z34RCP.LIÂ  foò +morå detailó oî commanä anä optioî selection. + +:CLED anä SPOÐ Commands + Transient Counterparts: LSÈ anä SPOP + + Thå  CLEÄ commanä invokeó á speciaì prograí  whicè  provideó +WordStaò-likå editinç oæ commandó aô thå systeí prompt® Iô  alsï +allowó yoõ tï recalì thå lasô severaì commandó invokeä witè  onlù +onå keystroke® Finally¬ iæ available¬ CLEÄ displayó thå  currenô +systeí timå tï thå lefô oæ youò prompt® Thå syntaø is: + + CLED - invoke as shell + CLED / - invoke for next command only + + + + Thå SPOÐ commanä "pops¢ thå toð shelì froí thå shelì  stack¬ +sï thaô iô nï longeò loadó afteò everù command® Thió commanä  ió +rarelù  needed¬  anä ió includeä onlù witè versionó  oæ  thå  RCÐ +includinç CLEÄ (seå above)® Thå syntaø ió simply: + + SPOP +:CLS Command + Transient Counterpart: None + + Thå  CLÓ  commanä  clearó  thå  terminaì  screen¬   removinç +displayó  whicè  mighô  havå beeî lefô bù  previouó  commandó  oò +programs® Thå syntaø is: + + CLS + +:CP Command + Transient Counterpart: MCOPY + + Thå  CÐ  commanä copieó onå filå froí onå DÕ tï  anotheò  oò +intï  thå samå DÕ undeò á differenô name® Iæ functionó 10²  (geô +stamp©  anä 10³ (seô stamp© arå supporteä bù aî RSØ oò DOS¬  filå +datestampó arå preserveä acrosó copies® Thå syntaø is: + + CP dir:ufn1 dir:ufn2 -- ufn1 to ufn2 + CP dir:ufn1 -- ufn1 to current dir: + CP dir:ufn2=dir:ufn1 -- ufn1 to ufn2 + + Examples: + + CP f1.txt f2.txt + CP b0:f1.txt a15: + CP root:f1.txt + +:D Command + Transient Counterpart: DIR, XD, XDIR + + Thå   Ä   commanä  displayó  thå  directorù  oæ   fileó   iî +alphabeticaì ordeò acrosó thå lineó tï thå user® Thå syntaø is: + + D dir:afn.aft o + D .aft o + D /o + + Options (wheel only) are: + + S - Display System Files Only + A - Display Both Non-System and System Files + + Examples: + + D /a + D root:myfile.txt Š D .com + +:ECHO Command + Transient Counterpart: ECHO + + ECHÏ   ió usefuì iî issuinç botè messageó (tï thå  user¬ +saù withiî á commanä filå durinç execution© anä escapå sequences® +Bù  uså oæ thå %¾ anä %¼ parameters¬ ECHÏ caî senä itó outpuô  iî +combinationó  oæ uppeò anä loweò case® Bù uså oæ thå %Ð  anä  %Ã +parameters¬  ECHÏ  outpuô  caî  bå  toggleä  betweeî  screeî  anä +printer®   ECHÏ  useó  BIOÓ  calls¬  sï  alì  controì  characteró +(entereä aó ^character© arå passeä exactly® Hence¬ consolå-leveì +programminç oæ sucè deviceó (CRTó anä printers© ió possible. + + Examples: + ECHO %Pthis is a test%Cof echo%P + -- "THIS IS A TEST" goes to the printer + "OF ECHO" goes to the console + (trailing %P flushes printer buffer) + + ECHO t%>his is a % + prtdec ,%recs,,%bytes, + prtdec ; Trailing CRLF + endm + + else ; Non-SLR assemblers +include macro filename + $include filename&.lib + endm + endif ; SLR + + + if ZRL + +; ============================================================================= + +; J e t L D R I D S E C T I O N + +; ============================================================================= + +; Macro to build ID block message for JetLDR. Max. length is ~256 chars. + +optcnt defl 0 ; Options counter + +option macro string1,enable1,string2,enable2 + + if enable1 ;; Skip if command not present + if [optcnt mod 4] eq 0 + db cr,lf ;; New line every four options + endif + optcnt defl optcnt + 1 ;; Increment options counter + count defl 0 ;; Initialize character count + + irpc char,string1 ;; Count and define characters + count defl count + 1 + db '&char' + endm ; irpc + + if not nul enable2 ;; Sub-option label present + if enable2 ;; Sub-option enabled + db ' (' ;; Begin sub-opt description + irpc char,string2 ;; Count and define characters + count defl count + 1 + db '&char' + endm ; irpc + db ')' ;; End sub-opt description + count defl count + 3 ;; For ' ()' + endif ; enable2 + endif ; not nul enable2 + + if [optcnt mod 4] ne 0 + count defl 11 - count + rept count + db ' ' ;; Pad to 11 spaces + endm ; rept + endif ; [optcnt mod 4] ne 0 + + endif ; enable1 + endm ; option macro + +; --------------------------------------------------------- + + COM /_ID_/ ; JetLDR ID block + db 'Copr. 1989 ZSA. Enabled Commands:' + option Cled,cledon + option Cls,clson,TC,clstcap + option Cp,cpon,stp,stpcall + option Dir,diron,sp, + option Echo,echoon,lst,echolst + option Era,eraon,sp, + option Help,true + option List,liston + option Note,noteon + option Peek,peekon,hdr,peekhdr + ; option Poke,pokeon,q,pokeq + option Poke,pokeon + option Port,porton + option Protect,proton + option Quiet,quieton + option Register,regon + option Rename,renon + option Reset,reson,sp, + option Space,spaceon + option Spop,cledon + option Type,lton,cls, + option Wheel,whlon,q,whlquiet + db 0 ; ID string terminator + +;============================================================================= +; +; E N T R Y C O D E S E C T I O N +; +;============================================================================= + + cseg + else + org z3rcp + endif ; ZRL + +RCPbegin: + db 'Z3RCP' ; Package ID + + include RCPcmd ; Command table and custom commands + + include RCPsubs ; File of subroutines + + include RCPh ; 'H' help (command list) command + +; Include only selected code sections. + + if cledon ; 'CLED' and 'SPOP' commands + include RCPcled + endif ;cledon + + if clson + include RCPcls ; 'CLS' clear screen command + endif ;clson + + if reson + include RCPr ; 'R' disk reset command + endif ;reson + + if spaceon + include RCPsp ; 'SP' space on disk command + endif ;spaceon + + if diron + include RCPdir ; 'DIR' directory command + endif ;diron + + if eraon + include RCPera ; 'ERA' erase command + endif ;eraon + + if renon + include RCPren ; 'REN' rename command + endif ;renon + + if cpon + include RCPcp ; 'CP' file copying command + endif ;cpon + + if echoon + include RCPecho ; 'ECHO' command + endif ;echoon + + if quieton + include RCPquiet ; 'Q' quiet flag + endif ;quieton + + if lton + include RCPlt ; 'LIST' and 'TYPE' commands + endif ;lton + + if proton + include RCPprot ; 'PROT' file attribute setting command + endif ;proton + + if peekon or pokeon or porton + include RCPiom ; 'PEEK', 'POKE', 'PORT' commands + endif ;peekon or pokeon or porton + + if regon + include RCPreg ; 'REG' register operation commands + endif ;regon + + if whlon + include RCPwhl ; 'WHL' command + endif ;whlon + + include RCPid ; Add ID string (must come last) + +RCPend: ; Used to calculate length + end + +; End of Z34RCP.Z80 + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/z34rcp11.z80.sav b/Source/BPBIOS/Z34RCP11/z34rcp11.z80.sav new file mode 100644 index 00000000..7af6b875 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/z34rcp11.z80.sav @@ -0,0 +1,267 @@ + +; Program: Z34RCP +; Description: Resident Command Package (RCP) for ZCPR34 +; Version: 1.3 +; Author: Carson Wilson +; Date: September 13, 1989 +; Changes: Added CLED (command line editor shell) command. +; To save space, JetLDR ID section no longer pads end of each +; line. (JetLDR allows only 256 bytes maximum in its +; description field). + +; Version: 1.2 +; Author: Carson Wilson +; Date: July 9, 1989 +; Changes: Uses spaces instead of tabs in JetLDR displays. +; Copyright now ZSA. + +; Version: 1.1 +; Author: Carson Wilson +; Date: September 14, 1988 +; Changes: RCPID macro called from RCPID.LIB so that the final INCLUDE +; macro call gives total size of the RCP, including the ID +; string, with SLR assemblers. +; Label WHLQ changed to WHLQUIET in Option macro to match +; Z34HDR.LIB equate. + +; Version: 1.0 +; Author: Carson Wilson +; Date: June 15, 1988 + +; Derivation: SYSRCP (Richard Conn) + +; Z34RCP is copyright 1989 by Z Systems Associates. All rights reserved. +; End-user distribution and duplication permitted for non-commercial purposes +; only. Any commercial use of Z34RCP, defined as any situation where the +; duplicator recieves revenue by duplicating or distributing Z34RCP by itself +; or in conjunction with any hardware or software product, is expressly +; prohibited unless authorized in writing by Z Systems Associates. + +;============================================================================= +; +; D E F I N I T I O N S S E C T I O N +; +;============================================================================= + + maclib sysdef.lib ; Common logic, sys, ascii defines + maclib z34defn.lib ; Defines offsets in Z34 command processor + maclib z34mac.lib ; Macros + maclib z34rcp.lib ; Defines command options + + if ZRL + maclib z34cmn.lib ; Defines universal ZCPR named common blocks + else + maclib rcpbase.lib ; Defines addresses for one system + endif + + name RCP11 ; Declare module name + +; ============================================================================ + +; M A C R O S S E C T I O N + +; ============================================================================ + +; Macros to include module file and print module length. +; Under SLR and compatible assemblers, a running account of current RCP +; size and bytes added will be given for each module. +; +; For other assemblers you may have to either modify the non-SLR include +; macro or use a text editor to read in the actual contents of each file +; in place of the include statement. + + if SLR +; +; General purpose macro to display decimal values and messages +; +prtdec macro m1,m2,m3,m4,m5 + .radix 10 ; Decimal output + .printx m1 m2 m3 m4 m5 ; Print to screen + endm +; +; Macro to include modules and display lengths. +; +include macro filename +before defl $ + $include filename&.lib +after defl $ +modlen defl after - before ; Module length +rcplen defl after - RCPbegin ; RCP length +recs defl rcplen / 128 ; ..in records +bytes defl rcplen mod 128 ; ..and additional bytes + prtdec %modlen, + prtdec ,%recs,,%bytes, + prtdec ; Trailing CRLF + endm + + else ; Non-SLR assemblers +include macro filename + $include filename&.lib + endm + endif ; SLR + + + if ZRL + +; ============================================================================= + +; J e t L D R I D S E C T I O N + +; ============================================================================= + +; Macro to build ID block message for JetLDR. Max. length is ~256 chars. + +optcnt defl 0 ; Options counter + +option macro string1,enable1,string2,enable2 + + if enable1 ;; Skip if command not present + if [optcnt mod 4] eq 0 + db cr,lf ;; New line every four options + endif + optcnt defl optcnt + 1 ;; Increment options counter + count defl 0 ;; Initialize character count + + irpc char,string1 ;; Count and define characters + count defl count + 1 + db '&char' + endm ; irpc + + if not nul enable2 ;; Sub-option label present + if enable2 ;; Sub-option enabled + db ' (' ;; Begin sub-opt description + irpc char,string2 ;; Count and define characters + count defl count + 1 + db '&char' + endm ; irpc + db ')' ;; End sub-opt description + count defl count + 3 ;; For ' ()' + endif ; enable2 + endif ; not nul enable2 + + if [optcnt mod 4] ne 0 + count defl 11 - count + rept count + db ' ' ;; Pad to 11 spaces + endm ; rept + endif ; [optcnt mod 4] ne 0 + + endif ; enable1 + endm ; option macro + +; --------------------------------------------------------- + + COM /_ID_/ ; JetLDR ID block + db 'Copr. 1989 ZSA. Enabled Commands:' + option Cled,cledon + option Cls,clson,TC,clstcap + option Cp,cpon,stp,stpcall + option Dir,diron,sp, + option Echo,echoon,lst,echolst + option Era,eraon,sp, + option Help,true + option List,liston + option Note,noteon + option Peek,peekon,hdr,peekhdr + option Poke,pokeon,q,pokeq + option Port,porton + option Protect,proton + option Quiet,quieton + option Register,regon + option Rename,renon + option Reset,reson,sp, + option Space,spaceon + option Spop,cledon + option Type,lton,cls, + option Wheel,whlon,q,whlquiet + db 0 ; ID string terminator + +;============================================================================= +; +; E N T R Y C O D E S E C T I O N +; +;============================================================================= + + cseg + else + org z3rcp + endif ; ZRL + +RCPbegin: + db 'Z3RCP' ; Package ID + + include RCPcmd ; Command table and custom commands + + include RCPsubs ; File of subroutines + + include RCPh ; 'H' help (command list) command + +; Include only selected code sections. + + if cledon ; 'CLED' and 'SPOP' commands + include RCPcled + endif ;cledon + + if clson + include RCPcls ; 'CLS' clear screen command + endif ;clson + + if reson + include RCPr ; 'R' disk reset command + endif ;reson + + if spaceon + include RCPsp ; 'SP' space on disk command + endif ;spaceon + + if diron + include RCPdir ; 'DIR' directory command + endif ;diron + + if eraon + include RCPera ; 'ERA' erase command + endif ;eraon + + if renon + include RCPren ; 'REN' rename command + endif ;renon + + if cpon + include RCPcp ; 'CP' file copying command + endif ;cpon + + if echoon + include RCPecho ; 'ECHO' command + endif ;echoon + + if quieton + include RCPquiet ; 'Q' quiet flag + endif ;quieton + + if lton + include RCPlt ; 'LIST' and 'TYPE' commands + endif ;lton + + if proton + include RCPprot ; 'PROT' file attribute setting command + endif ;proton + + if peekon or pokeon or porton + include RCPiom ; 'PEEK', 'POKE', 'PORT' commands + endif ;peekon or pokeon or porton + + if regon + include RCPreg ; 'REG' register operation commands + endif ;regon + + if whlon + include RCPwhl ; 'WHL' command + endif ;whlon + + include RCPid ; Add ID string (must come last) + +RCPend: ; Used to calculate length + end + +; End of Z34RCP.Z80 + \ No newline at end of file diff --git a/Source/BPBIOS/Z34RCP11/zsystem.ad b/Source/BPBIOS/Z34RCP11/zsystem.ad new file mode 100644 index 00000000..5231a575 --- /dev/null +++ b/Source/BPBIOS/Z34RCP11/zsystem.ad @@ -0,0 +1,97 @@ + + Z System Upgrades CP/M + +Z System is first-rate, state-of-the-art software for your CP/M machine. +ZCPR has been with us for over five years now, and has enhanced computer +productivity for thousands of CP/M users. Z System is now a mature +replacement for CP/M 2.2 or CP/M Plus, yet is "backward compatible" with +almost all programs written for CP/M. This means that you can still run +the CP/M programs you now use, yet take advantage of greatly increased +power and performance at the same time. + +NZ-COM and Z3PLUS form the heart of Z System. They replace the most +visible parts of CP/M 2.2 and CP/M Plus respectively, adding enhanced +command processing, named directories, vastly improved resident +commands, flow control processing, error handling, and much more. But +it isn't necessary to master all of these (at least at first!) to take +advantage of NZ-COM and Z3PLUS. In fact, though both packages come with +several disks of software and excellent manuals, almost anyone can +install either of these packages on their CP/M computer in just a few +minutes' time. The price for either NZ-COM or Z3PLUS is $69.95 plus $3 +shipping. + +The next step up in sophistication for CP/M 2.2 users is ZSDOS. ZSDOS +replaces the less visible portion of CP/M 2.2 which controls program +input and output. Through clever coding and exhaustive testing, the +authors of ZSDOS offer significant improvements in performance, safety, +and versatility for CP/M 2.2, including file time and date stamping, +file archiving for faster backups, public files (accessable from all +user areas), path access to files, and improved error messages and +handling. As with NZ-COM and Z3PLUS, ZSDOS installation is completely +menu-driven. ZSDOS comes with a collection of state-of-the-art utility +programs and a 140 page manual to help you make the most of the extended +features. ZSDOS costs $75 ($60 when purchased with NZ-COM) plus $3 +shipping. + +Another path to system enhancement for CP/M 2.2 users with hard or RAM +disks is available in the form of BackGrounder ii (BGii). BGii allows +you to "suspend" any program at the touch of a button and use a wide +range of resident commands such as DIR, REN, ERA, CALC, or TYPE. Then +hit the button again and BGii quickly returns you to the program you +suspended, right where you left off. Or use BGii's SWAP command and +you're back at the CP/M prompt, ready to run any other CP/M program. +When you're through, SWAP again and BGii returns you to your original +program, exactly as you left it! Advanced "Cut" and "Paste" commands +are also available for many terminals, allowing you to transfer sections +of screen directly from one program to another. Print spooling, +advanced key redefinition and recording capabilities, and a beautifully +designed 140-page user's manual are included. Installation is +menu-driven and easy. BGii is compatible with either ZCPR or CP/M 2.2, +and costs $75.00 plus $3 shipping. + +Last but not least is DosDisk, a small but powerful program which allows +you to read or write DIRECTLY to MS-DOS disks with your CP/M computer. +No more file transfers--simply insert a standard MS-DOS DSDD diskette in +your CP/M machine, type "DosDisk :", and away you go--all files +on the diskette are now accessable by all of your CP/M programs--even +files in MS-DOS subdirectories! DosDisk comes with a handsome 38-page +user's manual, and is available preconfigured for most machines at just +$30.00 plus $3 shipping. DosDisk is compatible with either ZCPR or +CP/M 2.2. + +These and other fine products for CP/M and CP/M Plus are available from +users groups around the country, or directly from Z Systems Associates. +Sizeable discounts for users' groups are also available from Z Systems +Associates through the Z Plan. The Z Systems Associates are: + + Sage Microsystems East + Selling & Supporting the Best in 8-Bit Software + 1435 Centre St., Newton Centre, MA 02159-2469 + Voice: 617/965-3552 (9:00am - 11:30pm) + Modem: 617/965-7259 (password = DDT)(MABOS on PC-Pursuit) + + Same-day shipping of most products with modem download and support + available. Order by phone, mail, or modem. Shipping and handling $4 + per order (USA). Check, VISA, or MasterCard. Specify exact disk format. + +and: + + Plu*Perfect Systems + "==World-Class Software" + 410 23rd Street, Santa Monica, CA 90402 + Voice: 213/393-6105 (evenings) + Modem: 213/670-9465 (leave message for "Bridger Mitchell") + + To order: Specify product, operating system, computer, 5 1/4" disk + format. Enclose check, adding $3 shipping ($5 foreign) + 6.5% tax in + California. Enclose invoice if upgrading BGii or ZRDOS. + +For more information on Z System, check at the above bulletin board +systems, or consult The Computer Journal for excellent articles on ZCPR +and CP/M. The Computer Journal is published six times a year by +Publishing Consultants, 190 Sullivan Crossroad, Columbia Falls, MT +59912, phone 406/257-9119. An issue averages forty pages with few ads. +Subscription rates are $16 for one year (6 issues), or $28 for two years +(12 issues) in the U.S., $22 for one year Canada and Mexico, and $24 +(surface) for one year in other countries. + \ No newline at end of file diff --git a/Source/BPBIOS/dph.lib b/Source/BPBIOS/dph.lib index 72f39fef..1f6021e6 100644 --- a/Source/BPBIOS/dph.lib +++ b/Source/BPBIOS/dph.lib @@ -11,6 +11,11 @@ ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: CSEG + +; Table has been reordered so that hard disk entries come before +; floppy entries. This means that "DRV_A" appears as I: and "DRV_E" +; appears as A:. The point is to allow booting from the first +; hard drive which pretty much needs to be A: DPHTBL: IF DRV_E AND HARDDSK @@ -34,46 +39,46 @@ DPHTBL: DEFW 00 ENDIF - IF DRV_A - DEFW DPH$00 ; Dph for drive A (Floppy) + IF DRV_I AND HARDDSK + DEFW DPH$54 ; Dph for Hard drive Partition I ELSE DEFW 00 ENDIF - IF DRV_B - DEFW DPH$01 ; Dph for drive B (Floppy) + IF DRV_J AND HARDDSK + DEFW DPH$55 ; Dph for Hard drive Partition J ELSE DEFW 00 ENDIF - IF DRV_C - DEFW DPH$02 ; Dph for drive C (Floppy) + IF DRV_K AND HARDDSK + DEFW DPH$56 ; Dph for Hard drive Partition K ELSE DEFW 00 ENDIF - IF DRV_D - DEFW DPH$03 ; Dph for drive D (Floppy) + IF DRV_L AND HARDDSK + DEFW DPH$57 ; Dph for Hard drive Partition L ELSE - DEFW 0 ; Dph for drive D + DEFW 00 ENDIF - IF DRV_I AND HARDDSK - DEFW DPH$54 ; Dph for Hard drive Partition I + IF DRV_A + DEFW DPH$00 ; Dph for drive A (Floppy) ELSE DEFW 00 ENDIF - IF DRV_J AND HARDDSK - DEFW DPH$55 ; Dph for Hard drive Partition J + IF DRV_B + DEFW DPH$01 ; Dph for drive B (Floppy) ELSE DEFW 00 ENDIF - IF DRV_K AND HARDDSK - DEFW DPH$56 ; Dph for Hard drive Partition K + IF DRV_C + DEFW DPH$02 ; Dph for drive C (Floppy) ELSE DEFW 00 ENDIF - IF DRV_L AND HARDDSK - DEFW DPH$57 ; Dph for Hard drive Partition L + IF DRV_D + DEFW DPH$03 ; Dph for drive D (Floppy) ELSE - DEFW 00 + DEFW 0 ; Dph for drive D ENDIF IF DRV_M AND RAMDSK diff --git a/Source/BPBIOS/z33.zex b/Source/BPBIOS/z33.zex index bd8b92d3..ea1e714e 100644 --- a/Source/BPBIOS/z33.zex +++ b/Source/BPBIOS/z33.zex @@ -1,3 +1,3 @@ IOPINIT -LDR SYS.RCP,SYS.NDR,SYS.FCP,WW.Z3T +JETLDR RCP.ZRL,SYS.NDR,FCP.ZRL,MYTERM.Z3T  \ No newline at end of file diff --git a/Source/BPBIOS/z34.zex b/Source/BPBIOS/z34.zex index bd8b92d3..ea1e714e 100644 --- a/Source/BPBIOS/z34.zex +++ b/Source/BPBIOS/z34.zex @@ -1,3 +1,3 @@ IOPINIT -LDR SYS.RCP,SYS.NDR,SYS.FCP,WW.Z3T +JETLDR RCP.ZRL,SYS.NDR,FCP.ZRL,MYTERM.Z3T  \ No newline at end of file diff --git a/Source/BPBIOS/z41.zex b/Source/BPBIOS/z41.zex index 010e3334..aa944b80 100644 --- a/Source/BPBIOS/z41.zex +++ b/Source/BPBIOS/z41.zex @@ -1,4 +1,4 @@ IOPINIT -LDR SYS.NDR,SYS.FCP,WW.Z3T +JETLDR SYS.NDR,FCP.ZRL,MYTERM.Z3T ZSCFG2 CB  \ No newline at end of file diff --git a/Source/Build.cmd b/Source/Build.cmd index ef139f9d..9419b3ce 100644 --- a/Source/Build.cmd +++ b/Source/Build.cmd @@ -4,6 +4,6 @@ setlocal REM setlocal & call BuildDoc || exit /b 1 & endlocal setlocal & call BuildProp || exit /b 1 & endlocal setlocal & call BuildShared || exit /b 1 & endlocal -setlocal & call BuildImages || exit /b 1 & endlocal REM setlocal & call BuildBP || exit /b 1 & endlocal +setlocal & call BuildImages || exit /b 1 & endlocal setlocal & call BuildROM %* || exit /b 1 & endlocal \ No newline at end of file diff --git a/Source/Images/Build.cmd b/Source/Images/Build.cmd index 891419cb..86533ade 100644 --- a/Source/Images/Build.cmd +++ b/Source/Images/Build.cmd @@ -25,4 +25,5 @@ call BuildHD.cmd nzcom ..\zsdos\zsys_wbw.sys call BuildHD.cmd cpm3 call BuildHD.cmd zpm3 call BuildHD.cmd ws4 -call BuildHD.cmd bp + +if exist ..\BPBIOS\bpbio-ww.rel call BuildHD.cmd bp diff --git a/Source/Images/d_bp.txt b/Source/Images/d_bp.txt new file mode 100644 index 00000000..0a5b33c5 --- /dev/null +++ b/Source/Images/d_bp.txt @@ -0,0 +1,31 @@ +# +# Add RomWBW utilities +# +../../Binary/Apps/assign.com 0: +../../Binary/Apps/fat.com 0: +../../Binary/Apps/fdu.com 0: +../../Binary/Apps/format.com 0: +../../Binary/Apps/mode.com 0: +../../Binary/Apps/osldr.com 0: +../../Binary/Apps/rtc.com 0: +../../Binary/Apps/survey.com 0: +../../Binary/Apps/syscopy.com 0: +../../Binary/Apps/sysgen.com 0: +../../Binary/Apps/talk.com 0: +../../Binary/Apps/timer.com 0: +../../Binary/Apps/xm.com 0: +../../Binary/Apps/inttest.com 0: +# +# Add Tune application and sample files +# +../../Binary/Apps/tune.com 3: +../../Binary/Apps/Tunes/*.* 3: +# +# Add ZSystem images +# +../BPBIOS/*.img 0: +../BPBIOS/*.rel 0: +../BPBIOS/*.zex 0: +../BPBIOS/myterm.z3t 0: +../BPBIOS/Z34RCP11/z34rcp11.rel 0:rcp.zrl +../BPBIOS/NZFCP13/nzfcp13.rel 0:fcp.zrl diff --git a/Source/Images/d_bp/u0/FAT.COM b/Source/Images/d_bp/u0/FAT.COM deleted file mode 100644 index 1dd7dccacc7291705175f18e44b0e5d4426afe6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44928 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 Mx60w`;s4hE2dzr%$p8QV diff --git a/Source/Images/d_bp/u0/JETLDR.COM b/Source/Images/d_bp/u0/JETLDR.COM new file mode 100644 index 0000000000000000000000000000000000000000..c33c0738f7b6621c96c3337f82d2ea39ccffd573 GIT binary patch literal 9088 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 literal 0 HcmV?d00001 diff --git a/Source/Images/d_bp/u0/R.COM b/Source/Images/d_bp/u0/R.COM deleted file mode 100644 index fecaa4ac0f8317af918e2a835a36f51d13cb0678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4224 zcmbtXeQXow89(P7C;q;Jt#Z(Y-b>6z9O5`8Ut}aHNr=`hDJY>pmvwO17sti%Wwt{| zM<8YDq*iSIY?GjT{@bbAb=oGRsT8(@j$^t%0%KFHS(~X`Q7r#4v9V>F$e!mte+AH_ zYF3oo`@GNR@A*B?#p=AH?WLp`k$TDa&K<*K`&2Y0k+?V`^^?ibSDd!NXk1JzkdQpP zu;y|qAfvZSLgu5XX@U`pQN-S|OB&{>takL4HGTdN08#ps{riV@jTM7HR%QKUBGgvxo9a)D z54Dx*d`8V^Q=QTOv>|eQZM13xD%l~r1_ZQ^;b=k%rDW(c?E7px3!Lm3$5)P%``vqLL9Ap~1K$h6&|kqqmWW@i2u|LQa4HH6TA^ z4w(^Cp=n5<(ThDN3F+H&z+hSeWsbi+*y#oMy^McrH$1@ufRaW>_Mz7`4A6SI@=A6FHB0TpD1sj*nTLc&6zRse*&j}_50;r93 z!g+ML0W7Xlm%`_tFxKz6)1Y>uY*~Yrn(&y(>9^dPZ;6R422Zn!?=&0Xmzailq%g^v z_USh6_RDn@A>Ye@C>^a6%%)-v`XjD#UouL+Q74>cJJc(6d<}!wX!YYdJe$ksck95N z@4F1Wyo?52HJ|~1J3a5BQInBLG3bfm2lnafxb!vS0L((1)0gX^o$7B;*aV86yK=;! zCvRmi9I)f|Cp2lALOjCzX){`^K-CCuRP~>F{yPkk)@J4ZvWgcCnK^Tb@TcmLfh|^a z$6sO_Ff=Uy0txGYGAz(RbpvfVOQXvYJjVvlv!H15GWsb_Z>jU0Wq~J`SOu!?GVu;0 zF$nj2tAW93ib47ZG_tD?YTA>H{}dtpb4*Zq%!)l@bW- zKo2E&^n719MHx)FQu0{B(_*Vga89X3S~yKD4(#(?f`9<~790OOg9kdLLNCOlx<)<7 zRY>Hd4e~85L3PDdxm+v!p;jr3=ZfNjds*+`_+?zKu=a-O_Vb+w zKw)QP>;m`1D#Jwybv&>OlcmaWjS00B;Bry7>l~0jYC0XTqv)y=zDRZSrn<%81y<33 z6fmSnitUa=hl|?=Iu1rV9l{dR>B(pY)#!jDxdDtsQ8!0dLvafrJ3m4bO~1>b%@R0A zGJ*4R4w|5g28X*&&&O0?DP@y`j3jxvq47EkPvz5xtZ=Osz&4o~eFUiCsJ=XArez#A zEASVn(DP4~ae{tvEvwhu!npAwL2$lc#5UG_dDA1p2c3&S)}+8f2Ub8&f%7o!@FqIw zG)`?4k9|(u?I0=9$#X|pWQX{U)%MDR%j=C?Aw<7T?tHo1k9r5jl4l#9j5a5=!+1;g9-+(x?i zUM_)In7qKkD+2)2T@I=U%)5uT#!FB4TdOXvs=smzKc$q!Qft<Y}8_@E{e)6v`b5y3~J^xS!e@8&&*e`D?-P-UN zIN_Sn8ocz8ziYX>8$KXb`_Z3mwybaRJXE@uvl>j}04xtr&2y{SOzv(bo7t9G`84n0 zH`e4m_KoJe$C4k8Y+IR*WU{~BwvxZ0<&#bJh4*eI@Hcs=nY>;ves>}hFAc8!!cjay zkvf;jDw@m6H}g<1f0lEtS8Ex;#4GcC53*c`$J)RC&SRzT!41x5VfdBRhUJyK@@cP$ zzf8>ipS$z;x6H)u(eXW_gJf@OyFU>02inQzz}D7bDbyP1BJJJ1ojtuBoz2WQdIDrN SA%~=7626#J|Hu7*#s4p+*ixtf diff --git a/Source/Images/d_bp/u0/RSETSIMH.COM b/Source/Images/d_bp/u0/RSETSIMH.COM deleted file mode 100644 index e055f07a9a16d97b2849d970633e74ff226d9173..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ;u;aV@kM$4>qg4aL_7hf34FAFo2+A??ah_#mILXTulv!FaDSCU$k wmYAHXkdmL5s>jQv;*e=B%d=eBu;o~)fF$p;#~M4NxP<%|7#QYB0STf209!g6lmGw# diff --git a/Source/Images/d_bp/u0/TIMER.COM b/Source/Images/d_bp/u0/TIMER.COM deleted file mode 100644 index 83e6e68842ba2f259ef8acde0649e66d73464674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 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 G@c%z+v(K^s diff --git a/Source/Images/d_bp/u0/Z41.ZRL b/Source/Images/d_bp/u0/Z41.ZRL deleted file mode 100644 index ed10dfadce1be4513b38abe9c9947ac8e1928b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6912 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 I|1W?42b(p@&Hw-a diff --git a/Source/Images/d_bp/u0/ZCPR33.REL b/Source/Images/d_bp/u0/ZCPR33.REL deleted file mode 100644 index 7c0a2567317e7d184145252a650170ae13fe22df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2560 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 diff --git a/Source/Images/d_bp/u0/ZS203.ZRL b/Source/Images/d_bp/u0/ZS203.ZRL deleted file mode 100644 index 11be02dd0bc0d634f1f707e9d6a4d56e8e789ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6912 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 BoWTG9 diff --git a/Source/Images/d_bp/u0/ZSDOS.ZRL b/Source/Images/d_bp/u0/ZSDOS.ZRL deleted file mode 100644 index e43d1b0a8839c0cb5cf21c35ac0fd3be3536966e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4224 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 diff --git a/Source/Images/d_bp/u0/z34.rel b/Source/Images/d_bp/u0/z34.rel deleted file mode 100644 index 0e9d52365dce2737f4fe80afa872417b0c7302ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2816 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 AhyVZp