ETH Price: $2,696.26 (-1.78%)

Token

$SHARBIFU ($SHARBIFU)
 

Overview

Max Total Supply

1,000,000,000,000 $SHARBIFU

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.487117823631684441 $SHARBIFU

Value
$0.00
0x3765e014ebcd2f5cdea4bac4e24a1e439d385284
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:
Token

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-24
*/

/*

    
       $$$$$$\  $$\   $$\  $$$$$$\  $$$$$$$\  $$$$$$$\  $$$$$$\       $$$$$$$$\ $$\   $$\ 
      $$  __$$\ $$ |  $$ |$$  __$$\ $$  __$$\ $$  __$$\ \_$$  _|      $$  _____|$$ |  $$ |
      $$ /  \__|$$ |  $$ |$$ /  $$ |$$ |  $$ |$$ |  $$ |  $$ |        $$ |      $$ |  $$ |
      \$$$$$$\  $$$$$$$$ |$$$$$$$$ |$$$$$$$  |$$$$$$$\ |  $$ |        $$$$$\    $$ |  $$ |
       \____$$\ $$  __$$ |$$  __$$ |$$  __$$< $$  __$$\   $$ |        $$  __|   $$ |  $$ |
      $$\   $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |  $$ |        $$ |      $$ |  $$ |
      \$$$$$$  |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$$$$$$  |$$$$$$\       $$ |      \$$$$$$  |
       \______/ \__|  \__|\__|  \__|\__|  \__|\_______/ \______|      \__|       \______/ 
                                                                                          
Telegram Portal : http://t.me/sharbifu
Twitter : https://twitter.com/sharbifu
Website : https://sharbifu.net
Whitepaper : https://www.sharbifu.net/_files/ugd/e29ade_8a72ed37e42344b2b885f2f1488515ac.pdf                                                                                       
                                                                                        
*/

