def gcd(first_number: int, second_number: int) -> int:
    """
    gcd: Function which finds the GCD of two numbers.
    The GCD (Greatest Common Divisor) of two numbers is found by the Steins GCD Algorithm.
    Args:
        first_number (int): First number
        second_number (int): Second number
    Returns:
        int: Returns the GCD of the two numbers.
    """

    # GCD(0, second_number) == second_number; GCD(first_number, 0) == first_number, GCD(0, 0) == 0.
    if first_number == 0:
        return second_number

    if second_number == 0:
        return first_number

    # Finding K, where K is the greatest power of 2 that divides both first_number and second_number.
    k: int = 0

    while ((first_number | second_number) & 1) == 0:
        first_number = first_number >> 1
        second_number = second_number >> 1
        k = k + 1

    # Dividing first_number by 2 until first_number becomes odd
    while (first_number & 1) == 0:
        first_number = first_number >> 1

    # From here on, 'first_number' is always odd.
    while second_number != 0:
        # If second_number is even, remove all factor of 2 in second_number
        while (second_number & 1) == 0:
            second_number = second_number >> 1
        # Now first_number and second_number are both odd. Swap if necessary so first_number <= second_number, then set second_number = second_number - first_number (which is even).
        if first_number > second_number:
            # Swap u and v.
            first_number, second_number = second_number, first_number

        second_number = second_number - first_number
    # restore common factors of 2
    return first_number << k