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

Disassembly:
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x220
test rdx, rdx
mov rsi, rcx
mov rbp, r8
jle 0x6aac336e
mov al, byte [rcx]
lea ecx, [rax - 0x2b]
and cl, 0xfd
jne 0x6aac336e
cmp al, 0x2d
mov r11b, 1
movsd xmm2, qword [0x6ab0e780]
jne 0x6aac337d
movsd xmm2, qword [0x6ab0e788]
jmp 0x6aac337d
xor r11d, r11d
movsd xmm2, qword [0x6ab0e780]
xor ebx, ebx
jmp 0x6aac3382
mov ebx, 1
lea rax, [rbx + 2]
cmp rax, rdx
jge 0x6aac3416
mov al, byte [rsi + rbx]
mov rcx, rbx
and eax, 0xffffffdf
cmp al, 0x4e
je 0x6aac33a6
cmp al, 0x49
jne 0x6aac347a
jmp 0x6aac3421
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x41
jne 0x6aac37e9
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6aac37e9
add rbx, 3
cmp rbx, rdx
jge 0x6aac33f6
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6aac37e9
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6aac37e9
cmp al, 0x5f
je 0x6aac37e9
movsd xmm0, qword [0x6ab0e790]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x6aac36cb
or r8, 0xffffffffffffffff
cmp rbx, rdx
jge 0x6aac3491
jmp 0x6aac347a
mov al, byte [rsi + rbx + 1]
and eax, 0xffffffdf
cmp al, 0x4e
jne 0x6aac37e9
mov al, byte [rsi + rbx + 2]
and eax, 0xffffffdf
cmp al, 0x46
jne 0x6aac37e9
add rbx, 3
cmp rbx, rdx
jge 0x6aac363f
mov al, byte [rsi + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x6aac37e9
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x6aac37e9
cmp al, 0x5f
je 0x6aac37e9
jmp 0x6aac363f
mov al, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6aac3491
movzx r8d, al
sub r8, 0x30
xor r9d, r9d
xor r10d, r10d
cmp rbx, rdx
jge 0x6aac3554
movzx eax, byte [rsi + rbx]
lea ecx, [rax - 0x30]
cmp cl, 9
ja 0x6aac34c8
imul r9, r9, 0xa
inc r10
lea r9, [r9 + rax - 0x30]
inc rbx
cmp rbx, rdx
je 0x6aac3497
cmp byte [rsi + rbx], 0x5f
je 0x6aac34b8
jmp 0x6aac3497
cmp al, 0x2e
jne 0x6aac3554
inc rbx
xor eax, eax
test r10, r10
jne 0x6aac34fc
cmp rbx, rdx
jge 0x6aac351f
cmp byte [rsi + rbx], 0x30
jne 0x6aac37ed
inc rax
inc rbx
cmp rbx, rdx
je 0x6aac34da
cmp byte [rsi + rbx], 0x5f
je 0x6aac34ec
jmp 0x6aac34da
cmp r8, 0xffffffffffffffff
jne 0x6aac351f
cmp rdx, rbx
jle 0x6aac351f
mov cl, byte [rsi + rbx]
or r8, 0xffffffffffffffff
lea edi, [rcx - 0x30]
cmp dil, 9
ja 0x6aac351f
movzx r8d, cl
sub r8, 0x30
xor ecx, ecx
lea r12, [rcx + rax]
cmp rbx, rdx
jge 0x6aac3559
movzx edi, byte [rsi + rbx]
lea r13d, [rdi - 0x30]
cmp r13b, 9
ja 0x6aac3559
imul r9, r9, 0xa
inc rcx
lea r9, [r9 + rdi - 0x30]
inc rbx
cmp rbx, rdx
je 0x6aac3521
cmp byte [rsi + rbx], 0x5f
je 0x6aac3544
jmp 0x6aac3521
xor r12d, r12d
xor ecx, ecx
mov r13, r10
add r13, rcx
jne 0x6aac3579
test rbx, rbx
je 0x6aac37fc
cmp rbx, 1
jne 0x6aac3579
test r11b, r11b
jne 0x6aac37e9
lea rax, [rbx + 1]
cmp rax, rdx
jge 0x6aac35f6
mov r11b, byte [rsi + rbx]
and r11d, 0xffffffdf
cmp r11b, 0x45
jne 0x6aac35f6
mov r11b, byte [rsi + rax]
cmp r11b, 0x2b
je 0x6aac35a6
cmp r11b, 0x2d
jne 0x6aac35b2
or r11, 0xffffffffffffffff
jmp 0x6aac35ac
mov r11d, 1
add rbx, 2
jmp 0x6aac35bb
mov rbx, rax
mov r11d, 1
mov al, byte [rsi + rbx]
sub eax, 0x30
cmp al, 9
ja 0x6aac37e9
xor edi, edi
cmp rbx, rdx
jge 0x6aac35fe
movzx r14d, byte [rsi + rbx]
lea eax, [r14 - 0x30]
cmp al, 9
ja 0x6aac35fe
imul rax, rdi, 0xa
lea rdi, [rax + r14 - 0x30]
inc rbx
cmp rbx, rdx
je 0x6aac35cb
cmp byte [rsi + rbx], 0x5f
je 0x6aac35e6
jmp 0x6aac35cb
mov r11d, 1
xor edi, edi
imul rdi, r11
sub rdi, r12
mov rax, rdi
sar rax, 0x3f
mov r12, rax
xor r12, rdi
sub r12, rax
cmp r12, 0x3e7
jg 0x6aac3626
cmp r13, 0xf
jg 0x6aac365c
jmp 0x6aac3670
test r9, r9
je 0x6aac3632
test rdi, rdi
jns 0x6aac363f
jmp 0x6aac3650
mov qword [rbp], 0
jmp 0x6aac37fc
movsd xmm1, qword [0x6ab0e780]
xorps xmm0, xmm0
divsd xmm1, xmm0
jmp 0x6aac3653
xorps xmm1, xmm1
mulsd xmm1, xmm2
jmp 0x6aac371b
cmp r13, 0x10
jne 0x6aac3725
cmp r8, 8
jg 0x6aac3725
cmp r12, 0x16
jle 0x6aac368f
mov eax, 0xf
sub rax, r10
sub rax, rcx
lea rdx, [rax + 0x16]
cmp rdx, r12
jge 0x6aac36db
jmp 0x6aac3725
test r9, r9
js 0x6aac369b
cvtsi2sd xmm0, r9
jmp 0x6aac36b1
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm0, rcx
addsd xmm0, xmm0
lea rax, [0x6ab0df40]
test rdi, rdi
mulsd xmm0, xmm2
movsd xmm1, qword [rax + r12*8]
js 0x6aac36d5
mulsd xmm0, xmm1
movsd qword [rbp], xmm0
jmp 0x6aac37fc
divsd xmm0, xmm1
jmp 0x6aac36cb
test rdi, rdi
js 0x6aac3725
test r9, r9
js 0x6aac36ec
cvtsi2sd xmm1, r9
jmp 0x6aac3702
mov rcx, r9
and r9d, 1
shr rcx, 1
or rcx, r9
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
lea rcx, [0x6ab0df40]
sub r12, rax
mulsd xmm1, xmm2
mulsd xmm1, qword [rcx + rax*8]
mulsd xmm1, qword [rcx + r12*8]
movsd qword [rbp], xmm1
jmp 0x6aac37fc
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, r13
call fcn.6aaf880d
xor ecx, ecx
test rbx, rbx
je 0x6aac3762
xor eax, eax
cmp byte [rsi], 0x2e
sete al
cmp rbx, rax
jle 0x6aac3762
mov dl, byte [rsi + rax]
lea r8d, [rdx - 0x2b]
and r8b, 0xfd
je 0x6aac37bb
lea r8d, [rdx - 0x30]
cmp r8b, 9
jbe 0x6aac37bb
mov rax, r12
mov r8d, 0xa
sar rdi, 0x3f
mov byte [rsp + rcx + 0x2c], 0x45
cqo
and edi, 2
idiv r8
add edx, 0x30
add edi, 0x2b
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
mov rax, r12
add edx, 0x30
mov r8d, 0x64
mov byte [rsp + rcx + 0x2f], dl
cqo
idiv r8
add eax, 0x30
mov byte [rsp + rcx + 0x2d], dil
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, r13
call fcn.6ab01460
jmp 0x6aac36cb
cmp rcx, 0x1ed
jg 0x6aac37cb
mov byte [rsp + rcx + 0x2c], dl
inc rcx
inc rax
cmp rbx, rax
jle 0x6aac3746
mov dl, byte [rsi + rax]
cmp dl, 0x2e
je 0x6aac37cb
cmp dl, 0x5f
je 0x6aac37cb
jmp 0x6aac3746
xor ebx, ebx
jmp 0x6aac37fc
cmp r8, 0xffffffffffffffff
jne 0x6aac351f
jmp 0x6aac3507
mov rax, rbx
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret