Function at 0x556851
Capabilities:
Encode data using xor

Disassembly:
push ebx
mov ebx, esp
push ecx
push ecx
and esp, 0xfffffff8
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x30
push esi
mov eax, edx
mov dword [ebp - 8], ecx
mov edx, dword [ebx + 0x1c]
push edi
mov edi, ecx
test edx, edx
je 0x556b15
mov esi, dword [ebx + 0x10]
shr eax, 2
mov ecx, eax
mov eax, dword [ebx + 0xc]
and eax, 0xfffffffc
shl ecx, 2
mov dword [ebp - 0x28], eax
mov eax, dword [ebx + 0x14]
and eax, 0xfffffffc
mov dword [ebp - 0x24], ecx
mov ecx, dword [ebx + 8]
mov dword [ebp - 0x2c], eax
dec edx
mov dword [ebx + 0x1c], edx
xor edx, edx
mov dword [ebp - 4], edx
cmp byte [0x7a41d1], dl
je 0x5569f0
mov eax, edi
or eax, ecx
or eax, esi
test al, 0xf
mov eax, dword [ebx + 0x18]
lea edi, [eax - 8]
jne 0x556958
test edi, edi
mov edi, dword [ebp - 8]
js 0x5569f3
lea edx, [ecx + 0x10]
mov dword [ebp - 0x20], esi
mov dword [ebp - 0xc], edx
mov edx, edi
sub edx, ecx
sub edi, esi
mov dword [ebp - 0x14], edx
mov edx, esi
mov esi, dword [ebp - 0x14]
sub edx, ecx
mov ecx, dword [ebp - 0xc]
mov dword [ebp - 0x18], edx
mov edx, eax
shr edx, 3
mov dword [ebp - 0x10], edx
shl edx, 3
mov dword [ebp - 0x1c], edi
mov edi, dword [ebp - 0x18]
mov eax, dword [ebp - 0x1c]
mov dword [ebp - 4], edx
mov edx, dword [ebp - 0x20]
sub dword [ebp - 0x10], 1
movaps xmm2, xmmword [ecx]
movaps xmm4, xmmword [eax + edx]
movaps xmm3, xmm2
movaps xmm5, xmmword [esi + ecx]
movaps xmm1, xmmword [ecx - 0x10]
pcmpgtd xmm3, xmm5
pcmpgtd xmm1, xmm4
psubd xmm5, xmm2
psubd xmm4, xmmword [ecx - 0x10]
pxor xmm5, xmm3
pxor xmm4, xmm1
psubd xmm5, xmm3
psubd xmm4, xmm1
movaps xmmword [edx], xmm4
lea edx, [edx + 0x20]
movaps xmmword [edi + ecx], xmm5
lea ecx, [ecx + 0x20]
jne 0x55690d
jmp 0x5569e4
test edi, edi
mov edi, dword [ebp - 8]
js 0x5569f3
lea edx, [ecx + 0x10]
mov dword [ebp - 0xc], esi
mov dword [ebp - 0x20], edx
mov edx, edi
sub edx, ecx
sub edi, esi
mov dword [ebp - 0x1c], edx
mov edx, esi
mov esi, dword [ebp - 0x20]
sub edx, ecx
mov dword [ebp - 0x18], edx
mov edx, eax
mov ecx, dword [ebp - 0x18]
shr edx, 3
mov dword [ebp - 0x10], edx
shl edx, 3
mov dword [ebp - 0x14], edi
mov edi, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x14]
mov dword [ebp - 4], edx
mov edx, dword [ebp - 0xc]
sub dword [ebp - 0x10], 1
movups xmm2, xmmword [esi - 0x10]
movups xmm0, xmmword [esi]
movups xmm4, xmmword [edx + eax]
movups xmm5, xmmword [esi + edi]
movaps xmm3, xmm2
movaps xmm1, xmm0
pcmpgtd xmm3, xmm4
pcmpgtd xmm1, xmm5
psubd xmm4, xmm2
psubd xmm5, xmm0
pxor xmm4, xmm3
pxor xmm5, xmm1
psubd xmm4, xmm3
psubd xmm5, xmm1
movups xmmword [edx], xmm4
lea edx, [edx + 0x20]
movups xmmword [esi + ecx], xmm5
lea esi, [esi + 0x20]
jne 0x55699c
mov edx, dword [ebp - 4]
mov esi, dword [ebx + 0x10]
mov ecx, dword [ebx + 8]
mov edi, dword [ebp - 8]
mov eax, dword [ebx + 0x18]
add eax, 0xfffffffc
cmp edx, eax
jg 0x556ab4
lea eax, [edx + 3]
sub esi, edi
lea eax, [ecx + eax*4]
mov dword [ebp - 0x1c], esi
mov dword [ebp - 0x10], eax
lea eax, [edx + 1]
mov esi, dword [ebp - 0x10]
lea eax, [edi + eax*4]
mov dword [ebp - 0xc], eax
mov eax, ecx
sub eax, edi
mov edi, dword [ebx + 0x10]
mov dword [ebp - 0x20], eax
mov eax, edi
sub eax, ecx
mov dword [ebp - 0x18], eax
mov ecx, dword [ebp - 0xc]
mov eax, dword [ecx - 4]
sub eax, dword [esi - 0xc]
push eax
call fcn.0069a220
mov edx, dword [ebp - 0xc]
mov esi, eax
mov eax, dword [ebp - 0x20]
pop ecx
mov ecx, dword [edx]
sub ecx, dword [eax + edx]
push ecx
call fcn.0069a220
mov edx, dword [ebp - 0xc]
pop ecx
mov ecx, dword [ebp - 4]
mov dword [edi + ecx*4], esi
mov ecx, dword [ebp - 0x1c]
mov dword [ecx + edx], eax
mov ecx, dword [ebp - 0x10]
mov eax, dword [edx + 4]
sub eax, dword [ecx - 4]
push eax
call fcn.0069a220
pop ecx
mov ecx, dword [ebp - 0xc]
mov esi, eax
mov eax, dword [ebp - 0x10]
mov ecx, dword [ecx + 8]
sub ecx, dword [eax]
push ecx
call fcn.0069a220
mov edx, dword [ebp - 4]
add dword [ebp - 0xc], 0x10
pop ecx
mov ecx, dword [ebp - 0x18]
mov dword [edi + edx*4 + 8], esi
add edx, 4
mov esi, dword [ebp - 0x10]
mov dword [ebp - 4], edx
mov dword [ecx + esi], eax
add esi, 0x10
mov eax, dword [ebx + 0x18]
add eax, 0xfffffffc
mov dword [ebp - 0x10], esi
cmp edx, eax
jle 0x556a29
mov edi, dword [ebp - 8]
mov esi, dword [ebx + 0x10]
cmp edx, dword [ebx + 0x18]
jge 0x556af5
mov ecx, dword [ebx + 8]
lea eax, [edi + edx*4]
sub ecx, edi
mov dword [ebp - 0x20], eax
sub esi, edi
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x1c], esi
mov edi, eax
mov esi, dword [ebp - 4]
mov eax, dword [edi]
sub eax, dword [edi + ecx]
push eax
call fcn.0069a220
pop ecx
mov ecx, dword [ebp - 0x1c]
inc esi
mov dword [edi + ecx], eax
lea edi, [edi + 4]
mov ecx, dword [ebp - 0x18]
cmp esi, dword [ebx + 0x18]
jl 0x556ad1
mov edi, dword [ebp - 8]
mov esi, dword [ebx + 0x10]
mov ecx, dword [ebx + 8]
add edi, dword [ebp - 0x24]
add ecx, dword [ebp - 0x28]
add esi, dword [ebp - 0x2c]
mov edx, dword [ebx + 0x1c]
mov dword [ebp - 8], edi
mov dword [ebx + 8], ecx
mov dword [ebx + 0x10], esi
test edx, edx
jne 0x5568a0
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret