ETH Price: $3,454.90 (-1.89%)
Gas: 4 Gwei

Token

BSM TOKEN (BSM)
 

Overview

Max Total Supply

100,000,000 BSM

Holders

338

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,509.491277644711172954 BSM

Value
$0.00
0xF2C34Dc3f48D87717A32504C8c20bb53cCb20743
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:
BSM

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-03
*/

// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.10;

// bbbbbbbb                                                                                                                                                        
// b::::::b                                                                   tttt                           kkkkkkkk                                              
// b::::::b                                                                ttt:::t                           k::::::k                                              
// b::::::b                                                                t:::::t                           k::::::k                                              
//  b:::::b                                                                t:::::t                           k::::::k                                              
//  b:::::bbbbbbbbb        ssssssssss      mmmmmmm    mmmmmmm        ttttttt:::::ttttttt       ooooooooooo    k:::::k    kkkkkkk eeeeeeeeeeee    nnnn  nnnnnnnn    
//  b::::::::::::::bb    ss::::::::::s   mm:::::::m  m:::::::mm      t:::::::::::::::::t     oo:::::::::::oo  k:::::k   k:::::kee::::::::::::ee  n:::nn::::::::nn  
//  b::::::::::::::::b ss:::::::::::::s m::::::::::mm::::::::::m     t:::::::::::::::::t    o:::::::::::::::o k:::::k  k:::::ke::::::eeeee:::::een::::::::::::::nn 
//  b:::::bbbbb:::::::bs::::::ssss:::::sm::::::::::::::::::::::m     tttttt:::::::tttttt    o:::::ooooo:::::o k:::::k k:::::ke::::::e     e:::::enn:::::::::::::::n
//  b:::::b    b::::::b s:::::s  ssssss m:::::mmm::::::mmm:::::m           t:::::t          o::::o     o::::o k::::::k:::::k e:::::::eeeee::::::e  n:::::nnnn:::::n
//  b:::::b     b:::::b   s::::::s      m::::m   m::::m   m::::m           t:::::t          o::::o     o::::o k:::::::::::k  e:::::::::::::::::e   n::::n    n::::n
//  b:::::b     b:::::b      s::::::s   m::::m   m::::m   m::::m           t:::::t          o::::o     o::::o k:::::::::::k  e::::::eeeeeeeeeee    n::::n    n::::n
//  b:::::b     b:::::bssssss   s:::::s m::::m   m::::m   m::::m           t:::::t    tttttto::::o     o::::o k::::::k:::::k e:::::::e             n::::n    n::::n
//  b:::::bbbbbb::::::bs:::::ssss::::::sm::::m   m::::m   m::::m           t::::::tttt:::::to:::::ooooo:::::ok::::::k k:::::ke::::::::e            n::::n    n::::n
//  b::::::::::::::::b s::::::::::::::s m::::m   m::::m   m::::m           tt::::::::::::::to:::::::::::::::ok::::::k  k:::::ke::::::::eeeeeeee    n::::n    n::::n
//  b:::::::::::::::b   s:::::::::::ss  m::::m   m::::m   m::::m             tt:::::::::::tt oo:::::::::::oo k::::::k   k:::::kee:::::::::::::e    n::::n    n::::n
//  bbbbbbbbbbbbbbbb     sssssssssss    mmmmmm   mmmmmm   mmmmmm               ttttttttttt     ooooooooooo   kkkkkkkk    kkkkkkk eeeeeeeeeeeeee    nnnnnn    nnnnnn
                                                                                                                                                                                                                                                                                                                                                                     

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IRouter {
    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 BSM is Context, IERC20, Ownable {

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isBot;

    address[] private _excluded;
    
    bool public swapEnabled = false;
    bool private swapping;

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 100e6 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    
    uint256 public swapTokensAtAmount = 5_000 * 10**_decimals;
    uint256 public maxTxAmount = 1_000_000 * 10**_decimals;
    
    // Anti Dump //
    mapping (address => uint256) public _lastTrade;
    bool public coolDownEnabled = false;
    uint256 public coolDownTime = 5 seconds;

    address public treasuryAddress = 0x3F1930d77eeC56F8b52dB6197a27156c36fd68E2;
    address public marketingAddress = 0x4DA2226Ac25155150932547abd3B5C788121c2fC;
    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    address public lpRecipient = 0xC59F51F358c0a56Af990C938933a3E16a0f444C9;


    string private constant _name = "BSM TOKEN";
    string private constant _symbol = "BSM";

    bool public FeeToETH = true;
    bool public swapLiquifyEnabled = true;

    struct Taxes {
      uint256 rfi;
      uint256 treasury;
      uint256 marketing;
      uint256 burn;
      uint256 liquidity;
    }

    Taxes public taxes = Taxes(10,0,20,10,10);

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 treasury;
        uint256 marketing;
        uint256 burn;
        uint256 liquidity;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTreasury;
      uint256 rMarketing;
      uint256 rBurn;
      uint256 rLiquidity;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTreasury;
      uint256 tMarketing;
      uint256 tBurn;
      uint256 tLiquidity;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);

    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }
    
    constructor (address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        excludeFromReward(pair);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[treasuryAddress]=true;
        _isExcludedFromFee[burnAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[lpRecipient] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }


    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setTaxes(uint256 _rfi, uint256 _treasury, uint256 _marketing, uint256 _burn, uint256 _liquidity) public onlyOwner {
        taxes.rfi = _rfi;
        taxes.treasury = _treasury;
        taxes.marketing = _marketing;
        taxes.burn = _burn;
        taxes.liquidity = _liquidity;
        emit FeesChanged();
    }


    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totFeesPaid.rfi +=tRfi;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity +=tLiquidity;
        if(_isExcluded[address(this)]) _tOwned[address(this)]+=tLiquidity;
        _rOwned[address(this)] +=rLiquidity;
    }

    function _takeTreasury(uint256 rTreasury, uint256 tTreasury) private {
        totFeesPaid.treasury +=tTreasury;
        if(_isExcluded[address(this)]) _tOwned[address(this)]+=tTreasury;
        _rOwned[address(this)] +=rTreasury;
    }
    
    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private{
        totFeesPaid.marketing +=tMarketing;
        if(_isExcluded[address(this)]) _tOwned[address(this)]+=tMarketing;
        _rOwned[address(this)] +=rMarketing;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private{
        totFeesPaid.burn +=tBurn;
        if(_isExcluded[marketingAddress])_tOwned[burnAddress]+=tBurn;
        _rOwned[burnAddress] +=rBurn;
    }

    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTreasury,to_return.rMarketing, to_return.rBurn, to_return.rLiquidity) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        
        s.tRfi = tAmount*taxes.rfi/1000;
        s.tTreasury = tAmount*taxes.treasury/1000;
        s.tMarketing = tAmount*taxes.marketing/1000;
        s.tBurn = tAmount*taxes.burn/1000;
        s.tLiquidity = tAmount*taxes.liquidity/1000;
        s.tTransferAmount = tAmount-s.tRfi-s.tTreasury-s.tLiquidity-s.tMarketing-s.tBurn;
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rTreasury,uint256 rMarketing,uint256 rBurn,uint256 rLiquidity) {
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0,0,0);
        }

        rRfi = s.tRfi*currentRate;
        rTreasury = s.tTreasury*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rBurn = s.tBurn*currentRate;
        rTransferAmount =  rAmount-rRfi-rTreasury-rLiquidity-rMarketing-rBurn;
        return (rAmount, rTransferAmount, rRfi,rTreasury,rMarketing,rBurn,rLiquidity);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }


    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        require(!_isBot[from] && !_isBot[to], "You are a bot");
        

        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping){
            require(amount <= maxTxAmount ,"Amount is exceeding maxTxAmount");

            if(from != pair && coolDownEnabled){
                uint256 timePassed = block.timestamp - _lastTrade[from];
                require(timePassed > coolDownTime, "You must wait coolDownTime");
                _lastTrade[from] = block.timestamp;
            }
            if(to != pair && coolDownEnabled){
                uint256 timePassed2 = block.timestamp - _lastTrade[to];
                require(timePassed2 > coolDownTime, "You must wait coolDownTime");
                _lastTrade[to] = block.timestamp;
            }
        }
        
        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        valuesFromGetValues memory s = _getValues(amount, takeFee);

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= swapTokensAtAmount;
        uint256 FeeAmount = s.tMarketing + s.tTreasury;
        uint256 LiquiditySwapAmount = swapTokensAtAmount - FeeAmount;

        if(!swapping && swapEnabled && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            
            if(canSwap && swapLiquifyEnabled){
               swapAndLiquify(LiquiditySwapAmount);
            }

            if(contractBalance >= FeeAmount && FeeToETH){
              swapTokensForETH(FeeAmount, marketingAddress);
            }
        }
        
        _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to]));
        
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
        }
        if(s.rTreasury > 0 || s.tTreasury > 0){
            _takeTreasury(s.rTreasury, s.tTreasury);
            emit Transfer(sender, address(this), s.tTreasury);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0){
            _takeMarketing(s.rMarketing, s.tMarketing);
            emit Transfer(sender, address(this), s.tMarketing);
        }
        if(s.rBurn > 0 || s.tBurn > 0){
            _takeBurn(s.rBurn, s.tBurn);
            emit Transfer(sender, burnAddress, s.tBurn);
        }
        
        emit Transfer(sender, recipient, s.tTransferAmount);
        emit Transfer(sender, address(this), s.tLiquidity);
        
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
       // Split the contract balance into halves
        uint256 tokensToAddLiquidityWith = tokens / 2;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap, address(this));
        uint256 ETHToAddLiquidityWith = address(this).balance - initialBalance;

        if(ETHToAddLiquidityWith > 0){
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }

    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpRecipient,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount, address payaddress) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            payaddress,
            block.timestamp
        );
    }

    function updateTreasuryWallet(address newWallet) external onlyOwner{
        require(treasuryAddress != newWallet ,'Wallet already set');
        treasuryAddress = newWallet;
        _isExcludedFromFee[treasuryAddress];
    }

    function updateBurnWallet(address newWallet) external onlyOwner{
        require(burnAddress != newWallet ,'Wallet already set');
        burnAddress = newWallet;
        _isExcludedFromFee[burnAddress];
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        require(marketingAddress != newWallet ,'Wallet already set');
        marketingAddress = newWallet;
        _isExcludedFromFee[marketingAddress];
    }

    function updateLPRecipient(address newWallet) external onlyOwner{
        require(lpRecipient != newWallet ,'Wallet already set');
        lpRecipient = newWallet;
        _isExcludedFromFee[lpRecipient];
    }

    function updateMaxTxAmt(uint256 amount) external onlyOwner{
        maxTxAmount = amount * 10**_decimals;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }

    function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOwner{
        coolDownEnabled = _enabled;
        coolDownTime = _timeInSeconds * 1 seconds;
    }

    function updateFeeToETH(bool _enabled) external onlyOwner{
       FeeToETH  = _enabled;
    }

    function updateSwapLiquifyEnabled(bool _enabled) external onlyOwner {
        swapLiquifyEnabled = _enabled;
    }

    function setAntibot(address account, bool state) external onlyOwner{
        require(_isBot[account] != state, 'Value already set');
        _isBot[account] = state;
    }
    
    function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isBot[accounts[i]] = state;
        }
    }
    
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
    
    function isBot(address account) public view returns(bool){
        return _isBot[account];
    }
    
    function airdropTokens(address[] memory recipients, uint256[] memory amounts) external onlyOwner{
         require(recipients.length == amounts.length,"Invalid size");
         address sender = msg.sender;
         for(uint256 i; i<recipients.length; i++){
            address recipient = recipients[i];
            uint256 rAmount = amounts[i]*_getRate();
            _rOwned[sender] = _rOwned[sender]- rAmount;
            _rOwned[recipient] = _rOwned[recipient] + rAmount;
            emit Transfer(sender, recipient, amounts[i]);
         }
    }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(owner()).transfer(weiAmount);
    }
    
    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    // Owner cannot transfer out catecoin from this smart contract
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"FeeToETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateFeeToETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLPRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805460ff191690556200001c6012600a620009da565b6200002c906305f5e100620009eb565b600a8190556200003f9060001962000a23565b6200004d9060001962000a3a565b600b556200005e6012600a620009da565b6200006c90611388620009eb565b600c556200007d6012600a620009da565b6200008c90620f4240620009eb565b600d55600f805460ff191690556005601055601180546001600160a01b0319908116733f1930d77eec56f8b52db6197a27156c36fd68e217909155601280548216734da2226ac25155150932547abd3b5c788121c2fc1790556013805490911661dead17905560148054750101c59f51f358c0a56af990c938933a3e16a0f444c96001600160b01b03199091161781556040805160a081018252600a808252600060208301819052928201849052606082018190526080909101819052601581905560169190915560179190915560188190556019553480156200016f57600080fd5b506040516200410538038062004105833981016040819052620001929162000a54565b6200019d336200048c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000a54565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000a54565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000a54565b600880546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600980549183166001600160a01b0319909216821790559091506200033f90620004dc565b600b5460016000620003596000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003936200066a60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004909352818320805485166001908117909155601154821684528284208054861682179055601354821684528284208054861682179055601254821684528284208054861682179055601454909116835291208054909216179055620004336000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200047b91815260200190565b60405180910390a350505062000ac8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200053c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620005a75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000533565b6001600160a01b0381166000908152600160205260409020541562000604576001600160a01b038116600090815260016020526040902054620005ea9062000679565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031690565b6000600b54821115620006e25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000533565b6000620006ee62000703565b9050620006fc818462000a7f565b9392505050565b600080806200071162000729565b909250905062000722818362000a7f565b9250505090565b600b54600a546000918291825b60075481101562000891578260016000600784815481106200075c576200075c62000a96565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007cb5750816002600060078481548110620007a457620007a462000a96565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620007e257600b54600a54945094505050509091565b6001600060078381548110620007fc57620007fc62000a96565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200082d908462000a3a565b9250600260006007838154811062000849576200084962000a96565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200087a908362000a3a565b915080620008888162000aac565b91505062000736565b50600a54600b54620008a4919062000a7f565b821015620008bc57600b54600a549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200091c578160001904821115620009005762000900620008c5565b808516156200090e57918102915b93841c9390800290620008e0565b509250929050565b6000826200093557506001620009d4565b816200094457506000620009d4565b81600181146200095d5760028114620009685762000988565b6001915050620009d4565b60ff8411156200097c576200097c620008c5565b50506001821b620009d4565b5060208310610133831016604e8410600b8410161715620009ad575081810a620009d4565b620009b98383620008db565b8060001904821115620009d057620009d0620008c5565b0290505b92915050565b6000620006fc60ff84168362000924565b600081600019048311821515161562000a085762000a08620008c5565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000a355762000a3562000a0d565b500690565b60008282101562000a4f5762000a4f620008c5565b500390565b60006020828403121562000a6757600080fd5b81516001600160a01b0381168114620006fc57600080fd5b60008262000a915762000a9162000a0d565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000ac15762000ac1620008c5565b5060010190565b61362d8062000ad86000396000f3fe60806040526004361061036f5760003560e01c806388f82020116101c6578063aacebbe3116100f7578063e116554511610095578063ee36e3591161006f578063ee36e35914610ad4578063f2fde38b14610aee578063f887ea4014610b0e578063fabc403514610b3457600080fd5b8063e116554514610a7e578063e2f4560514610a9e578063ea2f0b3714610ab457600080fd5b8063c5f956af116100d1578063c5f956af146109e2578063d257b34f14610a02578063d2ce0db214610a22578063dd62ed3e14610a3857600080fd5b8063aacebbe314610982578063b31470a4146109a2578063b3839389146109c257600080fd5b80639e252f0011610164578063a5ece9411161013e578063a5ece941146108f5578063a87859f614610915578063a8aa1b3114610942578063a9059cbb1461096257600080fd5b80639e252f0014610895578063a457c2d7146108b5578063a59c940c146108d557600080fd5b80638da5cb5b116101a05780638da5cb5b14610804578063924de9b71461082257806395d89b41146108425780639ba5e4d51461086e57600080fd5b806388f82020146107955780638c0ae3df146107ce5780638c0b5e22146107ee57600080fd5b8063437823ec116102a0578063706f69371161023e578063715018a611610218578063715018a6146106f0578063728f8eea146107055780637911495014610754578063809d458d1461077557600080fd5b8063706f69371461069057806370a08231146106b057806370d5ae05146106d057600080fd5b806352390c021161027a57806352390c02146105fd5780635342acb41461061d5780635fcefa42146106565780636ddd17131461067657600080fd5b8063437823ec14610585578063452e68dd146105a55780634549b039146105dd57600080fd5b80632d8381191161030d5780633685d419116102e75780633685d419146104ec578063395093511461050c5780633bbac5791461052c57806340b28c2f1461056557600080fd5b80632d838119146104905780632e092fe8146104b0578063313ce567146104d057600080fd5b806318160ddd1161034957806318160ddd1461041157806323b872dd146104305780632792371e1461045057806328efa5fa1461047057600080fd5b806306fdde031461037b578063095ea7b3146103bf5780630d65df9b146103ef57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b506040805180820190915260098152682129a6902a27a5a2a760b91b60208201525b6040516103b69190612ee1565b60405180910390f35b3480156103cb57600080fd5b506103df6103da366004612f4b565b610b55565b60405190151581526020016103b6565b3480156103fb57600080fd5b5061040f61040a366004612f77565b610b6c565b005b34801561041d57600080fd5b50600a545b6040519081526020016103b6565b34801561043c57600080fd5b506103df61044b366004612f77565b610c18565b34801561045c57600080fd5b5061040f61046b366004612fc6565b610cc9565b34801561047c57600080fd5b5061040f61048b366004612fe3565b610d11565b34801561049c57600080fd5b506104226104ab366004613000565b610d91565b3480156104bc57600080fd5b5061040f6104cb366004613000565b610e15565b3480156104dc57600080fd5b50604051601281526020016103b6565b3480156104f857600080fd5b5061040f610507366004612fe3565b610e5b565b34801561051857600080fd5b506103df610527366004612f4b565b611011565b34801561053857600080fd5b506103df610547366004612fe3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057157600080fd5b5061040f610580366004613019565b611048565b34801561059157600080fd5b5061040f6105a0366004612fe3565b6110ac565b3480156105b157600080fd5b506014546105c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b3480156105e957600080fd5b506104226105f8366004613052565b6110fa565b34801561060957600080fd5b5061040f610618366004612fe3565b611184565b34801561062957600080fd5b506103df610638366004612fe3565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561066257600080fd5b5061040f610671366004613077565b6112d7565b34801561068257600080fd5b506008546103df9060ff1681565b34801561069c57600080fd5b5061040f6106ab366004613191565b61134a565b3480156106bc57600080fd5b506104226106cb366004612fe3565b6114dd565b3480156106dc57600080fd5b506013546105c5906001600160a01b031681565b3480156106fc57600080fd5b5061040f61153c565b34801561071157600080fd5b5060155460165460175460185460195461072c949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103b6565b34801561076057600080fd5b506014546103df90600160a01b900460ff1681565b34801561078157600080fd5b5061040f610790366004612fe3565b611572565b3480156107a157600080fd5b506103df6107b0366004612fe3565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107da57600080fd5b5061040f6107e936600461324c565b6115f2565b3480156107fa57600080fd5b50610422600d5481565b34801561081057600080fd5b506000546001600160a01b03166105c5565b34801561082e57600080fd5b5061040f61083d366004612fc6565b61163c565b34801561084e57600080fd5b5060408051808201909152600381526242534d60e81b60208201526103a9565b34801561087a57600080fd5b50601a54601b54601c54601d54601e5461072c949392919085565b3480156108a157600080fd5b5061040f6108b0366004613000565b611679565b3480156108c157600080fd5b506103df6108d0366004612f4b565b61172c565b3480156108e157600080fd5b5061040f6108f0366004612fc6565b6117c7565b34801561090157600080fd5b506012546105c5906001600160a01b031681565b34801561092157600080fd5b50610422610930366004612fe3565b600e6020526000908152604090205481565b34801561094e57600080fd5b506009546105c5906001600160a01b031681565b34801561096e57600080fd5b506103df61097d366004612f4b565b61180f565b34801561098e57600080fd5b5061040f61099d366004612fe3565b61181c565b3480156109ae57600080fd5b5061040f6109bd36600461326a565b61189c565b3480156109ce57600080fd5b5061040f6109dd366004612fe3565b611932565b3480156109ee57600080fd5b506011546105c5906001600160a01b031681565b348015610a0e57600080fd5b5061040f610a1d366004613000565b6119b2565b348015610a2e57600080fd5b5061042260105481565b348015610a4457600080fd5b50610422610a53366004613019565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a8a57600080fd5b5061040f610a993660046132b1565b6119f8565b348015610aaa57600080fd5b50610422600c5481565b348015610ac057600080fd5b5061040f610acf366004612fe3565b611ab1565b348015610ae057600080fd5b50600f546103df9060ff1681565b348015610afa57600080fd5b5061040f610b09366004612fe3565b611afc565b348015610b1a57600080fd5b506008546105c5906201000090046001600160a01b031681565b348015610b4057600080fd5b506014546103df90600160a81b900460ff1681565b6000610b62338484611b97565b5060015b92915050565b6000546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610b96906132df565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c129190613314565b50505050565b6000610c25848484611cbb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610caa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b96565b610cbe8533610cb98685613347565b611b97565b506001949350505050565b6000546001600160a01b03163314610cf35760405162461bcd60e51b8152600401610b96906132df565b60148054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610b96906132df565b6014546001600160a01b03808316911603610d685760405162461bcd60e51b8152600401610b969061335e565b601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000600b54821115610df85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b96565b6000610e026122ba565b9050610e0e818461338a565b9392505050565b6000546001600160a01b03163314610e3f5760405162461bcd60e51b8152600401610b96906132df565b610e4b6012600a613490565b610e55908261349f565b600d5550565b6000546001600160a01b03163314610e855760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03811660009081526005602052604090205460ff16610eed5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b96565b60005b60075481101561100d57816001600160a01b031660078281548110610f1757610f176134be565b6000918252602090912001546001600160a01b031603610ffb5760078054610f4190600190613347565b81548110610f5157610f516134be565b600091825260209091200154600780546001600160a01b039092169183908110610f7d57610f7d6134be565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610fd557610fd56134d4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611005816134ea565b915050610ef0565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b62918590610cb9908690613503565b6000546001600160a01b031633146110725760405162461bcd60e51b8152600401610b96906132df565b6008805462010000600160b01b031916620100006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a5483111561114e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b96565b8161116a5760006111608460016122dd565b519150610b669050565b60006111778460016122dd565b602001519150610b669050565b6000546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03811660009081526005602052604090205460ff16156112175760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b96565b6001600160a01b03811660009081526001602052604090205415611271576001600160a01b03811660009081526001602052604090205461125790610d91565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610b96906132df565b601585905560168490556017839055601882905560198190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610b96906132df565b80518251146113b45760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610b96565b3360005b8351811015610c125760008482815181106113d5576113d56134be565b6020026020010151905060006113e96122ba565b8584815181106113fb576113fb6134be565b602002602001015161140d919061349f565b6001600160a01b038516600090815260016020526040902054909150611434908290613347565b6001600160a01b038086166000908152600160205260408082209390935590841681522054611464908290613503565b6001600160a01b038084166000818152600160205260409020929092558651908616906000805160206135d8833981519152908890879081106114a9576114a96134be565b60200260200101516040516114c091815260200190565b60405180910390a3505080806114d5906134ea565b9150506113b8565b6001600160a01b03811660009081526005602052604081205460ff161561151a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b6690610d91565b6000546001600160a01b031633146115665760405162461bcd60e51b8152600401610b96906132df565b611570600061232a565b565b6000546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610b96906132df565b6011546001600160a01b038083169116036115c95760405162461bcd60e51b8152600401610b969061335e565b601180546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610b96906132df565b600f805460ff191683151517905561163581600161349f565b6010555050565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610b96906132df565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146116a35760405162461bcd60e51b8152600401610b96906132df565b804710156116f35760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b96565b600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561100d573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b96565b6117bd3385610cb98685613347565b5060019392505050565b6000546001600160a01b031633146117f15760405162461bcd60e51b8152600401610b96906132df565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000610b62338484611cbb565b6000546001600160a01b031633146118465760405162461bcd60e51b8152600401610b96906132df565b6012546001600160a01b038083169116036118735760405162461bcd60e51b8152600401610b969061335e565b601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146118c65760405162461bcd60e51b8152600401610b96906132df565b60005b825181101561192d5781600660008584815181106118e9576118e96134be565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611925816134ea565b9150506118c9565b505050565b6000546001600160a01b0316331461195c5760405162461bcd60e51b8152600401610b96906132df565b6013546001600160a01b038083169116036119895760405162461bcd60e51b8152600401610b969061335e565b601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146119dc5760405162461bcd60e51b8152600401610b96906132df565b6119e86012600a613490565b6119f2908261349f565b600c5550565b6000546001600160a01b03163314611a225760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611a865760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610b96565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611adb5760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b265760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b038116611b8b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b96565b611b948161232a565b50565b6001600160a01b038316611bf95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b96565b6001600160a01b038216611c5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b96565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b96565b6001600160a01b038216611d815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b96565b60008111611de35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b96565b611dec836114dd565b811115611e555760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b96565b6001600160a01b03831660009081526006602052604090205460ff16158015611e9757506001600160a01b03821660009081526006602052604090205460ff16155b611ed35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b96565b6001600160a01b03831660009081526004602052604090205460ff16158015611f1557506001600160a01b03821660009081526004602052604090205460ff16155b8015611f295750600854610100900460ff16155b156120f057600d54811115611f805760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610b96565b6009546001600160a01b03848116911614801590611fa05750600f5460ff165b15612038576001600160a01b0383166000908152600e6020526040812054611fc89042613347565b9050601054811161201b5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b96565b506001600160a01b0383166000908152600e602052604090204290555b6009546001600160a01b038381169116148015906120585750600f5460ff165b156120f0576001600160a01b0382166000908152600e60205260408120546120809042613347565b905060105481116120d35760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b96565b506001600160a01b0382166000908152600e602052604090204290555b6001600160a01b03831660009081526004602052604081205460ff168061212f57506001600160a01b03831660009081526004602052604090205460ff165b159050600061213e83836122dd565b9050600061214b306114dd565b90506000600c548210159050600083610120015184610140015161216f9190613503565b9050600081600c546121819190613347565b600854909150610100900460ff1615801561219e575060085460ff165b80156121b857506009546001600160a01b038a8116911614155b80156121dd57506001600160a01b03891660009081526004602052604090205460ff16155b801561220257506001600160a01b03881660009081526004602052604090205460ff16155b156122605782801561221d5750601454600160a81b900460ff165b1561222b5761222b8161237a565b8184101580156122445750601454600160a01b900460ff165b15612260576012546122609083906001600160a01b03166123e1565b6001600160a01b0389166000908152600460205260409020546122af908a908a908a9060ff16806122a957506001600160a01b038c1660009081526004602052604090205460ff165b15612561565b505050505050505050565b60008060006122c76128db565b90925090506122d6818361338a565b9250505090565b6122e5612e79565b6122ef8383612a5e565b90506123048184846122ff6122ba565b612b77565b60c088015260a08701526080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff001916610100179055600061239660028361338a565b905060006123a48284613347565b9050476123b182306123e1565b60006123bd8247613347565b905080156123cf576123cf8482612c4d565b50506008805461ff0019169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612416576124166134be565b60200260200101906001600160a01b031690816001600160a01b031681525050600860029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ad919061351b565b816001815181106124c0576124c06134be565b6001600160a01b0392831660209182029290920101526008546124ec9130916201000090041685611b97565b60085460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac9479061252a908690600090869088904290600401613538565b600060405180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b50505050505050565b600061256d83836122dd565b6001600160a01b03861660009081526005602052604090205490915060ff16156125cf576001600160a01b0385166000908152600260205260409020546125b5908490613347565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156126325760e08101516001600160a01b0385166000908152600260205260409020546126189190613503565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546126579190613347565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461268e9190613503565b6001600160a01b03851660009081526001602052604090819020919091558101511515806126c157506000816101000151115b156126d9576126d98160400151826101000151612d0d565b60008160c0015111806126f157506000816101800151115b15612709576127098160c00151826101800151612d42565b60008160600151118061272157506000816101200151115b1561277a576127398160600151826101200151612db8565b306001600160a01b0316856001600160a01b03166000805160206135d883398151915283610120015160405161277191815260200190565b60405180910390a35b60008160800151118061279257506000816101400151115b156127eb576127aa8160800151826101400151612dcd565b306001600160a01b0316856001600160a01b03166000805160206135d88339815191528361014001516040516127e291815260200190565b60405180910390a35b60008160a00151118061280357506000816101600151115b156128555761281b8160a00151826101600151612de2565b6013546101608201516040519081526001600160a01b03918216918716906000805160206135d88339815191529060200160405180910390a35b836001600160a01b0316856001600160a01b03166000805160206135d88339815191528360e0015160405161288c91815260200190565b60405180910390a3306001600160a01b0316856001600160a01b03166000805160206135d88339815191528361018001516040516128cc91815260200190565b60405180910390a35050505050565b600b54600a546000918291825b600754811015612a2d5782600160006007848154811061290a5761290a6134be565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612975575081600260006007848154811061294e5761294e6134be565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561298b57600b54600a54945094505050509091565b60016000600783815481106129a2576129a26134be565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129d19084613347565b925060026000600783815481106129ea576129ea6134be565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a199083613347565b915080612a25816134ea565b9150506128e8565b50600a54600b54612a3e919061338a565b821015612a5557600b54600a549350935050509091565b90939092509050565b612a66612e79565b81612a775760e08101839052610b66565b6015546103e890612a88908561349f565b612a92919061338a565b6101008201526016546103e890612aa9908561349f565b612ab3919061338a565b6101208201526017546103e890612aca908561349f565b612ad4919061338a565b6101408201526018546103e890612aeb908561349f565b612af5919061338a565b6101608201526019546103e890612b0c908561349f565b612b16919061338a565b610180820181905261016082015161014083015161012084015161010085015192939192612b449088613347565b612b4e9190613347565b612b589190613347565b612b629190613347565b612b6c9190613347565b60e082015292915050565b6000808080808080612b89888b61349f565b965088612ba757508594506000935083925082915081905080612c3f565b878b6101000151612bb8919061349f565b9450878b6101200151612bcb919061349f565b9350878b6101800151612bde919061349f565b9050878b6101400151612bf1919061349f565b9250878b6101600151612c04919061349f565b915081838286612c14898c613347565b612c1e9190613347565b612c289190613347565b612c329190613347565b612c3c9190613347565b95505b949950949992975094509450565b600854612c6b9030906201000090046001600160a01b031684611b97565b60085460145460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015262010000909204169063f305d71990839060c40160606040518083038185885af1158015612ce1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0691906135a9565b5050505050565b81600b6000828254612d1f9190613347565b9091555050601a8054829190600090612d39908490613503565b90915550505050565b80601a6004016000828254612d579190613503565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613503565b90915550505b3060009081526001602052604081208054849290612d39908490613503565b80601a6001016000828254612d579190613503565b80601a6002016000828254612d579190613503565b80601a6003016000828254612df79190613503565b90915550506012546001600160a01b031660009081526005602052604090205460ff1615612e4f576013546001600160a01b031660009081526002602052604081208054839290612e49908490613503565b90915550505b6013546001600160a01b031660009081526001602052604081208054849290612d39908490613503565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b81811015612f0e57858101830151858201604001528201612ef2565b81811115612f20576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b9457600080fd5b60008060408385031215612f5e57600080fd5b8235612f6981612f36565b946020939093013593505050565b600080600060608486031215612f8c57600080fd5b8335612f9781612f36565b92506020840135612fa781612f36565b929592945050506040919091013590565b8015158114611b9457600080fd5b600060208284031215612fd857600080fd5b8135610e0e81612fb8565b600060208284031215612ff557600080fd5b8135610e0e81612f36565b60006020828403121561301257600080fd5b5035919050565b6000806040838503121561302c57600080fd5b823561303781612f36565b9150602083013561304781612f36565b809150509250929050565b6000806040838503121561306557600080fd5b82359150602083013561304781612fb8565b600080600080600060a0868803121561308f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130f1576130f16130b2565b604052919050565b600067ffffffffffffffff821115613113576131136130b2565b5060051b60200190565b600082601f83011261312e57600080fd5b8135602061314361313e836130f9565b6130c8565b82815260059290921b8401810191818101908684111561316257600080fd5b8286015b8481101561318657803561317981612f36565b8352918301918301613166565b509695505050505050565b600080604083850312156131a457600080fd5b823567ffffffffffffffff808211156131bc57600080fd5b6131c88683870161311d565b93506020915081850135818111156131df57600080fd5b85019050601f810186136131f257600080fd5b803561320061313e826130f9565b81815260059190911b8201830190838101908883111561321f57600080fd5b928401925b8284101561323d57833582529284019290840190613224565b80955050505050509250929050565b6000806040838503121561325f57600080fd5b8235612f6981612fb8565b6000806040838503121561327d57600080fd5b823567ffffffffffffffff81111561329457600080fd5b6132a08582860161311d565b925050602083013561304781612fb8565b600080604083850312156132c457600080fd5b82356132cf81612f36565b9150602083013561304781612fb8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561332657600080fd5b8151610e0e81612fb8565b634e487b7160e01b600052601160045260246000fd5b60008282101561335957613359613331565b500390565b60208082526012908201527115d85b1b195d08185b1c9958591e481cd95d60721b604082015260600190565b6000826133a757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156133e75781600019048211156133cd576133cd613331565b808516156133da57918102915b93841c93908002906133b1565b509250929050565b6000826133fe57506001610b66565b8161340b57506000610b66565b8160018114613421576002811461342b57613447565b6001915050610b66565b60ff84111561343c5761343c613331565b50506001821b610b66565b5060208310610133831016604e8410600b841016171561346a575081810a610b66565b61347483836133ac565b806000190482111561348857613488613331565b029392505050565b6000610e0e60ff8416836133ef565b60008160001904831182151516156134b9576134b9613331565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016134fc576134fc613331565b5060010190565b6000821982111561351657613516613331565b500190565b60006020828403121561352d57600080fd5b8151610e0e81612f36565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135885784516001600160a01b031683529383019391830191600101613563565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135be57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207f9036b7f6b81f1e4de9bd4d516929f0719971616d820a3cc05e64f98a22019664736f6c634300080e00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806388f82020116101c6578063aacebbe3116100f7578063e116554511610095578063ee36e3591161006f578063ee36e35914610ad4578063f2fde38b14610aee578063f887ea4014610b0e578063fabc403514610b3457600080fd5b8063e116554514610a7e578063e2f4560514610a9e578063ea2f0b3714610ab457600080fd5b8063c5f956af116100d1578063c5f956af146109e2578063d257b34f14610a02578063d2ce0db214610a22578063dd62ed3e14610a3857600080fd5b8063aacebbe314610982578063b31470a4146109a2578063b3839389146109c257600080fd5b80639e252f0011610164578063a5ece9411161013e578063a5ece941146108f5578063a87859f614610915578063a8aa1b3114610942578063a9059cbb1461096257600080fd5b80639e252f0014610895578063a457c2d7146108b5578063a59c940c146108d557600080fd5b80638da5cb5b116101a05780638da5cb5b14610804578063924de9b71461082257806395d89b41146108425780639ba5e4d51461086e57600080fd5b806388f82020146107955780638c0ae3df146107ce5780638c0b5e22146107ee57600080fd5b8063437823ec116102a0578063706f69371161023e578063715018a611610218578063715018a6146106f0578063728f8eea146107055780637911495014610754578063809d458d1461077557600080fd5b8063706f69371461069057806370a08231146106b057806370d5ae05146106d057600080fd5b806352390c021161027a57806352390c02146105fd5780635342acb41461061d5780635fcefa42146106565780636ddd17131461067657600080fd5b8063437823ec14610585578063452e68dd146105a55780634549b039146105dd57600080fd5b80632d8381191161030d5780633685d419116102e75780633685d419146104ec578063395093511461050c5780633bbac5791461052c57806340b28c2f1461056557600080fd5b80632d838119146104905780632e092fe8146104b0578063313ce567146104d057600080fd5b806318160ddd1161034957806318160ddd1461041157806323b872dd146104305780632792371e1461045057806328efa5fa1461047057600080fd5b806306fdde031461037b578063095ea7b3146103bf5780630d65df9b146103ef57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b506040805180820190915260098152682129a6902a27a5a2a760b91b60208201525b6040516103b69190612ee1565b60405180910390f35b3480156103cb57600080fd5b506103df6103da366004612f4b565b610b55565b60405190151581526020016103b6565b3480156103fb57600080fd5b5061040f61040a366004612f77565b610b6c565b005b34801561041d57600080fd5b50600a545b6040519081526020016103b6565b34801561043c57600080fd5b506103df61044b366004612f77565b610c18565b34801561045c57600080fd5b5061040f61046b366004612fc6565b610cc9565b34801561047c57600080fd5b5061040f61048b366004612fe3565b610d11565b34801561049c57600080fd5b506104226104ab366004613000565b610d91565b3480156104bc57600080fd5b5061040f6104cb366004613000565b610e15565b3480156104dc57600080fd5b50604051601281526020016103b6565b3480156104f857600080fd5b5061040f610507366004612fe3565b610e5b565b34801561051857600080fd5b506103df610527366004612f4b565b611011565b34801561053857600080fd5b506103df610547366004612fe3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561057157600080fd5b5061040f610580366004613019565b611048565b34801561059157600080fd5b5061040f6105a0366004612fe3565b6110ac565b3480156105b157600080fd5b506014546105c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b3480156105e957600080fd5b506104226105f8366004613052565b6110fa565b34801561060957600080fd5b5061040f610618366004612fe3565b611184565b34801561062957600080fd5b506103df610638366004612fe3565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561066257600080fd5b5061040f610671366004613077565b6112d7565b34801561068257600080fd5b506008546103df9060ff1681565b34801561069c57600080fd5b5061040f6106ab366004613191565b61134a565b3480156106bc57600080fd5b506104226106cb366004612fe3565b6114dd565b3480156106dc57600080fd5b506013546105c5906001600160a01b031681565b3480156106fc57600080fd5b5061040f61153c565b34801561071157600080fd5b5060155460165460175460185460195461072c949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103b6565b34801561076057600080fd5b506014546103df90600160a01b900460ff1681565b34801561078157600080fd5b5061040f610790366004612fe3565b611572565b3480156107a157600080fd5b506103df6107b0366004612fe3565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107da57600080fd5b5061040f6107e936600461324c565b6115f2565b3480156107fa57600080fd5b50610422600d5481565b34801561081057600080fd5b506000546001600160a01b03166105c5565b34801561082e57600080fd5b5061040f61083d366004612fc6565b61163c565b34801561084e57600080fd5b5060408051808201909152600381526242534d60e81b60208201526103a9565b34801561087a57600080fd5b50601a54601b54601c54601d54601e5461072c949392919085565b3480156108a157600080fd5b5061040f6108b0366004613000565b611679565b3480156108c157600080fd5b506103df6108d0366004612f4b565b61172c565b3480156108e157600080fd5b5061040f6108f0366004612fc6565b6117c7565b34801561090157600080fd5b506012546105c5906001600160a01b031681565b34801561092157600080fd5b50610422610930366004612fe3565b600e6020526000908152604090205481565b34801561094e57600080fd5b506009546105c5906001600160a01b031681565b34801561096e57600080fd5b506103df61097d366004612f4b565b61180f565b34801561098e57600080fd5b5061040f61099d366004612fe3565b61181c565b3480156109ae57600080fd5b5061040f6109bd36600461326a565b61189c565b3480156109ce57600080fd5b5061040f6109dd366004612fe3565b611932565b3480156109ee57600080fd5b506011546105c5906001600160a01b031681565b348015610a0e57600080fd5b5061040f610a1d366004613000565b6119b2565b348015610a2e57600080fd5b5061042260105481565b348015610a4457600080fd5b50610422610a53366004613019565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a8a57600080fd5b5061040f610a993660046132b1565b6119f8565b348015610aaa57600080fd5b50610422600c5481565b348015610ac057600080fd5b5061040f610acf366004612fe3565b611ab1565b348015610ae057600080fd5b50600f546103df9060ff1681565b348015610afa57600080fd5b5061040f610b09366004612fe3565b611afc565b348015610b1a57600080fd5b506008546105c5906201000090046001600160a01b031681565b348015610b4057600080fd5b506014546103df90600160a81b900460ff1681565b6000610b62338484611b97565b5060015b92915050565b6000546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610b96906132df565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c129190613314565b50505050565b6000610c25848484611cbb565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610caa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b96565b610cbe8533610cb98685613347565b611b97565b506001949350505050565b6000546001600160a01b03163314610cf35760405162461bcd60e51b8152600401610b96906132df565b60148054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610b96906132df565b6014546001600160a01b03808316911603610d685760405162461bcd60e51b8152600401610b969061335e565b601480546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000600b54821115610df85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b96565b6000610e026122ba565b9050610e0e818461338a565b9392505050565b6000546001600160a01b03163314610e3f5760405162461bcd60e51b8152600401610b96906132df565b610e4b6012600a613490565b610e55908261349f565b600d5550565b6000546001600160a01b03163314610e855760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03811660009081526005602052604090205460ff16610eed5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b96565b60005b60075481101561100d57816001600160a01b031660078281548110610f1757610f176134be565b6000918252602090912001546001600160a01b031603610ffb5760078054610f4190600190613347565b81548110610f5157610f516134be565b600091825260209091200154600780546001600160a01b039092169183908110610f7d57610f7d6134be565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610fd557610fd56134d4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611005816134ea565b915050610ef0565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b62918590610cb9908690613503565b6000546001600160a01b031633146110725760405162461bcd60e51b8152600401610b96906132df565b6008805462010000600160b01b031916620100006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a5483111561114e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b96565b8161116a5760006111608460016122dd565b519150610b669050565b60006111778460016122dd565b602001519150610b669050565b6000546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03811660009081526005602052604090205460ff16156112175760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b96565b6001600160a01b03811660009081526001602052604090205415611271576001600160a01b03811660009081526001602052604090205461125790610d91565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610b96906132df565b601585905560168490556017839055601882905560198190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610b96906132df565b80518251146113b45760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610b96565b3360005b8351811015610c125760008482815181106113d5576113d56134be565b6020026020010151905060006113e96122ba565b8584815181106113fb576113fb6134be565b602002602001015161140d919061349f565b6001600160a01b038516600090815260016020526040902054909150611434908290613347565b6001600160a01b038086166000908152600160205260408082209390935590841681522054611464908290613503565b6001600160a01b038084166000818152600160205260409020929092558651908616906000805160206135d8833981519152908890879081106114a9576114a96134be565b60200260200101516040516114c091815260200190565b60405180910390a3505080806114d5906134ea565b9150506113b8565b6001600160a01b03811660009081526005602052604081205460ff161561151a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b6690610d91565b6000546001600160a01b031633146115665760405162461bcd60e51b8152600401610b96906132df565b611570600061232a565b565b6000546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610b96906132df565b6011546001600160a01b038083169116036115c95760405162461bcd60e51b8152600401610b969061335e565b601180546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610b96906132df565b600f805460ff191683151517905561163581600161349f565b6010555050565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610b96906132df565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146116a35760405162461bcd60e51b8152600401610b96906132df565b804710156116f35760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b96565b600080546040516001600160a01b039091169183156108fc02918491818181858888f1935050505015801561100d573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b96565b6117bd3385610cb98685613347565b5060019392505050565b6000546001600160a01b031633146117f15760405162461bcd60e51b8152600401610b96906132df565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000610b62338484611cbb565b6000546001600160a01b031633146118465760405162461bcd60e51b8152600401610b96906132df565b6012546001600160a01b038083169116036118735760405162461bcd60e51b8152600401610b969061335e565b601280546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146118c65760405162461bcd60e51b8152600401610b96906132df565b60005b825181101561192d5781600660008584815181106118e9576118e96134be565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611925816134ea565b9150506118c9565b505050565b6000546001600160a01b0316331461195c5760405162461bcd60e51b8152600401610b96906132df565b6013546001600160a01b038083169116036119895760405162461bcd60e51b8152600401610b969061335e565b601380546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146119dc5760405162461bcd60e51b8152600401610b96906132df565b6119e86012600a613490565b6119f2908261349f565b600c5550565b6000546001600160a01b03163314611a225760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611a865760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610b96565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611adb5760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b265760405162461bcd60e51b8152600401610b96906132df565b6001600160a01b038116611b8b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b96565b611b948161232a565b50565b6001600160a01b038316611bf95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b96565b6001600160a01b038216611c5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b96565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b96565b6001600160a01b038216611d815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b96565b60008111611de35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b96565b611dec836114dd565b811115611e555760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b96565b6001600160a01b03831660009081526006602052604090205460ff16158015611e9757506001600160a01b03821660009081526006602052604090205460ff16155b611ed35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b96565b6001600160a01b03831660009081526004602052604090205460ff16158015611f1557506001600160a01b03821660009081526004602052604090205460ff16155b8015611f295750600854610100900460ff16155b156120f057600d54811115611f805760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e7420697320657863656564696e67206d61785478416d6f756e74006044820152606401610b96565b6009546001600160a01b03848116911614801590611fa05750600f5460ff165b15612038576001600160a01b0383166000908152600e6020526040812054611fc89042613347565b9050601054811161201b5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b96565b506001600160a01b0383166000908152600e602052604090204290555b6009546001600160a01b038381169116148015906120585750600f5460ff165b156120f0576001600160a01b0382166000908152600e60205260408120546120809042613347565b905060105481116120d35760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610b96565b506001600160a01b0382166000908152600e602052604090204290555b6001600160a01b03831660009081526004602052604081205460ff168061212f57506001600160a01b03831660009081526004602052604090205460ff165b159050600061213e83836122dd565b9050600061214b306114dd565b90506000600c548210159050600083610120015184610140015161216f9190613503565b9050600081600c546121819190613347565b600854909150610100900460ff1615801561219e575060085460ff165b80156121b857506009546001600160a01b038a8116911614155b80156121dd57506001600160a01b03891660009081526004602052604090205460ff16155b801561220257506001600160a01b03881660009081526004602052604090205460ff16155b156122605782801561221d5750601454600160a81b900460ff165b1561222b5761222b8161237a565b8184101580156122445750601454600160a01b900460ff165b15612260576012546122609083906001600160a01b03166123e1565b6001600160a01b0389166000908152600460205260409020546122af908a908a908a9060ff16806122a957506001600160a01b038c1660009081526004602052604090205460ff165b15612561565b505050505050505050565b60008060006122c76128db565b90925090506122d6818361338a565b9250505090565b6122e5612e79565b6122ef8383612a5e565b90506123048184846122ff6122ba565b612b77565b60c088015260a08701526080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff001916610100179055600061239660028361338a565b905060006123a48284613347565b9050476123b182306123e1565b60006123bd8247613347565b905080156123cf576123cf8482612c4d565b50506008805461ff0019169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612416576124166134be565b60200260200101906001600160a01b031690816001600160a01b031681525050600860029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ad919061351b565b816001815181106124c0576124c06134be565b6001600160a01b0392831660209182029290920101526008546124ec9130916201000090041685611b97565b60085460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac9479061252a908690600090869088904290600401613538565b600060405180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b50505050505050565b600061256d83836122dd565b6001600160a01b03861660009081526005602052604090205490915060ff16156125cf576001600160a01b0385166000908152600260205260409020546125b5908490613347565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156126325760e08101516001600160a01b0385166000908152600260205260409020546126189190613503565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546126579190613347565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461268e9190613503565b6001600160a01b03851660009081526001602052604090819020919091558101511515806126c157506000816101000151115b156126d9576126d98160400151826101000151612d0d565b60008160c0015111806126f157506000816101800151115b15612709576127098160c00151826101800151612d42565b60008160600151118061272157506000816101200151115b1561277a576127398160600151826101200151612db8565b306001600160a01b0316856001600160a01b03166000805160206135d883398151915283610120015160405161277191815260200190565b60405180910390a35b60008160800151118061279257506000816101400151115b156127eb576127aa8160800151826101400151612dcd565b306001600160a01b0316856001600160a01b03166000805160206135d88339815191528361014001516040516127e291815260200190565b60405180910390a35b60008160a00151118061280357506000816101600151115b156128555761281b8160a00151826101600151612de2565b6013546101608201516040519081526001600160a01b03918216918716906000805160206135d88339815191529060200160405180910390a35b836001600160a01b0316856001600160a01b03166000805160206135d88339815191528360e0015160405161288c91815260200190565b60405180910390a3306001600160a01b0316856001600160a01b03166000805160206135d88339815191528361018001516040516128cc91815260200190565b60405180910390a35050505050565b600b54600a546000918291825b600754811015612a2d5782600160006007848154811061290a5761290a6134be565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612975575081600260006007848154811061294e5761294e6134be565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561298b57600b54600a54945094505050509091565b60016000600783815481106129a2576129a26134be565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129d19084613347565b925060026000600783815481106129ea576129ea6134be565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a199083613347565b915080612a25816134ea565b9150506128e8565b50600a54600b54612a3e919061338a565b821015612a5557600b54600a549350935050509091565b90939092509050565b612a66612e79565b81612a775760e08101839052610b66565b6015546103e890612a88908561349f565b612a92919061338a565b6101008201526016546103e890612aa9908561349f565b612ab3919061338a565b6101208201526017546103e890612aca908561349f565b612ad4919061338a565b6101408201526018546103e890612aeb908561349f565b612af5919061338a565b6101608201526019546103e890612b0c908561349f565b612b16919061338a565b610180820181905261016082015161014083015161012084015161010085015192939192612b449088613347565b612b4e9190613347565b612b589190613347565b612b629190613347565b612b6c9190613347565b60e082015292915050565b6000808080808080612b89888b61349f565b965088612ba757508594506000935083925082915081905080612c3f565b878b6101000151612bb8919061349f565b9450878b6101200151612bcb919061349f565b9350878b6101800151612bde919061349f565b9050878b6101400151612bf1919061349f565b9250878b6101600151612c04919061349f565b915081838286612c14898c613347565b612c1e9190613347565b612c289190613347565b612c329190613347565b612c3c9190613347565b95505b949950949992975094509450565b600854612c6b9030906201000090046001600160a01b031684611b97565b60085460145460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015262010000909204169063f305d71990839060c40160606040518083038185885af1158015612ce1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d0691906135a9565b5050505050565b81600b6000828254612d1f9190613347565b9091555050601a8054829190600090612d39908490613503565b90915550505050565b80601a6004016000828254612d579190613503565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613503565b90915550505b3060009081526001602052604081208054849290612d39908490613503565b80601a6001016000828254612d579190613503565b80601a6002016000828254612d579190613503565b80601a6003016000828254612df79190613503565b90915550506012546001600160a01b031660009081526005602052604090205460ff1615612e4f576013546001600160a01b031660009081526002602052604081208054839290612e49908490613503565b90915550505b6013546001600160a01b031660009081526001602052604081208054849290612d39908490613503565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b81811015612f0e57858101830151858201604001528201612ef2565b81811115612f20576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b9457600080fd5b60008060408385031215612f5e57600080fd5b8235612f6981612f36565b946020939093013593505050565b600080600060608486031215612f8c57600080fd5b8335612f9781612f36565b92506020840135612fa781612f36565b929592945050506040919091013590565b8015158114611b9457600080fd5b600060208284031215612fd857600080fd5b8135610e0e81612fb8565b600060208284031215612ff557600080fd5b8135610e0e81612f36565b60006020828403121561301257600080fd5b5035919050565b6000806040838503121561302c57600080fd5b823561303781612f36565b9150602083013561304781612f36565b809150509250929050565b6000806040838503121561306557600080fd5b82359150602083013561304781612fb8565b600080600080600060a0868803121561308f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130f1576130f16130b2565b604052919050565b600067ffffffffffffffff821115613113576131136130b2565b5060051b60200190565b600082601f83011261312e57600080fd5b8135602061314361313e836130f9565b6130c8565b82815260059290921b8401810191818101908684111561316257600080fd5b8286015b8481101561318657803561317981612f36565b8352918301918301613166565b509695505050505050565b600080604083850312156131a457600080fd5b823567ffffffffffffffff808211156131bc57600080fd5b6131c88683870161311d565b93506020915081850135818111156131df57600080fd5b85019050601f810186136131f257600080fd5b803561320061313e826130f9565b81815260059190911b8201830190838101908883111561321f57600080fd5b928401925b8284101561323d57833582529284019290840190613224565b80955050505050509250929050565b6000806040838503121561325f57600080fd5b8235612f6981612fb8565b6000806040838503121561327d57600080fd5b823567ffffffffffffffff81111561329457600080fd5b6132a08582860161311d565b925050602083013561304781612fb8565b600080604083850312156132c457600080fd5b82356132cf81612f36565b9150602083013561304781612fb8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561332657600080fd5b8151610e0e81612fb8565b634e487b7160e01b600052601160045260246000fd5b60008282101561335957613359613331565b500390565b60208082526012908201527115d85b1b195d08185b1c9958591e481cd95d60721b604082015260600190565b6000826133a757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156133e75781600019048211156133cd576133cd613331565b808516156133da57918102915b93841c93908002906133b1565b509250929050565b6000826133fe57506001610b66565b8161340b57506000610b66565b8160018114613421576002811461342b57613447565b6001915050610b66565b60ff84111561343c5761343c613331565b50506001821b610b66565b5060208310610133831016604e8410600b841016171561346a575081810a610b66565b61347483836133ac565b806000190482111561348857613488613331565b029392505050565b6000610e0e60ff8416836133ef565b60008160001904831182151516156134b9576134b9613331565b500290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016134fc576134fc613331565b5060010190565b6000821982111561351657613516613331565b500190565b60006020828403121561352d57600080fd5b8151610e0e81612f36565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135885784516001600160a01b031683529383019391830191600101613563565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135be57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207f9036b7f6b81f1e4de9bd4d516929f0719971616d820a3cc05e64f98a22019664736f6c634300080e0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

