BNB Price: $616.77 (+2.83%)
 

Overview

Max Total Supply

2,500,000AXN

Holders

5,031

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
JumpToken: JMPT Token
Balance
0.0009995 AXN

Value
$0.00
0x88d7e9b65dc24cf54f5edef929225fc3e1580c25
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AXN_Token

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, Unlicense license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
// import "@openzeppelin/contracts/utils/Pausable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "./IFaces/IPancakeRouter2.sol";
import "./IFaces/IERC20Detailed.sol";

contract AXN_Token is ERC20, Ownable, ReentrancyGuard {
    IcommunityDevelopmentCNT private communityDevelopmentCNTAddr;
    ICreatorTokensCNT private CreatorTokensCNTAddr;
    ICommunityIncentiveCNT private CommunityIncentiveCNTAddr;
    ICakeLockerCNT private CakeLockerCntAddr;
    IAirDropnExchangeCNT private airDropExchangeCntAddr;
    IRewardsTokensCNT private rewardsTokensCntAddr;

    address constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    using SafeERC20 for IERC20Detailed;

    address public LiquidityWalletAddress;
    address public preSaleWalletAddress;

    address public CommunityDevelopmentWallet;
    address public CreatorTokensWallet;
    address public airDropExchangeReleaseWallet;
    address public rewardsReleaseWallet;
    address public CakeReleaseWallet;
    address PayoutApprover;

    address public pancakeSwapV2Pair;

    IPancakeRouter02 public router;
    IERC20Detailed public USDTAddress;

    bool private isInitialDeploy;
    uint256 public constant _decimals = 10**18;
    uint256 public constant _totalSupply = 2500000 * _decimals;

    uint256 public constant liquidityPoolTokens = 125000 * _decimals;
    uint256 public creatorTokens = 250000 * _decimals;
    uint256 public communityIncentiveTokens = 1000000 * _decimals;
    uint256 public communityDevelopmentTokens = 500000 * _decimals;

    uint256 public constant preSaleTokens = 125000 * _decimals;
    uint256 public airDropnExchangeTokens = 250000 * _decimals;
    uint256 public rewardsTokens = 250000 * _decimals;

    uint256 private constant SaleSpan = 24 hours;
    uint256 private constant TokenReleaseSpan = 30 days;
    uint256 private constant CakeReleaseSpan = 365 days;
    uint256 public constant MaxSaleTokensInSpan = 3 * _decimals;
    uint256 public constant MaxSaleTokensInSpanOther = 10 * _decimals;
    // uint16 public constant MaxSalePercSpan = 1;
    uint16 public constant PERCENT_DIVISOR = 100;

    uint16 public constant creatorMonthlyReleasePerc = 3;
    uint16 public constant CakeTokensReleasePerc = 20;
    uint16 public constant RewardsTokeReleaseRate = 7;
    uint16 public constant AirdropTokensReleaseRate = 7;
    uint16 public constant DevelopmentTokensReleaseRate = 7;

    uint16 public CakeTokensReleaseCount = 0;

    mapping(address => uint256) public lastSellTime;
    mapping(address => uint256) public sellableLimit;
    mapping(address => bool) public userAddingliquidity;

    uint256 public lastCreatorRelease = 0;
    uint256 public lastDevelopmentRelease = 0;
    uint256 public lastCakeRelease = 0;

    uint256 public lastAirdropRelease = 0;
    uint256 public lastRewardsRelease = 0;

    // bool private BurnIt = false;

    constructor(
        address _LiquidityWalletAddress,
        address _preSaleWalletAddress,
        address _airDropExchangeCntAddr,
        address _rewardsTokensCntAddr,
        address _communityDevelopmentCNTAddr,
        address _CreatorTokensCNTAddr,
        address _CommunityIncentiveCNTAddr,
        address _CakeLockerCntAddr
    ) ERC20("AXONN", "AXN") Ownable(msg.sender) {
        require(
            _LiquidityWalletAddress != address(0),
            "Invalid creator address"
        );

        require(_preSaleWalletAddress != address(0), "Invalid Presale address");

        LiquidityWalletAddress = _LiquidityWalletAddress;
        preSaleWalletAddress = _preSaleWalletAddress;
        PayoutApprover = msg.sender;

        airDropExchangeCntAddr = IAirDropnExchangeCNT(_airDropExchangeCntAddr);
        rewardsTokensCntAddr = IRewardsTokensCNT(_rewardsTokensCntAddr);

        communityDevelopmentCNTAddr = IcommunityDevelopmentCNT(
            _communityDevelopmentCNTAddr
        );

        CreatorTokensCNTAddr = ICreatorTokensCNT(_CreatorTokensCNTAddr);
        CommunityIncentiveCNTAddr = ICommunityIncentiveCNT(
            _CommunityIncentiveCNTAddr
        );

        CakeLockerCntAddr = ICakeLockerCNT(_CakeLockerCntAddr);

        _mint(address(this), _totalSupply);

        _transfer(address(this), LiquidityWalletAddress, liquidityPoolTokens);

        _transfer(address(this), preSaleWalletAddress, preSaleTokens);
        _transfer(
            address(this),
            address(airDropExchangeCntAddr),
            airDropnExchangeTokens
        );
        _transfer(address(this), address(rewardsTokensCntAddr), rewardsTokens);
        _transfer(address(this), address(CreatorTokensCNTAddr), creatorTokens);
        _transfer(
            address(this),
            address(CommunityIncentiveCNTAddr),
            communityIncentiveTokens
        );
        _transfer(
            address(this),
            address(communityDevelopmentCNTAddr),
            communityDevelopmentTokens
        );

        isInitialDeploy = true;
        ///// uncomment in prodd
        lastCakeRelease = block.timestamp + (CakeReleaseSpan * 4);
        lastCreatorRelease = block.timestamp;
        lastDevelopmentRelease = block.timestamp;
        lastAirdropRelease = block.timestamp;
        lastRewardsRelease = block.timestamp;
    }

    function setAddresses(
        address _communityDevelopmentAddr,
        address _CreatorTokensAddr,
        address _airDropExchangeReleaseWallet,
        address _rewardsReleaseWallet,
        address _CakeReleaseWallet
    ) public onlyOwner {
        require(isInitialDeploy, "Initial deployment already completed");
        require(
            _communityDevelopmentAddr != address(0),
            "Invalid community development address"
        );
        require(
            _CreatorTokensAddr != address(0),
            "Invalid creator tokens address"
        );

        require(
            _airDropExchangeReleaseWallet != address(0),
            "Invalid airDropExchangeReleaseWallet"
        );

        require(
            _rewardsReleaseWallet != address(0),
            "Invalid rewardsReleaseWallet"
        );

        require(_CakeReleaseWallet != address(0), "Invalid CakeReleaseWallet");

        CommunityDevelopmentWallet = _communityDevelopmentAddr;
        CreatorTokensWallet = _CreatorTokensAddr;
        airDropExchangeReleaseWallet = _airDropExchangeReleaseWallet;
        rewardsReleaseWallet = _rewardsReleaseWallet;
        CakeReleaseWallet = _CakeReleaseWallet;

        // Disable further updates
        isInitialDeploy = false;
    }

    function releaseAirdropTokens() external {
        require(
            lastAirdropRelease == 0 ||
                block.timestamp >= lastAirdropRelease + TokenReleaseSpan,
            "Monthly release not available yet"
        );

        require(
            airDropnExchangeTokens > 0,
            "All Airdrop tokens have been released"
        );

        uint256 amountToRelease = (airDropnExchangeTokens *
            AirdropTokensReleaseRate) / PERCENT_DIVISOR;

        if (amountToRelease > airDropnExchangeTokens) {
            amountToRelease = airDropnExchangeTokens;
        }

        airDropnExchangeTokens -= amountToRelease;

        airDropExchangeCntAddr.send(
            airDropExchangeReleaseWallet,
            AirdropTokensReleaseRate
        );
        lastAirdropRelease = block.timestamp;
    }

    function releaseRewardsTokens() external {
        require(
            lastRewardsRelease == 0 ||
                block.timestamp >= lastRewardsRelease + TokenReleaseSpan,
            "Monthly release not available yet"
        );

        require(rewardsTokens > 0, "All Rewards tokens have been released");

        uint256 amountToRelease = (rewardsTokens * RewardsTokeReleaseRate) /
            PERCENT_DIVISOR;

        if (amountToRelease > rewardsTokens) {
            amountToRelease = rewardsTokens;
        }

        rewardsTokens -= amountToRelease;
        rewardsTokensCntAddr.send(rewardsReleaseWallet, RewardsTokeReleaseRate);
        lastRewardsRelease = block.timestamp;
    }

    function releaseCreatorTokens() external {
        require(
            lastCreatorRelease == 0 ||
                block.timestamp >= lastCreatorRelease + TokenReleaseSpan,
            "Monthly release not available yet"
        );

        require(creatorTokens > 0, "All creator tokens have been released");
        // uint256 amountToReleaseRate = 3;
        uint256 amountToRelease = (creatorTokens * creatorMonthlyReleasePerc) /
            PERCENT_DIVISOR;

        if (amountToRelease > creatorTokens) {
            amountToRelease = creatorTokens;
        }

        creatorTokens -= amountToRelease;
        CreatorTokensCNTAddr.send(
            CreatorTokensWallet,
            creatorMonthlyReleasePerc
        );
        lastCreatorRelease = block.timestamp;
    }

    function releaseCakeTokens() external {
        require(
            lastCakeRelease == 0 ||
                block.timestamp >= lastCakeRelease + CakeReleaseSpan,
            "Yearly release not available yet"
        );

        //Realse Yearly 20% Of Lockbox
        uint256 amountToReleaseRate = CakeTokensReleaseCount < 5
            ? CakeTokensReleasePerc
            : 100;
        CakeLockerCntAddr.send(CakeReleaseWallet, amountToReleaseRate);
        CakeTokensReleaseCount = CakeTokensReleaseCount + 1;
        lastCakeRelease = block.timestamp;
    }

    function releaseDevelopmentTokens() external {
        require(
            lastDevelopmentRelease == 0 ||
                block.timestamp >= lastDevelopmentRelease + TokenReleaseSpan,
            "Monthly release not available yet"
        );

        require(
            communityDevelopmentTokens > 0,
            "All development tokens have been released"
        );

        uint256 amountToRelease = (communityDevelopmentTokens *
            DevelopmentTokensReleaseRate) / PERCENT_DIVISOR;

        // uint256 amountToRelease = developmentMonthlyReleaseRate;

        if (amountToRelease > communityDevelopmentTokens) {
            amountToRelease = communityDevelopmentTokens;
        }

        communityDevelopmentTokens -= amountToRelease;

        communityDevelopmentCNTAddr.send(
            CommunityDevelopmentWallet,
            DevelopmentTokensReleaseRate
        );
        lastDevelopmentRelease = block.timestamp;
    }

    function setPancakeSwapV2Pair(
        address _router,
        address _pancakeSwapV2Pair,
        address _USDTAddress
    ) external onlyOwner {
        require(_pancakeSwapV2Pair != address(0), "Invalid pair address");
        require(_router != address(0), "Invalid Router address");

        pancakeSwapV2Pair = _pancakeSwapV2Pair;
        router = IPancakeRouter02(_router);
        USDTAddress = IERC20Detailed(_USDTAddress);
    }

    function GetSellableAmt(address _user) public view returns (uint256) {
        uint256 limit = sellableLimit[_user];

        if (limit == 0) {
            limit = (balanceOf(_user) / PERCENT_DIVISOR);
            if (limit > MaxSaleTokensInSpanOther) {
                limit = MaxSaleTokensInSpanOther;
            }
        } else if (limit > MaxSaleTokensInSpan) {
            limit = MaxSaleTokensInSpan;
        }
        return limit;
    }

    function sendCommunityIncentiveTokens(address recipient, uint256 amount)
        external
    {
        require(msg.sender == PayoutApprover, "APPROVER ONLY");
        require(
            amount <= communityIncentiveTokens,
            "Insufficient Community Incentive Tokens"
        );
        require(recipient != address(0), "Invalid recipient address");

        require(
            balanceOf(recipient) == 0,
            "Recipient must have zero token balance"
        );

        communityIncentiveTokens -= amount;
        CommunityIncentiveCNTAddr.send(recipient, amount);
        sellableLimit[recipient] = amount;
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        // Apply sell restrictions only if transferring to the PancakeSwap pair
        bool BurnIt = (from != address(this) && to != address(this));
        uint256 burnAmount = BurnIt ? amount / 2000 : 0; // 0.05%
        uint256 sendAmount = amount - burnAmount;

        if (
            // !paused() &&
            from != address(this) &&
            // from != CommunityDevelopmentWallet &&
            // from != CreatorTokensWallet &&
            // from != LiquidityWalletAddress &&
            // from != address(communityDevelopmentCNTAddr) &&
            // from != address(CreatorTokensCNTAddr) &&
            from != address(CommunityIncentiveCNTAddr)
        ) {
            require(
                lastSellTime[from] == 0 ||
                    block.timestamp >= lastSellTime[from] + SaleSpan,
                "You can only transfer, Sale after 24 hours of sale"
            );

            if (userAddingliquidity[from] == false && to == pancakeSwapV2Pair) {
                uint256 limit = sellableLimit[from];

                if (limit == 0) {
                    limit = (balanceOf(from) / PERCENT_DIVISOR);
                    if (limit > MaxSaleTokensInSpanOther) {
                        limit = MaxSaleTokensInSpanOther;
                    }
                } else if (limit > MaxSaleTokensInSpan) {
                    limit = MaxSaleTokensInSpan;
                }

                require(limit > 0, "You cannot sell any tokens");

                require(
                    amount <= limit,
                    "Sell amount exceeds your sellable limit"
                );

                if (sellableLimit[from] > 0) {
                    sellableLimit[from] = (sellableLimit[from] > amount)
                        ? sellableLimit[from] - amount
                        : 0;
                } else {
                    sellableLimit[from] = 0;
                }

                lastSellTime[from] = block.timestamp;
                // Burn 0.05% of the amount
                BurnIt = true;
                burnAmount = BurnIt ? amount / 2000 : 0; // 0.05%
                sendAmount = amount - burnAmount;
            }

            // If tokens are transferred from a wallet with a specific sellable limit,
            // reset the sellable limit for the recipient to 1% of their wallet balance
            if (sellableLimit[from] > 0 && to != pancakeSwapV2Pair) {
                sellableLimit[from] = 0;
            }
        }

        if (burnAmount > 0) {
            super._update(
                from,
                // address(CakeLockerCntAddr),
                BURN_ADDRESS,
                burnAmount
            );
        }

        super._update(from, to, sendAmount);
    }

    function addLiquidity(
        uint256 tokenAmount,
        uint256 usdtAmount,
        uint256 tokenAmountMin,
        uint256 usdtAmountMin,
        uint256 deadline
    ) public nonReentrant returns (uint256) {
        // Mark the user as adding liquidity
        IERC20 ThisToken = IERC20(address(this));
        userAddingliquidity[msg.sender] = true;
        // Validate input amounts
        require(tokenAmount > 0, "Token amount must be greater than 0");
        require(usdtAmount > 0, "USDT amount must be greater than 0");

        // Transfer tokens from the user to the contract
        IERC20(address(ThisToken)).transferFrom(
            msg.sender,
            address(this),
            tokenAmount
        );

        USDTAddress.safeTransferFrom(msg.sender, address(this), usdtAmount);

        // Approve the router to spend the tokens
        IERC20(address(this)).approve(address(router), tokenAmount);
        USDTAddress.approve(address(router), usdtAmount);

        // Add liquidity via the router
        (uint256 amountA, uint256 amountB, uint256 liquidity) = router
            .addLiquidity(
                address(this), // This token
                address(USDTAddress),
                tokenAmount,
                usdtAmount,
                tokenAmountMin,
                usdtAmountMin,
                address(CakeLockerCntAddr), // msg.sender,
                deadline
            );

        // Unmark the user as adding liquidity
        userAddingliquidity[msg.sender] = false;

        // Handle any remaining tokens

        if (tokenAmount > amountA) {
            uint256 remainingToken = tokenAmount - amountA;
            _transfer(address(this), msg.sender, remainingToken);
        }
        if (usdtAmount > amountB) {
            uint256 remainingUSDT = usdtAmount - amountB;
            USDTAddress.safeTransfer(msg.sender, remainingUSDT);
        }
        return liquidity;
    }
}

