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

Disassembly:
push rbx
push rbp
push rsi
push rdi
push r13
push r15
sub rsp, 0x78
mov rax, qword [rdx + 0x28]
mov r13, rcx
movaps xmmword [rsp + 0x60], xmm6
mov rcx, rax
sub rcx, qword [rdx + 0x10]
mov rbx, rdx
add rcx, qword [rdx + 0x38]
xorps xmm6, xmm6
cmp byte [rax], 0x2d
movaps xmmword [rsp + 0x50], xmm7
xorps xmm7, xmm7
movaps xmmword [rsp + 0x40], xmm8
mov qword [rsp + 0x30], r8
mov qword [rsp + 0x28], rcx
jne 0x14001ef24
mov rcx, rdx
call fcn.14001eb50
mov r15b, 1
jmp 0x14001ef27
xor r15b, r15b
mov rax, qword [rbx + 0x28]
xor ebp, ebp
movsd xmm8, qword [0x1400a4560]
mov edi, ebp
mov qword [rsp + 0xb8], r12
mov esi, ebp
mov byte [rsp + 0x21], r15b
movzx ecx, byte [rax]
mov qword [rsp + 0x70], r14
mov byte [rsp + 0x20], dil
cmp cl, 0x30
jne 0x14001ef6c
mov rcx, rbx
mov r14d, ebp
call fcn.14001eb50
xor r12b, r12b
jmp 0x14001f163
sub cl, 0x31
cmp cl, 8
ja 0x14001f669
mov rcx, rbx
call fcn.14001eb50
mov rdx, qword [rbx + 0x28]
movsx r14d, al
mov rcx, rdx
sub r14d, 0x30
movzx eax, byte [rdx]
test r15b, r15b
je 0x14001eff3
cmp al, 0x30
jl 0x14001f047
cmp al, 0x39
jg 0x14001f047
nop word [rax + rax]
mov rcx, rdx
cmp r14d, 0xccccccc
jb 0x14001efc6
jne 0x14001f03f
cmp al, 0x38
ja 0x14001f03f
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
lea r14d, [r14 + r14*4]
lea r14d, [r14 - 0x18]
inc esi
lea r14d, [rcx + r14*2]
mov rcx, qword [rbx + 0x28]
movzx eax, byte [rcx]
cmp al, 0x30
jl 0x14001f047
mov rdx, rcx
cmp al, 0x39
jle 0x14001efb0
jmp 0x14001f047
cmp al, 0x30
jl 0x14001f047
cmp al, 0x39
jg 0x14001f047
nop dword [rax + rax]
mov rcx, rdx
cmp r14d, 0x19999999
jb 0x14001f012
jne 0x14001f03f
cmp al, 0x35
ja 0x14001f03f
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
lea r14d, [r14 + r14*4]
lea r14d, [r14 - 0x18]
inc esi
lea r14d, [rcx + r14*2]
mov rcx, qword [rbx + 0x28]
movzx eax, byte [rcx]
cmp al, 0x30
jl 0x14001f047
mov rdx, rcx
cmp al, 0x39
jle 0x14001f000
jmp 0x14001f047
mov byte [rsp + 0x20], 1
mov edi, r14d
xor r12b, r12b
cmp byte [rsp + 0x20], bpl
je 0x14001f163
movzx eax, byte [rcx]
test r15b, r15b
je 0x14001f0c7
cmp al, 0x30
jl 0x14001f163
cmp al, 0x39
jg 0x14001f163
movabs r15, 0xccccccccccccccc
cmp rdi, r15
jb 0x14001f082
jne 0x14001f0b2
cmp al, 0x38
ja 0x14001f0b2
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
inc esi
sub ecx, 0x30
lea rax, [rdi + rdi*4]
lea rdi, [rcx + rax*2]
mov rcx, qword [rbx + 0x28]
movzx eax, byte [rcx]
cmp al, 0x30
jl 0x14001f163
cmp al, 0x39
jle 0x14001f077
jmp 0x14001f163
mov rdx, rdi
mov r12b, 1
xorps xmm6, xmm6
test rdx, rdx
js 0x14001f118
cvtsi2sd xmm6, rdx
jmp 0x14001f12d
cmp al, 0x30
jl 0x14001f163
cmp al, 0x39
jg 0x14001f163
movabs r15, 0x1999999999999999
mov rdx, rdi
cmp rdi, r15
jb 0x14001f0ef
jne 0x14001f0b5
cmp al, 0x35
ja 0x14001f0b5
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
inc esi
sub ecx, 0x30
lea rax, [rdi + rdi*4]
lea rdi, [rcx + rax*2]
mov rcx, qword [rbx + 0x28]
movzx eax, byte [rcx]
cmp al, 0x30
jl 0x14001f163
cmp al, 0x39
jle 0x14001f0e1
jmp 0x14001f163
mov rax, rdx
and edx, 1
shr rax, 1
or rax, rdx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
cmp byte [rcx], 0x30
jl 0x14001f163
movzx eax, byte [rcx]
cmp al, 0x39
ja 0x14001f163
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
mov rax, qword [rbx + 0x28]
sub ecx, 0x30
mulsd xmm6, xmm8
movzx eax, byte [rax]
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
addsd xmm6, xmm0
cmp al, 0x30
jge 0x14001f135
mov rax, qword [rbx + 0x28]
mov r15d, ebp
cmp byte [rax], 0x2e
jne 0x14001f268
mov rcx, rbx
call fcn.14001eb50
mov rdx, qword [rbx + 0x28]
movzx eax, byte [rdx]
cmp al, 0x30
jl 0x14001f2a6
cmp al, 0x39
jg 0x14001f2a6
test r12b, r12b
jne 0x14001f219
cmp byte [rsp + 0x20], bpl
jne 0x14001f1a5
mov edi, r14d
mov rcx, rdx
movabs r12, 0x1fffffffffffff
mov rdx, rcx
cmp al, 0x39
ja 0x14001f1ec
cmp rdi, r12
ja 0x14001f1ec
mov rcx, rbx
call fcn.14001eb50
movsx ecx, al
dec r15d
sub ecx, 0x30
lea rax, [rdi + rdi*4]
lea rdi, [rcx + rax*2]
test rdi, rdi
je 0x14001f1de
inc esi
mov rdx, qword [rbx + 0x28]
mov rcx, rdx
movzx eax, byte [rdx]
cmp al, 0x30
jge 0x14001f1b2
xorps xmm6, xmm6
test rdi, rdi
js 0x14001f1fb
cvtsi2sd xmm6, rdi
jmp 0x14001f213
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
movzx eax, byte [rdx]
mov r12b, 1
cmp al, 0x30
jl 0x14001f268
movzx eax, byte [rdx]
cmp al, 0x39
jg 0x14001f268
mov rcx, rbx
cmp esi, 0x11
jge 0x14001f258
call fcn.14001eb50
mulsd xmm6, xmm8
dec r15d
movsx ecx, al
sub ecx, 0x30
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
comisd xmm0, xmm7
movaps xmm6, xmm0
jbe 0x14001f25d
inc esi
jmp 0x14001f25d
call fcn.14001eb50
mov rax, qword [rbx + 0x28]
movzx eax, byte [rax]
cmp al, 0x30
jge 0x14001f220
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x65
je 0x14001f27d
cmp cl, 0x45
jne 0x14001f3a9
mov rcx, rbx
call fcn.14001eb50
test r12b, r12b
jne 0x14001f2d7
mov rcx, rdi
cmp byte [rsp + 0x20], bpl
jne 0x14001f297
mov ecx, r14d
xorps xmm6, xmm6
test rcx, rcx
js 0x14001f2bf
cvtsi2sd xmm6, rcx
jmp 0x14001f2d4
sub rdx, qword [rbx + 0x10]
add rdx, qword [rbx + 0x38]
mov qword [r13 + 0x38], rdx
mov dword [r13 + 0x30], recvfrom
jmp 0x14001f67d
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
mov r12b, 1
mov rax, qword [rbx + 0x28]
xor sil, sil
movzx ecx, byte [rax]
cmp cl, 0x2b
jne 0x14001f2f0
mov rcx, rbx
call fcn.14001eb50
jmp 0x14001f300
cmp cl, 0x2d
jne 0x14001f307
mov rcx, rbx
call fcn.14001eb50
mov sil, 1
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
sub cl, 0x30
cmp cl, 9
ja 0x14001f4ad
mov rcx, rbx
call fcn.14001eb50
movsx ebp, al
mov rax, qword [rbx + 0x28]
sub ebp, 0x30
movzx r8d, byte [rax]
test sil, sil
je 0x14001f44c
lea ecx, [r15 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
mov esi, edx
sar esi, 2
mov eax, esi
shr eax, 0x1f
add esi, eax
cmp r8b, 0x30
jl 0x14001f3a7
cmp r8b, 0x39
ja 0x14001f3a7
mov rcx, rbx
call fcn.14001eb50
lea ebp, [rbp + rbp*4]
movsx ecx, al
lea ebp, [rbp - 0x18]
lea ebp, [rcx + rbp*2]
cmp ebp, esi
jle 0x14001f399
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x30
jl 0x14001f399
nop dword [rax]
cmp cl, 0x39
ja 0x14001f399
mov rcx, rbx
call fcn.14001eb50
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x30
jge 0x14001f380
mov rax, qword [rbx + 0x28]
movzx r8d, byte [rax]
cmp r8b, 0x30
jge 0x14001f352
neg ebp
test r12b, r12b
je 0x14001f4e9
lea ecx, [r15 + rbp]
cmp ecx, 0xfffffecc
jge 0x14001f4c2
divsd xmm6, qword [0x1400a4638]
lea eax, [rcx + 0x134]
cmp eax, 0xfffffecc
jl 0x14001f3f3
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x1400a1990]
movaps xmm7, xmm6
sub rcx, rax
divsd xmm7, qword [rcx]
comisd xmm7, xmmword [0x1400a4640]
ja 0x14001f49b
cmp byte [rsp + 0x21], 0
je 0x14001f40f
xorps xmm7, xmmword [0x1400a4c50]
mov rbx, qword [rsp + 0x30]
mov rax, qword [rbx + 0x40]
sub rax, qword [rbx + 0x38]
cmp rax, 0x10
jge 0x14001f42b
lea rcx, [rbx + 0x20]
call fcn.14001faf0
mov rcx, qword [rbx + 0x38]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x38], rax
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], 0x216
movsd qword [rcx], xmm7
jmp 0x14001f67d
mov esi, 0x134
sub esi, r15d
cmp r8b, 0x30
jl 0x14001f3a9
cmp r8b, 0x39
jg 0x14001f3a9
mov rcx, rbx
call fcn.14001eb50
lea ebp, [rbp + rbp*4]
movsx ecx, al
lea ebp, [rbp - 0x18]
lea ebp, [rcx + rbp*2]
cmp ebp, esi
jg 0x14001f49b
mov rax, qword [rbx + 0x28]
movzx ecx, byte [rax]
cmp cl, 0x30
jl 0x14001f3a9
cmp cl, 0x39
jle 0x14001f468
jmp 0x14001f3a9
mov rax, qword [rsp + 0x28]
mov dword [r13 + 0x30], recvfrom
jmp 0x14001f679
sub rax, qword [rbx + 0x10]
add rax, qword [rbx + 0x38]
mov dword [r13 + 0x30], recvfrom
jmp 0x14001f679
movsxd rax, ecx
lea rax, [rax*8]
test ecx, ecx
js 0x14001f3e2
lea rcx, [0x1400a1990]
movaps xmm7, xmm6
mulsd xmm7, qword [rax + rcx]
jmp 0x14001f3f3
mov rbx, qword [rsp + 0x30]
add rbx, 0x20
mov rax, qword [rbx + 0x20]
sub rax, qword [rbx + 0x18]
cmp byte [rsp + 0x20], 0
je 0x14001f5df
cmp byte [rsp + 0x21], 0
je 0x14001f574
neg rdi
cmp rax, 0x10
jge 0x14001f51d
mov rcx, rbx
call fcn.14001faf0
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
movups xmmword [rcx], xmm0
mov qword [rcx], rdi
mov word [rcx + 0xe], 0x96
test rdi, rdi
js 0x14001f55c
movabs rdx, 0xffffffff00000000
mov eax, 0x196
mov word [rcx + 0xe], ax
test rdx, rdi
jne 0x14001f5c5
mov eax, 0x1d6
jmp 0x14001f5c1
cmp rdi, 0xffffffff80000000
jl 0x14001f67d
mov word [rcx + 0xe], 0xb6
jmp 0x14001f67d
cmp rax, 0x10
jge 0x14001f582
mov rcx, rbx
call fcn.14001faf0
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 0x14001f5ae
mov eax, 0x196
mov word [rcx + 0xe], ax
movabs rdx, 0xffffffff00000000
test rdx, rdi
jne 0x14001f5c5
or ax, 0x40
mov word [rcx + 0xe], ax
test rdi, 0xffffffff80000000
jne 0x14001f67d
or ax, 0x20
mov word [rcx + 0xe], ax
jmp 0x14001f67d
cmp byte [rsp + 0x21], 0
je 0x14001f626
neg r14d
cmp rax, 0x10
jge 0x14001f5f7
mov rcx, rbx
call fcn.14001faf0
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
test r14d, r14d
mov edx, 0x1f6
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
movsxd rax, r14d
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x14001f67d
cmp rax, 0x10
jge 0x14001f634
mov rcx, rbx
call fcn.14001faf0
mov rcx, qword [rbx + 0x18]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x18], rax
mov eax, r14d
shr r14d, 0x1a
not r14w
movups xmmword [rcx], xmm0
mov qword [rcx], rax
and r14w, 0x20
mov eax, 0x1d6
or r14w, ax
mov word [rcx + 0xe], r14w
jmp 0x14001f67d
sub rax, qword [rbx + 0x10]
add rax, qword [rbx + 0x38]
mov dword [r13 + 0x30], 3
mov qword [r13 + 0x38], rax
mov r14, qword [rsp + 0x70]
mov r12, qword [rsp + 0xb8]
movaps xmm6, xmmword [rsp + 0x60]
movaps xmm7, xmmword [rsp + 0x50]
movaps xmm8, xmmword [rsp + 0x40]
add rsp, 0x78
pop r15
pop r13
pop rdi
pop rsi
pop rbp
pop rbx
ret