From a372911f82fa1e7ab4eacd4303cddd1133608319 Mon Sep 17 00:00:00 2001 From: Bella <65065992+Bentheminernz@users.noreply.github.com> Date: Mon, 10 Feb 2025 16:49:14 +1300 Subject: [PATCH] Enhance UI and configuration for game selection and background processing --- src/MeloNX/MeloNX.xcodeproj/project.pbxproj | 20 ++++- .../UserInterfaceState.xcuserstate | Bin 29397 -> 49941 bytes .../xcschemes/MeloNX - Release.xcscheme | 78 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 7 +- src/MeloNX/MeloNX/App/Views/ContentView.swift | 13 ++- .../App/Views/SettingsView/SettingsView.swift | 52 +++++------- src/MeloNX/MeloNX/Info.plist | 5 ++ src/MeloNX/MeloNX/MeloNXApp.swift | 21 +---- 8 files changed, 139 insertions(+), 57 deletions(-) create mode 100644 src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX - Release.xcscheme diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index f95210535..84fa65299 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -618,7 +618,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 95J8WZ4TN8; + DEVELOPMENT_TEAM = 4TD3JXVDW7; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -634,6 +634,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = fast; GENERATE_INFOPLIST_FILE = YES; @@ -677,9 +679,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; + PRODUCT_BUNDLE_IDENTIFIER = xyz.belladev.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h"; @@ -697,7 +703,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 95J8WZ4TN8; + DEVELOPMENT_TEAM = 4TD3JXVDW7; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -713,6 +719,8 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = fast; GENERATE_INFOPLIST_FILE = YES; @@ -756,9 +764,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; + PRODUCT_BUNDLE_IDENTIFIER = xyz.belladev.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h"; diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/benlawrence.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/benlawrence.xcuserdatad/UserInterfaceState.xcuserstate index d95c76d6512f8a9579497e23d38ec26472381107..7351432d8eab3d455020e207abedb540b2d0ff6a 100644 GIT binary patch literal 49941 zcmeEvcVHCN_W#^_XLdSldO{89gk;kbg4Bc-Y9OJPH6#lJLN;a-AR;+FAdmMR@9Xam#bmQHcWytQQ|>uurd3sx`)X2C zcXNot9N~CQ;2fODDdS`2da8Zp-pUCvCDo-f%i&vbOpUi{e2jP6EKg~TFOWlvSGk>S zM-&b9)OpJK`3t?nNt`^UsHUXGW1t5E_-Ib$G%kz_=OVad&c&s0sazVD&Sh|!To#wj z<#64(5!^_wkQ>E~=8CvtZVWe;8^_JyW^(1+EN(Ve!Oh|7xQn?3+$G#Xj&fIVS98~M zH*hy`H*>dhcX6w^HQZY6A#M}*F!u=eDEBP)GPi|$gL{j6o7=_h=Js%(afi7h+~?dE z+?U)}+%Md(+)3^??sx7FL=cYzBqIgsC;)Xvkti0$p+uC8a!_y7pL+=nKm}+x8i7Wm zv1lBcfF`1;$c-*UC1?(+L|#;dE<)AFhb}_~qUdt82wj7&Mc1Jv=tguCx(%&Bx1)O0 zfEv+Sv>t6h51~!yDfBdY2JJ!bqP=Jz+K=8t@1qaU0rVmI2pvQpqfgMM=nM2EI*NWl zzoL`qH}pID14~%O3T}ft;m$Y`cfnCO8pq&RoPtwv8cxSO@i1J3i}4g(f~Vn9JOj_f z6?hK52v_5|_+o5eim$}i;A`;>_!fLCz8&9z@5GPbNAY9$ar^{+5-@x1OF1#D>!5`s+_+$JDK8(M>-{5cYkN7A2GyVnticbRFg}{LUJj& zj4UEoksHV|vYgyVZX$P*yU5*SExDgOMxG*1lV`{aWHWhb-h3ZEpC7~z z<_q~z{Ahj>KaHQwd-*E9hOg!4@)z@$@|W|A`D^*>_#60T{5pO;zk$Dx-^kz3Kfpi8 zKg4h1ALbwDpW~nBU*KQkU+1^-yZGJw9{yeaJ^n-fFn@&qod1IVlK-AR&i^J5K@*%p zfDj@?2pxqkLafkLNEBQ`ijXP{77BzR!cbwDFkBcRj1&rmQNn0ptT08GD!7FUg_%OR zFiWTwd_s+Isc@NK2voRIxJI~ExK6l9xLLScSS@T69uhVQj|qBYZ1-FZ?3>Dx7o>2k#IZZ5>WWfFsZm>S*VPazr~~ z9I=jMhs%-TNOfd7x;y$g20IEJ#g6fg$&L#hWsaE+!$BRFI~F;va9rtF?6}Htwc{Gc zwT|l@w>WNftaRMtSmjvfSnt^2c+~Nj<8j9mj%OS%I9_zT?%3*h!||5mZO6Ng4;`O4 z4m-YdeCzn$@uP@EBJ!djI>bORNDLN3#89z=*inoUlf-1vC3Y8c#UA1aaimx%juJ%|+yW#V#irPv@giua1^ z#Es(p;wJH7@p179@fq=1@kQ|^@ojO3_>QL)J2Mt;-v&BNlKTpr95e%G)NjM4U@_wk2GDHAIWB&C)BpkzbYHl;4sM$)C$#C`iEy zQFujA9Ezw&imWJ#sa3vy|CNg)&E}RH~Iag({aTiCCaVJZORJecI9rRURkefP+nFxE3YW8 zDqED-l-HH5${WfyWxKLN*{gh{98^A5zEHkYPAESpKPo>dCzU@{QI*t4wTl|1MyoMu ztQx1rs|jjXHBoh`S!yq}x7tS?qz+a`t3_(DI!2wKPEkGTboEm8GSyJ2dbzqty+XZG zU94WEUac-sZ&L46?^5qp*QjgNhty5#!|EgI6Y4YSv+67AtLg#uL-ix|p!%`;iTbH} zNc~JbtR7LnQomP!RZptFX}l(AZ8fJBpap87T05=17Oll-J+)q1Z>^8kSL>(cY57`z zZGbjV8={TUCTJ72Nm{8^rg=24R;68}Rcmv#i?z$OMcSR(UE1B+O6?wPl~%7cXpP!x zZH=~Gdq{gydrEs+dqsOy+oHXuZPVV?_GxLd>f&Sqm9@`YNL*c zsjRK2*v08w8?G(qhXkddhaKT)N!Bd=J z#Jim_-TUWebx-X+FgYzPH#<2qFKu9QZuiuI$=SKt{j+kiGP-xq&2l?~3;GWj=dGUY zt12n=^!Jw5&hb>%*e$o?qPe7XTzjqq*OBYQb> z#li0wE($)o8M@KNXbZn}LxWGJ;c`1eSUcsFW!`xOzJV~fqS9)Qr*dl3)q&L|b3ATm zGF%v3;u~H*qZ(wYvaux2z1cl`0$Va(e&NtmMq}oc!e6bXbt?{qhFp_Rr5s z?LQ!2ayvVuMy5ulXQXCErlsek!QZETlkK(0U?ao`HNuQ=BVs+Q!2oU`H;5a|6>vjfRffSTv@)#hRWp zi%lL|?wQx$Gp%;U3^s{D!##7n)pdiaOR8ozU$y(t)WQ^KZa`VNzg~Ov<2g5%w3eH| zP2?tVlesC}RHMDo!RTmoGCCWPYq<-#5^fq-%9U{*ql=MZ^fhJ~vyEyt%EM(k>?hO6b~ay3SrkzjO% z-!Qn~f#nr7o@$dK^6G}eKtVr&J`F4J)il-1F1wwfV=AYgv2eImho@{zLCbpV{#?pk z#)Yn0WyJ5~F6S0;S8!KOw4kRFXm-5yr^h#WL{a~8AR}*ONp)QVlv+G~MA1l7eX{7Z zMSqICu%V!!-NrTCbzEpYcde0F&n+>!F$80@ea2^Y0w^xymUB0{o$X+486*@k#cs5x zs@mfN{3>C+Fp`a=kpZOVG+XIInDBz5U<7Pmz|ER|rLYPfI_bicE7hWqu-W|dwYF0@S6vn;bPmM(1`XOyF|yvCnlw&WoCEp(W_5h z|3Nz?S!q*TRZ=r^0_+~o{K4gwHLF!s)5i|?RCq^>FX~rSHHJ}!&xv;;XF%Xo&-|*A zN~V089WdK)ez1R{lY^>)+cc_b$mIT>Di2gvSqdZw4~2zWr9R#Nv=c$8c5NC|6|Q#( z^gq4R4Ocrwu3_zVo?PUqsR6hH`18zj@=z|yF8AT5P%b90o;@6AUwm^vTucaOo$fl8 z?VSqNW;eUdmnOjNWOh5mHFU+XQ?q3I+th_XGSoyT-l4@)Cy_;Implsj3wQQIf z{l@hxuP&@8se{_`?b;4(ff56(ehi#22==RQ80-`%GT2|_y?Md)L!i*m;bv!tL7NQv zVHdIKa{1#~d`TvW4F~<6e@|{G zsQ6wW+&Z9}t4%fjcJ5AY755e@m?g4ds9Vpt5gPQ#|+6}7pC!kOt zLqDQFF%L>~FpdEAIREbI&M9;!N@Q&jjTp)BX>XdfRSzF7`<7Q9T*l3DDl-5dkZQ7WdMyv zu}1QlZ0B|cnk^Oqr-h-EnnX0oyu>6HZ>1$z<(1Tw&ScE0*fYPze0n$c8232$1OVle z+*7dAo|#}iRP3pqGm)WoSy8FC$}`ctXtrc@H#noG(Q6kx@*MX(Y|R(Bmx^nkzVR@i zIc(C63yfR>rG>~YTd!T<92px^8+1<~Z&X?o*Jn1{qU9 z_L^ywv!(6`ytuF>DQYoI3$y`jPv|7;cP$5sfyA*@)P}m^}sxECB{pW^zrC zcHnw`ZFMyaVOU9RW$DZ!tG&^l=`iZbQcFrngHnS_=6bAsUr|wK*OFg2#*z@(?942$ zD1&Frsj$|{yw_6d0($m0&7^s=Kw-6KZn?MCciLp`GA`;0)g^U}4Ar^CpvReC{gaLYQ8*V0la7MTN&glmeT+Hj1#3_QOnDsYz@0G0!j!i) z#>3QuToh}MuwMlT=w)?m`6~x{t4Da|6_(V3L}N~s)u%3OoKY~&ai@>dx*w0UdX!*H zFpAzq-B1!r=Gr0`O5vVDY4DSQG7;#APFpV==Cu%LYBRP1;DJ66(j-ie_IhhTp7dDP z;mJ8A<(19FnJ&eoqLI_>I-BnS08N6Q8OB6oy4#u7EHInuiGPJ%1Lk{5YZ>$nsGM6~ z?X6_`s?~}$BH)#)Q7-C%E_UA|Ul?0I?jXva*xcqAvp2>RAXB&7 znUoqi9iTncUF0rw=XU1TE_0)5Y|1Tg!N{8@l3Y5k!kilWZoOe?%9`$%u8if=iBuxW4czP z&my(R>E7x{YhU-ay6QyZ8`u^My6jKuKkM=&G}-M;fDu># z*tK9mYEoo!TI#~2$OY*+=}D1kX*t;o7dr7d=w>#VOhYq3B|@dB40+IWqr#YDR2tsZ zXeKHLt#6`HWn2UrUk8RsQB51Cg}!HMWUd0A4-5)!XP2`TGT{U0>}+LVk!wq9YO6u9 z`U?fqYS2<4&qe$D7mB7m6E&!g%|tDl3qs(0!)MeOwZ`1l=wh^ht3eBmdB(+{8ZKZn z@qeKlqASp1P~6a!#{7D8l~H$A#cgB&Kj1WVO#IK!-XyuW8qfv~-kgD|7S%f)$;zDD$ zq~x>R2k{!7J^iUBGXS)il4>)+hLmKOru5AE46q}%-39BE9h3uhLj|tpwy*DDsP>HY z?h`G6AyNOon3MhkV0`YTK@>M_4s%;H3}nOq%iA!%!3C$Y{lVrqhi0xa+QR)2BVk>e zD`=itlV_WatS%fi8k+eRrCRr+xrWyF%>8ZF4hPl&Tsx3byTY+_4%i2W!BKP(96wir zj%sjA;duEe5Nkg$b<$6`LvW0I0_47*xnJSD z5vaLmHz-{?G5{snRJYqQD2dMh&Y<+JxVcN?s(NXstf*~IGaNN)dYh?!;WRliJuNpg zof%R=q>A*52l+ESrL&oNHDyeJX|MnTh^IPo4$yDpG*2WG2SKLs&WU7lSY(YQQ+PoE zapH!6;D*4UGuSjjLR;H3q<|P#&!NR*#!W7n?Y;EoEw68TYwy8Nzdj9S!dfmA_d|5w zs=nqmds*&4cY|_`?nHMP)VRC>twi@2i;OE6yNZX-R)f?IVpcV161I8S{ja!Uc??YQb5Zs2gqc_o8U;^5K-a$LjF5@;33|APp8+RCMDOM>CqBw=( zREpCL*VN%9^ULRyU+mWw+|I;24@it2rW}Hu&F8H&^~*7^B>q{jjPjP&+19U&!h#gl z)Kz#Uo_aIDl%K%nUj&v{(~1U@(rnT;>uW(J9PYpudzlWQ!))VxX53kiju>~bl@9>E(KKdLX0W#2S4e9> zU!!k~yNyPp$gbc!bb*n;N%#N_mrFwezdhp`%3TEn2RtvSQiQ4O2j z=)N^O%sR{wU{G!Av1Z)c)O*|(hk_XdkUjvgJ_yi0#8_vnH#Qje85@oJ*Wxf74ra$N z+#U$y0pmf64jKo-$CcdvT`8>2iSA<>DU3 zqs9q}x=@rtQ87h}D02*3Klm2V+KqQM|qV ztr=yTBv<1pW4rN|@tASk_}*XS`s%WW3y@=fixuL6LsSc$%s8 zfy^w)%>E{Wv@H6_uS4T9?o%lFELiB=&F2I5&2sbR^X#T|W@F!|G&S!RndZ$7bZmtj zndL{a^39i+N^hy{cmXW77th4hIu8C3C8bSBzH;&h4DQmbgbsN(uvD zU&=I3Wktz6({h$#i32IV>Qehp{}t#*3LBv>rRki*{Hx{2O{E`Sju%HIJG1_cZo1~PISLNLWB-&%3J-G(lgj zugEN$4^v~K)m`{rE@=b48?VIofV5nX8*n3Djo09{#@ogY;~itCvCG(P>@nUo_8R*( z;B{av1Th3}#P{O|;PWAnXZ8cWGqL1D;~V2!_&jP!IPIESvwGw5nWvt>&cO=N`X&JD z@bXGv)KvgJXS~fip6>;>*^(JB;Lc|(Qve1#(>H@jaIH#!+zKqa30;_M(5j4e8Vd}e z#^dr%pYHPji*H@isioLC)n5&%Uv14yZ#6X3dc!;Q2R;nLpk|*1 zNzbER_4ozjJ-?`lUj`E--i%*?pDo7w#s~0o!0-eh**VQQ(_Y@~_-!t<0l$ggGCnd6 zHsBrj9phu;3&xBi*(v4>@F1uJNyrD{jn9&2nkEPO)ZbH4Q(`UNX*cZ#-o@_$*T;MD zKD^)f#Q4-W)ClU<2l#;TnQ_GUoHZ2JYGhTXwOj-o7$z{~ECq|bb^XhI>_H~g+AcGl zT0P+dQwO-txaKhzlAZWdpx{IJGcd2aYHQ2Orq$JWd?TIC>3fbX$RE;Qej#SkUHjuo zHW`O4m^gwz9}AQ=rl5ZVKEf^DiNA#BziR#bp_PAh3f(yTp@&{xHf7xQ?btXR-M4Jj zsp1gmo8PmU{|+BBzBImSz{k-_<7-et;-}g?ZkVTXM$ODgZ1b4x-s1}>*&N+B)vShd z?zN}*H~c57>395x@ttuDlo@;+>iOD;A2S^`kMFelil=$YEUPgQiDbE6Su1#ow9!Ch z1|-ZatJS?$Vgpg}0HTvNcrbC206f(A+1O4IXZ&Csrzq0+<1|)Gf=NgdEB?*+(PqWw zE+*|!uSU{=bR?aOpNwCPlTFN&s3Zzl*w4l{TIxSq%h`Z z{BE(iy#IjBo!0&-yntkzxc{fyc|Pj3yzfXZ=?^eWdXNi9PtuF@CVfa>(vReke2Tya z9#cdp;wcg+a!@2vBvB+&q--DqEI=j&WC$6`#gO4#97U>y$P_s#>OfIPL#L?IKd5Xv ze7StUXwDZZlSzQeWHLpXAC`$5V3}Mb8C<>z}{BMV7VsLE< zZ4I&agtd#V89VHf7k(aCaAah5JwP>iIhMt-?o>-6Vi&puaV9JVL< zY6AXV4fq(j*7%B|c7UB^sR7zi`&KX<&{>G?8}EnS!S?evliN(_CAS*iQPlY?&x6-# zdClmAuC38?B_6;%Md|@PSCZ9uC`GZL$8Z!yG5Cz7DEV~!yqB!A@spx%6h*g0&<9Yj zHRM6^5ZOc?CXY}QLs2|M2^4juD6tt%SCS_XfCn@X#{l(A?nbtnaf<$7Uphte`1gQ! zI|E*dk}TvM@gE>>vx4EbUp4Dfr=svKhQbtqGJT#KX}yB)lD%Xf*$*rDF8P1};S^Dn zMNtk#sca45TP8)>E%Z_H5wK~{M`7g;QIrn+nkl5P>S;~qqPr|TjU2INEW?_ydGnJ^ z)g`&C+y|~Xo;lMh>OeySwXJlvn;jc_`c$0e>(HyoLmP=A} ziuzL2Zv*+m;(I*i33$T9@D9fJ@@&4>pQ1ugn*n~A9|>%d*5dU)%19|FQ)M2%ZuV~} zBYZHhJsy}zzMt*!;lTD_9n60)@zy_E%j7%rQGla-Bo8L40Tc~v;G=oKtw9tGVa)C< zdd4~EDgM30cjc2zu;;rmupbOy&AS-b7n}j?BkhMW_#EJnd?ug8XHx{|JdC2@jeK`L zmvP7u6pj4bIV2ATJicFRw#RYvKm8`6@6;Q~>unY-{tDRMPQE`B9niYy_21D(3fKLYxS#p*cQ(##j|!%SAk4`r-w^jT)l?Obpc50-ou&0u;B`rLy&m7ePI zQa7^=xzl=%uB)9@UOC@Ac-R2!JARL^A&>+ZqjWo~9!sw#oQnX1~F-fnll zvN9G-0a_}YB(#EOz6cNC$M9pBRg<5<80>hapOjHFhM5W}nsyq4R;Aiq+vmHm#1d2e)n?li4irh_HmN$K4Sc|4-PvEIO(3axj=brpU zd^Kao6DgWxxKHzywwdmEN%eIE$j$6je|(hoZ_2 z{M~-`QO`H4U|Rpne~!}W{&X2wWf;$NnyhN9XA{uTaJia@!!@YB6xB8IZ}U4CPq>((1%E$J*b6|vuQkwb+V|>}zm6|>>+(BZd{i(F^kY2XeJJ`t z>!Kee@16Le)VIs?7tP(*`H89%O8M(fn8bBn5XbK=T_Zy23*98z@@dLe%De z=l^Ji^Q9D=#QcXpro~C%0nP!`iK63`tuLf{P)x!6ZTZLu z;{fV~@xlc7nMBb&6sR-VI&$AK3a8FbH8W6uqi-(ZsBVt);W`wqEtw zeR1x?OBS(14!_5zbC^99O9XI$gTo2odIt5I&N6?kpkBBI4-jq>R^Y+H9m1VVaDSXZ z{fiVm!ptfkQuO?3lDn`{xThKFpQYdz)dK3*fN4xvE8Hur6V?l`CXZ3{1VtcEJWbIv zO(-wiVxc^^2N>>&3>{lQyYMiBc8Z>4*zS)^v?2aKHH!(GEj)kD!t=rZA)Yh8lnU$M zy_M)KykVjD3vTE6tKJf`g*SzL413=a-WGNU?+81EUBYf*kMORrm!g*_0$FS`MXyi< zlGqlCUZd!Bindbp#s*=(AA1k*4Z=r&y&p5|-DYF&+oqWPKEvJ*{=we=0rnnc*b8*I z-NxSI40}%qKd>K)K)QX)`VH7y;Iy*<2)_yJ#8LQN_=BPy6ur~n;2dxYwUeTK=S|9X zI2;Oqs6%u}4w<4|6z!&HPoqP1XbeQ(rD*Tp4x)}AuB{`uH8L*UdV#Rx^1&O8^$W)h zTmJ1@08vL66b)}(w6J|)#Pv50^xmDDJ$6@^;cAky9qk>ROwQxz$T-h_Ku$*_<2>)R z<~&NGQ}P3@BhJy)1YAb~1Ka~=c??{VApHe+F%--Je~ARx~408;3fcfn+iVjnBgrd(W`l1QK;V9*l(+wM)&!hc> zoO+I7Pkp(g24K)J%Q4$g;h5v7ba)+Aj*A@C4loydP0=?LeM`|%ieO!iQS?1Uz{O5b z^uq>6tp$UQI>*J#SnXKIVDLv927jSg0A8e1@Rj_>Sk01hoYym2$8~^$jwKZRE`3Vv@d_HB+kfX*B%9H2`4O3}#%$DNM5DEf_}KhK-=>8N+C zW{toJB}Ko3mxyBxT1n9#XK)h<=zfFUv-=zmGT_|kxZeTJt{laPV%+F>$gv546T?|5 z|MvsulYl5swMN6$uUCbMqswQ^GzVInO%$)RG^5ddueUb4-GdY{qt(Ni@NhQ8 zG3?=3Bffcxqx&xFYm$on^aUcg7p)U}ioL|%Vjr=u*iXz8^C^y}IDz7>6hj}nQJh3^ zGQ}>IYK#4|l5N3Xunz2><>l!QKdBt9nrgn+r#R=f1IE{NroCuB{ zBZ`{hPAm^Y2;(^Ann^JfrH*OsP8Vm0GsSXomN;9i5a)=MqF1aEFA}RM&ZIbtV%VWM6nCdMm*O52UqEqBihEJq zo8mqc_ocYs17eL>E6x??aRhzN%i6cCGHp|b7z3~tj5AN=t*);)7m`XHGByE)m)%2rf5)5F3Z zI$B?0!B|ROIPGcpq_VtSECj0p(#w=Jha_23kOyAwWoB(K5D4G^sDxJYfU;*-c_Gb| z&%6g}MVYBdh&Q5M8^~($X5mipR`E7*1s)>aA>Jv1tOQt+4@Mk{2T(kS;sRqU1uG98 zPVq?Kbj^lmvEDRY;Qnssd3Aru%*ahm&rZwC>7JFFo7O$Mds=Jvm#p0B(^AtZF?KCW@LyG@|+x~22uo3UG+8OM2j{gtavEneA@?NF*Q&X|e*3CU+H8M3qerl(Y9R(3jU zkMz{^+{~=>wDhdBQ;S%hQqyv$r*_Y6u~lBMdQ<3jcDMbuAnt#9G8=7jxfdL_s!akq zlh0OGdTv^oC)EbjmqiH3TqAB4UlCswx4^*{9!+r(#l;klfg`Uq;#TnuahteZe3Rm_ z6i=fV5VnTmFPJD2e^yVd3UI%$fY0sBu}Yf1Gi;EntzuMuddx_RGBCnY?;KZ26@Z4T ztj0CG+*fKM)u58v86Mx50@pwobHPaStA!di0=k|5y`z}8TYQ&EV0$PYS1<0RcmlAZ zQxN0>YazzFoxT43otDDT)@3H}vsdFI@ly!m6Ay|Xi(vSeNbw|!CpU_R#LvXT6i=bp zO>qgEd6w15T{x_usMtNAe?jrc(e9!F!v^FR7mOU?9y(ycnF=tX&|oRSjbc ziVE_E4Hym8usST5{Th^5@f(V#8XhxwP(gp|`Y|x%h~HCuAxjDbA;{tnW(aaqMwImK zW=53MjI^Z4+_c<<_92G&i+GaF=pBH`_2O?7mo_u^KP3XAmpBPYnBp>uJrqxGlz2&y z92C!>xQgP7*yxj5>=8e6^$Xwj^4l?Az`M>=yeWZFN%ahmf1Bo8S;?$jZSPY54z^k> zDu;m7${E%*bKH^!6C~*r&on%{B_{;HE#TTp0aBn8Bn3}sa`vNmHpR0jE~gk6?0*GI z(U7Nc&o^C;9QSV;DO_p~;o4G!1R6pG#d8{@4&c0xDIP`3L#0SlCU(u zBH_9J8M3FPPM=m%0$#4CBYS#gPI`J;R#pxqB2LZ7&Fr3$b4n2l+0!A1?)21CkzE>M z^=7_1K)TR|_Br0NS~Fg9APbr@#XpxBm*>wr1}I-SqZVwfz0B2fHM_eG^WSh4u|$t? zJ~Ir@(zMCe1DZ zA#;{*dTH%!FJyX~Sq{hyX}nyOAa}xNN?t8wX-fgFRR&p+*vx>WoLpYT=ECbsVd0xF z`OQO%O;7!&YyV=_&OAqd8U1@|irAD>)3W|I_4tF_W3%$17Hj7~3f6yWJcnrP7VGiP zJpQwL&V+d9M$Kp5J$}faY4U^rukhaAGm9xFmzIG2#_ZpJ%#KX%p3myB8IHdR;Gey0 zF2fkA|1u;N2Z^;;N%frU%w$tB0+r8~mgP!~tAPamr8D8o!Pl#W*3@*}WwJxRQOcIR zhD+n&d{G)9jg$(dQPOCsNGg`bNMogO6kkm70*Wu8cp=4?QhXW32E~-(%PC&8L7HIM zYNaXG`Jz<9>}FS323v|3H=QruXc@}>35GeJF`$x{X&#^wUFknxlzec$_?N*j(#6t3 zIJS}&NU)k$QG9iSbg2aEc@4!&&fCeNbcJ*kI~zMDEe7ubd@Y=fN!P&H7{0F6*;oKh zu{YrL(v5J)Al)D>la^Dwl;Z0tzM)aNNxGSxEH0yX`QLuBDBTHK-CeDZ3q9XznQ?vqI3@wUDdkikcMpw59JO&y0}JZTo5bwXmZJr8l|=7fugjA9Vp&( zmPxZ`Y@_r9BiZ|<2c!q3honu?!_p(tqtav2;}qXQ@vRi!M)3-YZ>Ja(ZBU6okGh-U zl^did{UrOW6~89E$Vm1cn`GNcKJH zeTo|>ZfuYaNFP$Xn&J)T%^^zqR64?_?~wGFbeQ5b6tAWD-bQ>t`a=5B_?+T(6t8Ek z{fnd*|HFhEJEiY{q>i;FsWXJ4NhhG_53P%~4n?zR>1XMr1zEo`$hxmV`i*x{4BoV@ z1NcmfkBrR3d;Z5|UKUN_l^u+DA2{3N_9MC+4%92Rk=x2nIY17SgXCa2L=Kh1D1M0I zO%y*&@go#JO7UY914%zY@skukwLxY{v*BP=?kIPXu7S@kjC!B8srLnnw=t*%Yt;6C z$oKq{ubcwpE2mNnPQBJv$N=({GvzG!$)WgJik~xoKM&zUIL8^}>|if>FS#%561lhB zhvFA0eyKt3C+AW8GR3c-H%gWV$wPsX<-u}+JcQ!S6u(08tBvw7c{t;vTPS|*Z|9?O zG1pce)0#ZJxAc~l-aq)|N4)NdFU@=YS>U7ccqlrdbRz4?<@9a*yd<>mLT zYT~2vWZ7*}vOJYh@>U>4xr9+NextSYaeH=j-^3PvJ@O2BmPN_sjFR6x+vE1KR>=z( zC0`_0%RaeAu9fG?^W^z*oeXj_!2Ax1-=TOX#k(lpO);Dzyi4(3iuY}hFY!~dVew)4 z3P#EPj8+uC-^7QH{6on9144$w<9hifitVgc@~vm%!}8toDn`94<$EapfZ_uUa=i@v z7+CS4^GCh+%J(tqT_>-XH&FZ$#Rn<=82GS!zx)8>!=F(6={fP?e?OnqIi||mDL)D% z`B-a`{Dr*JtJkLdm+r}YT-)-&o@*KPf-9bU23NdZudUnoTH=rmjZ#qO`lXXsHdF7j z@(XN|p97~v{24eU$}dX4QG6H(xHa`^kv0Wxk+)hz`#K}q&l%AIz5>l3ZuOM?$lLOM zc-fqID;^@;$xk2w@*Z&ocoN(O4g=sS0FDC?y8Q>mUxMp^=}a(az5Jg1zWjlFK>kqv zNIockEW=uSO^HfLEG2y?nLtSmB{xvAfs$8R952X6EQ9`6|I^?$dt_hAKQK7@O8#2@ zM*dblDt{**lfRdb%O@y?GrVspK1wl66U;Ci-5sYGuKz&sj~nD4{c!ZFd{X`m1Pe%W zLGe$vU~!TXkrD|63j*oP*$Lb~s{Hv>x;30?_6F^ooDIl?bH+Y<{Jk(w<_VmERkbj!Gwr|DXghq&P46EtF^_j#1b#C6;m3 zKY_v&aNgTU3D=6k0(yLFcP&{-12j`yN{W(738sWl!Z#}E_<)j0i2#5`9ITJ$2tDVZ ze*C+zw^QlCwN)-?jb=GdA2{LNKJ=>F@}7Te#*{pWP~NHZhN6917yY3Afdf6Z6cpSL z9rVO2{l@HLv1%?$st7=L+jG%h8DwIVG7vC|C}*2N`;p-av&ktVl#xoIGD;b(6e-2Z z7-g(7juMR$AjCG5w57yJNdP5*lmt-{Oi9QF#cz{SrdXLW6=stop?*px;a09pN}~Uv zpvSr$@eb5=tT{Y1g1!s$51%drCTggN;*-}nUcsx1bK!Go61TkdQa=3t&?fm<8M&bSoFG@(QC{(%-DU(b1 zDJi0)7|2!~sTMM_9Ye|3znN^+v0PhqTx(i9L)IU4A{3p}y69hK{ZXf?B^KFU$jEm5 zxlGv%wVILbOtoB{rOs9>)H!OU>Q$@Mizt~$$s`Jyamf@)AZ)`;$%T}ZP%@2@(haK5 zPqy>a`7CR(x`2^wnN7CSDS-@7ENd~T{)cS;2V{ES&MD*xLIYX zaMfGXTPc}A$;<|Ig?c+B<&?}mZ`@X0sn)Yb?g7IHnFXdNvJ^~D2$bs9rYE~!_o~cV zr>;}it6=o0pkxjum5glfSDCercqyqmC$jx_)z))XnRlvSty9lnt!tgPc&7^1I`s_J zy4Kl{o3a(#6Y-q-qD8+iF#7cY{Sr9A2T7%MvSa&^E$TareqU2xSGTHfsN2-->YM6Y z>f7oLN@^*jj3)CanNLX_B^Oh&fD%xT7E*HQ26d;Oe&1F1vYblldyIZBv+0*ovc$@% z1nHLlF;kuQh<5dJM!ygNXV~-$(E)#vQ^{WI;85X zSA#4d+8MHdoFSEx23bI~Gh_idODZLMB06ZDP4d+`G4j3s9HuT-O9krH;XuWH}`_QgRa|H&b#8B>>yEQL=)P+c#)w7WHabmb;ji%c%Dbn|klE z-Nnede~9<|Ghb~G5U&Q>%bkAW)rJD`{-wK^Hd-448$&D7iYd99l9dhGSPhJi_fP_F zZ#z%6Wo@!%o!DyZ#FnfA=AoGW3ZXecQ{hp-csRr#a?Qu$; zrsPFN6zApjOWHFUoYgjJ&uY(U&r|XYCC^gwT%-0Pkl@RdJkLn*1=iZXOE~91i|2S? zv{QQ>=xS?gx@w)^Wv8|sioV&pXzR2w_9XAnb}rtM_7^%9Vv103f-=xv6N+ZFF8ZYB`rm@~^c(Q}GYum)$6ry) zj&W10V_fGLdn$V9y-Whudolt(c(w_&AIaATz-zj7Fdu(XuMeaI{CB26*fqJ zkk|~V9x?tM=+;n5J~NY}=)?69@HV&+@UqtieK@=gj)hn2g|MZ#00Tn?3oAROUaXIW z2w8TmUI)SKbHinooQO25r2R5peX2f%)`RAAac6q2WqHjfT zl9F#>X!=Dk3Dvrfy%3YVP?SYMzxC9bOMpm@TGLjm&xL7&5Km8oUdt`E>zc1$+*B8s z5{|KHYRhfrUePZzdbphlsqkO-w9M3G_#BX(k)4^AnVy%LnwIajV{hDMsEu78)vthP zYyEP45hcedInkhBsV}Ak)Y~7KW6U|%cUsZ(tgQYJMm!)Rzjf2r;IGqt{y|?kiw)YG zk?YNi_dPH#vwXY>-8J;oAjIYTl8D?+w>Ls?fM;*fbRVZCBIT~lETYw z$nTVZx5%HA=hky^I=r1gzgu6W*Xs>>BjmwqOL=7eqCBQNp*&A{0XRnd#B$$&it-ud zkQWP*v{(^I5OWJ}(y)VtA-C13mkWI3%HjQ`kc$Y?0$Dd8VA#xlRmt+aoLbh7+=oPx z*5y-^-ArhD7~Z>m>QiQtTJ~a@RxLwFGbE&}@r-X;P-i;4l$B*mvHF~xo}HaPFf~0d zd0>8SesX5_)V$=}?0)IV=>v1}v-0x>4D6ntImX-tlkGZKK-NSn9y%>2DZ?VY$IKiE z_98r~KL=sy`cwMT`ZM~ol$R(kQ(mFGx>|o;e?fmye~I!M<#o!pp}c9Y3I#f8nFFV| zyoSwjc&i&@*(<%-D@|M98d+5XcVMPdTRr7Zzr$W_UOR`qo7}>oBF_x-b<$(ZQ0MV! z+4&H(o?hbo(i+z`q&4c>^*8mmDDR|vDCOHX)A{D zfwrWg))U>=!gOww?LMd<)DNAh^PlO5^&^xIqkK5!BMet`AAb(OQZ6zUbCEmsuK|v} z(Z6MI#8Q2Y4B*viW-5==)ZGXZUT}!Y_!xL+EL)@rF(uXJ%ipVuV`{ur<72$jSe7SW zAcq#Of}~9&iU9l|`;ouUJCa;n?e*3e=s{hw8%(zP_Cy7(oD~1L2LQ?{?}O*(It?bWChqd;(l6f>+@{ zThj+tl+0j_G-tDeS|Fv(IQITi#=U^WMfbH|(QviX5GBK5gaK{3SmFWyi@C-Wur~7G zb)vi4bW2Khr9k=+tKH^$n>KU1)9;)zz|cSgUBMd?8(CUb`$l;Cm?0aAp*CjcbT>3e zA{Sx=K?Vw|3O0zQhe0J8QIucIIx-Nl)$GqLBR`&$`ak_2;1$fbvxJiG^kY++ zRs&>{l1BYI{d;aPOd$ry0CPogD|+?)sO7pifXJ{_HieLPa%oj4l0(k}S)j zSu(n>WX+8!wX~5fQRdx(OXFvQ)Z%qIxnkG?Wn2kY$3?>L8u*>b^?;w$$P})S8xGqh zf{WskxHP!h2e!;uZZbDjS_c7;&q$l4x1>D~CHH~!Aw;u%CVeh_31L+U5SB9#f?8Pv0Ppy?~uPzf|YFWw7f~V*>v4{N!hKu ztL#(W1OJ{6m4nJB$|2>j@{4j(`Ca)_MJiDRRRk9j6+A~G)eLozIuVYc7pTkC)#}6Q z3vj6QmbydTsqR+aRrjf%sYlc=)UVWU)T8P#^|%(QWrA&WhE}KDqiqBe%@f*FU{!fe z+oHX$y`gQ_-qLn}!hcc^)>HJJdM~}V-d8UGnSY8tOZV#YL9kn;H|lHjb@~Qc731$GNe4NMQr49pF@Ah1_ppTJ3h<$-ep7Y1Gy zNCOuIUK_Y1@cO`Ifj0(j3fvO7Gw{p6lR-j|GpKz~$DqzZU4o*6QiHOBdI$9l$_wfr zG(2cr(1ajQP-T!2bXCx@pxc8s1w9`0R?y*~qruMLkl^g#3xazF7X*(D9v?h0cyjR6 z;0uGN1$%=p3ibup2G0ww3tkYsF!=7^CxYJz{yO+%NN7lOh$|#DBt0ZEBs-*gNPftG zkU=2@Awxrkhl~uF5wbMorI1fT`A|JHFf=$cG&DRkCbU~`fKQKp?`#N zVOm&7Sa?{wunu8aVS~fQg?Ym+4_g_wDy$)Fb=calbzvLAJ`6h&_FdTbVJE_V4Es6k z*KjdBFg!fGU3iD^PT|AD$A;I2UmSjW_}cJw;Tys?hCdema`-FZTf$!t-xIz!e1G`+ z;Xg;92uDQQi13K~h`|xQh@}xXL_8evLd5G4Z$xa5cq?K@#Quo)BMwA-6!CGyr|qP6 zN$rZ;&1-jeyJy>NZMU=C?so6C+t=>BcAvKUtlg1zU$pzG-8b#|_TlZ*+7D|#q5b6c zQ`?ucFKzE>Z*<<;`B3L$olkWBvGXsTPj>!2GCZU{AH*DvIU4g@ zEQu9j#aKDk85dF3>k^k8R}eQT zt}M`IesTQO@z=&LiGM!+wfNof@5b+oe=q)n_z&X`#(xrjH2zrp@%SGSlmsmy zBB6ak$Ar!aT@$hsx+nBV=$Vk0Ffw6OLQ%q)gb4}L6J{pNN~lPvOIVPwFyXRC& zx*km&npm7TG0~k^o46+N;l$SxwBfM)I!YgUQE}e@OnrrMjH1Kv%FU!qwi@(bd`I za`kZaat(A1c8zgObWL_mb(Ok2t{JX!m)CWvYmsY-tI@U2^@8i5>l4=@*AdqjuCH9* zy1sLLpQ5JdDQ!~%Qi4)KQo>RqQ{q#)rgTe5PDx4WnbJF@Z%STDamv_~(iBh1jFj?} zxheBgE>5{5<(ic1QkJINkg_}FCW_^^w9M1^mgeT(mSPhgRGAk>DlQQr1wtmm!6+KJ$+I7vh>^1 z??}HpeO3Cs=^N7TPk%6dQ~G-uT1Ik4c1C{2*o^TRB^i|&G-FZ5vW#0YZp*kM;SVPMKXYqcdYO6EYJslQUB@ z(=&%=j>sI9S(G^@b6nob>U-jsQ7=K9RXGoQ?S zI`i4gt(n_0-^_eF^MlL}GY@8dl6f@qSmyD}AF^)WhjStqi7%64W4Wrt*kWk+PU&+e2RpPiYVlbxG=LH1+WFK54!y(N2V z_K}>JoV1*QIR!bxaz^Hi&KZ+4K4((S)SQx>vYfh{OL8vFF>)@?xiaVKoNIHI^_dv14k_eI?sy1&%@!~fUBdA=ukI9%9Kx5j8)ZQWX1jT)_0!wM@v zAUuqRCm|$2z*QxL5g?2}fB<0z2#^pq(UQ7Tts{;)>fX_~_o{YSwOVUx)xKWW@5_6> zod4mR>%Q|I=lz!VN8Yo%9$0T!Usylb0N5bd5ZE}_1lVNQG}xE09N1jgJQx6z!3?l^ zm=$J+d0<{x6D$Z@4a>l`!gj&-!uG>{f}Mb!hMj|*hjqi=!so*2@KX44xCX9+Ti|~9 z8h8f28NLU80R9vF2>c}cH2fU=Jp3+#k1!(Y5mtm9;X-&2UPKcjh}ekeKx{>9L+n6w zB6cGVA-WLVh|7p;h?|Hzi2I0#h(8g3A^t}6AcrA8MNU9YMovZMBIhIXkr*TnS%73B zS;%4}8@UX*0=W_?LaLEkWG&KwbRip&K4cT}Ir1IyKU8njN2sMJ8Onxopxh`gstFZB zg;7yd0+mLsL3N_`pngQ{M;$~RMjb<)M4d*RL!C!;qn_sv&tH&VoUhGK8Fm78HWt7#upqV=TZ%2iaYQ9oCGsU~O1C)`<;Z zQ`ptm40bJc19mfZ3-$->0qh~{5$rMSE$naDC)lUh=h%1H|8Tu=eR0{ik+@N~F}P{C z&v9SiX5tp%@^Ek*68FJ!iKF2dxJ|g-xV^Z2xP$nKcpAPOFT*SFHFzyvk2m7$@ix2z z@5X!aYw+#(wfOb;jrb1yR{VDSPW*2CUi?1%4g8yei3ON~Wd*K+%>`!)o)88RMiNF7 z#t}XxOe4%DJARsIyEGN_xGK8&!orGP4y@Z2= zLxiJ*x9RIr-VNVe-U02-V=KhKO*)g4kXSeE+txtjl?K%6S0HXNjyTlO1w^d zK>V5bg7}*F5AiLjH>oeFKWQLoEGdtKAfZSY5}rgL6_Scb0BHqj6-i8zkYuE4l9FT~ zIY@4jm()ZGk;0@1shzZrw1KpV)JZx*I!-!CI!)>(-6h>8JtRFMy(GONy(axr*uQXK z;o!odg`X6TFPvC7xv;WOQ>ZJ{7a9vs7G5cQQuwU!Md7Q$p2B|%-;;ZjKOzqx4<=6{ zPbE($&mezE&LPhw&nGV+FCyoW;bb|DJv;9ikH$v2~k=oDau;P z2Fhm27Rolt4oW9wH{}@RH02!S0_6(jI^`DSPEnttNky}Z78ETif)yc)@I}NTa#2wc zP*hX2w&+CBg`zt}FN*#udPf~hoj{#LolTujT|iw#MNm;x3>8OZQXy&ybt!cvRYa|# zR#TN!HC0P>P!rS?buD!Rbu;yQ>MrU<>J{pB>c7t8G3<0u$Y+xoZ8^{Ib z0}FtKz+wOc6ah4V2|xfFC3k{736U>qi?%8$!#XjiAk-&7|ef=FoC!U(puQ7Smuf zBrTtYq48*XTAKC~?Gb$_eIA`om(bnx5Iszf(&O|DeKUOveH(ozeK&nCeINZ4y^G#W zzf8YDzfHeKf57O)n8ujLSjfm@z!_);j#0oMGKv|cj1O}yL&~UTs2F;Nkx|dEG8z~i zjC;&J%puHi%pB$%<{~DZS;8!33Yik7f~jI^mmE~ zJ`2mDu&68=i@^d}5UZNyV{K)fVqIn3VBKcjV?AU&V!eU-LIa^8P!^O8O@O9DGoUY_ zS?&hAm=Ov1M!pTg6th1MCj=UiQt>zNMo}b4m+KxuuHI#?n;jh0m%rrBcLx@>D!EPs`Ku_VP~fx_I5Z%e-s6 zySxXyN4#Hozw?Lk=kOVP4xh`f;0yUH`EtIJujXs{^?VE8#!vA#@;mrj`P=!O{N4Ox z{ImS?{EPf6{M-C{{D=I<{9h}^Rgfy=6}k#Tg{h*xB3O~ANLQ?>Xs=jT@k_;@74HRo z1^oqs1X+R+f{z8G1>*(N1TXvxFmrql6QLlZDfSGlVmRIl??4T!<8+g}a1Dg~x>_g=a+bMfoC@ zs6@mOaYYrP4;!3lrKnOQ5y?djBB#hLY83fI0a3FkEQ*NYqNFG-`cZVVvRCEQN@AtB z(qGw8dA9QR%D*aKSH7uyEAA)G5@(A?ibsjZh{uUP7ta#U5ziAZ6z7Q%VwAW{Y!JJ| zK5>&cB#ww<;-ok&?htPk?-w5xpAerGpA%meUlZRH-xlAk8dQa-;#MuMs;;tC*{l3j ziK_3bwpQ)0I$U+M>O|Gqs;;W;s!LT5tNxVqmkg2&l?<1Rl#G^)lYAzbD48OeE`dpq zl6(n9f|C#=g%XN{Dxpi55|%_J@kxG=T$21Fog~Femq^Xhr1U%Kdg&%Za-6(CPLfmQbU7%8nQ?p58lx_|Yc>LJxx)!Ee}t8=Sq z)z#IZ>dxxhiav@d3XFoMSfN;@5Gy1KwZf#ZC>j(_g-794G%13LX2oj7cZ&6jO^U6G z?TSvtZpAId8|46HmU4u0lyaCIx^jl{OC?ijQGTo3q};7Mqdcd)s{C2mqkN+p zpc<;mQjJiJQGKEsubQZuqnf9Jsfel~6`*3MidChmaurV{R%umURg)^D3ag^3get9C zqiR>JQ*BfoR2^0wRUKEIRGm?EsV=B4s;;Q6scxuxYR1+eYIrr~n(t~()%>O&q@JP9 zRez;ks9vnbsLARgHK3-enQE3=pkA(CsjgJZ)CzTtTBDAsJJmb}w~)aB_AI);v=E7q}f9359zp zN>{0K=)TjP(*038qIPj@d9AKCQoEyef9+4TM{1ANcGX_1y;*y^_FnCS+MjEGsr|jS zr}mw`m%gulpnixxOP{Tuqi5)O`X%~h`fv1Ny;NVVSL!YL27OQ;)hG06{Tlsx{U&{f zeye_){+9l|VV(hIAR0J^a>Fu%++Z~{7<`6+A!Yd1&~8{~*lgHh*k;&aIAXY9cx?F1 z@Q2~K;ichk!#{?%hX3mN)b*?Tv~EJ(q`E0})9Pl_eOWiFZgyR6-Tb-*b&NV`U9fI@ z-L<;^jMI!bqtIAqv>RQNUY8!9MvE|tS z8^gx3mDo5ouC2nh#J1eF(pG6R*(^4j&2DqrJT{*#U<=v8wumie>$F|5{o6310o(9R zgS%mU!-`DnXm7R0>`8mt-eKQsKV&~@KVd&@@3vpEU$x(`-?G1VeBt0YmN=x2dWY4~=!iNt zIXWDB9S0qU97i3e9A_Qp9o>%mj%Ut~oCBPLox_~j&X1jAoS!(yJ104(Iu|?PPNXy6 ziE-kcL?_u<i7uQ==rXwyu6EZt*GAW7*G|^~*CE$Y*9q5Y z*ICyM*Im~G*CW^OuBWa)T`%3)?geg)o8T^VQ`~en=q`4%-7DM*x6W;Fo7@(+%k6Rd z+yQsUz1{uTlkNG$Gs6S(AUp*gre~RFg-7bqd(0k-r@`a)cs)&?pl7wG!*kek%yZIn z#?$5L_FVQ{^W5~@@!a>k_Pp`D^}KKF)!4VOf8(IWA&ps$*^MI`a~o-m)s3OX&c@r` zKHe!_jF;zK;a%kwdnI1A*W|T$8@x`h$LsaRylL+mZ@YJcce8hk_Xls6_oc6wub*## zZ?JE;Z-j4@Z;bDA-&a1E59veua6Yn+>ZALZK9*1K+w42%yXyPd*W-KR@9WR@PxF87 zpX*2XF@Bt%;HUVhe!8FO7x=6E^?sY*;dlGJ{w9COANEK634hwZ-QVfo?ceL)=RfE_ z>_6&1?my)}<3Hzr(ln$gw~5)LYKk@OZ@S&|F7Rn!T3|+CW*{f5>=zsu z92^`L93IRIa)Rz)DA*R<7TgisA3Pnr6TBCE8hjai73>MV3-t>14fP9+3QY+u3c*6i z5ITel5kiHbq7W^_3_+n)A#q3&l7*^6s*on63+Y3~kU3-tr9=Be51RWm&upeQE1Cn% zTbj={UunMHe5?6R^DoVRHviT9y7^7>yXOB|hPI4o8PzhjWqiw|mZ>e%TSzU-TI4O7 zmfDuO7ITZE#of}_;%^DG9B%nJoE07$o*rHthJ|rqdU#2ASy&#f32VZ&VN=)=ZU{TV z;qbTNb>R)+&EX%yJHordd%`EfSHe%i&%!Ulufjdyf5Y!vd$)enI-qrM>!jAHtk|xe(QqPMXh4AuZ|mJi|H!NeIkGZhi+CeVkx-;1l8UU2tdDGr zY>s>%*&5j&IUG3_IT<+@xe&P&xf1y+IyO2zIy0IRof};cT@-~y5m8DMh?Yf#(PhzZ zqN1ogs)*J^wb9yWJbEPhI@T*TEH*hdHI@_0ixtIySV^ojwmc?^iDS~3GNz8{V)~dn z)*6e&lCiefx3Tuvw%DH7f!Lwg=~#E{YV2O@VeC=tm)NUVPwY+XUA$MkPkcx`E1n%6 z8J`rN5uX{K9nXy~io@c_I697vFNsIvhvHrF?)atn)%cD0t@xw()A;N7n?&El;KcC6 z_{5~dl*IJJ7m1mPuM%G;DiY#^JfTde6Z(WPQJ=6TIuh3t4-!uj&k{Y!-pP-WBa+jT zUnFNG=OpJP7bF)YVM$~XodlCmlAYuvxyg#;lH~H_%A_bMPO6jM*to zsVS*hsfyI{RCUUbYDn2r&Qwb(m0F$3q}HZ3q_(AYrgo=(OdUx5l)91nJ3S&@kfx+r z>Ebj$y*#}#U741oWobj&nzpB1>Be*@9ZpBniF7J`JpFgu)V7?qIc@MZY+FGasg2Uc zY=hd^ZDnoTw&iW&HdUJ;(Wx14zjN=M0TJun`~B(j{rvuT=L?v*&$-Wf_H&+7 zeS1r@y;G$+NFV|eBta20!4NDltTK3(wZq*Vf+vI1+jwK2m1w2zPxF6CvNmQE{&wtL|D#BgE+F^2Fa#uCv)3=vDH2sIH$ z#1jdGhR_ldh(y9b6cZ&xDPbha2oq6Gn28F)N;DDEi0MQ#F@u;z%qHd#-Nant24XRB zBXKiv3$cp0jaWx)ARZvL5f2g%5f2lO5Zj4IiI<3-#LL7h#4h4h;w@q~@iwuS*iRfI zjuT%HXNhl!bHsV#67eH(nfMhE2q6m5$OVl+uE-5}qp@fl@Y>JQ1g19Zts?I1}gMB5c6LxB^$=Dr~{^ zxB)lfHf+P~_&VH$=iuw{e0&35fS2NB_$Is@ufTWUd+-)~KYjpj!;j#{@ecenejdMo zU&JrrxA1QKHr|8Z!SCY(_y|6U&*Ja!_xK|I3I9eSk|tfqVWb=BPKJ@;WCW=sBgrT- znv5Z1NfoIkHDoF|kxV0XWF9$*)RU#8kt`!8lT*k#aw^$KPA8km8Ds}(C$A?LkvEeo z$yMYUaxJ-myqoMH?Tars>ZP_(4^rEyN2#Z& zm#NpNx2Sih_o;)_N7NDOOX@4?4D~g2mby&+MEy+tLj6k1X%E_y_M%79qv+A}7}}fm zqy6b%I);v=RkWIpqf_aLbOxPCPoj(H3c8Z6q8sQ&+DhL@FQJ#x%jlcv<@C+;E%dGQ z3VJ2IioT6rP2W!6MQ^5i=zHm{^yBms^po^+^lS9%^c(b>^d5RI{T}@ReS-dsK1qL0 zpQ68@&(Pn|-_z&mpXp!dU+Lc%%rML_M$UvY5sZ?FWTKd8CWeV+RE(O5W3&cE|eb^8-lnrCU*(g@Us@WtqnKiOytcfjW&1?l*$yTw|YzPGzUDHnyF;j_qdW zvWwXp*(K~!_GWe^yNX@UZeTaDo7o<=kKM{{V;^OoWM5);vM;l*uy3+&vG1_&u^+G> zvY)WW*e}@A?3e7<>^T`Fqh*YYmC0l-vSG5}vJo;@nVZaACYO20JY}O~0kS|@kStgh zA`6v;$--qZvP4;uELoN!OO;KO<;f<=^s*vZsmvm)mo>;5WmZ{}thqe6t*fQw0O3lw z5$=SX@FGT67|LR1TD$Gl@Ylgd&A|;V7Q4Nd@E|-n%#ppsNMaO6@n}64S|<-q%udoI zsuFXf)#@Z|bV8;&H##X%l^d;1(q?NWXyOwSlQebmk^1bM3R}lad%LB9$$8ans<6O95+;DEh{X{SkLWIJkLqv63Mi@m6MS_jC1 zMzf`*%WBWj8=Q6t;15^VijdXwx!cjCm-A2fyriTske0K?dE2CGXT}eLkHR{ z^_iBA3X8L?qPcT=S##U87OTlpUnlnmz>J1YkW~FU0nf8+ZJiyqmKJMAojgtG%DGE} z+Y;iEGU6v>Yog<_RhsC8xCvR&NpZ02i5Z!>N!eK%Rd!BRo!tAXx%5v{RwwsWDO8HM zcvXTz9XCM@pRfGp;yjBaB8!N6fJi1%h*V-Ckw)loYa z>;rHTIYcgzM@%C0L_VBKA)LiH&dN1$Gr1P74Nl}b;Y{Q(sj}&|*#^t3=4lq#TSeVe@<#JR0w0IdH_5v-YNCdyB_?w|oG&+?^W*&Q zCF+Q&&`?h_a0)I48cbZJusTI$gRRjT1KkxgcgFNjEvEk*Vdwt@M4TS1yv*7HE3`KD zzYJPSUWcu#U1|Uw$6hB7>hHv0>uheY+Qs3-kNxjCmobxQC!)3xEkrBPM%cIjE|3f2 zg0~RY5gmk`xQ+|q!nknw4bvZ)+uYJ=?GSN2v%3hE0@@PHsnBBY?C)22Tqhr0-qv(Y zU~j1pYh$^7a6iuZ%pPi3!!_U85A5z%Vg<3X zPCgD!PayUZLCrK;+dHgw;7k@_7F-k;S?q!Dt9PoP2$K}eBuxaw1diC5(Ez7lw>AQc zuvRs9T3f}%PqsTwQx8w4Cmd@dj(Nv)ItxQUcJMI%Q1kBa&mhhP#&yf^;of6wv#sq`=)A1~$PCUo zyBp4+xj|9bT;E~ofM@WckFWINh@kCq1h4w}3a|RtR%VIpbGE>t04$&%>=^(G@`9;) z!{ZRg<55#?gvVj7J;UK)gmW&t9)^dJUeMu)sB(dFg`Q%Zt?#L!RpooH(5kM=1MILD z!npuQyc1;K^#Gy~W;8-;77(*V=poTLXwjOUWB^F<-75BxS||4ux)FL2MvJk}Zf@%A zP0Q%jr3Vp?|AJl)mOk}nW(B2RCw&e|Up-a&Bm>D843m=EZ=47B_e z#O*{c==YBjPY_QL&xtzyyTm7;#a|$PC4NUFlA%$cvj>639tGNZGHB@;C>IqY6X@o3 zs1dcI4m1a}@}+1MT8lQK9<&v0M~|T$=ta=HKR_R$6X*=++?S-uU?lw|vK@aNf6yNi zZLKD52a%LBr@h4{3bEp@&X(pjtFU&-0uqqjL8pDh8e%Q6=x@W<$?NM(oq1ViwKm&q z8W;mOQJi+*>lH(qy4$Vx36A0F%w=`)>H#ZR{3?Z_BlH7_75PEM36E#P!w5)c`liGRvxO19oL;Y3X+MlT}hK z2~%OB)0d;sH4>>O+owipiN{ zZRiqYL{8hR<_=q%pdd@5NGtl3IJJd1L3~D>BtGY|xk+3BSI8L-5T}VRVQpUlmVaG6 zFlMNv5ske1>*3AZ;w65LK-D0yef-n)~@wdcxprpVl4RDCE&JKYr zg(a0(nmc-l?*%^bmoUz$Tp)fRzUK5?K9^T%nl7N5VuGA@w!R@u6iyfB<$Uy;_^3#l z>bTTKL6uY3B^*&S**X*w9;AtrMHrD_q-1n-Sh{-=CKh=u_(S?nYGx2yCl80UNL1?B z-GPM-7V*7ECamjk!%JffL&K-^PGI!i-_t&a^!(LxpL0TRrG;+Ihm*i)zTldPSDLl`cY+&YALFQ zF>pd%4V_&bpqK^z6`bB~2ivAj9`IK{B5gZo=8FPAdqm@rAM!^Eu8OPXYPi}hC=dk^ z*P#$@GB*`;N6Y^!?GfZ=3}|*Jnw!#tV!67%)a;5qsDP{VHTFMu70O&p9YFWsCzN{( zA2G%^I3zSitw~G;n@e9PS_Ts7c<_N3%(`J}{-lVHJOP;ul{DjS%8?+Z0 z;MfK_7}z;cfQy4{DK066Vg3cw(0L5>FtklXU$J-ao_i4EKp&0(ANd3@{0qS^UIw1< zR`7r?0F8JH=q4Y7ggpu#?GqrZz64G9BKWg^0?zFU9&7~)0Btw~eAtt~2YoYIhczosYw!f{E2rRY@DXpscjITl2mCJH zhd;!J@W=QV{)42*5HdqT#ePlMI2bj_$$w!PI(eW5O%QmFmaFeUiCn{9@*J=xQ7W+l zrTr^wvJtFFjgzDfO4cMh@_%McKD!ltrrX>rlkayKHr)Mc<8g$m+Z2Zu6|GRmCu+1H zm;}D0$hLx457-p22!&HbEEHP;8*HsHpuU1?+h`N)rOt-w(cre5X_;mXRLr*671lX| zN5@9I=E zcZwYXYXL#u)z%mTDv8T553jxvuAX)B#eY7Z21^HMD2@LwW`uf2dH0SUa}8^8?6`kv zEtV6NAk*u?71IvXu>nM?0&qV9J&GPjPeF|374$ZG7kzjY#`+A#Saduny**ug=EToT zltV=IqAZlnP2;Bbf<>9fHFGlrnH&cCd`C%#pj>x=0pN6>iCRO>95_|M(9vfLD#0Mg zEO28?1JBu&Frw;-3W-yjIfL}MnAo?OEA3ymb3SFLoQUc{Ca$%I2nCA-=HVk48Fs-O za#%lt4JwI1yYsbbG+9_i4XWjATzfCD6~U`3d2;(-FSJ@_f=m>RDe$6J8v9!uCX?W} z?N`*DT{j}|fjx+Ft^)~jqBj-TqoDX&EjTrbGUA9E;o<6{y}sd zu?5*tC+b48&}^{EyU|=UkDCvg=>m@9cy1w&rt|1J9JpuEyh^t+&c?Z8|pHgI*)7;uTx8IQTkgP>(hd4#y6a<4!uYp!VRMXQKKS3amN2CtUB4SeQyIRQQ&$8Ho_n>tN4 zWAn7>l3j?_f?bH#af`T8C!TCTo56zs7;-1N3*C+GL7M*stTk@gE}?B@o6hb1S*M+({mJ zaE6c2tLQcKI(h>R?@ja;+6^pg4|)gK)?V};dLQirb)nG_(HUfP8NlxbOr{B}W+93q zF!LC@Xjcx#9+;0^2*(dNd4PGeU1=O&4ev3iRT!tnIfHUzA-wJUHo(jJwP0=ycOUlv zw~Bk0dxzV?-9N}bfDWL8=mX*~Iz(*Y?%`H*Jz%!q#^u(@WBbjgL2HyO^Z{pozf~q} z>0#p3R&)d%MaR%_^eH;Q-OjD!)^i)VySTgijd$439bgl$finbK{Tl8{hoOwV65;L; z;0Ao7&c<`#>-w780A8*<$*<~cxFDL>cM9gU;6Zj;-EWBSX#)JfqXF9-6NEcP7-N$7 z=*rEl>TCw5Y^SBQo!i81=783!gab~Fjg1u;nmxAO+SX#3E&6q0CDkL=-qGOv=y(G2 zh!vQEJ+|M+D}Ea6rWHva6ha7I32ML7v*PsD^kNsmc)wN?sAPCJ9)Vq}1#i0K%;5UC z-a5JF-|%|wnpY9!TObOZHaPwWM3=!!>x$|XSW)<(filmmgi?gMxf z%w;t35%$Joh3IO%#cl=871LpD0qtv+6+A;*xqJWjx6v1m2L~CDM=$mjx2?UazNNWA za)?LUZCxD=K&{dJXfC)MB(CM$_m~o}DeYbMG7&Zlw#LDlZ~%@XqPF2c9E5{GT@M9? zJsebaC645_aSw72aSwBkaND^@xyQK2xhJ;aXz*QvsK;s?hvVU|26ToeL2D31|1;d1 z+*|N>x1>dk8yHQRO^g&@0r3d_sG*I(MT?r-Kq9sS>$zsLF!3xKqzi#Q3+lu*Vf5gG z6T`cLmNW#SMHIFDyaix_hQLU1AK?C-))-q;lidoUd1y~pLJ4mAKU-2pSLbwF2MjcH z#R7`v+FBaHT?h8Zka^68IA|gCY!?|4&LU3r;B4+GhdPJzfal{$STFo=JGiICAA<+> zmrrpXZV4_UM)%@UY~-Hhp6kUXT+Thu?G#L+aoN_EPK$IdlEm%b6i|#xV4tQz7_$wu z3_Be6mV1GFu@_H4x!g;j&4x~KvT;d4s1bHZlwel7N5$LD*R8mj z7~O}P@H9M~dzpKM+tr6>;F-9EdzE{gdqbFK=#Xt`ziMt}Agf{bWB&rsWb4juwhJ!` zYNs<~?>FQPJ9u0mLm+0h5X0V&JAnM{xDy=KF5ZF38zCs&Q~XPK;1SME;_xD2k9oY1dz;$>_5z*)JNyzCTHXY>W4~&rP4%`$aLGfg z7T=6PSrf81q*J~^wdlpS3Vh_6Z9{Yhyb`a%x8c=jFML{y*Kzx~Pq-u8dmx4Pb02Ys z2T5VP9&hNE!XI+)JEgFM!kdUweRwnO!M)r*?jZL;zZ`|0w}J@V&mG|Mst4>&L4%T< ztC4L#df_HI8xntb%K0uDw@f(01pK>Pztx^c^)Rh$K z%S?4S*?Lp4v92tqFel5TFE-Q_ya??mT=>rM|=|OsuUgSt}6giq4Lwb{A$#L9y?gIA%cagiq{m5PB ze&T-Se%VI)N(u(4AOpxiBA5&Y1>;vq!Qc@j!MgIuje}o8_84IJP_g-6C8Gh9q(-Yl z=lZvl3^ERs3^Jbk&7owFT2L~`31lMtBy+!We{jF^h~Nxz4|$M0%)yArbTSJh6q!M0 z@(A;Y>?O0w93D|TV*fE!gUlz31Tk1k7IH80hz2=G7IV!!VumOi9lecr>h!tRky%3y+5LXvF`ymO)wwcd~w{mau-+?vJ|fDQsAl)*JBg(cNEz zmO)wpv}q`)Qq#M;VP@v;rKcVYt^4AZMS?=%2=d4aorg4&Y!lT8vXy(ANAkbezahMt z>_mIWS>$ZAm+U6zqJ2CX#ofmve;&f0@A4>(N8_(z(Bypb1}B5&kq?i&2C-;zF>&f% z@&Ah`2zVO`4aqn znSfTMlkdjxD49no0^b#qR{qO(Z5=Uouvh;n;IYjO_Dsn3X&&L;GBO5k|$}X}$5t81)@1So54@YKO3oT$;qfSgM@>UGx#0h$#!)^_|F7Ut6R3sHeMN_~fvUvoOKbJ>&JetHKeLpY1(o^bW(*L`fwd4SmT%FFN zD55HXKT-y&m@1)4DI--znW%EgOo4V#$fF`28F*C8qY@sK^2o@eG9HlK3Mv znVKT_y(o*oAI(nwSjnRX!S%(X#{aTMF*W}mWsj5%*dx`>qY4Lmr0mypemReME;S!0 zj+#eZ&!Z|HRrgXiPz!ie!=uUnm_kY|rk09qfm$N4g<2qMr(@3|R#UeNeAL3D`u}r2N^Jzra_3Oycny~qbq|1U8VY(X@0P=<<=luq zYOBN$?-dxL_0M-s^kY#EQ4dSEg9dRq@Xt2P?4=$N99hEEp`nf7(RW7c>ZH~|t}5y= z>hS^Q2FTSsn7KV8Ft=x^=cwnY7pNDhmv}UTM>BZ@XVuE1HXdTp&K%DFe=xVB)Mt?V zM;)V%Q=d{Nc+|loJC8bf)U|~=NqvrXP+#z977tRakN>U$o|=FuD;b@OQM7EmO&pj@!qT|segmKdUs z8RF+ch8*0mvd$LM0F0K|VyGB=bA>2FojX#}xe@e?0OLZJ4J(dQSQV%_jM>qD+zC2nY7$hDL%j?HhF@7#8PPBs9 z*GmV`VD~KL(JlSS19S)-0o<4lrNd~jfR^zH%+Te1)G;EIjsn`@+<9~}7djbw9Z2J> z6}~yI2ntE)W|M%9MV4uhbl=rz4N70}ov8geXBtmKF51vRj>8~ePuYb*ZskIQ(pRMq zdM%CC5mB2rbJ23hfETZL(pfZQ4LR2g`qgb*w6s3Gu)cg6bhy<#T05{l18uy<&~zCL zUCyK1g`wAQp;d5V5^sb_6b_n1H9h589n?VwAgk619o!*EQ+MdXnKB{}Ku~%MH>jf~ zx{HW^+^h~;iZl&938{JM{M|aS68d%f@9&O~&ojkgWM|bn+9v*Gt(Pkd? z@TiwZeLUL2qkDO@^$~g&J)53GcN1Iac|EbGub-<5;DKV>>=UCBwW~YcaAUJ zeuXJ`Nkk&0;OD_*4r>R%jg#7ito62OFafw^AmrN%eqKO-7)#8lnga@kX&XSO{c#2)7jEBQpUB zX13cP4bd*Pfj!eG;p!S8r{aAGB7H*6r8m$UA&KK7?ptsl@#uaYZ3B5a;3lCrNp6w{ z>g1{az87X7{(ohcTcj=@tdq~46D?*4L^n3u;fA!ewZ5er5+Uq@Qc>3=+%(p;Ty^1P zV*d?+P!UYLPzN`Wr%#0Ye{peYjb;MemsZ6mB_zgAxB>+3%1n%pkAqvlO)8a>obRI_ z0_lm@(GSqu&_3=kj~?dHBi#L4=!fY?=((-nrw@chowI$42DefVUdw&dLqEf#N4aQc%k%V3 zh(XaW&@a-UAU(#T$9ePwgrVqH=v{)1{3H)aPB8tUL8Pk!Q9}W)iZcDnNR@zV zN6+!-c^8~NB z2oj6vv-CIgIr`hG{xA!VcJb&H9=*(?H~xpT8U&YNpWz=iopc_`1^N;snbJSd7kTt5 zk6!DgeHu%AC##O*DkaOF57&jih-H&062jdHV3C5H0Vn#Bfn9LXF= zOciK;jG3umz_A6q?Nc6|=))~c4O7bj`F+Ntlfr!eMFP!#l9Tf{(|z_c^@KaqFx2~y z-@9l2=SfB1F6kWBH!s8`863V$6M#+|3TizUAV0lM|J7qT3#=pOtRW$4wo}sHok}+| zlaXR(j2JWf;;**Sxp$q+91w`)T*zSnN*&LA%Wdgnx|zAmJRW_?V@Tr}KS1_3FgFQg zzkuNwo>|B&Viq$uGE11H445Nd@#qYXzUI+c9(}{3b36h?={p{QseOJMv)n=UE2MA@ zvsxhg3r?~JZka5FYcTO&y8q|>k<4a+?!h+s!AbX9{xn?UM2rWSM+Dk`hTAY1J4Eb-W#$K#~z7VPt1vi)Bm+usGU{e#DD4zgvj zK(<5ETO7E-y09YvH`rk;oSvM=9=)t9>&9bG9*_LT^AlZ|CFgXCnxARymY* zhvus6XQKf$W+>>;44D437UxF9u^N$h*#v=jegDqhrLeg`ylg5vkxgTDY&x64X0lmq zHk-p^KOVz=DtH{g<3Jw6UIz0xgvUUnVcXa|iFnxpwonKGvc&@NhC5^~R`OUQh5)hl zzqI?$(=Iz1XqTPB;|M41TK*~o$WCWx3Z&c2&fsw*kE43o7Pghg(L9d*=Sa7M?UG2h zQy|?KKtDVMNLNVCzIF_doyRT^DEE4HK6?X?RXkSnI1U6f%d-mwvW@3)!vC>=W|sju z-ZYdPuMq=eZvoI-hl2j=7$AEayGEki+Xc#<@He(@BYPLz>t^rdaZ(R^H;jD3)O z7;JOlSr7XNk97|3I{O&7lSD}8r9<{9R#36n9qiNWGd#}VaVC$m`q<~#=h+u{oXz7& zJT4TE5GFUoDJ%I+?V`6;b1eYD-wL;}8V5UVGrOf1#rK4&g+n?X3@;4eVPEHQF1SvlyIlL(-LM&NvwMWgO~U0c!T<8e?ASv9n;WF<5A+E=9%4UYKdyp4?c%xcxB%+3sNlaub%H7y{^n@owF&Bk zxJ;EwomJP|KHb)4wb|<|9j)2~Y23r?5paz6S89r(#(X|% z3XPAm$j?aYiXis&$&|84Srm^!#I^Idt3UQ9iaINVRSb%-%4A>92JfSC|BDYL>Ad8tNd#9u>8V~DZ;pmZ@* zND!q8=NYBRGOsoHELpZJhsW3PxP!-bE;>l(aMm;siV#dF_RI1KcUgg~P+(?4)Envv z4Zpf#$3Id}XzcJ2UL$?SM<`XvDXBpdGxYfdg+*l*m9=$_s=QKNAt-I*Sg2Gb6RweE zbOJ+!;u%&u$R2NwtSak*LX_4_m@ca*ma8 z3^xWaJO-|iKt%#E_*1SI#>j-5We41#qEAdLL{6k}2NEv&k$K$JEmtgXv?qraQ=Cj# znOfu17Z;zviRFO%v=b7cV2>*|it_@Oy3~cRi2j$s8)7KSG6@sOg=|O&mqKh+sIzCk z0>s-1Qm!wzL$+jp)Be$JY3V&WC@?%y7&|k^r#CAbIHbHcH%}^s3m37VcW2K+0ax1< zwVGhT{jEY0$v{w7PRN=42B^_4WLV4&9?yluDm;(J*TaPbv8Y4fU-Ll$yPyQz zUjxCM04VHV1BoR^{w1W4a3n$orOTwf5w#ZCG)ZfD_AA4_>p^R=$vvQ8s*PwQEJQb< zfZv_)TMdPylHqr}B9_P?iU4uO5`jb%JV}OP)1`zN3NKHgYw3DO?wCz4gd+1RptSsI z`VI*8-$ma8rR0y$UqQL}U+Lc=wzE-b7YlJHr+0}LB`1z$`;F($d<`&m#vlEA=@CkQ+Bs(lWdpl zgzTaV>k{pf?2_e@++(@+b(-t-f`LMa>(T~ zm#0$AN4YE91Koq&L*2vOmF`jQ+3qdwo84b=KkfdV`$hL3-G6fbMb66IsV2k9}wW0c1jkFg#;9^*ay zJ)%4&cue%rd1QEGdDMDL@tEeZ#N%dM#uQgulyw-bd^t#LI39mQ3KK1%#q-^Byk**`< zBRxls92x6v^0s+j@4djA_g?J1#Cw@{pZ7!FyS?{#zw5*JK*3|50G}YA5Fe#aluwM0 z%BR}r2A`!q%Y2sm-0ri+XPwU`pND+5`#k3Jq|XkYXM8^NIqCDI&l#VyKHvLX@VV&o zqp!QK+BeO&+_%EF%D2XMvTvQQ#kaxN>O0N1*>|SzLf^%{OMI94F895~cZKh5zH5B% z@ZIQpx9=w3UB2IrN8?9~j~$;kzIFVf@mt3~HGcQ_567Pw|J(RK{E*);ztMg^eqnxb zehGehKcio{Uxi-{$R-R1YF-y41h z{XX?4{IS2g|7d@2|8f4l{z3jB{$c(R{*nIa{$>7F|2F^G{@wob{O9{~{tNy4{CE1F z^uMU^QiLhu6{U(YMY*CvQKhI+Ojgt>EQ+~`>lHUBIK@K6V#N~0Gm2Lfdlm01_A3r5 zK2&_9_(X9;@s;9h#W#v?1E>Ix0Iz^i0b>FJ0%8JG0dWBd0m%V*0s4S~fTDoXfGGh} z1L^}B1Fj3O2XqC@4p zd?fJYz;^>b2s{yZGVoO3>7cBj!XRT%MNn(d-9g)eb_Tr?^lH%SL2m}_4%!p+ZqR!{ z`+^PxeHnBn=xorrpzngt2mKIqDd=+0&q2Qi{T}QSoE$tQ7z&~Xza4xo#5E);L?2=d zDG#X#sS2qNnHka=Vhg!0#2(TWGACqi$kLEoLRN&V3RxR+N63bdJ42ocIUMq3$TuP1 zhI}7#Ddcj<&mq5t4i6m@IxaLUG$vFP8W)-nni4uOR2P~Nnibj-dQa%i(6>TA2>mkj zOz4HspF{r$lZA~63lCF<#fPPa>B0)bO2f*+%EPL|YQv_4O$}=b>k6A2wkT|4*ru=@ zVTZy#4m%unH0*fTiLjGlr@~H$6X7_V3TMJ);lsj5gpUgM4fhLIga?KPhpWTm!!_X( z!ZX9O!%M@C7e)x;wZ->7VzBl~+2zf+IL}i3Eq9vj& zqCKJ`qB~+<#QcZ_5qv~%#Oo1XC<&#Da)i=NDOZkFj#K(7Cn|Ny3}u!wN13P8D+`oG z$|mJ>`=~AE>kX7-lANgT%}yCT%%m4>{H&WyifUna;NegXej)m$=r^O^kKP}BF#5yjkE0JqAB{d9eIoi?^o8h4 z(LY819)n`27$zntCO4)mrZT2FW^zn@Ok>QnnC6%{G4o=U#jK239kVuOeaxnq-k5u1 z?u&UKW`8Ud8xk86n-Xh?Es3p)ZHn!Vofo?}c1i5*vFl?u#@-#<8@na;zSsw1pNaiA z_DJlp*b}jz$9@s}RqWZ=b1GIfOy#O_S9z$sRHIaWst8q-DpnPz(x?(u$*Me6zN%1V zP*tg#RL!cHs#aB}idQXC-KbisTBBO0TCduux=;0h>Os}Rs^?TMs&=YgQIAlMRr{#N zs}<^*>N)CL)vMIEtJkSFsP9s5QunIwRo}0EQ2ny{RrTxYH`Tk<@2H{Py858{kosfw zVfE#>F>xtzljHcf`{MS*or!me4~>tFkBisDPl!*C*T)ye7sngp%i}BJtKw_or^mO( zx5wM#=fuy8zagHB?~8vq{@wV4@rU9+i9Z_udHm`4Gx2BR&n1jW&?n4DuqSW{wvCrO`qmo&3&3}nuj&pHIHeY&^)EttJ$YHsQFOyk>(T45zQ&h zdCf)5Wz8>|-?d0fX&J4Tc9eFEcC0p38?IGqqu~EclA@ic)oBa025pJfsIAjlv<+IT zwnN*gou!?ly-~YVdz1EN?RxFQ+DEldXm@Cz)xMzJsokZ0UHg`HkM>jTN$n}^Y3*0q zv)XU9-)k>uFKI7pf1WUAf_6gngzG14p76$mGl?#V;fXnkhQ!iDQ=&PsE^&I|jKr42 zw#4?tj>H9tixZb7E>B#UxH@rd;vI=kCLT)sJn^f-J1G9>O-m9Qy))#D)pJv-Kl$0-%Wilbzka% z)DKb*rGA`xc%sY1q=`)v*G_zS;&*9*X{BjX(ky9>Y17hXq_w1RX*Z>mUnVyqADZL=w zkY1W@O200>GktdY-1PbB3(^;+FHT>YzC8U_NZh_XeO>zc^o{9HrSDHap8iKhXhvd& zA!BC7f{b+;k7n%3xR^O2b5v$vW^iU`W_V^~W=y6!Gd?ptGcyzF(Pu8nyghSm<{g(%T39hlv|Wrl3SKrnOl=PIkzsiDYq5!nr_N{AotPS_jA9b=o&fA{1H}CwUk&_Z9O_{WCQqQE9Cmo&i#iXw$ot<=U(vNyVkM)$E z(aZG1^kekCdVhVOK1{FFN9$wtg?gL*dOfdSq+g=HS-(PmoBnovul_;(L;6SbkLh31 zzpj5vzem4U|AGFH{uBLC{qcMvKQ6x}zcK&1{Kff8@>k~HmA^gzvHa)q-^_m}e{cT2 z{15X#&OefWEdQJQp9@d{RlpR;3fv1k3q}=q7mOV17MKbu z3aSfi1sw&Q1+xm~6wE8Qp@1(~RIsFAS;6vx`wHGDI8!*HP*rFyoLjh|@R`C73Xc_@ zDEz$ei^6XUFBkq&_a4Q4~LVWwe@VZLF3VWDBEVY%T}!%D+Fh6fFg z8Xh-1Wq8i;qTyx3F2g> zQ=C|wTs*N@SDaBirFedEPw}h8r%PN*)FmY)wvt;))|RX&+8%nv-$4d{C{%WL+p2iSkm{Db%Xe==rjWx#U##W=v*kPP)oNJtKTwq*b zywmuo@d@J&4fZ%u!~wIl-(oCz|u%#z=*^+C14j)m(3GH_tX- zZ(d+tW?pGtW4_zG+1zX1Vt&m0q*&J{H6J8^Lg_{ z^JVid=HDv(D$ErNDsHJ*S+TleZN>VEjTJo=+bSNfc)sGLiZ?6vRvf7KwBlsN7ZqPs zoUJ%lak1j}N?GObN^PaCvb3_Y(o)%0X|J4B*Rr{ZRUfUsT;o-fTT@t5UQBRa&2&JbZu;HYHe0+Zmqtyu(qt$Tw7IJTRWw8T5VhH?AirWS4_Qa>c*+}Pu)Is z$JAG+zCZQA)DNeAJoU)b<5NGI`t8*7Q-7HH-=pw@&5q?9&lCw diff --git a/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX - Release.xcscheme b/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX - Release.xcscheme new file mode 100644 index 000000000..951dac0dc --- /dev/null +++ b/src/MeloNX/MeloNX.xcodeproj/xcshareddata/xcschemes/MeloNX - Release.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/benlawrence.xcuserdatad/xcschemes/xcschememanagement.plist b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/benlawrence.xcuserdatad/xcschemes/xcschememanagement.plist index 1b8118340..af2d3e04d 100644 --- a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/benlawrence.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/benlawrence.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,6 +4,11 @@ SchemeUserState + MeloNX - Release.xcscheme_^#shared#^_ + + orderHint + 1 + MeloNX.xcscheme_^#shared#^_ orderHint @@ -12,7 +17,7 @@ Ryujinx.xcscheme_^#shared#^_ orderHint - 1 + 3 com.Stossy11.MeloNX.RyujinxAg.xcscheme_^#shared#^_ diff --git a/src/MeloNX/MeloNX/App/Views/ContentView.swift b/src/MeloNX/MeloNX/App/Views/ContentView.swift index 3e9ba4f5d..eec6d7b56 100644 --- a/src/MeloNX/MeloNX/App/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/App/Views/ContentView.swift @@ -232,9 +232,16 @@ struct ContentView: View { } Air.play(AnyView( - Text("Select Game") - .font(.system(size: 100)) - + VStack { + Image(systemName: "gamecontroller") + .font(.system(size: 300)) + .foregroundColor(.gray) + .padding(.bottom, 10) + + Text("Select Game") + .font(.system(size: 150)) + .bold() + } )) let isJIT = UserDefaults.standard.bool(forKey: "JIT-ENABLED") diff --git a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift index 1e1985753..0e4744e73 100644 --- a/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift +++ b/src/MeloNX/MeloNX/App/Views/SettingsView/SettingsView.swift @@ -48,8 +48,6 @@ struct SettingsView: View { var body: some View { iOSNav { List { - - // Graphics & Performance Section { Picker(selection: $config.aspectRatio) { @@ -80,8 +78,6 @@ struct SettingsView: View { labelWithIcon("Macro HLE", iconName: "gearshape") }.tint(.blue) - - VStack(alignment: .leading, spacing: 10) { HStack { labelWithIcon("Resolution Scale", iconName: "magnifyingglass") @@ -205,7 +201,6 @@ struct SettingsView: View { ForEach(currentControllers) { controller in - var customBinding: Binding { Binding( get: { currentControllers.contains(controller) }, @@ -327,35 +322,32 @@ struct SettingsView: View { } - Section { - - - Toggle(isOn: $config.expandRam) { - labelWithIcon("Expand Guest Ram (6GB)", iconName: "exclamationmark.bubble") - } - .tint(.red) + Section { + Toggle(isOn: $config.expandRam) { + labelWithIcon("Expand Guest Ram (6GB)", iconName: "exclamationmark.bubble") + } + .tint(.red) - Toggle(isOn: $config.ignoreMissingServices) { - labelWithIcon("Ignore Missing Services", iconName: "waveform.path") + Toggle(isOn: $config.ignoreMissingServices) { + labelWithIcon("Ignore Missing Services", iconName: "waveform.path") + } + .tint(.red) + } header: { + Text("Hacks") + .font(.title3.weight(.semibold)) + .textCase(nil) + .headerProminence(.increased) } - .tint(.red) - } header: { - Text("Hacks") - .font(.title3.weight(.semibold)) - .textCase(nil) - .headerProminence(.increased) - } // Other Settings Section { - Toggle(isOn: $ssb) { labelWithIcon("Screenshot Button", iconName: "square.and.arrow.up") } .tint(.blue) Toggle(isOn: $useTrollStore) { - labelWithIcon("TrollStore", iconName: "troll.svg") + labelWithIcon("TrollStore JIT", iconName: "troll.svg") } .tint(.blue) @@ -368,21 +360,18 @@ struct SettingsView: View { labelWithIcon("Trace Logs", iconName: "waveform.path") } .tint(.blue) - - } header: { Text("Miscellaneous Options") .font(.title3.weight(.semibold)) .textCase(nil) .headerProminence(.increased) } footer: { - Text("Enable trace and debug logs for troubleshooting, enable Screenshotting without distractions and Enable automatic TrollStore JIT.") + Text("Enable trace and debug logs for advanced troubleshooting (Note: This degrades performance),\nEnable Screenshot Button for better screenshots\nand Enable TrollStore for automatic TrollStore JIT.") } // Advanced Section { DisclosureGroup { - Toggle(isOn: $mVKPreFillBuffer) { labelWithIcon("MVK: Pre-Fill Metal Command Buffers", iconName: "gearshape") }.tint(.blue) @@ -392,9 +381,12 @@ struct SettingsView: View { Spacer() Text("\(String(Int(getpagesize())))") .foregroundColor(.secondary) - } + Toggle(isOn: $config.dfsIntegrityChecks) { + labelWithIcon("Disable FS Integrity Checks", iconName: "checkmark.shield") + }.tint(.blue) + TextField("Additional Arguments", text: Binding( get: { config.additionalArgs.joined(separator: " ") @@ -417,7 +409,6 @@ struct SettingsView: View { .font(.body) } - } label: { Text("Advanced Options") } @@ -429,7 +420,6 @@ struct SettingsView: View { } footer: { Text("For advanced users. See page size or add custom arguments for experimental features. (Please don't touch this if you don't know what you're doing)") } - } .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always)) .navigationTitle("Settings") @@ -542,8 +532,6 @@ struct SVGView: UIViewRepresentable { svgName.removeLast(4) } - - let svgLayer = UIView(SVGNamed: svgName) { svgLayer in svgLayer.fillColor = UIColor(color).cgColor // Apply the provided color svgLayer.resizeToFit(hammock.frame) diff --git a/src/MeloNX/MeloNX/Info.plist b/src/MeloNX/MeloNX/Info.plist index d23c87fd9..74e5ca954 100644 --- a/src/MeloNX/MeloNX/Info.plist +++ b/src/MeloNX/MeloNX/Info.plist @@ -4,6 +4,11 @@ MeloID 83f67a0a96bd8628a150d7853e360db5bae64e7769524fae399c4b8e7e6aff17 + UIBackgroundModes + + processing + fetch + UIFileSharingEnabled UTExportedTypeDeclarations diff --git a/src/MeloNX/MeloNX/MeloNXApp.swift b/src/MeloNX/MeloNX/MeloNXApp.swift index 665bf9e4c..cc72ac72c 100644 --- a/src/MeloNX/MeloNX/MeloNXApp.swift +++ b/src/MeloNX/MeloNX/MeloNXApp.swift @@ -9,14 +9,10 @@ import SwiftUI import UIKit import CryptoKit - - @main struct MeloNXApp: App { - @State var showed = false - var body: some Scene { WindowGroup { ZStack { @@ -37,7 +33,11 @@ struct MeloNXApp: App { } } .onAppear { + #if RELEASE initR() + #else + showed = true + #endif } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.black.opacity(1)) @@ -69,19 +69,13 @@ struct MeloNXApp: App { } } } - } - } else { showDMCAAlert() } - } - } - } - } @@ -175,7 +169,6 @@ func drmcheck(completion: @escaping (Bool) -> Void) { } else { completion(false) } - } */ @@ -187,8 +180,6 @@ func InitializeRyujinx(completion: @escaping (Bool) -> Void) { return } - - if (detectRoms(path: path) != value) { completion(false) } @@ -209,7 +200,6 @@ func InitializeRyujinx(completion: @escaping (Bool) -> Void) { completion(false) } - guard let httpResponse = response as? HTTPURLResponse else { completion(false) return @@ -231,8 +221,6 @@ func detectRoms(path string: String) -> String { return romHash.compactMap { String(format: "%02x", $0) }.joined() } - - func addFolders(_ folderPath: String) -> String? { let fileManager = FileManager.default if let data = Data(base64Encoded: folderPath), @@ -243,7 +231,6 @@ func addFolders(_ folderPath: String) -> String? { } extension String { - func print() { Swift.print(self) }