ETH Price: $2,522.31 (+0.28%)

Token

Mock (MOCK)
 

Overview

Max Total Supply

100,000,000 MOCK

Holders

2

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ProofNonReflectionTokenCutter

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 11 : ProofNonReflectionTokenCutter.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

import "../interfaces/IERC721A.sol";
import "../libraries/ProofNonReflectionTokenFees.sol";
import "../interfaces/IFACTORY.sol";
import "../interfaces/IUniswapV2Router02.sol";
import "../interfaces/IUniswapV2Factory.sol";
import "../interfaces/IProofNonReflectionTokenCutter.sol";
import "../libraries/Ownable.sol";

contract ProofNonReflectionTokenCutter is
    Ownable,
    IProofNonReflectionTokenCutter
{

    //This token was created with PROOF, and audited by Solidity Finance — https://proofplatform.io/projects
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;
    address payable public proofBurnerAddress;
    address public proofAdmin;
    uint256 public whitelistEndTime;
    uint256 public whitelistPeriod;

    bool public restrictWhales = true;

    mapping(address => bool) public userWhitelist;
    IERC721A public nftWhitelist;
    bool public whitelistMode = true;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    uint256 public launchedAt;
    uint256 public proofFee = 2;
    uint256 public proofFeeOnSell = 2;

    uint256 public mainFee;
    uint256 public lpFee;
    uint256 public devFee;

    uint256 public mainFeeOnSell;
    uint256 public lpFeeOnSell;
    uint256 public devFeeOnSell;

    uint256 public totalFee;
    uint256 public totalFeeIfSelling;

    bool public proofFeeRemoved = false;
    bool public proofFeeReduced = false;

    uint256 accMainFees;
    uint256 accLpFees;
    uint256 accDevFees;
    uint256 accProofFees;

    IUniswapV2Router02 public router;
    address public pair;
    address public factory;
    address payable public devWallet;
    address payable public mainWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingStatus = true;

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 public swapThreshold;

    constructor() {
        factory = msg.sender;
    }

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyProofAdmin() {
        require(
            proofAdmin == _msgSender(),
            "Ownable: caller is not the proofAdmin"
        );
        _;
    }

    modifier onlyFactory() {
        require(factory == _msgSender(), "Ownable: caller is not the factory");
        _;
    }

    function setBasicData(
        BaseData memory _baseData,
        ProofNonReflectionTokenFees.allFees memory fees
    ) external onlyFactory {
        _name = _baseData.tokenName;
        _symbol = _baseData.tokenSymbol;
        _totalSupply = _baseData.initialSupply;

        //Tx & Wallet Limits
        require(_baseData.percentToLP >= 70, "Too low");	
        _maxTxAmount = (_baseData.initialSupply * 5) / 1000;
        _walletMax = (_baseData.initialSupply * 1) / 100;
        swapThreshold = (_baseData.initialSupply * 5) / 4000;

        router = IUniswapV2Router02(_baseData.routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

        _allowances[address(this)][address(router)] = type(uint256).max;

        userWhitelist[address(this)] = true;
        userWhitelist[factory] = true;
        userWhitelist[pair] = true;
        userWhitelist[_baseData.owner] = true;
        userWhitelist[_baseData.initialProofAdmin] = true;
        userWhitelist[_baseData.routerAddress] = true;
        _addWhitelist(_baseData.whitelists);
        nftWhitelist = IERC721A(_baseData.nftWhitelist);

        isFeeExempt[address(this)] = true;
        isFeeExempt[factory] = true;
        isFeeExempt[_baseData.owner] = true;

        isTxLimitExempt[_baseData.owner] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[factory] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;

        whitelistPeriod = _baseData.whitelistPeriod;

        //Fees
        lpFee = fees.lpFee;
        lpFeeOnSell = fees.lpFeeOnSell;
        devFee = fees.devFee;
        devFeeOnSell = fees.devFeeOnSell;
        mainFee = fees.mainFee;
        mainFeeOnSell = fees.mainFeeOnSell;

        if (fees.devFee + fees.lpFee + fees.mainFee == 0) {
            proofFee = 0;
        } 
        totalFee = fees.devFee + fees.lpFee + fees.mainFee + proofFee;

        if (fees.devFeeOnSell + fees.lpFeeOnSell + fees.mainFeeOnSell == 0) {
            proofFeeOnSell = 0;
        }
        totalFeeIfSelling = fees.devFeeOnSell + fees.lpFeeOnSell + fees.mainFeeOnSell + proofFeeOnSell;

        if (IFACTORY(factory).isWhitelisted(_baseData.owner)) {
            require(totalFee <= 12, "high KYC fee");
            require(totalFeeIfSelling <= 17, "high KYC fee");
        } else {
            require(totalFee <= 7, "high fee");
            require(totalFeeIfSelling <= 7, "high fee");
        }

        devWallet = payable(_baseData.dev);
        mainWallet = payable(_baseData.main);
        proofAdmin = _baseData.initialProofAdmin;

        //Initial supply
        uint256 forLP = (_baseData.initialSupply * _baseData.percentToLP) / 100; //95%
        uint256 forOwner = _baseData.initialSupply - forLP; //5%

        _balances[msg.sender] += forLP;
        _balances[_baseData.owner] += forOwner;

        emit Transfer(address(0), msg.sender, forLP);
        emit Transfer(address(0), _baseData.owner, forOwner);
    }

    //proofAdmin functions

    function updateWhitelistPeriod(
        uint256 _whitelistPeriod
    ) external onlyProofAdmin {
        whitelistPeriod = _whitelistPeriod;
        whitelistEndTime = launchedAt + (60 * _whitelistPeriod);
        whitelistMode = true;
    }

    function updateProofAdmin(
        address newAdmin
    ) external virtual onlyProofAdmin {
        proofAdmin = newAdmin;
        userWhitelist[newAdmin] = true;
    }

    function updateProofBurnerAddress(
        address newproofBurnerAddress
    ) external onlyProofAdmin {
        proofBurnerAddress = payable(newproofBurnerAddress);
    }

    //Factory functions
    function swapTradingStatus() external onlyFactory {
        tradingStatus = !tradingStatus;
    }

    function setLaunchedAt() external onlyFactory {
        require(launchedAt == 0, "already launched");
        launchedAt = block.timestamp;
        whitelistEndTime = block.timestamp + (60 * whitelistPeriod);
        whitelistMode = true;
    }

    function cancelToken() external onlyFactory {
        isFeeExempt[address(router)] = true;
        isTxLimitExempt[address(router)] = true;
        isTxLimitExempt[owner()] = true;
        tradingStatus = true;
        restrictWhales = false;
        swapAndLiquifyEnabled = false;
    }

    //Owner functions
    function changeFees(
        uint256 initialMainFee,
        uint256 initialMainFeeOnSell,
        uint256 initialLpFee,
        uint256 initialLpFeeOnSell,
        uint256 initialDevFee,
        uint256 initialDevFeeOnSell
    ) external onlyOwner {
        uint256 _proofFee;
        uint256 _proofFeeOnSell;
        if ((block.timestamp > launchedAt + 31 days) && (launchedAt != 0)) {
            _proofFee = 0;
            _proofFeeOnSell = 0;
        } else if ((block.timestamp > launchedAt + 1 days) && (launchedAt != 0)) {
            _proofFee = 1;
            _proofFeeOnSell = 1;
        } else {
            _proofFee = 2;
            _proofFeeOnSell = 2;
        }
        mainFee = initialMainFee;
        lpFee = initialLpFee;
        devFee = initialDevFee;

        mainFeeOnSell = initialMainFeeOnSell;
        lpFeeOnSell = initialLpFeeOnSell;
        devFeeOnSell = initialDevFeeOnSell;

        if (initialDevFee + initialLpFee + initialMainFee == 0) {
            _proofFee = 0;
        } 
        totalFee = initialDevFee + initialLpFee + initialMainFee + _proofFee;

        if (initialDevFeeOnSell + initialLpFeeOnSell + initialMainFeeOnSell == 0) {
            _proofFeeOnSell = 0;
        }
        totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + initialMainFeeOnSell + _proofFeeOnSell;

        proofFee = _proofFee;
        proofFeeOnSell = _proofFeeOnSell;

        if (IFACTORY(factory).isWhitelisted(owner())) {
            require(totalFee <= 12, "high fee");
            require(totalFeeIfSelling <= 17, "high fee");
        } else {
            require(totalFee <= 7, "high fee");
            require(totalFeeIfSelling <= 7, "high fee");
        }
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        require(launchedAt != 0, "!launched");
        require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%");	
        require(newLimit <= (_totalSupply * 3) / 100, "Max 3%");
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(launchedAt != 0, "!launched");
        require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%");	
        require(newLimit <= (_totalSupply * 3) / 100, "Max 3%");
        _walletMax = newLimit;
    }

    function changeRestrictWhales(bool newValue) external onlyOwner {
        require(launchedAt != 0, "!launched");
        restrictWhales = newValue;
    }

    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setMainWallet(address payable newMainWallet) external onlyOwner {
        mainWallet = newMainWallet;
    }


    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function isWhitelisted(address user) public view returns (bool) {
        return userWhitelist[user];
    }

    function getCirculatingSupply() external view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view virtual override 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 value {ERC20} uses, unless this function is
     * 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() external view virtual override returns (uint8) {
        return 9;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override 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 `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount
    ) external virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     *
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * 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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) external virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) external virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(tradingStatus, "Trading Closed");
        if(whitelistMode) {
            if (block.timestamp >= whitelistEndTime ) {
                whitelistMode = false;
            } else {
                if (sender == pair) { //buy
                    require(isWhitelisted(recipient), "Not whitelisted");
                } else if (recipient == pair) { //sell
                    require(isWhitelisted(sender), "Not whitelisted");
                } else { //transfer
                    require(isWhitelisted(sender) && isWhitelisted(recipient), "Not Whitelisted");
                }
            }
        }

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (recipient == pair && restrictWhales) {	
            require(	
                amount <= _maxTxAmount ||	
                    (isTxLimitExempt[sender] && isTxLimitExempt[recipient]),	
                "Max TX"	
            );	
        }	
        if (!isTxLimitExempt[recipient] && restrictWhales) {	
            require(_balances[recipient] + amount <= _walletMax, "Max Wallet");	
        }

        if (!proofFeeRemoved && launchedAt != 0) { //first 31 days only
            if (!proofFeeReduced) { //case where proofFee is still 2, check if we can reduce
                if (block.timestamp > launchedAt + 86400) {
                    proofFee = (devFee + lpFee + mainFee == 0) ? 0 : 1;
                    proofFeeOnSell = (devFeeOnSell + lpFeeOnSell + mainFeeOnSell == 0) ? 0 : 1;
                    totalFee = devFee + lpFee + mainFee + proofFee;
                    totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFeeOnSell;
                    proofFeeReduced = true;
                }
            } else {
                if (block.timestamp > launchedAt + 31 days) {
                    proofFee = 0;
                    proofFeeOnSell = 0;
                    totalFee = devFee + lpFee + mainFee + proofFee;
                    totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFeeOnSell;
                    proofFeeRemoved = true;
                }
            }
        }

        if (
            sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            (accMainFees + accLpFees + accDevFees + accProofFees) >= swapThreshold
        ) {
            swapBack();
        }

        _balances[sender] = _balances[sender] - amount;
        uint256 finalAmount = amount;

        if (sender == pair || recipient == pair) {
            finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
                ? takeFee(sender, recipient, amount)
                : amount;
        }

        _balances[recipient] = _balances[recipient] + finalAmount;

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */

    /**
     * @dev Sets `amount` 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.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable;
        uint256 _mainApplicable;
        uint256 _lpApplicable;
        uint256 _devApplicable;
        uint256 _proofApplicable;
        if (pair == recipient) {
            feeApplicable = totalFeeIfSelling;
            _mainApplicable = mainFeeOnSell;
            _lpApplicable = lpFeeOnSell;
            _devApplicable = devFeeOnSell;
            _proofApplicable = proofFeeOnSell;
        } else {
            feeApplicable = totalFee;
            _mainApplicable = mainFee;
            _lpApplicable = lpFee;
            _devApplicable = devFee;
            _proofApplicable = proofFee;
        }
        if (feeApplicable == 0) return(amount);
        uint256 feeAmount = (amount * feeApplicable) / 100;

        accMainFees += feeAmount * _mainApplicable / feeApplicable;
        accLpFees += feeAmount * _lpApplicable / feeApplicable;
        accDevFees += feeAmount * _devApplicable / feeApplicable;
        accProofFees += feeAmount * _proofApplicable / feeApplicable;

        _balances[address(this)] = _balances[address(this)] + feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function swapBack() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];

        uint256 lpProportion = accLpFees;
        uint256 devProportion = accDevFees;
        uint256 mainProportion = accMainFees;
        uint256 proofProportion = accProofFees;
        
        uint256 totalProportion = lpProportion + devProportion + mainProportion + proofProportion;

        uint256 lpAmt = tokensToLiquify * lpProportion / totalProportion;
        uint256 devBalance;
        uint256 proofBalance;

        uint256 amountToLiquify = lpAmt / 2;

        if (tokensToLiquify - amountToLiquify == 0) return;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            (tokensToLiquify - amountToLiquify),
            0,
            path,
            address(this),
            block.timestamp
        );

        // Use sell ratios if buy tax too low

        uint256 amountA;
        if (amountToLiquify > 0) {
            (amountA,,) = router.addLiquidityETH{value: ((address(this).balance * amountToLiquify) / (totalProportion - amountToLiquify))}(
                address(this),
                amountToLiquify,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp
            );
        }
        accLpFees = lpProportion < (lpAmt - (amountToLiquify - amountA)) ? 0 : 
            (lpProportion - (lpAmt - (amountToLiquify - amountA)));

        uint256 amountETHafterLP = address(this).balance;

        if (totalProportion - lpProportion == 0) return;
        proofBalance = (amountETHafterLP * proofProportion) / (devProportion + proofProportion + mainProportion);
        devBalance = amountETHafterLP * devProportion / (devProportion + proofProportion + mainProportion);
        uint256 amountEthMain = amountETHafterLP - devBalance - proofBalance;

        accDevFees = devProportion < (tokensToLiquify * devProportion / totalProportion) ? 0 : 
            (devProportion - (tokensToLiquify * devProportion / totalProportion));
        accMainFees = mainProportion < (tokensToLiquify * mainProportion / totalProportion) ? 0 : 
            (mainProportion - (tokensToLiquify * mainProportion / totalProportion));
        accProofFees = proofProportion < (tokensToLiquify * proofProportion / totalProportion) ? 0 : 
            (proofProportion - (tokensToLiquify * proofProportion / totalProportion));

        if (amountETHafterLP > 0) {
            if (proofBalance > 0) {
                uint256 revenueSplit = proofBalance / 2;
                (bool sent, ) = payable(IFACTORY(factory).proofRevenueAddress()).call{value: revenueSplit}("");
                require(sent);
                (bool sent1, ) = payable(IFACTORY(factory).proofRewardPoolAddress()).call{value: revenueSplit}("");
                require(sent1);
            }
            if (devBalance > 0) {
                (bool sent, ) = devWallet.call{value: devBalance}("");
                require(sent);
            }
            if (amountEthMain > 0) {
                (bool sent1, ) = mainWallet.call{value: amountEthMain}("");
                require(sent1);
            }
        }
    }

    function _addWhitelist(address[] memory _whitelists) internal {
        uint256 length = _whitelists.length;
        for (uint256 i = 0; i < length; i++) {
            userWhitelist[_whitelists[i]] = true;
        }
    }

    function addMoreToWhitelist(WhitelistAdd_ memory _WhitelistAdd) external onlyFactory {
        _addWhitelist(_WhitelistAdd.whitelists);
    }

    function addNFTSnapshot() external onlyFactory {
        uint256 len = nftWhitelist.totalSupply() + 1;
        for (uint256 i = 1; i < len; ) {
            userWhitelist[nftWhitelist.ownerOf(i)] = true;
            unchecked { ++i; }
        }
    }

    function withdrawAndSync() external onlyOwner {
        _transfer(address(this), msg.sender, balanceOf(address(this)) - (accMainFees + accLpFees + accDevFees + accProofFees));
    }

    receive() external payable {}
}

File 2 of 11 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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 3 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` 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 amount) external returns (bool);
}

File 4 of 11 : IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of ERC721A.
 */
interface IERC721A {

    function totalSupply() external view returns (uint256);


    function ownerOf(uint256 tokenId) external view returns (address owner);

}

File 5 of 11 : IFACTORY.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

interface IFACTORY {
    function proofRevenueAddress() external view returns (address);

    function proofRewardPoolAddress() external view returns (address);

    function isWhitelisted(address user) external view returns(bool);
}

File 6 of 11 : IProofNonReflectionTokenCutter.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "../libraries/ProofNonReflectionTokenFees.sol";

interface IProofNonReflectionTokenCutter is IERC20, IERC20Metadata {
    struct BaseData {
        string tokenName;
        string tokenSymbol;
        uint256 initialSupply;
        uint256 percentToLP;
        uint256 whitelistPeriod;
        address owner;
        address dev;
        address main;
        address routerAddress;
        address initialProofAdmin;
        address[] whitelists;
        address nftWhitelist;
    }

    struct WhitelistAdd_ {
        address [] whitelists;
    }

    function setBasicData(
        BaseData memory _baseData,
        ProofNonReflectionTokenFees.allFees memory fees
    ) external;

    function addMoreToWhitelist(
        WhitelistAdd_ memory _WhitelistAdd
    ) external;

    function updateWhitelistPeriod(
        uint256 _whitelistPeriod
    ) external;

    function addNFTSnapshot() external;

        function changeFees(
        uint256 initialMainFee,
        uint256 initialMainFeeOnSell,
        uint256 initialLpFee,
        uint256 initialLpFeeOnSell,
        uint256 initialDevFee,
        uint256 initialDevFeeOnSell
    ) external;
}

File 7 of 11 : IUniswapV2Factory.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

File 8 of 11 : IUniswapV2Router02.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

File 9 of 11 : Context.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 10 of 11 : Ownable.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

import "./Context.sol";

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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 {
        require(owner() == _msgSender(), "caller is not the owner");
    }

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

File 11 of 11 : ProofNonReflectionTokenFees.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.17;

library ProofNonReflectionTokenFees {
    struct allFees {
        uint256 mainFee;
        uint256 mainFeeOnSell;
        uint256 lpFee;
        uint256 lpFeeOnSell;
        uint256 devFee;
        uint256 devFeeOnSell;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "yul": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"whitelists","type":"address[]"}],"internalType":"struct IProofNonReflectionTokenCutter.WhitelistAdd_","name":"_WhitelistAdd","type":"tuple"}],"name":"addMoreToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addNFTSnapshot","outputs":[],"stateMutability":"nonpayable","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":"amount","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":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMainFee","type":"uint256"},{"internalType":"uint256","name":"initialMainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftWhitelist","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofBurnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFeeReduced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFeeRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"percentToLP","type":"uint256"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"main","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialProofAdmin","type":"address"},{"internalType":"address[]","name":"whitelists","type":"address[]"},{"internalType":"address","name":"nftWhitelist","type":"address"}],"internalType":"struct IProofNonReflectionTokenCutter.BaseData","name":"_baseData","type":"tuple"},{"components":[{"internalType":"uint256","name":"mainFee","type":"uint256"},{"internalType":"uint256","name":"mainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"}],"internalType":"struct ProofNonReflectionTokenFees.allFees","name":"fees","type":"tuple"}],"name":"setBasicData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMainWallet","type":"address"}],"name":"setMainWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"amount","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":"newAdmin","type":"address"}],"name":"updateProofAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newproofBurnerAddress","type":"address"}],"name":"updateProofBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistPeriod","type":"uint256"}],"name":"updateWhitelistPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a805460ff19166001179055600c805460ff60a01b1916600160a01b17905560026011819055601255601b805461ffff191690556024805461010160a81b61ffff60a81b199091161790553480156200005d57600080fd5b50620000693362000081565b602280546001600160a01b03191633179055620000d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613c6d80620000e16000396000f3fe6080604052600436106103fe5760003560e01c8063807c2d9c11610213578063c45a015511610123578063e572967b116100ab578063f2fde38b1161007a578063f2fde38b14610bc8578063f576f53914610be8578063f887ea4014610bfd578063fabe628314610c1d578063fbd7575314610c3d57600080fd5b8063e572967b14610b52578063e66b1d1e14610b72578063ebdfd72214610b92578063f16fd78d14610ba857600080fd5b8063d0a5eb4e116100f2578063d0a5eb4e14610a7b578063d4fb9a0114610a9b578063d741b9c314610abc578063d920334e14610aec578063dd62ed3e14610b0c57600080fd5b8063c45a015514610a0f578063ca987b0e14610a2f578063cb29813c14610a45578063cd1e330a14610a6557600080fd5b806395d89b41116101a6578063a8aa1b3111610175578063a8aa1b3114610983578063a9059cbb146109a3578063b48e665e146109c3578063b72344a2146109d9578063bf56b371146109f957600080fd5b806395d89b4114610918578063985b9db01461092d578063a3a2e89e14610943578063a457c2d71461096357600080fd5b80638b42507f116101e25780638b42507f146108945780638da5cb5b146108c45780638ea5220f146108e25780639502c4261461090257600080fd5b8063807c2d9c1461082f578063838420131461084557806388cda8731461085f5780638a1c7b841461087e57600080fd5b80633f4218e01161030e57806365359892116102a157806370c757ec1161027057806370c757ec146107ad578063715018a6146107ce5780637c0ff205146107e35780637d1db4a5146107f95780637db1342c1461080f57600080fd5b8063653598921461072b5780636827e7641461074b578063704ce43e1461076157806370a082311461077757600080fd5b80634a74bb02116102dd5780634a74bb02146106c0578063546a8811146106e157806359a51c34146106f65780635fef86801461071657600080fd5b80633f4218e0146106265780634355855a1461065657806344de2e4c14610686578063497a000a146106a057600080fd5b806323b62b75116103915780632b112e49116103605780632b112e4914610595578063313ce567146105aa57806339509351146105c65780633af32abf146105e65780633dab52691461060657600080fd5b806323b62b751461052057806323b872dd1461054057806327193bc414610560578063283744251461057557600080fd5b80630ab16c19116103cd5780630ab16c191461049b57806318160ddd146104d35780631df4ccfc146104e85780631f53ac02146104fe57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b3146104555780630963da6c1461048557600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060275481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b50610448610c52565b60405161042a91906132a8565b34801561046157600080fd5b5061047561047036600461331b565b610ce4565b604051901515815260200161042a565b34801561049157600080fd5b5061042060135481565b3480156104a757600080fd5b50600c546104bb906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b3480156104df57600080fd5b50600354610420565b3480156104f457600080fd5b5061042060195481565b34801561050a57600080fd5b5061051e610519366004613347565b610cfe565b005b34801561052c57600080fd5b506024546104bb906001600160a01b031681565b34801561054c57600080fd5b5061047561055b366004613364565b610d28565b34801561056c57600080fd5b5061051e610d4f565b34801561058157600080fd5b506006546104bb906001600160a01b031681565b3480156105a157600080fd5b50610420610df9565b3480156105b657600080fd5b506040516009815260200161042a565b3480156105d257600080fd5b506104756105e136600461331b565b610e69565b3480156105f257600080fd5b50610475610601366004613347565b610ea8565b34801561061257600080fd5b5061051e6106213660046133b3565b610ec6565b34801561063257600080fd5b50610475610641366004613347565b600d6020526000908152604090205460ff1681565b34801561066257600080fd5b50610475610671366004613347565b600f6020526000908152604090205460ff1681565b34801561069257600080fd5b50600a546104759060ff1681565b3480156106ac57600080fd5b5061051e6106bb3660046133d1565b610ef0565b3480156106cc57600080fd5b5060245461047590600160a81b900460ff1681565b3480156106ed57600080fd5b5061051e610f50565b34801561070257600080fd5b506007546104bb906001600160a01b031681565b34801561072257600080fd5b5061051e610ff0565b34801561073757600080fd5b5061051e6107463660046135ce565b611049565b34801561075757600080fd5b5061042060155481565b34801561076d57600080fd5b5061042060145481565b34801561078357600080fd5b50610420610792366004613347565b6001600160a01b031660009081526001602052604090205490565b3480156107b957600080fd5b50600c5461047590600160a01b900460ff1681565b3480156107da57600080fd5b5061051e6117e3565b3480156107ef57600080fd5b5061042060175481565b34801561080557600080fd5b5061042060255481565b34801561081b57600080fd5b5061051e61082a3660046133d1565b6117f7565b34801561083b57600080fd5b5061042060265481565b34801561085157600080fd5b50601b546104759060ff1681565b34801561086b57600080fd5b50601b5461047590610100900460ff1681565b34801561088a57600080fd5b5061042060125481565b3480156108a057600080fd5b506104756108af366004613347565b600e6020526000908152604090205460ff1681565b3480156108d057600080fd5b506000546001600160a01b03166104bb565b3480156108ee57600080fd5b506023546104bb906001600160a01b031681565b34801561090e57600080fd5b5061042060185481565b34801561092457600080fd5b506104486118cf565b34801561093957600080fd5b5061042060165481565b34801561094f57600080fd5b5061051e61095e366004613723565b6118de565b34801561096f57600080fd5b5061047561097e36600461331b565b611911565b34801561098f57600080fd5b506021546104bb906001600160a01b031681565b3480156109af57600080fd5b506104756109be36600461331b565b6119ae565b3480156109cf57600080fd5b5061042060095481565b3480156109e557600080fd5b5061051e6109f4366004613347565b6119bc565b348015610a0557600080fd5b5061042060105481565b348015610a1b57600080fd5b506022546104bb906001600160a01b031681565b348015610a3b57600080fd5b50610420601a5481565b348015610a5157600080fd5b5061051e610a6036600461375c565b611a08565b348015610a7157600080fd5b5061042060115481565b348015610a8757600080fd5b5061051e610a96366004613347565b611c59565b348015610aa757600080fd5b5060245461047590600160b01b900460ff1681565b348015610ac857600080fd5b50610475610ad7366004613347565b600b6020526000908152604090205460ff1681565b348015610af857600080fd5b5061051e610b073660046133d1565b611c83565b348015610b1857600080fd5b50610420610b2736600461379f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b5061051e610b6d3660046137cd565b611d5b565b348015610b7e57600080fd5b5061051e610b8d366004613850565b611d90565b348015610b9e57600080fd5b5061042060085481565b348015610bb457600080fd5b5061051e610bc3366004613347565b611dcd565b348015610bd457600080fd5b5061051e610be3366004613347565b611e31565b348015610bf457600080fd5b5061051e611e98565b348015610c0957600080fd5b506020546104bb906001600160a01b031681565b348015610c2957600080fd5b5061051e610c38366004613723565b611ff0565b348015610c4957600080fd5b5061051e612023565b606060048054610c619061386d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d9061386d565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf281858561206e565b60019150505b92915050565b610d06612192565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610d368582856121ec565b610d4185858561227e565b5060019150505b9392505050565b6022546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d79906138a7565b60405180910390fd5b60105415610dc55760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d79565b42601055600954610dd790603c6138ff565b610de19042613916565b600855600c805460ff60a01b1916600160a01b179055565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600354919291610e5a9190613929565b610e649190613929565b905090565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610cf29082908690610ea3908790613916565b61206e565b6001600160a01b03166000908152600b602052604090205460ff1690565b610ece612192565b60248054921515600160a81b0260ff60a81b1990931692909217909155602755565b6007546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610d799061393c565b6009819055610f2a81603c6138ff565b601054610f379190613916565b60085550600c805460ff60a01b1916600160a01b179055565b6022546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610d79906138a7565b602080546001600160a01b039081166000908152600d835260408082208054600160ff199182168117909255855485168452600e909552818320805486168217905582549093168252902080548316909117905560248054600a805490931690925561ffff60a81b19909116600160b01b179055565b610ff8612192565b6110463033601f54601e54601d54601c546110139190613916565b61101d9190613916565b6110279190613916565b306000908152600160205260409020546110419190613929565b61227e565b50565b6022546001600160a01b031633146110735760405162461bcd60e51b8152600401610d79906138a7565b815160049061108290826139cf565b50602082015160059061109590826139cf565b5060408201516003556060820151604611156110dd5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d79565b6103e8826040015160056110f191906138ff565b6110fb9190613a8f565b60255560408201516064906111119060016138ff565b61111b9190613a8f565b6026556040820151610fa0906111329060056138ff565b61113c9190613a8f565b602755610100820151602080546001600160a01b0319166001600160a01b0390921691821781556040805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190613ab1565b60208054604080516315ab88c960e31b815290516001600160a01b039485169463c9c653969493169263ad5c464892600480820193918290030181865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190613ab1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190613ab1565b602180546001600160a01b0319166001600160a01b0392831617815530600081815260026020908152604080832082548716845282528083206000199055928252600b9052818120805460ff199081166001908117909255602254861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161136b9061287f565b610160820151600c80546001600160a01b0319166001600160a01b03928316179055306000908152600d60209081526040808320805460ff1990811660019081179092556022805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600e865284872080548416851790556021548816875284872080548416851790559054909616855282852080548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548216831790559380527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909416179092556080808601516009559184015160148190556060850151601755918401516015819055928401516018558351601381905590840151601655916114a99190613916565b6114b39190613916565b6000036114c05760006011555b6011548151604083015160808401516114d99190613916565b6114e39190613916565b6114ed9190613916565b6019556020810151606082015160a08301516115099190613916565b6115139190613916565b6000036115205760006012555b601254816020015182606001518360a0015161153c9190613916565b6115469190613916565b6115509190613916565b601a5560225460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613ace565b1561165357600c601954111561160c5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b6011601a54111561164e5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b611699565b600760195411156116765760405162461bcd60e51b8152600401610d7990613aeb565b6007601a5411156116995760405162461bcd60e51b8152600401610d7990613aeb565b60c0820151602380546001600160a01b039283166001600160a01b03199182161790915560e08401516024805491841691831691909117905561012084015160078054919093169116179055606082015160408301516000916064916116ff91906138ff565b6117099190613a8f565b9050600081846040015161171d9190613929565b33600090815260016020526040812080549293508492909190611741908490613916565b909155505060a08401516001600160a01b031660009081526001602052604081208054839290611772908490613916565b90915550506040518281523390600090600080516020613c188339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613c18833981519152836040516117d591815260200190565b60405180910390a350505050565b6117eb612192565b6117f560006128ed565b565b6117ff612192565b6010546000036118215760405162461bcd60e51b8152600401610d7990613b0d565b6103e8600354600561183391906138ff565b61183d9190613a8f565b8110156118775760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b6064600354600361188891906138ff565b6118929190613a8f565b8111156118ca5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602655565b606060058054610c619061386d565b6118e6612192565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190838110156119965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b6119a3828686840361206e565b506001949350505050565b6000336119a381858561227e565b6007546001600160a01b031633146119e65760405162461bcd60e51b8152600401610d799061393c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611a10612192565b6000806010546228de80611a249190613916565b42118015611a33575060105415155b15611a4357506000905080611a79565b601054611a539062015180613916565b42118015611a62575060105415155b15611a7257506001905080611a79565b5060029050805b60138890556014869055601584905560168790556017859055601883905587611aa28786613916565b611aac9190613916565b600003611ab857600091505b8188611ac48887613916565b611ace9190613916565b611ad89190613916565b60195586611ae68685613916565b611af09190613916565b600003611afb575060005b8087601754601854611b0d9190613916565b611b179190613916565b611b219190613916565b601a55601182905560128190556022546001600160a01b0316633af32abf611b516000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613ace565b15611c0957600c6019541115611be15760405162461bcd60e51b8152600401610d7990613aeb565b6011601a541115611c045760405162461bcd60e51b8152600401610d7990613aeb565b611c4f565b60076019541115611c2c5760405162461bcd60e51b8152600401610d7990613aeb565b6007601a541115611c4f5760405162461bcd60e51b8152600401610d7990613aeb565b5050505050505050565b611c61612192565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b611c8b612192565b601054600003611cad5760405162461bcd60e51b8152600401610d7990613b0d565b6103e86003546005611cbf91906138ff565b611cc99190613a8f565b811015611d035760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b60646003546003611d1491906138ff565b611d1e9190613a8f565b811115611d565760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602555565b6022546001600160a01b03163314611d855760405162461bcd60e51b8152600401610d79906138a7565b80516110469061287f565b611d98612192565b601054600003611dba5760405162461bcd60e51b8152600401610d7990613b0d565b600a805460ff1916911515919091179055565b6007546001600160a01b03163314611df75760405162461bcd60e51b8152600401610d799061393c565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b611e39612192565b6001600160a01b038116611e8f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610d79565b611046816128ed565b6022546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610d79906138a7565b600c54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190613b30565b611f3b906001613916565b905060015b81811015611fec57600c546040516331a9108f60e11b815260048101839052600191600b916000916001600160a01b031690636352211e90602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613ab1565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611f40565b5050565b611ff8612192565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6022546001600160a01b0316331461204d5760405162461bcd60e51b8152600401610d79906138a7565b6024805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166120d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166121315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146117f55760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610d79565b6001600160a01b038381166000908152600260209081526040808320938616835292905220546000198114612278578181101561226b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d79565b612278848484840361206e565b50505050565b602454600090600160b01b900460ff166122cb5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d79565b600c54600160a01b900460ff16156123d05760085442106122f857600c805460ff60a01b191690556123d0565b6021546001600160a01b039081169085160361235a5761231783610ea8565b6123555760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d79565b6123d0565b6021546001600160a01b03908116908416036123795761231784610ea8565b61238284610ea8565b8015612392575061239283610ea8565b6123d05760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d79565b602454600160a01b900460ff16156123f4576123ed84848461293d565b9050610d48565b6021546001600160a01b0384811691161480156124135750600a5460ff165b15612499576025548211158061246457506001600160a01b0384166000908152600e602052604090205460ff16801561246457506001600160a01b0383166000908152600e602052604090205460ff165b6124995760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d79565b6001600160a01b0383166000908152600e602052604090205460ff161580156124c45750600a5460ff165b1561252b576026546001600160a01b0384166000908152600160205260409020546124f0908490613916565b111561252b5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d79565b601b5460ff1615801561253f575060105415155b156126c557601b54610100900460ff1661263d576010546125639062015180613916565b4211156126385760135460145460155461257d9190613916565b6125879190613916565b15612593576001612596565b60005b60ff166011556016546017546018546125af9190613916565b6125b99190613916565b156125c55760016125c8565b60005b60ff166012556011546013546014546015546125e49190613916565b6125ee9190613916565b6125f89190613916565b6019556012546016546017546018546126119190613916565b61261b9190613916565b6126259190613916565b601a55601b805461ff0019166101001790555b6126c5565b60105461264d906228de80613916565b4211156126c5576000601181905560128190556013546014546015546126739190613916565b61267d9190613916565b6126879190613916565b6019556012546016546017546018546126a09190613916565b6126aa9190613916565b6126b49190613916565b601a55601b805460ff191660011790555b6021546001600160a01b038581169116148015906126ed5750602454600160a01b900460ff16155b80156127025750602454600160a81b900460ff165b80156127395750602754601f54601e54601d54601c546127229190613916565b61272c9190613916565b6127369190613916565b10155b15612746576127466129e5565b6001600160a01b03841660009081526001602052604090205461276a908390613929565b6001600160a01b038086166000818152600160205260409020929092556021548492911614806127a757506021546001600160a01b038581169116145b15612806576001600160a01b0385166000908152600d602052604090205460ff161580156127ee57506001600160a01b0384166000908152600d602052604090205460ff16155b6127f85782612803565b6128038585856130f6565b90505b6001600160a01b03841660009081526001602052604090205461282a908290613916565b6001600160a01b038086166000818152600160205260409081902093909355915190871690600080516020613c188339815191529061286c9085815260200190565b60405180910390a3506001949350505050565b805160005b818110156128e8576001600b60008584815181106128a4576128a4613b49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128e081613b5f565b915050612884565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812054612961908390613929565b6001600160a01b038086166000908152600160205260408082209390935590851681522054612991908390613916565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020613c18833981519152906129d39086815260200190565b60405180910390a35060019392505050565b6024805460ff60a01b1916600160a01b17905530600090815260016020526040812054601d54601e54601c54601f549394929391929091908183612a298688613916565b612a339190613916565b612a3d9190613916565b9050600081612a4c87896138ff565b612a569190613a8f565b905060008080612a67600285613a8f565b9050612a73818b613929565b600003612a8957505050505050505050506130e7565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612abe57612abe613b49565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190613ab1565b81600181518110612b4d57612b4d613b49565b6001600160a01b03928316602091820292909201810191909152541663791ac947612b78848e613929565b60008430426040518663ffffffff1660e01b8152600401612b9d959493929190613b78565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b50505050600080831115612c91576020546001600160a01b031663f305d719612bf4858a613929565b612bfe86476138ff565b612c089190613a8f565b6040516001600160e01b031960e084901b16815230600482015260248101879052600060448201819052606482015261dead60848201524260a482015260c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613be9565b50909150505b612c9b8184613929565b612ca59087613929565b8b10612cce57612cb58184613929565b612cbf9087613929565b612cc9908c613929565b612cd1565b60005b601d5547612cdf8c89613929565b600003612cf857505050505050505050505050506130e7565b89612d038a8d613916565b612d0d9190613916565b612d178a836138ff565b612d219190613a8f565b945089612d2e8a8d613916565b612d389190613916565b612d428c836138ff565b612d4c9190613a8f565b9550600085612d5b8884613929565b612d659190613929565b9050888c8f612d7491906138ff565b612d7e9190613a8f565b8c10612daa57888c8f612d9191906138ff565b612d9b9190613a8f565b612da5908d613929565b612dad565b60005b601e81905550888b8f612dc091906138ff565b612dca9190613a8f565b8b10612df657888b8f612ddd91906138ff565b612de79190613a8f565b612df1908c613929565b612df9565b60005b601c81905550888a8f612e0c91906138ff565b612e169190613a8f565b8a10612e4257888a8f612e2991906138ff565b612e339190613a8f565b612e3d908b613929565b612e45565b60005b601f5581156130d8578515613008576000612e61600288613a8f565b90506000602260009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613ab1565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f26576040519150601f19603f3d011682016040523d82523d6000602084013e612f2b565b606091505b5050905080612f3957600080fd5b6022546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa79190613ab1565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b505090508061300457600080fd5b5050505b8615613070576023546040516000916001600160a01b03169089908381818185875af1925050503d806000811461305b576040519150601f19603f3d011682016040523d82523d6000602084013e613060565b606091505b505090508061306e57600080fd5b505b80156130d8576024546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50509050806130d657600080fd5b505b50505050505050505050505050505b6024805460ff60a01b19169055565b602154600090819081908190819081906001600160a01b03808a1691160361313657601a5494506016549350601754925060185491506012549050613150565b601954945060135493506014549250601554915060115490505b84600003613165578695505050505050610d48565b60006064613173878a6138ff565b61317d9190613a8f565b90508561318a86836138ff565b6131949190613a8f565b601c60008282546131a59190613916565b909155508690506131b685836138ff565b6131c09190613a8f565b601d60008282546131d19190613916565b909155508690506131e284836138ff565b6131ec9190613a8f565b601e60008282546131fd9190613916565b9091555086905061320e83836138ff565b6132189190613a8f565b601f60008282546132299190613916565b909155505030600090815260016020526040902054613249908290613916565b30600081815260016020526040908190209290925590516001600160a01b038c1690600080516020613c18833981519152906132889085815260200190565b60405180910390a361329a8189613929565b9a9950505050505050505050565b600060208083528351808285015260005b818110156132d5578581018301518582016040015282016132b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104657600080fd5b8035613316816132f6565b919050565b6000806040838503121561332e57600080fd5b8235613339816132f6565b946020939093013593505050565b60006020828403121561335957600080fd5b8135610d48816132f6565b60008060006060848603121561337957600080fd5b8335613384816132f6565b92506020840135613394816132f6565b929592945050506040919091013590565b801515811461104657600080fd5b600080604083850312156133c657600080fd5b8235613339816133a5565b6000602082840312156133e357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613424576134246133ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613453576134536133ea565b604052919050565b600082601f83011261346c57600080fd5b813567ffffffffffffffff811115613486576134866133ea565b613499601f8201601f191660200161342a565b8181528460208386010111156134ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126134dc57600080fd5b8135602067ffffffffffffffff8211156134f8576134f86133ea565b8160051b61350782820161342a565b928352848101820192828101908785111561352157600080fd5b83870192505b8483101561354957823561353a816132f6565b82529183019190830190613527565b979650505050505050565b600060c0828403121561356657600080fd5b60405160c0810181811067ffffffffffffffff82111715613589576135896133ea565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156135e157600080fd5b823567ffffffffffffffff808211156135f957600080fd5b90840190610180828703121561360e57600080fd5b613616613400565b82358281111561362557600080fd5b6136318882860161345b565b82525060208301358281111561364657600080fd5b6136528882860161345b565b60208301525060408301356040820152606083013560608201526080830135608082015261368260a0840161330b565b60a082015261369360c0840161330b565b60c08201526136a460e0840161330b565b60e08201526101006136b781850161330b565b908201526101206136c984820161330b565b9082015261014083810135838111156136e157600080fd5b6136ed898287016134cb565b828401525050610160915061370382840161330b565b8282015280945050505061371a8460208501613554565b90509250929050565b6000806040838503121561373657600080fd5b8235613741816132f6565b91506020830135613751816133a5565b809150509250929050565b60008060008060008060c0878903121561377557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156137b257600080fd5b82356137bd816132f6565b91506020830135613751816132f6565b6000602082840312156137df57600080fd5b813567ffffffffffffffff808211156137f757600080fd5b908301906020828603121561380b57600080fd5b604051602081018181108382111715613826576138266133ea565b60405282358281111561383857600080fd5b613844878286016134cb565b82525095945050505050565b60006020828403121561386257600080fd5b8135610d48816133a5565b600181811c9082168061388157607f821691505b6020821081036138a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf857610cf86138e9565b80820180821115610cf857610cf86138e9565b81810381811115610cf857610cf86138e9565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b601f8211156128e857600081815260208120601f850160051c810160208610156139a85750805b601f850160051c820191505b818110156139c7578281556001016139b4565b505050505050565b815167ffffffffffffffff8111156139e9576139e96133ea565b6139fd816139f7845461386d565b84613981565b602080601f831160018114613a325760008415613a1a5750858301515b600019600386901b1c1916600185901b1785556139c7565b600085815260208120601f198616915b82811015613a6157888601518255948401946001909101908401613a42565b5085821015613a7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ac357600080fd5b8151610d48816132f6565b600060208284031215613ae057600080fd5b8151610d48816133a5565b602080825260089082015267686967682066656560c01b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060208284031215613b4257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613b7157613b716138e9565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613bc85784516001600160a01b031683529383019391830191600101613ba3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613bfe57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a532a83dcac57ae5df052ab3eac0cc0b52b43a0f19d31844a3cc578ff73734364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c8063807c2d9c11610213578063c45a015511610123578063e572967b116100ab578063f2fde38b1161007a578063f2fde38b14610bc8578063f576f53914610be8578063f887ea4014610bfd578063fabe628314610c1d578063fbd7575314610c3d57600080fd5b8063e572967b14610b52578063e66b1d1e14610b72578063ebdfd72214610b92578063f16fd78d14610ba857600080fd5b8063d0a5eb4e116100f2578063d0a5eb4e14610a7b578063d4fb9a0114610a9b578063d741b9c314610abc578063d920334e14610aec578063dd62ed3e14610b0c57600080fd5b8063c45a015514610a0f578063ca987b0e14610a2f578063cb29813c14610a45578063cd1e330a14610a6557600080fd5b806395d89b41116101a6578063a8aa1b3111610175578063a8aa1b3114610983578063a9059cbb146109a3578063b48e665e146109c3578063b72344a2146109d9578063bf56b371146109f957600080fd5b806395d89b4114610918578063985b9db01461092d578063a3a2e89e14610943578063a457c2d71461096357600080fd5b80638b42507f116101e25780638b42507f146108945780638da5cb5b146108c45780638ea5220f146108e25780639502c4261461090257600080fd5b8063807c2d9c1461082f578063838420131461084557806388cda8731461085f5780638a1c7b841461087e57600080fd5b80633f4218e01161030e57806365359892116102a157806370c757ec1161027057806370c757ec146107ad578063715018a6146107ce5780637c0ff205146107e35780637d1db4a5146107f95780637db1342c1461080f57600080fd5b8063653598921461072b5780636827e7641461074b578063704ce43e1461076157806370a082311461077757600080fd5b80634a74bb02116102dd5780634a74bb02146106c0578063546a8811146106e157806359a51c34146106f65780635fef86801461071657600080fd5b80633f4218e0146106265780634355855a1461065657806344de2e4c14610686578063497a000a146106a057600080fd5b806323b62b75116103915780632b112e49116103605780632b112e4914610595578063313ce567146105aa57806339509351146105c65780633af32abf146105e65780633dab52691461060657600080fd5b806323b62b751461052057806323b872dd1461054057806327193bc414610560578063283744251461057557600080fd5b80630ab16c19116103cd5780630ab16c191461049b57806318160ddd146104d35780631df4ccfc146104e85780631f53ac02146104fe57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b3146104555780630963da6c1461048557600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060275481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b50610448610c52565b60405161042a91906132a8565b34801561046157600080fd5b5061047561047036600461331b565b610ce4565b604051901515815260200161042a565b34801561049157600080fd5b5061042060135481565b3480156104a757600080fd5b50600c546104bb906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b3480156104df57600080fd5b50600354610420565b3480156104f457600080fd5b5061042060195481565b34801561050a57600080fd5b5061051e610519366004613347565b610cfe565b005b34801561052c57600080fd5b506024546104bb906001600160a01b031681565b34801561054c57600080fd5b5061047561055b366004613364565b610d28565b34801561056c57600080fd5b5061051e610d4f565b34801561058157600080fd5b506006546104bb906001600160a01b031681565b3480156105a157600080fd5b50610420610df9565b3480156105b657600080fd5b506040516009815260200161042a565b3480156105d257600080fd5b506104756105e136600461331b565b610e69565b3480156105f257600080fd5b50610475610601366004613347565b610ea8565b34801561061257600080fd5b5061051e6106213660046133b3565b610ec6565b34801561063257600080fd5b50610475610641366004613347565b600d6020526000908152604090205460ff1681565b34801561066257600080fd5b50610475610671366004613347565b600f6020526000908152604090205460ff1681565b34801561069257600080fd5b50600a546104759060ff1681565b3480156106ac57600080fd5b5061051e6106bb3660046133d1565b610ef0565b3480156106cc57600080fd5b5060245461047590600160a81b900460ff1681565b3480156106ed57600080fd5b5061051e610f50565b34801561070257600080fd5b506007546104bb906001600160a01b031681565b34801561072257600080fd5b5061051e610ff0565b34801561073757600080fd5b5061051e6107463660046135ce565b611049565b34801561075757600080fd5b5061042060155481565b34801561076d57600080fd5b5061042060145481565b34801561078357600080fd5b50610420610792366004613347565b6001600160a01b031660009081526001602052604090205490565b3480156107b957600080fd5b50600c5461047590600160a01b900460ff1681565b3480156107da57600080fd5b5061051e6117e3565b3480156107ef57600080fd5b5061042060175481565b34801561080557600080fd5b5061042060255481565b34801561081b57600080fd5b5061051e61082a3660046133d1565b6117f7565b34801561083b57600080fd5b5061042060265481565b34801561085157600080fd5b50601b546104759060ff1681565b34801561086b57600080fd5b50601b5461047590610100900460ff1681565b34801561088a57600080fd5b5061042060125481565b3480156108a057600080fd5b506104756108af366004613347565b600e6020526000908152604090205460ff1681565b3480156108d057600080fd5b506000546001600160a01b03166104bb565b3480156108ee57600080fd5b506023546104bb906001600160a01b031681565b34801561090e57600080fd5b5061042060185481565b34801561092457600080fd5b506104486118cf565b34801561093957600080fd5b5061042060165481565b34801561094f57600080fd5b5061051e61095e366004613723565b6118de565b34801561096f57600080fd5b5061047561097e36600461331b565b611911565b34801561098f57600080fd5b506021546104bb906001600160a01b031681565b3480156109af57600080fd5b506104756109be36600461331b565b6119ae565b3480156109cf57600080fd5b5061042060095481565b3480156109e557600080fd5b5061051e6109f4366004613347565b6119bc565b348015610a0557600080fd5b5061042060105481565b348015610a1b57600080fd5b506022546104bb906001600160a01b031681565b348015610a3b57600080fd5b50610420601a5481565b348015610a5157600080fd5b5061051e610a6036600461375c565b611a08565b348015610a7157600080fd5b5061042060115481565b348015610a8757600080fd5b5061051e610a96366004613347565b611c59565b348015610aa757600080fd5b5060245461047590600160b01b900460ff1681565b348015610ac857600080fd5b50610475610ad7366004613347565b600b6020526000908152604090205460ff1681565b348015610af857600080fd5b5061051e610b073660046133d1565b611c83565b348015610b1857600080fd5b50610420610b2736600461379f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b5061051e610b6d3660046137cd565b611d5b565b348015610b7e57600080fd5b5061051e610b8d366004613850565b611d90565b348015610b9e57600080fd5b5061042060085481565b348015610bb457600080fd5b5061051e610bc3366004613347565b611dcd565b348015610bd457600080fd5b5061051e610be3366004613347565b611e31565b348015610bf457600080fd5b5061051e611e98565b348015610c0957600080fd5b506020546104bb906001600160a01b031681565b348015610c2957600080fd5b5061051e610c38366004613723565b611ff0565b348015610c4957600080fd5b5061051e612023565b606060048054610c619061386d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d9061386d565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf281858561206e565b60019150505b92915050565b610d06612192565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610d368582856121ec565b610d4185858561227e565b5060019150505b9392505050565b6022546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d79906138a7565b60405180910390fd5b60105415610dc55760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d79565b42601055600954610dd790603c6138ff565b610de19042613916565b600855600c805460ff60a01b1916600160a01b179055565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600354919291610e5a9190613929565b610e649190613929565b905090565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610cf29082908690610ea3908790613916565b61206e565b6001600160a01b03166000908152600b602052604090205460ff1690565b610ece612192565b60248054921515600160a81b0260ff60a81b1990931692909217909155602755565b6007546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610d799061393c565b6009819055610f2a81603c6138ff565b601054610f379190613916565b60085550600c805460ff60a01b1916600160a01b179055565b6022546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610d79906138a7565b602080546001600160a01b039081166000908152600d835260408082208054600160ff199182168117909255855485168452600e909552818320805486168217905582549093168252902080548316909117905560248054600a805490931690925561ffff60a81b19909116600160b01b179055565b610ff8612192565b6110463033601f54601e54601d54601c546110139190613916565b61101d9190613916565b6110279190613916565b306000908152600160205260409020546110419190613929565b61227e565b50565b6022546001600160a01b031633146110735760405162461bcd60e51b8152600401610d79906138a7565b815160049061108290826139cf565b50602082015160059061109590826139cf565b5060408201516003556060820151604611156110dd5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d79565b6103e8826040015160056110f191906138ff565b6110fb9190613a8f565b60255560408201516064906111119060016138ff565b61111b9190613a8f565b6026556040820151610fa0906111329060056138ff565b61113c9190613a8f565b602755610100820151602080546001600160a01b0319166001600160a01b0390921691821781556040805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190613ab1565b60208054604080516315ab88c960e31b815290516001600160a01b039485169463c9c653969493169263ad5c464892600480820193918290030181865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190613ab1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190613ab1565b602180546001600160a01b0319166001600160a01b0392831617815530600081815260026020908152604080832082548716845282528083206000199055928252600b9052818120805460ff199081166001908117909255602254861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161136b9061287f565b610160820151600c80546001600160a01b0319166001600160a01b03928316179055306000908152600d60209081526040808320805460ff1990811660019081179092556022805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600e865284872080548416851790556021548816875284872080548416851790559054909616855282852080548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548216831790559380527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909416179092556080808601516009559184015160148190556060850151601755918401516015819055928401516018558351601381905590840151601655916114a99190613916565b6114b39190613916565b6000036114c05760006011555b6011548151604083015160808401516114d99190613916565b6114e39190613916565b6114ed9190613916565b6019556020810151606082015160a08301516115099190613916565b6115139190613916565b6000036115205760006012555b601254816020015182606001518360a0015161153c9190613916565b6115469190613916565b6115509190613916565b601a5560225460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613ace565b1561165357600c601954111561160c5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b6011601a54111561164e5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b611699565b600760195411156116765760405162461bcd60e51b8152600401610d7990613aeb565b6007601a5411156116995760405162461bcd60e51b8152600401610d7990613aeb565b60c0820151602380546001600160a01b039283166001600160a01b03199182161790915560e08401516024805491841691831691909117905561012084015160078054919093169116179055606082015160408301516000916064916116ff91906138ff565b6117099190613a8f565b9050600081846040015161171d9190613929565b33600090815260016020526040812080549293508492909190611741908490613916565b909155505060a08401516001600160a01b031660009081526001602052604081208054839290611772908490613916565b90915550506040518281523390600090600080516020613c188339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613c18833981519152836040516117d591815260200190565b60405180910390a350505050565b6117eb612192565b6117f560006128ed565b565b6117ff612192565b6010546000036118215760405162461bcd60e51b8152600401610d7990613b0d565b6103e8600354600561183391906138ff565b61183d9190613a8f565b8110156118775760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b6064600354600361188891906138ff565b6118929190613a8f565b8111156118ca5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602655565b606060058054610c619061386d565b6118e6612192565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190838110156119965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b6119a3828686840361206e565b506001949350505050565b6000336119a381858561227e565b6007546001600160a01b031633146119e65760405162461bcd60e51b8152600401610d799061393c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611a10612192565b6000806010546228de80611a249190613916565b42118015611a33575060105415155b15611a4357506000905080611a79565b601054611a539062015180613916565b42118015611a62575060105415155b15611a7257506001905080611a79565b5060029050805b60138890556014869055601584905560168790556017859055601883905587611aa28786613916565b611aac9190613916565b600003611ab857600091505b8188611ac48887613916565b611ace9190613916565b611ad89190613916565b60195586611ae68685613916565b611af09190613916565b600003611afb575060005b8087601754601854611b0d9190613916565b611b179190613916565b611b219190613916565b601a55601182905560128190556022546001600160a01b0316633af32abf611b516000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613ace565b15611c0957600c6019541115611be15760405162461bcd60e51b8152600401610d7990613aeb565b6011601a541115611c045760405162461bcd60e51b8152600401610d7990613aeb565b611c4f565b60076019541115611c2c5760405162461bcd60e51b8152600401610d7990613aeb565b6007601a541115611c4f5760405162461bcd60e51b8152600401610d7990613aeb565b5050505050505050565b611c61612192565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b611c8b612192565b601054600003611cad5760405162461bcd60e51b8152600401610d7990613b0d565b6103e86003546005611cbf91906138ff565b611cc99190613a8f565b811015611d035760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b60646003546003611d1491906138ff565b611d1e9190613a8f565b811115611d565760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602555565b6022546001600160a01b03163314611d855760405162461bcd60e51b8152600401610d79906138a7565b80516110469061287f565b611d98612192565b601054600003611dba5760405162461bcd60e51b8152600401610d7990613b0d565b600a805460ff1916911515919091179055565b6007546001600160a01b03163314611df75760405162461bcd60e51b8152600401610d799061393c565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b611e39612192565b6001600160a01b038116611e8f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610d79565b611046816128ed565b6022546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610d79906138a7565b600c54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190613b30565b611f3b906001613916565b905060015b81811015611fec57600c546040516331a9108f60e11b815260048101839052600191600b916000916001600160a01b031690636352211e90602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613ab1565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611f40565b5050565b611ff8612192565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6022546001600160a01b0316331461204d5760405162461bcd60e51b8152600401610d79906138a7565b6024805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166120d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166121315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146117f55760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610d79565b6001600160a01b038381166000908152600260209081526040808320938616835292905220546000198114612278578181101561226b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d79565b612278848484840361206e565b50505050565b602454600090600160b01b900460ff166122cb5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d79565b600c54600160a01b900460ff16156123d05760085442106122f857600c805460ff60a01b191690556123d0565b6021546001600160a01b039081169085160361235a5761231783610ea8565b6123555760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d79565b6123d0565b6021546001600160a01b03908116908416036123795761231784610ea8565b61238284610ea8565b8015612392575061239283610ea8565b6123d05760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d79565b602454600160a01b900460ff16156123f4576123ed84848461293d565b9050610d48565b6021546001600160a01b0384811691161480156124135750600a5460ff165b15612499576025548211158061246457506001600160a01b0384166000908152600e602052604090205460ff16801561246457506001600160a01b0383166000908152600e602052604090205460ff165b6124995760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d79565b6001600160a01b0383166000908152600e602052604090205460ff161580156124c45750600a5460ff165b1561252b576026546001600160a01b0384166000908152600160205260409020546124f0908490613916565b111561252b5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d79565b601b5460ff1615801561253f575060105415155b156126c557601b54610100900460ff1661263d576010546125639062015180613916565b4211156126385760135460145460155461257d9190613916565b6125879190613916565b15612593576001612596565b60005b60ff166011556016546017546018546125af9190613916565b6125b99190613916565b156125c55760016125c8565b60005b60ff166012556011546013546014546015546125e49190613916565b6125ee9190613916565b6125f89190613916565b6019556012546016546017546018546126119190613916565b61261b9190613916565b6126259190613916565b601a55601b805461ff0019166101001790555b6126c5565b60105461264d906228de80613916565b4211156126c5576000601181905560128190556013546014546015546126739190613916565b61267d9190613916565b6126879190613916565b6019556012546016546017546018546126a09190613916565b6126aa9190613916565b6126b49190613916565b601a55601b805460ff191660011790555b6021546001600160a01b038581169116148015906126ed5750602454600160a01b900460ff16155b80156127025750602454600160a81b900460ff165b80156127395750602754601f54601e54601d54601c546127229190613916565b61272c9190613916565b6127369190613916565b10155b15612746576127466129e5565b6001600160a01b03841660009081526001602052604090205461276a908390613929565b6001600160a01b038086166000818152600160205260409020929092556021548492911614806127a757506021546001600160a01b038581169116145b15612806576001600160a01b0385166000908152600d602052604090205460ff161580156127ee57506001600160a01b0384166000908152600d602052604090205460ff16155b6127f85782612803565b6128038585856130f6565b90505b6001600160a01b03841660009081526001602052604090205461282a908290613916565b6001600160a01b038086166000818152600160205260409081902093909355915190871690600080516020613c188339815191529061286c9085815260200190565b60405180910390a3506001949350505050565b805160005b818110156128e8576001600b60008584815181106128a4576128a4613b49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128e081613b5f565b915050612884565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812054612961908390613929565b6001600160a01b038086166000908152600160205260408082209390935590851681522054612991908390613916565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020613c18833981519152906129d39086815260200190565b60405180910390a35060019392505050565b6024805460ff60a01b1916600160a01b17905530600090815260016020526040812054601d54601e54601c54601f549394929391929091908183612a298688613916565b612a339190613916565b612a3d9190613916565b9050600081612a4c87896138ff565b612a569190613a8f565b905060008080612a67600285613a8f565b9050612a73818b613929565b600003612a8957505050505050505050506130e7565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612abe57612abe613b49565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190613ab1565b81600181518110612b4d57612b4d613b49565b6001600160a01b03928316602091820292909201810191909152541663791ac947612b78848e613929565b60008430426040518663ffffffff1660e01b8152600401612b9d959493929190613b78565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b50505050600080831115612c91576020546001600160a01b031663f305d719612bf4858a613929565b612bfe86476138ff565b612c089190613a8f565b6040516001600160e01b031960e084901b16815230600482015260248101879052600060448201819052606482015261dead60848201524260a482015260c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613be9565b50909150505b612c9b8184613929565b612ca59087613929565b8b10612cce57612cb58184613929565b612cbf9087613929565b612cc9908c613929565b612cd1565b60005b601d5547612cdf8c89613929565b600003612cf857505050505050505050505050506130e7565b89612d038a8d613916565b612d0d9190613916565b612d178a836138ff565b612d219190613a8f565b945089612d2e8a8d613916565b612d389190613916565b612d428c836138ff565b612d4c9190613a8f565b9550600085612d5b8884613929565b612d659190613929565b9050888c8f612d7491906138ff565b612d7e9190613a8f565b8c10612daa57888c8f612d9191906138ff565b612d9b9190613a8f565b612da5908d613929565b612dad565b60005b601e81905550888b8f612dc091906138ff565b612dca9190613a8f565b8b10612df657888b8f612ddd91906138ff565b612de79190613a8f565b612df1908c613929565b612df9565b60005b601c81905550888a8f612e0c91906138ff565b612e169190613a8f565b8a10612e4257888a8f612e2991906138ff565b612e339190613a8f565b612e3d908b613929565b612e45565b60005b601f5581156130d8578515613008576000612e61600288613a8f565b90506000602260009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613ab1565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f26576040519150601f19603f3d011682016040523d82523d6000602084013e612f2b565b606091505b5050905080612f3957600080fd5b6022546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa79190613ab1565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b505090508061300457600080fd5b5050505b8615613070576023546040516000916001600160a01b03169089908381818185875af1925050503d806000811461305b576040519150601f19603f3d011682016040523d82523d6000602084013e613060565b606091505b505090508061306e57600080fd5b505b80156130d8576024546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50509050806130d657600080fd5b505b50505050505050505050505050505b6024805460ff60a01b19169055565b602154600090819081908190819081906001600160a01b03808a1691160361313657601a5494506016549350601754925060185491506012549050613150565b601954945060135493506014549250601554915060115490505b84600003613165578695505050505050610d48565b60006064613173878a6138ff565b61317d9190613a8f565b90508561318a86836138ff565b6131949190613a8f565b601c60008282546131a59190613916565b909155508690506131b685836138ff565b6131c09190613a8f565b601d60008282546131d19190613916565b909155508690506131e284836138ff565b6131ec9190613a8f565b601e60008282546131fd9190613916565b9091555086905061320e83836138ff565b6132189190613a8f565b601f60008282546132299190613916565b909155505030600090815260016020526040902054613249908290613916565b30600081815260016020526040908190209290925590516001600160a01b038c1690600080516020613c18833981519152906132889085815260200190565b60405180910390a361329a8189613929565b9a9950505050505050505050565b600060208083528351808285015260005b818110156132d5578581018301518582016040015282016132b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104657600080fd5b8035613316816132f6565b919050565b6000806040838503121561332e57600080fd5b8235613339816132f6565b946020939093013593505050565b60006020828403121561335957600080fd5b8135610d48816132f6565b60008060006060848603121561337957600080fd5b8335613384816132f6565b92506020840135613394816132f6565b929592945050506040919091013590565b801515811461104657600080fd5b600080604083850312156133c657600080fd5b8235613339816133a5565b6000602082840312156133e357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613424576134246133ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613453576134536133ea565b604052919050565b600082601f83011261346c57600080fd5b813567ffffffffffffffff811115613486576134866133ea565b613499601f8201601f191660200161342a565b8181528460208386010111156134ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126134dc57600080fd5b8135602067ffffffffffffffff8211156134f8576134f86133ea565b8160051b61350782820161342a565b928352848101820192828101908785111561352157600080fd5b83870192505b8483101561354957823561353a816132f6565b82529183019190830190613527565b979650505050505050565b600060c0828403121561356657600080fd5b60405160c0810181811067ffffffffffffffff82111715613589576135896133ea565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156135e157600080fd5b823567ffffffffffffffff808211156135f957600080fd5b90840190610180828703121561360e57600080fd5b613616613400565b82358281111561362557600080fd5b6136318882860161345b565b82525060208301358281111561364657600080fd5b6136528882860161345b565b60208301525060408301356040820152606083013560608201526080830135608082015261368260a0840161330b565b60a082015261369360c0840161330b565b60c08201526136a460e0840161330b565b60e08201526101006136b781850161330b565b908201526101206136c984820161330b565b9082015261014083810135838111156136e157600080fd5b6136ed898287016134cb565b828401525050610160915061370382840161330b565b8282015280945050505061371a8460208501613554565b90509250929050565b6000806040838503121561373657600080fd5b8235613741816132f6565b91506020830135613751816133a5565b809150509250929050565b60008060008060008060c0878903121561377557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156137b257600080fd5b82356137bd816132f6565b91506020830135613751816132f6565b6000602082840312156137df57600080fd5b813567ffffffffffffffff808211156137f757600080fd5b908301906020828603121561380b57600080fd5b604051602081018181108382111715613826576138266133ea565b60405282358281111561383857600080fd5b613844878286016134cb565b82525095945050505050565b60006020828403121561386257600080fd5b8135610d48816133a5565b600181811c9082168061388157607f821691505b6020821081036138a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf857610cf86138e9565b80820180821115610cf857610cf86138e9565b81810381811115610cf857610cf86138e9565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b601f8211156128e857600081815260208120601f850160051c810160208610156139a85750805b601f850160051c820191505b818110156139c7578281556001016139b4565b505050505050565b815167ffffffffffffffff8111156139e9576139e96133ea565b6139fd816139f7845461386d565b84613981565b602080601f831160018114613a325760008415613a1a5750858301515b600019600386901b1c1916600185901b1785556139c7565b600085815260208120601f198616915b82811015613a6157888601518255948401946001909101908401613a42565b5085821015613a7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ac357600080fd5b8151610d48816132f6565b600060208284031215613ae057600080fd5b8151610d48816133a5565b602080825260089082015267686967682066656560c01b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060208284031215613b4257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613b7157613b716138e9565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613bc85784516001600160a01b031683529383019391830191600101613ba3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613bfe57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a532a83dcac57ae5df052ab3eac0cc0b52b43a0f19d31844a3cc578ff73734364736f6c63430008110033

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.