From 90f627d8836c12f8c63fe58390f5574ad7eb3bed Mon Sep 17 00:00:00 2001 From: goyuken Date: Thu, 19 Jun 2014 15:57:07 +0000 Subject: [PATCH] wonderswan: debugging callbacks --- .../Interfaces/CoreComms.cs | 3 ++ .../Consoles/WonderSwan/BizSwan.cs | 12 +++++ .../Consoles/WonderSwan/WonderSwan.cs | 44 ++++++++++++++++++ output/dll/bizswan.dll | Bin 91648 -> 91648 bytes wonderswan/memory.cpp | 5 +- wonderswan/memory.h | 3 ++ wonderswan/system.cpp | 14 ++++++ wonderswan/v30mz-private.h | 8 ++-- wonderswan/v30mz.cpp | 27 +++++++++++ wonderswan/v30mz.h | 14 +++++- 10 files changed, 123 insertions(+), 7 deletions(-) diff --git a/BizHawk.Emulation.Common/Interfaces/CoreComms.cs b/BizHawk.Emulation.Common/Interfaces/CoreComms.cs index cb70c04d80..131bce5d83 100644 --- a/BizHawk.Emulation.Common/Interfaces/CoreComms.cs +++ b/BizHawk.Emulation.Common/Interfaces/CoreComms.cs @@ -150,6 +150,9 @@ namespace BizHawk.Emulation.Common { _list.Clear(); } + + // why was this missing? + public bool Has { get { return _list.Any(); } } } public class MemoryCallbackSystem diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs index 609d41ee10..b56528c4b7 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs @@ -127,6 +127,18 @@ namespace BizHawk.Emulation.Cores.WonderSwan [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_txtstateload(IntPtr core, [In]ref TextStateFPtrs ff); + [DllImport(dd, CallingConvention = cc)] + public static extern void bizswan_setmemorycallbacks(IntPtr core, MemoryCallback rcb, MemoryCallback ecb, MemoryCallback wcb); + + [DllImport(dd, CallingConvention = cc)] + public static extern void bizswan_setbuttoncallback(IntPtr core, ButtonCallback bcb); + + [UnmanagedFunctionPointer(cc)] + public delegate void MemoryCallback(uint addr); + + [UnmanagedFunctionPointer(cc)] + public delegate void ButtonCallback(); + /// /// return a CPU register /// diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index b533e3fcd4..eb7fb2751c 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -120,6 +120,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan savebuff = new byte[BizSwan.bizswan_binstatesize(Core)]; savebuff2 = new byte[savebuff.Length + 13]; + + InitDebugCallbacks(); } catch { @@ -142,6 +144,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan Frame++; IsLagFrame = true; + SetDebugCallbacks(); + if (Controller["Power"]) BizSwan.bizswan_reset(Core); @@ -352,6 +356,46 @@ namespace BizHawk.Emulation.Cores.WonderSwan throw new NotImplementedException(); } + BizSwan.MemoryCallback ReadCallbackD; + BizSwan.MemoryCallback WriteCallbackD; + BizSwan.MemoryCallback ExecCallbackD; + BizSwan.ButtonCallback ButtonCallbackD; + + void ReadCallback(uint addr) + { + CoreComm.MemoryCallbackSystem.CallRead(addr); + } + void WriteCallback(uint addr) + { + CoreComm.MemoryCallbackSystem.CallWrite(addr); + } + void ExecCallback(uint addr) + { + CoreComm.MemoryCallbackSystem.CallExecute(addr); + } + void ButtonCallback() + { + CoreComm.InputCallback.Call(); + } + + void InitDebugCallbacks() + { + ReadCallbackD = new BizSwan.MemoryCallback(ReadCallback); + WriteCallbackD = new BizSwan.MemoryCallback(WriteCallback); + ExecCallbackD = new BizSwan.MemoryCallback(ExecCallback); + ButtonCallbackD = new BizSwan.ButtonCallback(ButtonCallback); + } + + void SetDebugCallbacks() + { + BizSwan.bizswan_setmemorycallbacks(Core, + CoreComm.MemoryCallbackSystem.HasReads ? ReadCallbackD : null, + CoreComm.MemoryCallbackSystem.HasWrites ? WriteCallbackD : null, + CoreComm.MemoryCallbackSystem.HasExecutes ? ExecCallbackD : null); + BizSwan.bizswan_setbuttoncallback(Core, + CoreComm.InputCallback.Has ? ButtonCallbackD : null); + } + #endregion #region Settings diff --git a/output/dll/bizswan.dll b/output/dll/bizswan.dll index baf1af5707ddb049ddaa82a8975bc5826062ad1a..68a35c4844e2257ea68d07bbd063c9cea46057cf 100644 GIT binary patch literal 91648 zcmeEv3wTu3wf~vSBn)KW3>Y9_D$&H2Hq@d++bE#HkQn8a2P9Ap(W-MJw^a)>6-&Sw zCJA%qFpyS2?4@8^+uGaqYO75^Eo2g!2OuP1F=(RUQ9U835h*4CGymV(`C6CZrw(MKP%C4Tqe#Fh3(6CZgraqgnL#P2`$(8D*4 z9z7~qMLqiVlE2HjXOQjbCe)N3+z2`7oNjA8gJHDqY$0OGf`T~!0!BJenck}Bmegv(h0LD z+MyF(;i%{>_*bD5&ViIJl$#KQ4tUCXKo`yYG-sTKOQNSY1(P zYC|D^K)SS>RzCc_$B@uyLVN|{$KbwnK)O2t{lCBe#1>d0pUaUKCQ1t~zmsuU&M@W` zylpqS&Kaf5Pn$}MI7r;0SKwcjMIGZabJ-7EjSu*M+dk{{j#(Q(OO@Ft&2SrE=6Qp%U zX&vZ|m)1>3*75SfIB%Rc3(0Z|vXwPor}~?UEY%?Hkot%AYm06`3%SnCZ_7x?Z)q-g zul?eFoqa@GOWTr!&ZxE%ZPC@#f*Elw%@h^AW<0@m1EvCgWN15qge|S3Ujp!i^6sg3 zKWU48j-DHp9F*F&Bo4USqPGLo+IXU|ZOMgqJCtuzOkrzVbOpeci>-E3TcN4!9dT1L z2yV-`;5A&^dgBX-+ed1Y(k-n`Y%4tXPDWzu0uxAUU2sA9Xd0n7)Ru9sbwPsC&feZc zQOe)wamni-`b2fhsg_gkHnv6+siDvWvEqg_51X)L?%}(FrFCjVJInT0x4|ueamcVyZfk zP*rx({N8ES2xNoxlQcAtEhHR;`j;?px zKakgU6Pg7^*?vJT?3#JZ9{p@eO>?)L6K~ZSZgE{&w{CmU0P={w-N|1T1m!ep_Vf71 zAxVFgxFwL6Cgl50k0_AJE}Vb@WthCH9QoeAbhr8aiXDXSW|i3Z=kAkeyDfiaiTo$- zG`MOEt`0-iiAnbJCqCN468)tc7*14w`a4&jq2$Zng`c;SmJuFTwE<7(@Pu0zzg@s> zrmv)JX5Ctonk;Q*UCD*k*=FMPU#OgP%fzUCQ5`U5tzJqLv}7-TO|@iS1vg9oOvJU8QGR(*yj3#%AXCLw`e!1hwTw`5#4|rF z`5m;k<-|vwP};VZ0_9q?MB82F6V)eb-tHj%p1bD86OAaet;j4NA-j1iw2xYT!DY)E zO6e3BPgp{ufcLhRqPCXhmN)KIz8?SwB!@qcyq~Fdotx1H+bo|rQQekq&VRe3K)NqE zft4o8agZg;#amY;+P~(Vn>-bECweMcDmxD{K3%dUr`FF+o<&9x&uL05(VJmx%QLr* zPDHY|S0$eKsO1E+OrqzPWIC9FTm0NQ%@NBs0@&Jkm-=qIfD#rbC(i7%t(K1*Ta$>A zpSrI2N1&puh1>JRxtjTJo0~ihHq*Pvzn6^AvG;cq(~zwjf{Q0%hx+b+;?E+0h`I!8^6c@6s+k1xf!}?r3cdet9w9ng8^Mwx0oX;BFJT95ETqAfVj@m0=&?8nhT9b}jW1Fo~b`%mCun@$#vvkXAW&c~K>jwyz5#ms( z=?L2+gc*R{jqm`%lL%W8v^Ijg=j0a@3r6%eE~1n~=a0#dvNa}VoA<8HV_w>)zp`BP z-Yv*$jdFcmhF|bz>%0#o3m#)yX`{U-rDkT=s@dXR)9pF_@y{_Q%rGm_9z!WRZ}et2 zIeJGvVVL%f&I#VEeU6?Y%BC~x*INAIL3qNmMrXZSrCes`(mdwN00boH56ZWF5( zm}K9xdmln8f7Z8;ZgQ8j#PsZE{@wp#wOT(r>+6k@dwm~I(f7)A&+dhDhjhLV3@ldP z``P!QjZyM>-$zsQ=YePsOVHzc-{AYes6QXuCsx(VO>Wm(lqgnan0;rB?x#!e^6Y0l zMa!$(4Wnw@u5~;z4loAsEQxo!o&wO5k>GyXfd{wCi7T1xcrqge#ifvBn2s3Pyh2wX zANC)m$Kox3uF!cG>2d;~=Lv*v<%t={fycb&4%aE2 zH{l+++x5W+WRqTh*MxMg_7Ti}-Rm`Zilov_1Y2I~>?P|hZumRQn^^gi)G2})Mxo(4 z!Cd4nUpPqfD!|E%LQQ^Q}M%zm~Wtn z70g8(C*&)y0Yn|f^4b@4wuu+Zy}+ikkFm;|HsQ%CZTbmrFBr5a14V7CU{Tw);D#2W zEMzxXj#s(qthOc{u*NnN0RiC&M1#;*nFaN=8(9(`l9cnJ%Bd)plJE~iM9@I=Kt#a9 z=_+S*k*z$Jfc^xb4`IZY1oJqAYY~zWzK-xMggX$j5ONT{gYY22_Ymv|>ku{|R3JQy z@C$_BA^Zbj24p7>VJ*TAgjxhacWsp35FInZIC501Y4jM;Ja*hQao7H*{f+;^m?m61 zF@Dly47a_RXI$O-Cnmiley#Kq(yu>>U)%BtsT?zT(6-EWSND`BzT(YqcfGIk8ouRf z&^4d+8Y(=cPSPoFTt1~NZB`Ym?{`eWAWo3R@^jadf|Wglo5#uZ%j4wg<#9fKH!;%V zH{lCnns|Nu^^+!FoA9OUrX*?|2>CA_7l~1R0XZA9Dpq~dvDPTqzac-p z9Zl?bb-VW(^v|E#MpI|8(OLZuosiRM5-Xb?IZFMvzByN^f*q7!rsU4L9k?piFJS`q zHNv{dzD%rikr+xY8?Lh*VE+$C)w36Rmf4e7DU;}ml~0r8>Z|qD*|Lie`c96}AMkE; z6WSc_(?0;pTt&W?EUk%`P+_0MlSaEi>Ao1?L`8JU%E?flDi_I*<)U?Foh{8Hlh9rC z>1^N3vPvulaQoDYz9<`Pv5VVI1`owJ0vMHKV3S{CRjf~Z@)}`xJ3%*%)`4c$d}+__ z*#*#NJ?^Ke-nTtXDrp}dipW4&-kH=7Q6fPzfQTn`?CvT+gWG2~9T(^UMnHDc)2l-J zO~T9rE3ZvC;BqJc=;WTUFP+1~%-&U<(r!w_TSTzuq2i<{VbwP9YO8Rnwvnp+G&l86 z6Fih!ns`>e4r=RI{ot|jIU-ClYQlp%8}G$gj^^b{OW<8zuvGg_88E>iEjfn~A5FcS zi(PWr(g>)fn*3k;g;;yH{B~?t>`jb><#OV8UNp&`YcDwj0w!zDAf}ku zV*j#Oxrq!hTrPRbCQ~$?PKmkRvdfqP$X0$I&xEw|X0dWFrIL>zU5K%)DwL%35$Nj0^6vq^PAt6-FYxlDvR1^^m$l#u%@sOF zdY@0mU6B298DW;al-X;_(tD};V&xp2SUFN|f$I_LBVvR^%;Cxn&XYo#Amqqi!pGna zz;kY-p>TF{XTIySsQfesc$qgC5VnycGb@=iw?@IgXo{G_F~M_;Tp*ay#aydxW#Jmm~~HBWslteDsEQ+Z=K z^}HU=L-&^1RHmm~M|1>JR(nm`iOrOyeTR#vIqlDXw~> z-%A1{FzSThAe-So#OZ+X@(W+jwr= zFD2TuJmt)mmXo_8uBS!D+sesR5nUcULqW)&f!LE9Gt>9PYS}-#9TBS@t1FHE6j*g> zGkrfi*LlC=(sX;8ShNY4C4G19JG!B^QTQ#*}HuZd~5(C;X)3@?m=UA_o;nU?Pm1CJgc<=Ia`7Ns! z-MJ{b)1=8Sbq!+WmU43C#LCypZS20Wd?oIl9p$TVleY3+W($8~2F2;`foPV*I6o!| zoV{cW*6GE)$3P^JpHk!M9wBac8~&fu-;PMpdl=7h^9uCJX}R(V(led&lmk(@(8^fW zlVvww%5j|@kuUv>x;drqo={!LhQmg-D-OM+rVozSS^p&1?3^hVYZC3FA#WE;N0U7? z+Y5PrYqTY~PMK{K<#>HG*&@LeRDv#L8znn&@D%{|IH z&&W0HQ&5QFNuDDWZy3Dz3;m1d0JV6^7^!$FD5Urcym(TGNX17FUi?4$7taA|@su%A z@l;Sq@&Dk(lSTtHSn>A-8~-FVKC@UC)#4lNvpF|7U^-qrTSikx z@PKZPQ|3`yVyFa8k9({)&xlm8B^Ob;rjb3s*Rc|^VX2mhA>>gA_K|Qu#4wi=* zhN9!YQ$mKKR61m*(g&77#M6p`H(Z4q&v9_2^Fvp#m**i%1KzEkn`5B_|>+nvn_6!U2pH!rPw~LIqmr7LgWa zXojMNTbzir1TBurBMxA+5Z?Z@gxa71Jkre0eu$8t4Xi||vKvkT8=Z=kZknL^?8LQ= z&XbQJ#T<2{Dwe(j$-?#;Tp{{2o+W#Q9ygk#ORU@xO&yBs1JQTdpuZ%)zIPf1D!9== zoMOq|OSe*b;@9Bm$S_N@#!^CRO#OkulafZLNvX<%CDk90$o>OTs<2}3BqfFw3DXDq@6Teu}VA1V{`8$e@)s+ zqkn*C64t$w=DPTLfV7P!!SbAS#NmA98en(rpT7KF+GItm^t8U#&6mkG6OF+&G3*e; zN*Vku?`9g!1|v*}Sdj=QFb1LVEIE2c%-w`VBvSG;KBE&%K8+<$qvRxX!H85!ZU7X` z5rk$DROj7H-d+%z&5*#ddN)(+1tac5gm*Kw-HMRqz{gc2G%gLMEm5H~PZNZes!*EA z3qmVYD9u*}q1#m`@g@j;UWL;9XAt_53Z+S%Aau71r7>y{TCGBf+d*i93Z-#x5Za_d zX#g99wy03@ij zs8AX+2cc6{C`oY;Izxrh!a@+5rb0>9gV1b(MtL{Wd~OhWzY3-4&LH%06-pWsgqEmK zniCB|-2{aI(xOHXx`jcV^|ZjDE*b~T0qGYv1{<`M!z~8Q0Bj}$utLaDoB+uae8PK$@7XE_P!bco0=YOe9?dI3E1rtK4DAh?q#)2=E~4h?rDjbw7OsID$eJXR}fR z>WIx5T1z1VsU+bcr3?W-PGGcas7@kvB&7s6l2!s-p&|)YOMthl;848;IFe!l{F0hF zR5JnIt%5^Tvp8HavkgH`MN&>6X;P7dYA3)gDmYX<0gj}f07p_#fV)&Ap&ANsw+aqb zQGg@qD8Lbvw3t-XyO|Vp1?{{5JK25=q>iMf07ueOfFmg?z>zc+;7FhdXOSG!mspAgGvTe$pMD!OU0a>E~2UxN)S!qRI5`LM4eW@dvuT3L!k6VDQ(JMKDJ zret!Ra$_o{N&197xHC`4|Hgo9xy|{0ADkMoa^v)$f#(=gOsB;U=SP%MuA>zQCA#?| znm#$;Yd5&w7xi`0Mi+JV*cM3p&uQQJjk3##Vlcgr33hoJmH4y?SKmooB7v+R}0#_SYS{0}J1V7;HjtGpvoa$zo*%!|GsIPnlzn-<{O# zF<@&Mtp|g8T?&d5t14os)Kg{@>^w_LX-Nn4Zn}F6H)9RCf>KqVGKiH&QC@7b$4%*F z2c_t1#N1+1Gcv~>XPB{el?h7bA*@mZ(VKIz{01a<*uH0V?M=j!VEZmMX7S|{TJPEv zPdMw8B>0qALCu!S69{lvxrHY7*o(iM(s;9U*g}ZbzY$AaLTtmU^la5_Bc#$M%A}QG z|98i)snDmeP5xr}*YM=9{Roj$@g&$DkvApd0sAlOl>a~(o)!;FgLyx_<5P#cm$=PE z< z9yUG-*eHm75qCOV*!D0%E~gTsnM}T|bjD*h-@VIfUA=dR<)49IXYX@JztZIFeGzxD z{4`*$-up3q$s%8+NTaiNFYZ5#^?GKJZ{A~gB2GoyGVdC!Hy@`Jy=ArD_1~iCZXHV9 zM5X3BeY8}nM4Nc2-aD&jyQr8A-vM?Eo;Ie_?h5ZT+&qj8ghpmhKE+5cp7O~+#GkGU zJP|*5QhEv`C1&xY*9V@6RRnXMeF-JYl|+~A%dWFgwu!E@m@_&@&`ldLihD_Sw4LXc z@W!7!>Jz3pNnA~d98B`hpS~V=x+(BPT%%Z-@h?E#mjelil|1`b15dy?8`u?K{$kP9HAZILxj%|bax778^SsS8DT5JE`;AA z#3H?xXP8a;91n2GBkSFp&RzGJO`3qev7xBvv)8> z(e#fL#dALB_MvJ{9tATb+Bv0~*xSYqrUIBCWn zG}60~A#t_n@hnI2b&*xtMw&R1Sx<(Q*+;SR7#5(ZK%fjLs2Wv^wQAT`D$pkdGGYfF zsqAimLGM9pQWM*W%z%X0Dwk6{Fz+F&#Q(E@>(p)*J@6RI+B@jPQ*6S*8xOoN(>_DF(Q##8uw03y;ZwOn`O8~vVE0o(FA6T zUPmP_9!rc@E?nfbNsMPItL?lBFPGt2+(uon#N{m@yDA zEpCfLGei5(d}l{EPK|MIBQtTa7Q1ddjnXr9htjdn`-C9GkQKZ@Kmx z>KPc!#8wM(l0swXo&Jibfz;}J+zsC~BoTBub>&sul)1yTX-Yl_p z$MPViq#7~3M9h_Tl7>q=Nz1tWOFK!9xtJjli33!abOak$NebC?)1kbA;#Q0))LAD^ zySB&s42`4>-d#qd&ST@LSj_t5po7vO%a@#XwpRgl<>UQiBJf&#TbsVbGTt)LBnG zGM}p8OktA5FQNRwXepFIcpZvEX&8ovvM3kh&j>sMmPkwjI1-ltj>IN_Bk>8~;V>#V zh>gT5Ac@2)fFm&r;7Hs8I1;-6j>Ip3BQXr%D{?G+Hy+#1hA#Lo@BJp-I(+G+A_-=v{c@4==Nt4* z_`10uH(UAWlPlzxGtBZ5lYF-!8#(a#RWnKp6a@TQym8QYqkOlC*io6(E>|caU^VM#A?3QuPRlOtd8BMz( zwq`m1X0hpgm}&O)Hcx0*_y;;4(f2n8d>vD;12#_5AC>D;YJ4XRu|755_Wt?K49sVc zym1(QhG#75pRsG08Nb{=WBV{Oe)#u(Rcsw*##aIv>oU#QJ=!wNd?kT=7;f-pek1@A zD>KKL94a_B6g-wCMVvA-0IrB$2wwuhim(fz1z{}MdJh8R)pe%Zb#65msr~ri(k5?6 zxE|H5NX9;4tOuP>sfx$Dm+fJ;yd%v|o+>R)Hqn=(_{ua6Uymk3RA`3`_A|lp;XJ?@`!$likSLbk6HVUg=AR=4rhJ~qO|GiI)#Y=DFE*fngp|#1 z613)796n&k%|>}?@`RjRP&ZeZ^bt0WW*V=_H|1u_b>6D`<1pIag3-P_7a2FOj8$7G z`$B^}Asf)t9C?0nYHoIp()MA5yh|zX;^YMB8Oqy%eYhYuN-XO{wO&XQOaBckLXLgE zMw}p)Zo-RLwRs2LcGFjLDZZ5B@?j7*4Ro8!E{dhEBY)=zZ3pUx-y@~`30f<0X2ZG| z_CagcSF0G5#g$b*bw{*-M17lI!c}5G`!vsnU*XLv?%hlUL$NkctX0oT_K(1GQiD}u zulnPzlH_Ryv{Hgto(QVHTBRVdYad+&aWgh&3o1RH4dbpSbjefP>POc?|@D1W9LA5F;_&sb7q0xb#hv6N>Fz?X}x zEaP?kGyaS+E>4aIlc!0~P}z);yC|2Aq0$;*6KxEIWG3Qk;W&tcIpr`hOf35j=9oH+ z;HvAAUMzbNgTad%egksNV(BkvWLUL%C*HnVbq-gRX9$(+)QH__Ktn)l=H|1I<*4aVjZB(Zox-GfU}aTl9$sZPfRo_Dh5(Ic zh@zI;IORD)7TR>$lDqZa0r&8>J6OFaT3&&2D8 z&T5R@B4--1b8_>LHA{K4KS3X&#{hnF$}@yOtyQK$9+L}bD&z`*2Wh+v(KBY@|Hy;OpendFa^ZFK4%|j;`8?!t5nJ&mAcR9z!kP&VwE}U zRe^O$HJHT-O}QhO((7K$=Dzh$T;tx68jnJhb-~!#8wKn_9OvHkYl?U{B*IG($?jd$ zANJL{cTqoB&w5FLlHL}QbQ2~0ihCCs-HWwGvGhhAtTF-y@z0RuQ%oVLD=2k_rFst~ z@K&`W)1Ri4ZhirG``FSGw$b%5h!EUcQb}FXTy=(KA2h3^)xC?-DAkxrQd?p6kCD(m zo@RM={g&dM4~hE;#Z9%!%=Yf#Q+3B+lvz75pkfb6{xl{3hE?871UpVY1wQoqP*yeL z${iuOwgd@yo(M<^#(jM=;xJjS#MtBcN{JF3jCJoK)mJ|KN1!qRVZj5||CJU*dDF2N zGUAB@+?y4e=NjoLz3W+IEULu=Nla0#SJoJe$eF}oz+5)AqG5a@7axH>{~at-Y#^DDv8AW?jpG^ZO_J&w4J(RY5NRzO~ut)v6P-GvT$wN{y02p zZ-tw#FHxIF6|3{0f-SW7xZrmh{PUA% zNIysr%S2QNhfTFbr-B~PCm*KsXO?08F#z&zqNXSCoeVskr}S>3_9So$z*zZw2xSB~ zA2LS(wtIIIPhO*j#`kUC#tBqOu61!b+h`p9f^j}gq+;eE-#@;BKh?u9qbceQ^X$zq zS7FPY{QE~!UVb#;EWn44^%>m^^McFr%{YjS*25Ht6|lOYvRfI~f)$8n9 z&93{|wSip^v1=2%cCjn-bllzS`7*n*v6-93Mv|L(wr=t=rR{Gb*1f%j(rjO-!3}6g1wmN1p_$tVx|}L+w3KdUSRjceftD>)_{pG_UKk8i2Gj8pUMDu zOJr}9isF*l8$*D%sq787bxY$}^fU&blJ_mnpUObf#TT1(*)xjZ4w;1iqWZF0Y4v5b zqWYp%yrvhe>Z^NJ!1O;WJXTh}31L|ed zDs20gy1?;@ih=x%VA}lzP4sRiWeY;zRPmCE1flIJ22zn(1fhup#UcxtgCKM&OY5vBry;m+lk*QV?~xb?a3l@_9EpVhN8%yC zk(dZ@BrXCRiH!h9;v>M37zuDBP68Z>l>kTLCBTuG32-EC0vw5*07v2{z>ydVa3qcb z9Eqg>N9L*KyV4!@1?S3nGfdeyXv@tyc%#-AQ9QYY-QHbv#Dn~)@*mS+%&TY%oO0|G z{EB)dp$WeH2HK~g%)yuzy~}1=NtZU${vBy^1+JFrTaMa|>`V2FofD-E6hkLk)NPRQ zq?0zVL`O0ANLw#$99`d_2F=-IFuN8HJ8 zVFTG8+x-5!oc>0@OB#x3X?9-Xt3o0MwpJ-GPW4mBp2}~_Pwzm{v~WY8=wnobjTyMk zJRm;fn=aD_B#zhEIUnTMOD;-m(_@R_jclG&a{V48*17%zS2~hQsfYJnT5Y=^+s*QX zT(66o1B*2#<=s!=k;ZsfN;u>$a{1|xnRaSk<}cBF`PATic{2QP&{#kdFPJniVS*se zd5KmY*CrJ|w>;#VYm8TD%$|%f`;Ir*m>tVM&JullL0)dAJ*l{Qki?G#6W7vSHYWxi zG$g|j1s7sM?!-dUpxR_LU?&!G|g<4d{Z zNaZ{5I`h3%V^b~_6w?loY~_{XtUH&tQ53vka)r&=DaZ8NC~Hox@&*#fo9IPm+2zH? zi{81$i!wHmV!i|i+Tny$YJ~*LJ61pv_q3v3I3z)jv6=@nF{yEX?Rs2iwvmh_ul%rc zglzij1pvg#n(Un7b|hBDV{!{qcFAAOB2+t{M`6;=c3fTEi=Mb2yLICJmF?EKutG4` zms2zePG_e2?7;JF>NEB`bl#*rCkmZ6)Rz+?BoR6%@Mm%nI!CF`=rU!N0%Mgi*~Q&N zPB}jOfmbWDk~rK{1o)#IE>@N#<7;eG6-Ud(_7)URqsSaY@^(U2OSP*biloCfMTPnL z*m?gwu`eush?0DG ziOL{O)j1WvD4gYNt6SfJ7nMJCj&8GA!mD9#axvsvP z9YX_dt6RVn2?H>Uu#WbE5{&YSFkAMLPKiALC|ks=_+_zRei7j{gnEQy2=5_uBK!k^ z_Row6{uzRg>?yk6`;}f}m|;;buy-r`#gC@x%n$t>Gz-}U>RNBMH{-%Xza$V$T>S?6 zw1~!a%FI2QLC?n21;r~Z9|N?Rx_}&|BneLaJ~{_R+Q+!K?+i80zRT>IfHcy+QZQWF zw}seVFE6<8kTjamEGy#85lS7ie`I4{($Tc&2Aco$C;#k~@1dbaxFL{EA9Xe~Z-(79 zql##GyMDw*M96!{U`V&i5(#S{s)9u^^+pu2KM+Od2|9ge00KHFWgucZ%R@RW-Hrr{ z0(oFwslbY_f}A@M3K3Q#{1`#2MSk&fs3)I~V2^Uw3Vc(xubE^H%Xc!h2-Mp%Wh(qTtSTXmX0NM zs)!MvCl?xJ7fT?s1Y2~J;MOJRA#SM#x_dFTy~KoxkJm^V*r}xQ`A>i4{Szfa(@f0v zx=0N2vz42hnC;NN%+R?A9TJR{WootT{2ay16BNCqTh1}7?WElT^iWn=CN$nH#)0%? zfF3wnF9#?BJugu*UXu{2vh$UHJ2DhiIr++uc!CI2vGy~`MvRUn4=H^=hEP0?7tSy_ zeWdV(9lxsQ7$19Ks2d2ByH9Fr0wilYv~goCGzm>o2}N%`R?kpN@HFitTM5&&jmk>{x~IL&Mn zTMK1}xkCfPk)r^jhy1VM;y1Zq^Lv>NCzMs0L1A zR~G7keL($(pZ_MJZeafS(EU9oIcut%JOF6JDuGRu^U^Nx)Tu7`@6+cIoo_1H(D{=clE8wOekWv*tuO{(sV56ME<61H;f*~vZeIOb8-XfoB z&ai0_JlQK+f$WoF+HGj`?jk>eZ|5Ya0n=8P?3fpF9V=We1bS%Vh2HB1#I5q7D@mq`QKwAVnl$0eDDh!T$0e(|5>umUr@J9~(joqhg0 z1mTHs(e#230++jYU;sD{JG>F!&f=%=c)Z{^>0ms=Q6V^xrdPv(7YzqKhX#%cRz|O% zaENLd1}Xy4A(G5{Sk}MJBKivOQv$B)C>%M7pA+0TfTg=Yws7;A5J zFZKKS43ZriItmp6nq%!P?s#9HUb3G9>>R<2vGzCd<%F*s!fy9c>?tU`;KuAd z5W1I+#O<7WDLlqP#d*pBm%zO=7B6RF@rw#E?(9DIQj#(YTFvFQ;3Kdl{N`=@|ENx{YuzLkp*g z?#vOcnkbjg=&CdN7Z}B|N6>5?Yd|&kQL)v}yD^n$_q`wOMU9F4PxrwU!-#&l&NIPX zI0X+;?n1w3x!zsaNBbHkxeI&UOFs7$eok+Nm#WVi+-8V~r?8K{nOUZD7hd)hPN8R1 zr?Agch=XZF)XQCnOjGC?6)T(qI7_dGgn-#oSnUcwhnV24kJYa5GMAW3tad0CHOoQG zmPdQ?4V<S7^#oI1LJ zIvgKN)X@#pjlm7n(GApz?i>-+jr8OjIdv!jEeCw8<$~0i-OJ1xbz?)Q!*hVTaY5>q z;W^ND*Mv}ajeBVvibmVf4b+Xt4b;&M)J?z*)X@#pO?2l>1a+f5`6f=?7)G54W>S+C z_POfJ?(BHRtavb4BM=M^G#{P=1Wpbi5YGVuuMHvaTKCcflnw&v1_Hl?8wjKu2!sw0 zfpi0bQ`|XIT-Av#U*aOMYz=K|djrbubu%?P8BNmq3X@hsAH%zBK(luCEcDS zeU4MQsH2Y4I-WfE___M%hBEXJCijva$LTarv*T1EOY3hsi+A?e7kuM&cW0r=7WBIFaa(f9odr!@0LpPgO|xKm7WBCDaa+>u&Klv)AK|Lz zmgfS=TiG(&Q-}RF879}-IKeh*56xSpEHI;|TVSSz1$}j_&$TvQuq9#FAXz18Go48% zZ>cxX%QJM8EY_7VP{MC)uq5WtBzWnUgd27A=rHQ{szx1eS1{@@f2vUzxKYPU-~W1} z{vZra(a?*Zy{Fv9A z8}LrM*fmgS{>fi3Kb1e>3gstWq5OY3Kb0$1p$*i!n^5;aEve%DYOSW9Jlynrz8AAB zpNLh>sqz9OldILCj~K&)B__TdZ#99b9^ zK}=NZGj6!`VHL?t2F~jUVMCe~zg)|!#plF}_+vHvSKl_nqW^b)R@>+5Ws~q?9v`87RiWh~Ed7(Rd)4}O z*ESD@Gb601*tdM8{Zy@Sc_Rk!bBoSvY6($AhPicIggtE6`@ zTc*-W+XM3pqVF4vjr}xf^;$(4&he?nWp5WQuU3>}YmxT7czxRCic;*R5t`_lW-uc~ zeVQ>FH~LOywOM*RPRfqQblKhZW567JA7(i?+B7%NK8MR*K?2(Qagp(v&E;y~uNM+G zFnkVnGq&S42tMpC;rJXIfp5AO_}X!KwPKTo4~Xl9$2|;RqD(hq6K(_XsUOEtJ7|C8 zOD687LmI8R%s6;dad0g4J+5_A1#w4B)KS;E8Q85@J*o+39L$P3N`PtD2Id>pOfRDr zPhTL{b8spL%bUnWbsWIF`B9vf$5w%#`2%L0%I^al`!He({7u;ChCT;!wJ=U!?OHco z@Rs;=*u~~J&wp3fOp>kC7t(nur%7wGU zt$0@qqnbQ(Z(d+&tX5(u;S9N6+~PyRs8P+M^3ym`ArwVNpvaYJ>~m!rqS!e`TKj;^ zxIETK)Gpm}`O>gjgm|v<5oI&5qE4t+ew?R;r`0!lOAhFQ^$yQbh#Xc|W*l0J7AJ6I zm!9nujrxp!T|`C&3d+Am&g!sf@hV;0Qe3rj0o>oaFD#F;bb zwueggmM_J#H>VH3Ooos8<&v$flG&T%=dThrjO?ab5*#aUEDg?8m3A9cpf^XSLU+@N z1C)+_9~_%YcGGY60SS_AG3>pMy z`8G3%F#s{5U*mmb zoGlcM!voM1{~c=F^xI*oG1&^w{OJocb*}D+VfxI}8j3pu76m%(Q=&*$q2Z*|%^jrE z&~P4Qq^N07#)7ACEN_3HtOFNEAwffukVo; zbmwB%%|hBIGl(HY+9~>KGNjzvsm2$%;v?pwBJ-2O%Vb3{10Kx%_HTwP^Tx5_4fq51TT%ZkcPaPdg9uuvU^Z9p*ZYG^<$XvfQ;#TPQB8M7 ztjeGw#?%N6uXKPkFcmA?8dEQ8c^Fe8<@q!61aQ0R8B-(BKuq;8^h;ug&D1ApbIVmT zH9cak;W9NkVs73eLo5bi>XBcCPt8X+~!q-!Fw-^pp@2Qg>mm@48WPLrR10E`ziP8=d)~ z%v%4<$J1O8(CwP>OQp*b3fNQaz}Kl=*huZ>hbszJ5jNbkfqm*^=2HR=TC zs76$m1()y2;Wcx9K#BC10u@V+gt#(at=Lg3&bXlt)S6NQzb~Y2IW$|4S73|AL_y~W zni!z%5>@NsBltc$iHGtLuZuZ(KS7Da0k6znA7r*IlM3vy>iL-t)|3XTZecuHazqi1 z-6S6V^X1(TUf!qBexiLK<#(x#GthYpuR!xJc?HxKSL^X_z>EG&s|QtuH{5`#Fp=c) z7`YLb$Lm$6FxV%cX%o=OlU47MX$7^Pd=TG$E4LF#l?~Vsei_1={fkJ#%1FBex|p!C zPnC=AO=%*L4K#Ojz{r9=&%*iGLY!BC-$V`LGJ9XhxW4cPOwNXK9s7F*>+gOFs=)Vn zIJ_B`y(LjPZcGPBPPHoLIdJUyL6UQ^vKyc2P#<@hemdyw0=ZUs_~)TjF#P>pD3Dl<8iY3`suh9P zq21L%<-5p?E=X=lc}qTkujt^&N()oT@Q|gE4_F#3^+~=P9iSNQxVX1Q%A6%-&X6!7 zLY*u}P#xDvv$Sy9V0>r#1%7jW5X+fuB;&z;qG=EgDUHuD=ZIRuTM|DsJCz+s%sr%T zPv(5aM|{Z_jj4LF9!!q#Zj|%0q$S;*qkxnQ3i?TEB2Jn9L{J^Vo9GT8hvx%N4f*1| z_ZdToiPTGrj2QS+yl1Zov@IGJZL75@wegJt8kX91UwFHsRYRM0aCwR0Dup4aiCT(= zhzY7OW|9-I#6R5`D$45Mms?^s=ps{00~*y7hmAfD9lA39+alqw%7SLU5)X@0H(w^C}o zA+I?wQ2lL_YOR(tsak#m416XFreKlm04AT{#en36 zAi0s80&f4wDWI-QALbMUWMLTQ<9?I~(}Bh?VR)ZuybNrHFl(SmY={+rcZT7)Y6(bG zx%9vkr~(9w5F$g=o?Oj_sr?6cXl*tO?ca&S*k**#fQp;sZk)odKakQxm66|~kAk6i zn7nw)(q!=^)dZEUK2QZ_%$gw#BoDl0sb`&x=?-d+BFuS&4iQivd~bqZ{Jj~@pB-7RIFJfic!nPy zft|=MK7;M;$~SA+2c@ob<3(4xVU)VN$$(+?JdQ9eHt8B#jB0sMkoSaEJD zZmj$ot=-~l^T*XPcq(!IVoYi9#u>VP-T1s!tn89YU#8g=v8p7U4i}A=aL%8zj}r~)1x@$w*&+}eB)}y52ouEC&zhBw^8*; zT3GdKhBAweifYw7}t*?t27rBO~tpfae;OyrUC;1{CdS* z$`X|Zo?BdhE9R<((==@xscAx3ufKZM{}wpDAnR4pbI;e~XHJMC;`%Q^cZO4gYlAfi zFqedvn9HRJ%zc_O*ES?`PvW<|2Qc>#0ZHB&bG!5qZ?Eb0Fy_|DpIAOi>SAnlzR&vM zRsESu6$E)!X?}X3hBE;eP7QAb31a0cSnMXRX+oGF~?SYCg!VfrcHx1Z{fqz)H$1UOxLeT1PyVX zbmp!0K<7&sS$P1b$LWt!m+wjcl41oEwyh7gEh<#^kt{C`Gt{;NI%unz2XoO{5de|LopAun!jLK8{|@%Tg}C=n)rMjmNU-T zLoy7jiMY{ZHRDa43H^-R}TtTCl4*KIl zt$x5L{uYS(=}o+{g=0s%#*+}qO=PfQfg2}+%$p|7n+}N)_Z?8hf)sY%)bL_)w1aB- z;sciNQ7Vde2SCa!-@OC^ZkAbGpVl|L+Mn4#wf|z=dkHv*d(<+-ye1qZmp)BOhw_7e zHGz&z6%jWiL}St&*o8hECe3DKR`+8P3E2Q9%^%XZ8Hm>YJ=e$O00I>nLO&neMVrPp zM`X~vsVWJKD{5Q+2$TK8sl;j&BUa9X0mDY@Q1p9)X2CtcDv+~71_@@!`?yZuKt^a4 z&aWe6%!^q=2*s-7s-4Q@b_z+1tUNXuN;T>ZWy`+$09#=8`dgwseBp4OYKih-iP(H~ zFD%jdGAcM7)?^+Q`Dk9+lRiah1vHW+8fY(8Qhx4*MAH-53!7>$xEBI1>*b-ntlNQu zxf+l-OXICjA-LOHefnmvX<}H%K>k*5Qa5+Cc*hXY-(m%e>suZJUS2r)TpcIy&KnsH zXQ-?Ahf*TFTP}T#8;!YerEqKrRNUcB)KaC0e z;RyT&ueY9&-jZ6&b!wV_#^M`cqRAfx5zt>_UjCfQm8R;#@(yoaz}*Yb(D zx50VJfu09l2=%?IU}x1{mx==^#9Xa1uj5>W;Z)|;^?}MT2kW0_xdWI6u>4;MI0(x> ziOh0KP11Q9M-1v~G2!IC7UR3P{s@kzxMF3=$-;1`(MhKwGUcic6Fh41P{Fg*aK{Ti z7kOUcqnSu1qfiZRNwZEliI@ncFW{@$n#c*0S^goNuwqIQbixv^ z!U_8l%gXH0KdosUPlae&2;XrSSju76z5&KJS?VzAN0}JcVG7e{IZnG6^3dmpjA6N{ z(KNi@820y67{p!E!is+kLogwfGmtOT@Y+aed!`%U0Uzn>&u5vo3 zklRDfr6y>nT#xw~zA;4QQj_H^bbdgcgb5qQs=VnKmo!^wjkwLgFl=fMy*u~`I{1|Io#b_;plFy#!nmJ2Xxp_ka)m`f`>6K z{X`v?9-w)Bj7#TD>lk^FL?mbjSF4U42B5iwlsR@Z)UA#*0R0A%Sn$KM)!4kCdIhk9 z-Z)*Ld}@x+@|lQ+l)v&5zyDS4@hLX#PzVJ~>ymB|k z9zK*z!muTDC=qEWDX!l~HQ=LIHgM@UK3Emre3CIH*t(bqLqlEFX#P3i2pJD1U2!~! z*{+^ybSC2ZZ{SF^EBYts2ENY7?BCM=#CY(+>H#esr@TkN@bO^MRg4E$;PjZ`RH7Kg zsN=z;FFYQ+mXHlS9_)UC$|IveGK5*^kYW1JF*KMs~(Z%E$UjiC$M!eHTypB4RoZcKpW5a)$RW<5g)$v*(wA{w_>?L=~Lricb}m@J{Od%uY}4^7M^(qxpp#ig!} z9A&E`<-oz35gBQ^ow`d5&Os8^K~m*zOP_q+0)$C@a+ifYVg4_$PNI(GwCO-H$!sh) zIbc4z&JIuWKC)3=*mOUN7OTjMT&&immn_lB;AHvGF3T&x)UWx?$}R$uv;e2-vY@Iy zR#j?#wW^;4s>+@)JB+4qP*V&XwyM+SkOggFz%b0ZMzOkfiIwT5p&a>82llT6WPs)_ zX{8OO_fM;+#c27ACZ4)zvP`UMN`q;j1T^`iY^EgK&~(Z5DRtqq<43Rp)`L;{;MI*V zH_k0k-gP)RK*}4+0-avTSepwA^up;#7HFg=-IOfOV)kbq><^Bfsq$UX{yg{3+aD*R zD5y9z;dQlL>H^>hbyzGzIxGtK7wWKd4B)5A%lCi481=;+mOlVdKQ)L~wsY*^4hx1K z!*E!}bo6srZUi8rSxRDse6iO3_;KF4>I60xwL^Nwp(n7{y+1sQQ-UI>;|O16_$M5e zbfUGty}yZo;SLK1dXZKbB2HlM`TOuHQAN|Cd;;6@g&md^fw|Q|C$R5g1uRO~5LJrH5@AWemG_IQ#>am#Mh{W`zkKRq52wUPvbv$Si;f8#Mb+VB|uQUCK zmGs4?XflB#I2I;1WT=T5%Xv)AsGX+fGHLTIb+C=Y@lp4GpW0`5dj^JfR6M{mKyd8@ z#F8@gmV-Dd*kOV_1L_`=^y%0{!Pa*%%NR15r;Xk}J~g~*efYhAIx?Sd{v=xTizkO> zHtYXKlk39PEaA%}P$$>lmw6Q^V3L_1DQ=}G!5FfYp78B9!9 zgB?!H$xss5sQf^_C|7W-^J^wm@A!g+a0k7J1+1}rA(dwl+D+MQq$Co82 z9^!T-X9ezcB;g)XphH}kk5{0Sp4je9C+HU}}DsGxu0AlA|<=*Jwy+D`?&#zCxARM6i! zh}BgE(eJOJL{c$q4@g0FqKQ>6N;nN3B_Ln+OKjE)?mhHYcNkRB!Pt$ zwh2a59vFxu!uqwDkkI<|EeuKc`t?{PVIY#hsxuBqKD35b=Nh#-ZvlGc>hLddf#d~_ z1oN+XSXR;p7L+Omq8W^q2|)8e7%dZ3TILNz5}|41wWdvANWzUV#*lv%`m%>wkX|0NrJ0m7`b7K(g3{k7z(rj z-}*HE%6QK|6oz-qu<-tcGSL+G;Pn199Its;cpttp-aEtbjvE%<(O1TM_Q8;LzyY}! zA`Y~d{hGIu@(kS!PluwF(kBdy+~rrsJ2M<_{IKxGTp91_?}jvkls-8!-t;)R!Bvf; zn6%A$O_)_s)qn=~${|A2PZdThm4FVW%43x6EDvvDPr9fo@_IlcXfCs7J<3BYPe7ZP zNgS&z1T=!8j$;%m(^;NyHN8fe4Co-V!TVJ%JwO%W#F0C!Z)EG=2eAH)m;nSbyW&Zo zpwzN_;RH@p{s3qM0+~7LRW`Fc;RH@no&9%l8T(L9` zsc0qy&}a*920)ld4=l5zNNt3H)U(w){duL1k_2rqw><+f?HU}Dw&AoS922*W12HYR zGNxO?F>(7n5L4`xF)7Q#YR7vRNKZEg_xRmlb};H7pAP(tXQeR)A3u(hOVv%I*y&8e z%FfxCpb1-72rPR)j?4o_#`kiJm^_OE);QTkd+)uEM>#R!BnUTxQX#gB_Tt~d6Jk{d z>CAz2ECo*-+og=AB4C$jRuFi^s`+^))a+B#3@0tq0)crZh+Ju$*&vo5KkWCfh{inb zUHEz;q~2>V=esJIG`r8cNQd~}6tV{6MaRoW0NTPpw97T#Rfj%gRdSe`>uadT)C?ur zm0wbZh;~In%)tJA;D*BMITgXS9}{SMeBsb}>!9u4eP4ujKMf!@nCNMtrz#z#Ib@3L`c$ z}rSmfDc?#9*Qo(~4{_F3GoR z&2*gA@$(~?u&!0`6X*h+a#%+b>`<`&92_Kj*>`#N{C^^Qs?h0(Ocze>DH{pI9S`#H zS_IN@2vFJkQ1_0sA(C`_DMF;W4f*+HXl5+cf=l*Mt~G>j8}RA7Sknxz0f^2AkcqN) z{E-hgBhZSIi@diHty_jlvT-6M`N1GbFtIetQ4+rZ9Q*hU#<9~&!7=QIvg!|GBg*i2 z7Q|BaTVUzj&D(#~b!>BsceM`3p5R-OTd_BePCdDG9vy`O%UZeysaYeH{(wq942gM= zm)~U7zh#y3u3Wy_?$eNsVcOemi>Ha|enpj;QGoulVR1o4d7>bQ@~;C?+W$DfPLMQT zvC?Jbhro~+CPERk{6UloE5MeK`OixDlimgRVE7`%L zY?(5a;jLEp)fqYMokmS3<-@L%sji+>af4Ei$&5-V?Q8hL5FZ-i2E%0Xny|APo2=1U z^1ZH2^!1*$#NX@sfGzQ_8SvpAufmd$P2_F>u(qg!D5hq0OVu) zoHntJ-#x*$fZouFb!>g74XEtLTS6w(1I-h$Yx!t#|K1G#n%bLje{HCpqt(bgphx>1 z0a=g6wp)<95MDHO#Oku^V^lnKd6AdTvl(@4*{h3pXDbKFFFu}3b#+62r{Wix@I$T7 zarrGF`6X9nkdFk0+!Bq2aH3l+b3AR9M+eWgM+Vw6Oc3ACL#4HE1x)N)fnxv#5;GxC zMIiPteGU{@vr$E!`x5^yqX%b2!7uHXTisiUuk6OKbI%|Pq>;z5dBOytZAfayP6A68 zbQSVEaK}G9p^mSF>cx2?O7^AHSw2DL!y!0vSOcM$hrWp!wNBF=#cAo01Nr?z~kjUE2ed=(q3}Xw`73R3)-4=jyHS9^|=_ z6)t0Vhhc@k3%3haSV&=3xK*>laX8#TJwpTDGS1GBYhZ*&l_eIZmfG!8-~~()-X(h(J=cWG)xs6#Ar*U7CNGif9@Tw;UwYV{ZxOYWu2V3 z{uBC9Wb{=76gSxP9g9L$uLeUgZqs|PU`VvDNu@3c8^3xj2a=8iWcUBI_b%{JRoB1x zo;)DnKn@TvV1yAvMFpM7Oy-@LJRz6>fkYk_4MQ>^fg}^>K|rwt0}76@_!C>SXtAKB zik4ccXsIMXd01-0%Y+mn%xKQ)4_Wqu=D+s9$4UHMdX7~uzM>g;1E1SG4hYeAEP)O*LLZCb} zMp1dN_!}}t@y2i|=`aeFV>ZiEQMFOpA62tWMFv z5^;0(ZtQW{(2<2~M(xqp_GB!cviR@pwECn_Oug6cLgx@F)F2#VMg`It*3RK!w-LNA zMGVyD^EXAAfJV*se8fayBlZT-wsFar)N=xvHY1WDDf;<|nJ*Z~WkD%j!l%sjO(C zM@mM@*PsuH8A&0#4OQ^lYYLMi*QZ0bUvzUNQq3$PYW$a^1^wzZDzRRzd% z=*e?B4y2)MkhJVGR@5wfF@@I%>7-)a-y|^sEQ1AdDszBGA_~-}G3_N#jNrW_-%ofl z{FnznRV@)teEksTzX;kg9Z1e{WC+@^)32 zTAaeH%5J)GX7By{#+lA*Xk-*~a8$Z+rNZl_%le~nS=2=G#YB1=;IbYJLj1lHUf-R! zhxD8Fofn8dO5B_sklwmPvaD^AUhu0PihDt}K^j?-ep~8#f4Qq>0 zWzi9aN)+%(hv*1N5{0C`5JpH8@DYIM6p|$hH1Uj@$x#voe77bF!Xw3UTtxlN`=gGo zDIOHjEgs1kl-dCOgzl(biQQeq*9B3w_Q0--8&=xlVh^BcB@4PE4^j^} zI8L^WMyFR3zQlL9xIkJbydJ*2)-WHzp?^d?@AKzUobWZwalQ`tR-hPYCO&W$;Nsij z(O`w}Gbxqw`IyrTZzz%pxKcIPDUg*pzX&lc6^a^-pG#(YECL8$mK=v?Rd#pT7gxLiCh8HY3Z#dIS$9^kj8 zIGf*Dj(vWp&x=^4>Z!QK`{@e%=9p$~{#@TOkSfI-!#(H<`#l5q(96KwkyAxan3u^@ z9`^E137EHr$UZNk@Bg@?&Wfeg&aXZ|>lq zi6V?g`@)Ep`t-=uEm2Y@izzN-%;8t(`Oalg zwj+CXA64=uki$Cdui$}BOI7k!uu8@tLrrESc0+)n4*(-VY=AgrHHfk$DoV6UF-E3; zbCmR>R0{fLlUWcmq(zh{l>)O}@G@D*HD6-yOrbRAar14EZ}7hM#qjs1UJ8GoyDj8B z>KM2%lWLG(2-9-_5OXu?VS%lhz3VS*X+*N!Ur&_yB3hrD>A$s7V%(~TF}Base-Y`S zoL_~O1MgWchm;HNEfMcSUWo{gc+dKENO;tGnU1VR>rPSTqNyCU_kPqUsOK$2wf7Je z1@#?{+Iz2Q6x7WeHNw`5(Ugu#J}tq7%u%DS?k?tG!>@)+CPy6+H8-g|?Aog#bKXql$6>W7 zb@NvqHu7r7yvk8WMJ4kS9(LW;kXa1We|6n!GU8mx;yMgCsbi$+5~=oFG3BcL1&pKd ztC|y6{S!U9X94UpyureFTC^}8CJQ53$YG*ufGY4NfCkV@2b<(~K)aTE{tl~Mz=&wa z$suXEj^^w=;*nEm{7e>zex#%2{=rt(y#K1y`T1O#S3qkXd zgU3Gh;vk6(Mt&?s1P^v0sAu)#MOcT;+>y4R&iFnz;`1lsapfQa+3TR? zPC4fDwjS~ETQ+1^tdOoBLI`emlbYtYfpl;cQ6!nBd_N_1v>Rgq|4>XTJ%L;gt%C6# z>ptnj3??9F(2xI(y&9hyz+mA9q$J-F^1S?B4Gg<--&4Q?=ZPyieQ@6W7&E=F*o#ZA zHFyK(9^CS=5c@T!b>vIVQsG&M zp)3TJdE6nZSKzi!z5B;;voI}u?U#mhijK8jv6^7=k`}&@`$#qjV>j%v=$WR9OKp|# zii`seoO0|-?>k4nL1`0Y#ds%C-E8BMI-4jbAiL9D(-T_ypOJ1n4_#`@O_Iu#Ln6;#iu{Tl`KYp%Ya z$3)yfLB~cZXjE?Y@_5}+KTi|Yg>bH}1d4S39o>!_Kq$VlL?;m0B=HM(-zVhJOtmMfky>x7;T1WhggO-Gj-hG*ID*a zh=#`b0v&l+P>k?v8~Ii}Ns^pRL-9!i6tB$0RVcXIJdWR)N#cZ(@U;TRd#15%3=&O> zVig)8T7^0|si2_XTko&+9fL27YC)sWh>DwwlNzy`RF?SAU>YkxGyece69c`9%G~rb z(y)SiI3LL=#D^6Ic#HF)1__<`+)x2O#f;?}{s9JQzOTR}8bKp&CENdnCbvxHyP4<5 zHR4vx@v*5=@FjB(x=J{><<_TxpO{3vw}6`tE8`tCE{^2veW(1>UxEZIBO74eNhOLQE%cx?o7q1+aus$mq z6n?}Lh^*>L_=bpVoGszUF$xr9Og>0AQH|j7E-SXrD7h>M^zRYk=W}E^G$>q><@DH{ zLiJakpZ?=RfOv)9<|Ph9oI&;9-)#9k=I4!75e`*}NXQRbpJ;N*xne5ZUUv!N;q zlE{)J-g&l-$Y1`>v$Z@2e7K^81F>nXTb7e{rGNa z;#Cn|7|xkcw;tRafV#*NWLY^i^Lk{S!Z;*7Q3ldw8 zeBSaArl6fof$b?x@~n`(ksVIRqd*X8nAkW;-{>sXAL;0rg|H?$3qenO>xgtQIWj?) zlZ!h)ac@9y^JeGBupGZJA!?2zweLX2y$6qUbUsBhz=N&bqS;-V1P1PGl#;wIkR+~M zI*@~29wHTk3W6DlM+Qb^j$^m-enO2bE)Nb3t_#D&#L(d_E0CszIhYK}?kx`*uft2=g?_@8yg_8-j}U z9rHqhT0RnDab-u4uV~wSlUy5up13=luf&oCj8_kBUuQwM+yc*u1Vb~isho=qcMrAnxBH{0{7hN8^6V_+gI_H z_}YKXx^IeXCa|`&>GJY(-8&Go zmuyKVPjOfx`GST-TlL+Ls}3cu>i#LR8*InV@rHKXDYoMVIHEqzTL8@&*_u$;LkyGg z|G?3P*H8HU>v}bBqS(Bhe@4SLO$pd118qyTCbVtmuMx`aT|xV$5Z1Jvk4cS6vILD9 z{D27MBVbEReDJ8$u)L?@5LD!t65g_}T{={8tb0RXpy|W9BW>~=`=!{roOI~!>f419P+?K|Ucu zSao}(mA*F~gT-5xBj2AhsMl4G;U*eyj{e-qQO#H;g8mn|`J!NGBJP%q#nxfkn9zI0 zuZgdccBk@XCdB8K@nD8_Vw#4}rst$$Mjbu_h+@0h3?gsv?GLho!L%fe$=_f|i>L7c zaF`cYy-p9f#jrxg5BG!@BB~^t5tZWVS`g~o7B$A0&=`rUK8I`yNiw`}k<%EO@m4h6 zKNx4Q{<;B8z1Mf-MwC9}3|si}d(;d(izsxTVq@?-m%i)L@VznKI9E~RdwBe=koevc zzV}p|g6P>aOUA!B=iAGDX(9hA==K9$ua`1~++hh={7jzj=h#1dbp-x6wueAhkN`3_ z4!^mrSL21D+#~X zwv?IhrEMuGnAy>BvR=&}ZE^jtH$>#+Fg!4Cjs2>rLNc5TD}1M9)+in5a+)j zA`(*oHQ*be7g856*jIfEaFuUOse8A3m&*5nih+eUpzUr>l? z8d)W7E=WZNdrUhKY5Wr3US0>I&|J`eQ>0&fW%|wf9MEs3m!<#N3u6A?i&{SeP&J9GzrfKSs-u&kbrew#KL;ID!-9vSRf9;T zAEp;qA~T1`5TQ3fsCRiqLUaQ7N`w+YXm>1zPFjxzy|rsX+aH6p?EW}ng9nC7%I}9vicLLCEMnrSHp$Dg?{W?OCa@%a8sLpqUXlJ2z3DeZ zrynltr0<8mGAdG_?i5Ab7C54?{GI}}5Gh0vsK;RVhCmf==i>W#Z-M$I5Tx>VH1y3l zfB5#wjNDs6>^N3lTf< z!QmKJBG%5;&9pP9`P`8#GV|xqes}2;q*1K=uRqe#`3tgm;H%;-(4OUL=$eBNojwAQ z6Wl7NhM5di8*Zw=G#!iQxWE8$aqBoHTJmUd&$UL0i%W%W$J7AZn9kwULMxb1s57J5WAN#a6EbT z7z6oYgUD!{$^4LyV6s+`$+mMQqbY2!3!Yksf)1aUOJ_`W!y|DwR^Txeip4T-@Rq00 z>n(QUTzbc1=!;U_4kIpv)$H66ZanX(f?NP63gVIj`0`CHK!Q0YN3e}FcD~$NR z-a~BL(jAFo0uI`L0tlf)7Ry`OglqP2b`vsaphzQiI25@E95Nz=s-WfPsIw6q7#S z(93^+PF8PZc*>$+W=F%!?u{9hJat(b%1kxLO093D*Z_`B$EA zKv_Ez=tb6eeg)3X;HWfx=8bPY<=^BBUj=XqAsbISjzifAtPys+g_o!~-<=r9dEkpV zJ$;ovg9$qh|Il9aQ^}7bcCWs=oID}6s7HwlgUPfSg_S>L;=^|~P)}VuLCIJCZPE-s6ENY5yJa8 z**!s^Ak`ZvXRl3;v6PF*Yd(YM;nni4oa6GX7J)n>52F(weCdH+Is^DCxmTN0ol%4T zfha}2fNwKG0<`h{GZZ^Q7xDTXo0%|u3lkPS&x8ptFk$d7ncxP*ZDm3M;CX=kS4=2- zkqHA|V!~elqqZ^OF~C&B{cpHWzs!W@SD4WBYbM;coe7qA6XyPb33+cZ z;cbuP#(hk<>yJ!G+Rucq0VM~R@K?at zgG|T;tOUFTxB$=}VuAI0AB(o{TcXxZvfNYL7f7=1Kjx+CcF%&KEi|-kBRk3bs7r4IL?G0{5KPBJb`op z74I@(3E&~XPXI3f{tiez$pj0)23Q4n4)7^p(0fc!0*V1o0p0?Pd>?57ehX*^%>66c zzl{m^e1v>`!i1l;BhKHM@EPFPr%cHIj0x`o?(%^zI?&z#Kj75osN=0nc%>730q6n@ zIn9JLKrz4#coOg%zzM+nUohb-fb2`)0dDyR>J#t{z}v-yYrbN_Cct(;GoTgF1{nV} z6E*<00(Jrp0!{*afNsEzXHc(zWq@Wt|Fd`pJPFu>_f9|>o|gfd0sa4paKMv*Qvh8z z6Hb2%p1uH@fFl>do8O_$FEL@Fp9xtqneYq1V=*!zEmkHJ0v-Xp0+<~q6Wsk|!h``b z;n+Z#@Ty!UTmYyB0T1x#6<`a(zX6ONEEB2#zXEgsvJz#&gMd?jN&$2M>LD_r98d#z z8E^t{qr@-CLlOU4nNXb~6B+;;0jEaGggb7K2@3%C0e%eF0(b-P4q(k#daaMsj0OpH1HY5AYQr{TvhK1NH+3frokA{^FlZa$_VnR&wJcH(qiBPCwA@e;#rZ zPy=`ra1@Y_e(@;a`_ldd{bWWw_!ICjU^8GK`b{$6`_dlQUnaZ&*a!F!Z~@>+fFI!d z(%yr9{SiQhzC9L@3s?ns0`Prlue(MjGy~oTbOT00ZrlT?0eoNDcR(K81tCbE=?ug##FCIXj2%nQ=HV!9ZkEXe6+F#QPhGn9Tt&`&b`jG~_u`Wa0>3i=s~ zOz&NHFD8cP0ha)=C{hAo37!YR9SXP>a6jHt;NAfE0pL~us^hS1azew3TsF&X^*&4+ z0UCCCn_xb2U+dkz9uMAzb@*MmU$JZ$^UYs??<@h?JE@;$U$^8tE6jH(rwfzK$^&%Vj+eSrtdo%X zD2nT;kfONWH3Gk0RRX_WbppR$l>)zBwF19h)dIg>^#Z?W6$9^RH3RQxRRiy6bp!9{ zm17!|TnFhHb7pTxJN6EE{dam#f0LI0jydlhH>>g?3pQldU-WAi$!Gg+if0UAGI#%3 zJ_RJ%T<`vSI+J{pVPqA(XZ!F7?*pZG?}=lF{o~dZfd~DwDjVSKAHE!KbG==&{KGTx zw7JBCpCbIM{>BrpZq7ts{sHrKAd$+ACfww85Kjl>UA7o0NTM>m!~mrRKaqBrlHxJLU$=1o^3o!x~i#jdC@yMkj7=Rdoh^Z z#_kyRAY@ic33qHqM1MLpgE!rbH2o(~0km77kq1!I_)mCGdh_IK^Mti`Cp31(neLW5 zr!|_G`;341Qp#qmyTh-hh~1*c+F1Xc-6B!{34c1#ps*9(sojRDf+yaPm*9SV?Nnjy zR1i(@p6qczF`iaJXAqUkG-VBlQgNmx6zz2kMNtuA+b*c-%z++zAb9v4Wz^Ez+dX>Wpez}l&8MKgTs zL3!@nyiTCwGUcoHhse<=T zx$iLI&Al5H$GgzV)8oP1n-wlp(x4Rj9iB|T*C)|$xhR^%T(0nVYli;^lg5c`y&8mMCZQ-!5Q@6?1_!I)DM z{C6gGeu1VyQ=^u>X!161UfW82nX9JFea(TqQ(yqZQ@Bh?++r{2W zk8MqPZADFa?M1{r=_IWECyIRcQd#z)+n(}!+WjYZ7xjDE@I<{lkaZdXP%*wDWMwZ> zO6M8mJV#ldiL9SHd0q3llXLU$2Di@IIUgB+i+*N%yG{FDiQfL`5HZka4#b%*Iln3; znLlf1C1KG|pI8CSM|63DsNJ1Y?}9PkAalp5n~`3YIksh`z9^3|&p*^h-?#>qUSY^j zrfbml+})!+LBFGc&ota3u+DuDk`T0`I<<6MPf)14}oUvHhMEtaR%UAYh#;CY7p<# zuJX08xud68&#a$Q@UDl`FZZR;uiMHC;U_ItX$c^9SpVDJdm z$llPbiG`UV3cS$XQQ55_X;6pm@FyhJxG$Ob46WICTHy8EXz%7dzIgWTX`g2P{`crI ze$xT>pw)Zb1J1Q>CTY`YpVgGt4OtOK#q?ZMdoa8uP^r57!{w4Ia2L4)UJ~KuomJ;` zsk=<)JpJFA4$7Uv>NC{u2Mw9bSPRx}yVj;tzRsOkn@*|RQ~JY0d!Z#2A+mp53IE;B zf9LVv`TVz>|5ozfI{v!@zo^3mEVc;O9Hf z_Sg>*A3gI zsdFkC+g4OGcCT*XM_K0tDOB`7Df++9I+FW~%C=RLcj$;>>6&OpUwsAOunCjR(E^#<4Ci z!9nLhZ_C{E5chGZdndwZ!&bA-jzt6g!x=SM15!#klum5u4NL=j@W1XKg5M4NWrUwk__Kje9ppcM|J!Tebft{_ z2v7-_3CISF2gm{43uWwmz*~S90Y3pO1=IoV0^9*G0_bmMg^bMyI00(_xqzd9ZvYH9 zg8?G|3VAH?s`o%$)v|@$Z$U^&N*@tpfJ$F3odJ~ou)pF8e`6xU zV<7^rJss z!?K1%CX>mo+)qQ=<4TW%ZXA*vN>Cw_-5`rY=iOjlafd8j_J6wiXWDJ$M#VU#X6Zmy zm6umEbNbZM97j!!t+t#+yavOw%F8j1xB}sUS7x`@IUO~nG{OXMS-nf7LiLnwD_7K4 z)s{Qz-OK9iRxA0{yJk&wl-uD>b<{eFY}MQ^$5HKYa@kt%!ZV(@&s19-H2L5&#V@oi zvpe%@Z40XD)8Ry~u&UP1SaF@R%55(pf9W~L;i+}!*vcvq%2;ldt1ib;>vlS-S@vX3 zol#7bz0T%DoT8c8Hdi2SvD@Z!htgq_CTCABbd{0nn(1KDPHo>Jzh<@J=uu>M zRyn9*W<|W`XY=~7J9${hb5*(B!CQptvW!hZ(cK;wns1 z+(;pJYF4qs<1C|w#B;9QEk(A5kRah4~YpIl~yR%nNg zLz+@Ko?KjCBps>}npZuvAs4i?GWgbWor`ds@T*5?Eyopg%iH_ZEvatD2X)ZWFx_oD zG^;A;gLdd=7OpF1vqCn76+!dLhITs%|MJ*Oyk)T*{JRs+^fXt}1{EQ6MLlpLsPwH7 z)=7-L#8K@*b+ILmsxo_N;0?T14{22Da@*?y&r5989@LMc%4IJtlX^a5fhUK@UFUK4 z1c>qVDnnXndDRkh3Un0FuPoRe#kQKdYCG7t$ie%di@%qa1!PRM&E+m#Qi_Bb%ZJ2s z&Z0~b@4&xO3=qqKbfrcX<4_EwC(^4U>a|Y$Lh|F`ZWqh3)s;DF7@OUQsujijl@-{^9gA)Cw%e!L7urDo&N>%l95l@u zyept=M=hI{l_SnA7TC)uZ6Z*`VpDQQV0pVFiu_o?2HW?@I-aT3byOnSJ@PK)Pqp` z+8XpVmgTCcT8wzqe-wFW44xl5a=`14NU{=J6;BiCm)j6B6B(~U{_Kh>7ba2;g{#I^ zjhU5Mt0|zl)9m7zlN1%0R=E_l4!6SPsjG81-Qt*J#ZZ@PUt+IzptUjBx)kG;OUEhG zmfk#28bgf=#kg|Cf@N;I3loNHn;Y3(HgSQiY%!*7V6gD;nW!0OIYM$O?PZHyo*D!b zK^ns$C96aI75EE;WtF+Bme|}?wF?!wb~i*^)e^e`!p&Bz$VXCqszO2;Isg-;GuoW1 z1eiKkEM(^E(F>2zS+07E#c%h3`L@MyOwwde{} zEJdEv>7aU%yjaon!a@X5+|rz4(VbF+%?S{U;L;l6pDA1{!lmch z{K68rV3dlgrKJmK+;-U)mWuE2w?P+JR_f-;0Pym%0Mh{~EyGY(I+F$``n&Y&OzuJ- zPo9`ta^VI8*HIYTF8QZQZkP4xr|7Q(*Ui&kQYLqroz1sCJmS4~&izA**Cx4LNRcUC znfwvGw{5Qbt5u{wK#a%gGS&RAQ^J2x@^9sC!9V{m3Gsb!L+A?Ttu6YZp z?yI!bFLpW0=G8lDAt7D$wp#M#?o14#Xo$f3ZFS`fdSwdfU4*S8;7|1B7$cJa+z;V_ zFw&FhITH{Xhy0Yl%MHZAJK0l8@ID_f0p$tc5PkX!r4<^F!YV;)T?DO7c;6O6i*TaR z3XMm!HUjTd1g+C}?+&3wIMHZ@#-s35lp|1-h$N*6MK=|>HaPogTB0Mxch0nqc19AiLPlm+r zG$UOAy!=Yo%*Mt)F_KD=1RE{IiTtB5!kr(2n|T@BuJWEbk;9IM6&1EM#BT#^crZ9e zCd1$VU$j#miHBsbaV)VjZ+wN*4ypZ4Txq?{1$7jn{F8W6N}-Ojlzwgp#x;!3`{HTz zgBSZnOzFZJ63kjnsf*nkS1LY3542jO&}!Wk zY;k;`P`Xr5P(ys&JH+WBP+9V8OInT4Q%tI?6MH!I_yevhpYr zD@KY?-)*%aaiQnfUBSrMe-&5isU=OH{SeqFuA`P`_r};#?t3V)*M$7sEi_~ql_l~tXVeM?v|!40ncM`ch-veq7;xzsEJZFv*+WA?e4yV zW2d-sr6wqXqDT7K-)MGDgLO$ISg*XWYJt<{T$Teaaj{><&hS7tDuR;faKcJa7MveF z5rce{RAJUcx->)k_vBL~GzE%EONg(Odw4ISxW&sbU8pGmFK4-sc{@F^g1nj2@(R^y zA}=1Jp5n5D`d{d&tPZ;3P+4gXrs1fWWO}M|)HAjszM|UUa55ut-O{C#F!8nLi|wXn zEDmLs(sno}L0R`W?SZm~3Z0)z>jU3Z(S8lahDo5u`zk;y0pSzo^AOYT+p)79# z2+)OF(SsWB+zkJ^dl{P#zb-%~pa}ZD0-%I{7vjb&lChzHn*e6O48VNA62Kb3lYr*{ zzXR+A{1xyOAbzoojRdFx(*R`vvQNjbSQf|PSwGgFC9nZ(AiIXi*&v3y*08oWgbihq zvcM}>dM>q_D5hWfwaPoV7!_`A)TH7i7zGTI^V zn~}S7X?&-@KxRYnr`hX^i9_<1ib8pkrxtS?OgS>A=1!VcIwfyf>Fna!S<^Bz(I-OE ziHs+%g!PUTEl#cnbI;zWQRzoP5gnJzBD7XjVUI%v<-0R_PhdUbXHn?NpZh@8b*(F7tjAevbYT&o#^#z>Qw7sInUW?# zmonO1HMcEMja5LasH%XWVHRezkRlmlRkta}S_TbND9mmr%xzPk1zsgJwHOaEUG_2$ zSs^$bGRl~p_Io`@#a>?Ign_ZzzR>Op28IUbEk#rkXN6=!QdHA###oyR))dELyK}6< zQO_Q>IOx z10A0~e4lsP>_bBFdgYDE8OmA8dCCUmYNc2Cg!0$Q-z)P}cGWV~W2&cBFRS*c+Ellu zY0`4j=A<>J9Zvi2v`c9t)h2b8da!1j<_pb<^zYJ#Ym2mZYJaHRsa>RV=sddTbsy_0 z^-J~3^$q$}`ZfAT_3QNO^&9jX^_%ot^jr1Y^xO5v^cxME3|kCa4ciRc4Lb}w4Z94@ zhJA*EhQo$d!*N55QDaOq<(qzJsx_@Ntv9`B+GBd(^rb1rJi>g7Im`T!*=IgzIc#aQ z9JidboU*i8+ATiIX-k*otfkv>(ZZ~8)EDp-@O$<`FB!kTIwZ=GOOS~XUbT>;*O zldYVhELT;ks#SF=w`!?sxvD|6O0`DysA`>Ry=sGMqiU0Ci)yQCn`*mihia#4m#P^x za!_?x)v7wKI;lE^+G$t$R4=9g5&vKK=XpE`2{kiXqLAZ@9Rffcx=>xDE>X`>&r{D=m#Zt))#^I6TfJ1hT-~5vrCy`{T=SL2ty`*Fu4~Y((yh@w ziqfsuZP0DhZPIPgZPjhlZP)G4?L>K-b^CM&b%%AWx+?uJ!vw<}hPeiZVYT6BhTj+t z7(OtZF$^${F{T>}j5cGvvB~&b<2%MLjNciPOt+e{O><3krd6hAO}{f8Hhp6H)-=RC z-fT7hG~?|IUxv)G&w4Oeo>SJ(sZ2%uKbvOUV%%!nX54PvVccolWo$O?Gg?eJrYWX; z^9$x}=2y)hn?EyuVb*3$$(Wz9f;o)1OJ7sU4-u)J@XW=v=yY zb$R;P`bxbMeDQO=%rMfRHPjoPHrR~M7|$BJjTeo~6lY2>$xVW3iK)>v&U~vm*Ia78 z&-{dWhk2)Ym$})z&wSGSgA7eZWyUl3UM0;_*1$h7w?^gd={l2f z-qU=hVd;a@Q_|Jxlhc2gUY*{U{?qj5)89%zoc{OpGwCvIvUY+tQ#(Ujsa>vpMEe{m z8V%5y;FMVBTJN!zSzXp;)&}dt)|af?t-rIrY29l*1m1ktdV$(;9UqU-pW>ARmBW-H zl?vre%K9|62{uavk5SK5vsUO@cwT8*W6HARTUZ-oDR}R%8mv;J-ITV^@C>-%gN%=; z4!T6#2eoUp7xl5|sp6P-QuCo^lxQ=sD@+fWa1#NE24+p0l=gDkj*F)z8H=pzw>((wsJv3-nY1e2U)vnX7*KW{m)Nayl(Qegl({9)9fb86*ZPxD79@HMzwrY=S zPijwT+qCUkpZ2u2OM6z^t-Yvax;R~ePOcMlNxEc67KJWVH(obEr_^b5dYu_Ol&j0v z73zv~CAvAfdAj+!a$TjaT34t0SNrO5-AUakU7M~Q((1IXOLtb+t-GjW`Z#@pUalAP zN%~}cie8~l)sNRt&@1&CykIWo`V##d{XG4AeK|O}T3@GkUtu)Zq2H zgT|mYm<^eRTu9GCLy@7xFvl>@FyByas5Dd?>L5>-8kQRx466)l438St8P*#%7%o5l zoHU#=v>DnBKEr84m*K3T+i=mqjB&;UqueMMlZ?s66r;kJY8-EzU{qqP(i_dj<;Di% zD&rdCqsDcR)*Fl)A+6ht?M9#RG^DoJd(EayQ!d7}LQ|2c#5Bh=&$Q9B$+X3^)wB&V zuGMthbkcOn)Mjco`Ap-@6U<7p22$N@&O|R?WnN=`)VvPTeS>+Ud6T)#+>TN3G^G4l zbGP}T*_@G?k(-eZXEU~iL<0y##<&> zlopLeZ!udkExG7Fg_a^qiDiyuo@I+=E2Q6c%Z@9IttHku)_KPY9swJv9s(GsU zDjJQCruiU|2CHwtm^4{^m%2vXsD4WQYxN)1AFIEG-Z56A)!d=EN8{8y1bMVW^C!*6 znr}7Nrq4<*hdgzqFHL_e{ps}Iryoi`k^TW>(Ln8WS~Ys+RBf?#F?!>2^uhnqK81ew zn)Yq&$J%evvxe!^=snYQvvn(U59z!Z&wh%L>~|QiKh&Mm-J!47@7ABwe+Styz>sJd z4(_|raEn0&zOx!88KxO#Vboq^aDmT$1Ri@F+_ly4vf&SgJF|RN`WB!f#b@S+q)Qnp)lo?qWQ!{KCKg#%1 zMr+1r83QfXT5h!5YEfIPmP$*VWx3@+%NomLmi3mWEt~j=^{M4+Xg@L5(biY2AM-I@ z#%1If)OrzgJhHQE&@64rcBNb;sFGDFs$G0^JcxX?8jl-KM(`|<=gY9eficpH&SLaS zNRy`}rA7IvMsv;7_SkRw_3t4=T?pFDm0ya#a#?n5vqf z(tulX!6_x+l5*&4Zs=;Opr@^ejD&DoONew~=erVpi!D z!Y-SHJ$qO{MZ}hZZEefFeUY{{!8h1VXcAtO1S}?yXaHY!2~||YBq00$J~QX+ZZ?|` zYWutQ^Z#6Q_MG#~%rnnC^E}VIJu}Ju-UdM{2!akF5DHz7 zP5Y+1@Vv9^icKpS{Pj(@v8SZuThE^l+*eMx)tcmI3Bp`Wtgz#^>kCy_mk@JRyk?Xj z+^7+RG!ETdcdoG1^SWi)Ef}L0r6w-Tr?ovZGisYzkebJ7Rsj!3SIRv z>lDYz3qnO=xdgh(O$8cb`9}N%#&6Hp7#({IQl+j;nsT@Neo4JfC@7N8$k_?SjvkG5 z%F+cqd472EoeS_)R=T*s9GK;RCRBV~&Nh}WxCY`F82!K{R~R*H&!Vm!fi0;T}|Q`gy!gl!$8cL3P# zd*{SEpLE7PPw#tuH=xwcg$cmj8M_&vj=k-BI~SgP$M2g+F(nMVJwGuDZhw&U*{?=0Dav>l^u`1U!Fqa!z= zv*bMnBT{`26YPiY$+`OMj@%AMQ%q;pTSNs|vG<)*ommGu>N~UcbnI{Ub$tJ|cTTkL zeFxt!b?j^3|4#io``-DaeaRm$WPB#B%|Qc}l|q0T4uIc|(}rVNdO62fSky5~f3L{+z$7qt+>b(^sJKK@4t+##eu}sKxqWn%9kajLfF?I_0)pv~UK|+Xj zvG3a#0|9q-K+4i1hhtAt$E-6HRdTlaTt#Z0WF;^$>}S(8LVJn69bcn;NYQa^7k=9e zb?r%Y)#t2#D^ z?T(LPq=grxk~5O^tRtYQyhXk<(Oppx<6f{h#y#(%*RP)~?*5Lrdy@8iYLmU5Y^lAG ze($t?D6i}xG`V`&dR8tulX2J@`&?>$YmZ!zXwm3ybeylO+*~$*Jfd%B$~OeTcNjJM zdEz6Gq`yks63B~^io7RB6id}-+o3>N2KS@3BKPY(oq>SQ3c`1?O04}$&vEc><6l^! zK>KYvN4?JB*X6WdY5lbQqnBBt*L#4W-SgRR9T#;gzTwXMvaPC`@Hjj=yq(4y9%uOD zEFKx&6`dK4D-BAr%#6krXFFyYsjXk9a&9-DYr4ZE*dXUW>td)opE*NMZ|5^UJgbjY z-rIS!I|dTvhcWALQ=*V1`(>(P$*w_bR{e#D>!_yu^1MWgr2A2}g01Q=L`+9Dq2!1& zK3nlyXm4BlN8M1`&bDITWN@PM4r9Bgz5b}5^n1<|SGVs)p`B$$`5@WNo1uNg`P>WU zH+=V-U_4<7^#Z;-+sZoIO3iQF?aK{aixL*3m@+O_ESC=+e!_&3 zS4}DZPf*d>#_jon`KtNvoRcygHq$*Xu#1e);SY9Fqaj-l1Q&18oD`FMdy=8tbzQtSfDm!AJN4*eYDzhJYxyVphEceLS`aha{|Al;Vo0Qd)@or^|{4OkL)o(y6x&#?L zLCFRAZExQgareHAeH8|8U*gMwRj{V}R^22yd?SU!+o+I5}mqF+Z)Ke zU~NK2l2OuAnOII-<(x4EIRmaZ9)c7!Ja=Wb0fc}g(DF6V;+|PeT@K1Gb|-9}k6!Np zdOf%9X8;QM0Bf6;3i-YR-=u0MmdOp_HplJChDmYsjuF?aLGnO~dwHT@6zg(g?8gIW z0@s`zLxWhCA7ej3pV~u?eHz!C7(;_AGX_E1;1af*D&oXik0GXEyAjU{twGaZ&>~Zg zPR`eB_kK5dpQ}n^z<@6VbL`cGfnAw8;EF}iY&Ti|++8=ne0eeYgM)Jg8bRFXY1r_= zM8Wtu!bngz8euGgB}%vkuVs;@$uq3}}@t)8Jrxv0cSP0^rIhxW2Iq){>`XRyvgalM7 z4PkSXFaxkV5$;9!F~TzlDvu!V1x3Z>f*$>igD54@dGcyV*%Jn4n|CcQWTUjteq}!A zzEhA_>gA@!tbpLo*SPOb5nTGrs=e0U)cTAwkIoWz8NO2x82>yQgz09QtZ|gG`)YT7 zi>+_uwIWAJhs$w&S94*(R|r z*C2bJ+jT#<{KduH^pMX;3k}bG5!m?yi^cNADQ{nl+~@sxsiuY{_ER8wnI-7;exUPysMmfPe^IP!l3SdPl_*iH%`$pV>77rnz{hi6 z^p=%+x^$!JosLQ#nE)7rxE3Zl9jgFzWhFVEw&BI;u;Z6Zb|RUP;_@m;GE7IDY+R}- zmfs8)emf=vdPxE4LZCea(z)m9L!cIb%4tI7o@WR_+ZYt> zXm6r+WJQ-Xgwd0)3lWsB8%Pmg14sgF08M}mAPTT(Q~?~FELHpt6v>~szx!UXqgVU* zH83V}v*Wn9TSQZ)_IiD~m+4J&+4R56l?(cRvdZ#`<13BwT@t=4fZ~=-r}0~Vcx{rr_!eiMi_|%YTUr4v5v9G>(=4TBCUH0kL@}&N=H$fHn6Bo8}R^# zC=1z5mg5y}Iz5);eU|v4|PgHV9*J%sxZ9z?JrR3fZF*nsdH z!Y>ehi|{$Z49HF)!b*fK2n`5=W^#;H7aKQ1KXO#OVe}Z$ICk6>36uY6|Hgl1OcN$g zOuTXurrYl9_Z&Ui$FJNWUQ_i6>DQmcYc_sDD#uJ7v@N^K(KGe&Z@P=R93N=hx|i*P zTDk08t6X-jR4zN$DVLqAl*`UF%7ryVqR;F}w?9j7;xnFDsE`1Pxv0DBT&7+2^(>{! z&PCH@e^UA8lI*fSt$dS2QjMQs&l^3Z4I6Sz7{4HtAbcO;hX_`Ll?c@cZiHtLeunTX zgx@3l1>tpszaqSW@Hd1`g!d8tj_^6cmk6<7`$UAP2;W4w9^u~*Zbi5QVID#;LK%Xf zi6XM&ullF`oA4DeO}r}csw*c=PWsxEsV21pq4A5$L1I)?OoNS?8y@|(ZKYnYUN1kr z87#KFvetbC`sdFoMpI|8*6#USBNTKS#M+hz4pINDZJqC{gMpO)Ov&wyTkz|%d<_e* zuM*aE*2QA2gTzpBRN!}(4bA`9s3!J7?=pK6Yh@B$vG!?_T&+jz$(J33(0hD@cAtB# zlh78ppZ*b0&iDOC5?NXUFJXiAN}e=!1t{Ge2b`#g#bEcxmTRcJ3u8(49J^>hAYifP zJ;an#vsk|&)~+K%j3Jl2ah)L+Zzsh0?&=Fz0?7BRy^;xO_YGq0E=naIM7jd^GZZ`D z_Yh(k7VpP8clBxD#0uzQmL(BrNrYhg$;@iK_$K>}?B3)0tEtbITkI!#@S@$P-An&T z?k-?JIvJZ3z>pY zAiD`4gWCWvxSFQI`K{eWj+3JAngZZuqp507#lzcUDsD1+y7fwd8(eGS1Tea4Zv~cy z)17O_6T94obmx}Q#H36|kAB55e>LzyLTLV^rnknPYtUH-&ve9}k4&x_hTX$cPlgq9 z>wY4yt)ZUR#oN%iaTb;7s?iV~p_CrCVKX%|rL5XSt?jIu^(9Lg(?4aiJK;GQNhl>y zQ_8ioF0z!`{wbrD9$+bT{ZmFQ9XpDkGq!)qsHJOI%DDb1qm~}SQjX}KGHU5sq~wAz z+i`rVqe&ldlK@FfR>bQ1FNwJ25XkK@V$~w37#BNy+=Y*nG*??W>AU-x(?}^+{T}kR z6vlnQ1a92Vo2)sm8fHstXt*M-rcK6MYG|k;I$U^%g3x#dVo$@E4DaL1<-n{iL_GR% zV^!>Dz^cj2@IH3B`ySi*G;5|e=^g#>^ zv1zK@0>DpSZYg~VA`;25SHjZXmyf%)h@m@9e#@N530=AjA z2o;0oUK>kl?M%2CWi!T=EmeImP6MMz!ixdb zEj2XmUv}FqH8kFT^cE->O$Z>}G!Mw|K00l~Eb93lH3hXJ!@KNs_gJ@^;nNiOHUS?k zNZ%3Q@>}f@o%2z2w?UO(>Keq_jWsls6Kh|qsbJ5wHOugHZK-(_59t}+%WULd%%Io< zy%5b6arTdi0(&1BgG#Nq>oABU@>A;_JtM?5M=}1h2f7d`y5GdR+`1IKa^`%wo%Bp& zKVd`Ed}w7n>&fz4&lfmOjwq6TM%|om-FL%vAs+)avRw)2B~^W}y~g?{p~A`=9cq%BY__MrtQiy29#|~cn z=aI#8fKohVj8;4q6juD_ym-ku&Nr?H!iTTW8ol}b6Yn{bg zg9Fm=;o3NwGNKLWVLM?QwK0xL;Pg1hx(oG41zU0srK=j*3w-`%kPWj(rUs!Ag?Oo3dT@${J)ftq3HO3DJlvb71S=wj(jzlk(r$sLUJH8s=kKH%-=|6zQgQD zgv9(f8fDy++#5}rRa3IpdK;H!4)``qDw9Na!cXLlo7O@miOMa^xF|NpcG5U%3m>^& z$t$9o6NO7rY2i{6l@`^m1Zm*_MhjVwNLmOLXrV_`T9|DaiWV+8QE5?)Opq21V6+h4 zNLmOLXrV_`T9~03iWY8hqS6wwI7%CF0HcNQM$!^)g9fybYIgQOgaT}0B}%nD7!GHG>KG&o?lt&@=+k_b>=k<4SduQWc1tXED2@+B?@68Z zy!_g(>6obCK@)L`C3`R3OzEk;22V$ZS(-VP5)w1D`vy-+8lfbmDi4-ayHBFwk9Hp$ zdW)->dy2BZPb>1=(@AD?bnRaAA?@DK{1Ie~r}}{isuJoVr4vl4g9@9eCm^HO8%nD6 z^29`3e<*w|v|f8(7kIgB3p@+T$f_Sbs& zHraZjF|;QJ4?*mdVZ7yDPqW!jgaHvtO@IPp2%5-}qi4k0O}_{eCC}t5I-%s#S@KLu zPC^%oNT=jFK*5d>G>4!X_j(%bg`oKi2`sC7J#jA-u>=wB^~AfSVcUU^C`f2t8cMrD zfzmon2wJ5;X(cZN-Jn2ey)p#dtU#%4LeLi!D6M~npgR;OE$W1zI~6F+QA1FV0;Sdt zL7NpQ&3i-876nQZ*buZ$fzn7m1np9wBt9XiPl3{KKLkCaKuO3#&>jU!LKlMS7V}1; zm8%fcs6c7H8-gY&P?|G`pwkp6NpT1|LxIx9LI|3vKuOj^(0qc%xYyHqZU}mh0;T27 z5cClRN*WS^u27(~CK`e|2?_zEO^pzABZJzTXoEx9G!B^q(l2fd)~Gv&6|t%TSWgCE zsZij%7a)0pJYR?HLsb*kkS69Uo88z49z+!p6HONZPDK0gUG9F$h?r>F2=E~4h?sP0 z>Ii)VIEq4+=d)6S>Imlyl~c$-DoJ=qDZ{{z5Ey(7*GZ&~rj!6j(@KChC`iK965!1W zI9x9Qj;5FZ?@&^QYbL-u6>ykpmiJf8d|jxeqA4ekv?xfzwG-er1stxP07uhLfTJlW zz-JUB;Tj5Xj{*)?QGlcAD8Nyaw47Aby`B_wDS2L?Ihj8OQb$u$fTQUtz|j;H;Aol( za5Pl~IGU~k98FmPj;5^u53Q~T#M*pKkyx8%-s{ZKN;x_yN1uE|@vW==)T*ED=+&?I znB0rL)t@)nOY4c%!lXFfdj9gv&2$AP&}eJe4_eDMckh>hfe6>=wv6XQCK9_o$>mNjxMoSZWpV`EnI$e2D)jncFiA`UjYXeVbK+W{HE6*m(gsE z_35!`;##P8CQOlKN+vh@{_<~FCb=kF#BklA$ad1L#GOT+mCW*Bh z7*-p@dcqigy!WHK{00tlJPrrJgXNVEZZBN=x3Sb<)$Ny8(O18z`0M zgifqIg!1BBT~10b+bG4wy;xgJZbjz!BMdY4uChVNT?mgVf#@wbSMzlww^cl7aqKeT zO{n;HIA-zf6WZ@umq<7peaRS8Vh1%}u1O-mo4y-qVUK+TYAB66M*|l^aQ|v-bqVp! zuh6?ivx$&O>nM|2g7v>`zotT0!A<^L%{6$lRs1I+r{PVgctBp4f*1H-Hv0a6GF)vg zmImv7TH9wfc^9=d7m@8)Bk`TWNf76@HWSw9;(eX$=zz;Zf^4VKVwpT1^=(TOgu5FYeYc7=zXz%IzUPs4 znZe%oBA#N+bAUPe?h>u*g>^Qg83uh38}O?$tACRNkX|e5``>t-G!e?)Lx35zLBK z-^AiHC{UsT=i9xsL+aZVPX)Sf^UQKk32U&w2BEg4-_Ber+HND43gZ3U4KjOrefqoM zTQG@%T=pr-lbBCQ=&2;3R-vR3z@m7*b`VXdtWoiTsDrpHEsZeoHbeixf@!Aav5Xg`n&xj zI|G3Y&(9W&+Y$bZ@G3$B!hVD!2=5?#fN&@HTY#_x;eLb%5h@TqLfi^Gs}O#I@C}3; z5N<}8jqqE9pfANl`2S2ajGj1g%*21?KhY?Toj6Vm7I8(w_z6tE3%NwQ+91<#wj-%d zl-DUjMsn?H@I8xt`qH}>lVm?OUXf}DE=l!cv5;u%Se^q(=eE(_^I~|>MTobHiFdE= z@dlkl2xAsBe3AOF~caz z%}d3%$goUchNS_OJa^cX=$rEeuZ=0uxk%%?N%?Xvit$~ezHcRKKp1T&&p5Y|NuUo; zx9&!db1T^bXAPVJ@Jr?ZtJxI^;5HNyTs$?xc4CZk6OVwijH`y=DWYCUtErgfT1Oy{ zUuQcm>eo?9UXyZwfynjLt1 zsO-KQB*t)T!eI$%FP4L-X{D{C;nG&pGA{qpR+3{bW=KTh02L-3fuku&AzL0gP*_~v zfjNM(O2lbbeX`%9nXk^hO^?)tZ2l9EwWMc>URfwVgV=)k0JmUjJFdKk634jLkd&y? zT4TBXdwl9gf~U?1jparKN|cA7NeYx?D+HZRP|PW*ej#YO0;T#Y(DF>c-0P`^OUY$i zHY%>=a}~T~6+##mDHw=LA!s>4v9v%83PG1E7)WJ9P^W@{#6JYxtfVD|hoCPg(6oNg z9Smx3qTZMwKw-+PYvpW)=6X11=R z-avkJ{8w#V7LQQ}onOi`6w50Osm&P&S6m@4#J8?^zP7o*SNa)7&3g=*N}SA6kc6_6 ze_OQtMLKN@P9qo3&-YEaRDLV0_FD#wl&s}JKXJzHOa(#CI8{B&Yr zlZxPy*y7G=$#>_r6-W!;3XI>3SXVZt<;^%S<>-wQ*Hj@d#zPhJ;NLvmwkz4y2--mBzm{xBln zdjs?7BzFR)i~TdMkIZ;xm>G*AGj2>J2II>&5=fr>S*`_;xd&WAia-Zpt)iL5hJ+dg4@Q0#19TKvc-11^$OJ zVr0a))@(NkLKWh~s^7*zBhPEZ>R%(-c9U53T{xkNwd;S56j-8p0S~!u1AZM|oA_cg z3P?&_{}w^(pTlJVy7~DiFH@dSFdx*-@!k0`96hu3R}>lM=gW=mx_c5ZJ3ouTy*vjQ z*RYIr8!3C9PM(ktXnKJ>Hzj?3et~avw7feh?}C&h=~>F_hu3Pi(?Pef`kYwx8uE9KP(4Q1{0=GQPrxlx zMssBxJAiuTTXhV|;;KEXZjBX?=;Hbv_>~yYI^DJASNO7syVg^|P^>i+YtizO10(RB z+-#B9r}l_rMapy?xRfN;m_YTn>U>D-*iFBJxPCN13O%khRW-KW(ftDosaO$%< z;G2)EEMs0|#xJpyho(zJBTtu}rLtK=ZlhcphDv3^I&$QMWSVfgHv!^cOns9YOsxJM z)`a|ew5sF0R;+#zlfiRqegkriV%0BbW>~j=E55!}cN)J+i#vAH2OTChitFFdQlh#9 zl=#YMf-Xq82jLNfnPTm;gvxPZ#7?XpQHCW5

