From a173e8667e6f85ae1fcb1dde1dce2705605292f5 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Wed, 13 Oct 2021 20:57:16 -0400 Subject: [PATCH] Updated .PO disk image. --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 2 + auxmem.bytwrd.s | 2 + auxmem.chario.s | 2 + auxmem.gfx.s | 2 + auxmem.hostfs.s | 93 ++-- auxmem.init.s | 2 + auxmem.misc.s | 2 + auxmem.mosequ.s | 2 + auxmem.oscli.s | 2 + auxmem.vdu.s | 1380 ++++++++++++++++++++++++----------------------- mainmem.fsequ.s | 2 + mainmem.gfx.s | 2 + mainmem.init.s | 2 + mainmem.ldr.s | 2 + mainmem.lists.s | 2 + mainmem.menu.s | 2 + mainmem.misc.s | 2 + mainmem.path.s | 2 + mainmem.svc.s | 2 + mainmem.wild.s | 2 + 21 files changed, 774 insertions(+), 735 deletions(-) diff --git a/applecorn.po b/applecorn.po index 3299e17f864c45fc755cf3b710cfd24895667aa9..f2ef00adf70e1f5c2f91d9b0722204c13e85836a 100644 GIT binary patch delta 18226 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 TqFYanmvf| zNLS~zZU?jf*x}QMb8~Z*Q|3m*Mc`8gvny?oDThJBryT8c_qf_zkk-tcvt)5x^ulO- z%CQFHRmXK0odSLo8d{J1&4v9dD`AMHg(;;+d&Qzb5ZE@m-?-n=<-zR}31_JWIbaux3Q>Qg zR`Ds{_cgc~p`p8}p&hA;Zsx+5BNm6oM8wXC&?7zZUKkB0>?E?P9bN4%H)ksX&K2hS z&0G|@Odq}Y$)|yD)1UJ7q=tbS0k#Bi7MA!9fQAFY>EU-lcJ_8Vnn9CL>wt5~^4LhE zJ*aK3MQ|cZYFcphG&z}L4P9;8DKXJ;bD~1$Ml4&Xoxf~(=dqJ@fTSQd?}3@1 z z$JO2qoE$M=TL3FsMx7QKhED<9Jw``Y2XM;fgD}TME?WeAdeS>4?x_KaPxZQ*+8l1p zOxUV4XJO=G&C-E_x?a)I1>@0_-+*k3Zf5NAn8;-?9&?_GK-R@OcFrJ<)15sqZnX}v zy`j%{O5Bn-7_?=PG5Uy?{q@F(<%{P;MZ%FiiG@G3_jEO!ZRir2I?>^1R(Ytt$Lx45 z*T*f3cqw984CXD7&KYY<8*Yn9X-skF4tAZpg~(9?YBci7y6W+ zaYdvj>1ltkW}TzU1qgn(o_a;BRPBtb8y4f*o0!ARR~y_-j%MGPE23c+7qB5TV(tpx znfDsY6?4vZb~OX@T41`&JSg!FjN)A2-n_^;afo+bFAdt{d|Zah;2@qFH$vE6fet@G zKn_Ozs;kL?os}#E8b(0nXvU5-G=r85#O)CJb0~H{E`{}HI@^0;HE}2d1^;&^54U$Y z8k+l9Pe#!$Br5s++X!DCq-DIJPsz^(aazWScSWpIoTpTGug0po|R@5 z%!y8rnr7@+ugH0@V7Nl1@rP4{JUHBf!Xk7Wu&naN&0lW)+JEHmvD4>HAFbS)=ewX*+z+ z)PmzVbGWt^g6tpbq(x|IBE;F!BDD7`bWCyhM_o?iOBExH5TR8r%ix2!mog}P59QuX z{VS8&m`QEPq&hNS-sii^_vlc^F@oDEEl2;fOAaW%foa8|^4BvA>T=mpSoOwH3y^jA z{R{(MEas; z!;{pZqz)y+ZkK9MGJG(}J*^FQp)5+wfOe|dGkDx!*F$vn(=MRI-{hgB3flwup1f5+ z8b;0A15M0Fm$`dboso*%!_C_h950e0H-At374ix!A9Ml6?`QAffrIEdki=R#rtN-%ivu|guD`kSVH%C-{u?S)!_IWu!4z^y%6^IM)u@b zyI;k;$(}OIi|lUcg+-97)~gjaj6##Ox1vwDXaKAyvJlqPzCF~9Jr=Ljn|m0Z>)Ug& zV-I&@&n@>Jvp?iR#;uM$RNtOTp((ve9AW2S)_il%gtCW^!aE zWy<89)l$nC?m45Die+Fd;uwpbR`h<*kGq#A4fnaO$Sg!?&-P8<#UL`TA$i9L*@Oa?Lt9Uy*0@>P?Vd2c5Sz*!6! zM>!eF#ZZ?Ss*R!A8LES!+)VIwCfLuxgtjoDtqkX6)&Y={;ato*0Ch3kWo8{zFkWW3 zHf9~vYhyy&nPj2*9HZgdnGkkvwcyf z=u=iMgI5+)L~ng?CbuXPSYb$ss!EkKxqNYEc0x`%FNZSwe6a?G7ei|Ak72$D)#BcH z=RiYdVLDjJ!r=;cNk*g#j^V>nQWoe&H)-s#Xv#1x@%Ub6eVDn|+Fh;E3TkUlwOT8V zv9N3o@yi}Tr!|jtX{Ql z)m!naLw#e37l_z5SN%19{af*qi8x5bz5gNc!MjBK-#>VN)tetoCYD0p(hX}rkPw>* z`)M)A-XjLsPl0Y-5q<4-qK~~>XcAS>2DFPP96-2s{aeJEci$)0#~c6t0kLN7JMp2R zp*|Rwl|yaHip=y#9sJ%2)_+K> zd-wf#3Ey9cwd;uw64w5OSoQv!32XlvAL<+Pe*9k`2~dBEmpbxipxp?~de{QIg>gQf zVF_ckgz4+tr?pjOz@*2~ReTgQ4ScV3#y&PtiK?7=Ss;<`8eJ`dLC(Aqx6kw{16ap_6kw=%7_gI|Tp2Ka= z5rY5{28M|J)7tmm1DU{xq<#7zB!zG0P^)tWZ5T3P-1FN1kqtw(%ST5s#vIO9M`h-4 zemcsM14fAYA_wdd^<@s{t)r|t$iT@2Z%(G8cI3c%>kRjsu=CjsjWaoeCNDE*z~otS zJSLBOGY6Tv-Q4ONWa_r-N9J%U9YyDGY8{oHgM57`p{Em!4D6Bl=j*d9+=QbR}sYaCv)<8_$H^$}%}Tvs$ASrgO5) zYA-EN{6A56&>OIH;EF=HS=taIHA@TjPBL}Xvqo!S(QFF5KeewitHNCbJb@?+4WBKY z8D#XWZs(tZn6wFyKueL{EcO_KkEl(nMfC?W zQQDBY;cM!zUrSb2GO{|4k%iUU)K9*q%!4JWGE6FIe_AW_7`R+mr1P55J!URP}^sDtTwj8E;D~-AU0&6@Nmgq)LP75)Y{U$(3+82wwIf& zrPLBSjfBoiLg$^qzC6&d-%!KIpY%wwWmd8MC;>9`S}vK2&RdXO#Mu2r>|PN56aUC0 z*6c;`j>oSLgd+DuBF2GGWRoWp0n5Bu3Pr#;lTs)`qEKWaM@`~Doxv1(7+J3qdZmB_ zf*z;?0STBwr~?5BSVJxJew+(t{pqAaFuaEI77nM&x2qcwykE zRrfUEHXt;sIL;uUspnQnXwG@i7$DMJ3vmz!B0+8CtXG29>O7$>TJiQh+RWg!3ZMz%s^z&*`e*d?r_7qQ=$pGd7f|B{ z_u5SK{WH?~_l<)OneOGe(7xag$b|KhQ(T{^_Z`4(J{pD0!Jje`Bz|E79~^*B{xg#} zmJ4`6InLV`3k!%Vw^O~s^TSf}gwSEBa{>VYs4?6n_XMCW%oBgY-6S>t&rAaXXAPiU z=V9UW0yI|jTBcb$EGXetLys{kct01Pxpo#cX1~GxQKq1A8&T&>nJwo*>n~U@RFBy& zXszd~gZB#xAl49U0Appz5yo>yCMVp5ahW-;>HKK0_mpA}Bq$}CyFe;4NB@WYkP+^h z4$r*2#)3SPVh=mr10vhQuA=07h#r_zkvjP2!>%HIVYFV)we&-BG$?N{+?z=U@pK*; z2$y|3a*&zKh8NgD=^;jg@N{}eJ$WCTJVdqhzIh1nXLPv~QZE{W(PR)x+-JvOqX;$x zmH;2%h)2=DT=>pi^}#BLSKfbr!+RgZub%9QOiTs=0Iyp24<)NTfY&6#Ofq5tBb^~xJVFz`5+wfVWkXilapAbO>QJ{{YO$u zs2zYP1Cud3&naB9^jkH6!i&W1I(`hGu(rVV9eJhIi7u`*d5Z=H*UJhoqhWiLOTU0m zx*uBcA>l=Z55nyOjqAK~%Din+WnQ)@Yk(ox_K0ng?Frjd+YHL7RFwV`D7N`T!PcKY+Y&&#(?++92FTzR*s;*!usQ%(Wo@nq1Z(P%p^(7= z`!5HJU78hCuY(utla2YXKX03L8}SCm=ECHQv*uKE34Yv{ITcqRYWX6kLKFkw7VZ!s z&v6CH9bK@c5k)t=k98YZS{?EB9{rWPTnOsE1h~{}!1neY3zm>zxLt0&LZ(`Eq8IdC z=jl*_{=@wszDAH`?+J?Fc#M==74i65f>a<51p-+?gPa0B3~;H!PxMa5%8AnhWl7{^0wK{{!dG#q6cd7H~`VQs)Y|WqYX~3&37nDxg{m*jZG40p%><&K4k1 zJy+nG#r;^|!pskOa!@sti7KLes7jO+=-({hjAsixD4^Vf0}Ad9A*wDENa6to@B5|# zkhr_t5lppb!5`WcD%}y2e_^Q{p4!Dz@4~4~syCZ>iRHqyutnvc+>=`Sd|?AORcklu zh4sJ!i2vpKr@umG^nX7`MUy;fiaG{nNP#dz@`D+Y_pm9dJaeFpp((0yV2%n?)cExu zy#FCgg)pv%ML|t3iz1qWL^kv!HG_Bnq#&%csKm?q}QwMky2j5`9zVsPc zdyIKD$Op$$g*+QW!REFi9w?|{`P&j_(C_Id^cq6VUGMx2(LNCP5+TC=jB#5EI05X!sx|JjV{kgx>))1aUS|00e>2j;PYS^*dyrR?Uw8XheyobOT4}pR$;q#-!>`OK4eGM z>_tw_chHm=e`~?=_Ijmd49r=LJp8T=ghE$Y19=UG>r5)Nj#~rDj+^qSmpM=iV7ABH{1q_+y_8ZDi2W9C%gqW5|{RSszb>ZUK{~y zPS$u{5jeXM6_+T5J>Yqu~xAVc=c3vmfNA6?s>g_yCJn-tzcmZWVfn64c zo}m2HKJGK#j!VhAwaNH9ZiSfi=DX|OL(GX^9RedRt*n?w-Q#0;=$mJ0WzeyJp6IhU z%UIytM?CC6{m(gP9AX{yKkQZ(H`Fco;Rhqn8YvSRmPB;f#1sGC4_;Tg*L((9B&>;% z3aA5fJooFlo*^*`bI^boC61bSt9)2(4}>u8UVs6#Epn^8`t@9)5JpgVg!`Bm9wh9! z9L)#igCHx!RS{Bu3-rjb@Fx&rY8xWT4E;o zgYKRCq3gT$!*33C05n3~v1`9nydP%UNY75VO%U3hdW3G&^-plg_ zcNrRzZ~2xU7>iyH6nPhvSp_CQAI9GaDiA^OF(Pr(rNv89}w9N!fS+`^*5$|qh&oE|`5xLm_H_khiSb!42Tu|y- zI9R|w!+e7BHL1@+0q2z(re*h`S+W-bWLbEW>S<9@dh$snjPS^*Q$;oK0XlEk{c1Vb z0eAq!@MRwcoPL{#M>g?2l=to2MN%%My`Axnlp)HXuFvhvc2DLt_~ou{;3q;ieXs}Y zMk*kcO`?n=Q;F%D1{(WTD&?fT>VpK_g@n}tjNc~8UqbiFZFF-Gx-Hayg>CyFNgBR; zZ8^DVwPGWClB7rM@#+L=7~!=qcfV&h2pj~vX57r;L?U^7(*W@w-EPeWXn@nur}MWw zv~${2pb2md)~WVO6&_>-V0w*zs&M(YdPwO~+2d${d{PCOcy0jX>Hrg9Y|h^@RSx8q zN-Yxa-XhL#;;(>)E9wf{ko*%;TRJIY2kS21YHSsYrk=&#*O-Mxlf~^}7 zBI~C3L^6@rdazctBnrpF4Ou2@Vz7ZUZB7KMW`ZdhZ2uLm8dwUBN-%JQ>c^bTW>sI# zW;kzDj){tT_#L&V6lpVcf`w1k)fO~!Dm=~m9>C~M-a{hQ5RWMTqo zYT0CRC0IA1im=f{Ms6IxQRmrVQe(iqS36N~C!e@FdG%I{Zr-Lf8_mAK)?^?z*}4_T z-MVJ$n&dTG)+AL4jRpj?I%W0807$OcY#wt5pfx3aqmfLpejLAv{CLgBYf^@4)&c_& zQ$Tx2%ZT6!8z*e45=T!UC!~a1Ne7Ud5`w$11ak{Xni>&o62NY;ZUh=Ok)9SG4xW%S zVatT%30tc~VnWJ=Y!TlF&06DA*2ph z^R|nNV34F}fo0%{!Sm9|Pi^VsXRI*^j=n@$cYH~|^C<>6TegF1`y2*#2mH#B&=;N_ zzk}RimbcKs*7UV9GTkg|*=b?{kdY(QjA|H32688G!VH{98%7u72Y?>J0PS{BU9l6P z?oId3w(TH|pH{;4GwV)h9=y`-m&%bh`eh492L^6}AVJ9BSCTgEjw??y?Ot9U-JfQP z?ynR&TN0~;%cwkSBb3=p6`O>2pxg$f@VKf{a3P3h55&Ap)=k1e3D0tbC+;>L;~j`l zeW*QN!YCmc^IM3(%>~2$cJBUiojmuKE!ISUhrDpZojusRX{Zm@yLu2Dzo`<|OcRY& zLaT>H3F4GVSS9rm9#%&8OHfYKk*3=~cXVJ7&2TKs%c1gpQXkzM3HxUJ!tw~hcR_hk()2+}22HMWd{dB7nhC)bVDp@sLKteOCgbsEGxsTmSa=Sm@ zy8E-OySHy$oxPe}owNFDE^RBxaG!1^GsCTnOGYxh?09Cdm063C7Hj5Og8Tv&lufL0 zBAFNta$zAiR>H;8Hu3u(0`lUdfS%94rJ9MI6O zp~{b&gRNi2Cqb??ehcJh#V13_SMgiPO{hVf+zbt3BuTtT!tuhCG)txR<1~vk3AAvF zkz}Er9BAijE2GR5<@y!LcQ*ipZe}M+^@FWR>pt5GEp1u1eJeDTLVdQ?`Z2YAE2Ch& z$<0InX(gk;41nb%6O)Bbi-N%ty!cc5MDJ*m`}3_3!F|3J8O$od8EoCRR$(Offl6`V zz%JMQz;k$`_UTsNPqzXgbCbExw;I6K!G9fLE3g%o<`os@7nYP3m*(f?mlPD`6&2*? zm*nRamlpDQB_##6(qdatX?|&GesQ6VFD%L9ON$Fi3kslOK3`m7D=OfN@=A*G_>$66 zxRvnv1todL!u*0fo2{5HDlRR_vlW!^B}Ij{{JavVQ&dz?%$Gt_1x0*mVIe}9mv1Z1 z11d@j_!3)QNkNGX>K35(3v7H|F>eF#Lcqrt78aHkLB+hh(t?uG!h+I#KEK3(A_);5eTP-L7aOegQ0z?{f^UwjlDBo6C2rU*Dz@-pa0$=ERUTI!o z0pKn++6wc5kI*ROl=6Uyw*gAN5WY|)k1qf^p%Lg`K~ZU;trP~rW&?fz@A<-F=yHBh zVR2z;VX3VY>Xhc$fIM3<>MIZkPo??544bV4u<^x+A^F9nKmm+QVNr2@q0v@S0`>EN zFfYAdc6y(DI@jwt17Zl}}7Uty@K!<@*#gGeQ zD3J!w#l_GEAg9oA@YLy2T0oPy*p)DYyRQi;_ zz?K%5@Q_3TURn&j0!c-q0mEDZg8(7`;$Bb)6cv^7z(&xKJYW$p4Wt&DDk>@D^P!V4 zIxr?67DgLygZ}5+K=SfSfJG%B|8UO-wm^mr=q^G$MC`Hwr=d3J3E(f~L6VCL3jrn2 z0Uanr%9RfylMgI_5=jk95%YjFxWaIt(a6gyDgnWSJ_1AXij5_J8I%YF2ni363)v+g z1fX$wAYVWo@U^56Q0EnwV5?256S*<)`^<2GBU~my(UNFVT)u2IF;lFjWC7*toWGqP z=49*1jcn+kkp&}0CK|!|Z3OGLi9HWS4wsBvxHZYOl1u`Fy~Tio^%;XMm>zy#L?)As zPmM@jlKOJ$%~an{hK>y!b2YTOJK?BnQ#W%Jj$Y;RnCFNp{9Xpbao=K|?dKp!*wJ>_ zq|Vef^f=%Lz3Pl`OaT5n0oc3bZbNBE!vERP2pgX|TbM3~*gcThjSf=*t`_)T6b>*9 zgB@;%Lr-ubwiZq~pkL)+PCL4Lu#+t<-GHLbai!PcZgO}s>)K&Ie(lL>X_FKJqcAvY zbrhW+IBi6=iVBbNdCU)PK!=LEu?$n8sl#;5G;Qb-(_dN(tF+u{Hz_^mz$c7qgcD1^Cx|!?(4vcgG zf}rY*gzeSQ%B_RgF0~h5<5ECR1T+e zAprSAl-W{uVz}s4S^kk3wu^~fY`jHIm90qqc7@(wLnbF}g@8Xf1Q)#E=R#kY!Sjij@xxe zcp4r19=E}2%1Wdj*^oMZ16yH{0l)aiY^D%@(#%dtGks~UOfyw(Hd~X!9cHjSTghZw za+*ohR+dMYd)Zk`gy55ox{IZm(hWvtw*K`QL##3o}nYtL|FH=vnya#o@lcfz>H5lzXu zKCqivTM0_PZ|nx318@wC2jUtG#$#wOgz+AxD~2(B_F`y7VaNX;_TD_OsVeOsPn+&g zD2lITDIAuv6-t!=WmA@0C=eE*v}j*22!+t^N zqs-Wm(b1tOcxO>Z9hDh@0fidJeVcwi&$&ryOJVT$zQ6BZ--@~Cp7lA;dCob{S)R`g zCUX9Q)zn~7Sg6^v4}ra$$>8sX*_Y(mse!LMBvNzwV%dKB`E)jmSj^@w?Uuv--Bp81 z_di@UxYV(G=flW(Hy4xLW212Ig9NM5xM@}+eB*+#`2D(O_gQyJDfqLS@{ZT?Mgj3u zfJFd{5CcG+Z7y=T%1x0_99jsaYv3+Pf_iosoeJ#9~@L#zWdj2jD6|XyU)q>*{xvB|jx-%DQ zdPT0{&UH8wt8;^MmFiqa1<68kffI{rXF&x;O*@Z7qw1X$zXI`n(alarrBs~@S#-E0 zcP`SZu~Jp8C`q~Kl+GF#{+X1jTt}566J<~>Xa)O*_65ye$M79P*JtBif8e6o-N3B6WP_d#xpn7yNFP#*QqLX z_A8>K&cs;aOuoCS#&xv5fx_27&H^>QgRt#w(SgI@Jl!yInPI_-YTh zsdRc!>AjBDyQ%bQ^vHTQm0gXhn5Z~66^9=;m0k@7Rt@2uZAj0ZjrX-*84nJjz9tPV zbvWH3EA2E&QeSR_bfC{ish?4+`gJ5hm&h>0s}IC1fy4ZpTQIU+37dvy8exBebr_GuxZ(+B5TXnHqm; zM=+|WJwC#;{Ktj#NG^(moSS^Gs+jGID)%H8c<5bAVM3|)#zROSjK=?Zc%Ru$ac`gM zi=v-s`iY^RIE=qj*??(Hkz=Dw+S3$z#-X*!ca)bUZ?*d(93I!*_Qs?2JMPAA*3tSh zJj&`l#oz@eG%ENyPY-Y2#AWO7MUDng&>QD*=8rYnp30E*=!d< z7&?0yoQ@s%L7*MXz*w2>D%jpwXxe~{1WI>^$f!ar=_r06EOtjV0|7e6Lyle8C}Q&; z+PG_D&7B*ukw^P)p6infs==4!u_b~Vx0>#%i2 zjmw$zjnOpMl{846u*-GE1$n6CvTK<`tT2wBi}XOJ_c2))gN;GjRvh<=#}jqha|R$6 z=MNm-ydt~aiEMX7m*J~{y22U&uHm9|eN}^GQe%MnU{b%M$=f6bzs>lX-huV?DSw{x z{F6W5!|ymg4M$f5Z^sBx6yw9; z(-lp#@gV0;m!mS;rT#;4=3?YIpj6}*R5bNIUYV=vUw7q-o)|jFZZrj)xjS8firk%* zRnA>2gR;{8TxkrC@K23srclsWMKR*X+Wuf)|W16pqp$9??}= zB)lO~1x0e_;)TY)ig}0)8f!Rdrz>hi7sf+ZW3#KEk_e@tkdK2kE{tq0a#qq1)=-J+ zQx{vpB&IbE7JOAiXlV~@q;!LI5c1BV!80#0p2D9Ddk1(-+&ufr^ z*J93h9pyh-JnVak4OPK7?ghXkBcwx<6Nq=?&PwzJhs#7>eqAt*2Q8Z2NZp&JC`^{~ zrHxgdc#O?woRETSn=#e!p^;?uDI^3>c`p#<9 zqjrBqaJ0kYOPXK3(e3HQr-_OJ5BmN_&z&3L=Ty(tyBn%a#%G0{75kkH?w!tZH^z_` z1&5o``{EiZf+>#b`4>}HJE~n9tM8<=pETCHO$gE>WA5=Kd59#?38UyA{2fkLK}C#n zTw}e{W!@PN8kZH_PY583LQ1I z>U-2WyYRyX%upwBb#Zv9dqipduCYnM2{77A$*UV#iW_&bc*GwI1rmm(3)DCS+k<`O z1h968OYICG7FllEWYlKFn*gW>kwCY zF_$j_O#U0+uU#38KL%tV`5Ne(E&EoI)(HjEJgvUAVIN%edm8rAV|T;DcmQY6ezcz* zdUrqQI>b_0N24)DVma2R%Z4~1I5+^o`?=DNyS>t4cK_6qB59G(s4kPx*BALE`+DDv z;rJ+~fI?O?*HOE3ALhS7nE!f87K!qF*OJmlv?LeQQlsv}Tu85MZ)U19+m%|;Sm@KS z9g7^|o}GJ%USA@Q>~!pg1UMe%wamhZ%KkB%%7e_;HXf?=C9t0_;?>SPU7KD1@acWX zCyxAnzL-B-V_fHSo~c}y)!b=Z?cBB77vZYeP3$^av-@bs$ueh)tYj9C&9koG!}Hxs z`7#tAgRHe|jJ{qVFw+a6u^q>vMtcgkB@%v&sL8m|rI zrKJ*U!~S4GeJ%Rx(fWNgP&-^)AKtfHcl1b%`cwpM0zmiD>M+Aa496T(wIcrj~royZmw$h@Rd zc%VP&kWVId+wE9DZKvAV3$b45GKCu+FpzXE^ze427 z5y5O%Mzrsk@mC9R141rwKpU=iMOWh6MswoW)HocFCc@q$0UC~oQ!~&U8bHrfVHlO_ zt6p(=-fECeReDscMKRhuyF0tt{_yTX)a}`a$@wsxCZ;UL_&}2vDGS={Zq(191u9sr zEl|1Yo?7Z2Ra%Sj2?I?O?rA1~CS`PKU`(k=L=L>2boF*>`|bGoH85WBC~PdmZ#JCS zm`bV)T(dP?L9=~%$w33PZPjERb@COWvZV(nQ`Bs++ygF#=ac;&6bV-HRz%76LQ}a% zTd+d`b2zcK202bG64z}G?5x-T@e1~O#RElM{qjtO`dPh4jcTZZ8!?WD zXUNdhC~^%WG?_vkF)v|1L;adhqo37d_5*AEI#MlyafB{hc~y$V>Vd6ZXeMZ+OP`>oOO%lj@s|*`5YI zD7!xLyBj?u`zZIUfw!r4VS6SP_PnD&b)KR2zc}5XSGOT^YLO581Tzc=1Xd*4h|)yZrrG{##h|+Wv8n>agH+AX?Nopr^~6Ha_lhi z;HIco+|c;kr17=Elcb3F=y9n7sAHfP^h5WE8~Y=6d?M>TG^jwDL%S8c1G2T)|Dm%}(Rpej^oiopd2qUl$K*+4^00EjWQ%vWX{SL-%acc=Prx-k zPtJq5u>KR2(RqO}d8TY0VNxD#$xsACD8j1~Nsmz`3QR4=4C`DPR|R@K&Jr> z0lbe?X5^iplBepAPtNniDwFd9Q}U9Fr{!TfDxRK)40Q);oQlZ(N#y&E_r(?#*0Q_P zP)(%Gyf7JY7336qVG80m#h`th7{sO_o5^`t-P)DudBs!mj@H=0_iXZ%CWBQ|i2lM; z6>8)wPEQoItntlxs2cNU%k6&A7l}#5c;2Y>dXe@6pcDG^$#-Li0A1-ovkO}nU`b=G zFOqgcoCwBVh!gl}yph3JC$>Yl|2grj-^NU!6#U ziSc#}qDM*N1f21!l}Z1Ub;frV@{y7T#COne8iV~Q!364&-&4%5j;sUtG~T{8 zEi)%9yQ5@Xk)=okn83p2Y~6+p{Jty;{Y_xHgp~y)C4@C_&*m*9VgHUNBCym_R*ZY3 z>oygPxo7Nnmb$qV2nQwWHf#313A%afETc=z5ECOr+8SQC6RrBUA&?T%W z5Z7&>GCKS^3V>sRE_Fk~LQ4^u_!VuVXsP$`aH1~jzPk$6!yJ%}PQ7O|+XNEHk)T7> z=54W95Jm}L1j5rGMe02h7cQNd4alBcZnO;@rXQ#!AK>6BCcG%Y?*PQ zMpSC)#iW<>5$5U=@-^#)Ie&Q#ru+&@3JbPc3QE$c#dN9b zQS;@?mQPAupP*ZH4>DPI$Cj<2<0b%qtz_fym!QiNw-%x7f~{M(Y}KVLTTE?=cGLl& zYXxXbOwg??z2i z%TWh{rzpLrK$lZgT(G6IM7Od42o@WW9n3$uvFO$Uq8V>X*A*8)2)3XJESq#ow}9FA z7Oe-$1#a+fAg+iZwon+yzt~)KPf3BLU~A|0L)R!MfmE}*3c3cYN6Vs=CF?c=kfRvF zxN3z_XWX*ITzXfSo>dmJWy{YjAr?pX*7uIr$0qjE$6XVh&{v-$>SKo{=m+V0>yySs zFHc$(YC^Vfp)TWw8z&hi(>K=V%$+A>&7W}N4ThaULelKzK6NAh8k|mg@W1#_j7jtd_wrS%Qil&8F5-XuMe2031)+bx@Lz=PE=qM3 z8C*6!ZY&==tZ&Mt`_RABHvuj@A~+-Pyk6}qA5x>vwzLzzK;qw&QxH z4mb{s&;CGPZPx|k0q%JgNS~g69dpO9&A-u8Jz0A@VMQU^f>wQ~-o}^p@Joz}O^qDg zYfMy{eqz+@*tya3VugsTi1`r<;&rTXQuE238RT@{@h`{t5(ap{!O z&$4vZi4*=i#GsDHsAv{FCVC|Qe>NMa8>G{jbhAN1oGuB)+mm#+=#CtSnB5M7@Z^W9 zlo;>rz)Lk5+uMyg>Xbm){hQzKr!eEf9AhxYxOtUPUPS;54$&$9%%8)Rtaehe##To| z1v`6kXj32T6x-&kaJW3@&Qvy?R?3gW>!tD|(8aE2hgZpOFM03?{?RQ)-#~aM4<2ca z31;A$Zut?!&G=rvR*M~vz?Mll(t}6nLmOWrJw=xj;DLW4mS;S1-J~2Ij%DFXt7HK| zxF7rAk=n*&6FWk=!_-aJh{8r89IuJ+3Chr-*juYuzBYS-nj->IkgH|q84(Lwj zbPmZ;t<1=IrAnEZb6RSO!yJyqKv2&H+lIK(3NO*u4%AEN|s(up)J^0{}a;Obs z`$pF^x*bQVb{@ep${(eE-caMy1;q=9a#Yoy4Sr^F)DX_WuALrbT25d(Zxj=*uAiM-1MA+YDZ;eebs3< zcp#m|9t>^UENnk;wEQ8uI`|OXRRn7)p{R>}P(JpE)NjsI;=?H>Y?Bc^p|?jN=n$;P z4%s3ZqQAmibFL+KdMW)!?+`Tllj?Kb4Y|_6T(^?zJlx(c{Yra0n_KmKE;^2{9d}xd zs$OSDj&^i?D}Qd=x4fNrHzG-WrdEVE)zan zY+-e!Y1&~b7Q`>Y=;oe= z5{G@~c7IS%6=kmsHKZ1X9AK$HxN6WqZxu<-uEb4rJaqKRCm_71m9MJPNFUcSIbESuK-FtFPe3z+h_lqW6W1M9AGVjOLU#xy7Z`#vBS7i={-!^td~mg`5PAao=L@ew?%K%>G`*2G(nTx4F8tN z?a*B5mhs1?*7-OTxBB&<72g(;tGNpws`*iVlsjQmumHIil=2~78}dVgJ%K9CCq;58 zl)m|VA}6mb(qY(09h(rcBMoU{47{8|ykyqNto#P{%^?3^2++raaiGu221EREC)fQ; z5ApL4Xqh?rVLQoW`y5KPtho|*Iqd~la=xDCqv($EosNNO#95HmH@&{R z!NDFGgaVbD4T0H)aG-Rv!9CkhU+!?$JCcj0VkdDL)=N6}^@J`(XeAtS!roJF^u{49 zR5k^OwBFn0gr~9J2&(t=6dYa6rFwqjzmXo1{yBJH$L|*tVMAkIO?nN76xA^mP-YDiV zTsr8O(1|VX|B|{7<@hDGqY4x#x8 zjnY#wmn}skDp1UzOX_HRx;M4k_dEcsieokDJ3Y}JbU`iT@8OVyP)KkSB^bjS8VO>; z36_(0EccfCvL{L0&_1tE@bzYrIKmenYTX2S$15?3T$#Su&u}ZBT0Yw2=^YG($5J@& z`m@JFK8Pgrzd^kp0y9VmtunNV8yQw3qD&RPqgh|2DALA>=8toOGJC zV4~u570uCR4IVoOwNbCdnO9%=JkMF1P9KQFfnVndgpWt@y=Z!^9wgl@Om8&7+#zC` zV8D06aE6(zeqo$3p*Fc_p5H(R%F-6WeV0Jf3Z3bSm@9G5&e{4ie6aXN+%egTC%&W6 zx=y{`zv3uuT?6PfO^tEI>l@WiTki;df-T+ZL5-L;d^&8{;{?f$zOZ#PE~CWaGKwCB z9o!<6I}hF^lvnt$UFeIDv3JNfoIzeAKtiUBMGlWq8K7CNzyz=Z|M9nvQcK50(pU<-$IPV3Hkv zA-T9*0Naeuq|tF39_)dnwg&|Dn>JBUKR1D3WuFjugv3{QR0w#<0m93jY|Tj4uV1~> zST(ZK%WETX3Uzq5Zr@e`pL{8Fh`8X!E(~|zRFWPzd8BP(FctR|Yo*Nw`Ykrp?}09| z7m5g(H}z^w4aU;R$6ocb+T;Qc##{jFWy{9W2xcm@IWjQInXdLX}c1SJ#RM3x; zek$n)4adv|c2APnsP^(lw`>(2-VHU-)S9ZsH}9ce@QiIwGVVj?^Y^Ozxqy>q1WZt) z-9HzC10WI6?rlOa2_Kt_cHb`qV_Qe4@ouYtWX2)a_*rX)8q}%LMjh(*ClHUI)vBU`&;RnjiCpu^*+fsMnE*LFWMTYiSQ0KVVDi7Iid|9kdF; z>$7PRqN^{7b|G;)@{luFY(F|E*7CSZO~gU`4&f{qB;TiwZoNnCO~ma38y?}bm8!j% zFA0U-$_u>@q^?%SW-G`&foCSKMvfFE2~i4L@52X)G_kug9aMsz&}$ApY$mw9f}&A! zUBE7!e^gMm3kNQEg{Bzyqe7Ke$W$H>E<7qUDxx5gw;mfEu%Z?PoHC(pl%ET#9^af| zhJJ8j>tbv_6acyAhvXrJN_t#y`vgA3N_B$!F~LW3vh)kV?H9bi61-0f-e&}_EO;9Q z`3dxB>jXY3zm?1!1B|aFD+dIK@o>MWV~a*K!WQ$d-1kW#aFBPU0|GlRJopzQ;+GCW z%+r)$97{}HY5^sb=1D+F)wDuNfjiVz40?AFoLc8D^z zFYbFZRG=>-l^Y?Y7{!@5cSNK5CgLUr1f0;)&}KZB97?-wuoe{?L(ftvkh|rO!)qXe z^IA6tM?)TGLpEpHXDN>fIH;);=(M@DP#x!eR%oje)ZuN93HFpOftvxygAhGJWWDsP zNOVxvb1-tYB)87f9$DIBzV=w4JyvRu)j@M>KAfYj#~{rUt;gfB|AK%|Z!OS#HfoPe z+M_5q7ILgN-jm$AB{-_}E;#2Wx84&>Yb_PgbMFfdGX6eUPGCO{M9av!&@(RdOwyic zA$EKKSn(@r0ClSJ3jt#@8XT5iej$J+eqaQRU#KsFuOnFrE8XO+JSprdN82k01uNm$pClpYq8!*5z%0&mv1oM+|qjjs?Wv@zyWqQ zCcL7&hbBWWy-DC`&JR`7%)c%NlyvxCSm`Ms%Bw-S=Au{$%y(P%G12=PYX@go_I#E_rbS* zs|VRrd55+S0jnB8!N&gfL7M#a*K$r vXjZ}iTHwN%Q)t_h-PRN4kV)R24 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

