ETH Price: $3,330.37 (+2.70%)

Token

Ace Ai (ACE)
 

Overview

Max Total Supply

100,000,000 ACE

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ACE

Value
$0.00
0x10d80575e25a75ec053a12850ac218cb7ef95589
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:
ACE

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-18
*/

//SPDX-License-Identifier: GPL-3.0
/*
https://ai-ace.io/
https://t.me/AceAiCommunity
https://x.com/AceAiX
*/

pragma solidity 0.8.28;

abstract contract Auth {
    address internal _owner;
    event OwnershipTransferred(address _owner);
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    function owner() public view returns (address) { return _owner; }
    function transferOwnership(address payable newowner) external onlyOwner { 
        _owner = newowner; 
        emit OwnershipTransferred(newowner); }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0);
        emit OwnershipTransferred(address(0)); }
}

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 holder, 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);
}

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

contract ACE is IERC20, Auth {
    string private constant tokenSymbol = "ACE";
    string private constant name_ = "Ace Ai";
    uint8 private constant tknDecimals = 9;
    uint256 private constant supply_ = 100000000 * (10**tknDecimals);
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private tokenAllowance;

    address private constant routerAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private router = IUniswapV2Router02(routerAddress);
    
    address private liqPool; 
    mapping (address => bool) private _isLiquidityPool;

    bool private _tradingEnabled;

    bool private _swapping = false;

    address payable private _marketingWallet = payable(0xAAeaA87c1b8c5a373847b7226abAE555807B7387);
    
    uint256 private mevblock = 2;
    uint8 private sellTaxRate = 7;
    uint8 private _buyFeeRate = 8;
    
    uint256 private launchBlk;
    uint256 private _maxTxAmt = supply_; 
    uint256 private maxWalletVal = supply_;
    uint256 private _swapMinAmount = supply_ * 10 / 100000;
    uint256 private _swapMax = supply_ * 999 / 100000;
    uint256 private swapTrigger = 2 * (10**16);
    uint256 private _tokens = _swapMinAmount * 42 * 100;

    mapping (uint256 => mapping (address => uint8)) private _blockSells;
    mapping (address => bool) private _zeroFee;
    mapping (address => bool) private _noLimit;

    modifier lockTheSwap { 
        _swapping = true; 
        _; 
        _swapping = false; 
    }

    constructor() Auth(msg.sender) {
        _balances[msg.sender] = supply_;
        emit Transfer(address(0), msg.sender, _balances[msg.sender]);  

        _zeroFee[_owner] = true;
        _zeroFee[address(this)] = true;
        _zeroFee[_marketingWallet] = true;
        _zeroFee[routerAddress] = true;
        _noLimit[_owner] = true;
        _noLimit[address(this)] = true;
        _noLimit[_marketingWallet] = true;
        _noLimit[routerAddress] = true;
    }

    receive() external payable {}

    function decimals() external pure override returns (uint8) { return tknDecimals; }
    function totalSupply() external pure override returns (uint256) { return supply_; }
    function name() external pure override returns (string memory) { return name_; }
    function symbol() external pure override returns (string memory) { return tokenSymbol; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return tokenAllowance[holder][spender]; }

    function transferFrom(address fromWallet, address toWallet, uint256 amount) external override returns (bool) {
        require(checkTradingOpen(fromWallet), "Trading not open");
        tokenAllowance[fromWallet][msg.sender] -= amount;
        return _transferFrom(fromWallet, toWallet, amount); 
	}

    function transfer(address toWallet, uint256 amount) external override returns (bool) {
        require(checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, toWallet, amount); 
	}

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

    function getTax(address fromWallet, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        if ( !_tradingEnabled || _zeroFee[fromWallet] || _zeroFee[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLiquidityPool[fromWallet] ) { 
            taxAmount = amount * _buyFeeRate / 100; 
         } else if ( _isLiquidityPool[recipient] ) { 
            taxAmount = amount * sellTaxRate / 100; 
        }
        return taxAmount;
    }

    function setLimit(uint16 maxTransPermille, uint16 maxWaletPermille) external onlyOwner {
        uint256 newTxAmt = supply_ * maxTransPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmt, "tx too low");
        _maxTxAmt = newTxAmt;
        uint256 newWalletAmt = supply_ * maxWaletPermille / 1000 + 1;
        require(newWalletAmt >= maxWalletVal, "wallet too low");
        maxWalletVal = newWalletAmt;
    }

    function swapTaxTokens() private lockTheSwap {
        uint256 _taxTokenAvailable = _tokens;
        if ( _taxTokenAvailable >= _swapMinAmount && _tradingEnabled ) {
            if ( _taxTokenAvailable >= _swapMax ) { _taxTokenAvailable = _swapMax; }
            
            uint256 _tokensForSwap = _taxTokenAvailable; 
            if( _tokensForSwap > 1 * 10**tknDecimals ) {
                _balances[address(this)] += _taxTokenAvailable;
                _swapTokensForETH(_tokensForSwap);
                _tokens -= _taxTokenAvailable;
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _sendEth(_contractETHBalance); }
        }
    }

    function addLiquidity() external payable onlyOwner lockTheSwap {
        require(liqPool == address(0), "LP created");
        require(!_tradingEnabled, "trading open");
        require(msg.value > 0 || address(this).balance>0, "No ETH");
        require(_balances[address(this)]>0, "No tokens");
        liqPool = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());
        addLiq(_balances[address(this)], address(this).balance);
    }

    function setMarketingWallet(address marketingWlt) external onlyOwner {
        require(!_isLiquidityPool[marketingWlt], "LP cannot be tax wallet");
        _marketingWallet = payable(marketingWlt);
        _zeroFee[marketingWlt] = true;
        _noLimit[marketingWlt] = true;
    }

    function updateFee(uint8 buyFeePercent, uint8 sellFeePercent) external onlyOwner {
        require(buyFeePercent + sellFeePercent <= 10, "Roundtrip too high");
        _buyFeeRate = buyFeePercent;
        sellTaxRate = sellFeePercent;
    }

    function setTaxSwaps(uint32 minVal, uint32 minDiv, uint32 maxVal, uint32 maxDiv, uint32 trigger) external onlyOwner {
        _swapMinAmount = supply_ * minVal / minDiv;
        _swapMax = supply_ * maxVal / maxDiv;
        swapTrigger = trigger * 10**15;
        require(_swapMax>=_swapMinAmount, "Min-Max error");
    }

    function exemptions(address wallet) external view returns (bool fees, bool limits) {
        return (_zeroFee[wallet], _noLimit[wallet]); 
	}

    function checkTradingOpen(address fromWallet) private view returns (bool){
        bool checkResult = false;
        if ( _tradingEnabled ) { checkResult = true; } 
        else if (_zeroFee[fromWallet] && _noLimit[fromWallet]) { checkResult = true; } 

        return checkResult;
    }

    function setExemptions(address wlt, bool isNoFees, bool isNoLimits) external onlyOwner {
        if (isNoLimits || isNoFees) { require(!_isLiquidityPool[wlt], "Cannot exempt LP"); }
        _zeroFee[ wlt ] = isNoFees;
        _noLimit[ wlt ] = isNoLimits;
    }

    function _enableTrading() internal {
        _maxTxAmt = 20 * supply_ / 1000;
        maxWalletVal = 20 * supply_ / 1000;
        _balances[liqPool] -= _tokens;
        (_isLiquidityPool[liqPool],) = liqPool.call(abi.encodeWithSignature("sync()") );
        require(_isLiquidityPool[liqPool], "Failed bootstrap");
        launchBlk = block.number;
        mevblock = mevblock + launchBlk;
        _tradingEnabled = true;
    }

    function addLiq(uint256 _tokenAmount, uint256 _ethAmountWei) internal {
        approveSwapMax(_tokenAmount);
        router.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, _owner, block.timestamp );
    }

    function swapEligible(uint256 tokenAmt) private view returns (bool) {
        bool result;
        if (swapTrigger > 0) { 
            uint256 lpTkn = _balances[liqPool];
            uint256 lpWeth = IERC20(router.WETH()).balanceOf(liqPool); 
            uint256 weiValue = (tokenAmt * lpWeth) / lpTkn;
            if (weiValue >= swapTrigger) { result = true; }    
        } else { result = true; }
        return result;
    }

    function enableTrading() external onlyOwner {
        require(!_tradingEnabled, "trading open");
        _enableTrading();
    }

    function approveSwapMax(uint256 _tokenAmount) internal {
        if ( tokenAllowance[address(this)][routerAddress] < _tokenAmount ) {
            tokenAllowance[address(this)][routerAddress] = type(uint256).max;
            emit Approval(address(this), routerAddress, type(uint256).max);
        }
    }

    function _transferFrom(address sender, address toWallet, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from 0 wallet");
        if (!_tradingEnabled) { require(_zeroFee[sender] && _noLimit[sender], "Trading not yet open"); }
        if ( !_swapping && _isLiquidityPool[toWallet] && swapEligible(amount) ) { swapTaxTokens(); }

        if ( block.number >= launchBlk ) {
            if (block.number < mevblock && _isLiquidityPool[sender]) { 
                require(toWallet == tx.origin, "MEV block"); 
            }
            if (block.number < mevblock + 600 && _isLiquidityPool[toWallet] && sender != address(this) ) {
                _blockSells[block.number][toWallet] += 1;
                require(_blockSells[block.number][toWallet] <= 2, "MEV block");
            }
        }

        if ( sender != address(this) && toWallet != address(this) && sender != _owner ) { 
            require(limitCheck(sender, toWallet, amount), "TX over limits"); 
        }

        uint256 _taxAmount = getTax(sender, toWallet, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] -= amount;
        _tokens += _taxAmount;
        _balances[toWallet] += _transferAmount;
        emit Transfer(sender, toWallet, amount);
        return true;
    }

    function marketingWallet() external view returns (address) { 
        return _marketingWallet; 
	}

    function _swapTokensForETH(uint256 tokenAmount) private {
        approveSwapMax(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address( this );
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function swapMin() external view returns (uint256) { 
        return _swapMinAmount; 
	}
    function swapMax() external view returns (uint256) { 
        return _swapMax; 
	}

    function _sendEth(uint256 amount) private {
        _marketingWallet.transfer(amount);
    }

    function limitCheck(address fromWallet, address toWallet, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingEnabled && !_noLimit[fromWallet] && !_noLimit[toWallet] ) {
            if ( transferAmount > _maxTxAmt ) { 
                limitCheckPassed = false; 
            }
            else if ( 
                !_isLiquidityPool[toWallet] && (_balances[toWallet] + transferAmount > maxWalletVal) 
                ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function maxWallet() external view returns (uint256) { 
        return maxWalletVal; 
	}
    function maxTransaction() external view returns (uint256) { 
        return _maxTxAmt; 
	}

    function buyFees() external view returns(uint8) { return _buyFeeRate; }
    function sellFee() external view returns(uint8) { return sellTaxRate; }
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() 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);
}

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":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":"addLiquidity","outputs":[],"stateMutability":"payable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptions","outputs":[{"internalType":"bool","name":"fees","type":"bool"},{"internalType":"bool","name":"limits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wlt","type":"address"},{"internalType":"bool","name":"isNoFees","type":"bool"},{"internalType":"bool","name":"isNoLimits","type":"bool"}],"name":"setExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransPermille","type":"uint16"},{"internalType":"uint16","name":"maxWaletPermille","type":"uint16"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWlt","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minVal","type":"uint32"},{"internalType":"uint32","name":"minDiv","type":"uint32"},{"internalType":"uint32","name":"maxVal","type":"uint32"},{"internalType":"uint32","name":"maxDiv","type":"uint32"},{"internalType":"uint32","name":"trigger","type":"uint32"}],"name":"setTaxSwaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMin","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"toWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromWallet","type":"address"},{"internalType":"address","name":"toWallet","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":"newowner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyFeePercent","type":"uint8"},{"internalType":"uint8","name":"sellFeePercent","type":"uint8"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260038054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617905560068054610100600160b01b03191675aaeaa87c1b8c5a373847b7226abae555807b7387000017905560026007556008805461ffff19166108071790556100756009600a6103ac565b610083906305f5e1006103c1565b600a556009600a61009491906103ac565b6100a2906305f5e1006103c1565b600b55620186a06100b56009600a6103ac565b6100c3906305f5e1006103c1565b6100ce90600a6103c1565b6100d891906103d8565b600c55620186a06100eb6009600a6103ac565b6100f9906305f5e1006103c1565b610105906103e76103c1565b61010f91906103d8565b600d5566470de4df820000600e55600c5461012b90602a6103c1565b6101369060646103c1565b600f55348015610144575f5ffd5b505f80546001600160a01b031916331790556101626009600a6103ac565b610170906305f5e1006103c1565b335f81815260016020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35f80546001600160a01b0390811682526011602090815260408084208054600160ff1991821681179092553080875283872080548316841790556006805462010000908190048816895285892080548516861790557fa30c5df85d30b252583f3563cb2bd6456399154fbc658c188bf804ed074c64d680548516861790558854881689526012909652848820805484168517905590875283872080548316841790555493909304909316845283208054821683179055737a250d5630b4cf539739df2c5dacb4c659f2488d9092527f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec280549092161790556103f7565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610302578085048111156102e6576102e66102b3565b60018416156102f457908102905b60019390931c9280026102cb565b935093915050565b5f82610318575060016103a6565b8161032457505f6103a6565b816001811461033a576002811461034457610360565b60019150506103a6565b60ff841115610355576103556102b3565b50506001821b6103a6565b5060208310610133831016604e8410600b8410161715610383575081810a6103a6565b61038f5f1984846102c7565b805f19048211156103a2576103a26102b3565b0290505b92915050565b5f6103ba60ff84168361030a565b9392505050565b80820281158282048414176103a6576103a66102b3565b5f826103f257634e487b7160e01b5f52601260045260245ffd5b500490565b6121bf806104045f395ff3fe608060405260043610610198575f3560e01c80638da5cb5b116100e7578063d55400c911610087578063e537a83411610062578063e537a834146104fd578063e8078d941461051c578063f2fde38b14610524578063f8b45b0514610543575f5ffd5b8063d55400c91461047e578063dd62ed3e1461049d578063e4748b9e146104e1575f5ffd5b8063a5e992bb116100c2578063a5e992bb14610423578063a9059cbb14610437578063b3de9b5d14610456578063c3f70b521461046a575f5ffd5b80638da5cb5b146103bd578063950c6c39146103d957806395d89b41146103f8575f5ffd5b806330449efd1161015257806370a082311161012d57806370a082311461032a578063715018a61461035e57806375f0a874146103725780638a8c523c146103a9575f5ffd5b806330449efd14610299578063313ce567146102f85780635d098b381461030b575f5ffd5b806306fdde03146101a3578063095ea7b3146101e357806318160ddd1461021257806318839bc31461023457806323b872dd146102555780632b14ca5614610274575f5ffd5b3661019f57005b5f5ffd5b3480156101ae575f5ffd5b5060408051808201909152600681526541636520416960d01b60208201525b6040516101da9190611c71565b60405180910390f35b3480156101ee575f5ffd5b506102026101fd366004611cba565b610557565b60405190151581526020016101da565b34801561021d575f5ffd5b506102266105c3565b6040519081526020016101da565b34801561023f575f5ffd5b5061025361024e366004611cf8565b6105e3565b005b348015610260575f5ffd5b5061020261026f366004611d3a565b6106bf565b34801561027f575f5ffd5b5060085460ff165b60405160ff90911681526020016101da565b3480156102a4575f5ffd5b506102e16102b3366004611d78565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101da565b348015610303575f5ffd5b506009610287565b348015610316575f5ffd5b50610253610325366004611d78565b610753565b348015610335575f5ffd5b50610226610344366004611d78565b6001600160a01b03165f9081526001602052604090205490565b348015610369575f5ffd5b5061025361083d565b34801561037d575f5ffd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101da565b3480156103b4575f5ffd5b506102536108aa565b3480156103c8575f5ffd5b505f546001600160a01b0316610391565b3480156103e4575f5ffd5b506102536103f3366004611da3565b61091f565b348015610403575f5ffd5b5060408051808201909152600381526241434560e81b60208201526101cd565b34801561042e575f5ffd5b50600d54610226565b348015610442575f5ffd5b50610202610451366004611cba565b6109ba565b348015610461575f5ffd5b50600c54610226565b348015610475575f5ffd5b50600a54610226565b348015610489575f5ffd5b50610253610498366004611de5565b610a15565b3480156104a8575f5ffd5b506102266104b7366004611e0d565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156104ec575f5ffd5b50600854610100900460ff16610287565b348015610508575f5ffd5b50610253610517366004611e57565b610b59565b610253610c68565b34801561052f575f5ffd5b5061025361053e366004611d78565b610f5c565b34801561054e575f5ffd5b50600b54610226565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b19086815260200190565b60405180910390a35060015b92915050565b5f6105d06009600a611faf565b6105de906305f5e100611fbd565b905090565b5f546001600160a01b031633146106155760405162461bcd60e51b815260040161060c90611fd4565b60405180910390fd5b808061061e5750815b1561067e576001600160a01b0383165f9081526005602052604090205460ff161561067e5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161060c565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f6106c984610fd8565b6107085760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161060c565b6001600160a01b0384165f9081526002602090815260408083203384529091528120805484929061073a90849061200b565b9091555061074b905084848461103b565b949350505050565b5f546001600160a01b0316331461077c5760405162461bcd60e51b815260040161060c90611fd4565b6001600160a01b0381165f9081526005602052604090205460ff16156107e45760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161060c565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b031633146108665760405162461bcd60e51b815260040161060c90611fd4565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108d35760405162461bcd60e51b815260040161060c90611fd4565b60065460ff16156109155760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161060c565b61091d611455565b565b5f546001600160a01b031633146109485760405162461bcd60e51b815260040161060c90611fd4565b600a610954828461201e565b60ff16111561099a5760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161060c565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f6109c433610fd8565b610a035760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161060c565b610a0e33848461103b565b9392505050565b5f546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161060c90611fd4565b5f6103e861ffff8416610a536009600a611faf565b610a61906305f5e100611fbd565b610a6b9190611fbd565b610a759190612037565b610a80906001612056565b9050600a54811015610ac15760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161060c565b80600a819055505f6103e88361ffff166009600a610adf9190611faf565b610aed906305f5e100611fbd565b610af79190611fbd565b610b019190612037565b610b0c906001612056565b9050600b54811015610b515760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161060c565b600b55505050565b5f546001600160a01b03163314610b825760405162461bcd60e51b815260040161060c90611fd4565b63ffffffff808516908616610b996009600a611faf565b610ba7906305f5e100611fbd565b610bb19190611fbd565b610bbb9190612037565b600c5563ffffffff808316908416610bd56009600a611faf565b610be3906305f5e100611fbd565b610bed9190611fbd565b610bf79190612037565b600d55610c1163ffffffff821666038d7ea4c68000612069565b66ffffffffffffff16600e55600c54600d541015610c615760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b604482015260640161060c565b5050505050565b5f546001600160a01b03163314610c915760405162461bcd60e51b815260040161060c90611fd4565b6006805461ff0019166101001790556004546001600160a01b031615610ce65760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b604482015260640161060c565b60065460ff1615610d285760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161060c565b5f341180610d3557505f47115b610d6a5760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161060c565b305f90815260016020526040902054610db15760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161060c565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e259190612092565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea89190612092565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ef2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f169190612092565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f4f9047611612565b6006805461ff0019169055565b5f546001600160a01b03163314610f855760405162461bcd60e51b815260040161060c90611fd4565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fef575060016105bd565b6001600160a01b0383165f9081526011602052604090205460ff16801561102d57506001600160a01b0383165f9081526012602052604090205460ff165b156105bd5750600192915050565b5f6001600160a01b0384166110925760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c6574000000000000604482015260640161060c565b60065460ff1661111d576001600160a01b0384165f9081526011602052604090205460ff1680156110da57506001600160a01b0384165f9081526012602052604090205460ff165b61111d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b604482015260640161060c565b600654610100900460ff1615801561114c57506001600160a01b0383165f9081526005602052604090205460ff165b801561115c575061115c826116b0565b15611169576111696117e5565b60095443106112e4576007544310801561119a57506001600160a01b0384165f9081526005602052604090205460ff165b156111e3576001600160a01b03831632146111e35760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161060c565b6007546111f290610258612056565b4310801561121757506001600160a01b0383165f9081526005602052604090205460ff165b801561122c57506001600160a01b0384163014155b156112e457435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061126790849060ff1661201e565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112e45760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161060c565b6001600160a01b038416301480159061130657506001600160a01b0383163014155b801561131f57505f546001600160a01b03858116911614155b1561136c5761132f8484846118a2565b61136c5760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b604482015260640161060c565b5f611378858585611965565b90505f611385828561200b565b6001600160a01b0387165f908152600160205260408120805492935086929091906113b190849061200b565b9250508190555081600f5f8282546113c99190612056565b90915550506001600160a01b0385165f90815260016020526040812080548392906113f5908490612056565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161144191815260200190565b60405180910390a350600195945050505050565b6103e86114646009600a611faf565b611472906305f5e100611fbd565b61147d906014611fbd565b6114879190612037565b600a9081556103e89061149c90600990611faf565b6114aa906305f5e100611fbd565b6114b5906014611fbd565b6114bf9190612037565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114ee90849061200b565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b0390911691611537916120ad565b5f604051808303815f865af19150503d805f8114611570576040519150601f19603f3d011682016040523d82523d5f602084013e611575565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115ed5760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b604482015260640161060c565b4360098190556007546116009190612056565b6007556006805460ff19166001179055565b61161b82611a4f565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af115801561168b573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c6191906120c3565b5f5f5f600e5411156117dc57600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa158015611718573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173c9190612092565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa158015611788573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ac91906120ee565b90505f826117ba8388611fbd565b6117c49190612037565b9050600e5481106117d457600193505b5050506105bd565b50600192915050565b6006805461ff001916610100179055600f54600c54811080159061180b575060065460ff165b1561189457600d54811061181e5750600d545b8061182b6009600a611faf565b611836906001611fbd565b81111561188157305f908152600160205260408120805484929061185b908490612056565b9091555061186a905081611af1565b81600f5f82825461187b919061200b565b90915550505b4780156118915761189181611c31565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118d157506001600160a01b0385165f9081526012602052604090205460ff16155b80156118f557506001600160a01b0384165f9081526012602052604090205460ff16155b1561074b57600a5483111561190b57505f61074b565b6001600160a01b0384165f9081526005602052604090205460ff161580156119565750600b546001600160a01b0385165f90815260016020526040902054611954908590612056565b115b1561074b57505f949350505050565b6006545f90819060ff16158061199257506001600160a01b0385165f9081526011602052604090205460ff165b806119b457506001600160a01b0384165f9081526011602052604090205460ff165b156119c057505f61074b565b6001600160a01b0385165f9081526005602052604090205460ff1615611a09576008546064906119f890610100900460ff1685611fbd565b611a029190612037565b905061074b565b6001600160a01b0384165f9081526005602052604090205460ff161561074b57600854606490611a3c9060ff1685611fbd565b611a469190612037565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611aee57305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611afa81611a4f565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2d57611b2d612105565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba89190612092565b81600181518110611bbb57611bbb612105565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611c009085905f90869030904290600401612119565b5f604051808303815f87803b158015611c17575f5ffd5b505af1158015611c29573d5f5f3e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c6d573d5f5f3e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611aee575f5ffd5b5f5f60408385031215611ccb575f5ffd5b8235611cd681611ca6565b946020939093013593505050565b80358015158114611cf3575f5ffd5b919050565b5f5f5f60608486031215611d0a575f5ffd5b8335611d1581611ca6565b9250611d2360208501611ce4565b9150611d3160408501611ce4565b90509250925092565b5f5f5f60608486031215611d4c575f5ffd5b8335611d5781611ca6565b92506020840135611d6781611ca6565b929592945050506040919091013590565b5f60208284031215611d88575f5ffd5b8135610a0e81611ca6565b803560ff81168114611cf3575f5ffd5b5f5f60408385031215611db4575f5ffd5b611dbd83611d93565b9150611dcb60208401611d93565b90509250929050565b803561ffff81168114611cf3575f5ffd5b5f5f60408385031215611df6575f5ffd5b611dff83611dd4565b9150611dcb60208401611dd4565b5f5f60408385031215611e1e575f5ffd5b8235611e2981611ca6565b91506020830135611e3981611ca6565b809150509250929050565b803563ffffffff81168114611cf3575f5ffd5b5f5f5f5f5f60a08688031215611e6b575f5ffd5b611e7486611e44565b9450611e8260208701611e44565b9350611e9060408701611e44565b9250611e9e60608701611e44565b9150611eac60808701611e44565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115611f0757808504811115611eeb57611eeb611eb8565b6001841615611ef957908102905b60019390931c928002611ed0565b935093915050565b5f82611f1d575060016105bd565b81611f2957505f6105bd565b8160018114611f3f5760028114611f4957611f65565b60019150506105bd565b60ff841115611f5a57611f5a611eb8565b50506001821b6105bd565b5060208310610133831016604e8410600b8410161715611f88575081810a6105bd565b611f945f198484611ecc565b805f1904821115611fa757611fa7611eb8565b029392505050565b5f610a0e60ff841683611f0f565b80820281158282048414176105bd576105bd611eb8565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b818103818111156105bd576105bd611eb8565b60ff81811683821601908111156105bd576105bd611eb8565b5f8261205157634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105bd576105bd611eb8565b66ffffffffffffff818116838216029081169081811461208b5761208b611eb8565b5092915050565b5f602082840312156120a2575f5ffd5b8151610a0e81611ca6565b5f82518060208501845e5f920191825250919050565b5f5f5f606084860312156120d5575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156120fe575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156121695783516001600160a01b0316835260209384019390920191600101612142565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122053ba50c2a3bc256f9d29a4b504c5bd77f898abf508393c2332fc3745b37daf1f64736f6c634300081c0033

Deployed Bytecode

0x608060405260043610610198575f3560e01c80638da5cb5b116100e7578063d55400c911610087578063e537a83411610062578063e537a834146104fd578063e8078d941461051c578063f2fde38b14610524578063f8b45b0514610543575f5ffd5b8063d55400c91461047e578063dd62ed3e1461049d578063e4748b9e146104e1575f5ffd5b8063a5e992bb116100c2578063a5e992bb14610423578063a9059cbb14610437578063b3de9b5d14610456578063c3f70b521461046a575f5ffd5b80638da5cb5b146103bd578063950c6c39146103d957806395d89b41146103f8575f5ffd5b806330449efd1161015257806370a082311161012d57806370a082311461032a578063715018a61461035e57806375f0a874146103725780638a8c523c146103a9575f5ffd5b806330449efd14610299578063313ce567146102f85780635d098b381461030b575f5ffd5b806306fdde03146101a3578063095ea7b3146101e357806318160ddd1461021257806318839bc31461023457806323b872dd146102555780632b14ca5614610274575f5ffd5b3661019f57005b5f5ffd5b3480156101ae575f5ffd5b5060408051808201909152600681526541636520416960d01b60208201525b6040516101da9190611c71565b60405180910390f35b3480156101ee575f5ffd5b506102026101fd366004611cba565b610557565b60405190151581526020016101da565b34801561021d575f5ffd5b506102266105c3565b6040519081526020016101da565b34801561023f575f5ffd5b5061025361024e366004611cf8565b6105e3565b005b348015610260575f5ffd5b5061020261026f366004611d3a565b6106bf565b34801561027f575f5ffd5b5060085460ff165b60405160ff90911681526020016101da565b3480156102a4575f5ffd5b506102e16102b3366004611d78565b6001600160a01b03165f9081526011602090815260408083205460129092529091205460ff91821692911690565b6040805192151583529015156020830152016101da565b348015610303575f5ffd5b506009610287565b348015610316575f5ffd5b50610253610325366004611d78565b610753565b348015610335575f5ffd5b50610226610344366004611d78565b6001600160a01b03165f9081526001602052604090205490565b348015610369575f5ffd5b5061025361083d565b34801561037d575f5ffd5b506006546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016101da565b3480156103b4575f5ffd5b506102536108aa565b3480156103c8575f5ffd5b505f546001600160a01b0316610391565b3480156103e4575f5ffd5b506102536103f3366004611da3565b61091f565b348015610403575f5ffd5b5060408051808201909152600381526241434560e81b60208201526101cd565b34801561042e575f5ffd5b50600d54610226565b348015610442575f5ffd5b50610202610451366004611cba565b6109ba565b348015610461575f5ffd5b50600c54610226565b348015610475575f5ffd5b50600a54610226565b348015610489575f5ffd5b50610253610498366004611de5565b610a15565b3480156104a8575f5ffd5b506102266104b7366004611e0d565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156104ec575f5ffd5b50600854610100900460ff16610287565b348015610508575f5ffd5b50610253610517366004611e57565b610b59565b610253610c68565b34801561052f575f5ffd5b5061025361053e366004611d78565b610f5c565b34801561054e575f5ffd5b50600b54610226565b335f8181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b19086815260200190565b60405180910390a35060015b92915050565b5f6105d06009600a611faf565b6105de906305f5e100611fbd565b905090565b5f546001600160a01b031633146106155760405162461bcd60e51b815260040161060c90611fd4565b60405180910390fd5b808061061e5750815b1561067e576001600160a01b0383165f9081526005602052604090205460ff161561067e5760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b604482015260640161060c565b6001600160a01b039092165f908152601160209081526040808320805494151560ff1995861617905560129091529020805492151592909116919091179055565b5f6106c984610fd8565b6107085760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161060c565b6001600160a01b0384165f9081526002602090815260408083203384529091528120805484929061073a90849061200b565b9091555061074b905084848461103b565b949350505050565b5f546001600160a01b0316331461077c5760405162461bcd60e51b815260040161060c90611fd4565b6001600160a01b0381165f9081526005602052604090205460ff16156107e45760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000604482015260640161060c565b6006805462010000600160b01b031916620100006001600160a01b03939093169283021790555f908152601160209081526040808320805460ff1990811660019081179092556012909352922080549091169091179055565b5f546001600160a01b031633146108665760405162461bcd60e51b815260040161060c90611fd4565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146108d35760405162461bcd60e51b815260040161060c90611fd4565b60065460ff16156109155760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161060c565b61091d611455565b565b5f546001600160a01b031633146109485760405162461bcd60e51b815260040161060c90611fd4565b600a610954828461201e565b60ff16111561099a5760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b604482015260640161060c565b6008805461ffff191661010060ff9485160260ff19161791909216179055565b5f6109c433610fd8565b610a035760405162461bcd60e51b815260206004820152601060248201526f2a3930b234b733903737ba1037b832b760811b604482015260640161060c565b610a0e33848461103b565b9392505050565b5f546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161060c90611fd4565b5f6103e861ffff8416610a536009600a611faf565b610a61906305f5e100611fbd565b610a6b9190611fbd565b610a759190612037565b610a80906001612056565b9050600a54811015610ac15760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b604482015260640161060c565b80600a819055505f6103e88361ffff166009600a610adf9190611faf565b610aed906305f5e100611fbd565b610af79190611fbd565b610b019190612037565b610b0c906001612056565b9050600b54811015610b515760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b604482015260640161060c565b600b55505050565b5f546001600160a01b03163314610b825760405162461bcd60e51b815260040161060c90611fd4565b63ffffffff808516908616610b996009600a611faf565b610ba7906305f5e100611fbd565b610bb19190611fbd565b610bbb9190612037565b600c5563ffffffff808316908416610bd56009600a611faf565b610be3906305f5e100611fbd565b610bed9190611fbd565b610bf79190612037565b600d55610c1163ffffffff821666038d7ea4c68000612069565b66ffffffffffffff16600e55600c54600d541015610c615760405162461bcd60e51b815260206004820152600d60248201526c26b4b716a6b0bc1032b93937b960991b604482015260640161060c565b5050505050565b5f546001600160a01b03163314610c915760405162461bcd60e51b815260040161060c90611fd4565b6006805461ff0019166101001790556004546001600160a01b031615610ce65760405162461bcd60e51b815260206004820152600a60248201526913140818dc99585d195960b21b604482015260640161060c565b60065460ff1615610d285760405162461bcd60e51b815260206004820152600c60248201526b3a3930b234b7339037b832b760a11b604482015260640161060c565b5f341180610d3557505f47115b610d6a5760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b604482015260640161060c565b305f90815260016020526040902054610db15760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161060c565b60035f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e259190612092565b6001600160a01b031663c9c653963060035f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea89190612092565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ef2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f169190612092565b600480546001600160a01b0319166001600160a01b0392909216919091179055305f90815260016020526040902054610f4f9047611612565b6006805461ff0019169055565b5f546001600160a01b03163314610f855760405162461bcd60e51b815260040161060c90611fd4565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6006545f90819060ff1615610fef575060016105bd565b6001600160a01b0383165f9081526011602052604090205460ff16801561102d57506001600160a01b0383165f9081526012602052604090205460ff165b156105bd5750600192915050565b5f6001600160a01b0384166110925760405162461bcd60e51b815260206004820152601a60248201527f4e6f207472616e73666572732066726f6d20302077616c6c6574000000000000604482015260640161060c565b60065460ff1661111d576001600160a01b0384165f9081526011602052604090205460ff1680156110da57506001600160a01b0384165f9081526012602052604090205460ff165b61111d5760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba103cb2ba1037b832b760611b604482015260640161060c565b600654610100900460ff1615801561114c57506001600160a01b0383165f9081526005602052604090205460ff165b801561115c575061115c826116b0565b15611169576111696117e5565b60095443106112e4576007544310801561119a57506001600160a01b0384165f9081526005602052604090205460ff165b156111e3576001600160a01b03831632146111e35760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161060c565b6007546111f290610258612056565b4310801561121757506001600160a01b0383165f9081526005602052604090205460ff165b801561122c57506001600160a01b0384163014155b156112e457435f9081526010602090815260408083206001600160a01b0387168452909152812080546001929061126790849060ff1661201e565b82546101009290920a60ff818102199093169183160217909155435f9081526010602090815260408083206001600160a01b038916845290915290205460029116111590506112e45760405162461bcd60e51b81526020600482015260096024820152684d455620626c6f636b60b81b604482015260640161060c565b6001600160a01b038416301480159061130657506001600160a01b0383163014155b801561131f57505f546001600160a01b03858116911614155b1561136c5761132f8484846118a2565b61136c5760405162461bcd60e51b815260206004820152600e60248201526d5458206f766572206c696d69747360901b604482015260640161060c565b5f611378858585611965565b90505f611385828561200b565b6001600160a01b0387165f908152600160205260408120805492935086929091906113b190849061200b565b9250508190555081600f5f8282546113c99190612056565b90915550506001600160a01b0385165f90815260016020526040812080548392906113f5908490612056565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161144191815260200190565b60405180910390a350600195945050505050565b6103e86114646009600a611faf565b611472906305f5e100611fbd565b61147d906014611fbd565b6114879190612037565b600a9081556103e89061149c90600990611faf565b6114aa906305f5e100611fbd565b6114b5906014611fbd565b6114bf9190612037565b600b55600f546004546001600160a01b03165f90815260016020526040812080549091906114ee90849061200b565b909155505060048054604080519283526024830181526020830180516001600160e01b031660016209351760e01b0319179052516001600160a01b0390911691611537916120ad565b5f604051808303815f865af19150503d805f8114611570576040519150601f19603f3d011682016040523d82523d5f602084013e611575565b606091505b5050600480546001600160a01b039081165f90815260056020526040808220805460ff1916951515959095179094559154168152205460ff166115ed5760405162461bcd60e51b815260206004820152601060248201526f04661696c656420626f6f7473747261760841b604482015260640161060c565b4360098190556007546116009190612056565b6007556006805460ff19166001179055565b61161b82611a4f565b6003545f805460405163f305d71960e01b8152306004820152602481018690526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af115801561168b573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c6191906120c3565b5f5f5f600e5411156117dc57600480546001600160a01b039081165f9081526001602090815260408083205460035482516315ab88c960e31b8152925191969495169363ad5c46489383820193909291908290030181865afa158015611718573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173c9190612092565b600480546040516370a0823160e01b81526001600160a01b039182169281019290925291909116906370a0823190602401602060405180830381865afa158015611788573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ac91906120ee565b90505f826117ba8388611fbd565b6117c49190612037565b9050600e5481106117d457600193505b5050506105bd565b50600192915050565b6006805461ff001916610100179055600f54600c54811080159061180b575060065460ff165b1561189457600d54811061181e5750600d545b8061182b6009600a611faf565b611836906001611fbd565b81111561188157305f908152600160205260408120805484929061185b908490612056565b9091555061186a905081611af1565b81600f5f82825461187b919061200b565b90915550505b4780156118915761189181611c31565b50505b506006805461ff0019169055565b6006545f9060019060ff1680156118d157506001600160a01b0385165f9081526012602052604090205460ff16155b80156118f557506001600160a01b0384165f9081526012602052604090205460ff16155b1561074b57600a5483111561190b57505f61074b565b6001600160a01b0384165f9081526005602052604090205460ff161580156119565750600b546001600160a01b0385165f90815260016020526040902054611954908590612056565b115b1561074b57505f949350505050565b6006545f90819060ff16158061199257506001600160a01b0385165f9081526011602052604090205460ff165b806119b457506001600160a01b0384165f9081526011602052604090205460ff165b156119c057505f61074b565b6001600160a01b0385165f9081526005602052604090205460ff1615611a09576008546064906119f890610100900460ff1685611fbd565b611a029190612037565b905061074b565b6001600160a01b0384165f9081526005602052604090205460ff161561074b57600854606490611a3c9060ff1685611fbd565b611a469190612037565b95945050505050565b305f908152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452909152902054811115611aee57305f818152600260209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190205f199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b611afa81611a4f565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b2d57611b2d612105565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba89190612092565b81600181518110611bbb57611bbb612105565b6001600160a01b03928316602091820292909201015260035460405163791ac94760e01b815291169063791ac94790611c009085905f90869030904290600401612119565b5f604051808303815f87803b158015611c17575f5ffd5b505af1158015611c29573d5f5f3e3d5ffd5b505050505050565b600654604051620100009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015611c6d573d5f5f3e3d5ffd5b5050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611aee575f5ffd5b5f5f60408385031215611ccb575f5ffd5b8235611cd681611ca6565b946020939093013593505050565b80358015158114611cf3575f5ffd5b919050565b5f5f5f60608486031215611d0a575f5ffd5b8335611d1581611ca6565b9250611d2360208501611ce4565b9150611d3160408501611ce4565b90509250925092565b5f5f5f60608486031215611d4c575f5ffd5b8335611d5781611ca6565b92506020840135611d6781611ca6565b929592945050506040919091013590565b5f60208284031215611d88575f5ffd5b8135610a0e81611ca6565b803560ff81168114611cf3575f5ffd5b5f5f60408385031215611db4575f5ffd5b611dbd83611d93565b9150611dcb60208401611d93565b90509250929050565b803561ffff81168114611cf3575f5ffd5b5f5f60408385031215611df6575f5ffd5b611dff83611dd4565b9150611dcb60208401611dd4565b5f5f60408385031215611e1e575f5ffd5b8235611e2981611ca6565b91506020830135611e3981611ca6565b809150509250929050565b803563ffffffff81168114611cf3575f5ffd5b5f5f5f5f5f60a08688031215611e6b575f5ffd5b611e7486611e44565b9450611e8260208701611e44565b9350611e9060408701611e44565b9250611e9e60608701611e44565b9150611eac60808701611e44565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115611f0757808504811115611eeb57611eeb611eb8565b6001841615611ef957908102905b60019390931c928002611ed0565b935093915050565b5f82611f1d575060016105bd565b81611f2957505f6105bd565b8160018114611f3f5760028114611f4957611f65565b60019150506105bd565b60ff841115611f5a57611f5a611eb8565b50506001821b6105bd565b5060208310610133831016604e8410600b8410161715611f88575081810a6105bd565b611f945f198484611ecc565b805f1904821115611fa757611fa7611eb8565b029392505050565b5f610a0e60ff841683611f0f565b80820281158282048414176105bd576105bd611eb8565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b818103818111156105bd576105bd611eb8565b60ff81811683821601908111156105bd576105bd611eb8565b5f8261205157634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105bd576105bd611eb8565b66ffffffffffffff818116838216029081169081811461208b5761208b611eb8565b5092915050565b5f602082840312156120a2575f5ffd5b8151610a0e81611ca6565b5f82518060208501845e5f920191825250919050565b5f5f5f606084860312156120d5575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156120fe575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156121695783516001600160a01b0316835260209384019390920191600101612142565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122053ba50c2a3bc256f9d29a4b504c5bd77f898abf508393c2332fc3745b37daf1f64736f6c634300081c0033

Deployed Bytecode Sourcemap

1805:11854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4081:80;;;;;;;;;;-1:-1:-1;4153:5:0;;;;;;;;;;;;-1:-1:-1;;;4153:5:0;;;;4081:80;;;;;;;:::i;:::-;;;;;;;;5055:217;;;;;;;;;;-1:-1:-1;5055:217:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;5055:217:0;945:187:1;3992:83:0;;;;;;;;;;;;;:::i;:::-;;;1283:25:1;;;1271:2;1256:18;3992:83:0;1137:177:1;8768:265:0;;;;;;;;;;-1:-1:-1;8768:265:0;;;;;:::i;:::-;;:::i;:::-;;4516:303;;;;;;;;;;-1:-1:-1;4516:303:0;;;;;:::i;:::-;;:::i;13585:71::-;;;;;;;;;;-1:-1:-1;13642:11:0;;;;13585:71;;;2557:4:1;2545:17;;;2527:36;;2515:2;2500:18;13585:71:0;2385:184:1;8316:143:0;;;;;;;;;;-1:-1:-1;8316:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8418:16:0;8375:9;8418:16;;;:8;:16;;;;;;;;;8436:8;:16;;;;;;;8418;;;;;8436;;;8316:143;;;;;3013:14:1;;3006:22;2988:41;;3072:14;;3065:22;3060:2;3045:18;;3038:50;2961:18;8316:143:0;2826:268:1;3904:82:0;;;;;;;;;;-1:-1:-1;1975:1:0;3904:82;;7436:286;;;;;;;;;;-1:-1:-1;7436:286:0;;;;;:::i;:::-;;:::i;4261:105::-;;;;;;;;;;-1:-1:-1;4261:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;4345:18:0;4327:7;4345:18;;;:9;:18;;;;;;;4261:105;681:130;;;;;;;;;;;;;:::i;11987:100::-;;;;;;;;;;-1:-1:-1;12065:16:0;;;;;-1:-1:-1;;;;;12065:16:0;11987:100;;;-1:-1:-1;;;;;3263:32:1;;;3245:51;;3233:2;3218:18;11987:100:0;3099:203:1;10173:131:0;;;;;;;;;;;;;:::i;453:65::-;;;;;;;;;;-1:-1:-1;491:7:0;509:6;-1:-1:-1;;;;;509:6:0;453:65;;7730:244;;;;;;;;;;-1:-1:-1;7730:244:0;;;;;:::i;:::-;;:::i;4167:88::-;;;;;;;;;;-1:-1:-1;4241:11:0;;;;;;;;;;;;-1:-1:-1;;;4241:11:0;;;;4167:88;;12540:84;;;;;;;;;;-1:-1:-1;12610:8:0;;12540:84;;4827:220;;;;;;;;;;-1:-1:-1;4827:220:0;;;;;:::i;:::-;;:::i;12444:90::-;;;;;;;;;;-1:-1:-1;12514:14:0;;12444:90;;13408:92;;;;;;;;;;-1:-1:-1;13485:9:0;;13408:92;;5795:423;;;;;;;;;;-1:-1:-1;5795:423:0;;;;;:::i;:::-;;:::i;4372:136::-;;;;;;;;;;-1:-1:-1;4372:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;4474:22:0;;;4456:7;4474:22;;;:14;:22;;;;;;;;:31;;;;;;;;;;;;;4372:136;13508:71;;;;;;;;;;-1:-1:-1;13565:11:0;;;;;;;13508:71;;7982:326;;;;;;;;;;-1:-1:-1;7982:326:0;;;;;:::i;:::-;;:::i;6958:470::-;;;:::i;524:151::-;;;;;;;;;;-1:-1:-1;524:151:0;;;;;:::i;:::-;;:::i;13312:90::-;;;;;;;;;;-1:-1:-1;13384:12:0;;13312:90;;5055:217;5162:10;5130:4;5147:26;;;:14;:26;;;;;;;;-1:-1:-1;;;;;5147:35:0;;;;;;;;;;:44;;;5207:37;5130:4;;5147:35;;5207:37;;;;5185:6;1283:25:1;;1271:2;1256:18;;1137:177;5207:37:0;;;;;;;;-1:-1:-1;5262:4:0;5055:217;;;;;:::o;3992:83::-;4047:7;2031:15;1975:1;2031:2;:15;:::i;:::-;2018:29;;:9;:29;:::i;:::-;4058:14;;3992:83;:::o;8768:265::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;;;;;;;;;8870:10:::1;:22;;;;8884:8;8870:22;8866:84;;;-1:-1:-1::0;;;;;8905:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;;::::1;;8904:22;8896:51;;;::::0;-1:-1:-1;;;8896:51:0;;7742:2:1;8896:51:0::1;::::0;::::1;7724:21:1::0;7781:2;7761:18;;;7754:30;-1:-1:-1;;;7800:18:1;;;7793:46;7856:18;;8896:51:0::1;7540:340:1::0;8896:51:0::1;-1:-1:-1::0;;;;;8960:15:0;;::::1;;::::0;;;:8:::1;:15;::::0;;;;;;;:26;;;::::1;;-1:-1:-1::0;;8960:26:0;;::::1;;::::0;;8997:8:::1;:15:::0;;;;;:28;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;8768:265::o;4516:303::-;4619:4;4644:28;4661:10;4644:16;:28::i;:::-;4636:57;;;;-1:-1:-1;;;4636:57:0;;8087:2:1;4636:57:0;;;8069:21:1;8126:2;8106:18;;;8099:30;-1:-1:-1;;;8145:18:1;;;8138:46;8201:18;;4636:57:0;7885:340:1;4636:57:0;-1:-1:-1;;;;;4704:26:0;;;;;;:14;:26;;;;;;;;4731:10;4704:38;;;;;;;:48;;4746:6;;4704:26;:48;;4746:6;;4704:48;:::i;:::-;;;;-1:-1:-1;4770:43:0;;-1:-1:-1;4784:10:0;4796:8;4806:6;4770:13;:43::i;:::-;4763:50;4516:303;-1:-1:-1;;;;4516:303:0:o;7436:286::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7525:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;;::::1;;7524:31;7516:67;;;::::0;-1:-1:-1;;;7516:67:0;;8565:2:1;7516:67:0::1;::::0;::::1;8547:21:1::0;8604:2;8584:18;;;8577:30;8643:25;8623:18;;;8616:53;8686:18;;7516:67:0::1;8363:347:1::0;7516:67:0::1;7594:16;:40:::0;;-1:-1:-1;;;;;;7594:40:0::1;::::0;-1:-1:-1;;;;;7594:40:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;7645:22:0;;;:8:::1;:22;::::0;;;;;;;:29;;-1:-1:-1;;7645:29:0;;::::1;-1:-1:-1::0;7645:29:0;;::::1;::::0;;;7685:8:::1;:22:::0;;;;;:29;;;;::::1;::::0;;::::1;::::0;;7436:286::o;681:130::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;758:1:::1;741:19:::0;;-1:-1:-1;;;;;;741:19:0::1;::::0;;776:32:::1;::::0;3245:51:1;;;776:32:0::1;::::0;3233:2:1;3218:18;776:32:0::1;;;;;;;681:130::o:0;10173:131::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;10237:15:::1;::::0;::::1;;10236:16;10228:41;;;::::0;-1:-1:-1;;;10228:41:0;;8917:2:1;10228:41:0::1;::::0;::::1;8899:21:1::0;8956:2;8936:18;;;8929:30;-1:-1:-1;;;8975:18:1;;;8968:42;9027:18;;10228:41:0::1;8715:336:1::0;10228:41:0::1;10280:16;:14;:16::i;:::-;10173:131::o:0;7730:244::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;7864:2:::1;7830:30;7846:14:::0;7830:13;:30:::1;:::i;:::-;:36;;;;7822:67;;;::::0;-1:-1:-1;;;7822:67:0;;9411:2:1;7822:67:0::1;::::0;::::1;9393:21:1::0;9450:2;9430:18;;;9423:30;-1:-1:-1;;;9469:18:1;;;9462:48;9527:18;;7822:67:0::1;9209:342:1::0;7822:67:0::1;7900:11;:27:::0;;-1:-1:-1;;7938:28:0;7900:27:::1;;::::0;;::::1;;-1:-1:-1::0;;7938:28:0;;;;;::::1;;::::0;;7730:244::o;4827:220::-;4906:4;4931:28;4948:10;4931:16;:28::i;:::-;4923:57;;;;-1:-1:-1;;;4923:57:0;;8087:2:1;4923:57:0;;;8069:21:1;8126:2;8106:18;;;8099:30;-1:-1:-1;;;8145:18:1;;;8138:46;8201:18;;4923:57:0;7885:340:1;4923:57:0;4998:43;5012:10;5024:8;5034:6;4998:13;:43::i;:::-;4991:50;4827:220;-1:-1:-1;;;4827:220:0:o;5795:423::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;5893:16:::1;5941:4;5912:26;::::0;::::1;2031:15;1975:1;2031:2;:15;:::i;:::-;2018:29;::::0;:9:::1;:29;:::i;:::-;5912:26;;;;:::i;:::-;:33;;;;:::i;:::-;:37;::::0;5948:1:::1;5912:37;:::i;:::-;5893:56;;5980:9;;5968:8;:21;;5960:44;;;::::0;-1:-1:-1;;;5960:44:0;;10110:2:1;5960:44:0::1;::::0;::::1;10092:21:1::0;10149:2;10129:18;;;10122:30;-1:-1:-1;;;10168:18:1;;;10161:40;10218:18;;5960:44:0::1;9908:334:1::0;5960:44:0::1;6027:8;6015:9;:20;;;;6046;6098:4;6079:16;6069:26;;1975:1;2031:2;:15;;;;:::i;:::-;2018:29;::::0;:9:::1;:29;:::i;:::-;6069:26;;;;:::i;:::-;:33;;;;:::i;:::-;:37;::::0;6105:1:::1;6069:37;:::i;:::-;6046:60;;6141:12;;6125;:28;;6117:55;;;::::0;-1:-1:-1;;;6117:55:0;;10449:2:1;6117:55:0::1;::::0;::::1;10431:21:1::0;10488:2;10468:18;;;10461:30;-1:-1:-1;;;10507:18:1;;;10500:44;10561:18;;6117:55:0::1;10247:338:1::0;6117:55:0::1;6183:12;:27:::0;-1:-1:-1;;;5795:423:0:o;7982:326::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;8126:25:::1;::::0;;::::1;::::0;:16;::::1;2031:15;1975:1;2031:2;:15;:::i;:::-;2018:29;::::0;:9:::1;:29;:::i;:::-;8126:16;;;;:::i;:::-;:25;;;;:::i;:::-;8109:14;:42:::0;8173:25:::1;::::0;;::::1;::::0;:16;::::1;2031:15;1975:1;2031:2;:15;:::i;:::-;2018:29;::::0;:9:::1;:29;:::i;:::-;8173:16;;;;:::i;:::-;:25;;;;:::i;:::-;8162:8;:36:::0;8223:16:::1;;::::0;::::1;8233:6;8223:16;:::i;:::-;8209:30;;:11;:30:::0;8268:14:::1;::::0;8258:8:::1;::::0;:24:::1;;8250:50;;;::::0;-1:-1:-1;;;8250:50:0;;11059:2:1;8250:50:0::1;::::0;::::1;11041:21:1::0;11098:2;11078:18;;;11071:30;-1:-1:-1;;;11117:18:1;;;11110:43;11170:18;;8250:50:0::1;10857:337:1::0;8250:50:0::1;7982:326:::0;;;;;:::o;6958:470::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;3308:9:::1;:16:::0;;-1:-1:-1;;3308:16:0::1;;;::::0;;7040:7:::2;::::0;-1:-1:-1;;;;;7040:7:0::2;:21:::0;7032:44:::2;;;::::0;-1:-1:-1;;;7032:44:0;;11401:2:1;7032:44:0::2;::::0;::::2;11383:21:1::0;11440:2;11420:18;;;11413:30;-1:-1:-1;;;11459:18:1;;;11452:40;11509:18;;7032:44:0::2;11199:334:1::0;7032:44:0::2;7096:15;::::0;::::2;;7095:16;7087:41;;;::::0;-1:-1:-1;;;7087:41:0;;8917:2:1;7087:41:0::2;::::0;::::2;8899:21:1::0;8956:2;8936:18;;;8929:30;-1:-1:-1;;;8975:18:1;;;8968:42;9027:18;;7087:41:0::2;8715:336:1::0;7087:41:0::2;7159:1;7147:9;:13;:40;;;;7186:1;7164:21;:23;7147:40;7139:59;;;::::0;-1:-1:-1;;;7139:59:0;;11740:2:1;7139:59:0::2;::::0;::::2;11722:21:1::0;11779:1;11759:18;;;11752:29;-1:-1:-1;;;11797:18:1;;;11790:36;11843:18;;7139:59:0::2;11538:329:1::0;7139:59:0::2;7235:4;7242:1;7217:24:::0;;;:9:::2;:24;::::0;;;;;7209:48:::2;;;::::0;-1:-1:-1;;;7209:48:0;;12074:2:1;7209:48:0::2;::::0;::::2;12056:21:1::0;12113:1;12093:18;;;12086:29;-1:-1:-1;;;12131:18:1;;;12124:39;12180:18;;7209:48:0::2;11872:332:1::0;7209:48:0::2;7296:6;;;;;;;;;-1:-1:-1::0;;;;;7296:6:0::2;-1:-1:-1::0;;;;;7296:14:0::2;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7278:46:0::2;;7333:4;7340:6;;;;;;;;;-1:-1:-1::0;;;;;7340:6:0::2;-1:-1:-1::0;;;;;7340:11:0::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7278:76;::::0;-1:-1:-1;;;;;;7278:76:0::2;::::0;;;;;;-1:-1:-1;;;;;12657:32:1;;;7278:76:0::2;::::0;::::2;12639:51:1::0;12726:32;;12706:18;;;12699:60;12612:18;;7278:76:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7268:7;:86:::0;;-1:-1:-1;;;;;;7268:86:0::2;-1:-1:-1::0;;;;;7268:86:0;;;::::2;::::0;;;::::2;::::0;;7390:4:::2;-1:-1:-1::0;7372:24:0;;;-1:-1:-1;7372:24:0::2;::::0;;;;;7365:55:::2;::::0;7398:21:::2;7365:6;:55::i;:::-;3349:9:::1;:17:::0;;-1:-1:-1;;3349:17:0::1;::::0;;6958:470::o;524:151::-;308:6;;-1:-1:-1;;;;;308:6:0;294:10;:20;286:57;;;;-1:-1:-1;;;286:57:0;;;;;;;:::i;:::-;608:6:::1;:17:::0;;-1:-1:-1;;;;;;608:17:0::1;-1:-1:-1::0;;;;;608:17:0;::::1;::::0;;::::1;::::0;;;642:30:::1;::::0;3245:51:1;;;642:30:0::1;::::0;3233:2:1;3218:18;642:30:0::1;;;;;;;524:151:::0;:::o;8467:293::-;8591:15;;8535:4;;;;8591:15;;8586:135;;;-1:-1:-1;8625:4:0;8586:135;;;-1:-1:-1;;;;;8652:20:0;;;;;;:8;:20;;;;;;;;:44;;;;-1:-1:-1;;;;;;8676:20:0;;;;;;:8;:20;;;;;;;;8652:44;8648:73;;;-1:-1:-1;8714:4:0;8741:11;8467:293;-1:-1:-1;;8467:293:0:o;10628:1351::-;10719:4;-1:-1:-1;;;;;10744:20:0;;10736:59;;;;-1:-1:-1;;;10736:59:0;;13188:2:1;10736:59:0;;;13170:21:1;13227:2;13207:18;;;13200:30;13266:28;13246:18;;;13239:56;13312:18;;10736:59:0;12986:350:1;10736:59:0;10811:15;;;;10806:96;;-1:-1:-1;;;;;10838:16:0;;;;;;:8;:16;;;;;;;;:36;;;;-1:-1:-1;;;;;;10858:16:0;;;;;;:8;:16;;;;;;;;10838:36;10830:69;;;;-1:-1:-1;;;10830:69:0;;13543:2:1;10830:69:0;;;13525:21:1;13582:2;13562:18;;;13555:30;-1:-1:-1;;;13601:18:1;;;13594:50;13661:18;;10830:69:0;13341:344:1;10830:69:0;10918:9;;;;;;;10917:10;:40;;;;-1:-1:-1;;;;;;10931:26:0;;;;;;:16;:26;;;;;;;;10917:40;:64;;;;;10961:20;10974:6;10961:12;:20::i;:::-;10912:92;;;10986:15;:13;:15::i;:::-;11037:9;;11021:12;:25;11016:459;;11083:8;;11068:12;:23;:51;;;;-1:-1:-1;;;;;;11095:24:0;;;;;;:16;:24;;;;;;;;11068:51;11064:137;;;-1:-1:-1;;;;;11149:21:0;;11161:9;11149:21;11141:43;;;;-1:-1:-1;;;11141:43:0;;13892:2:1;11141:43:0;;;13874:21:1;13931:1;13911:18;;;13904:29;-1:-1:-1;;;13949:18:1;;;13942:39;13998:18;;11141:43:0;13690:332:1;11141:43:0;11234:8;;:14;;11245:3;11234:14;:::i;:::-;11219:12;:29;:59;;;;-1:-1:-1;;;;;;11252:26:0;;;;;;:16;:26;;;;;;;;11219:59;:86;;;;-1:-1:-1;;;;;;11282:23:0;;11300:4;11282:23;;11219:86;11215:249;;;11339:12;11327:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11327:35:0;;;;;;;;;:40;;11366:1;;11327:25;:40;;11366:1;;11327:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11406:12;-1:-1:-1;11394:25:0;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11394:35:0;;;;;;;;;;11433:1;11394:35;;:40;;;-1:-1:-1;11386:62:0;;;;-1:-1:-1;;;11386:62:0;;13892:2:1;11386:62:0;;;13874:21:1;13931:1;13911:18;;;13904:29;-1:-1:-1;;;13949:18:1;;;13942:39;13998:18;;11386:62:0;13690:332:1;11386:62:0;-1:-1:-1;;;;;11492:23:0;;11510:4;11492:23;;;;:52;;-1:-1:-1;;;;;;11519:25:0;;11539:4;11519:25;;11492:52;:72;;;;-1:-1:-1;11558:6:0;;-1:-1:-1;;;;;11548:16:0;;;11558:6;;11548:16;;11492:72;11487:172;;;11591:36;11602:6;11610:8;11620:6;11591:10;:36::i;:::-;11583:63;;;;-1:-1:-1;;;11583:63:0;;14229:2:1;11583:63:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:44;14341:18;;11583:63:0;14027:338:1;11583:63:0;11671:18;11692:32;11699:6;11707:8;11717:6;11692;:32::i;:::-;11671:53;-1:-1:-1;11735:23:0;11761:19;11671:53;11761:6;:19;:::i;:::-;-1:-1:-1;;;;;11791:17:0;;;;;;:9;:17;;;;;:27;;11735:45;;-1:-1:-1;11812:6:0;;11791:17;;;:27;;11812:6;;11791:27;:::i;:::-;;;;;;;;11840:10;11829:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11861:19:0;;;;;;:9;:19;;;;;:38;;11884:15;;11861:19;:38;;11884:15;;11861:38;:::i;:::-;;;;;;;;11932:8;-1:-1:-1;;;;;11915:34:0;11924:6;-1:-1:-1;;;;;11915:34:0;;11942:6;11915:34;;;;1283:25:1;;1271:2;1256:18;;1137:177;11915:34:0;;;;;;;;-1:-1:-1;11967:4:0;;10628:1351;-1:-1:-1;;;;;10628:1351:0:o;9041:435::-;9114:4;2031:15;1975:1;2031:2;:15;:::i;:::-;2018:29;;:9;:29;:::i;:::-;9099:12;;:2;:12;:::i;:::-;:19;;;;:::i;:::-;9087:9;:31;;;9159:4;;2031:15;;1975:1;;2031:15;:::i;:::-;2018:29;;:9;:29;:::i;:::-;9144:12;;:2;:12;:::i;:::-;:19;;;;:::i;:::-;9129:12;:34;9196:7;;9184;;-1:-1:-1;;;;;9184:7:0;9174:18;;;;:9;:18;;;;;:29;;:18;;;:29;;9196:7;;9174:29;:::i;:::-;;;;-1:-1:-1;;9245:7:0;;;9258:33;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9258:33:0;-1:-1:-1;;;;;;9258:33:0;;;9245:48;-1:-1:-1;;;;;9245:7:0;;;;:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9232:7:0;;;-1:-1:-1;;;;;9232:7:0;;;9215:25;;;;:16;:25;;;;;;9214:79;;-1:-1:-1;;9214:79:0;;;;;;;;;;;9329:7;;;9312:25;;;;9214:79;9312:25;9304:54;;;;-1:-1:-1;;;9304:54:0;;14878:2:1;9304:54:0;;;14860:21:1;14917:2;14897:18;;;14890:30;-1:-1:-1;;;14936:18:1;;;14929:46;14992:18;;9304:54:0;14676:340:1;9304:54:0;9381:12;9369:9;:24;;;9415:8;;:20;;9381:12;9415:20;:::i;:::-;9404:8;:31;9446:15;:22;;-1:-1:-1;;9446:22:0;9464:4;9446:22;;;9041:435::o;9484:235::-;9565:28;9580:12;9565:14;:28::i;:::-;9604:6;;;9686;;9604:107;;-1:-1:-1;;;9604:107:0;;9659:4;9604:107;;;15324:51:1;15391:18;;;15384:34;;;15434:18;;;15427:34;;;15477:18;;;15470:34;;;;-1:-1:-1;;;;;9686:6:0;;;15520:19:1;;;15513:61;9694:15:0;15590:19:1;;;15583:35;9604:6:0;;;;:22;;9634:13;;15296:19:1;;9604:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9727:438::-;9789:4;9806:11;9846:1;9832:11;;:15;9828:306;;;9891:7;;;-1:-1:-1;;;;;9891:7:0;;;9865:13;9881:18;;;:9;:18;;;;;;;;;9938:6;;:13;;-1:-1:-1;;;9938:13:0;;;;9881:18;;9865:13;;9938:6;;:11;;:13;;;;9881:18;;9938:13;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9963:7;;;9931:40;;-1:-1:-1;;;9931:40:0;;-1:-1:-1;;;;;9963:7:0;;;9931:40;;;3245:51:1;;;;9931:31:0;;;;;;;3218:18:1;;9931:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9914:57;-1:-1:-1;9987:16:0;10028:5;10007:17;9914:57;10007:8;:17;:::i;:::-;10006:27;;;;:::i;:::-;9987:46;;10064:11;;10052:8;:23;10048:47;;10088:4;10079:13;;10048:47;9849:261;;;9828:306;;;-1:-1:-1;10127:4:0;10151:6;9727:438;-1:-1:-1;;9727:438:0:o;6226:724::-;3308:9;:16;;-1:-1:-1;;3308:16:0;;;;;6311:7:::1;::::0;6356:14:::1;::::0;6334:36;::::1;::::0;::::1;::::0;:55:::1;;-1:-1:-1::0;6374:15:0::1;::::0;::::1;;6334:55;6329:614;;;6434:8;;6412:18;:30;6407:72;;-1:-1:-1::0;6468:8:0::1;::::0;6407:72:::1;6532:18:::0;6591:15:::1;1975:1;6591:2;:15;:::i;:::-;6587:19;::::0;:1:::1;:19;:::i;:::-;6570:14;:36;6566:224;;;6646:4;6628:24;::::0;;;:9:::1;:24;::::0;;;;:46;;6656:18;;6628:24;:46:::1;::::0;6656:18;;6628:46:::1;:::i;:::-;::::0;;;-1:-1:-1;6693:33:0::1;::::0;-1:-1:-1;6711:14:0;6693:17:::1;:33::i;:::-;6756:18;6745:7;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6566:224:0::1;6834:21;6873:23:::0;;6870:62:::1;;6900:29;6909:19;6900:8;:29::i;:::-;6392:551;;6329:614;-1:-1:-1::0;3349:9:0;:17;;-1:-1:-1;;3349:17:0;;;6226:724::o;12734:570::-;12900:15;;12839:4;;12880;;12900:15;;:40;;;;-1:-1:-1;;;;;;12920:20:0;;;;;;:8;:20;;;;;;;;12919:21;12900:40;:63;;;;-1:-1:-1;;;;;;12945:18:0;;;;;;:8;:18;;;;;;;;12944:19;12900:63;12895:368;;;13003:9;;12986:14;:26;12981:271;;;-1:-1:-1;13054:5:0;12981:271;;;-1:-1:-1;;;;;13119:26:0;;;;;;:16;:26;;;;;;;;13118:27;:84;;;;-1:-1:-1;13189:12:0;;-1:-1:-1;;;;;13150:19:0;;;;;;:9;:19;;;;;;:36;;13172:14;;13150:36;:::i;:::-;:51;13118:84;13095:157;;;-1:-1:-1;13244:5:0;13280:16;12734:570;-1:-1:-1;;;;12734:570:0:o;5280:507::-;5428:15;;5374:7;;;;5428:15;;5427:16;;:40;;-1:-1:-1;;;;;;5447:20:0;;;;;;:8;:20;;;;;;;;5427:40;:63;;;-1:-1:-1;;;;;;5471:19:0;;;;;;:8;:19;;;;;;;;5427:63;5422:331;;;-1:-1:-1;5521:1:0;5422:331;;;-1:-1:-1;;;;;5546:28:0;;;;;;:16;:28;;;;;;;;5541:212;;;5614:11;;5628:3;;5605:20;;5614:11;;;;;5605:6;:20;:::i;:::-;:26;;;;:::i;:::-;5593:38;;5541:212;;;-1:-1:-1;;;;;5656:27:0;;;;;;:16;:27;;;;;;;;5651:102;;;5723:11;;5737:3;;5714:20;;5723:11;;5714:6;:20;:::i;:::-;:26;;;;:::i;:::-;5702:38;5280:507;-1:-1:-1;;;;;5280:507:0:o;10312:308::-;10406:4;10383:29;;;;:14;:29;;;;;;;;2237:42;10383:44;;;;;;;;:59;-1:-1:-1;10378:235:0;;;10483:4;10460:29;;;;:14;:29;;;;;;;;2237:42;10460:44;;;;;;;;;;-1:-1:-1;;10460:64:0;;;;10544:57;;1283:25:1;;;2237:42:0;;10483:4;10544:57;;1256:18:1;10544:57:0;;;;;;;10378:235;10312:308;:::o;12095:341::-;12162:27;12177:11;12162:14;:27::i;:::-;12224:16;;;12238:1;12224:16;;;;;;;;12200:21;;12224:16;;;;;;;;;;-1:-1:-1;12224:16:0;12200:40;;12270:4;12251;12256:1;12251:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12251:25:0;;;:7;;;;;;;;;;:25;;;;12297:6;;:13;;;-1:-1:-1;;;12297:13:0;;;;:6;;;;;:11;;:13;;;;;12251:7;;12297:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12287:4;12292:1;12287:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12287:23:0;;;:7;;;;;;;;;:23;12321:6;;:107;;-1:-1:-1;;;12321:107:0;;:6;;;:57;;:107;;12379:11;;12321:6;;12393:4;;12406;;12412:15;;12321:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12151:285;12095:341;:::o;12632:94::-;12685:16;;:33;;:16;;;;-1:-1:-1;;;;;12685:16:0;;:33;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;;;;;;;;12632:94;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:160::-;1384:20;;1440:13;;1433:21;1423:32;;1413:60;;1469:1;1466;1459:12;1413:60;1319:160;;;:::o;1484:383::-;1555:6;1563;1571;1624:2;1612:9;1603:7;1599:23;1595:32;1592:52;;;1640:1;1637;1630:12;1592:52;1679:9;1666:23;1698:31;1723:5;1698:31;:::i;:::-;1748:5;-1:-1:-1;1772:35:1;1803:2;1788:18;;1772:35;:::i;:::-;1762:45;;1826:35;1857:2;1846:9;1842:18;1826:35;:::i;:::-;1816:45;;1484:383;;;;;:::o;1872:508::-;1949:6;1957;1965;2018:2;2006:9;1997:7;1993:23;1989:32;1986:52;;;2034:1;2031;2024:12;1986:52;2073:9;2060:23;2092:31;2117:5;2092:31;:::i;:::-;2142:5;-1:-1:-1;2199:2:1;2184:18;;2171:32;2212:33;2171:32;2212:33;:::i;:::-;1872:508;;2264:7;;-1:-1:-1;;;2344:2:1;2329:18;;;;2316:32;;1872:508::o;2574:247::-;2633:6;2686:2;2674:9;2665:7;2661:23;2657:32;2654:52;;;2702:1;2699;2692:12;2654:52;2741:9;2728:23;2760:31;2785:5;2760:31;:::i;3307:156::-;3373:20;;3433:4;3422:16;;3412:27;;3402:55;;3453:1;3450;3443:12;3468:252;3532:6;3540;3593:2;3581:9;3572:7;3568:23;3564:32;3561:52;;;3609:1;3606;3599:12;3561:52;3632:27;3649:9;3632:27;:::i;:::-;3622:37;;3678:36;3710:2;3699:9;3695:18;3678:36;:::i;:::-;3668:46;;3468:252;;;;;:::o;3725:159::-;3792:20;;3852:6;3841:18;;3831:29;;3821:57;;3874:1;3871;3864:12;3889:256;3955:6;3963;4016:2;4004:9;3995:7;3991:23;3987:32;3984:52;;;4032:1;4029;4022:12;3984:52;4055:28;4073:9;4055:28;:::i;:::-;4045:38;;4102:37;4135:2;4124:9;4120:18;4102:37;:::i;4150:388::-;4218:6;4226;4279:2;4267:9;4258:7;4254:23;4250:32;4247:52;;;4295:1;4292;4285:12;4247:52;4334:9;4321:23;4353:31;4378:5;4353:31;:::i;:::-;4403:5;-1:-1:-1;4460:2:1;4445:18;;4432:32;4473:33;4432:32;4473:33;:::i;:::-;4525:7;4515:17;;;4150:388;;;;;:::o;4543:163::-;4610:20;;4670:10;4659:22;;4649:33;;4639:61;;4696:1;4693;4686:12;4711:474;4801:6;4809;4817;4825;4833;4886:3;4874:9;4865:7;4861:23;4857:33;4854:53;;;4903:1;4900;4893:12;4854:53;4926:28;4944:9;4926:28;:::i;:::-;4916:38;;4973:37;5006:2;4995:9;4991:18;4973:37;:::i;:::-;4963:47;;5029:37;5062:2;5051:9;5047:18;5029:37;:::i;:::-;5019:47;;5085:37;5118:2;5107:9;5103:18;5085:37;:::i;:::-;5075:47;;5141:38;5174:3;5163:9;5159:19;5141:38;:::i;:::-;5131:48;;4711:474;;;;;;;;:::o;5450:127::-;5511:10;5506:3;5502:20;5499:1;5492:31;5542:4;5539:1;5532:15;5566:4;5563:1;5556:15;5582:375;5670:1;5688:5;5702:249;5723:1;5713:8;5710:15;5702:249;;;5773:4;5768:3;5764:14;5758:4;5755:24;5752:50;;;5782:18;;:::i;:::-;5832:1;5822:8;5818:16;5815:49;;;5846:16;;;;5815:49;5929:1;5925:16;;;;;5885:15;;5702:249;;;5582:375;;;;;;:::o;5962:902::-;6011:5;6041:8;6031:80;;-1:-1:-1;6082:1:1;6096:5;;6031:80;6130:4;6120:76;;-1:-1:-1;6167:1:1;6181:5;;6120:76;6212:4;6230:1;6225:59;;;;6298:1;6293:174;;;;6205:262;;6225:59;6255:1;6246:10;;6269:5;;;6293:174;6330:3;6320:8;6317:17;6314:43;;;6337:18;;:::i;:::-;-1:-1:-1;;6393:1:1;6379:16;;6452:5;;6205:262;;6551:2;6541:8;6538:16;6532:3;6526:4;6523:13;6519:36;6513:2;6503:8;6500:16;6495:2;6489:4;6486:12;6482:35;6479:77;6476:203;;;-1:-1:-1;6588:19:1;;;6664:5;;6476:203;6711:42;-1:-1:-1;;6736:8:1;6730:4;6711:42;:::i;:::-;6789:6;6785:1;6781:6;6777:19;6768:7;6765:32;6762:58;;;6800:18;;:::i;:::-;6838:20;;5962:902;-1:-1:-1;;;5962:902:1:o;6869:140::-;6927:5;6956:47;6997:4;6987:8;6983:19;6977:4;6956:47;:::i;7014:168::-;7087:9;;;7118;;7135:15;;;7129:22;;7115:37;7105:71;;7156:18;;:::i;7187:348::-;7389:2;7371:21;;;7428:2;7408:18;;;7401:30;7467:26;7462:2;7447:18;;7440:54;7526:2;7511:18;;7187:348::o;8230:128::-;8297:9;;;8318:11;;;8315:37;;;8332:18;;:::i;9056:148::-;9144:4;9123:12;;;9137;;;9119:31;;9162:13;;9159:39;;;9178:18;;:::i;9556:217::-;9596:1;9622;9612:132;;9666:10;9661:3;9657:20;9654:1;9647:31;9701:4;9698:1;9691:15;9729:4;9726:1;9719:15;9612:132;-1:-1:-1;9758:9:1;;9556:217::o;9778:125::-;9843:9;;;9864:10;;;9861:36;;;9877:18;;:::i;10590:262::-;10707:16;10674:24;;;10700;;;10670:55;10745:34;;;;10798:24;;;10788:58;;10826:18;;:::i;:::-;10788:58;10590:262;;;;:::o;12209:251::-;12279:6;12332:2;12320:9;12311:7;12307:23;12303:32;12300:52;;;12348:1;12345;12338:12;12300:52;12380:9;12374:16;12399:31;12424:5;12399:31;:::i;14370:301::-;14499:3;14537:6;14531:13;14583:6;14576:4;14568:6;14564:17;14559:3;14553:37;14645:1;14609:16;;14634:13;;;-1:-1:-1;14609:16:1;14370:301;-1:-1:-1;14370:301:1:o;15629:456::-;15717:6;15725;15733;15786:2;15774:9;15765:7;15761:23;15757:32;15754:52;;;15802:1;15799;15792:12;15754:52;-1:-1:-1;;15847:16:1;;15953:2;15938:18;;15932:25;16049:2;16034:18;;;16028:25;15847:16;;15932:25;;-1:-1:-1;16028:25:1;15629:456;-1:-1:-1;15629:456:1:o;16090:230::-;16160:6;16213:2;16201:9;16192:7;16188:23;16184:32;16181:52;;;16229:1;16226;16219:12;16181:52;-1:-1:-1;16274:16:1;;16090:230;-1:-1:-1;16090:230:1:o;16457:127::-;16518:10;16513:3;16509:20;16506:1;16499:31;16549:4;16546:1;16539:15;16573:4;16570:1;16563:15;16589:959;16851:4;16899:3;16888:9;16884:19;16930:6;16919:9;16912:25;16973:6;16968:2;16957:9;16953:18;16946:34;17016:3;17011:2;17000:9;16996:18;16989:31;17040:6;17075;17069:13;17106:6;17098;17091:22;17144:3;17133:9;17129:19;17122:26;;17183:2;17175:6;17171:15;17157:29;;17204:1;17214:195;17228:6;17225:1;17222:13;17214:195;;;17293:13;;-1:-1:-1;;;;;17289:39:1;17277:52;;17358:2;17384:15;;;;17349:12;;;;17325:1;17243:9;17214:195;;;-1:-1:-1;;;;;;;17465:32:1;;;;17460:2;17445:18;;17438:60;-1:-1:-1;;17529:3:1;17514:19;17507:35;17426:3;16589:959;-1:-1:-1;;;16589:959:1:o

Swarm Source

ipfs://53ba50c2a3bc256f9d29a4b504c5bd77f898abf508393c2332fc3745b37daf1f
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.