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

Disassembly:
mov eax, 0x5d9cb5
call fcn.005c3f5c
sub esp, 0x38
push ebx
push esi
mov esi, dword [ebp + 0xc]
push edi
mov edi, ecx
mov ecx, esi
call fcn.0043b385
cmp edi, dword [ebp + 8]
jne 0x43aaba
xor eax, eax
mov ecx, dword [ebp - 0xc]
pop edi
pop esi
mov dword fs:[0], ecx
pop ebx
leave
ret
lea eax, [ebp - 0x44]
push eax
call fcn.004caac4
and dword [ebp - 4], 0
mov dword [ebp - 0x18], esi
lea ebx, [ebp - 0x18]
lea esi, [ebp - 0x44]
call fcn.0043b424
jmp 0x43ad1c
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x38]
push 0xfffffffffffffffc
pop esi
test esi, eax
je 0x43ad25
lea eax, [ebp - 0x44]
call fcn.0043b3d8
mov ebx, dword [eax]
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x38]
and eax, esi
cmp eax, 0xfa0
jg 0x43ad45
mov al, byte [edi]
inc edi
mov byte [ebp - 0x11], al
cmp edi, dword [ebp + 8]
jb 0x43ab1b
cmp al, 0x65
jne 0x43ad82
mov ecx, dword [ebx]
dec ecx
je 0x43ab4d
dec ecx
jne 0x43abf6
cmp al, 0x65
je 0x43ab51
mov esi, ebx
call fcn.0043b1a4
mov dword [ebp - 0x18], eax
test eax, eax
je 0x43ad93
lea ebx, [ebp - 0x18]
lea esi, [ebp - 0x44]
call fcn.0043b424
jmp 0x43abf6
cmp al, 0x65
jne 0x43ab6b
mov dword [ebx + 0x14], edi
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x38]
test esi, eax
je 0x43ad1c
sub dword [ebp - 0x34], 4
jmp 0x43ad1c
mov cl, al
sub cl, 0x30
cmp cl, 9
ja 0x43ada4
movsx eax, al
sub eax, 0x30
cdq
push 0x3a
push dword [ebp + 8]
mov dword [ebp - 0x24], eax
lea esi, [ebp - 0x24]
mov eax, edi
mov dword [ebp - 0x20], edx
call fcn.0043aa47
mov edi, eax
xor esi, esi
pop ecx
pop ecx
cmp edi, esi
je 0x43ae5f
mov eax, dword [ebp - 0x24]
lea eax, [eax + edi + 3]
cmp eax, dword [ebp + 8]
ja 0x43ae5f
cmp byte [edi], 0x3a
jne 0x43ae5f
inc edi
cmp edi, dword [ebp + 8]
je 0x43adb5
push edi
mov esi, ebx
call fcn.0043aebc
mov dword [ebp - 0x18], eax
test eax, eax
je 0x43adf4
add edi, dword [ebp - 0x24]
cmp edi, dword [ebp + 8]
jae 0x43ae17
lea ebx, [ebp - 0x18]
lea esi, [ebp - 0x44]
call fcn.0043b424
mov al, byte [edi]
mov byte [ebp - 0x11], al
inc edi
lea eax, [ebp - 0x44]
call fcn.0043b3d8
mov ebx, dword [eax]
mov al, byte [ebp - 0x11]
cmp al, 0x64
je 0x43ad08
cmp al, 0x69
je 0x43acbd
cmp al, 0x6c
je 0x43acb5
mov cl, al
sub cl, 0x30
cmp cl, 9
ja 0x43ae2c
movsx eax, al
sub eax, 0x30
cdq
push 0x3a
push dword [ebp + 8]
mov dword [ebp - 0x2c], eax
lea esi, [ebp - 0x2c]
mov eax, edi
mov dword [ebp - 0x28], edx
call fcn.0043aa47
pop ecx
pop ecx
mov ecx, eax
test ecx, ecx
je 0x43ae3d
mov esi, dword [ebp - 0x2c]
lea eax, [esi + ecx + 1]
cmp eax, dword [ebp + 8]
ja 0x43ae3d
cmp byte [ecx], 0x3a
jne 0x43ae3d
inc ecx
cmp esi, 0xa
mov dword [ebx], 3
mov dword [ebx + 4], ecx
mov dword [ebx + 8], esi
mov eax, esi
mov dword [ebp - 0x18], 1
jl 0x43ac92
push 0xa
cdq
pop edi
idiv edi
inc dword [ebp - 0x18]
cmp eax, edi
jge 0x43ac85
mov eax, ecx
sub eax, dword [ebp - 0x18]
add ecx, esi
dec eax
mov dword [ebx + 0x10], eax
mov dword [ebx + 0x14], ecx
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x38]
test eax, 0xfffffffc
je 0x43acb1
sub dword [ebp - 0x34], 4
mov edi, ecx
jmp 0x43ad1c
mov dword [ebx], 2
jmp 0x43ad0e
mov ecx, edi
cmp edi, dword [ebp + 8]
jae 0x43accf
cmp byte [ecx], 0x65
je 0x43accf
inc ecx
cmp ecx, dword [ebp + 8]
jb 0x43acc4
mov eax, ecx
sub eax, edi
mov dword [ebx + 8], eax
lea edx, [edi - 1]
lea eax, [eax + edi + 1]
mov dword [ebx], 4
mov dword [ebx + 4], edi
mov dword [ebx + 0x10], edx
mov dword [ebx + 0x14], eax
cmp ecx, dword [ebp + 8]
je 0x43ae4e
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x38]
lea edi, [ecx + 1]
test eax, 0xfffffffc
jmp 0x43ab5c
mov dword [ebx], 1
and dword [ebx + 8], 0
and dword [ebx + 0xc], 0
lea eax, [edi - 1]
mov dword [ebx + 0x10], eax
cmp edi, dword [ebp + 8]
jb 0x43aada
mov dword [ebp - 4], 0xd
xor esi, esi
cmp dword [ebp - 0x38], esi
je 0x43add5
push dword [ebp - 0x38]
call fcn.00574048
pop ecx
jmp 0x43add5
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 1
xor esi, esi
cmp dword [ebp - 0x38], esi
je 0x43ad64
push dword [ebp - 0x38]
call fcn.00574048
pop ecx
mov dword [ebp - 0x38], esi
mov dword [ebp - 0x34], esi
mov dword [ebp - 0x30], esi
or dword [ebp - 4], 0xffffffff
lea eax, [ebp - 0x44]
push eax
call fcn.0044715e
or eax, 0xffffffff
jmp 0x43aaab
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 3
jmp 0x43ad54
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 9
jmp 0x43ae03
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 4
jmp 0x43ad54
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 6
cmp dword [ebp - 0x38], esi
je 0x43add2
push dword [ebp - 0x38]
call fcn.00574048
pop ecx
or esi, 0xffffffff
xor eax, eax
mov dword [ebp - 0x38], eax
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x30], eax
or dword [ebp - 4], 0xffffffff
lea eax, [ebp - 0x44]
push eax
call fcn.0044715e
mov eax, esi
jmp 0x43aaab
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 7
cmp dword [ebp - 0x38], 0
je 0x43ae12
push dword [ebp - 0x38]
call fcn.00574048
pop ecx
push 0xfffffffffffffffe
pop esi
jmp 0x43add5
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 8
cmp dword [ebp - 0x38], 0
jmp 0x43adc7
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 0xb
jmp 0x43ae26
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 0xc
jmp 0x43ae26
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 0xa
jmp 0x43ae26
mov ecx, dword [ebp + 0xc]
call fcn.0043b385
mov dword [ebp - 4], 5
jmp 0x43ad56