Function at 0x10146890
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x40
mov eax, dword [0x102a0600]
xor eax, esp
mov dword [esp + 0x3c], eax
push esi
mov esi, dword [esp + 0x48]
push edi
mov edi, ecx
xor ecx, ecx
mov dword [esp + 0x28], edi
mov dword [esp + 0x30], ecx
test esi, esi
je 0x10147068
nop dword [eax + eax]
mov eax, esi
mov edx, 0x80
sub edx, dword [edi + 0x10]
sub eax, ecx
cmp edx, eax
cmova edx, eax
mov eax, dword [edi + 0x14]
add eax, 8
mov dword [esp + 0x40], edx
add eax, dword [edi + 0x10]
lea esi, [edi + eax*4]
lea eax, [edx*4]
mov dword [esp + 0x3c], eax
test edx, edx
je 0x10146921
push eax
mov eax, dword [esp + 0x34]
add eax, 0x1c10
push esi
lea eax, [edi + eax*4]
push eax
call fcn.10086560
mov eax, dword [esp + 0x5c]
mov ecx, dword [esp + 0x3c]
push dword [esp + 0x48]
lea eax, [eax + ecx*4]
push eax
push esi
call fcn.10086560
mov edx, dword [esp + 0x58]
add esp, 0x18
add dword [edi + 0x10], edx
add dword [esp + 0x30], edx
cmp dword [edi + 0x10], 0x80
jb 0x10147064
mov edx, dword [edi + 0x14]
mov eax, 0x400
sub edx, 0xffffff80
mov dword [edi + 0x10], 0
and edx, 0x3ff
xor ecx, ecx
sub eax, edx
mov dword [esp + 0x40], edx
mov dword [edi + 0x14], edx
cmp eax, 4
jb 0x10146a04
add edx, 9
lea eax, [edi + 0x3034]
mov esi, 0x3fc
lea edx, [edi + edx*4]
mov edi, dword [esp + 0x40]
sub esi, edi
shr esi, 2
inc esi
lea edi, [edi + esi*4]
mov dword [esp + 0x40], edi
mov edi, 0x102ac760
lea eax, [eax + 0x20]
lea edx, [edx + 0x10]
movss xmm0, dword [edi + ecx*4]
mov edi, 0x102ac768
mulss xmm0, dword [edx - 0x14]
movss dword [eax - 0x2c], xmm0
mov dword [eax - 0x28], 0
movss xmm0, dword [ecx*4 + 0x102ac764]
mulss xmm0, dword [edx - 0x10]
movss dword [eax - 0x24], xmm0
mov dword [eax - 0x20], 0
movss xmm0, dword [edi + ecx*4]
mov edi, 0x102ac76c
mulss xmm0, dword [edx - 0xc]
movss dword [eax - 0x1c], xmm0
mov dword [eax - 0x18], 0
movss xmm0, dword [edi + ecx*4]
add ecx, 4
mulss xmm0, dword [edx - 8]
mov edi, dword [esp + 0x28]
movss dword [eax - 0x14], xmm0
mov dword [eax - 0x10], 0
sub esi, 1
jne 0x10146983
mov edx, dword [esp + 0x40]
cmp edx, 0x400
jae 0x10146a62
lea esi, [ecx*4 + 0x102ac760]
add ecx, 0x605
lea eax, [edx + 8]
lea eax, [edi + eax*4]
mov dword [esp + 0x3c], eax
lea eax, [edi + ecx*8]
mov ecx, 0x400
sub ecx, edx
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x3c]
mov edx, dword [esp + 0x40]
nop dword [eax]
movss xmm0, dword [esi]
lea eax, [eax + 8]
mulss xmm0, dword [ecx]
lea ecx, [ecx + 4]
mov dword [eax - 4], 0
lea esi, [esi + 4]
movss dword [eax - 8], xmm0
sub edx, 1
jne 0x10146a40
mov eax, dword [edi + 0x14]
mov ecx, 0x400
sub ecx, eax
xor esi, esi
mov dword [esp + 0x3c], ecx
test eax, eax
je 0x10146ab4
mov eax, dword [esp + 0x3c]
lea ecx, [ecx*4 + 0x102ac760]
add eax, 0x605
lea edx, [edi + 0x20]
lea eax, [edi + eax*8]
nop dword [eax]
movss xmm0, dword [ecx]
lea edx, [edx + 4]
mulss xmm0, dword [edx - 4]
lea eax, [eax + 8]
mov dword [eax - 4], 0
lea ecx, [ecx + 4]
inc esi
movss dword [eax - 8], xmm0
cmp esi, dword [edi + 0x14]
jb 0x10146a90
lea ecx, [edi + 0x3028]
push ecx
lea eax, [ecx + 0x2000]
mov dword [esp], 0xbf800000
push eax
push ecx
mov dword [esp + 0x30], ecx
call fcn.10156920
add esp, 0xc
lea eax, [edi + 0x1020]
mov edi, dword [esp + 0x24]
xor esi, esi
mov dword [esp + 0x3c], esi
mov dword [esp + 0x40], eax
nop word [eax + eax]
movss xmm0, dword [edi + 4]
movss xmm1, dword [edi]
movss dword [esp + 0x2c], xmm0
cvtps2pd xmm0, xmm0
movss dword [esp + 0x38], xmm1
movsd qword [esp + 0x20], xmm0
fld qword [esp + 0x20]
cvtps2pd xmm0, xmm1
movsd qword [esp + 0x20], xmm0
fld qword [esp + 0x20]
call fcn.1015b120
mov ecx, dword [esp + 0x40]
mov eax, esi
and eax, 7
xorps xmm0, xmm0
fstp dword [esp + 0x24]
movss xmm1, dword [esp + 0x24]
sub esp, 8
fld dword [esp + 0x34]
movaps xmm2, xmm1
subss xmm2, dword [ecx]
cvtsi2sd xmm0, eax
shr eax, 0x1f
movss dword [ecx], xmm1
addsd xmm0, qword [eax*8 + 0x1016a520]
fstp dword [esp + 4]
fld dword [esp + 0x40]
fstp dword [esp]
cvtpd2ps xmm0, xmm0
mulss xmm0, dword [0x102215ec]
subss xmm2, xmm0
mulss xmm2, dword [0x102215e8]
movss dword [esp + 0x2c], xmm2
cvttss2si esi, xmm2
call fcn.1015bbc7
mov eax, esi
add esp, 8
fstp dword [edi + 0x2000]
and eax, 0x80000001
jns 0x10146ba5
dec eax
or eax, 0xfffffffe
inc eax
movss xmm1, dword [esp + 0x24]
add eax, esi
mov esi, dword [esp + 0x3c]
add dword [esp + 0x40], 4
movd xmm0, eax
mov eax, esi
cvtdq2ps xmm0, xmm0
shr eax, 0x1f
subss xmm1, xmm0
movd xmm0, esi
cvtdq2pd xmm0, xmm0
inc esi
mov dword [esp + 0x3c], esi
mulss xmm1, dword [0x101ec128]
addsd xmm0, qword [eax*8 + 0x1016a520]
cvtpd2ps xmm0, xmm0
addss xmm1, xmm0
movss dword [edi + 0x2004], xmm1
add edi, 8
cmp esi, 0x201
jb 0x10146af0
mov edi, dword [esp + 0x28]
xorps xmm0, xmm0
movq qword [esp + 0x34], xmm0
lea eax, [edi + 0x7038]
lea esi, [edi + 0x6030]
cmp esi, eax
je 0x10146c3a
mov ecx, dword [esp + 0x38]
mov edx, dword [esp + 0x34]
mov dword [esi], edx
mov dword [esi + 4], ecx
add esi, 8
cmp esi, eax
jne 0x10146c28
lea esi, [edi + 0x6030]
xor edx, edx
lea ecx, [edi + 0x18]
mov eax, 0x2007fff
mov dword [esp + 0x2c], ecx
div dword [ecx]
mov ecx, 0x201
inc eax
cmp eax, ecx
cmovb ecx, eax
xor edx, edx
mov dword [esp + 0x38], ecx
test ecx, ecx
je 0x10146cc6
mov esi, dword [esp + 0x38]
lea ecx, [edi + 0x5028]
nop dword [eax]
mov eax, dword [esp + 0x2c]
movss xmm0, dword [ecx]
mov eax, dword [eax]
imul eax, edx
add eax, 0x8000
shr eax, 0x10
comiss xmm0, dword [edi + eax*8 + 0x6030]
jbe 0x10146ca2
movss xmm0, dword [ecx + 4]
mulss xmm0, dword [edi + 0x1c]
movss dword [edi + eax*8 + 0x6034], xmm0
movss xmm0, dword [ecx]
inc edx
addss xmm0, dword [edi + eax*8 + 0x6030]
add ecx, 8
movss dword [edi + eax*8 + 0x6030], xmm0
cmp edx, esi
jb 0x10146c70
lea esi, [edi + 0x6030]
lea edx, [edi + 0x1824]
mov edi, 0x201
mov dword [esp + 0x40], edx
nop word [eax + eax]
movss xmm1, dword [esi + 4]
mulss xmm1, dword [0x102215ec]
addss xmm1, dword [edx]
mulss xmm1, dword [0x102215e8]
cvttss2si ecx, xmm1
mov eax, ecx
and eax, 0x80000001
jns 0x10146d0b
dec eax
or eax, 0xfffffffe
inc eax
add eax, ecx
movd xmm0, eax
cvtdq2ps xmm0, xmm0
subss xmm1, xmm0
mulss xmm1, dword [0x1016e08c]
movss dword [edx], xmm1
movss xmm0, dword [esi]
movss dword [esp + 0x38], xmm0
mov eax, dword [esp + 0x38]
and eax, 0x7fffffff
movss dword [esp + 0x2c], xmm1
cmp eax, 0x7f800000
ja 0x10146da9
movss dword [esp + 0x38], xmm0
mov eax, dword [esp + 0x38]
and eax, 0x7fffffff
cmp eax, 0x7f800000
je 0x10146da9
xorps xmm2, xmm2
ucomiss xmm0, xmm2
lahf
test ah, 0x44
jnp 0x10146da9
cvtps2pd xmm0, xmm1
call fcn.10096b80
movss xmm1, dword [esp + 0x2c]
cvtsd2ss xmm0, xmm0
mulss xmm0, dword [esi]
movss dword [esp + 0x38], xmm0
movss dword [esp + 0x18], xmm0
cvtps2pd xmm0, xmm1
call fcn.10096d40
xorps xmm1, xmm1
cvtsd2ss xmm1, xmm0
movss xmm0, dword [esp + 0x38]
mulss xmm1, dword [esi]
movss dword [esp + 0x1c], xmm1
jmp 0x10146e21
push ecx
movss dword [esp], xmm0
call fcn.10096028
add esp, 4
push dword [esp + 0x40]
test eax, eax
je 0x10146e07
movss xmm0, dword [esi]
lea eax, [esp + 0x3c]
xorps xmm0, xmmword [0x1016a3a0]
push eax
lea eax, [esp + 0x10]
movss dword [esp + 0x40], xmm0
push eax
call fcn.10146490
movss xmm2, dword [0x1016a3a0]
add esp, 0xc
movss xmm0, dword [eax]
movss xmm1, dword [eax + 4]
xorps xmm0, xmm2
xorps xmm1, xmm2
movss dword [esp + 0x18], xmm0
movss dword [esp + 0x1c], xmm1
jmp 0x10146e29
lea eax, [esp + 0x1c]
push esi
push eax
call fcn.10146490
movss xmm1, dword [esp + 0x28]
add esp, 0xc
movss xmm0, dword [esp + 0x18]
movss xmm2, dword [0x1016a3a0]
mov edx, dword [esp + 0x40]
movss dword [esi - 0x3008], xmm0
add edx, 4
movss dword [esi - 0x3004], xmm1
add esi, 8
mov dword [esp + 0x40], edx
sub edi, 1
jne 0x10146ce0
mov edi, dword [esp + 0x28]
mov edx, 0x49
lea eax, [edi + 0x403c]
lea ecx, [edi + 0x401c]
nop word [eax + eax]
movss xmm1, dword [ecx + 8]
lea eax, [eax + 0x38]
movss xmm0, dword [ecx + 4]
xorps xmm1, xmm2
movss dword [eax - 0x40], xmm1
lea ecx, [ecx - 0x38]
movss dword [eax - 0x44], xmm0
movss xmm1, dword [ecx + 0x38]
movss xmm0, dword [ecx + 0x34]
xorps xmm1, xmm2
movss dword [eax - 0x38], xmm1
movss dword [eax - 0x3c], xmm0
movss xmm1, dword [ecx + 0x30]
movss xmm0, dword [ecx + 0x2c]
xorps xmm1, xmm2
movss dword [eax - 0x30], xmm1
movss dword [eax - 0x34], xmm0
movss xmm1, dword [ecx + 0x28]
movss xmm0, dword [ecx + 0x24]
xorps xmm1, xmm2
movss dword [eax - 0x28], xmm1
movss dword [eax - 0x2c], xmm0
movss xmm1, dword [ecx + 0x20]
movss xmm0, dword [ecx + 0x1c]
xorps xmm1, xmm2
movss dword [eax - 0x20], xmm1
movss dword [eax - 0x24], xmm0
movss xmm1, dword [ecx + 0x18]
movss xmm0, dword [ecx + 0x14]
xorps xmm1, xmm2
movss dword [eax - 0x18], xmm1
movss dword [eax - 0x1c], xmm0
movss xmm1, dword [ecx + 0x10]
movss xmm0, dword [ecx + 0xc]
xorps xmm1, xmm2
movss dword [eax - 0x14], xmm0
movss dword [eax - 0x10], xmm1
sub edx, 1
jne 0x10146e70
lea ecx, [edi + 0x3028]
push ecx
lea eax, [ecx + 0x2000]
mov dword [esp], 0x3f800000
push eax
push ecx
call fcn.10156920
mov eax, dword [edi + 0x14]
add esp, 0xc
movss xmm1, dword [0x102215e4]
cmp eax, 0x400
jae 0x10146f92
add eax, 0x80a
lea edx, [edi + 0x3028]
mov esi, 0x400
mov ecx, 0x102ac760
sub esi, dword [edi + 0x14]
lea eax, [edi + eax*4]
nop dword [eax + eax]
movss xmm0, dword [edx]
add edx, 8
mulss xmm0, dword [ecx]
add ecx, 4
mulss xmm0, xmm1
addss xmm0, dword [eax]
movss dword [eax], xmm0
add eax, 4
sub esi, 1
jne 0x10146f70
mov ecx, dword [edi + 0x14]
mov edx, 0x400
xor esi, esi
sub edx, ecx
test ecx, ecx
je 0x10146fea
lea ecx, [edx*4 + 0x102ac760]
add edx, 0x605
lea eax, [edi + 0x2028]
lea edx, [edi + edx*8]
nop dword [eax + eax]
movss xmm0, dword [edx]
inc esi
mulss xmm0, dword [ecx]
add edx, 8
add ecx, 4
mulss xmm0, xmm1
addss xmm0, dword [eax]
movss dword [eax], xmm0
add eax, 4
mov dword [esp + 0x38], eax
cmp esi, dword [edi + 0x14]
jb 0x10146fc0
mov ecx, dword [edi + 0x14]
lea eax, [edi + 0x2028]
lea eax, [eax + ecx*4]
push 0x200
push eax
lea eax, [edi + 0x20]
lea eax, [eax + ecx*4]
push eax
call fcn.10086560
mov eax, dword [edi + 0x14]
lea ecx, [esp + 0x1c]
add eax, 0x80a
mov dword [esp + 0x20], 0
add esp, 0xc
mov dword [esp + 0x10], 0
lea edx, [edi + eax*4]
lea eax, [esp + 0x14]
mov eax, dword [eax]
cmp eax, dword [ecx]
jne 0x10147043
push 0x200
push 0
push edx
call fcn.10086ae0
add esp, 0xc
jmp 0x10147052
mov ecx, 0x80
xor eax, eax
mov edi, edx
rep stosd dword es:[edi], eax
mov edi, dword [esp + 0x28]
mov ecx, dword [esp + 0x30]
mov esi, dword [esp + 0x4c]
cmp ecx, esi
jb 0x101468c0
jmp 0x10147068
mov esi, dword [esp + 0x4c]
push 0
mov eax, 0x200
lea edx, [edi + 0x7040]
cmp esi, eax
lea ecx, [edx + esi*4]
cmova eax, esi
push eax
lea eax, [edi + 0x8080]
push eax
lea eax, [edi + 0x8040]
push eax
push dword [esp + 0x6c]
push dword [esp + 0x6c]
push ecx
push edx
call dword [0x102a13b8]
mov ecx, dword [esp + 0x64]
add esp, 0x20
pop edi
pop esi
xor ecx, esp
call fcn.10084465
add esp, 0x40
ret 0x14