Function at 0x401b40
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 0x401ba3
or eax, 0xffffffff
jmp 0x401ba9
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 0x4032ef
cmp esi, edx
jb 0x4032ef
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.0x401bff.4
movzx edx, byte [eax + 0x403394]
jmp dword [edx*4 + 0x40330c]
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 0x4024a7
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x401c74
movzx edi, byte [ebp]
inc ebp
mov dword [ecx + 8], edi
mov dword [esp + 0x10], ebp
jmp 0x401ca6
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x401c72
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 0x401ca6
xor edx, edx
test byte [esp + 0xe8], 2
mov ebp, dword [esp + 0x10]
je 0x401c9c
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 1
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [ecx + 8], edx
cmp ebp, eax
jae 0x401d40
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 0x401cf1
mov edx, dword [esp + 0xd0]
test byte [edx + 0xc], 0x20
jne 0x401cf1
mov eax, edi
and al, 0xf
mov dword [esp + 0x14], 0
cmp al, 8
je 0x401cf9
mov dword [esp + 0x14], 1
cmp dword [esp + 0x38], 0
jne 0x401d71
mov ecx, edi
shr ecx, 4
add ecx, 8
mov eax, 1
shl eax, cl
cmp eax, 0x8000
ja 0x401d68
cmp dword [esp + 0x24], eax
jb 0x401d68
xor eax, eax
jmp 0x401d6d
cmp ebp, dword [esp + 0x1c]
jae 0x401d3e
movzx eax, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 0xc], eax
mov dword [esp + 0x10], ebp
jmp 0x401cba
xor edx, edx
test byte [esp + 0xe8], 2
mov ecx, dword [esp + 0xd0]
je 0x401cb7
mov dword [esp + 0x18], 1
mov dword [ecx], 2
jmp case.0x401bff.4
mov eax, 1
or dword [esp + 0x14], eax
cmp dword [esp + 0x14], 0
je 0x4024a7
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x24
jmp case.0x401bff.4
cmp ebp, dword [esp + 0x1c]
jae 0x4024ba
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 0x4024b0
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 0x4025fa
mov ecx, esi
and ecx, 7
cmp esi, ecx
jae 0x401e1d
cmp ebp, dword [esp + 0x1c]
jb 0x401e02
test byte [esp + 0xe8], 2
jne 0x402dc1
xor eax, eax
jmp 0x401e0b
cmp ebp, dword [esp + 0x1c]
jae 0x401dea
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 0x401de4
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 0x402526
test esi, esi
je 0x4024cf
cmp esi, 8
jae 0x401e89
cmp ebp, dword [esp + 0x1c]
jb 0x401e6b
test byte [esp + 0xe8], 2
jne 0x402ddb
xor eax, eax
jmp 0x401e74
cmp ebp, dword [esp + 0x1c]
jae 0x401e53
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 0x401e4d
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 0x401e35
cmp ebp, dword [esp + 0x1c]
jae 0x4024d5
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 0x401e35
cmp ebp, dword [esp + 0x1c]
jae 0x40257d
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 0x402573
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 0x402e3c
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 0x40255e
cmp ebp, dword [esp + 0x1c]
jae 0x4026c8
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 + 0x480db4]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x4026be
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 + 0x480db4]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x480da8]
add dword [edx + eax*4 + 0x2c], ecx
inc eax
mov dword [esp + 0x14], eax
jmp 0x4026aa
cmp ebp, dword [esp + 0x1c]
jae 0x40271e
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 0x402714
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0xd0]
movzx edx, byte [ecx + 0x480d94]
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 0x402706
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x402a34
jmp 0x402a4a
cmp ebp, dword [esp + 0x1c]
jae 0x402b20
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 0x402b16
mov edx, dword [esp + 0x28]
mov ebp, dword [esp + 0xd0]
mov ecx, dword [esp + 0x2c]
movsx eax, byte [edx + 0x480d80]
mov edi, 1
shl edi, cl
sub esi, ecx
dec edi
and edi, ebx
shr ebx, cl
add edi, eax
cmp edx, 0x10
jne 0x402b35
mov ecx, dword [esp + 0x14]
movzx eax, byte [ecx + ebp + 0x2923]
jmp 0x402b37
cmp ebp, dword [esp + 0x1c]
jae 0x4023d0
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 0x40236e
jmp 0x402404
cmp ebp, dword [esp + 0x1c]
jae 0x402bdf
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 0x402bd5
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 0x402c84
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
cmp ecx, 2
jge 0x402c62
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0xf00]
test eax, eax
jl 0x402bf4
sar eax, 9
test eax, eax
je 0x402c26
cmp esi, eax
jae 0x402c84
jmp 0x402c26
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x402c30
jmp 0x402c46
cmp ebp, dword [esp + 0x1c]
jae 0x402d00
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 0x402cf6
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 0x402180
test byte [esp + 0xe8], 4
jne case.0x401bff.37
sub eax, edx
and eax, dword [esp + 0x3c]
add eax, ecx
mov ecx, edi
cmp edi, eax
ja 0x402190
mov ecx, eax
mov edi, dword [esp + 0x14]
add ecx, edi
cmp ecx, dword [esp + 0x34]
ja 0x40223e
cmp edi, 9
jb 0x402d15
cmp edi, edx
ja 0x402d15
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 0x4021c0
mov ecx, dword [esp + 0x14]
and ecx, 7
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], ecx
cmp ecx, 3
jae 0x402d20
test ecx, ecx
je 0x40224d
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jbe 0x402203
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x40224d
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x402d73
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.0x401bff.53
mov eax, dword [esp + 0x1c]
sub eax, ebp
cmp eax, 4
jl 0x402360
mov edx, dword [esp + 0x34]
sub edx, dword [esp + 0x20]
cmp edx, 2
jl 0x402360
cmp esi, 0xf
jae 0x402286
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 0x4022a8
mov ecx, eax
sar ecx, 9
jmp 0x4022c8
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 0x4022b0
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
test eax, 0x100
jne 0x40247e
cmp esi, 0xf
jae 0x4022f4
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 0x402316
mov ecx, eax
sar ecx, 9
jmp 0x402338
mov ecx, 0xa
jmp 0x402320
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 0x402320
mov dl, byte [esp + 0x14]
mov edi, dword [esp + 0x20]
shr ebx, cl
sub esi, ecx
mov byte [edi], dl
test eax, 0x100
jne 0x402475
mov byte [edi + 1], al
add edi, 2
mov dword [esp + 0x20], edi
jmp 0x40224d
cmp esi, 0xf
jae 0x402404
cmp eax, 2
jge 0x4023e5
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ecx + eax*2 + 0x160]
test eax, eax
jl 0x402395
sar eax, 9
test eax, eax
je 0x4023c6
cmp esi, eax
jae 0x402404
jmp 0x4023c6
cmp esi, 0xa
jbe 0x4023c6
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 0x402404
lea edx, [ecx + 1]
cmp esi, edx
jae 0x4023a0
cmp ebp, dword [esp + 0x1c]
jb 0x402061
test byte [esp + 0xe8], 2
jne 0x402d8d
xor eax, eax
jmp 0x40206a
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 0x40242a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x402448
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 0x402430
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
cmp eax, 0x100
jae 0x40247e
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x4031ce
mov cl, byte [esp + 0x14]
mov byte [eax], cl
inc eax
mov dword [esp + 0x20], eax
jmp 0x40224d
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 0x402baf
mov edx, dword [esp + 0xd0]
test byte [edx + 0x14], 1
jne 0x402f82
cmp esi, 3
jae 0x401dbb
cmp ebp, dword [esp + 0x1c]
jb 0x401da0
test byte [esp + 0xe8], 2
jne 0x402da7
xor eax, eax
jmp 0x401da9
cmp ebp, dword [esp + 0x1c]
jb 0x402501
test byte [esp + 0xe8], 2
mov edx, dword [esp + 0xd0]
jne 0x402df5
mov ecx, dword [esp + 0x14]
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], 0
mov ecx, edx
jmp 0x401e35
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 0x401e35
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.0x401bff.39
test eax, eax
je 0x402496
test esi, esi
je 0x402592
cmp esi, 8
jae 0x401ef2
cmp ebp, dword [esp + 0x1c]
jb 0x401ed7
test byte [esp + 0xe8], 2
jne 0x402e22
xor eax, eax
jmp 0x401ee0
cmp dword [esp + 0x14], 0
je 0x402496
mov edx, dword [esp + 0x20]
cmp edx, dword [esp + 0x34]
jae 0x402e56
cmp ebp, dword [esp + 0x1c]
jae 0x402e70
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 0x4025cb
mov edx, ecx
mov edi, dword [esp + 0x14]
cmp edx, edi
jae 0x4025db
mov edi, eax
cmp eax, ecx
jb 0x4025db
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 0x402592
cmp eax, 3
je case.0x401bff.10
cmp eax, 1
jne 0x4026a4
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 0x40273a
xor eax, eax
mov dword [esp + 0x14], eax
cmp eax, 3
jae 0x4026dd
movsx ecx, byte [eax + 0x480db4]
cmp esi, ecx
jae 0x401f54
cmp ebp, dword [esp + 0x1c]
jb 0x401f2f
test byte [esp + 0xe8], 2
jne 0x402ec8
xor eax, eax
jmp 0x401f38
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 0x402733
cmp esi, 3
jae 0x401fbd
cmp ebp, dword [esp + 0x1c]
jb 0x401f97
test byte [esp + 0xe8], 2
jne 0x402ee2
xor eax, eax
jmp 0x401fa0
mov dword [edi + 0x34], 0x13
mov eax, dword [edi + 0x18]
test eax, eax
jl 0x40224d
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 0x4027c7
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 0x4027b0
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 0x4027e2
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 0x402844
cmp eax, 1
ja case.0x401bff.35
cmp dword [esp + 0x40], 0
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x18], 0
jbe 0x402987
nop
mov ecx, dword [esp + 0x18]
movzx ecx, byte [ecx + ebp]
xor eax, eax
test ecx, ecx
je 0x40296a
mov edx, dword [esp + ecx*4 + 0x48]
lea edi, [edx + 1]
mov dword [esp + ecx*4 + 0x48], edi
mov edi, ecx
jbe 0x402895
mov ebp, edx
and ebp, 1
add eax, eax
dec edi
or eax, ebp
shr edx, 1
test edi, edi
ja 0x402881
mov ebp, dword [esp + 0x38]
mov edi, dword [esp + 0x30]
cmp ecx, 0xa
ja 0x4028e7
mov edx, ecx
shl edx, 9
or edx, dword [esp + 0x18]
movzx edx, dx
mov dword [esp + 0x40], edx
cmp eax, 0x400
jae 0x40296a
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 0x4028d0
mov ebp, dword [esp + 0x38]
jmp 0x40296a
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 0x402911
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 0x402956
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 0x402948
mov word [ecx], di
mov edx, edi
sub edi, 2
jmp 0x40294b
movsx edx, dx
sub dword [esp + 0x24], 1
jne 0x402920
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 0x402860
mov edi, dword [esp + 0xd0]
cmp dword [edi + 0x18], 2
jne 0x402b9c
mov dword [esp + 0x14], 0
mov eax, dword [edi + 0x30]
add eax, dword [edi + 0x2c]
mov ecx, dword [esp + 0x14]
cmp ecx, eax
jae 0x402b5d
cmp esi, 0xf
jae 0x402a84
mov ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x10]
sub ecx, eax
cmp ecx, 2
jge 0x402a66
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0x1ca0]
test eax, eax
jl 0x4029fa
sar eax, 9
test eax, eax
je 0x402a2a
cmp esi, eax
jae 0x402a84
jmp 0x402a2a
cmp esi, 0xa
jbe 0x402a2a
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 0x402a84
lea edx, [ecx + 1]
cmp esi, edx
jae 0x402a04
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x402a46
test byte [esp + 0xe8], 2
jne 0x402f1a
xor eax, eax
jmp 0x402a52
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 0x4029ce
jmp 0x402a84
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 0x402aaa
mov edi, eax
sar edi, 9
and eax, 0x1ff
jmp 0x402aca
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 0x402ab0
mov ecx, edi
mov edx, eax
shr ebx, cl
sub esi, edi
mov dword [esp + 0x28], edx
cmp eax, 0x10
jae 0x402af2
mov ecx, dword [esp + 0x14]
mov byte [ecx + ebp + 0x2924], al
inc ecx
mov dword [esp + 0x14], ecx
mov edi, ebp
jmp 0x4029a0
jne 0x402aff
cmp dword [esp + 0x14], 0
je case.0x401bff.17
movsx ecx, byte [eax + 0x480d7c]
mov dword [esp + 0x2c], ecx
cmp esi, ecx
jae 0x402026
mov ebp, dword [esp + 0x10]
cmp ebp, dword [esp + 0x1c]
jb 0x401ffb
test byte [esp + 0xe8], 2
jne 0x402f50
xor eax, eax
jmp 0x402004
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 0x4029a0
mov eax, dword [edi + 0x2c]
mov edx, dword [edi + 0x30]
add edx, eax
cmp edx, ecx
jne case.0x401bff.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 0x40273a
mov ecx, dword [eax*4 + 0x48090c]
mov eax, dword [eax*4 + 0x48088c]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x14], eax
test ecx, ecx
je 0x4020bb
cmp esi, ecx
jae 0x4020a9
cmp ebp, dword [esp + 0x1c]
jb 0x40208b
test byte [esp + 0xe8], 2
jne 0x403162
xor eax, eax
jmp 0x402094
cmp esi, 0xa
jbe 0x402c26
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 0x402c84
lea edx, [ecx + 1]
cmp esi, edx
jae 0x402c00
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x402c42
test byte [esp + 0xe8], 2
jne 0x40317c
xor eax, eax
jmp 0x402c4e
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 0x4020d3
jmp 0x402c84
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 0x402caa
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x402cc8
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 0x402cb0
mov edx, dword [eax*4 + 0x480c10]
mov ebp, dword [esp + 0x10]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x480b90]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x28], edx
test ecx, ecx
je 0x40215b
cmp esi, ecx
jae 0x402147
cmp ebp, dword [esp + 0x1c]
jb 0x402125
test byte [esp + 0xe8], 2
jne 0x40319a
xor eax, eax
jmp 0x40212e
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 0x402d20
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], edi
test ecx, ecx
jle 0x40224d
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jle 0x402203
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x40224d
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 0x35
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x17
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 3
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 5
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 6
jmp case.0x401bff.4
mov dword [esp + 0x18], 1
mov dword [edx], 7
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x27
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x33
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [edx], 0x34
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 9
jmp case.0x401bff.4
test byte [esp + 0xe8], 2
je case.0x401bff.40
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x26
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x28
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0xa
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0xb
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0xe
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x23
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x10
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x11
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x12
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x15
jmp case.0x401bff.4
test byte [esp + 0xe8], 1
jne 0x4031fd
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 0x403153
cmp dword [esp + 0x18], 0
jl 0x403153
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 0x403126
mov edi, edi
xor edx, edx
cmp ebx, 7
jbe 0x40309c
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 0x403050
xor eax, eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], eax
mov eax, ebx
sub eax, edx
cmp eax, 2
jl 0x4030db
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 0x4030c0
cmp edx, ebx
jae 0x4030e7
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 0x403040
mov eax, dword [esp + 0xd0]
shl edi, 0x10
add ecx, edi
cmp dword [esp + 0x18], 0
mov dword [eax + 0x1c], ecx
jne 0x403153
test byte [esp + 0xe8], 1
je 0x403153
cmp ecx, dword [eax + 0x10]
je 0x403153
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.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x1a
jmp case.0x401bff.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0x1b
jmp case.0x401bff.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x25
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [ecx], 0x18
jmp case.0x401bff.4
test byte [esp + 0xe8], 2
jne 0x403213
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 0x40322d
cmp ebp, dword [esp + 0x1c]
jae 0x4031e8
movzx eax, byte [ebp]
inc ebp
jmp 0x4031f4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x20
jmp case.0x401bff.4
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], 0
jmp 0x403286
cmp ebp, dword [esp + 0x1c]
jae 0x4032a0
movzx eax, byte [ebp]
inc ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x40329a
movzx eax, bl
shr ebx, 8
sub esi, 8
jmp 0x403270
test byte [esp + 0xe8], 2
jne 0x4032bb
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.0x401bff.34
test esi, esi
je case.0x401bff.42
cmp esi, 8
jae 0x403259
cmp ebp, dword [esp + 0x1c]
jb 0x403246
test byte [esp + 0xe8], 2
jne 0x4032d5
xor eax, eax
jmp 0x40324b
cmp ebp, dword [esp + 0x1c]
jae 0x403264
movzx eax, byte [ebp]
inc ebp
jmp 0x403270
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x2a
jmp case.0x401bff.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x29
jmp case.0x401bff.4
mov dword [ebx], 0
mov dword [edi], 0
pop edi
pop esi
pop ebp
mov eax, 0xfffffffd
pop ebx
add esp, 0xbc
ret