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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x1c
push ebx
push esi
and dword [ebp - 8], 0
and dword [ebp - 0xc], 0
and byte [ebp - 1], 0
push edi
mov edi, dword [ebp + 8]
push 3
pop ebx
push 0xb
push edi
mov dword [ebp - 0x18], ebx
call sym.perl510.dll_Perl_newSV_type
push str.version
mov dword [ebp - 0x14], eax
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_newSVrv
push 0xc
push eax
push edi
mov dword [ebp + 0x10], eax
call sym.perl510.dll_Perl_sv_upgrade
add esp, 0x20
mov ecx, dword [ebp + 0xc]
mov al, byte [ecx]
cmp al, 0x20
je 0x28099ab1
cmp al, 9
je 0x28099ab1
cmp al, 0xa
je 0x28099ab1
cmp al, 0xd
je 0x28099ab1
cmp al, 0xc
jne 0x28099ab7
inc ecx
mov dword [ebp + 0xc], ecx
jmp 0x28099a98
cmp byte [ecx], 0x76
mov dword [ebp - 0x10], ecx
mov dword [ebp - 0x1c], ecx
jne 0x28099aca
inc ecx
mov byte [ebp + 0x14], 1
mov dword [ebp + 0xc], ecx
mov esi, dword [ebp + 0xc]
mov al, byte [esi]
cmp al, 0x2e
je 0x28099ae7
cmp al, 0x5f
je 0x28099ae3
cmp al, 0x2c
je 0x28099ae3
cmp al, 0x30
jl 0x28099b3d
cmp al, 0x39
jg 0x28099b3d
cmp al, 0x2e
jne 0x28099afc
cmp dword [ebp - 0xc], 0
je 0x28099b34
push str.Invalid_version_format__underscores_before_decimal_
push edi
call sym.perl510.dll_Perl_croak
pop ecx
pop ecx
jmp 0x28099b34
cmp al, 0x5f
jne 0x28099b25
cmp dword [ebp - 0xc], 0
je 0x28099b13
push str.Invalid_version_format__multiple_underscores_
push edi
call sym.perl510.dll_Perl_croak
pop ecx
pop ecx
mov ebx, esi
mov dword [ebp - 0xc], 1
sub ebx, dword [ebp - 0x10]
dec ebx
mov dword [ebp - 0x18], ebx
jmp 0x28099b3a
cmp al, 0x2c
jne 0x28099b3a
mov al, byte [esi + 1]
cmp al, 0x30
jl 0x28099b3a
cmp al, 0x39
jg 0x28099b3a
inc dword [ebp - 8]
mov dword [ebp - 0x10], esi
inc esi
jmp 0x28099acd
cmp dword [ebp - 0xc], 0
je 0x28099b6d
cmp dword [ebp - 8], 0
jne 0x28099b5c
push str.Invalid_version_format__alpha_without_decimal_
push edi
call sym.perl510.dll_Perl_croak
cmp dword [ebp - 8], 0
pop ecx
pop ecx
je 0x28099b6d
test ebx, ebx
jne 0x28099b6d
push str.Invalid_version_format__misplaced___in_number_
push edi
call sym.perl510.dll_Perl_croak
pop ecx
pop ecx
cmp dword [ebp - 8], 1
jle 0x28099b77
mov byte [ebp + 0x14], 1
cmp byte [ebp + 0x14], 0
mov ebx, dword [ebp + 0xc]
mov dword [ebp - 0x10], esi
je 0x28099bab
movsx eax, byte [ebp + 0x14]
xor esi, esi
push esi
push eax
push edi
call sym.perl510.dll_Perl_newSViv
pop ecx
pop ecx
push eax
push 0x24
push esi
push 2
push 0x280b850c
push esi
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_hv_common
add esp, 0x24
cmp dword [ebp - 0xc], 0
je 0x28099bd7
xor esi, esi
push esi
push dword [ebp - 0xc]
push edi
call sym.perl510.dll_Perl_newSViv
pop ecx
pop ecx
push eax
push 0x24
push esi
push 5
push str.alpha
push esi
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_hv_common
add esp, 0x24
cmp byte [ebp + 0x14], 0
jne 0x28099c09
cmp dword [ebp - 0x18], 3
jge 0x28099c09
xor esi, esi
push esi
push dword [ebp - 0x18]
push edi
call sym.perl510.dll_Perl_newSViv
pop ecx
pop ecx
push eax
push 0x24
push esi
push 5
push str.width
push esi
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_hv_common
add esp, 0x24
mov eax, dword [ebp + 0xc]
mov al, byte [eax]
cmp al, 0x30
jl 0x28099c1c
cmp al, 0x39
jg 0x28099c1c
mov al, byte [ebx + 1]
inc ebx
jmp 0x28099c0e
mov al, byte [ebx]
cmp al, 0x41
jl 0x28099c2a
cmp al, 0x5a
jle 0x28099e11
cmp al, 0x61
jl 0x28099c36
cmp al, 0x7a
jle 0x28099e11
xor ecx, ecx
push 1
cmp byte [ebp + 0x14], cl
pop edi
jne 0x28099d1d
mov eax, dword [ebp + 0xc]
cmp eax, dword [ebp - 0x1c]
jbe 0x28099d1d
cmp dword [ebp - 8], edi
jne 0x28099d1d
push 0x64
cmp eax, ebx
pop edi
jae 0x28099cee
mov eax, dword [ebp + 0xc]
mov esi, ecx
push 0xa
movsx eax, byte [eax]
sub eax, 0x30
imul eax, edi
add ecx, eax
mov eax, edi
cdq
pop edi
idiv edi
test esi, esi
mov edi, eax
jge 0x28099c84
neg esi
test ecx, ecx
mov eax, ecx
jge 0x28099c8c
neg eax
cmp esi, eax
jg 0x28099ca3
test ecx, ecx
mov eax, ecx
jge 0x28099c98
neg eax
mov esi, 0x7fffffff
cmp eax, esi
jle 0x28099cd7
jmp 0x28099ca8
mov esi, 0x7fffffff
push 0xf
push dword [ebp + 8]
call sym.perl510.dll_Perl_ckwarn
pop ecx
test al, al
pop ecx
je 0x28099ccb
push esi
push str.Integer_overflow_in_version__d
push 0xf
push dword [ebp + 8]
call sym.perl510.dll_Perl_warner
add esp, 0x10
lea eax, [ebx - 1]
mov ecx, esi
mov dword [ebp + 0xc], eax
mov byte [ebp - 1], 1
inc dword [ebp + 0xc]
mov eax, dword [ebp + 0xc]
cmp byte [eax], 0x5f
jne 0x28099ce5
inc dword [ebp + 0xc]
cmp dword [ebp + 0xc], ebx
jb 0x28099c64
push ecx
push dword [ebp + 8]
call sym.perl510.dll_Perl_newSViv
push eax
push dword [ebp - 0x14]
push dword [ebp + 8]
call sym.perl510.dll_Perl_av_push
add esp, 0x14
cmp byte [ebp - 1], 0
jne 0x28099e06
mov dl, byte [ebx]
cmp dl, 0x2e
jne 0x28099d8b
inc ebx
jmp 0x28099dc3
lea eax, [ebx - 1]
cmp eax, dword [ebp + 0xc]
jb 0x28099cee
movsx esi, byte [eax]
sub esi, 0x30
mov edx, ecx
imul esi, edi
lea edi, [edi + edi*4]
add ecx, esi
shl edi, 1
test edx, edx
jge 0x28099d3d
neg edx
test ecx, ecx
mov esi, ecx
jge 0x28099d45
neg esi
cmp edx, esi
jg 0x28099d59
test ecx, ecx
mov edx, ecx
jge 0x28099d51
neg edx
cmp edx, 0x7fffffff
jle 0x28099d88
push 0xf
push dword [ebp + 8]
call sym.perl510.dll_Perl_ckwarn
pop ecx
test al, al
pop ecx
je 0x28099d7b
push str.Integer_overflow_in_version
push 0xf
push dword [ebp + 8]
call sym.perl510.dll_Perl_warner
add esp, 0xc
mov eax, dword [ebp + 0xc]
mov ecx, 0x7fffffff
dec eax
mov byte [ebp - 1], 1
dec eax
jmp 0x28099d20
cmp dl, 0x5f
jne 0x28099da0
mov cl, byte [ebx + 1]
lea eax, [ebx + 1]
cmp cl, 0x30
jl 0x28099da0
cmp cl, 0x39
jle 0x28099db5
cmp dl, 0x2c
jne 0x28099db9
mov cl, byte [ebx + 1]
lea eax, [ebx + 1]
cmp cl, 0x30
jl 0x28099db9
cmp cl, 0x39
jg 0x28099db9
mov ebx, eax
jmp 0x28099dc3
cmp dl, 0x30
jl 0x28099e0e
cmp dl, 0x39
jg 0x28099e0e
cmp byte [ebp + 0x14], 0
mov dword [ebp + 0xc], ebx
je 0x28099de1
mov al, byte [ebx]
cmp al, 0x30
jl 0x28099c36
cmp al, 0x39
jg 0x28099c36
inc ebx
jmp 0x28099dcc
xor ecx, ecx
mov al, byte [ebx]
cmp al, 0x30
jl 0x28099ded
cmp al, 0x39
jle 0x28099df5
cmp al, 0x5f
jne 0x28099c36
cmp ecx, 3
jge 0x28099c36
cmp al, 0x5f
je 0x28099e03
inc ecx
inc ebx
jmp 0x28099de3
mov eax, dword [ebp - 0x10]
mov dword [ebp + 0xc], eax
jmp 0x28099e11
mov dword [ebp + 0xc], ebx
cmp byte [ebp + 0x14], 0
je 0x28099e4f
push dword [ebp - 0x14]
push dword [ebp + 8]
call sym.perl510.dll_Perl_av_len
pop ecx
pop ecx
push 2
pop ecx
sub ecx, eax
mov eax, ecx
dec ecx
test eax, eax
jle 0x28099e4f
lea esi, [ecx + 1]
push 0
push dword [ebp + 8]
call sym.perl510.dll_Perl_newSViv
push eax
push dword [ebp - 0x14]
push dword [ebp + 8]
call sym.perl510.dll_Perl_av_push
add esp, 0x14
dec esi
jne 0x28099e33
cmp byte [ebp - 1], 0
je 0x28099ea8
mov edi, dword [ebp + 8]
push 5
push str.v.Inf
push edi
call sym.perl510.dll_Perl_newSVpvn
xor esi, esi
push esi
push eax
push 0x24
push esi
push 8
push str.original
push esi
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_hv_common
add esp, 0x30
push esi
push 1
push edi
call sym.perl510.dll_Perl_newSViv
pop ecx
pop ecx
push eax
push 0x24
push esi
push 4
push str.vinf
push esi
push dword [ebp + 0x10]
push edi
call sym.perl510.dll_Perl_hv_common
add esp, 0x24
jmp 0x28099f47
mov eax, dword [ebp - 0x1c]
cmp dword [ebp + 0xc], eax
jbe 0x28099f08
mov eax, dword [ebp + 0xc]
mov edi, dword [ebp - 0x1c]
sub eax, edi
push eax
push edi
push dword [ebp + 8]
call sym.perl510.dll_Perl_newSVpvn
add esp, 0xc
cmp byte [ebp + 0x14], 0
mov esi, eax
je 0x28099ef1
cmp dword [ebp - 8], 1
jne 0x28099ef1
cmp byte [edi], 0x76
je 0x28099ef1
push 2
push 1
push 0x280b43e4
push 0
push 0
push esi
push dword [ebp + 8]
call sym.perl510.dll_Perl_sv_insert_flags
add esp, 0x1c
xor eax, eax
push eax
push esi
push 0x24
push eax
push 8
push str.original
push eax
push dword [ebp + 0x10]
push dword [ebp + 8]
jmp 0x28099e9b
mov esi, dword [ebp + 8]
xor edi, edi
push edi
push 1
push 0x280b4c94
push esi
call sym.perl510.dll_Perl_newSVpvn
add esp, 0xc
push eax
push 0x24
push edi
push 8
push str.original
push edi
push dword [ebp + 0x10]
push esi
call sym.perl510.dll_Perl_hv_common
push edi
push esi
call sym.perl510.dll_Perl_newSViv
push eax
push dword [ebp - 0x14]
push esi
call sym.perl510.dll_Perl_av_push
add esp, 0x38
xor esi, esi
push esi
push dword [ebp - 0x14]
push dword [ebp + 8]
call sym.perl510.dll_Perl_newRV_noinc
pop ecx
pop ecx
push eax
push 0x24
push esi
push 7
push str.version
push esi
push dword [ebp + 0x10]
push dword [ebp + 8]
call sym.perl510.dll_Perl_hv_common
mov esi, dword [ebp + 0xc]
add esp, 0x24
cmp byte [esi], 0x75
jne 0x28099f8d
push str.undef
push esi
call sub.MSVCRT.dll_strcmp
pop ecx
test eax, eax
pop ecx
jne 0x28099f8d
add esi, 5
mov eax, esi
pop edi
pop esi
pop ebx
leave
ret