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

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x38
mov rsi, qword [rcx + 0x20]
mov ebp, dword [rcx + 0x7c]
mov r12, qword [rsi + 0x48]
mov rbx, rcx
and ebp, 0x20000
je 0x1400ffef0
mov eax, dword [rsi + 0x18]
test r12, r12
je 0x1401000e0
test eax, 0x200000
je 0x140100128
mov rdi, qword [rcx + 0x48]
mov r14d, dword [rsi + 0x34]
test rdi, rdi
je 0x140100162
mov eax, dword [rdi + 8]
cmp eax, r14d
jne 0x140100298
mov rax, qword [rdi]
cmp rax, 0xffffffffffffffff
jne 0x140100298
xor edx, edx
nop dword [rax]
mov rax, qword [r12 + 8]
mov qword [rdi], rax
mov rcx, qword [rdi]
mov rax, qword [r12 + 8]
cmp rcx, rax
jne 0x1400ffec0
mov rax, qword [rdi]
mov qword [rbx + 0x48], rdi
mov qword [rbx + 0x18], rax
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
jmp 0x1400fff99
test r12, r12
je 0x1401000a0
mov rcx, qword [rsi + 0xf8]
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
test eax, eax
jne 0x140100140
mov rax, qword [r12 + 8]
mov rdx, rax
and edx, 1
mov rdi, qword [rsi + rdx*8 + 0x50]
add rax, 1
mov qword [rbx + 8], 0
mov rdx, qword [rsi + 0xa0]
mov qword [rbx + 0x18], rax
mov rcx, qword [rbx + 0x60]
mov rax, qword [rsi + 0xd8]
mov qword [rbx + 0x30], 0
mov dword [rbx + 0x38], 0
mov qword [rbx + 0x48], rax
mov dword [rbx + 0x80], 0x1ffff
mov qword [rax], 0
mov rax, qword [rsi + 0xd0]
mov qword [rbx + 0x28], rax
mov qword [rax], 0
mov eax, dword [rsi + 0x30]
mov qword [rbx + 0x40], 0
mov qword [rsi + 0x68], rbx
lea r8, [rax*4]
call sym.memcpy
xor edx, edx
movdqu xmm1, xmmword [rdi + 0x18]
mov rax, qword [rbx + 0x58]
mov ecx, 2
mov r8d, 0x60
movups xmmword [rax], xmm1
movdqu xmm2, xmmword [rdi + 0x28]
movups xmmword [rax + 0x10], xmm2
movdqu xmm3, xmmword [rdi + 0x38]
movd xmm2, ebp
movups xmmword [rax + 0x20], xmm3
movdqu xmm4, xmmword [rdi + 0x48]
movups xmmword [rax + 0x30], xmm4
movdqu xmm5, xmmword [rdi + 0x58]
movups xmmword [rax + 0x40], xmm5
movdqu xmm1, xmmword [rdi + 0x68]
movups xmmword [rax + 0x50], xmm1
mov rax, qword [rdi + 0x78]
add rax, 1
mov qword [rbx + 0x10], rax
mov eax, dword [rsi + 0x2c]
movd xmm0, eax
punpckldq xmm0, xmm2
movq qword [rbx + 0x78], xmm0
cmp eax, 2
jbe 0x140100042
nop word [rax + rax]
mov rax, qword [rsi + 0x98]
mov r9, qword [rbx + 0x58]
movzx eax, word [rax + rcx*2]
mov r10d, eax
sar ax, 0xf
and r10w, 0x7fff
and eax, 0x1a
mov word [r9 + r8 + 4], r10w
mov r9, qword [rbx + 0x70]
add r8, 0x30
mov byte [r9 + rcx], al
add rcx, 1
cmp ecx, dword [rbx + 0x78]
jb 0x140100008
mov rax, qword [rbx + 0x70]
mov byte [rax + 1], 0x18
mov rax, qword [rbx + 0x70]
mov byte [rax], 8
mov eax, dword [rsi + 0x18]
test eax, eax
js 0x140100090
mov rax, qword [rbx + 0x10]
xor r15d, r15d
cmp qword [rsi + 0x88], rax
jae 0x140100079
mov r15d, 0xffff87bf
or edx, 5
mov rcx, rbx
call sym.mdb_txn_end
mov eax, r15d
add rsp, 0x38
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov r15d, 0xffff87b5
jmp 0x14010006e
mov rax, qword [rsi + 0x50]
mov rcx, qword [rax + 0x80]
mov rax, qword [rsi + 0x58]
mov rdx, qword [rax + 0x80]
mov eax, dword [rsi + 0x18]
shr eax, 0x19
cmp rcx, rdx
setb dl
xor rax, rdx
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
mov rax, qword [rdi + 0x80]
jmp 0x1400fff23
mov rdx, qword [rsi + 0x50]
shr eax, 0x19
mov rcx, qword [rdx + 0x80]
mov rdx, qword [rsi + 0x58]
mov rdx, qword [rdx + 0x80]
cmp rcx, rdx
setb dl
xor rax, rdx
xor edx, edx
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
mov rax, qword [rdi + 0x80]
mov qword [rbx + 0x48], 0
mov qword [rbx + 0x18], rax
jmp 0x1400fff99
mov ecx, dword [rsi + 0xa8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rdi, rax
jmp 0x1400ffe91
mov rdx, qword [rsi + 0xf8]
mov r8d, eax
mov rcx, rsi
call fcn.140373fd0
mov r15d, eax
test eax, eax
je 0x1400fff13
jmp 0x140100079
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov edx, dword [rsi + 0xe8]
mov r10, qword [rsi + 0xf0]
mov r13d, eax
test edx, edx
jne 0x140100186
mov dword [rsi + 0xe8], 1
mov qword [rsp + 0x28], r10
mov rcx, r10
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov r10, qword [rsp + 0x28]
test eax, eax
jne 0x140100270
mov r8d, dword [r12 + 0x10]
mov r9d, dword [rsi + 0x24]
xor eax, eax
test r8d, r8d
jne 0x1401001cc
jmp 0x1401002e6
add eax, 1
cmp r8d, eax
je 0x1401002a3
mov edx, eax
lea rdi, [rdx + 1]
shl rdi, 6
add rdi, r12
mov ecx, dword [rdi + 8]
test ecx, ecx
jne 0x1401001c0
cmp eax, r9d
je 0x140100309
mov rcx, rdx
shl rcx, 6
add rcx, r12
mov dword [rcx + 0x48], 0
mov qword [rcx + 0x40], 0xffffffffffffffff
mov dword [rcx + 0x4c], r13d
cmp eax, r8d
je 0x1401002d0
shl rdx, 6
mov dword [rsi + 0x28], r8d
mov rcx, r10
lea r13, [r12 + rdx]
mov dword [r13 + 0x48], r14d
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov edx, 0x200000
test byte [rsi + 0x1a], 0x20
jne 0x1400ffec0
mov ecx, dword [rsi + 0xa8]
mov rdx, rdi
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
test eax, eax
jne 0x1400ffeb7
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov r15d, eax
test eax, eax
je 0x1400ffeb7
mov dword [r13 + 0x48], 0
jmp 0x140100079
mov rdx, r10
mov r8d, eax
mov rcx, rsi
mov qword [rsp + 0x28], r10
call fcn.140373fd0
mov r10, qword [rsp + 0x28]
test eax, eax
mov r15d, eax
je 0x1401001a6
jmp 0x140100079
mov r15d, 0xffff87c1
jmp 0x140100079
cmp r8d, r9d
je 0x140100309
mov eax, r8d
lea rdi, [rax + 1]
shl rax, 6
add rax, r12
shl rdi, 6
mov dword [rax + 0x48], 0
add rdi, r12
mov qword [rax + 0x40], 0xffffffffffffffff
mov dword [rax + 0x4c], r13d
lea edx, [r8 + 1]
mov eax, r8d
mov dword [r12 + 0x10], edx
mov r8d, edx
mov edx, eax
jmp 0x14010020f
test r9d, r9d
je 0x140100309
mov dword [r12 + 0x48], 0
lea rdi, [r12 + 0x40]
mov qword [r12 + 0x40], 0xffffffffffffffff
mov dword [r12 + 0x4c], r13d
jmp 0x1401002d0
mov rcx, r10
mov r15d, 0xffff87ba
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
jmp 0x140100079