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

Disassembly:
mov qword [rsp + 0x18], r8
mov qword [rsp + 8], rcx
push rbx
push rbp
push rdi
push r12
push r14
push r15
sub rsp, 0x78
mov rbx, rdx
movaps xmmword [rsp + 0x50], xmm6
mov rdx, rcx
movaps xmmword [rsp + 0x40], xmm7
movaps xmmword [rsp + 0x30], xmm8
xorps xmm7, xmm7
xorps xmm6, xmm6
mov rax, qword [rbx + 0x28]
mov rcx, rax
sub rcx, qword [rbx + 0x10]
add rcx, qword [rbx + 0x38]
cmp byte [rax], 0x2d
mov qword [rsp + 0x28], rcx
jne 0x140007c51
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rsp + 0xb0]
mov r12b, 1
jmp 0x140007c54
xor r12b, r12b
mov rax, qword [rbx + 0x28]
xor r14d, r14d
movsd xmm8, qword [0x140085398]
xor r15b, r15b
mov qword [rsp + 0x70], rsi
mov edi, r14d
mov byte [rsp + 0xc8], r12b
mov ebp, r14d
movzx ecx, byte [rax]
mov qword [rsp + 0x68], r13
mov byte [rsp + 0xb8], r15b
cmp cl, 0x30
jne 0x140007ca9
mov rcx, rbx
mov r13d, r14d
call fcn.140007870
mov rdx, qword [rbx + 0x28]
mov r12d, r14d
mov esi, r14d
jmp 0x140007e1b
sub cl, 0x31
cmp cl, 8
ja 0x140008467
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
movsx esi, al
sub esi, 0x30
movzx eax, byte [rdx]
test r12b, r12b
je 0x140007d08
cmp al, 0x30
jl 0x140007d4a
cmp al, 0x39
ja 0x140007d4a
cmp esi, 0xccccccc
jb 0x140007ce5
jne 0x140007d45
cmp al, 0x38
ja 0x140007d45
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
lea esi, [rsi + rsi*4]
movsx ecx, al
lea esi, [rsi - 0x18]
inc ebp
movzx eax, byte [rdx]
lea esi, [rcx + rsi*2]
cmp al, 0x30
jge 0x140007cd3
jmp 0x140007d4a
cmp al, 0x30
jl 0x140007d4a
nop dword [rax]
cmp al, 0x39
ja 0x140007d4a
cmp esi, 0x19999999
jb 0x140007d22
jne 0x140007d45
cmp al, 0x35
ja 0x140007d45
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
lea esi, [rsi + rsi*4]
movsx ecx, al
lea esi, [rsi - 0x18]
inc ebp
movzx eax, byte [rdx]
lea esi, [rcx + rsi*2]
cmp al, 0x30
jge 0x140007d10
jmp 0x140007d4a
mov r15b, 1
mov edi, esi
movzx r8d, r15b
mov r13d, esi
xor r15b, r15b
mov byte [rsp + 0xb8], r8b
test r8b, r8b
je 0x140007dcf
mov rcx, qword [rbx + 0x28]
mov byte [rsp + 0xb8], r8b
mov rdx, rcx
movzx eax, byte [rcx]
test r12b, r12b
je 0x140007f08
cmp al, 0x30
jl 0x140007dcf
mov byte [rsp + 0xb8], r8b
movabs r12, 0xccccccccccccccc
xor r15b, r15b
cmp al, 0x39
ja 0x140007dcf
cmp rdi, r12
jb 0x140007dac
jne 0x140007ed3
cmp al, 0x38
ja 0x140007ed3
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
inc ebp
movsx ecx, al
lea rax, [rdi + rdi*4]
sub ecx, 0x30
lea rdi, [rcx + rax*2]
movzx eax, byte [rdx]
cmp al, 0x30
jge 0x140007d92
mov rax, rdx
mov r12, rdi
test r15b, r15b
je 0x140007e1b
cmp byte [rax], 0x30
mov rdx, rax
jl 0x140007e1b
movzx ecx, byte [rax]
mov rdx, rax
cmp cl, 0x39
ja 0x140007e1b
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
movsx ecx, al
mov rax, rdx
sub ecx, 0x30
mulsd xmm6, xmm8
movd xmm0, ecx
movzx ecx, byte [rdx]
cvtdq2pd xmm0, xmm0
addsd xmm6, xmm0
cmp cl, 0x30
jge 0x140007de5
cmp byte [rdx], 0x2e
mov dword [rsp + 0x20], r14d
jne 0x14000804a
mov rcx, rbx
call fcn.140007870
mov rcx, qword [rbx + 0x28]
movzx r8d, byte [rcx]
lea eax, [r8 - 0x30]
cmp al, 9
ja 0x14000802a
test r15b, r15b
jne 0x140007fd0
cmp byte [rsp + 0xb8], r14b
mov r9, rcx
mov edi, r13d
movabs r15, 0x1fffffffffffff
cmovne rdi, r12
mov esi, r13d
nop dword [rax]
mov r10, rcx
mov rdx, r9
cmp r8b, 0x39
ja 0x140007ebd
cmp rdi, r15
ja 0x140007ebd
mov rcx, rbx
call fcn.140007870
dec dword [rsp + 0x20]
movsx ecx, al
lea rax, [rdi + rdi*4]
sub ecx, 0x30
lea rdi, [rcx + rax*2]
mov rcx, qword [rbx + 0x28]
test rdi, rdi
lea eax, [rbp + 1]
mov r9, rcx
mov r10, rcx
cmove eax, ebp
mov rdx, rcx
movzx r8d, byte [rcx]
mov ebp, eax
cmp r8b, 0x30
jge 0x140007e70
xorps xmm6, xmm6
test rdi, rdi
js 0x140007fa2
cvtsi2sd xmm6, rdi
jmp 0x140007fba
xorps xmm6, xmm6
test rdi, rdi
js 0x140007ee8
cvtsi2sd xmm6, rdi
mov r15b, 1
jmp 0x140007dcf
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
mov r15b, 1
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
jmp 0x140007dcf
cmp al, 0x30
jl 0x140007dcf
mov byte [rsp + 0xb8], r8b
xor r15b, r15b
movabs rcx, 0x1999999999999999
mov r12, rdi
cmp al, 0x39
ja 0x140007dcf
cmp rdi, rcx
jb 0x140007f3b
jne 0x140007f67
cmp al, 0x35
ja 0x140007f67
mov rcx, rbx
call fcn.140007870
mov rdx, qword [rbx + 0x28]
inc ebp
movsx ecx, al
lea rax, [rdi + rdi*4]
sub ecx, 0x30
lea rdi, [rcx + rax*2]
movzx eax, byte [rdx]
mov r12, rdi
cmp al, 0x30
jl 0x140007e1b
jmp 0x140007f18
xorps xmm6, xmm6
test rdi, rdi
js 0x140007f7f
cvtsi2sd xmm6, rdi
mov r15b, 1
mov rax, rdx
jmp 0x140007dda
mov rax, rdi
mov rcx, rdi
and eax, 1
shr rcx, 1
or rcx, rax
mov r15b, 1
mov rax, rdx
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
jmp 0x140007dda
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
movzx r8d, byte [r10]
mov r15b, 1
mov r12, rsi
cmp r8b, 0x30
jl 0x14000804d
jmp 0x140007fd3
mov rdx, rcx
mov r12, rsi
cmp r8b, 0x39
ja 0x14000804d
mov rcx, rbx
cmp ebp, 0x11
jge 0x140008015
call fcn.140007870
dec dword [rsp + 0x20]
movsx ecx, al
lea eax, [rbp + 1]
sub ecx, 0x30
mulsd xmm6, xmm8
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
comisd xmm0, xmm7
movaps xmm6, xmm0
cmovbe eax, ebp
mov ebp, eax
jmp 0x14000801a
call fcn.140007870
mov rdx, qword [rbx + 0x28]
movzx r8d, byte [rdx]
cmp r8b, 0x30
jge 0x140007fd3
jmp 0x14000804d
sub rcx, qword [rbx + 0x10]
mov rdx, qword [rsp + 0xb0]
add rcx, qword [rbx + 0x38]
mov dword [rdx + 0x30], 0xe
mov qword [rdx + 0x38], rcx
jmp 0x14000847a
mov r12d, esi
cmp byte [rdx], 0x65
je 0x14000805b
cmp byte [rdx], 0x45
jne 0x14000817a
mov rcx, rbx
call fcn.140007870
test r15b, r15b
jne 0x14000809e
cmp byte [rsp + 0xb8], r14b
mov rcx, rdi
xorps xmm6, xmm6
cmove rcx, r12
test rcx, rcx
js 0x140008086
cvtsi2sd xmm6, rcx
jmp 0x14000809b
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
mov r15b, 1
mov rcx, qword [rbx + 0x28]
xor sil, sil
movzx eax, byte [rcx]
cmp al, 0x2b
jne 0x1400080b6
mov rcx, rbx
call fcn.140007870
jmp 0x1400080c5
cmp al, 0x2d
jne 0x1400080cc
mov rcx, rbx
call fcn.140007870
mov sil, 1
mov rcx, qword [rbx + 0x28]
movzx eax, byte [rcx]
sub al, 0x30
cmp al, 9
ja 0x140008292
mov rcx, rbx
call fcn.140007870
movsx r14d, al
mov rax, qword [rbx + 0x28]
sub r14d, 0x30
movzx r8d, byte [rax]
test sil, sil
je 0x14000822a
mov ecx, dword [rsp + 0x20]
mov eax, 0x66666667
add ecx, 0x7ffffff7
imul ecx
mov esi, edx
sar esi, 2
mov eax, esi
shr eax, 0x1f
add esi, eax
cmp r8b, 0x30
jl 0x140008177
nop word [rax + rax]
cmp r8b, 0x39
ja 0x140008177
mov rcx, rbx
call fcn.140007870
lea r14d, [r14 + r14*4]
movsx ecx, al
lea r14d, [r14 - 0x18]
lea r14d, [rcx + r14*2]
cmp r14d, esi
jle 0x140008169
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x30
jl 0x140008169
nop
cmp cl, 0x39
ja 0x140008169
mov rcx, rbx
call fcn.140007870
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x30
jge 0x140008150
mov rax, qword [rbx + 0x28]
movzx r8d, byte [rax]
cmp r8b, 0x30
jge 0x140008120
neg r14d
mov eax, dword [rsp + 0x20]
test r15b, r15b
je 0x1400082d8
lea ecx, [r14 + rax]
cmp ecx, 0xfffffecc
jge 0x1400082b1
divsd xmm6, qword [0x140085428]
lea eax, [rcx + 0x134]
cmp eax, 0xfffffecc
jl 0x1400081c8
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x14007edb0]
movaps xmm7, xmm6
sub rcx, rax
divsd xmm7, qword [rcx]
comisd xmm7, xmmword [0x140085430]
ja 0x140008279
cmp byte [rsp + 0xc8], 0
je 0x1400081e7
xorps xmm7, xmmword [0x140085870]
mov rbx, qword [rsp + 0xc0]
mov rax, qword [rbx + 0x40]
sub rax, qword [rbx + 0x38]
cmp rax, 0x10
jge 0x140008206
lea rcx, [rbx + 0x20]
call fcn.140008900
mov rcx, qword [rbx + 0x38]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x38], rax
mov eax, 0x216
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], ax
movsd qword [rcx], xmm7
jmp 0x14000847a
mov eax, dword [rsp + 0x20]
mov esi, 0x134
sub esi, eax
cmp r8b, 0x30
jl 0x14000817e
nop
cmp r8b, 0x39
ja 0x14000817a
mov rcx, rbx
call fcn.140007870
lea r14d, [r14 + r14*4]
movsx ecx, al
lea r14d, [r14 - 0x18]
lea r14d, [rcx + r14*2]
cmp r14d, esi
jg 0x140008279
mov rax, qword [rbx + 0x28]
movzx r8d, byte [rax]
cmp r8b, 0x30
jge 0x140008240
jmp 0x14000817a
mov rdx, qword [rsp + 0xb0]
mov rax, qword [rsp + 0x28]
mov dword [rdx + 0x30], 0xd
jmp 0x140008476
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
mov rdx, qword [rsp + 0xb0]
add rax, rcx
mov dword [rdx + 0x30], 0xf
jmp 0x140008476
movsxd rax, ecx
lea rax, [rax*8]
test ecx, ecx
js 0x1400081b7
lea rcx, [0x14007edb0]
movaps xmm7, xmm6
mulsd xmm7, qword [rax + rcx]
jmp 0x1400081c8
mov rbx, qword [rsp + 0xc0]
add rbx, 0x20
mov rax, qword [rbx + 0x20]
sub rax, qword [rbx + 0x18]
cmp byte [rsp + 0xb8], 0
je 0x1400083dd
cmp byte [rsp + 0xc8], 0
je 0x140008372
neg rdi
cmp rax, 0x10
jge 0x140008315
mov rcx, rbx
call fcn.140008900
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
mov eax, 0x96
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], ax
mov qword [rcx], rdi
test rdi, rdi
js 0x140008357
movabs rdx, 0xffffffff00000000
mov eax, 0x196
mov word [rcx + 0xe], ax
test rdx, rdi
jne 0x1400083c3
mov eax, 0x1d6
jmp 0x1400083bf
cmp rdi, 0xffffffff80000000
jl 0x14000847a
mov eax, 0xb6
mov word [rcx + 0xe], ax
jmp 0x14000847a
cmp rax, 0x10
jge 0x140008380
mov rcx, rbx
call fcn.140008900
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
mov eax, 0x116
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], ax
mov qword [rcx], rdi
test rdi, rdi
js 0x1400083ac
mov eax, 0x196
mov word [rcx + 0xe], ax
movabs rdx, 0xffffffff00000000
test rdx, rdi
jne 0x1400083c3
or ax, 0x40
mov word [rcx + 0xe], ax
test rdi, 0xffffffff80000000
jne 0x14000847a
or ax, 0x20
mov word [rcx + 0xe], ax
jmp 0x14000847a
cmp byte [rsp + 0xc8], 0
je 0x140008427
neg r13d
cmp rax, 0x10
jge 0x1400083f8
mov rcx, rbx
call fcn.140008900
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
test r13d, r13d
mov edx, 0x1f6
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
movsxd rax, r13d
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x14000847a
cmp rax, 0x10
jge 0x140008435
mov rcx, rbx
call fcn.140008900
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
shr r13d, 0x1a
not r13w
and r13w, 0x20
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
mov eax, 0x1d6
movups xmmword [rcx], xmm0
or r13w, ax
mov qword [rcx], r12
mov word [rcx + 0xe], r13w
jmp 0x14000847a
sub rax, qword [rbx + 0x10]
add rax, qword [rbx + 0x38]
mov dword [rdx + 0x30], 3
mov qword [rdx + 0x38], rax
mov r13, qword [rsp + 0x68]
mov rsi, qword [rsp + 0x70]
movaps xmm6, xmmword [rsp + 0x50]
movaps xmm7, xmmword [rsp + 0x40]
movaps xmm8, xmmword [rsp + 0x30]
add rsp, 0x78
pop r15
pop r14
pop r12
pop rdi
pop rbp
pop rbx
ret