interface IcommunityDevelopmentCNT {
    function send(address _user, uint256 _amt) external payable;
}

interface ICreatorTokensCNT {
    function send(address _user, uint256 _amt) external payable;
}

interface ICommunityIncentiveCNT {
    function send(address _user, uint256 _amt) external payable;
}

interface ICakeLockerCNT {
    function send(address _user, uint256 _amt) external payable;
}

interface IAirDropnExchangeCNT {
    function send(address _user, uint256 _amt) external payable;
}

interface IRewardsTokensCNT {
    function send(address _user, uint256 _amt) external payable;
}

File 2 of 16 : IERC20Detailed.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IERC20Detailed is IERC20 {
    function name() external view returns (string memory);
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

import "./IPancakeRouter1.sol";

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
 * consider using {ReentrancyGuardTransient} instead.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";
import {IERC1363} from "../../../interfaces/IERC1363.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC-20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    /**
     * @dev An operation with an ERC-20 token failed.
     */
    error SafeERC20FailedOperation(address token);

    /**
     * @dev Indicates a failed `decreaseAllowance` request.
     */
    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

    /**
     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     */
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    /**
     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
     */
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
    }

    /**
     * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.
     */
    function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {
        return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));
    }

    /**
     * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.
     */
    function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {
        return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));
    }

    /**
     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     *
     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
     * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
     */
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        forceApprove(token, spender, oldAllowance + value);
    }

    /**
     * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
     * value, non-reverting calls are assumed to be successful.
     *
     * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
     * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
     * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
     * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
     */
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
        unchecked {
            uint256 currentAllowance = token.allowance(address(this), spender);
            if (currentAllowance < requestedDecrease) {
                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
            }
            forceApprove(token, spender, currentAllowance - requestedDecrease);
        }
    }

    /**
     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
     * to be set to zero before setting it to a non-zero value, such as USDT.
     *
     * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
     * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
     * set here.
     */
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
            _callOptionalReturn(token, approvalCall);
        }
    }

    /**
     * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * Reverts if the returned value is other than `true`.
     */
    function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
        if (to.code.length == 0) {
            safeTransfer(token, to, value);
        } else if (!token.transferAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
     * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * Reverts if the returned value is other than `true`.
     */
    function transferFromAndCallRelaxed(
        IERC1363 token,
        address from,
        address to,
        uint256 value,
        bytes memory data
    ) internal {
        if (to.code.length == 0) {
            safeTransferFrom(token, from, to, value);
        } else if (!token.transferFromAndCall(from, to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
     * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
     * targeting contracts.
     *
     * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
     * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
     * once without retrying, and relies on the returned value to be true.
     *
     * Reverts if the returned value is other than `true`.
     */
    function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
        if (to.code.length == 0) {
            forceApprove(token, to, value);
        } else if (!token.approveAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     *
     * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
            // bubble errors
            if iszero(success) {
                let ptr := mload(0x40)
                returndatacopy(ptr, 0, returndatasize())
                revert(ptr, returndatasize())
            }
            returnSize := returndatasize()
            returnValue := mload(0)
        }

        if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     *
     * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.
     */
    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        bool success;
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
            returnSize := returndatasize()
            returnValue := mload(0)
        }
        return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * Both values are immutable: they can only be set once during construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IPancakeRouter01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC165} from "./IERC165.sol";

/**
 * @title IERC1363
 * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
 *
 * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
 * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
 */
interface IERC1363 is IERC20, IERC165 {
    /*
     * Note: the ERC-165 identifier for this interface is 0xb0202a11.
     * 0xb0202a11 ===
     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^
     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
     */

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferAndCall(address to, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @param data Additional data with no specified format, sent in call to `to`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param from The address which you want to send tokens from.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferFromAndCall(address from, address to, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
     * and then calls {IERC1363Receiver-onTransferReceived} on `to`.
     * @param from The address which you want to send tokens from.
     * @param to The address which you want to transfer to.
     * @param value The amount of tokens to be transferred.
     * @param data Additional data with no specified format, sent in call to `to`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function approveAndCall(address spender, uint256 value) external returns (bool);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     * @param data Additional data with no specified format, sent in call to `spender`.
     * @return A boolean value indicating whether the operation succeeded unless throwing.
     */
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 14 of 16 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../utils/introspection/IERC165.sol";

File 15 of 16 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../token/ERC20/IERC20.sol";

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_LiquidityWalletAddress","type":"address"},{"internalType":"address","name":"_preSaleWalletAddress","type":"address"},{"internalType":"address","name":"_airDropExchangeCntAddr","type":"address"},{"internalType":"address","name":"_rewardsTokensCntAddr","type":"address"},{"internalType":"address","name":"_communityDevelopmentCNTAddr","type":"address"},{"internalType":"address","name":"_CreatorTokensCNTAddr","type":"address"},{"internalType":"address","name":"_CommunityIncentiveCNTAddr","type":"address"},{"internalType":"address","name":"_CakeLockerCntAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AirdropTokensReleaseRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CakeReleaseWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CakeTokensReleaseCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CakeTokensReleasePerc","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CommunityDevelopmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CreatorTokensWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevelopmentTokensReleaseRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"GetSellableAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSaleTokensInSpan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSaleTokensInSpanOther","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_DIVISOR","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RewardsTokeReleaseRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTAddress","outputs":[{"internalType":"contract IERC20Detailed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmountMin","type":"uint256"},{"internalType":"uint256","name":"usdtAmountMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDropExchangeReleaseWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airDropnExchangeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityDevelopmentTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityIncentiveTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorMonthlyReleasePerc","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAirdropRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCakeRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCreatorRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDevelopmentRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardsRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSellTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSwapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseAirdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseCakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseCreatorTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseDevelopmentTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseRewardsTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsReleaseWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellableLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendCommunityIncentiveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communityDevelopmentAddr","type":"address"},{"internalType":"address","name":"_CreatorTokensAddr","type":"address"},{"internalType":"address","name":"_airDropExchangeReleaseWallet","type":"address"},{"internalType":"address","name":"_rewardsReleaseWallet","type":"address"},{"internalType":"address","name":"_CakeReleaseWallet","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pancakeSwapV2Pair","type":"address"},{"internalType":"address","name":"_USDTAddress","type":"address"}],"name":"setPancakeSwapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userAddingliquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60803462000a1657601f6200370e38819003918201601f191683019291906001600160401b03841183851017620008e85781610100928492604096875283398101031262000a1657620000528162000a3b565b90620000616020820162000a3b565b906200006f84820162000a3b565b916200007e6060830162000a3b565b916200008d6080820162000a3b565b6200009b60a0830162000a3b565b90620000b860e0620000b060c0860162000a3b565b940162000a3b565b94620000c362000a1b565b600581526420ac27a72760d91b6020820152620000df62000a1b565b600381526220ac2760e91b6020820152815190916001600160401b038211620008e85760035490600182811c9216801562000a0b575b6020831014620008c75781601f84931162000999575b50602090601f83116001146200090a57600092620008fe575b50508160011b916000199060031b1c1916176003555b8051906001600160401b038211620008e85760045490600182811c92168015620008dd575b6020831014620008c75781601f84931162000855575b50602090601f8311600114620007ca57600092620007be575b50508160011b916000199060031b1c1916176004555b3315620007a657600580546001600160a01b0319808216339081179093558b516001600160a01b039a9198919390928b167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a360016006556934f086f3b33b684000008060185569d3c21bcecceda10000006019556969e10de76676d0800000601a5580601b55601c5561ffff19601d5416601d556000602155600060225560006023558960249b60008d55600060255516918215620007655750891690811562000722579389809795948180989581979582968d600d541617600d558c600e541617600e55338c6014541617601455168a600b541617600b551688600c541617600c5516866007541617600755168460085416176008551692838360095416176009551690600a541617600a5530156200070b5760006a0211654585005212800000916200047c575b9081620003df939262000437575b506200032e8160025462000a50565b6002553060005260006020528460002081815401905584519081526000600080516020620036ee83398151915260203093a36200037081600d54163062000a74565b6200038081600e54163062000a74565b6200039481600b5416601b54903062000dd2565b620003a881600c5416601c54903062000dd2565b620003bc8160085416601854903062000dd2565b620003d08160095416601954903062000dd2565b60075416601a54903062000dd2565b6017805460ff60a01b1916600160a01b17905542630784ce00810190811062000422576023554260215542602255429055426025555161244390816200124b8239f35b50634e487b7160e01b60009081526011600452fd5b620004458160025462000a50565b6002556000600080516020620036ee833981519152602061dead938484528382528984208181540190558951908152a3386200031f565b808052601e602052848120548015908115620006de575b501562000691578080526020805260ff8582205416158062000683575b620004fc575b90620003df9291601f602052856000208054151580620004ed575b620004e2575b509091925062000311565b6000905538620004d7565b508360155416301415620004d1565b90601f6020528482205480156000146200066157508160205260648583205404678ac7230489e8000080821162000658575b505b801562000626578111620005e457818052601f602052848220805415620005d4575490811115620005c6576a02116545850052127fffff198101908111620005b35790620003df92915b818052601f602052858220555b808052601e60205284429120556843c33c1937564800006a0211218248e71abc380000919250620004b6565b634e487b7160e01b825260116004528382fd5b509081620003df926200057a565b82905550620003df919062000587565b845162461bcd60e51b815260206004820152602781860152600080516020620036ce83398151915260448201526619481b1a5b5a5d60ca1b6064820152608490fd5b855162461bcd60e51b815260206004820152601a818701526000805160206200368e8339815191526044820152606490fd5b9050386200052e565b6729a2241af62c00008082116200067a575b5062000530565b90503862000673565b5082601554163014620004b0565b845162461bcd60e51b815260206004820152603281860152600080516020620036ae8339815191526044820152717220323420686f757273206f662073616c6560701b6064820152608490fd5b9050620151808101809111620006f8574210153862000493565b634e487b7160e01b825260116004528482fd5b835163ec442f0560e01b8152600060048201528390fd5b8b5162461bcd60e51b8152602060048201526017818d01527f496e76616c69642050726573616c6520616464726573730000000000000000006044820152606490fd5b62461bcd60e51b81526020600482015260178c8201527f496e76616c69642063726561746f7220616464726573730000000000000000006044820152606490fd5b8851631e4fbdf760e01b815260006004820152602490fd5b015190503880620001ae565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9350601f198516905b8181106200083c575090846001959493921062000822575b505050811b01600455620001c4565b015160001960f88460031b161c1916905538808062000813565b92936020600181928786015181550195019301620007fb565b60046000529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810160208510620008bf575b90849392915b601f830160051c82018110620008af57505062000195565b6000815585945060010162000897565b508062000891565b634e487b7160e01b600052602260045260246000fd5b91607f16916200017f565b634e487b7160e01b600052604160045260246000fd5b01519050388062000144565b6003600090815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91905b601f19841685106200097d576001945083601f1981161062000963575b505050811b016003556200015a565b015160001960f88460031b161c1916905538808062000954565b8181015183556020948501946001909301929091019062000937565b60036000529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81016020851062000a03575b90849392915b601f830160051c82018110620009f35750506200012b565b60008155859450600101620009db565b5080620009d5565b91607f169162000115565b600080fd5b60408051919082016001600160401b03811183821017620008e857604052565b51906001600160a01b038216820362000a1657565b9190820180921162000a5e57565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039181831691821562000db95783821692831562000da0573081141593848062000d95575b1562000d8c576803635c9adc5dea0000955b8692691a784379d99db420000097880388811162000a5e57968062000d7d575b62000b04575b50505062000aef94508062000af1575b506200117c565b565b62000afd9082620010da565b3862000ae8565b80600052602097601e89526040918260002054801590811562000d63575b501562000d15578060005289805260ff836000205416158062000d07575b62000b8b575b5050601f62000aef98526000209182541515918262000b7b575b505062000b70575b808062000ad8565b600090553862000b68565b6015541614159050388062000b60565b919450979650601f87528360002054801560001462000ce55750600087526064846000205404678ac7230489e8000080821162000cdc575b505b801562000ca957881162000c66576000818152601f885284902080541562000c5657549788111562000c4857691a784379d99db41fffff19880197881162000a5e5762000aef975b81600052601f885284600020555b600052601e86524283600020556803635c9adc5dea000092601f691a74e01d3ec156360000979862000b46565b62000aef9750600062000c0d565b62000aef98506000905562000c1b565b835162461bcd60e51b81526004810188905260276024820152600080516020620036ce83398151915260448201526619481b1a5b5a5d60ca1b6064820152608490fd5b845162461bcd60e51b815260048101899052601a60248201526000805160206200368e8339815191526044820152606490fd5b90503862000bc3565b6729a2241af62c000080821162000cfe575b5062000bc5565b90503862000cf7565b508360155416851462000b40565b825162461bcd60e51b8152600481018b905260326024820152600080516020620036ae8339815191526044820152717220323420686f757273206f662073616c6560701b6064820152608490fd5b905062015180810180911162000a5e574210153862000b22565b50816009541681141562000ad2565b60009562000ab2565b503081141562000aa0565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b9192916001600160a01b039190828116801562000db957838316801562000da05730821415948580620010c1575b15620010b8576107d08804925b62000e19848a620010cc565b9680620010a9575b62000e3e575b50505062000aef9495508062000af157506200117c565b80600052602090601e82526040998a6000205480159081156200108f575b501562001041578160005282805260ff8b6000205416158062001033575b62000ecb575b5062000aef989991601f91600052526000209182541515918262000ebb575b505062000eb0575b86958162000e27565b600090553862000ea7565b6015541614159050388062000e9f565b94509650601f815288600020548015600014620010115750600081526064896000205404678ac7230489e8000080821162001008575b505b801562000fd557841162000f935797601f62000aef989988600052818152826000208054151560001462000f895754868082111562000f7f5762000f4791620010cc565b8960005282825283600020555b88600052601e815242836000205562000f736107d087048097620010cc565b98915091999862000e80565b5050600062000f47565b6000905562000f54565b60849089519062461bcd60e51b8252600482015260276024820152600080516020620036ce83398151915260448201526619481b1a5b5a5d60ca1b6064820152fd5b895162461bcd60e51b815260048101839052601a60248201526000805160206200368e8339815191526044820152606490fd5b90503862000f01565b6729a2241af62c00008082116200102a575b5062000f03565b90503862001023565b508360155416851462000e7a565b8a5162461bcd60e51b81526004810184905260326024820152600080516020620036ae8339815191526044820152717220323420686f757273206f662073616c6560701b6064820152608490fd5b905062015180810180911162000a5e574210153862000e5c565b50816009541681141562000e21565b60009262000e0d565b503082141562000e00565b9190820391821162000a5e57565b6001600160a01b0316806200112d57620010f78260025462000a50565b6002555b600080516020620036ee833981519152602061dead9384600052600082526040600020818154019055604051908152a3565b60008181528060205260408120548381106200115857836040918484528360205203912055620010fb565b60649391506040519263391434e360e21b8452600484015260248301526044820152fd5b6001600160a01b039081169182620011e757600080516020620036ee83398151915291602091620011b08660025462000a50565b6002555b169384620011ce5780600254036002555b604051908152a3565b84600052600082526040600020818154019055620011c5565b60008381528060205260408120548581106200122657918160408760209588600080516020620036ee83398151915298965283875203912055620011b4565b84866064926040519263391434e360e21b8452600484015260248301526044820152fdfe608060408181526004918236101561001657600080fd5b600092833560e01c91826306fdde0314611c4257508163095ea7b314611b985781630fe83bb81461079a57816312053eb414611a2f57816318160ddd14611a105781631a45385d146119e757816323b872dd146118ee5781632a5abb39146118cf5781632cabd85a146118a6578163313ce5671461188a57816332424aa31461186757816333ea62dc1461184b57816337c4575b1461171f578163398bf797146116fc5781633eaaf86b146116d657816343d6080a1461169e5781634870dd9a146116825781634a6194b51461105f578163582475331461105f5781635bbc7ae7146116595781635dd68acd146113cb57816362d5da551461138e578163641fc9ce1461124e5781636775d298146112255781636e45be57146110f957816370a08231146110c2578163715018a61461106457816375b88ca11461105f5781637afbeba314611036578163802a1a75146110175781638202c88414610ff85781638da5cb5b14610fcf57816394b55ba214610fac57816395d89b4114610ea757816396b74ffa14610e7e5781639a714b8214610c7b578163a360501c1461088e578163a686be621461086f578163a88f02a014610850578163a9059cbb1461081f578163ad4786f614610800578163b44b4b80146107c8578163b61a95391461079f578163b75fdf3a1461079a578163ba9ee7e91461077b578163bce28c5e1461075f578163bd36ccb814610740578163bd59088a1461071d578163c78465f514610628578163cd00671b14610609578163d67c2c9c146105e0578163d911551e14610477578163dd62ed3e14610429578163f2d582fb1461040a578163f2fde38b1461037a57508063f887ea4014610352578063feee4721146102ce5763ff920c74146102a357600080fd5b346102ca57816003193601126102ca5760175490516001600160a01b039091168152602090f35b5080fd5b50346102ca5760203660031901126102ca576020916001600160a01b036102f3611d7c565b168152601f8352818120548061033057508181606492855220540490678ac7230489e80000808311610328575b505b51908152f35b915038610320565b9190506729a2241af62c000080831161034a575b50610322565b915038610344565b50346102ca57816003193601126102ca5760165490516001600160a01b039091168152602090f35b90503461040657602036600319011261040657610395611d7c565b9061039e612379565b6001600160a01b039182169283156103f0575050600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b5050346102ca57816003193601126102ca576020906019549051908152f35b5050346102ca57806003193601126102ca57602091610446611d7c565b8261044f611d92565b6001600160a01b03928316845260018652922091166000908152908352819020549051908152f35b839150346102ca57816003193601126102ca57602254801580156105b3575b6104a09150611e77565b601a54801561055e57926104c88460646104ba8697611dbe565b049080821161055657611ecd565b601a55600754600f546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af19081156105495750610532575b504260225580f35b61053b90611e2b565b61054657808261052a565b80fd5b513d84823e3d90fd5b8480fd5b905080611ecd565b835162461bcd60e51b8152602081840152602960248201527f416c6c20646576656c6f706d656e7420746f6b656e732068617665206265656e604482015268081c995b19585cd95960ba1b6064820152608490fd5b5062278d0081018091116105cd576104a090421015610496565b634e487b7160e01b835260118252602483fd5b5050346102ca57816003193601126102ca57600e5490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca57602090601c549051908152f35b9190503461040657606036600319011261040657610644611d7c565b9161064d611d92565b91610656611da8565b9161065f612379565b6001600160a01b039384169485156106e35784169182156106a75750506001600160601b0360a01b938460155416176015558360165416176016551690601754161760175580f35b906020606492519162461bcd60e51b83528201526016602482015275496e76616c696420526f75746572206164647265737360501b6044820152fd5b506020606492519162461bcd60e51b83528201526014602482015273496e76616c69642070616972206164647265737360601b6044820152fd5b5050346102ca57816003193601126102ca57602090516729a2241af62c00008152f35b5050346102ca57816003193601126102ca576020906025549051908152f35b5050346102ca57816003193601126102ca576020905160148152f35b5050346102ca57816003193601126102ca57602090601b549051908152f35b611dea565b5050346102ca57816003193601126102ca5760155490516001600160a01b039091168152602090f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036107f0611d7c565b168152601e845220549051908152f35b5050346102ca57816003193601126102ca576020906021549051908152f35b5050346102ca57806003193601126102ca5760209061084961083f611d7c565b6024359033611ef2565b5160018152f35b5050346102ca57816003193601126102ca576020906024549051908152f35b5050346102ca57816003193601126102ca576020906022549051908152f35b8383346102ca5760a03660031901126102ca578235602490813591600260065414610c6b5760026006553385526020958680528486209560ff19966001888254161790558315610c1e578415610bd25785516323b872dd60e01b8082523384830190815230602082015260408101879052909291908a9082908190606001038185305af18015610b4d57610bb5575b5060175487518a81019390935233858401908152306020820152604081018890526001600160a01b03969187169361096d9181906060010394610968601f1996878101845283611e55565b6123a5565b601654885163095ea7b360e01b8082529188166001600160a01b0316868201908152602081018490528c9082908190604001038187305af18015610bab576109ee928d928b92610b8e575b508b868b60175416928c6016541692519687958694859384528d840160209093929193604081019460018060a01b031681520152565b03925af18015610b8457610b57575b506060866016541694610104886017541691858a600a5416988d51998a95869462e8e33760e81b865230908601528c8501528760448501528d6064850152604435608485015260643560a485015260c484015260843560e48401525af1988915610b4d57828095819b610b05575b5089903381528c805220908154169055818111610aea575b5050818511610a9b575b878787600160065551908152f35b610aab61096892610ae096611ecd565b601754875163a9059cbb60e01b8b82015233958101958652602086019290925290941692849060400103908101845283611e55565b8380808080610a8d565b610afe91610af791611ecd565b3330611ef2565b8880610a83565b9350995093506060823d606011610b45575b81610b2460609383611e55565b81010312610b415781518a83015192890151999294909289610a6b565b8880fd5b3d9150610b17565b88513d84823e3d90fd5b610b76908b3d8d11610b7d575b610b6e8183611e55565b810190611eda565b508a6109fd565b503d610b64565b89513d85823e3d90fd5b610ba490843d8611610b7d57610b6e8183611e55565b508e6109b8565b8a513d86823e3d90fd5b610bcb908a3d8c11610b7d57610b6e8183611e55565b508961091d565b5060226084928887519362461bcd60e51b85528401528201527f5553445420616d6f756e74206d7573742062652067726561746572207468616e604482015261020360f41b6064820152fd5b5060236084928887519362461bcd60e51b85528401528201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152fd5b8351633ee5aeb560e01b81528690fd5b91905034610406578060031936011261040657610c96611d7c565b601454602435936001600160a01b0392909183163303610e4b5760195492838611610df857808216938415610db5578488528760205285882054610d635790610ce28789959493611ecd565b6019556009541691823b15610d55578551633419e74d60e21b81526001600160a01b03909216908201908152602081018790529091839183919082908490829060400103925af18015610d5957610d41575b5052601f60205282205580f35b610d4a90611e2b565b610d55578338610d34565b8380fd5b84513d84823e3d90fd5b855162461bcd60e51b8152602081860152602660248201527f526563697069656e74206d7573742068617665207a65726f20746f6b656e2062604482015265616c616e636560d01b6064820152608490fd5b855162461bcd60e51b8152602081860152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606490fd5b845162461bcd60e51b8152602081850152602760248201527f496e73756666696369656e7420436f6d6d756e69747920496e63656e7469766560448201526620546f6b656e7360c81b6064820152608490fd5b835162461bcd60e51b8152602081840152600d60248201526c415050524f564552204f4e4c5960981b6044820152606490fd5b5050346102ca57816003193601126102ca5760135490516001600160a01b039091168152602090f35b8383346102ca57816003193601126102ca5780519180938054916001908360011c9260018516948515610fa2575b6020958686108114610f8f57858952908115610f6b5750600114610f13575b610f0f8787610f05828c0383611e55565b5191829182611d33565b0390f35b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610f585750505082610f0f94610f0592820101948680610ef4565b8054868501880152928601928101610f3a565b60ff19168887015250505050151560051b8301019250610f0582610f0f8680610ef4565b634e487b7160e01b845260228352602484fd5b93607f1693610ed5565b5050346102ca57816003193601126102ca5760209061ffff601d54169051908152f35b5050346102ca57816003193601126102ca5760055490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca57602090601a549051908152f35b5050346102ca57816003193601126102ca576020906018549051908152f35b5050346102ca57816003193601126102ca57600d5490516001600160a01b039091168152602090f35b611e0f565b833461054657806003193601126105465761107d612379565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036110ea611d7c565b16815280845220549051908152f35b839150346102ca57816003193601126102ca576025548015801561120b575b6111229150611e77565b601c5480156111ba579261113c8460646104ba8697611dbe565b601c55600c546012546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af190811561054957506111a6575b504260255580f35b6111af90611e2b565b61054657808261119e565b835162461bcd60e51b8152602081840152602560248201527f416c6c205265776172647320746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152608490fd5b5062278d0081018091116105cd5761112290421015611118565b5050346102ca57816003193601126102ca5760125490516001600160a01b039091168152602090f35b839150346102ca57816003193601126102ca5760215480158015611374575b6112779150611e77565b601854928315611323576003840284810460030361130e57839460646112a592049080821161055657611ecd565b6018556008546010546001600160a01b03918216939116833b1561055257604485928385519687948593633419e74d60e21b8552840152600360248401525af190811561054957506112fa575b504260215580f35b61130390611e2b565b6105465780826112f2565b601183634e487b7160e01b6000525260246000fd5b906020608492519162461bcd60e51b8352820152602560248201527f416c6c2063726561746f7220746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152fd5b5062278d0081018091116105cd576112779042101561126d565b5050346102ca5760203660031901126102ca5760209160ff9082906001600160a01b036113b9611d7c565b16815284805220541690519015158152f35b9050346104065760a0366003190112610406576113e6611d7c565b916113ef611d92565b906113f8611da8565b6001600160a01b03936064803586811694939290859003611654576084359680881680980361165457611429612379565b6017549860ff8a60a01c16156116065781169687156115b657811693841561157457169384156115275785156114e75787156114a7575050506001600160601b0360a01b9384600f541617600f55836010541617601055826011541617601155816012541617601255601354161760135560ff60a01b191660175580f35b602090519162461bcd60e51b8352820152601960248201527f496e76616c69642043616b6552656c6561736557616c6c6574000000000000006044820152fd5b602090519162461bcd60e51b8352820152601c60248201527f496e76616c6964207265776172647352656c6561736557616c6c6574000000006044820152fd5b6084926020631b1b195d60e21b92519362461bcd60e51b85528401526024808401527f496e76616c69642061697244726f7045786368616e676552656c6561736557616044840152820152fd5b5050602084519162461bcd60e51b8352820152601e60248201527f496e76616c69642063726561746f7220746f6b656e73206164647265737300006044820152fd5b855162461bcd60e51b8152602081850152602560248201527f496e76616c696420636f6d6d756e69747920646576656c6f706d656e74206164604482015264647265737360d81b81860152608490fd5b855162461bcd60e51b81526020818501526024808201527f496e697469616c206465706c6f796d656e7420616c726561647920636f6d706c604482015263195d195960e21b81860152608490fd5b600080fd5b5050346102ca57816003193601126102ca57600f5490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020905160648152f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036116c6611d7c565b168152601f845220549051908152f35b5050346102ca57816003193601126102ca57602090516a02116545850052128000008152f35b5050346102ca57816003193601126102ca5760209051678ac7230489e800008152f35b839150346102ca57816003193601126102ca5760245480158015611831575b6117489150611e77565b601b5480156117e057926117628460646104ba8697611dbe565b601b55600b546011546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af190811561054957506117cc575b504260245580f35b6117d590611e2b565b6105465780826117c4565b835162461bcd60e51b8152602081840152602560248201527f416c6c2041697264726f7020746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152608490fd5b5062278d0081018091116105cd576117489042101561173e565b5050346102ca57816003193601126102ca576020905160038152f35b5050346102ca57816003193601126102ca5760209051670de0b6b3a76400008152f35b5050346102ca57816003193601126102ca576020905160128152f35b5050346102ca57816003193601126102ca5760115490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020906023549051908152f35b839150346102ca5760603660031901126102ca5761190a611d7c565b611912611d92565b91604435938560018060a01b03841691828152600160205220336000526020528560002054916000198310611950575b602087610849888888611ef2565b8583106119bb5781156119a457331561198d5750600090815260016020908152868220338352815290869020918590039091558290610849611942565b6024906000885191634a1406b160e11b8352820152fd5b602490600088519163e602df0560e01b8352820152fd5b8651637dc7a0d960e11b8152339181019182526020820193909352604081018690528291506060010390fd5b5050346102ca57816003193601126102ca5760105490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020906002549051908152f35b919050346104065782600319360112610406576023548015908115611b6c575b5015611b295761ffff90600582601d541610600014611b21576014905b600a5460135486916001600160a01b039182169116803b15610406578351633419e74d60e21b81526001600160a01b039092168783019081529486166020860152909384919082908490829060400103925af1908115611b185750611b05575b50601d549160018284160190828211611af25750169061ffff191617601d554260235580f35b634e487b7160e01b855260119052602484fd5b611b1190939193611e2b565b9138611acc565b513d86823e3d90fd5b606490611a6c565b906020606492519162461bcd60e51b8352820152602060248201527f596561726c792072656c65617365206e6f7420617661696c61626c65207965746044820152fd5b90506301e133808101809111611b855742101538611a4f565b634e487b7160e01b845260118352602484fd5b905034610406578160031936011261040657611bb2611d7c565b602435903315611c2b576001600160a01b0316918215611c1457508083602095338152600187528181208582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b8351634a1406b160e11b8152908101859052602490fd5b835163e602df0560e01b8152808401869052602490fd5b92915034610d555783600319360112610d5557600354600181811c9186908281168015611d29575b6020958686108214611d165750848852908115611cf45750600114611c9b575b610f0f8686610f05828b0383611e55565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611ce15750505082610f0f94610f05928201019438611c8a565b8054868501880152928601928101611cc4565b60ff191687860152505050151560051b8301019250610f0582610f0f38611c8a565b634e487b7160e01b845260229052602483fd5b93607f1693611c6a565b6020808252825181830181905290939260005b828110611d6857505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611d46565b600435906001600160a01b038216820361165457565b602435906001600160a01b038216820361165457565b604435906001600160a01b038216820361165457565b90600782029180830460071490151715611dd457565b634e487b7160e01b600052601160045260246000fd5b34611654576000366003190112611654576020604051691a784379d99db42000008152f35b3461165457600036600319011261165457602060405160078152f35b67ffffffffffffffff8111611e3f57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117611e3f57604052565b15611e7e57565b60405162461bcd60e51b815260206004820152602160248201527f4d6f6e74686c792072656c65617365206e6f7420617661696c61626c652079656044820152601d60fa1b6064820152608490fd5b91908203918211611dd457565b90816020910312611654575180151581036116545790565b6001600160a01b038181169290919083159081612360578316948515612347573085141593848061233d575b15612335576107d08204915b611f348382611ecd565b9580612327575b6120be575b505080612025575b5015611fa15750600254818101809111611dd4577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020916002555b84600052600082526040600020818154019055604051908152a3565b82600052600060205260406000205490828210611ff35750817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092856000526000845203604060002055611f85565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101829052606490fd5b905060009084825281602052604082205481811061208e57819086845283602052036040832055847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602061dead9384865260408620818154019055604051908152a338611f48565b60405163391434e360e21b81526001600160a01b0385166004820152602481019190915260448101829052606490fd5b866000526020601e81526040918260002054801590811561230f575b50156122b1578860005281805260ff83600020541615806122a4575b612138575b50601f90886000525260002090815415159081612129575b5061211f575b80611f40565b6000905538612119565b90506015541687141538612113565b93509550601f8652806000205480156000146122855750600086526064816000205404678ac7230489e8000080821161227d575b505b80156122395783116121e6576000878152601f87528190208054156121dd575483808211156121d4576121a091611ecd565b87600052601f875281600020555b86600052601e8652428160002055601f6121cd6107d085048095611ecd565b96906120fb565b505060006121a0565b600090556121ae565b5162461bcd60e51b815260048101869052602760248201527f53656c6c20616d6f756e74206578636565647320796f75722073656c6c61626c60448201526619481b1a5b5a5d60ca1b6064820152608490fd5b815162461bcd60e51b815260048101889052601a60248201527f596f752063616e6e6f742073656c6c20616e7920746f6b656e730000000000006044820152606490fd5b90503861216c565b6729a2241af62c000080821161229c575b5061216e565b905038612296565b5083601554168a146120f6565b50608491519062461bcd60e51b82526004820152603260248201527f596f752063616e206f6e6c79207472616e736665722c2053616c6520616674656044820152717220323420686f757273206f662073616c6560701b6064820152fd5b9050620151808101809111611dd457421015386120da565b508160095416871415611f3b565b600091611f2a565b5030871415611f1e565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6005546001600160a01b0316330361238d57565b60405163118cdaa760e01b8152336004820152602490fd5b906000602091828151910182855af115612401576000513d6123f857506001600160a01b0381163b155b6123d65750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156123cf565b6040513d6000823e3d90fdfea26469706673582212201bed24b38bfdf5729b66b09078393dc19ef109f888ed0f8b673893ce8a61e82d64736f6c63430008180033596f752063616e6e6f742073656c6c20616e7920746f6b656e73000000000000596f752063616e206f6e6c79207472616e736665722c2053616c65206166746553656c6c20616d6f756e74206578636565647320796f75722073656c6c61626cddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000da3362259d2611b4251f5298263e6cc521e41d1600000000000000000000000052b314bb0922d9ae8b8b8508d2dfe4a99d43521b000000000000000000000000bbe5ff238980081e1b65bde14dd142f094515ad1000000000000000000000000e26067ba75e0315edfe9038ddc805df8994a7ac9000000000000000000000000a75734d38200e92e9242397ef74386e6b0672741000000000000000000000000a6411c86cb4a3342a241efc5aa06af7aefb7a7570000000000000000000000000e6c259f5712e319a0989ee1efac619e5112c04600000000000000000000000054523b0e25b40f7528deb0fa969961866dc49f5f

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b600092833560e01c91826306fdde0314611c4257508163095ea7b314611b985781630fe83bb81461079a57816312053eb414611a2f57816318160ddd14611a105781631a45385d146119e757816323b872dd146118ee5781632a5abb39146118cf5781632cabd85a146118a6578163313ce5671461188a57816332424aa31461186757816333ea62dc1461184b57816337c4575b1461171f578163398bf797146116fc5781633eaaf86b146116d657816343d6080a1461169e5781634870dd9a146116825781634a6194b51461105f578163582475331461105f5781635bbc7ae7146116595781635dd68acd146113cb57816362d5da551461138e578163641fc9ce1461124e5781636775d298146112255781636e45be57146110f957816370a08231146110c2578163715018a61461106457816375b88ca11461105f5781637afbeba314611036578163802a1a75146110175781638202c88414610ff85781638da5cb5b14610fcf57816394b55ba214610fac57816395d89b4114610ea757816396b74ffa14610e7e5781639a714b8214610c7b578163a360501c1461088e578163a686be621461086f578163a88f02a014610850578163a9059cbb1461081f578163ad4786f614610800578163b44b4b80146107c8578163b61a95391461079f578163b75fdf3a1461079a578163ba9ee7e91461077b578163bce28c5e1461075f578163bd36ccb814610740578163bd59088a1461071d578163c78465f514610628578163cd00671b14610609578163d67c2c9c146105e0578163d911551e14610477578163dd62ed3e14610429578163f2d582fb1461040a578163f2fde38b1461037a57508063f887ea4014610352578063feee4721146102ce5763ff920c74146102a357600080fd5b346102ca57816003193601126102ca5760175490516001600160a01b039091168152602090f35b5080fd5b50346102ca5760203660031901126102ca576020916001600160a01b036102f3611d7c565b168152601f8352818120548061033057508181606492855220540490678ac7230489e80000808311610328575b505b51908152f35b915038610320565b9190506729a2241af62c000080831161034a575b50610322565b915038610344565b50346102ca57816003193601126102ca5760165490516001600160a01b039091168152602090f35b90503461040657602036600319011261040657610395611d7c565b9061039e612379565b6001600160a01b039182169283156103f0575050600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b5050346102ca57816003193601126102ca576020906019549051908152f35b5050346102ca57806003193601126102ca57602091610446611d7c565b8261044f611d92565b6001600160a01b03928316845260018652922091166000908152908352819020549051908152f35b839150346102ca57816003193601126102ca57602254801580156105b3575b6104a09150611e77565b601a54801561055e57926104c88460646104ba8697611dbe565b049080821161055657611ecd565b601a55600754600f546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af19081156105495750610532575b504260225580f35b61053b90611e2b565b61054657808261052a565b80fd5b513d84823e3d90fd5b8480fd5b905080611ecd565b835162461bcd60e51b8152602081840152602960248201527f416c6c20646576656c6f706d656e7420746f6b656e732068617665206265656e604482015268081c995b19585cd95960ba1b6064820152608490fd5b5062278d0081018091116105cd576104a090421015610496565b634e487b7160e01b835260118252602483fd5b5050346102ca57816003193601126102ca57600e5490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca57602090601c549051908152f35b9190503461040657606036600319011261040657610644611d7c565b9161064d611d92565b91610656611da8565b9161065f612379565b6001600160a01b039384169485156106e35784169182156106a75750506001600160601b0360a01b938460155416176015558360165416176016551690601754161760175580f35b906020606492519162461bcd60e51b83528201526016602482015275496e76616c696420526f75746572206164647265737360501b6044820152fd5b506020606492519162461bcd60e51b83528201526014602482015273496e76616c69642070616972206164647265737360601b6044820152fd5b5050346102ca57816003193601126102ca57602090516729a2241af62c00008152f35b5050346102ca57816003193601126102ca576020906025549051908152f35b5050346102ca57816003193601126102ca576020905160148152f35b5050346102ca57816003193601126102ca57602090601b549051908152f35b611dea565b5050346102ca57816003193601126102ca5760155490516001600160a01b039091168152602090f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036107f0611d7c565b168152601e845220549051908152f35b5050346102ca57816003193601126102ca576020906021549051908152f35b5050346102ca57806003193601126102ca5760209061084961083f611d7c565b6024359033611ef2565b5160018152f35b5050346102ca57816003193601126102ca576020906024549051908152f35b5050346102ca57816003193601126102ca576020906022549051908152f35b8383346102ca5760a03660031901126102ca578235602490813591600260065414610c6b5760026006553385526020958680528486209560ff19966001888254161790558315610c1e578415610bd25785516323b872dd60e01b8082523384830190815230602082015260408101879052909291908a9082908190606001038185305af18015610b4d57610bb5575b5060175487518a81019390935233858401908152306020820152604081018890526001600160a01b03969187169361096d9181906060010394610968601f1996878101845283611e55565b6123a5565b601654885163095ea7b360e01b8082529188166001600160a01b0316868201908152602081018490528c9082908190604001038187305af18015610bab576109ee928d928b92610b8e575b508b868b60175416928c6016541692519687958694859384528d840160209093929193604081019460018060a01b031681520152565b03925af18015610b8457610b57575b506060866016541694610104886017541691858a600a5416988d51998a95869462e8e33760e81b865230908601528c8501528760448501528d6064850152604435608485015260643560a485015260c484015260843560e48401525af1988915610b4d57828095819b610b05575b5089903381528c805220908154169055818111610aea575b5050818511610a9b575b878787600160065551908152f35b610aab61096892610ae096611ecd565b601754875163a9059cbb60e01b8b82015233958101958652602086019290925290941692849060400103908101845283611e55565b8380808080610a8d565b610afe91610af791611ecd565b3330611ef2565b8880610a83565b9350995093506060823d606011610b45575b81610b2460609383611e55565b81010312610b415781518a83015192890151999294909289610a6b565b8880fd5b3d9150610b17565b88513d84823e3d90fd5b610b76908b3d8d11610b7d575b610b6e8183611e55565b810190611eda565b508a6109fd565b503d610b64565b89513d85823e3d90fd5b610ba490843d8611610b7d57610b6e8183611e55565b508e6109b8565b8a513d86823e3d90fd5b610bcb908a3d8c11610b7d57610b6e8183611e55565b508961091d565b5060226084928887519362461bcd60e51b85528401528201527f5553445420616d6f756e74206d7573742062652067726561746572207468616e604482015261020360f41b6064820152fd5b5060236084928887519362461bcd60e51b85528401528201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152fd5b8351633ee5aeb560e01b81528690fd5b91905034610406578060031936011261040657610c96611d7c565b601454602435936001600160a01b0392909183163303610e4b5760195492838611610df857808216938415610db5578488528760205285882054610d635790610ce28789959493611ecd565b6019556009541691823b15610d55578551633419e74d60e21b81526001600160a01b03909216908201908152602081018790529091839183919082908490829060400103925af18015610d5957610d41575b5052601f60205282205580f35b610d4a90611e2b565b610d55578338610d34565b8380fd5b84513d84823e3d90fd5b855162461bcd60e51b8152602081860152602660248201527f526563697069656e74206d7573742068617665207a65726f20746f6b656e2062604482015265616c616e636560d01b6064820152608490fd5b855162461bcd60e51b8152602081860152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606490fd5b845162461bcd60e51b8152602081850152602760248201527f496e73756666696369656e7420436f6d6d756e69747920496e63656e7469766560448201526620546f6b656e7360c81b6064820152608490fd5b835162461bcd60e51b8152602081840152600d60248201526c415050524f564552204f4e4c5960981b6044820152606490fd5b5050346102ca57816003193601126102ca5760135490516001600160a01b039091168152602090f35b8383346102ca57816003193601126102ca5780519180938054916001908360011c9260018516948515610fa2575b6020958686108114610f8f57858952908115610f6b5750600114610f13575b610f0f8787610f05828c0383611e55565b5191829182611d33565b0390f35b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610f585750505082610f0f94610f0592820101948680610ef4565b8054868501880152928601928101610f3a565b60ff19168887015250505050151560051b8301019250610f0582610f0f8680610ef4565b634e487b7160e01b845260228352602484fd5b93607f1693610ed5565b5050346102ca57816003193601126102ca5760209061ffff601d54169051908152f35b5050346102ca57816003193601126102ca5760055490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca57602090601a549051908152f35b5050346102ca57816003193601126102ca576020906018549051908152f35b5050346102ca57816003193601126102ca57600d5490516001600160a01b039091168152602090f35b611e0f565b833461054657806003193601126105465761107d612379565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036110ea611d7c565b16815280845220549051908152f35b839150346102ca57816003193601126102ca576025548015801561120b575b6111229150611e77565b601c5480156111ba579261113c8460646104ba8697611dbe565b601c55600c546012546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af190811561054957506111a6575b504260255580f35b6111af90611e2b565b61054657808261119e565b835162461bcd60e51b8152602081840152602560248201527f416c6c205265776172647320746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152608490fd5b5062278d0081018091116105cd5761112290421015611118565b5050346102ca57816003193601126102ca5760125490516001600160a01b039091168152602090f35b839150346102ca57816003193601126102ca5760215480158015611374575b6112779150611e77565b601854928315611323576003840284810460030361130e57839460646112a592049080821161055657611ecd565b6018556008546010546001600160a01b03918216939116833b1561055257604485928385519687948593633419e74d60e21b8552840152600360248401525af190811561054957506112fa575b504260215580f35b61130390611e2b565b6105465780826112f2565b601183634e487b7160e01b6000525260246000fd5b906020608492519162461bcd60e51b8352820152602560248201527f416c6c2063726561746f7220746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152fd5b5062278d0081018091116105cd576112779042101561126d565b5050346102ca5760203660031901126102ca5760209160ff9082906001600160a01b036113b9611d7c565b16815284805220541690519015158152f35b9050346104065760a0366003190112610406576113e6611d7c565b916113ef611d92565b906113f8611da8565b6001600160a01b03936064803586811694939290859003611654576084359680881680980361165457611429612379565b6017549860ff8a60a01c16156116065781169687156115b657811693841561157457169384156115275785156114e75787156114a7575050506001600160601b0360a01b9384600f541617600f55836010541617601055826011541617601155816012541617601255601354161760135560ff60a01b191660175580f35b602090519162461bcd60e51b8352820152601960248201527f496e76616c69642043616b6552656c6561736557616c6c6574000000000000006044820152fd5b602090519162461bcd60e51b8352820152601c60248201527f496e76616c6964207265776172647352656c6561736557616c6c6574000000006044820152fd5b6084926020631b1b195d60e21b92519362461bcd60e51b85528401526024808401527f496e76616c69642061697244726f7045786368616e676552656c6561736557616044840152820152fd5b5050602084519162461bcd60e51b8352820152601e60248201527f496e76616c69642063726561746f7220746f6b656e73206164647265737300006044820152fd5b855162461bcd60e51b8152602081850152602560248201527f496e76616c696420636f6d6d756e69747920646576656c6f706d656e74206164604482015264647265737360d81b81860152608490fd5b855162461bcd60e51b81526020818501526024808201527f496e697469616c206465706c6f796d656e7420616c726561647920636f6d706c604482015263195d195960e21b81860152608490fd5b600080fd5b5050346102ca57816003193601126102ca57600f5490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020905160648152f35b5050346102ca5760203660031901126102ca5760209181906001600160a01b036116c6611d7c565b168152601f845220549051908152f35b5050346102ca57816003193601126102ca57602090516a02116545850052128000008152f35b5050346102ca57816003193601126102ca5760209051678ac7230489e800008152f35b839150346102ca57816003193601126102ca5760245480158015611831575b6117489150611e77565b601b5480156117e057926117628460646104ba8697611dbe565b601b55600b546011546001600160a01b03918216939116833b15610552578251633419e74d60e21b81526001600160a01b039091169181019182526007602083015292849184919082908490829060400103925af190811561054957506117cc575b504260245580f35b6117d590611e2b565b6105465780826117c4565b835162461bcd60e51b8152602081840152602560248201527f416c6c2041697264726f7020746f6b656e732068617665206265656e2072656c60448201526419585cd95960da1b6064820152608490fd5b5062278d0081018091116105cd576117489042101561173e565b5050346102ca57816003193601126102ca576020905160038152f35b5050346102ca57816003193601126102ca5760209051670de0b6b3a76400008152f35b5050346102ca57816003193601126102ca576020905160128152f35b5050346102ca57816003193601126102ca5760115490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020906023549051908152f35b839150346102ca5760603660031901126102ca5761190a611d7c565b611912611d92565b91604435938560018060a01b03841691828152600160205220336000526020528560002054916000198310611950575b602087610849888888611ef2565b8583106119bb5781156119a457331561198d5750600090815260016020908152868220338352815290869020918590039091558290610849611942565b6024906000885191634a1406b160e11b8352820152fd5b602490600088519163e602df0560e01b8352820152fd5b8651637dc7a0d960e11b8152339181019182526020820193909352604081018690528291506060010390fd5b5050346102ca57816003193601126102ca5760105490516001600160a01b039091168152602090f35b5050346102ca57816003193601126102ca576020906002549051908152f35b919050346104065782600319360112610406576023548015908115611b6c575b5015611b295761ffff90600582601d541610600014611b21576014905b600a5460135486916001600160a01b039182169116803b15610406578351633419e74d60e21b81526001600160a01b039092168783019081529486166020860152909384919082908490829060400103925af1908115611b185750611b05575b50601d549160018284160190828211611af25750169061ffff191617601d554260235580f35b634e487b7160e01b855260119052602484fd5b611b1190939193611e2b565b9138611acc565b513d86823e3d90fd5b606490611a6c565b906020606492519162461bcd60e51b8352820152602060248201527f596561726c792072656c65617365206e6f7420617661696c61626c65207965746044820152fd5b90506301e133808101809111611b855742101538611a4f565b634e487b7160e01b845260118352602484fd5b905034610406578160031936011261040657611bb2611d7c565b602435903315611c2b576001600160a01b0316918215611c1457508083602095338152600187528181208582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b8351634a1406b160e11b8152908101859052602490fd5b835163e602df0560e01b8152808401869052602490fd5b92915034610d555783600319360112610d5557600354600181811c9186908281168015611d29575b6020958686108214611d165750848852908115611cf45750600114611c9b575b610f0f8686610f05828b0383611e55565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611ce15750505082610f0f94610f05928201019438611c8a565b8054868501880152928601928101611cc4565b60ff191687860152505050151560051b8301019250610f0582610f0f38611c8a565b634e487b7160e01b845260229052602483fd5b93607f1693611c6a565b6020808252825181830181905290939260005b828110611d6857505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611d46565b600435906001600160a01b038216820361165457565b602435906001600160a01b038216820361165457565b604435906001600160a01b038216820361165457565b90600782029180830460071490151715611dd457565b634e487b7160e01b600052601160045260246000fd5b34611654576000366003190112611654576020604051691a784379d99db42000008152f35b3461165457600036600319011261165457602060405160078152f35b67ffffffffffffffff8111611e3f57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117611e3f57604052565b15611e7e57565b60405162461bcd60e51b815260206004820152602160248201527f4d6f6e74686c792072656c65617365206e6f7420617661696c61626c652079656044820152601d60fa1b6064820152608490fd5b91908203918211611dd457565b90816020910312611654575180151581036116545790565b6001600160a01b038181169290919083159081612360578316948515612347573085141593848061233d575b15612335576107d08204915b611f348382611ecd565b9580612327575b6120be575b505080612025575b5015611fa15750600254818101809111611dd4577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020916002555b84600052600082526040600020818154019055604051908152a3565b82600052600060205260406000205490828210611ff35750817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092856000526000845203604060002055611f85565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101829052606490fd5b905060009084825281602052604082205481811061208e57819086845283602052036040832055847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602061dead9384865260408620818154019055604051908152a338611f48565b60405163391434e360e21b81526001600160a01b0385166004820152602481019190915260448101829052606490fd5b866000526020601e81526040918260002054801590811561230f575b50156122b1578860005281805260ff83600020541615806122a4575b612138575b50601f90886000525260002090815415159081612129575b5061211f575b80611f40565b6000905538612119565b90506015541687141538612113565b93509550601f8652806000205480156000146122855750600086526064816000205404678ac7230489e8000080821161227d575b505b80156122395783116121e6576000878152601f87528190208054156121dd575483808211156121d4576121a091611ecd565b87600052601f875281600020555b86600052601e8652428160002055601f6121cd6107d085048095611ecd565b96906120fb565b505060006121a0565b600090556121ae565b5162461bcd60e51b815260048101869052602760248201527f53656c6c20616d6f756e74206578636565647320796f75722073656c6c61626c60448201526619481b1a5b5a5d60ca1b6064820152608490fd5b815162461bcd60e51b815260048101889052601a60248201527f596f752063616e6e6f742073656c6c20616e7920746f6b656e730000000000006044820152606490fd5b90503861216c565b6729a2241af62c000080821161229c575b5061216e565b905038612296565b5083601554168a146120f6565b50608491519062461bcd60e51b82526004820152603260248201527f596f752063616e206f6e6c79207472616e736665722c2053616c6520616674656044820152717220323420686f757273206f662073616c6560701b6064820152fd5b9050620151808101809111611dd457421015386120da565b508160095416871415611f3b565b600091611f2a565b5030871415611f1e565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6005546001600160a01b0316330361238d57565b60405163118cdaa760e01b8152336004820152602490fd5b906000602091828151910182855af115612401576000513d6123f857506001600160a01b0381163b155b6123d65750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156123cf565b6040513d6000823e3d90fdfea26469706673582212201bed24b38bfdf5729b66b09078393dc19ef109f888ed0f8b673893ce8a61e82d64736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000da3362259d2611b4251f5298263e6cc521e41d1600000000000000000000000052b314bb0922d9ae8b8b8508d2dfe4a99d43521b000000000000000000000000bbe5ff238980081e1b65bde14dd142f094515ad1000000000000000000000000e26067ba75e0315edfe9038ddc805df8994a7ac9000000000000000000000000a75734d38200e92e9242397ef74386e6b0672741000000000000000000000000a6411c86cb4a3342a241efc5aa06af7aefb7a7570000000000000000000000000e6c259f5712e319a0989ee1efac619e5112c04600000000000000000000000054523b0e25b40f7528deb0fa969961866dc49f5f

-----Decoded View---------------
Arg [0] : _LiquidityWalletAddress (address): 0xDa3362259D2611B4251F5298263E6Cc521e41d16
Arg [1] : _preSaleWalletAddress (address): 0x52B314Bb0922d9aE8B8b8508D2Dfe4A99d43521b
Arg [2] : _airDropExchangeCntAddr (address): 0xbBe5ff238980081e1B65BdE14dD142f094515aD1
Arg [3] : _rewardsTokensCntAddr (address): 0xe26067ba75E0315edfE9038DDC805dF8994A7ac9
Arg [4] : _communityDevelopmentCNTAddr (address): 0xA75734D38200E92E9242397ef74386E6b0672741
Arg [5] : _CreatorTokensCNTAddr (address): 0xA6411c86cb4a3342A241eFC5aa06AF7aEFB7a757
Arg [6] : _CommunityIncentiveCNTAddr (address): 0x0e6C259f5712e319a0989ee1Efac619e5112c046
Arg [7] : _CakeLockerCntAddr (address): 0x54523B0E25b40f7528DeB0fa969961866dC49f5F

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000da3362259d2611b4251f5298263e6cc521e41d16
Arg [1] : 00000000000000000000000052b314bb0922d9ae8b8b8508d2dfe4a99d43521b
Arg [2] : 000000000000000000000000bbe5ff238980081e1b65bde14dd142f094515ad1
Arg [3] : 000000000000000000000000e26067ba75e0315edfe9038ddc805df8994a7ac9
Arg [4] : 000000000000000000000000a75734d38200e92e9242397ef74386e6b0672741
Arg [5] : 000000000000000000000000a6411c86cb4a3342a241efc5aa06af7aefb7a757
Arg [6] : 0000000000000000000000000e6c259f5712e319a0989ee1efac619e5112c046
Arg [7] : 00000000000000000000000054523b0e25b40f7528deb0fa969961866dc49f5f


Deployed Bytecode Sourcemap

427:16512:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:33;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;-1:-1:-1;;;;;427:16512:12;;:::i;:::-;;;;11157:13;427:16512;;;;;;11192:10;;;427:16512;;;;;;;;;2075:7;1459:6;;11280:32;;;11276:103;;11188:292;;;427:16512;;;;;11276:103;11332:32;-1:-1:-1;11276:103:12;;;11188:292;1459:6;;;;11399:27;;;11395:85;;11188:292;;;;11395:85;11442:27;-1:-1:-1;11395:85:12;;;427:16512;;;;;;;;;;;;;1313:30;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;427:16512:12;;;;2627:22:0;;2623:91;;2131:8:12;;3004:6:0;2131:8:12;427:16512;-1:-1:-1;;;;;427:16512:12;;;;;3004:6:0;427:16512:12;;3052:40:0;427:16512:12;3052:40:0;;427:16512:12;;2623:91:0;427:16512:12;-1:-1:-1;;;2672:31:0;;;;;427:16512:12;;;;;2672:31:0;427:16512:12;;;;;;;;;;;;;;;;;;;;1661:61;427:16512;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9744:22;427:16512;9744:27;;:107;;;;427:16512;9723:187;;;;:::i;:::-;9942:26;427:16512;9942:30;;427:16512;;10077:69;10374:45;10077:69;427:16512;10077:69;;;;:::i;:::-;2075:7;10249:44;;;;10245:119;;10374:45;:::i;:::-;9942:26;2131:8;2544:1;427:16512;10476:26;2131:8;-1:-1:-1;;;;;427:16512:12;;;;;;10430:124;;;;;427:16512;;-1:-1:-1;;;10430:124:12;;-1:-1:-1;;;;;427:16512:12;;;10430:124;;;427:16512;;;;2075:7;;;427:16512;;;;;;;;;;;;;2075:7;;10430:124;;;;;;;;;;;;427:16512;10589:15;;9744:22;2131:8;427:16512;;10430:124;;;;:::i;:::-;427:16512;;10430:124;;;;427:16512;;;10430:124;427:16512;2131:8;427:16512;;2131:8;;;;10430:124;427:16512;;;10245:119;10309:44;-1:-1:-1;10309:44:12;10374:45;:::i;427:16512::-;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;9744:107;2131:8;2075:7;2131:8;;;;;;;9723:187;9791:15;;:60;;9744:107;;2131:8;-1:-1:-1;;;1459:6:12;;;;;;427:16512;1459:6;427:16512;;;;;;;;;;;;;;988:35;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;1925:49;427:16512;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;427:16512:12;;;;10781:32;;427:16512;;;;10856:21;;;427:16512;;;;-1:-1:-1;;;;;427:16512:12;;;;10915:38;427:16512;;;10915:38;427:16512;;10963:34;427:16512;;;10963:34;427:16512;;;11007:42;427:16512;;;11007:42;427:16512;;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;1459:6;427:16512;;;;;;;;;;;;;;;;;;;3056:37;427:16512;;;;;;;;;;;;;;;;;;;;;;;;2488:2;427:16512;;;;;;;;;;;;;;;;;;;1861:58;427:16512;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1274:32;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;;-1:-1:-1;;;;;427:16512:12;;:::i;:::-;;;;2717:47;427:16512;;;;;;;;;;;;;;;;;;;;;;;;;;2882:37;427:16512;;;;;;;;;;;;;;;;;;;;;;;3440:5:5;427:16512:12;;:::i;:::-;;;735:10:9;;3440:5:5;:::i;:::-;427:16512:12;;;;;;;;;;;;;;;;;;;;;3013:37;427:16512;;;;;;;;;;;;;;;;;;;;;;;2925:41;427:16512;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;;;;;1899:1:10;2702:7;427:16512:12;2702:18:10;2698:86;;1899:1;2702:7;2131:8:12;15338:10;427:16512;;;;;;;;;;;;;;;;;;;;;;15408:15;;427:16512;;15481:14;;427:16512;;;;-1:-1:-1;;;15602:125:12;;;15338:10;15602:125;;;427:16512;;;15302:4;427:16512;;;;;;;;;;2131:8;;;427:16512;15302:4;;427:16512;;;;;;15602:125;15302:4;;;15602:125;;;;;;;;427:16512;-1:-1:-1;15738:11:12;427:16512;;;1745:53:8;;;;;;;15338:10:12;1745:53:8;;;427:16512:12;;;15302:4;427:16512;;;;;;;;;;-1:-1:-1;;;;;427:16512:12;;;;;1745:53:8;;427:16512:12;;;;1745:53:8;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;15904:6:12;427:16512;;;-1:-1:-1;;;15866:59:12;;;427:16512;;;-1:-1:-1;;;;;427:16512:12;15866:59;;;427:16512;;;2131:8;;;427:16512;;;2131:8;;427:16512;;;;2131:8;;15866:59;15302:4;;;15866:59;;;;;;15935:48;15866:59;;;;;;;427:16512;;;;;15738:11;427:16512;;;;15904:6;427:16512;;;;15935:48;;;;;;;;;;;;2131:8;;;;;;;;;427:16512;;;;;;;;;2131:8;427:16512;2131:8;15935:48;;;;;;;;;;;427:16512;;;;15904:6;427:16512;;;;;15738:11;427:16512;;2131:8;;;16351:17;2131:8;427:16512;;;;2131:8;;;;;;;;16090:334;;15302:4;16090:334;;;427:16512;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16090:334;;;;;;;;;;;;;;427:16512;15338:10;;;;427:16512;;;;;;;;;;;;16576:21;;;16572:164;;427:16512;16749:20;;;;;16745:160;;427:16512;2131:8;;;427:16512;2702:7:10;2131:8:12;427:16512;;;;;16745:160;16809:20;1328:43:8;16809:20:12;1328:43:8;16809:20:12;;:::i;:::-;15738:11;427:16512;;;-1:-1:-1;;;1328:43:8;;;;15338:10:12;1328:43:8;;;427:16512:12;;;2131:8;;;427:16512;;;;;;;;;;2131:8;;1328:43:8;;;;;;;;:::i;:::-;16745:160:12;;;;;;;16572:164;16710:14;16638:21;;;;:::i;:::-;15338:10;15302:4;16710:14;:::i;:::-;16572:164;;;;16090:334;;;;;;;427:16512;16090:334;;427:16512;16090:334;;;;;;427:16512;16090:334;;;:::i;:::-;;;427:16512;;;;;;;;;;;;;;;;;;;;16090:334;;427:16512;;;;16090:334;;;-1:-1:-1;16090:334:12;;;427:16512;;2131:8;427:16512;;2131:8;;;;15935:48;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;427:16512;;2131:8;427:16512;;2131:8;;;;15866:59;;;;;;;;;;;;;:::i;:::-;;;;;;427:16512;;2131:8;427:16512;;2131:8;;;;15602:125;;;;;;;;;;;;;:::i;:::-;;;;;427:16512;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;2698:86:10;427:16512:12;;-1:-1:-1;;;2743:30:10;;427:16512:12;;2743:30:10;427:16512:12;;;;;;;;;;;;;;;;;:::i;:::-;11640:14;2131:8;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;11626:10;:28;427:16512;;11713:24;427:16512;11703:34;;;;427:16512;;;;;11820:23;;;427:16512;;;;;;;;;;;;;;12005:34;;;;;;;;:::i;:::-;11713:24;2131:8;12049:25;427:16512;;12049:49;;;;;;427:16512;;-1:-1:-1;;;12049:49:12;;-1:-1:-1;;;;;427:16512:12;;;12049:49;;;427:16512;;;2131:8;;;427:16512;;;;;;;;;;;;;;;;2131:8;;12049:49;;;;;;;;;;427:16512;;;12108:13;427:16512;;;;2131:8;427:16512;;12049:49;;;;:::i;:::-;427:16512;;12049:49;;;;427:16512;;;;12049:49;427:16512;;2131:8;427:16512;;2131:8;;;;427:16512;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;11713:24;427:16512;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;1207:32;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;-1:-1:-1;;;;427:16512:12;;;;;;;;-1:-1:-1;427:16512:12;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:40;427:16512;;;;;;;;;;;;;;;;;;;;;;1710:6:0;2131:8:12;427:16512;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;1728:62;427:16512;;;;;;;;;;;;;;;;;;;;;;;1606:49;427:16512;;;;;;;;;;;;;;;;;;;;;945:37;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1500:62:0;;:::i;:::-;3004:6;2131:8:12;;-1:-1:-1;;;;;;427:16512:12;;;;;;;-1:-1:-1;;;;;427:16512:12;3052:40:0;427:16512:12;;3052:40:0;427:16512:12;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;;-1:-1:-1;;;;;427:16512:12;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7688:18;427:16512;7688:23;;:99;;;;427:16512;7667:179;;;;:::i;:::-;7865:13;427:16512;7865:17;;427:16512;;7962:38;8145:32;7962:38;427:16512;7962:38;;;;:::i;8145:32::-;7865:13;2131:8;8187:20;427:16512;8213:20;2131:8;-1:-1:-1;;;;;427:16512:12;;;;;;8187:71;;;;;427:16512;;-1:-1:-1;;;8187:71:12;;-1:-1:-1;;;;;427:16512:12;;;8187:71;;;427:16512;;;;2075:7;;;427:16512;;;;;;;;;;;;;2075:7;;8187:71;;;;;;;;;;;;427:16512;8289:15;;7688:18;2131:8;427:16512;;8187:71;;;;:::i;:::-;427:16512;;8187:71;;;;427:16512;;;-1:-1:-1;;;427:16512:12;;;;;;;7688:18;427:16512;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;7688:99;2131:8;2075:7;2131:8;;;;;;;7667:179;7731:15;;:56;;7688:99;;427:16512;;;;;;;;;;;;;;1166:35;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;8389:18;427:16512;8389:23;;:99;;;;427:16512;8368:179;;;;:::i;:::-;8566:13;427:16512;8566:17;;;427:16512;;;1459:6;;;;;427:16512;1459:6;;;2075:7;;427:16512;8892:32;2075:7;;8793:31;;;;8789:93;;8892:32;:::i;:::-;8566:13;2131:8;8934:20;427:16512;8973:19;2131:8;-1:-1:-1;;;;;427:16512:12;;;;;;8934:107;;;;;2075:7;427:16512;;;;;2131:8;;;;;;;;8934:107;;;;427:16512;;2075:7;;;427:16512;8934:107;;;;;;;;;;427:16512;9072:15;;8389:18;2131:8;427:16512;;8934:107;;;;:::i;:::-;427:16512;;8934:107;;;;1459:6;;427:16512;;;;;1459:6;;;427:16512;1459:6;427:16512;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;8389:99;2131:8;2075:7;2131:8;;;;;;;8368:179;8432:15;;:56;;8389:99;;427:16512;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;;;;-1:-1:-1;;;;;427:16512:12;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;5771:15:12;427:16512;;;;;;;;;;;;5858:39;;;427:16512;;;;5991:32;;;427:16512;;;6111:43;;;427:16512;;6248:35;;427:16512;;6356:32;;427:16512;;;;;-1:-1:-1;;;;;427:16512:12;;;;6429:54;427:16512;;;6429:54;427:16512;;6493:40;427:16512;;;6493:40;427:16512;;6543:60;427:16512;;;6543:60;427:16512;;6613:44;427:16512;;;6613:44;427:16512;6667:38;427:16512;;;6667:38;427:16512;;;;;;5771:15;427:16512;;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;2131:8;;;;427:16512;;;;;;;;;;;;;;;;;;;;;;;;;2131:8;;;;427:16512;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;1030:41;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;2373:3;427:16512;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;;-1:-1:-1;;;;;427:16512:12;;:::i;:::-;;;;2770:48;427:16512;;;;;;;;;;;;;;;;;;;;;;;;;;;1459:6;427:16512;;;;;;;;;;;;;;;;;;;;1459:6;427:16512;;;;;;;;;;;;;;;;;;6859:18;427:16512;6859:23;;:99;;;;427:16512;6838:179;;;;:::i;:::-;7049:22;427:16512;7049:26;;2075:7;;7176:61;7388:41;7176:61;427:16512;7176:61;;;;:::i;7388:41::-;7049:22;2131:8;7440:22;2075:7;7481:28;2131:8;-1:-1:-1;;;;;427:16512:12;;;;2075:7;427:16512;7440:117;;;;;427:16512;;-1:-1:-1;;;7440:117:12;;-1:-1:-1;;;;;427:16512:12;;;7440:117;;;427:16512;;;;2075:7;;;427:16512;;;;;;;;;;;;;2075:7;;7440:117;;;;;;;;;;;;427:16512;7588:15;;6859:18;2131:8;427:16512;;7440:117;;;;:::i;:::-;427:16512;;7440:117;;;;2075:7;427:16512;;-1:-1:-1;;;2075:7:12;;;;;;;;6859:18;2075:7;;427:16512;2075:7;427:16512;;;2075:7;-1:-1:-1;;;2075:7:12;;;;;;;6859:99;2131:8;2075:7;2131:8;;;;;;;6838:179;6902:15;;:56;;6859:99;;427:16512;;;;;;;;;;;;;;;;;2434:1;427:16512;;;;;;;;;;;;;;;;;;;;1459:6;427:16512;;;;;;;;;;;;;;;;;;;;2761:2:5;427:16512:12;;;;;;;;;;;;;;;;;1117:43;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;2972:34;427:16512;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;735:10:9;427:16512:12;;;;;;;;10580:17:5;;;10561:36;;10557:309;;427:16512:12;;4967:5:5;;;;;;:::i;10557:309::-;10617:24;;;10613:130;;9794:19;;9790:89;;735:10:9;9892:21:5;9888:90;;-1:-1:-1;427:16512:12;;;;;;;;;;;;735:10:9;427:16512:12;;;;;;;;;;;;2131:8;;;427:16512;;4967:5:5;10557:309;;9888:90;427:16512:12;;;;;9936:31:5;;;;;;;;427:16512:12;9936:31:5;9790:89;427:16512:12;;;;;9836:32:5;;;;;;;;427:16512:12;9836:32:5;10613:130;427:16512:12;;-1:-1:-1;;;10668:60:5;;735:10:9;10668:60:5;;;427:16512:12;;;;;;;;;;;;;;;;;;-1:-1:-1;427:16512:12;;10668:60:5;;;427:16512:12;;;;;;;;;;;;;;1077:34;427:16512;;;-1:-1:-1;;;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;2908:12:5;427:16512:12;;;;;;;;;;;;;;;;;;;;;;9169:15;427:16512;9169:20;;:92;;;;;427:16512;2131:8;;;;427:16512;2131:8;9424:1;2131:8;9399:22;2131:8;427:16512;9399:26;:80;;;;2488:2;9399:80;;9489:17;2131:8;9512:17;2131:8;427:16512;;-1:-1:-1;;;;;427:16512:12;;;;;9489:62;;;;;427:16512;;-1:-1:-1;;;9489:62:12;;-1:-1:-1;;;;;427:16512:12;;;9489:62;;;427:16512;;;;;;2131:8;;;427:16512;;;;;-1:-1:-1;427:16512:12;;;;;;2131:8;;9489:62;;;;;;;;;;;;9399:80;2131:8;9399:22;2131:8;427:16512;9611:1;427:16512;;;2131:8;;;;;;;427:16512;;2131:8;;;;;9399:22;2131:8;9640:15;9169;2131:8;427:16512;;2131:8;-1:-1:-1;;;1459:6:12;;;;;;427:16512;1459:6;9489:62;;;;;;;:::i;:::-;;;;;;427:16512;2131:8;427:16512;;2131:8;;;;9399:80;9476:3;9399:80;;;2131:8;427:16512;2131:8;;427:16512;;2131:8;;;;;;;;;;;;;427:16512;2131:8;427:16512;;;2131:8;;9169:92;2131:8;;;;;;;;;;9209:15;:52;;9169:92;;;2131:8;-1:-1:-1;;;1459:6:12;;;;;;427:16512;1459:6;427:16512;;;;;;;;;;;;;;;;:::i;:::-;;;735:10:9;;9794:19:5;9790:89;;-1:-1:-1;;;;;427:16512:12;;9892:21:5;;9888:90;;735:10:9;;;427:16512:12;735:10:9;;427:16512:12;;8823:4:5;427:16512:12;;;;;;;;;;;2131:8;427:16512;;;;;10066:31:5;735:10:9;;10066:31:5;;427:16512:12;8823:4:5;427:16512:12;;;9888:90:5;427:16512:12;;-1:-1:-1;;;9936:31:5;;;;;427:16512:12;;;;;9936:31:5;9790:89;427:16512:12;;-1:-1:-1;;;9836:32:5;;;;;427:16512:12;;;;;9836:32:5;427:16512:12;;;;;;;;;;;;;;;1837:5:5;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1837:5:5;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;-1:-1:-1;427:16512:12;;;;;;;-1:-1:-1;;;427:16512:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;427:16512:12;;;;;;;;;;;;;;;;;;;;1745:53:8;;427:16512:12;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;427:16512:12;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;427:16512:12;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;427:16512:12;;;;;;:::o;1459:6::-;;427:16512;1459:6;;;;;;427:16512;1459:6;;;;;;;:::o;:::-;427:16512;;;1459:6;;;;;;;;427:16512;;;;;;-1:-1:-1;;427:16512:12;;;;;;;1459:6;427:16512;;;;;;;;;-1:-1:-1;;427:16512:12;;;;;;;2544:1;427:16512;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;1745:53:8;;427:16512:12;;;;;;;;;;;;;;;;:::o;2075:7::-;;;;:::o;:::-;427:16512;;-1:-1:-1;;;2075:7:12;;;;;;;;;;;427:16512;2075:7;427:16512;;;2075:7;-1:-1:-1;;;2075:7:12;;;;;;;;;;;;;;;;;:::o;427:16512::-;;;;;;;;;;;;;;;;;;:::o;5374:300:5:-;-1:-1:-1;;;;;427:16512:12;;;;;;;5457:18:5;;;;5453:86;;427:16512:12;;5552:16:5;;;5548:86;;12382:4:12;12366:21;;;;;;:44;;5374:300:5;12442:26:12;;;12460:4;2075:7;;12442:26;;12508:19;12421:47;12508:19;;:::i;:::-;12583:346;;;;12442:26;12538:2196;;12442:26;14748:14;;;14744:199;;12442:26;-1:-1:-1;6078:18:5;;;427:16512:12;6214:21:5;427:16512:12;2131:8;;;;;;;;7064:25:5;2131:8:12;427:16512;2131:8;6214:21:5;2131:8:12;6074:540:5;427:16512:12;5473:1:5;427:16512:12;5473:1:5;427:16512:12;;;5473:1:5;427:16512:12;;;;;2131:8;;427:16512;;;;;7064:25:5;5374:300::o;6074:540::-;427:16512:12;5473:1:5;427:16512:12;5473:1:5;427:16512:12;;;5473:1:5;427:16512:12;;6321:19:5;;;;6317:115;;427:16512:12;;7064:25:5;427:16512:12;;;;5473:1:5;427:16512:12;5473:1:5;427:16512:12;;;;5473:1:5;427:16512:12;2131:8;6074:540:5;;6317:115;427:16512:12;;-1:-1:-1;;;6367:50:5;;-1:-1:-1;;;;;427:16512:12;;;;6367:50:5;;;427:16512:12;;;;;;;;;;;;;;;;10668:60:5;14744:199:12;6074:540:5;;5473:1;427:16512:12;;;;;;;;;;;6321:19:5;;;6317:115;;427:16512:12;;;;;;;;;;;;2131:8;855:42;7064:25:5;427:16512:12;855:42;427:16512;;;;;;;;;;;2131:8;;427:16512;;;;;7064:25:5;14744:199:12;;;6317:115:5;427:16512:12;;-1:-1:-1;;;6367:50:5;;-1:-1:-1;;;;;427:16512:12;;6367:50:5;;;427:16512:12;;;;;;;;;;;;;;;;10668:60:5;12538:2196:12;427:16512;5473:1:5;427:16512:12;;12979:12;427:16512;;;;;5473:1:5;427:16512:12;;12979:23;;:95;;;;;12538:2196;2017:8;;;;427:16512;5473:1:5;427:16512:12;;;;;;5473:1:5;427:16512:12;2017:8;427:16512;;13177:61;;;12538:2196;13173:1250;;12538:2196;427:16512;14616:13;427:16512;;5473:1:5;427:16512:12;;5473:1:5;427:16512:12;;;;14616:23;;:50;;;;12538:2196;14612:112;;;12538:2196;;;;14612:112;5473:1:5;2131:8:12;;14612:112;;;14616:50;2131:8;;14649:17;2131:8;427:16512;14643:23;;;14616:50;;;13173:1250;427:16512;;;;13274:13;427:16512;;;5473:1:5;427:16512:12;;13316:10;;13312:347;13316:10;;;427:16512;5473:1:5;427:16512:12;;;;5473:1:5;427:16512:12;;2075:7;1459:6;13419:32;;;13415:119;;13312:347;;;13685:9;;2017:8;;13773:15;;2017:8;;5473:1:5;427:16512:12;;;13274:13;427:16512;;;;;;;13892:23;427:16512;;;13962:28;;;;;;;14018;;;:::i;:::-;427:16512;5473:1:5;427:16512:12;13274:13;427:16512;;;5473:1:5;427:16512:12;2131:8;13888:275;427:16512;5473:1:5;427:16512:12;12979:12;427:16512;;14202:15;427:16512;5473:1:5;427:16512:12;2131:8;14616:13;14389:19;14341:4;2075:7;;14389:19;;;:::i;:::-;13173:1250;;;;13961:113;;;5473:1:5;13961:113:12;;13888:275;5473:1:5;2131:8:12;;13888:275;;2017:8;427:16512;-1:-1:-1;;;2017:8:12;;;;;;;;;;;;427:16512;2017:8;427:16512;;;2017:8;-1:-1:-1;;;2017:8:12;;;;;;;;427:16512;;-1:-1:-1;;;2017:8:12;;;;;;;;;;;;427:16512;2017:8;427:16512;;;2017:8;;;;13415:119;13479:32;;13415:119;;;13312:347;1459:6;13562:27;;;13558:101;;13312:347;;;;13558:101;13613:27;;13558:101;;;13177:61;2131:8;;13221:17;2131:8;427:16512;13215:23;;13177:61;;2017:8;427:16512;2017:8;427:16512;;2131:8;;;;2017;;;;;;;;;;427:16512;2017:8;427:16512;;;2017:8;-1:-1:-1;;;2017:8:12;;;;;12979:95;2131:8;;2017;2131;;;;;;;13026:15;:48;;12979:95;;;12583:346;427:16512;;12903:25;427:16512;;12887:42;;;12583:346;;12442:26;5473:1:5;12442:26:12;;;12366:44;12382:4;;12391:19;;;12366:44;;5548:86:5;427:16512:12;;-1:-1:-1;;;5591:32:5;;5473:1;5591:32;;;427:16512:12;;;5591:32:5;5453:86;427:16512:12;;-1:-1:-1;;;5498:30:5;;5473:1;5498:30;;;427:16512:12;;;5498:30:5;1796:162:0;1710:6;2131:8:12;-1:-1:-1;;;;;427:16512:12;735:10:9;1855:23:0;1851:101;;1796:162::o;1851:101::-;427:16512:12;;-1:-1:-1;;;1901:40:0;;735:10:9;1901:40:0;;;427:16512:12;;;1901:40:0;8370:720:8;;-1:-1:-1;8507:421:8;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:8;;8942:15;;-1:-1:-1;;;;;;427:16512:12;;8960:26:8;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;427:16512:12;;-1:-1:-1;;;9033:40:8;;-1:-1:-1;;;;;427:16512:12;;;9033:40:8;;;427:16512:12;;;9033:40:8;8942:68;9009:1;8994:16;;8942:68;;8507:421;;;;-1:-1:-1;8507:421:8;;;;

Swarm Source

ipfs://1bed24b38bfdf5729b66b09078393dc19ef109f888ed0f8b673893ce8a61e82d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.