Function at 0x10015b90
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x14
mov edi, dword [esp + 0x34]
mov ecx, dword [esp + 0x30]
mov esi, dword [esp + 0x2c]
mov dword [esp + 8], ecx
sub ecx, esi
cmp ecx, 0x83
jl 0x10015e32
mov eax, dword [esp + 0x3c]
add eax, 0xffffffc0
mov dword [esp + 0xc], eax
cmp eax, edi
jle 0x10015e32
add dword [esp + 8], 0xffffff7f
movzx eax, byte [esi]
inc esi
mov byte [esp + 3], 1
jmp 0x10015bea
xor al, 1
mov byte [esp + 3], al
mov eax, dword [esp + 0x10]
movzx ecx, al
movsx ebx, word [ecx + ecx + 0x10029480]
mov edx, ecx
shr edx, 2
and ecx, 3
movzx eax, byte [esi + edx + 1]
mov ah, byte [esi + ecx]
movzx ebp, al
movzx eax, ah
cmove eax, ebp
mov dword [esp + 0x10], eax
lea eax, [esi + ecx + 1]
lea ebp, [esi + edx + 2]
cmove eax, ebp
mov dword [esp + 4], eax
mov eax, dword [esi]
and eax, dword [ecx*4 + 0x100296a0]
mov edx, ebx
sub edx, eax
movzx eax, bl
test edx, edx
jg 0x10015c9a
add edx, edi
sub edx, eax
mov ebx, eax
js 0x10015d92
mov eax, dword [esp + 0x38]
add edx, eax
test ecx, ecx
cmove edx, esi
movups xmm0, xmmword [edx]
movups xmm1, xmmword [edx + 0x10]
movups xmm2, xmmword [edx + 0x20]
movups xmm3, xmmword [edx + 0x30]
movups xmmword [eax + edi + 0x30], xmm3
movups xmmword [eax + edi + 0x20], xmm2
movups xmmword [eax + edi + 0x10], xmm1
movups xmmword [eax + edi], xmm0
movzx eax, byte [esp + 3]
mov esi, dword [esp + 4]
add edi, ebx
test al, 1
jne 0x10015be0
cmp esi, dword [esp + 8]
jae 0x10015e31
cmp edi, dword [esp + 0xc]
jl 0x10015be0
jmp 0x10015e31
test bl, 0x80
jne 0x10015e31
mov ecx, eax
lea eax, [edx + edi]
cmp eax, ecx
js 0x10015e31
mov ebx, ecx
sub ecx, edx
mov eax, dword [esp + 0x38]
lea ebp, [eax + edi]
cmp ecx, 0x10
jae 0x10015dcc
cmp ebx, edx
je 0x10015e31
mov eax, ebp
sub eax, ecx
mov esi, ecx
movzx ecx, byte [eax]
mov byte [ebp], cl
movzx ecx, byte [eax + 1]
mov byte [ebp + 1], cl
movzx ecx, byte [eax + 2]
mov byte [ebp + 2], cl
movzx ecx, byte [eax + 3]
mov byte [ebp + 3], cl
movzx ecx, byte [eax + 4]
mov byte [ebp + 4], cl
movzx ecx, byte [eax + 5]
mov byte [ebp + 5], cl
movzx ecx, byte [eax + 6]
mov byte [ebp + 6], cl
movzx ecx, byte [eax + 7]
mov byte [ebp + 7], cl
movzx ecx, byte [eax + 8]
mov byte [ebp + 8], cl
movzx ecx, byte [eax + 9]
mov byte [ebp + 9], cl
movzx ecx, byte [eax + 0xa]
mov byte [ebp + 0xa], cl
movzx ecx, byte [eax + 0xb]
mov byte [ebp + 0xb], cl
movzx ecx, byte [eax + 0xc]
mov byte [ebp + 0xc], cl
movzx ecx, byte [eax + 0xd]
mov byte [ebp + 0xd], cl
movzx ecx, byte [eax + 0xe]
mov byte [ebp + 0xe], cl
movzx eax, byte [eax + 0xf]
mov byte [ebp + 0xf], al
mov eax, dword [0x10032d80]
mov ecx, dword [0x10032dac]
mov edx, dword fs:[0x2c]
mov ecx, dword [edx + ecx*4]
cmp eax, dword [ecx + 4]
jg 0x10015e00
movzx eax, byte [esi + 0x10032d70]
lea ecx, [ebp + 0x10]
sub ecx, eax
movups xmm0, xmmword [ecx]
movups xmmword [ebp + 0x10], xmm0
lea ecx, [ebp + 0x20]
sub ecx, eax
movups xmm0, xmmword [ecx]
movups xmmword [ebp + 0x20], xmm0
lea ecx, [ebp + 0x30]
sub ecx, eax
movups xmm0, xmmword [ecx]
movups xmmword [ebp + 0x30], xmm0
jmp 0x10015c6e
test ecx, ecx
jne 0x10015e31
movups xmm0, xmmword [esi + 0x30]
mov eax, dword [esp + 0x38]
movups xmmword [eax + edi + 0x30], xmm0
movups xmm0, xmmword [esi + 0x20]
movups xmmword [eax + edi + 0x20], xmm0
movups xmm0, xmmword [esi]
movups xmm1, xmmword [esi + 0x10]
movups xmmword [eax + edi + 0x10], xmm1
movups xmmword [eax + edi], xmm0
mov esi, ebp
movzx eax, byte [esp + 3]
jmp 0x10015c77
mov eax, ebp
sub eax, ecx
movups xmm0, xmmword [eax]
movups xmmword [ebp], xmm0
lea eax, [ebp + 0x10]
sub eax, ecx
movups xmm0, xmmword [eax]
movups xmmword [ebp + 0x10], xmm0
lea eax, [ebp + 0x20]
sub eax, ecx
movups xmm0, xmmword [eax]
movups xmmword [ebp + 0x20], xmm0
lea eax, [ebp + 0x30]
sub eax, ecx
movups xmm0, xmmword [eax]
movups xmmword [ebp + 0x30], xmm0
jmp 0x10015c6e
push 0x10032d80
call fcn.10017843
add esp, 4
cmp dword [0x10032d80], 0xffffffff
jne 0x10015d62
call fcn.10015e50
push 0x10032d80
call fcn.10017895
add esp, 4
jmp 0x10015d62
dec esi
mov eax, dword [esp + 0x28]
mov dword [eax], esi
mov dword [eax + 4], edi
add esp, 0x14
pop esi
pop edi
pop ebx
pop ebp
ret