ETH Price: $3,995.21 (+2.74%)

Token

ERC-20: Alpha Chad Protocol (ACP)
 

Overview

Max Total Supply

21,000,000 ACP

Holders

532

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: ACP
Balance
209,691.575018158 ACP

Value
$0.00
0x320aae7acc5ec8ab3462b7b20d9f737e3086de2f
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:
AlphaChadProtocol

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 69 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-22
*/

/**
* Alpha Chad Protocol - $ACP
* LOCKED & RENOUNCED
* 0% BUY TAX
* THE TIMER STARTS AFTER THE LAUNCH
* 24 HOURS AFTER, THE SELL TAX GOES TO 0%
* USE OF TAXES - BUYBACKS

* Alpha Chad Protocol - $ACP
* $ACP TAXES EXPLAINED (READ THIS CAREFULLY):

There is a 0% buy tax. Therefore, you only pay taxes when you sell. 
An alpha chad doesn’t care to bother to sell fast anyway. 
⬇️ 
* Sell within   1 hour  : 12% Sell Tax 
* 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 tax after 24 hours :  0% Sell Tax

* Totalsupply     (100%):   21.000.000
* Max wallet        (2%):      420.000
* Max transaction   (2%):      420.000
Socials:
Website: https://alphachadprotocol.xyz/
Twitter: https://twitter.com/alphachadpro
TG: https://t.me/AlphaChadProtocol
Medium: https://alphachadpro.medium.com/bridge-swap-defi-yield-aggregator-41af3339190c
*/
// 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 AlphaChadProtocol 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 = 21_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

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

    uint256 public buytotaltaxes;
    uint256 public selltotaltaxes;

    //nais!
    address public marketingWallet = 0x3318396E653a5849d514aC6247F398c3F279d841;
    address public devWallet = 0x4d58B9708111c3D2029755f48FA326619EdeeB98;

    string private constant _name = unicode"Alpha Chad Protocol";
    string private constant _symbol = unicode"ACP";

    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, 1);

    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 minute = 1 * 60;
        if (time_since_start < 60 * minute) {
            return (60);
        } else if (time_since_start < 120 * minute) {
            return (30);
        } else if (time_since_start < 180 * minute) {
            return (25);
        } else if (time_since_start < 240 * minute) {
            return (20);
        } else if (time_since_start < 480 * minute) {
            return (15);
         } else if (time_since_start < 960 * minute) {
            return (10);   
         } else if (time_since_start < 1440 * minute) {
            return (5);   
        } else {
            return (2);
        }
    }

    function _getAntiDumpMultiplier() private view returns (uint256) {
        uint256 time_since_start = block.timestamp - genesis_block_timestamp;
               uint256 minute = 1 * 60;
         if (time_since_start < 60 * minute) {
            return (60);
        } else if (time_since_start < 120 * minute) {
            return (30);
        } else if (time_since_start < 180 * minute) {
            return (25);
        } else if (time_since_start < 240 * minute) {
            return (20);
        } else if (time_since_start < 480 * minute) {
            return (15);
         } else if (time_since_start < 960 * minute) {
            return (10);   
         } else if (time_since_start < 1440 * minute) {
            return (5);   
        } else {
            return (2);
        }
    }

    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;
        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"}]

