Function at 0x14003c120
Capabilities:
Get thread local storage value

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0xe8
mov rbx, rdx
mov rsi, rcx
mov rax, qword [0x140287028]
xor rax, rsp
mov qword [rsp + 0xe0], rax
mov rax, qword [0x140299c28]
test rax, rax
je 0x14003c3cd
test byte [rax], 0x19
jne 0x14003c7db
cmp byte [rsi + 0xc], 0
jne 0x14003c5c4
movabs rdi, 0x7ffffffffffffff8
mov r15, qword [rsi]
mov r14, qword [r15 + 0x10]
mov rax, qword [r15 + 0x18]
cmp r14, rax
jb 0x14003c8ba
mov rdx, qword [r15 + 8]
sub r14, rdx
sar r14, 3
lea r8, [r14 + 1]
mov rcx, r8
shr rcx, 0x3d
jne 0x14003c8d6
movabs rcx, 0x1fffffffffffffff
sub rax, rdx
mov r12, rax
sar r12, 2
cmp r12, r8
cmovbe r12, r8
cmp rax, rdi
cmovae r12, rcx
test r12, r12
je 0x14003c8db
cmp r12, rcx
ja 0x14003c8e2
lea rcx, [r12*8]
call fcn.140172a4c
shl r14, 3
add r14, rax
je 0x14003c8e7
lea r13, [rax + r12*8]
mov qword [r14], rsi
lea r12, [r14 + 8]
mov rdx, qword [r15 + 8]
mov r8, qword [r15 + 0x10]
sub r8, rdx
sub r14, r8
mov rcx, r14
call fcn.140177150
mov rcx, qword [r15 + 8]
mov qword [r15 + 8], r14
mov qword [r15 + 0x10], r12
mov qword [r15 + 0x18], r13
test rcx, rcx
jne 0x14003c7cd
sub r12, qword [r15 + 8]
cmp r12, 9
jae 0x14003c649
mov byte [rsi + 0xd], 1
mov qword [rsp + 0x60], 0
mov ecx, 8
call fcn.140172a4c
mov dword [rax], 0
mov byte [rax + 4], 0
mov qword [rsp + 0x68], rax
test rax, rax
je 0x14003c26c
lock inc dword [rax]
lea rax, [rsp + 0x60]
mov qword [rax + 0x10], rax
mov eax, dword [0x140299c48]
mov ecx, dword [0x140296f94]
mov rdx, qword gs:[0x58]
mov rcx, qword [rdx + rcx*8]
cmp eax, dword [rcx + 4]
jg 0x14003c3e5
mov ecx, dword [0x140288f70]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
and rax, 0xfffffffffffffffc
je 0x14003c2d0
mov rcx, qword [0x140299c38]
shl rcx, 4
mov edx, dword [rax + rcx + 8]
cmp edx, dword [0x140299c40]
jne 0x14003c2d0
mov r12, qword [rax + rcx]
test r12, r12
jne 0x14003c967
mov rcx, qword [rsi]
mov rax, qword [rcx + 0x10]
sub rax, qword [rcx + 8]
mov dl, 1
cmp rax, 8
jne 0x14003c7c1
mov rax, qword [rcx]
mov rax, qword [rax + 8]
add rdi, 7
mov r8, rdi
call qword [case.0x1401d7990.0]
mov byte [rsi + 0xd], 0
mov bpl, byte [0x140289820]
test bpl, 0x19
jne 0x14003c8ed
movabs rdi, 0xaaaaaaaaaaaaaaaa
xor ebx, ebx
mov r14, rdi
mov r15, qword [rsi]
mov rax, qword [r15 + 8]
mov rcx, qword [r15 + 0x10]
cmp rax, rcx
je 0x14003c8ea
add rcx, 0xfffffffffffffff8
mov qword [r15 + 0x10], rcx
cmp rax, rcx
jne 0x14003c44b
test bpl, 0x19
jne 0x14003c94b
mov qword [rsp + 0x70], 0
mov rax, qword [rsp + 0x68]
mov byte [rax + 4], 1
mov rcx, qword [rsp + 0x68]
test rcx, rcx
je 0x14003c374
lock dec dword [rcx]
jne 0x14003c374
call fcn.140172a44
mov rcx, qword [rsp + 0x60]
test rcx, rcx
jne 0x14003c3bc
mov rax, qword [0x140299c30]
test rax, rax
je 0x14003c433
test byte [rax], 0x19
jne 0x14003c7eb
mov rcx, qword [rsp + 0xe0]
xor rcx, rsp
call fcn.1401756e0
nop
add rsp, 0xe8
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
lock dec dword [rcx]
jne 0x14003c37e
mov rax, qword [rcx + 0x10]
call qword [case.0x1401d7990.0]
jmp 0x14003c37e
lea rcx, [0x140265e79]
call fcn.1400f8c70
mov qword [0x140299c28], rax
jmp 0x14003c15b
lea rcx, [0x140299c48]
call fcn.140172b08
cmp dword [0x140299c48], 0xffffffff
jne 0x14003c29a
mov qword [0x140299c40], 0
lea rcx, [0x140299c38]
mov qword [0x140299c38], 0xffffffffffffffff
xor edx, edx
call fcn.140002400
lea rcx, [0x140299c48]
call fcn.140172aa8
jmp 0x14003c29a
lea rcx, [0x140265e79]
call fcn.1400f8c70
mov qword [0x140299c30], rax
jmp 0x14003c38e
mov rax, qword [rsi]
mov rcx, qword [rax + 0x20]
cmp rcx, qword [rax + 0x28]
je 0x14003ca70
lea rcx, [rax + 0x20]
lea rdx, [rsp + 0xb0]
mov qword [rdx + 0x10], rcx
lea rcx, [rax + 0x38]
mov qword [rdx + 8], rcx
mov rcx, qword [rax + 0x38]
mov qword [rdx], rcx
mov qword [rcx + 8], rdx
mov qword [rax + 0x38], rdx
mov qword [rdx + 0x18], 0
mov rcx, 0xffffffffffffffff
cmp dword [rax + 0x50], 0
jne 0x14003caef
mov qword [rsp + 0xd0], rcx
mov rdx, qword [rsp + 0xc0]
mov r8, qword [rdx + 8]
sub r8, qword [rdx]
sar r8, 3
cmp r8, rcx
cmovae r8, rcx
xor eax, eax
test r8, r8
je 0x14003c4e7
mov r9, qword [rdx]
mov r10, qword [rdx + 8]
sub r10, r9
sar r10, 3
cmp r10, rax
jbe 0x14003cb8b
cmp qword [r9 + rax*8], 0
je 0x14003cb8e
xorps xmm0, xmm0
movaps xmmword [rsp + 0x90], xmm0
movaps xmmword [rsp + 0x80], xmm0
mov qword [rsp + 0xa0], 0
test rdx, rdx
je 0x14003caa5
mov r8, qword [rdx]
mov rdx, qword [rdx + 8]
sub rdx, r8
sar rdx, 3
cmp rdx, rcx
cmovb rcx, rdx
cmp rax, rcx
je 0x14003caa5
cmp rdx, rax
jbe 0x14003cb00
mov rcx, qword [r8 + rax*8]
mov rax, qword [rcx]
mov rax, qword [rax + 8]
call qword [case.0x1401d7990.0]
mov rdx, qword [rsp + 0xc0]
test rdx, rdx
je 0x14003caa5
mov rax, qword [rsp + 0xc8]
mov rcx, qword [rsp + 0xd0]
inc rax
mov qword [rsp + 0xc8], rax
mov r8, qword [rdx + 8]
sub r8, qword [rdx]
sar r8, 3
cmp r8, rcx
cmovae r8, rcx
cmp rax, r8
jae 0x14003c50f
mov r9, qword [rdx]
mov r10, qword [rdx + 8]
sub r10, r9
sar r10, 3
cmp r10, rax
jbe 0x14003cb03
cmp qword [r9 + rax*8], 0
jne 0x14003c50f
inc rax
mov qword [rsp + 0xc8], rax
cmp r8, rax
jne 0x14003c58a
mov rax, r8
jmp 0x14003c50f
test byte [0x140289820], 0x19
je 0x14003c37e
lea rdi, [rsp + 0xb0]
mov rcx, rdi
call fcn.140158d50
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
xor ecx, ecx
mov qword [rsp + 0x40], rcx
mov qword [rsp + 0x38], rdi
mov dword [rsp + 0x30], eax
mov qword [rsp + 0x28], rsi
mov qword [rsp + 0x20], rcx
mov dword [rsp + 0x48], 0x880
lea rdx, [0x140289820]
lea r8, str.RunLoop_ExitedEarly
mov cl, 0x58
xor r9d, r9d
call fcn.1400efe20
cmp byte [0x140289820], 0
je 0x14003c37e
lea rcx, [0x140289820]
lea rdx, str.RunLoop_ExitedEarly
mov r8, rax
call fcn.1400ef640
jmp 0x14003c37e
mov rax, qword [rsi]
mov rcx, qword [rax + 0x20]
cmp rcx, qword [rax + 0x28]
je 0x14003cb06
lea rcx, [rax + 0x20]
lea rdx, [rsp + 0xb0]
mov qword [rdx + 0x10], rcx
lea rcx, [rax + 0x38]
mov qword [rdx + 8], rcx
mov rcx, qword [rax + 0x38]
mov qword [rdx], rcx
mov qword [rcx + 8], rdx
mov qword [rax + 0x38], rdx
mov qword [rdx + 0x18], 0
mov rcx, 0xffffffffffffffff
cmp dword [rax + 0x50], 0
jne 0x14003cb74
mov qword [rsp + 0xd0], rcx
mov rdx, qword [rsp + 0xc0]
mov r8, qword [rdx + 8]
sub r8, qword [rdx]
sar r8, 3
cmp r8, rcx
cmovae r8, rcx
xor eax, eax
test r8, r8
je 0x14003c6e5
mov r9, qword [rdx]
mov r10, qword [rdx + 8]
sub r10, r9
sar r10, 3
cmp r10, rax
jbe 0x14003cbaa
cmp qword [r9 + rax*8], 0
je 0x14003cbad
xorps xmm0, xmm0
movaps xmmword [rsp + 0x90], xmm0
movaps xmmword [rsp + 0x80], xmm0
mov qword [rsp + 0xa0], 0
test rdx, rdx
je 0x14003cb3b
mov r8, qword [rdx]
mov rdx, qword [rdx + 8]
sub rdx, r8
sar rdx, 3
cmp rdx, rcx
cmovb rcx, rdx
cmp rax, rcx
je 0x14003cb3b
cmp rdx, rax
jbe 0x14003cb85
mov rcx, qword [r8 + rax*8]
mov rax, qword [rcx]
mov rax, qword [rax]
call qword [case.0x1401d7990.0]
mov rdx, qword [rsp + 0xc0]
test rdx, rdx
je 0x14003cb3b
mov rax, qword [rsp + 0xc8]
mov rcx, qword [rsp + 0xd0]
inc rax
mov qword [rsp + 0xc8], rax
mov r8, qword [rdx + 8]
sub r8, qword [rdx]
sar r8, 3
cmp r8, rcx
cmovae r8, rcx
cmp rax, r8
jae 0x14003c70d
mov r9, qword [rdx]
mov r10, qword [rdx + 8]
sub r10, r9
sar r10, 3
cmp r10, rax
jbe 0x14003cb88
cmp qword [r9 + rax*8], 0
jne 0x14003c70d
inc rax
mov qword [rsp + 0xc8], rax
cmp r8, rax
jne 0x14003c787
mov rax, r8
jmp 0x14003c70d
cmp dword [rsi + 8], 1
sete dl
jmp 0x14003c2e7
call fcn.140172a44
mov r12, qword [r15 + 0x10]
jmp 0x14003c230
mov rcx, rax
mov rdx, rbx
call fcn.1401d5710
jmp 0x14003c164
movaps xmm0, xmmword [0x140261350]
lea rsi, [rsp + 0x60]
movaps xmmword [rsi + 0x10], xmm0
movaps xmmword [rsi], xmm0
xorps xmm0, xmm0
movups xmmword [rsp + 0x20], xmm0
mov byte [rsp + 0x30], 0
lea r9, [0x1402619f4]
mov rcx, rsi
mov dl, 0x45
mov r8, rax
call fcn.1400f8a80
mov rbx, qword [rsi]
test rbx, rbx
je 0x14003ca66
lea rsi, [rsp + 0x60]
mov bpl, byte [rsi + 0x18]
mov r14, qword [rsi + 8]
xor r15d, r15d
lea rdi, [rsp + 0x80]
mov rcx, rdi
xor edx, edx
call fcn.140170670
mov qword [rdi + 8], rbx
mov qword [rdi + 0x10], r14
mov qword [rdi + 0x18], r15
mov byte [rdi + 0x20], bpl
mov rax, qword [rdi]
lea rcx, [rsp + 0xb0]
mov qword [rcx], rax
mov qword [rdi], r15
mov rax, qword [rdi + 8]
mov qword [rcx + 8], rax
mov rax, qword [rdi + 0x10]
mov qword [rcx + 0x10], rax
mov eax, dword [rdi + 0x11]
mov dword [rcx + 0x11], eax
movzx eax, word [rdi + 0x15]
mov word [rcx + 0x15], ax
mov al, byte [rdi + 0x17]
mov byte [rcx + 0x17], al
mov rax, qword [rdi + 0x18]
mov qword [rcx + 0x18], rax
mov al, byte [rdi + 0x20]
mov byte [rcx + 0x20], al
call fcn.1400f8a90
mov rcx, rdi
call fcn.1400f8a90
mov rcx, rsi
call fcn.1400e5cf0
jmp 0x14003c397
test r14, r14
je 0x14003cbe1
mov qword [r14], rsi
add r14, 8
mov qword [r15 + 0x10], r14
mov r12, r14
jmp 0x14003c230
call fcn.14018c460
xor eax, eax
jmp 0x14003c1e9
call fcn.1401b3360
int3
int3
lea rdi, [rsp + 0xb0]
mov rcx, rdi
call fcn.140158d50
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
xor ecx, ecx
mov qword [rsp + 0x40], rcx
mov qword [rsp + 0x38], rdi
mov dword [rsp + 0x30], eax
mov qword [rsp + 0x28], rsi
mov qword [rsp + 0x20], rcx
mov dword [rsp + 0x48], 0x880
lea rbx, [0x140289820]
lea rdi, str.RunLoop_Exited
mov cl, 0x58
mov rdx, rbx
mov r8, rdi
xor r9d, r9d
call fcn.1400efe20
mov r14, rax
jmp 0x14003c31f
cmp byte [rbx], 0
je 0x14003c34e
mov rcx, rbx
mov rdx, rdi
mov r8, r14
call fcn.1400ef640
jmp 0x14003c34e
lea r14, [rsp + 0x68]
lea r15, [r12 + 8]
mov rax, qword [0x14028a5a0]
and rax, rsi
cmp rax, qword [0x14028a588]
jne 0x14003c98c
mov rcx, rsi
call fcn.1400eaf60
lea rdx, [rsp + 0xb0]
mov qword [rdx], rsi
lea rax, [0x1401d56a0]
lea rcx, [rsp + 0x80]
mov qword [rcx], rax
mov r8, rbx
mov r9, r15
call fcn.1401d59c0
mov rbx, rax
mov rcx, r14
call fcn.1401612b0
lea r14, [rsp + 0x60]
mov rcx, r14
call fcn.140171130
mov rcx, qword [r14]
mov qword [r14], rbx
test rcx, rcx
jne 0x14003cbc9
mov rcx, qword [rsp + 0xb0]
mov rax, qword [0x14028a5a0]
and rax, rcx
cmp rax, qword [0x14028a588]
jne 0x14003c9fb
call fcn.1400e5d90
mov r14, qword [rsi + 0x18]
mov rbx, qword [r12]
cmp qword [rsp + 0x60], 0
mov qword [rsp + 0x58], 0
je 0x14003ca23
lea rcx, [rsp + 0x60]
lea rdx, [rsp + 0x58]
call fcn.14006d2d0
lea rdx, [0x140265e1c]
lea r8, str....._base_run_loop.cc
lea r15, [rsp + 0xb0]
mov rcx, r15
mov r9d, 0x86
call fcn.14011b9f0
mov rax, qword [r14]
mov rax, qword [rax]
lea r8, [rsp + 0x58]
mov rcx, r14
mov rdx, r15
mov r9, rbx
call qword [case.0x1401d7990.0]
jmp 0x14003c2d0
lea rcx, [rsp + 0x60]
jmp 0x14003c8b0
xorps xmm0, xmm0
movaps xmmword [rsp + 0xc0], xmm0
movaps xmmword [rsp + 0xb0], xmm0
xor eax, eax
mov qword [rsp + 0xd0], rax
mov qword [rsp + 0xa0], rax
movaps xmmword [rsp + 0x90], xmm0
movaps xmmword [rsp + 0x80], xmm0
lea rcx, [rsp + 0x80]
call fcn.140002540
lea rcx, [rsp + 0xb0]
call fcn.140002540
mov rax, qword [r15 + 0x10]
cmp qword [r15 + 8], rax
je 0x14003caec
mov rax, qword [rax - 8]
cmp byte [rax + 0xc], 0
je 0x14003c344
mov rcx, qword [rsi]
mov rax, qword [rcx]
mov rax, qword [rax + 0x10]
call qword [case.0x1401d7990.0]
jmp 0x14003c344
int3
mov rcx, qword [rax + 0x28]
sub rcx, qword [rax + 0x20]
sar rcx, 3
jmp 0x14003c49c
int3
int3
xorps xmm0, xmm0
movaps xmmword [rsp + 0xc0], xmm0
movaps xmmword [rsp + 0xb0], xmm0
xor eax, eax
mov qword [rsp + 0xd0], rax
mov qword [rsp + 0xa0], rax
movaps xmmword [rsp + 0x90], xmm0
movaps xmmword [rsp + 0x80], xmm0
lea rcx, [rsp + 0x80]
call fcn.140002540
lea rcx, [rsp + 0xb0]
call fcn.140002540
cmp dword [rsi + 8], 1
jne 0x14003c23e
mov rcx, qword [rsi]
mov rax, qword [rcx]
mov rax, qword [rax + 0x18]
call qword [case.0x1401d7990.0]
jmp 0x14003c23e
mov rcx, qword [rax + 0x28]
sub rcx, qword [rax + 0x20]
sar rcx, 3
jmp 0x14003c69a
int3
int3
int3
inc rax
mov qword [rsp + 0xc8], rax
cmp r8, rax
jne 0x14003c4c5
mov rax, r8
jmp 0x14003c4e7
int3
inc rax
mov qword [rsp + 0xc8], rax
cmp r8, rax
jne 0x14003c6c3
mov rax, r8
jmp 0x14003c6e5
lock dec dword [rcx]
jne 0x14003c9db
mov rax, qword [rcx + 0x10]
call qword [case.0x1401d7990.0]
jmp 0x14003c9db
int3