Function at 0x663830
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0xec
mov dword [esp + 0x50], edx
mov edx, dword [esp + 0x100]
mov dword [esp + 0x3c], eax
movzx eax, byte [esp + 0x104]
mov dword [esp + 0x4c], ecx
mov edx, dword [edx]
mov byte [esp + 0x60], al
mov dword [esp + 0x74], edx
mov edx, dword [esp + 0x50]
movzx eax, byte [edx + 8]
movzx edx, byte [ecx + 8]
mov ecx, edx
xor ecx, eax
and ecx, 0xffffff80
mov byte [esp + 0x5f], cl
mov ecx, edx
or ecx, eax
movzx ecx, cl
test cl, 0x70
je 0x6638e5
and ecx, 0x30
jne 0x663e0f
test al, 0x40
je 0x663d5f
and edx, 0x40
jne 0x663e47
movzx ecx, byte [esp + 0x60]
and ecx, 0x50
jne 0x663e47
mov eax, dword [esp + 0x3c]
mov dword [eax + 4], 0
mov dword [eax], 1
mov word [eax + 0xa], 0
movzx eax, byte [esp + 0x5f]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
or eax, 0x40
mov byte [edx + 8], al
jmp 0x663dd5
mov ecx, dword [esp + 0x4c]
cmp word [ecx + 0xa], 0
je 0x663c7e
mov edx, dword [esp + 0x50]
cmp word [edx + 0xa], 0
jne 0x663d50
mov ecx, dword [edx]
cmp ecx, 1
mov dword [esp + 0x14], ecx
je 0x663e6a
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x50]
mov edi, dword [esp + 0x14]
mov ecx, dword [ecx + 4]
mov edx, dword [edx + 4]
mov dword [esp + 0x24], ecx
mov ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x24]
add edi, edx
mov dword [esp + 0x70], edx
mov ecx, dword [ecx]
add eax, ecx
sub edi, eax
mov dword [esp + 0x1c], ecx
jns 0x66394d
cmp byte [esp + 0x60], 0x80
jne 0x663cf0
cmp dword [esp + 0x74], 0x2e
jg 0x664295
mov ebp, dword [esp + 0x74]
movzx ebp, byte [ebp + 0x775ee3]
mov dword [esp + 0x18], ebp
mov eax, dword [esp + 0x18]
lea ebp, [esp + 0xba]
mov dword [esp + 0x58], 0
mov dword [esp + 0x2c], ebp
add eax, eax
cmp eax, 0x22
ja 0x6642fd
mov ebp, dword [esp + 0x74]
mov ecx, dword [esp + 0x1c]
lea eax, [ebp + ecx - 1]
cmp dword [esp + 0x14], eax
cmovge eax, dword [esp + 0x14]
cmp eax, 0x31
jle 0x663dfc
lea ecx, [eax + 2]
mov edx, 0x55555556
mov eax, ecx
imul edx
sar ecx, 0x1f
sub edx, ecx
add edx, 2
mov dword [esp + 0x10], edx
cmp byte [esp + 0x60], 0x80
adc dword [esp + 0x10], 0
mov edx, dword [esp + 0x10]
lea esi, [esp + 0x88]
mov dword [esp + 0x54], 0
lea eax, [edx + edx + 2]
cmp eax, 0x32
ja 0x66439f
mov eax, dword [esp + 0x10]
mov ebp, dword [esp + 0x50]
mov ecx, dword [esp + 0x14]
sub eax, 1
add ebp, 0xa
cmp dword [esp + 0x14], 0x31
mov dword [esp + 0x40], eax
lea ebx, [esi + eax*2]
jg 0x6642cd
movzx eax, byte [ecx + 0x775ee0]
lea edx, [eax + eax - 2]
add edx, ebp
mov eax, ebx
mov dword [esp + 0x20], edx
jb 0x663a4f
mov eax, edx
mov edx, ebx
movzx ecx, word [eax]
sub eax, 2
mov word [edx], cx
sub edx, 2
cmp ebp, eax
jbe 0x663a26
mov eax, dword [esp + 0x20]
sub eax, ebp
not eax
and eax, 0xfffffffe
add eax, ebx
cmp esi, eax
ja 0x663a53
mov word [eax], 0
sub eax, 2
cmp esi, eax
jbe 0x663a47
cmp dword [esp + 0x1c], 0x31
mov ecx, dword [esp + 0x1c]
jg 0x6642b3
movzx ecx, byte [ecx + 0x775ee0]
mov dword [esp + 0x28], ecx
mov ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x28]
add ecx, 0xa
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x4c]
sub eax, 1
cmp dword [esp + 0x28], 1
lea ecx, [ecx + eax*2 + 0xa]
mov dword [esp + 0x30], ecx
mov ecx, dword [esp + 0x4c]
movzx ecx, word [ecx + eax*2 + 0xa]
mov word [esp + 0x5c], cx
movzx edx, cx
jle 0x66438c
lea ebp, [edx + 1]
mov dword [esp + 0x1c], ebp
mov ebp, dword [esp + 0x4c]
imul ecx, edx, 0x3e8
movzx eax, word [ebp + eax*2 + 8]
add eax, ecx
mov dword [esp + 0x34], eax
xor eax, eax
cmp dword [esp + 0x28], 2
setne al
add dword [esp + 0x34], eax
movzx ebp, word [ebx]
movzx ecx, bp
cmp ecx, dword [0x775ce4]
jb 0x663aee
mov eax, 0x775ce4
add eax, 4
sub edi, 1
cmp ecx, dword [eax]
jae 0x663ae4
cmp dword [0x775ce4], edx
mov dword [esp + 0x38], edi
ja 0x663b10
mov eax, edi
add eax, 1
mov ecx, eax
sub ecx, edi
cmp dword [ecx*4 + 0x775ce4], edx
jbe 0x663afc
mov dword [esp + 0x38], eax
cmp byte [esp + 0x60], 0
js 0x664348
cmp dword [esp + 0x14], 0x31
mov ecx, dword [esp + 0x14]
jg 0x6642e7
movzx edx, byte [ecx + 0x775ee0]
mov eax, dword [esp + 0x10]
sub eax, edx
mov edx, dword [esp + 0x38]
lea ebp, [eax + eax*2]
test edx, edx
js 0x664381
mov eax, dword [esp + 0x38]
mov edx, 0x55555556
imul edx
mov eax, dword [esp + 0x38]
sar eax, 0x1f
sub edx, eax
lea eax, [edx + edx*2]
sub eax, dword [esp + 0x38]
lea edi, [eax + 3]
mov edx, dword [esp + 0x10]
mov ecx, edi
mov eax, esi
sub ebp, edi
call fcn.0065e950
mov eax, ebx
add dword [esp + 0x38], edi
cmp edi, 2
mov dword [esp + 0x7c], ebp
jle 0x663b92
sub edi, 3
mov word [eax], 0
sub eax, 2
cmp edi, 2
jg 0x663b82
mov edx, dword [esp + 0x10]
movzx ebp, word [ebx]
mov dword [esp + 0x70], 0
mov dword [esp + 0x24], edx
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x2c]
mov eax, dword [esp + 0x24]
sub eax, dword [esp + 0x28]
mov dword [esp + 0x48], 0
lea edx, [ecx + edx*2 - 2]
movzx ecx, byte [esp + 0x60]
lea eax, [esi + eax*2]
mov dword [esp + 0x44], edx
mov dword [esp + 0x18], eax
and ecx, 0x50
mov dword [esp + 0x40], 0
mov dword [esp + 0x78], ecx
mov eax, dword [esp + 0x24]
sub eax, dword [esp + 0x28]
mov word [esp + 0x14], 0
mov dword [esp + 0x2c], eax
jmp 0x663c6b
mov edx, dword [esp + 0x24]
cmp dword [esp + 0x10], edx
jl 0x663f58
je 0x663ef0
movzx edx, bp
movzx eax, word [ebx - 2]
imul edx, edx, 0x3e8
add eax, edx
mov edx, eax
sar edx, 0x1f
idiv dword [esp + 0x1c]
test eax, eax
mov ecx, 0xffffffff
mov edx, 1
je 0x663c35
mov ecx, eax
mov edx, eax
neg ecx
mov ebp, dword [esp + 0x18]
mov eax, dword [esp + 0x28]
add word [esp + 0x14], dx
mov edx, dword [esp + 0x10]
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 0x20]
sub edx, dword [esp + 0x2c]
mov dword [esp], eax
mov eax, ebp
mov dword [esp + 8], ebp
mov dword [esp + 4], 0
call fcn.0065da60
movzx ebp, word [ebx]
cmp ebx, esi
jbe 0x663bf5
test bp, bp
jne 0x663bf5
sub dword [esp + 0x10], 1
sub ebx, 2
jmp 0x663c68
cmp dword [ecx], 1
jne 0x6638f4
and edx, 0x70
jne 0x6638f4
mov edx, dword [esp + 0x50]
cmp word [edx + 0xa], 0
jne 0x663ca4
cmp dword [edx], 1
je 0x66460b
movzx edx, byte [esp + 0x60]
mov eax, dword [esp + 0x3c]
mov ebp, dword [esp + 0x108]
and edx, 0x50
mov byte [eax + 8], 0
mov dword [eax + 4], 0
mov dword [eax], 1
mov word [eax + 0xa], 0
je 0x664578
or dword [ebp], 0x80
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
jmp 0x663dd5
movzx eax, byte [esp + 0x60]
test al, 0x20
jne 0x663e88
mov ecx, dword [esp + 0x24]
cmp dword [esp + 0x70], ecx
jg 0x66394d
cmp edi, 0xffffffff
jl 0x663d18
test al, 0x40
je 0x66394d
mov ebp, dword [esp + 0x108]
lea ebx, [esp + 0xdc]
mov ecx, dword [esp + 0x100]
mov edx, dword [esp + 0x50]
mov eax, dword [esp + 0x3c]
mov dword [esp + 0xdc], 0
mov dword [esp + 4], ebp
mov dword [esp], ebx
call fcn.0065efe0
jmp 0x663db0
mov edx, dword [esp + 0x50]
mov edx, dword [edx]
mov dword [esp + 0x14], edx
jmp 0x663912
movzx ecx, byte [esp + 0x60]
mov dword [esp + 0xdc], 0
and ecx, 0x50
jne 0x663ebc
mov eax, dword [esp + 0x3c]
lea ebx, [esp + 0xdc]
movzx edx, byte [esp + 0x5f]
cmp byte [esp + 0x60], 0
mov dword [eax + 4], 0
mov dword [eax], 1
mov word [eax + 0xa], 0
mov byte [eax + 8], dl
js 0x664413
mov ebp, dword [esp + 0x108]
mov edx, dword [esp + 0x100]
mov ecx, ebx
mov eax, dword [esp + 0x3c]
mov dword [esp], ebp
call fcn.0065f940
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
mov eax, dword [esp + 0x54]
mov dword [esp], eax
call fcn.006a4590
mov eax, dword [esp + 0x58]
mov dword [esp], eax
call fcn.006a4590
mov eax, dword [esp + 0x3c]
add esp, 0xec
pop ebx
pop esi
pop edi
pop ebp
ret
movzx eax, byte [eax + 0x775ee0]
add eax, 2
mov dword [esp + 0x10], eax
jmp 0x6639bf
mov edx, dword [esp + 0x100]
mov ebp, dword [esp + 0x108]
mov ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x3c]
mov dword [esp], edx
mov edx, dword [esp + 0x50]
mov dword [esp + 4], ebp
call fcn.00660d80
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
jmp 0x663dd5
mov ebp, dword [esp + 0x108]
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
or dword [ebp], 0x80
jmp 0x663dd5
test al, 0x70
jne 0x663912
cmp byte [esp + 0x60], 0
js 0x664691
test byte [esp + 0x60], 0x20
je 0x664651
mov eax, dword [esp + 0x3c]
movzx edx, byte [esp + 0x5f]
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
mov dword [eax + 4], 0
mov dword [eax], 1
mov word [eax + 0xa], 0
mov byte [eax + 8], dl
jmp 0x663dd5
mov ebp, dword [esp + 0x108]
lea ebx, [esp + 0xdc]
mov ecx, dword [esp + 0x100]
mov edx, dword [esp + 0x50]
mov eax, dword [esp + 0x3c]
mov dword [esp + 4], ebp
mov dword [esp], ebx
call fcn.0065efe0
jmp 0x663da9
mov edi, ebp
mov edx, dword [esp + 0x30]
mov eax, ebx
mov word [esp + 0x5c], bp
mov ebp, dword [esp + 0x20]
jmp 0x663f10
cmp eax, esi
je 0x663f45
sub eax, 2
sub edx, 2
movzx edi, word [eax]
xor ecx, ecx
cmp edx, ebp
jb 0x663f19
movzx ecx, word [edx]
cmp cx, di
je 0x663f03
cmp di, cx
movzx ebp, word [esp + 0x5c]
jb 0x663f58
movzx edx, bp
movzx eax, word [ebx - 2]
imul edx, edx, 0x3e8
add eax, edx
mov edx, eax
sar edx, 0x1f
idiv dword [esp + 0x34]
jmp 0x663c21
add word [esp + 0x14], 1
mov word [esi], 0
mov dword [esp + 0x10], 1
cmp word [esp + 0x14], 0
jne 0x663f6c
mov eax, dword [esp + 0x40]
test eax, eax
je 0x664012
mov eax, dword [esp + 0x40]
movzx ebp, word [esp + 0x14]
mov ecx, dword [esp + 0x44]
test eax, eax
mov word [ecx], bp
jne 0x66401c
mov edx, dword [esp + 0x48]
movzx ecx, bp
add edx, 1
cmp ecx, dword [0x775ce4]
jb 0x663fb0
mov edi, dword [esp + 0x48]
lea esi, [esi]
add edx, 1
mov eax, edx
sub eax, edi
cmp dword [eax*4 + 0x775ce0], ecx
jbe 0x663fa0
mov dword [esp + 0x48], edx
mov ebp, dword [esp + 0x74]
add dword [esp + 0x40], 1
sub dword [esp + 0x44], 2
cmp dword [esp + 0x48], ebp
jg 0x664023
cmp dword [esp + 0x10], 1
jne 0x663fef
cmp word [esi], 0
jne 0x663fef
mov eax, dword [esp + 0x78]
test eax, eax
jne 0x664263
mov ebp, dword [esp + 0x70]
cmp dword [esp + 0x38], ebp
jle 0x664258
mov eax, dword [esp + 0x38]
sub dword [esp + 0x18], 2
test eax, eax
je 0x664330
sub dword [esp + 0x24], 1
sub dword [esp + 0x38], 3
movzx ebp, word [ebx]
jmp 0x663be0
mov dword [esp + 0x40], 0
jmp 0x663fc8
add dword [esp + 0x48], 3
jmp 0x663fb4
add dword [esp + 0x44], 2
cmp byte [esp + 0x60], 0
mov dword [esp + 0xdc], 0
js 0x6643f2
mov eax, dword [esp + 0x48]
add eax, dword [esp + 0x38]
cmp dword [esp + 0x74], eax
jl 0x6643e2
movzx ebp, byte [esp + 0x60]
test ebp, 0x50
je 0x6641f3
mov eax, dword [esp + 0x50]
cmp dword [esp + 0x10], 1
movzx eax, byte [eax + 8]
mov byte [esp + 0x5f], al
jne 0x66443c
cmp word [esi], 0
jne 0x66443c
mov edx, dword [esp + 0x50]
mov ecx, dword [esp + 0x4c]
mov ebp, dword [esp + 0x3c]
mov eax, dword [edx + 4]
cmp dword [ecx + 4], eax
cmovle eax, dword [ecx + 4]
mov dword [ebp], 1
mov edx, dword [esp + 0x100]
lea ecx, [esp + 0xdc]
mov word [ebp + 0xa], 0
mov dword [ebp + 4], eax
movzx eax, byte [esp + 0x5f]
and eax, 0xffffff80
mov byte [ebp + 8], al
mov ebp, dword [esp + 0x108]
mov eax, dword [esp + 0x3c]
mov dword [esp], ebp
call fcn.0065f940
jmp 0x663dd5
mov ecx, esi
mov edx, edi
mov eax, esi
mov dword [esp + 0xc], 1
mov dword [esp + 8], esi
mov dword [esp + 4], 0
mov dword [esp], edi
call fcn.0065da60
mov ebp, eax
mov eax, dword [esp + 0x4c]
mov ecx, dword [eax + 4]
mov eax, dword [eax]
sub ecx, dword [esp + 0x38]
cmp eax, 0x31
jg 0x664581
movzx edx, byte [eax + 0x775ee0]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x20]
mov eax, esi
mov dword [esp], edx
mov edx, ebp
call fcn.0065f0c0
cmp eax, 0x80000000
mov ecx, eax
je 0x6643b5
lea ebp, [esi + ebp*2]
mov eax, esi
cmp esi, ebp
jae 0x664167
mov dword [esp + 0x10], ebp
movzx edx, word [eax]
mov ebp, edx
shr bp, 1
and edx, 1
mov word [eax], bp
je 0x66415e
add word [eax - 2], 0x1f4
add eax, 2
cmp eax, dword [esp + 0x10]
jb 0x664148
cmp ecx, 0
jle 0x6645f1
mov ebp, dword [esp + 0x74]
cmp dword [esp + 0x48], ebp
je 0x6645b4
mov ecx, dword [esp + 0x4c]
mov ebp, 0x55555556
mov ebx, dword [ecx + 4]
sub ebx, dword [esp + 0x38]
mov eax, ebx
imul ebp
mov eax, ebx
sar eax, 0x1f
mov ecx, edx
mov edx, dword [esp + 0x4c]
sub ecx, eax
lea eax, [ecx + ecx*2]
sub ebx, eax
mov ebx, dword [ebx*4 + 0x775ce0]
mov eax, dword [edx]
neg ebx
cmp eax, 0x31
jg 0x66459d
movzx edx, byte [eax + 0x775ee0]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x20]
mov eax, esi
mov dword [esp], edx
mov edx, edi
mov dword [esp + 0xc], ebx
mov dword [esp + 8], esi
call fcn.0065da60
neg eax
mov edx, eax
mov eax, esi
call fcn.0065e160
add byte [esp + 0x5f], 0x80
mov dword [esp + 0x44], esi
mov dword [esp + 0x48], eax
mov edx, dword [esp + 0x38]
lea ebx, [esp + 0xdc]
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 0x3c]
mov ebp, dword [esp + 0x108]
mov dword [eax + 4], edx
movzx eax, byte [esp + 0x5f]
mov edx, dword [esp + 0x100]
and eax, 0xffffff80
mov byte [ecx + 8], al
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x44]
mov dword [esp + 8], ebp
mov dword [esp + 4], ebx
mov dword [esp], eax
mov eax, dword [esp + 0x3c]
call fcn.0065ecf0
mov edx, dword [esp + 0x100]
mov ecx, ebx
mov eax, dword [esp + 0x3c]
mov dword [esp], ebp
call fcn.0065f940
jmp 0x663dd5
cmp byte [esp + 0x60], 0
jns 0x663fef
mov dword [esp + 0x10], 1
mov eax, dword [esp + 0x40]
test eax, eax
jne 0x664023
mov ecx, dword [esp + 0x44]
mov dword [esp + 0x48], 1
mov dword [esp + 0x40], 1
mov word [ecx], 0
jmp 0x664028
mov ecx, dword [esp + 0x74]
mov ebx, 0x55555556
add ecx, 5
mov eax, ecx
imul ebx
sar ecx, 0x1f
sub edx, ecx
mov dword [esp + 0x18], edx
jmp 0x663967
add ecx, 2
mov ebp, 0x55555556
mov eax, ecx
imul ebp
sar ecx, 0x1f
sub edx, ecx
mov dword [esp + 0x28], edx
jmp 0x663a6d
add ecx, 2
mov edx, 0x55555556
mov eax, ecx
imul edx
sar ecx, 0x1f
sub edx, ecx
lea edx, [edx + edx - 2]
jmp 0x663a18
add ecx, 2
mov edx, 0x55555556
mov eax, ecx
imul edx
sar ecx, 0x1f
sub edx, ecx
jmp 0x663b31
mov dword [esp], eax
call sub.msvcrt.dll_malloc
test eax, eax
mov dword [esp + 0x58], eax
mov dword [esp + 0x2c], eax
jne 0x663989
mov ebp, dword [esp + 0x108]
mov dword [esp + 0x54], 0
or dword [ebp], 0x10
jmp 0x663dd5
cmp byte [esp + 0x60], 0
js 0x664000
mov dword [esp + 0x38], 0
jmp 0x66426b
mov ecx, dword [esp + 0x70]
mov edx, dword [esp + 0x10]
sub ecx, dword [esp + 0x24]
cmp bp, word [esp + 0x5c]
mov dword [esp + 0x7c], 0
mov dword [esp + 0x70], ecx
mov dword [esp + 0x24], edx
jae 0x663ba5
mov ecx, dword [esp + 0x40]
sub dword [esp + 0x38], 3
mov dword [esp + 0x24], ecx
jmp 0x663ba5
mov edi, dword [esp + 0x38]
neg edi
jmp 0x663b64
imul ebp, edx, 0x3e8
mov dword [esp + 0x1c], edx
mov dword [esp + 0x34], ebp
jmp 0x663ad1
mov dword [esp], eax
call sub.msvcrt.dll_malloc
test eax, eax
mov esi, eax
mov dword [esp + 0x54], eax
jne 0x6639e9
mov ebp, dword [esp + 0x108]
or dword [ebp], 0x10
jmp 0x663dd5
mov eax, dword [esp + 0x44]
mov edx, dword [esp + 0x48]
movzx ecx, word [eax]
mov eax, dword [edx*4 + 0x775ce0]
sub eax, 1
cmp ecx, eax
jne 0x66417e
mov ebp, dword [esp + 0x108]
or dword [ebp], 4
jmp 0x663dd5
cmp dword [esp + 0x10], 1
jg 0x664403
cmp word [esi], 0
je 0x6644bb
mov dword [esp + 0xdc], 1
jmp 0x6641f3
mov edx, dword [esp + 0x100]
mov ecx, dword [esp + 0x3c]
mov ebp, dword [esp + 0x108]
mov eax, dword [edx + 8]
sub eax, dword [edx]
add eax, 1
mov dword [ecx + 4], eax
or dword [ebp], 0x400
jmp 0x663da9
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x50]
mov eax, dword [esp + 0x7c]
add eax, dword [esp + 0x38]
movzx ecx, word [ecx]
sub eax, dword [edx + 4]
mov edx, dword [esp + 0x10]
mov word [esp + 0x14], cx
mov ecx, dword [esp + 0x4c]
add eax, dword [ecx + 4]
mov ecx, dword [esp + 0x7c]
cmp eax, dword [esp + 0x7c]
cmovle ecx, eax
mov eax, esi
call fcn.0065e950
mov edx, eax
mov eax, esi
call fcn.0065e160
cmp eax, 0x31
mov ebx, eax
jg 0x664560
movzx edi, byte [eax + 0x775ee0]
mov edx, dword [esp + 0x50]
mov ecx, dword [esp + 0x4c]
mov eax, dword [edx + 4]
cmp dword [ecx + 4], eax
cmovle eax, dword [ecx + 4]
and ebp, 0x10
mov dword [esp + 0x38], eax
jne 0x6640d9
mov dword [esp + 0x48], ebx
mov dword [esp + 0x44], esi
jmp 0x6641f3
mov ecx, dword [esp + 0x44]
movzx eax, word [ecx]
movzx edx, ax
test dl, 1
jne 0x6641f3
test ax, ax
je 0x6641f3
mov ebp, dword [esp + 0x38]
cmp dword [esp + 0x70], ebp
jle 0x6641f3
mov eax, edx
shr eax, 1
imul eax, eax, 0x6667
shr eax, 0x11
imul eax, dword [0x775ce4]
cmp edx, eax
jne 0x6641f3
mov ebx, 1
mov eax, ebp
jmp 0x664530
lea ecx, [ebx + 1]
mov esi, edx
shr esi, cl
imul esi, dword [ecx*4 + 0x775f14]
shr esi, 0x11
imul esi, dword [ecx*4 + 0x775ce0]
cmp edx, esi
jne 0x664539
mov ebx, ecx
add eax, 1
cmp eax, dword [esp + 0x70]
jne 0x664510
mov dword [esp + 0x38], eax
mov edx, dword [esp + 0x40]
mov ecx, ebx
mov eax, dword [esp + 0x44]
call fcn.0065e950
mov edx, eax
mov eax, dword [esp + 0x44]
call fcn.0065e160
mov dword [esp + 0x48], eax
jmp 0x6641f3
lea ecx, [eax + 2]
mov edi, 0x55555556
mov eax, ecx
imul edi
sar ecx, 0x1f
mov edi, edx
sub edi, ecx
jmp 0x66448f
or dword [ebp], 2
jmp 0x6638c1
add eax, 2
mov edx, 0x55555556
mov dword [esp + 0x10], eax
imul edx
mov eax, dword [esp + 0x10]
sar eax, 0x1f
sub edx, eax
jmp 0x66411a
add eax, 2
mov dword [esp + 0x10], eax
imul ebp
mov eax, dword [esp + 0x10]
sar eax, 0x1f
sub edx, eax
jmp 0x6641bf
cmp dword [esp + 0x48], 3
jle 0x6643c5
mov ecx, dword [esp + 0x44]
cmp word [ecx], 0x3e7
jne 0x66417e
mov eax, ecx
mov edx, dword [esp + 0x48]
jmp 0x6645e1
cmp word [eax], 0x3e7
jne 0x66417e
sub edx, 3
add eax, 2
cmp edx, 3
jg 0x6645d6
jmp 0x6643cd
jne 0x6644ae
test byte [esp + 0x14], 1
lea esi, [esi]
je 0x6644ae
jmp 0x664170
test al, 0x70
lea esi, [esi]
jne 0x663ca4
mov eax, dword [esp + 0x3c]
mov ebp, dword [esp + 0x108]
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
mov byte [eax + 8], 0
mov dword [eax + 4], 0
mov dword [eax], 1
mov word [eax + 0xa], 0
or dword [ebp], 8
jmp 0x663dd5
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x50]
mov eax, dword [esp + 0x3c]
mov ebx, dword [ecx + 4]
mov dword [esp + 4], edx
mov dword [esp], eax
call fcn.00660d00
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
cmp ebx, dword [eax + 4]
jge 0x663dd5
mov dword [eax + 4], ebx
jmp 0x663dd5
mov ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x3c]
mov ebx, dword [edx + 4]
mov dword [esp + 0xdc], 0
sub ebx, dword [ecx + 4]
mov dword [esp + 4], edx
mov dword [esp], eax
call fcn.00660d00
movzx edx, byte [esp + 0x5f]
lea ecx, [esp + 0xdc]
mov eax, dword [esp + 0x3c]
mov ebp, dword [esp + 0x108]
mov byte [eax + 8], dl
mov edx, dword [esp + 0x100]
mov dword [eax + 4], ebx
mov dword [esp], ebp
call fcn.0065f940
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
jmp 0x663dd5