Function at 0x413bb0
Capabilities:
Get keyboard layout

Disassembly:
sub esp, 0x210
push ebx
push ebp
mov ebp, dword [esp + 0x224]
push esi
push edi
mov esi, ecx
mov dword [esp + 0x14], 0
mov byte [esp + 0x12], 0
test ebp, ebp
je 0x413bdd
lea eax, [ebp + 0x12]
mov dword [esp + 0x18], eax
jmp 0x413be5
lea ecx, [esp + 0x13]
mov dword [esp + 0x18], ecx
cmp byte [esp + 0x228], 0
jne 0x413c2d
mov edi, 0x4aa2d4
mov eax, esi
call fcn.004055c0
mov edi, eax
test edi, edi
je 0x413c2d
mov ecx, edi
mov al, byte [ecx]
cmp al, 0x20
je 0x413c0d
cmp al, 9
jne 0x413c10
inc ecx
jmp 0x413c03
push 0x4a8cf0
push ecx
call fcn.00492c11
add esp, 8
test eax, eax
jne 0x413c2d
test ebp, ebp
je 0x413c2a
mov byte [ebp + 0x16], 1
mov byte [edi], 0
push 0
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
push eax
lea edx, [esp + 0x16]
push 1
push edx
mov eax, esi
call fcn.0041b2a0
mov bl, al
add esp, 0xc
mov byte [esp + 0x13], bl
test bl, bl
je 0x413d60
cmp byte [esp + 0x228], 0
je 0x413cda
lea eax, [ebx + 0x64]
cmp al, 3
ja 0x413cf6
cmp byte [esp + 0x230], 0
je 0x413c98
mov ecx, dword [0x4bbc50]
push 1
push 0
push 0xffffffffffffffff
push 0x4aa2d8
push ecx
call fcn.004828b0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x210
ret
push esi
push 0x4aa2dc
mov esi, 0x200
lea edi, [esp + 0x28]
call fcn.0047f710
mov edx, dword [esp + 0x22c]
add esp, 8
push edx
mov eax, edi
push eax
mov ecx, 0x4bc460
call fcn.0043b780
test ebp, ebp
jne 0x413db5
pop edi
pop esi
lea eax, [ebp + 4]
pop ebp
pop ebx
add esp, 0x210
ret
test ebp, ebp
je 0x413cf6
push 2
push 0x4aa304
push esi
call fcn.0049353e
add esp, 0xc
test eax, eax
sete cl
mov byte [ebp + 0x17], cl
lea edx, [ebx - 1]
cmp dl, 5
ja 0x413d03
cmp bl, 3
jne 0x413d0a
lea eax, [ebx + 0x66]
cmp al, 5
ja 0x413d0e
mov al, 1
jmp 0x413d10
xor al, al
mov dl, byte [esp + 0x12]
test dl, 0x30
je 0x413d24
lea ecx, [ebx - 0x41]
cmp cl, 0x19
ja 0x413d24
and dl, 0xcf
test al, al
je 0x413d2f
mov eax, dword [esp + 0x18]
mov byte [eax], 2
mov edi, dword [esp + 0x14]
cmp byte [esp + 0x228], 0
je 0x413e56
test ebp, ebp
je 0x413e8e
mov word [ebp + 0xa], di
pop edi
pop esi
mov byte [ebp + 0x11], bl
pop ebp
mov eax, 1
pop ebx
add esp, 0x210
ret
xor ebx, ebx
mov eax, esi
call fcn.0041b1f0
movzx edi, ax
test di, di
jne 0x413e49
push 1
lea ebx, [esp + 0x20]
mov eax, esi
call fcn.0045b1a0
movzx eax, ax
add esp, 4
mov dword [esp + 0x14], eax
test ax, ax
jne 0x413e22
cmp byte [esp + 0x230], al
je 0x413dc2
mov edx, dword [0x4bbc50]
push 1
push 0
push 0xffffffffffffffff
push 0x4aa308
push edx
call fcn.004828b0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x210
ret
cmp byte [esi + 1], 0
jne 0x413de8
cmp byte [0x4bca7c], 0
jne 0x413de8
mov eax, ebp
neg eax
pop edi
sbb eax, eax
pop esi
and eax, 0xfffffffd
pop ebp
add eax, 3
pop ebx
add esp, 0x210
ret
test ebp, ebp
je 0x413e15
push esi
push str.__s__is_not_a_valid_key_name.
mov esi, 0x200
lea edi, [esp + 0x28]
call fcn.0047f710
add esp, 8
push 0x4a7935
mov eax, edi
push eax
mov ecx, 0x4bc460
call fcn.0043b780
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x210
ret
mov edx, dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
mov ecx, 1
add dword [0x4bbcb4], ecx
mov byte [edx], 4
mov dl, byte [esp + 0x12]
mov byte [eax + 0x4bbca4], cl
mov bl, al
jmp 0x413d2f
mov dl, byte [esp + 0x12]
mov bl, byte [esp + 0x13]
jmp 0x413d33
test ebp, ebp
je 0x413e8e
mov al, dl
and al, 0xd5
xor ecx, ecx
mov byte [ebp + 0x10], bl
mov word [ebp + 8], di
test al, 0xc0
je 0x413e70
mov ecx, 8
test al, 0xc
je 0x413e77
or ecx, 1
test al, 0x30
je 0x413e7e
or ecx, 4
test al, 3
je 0x413e85
or ecx, 2
or dword [ebp], ecx
and dl, 0x2a
or byte [ebp + 0xe], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x210
ret