Function at 0x180066520
Capabilities:
Parse credit card information

Disassembly:
push rdi
push r14
push r15
sub rsp, 0x30
mov r9d, dword [rcx]
mov r14, r8
mov rdi, rdx
mov r15, rcx
lea eax, [r9 - 1]
mov dword [rcx], eax
test r9d, r9d
je 0x180066ad7
mov rdx, qword [rcx + 0x18]
mov qword [rsp + 0x50], rbx
mov qword [rsp + 0x58], rbp
mov qword [rsp + 0x60], rsi
mov qword [rsp + 0x28], r12
mov qword [rsp + 0x20], r13
cmp r8, rdx
je 0x180066aae
lea r12, [rcx + 0x10]
movabs rbp, 0x8000240000000000
xor r11d, r11d
nop dword [rax]
movzx r8d, byte [r14]
movsx ecx, r8b
sub ecx, 0x24
je 0x18006678b
sub ecx, 1
je 0x1800665e3
sub ecx, 3
je 0x1800668f3
cmp ecx, 1
jne 0x180066798
mov r8d, dword [r15 + 0x28]
sub r8d, ecx
movsxd rcx, r8d
js 0x180066ae8
mov rdx, rcx
shl rdx, 4
add rdx, 0x38
add rdx, r15
cmp qword [rdx], 0xffffffffffffffff
je 0x1800668ae
dec r8d
sub rdx, 0x10
sub rcx, 1
js 0x180066ae8
jmp 0x1800665c6
movzx ecx, byte [r14 + 1]
movzx eax, cl
cmp cl, 0x30
jl 0x180066798
cmp al, 0x39
jle 0x180066717
cmp al, 0x62
je 0x18006669f
cmp al, 0x66
jne 0x180066798
cmp byte [r14 + 2], 0x5b
jne 0x180066b2c
cmp byte [r14 + 3], 0x5e
lea rax, [r14 + 3]
jne 0x180066625
inc rax
mov rdx, qword [r15 + 0x18]
nop dword [rax]
cmp rax, rdx
je 0x180066b1b
movzx ecx, byte [rax]
inc rax
cmp cl, 0x25
jne 0x18006664c
cmp rax, rdx
jae 0x18006664c
inc rax
cmp byte [rax], 0x5d
jne 0x180066630
lea rbx, [rax + 1]
cmp rdi, qword [r15 + 8]
jne 0x18006665f
xor al, al
jmp 0x180066663
movzx eax, byte [rdi - 1]
movzx ecx, al
lea r8, [rbx - 1]
lea rdx, [r14 + 2]
call fcn.180066470
test eax, eax
jne 0x180066a9f
movzx ecx, byte [rdi]
lea r8, [rbx - 1]
lea rdx, [r14 + 2]
call fcn.180066470
test eax, eax
je 0x180066a9f
mov r14, rbx
lea r12, [r15 + 0x10]
jmp 0x18006689c
lea rcx, [r14 + 2]
lea rax, [rdx - 1]
cmp rcx, rax
jae 0x180066b3d
movzx r8d, byte [rcx]
cmp byte [rdi], r8b
jne 0x180066aab
mov r9, qword [r15 + 0x10]
lea r12, [r15 + 0x10]
movzx r10d, byte [rcx + 1]
lea rax, [rdi + 1]
mov ecx, 1
cmp rax, r9
jae 0x180066aab
nop dword [rax]
movzx edx, byte [rax]
cmp dl, r10b
jne 0x180066703
sub ecx, 1
jne 0x18006670a
lea rdi, [rax + 1]
test rdi, rdi
je 0x180066aae
add r14, 4
jmp 0x18006689c
cmp dl, r8b
jne 0x18006670a
inc ecx
inc rax
cmp rax, r9
jb 0x1800666e0
jmp 0x180066aab
lea r8d, [rcx - 0x31]
mov rax, rcx
test r8d, r8d
js 0x180066b4e
cmp r8d, dword [r15 + 0x28]
jge 0x180066b4e
add rax, 0xffffffffffffffcf
add rax, rax
mov rbx, qword [r15 + rax*8 + 0x38]
cmp rbx, 0xffffffffffffffff
je 0x180066b4e
mov rax, qword [r15 + 0x10]
lea r12, [r15 + 0x10]
sub rax, rdi
cmp rax, rbx
jb 0x180066aab
add rcx, 0xffffffffffffffd2
mov r8, rbx
add rcx, rcx
mov rdx, rdi
mov rcx, qword [r15 + rcx*8]
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
jne 0x180066971
add rdi, rbx
je 0x180066aae
add r14, 2
jmp 0x18006689c
lea rax, [r14 + 1]
cmp rax, rdx
je 0x180066aa3
lea rbx, [r14 + 1]
cmp r8b, 0x25
je 0x1800667d4
cmp r8b, 0x5b
jne 0x1800667e0
cmp byte [r14 + 1], 0x5e
jne 0x1800667b2
inc rbx
cmp rbx, rdx
je 0x180066b62
movzx eax, byte [rbx]
inc rbx
cmp al, 0x25
jne 0x1800667cd
cmp rbx, rdx
jae 0x1800667cd
inc rbx
cmp byte [rbx], 0x5d
jne 0x1800667b2
jmp 0x1800667dd
cmp rbx, rdx
je 0x180066b73
inc rbx
cmp rdi, qword [r15 + 0x10]
lea r12, [r15 + 0x10]
jb 0x1800667ef
movzx eax, byte [rbx]
jmp 0x180066868
movzx r9d, byte [rdi]
movzx eax, r8b
cmp r8b, 0x25
je 0x18006684f
cmp al, 0x2e
je 0x180066821
cmp al, 0x5b
je 0x180066810
cmp r8d, r9d
mov ecx, r11d
sete cl
jmp 0x180066861
lea r8, [rbx - 1]
mov rdx, r14
mov ecx, r9d
call fcn.180066470
jmp 0x18006685c
movzx eax, byte [rbx]
movsx ecx, al
sub ecx, 0x2a
je 0x180066a18
sub ecx, 1
je 0x180066a15
sub ecx, 2
je 0x180066981
cmp ecx, 0x12
je 0x180066880
inc rdi
mov r14, rbx
jmp 0x18006689c
movzx edx, byte [r14 + 1]
mov ecx, r9d
call fcn.180066300
xor r11d, r11d
mov ecx, eax
movzx eax, byte [rbx]
test ecx, ecx
jne 0x180066824
cmp al, 0x3f
ja 0x180066aab
bt rbp, rax
jae 0x180066aab
lea r14, [rbx + 1]
jmp 0x18006689c
lea r14, [rbx + 1]
mov rcx, r15
mov r8, r14
lea rdx, [rdi + 1]
call fcn.180066520
test rax, rax
jne 0x180066979
mov rdx, qword [r15 + 0x18]
cmp r14, rdx
je 0x180066aae
jmp 0x180066579
movsxd rcx, r8d
mov rax, rdi
mov rbx, rcx
lea r8, [r14 + 1]
add rcx, 3
add rbx, rbx
add rcx, rcx
mov rdx, rdi
sub rax, qword [r15 + rcx*8]
mov rcx, r15
mov qword [r15 + rbx*8 + 0x38], rax
call fcn.180066520
mov rdi, rax
test rax, rax
jne 0x180066aae
mov qword [r15 + rbx*8 + 0x38], 0xffffffffffffffff
jmp 0x180066aae
cmp byte [r14 + 1], 0x29
lea r8, [r14 + 1]
movsxd rdx, dword [r15 + 0x28]
jne 0x180066927
cmp edx, 0x20
jge 0x180066af9
lea rax, [rdx + 3]
mov rcx, rdx
add rax, rax
lea r8, [r14 + 2]
add rcx, rcx
mov qword [r15 + rcx*8 + 0x38], 0xfffffffffffffffe
jmp 0x180066946
cmp edx, 0x20
jge 0x180066b0a
lea rax, [rdx + 3]
mov rcx, rdx
add rax, rax
add rcx, rcx
mov qword [r15 + rcx*8 + 0x38], 0xffffffffffffffff
mov qword [r15 + rax*8], rdi
mov rcx, r15
lea eax, [rdx + 1]
mov rdx, rdi
mov dword [r15 + 0x28], eax
call fcn.180066520
mov rdi, rax
test rax, rax
jne 0x180066aae
dec dword [r15 + 0x28]
jmp 0x180066aae
xor r11d, r11d
jmp 0x180066aab
mov rdi, rax
jmp 0x180066aae
lea r8, [rbx + 1]
mov rdx, rdi
mov rcx, r15
mov rsi, rdi
call fcn.180066520
mov rdi, rax
test rax, rax
jne 0x180066aae
nop
cmp rsi, qword [r12]
jae 0x180066a9f
movzx ecx, byte [r14]
movzx r9d, byte [rsi]
movzx eax, cl
cmp cl, 0x25
je 0x1800669df
cmp al, 0x2e
je 0x1800669f6
cmp al, 0x5b
je 0x1800669ce
mov eax, ecx
xor ecx, ecx
cmp eax, r9d
sete cl
jmp 0x1800669ee
lea r8, [rbx - 1]
mov rdx, r14
mov ecx, r9d
call fcn.180066470
jmp 0x1800669ec
movzx edx, byte [r14 + 1]
mov ecx, r9d
call fcn.180066300
mov ecx, eax
test ecx, ecx
je 0x180066a9f
inc rsi
lea r8, [rbx + 1]
mov rdx, rsi
mov rcx, r15
call fcn.180066520
mov rdi, rax
test rax, rax
je 0x1800669a0
jmp 0x180066aae
inc rdi
mov rsi, r11
mov rbp, rdi
nop
cmp rbp, qword [r12]
jae 0x180066a79
movzx ecx, byte [r14]
movzx r9d, byte [rbp]
movzx eax, cl
cmp cl, 0x25
je 0x180066a5b
cmp al, 0x2e
je 0x180066a71
cmp al, 0x5b
je 0x180066a4a
cmp ecx, r9d
mov ecx, r11d
sete cl
jmp 0x180066a6d
lea r8, [rbx - 1]
mov rdx, r14
mov ecx, r9d
call fcn.180066470
jmp 0x180066a68
movzx edx, byte [r14 + 1]
mov ecx, r9d
call fcn.180066300
xor r11d, r11d
mov ecx, eax
test ecx, ecx
je 0x180066a79
inc rsi
inc rbp
jmp 0x180066a20
test rsi, rsi
js 0x180066a9f
nop
lea rdx, [rsi + rdi]
mov rcx, r15
lea r8, [rbx + 1]
call fcn.180066520
test rax, rax
jne 0x180066979
sub rsi, 1
jns 0x180066a80
xor edi, edi
jmp 0x180066aae
cmp rdi, qword [r12]
cmove r11, rdi
mov rdi, r11
inc dword [r15]
mov rax, rdi
mov r12, qword [rsp + 0x28]
mov rsi, qword [rsp + 0x60]
mov rbp, qword [rsp + 0x58]
mov rbx, qword [rsp + 0x50]
mov r13, qword [rsp + 0x20]
add rsp, 0x30
pop r15
pop r14
pop rdi
ret
mov rcx, qword [rcx + 0x20]
lea rdx, str.pattern_too_complex
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.invalid_pattern_capture
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.too_many_captures
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.too_many_captures
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.malformed_pattern__missing___
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.missing___after___f_in_pattern
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.malformed_pattern__missing_arguments_to___b_
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.invalid_capture_index____d
inc r8d
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.malformed_pattern__missing___
call fcn.18004fa40
int3
mov rcx, qword [r15 + 0x20]
lea rdx, str.malformed_pattern__ends_with____
call fcn.18004fa40
int3