ETH Price: $3,355.87 (-3.40%)

Token

9 Lives Network (NineFi)
 

Overview

Max Total Supply

100,000,000 NineFi

Holders

246 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

OVERVIEW

9 Lives Network is a Meme Token with a Defi Narrative. 9 Lives Network token has a gamified AI that switches the contract taxes based on volume in 12-24-36 hr time frames. 9 Lives Network future goal is to provide Crypto Custody Services to help people safely exchange Crypto Into Fiat Defi Services

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NineFi

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
File 1 of 8 : NineFi.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./interfaces/IUniswapV2Pair.sol";
import "./interfaces/INineLives.sol";

contract NineFi is Ownable, INineLives {
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) private excludedFromTransferLimits;
    mapping(address => bool) private excludedFromFees;
    mapping(address => bool) private excludedFromMaxWallet;
    mapping(address => uint256) private taxlessTokens;
    string private constant _name = '9 Lives Network';
    string private constant _symbol = 'NineFi';
    uint256 public constant InitialSupply= 1_00_000_000 * 10**_decimals;
    uint8 private constant _decimals = 18;

    uint16 public constant BASE_POINT = 1000;

    /// @notice Uniswap router handle.
    IUniswapV2Router02 private router;

    /// @notice The uniswap pair address for (pairToken, 9INE).
    /// @dev pairToken is USDC.
    address private pair;

    /// @notice burning wallet address.
    address constant burnerWallet = 0x84d4E5CB6E13b0f693692BBA1B4F1AB4Ef7EAe00;

    /// @notice owner drop wallet address.
    address constant ownerDropWallet = 0x99e5de9452ED0cd93D967040d123989B281b281b;

    /// @notice marketing wallet address.
    address private marketingWallet;

    /// @notice PROOF revenue wallet address.
    address private proofRevenueWallet;

    /// @notice PROOF rewards wallet address.
    address private proofRewardsWallet;

    /// @notice PROOF admin wallet address.
    address private proofAdminWallet;

    /// @notice Pair token address to add liquidity with 9INE.
    address public pairToken;

    /// @notice Threshold sell fee.
    uint16 immutable public MAX_SELL_FEE;

    /// @notice Threshold buy fee.
    uint16 immutable public MAX_BUY_FEE;

    uint16 constant private airdropPercent = 60;   // 6%
    uint16 constant private burnPercent = 70;   // 7%
    uint16 constant private ownerDropPercent = 70;   // 7%
    uint16 constant private maxWalletPercent = 10;  // 1%
    uint16 constant private transferLimitPercent = 5;   // 0.5%
    uint16 constant private thresholdSwapPercent = 1;   // 0.1%

    /// @notice NineFi launch time.
    uint256 public launchTime;

    /// @notice Jeet time limit.
    uint256 public jeetTime = 24 hours;

    /// @notice Sell fee informations
    /// @dev sellFees[0]: sell fee for users if they sell their token within jeetTime after purchasing.
    /// @dev sellFees[1]: sell fee for users if they sell their token after jeetTime after purchasing.
    FeeRate[] public sellFees;

    /// @notice Buy fee informations.
    FeeRate public buyFee;

    /// @notice Limit amount that a user can own.
    uint256 public maxWallet;

    /// @notice Limit amount for transfer.
    /// @dev 1% of Initial Supply.
    uint256 public transferLimit;

    /// @notice Fee for liquify contract has
    uint256 private _lpFee;
    /// @notice Fee for marketing contract has
    uint256 private _marketingFee;
    /// @notice Fee for proof contract has
    uint256 private _proofFee;
    
    /// @notice Tract to purchasing per user.
    mapping(address => PurchasingInfo) private userPurchaseInfos;

    uint256 public thresholdSwap;

    bool private txStarted;

    bool private inSwapAndLiquify;

    modifier onlyProofAdminWallet {
        require (msg.sender == proofAdminWallet, "Only Proof can change this");
        _;
    }

    constructor (
        Param memory _param
    ) {
        require (
            (_param.firstSellFee.LPFeeRate + 
            _param.firstSellFee.ProofFeeRate + 
            _param.firstSellFee.MarketingFeeRate) == 
            _param.firstSellFee.totalFeeRate, 
            "incorrect fee rate"
        );
        require (
            _param.afterSellFee.LPFeeRate + 
            _param.afterSellFee.ProofFeeRate + 
            _param.afterSellFee.MarketingFeeRate == 
            _param.afterSellFee.totalFeeRate, 
            "incorrect fee rate"
        );
        require (
            _param.buyFee.LPFeeRate +
            _param.buyFee.ProofFeeRate +
            _param.buyFee.MarketingFeeRate ==
            _param.buyFee.totalFeeRate
        );

        require (_param.wallets.length == 6, "incorrect wallets length");
        require (_param.proofRevenueWallet != address(0), "invalid proof revenue wallet address");
        require (_param.proofRewardsWallet != address(0), "invalid proof rewards wallet address");
        require (_param.marketingWallet != address(0), "invalid marketing wallet address");
        require (_param.pairToken != address(0), "invalid pair token address");
        require (_param.routerAddr != address(0), "invalid router address");

        sellFees.push(_param.firstSellFee);
        sellFees.push(_param.afterSellFee);
        buyFee = _param.buyFee;

        proofRevenueWallet = _param.proofRevenueWallet;
        proofRewardsWallet = _param.proofRewardsWallet;
        proofAdminWallet = _param.proofAdminWallet;
        marketingWallet = _param.marketingWallet;
        pairToken = _param.pairToken;
        router = IUniswapV2Router02(_param.routerAddr);
        pair = IUniswapV2Factory(router.factory()).createPair(
            pairToken,
            address(this)
        );

        // 6% fee for 6 wallets. 1% per wallet.
        uint256 provideAmount = InitialSupply * airdropPercent / BASE_POINT / 6;    // 1%
        for (uint256 i = 0; i < _param.wallets.length; i ++) {
            address wallet = _param.wallets[i];
            _balances[wallet] += provideAmount;
            taxlessTokens[wallet] +=  provideAmount;
            emit Transfer(address(0),wallet,provideAmount);
        }
        
        uint256 burnAmount = InitialSupply * burnPercent / BASE_POINT;   // 7%
        _balances[burnerWallet] += burnAmount;
        taxlessTokens[burnerWallet] +=  burnAmount;
        emit Transfer(address(0),burnerWallet,burnAmount);
        uint256 ownerDropAmount = InitialSupply * ownerDropPercent / BASE_POINT;   // 7%
        _balances[ownerDropWallet] += ownerDropAmount;
        taxlessTokens[ownerDropWallet] +=  ownerDropAmount;
        emit Transfer(address(0),ownerDropWallet,ownerDropAmount);
        uint256 ownerAmount = InitialSupply - provideAmount*6 - burnAmount - ownerDropAmount;
        _balances[msg.sender] += ownerAmount;
        taxlessTokens[msg.sender] +=  ownerAmount;
        emit Transfer(address(0),msg.sender,ownerAmount);

        MAX_SELL_FEE = _param.maxSellFee;
        MAX_BUY_FEE = _param.maxBuyFee;

        maxWallet = InitialSupply;
        transferLimit = InitialSupply;
        thresholdSwap = InitialSupply;

        excludedFromFees[address(this)] = true;
        excludedFromFees[0x93252861589D1a8E41028F01Fa638eC51990F950] = true;
        excludedFromFees[ownerDropWallet] = true;
        excludedFromTransferLimits[address(this)] = true;
        excludedFromMaxWallet[address(this)] = true;
        excludedFromMaxWallet[ownerDropWallet] = true;
        excludedFromMaxWallet[pair] = true;

        launchTime = block.timestamp;
    }

    /// @notice Use to update jeet time limit in seconds.
    /// @dev Only owner can call this function.
    /// @param jeetTime_ Set new time limit only in seconds.
    function updateJeetTimeLimit(
        uint256 jeetTime_
    ) external onlyOwner {
        require (jeetTime_ <= 86400, "Max time of 24 hours");
        jeetTime = jeetTime_;
    }

    function getLpTokenAddress() external view returns (address) {
        return pair;
    }

    /// @notice Update max wallet and transfer limits.
    /// @dev Only owner can call this function.
    /// @param maxWalletPercent_ Set new max wallet percent, 10 = 1%.
    /// @param transferLimitPercent_ Set new transfer limit percent, 5 = 0.5%.
    function updateLimits(
        uint16 maxWalletPercent_, 
        uint16 transferLimitPercent_
    ) external onlyOwner{
        require (maxWalletPercent_ >= 10, "Max must be above 1%");
        require (transferLimitPercent_ >= 5, "Max must be above 0.5%");
        maxWallet = InitialSupply * maxWalletPercent_ / BASE_POINT;    // 1%
        transferLimit = InitialSupply * transferLimitPercent_ / BASE_POINT;    // 0.5%
    }

    function addLiquidity() external onlyOwner {
        _addLiquidity();
    }

    /// @notice Update threshold of tokens to sell.
    /// @dev Only owner can call this function.
    /// @param _thresholdPercent The amount of tokens to sell, 1 = 0.1% of total supply.
    function setSwapThreshold (
        uint16 _thresholdPercent
    ) external onlyOwner {
        require (txStarted, "Tx not started");
        thresholdSwap = InitialSupply * _thresholdPercent / BASE_POINT;
    }

    /// @notice Update wallet to be excluded from fees.
    /// @dev Only owner can call this function.
    /// @param address_ The wallet address of who will be changed status.
    /// @param trueFalse New status, true = exlcuded.
    function setExcludedFromFees(
        address address_, 
        bool trueFalse
    ) external onlyOwner{
        excludedFromFees[address_] = trueFalse;
    }

    /// @notice Update wallet to be excluded from max wallet.
    /// @dev Only owner can call this function.
    /// @param address_ The wallet address of who will be changed status.
    /// @param trueFalse New status, true = exlcuded.
    function setExcludedFromMaxWallet(
        address address_, 
        bool trueFalse
    ) external onlyOwner{
        excludedFromMaxWallet[address_] = trueFalse;
    }

    /// @notice Update wallet to be excluded from transfer limits.
    /// @dev Only owner can call this function.
    /// @param address_ The wallet address of who will be changed status.
    /// @param trueFalse New status, true = exlcuded.
    function setExcludedFromTransferLimits(
        address address_, 
        bool trueFalse
    ) external onlyOwner{
        excludedFromTransferLimits[address_] = trueFalse;
    }

    /// @notice Start transaction.
    /// @dev Only owner can call this function.
    function startTx() external onlyOwner {
        maxWallet = InitialSupply * maxWalletPercent / BASE_POINT;    // 1%
        transferLimit = InitialSupply * transferLimitPercent / BASE_POINT;    // 0.5%
        thresholdSwap = InitialSupply * thresholdSwapPercent / BASE_POINT;   // 0.1%
        txStarted = true;
    }

    /// @notice Start transaction.
    /// @dev Only Proof admin can call this function.
    function ProofStartTx() external onlyProofAdminWallet {
        txStarted = true;
    }

    /// @notice Start transaction.
    /// @dev Only Proof admin can call this function.
    function ProofStopTx() external onlyProofAdminWallet {
        txStarted = false;
    }

    /// @notice Update sell fee rate.
    /// @dev Only owner can call this function.
    /// @param feeId_ The id of fee rate.
    /// @param feeRate_ New Fee Rate.
    function updateSellFee(
        uint8 feeId_,
        FeeRate memory feeRate_
    ) external onlyOwner {
        require (feeRate_.totalFeeRate <= MAX_SELL_FEE, "too high sell fee");
        require (feeRate_.ProofFeeRate == sellFees[feeId_].ProofFeeRate, "ProofFeeRate can not be changed");
        require (
            feeRate_.LPFeeRate + 
            feeRate_.ProofFeeRate + 
            feeRate_.MarketingFeeRate == 
            feeRate_.totalFeeRate, 
            "incorrect fee rate"
        );
        sellFees[feeId_] = feeRate_;
    }

    /// @notice Update buy fee rate.
    /// @dev Only owner can call this function.
    /// @param feeRate_ New fee rate.
    function updateBuyFee(
        FeeRate memory feeRate_
    ) external onlyOwner {
        require (feeRate_.totalFeeRate <= MAX_BUY_FEE, "too high buy fee");
        require (feeRate_.ProofFeeRate == buyFee.ProofFeeRate, "ProofFeeRate can not be changed");
        require (
            feeRate_.LPFeeRate + 
            feeRate_.ProofFeeRate + 
            feeRate_.MarketingFeeRate == 
            feeRate_.totalFeeRate, 
            "incorrect fee rate"
        );
        buyFee = feeRate_;
    }

    /// @notice Update proof revenue wallet address.
    /// @dev Only proof revenue wallet can call this function.
    /// @param proofRevenueWallet_ New proof revenue wallet address.
    function updateProofRevenueWallet(
        address proofRevenueWallet_
    ) external {
        require (msg.sender == proofRevenueWallet, "Only Proof can change this.");
        require (proofRevenueWallet_ != address(0), "can't be zero address");
        proofRevenueWallet = proofRevenueWallet_;
    }

    /// @notice Update proof rewards wallet address.
    /// @dev Only proof rewards wallet can call this function.
    /// @param proofRewardsWallet_ New proof rewards wallet address.
    function updateProofRewardsWallet(
        address proofRewardsWallet_
    ) external {
        require (msg.sender == proofRewardsWallet, "Only Proof can change this.");
        require (proofRewardsWallet_ != address(0), "can't be zero address");
        proofRewardsWallet = proofRewardsWallet_;
    }

    /// @notice Update proof admin wallet address.
    /// @dev Only proof admin wallet can call this function.
    /// @param proofAdminWallet_ New proof admin wallet address.
    function updateProofAdminWallet(
        address proofAdminWallet_
    ) external onlyProofAdminWallet {
        require (proofAdminWallet_ != address(0), "can't be zero address");
        proofAdminWallet = proofAdminWallet_;
    }

    /// @notice Update marketing wallet address.
    /// @dev Only owner can call this function.
    /// @param marketingWallet_ New marketing wallet address.
    function updateMarketingWallet(
        address marketingWallet_
    ) external onlyOwner {
        require (marketingWallet_ != address(0), "zero address");
        marketingWallet = marketingWallet_;
    }

    function name() external pure returns (string memory) {return _name;}
    function symbol() external pure returns (string memory) {return _symbol;}
    function decimals() external pure returns (uint8) {return _decimals;}
    function totalSupply() external pure returns (uint256) {return InitialSupply;}
    function balanceOf(address account) public view returns (uint256) {return _balances[account];}

    /// @inheritdoc IERC20
    function transfer(
        address recipient_, 
        uint256 amount_
    ) external override returns (bool) {
        _transfer(msg.sender, recipient_, amount_);
        return true;
    }

    /// @inheritdoc IERC20
    function allowance(
        address owner_, 
        address spender_
    ) external view override returns (uint256) {
        return _allowances[owner_][spender_];
    }

    /// @inheritdoc IERC20
    function approve(
        address spender_, 
        uint256 amount_
    ) external override returns (bool) {
        _approve(msg.sender, spender_, amount_);
        return true;
    }

    /// @inheritdoc IERC20
    function transferFrom(
        address sender_, 
        address recipient_, 
        uint256 amount_
    ) external override returns (bool) {
        uint256 currentAllowance = _allowances[sender_][msg.sender];
        require(currentAllowance >= amount_, "Transfer > allowance");
        _approve(sender_, msg.sender, currentAllowance - amount_);
        _transfer(sender_, recipient_, amount_);
        return true;
    }

    /// @notice Decrease proof fee.
    /// @dev It can be called after 72 hours after launch.
    /// @dev Only owner can call this function.
    function decreaseProofFeeWithSell() external onlyOwner {
        require (sellFees[1].ProofFeeRate > 1, "already decreased");
        require (block.timestamp - launchTime >= 72 hours, "too soon");
        sellFees[1].ProofFeeRate --;
    }

    /// @notice Decrease proof fee.
    /// @dev It can be called after 72 hours after launch.
    /// @dev Only owner can call this function.
    function decreaseProofFeeWithBuy() external onlyOwner {
        require (buyFee.ProofFeeRate > 1, "already decreased");
        require (block.timestamp - launchTime >= 72 hours, "too soon");
        buyFee.ProofFeeRate --;
    }

    function getAvailableTokenAmount(address user_) external view returns (uint256) {
        return _availableTransferAmount(user_);
    }

    receive() external payable {}

    /// @notice Transfer amount from sender to transfer.
    /// @dev If buy/sell, FeeRate will be applied.
    /// @param sender_ The address of sender.
    /// @param recipient_ The address of recipient.
    /// @param amount_ The amount of 9INE token to transfer.
    function _transfer(
        address sender_, 
        address recipient_,
        uint256 amount_
    ) internal {
        require (sender_ != address(0), "transfer from zero address");
        require (recipient_ != address(0), "transfer to zero address");
        require (amount_ > 0, "zero amount");
        require (excludedFromMaxWallet[recipient_] || _balances[recipient_] + amount_ <= maxWallet + (10*10**_decimals), "over max wallet");

        if (txStarted == false) {
            if (sender_ != owner() && recipient_ != owner()) {
                revert ("Tx not started");
            } else {    // this is for add liquidity at first.
                _feelessTransfer(sender_, recipient_, amount_, true);
                return;
            }
        }

        // Check if transfer amount is over transfer limit.
        if (
            !excludedFromTransferLimits[sender_] &&
            !excludedFromTransferLimits[recipient_] &&
            sender_ != pair
        ) {
            require(amount_ <= transferLimit + (1*10**_decimals),"Over max TXN");
        }

        if (sender_ != pair && recipient_ != pair) {    // not buy/sell, transfer without fee.
            _feelessTransfer(sender_, recipient_, amount_, false);
        } else {    // buy/sell, transfer with fee.
            if (
                excludedFromFees[sender_] == true || 
                excludedFromFees[recipient_] == true ||
                inSwapAndLiquify == true
            ) {
                _feelessTransfer(sender_, recipient_, amount_, true);
                return;
            } 
            _withFeeTransfer(sender_, recipient_, amount_);
        }
    }

    /// @notice Transfer without fee.
    /// @param sender_ The address of sender.
    /// @param recipient_ The address of recipient.
    /// @param amount_ The amount of 9INE token to transfer.
    /// @param excludeLimit_ If it's true, don't check it has enough available token amount.
    function _feelessTransfer(
        address sender_, 
        address recipient_, 
        uint256 amount_,
        bool excludeLimit_
    ) internal {
        uint256 senderBalance = _balances[sender_];
        require(senderBalance >= amount_, "Transfer exceeds balance");

        if (!excludeLimit_) {
            PurchasingInfo storage purchasingInfo = userPurchaseInfos[sender_];
            uint256 restAmount = amount_;
            if (taxlessTokens[sender_] >= amount_) {
                restAmount = 0;
                taxlessTokens[sender_] -= amount_;
            } else {
                restAmount = amount_ - taxlessTokens[sender_];
                taxlessTokens[sender_] = 0;
            }

            require (restAmount == 0 || purchasingInfo.purchaseId > 0, "not enough available balance");
            if (purchasingInfo.purchaseId > 0) {
                uint256 purchaseId = 0;
                uint256 curTime = block.timestamp;

                while(purchaseId < purchasingInfo.purchaseId && restAmount > 0) {
                    require((curTime - purchasingInfo.purchaseTime[purchaseId]) > jeetTime || restAmount == 0, "not enough available balance");
                    uint256 purchaseAmount = purchasingInfo.purchaseAmount[purchaseId];
                    if (purchaseAmount > 0) {
                        purchaseAmount = purchaseAmount > restAmount ? restAmount : purchaseAmount;
                        restAmount -= purchaseAmount;
                        purchasingInfo.purchaseAmount[purchaseId] -= purchaseAmount;
                    }
                    
                    purchaseId ++;
                }
            }
        }

        _balances[sender_] -= amount_;
        _balances[recipient_] += amount_;      
        taxlessTokens[recipient_] += amount_;
        if (excludeLimit_) {
            taxlessTokens[sender_] = taxlessTokens[sender_] >= amount_ ? taxlessTokens[sender_] - amount_ : 0;
        }
        emit Transfer(sender_,recipient_,amount_);
    }

    /// @notice Transfer with fee.
    /// @param sender_ The address of sender.
    /// @param recipient_ The address of recipient.
    /// @param amount_ The amount of 9INE token to transfer.
    function _withFeeTransfer(
        address sender_,
        address recipient_,
        uint256 amount_
    ) internal {
        uint256 totalFee = 0;
        uint256 recvAmount = 0;
        uint256 lpFee = 0;
        uint256 marketingFee = 0;
        uint256 proofFee = 0;

        require(_balances[sender_] >= amount_, "Transfer exceeds balance");

        if (sender_ == pair) {  // buy
            (totalFee, lpFee, marketingFee, proofFee, recvAmount) = _calcFeeRate(amount_, buyFee);
            PurchasingInfo storage purchaseInfo = userPurchaseInfos[recipient_];

            // add purcahse info to track.
            uint256 purchaseId = purchaseInfo.purchaseId;
            purchaseInfo.purchaseAmount[purchaseId] = recvAmount;
            purchaseInfo.purchaseTime[purchaseId] = block.timestamp;
            purchaseInfo.purchaseId ++;
        } else if (recipient_ == pair) {    // sell
            if (_balances[address(this)] >= thresholdSwap) {
                _addLiquidity();
            }
            (totalFee, lpFee, marketingFee, proofFee, recvAmount) = _getAmountWithSellFee(sender_, amount_);
        }

        _lpFee += lpFee;
        _marketingFee += marketingFee;
        _proofFee += proofFee;

        _balances[sender_] -= amount_;
        _balances[recipient_] += recvAmount;

        _balances[address(this)] += totalFee;
        
        emit Transfer(sender_,recipient_,amount_);
    }

    /// @notice The amount with fee.
    /// @dev Explain to a developer any extra details
    /// @param user_ The address of a user that will receive token.
    /// @param amount_ The origin amount of token to transfer.
    /// @return totalFee The total fee amount.
    /// @return lpFee The fee amount for liquify.
    /// @return marketingFee The fee amount for marketing.
    /// @return proofFee The fee amount for proof.
    /// @return recvAmount The real amount that recipient will be recieved.
    function _getAmountWithSellFee(
        address user_,
        uint256 amount_
    ) internal returns(
        uint256 totalFee,
        uint256 lpFee,
        uint256 marketingFee,
        uint256 proofFee,
        uint256 recvAmount
    ) {
        uint256[] memory amounts = new uint256[](2); // amounts[0]: jeetTax, amounts[1]: normalTax
        PurchasingInfo storage purchasingInfo = userPurchaseInfos[user_];

        if (taxlessTokens[user_] >= amount_) {
            amounts[1] = amount_;
            taxlessTokens[user_] -= amount_;
        } else {
            amounts[1] = taxlessTokens[user_];
            taxlessTokens[user_] = 0;
        }

        uint256 restAmount = amount_ - amounts[1];
        if (purchasingInfo.purchaseId > 0) {
            uint256 purchaseId = 0;
            uint256 curTime = block.timestamp;

            while(purchaseId < purchasingInfo.purchaseId && restAmount > 0) {
                bool isJeetTax = (curTime - purchasingInfo.purchaseTime[purchaseId]) <= jeetTime;
                uint256 purchaseAmount = purchasingInfo.purchaseAmount[purchaseId];
                if (purchaseAmount > 0) {
                    purchaseAmount = purchaseAmount > restAmount ? restAmount : purchaseAmount;
                    uint8 amountIndex = isJeetTax ? 0 : 1;
                    amounts[amountIndex] += purchaseAmount;
                    restAmount -= purchaseAmount;
                    purchasingInfo.purchaseAmount[purchaseId] -= purchaseAmount;
                }
                
                purchaseId ++;
            }
        }
        require (restAmount == 0, "not enough balance");
        
        uint256 totalFee_;
        uint256 lpFee_;
        uint256 marketingFee_;
        uint256 proofFee_;
        uint256 recvAmount_;
        if (amounts[0] > 0) {
            (totalFee_, lpFee_, marketingFee_, proofFee_, recvAmount_) = _calcFeeRate(amounts[0], sellFees[0]);
            lpFee += lpFee_;
            marketingFee += marketingFee_;
            proofFee += proofFee_;
            totalFee += totalFee_;
            recvAmount += recvAmount_;
        }

        if (amounts[1] > 0) {
            (totalFee_, lpFee_, marketingFee_, proofFee_, recvAmount_) = _calcFeeRate(amounts[1], sellFees[1]);
            lpFee += lpFee_;
            marketingFee += marketingFee_;
            proofFee += proofFee_;
            totalFee += totalFee_;
            recvAmount += recvAmount_;
        }
    }

    function _calcFeeRate(
        uint256 amount_,
        FeeRate memory feeRate_
    ) internal pure returns (
        uint256 totalFee,
        uint256 lpFee,
        uint256 marketingFee,
        uint256 proofFee,
        uint256 recvAmount
    ) {
        totalFee = amount_ * feeRate_.totalFeeRate / BASE_POINT;
        lpFee = amount_ * feeRate_.LPFeeRate / BASE_POINT;
        marketingFee = amount_ * feeRate_.MarketingFeeRate / BASE_POINT;
        proofFee = totalFee - lpFee - marketingFee;
        
        recvAmount = amount_ - totalFee;
    }

    function _transferUSDC(
        uint256 amount_,
        address recipient_
    ) internal {
        require (IERC20(pairToken).transfer(recipient_, amount_), "USDC transfer failed");
    }

    /// @notice Used for forcing a swap and liquify event
    /// @dev Only Owner can call.
    function unclog() 
        external onlyOwner {
        _addLiquidity();
    }

    function _addLiquidity() internal {
        inSwapAndLiquify = true;
        uint256 amount_ = _balances[address(this)];
        uint256 swapAmount = amount_ - _lpFee / 2;
        _swapToETH(swapAmount);

        // transfer USDC to marketing wallet and proofWallet.
        uint256 totalETHAmount = address(this).balance;
        uint256 totalUSDCAmount = _swapETHToUSDC(totalETHAmount);
        uint256 amountForMarketing = totalUSDCAmount * _marketingFee / swapAmount;
        uint256 amountForProof = totalUSDCAmount * _proofFee / swapAmount;
        _transferUSDC(amountForMarketing, marketingWallet);
        _transferUSDC(amountForProof / 2, proofRevenueWallet);
        _transferUSDC(amountForProof / 2, proofRewardsWallet);

        // swap and add liquidity
        uint256 pairTokenAmount = IERC20(pairToken).balanceOf(address(this));
        uint256 liquifyAmount = _balances[address(this)];
        _approve(address(this), address(router), liquifyAmount);
        IERC20(pairToken).approve(address(router), pairTokenAmount);
        router.addLiquidity(
            pairToken, 
            address(this), 
            pairTokenAmount, 
            liquifyAmount, 
            0, 
            0, 
            marketingWallet, 
            block.timestamp
        );
        _lpFee = 0;
        _marketingFee = 0;
        _proofFee = 0;
        inSwapAndLiquify = false;
    }

    function _swapETHToUSDC(uint256 swapAmount) internal returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = pairToken;

        uint256 balanceBefore = IERC20(pairToken).balanceOf(address(this));
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: swapAmount}(
            0, 
            path, 
            address(this), 
            block.timestamp
        );
        uint256 balanceAfter = IERC20(pairToken).balanceOf(address(this));
        return balanceAfter - balanceBefore;
    }

    function _swapToETH(uint256 amount_) internal {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = pairToken;
        path[2] = router.WETH();

        _approve(address(this), address(router), amount_);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount_, 
            0, 
            path, 
            address(this), 
            block.timestamp
        );
    }

    function _approve(
        address owner_, 
        address spender_, 
        uint256 amount_
    ) private {
        require(owner_ != address(0), "Approve from zero");
        require(spender_ != address(0), "Approve to zero");
        _allowances[owner_][spender_] = amount_;
        emit Approval(owner_, spender_, amount_);
    }

    function _availableTransferAmount(address user_) internal view returns (uint256 availableAmount) {
        availableAmount = taxlessTokens[user_];
        if (userPurchaseInfos[user_].purchaseId > 0) {
            uint256 purchaseId = 0;
            uint256 curTime = block.timestamp;
            
            while(purchaseId < userPurchaseInfos[user_].purchaseId) {
                if ((curTime - userPurchaseInfos[user_].purchaseTime[purchaseId]) > jeetTime) {
                    uint256 purchaseAmount = userPurchaseInfos[user_].purchaseAmount[purchaseId];
                    if (purchaseAmount > 0) {
                        availableAmount += purchaseAmount;
                    }
                } else {
                    break;
                }
                purchaseId ++;
            }
        }
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

    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(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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), "Ownable: 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 3 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 5 of 8 : INineLives.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

import "./IERC20.sol";
interface INineLives is IERC20 {
    struct FeeRate {
        uint16 totalFeeRate;
        uint16 LPFeeRate;
        uint16 MarketingFeeRate;
        uint16 ProofFeeRate;
    }

    struct PurchasingInfo {
        uint256 purchaseId;
        mapping(uint256 => uint256) purchaseTime;
        mapping(uint256 => uint256) purchaseAmount;
    }

    struct Param {
        address pairToken;
        address routerAddr;
        address marketingWallet;
        address proofRevenueWallet;
        address proofRewardsWallet;
        address proofAdminWallet;
        address[] wallets;   // 6 % for 6 wallets.
        FeeRate firstSellFee;   // fee when users sell tokens in 24 hours after purchasing
        FeeRate afterSellFee;   // fee when users sell normally
        FeeRate buyFee;         // fee when users buy normally.
        uint16 maxSellFee;
        uint16 maxBuyFee;
    }
}

File 6 of 8 : IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

File 7 of 8 : IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 8 of 8 : IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"address","name":"pairToken","type":"address"},{"internalType":"address","name":"routerAddr","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"proofRevenueWallet","type":"address"},{"internalType":"address","name":"proofRewardsWallet","type":"address"},{"internalType":"address","name":"proofAdminWallet","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"firstSellFee","type":"tuple"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"afterSellFee","type":"tuple"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"buyFee","type":"tuple"},{"internalType":"uint16","name":"maxSellFee","type":"uint16"},{"internalType":"uint16","name":"maxBuyFee","type":"uint16"}],"internalType":"struct INineLives.Param","name":"_param","type":"tuple"}],"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":"BASE_POINT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ProofStartTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ProofStopTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","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":"buyFee","outputs":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decreaseProofFeeWithBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decreaseProofFeeWithSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"}],"name":"getAvailableTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLpTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellFees","outputs":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"setExcludedFromTransferLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_thresholdPercent","type":"uint16"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thresholdSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender_","type":"address"},{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"feeRate_","type":"tuple"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"jeetTime_","type":"uint256"}],"name":"updateJeetTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxWalletPercent_","type":"uint16"},{"internalType":"uint16","name":"transferLimitPercent_","type":"uint16"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet_","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofAdminWallet_","type":"address"}],"name":"updateProofAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofRevenueWallet_","type":"address"}],"name":"updateProofRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proofRewardsWallet_","type":"address"}],"name":"updateProofRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"feeId_","type":"uint8"},{"components":[{"internalType":"uint16","name":"totalFeeRate","type":"uint16"},{"internalType":"uint16","name":"LPFeeRate","type":"uint16"},{"internalType":"uint16","name":"MarketingFeeRate","type":"uint16"},{"internalType":"uint16","name":"ProofFeeRate","type":"uint16"}],"internalType":"struct INineLives.FeeRate","name":"feeRate_","type":"tuple"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405262015180600f553480156200001857600080fd5b5060405162004aac38038062004aac8339810160408190526200003b9162000e1e565b620000463362000c24565b60e081015180516040820151606083015160209093015161ffff90921692909162000072919062000f88565b6200007e919062000f88565b61ffff1614620000ca5760405162461bcd60e51b8152602060048201526012602482015271696e636f727265637420666565207261746560701b60448201526064015b60405180910390fd5b61010081015180516040820151606083015160209093015161ffff909216929091620000f7919062000f88565b62000103919062000f88565b61ffff16146200014b5760405162461bcd60e51b8152602060048201526012602482015271696e636f727265637420666565207261746560701b6044820152606401620000c1565b61012081015180516040820151606083015160209093015161ffff90921692909162000178919062000f88565b62000184919062000f88565b61ffff16146200019357600080fd5b8060c0015151600614620001ea5760405162461bcd60e51b815260206004820152601860248201527f696e636f72726563742077616c6c657473206c656e67746800000000000000006044820152606401620000c1565b60608101516001600160a01b0316620002525760405162461bcd60e51b8152602060048201526024808201527f696e76616c69642070726f6f6620726576656e75652077616c6c6574206164646044820152637265737360e01b6064820152608401620000c1565b60808101516001600160a01b0316620002ba5760405162461bcd60e51b8152602060048201526024808201527f696e76616c69642070726f6f6620726577617264732077616c6c6574206164646044820152637265737360e01b6064820152608401620000c1565b60408101516001600160a01b0316620003165760405162461bcd60e51b815260206004820181905260248201527f696e76616c6964206d61726b6574696e672077616c6c657420616464726573736044820152606401620000c1565b80516001600160a01b03166200036f5760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964207061697220746f6b656e20616464726573730000000000006044820152606401620000c1565b60208101516001600160a01b0316620003cb5760405162461bcd60e51b815260206004820152601660248201527f696e76616c696420726f757465722061646472657373000000000000000000006044820152606401620000c1565b60e08101516010805460018082018355600083905283517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67292830180546020808801516040808a015160609a8b015161ffff97881663ffffffff19968716176201000094891685021763ffffffff60201b19908116640100000000938a16840261ffff60301b19908116919091176601000000000000938b168402179098556101008e01518c549a8b01909c558b5199909a0180548c8701518d8601519d8f01519b8b1691891691909117908a168602178b169b8916830288169b909b179888168102989098179099556101208b01518051601180548387015184860151948f0151938b1691909816179689169094029590951790981697861690980290931695909517921690920217905591830151600a80546001600160a01b03199081166001600160a01b03938416179091556080850151600b8054831691841691909117905560a0850151600c80548316918416919091179055828501516009805483169184169190911790558451600d80548316918416919091179055838501516007805490921692169182179055815163c45a015560e01b81529151909263c45a015592600481810193918290030181865afa158015620005af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d5919062000fb1565b600d546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064d919062000fb1565b600880546001600160a01b0319166001600160a01b0392909216919091179055600060066103e8603c620006846012600a620010d5565b62000694906305f5e100620010e6565b620006a09190620010e6565b620006ac919062001108565b620006b8919062001108565b905060005b8260c0015151811015620007a15760008360c001518281518110620006e657620006e66200112b565b602002602001015190508260016000836001600160a01b03166001600160a01b03168152602001908152602001600020600082825462000727919062001141565b90915550506001600160a01b038116600090815260066020526040812080548592906200075690849062001141565b90915550506040518381526001600160a01b0382169060009060008051602062004a8c8339815191529060200160405180910390a3508062000798816200115c565b915050620006bd565b5060006103e86046620007b76012600a620010d5565b620007c7906305f5e100620010e6565b620007d39190620010e6565b620007df919062001108565b7384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae00600090815260016020527f4b7e737520f206fbed80011beb34a4e36adc8729af8a355e1653ab382178f824805492935083929091906200083690849062001141565b90915550507384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae00600090815260066020527f02ddd066caa695a9950958aa1c2d2c25b33f0a103d0024d1e6ad5c3204fcbee580548392906200088d90849062001141565b90915550506040518181527384d4e5cb6e13b0f693692bba1b4f1ab4ef7eae009060009060008051602062004a8c8339815191529060200160405180910390a360006103e86046620008e26012600a620010d5565b620008f2906305f5e100620010e6565b620008fe9190620010e6565b6200090a919062001108565b7399e5de9452ed0cd93d967040d123989b281b281b600090815260016020527f91d9f711b5dcf3834be6bcf1f0fa7743e050a1b2c09041c6df5dc1abe494d468805492935083929091906200096190849062001141565b90915550507399e5de9452ed0cd93d967040d123989b281b281b600090815260066020527fe667366b3b93cb736a31ec363d18a202b76ee4bf0e48bf4dee2b97bbfc9225308054839290620009b890849062001141565b90915550506040518181527399e5de9452ed0cd93d967040d123989b281b281b9060009060008051602062004a8c8339815191529060200160405180910390a36000818362000a09866006620010e6565b62000a176012600a620010d5565b62000a27906305f5e100620010e6565b62000a3391906200117a565b62000a3f91906200117a565b62000a4b91906200117a565b3360009081526001602052604081208054929350839290919062000a7190849062001141565b9091555050336000908152600660205260408120805483929062000a9790849062001141565b9091555050604051818152339060009060008051602062004a8c8339815191529060200160405180910390a361014085015161ffff9081166080526101608601511660a05262000aea6012600a620010d5565b62000afa906305f5e100620010e6565b601290815562000b0c90600a620010d5565b62000b1c906305f5e100620010e6565b60135562000b2d6012600a620010d5565b62000b3d906305f5e100620010e6565b60185550503060009081526004602090815260408083208054600160ff1991821681179092557f6a7fde8711126faee0515fc2776e05d7aff1ee24d8d8925efe21d21633f588c780548216831790557fdbf5a8964cd645cdbf52a8434b37fe5efbc9ac71cda0841eb570e6858b819d448054821683179055600384528285208054821683179055600590935281842080548416821790557f0ce99fbd8ffe748b83c694ed5bb38ae5d3bcd2f96b48f4c18610010b3cdc559080548416821790556008546001600160a01b03168452922080549091169091179055505042600e555062001194565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b038111828210171562000cb05762000cb062000c74565b60405290565b80516001600160a01b038116811462000cce57600080fd5b919050565b600082601f83011262000ce557600080fd5b815160206001600160401b038083111562000d045762000d0462000c74565b8260051b604051601f19603f8301168101818110848211171562000d2c5762000d2c62000c74565b60405293845285810183019383810192508785111562000d4b57600080fd5b83870191505b8482101562000d755762000d658262000cb6565b8352918301919083019062000d51565b979650505050505050565b805161ffff8116811462000cce57600080fd5b60006080828403121562000da657600080fd5b604051608081016001600160401b038111828210171562000dcb5762000dcb62000c74565b60405290508062000ddc8362000d80565b815262000dec6020840162000d80565b602082015262000dff6040840162000d80565b604082015262000e126060840162000d80565b60608201525092915050565b60006020828403121562000e3157600080fd5b81516001600160401b038082111562000e4957600080fd5b908301906102a0828603121562000e5f57600080fd5b62000e6962000c8a565b62000e748362000cb6565b815262000e846020840162000cb6565b602082015262000e976040840162000cb6565b604082015262000eaa6060840162000cb6565b606082015262000ebd6080840162000cb6565b608082015262000ed060a0840162000cb6565b60a082015260c08301518281111562000ee857600080fd5b62000ef68782860162000cd3565b60c08301525062000f0b8660e0850162000d93565b60e0820152610160915062000f238683850162000d93565b61010082015262000f39866101e0850162000d93565b61012082015262000f4e610260840162000d80565b61014082015262000f63610280840162000d80565b91810191909152949350505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111562000fa85762000fa862000f72565b01949350505050565b60006020828403121562000fc457600080fd5b62000fcf8262000cb6565b9392505050565b600181815b808511156200101757816000190482111562000ffb5762000ffb62000f72565b808516156200100957918102915b93841c939080029062000fdb565b509250929050565b6000826200103057506001620010cf565b816200103f57506000620010cf565b8160018114620010585760028114620010635762001083565b6001915050620010cf565b60ff84111562001077576200107762000f72565b50506001821b620010cf565b5060208310610133831016604e8410600b8410161715620010a8575081810a620010cf565b620010b4838362000fd6565b8060001904821115620010cb57620010cb62000f72565b0290505b92915050565b600062000fcf60ff8416836200101f565b600081600019048311821515161562001103576200110362000f72565b500290565b6000826200112657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000821982111562001157576200115762000f72565b500190565b600060001982141562001173576200117362000f72565b5060010190565b6000828210156200118f576200118f62000f72565b500390565b60805160a0516138c4620011c86000396000818161066801526115240152600081816106fd0152610abd01526138c46000f3fe6080604052600436106102f65760003560e01c80635f82986e1161018f578063a9059cbb116100e1578063de7f051b1161008a578063f2fde38b11610064578063f2fde38b146108e7578063f8b45b0514610907578063f94325171461091d57600080fd5b8063de7f051b146108a7578063df214416146108c7578063e8078d941461064157600080fd5b8063b5dc4834116100bb578063b5dc483414610821578063d26dfd9814610841578063dd62ed3e1461086157600080fd5b8063a9059cbb146107c1578063aacebbe3146107e1578063b2b28d201461080157600080fd5b8063790ca413116101435780638da5cb5b1161011d5780638da5cb5b1461073d57806395d89b411461075b578063a214d44c146107a157600080fd5b8063790ca413146106d5578063867508ad146106eb5780638c237c691461071f57600080fd5b80636e628f3b116101745780636e628f3b1461065657806370a082311461068a578063715018a6146106c057600080fd5b80635f82986e1461062c57806367c453491461064157600080fd5b80633072a0c9116102485780633f0b70f0116101fc578063587ee7b5116101d6578063587ee7b5146105cc578063590ffdce146105ec5780635ac3c5e81461060c57600080fd5b80633f0b70f01461055a578063412201041461056f578063470624021461058f57600080fd5b8063350669601161022d57806335066960146104be5780633cb7ab531461050c5780633de35b791461052257600080fd5b80633072a0c91461048d578063313ce567146104a257600080fd5b806318160ddd116102aa578063200ccd3911610284578063200ccd391461042d57806323b872dd1461044d57806328bac04c1461046d57600080fd5b806318160ddd146103df5780631886c0bb146104025780631eb25d131461041857600080fd5b80630ac71193116102db5780630ac711931461038a57806310a3f983146103a15780631135daeb146103b657600080fd5b806306fdde0314610302578063095ea7b31461035a57600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060408051808201909152600f81527f39204c69766573204e6574776f726b000000000000000000000000000000000060208201525b6040516103519190613286565b60405180910390f35b34801561036657600080fd5b5061037a61037536600461330e565b610933565b6040519015158152602001610351565b34801561039657600080fd5b5061039f61094a565b005b3480156103ad57600080fd5b5061039f610a05565b3480156103c257600080fd5b506103cc6103e881565b60405161ffff9091168152602001610351565b3480156103eb57600080fd5b506103f4610a70565b604051908152602001610351565b34801561040e57600080fd5b506103f4600f5481565b34801561042457600080fd5b506103f4610a91565b34801561043957600080fd5b5061039f6104483660046133da565b610aae565b34801561045957600080fd5b5061037a610468366004613416565b610cc2565b34801561047957600080fd5b5061039f610488366004613457565b610d60565b34801561049957600080fd5b5061039f610e8b565b3480156104ae57600080fd5b5060405160128152602001610351565b3480156104ca57600080fd5b506104de6104d9366004613481565b610f8f565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610351565b34801561051857600080fd5b506103f460185481565b34801561052e57600080fd5b50600d54610542906001600160a01b031681565b6040516001600160a01b039091168152602001610351565b34801561056657600080fd5b5061039f610fd6565b34801561057b57600080fd5b5061039f61058a3660046134a8565b61103f565b34801561059b57600080fd5b506011546104de9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156105d857600080fd5b5061039f6105e73660046134a8565b611072565b3480156105f857600080fd5b5061039f6106073660046134a8565b6110a5565b34801561061857600080fd5b506103f46106273660046134e1565b6110d8565b34801561063857600080fd5b5061039f6110e3565b34801561064d57600080fd5b5061039f611203565b34801561066257600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069657600080fd5b506103f46106a53660046134e1565b6001600160a01b031660009081526001602052604090205490565b3480156106cc57600080fd5b5061039f611215565b3480156106e157600080fd5b506103f4600e5481565b3480156106f757600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561072b57600080fd5b506008546001600160a01b0316610542565b34801561074957600080fd5b506000546001600160a01b0316610542565b34801561076757600080fd5b5060408051808201909152600681527f4e696e65466900000000000000000000000000000000000000000000000000006020820152610344565b3480156107ad57600080fd5b5061039f6107bc3660046134e1565b611227565b3480156107cd57600080fd5b5061037a6107dc36600461330e565b611306565b3480156107ed57600080fd5b5061039f6107fc3660046134e1565b611313565b34801561080d57600080fd5b5061039f61081c3660046134e1565b6113a0565b34801561082d57600080fd5b5061039f61083c366004613505565b61147f565b34801561084d57600080fd5b5061039f61085c366004613520565b611515565b34801561086d57600080fd5b506103f461087c36600461353c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b357600080fd5b5061039f6108c2366004613481565b6116e7565b3480156108d357600080fd5b5061039f6108e23660046134e1565b611747565b3480156108f357600080fd5b5061039f6109023660046134e1565b611826565b34801561091357600080fd5b506103f460125481565b34801561092957600080fd5b506103f460135481565b60006109403384846118b6565b5060015b92915050565b6109526119c3565b6103e8600a610962601282613664565b610970906305f5e100613673565b61097a9190613673565b6109849190613692565b60129081556103e89060059061099b90600a613664565b6109a9906305f5e100613673565b6109b39190613673565b6109bd9190613692565b6013556103e860016109d16012600a613664565b6109df906305f5e100613673565b6109e99190613673565b6109f39190613692565b6018556019805460ff19166001179055565b600c546001600160a01b03163314610a645760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e6765207468697300000000000060448201526064015b60405180910390fd5b6019805460ff19169055565b6000610a7e6012600a613664565b610a8c906305f5e100613673565b905090565b610a9d6012600a613664565b610aab906305f5e100613673565b81565b610ab66119c3565b805161ffff7f0000000000000000000000000000000000000000000000000000000000000000811691161115610b2e5760405162461bcd60e51b815260206004820152601160248201527f746f6f20686967682073656c6c206665650000000000000000000000000000006044820152606401610a5b565b60108260ff1681548110610b4457610b446136b4565b600091825260209091200154606082015161ffff90811666010000000000009092041614610bb45760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff16816040015182606001518360200151610bd691906136ca565b610be091906136ca565b61ffff1614610c315760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8060108360ff1681548110610c4857610c486136b4565b600091825260209182902083519101805492840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff1990961691909416179390931792909216179190911790555050565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610d365760405162461bcd60e51b815260206004820152601460248201527f5472616e73666572203e20616c6c6f77616e63650000000000000000000000006044820152606401610a5b565b610d4a8533610d4586856136f0565b6118b6565b610d55858585611a1d565b506001949350505050565b610d686119c3565b600a8261ffff161015610dbd5760405162461bcd60e51b815260206004820152601460248201527f4d6178206d7573742062652061626f76652031250000000000000000000000006044820152606401610a5b565b60058161ffff161015610e125760405162461bcd60e51b815260206004820152601660248201527f4d6178206d7573742062652061626f766520302e3525000000000000000000006044820152606401610a5b565b6103e861ffff8316610e266012600a613664565b610e34906305f5e100613673565b610e3e9190613673565b610e489190613692565b60129081556103e89061ffff831690610e6290600a613664565b610e70906305f5e100613673565b610e7a9190613673565b610e849190613692565b6013555050565b610e936119c3565b6011546001660100000000000090910461ffff1611610ef45760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e5442610f0691906136f0565b1015610f545760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b601180546601000000000000900461ffff16906006610f7283613707565b91906101000a81548161ffff021916908361ffff16021790555050565b60108181548110610f9f57600080fd5b60009182526020909120015461ffff8082169250620100008204811691640100000000810482169166010000000000009091041684565b600c546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6019805460ff19166001179055565b6110476119c3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61107a6119c3565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6110ad6119c3565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600061094482611df7565b6110eb6119c3565b60016010600181548110611101576111016136b4565b6000918252602090912001546601000000000000900461ffff16116111685760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e544261117a91906136f0565b10156111c85760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b60106001815481106111dc576111dc6136b4565b600091825260209091200180546601000000000000900461ffff16906006610f7283613707565b61120b6119c3565b611213611ede565b565b61121d6119c3565b61121360006121d3565b600b546001600160a01b031633146112815760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610940338484611a1d565b61131b6119c3565b6001600160a01b0381166113715760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610a5b565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c546001600160a01b031633146113fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6001600160a01b0381166114505760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114876119c3565b60195460ff166114d95760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b6103e861ffff82166114ed6012600a613664565b6114fb906305f5e100613673565b6115059190613673565b61150f9190613692565b60185550565b61151d6119c3565b805161ffff7f00000000000000000000000000000000000000000000000000000000000000008116911611156115955760405162461bcd60e51b815260206004820152601060248201527f746f6f20686967682062757920666565000000000000000000000000000000006044820152606401610a5b565b601154606082015161ffff908116660100000000000090920416146115fc5760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff1681604001518260600151836020015161161e91906136ca565b61162891906136ca565b61ffff16146116795760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8051601180546020840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff199094169190951617919091171691909117919091179055565b6116ef6119c3565b620151808111156117425760405162461bcd60e51b815260206004820152601460248201527f4d61782074696d65206f6620323420686f7572730000000000000000000000006044820152606401610a5b565b600f55565b600a546001600160a01b031633146117a15760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61182e6119c3565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5b565b6118b3816121d3565b50565b6001600160a01b03831661190c5760405162461bcd60e51b815260206004820152601160248201527f417070726f76652066726f6d207a65726f0000000000000000000000000000006044820152606401610a5b565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152600f60248201527f417070726f766520746f207a65726f00000000000000000000000000000000006044820152606401610a5b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146112135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5b565b6001600160a01b038316611a735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610a5b565b6001600160a01b038216611ac95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a5b565b60008111611b195760405162461bcd60e51b815260206004820152600b60248201527f7a65726f20616d6f756e740000000000000000000000000000000000000000006044820152606401610a5b565b6001600160a01b03821660009081526005602052604090205460ff1680611b865750611b476012600a613664565b611b5290600a613673565b601254611b5f9190613725565b6001600160a01b038316600090815260016020526040902054611b83908390613725565b11155b611bd25760405162461bcd60e51b815260206004820152600f60248201527f6f766572206d61782077616c6c657400000000000000000000000000000000006044820152606401610a5b565b60195460ff16611c67576000546001600160a01b03848116911614801590611c0857506000546001600160a01b03838116911614155b15611c555760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b611c628383836001612230565b505050565b6001600160a01b03831660009081526003602052604090205460ff16158015611ca957506001600160a01b03821660009081526003602052604090205460ff16155b8015611cc357506008546001600160a01b03848116911614155b15611d3b57611cd46012600a613664565b611cdf906001613673565b601354611cec9190613725565b811115611d3b5760405162461bcd60e51b815260206004820152600c60248201527f4f766572206d61782054584e00000000000000000000000000000000000000006044820152606401610a5b565b6008546001600160a01b03848116911614801590611d6757506008546001600160a01b03838116911614155b15611d7957611c628383836000612230565b6001600160a01b03831660009081526004602052604090205460ff16151560011480611dc257506001600160a01b03821660009081526004602052604090205460ff1615156001145b80611dda575060195460ff6101009091041615156001145b15611dec57611c628383836001612230565b611c628383836125ea565b6001600160a01b03811660009081526006602090815260408083205460179092529091205415611ed9576000425b6001600160a01b038416600090815260176020526040902054821015611ed657600f546001600160a01b0385166000908152601760209081526040808320868452600101909152902054611e7990836136f0565b1115611ebf576001600160a01b03841660009081526017602090815260408083208584526002019091529020548015611eb957611eb68185613725565b93505b50611ec4565b611ed6565b81611ece8161373d565b925050611e25565b50505b919050565b6019805461ff00191661010017905530600090815260016020526040812054601454909190611f0f90600290613692565b611f1990836136f0565b9050611f2481612891565b476000611f3082612a50565b905060008360155483611f439190613673565b611f4d9190613692565b905060008460165484611f609190613673565b611f6a9190613692565b600954909150611f849083906001600160a01b0316612cc6565b611fa3611f92600283613692565b600a546001600160a01b0316612cc6565b611fc2611fb1600283613692565b600b546001600160a01b0316612cc6565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613758565b306000818152600160205260409020546007549293509161205a91906001600160a01b0316836118b6565b600d546007546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613771565b50600754600d546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac919061378e565b505060006014819055601581905560165550506019805461ff001916905550505050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416600090815260016020526040902054828110156122995760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b816124a4576001600160a01b03851660009081526017602090815260408083206006909252909120548490811161230057506001600160a01b0386166000908152600660205260408120805486919083906122f59084906136f0565b9091555061233f9050565b6001600160a01b03871660009081526006602052604090205461232390866136f0565b6001600160a01b03881660009081526006602052604081205590505b80158061234c5750815415155b6123985760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b8154156124a1576000425b8354821080156123b35750600083115b1561249e57600f5460008381526001860160205260409020546123d690836136f0565b11806123e0575082155b61242c5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b6000828152600285016020526040902054801561248b578381116124505780612452565b835b905061245e81856136f0565b935080856002016000858152602001908152602001600020600082825461248591906136f0565b90915550505b826124958161373d565b935050506123a3565b50505b50505b6001600160a01b038516600090815260016020526040812080548592906124cc9084906136f0565b90915550506001600160a01b038416600090815260016020526040812080548592906124f9908490613725565b90915550506001600160a01b03841660009081526006602052604081208054859290612526908490613725565b90915550508115612596576001600160a01b03851660009081526006602052604090205483111561255857600061257c565b6001600160a01b03851660009081526006602052604090205461257c9084906136f0565b6001600160a01b0386166000908152600660205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125db91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260016020526040812054819081908190819086111561265a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b6008546001600160a01b0389811691161415612723576040805160808101825260115461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201526126c0908790612da6565b6001600160a01b038c1660009081526017602090815260408083208054808552600282018452828520869055600182019093529083204290558054979c50929a50949850929650909450929083906127178361373d565b91905055505050612771565b6008546001600160a01b038881169116141561277157601854306000908152600160205260409020541061275957612759611ede565b6127638887612e4a565b939850929650909450925090505b82601460008282546127839190613725565b92505081905550816015600082825461279c9190613725565b9250508190555080601660008282546127b59190613725565b90915550506001600160a01b038816600090815260016020526040812080548892906127e29084906136f0565b90915550506001600160a01b0387166000908152600160205260408120805486929061280f908490613725565b90915550503060009081526001602052604081208054879290612833908490613725565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161287f91815260200190565b60405180910390a35050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106128c8576128c86136b4565b6001600160a01b039283166020918202929092010152600d548251911690829060019081106128f9576128f96136b4565b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f91906137bc565b816002815181106129a2576129a26136b4565b6001600160a01b0392831660209182029290920101526007546129c891309116846118b6565b6007546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612a1a90859060009086903090429060040161381d565b600060405180830381600087803b158015612a3457600080fd5b505af1158015612a48573d6000803e3d6000fd5b505050505050565b604080516002808252606082018352600092839291906020830190803683375050600754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906137bc565b81600081518110612b0e57612b0e6136b4565b6001600160a01b039283166020918202929092010152600d54825191169082906001908110612b3f57612b3f6136b4565b6001600160a01b039283166020918202929092010152600d546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190613758565b6007546040517fb6f9de950000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b6f9de95908690612c1090600090879030904290600401613859565b6000604051808303818588803b158015612c2957600080fd5b505af1158015612c3d573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb19190613758565b9050612cbd82826136f0565b95945050505050565b600d546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d569190613771565b612da25760405162461bcd60e51b815260206004820152601460248201527f55534443207472616e73666572206661696c65640000000000000000000000006044820152606401610a5b565b5050565b60008060008060006103e861ffff16866000015161ffff1688612dc99190613673565b612dd39190613692565b60208701519095506103e890612ded9061ffff1689613673565b612df79190613692565b60408701519094506103e890612e119061ffff1689613673565b612e1b9190613692565b925082612e2885876136f0565b612e3291906136f0565b9150612e3e85886136f0565b90509295509295909350565b600080808080806002604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b506001600160a01b0389166000908152601760209081526040808320600690925290912054919250908811612f0b578782600181518110612ebf57612ebf6136b4565b60200260200101818152505087600660008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f0091906136f0565b90915550612f629050565b6001600160a01b038916600090815260066020526040902054825183906001908110612f3957612f396136b4565b6020908102919091018101919091526001600160a01b038a166000908152600690915260408120555b600082600181518110612f7757612f776136b4565b602002602001015189612f8a91906136f0565b82549091501561308a576000425b835482108015612fa85750600083115b1561308757600f546000838152600186016020526040812054909190612fce90846136f0565b60008581526002880160205260409020549110159150801561307357848111612ff75780612ff9565b845b905060008261300957600161300c565b60005b905081888260ff1681518110613024576130246136b4565b602002602001018181516130389190613725565b90525061304582876136f0565b955081876002016000878152602001908152602001600020600082825461306c91906136f0565b9091555050505b8361307d8161373d565b9450505050612f98565b50505b80156130d85760405162461bcd60e51b815260206004820152601260248201527f6e6f7420656e6f7567682062616c616e636500000000000000000000000000006044820152606401610a5b565b600080600080600080886000815181106130f4576130f46136b4565b602002602001015111156131d65761318d88600081518110613118576131186136b4565b60200260200101516010600081548110613134576131346136b4565b600091825260209182902060408051608081018252929091015461ffff80821684526201000082048116948401949094526401000000008104841691830191909152660100000000000090049091166060820152612da6565b9398509196509450925090506131a3848d613725565b9b506131af838c613725565b9a506131bb828b613725565b99506131c7858e613725565b9c506131d3818a613725565b98505b6000886001815181106131eb576131eb6136b4565b602002602001015111156132745761322b8860018151811061320f5761320f6136b4565b60200260200101516010600181548110613134576131346136b4565b939850919650945092509050613241848d613725565b9b5061324d838c613725565b9a50613259828b613725565b9950613265858e613725565b9c50613271818a613725565b98505b50505050505050509295509295909350565b600060208083528351808285015260005b818110156132b357858101830151858201604001528201613297565b818111156132c5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146118b357600080fd5b6000806040838503121561332157600080fd5b823561332c816132f9565b946020939093013593505050565b803561ffff81168114611ed957600080fd5b60006080828403121561335e57600080fd5b6040516080810181811067ffffffffffffffff8211171561338f57634e487b7160e01b600052604160045260246000fd5b60405290508061339e8361333a565b81526133ac6020840161333a565b60208201526133bd6040840161333a565b60408201526133ce6060840161333a565b60608201525092915050565b60008060a083850312156133ed57600080fd5b823560ff811681146133fe57600080fd5b915061340d846020850161334c565b90509250929050565b60008060006060848603121561342b57600080fd5b8335613436816132f9565b92506020840135613446816132f9565b929592945050506040919091013590565b6000806040838503121561346a57600080fd5b6134738361333a565b915061340d6020840161333a565b60006020828403121561349357600080fd5b5035919050565b80151581146118b357600080fd5b600080604083850312156134bb57600080fd5b82356134c6816132f9565b915060208301356134d68161349a565b809150509250929050565b6000602082840312156134f357600080fd5b81356134fe816132f9565b9392505050565b60006020828403121561351757600080fd5b6134fe8261333a565b60006080828403121561353257600080fd5b6134fe838361334c565b6000806040838503121561354f57600080fd5b823561355a816132f9565b915060208301356134d6816132f9565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135bb5781600019048211156135a1576135a161356a565b808516156135ae57918102915b93841c9390800290613585565b509250929050565b6000826135d257506001610944565b816135df57506000610944565b81600181146135f557600281146135ff5761361b565b6001915050610944565b60ff8411156136105761361061356a565b50506001821b610944565b5060208310610133831016604e8410600b841016171561363e575081810a610944565b6136488383613580565b806000190482111561365c5761365c61356a565b029392505050565b60006134fe60ff8416836135c3565b600081600019048311821515161561368d5761368d61356a565b500290565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168185168083038211156136e7576136e761356a565b01949350505050565b6000828210156137025761370261356a565b500390565b600061ffff82168061371b5761371b61356a565b6000190192915050565b600082198211156137385761373861356a565b500190565b60006000198214156137515761375161356a565b5060010190565b60006020828403121561376a57600080fd5b5051919050565b60006020828403121561378357600080fd5b81516134fe8161349a565b6000806000606084860312156137a357600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156137ce57600080fd5b81516134fe816132f9565b600081518084526020808501945080840160005b838110156138125781516001600160a01b0316875295820195908201906001016137ed565b509495945050505050565b85815284602082015260a06040820152600061383c60a08301866137d9565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061387260808301866137d9565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207aa3194acc3216a95f1d1f7be43757dc7ecd85ece42f133a1b20cc50922a5a8264736f6c634300080a0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f0900000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000017c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000014a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d470000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce50000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2

Deployed Bytecode

0x6080604052600436106102f65760003560e01c80635f82986e1161018f578063a9059cbb116100e1578063de7f051b1161008a578063f2fde38b11610064578063f2fde38b146108e7578063f8b45b0514610907578063f94325171461091d57600080fd5b8063de7f051b146108a7578063df214416146108c7578063e8078d941461064157600080fd5b8063b5dc4834116100bb578063b5dc483414610821578063d26dfd9814610841578063dd62ed3e1461086157600080fd5b8063a9059cbb146107c1578063aacebbe3146107e1578063b2b28d201461080157600080fd5b8063790ca413116101435780638da5cb5b1161011d5780638da5cb5b1461073d57806395d89b411461075b578063a214d44c146107a157600080fd5b8063790ca413146106d5578063867508ad146106eb5780638c237c691461071f57600080fd5b80636e628f3b116101745780636e628f3b1461065657806370a082311461068a578063715018a6146106c057600080fd5b80635f82986e1461062c57806367c453491461064157600080fd5b80633072a0c9116102485780633f0b70f0116101fc578063587ee7b5116101d6578063587ee7b5146105cc578063590ffdce146105ec5780635ac3c5e81461060c57600080fd5b80633f0b70f01461055a578063412201041461056f578063470624021461058f57600080fd5b8063350669601161022d57806335066960146104be5780633cb7ab531461050c5780633de35b791461052257600080fd5b80633072a0c91461048d578063313ce567146104a257600080fd5b806318160ddd116102aa578063200ccd3911610284578063200ccd391461042d57806323b872dd1461044d57806328bac04c1461046d57600080fd5b806318160ddd146103df5780631886c0bb146104025780631eb25d131461041857600080fd5b80630ac71193116102db5780630ac711931461038a57806310a3f983146103a15780631135daeb146103b657600080fd5b806306fdde0314610302578063095ea7b31461035a57600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060408051808201909152600f81527f39204c69766573204e6574776f726b000000000000000000000000000000000060208201525b6040516103519190613286565b60405180910390f35b34801561036657600080fd5b5061037a61037536600461330e565b610933565b6040519015158152602001610351565b34801561039657600080fd5b5061039f61094a565b005b3480156103ad57600080fd5b5061039f610a05565b3480156103c257600080fd5b506103cc6103e881565b60405161ffff9091168152602001610351565b3480156103eb57600080fd5b506103f4610a70565b604051908152602001610351565b34801561040e57600080fd5b506103f4600f5481565b34801561042457600080fd5b506103f4610a91565b34801561043957600080fd5b5061039f6104483660046133da565b610aae565b34801561045957600080fd5b5061037a610468366004613416565b610cc2565b34801561047957600080fd5b5061039f610488366004613457565b610d60565b34801561049957600080fd5b5061039f610e8b565b3480156104ae57600080fd5b5060405160128152602001610351565b3480156104ca57600080fd5b506104de6104d9366004613481565b610f8f565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610351565b34801561051857600080fd5b506103f460185481565b34801561052e57600080fd5b50600d54610542906001600160a01b031681565b6040516001600160a01b039091168152602001610351565b34801561056657600080fd5b5061039f610fd6565b34801561057b57600080fd5b5061039f61058a3660046134a8565b61103f565b34801561059b57600080fd5b506011546104de9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156105d857600080fd5b5061039f6105e73660046134a8565b611072565b3480156105f857600080fd5b5061039f6106073660046134a8565b6110a5565b34801561061857600080fd5b506103f46106273660046134e1565b6110d8565b34801561063857600080fd5b5061039f6110e3565b34801561064d57600080fd5b5061039f611203565b34801561066257600080fd5b506103cc7f000000000000000000000000000000000000000000000000000000000000008c81565b34801561069657600080fd5b506103f46106a53660046134e1565b6001600160a01b031660009081526001602052604090205490565b3480156106cc57600080fd5b5061039f611215565b3480156106e157600080fd5b506103f4600e5481565b3480156106f757600080fd5b506103cc7f00000000000000000000000000000000000000000000000000000000000001a481565b34801561072b57600080fd5b506008546001600160a01b0316610542565b34801561074957600080fd5b506000546001600160a01b0316610542565b34801561076757600080fd5b5060408051808201909152600681527f4e696e65466900000000000000000000000000000000000000000000000000006020820152610344565b3480156107ad57600080fd5b5061039f6107bc3660046134e1565b611227565b3480156107cd57600080fd5b5061037a6107dc36600461330e565b611306565b3480156107ed57600080fd5b5061039f6107fc3660046134e1565b611313565b34801561080d57600080fd5b5061039f61081c3660046134e1565b6113a0565b34801561082d57600080fd5b5061039f61083c366004613505565b61147f565b34801561084d57600080fd5b5061039f61085c366004613520565b611515565b34801561086d57600080fd5b506103f461087c36600461353c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108b357600080fd5b5061039f6108c2366004613481565b6116e7565b3480156108d357600080fd5b5061039f6108e23660046134e1565b611747565b3480156108f357600080fd5b5061039f6109023660046134e1565b611826565b34801561091357600080fd5b506103f460125481565b34801561092957600080fd5b506103f460135481565b60006109403384846118b6565b5060015b92915050565b6109526119c3565b6103e8600a610962601282613664565b610970906305f5e100613673565b61097a9190613673565b6109849190613692565b60129081556103e89060059061099b90600a613664565b6109a9906305f5e100613673565b6109b39190613673565b6109bd9190613692565b6013556103e860016109d16012600a613664565b6109df906305f5e100613673565b6109e99190613673565b6109f39190613692565b6018556019805460ff19166001179055565b600c546001600160a01b03163314610a645760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e6765207468697300000000000060448201526064015b60405180910390fd5b6019805460ff19169055565b6000610a7e6012600a613664565b610a8c906305f5e100613673565b905090565b610a9d6012600a613664565b610aab906305f5e100613673565b81565b610ab66119c3565b805161ffff7f00000000000000000000000000000000000000000000000000000000000001a4811691161115610b2e5760405162461bcd60e51b815260206004820152601160248201527f746f6f20686967682073656c6c206665650000000000000000000000000000006044820152606401610a5b565b60108260ff1681548110610b4457610b446136b4565b600091825260209091200154606082015161ffff90811666010000000000009092041614610bb45760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff16816040015182606001518360200151610bd691906136ca565b610be091906136ca565b61ffff1614610c315760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8060108360ff1681548110610c4857610c486136b4565b600091825260209182902083519101805492840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff1990961691909416179390931792909216179190911790555050565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610d365760405162461bcd60e51b815260206004820152601460248201527f5472616e73666572203e20616c6c6f77616e63650000000000000000000000006044820152606401610a5b565b610d4a8533610d4586856136f0565b6118b6565b610d55858585611a1d565b506001949350505050565b610d686119c3565b600a8261ffff161015610dbd5760405162461bcd60e51b815260206004820152601460248201527f4d6178206d7573742062652061626f76652031250000000000000000000000006044820152606401610a5b565b60058161ffff161015610e125760405162461bcd60e51b815260206004820152601660248201527f4d6178206d7573742062652061626f766520302e3525000000000000000000006044820152606401610a5b565b6103e861ffff8316610e266012600a613664565b610e34906305f5e100613673565b610e3e9190613673565b610e489190613692565b60129081556103e89061ffff831690610e6290600a613664565b610e70906305f5e100613673565b610e7a9190613673565b610e849190613692565b6013555050565b610e936119c3565b6011546001660100000000000090910461ffff1611610ef45760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e5442610f0691906136f0565b1015610f545760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b601180546601000000000000900461ffff16906006610f7283613707565b91906101000a81548161ffff021916908361ffff16021790555050565b60108181548110610f9f57600080fd5b60009182526020909120015461ffff8082169250620100008204811691640100000000810482169166010000000000009091041684565b600c546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6019805460ff19166001179055565b6110476119c3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61107a6119c3565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6110ad6119c3565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b600061094482611df7565b6110eb6119c3565b60016010600181548110611101576111016136b4565b6000918252602090912001546601000000000000900461ffff16116111685760405162461bcd60e51b815260206004820152601160248201527f616c7265616479206465637265617365640000000000000000000000000000006044820152606401610a5b565b6203f480600e544261117a91906136f0565b10156111c85760405162461bcd60e51b815260206004820152600860248201527f746f6f20736f6f6e0000000000000000000000000000000000000000000000006044820152606401610a5b565b60106001815481106111dc576111dc6136b4565b600091825260209091200180546601000000000000900461ffff16906006610f7283613707565b61120b6119c3565b611213611ede565b565b61121d6119c3565b61121360006121d3565b600b546001600160a01b031633146112815760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610940338484611a1d565b61131b6119c3565b6001600160a01b0381166113715760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610a5b565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600c546001600160a01b031633146113fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c792050726f6f662063616e206368616e676520746869730000000000006044820152606401610a5b565b6001600160a01b0381166114505760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114876119c3565b60195460ff166114d95760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b6103e861ffff82166114ed6012600a613664565b6114fb906305f5e100613673565b6115059190613673565b61150f9190613692565b60185550565b61151d6119c3565b805161ffff7f000000000000000000000000000000000000000000000000000000000000008c8116911611156115955760405162461bcd60e51b815260206004820152601060248201527f746f6f20686967682062757920666565000000000000000000000000000000006044820152606401610a5b565b601154606082015161ffff908116660100000000000090920416146115fc5760405162461bcd60e51b815260206004820152601f60248201527f50726f6f66466565526174652063616e206e6f74206265206368616e676564006044820152606401610a5b565b806000015161ffff1681604001518260600151836020015161161e91906136ca565b61162891906136ca565b61ffff16146116795760405162461bcd60e51b815260206004820152601260248201527f696e636f727265637420666565207261746500000000000000000000000000006044820152606401610a5b565b8051601180546020840151604085015160609095015161ffff90811666010000000000000267ffff00000000000019968216640100000000029690961667ffffffff0000000019928216620100000263ffffffff199094169190951617919091171691909117919091179055565b6116ef6119c3565b620151808111156117425760405162461bcd60e51b815260206004820152601460248201527f4d61782074696d65206f6620323420686f7572730000000000000000000000006044820152606401610a5b565b600f55565b600a546001600160a01b031633146117a15760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792050726f6f662063616e206368616e676520746869732e00000000006044820152606401610a5b565b6001600160a01b0381166117f75760405162461bcd60e51b815260206004820152601560248201527f63616e2774206265207a65726f206164647265737300000000000000000000006044820152606401610a5b565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61182e6119c3565b6001600160a01b0381166118aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a5b565b6118b3816121d3565b50565b6001600160a01b03831661190c5760405162461bcd60e51b815260206004820152601160248201527f417070726f76652066726f6d207a65726f0000000000000000000000000000006044820152606401610a5b565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152600f60248201527f417070726f766520746f207a65726f00000000000000000000000000000000006044820152606401610a5b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146112135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a5b565b6001600160a01b038316611a735760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610a5b565b6001600160a01b038216611ac95760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a5b565b60008111611b195760405162461bcd60e51b815260206004820152600b60248201527f7a65726f20616d6f756e740000000000000000000000000000000000000000006044820152606401610a5b565b6001600160a01b03821660009081526005602052604090205460ff1680611b865750611b476012600a613664565b611b5290600a613673565b601254611b5f9190613725565b6001600160a01b038316600090815260016020526040902054611b83908390613725565b11155b611bd25760405162461bcd60e51b815260206004820152600f60248201527f6f766572206d61782077616c6c657400000000000000000000000000000000006044820152606401610a5b565b60195460ff16611c67576000546001600160a01b03848116911614801590611c0857506000546001600160a01b03838116911614155b15611c555760405162461bcd60e51b815260206004820152600e60248201527f5478206e6f7420737461727465640000000000000000000000000000000000006044820152606401610a5b565b611c628383836001612230565b505050565b6001600160a01b03831660009081526003602052604090205460ff16158015611ca957506001600160a01b03821660009081526003602052604090205460ff16155b8015611cc357506008546001600160a01b03848116911614155b15611d3b57611cd46012600a613664565b611cdf906001613673565b601354611cec9190613725565b811115611d3b5760405162461bcd60e51b815260206004820152600c60248201527f4f766572206d61782054584e00000000000000000000000000000000000000006044820152606401610a5b565b6008546001600160a01b03848116911614801590611d6757506008546001600160a01b03838116911614155b15611d7957611c628383836000612230565b6001600160a01b03831660009081526004602052604090205460ff16151560011480611dc257506001600160a01b03821660009081526004602052604090205460ff1615156001145b80611dda575060195460ff6101009091041615156001145b15611dec57611c628383836001612230565b611c628383836125ea565b6001600160a01b03811660009081526006602090815260408083205460179092529091205415611ed9576000425b6001600160a01b038416600090815260176020526040902054821015611ed657600f546001600160a01b0385166000908152601760209081526040808320868452600101909152902054611e7990836136f0565b1115611ebf576001600160a01b03841660009081526017602090815260408083208584526002019091529020548015611eb957611eb68185613725565b93505b50611ec4565b611ed6565b81611ece8161373d565b925050611e25565b50505b919050565b6019805461ff00191661010017905530600090815260016020526040812054601454909190611f0f90600290613692565b611f1990836136f0565b9050611f2481612891565b476000611f3082612a50565b905060008360155483611f439190613673565b611f4d9190613692565b905060008460165484611f609190613673565b611f6a9190613692565b600954909150611f849083906001600160a01b0316612cc6565b611fa3611f92600283613692565b600a546001600160a01b0316612cc6565b611fc2611fb1600283613692565b600b546001600160a01b0316612cc6565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613758565b306000818152600160205260409020546007549293509161205a91906001600160a01b0316836118b6565b600d546007546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613771565b50600754600d546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152306024820152604481018690526064810185905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac919061378e565b505060006014819055601581905560165550506019805461ff001916905550505050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416600090815260016020526040902054828110156122995760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b816124a4576001600160a01b03851660009081526017602090815260408083206006909252909120548490811161230057506001600160a01b0386166000908152600660205260408120805486919083906122f59084906136f0565b9091555061233f9050565b6001600160a01b03871660009081526006602052604090205461232390866136f0565b6001600160a01b03881660009081526006602052604081205590505b80158061234c5750815415155b6123985760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b8154156124a1576000425b8354821080156123b35750600083115b1561249e57600f5460008381526001860160205260409020546123d690836136f0565b11806123e0575082155b61242c5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820617661696c61626c652062616c616e6365000000006044820152606401610a5b565b6000828152600285016020526040902054801561248b578381116124505780612452565b835b905061245e81856136f0565b935080856002016000858152602001908152602001600020600082825461248591906136f0565b90915550505b826124958161373d565b935050506123a3565b50505b50505b6001600160a01b038516600090815260016020526040812080548592906124cc9084906136f0565b90915550506001600160a01b038416600090815260016020526040812080548592906124f9908490613725565b90915550506001600160a01b03841660009081526006602052604081208054859290612526908490613725565b90915550508115612596576001600160a01b03851660009081526006602052604090205483111561255857600061257c565b6001600160a01b03851660009081526006602052604090205461257c9084906136f0565b6001600160a01b0386166000908152600660205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125db91815260200190565b60405180910390a35050505050565b6001600160a01b038316600090815260016020526040812054819081908190819086111561265a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610a5b565b6008546001600160a01b0389811691161415612723576040805160808101825260115461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201526126c0908790612da6565b6001600160a01b038c1660009081526017602090815260408083208054808552600282018452828520869055600182019093529083204290558054979c50929a50949850929650909450929083906127178361373d565b91905055505050612771565b6008546001600160a01b038881169116141561277157601854306000908152600160205260409020541061275957612759611ede565b6127638887612e4a565b939850929650909450925090505b82601460008282546127839190613725565b92505081905550816015600082825461279c9190613725565b9250508190555080601660008282546127b59190613725565b90915550506001600160a01b038816600090815260016020526040812080548892906127e29084906136f0565b90915550506001600160a01b0387166000908152600160205260408120805486929061280f908490613725565b90915550503060009081526001602052604081208054879290612833908490613725565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161287f91815260200190565b60405180910390a35050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106128c8576128c86136b4565b6001600160a01b039283166020918202929092010152600d548251911690829060019081106128f9576128f96136b4565b6001600160a01b03928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f91906137bc565b816002815181106129a2576129a26136b4565b6001600160a01b0392831660209182029290920101526007546129c891309116846118b6565b6007546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612a1a90859060009086903090429060040161381d565b600060405180830381600087803b158015612a3457600080fd5b505af1158015612a48573d6000803e3d6000fd5b505050505050565b604080516002808252606082018352600092839291906020830190803683375050600754604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afb91906137bc565b81600081518110612b0e57612b0e6136b4565b6001600160a01b039283166020918202929092010152600d54825191169082906001908110612b3f57612b3f6136b4565b6001600160a01b039283166020918202929092010152600d546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190613758565b6007546040517fb6f9de950000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b6f9de95908690612c1090600090879030904290600401613859565b6000604051808303818588803b158015612c2957600080fd5b505af1158015612c3d573d6000803e3d6000fd5b5050600d546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a082319150602401602060405180830381865afa158015612c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb19190613758565b9050612cbd82826136f0565b95945050505050565b600d546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d569190613771565b612da25760405162461bcd60e51b815260206004820152601460248201527f55534443207472616e73666572206661696c65640000000000000000000000006044820152606401610a5b565b5050565b60008060008060006103e861ffff16866000015161ffff1688612dc99190613673565b612dd39190613692565b60208701519095506103e890612ded9061ffff1689613673565b612df79190613692565b60408701519094506103e890612e119061ffff1689613673565b612e1b9190613692565b925082612e2885876136f0565b612e3291906136f0565b9150612e3e85886136f0565b90509295509295909350565b600080808080806002604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b506001600160a01b0389166000908152601760209081526040808320600690925290912054919250908811612f0b578782600181518110612ebf57612ebf6136b4565b60200260200101818152505087600660008b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f0091906136f0565b90915550612f629050565b6001600160a01b038916600090815260066020526040902054825183906001908110612f3957612f396136b4565b6020908102919091018101919091526001600160a01b038a166000908152600690915260408120555b600082600181518110612f7757612f776136b4565b602002602001015189612f8a91906136f0565b82549091501561308a576000425b835482108015612fa85750600083115b1561308757600f546000838152600186016020526040812054909190612fce90846136f0565b60008581526002880160205260409020549110159150801561307357848111612ff75780612ff9565b845b905060008261300957600161300c565b60005b905081888260ff1681518110613024576130246136b4565b602002602001018181516130389190613725565b90525061304582876136f0565b955081876002016000878152602001908152602001600020600082825461306c91906136f0565b9091555050505b8361307d8161373d565b9450505050612f98565b50505b80156130d85760405162461bcd60e51b815260206004820152601260248201527f6e6f7420656e6f7567682062616c616e636500000000000000000000000000006044820152606401610a5b565b600080600080600080886000815181106130f4576130f46136b4565b602002602001015111156131d65761318d88600081518110613118576131186136b4565b60200260200101516010600081548110613134576131346136b4565b600091825260209182902060408051608081018252929091015461ffff80821684526201000082048116948401949094526401000000008104841691830191909152660100000000000090049091166060820152612da6565b9398509196509450925090506131a3848d613725565b9b506131af838c613725565b9a506131bb828b613725565b99506131c7858e613725565b9c506131d3818a613725565b98505b6000886001815181106131eb576131eb6136b4565b602002602001015111156132745761322b8860018151811061320f5761320f6136b4565b60200260200101516010600181548110613134576131346136b4565b939850919650945092509050613241848d613725565b9b5061324d838c613725565b9a50613259828b613725565b9950613265858e613725565b9c50613271818a613725565b98505b50505050505050509295509295909350565b600060208083528351808285015260005b818110156132b357858101830151858201604001528201613297565b818111156132c5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146118b357600080fd5b6000806040838503121561332157600080fd5b823561332c816132f9565b946020939093013593505050565b803561ffff81168114611ed957600080fd5b60006080828403121561335e57600080fd5b6040516080810181811067ffffffffffffffff8211171561338f57634e487b7160e01b600052604160045260246000fd5b60405290508061339e8361333a565b81526133ac6020840161333a565b60208201526133bd6040840161333a565b60408201526133ce6060840161333a565b60608201525092915050565b60008060a083850312156133ed57600080fd5b823560ff811681146133fe57600080fd5b915061340d846020850161334c565b90509250929050565b60008060006060848603121561342b57600080fd5b8335613436816132f9565b92506020840135613446816132f9565b929592945050506040919091013590565b6000806040838503121561346a57600080fd5b6134738361333a565b915061340d6020840161333a565b60006020828403121561349357600080fd5b5035919050565b80151581146118b357600080fd5b600080604083850312156134bb57600080fd5b82356134c6816132f9565b915060208301356134d68161349a565b809150509250929050565b6000602082840312156134f357600080fd5b81356134fe816132f9565b9392505050565b60006020828403121561351757600080fd5b6134fe8261333a565b60006080828403121561353257600080fd5b6134fe838361334c565b6000806040838503121561354f57600080fd5b823561355a816132f9565b915060208301356134d6816132f9565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135bb5781600019048211156135a1576135a161356a565b808516156135ae57918102915b93841c9390800290613585565b509250929050565b6000826135d257506001610944565b816135df57506000610944565b81600181146135f557600281146135ff5761361b565b6001915050610944565b60ff8411156136105761361061356a565b50506001821b610944565b5060208310610133831016604e8410600b841016171561363e575081810a610944565b6136488383613580565b806000190482111561365c5761365c61356a565b029392505050565b60006134fe60ff8416836135c3565b600081600019048311821515161561368d5761368d61356a565b500290565b6000826136af57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168185168083038211156136e7576136e761356a565b01949350505050565b6000828210156137025761370261356a565b500390565b600061ffff82168061371b5761371b61356a565b6000190192915050565b600082198211156137385761373861356a565b500190565b60006000198214156137515761375161356a565b5060010190565b60006020828403121561376a57600080fd5b5051919050565b60006020828403121561378357600080fd5b81516134fe8161349a565b6000806000606084860312156137a357600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156137ce57600080fd5b81516134fe816132f9565b600081518084526020808501945080840160005b838110156138125781516001600160a01b0316875295820195908201906001016137ed565b509495945050505050565b85815284602082015260a06040820152600061383c60a08301866137d9565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061387260808301866137d9565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212207aa3194acc3216a95f1d1f7be43757dc7ecd85ece42f133a1b20cc50922a5a8264736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f0900000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000017c0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000014a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d470000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce50000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2

-----Decoded View---------------
Arg [0] : _param (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
29 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 00000000000000000000000027a9a58463c0f99cce0e7cd4bf995619460e3a2f
Arg [4] : 000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e
Arg [5] : 0000000000000000000000001bf4cb781b97724a8a22ef064dce6bbc1c26cdda
Arg [6] : 000000000000000000000000acfb878960bcda38782d854efb2e687b57e31f09
Arg [7] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [8] : 000000000000000000000000000000000000000000000000000000000000017c
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [10] : 000000000000000000000000000000000000000000000000000000000000014a
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [13] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [14] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [17] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [18] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [20] : 00000000000000000000000000000000000000000000000000000000000001a4
Arg [21] : 000000000000000000000000000000000000000000000000000000000000008c
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [23] : 000000000000000000000000cc4cef22c65cb9615dacf0c95253a036d3fcf7ab
Arg [24] : 000000000000000000000000ce07045d946797fc6b8857dc3cc0a972fcabdb26
Arg [25] : 000000000000000000000000290116f3af26a9e30c3989f9210416bd1cbb5d47
Arg [26] : 0000000000000000000000007e86ce46eb49b1ca67dd7eaf2923a4fbea159ce5
Arg [27] : 0000000000000000000000000cce3498b9865c8dd54ab7eb9a0d2f562721fd30
Arg [28] : 000000000000000000000000e481f9c3ad5c235076161b7556f8d0b49d41b9f2


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.