60806040526009805461ffff1916610100178155600b805460ff191690556000600c556200002f90600a62000bc4565b6200003f906301406f4062000bd5565b600f819055620000529060001962000c0d565b620000609060001962000c24565b6010556200009b612710620000876005600f546200056e60201b62001c881790919060201c565b6200060560201b62001d0a1790919060201c565b601155620000ac6009600a62000bc4565b620000bb90620668a162000bd5565b601255620000cc6009600a62000bc4565b620000db90620668a162000bd5565b601355620000ec6009600a62000bc4565b620000fb90620668a162000bd5565b601455601980546001600160a01b0319908116733318396e653a5849d514ac6247f398c3f279d84117909155601a8054909116734d58b9708111c3d2029755f48fa326619edeeb981790556040805160808082018352600080835260208084018290528385018290526060938401829052601b829055601c829055601d829055601e82905584519283018552818352600183820181905294830182905291909201839052601f829055829055602155602255348015620001ba57600080fd5b50604051620047ef380380620047ef833981016040819052620001dd9162000c3a565b620001e8336200064f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000254919062000c3a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c8919062000c3a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000c3a565b600d80546001600160a01b038086166001600160a01b031992831617909255600e8054928416929091168217905590915062000378906200069f565b606460105462000389919062000c65565b6200039690606462000bd5565b60016000620003ad6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003fc6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019548216815260048452828120805486166001908117909155601a549092168152828120805486168317905530815260069384905291822080549094168117909355620004806000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526006909352818320805485166001908117909155601954821684528284208054861682179055601a54909116835291208054909216179055620005006000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064600f54606462000548919062000bd5565b62000554919062000c65565b60405190815260200160405180910390a350505062000cfe565b6000826000036200058257506000620005ff565b600062000590838562000bd5565b9050826200059f858362000c65565b14620005fc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620005fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200082960201b60201c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620006fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005f3565b6001600160a01b03811660009081526005602052604090205460ff1615620007665760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005f3565b6001600160a01b03811660009081526001602052604090205415620007c3576001600160a01b038116600090815260016020526040902054620007a99062000865565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b600081836200084d5760405162461bcd60e51b8152600401620005f3919062000c7c565b5060006200085c848662000c65565b95945050505050565b6000601054821115620008ce5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005f3565b6000620008da620008ef565b9050620008e8818462000c65565b9392505050565b60008080620008fd62000915565b90925090506200090e818362000c65565b9250505090565b601054600f546000918291825b60085481101562000a7d5782600160006008848154811062000948576200094862000ccc565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009b7575081600260006008848154811062000990576200099062000ccc565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620009ce57601054600f54945094505050509091565b6001600060088381548110620009e857620009e862000ccc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a19908462000c24565b9250600260006008838154811062000a355762000a3562000ccc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a66908362000c24565b91508062000a748162000ce2565b91505062000922565b50600f5460105462000a90919062000c65565b82101562000aa857601054600f549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b0857816000190482111562000aec5762000aec62000ab1565b8085161562000afa57918102915b93841c939080029062000acc565b509250929050565b60008262000b2157506001620005ff565b8162000b3057506000620005ff565b816001811462000b49576002811462000b545762000b74565b6001915050620005ff565b60ff84111562000b685762000b6862000ab1565b50506001821b620005ff565b5060208310610133831016604e8410600b841016171562000b99575081810a620005ff565b62000ba5838362000ac7565b806000190482111562000bbc5762000bbc62000ab1565b029392505050565b6000620005fc60ff84168362000b10565b600081600019048311821515161562000bf25762000bf262000ab1565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000c1f5762000c1f62000bf7565b500690565b81810381811115620005ff57620005ff62000ab1565b60006020828403121562000c4d57600080fd5b81516001600160a01b0381168114620005fc57600080fd5b60008262000c775762000c7762000bf7565b500490565b600060208083528351808285015260005b8181101562000cab5785810183015185820160400152820162000c8d565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000cf75762000cf762000ab1565b5060010190565b613ae18062000d0e6000396000f3fe6080604052600436106103105760003560e01c8063715018a61161019c578063b5c57145116100e2578063ea2f0b3711610090578063ea2f0b37146109fb578063ee36e35914610a1b578063ef27902114610a35578063f2fde38b14610a4b578063f480fec214610a6b578063f66895a314610a8b578063f887ea4014610aae578063ff950c6514610ace57600080fd5b8063b5c5714514610909578063d257b34f14610929578063d2ce0db214610949578063d8672e511461095f578063dd62ed3e1461097f578063e2f45605146109c5578063e517f2b9146109db57600080fd5b806395d89b411161014a57806395d89b41146107fa5780639ba5e4d5146108265780639e252f0014610849578063a12a7d6114610869578063a457c2d714610889578063a8aa1b31146108a9578063a9059cbb146108c9578063aacebbe3146108e957600080fd5b8063715018a6146106dc578063728f8eea146106f157806375f0a8741461073457806388f820201461076c5780638da5cb5b146107a55780638e2839ff146107ba5780638ea5220f146107da57600080fd5b8063395093511161026157806359759f611161020f57806359759f61146105eb5780635b24ea5e1461060b57806362695eae1461062b578063652e2f041461065b57806366a88d96146106715780636aa5b37f146106875780636ddd17131461069d57806370a08231146106bc57600080fd5b806339509351146104f857806340b28c2f14610518578063437823ec146105385780634549b039146105585780634ada218b1461057857806352390c02146105925780635342acb4146105b257600080fd5b8063274a533c116102be578063274a533c1461043b5780632b63c300146104515780632d83811914610466578063313ce5671461048657806331d66239146104a25780633685d419146104b8578063379ba1d9146104d857600080fd5b806306fdde031461031c578063095ea7b31461036a5780630d65df9b1461039a57806313f97a8e146103bc57806318160ddd146103dc5780631816467f146103fb57806323b872dd1461041b57600080fd5b3661031757005b600080fd5b34801561032857600080fd5b50604080518082019091526013815272105b1c1a184810da185908141c9bdd1bd8dbdb606a1b60208201525b6040516103619190613414565b60405180910390f35b34801561037657600080fd5b5061038a610385366004613487565b610ae4565b6040519015158152602001610361565b3480156103a657600080fd5b506103ba6103b53660046134b3565b610b4c565b005b3480156103c857600080fd5b506103ba6103d7366004613523565b610bf4565b3480156103e857600080fd5b50600f545b604051908152602001610361565b34801561040757600080fd5b506103ba6104163660046135fa565b610c8f565b34801561042757600080fd5b5061038a6104363660046134b3565b610ce0565b34801561044757600080fd5b506103ed60155481565b34801561045d57600080fd5b506103ed610dda565b34801561047257600080fd5b506103ed610481366004613617565b610eb7565b34801561049257600080fd5b5060405160098152602001610361565b3480156104ae57600080fd5b506103ed60175481565b3480156104c457600080fd5b506103ba6104d33660046135fa565b610f3b565b3480156104e457600080fd5b506103ba6104f3366004613630565b6110f0565b34801561050457600080fd5b5061038a610513366004613487565b61115f565b34801561052457600080fd5b506103ba61053336600461364d565b6111df565b34801561054457600080fd5b506103ba6105533660046135fa565b61123c565b34801561056457600080fd5b506103ed610573366004613686565b61128f565b34801561058457600080fd5b5060095461038a9060ff1681565b34801561059e57600080fd5b506103ba6105ad3660046135fa565b611323565b3480156105be57600080fd5b5061038a6105cd3660046135fa565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105f757600080fd5b506103ba6106063660046136ab565b61147b565b34801561061757600080fd5b506103ba6106263660046136cd565b6114e0565b34801561063757600080fd5b5061038a6106463660046135fa565b60066020526000908152604090205460ff1681565b34801561066757600080fd5b506103ed60135481565b34801561067d57600080fd5b506103ed60145481565b34801561069357600080fd5b506103ed60125481565b3480156106a957600080fd5b5060095461038a90610100900460ff1681565b3480156106c857600080fd5b506103ed6106d73660046135fa565b61153a565b3480156106e857600080fd5b506103ba611599565b3480156106fd57600080fd5b50601b54601c54601d54601e546107149392919084565b604080519485526020850193909352918301526060820152608001610361565b34801561074057600080fd5b50601954610754906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561077857600080fd5b5061038a6107873660046135fa565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107b157600080fd5b506107546115d4565b3480156107c657600080fd5b506103ba6107d5366004613523565b6115e3565b3480156107e657600080fd5b50601a54610754906001600160a01b031681565b34801561080657600080fd5b5060408051808201909152600381526204143560ec1b6020820152610354565b34801561083257600080fd5b506023546024546025546026546107149392919084565b34801561085557600080fd5b506103ba610864366004613617565b611679565b34801561087557600080fd5b506103ba6108843660046136fb565b611720565b34801561089557600080fd5b5061038a6108a4366004613487565b6117f5565b3480156108b557600080fd5b50600e54610754906001600160a01b031681565b3480156108d557600080fd5b5061038a6108e4366004613487565b6118db565b3480156108f557600080fd5b506103ba6109043660046135fa565b611930565b34801561091557600080fd5b506103ba6109243660046136cd565b611981565b34801561093557600080fd5b506103ba610944366004613617565b6119db565b34801561095557600080fd5b506103ed600c5481565b34801561096b57600080fd5b506103ba61097a366004613617565b611a26565b34801561098b57600080fd5b506103ed61099a36600461364d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109d157600080fd5b506103ed60115481565b3480156109e757600080fd5b506103ba6109f636600461372d565b611a71565b348015610a0757600080fd5b506103ba610a163660046135fa565b611ac2565b348015610a2757600080fd5b50600b5461038a9060ff1681565b348015610a4157600080fd5b506103ed60165481565b348015610a5757600080fd5b506103ba610a663660046135fa565b611b12565b348015610a7757600080fd5b506103ba610a863660046136fb565b611bb2565b348015610a9757600080fd5b50601f546020546021546022546107149392919084565b348015610aba57600080fd5b50600d54610754906001600160a01b031681565b348015610ada57600080fd5b506103ed60185481565b600954600090339060ff1680610b1257506001600160a01b03811660009081526006602052604090205460ff165b610b375760405162461bcd60e51b8152600401610b2e9061374b565b60405180910390fd5b610b42338585611d49565b5060019392505050565b33610b556115d4565b6001600160a01b031614610b7b5760405162461bcd60e51b8152600401610b2e9061377c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906137b1565b50505050565b33610bfd6115d4565b6001600160a01b031614610c235760405162461bcd60e51b8152600401610b2e9061377c565b60005b8251811015610c8a578160076000858481518110610c4657610c466137ce565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c82816137fa565b915050610c26565b505050565b33610c986115d4565b6001600160a01b031614610cbe5760405162461bcd60e51b8152600401610b2e9061377c565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610d0e57506001600160a01b03811660009081526006602052604090205460ff165b610d2a5760405162461bcd60e51b8152600401610b2e9061374b565b610d35858585611e6d565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610dba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b2e565b610dce8633610dc98785613813565b611d49565b50600195945050505050565b60008060165442610deb9190613813565b9050603c610df98180613826565b821015610e0957603c9250505090565b610e14816078613826565b821015610e2457601e9250505090565b610e2f8160b4613826565b821015610e3f5760199250505090565b610e4a8160f0613826565b821015610e5a5760149250505090565b610e66816101e0613826565b821015610e7657600f9250505090565b610e82816103c0613826565b821015610e9257600a9250505090565b610e9e816105a0613826565b821015610eae5760059250505090565b60029250505090565b6000601054821115610f1e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2e565b6000610f28612684565b9050610f348184613845565b9392505050565b33610f446115d4565b6001600160a01b031614610f6a5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03811660009081526005602052604090205460ff16610fcc5760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610b2e565b60005b6008548110156110ec57816001600160a01b031660088281548110610ff657610ff66137ce565b6000918252602090912001546001600160a01b0316036110da576008805461102090600190613813565b81548110611030576110306137ce565b600091825260209091200154600880546001600160a01b03909216918390811061105c5761105c6137ce565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110b4576110b4613867565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110e4816137fa565b915050610fcf565b5050565b336110f96115d4565b6001600160a01b03161461111f5760405162461bcd60e51b8152600401610b2e9061377c565b6009805461ffff191661ff001983151590811691909117610100820217909155600114801561114e5750601554155b1561115857436015555b5042601655565b600954600090339060ff168061118d57506001600160a01b03811660009081526006602052604090205460ff165b6111a95760405162461bcd60e51b8152600401610b2e9061374b565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610b4291908690610dc990879061387d565b336111e86115d4565b6001600160a01b03161461120e5760405162461bcd60e51b8152600401610b2e9061377c565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b336112456115d4565b6001600160a01b03161461126b5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156112e35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2e565b816113015760006112f784600160006126a7565b51915061131d9050565b600061131084600160006126a7565b60200151915061131d9050565b92915050565b3361132c6115d4565b6001600160a01b0316146113525760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03811660009081526005602052604090205460ff16156113bb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2e565b6001600160a01b03811660009081526001602052604090205415611415576001600160a01b0381166000908152600160205260409020546113fb90610eb7565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b336114846115d4565b6001600160a01b0316146114aa5760405162461bcd60e51b8152600401610b2e9061377c565b6114b66009600a613974565b6114c09083613826565b6012556114cf6009600a613974565b6114d99082613826565b6013555050565b336114e96115d4565b6001600160a01b03161461150f5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561157757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461131d90610eb7565b336115a26115d4565b6001600160a01b0316146115c85760405162461bcd60e51b8152600401610b2e9061377c565b6115d26000612703565b565b6000546001600160a01b031690565b336115ec6115d4565b6001600160a01b0316146116125760405162461bcd60e51b8152600401610b2e9061377c565b60005b8251811015610c8a578160046000858481518110611635576116356137ce565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611671816137fa565b915050611615565b336116826115d4565b6001600160a01b0316146116a85760405162461bcd60e51b8152600401610b2e9061377c565b804710156116f35760405162461bcd60e51b8152602060048201526018602482015277696e73756666696369656e74204554482062616c616e636560401b6044820152606401610b2e565b604051339082156108fc029083906000818181858888f193505050501580156110ec573d6000803e3d6000fd5b336117296115d4565b6001600160a01b03161461174f5760405162461bcd60e51b8152600401610b2e9061377c565b808261175b858761387d565b611765919061387d565b61176f919061387d565b6017819055600a10156117945760405162461bcd60e51b8152600401610b2e90613983565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600954600090339060ff168061182357506001600160a01b03811660009081526006602052604090205460ff165b61183f5760405162461bcd60e51b8152600401610b2e9061374b565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156118c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b2e565b6118d03386610dc98785613813565b506001949350505050565b600954600090339060ff168061190957506001600160a01b03811660009081526006602052604090205460ff165b6119255760405162461bcd60e51b8152600401610b2e9061374b565b610b42338585611e6d565b336119396115d4565b6001600160a01b03161461195f5760405162461bcd60e51b8152600401610b2e9061377c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b3361198a6115d4565b6001600160a01b0316146119b05760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b336119e46115d4565b6001600160a01b031614611a0a5760405162461bcd60e51b8152600401610b2e9061377c565b611a166009600a613974565b611a209082613826565b60115550565b33611a2f6115d4565b6001600160a01b031614611a555760405162461bcd60e51b8152600401610b2e9061377c565b611a616009600a613974565b611a6b9082613826565b60145550565b33611a7a6115d4565b6001600160a01b031614611aa05760405162461bcd60e51b8152600401610b2e9061377c565b611aab816001613826565b600c5550600b805460ff1916911515919091179055565b33611acb6115d4565b6001600160a01b031614611af15760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33611b1b6115d4565b6001600160a01b031614611b415760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b038116611ba65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2e565b611baf81612703565b50565b33611bbb6115d4565b6001600160a01b031614611be15760405162461bcd60e51b8152600401610b2e9061377c565b8082611bed858761387d565b611bf7919061387d565b611c01919061387d565b6018819055600a1015611c265760405162461bcd60e51b8152600401610b2e90613983565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600082600003611c9a5750600061131d565b6000611ca68385613826565b905082611cb38583613845565b14610f345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2e565b6000610f3483836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612753565b6001600160a01b038316611dab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2e565b6001600160a01b038216611e0c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2e565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ed15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2e565b6001600160a01b038216611f335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2e565b60008111611f955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2e565b611f9e8361153a565b8111156120075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b2e565b6001600160a01b03831660009081526007602052604090205460ff1615801561204957506001600160a01b03821660009081526007602052604090205460ff16155b6120955760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206120626f742c20552076657272792062616420474c0000006044820152606401610b2e565b6001600160a01b03831660009081526004602052604090205460ff161580156120d757506001600160a01b03821660009081526004602052604090205460ff16155b156121235760095460ff166121235760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b2e565b6001600160a01b03831660009081526004602052604090205460ff1615801561216557506001600160a01b03821660009081526004602052604090205460ff16155b801561217e575060155461217a90600261387d565b4311155b156121ed57600e546001600160a01b03908116908316036121ed5760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203220626c6044820152636f636b7360e01b6064820152608401610b2e565b600e546001600160a01b03848116911614801561222357506001600160a01b03821660009081526004602052604090205460ff16155b8015612238575060095462010000900460ff16155b156122c45760125481111561228f5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b2e565b6014548161229c8461153a565b6122a6919061387d565b11156122c45760405162461bcd60e51b8152600401610b2e906139ba565b600e546001600160a01b038481169116148015906122fb57506001600160a01b03821660009081526004602052604090205460ff16155b801561232057506001600160a01b03831660009081526004602052604090205460ff16155b8015612335575060095462010000900460ff16155b156124685760135481111561238c5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b2e565b600e546001600160a01b038381169116146123d657601454816123ae8461153a565b6123b8919061387d565b11156123d65760405162461bcd60e51b8152600401610b2e906139ba565b600b5460ff1615612468576001600160a01b0383166000908152600a60205260408120546124049042613813565b9050600c5481101561244b5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b2e565b506001600160a01b0383166000908152600a602052604090204290555b6124746009600a613974565b61247f90600a613826565b816124898561153a565b6124939190613813565b116124da576124a18361153a565b816124ae6009600a613974565b6124b990600a613826565b6124c3919061387d565b6124cd9190613813565b6124d79082613813565b90505b60006011546124e83061153a565b600954911115915062010000900460ff161580156125035750805b801561251d5750600e546001600160a01b03858116911614155b801561254257506001600160a01b03841660009081526004602052604090205460ff16155b801561256757506001600160a01b03831660009081526004602052604090205460ff16155b156125f357600e546001600160a01b03908116908416036125bd5760115460408051608081018252601f54815260208054908201526021549181019190915260225460608201526125b8919061278a565b6125f3565b60115460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526125f3919061278a565b60095460019060009062010000900460ff168061262857506001600160a01b03861660009081526004602052604090205460ff165b8061264b57506001600160a01b03851660009081526004602052604090205460ff165b1561265557600091505b600e546001600160a01b039081169086160361266f575060015b61267c86868685856128e4565b505050505050565b6000806000612691612bb1565b90925090506126a08183613845565b9250505090565b6126af6133ba565b6126ba848484612d34565b90506126cf8185856126ca612684565b612edb565b608086015260608501526040840152602083015281526126f781846126f2612684565b612f8a565b60a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081836127745760405162461bcd60e51b8152600401610b2e9190613414565b5060006127818486613845565b95945050505050565b6009805462ff0000191662010000179055606081015160208201516040830151600092916127b79161387d565b6127c1919061387d565b6127cc906002613826565b90506000818360400151856127e19190613826565b6127eb9190613845565b905060006127f98286613813565b90504761280582612fb2565b60006128118247613813565b905060008660400151866128259190613813565b61282f9083613845565b905060008760400151826128439190613826565b90508015612855576128558682613104565b6020880151600090612868846002613826565b6128729190613826565b9050801561289057601954612890906001600160a01b0316826131cf565b60608901516000906128a3856002613826565b6128ad9190613826565b905080156128cb57601a546128cb906001600160a01b0316826131cf565b50506009805462ff000019169055505050505050505050565b60006128f18484846126a7565b6001600160a01b03871660009081526005602052604090205490915060ff1615612953576001600160a01b038616600090815260026020526040902054612939908590613813565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156129b65760c08101516001600160a01b03861660009081526002602052604090205461299c919061387d565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546129db9190613813565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612a12919061387d565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612a44575060008160e00151115b15612a5b57612a5b81604001518260e001516132e5565b600081608001511180612a7357506000816101200151115b15612af857612a8b816080015182610120015161331a565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151846101000151856101200151612adc919061387d565b612ae6919061387d565b60405190815260200160405180910390a35b600081606001511180612b1057506000816101000151115b15612b2857612b288160600151826101000151613390565b60008160a001511180612b4057506000816101400151115b15612b5857612b588160a001518261014001516133a5565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612ba191815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612d0357826001600060088481548110612be057612be06137ce565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4b5750816002600060088481548110612c2457612c246137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6157601054600f54945094505050509091565b6001600060088381548110612c7857612c786137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ca79084613813565b92506002600060088381548110612cc057612cc06137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cef9083613813565b915080612cfb816137fa565b915050612bbe565b50600f54601054612d149190613845565b821015612d2b57601054600f549350935050509091565b90939092509050565b612d3c6133ba565b82612d4d5760c08101849052610f34565b612d786040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612dad575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612dd8565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6000612de2610dda565b9050806103e8836000015188612df89190613826565b612e029190613845565b612e0c9190613826565b60e0840152602082015181906103e890612e269089613826565b612e309190613845565b612e3a9190613826565b610100840152604082015181906103e890612e559089613826565b612e5f9190613845565b612e699190613826565b61012084015260608201516103e890612e829088613826565b612e8c9190613845565b610140840181905261012084015161010085015160e0860151612eaf908a613813565b612eb99190613813565b612ec39190613813565b612ecd9190613813565b60c084015250509392505050565b600080808080612eeb8689613826565b945086612f0357508392506000915081905080612f7f565b858960e00151612f139190613826565b925085896101000151612f269190613826565b915085896101200151612f399190613826565b90506000868a6101400151612f4e9190613826565b9050808284612f5d878a613813565b612f679190613813565b612f719190613813565b612f7b9190613813565b9450505b945094509450945094565b600082612f9957506000610f34565b81846101400151612faa9190613826565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe757612fe76137ce565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306491906139ef565b81600181518110613077576130776137ce565b6001600160a01b039283166020918202929092010152600d5461309d9130911684611d49565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906130d6908590600090869030904290600401613a0c565b600060405180830381600087803b1580156130f057600080fd5b505af115801561267c573d6000803e3d6000fd5b600d5461311c9030906001600160a01b031684611d49565b600d546001600160a01b031663f305d71982308560008061313b6115d4565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156131a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131c89190613a7d565b5050505050565b8047101561321f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b2e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461326c576040519150601f19603f3d011682016040523d82523d6000602084013e613271565b606091505b5050905080610c8a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610b2e565b81601060008282546132f79190613813565b90915550506023805482919060009061331190849061387d565b90915550505050565b806023600201600082825461332f919061387d565b90915550503060009081526005602052604090205460ff161561337157306000908152600260205260408120805483929061336b90849061387d565b90915550505b306000908152600160205260408120805484929061331190849061387d565b806023600101600082825461332f919061387d565b806023600301600082825461332f919061387d565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561344157858101830151858201604001528201613425565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611baf57600080fd5b803561348281613462565b919050565b6000806040838503121561349a57600080fd5b82356134a581613462565b946020939093013593505050565b6000806000606084860312156134c857600080fd5b83356134d381613462565b925060208401356134e381613462565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8015158114611baf57600080fd5b80356134828161350a565b6000806040838503121561353657600080fd5b823567ffffffffffffffff8082111561354e57600080fd5b818501915085601f83011261356257600080fd5b8135602082821115613576576135766134f4565b8160051b604051601f19603f8301168101818110868211171561359b5761359b6134f4565b6040529283528183019350848101820192898411156135b957600080fd5b948201945b838610156135de576135cf86613477565b855294820194938201936135be565b96506135ed9050878201613518565b9450505050509250929050565b60006020828403121561360c57600080fd5b8135610f3481613462565b60006020828403121561362957600080fd5b5035919050565b60006020828403121561364257600080fd5b8135610f348161350a565b6000806040838503121561366057600080fd5b823561366b81613462565b9150602083013561367b81613462565b809150509250929050565b6000806040838503121561369957600080fd5b82359150602083013561367b8161350a565b600080604083850312156136be57600080fd5b50508035926020909101359150565b600080604083850312156136e057600080fd5b82356136eb81613462565b9150602083013561367b8161350a565b6000806000806080858703121561371157600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561374057600080fd5b82356134a58161350a565b602080825260179082015276151c98591a5b99c81b9bdd08195b98589b1959081e595d604a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156137c357600080fd5b8151610f348161350a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161380c5761380c6137e4565b5060010190565b8181038181111561131d5761131d6137e4565b6000816000190483118215151615613840576138406137e4565b500290565b60008261386257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b8082018082111561131d5761131d6137e4565b600181815b808511156138cb5781600019048211156138b1576138b16137e4565b808516156138be57918102915b93841c9390800290613895565b509250929050565b6000826138e25750600161131d565b816138ef5750600061131d565b8160018114613905576002811461390f5761392b565b600191505061131d565b60ff841115613920576139206137e4565b50506001821b61131d565b5060208310610133831016604e8410600b841016171561394e575081810a61131d565b6139588383613890565b806000190482111561396c5761396c6137e4565b029392505050565b6000610f3460ff8416836138d3565b6020808252601e908201527f4d757374206b65657020746178657320617420313025206f72206c6573730000604082015260600190565b6020808252818101527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604082015260600190565b600060208284031215613a0157600080fd5b8151610f3481613462565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a5c5784516001600160a01b031683529383019391830191600101613a37565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a9257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a5f3c1cbcbbc51b36b3e99e1e244439af991d0dc4a9ab99314970d407afa071664736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103105760003560e01c8063715018a61161019c578063b5c57145116100e2578063ea2f0b3711610090578063ea2f0b37146109fb578063ee36e35914610a1b578063ef27902114610a35578063f2fde38b14610a4b578063f480fec214610a6b578063f66895a314610a8b578063f887ea4014610aae578063ff950c6514610ace57600080fd5b8063b5c5714514610909578063d257b34f14610929578063d2ce0db214610949578063d8672e511461095f578063dd62ed3e1461097f578063e2f45605146109c5578063e517f2b9146109db57600080fd5b806395d89b411161014a57806395d89b41146107fa5780639ba5e4d5146108265780639e252f0014610849578063a12a7d6114610869578063a457c2d714610889578063a8aa1b31146108a9578063a9059cbb146108c9578063aacebbe3146108e957600080fd5b8063715018a6146106dc578063728f8eea146106f157806375f0a8741461073457806388f820201461076c5780638da5cb5b146107a55780638e2839ff146107ba5780638ea5220f146107da57600080fd5b8063395093511161026157806359759f611161020f57806359759f61146105eb5780635b24ea5e1461060b57806362695eae1461062b578063652e2f041461065b57806366a88d96146106715780636aa5b37f146106875780636ddd17131461069d57806370a08231146106bc57600080fd5b806339509351146104f857806340b28c2f14610518578063437823ec146105385780634549b039146105585780634ada218b1461057857806352390c02146105925780635342acb4146105b257600080fd5b8063274a533c116102be578063274a533c1461043b5780632b63c300146104515780632d83811914610466578063313ce5671461048657806331d66239146104a25780633685d419146104b8578063379ba1d9146104d857600080fd5b806306fdde031461031c578063095ea7b31461036a5780630d65df9b1461039a57806313f97a8e146103bc57806318160ddd146103dc5780631816467f146103fb57806323b872dd1461041b57600080fd5b3661031757005b600080fd5b34801561032857600080fd5b50604080518082019091526013815272105b1c1a184810da185908141c9bdd1bd8dbdb606a1b60208201525b6040516103619190613414565b60405180910390f35b34801561037657600080fd5b5061038a610385366004613487565b610ae4565b6040519015158152602001610361565b3480156103a657600080fd5b506103ba6103b53660046134b3565b610b4c565b005b3480156103c857600080fd5b506103ba6103d7366004613523565b610bf4565b3480156103e857600080fd5b50600f545b604051908152602001610361565b34801561040757600080fd5b506103ba6104163660046135fa565b610c8f565b34801561042757600080fd5b5061038a6104363660046134b3565b610ce0565b34801561044757600080fd5b506103ed60155481565b34801561045d57600080fd5b506103ed610dda565b34801561047257600080fd5b506103ed610481366004613617565b610eb7565b34801561049257600080fd5b5060405160098152602001610361565b3480156104ae57600080fd5b506103ed60175481565b3480156104c457600080fd5b506103ba6104d33660046135fa565b610f3b565b3480156104e457600080fd5b506103ba6104f3366004613630565b6110f0565b34801561050457600080fd5b5061038a610513366004613487565b61115f565b34801561052457600080fd5b506103ba61053336600461364d565b6111df565b34801561054457600080fd5b506103ba6105533660046135fa565b61123c565b34801561056457600080fd5b506103ed610573366004613686565b61128f565b34801561058457600080fd5b5060095461038a9060ff1681565b34801561059e57600080fd5b506103ba6105ad3660046135fa565b611323565b3480156105be57600080fd5b5061038a6105cd3660046135fa565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105f757600080fd5b506103ba6106063660046136ab565b61147b565b34801561061757600080fd5b506103ba6106263660046136cd565b6114e0565b34801561063757600080fd5b5061038a6106463660046135fa565b60066020526000908152604090205460ff1681565b34801561066757600080fd5b506103ed60135481565b34801561067d57600080fd5b506103ed60145481565b34801561069357600080fd5b506103ed60125481565b3480156106a957600080fd5b5060095461038a90610100900460ff1681565b3480156106c857600080fd5b506103ed6106d73660046135fa565b61153a565b3480156106e857600080fd5b506103ba611599565b3480156106fd57600080fd5b50601b54601c54601d54601e546107149392919084565b604080519485526020850193909352918301526060820152608001610361565b34801561074057600080fd5b50601954610754906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561077857600080fd5b5061038a6107873660046135fa565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107b157600080fd5b506107546115d4565b3480156107c657600080fd5b506103ba6107d5366004613523565b6115e3565b3480156107e657600080fd5b50601a54610754906001600160a01b031681565b34801561080657600080fd5b5060408051808201909152600381526204143560ec1b6020820152610354565b34801561083257600080fd5b506023546024546025546026546107149392919084565b34801561085557600080fd5b506103ba610864366004613617565b611679565b34801561087557600080fd5b506103ba6108843660046136fb565b611720565b34801561089557600080fd5b5061038a6108a4366004613487565b6117f5565b3480156108b557600080fd5b50600e54610754906001600160a01b031681565b3480156108d557600080fd5b5061038a6108e4366004613487565b6118db565b3480156108f557600080fd5b506103ba6109043660046135fa565b611930565b34801561091557600080fd5b506103ba6109243660046136cd565b611981565b34801561093557600080fd5b506103ba610944366004613617565b6119db565b34801561095557600080fd5b506103ed600c5481565b34801561096b57600080fd5b506103ba61097a366004613617565b611a26565b34801561098b57600080fd5b506103ed61099a36600461364d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109d157600080fd5b506103ed60115481565b3480156109e757600080fd5b506103ba6109f636600461372d565b611a71565b348015610a0757600080fd5b506103ba610a163660046135fa565b611ac2565b348015610a2757600080fd5b50600b5461038a9060ff1681565b348015610a4157600080fd5b506103ed60165481565b348015610a5757600080fd5b506103ba610a663660046135fa565b611b12565b348015610a7757600080fd5b506103ba610a863660046136fb565b611bb2565b348015610a9757600080fd5b50601f546020546021546022546107149392919084565b348015610aba57600080fd5b50600d54610754906001600160a01b031681565b348015610ada57600080fd5b506103ed60185481565b600954600090339060ff1680610b1257506001600160a01b03811660009081526006602052604090205460ff165b610b375760405162461bcd60e51b8152600401610b2e9061374b565b60405180910390fd5b610b42338585611d49565b5060019392505050565b33610b556115d4565b6001600160a01b031614610b7b5760405162461bcd60e51b8152600401610b2e9061377c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee91906137b1565b50505050565b33610bfd6115d4565b6001600160a01b031614610c235760405162461bcd60e51b8152600401610b2e9061377c565b60005b8251811015610c8a578160076000858481518110610c4657610c466137ce565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c82816137fa565b915050610c26565b505050565b33610c986115d4565b6001600160a01b031614610cbe5760405162461bcd60e51b8152600401610b2e9061377c565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610d0e57506001600160a01b03811660009081526006602052604090205460ff165b610d2a5760405162461bcd60e51b8152600401610b2e9061374b565b610d35858585611e6d565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610dba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b2e565b610dce8633610dc98785613813565b611d49565b50600195945050505050565b60008060165442610deb9190613813565b9050603c610df98180613826565b821015610e0957603c9250505090565b610e14816078613826565b821015610e2457601e9250505090565b610e2f8160b4613826565b821015610e3f5760199250505090565b610e4a8160f0613826565b821015610e5a5760149250505090565b610e66816101e0613826565b821015610e7657600f9250505090565b610e82816103c0613826565b821015610e9257600a9250505090565b610e9e816105a0613826565b821015610eae5760059250505090565b60029250505090565b6000601054821115610f1e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b2e565b6000610f28612684565b9050610f348184613845565b9392505050565b33610f446115d4565b6001600160a01b031614610f6a5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03811660009081526005602052604090205460ff16610fcc5760405162461bcd60e51b81526020600482015260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606401610b2e565b60005b6008548110156110ec57816001600160a01b031660088281548110610ff657610ff66137ce565b6000918252602090912001546001600160a01b0316036110da576008805461102090600190613813565b81548110611030576110306137ce565b600091825260209091200154600880546001600160a01b03909216918390811061105c5761105c6137ce565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110b4576110b4613867565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110e4816137fa565b915050610fcf565b5050565b336110f96115d4565b6001600160a01b03161461111f5760405162461bcd60e51b8152600401610b2e9061377c565b6009805461ffff191661ff001983151590811691909117610100820217909155600114801561114e5750601554155b1561115857436015555b5042601655565b600954600090339060ff168061118d57506001600160a01b03811660009081526006602052604090205460ff165b6111a95760405162461bcd60e51b8152600401610b2e9061374b565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610b4291908690610dc990879061387d565b336111e86115d4565b6001600160a01b03161461120e5760405162461bcd60e51b8152600401610b2e9061377c565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b336112456115d4565b6001600160a01b03161461126b5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156112e35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b2e565b816113015760006112f784600160006126a7565b51915061131d9050565b600061131084600160006126a7565b60200151915061131d9050565b92915050565b3361132c6115d4565b6001600160a01b0316146113525760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03811660009081526005602052604090205460ff16156113bb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b2e565b6001600160a01b03811660009081526001602052604090205415611415576001600160a01b0381166000908152600160205260409020546113fb90610eb7565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b336114846115d4565b6001600160a01b0316146114aa5760405162461bcd60e51b8152600401610b2e9061377c565b6114b66009600a613974565b6114c09083613826565b6012556114cf6009600a613974565b6114d99082613826565b6013555050565b336114e96115d4565b6001600160a01b03161461150f5760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561157757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461131d90610eb7565b336115a26115d4565b6001600160a01b0316146115c85760405162461bcd60e51b8152600401610b2e9061377c565b6115d26000612703565b565b6000546001600160a01b031690565b336115ec6115d4565b6001600160a01b0316146116125760405162461bcd60e51b8152600401610b2e9061377c565b60005b8251811015610c8a578160046000858481518110611635576116356137ce565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611671816137fa565b915050611615565b336116826115d4565b6001600160a01b0316146116a85760405162461bcd60e51b8152600401610b2e9061377c565b804710156116f35760405162461bcd60e51b8152602060048201526018602482015277696e73756666696369656e74204554482062616c616e636560401b6044820152606401610b2e565b604051339082156108fc029083906000818181858888f193505050501580156110ec573d6000803e3d6000fd5b336117296115d4565b6001600160a01b03161461174f5760405162461bcd60e51b8152600401610b2e9061377c565b808261175b858761387d565b611765919061387d565b61176f919061387d565b6017819055600a10156117945760405162461bcd60e51b8152600401610b2e90613983565b6040805160808101825285815260208101859052808201849052606001829052601b859055601c849055601d839055601e829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600954600090339060ff168061182357506001600160a01b03811660009081526006602052604090205460ff165b61183f5760405162461bcd60e51b8152600401610b2e9061374b565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156118c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b2e565b6118d03386610dc98785613813565b506001949350505050565b600954600090339060ff168061190957506001600160a01b03811660009081526006602052604090205460ff165b6119255760405162461bcd60e51b8152600401610b2e9061374b565b610b42338585611e6d565b336119396115d4565b6001600160a01b03161461195f5760405162461bcd60e51b8152600401610b2e9061377c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b3361198a6115d4565b6001600160a01b0316146119b05760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b336119e46115d4565b6001600160a01b031614611a0a5760405162461bcd60e51b8152600401610b2e9061377c565b611a166009600a613974565b611a209082613826565b60115550565b33611a2f6115d4565b6001600160a01b031614611a555760405162461bcd60e51b8152600401610b2e9061377c565b611a616009600a613974565b611a6b9082613826565b60145550565b33611a7a6115d4565b6001600160a01b031614611aa05760405162461bcd60e51b8152600401610b2e9061377c565b611aab816001613826565b600c5550600b805460ff1916911515919091179055565b33611acb6115d4565b6001600160a01b031614611af15760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33611b1b6115d4565b6001600160a01b031614611b415760405162461bcd60e51b8152600401610b2e9061377c565b6001600160a01b038116611ba65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2e565b611baf81612703565b50565b33611bbb6115d4565b6001600160a01b031614611be15760405162461bcd60e51b8152600401610b2e9061377c565b8082611bed858761387d565b611bf7919061387d565b611c01919061387d565b6018819055600a1015611c265760405162461bcd60e51b8152600401610b2e90613983565b6040805160808101825285815260208082018690528183018590526060909101839052601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b600082600003611c9a5750600061131d565b6000611ca68385613826565b905082611cb38583613845565b14610f345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2e565b6000610f3483836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612753565b6001600160a01b038316611dab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2e565b6001600160a01b038216611e0c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2e565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ed15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2e565b6001600160a01b038216611f335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2e565b60008111611f955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b2e565b611f9e8361153a565b8111156120075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b2e565b6001600160a01b03831660009081526007602052604090205460ff1615801561204957506001600160a01b03821660009081526007602052604090205460ff16155b6120955760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206120626f742c20552076657272792062616420474c0000006044820152606401610b2e565b6001600160a01b03831660009081526004602052604090205460ff161580156120d757506001600160a01b03821660009081526004602052604090205460ff16155b156121235760095460ff166121235760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b2e565b6001600160a01b03831660009081526004602052604090205460ff1615801561216557506001600160a01b03821660009081526004602052604090205460ff16155b801561217e575060155461217a90600261387d565b4311155b156121ed57600e546001600160a01b03908116908316036121ed5760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203220626c6044820152636f636b7360e01b6064820152608401610b2e565b600e546001600160a01b03848116911614801561222357506001600160a01b03821660009081526004602052604090205460ff16155b8015612238575060095462010000900460ff16155b156122c45760125481111561228f5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b2e565b6014548161229c8461153a565b6122a6919061387d565b11156122c45760405162461bcd60e51b8152600401610b2e906139ba565b600e546001600160a01b038481169116148015906122fb57506001600160a01b03821660009081526004602052604090205460ff16155b801561232057506001600160a01b03831660009081526004602052604090205460ff16155b8015612335575060095462010000900460ff16155b156124685760135481111561238c5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b2e565b600e546001600160a01b038381169116146123d657601454816123ae8461153a565b6123b8919061387d565b11156123d65760405162461bcd60e51b8152600401610b2e906139ba565b600b5460ff1615612468576001600160a01b0383166000908152600a60205260408120546124049042613813565b9050600c5481101561244b5760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b2e565b506001600160a01b0383166000908152600a602052604090204290555b6124746009600a613974565b61247f90600a613826565b816124898561153a565b6124939190613813565b116124da576124a18361153a565b816124ae6009600a613974565b6124b990600a613826565b6124c3919061387d565b6124cd9190613813565b6124d79082613813565b90505b60006011546124e83061153a565b600954911115915062010000900460ff161580156125035750805b801561251d5750600e546001600160a01b03858116911614155b801561254257506001600160a01b03841660009081526004602052604090205460ff16155b801561256757506001600160a01b03831660009081526004602052604090205460ff16155b156125f357600e546001600160a01b03908116908416036125bd5760115460408051608081018252601f54815260208054908201526021549181019190915260225460608201526125b8919061278a565b6125f3565b60115460408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201526125f3919061278a565b60095460019060009062010000900460ff168061262857506001600160a01b03861660009081526004602052604090205460ff165b8061264b57506001600160a01b03851660009081526004602052604090205460ff165b1561265557600091505b600e546001600160a01b039081169086160361266f575060015b61267c86868685856128e4565b505050505050565b6000806000612691612bb1565b90925090506126a08183613845565b9250505090565b6126af6133ba565b6126ba848484612d34565b90506126cf8185856126ca612684565b612edb565b608086015260608501526040840152602083015281526126f781846126f2612684565b612f8a565b60a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081836127745760405162461bcd60e51b8152600401610b2e9190613414565b5060006127818486613845565b95945050505050565b6009805462ff0000191662010000179055606081015160208201516040830151600092916127b79161387d565b6127c1919061387d565b6127cc906002613826565b90506000818360400151856127e19190613826565b6127eb9190613845565b905060006127f98286613813565b90504761280582612fb2565b60006128118247613813565b905060008660400151866128259190613813565b61282f9083613845565b905060008760400151826128439190613826565b90508015612855576128558682613104565b6020880151600090612868846002613826565b6128729190613826565b9050801561289057601954612890906001600160a01b0316826131cf565b60608901516000906128a3856002613826565b6128ad9190613826565b905080156128cb57601a546128cb906001600160a01b0316826131cf565b50506009805462ff000019169055505050505050505050565b60006128f18484846126a7565b6001600160a01b03871660009081526005602052604090205490915060ff1615612953576001600160a01b038616600090815260026020526040902054612939908590613813565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156129b65760c08101516001600160a01b03861660009081526002602052604090205461299c919061387d565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546129db9190613813565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612a12919061387d565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612a44575060008160e00151115b15612a5b57612a5b81604001518260e001516132e5565b600081608001511180612a7357506000816101200151115b15612af857612a8b816080015182610120015161331a565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151846101000151856101200151612adc919061387d565b612ae6919061387d565b60405190815260200160405180910390a35b600081606001511180612b1057506000816101000151115b15612b2857612b288160600151826101000151613390565b60008160a001511180612b4057506000816101400151115b15612b5857612b588160a001518261014001516133a5565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612ba191815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612d0357826001600060088481548110612be057612be06137ce565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c4b5750816002600060088481548110612c2457612c246137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c6157601054600f54945094505050509091565b6001600060088381548110612c7857612c786137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ca79084613813565b92506002600060088381548110612cc057612cc06137ce565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cef9083613813565b915080612cfb816137fa565b915050612bbe565b50600f54601054612d149190613845565b821015612d2b57601054600f549350935050509091565b90939092509050565b612d3c6133ba565b82612d4d5760c08101849052610f34565b612d786040518060800160405280600081526020016000815260200160008152602001600081525090565b8215612dad575060408051608081018252601f5481526020805490820152602154918101919091526022546060820152612dd8565b5060408051608081018252601b548152601c546020820152601d5491810191909152601e5460608201525b6000612de2610dda565b9050806103e8836000015188612df89190613826565b612e029190613845565b612e0c9190613826565b60e0840152602082015181906103e890612e269089613826565b612e309190613845565b612e3a9190613826565b610100840152604082015181906103e890612e559089613826565b612e5f9190613845565b612e699190613826565b61012084015260608201516103e890612e829088613826565b612e8c9190613845565b610140840181905261012084015161010085015160e0860151612eaf908a613813565b612eb99190613813565b612ec39190613813565b612ecd9190613813565b60c084015250509392505050565b600080808080612eeb8689613826565b945086612f0357508392506000915081905080612f7f565b858960e00151612f139190613826565b925085896101000151612f269190613826565b915085896101200151612f399190613826565b90506000868a6101400151612f4e9190613826565b9050808284612f5d878a613813565b612f679190613813565b612f719190613813565b612f7b9190613813565b9450505b945094509450945094565b600082612f9957506000610f34565b81846101400151612faa9190613826565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe757612fe76137ce565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306491906139ef565b81600181518110613077576130776137ce565b6001600160a01b039283166020918202929092010152600d5461309d9130911684611d49565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906130d6908590600090869030904290600401613a0c565b600060405180830381600087803b1580156130f057600080fd5b505af115801561267c573d6000803e3d6000fd5b600d5461311c9030906001600160a01b031684611d49565b600d546001600160a01b031663f305d71982308560008061313b6115d4565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156131a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131c89190613a7d565b5050505050565b8047101561321f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b2e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461326c576040519150601f19603f3d011682016040523d82523d6000602084013e613271565b606091505b5050905080610c8a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610b2e565b81601060008282546132f79190613813565b90915550506023805482919060009061331190849061387d565b90915550505050565b806023600201600082825461332f919061387d565b90915550503060009081526005602052604090205460ff161561337157306000908152600260205260408120805483929061336b90849061387d565b90915550505b306000908152600160205260408120805484929061331190849061387d565b806023600101600082825461332f919061387d565b806023600301600082825461332f919061387d565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561344157858101830151858201604001528201613425565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611baf57600080fd5b803561348281613462565b919050565b6000806040838503121561349a57600080fd5b82356134a581613462565b946020939093013593505050565b6000806000606084860312156134c857600080fd5b83356134d381613462565b925060208401356134e381613462565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b8015158114611baf57600080fd5b80356134828161350a565b6000806040838503121561353657600080fd5b823567ffffffffffffffff8082111561354e57600080fd5b818501915085601f83011261356257600080fd5b8135602082821115613576576135766134f4565b8160051b604051601f19603f8301168101818110868211171561359b5761359b6134f4565b6040529283528183019350848101820192898411156135b957600080fd5b948201945b838610156135de576135cf86613477565b855294820194938201936135be565b96506135ed9050878201613518565b9450505050509250929050565b60006020828403121561360c57600080fd5b8135610f3481613462565b60006020828403121561362957600080fd5b5035919050565b60006020828403121561364257600080fd5b8135610f348161350a565b6000806040838503121561366057600080fd5b823561366b81613462565b9150602083013561367b81613462565b809150509250929050565b6000806040838503121561369957600080fd5b82359150602083013561367b8161350a565b600080604083850312156136be57600080fd5b50508035926020909101359150565b600080604083850312156136e057600080fd5b82356136eb81613462565b9150602083013561367b8161350a565b6000806000806080858703121561371157600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561374057600080fd5b82356134a58161350a565b602080825260179082015276151c98591a5b99c81b9bdd08195b98589b1959081e595d604a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156137c357600080fd5b8151610f348161350a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161380c5761380c6137e4565b5060010190565b8181038181111561131d5761131d6137e4565b6000816000190483118215151615613840576138406137e4565b500290565b60008261386257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b8082018082111561131d5761131d6137e4565b600181815b808511156138cb5781600019048211156138b1576138b16137e4565b808516156138be57918102915b93841c9390800290613895565b509250929050565b6000826138e25750600161131d565b816138ef5750600061131d565b8160018114613905576002811461390f5761392b565b600191505061131d565b60ff841115613920576139206137e4565b50506001821b61131d565b5060208310610133831016604e8410600b841016171561394e575081810a61131d565b6139588383613890565b806000190482111561396c5761396c6137e4565b029392505050565b6000610f3460ff8416836138d3565b6020808252601e908201527f4d757374206b65657020746178657320617420313025206f72206c6573730000604082015260600190565b6020808252818101527f596f752061726520657863656564696e67206d617857616c6c65744c696d6974604082015260600190565b600060208284031215613a0157600080fd5b8151610f3481613462565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a5c5784516001600160a01b031683529383019391830191600101613a37565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a9257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a5f3c1cbcbbc51b36b3e99e1e244439af991d0dc4a9ab99314970d407afa071664736f6c63430008100033

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

