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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x98
mov eax, dword [0x102d4a48]
xor eax, ebp
mov dword [ebp - 4], eax
mov edx, dword [ebp + 8]
xor eax, eax
push ebx
mov ebx, dword [ebp + 0xc]
push esi
push edi
lea edi, [ebp - 0x28]
mov dword [ebp - 0x90], edx
push 9
pop ecx
rep stosd dword es:[edi], eax
mov edi, eax
mov dword [ebp - 0x80], eax
mov dword [ebp - 0x88], eax
mov dword [ebp - 0x84], edi
mov dword [edx], eax
mov dword [edx + 4], SysStringLen
cmp dword [ebp + 0x10], eax
jne 0x101d7c04
call fcn.101d8349
push 0
push 0xf4240
mov edi, edx
mov esi, eax
push edi
push esi
call fcn.10230b30
push 0x10296114
push ebx
mov dword [ebp - 0x98], eax
mov dword [ebp - 0x94], edx
call fcn.101d410f
pop ecx
pop ecx
test eax, eax
jne 0x101d7b6f
mov eax, dword [ebp - 0x90]
mov dword [eax + 4], edi
mov dword [eax], esi
xor eax, eax
jmp 0x101d7ef2
xor esi, esi
lea eax, [ebp - 0x28]
push eax
push dword [esi + 0x102957e8]
push ebx
call fcn.101d800c
add esp, 0xc
test eax, eax
jne 0x101d7b90
add esi, 4
cmp esi, 8
jb 0x101d7b71
test eax, eax
mov esi, eax
cmove esi, ebx
xor ecx, ecx
test eax, eax
sete cl
mov al, byte [esi]
mov dword [ebp - 0x80], ecx
cmp al, 0x54
je 0x101d7bc3
cmp al, 0x74
je 0x101d7bc3
movsx eax, al
jmp 0x101d7bb4
inc esi
movsx eax, byte [esi]
push eax
call fcn.101d7765
add esp, 4
test eax, eax
jne 0x101d7bb0
jmp 0x101d7bc4
inc esi
xor edi, edi
lea eax, [ebp - 0x28]
push eax
push dword [edi + 0x102957f0]
push esi
call fcn.101d800c
mov ebx, eax
add esp, 0xc
test ebx, ebx
jne 0x101d7be7
add edi, 4
cmp edi, 8
jb 0x101d7bc6
mov edi, dword [ebp - 0x98]
mov eax, dword [ebp - 0x94]
mov dword [ebp - 0x78], edi
mov edi, dword [ebp - 0x84]
mov dword [ebp - 0x7c], eax
jmp 0x101d7c91
cmp byte [ebx], 0x2d
lea esi, [ebx + 1]
lea eax, [ebp - 0x28]
cmovne esi, ebx
xor ecx, ecx
cmp byte [ebx], 0x2d
push eax
sete cl
push str._J:_M:_S
push esi
mov dword [ebp - 0x88], ecx
call fcn.101d800c
mov ebx, eax
add esp, 0xc
test ebx, ebx
jne 0x101d7c9a
lea eax, [ebp - 0x28]
push eax
push str._M:_S
push esi
call fcn.101d800c
mov ebx, eax
add esp, 0xc
xor eax, eax
mov dword [ebp - 0x20], eax
test ebx, ebx
jne 0x101d7c9d
call fcn.1009cbf4
push 0xa
and dword [eax], edi
pop eax
push eax
lea eax, [ebp - 0x8c]
push eax
push esi
call fcn.100a45ef
add esp, 0xc
mov dword [ebp - 0x78], eax
mov dword [ebp - 0x7c], edx
cmp dword [ebp - 0x8c], esi
je 0x101d7e7c
call fcn.1009cbf4
cmp dword [eax], 0x22
je 0x101d7eef
mov ebx, dword [ebp - 0x8c]
test ebx, ebx
jne 0x101d7cbc
jmp 0x101d7e7c
mov eax, dword [ebp - 0x20]
imul eax, eax, 0x3c
add eax, dword [ebp - 0x24]
imul eax, eax, 0x3c
add eax, dword [ebp - 0x28]
cdq
mov dword [ebp - 0x78], eax
mov eax, dword [ebp - 0x88]
mov dword [ebp - 0x7c], edx
mov dword [ebp - 0x88], eax
mov cl, byte [ebx]
xor esi, esi
inc esi
cmp cl, 0x2e
jne 0x101d7d01
inc ebx
mov ecx, 0x186a0
mov al, byte [ebx]
movsx edx, al
sub al, 0x30
cmp al, 9
ja 0x101d7cef
lea eax, [edx - 0x30]
xor edx, edx
imul eax, ecx
push 0xa
add edi, eax
mov eax, ecx
pop ecx
div ecx
inc ebx
mov ecx, eax
cmp ecx, esi
jge 0x101d7ccc
mov dword [ebp - 0x84], edi
mov cl, byte [ebx]
lea eax, [ecx - 0x30]
cmp al, 9
ja 0x101d7d01
inc ebx
jmp 0x101d7cf5
cmp dword [ebp + 0x10], 0
je 0x101d7d58
lea edx, [ebx + 1]
cmp cl, 0x6d
jne 0x101d7d2c
cmp byte [edx], 0x73
jne 0x101d7d3f
mov eax, edi
mov esi, 0x3e8
cdq
idiv esi
mov dword [ebp - 0x84], eax
add ebx, 2
jmp 0x101d7e75
cmp cl, 0x75
jne 0x101d7d3f
cmp byte [edx], 0x73
jne 0x101d7d3f
and dword [ebp - 0x84], 0
jmp 0x101d7d24
mov eax, 0xf4240
xor edi, edi
mov esi, eax
cmp cl, 0x73
jne 0x101d7e77
mov ebx, edx
jmp 0x101d7e75
cmp cl, 0x5a
je 0x101d7d69
cmp cl, 0x7a
je 0x101d7d69
xor ecx, ecx
mov dword [ebp - 0x7c], ecx
jmp 0x101d7d6e
mov ecx, esi
mov dword [ebp - 0x7c], esi
xor edi, edi
add ebx, ecx
mov dword [ebp - 0x78], edi
cmp dword [ebp - 0x80], edi
jne 0x101d7de7
test ecx, ecx
jne 0x101d7e3f
mov al, byte [ebx]
mov byte [ebp - 0x71], al
cmp al, 0x2b
je 0x101d7d93
cmp al, 0x2d
jne 0x101d7e3f
push 9
xor eax, eax
lea edi, [ebp - 0x4c]
pop ecx
rep stosd dword es:[edi], eax
lea eax, [ebx + 1]
xor edi, edi
mov dword [ebp - 0x80], eax
lea ecx, [ebp - 0x4c]
push ecx
push dword [edi + 0x1029531c]
push eax
call fcn.101d800c
mov ebx, eax
add esp, 0xc
test ebx, ebx
jne 0x101d7dce
mov eax, dword [ebp - 0x80]
add edi, 4
cmp edi, 0xc
jb 0x101d7da5
jmp 0x101d7e7c
imul ecx, dword [ebp - 0x44], 0x3c
add ecx, dword [ebp - 0x48]
mov eax, ecx
neg eax
cmp byte [ebp - 0x71], 0x2b
cmove ecx, eax
imul edi, ecx, 0x3c
mov ecx, esi
jmp 0x101d7e3f
lea eax, [ebp - 0x98]
push eax
test ecx, ecx
je 0x101d7df9
call fcn.10233f08
jmp 0x101d7dfe
call fcn.102341c9
pop ecx
test eax, eax
jne 0x101d7e07
xor esi, esi
jmp 0x101d7e14
push 9
pop ecx
lea edi, [ebp - 0x70]
mov esi, eax
rep movsd dword es:[edi], dword [esi]
lea esi, [ebp - 0x70]
mov eax, dword [ebp - 0x20]
lea edi, [ebp - 0x4c]
push 9
pop ecx
rep movsd dword es:[edi], dword [esi]
mov dword [ebp - 0x44], eax
lea esi, [ebp - 0x4c]
mov eax, dword [ebp - 0x24]
lea edi, [ebp - 0x28]
mov dword [ebp - 0x48], eax
mov eax, dword [ebp - 0x28]
push 9
pop ecx
mov dword [ebp - 0x4c], eax
rep movsd dword es:[edi], dword [esi]
mov ecx, dword [ebp - 0x7c]
mov edi, dword [ebp - 0x78]
xor eax, eax
test ecx, ecx
setne al
dec eax
mov dword [ebp - 8], eax
lea eax, [ebp - 0x28]
push eax
test ecx, ecx
je 0x101d7e59
call fcn.101d81e9
jmp 0x101d7e5e
call fcn.10234674
pop ecx
mov ecx, eax
mov esi, edx
mov eax, edi
cdq
add ecx, eax
mov dword [ebp - 0x78], ecx
adc esi, edx
mov dword [ebp - 0x7c], esi
mov esi, 0xf4240
xor edi, edi
cmp byte [ebx], 0
je 0x101d7e80
push 0xffffffffffffffea
jmp 0x101d7ef1
push edi
push esi
push SysReAllocString
or ebx, 0xffffffff
push ebx
call fcn.10230a40
mov ecx, dword [ebp - 0x7c]
mov dword [ebp - 0x80], eax
cmp edx, ecx
jl 0x101d7eef
mov eax, dword [ebp - 0x78]
jg 0x101d7ea4
cmp dword [ebp - 0x80], eax
jb 0x101d7eef
push ecx
push eax
push edi
push esi
call fcn.10230a00
mov esi, eax
mov ecx, edx
mov eax, dword [ebp - 0x84]
cdq
mov edi, eax
mov eax, SysReAllocString
sub ebx, edi
sbb eax, edx
cmp eax, ecx
jl 0x101d7eef
jg 0x101d7ecd
cmp ebx, esi
jb 0x101d7eef
add esi, edi
adc ecx, edx
cmp dword [ebp - 0x88], 0
je 0x101d7ee1
neg esi
adc ecx, 0
neg ecx
mov eax, dword [ebp - 0x90]
mov dword [eax + 4], ecx
jmp 0x101d7b66
push 0xffffffffffffffde
pop eax
mov ecx, dword [ebp - 4]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.1008a9cb
leave
ret