Function at 0x409b1e
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
push r13
push r12
push rdi
push rsi
push rbx
sub rsp, 0x30
mov eax, dword [rcx + 0x10]
mov rbx, rcx
mov rdi, rdx
cmp eax, 0x69434350
je 0x409c69
jg 0x409bd8
cmp eax, 0x6348524d
je 0x40a909
jg 0x409b93
cmp eax, 0x504c5445
je 0x409d6e
jg 0x409b78
cmp eax, 0x49444154
je 0x409e83
cmp eax, 0x49484452
je 0x409c74
jmp 0x40b2b7
cmp eax, 0x6163544c
je 0x40b237
cmp eax, 0x624b4744
je 0x40a0ef
jmp 0x40b2b7
cmp eax, 0x67414d41
je 0x40a890
jg 0x409bc8
cmp eax, 0x6663544c
je 0x40b24a
cmp eax, 0x66644154
jne 0x40b2b7
call fcn.00406dcd
mov qword [rbx + 0x28], rax
mov rax, qword [rbx + 0x20]
jmp 0x40b2b3
cmp eax, 0x68495354
je 0x40af8c
jmp 0x40b2b7
cmp eax, 0x73524742
je 0x40ab25
jg 0x409c23
cmp eax, 0x73424954
je 0x40b0fb
jg 0x409c0d
cmp eax, 0x69545874
je 0x40a5de
cmp eax, 0x70485973
je 0x40a37d
jmp 0x40b2b7
cmp eax, 0x73504c54
jne 0x40b2b7
mov rax, qword [rcx + 8]
xor esi, esi
jmp 0x40abb0
cmp eax, 0x74524e53
je 0x409ea9
jg 0x409c47
cmp eax, 0x74455874
je 0x409c5d
cmp eax, 0x74494d45
je 0x40a2c4
jmp 0x40b2b7
cmp eax, 0x7a545874
jne 0x40b2b7
mov rax, qword [rcx + 8]
xor esi, esi
jmp 0x40a4d3
mov rax, qword [rcx + 8]
xor r8d, r8d
jmp 0x40a421
mov rax, qword [rcx + 8]
xor esi, esi
jmp 0x40a9e8
xor eax, eax
cmp qword [rcx + 8], 0xd
jne 0x40b2bd
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x38], rax
call fcn.00406eb9
mov r13, rax
cmp rax, 6
ja 0x409cde
mov byte [rbx + 0x40], al
mov rcx, rbx
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x48], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x50], rax
call fcn.00406eb9
mov byte [rbx + 0x58], al
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
mov rcx, r13
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov qword [r12 + 0x10], rax
call fcn.00404e81
mov ecx, 0x19
mov r13, rax
test rax, rax
je 0x409d25
mov rax, qword [rax]
lea rcx, [rax + 0x19]
call fcn.004045b4
lea rdx, [0x004237a0]
mov r9, rax
mov rcx, rax
call fcn.00402a2c
mov rcx, r9
mov rdx, r13
call fcn.00402a69
mov rdx, r9
lea rcx, [r12 + 0x18]
call fcn.004036fc
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x190
jmp 0x409dfd
mov rsi, qword [rcx + 8]
cmp rsi, 0x302
jg 0x409d9a
mov rcx, qword [rcx + 0x28]
test rcx, rcx
je 0x409e1a
call fcn.00403751
mov qword [rbx + 0x28], 0
jmp 0x409e1a
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x004237e0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x409de8
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x1cd
lea r9, [0x004232fe]
lea r8, str.parseChunk
lea rdx, [0x004232f5]
mov rcx, r12
call fcn.00405340
mov rax, rsi
mov ecx, 3
cqo
idiv rcx
lea rcx, [0x0042f120]
mov rdx, rax
call fcn.00405c67
mov qword [rbx + 0x28], rax
test rax, rax
je 0x40b2b7
mov r12, qword [rax]
xor esi, esi
cmp r12, rsi
jle 0x40b2b7
mov rdi, qword [rbx + 0x28]
mov rcx, rbx
call fcn.00406eb9
mov rcx, rbx
lea rdi, [rdi + rsi*4]
inc rsi
mov byte [rdi + 0x10], al
call fcn.00406eb9
mov rcx, rbx
mov byte [rdi + 0x11], al
call fcn.00406eb9
mov byte [rdi + 0x13], 0xff
mov byte [rdi + 0x12], al
jmp 0x409e48
mov rcx, qword [rcx + 0x18]
call fcn.00409331
mov rcx, rax
mov rax, qword [rdi]
mov al, byte [rax + 0xc]
mov byte [rcx + 0x51], al
call fcn.004093cb
lea rcx, [rbx + 0x28]
mov rdx, rax
jmp 0x40aab3
mov r12, qword [rdx + 8]
mov edx, 0x49484452
mov rcx, r12
call fcn.00414309
test rax, rax
je 0x40b2bb
mov al, byte [rax + 0x40]
cmp al, 3
je 0x409ed7
test al, al
jne 0x409f95
jmp 0x409f9f
mov edx, 0x504c5445
mov rcx, r12
call fcn.00414309
mov rsi, rax
test rax, rax
je 0x40b2bb
mov rax, qword [rax + 0x28]
xor edx, edx
test rax, rax
je 0x409efe
mov rdx, qword [rax]
mov rax, qword [rbx + 8]
cmp rax, rdx
jg 0x409f0f
lea r12, [rax - 1]
xor edi, edi
jmp 0x409f77
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x004238e0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x409f5d
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x218
jmp 0x409dfd
cmp r12, rdi
jl 0x40b2b7
mov rcx, rbx
call fcn.00406eb9
mov rdx, qword [rsi + 0x28]
mov byte [rdx + rdi*4 + 0x13], al
inc rdi
jmp 0x409f77
cmp al, 2
je 0x40a062
jmp 0x40a012
cmp qword [rbx + 8], 2
je 0x40a1b3
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x004238a0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x409ff8
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x21d
jmp 0x409dfd
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423860]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a0d5
mov rcx, r13
call fcn.00403751
jmp 0x40a0d5
cmp qword [rbx + 8], 6
je 0x40a237
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423820]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a0bb
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x223
jmp 0x409dfd
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x228
jmp 0x409dfd
mov rcx, qword [rdx + 8]
mov edx, 0x49484452
call fcn.00414309
mov cl, byte [rax + 0x40]
cmp cl, 3
je 0x40a11c
and ecx, 7
mov eax, 0x11
sar eax, cl
test al, 1
je 0x40a198
jmp 0x40a1ac
cmp qword [rbx + 8], 1
jne 0x40a130
mov rcx, rbx
call fcn.00406eb9
jmp 0x40a1bb
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x004239a0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a17e
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x230
jmp 0x409dfd
mov eax, 0x44
sar eax, cl
test al, 1
je 0x40b2b7
jmp 0x40a230
cmp qword [rbx + 8], 2
jne 0x40a1c8
mov rcx, rbx
call fcn.00406f76
mov qword [rbx + 0x28], rax
mov qword [rbx + 0x30], rax
jmp 0x40a3a1
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423960]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a216
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x236
jmp 0x409dfd
cmp qword [rbx + 8], 6
jne 0x40a25c
mov rcx, rbx
call fcn.00406f76
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406f76
jmp 0x40a3a1
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423920]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a2aa
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x23c
jmp 0x409dfd
cmp qword [rcx + 8], 7
jne 0x40a315
call fcn.00406f76
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x38], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x40], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rbx + 0x48], rax
call fcn.00406eb9
mov qword [rbx + 0x50], rax
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x004239e0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a363
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x254
jmp 0x409dfd
cmp qword [rcx + 8], 9
jne 0x40a3aa
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406eb9
mov qword [rbx + 0x38], rax
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423a20]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a3f8
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x25e
jmp 0x409dfd
mov rdx, qword [rbx + 0x18]
cmp byte [rdx + r8 + 0x10], 0
je 0x40a42a
mov r8, r12
cmp rax, r8
lea r12, [r8 + 1]
jg 0x40a412
test r8, r8
je 0x40a45d
cmp r8, 0x4f
jg 0x40a45d
mov rcx, qword [rbx + 0x18]
xor edx, edx
call fcn.004078b5
lea rcx, [rbx + 0x28]
mov rdx, rax
call fcn.004036fc
mov rcx, qword [rbx + 0x18]
mov rdx, r12
call fcn.0040791f
jmp 0x40aaac
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ce0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a4ab
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x26c
jmp 0x409dfd
mov rdx, qword [rbx + 0x18]
cmp byte [rdx + rsi + 0x10], 0
je 0x40a4d8
inc rsi
cmp rax, rsi
jg 0x40a4c5
test rsi, rsi
je 0x40a50e
cmp rsi, 0x4f
jg 0x40a50e
mov rcx, qword [rbx + 0x18]
xor edx, edx
mov r8, rsi
call fcn.004078b5
lea rcx, [rbx + 0x28]
mov rdx, rax
call fcn.004036fc
mov rcx, qword [rbx + 0x18]
cmp byte [rcx + rsi + 0x11], 0
je 0x40aa8a
jmp 0x40a576
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ce0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a55c
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x27b
jmp 0x409dfd
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423b60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a5c4
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x27f
jmp 0x409dfd
mov rax, qword [rcx + 8]
xor esi, esi
cmp rax, 4
jg 0x40a65a
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423aa0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a638
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x28d
jmp 0x409dfd
inc rsi
cmp rax, rsi
jle 0x40a665
mov rcx, qword [rbx + 0x18]
cmp byte [rcx + rsi + 0x10], 0
jne 0x40a652
lea rdx, [rsi + 3]
cmp rax, rdx
jle 0x40a678
test rsi, rsi
jne 0x40a6e0
jmp 0x40a716
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423a60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a6c6
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x292
jmp 0x409dfd
cmp rsi, 0x4f
jg 0x40a716
xor edx, edx
mov r8, rsi
call fcn.004078b5
lea rcx, [rbx + 0x28]
mov rdx, rax
call fcn.004036fc
mov rcx, qword [rbx + 0x18]
cmp byte [rcx + rsi + 0x12], 0
jne 0x40a77e
mov rax, qword [rbx + 8]
mov r12d, 3
jmp 0x40a7ee
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ce0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a764
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x293
jmp 0x409dfd
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423b60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a7cc
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x298
jmp 0x409dfd
cmp byte [rcx + r12 + 0xf], 0
je 0x40a7fe
mov rdx, r12
lea r8, [r12 - 3]
inc r12
cmp rax, rdx
jg 0x40a7e6
add r8, rdx
mov r13b, byte [rcx + rsi + 0x11]
call fcn.004078b5
lea rcx, [rbx + 0x38]
mov rdx, rax
call fcn.004036fc
mov rax, qword [rbx + 8]
mov rcx, qword [rbx + 0x18]
xor r8d, r8d
lea rdx, [r8 + r12]
cmp rdx, rax
jge 0x40a832
cmp byte [rcx + rdx + 0x10], 0
jne 0x40a862
lea rsi, [rdx + r8]
lea r12, [rbx + 0x30]
mov r8, rsi
call fcn.004078b5
lea rcx, [rbx + 0x40]
mov rdx, rax
call fcn.004036fc
dec r13b
mov rcx, qword [rbx + 0x18]
lea rdx, [rsi + 1]
je 0x40a867
call fcn.0040791f
jmp 0x40a885
inc r8
jmp 0x40a822
call fcn.0040791f
mov rcx, rax
call fcn.00409331
mov rcx, rax
mov rax, qword [rdi]
mov al, byte [rax + 0xc]
mov byte [rcx + 0x51], al
call fcn.004093cb
mov rdx, rax
mov rcx, r12
jmp 0x40aab3
cmp qword [rcx + 8], 4
jne 0x40a8a1
call fcn.00406dcd
jmp 0x40ab31
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ae0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a8ef
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2b4
jmp 0x409dfd
cmp qword [rcx + 8], 0x20
jne 0x40a972
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x38], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x40], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x48], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x50], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x58], rax
call fcn.00406dcd
mov qword [rbx + 0x60], rax
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423b20]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40a9c0
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2b9
jmp 0x409dfd
mov rdx, qword [rbx + 0x18]
cmp byte [rdx + rsi + 0x10], 0
je 0x40a9ed
inc rsi
cmp rax, rsi
jg 0x40a9da
test rsi, rsi
je 0x40aa22
cmp rsi, 0x4f
jg 0x40aa22
mov rcx, qword [rbx + 0x18]
xor edx, edx
mov r8, rsi
call fcn.004078b5
lea rcx, [rbx + 0x28]
mov rdx, rax
call fcn.004036fc
mov rcx, qword [rbx + 0x18]
cmp byte [rcx + rsi + 0x11], 0
je 0x40aa8a
jmp 0x40aabd
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ce0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40aa70
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2d1
jmp 0x409dfd
lea rdx, [rsi + 2]
call fcn.0040791f
mov rcx, rax
call fcn.00409331
mov rcx, rax
mov rax, qword [rdi]
mov al, byte [rax + 0xc]
mov byte [rcx + 0x51], al
call fcn.004093cb
mov rdx, rax
lea rcx, [rbx + 0x30]
call fcn.004036fc
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423b60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40ab0b
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2d5
jmp 0x409dfd
cmp qword [rcx + 8], 1
jne 0x40ab3a
call fcn.00406eb9
mov qword [rbx + 0x28], rax
jmp 0x40b2b7
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ba0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40ab88
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2c5
jmp 0x409dfd
mov rdx, qword [rbx + 0x18]
cmp byte [rdx + rsi + 0x10], 0
je 0x40abb9
mov rsi, rdi
cmp rax, rsi
lea rdi, [rsi + 1]
jg 0x40aba2
test rsi, rsi
je 0x40abec
cmp rsi, 0x4f
jg 0x40abec
mov rcx, qword [rbx + 0x18]
mov r8, rsi
xor edx, edx
call fcn.004078b5
lea rcx, [rbx + 0x28]
mov rdx, rax
call fcn.004036fc
mov rax, qword [rbx + 0x18]
test rax, rax
jne 0x40ac54
jmp 0x40ac7d
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ce0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40ac3a
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2df
jmp 0x409dfd
cmp rdi, qword [rax]
jg 0x40ac7d
mov qword [rbx + 0x20], rdi
mov rcx, rbx
call fcn.00406eb9
mov qword [rbx + 0x30], rax
mov rdx, rax
lea rax, [rax - 8]
test rax, 0xfffffffffffffff7
je 0x40acf3
jmp 0x40ad09
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423be0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40accb
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
lea r9, [0x004232fe]
mov qword [rsp + 0x20], 0x194
lea r8, str.setPosition
jmp 0x409e0b
mov rax, qword [rbx + 8]
add rsi, 2
sub rax, rsi
cmp rdx, 8
jne 0x40ad71
jmp 0x40ad8f
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423ca0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40ad57
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2e3
jmp 0x409dfd
mov ecx, 0xa
cqo
idiv rcx
mov r12, rax
mov rsi, rdx
test rdx, rdx
je 0x40ae98
jmp 0x40aeb0
mov edi, 6
cqo
idiv rdi
mov rdi, rdx
mov r12, rax
test rdx, rdx
jne 0x40adbc
mov rcx, qword [rbx + 0x38]
test rcx, rcx
je 0x40ae24
call fcn.00403751
mov qword [rbx + 0x38], 0
jmp 0x40ae24
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423c60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40ae0a
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2e7
jmp 0x409dfd
mov rdx, r12
lea rcx, [0x0042f160]
call fcn.00405c67
mov qword [rbx + 0x38], rax
test rax, rax
je 0x40b2b7
mov r12, qword [rax]
cmp r12, rdi
jle 0x40b2b7
mov rcx, rbx
mov rsi, qword [rbx + 0x38]
call fcn.00406eb9
imul rdx, rdi, 0x28
mov rcx, rbx
inc rdi
add rsi, rdx
mov qword [rsi + 0x10], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rsi + 0x18], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rsi + 0x20], rax
call fcn.00406eb9
mov rcx, rbx
mov qword [rsi + 0x28], rax
call fcn.00406f76
mov qword [rsi + 0x30], rax
jmp 0x40ae43
mov rcx, qword [rbx + 0x38]
test rcx, rcx
je 0x40af18
call fcn.00403751
mov qword [rbx + 0x38], 0
jmp 0x40af18
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423c20]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40aefe
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2f1
jmp 0x409dfd
mov rdx, r12
lea rcx, [0x0042f160]
call fcn.00405c67
mov qword [rbx + 0x38], rax
test rax, rax
je 0x40b2b7
mov r12, qword [rax]
cmp r12, rsi
jle 0x40b2b7
mov rcx, rbx
mov rdi, qword [rbx + 0x38]
call fcn.00406f76
imul rdx, rsi, 0x28
mov rcx, rbx
inc rsi
add rdi, rdx
mov qword [rdi + 0x10], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rdi + 0x18], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rdi + 0x20], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rdi + 0x28], rax
call fcn.00406f76
mov qword [rdi + 0x30], rax
jmp 0x40af37
mov r12, qword [rdx + 8]
mov edx, 0x504c5445
mov rcx, r12
call fcn.00414330
test al, al
je 0x40afbf
mov rcx, r12
mov edx, 0x504c5445
xor r12d, r12d
call fcn.00414309
mov rax, qword [rax + 0x28]
test rax, rax
je 0x40b027
mov r12, qword [rax]
jmp 0x40b027
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423d60]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40b00d
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x2fe
jmp 0x409dfd
mov rax, qword [rbx + 8]
mov ecx, 2
cqo
idiv rcx
cmp rax, r12
je 0x40b0a2
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423d20]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40b088
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x300
jmp 0x409dfd
mov rcx, qword [rbx + 0x28]
test rcx, rcx
je 0x40b0b8
call fcn.00403751
mov qword [rbx + 0x28], 0
mov rdx, r12
lea rcx, [0x0042f220]
call fcn.00405c67
mov qword [rbx + 0x28], rax
test rax, rax
je 0x40b2b7
mov rdi, qword [rax]
xor esi, esi
dec rdi
cmp rdi, rsi
jl 0x40b2b7
mov r12, qword [rbx + 0x28]
mov rcx, rbx
call fcn.00406f76
mov qword [r12 + rsi*8 + 0x10], rax
inc rsi
jmp 0x40b0dc
mov rcx, qword [rdx + 8]
mov edx, 0x49484452
call fcn.00414309
xor ecx, ecx
mov dl, byte [rax + 0x40]
cmp dl, 6
ja 0x40b122
movzx ecx, dl
lea r8, [0x00423e08]
movsx rcx, byte [r8 + rcx]
cmp qword [rbx + 8], rcx
jne 0x40b139
mov r8d, 8
cmp dl, 3
je 0x40b1a1
mov r8, qword [rax + 0x38]
jmp 0x40b1a1
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423de0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40b187
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x310
jmp 0x409dfd
mov rcx, qword [rbx + 0x18]
test rcx, rcx
je 0x40b2b7
mov r9, qword [rcx]
xor eax, eax
cmp r9, rax
jle 0x40b2b7
movzx edx, byte [rcx + rax + 0x10]
test dl, dl
je 0x40b1cf
cmp rdx, r8
jg 0x40b1cf
inc rax
jmp 0x40b1b3
mov edx, 0x30
lea rcx, [0x0042f1e0]
call fcn.004042f3
lea rcx, [0x00423da0]
mov r12, rax
lea rax, [0x0042f1a0]
mov qword [r12], rax
lea rax, [0x004232f5]
mov r13, qword [r12 + 0x18]
mov qword [r12 + 0x10], rax
call fcn.004044e1
mov qword [r12 + 0x18], rax
test r13, r13
je 0x40b21d
mov rcx, r13
call fcn.00403751
lea rcx, [r12 + 8]
xor edx, edx
call fcn.004036fc
mov qword [rsp + 0x20], 0x314
jmp 0x409dfd
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406dcd
jmp 0x40b2b3
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x28], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x30], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x38], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x40], rax
call fcn.00406dcd
mov rcx, rbx
mov qword [rbx + 0x48], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rbx + 0x50], rax
call fcn.00406f76
mov rcx, rbx
mov qword [rbx + 0x58], rax
call fcn.00406eb9
mov rcx, rbx
mov byte [rbx + 0x60], al
call fcn.00406eb9
mov byte [rbx + 0x61], al
jmp 0x40b2b7
mov qword [rbx + 0x30], rax
mov al, 1
jmp 0x40b2bd
xor eax, eax
add rsp, 0x30
pop rbx
pop rsi
pop rdi
pop r12
pop r13
ret