Function at 0x405ec0
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
mov eax, dword [esp + 4]
sub esp, 0x30
push edi
test eax, eax
je 0x43c456
mov edi, dword [eax + 0x1c]
test edi, edi
je 0x43c456
cmp dword [eax + 0xc], 0
je 0x43c456
cmp dword [eax], 0
je 0x43c44c
cmp dword [edi], 0xb
je 0x43c460
mov edx, dword [eax + 0xc]
mov ecx, dword [eax + 0x10]
push ebx
push ebp
push esi
mov esi, dword [eax]
mov eax, dword [eax + 4]
mov dword [esp + 0x18], edx
mov dword [esp + 0x10], eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x30], 0
mov ebp, dword [edi + 0x3c]
mov ebx, dword [edi + 0x38]
mov dword [esp + 0x20], ecx
mov dword [esp + 0x14], esi
jmp 0x405f30
mov eax, dword [edi]
cmp eax, 0x12
je case.0x405f44.18
cmp eax, 0x1c
ja case.default.0x405f44
jmp dword [eax*4 + 0x406ab8]
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x54]
push eax
mov dword [eax], 7
push ecx
lea eax, [edi + 0x70]
push eax
push 0
mov eax, 0x13
call fcn.00405a20
mov edx, dword [esp + 0x2c]
add esp, 0x14
mov dword [esp + 0x30], eax
test eax, eax
jne 0x43cc9a
mov dword [edi + 0x68], eax
mov dword [edi], 0x11
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp dword [edi + 0x68], eax
jae 0x406009
mov ecx, dword [edi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x28], eax
cmp ecx, ebp
ja 0x406154
mov ecx, eax
shr ecx, 0x10
cmp ecx, 0x10
jae 0x40619d
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ebp, ecx
jb 0x43ccd0
movzx ecx, ah
mov eax, dword [edi + 0x68]
shr ebx, cl
sub ebp, ecx
mov cx, word [esp + 0x2a]
mov word [edi + eax*2 + 0x70], cx
inc dword [edi + 0x68]
mov eax, dword [edi + 0x64]
add eax, dword [edi + 0x60]
cmp dword [edi + 0x68], eax
jb 0x405fa2
cmp dword [edi], 0x1b
je 0x405f30
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x54]
push eax
mov dword [eax], 9
push ecx
lea eax, [edi + 0x70]
push eax
mov eax, dword [edi + 0x60]
push 1
call fcn.00405a20
add esp, 0x14
test eax, eax
jne 0x43cd00
mov edx, dword [edi + 0x6c]
lea ecx, [edi + 0x6c]
mov dword [edi + 0x50], edx
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x58]
push eax
mov dword [eax], 6
mov eax, dword [edi + 0x60]
push ecx
lea ecx, [edi + eax*2 + 0x70]
mov eax, dword [edi + 0x64]
push ecx
push 2
call fcn.00405a20
add esp, 0x14
mov dword [esp + 0x30], eax
test eax, eax
jne 0x43cd4e
mov dword [edi], 0x12
cmp dword [esp + 0x20], 0x102
jae 0x4063d9
mov ecx, dword [edi + 0x54]
mov eax, dword [edi + 0x4c]
mov edx, 1
shl edx, cl
dec edx
and edx, ebx
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
cmp edx, ebp
jbe 0x4060fd
mov edx, dword [esp + 0x10]
mov edi, edi
test edx, edx
je 0x40657a
movzx eax, byte [esi]
mov ecx, ebp
shl eax, cl
mov ecx, dword [edi + 0x54]
dec edx
inc esi
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
add ebp, 8
mov dword [esp + 0x10], edx
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x14], esi
cmp ecx, ebp
ja 0x4060c0
test al, al
jne 0x406219
mov edx, dword [esp + 0x18]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
shr ebx, cl
sub ebp, ecx
mov ecx, eax
shr ecx, 0x10
mov dword [edi + 0x40], ecx
test al, al
jne 0x40627a
mov dword [edi], 0x17
jmp 0x405f30
cmp dword [esp + 0x20], 0
je 0x40657e
mov al, byte [edi + 0x40]
mov byte [edx], al
inc edx
dec dword [esp + 0x20]
mov dword [esp + 0x18], edx
mov dword [edi], 0x12
jmp 0x405f30
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
mov ecx, dword [edi + 0x54]
inc esi
add ebp, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x4c]
mov dword [esp + 0x14], esi
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x28], eax
cmp ecx, ebp
jbe 0x405fc9
jmp 0x406154
mov cx, word [esp + 0x2a]
cmp cx, 0x10
jne 0x406537
movzx ecx, ah
lea eax, [ecx + 2]
cmp ebp, eax
jb 0x406433
mov eax, dword [edi + 0x68]
shr ebx, cl
sub ebp, ecx
test eax, eax
je 0x43cd1e
movzx ecx, word [edi + eax*2 + 0x6e]
mov eax, ebx
and eax, 3
add eax, 3
shr ebx, 2
mov dword [esp + 0x28], ecx
sub ebp, 2
mov edx, dword [edi + 0x64]
mov ecx, dword [edi + 0x68]
add edx, dword [edi + 0x60]
add ecx, eax
cmp ecx, edx
ja 0x43cd34
test eax, eax
je 0x406210
mov ecx, dword [esp + 0x28]
jmp 0x406200
mov edx, dword [edi + 0x68]
dec eax
mov word [edi + edx*2 + 0x70], cx
inc dword [edi + 0x68]
test eax, eax
jne 0x406200
mov edx, dword [esp + 0x18]
jmp 0x405ffe
test al, 0xf0
jne 0x406105
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [esp + 0x38], ecx
mov dword [esp + 0x34], edx
movzx ecx, al
add ecx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [esp + 0x34]
mov dword [esp + 0x1c], eax
shr eax, 0x10
dec edx
and edx, ebx
shr edx, cl
add edx, eax
mov eax, dword [edi + 0x4c]
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
movzx ecx, byte [esp + 0x38]
add edx, ecx
cmp edx, ebp
ja 0x406920
movzx ecx, byte [esp + 0x1d]
shr ebx, cl
sub ebp, ecx
jmp 0x406105
test al, 0x20
jne 0x4066d0
test al, 0x40
jne 0x43cea8
movzx ecx, al
and ecx, 0xf
mov dword [edi + 0x48], ecx
mov dword [edi], 0x13
mov eax, dword [edi + 0x48]
test eax, eax
jne 0x40668c
mov dword [edi], 0x14
mov ecx, dword [edi + 0x58]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
mov ecx, eax
mov eax, dword [edi + 0x50]
mov eax, dword [eax + ecx*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x28], eax
cmp ecx, ebp
ja 0x406471
test al, 0xf0
je 0x406a3d
mov ecx, eax
shr ecx, 8
movzx ecx, cl
shr ebx, cl
sub ebp, ecx
test al, 0x40
jne 0x43cf22
mov ecx, eax
movzx eax, al
shr ecx, 0x10
and eax, 0xf
mov dword [edi + 0x44], ecx
mov dword [edi + 0x48], eax
mov dword [edi], 0x15
mov eax, dword [edi + 0x48]
test eax, eax
je 0x40634a
cmp ebp, eax
jae 0x406336
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, dword [edi + 0x48]
jb 0x406311
mov ecx, dword [edi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [edi + 0x44], eax
shr ebx, cl
sub ebp, ecx
mov ecx, dword [edi + 0x2c]
mov eax, dword [esp + 0x20]
sub ecx, eax
add ecx, dword [esp + 0x2c]
cmp dword [edi + 0x44], ecx
ja 0x43cf38
mov dword [edi], 0x16
test eax, eax
je 0x40657e
mov eax, dword [esp + 0x2c]
sub eax, dword [esp + 0x20]
mov ecx, dword [edi + 0x44]
cmp ecx, eax
ja 0x406751
mov eax, edx
sub eax, ecx
mov dword [esp + 0x38], eax
mov eax, dword [edi + 0x40]
mov dword [esp + 0x34], eax
mov dword [esp + 0x1c], eax
mov ecx, dword [esp + 0x20]
cmp eax, ecx
ja 0x406913
sub ecx, eax
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x34]
sub ecx, eax
mov eax, dword [esp + 0x38]
mov dword [edi + 0x40], ecx
mov cl, byte [eax]
mov byte [edx], cl
inc edx
inc eax
sub dword [esp + 0x1c], 1
jne 0x4063b3
cmp dword [edi + 0x40], 0
mov dword [esp + 0x18], edx
jne 0x405f30
mov dword [edi], 0x12
jmp 0x405f30
cmp dword [esp + 0x10], 6
jb 0x40609b
mov eax, dword [esp + 0x44]
mov ecx, dword [esp + 0x20]
mov edx, dword [esp + 0x18]
mov dword [eax + 0x10], ecx
mov ecx, dword [esp + 0x2c]
mov dword [eax + 0xc], edx
mov edx, dword [esp + 0x10]
push ecx
mov dword [eax], esi
mov dword [eax + 4], edx
push eax
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], ebp
call fcn.0041a0f0
mov eax, dword [esp + 0x4c]
mov edx, dword [eax + 0xc]
mov ecx, dword [eax + 0x10]
mov esi, dword [eax]
mov dword [esp + 0x20], edx
mov edx, dword [eax + 4]
mov dword [esp + 0x18], edx
mov edx, dword [esp + 0x20]
add esp, 8
jmp 0x405f1d
mov dword [esp + 0x28], ecx
jmp 0x406440
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
mov ecx, dword [esp + 0x28]
inc esi
add ebp, 8
add ebx, eax
lea eax, [ecx + 2]
mov dword [esp + 0x14], esi
cmp ebp, eax
jae 0x4061ba
jmp 0x406440
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
mov ecx, dword [edi + 0x58]
inc esi
add ebp, 8
add ebx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [edi + 0x50]
mov dword [esp + 0x14], esi
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x28], eax
cmp ecx, ebp
jbe 0x4062d3
jmp 0x406471
mov ecx, ebx
mov eax, ebx
not ecx
and eax, 0xffff
shr ecx, 0x10
cmp eax, ecx
jne 0x43cc84
xor ebx, ebx
mov dword [edi + 0x40], eax
xor ebp, ebp
mov dword [edi], 0xe
mov eax, dword [edi + 0x40]
test eax, eax
je 0x4066d0
cmp eax, dword [esp + 0x10]
ja 0x4066ad
mov dword [esp + 0x1c], eax
mov ecx, dword [esp + 0x20]
cmp eax, ecx
ja 0x4066bc
test eax, eax
je 0x40657e
mov ecx, dword [esp + 0x1c]
mov edx, dword [esp + 0x18]
push ecx
push esi
push edx
call fcn.0041b050
mov eax, dword [esp + 0x28]
add dword [esp + 0x24], eax
sub dword [esp + 0x1c], eax
sub dword [esp + 0x2c], eax
mov edx, dword [esp + 0x24]
add esp, 0xc
add esi, eax
sub dword [edi + 0x40], eax
jmp 0x405f27
movzx eax, ah
mov dword [esp + 0x28], eax
cmp cx, 0x11
jne 0x4068ba
add eax, 3
cmp ebp, eax
jb 0x406720
mov ecx, dword [esp + 0x28]
shr ebx, cl
mov edx, 0xfffffffd
sub edx, ecx
mov dword [esp + 0x28], 0
mov eax, ebx
and eax, 7
add eax, 3
shr ebx, 3
add ebp, edx
jmp 0x4061e0
mov edx, dword [esp + 0x18]
mov eax, dword [esp + 0x44]
mov ecx, dword [esp + 0x20]
mov dword [eax + 0xc], edx
mov edx, dword [esp + 0x10]
mov dword [eax + 0x10], ecx
mov dword [eax], esi
mov dword [eax + 4], edx
cmp dword [edi + 0x28], 0
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], ebp
je 0x4069d8
mov edx, dword [esp + 0x44]
mov eax, dword [esp + 0x2c]
push edx
call fcn.00405650
add esp, 4
test eax, eax
jne 0x43cf91
mov ecx, dword [esp + 0x44]
mov esi, dword [esp + 0x3c]
sub esi, dword [ecx + 4]
mov eax, dword [esp + 0x2c]
sub eax, dword [ecx + 0x10]
add dword [ecx + 8], esi
add dword [ecx + 0x14], eax
add dword [edi + 0x1c], eax
cmp dword [edi + 8], 0
jne 0x43cfa1
mov edx, dword [edi + 4]
mov ebp, dword [esp + 0x30]
neg edx
sbb edx, edx
and edx, 0x40
cmp dword [edi], 0xb
je 0x43d005
xor ebx, ebx
add ebx, edx
add ebx, dword [edi + 0x3c]
mov dword [ecx + 0x2c], ebx
test esi, esi
je 0x4069f7
cmp dword [esp + 0x48], 4
je 0x4069ff
mov eax, ebp
pop esi
pop ebp
pop ebx
pop edi
add esp, 0x30
ret
cmp dword [esp + 0x48], 5
je 0x40657e
cmp dword [edi + 4], 0
jne 0x406a29
cmp ebp, 3
jae 0x406665
jmp 0x406640
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 3
jb 0x406640
mov ecx, ebx
shr ebx, 1
and ecx, 1
mov eax, ebx
dec ebp
and eax, 3
mov dword [edi + 4], ecx
jne 0x406897
mov dword [edi], 0xd
shr ebx, 2
sub ebp, 2
jmp 0x405f30
cmp ebp, eax
jb 0x406980
mov ecx, dword [edi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [edi + 0x40], eax
shr ebx, cl
sub ebp, ecx
jmp 0x4062a4
mov ecx, dword [esp + 0x10]
mov eax, ecx
mov dword [esp + 0x1c], ecx
jmp 0x4064f6
mov eax, ecx
mov dword [esp + 0x1c], eax
jmp 0x406502
mov eax, dword [esp + 0x20]
jmp 0x406366
mov dword [edi], 0xb
jmp 0x405f30
mov ecx, ebp
and ecx, 7
sub ebp, ecx
shr ebx, cl
cmp ebp, 0x20
jae 0x4064ba
lea ecx, [ecx]
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x20
jb 0x4066f0
jmp 0x4064ba
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
mov eax, dword [esp + 0x28]
add eax, 3
cmp ebp, eax
jae 0x406553
jmp 0x406720
sub ecx, eax
mov eax, ecx
mov ecx, dword [edi + 0x30]
cmp eax, ecx
ja 0x406aa4
mov ecx, dword [edi + 0x34]
sub ecx, eax
add ecx, dword [edi + 0x30]
mov dword [esp + 0x1c], eax
mov dword [esp + 0x38], ecx
mov ecx, dword [edi + 0x40]
mov dword [esp + 0x34], ecx
cmp eax, ecx
jbe 0x406394
mov eax, ecx
jmp 0x406390
cmp ebp, 0xe
jae 0x4067b5
jmp 0x406790
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0xe
jb 0x406790
mov ecx, ebx
and ecx, 0x1f
add ecx, 0x101
mov dword [edi + 0x60], ecx
shr ebx, 5
mov ecx, ebx
and ecx, 0x1f
mov eax, 1
add ecx, eax
shr ebx, 5
mov dword [edi + 0x64], ecx
mov ecx, ebx
and ecx, 0xf
add ecx, 4
shr ebx, 4
sub ebp, 0xe
cmp dword [edi + 0x60], 0x11e
mov dword [edi + 0x5c], ecx
ja 0x43ccb0
cmp dword [edi + 0x64], 0x1e
ja 0x43ccb0
mov dword [edi + 0x68], 0
mov dword [edi], 0x10
mov ecx, dword [edi + 0x68]
cmp ecx, dword [edi + 0x5c]
jae 0x406845
cmp ebp, 3
jb 0x406870
mov eax, dword [edi + 0x68]
movzx eax, word [eax*2 + 0x4a1040]
mov ecx, ebx
and ecx, 7
mov word [edi + eax*2 + 0x70], cx
mov eax, 1
add dword [edi + 0x68], eax
mov ecx, dword [edi + 0x68]
shr ebx, 3
sub ebp, 3
cmp ecx, dword [edi + 0x5c]
jb 0x406815
cmp dword [edi + 0x68], 0x13
jae 0x405f4b
nop
mov edx, dword [edi + 0x68]
movzx ecx, word [edx*2 + 0x4a1040]
xor edx, edx
mov word [edi + ecx*2 + 0x70], dx
add dword [edi + 0x68], eax
cmp dword [edi + 0x68], 0x13
jb 0x406850
jmp 0x405f4b
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 3
jae 0x40681a
jmp 0x406870
sub eax, 1
je 0x43cc5d
sub eax, 1
jne 0x43cc3e
shr ebx, 2
mov dword [edi], 0xf
sub ebp, 2
jmp 0x405f30
add eax, 7
cmp ebp, eax
jae 0x4068ec
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
mov eax, dword [esp + 0x28]
add eax, 7
cmp ebp, eax
jb 0x4068c1
mov ecx, dword [esp + 0x28]
shr ebx, cl
mov edx, 0xfffffff9
sub edx, ecx
mov dword [esp + 0x28], 0
mov eax, ebx
and eax, 0x7f
add eax, 0xb
shr ebx, 7
add ebp, edx
jmp 0x4061e0
mov eax, ecx
mov dword [esp + 0x1c], eax
jmp 0x4063a0
cmp dword [esp + 0x10], 0
je 0x40657a
movzx edx, byte [esi]
mov eax, dword [esp + 0x1c]
mov ecx, ebp
shl edx, cl
movzx ecx, al
add ebx, edx
movzx edx, ah
add ecx, edx
dec dword [esp + 0x10]
mov eax, 1
shl eax, cl
mov ecx, edx
inc esi
add ebp, 8
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [esp + 0x1e]
add eax, ecx
mov ecx, dword [edi + 0x4c]
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edx
mov dword [esp + 0x14], esi
cmp ecx, ebp
jbe 0x40626c
jmp 0x406920
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, dword [edi + 0x48]
jae 0x406694
jmp 0x406980
cmp dword [edi + 8], 0
jne 0x43cd68
mov dword [edi], 0x19
cmp dword [edi + 8], 0
jne 0x43ce51
mov dword [edi], 0x1a
mov dword [esp + 0x30], 1
jmp 0x40657e
cmp dword [edi], 0x18
jge 0x4065be
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x44]
cmp eax, dword [ecx + 0x10]
je 0x4065be
jmp 0x4065a5
test eax, eax
jne 0x40660c
test ebp, ebp
jne 0x406617
pop esi
pop ebp
pop ebx
mov eax, 0xfffffffb
pop edi
add esp, 0x30
ret
cmp dword [edi + 8], 0
jne 0x43c46b
mov dword [edi], 0xc
jmp 0x405f30
mov ecx, ebp
and ecx, 7
shr ebx, cl
sub ebp, ecx
mov dword [edi], 0x18
jmp 0x405f30
mov ecx, eax
shr ecx, 8
mov dword [esp + 0x38], ecx
movzx ecx, cl
mov dword [esp + 0x34], ecx
movzx ecx, al
add ecx, dword [esp + 0x34]
mov dword [esp + 0x1c], eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x34]
dec eax
and eax, ebx
shr eax, cl
mov ecx, dword [esp + 0x28]
shr ecx, 0x10
add eax, ecx
mov ecx, eax
mov eax, dword [edi + 0x50]
mov eax, dword [eax + ecx*4]
movzx ecx, byte [esp + 0x38]
mov dword [esp + 0x28], eax
shr eax, 8
movzx eax, al
add eax, ecx
cmp eax, ebp
ja 0x43cebe
movzx ecx, byte [esp + 0x1d]
mov eax, dword [esp + 0x28]
shr ebx, cl
sub ebp, ecx
jmp 0x4062db
sub eax, ecx
mov ecx, dword [edi + 0x34]
add ecx, dword [edi + 0x28]
mov dword [esp + 0x1c], eax
sub ecx, eax
jmp 0x40676c
cmp dword [eax + 4], 0
je 0x405eee
mov eax, 0xfffffffe
pop edi
add esp, 0x30
ret
mov dword [edi], 0xc
jmp 0x405ef7
cmp ebp, 0x10
jae 0x43c499
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x10
jb 0x43c474
test byte [edi + 8], 2
je 0x43c4f0
cmp ebx, 0x8b1f
jne 0x43c4f0
push 0
push 0
xor esi, esi
call fcn.00405490
push 2
push eax
lea esi, [esp + 0x34]
mov dword [edi + 0x18], eax
mov byte [esp + 0x34], 0x1f
mov byte [esp + 0x35], 0x8b
call fcn.00405490
mov esi, dword [esp + 0x24]
mov edx, dword [esp + 0x28]
add esp, 0x10
xor ebx, ebx
mov dword [edi + 0x18], eax
xor ebp, ebp
mov dword [edi], 1
jmp 0x405f30
mov eax, dword [edi + 0x20]
mov dword [edi + 0x10], 0
test eax, eax
je 0x43c509
mov dword [eax + 0x30], 0xffffffff
test byte [edi + 8], 1
je 0x43c5c3
movzx eax, bl
shl eax, 8
mov ecx, ebx
shr ecx, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x43c5c3
mov edx, ebx
and dl, 0xf
cmp dl, 8
je 0x43c559
mov eax, dword [esp + 0x44]
mov edx, dword [esp + 0x18]
mov dword [eax + 0x18], 0x4a58ec
mov dword [edi], 0x1b
jmp 0x405f30
shr ebx, 4
mov ecx, ebx
and ecx, 0xf
add ecx, 8
cmp ecx, dword [edi + 0x24]
jbe 0x43c58a
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x18]
mov dword [ecx + 0x18], 0x4a5908
sub ebp, 4
mov dword [edi], 0x1b
jmp 0x405f30
mov edx, 1
shl edx, cl
xor eax, eax
xor ecx, ecx
mov dword [edi + 0x14], edx
xor edx, edx
call fcn.004168a0
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x18]
shr ebx, 8
not ebx
and ebx, 2
or ebx, 9
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [edi], ebx
xor ebx, ebx
xor ebp, ebp
jmp 0x405f30
mov edx, dword [esp + 0x44]
mov dword [edx + 0x18], 0x4a58d4
mov edx, dword [esp + 0x18]
mov dword [edi], 0x1b
jmp 0x405f30
cmp ebp, 0x10
jae 0x43c60b
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x10
jb 0x43c5e6
mov dword [edi + 0x10], ebx
cmp bl, 8
je 0x43c62d
mov ecx, dword [esp + 0x44]
mov dword [ecx + 0x18], 0x4a58ec
mov dword [edi], 0x1b
jmp 0x405f30
test ebx, 0xe000
je 0x43c64f
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a591c
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43c664
mov ecx, ebx
shr ecx, 8
and ecx, 1
mov dword [eax], ecx
test dword [edi + 0x10], 0x200
je 0x43c699
mov edx, dword [edi + 0x18]
mov byte [esp + 0x24], bl
push 2
shr ebx, 8
push edx
lea esi, [esp + 0x2c]
mov byte [esp + 0x2d], bl
call fcn.00405490
mov esi, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
xor ebx, ebx
xor ebp, ebp
mov dword [edi], 2
jmp 0x43c6b1
cmp ebp, 0x20
jae 0x43c6d6
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x20
jb 0x43c6b1
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43c6e4
mov dword [eax + 4], ebx
test dword [edi + 0x10], 0x200
je 0x43c72b
mov eax, dword [edi + 0x18]
mov ecx, ebx
mov edx, ebx
mov byte [esp + 0x24], bl
shr ecx, 8
shr edx, 0x10
push 4
shr ebx, 0x18
push eax
lea esi, [esp + 0x2c]
mov byte [esp + 0x2d], cl
mov byte [esp + 0x2e], dl
mov byte [esp + 0x2f], bl
call fcn.00405490
mov esi, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
xor ebx, ebx
xor ebp, ebp
mov dword [edi], 3
jmp 0x43c743
cmp ebp, 0x10
jae 0x43c768
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x10
jb 0x43c743
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43c789
mov ecx, ebx
and ecx, 0xff
mov dword [eax + 8], ecx
mov ecx, dword [edi + 0x20]
mov eax, ebx
shr eax, 8
mov dword [ecx + 0xc], eax
test dword [edi + 0x10], 0x200
je 0x43c7be
mov edx, dword [edi + 0x18]
mov byte [esp + 0x24], bl
push 2
shr ebx, 8
push edx
lea esi, [esp + 0x2c]
mov byte [esp + 0x2d], bl
call fcn.00405490
mov esi, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
xor ebx, ebx
xor ebp, ebp
mov dword [edi], 4
test dword [edi + 0x10], 0x400
je 0x43c852
cmp ebp, 0x10
jae 0x43c803
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x10
jb 0x43c7de
mov eax, dword [edi + 0x20]
mov dword [edi + 0x40], ebx
test eax, eax
je 0x43c814
mov dword [eax + 0x14], ebx
test dword [edi + 0x10], 0x200
je 0x43c849
mov ecx, dword [edi + 0x18]
mov byte [esp + 0x24], bl
push 2
shr ebx, 8
push ecx
lea esi, [esp + 0x2c]
mov byte [esp + 0x2d], bl
call fcn.00405490
mov esi, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
xor ebx, ebx
xor ebp, ebp
jmp 0x43c864
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43c864
mov dword [eax + 0x10], 0
mov dword [edi], 5
test dword [edi + 0x10], 0x400
je 0x43c93a
mov eax, dword [edi + 0x40]
cmp eax, dword [esp + 0x10]
jbe 0x43c893
mov ecx, dword [esp + 0x10]
mov eax, ecx
mov dword [esp + 0x1c], ecx
jmp 0x43c897
mov dword [esp + 0x1c], eax
test eax, eax
je 0x43c930
mov ecx, dword [edi + 0x20]
test ecx, ecx
je 0x43c8f6
mov ecx, dword [ecx + 0x10]
test ecx, ecx
je 0x43c8f6
mov edx, dword [edi + 0x20]
mov dword [esp + 0x38], ecx
mov ecx, dword [edx + 0x14]
sub ecx, dword [edi + 0x40]
mov edx, dword [edx + 0x18]
mov dword [esp + 0x28], ecx
add ecx, eax
cmp ecx, edx
jbe 0x43c8d9
sub edx, dword [esp + 0x28]
mov eax, edx
mov edx, dword [esp + 0x38]
push eax
mov eax, dword [esp + 0x2c]
add edx, eax
push esi
push edx
call fcn.0041b050
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x28]
add esp, 0xc
test dword [edi + 0x10], 0x200
je 0x43c923
mov ecx, dword [esp + 0x1c]
mov edx, dword [edi + 0x18]
mov esi, dword [esp + 0x14]
push ecx
push edx
call fcn.00405490
mov edx, dword [esp + 0x20]
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x24]
add esp, 8
sub dword [esp + 0x10], eax
add esi, eax
sub dword [edi + 0x40], eax
mov dword [esp + 0x14], esi
cmp dword [edi + 0x40], 0
jne 0x40657e
mov dword [edi + 0x40], 0
mov dword [edi], 6
test dword [edi + 0x10], 0x800
je 0x43ca02
cmp dword [esp + 0x10], 0
je 0x40657e
xor ecx, ecx
movzx eax, byte [ecx + esi]
mov dword [esp + 0x28], eax
mov eax, dword [edi + 0x20]
inc ecx
mov dword [esp + 0x1c], ecx
test eax, eax
je 0x43c9aa
mov ecx, dword [eax + 0x1c]
test ecx, ecx
je 0x43c9a6
mov dword [esp + 0x38], ecx
mov ecx, dword [edi + 0x40]
cmp ecx, dword [eax + 0x20]
jae 0x43c9a6
mov edx, dword [esp + 0x38]
mov al, byte [esp + 0x28]
mov byte [edx + ecx], al
inc dword [edi + 0x40]
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x1c]
cmp dword [esp + 0x28], 0
je 0x43c9bb
cmp ecx, dword [esp + 0x10]
jb 0x43c961
test dword [edi + 0x10], 0x200
je 0x43c9e8
mov ecx, dword [esp + 0x1c]
mov edx, dword [edi + 0x18]
mov esi, dword [esp + 0x14]
push ecx
push edx
call fcn.00405490
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
sub dword [esp + 0x10], ecx
add esi, ecx
cmp dword [esp + 0x28], 0
jne 0x40657e
mov dword [esp + 0x14], esi
jmp 0x43ca14
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43ca14
mov dword [eax + 0x1c], 0
mov dword [edi + 0x40], 0
mov dword [edi], 7
test dword [edi + 0x10], 0x1000
je 0x43cadc
cmp dword [esp + 0x10], 0
je 0x40657e
xor ecx, ecx
movzx eax, byte [ecx + esi]
mov dword [esp + 0x28], eax
mov eax, dword [edi + 0x20]
inc ecx
mov dword [esp + 0x1c], ecx
test eax, eax
je 0x43ca84
mov ecx, dword [eax + 0x24]
test ecx, ecx
je 0x43ca80
mov dword [esp + 0x38], ecx
mov ecx, dword [edi + 0x40]
cmp ecx, dword [eax + 0x28]
jae 0x43ca80
mov edx, dword [esp + 0x38]
mov al, byte [esp + 0x28]
mov byte [edx + ecx], al
inc dword [edi + 0x40]
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x1c]
cmp dword [esp + 0x28], 0
je 0x43ca95
cmp ecx, dword [esp + 0x10]
jb 0x43ca3b
test dword [edi + 0x10], 0x200
je 0x43cac2
mov ecx, dword [esp + 0x1c]
mov edx, dword [edi + 0x18]
mov esi, dword [esp + 0x14]
push ecx
push edx
call fcn.00405490
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x20]
add esp, 8
mov dword [edi + 0x18], eax
sub dword [esp + 0x10], ecx
add esi, ecx
cmp dword [esp + 0x28], 0
jne 0x40657e
mov dword [esp + 0x14], esi
jmp 0x43caee
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43caee
mov dword [eax + 0x24], 0
mov dword [edi], 8
test dword [edi + 0x10], 0x200
je 0x43cb55
cmp ebp, 0x10
jae 0x43cb2f
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x10
jb 0x43cb0a
movzx ecx, word [edi + 0x18]
cmp ebx, ecx
je 0x43cb51
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5938
mov dword [edi], 0x1b
jmp 0x405f30
xor ebx, ebx
xor ebp, ebp
mov eax, dword [edi + 0x20]
test eax, eax
je 0x43cb76
mov ecx, dword [edi + 0x10]
sar ecx, 9
and ecx, 1
mov dword [eax + 0x2c], ecx
mov edx, dword [edi + 0x20]
mov dword [edx + 0x30], 1
push 0
push 0
xor esi, esi
call fcn.00405490
mov ecx, dword [esp + 0x4c]
mov esi, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
add esp, 8
mov dword [edi], 0xb
jmp 0x405f30
cmp ebp, 0x20
jae 0x43cbcf
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x20
jb 0x43cbaa
mov ecx, ebx
and ecx, 0xff00
mov eax, ebx
shl eax, 0x10
add ecx, eax
mov eax, ebx
shr eax, 8
shl ecx, 8
and eax, 0xff00
add ecx, eax
shr ebx, 0x18
lea eax, [ecx + ebx]
mov ecx, dword [esp + 0x44]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
xor ebx, ebx
xor ebp, ebp
mov dword [edi], 0xa
jmp 0x43cc10
mov ecx, dword [esp + 0x44]
cmp dword [edi + 0xc], 0
je 0x43cf4e
xor eax, eax
xor ecx, ecx
xor edx, edx
call fcn.004168a0
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x18]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [edi], 0xb
jmp case.0x405f44.11
sub eax, 1
jne 0x406681
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a594c
mov dword [edi], 0x1b
jmp 0x406681
mov dword [edi + 0x4c], 0x4a07c0
mov dword [edi + 0x54], 9
mov dword [edi + 0x50], 0x4a0fc0
mov dword [edi + 0x58], 5
mov dword [edi], 0x12
jmp 0x406681
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5960
mov dword [edi], 0x1b
jmp 0x405f30
mov ecx, dword [esp + 0x44]
mov dword [ecx + 0x18], 0x4a59a4
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5980
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, 1
jmp 0x40680d
cmp dword [esp + 0x10], 0
je 0x40657e
movzx edx, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl edx, cl
movzx ecx, ah
add ebx, edx
mov edx, dword [esp + 0x18]
add ebp, 8
inc esi
cmp ebp, ecx
jb 0x43ccd0
mov dword [esp + 0x14], esi
jmp 0x405fe7
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x18]
mov dword [ecx + 0x18], 0x4a59dc
mov dword [esp + 0x30], eax
mov dword [edi], 0x1b
jmp 0x405f30
mov ecx, dword [esp + 0x44]
mov dword [ecx + 0x18], 0x4a59c0
mov dword [edi], 0x1b
jmp 0x405f30
mov edx, dword [esp + 0x44]
mov dword [edx + 0x18], 0x4a59c0
mov edx, dword [esp + 0x18]
mov dword [edi], 0x1b
jmp 0x405f30
mov edx, dword [esp + 0x44]
mov dword [edx + 0x18], 0x4a59f8
mov edx, dword [esp + 0x18]
mov dword [edi], 0x1b
jmp 0x405f30
cmp ebp, 0x20
jae 0x43cd96
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x20
jb 0x43cd71
mov eax, dword [esp + 0x2c]
sub eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x44]
add dword [ecx + 0x14], eax
add dword [edi + 0x1c], eax
test eax, eax
je 0x43cdf2
cmp dword [edi + 0x10], 0
je 0x43cdd6
mov ecx, dword [edi + 0x18]
mov esi, dword [esp + 0x18]
push eax
sub esi, eax
push ecx
call fcn.00405490
mov esi, dword [esp + 0x1c]
add esp, 8
jmp 0x43cde4
mov ecx, dword [esp + 0x18]
mov edx, dword [edi + 0x18]
sub ecx, eax
call fcn.004168a0
mov edx, dword [esp + 0x44]
mov dword [edi + 0x18], eax
mov dword [edx + 0x30], eax
mov edx, dword [esp + 0x18]
cmp dword [edi + 0x10], 0
mov eax, dword [esp + 0x20]
mov dword [esp + 0x2c], eax
mov eax, ebx
jne 0x43ce29
and eax, 0xff00
mov ecx, ebx
shl ecx, 0x10
add eax, ecx
mov ecx, ebx
shr ecx, 8
and ecx, 0xff00
shl eax, 8
add eax, ecx
mov ecx, ebx
shr ecx, 0x18
add eax, ecx
cmp eax, dword [edi + 0x18]
je 0x43ce48
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5a64
mov dword [edi], 0x1b
jmp 0x405f30
xor ebx, ebx
xor ebp, ebp
jmp 0x4069b5
cmp dword [edi + 0x10], 0
je 0x4069c5
cmp ebp, 0x20
jae 0x43ce89
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
dec dword [esp + 0x10]
mov ecx, ebp
shl eax, cl
inc esi
add ebp, 8
mov dword [esp + 0x14], esi
add ebx, eax
cmp ebp, 0x20
jb 0x43ce64
cmp ebx, dword [edi + 0x1c]
je 0x43cf71
mov ecx, dword [esp + 0x44]
mov dword [ecx + 0x18], 0x4a5a7c
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5a10
mov dword [edi], 0x1b
jmp 0x405f30
cmp dword [esp + 0x10], 0
je 0x40657e
movzx eax, byte [esi]
mov ecx, ebp
shl eax, cl
mov ecx, dword [esp + 0x1c]
dec dword [esp + 0x10]
inc esi
add ebx, eax
movzx eax, ch
mov dword [esp + 0x38], eax
movzx ecx, cl
add ecx, eax
mov eax, 1
shl eax, cl
mov ecx, dword [esp + 0x38]
add ebp, 8
mov dword [esp + 0x14], esi
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [esp + 0x1e]
add eax, ecx
mov ecx, dword [edi + 0x50]
mov eax, dword [ecx + eax*4]
mov dword [esp + 0x28], eax
shr eax, 8
movzx eax, al
add eax, dword [esp + 0x38]
cmp eax, ebp
ja 0x43cebe
jmp 0x406a92
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5a2c
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, dword [esp + 0x44]
mov dword [eax + 0x18], 0x4a5a44
mov dword [edi], 0x1b
jmp 0x405f30
mov eax, dword [esp + 0x10]
mov dword [ecx + 0xc], edx
mov edx, dword [esp + 0x20]
mov dword [ecx + 4], eax
mov dword [ecx + 0x10], edx
mov dword [ecx], esi
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], ebp
mov eax, 2
jmp 0x406619
xor ebx, ebx
xor ebp, ebp
jmp 0x4069c5
mov dword [esp + 0x30], 0xfffffffd
jmp 0x40657e
mov eax, 0xfffffffe
jmp 0x406619
mov dword [edi], 0x1c
mov eax, 0xfffffffc
jmp 0x406619
test eax, eax
je 0x4065e3
cmp dword [edi + 0x10], 0
mov edx, dword [edi + 0x18]
mov dword [esp + 0x3c], esi
mov dword [esp + 0x2c], eax
je 0x43cfe4
mov esi, dword [ecx + 0xc]
push eax
sub esi, eax
push edx
call fcn.00405490
mov ecx, dword [esp + 0x4c]
mov esi, dword [esp + 0x44]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov eax, dword [esp + 0x34]
add esp, 8
jmp 0x4065e3
mov ecx, dword [ecx + 0xc]
sub ecx, eax
call fcn.004168a0
mov ecx, dword [esp + 0x44]
mov esi, dword [esp + 0x3c]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov eax, dword [esp + 0x2c]
jmp 0x4065e3
mov ebx, 0x80
jmp 0x4065fc