5360:22694:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9129:83;;;;;;;;;;-1:-1:-1;9199:5:0;;;;;;;;;;;;-1:-1:-1;;;9199:5:0;;;;9129:83;;;;;;;:::i;:::-;;;;;;;;9866:181;;;;;;;;;;-1:-1:-1;9866:181:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;9866:181:0;1162:187:1;27855:154:0;;;;;;;;;;-1:-1:-1;27855:154:0;;;;;:::i;:::-;;:::i;:::-;;26729:209;;;;;;;;;;-1:-1:-1;26729:209:0;;;;;:::i;:::-;;:::i;9402:95::-;;;;;;;;;;-1:-1:-1;9482:7:0;;9402:95;;;3545:25:1;;;3533:2;3518:18;9402:95:0;3399:177:1;26179:102:0;;;;;;;;;;-1:-1:-1;26179:102:0;;;;;:::i;:::-;;:::i;10055:430::-;;;;;;;;;;-1:-1:-1;10055:430:0;;;;;:::i;:::-;;:::i;6890:28::-;;;;;;;;;;;;;;;;15793:804;;;;;;;;;;;;;:::i;12196:248::-;;;;;;;;;;-1:-1:-1;12196:248:0;;;;;:::i;:::-;;:::i;9311:83::-;;;;;;;;;;-1:-1:-1;9311:83:0;;6459:1;4160:36:1;;4148:2;4133:18;9311:83:0;4018:184:1;6972:28:0;;;;;;;;;;;;;;;;12793:475;;;;;;;;;;-1:-1:-1;12793:475:0;;;;;:::i;:::-;;:::i;11932:256::-;;;;;;;;;;-1:-1:-1;11932:256:0;;;;;:::i;:::-;;:::i;10493:228::-;;;;;;;;;;-1:-1:-1;10493:228:0;;;;;:::i;:::-;;:::i;27417:154::-;;;;;;;;;;-1:-1:-1;27417:154:0;;;;;:::i;:::-;;:::i;13276:111::-;;;;;;;;;;-1:-1:-1;13276:111:0;;;;;:::i;:::-;;:::i;11454:470::-;;;;;;;;;;-1:-1:-1;11454:470:0;;;;;:::i;:::-;;:::i;5942:34::-;;;;;;;;;;-1:-1:-1;5942:34:0;;;;;;;;12452:333;;;;;;;;;;-1:-1:-1;12452:333:0;;;;;:::i;:::-;;:::i;13513:123::-;;;;;;;;;;-1:-1:-1;13513:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;13601:27:0;13577:4;13601:27;;;:18;:27;;;;;;;;;13513:123;27091:183;;;;;;;;;;-1:-1:-1;27091:183:0;;;;;:::i;:::-;;:::i;26591:126::-;;;;;;;;;;-1:-1:-1;26591:126:0;;;;;:::i;:::-;;:::i;5790:48::-;;;;;;;;;;-1:-1:-1;5790:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6762:53;;;;;;;;;;;;;;;;6822:55;;;;;;;;;;;;;;;;6703:52;;;;;;;;;;;;;;;;5984:30;;;;;;;;;;-1:-1:-1;5984:30:0;;;;;;;;;;;9505:198;;;;;;;;;;-1:-1:-1;9505:198:0;;;;;:::i;:::-;;:::i;2577:94::-;;;;;;;;;;;;;:::i;7470:38::-;;;;;;;;;;-1:-1:-1;7470: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;7470:38:0;5800:391:1;7058:75:0;;;;;;;;;;-1:-1:-1;7058:75:0;;;;-1:-1:-1;;;;;7058:75:0;;;;;;-1:-1:-1;;;;;6360:32:1;;;6342:51;;6330:2;6315:18;7058:75:0;6196:203:1;11326:120:0;;;;;;;;;;-1:-1:-1;11326:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;11418:20:0;11394:4;11418:20;;;:11;:20;;;;;;;;;11326:120;2354:87;;;;;;;;;;;;;:::i;25836:209::-;;;;;;;;;;-1:-1:-1;25836:209:0;;;;;:::i;:::-;;:::i;7140:69::-;;;;;;;;;;-1:-1:-1;7140:69:0;;;;-1:-1:-1;;;;;7140:69:0;;;9218:87;;;;;;;;;;-1:-1:-1;9290:7:0;;;;;;;;;;;;-1:-1:-1;;;9290:7:0;;;;9218:87;;7711:36;;;;;;;;;;-1:-1:-1;7711:36:0;;;;;;;;;;;;;;;27647:196;;;;;;;;;;-1:-1:-1;27647:196:0;;;;;:::i;:::-;;:::i;13644:336::-;;;;;;;;;;-1:-1:-1;13644:336:0;;;;;:::i;:::-;;:::i;10729:390::-;;;;;;;;;;-1:-1:-1;10729:390:0;;;;;:::i;:::-;;:::i;6396:19::-;;;;;;;;;;-1:-1:-1;6396:19:0;;;;-1:-1:-1;;;;;6396:19:0;;;11131:187;;;;;;;;;;-1:-1:-1;11131:187:0;;;;;:::i;:::-;;:::i;26053:114::-;;;;;;;;;;-1:-1:-1;26053:114:0;;;;;:::i;:::-;;:::i;26950:129::-;;;;;;;;;;-1:-1:-1;26950:129:0;;;;;:::i;:::-;;:::i;26449:130::-;;;;;;;;;;-1:-1:-1;26449:130:0;;;;;:::i;:::-;;:::i;6166:39::-;;;;;;;;;;;;;;;;27286:123;;;;;;;;;;-1:-1:-1;27286:123:0;;;;;:::i;:::-;;:::i;9715:143::-;;;;;;;;;;-1:-1:-1;9715:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9823:18:0;;;9796:7;9823:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9715:143;6635:61;;;;;;;;;;;;;;;;26289:152;;;;;;;;;;-1:-1:-1;26289:152:0;;;;;:::i;:::-;;:::i;13395:110::-;;;;;;;;;;-1:-1:-1;13395:110:0;;;;;:::i;:::-;;:::i;6124:35::-;;;;;;;;;;-1:-1:-1;6124:35:0;;;;;;;;6925:38;;;;;;;;;;;;;;;;2679:192;;;;;;;;;;-1:-1:-1;2679:192:0;;;;;:::i;:::-;;:::i;13992:346::-;;;;;;;;;;-1:-1:-1;13992:346:0;;;;;:::i;:::-;;:::i;7515:42::-;;;;;;;;;;-1:-1:-1;7515:42:0;;;;;;;;;;;;;;;6368:21;;;;;;;;;;-1:-1:-1;6368:21:0;;;;-1:-1:-1;;;;;6368:21:0;;;7007:29;;;;;;;;;;;;;;;;9866:181;6270:14;;9961:4;;9941:10;;6270:14;;;:42;;-1:-1:-1;;;;;;6288:24:0;;;;;;:15;:24;;;;;;;;6270:42;6262:78;;;;-1:-1:-1;;;6262:78:0;;;;;;;:::i;:::-;;;;;;;;;9978:39:::1;1973:10:::0;10001:7:::1;10010:6;9978:8;:39::i;:::-;-1:-1:-1::0;10035:4:0::1;::::0;9866:181;-1:-1:-1;;;9866:181:0:o;27855:154::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;27960:41:::1;::::0;-1:-1:-1;;;27960:41:0;;-1:-1:-1;;;;;8236:32:1;;;27960:41:0::1;::::0;::::1;8218:51:1::0;8285:18;;;8278:34;;;27960:27:0;::::1;::::0;::::1;::::0;8191:18:1;;27960:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27855:154:::0;;;:::o;26729:209::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;26828:9:::1;26824:107;26846:8;:15;26842:1;:19;26824:107;;;26912:5;26882:14;:27;26897:8;26906:1;26897:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26882:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26882:27:0;:35;;-1:-1:-1;;26882:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26863:3;::::1;::::0;::::1;:::i;:::-;;;;26824:107;;;;26729:209:::0;;:::o;26179:102::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;26252:9:::1;:21:::0;;-1:-1:-1;;;;;;26252:21:0::1;-1:-1:-1::0;;;;;26252:21:0;;;::::1;::::0;;;::::1;::::0;;26179:102::o;10055:430::-;6270:14;;10169:4;;10152:6;;6270:14;;;:42;;-1:-1:-1;;;;;;6288:24:0;;;;;;:15;:24;;;;;;;;6270:42;6262:78;;;;-1:-1:-1;;;6262:78:0;;;;;;;:::i;:::-;10186:36:::1;10196:6;10204:9;10215:6;10186:9;:36::i;:::-;-1:-1:-1::0;;;;;10262:19:0;::::1;10235:24;10262:19:::0;;;:11:::1;:19;::::0;;;;;;;1973:10;10262:33;;;;;;;;10314:26;;::::1;;10306:79;;;::::0;-1:-1:-1;;;10306:79:0;;9179:2:1;10306: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;;10306:79:0::1;8977:404:1::0;10306:79:0::1;10396:57;10405:6:::0;1973:10;10427:25:::1;10446:6:::0;10427:16;:25:::1;:::i;:::-;10396:8;:57::i;:::-;-1:-1:-1::0;10473:4:0::1;::::0;10055:430;-1:-1:-1;;;;;10055:430:0:o;15793:804::-;15846:7;15866:24;15911:23;;15893:15;:41;;;;:::i;:::-;15866:68;-1:-1:-1;15962:6:0;16002:11;15962:6;;16002:11;:::i;:::-;15983:16;:30;15979:611;;;16038:2;16030:11;;;;15793:804;:::o;15979:611::-;16082:12;16088:6;16082:3;:12;:::i;:::-;16063:16;:31;16059:531;;;16119:2;16111:11;;;;15793:804;:::o;16059:531::-;16163:12;16169:6;16163:3;:12;:::i;:::-;16144:16;:31;16140:450;;;16200:2;16192:11;;;;15793:804;:::o;16140:450::-;16244:12;16250:6;16244:3;:12;:::i;:::-;16225:16;:31;16221:369;;;16281:2;16273:11;;;;15793:804;:::o;16221:369::-;16325:12;16331:6;16325:3;:12;:::i;:::-;16306:16;:31;16302:288;;;16362:2;16354:11;;;;15793:804;:::o;16302:288::-;16407:12;16413:6;16407:3;:12;:::i;:::-;16388:16;:31;16384:206;;;16444:2;16436:11;;;;15793:804;:::o;16384:206::-;16492:13;16499:6;16492:4;:13;:::i;:::-;16473:16;:32;16469:121;;;16530:1;16522:10;;;;15793:804;:::o;16469:121::-;16576:1;16568:10;;;;15793:804;:::o;12196:248::-;12262:7;12301;;12290;:18;;12282:73;;;;-1:-1:-1;;;12282:73:0;;9894:2:1;12282: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;;12282:73:0;9692:406:1;12282:73:0;12366:19;12389:10;:8;:10::i;:::-;12366:33;-1:-1:-1;12417:19:0;12366:33;12417:7;:19;:::i;:::-;12410:26;12196:248;-1:-1:-1;;;12196:248:0:o;12793:475::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12875:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12867:56;;;::::0;-1:-1:-1;;;12867:56:0;;10527:2:1;12867:56:0::1;::::0;::::1;10509:21:1::0;10566:2;10546:18;;;10539:30;-1:-1:-1;;;10585:18:1;;;10578:53;10648:18;;12867:56:0::1;10325:347:1::0;12867:56:0::1;12939:9;12934:327;12958:9;:16:::0;12954:20;::::1;12934:327;;;13016:7;-1:-1:-1::0;;;;;13000:23:0::1;:9;13010:1;13000:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;13000:12:0::1;:23:::0;12996:254:::1;;13059:9;13069:16:::0;;:20:::1;::::0;13088:1:::1;::::0;13069:20:::1;:::i;:::-;13059:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;13044:9:::1;:12:::0;;-1:-1:-1;;;;;13059:31:0;;::::1;::::0;13054:1;;13044:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;13044:46:0::1;-1:-1:-1::0;;;;;13044:46:0;;::::1;;::::0;;13109:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;13148:11:::1;:20:::0;;;;:28;;-1:-1:-1;;13148:28:0::1;::::0;;13195:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;13195:15:0;;;;;-1:-1:-1;;;;;;13195:15:0::1;::::0;;;;;12934:327:::1;12793:475:::0;:::o;12996:254::-:1;12976:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12934:327;;;;12793:475:::0;:::o;11932:256::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;12000:14:::1;:22:::0;;-1:-1:-1;;12034:19:0;-1:-1:-1;;12000:22:0;::::1;;12034:19:::0;;;;;;;12000:22:::1;12034:19:::0;::::1;;::::0;;;-1:-1:-1;12063:13:0::1;:35:::0;::::1;;;-1:-1:-1::0;12080:13:0::1;::::0;:18;12063:35:::1;12060:68;;;12116:12;12100:13;:28:::0;12060:68:::1;-1:-1:-1::0;12165:15:0::1;12140:23;:40:::0;11932:256::o;10493:228::-;6270:14;;10594:4;;10573:10;;6270:14;;;:42;;-1:-1:-1;;;;;;6288:24:0;;;;;;:15;:24;;;;;;;;6270:42;6262:78;;;;-1:-1:-1;;;6262:78:0;;;;;;;:::i;:::-;1973:10;10643:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10643:34:0;::::1;::::0;;;;;;;;10611:80:::1;::::0;1973:10;10634:7;;10643:47:::1;::::0;10680:10;;10643:47:::1;:::i;27417:154::-:0;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;27511:6:::1;:27:::0;;-1:-1:-1;;;;;27511:27:0;;::::1;-1:-1:-1::0;;;;;;27511:27:0;;::::1;;::::0;;;27549:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;27417:154::o;13276:111::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13345:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;13345:34:0::1;13375:4;13345:34;::::0;;13276:111::o;11454:470::-;11544:7;11583;;11572;:18;;11564:62;;;;-1:-1:-1;;;11564:62:0;;11141:2:1;11564:62:0;;;11123:21:1;11180:2;11160:18;;;11153:30;11219:33;11199:18;;;11192:61;11270:18;;11564:62:0;10939:355:1;11564:62:0;11642:17;11637:280;;11676:28;11707:32;11718:7;11727:4;11733:5;11707:10;:32::i;:::-;11761:9;;-1:-1:-1;11754:16:0;;-1:-1:-1;11754:16:0;11637:280;11803:28;11834:32;11845:7;11854:4;11860:5;11834:10;:32::i;:::-;11888:17;;;;-1:-1:-1;11881:24:0;;-1:-1:-1;11881:24:0;11637:280;11454:470;;;;:::o;12452:333::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12535:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12534:21;12526:61;;;::::0;-1:-1:-1;;;12526:61:0;;11501:2:1;12526:61:0::1;::::0;::::1;11483:21:1::0;11540:2;11520:18;;;11513:30;11579:29;11559:18;;;11552:57;11626:18;;12526:61:0::1;11299:351:1::0;12526:61:0::1;-1:-1:-1::0;;;;;12601:16:0;::::1;12620:1;12601:16:::0;;;:7:::1;:16;::::0;;;;;:20;12598:108:::1;;-1:-1:-1::0;;;;;12677:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;12657:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;12638:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;12598:108:::1;-1:-1:-1::0;;;;;12716:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12716:27:0::1;12739:4;12716:27:::0;;::::1;::::0;;;12754:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12754:23:0::1;::::0;;::::1;::::0;;12452:333::o;27091:183::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;27202:14:::1;6459:1:::0;27202:2:::1;:14;:::i;:::-;27193:23;::::0;:6;:23:::1;:::i;:::-;27179:11;:37:::0;27252:14:::1;6459:1:::0;27252:2:::1;:14;:::i;:::-;27242:24;::::0;:7;:24:::1;:::i;:::-;27227:12;:39:::0;-1:-1:-1;;27091:183:0:o;26591:126::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26678:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;26678:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26591:126::o;9505:198::-;-1:-1:-1;;;;;9595:20:0;;9571:7;9595:20;;;:11;:20;;;;;;;;9591:49;;;-1:-1:-1;;;;;;9624:16:0;;;;;:7;:16;;;;;;;9505:198::o;9591:49::-;-1:-1:-1;;;;;9678:16:0;;;;;;:7;:16;;;;;;9658:37;;:19;:37::i;2577:94::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;2642:21:::1;2660:1;2642:9;:21::i;:::-;2577:94::o:0;2354:87::-;2400:7;2427:6;-1:-1:-1;;;;;2427:6:0;;2354:87::o;25836:209::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;25932:9:::1;25928:110;25951:8;:15;25947:1;:19;25928:110;;;26021:5;25987:18;:31;26006:8;26015:1;26006:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25987:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25987:31:0;:39;;-1:-1:-1;;25987:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25968:3;::::1;::::0;::::1;:::i;:::-;;;;25928:110;;27647:196:::0;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;27747:9:::1;27722:21;:34;;27714:71;;;::::0;-1:-1:-1;;;27714:71:0;;13240:2:1;27714:71:0::1;::::0;::::1;13222:21:1::0;13279:2;13259:18;;;13252:30;-1:-1:-1;;;13298:18:1;;;13291:54;13362:18;;27714:71:0::1;13038:348:1::0;27714:71:0::1;27796:39;::::0;27804:10:::1;::::0;27796:39;::::1;;;::::0;27825:9;;27796:39:::1;::::0;;;27825:9;27804:10;27796:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;13644:336:::0;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;13807:4;13794:10;13774:17:::1;13781:10:::0;13774:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;13758:13;:53:::0;;;13848:2:::1;-1:-1:-1::0;13831:19:0::1;13823:62;;;;-1:-1:-1::0;;;13823:62:0::1;;;;;;;:::i;:::-;13905:38;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;13897:5:::1;:46:::0;;;;;;;;;;;;;;;13959:13;::::1;::::0;-1:-1:-1;;13959:13:0::1;13644:336:::0;;;;:::o;10729:390::-;6270:14;;10835:4;;10814:10;;6270:14;;;:42;;-1:-1:-1;;;;;;6288:24:0;;;;;;:15;:24;;;;;;;;6270:42;6262:78;;;;-1:-1:-1;;;6262:78:0;;;;;;;:::i;:::-;1973:10;10852:24:::1;10879:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;10879:34:0;::::1;::::0;;;;;;;;10932:35;;::::1;;10924:85;;;::::0;-1:-1:-1;;;10924:85:0;;13952:2:1;10924: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;;10924:85:0::1;13750:401:1::0;10924:85:0::1;11020:67;1973:10:::0;11043:7;11052:34:::1;11071:15:::0;11052:16;:34:::1;:::i;11020:67::-;-1:-1:-1::0;11107:4:0::1;::::0;10729:390;-1:-1:-1;;;;10729:390:0:o;11131:187::-;6270:14;;11229:4;;11208:10;;6270:14;;;:42;;-1:-1:-1;;;;;;6288:24:0;;;;;;:15;:24;;;;;;;;6270:42;6262:78;;;;-1:-1:-1;;;6262:78:0;;;;;;;:::i;:::-;11250:40:::1;11260:10;11272:9;11283:6;11250:9;:40::i;26053:114::-:0;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;26132:15:::1;:27:::0;;-1:-1:-1;;;;;;26132:27:0::1;-1:-1:-1::0;;;;;26132:27:0;;;::::1;::::0;;;::::1;::::0;;26053:114::o;26950:129::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27039:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;27039:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26950:129::o;26449:130::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;26558:13:::1;6459:1;26558:2;:13;:::i;:::-;26549:22;::::0;:6;:22:::1;:::i;:::-;26528:18;:43:::0;-1:-1:-1;26449:130:0:o;27286:123::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;27387:14:::1;6459:1:::0;27387:2:::1;:14;:::i;:::-;27378:23;::::0;:6;:23:::1;:::i;:::-;27361:14;:40:::0;-1:-1:-1;27286:123:0:o;26289:152::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;26383:16:::1;:4:::0;26390:9:::1;26383:16;:::i;:::-;26368:12;:31:::0;-1:-1:-1;26410:15:0::1;:23:::0;;-1:-1:-1;;26410:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26289:152::o;13395:110::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13462:27:0::1;13492:5;13462:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;13462:35:0::1;::::0;;13395:110::o;2679:192::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2768:22:0;::::1;2760:73;;;::::0;-1:-1:-1;;;2760:73:0;;14358:2:1;2760: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;;2760:73:0::1;14156:402:1::0;2760:73:0::1;2844:19;2854:8;2844:9;:19::i;:::-;2679:192:::0;:::o;13992:346::-;1973:10;2489:7;:5;:7::i;:::-;-1:-1:-1;;;;;2489:23:0;;2481:68;;;;-1:-1:-1;;;2481:68:0;;;;;;;:::i;:::-;14160:4;14147:10;14127:17:::1;14134:10:::0;14127:4;:17:::1;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;14110:14;:54:::0;;;14202:2:::1;-1:-1:-1::0;14184:20:0::1;14176:63;;;;-1:-1:-1::0;;;14176:63:0::1;;;;;;;:::i;:::-;14263:38;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;14251:9:::1;:50:::0;;;;;;;;;;;;;;14317:13;::::1;::::0;-1:-1:-1;;14317:13:0::1;13992:346:::0;;;;:::o;4387:246::-;4445:7;4469:1;4474;4469:6;4465:47;;-1:-1:-1;4499:1:0;4492:8;;4465:47;4522:9;4534:5;4538:1;4534;:5;:::i;:::-;4522:17;-1:-1:-1;4567:1:0;4558:5;4562:1;4522:17;4558:5;:::i;:::-;:10;4550:56;;;;-1:-1:-1;;;4550:56:0;;14765:2:1;4550: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;;4550:56:0;14563:397:1;4641:132:0;4699:7;4726:39;4730:1;4733;4726:39;;;;;;;;;;;;;-1:-1:-1;;;4726:39:0;;;:3;:39::i;19797:335::-;-1:-1:-1;;;;;19890:19:0;;19882:68;;;;-1:-1:-1;;;19882:68:0;;15167:2:1;19882: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;;19882:68:0;14965:400:1;19882:68:0;-1:-1:-1;;;;;19969:21:0;;19961:68;;;;-1:-1:-1;;;19961:68:0;;15572:2:1;19961: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;;19961:68:0;15370:398:1;19961:68:0;-1:-1:-1;;;;;20040:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20092:32;;3545:25:1;;;20092:32:0;;3518:18:1;20092:32:0;;;;;;;19797:335;;;:::o;20140:2448::-;-1:-1:-1;;;;;20228:18:0;;20220:68;;;;-1:-1:-1;;;20220:68:0;;15975:2:1;20220: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;;20220:68:0;15773:401:1;20220:68:0;-1:-1:-1;;;;;20307:16:0;;20299:64;;;;-1:-1:-1;;;20299:64:0;;16381:2:1;20299: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;;20299:64:0;16179:399:1;20299:64:0;20391:1;20382:6;:10;20374:64;;;;-1:-1:-1;;;20374:64:0;;16785:2:1;20374: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;;20374:64:0;16583:405:1;20374:64:0;20467:15;20477:4;20467:9;:15::i;:::-;20457:6;:25;;20449:86;;;;-1:-1:-1;;;20449:86:0;;17195:2:1;20449: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;;20449:86:0;16993:413:1;20449:86:0;-1:-1:-1;;;;;20555:20:0;;;;;;:14;:20;;;;;;;;20554:21;:44;;;;-1:-1:-1;;;;;;20580:18:0;;;;;;:14;:18;;;;;;;;20579:19;20554:44;20546:86;;;;-1:-1:-1;;;20546:86:0;;17613:2:1;20546:86:0;;;17595:21:1;17652:2;17632:18;;;17625:30;17691:31;17671:18;;;17664:59;17740:18;;20546:86:0;17411:353:1;20546:86:0;-1:-1:-1;;;;;20657:24:0;;;;;;:18;:24;;;;;;;;20656:25;:52;;;;-1:-1:-1;;;;;;20686:22:0;;;;;;:18;:22;;;;;;;;20685:23;20656:52;20653:128;;;20732:14;;;;20724:45;;;;-1:-1:-1;;;20724:45:0;;17971:2:1;20724:45:0;;;17953:21:1;18010:2;17990:18;;;17983:30;-1:-1:-1;;;18029:18:1;;;18022:48;18087:18;;20724:45:0;17769:342:1;20724:45:0;-1:-1:-1;;;;;20805:24:0;;;;;;:18;:24;;;;;;;;20804:25;:52;;;;-1:-1:-1;;;;;;20834:22:0;;;;;;:18;:22;;;;;;;;20833:23;20804:52;:89;;;;-1:-1:-1;20876:13:0;;:17;;20892:1;20876:17;:::i;:::-;20860:12;:33;;20804:89;20801:180;;;20924:4;;-1:-1:-1;;;;;20924:4:0;;;20918:10;;;;20910:59;;;;-1:-1:-1;;;20910:59:0;;18318:2:1;20910: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;;20910:59:0;18116:400:1;20910:59:0;21012:4;;-1:-1:-1;;;;;21004:12:0;;;21012:4;;21004:12;:39;;;;-1:-1:-1;;;;;;21021:22:0;;;;;;:18;:22;;;;;;;;21020:23;21004:39;:52;;;;-1:-1:-1;21048:8:0;;;;;;;21047:9;21004:52;21001:246;;;21090:11;;21080:6;:21;;21072:63;;;;-1:-1:-1;;;21072:63:0;;18723:2:1;21072:63:0;;;18705:21:1;18762:2;18742:18;;;18735:30;18801:31;18781:18;;;18774:59;18850:18;;21072:63:0;18521:353:1;21072:63:0;21184:14;;21174:6;21158:13;21168:2;21158:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21150:85;;;;-1:-1:-1;;;21150:85:0;;;;;;;:::i;:::-;21278:4;;-1:-1:-1;;;;;21270:12:0;;;21278:4;;21270:12;;;;:39;;-1:-1:-1;;;;;;21287:22:0;;;;;;:18;:22;;;;;;;;21286:23;21270:39;:68;;;;-1:-1:-1;;;;;;21314:24:0;;;;;;:18;:24;;;;;;;;21313:25;21270:68;:81;;;;-1:-1:-1;21343:8:0;;;;;;;21342:9;21270:81;21267:573;;;21385:12;;21375:6;:22;;21367:65;;;;-1:-1:-1;;;21367:65:0;;19442:2:1;21367:65:0;;;19424:21:1;19481:2;19461:18;;;19454:30;19520:32;19500:18;;;19493:60;19570:18;;21367:65:0;19240:354:1;21367:65:0;21456:4;;-1:-1:-1;;;;;21450:10:0;;;21456:4;;21450:10;21447:134;;21514:14;;21504:6;21488:13;21498:2;21488:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21480:85;;;;-1:-1:-1;;;21480:85:0;;;;;;;:::i;:::-;21598:15;;;;21595:234;;;-1:-1:-1;;;;;21672:15:0;;21633:18;21672:15;;;:9;:15;;;;;;21654:33;;:15;:33;:::i;:::-;21633:54;;21728:12;;21714:10;:26;;21706:55;;;;-1:-1:-1;;;21706:55:0;;19801:2:1;21706:55:0;;;19783:21:1;19840:2;19820:18;;;19813:30;-1:-1:-1;;;19859:18:1;;;19852:46;19915:18;;21706:55:0;19599:340:1;21706:55:0;-1:-1:-1;;;;;;21780:15:0;;;;;;:9;:15;;;;;21798;21780:33;;21595:234;21897:14;6459:1;21897:2;:14;:::i;:::-;21891:20;;:2;:20;:::i;:::-;21881:6;21863:15;21873:4;21863:9;:15::i;:::-;:24;;;;:::i;:::-;:48;21860:111;;21955:15;21965:4;21955:9;:15::i;:::-;21946:6;21929:14;6459:1;21929:2;:14;:::i;:::-;21924:19;;:2;:19;:::i;:::-;:28;;;;:::i;:::-;:46;;;;:::i;:::-;21913:58;;;;:::i;:::-;;;21860:111;22001:12;22044:18;;22016:24;22034:4;22016:9;:24::i;:::-;22085:8;;-1:-1:-1;;22016:46:0;;-1:-1:-1;22085:8:0;;;;;22084:9;:20;;;;;22097:7;22084:20;:36;;;;-1:-1:-1;22116:4:0;;-1:-1:-1;;;;;22108:12:0;;;22116:4;;22108:12;;22084:36;:65;;;;-1:-1:-1;;;;;;22125:24:0;;;;;;:18;:24;;;;;;;;22124:25;22084:65;:92;;;;-1:-1:-1;;;;;;22154:22:0;;;;;;:18;:22;;;;;;;;22153:23;22084:92;22081:246;;;22201:4;;-1:-1:-1;;;;;22201:4:0;;;22195:10;;;;22192:123;;22223:18;;22208:45;;;;;;;;22243:9;22208:45;;;;;;;;;;;;;;;;;;;;;;;;;;;22223:18;22208:14;:45::i;:::-;22192:123;;;22289:18;;22274:41;;;;;;;;22309:5;22274:41;;;;;;;;;;;;;;;;;;;;;;;;;;22289:18;22274:14;:41::i;:::-;22400:8;;22352:4;;22337:12;;22400:8;;;;;;:36;;-1:-1:-1;;;;;;22412:24:0;;;;;;:18;:24;;;;;;;;22400:36;:62;;;-1:-1:-1;;;;;;22440:22:0;;;;;;:18;:22;;;;;;;;22400:62;22397:82;;;22474:5;22464:15;;22397:82;22499:4;;-1:-1:-1;;;;;22499:4:0;;;22493:10;;;;22490:28;;-1:-1:-1;22514:4:0;22490:28;22531:49;22546:4;22552:2;22556:6;22564:7;22573:6;22531:14;:49::i;:::-;20209:2379;;;20140:2448;;;:::o;19083:158::-;19124:7;19145:15;19162;19181:19;:17;:19::i;:::-;19144:56;;-1:-1:-1;19144:56:0;-1:-1:-1;19218:15:0;19144:56;;19218:15;:::i;:::-;19211:22;;;;19083:158;:::o;15319:466::-;15405:36;;:::i;:::-;15466:37;15478:7;15487;15496:6;15466:11;:37::i;:::-;15454:49;;15623:53;15636:9;15647:7;15656;15665:10;:8;:10::i;:::-;15623:12;:53::i;:::-;15599:20;;;15514:162;15577:20;;;15514:162;15561:14;;;15514:162;15534:25;;;15514:162;;;15706:44;15515:9;15730:7;15739:10;:8;:10::i;:::-;15706:12;:44::i;:::-;15688:14;;;15687:63;15319:466;;;;;:::o;2879:173::-;2935:16;2954:6;;-1:-1:-1;;;;;2971:17:0;;;-1:-1:-1;;;;;;2971:17:0;;;;;;3004:40;;2954:6;;;;;;;3004:40;;2935:16;3004:40;2924:128;2879:173;:::o;4781:223::-;4901:7;4936:12;4929:5;4921:28;;;;-1:-1:-1;;;4921:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4960:9:0;4972:5;4976:1;4972;:5;:::i;:::-;4960:17;4781:223;-1:-1:-1;;;;;4781:223:0:o;23749:1099::-;8202:8;:15;;-1:-1:-1;;8202:15:0;;;;;23904:8:::1;::::0;::::1;::::0;23887:14:::1;::::0;::::1;::::0;23870::::1;::::0;::::1;::::0;8202:15;;23904:8;23870:31:::1;::::0;::::1;:::i;:::-;:42;;;;:::i;:::-;23869:48;::::0;23916:1:::1;23869:48;:::i;:::-;23847:70;;23928:32;23998:11;23981:4;:14;;;23963:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;23928:81:::0;-1:-1:-1;24020:14:0::1;24037:42;23928:81:::0;24037:15;:42:::1;:::i;:::-;24020:59:::0;-1:-1:-1;24117:21:0::1;24151:24;24020:59:::0;24151:16:::1;:24::i;:::-;24188:20;24211:38;24235:14:::0;24211:21:::1;:38;:::i;:::-;24188:61;;24260:19;24311:4;:14;;;24297:11;:28;;;;:::i;:::-;24281:45;::::0;:12;:45:::1;:::i;:::-;24260:66;;24337:29;24383:4;:14;;;24369:11;:28;;;;:::i;:::-;24337:60:::0;-1:-1:-1;24413:25:0;;24410:117:::1;;24454:61;24467:24;24493:21;24454:12;:61::i;:::-;24580:14;::::0;::::1;::::0;24539:20:::1;::::0;24562:15:::1;:11:::0;24576:1:::1;24562:15;:::i;:::-;:32;;;;:::i;:::-;24539:55:::0;-1:-1:-1;24608:16:0;;24605:95:::1;;24648:15;::::0;24640:48:::1;::::0;-1:-1:-1;;;;;24648:15:0::1;24675:12:::0;24640:34:::1;:48::i;:::-;24745:8;::::0;::::1;::::0;24710:14:::1;::::0;24727:15:::1;:11:::0;24741:1:::1;24727:15;:::i;:::-;:26;;;;:::i;:::-;24710:43:::0;-1:-1:-1;24767:10:0;;24764:77:::1;;24801:9;::::0;24793:36:::1;::::0;-1:-1:-1;;;;;24801:9:0::1;24822:6:::0;24793:28:::1;:36::i;:::-;-1:-1:-1::0;;8240:8:0;:16;;-1:-1:-1;;8240:16:0;;;-1:-1:-1;;;;;;;;;23749:1099:0:o;22636:1105::-;22760:28;22791:36;22802:7;22811;22820:6;22791:10;:36::i;:::-;-1:-1:-1;;;;;22844:19:0;;;;;;:11;:19;;;;;;22760:67;;-1:-1:-1;22844:19:0;;22840:115;;;-1:-1:-1;;;;;22920:15:0;;;;;;:7;:15;;;;;;:23;;22936:7;;22920:23;:::i;:::-;-1:-1:-1;;;;;22902:15:0;;;;;;:7;:15;;;;;:41;22840:115;-1:-1:-1;;;;;22969:22:0;;;;;;:11;:22;;;;;;;;22965:130;;;23066:17;;;;-1:-1:-1;;;;;23047:18:0;;;;;;:7;:18;;;;;;:36;;23066:17;23047:36;:::i;:::-;-1:-1:-1;;;;;23026:18:0;;;;;;:7;:18;;;;;:57;22965:130;23141:9;;-1:-1:-1;;;;;23125:15:0;;23141:9;23125:15;;;:7;:15;;;;;;:25;;23141:9;23125:25;:::i;:::-;-1:-1:-1;;;;;23107:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;23201:17;;;23182:18;;;;;;;;;;:36;;23201:17;23182:36;:::i;:::-;-1:-1:-1;;;;;23161:18:0;;;;;;:7;:18;;;;;;;:57;;;;23242:6;;;:10;;;:24;;;23265:1;23256;:6;;;:10;23242:24;23239:56;;;23268:27;23280:1;:6;;;23288:1;:6;;;23268:11;:27::i;:::-;23324:1;23309;:12;;;:16;:36;;;;23344:1;23329;:12;;;:16;23309:36;23306:198;;;23362:41;23377:1;:12;;;23390:1;:12;;;23362:14;:41::i;:::-;23448:4;-1:-1:-1;;;;;23423:69:0;23432:6;-1:-1:-1;;;;;23423:69:0;;23485:1;:6;;;23470:1;:12;;;23455:1;:12;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;23423:69;;3545:25:1;;;3533:2;3518:18;23423:69:0;;;;;;;23306:198;23532:1;23517;:12;;;:16;:36;;;;23552:1;23537;:12;;;:16;23517:36;23514:83;;;23555:42;23570:1;:12;;;23584:1;:12;;;23555:14;:42::i;:::-;23620:1;23611;:6;;;:10;:24;;;;23634:1;23625;:6;;;:10;23611:24;23608:53;;;23637:24;23646:1;:6;;;23654:1;:6;;;23637:8;:24::i;:::-;23694:9;-1:-1:-1;;;;;23677:46:0;23686:6;-1:-1:-1;;;;;23677:46:0;;23705:1;:17;;;23677:46;;;;3545:25:1;;3533:2;3518:18;;3399:177;23677:46:0;;;;;;;;22747:994;22636:1105;;;;;:::o;19249:540::-;19346:7;;19382;;19299;;;;;19400:279;19424:9;:16;19420:20;;19400:279;;;19490:7;19466;:21;19474:9;19484:1;19474:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19474:12:0;19466:21;;;;;;;;;;;;;:31;;:66;;;19525:7;19501;:21;19509:9;19519:1;19509:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19509:12:0;19501:21;;;;;;;;;;;;;:31;19466:66;19462:97;;;19542:7;;19551;;19534:25;;;;;;;19249:540;;:::o;19462:97::-;19592:7;:21;19600:9;19610:1;19600:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19600:12:0;19592:21;;;;;;;;;;;;;19584:29;;:7;:29;:::i;:::-;19574:39;;19646:7;:21;19654:9;19664:1;19654:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19654:12:0;19646:21;;;;;;;;;;;;;19638:29;;:7;:29;:::i;:::-;19628:39;-1:-1:-1;19442:3:0;;;;:::i;:::-;;;;19400:279;;;;19711:7;;19703;;:15;;;;:::i;:::-;19693:7;:25;19689:56;;;19728:7;;19737;;19720:25;;;;;;19249:540;;:::o;19689:56::-;19764:7;;19773;;-1:-1:-1;19249:540:0;-1:-1:-1;19249:540:0:o;17428:707::-;17515:28;;:::i;:::-;17562:7;17558:86;;17584:17;;;:27;;;17624:8;;17558:86;17654:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17654:17:0;17685:6;17682:55;;;-1:-1:-1;17693:16:0;;;;;;;;17700:9;17693:16;;;;;;;;;;;;;;;;;;;;;;;;;17682:55;;;-1:-1:-1;17725:12:0;;;;;;;;17732:5;17725:12;;;;;;;;;;;;;;;;;;;;;;;;17682:55;17758:18;17779:24;:22;:24::i;:::-;17758:45;;17846:10;17840:4;17831;:8;;;17823:7;:16;;;;:::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;:::-;17814:6;;;:43;17891:14;;;;17912:10;;17906:4;;17883:22;;:7;:22;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;17868:12;;;:55;17957:14;;;;17978:10;;17972:4;;17949:22;;:7;:22;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;17934:12;;;:55;18017:8;;;;18026:4;;18009:16;;:7;:16;:::i;:::-;:21;;;;:::i;:::-;18000:6;;;:30;;;18089:12;;;;18076;;;;18069:6;;;;18061:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:47;;;;:::i;:::-;18041:17;;;:67;-1:-1:-1;;17428:707:0;;;;;:::o;18143:668::-;18269:15;;;;;18384:19;18392:11;18384:7;:19;:::i;:::-;18374:29;;18420:7;18416:69;;-1:-1:-1;18449:7:0;;-1:-1:-1;18467:1:0;;-1:-1:-1;18467:1:0;;-1:-1:-1;18467:1:0;18442:31;;18416:69;18511:11;18504:1;:6;;;:18;;;;:::i;:::-;18497:25;;18559:11;18546:1;:12;;;:24;;;;:::i;:::-;18533:37;;18607:11;18594:1;:12;;;:24;;;;:::i;:::-;18581:37;;18629:12;18651:11;18644:1;:6;;;:18;;;;:::i;:::-;18629:33;-1:-1:-1;18629:33:0;18716:10;18705;18692:12;18700:4;18692:7;:12;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:39;;;;:::i;:::-;18673:58;;18742:61;18143:668;;;;;;;;;;:::o;18823:252::-;18932:12;18963:7;18959:47;;-1:-1:-1;18992:1:0;18985:9;;18959:47;19032:11;19025:1;:6;;;:18;;;;:::i;:::-;19018:25;18823:252;-1:-1:-1;;;;18823:252:0:o;25262:562::-;25412:16;;;25426:1;25412:16;;;;;;;;25388:21;;25412:16;;;;;;;;;;-1:-1:-1;25412:16:0;25388:40;;25457:4;25439;25444:1;25439:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25439:23:0;;;:7;;;;;;;;;;:23;;;;25483:6;;:13;;;-1:-1:-1;;;25483:13:0;;;;:6;;;;;:11;;:13;;;;;25439:7;;25483:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25473:4;25478:1;25473:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25473:23:0;;;:7;;;;;;;;;:23;25541:6;;25509:53;;25526:4;;25541:6;25550:11;25509:8;:53::i;:::-;25601:6;;:215;;-1:-1:-1;;;25601:215:0;;-1:-1:-1;;;;;25601:6:0;;;;:57;;:215;;25673:11;;25601:6;;25743:4;;25770;;25790:15;;25601:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24856:398;24969:6;;24937:53;;24954:4;;-1:-1:-1;;;;;24969:6:0;24978:11;24937:8;:53::i;:::-;25003:6;;-1:-1:-1;;;;;25003:6:0;:22;25033:9;25066:4;25086:11;25003:6;;25198:7;:5;:7::i;:::-;25003:243;;;;;;-1:-1:-1;;;;;;25003:243:0;;;-1:-1:-1;;;;;21544:15:1;;;25003:243:0;;;21526:34:1;21576:18;;;21569:34;;;;21619:18;;;21612:34;;;;21662:18;;;21655:34;21726:15;;;21705:19;;;21698:44;25220:15:0;21758:19:1;;;21751:35;21460:19;;25003:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24856:398;;:::o;5033:317::-;5148:6;5123:21;:31;;5115:73;;;;-1:-1:-1;;;5115:73:0;;22310:2:1;5115:73:0;;;22292:21:1;22349:2;22329:18;;;22322:30;22388:31;22368:18;;;22361:59;22437:18;;5115:73:0;22108:353:1;5115:73:0;5202:12;5220:9;-1:-1:-1;;;;;5220:14:0;5242:6;5220:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5201:52;;;5272:7;5264:78;;;;-1:-1:-1;;;5264:78:0;;22878:2:1;5264:78:0;;;22860:21:1;22917:2;22897:18;;;22890:30;22956:34;22936:18;;;22929:62;-1:-1:-1;;;23007:18:1;;;23000:56;23073:19;;5264:78:0;22676:422:1;14346:123:0;14424:4;14414:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;14439:11:0;:22;;14457:4;;14439:11;:15;;:22;;14457:4;;14439:22;:::i;:::-;;;;-1:-1:-1;;;;14346:123:0:o;14477:284::-;14584:10;14560:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;14630:4:0;14610:26;;;;:11;:26;;;;;;;;14607:101;;;14678:4;14662:22;;;;:7;:22;;;;;:34;;14686:10;;14662:22;:34;;14686:10;;14662:34;:::i;:::-;;;;-1:-1:-1;;14607:101:0;14734:4;14718:22;;;;:7;:22;;;;;:35;;14743:10;;14718:22;:35;;14743:10;;14718:35;:::i;14769:284::-;14876:10;14852:11;:21;;;:34;;;;;;;:::i;15065:242::-;15148:4;15130: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;-1:-1:-1;;;7606:2:1;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::-;9559:7;9625:1;9621;9617:6;9613:14;9610:1;9607:21;9602:1;9595:9;9588:17;9584:45;9581:71;;;9632:18;;:::i;:::-;-1:-1:-1;9672:9:1;;9519:168::o;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;13391:354::-;13593:2;13575:21;;;13632:2;13612:18;;;13605:30;13671:32;13666:2;13651:18;;13644:60;13736:2;13721:18;;13391:354::o;18879:356::-;19081:2;19063:21;;;19100:18;;;19093:30;19159:34;19154:2;19139:18;;19132:62;19226:2;19211:18;;18879:356::o;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://a5f3c1cbcbbc51b36b3e99e1e244439af991d0dc4a9ab99314970d407afa0716
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.