// 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) {
        this;
        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;
    }
}

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 isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    function renouncedOwnership() 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 createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
   
    IERC20 USDC = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);  //mainnet

    // IERC20 USDC = IERC20(0xAB8ad9b129aCe7b735295440f603214514748b82);  //testnet

    IUniswapV2Router02 router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public currentIndex;

    uint256 public dividendsPerShareAccuracyFactor = 10 ** 24;
    uint256 public minPeriod = 3600;
    uint256 public minDistribution = 1 * (10 ** 6);

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IUniswapV2Router02(_router)
        : IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = USDC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(USDC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = USDC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            USDC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract Token is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "$SHARBIFU";
    string private _symbol = "$SHARBIFU";
    uint8 private _decimals = 18;

    address public marketingWallet = 0x5E47c5ddF0986FAD21b9F7308d24aB4B0922d50b;
    address public utilityWallet = 0x8Db15D4BC49234D3f012Cc1566cDeBB3Da1C1332;
    address public liquidityReciever;

    address public constant deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public constant zeroAddress = 0x0000000000000000000000000000000000000000;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public isBlacklisted;

    uint256 _buyLiquidityFee = 0;
    uint256 _buyMarketingFee = 125;
    uint256 _buyUtilityFee = 125;
    uint256 _buyRewardFee = 0;
    
    uint256 _sellLiquidityFee = 0;
    uint256 _sellMarketingFee = 125;
    uint256 _sellUtilityFee = 125;
    uint256 _sellRewardFee = 0;

    uint256 totalBuy;
    uint256 totalSell;

    uint256 constant denominator = 1000;

    uint256 private _totalSupply = 1_000_000_000_000 * 10 ** _decimals;   

    uint256 public minimumTokensBeforeSwap = 1 * 1e6 * 10 ** _decimals;

    uint256 public _maxTxAmount =  _totalSupply.mul(20).div(denominator);     //2%
    uint256 public _walletMax = _totalSupply.mul(20).div(denominator);    //2%

    bool public EnableTxLimit = true;
    bool public checkWalletLimit = true;
    bool public ActiveTrade = false;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    DividendDistributor distributor;
    address public SHARBIFUDividendReceiver;

    uint256 distributorGas = 500000;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier onlyDev {
        require(msg.sender == liquidityReciever, "Ownable: caller is not the Dev");
        _; 
    }

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
            
        address owner = address(0xF777878353b323fBbE43937F93105DDD2fCf797F);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

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

        distributor = new DividendDistributor(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        SHARBIFUDividendReceiver = address(distributor);

        liquidityReciever = owner;

        isDividendExempt[owner] = true;
        isDividendExempt[uniswapPair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[deadAddress] = true;
        isDividendExempt[zeroAddress] = true;

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

        isWalletLimitExempt[owner] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        totalBuy = _buyLiquidityFee.add(_buyMarketingFee).add(_buyUtilityFee).add(_buyRewardFee);
        totalSell = _sellLiquidityFee.add(_sellMarketingFee).add(_sellUtilityFee).add(_sellRewardFee);

        // transferOwnership(developerWallet);

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

    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 getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

     //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:from zero");
        require(recipient != address(0), "ERC20:to zero");
        require(amount > 0, "Invalid Amount");
        require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Error: Wallet is Blacklisted!");

        if(!ActiveTrade){
            require(isExcludedFromFee[sender] || isExcludedFromFee[recipient],"Trading is Paused!");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {  
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTxLimit) {
                require(amount <= _maxTxAmount,"Max Tx");
            } 

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

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

            uint256 finalAmount = shouldTakeFee(sender,recipient) ? amount : takeFee(sender, recipient, amount);

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

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

            if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} }
            if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} }

            try distributor.process(distributorGas) {} catch {}

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

    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() private lockTheSwap {
        
        uint256 contractBalance = balanceOf(address(this));

        if(contractBalance == 0) return;

        uint256 _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 _MarketingShare = _buyMarketingFee.add(_sellMarketingFee);
        uint256 _UtilityShare = _buyUtilityFee.add(_sellUtilityFee);
        // uint256 _RewardShare = _buyRewardFee.add(_sellRewardFee);

        uint totalShares = totalBuy.add(totalSell);
        if(totalShares == 0) return;

        uint256 tokensForLP = contractBalance.mul(_liquidityShare).div(totalShares).div(2);
        uint256 tokensForSwap = contractBalance.sub(tokensForLP);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance.sub(initialBalance);

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

        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountReceived.mul(_MarketingShare).div(totalETHFee);
        uint256 amountETHUtility = amountReceived.mul(_UtilityShare).div(totalETHFee);
        uint256 amountETHReward = amountReceived.sub(amountETHLiquidity).sub(amountETHMarketing).sub(amountETHUtility);

        if(amountETHMarketing > 0) 
            transferToAddressETH(marketingWallet,amountETHMarketing);

        if(amountETHUtility > 0) 
            transferToAddressETH(utilityWallet,amountETHUtility);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);

        if(amountETHReward > 0) 
            try distributor.deposit { value: amountETHReward } () {} catch {}  

    }

    function transferToAddressETH(address recipient, uint256 amount) private {
        payable(recipient).transfer(amount);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !isMarketPair[holder]);
        isDividendExempt[holder] = exempt;

        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyDev {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external onlyDev returns (bool success) {
        return distributor.rescueToken(tokenAddress, _receiver,tokens);
    }
    
    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
        );
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if(isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
            return true;
        }
        else if (isMarketPair[sender] || isMarketPair[recipient]) {
            return false;
        }
        else {
            return false;
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint feeAmount;
        
        unchecked {

            if(isMarketPair[sender]) {

                feeAmount = amount.mul(totalBuy).div(denominator);
            
            }
            else if(isMarketPair[recipient]) {
                
                feeAmount = amount.mul(totalSell).div(denominator);
                
            }     

            if(feeAmount > 0) {
                _balances[address(this)] = _balances[address(this)].add(feeAmount);
                emit Transfer(sender, address(this), feeAmount);
            }

            return amount.sub(feeAmount);
        }
        
    }

    //To Rescue Stucked Balance
    function rescueFunds() external onlyDev { 
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os,"Transaction Failed!!");
    }

    //To Rescue Stucked Tokens
    function rescueTokens(IERC20 adr,address recipient,uint amount) external onlyDev {
        adr.transfer(recipient,amount);
    }

    function enableTrading(bool _status) external onlyOwner {
        ActiveTrade = _status;
    }

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

    function enableWalletLimit(bool _status) external onlyOwner {
        checkWalletLimit = _status;
    }

    function removeLimits() external onlyOwner {
        checkWalletLimit = false;
        EnableTxLimit = false;
    }

    function enableLimits() external onlyOwner {
        checkWalletLimit = true;
        EnableTxLimit = true;   
    }

    function setBuyFee(uint _newLP , uint _newMarket , uint _newUtility ,uint _newReward) external onlyOwner {     
        _buyLiquidityFee = _newLP;
        _buyMarketingFee = _newMarket;
        _buyUtilityFee = _newUtility;
        _buyRewardFee = _newReward;
        totalBuy = _buyLiquidityFee.add(_buyMarketingFee).add(_buyUtilityFee).add(_buyRewardFee);
    }

    function setSellFee(uint _newLP , uint _newMarket , uint _newUtility, uint _newReward) external onlyOwner {        
        _sellLiquidityFee = _newLP;
        _sellMarketingFee = _newMarket;
        _sellUtilityFee = _newUtility;
        _sellRewardFee = _newReward;
        totalSell = _sellLiquidityFee.add(_sellMarketingFee).add(_sellUtilityFee).add(_sellRewardFee);
    }

    function setBlacklisted(address _user,bool _status) external onlyOwner {
        isBlacklisted[_user] = _status;
    }

    function setMarketingWallets(address _newWallet) external onlyOwner {
        marketingWallet = _newWallet;
    }

    function setLiquidityWallets(address _newWallet) external onlyOwner {
        liquidityReciever = _newWallet;
    }   

    function setUtilityWallets(address _newWallet) external onlyOwner {
        utilityWallet = _newWallet;
    }    

    function setExcludeFromFee(address _adr,bool _status) external onlyOwner {
        require(isExcludedFromFee[_adr] != _status,"Not Changed!!");
        isExcludedFromFee[_adr] = _status;
    }

    function ExcludeWalletLimit(address _adr,bool _status) external onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

    function ExcludeTxLimit(address _adr,bool _status) external onlyOwner {
        require(isTxLimitExempt[_adr] != _status,"Not Changed!!");
        isTxLimitExempt[_adr] = _status;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

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

    function setTxLimit(uint256 newLimit) external onlyOwner() {
        _maxTxAmount = newLimit;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyDev {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMarketPair(address _pair, bool _status) external onlyOwner {
        isMarketPair[_pair] = _status;
        if(_status) {
            isWalletLimitExempt[address(_pair)] = true;
            isDividendExempt[_pair] = true;
        }
    }

    function changeRouterVersion(address newRouterAddress) external 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;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isDividendExempt[address(uniswapPair)] = true;
    }

}

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":"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":"ActiveTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SHARBIFUDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_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":[],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"isOwner","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","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncedOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"adr","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLP","type":"uint256"},{"internalType":"uint256","name":"_newMarket","type":"uint256"},{"internalType":"uint256","name":"_newUtility","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setLiquidityWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLP","type":"uint256"},{"internalType":"uint256","name":"_newMarket","type":"uint256"},{"internalType":"uint256","name":"_newUtility","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setUtilityWallets","outputs":[],"stateMutability":"nonpayable","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":[{"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":"utilityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600960809081526824534841524249465560b81b60a0526001906200002a908262000882565b5060408051808201909152600981526824534841524249465560b81b60208201526002906200005a908262000882565b5060038054745e47c5ddf0986fad21b9f7308d24ab4b0922d50b126001600160a81b0319909116179055600480546001600160a01b031916738db15d4bc49234d3f012cc1566cdebb3da1c13321790556000600e819055607d600f8190556010819055601182905560128281556013829055601491909155601591909155620000e590600a62000a61565b620000f69064e8d4a5100062000a72565b6018556003546200010c9060ff16600a62000a61565b6200011b90620f424062000a72565b601955620001566103e86200014260146018546200064f60201b62001d8f1790919060201c565b620006e660201b62001e111790919060201c565b601a556200017d6103e86200014260146018546200064f60201b62001d8f1790919060201c565b601b55601c805462ffffff1916610101179055601d805460ff60a81b1916600160a81b1790556207a120602055348015620001b757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600073f777878353b323fbbe43937f93105ddd2fcf797f90506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000a8c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000304919062000a8c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000378919062000a8c565b601d80546001600160a01b0319166001600160a01b03928316179055601c80546301000000600160b81b031916630100000084841681029190911791829055306000908152600760209081526040808320939094049094168152925290819020600019905551737a250d5630b4cf539739df2c5dacb4c659f2488d90620003ff90620007cf565b6001600160a01b039091168152602001604051809103906000f0801580156200042c573d6000803e3d6000fd5b50601e80546001600160a01b039283166001600160a01b03199182168117909255601f80548216909217909155600580548584169216821790556000818152600c60209081526040808320805460ff199081166001908117909255601d80548816865283862080548316841790553080875284872080548416851790557f45117a726ea4f344045dc210793664a28d2d320b7e03f6bffdae553d24c3586c80548416851790557f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e880548416851790558087526008865284872080548416851790558787528487208054841685179055600a8652848720805484168517905581548916875284872080548416851790558087528487208054841685179055968652600b855283862080548316841790559585528285208054821683179055945490951683526009825290912080549092169092179055601154601054600f54600e54620005be94620005aa939284929162001e5362000730821b17901c565b6200073060201b62001e531790919060201c565b601681905550620005f0601554620005aa601454620005aa6013546012546200073060201b62001e531790919060201c565b6017556018546001600160a01b038316600081815260066020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000b40565b6000826000036200066357506000620006e0565b600062000671838562000a72565b90508262000680858362000ab7565b14620006dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620006dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200079360201b60201c565b6000806200073f838562000ada565b905083811015620006dd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006d4565b60008183620007b75760405162461bcd60e51b8152600401620006d4919062000af0565b506000620007c6848662000ab7565b95945050505050565b6111838062003e5683390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200080857607f821691505b6020821081036200082957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200087d57600081815260208120601f850160051c81016020861015620008585750805b601f850160051c820191505b81811015620008795782815560010162000864565b5050505b505050565b81516001600160401b038111156200089e576200089e620007dd565b620008b681620008af8454620007f3565b846200082f565b602080601f831160018114620008ee5760008415620008d55750858301515b600019600386901b1c1916600185901b17855562000879565b600085815260208120601f198616915b828110156200091f57888601518255948401946001909101908401620008fe565b50858210156200093e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009a55781600019048211156200098957620009896200094e565b808516156200099757918102915b93841c939080029062000969565b509250929050565b600082620009be57506001620006e0565b81620009cd57506000620006e0565b8160018114620009e65760028114620009f15762000a11565b6001915050620006e0565b60ff84111562000a055762000a056200094e565b50506001821b620006e0565b5060208310610133831016604e8410600b841016171562000a36575081810a620006e0565b62000a42838362000964565b806000190482111562000a595762000a596200094e565b029392505050565b6000620006dd60ff841683620009ad565b8082028115828204841417620006e057620006e06200094e565b60006020828403121562000a9f57600080fd5b81516001600160a01b0381168114620006dd57600080fd5b60008262000ad557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620006e057620006e06200094e565b600060208083528351808285015260005b8181101562000b1f5785810183015185820160400152820162000b01565b506000604082860101526040601f19601f8301168501019250505092915050565b6133068062000b506000396000f3fe6080604052600436106103bc5760003560e01c8063807c2d9c116101f2578063c6501c891161010d578063e6b2603b116100a0578063f708a64f1161006f578063f708a64f14610b64578063f872858a14610b84578063fe575a8714610ba3578063ffc0a03114610bd357600080fd5b8063e6b2603b14610aef578063ee828db314610b04578063f275f64b14610b24578063f2fde38b14610b4457600080fd5b8063d01dd6d2116100dc578063d01dd6d214610a53578063d2d7ad8314610a73578063dd62ed3e14610a89578063e653da0814610acf57600080fd5b8063c6501c89146109c3578063c816841b146109e3578063c867d60b14610a03578063cea9d26f14610a3357600080fd5b8063a457c2d711610185578063bf4cc52b11610154578063bf4cc52b14610943578063c0b4d19914610963578063c16dd4a414610983578063c49b9a80146109a357600080fd5b8063a457c2d7146108c3578063a9059cbb146108e3578063af9549e014610903578063b44cd5bc1461092357600080fd5b80638f32d59b116101c15780638f32d59b1461084e57806395d89b411461086e57806398e944c8146108835780639d1944f5146108a357600080fd5b8063807c2d9c146107ca5780638b42507f146107e05780638c5a133d146108105780638da5cb5b1461083057600080fd5b80633b97084a116102e25780635c85974f11610275578063728d41c911610244578063728d41c91461075a578063751039fc1461077a57806375f0a8741461078f5780637d1db4a5146107b457600080fd5b80635c85974f146106eb5780635e42358c1461070b5780636902ca611461072557806370a082311461073a57600080fd5b80634a74bb02116102b15780634a74bb021461065a5780635342acb41461067b5780635766d75f146106ab5780635881f3ef146106cb57600080fd5b80633b97084a146105ba5780633ecad271146105da5780634355855a1461060a5780634974d88f1461063a57600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce567146105385780633187c3041461055a57806338ec0b111461057a578063395093511461059a57600080fd5b806323b872dd146104cd57806327c8f835146104ed5780632b112e49146105035780632d48e8961461051857600080fd5b806313ea1d891161039657806313ea1d89146104505780631694505e1461047257806318160ddd1461049957806320365d5f146104b857600080fd5b806306fdde03146103c85780630930907b146103f3578063095ea7b31461042057600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610bf3565b6040516103ea9190612e3e565b60405180910390f35b3480156103ff57600080fd5b50610408600081565b6040516001600160a01b0390911681526020016103ea565b34801561042c57600080fd5b5061044061043b366004612ea1565b610c85565b60405190151581526020016103ea565b34801561045c57600080fd5b5061047061046b366004612edb565b610c9c565b005b34801561047e57600080fd5b50601c5461040890630100000090046001600160a01b031681565b3480156104a557600080fd5b506018545b6040519081526020016103ea565b3480156104c457600080fd5b50610470610d3a565b3480156104d957600080fd5b506104406104e8366004612f14565b610db4565b3480156104f957600080fd5b5061040861dead81565b34801561050f57600080fd5b506104aa610e1f565b34801561052457600080fd5b50610470610533366004612f55565b610e50565b34801561054457600080fd5b5060035460405160ff90911681526020016103ea565b34801561056657600080fd5b50601c546104409062010000900460ff1681565b34801561058657600080fd5b50610470610595366004612edb565b610ee4565b3480156105a657600080fd5b506104406105b5366004612ea1565b610f79565b3480156105c657600080fd5b506104706105d5366004612f77565b610faf565b3480156105e657600080fd5b506104406105f5366004612f90565b60096020526000908152604090205460ff1681565b34801561061657600080fd5b50610440610625366004612f90565b600c6020526000908152604090205460ff1681565b34801561064657600080fd5b50610470610655366004612fad565b610fde565b34801561066657600080fd5b50601d5461044090600160a81b900460ff1681565b34801561068757600080fd5b50610440610696366004612f90565b60086020526000908152604090205460ff1681565b3480156106b757600080fd5b50601f54610408906001600160a01b031681565b3480156106d757600080fd5b506104086106e6366004612f90565b611022565b3480156106f757600080fd5b50610470610706366004612f77565b611380565b34801561071757600080fd5b50601c546104409060ff1681565b34801561073157600080fd5b506104706113af565b34801561074657600080fd5b506104aa610755366004612f90565b6113ea565b34801561076657600080fd5b50610470610775366004612f77565b611405565b34801561078657600080fd5b50610470611434565b34801561079b57600080fd5b506003546104089061010090046001600160a01b031681565b3480156107c057600080fd5b506104aa601a5481565b3480156107d657600080fd5b506104aa601b5481565b3480156107ec57600080fd5b506104406107fb366004612f90565b600b6020526000908152604090205460ff1681565b34801561081c57600080fd5b5061047061082b366004612fca565b61146b565b34801561083c57600080fd5b506000546001600160a01b0316610408565b34801561085a57600080fd5b506000546001600160a01b03163314610440565b34801561087a57600080fd5b506103dd6114c8565b34801561088f57600080fd5b50600554610408906001600160a01b031681565b3480156108af57600080fd5b506104706108be366004612f77565b6114d7565b3480156108cf57600080fd5b506104406108de366004612ea1565b611558565b3480156108ef57600080fd5b506104406108fe366004612ea1565b6115a7565b34801561090f57600080fd5b5061047061091e366004612edb565b6115b4565b34801561092f57600080fd5b5061047061093e366004612f90565b611649565b34801561094f57600080fd5b50600454610408906001600160a01b031681565b34801561096f57600080fd5b5061047061097e366004612f90565b611695565b34801561098f57600080fd5b5061047061099e366004612edb565b6116e7565b3480156109af57600080fd5b506104706109be366004612fad565b61177e565b3480156109cf57600080fd5b506104406109de366004612f14565b611800565b3480156109ef57600080fd5b50601d54610408906001600160a01b031681565b348015610a0f57600080fd5b50610440610a1e366004612f90565b600a6020526000908152604090205460ff1681565b348015610a3f57600080fd5b50610470610a4e366004612f14565b6118b4565b348015610a5f57600080fd5b50610470610a6e366004612edb565b611957565b348015610a7f57600080fd5b506104aa60195481565b348015610a9557600080fd5b506104aa610aa4366004612ffc565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610adb57600080fd5b50610470610aea366004612fca565b6119ac565b348015610afb57600080fd5b50610470611a03565b348015610b1057600080fd5b50610470610b1f366004612fad565b611abf565b348015610b3057600080fd5b50610470610b3f366004612fad565b611afc565b348015610b5057600080fd5b50610470610b5f366004612f90565b611b42565b348015610b7057600080fd5b50610470610b7f366004612edb565b611c2c565b348015610b9057600080fd5b50601c5461044090610100900460ff1681565b348015610baf57600080fd5b50610440610bbe366004612f90565b600d6020526000908152604090205460ff1681565b348015610bdf57600080fd5b50610470610bee366004612f90565b611d43565b606060018054610c029061302a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2e9061302a565b8015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b820191906000526020600020905b815481529060010190602001808311610c5e57829003601f168201915b5050505050905090565b6000610c92338484611eb2565b5060015b92915050565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc690613064565b60405180910390fd5b6001600160a01b0382166000908152600b602052604090205481151560ff909116151503610d0f5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d645760405162461bcd60e51b8152600401610cc690613064565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000610dc1848484611fd6565b50610e148433610e0f85604051806060016040528060288152602001613284602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612618565b611eb2565b5060015b9392505050565b6000610e4b610e2e60006113ea565b610e45610e3c61dead6113ea565b60185490612652565b90612652565b905090565b6005546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610cc6906130c0565b601e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382166000908152600a602052604090205481151560ff909116151503610f4e5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c92918590610e0f9086611e53565b6000546001600160a01b03163314610fd95760405162461bcd60e51b8152600401610cc690613064565b601955565b6000546001600160a01b031633146110085760405162461bcd60e51b8152600401610cc690613064565b601c80549115156101000261ff0019909216919091179055565b600080546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610cc690613064565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b491906130f7565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906130f7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906130f7565b91506001600160a01b0382166112eb57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120691906130f7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127791906130f7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e891906130f7565b91505b601d80546001600160a01b038085166001600160a01b031990921682178355601c80549482166301000000026301000000600160b81b0319909516949094179093556000908152600960209081526040808320805460ff199081166001908117909255855487168552600a8452828520805482168317905594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146113aa5760405162461bcd60e51b8152600401610cc690613064565b601a55565b6000546001600160a01b031633146113d95760405162461bcd60e51b8152600401610cc690613064565b601c805461ffff1916610101179055565b6001600160a01b031660009081526006602052604090205490565b6000546001600160a01b0316331461142f5760405162461bcd60e51b8152600401610cc690613064565b601b55565b6000546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610cc690613064565b601c805461ffff19169055565b6000546001600160a01b031633146114955760405162461bcd60e51b8152600401610cc690613064565b600e849055600f839055601082905560118190556114bf816114b984818888611e53565b90611e53565b60165550505050565b606060028054610c029061302a565b6000546001600160a01b031633146115015760405162461bcd60e51b8152600401610cc690613064565b620b71b081106115535760405162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e203735303030300000006044820152606401610cc6565b602055565b6000610c923384610e0f856040518060600160405280602581526020016132ac602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612618565b6000610e14338484611fd6565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b03821660009081526008602052604090205481151560ff90911615150361161e5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610cc690613064565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116bf5760405162461bcd60e51b8152600401610cc690613064565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146117115760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382166000908152600960205260409020805460ff1916821580159190911790915561177a576001600160a01b0382166000908152600a602090815260408083208054600160ff199182168117909255600c9093529220805490911690911790555b5050565b6005546001600160a01b031633146117a85760405162461bcd60e51b8152600401610cc6906130c0565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117f590831515815260200190565b60405180910390a150565b6005546000906001600160a01b0316331461182d5760405162461bcd60e51b8152600401610cc6906130c0565b601e5460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613114565b949350505050565b6005546001600160a01b031633146118de5760405162461bcd60e51b8152600401610cc6906130c0565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190613114565b50505050565b6000546001600160a01b031633146119815760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119d65760405162461bcd60e51b8152600401610cc690613064565b60128490556013839055601482905560158190556119fa816114b984818888611e53565b60175550505050565b6005546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610cc6906130c0565b604051600090339047908381818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b5050905080611abc5760405162461bcd60e51b81526020600482015260146024820152735472616e73616374696f6e204661696c6564212160601b6044820152606401610cc6565b50565b6000546001600160a01b03163314611ae95760405162461bcd60e51b8152600401610cc690613064565b601c805460ff1916911515919091179055565b6000546001600160a01b03163314611b265760405162461bcd60e51b8152600401610cc690613064565b601c8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b038116611bd15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c565760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382163014801590611c8857506001600160a01b03821660009081526009602052604090205460ff16155b611c9157600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff19168215801591909117909155611cf757601e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610eae565b601e546001600160a01b03166314b6ca9683611d12816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610eae565b6000546001600160a01b03163314611d6d5760405162461bcd60e51b8152600401610cc690613064565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611da157506000610c96565b6000611dad8385613147565b905082611dba858361315e565b14610e185760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610e1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612694565b600080611e608385613180565b905083811015610e185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b038316611f145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b038216611f755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166120205760405162461bcd60e51b815260206004820152600f60248201526e45524332303a66726f6d207a65726f60881b6044820152606401610cc6565b6001600160a01b0383166120665760405162461bcd60e51b815260206004820152600d60248201526c45524332303a746f207a65726f60981b6044820152606401610cc6565b600082116120a75760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610cc6565b6001600160a01b0384166000908152600d602052604090205460ff161580156120e957506001600160a01b0383166000908152600d602052604090205460ff16155b6121355760405162461bcd60e51b815260206004820152601d60248201527f4572726f723a2057616c6c657420697320426c61636b6c6973746564210000006044820152606401610cc6565b601c5462010000900460ff166121c5576001600160a01b03841660009081526008602052604090205460ff168061218457506001600160a01b03831660009081526008602052604090205460ff165b6121c55760405162461bcd60e51b815260206004820152601260248201527154726164696e67206973205061757365642160701b6044820152606401610cc6565b601d54600160a01b900460ff16156121e9576121e28484846126c2565b9050610e18565b6001600160a01b0384166000908152600b602052604090205460ff1615801561222b57506001600160a01b0383166000908152600b602052604090205460ff16155b80156122395750601c5460ff165b1561227957601a548211156122795760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8f60d31b6044820152606401610cc6565b6000612284306113ea565b601954909150811080159081906122a55750601d54600160a01b900460ff16155b80156122ca57506001600160a01b03861660009081526009602052604090205460ff16155b80156122df5750601d54600160a81b900460ff165b156122ec576122ec6127a8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526006909152919091205461233e918690612618565b6001600160a01b03871660009081526006602052604081209190915561236487876129df565b61237857612373878787612a7f565b61237a565b845b601c54909150610100900460ff1680156123ad57506001600160a01b0386166000908152600a602052604090205460ff16155b156123fd57601b546123c2826114b9896113ea565b11156123fd5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610cc6565b6001600160a01b0386166000908152600660205260409020546124209082611e53565b6001600160a01b03808816600090815260066020908152604080832094909455918a168152600c909152205460ff166124c757601e546001600160a01b03166314b6ca968861246e816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124b457600080fd5b505af19250505080156124c5575060015b505b6001600160a01b0386166000908152600c602052604090205460ff1661255b57601e546001600160a01b03166314b6ca9687612502816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561254857600080fd5b505af1925050508015612559575060015b505b601e546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916125939160040190815260200190565b600060405180830381600087803b1580156125ad57600080fd5b505af19250505080156125be575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161260491815260200190565b60405180910390a360019350505050610e18565b6000818484111561263c5760405162461bcd60e51b8152600401610cc69190612e3e565b5060006126498486613193565b95945050505050565b6000610e1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612618565b600081836126b55760405162461bcd60e51b8152600401610cc69190612e3e565b506000612649848661315e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054612713918490612618565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127429083611e53565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127969086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b17905560006127c6306113ea565b9050806000036127d657506129d0565b60006127ef601254600e54611e5390919063ffffffff16565b9050600061280a601354600f54611e5390919063ffffffff16565b90506000612825601454601054611e5390919063ffffffff16565b90506000612840601754601654611e5390919063ffffffff16565b9050806000036128545750505050506129d0565b600061286d600261286784818a8a611d8f565b90611e11565b9050600061287b8783612652565b90504761288782612b87565b60006128934783612652565b905060006128ac6128a58a6002611e11565b8790612652565b905060006128c160026128678481878f611d8f565b905060006128d383612867868d611d8f565b905060006128e584612867878d611d8f565b905060006128f982610e4585818a89612652565b9050821561291c5760035461291c9061010090046001600160a01b031684612d41565b811561293857600454612938906001600160a01b031683612d41565b6000841180156129485750600089115b15612957576129578985612d7c565b80156129c157601e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129ad57600080fd5b505af1935050505080156129bf575060015b505b50505050505050505050505050505b601d805460ff60a01b19169055565b6001600160a01b03821660009081526008602052604081205460ff1680612a1e57506001600160a01b03821660009081526008602052604090205460ff165b15612a2b57506001610c96565b6001600160a01b03831660009081526009602052604090205460ff1680612a6a57506001600160a01b03821660009081526009602052604090205460ff165b15612a7757506000610c96565b506000610c96565b6001600160a01b038316600090815260096020526040812054819060ff1615612ac457612abd6103e861286760165486611d8f90919063ffffffff16565b9050612b03565b6001600160a01b03841660009081526009602052604090205460ff1615612b0357612b006103e861286760175486611d8f90919063ffffffff16565b90505b8015612b7d5730600090815260066020526040902054612b239082611e53565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b749085815260200190565b60405180910390a35b6126498382612652565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bbc57612bbc6131a6565b60200260200101906001600160a01b031690816001600160a01b031681525050601c60039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906130f7565b81600181518110612c6657612c666131a6565b6001600160a01b039283166020918202929092010152601c54612c93913091630100000090041684611eb2565b601c5460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612cd2908590600090869030904290600401613200565b600060405180830381600087803b158015612cec57600080fd5b505af1158015612d00573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d3592919061323c565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612d77573d6000803e3d6000fd5b505050565b601c54612d9b903090630100000090046001600160a01b031684611eb2565b601c5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af1158015612e12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e379190613255565b5050505050565b600060208083528351808285015260005b81811015612e6b57858101830151858201604001528201612e4f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611abc57600080fd5b60008060408385031215612eb457600080fd5b8235612ebf81612e8c565b946020939093013593505050565b8015158114611abc57600080fd5b60008060408385031215612eee57600080fd5b8235612ef981612e8c565b91506020830135612f0981612ecd565b809150509250929050565b600080600060608486031215612f2957600080fd5b8335612f3481612e8c565b92506020840135612f4481612e8c565b929592945050506040919091013590565b60008060408385031215612f6857600080fd5b50508035926020909101359150565b600060208284031215612f8957600080fd5b5035919050565b600060208284031215612fa257600080fd5b8135610e1881612e8c565b600060208284031215612fbf57600080fd5b8135610e1881612ecd565b60008060008060808587031215612fe057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561300f57600080fd5b823561301a81612e8c565b91506020830135612f0981612e8c565b600181811c9082168061303e57607f821691505b60208210810361305e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600d908201526c4e6f74204368616e676564212160981b604082015260600190565b6020808252601e908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204465760000604082015260600190565b60006020828403121561310957600080fd5b8151610e1881612e8c565b60006020828403121561312657600080fd5b8151610e1881612ecd565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9657610c96613131565b60008261317b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c9657610c96613131565b81810381811115610c9657610c96613131565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156131f55781516001600160a01b0316875295820195908201906001016131d0565b509495945050505050565b85815284602082015260a06040820152600061321f60a08301866131bc565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006118ac60408301846131bc565b60008060006060848603121561326a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220060dd432b0dd59aebd3957b0e182411707873d20984603172877fee4a734022264736f6c634300081100336080604052600180546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4817905569d3c21bcecceda1000000600c55610e10600d55620f4240600e5534801561005157600080fd5b50604051611183380380611183833981016040819052610070916100ca565b6001600160a01b03811661009857737a250d5630b4cf539739df2c5dacb4c659f2488d61009a565b805b600280546001600160a01b03929092166001600160a01b03199283161790556000805490911633179055506100fa565b6000602082840312156100dc57600080fd5b81516001600160a01b03811681146100f357600080fd5b9392505050565b61107a806101096000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed14610280578063f0fc6bca14610296578063ffb2c479146102ab578063ffd49c84146102cb57600080fd5b8063ce7c2ac2146101db578063d0e30db014610232578063e2d2e2191461023a578063e5711e8b1461025057600080fd5b80632d48e896116100c65780632d48e896146101795780633a98ef39146101995780634fab0ae8146101af578063997664d7146101c557600080fd5b806311ce023d146100f857806314b6ca961461012157806326987b601461014357806328fd319814610159575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610db5565b6102e1565b005b34801561014f57600080fd5b5061010e600b5481565b34801561016557600080fd5b5061010e610174366004610de1565b610459565b34801561018557600080fd5b50610141610194366004610dfe565b6104e4565b3480156101a557600080fd5b5061010e60075481565b3480156101bb57600080fd5b5061010e600e5481565b3480156101d157600080fd5b5061010e60085481565b3480156101e757600080fd5b506102176101f6366004610de1565b60066020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b610141610506565b34801561024657600080fd5b5061010e600a5481565b34801561025c57600080fd5b5061027061026b366004610e20565b610795565b6040519015158152602001610118565b34801561028c57600080fd5b5061010e60095481565b3480156102a257600080fd5b50610141610820565b3480156102b757600080fd5b506101416102c6366004610e61565b61082b565b3480156102d757600080fd5b5061010e600d5481565b6000546001600160a01b031633146102f857600080fd5b6001600160a01b0382166000908152600660205260409020541561031f5761031f82610930565b60008111801561034557506001600160a01b038216600090815260066020526040902054155b156103ab57600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790556103de565b801580156103d057506001600160a01b03821660009081526006602052604090205415155b156103de576103de82610a4e565b6001600160a01b03821660009081526006602052604090205460075461040f91839161040991610b63565b90610bae565b6007556001600160a01b038216600090815260066020526040902081905561043681610c12565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6001600160a01b038116600090815260066020526040812054810361048057506000919050565b6001600160a01b0382166000908152600660205260408120546104a290610c12565b6001600160a01b0384166000908152600660205260409020600101549091508082116104d2575060009392505050565b6104dc8282610b63565b949350505050565b6000546001600160a01b031633146104fb57600080fd5b600d91909155600e55565b6000546001600160a01b0316331461051d57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a9190610e7a565b60408051600280825260608201835292935060009290916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156105f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061d9190610e93565b8160008151811061063057610630610eb0565b6001600160a01b039283166020918202929092010152600180548351921691839190811061066057610660610eb0565b6001600160a01b03928316602091820292909201015260025460405163b6f9de9560e01b815291169063b6f9de959034906106a690600090869030904290600401610ec6565b6000604051808303818588803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061075393508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074d9190610e7a565b90610b63565b6008549091506107639082610bae565b600855600754600c5461078d916107849161077e9085610c2f565b90610cb1565b600a5490610bae565b600a55505050565b600080546001600160a01b031633146107ad57600080fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af11580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dc9190610f30565b61082933610930565b565b6000546001600160a01b0316331461084257600080fd5b6003546000819003610852575050565b6000805a905060005b848310801561086957508381105b156109285783600b541061087d576000600b555b6108af6003600b548154811061089557610895610eb0565b6000918252602090912001546001600160a01b0316610cf3565b156108e6576108e66003600b54815481106108cc576108cc610eb0565b6000918252602090912001546001600160a01b0316610930565b6108fb6108f45a8490610b63565b8490610bae565b92505a600b8054919350600061091083610f68565b9190505550808061092090610f68565b91505061085b565b505050505b50565b6001600160a01b03811660009081526006602052604081205490036109525750565b600061095d82610459565b90508015610a4a576009546109729082610bae565b60095560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190610f30565b506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610a209082610bae565b6001600160a01b038316600090815260066020526040902060028101919091555461043690610c12565b5050565b60038054610a5e90600190610f81565b81548110610a6e57610a6e610eb0565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610aac57610aac610eb0565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610af890600190610f81565b81548110610b0857610b08610eb0565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610b3e57610b3e610f94565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610ba583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d38565b90505b92915050565b600080610bbb8385610faa565b905083811015610ba55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610ba8600c5461077e600a5485610c2f90919063ffffffff16565b600082600003610c4157506000610ba8565b6000610c4d8385610fbd565b905082610c5a8583610fd4565b14610ba55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c09565b6000610ba583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d72565b600d546001600160a01b03821660009081526005602052604081205490914291610d1d9190610faa565b108015610ba85750600e54610d3183610459565b1192915050565b60008184841115610d5c5760405162461bcd60e51b8152600401610c099190610ff6565b506000610d698486610f81565b95945050505050565b60008183610d935760405162461bcd60e51b8152600401610c099190610ff6565b506000610d698486610fd4565b6001600160a01b038116811461092d57600080fd5b60008060408385031215610dc857600080fd5b8235610dd381610da0565b946020939093013593505050565b600060208284031215610df357600080fd5b8135610ba581610da0565b60008060408385031215610e1157600080fd5b50508035926020909101359150565b600080600060608486031215610e3557600080fd5b8335610e4081610da0565b92506020840135610e5081610da0565b929592945050506040919091013590565b600060208284031215610e7357600080fd5b5035919050565b600060208284031215610e8c57600080fd5b5051919050565b600060208284031215610ea557600080fd5b8151610ba581610da0565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610f105784516001600160a01b031683529383019391830191600101610eeb565b50506001600160a01b039690961660408501525050506060015292915050565b600060208284031215610f4257600080fd5b81518015158114610ba557600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610f7a57610f7a610f52565b5060010190565b81810381811115610ba857610ba8610f52565b634e487b7160e01b600052603160045260246000fd5b80820180821115610ba857610ba8610f52565b8082028115828204841417610ba857610ba8610f52565b600082610ff157634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561102357858101830151858201604001528201611007565b506000604082860101526040601f19601f830116850101925050509291505056fea264697066735822122081760c53e53459e241a72cdbf9bdd44907dfe65126fad66e6dfeeb2d75e9fbd164736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c8063807c2d9c116101f2578063c6501c891161010d578063e6b2603b116100a0578063f708a64f1161006f578063f708a64f14610b64578063f872858a14610b84578063fe575a8714610ba3578063ffc0a03114610bd357600080fd5b8063e6b2603b14610aef578063ee828db314610b04578063f275f64b14610b24578063f2fde38b14610b4457600080fd5b8063d01dd6d2116100dc578063d01dd6d214610a53578063d2d7ad8314610a73578063dd62ed3e14610a89578063e653da0814610acf57600080fd5b8063c6501c89146109c3578063c816841b146109e3578063c867d60b14610a03578063cea9d26f14610a3357600080fd5b8063a457c2d711610185578063bf4cc52b11610154578063bf4cc52b14610943578063c0b4d19914610963578063c16dd4a414610983578063c49b9a80146109a357600080fd5b8063a457c2d7146108c3578063a9059cbb146108e3578063af9549e014610903578063b44cd5bc1461092357600080fd5b80638f32d59b116101c15780638f32d59b1461084e57806395d89b411461086e57806398e944c8146108835780639d1944f5146108a357600080fd5b8063807c2d9c146107ca5780638b42507f146107e05780638c5a133d146108105780638da5cb5b1461083057600080fd5b80633b97084a116102e25780635c85974f11610275578063728d41c911610244578063728d41c91461075a578063751039fc1461077a57806375f0a8741461078f5780637d1db4a5146107b457600080fd5b80635c85974f146106eb5780635e42358c1461070b5780636902ca611461072557806370a082311461073a57600080fd5b80634a74bb02116102b15780634a74bb021461065a5780635342acb41461067b5780635766d75f146106ab5780635881f3ef146106cb57600080fd5b80633b97084a146105ba5780633ecad271146105da5780634355855a1461060a5780634974d88f1461063a57600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce567146105385780633187c3041461055a57806338ec0b111461057a578063395093511461059a57600080fd5b806323b872dd146104cd57806327c8f835146104ed5780632b112e49146105035780632d48e8961461051857600080fd5b806313ea1d891161039657806313ea1d89146104505780631694505e1461047257806318160ddd1461049957806320365d5f146104b857600080fd5b806306fdde03146103c85780630930907b146103f3578063095ea7b31461042057600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610bf3565b6040516103ea9190612e3e565b60405180910390f35b3480156103ff57600080fd5b50610408600081565b6040516001600160a01b0390911681526020016103ea565b34801561042c57600080fd5b5061044061043b366004612ea1565b610c85565b60405190151581526020016103ea565b34801561045c57600080fd5b5061047061046b366004612edb565b610c9c565b005b34801561047e57600080fd5b50601c5461040890630100000090046001600160a01b031681565b3480156104a557600080fd5b506018545b6040519081526020016103ea565b3480156104c457600080fd5b50610470610d3a565b3480156104d957600080fd5b506104406104e8366004612f14565b610db4565b3480156104f957600080fd5b5061040861dead81565b34801561050f57600080fd5b506104aa610e1f565b34801561052457600080fd5b50610470610533366004612f55565b610e50565b34801561054457600080fd5b5060035460405160ff90911681526020016103ea565b34801561056657600080fd5b50601c546104409062010000900460ff1681565b34801561058657600080fd5b50610470610595366004612edb565b610ee4565b3480156105a657600080fd5b506104406105b5366004612ea1565b610f79565b3480156105c657600080fd5b506104706105d5366004612f77565b610faf565b3480156105e657600080fd5b506104406105f5366004612f90565b60096020526000908152604090205460ff1681565b34801561061657600080fd5b50610440610625366004612f90565b600c6020526000908152604090205460ff1681565b34801561064657600080fd5b50610470610655366004612fad565b610fde565b34801561066657600080fd5b50601d5461044090600160a81b900460ff1681565b34801561068757600080fd5b50610440610696366004612f90565b60086020526000908152604090205460ff1681565b3480156106b757600080fd5b50601f54610408906001600160a01b031681565b3480156106d757600080fd5b506104086106e6366004612f90565b611022565b3480156106f757600080fd5b50610470610706366004612f77565b611380565b34801561071757600080fd5b50601c546104409060ff1681565b34801561073157600080fd5b506104706113af565b34801561074657600080fd5b506104aa610755366004612f90565b6113ea565b34801561076657600080fd5b50610470610775366004612f77565b611405565b34801561078657600080fd5b50610470611434565b34801561079b57600080fd5b506003546104089061010090046001600160a01b031681565b3480156107c057600080fd5b506104aa601a5481565b3480156107d657600080fd5b506104aa601b5481565b3480156107ec57600080fd5b506104406107fb366004612f90565b600b6020526000908152604090205460ff1681565b34801561081c57600080fd5b5061047061082b366004612fca565b61146b565b34801561083c57600080fd5b506000546001600160a01b0316610408565b34801561085a57600080fd5b506000546001600160a01b03163314610440565b34801561087a57600080fd5b506103dd6114c8565b34801561088f57600080fd5b50600554610408906001600160a01b031681565b3480156108af57600080fd5b506104706108be366004612f77565b6114d7565b3480156108cf57600080fd5b506104406108de366004612ea1565b611558565b3480156108ef57600080fd5b506104406108fe366004612ea1565b6115a7565b34801561090f57600080fd5b5061047061091e366004612edb565b6115b4565b34801561092f57600080fd5b5061047061093e366004612f90565b611649565b34801561094f57600080fd5b50600454610408906001600160a01b031681565b34801561096f57600080fd5b5061047061097e366004612f90565b611695565b34801561098f57600080fd5b5061047061099e366004612edb565b6116e7565b3480156109af57600080fd5b506104706109be366004612fad565b61177e565b3480156109cf57600080fd5b506104406109de366004612f14565b611800565b3480156109ef57600080fd5b50601d54610408906001600160a01b031681565b348015610a0f57600080fd5b50610440610a1e366004612f90565b600a6020526000908152604090205460ff1681565b348015610a3f57600080fd5b50610470610a4e366004612f14565b6118b4565b348015610a5f57600080fd5b50610470610a6e366004612edb565b611957565b348015610a7f57600080fd5b506104aa60195481565b348015610a9557600080fd5b506104aa610aa4366004612ffc565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610adb57600080fd5b50610470610aea366004612fca565b6119ac565b348015610afb57600080fd5b50610470611a03565b348015610b1057600080fd5b50610470610b1f366004612fad565b611abf565b348015610b3057600080fd5b50610470610b3f366004612fad565b611afc565b348015610b5057600080fd5b50610470610b5f366004612f90565b611b42565b348015610b7057600080fd5b50610470610b7f366004612edb565b611c2c565b348015610b9057600080fd5b50601c5461044090610100900460ff1681565b348015610baf57600080fd5b50610440610bbe366004612f90565b600d6020526000908152604090205460ff1681565b348015610bdf57600080fd5b50610470610bee366004612f90565b611d43565b606060018054610c029061302a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2e9061302a565b8015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b820191906000526020600020905b815481529060010190602001808311610c5e57829003601f168201915b5050505050905090565b6000610c92338484611eb2565b5060015b92915050565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610cc690613064565b60405180910390fd5b6001600160a01b0382166000908152600b602052604090205481151560ff909116151503610d0f5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d645760405162461bcd60e51b8152600401610cc690613064565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000610dc1848484611fd6565b50610e148433610e0f85604051806060016040528060288152602001613284602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612618565b611eb2565b5060015b9392505050565b6000610e4b610e2e60006113ea565b610e45610e3c61dead6113ea565b60185490612652565b90612652565b905090565b6005546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610cc6906130c0565b601e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382166000908152600a602052604090205481151560ff909116151503610f4e5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c92918590610e0f9086611e53565b6000546001600160a01b03163314610fd95760405162461bcd60e51b8152600401610cc690613064565b601955565b6000546001600160a01b031633146110085760405162461bcd60e51b8152600401610cc690613064565b601c80549115156101000261ff0019909216919091179055565b600080546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610cc690613064565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b491906130f7565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906130f7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906130f7565b91506001600160a01b0382166112eb57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120691906130f7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127791906130f7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e891906130f7565b91505b601d80546001600160a01b038085166001600160a01b031990921682178355601c80549482166301000000026301000000600160b81b0319909516949094179093556000908152600960209081526040808320805460ff199081166001908117909255855487168552600a8452828520805482168317905594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146113aa5760405162461bcd60e51b8152600401610cc690613064565b601a55565b6000546001600160a01b031633146113d95760405162461bcd60e51b8152600401610cc690613064565b601c805461ffff1916610101179055565b6001600160a01b031660009081526006602052604090205490565b6000546001600160a01b0316331461142f5760405162461bcd60e51b8152600401610cc690613064565b601b55565b6000546001600160a01b0316331461145e5760405162461bcd60e51b8152600401610cc690613064565b601c805461ffff19169055565b6000546001600160a01b031633146114955760405162461bcd60e51b8152600401610cc690613064565b600e849055600f839055601082905560118190556114bf816114b984818888611e53565b90611e53565b60165550505050565b606060028054610c029061302a565b6000546001600160a01b031633146115015760405162461bcd60e51b8152600401610cc690613064565b620b71b081106115535760405162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e203735303030300000006044820152606401610cc6565b602055565b6000610c923384610e0f856040518060600160405280602581526020016132ac602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612618565b6000610e14338484611fd6565b6000546001600160a01b031633146115de5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b03821660009081526008602052604090205481151560ff90911615150361161e5760405162461bcd60e51b8152600401610cc690613099565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610cc690613064565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116bf5760405162461bcd60e51b8152600401610cc690613064565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146117115760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382166000908152600960205260409020805460ff1916821580159190911790915561177a576001600160a01b0382166000908152600a602090815260408083208054600160ff199182168117909255600c9093529220805490911690911790555b5050565b6005546001600160a01b031633146117a85760405162461bcd60e51b8152600401610cc6906130c0565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117f590831515815260200190565b60405180910390a150565b6005546000906001600160a01b0316331461182d5760405162461bcd60e51b8152600401610cc6906130c0565b601e5460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303816000875af1158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613114565b949350505050565b6005546001600160a01b031633146118de5760405162461bcd60e51b8152600401610cc6906130c0565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561192d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119519190613114565b50505050565b6000546001600160a01b031633146119815760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119d65760405162461bcd60e51b8152600401610cc690613064565b60128490556013839055601482905560158190556119fa816114b984818888611e53565b60175550505050565b6005546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610cc6906130c0565b604051600090339047908381818185875af1925050503d8060008114611a6f576040519150601f19603f3d011682016040523d82523d6000602084013e611a74565b606091505b5050905080611abc5760405162461bcd60e51b81526020600482015260146024820152735472616e73616374696f6e204661696c6564212160601b6044820152606401610cc6565b50565b6000546001600160a01b03163314611ae95760405162461bcd60e51b8152600401610cc690613064565b601c805460ff1916911515919091179055565b6000546001600160a01b03163314611b265760405162461bcd60e51b8152600401610cc690613064565b601c8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b038116611bd15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc6565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c565760405162461bcd60e51b8152600401610cc690613064565b6001600160a01b0382163014801590611c8857506001600160a01b03821660009081526009602052604090205460ff16155b611c9157600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff19168215801591909117909155611cf757601e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610eae565b601e546001600160a01b03166314b6ca9683611d12816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610eae565b6000546001600160a01b03163314611d6d5760405162461bcd60e51b8152600401610cc690613064565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611da157506000610c96565b6000611dad8385613147565b905082611dba858361315e565b14610e185760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc6565b6000610e1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612694565b600080611e608385613180565b905083811015610e185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc6565b6001600160a01b038316611f145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc6565b6001600160a01b038216611f755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc6565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166120205760405162461bcd60e51b815260206004820152600f60248201526e45524332303a66726f6d207a65726f60881b6044820152606401610cc6565b6001600160a01b0383166120665760405162461bcd60e51b815260206004820152600d60248201526c45524332303a746f207a65726f60981b6044820152606401610cc6565b600082116120a75760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610cc6565b6001600160a01b0384166000908152600d602052604090205460ff161580156120e957506001600160a01b0383166000908152600d602052604090205460ff16155b6121355760405162461bcd60e51b815260206004820152601d60248201527f4572726f723a2057616c6c657420697320426c61636b6c6973746564210000006044820152606401610cc6565b601c5462010000900460ff166121c5576001600160a01b03841660009081526008602052604090205460ff168061218457506001600160a01b03831660009081526008602052604090205460ff165b6121c55760405162461bcd60e51b815260206004820152601260248201527154726164696e67206973205061757365642160701b6044820152606401610cc6565b601d54600160a01b900460ff16156121e9576121e28484846126c2565b9050610e18565b6001600160a01b0384166000908152600b602052604090205460ff1615801561222b57506001600160a01b0383166000908152600b602052604090205460ff16155b80156122395750601c5460ff165b1561227957601a548211156122795760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8f60d31b6044820152606401610cc6565b6000612284306113ea565b601954909150811080159081906122a55750601d54600160a01b900460ff16155b80156122ca57506001600160a01b03861660009081526009602052604090205460ff16155b80156122df5750601d54600160a81b900460ff165b156122ec576122ec6127a8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526006909152919091205461233e918690612618565b6001600160a01b03871660009081526006602052604081209190915561236487876129df565b61237857612373878787612a7f565b61237a565b845b601c54909150610100900460ff1680156123ad57506001600160a01b0386166000908152600a602052604090205460ff16155b156123fd57601b546123c2826114b9896113ea565b11156123fd5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610cc6565b6001600160a01b0386166000908152600660205260409020546124209082611e53565b6001600160a01b03808816600090815260066020908152604080832094909455918a168152600c909152205460ff166124c757601e546001600160a01b03166314b6ca968861246e816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124b457600080fd5b505af19250505080156124c5575060015b505b6001600160a01b0386166000908152600c602052604090205460ff1661255b57601e546001600160a01b03166314b6ca9687612502816113ea565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561254857600080fd5b505af1925050508015612559575060015b505b601e546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916125939160040190815260200190565b600060405180830381600087803b1580156125ad57600080fd5b505af19250505080156125be575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161260491815260200190565b60405180910390a360019350505050610e18565b6000818484111561263c5760405162461bcd60e51b8152600401610cc69190612e3e565b5060006126498486613193565b95945050505050565b6000610e1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612618565b600081836126b55760405162461bcd60e51b8152600401610cc69190612e3e565b506000612649848661315e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054612713918490612618565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546127429083611e53565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127969086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b17905560006127c6306113ea565b9050806000036127d657506129d0565b60006127ef601254600e54611e5390919063ffffffff16565b9050600061280a601354600f54611e5390919063ffffffff16565b90506000612825601454601054611e5390919063ffffffff16565b90506000612840601754601654611e5390919063ffffffff16565b9050806000036128545750505050506129d0565b600061286d600261286784818a8a611d8f565b90611e11565b9050600061287b8783612652565b90504761288782612b87565b60006128934783612652565b905060006128ac6128a58a6002611e11565b8790612652565b905060006128c160026128678481878f611d8f565b905060006128d383612867868d611d8f565b905060006128e584612867878d611d8f565b905060006128f982610e4585818a89612652565b9050821561291c5760035461291c9061010090046001600160a01b031684612d41565b811561293857600454612938906001600160a01b031683612d41565b6000841180156129485750600089115b15612957576129578985612d7c565b80156129c157601e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156129ad57600080fd5b505af1935050505080156129bf575060015b505b50505050505050505050505050505b601d805460ff60a01b19169055565b6001600160a01b03821660009081526008602052604081205460ff1680612a1e57506001600160a01b03821660009081526008602052604090205460ff165b15612a2b57506001610c96565b6001600160a01b03831660009081526009602052604090205460ff1680612a6a57506001600160a01b03821660009081526009602052604090205460ff165b15612a7757506000610c96565b506000610c96565b6001600160a01b038316600090815260096020526040812054819060ff1615612ac457612abd6103e861286760165486611d8f90919063ffffffff16565b9050612b03565b6001600160a01b03841660009081526009602052604090205460ff1615612b0357612b006103e861286760175486611d8f90919063ffffffff16565b90505b8015612b7d5730600090815260066020526040902054612b239082611e53565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b749085815260200190565b60405180910390a35b6126498382612652565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bbc57612bbc6131a6565b60200260200101906001600160a01b031690816001600160a01b031681525050601c60039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5391906130f7565b81600181518110612c6657612c666131a6565b6001600160a01b039283166020918202929092010152601c54612c93913091630100000090041684611eb2565b601c5460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612cd2908590600090869030904290600401613200565b600060405180830381600087803b158015612cec57600080fd5b505af1158015612d00573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d3592919061323c565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612d77573d6000803e3d6000fd5b505050565b601c54612d9b903090630100000090046001600160a01b031684611eb2565b601c5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af1158015612e12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e379190613255565b5050505050565b600060208083528351808285015260005b81811015612e6b57858101830151858201604001528201612e4f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611abc57600080fd5b60008060408385031215612eb457600080fd5b8235612ebf81612e8c565b946020939093013593505050565b8015158114611abc57600080fd5b60008060408385031215612eee57600080fd5b8235612ef981612e8c565b91506020830135612f0981612ecd565b809150509250929050565b600080600060608486031215612f2957600080fd5b8335612f3481612e8c565b92506020840135612f4481612e8c565b929592945050506040919091013590565b60008060408385031215612f6857600080fd5b50508035926020909101359150565b600060208284031215612f8957600080fd5b5035919050565b600060208284031215612fa257600080fd5b8135610e1881612e8c565b600060208284031215612fbf57600080fd5b8135610e1881612ecd565b60008060008060808587031215612fe057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561300f57600080fd5b823561301a81612e8c565b91506020830135612f0981612e8c565b600181811c9082168061303e57607f821691505b60208210810361305e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600d908201526c4e6f74204368616e676564212160981b604082015260600190565b6020808252601e908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204465760000604082015260600190565b60006020828403121561310957600080fd5b8151610e1881612e8c565b60006020828403121561312657600080fd5b8151610e1881612ecd565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c9657610c96613131565b60008261317b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c9657610c96613131565b81810381811115610c9657610c96613131565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156131f55781516001600160a01b0316875295820195908201906001016131d0565b509495945050505050565b85815284602082015260a06040820152600061321f60a08301866131bc565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006118ac60408301846131bc565b60008060006060848603121561326a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220060dd432b0dd59aebd3957b0e182411707873d20984603172877fee4a734022264736f6c63430008110033

Deployed Bytecode Sourcemap

11934:18980:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16330:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12440:80;;;;;;;;;;;;12478:42;12440:80;;;;;-1:-1:-1;;;;;731:32:1;;;713:51;;701:2;686:18;12440:80:0;567:203:1;17500:161:0;;;;;;;;;;-1:-1:-1;17500:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;17500:161:0;1231:187:1;29051:188:0;;;;;;;;;;-1:-1:-1;29051:188:0;;;;;:::i;:::-;;:::i;:::-;;13815:41;;;;;;;;;;-1:-1:-1;13815:41:0;;;;;;;-1:-1:-1;;;;;13815:41:0;;;16607:100;;;;;;;;;;-1:-1:-1;16687:12:0;;16607:100;;;2313:25:1;;;2301:2;2286:18;16607:100:0;2167:177:1;4138:231:0;;;;;;;;;;;;;:::i;18451:313::-;;;;;;;;;;-1:-1:-1;18451:313:0;;;;;:::i;:::-;;:::i;12353:80::-;;;;;;;;;;;;12391:42;12353:80;;18018:156;;;;;;;;;;;;;:::i;23672:180::-;;;;;;;;;;-1:-1:-1;23672:180:0;;;;;:::i;:::-;;:::i;16516:83::-;;;;;;;;;;-1:-1:-1;16582:9:0;;16516:83;;16582:9;;;;3205:36:1;;3193:2;3178:18;16516:83:0;3063:184:1;13775:31:0;;;;;;;;;;-1:-1:-1;13775:31:0;;;;;;;;;;;28843:200;;;;;;;;;;-1:-1:-1;28843:200:0;;;;;:::i;:::-;;:::i;16997:218::-;;;;;;;;;;-1:-1:-1;16997:218:0;;;;;:::i;:::-;;:::i;29247:124::-;;;;;;;;;;-1:-1:-1;29247:124:0;;;;;:::i;:::-;;:::i;12717:45::-;;;;;;;;;;-1:-1:-1;12717:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12883:48;;;;;;;;;;-1:-1:-1;12883:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27005:105;;;;;;;;;;-1:-1:-1;27005:105:0;;;;;:::i;:::-;;:::i;13930:40::-;;;;;;;;;;-1:-1:-1;13930:40:0;;;;-1:-1:-1;;;13930:40:0;;;;;;12660:50;;;;;;;;;;-1:-1:-1;12660:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14017:39;;;;;;;;;;-1:-1:-1;14017:39:0;;;;-1:-1:-1;;;;;14017:39:0;;;30044:865;;;;;;;;;;-1:-1:-1;30044:865:0;;;;;:::i;:::-;;:::i;29493:101::-;;;;;;;;;;-1:-1:-1;29493:101:0;;;;;:::i;:::-;;:::i;13694:32::-;;;;;;;;;;-1:-1:-1;13694:32:0;;;;;;;;27244:119;;;;;;;;;;;;;:::i;16715:123::-;;;;;;;;;;-1:-1:-1;16715:123:0;;;;;:::i;:::-;;:::i;29379:106::-;;;;;;;;;;-1:-1:-1;29379:106:0;;;;;:::i;:::-;;:::i;27118:118::-;;;;;;;;;;;;;:::i;12150:75::-;;;;;;;;;;-1:-1:-1;12150:75:0;;;;;;;-1:-1:-1;;;;;12150:75:0;;;13528:68;;;;;;;;;;;;;;;;13612:65;;;;;;;;;;;;;;;;12828:48;;;;;;;;;;-1:-1:-1;12828:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27371:369;;;;;;;;;;-1:-1:-1;27371:369:0;;;;;:::i;:::-;;:::i;3813:79::-;;;;;;;;;;-1:-1:-1;3851:7:0;3878:6;-1:-1:-1;;;;;3878:6:0;3813:79;;4038:92;;;;;;;;;;-1:-1:-1;4078:4:0;4116:6;-1:-1:-1;;;;;4116:6:0;4102:10;:20;4038:92;;16421:87;;;;;;;;;;;;;:::i;12312:32::-;;;;;;;;;;-1:-1:-1;12312:32:0;;;;-1:-1:-1;;;;;12312:32:0;;;23129:168;;;;;;;;;;-1:-1:-1;23129:168:0;;;;;:::i;:::-;;:::i;17223:269::-;;;;;;;;;;-1:-1:-1;17223:269:0;;;;;:::i;:::-;;:::i;18276:167::-;;;;;;;;;;-1:-1:-1;18276:167:0;;;;;:::i;:::-;;:::i;28640:195::-;;;;;;;;;;-1:-1:-1;28640:195:0;;;;;:::i;:::-;;:::i;28517:111::-;;;;;;;;;;-1:-1:-1;28517:111:0;;;;;:::i;:::-;;:::i;12232:73::-;;;;;;;;;;-1:-1:-1;12232:73:0;;;;-1:-1:-1;;;;;12232:73:0;;;28266:115;;;;;;;;;;-1:-1:-1;28266:115:0;;;;;:::i;:::-;;:::i;29781:255::-;;;;;;;;;;-1:-1:-1;29781:255:0;;;;;:::i;:::-;;:::i;29602:171::-;;;;;;;;;;-1:-1:-1;29602:171:0;;;;;:::i;:::-;;:::i;23860:199::-;;;;;;;;;;-1:-1:-1;23860:199:0;;;;;:::i;:::-;;:::i;13863:26::-;;;;;;;;;;-1:-1:-1;13863:26:0;;;;-1:-1:-1;;;;;13863:26:0;;;12769:52;;;;;;;;;;-1:-1:-1;12769:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26657:130;;;;;;;;;;-1:-1:-1;26657:130:0;;;;;:::i;:::-;;:::i;28138:120::-;;;;;;;;;;-1:-1:-1;28138:120:0;;;;;:::i;:::-;;:::i;13453:66::-;;;;;;;;;;;;;;;;16846:143;;;;;;;;;;-1:-1:-1;16846:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16954:18:0;;;16927:7;16954:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16846:143;27748:382;;;;;;;;;;-1:-1:-1;27748:382:0;;;;;:::i;:::-;;:::i;26441:176::-;;;;;;;;;;;;;:::i;26899:98::-;;;;;;;;;;-1:-1:-1;26899:98:0;;;;;:::i;:::-;;:::i;26795:96::-;;;;;;;;;;-1:-1:-1;26795:96:0;;;;;:::i;:::-;;:::i;4377:244::-;;;;;;;;;;-1:-1:-1;4377:244:0;;;;;:::i;:::-;;:::i;23305:359::-;;;;;;;;;;-1:-1:-1;23305:359:0;;;;;:::i;:::-;;:::i;13733:35::-;;;;;;;;;;-1:-1:-1;13733:35:0;;;;;;;;;;;12938:45;;;;;;;;;;-1:-1:-1;12938:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28389:117;;;;;;;;;;-1:-1:-1;28389:117:0;;;;;:::i;:::-;;:::i;16330:83::-;16367:13;16400:5;16393:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16330:83;:::o;17500:161::-;17575:4;17592:39;1422:10;17615:7;17624:6;17592:8;:39::i;:::-;-1:-1:-1;17649:4:0;17500:161;;;;;:::o;29051:188::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;29140:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;:32;::::1;;:21;::::0;;::::1;:32;;::::0;29132:57:::1;;;;-1:-1:-1::0;;;29132:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29200:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:31;;-1:-1:-1;;29200:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29051:188::o;4138:231::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;4230:6:::1;::::0;;4209:81:::1;::::0;4246:42:::1;::::0;-1:-1:-1;;;;;4230:6:0;;::::1;::::0;4209:81:::1;::::0;::::1;4301:6;:60:::0;;-1:-1:-1;;;;;;4301:60:0::1;4318:42;4301:60;::::0;;4138:231::o;18451:313::-;18549:4;18566:36;18576:6;18584:9;18595:6;18566:9;:36::i;:::-;-1:-1:-1;18613:121:0;18622:6;1422:10;18644:89;18682:6;18644:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18644:19:0;;;;;;:11;:19;;;;;;;;1422:10;18644:33;;;;;;;;;;:37;:89::i;:::-;18613:8;:121::i;:::-;-1:-1:-1;18752:4:0;18451:313;;;;;;:::o;18018:156::-;18071:7;18098:68;18143:22;12478:42;18143:9;:22::i;:::-;18098:40;18115:22;12391:42;18115:9;:22::i;:::-;18098:12;;;:16;:40::i;:::-;:44;;:68::i;:::-;18091:75;;18018:156;:::o;23672:180::-;14351:17;;-1:-1:-1;;;;;14351:17:0;14337:10;:31;14329:74;;;;-1:-1:-1;;;14329:74:0;;;;;;;:::i;:::-;23779:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;23779:65:0;;::::1;::::0;::::1;6813:25:1::0;;;6854:18;;;6847:34;;;-1:-1:-1;;;;;23779:11:0;;::::1;::::0;:35:::1;::::0;6786:18:1;;23779:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23672:180:::0;;:::o;28843:200::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28936:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;:36;::::1;;:25;::::0;;::::1;:36;;::::0;28928:61:::1;;;;-1:-1:-1::0;;;28928:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29000:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:35;;-1:-1:-1;;29000:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28843:200::o;16997:218::-;1422:10;17085:4;17134:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17134:34:0;;;;;;;;;;17085:4;;17102:83;;17125:7;;17134:50;;17173:10;17134:38;:50::i;29247:124::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;29329:23:::1;:34:::0;29247:124::o;27005:105::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;27076:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;27076:26:0;;::::1;::::0;;;::::1;::::0;;27005:105::o;30044:865::-;30126:22;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;30163:35:::1;30220:16;30163:74;;30286:16;-1:-1:-1::0;;;;;30286:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30268:53:0::1;;30330:4;30337:16;-1:-1:-1::0;;;;;30337:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30268:93;::::0;-1:-1:-1;;;;;;30268:93:0::1;::::0;;;;;;-1:-1:-1;;;;;7378:15:1;;;30268:93:0::1;::::0;::::1;7360:34:1::0;7430:15;;7410:18;;;7403:43;7295:18;;30268:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30251:110:::0;-1:-1:-1;;;;;;30377:28:0;::::1;30374:225;;30491:16;-1:-1:-1::0;;;;;30491:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30473:74:0::1;;30556:4;30563:16;-1:-1:-1::0;;;;;30563:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30473:114;::::0;-1:-1:-1;;;;;;30473:114:0::1;::::0;;;;;;-1:-1:-1;;;;;7378:15:1;;;30473:114:0::1;::::0;::::1;7360:34:1::0;7430:15;;7410:18;;;7403:43;7295:18;;30473:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30456:131;;30374:225;30611:11;:28:::0;;-1:-1:-1;;;;;30611:28:0;;::::1;-1:-1:-1::0;;;;;;30611:28:0;;::::1;::::0;::::1;::::0;;30673:15:::1;:34:::0;;;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;30673:34:0;;::::1;::::0;;;::::1;::::0;;;30611:11:::1;30745:34:::0;;;:12:::1;:34;::::0;;;;;;;:41;;-1:-1:-1;;30745:41:0;;::::1;30611:28:::0;30745:41;;::::1;::::0;;;30825:11;;;::::1;30797:41:::0;;:19:::1;:41:::0;;;;;:48;;;::::1;::::0;::::1;::::0;;30881:11;;;;::::1;30856:38:::0;;:16:::1;:38:::0;;;;;:45;;;;::::1;::::0;;::::1;::::0;;30625:14;30044:865;-1:-1:-1;30044:865:0:o;29493:101::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;29563:12:::1;:23:::0;29493:101::o;27244:119::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;27298:16:::1;:23:::0;;-1:-1:-1;;27332:20:0;;;;;27244:119::o;16715:123::-;-1:-1:-1;;;;;16807:18:0;16781:7;16807:18;;;:9;:18;;;;;;;16715:123::o;29379:106::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;29456:10:::1;:21:::0;29379:106::o;27118:118::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;27172:16:::1;:24:::0;;-1:-1:-1;;27207:21:0;;;27118:118::o;27371:369::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;27492:16:::1;:25:::0;;;27528:16:::1;:29:::0;;;27568:14:::1;:28:::0;;;27607:13:::1;:26:::0;;;27655:77:::1;27623:10:::0;27655:58:::1;27585:11:::0;27655:58;27511:6;27547:10;27655:20:::1;:38::i;:::-;:42:::0;::::1;:58::i;:77::-;27644:8;:88:::0;-1:-1:-1;;;;27371:369:0:o;16421:87::-;16460:13;16493:7;16486:14;;;;;:::i;23129:168::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;23218:6:::1;23212:3;:12;23204:54;;;::::0;-1:-1:-1;;;23204:54:0;;7659:2:1;23204:54:0::1;::::0;::::1;7641:21:1::0;7698:2;7678:18;;;7671:30;7737:31;7717:18;;;7710:59;7786:18;;23204:54:0::1;7457:353:1::0;23204:54:0::1;23269:14;:20:::0;23129:168::o;17223:269::-;17316:4;17333:129;1422:10;17356:7;17365:96;17404:15;17365:96;;;;;;;;;;;;;;;;;1422:10;17365:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17365:34:0;;;;;;;;;;;;:38;:96::i;18276:167::-;18354:4;18371:42;1422:10;18395:9;18406:6;18371:9;:42::i;28640:195::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28732:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:34;::::1;;:23;::::0;;::::1;:34;;::::0;28724:59:::1;;;;-1:-1:-1::0;;;28724:59:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28794:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:33;;-1:-1:-1;;28794:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28640:195::o;28517:111::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;28594:13:::1;:26:::0;;-1:-1:-1;;;;;;28594:26:0::1;-1:-1:-1::0;;;;;28594:26:0;;;::::1;::::0;;;::::1;::::0;;28517:111::o;28266:115::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;28345:15:::1;:28:::0;;-1:-1:-1;;;;;28345:28:0;;::::1;;;-1:-1:-1::0;;;;;;28345:28:0;;::::1;::::0;;;::::1;::::0;;28266:115::o;29781:255::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29863:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;:29;;-1:-1:-1;;29863:29:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29903:126:::1;;-1:-1:-1::0;;;;;29930:35:0;::::1;;::::0;;;:19:::1;:35;::::0;;;;;;;:42;;29968:4:::1;-1:-1:-1::0;;29930:42:0;;::::1;::::0;::::1;::::0;;;29987:16:::1;:23:::0;;;;;:30;;;;::::1;::::0;;::::1;::::0;;29903:126:::1;29781:255:::0;;:::o;29602:171::-;14351:17;;-1:-1:-1;;;;;14351:17:0;14337:10;:31;14329:74;;;;-1:-1:-1;;;14329:74:0;;;;;;;:::i;:::-;29679:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29679:32:0::1;-1:-1:-1::0;;;;29679:32:0;;::::1;;::::0;;29727:38:::1;::::0;::::1;::::0;::::1;::::0;29703:8;1396:14:1;1389:22;1371:41;;1359:2;1344:18;;1231:187;29727:38:0::1;;;;;;;;29602:171:::0;:::o;23860:199::-;14351:17;;23964:12;;-1:-1:-1;;;;;14351:17:0;14337:10;:31;14329:74;;;;-1:-1:-1;;;14329:74:0;;;;;;;:::i;:::-;23996:11:::1;::::0;:55:::1;::::0;-1:-1:-1;;;23996:55:0;;-1:-1:-1;;;;;8073:15:1;;;23996:55:0::1;::::0;::::1;8055:34:1::0;8125:15;;;8105:18;;;8098:43;8157:18;;;8150:34;;;23996:11:0;;::::1;::::0;:23:::1;::::0;7990:18:1;;23996:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23989:62:::0;23860:199;-1:-1:-1;;;;23860:199:0:o;26657:130::-;14351:17;;-1:-1:-1;;;;;14351:17:0;14337:10;:31;14329:74;;;;-1:-1:-1;;;14329:74:0;;;;;;;:::i;:::-;26749:30:::1;::::0;-1:-1:-1;;;26749:30:0;;-1:-1:-1;;;;;8637:32:1;;;26749:30:0::1;::::0;::::1;8619:51:1::0;8686:18;;;8679:34;;;26749:12:0;::::1;::::0;::::1;::::0;8592:18:1;;26749:30:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26657:130:::0;;;:::o;28138:120::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28220:20:0;;;::::1;;::::0;;;:13:::1;:20;::::0;;;;:30;;-1:-1:-1;;28220:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28138:120::o;27748:382::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;27873:17:::1;:26:::0;;;27910:17:::1;:30:::0;;;27951:15:::1;:29:::0;;;27991:14:::1;:27:::0;;;28041:81:::1;28008:10:::0;28041:61:::1;27969:11:::0;28041:61;27893:6;27930:10;28041:21:::1;:40::i;:81::-;28029:9;:93:::0;-1:-1:-1;;;;27748:382:0:o;26441:176::-;14351:17;;-1:-1:-1;;;;;14351:17:0;14337:10;:31;14329:74;;;;-1:-1:-1;;;14329:74:0;;;;;;;:::i;:::-;26506:58:::1;::::0;26494:7:::1;::::0;26514:10:::1;::::0;26538:21:::1;::::0;26494:7;26506:58;26494:7;26506:58;26538:21;26514:10;26506:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26493:71;;;26583:2;26575:34;;;::::0;-1:-1:-1;;;26575:34:0;;9136:2:1;26575:34:0::1;::::0;::::1;9118:21:1::0;9175:2;9155:18;;;9148:30;-1:-1:-1;;;9194:18:1;;;9187:50;9254:18;;26575:34:0::1;8934:344:1::0;26575:34:0::1;26481:136;26441:176::o:0;26899:98::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;26966:13:::1;:23:::0;;-1:-1:-1;;26966:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26899:98::o;26795:96::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;26862:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;26862:21:0;;::::1;::::0;;;::::1;::::0;;26795:96::o;4377:244::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4466:22:0;::::1;4458:73;;;::::0;-1:-1:-1;;;4458:73:0;;9485:2:1;4458:73:0::1;::::0;::::1;9467:21:1::0;9524:2;9504:18;;;9497:30;9563:34;9543:18;;;9536:62;-1:-1:-1;;;9614:18:1;;;9607:36;9660:19;;4458:73:0::1;9283:402:1::0;4458:73:0::1;4568:6;::::0;;4547:38:::1;::::0;-1:-1:-1;;;;;4547:38:0;;::::1;::::0;4568:6;::::1;::::0;4547:38:::1;::::0;::::1;4596:6;:17:::0;;-1:-1:-1;;;;;;4596:17:0::1;-1:-1:-1::0;;;;;4596:17:0;;;::::1;::::0;;;::::1;::::0;;4377:244::o;23305:359::-;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23401:23:0;::::1;23419:4;23401:23;::::0;::::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;23429:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;23428:21;23401:48;23393:57;;;::::0;::::1;;-1:-1:-1::0;;;;;23461:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23461:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23507:150:::1;;23534:11;::::0;:31:::1;::::0;-1:-1:-1;;;23534:31:0;;-1:-1:-1;;;;;8637:32:1;;;23534:31:0::1;::::0;::::1;8619:51:1::0;23534:11:0::1;8686:18:1::0;;;8679:34;23534:11:0;;::::1;::::0;:20:::1;::::0;8592:18:1;;23534:31:0::1;8445:274:1::0;23507:150:0::1;23598:11;::::0;-1:-1:-1;;;;;23598:11:0::1;:20;23619:6:::0;23627:17:::1;23619:6:::0;23627:9:::1;:17::i;:::-;23598:47;::::0;-1:-1:-1;;;;;;23598:47:0::1;::::0;;;;;;-1:-1:-1;;;;;8637:32:1;;;23598:47:0::1;::::0;::::1;8619:51:1::0;8686:18;;;8679:34;8592:18;;23598:47:0::1;8445:274:1::0;28389:117:0;3947:6;;-1:-1:-1;;;;;3947:6:0;1422:10;3947:22;3939:67;;;;-1:-1:-1;;;3939:67:0;;;;;;;:::i;:::-;28468:17:::1;:30:::0;;-1:-1:-1;;;;;;28468:30:0::1;-1:-1:-1::0;;;;;28468:30:0;;;::::1;::::0;;;::::1;::::0;;28389:117::o;2808:250::-;2866:7;2890:1;2895;2890:6;2886:47;;-1:-1:-1;2920:1:0;2913:8;;2886:47;2945:9;2957:5;2961:1;2957;:5;:::i;:::-;2945:17;-1:-1:-1;2990:1:0;2981:5;2985:1;2945:17;2981:5;:::i;:::-;:10;2973:56;;;;-1:-1:-1;;;2973:56:0;;10706:2:1;2973:56:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:1;;;10828:31;10876:19;;2973:56:0;10504:397:1;3066:132:0;3124:7;3151:39;3155:1;3158;3151:39;;;;;;;;;;;;;;;;;:3;:39::i;2275:181::-;2333:7;;2365:5;2369:1;2365;:5;:::i;:::-;2353:17;;2394:1;2389;:6;;2381:46;;;;-1:-1:-1;;;2381:46:0;;11238:2:1;2381:46:0;;;11220:21:1;11277:2;11257:18;;;11250:30;11316:29;11296:18;;;11289:57;11363:18;;2381:46:0;11036:351:1;17669:337:0;-1:-1:-1;;;;;17762:19:0;;17754:68;;;;-1:-1:-1;;;17754:68:0;;11594:2:1;17754:68:0;;;11576:21:1;11633:2;11613:18;;;11606:30;11672:34;11652:18;;;11645:62;-1:-1:-1;;;11723:18:1;;;11716:34;11767:19;;17754:68:0;11392:400:1;17754:68:0;-1:-1:-1;;;;;17841:21:0;;17833:68;;;;-1:-1:-1;;;17833:68:0;;11999:2:1;17833:68:0;;;11981:21:1;12038:2;12018:18;;;12011:30;12077:34;12057:18;;;12050:62;-1:-1:-1;;;12128:18:1;;;12121:32;12170:19;;17833:68:0;11797:398:1;17833:68:0;-1:-1:-1;;;;;17914:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17966:32;;2313:25:1;;;17966:32:0;;2286:18:1;17966:32:0;;;;;;;17669:337;;;:::o;18772:2046::-;18859:4;-1:-1:-1;;;;;18886:20:0;;18878:48;;;;-1:-1:-1;;;18878:48:0;;12402:2:1;18878:48:0;;;12384:21:1;12441:2;12421:18;;;12414:30;-1:-1:-1;;;12460:18:1;;;12453:45;12515:18;;18878:48:0;12200:339:1;18878:48:0;-1:-1:-1;;;;;18945:23:0;;18937:49;;;;-1:-1:-1;;;18937:49:0;;12746:2:1;18937:49:0;;;12728:21:1;12785:2;12765:18;;;12758:30;-1:-1:-1;;;12804:18:1;;;12797:43;12857:18;;18937:49:0;12544:337:1;18937:49:0;19014:1;19005:6;:10;18997:37;;;;-1:-1:-1;;;18997:37:0;;13088:2:1;18997:37:0;;;13070:21:1;13127:2;13107:18;;;13100:30;-1:-1:-1;;;13146:18:1;;;13139:44;13200:18;;18997:37:0;12886:338:1;18997:37:0;-1:-1:-1;;;;;19054:21:0;;;;;;:13;:21;;;;;;;;19053:22;:51;;;;-1:-1:-1;;;;;;19080:24:0;;;;;;:13;:24;;;;;;;;19079:25;19053:51;19045:92;;;;-1:-1:-1;;;19045:92:0;;13431:2:1;19045:92:0;;;13413:21:1;13470:2;13450:18;;;13443:30;13509:31;13489:18;;;13482:59;13558:18;;19045:92:0;13229:353:1;19045:92:0;19154:11;;;;;;;19150:130;;-1:-1:-1;;;;;19189:25:0;;;;;;:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;19218:28:0;;;;;;:17;:28;;;;;;;;19189:57;19181:87;;;;-1:-1:-1;;;19181:87:0;;13789:2:1;19181:87:0;;;13771:21:1;13828:2;13808:18;;;13801:30;-1:-1:-1;;;13847:18:1;;;13840:48;13905:18;;19181:87:0;13587:342:1;19181:87:0;19295:16;;-1:-1:-1;;;19295:16:0;;;;19292:1519;;;19345:41;19360:6;19368:9;19379:6;19345:14;:41::i;:::-;19338:48;;;;19292:1519;-1:-1:-1;;;;;19444:23:0;;;;;;:15;:23;;;;;;;;19443:24;:55;;;;-1:-1:-1;;;;;;19472:26:0;;;;;;:15;:26;;;;;;;;19471:27;19443:55;:72;;;;-1:-1:-1;19502:13:0;;;;19443:72;19440:152;;;19554:12;;19544:6;:22;;19536:40;;;;-1:-1:-1;;;19536:40:0;;14136:2:1;19536:40:0;;;14118:21:1;14175:1;14155:18;;;14148:29;-1:-1:-1;;;14193:18:1;;;14186:36;14239:18;;19536:40:0;13934:329:1;19536:40:0;19609:28;19640:24;19658:4;19640:9;:24::i;:::-;19734:23;;19609:55;;-1:-1:-1;19710:47:0;;;;;;;19790:44;;-1:-1:-1;19818:16:0;;-1:-1:-1;;;19818:16:0;;;;19817:17;19790:44;:69;;;;-1:-1:-1;;;;;;19839:20:0;;;;;;:12;:20;;;;;;;;19838:21;19790:69;:94;;;;-1:-1:-1;19863:21:0;;-1:-1:-1;;;19863:21:0;;;;19790:94;19786:165;;;19919:16;:14;:16::i;:::-;19987:53;;;;;;;;;;;-1:-1:-1;;;19987:53:0;;;;;;;;-1:-1:-1;;;;;19987:17:0;;-1:-1:-1;19987:17:0;;;:9;:17;;;;;;;;:53;;20009:6;;19987:21;:53::i;:::-;-1:-1:-1;;;;;19967:17:0;;;;;;:9;:17;;;;;:73;;;;20079:31;19977:6;20100:9;20079:13;:31::i;:::-;:77;;20122:34;20130:6;20138:9;20149:6;20122:7;:34::i;:::-;20079:77;;;20113:6;20079:77;20176:16;;20057:99;;-1:-1:-1;20176:16:0;;;;;:51;;;;-1:-1:-1;;;;;;20197:30:0;;;;;;:19;:30;;;;;;;;20196:31;20176:51;20173:164;;;20297:10;;20256:37;20281:11;20256:20;20266:9;20256;:20::i;:37::-;:51;;20248:73;;;;-1:-1:-1;;;20248:73:0;;14470:2:1;20248:73:0;;;14452:21:1;14509:2;14489:18;;;14482:30;-1:-1:-1;;;14528:18:1;;;14521:40;14578:18;;20248:73:0;14268:334:1;20248:73:0;-1:-1:-1;;;;;20376:20:0;;;;;;:9;:20;;;;;;:37;;20401:11;20376:24;:37::i;:::-;-1:-1:-1;;;;;20353:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;20434:24;;;;;:16;:24;;;;;;;20430:96;;20465:11;;-1:-1:-1;;;;;20465:11:0;:20;20486:6;20494:17;20486:6;20494:9;:17::i;:::-;20465:47;;-1:-1:-1;;;;;;20465:47:0;;;;;;;-1:-1:-1;;;;;8637:32:1;;;20465:47:0;;;8619:51:1;8686:18;;;8679:34;8592:18;;20465:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20461:63;;-1:-1:-1;;;;;20544:27:0;;;;;;:16;:27;;;;;;;;20540:105;;20578:11;;-1:-1:-1;;;;;20578:11:0;:20;20599:9;20610:20;20599:9;20610;:20::i;:::-;20578:53;;-1:-1:-1;;;;;;20578:53:0;;;;;;;-1:-1:-1;;;;;8637:32:1;;;20578:53:0;;;8619:51:1;8686:18;;;8679:34;8592:18;;20578:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20574:69;;20665:11;;20685:14;;20665:35;;-1:-1:-1;;;;;;20665:35:0;;-1:-1:-1;;;;;20665:11:0;;;;:19;;:35;;;;2313:25:1;;;2301:2;2286:18;;2167:177;20665:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20661:51;20750:9;-1:-1:-1;;;;;20733:40:0;20742:6;-1:-1:-1;;;;;20733:40:0;;20761:11;20733:40;;;;2313:25:1;;2301:2;2286:18;;2167:177;20733:40:0;;;;;;;;20795:4;20788:11;;;;;;;2608:192;2694:7;2730:12;2722:6;;;;2714:29;;;;-1:-1:-1;;;2714:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2754:9:0;2766:5;2770:1;2766;:5;:::i;:::-;2754:17;2608:192;-1:-1:-1;;;;;2608:192:0:o;2464:136::-;2522:7;2549:43;2553:1;2556;2549:43;;;;;;;;;;;;;;;;;:3;:43::i;3206:278::-;3292:7;3327:12;3320:5;3312:28;;;;-1:-1:-1;;;3312:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3351:9:0;3363:5;3367:1;3363;:5;:::i;20826:330::-;20956:53;;;;;;;;;;;-1:-1:-1;;;20956:53:0;;;;;;;;-1:-1:-1;;;;;20956:17:0;;20919:4;20956:17;;;:9;:17;;;;;;;:53;;20978:6;;20956:21;:53::i;:::-;-1:-1:-1;;;;;20936:17:0;;;;;;;:9;:17;;;;;;:73;;;;21043:20;;;;;;;:32;;21068:6;21043:24;:32::i;:::-;-1:-1:-1;;;;;21020:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21091:35;;;;;;;;;;21119:6;2313:25:1;;2301:2;2286:18;;2167:177;21091:35:0;;;;;;;;-1:-1:-1;21144:4:0;20826:330;;;;;:::o;21164:1822::-;14558:16;:23;;-1:-1:-1;;;;14558:23:0;-1:-1:-1;;;14558:23:0;;;;21257:24:::1;21275:4;21257:9;:24::i;:::-;21231:50;;21297:15;21316:1;21297:20:::0;21294:32:::1;;21319:7;;;21294:32;21338:23;21364:39;21385:17;;21364:16;;:20;;:39;;;;:::i;:::-;21338:65;;21414:23;21440:39;21461:17;;21440:16;;:20;;:39;;;;:::i;:::-;21414:65;;21490:21;21514:35;21533:15;;21514:14;;:18;;:35;;;;:::i;:::-;21490:59;;21632:16;21651:23;21664:9;;21651:8;;:12;;:23;;;;:::i;:::-;21632:42;;21688:11;21703:1;21688:16:::0;21685:28:::1;;21706:7;;;;;;;21685:28;21725:19;21747:60;21805:1;21747:53;21788:11:::0;21747:53;:15;21767;21747:19:::1;:36::i;:::-;:40:::0;::::1;:53::i;:60::-;21725:82:::0;-1:-1:-1;21818:21:0::1;21842:32;:15:::0;21725:82;21842:19:::1;:32::i;:::-;21818:56:::0;-1:-1:-1;21912:21:0::1;21944:31;21818:56:::0;21944:16:::1;:31::i;:::-;21986:22;22011:41;:21;22037:14:::0;22011:25:::1;:41::i;:::-;21986:66:::0;-1:-1:-1;22065:19:0::1;22087:39;22103:22;:15:::0;22123:1:::1;22103:19;:22::i;:::-;22087:11:::0;;:15:::1;:39::i;:::-;22065:61:::0;-1:-1:-1;22139:26:0::1;22168:59;22225:1;22168:52;22065:61:::0;22168:52;:14;22187:15;22168:18:::1;:35::i;:59::-;22139:88:::0;-1:-1:-1;22238:26:0::1;22267:52;22307:11:::0;22267:35:::1;:14:::0;22286:15;22267:18:::1;:35::i;:52::-;22238:81:::0;-1:-1:-1;22330:24:0::1;22357:50;22395:11:::0;22357:33:::1;:14:::0;22376:13;22357:18:::1;:33::i;:50::-;22330:77:::0;-1:-1:-1;22418:23:0::1;22444:84;22330:77:::0;22444:62:::1;22487:18:::0;22444:62;:14;22463:18;22444::::1;:38::i;:84::-;22418:110:::0;-1:-1:-1;22544:22:0;;22541:97:::1;;22603:15;::::0;22582:56:::1;::::0;22603:15:::1;::::0;::::1;-1:-1:-1::0;;;;;22603:15:0::1;22619:18:::0;22582:20:::1;:56::i;:::-;22654:20:::0;;22651:91:::1;;22711:13;::::0;22690:52:::1;::::0;-1:-1:-1;;;;;22711:13:0::1;22725:16:::0;22690:20:::1;:52::i;:::-;22779:1;22758:18;:22;:41;;;;;22798:1;22784:11;:15;22758:41;22755:104;;;22814:45;22827:11;22840:18;22814:12;:45::i;:::-;22875:19:::0;;22872:103:::1;;22914:11;;;;;;;;;-1:-1:-1::0;;;;;22914:11:0::1;-1:-1:-1::0;;;;;22914:19:0::1;;22943:15;22914:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22910:65:::0;::::1;21210:1776;;;;;;;;;;;;;;14592:1;14604:16:::0;:24;;-1:-1:-1;;;;14604:24:0;;;21164:1822::o;25276:366::-;-1:-1:-1;;;;;25377:25:0;;25357:4;25377:25;;;:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;25406:28:0;;;;;;:17;:28;;;;;;;;25377:57;25374:261;;;-1:-1:-1;25458:4:0;25451:11;;25374:261;-1:-1:-1;;;;;25493:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;25517:23:0;;;;;;:12;:23;;;;;;;;25493:47;25489:146;;;-1:-1:-1;25564:5:0;25557:12;;25489:146;-1:-1:-1;25618:5:0;25611:12;;25650:750;-1:-1:-1;;;;;25831:20:0;;25736:7;25831:20;;;:12;:20;;;;;;25736:7;;25831:20;;25828:293;;;25886:37;13362:4;25886:20;25897:8;;25886:6;:10;;:20;;;;:::i;:37::-;25874:49;;25828:293;;;-1:-1:-1;;;;;25975:23:0;;;;;;:12;:23;;;;;;;;25972:149;;;26049:38;13362:4;26049:21;26060:9;;26049:6;:10;;:21;;;;:::i;:38::-;26037:50;;25972:149;26145:13;;26142:185;;26224:4;26206:24;;;;:9;:24;;;;;;:39;;26235:9;26206:28;:39::i;:::-;26197:4;26179:24;;;;:9;:24;;;;;;;:66;;;;26269:42;;-1:-1:-1;;;;;26269:42:0;;;;;;;26301:9;2313:25:1;;2301:2;2286:18;;2167:177;26269:42:0;;;;;;;;26142:185;26350:21;:6;26361:9;26350:10;:21::i;24071:666::-;24221:16;;;24235:1;24221:16;;;;;;;;24197:21;;24221:16;;;;;;;;;;-1:-1:-1;24221:16:0;24197:40;;24266:4;24248;24253:1;24248:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;24248:23:0;;;-1:-1:-1;;;;;24248:23:0;;;;;24292:15;;;;;;;;;-1:-1:-1;;;;;24292:15:0;-1:-1:-1;;;;;24292:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24282:4;24287:1;24282:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24282:32:0;;;:7;;;;;;;;;:32;24359:15;;24327:62;;24344:4;;24359:15;;;;24377:11;24327:8;:62::i;:::-;24428:15;;:240;;-1:-1:-1;;;24428:240:0;;:15;;;;-1:-1:-1;;;;;24428:15:0;;:66;;:240;;24509:11;;24535:1;;24579:4;;24606;;24642:15;;24428:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24694:35;24711:11;24724:4;24694:35;;;;;;;:::i;:::-;;;;;;;;24126:611;24071:666;:::o;22994:127::-;23078:35;;-1:-1:-1;;;;;23078:27:0;;;:35;;;;;23106:6;;23078:35;;;;23106:6;23078:27;:35;;;;;;;;;;;;;;;;;;;;;22994:127;;:::o;24745:523::-;24925:15;;24893:62;;24910:4;;24925:15;;;-1:-1:-1;;;;;24925:15:0;24943:11;24893:8;:62::i;:::-;24998:15;;25202:17;;24998:262;;-1:-1:-1;;;24998:262:0;;25070:4;24998:262;;;16735:34:1;16785:18;;;16778:34;;;25116:1:0;16828:18:1;;;16821:34;;;16871:18;;;16864:34;-1:-1:-1;;;;;25202:17:0;;;16914:19:1;;;16907:44;25234:15:0;16967:19:1;;;16960:35;24998:15:0;;;;;;:31;;25037:9;;16669:19:1;;24998:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24745: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;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:118::-;1509:5;1502:13;1495:21;1488:5;1485:32;1475:60;;1531:1;1528;1521:12;1546:382;1611:6;1619;1672:2;1660:9;1651:7;1647:23;1643:32;1640:52;;;1688:1;1685;1678:12;1640:52;1727:9;1714:23;1746:31;1771:5;1746:31;:::i;:::-;1796:5;-1:-1:-1;1853:2:1;1838:18;;1825:32;1866:30;1825:32;1866:30;:::i;:::-;1915:7;1905:17;;;1546:382;;;;;:::o;2349:456::-;2426:6;2434;2442;2495:2;2483:9;2474:7;2470:23;2466:32;2463:52;;;2511:1;2508;2501:12;2463:52;2550:9;2537:23;2569:31;2594:5;2569:31;:::i;:::-;2619:5;-1:-1:-1;2676:2:1;2661:18;;2648:32;2689:33;2648:32;2689:33;:::i;:::-;2349:456;;2741:7;;-1:-1:-1;;;2795:2:1;2780:18;;;;2767:32;;2349:456::o;2810:248::-;2878:6;2886;2939:2;2927:9;2918:7;2914:23;2910:32;2907:52;;;2955:1;2952;2945:12;2907:52;-1:-1:-1;;2978:23:1;;;3048:2;3033:18;;;3020:32;;-1:-1:-1;2810:248:1:o;3252:180::-;3311:6;3364:2;3352:9;3343:7;3339:23;3335:32;3332:52;;;3380:1;3377;3370:12;3332:52;-1:-1:-1;3403:23:1;;3252:180;-1:-1:-1;3252:180:1:o;3437:247::-;3496:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;3689:241::-;3745:6;3798:2;3786:9;3777:7;3773:23;3769:32;3766:52;;;3814:1;3811;3804:12;3766:52;3853:9;3840:23;3872:28;3894:5;3872:28;:::i;3935:385::-;4021:6;4029;4037;4045;4098:3;4086:9;4077:7;4073:23;4069:33;4066:53;;;4115:1;4112;4105:12;4066:53;-1:-1:-1;;4138:23:1;;;4208:2;4193:18;;4180:32;;-1:-1:-1;4259:2:1;4244:18;;4231:32;;4310:2;4295:18;4282:32;;-1:-1:-1;3935:385:1;-1:-1:-1;3935:385:1:o;4799:388::-;4867:6;4875;4928:2;4916:9;4907:7;4903:23;4899:32;4896:52;;;4944:1;4941;4934:12;4896:52;4983:9;4970:23;5002:31;5027:5;5002:31;:::i;:::-;5052:5;-1:-1:-1;5109:2:1;5094:18;;5081:32;5122:33;5081:32;5122:33;:::i;5192:380::-;5271:1;5267:12;;;;5314;;;5335:61;;5389:4;5381:6;5377:17;5367:27;;5335:61;5442:2;5434:6;5431:14;5411:18;5408:38;5405:161;;5488:10;5483:3;5479:20;5476:1;5469:31;5523:4;5520:1;5513:15;5551:4;5548:1;5541:15;5405:161;;5192:380;;;:::o;5577:356::-;5779:2;5761:21;;;5798:18;;;5791:30;5857:34;5852:2;5837:18;;5830:62;5924:2;5909:18;;5577:356::o;5938:337::-;6140:2;6122:21;;;6179:2;6159:18;;;6152:30;-1:-1:-1;;;6213:2:1;6198:18;;6191:43;6266:2;6251:18;;5938:337::o;6280:354::-;6482:2;6464:21;;;6521:2;6501:18;;;6494:30;6560:32;6555:2;6540:18;;6533:60;6625:2;6610:18;;6280:354::o;6892:251::-;6962:6;7015:2;7003:9;6994:7;6990:23;6986:32;6983:52;;;7031:1;7028;7021:12;6983:52;7063:9;7057:16;7082:31;7107:5;7082:31;:::i;8195:245::-;8262:6;8315:2;8303:9;8294:7;8290:23;8286:32;8283:52;;;8331:1;8328;8321:12;8283:52;8363:9;8357:16;8382:28;8404:5;8382:28;:::i;9977:127::-;10038:10;10033:3;10029:20;10026:1;10019:31;10069:4;10066:1;10059:15;10093:4;10090:1;10083:15;10109:168;10182:9;;;10213;;10230:15;;;10224:22;;10210:37;10200:71;;10251:18;;:::i;10282:217::-;10322:1;10348;10338:132;;10392:10;10387:3;10383:20;10380:1;10373:31;10427:4;10424:1;10417:15;10455:4;10452:1;10445:15;10338:132;-1:-1:-1;10484:9:1;;10282:217::o;10906:125::-;10971:9;;;10992:10;;;10989:36;;;11005:18;;:::i;14607:128::-;14674:9;;;14695:11;;;14692:37;;;14709:18;;:::i;14872:127::-;14933:10;14928:3;14924:20;14921:1;14914:31;14964:4;14961:1;14954:15;14988:4;14985:1;14978:15;15004:461;15057:3;15095:5;15089:12;15122:6;15117:3;15110:19;15148:4;15177:2;15172:3;15168:12;15161:19;;15214:2;15207:5;15203:14;15235:1;15245:195;15259:6;15256:1;15253:13;15245:195;;;15324:13;;-1:-1:-1;;;;;15320:39:1;15308:52;;15380:12;;;;15415:15;;;;15356:1;15274:9;15245:195;;;-1:-1:-1;15456:3:1;;15004:461;-1:-1:-1;;;;;15004:461:1:o;15470:582::-;15769:6;15758:9;15751:25;15812:6;15807:2;15796:9;15792:18;15785:34;15855:3;15850:2;15839:9;15835:18;15828:31;15732:4;15876:57;15928:3;15917:9;15913:19;15905:6;15876:57;:::i;:::-;-1:-1:-1;;;;;15969:32:1;;;;15964:2;15949:18;;15942:60;-1:-1:-1;16033:3:1;16018:19;16011:35;15868:65;15470:582;-1:-1:-1;;;15470:582:1:o;16057:332::-;16264:6;16253:9;16246:25;16307:2;16302;16291:9;16287:18;16280:30;16227:4;16327:56;16379:2;16368:9;16364:18;16356:6;16327:56;:::i;17006:306::-;17094:6;17102;17110;17163:2;17151:9;17142:7;17138:23;17134:32;17131:52;;;17179:1;17176;17169:12;17131:52;17208:9;17202:16;17192:26;;17258:2;17247:9;17243:18;17237:25;17227:35;;17302:2;17291:9;17287:18;17281:25;17271:35;;17006:306;;;;;:::o

Swarm Source

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