Function at 0x2016f250
Capabilities:
Encode data using xor

Disassembly:
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 0x418
lea rbp, [rsp + 0x80]
mov qword [rbp + 0x390], 0xfffffffffffffffe
mov ebx, r9d
mov dword [rbp + 0x364], r8d
mov qword [rbp + 0x378], rcx
lea r15, [rbp + 0x338]
mov eax, 0x65e365cc
nop word cs:[rax + rax]
mov ecx, dword [0x205b3cd0]
lea r8d, [rcx - 1]
imul r8d, ecx
test r8b, 1
je 0x2016f2d9
mov ecx, dword [0x20471b90]
mov ecx, dword [0x205b3cd0]
lea r8d, [rcx - 1]
imul r8d, ecx
and r8d, 1
mov ecx, dword [0x205500b8]
add ecx, eax
cmp r8d, ecx
jne 0x2016f2a0
movsxd rsi, dword [0x20471b90]
xor eax, eax
lea rcx, [0x20471b90]
mov r14, rsi
and r14, rcx
add r14, r14
nop word cs:[rax + rax]
test al, al
jne 0x2016f34b
mov ecx, dword [0x205b3cd4]
mov r11d, dword [0x205500b8]
mov r8d, r11d
not r8d
mov r9d, r11d
and r9d, 0x9a1c99d7
mov r10d, r8d
and r10d, 0x65e36628
or r10d, r9d
xor r11d, 0x65e36628
and r8d, 0x1a1c99d7
or r8d, r11d
not r8d
lea r8d, [r10 + r8*2]
cmp ecx, r8d
jl 0x2016f358
mov ecx, dword [0x205b3cd4]
cmp ecx, 0x2d
jge 0x2016f300
jmp 0x2016f304
mov eax, dword [0x20471bfc]
mov dword [rbp + 0x370], eax
test rdx, rdx
lea r12, [0x2046cd28]
mov qword [rbp + 0x358], rdx
cmovne r12, rdx
mov qword [rbp + 0x348], 0
mov rax, qword [0x205500c0]
movabs rcx, 0x8eec59f04b8741d7
xor rcx, rax
movabs rdx, 0xeec59f04b8741d7
and rdx, rax
lea rax, [rcx + rdx*2]
mov qword [rbp + 0x350], rax
mov byte [rbp + 0x338], 0
mov rcx, r12
mov edx, 0xed72135a
mov r8d, 0x53e88a30
call fcn.2008dcc0
mov r13, rax
cmp rax, 0xf
jbe 0x2016f3e3
mov rcx, r15
mov rdx, r13
mov r9, r12
call fcn.2006bec0
jmp 0x2016f401
mov qword [rbp + 0x348], r13
mov rcx, r15
mov rdx, r12
mov r8, r13
call fcn.2044f800
mov byte [rbp + r13 + 0x338], 0
lea r12, [0x2046c448]
mov qword [rbp + 0x330], r12
xorps xmm0, xmm0
movups xmmword [rbp + 0x320], xmm0
mov rdi, qword [rbp + 0x348]
cmp qword [rbp + 0x350], 0x10
jb 0x2016f431
mov r15, qword [rbp + 0x338]
cmp rdi, 0xf
ja 0x2016f450
lea rax, [rbp + 0x310]
movups xmm0, xmmword [r15]
movups xmmword [rax], xmm0
mov r13d, 0xf
jmp 0x2016f4e0
mov eax, edi
and eax, 0xf
mov ecx, edi
not ecx
and ecx, 0xf
mov r13, rdi
and r13, 0xfffffffffffffff0
or r13, rcx
xor r13, rax
movabs rax, 0x7fffffffffffffff
cmp r13, rax
cmovae r13, rax
cmp r13, 0xfff
jb 0x2016f4c1
lea rcx, [r13 + 0x28]
call fcn.2042789c
mov rcx, rax
neg rcx
movabs rdx, 0x7fffffffffffffd9
and rdx, rcx
xor rcx, 0xffffffffffffffd9
lea rdx, [rcx + rdx*2]
neg rdx
mov ecx, edx
not ecx
xor rdx, 0xffffffffffffffe0
and ecx, 0x1f
or rcx, rdx
not rcx
mov qword [rcx - 8], rax
jmp 0x2016f4cd
lea rcx, [r13 + 1]
call fcn.2042789c
mov rcx, rax
mov qword [rbp + 0x310], rcx
lea r8, [rdi + 1]
mov rdx, r15
call fcn.2044f800
mov qword [rbp + 0x320], rdi
mov qword [rbp + 0x328], r13
mov qword [rbp + 0x308], r12
lea rdx, [rbp + 0x308]
mov rcx, qword [rbp + 0x378]
call fcn.2016daa0
mov dword [rbp + 0x374], eax
cmp dword [rbp + 0x374], 0xfffffffe
je 0x2016f733
cmp qword [0x205b6560], 0
jne 0x2016f54c
mov ecx, 0x900
call fcn.2042789c
mov qword [rbp + 0x380], rax
mov rcx, rax
call fcn.20067cf0
mov rax, qword [rbp + 0x380]
mov qword [0x205b6560], rax
mov rax, qword [0x205b6560]
mov qword [rbp + 0x388], rax
mov rax, qword [rax + 0x700]
mov rcx, qword [rbp + 0x358]
call qword [case.0x2010e313.0]
mov dword [rbp + 0x368], eax
lea rcx, [0x20471b90]
mov rax, rcx
xor rax, rcx
not rax
and rax, rsi
xor rax, rcx
mov rcx, rax
xor rcx, r14
and rax, r14
mov edx, dword [0x205b3cd4]
cmp edx, 0x2c
jl 0x2016f5b4
nop
mov edx, dword [0x205b3cd0]
lea r8d, [rdx - 1]
imul r8d, edx
test r8b, 1
jne 0x2016f5a0
lea rax, [rcx + rax*2]
mov edx, dword [0x2054ea10]
lea ecx, [rdx + 1]
mov dword [0x2054ea10], ecx
mov r9d, edx
not r9d
mov r8d, dword [0x205b3cd4]
mov r8d, ecx
not r8d
lea r10, [fcn.2016f250]
add r10d, r10d
add r10d, 0x24e0
mov r11d, r10d
not r11d
nop word cs:[rax + rax]
test r11d, r10d
jne 0x2016f600
mov dword [rbp + 0x380], ebx
xor r9d, r8d
xor r8d, ecx
and r8d, edx
xor r8d, ecx
and edx, ecx
or edx, r9d
mov ecx, edx
not ecx
mov ebx, r8d
and ebx, ecx
nop word cs:[rax + rax]
mov r9d, dword [0x205b3cd0]
lea r10d, [r9 - 1]
imul r10d, r9d
and r10d, 1
mov r9d, dword [0x205500b8]
mov r11d, r9d
xor r11d, 0x1a1c9a33
and r11d, r9d
xor r9d, 0x65e365cc
lea r9d, [r9 + r11*2]
cmp r10d, r9d
jne 0x2016f630
xor edx, ecx
and edx, r8d
xor edx, ecx
or ebx, edx
not ebx
xor esi, esi
mov edi, 0
mov dword [rbp + 0x36c], ebx
test ebx, ebx
jne 0x2016f6ec
nop word cs:[rax + rax]
mov ecx, dword [0x205b3cd0]
lea edx, [rcx - 1]
imul edx, ecx
test dl, 1
je 0x2016f6b2
mov ecx, dword [0x205b3cd0]
lea edx, [rcx - 1]
imul edx, ecx
test dl, 1
jne 0x2016f690
mov ecx, dword [0x205500b8]
mov edx, dword [0x205b3cd4]
cmp edx, 0xc
jg 0x2016f6a1
mov edx, ecx
xor edx, 0x65e365cc
and ecx, 0x65e365cc
lea ecx, [rdx + rcx*2]
xor edx, edx
mov esi, 0
mov edi, 0
cmp ecx, dword [rbp + 0x370]
jl 0x2016f854
mov r8d, dword [rbp + 0x368]
cmp r8d, 0xffffffff
je 0x2016f73a
mov eax, dword [0x205500b8]
lea ecx, [rax + 0x65e3661c]
add eax, 0x65e365cb
mov edx, ecx
xor edx, eax
and edx, ecx
not ecx
xor eax, ecx
not eax
and eax, ecx
or edx, eax
not edx
or edx, r8d
xor r8d, 0x50
not edx
or edx, r8d
cmp edx, 0xffffffff
mov ebx, dword [rbp + 0x380]
je 0x2016f759
xor ebx, ebx
jmp 0x2016faae
mov rax, qword [rbp + 0x388]
mov rax, qword [rax + 0x6f0]
call qword [case.0x2010e313.0]
mov ebx, dword [rbp + 0x380]
cmp eax, 0x32
je 0x2016f733
mov rdx, qword [rbp + 0x378]
lea rax, [rdx + 0x58]
mov r8d, dword [rbp + 0x374]
movsxd rcx, r8d
imul rcx, rcx, 0x1e8
cmp r8d, 0xffffffff
mov rdx, qword [rdx + 0x60]
lea rcx, [rdx + rcx + 4]
cmove rcx, rax
mov r12d, dword [rcx]
lea rcx, [rbp - 0x30]
mov edx, r12d
call fcn.2016fd50
mov rax, qword [rbp + 0x428]
mov qword [rsp + 0x48], rax
mov rax, qword [rbp + 0x420]
mov qword [rsp + 0x40], rax
mov rax, qword [rbp + 0x418]
mov qword [rsp + 0x38], rax
mov eax, dword [rbp + 0x410]
mov dword [rsp + 0x30], eax
mov r15d, dword [rbp + 0x408]
mov dword [rsp + 0x28], r15d
mov rax, qword [rbp + 0x400]
mov qword [rsp + 0x20], rax
lea rcx, [rbp - 0x30]
mov r14, qword [rbp + 0x358]
mov rdx, r14
mov r8d, dword [rbp + 0x364]
mov r9d, ebx
call fcn.201696b0
mov rbx, rax
test rax, rax
je 0x2016fa14
lea rcx, [rbp - 0x30]
call fcn.20169370
cmp dword [rbp - 0x1c], 1
jne 0x2016fa37
mov rax, qword [rbp + 0x388]
mov rax, qword [rax + 0x348]
mov rcx, rbx
call qword [case.0x2010e313.0]
cmp r15d, 1
jne 0x2016faa3
mov rax, qword [rbp + 0x388]
mov rax, qword [rax + 0x5e8]
mov rcx, r14
call qword [case.0x2010e313.0]
jmp 0x2016faa3
lea rcx, [fcn.2016f250]
lea r8d, [rcx + rcx]
add r8d, 0x49c0
mov r9d, r8d
not r9d
mov r10b, 1
xor ebx, ebx
xor r14d, r14d
jmp 0x2016f8de
mov rsi, r13
not rsi
mov rdi, r15
not rdi
xor r12, r15
xor r11, r13
and rdi, r14
and rsi, rbx
or rsi, r11
or rdi, r12
not rdi
not rsi
or rsi, r11
or rdi, r12
add edx, 0x8567f8b4
mov r11d, edx
xor r11d, 0xf00e1b66
and edx, 0x700e1b66
lea edx, [r11 + rdx*2]
add edx, ecx
add edx, 0xf06d51c2
mov rbx, rsi
mov r14, rdi
cmp edx, dword [rbp + 0x370]
jge 0x2016f6ec
movsxd r11, edx
test r8d, r9d
mov ecx, dword [0x205b3cd0]
lea esi, [rcx - 1]
imul esi, ecx
test sil, 1
jne 0x2016f8e4
add r11, rax
nop dword [rax]
mov ecx, dword [0x205b3cd0]
mov esi, dword [0x205500b8]
not esi
add esi, ecx
imul esi, ecx
test sil, 1
jne 0x2016f924
mov ecx, dword [0x205b3cd4]
cmp ecx, 0x29
jle 0x2016f930
test r10b, r10b
je 0x2016f900
jmp 0x2016f919
mov ecx, dword [0x205b3cd0]
lea esi, [rcx - 1]
imul esi, ecx
test sil, 1
je 0x2016f949
mov rcx, qword [r11]
mov rcx, qword [r11 + 8]
mov rcx, qword [r11]
mov r11, qword [r11 + 8]
mov esi, dword [0x205b3cd4]
mov edi, dword [0x205500b8]
mov r15d, edi
xor r15d, 0x65e3661f
and edi, 0x65e3661f
lea edi, [r15 + rdi*2]
cmp esi, edi
jl 0x2016f98c
nop word cs:[rax + rax]
cmp dword [0x205500b8], 0x9a1c9a34
jne 0x2016f980
not r14
not rbx
mov r13, rbx
and r13, rcx
mov r15, r14
and r15, r11
or r14, r11
or rbx, rcx
mov r11, rbx
not r11
mov r12, r14
not r12
mov ecx, dword [0x205b3cd0]
lea esi, [rcx - 1]
imul esi, ecx
and esi, 1
mov ecx, dword [0x205500b8]
mov edi, ecx
xor edi, 0x65e365cc
and ecx, 0x65e365cc
lea ecx, [rdi + rcx*2]
cmp esi, ecx
jne 0x2016fa00
nop word [rax + rax]
mov ecx, dword [0x205500b8]
mov esi, dword [0x205b3cd4]
cmp esi, 0x54
jl 0x2016f880
nop word cs:[rax + rax]
mov ecx, dword [0x205b3cd0]
lea esi, [rcx + 1]
imul esi, ecx
test sil, 1
jne 0x2016fa00
jmp 0x2016f9e0
cmp r15d, 1
jne 0x2016faa3
mov rax, qword [rbp + 0x388]
mov rax, qword [rax + 0x5e8]
mov rcx, r14
call qword [case.0x2010e313.0]
jmp 0x2016faa3
mov eax, dword [rbp - 0x20]
mov ecx, eax
xor ecx, 0xfffffffe
test ecx, eax
je 0x2016fb75
and r12d, 4
mov ecx, dword [0x205500b8]
mov edx, ecx
xor edx, 0x65e365cc
and ecx, 0x65e365cc
lea ecx, [rdx + rcx*2]
cmp r12d, ecx
je 0x2016fb95
mov ecx, eax
not ecx
mov edx, ecx
and edx, eax
xor edx, ecx
and ecx, 2
and eax, 0xfffffffd
or eax, ecx
and edx, 0xfffffffd
or edx, eax
not edx
test edx, edx
jne 0x2016fb95
mov rax, qword [rbp + 0x388]
mov rax, qword [rax + 0x348]
mov rcx, rbx
call qword [case.0x2010e313.0]
xor ebx, ebx
lea rcx, [rbp - 0x30]
call fcn.2016fff0
mov rax, qword [rbp + 0x350]
cmp rax, 0x10
jb 0x2016fb5e
mov rcx, qword [rbp + 0x338]
lea rdx, [rax + 1]
cmp rdx, 0x1000
jb 0x2016fb59
mov r8, qword [rcx - 8]
mov rdx, rcx
xor rdx, 0xfffffffffffffff8
movabs r9, 0x7ffffffffffffff8
and r9, rcx
lea rcx, [rdx + r9*2]
movabs rdx, 0x1aeccdecb33e8dc9
mov r9, rcx
xor r9, rdx
and rcx, rdx
lea rcx, [r9 + rcx*2]
sub rcx, r8
movabs rdx, 0xe51332134cc17237
add rdx, rcx
cmp rdx, 0x20
jae 0x2016fbce
neg rax
mov rcx, rax
xor rcx, 0xffffffffffffffd8
movabs rdx, 0x7fffffffffffffd8
and rdx, rax
lea rax, [rcx + rdx*2]
mov rcx, qword [0x205500c0]
sub rcx, rax
movabs rdx, 0x8eec59f04b8741c8
add rdx, rcx
mov rcx, r8
call fcn.20178f70
mov rax, rbx
add rsp, 0x418
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
mov rcx, qword [rbp + 0x378]
add rcx, 0x48
lea rdx, [rbp + 0x2f8]
lea r8, [rbp - 0x30]
call fcn.20177cb0
jmp 0x2016faa5
add qword [rbp + 0x378], 0x38
xor eax, eax
cmp dword [rbp + 0x36c], 0
setne al
mov rdx, qword [0x20471bd0]
mov r8, qword [0x20471bc8]
xor ecx, ecx
neg rax
sbb rcx, rcx
mov r9d, dword [0x205b3cd4]
cmp r9d, 0x3f
jge 0x2016fbec
jmp 0x2016fbd3
call fcn.20407a4c
mov r9, r8
sub r9, rsi
mov r10, rdx
sbb r10, rdi
mov r11d, dword [0x205b3cd4]
cmp r11d, 0x4a
jl 0x2016fc18
mov r9d, 0x65e365e1
nop word cs:[rax + rax]
mov r10d, dword [0x205b3cd4]
mov r11d, dword [0x205500b8]
add r11d, r9d
cmp r10d, r11d
jge 0x2016fc00
jmp 0x2016fbd3
not r9
or r9, rax
not r10
or r10, rcx
not r9
not r10
or r10, r9
setne al
or al, byte [0x205b3cd8]
and al, 1
mov byte [0x205b3cd8], al
lea rdx, [rbp + 0x2f8]
lea r8, [rbp - 0x30]
mov rcx, qword [rbp + 0x378]
call fcn.20177cb0
jmp 0x2016faa5