From a695dd68447624731022be784cde2bba9de906c7 Mon Sep 17 00:00:00 2001 From: Putta Khunchalee Date: Tue, 10 Dec 2024 03:00:55 +0700 Subject: [PATCH] Replaces VmmHandler with EventLoopProxy --- Cargo.lock | 1 + gui/CMakeLists.txt | 3 +- gui/Cargo.toml | 1 + gui/main.cpp | 2 - gui/resources.qrc | 6 -- gui/resources/obliteration-icon.png | Bin 123727 -> 0 bytes gui/src/hv/mod.rs | 2 +- gui/src/main.rs | 88 +++++++++++----------------- gui/src/panic/mod.rs | 10 ++-- gui/src/vmm/cpu/aarch64.rs | 7 +-- gui/src/vmm/cpu/mod.rs | 73 ++++++++++++----------- gui/src/vmm/cpu/x86_64.rs | 7 +-- gui/src/vmm/debug/mod.rs | 24 +++----- gui/src/vmm/hw/console/context.rs | 22 ++++--- gui/src/vmm/hw/console/mod.rs | 9 +-- gui/src/vmm/hw/mod.rs | 11 ++-- gui/src/vmm/hw/vmm/context.rs | 26 +++++--- gui/src/vmm/hw/vmm/mod.rs | 9 +-- gui/src/vmm/mod.rs | 64 ++++++++++++-------- src/obconf/src/env/vm.rs | 2 +- 20 files changed, 183 insertions(+), 184 deletions(-) delete mode 100644 gui/resources.qrc delete mode 100644 gui/resources/obliteration-icon.png diff --git a/Cargo.lock b/Cargo.lock index 20ec92d0c..eb90a635b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1594,6 +1594,7 @@ dependencies = [ "thiserror 2.0.3", "uuid", "windows-sys 0.59.0", + "winit", "winres", "x86-64", "xdg", diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 4e20e16e3..25b893fb4 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -5,8 +5,7 @@ find_package(Threads REQUIRED) # Setup GUI. add_executable(obliteration WIN32 MACOSX_BUNDLE main.cpp - main_window.cpp - resources.qrc) + main_window.cpp) set_target_properties(obliteration PROPERTIES AUTOMOC ON AUTORCC ON) diff --git a/gui/Cargo.toml b/gui/Cargo.toml index 45d1a0572..3a5ee9dc0 100644 --- a/gui/Cargo.toml +++ b/gui/Cargo.toml @@ -24,6 +24,7 @@ redb = "2.2.0" serde = { version = "1.0.209", features = ["derive"] } thiserror = "2.0.3" uuid = { version = "1.11.0", features = ["serde", "v4"] } +winit = "0.30.5" [dependencies.obfw] git = "https://github.com/obhq/firmware-dumper.git" diff --git a/gui/main.cpp b/gui/main.cpp index 2f4d2ef30..44d1821ff 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -25,8 +25,6 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); - QGuiApplication::setWindowIcon(QIcon(":/resources/obliteration-icon.png")); - // Setup main window. MainWindow win; diff --git a/gui/resources.qrc b/gui/resources.qrc deleted file mode 100644 index fc410c5d5..000000000 --- a/gui/resources.qrc +++ /dev/null @@ -1,6 +0,0 @@ - - - - resources/obliteration-icon.png - - diff --git a/gui/resources/obliteration-icon.png b/gui/resources/obliteration-icon.png deleted file mode 100644 index 2af4030af61949186ca0cd6cfdd0e407af0d5a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123727 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ÿ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

xh!iEPN5n@|i zxdR?&6kZybedpvQWAwH1bla7v!sRH-o;x?*E>OCTa?A$QCIp1{9;u*;)g}tl;J@NH zu_|O`RG`%!eAy+CUwCSw2c*!n{2f?EWZ8mm{*$6{HR?yV{{EMhYy~eLyN>?$<$@kO zwylLtrk*g%p1b$8TxW`NZONkFOqYY=TBYY{62Cn2vA~Sp@#MGV2gWr;f?!-!^f_)z zp7eoKrG&&wM8@dx_TX}bSe-Z#Gru$UV1YR_PVu6Jn2lP{8{=WQAB5ph!uSVCR?xI+)NY2;ac^BAwy8z zb@}bOZ+kHW<5PoFw*RWodTNV{4H&?KW(zHdl4?;w&{|V{91}NoDNB}kSk(Ia;yaDt zc}-?aa1ZI&4dMIf5zQMn^UvVmsKn!kRzv?#B*CeLA{Zf2L#=1btwQ2g!2RW+j$*gT z^Dl&ILGV}-Fd|6ECKB+@=Nf*O3f`_RKZ&#;T#=;RUc>w!s~=asVZK~ZYMAVpo-s0E0L31!Rx? zUOcO}e0!8!i{f%gJu4V$x99X)61O_= z%Ex>gJzSx2@iM1vTY|osiiePJ^_9ES^^#UTKZ_^6PlqI{aq0DjI5Glv*lHLFwR2|$T@)VwzUqUor7k#siR9^1@?P@MVr9TOOe-4S`M=4-0P3x|MMW&1#7r)W zz9W2Tw!jb77iY|spic_jDixH;9>ux%DgK!LUW=1Sn6 zRtj2r(L@>G7LzZz^k%U9BJpgxFroQ41@jl5W2E(lildOaU5S{9mINnT zy8B;YTnz>+P}DitY1MA$f&AGnvDvnO=Vt(*5NXv;E<=*gITiU-=*pvdx5HsAK=orR z%sEx2;U4il0Zs1d8?#PkpkQLLrkj8S{C6WDr6%m%T;(Da7}YP?fyRRMP2?u>V8?{G zIUoHxj!|Oac0tG5m%%B*C4($wBDjg-AN&MWf|0T?c{Pm}p|GMZ{--~PK)n0gj~l=3 zEn?Bgz4J&I-(swp2dlgZKV{IICKO8k#h!G_-rHJFlZCRD&RUH2@;AsRDh2IRnvvI{ zh!UekN_8G2Y@MVsss40<7U8JtjPL47a+D+gZ7P%I55CBY5{3b81SH|znfVjX{}aZb z>NAIj;i@fnYFV+ll+L@nzB<2BzGjL%N9~E^VvmG^YJ=!*4bnvHs@?k9F;QMhz2R1m z*2{>QI)bv+-9*)P*XEhpLoijysAjr}vA&jVFQ?gvyNYm6J@wpk)$XgB8#2dU3UEZblWcE)6_Uyy(o71y zc#0J1WgGT98C13S_)q-Avz8BmR1F0BN!-Sk=gIu3L;WK{Auj@mkiMNNkOm0Cg3%;c zK>!XOU?q`%LDza+^o#Jf&`rXp{;X?1bf9@$TKeydA?!~W3nEhaw>@DGb??V!)K*z< zM%f5aV*zMK%RNQe!PkRiPq1~bga!x-wI>wHH|6y9}3<`kryq} z=^0E&#+;to5(btZcr2xS`#xfr+ac|vfF)82V&56g=z1Ag(&>zehmh&=mVZ^fIjv9h zGn$p`>ygN7WZLpu5pvHgZCw;=awvE#{9h)u76UZG>EfS> zSA)oMro=UxP@-F%{JjGidDMGqJ%stI7)QGLBDz*+!p-W>gI@( z22@z}^$9=?XLUP8=cmzFaC1em5W($ACJWlSP~FjXC5-LnCjmAFU!#47H@fSe_Q`TG zcB9cv8WoiN&wfsq2mV&xy5q7Oc^>>MSe&05W|cXoE|LELG}EPyalQDPO5cTdBW_sXiO|DGKvN;Y%q@)k2^$nIp}6piy3LxgLN528;U!4b$3SjJox@WGhD>mdDWWQH~;AHVbS zNHmIQvuK`x7q6?DU<;fUb_YQ*$oh2*jgjMb)W{qtUbo8`}iG` z&`m@;!|D@c9~to-C^7+l?_g#wuWEYj1w}g}>C;uCeqj?8Y|{>-W0=6%M%7jVGd5GRq$57h$6iR7x9sxI z(B7T$2f02xf6;P%QfMfi#VZS_Y;fF$d@GUodh- za?s)A2vw5(RS#0UM+!EuJ~Ye(pGB+hxIU9%EoZ*OyOFA5)#bRrq9go&(E&im1dT9e z+T+&qGY52dL`KVFt=#KVW>71<=flJP*eYn zB-eQZ3b?~Z-*c}EV*U#m7nQZJI{Sk}k&^S^dY69yP8!R z6{E1%cNg0i96F7eeqFdGG@~mKUwW=|YP5^|Vopuy`F&p{=IDiPA)!9XqSc+mJ_Eo# zyNSS|PMPMu@nK$ALfxqmrp*g>^`pbkZotT6T+GzIxNYdgTU#ht+9PlTe#?ug->xy? zl&MQUD(aEh(Uu{m;lDhd2Lp$hw8~+I3AipAVIbVWXdJZGI$nMiTT7s?)UI>l&u>ayGLGiT~^^ zwVuP{3KS=yj7t_mtfff!5M%pBWmjrFjszssRq0Sk2k*jiV)a_ULn7;#;LKh}c2dOK zQQ-OhRGE57>m{9kfb3}QR$*8uC9%#;f4xAvxQ~;#hpJwLWI)h^-UgL>CSR#>XG(gw zMb!+NjY;qQ8cn$P3lm7)jtG0?BL!J(8tia?%R0x#XrJYKJL5ZZt{)_lUeo;_%dew9NsVy(bZ(#5KAT>=|2UU-Z0O!RsUybWFOnby))x~f%f3ttJ zlfmc^*F;q+j9dWzZ85wss}=0&O7)<7#^Hv>r~93c9GroA`LCaETO*1dhOE{@h9%K| zb*YL|mIc2a{2Du7HbsP@J3~t~*%1R>6KA6Us~vdfHwLrIbv9m`fA(0|U zC%d$Y*e3qEdUC?JCsT$JEeaU#hAv4?-|cKoEmN)XPd~rH!KnUPeDxWFV8st|1mB7s z=~4G&$dxYMc)PbELXFMx9O?~WJp7Wq=Ro+E&!43k&8}14{Xyl*ItX7)OUUsa%r-y|518lKGaxKbu1AXtu4bygUz#@0=5_5wR+-%&FmTe{*6DiBmHoc)-?-pP z8bKQHeeZ3!1mt(JONU9+@}K4k5qDE#8pa?>CS?Ma&80)bGw&3g69iI5-xKdI_4Z0Q zsbhYSS!ZHIfeRmL8$L5wD|t<$%1Y{xn*HBc?uJl|D3q#pN1Y^E;r*)b_kZD2d&^+w zizmBq6|GPa|JRO8)+#|lPTnE8Z|1css+!qJr^Y_f*b=#X&(EQglRA6#!P7L3>5Kzt zNHD$xeS-wBQpmH0PaiUTmPavOl^;kYOFKMnY1pQfw~gM7#5VDg#KPLyb^-n0D2G0}Mg2iUvojG1xiEw4DwljJcmd**t$j*=7#^ zH7(eP=Q2GFfAW+fUk8Cs@k>ik%_vcaMaJR0UIn?48R0KnDF}kzD9dg z(|Uj>KXKr|ixKo$%faZKgE$?FV^BC&<}Gd1s`9UNOQ~*|9DRZ1rmeso<9FP!^NlDx z0J0&5MtP?^cJ}k&R6VjMX(gq~#oH)FI{NT2`u;VDNj;e?^@D1yTKfLM2PXGmB2=>! z_QCMVijIrqoFR*UkJ)e#h$r+QD>_LYiED=yV+o#IHN@Mx+o@1fS~sxu+p8e$2X8t* z0FGtsIIXYjv2GgQk|@)f$Px~Fc6R4v_15q&B9@O(|7iE8$_On1OQd&8#@FK(F)lnG zJ#=)D4>#zs-X_KFvg+_eb%$LX{5l~a(`!u<@DOE2IPwuIQzIH;L_R|ho|!?WK3TQu z=R$%Ot3xNeFgVRa}3UsC9W>~Ntu`*v+q2Aoi-jn~Vty6dX@h2I&rFtuC<4gc8{ znRGl=V>=rsi=6gD_Wi&9)PhcP-+x5XGhc!$ zS|}4=ARJU&xH)h+B1AVWh)Vwg2u5}ZcbDM?bD%p-pI<*$zA6UaFW(M*PI~xrpH@5V zZbFnq`v%2sep~Zfs*n~0w-2WzN3v1`wP=e&9{7Ddp1;bsl2rc13e_!B#<9wFomA)t z#OLE3`p_+TJem!skH8LX+1T^}g_SnbEMe zD#>-9%YW{+Z}fZ)-~Kyu(G2~e7>0HZlmsXEx)$#0Kdx*iI3-!RgAkatqof0Uz7ov* zxfl6c5E3xLvVHuGnHqaq$I?{}lpT2u2)nQOkMD_k@U7}N zVkLfb?-*#VW%t23bE!c8?Dc`)0wpOO^_&s7Qh=-H)S!=(HdLW9dz|STcu}x=@Cu4~ z$LwFCZ}HX5601W6Pvc5!KP|3d#E^kIxq8=o+ax;IJ zfwEBG>_)hJj=o>p{wBhOT&bbaBgmmu19x<0sPZyf!|#jYR}&CU5AR2TO|mP^BR;@G z%A=B8N89ZsB3n5LG{|r~ysbP8zCVCx(0(iJG5mlCmp@F#K@fQvyer5HF5O`J$4>et&e>xh+^^hTYk=VRc7asaS;fl6JGrmnh5|B**Z zC8<|#5VFi|En~k0m(mG5D;gx#jSaiL{_V(jL~~K4X*Sz|b)*}1`kRq&Nhbe(^w;@- zZ2fT^t8}Q|4l(-D<_(<{ZSQ<&03+=IG$6{gL2%>v{F^8Kmp$n2;JTaLdXt?KMqot` zzpAS+O={}*32!mt^|s8uUC$s!V}Rl}c*bj9uhx!Nw%4x@%Be*S0T*`wpoBr!-V&QX zOK>j4t|`sQrKA!Si_dZhdPTdE=VH2W?Q;HZ2w3XkT7t}2s&MHIZ%Pd2g+*01)?Be| zo{sbjc1~bvHc0gwXl|ADwQ37D-ZQ6ad5=|kOHJ5co?%Y1Q{yF}%-p-7wM`_>>aG9e zaAe>ngr8@AhDOnwV+LnMbW#VQC;s zUuF98mvQE4dEUws{UL#rKr+7o+R}>9>uDCk<+IC%mpr_6DicsK=uGP4-8Yl*w6ody zGhr$ODiO+)TQ_Dld&HM}D4W^zNleH-qtSAIOr-0B>zDdRcNT=4Tl7t1?0vUsfcFuK0xv=VzrK4_SRDIJw*z_dckwOc((KkC-j0t2N;6P{bgx4ZCdd9nTpK3lApV zMf>|UPDWuR;J^z>DB{I?Ot2lUl3o~KBav@~$GV!Y)0CBNS@_~~c`C|rXT}@-ddVHRvL8>cQFQGf*IuQ5n>T-dtFnnz5OCdo&UENz|-WB3Fv9P zjw-L;R9TOUqFX40K8xasdebfKIwF@a*VOdnms9dpJ`7*#Jvzvz%tyxE+g{?RlqPLN*(2s`TIBj0z?k2@e9qLRhShEHs5L&OVu*h;E;7;gQt@=u)Re>jWY zcp9F5oB^D5jFV_vWR~mnEzv-b{}vIX#jliyHMJR53S1yO;dNDc97-AE6Au~8x2Adh zHaXMl58c1Die>!rb&(2Tu%Cl!2+46!zE94>QmwYodDY_$6LlA1I{$N^+ED*ta`yNx z7^Dh!DkVT&aX(fre=FtKXPJL?OUs~JZ9B{BE|y`kD%N=u9>|fhd})GjQW37-?Av@z zUq7gA!eGyH%zg%+6ggSxQqzVAmNFvu_|0VoY<$yFOYELckva`B#EEx#U3B=Xh@Csi zfLxN^Z(HvF;{Ul&dZ7Ke7sr!PnQqzjc7dOL5}elQDlS5WO8t%0=#TLKL(^CIMcGAL zKQnX>(%m85jSNV4cS?7OGz^VW(jeU;-Q5Z*UD72j-OXIyd%y2bIM44nYwf+y+G{cC zB70Py{}=&{m~cxuh%@NFzpv72Ap74MG=C~aZZj&R{#lq6eUBggl#WEUja_TtueZ#5 zPmGPFT&YLYx7R0QR*AZdE1Ut=vD-FxP`8bfHB2)p*Ir!i8si5-0)%xi*UrrM*9uLP z5;gXPQ^j(CwZ$YMDW}0z zR#8zHjnd9h2tz46_~)1J(?RJ&9ZI`_iU?NtDVZdAv6|&OZE^+g-apR#_pj!gzZBT_ z#7nYl_v-S}KxgfwBZx|@#bU*9R^^TlF=tGyjOgjC^`T2WwB+^Zb56YNhDd4^vMM4C zbF$@oUf-0o%+Hsb`0#GU98nGDz`iP{m|tG0OKhp;{DKvkbH`jo?T96I~0&_odzL?Z6Px`(}ACh#7ML)h3|Qcn1py+s*AF@ z6YKs2)%t!;!KEEWjg0ojyR2G+{IP(CZr2~IKlin*VBrAMf2vV;&jo`7%|Ers-8&?9 z@Oy@y?w8jc0D;&6OPzRBr!wS%^lF#JM-|Q08ikre_Q$ap(Yu9%iRF`b0LYbPNDmG8 zzzXYlWaXl1s$ShXKrPXiQj6tQHqC zas1jF2@5^)tbN%Gdye-2F9vR-_+BI%{~4*S<{8QfcGK|CxtiMOU)&a!^8PaH6q z2&!U>=1#HU_cvtl|5KrCSO+`3Qm-)f_GUc0DyMx&=_fI8tp7&e$I z-%WZ;?t#z(snI}P`ACu&$H)t@``y8YFCRgmlPd5!tJKn7uivxhwA7}xYvz>d`OJ4m z-`VUJ{+};GD!c7!kuE%pVipM;b8Eqdy=N{|8ENrT-D%JP>CYaaMrQ66FWwVFXR+9_@KLltEPd9^i$u2Du;d4>_amMK)#{_x4N!mPYCqMYlP7K z@T;5~8QXYQ9Rpl5K1m!UKTkwc9CL7F&invZx#S_0Y1uq!411mA0NRoKG#Q4XnEXKm zCuH2uJ}0y!^QwK3v&C^H2^d}27=Jx6AaqLNI6h$r4b{= zsF(Fd3KNnQSgDj(5~9c&y>ITLLUGQ)ZZ<$#Cr8<10GNgPvU#@>Lf-{2X|8=~t4o=f zh-lg}*!Y?-@ELNd;FlP)6=lHZ%D26SCq0Ejheu^n64SlsI}{x9l=x(wdJ?}Z*Z_f z!d`jnre=jr@L$vA@(J4pF)OH>DGg0jQ^Kpo6nAN<~yb&BFz8Ut(@^YQR+OJEcjdq(g z04-f4JbJrb>FHC*T-BQLz$Qr?}8;tW8B6;XEm%X`;ct>si|ZK8uz8!k?M$zo~KYOG$0mS^c88V`R(;6LDJle+K%<03l*zM`JSr@O4 zGzqx z;&%&X{y9VOH1jR+9QyPN1;gw5J~r^ijxEpDkHCi}+~90xGwSi60~Ty(bexl)ms4O5}s$VoS*Vc&kBwsEWBmRVZV(?FNcgvRzTIXZ_$44lWWN& zXRDpz)jpEq8k4EXJlhG&Rsg7nZO9c3K+lAXlbq}NWYggp z&Ent3E`$Z)dryZjvTGC8WA2QF?XoGcq+qtsQa|F%h2A=CJ10B0ASdoWQbT5nmMLj+ zwuI<_`C=rH2MW*|3Vpa;7B&|yC~$&;=`yQfb`LofUq9cG^_?Rm|J|&L+}QDy2Xm`)Pm`q`s%J-SvS8JlM!C`?fG0fel8Yg zI~wfWbjF^<%9metwOHPxuDrf!^W-Y>y$ljsZ9PImuO{=l}AD8BuDG@q}-8D+p$B=qmXb zQKz=D-J%TNwPw2Qo?Gx)HsUukj)6+64@w4)pItVERiTb#6iJKdxURCQ>zd8@b8t5x( zvfOCvk+XNFuhvJJo_!UQ{Px&|?}Y8;>;fP$?-YOj{S|B}ICSMQjw(=A`(*R-ZKKSn z#{i$5?*4g37^b{nW?$6okrT(WW=;A*-cZHba5RPw??Lv;2S>pVY>8waf8vY;-f!m-W~| zneXLSM^OQGu^-l=dQ_)97sPjd-t0Ek^h84hk%|ul@7-My`owAWEh)9O|MV5LT*>2+ za|!&D33w_6h(=UbU;IGBzeHN1KZX-Q1smO=^ zG;dTtI2(z>QN9NL-m>tyws|t3pH3WpyNwTN!gE|5a^yOe19sj~=j{3j32dlk_M2$b zgaSkYpeV-6r6m?Tl01FvNU?izZ5HyKNlUc#C$U@-eE}kAp2S&;YxHPr*9yZumc1gi z_|QoXP`a#DL#O)8%TVnWYxK0gz9qd1hCGj$7&xOP`>iH)JY6%DVsjN?nVtEpy`|Y76y#eBZQd;< z-=tck(xyM{(Yp-fsJg2l)a~+qNAnWDJy?16D$Q{#0t%GzFspW#O+Nlo1!me101jB0 zn`>MRl4L#SZ@Sh!Ceyj3mcvgdm)}46kYawLS`-18l*L=C2*W~UXiaRFN_>eX;AY7VrC5e=xhDfpTo&lXJ|eM(B2gV=X^Yn=>Q{Iv(;*jKYna4!(vjf^8 z$zlN1nr^G$`j&Dv_^ncR5x%AM5&-}#O%FK`^`;Gft#1-INPYdYOiBh_(!-hSc|WXJ zo-5k}wLbSWq4|9k`dM+x5MA#($Y(@(wZWigT5yg*cugHV&%zf6^$~vjc0dBqg@cED zxDO_q-!HzCx+Ox(FBX!m9M_&4H_dB{_6}ZIl)Y$t1wf82StJ0FXOm3HSymgbGn_By zDx#i;Omkwz5dnoAkm$+Rsa=-dj^P!Qu&>|q0gO#dPmx;{HH(2OGYuuZyZ&m+PhnJ4 z-zJ|~Hs_7$AZ^0Y@uI!^*op+l`O2A7?{bTBKkgE*+ep&7WYSBINlTfaC@YS`Rd^p2 z%Qw=UUz%8K)C@iUY$+sZ8R@|6wlLk%x=8Etx1;D#bZQmivTzB{vY#wbuu;3bPaGet zre~Z9(dn^Bar#qaXmJqr8~2QKQnZ4xP@klJG^goy1zN}<-tF?TI}MAi(L$a(fqZuZ zdWyRqU<IOPJxDdG8a~gj;6xj&xkqG>G?&);()D_D3X6XYZ6+#GpyGf+a<%pqluII=v80I&%TL-$< zjSXU`b(TMnUz9O&k^XkPlcJkKRitJF1Q;Vsd?e_#j$|yl&NOMAFAqA}{*Y{DKe?~F z9ogOziD|E5N&p602F^`yA5-J1^3_F->%a6Q$%J@v&a$_R&}0*7i`92aCi)mLsg3vhL~9*PHO1}x5k>-x8Sl$*qLbH`^7e69KaCNcy-i&VI~1G0Iz4MW;U9P~ z-VIP3eS2MM#z0|2Kx`aa3*C#bB5o=BxWzr`HKJuo-$-WBEarxy4-xRNVio2Zdl+I1 zsba~Y{dy7~04EL+V_ps?5jc`Ch$3VKS?8F??to6;rS*pB=O;u*3(TipCo5+gF=&X_ z*r{MlP(eO9E zBPj&aRZm)5CONnCkjEo(ki3&2LPc=c_P47lYBruX={j9q7FPoLrl6jhg&oo*@z^`c z3N%581~$d80FKBoKW|(rcN5k4>(Afew$7ISgc*S7B?(MfM!x_jedQwX0bvZ-{yjh~ zilgf#%Inlc=yI4jC(wXhUWR!}s`rlWP_T!&zH}LEBG4vuue;+#8*>2M$WcAl;`Zff z{~L&YYM%=5H2i}NhEcbnWFpbrtCd=5uNU>#?|d-H|H6UxZ8J(5<<;U}`yZbP(Z|wI z@4xt9|5GJh-6YK1CKrT4F>IQ{x>x0S{ZoN_r;diFBPrdh(0>#Y!`If~SL3<_oUv7a zK#1x~+PohF(qf4vN5c<34a4#yZ)XP4OiW*!Qy+NK>3Gk;5a;q5dMNFDPYZi@kTnlr$rw{>!(!@w;yiK5k)bfXHNKf zs!T(D(dnbMM@by@@Rm17l;e%&wzMrR2Wn#b@k5zNZfq4R?Vqu;d4$vD$-_5=Xzvl} z4y3G)1U?)1qGwBqWa$0D?NW;E-a(@D8_i$F;~FseYLk~ z`fo0fVHHO0kgmFC`pSxWpD_v`*#FOt4_D8ieZ+;f(g{J*RqGU9Y^By^!*c7432;OO zju%04II{Z#VhDxxi9O5G=<_BI13wS(au#h;g;RX!^~}_?zsx%fThgNB#YJ<@D?t;J zW}9#izRY3@iAE43JK`j!m>tpovI%G*o}e{o_iFo^KZ;R}wWa@bU`uJDzhgJ_6;Mj8 z|8S~*n>81{%o2Km(DNz-;4(V($j@!E4 zOnb6An$+ihE>N*69KJ$udmLY#!z_&vt4T$8meRMFxIU1qBg;XNTHNJZ?*l6?Em;)! z>gQQjaP7wSxnF2rJDHc}JzZ3nKU8Wjg3S>iXZ!(9&P8{F!WaPbmX39rzsT)EB$Z9l zC`T=CX*jTp;7zX2zI5$Vs6{X(>Tk2Y9lBDVnaNUfCh07YC(2Z7fEUeh(yIDTk2kMK zzxPuGhn2YDMRti5FS=ueYiv2|K}a3=gT8-)`ENiW8oGVBq-wC&doSUxu2~C6sEo%` z0PHvV){OAZ5FzkMbs@l8>+4yRVY$WXL&Pu5y$0r7i_aHD65^}fzZU!c_w(34ik zX}h&y4|o<2kXMdlVX-rO=D9mS7)*6gGQiRX9ktzvkB|87?cz*7Sp2?3vA7#)x0zt$ z>DHYQ+amWzkZl{tyKuwgiv!7&}+H0v&#DsPI-Hw`mts@j=4f9a!8$KNU0(^t#SQ#5ci zHgq2HB-+BCTe7&AxESJ?)s6#A?`raNKj?uhT|8neLKwYPLF5W=Ep#KCg_ya1TYt7i zavicl4PM4&PVN>(=i9m*t{P+vjAhCovZb79?TU`53Zq{us<4jR0YmKHN)Nu`GV=sw zSO<6D#Yt%e-)CgsfNfuSO0?5Xg!Xl0qdd+i9rWQSacjSLP&|t`S2n-8-(BHRRcJs< z+Oi#;uNv||RLvbXSsbkQc=+bOd-$?fUYAFO-222 zmd$*{H=#j8g|$qRsr*51j)4b#5zKb=0Hr{odv?|}BvMFz(dUP9J&e<@i{IO93RS6p z(CXQo-EHA38_)9u*0Uu~=6$o_X(av99$)06>VeN3AwHIW6=5GZfDq2jC=A)hm+2wZ zmG&2n3cA|Z`kd;hNV_%;jrni!0!wN8W4!oTPceqvmk&dmGz_&fe4F3X=d7RpE?81a zs+&w&$Ks;0!9v>fYh!(Lz(^mF{x(w|fT>r2QxMGfH#mQdwH=Q#MPoVA^!;nxXW}r} z+=*xXboaj2X5WvJNV8^fl@MWP(<4Ovr$uXSLOlrqiHk7AH*s~gK7#>l>B@7S6V=^s?-ZZT3ZGQ=GmD*|`3!9Wf9c~5k|@OFB9 zQ!xIZ^Pgd?6Lbevj6&t_!fK8q%)#p!OaUIWtxqL%Zzx|CagHl@&mpljf0vn1tpwc9 zZQfaYJ^y+6rq`ZjY4*tUFRkpR9v$8XTX4LF^8mV8Z&&yU5BK{L**bmQy0yV`ViBpi>XqrP69!e88=kPF>*{LArY0c6ZuE)BG zn7`B$-?%8kATIdN`A)(8Jg8!1u=V%0ry{zDkiXp9Ovj#b`8?(F<(u|HUx*L@v0VWY zBtgbGroSJ-;9MtHPM)Ca3g3)RHy#Are>pwTq{zp^>eltX1M$sh z0*8~;&~$z}0#W=P;WKO#UG3D9P45sGEn!Hk41xe3bT3NQff)<~6J}X9 z^Odfu3-}kIlcIBS{R~hi}wmt}Pv?2D$ij2&K6;S7?CV2Wi=U<`TT11p6G?hf3pq ziB&m|65XJBN|$*ZgnTFKC6gERTE>c?t_c9EL2KN!QC-^Qp z7&iuNh)z&kSJG_pcKRj~nwi*SVzr1{O?{b;HtHd%FF-uZG*dnl5@Td-sJJwB^&X$| zqiuChREb;Mh3`G-D+o^&1&#??)$N_-taO4=B?VhgipR3)`LDC}PbR{^Z{6mV1y!;t zN=(lY3Mw?HtJjk{07Uo&9PmskXw|RbL3zn^GFbTPdWaaJ+834YW@MdkLo!cCh^@CYb zjkK91p1Fu*eSo;Z*4&=+!;hWv>w5z%fP?rv7k&JgDf=w;Wf3Vl^RBAky5(0&N!F1} zrz;WucgAb%7yUHxPGQ&@0-O^5QMMKr3Vi7cLLYW-M$s!)u2T7oVZ`+E491E9OR$P7 z^)p66Z2y4t=w3K*VEFWo*a{;eu-7R~gAFkh6wpoA9|Ug(30C7!2ZKICN^77-MV{%(?X!D@#xoNlmFV zK@ZES`ScWu44%tjZO)xlBCi7~*SX&l0WJDMjR%kGJ3E(4HvE9k{^y^>=nK3hJf z+;_Bl&49enGt*AsjExvRg}KV01!nm(M# zp1yu0gZ0L29B|Hiz`f#DFWoV~Ug%PyWmA+UiDv=;tg*{06$i-J^t+OrQJ@O9X6SVk z<9J2PfZRe|`fi6?9-0!~mmqlvp9{nCaxmjOy$lgl1l1kyRqi zt@9aX^Q*NKG)i_5UP0_Q5faK`t{Tsrt4qX+@Sr^MPb9?OwbZ%5Q`t@Nonr#{TkW|7uc2}Qm>RRLA-jhfX~I);7P;!Gm+@t((+ zZz#e1%i9Z;o0&n;Pgzmt=Rv65b-||N-S+UgB^$`?Rnv#>klBPk3`DQ6R84wLtx#ja zAVZSI4?kqxA}JQq|KqARKy(#g_aT^y7qM6%XenREl$&NC_+eAp?IkB~4F$*NByzSx zp0`<1Zt$RALSa~@&-FN2Z~rriB8fHDo*lek1o0WuKOFuhw?$ATs$9P&_Pk_SY8f4} zj_m$Sb`}xp-(yAsCLe41!1LL$jNYil8V7H^0SwR|>AZcGbdxa)V^3&8D%W82RQ#IR zZw6;~!TF1Nhp3(J-^)7@IVypDWOI93tn^Qk0@^Dze@!N|M$;cEFdF}lfU8A=1B|Yo zk%lx4E@+vk_2Y_)ps~NoDB-+gzrVbRMDYqHU-{HT`uQLa?->1Yvs>M|G3bdD$$~_F zt!D8-DbCFj4friE4T5G9z_!D1J_%a*3=>%-+?cc!dCeW~twre=l(2VJxy5UEava8c zhp7R({R{*(qE!E2eWde*820vcPJ6opdrze)#rMkv+&6`{;2d-kglDi^c1Wb~@oxK0 zm1cjy%AhWn$rzPCGcd7K5&7h4ag|q#nH6N$@D>eBT#RVj4<@EF==0wx+W(${zk7*M zx?TG!bk^rx9td*!ZR{%kRxNxsK_gL@P|}!QeWLh|fDkJ$YwpLMW_LdzW77#(F0_6` zX$pAS@|!&D>EB#2|E+6m9{m?0AN29f=%^-VcxIqp_Wn$FCh!9%(4O`&xPRm3)w~zD3!Q~OsQ5O>tZLUC2~!6 z{~;z_`<9kH;5Aj(-%LnI0|@oe8}lWw>H6sx5#<3AJGzb9%|zI;C3zr1{pfG`T^MgdU=de@t{NYThIxNg@zuhbU3nMBi509;->Eg52*^m-pUx&BwE$ zzaJ?t&wNxfHl@l*6bHa2J)IP78U0}wRV}f08)Qnp@0yg)U>;)qaz_YbmG?T!Lc-RK zmrxm=yN<7anK(+B86M5Q)}`-XGX6U=`0eWMJMSw>Yi$JakNjaCWce8HU;Ua$X?Hq! ze_HNV}8r>3L?}%~G5t%@O+y8Lw7;I41F=^A%=%REpF z2k4M81f!+q`t$Ylt2h*d?1M3@r7-(>+yvqq%c0$rydoI=b_--r}zB}9SQhZNG+jK z?ak+gziOvQg{;!a*dF3^5Y$%Gq=a+}Lda3DLZWHC$$A~);z+C>-3H-J(>V_646~TuoZdOgf`G0roB1AyE|rZTW?t=bJ}ne_Zc{S#IJYRU z0%zch)7ci2zI`sMh1(O&g$V#5PwN*~waz3A87iv*M6kLuB=zmUHYDYI3964FQW)*> zi17LhB9K8QsUKpGd$-IfbyNgW##d$pDAB)9(~I4|LqpEI1~x*eB=W6ZZnJLlOF@a; z$)d{Vt$JjLcVAbeL$7&+>PCritnlmFHG&6s#{{HW_oPwzRiS{qyx!9y@teQ)56P}O z?u3xP$0MMIpGhTB>%xwtRTWCWDQc4*jxUCV7s2vR5^WUoFQ+!rjgH>I>=@>>$8m4Z z)?zJn(r3bMK2*DZm%z|n%g+e+LSGSMF-~u;Vq5IqA8+Y;+|b_~iadrX zlxX%2yswf*$`mp>ESJi_T-h<#kiFTVwS!(={mSLYhVRI7k)QCEPj(*vzJms z^kLGHkLD;(CxOi=>?bEh@R)He?Tl@e{Um$!N(|{~>&X_1{Kp04+|xfTwNk>&81CLK z+S{qCAAE2udtkuu;@i!JSVM8G7CNhEz92furL)LfrF71JO0>9 zMYCeW7Bp$iWh53Gs<=#a+-PQNTeQRI7a?J@fKf67;Dh+0GmCtDf;;l)lOcdoHcvvf zDKtBV#HNG$5u=0Ot;R;T6v3%j|Lk+XXj7WM;O1&;{x7yJ+xSf?rSB! zND)_PWvX=7JcJyYB9k8D& z8aF1i)%~yaYv{@m(LF+UE4k}Qwzf1n#$(ap=U1zM(4U_mB|JU~AWLj#m@$7c;~bkC z5-NQCc3UsrmnFfejP8-$1|e$}=7&sM3aGMmQiQD1(8nN(?9f<6h_o2uqBjz`+Bem_ zyw}sA0;X@a=y<7kE~`R1L>?OOa1F)}vTvIWGJ9e5A&HCzq=|7)Uq);RsaX>nmk`8B_}C|~B{neQNVE;V)sbHWIz+vJ~2 zzKxM_uN;IBoAXUWX1%Q`9>Id^u`P!Qq;EQ(`pwBEyn%9A9So}Sp+pkkWWD%#gRV%jQw|1N6iNvVEn_svdyCA`P${XRYxJV8cWd9wrGiz%<3O0{2GWDXgPTb9Vo-RF?@B(~H%jG{>H;key<+bpX= zcJGw7yWd<8OOl^5W#;TGGsLo&3{-)pE2)9K0Wft0I-?d&~QiQuMh7Uu54Z_7F;9s^pyxDG0T1*skbnu?VlV&9Oj>efIlEzU&(8 z=w<+X)&aF;iJBhI5dIBULd&d z7JOR;tGgE%(e2w*oNbu(im^WZnm;C9@Xupi3FF@@#Kqaah@XG%tqLaGuc7R7N@(Dy zYHB=%v8O;)<2M`FkZNC2>|23Y6KEclA;)9JChUyzf+i+mcW7?QKJSVpD737_m(BU# zO{2_rhV*35+pd$rgzBgsjvtZ>JMTIy-uXR*TlEa+=QP(p%)K7|;u1Jr;92#%z79<0DHDp8# zz0H}i$Y1hp(IE2OLkX0dCj)0bgRqurBHQ-eM_)l*=;`4LVmg5HWj%ByRyD-qgARI=`5pkFaUV`l0 zhtv9;G{_w$*GqqwGF$6OqP*=98c*diX|5lAz8-!C8X!l{GqlGI@ic|Ox`sc{ENFs#W0$eXU zEkmMbbXVp}2Xar`x5sm*H@N*g=J%2p%R&akWu%J`;a|7A>+lw=E%zU)J(ZM?u)}<7 zOz47*yV6d}Ta+gRi;>ELuR&hc46*!y_VH$^6lT7Rk3qbE_Sm%)REi*O#G4oYnkL2H zlhsfpVs1ky|2XQeW1To}^surU!Bj*Ux>eMj~Zs5H8V>u|hvwO5mP$LihcMY~Uw(oOtlh8jpKM`kv27x<1Z;P7Y60BIW{G zNa71Va1eBKqCKn-Lw=TO0GAB1IDRIB_HeQQ4Le1(zSRV*i4Uij=hL^@} zkc_ZJ*;m>s~DYIS8ZPwdO??gaJU@=68QC zA$S>S5eSZcmTwgNS!a0muOT&PUvb@v)0M&8zvRp^VconcECdwijAgu(9=$ zS#y8zRt6l_`k$o5I%aS(CrHpGI+>8qsY;#T#hVMZ-l@4sD;LeQ#@~(|Jy>F)L8>GvUc#&{y{|YL?{z`_I9y782KdR0`gH>_u z2NRsVim>@Z6j`kJ7r{x~HQdt{WuHU#5m3U|x3pMV)It_VGhdfjq^<;^R<<|do+|t> zO@>@C7{BCLv^74+s)oM?!0@v=zgkdQ;Ks?c24zRM(Cz|=%^*nUt*6-|pm*n zK9zzwJhkBE=CP6;WYnDOq2Z-!m?zgwb5K8)3l~0kQ(b|TJw@LoJd_Q@v-Tp^o_+xPH=` zZXyXAc%ushR2n>uVFHKU`e4L8uxRQo34Aj0%H)VG!NtLxM3q`B*R~juCyl$qHFUO3 zA{$+lpm>$5cv zO!PJkCj-3q>X>90a1QMDRw-&)`+rEf{TU9GNBo146?q5%*|q)*;1kseyCs$-l22PD zrG>}7q+;|rzibbqQ2ZX3$N54>TTim&p71svYU-ndVN#h^bri!*=3ZT!AXF!xfv*xk zUNHItxhn!-1Ec0A7O|1PwMX|fk3?~Kv!T&`Y3V>XAi!*FC@;lNx7@(tO zkc*uP{zMS7R|Wv%!tt@`arsX~Rfu+32-KOsZ zr6q@BVQ)>pBS6ufl>PE)cRS6k-nHMC-Tp|Egmsj6*~9dT#Va^WbhYqO`iXVQ8=+FS zn^D}8ti$$}M_MDfLDMpMb_Bhz2I^aOCU>=tv1d!?;_jXGS4BqWT{*s?Jbd?xS^dRl zDaA6cN^q`ogwbOF|HBP8A{Z-`(8ZZhaU*71Vs829hG`dod|=VLOz?1pkScK05lTEt zinZ9CrT8D%a1;7%?5t)>X3Zzx7By=}G_8&-RS@35|R!96~ve$5}Kh3pxw+T9Us0nsfG|D^l)pM@MzsH z$07k<<3=t?idGJQTikhi-QzOBN>8z5$B$5fs0HMV3LC*Dl}|rSarz13)Tu&cx`SqV z$eP8mVZ9ILlGL^2K^HOjsOttB|A-NTqdYNzkU0}$99;y6KI%jFybba{LlX0{s#C~Z zXs=lmKX!%(dO%LhvRJdQoqHbc>;Kd}^^y;cCIv*!S>+%1LWWFg^OyVA1V%G`4}C*B z2NpsSFA7HR!NYiLmW8`LLtb)AW<4sDii?<*{M3VExJ)Jecu&Dza$vWjGB4@^4MWafsBN(ZJu{U zF_kb(r@LdVo-&q(0u>h-5%T=*b-wF{mX2$@Ba;G;ChMDpLv2qvgB&8M;? zr(DM#xzp*=mb2j{Vi5_}4aQCik`?V1XV^{G3SQW8;N5MZi+Wr#_mX#lHly2LCR>u` zzeg1%<8n(};7Y4HEu$hb3C>!wu=ys9Wj%5uvLEw__-4f8FqY?g?0d0oMgf+0{N|DG zGKNyVQrXgeR(6{Nq0qO$Xv6B%jHm6MN{iuq?LN##d*n81hGTlp|v+4wPipm!dit>==X+Z9=r_W zphbT>W-C@^B=pp0N)l$U7S?w04*7S|mPDvO_rx?8`Z}D>Jux2$SD;e|knv$4>oz7G zFl=R|_#ZGfg4G(ppG}G-HVl?et^RIOtGW6P7G{jM*SrqR5>{PXvqJbDFOc9U6O|$U z6RA6xF9}Xf{2v|QUk>?mlH$b2_W}3UOwQwo2?-JL6IFGu4{vWxuOBVU`aQ1a7(>^3 zc~HIY1Ujd;B$A)TrKj7QU9*&v6hjw9vpD|mfP-a4bw!PB;n>`S*edC-9IBap11sP4 zt}#MxZ+?KO=-@_*C2W~X7>J0PO|mIS5Ot&lVsDf?_cSWRJz7SV{+#?WW6Lk*qX!hA zO)f?VW-m`Bt?1_4ms#}a(X~3ZOZt1J7B5Bnkbb}3JX*iV)sP!m8ut1{@mVzI{N53z zADgsag!!7eQ2RqahXt5nt?|FGf&b>$V8WM;c?(HiI4YZ&YJ3v{cC&`8l{kAU_oSzO zwXpa6+GVH(yw{O26vq$u?vK}GThRt1v6>fopPiNjXKnNp_yt@H*Z`sHqd^z4%ml}0 zt-+74tgXPi5g&g3QIW&Azx67la&U2$->x)N{2!Xmf~~49+QR$L-Q6J4-Cas3-QC^Y z0*4YMMOwO~ySt=YI;7#y-E}VCz0ds#YwfkyGuNE&7^6_0d9br}V|Oe|({iFIdbf=| z(Ok^x51$k0{o;?`zC22Xv*{QJbP{|?fC)dp&jjq-S2#~IJc_V` zIh&%FxI{22yy&?BG0Yxgyp>N7)?-|Wn^*PZCuo+5*N^#|U**(v(_CsdE)E`X?; z>}KkX^QrrkmJG;;8LZDwk8S9`CvrG1&ifAfxq_KPBkimhXhvofwC0(3w+;eTPGLxs{hSL za0C1V4kx{&Uh`FDIM|i|W(H>id*yA!Q(G9;>SEh9Oms&cq6}rl@yvw=k|RBP)=W9S zc~zHp3wXfqQrk#qgB5*7VPIr9Td|a}X986*fPu>g42JWcvTS($2==e?QbIcMTRx~-|>}Q04$MAHcW*guuWdx03 zLBerZLj2Ws?}Y_Q;r-yb3p;**sOIkZ3BG*==pL?qjJHLgsdz+?A`MBYZIWP8oHvK1 z%`rCmSkdVyC5`6$6F<(Nf2OL`rI|v08bfO8X#E|GGbwpm-cUg_#ko!wYPK<)R7XPO z-4-^K(M8la_$*lvVao9Q?n0Y4WPFnHHX=S1Db_W*-h(bJs$foWL185Szef@d-~sAZ zHo2J<;i6TuD53T7Wd0K{&*09<1*yTL8HxJdN3hYP#3?N zLxonV(sx1Uo%cvk52R{U*ZCy%Kx3Di7|1|ce`dloMaeHJFm|~{o<8ERCRgFG*~!}% znQQ!}79cFtaQ2NAMq0s+h7Urnx0zW_qHfP`jP>gpW;6$#^_xJ^w)yOZew70pWn2Z! z{*oW&7pRxz2F*!JAo=_xEL9GGM1~v$#Yw_(k{p&IZ65Hf>a^k#DaV7gd>hdb0vkGh zG=;8StI>Wk3DPb#WS3-zi)`vmirz&WZ8 zTWD8TpneCh^aMl@0RJ?WM=T|Jz47kch`CXp5oZ8(D*<5K(k-Iqd(yE(H@3}$({HOM zPrbcZizOhuF+xsaj3)bfjhqpL=t^{dEzpSdF7ZMTRdj)`jB9jbZF(C6cQOwP&4}sV z=i8VC@9swj0G7Ys#DtRNGu%^_3C7yJfO1D3_A?q(%==FevBR^2nPRR{`p9i(TV)m! zCR4w}n{UGuJkS+7hnq-uuGo`G&7Y5llSE0&;2su)4XS98Z06Xx(~jLzU<-v$8dl^ zB@;$y6ts-d!*QSQUs_8-22IlhPlk;c5Gqaccg^vwUEmaUpp=tmhMq>pz7^&R1PP-+ zkGEa_HkdxvD7a9Q@3AaMY#lgi_cm&Si1yEsGx)c}NgD$w8pmg{E}Y*UAE{(ltMRe) z=Vh)D-jj6LLra%Q-(8TI_5WL*Z5+wDcE03P;WUa8>fUL4;i~!C>{JvCkg}J-Qvgdr zaC)V#(MN}666;@Md*NGyFwmLcf*#jW!5ILl^b10an|E;%;U~C_Q*2c34Wq>2xy;&_ zT;t$<8UMf4buv}&T`nhf7mk^Z4Sej+#O(j1V>;Y(Bg7y8gP2OEv&-|S$bz5RaSnJy zpG-;WwGWm!XL%!&`J`ywG&RP z6J`|tOD?uW^RqF>R=!FX#jP+$1iS({54PW#=j<1@QBaCwEC?t^YF^}{5;?uCISO_! z&5`h)M!AC}xz3S@Ya1<+j{=m(KVfVt8-^ZUJ#O3IGqMy_%-6rtocx$xHgY*m*+?9s zA<$|Hv{!coQ|6$sBZt~;(gEqr)!*@*f3KWFjn zl-p=uH>u2N+_+Pp-l<~3z;@7RnmzVC4*DZI@xFwQQK%FnRhy80N$$=jHT7i!2e+AV zxDY-6Yi`Fb&(E5Rl6g)r@yxUkoma^#*vn&|3q}0zRnUR~WC580vg4?Ud`Sg9AAGcQ zYw5;0|pW`zK0TuXhy}Hv*Cq3pmQ1^u%48BucXt%3x%#MV6 z@vSzpbvM`fzTA46Dz~RFP?FH8LhqOw$yNJyEa?Bkp-5}0mVW#`;`Th!Xr*WZ!!jp< zRi!y5NhA%yQ?W?}@9CCMq>fBcO`9cYVEJ)vJZ?GY#?+MQ04 z)>VOrt9N8OK(fJ~Mvg-?^*TMCuoY3SW>9s@Gc%oLNo^Kx_bCcf{)j*IO3a*$Q_MT| zTWq({?+A(pRHOXMJa_Fx=MYq9Qg&fK9FoA8yxV`ENvEfeZ>beaL7gLU7!}`SmLWiEpHG#>SwR4J%MM`+YH9# zYgpF5eo4mAs2&(0{3&`fgL*RfJza-Z%c?Y0ul_>yPO1L%3+>ao0wMrKEwf$*Bm(hS zjF5oT65kgQ5p6c{85PGY%^dms5?Elq%%FIkAA#;P#-m?E5y|4$d8=*wGF%@k>~A>` zx=tX%^CT^qGB=Y=>xqGKg2xDW9qA-4%?qw((HKyL)8 zr-a3%Bi*UYMzOOu%6>QzzdK_g(H!a+eC&eHfoQ^kPp69q?3Au~jmr3CL3RQp+enfj z&Q68jf2N>mbPjPWRvC|oJ255oOzjb*`_VpSr*3XT#I&YJ#0qU z67&W{3jAOVbjv|Z*n5%9sIV9Bl)Hs?UePro3eVS4NtRev6Q*A2zRf`nxP}^E;EU{$ zy91Sj=e}OaK5v9zL&*uFEsp4eIi*QHELwgI9;qs~PA9$E_f~9z!6BFvsIX~a=n-@^#0(b`IU}O0@OyrsbX_)7 zE6XT4Yin5w1eO1gzPXLav2$LZ)liS~$WEUI0HfI#X?V^X`?_VLc)jUFI+n*atK`9( z%-}z7ske6U2IgG#?FKA~9;DHaZv|yD{(QPrQkH?vWYzrUIiv%bK21XCsq|Xn@bcyA z+F4{xaJ8$)`r)rC)Cho~$CB7MGPZ#;>xS8SD+OETO<2hPL?V484-^bpZY-Uj@Lx;dCVW^wt%FR2i0_?+n<6j1jTf1Zd?#6yr_p~a zybcU){E@2>O(-zVGpG0m-y?OOsO-`R!(ueuc%P?z01M9>8<~E zaAmhpJ;WtrwXZ_bVuTmN>5u<6T4iP{;<7fSSOL~9C{rUE1~$E@j}0+0CRkZ;FJNnO2uclojP>7>p;%(=t8(-Z07^IrPEvv%T4(9%eK@L_> z$Zq;j_&6696r0PxhcdzZ55b~=Mi^^}-@JW;F8kP%l4H=f+B)WE^BFqGHShO&91oVC zNWtCE>cH~xircPyF?ivZW)l}3ThJo@$pyYxaCryb7EgSB^{QW&6>D9BTt&Xh(6mUt zBbH}Xs5J}ppM>bd%x+8qo@CES&R2aFQmvp=Ep%6&My&fVTQ-n*rBawKa!8TA4=L_& zMdU?3JB71y0(pHsR-z+@4xnT-R+i+|P^fdkQnn|9kvHH9^(5B?AV_*nx!(+Wt}@!yCEaMD-lk zh@38BR$DnbbuM^C_P$%g%-}*L5ua)@(r)7Ycek42Ey1cmjpR%9R#Z47w{7Cx3GkA& zG8v`wjvm(ik%{hF0|L*Ay{Rq&B{b_ss!^eTZ%;IL{ktxQ*Q*1Hfc{8Ub-M>)zGnOc zD^aGoUZR;gCD`EBFMx>vEYyU6KvbmYJFk{59bfAzzQQ8`b_%`8W$qXVm|S)bG+=}o z;Tv2rFZ^HwVQkyWD6~f3KNV8XNrU9>8;K|$gK6DLOSor#2Fa*Jx3b&WepO(cT(k3Sz-!aMxxr# ztS0%Oix2(cmxI6BNq;TOiHb16UQ(=?t~JrRArZf9gFOn&wZM-eP()?~o90>A9{(_n z=K_Pb;5HG9;9HNcatRctr%4eoonR$g?1euIev|-zftwk5T{Yu*=C2~z4J{;kV{e>- zR;u2sVWT)tlK>j$mDOX4A`qX}5XrPL$KaTu&)?=?uTCeQ^_y%sMjss9g?zTT@OU2@D11q{E6MLtK6c4_vH8|+Cm$y{Gh}^G_ zJ&aIw*N$6_QzD!lm^Z+hWUNagYm%mB139AT8?7fQ3P1ZH*zhiz+w0nb^YEzLSqU(U zaIlGPh2Q-9TH9l&#xw;Y8Qy6)guLrAey6rwVpk`(f1)Wc$`kVj889AYc2xb*=}uQXVSf}=M6+aeEwh&Svg zV(*_MDjztQC;$u1)r;i$p{r1iVI>0=lpz{Z!;&p?N&MZW3E`(AbJEBYyHkrsrjMsO zGD&ysZs*XLXyQhr^z%w-B?11L&n>k=(5(m`@z)lTcKPpldz6;Gl_i3)?nmvrC__A# zk3r5T(6p&PEW{tgbHj=&6^oAKnCXA9{yn&S-m@D1lol#SZ2CzqkQUuNkwSGvlwz{W zYOh+RS;2o+j0+Kqv6oAt1Gk*y>nf}_+~L80KQozQk%|;z_-n@u^~w~6aIY~*XqnA} z(dQ3wJkI^6q1*fg0b_LLhFq=fzD5^3R;pMEmKHi6!3EjiT^cR@6yZF|J#BYV)zp1@ z?waj!6rdX!pmO6;JG4BjMVihCFgWm|L$UsJL74|p^Mv=Iyi1OlFk~>eeuz$#cAv`X z0Vz{nj+nfC))KE}7^BcR_iM)$*g5QHTs`c}Qy-0&adlt1KnL|)g>l@-RN*lRNofX{ z_U_fKEi9r7IMR&_ktX|zJ>d&7IO=!J7agqdKQOp<-T=&k<+Gw)JDm!C;T9e^j2oIK zPJVoHgFMU}DzcSAF+KE^B$~@tM|w4ave3D(A=?a(DUoxAJ~Av0N-= zaQAe2whIFeiovKJo!8QxeX@F6Fn%R%JP&u}zZS7&k_+2^J(I z#2NI29@2D;Wl>c>6@!S}4s_y6#G8D$&!3EVmw2mvz zyiF;>^g50FjRfELAlXx=Bva5<>KXQV}2rejo zEyMDjq~#=^4nQSAMAbczFlGGPNDOUAoPfWlN86eM$Rt0xo4H)5*0avv8AoU?Hu%_9 zMp?fPOSPYd%C*$(zZ}$yWrK1S7-AO5MWL1q=*PfX3Ytd0K5Qm6}NPNf{pSr=PTCA-6=| zrFyffky0h);RD?-XCm5VQ?_y)>RMh-%uXBd+EfT%iP_MT*pJ5~L>4;pIpU9D^`PL5 z7O8j|CiUnEylN2E$Xx2+iL;*g6nPGJW2)0oUT{>u2lV;m5C3{#&XQdsV1j8gC0OZY zyW03`<|P@0PdJBT!d9mBR{fhSJ?>{4wh}v>RS;YA2l?|%g=G@l~$x zqm^AT_cB&r!eG{2X_C;mnA>+QDrX*)ako%TpwLNlh;}kLg(|rr-L(EC4=0ogF75uH z{t=>4PDGmHn^mCIbevS8bdnP>0d{=0Dwc6Y!VsD8(zAj?+{1Az#SN>gU ztuc`R96@YKX}CQXxwU;>Gmx4&s%Nv$ac0`gqaA6|n|%6H^5-fM)u$iEZf|GP;~=OZ z)b)dBBm9GFuU>8jiNK3QvlY5YGy+N^391N05_jRUnNnd`Jeelnq0TZ;$ee;wNBBgP zh=b2&=DEbTpP;&o2h^h7Z;mfx4YMfl=;>l&cPrG;!Wt{P2Y#5%kOj!-rP*toQI!OU zKOeQX*YyPdT$&-NJIiZ>aHi{>kXkqQinJ|f>)DZLrEu*5iiT%zON@}_02eWETKmH#N?K~tV(5?L_3~(^II)q{Nw;P68|XFk?6IE{)N5w^ z>_>t?R{P>=S=4VicIq#i)A{GF)m(`EZf&orDRYH@+vF)`3K0MB(AvHG}mBq$rh;-aP}j!>Jhr&y)UfKvEf3HD3pYi-c4tEHcfqK1NmL7@5_lSMvXnl zYSYXF_J7;qfAPcHrFYV2p@|A+Tx{F@o+j$Uz)n77CA%HQ3z`h)MDU^f5TdQ^;-$;@ zd4w-vB^GoR`XS`)^1Lw3S*vzI4ch5{)6;KuqJB}8bNQ4^Ihm-9KWP<^!xLmF7_a6< zt*m)48Z`wO$l!^d44rY0-~SNLT#9cm2~Jt9Nc@HV;x?}bm@#)ZZ6ajndK=~bYfRgV z*JhB@!D0_DzSOy8kOzNef*vg7BL`wbolG6(A?@HJ@KS)!tn)c{GUT761q{;2=blSJ z+*Gfi)r-}0AEK5PEUUrz<5)d(w!}YNJ>ZbqQC%*Qaj&0a z5r$^?XxE_)r)LY1PD6lnFZ)dd9b1NCk@&>zh_Y=FNPh!%NV=xD?Bj=dOw3a}AX;kU zx4A_PBjsF)gmE3Ds%;R`qC?e;oSsVJRoQ>IaQF%rC=O?wbCbIlSPZ7Tf6XRxUe|wX zn~f(nmTD2lD~PFVIv|0-ibJ_nD60?dTbwc(;4y4sbcarl zph|l<>wF)ZY+*lnbrOBEIJnS5zxj{<@^=$1*n6QY&*Gs`DZAt9b+8w<@Ju5(kCJ?% zwU7xrUmn45k%%*v`^ghUi zZJympsjA(UU|jswff5{d*}ua7$#VjuB%?P9SL&bEh??;VT!0LbJO5C3<5ZNwQ?J=i z?yDC^D_(VbYYghMM>d0WwEt%TD1w5hz)nH{vFbOT}H0_!PN#MwNupH z10>z*`&rN%x^NzlDZT@x|MKNQl5S$|_72Kvi|NT`VZ=cVj?wd0z%+-Syz zoNr|Sn(?2cV+$5^#n<;Qb_3NA7U_%LE@3yV;>s#pd2ytMm32jLElmBPYL;|*B68;6 z9ZwV!LL7+TJaTefrqrM2HQ-$db=__vqL0P0ta0Z7eYp)4lR3i9skO7OuyUJ6`^)w} z5Fl|bj@uaMo@HVt&XSY2h>7V4SM(xo26?+;fo=z)YsB=bzRKYG_SCA*e@Gh4Br)0b zmiSfnoa$qzwahR`mtplDHtUi1u37K@5`3X2|JBKOepUK|ZryYout3>?XT^DJjKsQ+ zF51|BY3{zgVbR;*hF<=XxeCSs#->1iuRow)npfE0vv@e(L!9or>TD z{svaS<%)No7{K^SbU$7qN&GyDqF0D$WYQ0@G^fDXj9r4UDKOZQ{uS`kpUiIX$~}wP zlRX;0Qu%dXd7)3=YYy)99)uag*%iwAls|b3u-|Aj_K{Nr`ilOqqG}1~HVu8{yb5nN z)j)MvTEx&*Uk-OtP3NL;OCyjqVXk9N6SmK>sqBc7V3>Y%gybIP>;zLBKDO+(MvL>) z_mbRp1%0l)ab#S`hv2*p@H(xxJC(A^1LCr8wrp2lUyhp1iuOtT5@ds&a^DhW3$iHQ z|B3%$-7+XF>C}srMI$>^8p6(01D7h*Q7mB{JBjCt^~z@w&rJ2br27DA=63Ib=i%Gn zaRb&Rll#&@LFbvD1aZ1l`27j^D19?vUOSPyJK+`73w8g7D-4eDHk0MT)&5eDVqoNK ztg1w1$qh*3hwHqoId9)ZsEwXKAixZzY^*@l&%RotR;&TJbM#{fAGF-gJd*<~*#wAMzNLU~!9S z2Y+eBPYvE9Gl@|P4!~rjh6(EwSH%w3O(MPfJsqB(nGZU1?OIm~$2>&?1b)*^fJHkq zMfBht%D!w~>-Ro5S%?U1q6%x2W#oJYz$a6npdg)p6H`CY49&8z&?*21ma`c5=eJQX zVFSR>XV#=GT}^T=ey|wF?O#Jaqd53Yka`B1Bnm$bkbuaJ4ub3ypf+^6E*Rt$xzldW z&9}Q$q*~ogqZiz($`I~DPo_taI3MwqFM=J{x1Z*+7*TrP+=CV;C@-PJT4xKq`?PlC z;^sobLd3AaFqoLU>$_rSD2nP=_+y63>3*PIqWuv7gO6E?aF)Y=j{P^fUmQR;4553z z0BewMo-tkLw@LnVABSLD2ao?!^JshJ*Q0QnGvFHtOmG>2t;|N@$3G#=xnK{OJ2MgF z5F`|f>tpWqb!0+seLaozJ3moFn{WhNhQL8c*WdNcz20`Lv2gZ=`I)gx>~^V8j^pF; zksJJSIsB}r=h>&02gG6?Tb-)lIoF`_rp8k=3HHn9IHHP}oY(@hAj0LwYHd`tmNpmudHNt^Du%%LTYM+(8coe5V!|M)FDF0pcy}-sD+b&A zTEf2&9#{qO_x^nd-z{WPqVh5O;T$1Ok?0ZIg=}+u49jFWrNy2@01F!VY4VQqb1gdG z*O5|A>|f}o0kdc6o5m%bE@NPCremmRzh89uFek>1v~_LuZ$Uv8{)lb7IX^gEMaZ}6PKrFqty;jhHr-uOl~#KNHc29M7iGvX=r!*R$w zK^Vb5NcIsx@zF02+n;p>5xI2HWh^CEUPG3S5KXSksWv$M`QR$)H?xIdb}5R-bhDpX z01&hc`4ztUk(DJbj|Edl!dAuH$i2{F86o~R)e9^TT=j;1c}-GApxrx%&B>Mon!E+A z1Kk6{YP6a^wlIlq1q2aW?q9jVk}cc>1(q2M5%{pKqUEt2Eo*v3LD1Cc}^}nZEedzQ62+NzL)Y=ayvJXs^;+jQw zzFV`R<=wRTq`|=zUX)>0&PFU^71=zT6_U@$jtu#SCJYY+Qx>Kh;SvoeKhvg2f~NJ* z@c?R;yOkAo8lE0sWOI51UoV$`W}n8#whcL!quyi{_^43jp1`U`QGb?95##gTWu3Jh zQgK3B}rPW z?3ylI7m&K=UeU%g#a?P{bU<=dc~Yo*rV?YV&dOv?Tp{hFIJ8-{V^n7J*v2L{fB-4z zzcR_<{yAVTr_Bfjcl&RuWrf`LDUnxCm~w{*i1(r9_R0F>Eb^Ncp`*!PB?i-PwT)Pe z!azeVLVB_;0Vb>EvG6da={*4Vr6%j z!r;l4MR49)7@~g`U({r4LIXk`Vi2gTy_1D!)uY37*!LGEfP?B`J*Q^5i`L!aCNx$j z)H147q7nji4{BG<=sZ!~X~yMEL8@=zBFF#+@p)`m(~T_IWhE8YXO-d*ca%CEECUk0 z1Ap!M!g5$RGa1RhiB)d!Ms%sM5FK%c-fSN)qL2Q)<2Unm0o(EU4TIgCU18?YsaNF7 z=mp6={k*`8`CSxJVmXZAQnqF1Q*gH5-N&N{?v|h{H!$<<&M$ACFYVL6FOFb_q8j|F z%;CSW0O$e;UVr*^2925(k1N03SyY>t7#T{Jd}Fg)Hzk@be)H;7ZOxJgt0(s6NknX9 zAdufqidbUrBjAuA$}sJXbBS-QMf*~Ld*Op@zNT!i%VPRahR%goLZZ=aQ}6D=uQFBc z=vjl(ZGVgej5U$ZB8gpR>D0dU1Shj8-!?#)&Q|75yhvs83fks#Qj+l{U4luCvq(7G zbqDLbHNHBsQ1P|$bs|+*U}AR4@d7c{{#jfn>o&#Dei?vq4mqKmj^oC+qK6MS&b?I* zCTFS(=G-gqObv*A?z1Nu4`M0-TO;=dP5gkigC;tc8M{b}VCgzOsbtd1WU$_EcS;m? z!*Ff0V%Yw~7d zwWl)0`Li+d7=y_aga&OAE-V8n9HuJ*qbK%UP34L`cZe9X0BaYrPt z9Z`n2z?g!`c5W}57P8_4?r{Jc+-~`=&q3jH{x=gdb0)m8z`y61kmIaW$PAuPK1c8E z<*}r{ukXbo2db$s&ZW&tdn{Fy#Md*QwEGoSF5y+VUnZ=7*OQHkp?t{ub^Yin#Gv%P zeK86%(eVlquDf;kkf22Az1O~qO#K-Ei-%kbTdPOO_Pm^mXlMq395*J+`XSac{{-{p zO9xZS$Q>5o@~DF!`Ye|6r+P;^LR|`N;Z8XsQ&8$QmlcvWswtUktf50M0fwxa=gRq6 zRoz2Ml}!W@zN){Bv);^8UI)YyRglB21VuF@J4Bc8Ij)V_4aIyPqA2QV)~Wd|#`}i< z=n8<^Efxp&F9=gbrF5`F#kymtZ)Y7m+Y7jJiS5z`+x8d;aW^cE2c7rYY5&E=IRZjk zUnYc-?o)GvS1CVOIQd>l|GjU%eK!Jc!Uc2q`XsbEiJ_^Z>)N0V9#}^vfY}VfE?+aS z*y^*F6gQ!HHhfF&{zqL$=#w|0x+7%33709`f3J^eS11{gyuw{QzF-M?ZJ9 zJTr8!JsTlAFM~R%}u6oGkyQip+#9StGr34x|3!T4VGJWV=ke>nS@N|LO^(0H!I?P{N*21982F#L307zh_|y0V4x-&Yk+@ zuo5r7DT5W^D^3)!sY|n$nxXctQy5G{nrw^U6lZ*suz_`DPswCho(&z!j)t|*!LNO? z!c3FA)glWI&l+O>IVaAJQ0vtH2{9v4;dzv>$g(B&`&}fQ{v7tEDe2BhA<4Q`_^+OcD~7WBeY9slRudHzIrY0Rm|_xw z5U$&5m6dyfAA5txQcLkWRN_Ls&Y1O&k8FX&ba>)| z%vG$|3yb9KHmF+*1z-#3e_A#1q5Ogsu{GGo`$u4BaO|Mi|8snvcVH$1CN&3)4u|}< zse*C6HAc>Zq>-1abymcovm>qK?91qz1?qf{L)lXLP(Iz)Hf6(VE$cBegN4I znInsXL;qY4K}EeLQ$vsO-;;aw7c3xHEk0Me&Yr&KID!Rr<*?vmtKSCCUAQAoVl zOYQQ3vy>PXfnNH-=h7|wShj^IT7U7!S@G@|#4n|V_S>Z zlC+;qA5)Wuht)5~r2ZV0Pjw}hAly39m z!CMu6LWgzfdo4xm?%!4P3*ynTXCGPT8|x>F6Ga3A7>KE-;^WF{Sl9I>T`j&tEWEl~ zz56}Qm*1xc9u7U(NJ;}_<>0%@d4W{E`OQ{{45_s(ela4T-$d34i%OsrhS?LkJV?+{ zg@8h!dF4US=w#6G;W)wUm+2h01fx#n$9sGz8`3_HOv3Kc7$~^h59U$?iR5FtRr8E0 za))rc`(y^0^*T~rsN{t>GC>ge{0q$MdbVw>v?%w(UoT|A73v*5Z3h0gfclw)ausrB z{$>ot6(s49(--whN?Xw_*5@=tAOiCy8%6m_Xkb|>m+uo=laFg^;>niUymmvQB_

_7A8&p5;cbq61`O$gNLU9xo-nm{q^hqY^%;|s-(#cvD1vvehjx1r z=@PmI!(Z$-3pt*S>Z9VcPjVoVgZ1*=@|pbGUZ~Of5+P1OrZs4anL_P0cquaZ8ntUjE)c7qg!HJa$XdUI?rC{Y4zR&M_?ube| z2(85NKgLrVwnaRgOvdsltuC)*pBc7RQ%zLJu7@ry36)Ws44`-_+_9$ZhbpocCoPaN zkN{a-12>H|6- zeE(&)!vq7F&3tXmwf^^^`Ay}1+FnzVXb4rfNB2xUv zrvSC#Cmmv@UA3ooKlD2fwf5}^Lt&Khsa%MUA9W4I>3w|yZ^vx5iyc8=e_+ZI5teGB zjH6A?I^ZbpT7I3GpV?yK*thq$`!5##%m_({RRV-)sf({7E6#%vg~SjN($9?%SRF5d z5lI;pxH@<#fVvR-jVV5wXUrKnDu>mHtZiYASNkA>xDN4pc)9+DIykUY_~%ONwkLtS1XLt;f4R9K6OOh0_Xl&eD-#iId4l<412m7t9p3}*dh{2@NehqNX@f()jT$82NX0RTg^RYSK#2ZK6T#5}%7P?*gfP}ut!QzC8n{2sG@w#rb1Fb9By@meeIweGr>E}PM z5)~Elt+9XVJv*xS@aEw9-l!WEU{|WO;6r^%IOngvS8@V?5S7{;BH9JQEmimRIgD?4 zs8$5WxTvq&W06p)odDaLJ}QQ*RZ!NL2bV{Nfake8Y{)&3Spo(DodyC0Yi4U z^#giy){zsrW5vom2!OASqc|Mw?ojSc5X8*d%&DZUKj5adXWJ2HuxZ)NEj3dR+_m%? zO{{)ZkGhlSY@7oC5)7cbAC`)RprvF!47ZuL9@+4~P2Qi}@SlQ}KkMdODYYJ)sUF7> zbCMvv{X-YhJiw%#*IR_-)SQlA?u3eGzyAJb=RG;Wk!}`}Oun5K%{_K<6=EZlgpV9! zqze=oB(8GbwaUAd%4a~$*ZY9WIz6*U+xi0ge#;0e+bbL`JS8d=Zz2A37l-s$`J;re zny53Ps1>|i`lg4SMTlutm+41%Vo9A`f%aOyPuhQ?4bfMiFPpOwcje5Bg`uHR~$d?LlAHRtIHI1nD^a*8}l&u{JM+F)uS>!eyb1zF;HErOU@b8PefKn_Pe3 z9HG_(fXhID{-YJw(VhMp8D1)rUKS=5-B#3BQew}@opST$DOQm{cnNfYIhg^uabw&| zMDp7Wi_57VSW`#SAt)}(>j#Y}DRLnnI)amWO2bx~xoIfp{_+pa1OHtr3B&5VFFfiO zm~#!xncJ?ZnU~u&_qql_pGE!Tolef)tp_8|w*UH#KN;axasQb^`dpUdU#H=_05e8Y zHs=F!Dx*tDmw3{r(3i~trT)Qi3~Jx(lTa`^oFAqp@y{etL*%+CH|}k2wi!+PaYG~3 zzf4UL6T6*kO3R+&9-sf(#iR09B^|;aBPgUV!ZulkgBKSAW9$r!ChL^PRp=)90&>HaDXFHMzWaI-%6d-y?1ua~?b#nO{8LeAg zO}E?`pUV0e{~_ELem$EgG^puoxrGPLzg0jDRHCp1#8)3MT)uIj4AV$9`saT&-SM~m zef%^!KuUQ|0fz|~;Q}f{OE<-aRYnbdhF>ROdy`7?@x5wXX5FhkyR8NOu5yzJL3-2* zTA5t(58_Qz2-yk}9%Z^6uhe0ZT9=4|YMYA&&#q3zZ+ZVXvM)WN`B^fdkkVISa3*il zuqH?WWz&8{HSywBh)^TOF71zeDwkI?r){oOZGEFw6GH~f{zQk}RErFABdWX`iqvU@ zZM;Gb<+XP?>H9KDkHM~9_dYcW!$~RKXgWw zS}ID#vf#`#9i7@i{RiHj^g_HNUc`n1XqN;5BZ48{JF-< z8*WgvG*u~J4hET&4ywiB)~#I*Si=BA2gUA^$RAfr-13t1gD=Z9JBe!*FEErv)w61- z@H&|i7`28Jm`;9O^Dz=SqYxa=F%e=o4(yT(eIew3GtKM61~$%@hWYYsh>*XcA;5VW z=I7j}OG%LKo$0OEy!j2bQ2;)^th@C~EM#(0T% zI)x-FO@&2_#pH-NCI%#%XR9R$`iCEd#Ob6;(fane-=+u zIS2{O%G=DO{`uMbRyP@{elZ7t&TS;XB_nX?<{6vJJ(XdTL41Z_kCOgG2<`5-h@jiQ zf^*3*3cx`Ovq$%4-zK(Ua8%@N7hr(Dbj-aR2xKFH)PdO|@@4Xw91mdY?2P{KsCOGu?>cd1TLkj-y^5WU^ zXC6jX{=Ul=aniWK^KA2@Y0heFMt{h1NV&_?SDv^+s&?)zUK<;>%m9uUj9fsga(d^| z-4(uBR4*yhJeR(B0NIV$s>-XxZ*Z#hEMexOu=z`dD_o8MUc3@|4<{;;`pP`BAb>S? zyj+yU+ysC~0oMzHF+4zJ{tN@yAWjd-TwkvQU8WnY^sxBwhnlLuD3I!Zx_HUzs7y0B zYWRT&q>}?V?cNlaYdqMmSQL++8WBjVDHsCZYxT@cK^(B8jwo1lKlrl$M5w0$^}oGL z@1HvPNuYbMH^rEZ|H5qpTk)t%KOoUo(-6LX(@o0KZj98DL=>SO8632e6qe}2^!5EF zxp1IbKT;i#X!#k6=vXLDwAp;;ZTf;pTvt~T)AwCg?Xi95skYfZY*%nu$j#|K!0x`X z_^3ZXFPh?in)>R1sJf^ByL5+iNP{#B5=t&07%U}?#FFAecf(R5C8EUAogyp<(wzd* zDZNO!bR)4pe7?W$`@a9(Kkm6RXU^x$%$+l5hGVpFwv-K4l&IjTafz^CBC%G+nXFSI zjau>6iTzGEw?2IQtv#vTK+94$LV7jl+Gr2-p)}A`$i?)-l82m_@QOtmuwtWiOKd85 zS5`bbWX{0vl=}OABVJ&q^@eBwWzmh9V>eSkT24=8{N7mo`yJ%cR6$g(Rt>dc`-^nZX>EqMgAbXckdN-KAtF4d0mY3Sq+KW_K~RK zcVGyxypl&Uk^iVZ8LDRMF+|8f+@N}iVWag}U5?tjMWOtSc5hw{H#FZ4X^G*pi%W(k5N38hjh0)%5}5IqfkWF%qrK;kXtN0R*b zJ4?Mj&4zkqsdb38blgz?Z0{-QN3<*#-ukd$7DJ3iMI$E3B84onsX%b*-e}>mTZ>c} zZ_m%#aqSK<{u^JzcRX4E;b$_5ZKWld@|2g4VHJmPf;hU8M}0pZS>TS9e@3^YkGDz2 zEa2dng5KI!l?P-W8%Uu99A{drgouuKmY2V*iwr^}Ns#wO7eJbEHOVQh!TX@QkfB;K zci5`zR`DJ_@tGr!v3Zi2q0?j~JT#5kDLILeF!LE}XXp^BuLjB4{u@KXdrJ`HjSt-? zCz&q%{ioo_*)aiquwq$ST?S+RFy$|}7B!X)SMHX0A3lmnflFQ} zn6$rtTnB9Td?4fC0_!-aCE+~L$q3VM)@AAt?=bF{Kb*8%OFuc^)XR8&P0?xI6u>lBp5Dxx_gu;%^f|s^}cuIQG-~f?C>zXIy~Pv)R2HF$`is8 zvAvjc{d5v7^M!@o6D@%>$P{h7E>?4Nc~u;G726(7)9~H#Yt1_=Iqa)Ul4#6#lWh@d z2DyEiepjQcMFl)+%hp>T>8|~xhNdmz2u^}{&4`BgV}*uc!qg$950N3PV?9+R4x}?M z)fDj;r?)zpkt&y_tj*W=J9B=>8p`_jawRKh^DMqdZTW`e)6WaBhPeKtJDt~eZu|9? z!ChcwV$hctOm?)W7k7~_+;`^;m(&6oARX)LS3PjhOf}SDF3XO$<}IZzs*Uob;K((20#CDbow^m z4oQujRS{Md7qWJQ(2ecKqfUH(j0Rr~t;NMU;!$0@Z!_7ovSo~=-#m0Flj?6rU-V0|D=s;Fs?QK_fVTOIX;^{)l60JMDSF z!i?0kBuZ1=H?^7Q7=Q_20}%l*UPio#Tb;KOwJ|2{am%_cEw~(XtV%tsHt33aFTvXy zV(m!5i!ht8)jkW#n1FD}Gl}$dieD}5YA?B!e%B4`TIP&cBG2Y8yRIfXeZg1q(8zSu zeKBuAtFMHN2B|;wei;$2tLRoW>zvA*Tx>y*BipC7q^N*9V%{f*N-J0-mZv9LT+xZACV4wlSxpLz#k@-bf~1(=Bz(kM%Yz{z2T(#W+htN!SmPS2?gc!zIR56 z#WASQ^7&$2T#fIMykokIoRuGBlPXO0FUm9Kw6AUT1m5_kn(UR*^*G2(LqPx)6?=Iw zbvY)`RntQj8t<@izsfMXncFF>?s&{=laFAwyS`L0-TrElmT3&Y! zCQ}T6-+S8zGMp(qHCIR;TNu{G=C5#em6Im2HR!6zuNco_416ztMQ3TjjQM3`vXTnh zU5>!)8xTjj6}BN>QFH2(Wb~Yt8tdXe)zd3DQ#QEdN@slN4T4OQ&AmLW(k-p<8y;(> zmf*iCjMuaszIFnZvT6^&h(#ghiE0x+>T46JHhGo?oKjn_3je zTqNTo{&1dj13?vw)WHUq&cR;csmCl%nQ7`pesN*fG= z-Edn!E0=-%mb$QA3&#gofM;&~kc;UB&I6uIEMN8i`jC=u@Cb2 zi4Ube@sH4`DQXt92n6vTOn6}) zf&eH3HqL=O4bUz`Hoz+9m7lhTS{*i;cvpE$+xmBg^d<)Y&W5sm1GX6oq$1GwF73V| zXu8@oODU6NAUNy{8({&k4e}`mc7;%whsfPNtrGqq7@Q~F_sHZ&B&#FWE?eG>J-a@` zHEsEoGym>uz85U}3}FpeQ=yxVLE)#cKy4aw(h6w4T9TWTfuO!FmIHsuaKk4Ne?f`| zH(Um1bs>7oJ}pbEaJb^E8!PioW)U!)haZLT-O8t9e3hw0B;FqDoeK;mKdjTIP24Ay zQ|kioto`gw5aF-q?ujE}K|t&oa2I}G=2KBwK#ztBr-!C@^n(F7<^191Ox~xJx;p(% zb)2iwG}}~2KQ=%PG#g4EDC1v1Iz!Rl$S+ELZL;VYH(aIO_bALSkd|nH`^b-sZe*{S z44df_gAs`ecYn8L#bGG(%vV?Y;in4WJrU9|qA@GOp^R_TLQ|w+J0;UxZ(ij$dUX~- zD#ug9<-N_mRM0gQ&gIS@qxzV>bEaS2>@Kk~!)c~g`0+ejR4h)LP*;M#M(k^OX=dvjTQC`Yg|GMUVejtRg7OEj z6$wb6_sLIGC5VmQzeT1Wbt5#;pD3KaCxLQ$@zmqZx>tVr*HseVR4pnvl!gewX+B-7m)X_7NPoH$HN;l90d%0 zu#WgjM;^?Mzw6!dIOJD52Omg!;CG_3bT?mlJfrVv)9J6x)UG{7P1{{-YdIOZv)Me+ zSD{PhUl(#&)hLF9?y!#oBRn-wpp-c8Q1nxFkf(}eS^Jb^`oxGVn-?k>u@J#+&H6KsY z4-TyLHaS!v@*;RoDBv%H%6C=2+EGt?y9Oh=xpR!wErxXs*QB|fG0l84RX?k8$4%8e zhRX^I2WM#U;zI-y-aFNUlHxMbE1B`7ZkUD?&aF9(6y-x^*i>QhAub|_Me=jm2jU*= zp%)`644(Fs6UxL31hb8D=4lEJLMy-YAcnf1ch=?%q_SRPAqH%lma|hC8|VE!*vO3W zC-C(pP)+8Vpy^ZN~M)9uW%g;dMwYGGPH^0baiTAY=3-Hq~wA^Y*JE@iq>P z9KN`1%?E`q==Zd_za)hHgo5l`TXUlF%t4r7vJK4H6HX?VAfYhXa~1*-0(y*XUGfc- zYO3Dwx&>bSzGvUf74L)bM+hFayn2Y_jBjRLtng(y@7!*V8HSyL6uOp4*1P znLJWHz+{PSS^vF?W%&9#9YuaOCha)r4>aSm+4LkCo79269{*0msCQK|uJtRq-+xi= zes%L$6=o#3f^Fj%%CZKz%4XD6n)|j&_I8;~dlJ_)Ekk2+JGuI7|5UpE>Q}Q^ z{ltWv7Cn|o+&W7CY_N%KrJz>l@&)&R)vLve@~&SRJr>Y*ORPO-b&h^f?L}9IsS`gv zH=Y3tuJVr8QMgGwFJJ0ecZ6pI?&e1Q1I`unCksEe@RH>B_gK){93%*;cfD?YX^XfB zE^?a|I_1b%6SW*$_dKZX+)Td8ruIv-PpJwTJPr2u<-C1VJ2G6mwRJraz)XGR=G@_b z2(%BzV#6oUW6!}&8{|=l%oo%>ZkuoKbGy-yfE!JOIi;WcWBLNjntZ;le~)U_M_!lY z^T!%>!Xd;f2E$j8>Xf8L|FG5I>g;W>DVu7wcwe3)KFN;{YgX##VMC7z;9p~m^yyZv zO;$&&hO#u{(fKBq_}#~&G<}4K))(s@d26OE+(pYYf`L=wijAL0e9l-rXwbaKs75a_ z393uPQX6LsTW@IdeR#Vx7ES<}t+_a}ZHCPP`!l**AJIrFg{ErCz80Sk%|3VG1Oa@Y zc#0GH9b>SSGu-ZJI2*~)-tp|#7bLaeG%xL8YSSjZ{HPH6h?s;3l44t;GkjEQkyOwRP<*_58Hqf>OBosQsC+^q&_*0zt zF`Z*|I_;!lPoEz~zKKw(m#0znmZYk&%r(yGPh~zda>S<%Y76Tu-phW8I&$vSIU#{P zk$z1`Wi0tP+Ni?i2ESP<#+2Yj3(zTFgsWG^3e7A8e-yYy$>cWEvS)KhiB0kHI&!wU zo-T={t?W@dRbE94+8meA#PRQa&sDru}so|xqE#PtiYiNNE-#*2|3{OHZ^cGj)5OOF~6=CE?Jv+fT}!ZXArDl8Vvl=kxr)Rukvv+i%H{U5>+C z5Gm&%kXQQx!S|_`okTW6+}wS8zgK>JsnivXhrWTDsz=3!R$_LaZirruXfq$F>IAROJ6e$?`y+B^~Ih%-<_tyT4NC-7_Ci z1RV(Cp+=AiiiPP7i|_O4QwMj5Qqo5QNv-5driD)j(CpdPvb*ZJpU*XG_;gQFut+e| z(QobQ4Yy=YBi${|p0RE^cS6Q_?aW1vF3qb;m##PIW}t(FYdv>okn>oON4DTJss1@S z*r63P_w9^p{U87-zAj~Zth2e@iC4npJhQ&$9mF{mo+1&-Rz6z`;7AswCdEzP?6fb9 zHK|Ubvr>LAQEWye(0{(S4pvP`6~g*O1csLeFRa||PpNv~Vs)+>(TrQqx#%X-epeF? zRBU+_hFWh~2)CWJ=kOFEh89-wqn$%8&4r!2?@H-3TcvHbD%Yy%bOg06`WzQsaZT=< zUf+ec565dGVXktWhdqN;&e}2(o+RdaIf+fPh2zZL7d4);`$ewKGixhEvBa~88Mw#= zsTX0`w;sMek*$|g4*D=Dy}il6=?8YC#fAJni60-*1b19T*UJ;FyBAA56NyK>(Xqa_~oKpuHEc7q6R+&idSF%k^i29>N-r3RyBvcN&L3U;_AMC23& z^AQVh$d1(8AN52w=19;nF8($Ii-3q{;0nVFN4>=BVd09LkGzBpON)T@x7p;79N|}K z&BkGn*HL97Dt&e(0!v~EO}9GhPL6sMYE={*?!~W1lDsWxZKIdl=EXWqjx-7!HQp@Y znY8#Z_3u)PK;m0$UmFrMFoqwW-hhe*UnZLv)t@$19klrT)zGx->=4MoILrr&H-DrH z|3Wy^)u#HR=YYBJN$Br54s0SrXPR+vzq4stwX62V=8Q@JdRUZ%4yjB*zaN6dr4pd@ zU|rkpEqCInU2S}U(ObpUbpp4+NBtArF_`DXQVJV5*QwCK`%h^n+P{R$yFqODeW~cF zGO=WEXIj%z*%VUrW#TjvWhD_G=}$*L5t6#yOLN7QVBx6sD4W`(^azsD_$0CF3?|2@ zWpK~5El^Y$9Q-TKDeUl1=rJd76Hr8+|9;X)^XRESanqP5%9q;_4CZyzJJb;K*e-Su zETr-L88HK|-m-W6vz8+#`6WhsGyzwXFfoV5X?K z^H;-Ll92*Fbm!lS($cCrN?+KTWr;#agJWZcey(@Yb4@36EP`Q-Z>68B5GuD9l=oAx zN#Nu{jq))(VKi#uN~4Mg+L&q6n}mvgzI5s5EZn7 zEqmXidWW<&JeSDW^jp;<2G7K8}M*1n<(d(+dFojnjQ$ zSbH>gNAS#k!^yFu82%#ewSK*j1hU-cR2i6*%N29xgN8_ubXxU*U+6o-UJ|Uy>2$G| z6=u=MqPPoxP^(nxT+@iL#y#l9>HTRIUqjmb0ft}d?i{h6Eh{m$utL-PuZVoZu)<$%?4;|2EcNrC*-hJpkRjL4+`PT|KT z$@4}=GKZ=0(dq5f$;ji6J(@;0jeycC(0vP&jY@#pm}pR~0d~Fv9`ifvJ2?C=RKBsp zT?kJ8ps&K}kR)u)DK@3iF^F!c1Lxj$(oiIm;5k+X$v3nh4!2s8=tEAnFX6u2AGA{_ zLyYj!A#?FWxuiSp+Sfda1{h?)g=fX}WjNhV_$uN53%f_H zjs+)i@y})X2mF2yABg-e{={C6i>;1+GoM$x_-jT1X3jlVAGR7^mm*x6=6jl2zqTrM z1pQ4_WQj@;?Qx^Lw{sxxv#e*;gvT4JDQ#4-3cw)w+w#jTk-l#0%?z_UFZIs-rxQtM zg6x>BCBQ&rayuYWXDP%!(P!`VOXdd&Js5^B4pV_~0C0)(r=hjEf()k{89oriVQ|)H zf&Hqd7ve5Fz?o}!O)rXhq2YQ(v{PjQKD>90@nE}{_|du%(>Ax2zxA)KjiD2<5qT0f zg&;uwLYvqPxo<>vECda2!W|U=^q+RIy)YXO+7k=MysE_0_?VhX_M?B=V^3pby(kiW zsLtLTW*EG)sllFf6KD?yh9%*)%LI!AP)jSW@i7KB92ksauRsv9`JV9GRT-BjVTS)*jx|6~ zehRe5{0p$dYFz#cC0g=RTwkKK25=^sPRk9GrTNLANc_Y%)@AW5ayM=`{8;WU<-e+= z+2O8{V7VWcs5DiQT=`?er|!_hgU_WA0`uDe>o?IhrHGZgPQvwbf8YHNyJ+jxY_Z8Y z){)-dBcX4e9(fN`tNqFTc_P)(VDO-{RHwcFTERC!%&1})A`AI1l_3(KUnpp({E7ma z(#ax&roV(TpGzaPc7%>3gplV3T+jUxY!o`on2!rM6ZZhD&i_M?fI@@e_dG)f5Q>$s zz5N1Pa*WKN1*aK{jY4+ipuJ#p3g3DYL{LBQze8+~C^BRxy-6G{`NdZPp#a=iBvBY% zMuQZl+0B#3@n8Nay@`M0#Syghf5zYtJRm)_IKlMfl!#dR^1#b?rlRq>!~p=9c>Y9D z*HT952#dN0&ifmcm$;wCskvGsHPD8}Qxt$qH7g5OW~LX)3Mao7Bc{eKoCd7u4}FgXwPE=-AKWkZ&d z;uGNX)MnWd)ps6SYy9ti>ACx^*&PAYe;gAGG@eu_!9xEZ Dugscz diff --git a/gui/src/hv/mod.rs b/gui/src/hv/mod.rs index 1cd1d8960..d25fa506e 100644 --- a/gui/src/hv/mod.rs +++ b/gui/src/hv/mod.rs @@ -60,7 +60,7 @@ pub trait Cpu { type Exit<'a>: CpuExit where Self: 'a; - type TranslateErr: Error + Send + 'static; + type TranslateErr: Error + Send + Sync + 'static; fn id(&self) -> usize; diff --git a/gui/src/main.rs b/gui/src/main.rs index 4b66c827a..0c3b7b9c4 100644 --- a/gui/src/main.rs +++ b/gui/src/main.rs @@ -1,16 +1,13 @@ #![windows_subsystem = "windows"] use self::data::{DataError, DataMgr}; -use self::debug::DebugClient; use self::graphics::{Graphics, GraphicsError, PhysicalDevice, Screen}; use self::profile::Profile; use self::setup::{run_setup, SetupError}; use self::ui::{ErrorWindow, MainWindow, ProfileModel, ResolutionModel}; -use self::vmm::{Vmm, VmmError}; +use self::vmm::{Vmm, VmmArgs, VmmError, VmmEvent}; use clap::{Parser, ValueEnum}; use debug::DebugServer; -use gdbstub::stub::MultiThreadStopReason; -use obconf::ConsoleType; use slint::{ComponentHandle, ModelRc, SharedString, VecModel}; use std::cell::Cell; use std::error::Error; @@ -20,6 +17,8 @@ use std::process::ExitCode; use std::rc::Rc; use std::sync::Arc; use thiserror::Error; +use winit::error::EventLoopError; +use winit::event_loop::EventLoop; mod data; mod debug; @@ -39,7 +38,7 @@ fn main() -> ExitCode { use std::fmt::Write; // Check program mode. - let args = CliArgs::parse(); + let args = ProgramArgs::parse(); let r = match &args.mode { Some(ProgramMode::PanicHandler) => self::panic::run_handler(), None => run_vmm(&args), @@ -75,23 +74,23 @@ fn main() -> ExitCode { ExitCode::FAILURE } -fn run_vmm(args: &CliArgs) -> Result<(), ApplicationError> { +fn run_vmm(args: &ProgramArgs) -> Result<(), ProgramError> { // Spawn panic handler. let exe = std::env::current_exe() .and_then(std::fs::canonicalize) - .map_err(ApplicationError::GetCurrentExePath)?; + .map_err(ProgramError::GetCurrentExePath)?; self::panic::spawn_handler(&exe)?; #[cfg(unix)] - rlim::set_rlimit_nofile().map_err(ApplicationError::FdLimit)?; + rlim::set_rlimit_nofile().map_err(ProgramError::FdLimit)?; // Initialize graphics engine. - let mut graphics = graphics::new().map_err(ApplicationError::InitGraphics)?; + let mut graphics = graphics::new().map_err(ProgramError::InitGraphics)?; // Run setup wizard. This will simply return the data manager if the user already has required // settings. - let data = match run_setup().map_err(ApplicationError::Setup)? { + let data = match run_setup().map_err(ProgramError::Setup)? { Some(v) => Arc::new(v), None => return Ok(()), }; @@ -123,9 +122,9 @@ fn run_vmm(args: &CliArgs) -> Result<(), ApplicationError> { // Load profiles. let mut profiles = Vec::new(); - for l in data.prof().list().map_err(ApplicationError::ListProfile)? { - let l = l.map_err(ApplicationError::ListProfile)?; - let p = Profile::load(&l).map_err(ApplicationError::LoadProfile)?; + for l in data.prof().list().map_err(ProgramError::ListProfile)? { + let l = l.map_err(ProgramError::ListProfile)?; + let p = Profile::load(&l).map_err(ProgramError::LoadProfile)?; profiles.push(p); } @@ -137,11 +136,11 @@ fn run_vmm(args: &CliArgs) -> Result<(), ApplicationError> { let l = data.prof().data(p.id()); if let Err(e) = std::fs::create_dir(&l) { - return Err(ApplicationError::CreateDirectory(l, e)); + return Err(ProgramError::CreateDirectory(l, e)); } // Save. - p.save(&l).map_err(ApplicationError::SaveDefaultProfile)?; + p.save(&l).map_err(ProgramError::SaveDefaultProfile)?; profiles.push(p); } @@ -165,11 +164,11 @@ fn run_vmm(args: &CliArgs) -> Result<(), ApplicationError> { // Wait for debugger. let debugger = if let Some(listen) = debug { let debug_server = - DebugServer::new(listen).map_err(|e| ApplicationError::StartDebugServer(e, listen))?; + DebugServer::new(listen).map_err(|e| ProgramError::StartDebugServer(e, listen))?; let debugger = debug_server .accept() - .map_err(ApplicationError::CreateDebugClient)?; + .map_err(ProgramError::CreateDebugClient)?; Some(debugger) } else { @@ -177,27 +176,31 @@ fn run_vmm(args: &CliArgs) -> Result<(), ApplicationError> { }; // Setup VMM screen. + let mut el = EventLoop::::with_user_event(); + let screen = graphics .create_screen(&profile) - .map_err(|e| ApplicationError::CreateScreen(Box::new(e)))?; + .map_err(|e| ProgramError::CreateScreen(Box::new(e)))?; // Start VMM. + let el = el.build().map_err(ProgramError::CreateVmmEventLoop)?; + std::thread::scope(|scope| { let vmm = Vmm::new( VmmArgs { profile: &profile, kernel, debugger, + el: el.create_proxy(), }, - VmmHandler {}, scope, ) - .map_err(ApplicationError::StartVmm)?; + .map_err(ProgramError::StartVmm)?; // Run the screen. screen .run() - .map_err(|e| ApplicationError::RunScreen(Box::new(e)))?; + .map_err(|e| ProgramError::RunScreen(Box::new(e)))?; Ok(()) }) @@ -207,9 +210,9 @@ fn run_launcher( graphics: &impl Graphics, data: &Arc, profiles: Vec, -) -> Result, ApplicationError> { +) -> Result, ProgramError> { // Create window and register callback handlers. - let win = MainWindow::new().map_err(ApplicationError::CreateMainWindow)?; + let win = MainWindow::new().map_err(ProgramError::CreateMainWindow)?; let resolutions = Rc::new(ResolutionModel::default()); let profiles = Rc::new(ProfileModel::new(profiles, resolutions.clone())); let exit = Rc::new(Cell::new(None)); @@ -293,7 +296,7 @@ fn run_launcher( profiles.select(row, &win); // Run the window. - win.run().map_err(ApplicationError::RunMainWindow)?; + win.run().map_err(ProgramError::RunMainWindow)?; // Update selected profile. let profile = win.get_selected_profile(); @@ -318,7 +321,7 @@ fn run_launcher( /// Program arguments parsed from command line. #[derive(Parser)] #[command(about = None)] -struct CliArgs { +struct ProgramArgs { #[arg(long, value_enum, hide = true)] mode: Option, @@ -337,43 +340,15 @@ enum ExitAction { RunDebug(SocketAddrV4), } -/// Encapsulates arguments for [`Vmm::new()`]. -struct VmmArgs<'a> { - profile: &'a Profile, - kernel: PathBuf, - debugger: Option, -} - -/// Provides method to handle VMM event. -struct VmmHandler {} - -impl self::vmm::VmmHandler for VmmHandler { - fn error(&self, cpu: usize, reason: impl Into>) { - todo!() - } - - fn exiting(&self, success: bool) { - todo!() - } - - fn log(&self, ty: ConsoleType, msg: &str) { - todo!() - } - - fn breakpoint(&self, stop: Option>) { - todo!() - } -} - /// Mode of our program. #[derive(Clone, ValueEnum)] enum ProgramMode { PanicHandler, } -/// Represents an error when [`run()`] fails. +/// Represents an error when our program fails. #[derive(Debug, Error)] -enum ApplicationError { +enum ProgramError { #[error("couldn't spawn panic handler process")] SpawnPanicHandler(#[source] std::io::Error), @@ -420,6 +395,9 @@ enum ApplicationError { #[error("couldn't create VMM screen")] CreateScreen(#[source] Box), + #[error("couldn't create VMM event loop")] + CreateVmmEventLoop(#[source] EventLoopError), + #[error("couldn't start VMM")] StartVmm(#[source] VmmError), diff --git a/gui/src/panic/mod.rs b/gui/src/panic/mod.rs index e9eed05ea..0f44a41fe 100644 --- a/gui/src/panic/mod.rs +++ b/gui/src/panic/mod.rs @@ -1,5 +1,5 @@ use crate::ui::ErrorWindow; -use crate::ApplicationError; +use crate::ProgramError; use serde::{Deserialize, Serialize}; use slint::ComponentHandle; use std::borrow::Cow; @@ -9,13 +9,13 @@ use std::path::Path; use std::process::{Child, Command, Stdio}; use std::sync::Mutex; -pub fn spawn_handler(exe: &Path) -> Result<(), ApplicationError> { +pub fn spawn_handler(exe: &Path) -> Result<(), ProgramError> { // Spawn the process in panic handler mode. let ph = Command::new(exe) .args(["--mode", "panic-handler"]) .stdin(Stdio::piped()) .spawn() - .map_err(ApplicationError::SpawnPanicHandler)?; + .map_err(ProgramError::SpawnPanicHandler)?; // Set panic hook to send panic to the handler. let ph = Mutex::new(Some(PanicHandler(ph))); @@ -25,7 +25,7 @@ pub fn spawn_handler(exe: &Path) -> Result<(), ApplicationError> { Ok(()) } -pub fn run_handler() -> Result<(), ApplicationError> { +pub fn run_handler() -> Result<(), ProgramError> { use std::io::ErrorKind; // Wait for panic info. @@ -34,7 +34,7 @@ pub fn run_handler() -> Result<(), ApplicationError> { let info: PanicInfo = match ciborium::from_reader(&mut stdin) { Ok(v) => v, Err(ciborium::de::Error::Io(e)) if e.kind() == ErrorKind::UnexpectedEof => return Ok(()), - Err(e) => return Err(ApplicationError::ReadPanicInfo(e)), + Err(e) => return Err(ProgramError::ReadPanicInfo(e)), }; // Display panic info. diff --git a/gui/src/vmm/cpu/aarch64.rs b/gui/src/vmm/cpu/aarch64.rs index 37dd25cc0..7195c2580 100644 --- a/gui/src/vmm/cpu/aarch64.rs +++ b/gui/src/vmm/cpu/aarch64.rs @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use super::{CpuManager, GdbError}; use crate::hv::Hypervisor; -use crate::vmm::VmmHandler; use gdbstub::target::ext::base::BaseOps; use gdbstub::target::ext::breakpoints::{ Breakpoints, BreakpointsOps, SwBreakpoint, SwBreakpointOps, @@ -13,7 +12,7 @@ pub type GdbRegs = gdbstub_arch::aarch64::reg::AArch64CoreRegs; pub(super) const BREAKPOINT_SIZE: NonZero = unsafe { NonZero::new_unchecked(4) }; -impl<'a, 'b, H: Hypervisor, E: VmmHandler> gdbstub::target::Target for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> gdbstub::target::Target for CpuManager<'a, 'b, H> { type Arch = gdbstub_arch::aarch64::AArch64; type Error = GdbError; @@ -26,13 +25,13 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> gdbstub::target::Target for CpuManage } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> Breakpoints for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> Breakpoints for CpuManager<'a, 'b, H> { fn support_sw_breakpoint(&mut self) -> Option> { Some(self) } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> SwBreakpoint for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> SwBreakpoint for CpuManager<'a, 'b, H> { fn add_sw_breakpoint(&mut self, addr: u64, kind: usize) -> TargetResult { todo!() } diff --git a/gui/src/vmm/cpu/mod.rs b/gui/src/vmm/cpu/mod.rs index 23ccf5f99..0b83ab636 100644 --- a/gui/src/vmm/cpu/mod.rs +++ b/gui/src/vmm/cpu/mod.rs @@ -5,7 +5,7 @@ use self::controller::CpuController; use self::debug::{DebugReq, DebugRes, Debugger}; use super::hw::{DeviceContext, DeviceTree}; use super::ram::RamMap; -use super::VmmHandler; +use super::VmmEvent; use crate::hv::{Cpu, CpuDebug, CpuExit, CpuIo, CpuRun, CpuStates, Hypervisor}; use gdbstub::common::{Signal, Tid}; use gdbstub::stub::MultiThreadStopReason; @@ -21,6 +21,7 @@ use std::ops::Deref; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; use thiserror::Error; +use winit::event_loop::EventLoopProxy; #[cfg_attr(target_arch = "aarch64", path = "aarch64.rs")] #[cfg_attr(target_arch = "x86_64", path = "x86_64.rs")] @@ -29,9 +30,9 @@ mod controller; mod debug; /// Manage all virtual CPUs. -pub struct CpuManager<'a, 'b, H, E> { +pub struct CpuManager<'a, 'b, H> { hv: Arc, - handler: Arc, + el: EventLoopProxy, scope: &'a std::thread::Scope<'a, 'b>, devices: Arc, cpus: Vec>, @@ -40,20 +41,20 @@ pub struct CpuManager<'a, 'b, H, E> { shutdown: Arc, } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> CpuManager<'a, 'b, H> { const GDB_ENOENT: u8 = 2; const GDB_EFAULT: u8 = 14; pub fn new( hv: Arc, - handler: Arc, + el: EventLoopProxy, scope: &'a std::thread::Scope<'a, 'b>, devices: Arc, shutdown: Arc, ) -> Self { Self { hv, - handler, + el, scope, devices, cpus: Vec::new(), @@ -67,7 +68,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { // Setup arguments. let args = Args { hv: self.hv.clone(), - handler: self.handler.clone(), + el: self.el.clone(), devices: self.devices.clone(), breakpoint: self.breakpoint.clone(), shutdown: self.shutdown.clone(), @@ -103,18 +104,22 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { } } - fn main_cpu(args: Args, debug: Option, entry: usize, map: RamMap) { + fn main_cpu(args: Args, debug: Option, entry: usize, map: RamMap) { // Create CPU. let mut cpu = match args.hv.create_cpu(0) { Ok(v) => v, Err(e) => { - args.handler.error(0, CpuError::Create(Box::new(e))); + args.el + .send_event(VmmEvent::error(0, CpuError::Create(Box::new(e)))) + .unwrap(); return; } }; if let Err(e) = super::arch::setup_main_cpu(&mut cpu, entry, map, args.hv.cpu_features()) { - args.handler.error(0, CpuError::Setup(Box::new(e))); + args.el + .send_event(VmmEvent::error(0, CpuError::Setup(Box::new(e)))) + .unwrap(); return; } @@ -124,7 +129,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { Ok(true) => {} Ok(false) => return, Err(e) => { - args.handler.error(0, e); + args.el.send_event(VmmEvent::error(0, e)).unwrap(); return; } } @@ -134,15 +139,17 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { Self::run_cpu(&args, debug, cpu, 0); } - fn run_cpu<'c>(args: &'c Args, debug: Option, mut cpu: H::Cpu<'c>, id: usize) { + fn run_cpu<'c>(args: &'c Args, debug: Option, mut cpu: H::Cpu<'c>, id: usize) { // Build device contexts for this CPU. let hv = args.hv.deref(); - let handler = args.handler.deref(); + let el = &args.el; let mut devices = BTreeMap::>>::new(); let t = &args.devices; - Device::insert(&mut devices, t.console(), |d| d.create_context(hv, handler)); - Device::insert(&mut devices, t.vmm(), |d| d.create_context(handler)); + Device::insert(&mut devices, t.console(), |d| { + d.create_context(hv, el.clone()) + }); + Device::insert(&mut devices, t.vmm(), |d| d.create_context(el.clone())); // Dispatch CPU events until shutdown. let e = 'main: loop { @@ -195,7 +202,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { }; if let Some(e) = e { - args.handler.error(id, e); + args.el.send_event(VmmEvent::error(id, e)).unwrap(); } // Shutdown other CPUs. @@ -203,7 +210,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { } fn handle_exit<'c, C: Cpu>( - args: &'c Args, + args: &'c Args, debugger: Option<&Debugger>, devices: &mut BTreeMap>, exit: C::Exit<'_>, @@ -259,7 +266,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { } fn handle_breakpoint( - args: &Args, + args: &Args, debug: &Debugger, cpu: &mut impl Cpu, stop: Option>, @@ -267,7 +274,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { // Notify GUI. We need to allow only one CPU to enter the debugger dispatch loop. let lock = args.breakpoint.lock().unwrap(); - args.handler.breakpoint(stop); + args.el.send_event(VmmEvent::Breakpoint(stop)).unwrap(); // Wait for command from debugger thread. loop { @@ -401,7 +408,7 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> MultiThreadBase for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> MultiThreadBase for CpuManager<'a, 'b, H> { fn read_registers(&mut self, regs: &mut GdbRegs, tid: Tid) -> TargetResult<(), Self> { let cpu = self .cpus @@ -485,13 +492,13 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> MultiThreadBase for CpuManager<'a, 'b } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> ThreadExtraInfo for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> ThreadExtraInfo for CpuManager<'a, 'b, H> { fn thread_extra_info(&self, tid: Tid, buf: &mut [u8]) -> Result { todo!() } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> MultiThreadResume for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> MultiThreadResume for CpuManager<'a, 'b, H> { fn resume(&mut self) -> Result<(), Self::Error> { self.release(); @@ -516,9 +523,9 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> MultiThreadResume for CpuManager<'a, } /// Encapsulates arguments for a function to run a CPU. -struct Args { +struct Args { hv: Arc, - handler: Arc, + el: EventLoopProxy, devices: Arc, breakpoint: Arc>, shutdown: Arc, @@ -552,34 +559,34 @@ impl<'a, C: Cpu> Device<'a, C> { #[derive(Debug, Error)] pub enum CpuError { #[error("couldn't create vCPU")] - Create(#[source] Box), + Create(#[source] Box), #[error("couldn't setup vCPU")] - Setup(#[source] Box), + Setup(#[source] Box), #[error("couldn't run vCPU")] - Run(#[source] Box), + Run(#[source] Box), #[error("couldn't execute a VM exited event on a {0}")] - DeviceExitHandler(String, #[source] Box), + DeviceExitHandler(String, #[source] Box), #[error("the vCPU attempt to execute a memory-mapped I/O on a non-mapped address {0:#x}")] MmioAddr(usize), #[error("couldn't execute a memory-mapped I/O on a {0}")] - Mmio(String, #[source] Box), + Mmio(String, #[source] Box), #[error("couldn't get vCPU states")] - GetStates(#[source] Box), + GetStates(#[source] Box), #[error("couldn't read {0} register")] - ReadReg(&'static str, #[source] Box), + ReadReg(&'static str, #[source] Box), #[error("couldn't translate address {0:#x}")] - TranslateAddr(usize, #[source] Box), + TranslateAddr(usize, #[source] Box), #[error("couldn't execute a post VM exit on a {0}")] - DevicePostExitHandler(String, #[source] Box), + DevicePostExitHandler(String, #[source] Box), } /// Implementation of [`gdbstub::target::Target::Error`]. diff --git a/gui/src/vmm/cpu/x86_64.rs b/gui/src/vmm/cpu/x86_64.rs index b0b597558..347a9205d 100644 --- a/gui/src/vmm/cpu/x86_64.rs +++ b/gui/src/vmm/cpu/x86_64.rs @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use super::{CpuManager, GdbError}; use crate::hv::Hypervisor; -use crate::vmm::VmmHandler; use gdbstub::target::ext::base::BaseOps; use gdbstub::target::ext::breakpoints::{ Breakpoints, BreakpointsOps, SwBreakpoint, SwBreakpointOps, @@ -15,7 +14,7 @@ pub type GdbRegs = gdbstub_arch::x86::reg::X86_64CoreRegs; pub(super) const BREAKPOINT_SIZE: NonZero = unsafe { NonZero::new_unchecked(1) }; -impl<'a, 'b, H: Hypervisor, E: VmmHandler> gdbstub::target::Target for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> gdbstub::target::Target for CpuManager<'a, 'b, H> { type Arch = X86_64_SSE; type Error = GdbError; @@ -28,13 +27,13 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> gdbstub::target::Target for CpuManage } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> Breakpoints for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> Breakpoints for CpuManager<'a, 'b, H> { fn support_sw_breakpoint(&mut self) -> Option> { Some(self) } } -impl<'a, 'b, H: Hypervisor, E: VmmHandler> SwBreakpoint for CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> SwBreakpoint for CpuManager<'a, 'b, H> { fn add_sw_breakpoint(&mut self, addr: u64, _kind: usize) -> TargetResult { let Entry::Vacant(entry) = self.sw_breakpoints.entry(addr) else { return Ok(false); diff --git a/gui/src/vmm/debug/mod.rs b/gui/src/vmm/debug/mod.rs index dba70487b..4a328755d 100644 --- a/gui/src/vmm/debug/mod.rs +++ b/gui/src/vmm/debug/mod.rs @@ -1,6 +1,5 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use super::cpu::{CpuManager, GdbError}; -use super::VmmHandler; use crate::debug::DebugClient; use crate::hv::Hypervisor; use gdbstub::stub::state_machine::state::{Idle, Running}; @@ -8,22 +7,22 @@ use gdbstub::stub::state_machine::{GdbStubStateMachine, GdbStubStateMachineInner use gdbstub::stub::MultiThreadStopReason; use thiserror::Error; -impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { +impl<'a, 'b, H: Hypervisor> CpuManager<'a, 'b, H> { pub(super) fn dispatch_gdb_idle( &mut self, mut state: GdbStubStateMachineInner< 'static, - Idle>, - CpuManager<'a, 'b, H, E>, + Idle>, + CpuManager<'a, 'b, H>, DebugClient, >, ) -> Result< Result< - GdbStubStateMachine<'static, CpuManager<'a, 'b, H, E>, DebugClient>, + GdbStubStateMachine<'static, CpuManager<'a, 'b, H>, DebugClient>, GdbStubStateMachineInner< 'static, - Idle>, - CpuManager<'a, 'b, H, E>, + Idle>, + CpuManager<'a, 'b, H>, DebugClient, >, >, @@ -43,17 +42,12 @@ impl<'a, 'b, H: Hypervisor, E: VmmHandler> CpuManager<'a, 'b, H, E> { pub(super) fn dispatch_gdb_running( &mut self, - mut state: GdbStubStateMachineInner< - 'static, - Running, - CpuManager<'a, 'b, H, E>, - DebugClient, - >, + mut state: GdbStubStateMachineInner<'static, Running, CpuManager<'a, 'b, H>, DebugClient>, stop: Option>, ) -> Result< Result< - GdbStubStateMachine<'static, CpuManager<'a, 'b, H, E>, DebugClient>, - GdbStubStateMachineInner<'static, Running, CpuManager<'a, 'b, H, E>, DebugClient>, + GdbStubStateMachine<'static, CpuManager<'a, 'b, H>, DebugClient>, + GdbStubStateMachineInner<'static, Running, CpuManager<'a, 'b, H>, DebugClient>, >, DispatchGdbRunningError, > { diff --git a/gui/src/vmm/hw/console/context.rs b/gui/src/vmm/hw/console/context.rs index 2d19c3c42..5e885b7d8 100644 --- a/gui/src/vmm/hw/console/context.rs +++ b/gui/src/vmm/hw/console/context.rs @@ -2,36 +2,40 @@ use super::Console; use crate::hv::{Cpu, CpuExit, CpuIo, Hypervisor}; use crate::vmm::hw::{read_ptr, read_u8, read_usize, DeviceContext, MmioError}; -use crate::vmm::VmmHandler; +use crate::vmm::VmmEvent; use obconf::{ConsoleMemory, ConsoleType}; use std::error::Error; use std::mem::offset_of; use std::num::NonZero; use thiserror::Error; +use winit::event_loop::EventLoopProxy; /// Implementation of [`DeviceContext`]. -pub struct Context<'a, H, E> { +pub struct Context<'a, H> { dev: &'a Console, hv: &'a H, - handler: &'a E, + el: EventLoopProxy, msg_len: Option>, msg: Vec, } -impl<'a, H, E> Context<'a, H, E> { - pub fn new(dev: &'a Console, hv: &'a H, handler: &'a E) -> Self { +impl<'a, H> Context<'a, H> { + pub fn new(dev: &'a Console, hv: &'a H, el: EventLoopProxy) -> Self { Self { dev, hv, - handler, + el, msg_len: None, msg: Vec::new(), } } } -impl DeviceContext for Context<'_, H, E> { - fn mmio(&mut self, exit: &mut as CpuExit>::Io) -> Result> { +impl DeviceContext for Context<'_, H> { + fn mmio( + &mut self, + exit: &mut as CpuExit>::Io, + ) -> Result> { // Check field. let off = exit.addr() - self.dev.addr; @@ -67,7 +71,7 @@ impl DeviceContext for Context<'_, H, E // single allocation when the handler clone the string. let msg = std::str::from_utf8(&self.msg).map_err(|_| ExecError::InvalidMsg)?; - self.handler.log(ty, msg); + self.el.send_event(VmmEvent::Log(ty, msg.into())).unwrap(); self.msg.clear(); } else { return Err(Box::new(ExecError::UnknownField(off))); diff --git a/gui/src/vmm/hw/console/mod.rs b/gui/src/vmm/hw/console/mod.rs index 06f627b8e..9a1ecd31b 100644 --- a/gui/src/vmm/hw/console/mod.rs +++ b/gui/src/vmm/hw/console/mod.rs @@ -2,9 +2,10 @@ use self::context::Context; use super::{Device, DeviceContext}; use crate::hv::Hypervisor; -use crate::vmm::VmmHandler; +use crate::vmm::VmmEvent; use obconf::ConsoleMemory; use std::num::NonZero; +use winit::event_loop::EventLoopProxy; mod context; @@ -24,12 +25,12 @@ impl Console { Self { addr, len } } - pub fn create_context<'a, H: Hypervisor, E: VmmHandler>( + pub fn create_context<'a, H: Hypervisor>( &'a self, hv: &'a H, - handler: &'a E, + el: EventLoopProxy, ) -> Box> + 'a> { - Box::new(Context::new(self, hv, handler)) + Box::new(Context::new(self, hv, el)) } } diff --git a/gui/src/vmm/hw/mod.rs b/gui/src/vmm/hw/mod.rs index 1d2544b62..550d0427f 100644 --- a/gui/src/vmm/hw/mod.rs +++ b/gui/src/vmm/hw/mod.rs @@ -114,16 +114,19 @@ pub trait Device: Send + Sync { /// Context for a CPU to execute operations on a virtual device. pub trait DeviceContext { /// Execute immeditately after the VM exited. - fn exited(&mut self, cpu: &mut C) -> Result> { + fn exited(&mut self, cpu: &mut C) -> Result> { let _ = cpu; Ok(true) } /// Execute only if the CPU read or write into this device address. - fn mmio(&mut self, exit: &mut as CpuExit>::Io) -> Result>; + fn mmio( + &mut self, + exit: &mut as CpuExit>::Io, + ) -> Result>; /// Always execute after the exited event has been handled (before enter the VM again). - fn post(&mut self, cpu: &mut C) -> Result> { + fn post(&mut self, cpu: &mut C) -> Result> { let _ = cpu; Ok(true) } @@ -156,7 +159,7 @@ enum MmioError { InvalidData, #[error("couldn't translate {0:#x} to physical address")] - TranslateVaddrFailed(usize, #[source] Box), + TranslateVaddrFailed(usize, #[source] Box), #[error("address {vaddr:#x} ({paddr:#x}) is not allocated")] InvalidAddr { vaddr: usize, paddr: usize }, diff --git a/gui/src/vmm/hw/vmm/context.rs b/gui/src/vmm/hw/vmm/context.rs index 0ac85cb17..db21ba3b7 100644 --- a/gui/src/vmm/hw/vmm/context.rs +++ b/gui/src/vmm/hw/vmm/context.rs @@ -2,26 +2,30 @@ use super::Vmm; use crate::hv::{Cpu, CpuExit, CpuIo}; use crate::vmm::hw::{read_u8, DeviceContext, MmioError}; -use crate::vmm::VmmHandler; +use crate::vmm::VmmEvent; use obconf::{KernelExit, VmmMemory}; use std::error::Error; use std::mem::offset_of; use thiserror::Error; +use winit::event_loop::EventLoopProxy; /// Implementation of [`DeviceContext`]. -pub struct Context<'a, E> { +pub struct Context<'a> { dev: &'a Vmm, - handler: &'a E, + el: EventLoopProxy, } -impl<'a, E> Context<'a, E> { - pub fn new(dev: &'a Vmm, handler: &'a E) -> Self { - Self { dev, handler } +impl<'a> Context<'a> { + pub fn new(dev: &'a Vmm, el: EventLoopProxy) -> Self { + Self { dev, el } } } -impl DeviceContext for Context<'_, E> { - fn mmio(&mut self, exit: &mut as CpuExit>::Io) -> Result> { +impl DeviceContext for Context<'_> { + fn mmio( + &mut self, + exit: &mut as CpuExit>::Io, + ) -> Result> { // Check field. let off = exit.addr() - self.dev.addr; @@ -31,7 +35,11 @@ impl DeviceContext for Context<'_, E> { .try_into() .map_err(|_| Box::new(ExecError::InvalidExit(exit)))?; - self.handler.exiting(exit == KernelExit::Success); + self.el + .send_event(VmmEvent::Exiting { + success: exit == KernelExit::Success, + }) + .unwrap(); Ok(false) } else { diff --git a/gui/src/vmm/hw/vmm/mod.rs b/gui/src/vmm/hw/vmm/mod.rs index f65d60a01..068b87c49 100644 --- a/gui/src/vmm/hw/vmm/mod.rs +++ b/gui/src/vmm/hw/vmm/mod.rs @@ -2,9 +2,10 @@ use self::context::Context; use super::{Device, DeviceContext}; use crate::hv::Cpu; -use crate::vmm::VmmHandler; +use crate::vmm::VmmEvent; use obconf::VmmMemory; use std::num::NonZero; +use winit::event_loop::EventLoopProxy; mod context; @@ -24,11 +25,11 @@ impl Vmm { Self { addr, len } } - pub fn create_context<'a, C: Cpu, E: VmmHandler>( + pub fn create_context<'a, C: Cpu>( &'a self, - handler: &'a E, + el: EventLoopProxy, ) -> Box + 'a> { - Box::new(Context::new(self, handler)) + Box::new(Context::new(self, el)) } } diff --git a/gui/src/vmm/mod.rs b/gui/src/vmm/mod.rs index f3ebdbc70..5cd8b2496 100644 --- a/gui/src/vmm/mod.rs +++ b/gui/src/vmm/mod.rs @@ -7,7 +7,7 @@ use self::kernel::{ use self::ram::RamBuilder; use crate::debug::DebugClient; use crate::hv::{Hypervisor, Ram}; -use crate::VmmArgs; +use crate::profile::Profile; use cpu::GdbError; use gdbstub::common::Signal; use gdbstub::stub::state_machine::GdbStubStateMachine; @@ -23,6 +23,7 @@ use std::path::PathBuf; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use thiserror::Error; +use winit::event_loop::EventLoopProxy; #[cfg_attr(target_arch = "aarch64", path = "aarch64.rs")] #[cfg_attr(target_arch = "x86_64", path = "x86_64.rs")] @@ -56,20 +57,14 @@ fn get_page_size() -> Result, std::io::Error> { } /// Manage a virtual machine that run the kernel. -pub struct Vmm<'a, 'b, E: VmmHandler> { - cpu: CpuManager<'a, 'b, crate::hv::Default, E>, // Drop first. - gdb: Option< - GdbStubStateMachine<'static, CpuManager<'a, 'b, crate::hv::Default, E>, DebugClient>, - >, +pub struct Vmm<'a, 'b> { + cpu: CpuManager<'a, 'b, crate::hv::Default>, // Drop first. + gdb: Option, DebugClient>>, shutdown: Arc, } -impl<'a, 'b, E: VmmHandler> Vmm<'a, 'b, E> { - pub fn new( - args: VmmArgs<'b>, - handler: E, - scope: &'a std::thread::Scope<'a, 'b>, - ) -> Result { +impl<'a, 'b> Vmm<'a, 'b> { + pub fn new(args: VmmArgs<'b>, scope: &'a std::thread::Scope<'a, 'b>) -> Result { let path = &args.kernel; let debugger = args.debugger; @@ -296,13 +291,7 @@ impl<'a, 'b, E: VmmHandler> Vmm<'a, 'b, E> { // Setup CPU manager. let shutdown = Arc::new(AtomicBool::new(false)); - let mut cpu = CpuManager::new( - Arc::new(hv), - Arc::new(handler), - scope, - devices, - shutdown.clone(), - ); + let mut cpu = CpuManager::new(Arc::new(hv), args.el, scope, devices, shutdown.clone()); // Setup GDB stub. let gdb = debugger @@ -375,7 +364,7 @@ impl<'a, 'b, E: VmmHandler> Vmm<'a, 'b, E> { } } -impl<'a, 'b, E: VmmHandler> Drop for Vmm<'a, 'b, E> { +impl<'a, 'b> Drop for Vmm<'a, 'b> { fn drop(&mut self) { // Set shutdown flag before dropping the other fields so their background thread can stop // before they try to join with it. @@ -383,12 +372,35 @@ impl<'a, 'b, E: VmmHandler> Drop for Vmm<'a, 'b, E> { } } -/// Provides methods to handle VMM events. -pub trait VmmHandler: Send + Sync + 'static { - fn error(&self, cpu: usize, reason: impl Into>); - fn exiting(&self, success: bool); - fn log(&self, ty: ConsoleType, msg: &str); - fn breakpoint(&self, stop: Option>); +/// Encapsulates arguments for [`Vmm::new()`]. +pub struct VmmArgs<'a> { + pub profile: &'a Profile, + pub kernel: PathBuf, + pub debugger: Option, + pub el: EventLoopProxy, +} + +/// Event from VMM. +#[derive(Debug)] +pub enum VmmEvent { + Error { + cpu: usize, + reason: Box, + }, + Exiting { + success: bool, + }, + Log(ConsoleType, String), + Breakpoint(Option>), +} + +impl VmmEvent { + fn error(cpu: usize, reason: impl Error + Send + 'static) -> Self { + Self::Error { + cpu, + reason: Box::new(reason), + } + } } pub enum DispatchDebugResult { diff --git a/src/obconf/src/env/vm.rs b/src/obconf/src/env/vm.rs index 4a6155575..8af8ed4db 100644 --- a/src/obconf/src/env/vm.rs +++ b/src/obconf/src/env/vm.rs @@ -50,7 +50,7 @@ pub struct ConsoleMemory { /// Type of console message. #[cfg(feature = "virt")] #[repr(u8)] -#[derive(Clone, Copy, num_enum::IntoPrimitive, num_enum::TryFromPrimitive)] +#[derive(Debug, Clone, Copy, num_enum::IntoPrimitive, num_enum::TryFromPrimitive)] pub enum ConsoleType { Info, Warn,