Function at 0x402c10
Capabilities:
Enumerate pe sections
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x7c
mov dword [esp], eax
mov eax, ecx
mov ecx, dword [esp + 0x90]
mov dword [esp + 0x28], edx
cmp ecx, 9
jbe 0x402c67
movzx esi, word [eax + 2]
movzx ebx, word [eax]
movzx ebp, word [eax + 4]
lea edx, [ebx + esi]
mov word [esp + 8], si
add edx, ebp
mov word [esp + 0x14], bp
mov dword [esp + 4], ebp
mov ebp, ecx
sub ebp, edx
mov dword [esp + 0x10], ebp
lea edx, [ebp - 6]
mov ebp, dword [esp + 0x94]
mov ebp, dword [ebp]
mov dword [esp + 0x38], ebp
cmp ecx, edx
jae 0x402c80
mov edx, 0xffffffec
add esp, 0x7c
mov eax, edx
pop ebx
pop esi
pop edi
pop ebp
ret
test ebx, ebx
je 0x403140
lea ebp, [eax + 6]
movzx ecx, byte [eax + ebx + 5]
mov dword [esp + 0x40], ebp
cmp ebx, 3
ja 0x403100
movzx ebp, byte [eax + 6]
mov dword [esp + 0xc], ebp
cmp bx, 2
je 0x402cbe
cmp bx, 3
jne 0x402cc9
movzx edi, byte [eax + 8]
shl edi, 0x10
add ebp, edi
mov dword [esp + 0xc], ebp
movzx edi, byte [eax + 7]
shl edi, 8
add dword [esp + 0xc], edi
test cl, cl
je 0x402c67
mov edi, 5
bsr ecx, ecx
sub edi, ebx
shl edi, 3
sub edi, ecx
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0x40]
mov dword [esp + 0x20], edi
test esi, esi
je 0x403140
mov edi, dword [esp + 0x40]
add edi, ebx
mov dword [esp + 0x44], edi
movzx ecx, byte [edi + esi - 1]
cmp esi, 3
jbe 0x403150
lea edi, [edi + esi - 4]
mov dword [esp + 0x30], edi
test cl, cl
je 0x403128
mov edi, dword [edi]
bsr ecx, ecx
mov ebx, 8
sub ebx, ecx
mov dword [esp + 0x18], edi
mov ecx, dword [esp + 4]
test ecx, ecx
je 0x403140
mov edi, dword [esp + 0x44]
add edi, esi
mov esi, ecx
mov dword [esp + 0x4c], edi
movzx ecx, byte [edi + ecx - 1]
cmp esi, 3
ja 0x4031b0
mov ebp, edi
movzx esi, word [esp + 0x14]
movzx edi, byte [edi]
mov dword [esp + 0x1c], edi
cmp si, 2
je 0x402d75
cmp si, 3
jne 0x402d84
movzx esi, byte [ebp + 2]
shl esi, 0x10
add edi, esi
mov dword [esp + 0x1c], edi
mov esi, dword [esp + 0x4c]
movzx esi, byte [esi + 1]
shl esi, 8
add dword [esp + 0x1c], esi
test cl, cl
je 0x402c67
mov edi, dword [esp + 4]
mov esi, 5
bsr ecx, ecx
sub esi, edi
mov edi, dword [esp + 0x4c]
shl esi, 3
mov dword [esp + 0x34], edi
sub esi, ecx
test edx, edx
je 0x403140
mov ecx, dword [esp + 4]
mov edi, dword [esp + 0x4c]
add edi, ecx
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x64], edi
movzx ecx, byte [edi + ecx - 7]
cmp edx, 3
jbe 0x403440
test cl, cl
je 0x403128
cmp edx, 0xffffff88
ja 0x402c6c
mov edx, dword [esp + 0x10]
lea edi, [edi + edx - 0xa]
movzx edx, cl
mov ecx, 8
mov dword [esp + 0x3c], edi
bsr edx, edx
mov edi, dword [edi]
sub ecx, edx
mov dword [esp + 0x24], edi
mov dword [esp + 8], ecx
mov ecx, dword [esp]
mov edx, dword [esp + 0x28]
add eax, 0xa
mov dword [esp + 0x50], eax
mov eax, dword [esp + 0x44]
lea edi, [ecx + edx]
add edx, 3
shr edx, 2
add eax, 4
lea ebp, [edi - 3]
mov dword [esp + 0x78], edi
add ecx, edx
mov dword [esp + 0x54], eax
mov eax, dword [esp + 0x4c]
mov dword [esp + 0x70], ecx
add ecx, edx
mov edi, dword [esp + 0x94]
add eax, 4
mov dword [esp + 0x6c], ecx
add ecx, edx
mov edx, dword [esp + 0x38]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x64]
add edi, 4
shr edx, 0x10
mov dword [esp + 0x60], ebp
movzx edx, dl
add eax, 4
mov dword [esp + 0x74], ecx
mov dword [esp + 0x68], edx
mov dword [esp + 0x5c], eax
cmp ecx, ebp
jae 0x403dc8
mov eax, edx
mov ebp, dword [esp + 0x70]
mov dword [esp + 4], edi
neg eax
mov edi, dword [esp + 0x2c]
and eax, 0x1f
mov dword [esp + 0x48], ebp
mov ebp, esi
mov esi, ebx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x74]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x38], eax
jmp 0x402f50
mov eax, edi
and edi, 7
shr eax, 3
sub ebx, eax
mov eax, dword [ebx]
mov dword [esp + 0x20], ebx
mov dword [esp + 0xc], eax
xor eax, eax
mov ebx, dword [esp + 0x30]
mov edx, dword [esp + 0x54]
cmp ebx, edx
jb 0x403340
mov edx, esi
and esi, 7
shr edx, 3
sub ebx, edx
mov edx, dword [ebx]
mov dword [esp + 0x30], ebx
mov dword [esp + 0x18], edx
mov ecx, dword [esp + 0x34]
mov edx, dword [esp + 0x58]
cmp ecx, edx
jb 0x403350
mov edx, ebp
and ebp, 7
shr edx, 3
sub ecx, edx
mov edx, dword [ecx]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x1c], edx
mov ebx, dword [esp + 0x3c]
mov edx, dword [esp + 0x5c]
cmp ebx, edx
jb 0x4031d8
mov ecx, dword [esp + 8]
mov edx, ecx
and ecx, 7
shr edx, 3
mov dword [esp + 8], ecx
sub ebx, edx
mov edx, dword [ebx]
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x24], edx
test eax, eax
jne 0x4031d8
mov edx, dword [esp + 0x60]
cmp dword [esp + 0x14], edx
jae 0x4031d8
mov eax, dword [esp + 0xc]
mov ecx, edi
mov ebx, dword [esp]
shl eax, cl
movzx ecx, byte [esp + 0x10]
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, esi
movzx edx, word [eax]
mov word [ebx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edi, edx
add ebx, eax
mov eax, dword [esp + 0x18]
mov dword [esp], ebx
mov ebx, dword [esp + 0x10]
shl eax, cl
mov ecx, ebx
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, dword [esp + 0x48]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
add edx, esi
mov esi, ebx
mov dword [esp + 0x2c], edx
movzx edx, byte [eax + 3]
mov eax, dword [esp + 0x1c]
add edx, ecx
mov ecx, ebp
shl eax, cl
mov ecx, ebx
mov ebx, dword [esp + 0x38]
shr eax, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + eax*4]
movzx eax, word [ecx]
mov word [ebx], ax
movzx eax, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add eax, ebp
mov ebp, dword [esp + 0x24]
add ecx, ebx
mov ebx, dword [esp + 0x14]
mov dword [esp + 0x38], ecx
movzx ecx, byte [esp + 8]
shl ebp, cl
mov ecx, esi
shr ebp, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + ebp*4]
movzx ebp, word [ecx]
mov word [ebx], bp
movzx ebp, byte [ecx + 2]
mov ebx, dword [esp + 8]
movzx ecx, byte [ecx + 3]
add ebx, ebp
mov ebp, dword [esp + 0x14]
mov dword [esp + 8], ebx
mov ebx, dword [esp]
add ecx, ebp
mov ebp, dword [esp + 0xc]
mov dword [esp + 0x14], ecx
mov ecx, edi
shl ebp, cl
mov ecx, esi
shr ebp, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + ebp*4]
movzx ebp, word [ecx]
mov word [ebx], bp
movzx ebp, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add edi, ebp
mov ebp, dword [esp + 0x10]
lea esi, [ebx + ecx]
mov ebx, dword [esp + 0x2c]
mov dword [esp], esi
mov esi, dword [esp + 0x18]
mov ecx, ebx
shl esi, cl
mov ecx, ebp
shr esi, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + esi*4]
movzx esi, word [ecx]
mov word [edx], si
movzx esi, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add esi, ebx
mov ebx, dword [esp + 0x38]
add edx, ecx
mov ecx, eax
mov dword [esp + 0x48], edx
mov edx, dword [esp + 0x1c]
shl edx, cl
mov ecx, ebp
shr edx, cl
mov ecx, dword [esp + 4]
lea edx, [ecx + edx*4]
movzx ecx, word [edx]
mov word [ebx], cx
movzx ecx, byte [edx + 2]
lea ebp, [ecx + eax]
movzx eax, byte [edx + 3]
mov edx, ebx
add edx, eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0x38], edx
mov ebx, dword [esp + 8]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp + 0x10]
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, dword [esp + 0x14]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, ebx
mov ebx, dword [esp + 0x20]
add eax, ecx
mov dword [esp + 8], edx
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x50]
cmp ebx, eax
jae 0x402eb0
mov eax, 3
jmp 0x402ec6
lea edi, [ebp + ebx - 4]
mov dword [esp + 0x20], edi
test cl, cl
je 0x403128
mov edi, dword [edi]
bsr ecx, ecx
mov dword [esp + 0xc], edi
mov edi, 8
sub edi, ecx
mov dword [esp + 0x2c], edi
jmp 0x402ce8
add esp, 0x7c
mov edx, 0xffffffff
pop ebx
mov eax, edx
pop esi
pop edi
pop ebp
ret
mov edx, 0xffffffb8
jmp 0x402c6c
mov ebp, edi
movzx ebx, word [esp + 8]
movzx edi, byte [edi]
mov dword [esp + 0x18], edi
cmp bx, 2
je 0x40319d
cmp bx, 3
je 0x403190
test cl, cl
je 0x402c67
mov ebx, 5
bsr ecx, ecx
mov edi, dword [esp + 0x44]
sub ebx, esi
shl ebx, 3
mov dword [esp + 0x30], edi
sub ebx, ecx
jmp 0x402d28
movzx ebx, byte [ebp + 2]
shl ebx, 0x10
add edi, ebx
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x44]
movzx ebx, byte [edi + 1]
shl ebx, 8
add dword [esp + 0x18], ebx
jmp 0x40316a
lea esi, [edi + esi - 4]
mov dword [esp + 0x34], esi
test cl, cl
je 0x403128
mov esi, dword [esi]
bsr ecx, ecx
mov dword [esp + 0x1c], esi
mov esi, 8
sub esi, ecx
jmp 0x402da7
mov dword [esp + 0x2c], edi
mov ebx, esi
mov edi, dword [esp + 4]
mov esi, ebp
mov ebp, dword [esp + 0x48]
mov eax, dword [esp]
mov ecx, dword [esp + 0x70]
cmp ecx, eax
setb dl
cmp dword [esp + 0x6c], ebp
setb al
or al, dl
jne 0x402c67
mov edx, dword [esp + 0x38]
cmp dword [esp + 0x74], edx
jb 0x402c67
lea eax, [ecx - 2]
cmp dword [esp + 0x2c], 0x20
mov dword [esp + 0x48], eax
ja 0x4034c8
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x4032f8
mov eax, dword [esp + 0x20]
cmp dword [esp + 0x40], eax
je 0x403360
mov edx, dword [esp + 0x2c]
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x40]
cmp ecx, eax
jb 0x4034a0
mov eax, dword [esp + 0x70]
mov dword [esp + 0x20], ecx
sub eax, 3
cmp dword [esp], eax
setb al
shl edx, 3
sub dword [esp + 0x2c], edx
mov edx, dword [ecx]
mov dword [esp + 0xc], edx
test al, al
je 0x4034bd
movzx ecx, byte [esp + 0x2c]
mov eax, dword [esp + 0xc]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
mov ecx, dword [esp + 0x2c]
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ecx, edx
mov edx, dword [esp]
mov dword [esp], ecx
movzx ecx, byte [esp]
add edx, eax
mov eax, dword [esp + 0xc]
mov dword [esp + 0x10], edx
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
lea ecx, [edi + eax*4]
movzx eax, word [ecx]
mov word [edx], ax
mov edx, dword [esp]
movzx eax, byte [ecx + 2]
add edx, eax
movzx eax, byte [ecx + 3]
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x2c], edx
add ecx, eax
mov dword [esp], ecx
cmp edx, 0x20
ja 0x4034c8
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x20], edx
jb 0x403238
mov ecx, dword [esp + 0x2c]
mov eax, ecx
and ecx, 7
shr eax, 3
sub dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x2c], ecx
mov eax, dword [eax]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x70]
sub eax, 3
cmp dword [esp], eax
setb al
jmp 0x40327b
mov eax, 3
jmp 0x402eea
mov eax, 3
jmp 0x402f0e
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x403402
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 0x20]
cmp ecx, eax
je 0x4034c8
mov edx, dword [esp + 0x2c]
shr edx, 3
sub eax, edx
mov dword [esp + 0xc], eax
cmp dword [esp + 0xc], ecx
jb 0x403da8
mov ecx, dword [esp]
cmp dword [esp + 0x48], ecx
mov ecx, dword [esp + 0xc]
setae al
shl edx, 3
sub dword [esp + 0x2c], edx
mov edx, dword [ecx]
mov dword [esp + 0x20], ecx
mov dword [esp + 0xc], edx
test al, al
je 0x4034c8
movzx ecx, byte [esp + 0x2c]
mov eax, dword [esp + 0xc]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add dword [esp + 0x2c], edx
mov edx, dword [esp + 0x2c]
add ecx, eax
mov dword [esp], ecx
cmp edx, 0x20
ja 0x4034c8
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x20], edx
jb 0x403378
mov edx, dword [esp + 0x2c]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x2c], edx
mov edx, dword [esp]
mov eax, dword [eax]
cmp dword [esp + 0x48], edx
mov dword [esp + 0xc], eax
setae al
jmp 0x4033be
movzx ebp, byte [edi]
mov dword [esp + 0x24], ebp
cmp edx, 2
je 0x40345e
cmp edx, 3
jne 0x40346d
movzx edi, byte [edi + 2]
shl edi, 0x10
add ebp, edi
mov dword [esp + 0x24], ebp
mov edi, dword [esp + 0x64]
movzx edi, byte [edi + 1]
shl edi, 8
add dword [esp + 0x24], edi
test cl, cl
je 0x402c67
mov edi, 5
bsr ecx, ecx
sub edi, edx
lea edx, [edi*8]
mov edi, dword [esp + 0x64]
sub edx, ecx
mov dword [esp + 8], edx
mov dword [esp + 0x3c], edi
jmp 0x402e03
mov edx, dword [esp + 0x20]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 0x2c], eax
mov eax, dword [edx]
mov dword [esp + 0x20], edx
mov dword [esp + 0xc], eax
cmp dword [esp + 0x2c], 0x20
jbe 0x403360
mov ecx, dword [esp + 0x48]
mov eax, dword [esp]
cmp ecx, eax
jb 0x403527
mov edx, dword [esp + 0x68]
mov dword [esp + 0x10], ebp
mov dword [esp], ebx
mov ebx, dword [esp + 0x2c]
neg edx
mov dword [esp + 4], esi
mov esi, ecx
and edx, 0x1f
lea esi, [esi]
mov ebp, dword [esp + 0xc]
mov ecx, ebx
shl ebp, cl
mov ecx, edx
shr ebp, cl
lea ecx, [edi + ebp*4]
movzx ebp, word [ecx]
mov word [eax], bp
movzx ebp, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add ebx, ebp
add eax, ecx
cmp esi, eax
jae 0x4034f0
mov esi, dword [esp + 4]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x2c], ebx
mov ebx, dword [esp]
mov dword [esp], eax
mov edx, dword [esp + 0x70]
cmp dword [esp], edx
jae 0x403577
movzx ecx, byte [esp + 0x2c]
mov edx, dword [esp + 0xc]
shl edx, cl
mov ecx, dword [esp + 0x68]
mov eax, edx
neg ecx
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ecx], dl
cmp byte [eax + 3], 1
je 0x403e04
mov ecx, dword [esp + 0x2c]
cmp ecx, 0x1f
ja 0x403577
movzx eax, byte [eax + 2]
add ecx, eax
mov eax, 0x20
cmp ecx, eax
cmovbe eax, ecx
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x6c]
sub eax, 2
mov dword [esp + 4], eax
cmp ebx, 0x20
ja 0x403753
mov edx, dword [esp + 0x68]
neg edx
and edx, 0x1f
mov dword [esp], edx
jmp 0x403636
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x44], eax
je 0x403694
mov edx, ebx
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x44]
cmp ecx, eax
jb 0x403670
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x30], ecx
sub eax, 3
cmp ebp, eax
setb al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x18], edx
test al, al
je 0x40368b
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ebp], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, ebx
mov ebx, dword [esp + 0x18]
mov ecx, edx
add eax, ebp
shl ebx, cl
movzx ecx, byte [esp]
shr ebx, cl
lea ecx, [edi + ebx*4]
movzx ebx, word [ecx]
mov word [eax], bx
movzx ebx, byte [ecx + 2]
movzx ebp, byte [ecx + 3]
add ebx, edx
add ebp, eax
cmp ebx, 0x20
ja 0x403753
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x30], edx
jb 0x4035a0
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov ecx, dword [esp + 0x30]
mov eax, dword [ecx]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x6c]
sub eax, 3
cmp ebp, eax
setb al
jmp 0x4035de
mov ecx, dword [esp + 0x30]
mov edx, eax
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [ecx]
mov dword [esp + 0x30], ecx
mov dword [esp + 0x18], eax
cmp ebx, 0x20
ja 0x403753
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x40370a
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x44], eax
je 0x403753
mov edx, ebx
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x44]
cmp ecx, eax
jb 0x403738
cmp dword [esp + 4], ebp
mov dword [esp + 0x30], ecx
setae al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x18], edx
test al, al
je 0x403753
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ebp], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ebx, edx
add ebp, eax
cmp ebx, 0x20
ja 0x403753
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x30], edx
jb 0x4036a8
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov ecx, dword [esp + 0x30]
cmp dword [esp + 4], ebp
mov eax, dword [ecx]
mov dword [esp + 0x18], eax
setae al
jmp 0x4036dd
mov edx, dword [esp + 0x30]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [edx]
mov dword [esp + 0x30], edx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 4]
cmp eax, ebp
jb 0x403799
mov edx, dword [esp + 0x68]
mov dword [esp], esi
mov esi, eax
neg edx
and edx, 0x1f
lea esi, [esi]
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
mov ecx, edx
shr eax, cl
lea eax, [edi + eax*4]
movzx ecx, word [eax]
mov word [ebp], cx
movzx ecx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ebx, ecx
add ebp, eax
cmp esi, ebp
jae 0x403770
mov esi, dword [esp]
mov eax, dword [esp + 0x6c]
cmp ebp, eax
jae 0x4037d9
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x403df9
cmp ebx, 0x1f
ja 0x4037d9
movzx eax, byte [eax + 2]
add ebx, eax
mov eax, 0x20
cmp ebx, eax
cmova ebx, eax
mov eax, dword [esp + 0x74]
lea ebp, [eax - 2]
cmp esi, 0x20
ja 0x4039cb
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x40389f
mov eax, dword [esp + 0x34]
cmp dword [esp + 0x4c], eax
je 0x403904
mov edx, esi
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x4c]
cmp ecx, eax
jb 0x4038e0
mov eax, dword [esp + 0x74]
mov dword [esp + 0x34], ecx
sub eax, 3
cmp dword [esp + 0x38], eax
setb al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x4038fb
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x38]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, esi
mov esi, dword [esp + 0x1c]
add eax, ecx
mov ecx, edx
shl esi, cl
movzx ecx, byte [esp]
shr esi, cl
lea ecx, [edi + esi*4]
movzx esi, word [ecx]
mov word [eax], si
movzx esi, byte [ecx + 2]
add esi, edx
movzx edx, byte [ecx + 3]
add eax, edx
mov dword [esp + 0x38], eax
cmp esi, 0x20
ja 0x4039cb
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x34], edx
jb 0x403800
mov eax, esi
and esi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov edx, dword [esp + 0x34]
mov eax, dword [edx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x74]
sub eax, 3
cmp dword [esp + 0x38], eax
setb al
jmp 0x403840
mov ecx, dword [esp + 0x34]
mov edx, eax
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub esi, eax
mov eax, dword [ecx]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x1c], eax
cmp esi, 0x20
ja 0x4039cb
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403985
mov eax, dword [esp + 0x34]
cmp dword [esp + 0x4c], eax
je 0x4039cb
mov ecx, esi
shr ecx, 3
sub eax, ecx
mov edx, ecx
mov ecx, eax
mov eax, dword [esp + 0x4c]
cmp ecx, eax
jb 0x4039b0
mov eax, dword [esp + 0x38]
mov dword [esp + 0x34], ecx
cmp ebp, eax
setae al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x4039cb
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x38]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add esi, edx
add ecx, eax
mov dword [esp + 0x38], ecx
cmp esi, 0x20
ja 0x4039cb
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x34], edx
jb 0x403918
mov eax, esi
and esi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov ecx, dword [esp + 0x34]
mov eax, dword [ecx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x38]
cmp ebp, eax
setae al
jmp 0x403951
mov edx, dword [esp + 0x34]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub esi, eax
mov eax, dword [edx]
mov dword [esp + 0x34], edx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x38]
cmp ebp, eax
jb 0x403a0c
mov edx, dword [esp + 0x68]
mov dword [esp], ebx
neg edx
and edx, 0x1f
nop
mov ebx, dword [esp + 0x1c]
mov ecx, esi
shl ebx, cl
mov ecx, edx
shr ebx, cl
lea ecx, [edi + ebx*4]
movzx ebx, word [ecx]
mov word [eax], bx
movzx ebx, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add esi, ebx
add eax, ecx
cmp ebp, eax
jae 0x4039e0
mov dword [esp + 0x38], eax
mov ebx, dword [esp]
mov ebp, dword [esp + 0x38]
mov eax, dword [esp + 0x74]
cmp ebp, eax
jae 0x403a50
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x403e1e
cmp esi, 0x1f
ja 0x403a50
movzx eax, byte [eax + 2]
add esi, eax
mov eax, 0x20
cmp esi, eax
cmova esi, eax
mov eax, dword [esp + 0x78]
cmp dword [esp + 8], 0x20
lea ebp, [eax - 2]
ja 0x403c9d
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x403b3c
mov ecx, dword [esp + 0x64]
mov eax, dword [esp + 0x3c]
cmp ecx, eax
je 0x403ba8
mov edx, dword [esp + 8]
shr edx, 3
sub eax, edx
mov dword [esp], eax
cmp dword [esp], ecx
jb 0x403b80
mov ecx, dword [esp + 0x60]
cmp dword [esp + 0x14], ecx
mov ecx, dword [esp]
setb al
shl edx, 3
sub dword [esp + 8], edx
mov edx, dword [ecx]
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x24], edx
test al, al
je 0x403b9d
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp + 0x14]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
mov ecx, dword [esp + 8]
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ecx, edx
mov edx, dword [esp + 0x14]
mov dword [esp], ecx
movzx ecx, byte [esp]
add edx, eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0xc], edx
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
lea ecx, [edi + eax*4]
movzx eax, word [ecx]
mov word [edx], ax
mov edx, dword [esp]
movzx eax, byte [ecx + 2]
add edx, eax
movzx eax, byte [ecx + 3]
mov ecx, dword [esp + 0xc]
mov dword [esp + 8], edx
add ecx, eax
mov dword [esp + 0x14], ecx
cmp edx, 0x20
ja 0x403c9d
mov edx, dword [esp + 0x5c]
cmp dword [esp + 0x3c], edx
jb 0x403a78
mov ecx, dword [esp + 8]
mov edx, dword [esp + 0x60]
mov eax, ecx
and ecx, 7
shr eax, 3
sub dword [esp + 0x3c], eax
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x14], edx
mov dword [esp + 8], ecx
mov eax, dword [eax]
mov dword [esp + 0x24], eax
setb al
jmp 0x403abc
mov edx, ecx
mov ecx, dword [esp + 0x3c]
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub dword [esp + 8], eax
mov eax, dword [ecx]
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x24], eax
cmp dword [esp + 8], 0x20
ja 0x403c9d
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403c40
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x64], eax
je 0x403c9d
mov edx, dword [esp + 8]
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x64]
cmp ecx, eax
jb 0x403c80
mov eax, dword [esp + 0x14]
mov dword [esp + 0x3c], ecx
cmp ebp, eax
setae al
shl edx, 3
sub dword [esp + 8], edx
mov edx, dword [ecx]
mov dword [esp + 0x24], edx
test al, al
je 0x403c9d
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x14]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add dword [esp + 8], edx
mov edx, dword [esp + 8]
add ecx, eax
mov dword [esp + 0x14], ecx
cmp edx, 0x20
ja 0x403c9d
mov edx, dword [esp + 0x5c]
cmp dword [esp + 0x3c], edx
jb 0x403bc0
mov edx, dword [esp + 8]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x3c], eax
mov eax, dword [esp + 0x3c]
mov dword [esp + 8], edx
mov eax, dword [eax]
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x14]
cmp ebp, eax
setae al
jmp 0x403bff
mov edx, dword [esp + 0x3c]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 8], eax
mov eax, dword [edx]
mov dword [esp + 0x3c], edx
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x14]
cmp ebp, eax
jb 0x403cf4
mov edx, dword [esp + 0x68]
mov dword [esp + 4], esi
mov dword [esp], ebx
mov ebx, dword [esp + 8]
neg edx
and edx, 0x1f
lea esi, [esi]
mov esi, dword [esp + 0x24]
mov ecx, ebx
shl esi, cl
mov ecx, edx
shr esi, cl
lea ecx, [edi + esi*4]
movzx esi, word [ecx]
mov word [eax], si
movzx esi, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add ebx, esi
add eax, ecx
cmp ebp, eax
jae 0x403cc0
mov dword [esp + 0x14], eax
mov esi, dword [esp + 4]
mov dword [esp + 8], ebx
mov ebx, dword [esp]
mov ebp, dword [esp + 0x14]
mov eax, dword [esp + 0x78]
cmp ebp, eax
jae 0x403d43
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x403e11
mov edi, dword [esp + 8]
cmp edi, 0x1f
ja 0x403d43
movzx eax, byte [eax + 2]
add edi, eax
mov eax, 0x20
cmp edi, eax
cmovbe eax, edi
mov dword [esp + 8], eax
mov edi, dword [esp + 0x20]
xor edx, edx
cmp dword [esp + 0x40], edi
je 0x403dea
mov ecx, dword [esp + 0x30]
xor eax, eax
cmp dword [esp + 0x44], ecx
je 0x403ddd
mov ebx, dword [esp + 0x34]
cmp dword [esp + 0x4c], ebx
jne 0x402c67
mov ebx, dword [esp + 0x3c]
cmp dword [esp + 0x64], ebx
jne 0x402c67
xor ecx, ecx
cmp esi, 0x20
sete cl
and edx, ecx
test edx, eax
je 0x402c67
cmp dword [esp + 8], 0x20
jne 0x402c67
mov edx, dword [esp + 0x28]
jmp 0x402c6c
mov edx, dword [esp + 0x20]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 0x2c], eax
mov eax, dword [edx]
mov dword [esp + 0x20], edx
mov dword [esp + 0xc], eax
jmp 0x4034c8
mov eax, dword [esp + 0x6c]
mov ebp, dword [esp + 0x70]
mov dword [esp + 0x14], ecx
mov dword [esp + 0x38], eax
jmp 0x4031e8
xor eax, eax
cmp ebx, 0x20
sete al
jmp 0x403d5f
xor edx, edx
cmp dword [esp + 0x2c], 0x20
sete dl
jmp 0x403d53
movzx eax, byte [eax + 2]
add ebx, eax
jmp 0x4037d9
movzx eax, byte [eax + 2]
add dword [esp + 0x2c], eax
jmp 0x403577
movzx eax, byte [eax + 2]
add dword [esp + 8], eax
jmp 0x403d43
movzx eax, byte [eax + 2]
add esi, eax
jmp 0x403a50