6016:20606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9264:83;;;;;;;;;;-1:-1:-1;9334:5:0;;;;;;;;;;;;-1:-1:-1;;;9334:5:0;;;;9264:83;;;;;;;:::i;:::-;;;;;;;;10172:161;;;;;;;;;;-1:-1:-1;10172:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;10172:161:0;1072:187:1;26423:154:0;;;;;;;;;;-1:-1:-1;26423:154:0;;;;;:::i;:::-;;:::i;:::-;;9537:95;;;;;;;;;;-1:-1:-1;9617:7:0;;9537:95;;;1871:25:1;;;1859:2;1844:18;9537:95:0;1725:177:1;10341:422:0;;;;;;;;;;-1:-1:-1;10341:422:0;;;;;:::i;:::-;;:::i;24526:95::-;;;;;;;;;;-1:-1:-1;24526:95:0;;;;;:::i;:::-;;:::i;23742:214::-;;;;;;;;;;-1:-1:-1;23742:214:0;;;;;:::i;:::-;;:::i;11971:248::-;;;;;;;;;;-1:-1:-1;11971:248:0;;;;;:::i;:::-;;:::i;23964:113::-;;;;;;;;;;-1:-1:-1;23964:113:0;;;;;:::i;:::-;;:::i;9446:83::-;;;;;;;;;;-1:-1:-1;9446:83:0;;6603:2;2855:36:1;;2843:2;2828:18;9446:83:0;2713:184:1;12568:475:0;;;;;;;;;;-1:-1:-1;12568:475:0;;;;;:::i;:::-;;:::i;10771:215::-;;;;;;;;;;-1:-1:-1;10771:215:0;;;;;:::i;:::-;;:::i;25311:98::-;;;;;;;;;;-1:-1:-1;25311:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;25386:15:0;25363:4;25386:15;;;:6;:15;;;;;;;;;25311:98;25145:154;;;;;;;;;;-1:-1:-1;25145:154:0;;;;;:::i;:::-;;:::i;13053:111::-;;;;;;;;;;-1:-1:-1;13053:111:0;;;;;:::i;:::-;;:::i;7319:71::-;;;;;;;;;;-1:-1:-1;7319:71:0;;;;-1:-1:-1;;;;;7319:71:0;;;;;;-1:-1:-1;;;;;3459:32:1;;;3441:51;;3429:2;3414:18;7319:71:0;3295:203:1;11507:456:0;;;;;;;;;;-1:-1:-1;11507:456:0;;;;;:::i;:::-;;:::i;12227:333::-;;;;;;;;;;-1:-1:-1;12227:333:0;;;;;:::i;:::-;;:::i;13292:123::-;;;;;;;;;;-1:-1:-1;13292:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;13380:27:0;13356:4;13380:27;;;:18;:27;;;;;;;;;13292:123;13423:331;;;;;;;;;;-1:-1:-1;13423:331:0;;;;;:::i;:::-;;:::i;6444:31::-;;;;;;;;;;-1:-1:-1;6444:31:0;;;;;;;;25421:560;;;;;;;;;;-1:-1:-1;25421:560:0;;;;;:::i;:::-;;:::i;9640:198::-;;;;;;;;;;-1:-1:-1;9640:198:0;;;;;:::i;:::-;;:::i;7241:71::-;;;;;;;;;;-1:-1:-1;7241:71:0;;;;-1:-1:-1;;;;;7241:71:0;;;4793:94;;;;;;;;;;;;;:::i;7726:41::-;;;;;;;;;;-1:-1:-1;7726:41:0;;;;;;;;;;;;;;;;;;;;;;7020:25:1;;;7076:2;7061:18;;7054:34;;;;7104:18;;;7097:34;;;;7162:2;7147:18;;7140:34;7205:3;7190:19;;7183:35;7007:3;6992:19;7726:41:0;6761:463:1;7499:27:0;;;;;;;;;;-1:-1:-1;7499:27:0;;;;-1:-1:-1;;;7499:27:0;;;;;;23043:229;;;;;;;;;;-1:-1:-1;23043:229:0;;;;;:::i;:::-;;:::i;11379:120::-;;;;;;;;;;-1:-1:-1;11379:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;11471:20:0;11447:4;11471:20;;;:11;:20;;;;;;;;;11379:120;24332:186;;;;;;;;;;-1:-1:-1;24332:186:0;;;;;:::i;:::-;;:::i;6845:54::-;;;;;;;;;;;;;;;;4570:87;;;;;;;;;;-1:-1:-1;4616:7:0;4643:6;-1:-1:-1;;;;;4643:6:0;4570:87;;24223:101;;;;;;;;;;-1:-1:-1;24223:101:0;;;;;:::i;:::-;;:::i;9353:87::-;;;;;;;;;;-1:-1:-1;9425:7:0;;;;;;;;;;;;-1:-1:-1;;;9425:7:0;;;;9353:87;;7942:36;;;;;;;;;;-1:-1:-1;7942:36:0;;;;;;;;;;;;;;;;;;26053:193;;;;;;;;;;-1:-1:-1;26053:193:0;;;;;:::i;:::-;;:::i;10994:377::-;;;;;;;;;;-1:-1:-1;10994:377:0;;;;;:::i;:::-;;:::i;24629:116::-;;;;;;;;;;-1:-1:-1;24629:116:0;;;;;:::i;:::-;;:::i;7158:76::-;;;;;;;;;;-1:-1:-1;7158:76:0;;;;-1:-1:-1;;;;;7158:76:0;;;6933:46;;;;;;;;;;-1:-1:-1;6933:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;6540:19;;;;;;;;;;-1:-1:-1;6540:19:0;;;;-1:-1:-1;;;;;6540:19:0;;;9846:167;;;;;;;;;;-1:-1:-1;9846:167:0;;;;;:::i;:::-;;:::i;23501:233::-;;;;;;;;;;-1:-1:-1;23501:233:0;;;;;:::i;:::-;;:::i;24939:194::-;;;;;;;;;;-1:-1:-1;24939:194:0;;;;;:::i;:::-;;:::i;23280:213::-;;;;;;;;;;-1:-1:-1;23280:213:0;;;;;:::i;:::-;;:::i;7076:75::-;;;;;;;;;;-1:-1:-1;7076:75:0;;;;-1:-1:-1;;;;;7076:75:0;;;24085:130;;;;;;;;;;-1:-1:-1;24085:130:0;;;;;:::i;:::-;;:::i;7028:39::-;;;;;;;;;;;;;;;;10021:143;;;;;;;;;;-1:-1:-1;10021:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10129:18:0;;;10102:7;10129:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10021:143;24753:174;;;;;;;;;;-1:-1:-1;24753:174:0;;;;;:::i;:::-;;:::i;6781:57::-;;;;;;;;;;;;;;;;13172:110;;;;;;;;;;-1:-1:-1;13172:110:0;;;;;:::i;:::-;;:::i;6986:35::-;;;;;;;;;;-1:-1:-1;6986:35:0;;;;;;;;4895:192;;;;;;;;;;-1:-1:-1;4895:192:0;;;;;:::i;:::-;;:::i;6512:21::-;;;;;;;;;;-1:-1:-1;6512:21:0;;;;;;;-1:-1:-1;;;;;6512:21:0;;;7533:37;;;;;;;;;;-1:-1:-1;7533:37:0;;;;-1:-1:-1;;;7533:37:0;;;;;;10172:161;10247:4;10264:39;4071:10;10287:7;10296:6;10264:8;:39::i;:::-;-1:-1:-1;10321:4:0;10172:161;;;;;:::o;26423:154::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;;;;;;;;;26528:41:::1;::::0;-1:-1:-1;;;26528:41:0;;-1:-1:-1;;;;;9188:32:1;;;26528:41:0::1;::::0;::::1;9170:51:1::0;9237:18;;;9230:34;;;26528:27:0;::::1;::::0;::::1;::::0;9143:18:1;;26528:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26423:154:::0;;;:::o;10341:422::-;10447:4;10464:36;10474:6;10482:9;10493:6;10464:9;:36::i;:::-;-1:-1:-1;;;;;10540:19:0;;10513:24;10540:19;;;:11;:19;;;;;;;;4071:10;10540:33;;;;;;;;10592:26;;;;10584:79;;;;-1:-1:-1;;;10584:79:0;;9727:2:1;10584:79:0;;;9709:21:1;9766:2;9746:18;;;9739:30;9805:34;9785:18;;;9778:62;-1:-1:-1;;;9856:18:1;;;9849:38;9904:19;;10584:79:0;9525:404:1;10584:79:0;10674:57;10683:6;4071:10;10705:25;10724:6;10705:16;:25;:::i;:::-;10674:8;:57::i;:::-;-1:-1:-1;10751:4:0;;10341:422;-1:-1:-1;;;;10341:422:0:o;24526:95::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24593:8:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;24593:20:0::1;-1:-1:-1::0;;;;24593:20:0;;::::1;::::0;;;::::1;::::0;;24526:95::o;23742:214::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;23825:11:::1;::::0;-1:-1:-1;;;;;23825:24:0;;::::1;:11:::0;::::1;:24:::0;23817:55:::1;;;;-1:-1:-1::0;;;23817:55:0::1;;;;;;;:::i;:::-;23883:11;:23:::0;;-1:-1:-1;;;;;23883:23:0;;::::1;-1:-1:-1::0;;;;;;23883:23:0;;::::1;::::0;::::1;::::0;;:11:::1;23917:31:::0;:18:::1;:31;::::0;23742:214::o;11971:248::-;12037:7;12076;;12065;:18;;12057:73;;;;-1:-1:-1;;;12057:73:0;;10745:2:1;12057:73:0;;;10727:21:1;10784:2;10764:18;;;10757:30;10823:34;10803:18;;;10796:62;-1:-1:-1;;;10874:18:1;;;10867:40;10924:19;;12057:73:0;10543:406:1;12057:73:0;12141:19;12164:10;:8;:10::i;:::-;12141:33;-1:-1:-1;12192:19:0;12141:33;12192:7;:19;:::i;:::-;12185:26;11971:248;-1:-1:-1;;;11971:248:0:o;23964:113::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24056:13:::1;6603:2;24056;:13;:::i;:::-;24047:22;::::0;:6;:22:::1;:::i;:::-;24033:11;:36:::0;-1:-1:-1;23964:113:0:o;12568:475::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12650:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12642:56;;;::::0;-1:-1:-1;;;12642:56:0;;12934:2:1;12642:56:0::1;::::0;::::1;12916:21:1::0;12973:2;12953:18;;;12946:30;13012:25;12992:18;;;12985:53;13055:18;;12642:56:0::1;12732:347:1::0;12642:56:0::1;12714:9;12709:327;12733:9;:16:::0;12729:20;::::1;12709:327;;;12791:7;-1:-1:-1::0;;;;;12775:23:0::1;:9;12785:1;12775:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;12775:12:0::1;:23:::0;12771:254:::1;;12834:9;12844:16:::0;;:20:::1;::::0;12863:1:::1;::::0;12844:20:::1;:::i;:::-;12834:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;12819:9:::1;:12:::0;;-1:-1:-1;;;;;12834:31:0;;::::1;::::0;12829:1;;12819:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;12819:46:0::1;-1:-1:-1::0;;;;;12819:46:0;;::::1;;::::0;;12884:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;12923:11:::1;:20:::0;;;;:28;;-1:-1:-1;;12923:28:0::1;::::0;;12970:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;12970:15:0;;;;;-1:-1:-1;;;;;;12970:15:0::1;::::0;;;;;12709:327:::1;12568:475:::0;:::o;12771:254::-:1;12751:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12709:327;;;;12568:475:::0;:::o;10771:215::-;4071:10;10859:4;10908:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10908:34:0;;;;;;;;;;10859:4;;10876:80;;10899:7;;10908:47;;10945:10;;10908:47;:::i;25145:154::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;25239:6:::1;:27:::0;;-1:-1:-1;;;;;;25239:27:0::1;::::0;-1:-1:-1;;;;;25239:27:0;;::::1;;;::::0;;25277:4:::1;:14:::0;;-1:-1:-1;;;;;;25277:14:0::1;::::0;;;::::1;;::::0;;25145:154::o;13053:111::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13122:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;13122:34:0::1;13152:4;13122:34;::::0;;13053:111::o;11507:456::-;11597:7;11636;;11625;:18;;11617:62;;;;-1:-1:-1;;;11617:62:0;;13823:2:1;11617:62:0;;;13805:21:1;13862:2;13842:18;;;13835:30;13901:33;13881:18;;;13874:61;13952:18;;11617:62:0;13621:355:1;11617:62:0;11695:17;11690:266;;11729:28;11760:25;11771:7;11780:4;11760:10;:25::i;:::-;11807:9;;-1:-1:-1;11800:16:0;;-1:-1:-1;11800:16:0;11690:266;11849:28;11880:25;11891:7;11900:4;11880:10;:25::i;:::-;11927:17;;;;-1:-1:-1;11920:24:0;;-1:-1:-1;11920:24:0;12227:333;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12310:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12309:21;12301:61;;;::::0;-1:-1:-1;;;12301:61:0;;14183:2:1;12301:61:0::1;::::0;::::1;14165:21:1::0;14222:2;14202:18;;;14195:30;14261:29;14241:18;;;14234:57;14308:18;;12301:61:0::1;13981:351:1::0;12301:61:0::1;-1:-1:-1::0;;;;;12376:16:0;::::1;12395:1;12376:16:::0;;;:7:::1;:16;::::0;;;;;:20;12373:108:::1;;-1:-1:-1::0;;;;;12452:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;12432:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;12413:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;12373:108:::1;-1:-1:-1::0;;;;;12491:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12491:27:0::1;12514:4;12491:27:::0;;::::1;::::0;;;12529:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12529:23:0::1;::::0;;::::1;::::0;;12227:333::o;13423:331::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;13557:5:::1;:16:::0;;;13584:14;:26;;;13621:15;:28;;;13660:10;:18;;;13689:15;:28;;;13733:13:::1;::::0;::::1;::::0;13557:9:::1;::::0;13733:13:::1;13423:331:::0;;;;;:::o;25421:560::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;25558:7:::1;:14;25537:10;:17;:35;25529:59;;;::::0;-1:-1:-1;;;25529:59:0;;14539:2:1;25529:59:0::1;::::0;::::1;14521:21:1::0;14578:2;14558:18;;;14551:30;-1:-1:-1;;;14597:18:1;;;14590:42;14649:18;;25529:59:0::1;14337:336:1::0;25529:59:0::1;25617:10;25600:14;25639:335;25656:10;:17;25654:1;:19;25639:335;;;25694:17;25714:10;25725:1;25714:13;;;;;;;;:::i;:::-;;;;;;;25694:33;;25742:15;25771:10;:8;:10::i;:::-;25760:7;25768:1;25760:10;;;;;;;;:::i;:::-;;;;;;;:21;;;;:::i;:::-;-1:-1:-1::0;;;;;25814:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;25742:39;;-1:-1:-1;25814:24:0::1;::::0;25742:39;;25814:24:::1;:::i;:::-;-1:-1:-1::0;;;;;25796:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:42;;;;25874:18;;::::1;::::0;;;;:28:::1;::::0;25895:7;;25874:28:::1;:::i;:::-;-1:-1:-1::0;;;;;25853:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:49;;;;25950:10;;25922:39;;::::1;::::0;-1:-1:-1;;;;;;;;;;;25922:39:0;25950:7;;25958:1;;25950:10;::::1;;;;;:::i;:::-;;;;;;;25922:39;;;;1871:25:1::0;;1859:2;1844:18;;1725:177;25922:39:0::1;;;;;;;;25679:295;;25675:3;;;;;:::i;:::-;;;;25639:335;;9640:198:::0;-1:-1:-1;;;;;9730:20:0;;9706:7;9730:20;;;:11;:20;;;;;;;;9726:49;;;-1:-1:-1;;;;;;9759:16:0;;;;;:7;:16;;;;;;;9640:198::o;9726:49::-;-1:-1:-1;;;;;9813:16:0;;;;;;:7;:16;;;;;;9793:37;;:19;:37::i;4793:94::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;4858:21:::1;4876:1;4858:9;:21::i;:::-;4793:94::o:0;23043:229::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;23129:15:::1;::::0;-1:-1:-1;;;;;23129:28:0;;::::1;:15:::0;::::1;:28:::0;23121:59:::1;;;;-1:-1:-1::0;;;23121:59:0::1;;;;;;;:::i;:::-;23191:15;:27:::0;;-1:-1:-1;;;;;23191:27:0;;::::1;-1:-1:-1::0;;;;;;23191:27:0;;::::1;::::0;::::1;::::0;;:15:::1;23229:35:::0;:18:::1;:35;::::0;23043:229::o;24332:186::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24432:15:::1;:26:::0;;-1:-1:-1;;24432:26:0::1;::::0;::::1;;;::::0;;24484::::1;:14:::0;-1:-1:-1;24484:26:0::1;:::i;:::-;24469:12;:41:::0;-1:-1:-1;;24332:186:0:o;24223:101::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24294:11:::1;:22:::0;;-1:-1:-1;;24294:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24223:101::o;26053:193::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;26153:9:::1;26128:21;:34;;26120:71;;;::::0;-1:-1:-1;;;26120:71:0;;14880:2:1;26120:71:0::1;::::0;::::1;14862:21:1::0;14919:2;14899:18;;;14892:30;14958:26;14938:18;;;14931:54;15002:18;;26120:71:0::1;14678:348:1::0;26120:71:0::1;4616:7:::0;4643:6;;26202:36:::1;::::0;-1:-1:-1;;;;;4643:6:0;;;;26202:36;::::1;;;::::0;26228:9;;26202:36;4616:7;26202:36;26228:9;4643:6;26202:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;10994:377:::0;4071:10;11087:4;11131:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11131:34:0;;;;;;;;;;11184:35;;;;11176:85;;;;-1:-1:-1;;;11176:85:0;;15233:2:1;11176:85:0;;;15215:21:1;15272:2;15252:18;;;15245:30;15311:34;15291:18;;;15284:62;-1:-1:-1;;;15362:18:1;;;15355:35;15407:19;;11176:85:0;15031:401:1;11176:85:0;11272:67;4071:10;11295:7;11304:34;11323:15;11304:16;:34;:::i;11272:67::-;-1:-1:-1;11359:4:0;;10994:377;-1:-1:-1;;;10994:377:0:o;24629:116::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24708:18:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;24708:29:0::1;-1:-1:-1::0;;;;24708:29:0;;::::1;::::0;;;::::1;::::0;;24629:116::o;9846:167::-;9924:4;9941:42;4071:10;9965:9;9976:6;9941:9;:42::i;23501:233::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;23588:16:::1;::::0;-1:-1:-1;;;;;23588:29:0;;::::1;:16:::0;::::1;:29:::0;23580:60:::1;;;;-1:-1:-1::0;;;23580:60:0::1;;;;;;;:::i;:::-;23651:16;:28:::0;;-1:-1:-1;;;;;23651:28:0;;::::1;-1:-1:-1::0;;;;;;23651:28:0;;::::1;::::0;::::1;::::0;;:16:::1;23690:36:::0;:18:::1;:36;::::0;23501:233::o;24939:194::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;25032:9:::1;25028:98;25051:8;:15;25047:1;:19;25028:98;;;25109:5;25087:6;:19;25094:8;25103:1;25094:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25087:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25087:19:0;:27;;-1:-1:-1;;25087:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25068:3;::::1;::::0;::::1;:::i;:::-;;;;25028:98;;;;24939:194:::0;;:::o;23280:213::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;23362:11:::1;::::0;-1:-1:-1;;;;;23362:24:0;;::::1;:11:::0;::::1;:24:::0;23354:55:::1;;;;-1:-1:-1::0;;;23354:55:0::1;;;;;;;:::i;:::-;23420:11;:23:::0;;-1:-1:-1;;;;;23420:23:0;;::::1;-1:-1:-1::0;;;;;;23420:23:0;;::::1;::::0;::::1;::::0;;:11:::1;23454:31:::0;:18:::1;:31;::::0;23280:213::o;24085:130::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;24194:13:::1;6603:2;24194;:13;:::i;:::-;24185:22;::::0;:6;:22:::1;:::i;:::-;24164:18;:43:::0;-1:-1:-1;24085:130:0:o;24753:174::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24839:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;:24;::::1;;:15;::::0;;::::1;:24;;::::0;24831:54:::1;;;::::0;-1:-1:-1;;;24831:54:0;;15639:2:1;24831:54:0::1;::::0;::::1;15621:21:1::0;15678:2;15658:18;;;15651:30;-1:-1:-1;;;15697:18:1;;;15690:47;15754:18;;24831:54:0::1;15437:341:1::0;24831:54:0::1;-1:-1:-1::0;;;;;24896:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;24896:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24753:174::o;13172:110::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13239:27:0::1;13269:5;13239:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;13239:35:0::1;::::0;;13172:110::o;4895:192::-;4616:7;4643:6;-1:-1:-1;;;;;4643:6:0;4071:10;4705:23;4697:68;;;;-1:-1:-1;;;4697:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4984:22:0;::::1;4976:73;;;::::0;-1:-1:-1;;;4976:73:0;;15985:2:1;4976:73:0::1;::::0;::::1;15967:21:1::0;16024:2;16004:18;;;15997:30;16063:34;16043:18;;;16036:62;-1:-1:-1;;;16114:18:1;;;16107:36;16160:19;;4976:73:0::1;15783:402:1::0;4976:73:0::1;5060:19;5070:8;5060:9;:19::i;:::-;4895:192:::0;:::o;17364:335::-;-1:-1:-1;;;;;17457:19:0;;17449:68;;;;-1:-1:-1;;;17449:68:0;;16392:2:1;17449:68:0;;;16374:21:1;16431:2;16411:18;;;16404:30;16470:34;16450:18;;;16443:62;-1:-1:-1;;;16521:18:1;;;16514:34;16565:19;;17449:68:0;16190:400:1;17449:68:0;-1:-1:-1;;;;;17536:21:0;;17528:68;;;;-1:-1:-1;;;17528:68:0;;16797:2:1;17528:68:0;;;16779:21:1;16836:2;16816:18;;;16809:30;16875:34;16855:18;;;16848:62;-1:-1:-1;;;16926:18:1;;;16919:32;16968:19;;17528:68:0;16595:398:1;17528:68:0;-1:-1:-1;;;;;17607:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17659:32;;1871:25:1;;;17659:32:0;;1844:18:1;17659:32:0;;;;;;;17364:335;;;:::o;17709:2123::-;-1:-1:-1;;;;;17797:18:0;;17789:68;;;;-1:-1:-1;;;17789:68:0;;17200:2:1;17789:68:0;;;17182:21:1;17239:2;17219:18;;;17212:30;17278:34;17258:18;;;17251:62;-1:-1:-1;;;17329:18:1;;;17322:35;17374:19;;17789:68:0;16998:401:1;17789:68:0;-1:-1:-1;;;;;17876:16:0;;17868:64;;;;-1:-1:-1;;;17868:64:0;;17606:2:1;17868:64:0;;;17588:21:1;17645:2;17625:18;;;17618:30;17684:34;17664:18;;;17657:62;-1:-1:-1;;;17735:18:1;;;17728:33;17778:19;;17868:64:0;17404:399:1;17868:64:0;17960:1;17951:6;:10;17943:64;;;;-1:-1:-1;;;17943:64:0;;18010:2:1;17943:64:0;;;17992:21:1;18049:2;18029:18;;;18022:30;18088:34;18068:18;;;18061:62;-1:-1:-1;;;18139:18:1;;;18132:39;18188:19;;17943:64:0;17808:405:1;17943:64:0;18036:15;18046:4;18036:9;:15::i;:::-;18026:6;:25;;18018:86;;;;-1:-1:-1;;;18018:86:0;;18420:2:1;18018:86:0;;;18402:21:1;18459:2;18439:18;;;18432:30;18498:34;18478:18;;;18471:62;-1:-1:-1;;;18549:18:1;;;18542:47;18606:19;;18018:86:0;18218:413:1;18018:86:0;-1:-1:-1;;;;;18124:12:0;;;;;;:6;:12;;;;;;;;18123:13;:28;;;;-1:-1:-1;;;;;;18141:10:0;;;;;;:6;:10;;;;;;;;18140:11;18123:28;18115:54;;;;-1:-1:-1;;;18115:54:0;;18838:2:1;18115:54:0;;;18820:21:1;18877:2;18857:18;;;18850:30;-1:-1:-1;;;18896:18:1;;;18889:43;18949:18;;18115:54:0;18636:337:1;18115:54:0;-1:-1:-1;;;;;18196:24:0;;;;;;:18;:24;;;;;;;;18195:25;:52;;;;-1:-1:-1;;;;;;18225:22:0;;;;;;:18;:22;;;;;;;;18224:23;18195:52;:65;;;;-1:-1:-1;18252:8:0;;;;;;;18251:9;18195:65;18192:709;;;18294:11;;18284:6;:21;;18276:65;;;;-1:-1:-1;;;18276:65:0;;19180:2:1;18276:65:0;;;19162:21:1;19219:2;19199:18;;;19192:30;19258:33;19238:18;;;19231:61;19309:18;;18276:65:0;18978:355:1;18276:65:0;18369:4;;-1:-1:-1;;;;;18361:12:0;;;18369:4;;18361:12;;;;:31;;-1:-1:-1;18377:15:0;;;;18361:31;18358:261;;;-1:-1:-1;;;;;18451:16:0;;18412:18;18451:16;;;:10;:16;;;;;;18433:34;;:15;:34;:::i;:::-;18412:55;;18507:12;;18494:10;:25;18486:64;;;;-1:-1:-1;;;18486:64:0;;19540:2:1;18486:64:0;;;19522:21:1;19579:2;19559:18;;;19552:30;19618:28;19598:18;;;19591:56;19664:18;;18486:64:0;19338:350:1;18486:64:0;-1:-1:-1;;;;;;18569:16:0;;;;;;:10;:16;;;;;18588:15;18569:34;;18358:261;18642:4;;-1:-1:-1;;;;;18636:10:0;;;18642:4;;18636:10;;;;:29;;-1:-1:-1;18650:15:0;;;;18636:29;18633:257;;;-1:-1:-1;;;;;18725:14:0;;18685:19;18725:14;;;:10;:14;;;;;;18707:32;;:15;:32;:::i;:::-;18685:54;;18780:12;;18766:11;:26;18758:65;;;;-1:-1:-1;;;18758:65:0;;19540:2:1;18758:65:0;;;19522:21:1;19579:2;19559:18;;;19552:30;19618:28;19598:18;;;19591:56;19664:18;;18758:65:0;19338:350:1;18758:65:0;-1:-1:-1;;;;;;18842:14:0;;;;;;:10;:14;;;;;18859:15;18842:32;;18633:257;-1:-1:-1;;;;;18938:24:0;;18921:12;18938:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;18966:22:0;;;;;;:18;:22;;;;;;;;18938:50;18936:53;18921:68;;19002:28;19033:27;19044:6;19052:7;19033:10;:27::i;:::-;19002:58;;19073:23;19099:24;19117:4;19099:9;:24::i;:::-;19073:50;;19134:12;19168:18;;19149:15;:37;;19134:52;;19197:17;19232:1;:11;;;19217:1;:12;;;:26;;;;:::i;:::-;19197:46;;19254:27;19305:9;19284:18;;:30;;;;:::i;:::-;19331:8;;19254:60;;-1:-1:-1;19331:8:0;;;;;19330:9;:24;;;;-1:-1:-1;19343:11:0;;;;19330:24;:40;;;;-1:-1:-1;19366:4:0;;-1:-1:-1;;;;;19358:12:0;;;19366:4;;19358:12;;19330:40;:69;;;;-1:-1:-1;;;;;;19375:24:0;;;;;;:18;:24;;;;;;;;19374:25;19330:69;:96;;;;-1:-1:-1;;;;;;19404:22:0;;;;;;:18;:22;;;;;;;;19403:23;19330:96;19327:380;;;19459:7;:29;;;;-1:-1:-1;19470:18:0;;-1:-1:-1;;;19470:18:0;;;;19459:29;19456:102;;;19507:35;19522:19;19507:14;:35::i;:::-;19596:9;19577:15;:28;;:40;;;;-1:-1:-1;19609:8:0;;-1:-1:-1;;;19609:8:0;;;;19577:40;19574:122;;;19663:16;;19635:45;;19652:9;;-1:-1:-1;;;;;19663:16:0;19635;:45::i;:::-;-1:-1:-1;;;;;19762:24:0;;;;;;:18;:24;;;;;;19727:87;;19742:4;;19748:2;;19752:6;;19762:24;;;:50;;-1:-1:-1;;;;;;19790:22:0;;;;;;:18;:22;;;;;;;;19762:50;19760:53;19727:14;:87::i;:::-;17778:2054;;;;;;17709:2123;;;:::o;16650:158::-;16691:7;16712:15;16729;16748:19;:17;:19::i;:::-;16711:56;;-1:-1:-1;16711:56:0;-1:-1:-1;16785:15:0;16711:56;;16785:15;:::i;:::-;16778:22;;;;16650:158;:::o;14873:407::-;14946:36;;:::i;:::-;15007:29;15019:7;15028;15007:11;:29::i;:::-;14995:41;;15193:52;15205:9;15216:7;15225;15234:10;:8;:10::i;:::-;15193:11;:52::i;:::-;15169:20;;;15047:198;15152:15;;;15047:198;15130:20;;;15047:198;15110:19;;;15047:198;15094:14;;;15047:198;15067:25;;;15047:198;;;14873:407;;;;:::o;5095:173::-;5151:16;5170:6;;-1:-1:-1;;;;;5187:17:0;;;-1:-1:-1;;;;;;5187:17:0;;;;;;5220:40;;5170:6;;;;;;;5220:40;;5151:16;5220:40;5140:128;5095:173;:::o;21345:596::-;8487:8;:15;;-1:-1:-1;;8487:15:0;;;;;;21500:10:::1;21509:1;21500:6:::0;:10:::1;:::i;:::-;21465:45:::0;-1:-1:-1;21521:14:0::1;21538:33;21465:45:::0;21538:6;:33:::1;:::i;:::-;21521:50:::0;-1:-1:-1;21609:21:0::1;21641:39;21521:50:::0;21674:4:::1;21641:16;:39::i;:::-;21691:29;21723:38;21747:14:::0;21723:21:::1;:38;:::i;:::-;21691:70:::0;-1:-1:-1;21777:25:0;;21774:158:::1;;21859:61;21872:24;21898:21;21859:12;:61::i;:::-;-1:-1:-1::0;;8525:8:0;:16;;-1:-1:-1;;8525:16:0;;;-1:-1:-1;;;21345:596:0:o;22456:579::-;22626:16;;;22640:1;22626:16;;;;;;;;22602:21;;22626:16;;;;;;;;;;-1:-1:-1;22626:16:0;22602:40;;22671:4;22653;22658:1;22653:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22653:23:0;;;-1:-1:-1;;;;;22653:23:0;;;;;22697:6;;;;;;;;;-1:-1:-1;;;;;22697:6:0;-1:-1:-1;;;;;22697:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22687:4;22692:1;22687:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22687:23:0;;;:7;;;;;;;;;:23;22755:6;;22723:53;;22740:4;;22755:6;;;;22764:11;22723:8;:53::i;:::-;22815:6;;:212;;-1:-1:-1;;;22815:212:0;;:6;;;;-1:-1:-1;;;;;22815:6:0;;:57;;:212;;22887:11;;22913:1;;22957:4;;22976:10;;23001:15;;22815:212;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22531:504;22456:579;;:::o;19915:1422::-;20026:28;20057;20068:7;20077;20057:10;:28::i;:::-;-1:-1:-1;;;;;20102:19:0;;;;;;:11;:19;;;;;;20026:59;;-1:-1:-1;20102:19:0;;20098:115;;;-1:-1:-1;;;;;20178:15:0;;;;;;:7;:15;;;;;;:23;;20194:7;;20178:23;:::i;:::-;-1:-1:-1;;;;;20160:15:0;;;;;;:7;:15;;;;;:41;20098:115;-1:-1:-1;;;;;20227:22:0;;;;;;:11;:22;;;;;;;;20223:130;;;20324:17;;;;-1:-1:-1;;;;;20305:18:0;;;;;;:7;:18;;;;;;:36;;20324:17;20305:36;:::i;:::-;-1:-1:-1;;;;;20284:18:0;;;;;;:7;:18;;;;;:57;20223:130;20399:9;;-1:-1:-1;;;;;20383:15:0;;20399:9;20383:15;;;:7;:15;;;;;;:25;;20399:9;20383:25;:::i;:::-;-1:-1:-1;;;;;20365:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;20459:17;;;20440:18;;;;;;;;;;:36;;20459:17;20440:36;:::i;:::-;-1:-1:-1;;;;;20419:18:0;;;;;;:7;:18;;;;;;;:57;;;;20500:6;;;:10;;;:24;;;20523:1;20514;:6;;;:10;20500:24;20497:56;;;20526:27;20538:1;:6;;;20546:1;:6;;;20526:11;:27::i;:::-;20582:1;20567;:12;;;:16;:36;;;;20602:1;20587;:12;;;:16;20567:36;20564:109;;;20620:41;20635:1;:12;;;20648:1;:12;;;20620:14;:41::i;:::-;20700:1;20686;:11;;;:15;:34;;;;20719:1;20705;:11;;;:15;20686:34;20683:168;;;20736:39;20750:1;:11;;;20763:1;:11;;;20736:13;:39::i;:::-;20820:4;-1:-1:-1;;;;;20795:44:0;20804:6;-1:-1:-1;;;;;20795:44:0;-1:-1:-1;;;;;;;;;;;20827:1:0;:11;;;20795:44;;;;1871:25:1;;1859:2;1844:18;;1725:177;20795:44:0;;;;;;;;20683:168;20879:1;20864;:12;;;:16;:36;;;;20899:1;20884;:12;;;:16;20864:36;20861:174;;;20916:42;20931:1;:12;;;20945:1;:12;;;20916:14;:42::i;:::-;21003:4;-1:-1:-1;;;;;20978:45:0;20987:6;-1:-1:-1;;;;;20978:45:0;-1:-1:-1;;;;;;;;;;;21010:1:0;:12;;;20978:45;;;;1871:25:1;;1859:2;1844:18;;1725:177;20978:45:0;;;;;;;;20861:174;21058:1;21048;:7;;;:11;:26;;;;21073:1;21063;:7;;;:11;21048:26;21045:142;;;21090:27;21100:1;:7;;;21109:1;:7;;;21090:9;:27::i;:::-;21154:11;;21167:7;;;;21137:38;;1871:25:1;;;-1:-1:-1;;;;;21154:11:0;;;;21137:38;;;-1:-1:-1;;;;;;;;;;;21137:38:0;1859:2:1;1844:18;21137:38:0;;;;;;;21045:142;21229:9;-1:-1:-1;;;;;21212:46:0;21221:6;-1:-1:-1;;;;;21212:46:0;-1:-1:-1;;;;;;;;;;;21240:1:0;:17;;;21212:46;;;;1871:25:1;;1859:2;1844:18;;1725:177;21212:46:0;;;;;;;;21299:4;-1:-1:-1;;;;;21274:45:0;21283:6;-1:-1:-1;;;;;21274:45:0;-1:-1:-1;;;;;;;;;;;21306:1:0;:12;;;21274:45;;;;1871:25:1;;1859:2;1844:18;;1725:177;21274:45:0;;;;;;;;20013:1324;19915:1422;;;;:::o;16816:540::-;16913:7;;16949;;16866;;;;;16967:279;16991:9;:16;16987:20;;16967:279;;;17057:7;17033;:21;17041:9;17051:1;17041:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17041:12:0;17033:21;;;;;;;;;;;;;:31;;:66;;;17092:7;17068;:21;17076:9;17086:1;17076:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17076:12:0;17068:21;;;;;;;;;;;;;:31;17033:66;17029:97;;;17109:7;;17118;;17101:25;;;;;;;16816:540;;:::o;17029:97::-;17159:7;:21;17167:9;17177:1;17167:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17167:12:0;17159:21;;;;;;;;;;;;;17151:29;;:7;:29;:::i;:::-;17141:39;;17213:7;:21;17221:9;17231:1;17221:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17221:12:0;17213:21;;;;;;;;;;;;;17205:29;;:7;:29;:::i;:::-;17195:39;-1:-1:-1;17009:3:0;;;;:::i;:::-;;;;16967:279;;;;17278:7;;17270;;:15;;;;:::i;:::-;17260:7;:25;17256:56;;;17295:7;;17304;;17287:25;;;;;;16816:540;;:::o;17256:56::-;17331:7;;17340;;-1:-1:-1;16816:540:0;-1:-1:-1;16816:540:0:o;15288:576::-;15362:28;;:::i;:::-;15409:7;15405:86;;15431:17;;;:27;;;15471:8;;15405:86;15528:5;:9;15538:4;;15520:17;;:7;:17;:::i;:::-;:22;;;;:::i;:::-;15511:6;;;:31;15575:14;;15590:4;;15567:22;;:7;:22;:::i;:::-;:27;;;;:::i;:::-;15553:11;;;:41;15628:15;;15644:4;;15620:23;;:7;:23;:::i;:::-;:28;;;;:::i;:::-;15605:12;;;:43;15677:10;;15688:4;;15669:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;15659:7;;;:33;15726:15;;15742:4;;15718:23;;:7;:23;:::i;:::-;:28;;;;:::i;:::-;15703:12;;;:43;;;15830:7;;;;15817:12;;;;15792:11;;;;15785:6;;;;15830:7;;15817:12;;15777:14;;:7;:14;:::i;:::-;:26;;;;:::i;:::-;:39;;;;:::i;:::-;:52;;;;:::i;:::-;:60;;;;:::i;:::-;15757:17;;;:80;15288:576;;;;:::o;15872:770::-;15997:15;;;;;;;16144:19;16152:11;16144:7;:19;:::i;:::-;16134:29;;16180:7;16176:73;;-1:-1:-1;16209:7:0;;-1:-1:-1;16227:1:0;;-1:-1:-1;16227:1:0;;-1:-1:-1;16227:1:0;;-1:-1:-1;16227:1:0;;-1:-1:-1;16227:1:0;16202:35;;16176:73;16275:11;16268:1;:6;;;:18;;;;:::i;:::-;16261:25;;16321:11;16309:1;:11;;;:23;;;;:::i;:::-;16297:35;;16369:11;16356:1;:12;;;:24;;;;:::i;:::-;16343:37;;16417:11;16404:1;:12;;;:24;;;;:::i;:::-;16391:37;;16455:11;16447:1;:7;;;:19;;;;:::i;:::-;16439:27;-1:-1:-1;16439:27:0;16530:10;16519;16509:9;16496:12;16504:4;16496:7;:12;:::i;:::-;:22;;;;:::i;:::-;:33;;;;:::i;:::-;:44;;;;:::i;:::-;:50;;;;:::i;:::-;16477:69;;15872:770;;;;;;;;;;;;;:::o;21949:499::-;22129:6;;22097:53;;22114:4;;22129:6;;;-1:-1:-1;;;;;22129:6:0;22138:11;22097:8;:53::i;:::-;22193:6;;22388:11;;22193:247;;-1:-1:-1;;;22193:247:0;;22256:4;22193:247;;;21275:34:1;21325:18;;;21318:34;;;22302:1:0;21368:18:1;;;21361:34;;;21411:18;;;21404:34;-1:-1:-1;;;;;22388:11:0;;;21454:19:1;;;21447:44;22414:15:0;21507:19:1;;;21500:35;22193:6:0;;;;;;:22;;22223:9;;21209:19:1;;22193:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21949:499;;:::o;13764:123::-;13842:4;13832:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;13857:11:0;:22;;13875:4;;13857:11;:15;;:22;;13875:4;;13857:22;:::i;:::-;;;;-1:-1:-1;;;;13764:123:0:o;13895:247::-;14002:10;13978:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;14046:4:0;14026:26;;;;:11;:26;;;;;;;;14023:65;;;14070:4;14054:22;;;;:7;:22;;;;;:34;;14078:10;;14054:22;:34;;14078:10;;14054:34;:::i;:::-;;;;-1:-1:-1;;14023:65:0;14115:4;14099:22;;;;:7;:22;;;;;:35;;14124:10;;14099:22;:35;;14124:10;;14099:35;:::i;14150:240::-;14253:9;14230:11;:20;;;:32;;;;;;;:::i;14402:246::-;14508:10;14484:11;:21;;;:34;;;;;;;:::i;14656:209::-;14742:5;14723:11;:16;;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;14773:16:0;;-1:-1:-1;;;;;14773:16:0;14761:29;;;;:11;:29;;;;;;;;14758:60;;;14799:11;;-1:-1:-1;;;;;14799:11:0;14791:20;;;;:7;:20;;;;;:27;;14813:5;;14791:20;:27;;14813:5;;14791:27;:::i;:::-;;;;-1:-1:-1;;14758:60:0;14837:11;;-1:-1:-1;;;;;14837:11:0;14829:20;;;;:7;:20;;;;;:28;;14852:5;;14829:20;:28;;14852:5;;14829:28;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:456::-;1341:6;1349;1357;1410:2;1398:9;1389:7;1385:23;1381:32;1378:52;;;1426:1;1423;1416:12;1378:52;1465:9;1452:23;1484:31;1509:5;1484:31;:::i;:::-;1534:5;-1:-1:-1;1591:2:1;1576:18;;1563:32;1604:33;1563:32;1604:33;:::i;:::-;1264:456;;1656:7;;-1:-1:-1;;;1710:2:1;1695:18;;;;1682:32;;1264:456::o;1907:118::-;1993:5;1986:13;1979:21;1972:5;1969:32;1959:60;;2015:1;2012;2005:12;2030:241;2086:6;2139:2;2127:9;2118:7;2114:23;2110:32;2107:52;;;2155:1;2152;2145:12;2107:52;2194:9;2181:23;2213:28;2235:5;2213:28;:::i;2276:247::-;2335:6;2388:2;2376:9;2367:7;2363:23;2359:32;2356:52;;;2404:1;2401;2394:12;2356:52;2443:9;2430:23;2462:31;2487:5;2462:31;:::i;2528:180::-;2587:6;2640:2;2628:9;2619:7;2615:23;2611:32;2608:52;;;2656:1;2653;2646:12;2608:52;-1:-1:-1;2679:23:1;;2528:180;-1:-1:-1;2528:180:1:o;2902:388::-;2970:6;2978;3031:2;3019:9;3010:7;3006:23;3002:32;2999:52;;;3047:1;3044;3037:12;2999:52;3086:9;3073:23;3105:31;3130:5;3105:31;:::i;:::-;3155:5;-1:-1:-1;3212:2:1;3197:18;;3184:32;3225:33;3184:32;3225:33;:::i;:::-;3277:7;3267:17;;;2902:388;;;;;:::o;3503:309::-;3568:6;3576;3629:2;3617:9;3608:7;3604:23;3600:32;3597:52;;;3645:1;3642;3635:12;3597:52;3681:9;3668:23;3658:33;;3741:2;3730:9;3726:18;3713:32;3754:28;3776:5;3754:28;:::i;3817:454::-;3912:6;3920;3928;3936;3944;3997:3;3985:9;3976:7;3972:23;3968:33;3965:53;;;4014:1;4011;4004:12;3965:53;-1:-1:-1;;4037:23:1;;;4107:2;4092:18;;4079:32;;-1:-1:-1;4158:2:1;4143:18;;4130:32;;4209:2;4194:18;;4181:32;;-1:-1:-1;4260:3:1;4245:19;4232:33;;-1:-1:-1;3817:454:1;-1:-1:-1;3817:454:1:o;4276:127::-;4337:10;4332:3;4328:20;4325:1;4318:31;4368:4;4365:1;4358:15;4392:4;4389:1;4382:15;4408:275;4479:2;4473:9;4544:2;4525:13;;-1:-1:-1;;4521:27:1;4509:40;;4579:18;4564:34;;4600:22;;;4561:62;4558:88;;;4626:18;;:::i;:::-;4662:2;4655:22;4408:275;;-1:-1:-1;4408:275:1:o;4688:183::-;4748:4;4781:18;4773:6;4770:30;4767:56;;;4803:18;;:::i;:::-;-1:-1:-1;4848:1:1;4844:14;4860:4;4840:25;;4688:183::o;4876:737::-;4930:5;4983:3;4976:4;4968:6;4964:17;4960:27;4950:55;;5001:1;4998;4991:12;4950:55;5037:6;5024:20;5063:4;5087:60;5103:43;5143:2;5103:43;:::i;:::-;5087:60;:::i;:::-;5181:15;;;5267:1;5263:10;;;;5251:23;;5247:32;;;5212:12;;;;5291:15;;;5288:35;;;5319:1;5316;5309:12;5288:35;5355:2;5347:6;5343:15;5367:217;5383:6;5378:3;5375:15;5367:217;;;5463:3;5450:17;5480:31;5505:5;5480:31;:::i;:::-;5524:18;;5562:12;;;;5400;;5367:217;;;-1:-1:-1;5602:5:1;4876:737;-1:-1:-1;;;;;;4876:737:1:o;5618:1138::-;5736:6;5744;5797:2;5785:9;5776:7;5772:23;5768:32;5765:52;;;5813:1;5810;5803:12;5765:52;5853:9;5840:23;5882:18;5923:2;5915:6;5912:14;5909:34;;;5939:1;5936;5929:12;5909:34;5962:61;6015:7;6006:6;5995:9;5991:22;5962:61;:::i;:::-;5952:71;;6042:2;6032:12;;6097:2;6086:9;6082:18;6069:32;6126:2;6116:8;6113:16;6110:36;;;6142:1;6139;6132:12;6110:36;6165:24;;;-1:-1:-1;6220:4:1;6212:13;;6208:27;-1:-1:-1;6198:55:1;;6249:1;6246;6239:12;6198:55;6285:2;6272:16;6308:60;6324:43;6364:2;6324:43;:::i;6308:60::-;6402:15;;;6484:1;6480:10;;;;6472:19;;6468:28;;;6433:12;;;;6508:19;;;6505:39;;;6540:1;6537;6530:12;6505:39;6564:11;;;;6584:142;6600:6;6595:3;6592:15;6584:142;;;6666:17;;6654:30;;6617:12;;;;6704;;;;6584:142;;;6745:5;6735:15;;;;;;;5618:1138;;;;;:::o;7229:309::-;7294:6;7302;7355:2;7343:9;7334:7;7330:23;7326:32;7323:52;;;7371:1;7368;7361:12;7323:52;7410:9;7397:23;7429:28;7451:5;7429:28;:::i;7543:477::-;7633:6;7641;7694:2;7682:9;7673:7;7669:23;7665:32;7662:52;;;7710:1;7707;7700:12;7662:52;7750:9;7737:23;7783:18;7775:6;7772:30;7769:50;;;7815:1;7812;7805:12;7769:50;7838:61;7891:7;7882:6;7871:9;7867:22;7838:61;:::i;:::-;7828:71;;;7949:2;7938:9;7934:18;7921:32;7962:28;7984:5;7962:28;:::i;8025:382::-;8090:6;8098;8151:2;8139:9;8130:7;8126:23;8122:32;8119:52;;;8167:1;8164;8157:12;8119:52;8206:9;8193:23;8225:31;8250:5;8225:31;:::i;:::-;8275:5;-1:-1:-1;8332:2:1;8317:18;;8304:32;8345:30;8304:32;8345:30;:::i;8635:356::-;8837:2;8819:21;;;8856:18;;;8849:30;8915:34;8910:2;8895:18;;8888:62;8982:2;8967:18;;8635:356::o;9275:245::-;9342:6;9395:2;9383:9;9374:7;9370:23;9366:32;9363:52;;;9411:1;9408;9401:12;9363:52;9443:9;9437:16;9462:28;9484:5;9462:28;:::i;9934:127::-;9995:10;9990:3;9986:20;9983:1;9976:31;10026:4;10023:1;10016:15;10050:4;10047:1;10040:15;10066:125;10106:4;10134:1;10131;10128:8;10125:34;;;10139:18;;:::i;:::-;-1:-1:-1;10176:9:1;;10066:125::o;10196:342::-;10398:2;10380:21;;;10437:2;10417:18;;;10410:30;-1:-1:-1;;;10471:2:1;10456:18;;10449:48;10529:2;10514:18;;10196:342::o;10954:217::-;10994:1;11020;11010:132;;11064:10;11059:3;11055:20;11052:1;11045:31;11099:4;11096:1;11089:15;11127:4;11124:1;11117:15;11010:132;-1:-1:-1;11156:9:1;;10954:217::o;11176:422::-;11265:1;11308:5;11265:1;11322:270;11343:7;11333:8;11330:21;11322:270;;;11402:4;11398:1;11394:6;11390:17;11384:4;11381:27;11378:53;;;11411:18;;:::i;:::-;11461:7;11451:8;11447:22;11444:55;;;11481:16;;;;11444:55;11560:22;;;;11520:15;;;;11322:270;;;11326:3;11176:422;;;;;:::o;11603:806::-;11652:5;11682:8;11672:80;;-1:-1:-1;11723:1:1;11737:5;;11672:80;11771:4;11761:76;;-1:-1:-1;11808:1:1;11822:5;;11761:76;11853:4;11871:1;11866:59;;;;11939:1;11934:130;;;;11846:218;;11866:59;11896:1;11887:10;;11910:5;;;11934:130;11971:3;11961:8;11958:17;11955:43;;;11978:18;;:::i;:::-;-1:-1:-1;;12034:1:1;12020:16;;12049:5;;11846:218;;12148:2;12138:8;12135:16;12129:3;12123:4;12120:13;12116:36;12110:2;12100:8;12097:16;12092:2;12086:4;12083:12;12079:35;12076:77;12073:159;;;-1:-1:-1;12185:19:1;;;12217:5;;12073:159;12264:34;12289:8;12283:4;12264:34;:::i;:::-;12334:6;12330:1;12326:6;12322:19;12313:7;12310:32;12307:58;;;12345:18;;:::i;:::-;12383:20;;11603:806;-1:-1:-1;;;11603:806:1:o;12414:140::-;12472:5;12501:47;12542:4;12532:8;12528:19;12522:4;12501:47;:::i;12559:168::-;12599:7;12665:1;12661;12657:6;12653:14;12650:1;12647:21;12642:1;12635:9;12628:17;12624:45;12621:71;;;12672:18;;:::i;:::-;-1:-1:-1;12712:9:1;;12559:168::o;13084:127::-;13145:10;13140:3;13136:20;13133:1;13126:31;13176:4;13173:1;13166:15;13200:4;13197:1;13190:15;13216:127;13277:10;13272:3;13268:20;13265:1;13258:31;13308:4;13305:1;13298:15;13332:4;13329:1;13322:15;13348:135;13387:3;13408:17;;;13405:43;;13428:18;;:::i;:::-;-1:-1:-1;13475:1:1;13464:13;;13348:135::o;13488:128::-;13528:3;13559:1;13555:6;13552:1;13549:13;13546:39;;;13565:18;;:::i;:::-;-1:-1:-1;13601:9:1;;13488:128::o;19693:251::-;19763:6;19816:2;19804:9;19795:7;19791:23;19787:32;19784:52;;;19832:1;19829;19822:12;19784:52;19864:9;19858:16;19883:31;19908:5;19883:31;:::i;19949:980::-;20211:4;20259:3;20248:9;20244:19;20290:6;20279:9;20272:25;20316:2;20354:6;20349:2;20338:9;20334:18;20327:34;20397:3;20392:2;20381:9;20377:18;20370:31;20421:6;20456;20450:13;20487:6;20479;20472:22;20525:3;20514:9;20510:19;20503:26;;20564:2;20556:6;20552:15;20538:29;;20585:1;20595:195;20609:6;20606:1;20603:13;20595:195;;;20674:13;;-1:-1:-1;;;;;20670:39:1;20658:52;;20765:15;;;;20730:12;;;;20706:1;20624:9;20595:195;;;-1:-1:-1;;;;;;;20846:32:1;;;;20841:2;20826:18;;20819:60;-1:-1:-1;;;20910:3:1;20895:19;20888:35;20807:3;19949:980;-1:-1:-1;;;19949:980:1:o;21546:306::-;21634:6;21642;21650;21703:2;21691:9;21682:7;21678:23;21674:32;21671:52;;;21719:1;21716;21709:12;21671:52;21748:9;21742:16;21732:26;;21798:2;21787:9;21783:18;21777:25;21767:35;;21842:2;21831:9;21827:18;21821:25;21811:35;;21546:306;;;;;:::o

Swarm Source

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