ETH Price: $3,418.69 (-2.26%)
Gas: 6 Gwei

Token

Dejitaru ShinRyū (ShinRyū)
 

Overview

Max Total Supply

15,000,000,000 ShinRyū

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10 ShinRyū

Value
$0.00
0x492CF511D9f7975951B91D97b15567B427ae8196
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:
DejitaruShinRyu

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 2022-10-28
*/

/*
Name: Dejitaru ShinRyū
Symbol: $ShinRyū
Total supply: 15.000.000.000
Max wallet: 2%
Max buy: 2% 
Taxes explained (READ THIS CAREFULLY):
Zero buy tax,u only pay taxes while selling
Sell within   1 hour  : 12% Sell Tax (anti-dump protection)
Sell within   2 hours :  6% Sell Tax
Sell within   3 hours :  5% Sell Tax
Sell within   4 hours :  4% Sell Tax
Sell within   8 hours :  3% Sell Tax
Sell within  16 hours :  2% Sell Tax
Sell within  24 hours :  1% Sell Tax
Standard sell tax after 24 hours :  0% Sell Tax
------------------------------------------------
Website: https://dejitarushinryu.com/
Twitter: https://twitter.com/dejitarushinryu
TG: t.me/DejitaruShinRyuPortal
Telegram announcement channel is currently being used to avoid early fud and bot attacks
Community telegram will be made shortly

-Kashiko Uranaishi-
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

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

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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;
        return c;
    }
}

library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

}

 contract DejitaruShinRyu is Context, IERC20, Ownable {
    using Address for address payable;
    using SafeMath for uint256;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;
    
    bool public tradingEnabled = false; 
    bool public swapEnabled = true;
    bool private swapping;
    
    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = false;
    uint256 public coolDownTime = 0 seconds;
    
    modifier antiBot(address account){
        require(tradingEnabled || allowedTransfer[account], "Trading not enabled yet");
        _;
    }

    IRouter public router;
    address public pair;

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

    uint256 private _tTotal = 15_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = _tTotal.mul(5).div(10000);
    uint256 public maxBuyLimit = 300_000_001 * 10**_decimals;
    uint256 public maxSellLimit = 300_000_001 * 10**_decimals;
    uint256 public maxWalletLimit = 300_000_001 * 10**_decimals;
    
    uint256 public genesis_block;
    uint256 public genesis_block_timestamp;

    uint256 public buytotaltaxes;
    uint256 public selltotaltaxes;

    //nais!
    address public marketingWallet = 0x6AEc62331Bb0904d57ce57A40d5fAFfA10bc6f00;
    address public devWallet = 0x6AEc62331Bb0904d57ce57A40d5fAFfA10bc6f00;

    string private constant _name = unicode"Dejitaru ShinRyū";
    string private constant _symbol = unicode"ShinRyū";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
    }

    Taxes public taxes = Taxes(0, 0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 1, 0, 0);

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
    }
    
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rDev;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tDev;
    }

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

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

    constructor (address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

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

        _rOwned[owner()] = _rTotal / 100 * 100;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        
        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[devWallet] = true;

		emit Transfer(address(0), owner(), _tTotal * 100 / 100);
    }

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }
    
    function transfer(address recipient, uint256 amount) public override antiBot(msg.sender) returns (bool)
    { 
      _transfer(msg.sender, recipient, amount);
      return true;
    }

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

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

    function setTradingStatus(bool state) external onlyOwner{
         tradingEnabled = state;
         swapEnabled = state;
    if(state == true && genesis_block == 0) genesis_block = block.number;
         genesis_block_timestamp= block.timestamp;
    }

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

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

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

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

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

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

    function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev) public onlyOwner {
        buytotaltaxes = _rfi + _marketing + _liquidity + _dev; 
        require(buytotaltaxes <= 10, "Must keep taxes at 10% or less"); 
        taxes = Taxes(_rfi,_marketing,_liquidity,_dev);
        emit FeesChanged();
    }
    
    function setSellTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev) public onlyOwner {
        selltotaltaxes = _rfi + _marketing + _liquidity + _dev; 
        require(selltotaltaxes <= 10, "Must keep taxes at 10% or less"); 
        sellTaxes = Taxes(_rfi,_marketing,_liquidity,_dev);
        emit FeesChanged();
    }

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

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity +=tLiquidity;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tLiquidity;
        }
        _rOwned[address(this)] +=rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing +=tMarketing;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;
    }
    
    function _takeDev(uint256 rDev, uint256 tDev) private {
        totFeesPaid.dev +=tDev;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tDev;
        }
        _rOwned[address(this)] +=rDev;
    }
    
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rDev) = _getRValues2(to_return, takeFee, _getRate());
        return to_return;
    }

    function getCurrentMultiplier() public view returns (uint256) {
        uint256 time_since_start = block.timestamp - genesis_block_timestamp;
        uint256 hour = 60 * 60;
          if (time_since_start < 1 * hour) {
            return (120);
        } else if (time_since_start < 2 * hour) {
            return (60);
        } else if (time_since_start < 3 * hour) {
            return (50);   
         } else if (time_since_start < 4 * hour) {
            return (40);   
         } else if (time_since_start < 8 * hour) {
            return (30);
         } else if (time_since_start < 16 * hour) {
            return (20);   
             } else if (time_since_start < 24 * hour) {
            return (10);
        } else {
            return (4);
        }
    }

    function _getAntiDumpMultiplier() private view returns (uint256) {
        uint256 time_since_start = block.timestamp - genesis_block_timestamp;
        uint256 hour = 60 * 60;
        if (time_since_start < 1 * hour) {
            return (120);
        } else if (time_since_start < 2 * hour) {
            return (60);
        } else if (time_since_start < 3 * hour) {
            return (50);   
         } else if (time_since_start < 4 * hour) {
            return (40);   
         } else if (time_since_start < 8 * hour) {
            return (30);
         } else if (time_since_start < 16 * hour) {
            return (20);   
             } else if (time_since_start < 24 * hour) {
            return (10);
        } else {
            return (4);
        }
    }

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

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if(isSell) temp = sellTaxes;
        else temp = taxes;
        
        uint256 multiplier = _getAntiDumpMultiplier();
        s.tRfi = tAmount*temp.rfi/1000*(multiplier);
        s.tMarketing = tAmount*temp.marketing/1000*(multiplier);
        s.tLiquidity = tAmount*temp.liquidity/1000*(multiplier);
        s.tDev = tAmount*temp.dev/1000*(multiplier);
        s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tDev;
        return s;
    }

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

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

        rRfi = s.tRfi*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        uint256 rDev = s.tDev*currentRate;
        rTransferAmount =  rAmount-rRfi-rMarketing-rLiquidity-rDev;
        return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity);
    }
    
    function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rDev) {

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

        rDev = s.tDev*currentRate;
        return (rDev);
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot, U verry bad GL");
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled, "Trading not active");
        }
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && block.number <= genesis_block + 2) {
            require(to != pair, "Sells not allowed for first 2 blocks");
        }
        
        if(from == pair && !_isExcludedFromFee[to] && !swapping){
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
        }
        
        if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if(to != pair){
                require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
            }
            if(coolDownEnabled){
                uint256 timePassed = block.timestamp - _lastSell[from];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[from] = block.timestamp;
            }
        }
        
        if(balanceOf(from) - amount <= 10 *  10**decimals()) amount -= (10 * 10**decimals() + amount - balanceOf(from));
        
       
        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
      
        if(!swapping && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            if(to == pair)  swapAndLiquify(swapTokensAtAmount, sellTaxes);
            else  swapAndLiquify(swapTokensAtAmount, taxes);
        }
        bool takeFee = true;
        bool isSell = false;
        if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
        if(to == pair) isSell = true;

        _tokenTransfer(from, to, amount, takeFee, isSell);
    }

    //Take all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);

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

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
            emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tDev);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if(s.rDev > 0 || s.tDev > 0) _takeDev(s.rDev, s.tDev);
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{
        uint256 denominator = (temp.liquidity + temp.marketing + temp.dev) * 2;
        uint256 tokensToAddLiquidityWith = contractBalance * temp.liquidity / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - temp.liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * temp.liquidity;

        if(ethToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if(marketingAmt > 0){
            payable(marketingWallet).sendValue(marketingAmt);
        }
        uint256 devAmt = unitBalance * 2 * temp.dev;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);

        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    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] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
    }

    function updateCooldown(bool state, uint256 time) external onlyOwner{
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }
    
    function updateIsBlacklisted(address account, bool state) external onlyOwner{
        _isBlacklisted[account] = state;
    }
    
    function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i =0; i < accounts.length; i++){
            _isBlacklisted[accounts[i]] = state;

        }
    }
    
    function updateAllowedTransfer(address account, bool state) external onlyOwner{
        allowedTransfer[account] = state;
    }
    
    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell) external onlyOwner{
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
    }
    
    function updateMaxWalletlimit(uint256 amount) external onlyOwner{
        maxWalletLimit = amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
    
    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(msg.sender).transfer(weiAmount);
    }
    
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[{"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":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buytotaltaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block_timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"selltotaltaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805461ffff1916610100178155600b805460ff191690556000600c556200002f90600a62000bb9565b620000409064037e11d60062000bca565b600f819055620000539060001962000bfa565b620000619060001962000c11565b6010556200009c612710620000886005600f546200056360201b62001d011790919060201c565b620005fa60201b62001d831790919060201c565b601155620000ad6009600a62000bb9565b620000bd906311e1a30162000bca565b601255620000ce6009600a62000bb9565b620000de906311e1a30162000bca565b601355620000ef6009600a62000bb9565b620000ff906311e1a30162000bca565b60145560198054736aec62331bb0904d57ce57a40d5faffa10bc6f006001600160a01b03199182168117909255601a805490911690911790556040805160808082018352600080835260208084018290528385018290526060938401829052601b829055601c829055601d829055601e82905584519283018552818352600183820181905294830182905291909201829052601f829055919091556021819055602255348015620001af57600080fd5b506040516200486338038062004863833981016040819052620001d29162000c27565b620001dd3362000644565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000249919062000c27565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000297573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bd919062000c27565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000331919062000c27565b600d80546001600160a01b038086166001600160a01b031992831617909255600e805492841692909116821790559091506200036d9062000694565b60646010546200037e919062000c52565b6200038b90606462000bca565b60016000620003a26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003f16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019548216815260048452828120805486166001908117909155601a549092168152828120805486168317905530815260069384905291822080549094168117909355620004756000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526006909352818320805485166001908117909155601954821684528284208054861682179055601a54909116835291208054909216179055620004f56000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064600f5460646200053d919062000bca565b62000549919062000c52565b60405190815260200160405180910390a350505062000ceb565b6000826000036200057757506000620005f4565b600062000585838562000bca565b90508262000594858362000c52565b14620005f15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620005f183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200081e60201b60201c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620006f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005e8565b6001600160a01b03811660009081526005602052604090205460ff16156200075b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005e8565b6001600160a01b03811660009081526001602052604090205415620007b8576001600160a01b0381166000908152600160205260409020546200079e906200085a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b60008183620008425760405162461bcd60e51b8152600401620005e8919062000c69565b50600062000851848662000c52565b95945050505050565b6000601054821115620008c35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005e8565b6000620008cf620008e4565b9050620008dd818462000c52565b9392505050565b60008080620008f26200090a565b909250905062000903818362000c52565b9250505090565b601054600f546000918291825b60085481101562000a72578260016000600884815481106200093d576200093d62000cb9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009ac575081600260006008848154811062000985576200098562000cb9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620009c357601054600f54945094505050509091565b6001600060088381548110620009dd57620009dd62000cb9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a0e908462000c11565b9250600260006008838154811062000a2a5762000a2a62000cb9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a5b908362000c11565b91508062000a698162000ccf565b91505062000917565b50600f5460105462000a85919062000c52565b82101562000a9d57601054600f549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000afd57816000190482111562000ae15762000ae162000aa6565b8085161562000aef57918102915b93841c939080029062000ac1565b509250929050565b60008262000b1657506001620005f4565b8162000b2557506000620005f4565b816001811462000b3e576002811462000b495762000b69565b6001915050620005f4565b60ff84111562000b5d5762000b5d62000aa6565b50506001821b620005f4565b5060208310610133831016604e8410600b841016171562000b8e575081810a620005f4565b62000b9a838362000abc565b806000190482111562000bb15762000bb162000aa6565b029392505050565b6000620005f160ff84168362000b05565b8082028115828204841417620005f457620005f462000aa6565b634e487b7160e01b600052601260045260246000fd5b60008262000c0c5762000c0c62000be4565b500690565b81810381811115620005f457620005f462000aa6565b60006020828403121562000c3a57600080fd5b81516001600160a01b0381168114620005f157600080fd5b60008262000c645762000c6462000be4565b500490565b600060208083528351808285015260005b8181101562000c985785810183015185820160400152820162000c7a565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000ce45762000ce462000aa6565b5060010190565b613b688062000cfb6000396000f3fe6080604052600436106103905760003560e01c8063715018a6116101dc578063b5c5714511610102578063ea2f0b37116100a0578063f480fec21161006f578063f480fec214610af7578063f66895a314610b17578063f887ea4014610b3a578063ff950c6514610b5a57600080fd5b8063ea2f0b3714610a87578063ee36e35914610aa7578063ef27902114610ac1578063f2fde38b14610ad757600080fd5b8063d8672e51116100dc578063d8672e51146109eb578063dd62ed3e14610a0b578063e2f4560514610a51578063e517f2b914610a6757600080fd5b8063b5c5714514610995578063d257b34f146109b5578063d2ce0db2146109d557600080fd5b806395d89b411161017a578063a457c2d711610149578063a457c2d714610915578063a8aa1b3114610935578063a9059cbb14610955578063aacebbe31461097557600080fd5b806395d89b41146108815780639ba5e4d5146108b25780639e252f00146108d5578063a12a7d61146108f557600080fd5b806388f82020116101b657806388f82020146107ea5780638da5cb5b146108235780638e2839ff146108415780638ea5220f1461086157600080fd5b8063715018a61461075a578063728f8eea1461076f57806375f0a874146107b257600080fd5b806339509351116102c157806359759f611161025f57806366a88d961161022e57806366a88d96146106ef5780636aa5b37f146107055780636ddd17131461071b57806370a082311461073a57600080fd5b806359759f61146106695780635b24ea5e1461068957806362695eae146106a9578063652e2f04146106d957600080fd5b80634549b0391161029b5780634549b039146105d65780634ada218b146105f657806352390c02146106105780635342acb41461063057600080fd5b8063395093511461057657806340b28c2f14610596578063437823ec146105b657600080fd5b8063274a533c1161032e578063313ce56711610308578063313ce5671461050457806331d66239146105205780633685d41914610536578063379ba1d91461055657600080fd5b8063274a533c146104b95780632b63c300146104cf5780632d838119146104e457600080fd5b806313f97a8e1161036a57806313f97a8e1461043a57806318160ddd1461045a5780631816467f1461047957806323b872dd1461049957600080fd5b806306fdde031461039c578063095ea7b3146103e85780630d65df9b1461041857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b5060408051808201909152601181527044656a6974617275205368696e5279c5ab60781b60208201525b6040516103df9190613509565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461357c565b610b70565b60405190151581526020016103df565b34801561042457600080fd5b506104386104333660046135a8565b610bd8565b005b34801561044657600080fd5b50610438610455366004613618565b610c7b565b34801561046657600080fd5b50600f545b6040519081526020016103df565b34801561048557600080fd5b506104386104943660046136ef565b610d11565b3480156104a557600080fd5b506104086104b43660046135a8565b610d5d565b3480156104c557600080fd5b5061046b60155481565b3480156104db57600080fd5b5061046b610e57565b3480156104f057600080fd5b5061046b6104ff36600461370c565b610f33565b34801561051057600080fd5b50604051600981526020016103df565b34801561052c57600080fd5b5061046b60175481565b34801561054257600080fd5b506104386105513660046136ef565b610fb7565b34801561056257600080fd5b50610438610571366004613725565b61116d565b34801561058257600080fd5b5061040861059136600461357c565b6111d7565b3480156105a257600080fd5b506104386105b1366004613742565b611257565b3480156105c257600080fd5b506104386105d13660046136ef565b6112af565b3480156105e257600080fd5b5061046b6105f136600461377b565b6112fd565b34801561060257600080fd5b506009546104089060ff1681565b34801561061c57600080fd5b5061043861062b3660046136ef565b611391565b34801561063c57600080fd5b5061040861064b3660046136ef565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067557600080fd5b506104386106843660046137a0565b6114e4565b34801561069557600080fd5b506104386106a43660046137c2565b611544565b3480156106b557600080fd5b506104086106c43660046136ef565b60066020526000908152604090205460ff1681565b3480156106e557600080fd5b5061046b60135481565b3480156106fb57600080fd5b5061046b60145481565b34801561071157600080fd5b5061046b60125481565b34801561072757600080fd5b5060095461040890610100900460ff1681565b34801561074657600080fd5b5061046b6107553660046136ef565b611599565b34801561076657600080fd5b506104386115f8565b34801561077b57600080fd5b50601b54601c54601d54601e546107929392919084565b6040805194855260208501939093529183015260608201526080016103df565b3480156107be57600080fd5b506019546107d2906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b3480156107f657600080fd5b506104086108053660046136ef565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082f57600080fd5b506000546001600160a01b03166107d2565b34801561084d57600080fd5b5061043861085c366004613618565b61162e565b34801561086d57600080fd5b50601a546107d2906001600160a01b031681565b34801561088d57600080fd5b506040805180820190915260088152675368696e5279c5ab60c01b60208201526103d2565b3480156108be57600080fd5b506023546024546025546026546107929392919084565b3480156108e157600080fd5b506104386108f036600461370c565b6116bf565b34801561090157600080fd5b506104386109103660046137f0565b611766565b34801561092157600080fd5b5061040861093036600461357c565b611866565b34801561094157600080fd5b50600e546107d2906001600160a01b031681565b34801561096157600080fd5b5061040861097036600461357c565b61194c565b34801561098157600080fd5b506104386109903660046136ef565b6119a1565b3480156109a157600080fd5b506104386109b03660046137c2565b6119ed565b3480156109c157600080fd5b506104386109d036600461370c565b611a42565b3480156109e157600080fd5b5061046b600c5481565b3480156109f757600080fd5b50610438610a0636600461370c565b611a88565b348015610a1757600080fd5b5061046b610a26366004613742565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b5061046b60115481565b348015610a7357600080fd5b50610438610a82366004613822565b611ace565b348015610a9357600080fd5b50610438610aa23660046136ef565b611b1a565b348015610ab357600080fd5b50600b546104089060ff1681565b348015610acd57600080fd5b5061046b60165481565b348015610ae357600080fd5b50610438610af23660046136ef565b611b65565b348015610b0357600080fd5b50610438610b123660046137f0565b611c00565b348015610b2357600080fd5b50601f546020546021546022546107929392919084565b348015610b4657600080fd5b50600d546107d2906001600160a01b031681565b348015610b6657600080fd5b5061046b60185481565b600954600090339060ff1680610b9e57506001600160a01b03811660009081526006602052604090205460ff165b610bc35760405162461bcd60e51b8152600401610bba90613840565b60405180910390fd5b610bce338585611dc5565b5060019392505050565b6000546001600160a01b03163314610c025760405162461bcd60e51b8152600401610bba90613877565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7591906138ac565b50505050565b6000546001600160a01b03163314610ca55760405162461bcd60e51b8152600401610bba90613877565b60005b8251811015610d0c578160076000858481518110610cc857610cc86138c9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d04816138f5565b915050610ca8565b505050565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610bba90613877565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610d8b57506001600160a01b03811660009081526006602052604090205460ff165b610da75760405162461bcd60e51b8152600401610bba90613840565b610db2858585611ee9565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610e375760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bba565b610e4b8633610e46878561390e565b611dc5565b50600195945050505050565b60008060165442610e68919061390e565b9050610e10610e78816001613921565b821015610e885760789250505090565b610e93816002613921565b821015610ea357603c9250505090565b610eae816003613921565b821015610ebe5760329250505090565b610ec9816004613921565b821015610ed95760289250505090565b610ee4816008613921565b821015610ef457601e9250505090565b610eff816010613921565b821015610f0f5760149250505090565b610f1a816018613921565b821015610f2a57600a9250505090565b60049250505090565b6000601054821115610f9a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bba565b6000610fa4612760565b9050610fb08184613938565b9392505050565b6000546001600160a01b03163314610fe15760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03811660009081526005602052604090205460ff166110495760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bba565b60005b60085481101561116957816001600160a01b031660088281548110611073576110736138c9565b6000918252602090912001546001600160a01b031603611157576008805461109d9060019061390e565b815481106110ad576110ad6138c9565b600091825260209091200154600880546001600160a01b0390921691839081106110d9576110d96138c9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111315761113161395a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611161816138f5565b91505061104c565b5050565b6000546001600160a01b031633146111975760405162461bcd60e51b8152600401610bba90613877565b6009805461ffff191661ff00198315159081169190911761010082021790915560011480156111c65750601554155b156111d057436015555b5042601655565b600954600090339060ff168061120557506001600160a01b03811660009081526006602052604090205460ff165b6112215760405162461bcd60e51b8152600401610bba90613840565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610bce91908690610e46908790613970565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610bba90613877565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156113515760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bba565b8161136f5760006113658460016000612783565b51915061138b9050565b600061137e8460016000612783565b60200151915061138b9050565b92915050565b6000546001600160a01b031633146113bb5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03811660009081526005602052604090205460ff16156114245760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bba565b6001600160a01b0381166000908152600160205260409020541561147e576001600160a01b03811660009081526001602052604090205461146490610f33565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610bba90613877565b61151a6009600a613a67565b6115249083613921565b6012556115336009600a613a67565b61153d9082613921565b6013555050565b6000546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156115d657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461138b90610f33565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610bba90613877565b61162c60006127df565b565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610bba90613877565b60005b8251811015610d0c57816004600085848151811061167b5761167b6138c9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116b7816138f5565b91505061165b565b6000546001600160a01b031633146116e95760405162461bcd60e51b8152600401610bba90613877565b804710156117395760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bba565b604051339082156108fc029083906000818181858888f19350505050158015611169573d6000803e3d6000fd5b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610bba90613877565b808261179c8587613970565b6117a69190613970565b6117b09190613970565b6017819055600a10156118055760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020746178657320617420313025206f72206c65737300006044820152606401610bba565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600954600090339060ff168061189457506001600160a01b03811660009081526006602052604090205460ff165b6118b05760405162461bcd60e51b8152600401610bba90613840565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156119325760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bba565b6119413386610e46878561390e565b506001949350505050565b600954600090339060ff168061197a57506001600160a01b03811660009081526006602052604090205460ff165b6119965760405162461bcd60e51b8152600401610bba90613840565b610bce338585611ee9565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610bba90613877565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a175760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a6c5760405162461bcd60e51b8152600401610bba90613877565b611a786009600a613a67565b611a829082613921565b60115550565b6000546001600160a01b03163314611ab25760405162461bcd60e51b8152600401610bba90613877565b611abe6009600a613a67565b611ac89082613921565b60145550565b6000546001600160a01b03163314611af85760405162461bcd60e51b8152600401610bba90613877565b611b03816001613921565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b8f5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b038116611bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bba565b611bfd816127df565b50565b6000546001600160a01b03163314611c2a5760405162461bcd60e51b8152600401610bba90613877565b8082611c368587613970565b611c409190613970565b611c4a9190613970565b6018819055600a1015611c9f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020746178657320617420313025206f72206c65737300006044820152606401610bba565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600082600003611d135750600061138b565b6000611d1f8385613921565b905082611d2c8583613938565b14610fb05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bba565b6000610fb083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061282f565b6001600160a01b038316611e275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bba565b6001600160a01b038216611e885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bba565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bba565b6001600160a01b038216611faf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bba565b600081116120115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bba565b61201a83611599565b8111156120835760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bba565b6001600160a01b03831660009081526007602052604090205460ff161580156120c557506001600160a01b03821660009081526007602052604090205460ff16155b6121115760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206120626f742c20552076657272792062616420474c0000006044820152606401610bba565b6001600160a01b03831660009081526004602052604090205460ff1615801561215357506001600160a01b03821660009081526004602052604090205460ff16155b1561219f5760095460ff1661219f5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610bba565b6001600160a01b03831660009081526004602052604090205460ff161580156121e157506001600160a01b03821660009081526004602052604090205460ff16155b80156121fa57506015546121f6906002613970565b4311155b1561226957600e546001600160a01b03908116908316036122695760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203220626c6044820152636f636b7360e01b6064820152608401610bba565b600e546001600160a01b03848116911614801561229f57506001600160a01b03821660009081526004602052604090205460ff16155b80156122b4575060095462010000900460ff16155b156123705760125481111561230b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610bba565b6014548161231884611599565b6123229190613970565b11156123705760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610bba565b600e546001600160a01b038481169116148015906123a757506001600160a01b03821660009081526004602052604090205460ff16155b80156123cc57506001600160a01b03831660009081526004602052604090205460ff16155b80156123e1575060095462010000900460ff16155b15612544576013548111156124385760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610bba565b600e546001600160a01b038381169116146124b2576014548161245a84611599565b6124649190613970565b11156124b25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610bba565b600b5460ff1615612544576001600160a01b0383166000908152600a60205260408120546124e0904261390e565b9050600c548110156125275760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610bba565b506001600160a01b0383166000908152600a602052604090204290555b6125506009600a613a67565b61255b90600a613921565b8161256585611599565b61256f919061390e565b116125b65761257d83611599565b8161258a6009600a613a67565b61259590600a613921565b61259f9190613970565b6125a9919061390e565b6125b3908261390e565b90505b60006011546125c430611599565b600954911115915062010000900460ff161580156125df5750805b80156125f95750600e546001600160a01b03858116911614155b801561261e57506001600160a01b03841660009081526004602052604090205460ff16155b801561264357506001600160a01b03831660009081526004602052604090205460ff16155b156126cf57600e546001600160a01b03908116908416036126995760115460408051608081018252601f54815260208054908201526021549181019190915260225460608201526126949190612866565b6126cf565b60115460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526126cf9190612866565b60095460019060009062010000900460ff168061270457506001600160a01b03861660009081526004602052604090205460ff165b8061272757506001600160a01b03851660009081526004602052604090205460ff165b1561273157600091505b600e546001600160a01b039081169086160361274b575060015b61275886868685856129c0565b505050505050565b600080600061276d612c8d565b909250905061277c8183613938565b9250505090565b61278b6134af565b612796848484612e10565b90506127ab8185856127a6612760565b612fc3565b608086015260608501526040840152602083015281526127d381846127ce612760565b613072565b60a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081836128505760405162461bcd60e51b8152600401610bba9190613509565b50600061285d8486613938565b95945050505050565b6009805462ff00001916620100001790556060810151602082015160408301516000929161289391613970565b61289d9190613970565b6128a8906002613921565b90506000818360400151856128bd9190613921565b6128c79190613938565b905060006128d5828661390e565b9050476128e18261309a565b60006128ed824761390e565b90506000866040015186612901919061390e565b61290b9083613938565b9050600087604001518261291f9190613921565b905080156129315761293186826131ec565b6020880151600090612944846002613921565b61294e9190613921565b9050801561296c5760195461296c906001600160a01b0316826132c1565b606089015160009061297f856002613921565b6129899190613921565b905080156129a757601a546129a7906001600160a01b0316826132c1565b50506009805462ff000019169055505050505050505050565b60006129cd848484612783565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a2f576001600160a01b038616600090815260026020526040902054612a1590859061390e565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612a925760c08101516001600160a01b038616600090815260026020526040902054612a789190613970565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612ab7919061390e565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612aee9190613970565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b20575060008160e00151115b15612b3757612b3781604001518260e001516133da565b600081608001511180612b4f57506000816101200151115b15612bd457612b67816080015182610120015161340f565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151846101000151856101200151612bb89190613970565b612bc29190613970565b60405190815260200160405180910390a35b600081606001511180612bec57506000816101000151115b15612c0457612c048160600151826101000151613485565b60008160a001511180612c1c57506000816101400151115b15612c3457612c348160a0015182610140015161349a565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612c7d91815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612ddf57826001600060088481548110612cbc57612cbc6138c9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d275750816002600060088481548110612d0057612d006138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3d57601054600f54945094505050509091565b6001600060088381548110612d5457612d546138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d83908461390e565b92506002600060088381548110612d9c57612d9c6138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcb908361390e565b915080612dd7816138f5565b915050612c9a565b50600f54601054612df09190613938565b821015612e0757601054600f549350935050509091565b90939092509050565b612e186134af565b82612e295760c08101849052610fb0565b612e546040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612e89575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612eb4565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6000612ebe610e57565b9050806103e8836000015188612ed49190613921565b612ede9190613938565b612ee89190613921565b60e0840152602082015181906103e890612f029089613921565b612f0c9190613938565b612f169190613921565b610100840152604082015181906103e890612f319089613921565b612f3b9190613938565b612f459190613921565b610120840152606082015181906103e890612f609089613921565b612f6a9190613938565b612f749190613921565b610140840181905261012084015161010085015160e0860151612f97908a61390e565b612fa1919061390e565b612fab919061390e565b612fb5919061390e565b60c084015250509392505050565b600080808080612fd38689613921565b945086612feb57508392506000915081905080613067565b858960e00151612ffb9190613921565b92508589610100015161300e9190613921565b9150858961012001516130219190613921565b90506000868a61014001516130369190613921565b9050808284613045878a61390e565b61304f919061390e565b613059919061390e565b613063919061390e565b9450505b945094509450945094565b60008261308157506000610fb0565b818461014001516130929190613921565b949350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130cf576130cf6138c9565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c9190613a76565b8160018151811061315f5761315f6138c9565b6001600160a01b039283166020918202929092010152600d546131859130911684611dc5565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be908590600090869030904290600401613a93565b600060405180830381600087803b1580156131d857600080fd5b505af1158015612758573d6000803e3d6000fd5b600d546132049030906001600160a01b031684611dc5565b600d546001600160a01b031663f305d71982308560008061322d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613295573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132ba9190613b04565b5050505050565b804710156133115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bba565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461335e576040519150601f19603f3d011682016040523d82523d6000602084013e613363565b606091505b5050905080610d0c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bba565b81601060008282546133ec919061390e565b909155505060238054829190600090613406908490613970565b90915550505050565b80602360020160008282546134249190613970565b90915550503060009081526005602052604090205460ff1615613466573060009081526002602052604081208054839290613460908490613970565b90915550505b3060009081526001602052604081208054849290613406908490613970565b80602360010160008282546134249190613970565b80602360030160008282546134249190613970565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b818110156135365785810183015185820160400152820161351a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611bfd57600080fd5b803561357781613557565b919050565b6000806040838503121561358f57600080fd5b823561359a81613557565b946020939093013593505050565b6000806000606084860312156135bd57600080fd5b83356135c881613557565b925060208401356135d881613557565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8015158114611bfd57600080fd5b8035613577816135ff565b6000806040838503121561362b57600080fd5b823567ffffffffffffffff8082111561364357600080fd5b818501915085601f83011261365757600080fd5b813560208282111561366b5761366b6135e9565b8160051b604051601f19603f83011681018181108682111715613690576136906135e9565b6040529283528183019350848101820192898411156136ae57600080fd5b948201945b838610156136d3576136c48661356c565b855294820194938201936136b3565b96506136e2905087820161360d565b9450505050509250929050565b60006020828403121561370157600080fd5b8135610fb081613557565b60006020828403121561371e57600080fd5b5035919050565b60006020828403121561373757600080fd5b8135610fb0816135ff565b6000806040838503121561375557600080fd5b823561376081613557565b9150602083013561377081613557565b809150509250929050565b6000806040838503121561378e57600080fd5b823591506020830135613770816135ff565b600080604083850312156137b357600080fd5b50508035926020909101359150565b600080604083850312156137d557600080fd5b82356137e081613557565b91506020830135613770816135ff565b6000806000806080858703121561380657600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561383557600080fd5b823561359a816135ff565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156138be57600080fd5b8151610fb0816135ff565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613907576139076138df565b5060010190565b8181038181111561138b5761138b6138df565b808202811582820484141761138b5761138b6138df565b60008261395557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b8082018082111561138b5761138b6138df565b600181815b808511156139be5781600019048211156139a4576139a46138df565b808516156139b157918102915b93841c9390800290613988565b509250929050565b6000826139d55750600161138b565b816139e25750600061138b565b81600181146139f85760028114613a0257613a1e565b600191505061138b565b60ff841115613a1357613a136138df565b50506001821b61138b565b5060208310610133831016604e8410600b8410161715613a41575081810a61138b565b613a4b8383613983565b8060001904821115613a5f57613a5f6138df565b029392505050565b6000610fb060ff8416836139c6565b600060208284031215613a8857600080fd5b8151610fb081613557565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ae35784516001600160a01b031683529383019391830191600101613abe565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b1957600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122065dce7bc0ad73bb140df9e29ce4013800c02fdbee6295a979a90c950bd883c2c64736f6c634300081100330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063715018a6116101dc578063b5c5714511610102578063ea2f0b37116100a0578063f480fec21161006f578063f480fec214610af7578063f66895a314610b17578063f887ea4014610b3a578063ff950c6514610b5a57600080fd5b8063ea2f0b3714610a87578063ee36e35914610aa7578063ef27902114610ac1578063f2fde38b14610ad757600080fd5b8063d8672e51116100dc578063d8672e51146109eb578063dd62ed3e14610a0b578063e2f4560514610a51578063e517f2b914610a6757600080fd5b8063b5c5714514610995578063d257b34f146109b5578063d2ce0db2146109d557600080fd5b806395d89b411161017a578063a457c2d711610149578063a457c2d714610915578063a8aa1b3114610935578063a9059cbb14610955578063aacebbe31461097557600080fd5b806395d89b41146108815780639ba5e4d5146108b25780639e252f00146108d5578063a12a7d61146108f557600080fd5b806388f82020116101b657806388f82020146107ea5780638da5cb5b146108235780638e2839ff146108415780638ea5220f1461086157600080fd5b8063715018a61461075a578063728f8eea1461076f57806375f0a874146107b257600080fd5b806339509351116102c157806359759f611161025f57806366a88d961161022e57806366a88d96146106ef5780636aa5b37f146107055780636ddd17131461071b57806370a082311461073a57600080fd5b806359759f61146106695780635b24ea5e1461068957806362695eae146106a9578063652e2f04146106d957600080fd5b80634549b0391161029b5780634549b039146105d65780634ada218b146105f657806352390c02146106105780635342acb41461063057600080fd5b8063395093511461057657806340b28c2f14610596578063437823ec146105b657600080fd5b8063274a533c1161032e578063313ce56711610308578063313ce5671461050457806331d66239146105205780633685d41914610536578063379ba1d91461055657600080fd5b8063274a533c146104b95780632b63c300146104cf5780632d838119146104e457600080fd5b806313f97a8e1161036a57806313f97a8e1461043a57806318160ddd1461045a5780631816467f1461047957806323b872dd1461049957600080fd5b806306fdde031461039c578063095ea7b3146103e85780630d65df9b1461041857600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b5060408051808201909152601181527044656a6974617275205368696e5279c5ab60781b60208201525b6040516103df9190613509565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461357c565b610b70565b60405190151581526020016103df565b34801561042457600080fd5b506104386104333660046135a8565b610bd8565b005b34801561044657600080fd5b50610438610455366004613618565b610c7b565b34801561046657600080fd5b50600f545b6040519081526020016103df565b34801561048557600080fd5b506104386104943660046136ef565b610d11565b3480156104a557600080fd5b506104086104b43660046135a8565b610d5d565b3480156104c557600080fd5b5061046b60155481565b3480156104db57600080fd5b5061046b610e57565b3480156104f057600080fd5b5061046b6104ff36600461370c565b610f33565b34801561051057600080fd5b50604051600981526020016103df565b34801561052c57600080fd5b5061046b60175481565b34801561054257600080fd5b506104386105513660046136ef565b610fb7565b34801561056257600080fd5b50610438610571366004613725565b61116d565b34801561058257600080fd5b5061040861059136600461357c565b6111d7565b3480156105a257600080fd5b506104386105b1366004613742565b611257565b3480156105c257600080fd5b506104386105d13660046136ef565b6112af565b3480156105e257600080fd5b5061046b6105f136600461377b565b6112fd565b34801561060257600080fd5b506009546104089060ff1681565b34801561061c57600080fd5b5061043861062b3660046136ef565b611391565b34801561063c57600080fd5b5061040861064b3660046136ef565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067557600080fd5b506104386106843660046137a0565b6114e4565b34801561069557600080fd5b506104386106a43660046137c2565b611544565b3480156106b557600080fd5b506104086106c43660046136ef565b60066020526000908152604090205460ff1681565b3480156106e557600080fd5b5061046b60135481565b3480156106fb57600080fd5b5061046b60145481565b34801561071157600080fd5b5061046b60125481565b34801561072757600080fd5b5060095461040890610100900460ff1681565b34801561074657600080fd5b5061046b6107553660046136ef565b611599565b34801561076657600080fd5b506104386115f8565b34801561077b57600080fd5b50601b54601c54601d54601e546107929392919084565b6040805194855260208501939093529183015260608201526080016103df565b3480156107be57600080fd5b506019546107d2906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b3480156107f657600080fd5b506104086108053660046136ef565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082f57600080fd5b506000546001600160a01b03166107d2565b34801561084d57600080fd5b5061043861085c366004613618565b61162e565b34801561086d57600080fd5b50601a546107d2906001600160a01b031681565b34801561088d57600080fd5b506040805180820190915260088152675368696e5279c5ab60c01b60208201526103d2565b3480156108be57600080fd5b506023546024546025546026546107929392919084565b3480156108e157600080fd5b506104386108f036600461370c565b6116bf565b34801561090157600080fd5b506104386109103660046137f0565b611766565b34801561092157600080fd5b5061040861093036600461357c565b611866565b34801561094157600080fd5b50600e546107d2906001600160a01b031681565b34801561096157600080fd5b5061040861097036600461357c565b61194c565b34801561098157600080fd5b506104386109903660046136ef565b6119a1565b3480156109a157600080fd5b506104386109b03660046137c2565b6119ed565b3480156109c157600080fd5b506104386109d036600461370c565b611a42565b3480156109e157600080fd5b5061046b600c5481565b3480156109f757600080fd5b50610438610a0636600461370c565b611a88565b348015610a1757600080fd5b5061046b610a26366004613742565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b5061046b60115481565b348015610a7357600080fd5b50610438610a82366004613822565b611ace565b348015610a9357600080fd5b50610438610aa23660046136ef565b611b1a565b348015610ab357600080fd5b50600b546104089060ff1681565b348015610acd57600080fd5b5061046b60165481565b348015610ae357600080fd5b50610438610af23660046136ef565b611b65565b348015610b0357600080fd5b50610438610b123660046137f0565b611c00565b348015610b2357600080fd5b50601f546020546021546022546107929392919084565b348015610b4657600080fd5b50600d546107d2906001600160a01b031681565b348015610b6657600080fd5b5061046b60185481565b600954600090339060ff1680610b9e57506001600160a01b03811660009081526006602052604090205460ff165b610bc35760405162461bcd60e51b8152600401610bba90613840565b60405180910390fd5b610bce338585611dc5565b5060019392505050565b6000546001600160a01b03163314610c025760405162461bcd60e51b8152600401610bba90613877565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7591906138ac565b50505050565b6000546001600160a01b03163314610ca55760405162461bcd60e51b8152600401610bba90613877565b60005b8251811015610d0c578160076000858481518110610cc857610cc86138c9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d04816138f5565b915050610ca8565b505050565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610bba90613877565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610d8b57506001600160a01b03811660009081526006602052604090205460ff165b610da75760405162461bcd60e51b8152600401610bba90613840565b610db2858585611ee9565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610e375760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bba565b610e4b8633610e46878561390e565b611dc5565b50600195945050505050565b60008060165442610e68919061390e565b9050610e10610e78816001613921565b821015610e885760789250505090565b610e93816002613921565b821015610ea357603c9250505090565b610eae816003613921565b821015610ebe5760329250505090565b610ec9816004613921565b821015610ed95760289250505090565b610ee4816008613921565b821015610ef457601e9250505090565b610eff816010613921565b821015610f0f5760149250505090565b610f1a816018613921565b821015610f2a57600a9250505090565b60049250505090565b6000601054821115610f9a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bba565b6000610fa4612760565b9050610fb08184613938565b9392505050565b6000546001600160a01b03163314610fe15760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03811660009081526005602052604090205460ff166110495760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bba565b60005b60085481101561116957816001600160a01b031660088281548110611073576110736138c9565b6000918252602090912001546001600160a01b031603611157576008805461109d9060019061390e565b815481106110ad576110ad6138c9565b600091825260209091200154600880546001600160a01b0390921691839081106110d9576110d96138c9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111315761113161395a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611161816138f5565b91505061104c565b5050565b6000546001600160a01b031633146111975760405162461bcd60e51b8152600401610bba90613877565b6009805461ffff191661ff00198315159081169190911761010082021790915560011480156111c65750601554155b156111d057436015555b5042601655565b600954600090339060ff168061120557506001600160a01b03811660009081526006602052604090205460ff165b6112215760405162461bcd60e51b8152600401610bba90613840565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610bce91908690610e46908790613970565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610bba90613877565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156113515760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bba565b8161136f5760006113658460016000612783565b51915061138b9050565b600061137e8460016000612783565b60200151915061138b9050565b92915050565b6000546001600160a01b031633146113bb5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03811660009081526005602052604090205460ff16156114245760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bba565b6001600160a01b0381166000908152600160205260409020541561147e576001600160a01b03811660009081526001602052604090205461146490610f33565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610bba90613877565b61151a6009600a613a67565b6115249083613921565b6012556115336009600a613a67565b61153d9082613921565b6013555050565b6000546001600160a01b0316331461156e5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156115d657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461138b90610f33565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610bba90613877565b61162c60006127df565b565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610bba90613877565b60005b8251811015610d0c57816004600085848151811061167b5761167b6138c9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116b7816138f5565b91505061165b565b6000546001600160a01b031633146116e95760405162461bcd60e51b8152600401610bba90613877565b804710156117395760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bba565b604051339082156108fc029083906000818181858888f19350505050158015611169573d6000803e3d6000fd5b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610bba90613877565b808261179c8587613970565b6117a69190613970565b6117b09190613970565b6017819055600a10156118055760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020746178657320617420313025206f72206c65737300006044820152606401610bba565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600954600090339060ff168061189457506001600160a01b03811660009081526006602052604090205460ff165b6118b05760405162461bcd60e51b8152600401610bba90613840565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156119325760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bba565b6119413386610e46878561390e565b506001949350505050565b600954600090339060ff168061197a57506001600160a01b03811660009081526006602052604090205460ff165b6119965760405162461bcd60e51b8152600401610bba90613840565b610bce338585611ee9565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610bba90613877565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a175760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a6c5760405162461bcd60e51b8152600401610bba90613877565b611a786009600a613a67565b611a829082613921565b60115550565b6000546001600160a01b03163314611ab25760405162461bcd60e51b8152600401610bba90613877565b611abe6009600a613a67565b611ac89082613921565b60145550565b6000546001600160a01b03163314611af85760405162461bcd60e51b8152600401610bba90613877565b611b03816001613921565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b8f5760405162461bcd60e51b8152600401610bba90613877565b6001600160a01b038116611bf45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bba565b611bfd816127df565b50565b6000546001600160a01b03163314611c2a5760405162461bcd60e51b8152600401610bba90613877565b8082611c368587613970565b611c409190613970565b611c4a9190613970565b6018819055600a1015611c9f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b65657020746178657320617420313025206f72206c65737300006044820152606401610bba565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600082600003611d135750600061138b565b6000611d1f8385613921565b905082611d2c8583613938565b14610fb05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bba565b6000610fb083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061282f565b6001600160a01b038316611e275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bba565b6001600160a01b038216611e885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bba565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bba565b6001600160a01b038216611faf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bba565b600081116120115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bba565b61201a83611599565b8111156120835760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bba565b6001600160a01b03831660009081526007602052604090205460ff161580156120c557506001600160a01b03821660009081526007602052604090205460ff16155b6121115760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206120626f742c20552076657272792062616420474c0000006044820152606401610bba565b6001600160a01b03831660009081526004602052604090205460ff1615801561215357506001600160a01b03821660009081526004602052604090205460ff16155b1561219f5760095460ff1661219f5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610bba565b6001600160a01b03831660009081526004602052604090205460ff161580156121e157506001600160a01b03821660009081526004602052604090205460ff16155b80156121fa57506015546121f6906002613970565b4311155b1561226957600e546001600160a01b03908116908316036122695760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203220626c6044820152636f636b7360e01b6064820152608401610bba565b600e546001600160a01b03848116911614801561229f57506001600160a01b03821660009081526004602052604090205460ff16155b80156122b4575060095462010000900460ff16155b156123705760125481111561230b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610bba565b6014548161231884611599565b6123229190613970565b11156123705760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610bba565b600e546001600160a01b038481169116148015906123a757506001600160a01b03821660009081526004602052604090205460ff16155b80156123cc57506001600160a01b03831660009081526004602052604090205460ff16155b80156123e1575060095462010000900460ff16155b15612544576013548111156124385760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610bba565b600e546001600160a01b038381169116146124b2576014548161245a84611599565b6124649190613970565b11156124b25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610bba565b600b5460ff1615612544576001600160a01b0383166000908152600a60205260408120546124e0904261390e565b9050600c548110156125275760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610bba565b506001600160a01b0383166000908152600a602052604090204290555b6125506009600a613a67565b61255b90600a613921565b8161256585611599565b61256f919061390e565b116125b65761257d83611599565b8161258a6009600a613a67565b61259590600a613921565b61259f9190613970565b6125a9919061390e565b6125b3908261390e565b90505b60006011546125c430611599565b600954911115915062010000900460ff161580156125df5750805b80156125f95750600e546001600160a01b03858116911614155b801561261e57506001600160a01b03841660009081526004602052604090205460ff16155b801561264357506001600160a01b03831660009081526004602052604090205460ff16155b156126cf57600e546001600160a01b03908116908416036126995760115460408051608081018252601f54815260208054908201526021549181019190915260225460608201526126949190612866565b6126cf565b60115460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526126cf9190612866565b60095460019060009062010000900460ff168061270457506001600160a01b03861660009081526004602052604090205460ff165b8061272757506001600160a01b03851660009081526004602052604090205460ff165b1561273157600091505b600e546001600160a01b039081169086160361274b575060015b61275886868685856129c0565b505050505050565b600080600061276d612c8d565b909250905061277c8183613938565b9250505090565b61278b6134af565b612796848484612e10565b90506127ab8185856127a6612760565b612fc3565b608086015260608501526040840152602083015281526127d381846127ce612760565b613072565b60a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081836128505760405162461bcd60e51b8152600401610bba9190613509565b50600061285d8486613938565b95945050505050565b6009805462ff00001916620100001790556060810151602082015160408301516000929161289391613970565b61289d9190613970565b6128a8906002613921565b90506000818360400151856128bd9190613921565b6128c79190613938565b905060006128d5828661390e565b9050476128e18261309a565b60006128ed824761390e565b90506000866040015186612901919061390e565b61290b9083613938565b9050600087604001518261291f9190613921565b905080156129315761293186826131ec565b6020880151600090612944846002613921565b61294e9190613921565b9050801561296c5760195461296c906001600160a01b0316826132c1565b606089015160009061297f856002613921565b6129899190613921565b905080156129a757601a546129a7906001600160a01b0316826132c1565b50506009805462ff000019169055505050505050505050565b60006129cd848484612783565b6001600160a01b03871660009081526005602052604090205490915060ff1615612a2f576001600160a01b038616600090815260026020526040902054612a1590859061390e565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615612a925760c08101516001600160a01b038616600090815260026020526040902054612a789190613970565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054612ab7919061390e565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612aee9190613970565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612b20575060008160e00151115b15612b3757612b3781604001518260e001516133da565b600081608001511180612b4f57506000816101200151115b15612bd457612b67816080015182610120015161340f565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151846101000151856101200151612bb89190613970565b612bc29190613970565b60405190815260200160405180910390a35b600081606001511180612bec57506000816101000151115b15612c0457612c048160600151826101000151613485565b60008160a001511180612c1c57506000816101400151115b15612c3457612c348160a0015182610140015161349a565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612c7d91815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612ddf57826001600060088481548110612cbc57612cbc6138c9565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d275750816002600060088481548110612d0057612d006138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3d57601054600f54945094505050509091565b6001600060088381548110612d5457612d546138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d83908461390e565b92506002600060088381548110612d9c57612d9c6138c9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcb908361390e565b915080612dd7816138f5565b915050612c9a565b50600f54601054612df09190613938565b821015612e0757601054600f549350935050509091565b90939092509050565b612e186134af565b82612e295760c08101849052610fb0565b612e546040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612e89575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612eb4565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6000612ebe610e57565b9050806103e8836000015188612ed49190613921565b612ede9190613938565b612ee89190613921565b60e0840152602082015181906103e890612f029089613921565b612f0c9190613938565b612f169190613921565b610100840152604082015181906103e890612f319089613921565b612f3b9190613938565b612f459190613921565b610120840152606082015181906103e890612f609089613921565b612f6a9190613938565b612f749190613921565b610140840181905261012084015161010085015160e0860151612f97908a61390e565b612fa1919061390e565b612fab919061390e565b612fb5919061390e565b60c084015250509392505050565b600080808080612fd38689613921565b945086612feb57508392506000915081905080613067565b858960e00151612ffb9190613921565b92508589610100015161300e9190613921565b9150858961012001516130219190613921565b90506000868a61014001516130369190613921565b9050808284613045878a61390e565b61304f919061390e565b613059919061390e565b613063919061390e565b9450505b945094509450945094565b60008261308157506000610fb0565b818461014001516130929190613921565b949350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130cf576130cf6138c9565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c9190613a76565b8160018151811061315f5761315f6138c9565b6001600160a01b039283166020918202929092010152600d546131859130911684611dc5565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131be908590600090869030904290600401613a93565b600060405180830381600087803b1580156131d857600080fd5b505af1158015612758573d6000803e3d6000fd5b600d546132049030906001600160a01b031684611dc5565b600d546001600160a01b031663f305d71982308560008061322d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613295573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132ba9190613b04565b5050505050565b804710156133115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bba565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461335e576040519150601f19603f3d011682016040523d82523d6000602084013e613363565b606091505b5050905080610d0c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bba565b81601060008282546133ec919061390e565b909155505060238054829190600090613406908490613970565b90915550505050565b80602360020160008282546134249190613970565b90915550503060009081526005602052604090205460ff1615613466573060009081526002602052604081208054839290613460908490613970565b90915550505b3060009081526001602052604081208054849290613406908490613970565b80602360010160008282546134249190613970565b80602360030160008282546134249190613970565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b818110156135365785810183015185820160400152820161351a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611bfd57600080fd5b803561357781613557565b919050565b6000806040838503121561358f57600080fd5b823561359a81613557565b946020939093013593505050565b6000806000606084860312156135bd57600080fd5b83356135c881613557565b925060208401356135d881613557565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8015158114611bfd57600080fd5b8035613577816135ff565b6000806040838503121561362b57600080fd5b823567ffffffffffffffff8082111561364357600080fd5b818501915085601f83011261365757600080fd5b813560208282111561366b5761366b6135e9565b8160051b604051601f19603f83011681018181108682111715613690576136906135e9565b6040529283528183019350848101820192898411156136ae57600080fd5b948201945b838610156136d3576136c48661356c565b855294820194938201936136b3565b96506136e2905087820161360d565b9450505050509250929050565b60006020828403121561370157600080fd5b8135610fb081613557565b60006020828403121561371e57600080fd5b5035919050565b60006020828403121561373757600080fd5b8135610fb0816135ff565b6000806040838503121561375557600080fd5b823561376081613557565b9150602083013561377081613557565b809150509250929050565b6000806040838503121561378e57600080fd5b823591506020830135613770816135ff565b600080604083850312156137b357600080fd5b50508035926020909101359150565b600080604083850312156137d557600080fd5b82356137e081613557565b91506020830135613770816135ff565b6000806000806080858703121561380657600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561383557600080fd5b823561359a816135ff565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156138be57600080fd5b8151610fb0816135ff565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613907576139076138df565b5060010190565b8181038181111561138b5761138b6138df565b808202811582820484141761138b5761138b6138df565b60008261395557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b8082018082111561138b5761138b6138df565b600181815b808511156139be5781600019048211156139a4576139a46138df565b808516156139b157918102915b93841c9390800290613988565b509250929050565b6000826139d55750600161138b565b816139e25750600061138b565b81600181146139f85760028114613a0257613a1e565b600191505061138b565b60ff841115613a1357613a136138df565b50506001821b61138b565b5060208310610133831016604e8410600b8410161715613a41575081810a61138b565b613a4b8383613983565b8060001904821115613a5f57613a5f6138df565b029392505050565b6000610fb060ff8416836139c6565b600060208284031215613a8857600080fd5b8151610fb081613557565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ae35784516001600160a01b031683529383019391830191600101613abe565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b1957600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122065dce7bc0ad73bb140df9e29ce4013800c02fdbee6295a979a90c950bd883c2c64736f6c63430008110033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

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

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


Deployed Bytecode Sourcemap

5141:22682:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8923:83;;;;;;;;;;-1:-1:-1;8993:5:0;;;;;;;;;;;;-1:-1:-1;;;8993:5:0;;;;8923:83;;;;;;;:::i;:::-;;;;;;;;9660:181;;;;;;;;;;-1:-1:-1;9660:181:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;9660:181:0;1162:187:1;27624:154:0;;;;;;;;;;-1:-1:-1;27624:154:0;;;;;:::i;:::-;;:::i;:::-;;26498:209;;;;;;;;;;-1:-1:-1;26498:209:0;;;;;:::i;:::-;;:::i;9196:95::-;;;;;;;;;;-1:-1:-1;9276:7:0;;9196:95;;;3545:25:1;;;3533:2;3518:18;9196:95:0;3399:177:1;25948:102:0;;;;;;;;;;-1:-1:-1;25948:102:0;;;;;:::i;:::-;;:::i;9849:430::-;;;;;;;;;;-1:-1:-1;9849:430:0;;;;;:::i;:::-;;:::i;6685:28::-;;;;;;;;;;;;;;;;15587:790;;;;;;;;;;;;;:::i;11990:248::-;;;;;;;;;;-1:-1:-1;11990:248:0;;;;;:::i;:::-;;:::i;9105:83::-;;;;;;;;;;-1:-1:-1;9105:83:0;;6238:1;4160:36:1;;4148:2;4133:18;9105:83:0;4018:184:1;6767:28:0;;;;;;;;;;;;;;;;12587:475;;;;;;;;;;-1:-1:-1;12587:475:0;;;;;:::i;:::-;;:::i;11726:256::-;;;;;;;;;;-1:-1:-1;11726:256:0;;;;;:::i;:::-;;:::i;10287:228::-;;;;;;;;;;-1:-1:-1;10287:228:0;;;;;:::i;:::-;;:::i;27186:154::-;;;;;;;;;;-1:-1:-1;27186:154:0;;;;;:::i;:::-;;:::i;13070:111::-;;;;;;;;;;-1:-1:-1;13070:111:0;;;;;:::i;:::-;;:::i;11248:470::-;;;;;;;;;;-1:-1:-1;11248:470:0;;;;;:::i;:::-;;:::i;5721:34::-;;;;;;;;;;-1:-1:-1;5721:34:0;;;;;;;;12246:333;;;;;;;;;;-1:-1:-1;12246:333:0;;;;;:::i;:::-;;:::i;13307:123::-;;;;;;;;;;-1:-1:-1;13307:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;13395:27:0;13371:4;13395:27;;;:18;:27;;;;;;;;;13307:123;26860:183;;;;;;;;;;-1:-1:-1;26860:183:0;;;;;:::i;:::-;;:::i;26360:126::-;;;;;;;;;;-1:-1:-1;26360:126:0;;;;;:::i;:::-;;:::i;5569:48::-;;;;;;;;;;-1:-1:-1;5569:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6549:57;;;;;;;;;;;;;;;;6613:59;;;;;;;;;;;;;;;;6486:56;;;;;;;;;;;;;;;;5763:30;;;;;;;;;;-1:-1:-1;5763:30:0;;;;;;;;;;;9299:198;;;;;;;;;;-1:-1:-1;9299:198:0;;;;;:::i;:::-;;:::i;2358:94::-;;;;;;;;;;;;;:::i;7268:38::-;;;;;;;;;;-1:-1:-1;7268:38:0;;;;;;;;;;;;;;;;;;;6031:25:1;;;6087:2;6072:18;;6065:34;;;;6115:18;;;6108:34;6173:2;6158:18;;6151:34;6018:3;6003:19;7268:38:0;5800:391:1;6853:75:0;;;;;;;;;;-1:-1:-1;6853:75:0;;;;-1:-1:-1;;;;;6853:75:0;;;;;;-1:-1:-1;;;;;6360:32:1;;;6342:51;;6330:2;6315:18;6853:75:0;6196:203:1;11120:120:0;;;;;;;;;;-1:-1:-1;11120:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;11212:20:0;11188:4;11212:20;;;:11;:20;;;;;;;;;11120:120;2135:87;;;;;;;;;;-1:-1:-1;2181:7:0;2208:6;-1:-1:-1;;;;;2208:6:0;2135:87;;25605:209;;;;;;;;;;-1:-1:-1;25605:209:0;;;;;:::i;:::-;;:::i;6935:69::-;;;;;;;;;;-1:-1:-1;6935:69:0;;;;-1:-1:-1;;;;;6935:69:0;;;9012:87;;;;;;;;;;-1:-1:-1;9084:7:0;;;;;;;;;;;;-1:-1:-1;;;9084:7:0;;;;9012:87;;7509:36;;;;;;;;;;-1:-1:-1;7509:36:0;;;;;;;;;;;;;;;27416:196;;;;;;;;;;-1:-1:-1;27416:196:0;;;;;:::i;:::-;;:::i;13438:336::-;;;;;;;;;;-1:-1:-1;13438:336:0;;;;;:::i;:::-;;:::i;10523:390::-;;;;;;;;;;-1:-1:-1;10523:390:0;;;;;:::i;:::-;;:::i;6175:19::-;;;;;;;;;;-1:-1:-1;6175:19:0;;;;-1:-1:-1;;;;;6175:19:0;;;10925:187;;;;;;;;;;-1:-1:-1;10925:187:0;;;;;:::i;:::-;;:::i;25822:114::-;;;;;;;;;;-1:-1:-1;25822:114:0;;;;;:::i;:::-;;:::i;26719:129::-;;;;;;;;;;-1:-1:-1;26719:129:0;;;;;:::i;:::-;;:::i;26218:130::-;;;;;;;;;;-1:-1:-1;26218:130:0;;;;;:::i;:::-;;:::i;5945:39::-;;;;;;;;;;;;;;;;27055:123;;;;;;;;;;-1:-1:-1;27055:123:0;;;;;:::i;:::-;;:::i;9509:143::-;;;;;;;;;;-1:-1:-1;9509:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9617:18:0;;;9590:7;9617:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9509:143;6418:61;;;;;;;;;;;;;;;;26058:152;;;;;;;;;;-1:-1:-1;26058:152:0;;;;;:::i;:::-;;:::i;13189:110::-;;;;;;;;;;-1:-1:-1;13189:110:0;;;;;:::i;:::-;;:::i;5903:35::-;;;;;;;;;;-1:-1:-1;5903:35:0;;;;;;;;6720:38;;;;;;;;;;;;;;;;2460:192;;;;;;;;;;-1:-1:-1;2460:192:0;;;;;:::i;:::-;;:::i;13786:346::-;;;;;;;;;;-1:-1:-1;13786:346:0;;;;;:::i;:::-;;:::i;7313:42::-;;;;;;;;;;-1:-1:-1;7313:42:0;;;;;;;;;;;;;;;6147:21;;;;;;;;;;-1:-1:-1;6147:21:0;;;;-1:-1:-1;;;;;6147:21:0;;;6802:29;;;;;;;;;;;;;;;;9660:181;6049:14;;9755:4;;9735:10;;6049:14;;;:42;;-1:-1:-1;;;;;;6067:24:0;;;;;;:15;:24;;;;;;;;6049:42;6041:78;;;;-1:-1:-1;;;6041:78:0;;;;;;;:::i;:::-;;;;;;;;;9772:39:::1;1754:10:::0;9795:7:::1;9804:6;9772:8;:39::i;:::-;-1:-1:-1::0;9829:4:0::1;::::0;9660:181;-1:-1:-1;;;9660:181:0:o;27624:154::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;27729:41:::1;::::0;-1:-1:-1;;;27729:41:0;;-1:-1:-1;;;;;8236:32:1;;;27729:41:0::1;::::0;::::1;8218:51:1::0;8285:18;;;8278:34;;;27729:27:0;::::1;::::0;::::1;::::0;8191:18:1;;27729:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27624:154:::0;;;:::o;26498:209::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;26597:9:::1;26593:107;26615:8;:15;26611:1;:19;26593:107;;;26681:5;26651:14;:27;26666:8;26675:1;26666:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26651:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26651:27:0;:35;;-1:-1:-1;;26651:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26632:3;::::1;::::0;::::1;:::i;:::-;;;;26593:107;;;;26498:209:::0;;:::o;25948:102::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;26021:9:::1;:21:::0;;-1:-1:-1;;;;;;26021:21:0::1;-1:-1:-1::0;;;;;26021:21:0;;;::::1;::::0;;;::::1;::::0;;25948:102::o;9849:430::-;6049:14;;9963:4;;9946:6;;6049:14;;;:42;;-1:-1:-1;;;;;;6067:24:0;;;;;;:15;:24;;;;;;;;6049:42;6041:78;;;;-1:-1:-1;;;6041:78:0;;;;;;;:::i;:::-;9980:36:::1;9990:6;9998:9;10009:6;9980:9;:36::i;:::-;-1:-1:-1::0;;;;;10056:19:0;::::1;10029:24;10056:19:::0;;;:11:::1;:19;::::0;;;;;;;1754:10;10056:33;;;;;;;;10108:26;;::::1;;10100:79;;;::::0;-1:-1:-1;;;10100:79:0;;9179:2:1;10100:79:0::1;::::0;::::1;9161:21:1::0;9218:2;9198:18;;;9191:30;9257:34;9237:18;;;9230:62;-1:-1:-1;;;9308:18:1;;;9301:38;9356:19;;10100:79:0::1;8977:404:1::0;10100:79:0::1;10190:57;10199:6:::0;1754:10;10221:25:::1;10240:6:::0;10221:16;:25:::1;:::i;:::-;10190:8;:57::i;:::-;-1:-1:-1::0;10267:4:0::1;::::0;9849:430;-1:-1:-1;;;;;9849:430:0:o;15587:790::-;15640:7;15660:24;15705:23;;15687:15;:41;;;;:::i;:::-;15660:68;-1:-1:-1;15754:7:0;15797:8;15754:7;15797:1;:8;:::i;:::-;15778:16;:27;15774:596;;;15830:3;15822:12;;;;15587:790;:::o;15774:596::-;15875:8;15879:4;15875:1;:8;:::i;:::-;15856:16;:27;15852:518;;;15908:2;15900:11;;;;15587:790;:::o;15852:518::-;15952:8;15956:4;15952:1;:8;:::i;:::-;15933:16;:27;15929:441;;;15985:2;15977:11;;;;15587:790;:::o;15929:441::-;16033:8;16037:4;16033:1;:8;:::i;:::-;16014:16;:27;16010:360;;;16066:2;16058:11;;;;15587:790;:::o;16010:360::-;16114:8;16118:4;16114:1;:8;:::i;:::-;16095:16;:27;16091:279;;;16147:2;16139:11;;;;15587:790;:::o;16091:279::-;16192:9;16197:4;16192:2;:9;:::i;:::-;16173:16;:28;16169:201;;;16226:2;16218:11;;;;15587:790;:::o;16169:201::-;16278:9;16283:4;16278:2;:9;:::i;:::-;16259:16;:28;16255:115;;;16312:2;16304:11;;;;15587:790;:::o;16255:115::-;16356:1;16348:10;;;;15587:790;:::o;11990:248::-;12056:7;12095;;12084;:18;;12076:73;;;;-1:-1:-1;;;12076:73:0;;9894:2:1;12076:73:0;;;9876:21:1;9933:2;9913:18;;;9906:30;9972:34;9952:18;;;9945:62;-1:-1:-1;;;10023:18:1;;;10016:40;10073:19;;12076:73:0;9692:406:1;12076:73:0;12160:19;12183:10;:8;:10::i;:::-;12160:33;-1:-1:-1;12211:19:0;12160:33;12211:7;:19;:::i;:::-;12204:26;11990:248;-1:-1:-1;;;11990:248:0:o;12587:475::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12669:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12661:56;;;::::0;-1:-1:-1;;;12661:56:0;;10527:2:1;12661:56:0::1;::::0;::::1;10509:21:1::0;10566:2;10546:18;;;10539:30;10605:25;10585:18;;;10578:53;10648:18;;12661:56:0::1;10325:347:1::0;12661:56:0::1;12733:9;12728:327;12752:9;:16:::0;12748:20;::::1;12728:327;;;12810:7;-1:-1:-1::0;;;;;12794:23:0::1;:9;12804:1;12794:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;12794:12:0::1;:23:::0;12790:254:::1;;12853:9;12863:16:::0;;:20:::1;::::0;12882:1:::1;::::0;12863:20:::1;:::i;:::-;12853:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;12838:9:::1;:12:::0;;-1:-1:-1;;;;;12853:31:0;;::::1;::::0;12848:1;;12838:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;12838:46:0::1;-1:-1:-1::0;;;;;12838:46:0;;::::1;;::::0;;12903:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;12942:11:::1;:20:::0;;;;:28;;-1:-1:-1;;12942:28:0::1;::::0;;12989:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;12989:15:0;;;;;-1:-1:-1;;;;;;12989:15:0::1;::::0;;;;;12728:327:::1;12587:475:::0;:::o;12790:254::-:1;12770:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12728:327;;;;12587:475:::0;:::o;11726:256::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;11794:14:::1;:22:::0;;-1:-1:-1;;11828:19:0;-1:-1:-1;;11794:22:0;::::1;;11828:19:::0;;;;;;;11794:22:::1;11828:19:::0;::::1;;::::0;;;-1:-1:-1;11857:13:0::1;:35:::0;::::1;;;-1:-1:-1::0;11874:13:0::1;::::0;:18;11857:35:::1;11854:68;;;11910:12;11894:13;:28:::0;11854:68:::1;-1:-1:-1::0;11959:15:0::1;11934:23;:40:::0;11726:256::o;10287:228::-;6049:14;;10388:4;;10367:10;;6049:14;;;:42;;-1:-1:-1;;;;;;6067:24:0;;;;;;:15;:24;;;;;;;;6049:42;6041:78;;;;-1:-1:-1;;;6041:78:0;;;;;;;:::i;:::-;1754:10;10437:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10437:34:0;::::1;::::0;;;;;;;;10405:80:::1;::::0;1754:10;10428:7;;10437:47:::1;::::0;10474:10;;10437:47:::1;:::i;27186:154::-:0;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;27280:6:::1;:27:::0;;-1:-1:-1;;;;;27280:27:0;;::::1;-1:-1:-1::0;;;;;;27280:27:0;;::::1;;::::0;;;27318:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;27186:154::o;13070:111::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13139:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;13139:34:0::1;13169:4;13139:34;::::0;;13070:111::o;11248:470::-;11338:7;11377;;11366;:18;;11358:62;;;;-1:-1:-1;;;11358:62:0;;11141:2:1;11358:62:0;;;11123:21:1;11180:2;11160:18;;;11153:30;11219:33;11199:18;;;11192:61;11270:18;;11358:62:0;10939:355:1;11358:62:0;11436:17;11431:280;;11470:28;11501:32;11512:7;11521:4;11527:5;11501:10;:32::i;:::-;11555:9;;-1:-1:-1;11548:16:0;;-1:-1:-1;11548:16:0;11431:280;11597:28;11628:32;11639:7;11648:4;11654:5;11628:10;:32::i;:::-;11682:17;;;;-1:-1:-1;11675:24:0;;-1:-1:-1;11675:24:0;11431:280;11248:470;;;;:::o;12246:333::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12329:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12328:21;12320:61;;;::::0;-1:-1:-1;;;12320:61:0;;11501:2:1;12320:61:0::1;::::0;::::1;11483:21:1::0;11540:2;11520:18;;;11513:30;11579:29;11559:18;;;11552:57;11626:18;;12320:61:0::1;11299:351:1::0;12320:61:0::1;-1:-1:-1::0;;;;;12395:16:0;::::1;12414:1;12395:16:::0;;;:7:::1;:16;::::0;;;;;:20;12392:108:::1;;-1:-1:-1::0;;;;;12471:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;12451:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;12432:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;12392:108:::1;-1:-1:-1::0;;;;;12510:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12510:27:0::1;12533:4;12510:27:::0;;::::1;::::0;;;12548:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12548:23:0::1;::::0;;::::1;::::0;;12246:333::o;26860:183::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;26971:14:::1;6238:1:::0;26971:2:::1;:14;:::i;:::-;26962:23;::::0;:6;:23:::1;:::i;:::-;26948:11;:37:::0;27021:14:::1;6238:1:::0;27021:2:::1;:14;:::i;:::-;27011:24;::::0;:7;:24:::1;:::i;:::-;26996:12;:39:::0;-1:-1:-1;;26860:183:0:o;26360:126::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26447:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;26447:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26360:126::o;9299:198::-;-1:-1:-1;;;;;9389:20:0;;9365:7;9389:20;;;:11;:20;;;;;;;;9385:49;;;-1:-1:-1;;;;;;9418:16:0;;;;;:7;:16;;;;;;;9299:198::o;9385:49::-;-1:-1:-1;;;;;9472:16:0;;;;;;:7;:16;;;;;;9452:37;;:19;:37::i;2358:94::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;2423:21:::1;2441:1;2423:9;:21::i;:::-;2358:94::o:0;25605:209::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;25701:9:::1;25697:110;25720:8;:15;25716:1;:19;25697:110;;;25790:5;25756:18;:31;25775:8;25784:1;25775:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25756:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25756:31:0;:39;;-1:-1:-1;;25756:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25737:3;::::1;::::0;::::1;:::i;:::-;;;;25697:110;;27416:196:::0;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;27516:9:::1;27491:21;:34;;27483:71;;;::::0;-1:-1:-1;;;27483:71:0;;13240:2:1;27483:71:0::1;::::0;::::1;13222:21:1::0;13279:2;13259:18;;;13252:30;13318:26;13298:18;;;13291:54;13362:18;;27483:71:0::1;13038:348:1::0;27483:71:0::1;27565:39;::::0;27573:10:::1;::::0;27565:39;::::1;;;::::0;27594:9;;27565:39:::1;::::0;;;27594:9;27573:10;27565:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;13438:336:::0;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;13601:4;13588:10;13568:17:::1;13575:10:::0;13568:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;13552:13;:53:::0;;;13642:2:::1;-1:-1:-1::0;13625:19:0::1;13617:62;;;::::0;-1:-1:-1;;;13617:62:0;;13593:2:1;13617:62:0::1;::::0;::::1;13575:21:1::0;13632:2;13612:18;;;13605:30;13671:32;13651:18;;;13644:60;13721:18;;13617:62:0::1;13391:354:1::0;13617:62:0::1;13699:38;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;13691:5:::1;:46:::0;;;;;;;;;;;;;;;13753:13;::::1;::::0;-1:-1:-1;;13753:13:0::1;13438:336:::0;;;;:::o;10523:390::-;6049:14;;10629:4;;10608:10;;6049:14;;;:42;;-1:-1:-1;;;;;;6067:24:0;;;;;;:15;:24;;;;;;;;6049:42;6041:78;;;;-1:-1:-1;;;6041:78:0;;;;;;;:::i;:::-;1754:10;10646:24:::1;10673:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10673:34:0;::::1;::::0;;;;;;;;10726:35;;::::1;;10718:85;;;::::0;-1:-1:-1;;;10718:85:0;;13952:2:1;10718:85:0::1;::::0;::::1;13934:21:1::0;13991:2;13971:18;;;13964:30;14030:34;14010:18;;;14003:62;-1:-1:-1;;;14081:18:1;;;14074:35;14126:19;;10718:85:0::1;13750:401:1::0;10718:85:0::1;10814:67;1754:10:::0;10837:7;10846:34:::1;10865:15:::0;10846:16;:34:::1;:::i;10814:67::-;-1:-1:-1::0;10901:4:0::1;::::0;10523:390;-1:-1:-1;;;;10523:390:0:o;10925:187::-;6049:14;;11023:4;;11002:10;;6049:14;;;:42;;-1:-1:-1;;;;;;6067:24:0;;;;;;:15;:24;;;;;;;;6049:42;6041:78;;;;-1:-1:-1;;;6041:78:0;;;;;;;:::i;:::-;11044:40:::1;11054:10;11066:9;11077:6;11044:9;:40::i;25822:114::-:0;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;25901:15:::1;:27:::0;;-1:-1:-1;;;;;;25901:27:0::1;-1:-1:-1::0;;;;;25901:27:0;;;::::1;::::0;;;::::1;::::0;;25822:114::o;26719:129::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26808:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;26808:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26719:129::o;26218:130::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;26327:13:::1;6238:1;26327:2;:13;:::i;:::-;26318:22;::::0;:6;:22:::1;:::i;:::-;26297:18;:43:::0;-1:-1:-1;26218:130:0:o;27055:123::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;27156:14:::1;6238:1:::0;27156:2:::1;:14;:::i;:::-;27147:23;::::0;:6;:23:::1;:::i;:::-;27130:14;:40:::0;-1:-1:-1;27055:123:0:o;26058:152::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;26152:16:::1;:4:::0;26159:9:::1;26152:16;:::i;:::-;26137:12;:31:::0;-1:-1:-1;26179:15:0::1;:23:::0;;-1:-1:-1;;26179:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26058:152::o;13189:110::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13256:27:0::1;13286:5;13256:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;13256:35:0::1;::::0;;13189:110::o;2460:192::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2549:22:0;::::1;2541:73;;;::::0;-1:-1:-1;;;2541:73:0;;14358:2:1;2541:73:0::1;::::0;::::1;14340:21:1::0;14397:2;14377:18;;;14370:30;14436:34;14416:18;;;14409:62;-1:-1:-1;;;14487:18:1;;;14480:36;14533:19;;2541:73:0::1;14156:402:1::0;2541:73:0::1;2625:19;2635:8;2625:9;:19::i;:::-;2460:192:::0;:::o;13786:346::-;2181:7;2208:6;-1:-1:-1;;;;;2208:6:0;1754:10;2270:23;2262:68;;;;-1:-1:-1;;;2262:68:0;;;;;;;:::i;:::-;13954:4;13941:10;13921:17:::1;13928:10:::0;13921:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;13904:14;:54:::0;;;13996:2:::1;-1:-1:-1::0;13978:20:0::1;13970:63;;;::::0;-1:-1:-1;;;13970:63:0;;13593:2:1;13970:63:0::1;::::0;::::1;13575:21:1::0;13632:2;13612:18;;;13605:30;13671:32;13651:18;;;13644:60;13721:18;;13970:63:0::1;13391:354:1::0;13970:63:0::1;14057:38;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;14045:9:::1;:50:::0;;;;;;;;;;;;;;14111:13;::::1;::::0;-1:-1:-1;;14111:13:0::1;13786:346:::0;;;;:::o;4168:246::-;4226:7;4250:1;4255;4250:6;4246:47;;-1:-1:-1;4280:1:0;4273:8;;4246:47;4303:9;4315:5;4319:1;4315;:5;:::i;:::-;4303:17;-1:-1:-1;4348:1:0;4339:5;4343:1;4303:17;4339:5;:::i;:::-;:10;4331:56;;;;-1:-1:-1;;;4331:56:0;;14765:2:1;4331:56:0;;;14747:21:1;14804:2;14784:18;;;14777:30;14843:34;14823:18;;;14816:62;-1:-1:-1;;;14894:18:1;;;14887:31;14935:19;;4331:56:0;14563:397:1;4422:132:0;4480:7;4507:39;4511:1;4514;4507:39;;;;;;;;;;;;;;;;;:3;:39::i;19566:335::-;-1:-1:-1;;;;;19659:19:0;;19651:68;;;;-1:-1:-1;;;19651:68:0;;15167:2:1;19651:68:0;;;15149:21:1;15206:2;15186:18;;;15179:30;15245:34;15225:18;;;15218:62;-1:-1:-1;;;15296:18:1;;;15289:34;15340:19;;19651:68:0;14965:400:1;19651:68:0;-1:-1:-1;;;;;19738:21:0;;19730:68;;;;-1:-1:-1;;;19730:68:0;;15572:2:1;19730:68:0;;;15554:21:1;15611:2;15591:18;;;15584:30;15650:34;15630:18;;;15623:62;-1:-1:-1;;;15701:18:1;;;15694:32;15743:19;;19730:68:0;15370:398:1;19730:68:0;-1:-1:-1;;;;;19809:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19861:32;;3545:25:1;;;19861:32:0;;3518:18:1;19861:32:0;;;;;;;19566:335;;;:::o;19909:2448::-;-1:-1:-1;;;;;19997:18:0;;19989:68;;;;-1:-1:-1;;;19989:68:0;;15975:2:1;19989:68:0;;;15957:21:1;16014:2;15994:18;;;15987:30;16053:34;16033:18;;;16026:62;-1:-1:-1;;;16104:18:1;;;16097:35;16149:19;;19989:68:0;15773:401:1;19989:68:0;-1:-1:-1;;;;;20076:16:0;;20068:64;;;;-1:-1:-1;;;20068:64:0;;16381:2:1;20068:64:0;;;16363:21:1;16420:2;16400:18;;;16393:30;16459:34;16439:18;;;16432:62;-1:-1:-1;;;16510:18:1;;;16503:33;16553:19;;20068:64:0;16179:399:1;20068:64:0;20160:1;20151:6;:10;20143:64;;;;-1:-1:-1;;;20143:64:0;;16785:2:1;20143:64:0;;;16767:21:1;16824:2;16804:18;;;16797:30;16863:34;16843:18;;;16836:62;-1:-1:-1;;;16914:18:1;;;16907:39;16963:19;;20143:64:0;16583:405:1;20143:64:0;20236:15;20246:4;20236:9;:15::i;:::-;20226:6;:25;;20218:86;;;;-1:-1:-1;;;20218:86:0;;17195:2:1;20218:86:0;;;17177:21:1;17234:2;17214:18;;;17207:30;17273:34;17253:18;;;17246:62;-1:-1:-1;;;17324:18:1;;;17317:47;17381:19;;20218:86:0;16993:413:1;20218:86:0;-1:-1:-1;;;;;20324:20:0;;;;;;:14;:20;;;;;;;;20323:21;:44;;;;-1:-1:-1;;;;;;20349:18:0;;;;;;:14;:18;;;;;;;;20348:19;20323:44;20315:86;;;;-1:-1:-1;;;20315:86:0;;17613:2:1;20315:86:0;;;17595:21:1;17652:2;17632:18;;;17625:30;17691:31;17671:18;;;17664:59;17740:18;;20315:86:0;17411:353:1;20315:86:0;-1:-1:-1;;;;;20426:24:0;;;;;;:18;:24;;;;;;;;20425:25;:52;;;;-1:-1:-1;;;;;;20455:22:0;;;;;;:18;:22;;;;;;;;20454:23;20425:52;20422:128;;;20501:14;;;;20493:45;;;;-1:-1:-1;;;20493:45:0;;17971:2:1;20493:45:0;;;17953:21:1;18010:2;17990:18;;;17983:30;-1:-1:-1;;;18029:18:1;;;18022:48;18087:18;;20493:45:0;17769:342:1;20493:45:0;-1:-1:-1;;;;;20574:24:0;;;;;;:18;:24;;;;;;;;20573:25;:52;;;;-1:-1:-1;;;;;;20603:22:0;;;;;;:18;:22;;;;;;;;20602:23;20573:52;:89;;;;-1:-1:-1;20645:13:0;;:17;;20661:1;20645:17;:::i;:::-;20629:12;:33;;20573:89;20570:180;;;20693:4;;-1:-1:-1;;;;;20693:4:0;;;20687:10;;;;20679:59;;;;-1:-1:-1;;;20679:59:0;;18318:2:1;20679:59:0;;;18300:21:1;18357:2;18337:18;;;18330:30;18396:34;18376:18;;;18369:62;-1:-1:-1;;;18447:18:1;;;18440:34;18491:19;;20679:59:0;18116:400:1;20679:59:0;20781:4;;-1:-1:-1;;;;;20773:12:0;;;20781:4;;20773:12;:39;;;;-1:-1:-1;;;;;;20790:22:0;;;;;;:18;:22;;;;;;;;20789:23;20773:39;:52;;;;-1:-1:-1;20817:8:0;;;;;;;20816:9;20773:52;20770:246;;;20859:11;;20849:6;:21;;20841:63;;;;-1:-1:-1;;;20841:63:0;;18723:2:1;20841:63:0;;;18705:21:1;18762:2;18742:18;;;18735:30;18801:31;18781:18;;;18774:59;18850:18;;20841:63:0;18521:353:1;20841:63:0;20953:14;;20943:6;20927:13;20937:2;20927:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20919:85;;;;-1:-1:-1;;;20919:85:0;;19081:2:1;20919:85:0;;;19063:21:1;;;19100:18;;;19093:30;19159:34;19139:18;;;19132:62;19211:18;;20919:85:0;18879:356:1;20919:85:0;21047:4;;-1:-1:-1;;;;;21039:12:0;;;21047:4;;21039:12;;;;:39;;-1:-1:-1;;;;;;21056:22:0;;;;;;:18;:22;;;;;;;;21055:23;21039:39;:68;;;;-1:-1:-1;;;;;;21083:24:0;;;;;;:18;:24;;;;;;;;21082:25;21039:68;:81;;;;-1:-1:-1;21112:8:0;;;;;;;21111:9;21039:81;21036:573;;;21154:12;;21144:6;:22;;21136:65;;;;-1:-1:-1;;;21136:65:0;;19442:2:1;21136:65:0;;;19424:21:1;19481:2;19461:18;;;19454:30;19520:32;19500:18;;;19493:60;19570:18;;21136:65:0;19240:354:1;21136:65:0;21225:4;;-1:-1:-1;;;;;21219:10:0;;;21225:4;;21219:10;21216:134;;21283:14;;21273:6;21257:13;21267:2;21257:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21249:85;;;;-1:-1:-1;;;21249:85:0;;19081:2:1;21249:85:0;;;19063:21:1;;;19100:18;;;19093:30;19159:34;19139:18;;;19132:62;19211:18;;21249:85:0;18879:356:1;21249:85:0;21367:15;;;;21364:234;;;-1:-1:-1;;;;;21441:15:0;;21402:18;21441:15;;;:9;:15;;;;;;21423:33;;:15;:33;:::i;:::-;21402:54;;21497:12;;21483:10;:26;;21475:55;;;;-1:-1:-1;;;21475:55:0;;19801:2:1;21475:55:0;;;19783:21:1;19840:2;19820:18;;;19813:30;-1:-1:-1;;;19859:18:1;;;19852:46;19915:18;;21475:55:0;19599:340:1;21475:55:0;-1:-1:-1;;;;;;21549:15:0;;;;;;:9;:15;;;;;21567;21549:33;;21364:234;21666:14;6238:1;21666:2;:14;:::i;:::-;21660:20;;:2;:20;:::i;:::-;21650:6;21632:15;21642:4;21632:9;:15::i;:::-;:24;;;;:::i;:::-;:48;21629:111;;21724:15;21734:4;21724:9;:15::i;:::-;21715:6;21698:14;6238:1;21698:2;:14;:::i;:::-;21693:19;;:2;:19;:::i;:::-;:28;;;;:::i;:::-;:46;;;;:::i;:::-;21682:58;;;;:::i;:::-;;;21629:111;21770:12;21813:18;;21785:24;21803:4;21785:9;:24::i;:::-;21854:8;;-1:-1:-1;;21785:46:0;;-1:-1:-1;21854:8:0;;;;;21853:9;:20;;;;;21866:7;21853:20;:36;;;;-1:-1:-1;21885:4:0;;-1:-1:-1;;;;;21877:12:0;;;21885:4;;21877:12;;21853:36;:65;;;;-1:-1:-1;;;;;;21894:24:0;;;;;;:18;:24;;;;;;;;21893:25;21853:65;:92;;;;-1:-1:-1;;;;;;21923:22:0;;;;;;:18;:22;;;;;;;;21922:23;21853:92;21850:246;;;21970:4;;-1:-1:-1;;;;;21970:4:0;;;21964:10;;;;21961:123;;21992:18;;21977:45;;;;;;;;22012:9;21977:45;;;;;;;;;;;;;;;;;;;;;;;;;;;21992:18;21977:14;:45::i;:::-;21961:123;;;22058:18;;22043:41;;;;;;;;22078:5;22043:41;;;;;;;;;;;;;;;;;;;;;;;;;;22058:18;22043:14;:41::i;:::-;22169:8;;22121:4;;22106:12;;22169:8;;;;;;:36;;-1:-1:-1;;;;;;22181:24:0;;;;;;:18;:24;;;;;;;;22169:36;:62;;;-1:-1:-1;;;;;;22209:22:0;;;;;;:18;:22;;;;;;;;22169:62;22166:82;;;22243:5;22233:15;;22166:82;22268:4;;-1:-1:-1;;;;;22268:4:0;;;22262:10;;;;22259:28;;-1:-1:-1;22283:4:0;22259:28;22300:49;22315:4;22321:2;22325:6;22333:7;22342:6;22300:14;:49::i;:::-;19978:2379;;;19909:2448;;;:::o;18852:158::-;18893:7;18914:15;18931;18950:19;:17;:19::i;:::-;18913:56;;-1:-1:-1;18913:56:0;-1:-1:-1;18987:15:0;18913:56;;18987:15;:::i;:::-;18980:22;;;;18852:158;:::o;15113:466::-;15199:36;;:::i;:::-;15260:37;15272:7;15281;15290:6;15260:11;:37::i;:::-;15248:49;;15417:53;15430:9;15441:7;15450;15459:10;:8;:10::i;:::-;15417:12;:53::i;:::-;15393:20;;;15308:162;15371:20;;;15308:162;15355:14;;;15308:162;15328:25;;;15308:162;;;15500:44;15309:9;15524:7;15533:10;:8;:10::i;:::-;15500:12;:44::i;:::-;15482:14;;;15481:63;15113:466;;;;;:::o;2660:173::-;2716:16;2735:6;;-1:-1:-1;;;;;2752:17:0;;;-1:-1:-1;;;;;;2752:17:0;;;;;;2785:40;;2735:6;;;;;;;2785:40;;2716:16;2785:40;2705:128;2660:173;:::o;4562:223::-;4682:7;4717:12;4710:5;4702:28;;;;-1:-1:-1;;;4702:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4741:9:0;4753:5;4757:1;4753;:5;:::i;:::-;4741:17;4562:223;-1:-1:-1;;;;;4562:223:0:o;23518:1099::-;8000:8;:15;;-1:-1:-1;;8000:15:0;;;;;23673:8:::1;::::0;::::1;::::0;23656:14:::1;::::0;::::1;::::0;23639::::1;::::0;::::1;::::0;8000:15;;23673:8;23639:31:::1;::::0;::::1;:::i;:::-;:42;;;;:::i;:::-;23638:48;::::0;23685:1:::1;23638:48;:::i;:::-;23616:70;;23697:32;23767:11;23750:4;:14;;;23732:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;23697:81:::0;-1:-1:-1;23789:14:0::1;23806:42;23697:81:::0;23806:15;:42:::1;:::i;:::-;23789:59:::0;-1:-1:-1;23886:21:0::1;23920:24;23789:59:::0;23920:16:::1;:24::i;:::-;23957:20;23980:38;24004:14:::0;23980:21:::1;:38;:::i;:::-;23957:61;;24029:19;24080:4;:14;;;24066:11;:28;;;;:::i;:::-;24050:45;::::0;:12;:45:::1;:::i;:::-;24029:66;;24106:29;24152:4;:14;;;24138:11;:28;;;;:::i;:::-;24106:60:::0;-1:-1:-1;24182:25:0;;24179:117:::1;;24223:61;24236:24;24262:21;24223:12;:61::i;:::-;24349:14;::::0;::::1;::::0;24308:20:::1;::::0;24331:15:::1;:11:::0;24345:1:::1;24331:15;:::i;:::-;:32;;;;:::i;:::-;24308:55:::0;-1:-1:-1;24377:16:0;;24374:95:::1;;24417:15;::::0;24409:48:::1;::::0;-1:-1:-1;;;;;24417:15:0::1;24444:12:::0;24409:34:::1;:48::i;:::-;24514:8;::::0;::::1;::::0;24479:14:::1;::::0;24496:15:::1;:11:::0;24510:1:::1;24496:15;:::i;:::-;:26;;;;:::i;:::-;24479:43:::0;-1:-1:-1;24536:10:0;;24533:77:::1;;24570:9;::::0;24562:36:::1;::::0;-1:-1:-1;;;;;24570:9:0::1;24591:6:::0;24562:28:::1;:36::i;:::-;-1:-1:-1::0;;8038:8:0;:16;;-1:-1:-1;;8038:16:0;;;-1:-1:-1;;;;;;;;;23518:1099:0:o;22405:1105::-;22529:28;22560:36;22571:7;22580;22589:6;22560:10;:36::i;:::-;-1:-1:-1;;;;;22613:19:0;;;;;;:11;:19;;;;;;22529:67;;-1:-1:-1;22613:19:0;;22609:115;;;-1:-1:-1;;;;;22689:15:0;;;;;;:7;:15;;;;;;:23;;22705:7;;22689:23;:::i;:::-;-1:-1:-1;;;;;22671:15:0;;;;;;:7;:15;;;;;:41;22609:115;-1:-1:-1;;;;;22738:22:0;;;;;;:11;:22;;;;;;;;22734:130;;;22835:17;;;;-1:-1:-1;;;;;22816:18:0;;;;;;:7;:18;;;;;;:36;;22835:17;22816:36;:::i;:::-;-1:-1:-1;;;;;22795:18:0;;;;;;:7;:18;;;;;:57;22734:130;22910:9;;-1:-1:-1;;;;;22894:15:0;;22910:9;22894:15;;;:7;:15;;;;;;:25;;22910:9;22894:25;:::i;:::-;-1:-1:-1;;;;;22876:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;22970:17;;;22951:18;;;;;;;;;;:36;;22970:17;22951:36;:::i;:::-;-1:-1:-1;;;;;22930:18:0;;;;;;:7;:18;;;;;;;:57;;;;23011:6;;;:10;;;:24;;;23034:1;23025;:6;;;:10;23011:24;23008:56;;;23037:27;23049:1;:6;;;23057:1;:6;;;23037:11;:27::i;:::-;23093:1;23078;:12;;;:16;:36;;;;23113:1;23098;:12;;;:16;23078:36;23075:198;;;23131:41;23146:1;:12;;;23159:1;:12;;;23131:14;:41::i;:::-;23217:4;-1:-1:-1;;;;;23192:69:0;23201:6;-1:-1:-1;;;;;23192:69:0;;23254:1;:6;;;23239:1;:12;;;23224:1;:12;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;23192:69;;3545:25:1;;;3533:2;3518:18;23192:69:0;;;;;;;23075:198;23301:1;23286;:12;;;:16;:36;;;;23321:1;23306;:12;;;:16;23286:36;23283:83;;;23324:42;23339:1;:12;;;23353:1;:12;;;23324:14;:42::i;:::-;23389:1;23380;:6;;;:10;:24;;;;23403:1;23394;:6;;;:10;23380:24;23377:53;;;23406:24;23415:1;:6;;;23423:1;:6;;;23406:8;:24::i;:::-;23463:9;-1:-1:-1;;;;;23446:46:0;23455:6;-1:-1:-1;;;;;23446:46:0;;23474:1;:17;;;23446:46;;;;3545:25:1;;3533:2;3518:18;;3399:177;23446:46:0;;;;;;;;22516:994;22405:1105;;;;;:::o;19018:540::-;19115:7;;19151;;19068;;;;;19169:279;19193:9;:16;19189:20;;19169:279;;;19259:7;19235;:21;19243:9;19253:1;19243:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19243:12:0;19235:21;;;;;;;;;;;;;:31;;:66;;;19294:7;19270;:21;19278:9;19288:1;19278:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19278:12:0;19270:21;;;;;;;;;;;;;:31;19235:66;19231:97;;;19311:7;;19320;;19303:25;;;;;;;19018:540;;:::o;19231:97::-;19361:7;:21;19369:9;19379:1;19369:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19369:12:0;19361:21;;;;;;;;;;;;;19353:29;;:7;:29;:::i;:::-;19343:39;;19415:7;:21;19423:9;19433:1;19423:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19423:12:0;19415:21;;;;;;;;;;;;;19407:29;;:7;:29;:::i;:::-;19397:39;-1:-1:-1;19211:3:0;;;;:::i;:::-;;;;19169:279;;;;19480:7;;19472;;:15;;;;:::i;:::-;19462:7;:25;19458:56;;;19497:7;;19506;;19489:25;;;;;;19018:540;;:::o;19458:56::-;19533:7;;19542;;-1:-1:-1;19018:540:0;-1:-1:-1;19018:540:0:o;17184:720::-;17271:28;;:::i;:::-;17318:7;17314:86;;17340:17;;;:27;;;17380:8;;17314:86;17410:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17410:17:0;17441:6;17438:55;;;-1:-1:-1;17449:16:0;;;;;;;;17456:9;17449:16;;;;;;;;;;;;;;;;;;;;;;;;;17438:55;;;-1:-1:-1;17481:12:0;;;;;;;;17488:5;17481:12;;;;;;;;;;;;;;;;;;;;;;;;17438:55;17514:18;17535:24;:22;:24::i;:::-;17514:45;;17602:10;17596:4;17587;:8;;;17579:7;:16;;;;:::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;:::-;17570:6;;;:43;17647:14;;;;17668:10;;17662:4;;17639:22;;:7;:22;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;17624:12;;;:55;17713:14;;;;17734:10;;17728:4;;17705:22;;:7;:22;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;17690:12;;;:55;17773:8;;;;17788:10;;17782:4;;17765:16;;:7;:16;:::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;:::-;17756:6;;;:43;;;17858:12;;;;17845;;;;17838:6;;;;17830:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:47;;;;:::i;:::-;17810:17;;;:67;-1:-1:-1;;17184:720:0;;;;;:::o;17912:668::-;18038:15;;;;;18153:19;18161:11;18153:7;:19;:::i;:::-;18143:29;;18189:7;18185:69;;-1:-1:-1;18218:7:0;;-1:-1:-1;18236:1:0;;-1:-1:-1;18236:1:0;;-1:-1:-1;18236:1:0;18211:31;;18185:69;18280:11;18273:1;:6;;;:18;;;;:::i;:::-;18266:25;;18328:11;18315:1;:12;;;:24;;;;:::i;:::-;18302:37;;18376:11;18363:1;:12;;;:24;;;;:::i;:::-;18350:37;;18398:12;18420:11;18413:1;:6;;;:18;;;;:::i;:::-;18398:33;-1:-1:-1;18398:33:0;18485:10;18474;18461:12;18469:4;18461:7;:12;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:39;;;;:::i;:::-;18442:58;;18511:61;17912:668;;;;;;;;;;:::o;18592:252::-;18701:12;18732:7;18728:47;;-1:-1:-1;18761:1:0;18754:9;;18728:47;18801:11;18794:1;:6;;;:18;;;;:::i;:::-;18787:25;18592:252;-1:-1:-1;;;;18592:252:0:o;25031:562::-;25181:16;;;25195:1;25181:16;;;;;;;;25157:21;;25181:16;;;;;;;;;;-1:-1:-1;25181:16:0;25157:40;;25226:4;25208;25213:1;25208:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25208:23:0;;;:7;;;;;;;;;;:23;;;;25252:6;;:13;;;-1:-1:-1;;;25252:13:0;;;;:6;;;;;:11;;:13;;;;;25208:7;;25252:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25242:4;25247:1;25242:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25242:23:0;;;:7;;;;;;;;;:23;25310:6;;25278:53;;25295:4;;25310:6;25319:11;25278:8;:53::i;:::-;25370:6;;:215;;-1:-1:-1;;;25370:215:0;;-1:-1:-1;;;;;25370:6:0;;;;:57;;:215;;25442:11;;25370:6;;25512:4;;25539;;25559:15;;25370:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24625:398;24738:6;;24706:53;;24723:4;;-1:-1:-1;;;;;24738:6:0;24747:11;24706:8;:53::i;:::-;24772:6;;-1:-1:-1;;;;;24772:6:0;:22;24802:9;24835:4;24855:11;24772:6;;24967:7;2181;2208:6;-1:-1:-1;;;;;2208:6:0;;2135:87;24967:7;24772:243;;;;;;-1:-1:-1;;;;;;24772:243:0;;;-1:-1:-1;;;;;21544:15:1;;;24772:243:0;;;21526:34:1;21576:18;;;21569:34;;;;21619:18;;;21612:34;;;;21662:18;;;21655:34;21726:15;;;21705:19;;;21698:44;24989:15:0;21758:19:1;;;21751:35;21460:19;;24772:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24625:398;;:::o;4814:317::-;4929:6;4904:21;:31;;4896:73;;;;-1:-1:-1;;;4896:73:0;;22310:2:1;4896:73:0;;;22292:21:1;22349:2;22329:18;;;22322:30;22388:31;22368:18;;;22361:59;22437:18;;4896:73:0;22108:353:1;4896:73:0;4983:12;5001:9;-1:-1:-1;;;;;5001:14:0;5023:6;5001:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4982:52;;;5053:7;5045:78;;;;-1:-1:-1;;;5045:78:0;;22878:2:1;5045:78:0;;;22860:21:1;22917:2;22897:18;;;22890:30;22956:34;22936:18;;;22929:62;23027:28;23007:18;;;23000:56;23073:19;;5045:78:0;22676:422:1;14140:123:0;14218:4;14208:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;14233:11:0;:22;;14251:4;;14233:11;:15;;:22;;14251:4;;14233:22;:::i;:::-;;;;-1:-1:-1;;;;14140:123:0:o;14271:284::-;14378:10;14354:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;14424:4:0;14404:26;;;;:11;:26;;;;;;;;14401:101;;;14472:4;14456:22;;;;:7;:22;;;;;:34;;14480:10;;14456:22;:34;;14480:10;;14456:34;:::i;:::-;;;;-1:-1:-1;;14401:101:0;14528:4;14512:22;;;;:7;:22;;;;;:35;;14537:10;;14512:22;:35;;14537:10;;14512:35;:::i;14563:284::-;14670:10;14646:11;:21;;;:34;;;;;;;:::i;14859:242::-;14942:4;14924:11;:15;;;:22;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1354:456::-;1431:6;1439;1447;1500:2;1488:9;1479:7;1475:23;1471:32;1468:52;;;1516:1;1513;1506:12;1468:52;1555:9;1542:23;1574:31;1599:5;1574:31;:::i;:::-;1624:5;-1:-1:-1;1681:2:1;1666:18;;1653:32;1694:33;1653:32;1694:33;:::i;:::-;1354:456;;1746:7;;-1:-1:-1;;;1800:2:1;1785:18;;;;1772:32;;1354:456::o;1815:127::-;1876:10;1871:3;1867:20;1864:1;1857:31;1907:4;1904:1;1897:15;1931:4;1928:1;1921:15;1947:118;2033:5;2026:13;2019:21;2012:5;2009:32;1999:60;;2055:1;2052;2045:12;2070:128;2135:20;;2164:28;2135:20;2164:28;:::i;2203:1191::-;2293:6;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2410:9;2397:23;2439:18;2480:2;2472:6;2469:14;2466:34;;;2496:1;2493;2486:12;2466:34;2534:6;2523:9;2519:22;2509:32;;2579:7;2572:4;2568:2;2564:13;2560:27;2550:55;;2601:1;2598;2591:12;2550:55;2637:2;2624:16;2659:4;2682:2;2678;2675:10;2672:36;;;2688:18;;:::i;:::-;2734:2;2731:1;2727:10;2766:2;2760:9;2829:2;2825:7;2820:2;2816;2812:11;2808:25;2800:6;2796:38;2884:6;2872:10;2869:22;2864:2;2852:10;2849:18;2846:46;2843:72;;;2895:18;;:::i;:::-;2931:2;2924:22;2981:18;;;3015:15;;;;-1:-1:-1;3057:11:1;;;3053:20;;;3085:19;;;3082:39;;;3117:1;3114;3107:12;3082:39;3141:11;;;;3161:148;3177:6;3172:3;3169:15;3161:148;;;3243:23;3262:3;3243:23;:::i;:::-;3231:36;;3194:12;;;;3287;;;;3161:148;;;3328:6;-1:-1:-1;3353:35:1;;-1:-1:-1;3369:18:1;;;3353:35;:::i;:::-;3343:45;;;;;;2203:1191;;;;;:::o;3581:247::-;3640:6;3693:2;3681:9;3672:7;3668:23;3664:32;3661:52;;;3709:1;3706;3699:12;3661:52;3748:9;3735:23;3767:31;3792:5;3767:31;:::i;3833:180::-;3892:6;3945:2;3933:9;3924:7;3920:23;3916:32;3913:52;;;3961:1;3958;3951:12;3913:52;-1:-1:-1;3984:23:1;;3833:180;-1:-1:-1;3833:180:1:o;4207:241::-;4263:6;4316:2;4304:9;4295:7;4291:23;4287:32;4284:52;;;4332:1;4329;4322:12;4284:52;4371:9;4358:23;4390:28;4412:5;4390:28;:::i;4453:388::-;4521:6;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4637:9;4624:23;4656:31;4681:5;4656:31;:::i;:::-;4706:5;-1:-1:-1;4763:2:1;4748:18;;4735:32;4776:33;4735:32;4776:33;:::i;:::-;4828:7;4818:17;;;4453:388;;;;;:::o;4846:309::-;4911:6;4919;4972:2;4960:9;4951:7;4947:23;4943:32;4940:52;;;4988:1;4985;4978:12;4940:52;5024:9;5011:23;5001:33;;5084:2;5073:9;5069:18;5056:32;5097:28;5119:5;5097:28;:::i;5160:248::-;5228:6;5236;5289:2;5277:9;5268:7;5264:23;5260:32;5257:52;;;5305:1;5302;5295:12;5257:52;-1:-1:-1;;5328:23:1;;;5398:2;5383:18;;;5370:32;;-1:-1:-1;5160:248:1:o;5413:382::-;5478:6;5486;5539:2;5527:9;5518:7;5514:23;5510:32;5507:52;;;5555:1;5552;5545:12;5507:52;5594:9;5581:23;5613:31;5638:5;5613:31;:::i;:::-;5663:5;-1:-1:-1;5720:2:1;5705:18;;5692:32;5733:30;5692:32;5733:30;:::i;6404:385::-;6490:6;6498;6506;6514;6567:3;6555:9;6546:7;6542:23;6538:33;6535:53;;;6584:1;6581;6574:12;6535:53;-1:-1:-1;;6607:23:1;;;6677:2;6662:18;;6649:32;;-1:-1:-1;6728:2:1;6713:18;;6700:32;;6779:2;6764:18;6751:32;;-1:-1:-1;6404:385:1;-1:-1:-1;6404:385:1:o;6794:309::-;6859:6;6867;6920:2;6908:9;6899:7;6895:23;6891:32;6888:52;;;6936:1;6933;6926:12;6888:52;6975:9;6962:23;6994:28;7016:5;6994:28;:::i;7331:347::-;7533:2;7515:21;;;7572:2;7552:18;;;7545:30;7611:25;7606:2;7591:18;;7584:53;7669:2;7654:18;;7331:347::o;7683:356::-;7885:2;7867:21;;;7904:18;;;7897:30;7963:34;7958:2;7943:18;;7936:62;8030:2;8015:18;;7683:356::o;8323:245::-;8390:6;8443:2;8431:9;8422:7;8418:23;8414:32;8411:52;;;8459:1;8456;8449:12;8411:52;8491:9;8485:16;8510:28;8532:5;8510:28;:::i;8573:127::-;8634:10;8629:3;8625:20;8622:1;8615:31;8665:4;8662:1;8655:15;8689:4;8686:1;8679:15;8705:127;8766:10;8761:3;8757:20;8754:1;8747:31;8797:4;8794:1;8787:15;8821:4;8818:1;8811:15;8837:135;8876:3;8897:17;;;8894:43;;8917:18;;:::i;:::-;-1:-1:-1;8964:1:1;8953:13;;8837:135::o;9386:128::-;9453:9;;;9474:11;;;9471:37;;;9488:18;;:::i;9519:168::-;9592:9;;;9623;;9640:15;;;9634:22;;9620:37;9610:71;;9661:18;;:::i;10103:217::-;10143:1;10169;10159:132;;10213:10;10208:3;10204:20;10201:1;10194:31;10248:4;10245:1;10238:15;10276:4;10273:1;10266:15;10159:132;-1:-1:-1;10305:9:1;;10103:217::o;10677:127::-;10738:10;10733:3;10729:20;10726:1;10719:31;10769:4;10766:1;10759:15;10793:4;10790:1;10783:15;10809:125;10874:9;;;10895:10;;;10892:36;;;10908:18;;:::i;11655:422::-;11744:1;11787:5;11744:1;11801:270;11822:7;11812:8;11809:21;11801:270;;;11881:4;11877:1;11873:6;11869:17;11863:4;11860:27;11857:53;;;11890:18;;:::i;:::-;11940:7;11930:8;11926:22;11923:55;;;11960:16;;;;11923:55;12039:22;;;;11999:15;;;;11801:270;;;11805:3;11655:422;;;;;:::o;12082:806::-;12131:5;12161:8;12151:80;;-1:-1:-1;12202:1:1;12216:5;;12151:80;12250:4;12240:76;;-1:-1:-1;12287:1:1;12301:5;;12240:76;12332:4;12350:1;12345:59;;;;12418:1;12413:130;;;;12325:218;;12345:59;12375:1;12366:10;;12389:5;;;12413:130;12450:3;12440:8;12437:17;12434:43;;;12457:18;;:::i;:::-;-1:-1:-1;;12513:1:1;12499:16;;12528:5;;12325:218;;12627:2;12617:8;12614:16;12608:3;12602:4;12599:13;12595:36;12589:2;12579:8;12576:16;12571:2;12565:4;12562:12;12558:35;12555:77;12552:159;;;-1:-1:-1;12664:19:1;;;12696:5;;12552:159;12743:34;12768:8;12762:4;12743:34;:::i;:::-;12813:6;12809:1;12805:6;12801:19;12792:7;12789:32;12786:58;;;12824:18;;:::i;:::-;12862:20;;12082:806;-1:-1:-1;;;12082:806:1:o;12893:140::-;12951:5;12980:47;13021:4;13011:8;13007:19;13001:4;12980:47;:::i;19944:251::-;20014:6;20067:2;20055:9;20046:7;20042:23;20038:32;20035:52;;;20083:1;20080;20073:12;20035:52;20115:9;20109:16;20134:31;20159:5;20134:31;:::i;20200:980::-;20462:4;20510:3;20499:9;20495:19;20541:6;20530:9;20523:25;20567:2;20605:6;20600:2;20589:9;20585:18;20578:34;20648:3;20643:2;20632:9;20628:18;20621:31;20672:6;20707;20701:13;20738:6;20730;20723:22;20776:3;20765:9;20761:19;20754:26;;20815:2;20807:6;20803:15;20789:29;;20836:1;20846:195;20860:6;20857:1;20854:13;20846:195;;;20925:13;;-1:-1:-1;;;;;20921:39:1;20909:52;;21016:15;;;;20981:12;;;;20957:1;20875:9;20846:195;;;-1:-1:-1;;;;;;;21097:32:1;;;;21092:2;21077:18;;21070:60;-1:-1:-1;;;21161:3:1;21146:19;21139:35;21058:3;20200:980;-1:-1:-1;;;20200:980:1:o;21797:306::-;21885:6;21893;21901;21954:2;21942:9;21933:7;21929:23;21925:32;21922:52;;;21970:1;21967;21960:12;21922:52;21999:9;21993:16;21983:26;;22049:2;22038:9;22034:18;22028:25;22018:35;;22093:2;22082:9;22078:18;22072:25;22062:35;;21797:306;;;;;:::o

Swarm Source

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