ETH Price: $3,262.15 (-0.00%)
Gas: 8.06 Gwei
 

Overview

Max Total Supply

1,000,000,000 Ten no-Tsukai

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00000000027402923 Ten no-Tsukai

Value
$0.00
0xba31c8de13667f6579d978c13b2f9a2793be8448
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TenNoTsukai

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-12
*/

/**

t.me/TenNoTsukai

*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
// Just the basic IERC20 interface
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, 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 sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// We use the Auth contract mainly to have two devs able to interacet with the contract
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

contract TenNoTsukai is IERC20, Auth {
   
    // Constant addresses 
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;
    IDEXRouter public constant router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    // Immutable vars
    address public immutable pair; // After we set the pair we don't have to change it again

    // Token info is constant
    string constant _name = "Ten no-Tsukai";
    string constant _symbol = "Ten no-Tsukai";
    uint8 constant _decimals = 18;

    // Total supply is 1 billion
    uint256 _totalSupply = 1 * (10**9) * (10 ** _decimals);

    // The tax divisor is also constant (and hence immutable)
    // 1000 so we can also use halves, like 2.5%
    uint256 constant taxDivisor = 1_000;
    
    // 10 / 1000 = 0.01 = 1%
    uint256 public _maxTxAmount = _totalSupply * 20 / taxDivisor; 
    uint256 public _maxWalletToken =  _totalSupply * 20 / taxDivisor; 

    // Keep track of wallet balances and approvals (allowance)
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    // Mapping to keep track of what wallets/contracts are exempt
    // from fees
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt; // Both wallet + max TX

    // Also, to keep it organized, a seperate mapping to exclude the presale
    // and locker from limits
    mapping (address => bool) presaleOrlock;

    //fees are mulitplied by 10 to allow decimals, and therefore dividied by 1000 (see takefee)
    uint256 marketingBuyFee = 10;
    uint256 liquidityBuyFee = 0;
    uint256 developmentBuyFee = 10;
    uint256 public totalBuyFee = marketingBuyFee + liquidityBuyFee + developmentBuyFee;

    uint256 marketingSellFee = 10;
    uint256 liquiditySellFee = 0;
    uint256 developmentSellFee = 10;
    uint256 public totalSellFee = marketingSellFee + liquiditySellFee + developmentSellFee;

    // For the sniper friends
    uint256 private sniperTaxTill; 

    // In case anything would go wrong with fees we can just disable them
    bool feesEnabled = true;

    // Whether tx limits should apply or not 
    bool limits = true;

    // To keep track of the tokens collected to swap
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDev;

    // Wallets used to send the fees to
    address public liquidityWallet;
    address public marketingWallet;
    address public developmentWallet;

    // One time trade lock
    bool tradeBlock = true;
    bool lockUsed = false;

    // Contract cant be tricked into spam selling exploit
    uint256 lastSellTime;
    
    // When to swap contract tokens, and how many to swap
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 10 / 100_000; // 0.01%
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    // This will just check if the transferf is called from within 
    // the token -> ETH swap when processing the fees (and adding LP)
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }


    constructor () Auth(msg.sender) {
        // Create the lp pair
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));

        // Exclude the contract
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;

        // Exclude the owner
        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        
        // Exclude the pair
        isTxLimitExempt[address(pair)] = true; 

        // Exclude the router 
        isTxLimitExempt[address(router)] = true;

        // Set fee receivers
        liquidityWallet = 0xFcccbb3c98589A76CAb2ebd1E852148a2F8e512B;
        marketingWallet = 0xFcccbb3c98589A76CAb2ebd1E852148a2F8e512B;
        developmentWallet = 0xFcccbb3c98589A76CAb2ebd1E852148a2F8e512B;

        // Approve this contract & owner to interact with the 
        // router and pair contract (for swapping)
        _approve(address(this), address(router), _totalSupply);
        _approve(msg.sender, address(pair), _totalSupply);

        // Mint the tokens
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function getPair() external view returns (address){return pair;}

    // Internal approve 
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    // Regular approve the contract
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    // We actually only need to exempt any locks or presale addresses
    // we could use a feeexempt or authorize it, but this is a bit cleaner
    function excludeLockorPresale(address add) external authorized {
        // Exclude from fees
        isFeeExempt[add] = true;
        isTxLimitExempt[add] = true;
        // We want to allow transfers to locks and from the presale
        // address when trading is not yet enabled. 
        presaleOrlock[add] = true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 senderBalance = _balances[sender];
        // Check if the sender has sufficient balance
        require(senderBalance >= amount, "Insufficient Balance");
        // Update balances
        _balances[sender] = _balances[sender] - amount; 
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Set the buy fees, this can not exceed 15%, 150 / 1000 = 0.15 = 15%
    function setBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developFee) external authorized{
        require(_marketingFee + _liquidityFee + _developFee <= 100); // max 10%
        marketingBuyFee = _marketingFee;
        liquidityBuyFee = _liquidityFee;
        developmentBuyFee = _developFee;
        totalBuyFee = _marketingFee + _liquidityFee + _developFee;
    }
    
    // Set the sell fees, this can not exceed 15%, 150 / 1000 = 0.15 = 15%
    function setSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developFee) external authorized{
        require(_marketingFee + _liquidityFee + _developFee <= 250); // max 25%
        marketingSellFee = _marketingFee;
        liquiditySellFee = _liquidityFee;
        developmentSellFee = _developFee;
        totalSellFee = _marketingFee + _liquidityFee + _developFee;
    }

    // To change the tax receiving wallets
    function setWallets(address _marketingWallet, address _liquidityWallet, address _developWallet) external authorized {
        marketingWallet = _marketingWallet;
        liquidityWallet = _liquidityWallet;
        developmentWallet = _developWallet;
    }

    // To limit the number of tokens a wallet can buy, especially relevant at launch
    function setMaxWallet(uint256 percent) external authorized {
        require(percent >= 10); //should be at least 1% of the total supply (note divisor is 1000)
        _maxWalletToken = ( _totalSupply * percent ) / taxDivisor;
    }

    // To limit the number of tokens per transactions
    function setTxLimit(uint256 percent) external authorized {
        require(percent >= 10); //should be at least 1% of the total supply (note divisor is 1000)
        _maxTxAmount = ( _totalSupply * percent ) / taxDivisor;
    }
    
    function checkLimits(address sender,address recipient, uint256 amount) internal view {
        // If both sender and recipient are excluded we don't have to limit 
        if (isTxLimitExempt[sender] && isTxLimitExempt[recipient]){return;}

        // In any other case we will check whether this is a buy or sell
        // to determine the tx limit
        
        // buy
        if (sender == pair && !isTxLimitExempt[recipient]) {  
            require(amount <= _maxTxAmount, "Max tx limit");

        // sell
        } else if(recipient == pair && !isTxLimitExempt[sender] ) { 
            require(amount <= _maxTxAmount, "Max tx limit");
        }

        // Also check max wallet 
        if (!isTxLimitExempt[recipient]) {
            require(amount + balanceOf(recipient) <= _maxWalletToken, "Max wallet");
        }

    }

    // We will lift the transaction limits just after launch
    function liftLimits() external authorized {
        limits = false;
    }

    // This would make the token fee-less in case taking fees
    // would at any point block transfers. This is reversible
    function setFeeTaking(bool takeFees) external authorized {
        feesEnabled = takeFees;
    }

    // Enable trading - this can only be called once (by just the owner)
    function startTrading() external onlyOwner {
        require(lockUsed == false);
        tradeBlock = false;
        sniperTaxTill = block.number + 2; // (<sniperTaxTill, so first block)
        lockUsed = true;
    }
    
    // When and if to swap the tokens in the contract
    function setTokenSwapSettings(bool _enabled, uint256 _threshold) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _threshold * (10 ** _decimals); 
    }
    
    // Check if the contract should swap tokens
    function shouldTokenSwap(address recipient) internal view returns (bool) {
        return recipient == pair // i.e. is sell
        && lastSellTime + 1 < block.timestamp // block contract spam sells
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function takeFee(address from, address to, uint256 amount) internal returns (uint256) {

        // If the sender or receiver is exempt from fees, skip fees
        if (isFeeExempt[from] || isFeeExempt[to]) {
            return amount;
        }

        // This does not charge for wallet-wallet transfers
        uint256 fees;

        // Sniper tax
        if (block.number < sniperTaxTill) {
            fees = amount * 98 / 100; // 98% tax
            tokensForLiquidity += (fees * 50) / 98;
            tokensForMarketing += (fees * 48) / 98;
        }

        // On sell
        else if (to == pair && totalSellFee > 0) {
            fees = amount * totalSellFee / taxDivisor;
            tokensForLiquidity += (fees * liquiditySellFee)   / totalSellFee;
            tokensForDev       += (fees * developmentSellFee) / totalSellFee;
            tokensForMarketing += (fees * marketingSellFee)   / totalSellFee;
        }

        // On buy
        else if (from == pair && totalBuyFee > 0) {
            fees = amount * totalBuyFee / taxDivisor;
            tokensForLiquidity += (fees * liquidityBuyFee)   / totalBuyFee ;
            tokensForDev       += (fees * developmentBuyFee) / totalBuyFee;
            tokensForMarketing += (fees * marketingBuyFee)   / totalBuyFee;
        }

        // If we collected fees, send them to the contract
        if (fees > 0) {
            _basicTransfer(from, address(this), fees);
            emit Transfer(from, address(this), fees);
        }

        // Return the taxed amount
        return amount -= fees;
    }

    
    function swapTokensForEth(uint256 tokenAmount) private {
        // Swap path token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        // Make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // Add liquidity from the contract. Now the LP tokens get send to the lP
        // wallet, but we could also change the LP receiver to the burn address leter
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {return;}
  
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        // Swap the tokens for ETH
        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) / totalTokensToSwap;
        uint256 ethForDev       = (ethBalance * tokensForDev)       / totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        // Reset token fee counts
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        // Send Dev fees
        (success, ) = address(developmentWallet).call{value: ethForDev}("");

        // Add liquidty
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        // Whatever remains (this should be ~ethForMarketing) send to the marketing wallet
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");

        lastSellTime = block.timestamp;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        if (owner == msg.sender){
            return _basicTransfer(msg.sender, recipient, amount);
        }
        else {
            return _transferFrom(msg.sender, recipient, amount);
        }
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(_allowances[sender][msg.sender] != _totalSupply){
            // Get the current allowance
            uint256 curAllowance =  _allowances[sender][msg.sender];
            require(curAllowance >= amount, "Insufficient Allowance");
            _allowances[sender][msg.sender] -= amount;
        }
        return _transferFrom(sender, recipient, amount);
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // These transfers are always feeless and limitless
        if ( authorizations[sender] || authorizations[recipient] || presaleOrlock[sender] || inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        // In any other case, check if trading is open already
        require(tradeBlock == false,"Trading not open yet");
            
        // If limits are enabled we check the max wallet and max tx.
        if (limits){checkLimits(sender, recipient, amount);}

        // Check how much fees are accumulated in the contract, if > threshold, swap
        if(shouldTokenSwap(recipient)){ swapBack();}

        // Charge transaction fees (only swaps) when enabled
        if(feesEnabled){
             amount = (recipient == pair || sender == pair) ? takeFee(sender, recipient, amount) : amount;
        } 

        // Send the remaining tokens, after fee
        _basicTransfer(sender, recipient, amount);

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

    // In case anyone would send ETH to the contract directly
    // or when, for some reason, autoswap would fail. We 
    // send the contact ETH to the marketing wallet
    function clearStuckWETH(uint256 perc) external authorized {
        uint256 amountWETH = address(this).balance;
        payable(marketingWallet).transfer(amountWETH * perc / 100);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"perc","type":"uint256"}],"name":"clearStuckWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"excludeLockorPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liftLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"takeFees","type":"bool"}],"name":"setFeeTaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setTokenSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"},{"internalType":"address","name":"_developWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000126012600a620005a3565b6200002290633b9aca00620005bb565b6002556103e86002546014620000399190620005bb565b620000459190620005d5565b6003556103e860025460146200005c9190620005bb565b620000689190620005d5565b600455600a8080556000600b819055600c829055620000889082620005f8565b620000949190620005f8565b600d55600a600e8190556000600f8190556010829055620000b69082620005f8565b620000c29190620005f8565b6011556013805461010161ffff199091161790556019805461ffff60a01b1916600160a01b179055601b805460ff19166001179055600254620186a0906200010c90600a620005bb565b620001189190620005d5565b601c553480156200012857600080fd5b50600080546001600160a01b031916339081178255815260016020818152604092839020805460ff1916909217909155815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9263c45a01559260048083019391928290030181865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200060e565b6001600160a01b031663c9c65396737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025191906200060e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200060e565b6001600160a01b031660808190523060008181526007602081815260408084208054600160ff1991821681179092556008808552838720805483168417905533875294845282862080548216831790559390925280842080548416831790559483529382208054821685179055737a250d5630b4cf539739df2c5dacb4c659f2488d918290527f226e7c4e32ba0cd918c39b21526eb23f3f5958fcfd83d5cf69b9510bf01e2e1780549091169093179092556017805473fcccbb3c98589a76cab2ebd1e852148a2f8e512b6001600160a01b0319918216811790925560188054821683179055601980549091169091179055600254620003c592906200042d565b620003dc336080516002546200042d60201b60201c565b60025433600081815260056020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000639565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e5578160001904821115620004c957620004c96200048e565b80851615620004d757918102915b93841c9390800290620004a9565b509250929050565b600082620004fe575060016200059d565b816200050d575060006200059d565b8160018114620005265760028114620005315762000551565b60019150506200059d565b60ff8411156200054557620005456200048e565b50506001821b6200059d565b5060208310610133831016604e8410600b841016171562000576575081810a6200059d565b620005828383620004a4565b80600019048211156200059957620005996200048e565b0290505b92915050565b6000620005b460ff841683620004ed565b9392505050565b80820281158282048414176200059d576200059d6200048e565b600082620005f357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200059d576200059d6200048e565b6000602082840312156200062157600080fd5b81516001600160a01b0381168114620005b457600080fd5b6080516121256200068d60003960008181610553015281816105e401528181610ff00152818161102b01528181611241015281816112e6015281816114090152818161179a015261187001526121256000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063c1f1b1b5116100ab578063f2fde38b1161006f578063f2fde38b146106ae578063f60b3d6d146106ce578063f887ea40146106e3578063fe6236741461070b578063fe9fbb801461072b57600080fd5b8063c1f1b1b5146105d5578063d469801614610608578063dd62ed3e14610628578063eb3410401461066e578063f0b37c041461068e57600080fd5b80639d9241ec116100f25780639d9241ec1461052b578063a8aa1b3114610541578063a9059cbb14610575578063b6a5d7de14610595578063c04a5414146105b557600080fd5b806375f0a874146104c757806378109e54146104ff5780637d1db4a51461051557806395d89b411461028057600080fd5b80632f54bf6e116101b15780635d0044ca116101755780635d0044ca146104175780636ddd17131461043757806370a082311461045157806372f2943a1461048757806375cb1bd1146104a757600080fd5b80632f54bf6e14610376578063313ce567146103a5578063571ac8b0146103c157806359b107b9146103e15780635c85974f146103f757600080fd5b80630d075d9c116101f85780630d075d9c146102ec5780630f683e901461030c57806318160ddd1461032c57806323b872dd14610341578063293230b81461036157600080fd5b80630445b6671461023557806304fda8ff1461025e57806306fdde0314610280578063095ea7b3146102bc57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601c5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027e610279366004611be3565b61074b565b005b34801561028c57600080fd5b50604080518082018252600d81526c54656e206e6f2d5473756b616960981b602082015290516102559190611bfc565b3480156102c857600080fd5b506102dc6102d7366004611c62565b6107cd565b6040519015158152602001610255565b3480156102f857600080fd5b5061027e610307366004611c8e565b61083a565b34801561031857600080fd5b5061027e610327366004611c8e565b6108ad565b34801561033857600080fd5b5060025461024b565b34801561034d57600080fd5b506102dc61035c366004611cba565b610920565b34801561036d57600080fd5b5061027e610a56565b34801561038257600080fd5b506102dc610391366004611cfb565b6000546001600160a01b0391821691161490565b3480156103b157600080fd5b5060405160128152602001610255565b3480156103cd57600080fd5b506102dc6103dc366004611cfb565b610ac7565b3480156103ed57600080fd5b5061024b600d5481565b34801561040357600080fd5b5061027e610412366004611be3565b610ad5565b34801561042357600080fd5b5061027e610432366004611be3565b610b29565b34801561044357600080fd5b50601b546102dc9060ff1681565b34801561045d57600080fd5b5061024b61046c366004611cfb565b6001600160a01b031660009081526005602052604090205490565b34801561049357600080fd5b5061027e6104a2366004611cfb565b610b7d565b3480156104b357600080fd5b5061027e6104c2366004611d18565b610bed565b3480156104d357600080fd5b506018546104e7906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561050b57600080fd5b5061024b60045481565b34801561052157600080fd5b5061024b60035481565b34801561053757600080fd5b5061024b60115481565b34801561054d57600080fd5b506104e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561058157600080fd5b506102dc610590366004611c62565b610c51565b3480156105a157600080fd5b5061027e6105b0366004611cfb565b610c83565b3480156105c157600080fd5b506019546104e7906001600160a01b031681565b3480156105e157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104e7565b34801561061457600080fd5b506017546104e7906001600160a01b031681565b34801561063457600080fd5b5061024b610643366004611d63565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561067a57600080fd5b5061027e610689366004611db1565b610cd4565b34801561069a57600080fd5b5061027e6106a9366004611cfb565b610d24565b3480156106ba57600080fd5b5061027e6106c9366004611cfb565b610d6f565b3480156106da57600080fd5b5061027e610e05565b3480156106ef57600080fd5b506104e7737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561071757600080fd5b5061027e610726366004611dcd565b610e37565b34801561073757600080fd5b506102dc610746366004611cfb565b610e6f565b61075433610e6f565b6107795760405162461bcd60e51b815260040161077090611de8565b60405180910390fd5b60185447906001600160a01b03166108fc60646107968585611e23565b6107a09190611e3a565b6040518115909202916000818181858888f193505050501580156107c8573d6000803e3d6000fd5b505050565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108289086815260200190565b60405180910390a35060015b92915050565b61084333610e6f565b61085f5760405162461bcd60e51b815260040161077090611de8565b60648161086c8486611e5c565b6108769190611e5c565b111561088157600080fd5b600a839055600b829055600c8190558061089b8385611e5c565b6108a59190611e5c565b600d55505050565b6108b633610e6f565b6108d25760405162461bcd60e51b815260040161077090611de8565b60fa816108df8486611e5c565b6108e99190611e5c565b11156108f457600080fd5b600e839055600f82905560108190558061090e8385611e5c565b6109189190611e5c565b601155505050565b60006001600160a01b0384166109485760405162461bcd60e51b815260040161077090611e6f565b6001600160a01b03831661096e5760405162461bcd60e51b815260040161077090611eb4565b6002546001600160a01b038516600090815260066020908152604080832033845290915290205414610a41576001600160a01b038416600090815260066020908152604080832033845290915290205482811015610a075760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610770565b6001600160a01b038516600090815260066020908152604080832033845290915281208054859290610a3a908490611ef7565b9091555050505b610a4c848484610e8d565b90505b9392505050565b6000546001600160a01b03163314610a805760405162461bcd60e51b815260040161077090611f0a565b601954600160a81b900460ff1615610a9757600080fd5b6019805460ff60a01b19169055610aaf436002611e5c565b6012556019805460ff60a81b1916600160a81b179055565b6000610834826002546107cd565b610ade33610e6f565b610afa5760405162461bcd60e51b815260040161077090611de8565b600a811015610b0857600080fd5b6103e881600254610b199190611e23565b610b239190611e3a565b60035550565b610b3233610e6f565b610b4e5760405162461bcd60e51b815260040161077090611de8565b600a811015610b5c57600080fd5b6103e881600254610b6d9190611e23565b610b779190611e3a565b60045550565b610b8633610e6f565b610ba25760405162461bcd60e51b815260040161077090611de8565b6001600160a01b031660009081526007602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352922080549091169091179055565b610bf633610e6f565b610c125760405162461bcd60e51b815260040161077090611de8565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610c7857610c713384846110da565b9050610834565b610c71338484610e8d565b6000546001600160a01b03163314610cad5760405162461bcd60e51b815260040161077090611f0a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610cdd33610e6f565b610cf95760405162461bcd60e51b815260040161077090611de8565b601b805460ff1916831515179055610d136012600a61200e565b610d1d9082611e23565b601c555050565b6000546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161077090611f0a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610d995760405162461bcd60e51b815260040161077090611f0a565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610e0e33610e6f565b610e2a5760405162461bcd60e51b815260040161077090611de8565b6013805461ff0019169055565b610e4033610e6f565b610e5c5760405162461bcd60e51b815260040161077090611de8565b6013805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160a01b038416610eb55760405162461bcd60e51b815260040161077090611e6f565b6001600160a01b038316610edb5760405162461bcd60e51b815260040161077090611eb4565b6001600160a01b03841660009081526001602052604090205460ff1680610f1a57506001600160a01b03831660009081526001602052604090205460ff165b80610f3d57506001600160a01b03841660009081526009602052604090205460ff165b80610f4a5750601d5460ff165b15610f6157610f5a8484846110da565b9050610a4f565b601954600160a01b900460ff1615610fb25760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610770565b601354610100900460ff1615610fcd57610fcd8484846111f5565b610fd683611405565b15610fe357610fe3611494565b60135460ff1615611077577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148061105f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b6110695781611074565b6110748484846116c7565b91505b6110828484846110da565b50826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110c891815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600560205260408120548281101561113a5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610770565b6001600160a01b03851660009081526005602052604090205461115e908490611ef7565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461118e908490611e5c565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111e29087815260200190565b60405180910390a3506001949350505050565b6001600160a01b03831660009081526008602052604090205460ff16801561123557506001600160a01b03821660009081526008602052604090205460ff165b1561123f57505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614801561129957506001600160a01b03821660009081526008602052604090205460ff16155b156112e4576003548111156112df5760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b6044820152606401610770565b611384565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614801561133e57506001600160a01b03831660009081526008602052604090205460ff16155b15611384576003548111156113845760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b6044820152606401610770565b6001600160a01b03821660009081526008602052604090205460ff166107c8576004546001600160a01b0383166000908152600560205260409020546113ca9083611e5c565b11156107c85760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b6044820152606401610770565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015611455575042601a5460016114539190611e5c565b105b80156114645750601d5460ff16155b80156114725750601b5460ff165b80156108345750601c5430600090815260056020526040902054101592915050565b601d805460ff1916600117905530600090815260056020526040812054905060006016546014546015546114c89190611e5c565b6114d29190611e5c565b905060008215806114e1575081155b156114ee575050506116bb565b6000600283601554866115019190611e23565b61150b9190611e3a565b6115159190611e3a565b905060006115238286611ef7565b90504761152f826119cb565b600061153b8247611ef7565b90506000866014548361154e9190611e23565b6115589190611e3a565b90506000876016548461156b9190611e23565b6115759190611e3a565b90506000816115848486611ef7565b61158e9190611ef7565b60006015819055601481905560168190556019546040519293506001600160a01b031691849181818185875af1925050503d80600081146115eb576040519150601f19603f3d011682016040523d82523d6000602084013e6115f0565b606091505b509098505086158015906116045750600081115b15611657576116138782611b37565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6018546040516001600160a01b03909116904790600081818185875af1925050503d80600081146116a4576040519150601f19603f3d011682016040523d82523d6000602084013e6116a9565b606091505b505042601a5550505050505050505050505b601d805460ff19169055565b6001600160a01b03831660009081526007602052604081205460ff168061170657506001600160a01b03831660009081526007602052604090205460ff165b15611712575080610a4f565b600060125443101561179857606461172b846062611e23565b6117359190611e3a565b90506062611744826032611e23565b61174e9190611e3a565b6015600082825461175f9190611e5c565b9091555060629050611772826030611e23565b61177c9190611e3a565b6014600082825461178d9190611e5c565b909155506119659050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156117db57506000601154115b1561186e576103e8601154846117f19190611e23565b6117fb9190611e3a565b9050601154600f548261180e9190611e23565b6118189190611e3a565b601560008282546118299190611e5c565b909155505060115460105461183e9083611e23565b6118489190611e3a565b601660008282546118599190611e5c565b9091555050601154600e546117729083611e23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161480156118b157506000600d54115b15611965576103e8600d54846118c79190611e23565b6118d19190611e3a565b9050600d54600b54826118e49190611e23565b6118ee9190611e3a565b601560008282546118ff9190611e5c565b9091555050600d54600c546119149083611e23565b61191e9190611e3a565b6016600082825461192f9190611e5c565b9091555050600d54600a546119449083611e23565b61194e9190611e3a565b6014600082825461195f9190611e5c565b90915550505b80156119b8576119768530836110da565b5060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6119c28184611ef7565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a0057611a0061201d565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a969190612033565b81600181518110611aa957611aa961201d565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611b01908590600090869030904290600401612050565b600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050505050565b60175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0390911660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990839060c40160606040518083038185885af1158015611bb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bdc91906120c1565b5050505050565b600060208284031215611bf557600080fd5b5035919050565b600060208083528351808285015260005b81811015611c2957858101830151858201604001528201611c0d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c5f57600080fd5b50565b60008060408385031215611c7557600080fd5b8235611c8081611c4a565b946020939093013593505050565b600080600060608486031215611ca357600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ccf57600080fd5b8335611cda81611c4a565b92506020840135611cea81611c4a565b929592945050506040919091013590565b600060208284031215611d0d57600080fd5b8135610a4f81611c4a565b600080600060608486031215611d2d57600080fd5b8335611d3881611c4a565b92506020840135611d4881611c4a565b91506040840135611d5881611c4a565b809150509250925092565b60008060408385031215611d7657600080fd5b8235611d8181611c4a565b91506020830135611d9181611c4a565b809150509250929050565b80358015158114611dac57600080fd5b919050565b60008060408385031215611dc457600080fd5b611c8083611d9c565b600060208284031215611ddf57600080fd5b610a4f82611d9c565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761083457610834611e0d565b600082611e5757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561083457610834611e0d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561083457610834611e0d565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b80851115611f65578160001904821115611f4b57611f4b611e0d565b80851615611f5857918102915b93841c9390800290611f2f565b509250929050565b600082611f7c57506001610834565b81611f8957506000610834565b8160018114611f9f5760028114611fa957611fc5565b6001915050610834565b60ff841115611fba57611fba611e0d565b50506001821b610834565b5060208310610133831016604e8410600b8410161715611fe8575081810a610834565b611ff28383611f2a565b806000190482111561200657612006611e0d565b029392505050565b6000610a4f60ff841683611f6d565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561204557600080fd5b8151610a4f81611c4a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120a05784516001600160a01b03168352938301939183019160010161207b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156120d657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206fe187426240a11203510f98fa52ebeedb2235b8529a98dadda1e6dd4e4accd264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063c1f1b1b5116100ab578063f2fde38b1161006f578063f2fde38b146106ae578063f60b3d6d146106ce578063f887ea40146106e3578063fe6236741461070b578063fe9fbb801461072b57600080fd5b8063c1f1b1b5146105d5578063d469801614610608578063dd62ed3e14610628578063eb3410401461066e578063f0b37c041461068e57600080fd5b80639d9241ec116100f25780639d9241ec1461052b578063a8aa1b3114610541578063a9059cbb14610575578063b6a5d7de14610595578063c04a5414146105b557600080fd5b806375f0a874146104c757806378109e54146104ff5780637d1db4a51461051557806395d89b411461028057600080fd5b80632f54bf6e116101b15780635d0044ca116101755780635d0044ca146104175780636ddd17131461043757806370a082311461045157806372f2943a1461048757806375cb1bd1146104a757600080fd5b80632f54bf6e14610376578063313ce567146103a5578063571ac8b0146103c157806359b107b9146103e15780635c85974f146103f757600080fd5b80630d075d9c116101f85780630d075d9c146102ec5780630f683e901461030c57806318160ddd1461032c57806323b872dd14610341578063293230b81461036157600080fd5b80630445b6671461023557806304fda8ff1461025e57806306fdde0314610280578063095ea7b3146102bc57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601c5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027e610279366004611be3565b61074b565b005b34801561028c57600080fd5b50604080518082018252600d81526c54656e206e6f2d5473756b616960981b602082015290516102559190611bfc565b3480156102c857600080fd5b506102dc6102d7366004611c62565b6107cd565b6040519015158152602001610255565b3480156102f857600080fd5b5061027e610307366004611c8e565b61083a565b34801561031857600080fd5b5061027e610327366004611c8e565b6108ad565b34801561033857600080fd5b5060025461024b565b34801561034d57600080fd5b506102dc61035c366004611cba565b610920565b34801561036d57600080fd5b5061027e610a56565b34801561038257600080fd5b506102dc610391366004611cfb565b6000546001600160a01b0391821691161490565b3480156103b157600080fd5b5060405160128152602001610255565b3480156103cd57600080fd5b506102dc6103dc366004611cfb565b610ac7565b3480156103ed57600080fd5b5061024b600d5481565b34801561040357600080fd5b5061027e610412366004611be3565b610ad5565b34801561042357600080fd5b5061027e610432366004611be3565b610b29565b34801561044357600080fd5b50601b546102dc9060ff1681565b34801561045d57600080fd5b5061024b61046c366004611cfb565b6001600160a01b031660009081526005602052604090205490565b34801561049357600080fd5b5061027e6104a2366004611cfb565b610b7d565b3480156104b357600080fd5b5061027e6104c2366004611d18565b610bed565b3480156104d357600080fd5b506018546104e7906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561050b57600080fd5b5061024b60045481565b34801561052157600080fd5b5061024b60035481565b34801561053757600080fd5b5061024b60115481565b34801561054d57600080fd5b506104e77f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf45581565b34801561058157600080fd5b506102dc610590366004611c62565b610c51565b3480156105a157600080fd5b5061027e6105b0366004611cfb565b610c83565b3480156105c157600080fd5b506019546104e7906001600160a01b031681565b3480156105e157600080fd5b507f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556104e7565b34801561061457600080fd5b506017546104e7906001600160a01b031681565b34801561063457600080fd5b5061024b610643366004611d63565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561067a57600080fd5b5061027e610689366004611db1565b610cd4565b34801561069a57600080fd5b5061027e6106a9366004611cfb565b610d24565b3480156106ba57600080fd5b5061027e6106c9366004611cfb565b610d6f565b3480156106da57600080fd5b5061027e610e05565b3480156106ef57600080fd5b506104e7737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561071757600080fd5b5061027e610726366004611dcd565b610e37565b34801561073757600080fd5b506102dc610746366004611cfb565b610e6f565b61075433610e6f565b6107795760405162461bcd60e51b815260040161077090611de8565b60405180910390fd5b60185447906001600160a01b03166108fc60646107968585611e23565b6107a09190611e3a565b6040518115909202916000818181858888f193505050501580156107c8573d6000803e3d6000fd5b505050565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108289086815260200190565b60405180910390a35060015b92915050565b61084333610e6f565b61085f5760405162461bcd60e51b815260040161077090611de8565b60648161086c8486611e5c565b6108769190611e5c565b111561088157600080fd5b600a839055600b829055600c8190558061089b8385611e5c565b6108a59190611e5c565b600d55505050565b6108b633610e6f565b6108d25760405162461bcd60e51b815260040161077090611de8565b60fa816108df8486611e5c565b6108e99190611e5c565b11156108f457600080fd5b600e839055600f82905560108190558061090e8385611e5c565b6109189190611e5c565b601155505050565b60006001600160a01b0384166109485760405162461bcd60e51b815260040161077090611e6f565b6001600160a01b03831661096e5760405162461bcd60e51b815260040161077090611eb4565b6002546001600160a01b038516600090815260066020908152604080832033845290915290205414610a41576001600160a01b038416600090815260066020908152604080832033845290915290205482811015610a075760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610770565b6001600160a01b038516600090815260066020908152604080832033845290915281208054859290610a3a908490611ef7565b9091555050505b610a4c848484610e8d565b90505b9392505050565b6000546001600160a01b03163314610a805760405162461bcd60e51b815260040161077090611f0a565b601954600160a81b900460ff1615610a9757600080fd5b6019805460ff60a01b19169055610aaf436002611e5c565b6012556019805460ff60a81b1916600160a81b179055565b6000610834826002546107cd565b610ade33610e6f565b610afa5760405162461bcd60e51b815260040161077090611de8565b600a811015610b0857600080fd5b6103e881600254610b199190611e23565b610b239190611e3a565b60035550565b610b3233610e6f565b610b4e5760405162461bcd60e51b815260040161077090611de8565b600a811015610b5c57600080fd5b6103e881600254610b6d9190611e23565b610b779190611e3a565b60045550565b610b8633610e6f565b610ba25760405162461bcd60e51b815260040161077090611de8565b6001600160a01b031660009081526007602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352922080549091169091179055565b610bf633610e6f565b610c125760405162461bcd60e51b815260040161077090611de8565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610c7857610c713384846110da565b9050610834565b610c71338484610e8d565b6000546001600160a01b03163314610cad5760405162461bcd60e51b815260040161077090611f0a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610cdd33610e6f565b610cf95760405162461bcd60e51b815260040161077090611de8565b601b805460ff1916831515179055610d136012600a61200e565b610d1d9082611e23565b601c555050565b6000546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161077090611f0a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610d995760405162461bcd60e51b815260040161077090611f0a565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610e0e33610e6f565b610e2a5760405162461bcd60e51b815260040161077090611de8565b6013805461ff0019169055565b610e4033610e6f565b610e5c5760405162461bcd60e51b815260040161077090611de8565b6013805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160a01b038416610eb55760405162461bcd60e51b815260040161077090611e6f565b6001600160a01b038316610edb5760405162461bcd60e51b815260040161077090611eb4565b6001600160a01b03841660009081526001602052604090205460ff1680610f1a57506001600160a01b03831660009081526001602052604090205460ff165b80610f3d57506001600160a01b03841660009081526009602052604090205460ff165b80610f4a5750601d5460ff165b15610f6157610f5a8484846110da565b9050610a4f565b601954600160a01b900460ff1615610fb25760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610770565b601354610100900460ff1615610fcd57610fcd8484846111f5565b610fd683611405565b15610fe357610fe3611494565b60135460ff1615611077577f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316836001600160a01b0316148061105f57507f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316846001600160a01b0316145b6110695781611074565b6110748484846116c7565b91505b6110828484846110da565b50826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110c891815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600560205260408120548281101561113a5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610770565b6001600160a01b03851660009081526005602052604090205461115e908490611ef7565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461118e908490611e5c565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111e29087815260200190565b60405180910390a3506001949350505050565b6001600160a01b03831660009081526008602052604090205460ff16801561123557506001600160a01b03821660009081526008602052604090205460ff165b1561123f57505050565b7f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316836001600160a01b031614801561129957506001600160a01b03821660009081526008602052604090205460ff16155b156112e4576003548111156112df5760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b6044820152606401610770565b611384565b7f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316826001600160a01b031614801561133e57506001600160a01b03831660009081526008602052604090205460ff16155b15611384576003548111156113845760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b6044820152606401610770565b6001600160a01b03821660009081526008602052604090205460ff166107c8576004546001600160a01b0383166000908152600560205260409020546113ca9083611e5c565b11156107c85760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b6044820152606401610770565b60007f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316826001600160a01b0316148015611455575042601a5460016114539190611e5c565b105b80156114645750601d5460ff16155b80156114725750601b5460ff165b80156108345750601c5430600090815260056020526040902054101592915050565b601d805460ff1916600117905530600090815260056020526040812054905060006016546014546015546114c89190611e5c565b6114d29190611e5c565b905060008215806114e1575081155b156114ee575050506116bb565b6000600283601554866115019190611e23565b61150b9190611e3a565b6115159190611e3a565b905060006115238286611ef7565b90504761152f826119cb565b600061153b8247611ef7565b90506000866014548361154e9190611e23565b6115589190611e3a565b90506000876016548461156b9190611e23565b6115759190611e3a565b90506000816115848486611ef7565b61158e9190611ef7565b60006015819055601481905560168190556019546040519293506001600160a01b031691849181818185875af1925050503d80600081146115eb576040519150601f19603f3d011682016040523d82523d6000602084013e6115f0565b606091505b509098505086158015906116045750600081115b15611657576116138782611b37565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6018546040516001600160a01b03909116904790600081818185875af1925050503d80600081146116a4576040519150601f19603f3d011682016040523d82523d6000602084013e6116a9565b606091505b505042601a5550505050505050505050505b601d805460ff19169055565b6001600160a01b03831660009081526007602052604081205460ff168061170657506001600160a01b03831660009081526007602052604090205460ff165b15611712575080610a4f565b600060125443101561179857606461172b846062611e23565b6117359190611e3a565b90506062611744826032611e23565b61174e9190611e3a565b6015600082825461175f9190611e5c565b9091555060629050611772826030611e23565b61177c9190611e3a565b6014600082825461178d9190611e5c565b909155506119659050565b7f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316846001600160a01b03161480156117db57506000601154115b1561186e576103e8601154846117f19190611e23565b6117fb9190611e3a565b9050601154600f548261180e9190611e23565b6118189190611e3a565b601560008282546118299190611e5c565b909155505060115460105461183e9083611e23565b6118489190611e3a565b601660008282546118599190611e5c565b9091555050601154600e546117729083611e23565b7f00000000000000000000000042d165a19ae13f4682d7da39b7f4c6f72aabf4556001600160a01b0316856001600160a01b03161480156118b157506000600d54115b15611965576103e8600d54846118c79190611e23565b6118d19190611e3a565b9050600d54600b54826118e49190611e23565b6118ee9190611e3a565b601560008282546118ff9190611e5c565b9091555050600d54600c546119149083611e23565b61191e9190611e3a565b6016600082825461192f9190611e5c565b9091555050600d54600a546119449083611e23565b61194e9190611e3a565b6014600082825461195f9190611e5c565b90915550505b80156119b8576119768530836110da565b5060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6119c28184611ef7565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a0057611a0061201d565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a969190612033565b81600181518110611aa957611aa961201d565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611b01908590600090869030904290600401612050565b600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050505050565b60175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0390911660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990839060c40160606040518083038185885af1158015611bb7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bdc91906120c1565b5050505050565b600060208284031215611bf557600080fd5b5035919050565b600060208083528351808285015260005b81811015611c2957858101830151858201604001528201611c0d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c5f57600080fd5b50565b60008060408385031215611c7557600080fd5b8235611c8081611c4a565b946020939093013593505050565b600080600060608486031215611ca357600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611ccf57600080fd5b8335611cda81611c4a565b92506020840135611cea81611c4a565b929592945050506040919091013590565b600060208284031215611d0d57600080fd5b8135610a4f81611c4a565b600080600060608486031215611d2d57600080fd5b8335611d3881611c4a565b92506020840135611d4881611c4a565b91506040840135611d5881611c4a565b809150509250925092565b60008060408385031215611d7657600080fd5b8235611d8181611c4a565b91506020830135611d9181611c4a565b809150509250929050565b80358015158114611dac57600080fd5b919050565b60008060408385031215611dc457600080fd5b611c8083611d9c565b600060208284031215611ddf57600080fd5b610a4f82611d9c565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761083457610834611e0d565b600082611e5757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561083457610834611e0d565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561083457610834611e0d565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b80851115611f65578160001904821115611f4b57611f4b611e0d565b80851615611f5857918102915b93841c9390800290611f2f565b509250929050565b600082611f7c57506001610834565b81611f8957506000610834565b8160018114611f9f5760028114611fa957611fc5565b6001915050610834565b60ff841115611fba57611fba611e0d565b50506001821b610834565b5060208310610133831016604e8410600b8410161715611fe8575081810a610834565b611ff28383611f2a565b806000190482111561200657612006611e0d565b029392505050565b6000610a4f60ff841683611f6d565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561204557600080fd5b8151610a4f81611c4a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120a05784516001600160a01b03168352938301939183019160010161207b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156120d657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206fe187426240a11203510f98fa52ebeedb2235b8529a98dadda1e6dd4e4accd264736f6c63430008120033

Deployed Bytecode Sourcemap

2899:17835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5825:58;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5825:58:0;;;;;;;;20541:188;;;;;;;;;;-1:-1:-1;20541:188:0;;;;;:::i;:::-;;:::i;:::-;;7747:80;;;;;;;;;;-1:-1:-1;7819:5:0;;;;;;;;;;;-1:-1:-1;;;7819:5:0;;;;7747:80;;;;7819:5;7747:80;:::i;8412:216::-;;;;;;;;;;-1:-1:-1;8412:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;8412:216:0;1390:187:1;9838:389:0;;;;;;;;;;-1:-1:-1;9838:389:0;;;;;:::i;:::-;;:::i;10315:394::-;;;;;;;;;;-1:-1:-1;10315:394:0;;;;;:::i;:::-;;:::i;7477:88::-;;;;;;;;;;-1:-1:-1;7550:12:0;;7477:88;;18384:648;;;;;;;;;;-1:-1:-1;18384:648:0;;;;;:::i;:::-;;:::i;12969:222::-;;;;;;;;;;;;;:::i;1691:103::-;;;;;;;;;;-1:-1:-1;1691:103:0;;;;;:::i;:::-;1746:4;1781:5;-1:-1:-1;;;;;1770:16:0;;;1781:5;;1770:16;;1691:103;7571:80;;;;;;;;;;-1:-1:-1;7571:80:0;;3492:2;2758:36:1;;2746:2;2731:18;7571:80:0;2616:184:1;8636:117:0;;;;;;;;;;-1:-1:-1;8636:117:0;;;;;:::i;:::-;;:::i;4675:82::-;;;;;;;;;;;;;;;;11412:230;;;;;;;;;;-1:-1:-1;11412:230:0;;;;;:::i;:::-;;:::i;11114:235::-;;;;;;;;;;-1:-1:-1;11114:235:0;;;;;:::i;:::-;;:::i;5788:30::-;;;;;;;;;;-1:-1:-1;5788:30:0;;;;;;;;7833:105;;;;;;;;;;-1:-1:-1;7833:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;7917:18:0;7899:7;7917:18;;;:9;:18;;;;;;;7833:105;8908:332;;;;;;;;;;-1:-1:-1;8908:332:0;;;;;:::i;:::-;;:::i;10761:259::-;;;;;;;;;;-1:-1:-1;10761:259:0;;;;;:::i;:::-;;:::i;5472:30::-;;;;;;;;;;-1:-1:-1;5472:30:0;;;;-1:-1:-1;;;;;5472:30:0;;;;;;-1:-1:-1;;;;;3503:32:1;;;3485:51;;3473:2;3458:18;5472:30:0;3339:203:1;3859:64:0;;;;;;;;;;;;;;;;3791:60;;;;;;;;;;;;;;;;4875:86;;;;;;;;;;;;;;;;3244:29;;;;;;;;;;;;;;;18076:300;;;;;;;;;;-1:-1:-1;18076:300:0;;;;;:::i;:::-;;:::i;1484:94::-;;;;;;;;;;-1:-1:-1;1484:94:0;;;;;:::i;:::-;;:::i;5509:32::-;;;;;;;;;;-1:-1:-1;5509:32:0;;;;-1:-1:-1;;;;;5509:32:0;;;8083:64;;;;;;;;;;-1:-1:-1;8141:4:0;8083:64;;5435:30;;;;;;;;;;-1:-1:-1;5435:30:0;;;;-1:-1:-1;;;;;5435:30:0;;;7944:133;;;;;;;;;;-1:-1:-1;7944:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8046:19:0;;;8028:7;8046:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;7944:133;13258:184;;;;;;;;;;-1:-1:-1;13258:184:0;;;;;:::i;:::-;;:::i;1586:97::-;;;;;;;;;;-1:-1:-1;1586:97:0;;;;;:::i;:::-;;:::i;1917:173::-;;;;;;;;;;-1:-1:-1;1917:173:0;;;;;:::i;:::-;;:::i;12580:75::-;;;;;;;;;;;;;:::i;3122:90::-;;;;;;;;;;;;3169:42;3122:90;;12789:98;;;;;;;;;;-1:-1:-1;12789:98:0;;;;;:::i;:::-;;:::i;1802:107::-;;;;;;;;;;-1:-1:-1;1802:107:0;;;;;:::i;:::-;;:::i;20541:188::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;;;;;;;;;20671:15:::1;::::0;20631:21:::1;::::0;-1:-1:-1;;;;;20671:15:0::1;20663:58;20717:3;20697:17;20710:4:::0;20631:21;20697:17:::1;:::i;:::-;:23;;;;:::i;:::-;20663:58;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20599:130;20541:188:::0;:::o;8412:216::-;8516:10;8487:4;8504:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8504:32:0;;;;;;;;;;:41;;;8561:37;8487:4;;8504:32;;8561:37;;;;8539:6;160:25:1;;148:2;133:18;;14:177;8561:37:0;;;;;;;;-1:-1:-1;8616:4:0;8412:216;;;;;:::o;9838:389::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;10010:3:::1;9995:11:::0;9963:29:::1;9979:13:::0;9963;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;9955:59;;;::::0;::::1;;10036:15;:31:::0;;;10078:15:::1;:31:::0;;;10120:17:::1;:31:::0;;;10140:11;10176:29:::1;10096:13:::0;10054;10176:29:::1;:::i;:::-;:43;;;;:::i;:::-;10162:11;:57:::0;-1:-1:-1;;;9838:389:0:o;10315:394::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;10488:3:::1;10473:11:::0;10441:29:::1;10457:13:::0;10441;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;10433:59;;;::::0;::::1;;10514:16;:32:::0;;;10557:16:::1;:32:::0;;;10600:18:::1;:32:::0;;;10621:11;10658:29:::1;10576:13:::0;10533;10658:29:::1;:::i;:::-;:43;;;;:::i;:::-;10643:12;:58:::0;-1:-1:-1;;;10315:394:0:o;18384:648::-;18484:4;-1:-1:-1;;;;;18509:20:0;;18501:70;;;;-1:-1:-1;;;18501:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:71;;;;-1:-1:-1;;;18582:71:0;;;;;;;:::i;:::-;18702:12;;-1:-1:-1;;;;;18667:19:0;;;;;;:11;:19;;;;;;;;18687:10;18667:31;;;;;;;;:47;18664:303;;-1:-1:-1;;;;;18796:19:0;;18772:20;18796:19;;;:11;:19;;;;;;;;18816:10;18796:31;;;;;;;;18850:22;;;;18842:57;;;;-1:-1:-1;;;18842:57:0;;7038:2:1;18842:57:0;;;7020:21:1;7077:2;7057:18;;;7050:30;-1:-1:-1;;;7096:18:1;;;7089:52;7158:18;;18842:57:0;6836:346:1;18842:57:0;-1:-1:-1;;;;;18914:19:0;;;;;;:11;:19;;;;;;;;18934:10;18914:31;;;;;;;:41;;18949:6;;18914:19;:41;;18949:6;;18914:41;:::i;:::-;;;;-1:-1:-1;;;18664:303:0;18984:40;18998:6;19006:9;19017:6;18984:13;:40::i;:::-;18977:47;;18384:648;;;;;;:::o;12969:222::-;1746:4;1781:5;-1:-1:-1;;;;;1781:5:0;1343:10;1770:16;1327:38;;;;-1:-1:-1;;;1327:38:0;;;;;;;:::i;:::-;13031:8:::1;::::0;-1:-1:-1;;;13031:8:0;::::1;;;:17;13023:26;;;::::0;::::1;;13060:10;:18:::0;;-1:-1:-1;;;;13060:18:0::1;::::0;;13105:16:::1;:12;13120:1;13105:16;:::i;:::-;13089:13;:32:::0;13168:8:::1;:15:::0;;-1:-1:-1;;;;13168:15:0::1;-1:-1:-1::0;;;13168:15:0::1;::::0;;12969:222::o;8636:117::-;8691:4;8715:30;8723:7;8732:12;;8715:7;:30::i;11412:230::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;11499:2:::1;11488:7;:13;;11480:22;;;::::0;::::1;;3743:5;11612:7;11597:12;;:22;;;;:::i;:::-;11595:39;;;;:::i;:::-;11580:12;:54:::0;-1:-1:-1;11412:230:0:o;11114:235::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;11203:2:::1;11192:7;:13;;11184:22;;;::::0;::::1;;3743:5;11319:7;11304:12;;:22;;;;:::i;:::-;11302:39;;;;:::i;:::-;11284:15;:57:::0;-1:-1:-1;11114:235:0:o;8908:332::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9012:16:0::1;;::::0;;;:11:::1;:16;::::0;;;;;;;:23;;9031:4:::1;-1:-1:-1::0;;9012:23:0;;::::1;::::0;::::1;::::0;;;9046:15:::1;:20:::0;;;;;:27;;;::::1;::::0;::::1;::::0;;9207:13:::1;:18:::0;;;;;:25;;;;::::1;::::0;;::::1;::::0;;8908:332::o;10761:259::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;10888:15:::1;:34:::0;;-1:-1:-1;;;;;10888:34:0;;::::1;-1:-1:-1::0;;;;;;10888:34:0;;::::1;;::::0;;;10933:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;10978:17:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;10761:259::o;18076:300::-;18156:4;18177:5;;18186:10;-1:-1:-1;;;;;18177:5:0;;;:19;18173:196;;18219:45;18234:10;18246:9;18257:6;18219:14;:45::i;:::-;18212:52;;;;18173:196;18313:44;18327:10;18339:9;18350:6;18313:13;:44::i;1484:94::-;1746:4;1781:5;-1:-1:-1;;;;;1781:5:0;1343:10;1770:16;1327:38;;;;-1:-1:-1;;;1327:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1544:19:0::1;;::::0;;;1566:4:::1;1544:19;::::0;;;;;;;:26;;-1:-1:-1;;1544:26:0::1;::::0;;::::1;::::0;;1484:94::o;13258:184::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;13354:11:::1;:22:::0;;-1:-1:-1;;13354:22:0::1;::::0;::::1;;;::::0;;13417:15:::1;3492:2;13417;:15;:::i;:::-;13403:30;::::0;:10;:30:::1;:::i;:::-;13387:13;:46:::0;-1:-1:-1;;13258:184:0:o;1586:97::-;1746:4;1781:5;-1:-1:-1;;;;;1781:5:0;1343:10;1770:16;1327:38;;;;-1:-1:-1;;;1327:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1648:19:0::1;1670:5;1648:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;1648:27:0::1;::::0;;1586:97::o;1917:173::-;1746:4;1781:5;-1:-1:-1;;;;;1781:5:0;1343:10;1770:16;1327:38;;;;-1:-1:-1;;;1327:38:0;;;;;;;:::i;:::-;1993:5:::1;:11:::0;;-1:-1:-1;;;;;;1993:11:0::1;-1:-1:-1::0;;;;;1993:11:0;::::1;::::0;;::::1;::::0;;2015:19;;;-1:-1:-1;2015:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;2015:26:0::1;::::0;;::::1;::::0;;;2057:25;;3485:51:1;;;2057:25:0::1;::::0;3458:18:1;2057:25:0::1;;;;;;;1917:173:::0;:::o;12580:75::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;12633:6:::1;:14:::0;;-1:-1:-1;;12633:14:0::1;::::0;;12580:75::o;12789:98::-;1425:24;1438:10;1425:12;:24::i;:::-;1417:48;;;;-1:-1:-1;;;1417:48:0;;;;;;;:::i;:::-;12857:11:::1;:22:::0;;-1:-1:-1;;12857:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12789:98::o;1802:107::-;-1:-1:-1;;;;;1882:19:0;1858:4;1882:19;;;:14;:19;;;;;;;;;1802:107::o;19042:1316::-;19134:4;-1:-1:-1;;;;;19161:20:0;;19153:70;;;;-1:-1:-1;;;19153:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19242:23:0;;19234:71;;;;-1:-1:-1;;;19234:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19384:22:0;;;;;;:14;:22;;;;;;;;;:51;;-1:-1:-1;;;;;;19410:25:0;;;;;;:14;:25;;;;;;;;19384:51;:76;;;-1:-1:-1;;;;;;19439:21:0;;;;;;:13;:21;;;;;;;;19384:76;:86;;;-1:-1:-1;19464:6:0;;;;19384:86;19379:168;;;19494:41;19509:6;19517:9;19528:6;19494:14;:41::i;:::-;19487:48;;;;19379:168;19631:10;;-1:-1:-1;;;19631:10:0;;;;:19;19623:51;;;;-1:-1:-1;;;19623:51:0;;9455:2:1;19623:51:0;;;9437:21:1;9494:2;9474:18;;;9467:30;-1:-1:-1;;;9513:18:1;;;9506:50;9573:18;;19623:51:0;9253:344:1;19623:51:0;19773:6;;;;;;;19769:52;;;19781:38;19793:6;19801:9;19812:6;19781:11;:38::i;:::-;19922:26;19938:9;19922:15;:26::i;:::-;19919:44;;;19951:10;:8;:10::i;:::-;20040:11;;;;20037:135;;;20091:4;-1:-1:-1;;;;;20078:17:0;:9;-1:-1:-1;;;;;20078:17:0;;:35;;;;20109:4;-1:-1:-1;;;;;20099:14:0;:6;-1:-1:-1;;;;;20099:14:0;;20078:35;20077:83;;20154:6;20077:83;;;20117:34;20125:6;20133:9;20144:6;20117:7;:34::i;:::-;20068:92;;20037:135;20234:41;20249:6;20257:9;20268:6;20234:14;:41::i;:::-;;20310:9;-1:-1:-1;;;;;20293:35:0;20302:6;-1:-1:-1;;;;;20293:35:0;;20321:6;20293:35;;;;160:25:1;;148:2;133:18;;14:177;20293:35:0;;;;;;;;-1:-1:-1;20346:4:0;19042:1316;;;;;:::o;9252:503::-;-1:-1:-1;;;;;9386:17:0;;9345:4;9386:17;;;:9;:17;;;;;;9477:23;;;;9469:56;;;;-1:-1:-1;;;9469:56:0;;9804:2:1;9469:56:0;;;9786:21:1;9843:2;9823:18;;;9816:30;-1:-1:-1;;;9862:18:1;;;9855:50;9922:18;;9469:56:0;9602:344:1;9469:56:0;-1:-1:-1;;;;;9584:17:0;;;;;;:9;:17;;;;;;:26;;9604:6;;9584:26;:::i;:::-;-1:-1:-1;;;;;9564:17:0;;;;;;;:9;:17;;;;;;:46;;;;9645:20;;;;;;;:29;;9668:6;;9645:29;:::i;:::-;-1:-1:-1;;;;;9622:20:0;;;;;;;:9;:20;;;;;;;:52;;;;9690:35;;;;;;;;;;9718:6;160:25:1;;148:2;133:18;;14:177;9690:35:0;;;;;;;;-1:-1:-1;9743:4:0;;9252:503;-1:-1:-1;;;;9252:503:0:o;11654:856::-;-1:-1:-1;;;;;11832:23:0;;;;;;:15;:23;;;;;;;;:53;;;;-1:-1:-1;;;;;;11859:26:0;;;;;;:15;:26;;;;;;;;11832:53;11828:67;;;11654:856;;;:::o;11828:67::-;12059:4;-1:-1:-1;;;;;12049:14:0;:6;-1:-1:-1;;;;;12049:14:0;;:45;;;;-1:-1:-1;;;;;;12068:26:0;;;;;;:15;:26;;;;;;;;12067:27;12049:45;12045:278;;;12131:12;;12121:6;:22;;12113:47;;;;-1:-1:-1;;;12113:47:0;;10153:2:1;12113:47:0;;;10135:21:1;10192:2;10172:18;;;10165:30;-1:-1:-1;;;10211:18:1;;;10204:42;10263:18;;12113:47:0;9951:336:1;12113:47:0;12045:278;;;12213:4;-1:-1:-1;;;;;12200:17:0;:9;-1:-1:-1;;;;;12200:17:0;;:45;;;;-1:-1:-1;;;;;;12222:23:0;;;;;;:15;:23;;;;;;;;12221:24;12200:45;12197:126;;;12282:12;;12272:6;:22;;12264:47;;;;-1:-1:-1;;;12264:47:0;;10153:2:1;12264:47:0;;;10135:21:1;10192:2;10172:18;;;10165:30;-1:-1:-1;;;10211:18:1;;;10204:42;10263:18;;12264:47:0;9951:336:1;12264:47:0;-1:-1:-1;;;;;12375:26:0;;;;;;:15;:26;;;;;;;;12370:131;;12459:15;;-1:-1:-1;;;;;7917:18:0;;7899:7;7917:18;;;:9;:18;;;;;;12426:29;;:6;:29;:::i;:::-;:48;;12418:71;;;;-1:-1:-1;;;12418:71:0;;10494:2:1;12418:71:0;;;10476:21:1;10533:2;10513:18;;;10506:30;-1:-1:-1;;;10552:18:1;;;10545:40;10602:18;;12418:71:0;10292:334:1;13503:306:0;13570:4;13607;-1:-1:-1;;;;;13594:17:0;:9;-1:-1:-1;;;;;13594:17:0;;:80;;;;;13659:15;13640:12;;13655:1;13640:16;;;;:::i;:::-;:34;13594:80;:129;;;;-1:-1:-1;13717:6:0;;;;13716:7;13594:129;:153;;;;-1:-1:-1;13736:11:0;;;;13594:153;:207;;;;-1:-1:-1;13788:13:0;;13778:4;13760:24;;;;:9;:24;;;;;;:41;;13587:214;13503:306;-1:-1:-1;;13503:306:0:o;16358:1710::-;6181:6;:13;;-1:-1:-1;;6181:13:0;6190:4;6181:13;;;16451:4:::1;-1:-1:-1::0;7917:18:0;;;:9;:18;;;;;;16407:50:::1;;16468:25;16538:12;;16517:18;;16496;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;16468:82:::0;-1:-1:-1;16561:12:0::1;16590:20:::0;;;:46:::1;;-1:-1:-1::0;16614:22:0;;16590:46:::1;16586:61;;;16639:7;;;;;16586:61;16710:23;16797:1;16777:17;16755:18;;16737:15;:36;;;;:::i;:::-;16736:58;;;;:::i;:::-;:62;;;;:::i;:::-;16710:88:::0;-1:-1:-1;16809:26:0::1;16838:33;16710:88:::0;16838:15;:33:::1;:::i;:::-;16809:62:::0;-1:-1:-1;16912:21:0::1;16982:36;16809:62:::0;16982:16:::1;:36::i;:::-;17031:18;17052:41;17076:17:::0;17052:21:::1;:41;:::i;:::-;17031:62;;17104:23;17166:17;17144:18;;17131:10;:31;;;;:::i;:::-;17130:53;;;;:::i;:::-;17104:79;;17194:17;17256;17234:12;;17221:10;:25;;;;:::i;:::-;17220:53;;;;:::i;:::-;17194:79:::0;-1:-1:-1;17284:23:0::1;17194:79:::0;17310:28:::1;17323:15:::0;17310:10;:28:::1;:::i;:::-;:40;;;;:::i;:::-;17419:1;17398:18;:22:::0;;;17431:18:::1;:22:::0;;;17464:12:::1;:16:::0;;;17541:17:::1;::::0;17533:53:::1;::::0;17284:66;;-1:-1:-1;;;;;;17541:17:0::1;::::0;17572:9;;17533:53;17419:1;17533:53;17572:9;17541:17;17533:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;17519:67:0;;-1:-1:-1;;17628:19:0;;;;;:42:::1;;;17669:1;17651:15;:19;17628:42;17624:212;;;17687:46;17700:15;17717;17687:12;:46::i;:::-;17805:18;::::0;17753:71:::1;::::0;;11043:25:1;;;11099:2;11084:18;;11077:34;;;11127:18;;;11120:34;;;;17753:71:0;::::1;::::0;;;;11031:2:1;17753:71:0;;::::1;17624:212;17962:15;::::0;17954:63:::1;::::0;-1:-1:-1;;;;;17962:15:0;;::::1;::::0;17991:21:::1;::::0;17954:63:::1;::::0;;;17991:21;17962:15;17954:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;18045:15:0::1;18030:12;:30:::0;-1:-1:-1;;;;;;;;;;;6196:1:0::1;6199:6:::0;:14;;-1:-1:-1;;6199:14:0;;;16358:1710::o;13817:1609::-;-1:-1:-1;;;;;13989:17:0;;13894:7;13989:17;;;:11;:17;;;;;;;;;:36;;-1:-1:-1;;;;;;14010:15:0;;;;;;:11;:15;;;;;;;;13989:36;13985:82;;;-1:-1:-1;14049:6:0;14042:13;;13985:82;14140:12;14207:13;;14192:12;:28;14188:952;;;14258:3;14244:11;:6;14253:2;14244:11;:::i;:::-;:17;;;;:::i;:::-;14237:24;-1:-1:-1;14323:2:0;14310:9;14237:24;14317:2;14310:9;:::i;:::-;14309:16;;;;:::i;:::-;14287:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;14376:2:0;;-1:-1:-1;14363:9:0;:4;14370:2;14363:9;:::i;:::-;14362:16;;;;:::i;:::-;14340:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;14188:952:0;;-1:-1:-1;14188:952:0;;14437:4;-1:-1:-1;;;;;14431:10:0;:2;-1:-1:-1;;;;;14431:10:0;;:30;;;;;14460:1;14445:12;;:16;14431:30;14427:713;;;3743:5;14494:12;;14485:6;:21;;;;:::i;:::-;:34;;;;:::i;:::-;14478:41;;14586:12;;14564:16;;14557:4;:23;;;;:::i;:::-;14556:42;;;;:::i;:::-;14534:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;14665:12:0;;14643:18;;14636:25;;:4;:25;:::i;:::-;14635:42;;;;:::i;:::-;14613:12;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;14744:12:0;;14722:16;;14715:23;;:4;:23;:::i;14427:713::-;14816:4;-1:-1:-1;;;;;14808:12:0;:4;-1:-1:-1;;;;;14808:12:0;;:31;;;;;14838:1;14824:11;;:15;14808:31;14804:336;;;3743:5;14872:11;;14863:6;:20;;;;:::i;:::-;:33;;;;:::i;:::-;14856:40;;14962:11;;14941:15;;14934:4;:22;;;;:::i;:::-;14933:40;;;;:::i;:::-;14911:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;15040:11:0;;15019:17;;15012:24;;:4;:24;:::i;:::-;15011:40;;;;:::i;:::-;14989:12;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;15117:11:0;;15096:15;;15089:22;;:4;:22;:::i;:::-;15088:40;;;;:::i;:::-;15066:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;14804:336:0;15216:8;;15212:137;;15241:41;15256:4;15270;15277;15241:14;:41::i;:::-;-1:-1:-1;15302:35:0;;160:25:1;;;15325:4:0;;-1:-1:-1;;;;;15302:35:0;;;;;148:2:1;133:18;15302:35:0;;;;;;;15212:137;15404:14;15414:4;15404:14;;:::i;:::-;;13817:1609;-1:-1:-1;;;;;13817:1609:0:o;15440:445::-;15566:16;;;15580:1;15566:16;;;;;;;;15542:21;;15566:16;;;;;;;;;;-1:-1:-1;15566:16:0;15542:40;;15611:4;15593;15598:1;15593:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15593:23:0;;;-1:-1:-1;;;;;15593:23:0;;;;;3169:42;-1:-1:-1;;;;;15637:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15627:4;15632:1;15627:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15627:23:0;;;:7;;;;;;;;;;;:23;15689:188;;-1:-1:-1;;;15689:188:0;;3169:42;;15689:57;;:188;;15761:11;;15787:1;;15804:4;;15831;;15851:15;;15689:188;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15495:390;15440:445;:::o;15893:457::-;16286:15;;16143:199;;-1:-1:-1;;;16143:199:0;;16206:4;16143:199;;;13011:34:1;13061:18;;;13054:34;;;16252:1:0;13104:18:1;;;13097:34;;;13147:18;;;13140:34;-1:-1:-1;;;;;16286:15:0;;;13190:19:1;;;13183:44;16316:15:0;13243:19:1;;;13236:35;3169:42:0;;16143:22;;16173:9;;12945:19:1;;16143:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15893:457;;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;989:70;934:131;:::o;1070:315::-;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2364:247::-;2423:6;2476:2;2464:9;2455:7;2451:23;2447:32;2444:52;;;2492:1;2489;2482:12;2444:52;2531:9;2518:23;2550:31;2575:5;2550:31;:::i;2805:529::-;2882:6;2890;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;3006:9;2993:23;3025:31;3050:5;3025:31;:::i;:::-;3075:5;-1:-1:-1;3132:2:1;3117:18;;3104:32;3145:33;3104:32;3145:33;:::i;:::-;3197:7;-1:-1:-1;3256:2:1;3241:18;;3228:32;3269:33;3228:32;3269:33;:::i;:::-;3321:7;3311:17;;;2805:529;;;;;:::o;3547:388::-;3615:6;3623;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;3731:9;3718:23;3750:31;3775:5;3750:31;:::i;:::-;3800:5;-1:-1:-1;3857:2:1;3842:18;;3829:32;3870:33;3829:32;3870:33;:::i;:::-;3922:7;3912:17;;;3547:388;;;;;:::o;3940:160::-;4005:20;;4061:13;;4054:21;4044:32;;4034:60;;4090:1;4087;4080:12;4034:60;3940:160;;;:::o;4105:248::-;4170:6;4178;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4270:26;4286:9;4270:26;:::i;4844:180::-;4900:6;4953:2;4941:9;4932:7;4928:23;4924:32;4921:52;;;4969:1;4966;4959:12;4921:52;4992:26;5008:9;4992:26;:::i;5029:335::-;5231:2;5213:21;;;5270:2;5250:18;;;5243:30;-1:-1:-1;;;5304:2:1;5289:18;;5282:41;5355:2;5340:18;;5029:335::o;5369:127::-;5430:10;5425:3;5421:20;5418:1;5411:31;5461:4;5458:1;5451:15;5485:4;5482:1;5475:15;5501:168;5574:9;;;5605;;5622:15;;;5616:22;;5602:37;5592:71;;5643:18;;:::i;5674:217::-;5714:1;5740;5730:132;;5784:10;5779:3;5775:20;5772:1;5765:31;5819:4;5816:1;5809:15;5847:4;5844:1;5837:15;5730:132;-1:-1:-1;5876:9:1;;5674:217::o;5896:125::-;5961:9;;;5982:10;;;5979:36;;;5995:18;;:::i;6026:401::-;6228:2;6210:21;;;6267:2;6247:18;;;6240:30;6306:34;6301:2;6286:18;;6279:62;-1:-1:-1;;;6372:2:1;6357:18;;6350:35;6417:3;6402:19;;6026:401::o;6432:399::-;6634:2;6616:21;;;6673:2;6653:18;;;6646:30;6712:34;6707:2;6692:18;;6685:62;-1:-1:-1;;;6778:2:1;6763:18;;6756:33;6821:3;6806:19;;6432:399::o;7187:128::-;7254:9;;;7275:11;;;7272:37;;;7289:18;;:::i;7320:329::-;7522:2;7504:21;;;7561:1;7541:18;;;7534:29;-1:-1:-1;;;7594:2:1;7579:18;;7572:36;7640:2;7625:18;;7320:329::o;7654:422::-;7743:1;7786:5;7743:1;7800:270;7821:7;7811:8;7808:21;7800:270;;;7880:4;7876:1;7872:6;7868:17;7862:4;7859:27;7856:53;;;7889:18;;:::i;:::-;7939:7;7929:8;7925:22;7922:55;;;7959:16;;;;7922:55;8038:22;;;;7998:15;;;;7800:270;;;7804:3;7654:422;;;;;:::o;8081:806::-;8130:5;8160:8;8150:80;;-1:-1:-1;8201:1:1;8215:5;;8150:80;8249:4;8239:76;;-1:-1:-1;8286:1:1;8300:5;;8239:76;8331:4;8349:1;8344:59;;;;8417:1;8412:130;;;;8324:218;;8344:59;8374:1;8365:10;;8388:5;;;8412:130;8449:3;8439:8;8436:17;8433:43;;;8456:18;;:::i;:::-;-1:-1:-1;;8512:1:1;8498:16;;8527:5;;8324:218;;8626:2;8616:8;8613:16;8607:3;8601:4;8598:13;8594:36;8588:2;8578:8;8575:16;8570:2;8564:4;8561:12;8557:35;8554:77;8551:159;;;-1:-1:-1;8663:19:1;;;8695:5;;8551:159;8742:34;8767:8;8761:4;8742:34;:::i;:::-;8812:6;8808:1;8804:6;8800:19;8791:7;8788:32;8785:58;;;8823:18;;:::i;:::-;8861:20;;8081:806;-1:-1:-1;;;8081:806:1:o;8892:140::-;8950:5;8979:47;9020:4;9010:8;9006:19;9000:4;8979:47;:::i;11297:127::-;11358:10;11353:3;11349:20;11346:1;11339:31;11389:4;11386:1;11379:15;11413:4;11410:1;11403:15;11429:251;11499:6;11552:2;11540:9;11531:7;11527:23;11523:32;11520:52;;;11568:1;11565;11558:12;11520:52;11600:9;11594:16;11619:31;11644:5;11619:31;:::i;11685:980::-;11947:4;11995:3;11984:9;11980:19;12026:6;12015:9;12008:25;12052:2;12090:6;12085:2;12074:9;12070:18;12063:34;12133:3;12128:2;12117:9;12113:18;12106:31;12157:6;12192;12186:13;12223:6;12215;12208:22;12261:3;12250:9;12246:19;12239:26;;12300:2;12292:6;12288:15;12274:29;;12321:1;12331:195;12345:6;12342:1;12339:13;12331:195;;;12410:13;;-1:-1:-1;;;;;12406:39:1;12394:52;;12501:15;;;;12466:12;;;;12442:1;12360:9;12331:195;;;-1:-1:-1;;;;;;;12582:32:1;;;;12577:2;12562:18;;12555:60;-1:-1:-1;;;12646:3:1;12631:19;12624:35;12543:3;11685:980;-1:-1:-1;;;11685:980:1:o;13282:306::-;13370:6;13378;13386;13439:2;13427:9;13418:7;13414:23;13410:32;13407:52;;;13455:1;13452;13445:12;13407:52;13484:9;13478:16;13468:26;;13534:2;13523:9;13519:18;13513:25;13503:35;;13578:2;13567:9;13563:18;13557:25;13547:35;;13282:306;;;;;:::o

Swarm Source

ipfs://6fe187426240a11203510f98fa52ebeedb2235b8529a98dadda1e6dd4e4accd2
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.