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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0xd4
mov eax, dword [0x4fc00c]
xor eax, esp
mov dword [esp + 0xd0], eax
push ebx
push esi
mov esi, dword [ebp + 0xc]
mov eax, edx
mov edx, dword [ebp + 8]
push edi
mov edi, ecx
mov dword [esp + 0x78], eax
xor ecx, ecx
mov dword [esp + 0x68], edi
mov dword [esp + 0x20], esi
mov dword [esp + 0x4c], ecx
mov dword [esp + 0x40], ecx
mov dword [esp + 0x1c], ecx
test eax, eax
je 0x40e729
mov cl, al
and cl, 2
mov byte [esp + 0x1a], cl
je 0x40e721
mov eax, dword [esi]
add esi, 4
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x78]
mov dword [esp + 0x20], esi
and al, 1
mov dword [esp + 0x78], eax
jmp 0x40e731
mov byte [esp + 0x78], cl
mov byte [esp + 0x1a], cl
movsx eax, byte [edx]
test eax, eax
je case.default.0x40ea05
nop dword [eax]
cmp eax, 0x25
je 0x40e7a3
mov esi, edx
mov dword [esp + 0x1c], esi
nop dword [eax + eax]
mov al, byte [edx + 1]
inc edx
test al, al
je 0x40e75c
cmp al, 0x25
jne 0x40e750
mov eax, dword [edi + 0xc]
mov ecx, edx
sub ecx, esi
mov dword [esp + 0x44], edx
add eax, ecx
push ecx
cmp eax, dword [edi + 0x10]
jl 0x40e77d
mov edx, esi
mov ecx, edi
call fcn.0040fbb0
add esp, 4
jmp 0x40e792
mov eax, dword [edi + 8]
add dword [edi + 0xc], ecx
sub eax, ecx
add eax, dword [edi + 0xc]
push esi
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov edx, dword [esp + 0x44]
cmp byte [edx], 0
je case.default.0x40ea05
mov esi, dword [esp + 0x20]
movsx ecx, byte [edx + 1]
inc edx
test ecx, ecx
je 0x40f9ef
xor al, al
mov byte [esp + 0x3b], al
mov byte [esp + 0x2a], al
mov byte [esp + 0x29], al
mov byte [esp + 0x19], al
mov byte [esp + 0x28], al
mov byte [esp + 0x18], al
nop word [eax + eax]
lea eax, [ecx - 0x20]
cmp eax, 0x10
ja case.0x40e7df.34
movzx eax, byte [eax + 0x40fa64]
jmp dword [eax*4 + 0x40fa48]
mov byte [esp + 0x18], 1
jmp 0x40e80e
mov byte [esp + 0x28], 1
jmp 0x40e80e
mov byte [esp + 0x19], 1
jmp 0x40e80e
mov byte [esp + 0x29], 1
jmp 0x40e80e
mov byte [esp + 0x2a], 1
jmp 0x40e80e
mov byte [esp + 0x3b], 1
movsx ecx, byte [edx + 1]
inc edx
test ecx, ecx
jne 0x40e7d0
mov dword [esp + 0x44], edx
mov dword [esp + 0x2c], 0
cmp ecx, 0x2a
jne 0x40e88b
cmp byte [esp + 0x1a], 0
je 0x40e868
mov esi, dword [esp + 0x40]
mov edx, dword [esi + 4]
cmp dword [esi], edx
jg 0x40e84d
mov edx, dword [esp + 0x44]
xorps xmm0, xmm0
movlpd qword [esp + 0x50], xmm0
mov eax, dword [esp + 0x50]
jmp 0x40e871
mov eax, dword [esi + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov dword [esi + 4], eax
call fcn.00429a10
mov dword [esp + 0x54], edx
mov edx, dword [esp + 0x44]
jmp 0x40e871
mov eax, dword [esi]
add esi, 4
mov dword [esp + 0x20], esi
mov dword [esp + 0x2c], eax
test eax, eax
jns 0x40e884
neg eax
mov byte [esp + 0x18], 1
mov dword [esp + 0x2c], eax
movsx ecx, byte [edx + 1]
inc edx
jmp 0x40e8b3
cmp ecx, 0x30
jl 0x40e8b7
mov edi, dword [esp + 0x2c]
cmp ecx, 0x39
jg 0x40e8ab
lea edi, [edi + edi*4]
inc edx
lea edi, [edi - 0x18]
lea edi, [ecx + edi*2]
movsx ecx, byte [edx]
cmp ecx, 0x30
jge 0x40e894
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0x68]
mov dword [esp + 0x44], edx
cmp ecx, 0x2e
jne 0x40e961
movsx ecx, byte [edx + 1]
inc edx
xor esi, esi
mov dword [esp + 0x44], edx
mov dword [esp + 0x3c], esi
cmp ecx, 0x2a
jne 0x40e938
cmp byte [esp + 0x1a], 0
je 0x40e914
mov esi, dword [esp + 0x40]
mov edx, dword [esi + 4]
cmp dword [esi], edx
jg 0x40e8f9
mov edx, dword [esp + 0x44]
xorps xmm0, xmm0
movlpd qword [esp + 0x50], xmm0
mov eax, dword [esp + 0x50]
jmp 0x40e922
mov eax, dword [esi + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov dword [esi + 4], eax
call fcn.00429a10
mov dword [esp + 0x54], edx
mov edx, dword [esp + 0x44]
jmp 0x40e922
mov eax, dword [esp + 0x20]
add eax, 4
mov dword [esp + 0x20], eax
mov eax, dword [eax - 4]
movsx ecx, byte [edx + 1]
inc edx
mov dword [esp + 0x44], edx
cdq
mov esi, eax
xor esi, edx
sub esi, edx
mov edx, dword [esp + 0x44]
jmp 0x40e964
cmp ecx, 0x30
jl 0x40e968
nop dword [eax]
cmp ecx, 0x39
jg 0x40e968
inc edx
lea esi, [esi + esi*4]
lea esi, [esi - 0x18]
mov dword [esp + 0x44], edx
lea esi, [ecx + esi*2]
mov dword [esp + 0x3c], esi
movsx ecx, byte [edx]
cmp ecx, 0x30
jge 0x40e940
jmp 0x40e968
or esi, 0xffffffff
mov dword [esp + 0x3c], esi
cmp ecx, 0x6c
jne 0x40e990
movsx ecx, byte [edx + 1]
inc edx
mov byte [esp + 0x2b], 1
mov dword [esp + 0x44], edx
cmp ecx, 0x6c
jne 0x40e995
movsx ecx, byte [edx + 1]
inc edx
mov byte [esp + 0x3a], 1
mov dword [esp + 0x44], edx
jmp 0x40e99a
mov byte [esp + 0x2b], 0
mov byte [esp + 0x3a], 0
xor eax, eax
mov dword [esp + 0x48], 0x4d58b0
mov byte [esp + 0x1b], 0
mov edx, 0x4d58b0
mov dword [esp + 0x24], eax
movsx eax, byte [edx]
cmp ecx, eax
je 0x40e9ce
inc dword [esp + 0x24]
add edx, 6
cmp edx, 0x4d593a
jl 0x40e9b2
mov dl, byte [esp + 0x1b]
jmp 0x40e9f8
cmp byte [esp + 0x78], 0
mov eax, dword [esp + 0x24]
lea eax, [eax + eax*2]
lea eax, [eax*2 + 0x4d58b0]
mov dword [esp + 0x48], eax
jne 0x40e9f1
test byte [eax + 2], 2
jne case.default.0x40ea05
mov dl, byte [eax + 3]
mov byte [esp + 0x1b], dl
movzx eax, dl
dec eax
cmp eax, 0xf
ja case.default.0x40ea05
jmp dword [eax*4 + 0x40fa78]
xor al, al
mov cl, 1
jmp 0x40ea1a
mov al, byte [esp + 0x3a]
mov cl, byte [esp + 0x2b]
mov edx, dword [esp + 0x48]
test byte [edx + 2], 1
je 0x40eae4
cmp byte [esp + 0x1a], 0
je 0x40ea78
mov eax, dword [esp + 0x40]
mov edx, dword [eax + 4]
cmp dword [eax], edx
jg 0x40ea61
xorps xmm0, xmm0
movlpd qword [esp + 0x50], xmm0
mov edx, dword [esp + 0x54]
mov eax, dword [esp + 0x50]
cmp byte [esp + 0x28], 0
mov dword [esp + 0x30], eax
mov dword [esp + 0x1c], edx
je 0x40ead7
mov cl, 0x2b
jmp 0x40eb5f
mov eax, dword [eax + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov edx, dword [esp + 0x40]
mov dword [edx + 4], eax
call fcn.00429a10
jmp 0x40ea9c
test al, al
je 0x40ea8b
mov ecx, dword [esp + 0x20]
add ecx, 8
mov eax, dword [ecx - 8]
mov edx, dword [ecx - 4]
jmp 0x40ea98
test cl, cl
mov ecx, dword [esp + 0x20]
add ecx, 4
mov eax, dword [ecx - 4]
cdq
mov dword [esp + 0x20], ecx
test edx, edx
jg 0x40ea4b
jl 0x40eaa6
test eax, eax
jae 0x40ea4b
test eax, eax
jne 0x40eac1
cmp edx, 0x80000000
jne 0x40eac1
mov dword [esp + 0x1c], edx
mov cl, 0x2d
mov dword [esp + 0x30], eax
jmp 0x40eb5f
neg eax
mov cl, 0x2d
mov dword [esp + 0x30], eax
adc edx, 0
neg edx
mov dword [esp + 0x1c], edx
jmp 0x40eb5f
mov cl, byte [esp + 0x19]
neg cl
sbb cl, cl
and cl, 0x20
jmp 0x40eb5f
cmp byte [esp + 0x1a], 0
je 0x40eb30
mov eax, dword [esp + 0x40]
mov edx, dword [eax + 4]
cmp dword [eax], edx
jg 0x40eb11
xorps xmm0, xmm0
movlpd qword [esp + 0x50], xmm0
mov edx, dword [esp + 0x54]
mov eax, dword [esp + 0x50]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x30], eax
jmp 0x40eb5d
mov eax, dword [eax + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov edx, dword [esp + 0x40]
mov dword [edx + 4], eax
call fcn.00429a10
mov dword [esp + 0x1c], edx
mov dword [esp + 0x30], eax
jmp 0x40eb5d
test al, al
je 0x40eb43
mov ecx, dword [esp + 0x20]
add ecx, 8
mov eax, dword [ecx - 8]
mov edx, dword [ecx - 4]
jmp 0x40eb51
test cl, cl
mov ecx, dword [esp + 0x20]
add ecx, 4
xor edx, edx
mov eax, dword [ecx - 4]
mov dword [esp + 0x20], ecx
mov dword [esp + 0x30], eax
mov dword [esp + 0x1c], edx
xor cl, cl
or eax, edx
mov byte [esp + 0x19], cl
jne 0x40eb6b
mov byte [esp + 0x29], al
mov al, byte [esp + 0x3b]
test al, al
je 0x40eb89
xor eax, eax
test cl, cl
mov ecx, dword [esp + 0x2c]
setne al
sub ecx, eax
cmp esi, ecx
cmovl esi, ecx
mov dword [esp + 0x3c], esi
cmp esi, 0x3c
jge 0x40eba3
lea eax, [esp + 0x90]
mov dword [esp + 0x24], 0x46
mov dword [esp + 0x70], eax
jmp 0x40ebcb
lea eax, [esi + 0xa]
mov dword [esp + 0x24], eax
cdq
push edx
push eax
call fcn.0040dca0
mov ecx, eax
mov dword [esp + 0x78], eax
add esp, 8
mov dword [esp + 0x4c], ecx
test ecx, ecx
je 0x40f9cf
mov edx, dword [esp + 0x1c]
mov edi, dword [esp + 0x24]
dec edi
add edi, eax
cmp byte [esp + 0x1b], 0x10
jne 0x40ec3a
push 0
push 0xa
push edx
push dword [esp + 0x3c]
call fcn.004c4120
mov dword [esp + 0x80], eax
lea ecx, [eax + eax*4]
mov eax, dword [esp + 0x30]
add ecx, ecx
sub eax, ecx
mov dword [esp + 0x6c], eax
cmp eax, 4
jge 0x40ec1c
push 0
push 0xa
push edx
push dword [esp + 0x8c]
call fcn.004c4360
cmp eax, 1
jne 0x40ec20
test edx, edx
jne 0x40ec20
xor ecx, ecx
jmp 0x40ec24
mov ecx, dword [esp + 0x6c]
mov al, byte [ecx*2 + 0x4d5f8d]
mov byte [edi - 1], al
sub edi, 2
mov al, byte [ecx*2 + str.thstndrd]
mov byte [edi], al
mov ecx, dword [esp + 0x48]
mov esi, dword [esp + 0x30]
movzx eax, byte [ecx + 4]
add eax, str.0123456789ABCDEF0123456789abcdef
mov dword [esp + 0x50], eax
movzx eax, byte [ecx + 1]
cdq
mov ecx, eax
mov eax, edx
mov edx, dword [esp + 0x1c]
mov dword [esp + 0x80], ecx
mov dword [esp + 0x6c], eax
push ebx
push eax
push ecx
push edx
push esi
dec edi
call fcn.004c42c0
mov dword [esp + 0x38], ebx
pop ebx
mov esi, eax
mov eax, dword [esp + 0x50]
mov al, byte [ecx + eax]
mov ecx, dword [esp + 0x80]
mov byte [edi], al
mov eax, dword [esp + 0x6c]
test edx, edx
ja 0x40ec67
jb 0x40ec97
test esi, esi
jne 0x40ec67
mov eax, dword [esp + 0x3c]
mov edx, dword [esp + 0x70]
sub eax, edx
sub eax, dword [esp + 0x24]
inc eax
mov dword [esp + 0x1c], edi
add eax, edi
test eax, eax
jle 0x40ecbd
dec edi
dec eax
mov byte [edi], 0x30
test eax, eax
jg 0x40ecb0
mov dword [esp + 0x1c], edi
mov cl, byte [esp + 0x19]
test cl, cl
je 0x40eccc
dec edi
mov dword [esp + 0x1c], edi
mov byte [edi], cl
cmp byte [esp + 0x29], 0
je 0x40ed00
mov eax, dword [esp + 0x48]
mov al, byte [eax + 5]
test al, al
je 0x40ed00
movzx eax, al
add eax, 0x4d3114
mov cl, byte [eax]
test cl, cl
je 0x40ed00
nop dword [eax]
dec edi
lea eax, [eax + 1]
mov byte [edi], cl
mov cl, byte [eax]
test cl, cl
jne 0x40ecf0
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x24]
sub edx, edi
lea esi, [eax - 1]
add esi, edx
jmp 0x40f8e9
cmp byte [esp + 0x1a], 0
je 0x40edc0
mov eax, dword [esp + 0x40]
mov edx, dword [eax + 4]
cmp dword [eax], edx
jle 0x40edb1
mov eax, dword [eax + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov edx, dword [esp + 0x40]
mov dword [edx + 4], eax
movzx eax, word [ecx + 8]
test al, 8
je 0x40ed55
movsd xmm2, qword [ecx]
mov dl, byte [esp + 0x1b]
movsd qword [esp + 0x50], xmm2
jmp 0x40edd6
test al, 4
je 0x40ed72
mov edx, dword [ecx + 4]
mov ecx, dword [ecx]
call fcn.004c4750
mov dl, byte [esp + 0x1b]
movaps xmm2, xmm0
movsd qword [esp + 0x50], xmm0
jmp 0x40edd6
test al, 0x12
je 0x40edb1
movzx eax, byte [ecx + 0xa]
lea edx, [esp + 0x88]
push eax
push dword [ecx + 0xc]
mov ecx, dword [ecx + 0x10]
xorps xmm2, xmm2
movsd qword [esp + 0x90], xmm2
call fcn.00410fe0
movsd xmm2, qword [esp + 0x90]
add esp, 8
mov dl, byte [esp + 0x1b]
movsd qword [esp + 0x50], xmm2
jmp 0x40edd6
mov dl, byte [esp + 0x1b]
xorps xmm2, xmm2
movsd qword [esp + 0x50], xmm2
jmp 0x40edd6
mov ecx, dword [esp + 0x20]
add ecx, 8
mov dword [esp + 0x20], ecx
movsd xmm2, qword [ecx - 8]
movsd qword [esp + 0x50], xmm2
test esi, esi
mov eax, 6
xorps xmm3, xmm3
cmovs esi, eax
comisd xmm3, xmm2
mov dword [esp + 0x3c], esi
jbe 0x40ee01
xorps xmm2, xmmword [0x4ec530]
movsd qword [esp + 0x50], xmm2
mov byte [esp + 0x19], 0x2d
jmp 0x40ee1d
cmp byte [esp + 0x28], 0
je 0x40ee0f
mov byte [esp + 0x19], 0x2b
jmp 0x40ee1d
mov al, byte [esp + 0x19]
neg al
sbb al, al
and al, 0x20
mov byte [esp + 0x19], al
cmp dl, 4
jne 0x40ee2b
test esi, esi
jle 0x40ee2b
dec esi
mov dword [esp + 0x3c], esi
movsd xmm1, qword [0x4ec3c0]
mov ecx, esi
movsd xmm4, qword [0x4ec3b8]
cmp esi, 8
jl 0x40ee7b
lea edx, [esi - 8]
shr edx, 3
inc edx
lea eax, [edx*8]
sub ecx, eax
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
mulsd xmm1, xmm4
sub edx, 1
jne 0x40ee52
mov dl, byte [esp + 0x1b]
test ecx, ecx
jle 0x40ee89
nop
dec ecx
mulsd xmm1, xmm4
test ecx, ecx
jg 0x40ee80
cmp dl, 2
jne 0x40ee9b
movaps xmm0, xmm1
addsd xmm2, xmm0
movsd qword [esp + 0x50], xmm2
movsd qword [esp + 0x70], xmm2
xor ecx, ecx
movsd xmm0, qword [esp + 0x70]
movsd qword [esp + 0x80], xmm0
movsd xmm0, qword [esp + 0x70]
ucomisd xmm0, qword [esp + 0x80]
mov dword [esp + 0x30], ecx
lahf
test ah, 0x44
jnp 0x40eedb
mov dword [esp + 0x1c], 0x4e45f0
lea esi, [ecx + 3]
jmp 0x40f8e9
comisd xmm2, xmm3
jbe 0x40f049
movsd xmm5, qword [0x4ec498]
comisd xmm2, xmm5
movsd xmm7, qword [0x4ec3c8]
movaps xmm3, xmm7
jb 0x40ef20
nop
cmp ecx, 0x15e
jg 0x40ef1c
mulsd xmm3, xmm5
add ecx, 0x64
movaps xmm0, xmm3
mulsd xmm0, xmm5
comisd xmm2, xmm0
jae 0x40ef00
mov dword [esp + 0x30], ecx
movsd xmm5, qword [0x4ec488]
movaps xmm0, xmm3
mulsd xmm0, xmm5
comisd xmm2, xmm0
jb 0x40ef51
cmp ecx, 0x15e
jg 0x40ef4d
movaps xmm3, xmm0
add ecx, 0x40
mulsd xmm0, xmm5
comisd xmm2, xmm0
jae 0x40ef35
mov dword [esp + 0x30], ecx
movsd xmm6, qword [0x4ec450]
movaps xmm0, xmm3
mulsd xmm0, xmm6
comisd xmm2, xmm0
jb 0x40ef82
cmp ecx, 0x15e
jg 0x40ef7e
movaps xmm3, xmm0
add ecx, 8
mulsd xmm0, xmm6
comisd xmm2, xmm0
jae 0x40ef66
mov dword [esp + 0x30], ecx
movsd xmm5, qword [0x4ec3d8]
movaps xmm0, xmm3
mulsd xmm0, xmm5
comisd xmm2, xmm0
jb 0x40efb1
cmp ecx, 0x15e
jg 0x40efad
movaps xmm3, xmm0
inc ecx
mulsd xmm0, xmm5
comisd xmm2, xmm0
jae 0x40ef97
mov dword [esp + 0x30], ecx
divsd xmm2, xmm3
movsd xmm0, qword [0x4ec3b0]
comisd xmm0, xmm2
movsd qword [esp + 0x50], xmm2
jbe 0x40efe7
nop dword [eax]
mulsd xmm2, xmm6
sub ecx, 8
comisd xmm0, xmm2
ja 0x40efd0
mov dword [esp + 0x30], ecx
movsd qword [esp + 0x50], xmm2
comisd xmm7, xmm2
jbe 0x40f005
nop dword [eax]
mulsd xmm2, xmm5
dec ecx
comisd xmm7, xmm2
ja 0x40eff0
mov dword [esp + 0x30], ecx
movsd qword [esp + 0x50], xmm2
cmp ecx, 0x15e
jle 0x40f051
mov al, byte [esp + 0x19]
cmp al, 0x2d
jne 0x40f01c
mov edi, str._Inf
jmp 0x40f02b
cmp al, 0x2b
mov edi, str.Inf
mov eax, 0x4e4604
cmovne edi, eax
cmp byte [edi], 0
mov esi, edi
mov dword [esp + 0x1c], edi
je 0x40f03c
inc esi
cmp byte [esi], 0
jne 0x40f036
sub esi, edi
and esi, 0x3fffffff
jmp 0x40f8e9
movsd xmm5, qword [0x4ec3d8]
lea esi, [esp + 0x90]
cmp dl, 2
je 0x40f07c
addsd xmm2, xmm1
comisd xmm2, xmm5
movsd qword [esp + 0x50], xmm2
jb 0x40f07c
mulsd xmm2, xmm4
inc ecx
mov dword [esp + 0x30], ecx
movsd qword [esp + 0x50], xmm2
cmp dl, 4
jne 0x40f0ac
cmp byte [esp + 0x29], 0
sete byte [esp + 0x2b]
cmp ecx, 0xfffffffc
jl 0x40f0a5
mov eax, dword [esp + 0x3c]
cmp ecx, eax
jg 0x40f0a5
sub eax, ecx
mov byte [esp + 0x1b], 2
mov dword [esp + 0x3c], eax
jmp 0x40f0bb
mov byte [esp + 0x1b], 3
jmp 0x40f0b9
mov al, byte [esp + 0x2a]
mov byte [esp + 0x2b], al
cmp dl, 3
jne 0x40f0bb
xor ecx, ecx
xor eax, eax
mov dword [esp + 0x24], ecx
test ecx, ecx
cmovg eax, ecx
mov ecx, dword [esp + 0x3c]
add eax, ecx
add eax, dword [esp + 0x2c]
cmp eax, 0x37
jle 0x40f0f5
add eax, 0xf
cdq
push edx
push eax
call fcn.0040dca0
add esp, 8
mov dword [esp + 0x4c], eax
mov esi, eax
test eax, eax
je 0x40f9cf
mov ecx, dword [esp + 0x3c]
movzx eax, byte [esp + 0x2a]
test ecx, ecx
mov dword [esp + 0x1c], esi
lea eax, [eax + eax*4]
lea edx, [eax*2 + 0x10]
setg al
or al, byte [esp + 0x2a]
or al, byte [esp + 0x29]
mov byte [esp + 0x28], al
mov al, byte [esp + 0x19]
mov dword [esp + 0x70], edx
test al, al
je 0x40f128
mov byte [esi], al
inc esi
mov eax, dword [esp + 0x24]
movsd xmm1, qword [esp + 0x50]
movsd xmm5, qword [0x4ec3d8]
test eax, eax
jns 0x40f144
mov byte [esi], 0x30
inc esi
jmp 0x40f177
test edx, edx
jg 0x40f14c
mov al, 0x30
jmp 0x40f163
cvttsd2si eax, xmm1
dec edx
movd xmm0, eax
add al, 0x30
cvtdq2pd xmm0, xmm0
subsd xmm1, xmm0
mulsd xmm1, xmm5
mov byte [esi], al
inc esi
mov eax, dword [esp + 0x24]
sub eax, 1
mov dword [esp + 0x24], eax
jns 0x40f144
mov dword [esp + 0x70], edx
cmp byte [esp + 0x28], 0
je 0x40f182
mov byte [esi], 0x2e
inc esi
inc eax
mov edi, eax
neg edi
mov dword [esp + 0x24], edi
mov edi, dword [esp + 0x1c]
test eax, eax
jns 0x40f26a
cmp dword [esp + 0x24], 8
jb 0x40f237
mov edi, dword [esp + 0x24]
and edi, reloc.OLEAUT32.dll_VariantInit
jns 0x40f1b3
dec edi
or edi, 0xfffffff8
inc edi
movaps xmm0, xmmword [0x4ec520]
neg edi
movaps xmm4, xmmword [0x4ec4f0]
xorps xmm2, xmm2
mov dword [esp + 0x24], edi
movaps xmm3, xmm2
mov edi, dword [esp + 0x1c]
movaps xmmword [esp + 0x50], xmm0
nop word [eax + eax]
movd xmm0, dword [esp + 0x50]
add eax, 8
movd dword [esi], xmm0
psubd xmm2, xmm4
movd xmm0, dword [esp + 0x50]
psubd xmm3, xmm4
movd dword [esi + 4], xmm0
add esi, 8
cmp eax, dword [esp + 0x24]
jl 0x40f1e0
paddd xmm2, xmm3
mov dword [esp + 0x24], eax
movaps xmm0, xmm2
psrldq xmm0, 8
paddd xmm2, xmm0
movaps xmm0, xmm2
psrldq xmm0, 4
paddd xmm2, xmm0
movd eax, xmm2
add ecx, eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0x3c], ecx
test eax, eax
jns 0x40f26a
neg eax
mov edi, esi
mov ecx, eax
mov dword [esp + 0x24], eax
mov edx, ecx
mov eax, 0x30303030
shr ecx, 2
rep stosd dword es:[edi], eax
mov ecx, edx
and ecx, 3
rep stosb byte es:[edi], al
mov ecx, dword [esp + 0x3c]
mov eax, edx
mov edi, dword [esp + 0x1c]
add esi, eax
mov edx, dword [esp + 0x70]
sub ecx, eax
test ecx, ecx
jle 0x40f297
nop
dec ecx
test edx, edx
jg 0x40f279
mov al, 0x30
jmp 0x40f290
cvttsd2si eax, xmm1
dec edx
movd xmm0, eax
add al, 0x30
cvtdq2pd xmm0, xmm0
subsd xmm1, xmm0
mulsd xmm1, xmm5
mov byte [esi], al
inc esi
test ecx, ecx
jg 0x40f270
cmp byte [esp + 0x2b], 0
je 0x40f2d8
cmp byte [esp + 0x28], 0
je 0x40f2d8
cmp byte [esi - 1], 0x30
lea eax, [esi - 1]
jne 0x40f2bd
nop
mov esi, eax
lea eax, [esi - 1]
mov byte [esi], 0
cmp byte [eax], 0x30
je 0x40f2b0
cmp byte [esi - 1], 0x2e
lea eax, [esi - 1]
jne 0x40f2d8
cmp byte [esp + 0x2a], 0
je 0x40f2d3
mov byte [esi], 0x30
inc esi
jmp 0x40f2d8
mov esi, eax
mov byte [esi], 0
cmp byte [esp + 0x1b], 3
jne 0x40f367
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x30]
movzx eax, byte [eax + 4]
mov al, byte [eax + str.0123456789ABCDEF0123456789abcdef]
mov byte [esi], al
test ecx, ecx
jns 0x40f307
neg ecx
mov byte [esi + 1], 0x2d
mov dword [esp + 0x30], ecx
jmp 0x40f30b
mov byte [esi + 1], 0x2b
add esi, 2
cmp ecx, 0x64
jl 0x40f338
mov eax, 0x51eb851f
imul ecx
sar edx, 5
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
mov al, cl
add al, 0x30
mov byte [esi], al
inc esi
imul eax, ecx, 0xffffff9c
mov ecx, dword [esp + 0x30]
add ecx, eax
mov dword [esp + 0x30], ecx
mov eax, 0x66666667
imul ecx
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
mov al, cl
add al, 0x30
mov byte [esi], al
mov al, cl
shl cl, 2
add al, cl
mov ecx, dword [esp + 0x30]
add al, al
sub cl, al
add cl, 0x30
mov byte [esi + 1], cl
add esi, 2
mov al, byte [esp + 0x3b]
mov byte [esi], 0
sub esi, edi
test al, al
je 0x40f8e9
mov al, byte [esp + 0x18]
test al, al
jne 0x40f8ed
mov eax, dword [esp + 0x2c]
cmp esi, eax
jge 0x40f8e9
mov edx, eax
sub edx, esi
mov esi, eax
mov ecx, esi
cmp esi, edx
jl 0x40f3af
mov esi, edi
sub esi, edx
mov al, byte [esi + ecx]
mov byte [ecx + edi], al
dec ecx
cmp ecx, edx
jge 0x40f3a0
mov esi, dword [esp + 0x2c]
mov cl, byte [esp + 0x19]
xor eax, eax
test cl, cl
setne al
test edx, edx
je 0x40f8e9
add edi, eax
mov ecx, edx
shr ecx, 2
mov eax, 0x30303030
rep stosd dword es:[edi], eax
mov ecx, edx
and ecx, 3
rep stosb byte es:[edi], al
jmp 0x40f8e9
cmp byte [esp + 0x1a], 0
jne 0x40f8df
mov ecx, dword [esp + 0x20]
mov eax, dword [edi + 0xc]
add ecx, 4
mov dword [esp + 0x20], ecx
mov ecx, dword [ecx - 4]
mov dword [ecx], eax
jmp 0x40f8df
lea eax, [esp + 0x90]
mov byte [esp + 0x90], 0x25
mov dword [esp + 0x1c], eax
mov esi, 1
jmp 0x40f8e9
cmp byte [esp + 0x1a], 0
je 0x40f47e
mov eax, dword [esp + 0x40]
mov edx, dword [eax + 4]
cmp dword [eax], edx
jle 0x40f474
mov eax, dword [eax + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov edx, dword [esp + 0x40]
mov dword [edx + 4], eax
test ecx, ecx
je 0x40f474
movzx edx, word [ecx + 8]
mov eax, edx
and eax, 0x202
cmp eax, 0x202
jne 0x40f45f
cmp byte [ecx + 0xa], 1
jne 0x40f45f
mov eax, dword [ecx + 0x10]
jmp 0x40f46b
test dl, 1
jne 0x40f474
mov dl, 1
call fcn.0042a360
test eax, eax
je 0x40f474
movsx eax, byte [eax]
jmp 0x40f48c
mov dword [esp + 0x24], 0
jmp 0x40f490
mov ecx, dword [esp + 0x20]
add ecx, 4
mov dword [esp + 0x20], ecx
mov eax, dword [ecx - 4]
mov dword [esp + 0x24], eax
cmp esi, 1
jle 0x40f521
mov ecx, dword [esp + 0x2c]
sub ecx, esi
mov edx, ecx
inc ecx
mov dword [esp + 0x2c], ecx
cmp ecx, 1
jle 0x40f4ea
cmp byte [esp + 0x18], 0
jne 0x40f4ea
mov eax, dword [edi + 0xc]
add eax, edx
cmp eax, dword [edi + 0x10]
jl 0x40f4c5
mov ecx, edi
call fcn.0040fac0
mov edx, eax
test edx, edx
jle 0x40f4e2
nop dword [eax]
mov ecx, dword [edi + 0xc]
dec edx
mov eax, dword [edi + 8]
mov byte [ecx + eax], 0x20
inc dword [edi + 0xc]
test edx, edx
jg 0x40f4d0
mov dword [esp + 0x2c], 0
mov eax, dword [edi + 0xc]
lea edx, [esi - 1]
add eax, edx
cmp eax, dword [edi + 0x10]
jl 0x40f500
mov ecx, edi
call fcn.0040fac0
mov edx, eax
test edx, edx
jle 0x40f521
mov ecx, dword [edi + 0xc]
dec edx
mov eax, dword [edi + 8]
mov dword [esp + 0x50], edx
mov edx, dword [esp + 0x24]
mov byte [ecx + eax], dl
inc dword [edi + 0xc]
mov edx, dword [esp + 0x50]
test edx, edx
jg 0x40f504
mov eax, dword [esp + 0x24]
mov esi, 1
mov byte [esp + 0x90], al
lea eax, [esp + 0x90]
mov dword [esp + 0x1c], eax
jmp 0x40f8e9
mov al, byte [esp + 0x1a]
test al, al
je 0x40f5b9
mov edi, dword [esp + 0x40]
mov edx, dword [edi + 4]
cmp dword [edi], edx
jle 0x40f5cf
mov eax, dword [edi + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov dword [edi + 4], eax
test ecx, ecx
jne 0x40f570
mov dl, byte [esp + 0x1b]
xor edi, edi
mov al, byte [esp + 0x1a]
jmp 0x40f5c7
movzx edx, word [ecx + 8]
mov eax, edx
and eax, 0x202
cmp eax, 0x202
jne 0x40f595
cmp byte [ecx + 0xa], 1
jne 0x40f595
mov edi, dword [ecx + 0x10]
mov dl, byte [esp + 0x1b]
mov al, byte [esp + 0x1a]
jmp 0x40f5c7
test dl, 1
je 0x40f5a6
mov dl, byte [esp + 0x1b]
xor edi, edi
mov al, byte [esp + 0x1a]
jmp 0x40f5c7
mov dl, 1
call fcn.0042a360
mov dl, byte [esp + 0x1b]
mov edi, eax
mov al, byte [esp + 0x1a]
jmp 0x40f5c7
mov ecx, dword [esp + 0x20]
add ecx, 4
mov dword [esp + 0x20], ecx
mov edi, dword [ecx - 4]
mov dword [esp + 0x1c], edi
test edi, edi
jne 0x40f5da
mov edi, 0x4d29ba
mov dword [esp + 0x1c], edi
jmp 0x40f5ec
cmp dl, 7
jne 0x40f5ec
mov ecx, dword [esp + 0x4c]
test al, al
cmove ecx, edi
mov dword [esp + 0x4c], ecx
test esi, esi
js 0x40f614
mov eax, dword [esp + 0x3c]
xor esi, esi
test eax, eax
jle 0x40f8e9
nop
cmp byte [esi + edi], 0
je 0x40f8e9
inc esi
cmp esi, eax
jl 0x40f600
jmp 0x40f8e9
mov esi, edi
test edi, edi
je 0x40f8e7
cmp byte [edi], 0
je 0x40f03c
inc esi
cmp byte [esi], 0
jne 0x40f627
sub esi, edi
and esi, 0x3fffffff
jmp 0x40f8e9
cmp dl, 0xf
mov eax, 0x27
mov ecx, 0x22
cmove eax, ecx
cmp byte [esp + 0x1a], 0
mov dword [esp + 0x24], eax
je 0x40f6b1
mov eax, dword [esp + 0x40]
mov edx, dword [eax + 4]
cmp dword [eax], edx
jg 0x40f66a
mov dword [esp + 0x70], 0
jmp 0x40f6cb
mov eax, dword [eax + 8]
mov ecx, dword [eax + edx*4]
lea eax, [edx + 1]
mov edx, dword [esp + 0x40]
mov dword [edx + 4], eax
test ecx, ecx
jne 0x40f682
xor eax, eax
jmp 0x40f6bf
movzx edx, word [ecx + 8]
mov eax, edx
and eax, 0x202
cmp eax, 0x202
jne 0x40f69f
cmp byte [ecx + 0xa], 1
jne 0x40f69f
mov eax, dword [ecx + 0x10]
jmp 0x40f6bf
test dl, 1
je 0x40f6a8
xor eax, eax
jmp 0x40f6bf
mov dl, 1
call fcn.0042a360
jmp 0x40f6bf
mov ecx, dword [esp + 0x20]
add ecx, 4
mov dword [esp + 0x20], ecx
mov eax, dword [ecx - 4]
mov dword [esp + 0x30], eax
mov dword [esp + 0x70], eax
test eax, eax
jne 0x40f6e1
cmp byte [esp + 0x1b], 0xb
mov eax, str.NULL
mov ecx, str._NULL_
cmovne eax, ecx
mov dword [esp + 0x30], eax
xor edx, edx
xor ecx, ecx
mov dword [esp + 0x80], edx
test esi, esi
je 0x40f722
mov edi, ecx
mov cl, byte [edx + eax]
test cl, cl
je 0x40f70f
inc edx
lea eax, [edi + 1]
cmp cl, byte [esp + 0x24]
cmovne eax, edi
mov edi, eax
mov eax, dword [esp + 0x30]
sub esi, 1
jne 0x40f6f2
mov dword [esp + 0x48], edi
mov edi, dword [esp + 0x68]
mov ecx, dword [esp + 0x48]
mov dword [esp + 0x80], edx
cmp dword [esp + 0x70], 0
je 0x40f737
cmp byte [esp + 0x1b], 0xb
jne 0x40f737
mov esi, 1
jmp 0x40f739
xor esi, esi
lea eax, [esi*2 + 1]
mov dword [esp + 0x48], esi
add eax, edx
add eax, ecx
cmp eax, 0x46
jle 0x40f7d9
cdq
mov esi, eax
mov ecx, esi
or ecx, edx
je 0x40f7b4
test edx, edx
ja 0x40f7b4
jb 0x40f768
cmp esi, 0x7fffff00
jae 0x40f7b4
cmp dword [0x4fcd40], 0
je 0x40f7a8
mov eax, dword [0x5010e8]
test eax, eax
je 0x40f784
push eax
call dword [0x4fcd94]
add esp, 4
lea edx, [esp + 0x7c]
mov ecx, esi
call fcn.0040dbb0
mov eax, dword [0x5010e8]
test eax, eax
je 0x40f7a2
push eax
call dword [0x4fcd9c]
add esp, 4
mov eax, dword [esp + 0x7c]
jmp 0x40f7ba
push esi
call dword [0x4fcd64]
add esp, 4
jmp 0x40f7b6
xor eax, eax
mov dword [esp + 0x7c], eax
mov dword [esp + 0x4c], eax
mov dword [esp + 0x1c], eax
test eax, eax
je 0x40f9cf
mov edx, dword [esp + 0x80]
mov edi, eax
mov esi, dword [esp + 0x48]
jmp 0x40f7e4
lea edi, [esp + 0x90]
mov dword [esp + 0x1c], edi
test esi, esi
je 0x40f7ee
mov eax, dword [esp + 0x24]
mov byte [edi], al
xor ecx, ecx
test edx, edx
jle 0x40f80e
mov eax, dword [esp + 0x30]
mov al, byte [ecx + eax]
mov byte [esi + edi], al
inc esi
cmp al, byte [esp + 0x24]
jne 0x40f809
mov byte [esi + edi], al
inc esi
inc ecx
cmp ecx, edx
jl 0x40f7f4
cmp dword [esp + 0x48], 0
je 0x40f81d
mov eax, dword [esp + 0x24]
mov byte [esi + edi], al
inc esi
mov byte [esi + edi], 0
jmp 0x40f8e9
mov ecx, dword [esp + 0x20]
add ecx, 4
mov dword [esp + 0x20], ecx
mov eax, dword [ecx - 4]
test eax, eax
je 0x40f8df
mov ecx, dword [eax + 4]
test ecx, ecx
je 0x40f8df
mov edx, dword [eax]
mov eax, dword [edi + 0xc]
add eax, ecx
push ecx
cmp eax, dword [edi + 0x10]
jl 0x40f863
mov ecx, edi
call fcn.0040fbb0
add esp, 4
jmp 0x40f8df
mov eax, dword [edi + 8]
add dword [edi + 0xc], ecx
sub eax, ecx
add eax, dword [edi + 0xc]
push edx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
jmp 0x40f8df
mov ecx, dword [esp + 0x20]
mov edx, dword [ecx]
add ecx, 8
mov dword [esp + 0x50], edx
mov dword [esp + 0x20], ecx
mov eax, dword [ecx - 4]
lea esi, [eax + eax*4]
add esi, esi
mov edx, dword [edx + esi*8 + 0xc]
test edx, edx
je 0x40f8d0
mov ecx, edi
call fcn.0040fc30
mov eax, dword [edi + 0xc]
inc eax
cmp eax, dword [edi + 0x10]
jl 0x40f8be
push 1
mov edx, 0x4e4618
mov ecx, edi
call fcn.0040fbb0
add esp, 4
jmp 0x40f8d0
inc dword [edi + 0xc]
mov edx, dword [edi + 0xc]
mov ecx, dword [edi + 8]
mov al, byte [0x4e4618]
mov byte [ecx + edx - 1], al
mov edx, dword [esp + 0x50]
mov ecx, edi
mov edx, dword [edx + esi*8 + 0x10]
call fcn.0040fc30
mov dword [esp + 0x2c], 0
xor esi, esi
mov al, byte [esp + 0x18]
mov edi, dword [esp + 0x2c]
sub edi, esi
mov dword [esp + 0x2c], edi
test edi, edi
jle 0x40f934
test al, al
jne 0x40f934
mov edx, edi
mov edi, dword [esp + 0x68]
mov ecx, edx
mov eax, dword [edi + 0xc]
add eax, ecx
cmp eax, dword [edi + 0x10]
jl 0x40f920
mov ecx, edi
call fcn.0040fac0
mov edx, eax
test edx, edx
jle 0x40f938
nop
mov ecx, dword [edi + 0xc]
dec edx
mov eax, dword [edi + 8]
mov byte [ecx + eax], 0x20
inc dword [edi + 0xc]
test edx, edx
jg 0x40f920
jmp 0x40f938
mov edi, dword [esp + 0x68]
mov eax, dword [edi + 0xc]
add eax, esi
push esi
cmp eax, dword [edi + 0x10]
jl 0x40f953
mov edx, dword [esp + 0x20]
mov ecx, edi
call fcn.0040fbb0
add esp, 4
jmp 0x40f96b
mov eax, dword [edi + 8]
add dword [edi + 0xc], esi
sub eax, esi
push dword [esp + 0x20]
add eax, dword [edi + 0xc]
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov edx, dword [esp + 0x2c]
test edx, edx
jle 0x40f9a3
cmp byte [esp + 0x18], 0
je 0x40f9a3
mov eax, dword [edi + 0xc]
add eax, edx
cmp eax, dword [edi + 0x10]
jl 0x40f991
mov ecx, edi
call fcn.0040fac0
mov edx, eax
test edx, edx
jle 0x40f9a3
mov ecx, dword [edi + 0xc]
dec edx
mov eax, dword [edi + 8]
mov byte [ecx + eax], 0x20
inc dword [edi + 0xc]
test edx, edx
jg 0x40f991
mov ecx, dword [esp + 0x4c]
test ecx, ecx
je 0x40f9ba
push ecx
call fcn.0040e000
add esp, 4
xor ecx, ecx
mov dword [esp + 0x4c], ecx
mov edx, dword [esp + 0x44]
inc edx
movsx eax, byte [edx]
test eax, eax
je case.default.0x40ea05
mov esi, dword [esp + 0x20]
jmp 0x40e740
mov byte [edi + 0x19], 1
mov dword [edi + 0x10], 0
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xd0]
xor ecx, esp
call fcn.004bde8e
mov esp, ebp
pop ebp
ret
mov eax, dword [edi + 0xc]
inc eax
cmp eax, dword [edi + 0x10]
jl 0x40fa1e
push 1
mov edx, 0x4e45ec
mov ecx, edi
call fcn.0040fbb0
add esp, 4
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xd0]
xor ecx, esp
call fcn.004bde8e
mov esp, ebp
pop ebp
ret
inc dword [edi + 0xc]
mov edx, dword [edi + 0xc]
mov ecx, dword [edi + 8]
mov al, byte [0x4e45ec]
mov byte [ecx + edx - 1], al
mov ecx, dword [esp + 0xdc]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.004bde8e
mov esp, ebp
pop ebp
ret