



def 	__a					(   lowerCAmelCase_       : Dict    )				->			Union[str, Any]:






						'''simple docstring'''



						return credit_card_number.startswith(("""34""", """35""", """37""", """4""", """5""", """6""")    )



def 	__a					(   lowerCAmelCase_       : Any    )				->			Tuple:






						'''simple docstring'''



						UpperCAmelCase_=       credit_card_number
						UpperCAmelCase_=       0
						UpperCAmelCase_=       len(lowerCAmelCase_    ) - 2
						for i in range(lowerCAmelCase_      ,-1      ,-2    ):
												#  double the value of every second digit
												UpperCAmelCase_=       int(cc_number[i]    )
												digit *= 2
												# If doubling of a number results in a two digit number
												# i.e greater than 9(e.g., 6 × 2 = 12),
												# then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),
												# to get a single digit number.
												if digit > 9:
																		digit %= 10
																		digit += 1
												UpperCAmelCase_=       cc_number[:i] + str(lowerCAmelCase_    ) + cc_number[i + 1 :]
												total += digit

						# Sum up the remaining digits
						for i in range(len(lowerCAmelCase_    ) - 1      ,-1      ,-2    ):
												total += int(cc_number[i]    )

						return total % 10 == 0



def 	__a					(   lowerCAmelCase_       : Dict    )				->			Dict:






						'''simple docstring'''



						UpperCAmelCase_=       F"""{credit_card_number} is an invalid credit card number because"""
						if not credit_card_number.isdigit():
												print(F"""{error_message} it has nonnumerical characters."""    )
												return False

						if not 13 <= len(lowerCAmelCase_    ) <= 16:
												print(F"""{error_message} of its length."""    )
												return False

						if not validate_initial_digits(lowerCAmelCase_    ):
												print(F"""{error_message} of its first two digits."""    )
												return False

						if not luhn_validation(lowerCAmelCase_    ):
												print(F"""{error_message} it fails the Luhn check."""    )
												return False

						print(F"""{credit_card_number} is a valid credit card number."""    )
						return True


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	validate_credit_card_number('''4111111111111111''')
	validate_credit_card_number('''32323''')









import warnings
from functools import wraps
from typing import Callable



def 	__a					(   lowerCAmelCase_       : Callable    )				->			Callable:






						'''simple docstring'''



						@wraps(lowerCAmelCase_    )
						def _inner_fn(*lowerCAmelCase_       : List[Any]      ,**lowerCAmelCase_       : Tuple    ):
												warnings.warn(
												    (F"""'{fn.__name__}' is experimental and might be subject to breaking changes in the future.""")      ,lowerCAmelCase_      ,)
												return fn(*lowerCAmelCase_      ,**lowerCAmelCase_    )

						return _inner_fn




