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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x47afad
mov eax, dword fs:[0]
push eax
sub esp, 0x4c
push esi
push edi
mov eax, dword [0x49c100]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edx, ecx
mov dword [ebp - 0x4c], edx
mov ecx, dword [ebp + 8]
mov eax, dword [ebp + 0xc]
mov dword [ebp - 0x3c], eax
mov dword [ebp - 0x40], ecx
mov eax, dword [ecx + 4]
mov edi, dword [ecx]
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x44], eax
mov ecx, edi
mov dword [ebp - 4], 0
sub ecx, eax
xorps xmm0, xmm0
mov dword [ebp - 0x58], ecx
xorps xmm2, xmm2
mov cl, byte [edi]
movsd qword [ebp - 0x54], xmm0
cmp cl, 0x2d
jne 0x43670b
mov cl, byte [edi + 1]
inc edi
mov ch, 1
jmp 0x43670d
xor ch, ch
mov byte [ebp - 0xf], ch
mov eax, edi
movlpd qword [ebp - 0x38], xmm0
mov byte [ebp - 0xd], 0
mov dword [ebp - 0x28], 0
cmp cl, 0x30
jne 0x436739
lea edi, [eax + 1]
mov dword [ebp - 0x1c], 0
mov dword [ebp - 0x48], edi
jmp 0x436808
cmp cl, 0x31
jl 0x436e26
cmp cl, 0x39
jg 0x436e26
lea edi, [eax + 1]
movsx eax, cl
mov cl, byte [edi]
sub eax, 0x30
mov dword [ebp - 0x48], edi
mov dword [ebp - 0x1c], eax
test ch, ch
je 0x4367b9
cmp cl, 0x30
jl 0x436808
mov esi, edi
mov edx, edi
cmp cl, 0x39
ja 0x436808
cmp eax, 0xccccccc
jb 0x436786
jne 0x4367b0
mov edx, esi
cmp cl, 0x38
ja 0x4367b0
inc dword [ebp - 0x28]
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
lea edi, [edx + 1]
mov dword [ebp - 0x48], edi
lea eax, [eax + ecx*2]
mov cl, byte [edi]
add eax, 0xffffffd0
mov dword [ebp - 0x1c], eax
cmp cl, 0x30
jl 0x436808
mov esi, edi
mov edx, edi
cmp cl, 0x39
jle 0x436776
jmp 0x436808
mov dl, 1
xor ecx, ecx
mov byte [ebp - 0xd], dl
jmp 0x436811
cmp cl, 0x30
jl 0x436808
mov cl, byte [edi]
mov esi, edi
mov edx, edi
cmp cl, 0x39
jg 0x436808
nop dword [eax]
cmp eax, 0x19999999
jb 0x4367e0
jne 0x4367b0
mov edx, esi
cmp cl, 0x35
jg 0x4367b0
inc dword [ebp - 0x28]
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
lea edi, [edx + 1]
mov dword [ebp - 0x48], edi
lea eax, [eax + ecx*2]
mov cl, byte [edi]
add eax, 0xffffffd0
mov dword [ebp - 0x1c], eax
cmp cl, 0x30
jl 0x436808
mov esi, edi
mov edx, edi
cmp cl, 0x39
jle 0x4367d0
mov eax, dword [ebp - 0x38]
mov ecx, dword [ebp - 0x34]
mov dl, byte [ebp - 0xd]
xor dh, dh
mov dword [ebp - 0x14], eax
mov dword [ebp - 0x18], ecx
mov byte [ebp - 0xe], dh
test dl, dl
je 0x436947
mov dl, byte [edi]
cmp byte [ebp - 0xf], dh
je 0x4368ca
cmp dl, 0x30
jl 0x436944
mov esi, edi
cmp dl, 0x39
jg 0x436944
cmp ecx, 0xccccccc
jb 0x43686a
ja 0x436854
cmp eax, 0xcccccccc
jb 0x43686a
cmp eax, 0xcccccccc
jne 0x4368b7
cmp ecx, 0xccccccc
jne 0x4368b7
mov esi, edi
cmp dl, 0x38
ja 0x4368b7
shld ecx, eax, 2
lea edi, [esi + 1]
xor edx, edx
movsx esi, byte [esi]
shl eax, 2
sub esi, 0x30
add dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x14]
adc dword [ebp - 0x18], ecx
mov ecx, dword [ebp - 0x18]
shld ecx, eax, 1
mov dword [ebp - 0x48], edi
add eax, eax
add eax, esi
mov dword [ebp - 0x14], eax
adc edx, ecx
inc dword [ebp - 0x28]
mov ecx, edx
mov dl, byte [edi]
mov dword [ebp - 0x18], ecx
cmp dl, 0x30
jl 0x436941
mov esi, edi
cmp dl, 0x39
jle 0x436843
jmp 0x436941
mov edx, ecx
mov ecx, eax
call fcn.004768f0
mov dh, 1
movaps xmm2, xmm0
mov byte [ebp - 0xe], dh
jmp 0x436944
cmp dl, 0x30
jl 0x436944
mov esi, edi
cmp dl, 0x39
jg 0x436944
cmp ecx, 0x19999999
jb 0x4368fd
ja 0x4368e7
cmp eax, 0x99999999
jb 0x4368fd
cmp eax, 0x99999999
jne 0x4368b7
cmp ecx, 0x19999999
jne 0x4368b7
mov esi, edi
cmp dl, 0x35
ja 0x4368b7
shld ecx, eax, 2
lea edi, [esi + 1]
xor edx, edx
movsx esi, byte [esi]
shl eax, 2
sub esi, 0x30
add dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x14]
adc dword [ebp - 0x18], ecx
mov ecx, dword [ebp - 0x18]
shld ecx, eax, 1
mov dword [ebp - 0x48], edi
add eax, eax
add eax, esi
mov dword [ebp - 0x14], eax
adc edx, ecx
inc dword [ebp - 0x28]
mov ecx, edx
mov dl, byte [edi]
mov dword [ebp - 0x18], ecx
cmp dl, 0x30
jl 0x436941
mov esi, edi
cmp dl, 0x39
jle 0x4368d6
mov dh, byte [ebp - 0xe]
mov dl, byte [ebp - 0xd]
movsd xmm1, qword [0x485110]
test dh, dh
je 0x436988
mov al, byte [edi]
cmp al, 0x30
jl 0x436988
mov ecx, edi
nop dword [eax + eax]
cmp al, 0x39
ja 0x436988
movsx eax, byte [ecx]
lea edi, [ecx + 1]
sub eax, 0x30
mulsd xmm2, xmm1
mov dword [ebp - 0x48], edi
mov ecx, edi
movd xmm0, eax
mov al, byte [edi]
cvtdq2pd xmm0, xmm0
addsd xmm2, xmm0
cmp al, 0x30
jge 0x436960
mov cl, byte [edi]
mov dword [ebp - 0x2c], 0
cmp cl, 0x2e
jne 0x4369a1
inc edi
mov eax, edi
mov dword [ebp - 0x48], edi
mov dword [ebp - 0x24], eax
jmp 0x4369a6
mov eax, edi
mov dword [ebp - 0x24], edi
cmp cl, 0x2e
jne 0x436a7c
mov cl, byte [eax]
cmp cl, 0x30
jl 0x436a65
cmp cl, 0x39
jg 0x436a65
mov cl, byte [ebp - 0xe]
mov esi, dword [ebp - 0x1c]
test cl, cl
jne 0x436a00
test dl, dl
je 0x4369d9
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 0x18]
jmp 0x4369dd
mov ecx, esi
xor edx, edx
call fcn.004768f0
mov eax, dword [ebp - 0x24]
movaps xmm2, xmm0
movsd xmm1, qword [0x485110]
mov ecx, eax
mov dl, byte [edi]
xorps xmm3, xmm3
mov byte [ebp - 0xe], 1
mov dword [ebp - 0x24], eax
jmp 0x436a13
mov dl, byte [edi]
xorps xmm3, xmm3
mov byte [ebp - 0xe], cl
mov ecx, eax
mov dword [ebp - 0x24], eax
jmp 0x436a13
mov eax, dword [ebp - 0x34]
cmp dl, 0x39
jg 0x436a82
mov edx, dword [ebp - 0x28]
cmp edx, 0x11
jge 0x436a4b
movsx eax, byte [ecx]
lea edi, [ecx + 1]
dec dword [ebp - 0x2c]
sub eax, 0x30
mulsd xmm2, xmm1
mov dword [ebp - 0x48], edi
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm2, xmm0
comisd xmm2, xmm3
jbe 0x436a52
inc edx
mov dword [ebp - 0x28], edx
jmp 0x436a52
mov edi, dword [ebp - 0x24]
inc edi
mov dword [ebp - 0x48], edi
mov dl, byte [edi]
mov eax, edi
mov ecx, eax
mov dword [ebp - 0x24], ecx
mov dword [ebp - 0x34], ecx
cmp dl, 0x30
jge 0x436a10
jmp 0x436a82
mov edx, dword [ebp - 0x4c]
mov esi, dword [ebp - 0x20]
sub eax, esi
mov dword [edx + 0x18], 0xe
mov dword [edx + 0x1c], eax
jmp 0x436cba
mov esi, dword [ebp - 0x1c]
mov eax, dword [ebp - 0x24]
cmp byte [eax], 0x65
jne 0x436a91
lea edi, [eax + 1]
mov eax, edi
mov dword [ebp - 0x24], eax
jmp 0x436aa2
cmp byte [eax], 0x45
jne 0x436bf1
lea edi, [eax + 1]
mov eax, edi
mov dword [ebp - 0x24], edi
cmp byte [ebp - 0xe], 0
jne 0x436ac6
cmp byte [ebp - 0xd], 0
je 0x436ab6
mov esi, dword [ebp - 0x14]
mov edx, dword [ebp - 0x18]
jmp 0x436ab8
xor edx, edx
mov ecx, esi
call fcn.004768f0
movaps xmm2, xmm0
mov byte [ebp - 0xe], 1
mov ecx, dword [ebp - 0x24]
xor ah, ah
mov dl, byte [ecx]
cmp dl, 0x2b
je 0x436ad9
cmp dl, 0x2d
jne 0x436ae1
mov ah, 1
mov dl, byte [ecx + 1]
lea edi, [ecx + 1]
mov ecx, edi
mov al, dl
sub al, 0x30
cmp al, 9
ja 0x436bda
lea edi, [ecx + 1]
movsx esi, dl
mov cl, byte [edi]
sub esi, 0x30
mov dword [ebp - 0x48], edi
mov byte [ebp - 0x2d], cl
test ah, ah
je 0x436b86
mov ecx, dword [ebp - 0x2c]
mov eax, 0x66666667
add ecx, 0x7ffffff7
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp byte [ebp - 0x2d], 0x30
mov dword [ebp - 0x34], eax
jl 0x436b82
mov al, byte [edi]
mov edx, edi
nop dword [eax]
cmp al, 0x39
jg 0x436b82
movsx eax, byte [edx]
lea esi, [esi + esi*4]
lea esi, [esi - 0x18]
lea edi, [edx + 1]
mov dword [ebp - 0x48], edi
mov edx, edi
lea esi, [eax + esi*2]
mov dword [ebp - 0x24], esi
cmp esi, dword [ebp - 0x34]
jle 0x436b7c
mov al, byte [edi]
cmp al, 0x30
jl 0x436b7c
mov ecx, edi
mov esi, edi
nop word [eax + eax]
mov edx, ecx
cmp al, 0x39
ja 0x436b79
mov al, byte [esi + 1]
lea edi, [esi + 1]
mov dword [ebp - 0x48], edi
mov ecx, edi
mov edx, edi
mov esi, edi
cmp al, 0x30
jge 0x436b60
mov esi, dword [ebp - 0x24]
mov al, byte [edi]
cmp al, 0x30
jge 0x436b30
neg esi
jmp 0x436bf3
mov edx, dword [ebp - 0x2c]
mov eax, 0x134
sub eax, edx
mov dword [ebp - 0x34], eax
cmp cl, 0x30
jl 0x436bf6
mov edx, edi
mov al, cl
nop dword [eax]
cmp al, 0x39
jg 0x436bf3
movsx eax, byte [edx]
lea esi, [esi + esi*4]
lea esi, [esi - 0x18]
lea edi, [edx + 1]
mov dword [ebp - 0x48], edi
lea esi, [eax + esi*2]
cmp esi, dword [ebp - 0x34]
jg 0x436bc5
mov al, byte [edi]
mov edx, edi
cmp al, 0x30
jge 0x436ba0
jmp 0x436bf3
mov edx, dword [ebp - 0x4c]
mov eax, dword [ebp - 0x58]
mov dword [edx + 0x18], 0xd
mov dword [edx + 0x1c], eax
jmp 0x436cb7
mov edx, dword [ebp - 0x4c]
mov esi, dword [ebp - 0x20]
sub ecx, esi
mov dword [edx + 0x18], 0xf
mov dword [edx + 0x1c], ecx
jmp 0x436cba
xor esi, esi
mov edx, dword [ebp - 0x2c]
cmp byte [ebp - 0xe], 0
je 0x436cd5
lea eax, [esi + edx]
cmp eax, 0xfffffecc
jge 0x436c31
divsd xmm2, qword [0x485120]
add eax, 0x134
cmp eax, 0xfffffecc
jl 0x436c59
shl eax, 3
mov ecx, 0x4842d8
sub ecx, eax
movaps xmm0, xmm2
divsd xmm0, qword [ecx]
jmp 0x436c54
lea ecx, [eax*8]
movaps xmm0, xmm2
test eax, eax
js 0x436c49
mulsd xmm0, qword [ecx + 0x4842d8]
jmp 0x436c54
mov eax, 0x4842d8
sub eax, ecx
divsd xmm0, qword [eax]
movsd qword [ebp - 0x54], xmm0
movsd xmm0, qword [ebp - 0x54]
comisd xmm0, xmmword [0x485128]
ja 0x436bc5
cmp byte [ebp - 0xf], 0
je 0x436c79
xorps xmm0, xmmword [0x483450]
mov esi, dword [ebp - 0x3c]
movsd qword [ebp - 0x54], xmm0
mov eax, dword [esi + 0x28]
sub eax, dword [esi + 0x24]
cmp eax, 0x10
jge 0x436c96
push 1
lea ecx, [esi + 0x18]
call fcn.004361d0
mov ecx, dword [esi + 0x24]
xorps xmm0, xmm0
movsd xmm3, qword [ebp - 0x54]
lea eax, [ecx + 0x10]
mov dword [esi + 0x24], eax
mov eax, 0x216
movups xmmword [ecx], xmm0
movsd qword [ecx], xmm3
mov word [ecx + 0xe], ax
mov esi, dword [ebp - 0x20]
mov eax, dword [ebp + 8]
mov dword [eax], edi
mov dword [eax + 4], esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
mov esi, dword [ebp - 0x3c]
add esi, 0x18
mov eax, dword [esi + 0x10]
sub eax, dword [esi + 0xc]
cmp byte [ebp - 0xd], 0
je 0x436da6
cmp byte [ebp - 0xf], 0
je 0x436d1e
cmp eax, 0x10
jge 0x436cff
push 1
mov ecx, esi
call fcn.004361d0
mov ecx, dword [esi + 0xc]
mov edx, dword [ebp - 0x18]
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov eax, dword [ebp - 0x14]
neg eax
adc edx, 0
neg edx
push edx
push eax
call fcn.00437c50
jmp 0x436cb7
cmp eax, 0x10
jge 0x436d2c
push 1
mov ecx, esi
call fcn.004361d0
mov eax, dword [esi + 0xc]
xorps xmm0, xmm0
mov edx, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
mov dword [ebp - 0x34], eax
add eax, 0x10
mov dword [esi + 0xc], eax
mov eax, 0x116
mov esi, dword [ebp - 0x34]
mov dword [ebp - 0x3c], eax
movups xmmword [esi], xmm0
mov dword [esi], ecx
mov dword [esi + 4], edx
mov word [esi + 0xe], ax
test edx, edx
jl 0x436d6e
jg 0x436d62
test ecx, ecx
jb 0x436d6e
mov eax, 0x196
mov word [esi + 0xe], ax
mov dword [ebp - 0x3c], eax
movzx eax, ax
mov dword [ebp - 0x34], eax
xor eax, eax
or eax, edx
jne 0x436d89
mov eax, dword [ebp - 0x3c]
or eax, 0x40
mov word [esi + 0xe], ax
movzx eax, ax
jmp 0x436d8c
mov eax, dword [ebp - 0x34]
and ecx, 0x80000000
or ecx, edx
jne 0x436cb7
or eax, 0x20
mov word [esi + 0xe], ax
jmp 0x436cb7
cmp byte [ebp - 0xf], 0
je 0x436deb
neg dword [ebp - 0x1c]
cmp eax, 0x10
jge 0x436dbd
push 1
mov ecx, esi
call fcn.004361d0
mov ecx, dword [esi + 0xc]
xorps xmm0, xmm0
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov esi, dword [ebp - 0x1c]
mov eax, esi
cdq
test esi, esi
movups xmmword [ecx], xmm0
mov dword [ecx], eax
mov eax, 0xb6
mov dword [ecx + 4], edx
mov edx, 0x1f6
cmovns eax, edx
jmp 0x436cb3
cmp eax, 0x10
jge 0x436df9
push 1
mov ecx, esi
call fcn.004361d0
mov ecx, dword [esi + 0xc]
xorps xmm0, xmm0
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov eax, dword [ebp - 0x1c]
movups xmmword [ecx], xmm0
mov dword [ecx], eax
shr eax, 0x1a
not eax
mov dword [ecx + 4], 0
and eax, 0x20
or eax, 0x1d6
jmp 0x436cb3
mov esi, dword [ebp - 0x20]
sub eax, esi
mov dword [edx + 0x18], 3
mov dword [edx + 0x1c], eax
jmp 0x436cba