Function at 0x140014624
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
mov rbx, rcx
mov rax, rdx
mov rdi, r8
test rdx, rdx
jle 0x140014667
mov dl, byte [rcx]
lea ecx, [rdx - 0x2b]
and cl, 0xfd
jne 0x140014667
movsd xmm1, qword [0x140033c40]
mov sil, 1
cmp dl, 0x2d
jne 0x140014676
movsd xmm1, qword [0x140033c48]
jmp 0x140014676
movsd xmm1, qword [0x140033c40]
xor esi, esi
xor r12d, r12d
jmp 0x14001467c
mov r12d, 1
lea rdx, [r12 + 2]
cmp rax, rdx
jle 0x140014718
mov dl, byte [rbx + r12]
mov rcx, r12
and edx, 0xffffffdf
cmp dl, 0x4e
je 0x1400146a4
cmp dl, 0x49
jne 0x140014780
jmp 0x140014723
mov dl, byte [rbx + r12 + 1]
and edx, 0xffffffdf
cmp dl, 0x41
jne 0x140014adf
mov dl, byte [rbx + r12 + 2]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x140014adf
add r12, 3
cmp rax, r12
jle 0x1400146f8
mov al, byte [rbx + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140014adf
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140014adf
cmp al, 0x5f
je 0x140014adf
movsd xmm0, qword [0x140033c50]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x140014aaf
or r8, 0xffffffffffffffff
cmp rax, r12
jg 0x140014780
jmp 0x140014795
mov dl, byte [rbx + r12 + 1]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x140014adf
mov dl, byte [rbx + r12 + 2]
and edx, 0xffffffdf
cmp dl, 0x46
jne 0x140014adf
add r12, 3
cmp rax, r12
jle 0x14001494d
mov al, byte [rbx + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x140014adf
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x140014adf
cmp al, 0x5f
je 0x140014adf
jmp 0x14001494d
movzx edx, byte [rbx + r12]
or r8, 0xffffffffffffffff
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x140014795
lea r8, [rdx - 0x30]
xor edx, edx
xor r9d, r9d
cmp rax, r12
jle 0x140014864
movzx ecx, byte [rbx + r12]
lea r10d, [rcx - 0x30]
cmp r10b, 9
ja 0x1400147d3
imul rdx, rdx, 0xa
inc r9
lea rdx, [rdx + rcx - 0x30]
inc r12
cmp rax, r12
jle 0x140014864
cmp byte [rbx + r12], 0x5f
je 0x1400147be
jmp 0x14001479a
cmp cl, 0x2e
jne 0x140014864
inc r12
xor r10d, r10d
test r9, r9
jne 0x14001480b
cmp rax, r12
jle 0x14001480b
cmp byte [rbx + r12], 0x30
jne 0x140014ae4
inc r10
inc r12
cmp rax, r12
jle 0x14001480b
cmp byte [rbx + r12], 0x5f
je 0x1400147fa
jmp 0x1400147e7
cmp r8, 0xffffffffffffffff
jne 0x14001482d
cmp rax, r12
jle 0x14001482d
movzx ecx, byte [rbx + r12]
or r8, 0xffffffffffffffff
lea r11d, [rcx - 0x30]
cmp r11b, 9
ja 0x14001482d
lea r8, [rcx - 0x30]
xor ecx, ecx
lea rbp, [rcx + r10]
cmp rax, r12
jle 0x140014868
movzx r11d, byte [rbx + r12]
lea r13d, [r11 - 0x30]
cmp r13b, 9
ja 0x140014868
imul rdx, rdx, 0xa
inc rcx
lea rdx, [rdx + r11 - 0x30]
inc r12
cmp rax, r12
jle 0x14001482f
cmp byte [rbx + r12], 0x5f
je 0x140014853
jmp 0x14001482f
xor ebp, ebp
xor ecx, ecx
mov r11, r9
add r11, rcx
jne 0x140014888
test r12, r12
je 0x140014af3
cmp r12, 1
jne 0x140014888
test sil, sil
jne 0x140014adf
lea r10, [r12 + 1]
cmp rax, r10
jle 0x14001490b
mov sil, byte [rbx + r12]
and esi, 0xffffffdf
cmp sil, 0x45
jne 0x14001490b
mov sil, byte [rbx + r10]
cmp sil, 0x2b
je 0x1400148b5
cmp sil, 0x2d
jne 0x1400148c1
or r10, 0xffffffffffffffff
jmp 0x1400148bb
mov r10d, 1
add r12, 2
jmp 0x1400148ca
mov r12, r10
mov r10d, 1
mov sil, byte [rbx + r12]
sub esi, 0x30
cmp sil, 9
ja 0x140014adf
xor esi, esi
cmp rax, r12
jle 0x140014913
movzx r13d, byte [rbx + r12]
lea r14d, [r13 - 0x30]
cmp r14b, 9
ja 0x140014913
imul rsi, rsi, 0xa
lea rsi, [rsi + r13 - 0x30]
inc r12
cmp rax, r12
je 0x1400148dd
cmp byte [rbx + r12], 0x5f
je 0x1400148fa
jmp 0x1400148dd
mov r10d, 1
xor esi, esi
imul rsi, r10
sub rsi, rbp
mov rbp, rsi
neg rbp
cmovs rbp, rsi
cmp rbp, 0x3e7
jg 0x140014935
cmp r11, 0xf
jg 0x14001496a
jmp 0x14001497e
test rdx, rdx
je 0x140014941
test rsi, rsi
jns 0x14001494d
jmp 0x140014965
mov qword [rdi], 0
jmp 0x140014af3
movsd xmm0, qword [0x140033c40]
xorps xmm2, xmm2
divsd xmm0, xmm2
mulsd xmm0, xmm1
jmp 0x140014aaf
xorps xmm0, xmm0
jmp 0x1400149d3
cmp r11, 0x10
jne 0x140014a2c
cmp r8, 8
jg 0x140014a2c
cmp rbp, 0x16
jle 0x14001499d
mov eax, 0xf
sub rax, r9
sub rax, rcx
lea rcx, [rax + 0x16]
cmp rbp, rcx
jle 0x1400149e9
jmp 0x140014a2c
test rdx, rdx
js 0x1400149a9
cvtsi2sd xmm0, rdx
jmp 0x1400149be
mov rax, rdx
and edx, 1
shr rax, 1
or rax, rdx
cvtsi2sd xmm0, rax
addsd xmm0, xmm0
lea rax, [0x140033800]
mulsd xmm0, xmm1
movsd xmm1, qword [rax + rbp*8]
test rsi, rsi
js 0x1400149e0
mulsd xmm1, xmm0
movsd qword [rdi], xmm1
jmp 0x140014af3
divsd xmm0, xmm1
jmp 0x140014aaf
test rsi, rsi
js 0x140014a2c
test rdx, rdx
js 0x1400149fa
cvtsi2sd xmm0, rdx
jmp 0x140014a0f
mov rcx, rdx
and edx, 1
shr rcx, 1
or rcx, rdx
cvtsi2sd xmm0, rcx
addsd xmm0, xmm0
lea rdx, [0x140033800]
mulsd xmm0, xmm1
sub rbp, rax
mulsd xmm0, qword [rdx + rax*8]
mulsd xmm0, qword [rdx + rbp*8]
jmp 0x140014aaf
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, r13
call fcn.140001c85
xor ecx, ecx
test r12, r12
je 0x140014a69
xor eax, eax
cmp byte [rbx], 0x2e
sete al
cmp r12, rax
jle 0x140014a69
mov dl, byte [rbx + rax]
lea r8d, [rdx - 0x2b]
and r8b, 0xfd
je 0x140014ab5
lea r8d, [rdx - 0x30]
cmp r8b, 9
jbe 0x140014ab5
mov rax, rbp
mov r8d, 0xa
sar rsi, 0x3f
mov byte [rsp + rcx + 0x2c], 0x45
cqo
and esi, 2
idiv r8
add esi, 0x2b
mov byte [rsp + rcx + 0x2d], sil
add edx, 0x30
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
add edx, 0x30
add eax, 0x30
mov byte [rsp + rcx + 0x2f], dl
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, r13
call fcn.140019820
movsd qword [rdi], xmm0
jmp 0x140014af3
cmp rcx, 0x1ed
jg 0x140014ac5
mov byte [rsp + rcx + 0x2c], dl
inc rcx
inc rax
cmp r12, rax
je 0x140014a4d
mov dl, byte [rbx + rax]
cmp dl, 0x2e
je 0x140014ac5
cmp dl, 0x5f
je 0x140014ac5
jmp 0x140014a4d
xor r12d, r12d
jmp 0x140014af3
cmp r8, 0xffffffffffffffff
jne 0x14001482d
jmp 0x140014816
mov rax, r12
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret