Function at 0x4066ef
Capabilities:
Identify system language via api

Disassembly:
mov eax, 0x42f569
call fcn.0042e9c0
sub esp, 0x80
push ebx
push esi
push edi
push dword [0x438c50]
push 0x2b77ffff
call fcn.0040aac5
push dword [0x438c3c]
mov byte [0x438c1d], al
movsx eax, byte [0x438c1b]
push eax
call fcn.0040a96f
mov byte [0x438c19], al
movsx eax, word [0x438c2e]
push eax
movsx eax, word [0x438c2a]
push eax
call fcn.0040ab0e
add byte [0x438c1a], al
mov al, byte [0x438c1c]
add esp, 0x18
xor ebx, ebx
add al, 2
mov byte [ebp - 0xd], bl
push dword [0x432d28]
mov byte [0x438c1b], al
push ecx
mov ecx, esp
mov dword [ebp - 0x28], esp
push dword [ebp + 8]
call fcn.00409595
lea eax, [ebp - 0x20]
push eax
call fcn.0042e4fb
movsx eax, byte [0x438c1b]
push eax
push 0x10d3ffff
mov dword [ebp - 4], ebx
call fcn.0040a933
mov ecx, dword [ebp - 0x20]
add esp, 0x14
cmp ecx, ebx
mov byte [0x438c1c], al
je 0x406d64
inc byte [0x438c19]
call fcn.00408fcf
mov dword [ebp - 0x28], eax
movsx eax, byte [0x438c1d]
push eax
push 0x3247ffff
call fcn.0040a8f9
add word [0x438c32], ax
pop ecx
pop ecx
mov dword [ebp - 0x1c], ebx
mov edi, 0x80004003
mov eax, dword [ebp - 0x28]
cmp dword [ebp - 0x1c], eax
jge 0x406d64
inc word [0x438c24]
cmp dword [ebp - 0x20], ebx
jne 0x4067f2
push edi
call fcn.0042ee50
push dword [ebp - 0x1c]
mov ecx, dword [ebp - 0x20]
lea eax, [ebp - 0x14]
push eax
call fcn.00408f9a
inc byte [0x438c1f]
cmp word [0x438c22], bx
mov byte [ebp - 4], 1
setne al
cmp dword [ebp - 0x14], ebx
mov byte [0x438c19], al
je 0x406d1b
movsx eax, byte [0x438c1e]
push eax
push dword [0x438c3c]
call fcn.0040aa83
pop ecx
mov byte [0x438c1b], al
pop ecx
mov byte [ebp + 0xb], bl
mov al, byte [ebp + 0xb]
push ebx
lea ecx, [ebp - 0x4c]
mov byte [ebp - 0x4c], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov al, byte [0x438c21]
mov byte [ebp - 4], 2
sub al, 2
mov word [0x438c34], 0xfffe
add byte [0x438c1b], al
lea eax, [ebp - 0x4c]
push eax
lea eax, [ebp - 0x14]
push dword [0x432d2c]
push ecx
mov ecx, esp
mov dword [ebp - 0x2c], esp
push eax
call fcn.00409595
call fcn.0042e1f2
add esp, 0xc
cmp eax, ebx
je 0x40690d
movsx eax, word [0x438c26]
movsx ecx, word [0x438c2a]
mov esi, dword [0x432d30]
mov edx, eax
sub edx, ecx
add eax, 0x98dffff
add dword [0x438c5c], edx
mov dword [0x438c50], eax
mov al, byte [esi]
sub al, 3
movzx eax, al
add eax, 3
and al, 0xfc
call fcn.0042e9e0
mov eax, esp
push esi
push eax
call fcn.0042bd2b
mov esi, eax
push esi
call sub.MSVCRT.dll_strlen
add esp, 0xc
lea ecx, [ebp - 0x4c]
push eax
push esi
push dword [ebp - 0x44]
push ebx
call dword [sym.imp.MSVCP60.dll_public:_int___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::compare_unsigned_int__unsigned_int__char_const___unsigned_int_const]
cmp eax, ebx
jne 0x4068f3
mov byte [ebp + 0xb], 1
movsx eax, word [0x438c2e]
push 0x85b9ffff
push eax
call fcn.0040a933
pop ecx
mov word [0x438c32], ax
pop ecx
movsx ax, byte [0x438c1d]
or eax, dword [0x438c4c]
push ebx
lea ecx, [ebp - 0x3c]
add word [0x438c32], ax
mov al, byte [ebp + 0xb]
mov byte [ebp - 0x3c], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push dword [0x432d34]
lea eax, [ebp - 0x14]
mov byte [ebp - 4], 3
push ecx
mov ecx, esp
mov dword [ebp - 0x2c], esp
push eax
call fcn.00409595
lea eax, [ebp - 0x18]
push eax
call fcn.0042e43f
add esp, 0xc
movsx ax, byte [0x438c1b]
or ax, word [0x438c2c]
cmp dword [ebp - 0x18], ebx
mov byte [ebp - 4], 4
mov word [0x438c22], ax
je 0x406b4d
mov al, byte [ebp + 0xb]
push ebx
lea ecx, [ebp - 0x7c]
mov byte [ebp - 0x7c], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov al, byte [ebp + 0xb]
push ebx
lea ecx, [ebp - 0x6c]
mov byte [ebp - 4], 5
mov byte [ebp - 0x6c], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov al, byte [ebp + 0xb]
push ebx
lea ecx, [ebp - 0x5c]
mov byte [ebp - 4], 6
mov byte [ebp - 0x5c], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
movsx eax, word [0x438c24]
and eax, 0xcab1ffff
mov byte [ebp - 4], 7
add dword [0x438c58], eax
xor eax, eax
cmp word [0x438c30], bx
mov byte [0x438c1b], 1
setne al
mov word [0x438c2e], ax
xor eax, eax
cmp word [0x438c34], bx
setne al
mov dword [0x438c3c], eax
call dword [sym.imp.USER32.dll_GetActiveWindow]
mov dword [0x438c38], eax
mov ax, word [0x438c2a]
sub ax, word [0x438c54]
mov word [0x438c2e], ax
lea eax, [ebp - 0x7c]
push eax
lea eax, [ebp - 0x18]
push dword [0x432d38]
push ecx
mov ecx, esp
mov dword [ebp - 0x2c], esp
push eax
call fcn.00409595
call fcn.0042e60b
add esp, 0xc
cmp eax, ebx
je 0x406b1e
lea eax, [ebp - 0x6c]
push eax
lea eax, [ebp - 0x18]
push dword [0x432d3c]
push ecx
mov ecx, esp
mov dword [ebp - 0x2c], esp
push eax
call fcn.00409595
call fcn.0042e60b
add esp, 0xc
cmp eax, ebx
je 0x406b1e
lea eax, [ebp - 0x5c]
push eax
lea eax, [ebp - 0x18]
push dword [0x432d40]
push ecx
mov ecx, esp
mov dword [ebp - 0x2c], esp
push eax
call fcn.00409595
call fcn.0042e60b
add esp, 0xc
cmp eax, ebx
je 0x406b1e
xor eax, eax
cmp word [0x438c2c], bx
setne al
add byte [0x438c1b], al
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLangID]
mov byte [0x438c18], al
call dword [sym.imp.USER32.dll_GetDesktopWindow]
add byte [0x438c19], al
lea eax, [ebp - 0x5c]
push eax
lea eax, [ebp - 0x6c]
push eax
lea eax, [ebp - 0x7c]
push eax
lea eax, [ebp - 0x8c]
push eax
call fcn.0042a175
add esp, 0x10
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 8
push dword [ecx]
lea ecx, [ebp - 0x3c]
push ebx
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
push 1
lea ecx, [ebp - 0x8c]
mov byte [ebp - 4], 7
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push dword [0x438c54]
push 0x9cc9ffff
call fcn.0040a933
add al, byte [0x438c26]
pop ecx
pop ecx
mov dword [0x438c40], 0xefdfffff
mov byte [0x438c1f], al
push 1
lea ecx, [ebp - 0x5c]
mov byte [ebp - 4], 6
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0x6c]
mov byte [ebp - 4], 5
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0x7c]
mov byte [ebp - 4], 4
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
jmp 0x406bbd
dec byte [0x438c1d]
push 0x12d3ffff
push dword [0x438c4c]
call fcn.0040a9a5
add word [0x438c2c], ax
cmp dword [ebp - 0x14], ebx
pop ecx
pop ecx
jne 0x406b77
push edi
call fcn.0042ee50
mov ecx, dword [ebp - 0x14]
lea eax, [ebp - 0x24]
push eax
call fcn.00408e55
mov ecx, dword [eax]
mov byte [ebp - 4], 9
cmp ecx, ebx
je 0x406b96
call fcn.00409796
mov esi, eax
jmp 0x406b98
xor esi, esi
push esi
call sub.MSVCRT.dll_strlen
pop ecx
push eax
push esi
lea ecx, [ebp - 0x3c]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
mov ecx, dword [ebp - 0x24]
mov byte [ebp - 4], 4
cmp ecx, ebx
je 0x406bbd
call fcn.00409769
mov dword [ebp - 0x24], ebx
movsx eax, byte [0x438c1b]
push 0xa2bffff
push eax
call fcn.0040a9de
mov word [0x438c2a], ax
movsx eax, word [0x438c26]
push eax
push 0xe919ffff
call fcn.0040aac5
mov word [0x438c2e], ax
movsx eax, byte [0x438c18]
push eax
movsx eax, word [0x438c22]
push eax
call fcn.0040a96f
add esp, 0x18
cmp byte [ebp + 0xb], bl
mov byte [0x438c20], al
je 0x406c7c
movsx eax, byte [0x438c1a]
push eax
movsx eax, byte [0x438c1f]
push eax
call fcn.0040a96f
push 0x6f57ffff
push 0x9c4dffff
mov word [0x438c24], ax
call fcn.0040aac5
add dword [0x438c58], eax
push 0xf769ffff
push 0x67b3ffff
call fcn.0040a9de
add word [0x438c24], ax
lea eax, [ebp - 0x3c]
push eax
call fcn.0042ab4a
add esp, 0x1c
test al, al
jne 0x406c7c
mov esi, 0x438b64
push esi
call sub.MSVCRT.dll_strlen
pop ecx
push eax
push esi
lea ecx, [ebp - 0x3c]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
mov al, byte [0x438c1b]
or edx, 0xffffffff
movsx cx, al
movsx eax, al
push eax
sub edx, ecx
movsx eax, byte [0x438c1f]
add word [0x438c2a], dx
push eax
call fcn.0040a9de
add byte [0x438c1c], al
cmp dword [ebp - 0x34], ebx
pop ecx
pop ecx
jbe 0x406cec
mov al, byte [0x438c2a]
add byte [0x438c18], al
movsx eax, byte [0x438c1b]
push eax
push 0x2a9ffff
call fcn.0040aa83
push dword [ebp + 0x10]
mov word [0x438c22], ax
lea eax, [ebp - 0x3c]
push dword [ebp + 0xc]
push eax
call fcn.00429721
add esp, 0x14
test eax, eax
je 0x406cec
mov byte [ebp - 0xd], 1
mov eax, dword [ebp - 0x18]
mov byte [ebp - 4], 3
cmp eax, ebx
je 0x406cfd
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
push 1
lea ecx, [ebp - 0x3c]
mov byte [ebp - 4], 2
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0x4c]
mov byte [ebp - 4], 1
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
movsx eax, word [0x438c26]
push eax
push 0x87f1ffff
call fcn.0040a96f
add word [0x438c2e], ax
pop ecx
movsx eax, byte [0x438c1f]
or eax, 0x210fffff
pop ecx
add dword [0x438c58], eax
mov eax, dword [ebp - 0x14]
cmp eax, ebx
mov byte [ebp - 4], bl
je 0x406d58
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
inc dword [ebp - 0x1c]
cmp byte [ebp - 0xd], bl
je 0x4067d4
mov al, byte [0x438c44]
push 0x2dffff
and al, byte [0x438c18]
add byte [0x438c19], al
movsx eax, word [0x438c2a]
push eax
call fcn.0040a96f
or word [0x438c22], 0xffff
or dword [ebp - 4], 0xffffffff
mov word [0x438c28], ax
mov eax, dword [ebp - 0x20]
pop ecx
cmp eax, ebx
pop ecx
je 0x406da8
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
mov ecx, dword [ebp - 0xc]
mov al, byte [ebp - 0xd]
lea esp, [ebp - 0x98]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
leave
ret