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

Disassembly:
push ebp
mov ebp, esp
push ecx
push ecx
push ebx
mov ebx, dword [ebp + 0xc]
push esi
mov esi, dword [ebp + 8]
push edi
mov edi, 0x400
mov dword [ebx], edi
and dword [ebx + 4], 0
and dword [ebx + 8], 0
mov ecx, dword [esi]
test ecx, ecx
je 0x10002f32
test byte [ebp + 0x11], 6
je 0x10002c3e
mov al, byte [ecx]
cmp al, 0x27
je 0x10002c3e
cmp al, 0x22
je 0x10002c3e
cmp al, 0x60
je 0x10002c3e
cmp al, 0x2b
je 0x10002c94
cmp al, 0x2d
je 0x10002c94
cmp al, 0x30
jl 0x10002c3e
cmp al, 0x39
jle 0x10002c94
mov edx, 0x100
test dword [ebp + 0x10], edx
je 0x10002c94
mov al, byte [ecx]
and byte [ebp + 0x13], 0
cmp al, 0x27
je 0x10002c5f
cmp al, 0x22
je 0x10002c5f
cmp al, 0x60
je 0x10002c5f
dec ecx
mov dword [esi], ecx
jmp 0x10002c62
mov byte [ebp + 0x13], al
mov dword [ebx], edx
call fcn.1000316a
mov dword [ebx + 4], eax
mov edi, eax
jmp 0x10002c78
cmp cl, byte [ebp + 0x13]
je 0x10002c82
mov byte [edi], cl
inc edi
inc dword [esi]
mov eax, dword [esi]
mov cl, byte [eax]
test cl, cl
jne 0x10002c70
mov cl, byte [ebp + 0x13]
cmp byte [eax], cl
jne 0x10002c8c
inc eax
mov dword [esi], eax
and byte [edi], 0
jmp 0x10002f32
mov eax, dword [esi]
mov cl, byte [eax]
cmp cl, 0x20
je 0x10002ca2
cmp cl, 9
jne 0x10002ca7
inc eax
mov dword [esi], eax
jmp 0x10002c94
mov eax, dword [ebp + 0x10]
and eax, edi
mov dword [ebp - 8], eax
je 0x10002d23
mov eax, dword [esi]
cmp byte [eax], 0x30
jne 0x10002d23
inc eax
mov cl, byte [eax]
cmp cl, 0x78
je 0x10002cc5
cmp cl, 0x58
jne 0x10002d23
mov dword [esi], eax
inc eax
cmp byte [eax], 0x30
je 0x10002cc5
inc dword [esi]
mov eax, dword [esi]
movsx eax, byte [eax]
cmp eax, 0x30
jl 0x10002ce3
cmp eax, 0x39
jg 0x10002ce3
sub eax, 0x30
jmp 0x10002d07
cmp eax, 0x61
jl 0x10002cf2
cmp eax, 0x66
jg 0x10002cf2
sub eax, 0x57
jmp 0x10002d07
cmp eax, 0x41
jl 0x10002f32
cmp eax, 0x46
jg 0x10002f32
sub eax, 0x37
mov ecx, dword [ebx + 4]
mov edx, dword [ebx + 8]
shld edx, ecx, 4
mov dword [ebx + 8], edx
shl ecx, 4
cdq
mov dword [ebx + 4], ecx
add dword [ebx + 4], eax
adc dword [ebx + 8], edx
jmp 0x10002ccd
mov eax, dword [esi]
and dword [ebp + 8], 0
and dword [ebp + 0xc], 0
cmp byte [eax], 0x2d
jne 0x10002d3b
mov dword [ebp + 8], 1
jmp 0x10002d42
dec eax
mov dword [esi], eax
jmp 0x10002d42
inc dword [esi]
mov eax, dword [esi]
cmp byte [eax + 1], 0x30
je 0x10002d40
mov eax, dword [ebp + 0x10]
and eax, 0x200
mov dword [ebp - 4], eax
inc dword [esi]
mov eax, dword [esi]
push 0x30
movsx edi, byte [eax]
pop ecx
xor eax, eax
sub edi, ecx
inc dword [ebp + 0xc]
cmp dword [ebp - 4], eax
mov dword [ebp + 0x10], edi
je 0x10002d83
cmp edi, 0x35
je 0x10002db4
cmp edi, 0x15
je 0x10002db4
cmp edi, 0xfffffffe
je 0x10002db4
cmp dword [ebp + 0xc], 0x12
jg 0x10002db4
cmp edi, eax
jl 0x10002f05
cmp edi, 9
jg 0x10002f05
push 0
push 0xa
push dword [ebx + 8]
push dword [ebx + 4]
call fcn.10004350
mov dword [ebx + 4], eax
mov eax, edi
mov dword [ebx + 8], edx
cdq
add dword [ebx + 4], eax
adc dword [ebx + 8], edx
jmp 0x10002d55
mov dword [ebx], 0x200
cmp edi, eax
fild qword [ebx + 4]
fstp qword [ebx + 4]
jl 0x10002de6
cmp edi, 9
jg 0x10002de6
fld qword [ebx + 4]
fmul qword [0x1000d2d8]
fiadd dword [ebp + 0x10]
fstp qword [ebx + 4]
inc dword [esi]
mov eax, dword [esi]
movsx edi, byte [eax]
sub edi, ecx
mov dword [ebp + 0x10], edi
jns 0x10002dc4
cmp edi, 0xfffffffe
jne 0x10002e28
inc dword [esi]
mov eax, dword [esi]
fld1
fldz
jmp 0x10002e14
cmp edi, 9
jg 0x10002e1e
fld qword [0x1000d2d8]
fmul st(1)
inc eax
mov dword [esi], eax
fiadd dword [ebp + 0x10]
fstp st(1)
fld st(1)
fmul qword [0x1000d2d8]
fstp st(2)
movsx edi, byte [eax]
sub edi, ecx
mov dword [ebp + 0x10], edi
jns 0x10002df5
fdiv st(1)
fadd qword [ebx + 4]
fstp qword [ebx + 4]
fstp st(0)
cmp edi, 0x15
je 0x10002e36
cmp edi, 0x35
jne 0x10002ef5
xor edi, edi
inc dword [esi]
mov eax, dword [esi]
mov dword [ebp + 0x10], edi
mov dl, byte [eax]
cmp dl, 0x2b
je 0x10002e50
cmp dl, 0x2d
je 0x10002e50
dec eax
mov dword [esi], eax
jmp 0x10002e5b
xor eax, eax
cmp dl, 0x2d
sete al
mov dword [ebp + 0x10], eax
inc dword [esi]
mov edx, dword [esi]
movsx eax, byte [edx]
sub eax, ecx
js 0x10002e8e
cmp eax, 9
jg 0x10002e7b
lea edi, [edi + edi*4]
inc edx
mov dword [esi], edx
lea edi, [eax + edi*2]
movsx eax, byte [edx]
sub eax, ecx
jns 0x10002e66
cmp edi, 0x400
jl 0x10002e8e
fld qword [0x1000e180]
xor edi, edi
fstp qword [ebx + 4]
cmp edi, 0x63
fld1
jle 0x10002eb0
push 0x64
lea eax, [edi - 0x64]
xor edx, edx
pop ecx
div ecx
inc eax
mov ecx, eax
imul ecx, ecx, 0xffffff9c
add edi, ecx
fmul qword [0x1000d2d0]
dec eax
jne 0x10002ea7
cmp edi, 9
jle 0x10002ed0
push 0xa
lea eax, [edi - 0xa]
xor edx, edx
pop ecx
div ecx
inc eax
mov ecx, eax
imul ecx, ecx, 0xfffffff6
add edi, ecx
fmul qword [0x1000d2c8]
dec eax
jne 0x10002ec7
test edi, edi
je 0x10002edd
fmul qword [0x1000d2d8]
dec edi
jne 0x10002ed4
cmp dword [ebp + 0x10], 0
je 0x10002eef
fld qword [ebx + 4]
fdiv st(1)
fstp qword [ebx + 4]
fstp st(0)
jmp 0x10002ef5
fmul qword [ebx + 4]
fstp qword [ebx + 4]
cmp dword [ebp + 8], 0
je 0x10002f32
fld qword [ebx + 4]
fchs
fstp qword [ebx + 4]
jmp 0x10002f32
cmp dword [ebp + 8], eax
je 0x10002f1c
mov ecx, dword [ebx + 4]
mov edx, dword [ebx + 8]
neg ecx
adc edx, eax
mov dword [ebx + 4], ecx
neg edx
mov dword [ebx + 8], edx
cmp dword [ebp - 4], eax
je 0x10002f32
cmp dword [ebp - 8], eax
jne 0x10002f32
fild qword [ebx + 4]
fstp qword [ebx + 4]
mov dword [ebx], 0x200
pop edi
pop esi
pop ebx
leave
ret