From 53c6b978c281dec65685d682677314dcecbf05e1 Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Wed, 14 Feb 2024 23:23:26 +0800 Subject: [PATCH] [saco] Implement `InstallFileSystemHooks()` --- saco/detours.h | 616 +++++++++++++++++++++++++++++++++++++++++++++ saco/detours.lib | Bin 0 -> 182134 bytes saco/filehooks.cpp | 141 +++++++++++ saco/filehooks.h | 23 ++ saco/main.cpp | 2 +- saco/main.h | 1 + saco/saco.vcproj | 6 + 7 files changed, 788 insertions(+), 1 deletion(-) create mode 100644 saco/detours.h create mode 100644 saco/detours.lib create mode 100644 saco/filehooks.cpp create mode 100644 saco/filehooks.h diff --git a/saco/detours.h b/saco/detours.h new file mode 100644 index 0000000..e9acca5 --- /dev/null +++ b/saco/detours.h @@ -0,0 +1,616 @@ +////////////////////////////////////////////////////////////////////////////// +// +// File: detours.h +// Module: detours.lib +// +// Detours for binary functions. Version 1.5 (Build 46) +// +// Copyright 1995-2001, Microsoft Corporation +// + +#pragma once +#ifndef _DETOURS_H_ +#define _DETOURS_H_ + +#pragma comment(lib, "detours") + +////////////////////////////////////////////////////////////////////////////// +// +#ifndef GUID_DEFINED +#define GUID_DEFINED +typedef struct _GUID +{ + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[ 8 ]; +} GUID; +#endif // !GUID_DEFINED + +#if defined(__cplusplus) +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID & +#endif // !_REFGUID_DEFINED +#else // !__cplusplus +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID * const +#endif // !_REFGUID_DEFINED +#endif // !__cplusplus +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/////////////////////////////////////////////////// Instruction Target Macros. +// +#define DETOUR_INSTRUCTION_TARGET_NONE ((PBYTE)0) +#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PBYTE)~0ul) + +/////////////////////////////////////////////////////////// Trampoline Macros. +// +// DETOUR_TRAMPOLINE(trampoline_prototype, target_name) +// +// The naked trampoline must be at least DETOUR_TRAMPOLINE_SIZE bytes. +// +#define DETOUR_TRAMPOLINE_SIZE 32 +#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0" + +#define DETOUR_TRAMPOLINE(trampoline,target) \ +static PVOID __fastcall _Detours_GetVA_##target(VOID) \ +{ \ + return ⌖ \ +} \ +\ +__declspec(naked) trampoline \ +{ \ + __asm { nop };\ + __asm { nop };\ + __asm { call _Detours_GetVA_##target };\ + __asm { jmp eax };\ + __asm { ret };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ +} + +#define DETOUR_TRAMPOLINE_EMPTY(trampoline) \ +__declspec(naked) trampoline \ +{ \ + __asm { nop };\ + __asm { nop };\ + __asm { xor eax, eax };\ + __asm { mov eax, [eax] };\ + __asm { ret };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ +} + +/////////////////////////////////////////////////////////// Binary Structures. +// +#pragma pack(push, 8) +typedef struct _DETOUR_SECTION_HEADER +{ + DWORD cbHeaderSize; + DWORD nSignature; + DWORD nDataOffset; + DWORD cbDataSize; + + DWORD nOriginalImportVirtualAddress; + DWORD nOriginalImportSize; + DWORD nOriginalBoundImportVirtualAddress; + DWORD nOriginalBoundImportSize; + + DWORD nOriginalIatVirtualAddress; + DWORD nOriginalIatSize; + DWORD nOriginalSizeOfImage; + DWORD nReserve; +} DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER; + +typedef struct _DETOUR_SECTION_RECORD +{ + DWORD cbBytes; + DWORD nReserved; + GUID guid; +} DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD; +#pragma pack(pop) + +#define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \ +{ \ + sizeof(DETOUR_SECTION_HEADER),\ + DETOUR_SECTION_HEADER_SIGNATURE,\ + sizeof(DETOUR_SECTION_HEADER),\ + (cbSectionSize),\ + \ + 0,\ + 0,\ + 0,\ + 0,\ + \ + 0,\ + 0,\ + 0,\ + 0,\ +} + +///////////////////////////////////////////////////////////// Binary Typedefs. +// +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(PVOID pContext, + PCHAR pszFile, + PCHAR *ppszOutFile); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(PVOID pContext, + PCHAR pszOrigFile, + PCHAR pszFile, + PCHAR *ppszOutFile); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(PVOID pContext, + DWORD nOrdinal, + PCHAR pszOrigSymbol, + PCHAR pszSymbol, + PCHAR *ppszOutSymbol); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FINAL_CALLBACK)(PVOID pContext); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_EXPORT_CALLBACK)(PVOID pContext, + DWORD nOrdinal, + PCHAR pszName, + PBYTE pbCode); + +typedef VOID * PDETOUR_BINARY; +typedef VOID * PDETOUR_LOADED_BINARY; + +//////////////////////////////////////////////////////// Trampoline Functions. +// +PBYTE WINAPI DetourFunction(PBYTE pbTargetFunction, + PBYTE pbDetourFunction); + +BOOL WINAPI DetourFunctionWithEmptyTrampoline(PBYTE pbTrampoline, + PBYTE pbTarget, + PBYTE pbDetour); + +BOOL WINAPI DetourFunctionWithEmptyTrampolineEx(PBYTE pbTrampoline, + PBYTE pbTarget, + PBYTE pbDetour, + PBYTE *ppbRealTrampoline, + PBYTE *ppbRealTarget, + PBYTE *ppbRealDetour); + +BOOL WINAPI DetourFunctionWithTrampoline(PBYTE pbTrampoline, + PBYTE pbDetour); + +BOOL WINAPI DetourFunctionWithTrampolineEx(PBYTE pbTrampoline, + PBYTE pbDetour, + PBYTE *ppbRealTrampoline, + PBYTE *ppbRealTarget); + +BOOL WINAPI DetourRemove(PBYTE pbTrampoline, PBYTE pbDetour); + +////////////////////////////////////////////////////////////// Code Functions. +// +PBYTE WINAPI DetourFindFunction(PCHAR pszModule, PCHAR pszFunction); +PBYTE WINAPI DetourGetFinalCode(PBYTE pbCode, BOOL fSkipJmp); + +PBYTE WINAPI DetourCopyInstruction(PBYTE pbDst, PBYTE pbSrc, PBYTE *ppbTarget); +PBYTE WINAPI DetourCopyInstructionEx(PBYTE pbDst, + PBYTE pbSrc, + PBYTE *ppbTarget, + LONG *plExtra); + +///////////////////////////////////////////////////// Loaded Binary Functions. +// +HMODULE WINAPI DetourEnumerateModules(HMODULE hModuleLast); +PBYTE WINAPI DetourGetEntryPoint(HMODULE hModule); +BOOL WINAPI DetourEnumerateExports(HMODULE hModule, + PVOID pContext, + PF_DETOUR_BINARY_EXPORT_CALLBACK pfExport); + +PBYTE WINAPI DetourFindPayload(HMODULE hModule, REFGUID rguid, DWORD *pcbData); +DWORD WINAPI DetourGetSizeOfPayloads(HMODULE hModule); + +///////////////////////////////////////////////// Persistent Binary Functions. +// +BOOL WINAPI DetourBinaryBindA(PCHAR pszFile, PCHAR pszDll, PCHAR pszPath); +BOOL WINAPI DetourBinaryBindW(PWCHAR pwzFile, PWCHAR pwzDll, PWCHAR pwzPath); +#ifdef UNICODE +#define DetourBinaryBind DetourBinaryBindW +#else +#define DetourBinaryBind DetourBinaryBindA +#endif // !UNICODE + +PDETOUR_BINARY WINAPI DetourBinaryOpen(HANDLE hFile); +PBYTE WINAPI DetourBinaryEnumeratePayloads(PDETOUR_BINARY pBinary, + GUID *pGuid, + DWORD *pcbData, + DWORD *pnIterator); +PBYTE WINAPI DetourBinaryFindPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + DWORD *pcbData); +PBYTE WINAPI DetourBinarySetPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + PBYTE pbData, + DWORD cbData); +BOOL WINAPI DetourBinaryDeletePayload(PDETOUR_BINARY pBinary, REFGUID rguid); +BOOL WINAPI DetourBinaryPurgePayloads(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryResetImports(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryEditImports(PDETOUR_BINARY pBinary, + PVOID pContext, + PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, + PF_DETOUR_BINARY_FILE_CALLBACK pfFile, + PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, + PF_DETOUR_BINARY_FINAL_CALLBACK pfFinal); +BOOL WINAPI DetourBinaryWrite(PDETOUR_BINARY pBinary, HANDLE hFile); +BOOL WINAPI DetourBinaryClose(PDETOUR_BINARY pBinary); + +/////////////////////////////////////////////// First Chance Exception Filter. +// +LPTOP_LEVEL_EXCEPTION_FILTER WINAPI +DetourFirstChanceExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelFilter); + +///////////////////////////////////////////////// Create Process & Inject Dll. +// +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA) + (LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW) + (LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +BOOL WINAPI DetourCreateProcessWithDllA(LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEA + pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllW(LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCWSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEW + pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDll DetourCreateProcessWithDllW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDll DetourCreateProcessWithDllA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourContinueProcessWithDllA(HANDLE hProcess, LPCSTR lpDllName); +BOOL WINAPI DetourContinueProcessWithDllW(HANDLE hProcess, LPCWSTR lpDllName); + +#ifdef UNICODE +#define DetourContinueProcessWithDll DetourContinueProcessWithDllW +#else +#define DetourContinueProcessWithDll DetourContinueProcessWithDllA +#endif // !UNICODE +// +////////////////////////////////////////////////////////////////////////////// +#ifdef __cplusplus +} +#endif // __cplusplus + +/////////////////////////////////////////////////////////////////// Old Names. +// +#define ContinueProcessWithDll DetourContinueProcessWithDll +#define ContinueProcessWithDllA DetourContinueProcessWithDllA +#define ContinueProcessWithDllW DetourContinueProcessWithDllW +#define CreateProcessWithDll DetourCreateProcessWithDll +#define CreateProcessWithDllA DetourCreateProcessWithDllA +#define CreateProcessWithDllW DetourCreateProcessWithDllW +#define DETOUR_TRAMPOLINE_WO_TARGET DETOUR_TRAMPOLINE_EMPTY +#define DetourBinaryPurgePayload DetourBinaryPurgePayloads +#define DetourEnumerateExportsForInstance DetourEnumerateExports +#define DetourEnumerateInstances DetourEnumerateModules +#define DetourFindEntryPointForInstance DetourGetEntryPoint +#define DetourFindFinalCode DetourGetFinalCode +#define DetourFindPayloadInBinary DetourFindPayload +#define DetourGetSizeOfBinary DetourGetSizeOfPayloads +#define DetourRemoveWithTrampoline DetourRemove +#define PCREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINE +#define PCREATE_PROCESS_ROUTINEA PDETOUR_CREATE_PROCESS_ROUTINEA +#define PCREATE_PROCESS_ROUTINEW PDETOUR_CREATE_PROCESS_ROUTINEW +// + +//////////////////////////////////////////////// Detours Internal Definitions. +// +#ifdef __cplusplus +#ifdef DETOURS_INTERNAL + +////////////////////////////////////////////////////////////////////////////// +// +#ifdef IMAGEAPI // defined by IMAGEHLP.H +typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(LPAPI_VERSION AppVersion); + +typedef BOOL (NTAPI *PF_SymInitialize)(IN HANDLE hProcess, + IN LPSTR UserSearchPath, + IN BOOL fInvadeProcess); +typedef DWORD (NTAPI *PF_SymSetOptions)(IN DWORD SymOptions); +typedef DWORD (NTAPI *PF_SymGetOptions)(VOID); +typedef BOOL (NTAPI *PF_SymLoadModule)(IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD BaseOfDll, + IN DWORD SizeOfDll); +typedef BOOL (NTAPI *PF_SymGetModuleInfo)(IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PIMAGEHLP_MODULE ModuleInfo); +typedef BOOL (NTAPI *PF_SymGetSymFromName)(IN HANDLE hProcess, + IN LPSTR Name, + OUT PIMAGEHLP_SYMBOL Symbol); +typedef BOOL (NTAPI *PF_BindImage)(IN LPSTR pszImageName, + IN LPSTR pszDllPath, + IN LPSTR pszSymbolPath); + +typedef struct _DETOUR_SYM_INFO +{ + HANDLE hProcess; + HMODULE hImageHlp; + PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx; + PF_SymInitialize pfSymInitialize; + PF_SymSetOptions pfSymSetOptions; + PF_SymGetOptions pfSymGetOptions; + PF_SymLoadModule pfSymLoadModule; + PF_SymGetModuleInfo pfSymGetModuleInfo; + PF_SymGetSymFromName pfSymGetSymFromName; + PF_BindImage pfBindImage; +} DETOUR_SYM_INFO, *PDETOUR_SYM_INFO; + +PDETOUR_SYM_INFO DetourLoadImageHlp(VOID); + +#endif // IMAGEAPI + +////////////////////////////////////////////////////////////////////////////// +// +class CDetourEnableWriteOnCodePage +{ +public: + CDetourEnableWriteOnCodePage(PBYTE pbCode, LONG cbCode = DETOUR_TRAMPOLINE_SIZE) + { + m_pbCode = pbCode; + m_cbCode = cbCode; + m_dwOldPerm = 0; + m_hProcess = GetCurrentProcess(); + + if (m_pbCode && m_cbCode) { + if (!FlushInstructionCache(m_hProcess, pbCode, cbCode)) { + return; + } + if (!VirtualProtect(pbCode, + cbCode, + PAGE_EXECUTE_READWRITE, + &m_dwOldPerm)) { + return; + } + } + } + + ~CDetourEnableWriteOnCodePage() + { + if (m_dwOldPerm && m_pbCode && m_cbCode) { + DWORD dwTemp = 0; + if (!FlushInstructionCache(m_hProcess, m_pbCode, m_cbCode)) { + return; + } + if (!VirtualProtect(m_pbCode, m_cbCode, m_dwOldPerm, &dwTemp)) { + return; + } + } + } + + BOOL SetPermission(DWORD dwPerms) + { + if (m_dwOldPerm && m_pbCode && m_cbCode) { + m_dwOldPerm = dwPerms; + return TRUE; + } + return FALSE; + } + + BOOL IsValid(VOID) + { + return m_pbCode && m_cbCode && m_dwOldPerm; + } + +private: + HANDLE m_hProcess; + PBYTE m_pbCode; + LONG m_cbCode; + DWORD m_dwOldPerm; +}; + +////////////////////////////////////////////////////////////////////////////// +// +inline PBYTE DetourGenMovEax(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xB8; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEbx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBB; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEcx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xB9; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEdx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBA; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEsi(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBE; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEdi(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBF; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEbp(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBD; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEsp(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBC; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenPush(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0x68; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenPushad(PBYTE pbCode) +{ + *pbCode++ = 0x60; + return pbCode; +} + +inline PBYTE DetourGenPopad(PBYTE pbCode) +{ + *pbCode++ = 0x61; + return pbCode; +} + +inline PBYTE DetourGenJmp(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0) +{ + if (pbJmpSrc == 0) { + pbJmpSrc = pbCode; + } + *pbCode++ = 0xE9; + *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5); + return pbCode; +} + +inline PBYTE DetourGenCall(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0) +{ + if (pbJmpSrc == 0) { + pbJmpSrc = pbCode; + } + *pbCode++ = 0xE8; + *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5); + return pbCode; +} + +inline PBYTE DetourGenBreak(PBYTE pbCode) +{ + *pbCode++ = 0xcc; + return pbCode; +} + +inline PBYTE DetourGenRet(PBYTE pbCode) +{ + *pbCode++ = 0xc3; + return pbCode; +} + +inline PBYTE DetourGenNop(PBYTE pbCode) +{ + *pbCode++ = 0x90; + return pbCode; +} +#endif DETOURS_INTERAL +#endif // __cplusplus + +#endif // _DETOURS_H_ +// +//////////////////////////////////////////////////////////////// End of File. diff --git a/saco/detours.lib b/saco/detours.lib new file mode 100644 index 0000000000000000000000000000000000000000..620f8ea4f77ef84976d8e6cf948f7c38406e74e8 GIT binary patch literal 182134 zcmeFa31D1TbvJ$`jik|L$@X}6Y&mf@oH*X%Bz8(P8a+u9&uGT8Sau+cWoaDCktHFG zyg*apD1iv!vNWNTrO=PPK%k_Q5TH0qF;FP`Qb=jwGsVF!HGGDeKZg8&zjNPx@69IL zG<2an`#s&c_uO;Ox#!$-&t2YqD{k%^>)-SI`s-TrueEE}tXp&AjcYdElpnvw{(1eH z^&50>XT4JDrAl4#^WXgbqm@c|@3$^f>VM%~@$ducw{cglKdzp``<9MuZe(JtD?1$O z8yaeB+YyWhE&N}zrtLQ6Cf>Slv}{^*WWUvS&`l2KYrg8^n z%sW0~-tn?D$0x@3S!l^7Zs&J7MvWaDEa{n_#H-of0Sj-jDo+l^{QfL;&4Shg=$ zlz)SZphS9a8`5tX&x~#vOpj;Btb_g8(cIw3aL3^IXkV^>Pj;-WZGC)W*Y&YanP%P2W*2dUStS4n{PqnqR-4+y7JvqaR&buWK$}(W7vA%tyBSVA3+0@8$ zRJvVLor7cJxzL`z;r^_{Q0L%K4$N#&x7@NO6yDc&N48DZdt2Mqpw+e=`f3u8b8I{> zH6Gk%=ULkZZnjWI4Rl9euCD;t$^!_4%ds5FFJGbt>FL{79wfDAV))JrplWS7=In$b za)om{aVAppKuVLEv2@|3*@*|YOY^-Y(^X7kQDPyTMF6E~b-}vZc2H}#hr8n&t?e*K zBD74nRCI7?@Qz_hNJ=fBE*!MFfrr_HLqj9|Xk%>}q)1WX!4CX48ggOKwmKC67mJ&X zC>#xTS(#LKx@SwKBbW-VU)Sd7qd^dx$c;|qYziI41QW2!hO*F}Z2z6Q0>^u@*@5gp z33xEQMH}+a(8##q*};fb(@ot8jf@^TPt|Ra_7IvF8_NzG$}XHiyMid1j_gp@sr@`k zg6-){S2_%nB>e|qt>KA%g7WcOP_H%corA+gwV>f$+#XWm6JszT1*&4|gtR8J zhE*@2DBg=sTZ%lk3KhTGg(s=jz+ldnT&dEbsIb=EYeWaqYF=N+k{s z?420TrTSppV7@$nqW$9A-ztDK`)fK&fwZSXvG@+FCzaUIwib=U5)(`KjT*Zq zlDg6{UT?=(@J@FeDo&7$`Ls)bnL5jkOL{0SI5XZNs#u$5Zb?i2O&hl-zaqT)Y%U6wQzMo&A)XG0nYS~+rdf?#- zb$op#r~Z^rRjVq`Klhg#V!F=*qksDl=l&~(s8$sv|G9WIPWQK_gRus0m4~`Y#eX`* zOR+c15(&Y-)%L$iCuCx(Jq@^Ir|NXMBcoh;<}8=LI|P-Z_neNfz2QOtSpXoJqXc zA?|ZH^>{w##-7Lg{Y0gisJyV*g$tX_{BJb{f$5G?Q=sMSC@1bNc6fZtf5R!+->CQyf zZ*7iirY#XR5oVssok=n=C1$vON9Mu$DYyfj0bF+1#2qV> zCS}b+rM^@E*R5LGSLd<^a|Q^1+Zb-eU)(RkU8QPNYfF4*AwK502kAe@&8rf3cS|w8 zKLOqKE0lW6rAjToOsOWdq9ndI0PY7!zw2^AhdHs*_?9C6oi@y4^4C`qUq9gf5$QK$ z9+6i$`l^u@w_(!qx3VO@4B+~Ze$<97M<4N>uwnjn27H?V_Y0(NxDo+e<>({7-GCXu z{VLp?ZPfC>768eqAB*tk&uv^Lx~*l+(L%Yg+>Zk8r#5W4a)W@Yxk{-n+*#Z+>A@7z ze}$V@Ieg?}_SH&Vi#v^bCO+;!y7wx_$K8PYxD8vb+m_X6OXzgDRiuhaO-=?kmv&uo~-=h{4I|!jr6~HC}w^V9R- zYq=ivhnv?-`0le|J|KU~)A#pCzh>k4@wM47d*p9D>s5)XTi36w7hsndE!5+ft~!o#v|JP-LkEgUsQQkf2H4$g#v32V8H zu1d`(I=z8KFWb5}nGfY5UnJIRCGjVivU);0F10iJ)FL;t`1k`8V_BVlkquJ~=@t~Q z)K02VbKN8-`+PgKRy8rTb7bs5-`GHQ%pmk@gid@;gdoKFi45EV_9SJL$Y(d-zAnPL787DEz5JN3npm(r#N8*`eDws+q zv5`EOjP=Yz`oDtiSrB*vJ6yxqQQl=GX4%MVZ8Qt<`xX>7yJ#o+0;E&`L5rt=9ntn! zWG)g?D7i5b&nNnIfNsddwpoctFdnx$8Ugr2#8r29gff}M`1Lbno9ihl9wS+a!gg+JRjg$xtF3PsI|lML!XXu>L-aCN?`2 zj#{13RL1H_N8^cDC`iJ7LBh;#eoFhJh-m6a1bZnfi*Sssf~(Zj5$<;#HL@dVs zHDTjh(^g`Kj!cl&QNa4*$&~!ak?{6dEJDI_NU4s*QKO6S>tW=c6N#gUE-Fwa5lg4S zJr?Cp4r@cPNG!2-BT+5_sE@QP$B&2bV`03@N@b$4j&#JzvJPkC`nT%U!E{hU{(AW@nt9L^>neu>kG5@veZ_<)Wp-&2)2nZu(g0#Sc)(0M)j{>N4VF5sTRE25w#M*c*w4Pks#oF#Kt237*I{9`?#UFmkoCsv9r1o!5xru zxTlMxg zEAVp+B`uDp62YD%`>l*^wTzBk36Q&hs0i*j6tElYVIx39FMf?jzu+F&v6Il3|@!0jh~nDJvQ$Nx}Ju-2*b4806#a>Ar{nmD$9 z%$=w@X$@?^V!I*Y>Nt#Rf-EPHr5wvr5)@Z8>Do?qLWNU1;uhKC?`r%Gi;uux4Z%=| z);$_bZgDL{n)N}QUP+AIv6zUG#$g2_md3?clMTsgMPsnGwyID(G&A#{DR!sF7M_R( zX)>kR=oV@!c^NP+)cvZr-`2ei%^lK}j|5T6Z$nK$%V|8hrS8za&ashweDleXr_gQ; zvUH4bo5xgaizO7ak%D+!c|XN_GXK=@hCq)J+P&*7BQ`-@a zwckooiKRx@3z2>Y1Ozfh0X_P~>b(MqRqz<85hT9Op`Bb3)2z6?dsaINq$D9V?er&_ z5*GD6Daz61U<&%s4&$9X(V&Vv*(R5y*&SLQ#r24r7nC+XgY6?JB z;htL~VQ|(NqcmDUQMLFUZaqd|mZb+H{WZHsN5(Tb>d*U82;^F#UWo~b80>bVS0tvd z<7Z7bD9mKod*2CC8oI+hP~jf*4jHGgh-dQ(#uYde$bo{!y1mk%QPJoO^h{r{nL`{Q<3O`6z$6wnl;adZ-*~p}BAMPNCRl!kAaa9B_N75URd0E`}%^6`mV_Rig^ep2f zFt}xC%juRuCe{HFhK=qJk@Y|(nyu~VZsa{^T2YH)7r#3qszb2XAa65?haXC>jk?G9 zBc6DA4W`LOSeAG6M4ZitgmQ+USsdN5Eiaj&DLcLwJ6*I$S3{&Tg(5C3WgE@l&@qJ= zq@dAmVUf?5BJFO)_*7Ph)5EYKzXvdA$c|uLt3`%4BUPMD+sCC`SQ0yxT3cVKnAZbt zxwo=G7JODqziqBNXc}4Ot3zjmN`W1sHCTh34X_QSJrL?@#MK4cVLn*Fj(1;JG18o6 zBpT-Lh=m;{e(>S}sQ8A9ULvI@46zGX0yq!TVS0I-WH|b(da=8rgG!E>b z*#0@>Yl%fV@F5UDaqRXeVL)b@f`C%S_~(e@Daw_vtFieNl%}eysJ^= zR!>`v@e?3TO+M+HJX#T-jy7(U-|^|RKVhe|+;?=sxBlqK>PIR7dHdsjtaPF#a0k>f zJhw=Q>u>WV#KUypT;i^fHHj*<9$}y2qEfBmI*wn3R0HU8uQmjkgQ<(5yZWlQMDI&1 zvpHt2s%h~9l2zy5WAB^^AdX=%|FxW$CHiXUckN@~)@UMD;U2 zvoTBr9%aJeAMrVDJ$0nzibo8mM6qC*mAyq%~2q2GGXOMJ!>mJFL zekw6-`Qsj#*AZLv_~c{0$?u(;PCs?T_sS{j=_AoITlX}Aiz5$`ePntXSPXGMUU~Ai zBk9u#kSr-r5r2ikPltjj>+IxRXB8k z5xPX;C_Np=>RT#tmw^Hu>PBdZ#AOj$ETKO{XrY9t#!w#I6^dF~qZY~URy-TkYCN0O z^?1$^b)5%grs~J=T%fk$d5L-{I6OGM zr(`=@Xty)^k4>YyIr6q~%ti`J7SD2Y7vF_v6pOqRcTK-U%|jG5O^?Qg_aZYr1EPKE z*=L{S>`2q-zyZD>$anv8*`-K%8YzAtnmr1t?HoFl=#C?`8L9RCyO@o;Ocx;f1ks`3 z#(@K14`w0?ZGaqf$#v!K4VAE9yri5u}|LE z-mcds=OFbgQl)R%qw~-VokQF#&{NmH3oDZ($Cx2%m^MQU)r%fc#~MWQ84}a96-{^Y zsE-Zt+1XRpIkbATkjH(Z*)*xt&AE8iis|*MH3c%KwiAk_%mXF*s;JjAa+BPA&`BH0 zT5a&uDrHXk+aXE+o8PSe0pz2frxMv3F1IYUC%?N78Js7tRvt1V3zX?x6REfvkd-8gc| zCCrrB1~6SFLxNwdtUR=dwawk_Pq5k(xND@*ZIw_no;?zxK%x?2?`g=RA*xiKrW9n_ zmh9MYc4+;&BI+q!QqF7(AwPXpG-J-si^EXQk~H-U3H9OyT<7%yjzm-?dX+}qUB%gV zoFLxGCri5lFG5;CY%?n%Aeu?$0%8LVW3)Te3Toqxc-F$sm2v~fFF9iBQkSC{-2hDX z&)^1dmZR7WpncX=!O-~yxeriUknD+SVE>B+DM}#JSBOON1lfxW|4~8q8bPuoO+7*#H=MFgoUA=&ogmuj=n3Rmz4oP081qggw7*EK3PXK#z9 z;2MLhaXPwm@_WAfK08rAojzlGFXCF#wyhCc^%4|PgZ|98nf$HY%=;0#7k5Ct2T$!2 zdv`U<*m^(CTd$_?|ZftPZ1WpXO1nH!J>2rogwZU?e7bBS- zO^!vQcg2}_gSl?t#(@J&qy1pV*ol@2Wpi|jBvK%SbAcd2s0f!T&jA5e)3TA(~ z#>VWn*CmMEfY=WrTg&Kfq0*ca7-X%o3nvTcl%t38m}o*OdveZ#SB?&vwnGikZHFOg zJBLs0tffbpS$($1Lz{qzIU=Z@S*1gpL@9X(U^IW)!=lzYx;VuU%uQ3q1anURO&yzeuJEy8Df zeg}iV9{GGp3{RHCa1^m#8Z?G)mBhf>D59Z=rw5-ZK-oyPqGu+b@l8pE!hB2#&=Ko& z9K$MBFVexYXHZmma{P!0GcM^zj<^LkZ_j%=CP< z6X69ai{}+$l&@5GBYd?C-<~H1ca{1GVy;#Hi02yhZ+Nbiy@~785>U5Zt;KVL>caDS z8SZRU;|SlNrtrK;eF)FZ>Jxb0to{zqTh#aQY*WYa>=rjNtQtW5R&^w7Ln; zZE7=~cc^we_o@hA1WAf9JY}zA10Obb+HK4iOrG%R5A%wWM`# zh1wR6pjaSNYTOYNZTY3R?GY6H9$G0z`G%|(QReoAMf)UT;V--_TKiV?qWGW@X#|X=R`x9&yR6q9f z;0sRkW%Bz9Jbh4@{K+MDNrYwUY*&!Yy2r-5+xjS9(#~GmLp!4=Hr7kcFy4NhaM&RU znjMB*(m#G4(%%l~=a}?e2QQ9vlAuXv$R+(_=OLYj=Q$?5{~}2z37T|J|zUVn7ec&QVCkdK# zhFsD=c^=Z)c|OOa?;5?hS|o=D=_Emu&X7y`p7W3{zIRz& zUw>hCy~(lbJhJ@a>YM~-w)1Vm-#?*?AXi1B!x+w` zFToePcJ@~6!2F}T0Ms!q{XJ2*k;$=s(>Cx>L_WS)2Cg!5@rQP0!~mT#PN3@JETIc-L0#ZxC3*i1*SF=M~R z>Gaac@B8li3Z_o5%A<#+1yd*U!I+*p(Nl9Tg;4h34#=3}UJ1PyPd)B9iqIk4H7X$D ztD_w95J4XP^I_=I-unH9R0 zZ9repE4lD)w5qJ&oN62H7q#jo6{RvbyLKo$j5uC^QLA_D)<5thW-c&d8PG=9${%X= zkcMGf5E!*Ot7FLxj*l#O5l@H&X3tyq{9RSSWk0?ffBfO4 zlP+JEBaK(JY6VOyLWJXc^j9OSuTB#H3`^kxqmt!DVkYfM4a$=b1M~8tn70?j94(6Z zPF_rAUv^*rDD4uj!dhkNx>g^NbS3i-Zmq6BtiU+6O5WUDw2T#zcl@eG4D{Ke_1 z2Uo7!xPIgHRR|MLO&(v2(R>-Xwk^Sq`7k)g_B=oFIcCFjEVJ$XEVJ|W6DrLv4C#a6`>N9E9 zHOBcnUX+wuW7HObacYcoySXlLD3n|t8{UkFDyPPnswwo^I#O9x5#$s4_`#2!`juN_ zZ?iGCDAb1N58-(B1pOk=d7yv1ybUL2%@=1Rd1-5JG=VllU>v@P-OY8Aor^h98y>#U zF@t7f!Mzg;O0Jn@06=Xj*NZVl-b z7$fDIh(X7ArA&HsZM52@)4$A@vcNdCL7LoLmzJ#!_T#RU|L-Rgf2Jw)N_n2Z`~#kR zyZ-ynzU{lNl)qzRo`>3~tRPi{6C8T#cbU?kjxk_rz}fz8n$!2N{|@2 z&%!T(aX4jpZmzvfSNEJfEqKFe?d`=(SlV~pi$$h zR`VZT^J87V#`EOLNlDLhKpS{nn&uOE-woGv2o73783A6uu_VjwS1Z_d&+?`KdB zuXoDR@J{&(jKe!|xw&K|NpkSv<(+j|Rndp1srW@jye|pp^0;twJ!|tWnew=x70BmeNf8%Zk#Z&YiNE>L za+ix=+gw~CT#zbq!E<9ihQIk-5Rc}f($4j94ddZLVDh+dbJdut)44nrdl_Q#xwxc= z3lQz$qUvvd_6?VdrR)T8Ef+3G6}jMPHBT}+Pos!Ob78jQeOkkKxDc2;F5FyAWw~et zo_sEr7jdydV2nmx{f?Kt+vQ@D&BY4gf>aTXXXJ2vpU(yHXf9f8dcLe-JX{D&9v5z| zKv^y>1)h8^Rupk@nZOt>Cja7{+gvWT+gw~GT#zcl@noKF<8M9}#G|=bVAJ!IhVgJA zFnL_Kxt5gWVkPk8b8%S_7nci+;o|l0-#P4ZvESz6a^Zqh5sv2p{Q!USxgZ|R#WI_o zA8Hs67Xp*Vg`4ZrvRu%z=W}s+5f?B?fH7R${N6|3>T>ab&Bc|%1*sw&Pa!&uzxiAc zkLKcXo1UL)7!MZ$lgEXd>*}&xu*`fet}NmL&XtFYxwDTAxmaSB&p!Gk z{^oN*JerGZYSVhX)j9@H8M-7jdylU~U!!n0=mDdcO<( z4>lL8gbPwdIG(tqCwRTR9`R@{Zm|pVR}iV`^=c6o7>5hua&vVW5}7Hlzqkg!t12e& zG$5;rxVTne3>OnW+zufd=pWf!Tq|6VD#G!cC(d2v%Yt|`7xbEVEhyqbVDh+dbHz=e zlGiJX)rhI8*pDYc9{Tdqnmd3GL|_zXi#q{TAn7C-00Ip=)g? z={n(^ybwFjq;jt-jUz>vyncuD=-N0WwP5lXna)Clz&N!*>~5|%=I8SCo^Vi68^-S? z-s^O2XqXgZ*5a3!#V&t2O(Cs96u zWbf3|=TWu6HMeta8^ngVz9DOihS9sV4pDK@vQ@Vg2|>9>14!w9Lr%5@%mLhU57X>c4pb|OTV||7uM@3Os{I? z?d@~EApA{3^nc*v z&oh5kdgjkrk6-+O|JZpm(+9Roe3{#rfD)T*^`XQiv;qlh)NY<4oITiop{M2Exco++)(W^Jl<>`q$s*bP7VuQQ)tU(^J$LLZ= z30|dY*p6`m|KtH_OvRL_BL}>-2 z2_Wvb&#y+ByR5c!rcbP2p9gvsK;6&4&G2n>p1<%_w1oT<`FQ$6iL>g{iE5FTI7 z{-1tg-GBbsbk4i=|BH{F`>!}s&N%|3@Eo`Qq|@T$&3gFQc(b0T^!)zBxBspuzVYCa z-^#&mzdy>2Jx1P9ZmjDIKBbM86J447%82D$IqSesR~%nFK^H`N!&l-$xyvIhi9Y2VJ=BR^=ctP4HCE14%Mp=LY#wa zkT-1^l9wX3PW}Occ<-_6ST+9wN^h3i!(S)(csn2RvsBz)Fjc>fE`a7Z3cR}RpTayP z-ikJ7+0@_%S<}gXp8oU9@i~a~WM8ZOVk_qa=Z*Gc4|qUb2)?$fA+T~*1YzD7 zVr}S`02r!Q>yO5Hn%pTI7lIe0&fs0Bsp#2hk+7VHc8WCGhbq`gm8<6wWzVM1$zdg@ zo}CEr95nN8{gicD^lS32Qxy}{5}dx>&-A1y)w553o-fu@>RLXlolq1Ztruy8uEQNr zJDt!zgtU~Y33}?dO19ruOReI|GKj5}t;o&ts#c3^=bJ4rY|X(*UeuRs@SKM?jHzvu z{USw;S}Yo{RP8``xomuGRRajG#Ea%U18gszSKvi+o&iSrU!`7*=hbpT*tK##$90O! z#A{^h=31QmmH#UGL8S5G-(MCXkpat=BntgEmVIh>&rV91c^!aSu2z?%CXu!#Fh#l`~d(5^vz0or=PWoSm)&(8+&> z85s}@lX=k#s27yF-cF9M-$;m>(ja!EQMDpGOJt}|aBGoG_jBY8^tmF*0M1*ZY;VPL zfmnuxupar+;9^A`?l|sWxYAh672*9^tl&EBPcM*;jr09_zAgWAK-Z0K3jqLPxC#Bq zS;VX>pK;SBw*%A1*e2wNcyqj%Mi}WE&vlKA44ArRCFr_lDF00zA7U=#O&x%h-gmIu zETwt(9XwZW>TrFGjkGS#QyO@!_N-_=D>}47k;rhxG`VA zFXj}?_^Z_am8XgEuD1zX#R$^5%J%M`Kj7JYEIlMr@Xbi<6h4}o!Ze2_Oc*GC1~JiIHOG^kY-uffw6CUTJ? zZ>@5VP*nvD8`lsQ-+lVDb~g~AA~s+8eHv0lIIcHRuk&~D5Rc}9#-G<(c^WP#6M=EK zATBr8%LUpzyj+OJRD2OhhKq9V)6g)`z)a@W!^#_>@O>g)`h6NwML506$#}0UXjU{A zS_Vw#Ww@YwBrpya#O3BPI>bE4<=K5hDOOc{08hh({q~G!<&=(5soggp2M7E>_605O zwY9B}Z|vHR-720l`}H@s+S(XvpS8;!EI~nAw)?txRIbCN^K#RSTcE`fGhn31yQXxuo+gS8?7G11w`jMTOXAxD zuw6+19By80C8hAu-TW?K8aoN4;Y!i>3Z%6H=G`8+Qusyz_i@0i>LNC6vCHAR9Wcjj zxN`KduQ+SNT+>aAH6{7I11WK&e^g+~^UFca-vj2VF!oU5u0#)7ioQL78$$ZmaPulh zAJjmduwmxX%R-M(3g2O*tVQ~V1*SZ{oq+o^V6NDL-8r}`(KnaE_d>w!NBUQA^D0N* zBS`xf!2EdxJHc_+;O(VS`2G-ZofvUEj+<9Ge3v5a8-O{ByRwJ9LTP@t0j?G4`*HIs zhmQk?SK2VYl)t6*`ELQ2j$z0WCpO(*m(st7k+vByKgM0TmF40+xf1Q|eSq7A^ri%{ zm8b7*NLvAz$8digcV(IS`wHNKNzli!GcNiQrRZCV_|1Un#odRy0=`-)`lzSlNdFRU zUghfVA*3A#%&NmJa@ZN{kZ)YJd~pE7;yX$ z=?`&?h^rhvj0e=?fcZM^f5u&oU#js>kbd)R#8w_3{hqiDbEo_*{atgArY4d8o%7&Z z4Y+>;%q4KIuf$zZ#va@UxL%|`g_~D7`A#y8jT6@^0?2>0iRls~o;-k#-y~ zvv*;W8SZlUUJAIIkp9=Wc~#;r)qY9eX8`jH+*SSM@x2OgE0F#H+`P)+yBcYa0p>@z z&)_ac-yq=T3@G(d+`P)+y8>yi2Fyore+qXwd^7|9g!J`UVk?jD9MZY~6WWdMM&qu* zWMC=zz7=pkK>EGxh;jLFm#V)95dVI_w4sB25$>uo{?Ho$_co;8NXBuMFjKhy3U|4B`4hnXKcv6>evPl3Uj10#qTD>e-kjXkHGHY##hu!;@b&03+eB~ z&8wW;_`dVU0Q0#&R_Yw?YD{OAqL1z4<*&wM=W7IA*>?1G6m$z<0;r$?+{M|5G+y4yxCT@QjI|ST1O8p&R-t=zx zP4DGS{r_Xrm#?RO;CSB$1eNnBrKe3O=wZMe{VNSd{Vv7FBE;|fu!cD#e=ADX3;nB? zA^n>+Y&p550Cy5Fw>+#=7n*={~@{7wPpJ zXyPh|Z#B}E0Vd*sDcMZs=ZwYxSs%~^;0-i3Ae0yl<3dL0Jk0KpTo_o z9DO$+?Yn@PcN7b9xXa;#Nl{Ux{~R~3a`@IGt^P55!UFeJ+~x4GJD5Ov#pA?Q9v|tO z2bc)%ow&>4dkf(1Mf!>-h^;(6*5CDj8NhuIcR7470oR;K)U1W#GAdu`Qq~TiRx` z8*kW-Z#rlA)ou&ljnuJ~c5EmTwt7+v5xZm#8ExiANn;ba*lzvGG~a_`3f_ZbN@9Os zYGhkqXCDrc9588>I<03UF*33*JRIga$8tMgm71?Vb2>UQX1}YfGhb>0_|zg7Kwcjn zm>A1ym_;^BwQ6x;^b5~R?Ie74%T02!&$m-+RTES3{`i5uv4QNEL5Lj*dGS55lwqb$ zGb2o(sKMQX*@0y?x_UK_*{p-3_;d@_o3h<_>pMG!Pq^qxYVhR6$74o^vN?P?MyECE zywSmNd}al&E)U>i@ViEa#!Y&YPPb!wMsn#S=` zZ?=EqbT|Bt5A2#_NBC47B2YIFG_{O~t5pNyI4D#2x~vSghNdul1eqd1W0hS-vB@rO8|sN`VARARf>%61H%I= z?J}y>k`gFFc-M1RU;mwKMM+_&8BmNhN?=kd6jPFT8{MQVvGZVZ9x2$0k{#TiHHj44 zMZTN509l?Ck7D>Q|j3c&9U@=UB(nyk>gG@8JN-ZhO zk?DzLy767=bOhfduWVT=OwYo%QMd2lCt^eVq&#_M0(jO5T~?|+-Pvg+*gBa~shV_( zT_Bqg*r;G^gXd_Fc}MXh8KpEqBLga{HY z$#hvgRw5kA;4AYT{6Me$4ev}m7?zJCCjd2=I0^;oj>J)G!Bjd4c?FZP9#%B5)Y|a;o^U6A*9Q}c z;EoKxm`)ToBWgirdo-N#$O>OZrmUzbl+B!C(Xeu;$W3`#OdXWnf#%D|m?x8^*T`+b4FzHZ$X8%$O-^D&&bW{YO;GJXa|^GUaOnA4h7VXq4Ud zO1>)2$b~3IL&6zJhGRXH%={O2$|8>!Vf*9~BS95*?J}mk>2OoXoy>0)60M-%v7#qd4}l z(4$D18yBK7sYufKW;bi@lSrGTJwc|%QrO&3$v=w7rjA6gmyJt4bkA7% z#-06n?CxMsN5o?6Z{@{%Hd49_3q(EO{K58xWH)Dq9|2FYowF8d(VN5)Yd2nv-!Z^n znrCF39w_4JQ%Lhm$RF%XC2d-#3)$*Bg>qAMZq5EtqPL#M-Hn_^IkUx5rcKI%28yYgl?K zqI|m!<+AL!-UEQ;MIVuG-_Z+0N#CPA7}~;2#OotczPG_juQ@O{j5=X0Q6=h1ai+ns}ORfHVfl7|#QsT?wNw`#baD;XyV%d`_6U{&t{g3|qq!`>5B+RG0Iv3{Hzm ztzSo&XFz~%4~cY7N32)66j3$!Ei8^D{HDhqkQe#%Kt$Xi@WLiP4YFo+p?|_}C@M9O z^1KhxlxGMIkGwJ?EO+$6yfFE&o7~OclkV>@t9&1R&#?_q#-#+L&A#o8j@a$faLlNtq7}{j&L#_ z?jX;PqEhRu?ePR`d@w@&{zt^jx2cQ8sSCk~O(FIBc|gzr-XpOt>XH;d23bIurICC7 z5Y|~*ZA5#!G~Acsw;wI1leU6&^D;o#RoPDTci}hDcUzG-`%lIl2SuJDgKR>y6ZNi< za4czI1q3M{Dzbeh1kJ@k?ruDqz>1M?>~(jcaR)`mq)H+NpltXXvI*^=u2n%6O@vQb(KtB?va+K9VPzZh%gUyb)QiKO z>Q47;A!du1!@A?7555P#o8z4p6ek{oMWh`mSqMIKtY7H$5-a^33Q>*Qf{AdjCzWZB z#Ugx}myJFU?+mxYiO;jOj>;GIoxL;zS&-A>7&Y6$F}md?sTKXmvM>^7 z2OkbuaR0+Sj@W~2wmShZ$La{D*v{Kw{kO25gH)K?ku*=g*L9!`ot`+*~_Oe7}{mF=*2HiJ9s+oQFg`e*G=VuS)i`pZC-ZY8rz) zE3C923!pXd+tx=Sz6CBonA_2H6%r<3jT#IET0s!0TUbL_d){aR+lidk%^;T+M1xg} zK9}~2nW&Eq9BSEp5H033Fwe)ZD-}yaN#XLsX4;xX>wP6~F3t0PIHvUYJroSfsYW@v zbvKd>>0mk|I5kQqHv~f=485S4$t`ZLBWH7v^t?kqSndjz8y7Eyl`2`SDBN*lsiq<9Ubl33TaD91)|a{LlL$m^$z%A=~TGKqQODBK1+mc`8L!O+HwZ7S2%GH z&(5)tef)MbHQ+Kp{s#{lp&jDLrJ0VKXW+tizW|iXW_+yuR!9ir&8_g~*vHR9$}I2* z4M<^_fVmDWcyL-9i94M-wXD`wGMf0g$ktlqqa}Al+hY;ONu%*(9n?!5h9b#u2Zg-~ zxT-T<>2L=DX4wF?=R*L>AKC!nQ@>taO271IhNc*>s@9oNf}@6r7P6}6r!z8-!78pp zg6*rpx)SpdVvZMRuEtFJkOSr__+O$Z2+uRdk)&c|ubUiOYaEDd$1XC`H=yU4DRV!{ z43L=4SfV$W=x|IbO#>-!!i-l}Fq%$9+0n8jI@t3{`qw0xV~_bnnCHjK(1RMwZqk3C zKZiNcOpe&Tf$^>xmD+t%`;H9l5$Uc(S)BX|1<^#}cIU$c?&$H3fXT7NN<4w`btTf( zU^}E?gm*!+Pks6+0A@v#UG1^$##g75zmMqp9(dE@HU$Y;;+QzrI<=!J9PS|XG&l1i zrTRZMKl%s@Sr@@{s@tB4O6{=4LOmitb$nYa+(B9JR{$McD4hrc%pH%C3-SenY&`Wr z3RL%#Y}wIRM_Nyo*?x%}JVWhkMTOVy8W|bN_6@U_WCuG(do*tUx_%vtVAdL~GbD%K zG!JBqX`-{2fDXWRvJ$R9Vio2i$OWwsS_4cF1;C1|bLx>*djdu37M2XfIxJQ#i<)H= z8&j9T#11OYw`HP6Q`cd&r@P!a3Mvov(I2&yv>xApaA~~ zK()O+9TWuXm+M}2desYao2*|>WNY^i_Ae>jAg7uekOOnp5=Roa($Z+0VJM76{YP(a;F=mfJO5eq5Za4*>pk92h1paSfy& z5{DX?i7V4%>@P(`&8=sww#<|(N3-a_LhP$ap_nOsY7jfhFM#*vOga)wbirxIq(GM? zU>vX4bi~r_5v&_jwXoZhe$$FepQ)QK$(j%rIXq`e`6NoCA+>tC-MKb;0Hod*358{1 zk^_mkGQ-O89b9_53LWbtEF?4b{V+Q`F9EoA|Ay(@$==%s}yc7?>#@O@z$BQz1Tx=<_Iq3{cq-)zc5w zO`huZe3af0jE6J!^eyS9n_ED?%y_XA@XLq^x$6$G^Ermp4eeA$m@#9TEx+uV40GLj7AYgu zma!dITi7h)Brv#TXs^jFgB9~2D~9TTwjJ6+Z@CjIC(r%COjKo7b~UC=wDV2#?Z*`V zzz|#rl5&Kkur4r*?MJ8h@%SVi>vN3H~^DNOZft3 zZkkdGp@>D4L9`2#({wUoiSTWDvbVE`9?0j>e=W3!)3$fzx)roStjtEXSbMSw7)PCYG9H2xm)F#he#Eycq0?;#(M_s%fKN~U7 z(OX5J>106KNVlvP_oOMI6~JoR2&;&gS^LWn&t8Z=C`}nBp<7~+j=XtjCJ>{HTBv5X z**+|d4HIN4-mF0DN)W~%mFjL*EQ_KMtAz{C;wcSIL`$EDm2=p1g0KmZ8g|pH_B42# z>x@YCs3knSdxU&90k*M=!$o^WjZ|_HypVk9|7l)ppwG!*G_RM&`hljGt>trUE%wA? zQEQOpo7(8ok7I9m1(2{egj~JDBpR3&wCx~fu}wWmef$CmHGoG7b&C7y zYQ{0ypUF{hXOUXX)E!LxxdR)P5gvZdH|y5v9*W)g355QM1KrJ^lzL5Cyh76XFsgW# zo+;n7DI`0QDCp0yedR}E6?bf$Qh5!flAjjd$DKIbr9^-S%K>oif_>{J0T9T?klHgb zeCIgz_dX=f$xrOSCP504YcKwIFdkxm$qu9w5euM?Lie7b(ctLdHtdnYw4im6Z0tw6 zS)TNcu2`pSsEF#$NGvFOB2EEPx=(u&fKyJi`|Nm^%IX3jJ79PV`*-RS2UM8!lF<~c zNiG^j$L45s?KPw(X+P5)I=~0LjdE z5QBLb2*;)z=!dFgawLX&?4y^+?(sXwAl;)3zqeSJSmXQ=7gFG?unBW8+@g7Q#l=?l zO(eigG9IlSp-PwM^n|QXb~~uhU?M21%bbs?M&WumEp4h-5=km+uvW$`8#hpwzKS9i zm}X>br`@HI6^;jdtVr6cF9BG)%f_y-F>#DAD}RVUuGrHQHhSr3NN%-g4Fx_8uz3Y@ zOL{cRR{kxh!+hHo77WG7x!6-08{KV0S)^mA?U`~)|8XQ#XX4S$9=0`hqxR&3w-;qw zqjdeSMj~3O5=*Gxf_1PSaZa28Q-|jtVvD)7S^PmrNgOZTX~X{bxv=-o{pY7 z7DQ<{nJ#_qSi4_BNNj7A5L1E6PUWU;o?v&ZZ6Qu|dRFqbN*wbpwNrT>RXxLal}on3 z;aMr?+WFKk46;syJCu@&cPcsb2V-*reAD?`QU*&EAj_GdyRP^+8`t(%# z%;a5Xn7L{?ddAND6f-|1d935d+O!0K1`UJ=iKkWNmJ6QNspzTc^r?hooqW=V$YX7- z0vA0#d1xu&(#NOUmrhwHrlTjeI&kUZMm`YEDr8_U7?6VuuaMB&@mwGwY)-dB^ALj5 zh#MP{@vKzb{awXlMIgi|o;7kZQLVZMVZVA6p7rvr`v&!w2sf&~#&ed!>oRzI=qq@( zC^9-nZ7mS)(}-m`O!WwNRe9n5k?yMVrF$GoStMO@p{2`^KIf4wz?L2k@SA+P;=ZG~ zM#Q)kW{zoWKpy4`$Z>eOhF(}ey;f)a-Mc?_RdZu`>UWO!_YL)pwGL#lYZ)KgLSQ^M zHqnof;gv;d%ERcW6%)8?Gnw5(eRnvjOEGHZ7;>2-QfI1#MTK zPB|U*PkyiBzR%{G(d;LGB<{LI@|SL+<$VO%A@Xc7ii)VF_DcgWpvb+ZO>s*#gnljC@SJ@e3bi`rP zm@+nP%@RYlDZ|;6XQr()lLs4V9}wQ!h(jtJU7#I_o^kBW8L?ZiH)q6doyDPp9_=_| z*oPfyMG;!4-A;(&Ha3IGQ7OlkR;jfJSBq-Ys2IYva%f~-ktMj@&b-JNYWeAys1x{EN3q9R_3yQW{FjOap_GWJUvF0-R-kA)X34XwQ_tY-=Zds2|OFr3-N5kF_ih0xD&DL z6PS9)t;FS}D$&*fQ;R%v(y2vLKcr394?}kSw6J52>Z4buEd>3WyZs01A3>v6&%6o` z9Ng&K^>C?wxIw>NMaE_{Yng`3a;{aGqn-B!Y>Tw@jBUA5GvlrkF$Pu2mAygv= zud?j~zkPD@VXgG;TGi`R81ePe$2X}o!n4#cp3QPlYm1sj zc#e7i&wzR}p7Z3p-wV_S5MHD{jOSw2Rv=HjbS&~@>OHPJ7nhP}5(EF#2(27XVRb}l z8iYstTL8mjSlLFZM|a_rUn6hws^!g)x3#<0UD}1I+b1YZT~AqrOmnB_QzhRluNEJm z1{$2NsU(NZeHrelB>PiCQ7|WNaES z+9y3V4ShLPb*oRzJdcls4sDK}8NUMUd5W5Jdh*7F;}xG59rURjLX16E1wA}>@+*SS zK1Y`9voX@;qqkovA3m>^?o6LHtAYByr3<_+Vs;7C6 zo?FEZt_nX|kPSx+A6-a$(&(`#7TDnX=mGUoJiT_pC%t%$_%pTQ($&eAh4sL#QH})G z2Z7HP(a(_)K|tLPEc0YUut2>V;YDI07OPN!GCXXTM*Hznw*_5NN*TE4H#>&6^{5Vc zmY%}*14AtYSUuW>w?-*aDj7E|)sE`^l7~YBK;r60hp7;Ka3={$Jt>raD?nKtTJj8) z=sIwiGyQ>M);T=YNl5lwm5deH5v0#;-s&4q(YE`mVBO(>rO(JY&XRf-srxHWZorw( z3&$%@J_*U9|2Q-Gn4<}PIP!C$36nosNCySlbOzEpIrronY(0uL>i&HFQHs>>5$Pbv zc@TF%y@HhGbeYA#)En@euil8~0(^EezpcLwv30nadY3ESf;m*}4|U?5&mzNbBzqMlJ9bAI$x?(= z2(icgyV|iie%y#v;)Y|pcaLXt-u6!qGr~#(^vj(*mFjTKTh^LOD`sz4L zuk3|<8X-YPe2xG9ttCg>ZhvAHp#BthKqSIWg;sVko|SNq^J|RVGSiv*T579Y6%FBW z>&5tzvfc@%wVicRBXzRYc!zG(Izv2_Koif9=~>vVL{CXC=$uD>nnfM4P74br6|N8T zlTObcIZn@jR!Nx`ISqxx5%%yEtD>jHlSF@YZdE0Fsja?MUotZvI4}PU5TDzMyvDC; zM9((e?OVmBa%$>UxZj#0(=QkKJgn+~*q_@Fs!{jh`7VhwhB%Ab>P`(`#akZZkFThThtiBb7YoduFP))#O%+P??5b2??EaLO3xSGLx`oiGxcs) z-Aj5p9h?CWQ&!Zo`H?+e;hiJt`*(GYObidulu=`;-1Yst@U7?^8;!8^T~N~v z){i=%Mm<f=w92WBIDyt>VuJl}$OK9WCg;e1EbEtSoG!r3{PtrAqjw0WY zNF_SV)1rcANN}#OljQK8brg^>*vBQr!#n6?2GslT)b97+BcwaiA2^{Z3@b(j?n8Kb z)w5Dg>i5ZU2sQW)0@X8$r?J4h5pI;cO=54G#oo54KS%s*ak%I3lpa{)ui!afeGShA z>f3lORHyJ@ZMTGBV z2Cy(#-T`bWyK7X~Hs$!Zz({|AC)WXOH|opk)auKSsPA67NO4ic$tV4KM*7o83@FOX zSYJJ@c|*aM4#+&MFH`^7t%=#DCbmxW4Frb<@4#*=ZG%Z>MW3OD1!!s*5^A8WlPBQA z!Pfb!@QgP8`D@ji0^|eKCYx1 z@>r%Ok0Bv%t9YREL7W~v9KNaI(WibrQH^GDvVL!kG5Kf7sgF5v*JnM_}Z8c(Zt}B3{dhu9w+#UF>9dP_963wc*wO(D&F(gCYmshxIb9aPZ3H6mN-TLAv2jm3Fxs{ zt$g6TPHjOJJg$f{rr3olhdR7B@Y)KXdDSzR@K;*=S~_s7CBK z-T=tFRTGk@Ymp(XMtSq6KRFUXsHcFC)Gn_k#g8GKV_+8 zd74Uwgv!ZNSVlQ9ZJn5WM5;g6jir+5*D^fA8qaYq(;Np5NczOF!;aw6Cyw3Y3hu<@ zK@703C&H~hJ@&?2kG<%F6(h6g<6SX2;V8t3$(LYUxB#S0cbg9bO``y#ZorNa-~z$! zPv}+&U^68fJu&$)QM%kZSX_ZSpbq27ZX+P0 zwx1zXqrQOW83~=ma{=yvNY->_^AJ;s@g3DQj;Bus54G}nD8G6wV(P?$YLrg2N&OXK zW{F9jt)4`9jN^O}7j0P}G%Qq&=$00#MR+bz%kW%^`Ko-yz7(qQad^R5?dE1;8xj}4HzWtQI)tjqt5F1U)w$_DTP#U7#zG?WMQ_%7^+j zZJ36s5^llwXtovp5>lGkBpqk6D&dMof{aTxKrvCYPSU2O|JX>p6&mRUzuZ}*%%xD-M zNu1`9p^`kFU&J30J{OnaQ;WFJSbIhMR+rBrV@(m;p5uAgyfDwvFivVU;|!H#yqN=X zOvPZr%n_^)uCQ_DFE7LJWq{!HNWP`H8nLywnff-D;ervK)@gTycOIS%HzY-K!%z`7 z_5^T4egl1ilh1m-bxjc~G}An&m#h>{USEM&vcgo4(JYv})~w`BUKcq8ELYRbkkCDO zN)}i!F>pT}pv_T#^W-;B&|yq?LV?H8rAk0rojq`z!cfrl++~0%A3vMC3yUtz?xM>x zuLB|s*Crp;eV)Z(rW6A?pVqx!!3fcgEwTFI=@U;wQ&wp_7$@q9@_R_V8BEB45i{$r zWw|UAi-!Vlx=>75tOspdQ40ZC?s@@!1!P>PJ?AO>)}zF~KuC9@UqMKZ7dIoH=}zfO zSIQ)Hm6%sw-V$mWseb8T>(l_kW`y_}gqvmhp+$WJ;dzQ<(D~{ocrH{w$8!ojykaE`hkQBWiL^B-E@kdT;XDO z#Wv9@woD^sBQOnt6`>W1p?Yy=b==*^t>fe?jIzp^r!$yMI6G|%=xo(%-T_H*$(xaH z6RFveF!`8oz|Nj~2vWsah_h3N8D=ErHeSi_W)bgx?~30%s%*hLg5ERYhd+aF+u#nU z7vrf#elJ2=yqzBL(z~s)cL{VLTqA1XSNjmIlMNsB>JY+Bvf|dP{utpFRk+;zfIurr zeYY#Rg5~B-n`9J?iE~}k6dY$uXBM10e~!8GZG&Suo{MM3R}`E*t~W9xcUoo)d5za} zcS?F!F~1m+)2r}d!UEs1!5xt1V!VpQh^Z_xRjr7nsbcDTT|SFU6}REafViwHA*OJc ztQfl4ST)@Y<TCW9vqx&s057(JHZM z75>fEnK5jN^KXux9bbh`_0F$cMLXC=%UE^q?3DmyQ_>01)2r^CO^hdfCnxm^g-_jq z-^Rx2Vc>lHuD16Qg%Pfm3D`Or$u`Q$!7N#7Zk9Q(mZI5&ci8wiBlaFwIf{G``%ujy zv&9HwwtT~Y;@l3c6LqCx*lWTD5VH|CE}Aei1B(rt$z0zU-p6#8A*%Por_EbMB zMD-#RMS^i%yr{^v78OJF!l8~M2RhE_e{50h#nQ<+xE&lwotS{)L9M8&(|3u|Uy2`7>hdlXK$4B!+A+!?_5N}O)&i5cri)P9r8r>bOK$_md zRx2~~b*c|B^{&ps=1m;G$rEvxKAgZyN*BYdAMw`d1_9mr$H8IZ;9*CSM;USg9R zP!Hg@>8PkMRk9PpC-$#KHm~c28oxN;b)pOn>TW>Jl6A@EqP-5Z9TYcP!<$@j7wmPQ zw}u4&Wet0~y0+8cEO_pwTzapaj6Dr841x9hL}?Cxp*;a@~=!&lDc?0F1)XkxJv zX%Sj50dBhc=BZb5>V6NIwWCphV5>UJl(8W_C7fY^?m>U@AvIrvSyu`HEXZ6X3cfa zo*j<~{};pje}mD3%`c;>ahu*;HE798VTx~)!s@n}cd$2@^wOe^f^nUt-f;W7{l2YC z6FRC>d~Vx&Ijg&{!a8s``?(mp#hoc^-pB*wQ)y#2?BUZr*VyWp>G#DBLO$+SsX5s8 zve#a7Fnrr<$_}oa%f=0Jp@SUaiAbGWa>A@K(bi5}Iw4GfwQH4Ni;OL1b(THh?%YxH zbu5b?zu!`HYE__A0h%o^HD~%e3}7 z{#z?*x;!6SXwhIG1Sl%u++>Y+5?WJ59U~ivRwqrnBA?^cy7!9 zsla4O$L_fHvIjb99!Tc5g}3T9W$V7!dWzPzZi{I>i|(>s++}@7+4_!}Ep7N77JTIx zlLu@p>P5o!z@`EdyR2_Vt*BYwzHKear(+Z0p2KNvFQqw4w{Mz^$hO^truEt-yjw>n ze|1PEtW!v~_|hC3-L@yqR;!L}lJn)X_HAQ8PJdu13{WPW{K5T!EJQT7fmd8e#{>o5 zPwH$1(Y{T$X};sM466l{JE&3*CK2*=@f!Jz5I44OaP3s7ZtWn4(;DwA3qV`RBK-nrV z6pq%C@|*9wh=JN}$78@uzsHcF^6^~EqH>P^Jx(f&e2_p-*(k|1~8kq!C|``_7_KY0V=}d_?2O<2ljbj zxn?;q%jKiMxL%TLo^aR?fmzP$;RZI9!yp^?2(S-8o?NpV7&nXLn%}zAbI^LdDEwXk zX7j!d%;x>2OU*_PVpA`4*uB6k=T8G03(gs4FEC7$agWo$ESK+~AGUe_3e4W^W{g;D z+?~K|+=xtkVpe3i9N6c8Wtd`M)&_S0vo?reP;2SF1maPZNUf*2v0Ahy8L;KI16a=`I;D*k^kfHmf6z}eFB65#VBTCEyYh16*nv0hgIo zfQ{x}z~!bBu*tB&X*Qn%Twx9Yt~750wwiYUSD8No-e&#|c)R%*;2mZ-JZY`D6mXrH z1bCO30(g(%FtN>40B$rN0NiBi0Y7A#0q-@aomgY|FyI#RallUV7~uWp3BU)||m1YESvb`_M*0y1(Q!LJ{{ zI$13({!$Ai*`Y)kvU0OB%Z$VrqXfs;m;F!UPdO*oCK_-!ubF0#2wa~Z{O_mQMS`L|LS$PLph6UxEh4md5 zrQ*P}BP12cX%CLy#ar;zs*Ieq_{D8Ukug;h!_3&wvq`|k`?hE%UzITFZ$QJ=02lqU z5u~r-zUeKzBMYbNe>gJ-o~*{WSgh9~bEsJTMaoA&Wmmw6Wtn`CKPquWie<@KpryM7 zDVFX-iuE=3xj2rkE!|ID++8r8jk`y&Ec1OA_nM3Qn~P(|WA8BuzG3rTt(biZDbL%o zSL4YvU(v;CxGa=ok%4oo|w4!JUI^6i}w0ga6RZ;lBRE$Ff>XeS$|{ zo;>&R*NwdezU6o$YdK=N(2tkRuphB1b-M-@6#M}`HgNELCtcfLmE{jGvD*yql)U6& zv??2O{INK8NS{95OCCIZdmv=qgWKiGIK_@`u0xz1(^LVoqaco%q$`3ID7t-Xk-Mm= z`!#^+G9v0N8xu1nf0jI7%$7C$et4RgY_)pjSBvm4oX}pLdzx6Zs-=-%Ppij)_Bg-6 zZ%^d_BUGu9r00bclw#pxRe9I1DorI#tjcVvm@xwx@o3)n@;s1JF>7^VSt6{BqkuL} z7S*w%_3*wJrw*7Fp0)ue8~7!wxgD{?9h+qZtL)@)tOUqA$S2#@ox~c&d0@@wzO(ZD zGQg_OiOy;d3xX&3*6CqvTs;waMa~{M*>(puxDEkZI1Jb`O#5O-DH&HCkIIS}_Trwzp4Mr_*(>ix+@81bG6phdM!ttL zSd=MGHOYjp9KlkrFJ_o2)^z23g9#9|ZBH+e6I;Gpm4KCeJL#n@zwcn9YC_F$_PKcvQ#C(jvXYUkPkyAFoW|aT4Id+Ww=~INZLD1!a*RfN zhK*v6#vw;{{p=|v?XCAY2ehoLt;jwIua?)>Sq*fb2JgtaOYX=bQiQuCR*C!YkBcp= zKO#!rOK=BLSys3x8b?!IJ6pd&@S9?~j%^f(Wnt`yQLx0ZCfm4t7gyxs&`{XEL>`ji z9b~lKSVHH+6i&6w@uB_(SgD`bqQe&#|9;RO7-VOjbYr?H`eA zzfOd>9J$Z%9zpO{f;RhDut_`qo#WrOi!{80?Kbm(Vdj9=C?C*vpo@XM2nBQH6|qs0 z`j#ln+Uv<4mtOLu)1LX1CZ|I5mh)RO<#m%j^14Z1c{Mm&77F@dBFpjH7Qlh}2>cP? zgSBzxt{RnwgZKPqJg;U;e_w(c>wY-#la3 z+S|LE1hFx2Z42wK?`yqv9Lze%I^DH-@I8*^u^vY(3+oW@W{E3SOug{h_Oe%8-}{O_ zJUYGfHhp#~k5BMMH(p5`u(5A1dK}*Tn5SKMr@SP4%0Akz$;KnL^kX>k2}C$NY_i?; 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 literal 0 HcmV?d00001 diff --git a/saco/filehooks.cpp b/saco/filehooks.cpp new file mode 100644 index 0000000..13136c5 --- /dev/null +++ b/saco/filehooks.cpp @@ -0,0 +1,141 @@ + +#include +#include "detours.h" +#include "filehooks.h" + +//---------------------------------------------------------- + +// Original procedures +def_GetFileSize Real_GetFileSize = NULL; +def_SetFilePointer Real_SetFilePointer = NULL; +def_CreateFileA Real_CreateFileA = NULL; +def_CreateFileW Real_CreateFileW = NULL; +def_ReadFile Real_ReadFile = NULL; +def_CloseHandle Real_CloseHandle = NULL; +def_GetFileType Real_GetFileType = NULL; + +ARCH_FILE_RECORD OpenArchRecords[MAX_OPEN_ARCH_FILES]; +BOOL bArchRecordSlotState[MAX_OPEN_ARCH_FILES]; + +BOOL bFileHooksInstalled = FALSE; + +//---------------------------------------------------------- + +HANDLE WINAPI Arch_CreateFileA( LPCTSTR lpFileName,DWORD dwDesiredAccess, + DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile ) +{ + // TODO: Arch_CreateFileA + + return Real_CreateFileA(lpFileName,dwDesiredAccess,dwShareMode, + lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile); +} + +//---------------------------------------------------------- + +HANDLE WINAPI Arch_CreateFileW( WORD * lpFileName,DWORD dwDesiredAccess, + DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile ) +{ + // TODO: Arch_CreateFileW (unused) + + return Real_CreateFileW(lpFileName,dwDesiredAccess,dwShareMode, + lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile); +} + +//---------------------------------------------------------- + +BOOL WINAPI Arch_ReadFile( HANDLE hFile,LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, + LPOVERLAPPED lpOverlapped ) +{ + // TODO: Arch_ReadFile + + return Real_ReadFile(hFile,lpBuffer,nNumberOfBytesToRead, + lpNumberOfBytesRead,lpOverlapped); +} + +//---------------------------------------------------------- + +DWORD WINAPI Arch_GetFileSize( HANDLE hFile, PDWORD pdwSize ) +{ + // TODO: Arch_GetFileSize + + return Real_GetFileSize(hFile,pdwSize); +} + +//---------------------------------------------------------- + +DWORD WINAPI Arch_SetFilePointer( HANDLE hFile,LONG lDistanceToMove, + PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod ) +{ + // TODO: Arch_SetFilePointer + + return Real_SetFilePointer(hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod); +} + +//---------------------------------------------------------- + +BOOL WINAPI Arch_CloseHandle( HANDLE hObject ) +{ + // TODO: Arch_CloseHandle + + return Real_CloseHandle(hObject); +} + +//---------------------------------------------------------- + +DWORD WINAPI Arch_GetFileType( HANDLE hFile ) +{ + // TODO: Arch_GetFileType + + return Real_GetFileType(hFile); +} + +//---------------------------------------------------------- + +void InstallFileSystemHooks() +{ + if(!bFileHooksInstalled) { + + // reset our structures memory + memset(OpenArchRecords,0,sizeof(ARCH_FILE_RECORD) * MAX_OPEN_ARCH_FILES); + memset(bArchRecordSlotState,FALSE,sizeof(BOOL) * MAX_OPEN_ARCH_FILES); + + Real_CreateFileA = (def_CreateFileA)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "CreateFileA"), + (PBYTE)Arch_CreateFileA); + + Real_CreateFileW = (def_CreateFileW)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "CreateFileW"), + (PBYTE)Arch_CreateFileW); + + Real_ReadFile = (def_ReadFile)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "ReadFile"), + (PBYTE)Arch_ReadFile); + + Real_GetFileSize = (def_GetFileSize)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "GetFileSize"), + (PBYTE)Arch_GetFileSize); + + Real_SetFilePointer = (def_SetFilePointer)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "SetFilePointer"), + (PBYTE)Arch_SetFilePointer); + + Real_CloseHandle = (def_CloseHandle)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "CloseHandle"), + (PBYTE)Arch_CloseHandle); + + Real_GetFileType = (def_GetFileType)DetourFunction( + (PBYTE)DetourFindFunction("kernel32.dll", "GetFileType"), + (PBYTE)Arch_GetFileType); + + bFileHooksInstalled = TRUE; + } +} + +//---------------------------------------------------------- + diff --git a/saco/filehooks.h b/saco/filehooks.h new file mode 100644 index 0000000..6df5127 --- /dev/null +++ b/saco/filehooks.h @@ -0,0 +1,23 @@ + +#pragma once + +void InstallFileSystemHooks(); + +#define MAX_OPEN_ARCH_FILES 50 + +typedef struct _ARCH_FILE_RECORD +{ + char _gap0[20]; + +} ARCH_FILE_RECORD; + +// File API definitions +typedef DWORD (WINAPI *def_GetFileSize)(HANDLE,PDWORD); +typedef DWORD (WINAPI *def_SetFilePointer)(HANDLE,LONG,PLONG,DWORD); +typedef HANDLE (WINAPI *def_CreateFileA)(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE); +typedef HANDLE (WINAPI *def_CreateFileW)(PWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE); +typedef BOOL (WINAPI *def_ReadFile)(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED); + +typedef BOOL (WINAPI *def_CloseHandle)(HANDLE); +typedef DWORD (WINAPI *def_GetFileType)(HANDLE); + diff --git a/saco/main.cpp b/saco/main.cpp index a46b1f8..d107d81 100644 --- a/saco/main.cpp +++ b/saco/main.cpp @@ -86,8 +86,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) AddFontResourceA("gtaweap3.ttf"); AddFontResourceA("sampaux3.ttf"); - //sub_10062CA0(); //sub_10062970(); + InstallFileSystemHooks(); pGame = new CGame(); diff --git a/saco/main.h b/saco/main.h index 058e881..2941937 100644 --- a/saco/main.h +++ b/saco/main.h @@ -41,6 +41,7 @@ typedef struct _GAME_SETTINGS { #include "net/scriptrpc.h" #include "config.h" +#include "filehooks.h" #include "fontrender.h" #include "chatwindow.h" #include "cmdwindow.h" diff --git a/saco/saco.vcproj b/saco/saco.vcproj index c647947..3ed0d16 100644 --- a/saco/saco.vcproj +++ b/saco/saco.vcproj @@ -501,6 +501,12 @@ + + + +