gC!BVgn{~EWtPN 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 z z)YNZH72No<0*Bd65j(1kpx)`e%LAGAMW#Dajvq;Cx)3`&?PH}z+X7;)?hO%kq#Vp- zL04ro-nYFWjB7x^2`}7$R7>z)=DBAeH_AFCm^D2lt*KP%tM*kkC91but5;bed8gFg zGT&f*rRdG|^*U~dR*`XUoB zXmV1m?HTB!cUalfRHUKbVO26C(n4&rQqw~H(e5b}s3_IF#|T6pu(w&8SBl5krqr5* z2K_cGdo&eJwgssUZytK2cWx6_GdQ@$?d^1%7c`w|p-;yJMOae$HYk?nHSrLm93 zI%ef%hzx&XN!enSx=fOnvSlSJmZgzf*FS{2f}XEfE-z#AmM>XCD$H|A%AgGkb>^i@ zzUrrfi}N@QBv8Y_z&+ek80b&9t=xn-7*sL9q?Z6RY1tVxEvjSg`~%E?t$ zf5MRg{>0-LzBOZPBgQi4SkN{lOAtaCvprcyvXK}mHgRlaX2hCgTz91S2OO-Mh2Yzh zw@hzv*LCJYg%Qz@*H|h37^Fomp4+V`T|G)yQMqQ_aonTY>P7>#3H)txq*l*Pw z7;}$%fV#@+z(6v+l>T2WU1vl-v(-S%YknfVvrwp3U-C-a@XZ&z5;rW=QM@_irRb#1 zk;lSEG4`k6;9AAls#U}2k1lxPf6)137tZ~!y1?J{bq~*(W4r3%haaAE{hWud54b`p zIV?OPGU}I@Uw(;C=+QH=SMNT3f7zUv5PQJ`v2$WK$IOWup*V_fm^Z(qbipt3jW?A! z7cN@-%aWzbmfv#gij}wBzH0Ry3YL5^<&Mmb1ySB*Q}YX^Sr;xVSyEa&uLROSk$gtp zRF)UOPv8+dIl(9LomsNXS-kWnE;t?qXs_Q|ywZ47m??keRhSNz+yXUt3Y{-b1qju6 z#^ao6bGkl~ucrpODImp~)G8z{nbUSJ4eIhHOeQ_qCh z9xFEIJsCG-b9q`w?8Pg%1FQ`Vo;$&5%D%o=9i40iaxa@@KX9!ZVJ!ddHxcf>v|(38=RImcy4aifeDZ{Jv(q za*k?zkDQ=td@WX)6KzW;+Mb_CCu>lR|GO*e*Q)UY4AuBgCsYJfV$ zP`N@pK53gL)=jCdZozeDbxYb5Xyb1pLpOvOHoZL zOspcr-?0_3e_|DOev{#4JMEqZy2@f*}gXCF+|@5|b!=`~qL?`w)?hbD3b zd3JOnf~@Os|PNrh)A6 zKF~7-G|$2MuVx*stWc_SEsK=T9UPfZ-ZNPJ11H%Yo@6^c$tF(@RKL|V>DSdi%BcQO zw2XmFfV%X3E&6>e-ifr6R;{%_VFYUSYg(!+T3&2_u^mua_njcYE2kp6LljkOLDj@0 zqCD;xRc*nxSlFbkYg(YE3NpA*c;nTkwg7m5;-rQ6Ct;7^h*3>?Wefh12I_QNPeg#4 z3m0Gv^teet7{pH^gaNy8ve6KWC&RZ>w;t})3W|X#sET2bs4klFh(>+iI2ro4I4X!n z_33xFsG#;UxuzJ|LY~SN{Hw3FhD@)omLuq1mC2PYo{W~M>`>XSuby5L?q)bv2*h!> zARDw7Dy6)Iz@Ca~B_IHrBW4nsqe_pR)Y%%HIFap>ZI@qYd*wn~cy^#Q-f~U;b!!B0 zBAFen0q93e2Tr7K_Bk+-zS#ub_${1B-|S{>vf33Vf&@BoB8YrXORY9Jh!Yu_eGX1! zFa_|V=mt(?C_N^0z(giwvxw{%ztYG?X9FjKpI_lbHcdt=Zl2r?CsL5jaUw&r&w~>g zoUQ&QP6XL;c{ogji{jxh5yilX3?*q868}$dA{!=qHu6UKEu2Vqn8LCEY4+3gVY`4Jag>oLN+Uiy-QLOOp1A#Q`hdxrU?u zbgl;{xb5wKej+6F=MV)%mh38#&A6DwPH+vxF5-_9Ky%4%oB+PeRI&CHv2D5rHun%W zmJ@cP{Xtv3Kml5RCMywi7vFK0{1dsczLVI@Y-r#-nCFi^ek8i)v^x|V#I+CRRmH|) zOQ|jdi+mg_JD_e6txTWZ2(6q4^BmBdzJz(ug-Y4B!MFi;%e6=a{1)-?m_jcmr%*WA zhEHIZX1PO{Z4#U?4dS}h41^CjFl@-$lMQcBf$Yy_PsFpAEM%P(j*pkug|08(1)htL z_2rHJIHVlQj$|u!q2*t)4=ysF0y9co$k*l4f%WB3lwn_*+0;o%bqR$Z9Q)WfUz zE`mHEy~_Q{gY57{UXwo#7l_8rPAu;Yx#@OGHpzt>WX4$i1gZXkPHX$fY)~}^WIY*k$F8Z}J<-OfyJVo>m-VLkR*B4U9Mn#ocQ(SF`4Ev>qjMru(1DI>-DBk1ctXdgD7Mm;M z-HSWjnR`IMQRq_YRYv`WxRXet1@J+QtrC5G&aE-3u4g+_3)b{pqbNo)tTCHioLCpa zlveYR@*0wW z%j1>o1*j0Scg%I5oW<&e^~y9x5%=`H#k0EJ;$2yFA_5qdI`y7XqH#?Rim=gj1n(O=C8b*9JH zpupwsjwHOyH_Qm9tXW$@GbplcHM_A7bpINv7TdkOIs*F=J1U5#NRpMR6u=ZdxOvS6 zQwc{Z$PBup5Ck^3&9-&Deiv7u1c3z`3$;y!W&jH|7II+0ro#UQSn!8%1se--NV=&o zfGaSPc2d%|4}0TqtYV$wz_M^wt*emKpWD?R3UNfeGtX++I{l%r_Eh1}ro7tI@IDT8 zker~JnB7|nX{+$8!@VUSeN6Mmg|){Eo8K<1{kX9CU}5dsh0QI6 zwFe8EpDwIzDQwz(17+2 zSKSVW`g7rVfdxMo27v`X7Y2a^4SCdALeyUh-M6~>tD7Wkv&41$cMPowp`_ajSyq3& zy-*HOL+p4CwWCoqlbzi-1ZN&Kge$nG6af!~+7$o`PLDllvO`}d#13FVdm$onV8Jic zLAnDAF7JngZTOuz0KYuXlS2ttfJN2LerRfZM3&;`-cppUx)fQfr2$-lR!YlAlX`!t z`ar3=p;X;i3S7Y^1npTSbIWiAI6SO#!lLHdB^y>oeJTlxT;7!Agw zx-+l&rMaq}*ZlHa)sxq}Z?5{+Jn|-70lb^I_b%@JIQM>nycMX6a{ni}|5M!mY3~0F zk50e>M1Pih@8;frH+x-MENU$3KgL_JGaQ=Xu;|oe$ z1C6l&d_kC953@64JcOt!B^z&Ndz18dyBwn4N6$5UP$=3tqe55h&_xRZ3~KDg_|WVC z7~E&~9Y7jw@pdHRC5<+FlKW1MFMu2Yd;zjOITZMUXuBuIPWXaoyB1@|u+T6l@DYJw zp{W=ds8X#|yHBB82ve%9FU8o<_}I`eHcZV4nBPhbfWbYbws`}+2EbrbY3&xIRJ*yf zc55lxpYR2|Zv$TtW>@*>KodNf$NRp4FW>_u(D$1NU!d9@sJOq|)07~<051AFcJ+Rm zcf)K6gYHp$=KupAsxAO9coU(T|BfF34Dg2#9A5zEF8BgOBYXjx%D@+( zaYIn+j^;P*jkdi55gGUb1y}?`SHtaaRwL}qZ`svIJJMF8?C7m%IUYxSF;Cl@M*xEj zc2+dV+XY~79(=(DyMZs*V7Cn#6vP+shYox}OJ3WHc{pHK_U1Wu{@GsLEbZK8uYN&d z-_Ycs|Jm-@W>+7!Yjt+L*6w-8u0CSdT-3Fnk!lCaG+;h+4N||Cv>zn>Imz?9#0I4_ zjl*HsqjtSn@*ts`N3pL4VQ#IGFIFGqoecBrgLZ#}{;1vWXK$t81r#bPm{ZKaPtM-kh$Np zbh8#W(XLAkYrlPPqi}P-$>c=lelMXLGWR=+Zphs4b+~cggdcA1cN5ke90r2-#WvhS z>-AB3qq=Y)b$V zQ2-3&aXZeWWArD`a}5|sMX4>KZ`;~Z+Xlww4B?XWkke_Y}?lSb*#t9IZ_Jkp_q=)8t)Vwa@; zJ+FC(q`sZU-a=W`CnW7jX(yrtVJ3+7ganugqCF`Q%;a$iFq6lnt&LLER*$4_lD4`e zeY2!&-2vTc;7n*H?@R_blkO>W!I>Zz;7tBPN$vitgv53~N{Q`$OhQ^5X7V_a=fE9qKcV2K^BU6a4cI^=U_kZQ|D9h@r&hEv~qt{QeTtQLz4Qs#MX~sFDA34LmljItOn;3?1JGy|1{IP zFwC}j1V{foo66BYD~IA8`=p(Nf1a@u_-CJ_KW#^s*)Qqa?dDcID)si({SweWf3xHJ zoX|hd*@6Cf!4CA#9y>?>Jn1st3ede}t;4Yj2%>*pmGA<4O+qUJyd&u^+YjLzX^_6p ze#o5%^v{0#p~gID7r$aZ^p`vi{z0Hu>>T`ah@!rZs0z?O_%JcihshNB>NDZP33v3# zr+OUfU#TPG`>Bafwzz-N5%``Q)dw$1?EM(?lOY^pXowNfyrmG|X0)iMNt(bv$wTzV zaEb)m(c3F3^&Jk`QNh7K3eGJabD(NAILMVgByEDAz9eZcOOW7zq@DTw~T^8pEG zS57Z^80epuC7^!}&`3NW>0Y{eC7^#^lE`-SOHw6)e|S8Af1p$q)^T- zlj08;kM5o_&_7p?NIg%gUWw2@2k=W3^e*Pf19)cu{qwE_^v}D}!RB|QLkIXoN$8(9 zCG~J#^WP=)-8}XVCQAJki4L_;Lp$uKo93MgeZ-=Qu*`zXCdcuU+wC0v(_+Wu(fqQV z*F2$rFh3ncCyK`8gjpT))OI^nTD=`r25;V0=WPyrm}7GQ@&&;^???pxc~=7X=Uqjr zeMi#YkZRwQbe~lFcg&nX{~$2XKM2$(^V<}jqkrB-G@yUpleRwT zFwj5Gl1#fD5EfG^O_9w&t5M~DDCr+co{uDBmaJ1uyBnZMy0yg-ME~Hs*hF8*&l)`| zfd0X>`ZtI69DVHR4os++E)ncQi9IwD=pVd?KbEvlB)psTk0sA1l7argrba6TAn*^p z?}Nd>c9N{VA!$Ad)K2V@kx1zy9`_?mWI+G$Bsla3KeRPM=%0JAQfKl=8f~~BEpzL~ z63{=N;N_2oecgWOLka7Z5G2)!{`ocd=X**0S<-%y5by|kxS|f1)t@9aOjg5XXzi;J zvKA?`9x3O1tA`vqA_4sq=Hlx>uHXJdZw$vUxi*THqYibTtPSER43M=X8Ebq>{=BKf z??>|cMpD03BqTCeu01MIQYY{l_*x$zdy-`JpOW^eqz{xmgJktHN&8%4caPSG%Q6gf z$|$`yOztkCeuO6MQSdrBOvY{klY#yjE+dMUK9vemkRwE*io~>tz#RO8(^I-P&_72| zk=SYPC?YC`J<%JlM-msGIp0Xyx1I9F$+fK=Qh)jHNX>Hu_y?jYkhP6u{j7_ur@G0i zekWinrGnj-f6AESi2s z@|@)*OH!2|CF9X3Tp)$7CGAvaLI0->1N0B?wdxUUlJp5wD^)Lnf9$;h{y9BXp~mu2 z1?=lm0k4kg+E~F}*C99B>}$z$%BYjq0t=&WB+s{jHP+GYYpj3rCDx~WiS-#@Vtr0a zEP_ciD<`C_&ja0%{-YE?|FlXp85roFmmT_#SO?Qi8CGM2{@L%)UZL7N;84BY)@9#F zg#MvL*|+ox=)NL5;LyDEB75!GzCStor|Xi8R%DUJii{eOcT?E1u=5q=;Lhs9 zJdVlVUBvHDR`=#*j!s^v`Sd+Bg|ib=n=*IcP9qSbH+Q zosUR1q?w2uu`+o&4Vm%;I6B2=uk9o6Mtr3wCE)K!pl3(ZnU`jX6U9Ndo$(`|JqxPwN-71Cn#i!u7E_Cr5Q0RJ4cANoZC z_($OrYb1#iK>zScZN}?&Fs~W?XUX%6r1D8s_u4VdqS4hsGOyrZ83XgNyEifm7N`~9 zB50XbmoZET{DZly?>TdsLOC6kFoRRFpJM@I$7~DnR7}3F+A#}b+Qs-dCt6_2Hm1NR zW8(hJDbRNJ=-&YUq>oipCTPP2d_ty=Rn3BC5mcL?%@Ek+vFb&FcCnz&613R@&h6o! zA!y^cPo|(v5P<%H+h9Q(A^`n^+e-y4SAeP%Zm$uvLV z-RZ7e_Q+T^Kv01GdC!$cZin%q!QE} zp-+?5Jei$LcjvieI!(MU+qP1G0TED-ZU7_wMu&d6?CZs<(rrIw(rqN&o(4)Fow&YO zaXL=ZHozj-1|+)%O2@l4fx4k4-5cAK%JS1i`aX}W9L4`Hsl=Io$+`+WD5KU%^jP!e zv2{&{D3D|447qKFymhARaL;tfNzNHE;953MHW`b+gq=wy3uOX}?9iU8vtwQCYv4R_wbrVQVDCA4T>FHv7Kbl2o#(Vp9z&(0mlS zNA;VJuB*5geCjFenyk8r`mL}nR=BD-NznAw$oTb|EtyboX!@P7k&#`!1^$giHQ@cTS$r{=sKOHvhd!TEm zGiA(Jvt(Pvc$l{j_sYHumq~}bp)RIF{!qm=Rp^jbA5@EXk#97j?JSV}14Powh`1}_?gXoxFdb>QGuhkeQeAW) zjm5qM>`Y!RA4dhbSNKMIm-^yKxEo|mna5>Y4v3dC9hr{enXZ7S*Z9&z9jV9i#N5{) zMGBILAd+{5FDB6KmRletnhHu`0U61$ zeaN5<>Fy?^>r6=j+Y$l865VY|?<|#DV*QC*7sv;ywkr6oE=7X)^o_=>fU|Z70{DAX z?p`1_(hq!D*o5*gjM>c8#k_Q{tUq908smQ|Yt8ItUAi?BE{1h!<=-|hea)ovo0q08 zQdViwR|%fg0?h_@2p)xQV2?4Phi;MmWMulE6S^9iw#W*%GX2j95~fN*%7mtYu*<;~ zW^pUiFJ0Ia3nZdjV9#9$GYAvXZK>&X;r=N1CRd)VTyRw1EJM{QsieH3!|E-}WndDl zM7}hcF?-I=n`LMti0q4rU2ROiIl-_ot<=EU)dcsij7*F1+p}8Q{jtD&hNmgzp($D7 z_T=9N$O#LRzTCaW^23W$Lk~z6hiXbD?rMW>P(_jgmn~Q>( zsi7M%1TAv4MRsg22R+pOJNK760tSk(2!QPodI+y5?|g_1KIo4L<`ZE^2sw0^G3^L8HS8sXuj9Bl_$j6zvaK z9UeVNU5*bm?G_nD<~CA%F))&L#Kv`I=1u0+NA^t>Qr|Fiz>ss$ zz$vAy-y-9MgOmdXPLT|Sg~lB+VENgGfm1Oaw=i(}#|@MY&%}VhPbAe#f|At~nil0? z30Y0y*2J_#PBWjqE^cFRW;Q)> zGnE@A?YMipay~niVlLk-wT+nE#ZG0wOyxCPGso68iEV%)vslO6CR$dIx%n~sYGB2t zhOF3}Y}jqi#hT+c%v7@3lXn<46P2n1=rGt1{g$i|!Gz(CYJW6$Ip{lUgQ%cOhqmPb zR7!`@#DH1Dnc2T**08%(!^X+otQtN!8CDGuzb;zYvCcoV;=XBGO&r#!MA{B^^QzMO zZX}b4UpCfj4tRyZi#vQr4wd+0Xh73$47{$!3rA1F^aSIDe{l)y=ZWa^SUQB@f{uS> ze9(9yigZ7kfUU{m#tW4@)fKX~Qtq%`*ecZC#?SZ2dZAZ1$9mzHS!BKNxeF!Cg|J?@ zQ&4Y{wcBNGybvS$6VED{8!v1WxbeajGB;khl2$J`8w;fbx$(l6E;Ni6x)p(}7k&xu zG%W`UJ`<9(-5w8_xb;G>fX$|tF4P+Y!+IeM{@L@o8vL7!Gf@YMs4tN{OR?_YdQZ^1 ztc2?41^TUmX9c|h+!|Kc!C}b9Vs!Zc!&f2i`wef>X@%01KMN{W=QknOcT)8_Szj)A zZlPoi6LRZldCDigbEbYwKI>@mfi@R3Hh;r{9Nso!7vpesAv9_*gJCoE7h zHdi?>Fc-o$cp|&jOxD~`;oO=V8FP~{%VVWab^+?EBJTAkvrFUIr1&%i>ao%8SS-(h zk3(XW$0~ga&K{0c;|oBouijTxb9jgP`MothOy=lH=Qnf4cTe~*wk^y;L(xR5@_C&b zH@jWdR>@@C3{4&GCEI2>vc6jO+#x&AXM&NBj^A>BRn`5K4y78j%9zEgerFbc`J$aw z{2jWchGwUVbx@KdJ7r{|tnVaVD7ha0wtZG@EHzWqGnfhQVERO!m@hF zz3Z#negaw6_L^OlbUw6hO%3#;ZI|Y>{S2}^UQF~bFxZ?Cs6nvaDW~BT>OPGQ>K4|Q z^Ox_$4E?m=IU_i@x+1Ne#AP(7n!5}A{Z9Jei3k644nwa595Mk{rUOX8k!rE7)SQDj3ik>J~2*<(w1uUnLu5oXw?-l;SbJdYD+<%RML0Tw<~|I6nEt}>519VK9hv^Z z1WKmAFee+Pzi@LA-WM?aC7ZeFuhp`8ha6F*oMZZHQao?)PSao2W}6c{zEI_ zus5~{R>F!gvbh~L5^SkycF7W_Y!FM#FIgx&HWn;vK-^i&A$%#U*}){)%78GiK4+K^vzC>WEGRAmokht_ zrfHN&$qE=PTWY$pcp+>U1_F(r6}X$TWF;$J0Q-Wb|A~dHl%+X*+BkHfGBXn?7=Pve zodGN$ecSet*53X+QR-?As}u8kD$ln3GTVX6Y`vzEniFR1RM%y+Ch2YtD}edkbE#6% z1@zl@>N%j_-ct?GZ||v{px@q8u`Qjz22Ul-Z||wQ*W|rWk%z|)%r62E=6CQ^1M}N^ zs{T8eUnO&@{&^lizen>p=y$|ad`+4iEN80zd!XO*VtzBHa?G!hAz^+;Of@jSIa7ZV z^Q)W-`bF&D2mOAUM?1axXL%>igZW)J)%NXF*Z{S?kRPc2hg?&CUHt*f?ZMap_fceGGuQ0z~=A#i$=6A#V!Y%>XhFdc2SD0UA3tK!5S$8&S zH{)=~j?2SAzg!dp^lM;#myj?FiT}?rzem@S zLa|^o=6O{UwEF~gqo8dPMscfh4-5SAkWl@I@Y`19@<79_-73>=NEcgjx60?YC1)}v z<{0@^1+Ggk0Tc(_z*PBuL`>;+tZ#2w3%i|8LLD{eQ=v8==)huVaZq=XJ87}Cr*HY4jb3OLCYte;;}q`Q1-JR5?QtM3S@A52s!-hXdXAprkA#RF z2^cAEZyW>{iW$M~v|<L-1L+mzP-dnn>X|Zcc)M?{jnL{Dn-k+>!wItf#-;~D2X5~1 zS!~h+pRRmEK?PD#(M;pn@tNvZWtzXNE)*#FnH(!GlJpk+hccEQY#vvl+r%Oap$Go9 zFo*&fekcPTqy=@Oe^r*?FY`~*{bkrX`Kk;HSzup{24XK1s9%?9r^>o`j=#UM?W;21 z&^CWrd6N49)JZT9Z*W74~N-}0#bAssOT zj_1VnoGN1>)75Xvv~SB2zAf`Tr+-~WZslg9ujqf8YgX#Qzb>z+(XW|%!W2+8f9T|cMZkDU9$S?}*eZ;o>MUTKSVmhXkE`PP6u%CiG-m*ni> zRC_q}c&D?cQ|-xxj`H+$9!acOjMJaMZ21frah#r5UWmX<*~5uYY{wNS7X+qzn%9g< z3OJm|u1j1~S?6SNdG0!%l-|c#akt*vS#g)Am*UhDovbboo#+{}(JV%d?TvRI>uixg z#`Dd5stRO4jgMI&M7_YdZJ2W#b8Z{%+&04Lc6Y`DBLil=flh6ZQy=I|800isuqxX9 zf)Ple_U40e!Az>}D!B}`y~{!kH5f0G<=2?0Yu5}SURI@F1% zR6F`mr#}(`UsWECV<}!=^jfk#me|oZ20OJOPJOU5VMw5FT;S9%a4P5=k0ny{i{R%O z66_(vcn@LdAzeDiFsC}0ItX*BNNSkTL6{Ts&ACxSPMD0Cz5SRi&8T4;~*9K5uOX}!rhIr^|gVEI>%P^-t#OXva7~1~=r#}`l9Z77Ws_5F?+$M;i zauGa9R5OqhAyFeRQ*N{d+=e?nBb>o^tUBDOjc{_(6nG6Vswl}AL-7}pt{Mg~n%|V< zMA8HP4{vV*-&B?MkKZI+($Wo7s33aFUY1hYB1J*UIzQCgfL)R+*lYLMeR_>Wm*Icn>r}_VnJFX?l9Wl_c=G|0{Fi3dFS*0v*ez8 zmghX@oaa1ex#xTzi|EmUCF##W(PYHFK)T^wBU;6i2^sOLGaQTYJkus- z0cIB5Q>_YrvEHyU16O(nS@>I#DIM?7)42e(*RTQX$QU+>09?YI{L>?E7~S}Z=^i&r zM9OVx>-adp;z+b811!;r7Jn3;-b71xUqqu6M$v|{i3yEsux8vk#eoU%nWQaA_q8gu z!4}65QfguduCMe}23x#CnCK0vq6bZy_*W(eycef?lJ6K~@#L}sD<~9ndylFI5s~SB z@)7h8rxo_81F(v!}x=@tYj{VdV_Ew~Is0Z2l+7PGwL8LE0f zr0YVCvJn43&&ha8Kg$l!JWGEIGz)~X0|gNiMHk1PH5k@)pnwy5n2=FYOjIZ>J`*Kv zDQZiM?_@>(8Ex-4b>JUgPVCD`7U#(3p%y8vEfhsb@(sQTK~eRSlPxS4d6=cSA9d;e zmgXdS4z;u=g4)>D<$5Y4ZZw;Ld}VxYw^psVL;Fs)PMs}tyF_mxUP~t?G%TC-QKlfCVRAt zp~a!2VKo%i<_WKKXGbs8eZ%1E(!#GDW!qYPYR}7$^71tbm*mx zEmtTeZbhzP2;kR^2wk699J(P_9%!NQFU{f@Zc)-K(Zfm3BfG-s9Zn-zp;Kh&Q&(bz1E)8>h zF*walOExyQlJ3U|?wNpVie`TF5fZbr@K%wdt(<88l|8C`A++p59r#1}kug$4 zKy56E@`!DeX-;{qjT?3GhDyUdY7M`#J5)b;t<0z}SSqGilqnW@nnf{KOEzv7@J0Xj!>3qb*Hk`!v+(Z9$m`BCRrX zY~S_v^~HTR*xLnWv<9luP@OAhSsc^R&fSrbcM2(bmk7|LzMAK9V?<9sJpU76;35(7Uyh2um7w&t5q-vw5=U` z+(zEf-Qc9@9u*#+{v$SK7Dv>fNcUJA_hJZy!I@DO$7qXkkHvehg`b%r-)C`*3BJzF zkkc)WkrwDBtY|+pLP9<;LPFj*ipqONKDGzI(h#tZ0vafw-l+VO`O}E0d`$ia$bY|4 z`H1{0W>}ONmIf_)D>W6|Y{``ON}#xC-<93vnP~aepkQ;*Sk&tI7qK+~)q*n9lBkQ^ zvFBCe-)oGmwSn;=WJ7%2BDo0X7mP*a z;Wdt4X{$nPqX3$WG)u+#!y3Bz!=z5t29ToNofk3~^%K;|+NgIkWR1h*2l@JL16|e; zeg3M@?#RHSH#oY}nvc$u$g?cFC3&_*8BL`f1^utg!c0|E#?bqH^gbK!Z3{~DlGb$< zgpP$wARUIKe*3W95>i1lQ6HFsbqFbvAGEX)!Q$*8i}yi`nguI8KSAuym@^V{bJ|5# zj9{iMtulvr!_E*^N^G-XLU$yXYvJdOb(rYay3D>pbrH2l34(lkLGPtGbPC<6`w9LR106cUJc?8UHl3mXI*6?&lJ(~@Jo!}?Je0SM z(eD`jQ~84<;g2K-_85zs-ZExsCrfcWX`-N3P;1cyYFzL@h~aW%Lim)BBbY-R!#jG5)iPd1eY*FtzTSi(~mCQ>er!Du5H2zw(yR zcOM8f-0B+<;FPf+aAO{)vOkk58Et`Ux8qy$mG>AOZy5uxY8_yRLnYWZq4y)MQU2?Z${7<)g+t^sChS^548B7XelrTPbIm}r5Aw%};QG!$?AcdrcsTURq!tCaZByZH4PVlcXfjqYkAy>~Af zy8?|}PJ*Peq-Lt&ZDWxuR$h3nVXaohL2l^aD)4u10g?nBQR*Xu=oLWIn>;`ZC7rYEcf*BDP}mle@PteZS2m<6g~9`!|in5+G~y9i|6o8%{~0Z2%d zwuNXL?&yW1r9hp;x5R0c>#cNVyhT1{#l7W!8YioWkm50Ga+tSd09 zU$fS_td-T)+O4PyYi)_Oa;vp=y|uCg)vZE8u4gq3NXYl;x_1%P>85;-UM{8@+ni6Z ziTUWua=uwUZgp{3>c{M2_cMNB_cKJ_73H`!2nl)I8ia&=&q&gukxy7XZ&dY_pAsAe z0)uCqGZ>$^LHeYXU*1%HDLyh7%W#xMg;%if!1PS?g0U{naV+G>fb19ck zS%Kkj+6qL-lUAf-h>$0&BHExMB;@8kAZ);|qaS`*o-Yh0NJ#8QboVx~C z9;P*bgq*hqkdX7&Fi1#AaI6y;B;nDM2jFH*9cTs z1PQrOaM%TWcq!n&X4RxcD)aDGM99}{xHV3-ci?@Sk0C<7FWM@pstFSE<)!FrI>YLI z3=(olzuN6fS#-maehmZ(xqYepPh;&XOXYfF?T)2#gR$1LRNiN#V1k51@JB3oKMOv< zf*D$kM9!R_cOP00#d z$t7#a*Vd9{Hf#jyv2hvFaE~vvd6^AY4pc!~ouHj%^!-1~B)izm0bPp90^6>)0O9L?GeT||&RZzJGlqw4fDusdoBqWnPI^~on3AZxZS#rb z09Mg!HU!3xsyS5}Xxqn2Z7N}FMBVh|FNy|h9?eqn6>(unoIaibX|9r-r* z`t2L!Cv1)(c8D&xzgr#<~Z$6cWF+k zz4XH^zNXLJPO>bL=`Qt0L?j~(uwrz%{xIgQcRLefRhK6TVfAL#U6dzm-Y0EruXLr& zn{P9tfb6;;16=$?teT}FE{0akRuLDY$w7#Vx07Qd9R0~bh>OF?L5PbJ$?-=xvdFOs zj%;!i!|@b32yn5490a)d92}k<_`&`}3x-oDOTw#yI+pVHiG(!tM;fpS^UWAISYN;2 z^XD2ZRP7*>8U3dN2xDFWfiM=^1khn1jJX9<9xE{O(`d-C(~!eIox+dk#g7;oZ{~AT zfWf%c#xNMmASx;bV_tz_V(;e13Jiv!yciAxicl};q3lVwL!L{KmlQZG1q_67NdeY{ z1!nn_(Q(=c6hIuSQ%)JZr;YLxg5ya6AdKvd)KeP>;}85vBVjPIAn85Zp2{RDwvh60>fZ*2nSxZ0fTXiARh4A2$ZV{*kXl(+-$5Z z7UXY?d=ttlmkEw?VJFfAK^T#)OaKVu7U4j-Kp>1;1%NPa6}CBq;%!?5HAhzd^L~PGyBE~=%w}K|C zn3t>aSu<=Dymo;f*$0|vjZpavn}a!N!l+1sT$!(|6Xc3~WxXK3kgseIR^`a#Cq6P+ zc`@JX$`61rZq9dL&P5=MCHW4S@+!?Yj7WA_OI{RQ1tnF2yiIUCCjf)-B>@R+J0U(SoP*UJ8e%lW}*8cd8^dhR< z&@=>Wp0if|8Dr~Dh=I>Pvw7PfU@*Qh2x%NH0obYJ;|%eLzf{epywpzv0jYEg@^(Ra zNr3u{+vyfCp!Sqs7Mk6HVQmtoB>4C<6d;V-g*|_p&F&QggmJrI*qX%R5(p!r(k-{0 z+XY}SZWkB^V_{O2hG?o7jBm{b1|xz+7TyNJco(zu0d9gIjBY{Ypbdl(K0&$!!uUlJ zKp3|R9Y7fA%GKtQ?Lr#{BdcBh(LtUct7aQ)gZPReth)oQO@397YXo_hAnz9Val`n2 zu-y3gP=>_#$xt9MzDPrm&X75bK`;&;j4`d;#vmB~Y$FIpkDxqfgTPb^N|7zS39p-M zP1OPr7@xOc5<&=!FW7*pFH-xLhaeas_*?QFND^AR$_nKj zP}>ZG@%@3y=6nXhScHwP;{3dPJ1|9nCXx<+)Xb`U@}zZ}VNHtsis0BGfP2e_xI+L0<4)>_I|T)|T{(mRg7FoBAQ)c}iU@*{r2_<`Lgn5m zeEf<42*y{0IxdL7*pV<07{i7QxSps8sxTuA2*#cGrCNU*YH}xr3_vixEdYY?ZDC*S z9^t@FrX~r3@pVD|)>!+7AYU=^eyB<1FG2un*$4BEXKiK5Q1@!KoE>? z3xHsJTd3S4D1Q|yUl)|ugvvLdHi5v1xIkb;v~~!L@Dl;S_!cFo{Tn5yeUlO}2*$UO zj@QgV!~bNgtfe&yJHFjwbZ~Rbfd010zZxCC8TpVoa*@rk$!5mTpRf8UtMa{Q^zb=s z;`xr?s1-VZEWIPh@6aGtD=6YSg11&^hq5%t)P}M&aD@D>z+ja;nvp|H{>XaViHY}p zZ@AY06vx3;CR`K;oUY)g6KMY|aF3b312;VB3#m#0qQ-JOHNLQhY+tvk8TEb`j`w#1 z)=yY*gs$56O~XPF7>MCG7Ryeua=7#iq$1jh{9pnOhlH~Q*}aCHdxecfJL`mv5O3_7 zYCM`!U=QI2G1#LcHSA!m3jfrK{&YZ)>ji#58qToN7gzq?$%a{`4(LyZ1fV~OAEp{E zj!@u+WtvpO*%A1q=^0;{iX#0U{F9UlD2AKDKivfV>4?yLMA&u|i`b)8LcHaOfLb%m zoy^dm=8BW~Kc+T+ECBxL6M^8L2Baw$1@9&Hx%g|rdzl>Id}9$lc<|lR0RQyK*mf^5 z;{xzc{}34b6QMs9WH9t6Jg!53nr$NVrw2{#(4WNr6#nVwk^dX~(<~FeCRIg$`iF1> z`jeE(7pEGk0C55Irv_TFGxR4h)X^XW;Ggyh0r;nngaG{0eu0-#4gH4);h&^bz&{-j z7_1WrqQRC9=MSaI9}A98gc6@na!?4MKT*tf(aKmfpWt8-+Mz#*4ISa14zV07hnE}? zs*XA?3RQvwZ6T#H_@@t3<)frRKNSq`-rWxV3H%cL6ZqEx{pqm4zn03-pAHK^e>zId z4TuNu7xF(5 z2>t0}L21AM!KbA0qtoE@lN0m<=uaZxpMIe_y((a3^nZeXs^U^$8ZEPU7!Eue=8Y(H zM)q@VcbeG~&Kus^dGuQ^_S=BCJDUWCAk{1YK?*-5O<;)uNDUmp0Hm6r>5KL>3jmO6 z77)t&M*u*|)pAOz(E@7#hxORhnBbZoGI@Ukp$c%UYG`KySN{A!WUQO;d>o$)3|8{ORAdsWT6v_;!gHbx0Cm$e^~1K$;?|u zFdbKe$UtW)^2gKzw&6nh%T5?M-Q;V& z0VZnvgZOMfFj2D~YzGr{|ARmkU@%ci@?KiLdpDS1;-dw=z>N~o93_7j%;^_3HJW{R z=+s9DJvKVi&pXNSvh;hXQo10J)bBw|@n7*3AM=>WIez6&_u{+s_V9NMuj8i-cXq`F z&?h2HyW_G+qx6FmPEn3uGb^8@%3r5?yzu5t!)u11B1d_$?4$9#&oje52G4OG$@?*n zz2wmD-Ss^Lhr5~*efQt@g`Po8{5=jlxtTQLN( zgB+|lOKXD*+2egBQ?8~^!c*P%}ixGr40e4c|PaE}>u6YQh; z=?TQI<5$np>pb9xk`*P`M>W##=te{>dpcj!w^Mn7{84J{wgh>9YT4d=O*+3L;oXFj z3BM)W)hn~tqrL3C{+4hw;Yvc6UL$*%dadfUwbvWnwub98i$Cb)-CT!%Rc=REu(8E(>wEeozv%*DhU>#T|CBHG0(=fkI{a7u~*sJvhXFEJIcN;3-1%REs6heAb&h9Kze7{H~sXti$UK^{)gVq(5w8L zgEDi2F(~uT+A#)=b~Y7TvFB2e;k##2&CkI$F#Z|&AQdd+dU>Md`m(J#BwPv12a$+=`cE1BqwO6G4(Mot$fr>{~yW93G2U8Fq! zaXvMW_U~ou`s;6>pr#tY5?)Q_|DGl<>>D7(JkxpYu$m|Mv%|0!Uf37Q#AOnPSYUIc zGFB%q>I>hp`P;&~iJMaWk+sFC+s5e{>!oi?#_ABlFYa42ntx;m1Jm|d?=OI4X?Q$WrHWH zQW3tvY6X(bkTldI;D9Zq6ECi?cH}Z)fooR$arb2!llVE zX^JLIjwK#GicG5+B7GT;6W*Chr!=)MBH{C}HGD15HIXr1a|f8y^_kK|`Z>yRLHWo; z!{%l-NEjzsE1@B9+Pfcl`4S;`WFHwa69$<vn(yqZ;xl=fuEHeE97wWhs6uZ?+ha0}^7v!H} zd`Gpt?+VV6?vO&UL&s$W2n$5`Xgk8eR5F)E33X}MS_#7(Q4UYz7Y+}ky0>F0@z(c( z$tX=?n%swK{@{SL8p`*R-f1<1l!0mKO?}hk%l(x>X-)mo`y-L|!hktTJozge$Sx)Jf_N+$f zpZ2VFrB2q@DKJJ3RTHSb8+i0;bZzNZaw|0}J0z3-87u_p7*z=AgTYgY6|W|uX~clg zVGOHTrVdsZr&xbjBIN`}t9TD*@uy)6z*)0LDoxlX5~ zrpfQ>lscV#ocz8{c~@s2FMpu(zM6Rb0QYL5^t5M^m??Gk%+Hi`9!+NJaHs0a-&M!0 z0!&3BrREEBkIgh3p>MVw^mN5{z_h-xgMm5pFtCO$Cbnv6169Ev(v|(Xrh1+H{Xpe_ zuBkyM|1eOg*V#we?^7Cd_R;n+7x0%Dg>-Wy-C9Vu_q%~8UG#;~_>16u(zlXH`C(v# zwk83)QQ^w>1ASU)9w>v#0Uhe^`+-P`7;?A>GME8m*~iCY)K>|kv(zL=q0Qe7ls2X# zZc|tq@$po#*UF|x<4sE|JNZI5FOEqw2W2$TFF!RHA3Su1g2Cva z{+{iG7M**NG!vB`kXR|2&l~R9L$Arun$&v3iTu~8K>_Y5_24H3yXP$G-2ZCVxr3~T zLCti}^)Z56Da4ciHVN~-ZAmn;lF)Gg)SM)}&;MyyO`sOKNtlU&7JMwXGa z8r`q+FW)@YL4axd&5&e++frQm64p>}k;=N39g*naY1Ww7y>Yfo^c+G2_5{#B3{ss)<;mZ zp7wrY1Ae3_gYovmXe6*msB4?OW_i@g!ip8*=?pT$4>?*&90z7_s zbP7Ti4?Cu0russa#l!sPFjuaLRdR;G0^s6dzEB?f5K&dDTx93m8N=V1LXq}f#S|TT z)U3N-xSDR}IPWT|(YV@GXbWH1KI9^ax_#1RN~TA$b_p({;ckq5L*#Uv!Jr1Y9SuV5 zyKQnR8l|Zu6LUgx$D4yrSSsQ!XQukQ)J{%q80e2~=a18>NdRCOcQ5)wiuq zu2-W)A{yRU3$IG<5E@(rw1sjUmD2AIgJSC{^>TcaTB7RM+emMYN(rdh2y}g2#c1rG z^XpU0dSz6KKVp-CC18|Qg_s02DNL{woR!;()aXL z2Rq24;!z8(7L=_lIa%Mc)8thD)#A+ZOg=8P%$Tg-otnjIISznmSsEw_JZG?X4VQ&i zE<}TO`~ffuyvJxY_h~hIlFLR9)At+Lrbhv0%Vo)-b=%fml0)hMe62%+kmq#f`E{9h zm_A;+ba+|)F#U+wc1kW7(JUJvE? z8BPB`SC@^7bFX|NRVm#opG;M@?3GWYDu3E5pQb5s-KVLPqJAHH?C-+T@4Lj_KGL$c zfA&l(Q&RMEqPwC>??Go;hpF2=Ww)g2?;mjLVkM`gPnl5{`255C6(4r&n_Kv=T40A9nlhH+%R74ZhTMcHVA3h*f!Q(Lwn!tv@o}Tv?}SMzSB>2P1bh#5qH7 zX7aqAfAZjfntF5Oj=Cs+2ngx-Y&)2_r~F{1nQQs&8ppN#^fP|{{lLGu-wF>tdE{RQ zzd!i%!Q%(HLjxLzAO7g@tiuZrzjXNV!xs+z`{1f0tB*W&q~OS!BTWaNJS-epdqg}U z9VtAx?#TKh+Yc*;haC23d|kXRm8A^VCyAQF_9kVQmOpzaoga3{I$awxUF#Va>a+WD zF)HZ|`3K{xH1AYvYjASAANNZ^spwcsZ_)Jg-fb8aiXzK>=~i@XVbo?MQU_Ldqv+ z?3l|}9Lm+Na_YcS=@D==zziSep{?6B@QAFd8_*iLe6m#S;*e#srrx|08x`P}zx%L< zH=I3GR(iLd$IWKkpa}uXX2Um!Q34kgq*_->?C_5!L~c5ACNSQ~^k==_>} zl~HxbMxI?K$JTismTR=~Zmq{9@6sBiLxFk6N*GSal5Us?7j{jKpOSV@9XyU-uh&`(C`?;7z`9p}@OKXn!A&2`jp zU*oiye;AiFE{OwSV&%rfZ0De3}mJd2-+JZXX& zmg~ubM}x-K+5Pdeocoh!HJ+Adwa>y((Wm$r7ejO_RPGJyJ~dQ*8pz0@VI=~E!7K{a zy&VfUhq4|(GqJZE8jY7*sEL0Q`*+AFof5nbo94RLHL_0kx>m+QxntrU*Ch_5)vB2x z<#qAZ%*rN@(ccyJjap{w7=7Xl z{F%3{(P}7hVwrc8zDL+e#)RswBX@7r9Y*dxs=G|}r%wFo!?pb%K z)LCEG#rI?GQ~crMWq-@ij~a2{^YIhv4tzdg@(lW&G5NuXlI`A8 zXG-~>&zd~TFi|S_e8R+;vt~@2Bdz+pEP1THzbJlT_~8q~2VWWzk7s(qT%YszH3C5~ z=3o5NXR4y{T8}}L-+0E+tS$LQ3(s9w>KkC#vWQ=H2Hu4qZ~O#j(ZAPLHRDFv@fQAr z&tYZ9qe)-#z1Hy9F~jIDs8t*{$mx12V1G1Y*`ZPTJMOGDGcjjabi2K6^~P2pgP25S zW%4r`b5Ul{_i8lH8Mjx0#`fnyL$P0C1H9hjas3PYW4fQI=U@L9%vxb^L2r$Y_cgbp znn#%rE?YHDe^;p8{*32RS;aVg+SuK3A^0v`k0GhP?l#}geRjwF!Igl6!5lyTm}d~Y zUETOO$M~FM=+Vz4`Wt+(^D==3FvBs!SM*!fdAxq`poNV^IMIf|$bg^?$I*ue@LqZ( zv}0j5vCyaN;COxavi0NjgZi*?{ciLZTcc0X2V<7qH9?;k_MuvqsT1_wx)&aY>g&&a zIdipjW%jCjcqR(`sKv`ymx&YfcLw86A0?x`Ks8IM0amYa>E( z)Q*Oh@*BchM7)7Uy0YO?)4EI5%En7g>o4u##m1^_t}l7)+|OwAuDi5z{U!2xHRxsL zhYw2`vT*gv9Ddvq+oH!;@ROG3+zn}D-{NiL2ep^o7c8WhW z_|zNOf6#xT5!aobF?;I9b*Cp9H?2E8dFrHT#qgOpb?lUhCF@Qbrj4D@();Ypu@6pc zNjN)UqG95!iG|Oeo$>%QK+&^j$E%M?MyclXw5(a1Uq3y5TGpJFL&v7io;*w9&Sp+D zWVJkdX584BlgCTdXCIh22fq`?XHJv;a<*m4w3*VoXCgAE&73u9ru6oivR#w)w~EQ9 z>wSI*NRq!ZpL{y*8h+G&ai5!CypZf?p7p*+7Ug)u*qVRwx12^tg_3yjLMB4(U*qR$ zru%E0%Z$X9^u{x}<{vNkv_F3J;su=agjT`lzmR(L8&?az^bD31zrf>4!y11x79vC9 zkbo4@y{=PGNWMrj;`pz6wAcs<;m`Q|-*|MHL^Dz3-#uTp?0)^Au@_EDIwY}wgQ=z8 z{w@F5834~;IBoZnE0SE_f;(T$%inJIyT9STZ&~UlcKMhyH6CyqbEfS0{rZ84F=w1H zi6*+;OHR1v6RfSZlPET5Y9H3$L=|2lTzPFP$!%^?-iJ(5KH} zdRz4-V^;~2lB1!BJP|Gl+6gWf=ZP?!@sWPTssx29t9d|wyBRh6ori};Df0b{>Qev3 zo$%;M$uzeZ(23eq<3CCA2el1^>R3h-6y*KX8DBJ0%ej7|M>K3XTZJY%Q} zOx3^XWtu_XRa|z)-?{30y!s2Q+&%cE*l*-`MX5zSF+8BsX{c@yOQm@1N^+ejxih=zQ+^&F9O8PSKA~f9I_I+Mc)1 z+ON95p_Z))g|hai^Y5N}Y{0dV*K)q6hGd(!pwj_KX*tC(;iKL6DDve{GhrtW85 z=TC+ELp+yV=h5ttv4xGEADFvr-&Fk_V&8*LUClK|^r-Wl@=H!v4X&eTFH}BGE2OGA zheHdl_zhpxgkW}EU2OJ9b9YFZxyR;W-WkKUtsyY=q_@jPsmHOo@g5C=HIbI-T6sFY zO!{thUmiSNn;fasXc3@OcGI%M-I6?rj}^ai_VeCeH<+tS{;qh+?KnH|RPx@d#Xb#& zufLW1{yLZ6ec`F1a%?qZ!iDMJQ(!#+ zL)+uTex3VrCV%%qR$N#~NjD@mmOYxK->gNN@3Zt-(F+@^na)m( zmkKXz{K}=TYDsrr_~jps_6zQ>etECa{#9emH|`6oRgcx=QH;&}OFq3nqAI!YQbaO! z#G<%*vxbZ07ITfdxc-lvgN7*EIUSOM=eN`Ky|s{>t~2y}Pt0=c6ES@(&iwqXTAd~_ z&fhh?Hbiq#WB;`_v~2zieYdcesKC9-o|>Ug7C&=cBvtUnMQ8*3GaR`X{lTF_pB#G2 z#l3g&{fmFY-;t-y=O&)}`TW2OZ+}{TblTCVqrV<0Ir6~g?_IpvU#JtqdlwC(8x0pu z8N2G)%l`=zGxcz(qr+{f&m>jfS7k8wOq|OPi@59QL=1M=s92 z_{JkM^_{fhI(Dp`znZyylgzDkXx8%nOm-~2MMzxgk92Q_TopHTu89E-#r_nZj<;Zg zsM^fTSJj$o{OEH3uwy6faHwSMJprNx8M1b*L$?+O&Eysw+tKm0 zCd9*8S~H!k2=QnDEXbeF@asJT;E&US#l!_R)ZP`$NWq8Ri(9<}%c~MB_74rRFsvG1 zM;LLB#OT&^btUd{WY*)q+p+y=99_Y!0J0zYE>7rVX8JE-|M)w4iO+=T&rIJJ$fLLl zOVLI5c-9$K-=nNIsrJ3tDH0&=Bx*4D(1}A&3rbGM2~lX=Aze%WoXnH86asEoO*vWet&{3MI3T0m&WccCnzd*85K8yMGkkVUzvOg%P35FZjZE^MoTIOkm4o8>7cWroRK6g|`AAE(ST(V6aDh+b3;NT-}l6m`&LBy)-J6Gb%_(1lJa&fr+yQ~Bz$=sXRV;9_Z+_t92rqCjPbUmzx7S+R!Xp!L*2n5OD z#iez#gfgWjTRwp+cY09no$B2V%KhomBD32;c|VP!m?=94WrrUJ<^D7(Q2sY=204BeaCkGQ zN#fYqQW1n!LO7*x;mF;j39P%2g*?I`fPp+n9t0|AAde_3zY1t< zP!1T#0~Ll@kUtHWD3e?4#W<^H-wgGBq1YF4VY5GSk9J;Z5l&_MnxW7Kju5MH)0*rm zwNy9aP)DS)!Q}rDdf4}EF&WnJXQ~$V9?-*yvw2k<9driAQuPI#Z@aK=m!v+^&u{QW zoLlb?$!m$wn6rMJOpo|HEuHpu=?sqpF_(Vy^b@kt8K2{%kPBpb@xnUQ-X60y7J31v zSl~~dI+Pa&A@LJRKVkF}jvtS^MJ_U=hxNBZo}b54K_7sX*3he)d7Ke~xoh!Sqx6u-QPfEO~^ z9scTi_jU-oP9ia=|o>52~e0wFEE$1+G=!BKwA2MM!|3>Rm`^Ejl(cv7_H2Z%^#%1YZ zvtJwc4SQa6e#M?&VEn^HKFTk2lmB75^B)2;$hd~IeUne$5MC4F34@G72NjbJ+H81d z9AvK;W`@yWi_dSW$-sl0g|O!pTI@Tc7);P5JCrG=oJ}=R2d0^Py8Tm4&M-{PxoWf5 zU@9#3PB9g3E-{#(0}YGDi@uqs!fK{L8y4H;BK(vTh06XYboCOvm6jOpB(oXQp(IIZ zP&jh4%k`lpY9zcNl9eLOz)AUH=mESTHh3&$texLfS_}nOT)nF}XEX6h%8j%G{DGwb zodNe|(n{MmqxjS<&}B=g-^$dIXjht@l{ETecNHBh_QeIvH2Rt^$i5~_lxlQUE#@kX znLj%|V9&7_S|3zzZq5-TRWYfD92Sb3NhXUa@drgzqdG(Fc=x9G9NE6fy_p`HUoP>5 z`8yHCBHu6cKrTH$-1H$*l3&}8?;CRO^PM#y4@a>-sqkrV{y*D?6rUy=j~8j4W;VzZ zIv9v7n*almAmGyfAMHazUvMv z5(U_T%I7zXVg@4Dsp_WHKICarrDiSNt|9x7wWjOrLtYw1_9362n2R&jun+l1ldM_m z(5_|nAu(k>>D8@e_95-2L|*jY7{t-U-jf23$08iRQXl@vH2zYgR{jROmySE~o#eSFp+R$+m%wn~^ zyFk5%Yrw9pKnL22Y4}!`u5_yh(}t}STe?$uSMY^mF1nO6uBx%iOp|vq9i;aNRYnS6 zBP#nLW0$R=>(o#TwW11YL-;f}`u_9CK+%I0@yzyTiAi7BUOHDSFWxsc-W9b>$}Fy5hPw#VOt^r9 zbUjd!H%q5Qey&?+jzGM`=ad5}C}$hy0QAaNrS}CKVPC)zvL>S@Cw75@MsbVm&lKlu zvOmiT`6eCnA102a{LmKV)w|1a`Qw@a<;9h!^W~ZDXU}f~9XZ6u;PoHlWZ8? zH&%5IVpEkZ&k*k3Gj3E@ed#kW&&iy8UIx})EHb0)-pa_95m_GDhk>%Fk}h-LK1RHESwKpP~ma zo(w6Y`7s8vehPKcYW>t;z?c4a1$&$I)3JJfg#JeBry|UsVz|Az^;32qq@yljh?tPM z#aNM)pWEac2Bf4R0r8RXHyLNB&7g77Vx~s{UJD%JV$3o8UoZ{hJ@lZE$P&c=iZr#1L zic5?oq^$Uyt<*ir$X?|ZMuL3XD;be#8DfP@WA`-#IzBXks}oZyzDQQ4C&n3K4DRyK zZNBJwNEhT9LIf{Q2z9}7Oj)+Mx1r01xXT;DYQivWDPO#e#Z>zlTaK$LZ)-i|9-Lw3 zS5__NUdG~V)&VTereX3DFvT#%q?%&LDMuvgEx#Djo2HuV&f=zNCSbj3YkC3Y3QIZ1 z6qCCgOKuIsnrT=lTJ#XC!KLW|zHu?~nt>t2fn`q!mj3800wfk1h7ovcyb76!j!X*+TGvP1xURpsm0X&01?DdpObwP%w46sbQMYi|8d78% zH)JXogPv+C_gz5=S?dj5YsT;yOr09UsA^IbYd?XaHz<8*On7mAy?@kXnC@!?~ff$n9j)Tbjw;%pxz=pO`cGBk(zdu$_G0x?z&n ziP$>|H!X%@@pt;biS?%M2i#uz*6s9#Y~NH471CO-Y)TkajVX>g+w(OCr-P(QC|ArM zp@^=_q!=5$SW9S%MHFs}1aRy4JPqkIvbOugI1JtrgbjNu5VmldoEhF4PuFePfTmgl z4&1i zLD=4$F?p84n?N$sv6qDVejlzg(_Hd)wwa|aT|ZK=Ql59p zTuzH^Y7UfUVISWxC1$$+L)=5=q{h^H>u{3zcmG_4hw{vSVQ)kI$A@%kZ#aq zHGgYrvxa=hB!6v!mQ$@EL#b*#m(YbgrhqkMTbgpo7KietD-n6}lK7WV~ZeEFI9@A~|Zze~JX|QGV1Z`g4wwzOck&BN^|EmFM+STHtV4H;AH z7c!7Ez3D2VDj*czbPdrlK5%w2Vey+ujJI4hVOW%u7L(fu`YX(D2mK%6mZPt)69e_1tOa}tikl`Y0$XG6rHDs(nRBOm^+`C8I zXo5LpgMpbt4p}RQt_>~r_aKGQ5Q#(N(Ge1+4Ft`xsm&U)&45`i%7!liCkg4FmH#?x z$Z7wXHRLH`_7XB@nuCK0%k!Sdfr-_eMKC(dj0<-(XAEP<@FvsB6Y^FpvRSP#*qUd3 zH0U{giERbFs$>E&r!9rq)ayNGGE1*8`?@%1IWA@e%rysMGRvs}zaUA~FEVm`ZqA~| zJCF++UuBts?MPT?wk^tm$yQ`Kdxn9SYmJk)0=!>u!&&4aXXdPA1zEAgwz8vLX0oPC z7K8chg|_7@BRMd%5GGw=HFXRhw6grIE%k$JK zV&VDAm#p9tX7*h?ctYRB!Q>)00fuN(lTrg^#sj9DBRP}<0eG8g!<%ZVRgHq*Imkyf z`An6^O+v;TO3Ni>O@qH0EpkTAqMSTtZyI)Sm)fi=a)Kd2tJceNmgS2%D^Te1ZOsWB zFXYyDF+~oV$_)}Axd>Kgd%s|E80Cc&prVHG0Wba$)s8h0Ygds$gUo!2n4FBTnamJ3 z*{}|VaM6*`RBrmuE$5!3)4Ts)n4%WZuwO!eUT=%~e>FuN8l{Vh z(1k~L*6F*1M#k#?JKNDBr_n}5M8;)gxqSbv?dShX`k?9Q&YfX=T5G)a;P(%?9yv7>64dJapSbamGaB(T8?F^u$AGt@g&F|2x~!;uCp`$OQHO-FWnW zXFD4D_rEkA{omP+7XM4*(KQqIkKkgWqdG-K=)=Q8Lv&hAY`;)GbUh%Ut?ejluBVsyQ^{?r3QGu9_Hp;}ZTo+kS&-T@eQjg}K++))nR|zi(St zmhhYToD#cZM=>_LpN3(QpXc($bK{XL$AQld zzZw5K+q!M0b#H1HcM6HzVAD`jis_cM^q1ZZ^uuv-p2_i;NnUDlEHg3FxKF8%)uxg) zrr)=a8v+}=>&i6KLvF)0b(7;afp&)5*~ho`9-PsviBcTb0{+|y#ZTe`@} zQ%&x57xnTqOx|Ps;U0a}0s{V!+nLE7Kd;qH?tD0Z+KF2v246SDwzmPGbe_knM#}3< zj`i5CuG))@k`>!m+NHvERk0qju*!ckFJLCOt7`!>ll!YHk6FnTzjB?lKeO>!{<*`1 zIi+xWaT_Q~Y1!KlSEG%HlQ)>?2#H_kr90V`>$J@eneZWy)B25#4ZD3m0(M5+}NbS3NRd7NIJto)nY0(Ug%S>3b&4E*ovX=!q~Q5PWCLY z3pG?tzj_3J;eI;AL8mL|b8!H%Map6c*iOKxu~^g>(Z0p?M8FITuxu=}6EAGr*u8PP z9pLY@9ft*($jAjy=+%$VNK!wNe||bJ=UE_%GHk3`FjguUe^a-8qls0XGa?3cgdqG9{j*eypUu%q|36x|^ud+Ctmx)j(i``E+r zy)sy>smxANQEuX0AL_`axB9d6?KLLe76jCA_jYM;f6m?CXoo5MSxq)Y$z+PIGAyS zpJD9V1634|`E!DHhY%}ZCgJ@?>D{)tY_A6Q#oK%kPyNsl*z6=B)b06U7VVw=O!)j9 zm{Z;`df#LpPt=bB>=Riyjeq$~WOM0@#8o#DmLTwVC#(`fetg=71Q%nCvm$aLT>@W5~gxkm9^cLgOtWR@Tv zor*6IAyZsY^m9uvQjcIHiWA)Or# z(Mr4_0@o3H_*11nAR_vN*hmc$i7Z)XeSaEcl*;DUp`69_0SA@8L$Pa?2FOZ}wyTVq zxow-}sJn7}JSYcw!1OVb8?*__N*~)+FcFv{|}wy+}wR@=z6@xz)9X>Jxqw1Sl33?@S7{c$`Ji1cZU;sgWQmF~u}1S0*1 zr3;7%atXFct63(9?69%ahedopxg8?JSRfS$g-Kn3ygohBIPZO+1~HI7lCQ^jv%Y5FP zR6eS6UnEX3YH%)}lW>TFj-lau3w=C|Q)RWf=#=CXBXQ&t-ww;cWxXnL0lO*0d|Ve4 zMl~O!ra`P=uB}#I;0Q*dR-{sOU=%$(s0&`68c5A}Bwtqk>XBd$;}kyMs^79Y>VZHp z+bhYSXknu?a8|T~?hi^lT3wxV+;_ZHz`PMkp8*Py!--x>I#JKEB{%FbcFy75l(A7Np)aX|>-g4~>${y3H?!Dh+xdozoTBaHmd~ z*uaNYrcdYi0ExbQ&A`5`V_d{%`n3tJm_SGzy$5?T^e~$e2BuoDW;qL{bkt#V(ny-i z#iwtP$WTy2gs-RahB5k0BaECe%Q>aur)m(;3RY%Fhgpx&8EQ^85Xw}+N!&v#Xb6Eb z_aspM0qb(IAq)@uNg%kh@JKvdCmTB9@$^aD^trtuM)iqPeQxtF#~trK82)jxwUfy0 z4I+sh%@DEa4vL9^a%G0$%t@?$e-SFK3j2x!?~LmQj!P>c1MFPJ<7z?HeJN$Du0hA7 zhg8?xW73p>OEn;@`9d1i=26V!eb!(aJ+~f{`ltc_I3~f69si4JEH^e7n`TFR#plGt zmJ_a9F|w+Qs3F7BlarGNvxrreC|0#RSEbbU zOsH(p;!dFg%(08%G7N9AHH|ln_u%erZ8)#qSA!+e1iqKfvkn{jcywcLxUT>H54=-n z7^kC~`{4=9sYE5nOLX!|opP1;UgKqp&SBLVI9;TqRT)%&MLcxydYg+j*s>SX1~$hh zB_%~iW6NakzQ=Vn_u#pIg{}s8|DN5xkjB~;u9DOGep+Gya8coC?_aOsv%x5Tms4Sw zKbf7{#E0?mpy}6od>(3;gah8Onz?fMW50U-%$$7GuYUmboO~US6FBV0 za2k$W_yZPr+F-^;^h$n`E#JDBc}-lt9Ghl+IDQD9g{|Nf{8;O1{(+p;JnHgpaiJ|A z8{bRwSFXrdy4<$XX0>1&IBAj15}j>bygVm+g*ETdN0U}$Ke9Y~MK=EDSu-AOi?U)x zHtpaq%wDlFd--CUHG9e8mCN&Cwl2qNUA;69Uka?N@6KqA|ClY8{By9!ZC%a0`>?FC zCQg_(X|iEj^thbmOY-THMPBr{i8BndXO5pXb#nAyHQMvSBac-SoXPA<$teKC)wep(ziZDNqlZE*g zK%`-m^Yz8AEq=YCX}I<9;&Tc*q zt^NW(172E}`*|6sC_uE+0{08D#s#ub3y>>5#|Crdb)DTs$p1>V`}G68xA;QcuN~;M z1yVLJ`@(DZM)bPU#Mo+@51{Dg`G)uBXNE*>-SVuGyCyN&e}|mAK>0N`kp~t!JU)?g z*GQt?0~psFPYAwge13-~3SLt`F{ z;=3h)-GjvFAquJ6zrYuZXZ?o@fP?kX0{c;rU8u9`%sNQ#+gv!TRioH!i%-Mx%GDg) zeoZw+tq})n0yXNs(_Z7g%f5@kZdcx0b77Jz^t;|R%$a4qf z=~4647EtRIQ0u+>Fp92G*#^1_G2kag1I29Dgf)mR+G}uhWtV%`f#@}8&YA;JYie|c zTOT%b%LdLQR{-UzDX7w_<C3?O(@T=s}HT@A5HqZm!BpqRd!HdnVe;Dh?!6>`O4W zv~+LC5S?0}{GZRR*qx1z|7aA)dw!F*W_#|E%d(ZN*~HJ*Y!s#}yNxg+E?>w!0@-iL zL9_psL$Us;a$TS8!AHpIT8@|hol~pfbyU>($2B11>TMTOoT8>7RS#JPOI9NyOX)|d@5=@I+NOn!Q2LsqtDlD$kZ>l$QV zm=ZoiK9E51_8OIIIq1>{68s4V^fUa)71wf<$D%M>7_rFTyJCA3_|1#r-r|#cNw@N@ zMHnxWJNtBoibV}D<)$;tTEvGYxQl?R-YEe>8qG^{{GlK$H6jWT((z*#we@?rniK5N z{M@@7qpmqpNR{}7YYyKshcE8@hX?t4eK7oe&fgnFLCc|NgXS`3{W0J)n*Y@ZE_H^y zg-FhyG`Y(fCi-Dim|8aSo#{|79sj7s0i=N0J0qddF>Mjw8TBwDf#dvNo55<22H+=) z%95x=Kwj~3=Y~1{;l3dN61Y`$UD|Tk@wD%fPY({TUFQhMeZ_b;=8|_PZ5V ztbGLI#)q@=m~0$dZ1_xE9GGS->9-dy>m!&GX}GANGv~}q0(!;+v!-P!AI17p=BA9mq;?DK0qz+?*b^@`)(MoMLNRAtLs6#os1&%M1WDxQPnQSbwF z7bE`KKa!Obv6)rc&b>HJJYA*J;dxs1V$LcJd!%1e{uU(B)UV=4&lrI1 zWoPt5u9Mi2wdJ6nr0h^YzhVp1{9kZTS>rxBwK!ANnXpw zn1tNv77>^AwH;@h1}doH#RLJ@HT&(?7E&k9vo^u>LLfX6QXs)3q;YOinx=Vq|8pe) zyWh9pw>)&`dFISHXU@!=Id^Vcc$Sh%d*|>pMW0?ZFWZq~%(P2Cw(p>u6!yzMwzD@^ z=V#g-2WHetQ|vpsr`TtPg_%nH?j3#Y`rd!*>-~9O_^cSX5MCu^+95wv3%f30;Lk5s z{~p!_-VPrKC^EA{od-_CTjpffNkBj${Ps$Hy{&!w@xQmF?>Tc^c$D%8D=ls}hIM;S zAHUn)Gb$Ws`$u6Uj1h|Pafa)?!+M0|$#&@n_7gv_EBNxZP5cJ|WYw#ChP%!w*D0L1 zy64Ienj4tX-h$U(sJ-Ss4L`i{!SWs&L}soYoUPy$`>JfBq%G_@aEjMGm+S{ z%Dla26!liry7vs+&tjQl5D?AZ47{(T#2~39IFtK!+k5@+SbIV&nGXod3=MOIKJS*hB+ibqJU-@06*!xQN&ANNj9j*5fhXyn4YDrj-vhA`6mfdg9 z{`ALo^}e3O(TAcW)q8!tSkm|~4uFG%ISRa2-jpgz&T1`<2hA;`_1M;ZGur`%+;x(EPSMZXxhHc^<*kTU zPzBViOg_M77o%|$*Xn$NPd?)b zp2;Rn%*YTkGBRpsPn~=>Mes+q+5_)|I9Pki<}coRngp`D2rC?;oq}0KL#Mh<;aan+ zA=9=~5mDYb)!uCWy6bfI$MO3?F8l+n(Z9b^1qk*(cb!wmym`9o^dLsYTwD$qNxqAo ziK|xkjNW_h$W;5h)bI!(y?M%fDcwP%4Mqf=;WTtAt(MW?OHmJ(Egb$q#1N+iYE-^*R>+uGbL?*yJ2W$*UA+=33%7I z7%vX4kVhp$_a0txepIpoN&gae^DyNBcz&w>`BdbvEwIdT=L+STO<=YK$x~Mq7LXfM?9VgPbnJofuk*qqdGtb{t?33X zu@7Y&S(UuA8{a?syX~Rm0|yR-&YXDV)#Go3PX8%%{7GeOo9YW4C9$i3$ z$e3}dT=b948(NJP78Mi}G4{i(AF>ogvsUI7=I7e9W+``NVZLqo+ya(cSXfY)Bw+KH z%ck8bH;v_^_R@ml{3SmSmgn1ZY|EFhC@aRHQU^W z73Q%KTnG3WzF%ktk5QRx25V+Kj zpUcYiu1m_0ToVdhkv*Zn2kBiOKr>&>?z-~nl)ZruyRLpL1g>KLe`SVg&=OLt`^Cdo z&LePVGo8R98GKTIGN7tS-DRQB7~ARR)4Q&CQ1uD`34sr~K78X!*VU^Z^!y>c>%&O; zRZ4$zNclx~K`1l)iuY1+bS|#zvYLQS+jcykE?0*PxZMNxFtI~g3}>MN`KktQ0eYHFAZUS@ES zOD|Z-;AvL|@4Gr*6N7C6j%W37E7U)hyE^kRUjuW(AI%Gsi?gQ2*9iAal&*8ni6GCa z>a#M6y-pX*GDwdmMp|-{L(`qbUNM&I)OrCt+z~W1A^@kH+FDefJD07>S-m*N#y0tC z8azlCA1e@XLA;r6)zWWzi2^0B+g;{o&a&zTf4v9jPbiAD0q|lYoFCnD$ovC;Pj}fJ zF|bj8$0*i!#*&?0*5KXf_2EO+k^UqW<~+1Gr*Mf$E0F_d(@pTEbo)~m`)Zq_Y)i`} z`bQ%MySuKcJeDOIBCL#MF7|n9iKb=XwqGz5x{2e_%rQ}r{stGW=hEC$o5n1LoeH;Q z-JT|xG)vemT#Pobn^?p&=TG?V0kud_e8>lPS}iY; z$rjS0$Y_Prmbh!&Xg31IhO4?F!L(v8-P;w3SQb}0y%mu{tR7;F9>p5bD#n+`lQ-&& zU+(WrohCA7y(KNM!h!KEku}PH)Hj!&V$O#1E!L+x;?e^O%q&hFomkX!dD7b zA)`#gvn(qkCarLiMVBCtt8xn;%E`~oFS0#0sm|^3i6Dg57@@|>>wKP@(rD7gpx50P z9e`#K6Lc?YVs08q{;bha+ECvias**awDXG_>gphMjN~Krwhe>zwlISvHi#Ia@X3ux z{3E`)js9^kLsCDcX2+Qb*1jn(HM==Dz8SR%$$aLAJj)xDfroh z5m{T~ECrEb!(JnP`bxLE7HqDnKrM)dNZl@jF!?8H-KC*;yI4*0YrW4(UFEE=B(Yq; zSYoLrer2~aE+UZsyLS8{TTcE;6TBkbWRvw{_`paTuNi1@ce@MdJ~1_lIt_Lj`--sBKd7IC$w3myG|Q`Ld2vTVQLnfg)wX}T+gNIp$krVa^I?mDil$^?Bz+wLGCu zD#Tq^&sG-{7cR~n9gWc?mdo>Vik27TkB`hCGsW4Gw9*`ONltZEU`u?cw)&e&PF> z&+A*``FXw5!TjG*bS1`u~A41z97Xd=`2_A3|QE_X>AN_$thBu6RW!bWHw z3nVA3$5qn~?CY#3+ts2ziw4PTb;E@ZML$&pw9qA? zlWQBXf6BLn3#6yFhD)T5tt^1=rV*r>SPfIfo;@hNu)VJhErG;g zQzx7<%9S4BThP<;U<7_kgwyfn`nO2KU*#ry%24Jx8Ae|k- z$~R(!=@hnHp!8a8`w_r-gB>li?WGzyB`{`w#o3pQs)x<0QQU_Lt<6UYt+;XitCp|% ziLY@$d}OtC_kUVH>OWp+ZU3wKxp=JguoaEO8}Yc_5NR>q2uO(%Y*}OvLwjh}gcubo zw8~#|snE(^@~R0ij9ol&d?u@cx=)llvD_0ibQG*=tW8pz_hkw2Hpz@Z!HgiXe6BA;s znL9KTzh4i^K(OXnc?O}jb+R&6%ShM|$uP&u<_>PQZE?p$K}6MglR-`CKX~gt4#QsG zuen3(DX0!Rpu!!JpVHr`sf z{G=8(B7EP$S~?u6=F&!vF)eQ}o1rPl9IyU6EP3~a&C>5HBwYp7)dd~wHx&x*8+uZi zJX{S|vf+(f-pB`^fUloi%?BUn?eE*fUsu4AJ;hd6j>Cjq4*dLNLj+eDkXC4rgs~3b z9%~n$*#5niY>6~*mKu1KTC^;2#()4VrM@Or*j_UsT zb})2cNd!*5CEIf`ls@Fr2b|5Vl&^91?(P{$hh`?pS8;0?XgP~d-_V&J(zTZH7B^>c z)xi8i@U-AyW(jJ3#bJ*BvJr|k-xB;#woR<9iN}kRR;Xg^^0-Fqx>6)C1kg#@=KjZb~h+ z>`pcwGk?LVELYbi8`Ze59&h&*0-T&+1Uxy>2!I2ocB9QxIed-dR}X8nK1vYz1M+s< zR)tZyd=0p?fFmPdSRit?&VqZSFhIA%#hlKDq3EAd^7n6f!Kp2ZiEmQ{p+!7SKrRDnSH zsa#1XLRqp?rM2=wW2?4qm!#Ye z{I!d=^|qrMWnW0oCz0dQIR>=<5v_4wX@>q?=flX_nFZc|aX@0Y%b8Ltvb))RUNAyBYT(hI6(%WlV zo}$tgGiGnh0S{YHJP)DD&ce`!fn}na*0}_MJTHamigT)~T+Budj)1LyR>mXuPyW&5pTz>t zPykwWu!N7n<5~$%!(*g`$K&xu3D!Zh#?uckb79GYS$|fIY9SJRqaB1RH?ZtcKNH#h z2J|OjcrQ&37+?XH0)`&_iR}h(F<|&(8lh*x0%4g;F_H}Bt4ndrN=k~|*Pz}@+@0Hf zG3`=XZOix%4s4-+FpA#I3E zZSodqLodyyGY|AyT`0N*dYV=P!i!k`?6Ays;jH4Hlsrw~gcmFKHLLGo{_oUXMCs&@ zE~U2PB@<@Zmj%UZ+evpd2+9pI@>FH;W~sf?=Pj_ zd-2waQ#yi#bWg8W`W?(!BsBtm*+B~*bBBh)wRMnuZOIle;BiZN8@rn0p8{nz`ZTSL zdEzim+0{A?SE%Hi26YH}@YP*hT{W;w86S~xQCrxNRQ!D%$>$s1fqW&0$UTN6VTUDY zJ)NrOtFv&jJ`LndehqX)_ZoS)L)uIfRYt4(qC5=)SX`I%D8VeywYlTwjHD}MasxLUvGEhAihq*m(pVbw1`S}P6s zXyspU5L#1^KH;=00B>SDfj4}#CjT3$BrMM-S|9ev2d&a#mwd=7Epf@RRmyeA-BxL- zi&o`>!EZU%D2Kl==HPf*{XUqp-1N!{*EL5q83l?Nx5`V{fljS z?J(By+NMCmhnDn{Z!YPhD|!pNW3%jYK@9+(vyWrbLksq4w8GzA+p?#Y=wD+I0|tKk z>K?KVm1FCxl^42H6Lsl`#y}LxEw^o`W!d$J^EQFDFuV;CfZ5@DE`3xhk8tT@7>%&_ zj%*Z6ybZTE2s_`wyCGi(PxIgz9(<1n&-35~&W`#C_5>N9zEKLWDgir<#7>&O(bijj zm5z?KU_n8r#q#4^+RNo9xYWgwh_$l36|a!cT=@du#^VI}TTDLeH-7d+o$^QaLY?yJ z@M+EhA~+6yL`mf#KvVLl-Mip)0QB1k{kQzMa!A-I@@D006lKrU!P%gf%jdab zkdATodIM&vGc=jb^26ih3>R^Ot-}`gFWID6D=VQwZO3cCfpo|4c`pB%OF4D&B`z(h zL%mi7$M6`CnSwdksyO7!Tv}5nU*Xc)Ivn3q29jvYdzoX)dxbktpQ3-J=p`&f;NEtS zV~XhE((k!+oJ;*&r0oOJ;mMvV|CURA9B9(`(Mcz9Avp8YrH9R)vs^lhRL?mso#PSp z=|rt#zvGx0Y)UbPQaYPir_PXH;)8$S?WySV;EQP1)?Eks(?PlPHb=*41Af+To9-uy zq##wiz$FAnpEys<9OUnCy#UB3-XbI*CGrKX#zSDZo~^9IxO&JQl_ilorFOUp7U~>RRE_0Y2z!MM{&TX4$Z}$2o5F3t(3stN|rC+=ZX_@h7 z(o>0%{MR<|yjwz!B~mX30w9(ozRnH394{ljsHOaY11ATz&DyRRyU>LP3$0j7lv@g| z4*bGoaM*g}uodh7_;A+F!`5cya|f%e*F2BFi+nX<-`;`8;9v1rwxevX1Bxi`|5QY@ zB@tnq`F~B6G*6OBpSxb$(`FbSSdX!uVOmFfURzcJMT`g6X=(lIZksO`-kL8#saNi8 zP_wWE!8pqdnGY)>zK{{G+!dJ&GK_T*0BtlEMB!@td)wZ6xVLE9;jq<~(?AP+a^QTN z!-?&Qh}wWn;I@?)7XBFf$E*tZPsxj2@C8}o3Y;u!=BZr@e7ph*+!jxEi6;k_y5P5{ z4CcCe-U*FAtf-gimq=^=il*L}WugG<0ia3qG2D{=s12v%1KiPizMq0BG zu=IFVTjHb&t&T(S#v}1YIB(+A7au#{Za_kR|IUD+C17x{bkWlNLR#ycn=q-~vB?p~ zn4p6*N`khzij#t-6lsr14yUngmhPbGSV+$nS@u2My4!SUj|m(2PJM{6r!1X!$uFc0 zR;8%Ak3t(Lu7lfEw^pd1C2s1B*Gi#@Kc>mMVLq660M+|ZzxxF-4Mi!oZ3kP>$ka{v zg&**^o}}zg_n6=(@R?Rae_-zpYA;8FF9%IfsS{yxGN;RX0MIxvu6=kUo9DwE?L_w$Z)2dYEOr)~~Dmx2!Gb$;H;O-l#zS~{5)wRBw@4dQ!BI`0X= zwt$UB0nE9b--YmoG?pkqk1ObP1vhsDg`c)Qy|txdD{M7UVPcbziT0#p*y9Vf$D3He*6v|wOuRL*^dL>-Z*$D(+9YB7WHZg? z`CH)O1X%GbV+-`YR%O`Z>h@qg#g-q$?4X#SrUyU8tiZN6(c%k}i(C~+dW(_-=>iY# z=wQ`b@lEhyj#n#}9+W@f>Nt5vhpK1KHZdkJc+bdgGMKtnHG{ejSE-`})SOiNZ YidSrruhS0Q%?Cf`+sjh-m8E6;H$%vt^Z)<= diff --git a/applecorn.s b/applecorn.s index f75af19..c6d9f82 100644 --- a/applecorn.s +++ b/applecorn.s @@ -229,6 +229,8 @@ MAINZP MAC + + diff --git a/auxmem.bytwrd.s b/auxmem.bytwrd.s index a89a23a..45fe1b5 100644 --- a/auxmem.bytwrd.s +++ b/auxmem.bytwrd.s @@ -489,6 +489,8 @@ OSBM2 ASC ').' + + diff --git a/auxmem.chario.s b/auxmem.chario.s index 4119eef..efb9f43 100644 --- a/auxmem.chario.s +++ b/auxmem.chario.s @@ -462,5 +462,7 @@ BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT + + diff --git a/auxmem.gfx.s b/auxmem.gfx.s index 0b155c9..e6ed6b5 100644 --- a/auxmem.gfx.s +++ b/auxmem.gfx.s @@ -321,3 +321,5 @@ RELCOORD CLC STA VDUQ+7 RTS + + diff --git a/auxmem.hostfs.s b/auxmem.hostfs.s index 9a19246..d4f2272 100644 --- a/auxmem.hostfs.s +++ b/auxmem.hostfs.s @@ -688,19 +688,19 @@ FREERET LDA AUXBLK+3 ; MSB of total blks SBC AUXBLK+1 ; MSB of blocks used TAY - LDA #$00 ; *TO DO* b16-b23 of free + LDA #$00 ; *TO DO* b16-b23 of free * NEW - JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes ' + JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes ' LDX #<:FREE LDY #>:FREE - JSR OUTSTR ; Print 'free' - LDX AUXBLK+0 ; Blocks used + JSR OUTSTR ; Print 'free' + LDX AUXBLK+0 ; Blocks used LDY AUXBLK+1 - LDA #$00 ; *TO DO* b16-b23 of used - JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes ' + LDA #$00 ; *TO DO* b16-b23 of used + JSR :FREEDEC ; Print 'AAYYXX blocks aaayyyxxx bytes ' LDX #<:USED LDY #>:USED - JMP OUTSTR ; Print 'used' + JMP OUTSTR ; Print 'used' * OLD * JSR PRDECXY ; Print in decimal @@ -723,20 +723,20 @@ FREERET STA FSNUM+3 * What's the maximum number of blocks? * JSR PRHEX ; Blocks b16-b23 in hex - JSR PR2HEX ; Blocks b0-b15 in hex + JSR PR2HEX ; Blocks b0-b15 in hex LDX #<:BLOCKS LDY #>:BLOCKS - JSR OUTSTR ; ' blocks ' - STZ FSNUM+0 ; FSNUM=blocks*512 + JSR OUTSTR ; ' blocks ' + STZ FSNUM+0 ; FSNUM=blocks*512 ASL FSNUM+1 ROL FSNUM+2 ROL FSNUM+3 - LDX #FSNUM ; X=>number to print - LDY #8 ; Y=pad up to 8 digits - JSR PRINTDEC ; Print it in decimal + LDX #FSNUM ; X=>number to print + LDY #8 ; Y=pad up to 8 digits + JSR PRINTDEC ; Print it in decimal LDX #<:BYTES LDY #>:BYTES - JMP OUTSTR ; ' bytes ' + JMP OUTSTR ; ' bytes ' :BLOCKS ASC ' blocks ' DB 0 :BYTES ASC ' bytes ' @@ -932,67 +932,68 @@ MKERROR4 * AcornOS ProDOS ERROR40 DW $CC00 - ASC 'Bad filename' ; $40 - Invalid pathname syntax + ASC 'Bad filename' ; $40 - Invalid pathname syntax ERROR41 DW $C400 - ASC 'Directory exists' ; $41 - Duplicate filename (split from $47) + ASC 'Directory exists' ; $41 - Duplicate filename (split from $47) ERROR42 DW $C000 - ASC 'Too many open' ; $42 - File Control Block table full + ASC 'Too many open' ; $42 - File Control Block table full ERROR43 DW $DE00 - ASC 'Channel not open' ; $43 - Invalid reference number -ERROR44 ; $44 - Path not found + ASC 'Channel not open' ; $43 - Invalid reference number +ERROR44 ; $44 - Path not found ERROR46 DW $D600 - ASC 'File not found' ; $46 - File not found + ASC 'File not found' ; $46 - File not found ERROR45 DW $D600 - ASC 'Disk not found' ; $45 - Volume directory not found + ASC 'Disk not found' ; $45 - Volume directory not found ERROR47 DW $C400 - ASC 'File exists' ; $47 - Duplicate filename (see also $41) + ASC 'File exists' ; $47 - Duplicate filename (see also $41) ERROR48 DW $C600 - ASC 'Disk full' ; $48 - Overrun error + ASC 'Disk full' ; $48 - Overrun error ERROR49 DW $B300 - ASC 'Directory full' ; $49 - Volume directory full -ERROR4A ; $4A - Incompatible file format -ERROR4B ; $4B - Unsupported storage_type + ASC 'Directory full' ; $49 - Volume directory full +ERROR4A ; $4A - Incompatible file format +ERROR4B ; $4B - Unsupported storage_type ERROR52 DW $C800 - ASC 'Disk not recognised' ; $52 - Not a ProDOS disk + ASC 'Disk not recognised' ; $52 - Not a ProDOS disk ERROR4C DW $DF00 - ASC 'End of file' ; $4C - End of file has been encountered + ASC 'End of file' ; $4C - End of file has been encountered ERROR4D DW $C100 - ASC 'Not open for update' ; $4D - Position out of range + ASC 'Not open for update' ; $4D - Position out of range ERROR4E DW $BD00 - ASC 'Insufficient access' ; $4E - Access error (see also $4F) + ASC 'Insufficient access' ; $4E - Access error (see also $4F) ERROR4F DW $C300 - ASC 'Locked' ; $4F - Access error (split from $4E) + ASC 'Locked' ; $4F - Access error (split from $4E) ERROR50 DW $C200 ASC 'Can' DB $27 - ASC 't - file open' ; $50 - File is open + ASC 't - file open' ; $50 - File is open ERROR51 DW $A800 - ASC 'Broken directory' ; $51 - Directory count error + ASC 'Broken directory' ; $51 - Directory count error ERROR53 DW $DC00 - ASC 'Invalid parameter' ; $53 - Invalid parameter + ASC 'Invalid parameter' ; $53 - Invalid parameter ERROR54 DW $D400 - ASC 'Directory not empty' ; $54 - Directory not empty + ASC 'Directory not empty' ; $54 - Directory not empty ERROR55 DW $FF00 - ASC 'ProDOS: VCB full' ; $55 - Volume Control Block table full + ASC 'ProDOS: VCB full' ; $55 - Volume Control Block table full ERROR56 DW $FF00 - ASC 'ProDOS: Bad addr' ; $56 - Bad buffer address + ASC 'ProDOS: Bad addr' ; $56 - Bad buffer address ERROR57 DW $FF00 - ASC 'ProDOS: Dup volm' ; $57 - Duplicate volume -ERROR5B ; spare + ASC 'ProDOS: Dup volm' ; $57 - Duplicate volume +ERROR5B ; spare ERROR27 DW $FF00 - ASC 'I/O error' ; $27 - I/O error + ASC 'I/O error' ; $27 - I/O error ERROR28 DW $D200 - ASC 'Disk not present' ; $28 - No device detected/connected + ASC 'Disk not present' ; $28 - No device detected/connected ERROR5A DW $FF00 - ASC 'Sector not found' ; $5A - Bit map disk address is impossible + ASC 'Sector not found' ; $5A - Bit map disk address is impossible ERROR2B DW $C900 - ASC 'Disk write protected'; $2B - Disk write protected + ASC 'Disk write protected' ; $2B - Disk write protected ERROR5D DW $CA00 - ASC 'Data lost' ; $5D - EOF during LOAD or SAVE + ASC 'Data lost' ; $5D - EOF during LOAD or SAVE ERROR5E DW $C000 ASC 'Can' DB $27 - ASC 't save' ; $5E - Couldn't open for save + ASC 't save' ; $5E - Couldn't open for save ERROR2E DW $C800 - ASC 'Disk changed' ; $2E - Disk switched + ASC 'Disk changed' ; $2E - Disk switched DB $00 + diff --git a/auxmem.init.s b/auxmem.init.s index 5116ad7..47d76b4 100644 --- a/auxmem.init.s +++ b/auxmem.init.s @@ -194,3 +194,5 @@ HELLO ASC 'Applecorn MOS 2021-10-13' + + diff --git a/auxmem.misc.s b/auxmem.misc.s index 39f0a27..1ecaf77 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -555,4 +555,6 @@ AUXBLK ASC '**ENDOFCODE**' + + diff --git a/auxmem.mosequ.s b/auxmem.mosequ.s index 79fd49c..d854ac1 100644 --- a/auxmem.mosequ.s +++ b/auxmem.mosequ.s @@ -86,6 +86,8 @@ OSFILECB EQU $2EE ; OSFILE control block + + diff --git a/auxmem.oscli.s b/auxmem.oscli.s index 4451c8b..aca5038 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -516,4 +516,6 @@ ECHOLP1 JSR GSREAD + + diff --git a/auxmem.vdu.s b/auxmem.vdu.s index b23b2a1..f78412f 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -28,7 +28,7 @@ * VDU DRIVER ZERO PAGE ********************** * $00D0-$00DF VDU driver zero page workspace -VDUSTATUS EQU $D0 ; $D0 # VDU status +VDUSTATUS EQU $D0 ; $D0 # VDU status * bit 7 = VDU 21 VDU disabled * bit 6 = COPY cursor active * bit 5 = VDU 5 Text at graphics cursor @@ -38,97 +38,97 @@ VDUSTATUS EQU $D0 ; $D0 # VDU status * bit 1 = Don't scroll (COPY cursor or VDU 5 mode) * bit 0 = VDU 2 printer echo active * -VDUCHAR EQU VDUSTATUS+1 ; $D1 current control character -VDUTEMP EQU VDUCHAR ; &D1 -VDUADDR EQU VDUSTATUS+2 ; $D2 address of current char cell -VDUBANK EQU VDUADDR+2 ; $D4 screen bank -VDUADDR2 EQU VDUADDR+3 ; $D5 address being scrolled -VDUBANK2 EQU VDUBANK+3 ; $D7 screen bank being scrolled -PLOTACTION EQU VDUSTATUS+8 ; &D8 +VDUCHAR EQU VDUSTATUS+1 ; $D1 current control character +VDUTEMP EQU VDUCHAR ; &D1 +VDUADDR EQU VDUSTATUS+2 ; $D2 address of current char cell +VDUBANK EQU VDUADDR+2 ; $D4 screen bank +VDUADDR2 EQU VDUADDR+3 ; $D5 address being scrolled +VDUBANK2 EQU VDUBANK+3 ; $D7 screen bank being scrolled +PLOTACTION EQU VDUSTATUS+8 ; &D8 * -OLDCHAR EQU OSKBD1 ; &EC character under cursor -COPYCHAR EQU OSKBD2 ; &ED character under copy cursor +OLDCHAR EQU OSKBD1 ; &EC character under cursor +COPYCHAR EQU OSKBD2 ; &ED character under copy cursor * VDU DRIVER MAIN WORKSPACE *************************** -FXLINES EQU BYTEVARBASE+217 ; Paged scrolling line counter -FXVDUQLEN EQU BYTEVARBASE+218 ; Length of pending VDU queue -VDUVARS EQU $290 -VDUVAREND EQU $2ED +FXLINES EQU BYTEVARBASE+217 ; Paged scrolling line counter +FXVDUQLEN EQU BYTEVARBASE+218 ; Length of pending VDU queue +VDUVARS EQU $290 +VDUVAREND EQU $2ED -GFXWINLFT EQU VDUVARS+$00 ; # graphics window left -GFXWINBOT EQU VDUVARS+$02 ; # graphics window bottom \ window -GFXWINRGT EQU VDUVARS+$04 ; # graphics window right / size -GFXWINTOP EQU VDUVARS+$06 ; # graphics window top -TXTWINLFT EQU VDUVARS+$08 ; # text window left -TXTWINBOT EQU VDUVARS+$09 ; # text window bottom \ window -TXTWINRGT EQU VDUVARS+$0A ; # text window right / size -TXTWINTOP EQU VDUVARS+$0B ; # text window top -GFXORIGX EQU VDUVARS+$0C ; graphics X origin -GFXORIGY EQU VDUVARS+$0E ; graphics Y origin +GFXWINLFT EQU VDUVARS+$00 ; # graphics window left +GFXWINBOT EQU VDUVARS+$02 ; # graphics window bottom \ window +GFXWINRGT EQU VDUVARS+$04 ; # graphics window right / size +GFXWINTOP EQU VDUVARS+$06 ; # graphics window top +TXTWINLFT EQU VDUVARS+$08 ; # text window left +TXTWINBOT EQU VDUVARS+$09 ; # text window bottom \ window +TXTWINRGT EQU VDUVARS+$0A ; # text window right / size +TXTWINTOP EQU VDUVARS+$0B ; # text window top +GFXORIGX EQU VDUVARS+$0C ; graphics X origin +GFXORIGY EQU VDUVARS+$0E ; graphics Y origin * -GFXPOSNX EQU VDUVARS+$10 ; current graphics X posn -GFXPOSNY EQU VDUVARS+$12 ; current graphics Y posn -GFXLASTX EQU VDUVARS+$14 ; last graphics X posn -GFXLASTY EQU VDUVARS+$16 ; last graphics Y posn -VDUTEXTX EQU VDUVARS+$18 ; # absolute text X posn = POS+WINLFT -VDUTEXTY EQU VDUVARS+$19 ; # absolute text Y posn = VPOS+WINTOP -VDUCOPYX EQU VDUVARS+$1A ; absolute COPY text X posn -VDUCOPYY EQU VDUVARS+$1B ; absolute COPY text Y posn +GFXPOSNX EQU VDUVARS+$10 ; current graphics X posn +GFXPOSNY EQU VDUVARS+$12 ; current graphics Y posn +GFXLASTX EQU VDUVARS+$14 ; last graphics X posn +GFXLASTY EQU VDUVARS+$16 ; last graphics Y posn +VDUTEXTX EQU VDUVARS+$18 ; # absolute text X posn = POS+WINLFT +VDUTEXTY EQU VDUVARS+$19 ; # absolute text Y posn = VPOS+WINTOP +VDUCOPYX EQU VDUVARS+$1A ; absolute COPY text X posn +VDUCOPYY EQU VDUVARS+$1B ; absolute COPY text Y posn * -PIXELPLOTX EQU VDUVARS+$1C ; PLOT graphics X in pixels -PIXELPLOTY EQU VDUVARS+$1E ; PLOT graphics Y in pixels -PIXELPOSNX EQU VDUVARS+$20 ; current graphics X in pixels -PIXELPOSNY EQU VDUVARS+$22 ; current graphics Y in pixels -PIXELLASTX EQU VDUVARS+$24 ; last graphics X in pixels -PIXELLASTY EQU VDUVARS+$26 ; last graphics Y in pixels -VDUWINEND EQU PIXELLASTY+1 ; VDU 26 clears up to here +PIXELPLOTX EQU VDUVARS+$1C ; PLOT graphics X in pixels +PIXELPLOTY EQU VDUVARS+$1E ; PLOT graphics Y in pixels +PIXELPOSNX EQU VDUVARS+$20 ; current graphics X in pixels +PIXELPOSNY EQU VDUVARS+$22 ; current graphics Y in pixels +PIXELLASTX EQU VDUVARS+$24 ; last graphics X in pixels +PIXELLASTY EQU VDUVARS+$26 ; last graphics Y in pixels +VDUWINEND EQU PIXELLASTY+1 ; VDU 26 clears up to here * -CURSOR EQU VDUVARS+$28 ; character used for cursor -CURSORCP EQU VDUVARS+$29 ; character used for copy cursor -CURSORED EQU VDUVARS+$2A ; character used for edit cursor +CURSOR EQU VDUVARS+$28 ; character used for cursor +CURSORCP EQU VDUVARS+$29 ; character used for copy cursor +CURSORED EQU VDUVARS+$2A ; character used for edit cursor * -VDUQ EQU VDUVARS+$2B ; $2B..$33 -VDUQGFXWIND EQU VDUQ+1 ; Neatly becomes VDUVARS+$2C -VDUQPLOT EQU VDUQ+5 ; Neatly becomes VDUVARS+$30 -VDUQCOORD EQU VDUQ+5 +VDUQ EQU VDUVARS+$2B ; $2B..$33 +VDUQGFXWIND EQU VDUQ+1 ; Neatly becomes VDUVARS+$2C +VDUQPLOT EQU VDUQ+5 ; Neatly becomes VDUVARS+$30 +VDUQCOORD EQU VDUQ+5 * -VDUVAR34 EQU VDUVARS+$34 -VDUMODE EQU VDUVARS+$35 ; # current MODE -VDUSCREEN EQU VDUVARS+$36 ; # MODE type -TXTFGD EQU VDUVARS+$37 ; # Text foreground -TXTBGD EQU VDUVARS+$38 ; # Text background -GFXFGD EQU VDUVARS+$39 ; # Graphics foreground -GFXBGD EQU VDUVARS+$3A ; # Graphics background -GFXPLOTFGD EQU VDUVARS+$3B ; # Foreground GCOL action -GFXPLOTBGD EQU VDUVARS+$3C ; # Background GCOL action -VDUBORDER EQU VDUVARS+$3D ; Border colour -VDUCOLEND EQU VDUBORDER ; VDU 20 clears up to here +VDUVAR34 EQU VDUVARS+$34 +VDUMODE EQU VDUVARS+$35 ; # current MODE +VDUSCREEN EQU VDUVARS+$36 ; # MODE type +TXTFGD EQU VDUVARS+$37 ; # Text foreground +TXTBGD EQU VDUVARS+$38 ; # Text background +GFXFGD EQU VDUVARS+$39 ; # Graphics foreground +GFXBGD EQU VDUVARS+$3A ; # Graphics background +GFXPLOTFGD EQU VDUVARS+$3B ; # Foreground GCOL action +GFXPLOTBGD EQU VDUVARS+$3C ; # Background GCOL action +VDUBORDER EQU VDUVARS+$3D ; Border colour +VDUCOLEND EQU VDUBORDER ; VDU 20 clears up to here * -VDUVAR3E EQU VDUVARS+$3E -VDUBYTES EQU VDUVARS+$3F ; bytes per char, 1=text only -VDUCOLOURS EQU VDUVARS+$40 ; # colours-1 -VDUPIXELS EQU VDUVARS+$41 ; # pixels per byte -VDUWORKSP EQU VDUVARS+$42 ; 28 bytes of general workspace -VDUWORKSZ EQU VDUVAREND-VDUWORKSP+1 +VDUVAR3E EQU VDUVARS+$3E +VDUBYTES EQU VDUVARS+$3F ; bytes per char, 1=text only +VDUCOLOURS EQU VDUVARS+$40 ; # colours-1 +VDUPIXELS EQU VDUVARS+$41 ; # pixels per byte +VDUWORKSP EQU VDUVARS+$42 ; 28 bytes of general workspace +VDUWORKSZ EQU VDUVAREND-VDUWORKSP+1 * * Screen definitions * 1 3 6 7 ; MODEs sort-of completed -SCNTXTMAXX DB 79,39,19,79,39,19,39,39 ; Max text column -SCNTXTMAXY DB 23,23,23,23,23,23,23,23 ; Max text row -SCNBYTES DB 01,08,01,01,01,01,01,01 ; Bytes per character -SCNCOLOURS DB 15,07,15,01,01,15,01,01 ; Colours-1 -SCNPIXELS DB 00,07,00,00,00,00,00,00 ; Pixels per byte -SCNTYPE DB 01,128,0,01,00,00,00,64 ; Screen type +SCNTXTMAXX DB 79,39,19,79,39,19,39,39 ; Max text column +SCNTXTMAXY DB 23,23,23,23,23,23,23,23 ; Max text row +SCNBYTES DB 01,08,01,01,01,01,01,01 ; Bytes per character +SCNCOLOURS DB 15,07,15,01,01,15,01,01 ; Colours-1 +SCNPIXELS DB 00,07,00,00,00,00,00,00 ; Pixels per byte +SCNTYPE DB 01,128,0,01,00,00,00,64 ; Screen type * b7=FastDraw * b6=Teletext * b0=40COL/80COL * Colour table -CLRTRANS16 DB 00,01,04,08,02,14,11,10 - DB 05,09,12,13,06,03,07,15 -CLRTRANS8 DB 00,05,01,01,06,02,02,07 +CLRTRANS16 DB 00,01,04,08,02,14,11,10 + DB 05,09,12,13,06,03,07,15 +CLRTRANS8 DB 00,05,01,01,06,02,02,07 ******************************************************************** * Note that we use PAGE2 80 column mode ($800-$BFF in main and aux) @@ -136,14 +136,14 @@ CLRTRANS8 DB 00,05,01,01,06,02,02,07 ******************************************************************** * Addresses of start of text rows in PAGE2 -SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80 - DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8 - DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0 +SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80 + DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8 + DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0 * Addresses of start of pixel rows in PAGE1 -HGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 - DW $2028,$20A8,$2128,$21A8,$2228,$22A8,$2328,$23A8 - DW $2050,$20D0,$2150,$21D0,$2250,$22D0,$2350,$23D0 +HGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 + DW $2028,$20A8,$2128,$21A8,$2228,$22A8,$2328,$23A8 + DW $2050,$20D0,$2150,$21D0,$2250,$22D0,$2350,$23D0 * Output character to VDU driver ******************************** @@ -151,78 +151,78 @@ HGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 * On exit: All registers trashable * CS if printer echo enabled for this character * -OUTCHAR LDX FXVDUQLEN - BNE ADDTOQ ; Waiting for chars - CMP #$7F - BEQ CTRLDEL ; =$7F - control char - CMP #$20 - BCC CTRLCHAR ; <$20 - control char - BIT VDUSTATUS - BMI OUTCHEXIT ; VDU disabled -OUTCHARCP JSR PRCHRC ; Store char, checking keypress - JSR VDU09 ; Move cursor right +OUTCHAR LDX FXVDUQLEN + BNE ADDTOQ ; Waiting for chars + CMP #$7F + BEQ CTRLDEL ; =$7F - control char + CMP #$20 + BCC CTRLCHAR ; <$20 - control char + BIT VDUSTATUS + BMI OUTCHEXIT ; VDU disabled +OUTCHARCP JSR PRCHRC ; Store char, checking keypress + JSR VDU09 ; Move cursor right * OSBYTE &75 - Read VDUSTATUS ***************************** BYTE75 -OUTCHEXIT LDA VDUSTATUS - TAX - LSR A ; Return Cy=Printer Echo Enabled - RTS +OUTCHEXIT LDA VDUSTATUS + TAX + LSR A ; Return Cy=Printer Echo Enabled + RTS -CTRLDEL LDA #$20 ; $7F becomes $20 -CTRLCHAR CMP #$01 - BEQ ADDQ ; One param - CMP #$11 - BCC CTRLCHARGO ; Zero params -ADDQ STA VDUCHAR ; Save initial character - AND #$0F - TAX - LDA QLEN,X - STA FXVDUQLEN ; Number of params to queue - BEQ CTRLCHARGO1 ; Zero, do it now -QDONE CLC ; CLC=Don't echo VDU queue to printer - RTS -ADDTOQ STA VDUQ-256+9,X - INC FXVDUQLEN - BNE QDONE -CTRLCHARGO1 LDA VDUCHAR -CTRLCHARGO ASL A - TAY - CMP #$10 ; 8*2 - BCC CTRLCHARGO2 ; ctrl<$08, don't echo to printer - EOR #$FF ; ctrl>$0D, don't echo to printer - CMP #$E5 ; (13*2) EOR 255 -CTRLCHARGO2 PHP ; Save CS=(ctrl>=8 && ctrl<=13) - JSR CTRLCHARJMP ; Call routine - PLP - BCS OUTCHEXIT ; If echoable, test if printer enabled - RTS ; Return, CC=Don't echo to printer +CTRLDEL LDA #$20 ; $7F becomes $20 +CTRLCHAR CMP #$01 + BEQ ADDQ ; One param + CMP #$11 + BCC CTRLCHARGO ; Zero params +ADDQ STA VDUCHAR ; Save initial character + AND #$0F + TAX + LDA QLEN,X + STA FXVDUQLEN ; Number of params to queue + BEQ CTRLCHARGO1 ; Zero, do it now +QDONE CLC ; CLC=Don't echo VDU queue to printer + RTS +ADDTOQ STA VDUQ-256+9,X + INC FXVDUQLEN + BNE QDONE +CTRLCHARGO1 LDA VDUCHAR +CTRLCHARGO ASL A + TAY + CMP #$10 ; 8*2 + BCC CTRLCHARGO2 ; ctrl<$08, don't echo to printer + EOR #$FF ; ctrl>$0D, don't echo to printer + CMP #$E5 ; (13*2) EOR 255 +CTRLCHARGO2 PHP ; Save CS=(ctrl>=8 && ctrl<=13) + JSR CTRLCHARJMP ; Call routine + PLP + BCS OUTCHEXIT ; If echoable, test if printer enabled + RTS ; Return, CC=Don't echo to printer -OUTCHARGO ASL A ; Entry point to move COPY cursor - TAY -CTRLCHARJMP CPY #6*2 - BEQ CTRLCHAR6 ; Always allow VDU 6 through - BIT VDUSTATUS - BMI VDU00 ; VDU disabled -CTRLCHAR6 LDA CTRLADDRS+1,Y - PHA - LDA CTRLADDRS+0,Y - PHA +OUTCHARGO ASL A ; Entry point to move COPY cursor + TAY +CTRLCHARJMP CPY #6*2 + BEQ CTRLCHAR6 ; Always allow VDU 6 through + BIT VDUSTATUS + BMI VDU00 ; VDU disabled +CTRLCHAR6 LDA CTRLADDRS+1,Y + PHA + LDA CTRLADDRS+0,Y + PHA VDU27 -VDU00 RTS +VDU00 RTS -QLEN DB -0,-1,-2,-5,-0,-0,-1,-9 ; 32,1 or 17,18,19,20,21,22,23 - DB -8,-5,-0,-0,-4,-4,-0,-2 ; 24,25,26,27,28,29,30,31 -CTRLADDRS DW VDU00-1,VDU01-1,VDU02-1,VDU03-1 - DW VDU04-1,VDU05-1,VDU06-1,BEEP-1 - DW VDU08-1,VDU09-1,VDU10-1,VDU11-1 - DW VDU12-1,VDU13-1,VDU14-1,VDU15-1 - DW VDU16-1,VDU17-1,VDU18-1,VDU19-1 - DW VDU20-1,VDU21-1,VDU22-1,VDU23-1 - DW VDU24-1,VDU25-1,VDU26-1,VDU27-1 - DW VDU28-1,VDU29-1,VDU30-1,VDU31-1 - DW VDU127-1 +QLEN DB -0,-1,-2,-5,-0,-0,-1,-9 ; 32,1 or 17,18,19,20,21,22,23 + DB -8,-5,-0,-0,-4,-4,-0,-2 ; 24,25,26,27,28,29,30,31 +CTRLADDRS DW VDU00-1,VDU01-1,VDU02-1,VDU03-1 + DW VDU04-1,VDU05-1,VDU06-1,BEEP-1 + DW VDU08-1,VDU09-1,VDU10-1,VDU11-1 + DW VDU12-1,VDU13-1,VDU14-1,VDU15-1 + DW VDU16-1,VDU17-1,VDU18-1,VDU19-1 + DW VDU20-1,VDU21-1,VDU22-1,VDU23-1 + DW VDU24-1,VDU25-1,VDU26-1,VDU27-1 + DW VDU28-1,VDU29-1,VDU30-1,VDU31-1 + DW VDU127-1 * Turn things on and off @@ -231,228 +231,228 @@ CTRLADDRS DW VDU00-1,VDU01-1,VDU02-1,VDU03-1 * VDU 2 - Start print job VDU02 * JSR select printer - LDA #$01 ; Set PrinterEcho On - BNE SETSTATUS + LDA #$01 ; Set PrinterEcho On + BNE SETSTATUS * VDU 5 - Text at graphics cursor -VDU05 LDX VDUPIXELS - BEQ SETEXIT ; 0 pixels per char, text only +VDU05 LDX VDUPIXELS + BEQ SETEXIT ; 0 pixels per char, text only * Turn cursor off and other stuff - LDA #$20 ; Set VDU 5 mode - BNE SETSTATUS + LDA #$20 ; Set VDU 5 mode + BNE SETSTATUS * VDU 14 - Select paged scrolling -VDU14 STZ FXLINES ; Reset line counter - LDA #$04 ; Set Paged Mode - BNE SETSTATUS +VDU14 STZ FXLINES ; Reset line counter + LDA #$04 ; Set Paged Mode + BNE SETSTATUS * VDU 21 - Disable VDU -VDU21 LDA #$80 ; Set VDU disabled +VDU21 LDA #$80 ; Set VDU disabled -SETSTATUS ORA VDUSTATUS ; Set bits in VDU STATUS - STA VDUSTATUS -SETEXIT RTS +SETSTATUS ORA VDUSTATUS ; Set bits in VDU STATUS + STA VDUSTATUS +SETEXIT RTS * VDU 3 - End print job VDU03 * JSR flush printer - LDA #$FE ; Clear Printer Echo - BNE CLRSTATUS + LDA #$FE ; Clear Printer Echo + BNE CLRSTATUS * VDU 4 - Text at text cursor VDU04 * Turn cursor on and other stuff - LDA #$DF ; Clear VDU 5 mode - BNE CLRSTATUS + LDA #$DF ; Clear VDU 5 mode + BNE CLRSTATUS * VDU 15 - Disable paged scrolling -VDU15 LDA #$FB ; Clear paged scrolling - BRA CLRSTATUS +VDU15 LDA #$FB ; Clear paged scrolling + BRA CLRSTATUS * VDU 6 - Enable VDU -VDU06 LDA #$7F ; Clear VDU disabled +VDU06 LDA #$7F ; Clear VDU disabled -CLRSTATUS AND VDUSTATUS - STA VDUSTATUS - RTS +CLRSTATUS AND VDUSTATUS + STA VDUSTATUS + RTS * Editing cursor **************** * Move editing cursor * A=cursor key, CS from caller -COPYMOVE PHA - BIT VDUSTATUS - BVS COPYMOVE2 ; Edit cursor already on - JSR GETCHRC - STA COPYCHAR - LDA CURSORED - JSR PUTCHRC ; Edit cursor - SEC - JSR COPYSWAP2 ; Initialise copy cursor - ROR FLASHER - ASL FLASHER ; Ensure b0=0 - LDA #$42 - ORA VDUSTATUS - STA VDUSTATUS ; Turn cursor editing on -COPYMOVE2 PLA - AND #3 ; Convert to 8/9/10/11 - ORA #8 -COPYMOVE3 JMP OUTCHARGO ; Move edit cursor +COPYMOVE PHA + BIT VDUSTATUS + BVS COPYMOVE2 ; Edit cursor already on + JSR GETCHRC + STA COPYCHAR + LDA CURSORED + JSR PUTCHRC ; Edit cursor + SEC + JSR COPYSWAP2 ; Initialise copy cursor + ROR FLASHER + ASL FLASHER ; Ensure b0=0 + LDA #$42 + ORA VDUSTATUS + STA VDUSTATUS ; Turn cursor editing on +COPYMOVE2 PLA + AND #3 ; Convert to 8/9/10/11 + ORA #8 +COPYMOVE3 JMP OUTCHARGO ; Move edit cursor * Swap between edit and copy cursors -COPYSWAP1 CLC ; CC=Swap TEXT and COPY -COPYSWAP2 LDX #1 -COPYSWAPLP LDY VDUCOPYX,X - LDA VDUTEXTX,X - STA VDUCOPYX,X - BCS COPYSWAP3 ; CS=Copy TEXT to COPY - TYA - STA VDUTEXTX,X -COPYSWAP3 DEX - BPL COPYSWAPLP -COPYSWAP4 RTS +COPYSWAP1 CLC ; CC=Swap TEXT and COPY +COPYSWAP2 LDX #1 +COPYSWAPLP LDY VDUCOPYX,X + LDA VDUTEXTX,X + STA VDUCOPYX,X + BCS COPYSWAP3 ; CS=Copy TEXT to COPY + TYA + STA VDUTEXTX,X +COPYSWAP3 DEX + BPL COPYSWAPLP +COPYSWAP4 RTS * Write character to screen *************************** * Perform backspace & delete operation -VDU127 JSR VDU08 ; Move cursor back - LDA #' ' ; Overwrite with a space - BNE PUTCHRC +VDU127 JSR VDU08 ; Move cursor back + LDA #' ' ; Overwrite with a space + BNE PUTCHRC * Display character at current (TEXTX,TEXTY) -PRCHRC PHA ; Save character - LDA $C000 - BPL :RESUME ; No key pressed - EOR #$80 -:PAUSE1 JSR KBDCHKESC ; Ask KBD to test if Escape - BIT ESCFLAG - BMI :RESUMEACK ; Escape, skip pausing - CMP #$13 - BNE :RESUME ; Not Ctrl-S - STA $C010 ; Ack. keypress -:PAUSE2 LDA $C000 - BPL :PAUSE2 ; Loop until keypress - EOR #$80 - CMP #$11 ; Ctrl-Q - BEQ :RESUMEACK ; Stop pausing - JSR KBDCHKESC ; Ask KBD to test if Escape - BIT ESCFLAG - BPL :PAUSE2 ; No Escape, keep pausing -:RESUMEACK STA $C010 ; Ack. keypress -:RESUME PLA +PRCHRC PHA ; Save character + LDA $C000 + BPL :RESUME ; No key pressed + EOR #$80 +:PAUSE1 JSR KBDCHKESC ; Ask KBD to test if Escape + BIT ESCFLAG + BMI :RESUMEACK ; Escape, skip pausing + CMP #$13 + BNE :RESUME ; Not Ctrl-S + STA $C010 ; Ack. keypress +:PAUSE2 LDA $C000 + BPL :PAUSE2 ; Loop until keypress + EOR #$80 + CMP #$11 ; Ctrl-Q + BEQ :RESUMEACK ; Stop pausing + JSR KBDCHKESC ; Ask KBD to test if Escape + BIT ESCFLAG + BPL :PAUSE2 ; No Escape, keep pausing +:RESUMEACK STA $C010 ; Ack. keypress +:RESUME PLA * Put character to screen * Puts character to text screen buffer, then in graphics mode, * writes bitmap to graphics screen -PUTCHRC PHA - EOR #$80 ; Convert character to screen code - TAX - AND #$A0 - BNE PRCHR4 - CPX #$20 - BCS PRCHR3 ; Not $80-$9F - BIT VDUSCREEN - BVC PRCHR3 ; Not teletext - LDX #$E0 ; Convert $80-$9F to space -PRCHR3 TXA - EOR #$40 - TAX -PRCHR4 JSR CHARADDR ; Find character address - TXA ; Get character back - BIT VDUBANK - BPL PRCHR5 ; Not AppleGS, use short write - >>> WRTMAIN - STA [VDUADDR],Y - >>> WRTAUX - BRA PRCHR8 -PRCHR5 PHP ; Disable IRQs while - SEI ; toggling memory - BCC PRCHR6 ; Aux memory - STA $C004 ; Switch to main memory -PRCHR6 STA (VDUADDR),Y ; Store it -PRCHR7 STA $C005 ; Back to aux memory - PLP ; Restore IRQs -PRCHR8 PLA - BIT VDUSCREEN - BPL GETCHROK - JMP PRCHRSOFT ; Write character to graphics +PUTCHRC PHA + EOR #$80 ; Convert character to screen code + TAX + AND #$A0 + BNE PRCHR4 + CPX #$20 + BCS PRCHR3 ; Not $80-$9F + BIT VDUSCREEN + BVC PRCHR3 ; Not teletext + LDX #$E0 ; Convert $80-$9F to space +PRCHR3 TXA + EOR #$40 + TAX +PRCHR4 JSR CHARADDR ; Find character address + TXA ; Get character back + BIT VDUBANK + BPL PRCHR5 ; Not AppleGS, use short write + >>> WRTMAIN + STA [VDUADDR],Y + >>> WRTAUX + BRA PRCHR8 +PRCHR5 PHP ; Disable IRQs while + SEI ; toggling memory + BCC PRCHR6 ; Aux memory + STA $C004 ; Switch to main memory +PRCHR6 STA (VDUADDR),Y ; Store it +PRCHR7 STA $C005 ; Back to aux memory + PLP ; Restore IRQs +PRCHR8 PLA + BIT VDUSCREEN + BPL GETCHROK + JMP PRCHRSOFT ; Write character to graphics * OSBYTE &87 - Read character at cursor *************************************** * Fetch character from screen at (TEXTX,TEXTY) and return MODE in Y * Always read from text screen (which we maintain even in graphics mode) BYTE87 -GETCHRC JSR CHARADDR ; Find character address - BIT VDUBANK - BMI GETCHRGS - PHP ; Disable IRQs while - SEI ; toggling memory - BCC GETCHR6 ; Aux memory - STA $C002 ; Switch to main memory -GETCHR6 LDA (VDUADDR),Y ; Get character - STA $C003 ; Back to aux memory - PLP ; Restore IRQs - TAY ; Convert character - AND #$A0 - BNE GETCHR7 - TYA - EOR #$40 - TAY -GETCHR7 TYA - EOR #$80 - LDY VDUMODE ; Y=MODE - TAX ; X=char -GETCHROK RTS -GETCHRGS PHP ; Disable IRQs while - SEI ; toggling memory - BCC GETCHR8 ; Aux memory - STA $C002 ; Switch to main memory -GETCHR8 LDA [VDUADDR],Y ; Get character - STA $C003 ; Back to aux memory - PLP ; Restore IRQs - TAY ; Convert character - AND #$A0 - BNE GETCHR9 - TYA - EOR #$40 - TAY -GETCHR9 TYA - EOR #$80 - LDY VDUMODE ; Y=MODE - TAX ; X=char, set EQ/NE - RTS +GETCHRC JSR CHARADDR ; Find character address + BIT VDUBANK + BMI GETCHRGS + PHP ; Disable IRQs while + SEI ; toggling memory + BCC GETCHR6 ; Aux memory + STA $C002 ; Switch to main memory +GETCHR6 LDA (VDUADDR),Y ; Get character + STA $C003 ; Back to aux memory + PLP ; Restore IRQs + TAY ; Convert character + AND #$A0 + BNE GETCHR7 + TYA + EOR #$40 + TAY +GETCHR7 TYA + EOR #$80 + LDY VDUMODE ; Y=MODE + TAX ; X=char +GETCHROK RTS +GETCHRGS PHP ; Disable IRQs while + SEI ; toggling memory + BCC GETCHR8 ; Aux memory + STA $C002 ; Switch to main memory +GETCHR8 LDA [VDUADDR],Y ; Get character + STA $C003 ; Back to aux memory + PLP ; Restore IRQs + TAY ; Convert character + AND #$A0 + BNE GETCHR9 + TYA + EOR #$40 + TAY +GETCHR9 TYA + EOR #$80 + LDY VDUMODE ; Y=MODE + TAX ; X=char, set EQ/NE + RTS * OSBYTE &86 - Get text cursor position *************************************** -BYTE86 LDY VDUTEXTY - LDX VDUTEXTX - RTS +BYTE86 LDY VDUTEXTY + LDX VDUTEXTX + RTS * Calculate character address ***************************** * NB: VDUBANK at VDUADDR+2 is set by VDU22 -CHARADDR LDA VDUTEXTY -CHARADDRY ASL - TAY - LDA SCNTAB+0,Y ; LSB of row address - STA VDUADDR+0 - LDA SCNTAB+1,Y ; MSB of row address - STA VDUADDR+1 - LDA VDUTEXTX - BIT $C01F - SEC - BPL CHARADDR40 ; 40-col - LSR A -CHARADDR40 TAY ; Y=offset into this row - LDA VDUBANK - AND #$FE - BCS CHARADDROK - ORA #$01 -CHARADDROK STA VDUBANK - RTS +CHARADDR LDA VDUTEXTY +CHARADDRY ASL + TAY + LDA SCNTAB+0,Y ; LSB of row address + STA VDUADDR+0 + LDA SCNTAB+1,Y ; MSB of row address + STA VDUADDR+1 + LDA VDUTEXTX + BIT $C01F + SEC + BPL CHARADDR40 ; 40-col + LSR A +CHARADDR40 TAY ; Y=offset into this row + LDA VDUBANK + AND #$FE + BCS CHARADDROK + ORA #$01 +CHARADDROK STA VDUBANK + RTS * (VDUADDR),Y=>character address * VDUBANK = AppleGS screen bank * CC=auxmem, CS=mainmem, X=preserved @@ -460,103 +460,103 @@ CHARADDROK STA VDUBANK * Calculate character address in HGR screen memory * This is the address of the first pixel row of the char * Add $0400 for each subsequent row of the char -HCHARADDR LDA VDUTEXTY - ASL - TAY - CLC - LDA HGRTAB+0,Y ; LSB of row address - ADC VDUTEXTX - STA VDUADDR+0 - LDA HGRTAB+1,Y ; MSB of row address - ADC #$00 - STA VDUADDR+1 - RTS +HCHARADDR LDA VDUTEXTY + ASL + TAY + CLC + LDA HGRTAB+0,Y ; LSB of row address + ADC VDUTEXTX + STA VDUADDR+0 + LDA HGRTAB+1,Y ; MSB of row address + ADC #$00 + STA VDUADDR+1 + RTS * (VDUADDR)=>character address, X=preserved * Move text cursor position *************************** * Move cursor left -VDU08 LDA VDUTEXTX ; COL - BEQ :S1 - DEC VDUTEXTX ; COL - BRA :S3 -:S1 LDA VDUTEXTY ; ROW - BEQ :S3 - DEC VDUTEXTY ; ROW - LDA #39 - BIT $C01F - BPL :S2 - LDA #79 -:S2 STA VDUTEXTX ; COL -:S3 RTS +VDU08 LDA VDUTEXTX ; COL + BEQ :S1 + DEC VDUTEXTX ; COL + BRA :S3 +:S1 LDA VDUTEXTY ; ROW + BEQ :S3 + DEC VDUTEXTY ; ROW + LDA #39 + BIT $C01F + BPL :S2 + LDA #79 +:S2 STA VDUTEXTX ; COL +:S3 RTS * Move cursor right -VDU09 LDA VDUTEXTX ; COL - CMP #39 - BCC :S2 - BIT $C01F - BPL :T11 - CMP #79 - BCC :S2 -:T11 STZ VDUTEXTX ; COL - LDA VDUTEXTY ; ROW - CMP #23 - BEQ SCROLL - INC VDUTEXTY ; ROW -:DONE RTS -:S2 INC VDUTEXTX ; COL - BRA :DONE -SCROLL JSR SCROLLER - JSR CLRLINE - RTS +VDU09 LDA VDUTEXTX ; COL + CMP #39 + BCC :S2 + BIT $C01F + BPL :T11 + CMP #79 + BCC :S2 +:T11 STZ VDUTEXTX ; COL + LDA VDUTEXTY ; ROW + CMP #23 + BEQ SCROLL + INC VDUTEXTY ; ROW +:DONE RTS +:S2 INC VDUTEXTX ; COL + BRA :DONE +SCROLL JSR SCROLLER + JSR CLRLINE + RTS * Move cursor down -VDU10 LDA VDUTEXTY ; ROW - CMP #23 - BEQ :TOSCRL ; JGH - INC VDUTEXTY ; ROW - RTS -:TOSCRL JMP SCROLL ; JGH +VDU10 LDA VDUTEXTY ; ROW + CMP #23 + BEQ :TOSCRL ; JGH + INC VDUTEXTY ; ROW + RTS +:TOSCRL JMP SCROLL ; JGH * Move cursor up -VDU11 LDA VDUTEXTY ; ROW - BEQ :DONE - DEC VDUTEXTY ; ROW -:DONE RTS +VDU11 LDA VDUTEXTY ; ROW + BEQ :DONE + DEC VDUTEXTY ; ROW +:DONE RTS * Move to start of line -VDU13 LDA #$BF - JSR CLRSTATUS ; Turn copy cursor off - STZ VDUTEXTX ; COL - RTS +VDU13 LDA #$BF + JSR CLRSTATUS ; Turn copy cursor off + STZ VDUTEXTX ; COL + RTS * Move to (0,0) -VDU30 STZ VDUTEXTY ; ROW - STZ VDUTEXTX ; COL - RTS +VDU30 STZ VDUTEXTY ; ROW + STZ VDUTEXTX ; COL + RTS * Move to (X,Y) -VDU31 LDY VDUQ+8 - CPY #24 - BCS :DONE - LDX VDUQ+7 - CPX #80 - BCS :DONE - BIT $C01F - BMI :T9A - CPX #40 - BCS :DONE -:T9A STX VDUTEXTX ; COL - STY VDUTEXTY ; ROW -:DONE RTS +VDU31 LDY VDUQ+8 + CPY #24 + BCS :DONE + LDX VDUQ+7 + CPX #80 + BCS :DONE + BIT $C01F + BMI :T9A + CPX #40 + BCS :DONE +:T9A STX VDUTEXTX ; COL + STY VDUTEXTY ; ROW +:DONE RTS * Initialise VDU driver *********************** * On entry, A=MODE to start in * -VDUINIT STA VDUQ+8 +VDUINIT STA VDUQ+8 * JSR FONTIMPLODE ; Reset VDU 23 font * VDU 22 - MODE n @@ -570,336 +570,336 @@ VDUINIT STA VDUQ+8 * All others default to MODE 6 * * Wait for VSync? -VDU22 LDA VDUQ+8 - AND #$07 - TAX ; Set up MODE - STX VDUMODE ; Screen MODE - LDA SCNCOLOURS,X - STA VDUCOLOURS ; Colours-1 - LDA SCNBYTES,X - STA VDUBYTES ; Bytes per char - LDA SCNPIXELS,X - STA VDUPIXELS ; Pixels per byte - LDA SCNTYPE,X - STA VDUSCREEN ; Screen type - JSR NEGCALL ; Find machine type - AND #$0F - BEQ :MODEGS ; MCHID=$x0 -> Not AppleGS, bank=0 - LDA #$E0 ; Not $x0 -> AppleGS, point to screen bank -:MODEGS STA VDUBANK - LDA #$01 - JSR CLRSTATUS ; Clear everything except PrinterEcho - LDA #'_' ; Set up default cursors - STA CURSOR ; Normal cursor - STA CURSORCP ; Copy cursor when editing - LDA #$A0 - STA CURSORED ; Edit cursor when editing - JSR VDU20 ; Default colours - JSR VDU26 ; Default windows - STA $C052 ; Clear MIXED - LDA VDUSCREEN - BMI VDU22G ; b7=1, graphics mode - AND #$01 ; 40col/80col bit - TAX - STA $C00C,X ; Select 40col/80col - STA $C051 ; Enable Text - STA $C055 ; PAGE2 - STA $C00F ; Enable alt charset +VDU22 LDA VDUQ+8 + AND #$07 + TAX ; Set up MODE + STX VDUMODE ; Screen MODE + LDA SCNCOLOURS,X + STA VDUCOLOURS ; Colours-1 + LDA SCNBYTES,X + STA VDUBYTES ; Bytes per char + LDA SCNPIXELS,X + STA VDUPIXELS ; Pixels per byte + LDA SCNTYPE,X + STA VDUSCREEN ; Screen type + JSR NEGCALL ; Find machine type + AND #$0F + BEQ :MODEGS ; MCHID=$x0 -> Not AppleGS, bank=0 + LDA #$E0 ; Not $x0 -> AppleGS, point to screen bank +:MODEGS STA VDUBANK + LDA #$01 + JSR CLRSTATUS ; Clear everything except PrinterEcho + LDA #'_' ; Set up default cursors + STA CURSOR ; Normal cursor + STA CURSORCP ; Copy cursor when editing + LDA #$A0 + STA CURSORED ; Edit cursor when editing + JSR VDU20 ; Default colours + JSR VDU26 ; Default windows + STA $C052 ; Clear MIXED + LDA VDUSCREEN + BMI VDU22G ; b7=1, graphics mode + AND #$01 ; 40col/80col bit + TAX + STA $C00C,X ; Select 40col/80col + STA $C051 ; Enable Text + STA $C055 ; PAGE2 + STA $C00F ; Enable alt charset * Fall through into CLS * Clear areas of the screen *************************** -VDU12 STZ FXLINES - STZ VDUTEXTX - STZ VDUTEXTY +VDU12 STZ FXLINES + STZ VDUTEXTX + STZ VDUTEXTY * Clear the text screen buffer -:L1 JSR CLREOL -:S2 LDA VDUTEXTY ; ROW - CMP #23 - BEQ :S3 - INC VDUTEXTY ; ROW - BRA :L1 -:S3 STZ VDUTEXTY ; ROW - STZ VDUTEXTX ; COL - BIT VDUSCREEN - BMI VDU12SOFT ; Graphics mode - RTS +:L1 JSR CLREOL +:S2 LDA VDUTEXTY ; ROW + CMP #23 + BEQ :S3 + INC VDUTEXTY ; ROW + BRA :L1 +:S3 STZ VDUTEXTY ; ROW + STZ VDUTEXTX ; COL + BIT VDUSCREEN + BMI VDU12SOFT ; Graphics mode + RTS * Clear the graphics screen buffer -VDU12SOFT JMP VDU16 ; *TEMP* +VDU12SOFT JMP VDU16 ; *TEMP* -VDU22G STA $C050 ; Enable Graphics - STA $C057 ; Hi-Res - STA $C054 ; PAGE1 - STA $C00C ; Select 40col text - JMP VDU12 ; Clear text and HGR screen +VDU22G STA $C050 ; Enable Graphics + STA $C057 ; Hi-Res + STA $C054 ; PAGE1 + STA $C00C ; Select 40col text + JMP VDU12 ; Clear text and HGR screen * Clear to EOL CLRLINE -CLREOL JSR CHARADDR ; Set VDUADDR=>start of line - BIT VDUBANK - BMI CLREOLGS ; AppleGS - LDY #39 - LDA #$A0 -:L1 STA (VDUADDR),Y - PHP - SEI - STA $C004 - STA (VDUADDR),Y - STA $C005 - PLP - DEY - BPL :L1 - BIT VDUSCREEN - BPL CLREOLOK - JMP HSCRCLREOL ; Clear an HGR line -CLREOLOK RTS -CLREOLGS LDX #1 -:L2 LDY #39 - LDA #$A0 -:L3 >>> WRTMAIN - STA [VDUADDR],Y - >>> WRTAUX - DEY - BPL :L3 - LDA VDUBANK - EOR #$01 - STA VDUBANK - DEX - BPL :L2 - BIT VDUSCREEN - BPL CLREOLOK - JMP HSCRCLREOL ; Clear an HGR line - RTS +CLREOL JSR CHARADDR ; Set VDUADDR=>start of line + BIT VDUBANK + BMI CLREOLGS ; AppleGS + LDY #39 + LDA #$A0 +:L1 STA (VDUADDR),Y + PHP + SEI + STA $C004 + STA (VDUADDR),Y + STA $C005 + PLP + DEY + BPL :L1 + BIT VDUSCREEN + BPL CLREOLOK + JMP HSCRCLREOL ; Clear an HGR line +CLREOLOK RTS +CLREOLGS LDX #1 +:L2 LDY #39 + LDA #$A0 +:L3 >>> WRTMAIN + STA [VDUADDR],Y + >>> WRTAUX + DEY + BPL :L3 + LDA VDUBANK + EOR #$01 + STA VDUBANK + DEX + BPL :L2 + BIT VDUSCREEN + BPL CLREOLOK + JMP HSCRCLREOL ; Clear an HGR line + RTS * Scroll areas of the screen **************************** * Scroll whole screen one line -SCROLLER LDA #$00 -:L1 PHA - JSR SCR1LINE - PLA - INC - CMP #23 - BNE :L1 - BIT VDUSTATUS - BVC :L2 ; Copy cursor not active - JSR COPYSWAP1 - LDA #11 - JSR OUTCHARGO - JSR COPYSWAP1 -:L2 RTS +SCROLLER LDA #$00 +:L1 PHA + JSR SCR1LINE + PLA + INC + CMP #23 + BNE :L1 + BIT VDUSTATUS + BVC :L2 ; Copy cursor not active + JSR COPYSWAP1 + LDA #11 + JSR OUTCHARGO + JSR COPYSWAP1 +:L2 RTS * Copy line A+1 to line A -SCR1LINE PHA - JSR CHARADDRY ; VDUADDR=>line A - LDX #2 -:L1 LDA VDUADDR,X ; Copy to VDUADDR2 - STA VDUADDR2,X - DEX - BPL :L1 - PLA - PHA - INC A - JSR CHARADDRY ; VDUADDR=>line A+1 - BIT VDUBANK - BMI SCROLLGS - LDY #39 -:L2 LDA (VDUADDR),Y - STA (VDUADDR2),Y - PHP - SEI - STA $C002 ; Read main mem - STA $C004 ; Write main mem - LDA (VDUADDR),Y - STA (VDUADDR2),Y - STA $C003 ; Read aux mem - STA $C005 ; Write aux mem - PLP - DEY - BPL :L2 - PLA - BIT VDUSCREEN ; Also screen graphics screen - BMI SCR1SOFT - RTS -SCROLLGS LDX #1 -:L4 LDY #39 -:L5 >>> WRTMAIN - STA $C002 ; Read main mem - LDA [VDUADDR],Y - STA [VDUADDR2],Y - STA $C003 ; Read aux mem - >>> WRTAUX - DEY - BPL :L5 - LDA VDUBANK - EOR #$01 - STA VDUBANK - STA VDUBANK2 - DEX - BPL :L4 - PLA - BIT VDUSCREEN ; Also screen graphics screen - BMI SCR1SOFT - RTS +SCR1LINE PHA + JSR CHARADDRY ; VDUADDR=>line A + LDX #2 +:L1 LDA VDUADDR,X ; Copy to VDUADDR2 + STA VDUADDR2,X + DEX + BPL :L1 + PLA + PHA + INC A + JSR CHARADDRY ; VDUADDR=>line A+1 + BIT VDUBANK + BMI SCROLLGS + LDY #39 +:L2 LDA (VDUADDR),Y + STA (VDUADDR2),Y + PHP + SEI + STA $C002 ; Read main mem + STA $C004 ; Write main mem + LDA (VDUADDR),Y + STA (VDUADDR2),Y + STA $C003 ; Read aux mem + STA $C005 ; Write aux mem + PLP + DEY + BPL :L2 + PLA + BIT VDUSCREEN ; Also screen graphics screen + BMI SCR1SOFT + RTS +SCROLLGS LDX #1 +:L4 LDY #39 +:L5 >>> WRTMAIN + STA $C002 ; Read main mem + LDA [VDUADDR],Y + STA [VDUADDR2],Y + STA $C003 ; Read aux mem + >>> WRTAUX + DEY + BPL :L5 + LDA VDUBANK + EOR #$01 + STA VDUBANK + STA VDUBANK2 + DEX + BPL :L4 + PLA + BIT VDUSCREEN ; Also screen graphics screen + BMI SCR1SOFT + RTS * Copy text line A+1 to line A for HGR bitmap gfx mode -SCR1SOFT JMP HSCR1LINE +SCR1SOFT JMP HSCR1LINE * VDU 16 - CLG, clear graphics window -VDU16 JMP HSCRCLEAR +VDU16 JMP HSCRCLEAR * Colour control **************** * VDU 20 - Reset to default colours -VDU20 LDA #$F0 - STA $C022 ; Set text palette - LDX #VDUCOLEND-TXTFGD - LDA #$00 -VDU20LP STA TXTFGD,X ; Clear all colours - DEX ; and gcol actions - BPL VDU20LP - STA $C034 ; Set border - LDA #$80 - JSR HSCRSETTCOL ; Set txt background - LDX #$00 - LDA #$80 - JSR HSCRSETGCOL ; Set gfx background - LDA VDUCOLOURS - AND #$07 - PHA - STA TXTFGD ; Note txt foreground - JSR HSCRSETTCOL ; Set txt foreground - LDX #$00 - PLA - STA GFXFGD ; Note gfx foreground - JMP HSCRSETGCOL ; Set gfx foreground +VDU20 LDA #$F0 + STA $C022 ; Set text palette + LDX #VDUCOLEND-TXTFGD + LDA #$00 +VDU20LP STA TXTFGD,X ; Clear all colours + DEX ; and gcol actions + BPL VDU20LP + STA $C034 ; Set border + LDA #$80 + JSR HSCRSETTCOL ; Set txt background + LDX #$00 + LDA #$80 + JSR HSCRSETGCOL ; Set gfx background + LDA VDUCOLOURS + AND #$07 + PHA + STA TXTFGD ; Note txt foreground + JSR HSCRSETTCOL ; Set txt foreground + LDX #$00 + PLA + STA GFXFGD ; Note gfx foreground + JMP HSCRSETGCOL ; Set gfx foreground * VDU 17 - COLOUR n - select text or border colour -VDU17 LDA VDUQ+8 - CMP #$C0 - BCS VDU17BORDER +VDU17 LDA VDUQ+8 + CMP #$C0 + BCS VDU17BORDER * TO DO * - JMP HSCRSETTCOL -VDU17BORDER AND #$0F - STA VDUBORDER - TAX - LDA CLRTRANS16,X - STA $C034 - RTS + JMP HSCRSETTCOL +VDU17BORDER AND #$0F + STA VDUBORDER + TAX + LDA CLRTRANS16,X + STA $C034 + RTS * VDU 18 - GCOL k,a - select graphics colour and plot action -VDU18 LDY #$02 ; Y=>gfd settings - LDA VDUQ+8 ; GCOL colour - PHA - CMP #$80 - BCC VDU18A - INY ; Y=>bgd settings -VDU18A LDA VDUQ+7 ; GCOL action - STA GFXPLOTFGD-2,Y ; Store GCOL action - TAX ; X=GCOL action - PLA - AND VDUCOLOURS - STA GFXFGD-2,Y ; Store GCOL colour - TAY - LDA CLRTRANS8,Y ; Trans. to physical - PHP - ROL A - PLP - ROR A ; Get bit 7 back - JMP HSCRSETGCOL +VDU18 LDY #$02 ; Y=>gfd settings + LDA VDUQ+8 ; GCOL colour + PHA + CMP #$80 + BCC VDU18A + INY ; Y=>bgd settings +VDU18A LDA VDUQ+7 ; GCOL action + STA GFXPLOTFGD-2,Y ; Store GCOL action + TAX ; X=GCOL action + PLA + AND VDUCOLOURS + STA GFXFGD-2,Y ; Store GCOL colour + TAY + LDA CLRTRANS8,Y ; Trans. to physical + PHP + ROL A + PLP + ROR A ; Get bit 7 back + JMP HSCRSETGCOL * VDU 19 - Select palette colours -VDU19 RTS +VDU19 RTS * Window (viewport) control *************************** * VDU 26 - Reset to default windows -VDU26 LDA #$F7 - JSR CLRSTATUS ; Clear 'soft window' -VDU26A LDX #VDUWINEND-VDUVARS - LDA #$00 -VDU26LP STA VDUVARS,X ; Clear all windows - DEX ; and all coords - BPL VDU26LP ; and origin, etc. - LDY VDUMODE - LDA SCNTXTMAXY,Y - STA TXTWINBOT ; Text window height - LDA SCNTXTMAXX,Y - STA TXTWINRGT ; Text window width - LDY VDUPIXELS - BEQ VDU26QUIT ; No graphics - LDX #GFXWINRGT-VDUVARS - JSR VDU26SCALE ; GFXWID=TXTWID*PIXELS-1 - LDA TXTWINBOT - LDY #8 ; GFXHGT=TXTHGT*8-1 - LDX #GFXWINTOP-VDUVARS +VDU26 LDA #$F7 + JSR CLRSTATUS ; Clear 'soft window' +VDU26A LDX #VDUWINEND-VDUVARS + LDA #$00 +VDU26LP STA VDUVARS,X ; Clear all windows + DEX ; and all coords + BPL VDU26LP ; and origin, etc. + LDY VDUMODE + LDA SCNTXTMAXY,Y + STA TXTWINBOT ; Text window height + LDA SCNTXTMAXX,Y + STA TXTWINRGT ; Text window width + LDY VDUPIXELS + BEQ VDU26QUIT ; No graphics + LDX #GFXWINRGT-VDUVARS + JSR VDU26SCALE ; GFXWID=TXTWID*PIXELS-1 + LDA TXTWINBOT + LDY #8 ; GFXHGT=TXTHGT*8-1 + LDX #GFXWINTOP-VDUVARS * * Convert text count to pixel count * VDUVARS,X=(A+1)*Y-1 -VDU26SCALE PHA - CLC - ADC VDUVARS+0,X - ORA #$01 - STA VDUVARS+0,X - LDA VDUVARS+1,X - ADC #$00 - STA VDUVARS+1,X - PLA - DEY - BNE VDU26SCALE -VDU26QUIT RTS +VDU26SCALE PHA + CLC + ADC VDUVARS+0,X + ORA #$01 + STA VDUVARS+0,X + LDA VDUVARS+1,X + ADC #$00 + STA VDUVARS+1,X + PLA + DEY + BNE VDU26SCALE +VDU26QUIT RTS * VDU 28,left,bottom,right,top - define text window -VDU28 LDX VDUMODE - LDA VDUQCOORD+2 ; right - CMP VDUQCOORD+0 ; left - BCC VDUCOPYEXIT ; rightwidth -VDU28B LDA VDUQCOORD+1 ; bottom - CMP VDUQCOORD+3 ; top - BCC VDUCOPYEXIT ; bottomheight -VDU28C LDY #TXTWINLFT+3-VDUVARS ; Copy to txt window params - BNE VDUCOPY4 +VDU28 LDX VDUMODE + LDA VDUQCOORD+2 ; right + CMP VDUQCOORD+0 ; left + BCC VDUCOPYEXIT ; rightwidth +VDU28B LDA VDUQCOORD+1 ; bottom + CMP VDUQCOORD+3 ; top + BCC VDUCOPYEXIT ; bottomheight +VDU28C LDY #TXTWINLFT+3-VDUVARS ; Copy to txt window params + BNE VDUCOPY4 * VDU 24,left;bottom;right;top; - define graphics window -VDU24 RTS +VDU24 RTS * If rightwidth, exit * If topheight, exit * scale parameters - LDY #GFXWINLFT+7-VDUVARS ; Copy to gfx window params - LDA #$08 - BNE COPYVDUQ + LDY #GFXWINLFT+7-VDUVARS ; Copy to gfx window params + LDA #$08 + BNE COPYVDUQ * VDU 29,x;y; - define graphics origin -VDU29 LDY #GFXORIGX+3-VDUVARS ; Copy to ORIGIN +VDU29 LDY #GFXORIGX+3-VDUVARS ; Copy to ORIGIN * Copy four bytes from VDU queue to VDU workspace -VDUCOPY4 LDA #$04 ; 4 bytes to copy +VDUCOPY4 LDA #$04 ; 4 bytes to copy * Copy parameters in VDU Queue to VDU workspace -COPYVDUQ LDX #VDUQ+$08-VDUVARS ; End of VDU queue +COPYVDUQ LDX #VDUQ+$08-VDUVARS ; End of VDU queue * Copy A bytes from VDUVARS,X to VDUVARS,Y -VDUCOPY STA VDUTEMP -VDUCOPYLP LDA VDUVARS,X - STA VDUVARS,Y - DEX - DEY - DEC VDUTEMP - BNE VDUCOPYLP -VDUCOPYEXIT RTS +VDUCOPY STA VDUTEMP +VDUCOPYLP LDA VDUVARS,X + STA VDUVARS,Y + DEX + DEY + DEC VDUTEMP + BNE VDUCOPYLP +VDUCOPYEXIT RTS * PLOT master dispatch @@ -931,70 +931,72 @@ VDUCOPYEXIT RTS * x is in VDUQ+5,VDUQ+6 * y is in VDUQ+7,VDUQ+8 * -VDU25 LDA VDUPIXELS - BEQ VDU25NULL +VDU25 LDA VDUPIXELS + BEQ VDU25NULL * TO DO: * coord=coord+origin * scale coord * clip to viewport - JSR HGRPLOTTER + JSR HGRPLOTTER -VDU25NULL LDX #7 -VDU25BACKUP1 LDA PIXELPLOTX+0,X ; Copy pixel coords - STA PIXELPLOTX+4,X ; POSN becomes LAST - DEX ; and PLOT becomes POSN - BPL VDU25BACKUP1 - LDX #3 ; Copy PLOT coords -VDU25BACKUP2 LDA GFXPOSNX,X ; POSN becomes LAST - STA GFXLASTX,X - LDA VDUQPLOT,X ; and PLOT becomes POSN - STA GFXPOSNX,X - DEX - BPL VDU25BACKUP2 - LDA $C000 ; This and PRCHRC need to be - EOR #$80 ; made more generalised - BMI VDU25EXIT ; No key pressed - JSR KBDCHKESC ; Ask KBD to test if Escape -VDU25EXIT RTS +VDU25NULL LDX #7 +VDU25BACKUP1 LDA PIXELPLOTX+0,X ; Copy pixel coords + STA PIXELPLOTX+4,X ; POSN becomes LAST + DEX ; and PLOT becomes POSN + BPL VDU25BACKUP1 + LDX #3 ; Copy PLOT coords +VDU25BACKUP2 LDA GFXPOSNX,X ; POSN becomes LAST + STA GFXLASTX,X + LDA VDUQPLOT,X ; and PLOT becomes POSN + STA GFXPOSNX,X + DEX + BPL VDU25BACKUP2 + LDA $C000 ; This and PRCHRC need to be + EOR #$80 ; made more generalised + BMI VDU25EXIT ; No key pressed + JSR KBDCHKESC ; Ask KBD to test if Escape +VDU25EXIT RTS * Program video system and define characters ******************************************** -VDU23 RTS +VDU23 RTS * Read from VDU system ********************** * OSWORD &09 - Read POINT -WORD09 RTS +WORD09 RTS * OSWORD &0A - Read character bitmap -WORD0A RTS +WORD0A RTS * OSWORD &0B - Read palette -WORD0B RTS +WORD0B RTS * OSWORD &0C - Write palette -WORD0C RTS +WORD0C RTS * OSWORD &0D - Read gfx coords -WORD0D RTS +WORD0D RTS * OSBYTE &A0 - Read VDU variable -BYTEA0 CPX #$40 ; Index into VDU variables - BCC BYTEA02 - TXA - SBC #$20 - TAX -BYTEA02 LDY VDUVARS+1,X - LDA VDUVARS+0,X - TAX - RTS +BYTEA0 CPX #$40 ; Index into VDU variables + BCC BYTEA02 + TXA + SBC #$20 + TAX +BYTEA02 LDY VDUVARS+1,X + LDA VDUVARS+0,X + TAX + RTS * PRINTER DRIVER **************** * VDU 1 - Send one character to printer -VDU01 RTS +VDU01 RTS + + diff --git a/mainmem.fsequ.s b/mainmem.fsequ.s index 8e20901..cb0d8d8 100644 --- a/mainmem.fsequ.s +++ b/mainmem.fsequ.s @@ -79,6 +79,8 @@ GEOFCMD EQU $D1 + + diff --git a/mainmem.gfx.s b/mainmem.gfx.s index 5b39e94..22813b6 100644 --- a/mainmem.gfx.s +++ b/mainmem.gfx.s @@ -221,3 +221,5 @@ MHGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380 + + diff --git a/mainmem.init.s b/mainmem.init.s index fc1fba7..940fe40 100644 --- a/mainmem.init.s +++ b/mainmem.init.s @@ -125,6 +125,8 @@ RESET TSX + + diff --git a/mainmem.ldr.s b/mainmem.ldr.s index 838f5ac..778842a 100644 --- a/mainmem.ldr.s +++ b/mainmem.ldr.s @@ -167,3 +167,5 @@ LOADCODE PHP ; Save carry flag + + diff --git a/mainmem.lists.s b/mainmem.lists.s index 960a7f3..0374bd5 100644 --- a/mainmem.lists.s +++ b/mainmem.lists.s @@ -143,6 +143,8 @@ QUITPL HEX 04 ; Number of parameters + + diff --git a/mainmem.menu.s b/mainmem.menu.s index e4e1dc8..4320868 100644 --- a/mainmem.menu.s +++ b/mainmem.menu.s @@ -160,6 +160,8 @@ ROM8 STR "USERROM2.ROM" + + diff --git a/mainmem.misc.s b/mainmem.misc.s index 60e2b36..71d5873 100644 --- a/mainmem.misc.s +++ b/mainmem.misc.s @@ -229,6 +229,8 @@ FILEREFS DB $00,$00,$00,$00 + + diff --git a/mainmem.path.s b/mainmem.path.s index 1341304..78363b3 100644 --- a/mainmem.path.s +++ b/mainmem.path.s @@ -309,4 +309,6 @@ PREFIX DS 65 ; Buffer for ProDOS prefix + + diff --git a/mainmem.svc.s b/mainmem.svc.s index 877289b..564e05f 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -1115,3 +1115,5 @@ MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS + + diff --git a/mainmem.wild.s b/mainmem.wild.s index 4fac8fe..d81854f 100644 --- a/mainmem.wild.s +++ b/mainmem.wild.s @@ -401,6 +401,8 @@ MATCHBUF DS 65 ; For storing match results (Pascal str) + +