Function at 0x405670
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xbc
mov edx, dword [esp + 0xcc]
push ebx
mov ebx, dword [esp + 0xd8]
push ebp
mov ebp, dword [esp + 0xcc]
push esi
mov esi, dword [esp + 0xdc]
push edi
mov edi, dword [esp + 0xd8]
mov eax, dword [edi]
add eax, ebp
mov dword [esp + 0x1c], eax
mov eax, dword [ebx]
lea ecx, [eax + esi]
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x18], 0xffffffff
mov dword [esp + 0x10], ebp
mov dword [esp + 0x20], esi
mov dword [esp + 0x38], ecx
je 0x4056d3
or eax, 0xffffffff
jmp 0x4056d9
sub eax, edx
lea eax, [eax + esi - 1]
lea ecx, [eax + 1]
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ecx
test eax, ecx
jne 0x406e1f
cmp esi, edx
jb 0x406e1f
mov eax, dword [esp + 0xd0]
mov edx, dword [eax + 0x20]
mov ecx, dword [eax + 0x24]
mov esi, dword [eax + 4]
mov ebx, dword [eax + 0x38]
mov dword [esp + 0x28], edx
mov edx, dword [eax + 0x28]
mov dword [esp + 0x14], ecx
mov ecx, dword [eax + 0x3c]
mov eax, dword [eax]
mov dword [esp + 0x2c], edx
mov dword [esp + 0x44], ecx
cmp eax, 0x35
ja case.0x40572f.4
movzx edx, byte [eax + 0x406ec4]
jmp dword [edx*4 + 0x406e3c]
mov ecx, dword [esp + 0xd0]
xor edx, edx
mov eax, 1
xor esi, esi
xor ebx, ebx
mov dword [ecx + 0xc], edx
mov dword [ecx + 8], edx
mov dword [esp + 0x2c], edx
mov dword [esp + 0x14], edx
mov dword [esp + 0x28], edx
mov dword [ecx + 0x1c], eax
mov dword [ecx + 0x10], eax
test byte [esp + 0xe8], al
je 0x405fd7
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x4057a4
movzx edi, byte [ebp]
inc ebp
mov dword [ecx + 8], edi
mov dword [esp + 0x10], ebp
jmp 0x4057d6
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x4057a2
movzx edx, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 8], edx
mov dword [esp + 0x10], ebp
xor edx, edx
jmp 0x4057d6
xor edx, edx
test byte [esp + 0xe8], 2
mov ebp, dword [esp + 0x10]
je 0x4057cc
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 1
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [ecx + 8], edx
cmp ebp, eax
jae 0x405870
movzx edx, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov dword [ecx + 0xc], edx
mov edi, dword [ecx + 8]
mov ecx, dword [ecx + 0xc]
mov eax, edi
shl eax, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x405821
mov edx, dword [esp + 0xd0]
test byte [edx + 0xc], 0x20
jne 0x405821
mov eax, edi
and al, 0xf
mov dword [esp + 0x14], 0
cmp al, 8
je 0x405829
mov dword [esp + 0x14], 1
cmp dword [esp + 0x38], 0
jne 0x4058a1
mov ecx, edi
shr ecx, 4
add ecx, 8
mov eax, 1
shl eax, cl
cmp eax, 0x8000
ja 0x405898
cmp dword [esp + 0x24], eax
jb 0x405898
xor eax, eax
jmp 0x40589d
cmp ebp, dword [esp + 0x1c]
jae 0x40586e
movzx eax, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 0xc], eax
mov dword [esp + 0x10], ebp
jmp 0x4057ea
xor edx, edx
test byte [esp + 0xe8], 2
mov ecx, dword [esp + 0xd0]
je 0x4057e7
mov dword [esp + 0x18], 1
mov dword [ecx], 2
jmp case.0x40572f.4
mov eax, 1
or dword [esp + 0x14], eax
cmp dword [esp + 0x14], 0
je 0x405fd7
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x24
jmp case.0x40572f.4
cmp ebp, dword [esp + 0x1c]
jae 0x405fea
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x405fe0
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 7
mov dword [ecx + 0x14], eax
shr ebx, 3
sub esi, 3
shr eax, 1
mov dword [ecx + 0x18], eax
jne 0x40612a
mov ecx, esi
and ecx, 7
cmp esi, ecx
jae 0x40594d
cmp ebp, dword [esp + 0x1c]
jb 0x405932
test byte [esp + 0xe8], 2
jne 0x4068f1
xor eax, eax
jmp 0x40593b
cmp ebp, dword [esp + 0x1c]
jae 0x40591a
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
mov edx, esi
and edx, 7
or ebx, eax
cmp esi, edx
jb 0x405914
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x14], 0
cmp dword [esp + 0x14], 4
jae 0x406056
test esi, esi
je 0x405fff
cmp esi, 8
jae 0x4059b9
cmp ebp, dword [esp + 0x1c]
jb 0x40599b
test byte [esp + 0xe8], 2
jne 0x40690b
xor eax, eax
jmp 0x4059a4
cmp ebp, dword [esp + 0x1c]
jae 0x405983
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x40597d
mov ecx, dword [esp + 0xd0]
mov eax, dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], bl
shr ebx, 8
sub esi, 8
inc dword [esp + 0x14]
jmp 0x405965
cmp ebp, dword [esp + 0x1c]
jae 0x406005
mov dl, byte [ebp]
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], dl
mov dword [esp + 0x10], ebp
jmp 0x405965
cmp ebp, dword [esp + 0x1c]
jae 0x4060ad
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x4060a3
movzx edx, bl
shr ebx, 8
mov dword [esp + 0x28], edx
sub esi, 8
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x40696c
mov cl, byte [esp + 0x28]
mov byte [eax], cl
inc eax
dec dword [esp + 0x14]
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x14]
jmp 0x40608e
cmp ebp, dword [esp + 0x1c]
jae 0x4061f8
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x14]
movsx ecx, byte [ecx + 0x4101ec]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x4061ee
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0xd0]
mov edi, 1
shl edi, cl
dec edi
and edi, ebx
mov dword [edx + eax*4 + 0x2c], edi
movsx ecx, byte [eax + 0x4101ec]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x4101e0]
add dword [edx + eax*4 + 0x2c], ecx
inc eax
mov dword [esp + 0x14], eax
jmp 0x4061da
cmp ebp, dword [esp + 0x1c]
jae 0x40624e
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x406244
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0xd0]
movzx edx, byte [ecx + 0x4101cc]
mov eax, ebx
and eax, 7
shr ebx, 3
sub esi, 3
inc ecx
mov byte [edx + edi + 0x1b80], al
mov dword [esp + 0x14], ecx
jmp 0x406236
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x406564
jmp 0x40657a
cmp ebp, dword [esp + 0x1c]
jae 0x406650
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, dword [esp + 0x2c]
jb 0x406646
mov edx, dword [esp + 0x28]
mov ebp, dword [esp + 0xd0]
mov ecx, dword [esp + 0x2c]
movsx eax, byte [edx + 0x4101b8]
mov edi, 1
shl edi, cl
sub esi, ecx
dec edi
and edi, ebx
shr ebx, cl
add edi, eax
cmp edx, 0x10
jne 0x406665
mov ecx, dword [esp + 0x14]
movzx eax, byte [ecx + ebp + 0x2923]
jmp 0x406667
cmp ebp, dword [esp + 0x1c]
jae 0x405f00
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x405e9e
jmp 0x405f34
cmp ebp, dword [esp + 0x1c]
jae 0x40670f
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x406705
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add dword [esp + 0x14], eax
cmp esi, 0xf
jae 0x4067b4
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
cmp ecx, 2
jge 0x406792
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0xf00]
test eax, eax
jl 0x406724
sar eax, 9
test eax, eax
je 0x406756
cmp esi, eax
jae 0x4067b4
jmp 0x406756
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x406760
jmp 0x406776
cmp ebp, dword [esp + 0x1c]
jae 0x406830
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x406826
mov edx, dword [esp + 0x28]
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add edx, eax
mov dword [esp + 0x28], edx
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0xdc]
mov eax, edi
sub eax, ecx
mov dword [esp + 0x44], eax
cmp edx, eax
jbe 0x405cb0
test byte [esp + 0xe8], 4
jne case.0x40572f.37
sub eax, edx
and eax, dword [esp + 0x3c]
add eax, ecx
mov ecx, edi
cmp edi, eax
ja 0x405cc0
mov ecx, eax
mov edi, dword [esp + 0x14]
add ecx, edi
cmp ecx, dword [esp + 0x34]
ja 0x405d6e
cmp edi, 9
jb 0x406845
cmp edi, edx
ja 0x406845
mov ecx, edi
mov edi, dword [esp + 0x20]
and ecx, 0xfffffff8
add ecx, eax
lea esp, [esp]
mov edx, dword [eax]
mov dword [edi], edx
mov edx, dword [eax + 4]
mov dword [edi + 4], edx
add eax, 8
add edi, 8
cmp eax, ecx
jb 0x405cf0
mov ecx, dword [esp + 0x14]
and ecx, 7
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], ecx
cmp ecx, 3
jae 0x406850
test ecx, ecx
je 0x405d7d
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jbe 0x405d33
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x405d7d
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x4068a3
mov edi, dword [esp + 0x44]
mov ecx, dword [esp + 0xdc]
mov edx, edi
sub edx, dword [esp + 0x28]
inc eax
and edx, dword [esp + 0x3c]
inc edi
mov dl, byte [edx + ecx]
mov byte [eax - 1], dl
mov dword [esp + 0x20], eax
mov dword [esp + 0x44], edi
mov eax, dword [esp + 0x14]
mov ecx, eax
dec eax
mov dword [esp + 0x14], eax
test ecx, ecx
jne case.0x40572f.53
mov eax, dword [esp + 0x1c]
sub eax, ebp
cmp eax, 4
jl 0x405e90
mov edx, dword [esp + 0x34]
sub edx, dword [esp + 0x20]
cmp edx, 2
jl 0x405e90
cmp esi, 0xf
jae 0x405db6
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x405dd8
mov ecx, eax
sar ecx, 9
jmp 0x405df8
mov ecx, 0xa
lea ecx, [ecx]
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x405de0
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
test eax, 0x100
jne 0x405fae
cmp esi, 0xf
jae 0x405e24
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x405e46
mov ecx, eax
sar ecx, 9
jmp 0x405e68
mov ecx, 0xa
jmp 0x405e50
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x405e50
mov dl, byte [esp + 0x14]
mov edi, dword [esp + 0x20]
shr ebx, cl
sub esi, ecx
mov byte [edi], dl
test eax, 0x100
jne 0x405fa5
mov byte [edi + 1], al
add edi, 2
mov dword [esp + 0x20], edi
jmp 0x405d7d
cmp esi, 0xf
jae 0x405f34
cmp eax, 2
jge 0x405f15
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ecx + eax*2 + 0x160]
test eax, eax
jl 0x405ec5
sar eax, 9
test eax, eax
je 0x405ef6
cmp esi, eax
jae 0x405f34
jmp 0x405ef6
cmp esi, 0xa
jbe 0x405ef6
mov ecx, 0xa
nop
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x960]
test eax, eax
jge 0x405f34
lea edx, [ecx + 1]
cmp esi, edx
jae 0x405ed0
cmp ebp, dword [esp + 0x1c]
jb 0x405b91
test byte [esp + 0xe8], 2
jne 0x4068bd
xor eax, eax
jmp 0x405b9a
movzx eax, byte [ebp + 1]
movzx edx, byte [ebp]
lea ecx, [esi + 8]
shl eax, cl
mov ecx, esi
shl edx, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or eax, edx
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0x160]
test eax, eax
jl 0x405f5a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x405f78
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x405f60
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
cmp eax, 0x100
jae 0x405fae
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x406cfe
mov cl, byte [esp + 0x14]
mov byte [eax], cl
inc eax
mov dword [esp + 0x20], eax
jmp 0x405d7d
inc edi
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x14]
and eax, 0x1ff
mov dword [esp + 0x14], eax
cmp eax, 0x100
jne 0x4066df
mov edx, dword [esp + 0xd0]
test byte [edx + 0x14], 1
jne 0x406ab2
cmp esi, 3
jae 0x4058eb
cmp ebp, dword [esp + 0x1c]
jb 0x4058d0
test byte [esp + 0xe8], 2
jne 0x4068d7
xor eax, eax
jmp 0x4058d9
cmp ebp, dword [esp + 0x1c]
jb 0x406031
test byte [esp + 0xe8], 2
mov edx, dword [esp + 0xd0]
jne 0x406925
mov ecx, dword [esp + 0x14]
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], 0
mov ecx, edx
jmp 0x405965
mov ecx, dword [esp + 0x14]
mov al, byte [ebp]
mov edx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], al
mov dword [esp + 0x10], ebp
mov ecx, edx
jmp 0x405965
movzx eax, byte [ecx + 0x2921]
movzx edx, byte [ecx + 0x2920]
shl eax, 8
or eax, edx
movzx edx, byte [ecx + 0x2923]
movzx ecx, byte [ecx + 0x2922]
shl edx, 8
or edx, ecx
xor edx, 0xffff
mov dword [esp + 0x14], eax
cmp eax, edx
jne case.0x40572f.39
test eax, eax
je 0x405fc6
test esi, esi
je 0x4060c2
cmp esi, 8
jae 0x405a22
cmp ebp, dword [esp + 0x1c]
jb 0x405a07
test byte [esp + 0xe8], 2
jne 0x406952
xor eax, eax
jmp 0x405a10
cmp dword [esp + 0x14], 0
je 0x405fc6
mov edx, dword [esp + 0x20]
cmp edx, dword [esp + 0x34]
jae 0x406986
cmp ebp, dword [esp + 0x1c]
jae 0x4069a0
mov eax, dword [esp + 0x34]
sub eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
mov edx, eax
cmp eax, ecx
jb 0x4060fb
mov edx, ecx
mov edi, dword [esp + 0x14]
cmp edx, edi
jae 0x40610b
mov edi, eax
cmp eax, ecx
jb 0x40610b
mov edi, ecx
mov eax, dword [esp + 0x20]
push edi
push ebp
push eax
call sub.msvcrt.dll_memcpy
add dword [esp + 0x2c], edi
add ebp, edi
add esp, 0xc
sub dword [esp + 0x14], edi
mov dword [esp + 0x10], ebp
jmp 0x4060c2
cmp eax, 3
je case.0x40572f.10
cmp eax, 1
jne 0x4061d4
mov eax, 0x5050505
mov dword [ecx + 0x2c], 0x120
mov dword [ecx + 0x30], 0x20
mov dword [ecx + 0xde0], eax
mov dword [ecx + 0xde4], eax
mov dword [ecx + 0xde8], eax
mov dword [ecx + 0xdec], eax
mov dword [ecx + 0xdf0], eax
push 0x90
lea edi, [ecx + 0x40]
mov dword [ecx + 0xdf4], eax
push 8
mov dword [ecx + 0xdf8], eax
push edi
mov dword [ecx + 0xdfc], eax
call sub.msvcrt.dll_memset
push 0x70
add edi, 0x90
push 9
push edi
call sub.msvcrt.dll_memset
add edi, 0x70
mov eax, 0x7070707
mov dword [edi], eax
mov dword [edi + 4], eax
mov dword [edi + 8], eax
mov dword [edi + 0xc], eax
mov dword [edi + 0x10], eax
mov dword [edi + 0x14], eax
add esp, 0x18
add edi, 0x18
mov eax, 0x8080808
mov dword [edi], eax
mov dword [edi + 4], eax
mov edi, dword [esp + 0xd0]
jmp 0x40626a
xor eax, eax
mov dword [esp + 0x14], eax
cmp eax, 3
jae 0x40620d
movsx ecx, byte [eax + 0x4101ec]
cmp esi, ecx
jae 0x405a84
cmp ebp, dword [esp + 0x1c]
jb 0x405a5f
test byte [esp + 0xe8], 2
jne 0x4069f8
xor eax, eax
jmp 0x405a68
mov edi, dword [esp + 0xd0]
push 0x120
lea edx, [edi + 0x1b80]
push 0
push edx
call sub.msvcrt.dll_memset
mov dword [esp + 0x20], 0
mov ecx, dword [esp + 0x20]
add esp, 0xc
cmp ecx, dword [edi + 0x34]
jae 0x406263
cmp esi, 3
jae 0x405aed
cmp ebp, dword [esp + 0x1c]
jb 0x405ac7
test byte [esp + 0xe8], 2
jne 0x406a12
xor eax, eax
jmp 0x405ad0
mov dword [edi + 0x34], 0x13
mov eax, dword [edi + 0x18]
test eax, eax
jl 0x405d7d
mov edi, dword [esp + 0xd0]
imul eax, eax, 0xda0
lea ebp, [eax + edi + 0x40]
push 0x40
lea eax, [esp + 0x90]
push 0
push eax
mov dword [esp + 0x44], ebp
call sub.msvcrt.dll_memset
push 0x800
lea ecx, [ebp + 0x120]
push 0
push ecx
call sub.msvcrt.dll_memset
push 0x480
lea edx, [ebp + 0x920]
push 0
push edx
call sub.msvcrt.dll_memset
mov ecx, dword [edi + 0x18]
mov ecx, dword [edi + ecx*4 + 0x2c]
xor edx, edx
add esp, 0x24
xor eax, eax
mov dword [esp + 0x40], ecx
cmp ecx, edx
jbe 0x4062f7
mov ecx, dword [edi + 0x18]
mov edi, dword [edi + ecx*4 + 0x2c]
mov edi, edi
movzx ecx, byte [eax + ebp]
inc dword [esp + ecx*4 + 0x8c]
lea ecx, [esp + ecx*4 + 0x8c]
inc eax
cmp eax, edi
jb 0x4062e0
mov dword [esp + 0x24], edx
xor ecx, ecx
mov dword [esp + 0x4c], edx
mov dword [esp + 0x48], edx
mov dword [esp + 0x18], edx
mov dword [esp + 0x30], edx
mov eax, 4
mov edx, dword [esp + eax + 0x8c]
add dword [esp + 0x24], edx
add ecx, edx
mov edx, dword [esp + eax + 0x90]
add dword [esp + 0x30], edx
add ecx, ecx
mov dword [esp + eax + 0x4c], ecx
add ecx, edx
mov edx, dword [esp + eax + 0x94]
add dword [esp + 0x18], edx
add ecx, ecx
mov dword [esp + eax + 0x50], ecx
add ecx, edx
add ecx, ecx
mov dword [esp + eax + 0x54], ecx
add eax, 0xc
cmp eax, 0x3c
jbe 0x406312
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x30]
add edx, eax
mov eax, dword [esp + 0x24]
add eax, edx
cmp ecx, 0x10000
je 0x406374
cmp eax, 1
ja case.0x40572f.35
cmp dword [esp + 0x40], 0
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x18], 0
jbe 0x4064b7
nop
mov ecx, dword [esp + 0x18]
movzx ecx, byte [ecx + ebp]
xor eax, eax
test ecx, ecx
je 0x40649a
mov edx, dword [esp + ecx*4 + 0x48]
lea edi, [edx + 1]
mov dword [esp + ecx*4 + 0x48], edi
mov edi, ecx
jbe 0x4063c5
mov ebp, edx
and ebp, 1
add eax, eax
dec edi
or eax, ebp
shr edx, 1
test edi, edi
ja 0x4063b1
mov ebp, dword [esp + 0x38]
mov edi, dword [esp + 0x30]
cmp ecx, 0xa
ja 0x406417
mov edx, ecx
shl edx, 9
or edx, dword [esp + 0x18]
movzx edx, dx
mov dword [esp + 0x40], edx
cmp eax, 0x400
jae 0x40649a
mov edx, 1
shl edx, cl
lea ecx, [ebp + eax*2 + 0x120]
mov ebp, dword [esp + 0x40]
lea edi, [edx + edx]
mov edi, edi
mov word [ecx], bp
add eax, edx
add ecx, edi
cmp eax, 0x400
jb 0x406400
mov ebp, dword [esp + 0x38]
jmp 0x40649a
mov edx, eax
and edx, 0x3ff
lea edx, [ebp + edx*2 + 0x120]
mov dword [esp + 0x40], edx
movsx edx, word [edx]
test edx, edx
jne 0x406441
mov edx, dword [esp + 0x40]
mov word [edx], di
mov edx, edi
sub edi, 2
mov dword [esp + 0x30], edi
shr eax, 9
cmp ecx, 0xb
jbe 0x406486
add ecx, 0xfffffff5
mov dword [esp + 0x24], ecx
shr eax, 1
mov ecx, eax
and ecx, 1
sub edx, ecx
mov ecx, 0x48f
sub ecx, edx
movzx edx, word [ebp + ecx*2]
lea ecx, [ebp + ecx*2]
test dx, dx
jne 0x406478
mov word [ecx], di
mov edx, edi
sub edi, 2
jmp 0x40647b
movsx edx, dx
sub dword [esp + 0x24], 1
jne 0x406450
mov dword [esp + 0x30], edi
shr eax, 1
and eax, 1
sub eax, edx
mov dx, word [esp + 0x18]
mov word [ebp + eax*2 + 0x91e], dx
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x18]
inc eax
mov dword [esp + 0x18], eax
cmp eax, dword [ecx + edx*4 + 0x2c]
jb 0x406390
mov edi, dword [esp + 0xd0]
cmp dword [edi + 0x18], 2
jne 0x4066cc
mov dword [esp + 0x14], 0
mov eax, dword [edi + 0x30]
add eax, dword [edi + 0x2c]
mov ecx, dword [esp + 0x14]
cmp ecx, eax
jae 0x40668d
cmp esi, 0xf
jae 0x4065b4
mov ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x10]
sub ecx, eax
cmp ecx, 2
jge 0x406596
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0x1ca0]
test eax, eax
jl 0x40652a
sar eax, 9
test eax, eax
je 0x40655a
cmp esi, eax
jae 0x4065b4
jmp 0x40655a
cmp esi, 0xa
jbe 0x40655a
mov ecx, 0xa
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x24a0]
test eax, eax
jge 0x4065b4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x406534
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x406576
test byte [esp + 0xe8], 2
jne 0x406a4a
xor eax, eax
jmp 0x406582
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x4064fe
jmp 0x4065b4
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov ebp, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ebp + eax*2 + 0x1ca0]
test eax, eax
jl 0x4065da
mov edi, eax
sar edi, 9
and eax, 0x1ff
jmp 0x4065fa
mov edi, 0xa
nop
mov ecx, edi
mov edx, ebx
shr edx, cl
not eax
inc edi
and edx, 1
add edx, eax
movsx eax, word [ebp + edx*2 + 0x24a0]
test eax, eax
jl 0x4065e0
mov ecx, edi
mov edx, eax
shr ebx, cl
sub esi, edi
mov dword [esp + 0x28], edx
cmp eax, 0x10
jae 0x406622
mov ecx, dword [esp + 0x14]
mov byte [ecx + ebp + 0x2924], al
inc ecx
mov dword [esp + 0x14], ecx
mov edi, ebp
jmp 0x4064d0
jne 0x40662f
cmp dword [esp + 0x14], 0
je case.0x40572f.17
movsx ecx, byte [eax + 0x4101b4]
mov dword [esp + 0x2c], ecx
cmp esi, ecx
jae 0x405b56
mov ebp, dword [esp + 0x10]
cmp ebp, dword [esp + 0x1c]
jb 0x405b2b
test byte [esp + 0xe8], 2
jne 0x406a80
xor eax, eax
jmp 0x405b34
xor eax, eax
mov edx, dword [esp + 0x14]
push edi
push eax
lea eax, [edx + ebp + 0x2924]
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
add dword [esp + 0x14], edi
mov edi, dword [esp + 0xd0]
jmp 0x4064d0
mov eax, dword [edi + 0x2c]
mov edx, dword [edi + 0x30]
add edx, eax
cmp edx, ecx
jne case.0x40572f.21
push eax
lea eax, [edi + 0x2924]
push eax
lea ecx, [edi + 0x40]
push ecx
call sub.msvcrt.dll_memcpy
mov edx, dword [edi + 0x30]
mov eax, dword [edi + 0x2c]
push edx
lea ecx, [eax + edi + 0x2924]
push ecx
lea edx, [edi + 0xde0]
push edx
call sub.msvcrt.dll_memcpy
add esp, 0x18
dec dword [edi + 0x18]
mov ebp, dword [esp + 0x10]
mov edi, dword [esp + 0xd0]
jmp 0x40626a
mov ecx, dword [eax*4 + 0x40fd44]
mov eax, dword [eax*4 + 0x40fcc4]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x14], eax
test ecx, ecx
je 0x405beb
cmp esi, ecx
jae 0x405bd9
cmp ebp, dword [esp + 0x1c]
jb 0x405bbb
test byte [esp + 0xe8], 2
jne 0x406c92
xor eax, eax
jmp 0x405bc4
cmp esi, 0xa
jbe 0x406756
mov ecx, 0xa
mov edi, edi
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x1700]
test eax, eax
jge 0x4067b4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x406730
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x406772
test byte [esp + 0xe8], 2
jne 0x406cac
xor eax, eax
jmp 0x40677e
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x405c03
jmp 0x4067b4
mov eax, dword [esp + 0x10]
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0xf00]
test eax, eax
jl 0x4067da
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x4067f8
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x1700]
test eax, eax
jl 0x4067e0
mov edx, dword [eax*4 + 0x410048]
mov ebp, dword [esp + 0x10]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x40ffc8]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x28], edx
test ecx, ecx
je 0x405c8b
cmp esi, ecx
jae 0x405c77
cmp ebp, dword [esp + 0x1c]
jb 0x405c55
test byte [esp + 0xe8], 2
jne 0x406cca
xor eax, eax
jmp 0x405c5e
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0x14]
lea ecx, [ecx]
movzx edx, byte [eax]
mov byte [edi], dl
movzx edx, byte [eax + 1]
mov byte [edi + 1], dl
movzx edx, byte [eax + 2]
mov byte [edi + 2], dl
sub ecx, 3
add edi, 3
add eax, 3
cmp ecx, 2
jg 0x406850
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], edi
test ecx, ecx
jle 0x405d7d
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jle 0x405d33
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x405d7d
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 0x35
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x17
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 3
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 5
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 6
jmp case.0x40572f.4
mov dword [esp + 0x18], 1
mov dword [edx], 7
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x27
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x33
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [edx], 0x34
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 9
jmp case.0x40572f.4
test byte [esp + 0xe8], 2
je case.0x40572f.40
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x26
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x28
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0xa
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0xb
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0xe
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x23
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x10
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x11
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x12
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x15
jmp case.0x40572f.4
test byte [esp + 0xe8], 1
jne 0x406d2d
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0
mov dword [edx], 0x22
mov eax, dword [esp + 0xd0]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x14]
sub ebp, dword [esp + 0xd4]
mov dword [eax + 0x20], ecx
mov ecx, dword [esp + 0x2c]
mov dword [eax + 0x24], edx
mov edx, dword [esp + 0x44]
mov dword [eax + 4], esi
mov esi, dword [esp + 0xe0]
mov dword [eax + 0x28], ecx
mov ecx, dword [esp + 0xe4]
mov dword [eax + 0x38], ebx
mov dword [eax + 0x3c], edx
mov eax, dword [esp + 0xd8]
mov dword [eax], ebp
mov eax, dword [esp + 0x20]
sub eax, esi
test byte [esp + 0xe8], 9
mov dword [ecx], eax
je 0x406c83
cmp dword [esp + 0x18], 0
jl 0x406c83
mov ebp, eax
mov eax, dword [esp + 0xd0]
movzx ecx, word [eax + 0x1c]
movzx edi, word [eax + 0x1e]
mov eax, 0x5e6ea9af
mul ebp
shr edx, 0xb
imul edx, edx, 0x15b0
mov ebx, ebp
sub ebx, edx
mov dword [esp + 0x38], ebp
test ebp, ebp
je 0x406c56
mov edi, edi
xor edx, edx
cmp ebx, 7
jbe 0x406bcc
lea eax, [edx + 7]
lea ebx, [ebx]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 2]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 3]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 4]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 5]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 6]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 7]
add edi, ecx
add ecx, ebp
add eax, 8
add edi, ecx
add edx, 8
add esi, 8
cmp eax, ebx
jb 0x406b80
xor eax, eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], eax
mov eax, ebx
sub eax, edx
cmp eax, 2
jl 0x406c0b
mov eax, ebx
sub eax, edx
sub eax, 2
shr eax, 1
inc eax
lea edx, [edx + eax*2]
lea esp, [esp]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add dword [esp + 0x3c], ecx
add ecx, ebp
add dword [esp + 0x24], ecx
add esi, 2
sub eax, 1
jne 0x406bf0
cmp edx, ebx
jae 0x406c17
movzx edx, byte [esi]
add ecx, edx
add edi, ecx
inc esi
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x3c]
add eax, edx
add edi, eax
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul edx, edx, 0xffff000f
add ecx, edx
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul edx, edx, 0xffff000f
add edi, edx
sub dword [esp + 0x38], ebx
mov ebx, 0x15b0
jne 0x406b70
mov eax, dword [esp + 0xd0]
shl edi, 0x10
add ecx, edi
cmp dword [esp + 0x18], 0
mov dword [eax + 0x1c], ecx
jne 0x406c83
test byte [esp + 0xe8], 1
je 0x406c83
cmp ecx, dword [eax + 0x10]
je 0x406c83
mov dword [esp + 0x18], 0xfffffffe
mov eax, dword [esp + 0x18]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xbc
ret
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x19
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x1a
jmp case.0x40572f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0x1b
jmp case.0x40572f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x25
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [ecx], 0x18
jmp case.0x40572f.4
test byte [esp + 0xe8], 2
jne 0x406d43
xor eax, eax
mov ecx, esi
shl eax, cl
or ebx, eax
add esi, 8
mov edx, esi
and edx, 7
cmp esi, edx
jae 0x406d5d
cmp ebp, dword [esp + 0x1c]
jae 0x406d18
movzx eax, byte [ebp]
inc ebp
jmp 0x406d24
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x20
jmp case.0x40572f.4
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], 0
jmp 0x406db6
cmp ebp, dword [esp + 0x1c]
jae 0x406dd0
movzx eax, byte [ebp]
inc ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x406dca
movzx eax, bl
shr ebx, 8
sub esi, 8
jmp 0x406da0
test byte [esp + 0xe8], 2
jne 0x406deb
xor eax, eax
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x10]
shl edx, 8
or edx, eax
inc dword [esp + 0x14]
mov dword [ecx + 0x10], edx
cmp dword [esp + 0x14], 4
jae case.0x40572f.34
test esi, esi
je case.0x40572f.42
cmp esi, 8
jae 0x406d89
cmp ebp, dword [esp + 0x1c]
jb 0x406d76
test byte [esp + 0xe8], 2
jne 0x406e05
xor eax, eax
jmp 0x406d7b
cmp ebp, dword [esp + 0x1c]
jae 0x406d94
movzx eax, byte [ebp]
inc ebp
jmp 0x406da0
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x2a
jmp case.0x40572f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x29
jmp case.0x40572f.4
mov dword [ebx], 0
mov dword [edi], 0
pop edi
pop esi
pop ebp
mov eax, 0xfffffffd
pop ebx
add esp, 0xbc
ret