Function at 0x14015fc30
Capabilities:
Get thread local storage value
Set thread local storage value

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x68
mov qword [rsp + 0x60], r9
mov qword [rsp + 0x58], r8
mov byte [rsp + 0x2f], dl
mov rsi, rcx
mov rax, qword [rcx]
lea r14, [rsp + 0x32]
lea r12, [0x140216128]
xor r13d, r13d
lea rdi, [0x141a5cd68]
lea rbx, [rsp + 0x30]
mov r15, rax
test rax, rax
jne 0x14015fca6
jmp 0x14015fc8b
cmp byte [rsp + 0x2f], 0
je 0x1401600df
mov rax, r15
mov ecx, 2
lock cmpxchg qword [rsi], rcx
je 0x140160024
mov r15, rax
test rax, rax
je 0x14015fc8b
cmp r15, 1
je 0x14015fc80
cmp r15, 3
je 0x1401600ce
mov eax, r15d
and eax, 3
cmp eax, 2
je 0x14015fcdf
jmp 0x1401600df
mov eax, r15d
and eax, 3
cmp eax, 2
jne 0x140160010
mov ecx, dword [0x140216140]
test ecx, ecx
je 0x14015fd28
dec ecx
call sub.KERNEL32.dll_TlsGetValue
cmp rax, 2
jb 0x14015fd04
mov rbp, rax
cmp qword [rax + 8], 0
jne 0x14015fde0
mov ecx, dword [0x140216140]
test ecx, ecx
je 0x14015fd3f
dec ecx
call sub.KERNEL32.dll_TlsGetValue
test rax, rax
je 0x14015fd60
mov rbp, rax
cmp rax, 1
jne 0x14015fda2
jmp 0x1401600df
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
call sub.KERNEL32.dll_TlsGetValue
cmp rax, 2
jae 0x14015fcf6
jmp 0x14015fd04
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
call sub.KERNEL32.dll_TlsGetValue
test rax, rax
jne 0x14015fd1a
nop word cs:[rax + rax]
movzx eax, byte [0x141ada129]
mov edx, 0x18
xor ecx, ecx
call fcn.14014fee0
test rax, rax
je 0x1401600df
invalid
mov rbp, rax
mov qword [rax], r12
mov qword [rax + 8], 0
mov ecx, dword [0x140216140]
test ecx, ecx
je 0x14015fe43
dec ecx
mov rdx, rbp
call sub.KERNEL32.dll_TlsSetValue
invalid
invalid
mov rcx, qword [rbp + 8]
mov rax, qword [rbp + 0x10]
mov qword [rsp + 0x48], rcx
mov qword [rsp + 0x50], rax
mov qword [rbp + 8], 1
mov qword [rbp + 0x10], 0
test rcx, rcx
je 0x14015fde0
test rax, rax
je 0x14015fde0
lock dec qword [rax]
jne 0x14015fde0
lea rcx, [rsp + 0x50]
call fcn.14015b900
nop
add rbp, 0x10
mov rcx, rbp
call fcn.14015d880
mov rax, qword [rbp]
lock inc qword [rax]
jle 0x1401600df
lea rcx, [r15 - 2]
mov qword [rsp + 0x30], rax
mov byte [rsp + 0x40], 0
mov qword [rsp + 0x38], rcx
mov rax, r15
lock cmpxchg qword [rsi], r14
je 0x14015ffe0
add dword [rax], eax
invalid
mov r15, rax
mov rax, qword [rsp + 0x30]
test rax, rax
je 0x14015fcd0
lock dec qword [rax]
jne 0x14015fcd0
mov rcx, rbx
call fcn.14015b900
jmp 0x14015fcd0
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
jmp 0x14015fd9a
mov ecx, dword [0x140216140]
test ecx, ecx
leave
je 0x14015fea9
dec ecx
call sub.KERNEL32.dll_TlsGetValue
loopne 0x14015fe76
add byte [rax - 0x7d], cl
clc
invalid
jb 0x14015fe85
mov r15, rax
cmp qword [rax + 8], 0
js 0x14015fe86
add byte [rdi], cl
test ebx, ebx
add byte [rax], al
add byte [rax], al
mov ecx, dword [0x140216140]
test ecx, ecx
je 0x14015fec0
dec ecx
call sub.KERNEL32.dll_TlsGetValue
test rax, rax
invalid
je 0x14015fee0
mov r15, rax
cmp rax, 1
cmp eax, 1
jne 0x14015ff22
jmp 0x1401600df
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
call sub.KERNEL32.dll_TlsGetValue
push rsp
loopne 0x14015febd
add byte [rax - 0x7d], cl
clc
add dh, byte [rbx - 0x47]
jmp 0x14015fe85
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
shr eax, 0x3d
loopne 0x14015fed4
add byte [rax - 0x7b], cl
invalid
jne 0x14015fe9b
nop word cs:[rax + rax]
movzx eax, byte [0x141ada129]
mov edx, 0x18
xor ecx, ecx
call fcn.14014fee0
test rax, rax
je 0x1401600df
add byte [rax], al
mov r15, rax
mov qword [rax], r12
and byte [rax - 0x39], cl
or byte [rax], al
add byte [rax], al
add byte [rax], al
mov ecx, dword [0x140216140]
test ecx, ecx
je 0x14015ffc3
dec ecx
mov rdx, r15
call sub.KERNEL32.dll_TlsSetValue
mov rcx, qword [r15 + 8]
mov rax, qword [r15 + 0x10]
mov qword [rsp + 0x48], rcx
mov qword [rsp + 0x50], rax
mov qword [r15 + 8], 1
mov qword [r15 + 0x10], 0
test rcx, rcx
je 0x14015ff60
test rax, rax
je 0x14015ff60
lock dec qword [rax]
jne 0x14015ff60
lea rcx, [rsp + 0x50]
call fcn.14015b900
nop
add r15, 0x10
mov rcx, r15
call fcn.14015d880
mov rbp, qword [r15]
lock inc qword [rbp]
jle 0x1401600df
mov qword [rsp + 0x48], rbp
lock dec byte [rbp + 0x28]
je 0x14015ffb0
lea r15, [rbp + 0x28]
nop dword [rax]
mov r8d, 1
mov rcx, r15
mov rdx, rdi
mov r9d, 0xffffffff
call sub.api_ms_win_core_synch_l1_2_0.dll_WaitOnAddress
mov al, 1
lock cmpxchg byte [r15], r13b
jne 0x14015ff90
lock dec qword [rbp]
jne 0x14015ffe0
lea rcx, [rsp + 0x48]
call fcn.14015b900
jmp 0x14015ffe0
mov rcx, r12
call fcn.14015aec0
mov ecx, eax
jmp 0x14015ff1a
movzx eax, byte [rsp + 0x40]
test al, al
je case.0x14015c7e9.488
mov rax, qword [rsp + 0x30]
test rax, rax
je 0x140160010
lock dec qword [rax]
jne 0x140160010
mov rcx, rbx
call fcn.14015b900
nop word cs:[rax + rax]
mov rax, qword [rsi]
mov r15, rax
test rax, rax
jne 0x14015fca6
jmp 0x14015fc8b
cmp r15, 1
mov qword [rsp + 0x30], 3
sete byte [rsp + 0x38]
lea rdx, [rsp + 0x30]
mov rcx, qword [rsp + 0x58]
mov rax, qword [rsp + 0x60]
call qword [rax + 0x20]
mov rax, qword [rsp + 0x30]
xchg qword [rsi], rax
mov ecx, eax
and ecx, 3
cmp ecx, 2
jne 0x1401600df
add rax, 0xfffffffffffffffe
je 0x1401600ce
lea rsi, [rsp + 0x30]
jmp 0x140160078
mov rax, rdi
test rdi, rdi
je 0x1401600ce
mov rdi, qword [rax + 8]
mov rcx, qword [rax]
mov qword [rax], 0
test rcx, rcx
je 0x1401600df
mov qword [rsp + 0x30], rcx
mov byte [rax + 0x10], 1
mov al, 1
xchg byte [rcx + 0x28], al
cmp al, 0xff
je 0x1401600b0
mov rax, qword [rsp + 0x30]
lock dec qword [rax]
jne 0x140160070
jmp 0x1401600c4
add rcx, 0x28
call fcn.1401f3560
mov rax, qword [rsp + 0x30]
lock dec qword [rax]
jne 0x140160070
mov rcx, rsi
call fcn.14015b900
jmp 0x140160070
add rsp, 0x68
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
ud2