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

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x238
xor eax, eax
mov r10, rcx
mov rbx, rdx
test rcx, rcx
je 0x306e16c95
mov rax, qword [rcx]
cmp rax, r8
jle 0x306e16cc5
mov dl, byte [r10 + r8 + 0x10]
lea ecx, [rdx - 0x2b]
and cl, 0xfd
jne 0x306e16cc5
movsd xmm0, qword [0x306e455a8]
cmp dl, 0x2d
je 0x306e16cbc
movsd xmm0, qword [0x306e455b0]
lea r9, [r8 + 1]
mov r13b, 1
jmp 0x306e16cd3
movsd xmm0, qword [0x306e455b0]
mov r9, r8
xor r13d, r13d
lea rcx, [r9 + 2]
cmp rcx, rax
jge 0x306e16d6f
mov dl, byte [r10 + r9 + 0x10]
and edx, 0xffffffdf
cmp dl, 0x4e
je 0x306e16cf7
cmp dl, 0x49
jne 0x306e16d6f
jmp 0x306e16d7d
mov dl, byte [r10 + r9 + 0x11]
xor r12d, r12d
and edx, 0xffffffdf
cmp dl, 0x41
jne 0x306e17188
mov dl, byte [r10 + rcx + 0x10]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x306e17188
add r9, 3
cmp r9, rax
jge 0x306e16d4f
mov al, byte [r10 + r9 + 0x10]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x306e17188
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x306e17174
cmp al, 0x5f
je 0x306e17174
movsd xmm0, qword [0x306e455b8]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x306e17055
or rdx, 0xffffffffffffffff
cmp r9, rax
jl 0x306e16df7
jmp 0x306e16e0f
mov dl, byte [r10 + r9 + 0x11]
xor r12d, r12d
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x306e17188
mov dl, byte [r10 + rcx + 0x10]
and edx, 0xffffffdf
cmp dl, 0x46
jne 0x306e17188
add r9, 3
cmp r9, rax
jge 0x306e16dd5
mov al, byte [r10 + r9 + 0x10]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x306e17188
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x306e17174
cmp al, 0x5f
je 0x306e17174
movsd xmm1, qword [0x306e455b0]
xorps xmm2, xmm2
divsd xmm1, xmm2
mulsd xmm1, xmm0
movsd qword [rbx], xmm1
sub r9, r8
mov r12, r9
jmp 0x306e17188
movzx ecx, byte [r10 + r9 + 0x10]
or rdx, 0xffffffffffffffff
lea r11d, [rcx - 0x30]
cmp r11b, 9
ja 0x306e16e0f
lea rdx, [rcx - 0x30]
xor edi, edi
xor ecx, ecx
cmp r9, rax
jge 0x306e16eec
movzx r11d, byte [r10 + r9 + 0x10]
lea esi, [r11 - 0x30]
cmp sil, 9
ja 0x306e16e4a
imul rcx, rcx, 0xa
inc rdi
lea rcx, [rcx + r11 - 0x30]
inc r9
cmp r9, rax
je 0x306e16e13
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x306e16e38
jmp 0x306e16e13
cmp r11b, 0x2e
jne 0x306e16eec
inc r9
test rdi, rdi
jne 0x306e16e88
xor r11d, r11d
mov r14, r11
cmp r9, rax
jge 0x306e16e8b
cmp byte [r10 + r9 + 0x10], 0x30
jne 0x306e17179
inc r11
inc r9
cmp r9, rax
je 0x306e16e5f
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x306e16e76
jmp 0x306e16e5f
xor r14d, r14d
cmp rdx, 0xffffffffffffffff
jne 0x306e16eae
cmp r9, rax
jge 0x306e16eae
movzx r11d, byte [r10 + r9 + 0x10]
or rdx, 0xffffffffffffffff
lea esi, [r11 - 0x30]
cmp sil, 9
ja 0x306e16eae
lea rdx, [r11 - 0x30]
xor r11d, r11d
lea rbp, [r14 + r11]
mov rsi, r11
cmp r9, rax
jge 0x306e16ef0
movzx r12d, byte [r10 + r9 + 0x10]
lea r15d, [r12 - 0x30]
cmp r15b, 9
ja 0x306e16ef0
imul rcx, rcx, 0xa
inc r11
lea rcx, [rcx + r12 - 0x30]
inc r9
cmp r9, rax
je 0x306e16eb1
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x306e16eda
jmp 0x306e16eb1
xor ebp, ebp
xor esi, esi
mov r12, rdi
add r12, rsi
jne 0x306e16f13
cmp r9, r8
je 0x306e17188
lea r11, [r8 + 1]
cmp r11, r9
jne 0x306e16f13
test r13b, r13b
jne 0x306e17188
lea r11, [r9 + 1]
cmp r11, rax
jge 0x306e16fa1
mov r13b, byte [r10 + r9 + 0x10]
and r13d, 0xffffffdf
cmp r13b, 0x45
jne 0x306e16fa1
mov r13b, byte [r10 + r11 + 0x10]
cmp r13b, 0x2b
je 0x306e16f46
cmp r13b, 0x2d
jne 0x306e16f52
or r13, 0xffffffffffffffff
jmp 0x306e16f4c
mov r13d, 1
add r9, 2
jmp 0x306e16f5b
mov r9, r11
mov r13d, 1
mov r15b, byte [r10 + r9 + 0x10]
lea r11d, [r15 - 0x30]
cmp r11b, 9
ja 0x306e17174
xor r11d, r11d
cmp r9, rax
jge 0x306e16faa
movzx r14d, byte [r10 + r9 + 0x10]
lea r15d, [r14 - 0x30]
cmp r15b, 9
ja 0x306e16faa
imul r11, r11, 0xa
lea r11, [r11 + r14 - 0x30]
inc r9
cmp r9, rax
je 0x306e16f71
cmp byte [r10 + r9 + 0x10], 0x5f
je 0x306e16f8f
jmp 0x306e16f71
mov r13d, 1
xor r11d, r11d
imul r11, r13
sub r11, rbp
mov rax, r11
neg rax
cmovs rax, r11
cmp rax, 0x3e7
jg 0x306e16fcb
cmp r12, 0xf
jg 0x306e16fe8
jmp 0x306e16ffc
xorps xmm1, xmm1
test r11, r11
js 0x306e16fe2
movsd xmm1, qword [0x306e455b0]
xorps xmm2, xmm2
divsd xmm1, xmm2
mulsd xmm0, xmm1
jmp 0x306e17055
cmp r12, 0x10
jne 0x306e170ab
cmp rdx, 9
je 0x306e170ab
cmp rax, 0x16
jle 0x306e1701b
mov edx, 0xf
sub rdx, rdi
sub rdx, rsi
lea rsi, [rdx + 0x16]
cmp rsi, rax
jge 0x306e1705e
jmp 0x306e170ab
test rcx, rcx
js 0x306e17027
cvtsi2sd xmm1, rcx
jmp 0x306e1703c
mov rdx, rcx
and ecx, 1
shr rdx, 1
or rdx, rcx
cvtsi2sd xmm1, rdx
addsd xmm1, xmm1
lea rdx, [0x306e44ac0]
mulsd xmm0, xmm1
movsd xmm1, qword [rdx + rax*8]
test r11, r11
jns 0x306e16fe2
divsd xmm0, xmm1
movsd qword [rbx], xmm0
jmp 0x306e16dec
test r11, r11
js 0x306e170ab
sub r9, r8
mov r12, r9
test rcx, rcx
js 0x306e17075
cvtsi2sd xmm1, rcx
jmp 0x306e1708a
mov r8, rcx
and ecx, 1
shr r8, 1
or r8, rcx
cvtsi2sd xmm1, r8
addsd xmm1, xmm1
lea rcx, [0x306e44ac0]
mulsd xmm1, xmm0
sub rax, rdx
mulsd xmm1, qword [rcx + rdx*8]
mulsd xmm1, qword [rcx + rax*8]
movsd qword [rbx], xmm1
jmp 0x306e17188
lea r13, [rsp + 0x3c]
mov edx, 0x1f4
mov r12, r9
mov qword [rsp + 0x28], rax
mov rcx, r13
sub r12, r8
call sym.nimZeroMem.lto_priv.0.lto_priv.0
xor ecx, ecx
cmp r9, r8
mov rax, qword [rsp + 0x28]
jle 0x306e170fd
cmp byte [r10 + r8 + 0x10], 0x2e
jne 0x306e170df
inc r8
xor ecx, ecx
cmp r9, r8
jle 0x306e170fd
mov dl, byte [r10 + r8 + 0x10]
lea esi, [rdx - 0x2b]
and sil, 0xfd
je 0x306e17148
lea esi, [rdx - 0x30]
cmp sil, 9
jbe 0x306e17148
mov r8d, 0xa
cqo
sar r11, 0x3f
mov byte [rsp + rcx + 0x3c], 0x45
idiv r8
and r11d, 2
add r11d, 0x2b
mov byte [rsp + rcx + 0x3d], r11b
add edx, 0x30
mov byte [rsp + rcx + 0x40], dl
cqo
idiv r8
add edx, 0x30
add eax, 0x30
mov byte [rsp + rcx + 0x3f], dl
xor edx, edx
mov byte [rsp + rcx + 0x3e], al
mov rcx, r13
call sym.__strtod
movsd qword [rbx], xmm0
jmp 0x306e17188
cmp rcx, 0x1ed
jg 0x306e17158
mov byte [rsp + rcx + 0x3c], dl
inc rcx
inc r8
cmp r9, r8
je 0x306e170e1
mov dl, byte [r10 + r8 + 0x10]
cmp dl, 0x2e
je 0x306e17158
cmp dl, 0x5f
je 0x306e17158
jmp 0x306e170e1
xor r12d, r12d
jmp 0x306e17188
cmp rdx, 0xffffffffffffffff
jne 0x306e16eae
jmp 0x306e16e96
mov rax, r12
add rsp, 0x238
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret