Function at 0x140016530
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0xb8
mov r15, rdx
mov rax, qword [0x14016c028]
xor rax, rsp
mov qword [rsp + 0xb0], rax
test r8, r8
je 0x140016adb
mov r13, r8
mov rdx, rcx
mov eax, dword [r8]
cmp eax, 4
je 0x140016a46
mov dword [rsp + 0x58], eax
mov eax, dword [r13 + 4]
mov dword [rsp + 0x54], eax
mov r14d, dword [r13 + 0x10]
mov eax, dword [r13 + 0x14]
xor ebp, ebp
mov ecx, dword [r13 + 0x18]
mov dword [rsp + 0x5c], ecx
cmp rax, 0x40
mov qword [rsp + 0x60], rdx
jb 0x140016b15
mov ecx, eax
mov edi, 0
and ecx, 7
jne 0x140016660
mov rcx, qword [rdx + 8]
lea ebp, [rax + 0x14]
mov edx, dword [rcx + 0x14]
cmp ebp, edx
ja 0x140016b09
mov rbx, qword [rcx + 8]
mov ebp, dword [rbx + rax + 4]
cmp ebp, 0xc8799269
jne 0x140016b09
add rbx, rax
mov ebp, dword [rbx]
cmp ebp, 0x14
jb 0x140016b09
mov ebp, dword [rbx]
add ebp, eax
cmp ebp, edx
ja 0x140016b09
mov ebp, dword [rbx + 8]
cmp ebp, 0xbcea225b
jne 0x140016b09
lea rbp, [rbx + 0x10]
test rbx, rbx
cmove rbp, rbx
lea ebx, [rax + 0x10]
cmp ebx, edx
ja 0x140016b15
mov rbx, qword [rcx + 8]
mov edi, dword [rbx + rax + 4]
cmp edi, 0xc8799269
jne 0x140016b15
add rbx, rax
mov edi, dword [rbx]
cmp edi, 0x10
jb 0x140016b15
mov esi, dword [rbx]
add esi, eax
xor edi, edi
test rbx, rbx
je 0x140016660
cmp esi, edx
ja 0x140016660
mov edi, dword [rbx]
cmp rdi, 0x11
jb 0x140016b10
add eax, edi
cmp eax, edx
ja 0x140016b10
add rdi, 0xfffffffffffffff0
mov qword [rsp + 0x48], r15
lea eax, [r14 - 2]
cmp eax, 0x3ffffffc
ja 0x140016ad6
test rbp, rbp
je 0x140016ad6
lea r12d, [r14 + 1]
lea rbx, [r12*4]
cmp rdi, rbx
jb 0x140016ad6
mov ecx, 0x20
call fcn.14010b888
mov r15, rax
xorps xmm0, xmm0
movups xmmword [rax], xmm0
mov qword [rax + 0x10], 0
test r12d, r12d
je 0x140016b1c
mov rcx, rbx
call fcn.14010b888
mov rdi, rax
mov qword [r15], rax
lea rax, [rax + r12*4]
mov qword [r15 + 0x10], rax
test rbx, rbx
je 0x1400166e1
mov rcx, rdi
xor edx, edx
mov r8, rbx
call fcn.140110bf0
add rdi, rbx
mov qword [r15 + 8], rdi
mov r8, r15
add r8, 0x18
mov qword [r15 + 0x18], 0
xor eax, eax
nop word cs:[rax + rax]
test rax, rax
je 0x140016724
mov ecx, dword [rbp + rax*4]
cmp ecx, dword [rbp + rax*4 - 4]
jle 0x140016abd
mov rdx, qword [r15]
mov dword [rdx + rax*4], ecx
add rax, 1
cmp r12, rax
jne 0x140016700
jmp 0x140016729
mov ecx, dword [rbp]
jmp 0x140016713
mov rcx, qword [r15]
mov rax, qword [r15 + 8]
mov r9, rax
sub r9, rcx
je 0x140016b34
mov rdx, r9
shr rdx, 2
mov rbp, rcx
not rbp
add rbp, rax
jne 0x140016752
xor ebx, ebx
jmp 0x140016798
mov rbp, r9
and rbp, 0xfffffffffffffffe
xor ebx, ebx
lea rax, [0x14015d620]
nop word cs:[rax + rax]
nop dword [rax]
movzx edi, dl
movzx esi, byte [rcx + rbx]
xor esi, edi
shr edx, 8
xor edx, dword [rax + rsi*4]
movzx edi, dl
movzx esi, byte [rcx + rbx + 1]
xor esi, edi
shr edx, 8
xor edx, dword [rax + rsi*4]
add rbx, 2
cmp rbp, rbx
jne 0x140016770
test r9b, 1
je 0x1400167b4
movzx eax, dl
movzx ebp, byte [rcx + rbx]
xor ebp, eax
lea rax, [0x14015d620]
shr edx, 8
xor edx, dword [rax + rbp*4]
mov dword [r8], edx
cmp edx, dword [rsp + 0x5c]
jne 0x140016ac0
mov rcx, r15
call fcn.140016b90
mov r15, rax
mov eax, dword [r13 + 0x1c]
test r14d, r14d
mov r8, qword [rsp + 0x60]
je 0x140016ad6
lea rsi, [r14*8]
test eax, eax
jne 0x140016975
lea rax, [r13 + 0x1c]
movabs rcx, 0xaaaaaaaaaaaaaaaa
mov qword [rsp + 0xa0], rcx
movaps xmm0, xmmword [0x140146a10]
movaps xmmword [rsp + 0x90], xmm0
mov rbp, qword [r8 + 8]
mov qword [rsp + 0x90], rbp
mov dword [rsp + 0x98], 0x53215531
cmp r14d, 0x1fffffff
ja 0x140016b3b
mov ebx, esi
lea edx, [r14*4]
mov dword [rsp + 0x9c], ebx
mov dword [rsp + 0xa0], 0
mov byte [rsp + 0xa4], 0
mov qword [rsp + 0xa8], rax
movaps xmmword [rsp + 0x70], xmm0
mov qword [rsp + 0x80], rcx
mov qword [rsp + 0x70], rbp
mov dword [rsp + 0x78], 0x53215531
cmp r14d, 0x1fffffff
ja 0x140016b47
mov dword [rsp + 0x7c], esi
mov dword [rsp + 0x80], edx
mov byte [rsp + 0x84], 0
mov qword [rsp + 0x88], rax
lea rsi, [r13 + 0x50]
mov eax, dword [rsp + 0x58]
test eax, eax
jne 0x14001690b
lea rdi, [r13 + 0x38]
add r13, 0x20
mov ecx, 0x28
call fcn.14010b888
mov rbx, rax
mov qword [rsp + 0x40], rdi
mov qword [rsp + 0x38], r13
lea rax, [rsp + 0x70]
mov qword [rsp + 0x30], rax
lea rax, [rsp + 0x90]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r15
mov rcx, rbx
mov rdx, rsi
call fcn.140009b10
mov r15, qword [rsp + 0x48]
mov eax, dword [rsp + 0x54]
or dword [rbx + 0x10], eax
mov qword [r15], rbx
jmp 0x140016ae2
cmp eax, 1
jne 0x1400169ee
lea rdi, [r13 + 0x38]
add r13, 0x20
mov ecx, 0x40
call fcn.14010b888
mov rbx, rax
mov qword [rsp + 0x40], rdi
mov qword [rsp + 0x38], r13
lea rax, [rsp + 0x70]
mov qword [rsp + 0x30], rax
lea rax, [rsp + 0x90]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r15
mov rcx, rbx
mov rdx, rsi
call fcn.140009b10
lea rax, [0x140149038]
mov qword [rbx], rax
lea rax, [rbx + 0x30]
xorps xmm0, xmm0
movups xmmword [rbx + 0x30], xmm0
mov qword [rbx + 0x28], rax
jmp 0x1400168f7
xor edx, edx
cmp eax, 0x40
jb 0x1400169e0
mov ecx, eax
and ecx, 7
jne 0x1400169e0
mov rcx, qword [r8 + 8]
lea edx, [rax + 0x10]
mov ebp, dword [rcx + 0x14]
cmp edx, ebp
ja 0x140016b6f
mov rbx, qword [rcx + 8]
mov edx, dword [rbx + rax + 4]
cmp edx, 0xc8799269
jne 0x140016b6f
add rbx, rax
mov edx, dword [rbx]
cmp edx, 0x10
jb 0x140016b6f
mov edi, dword [rbx]
add edi, eax
xor edx, edx
test rbx, rbx
je 0x1400169e0
cmp edi, ebp
ja 0x1400169e0
mov edx, dword [rbx]
cmp rdx, 0x11
jb 0x140016b65
add eax, edx
cmp eax, ebp
ja 0x140016b65
add rdx, 0xfffffffffffffff0
cmp rdx, rsi
jae 0x1400167ee
jmp 0x140016ad6
cmp eax, 2
jne 0x140016a78
lea rax, [r13 + 0x38]
add r13, 0x20
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x28], r13
lea rax, [rsp + 0x70]
mov qword [rsp + 0x20], rax
lea rbx, [rsp + 0x68]
lea r9, [rsp + 0x90]
mov rcx, rbx
mov rdx, rsi
mov r8, r15
call fcn.140017020
mov rbx, qword [rbx]
test rbx, rbx
mov r15, qword [rsp + 0x48]
jne 0x1400168fc
xor ebx, ebx
jmp 0x140016903
movabs rax, 0xaaaaaaaaaaaaaaaa
mov qword [r15], rax
lea rax, [r13 + 0x38]
lea r9, [r13 + 0x20]
lea r8, [r13 + 0x50]
mov qword [rsp + 0x20], rax
mov rcx, r15
call fcn.140016fc0
mov rax, qword [r15]
mov ecx, dword [r13 + 4]
or dword [rax + 0x10], ecx
jmp 0x140016ae2
cmp eax, 3
jne 0x140016b76
lea rax, [r13 + 0x38]
add r13, 0x20
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x28], r13
lea rax, [rsp + 0x70]
mov qword [rsp + 0x20], rax
lea rbx, [rsp + 0x68]
lea r9, [rsp + 0x90]
mov rcx, rbx
mov rdx, rsi
mov r8, r15
call fcn.140017300
jmp 0x140016a2e
mov rcx, qword [r15]
test rcx, rcx
je 0x140016ace
mov qword [r15 + 8], rcx
call fcn.14010b880
mov rcx, r15
call fcn.14010b880
mov r15, qword [rsp + 0x48]
mov qword [r15], 0
mov rcx, qword [rsp + 0xb0]
xor rcx, rsp
call fcn.14010e4a0
mov rax, r15
add rsp, 0xb8
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
xor ebx, ebx
jmp 0x1400165ff
call fcn.140001ea0
xor edi, edi
jmp 0x140016660
mov r8, r15
add r8, 0x18
mov qword [r15 + 0x18], 0
xor ecx, ecx
xor eax, eax
jmp 0x140016730
xor edx, edx
jmp 0x1400167b4
int3
int3
call fcn.140001ea0
mov r8, qword [rsp + 0x60]
xor edx, edx
jmp 0x1400169e0
xor ebx, ebx
mov r15, qword [rsp + 0x48]
jmp 0x140016903