Function at 0x1016e640
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x18
mov edi, dword [ebp + 8]
mov dword [ebp - 0x14], ecx
add dword [ecx + 0x38], edi
mov eax, dword [ecx + 0x3c]
test eax, eax
je 0x1016e697
mov esi, 8
mov dword [ebp - 0x18], eax
mov dword [ebp - 0x20], edx
sub esi, eax
cmp edi, esi
mov eax, esi
cmovb eax, edi
mov edi, eax
cmp eax, 3
jbe 0x1016e69e
mov eax, dword [edx]
xor ecx, ecx
mov edx, 4
mov dword [ebp - 0x10], eax
mov eax, edx
or eax, 1
cmp eax, edi
jb 0x1016e6b2
mov eax, dword [ebp - 0x10]
cmp edx, edi
jb 0x1016e6ef
mov ebx, ecx
jmp 0x1016e71d
xor esi, esi
jmp 0x1016e839
xor ecx, ecx
xor edx, edx
mov dword [ebp - 0x10], 0
mov eax, edx
or eax, 1
cmp eax, edi
jae 0x1016e689
mov eax, dword [ebp - 0x20]
mov dword [ebp - 0x1c], ecx
lea ecx, [edx*8]
xor ebx, ebx
movzx eax, word [eax + edx]
shld ebx, eax, cl
shl eax, cl
test cl, 0x20
mov ecx, dword [ebp - 0x1c]
cmovne ebx, eax
mov dword [ebp - 0x24], ebx
mov ebx, 0
cmovne eax, ebx
mov ebx, dword [ebp - 0x10]
or edx, 2
or ecx, dword [ebp - 0x24]
or ebx, eax
mov eax, ebx
cmp edx, edi
jae 0x1016e690
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 0x20]
xor edi, edi
mov ebx, ecx
movzx eax, byte [eax + edx]
shl edx, 3
mov ecx, edx
shld edi, eax, cl
shl eax, cl
test dl, 0x20
mov ecx, 0
cmovne edi, eax
cmovne eax, ecx
or dword [ebp - 0x10], eax
or ebx, edi
mov eax, dword [ebp - 0x10]
mov edx, dword [ebp - 0x18]
xor edi, edi
lea ecx, [edx*8]
shld ebx, eax, cl
shl eax, cl
test cl, 0x20
cmovne ebx, eax
cmove edi, eax
mov eax, dword [ebp - 0x14]
or edi, dword [eax + 0x30]
or ebx, dword [eax + 0x34]
mov dword [ebp - 0x10], edi
mov dword [eax + 0x30], edi
mov edi, dword [ebp + 8]
mov dword [eax + 0x34], ebx
cmp esi, edi
jbe 0x1016e759
add edx, edi
mov edi, edx
jmp 0x1016e9f9
mov eax, dword [eax + 0x1c]
mov ecx, dword [ebp - 0x14]
mov edx, ebx
xor eax, ebx
mov ecx, dword [ecx + 0x18]
mov ebx, dword [ebp - 0x10]
movd xmm2, eax
mov eax, dword [ebp - 0x14]
xor ecx, ebx
movdqu xmm1, xmmword [eax]
mov eax, dword [ebp - 0x14]
movd xmm0, ecx
punpcklqdq xmm2, xmm0
movdqu xmm0, xmmword [eax + 0x10]
mov eax, dword [ebp - 0x14]
movdqa xmm3, xmm0
movdqa xmm4, xmm0
psllq xmm0, 0xd
shufps xmm3, xmm2, 0x24
psrlq xmm4, 0x33
movaps xmm2, xmm3
paddq xmm1, xmm3
psllq xmm3, 0x10
psrlq xmm2, 0x30
shufps xmm0, xmm3, 0xe4
shufps xmm4, xmm2, 0xe4
orps xmm0, xmm4
pxor xmm0, xmm1
pshufd xmm1, xmm1, 0x1e
movdqa xmm2, xmm0
movdqa xmm3, xmm0
paddq xmm1, xmm0
psrlq xmm2, 0x2f
psrlq xmm3, 0x2b
movsd xmm3, xmm2
movdqa xmm2, xmm0
psllq xmm0, 0x15
psllq xmm2, 0x11
movsd xmm0, xmm2
pshufd xmm2, xmm1, 0xff
orpd xmm0, xmm3
xorpd xmm0, xmm1
movupd xmmword [eax + 0x10], xmm0
mov eax, dword [ebp - 0x14]
pshufd xmm0, xmm1, 0x55
movd dword [eax + 0xc], xmm1
mov eax, dword [ebp - 0x14]
pshufd xmm1, xmm1, 0xee
movd ecx, xmm1
xor ecx, ebx
movd dword [eax + 8], xmm0
movd eax, xmm2
xor eax, edx
mov edx, dword [ebp - 0x14]
mov dword [edx + 4], eax
mov edx, dword [ebp - 0x14]
mov dword [edx], ecx
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 0x20]
sub edi, esi
mov eax, edi
and edi, 0xfffffff8
and eax, 7
cmp esi, edi
mov dword [ebp - 0x18], eax
jae 0x1016e94d
movdqu xmm1, xmmword [ecx]
movdqu xmm0, xmmword [ecx + 0x10]
nop word [eax + eax]
mov ecx, dword [edx + esi]
mov eax, dword [edx + esi + 4]
pshufd xmm2, xmm0, 0xee
movdqa xmm4, xmm0
add esi, 8
movd ebx, xmm2
pshufd xmm2, xmm0, 0xff
psrlq xmm4, 0x33
xor ebx, ecx
movd xmm3, ebx
movd ebx, xmm2
xor ebx, eax
movd xmm2, ebx
punpcklqdq xmm2, xmm3
movdqa xmm3, xmm0
psllq xmm0, 0xd
shufps xmm3, xmm2, 0x24
movaps xmm2, xmm3
paddq xmm1, xmm3
psllq xmm3, 0x10
psrlq xmm2, 0x30
shufps xmm0, xmm3, 0xe4
shufps xmm4, xmm2, 0xe4
pshufd xmm2, xmm1, 0x1e
orps xmm0, xmm4
pxor xmm0, xmm1
paddq xmm2, xmm0
pshufd xmm3, xmm2, 0xee
pshufd xmm1, xmm2, 0xff
movd ebx, xmm3
movdqa xmm3, xmm0
xor ebx, ecx
movd ecx, xmm1
movdqa xmm1, xmm0
psrlq xmm3, 0x2b
psrlq xmm1, 0x2f
xor ecx, eax
cmp esi, edi
movsd xmm3, xmm1
movdqa xmm1, xmm0
psllq xmm0, 0x15
psllq xmm1, 0x11
movsd xmm0, xmm1
movd xmm1, ecx
orpd xmm0, xmm3
movd xmm3, ebx
punpcklqdq xmm1, xmm3
xorpd xmm0, xmm2
shufps xmm1, xmm2, 0x12
jb 0x1016e860
mov eax, dword [ebp - 0x14]
pshufd xmm1, xmm2, 0x55
movd dword [ebp - 0x10], xmm2
movd edi, xmm1
movdqu xmmword [eax + 0x10], xmm0
mov dword [eax + 8], edi
mov edi, dword [ebp - 0x10]
mov dword [eax + 0xc], edi
mov dword [eax], ebx
mov dword [eax + 4], ecx
mov edi, dword [ebp - 0x18]
cmp edi, 3
jbe 0x1016e96f
mov ecx, dword [edx + esi]
mov dword [ebp - 0x10], 0
mov ebx, 4
mov eax, ebx
or eax, 1
cmp eax, edi
jb 0x1016e983
jmp 0x1016e9b7
xor ecx, ecx
xor ebx, ebx
mov dword [ebp - 0x10], 0
mov eax, ebx
or eax, 1
cmp eax, edi
jae 0x1016e9b7
lea eax, [ebx + esi]
mov dword [ebp - 0x1c], ecx
lea ecx, [ebx*8]
xor edi, edi
movzx eax, word [edx + eax]
shld edi, eax, cl
shl eax, cl
test cl, 0x20
mov ecx, 0
cmovne edi, eax
cmovne eax, ecx
mov ecx, dword [ebp - 0x1c]
or ebx, 2
or dword [ebp - 0x10], edi
mov edi, dword [ebp - 0x18]
or ecx, eax
cmp ebx, edi
jae 0x1016e9ed
add esi, ebx
shl ebx, 3
mov eax, ecx
movzx edx, byte [edx + esi]
xor esi, esi
mov ecx, ebx
shld esi, edx, cl
shl edx, cl
mov ecx, eax
test bl, 0x20
mov eax, 0
cmovne esi, edx
cmovne edx, eax
mov eax, dword [ebp - 0x10]
or ecx, edx
or eax, esi
mov esi, eax
mov eax, dword [ebp - 0x14]
jmp 0x1016e9f3
mov eax, dword [ebp - 0x14]
mov esi, dword [ebp - 0x10]
mov dword [eax + 0x30], ecx
mov dword [eax + 0x34], esi
mov dword [eax + 0x3c], edi
add esp, 0x18
pop esi
pop edi
pop ebx
pop ebp
ret