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

Disassembly:
push rbx
push rbp
push rsi
push r12
push r13
push r15
sub rsp, 0x28
mov r9, qword [rdx]
mov r13, rcx
mov r15, r8
mov r10, rdx
xorps xmm2, xmm2
xorps xmm1, xmm1
mov rax, qword [r9]
mov rcx, rax
sub rcx, qword [r9 + 8]
mov qword [rsp + 0x78], rcx
cmp rax, qword [r9 + 0x10]
je 0x14001586b
cmp byte [rax], 0x2d
jne 0x14001586b
inc rax
mov r12b, 1
mov qword [r9], rax
mov r9, qword [rdx]
mov rax, qword [r9]
jmp 0x14001586e
xor r12b, r12b
xor ebp, ebp
mov qword [rsp + 0x60], rdi
xor sil, sil
mov qword [rsp + 0x20], r14
mov ebx, ebp
mov byte [rsp + 0x68], sil
mov r11d, ebp
cmp rax, qword [r9 + 0x10]
je 0x14001606e
movsx ecx, byte [rax]
movsd xmm3, qword [0x140150768]
cmp cl, 0x30
jne 0x140015971
inc rax
mov edi, ebp
mov qword [r9], rax
mov rdx, qword [rdx]
xor r14b, r14b
mov rax, qword [rdx]
mov esi, ebp
cmp rax, qword [rdx + 0x10]
je 0x140015c67
cmp byte [rax], 0x2e
jne 0x140015c67
inc rax
mov qword [rdx], rax
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015c56
movzx edx, byte [rax]
cmp dl, 0x30
jl 0x140015c56
cmp dl, 0x39
jg 0x140015c56
movzx r9d, byte [rsp + 0x68]
test r14b, r14b
jne 0x140015c00
test r9b, r9b
mov eax, edi
movabs r8, 0x1fffffffffffff
cmovne rax, rbx
mov rbx, rax
nop dword [rax + rax]
mov rdx, qword [r10]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140015bd1
movsx ecx, byte [rax]
cmp cl, 0x30
jl 0x140015bd1
cmp cl, 0x39
jg 0x140015bd1
cmp rbx, r8
ja 0x140015bd1
inc rax
sub ecx, 0x30
mov qword [rdx], rax
dec esi
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
lea eax, [r11 + 1]
test rbx, rbx
cmove eax, r11d
mov r11d, eax
jmp 0x140015920
cmp cl, 0x31
jl 0x14001606e
cmp cl, 0x39
jg 0x14001606e
inc rax
lea edi, [rcx - 0x30]
mov qword [r9], rax
mov rdx, qword [rdx]
test r12b, r12b
je 0x1400159ed
nop dword [rax]
nop dword [rax + rax]
mov rdx, qword [r10]
mov rcx, qword [rdx]
cmp rcx, qword [rdx + 0x10]
je 0x1400158b0
movsx r8d, byte [rcx]
mov rax, rdx
cmp r8b, 0x30
jl 0x140015a43
cmp r8b, 0x39
jg 0x140015a43
cmp edi, 0xccccccc
jb 0x1400159d7
jne 0x140015a39
cmp r8b, 0x38
jg 0x140015a39
lea edi, [rdi + rdi*4]
inc r11d
lea edi, [rdi - 0x18]
lea rax, [rcx + 1]
lea edi, [r8 + rdi*2]
mov qword [rdx], rax
jmp 0x1400159a0
mov rcx, qword [rdx]
mov r9, rdx
cmp rcx, qword [rdx + 0x10]
je 0x1400158b0
movsx r8d, byte [rcx]
mov rax, rdx
cmp r8b, 0x30
jl 0x140015a43
cmp r8b, 0x39
jg 0x140015a43
cmp edi, 0x19999999
jb 0x140015a20
jne 0x140015a39
cmp r8b, 0x35
jg 0x140015a39
lea edi, [rdi + rdi*4]
inc r11d
lea rax, [rcx + 1]
lea edi, [rdi - 0x18]
mov qword [r9], rax
mov rdx, qword [r10]
lea edi, [r8 + rdi*2]
jmp 0x1400159ed
mov sil, 1
mov ebx, edi
mov byte [rsp + 0x68], sil
xor r14b, r14b
test sil, sil
je 0x140015adc
test r12b, r12b
je 0x140015b37
movabs r8, 0xccccccccccccccc
nop dword [rax]
nop word [rax + rax]
mov rdx, qword [r10]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x1400158b3
movsx ecx, byte [rax]
cmp cl, 0x30
jl 0x140015ad9
cmp cl, 0x39
jg 0x140015ad9
cmp rbx, r8
jb 0x140015a99
jne 0x140015aaf
cmp cl, 0x38
jg 0x140015aaf
inc rax
sub ecx, 0x30
mov qword [rdx], rax
inc r11d
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
jmp 0x140015a70
xorps xmm1, xmm1
test rbx, rbx
js 0x140015abe
cvtsi2sd xmm1, rbx
jmp 0x140015ad6
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r14b, 1
mov rax, rdx
mov rdx, rax
test r14b, r14b
je 0x1400158b3
nop dword [rax + rax]
mov rcx, qword [r10]
mov rdx, rcx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400158b3
movsx r8d, byte [rax]
cmp r8b, 0x30
jl 0x1400158b3
cmp r8b, 0x39
jg 0x1400158b3
inc rax
mulsd xmm1, xmm3
mov qword [rcx], rax
lea eax, [r8 - 0x30]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
jmp 0x140015af0
movabs r9, 0x1999999999999999
nop dword [rax]
nop word [rax + rax]
mov rdx, qword [r10]
mov r8, qword [rdx]
cmp r8, qword [rdx + 0x10]
je 0x1400158b3
movsx ecx, byte [r8]
mov rax, rdx
cmp cl, 0x30
jl 0x140015adc
cmp cl, 0x39
jg 0x140015adc
cmp rbx, r9
jb 0x140015b85
jne 0x140015b9c
cmp cl, 0x35
jg 0x140015b9c
lea rax, [r8 + 1]
sub ecx, 0x30
mov qword [rdx], rax
inc r11d
lea rax, [rbx + rbx*4]
lea rbx, [rcx + rax*2]
jmp 0x140015b50
xorps xmm1, xmm1
test rbx, rbx
js 0x140015bb1
cvtsi2sd xmm1, rbx
mov r14b, 1
jmp 0x140015af0
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
mov r14b, 1
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
jmp 0x140015af0
xorps xmm1, xmm1
test rbx, rbx
js 0x140015be0
cvtsi2sd xmm1, rbx
jmp 0x140015bf8
mov rax, rbx
mov rcx, rbx
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r14b, 1
nop dword [rax + rax]
mov rcx, qword [r10]
mov rdx, rcx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015c6d
movsx r8d, byte [rax]
cmp r8b, 0x30
jl 0x140015c6d
cmp r8b, 0x39
jg 0x140015c6d
lea rdx, [rax + 1]
cmp r11d, 0x11
jge 0x140015c51
lea eax, [r8 - 0x30]
mulsd xmm1, xmm3
dec esi
movd xmm0, eax
lea eax, [r11 + 1]
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm1
comisd xmm0, xmm2
movaps xmm1, xmm0
cmovbe eax, r11d
mov r11d, eax
mov qword [rcx], rdx
jmp 0x140015c00
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 0xe
jmp 0x14001607a
movzx r9d, byte [rsp + 0x68]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140015d97
cmp byte [rax], 0x65
je 0x140015c88
cmp byte [rax], 0x45
jne 0x140015d97
inc rax
mov qword [rdx], rax
test r14b, r14b
jne 0x140015cc6
test r9b, r9b
mov eax, edi
mov rcx, rbx
xorps xmm1, xmm1
cmove rcx, rax
test rcx, rcx
js 0x140015cae
cvtsi2sd xmm1, rcx
jmp 0x140015cc3
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r14b, 1
mov rcx, qword [r10]
xor r8b, r8b
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015e7c
cmp byte [rax], 0x2b
je 0x140015ce6
cmp byte [rax], 0x2d
jne 0x140015cf2
mov r8b, 1
inc rax
mov qword [rcx], rax
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015e7c
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x140015e7c
cmp dl, 0x39
jg 0x140015e7c
inc rax
lea ebp, [rdx - 0x30]
mov qword [rcx], rax
test r8b, r8b
je 0x140015e1f
mov r8, qword [r10]
lea ecx, [rsi + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
mov r9d, edx
sar r9d, 2
mov eax, r9d
shr eax, 0x1f
add r9d, eax
mov rax, qword [r8]
cmp rax, qword [r8 + 0x10]
je 0x140015d95
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x140015d95
cmp dl, 0x39
jg 0x140015d95
lea ebp, [rbp + rbp*4]
inc rax
lea ebp, [rbp - 0x18]
mov qword [r8], rax
mov r8, qword [r10]
lea ebp, [rdx + rbp*2]
cmp ebp, r9d
jle 0x140015d43
mov rcx, r8
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015d43
movzx edx, byte [rax]
cmp dl, 0x30
jl 0x140015d43
cmp dl, 0x39
jg 0x140015d43
inc rax
mov qword [rcx], rax
mov r8, qword [r10]
jmp 0x140015d71
neg ebp
test r14b, r14b
je 0x140015eb4
lea ecx, [rsi + rbp]
cmp ecx, 0xfffffecc
jge 0x140015e8d
divsd xmm1, qword [0x140150780]
lea eax, [rcx + 0x134]
cmp eax, 0xfffffecc
jl 0x140015dee
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x14014e5a0]
movaps xmm2, xmm1
sub rcx, rax
divsd xmm2, qword [rcx]
comisd xmm2, xmmword [0x140150788]
ja 0x140015e6a
test r12b, r12b
je 0x140015dfa
xorps xmm2, xmmword [0x1401507b0]
movaps xmm1, xmm2
mov rcx, r15
call fcn.140019ef0
test al, al
jne 0x14001607e
mov rax, qword [rsp + 0x78]
mov dword [r13 + 0x30], 0x10
jmp 0x14001607a
mov r8d, 0x134
sub r8d, esi
nop dword [rax + rax]
mov rcx, qword [r10]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140015d97
movsx edx, byte [rax]
cmp dl, 0x30
jl 0x140015d97
cmp dl, 0x39
jg 0x140015d97
lea ebp, [rbp + rbp*4]
inc rax
lea ebp, [rbp - 0x18]
mov qword [rcx], rax
lea ebp, [rdx + rbp*2]
cmp ebp, r8d
jle 0x140015e30
mov rax, qword [rsp + 0x78]
mov dword [r13 + 0x30], 0xd
jmp 0x14001607a
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 0xf
jmp 0x14001607a
movsxd rax, ecx
lea rax, [rax*8]
test ecx, ecx
js 0x140015dcf
lea rcx, [0x14014e5a0]
movaps xmm2, xmm1
mulsd xmm2, qword [rax + rcx]
jmp 0x140015de0
cmp byte [rsp + 0x68], 0
mov rax, qword [r15 + 0x40]
je 0x140015fdb
test r12b, r12b
je 0x140015f63
mov rdx, qword [r15 + 0x38]
neg rbx
sub rax, rdx
cmp rax, 0x10
jge 0x140015eee
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.1400155c0
mov rdx, qword [r15 + 0x38]
lea rax, [rdx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, 0x96
movups xmmword [rdx], xmm0
mov word [rdx + 0xe], ax
mov qword [rdx], rbx
test rbx, rbx
js 0x140015f48
movabs r8, 0xffffffff00000000
mov eax, 0x196
mov word [rdx + 0xe], ax
test r8, rbx
jne 0x140015f2e
mov eax, 0x1d6
mov word [rdx + 0xe], ax
test rbx, 0xffffffff80000000
jne 0x14001607e
or ax, 0x20
mov word [rdx + 0xe], ax
jmp 0x14001607e
cmp rbx, 0xffffffff80000000
jl 0x14001607e
mov eax, 0xb6
mov word [rdx + 0xe], ax
jmp 0x14001607e
mov rcx, qword [r15 + 0x38]
sub rax, rcx
cmp rax, 0x10
jge 0x140015f82
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.1400155c0
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, 0x116
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], ax
mov qword [rcx], rbx
test rbx, rbx
js 0x140015faa
mov eax, 0x196
mov word [rcx + 0xe], ax
movabs r8, 0xffffffff00000000
test r8, rbx
jne 0x140015fc1
or ax, 0x40
mov word [rcx + 0xe], ax
test rbx, 0xffffffff80000000
jne 0x14001607e
or ax, 0x20
mov word [rcx + 0xe], ax
jmp 0x14001607e
mov rcx, qword [r15 + 0x38]
sub rax, rcx
test r12b, r12b
je 0x14001602b
neg edi
cmp rax, 0x10
jge 0x140016001
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.1400155c0
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
test edi, edi
movsxd rax, edi
mov edx, 0x1f6
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x14001607e
cmp rax, 0x10
jge 0x140016043
mov edx, 1
lea rcx, [r15 + 0x20]
call fcn.1400155c0
mov rcx, qword [r15 + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [r15 + 0x38], rax
mov eax, edi
shr edi, 0x1a
not di
movups xmmword [rcx], xmm0
mov qword [rcx], rax
and di, 0x20
mov eax, 0x1d6
or di, ax
mov word [rcx + 0xe], di
jmp 0x14001607e
sub rax, qword [r9 + 8]
mov dword [r13 + 0x30], 3
mov qword [r13 + 0x38], rax
mov r14, qword [rsp + 0x20]
mov rdi, qword [rsp + 0x60]
add rsp, 0x28
pop r15
pop r13
pop r12
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x18], r8
push rbx
push rbp
push rsi
push rdi
push r12
push r13
sub rsp, 0x48
mov rsi, rdx
mov rbp, r8
mov rdx, qword [rdx]
mov r13, rcx
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x1400160cc
inc rax
mov qword [rdx], rax
mov rdx, qword [r8 + 0x38]
lea r12, [r8 + 0x20]
mov rax, qword [r12 + 0x20]
sub rax, rdx
cmp rax, 0x10
jge 0x1400160f4
mov edx, 1
mov rcx, r12
call fcn.1400155c0
mov rdx, qword [r12 + 0x18]
lea rax, [rdx + 0x10]
xorps xmm0, xmm0
mov qword [r12 + 0x18], rax
mov ebx, 3
movups xmmword [rdx], xmm0
mov word [rdx + 0xe], bx
movabs rdi, 0x100002600
mov rcx, rsi
call fcn.14001a450
cmp al, 0x20
ja 0x14001613c
bt rdi, rax
jae 0x14001613c
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016116
inc rax
mov qword [rcx], rax
jmp 0x140016116
cmp dword [r13 + 0x30], 0
jne 0x140016666
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016189
cmp byte [rax], 0x7d
jne 0x140016189
inc rax
mov qword [rcx], rax
movabs rcx, 0xffff000000000000
mov rax, qword [rbp + 0x38]
mov word [rax - 2], bx
and qword [rax - 8], rcx
mov qword [rax - 0x10], 0
add rsp, 0x48
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x80], r14
mov qword [rsp + 0x40], r15
mov dword [rsp + 0x88], 0
mov rcx, qword [rsi]
lea rbx, [0x140150660]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016649
cmp byte [rax], 0x22
jne 0x140016649
inc rax
mov qword [rsp + 0x20], r13
mov qword [rcx], rax
xor r15d, r15d
mov rbp, r13
mov dword [rsp + 0x28], r15d
mov rcx, rsi
call fcn.14001a450
mov rcx, qword [rsi]
cmp al, 0x5c
jne 0x140016350
mov rax, qword [rcx]
mov r14, rax
sub r14, qword [rcx + 8]
cmp rax, qword [rcx + 0x10]
je 0x140016200
inc rax
mov qword [rcx], rax
mov rcx, rsi
call fcn.14001a450
movzx edx, al
cmp byte [rdx + rbx], 0
je 0x14001622c
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016223
inc rax
mov qword [rcx], rax
movzx ebx, byte [rdx + rbx]
jmp 0x140016376
cmp al, 0x75
jne 0x14001642c
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016246
inc rax
mov qword [rcx], rax
xor ebx, ebx
xor edi, edi
nop word [rax + rax]
mov rcx, rsi
call fcn.14001a450
movsx edx, al
shl ebx, 4
add ebx, edx
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x14001626d
add ebx, 0xffffffd0
jmp 0x140016288
lea eax, [rdx - 0x41]
cmp al, 5
ja 0x140016279
add ebx, 0xffffffc9
jmp 0x140016288
sub dl, 0x61
cmp dl, 5
ja 0x140016422
add ebx, 0xffffffa9
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001629a
inc rax
mov qword [rcx], rax
inc edi
cmp edi, 4
jl 0x140016250
cmp dword [r13 + 0x30], 0
jne 0x1400163ce
lea edi, [rbx - 0xd800]
cmp edi, 0x3ff
ja 0x14001632e
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400163c2
cmp byte [rax], 0x5c
jne 0x1400163c2
inc rax
mov qword [rcx], rax
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400163c2
cmp byte [rax], 0x75
jne 0x1400163c2
inc rax
mov r8, r14
mov qword [rcx], rax
mov rdx, rsi
mov rcx, r13
call fcn.140015770
cmp dword [r13 + 0x30], 0
jne 0x1400163ce
add eax, 0xffff2400
cmp eax, 0x3ff
ja 0x1400163b1
mov ebx, edi
shl ebx, 0xa
or ebx, eax
add ebx, 0x10000
mov edx, ebx
lea rcx, [rsp + 0x20]
call fcn.140015370
mov r15d, dword [rsp + 0x28]
lea rbx, [0x140150660]
mov rbp, qword [rsp + 0x20]
jmp 0x1400161d7
cmp al, 0x22
je 0x14001646f
cmp al, 0x20
jb 0x140016436
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
jne 0x14001636d
xor bl, bl
jmp 0x140016376
movzx ebx, byte [rax]
inc rax
mov qword [rcx], rax
mov rcx, qword [rbp + 0x18]
mov rax, qword [rbp + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016398
mov edx, 1
mov rcx, rbp
call fcn.140015510
mov rcx, qword [rbp + 0x18]
lea rax, [rcx + 1]
inc r15d
mov qword [rbp + 0x18], rax
mov byte [rcx], bl
lea rbx, [0x140150660]
jmp 0x1400161d2
mov dword [r13 + 0x30], 9
mov qword [r13 + 0x38], r14
jmp 0x1400164ae
mov dword [r13 + 0x30], 9
mov qword [r13 + 0x38], r14
mov rbp, qword [rsp + 0x90]
cmp dword [r13 + 0x30], 0
jne 0x140016659
movabs rdi, 0x100002600
nop dword [rax + rax]
mov rcx, rsi
call fcn.14001a450
cmp al, 0x20
ja 0x14001652f
movsx rax, al
bt rdi, rax
jae 0x14001652f
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400163f0
inc rax
mov qword [rcx], rax
jmp 0x1400163f0
mov dword [r13 + 0x30], 8
jmp 0x1400163ca
mov dword [r13 + 0x30], 0xa
jmp 0x1400163ca
mov rbp, qword [rsp + 0x90]
test al, al
mov rax, qword [rcx]
jne 0x14001645a
sub rax, qword [rcx + 8]
mov qword [r13 + 0x38], rax
mov dword [r13 + 0x30], 0xb
jmp 0x1400163d6
sub rax, qword [rcx + 8]
mov qword [r13 + 0x38], rax
mov dword [r13 + 0x30], 0xc
jmp 0x1400163d6
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001647e
inc rax
mov qword [rcx], rax
mov rcx, qword [rbp + 0x18]
mov rax, qword [rbp + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x1400164a0
mov edx, 1
mov rcx, rbp
call fcn.140015510
mov rcx, qword [rbp + 0x18]
lea rax, [rcx + 1]
inc r15d
mov qword [rbp + 0x18], rax
mov byte [rcx], 0
mov eax, dword [r13 + 0x30]
test eax, eax
jne 0x1400163ce
mov eax, r15d
lea edi, [r15 - 1]
sub qword [rbp + 0x18], rax
mov rcx, qword [r12 + 0x18]
mov rax, qword [r12 + 0x20]
mov rbx, qword [rbp + 0x18]
sub rax, rcx
cmp rax, 0x10
jge 0x1400164ee
mov edx, 1
mov rcx, r12
call fcn.1400155c0
mov rcx, qword [r12 + 0x18]
mov rbp, qword [rsp + 0x90]
lea rax, [rcx + 0x10]
mov qword [r12 + 0x18], rax
lea rdx, [rsp + 0x30]
test rbx, rbx
mov dword [rsp + 0x38], edi
xorps xmm0, xmm0
lea rax, [0x140150490]
mov r8, qword [rbp + 0x10]
cmovne rax, rbx
mov qword [rsp + 0x30], rax
movups xmmword [rcx], xmm0
call fcn.14001a7f0
jmp 0x1400163d6
cmp dword [r13 + 0x30], 0
jne 0x140016659
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001663b
cmp byte [rax], 0x3a
jne 0x14001663b
inc rax
mov qword [rcx], rax
nop dword [rax]
mov rcx, rsi
call fcn.14001a450
cmp al, 0x20
ja 0x140016584
movsx rax, al
bt rdi, rax
jae 0x140016584
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016560
jmp 0x140016553
cmp dword [r13 + 0x30], 0
jne 0x140016659
mov r8, rbp
mov rdx, rsi
mov rcx, r13
call fcn.140016b40
cmp dword [r13 + 0x30], 0
jne 0x140016659
mov rcx, rsi
call fcn.140017030
cmp dword [r13 + 0x30], 0
jne 0x140016659
mov rcx, qword [rsi]
mov ebx, dword [rsp + 0x88]
inc ebx
mov dword [rsp + 0x88], ebx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x14001662d
movzx edx, byte [rax]
cmp dl, 0x2c
jne 0x1400165fc
inc rax
mov rdx, rsi
mov qword [rcx], rax
mov rcx, r13
call fcn.140017080
cmp dword [r13 + 0x30], 0
jne 0x140016659
jmp 0x1400161a1
cmp dl, 0x7d
jne 0x14001662d
inc rax
mov edx, ebx
mov qword [rcx], rax
mov rcx, rbp
call fcn.140019fe0
test al, al
jne 0x140016659
mov rax, qword [rsi]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov qword [r13 + 0x38], rcx
mov dword [r13 + 0x30], 0x10
jmp 0x140016659
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 6
jmp 0x140016655
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 5
jmp 0x140016655
sub rax, qword [rcx + 8]
mov dword [r13 + 0x30], 4
mov qword [r13 + 0x38], rax
mov r14, qword [rsp + 0x80]
mov r15, qword [rsp + 0x40]
add rsp, 0x48
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x30
mov r14, rcx
movzx r12d, r9b
mov rcx, qword [rdx]
mov r13, r8
mov rsi, rdx
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016866
inc rax
mov qword [rcx], rax
mov rbx, r14
mov qword [rsp + 0x60], rbp
xor edi, edi
mov qword [rsp + 0x20], rbx
mov dword [rsp + 0x28], edi
lea r15, [0x140150660]
mov rcx, rsi
call fcn.14001a450
mov rcx, qword [rsi]
cmp al, 0x5c
jne 0x1400169aa
mov rax, qword [rcx]
mov rbp, rax
sub rbp, qword [rcx + 8]
cmp rax, qword [rcx + 0x10]
je 0x1400168a9
inc rax
mov qword [rcx], rax
mov rcx, rsi
call fcn.14001a450
movzx edx, al
cmp byte [rdx + r15], 0
je 0x1400168d7
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400168cd
inc rax
mov qword [rcx], rax
movzx ebp, byte [rdx + r15]
jmp 0x1400169d1
cmp al, 0x75
jne 0x140016a2b
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x1400168f1
inc rax
mov qword [rcx], rax
mov r8, rbp
mov rdx, rsi
mov rcx, r14
call fcn.140015770
cmp dword [r14 + 0x30], 0
jne 0x140016b16
lea r15d, [rax - 0xd800]
cmp r15d, 0x3ff
ja 0x140016990
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a1a
cmp byte [rax], 0x5c
jne 0x140016a1a
inc rax
mov qword [rcx], rax
mov rcx, qword [rsi]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a1a
cmp byte [rax], 0x75
jne 0x140016a1a
inc rax
mov r8, rbp
mov qword [rcx], rax
mov rdx, rsi
mov rcx, r14
call fcn.140015770
cmp dword [r14 + 0x30], 0
jne 0x140016b16
lea ecx, [rax - 0xdc00]
cmp ecx, 0x3ff
ja 0x140016a09
mov eax, r15d
shl eax, 0xa
or eax, ecx
add eax, 0x10000
mov edx, eax
lea rcx, [rsp + 0x20]
call fcn.140015370
mov edi, dword [rsp + 0x28]
mov rbx, qword [rsp + 0x20]
jmp 0x140016879
cmp al, 0x22
je 0x140016a6d
cmp al, 0x20
jb 0x140016a3c
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
jne 0x1400169c8
xor bpl, bpl
jmp 0x1400169d1
movzx ebp, byte [rax]
inc rax
mov qword [rcx], rax
mov rcx, qword [rbx + 0x18]
mov rax, qword [rbx + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x1400169f3
mov edx, 1
mov rcx, rbx
call fcn.140015510
mov rcx, qword [rbx + 0x18]
lea rax, [rcx + 1]
inc edi
mov qword [rbx + 0x18], rax
mov byte [rcx], bpl
mov dword [rsp + 0x28], edi
jmp 0x140016880
mov dword [r14 + 0x30], 9
mov qword [r14 + 0x38], rbp
jmp 0x140016aab
mov dword [r14 + 0x30], 9
mov qword [r14 + 0x38], rbp
jmp 0x140016b16
mov dword [r14 + 0x30], 0xa
mov qword [r14 + 0x38], rbp
jmp 0x140016b16
test al, al
mov rax, qword [rcx]
jne 0x140016a58
sub rax, qword [rcx + 8]
mov qword [r14 + 0x38], rax
mov dword [r14 + 0x30], 0xb
jmp 0x140016b16
sub rax, qword [rcx + 8]
mov qword [r14 + 0x38], rax
mov dword [r14 + 0x30], 0xc
jmp 0x140016b16
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016a7c
inc rax
mov qword [rcx], rax
mov rcx, qword [rbx + 0x18]
mov rax, qword [rbx + 0x20]
sub rax, rcx
cmp rax, 1
jge 0x140016a9e
mov edx, 1
mov rcx, rbx
call fcn.140015510
mov rcx, qword [rbx + 0x18]
lea rax, [rcx + 1]
inc edi
mov qword [rbx + 0x18], rax
mov byte [rcx], 0
mov eax, dword [r14 + 0x30]
test eax, eax
jne 0x140016b16
mov eax, edi
lea esi, [rdi - 1]
sub qword [rbx + 0x18], rax
mov rcx, qword [r13 + 0x38]
mov rax, qword [r13 + 0x40]
mov rbx, qword [rbx + 0x18]
sub rax, rcx
cmp rax, 0x10
jge 0x140016ae3
mov edx, 1
lea rcx, [r13 + 0x20]
call fcn.1400155c0
mov rcx, qword [r13 + 0x38]
lea rax, [rcx + 0x10]
mov dword [rsp + 0x28], esi
mov qword [r13 + 0x38], rax
lea rdx, [rsp + 0x20]
mov r8, qword [r13 + 0x10]
lea rax, [0x140150490]
test rbx, rbx
xorps xmm0, xmm0
movups xmmword [rcx], xmm0
cmovne rax, rbx
mov qword [rsp + 0x20], rax
call fcn.14001a7f0
mov rbp, qword [rsp + 0x60]
mov rbx, qword [rsp + 0x68]
mov rsi, qword [rsp + 0x70]
add rsp, 0x30
pop r15
pop r14
pop r13
pop r12
pop rdi
ret
mov qword [rsp + 0x18], rbx
mov qword [rsp + 0x20], rbp
push rdi
sub rsp, 0x20
mov rbx, rdx
mov rbp, r8
mov rdx, qword [rdx]
mov rdi, rcx
mov r9, qword [rdx]
mov r10, qword [rdx + 0x10]
cmp r9, r10
jne 0x140016b6b
xor eax, eax
jmp 0x140016b6f
movzx eax, byte [r9]
movsx eax, al
add eax, 0xffffffde
cmp eax, 0x59
ja case.0x140016b9b.35
lea r8, [0x140000000]
cdqe
movzx eax, byte [r8 + rax + 0x16fd0]
mov ecx, dword [r8 + rax*4 + 0x16fb4]
add rcx, r8
jmp rcx
mov rcx, rdx
cmp r9, r10
je 0x140016bb5
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016c37
cmp byte [r9], 0x75
jne 0x140016c37
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x6c
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x6c
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov rcx, qword [rbp + 0x38]
mov rax, qword [rbp + 0x40]
sub rax, rcx
cmp rax, 0x10
jge 0x140016c19
mov edx, 1
lea rcx, [rbp + 0x20]
call fcn.1400155c0
mov rcx, qword [rbp + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbp + 0x38], rax
movups xmmword [rcx], xmm0
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rax, qword [rdx]
sub rax, qword [rdx + 8]
mov dword [rdi + 0x30], 3
mov qword [rdi + 0x38], rax
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rcx, rdx
cmp r9, r10
je 0x140016c71
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016c37
cmp byte [r9], 0x72
jne 0x140016c37
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x75
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x65
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov dl, 1
mov rcx, rbp
call fcn.140019b20
test al, al
jne 0x140016e84
mov rax, qword [rbx]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov dword [rdi + 0x30], 0x10
mov qword [rdi + 0x38], rcx
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov rcx, rdx
cmp r9, r10
je 0x140016d01
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rcx, rdx
mov r9, qword [rdx]
cmp r9, qword [rcx + 0x10]
je 0x140016c37
cmp byte [r9], 0x61
jne 0x140016c37
lea rax, [r9 + 1]
mov qword [rcx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x6c
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x73
jne 0x140016c37
inc rax
mov qword [rdx], rax
mov rdx, qword [rbx]
mov rax, qword [rdx]
cmp rax, qword [rdx + 0x10]
je 0x140016c37
cmp byte [rax], 0x65
jne 0x140016c37
inc rax
mov qword [rdx], rax
xor edx, edx
jmp 0x140016cb4
xor r9d, r9d
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x140016830
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x1400160a0
mov qword [rsp + 0x30], rsi
mov qword [rsp + 0x38], r14
cmp r9, r10
je 0x140016dd3
lea rax, [r9 + 1]
mov qword [rdx], rax
mov rcx, qword [rbp + 0x38]
mov rax, qword [rbp + 0x40]
sub rax, rcx
cmp rax, 0x10
jge 0x140016df6
mov edx, 1
lea rcx, [rbp + 0x20]
call fcn.1400155c0
mov rcx, qword [rbp + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbp + 0x38], rax
mov esi, 4
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], si
movabs r14, 0x100002600
mov rcx, rbx
call fcn.14001a450
cmp al, 0x20
ja 0x140016e41
movsx rax, al
bt r14, rax
jae 0x140016e41
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016e17
inc rax
mov qword [rcx], rax
jmp 0x140016e17
cmp dword [rdi + 0x30], 0
jne 0x140016e7a
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016e94
cmp byte [rax], 0x5d
jne 0x140016e94
inc rax
mov qword [rcx], rax
movabs rcx, 0xffff000000000000
mov rax, qword [rbp + 0x38]
mov word [rax - 2], si
and qword [rax - 8], rcx
xor esi, esi
mov qword [rax - 0x10], rsi
mov rsi, qword [rsp + 0x30]
mov r14, qword [rsp + 0x38]
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
ret
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
xor esi, esi
call fcn.140016b40
cmp dword [rdi + 0x30], esi
jne 0x140016e7a
nop dword [rax]
inc esi
mov rcx, rbx
call fcn.14001a450
cmp al, 0x20
ja 0x140016edc
movsx rax, al
bt r14, rax
jae 0x140016edc
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016eb2
inc rax
mov qword [rcx], rax
jmp 0x140016eb2
cmp dword [rdi + 0x30], 0
jne 0x140016e7a
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016f82
cmp byte [rax], 0x2c
jne 0x140016f4b
inc rax
mov qword [rcx], rax
nop dword [rax]
mov rcx, rbx
call fcn.14001a450
cmp al, 0x20
ja 0x140016f24
movsx rax, al
bt r14, rax
jae 0x140016f24
mov rcx, qword [rbx]
mov rax, qword [rcx]
cmp rax, qword [rcx + 0x10]
je 0x140016f00
jmp 0x140016ef7
cmp dword [rdi + 0x30], 0
jne 0x140016e7a
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
call fcn.140016b40
cmp dword [rdi + 0x30], 0
je 0x140016eb0
jmp 0x140016e7a
cmp byte [rax], 0x5d
jne 0x140016f82
inc rax
mov edx, esi
mov qword [rcx], rax
mov rcx, rbp
call fcn.140019f50
test al, al
jne 0x140016e7a
mov rax, qword [rbx]
mov rcx, qword [rax]
sub rcx, qword [rax + 8]
mov qword [rdi + 0x38], rcx
mov dword [rdi + 0x30], 0x10
jmp 0x140016e7a
sub rax, qword [rcx + 8]
mov dword [rdi + 0x30], 7
mov qword [rdi + 0x38], rax
jmp 0x140016e7a
mov r8, rbp
mov rdx, rbx
mov rcx, rdi
mov rbx, qword [rsp + 0x40]
mov rbp, qword [rsp + 0x48]
add rsp, 0x20
pop rdi
jmp 0x140015820