Function at 0x10016f50
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x2028
call fcn.10178bb0
mov eax, dword [0x101e6040]
xor eax, esp
mov dword [esp + 0x2024], eax
mov edx, dword [esp + 0x2030]
push ebx
mov ebx, dword [esp + 0x2030]
push ebp
push esi
push edi
mov eax, dword [ebx + 0x10]
mov edi, ecx
mov ecx, dword [esp + 0x2044]
xor esi, esi
mov dword [esp + 0x28], eax
lea eax, [esp + 0x28]
mov dword [esp + 0x18], ecx
push dword [edi + 0x18]
mov ecx, dword [ebx + 0x14]
lea ebp, [edi + 0x3c]
push dword [edi + 8]
mov dword [esp + 0x34], ecx
mov ecx, ebp
push eax
push edx
push ebx
mov dword [esp + 0x24], ebx
mov dword [esp + 0x34], edx
call fcn.1005a720
test eax, eax
jne 0x10017016
mov esi, dword [edi + 8]
mov edx, dword [edi + 0x710]
mov dword [edi + 0x74c], edx
test esi, esi
je 0x10016fe6
cmp edx, 0xa0000059
je 0x10016fe6
mov ecx, dword [esi]
lea eax, [edi + 0x754]
push eax
push 0
push ebx
push edx
push esi
call dword [ecx + 0x14]
cmp byte [edi + 0x734], 0
je 0x10016ff9
mov dword [edi + 0x748], 1
xor eax, eax
mov ecx, dword [esp + 0x2034]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.10151433
add esp, 0x2028
ret 0xc
mov edx, dword [esp + 0x2c]
test edx, edx
jl 0x10017136
mov ecx, dword [esp + 0x28]
jg 0x10017044
test ecx, ecx
je 0x10017136
test edx, edx
jg 0x10017044
jl 0x1001703e
cmp ecx, 0x2000
jae 0x10017044
mov ebx, ecx
mov ebp, edx
jmp 0x1001704b
mov ebx, 0x2000
xor ebp, ebp
mov ecx, 0x754
mov eax, edi
add eax, ecx
mov dword [esp + 0x24], eax
mov eax, ebx
cdq
mov ecx, edx
mov dword [esp + 0x14], eax
mov edx, dword [esp + 0x20]
push ecx
push dword [esp + 0x18]
mov dword [esp + 0x24], ecx
lea ecx, [esp + 0x38]
mov eax, dword [edx]
push ecx
mov ecx, edx
call dword [eax + 0x18]
test eax, eax
je 0x10017234
push dword [esp + 0x1c]
lea eax, [esp + 0x34]
push dword [esp + 0x18]
lea ecx, [edi + 0x3c]
push eax
call fcn.1005b0a0
mov ecx, ebx
lea edx, [esp + 0x30]
test ecx, ecx
je 0x100170bb
movzx eax, byte [edx]
lea edx, [edx + 1]
xor eax, esi
shr esi, 8
movzx eax, al
xor esi, dword [edi + eax*4 + 0x82c]
sub ecx, 1
jne 0x100170a1
mov ecx, dword [esp + 0x18]
lea edx, [esp + 0x30]
push dword [esp + 0x1c]
push dword [esp + 0x18]
mov eax, dword [ecx]
push edx
call dword [eax + 0x18]
test eax, eax
je 0x1001719b
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x2c]
sub ecx, ebx
mov dword [esp + 0x28], ecx
sbb edx, ebp
cmp byte [edi + 0x734], 0
mov dword [esp + 0x2c], edx
jne 0x1001710f
mov ecx, dword [esp + 0x18]
push ecx
push ebp
push ebx
push ebp
push ebx
lea ecx, [edi + 4]
call fcn.10057270
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x28]
mov eax, dword [edi + 0x754]
or eax, dword [edi + 0x750]
jne 0x1001712f
test edx, edx
jg 0x10017044
jl 0x1001712f
test ecx, ecx
jne 0x10017030
mov ebx, dword [esp + 0x10]
lea ebp, [edi + 0x3c]
cmp dword [edi + 0x74c], 0
jne 0x10016ff9
mov ecx, ebp
call fcn.1005b2b0
test eax, eax
jne 0x10017277
mov esi, dword [edi + 8]
mov edx, dword [edi + 0x710]
mov dword [edi + 0x74c], edx
test esi, esi
je 0x1001717e
cmp edx, 0xa0000059
je 0x1001717e
mov ecx, dword [esi]
lea eax, [edi + 0x754]
push eax
push 0
push ebx
push edx
push esi
call dword [ecx + 0x14]
xor eax, eax
cmp byte [edi + 0x734], al
je 0x10016ffb
mov dword [edi + 0x748], 1
jmp 0x10016ffb
mov ecx, dword [esp + 0x18]
mov eax, dword [ecx]
call dword [eax + 0x44]
mov edx, dword [edi + 8]
mov ebx, dword [esp + 0x10]
cmp eax, 0x70
jne 0x100171f2
mov dword [edi + 0x74c], 0xa0000054
test edx, edx
je 0x100171d3
mov ecx, dword [edx]
lea eax, [edi + 0x754]
push eax
push 0
push ebx
push 0xa0000054
push edx
call dword [ecx + 0x14]
cmp byte [edi + 0x734], 0
lea ebp, [edi + 0x3c]
je 0x10017136
mov dword [edi + 0x748], 1
jmp 0x10017136
mov dword [edi + 0x74c], 0xa0000030
test edx, edx
je 0x10017215
mov ecx, dword [edx]
lea eax, [edi + 0x754]
push eax
push 0
push ebx
push 0xa0000030
push edx
call dword [ecx + 0x14]
cmp byte [edi + 0x734], 0
lea ebp, [edi + 0x3c]
je 0x10017136
mov dword [edi + 0x748], 1
jmp 0x10017136
mov ecx, dword [edi + 8]
mov ebx, dword [esp + 0x10]
mov dword [edi + 0x74c], 0xa0000015
test ecx, ecx
je 0x1001725b
push dword [esp + 0x24]
mov eax, dword [ecx]
push 0
push ebx
push 0xa0000015
push ecx
call dword [eax + 0x14]
cmp byte [edi + 0x734], 0
je 0x10017133
mov dword [edi + 0x748], 1
jmp 0x10017133
mov eax, dword [ebx + 0x28]
test eax, eax
je 0x100172ae
cmp eax, esi
je 0x100172ae
mov edx, dword [edi + 8]
mov dword [edi + 0x74c], 0xa0000018
test edx, edx
je 0x10016fe6
mov ecx, dword [edx]
lea eax, [edi + 0x754]
push eax
push 0
push ebx
push 0xa0000018
push edx
jmp 0x10016fe3
mov eax, 1
jmp 0x10016ffb