oB%e9AIHUO+Wv{S=l=K`7!vhGKC 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%0A<3!)KN}9phcTA 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 diff --git a/wonderswan/memory.cpp b/wonderswan/memory.cpp index 133792891c..9d4a6e9f91 100644 --- a/wonderswan/memory.cpp +++ b/wonderswan/memory.cpp @@ -183,6 +183,9 @@ namespace MDFN_IEN_WSWAN } case 0xb5: { + Lagged = false; + if (ButtonHook) + ButtonHook(); uint8 ret = (ButtonWhich << 4) | ButtonReadLatch; return(ret); } @@ -252,7 +255,7 @@ namespace MDFN_IEN_WSWAN case 0xB3: CommControl = V & 0xF0; break; case 0xb5: ButtonWhich = V >> 4; - Lagged = false; + // Lagged = false; // why was this being set here? ButtonReadLatch = 0; if(ButtonWhich & 0x4) /*buttons*/ diff --git a/wonderswan/memory.h b/wonderswan/memory.h index 3ccfcd5c2a..3140d8a718 100644 --- a/wonderswan/memory.h +++ b/wonderswan/memory.h @@ -51,6 +51,9 @@ private: bool language; +public: + void (*ButtonHook)(); + public: System *sys; templatevoid SyncState(NewState *ns); diff --git a/wonderswan/system.cpp b/wonderswan/system.cpp index 18af564154..01ad02322c 100644 --- a/wonderswan/system.cpp +++ b/wonderswan/system.cpp @@ -203,6 +203,8 @@ namespace MDFN_IEN_WSWAN return true; } + // this is more than just being defensive; these classes do + // in some cases rely on zero filled constuct state void *System::operator new(std::size_t size) { void *p = ::operator new(size); @@ -404,4 +406,16 @@ namespace MDFN_IEN_WSWAN { s->SaveRamClearHacky(*settings); } + + EXPORT void bizswan_setmemorycallbacks(System *s, void (*rcb)(uint32), void (*ecb)(uint32), void (*wcb)(uint32)) + { + s->cpu.ReadHook = rcb; + s->cpu.WriteHook = wcb; + s->cpu.ExecHook = ecb; + } + + EXPORT void bizswan_setbuttoncallback(System *s, void (*bcb)()) + { + s->memory.ButtonHook = bcb; + } } diff --git a/wonderswan/v30mz-private.h b/wonderswan/v30mz-private.h index 261b7b0c98..ca123ef107 100644 --- a/wonderswan/v30mz-private.h +++ b/wonderswan/v30mz-private.h @@ -1,9 +1,9 @@ -#define cpu_readop sys->memory.Read20 +//#define cpu_readop sys->memory.Read20 //cpu_readmem20 -#define cpu_readop_arg sys->memory.Read20 +//#define cpu_readop_arg sys->memory.Read20 //cpu_readmem20 -#define cpu_readmem20 sys->memory.Read20 -#define cpu_writemem20 sys->memory.Write20 +//#define cpu_readmem20 sys->memory.Read20 +//#define cpu_writemem20 sys->memory.Write20 #define cpu_readport sys->memory.readport #define cpu_writeport sys->memory.writeport diff --git a/wonderswan/v30mz.cpp b/wonderswan/v30mz.cpp index 18e6f16398..76cfe7601a 100644 --- a/wonderswan/v30mz.cpp +++ b/wonderswan/v30mz.cpp @@ -1027,6 +1027,33 @@ namespace MDFN_IEN_WSWAN } + uint8 V30MZ::cpu_readop(uint32 addr) + { + if (ExecHook) + ExecHook(addr); + return sys->memory.Read20(addr); + } + uint8 V30MZ::cpu_readop_arg(uint32 addr) + { + // only forward the first opcode byte to callback + return sys->memory.Read20(addr); + } + uint8 V30MZ::cpu_readmem20(uint32 addr) + { + if (ReadHook) + ReadHook(addr); + return sys->memory.Read20(addr); + } + void V30MZ::cpu_writemem20(uint32 addr, uint8 val) + { + sys->memory.Write20(addr, val); + if (WriteHook) + WriteHook(addr); + } + + + + SYNCFUNC(V30MZ) { NSS(old_CS); diff --git a/wonderswan/v30mz.h b/wonderswan/v30mz.h index 7ef1a5dbbc..1d5bd897f7 100644 --- a/wonderswan/v30mz.h +++ b/wonderswan/v30mz.h @@ -80,8 +80,6 @@ private: } RM; } Mod_RM; -private: - private: void nec_interrupt(unsigned int_num); bool CheckInHLT(); @@ -139,6 +137,18 @@ private: typedef unsigned(V30MZ::*EAFPtr)(); EAFPtr GetEA[192]; + // memory callback system plumbing +public: + void (*ReadHook)(uint32 addr); + void (*WriteHook)(uint32 addr); + void (*ExecHook)(uint32 addr); +private: + uint8 cpu_readop(uint32 addr); + uint8 cpu_readop_arg(uint32 addr); + uint8 cpu_readmem20(uint32 addr); + void cpu_writemem20(uint32 addr, uint8 val); + + public: System *sys; templatevoid SyncState(NewState *ns);