From c871525e9094efd5d3a8e6e1b0d6199a181a0551 Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 8 May 2015 12:41:14 -0400 Subject: [PATCH] v2_03_32_src Former-commit-id: 6271822b23e6f239b4b836ead7b6a1abb1fded8e --- Include/dxwnd.h | 2 ++ build/dxwnd.dll | 4 ++-- build/dxwnd.exe | 2 +- build/readme-relnotes.txt | 6 ++++++ dll/Inject.cpp | 19 ++++++++++++++++--- dll/dxhook.cpp | 21 +++++++++------------ dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 377856 -> 384000 bytes dll/dxwsstack.cpp | 7 +++++-- host/TabProgram.cpp | 4 ++-- host/TabSysLibs.cpp | 2 ++ host/TargetDlg.cpp | 2 ++ host/TargetDlg.h | 2 ++ host/dxwndhost.aps | Bin 158600 -> 158740 bytes host/dxwndhost.rc | Bin 102180 -> 102348 bytes host/dxwndhost.vs2008.suo | Bin 250880 -> 260608 bytes host/dxwndhostView.cpp | 5 +++++ host/resource | Bin 35882 -> 36066 bytes proxy/ddraw.suo | Bin 16896 -> 17408 bytes 19 files changed, 55 insertions(+), 23 deletions(-) diff --git a/Include/dxwnd.h b/Include/dxwnd.h index db28c81..d079f95 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -195,6 +195,8 @@ #define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message #define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface #define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface +#define CONFIRMONCLOSE 0x00004000 // on close button, ask the user before closing the window / terminating the program +#define TERMINATEONCLOSE 0x00008000 // on WM_CLOSE message, also terminates the program // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 252a75e..9a39756 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:549536858a03ba659d55078a89d987c435aed391c5444cfe6421f23cf4c76cc6 -size 578048 +oid sha256:801f4eac2532d06296db4f257f4b14b6d58d6e6729a7df14a5c73407cbfbb3a5 +size 578560 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 7eaa09e..620b79a 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec489528e5cb8f0bdcdd15b49650a55d6367c38520bc1724834cebef642c9d73 +oid sha256:298792319c4f1da616431a5ac3e9cbd4ae54c82335a70f27affa029e8f0b3183 size 541696 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 7abdb11..510bec6 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -861,3 +861,9 @@ fix: revised the DDSCAPS_SYSTEMMEMORY suppression, now separated for primary & b v2.03.31: fix: handling of "No SYSTEMMEMORY on BackBuffer" flag for no-emulation mode: necessary to run "Microsoft Motocross Madness 2" in this mode. fix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG "Paladin 3". + +v2.03.32: +add: flags "Ask confirmation on window close" and "Terminate on window close" +fix: implemented surface stack cleanup on overflow: this should allow "European Air War" to run through several seasons. +debug: added a few diagnostic messages to trap possible errors in DLL injection functions +fix: recovered the menu Edit->Add command that went disabled diff --git a/dll/Inject.cpp b/dll/Inject.cpp index d15cb0f..a15bb83 100644 --- a/dll/Inject.cpp +++ b/dll/Inject.cpp @@ -22,18 +22,31 @@ BOOL Inject(DWORD pID, const char * DLL_NAME) if(!pID) return false; //hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); // not working on Win XP hProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pID); - if(!hProc) - { + if(!hProc){ sprintf(buf, "OpenProcess() failed: pid=%x err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); return false; } hLib=GetModuleHandle("kernel32.dll"); + if(!hLib){ + sprintf(buf, "GetModuleHandle(\"kernel32.dll\") failed: err=%d", pID, GetLastError()); + MessageBox(NULL, buf, "Loader", MB_OK); + return false; + } LoadLibAddy = (LPVOID)GetProcAddress(hLib, "LoadLibraryA"); + if(!LoadLibAddy){ + sprintf(buf, "GetProcAddress(\"LoadLibraryA\") failed: err=%d", pID, GetLastError()); + MessageBox(NULL, buf, "Loader", MB_OK); + return false; + } // Allocate space in the process for the DLL RemoteString = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); // Write the string name of the DLL in the memory allocated - WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL); + if(!WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL)){ + sprintf(buf, "WriteProcessMemory() failed: err=%d", pID, GetLastError()); + MessageBox(NULL, buf, "Loader", MB_OK); + return false; + } // Load the DLL hThread=CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, 0, NULL); // Free/Release/Close everything diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 3fe7131..dae3f23 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -1060,20 +1060,17 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor(); if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL); break; - case WM_QUIT: - case WM_DESTROY: case WM_CLOSE: - if(dxw.dwFlags6 & HIDETASKBAR){ - extern void gShowHideTaskBar(BOOL); - gShowHideTaskBar(FALSE); - } + // Beware: closing main window does not always mean that the program is about to terminate!!! + extern void gShowHideTaskBar(BOOL); + if(dxw.dwFlags6 & CONFIRMONCLOSE){ + OutTraceDW("WindowProc: WM_CLOSE - terminating process?\n"); + if (MessageBoxA(NULL, "Do you really want to exit the game?", "DxWnd", MB_YESNO | MB_TASKMODAL) != IDYES) return FALSE; + } + if(dxw.dwFlags6 & HIDETASKBAR) gShowHideTaskBar(FALSE); + if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode(); + if(dxw.dwFlags6 & TERMINATEONCLOSE) TerminateProcess(GetCurrentProcess(),0); break; - // commented out: WM_CLOSE just issue a request to close the window, not the process! It should be WM_QUIT.... - //case WM_CLOSE: - // OutTraceDW("WindowProc: WM_CLOSE - terminating process\n"); - // if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode(); - // TerminateProcess(GetCurrentProcess(),0); - // break; case WM_SYSKEYDOWN: case WM_KEYDOWN: if(!(dxw.dwFlags4 & ENABLEHOTKEYS)) break; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 3a6005b..9e50140 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.31" +#define VERSION "2.03.32" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 1846877e729cd324670601b23c09985ce7e486a9..bea27dca8f71d2a128f2219d680575e6edfad9ee 100644 GIT binary patch delta 9612 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 delta 6142 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 || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list } if(i == DDSQLEN) { - MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); - return; + //MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); + //return; + for(int j=0;jlpdds=ps; e->uRole = role; diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index bb883ed..dfb27f1 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -37,14 +37,14 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch); DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); + DDX_Check(pDX, IDC_CONFIRMONCLOSE, cTarget->m_ConfirmOnClose); + DDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug); - DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping); DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio); - DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); DDX_Text(pDX, IDC_POSX, cTarget->m_PosX); DDX_Text(pDX, IDC_POSY, cTarget->m_PosY); diff --git a/host/TabSysLibs.cpp b/host/TabSysLibs.cpp index e41fa2e..0b658ba 100644 --- a/host/TabSysLibs.cpp +++ b/host/TabSysLibs.cpp @@ -28,10 +28,12 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX) CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // GDI + DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping); DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode); DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut); // OpenGL + DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL); DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index aae62de..00ce1d7 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -87,6 +87,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_Windowize = TRUE; // default true !! m_HotPatch = FALSE; m_HookDLLs = TRUE; // default true !! + m_TerminateOnClose = FALSE; // default true !! + m_ConfirmOnClose = FALSE; // default true !! m_HookEnabled = TRUE; // default true !! m_EmulateRegistry = FALSE; m_OverrideRegistry = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 7265f25..43d4058 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -55,6 +55,8 @@ public: BOOL m_Windowize; BOOL m_HotPatch; BOOL m_HookDLLs; + BOOL m_TerminateOnClose; + BOOL m_ConfirmOnClose; BOOL m_EmulateRegistry; BOOL m_OverrideRegistry; BOOL m_Wow64Registry; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 680e5fa2ddbaae26fc89eb41dd6795301acc73a0..7790ac030b8f7e1fa0012d7171fa3534cac1264d 100644 GIT binary patch delta 3692 zcmaJ@dvH|c6+h=L2?9yTYt3Vq-8`0uNMIjHc0)k3*}H)y`?%R`OoD++NQmS?hnNS|11oHMR;KW?80U!#o6btjjo=lvPeBV+|&w zG#}ZmKO21uw6LX-NWIz^izp(jsuJuPOUYGHL?f%f@gw>(97^I1vRyrMxp&gqFQ066MPA7 zd<`C_3*=-W#Y=}vJ6#@U1^C(a86{Z9GAw!Q-5F^t-IC9~n30A{1(WV_)+%Bp9%mH< zh$+Ek%wZ|4sMpeILv0R(<%rmj$5jqNjZaW&C=d>W0?W0gT@?^wgOW@Yv zQK+=rX}e7^^^E%&#aU)Fc(qe4o=RQ?ov=qB$#}g&nh+v6cPFYQp90bF0Pu z_xzapmTuGZ0pqVw$%Cwj^me5cT_FEt;be zw(1-%StH#rkR)StN)mf#R3=-_uzy z^exp{|L9w!v)t?cmbBve{hM?J<0sZHMV;5MF~^`Y=Wlrh(?b4`5)FjBwEQpF^{oqx z0okX9BaN+%T8?o;7gV<@K7=m2ja@WNnIg)H9q|rx2_bPjjP*E=@hA7qYcK! z_8&B|n&&c;siZr|+ShsF$DbS3hiAq&4)#tE?L)cof9+^S_T&pol93o>AHPtovtz7u zr`~R313P^>e-FE~vu@lzHdMgeLo;>WGPY%CcG8|a-yr&RuyY4;+4de?$LMC?>6PeV zp5cke8^ad%{IEHh2N$x@VO<@ze%CZMHf%~N*ePNb@6t2h5VP$*X70!|_O716N7>C? zy1ZD!9v;!#-gx)O&!*C2dw0J)#R)2Gf{oA-_p<*?!sBf5p;GLQw;%doDrU#aPFyw+ zNUu(sR7fYjE)Wex!ild{hlAc&5(2^$hHox1iNg`|N9kGf#{4=_6-cc3^<381lpb$+ zbNdvkd+nXk_@y&%q_Cf#F{X$gEx=wsW11#@vrsyOG+=7j6hHL)Sw1wx&;HPwft9=< z9e*JK@VC=(nZSGLxKZHx44g0UXa=q%JUAUoCIju~d1&P~CSwj?G##goGtCKR6)_^D zZ#v#KoP-@*&BSejxR!}FBD%RD3%z_K3pe9Q{(TlcO0YN^s|lXYMjyc+vvC0_xA0rp z7@&(6d36ph(aH>h!X0H;%-_htM|e?gqCF)SgQQ!*U(UtDtuX#E04kYq7@mcx5St|0 z9t1D#qZf*x1D=F_=z?zA&N^s^&2%N0qVfL&WcNcSSp%B7kFGXx%)=bt$?=p;<0)gX zMoS_BM4~nSKMDC^)Mdop>HIeZn9bj|(LIcf@#{AHig5J9nfPxhWsE+9JnJDW9sPC= z&PV)$&zOs^2;up;xD&q=X4&Z0hjFeIU*gA>;R4L#7nh-5j5@y_!;)IZ*Vf}6$*=P7 z>Ty}&jljfUXp+idm<+q2m4-t4wjh>FEvNpcBpL-(M zCAELWk4CVDU$4b9!*M9&w{mb!<`Wai6T7V8OR}(nhIS(&?sqgx!ELF#%*{AzZk7&A z#Rh)5U79VWb@I>Yg^(g%4y*Y0?NTYqym&RiH{8EkvZfsG0@%&FiIJ2szGt;$!Qb+? z$b;wk1p$}&O#-Pcg=ch-^KD+%LF^G8B9P>1yuU*#OsRYT;3$7lc)sIr3Ao2E2>2(z zDRjy_p3zCs*LYbcne!I%Fqx8F=KTWq%6w0!RG9iw3Uyh}Pl@Yn8lt&@e=V-?oMQlZ zhu;yI?(wWH$y(|e5^94MA%vNkN%?EydOz~V_hG@z*U|vePE3gD)YIpG#h3X$%8A$c zX#v;xMFCg&9RZhl))NGuaEE{od4quW`33>!`91=}q#@+$PAo_%q1^BDi^6q;-x2T{ z&st0HEA9|*ls5=C!Z!#w#P8I4`n*X*AYlhHSj%xz02Pc>|K6A fz#)E9IBS}DMlU(9^Riwt7q#)QFz@koy^`s_a0dk_ delta 3386 zcmY*advKK16+h?OWFawzN1mI_?&iT80{ckVO(4LMZy`%IyC0hk$zsCt2q7U5-e6QD zXapRwg4gx{gibPW}l~Af{(dMuoNKDayCp#$s^@`PMDn1Zr1m?U`k3bEZ}p)R9##V477wIOXVUyFHF<5n7^qZ z(GU!UbhR3$BZy}@En_&Q+6gm+{WTlT6pLQV!&&0AHGfuxo>d=-G$fj05lv=Q&xP5# z%C!@64PC5;IpPy*et}cBc(=DapVI{{kzHKibnD)dU?`A~eQ=)7=>dWyjs<|a8L zpR)=oxw8pfdEA-L>4hq>t+-H`i=y}S{0gt0p|<)pEfHu9#$<-e2|itJ@~;TUC3MjR z)#B}9YktkmjFzyLNW( z<3UHF`igEh_*2@=dHUQQSS)^KE5tf6Xe&ci+^`jhcQ%;i9^76CFfYd?y4vlI zKDFheykK}qL^s?J6`LFur3uBK{#<}DaoSO=G^5BKvMMW3%wcFjp$!!&tthq**)T3# zC56gL6c^aK1I6VbtG{hj?Qldtdi_@L+Aa^YkMc*mm9UC0$2~_1$I93$NT6tc*QTsS z(f_Uu*ND>6Vq7a0lsa&oSXFAn4slPZU0IK!;ytU+=hY*YmDzBU=qf9AY#!B4AR4WU@CRCs!{dZr6s_+U;}&tL%#K^dM`d}= zZK?Q}e=*-THJ}fU&u#mN91LsCF}*+)>_G9a_Y3lOj<~8v)jcol63fdA3U-fJd{3Hm zuNwAE5MyQzD{roNV*{!D>@zKUF4D8dMR}Ji?P4xz5-8|pGwru{x z2uo_c#>J9<*;G0oyPq{i{6p-xcg9Ew&K
    edf7UuPKhj~5y>9=7#L@!6tOj-n| z=p(xin&{{XZu`*)s${O<_|GEPN*5Y`XgsW;8_&>njdy2}yYmnBF2@=(t+rrV`8LRe zvuXOIU<>zM0vg}PZrBWKSPwh+Rl-V~ z|6>q^S|`3*XHS1?7Qi%maII2~h4hSsOLTdy z;xKo10<1nJdXL%7^(KJNZ&1-X#ct9Rq|*vo(!T44Ac`wB28hfV4+mOC)!&>vST!3S1XhA0@e!PoTG4g%i+sRwlN~ai<^8@s68SOE=pKLA4r%_*CqJK*2QJ-9H0eV`X<|% z^1azBp_oodD5Q%La_NJVcU?jj*}56VQmuqEYL@`CR{}5Ct$0j_>J@SX6)Sz!t>l|7 zrC5deFc0Uy^;ENw+kY}hD;YVlZzH$Szl=^u`SS+)jg)igD$9I)-!hoK)D%iAS1jot w^6a{(x`(YUiZht9nibmDtXRzbT>RH7=tK`^$LK}&lnZyzHA%P9w>^sW|KEA{#Q*>R diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 1708027de0ae8289febe0b1a146ca8de7a3ab3c8..6355d10f705de47c82af260dd07fc11103d714e6 100644 GIT binary patch delta 439 zcmZ27kL}ESwha$_xXl>M7<3p68H^Y#H^27bWP%GAFqlsM?`J#x00$%2W{m(PCT5`0 z$-Y4c!L(rTX)t|1cs-b&81fLV(~!Y@a&72kINyZ9aPr(e($fn#8I?BA2s2=u{LVvT z^PY%TjGPeLEg6hAZ;Xm(oLp9^qgc$4&7i=L%#hEJ$B@R5$xy_Q%aF)W0%UfrE7N zm+(4vBcMS>z))?x;5gaAf5zkuzAPZUKrO=4ZPXaWwkHTMt`eGDa6)VQ3KhnhEC4Xq BbG`ro delta 365 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 t->flags |= UNNOTIFY; if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; + if(dlg->m_TerminateOnClose) t->flags6 |= TERMINATEONCLOSE; + if(dlg->m_ConfirmOnClose) t->flags6 |= CONFIRMONCLOSE; if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY; if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY; if(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY; @@ -414,6 +417,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_Windowize = t->flags2 & WINDOWIZE ? 1 : 0; dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0; dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0; + dlg->m_TerminateOnClose = t->flags6 & TERMINATEONCLOSE ? 1 : 0; + dlg->m_ConfirmOnClose = t->flags6 & CONFIRMONCLOSE ? 1 : 0; dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0; dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0; dlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0; diff --git a/host/resource b/host/resource index b7282e954c6b1775c16764f3fd8ddae6302cdaee..7dd19c1e4069248a7a66072eef81dc2e669c3514 100644 GIT binary patch delta 86 zcmZ2AgXz&srVUnUlRxmW2s$(PGx#yMF?ccrG5CVmle^2+CtqM>VK!kfpKQo4D;mP! c3YPN(s&ixj@gS;{L8>MnQjpnfmG(gu0QUwLSpWb4 delta 14 WcmaDflWElqrVUnUn?I#}Pz3-rj|VaU diff --git a/proxy/ddraw.suo b/proxy/ddraw.suo index e8beaf6d0f85042d6f8e121460ac47e7a4298901..1aeaba4535ad3d12efc412b7dc93fa58152bf40a 100644 GIT binary patch delta 1250 zcma)6TTc^F5T3K$ZL73`2$9>;B7zr6fKm`qaJfVjF|lZ3h$twa61*ZB@B-Cn;+xU= z2WouK7sAFTjga_gi1?<78htaEXyS`^@SD1rLU?eRZ|9qDW_I_?IosG(6}zrRFKR}R zh-U1|+DGLct?2#w_L<$UN0pz}L(c(bVf;d0&9P*izZu>728i70w)AEpcioYyc91Hd z2B-#R(6ZU_weVX23#bF?fd*hZz$u-ldHVAznIQbp;KNOq`eqc_Z=%& zWl=kwi_d4Vo93}9*;D$TQ<90rr)JLvhBWP}%RaxVS@~ql0RWp6KT_^S1j`gZ30>hf zbLD~+2k^v(u>wo2z<~+l@PzTZgpRUsd4vyUWb&uN)Fs_>`-y3;lgU#S?WU7-7JJ-f zj~8B3`f`YDRfp_>wJmx^4+Uu}_0lowp)*qN7(Yr~%kK(?$vw)3~ zO}xttE_l5>ZV7eRA4}4eYT>9En3u*Tj3no_{E&Okoh0G%mArPe4EQ$=mqMu%#GBxM zI`K02Uk>-9Kx*Wa2p6k!G#^c?27G_*)QI)>*^^}tT_g2QvdQt%C|qpYzeaqH4v!|( z2^VWksN3!Ey$N-~vr*RuFI!7g(NI}jUtY0s)>f7ENq)5k*$^YuW6n*b8FepRm2Uw7yObNx74-1vliq(wRjnIYY&S*jn3!55K4Mu8=PGT3X znw0wstnN&cmT_qm>)KSeZmeCoQsYNrOr+jhhJ>XzIrGlB@65b=?;GP0H zrH8yOU3csl?-!pp%v(~4yZHcPtPin=0VQV?437lA?G>p-iLyg)lc$bsfHIxP;VY!4 zXngg+h&dRZ99%6s?ei!WNWcqu+P-f!|H|`r+XOofH$#J_ z;m(URni%_Rqo&qHfVmVLn#F9Cl(FXekX=;uBzuE6_SB!>4E%UWR?6|Ire) zC&9Kq$Yv={oFZrC6yzr@ zu3Iblh*O;D^5rdF=<*dfH=CI)+X*rkyUeo|Ki_309z@>-Txp1mRc}|InM>L$wL3Q| i@Ga+UOrCYQ8U9|3evZzh?blE=appxZatgf5r~d&(sp*OU