ETH Price: $2,274.07 (-3.80%)
Gas: 6.03 Gwei

Token

Exodia Inu (EXODIA)
 

Overview

Max Total Supply

1,000,000,000,000,000 EXODIA

Holders

279 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
shamantank.eth
Balance
50,024,798,157.908111758 EXODIA

Value
$0.00
0xce42b731ce5087a6814bceb3d311f97d1004e727
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Exodia offers trade, earn, stake, borrow, leverage on Exodia's Spot Trading Decentralised Exchange (ExoDEX). It is an cool anime-themed DEX.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ExodiaInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 8: ExodiaInu.sol
// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.0;



// β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β€ƒβ€ƒβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•—
// β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β€ƒβ€ƒβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘
// β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–‘β•šβ–ˆβ–ˆβ–ˆβ•”β•β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β€ƒβ€ƒβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘
// β–ˆβ–ˆβ•”β•β•β•β–‘β–‘β–‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β€ƒβ€ƒβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘
// β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β€ƒβ€ƒβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β•šβ–ˆβ–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•
// β•šβ•β•β•β•β•β•β•β•šβ•β•β–‘β–‘β•šβ•β•β–‘β•šβ•β•β•β•β•β–‘β•šβ•β•β•β•β•β•β–‘β•šβ•β•β•šβ•β•β–‘β–‘β•šβ•β•β€ƒβ€ƒβ•šβ•β•β•šβ•β•β–‘β–‘β•šβ•β•β•β–‘β•šβ•β•β•β•β•β•β–‘


/* Exodia Inu:
* 1 Quadrillion Supply
*
*Tax at Launch:
*Fees on TX: 10%
*Reflections: 2%
*Liquidity: 3%
*Marketing: 5% 
*
*MaxTX on buy: 0.5% of supply
*MaTX on sell: 0.5% of supply
*maxWallet: 1% of supply
* 
*/

import "./Ownable.sol";
import "./IERC20.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";
import "./Address.sol";

contract ExodiaInu is Context, IERC20, Ownable {

    using Address for address payable;

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

    mapping (address => bool) public isBot;

    address[] private _excluded;

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

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

    uint256 public maxTxAmountBuy = _tTotal/200; // 0.5% of supply (5T tokens)
    uint256 public maxTxAmountSell = _tTotal/200; // 0.5% of supply (5T tokens)
    uint256 public maxWalletAmount = _tTotal/100; // 1% of supply
    
    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 2;


    address payable public marketingAddress;

    mapping (address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "Exodia Inu";
    string private constant _symbol = "EXODIA";

    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal/500;
    bool public blacklistEnabled = true;

    struct feeRatesStruct {
      uint8 rfi;
      uint8 marketing;
      uint8 autolp;
      uint8 toSwap;
    }

    feeRatesStruct public buyRates = feeRatesStruct(
     {
      rfi: 2,    //autoreflection rate, in %
      marketing: 5, //marketing fee in % (in ETH)
      autolp: 3, // autolp rate in %
      toSwap: 8 // marketing + autolp
    });

    feeRatesStruct public sellRates = feeRatesStruct(
    {
      rfi: 2,    //autoreflection rate, in %
      marketing: 5, //marketing fee in % (in ETH)
      autolp: 3, // autolp rate in %
      toSwap: 8 // marketing + autolp
    });

    feeRatesStruct private appliedRates = buyRates;

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 toSwap;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rToSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tToSwap;
    }

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap);
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BlacklistedUser(address botAddress, bool indexed value);
    event MaxWalletAmountUpdated(uint256 amount);
    event ExcludeFromMaxWallet(address account, bool indexed isExcluded);

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

    constructor () {
        
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory())
                            .createPair(address(this), _UniswapV2Router.WETH());
        isAutomatedMarketMakerPair[uniswapPair] = true;
        emit SetAutomatedMarketMakerPair(uniswapPair, true);
        UniswapV2Router = _UniswapV2Router;
        _rOwned[owner()] = _rTotal;
        marketingAddress= payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress]=true;
        _isExcludedFromFee[address(this)]=true;
        
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[marketingAddress]=true;
        _isExcludedFromMaxWallet[address(this)]=true;

        _isExcludedFromMaxWallet[uniswapPair] = true;


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

    //std ERC20:
    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;
    }

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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


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

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) external 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) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function excludeMultipleAccountsFromMaxWallet(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            require(_isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet");
            _isExcludedFromMaxWallet[accounts[i]] = excluded;
            emit ExcludeFromMaxWallet(accounts[i], excluded);
        }
    }
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

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

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

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

    //  @dev receive ETH from UniswapV2Router when swapping
    receive() external payable {}

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

    function _takeToSwap(uint256 rToSwap,uint256 tToSwap) private {
        _rOwned[address(this)] +=rToSwap;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] += tToSwap;
        totFeesPaid.toSwap+=tToSwap;
        
    }

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

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

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount*appliedRates.rfi/100;
        s.tToSwap = tAmount*appliedRates.toSwap/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tToSwap;
        return s;
    }

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

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

        rRfi = s.tRfi*currentRate;
        rToSwap = s.tToSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rToSwap;
        return (rAmount, rTransferAmount, rRfi,rToSwap);
    }

    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 -=_rOwned[_excluded[i]];
            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 {
        if(liqAddedBlockNumber==0 && isAutomatedMarketMakerPair[to] )
        {liqAddedBlockNumber = block.number;
        }

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "ERC20: address blacklisted (bot)");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        if(takeFee)
        {

            if(isAutomatedMarketMakerPair[from])
            {
                if(block.number<liqAddedBlockNumber+blocksToWait)
                {
                isBot[to] = true;
                emit BlacklistedUser(to,true);
                }

                appliedRates = buyRates;
                require(amount<=maxTxAmountBuy, "amount must be <= maxTxAmountBuy");
            }
            else
            {
                appliedRates = sellRates;
                require(amount<=maxTxAmountSell, "amount must be <= maxTxAmountSell");
            }
        }

        if (balanceOf(address(this)) >= numTokensSellToAddToLiquidity  && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled) {
            //add liquidity
            swapAndLiquify(numTokensSellToAddToLiquidity);
        }

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

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

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

        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] += s.rTransferAmount;
        if(takeFee)
        {
        _reflectRfi(s.rRfi, s.tRfi);
        _takeToSwap(s.rToSwap,s.tToSwap);
        emit Transfer(sender, address(this), s.tToSwap);
        }
        require(_isExcludedFromMaxWallet[recipient] || balanceOf(recipient)<= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount");
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 denominator = appliedRates.toSwap*2;
        uint256 tokensToAddLiquidityWith = contractTokenBalance*appliedRates.autolp/denominator;
        uint256 toSwap = contractTokenBalance-tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance -initialBalance;
        uint256 ETHToAddLiquidityWith = deltaBalance*appliedRates.autolp/ (denominator- appliedRates.autolp);
        
        // add liquidity to  Uniswap
        addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        
        marketingAddress.sendValue(address(this).balance); //we give the remaining tax to marketing (5/8 of the toSwap tax)
    }

    function swapTokensForETH(uint256 tokenAmount) private {

        // generate the Pancakeswap pair path of token -> wETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapV2Router.WETH();

        if(allowance(address(this), address(UniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(UniswapV2Router), ~uint256(0));
        }

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

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {

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

    function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner{
        require(isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value");
        isAutomatedMarketMakerPair[_pair] = value;
        if(value)
        {
        _isExcludedFromMaxWallet[_pair] = true;
        emit ExcludeFromMaxWallet(_pair, value);

        }
        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setBuyFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner
    {
     buyRates.rfi=_rfi;
     buyRates.marketing=_marketing;
     buyRates.autolp=_autolp;
     buyRates.toSwap= _marketing+_autolp;
    }

    function setSellFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner
    {
     sellRates.rfi=_rfi;
     sellRates.marketing=_marketing;
     sellRates.autolp=_autolp;
     sellRates.toSwap= _marketing+_autolp;
    }

    function setMaxTransactionAmountsPerK(uint256 _maxTxAmountBuyPer10K, uint256 _maxTxAmountSellPer10K) external onlyOwner
    {
     maxTxAmountBuy = _tTotal*_maxTxAmountBuyPer10K/10000;
     maxTxAmountSell = _tTotal*_maxTxAmountSellPer10K/10000;
    }
    
    function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner
    {
     numTokensSellToAddToLiquidity = amountTokens*10**_decimals;
    }

    function setMarketingAddress(address payable _marketingAddress) external onlyOwner
    {
        marketingAddress = _marketingAddress;
    }

    function manualSwapAndAddToLiq(uint256 amountTokens) external onlyOwner
    {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
       swapAndLiquify(amountTokens*10**_decimals);
    }
    
    // Blacklist Snipebots post Block 0,1
    function blacklistBot(address botAddress, bool _isBot) external onlyOwner
    {   require(blacklistEnabled, "The Blacklist function is renounced"); 
    	require(isBot[botAddress]!=_isBot ,"The address is already set to that value");
        isBot[botAddress] = _isBot;
        emit BlacklistedUser(botAddress,_isBot);
    }

    function setMaxWalletAmount(uint256 _maxAmountWalletPer10K) external onlyOwner {
        maxWalletAmount = _tTotal*_maxAmountWalletPer10K/10000;
        emit MaxWalletAmountUpdated(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value");
        _isExcludedFromMaxWallet[account] = excluded;

        emit ExcludeFromMaxWallet(account, excluded);
    }
    
    function rescueTokens(IERC20 tokenAddress) external onlyOwner{
        IERC20 token = tokenAddress;
        uint256 tokenAmt = token.balanceOf(address(this));
        require(tokenAmt > 0, 'ERC-20 balance is 0');

        token.transfer(msg.sender, tokenAmt);
    }
    // Function to completely disable Blacklisting forever
    function disableBlacklistFunction() external onlyOwner {
      blacklistEnabled=false;
    }

}


File 1 of 8: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 8: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 4 of 8: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 8: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 6 of 8: IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

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

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

File 7 of 8: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 8 of 8: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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);
    }
}


Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"_isBot","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"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":"disableBlacklistFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","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":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPer10K","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPer10K","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountWalletPer10K","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200063b565b620000259066038d7ea4c68000620006fc565b6009819055620000389060001962000738565b62000046906000196200071e565b600a5560c86009546200005a9190620005db565b600b5560c86009546200006e9190620005db565b600c556064600954620000829190620005db565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000af906101f490620005db565b60145560158054600160ff1990911617905560408051608080820183526002808352600560208085018290526003858701819052600860609687018190526016805463ffffffff199081166308030502908117928390558a519889018b52878952948801959095529786019190915293909401929092526017805490921690921790556018805461ffff191661010080850460ff9081169091029190911790921763ffff0000191663ff00000019620100008086048516021617630100000093849004929092169092021790553480156200018957600080fd5b50620001953362000559565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e857600080fd5b505afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002239190620005a9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026c57600080fd5b505afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a79190620005a9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f057600080fd5b505af115801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b9190620005a9565b601380546001600160a01b0319166001600160a01b039283169081178255600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003cc6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b03191633179055600190600490620004166000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010549091168152600490925280822080548416600190811790915530835290822080549093168117909255600690620004866000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620005026000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200054a91815260200190565b60405180910390a3506200077b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620005bc57600080fd5b81516001600160a01b0381168114620005d457600080fd5b9392505050565b600082620005ed57620005ed62000765565b500490565b600181815b80851115620006335781600019048211156200061757620006176200074f565b808516156200062557918102915b93841c9390800290620005f7565b509250929050565b6000620005d460ff8416836000826200065757506001620006f6565b816200066657506000620006f6565b81600181146200067f57600281146200068a57620006aa565b6001915050620006f6565b60ff8411156200069e576200069e6200074f565b50506001821b620006f6565b5060208310610133831016604e8410600b8410161715620006cf575081810a620006f6565b620006db8383620005f2565b8060001904821115620006f257620006f26200074f565b0290505b92915050565b60008160001904831182151516156200071957620007196200074f565b500290565b6000828210156200073357620007336200074f565b500390565b6000826200074a576200074a62000765565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61359c806200078b6000396000f3fe6080604052600436106103385760003560e01c80638236802e116101ab578063bd94545b116100f7578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610a59578063e22b62de14610a9f578063ea2f0b3714610abf578063f2fde38b14610adf57600080fd5b8063d44e586e14610a17578063d6c180bf14610a2d578063d8dcac4f14610a4357600080fd5b8063c49b9a80116100d1578063c49b9a80146109a1578063c816841b146109c1578063d12a7688146109e1578063d2fcc001146109f757600080fd5b8063bd94545b14610947578063bffb691d14610967578063c492f0461461098157600080fd5b80639a7a23d611610164578063a5ece9411161013e578063a5ece941146108d1578063a9059cbb146108f1578063a9d3b3ae14610911578063aa4bde281461093157600080fd5b80639a7a23d6146108615780639ba5e4d514610881578063a457c2d7146108b157600080fd5b80638236802e1461078557806388f82020146107a55780638a0eef5a146107de5780638da5cb5b146107f4578063906e9dd01461081257806395d89b411461083257600080fd5b80633bbac579116102855780636dd3d39f11610223578063715018a6116101fd578063715018a6146106ea57806373cafdc2146106ff5780637949a4031461073557806379eb8d1d1461076557600080fd5b80636dd3d39f1461062e57806370a0823114610667578063713898cd1461068757600080fd5b80634a74bb021161025f5780634a74bb021461059457806350be7cdb146105b557806352390c02146105d55780635342acb4146105f557600080fd5b80633bbac57914610524578063437823ec146105545780634549b0391461057457600080fd5b806323b872dd116102f25780632d838119116102cc5780632d838119146104a8578063313ce567146104c85780633685d419146104e4578063395093511461050457600080fd5b806323b872dd1461045357806327a14fc2146104735780632b0443701461049357600080fd5b8062ae3bf8146103445780630467978014610366578063055add0d1461038657806306fdde03146103c8578063095ea7b31461040457806318160ddd1461043457600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f366004612f8f565b610aff565b005b34801561037257600080fd5b5061036461038136600461315d565b610c7c565b34801561039257600080fd5b506012546103ab9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d457600080fd5b5060408051808201909152600a81526945786f64696120496e7560b01b60208201525b6040516103bf9190613247565b34801561041057600080fd5b5061042461041f366004613071565b610cc2565b60405190151581526020016103bf565b34801561044057600080fd5b506009545b6040519081526020016103bf565b34801561045f57600080fd5b5061042461046e366004613002565b610cd9565b34801561047f57600080fd5b5061036461048e36600461315d565b610d83565b34801561049f57600080fd5b50610364610e04565b3480156104b457600080fd5b506104456104c336600461315d565b610e3a565b3480156104d457600080fd5b50604051600981526020016103bf565b3480156104f057600080fd5b506103646104ff366004612f8f565b610ebe565b34801561051057600080fd5b5061042461051f366004613071565b611075565b34801561053057600080fd5b5061042461053f366004612f8f565b60076020526000908152604090205460ff1681565b34801561056057600080fd5b5061036461056f366004612f8f565b6110b1565b34801561058057600080fd5b5061044561058f36600461318f565b6110ff565b3480156105a057600080fd5b5060135461042490600160a01b900460ff1681565b3480156105c157600080fd5b506103646105d0366004613204565b611189565b3480156105e157600080fd5b506103646105f0366004612f8f565b611211565b34801561060157600080fd5b50610424610610366004612f8f565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063a57600080fd5b50610424610649366004612f8f565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067357600080fd5b50610445610682366004612f8f565b611364565b34801561069357600080fd5b506017546106bd9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016103bf565b3480156106f657600080fd5b506103646113c3565b34801561070b57600080fd5b506016546106bd9060ff808216916101008104821691620100008204811691630100000090041684565b34801561074157600080fd5b50610424610750366004612f8f565b60116020526000908152604090205460ff1681565b34801561077157600080fd5b506103646107803660046131b4565b6113f9565b34801561079157600080fd5b506103646107a0366004613043565b611464565b3480156107b157600080fd5b506104246107c0366004612f8f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107ea57600080fd5b50610445600e5481565b34801561080057600080fd5b506000546001600160a01b03166103ab565b34801561081e57600080fd5b5061036461082d366004612f8f565b6115ce565b34801561083e57600080fd5b5060408051808201909152600681526545584f44494160d01b60208201526103f7565b34801561086d57600080fd5b5061036461087c366004613043565b61161a565b34801561088d57600080fd5b50601954601a5461089c919082565b604080519283526020830191909152016103bf565b3480156108bd57600080fd5b506104246108cc366004613071565b61179e565b3480156108dd57600080fd5b506010546103ab906001600160a01b031681565b3480156108fd57600080fd5b5061042461090c366004613071565b611837565b34801561091d57600080fd5b5061036461092c36600461315d565b611844565b34801561093d57600080fd5b50610445600d5481565b34801561095357600080fd5b5061036461096236600461309d565b61188f565b34801561097357600080fd5b506015546104249060ff1681565b34801561098d57600080fd5b5061036461099c36600461309d565b611a5b565b3480156109ad57600080fd5b506103646109bc366004613123565b611af6565b3480156109cd57600080fd5b506013546103ab906001600160a01b031681565b3480156109ed57600080fd5b5061044560145481565b348015610a0357600080fd5b50610364610a12366004613043565b611b6d565b348015610a2357600080fd5b50610445600c5481565b348015610a3957600080fd5b50610445600b5481565b348015610a4f57600080fd5b50610445600f5481565b348015610a6557600080fd5b50610445610a74366004612fc9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aab57600080fd5b50610364610aba366004613204565b611c7b565b348015610acb57600080fd5b50610364610ada366004612f8f565b611d03565b348015610aeb57600080fd5b50610364610afa366004612f8f565b611d4e565b6000546001600160a01b03163314610b325760405162461bcd60e51b8152600401610b299061329c565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b7657600080fd5b505afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190613176565b905060008111610bf65760405162461bcd60e51b815260206004820152601360248201527204552432d32302062616c616e6365206973203606c1b6044820152606401610b29565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c769190613140565b50505050565b6000546001600160a01b03163314610ca65760405162461bcd60e51b8152600401610b299061329c565b610cb26009600a6133e4565b610cbc908261348f565b60145550565b6000610ccf338484611de6565b5060015b92915050565b6000610ce6848484611f0a565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b29565b610d788533858403611de6565b506001949350505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610b299061329c565b61271081600954610dbe919061348f565b610dc8919061337f565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e2e5760405162461bcd60e51b8152600401610b299061329c565b6015805460ff19169055565b6000600a54821115610ea15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b29565b6000610eab6123e2565b9050610eb7818461337f565b9392505050565b6000546001600160a01b03163314610ee85760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03811660009081526005602052604090205460ff16610f505760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b29565b60005b60085481101561107157816001600160a01b031660088281548110610f7a57610f7a61352d565b6000918252602090912001546001600160a01b0316141561105f5760088054610fa5906001906134cf565b81548110610fb557610fb561352d565b600091825260209091200154600880546001600160a01b039092169183908110610fe157610fe161352d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061103957611039613517565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611069816134e6565b915050610f53565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ccf9185906110ac908690613342565b611de6565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111535760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b29565b8161116f576000611165846001612405565b519150610cd39050565b600061117c846001612405565b602001519150610cd39050565b6000546001600160a01b031633146111b35760405162461bcd60e51b8152600401610b299061329c565b6016805460ff838116620100000262ff0000198683166101000261ffff199094169288169290921792909217161790556111ed818361335a565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b0316331461123b5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03811660009081526005602052604090205460ff16156112a45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b29565b6001600160a01b038116600090815260016020526040902054156112fe576001600160a01b0381166000908152600160205260409020546112e490610e3a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113a157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cd390610e3a565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610b299061329c565b6113f7600061247b565b565b6000546001600160a01b031633146114235760405162461bcd60e51b8152600401610b299061329c565b61271082600954611434919061348f565b61143e919061337f565b600b556009546127109061145390839061348f565b61145d919061337f565b600c555050565b6000546001600160a01b0316331461148e5760405162461bcd60e51b8152600401610b299061329c565b60155460ff166114ec5760405162461bcd60e51b815260206004820152602360248201527f54686520426c61636b6c6973742066756e6374696f6e2069732072656e6f756e60448201526218d95960ea1b6064820152608401610b29565b6001600160a01b03821660009081526007602052604090205460ff161515811515141561156c5760405162461bcd60e51b815260206004820152602860248201527f546865206164647265737320697320616c72656164792073657420746f20746860448201526761742076616c756560c01b6064820152608401610b29565b6001600160a01b038216600081815260076020908152604091829020805460ff1916851515908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2591015b60405180910390a25050565b6000546001600160a01b031633146115f85760405162461bcd60e51b8152600401610b299061329c565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116445760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156116d95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b29565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611762576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118205760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b29565b61182d3385858403611de6565b5060019392505050565b6000610ccf338484611f0a565b6000546001600160a01b0316331461186e5760405162461bcd60e51b8152600401610b299061329c565b61188c61187d6009600a6133e4565b611887908361348f565b6124cb565b50565b6000546001600160a01b031633146118b95760405162461bcd60e51b8152600401610b299061329c565b60005b82811015610c7657811515600660008686858181106118dd576118dd61352d565b90506020020160208101906118f29190612f8f565b6001600160a01b0316815260208101919091526040016000205460ff161515141561198f5760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610b29565b81600660008686858181106119a6576119a661352d565b90506020020160208101906119bb9190612f8f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611a1957611a1961352d565b9050602002016020810190611a2e9190612f8f565b6040516001600160a01b03909116815260200160405180910390a280611a53816134e6565b9150506118bc565b6000546001600160a01b03163314611a855760405162461bcd60e51b8152600401610b299061329c565b60005b82811015610c76578160046000868685818110611aa757611aa761352d565b9050602002016020810190611abc9190612f8f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611aee816134e6565b915050611a88565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610b299061329c565b60138054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df990831515815260200190565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611c215760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b29565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b291016115c2565b6000546001600160a01b03163314611ca55760405162461bcd60e51b8152600401610b299061329c565b6017805460ff838116620100000262ff0000198683166101000261ffff19909416928816929092179290921716179055611cdf818361335a565b6017805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611d785760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b038116611ddd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b29565b61188c8161247b565b6001600160a01b038316611e485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b29565b6001600160a01b038216611ea95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b29565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e54158015611f3257506001600160a01b03821660009081526011602052604090205460ff165b15611f3c5743600e555b6001600160a01b038316611fa05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b29565b6001600160a01b0382166120025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b29565b6001600160a01b03831660009081526007602052604090205460ff161561206b5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610b29565b600081116120cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b29565b6120d683611364565b81111561213f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b29565b6001600160a01b03831660009081526004602052604081205460ff168061217e57506001600160a01b03831660009081526004602052604090205460ff165b159050801561236f576001600160a01b03841660009081526011602052604090205460ff16156122c357600f54600e546121b89190613342565b43101561221c576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600b548211156122be5760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b29565b61236f565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600c5482111561236f5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b29565b60145461237b30611364565b1015801561238c575060125460ff16155b80156123b157506001600160a01b03841660009081526011602052604090205460ff16155b80156123c65750601354600160a01b900460ff165b156123d6576123d66014546124cb565b610c76848484846125b5565b60008060006123ef612833565b90925090506123fe818361337f565b9250505090565b6124456040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61244f83836129b6565b905061246481848461245f6123e2565b612a78565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff191660011790556018546000906124f3906301000000900460ff1660026134ae565b60185460ff918216925060009183916125149162010000909104168561348f565b61251e919061337f565b9050600061252c82856134cf565b90504761253882612ae3565b600061254482476134cf565b6018549091506000906125609062010000900460ff16876134cf565b6018546125769062010000900460ff168461348f565b612580919061337f565b905061258c8582612ca5565b6010546125a2906001600160a01b031647612db0565b50506012805460ff191690555050505050565b60006125c18383612405565b6001600160a01b03861660009081526005602052604090205490915060ff1615612613576001600160a01b0385166000908152600260205260408120805485929061260d9084906134cf565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156126675760808101516001600160a01b03851660009081526002602052604081208054909190612661908490613342565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906126919084906134cf565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916126c5908490613342565b90915550508115612746576126e281604001518260a00151612ece565b6126f481606001518260c00151612f03565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161273d91815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806127775750600d5461277485611364565b11155b6127db5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b29565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161282491815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612985578260016000600884815481106128625761286261352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128cd57508160026000600884815481106128a6576128a661352d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128e357600a54600954945094505050509091565b60016000600883815481106128fa576128fa61352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461292990846134cf565b925060026000600883815481106129425761294261352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461297190836134cf565b91508061297d816134e6565b915050612840565b50600954600a54612996919061337f565b8210156129ad57600a546009549350935050509091565b90939092509050565b6129f66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612a075760808101839052610cd3565b601854606490612a1a9060ff168561348f565b612a24919061337f565b60a0820152601854606490612a43906301000000900460ff168561348f565b612a4d919061337f565b60c0820181905260a0820151612a6390856134cf565b612a6d91906134cf565b608082015292915050565b6000808080612a87858861348f565b935085612a9c57508291506000905080612ad8565b848860a00151612aac919061348f565b9150848860c00151612abe919061348f565b905080612acb83866134cf565b612ad591906134cf565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b1857612b1861352d565b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbe9190612fac565b81600181518110612bd157612bd161352d565b6001600160a01b03928316602091820292909201810191909152601254306000908152600383526040808220610100909304909416815291522054821115612c3257601254612c3290309061010090046001600160a01b0316600019611de6565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612c6f9085906000908690309042906004016132d1565b600060405180830381600087803b158015612c8957600080fd5b505af1158015612c9d573d6000803e3d6000fd5b505050505050565b6012546001600160a01b036101009091041663f305d719823085600080612cd46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612d3757600080fd5b505af1158015612d4b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d7091906131d6565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b80471015612e005760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b29565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e4d576040519150601f19603f3d011682016040523d82523d6000602084013e612e52565b606091505b5050905080612ec95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b29565b505050565b81600a6000828254612ee091906134cf565b909155505060198054829190600090612efa908490613342565b90915550505050565b3060009081526001602052604081208054849290612f22908490613342565b90915550503060009081526005602052604090205460ff1615612f64573060009081526002602052604081208054839290612f5e908490613342565b90915550505b8060196001016000828254612efa9190613342565b803560ff81168114612f8a57600080fd5b919050565b600060208284031215612fa157600080fd5b8135610eb781613543565b600060208284031215612fbe57600080fd5b8151610eb781613543565b60008060408385031215612fdc57600080fd5b8235612fe781613543565b91506020830135612ff781613543565b809150509250929050565b60008060006060848603121561301757600080fd5b833561302281613543565b9250602084013561303281613543565b929592945050506040919091013590565b6000806040838503121561305657600080fd5b823561306181613543565b91506020830135612ff781613558565b6000806040838503121561308457600080fd5b823561308f81613543565b946020939093013593505050565b6000806000604084860312156130b257600080fd5b833567ffffffffffffffff808211156130ca57600080fd5b818601915086601f8301126130de57600080fd5b8135818111156130ed57600080fd5b8760208260051b850101111561310257600080fd5b6020928301955093505084013561311881613558565b809150509250925092565b60006020828403121561313557600080fd5b8135610eb781613558565b60006020828403121561315257600080fd5b8151610eb781613558565b60006020828403121561316f57600080fd5b5035919050565b60006020828403121561318857600080fd5b5051919050565b600080604083850312156131a257600080fd5b823591506020830135612ff781613558565b600080604083850312156131c757600080fd5b50508035926020909101359150565b6000806000606084860312156131eb57600080fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121561321957600080fd5b61322284612f79565b925061323060208501612f79565b915061323e60408501612f79565b90509250925092565b600060208083528351808285015260005b8181101561327457858101830151858201604001528201613258565b81811115613286576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133215784516001600160a01b0316835293830193918301916001016132fc565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561335557613355613501565b500190565b600060ff821660ff84168060ff0382111561337757613377613501565b019392505050565b60008261339c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156133dc5781600019048211156133c2576133c2613501565b808516156133cf57918102915b93841c93908002906133a6565b509250929050565b6000610eb760ff8416836000826133fd57506001610cd3565b8161340a57506000610cd3565b8160018114613420576002811461342a57613446565b6001915050610cd3565b60ff84111561343b5761343b613501565b50506001821b610cd3565b5060208310610133831016604e8410600b8410161715613469575081810a610cd3565b61347383836133a1565b806000190482111561348757613487613501565b029392505050565b60008160001904831182151516156134a9576134a9613501565b500290565b600060ff821660ff84168160ff048111821515161561348757613487613501565b6000828210156134e1576134e1613501565b500390565b60006000198214156134fa576134fa613501565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461188c57600080fd5b801515811461188c57600080fdfea264697066735822122049728f8cc89568dd725ac6bff20d0a6ec6363b11f6c1af13f7613542e2b5445764736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103385760003560e01c80638236802e116101ab578063bd94545b116100f7578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610a59578063e22b62de14610a9f578063ea2f0b3714610abf578063f2fde38b14610adf57600080fd5b8063d44e586e14610a17578063d6c180bf14610a2d578063d8dcac4f14610a4357600080fd5b8063c49b9a80116100d1578063c49b9a80146109a1578063c816841b146109c1578063d12a7688146109e1578063d2fcc001146109f757600080fd5b8063bd94545b14610947578063bffb691d14610967578063c492f0461461098157600080fd5b80639a7a23d611610164578063a5ece9411161013e578063a5ece941146108d1578063a9059cbb146108f1578063a9d3b3ae14610911578063aa4bde281461093157600080fd5b80639a7a23d6146108615780639ba5e4d514610881578063a457c2d7146108b157600080fd5b80638236802e1461078557806388f82020146107a55780638a0eef5a146107de5780638da5cb5b146107f4578063906e9dd01461081257806395d89b411461083257600080fd5b80633bbac579116102855780636dd3d39f11610223578063715018a6116101fd578063715018a6146106ea57806373cafdc2146106ff5780637949a4031461073557806379eb8d1d1461076557600080fd5b80636dd3d39f1461062e57806370a0823114610667578063713898cd1461068757600080fd5b80634a74bb021161025f5780634a74bb021461059457806350be7cdb146105b557806352390c02146105d55780635342acb4146105f557600080fd5b80633bbac57914610524578063437823ec146105545780634549b0391461057457600080fd5b806323b872dd116102f25780632d838119116102cc5780632d838119146104a8578063313ce567146104c85780633685d419146104e4578063395093511461050457600080fd5b806323b872dd1461045357806327a14fc2146104735780632b0443701461049357600080fd5b8062ae3bf8146103445780630467978014610366578063055add0d1461038657806306fdde03146103c8578063095ea7b31461040457806318160ddd1461043457600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f366004612f8f565b610aff565b005b34801561037257600080fd5b5061036461038136600461315d565b610c7c565b34801561039257600080fd5b506012546103ab9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d457600080fd5b5060408051808201909152600a81526945786f64696120496e7560b01b60208201525b6040516103bf9190613247565b34801561041057600080fd5b5061042461041f366004613071565b610cc2565b60405190151581526020016103bf565b34801561044057600080fd5b506009545b6040519081526020016103bf565b34801561045f57600080fd5b5061042461046e366004613002565b610cd9565b34801561047f57600080fd5b5061036461048e36600461315d565b610d83565b34801561049f57600080fd5b50610364610e04565b3480156104b457600080fd5b506104456104c336600461315d565b610e3a565b3480156104d457600080fd5b50604051600981526020016103bf565b3480156104f057600080fd5b506103646104ff366004612f8f565b610ebe565b34801561051057600080fd5b5061042461051f366004613071565b611075565b34801561053057600080fd5b5061042461053f366004612f8f565b60076020526000908152604090205460ff1681565b34801561056057600080fd5b5061036461056f366004612f8f565b6110b1565b34801561058057600080fd5b5061044561058f36600461318f565b6110ff565b3480156105a057600080fd5b5060135461042490600160a01b900460ff1681565b3480156105c157600080fd5b506103646105d0366004613204565b611189565b3480156105e157600080fd5b506103646105f0366004612f8f565b611211565b34801561060157600080fd5b50610424610610366004612f8f565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063a57600080fd5b50610424610649366004612f8f565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067357600080fd5b50610445610682366004612f8f565b611364565b34801561069357600080fd5b506017546106bd9060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016103bf565b3480156106f657600080fd5b506103646113c3565b34801561070b57600080fd5b506016546106bd9060ff808216916101008104821691620100008204811691630100000090041684565b34801561074157600080fd5b50610424610750366004612f8f565b60116020526000908152604090205460ff1681565b34801561077157600080fd5b506103646107803660046131b4565b6113f9565b34801561079157600080fd5b506103646107a0366004613043565b611464565b3480156107b157600080fd5b506104246107c0366004612f8f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156107ea57600080fd5b50610445600e5481565b34801561080057600080fd5b506000546001600160a01b03166103ab565b34801561081e57600080fd5b5061036461082d366004612f8f565b6115ce565b34801561083e57600080fd5b5060408051808201909152600681526545584f44494160d01b60208201526103f7565b34801561086d57600080fd5b5061036461087c366004613043565b61161a565b34801561088d57600080fd5b50601954601a5461089c919082565b604080519283526020830191909152016103bf565b3480156108bd57600080fd5b506104246108cc366004613071565b61179e565b3480156108dd57600080fd5b506010546103ab906001600160a01b031681565b3480156108fd57600080fd5b5061042461090c366004613071565b611837565b34801561091d57600080fd5b5061036461092c36600461315d565b611844565b34801561093d57600080fd5b50610445600d5481565b34801561095357600080fd5b5061036461096236600461309d565b61188f565b34801561097357600080fd5b506015546104249060ff1681565b34801561098d57600080fd5b5061036461099c36600461309d565b611a5b565b3480156109ad57600080fd5b506103646109bc366004613123565b611af6565b3480156109cd57600080fd5b506013546103ab906001600160a01b031681565b3480156109ed57600080fd5b5061044560145481565b348015610a0357600080fd5b50610364610a12366004613043565b611b6d565b348015610a2357600080fd5b50610445600c5481565b348015610a3957600080fd5b50610445600b5481565b348015610a4f57600080fd5b50610445600f5481565b348015610a6557600080fd5b50610445610a74366004612fc9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610aab57600080fd5b50610364610aba366004613204565b611c7b565b348015610acb57600080fd5b50610364610ada366004612f8f565b611d03565b348015610aeb57600080fd5b50610364610afa366004612f8f565b611d4e565b6000546001600160a01b03163314610b325760405162461bcd60e51b8152600401610b299061329c565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b7657600080fd5b505afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190613176565b905060008111610bf65760405162461bcd60e51b815260206004820152601360248201527204552432d32302062616c616e6365206973203606c1b6044820152606401610b29565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610c3e57600080fd5b505af1158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c769190613140565b50505050565b6000546001600160a01b03163314610ca65760405162461bcd60e51b8152600401610b299061329c565b610cb26009600a6133e4565b610cbc908261348f565b60145550565b6000610ccf338484611de6565b5060015b92915050565b6000610ce6848484611f0a565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d6b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b29565b610d788533858403611de6565b506001949350505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610b299061329c565b61271081600954610dbe919061348f565b610dc8919061337f565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e2e5760405162461bcd60e51b8152600401610b299061329c565b6015805460ff19169055565b6000600a54821115610ea15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b29565b6000610eab6123e2565b9050610eb7818461337f565b9392505050565b6000546001600160a01b03163314610ee85760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03811660009081526005602052604090205460ff16610f505760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b29565b60005b60085481101561107157816001600160a01b031660088281548110610f7a57610f7a61352d565b6000918252602090912001546001600160a01b0316141561105f5760088054610fa5906001906134cf565b81548110610fb557610fb561352d565b600091825260209091200154600880546001600160a01b039092169183908110610fe157610fe161352d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061103957611039613517565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611069816134e6565b915050610f53565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ccf9185906110ac908690613342565b611de6565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111535760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b29565b8161116f576000611165846001612405565b519150610cd39050565b600061117c846001612405565b602001519150610cd39050565b6000546001600160a01b031633146111b35760405162461bcd60e51b8152600401610b299061329c565b6016805460ff838116620100000262ff0000198683166101000261ffff199094169288169290921792909217161790556111ed818361335a565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b0316331461123b5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03811660009081526005602052604090205460ff16156112a45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b29565b6001600160a01b038116600090815260016020526040902054156112fe576001600160a01b0381166000908152600160205260409020546112e490610e3a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113a157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cd390610e3a565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610b299061329c565b6113f7600061247b565b565b6000546001600160a01b031633146114235760405162461bcd60e51b8152600401610b299061329c565b61271082600954611434919061348f565b61143e919061337f565b600b556009546127109061145390839061348f565b61145d919061337f565b600c555050565b6000546001600160a01b0316331461148e5760405162461bcd60e51b8152600401610b299061329c565b60155460ff166114ec5760405162461bcd60e51b815260206004820152602360248201527f54686520426c61636b6c6973742066756e6374696f6e2069732072656e6f756e60448201526218d95960ea1b6064820152608401610b29565b6001600160a01b03821660009081526007602052604090205460ff161515811515141561156c5760405162461bcd60e51b815260206004820152602860248201527f546865206164647265737320697320616c72656164792073657420746f20746860448201526761742076616c756560c01b6064820152608401610b29565b6001600160a01b038216600081815260076020908152604091829020805460ff1916851515908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2591015b60405180910390a25050565b6000546001600160a01b031633146115f85760405162461bcd60e51b8152600401610b299061329c565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116445760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156116d95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b29565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611762576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156118205760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b29565b61182d3385858403611de6565b5060019392505050565b6000610ccf338484611f0a565b6000546001600160a01b0316331461186e5760405162461bcd60e51b8152600401610b299061329c565b61188c61187d6009600a6133e4565b611887908361348f565b6124cb565b50565b6000546001600160a01b031633146118b95760405162461bcd60e51b8152600401610b299061329c565b60005b82811015610c7657811515600660008686858181106118dd576118dd61352d565b90506020020160208101906118f29190612f8f565b6001600160a01b0316815260208101919091526040016000205460ff161515141561198f5760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610b29565b81600660008686858181106119a6576119a661352d565b90506020020160208101906119bb9190612f8f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611a1957611a1961352d565b9050602002016020810190611a2e9190612f8f565b6040516001600160a01b03909116815260200160405180910390a280611a53816134e6565b9150506118bc565b6000546001600160a01b03163314611a855760405162461bcd60e51b8152600401610b299061329c565b60005b82811015610c76578160046000868685818110611aa757611aa761352d565b9050602002016020810190611abc9190612f8f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611aee816134e6565b915050611a88565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610b299061329c565b60138054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df990831515815260200190565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611c215760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610b29565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b291016115c2565b6000546001600160a01b03163314611ca55760405162461bcd60e51b8152600401610b299061329c565b6017805460ff838116620100000262ff0000198683166101000261ffff19909416928816929092179290921716179055611cdf818361335a565b6017805460ff9290921663010000000263ff00000019909216919091179055505050565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611d785760405162461bcd60e51b8152600401610b299061329c565b6001600160a01b038116611ddd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b29565b61188c8161247b565b6001600160a01b038316611e485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b29565b6001600160a01b038216611ea95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b29565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600e54158015611f3257506001600160a01b03821660009081526011602052604090205460ff165b15611f3c5743600e555b6001600160a01b038316611fa05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b29565b6001600160a01b0382166120025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b29565b6001600160a01b03831660009081526007602052604090205460ff161561206b5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610b29565b600081116120cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b29565b6120d683611364565b81111561213f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b29565b6001600160a01b03831660009081526004602052604081205460ff168061217e57506001600160a01b03831660009081526004602052604090205460ff165b159050801561236f576001600160a01b03841660009081526011602052604090205460ff16156122c357600f54600e546121b89190613342565b43101561221c576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600b548211156122be5760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610b29565b61236f565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000009384900491909116909202919091179055600c5482111561236f5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610b29565b60145461237b30611364565b1015801561238c575060125460ff16155b80156123b157506001600160a01b03841660009081526011602052604090205460ff16155b80156123c65750601354600160a01b900460ff165b156123d6576123d66014546124cb565b610c76848484846125b5565b60008060006123ef612833565b90925090506123fe818361337f565b9250505090565b6124456040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61244f83836129b6565b905061246481848461245f6123e2565b612a78565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff191660011790556018546000906124f3906301000000900460ff1660026134ae565b60185460ff918216925060009183916125149162010000909104168561348f565b61251e919061337f565b9050600061252c82856134cf565b90504761253882612ae3565b600061254482476134cf565b6018549091506000906125609062010000900460ff16876134cf565b6018546125769062010000900460ff168461348f565b612580919061337f565b905061258c8582612ca5565b6010546125a2906001600160a01b031647612db0565b50506012805460ff191690555050505050565b60006125c18383612405565b6001600160a01b03861660009081526005602052604090205490915060ff1615612613576001600160a01b0385166000908152600260205260408120805485929061260d9084906134cf565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156126675760808101516001600160a01b03851660009081526002602052604081208054909190612661908490613342565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906126919084906134cf565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916126c5908490613342565b90915550508115612746576126e281604001518260a00151612ece565b6126f481606001518260c00151612f03565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161273d91815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806127775750600d5461277485611364565b11155b6127db5760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610b29565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161282491815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612985578260016000600884815481106128625761286261352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128cd57508160026000600884815481106128a6576128a661352d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128e357600a54600954945094505050509091565b60016000600883815481106128fa576128fa61352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461292990846134cf565b925060026000600883815481106129425761294261352d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461297190836134cf565b91508061297d816134e6565b915050612840565b50600954600a54612996919061337f565b8210156129ad57600a546009549350935050509091565b90939092509050565b6129f66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612a075760808101839052610cd3565b601854606490612a1a9060ff168561348f565b612a24919061337f565b60a0820152601854606490612a43906301000000900460ff168561348f565b612a4d919061337f565b60c0820181905260a0820151612a6390856134cf565b612a6d91906134cf565b608082015292915050565b6000808080612a87858861348f565b935085612a9c57508291506000905080612ad8565b848860a00151612aac919061348f565b9150848860c00151612abe919061348f565b905080612acb83866134cf565b612ad591906134cf565b92505b945094509450949050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b1857612b1861352d565b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbe9190612fac565b81600181518110612bd157612bd161352d565b6001600160a01b03928316602091820292909201810191909152601254306000908152600383526040808220610100909304909416815291522054821115612c3257601254612c3290309061010090046001600160a01b0316600019611de6565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612c6f9085906000908690309042906004016132d1565b600060405180830381600087803b158015612c8957600080fd5b505af1158015612c9d573d6000803e3d6000fd5b505050505050565b6012546001600160a01b036101009091041663f305d719823085600080612cd46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612d3757600080fd5b505af1158015612d4b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d7091906131d6565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b80471015612e005760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b29565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e4d576040519150601f19603f3d011682016040523d82523d6000602084013e612e52565b606091505b5050905080612ec95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b29565b505050565b81600a6000828254612ee091906134cf565b909155505060198054829190600090612efa908490613342565b90915550505050565b3060009081526001602052604081208054849290612f22908490613342565b90915550503060009081526005602052604090205460ff1615612f64573060009081526002602052604081208054839290612f5e908490613342565b90915550505b8060196001016000828254612efa9190613342565b803560ff81168114612f8a57600080fd5b919050565b600060208284031215612fa157600080fd5b8135610eb781613543565b600060208284031215612fbe57600080fd5b8151610eb781613543565b60008060408385031215612fdc57600080fd5b8235612fe781613543565b91506020830135612ff781613543565b809150509250929050565b60008060006060848603121561301757600080fd5b833561302281613543565b9250602084013561303281613543565b929592945050506040919091013590565b6000806040838503121561305657600080fd5b823561306181613543565b91506020830135612ff781613558565b6000806040838503121561308457600080fd5b823561308f81613543565b946020939093013593505050565b6000806000604084860312156130b257600080fd5b833567ffffffffffffffff808211156130ca57600080fd5b818601915086601f8301126130de57600080fd5b8135818111156130ed57600080fd5b8760208260051b850101111561310257600080fd5b6020928301955093505084013561311881613558565b809150509250925092565b60006020828403121561313557600080fd5b8135610eb781613558565b60006020828403121561315257600080fd5b8151610eb781613558565b60006020828403121561316f57600080fd5b5035919050565b60006020828403121561318857600080fd5b5051919050565b600080604083850312156131a257600080fd5b823591506020830135612ff781613558565b600080604083850312156131c757600080fd5b50508035926020909101359150565b6000806000606084860312156131eb57600080fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121561321957600080fd5b61322284612f79565b925061323060208501612f79565b915061323e60408501612f79565b90509250925092565b600060208083528351808285015260005b8181101561327457858101830151858201604001528201613258565b81811115613286576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133215784516001600160a01b0316835293830193918301916001016132fc565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561335557613355613501565b500190565b600060ff821660ff84168060ff0382111561337757613377613501565b019392505050565b60008261339c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156133dc5781600019048211156133c2576133c2613501565b808516156133cf57918102915b93841c93908002906133a6565b509250929050565b6000610eb760ff8416836000826133fd57506001610cd3565b8161340a57506000610cd3565b8160018114613420576002811461342a57613446565b6001915050610cd3565b60ff84111561343b5761343b613501565b50506001821b610cd3565b5060208310610133831016604e8410600b8410161715613469575081810a610cd3565b61347383836133a1565b806000190482111561348757613487613501565b029392505050565b60008160001904831182151516156134a9576134a9613501565b500290565b600060ff821660ff84168160ff048111821515161561348757613487613501565b6000828210156134e1576134e1613501565b500390565b60006000198214156134fa576134fa613501565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461188c57600080fd5b801515811461188c57600080fdfea264697066735822122049728f8cc89568dd725ac6bff20d0a6ec6363b11f6c1af13f7613542e2b5445764736f6c63430008070033

Deployed Bytecode Sourcemap

1635:21767:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:265;;;;;;;;;;-1:-1:-1;22978:265:2;;;;;:::i;:::-;;:::i;:::-;;19307:153;;;;;;;;;;-1:-1:-1;19307:153:2;;;;;:::i;:::-;;:::i;2932:41::-;;;;;;;;;;-1:-1:-1;2932:41:2;;;;;;;-1:-1:-1;;;;;2932:41:2;;;;;;-1:-1:-1;;;;;5975:32:8;;;5957:51;;5945:2;5930:18;2932:41:2;;;;;;;;5724:81;;;;;;;;;;-1:-1:-1;5793:5:2;;;;;;;;;;;;-1:-1:-1;;;5793:5:2;;;;5724:81;;;;;;;:::i;6626:158::-;;;;;;;;;;-1:-1:-1;6626:158:2;;;;;:::i;:::-;;:::i;:::-;;;7299:14:8;;7292:22;7274:41;;7262:2;7247:18;6626:158:2;7134:187:8;6009:93:2;;;;;;;;;;-1:-1:-1;6088:7:2;;6009:93;;;18621:25:8;;;18609:2;18594:18;6009:93:2;18475:177:8;6790:440:2;;;;;;;;;;-1:-1:-1;6790:440:2;;;;;:::i;:::-;;:::i;22443:204::-;;;;;;;;;;-1:-1:-1;22443:204:2;;;;;:::i;:::-;;:::i;23307:92::-;;;;;;;;;;;;;:::i;8441:244::-;;;;;;;;;;-1:-1:-1;8441:244:2;;;;;:::i;:::-;;:::i;5900:81::-;;;;;;;;;;-1:-1:-1;5900:81:2;;2192:1;20037:36:8;;20025:2;20010:18;5900:81:2;19895:184:8;9090:464:2;;;;;;;;;;-1:-1:-1;9090:464:2;;;;;:::i;:::-;;:::i;7236:210::-;;;;;;;;;;-1:-1:-1;7236:210:2;;;;;:::i;:::-;;:::i;2078:38::-;;;;;;;;;;-1:-1:-1;2078:38:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;9561:111;;;;;;;;;;-1:-1:-1;9561:111:2;;;;;:::i;:::-;;:::i;7987:447::-;;;;;;;;;;-1:-1:-1;7987:447:2;;;;;:::i;:::-;;:::i;3011:40::-;;;;;;;;;;-1:-1:-1;3011:40:2;;;;-1:-1:-1;;;3011:40:2;;;;;;18579:225;;;;;;;;;;-1:-1:-1;18579:225:2;;;;;:::i;:::-;;:::i;8756:328::-;;;;;;;;;;-1:-1:-1;8756:328:2;;;;;:::i;:::-;;:::i;10485:121::-;;;;;;;;;;-1:-1:-1;10485:121:2;;;;;:::i;:::-;-1:-1:-1;;;;;10572:27:2;10549:4;10572:27;;;:18;:27;;;;;;;;;10485:121;10611:133;;;;;;;;;;-1:-1:-1;10611:133:2;;;;;:::i;:::-;-1:-1:-1;;;;;10704:33:2;10681:4;10704:33;;;:24;:33;;;;;;;;;10611:133;6108:195;;;;;;;;;;-1:-1:-1;6108:195:2;;;;;:::i;:::-;;:::i;3517:232::-;;;;;;;;;;-1:-1:-1;3517:232:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20329:4:8;20317:17;;;20299:36;;20371:17;;;20366:2;20351:18;;20344:45;20425:17;;;20405:18;;;20398:45;;;;20479:17;;;20474:2;20459:18;;20452:45;20286:3;20271:19;3517:232:2;20084:419:8;1598:92:7;;;;;;;;;;;;;:::i;3278:232:2:-;;;;;;;;;;-1:-1:-1;3278:232:2;;;;;;;;;;;;;;;;;;;;;;;;;;;2731:59;;;;;;;;;;-1:-1:-1;2731:59:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;19046:251;;;;;;;;;;-1:-1:-1;19046:251:2;;;;;:::i;:::-;;:::i;22113:324::-;;;;;;;;;;-1:-1:-1;22113:324:2;;;;;:::i;:::-;;:::i;7863:118::-;;;;;;;;;;-1:-1:-1;7863:118:2;;;;;:::i;:::-;-1:-1:-1;;;;;7954:20:2;7931:4;7954:20;;;:11;:20;;;;;;;;;7863:118;2606:34;;;;;;;;;;;;;;;;966:85:7;;;;;;;;;;-1:-1:-1;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;966:85;;19466:140:2;;;;;;;;;;-1:-1:-1;19466:140:2;;;;;:::i;:::-;;:::i;5810:85::-;;;;;;;;;;-1:-1:-1;5881:7:2;;;;;;;;;;;;-1:-1:-1;;;5881:7:2;;;;5810:85;;18120:453;;;;;;;;;;-1:-1:-1;18120:453:2;;;;;:::i;:::-;;:::i;3890:36::-;;;;;;;;;;-1:-1:-1;3890:36:2;;;;;;;;;;;;;19816:25:8;;;19872:2;19857:18;;19850:34;;;;19789:18;3890:36:2;19642:248:8;7452:405:2;;;;;;;;;;-1:-1:-1;7452:405:2;;;;;:::i;:::-;;:::i;2685:39::-;;;;;;;;;;-1:-1:-1;2685:39:2;;;;-1:-1:-1;;;;;2685:39:2;;;6309:164;;;;;;;;;;-1:-1:-1;6309:164:2;;;;;:::i;:::-;;:::i;19612:2449::-;;;;;;;;;;-1:-1:-1;19612:2449:2;;;;;:::i;:::-;;:::i;2517:44::-;;;;;;;;;;;;;;;;9682:444;;;;;;;;;;-1:-1:-1;9682:444:2;;;;;:::i;:::-;;:::i;3121:35::-;;;;;;;;;;-1:-1:-1;3121:35:2;;;;;;;;10131:232;;;;;;;;;;-1:-1:-1;10131:232:2;;;;;:::i;:::-;;:::i;10750:164::-;;;;;;;;;;-1:-1:-1;10750:164:2;;;;;:::i;:::-;;:::i;2979:26::-;;;;;;;;;;-1:-1:-1;2979:26:2;;;;-1:-1:-1;;;;;2979:26:2;;;3057:58;;;;;;;;;;;;;;;;22653:315;;;;;;;;;;-1:-1:-1;22653:315:2;;;;;:::i;:::-;;:::i;2437:44::-;;;;;;;;;;;;;;;;2358:43;;;;;;;;;;;;;;;;2646:31;;;;;;;;;;;;;;;;6479:141;;;;;;;;;;-1:-1:-1;6479:141:2;;;;;:::i;:::-;-1:-1:-1;;;;;6586:18:2;;;6560:7;6586:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6479:141;18810:230;;;;;;;;;;-1:-1:-1;18810:230:2;;;;;:::i;:::-;;:::i;10369:110::-;;;;;;;;;;-1:-1:-1;10369:110:2;;;;;:::i;:::-;;:::i;1839:189:7:-;;;;;;;;;;-1:-1:-1;1839:189:7;;;;;:::i;:::-;;:::i;22978:265:2:-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;;;;;;;;;23105:30:2::1;::::0;-1:-1:-1;;;23105:30:2;;23129:4:::1;23105:30;::::0;::::1;5957:51:8::0;23064:12:2;;23049::::1;::::0;-1:-1:-1;;;;;23105:15:2;::::1;::::0;::::1;::::0;5930:18:8;;23105:30:2::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23086:49;;23164:1;23153:8;:12;23145:44;;;::::0;-1:-1:-1;;;23145:44:2;;15112:2:8;23145:44:2::1;::::0;::::1;15094:21:8::0;15151:2;15131:18;;;15124:30;-1:-1:-1;;;15170:18:8;;;15163:49;15229:18;;23145:44:2::1;14910:343:8::0;23145:44:2::1;23200:36;::::0;-1:-1:-1;;;23200:36:2;;23215:10:::1;23200:36;::::0;::::1;6417:51:8::0;6484:18;;;6477:34;;;-1:-1:-1;;;;;23200:14:2;::::1;::::0;::::1;::::0;6390:18:8;;23200:36:2::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23039:204;;22978:265:::0;:::o;19307:153::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;19440:13:2::1;2192:1;19440:2;:13;:::i;:::-;19427:26;::::0;:12;:26:::1;:::i;:::-;19395:29;:58:::0;-1:-1:-1;19307:153:2:o;6626:158::-;6701:4;6717:39;665:10:1;6740:7:2;6749:6;6717:8;:39::i;:::-;-1:-1:-1;6773:4:2;6626:158;;;;;:::o;6790:440::-;6888:4;6904:36;6914:6;6922:9;6933:6;6904:9;:36::i;:::-;-1:-1:-1;;;;;6978:19:2;;6951:24;6978:19;;;:11;:19;;;;;;;;665:10:1;6978:33:2;;;;;;;;7029:26;;;;7021:79;;;;-1:-1:-1;;;7021:79:2;;15864:2:8;7021:79:2;;;15846:21:8;15903:2;15883:18;;;15876:30;15942:34;15922:18;;;15915:62;-1:-1:-1;;;15993:18:8;;;15986:38;16041:19;;7021:79:2;15662:404:8;7021:79:2;7134:57;7143:6;665:10:1;7184:6:2;7165:16;:25;7134:8;:57::i;:::-;-1:-1:-1;7219:4:2;;6790:440;-1:-1:-1;;;;6790:440:2:o;22443:204::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;22581:5:2::1;22558:22;22550:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;22532:15;:54:::0;;;22601:39:::1;::::0;18621:25:8;;;22601:39:2::1;::::0;18609:2:8;18594:18;22601:39:2::1;;;;;;;;22443:204:::0;:::o;23307:92::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;23370:16:2::1;:22:::0;;-1:-1:-1;;23370:22:2::1;::::0;;23307:92::o;8441:244::-;8507:7;8545;;8534;:18;;8526:73;;;;-1:-1:-1;;;8526:73:2;;9661:2:8;8526:73:2;;;9643:21:8;9700:2;9680:18;;;9673:30;9739:34;9719:18;;;9712:62;-1:-1:-1;;;9790:18:8;;;9783:40;9840:19;;8526:73:2;9459:406:8;8526:73:2;8609:19;8632:10;:8;:10::i;:::-;8609:33;-1:-1:-1;8659:19:2;8609:33;8659:7;:19;:::i;:::-;8652:26;8441:244;-1:-1:-1;;;8441:244:2:o;9090:464::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9171:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;9163:56;;;::::0;-1:-1:-1;;;9163:56:2;;13681:2:8;9163:56:2::1;::::0;::::1;13663:21:8::0;13720:2;13700:18;;;13693:30;13759:25;13739:18;;;13732:53;13802:18;;9163:56:2::1;13479:347:8::0;9163:56:2::1;9234:9;9229:319;9253:9;:16:::0;9249:20;::::1;9229:319;;;9310:7;-1:-1:-1::0;;;;;9294:23:2::1;:9;9304:1;9294:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;9294:12:2::1;:23;9290:248;;;9352:9;9362:16:::0;;:20:::1;::::0;9381:1:::1;::::0;9362:20:::1;:::i;:::-;9352:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;9337:9:::1;:12:::0;;-1:-1:-1;;;;;9352:31:2;;::::1;::::0;9347:1;;9337:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;9337:46:2::1;-1:-1:-1::0;;;;;9337:46:2;;::::1;;::::0;;9401:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;9439:11:::1;:20:::0;;;;:28;;-1:-1:-1;;9439:28:2::1;::::0;;9485:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;9485:15:2;;;;;-1:-1:-1;;;;;;9485:15:2::1;::::0;;;;;9229:319:::1;9090:464:::0;:::o;9290:248::-:1;9271:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9229:319;;;;9090:464:::0;:::o;7236:210::-;665:10:1;7324:4:2;7372:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7372:34:2;;;;;;;;;;7324:4;;7340:78;;7363:7;;7372:45;;7407:10;;7372:45;:::i;:::-;7340:8;:78::i;9561:111::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9631:27:2::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;9631:34:2::1;9661:4;9631:34;::::0;;9561:111::o;7987:447::-;8077:7;8115;;8104;:18;;8096:62;;;;-1:-1:-1;;;8096:62:2;;14752:2:8;8096:62:2;;;14734:21:8;14791:2;14771:18;;;14764:30;14830:33;14810:18;;;14803:61;14881:18;;8096:62:2;14550:355:8;8096:62:2;8173:17;8168:260;;8206:28;8237:25;8248:7;8257:4;8237:10;:25::i;:::-;8283:9;;-1:-1:-1;8276:16:2;;-1:-1:-1;8276:16:2;8168:260;8323:28;8354:25;8365:7;8374:4;8354:10;:25::i;:::-;8400:17;;;;-1:-1:-1;8393:24:2;;-1:-1:-1;8393:24:2;18579:225;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;18672:8:2::1;:17:::0;;::::1;18732:23:::0;;::::1;::::0;::::1;-1:-1:-1::0;;18696:29:2;;::::1;18672:17;18696:29;-1:-1:-1::0;;18696:29:2;;;18672:17;;::::1;18696:29:::0;;;;;;;::::1;18732:23;;::::0;;18779:18:::1;18748:7:::0;18715:10;18779:18:::1;:::i;:::-;18762:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18762:35:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18579:225:2:o;8756:328::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8840:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8839:21;8831:61;;;::::0;-1:-1:-1;;;8831:61:2;;12070:2:8;8831:61:2::1;::::0;::::1;12052:21:8::0;12109:2;12089:18;;;12082:30;12148:29;12128:18;;;12121:57;12195:18;;8831:61:2::1;11868:351:8::0;8831:61:2::1;-1:-1:-1::0;;;;;8905:16:2;::::1;8924:1;8905:16:::0;;;:7:::1;:16;::::0;;;;;:20;8902:106:::1;;-1:-1:-1::0;;;;;8980:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8960:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;8941:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;8902:106:::1;-1:-1:-1::0;;;;;9017:20:2::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;9017:27:2::1;9040:4;9017:27:::0;;::::1;::::0;;;9054:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;9054:23:2::1;::::0;;::::1;::::0;;8756:328::o;6108:195::-;-1:-1:-1;;;;;6197:20:2;;6174:7;6197:20;;;:11;:20;;;;;;;;6193:49;;;-1:-1:-1;;;;;;6226:16:2;;;;;:7;:16;;;;;;;6108:195::o;6193:49::-;-1:-1:-1;;;;;6279:16:2;;;;;;:7;:16;;;;;;6259:37;;:19;:37::i;1598:92:7:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;19046:251:2:-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;19224:5:2::1;19202:21;19194:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;19177:14;:52:::0;19254:7:::1;::::0;19285:5:::1;::::0;19254:30:::1;::::0;19262:22;;19254:30:::1;:::i;:::-;:36;;;;:::i;:::-;19236:15;:54:::0;-1:-1:-1;;19046:251:2:o;22113:324::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;22203:16:2::1;::::0;::::1;;22195:64;;;::::0;-1:-1:-1;;;22195:64:2;;15460:2:8;22195:64:2::1;::::0;::::1;15442:21:8::0;15499:2;15479:18;;;15472:30;15538:34;15518:18;;;15511:62;-1:-1:-1;;;15589:18:8;;;15582:33;15632:19;;22195:64:2::1;15258:399:8::0;22195:64:2::1;-1:-1:-1::0;;;;;22275:17:2;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;:25;;::::0;::::1;;;;22267:78;;;::::0;-1:-1:-1;;;22267:78:2;;13272:2:8;22267:78:2::1;::::0;::::1;13254:21:8::0;13311:2;13291:18;;;13284:30;13350:34;13330:18;;;13323:62;-1:-1:-1;;;13401:18:8;;;13394:38;13449:19;;22267:78:2::1;13070:404:8::0;22267:78:2::1;-1:-1:-1::0;;;;;22355:17:2;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:26;;-1:-1:-1;;22355:26:2::1;::::0;::::1;;::::0;;::::1;::::0;;;22396:34;;5957:51:8;;;22355:26:2;;22396:34:::1;::::0;5930:18:8;22396:34:2::1;;;;;;;;22113:324:::0;;:::o;19466:140::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;19563:16:2::1;:36:::0;;-1:-1:-1;;;;;;19563:36:2::1;-1:-1:-1::0;;;;;19563:36:2;;;::::1;::::0;;;::::1;::::0;;19466:140::o;18120:453::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;18220:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;18212:111;;;::::0;-1:-1:-1;;;18212:111:2;;10882:2:8;18212:111:2::1;::::0;::::1;10864:21:8::0;10921:2;10901:18;;;10894:30;10960:34;10940:18;;;10933:62;11031:26;11011:18;;;11004:54;11075:19;;18212:111:2::1;10680:420:8::0;18212:111:2::1;-1:-1:-1::0;;;;;18333:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;18333:41:2::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18384:127:::1;;-1:-1:-1::0;;;;;18412:31:2;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;18412:38:2::1;18446:4;18412:38;::::0;;18465:34;;5957:51:8;;;18465:34:2;::::1;;::::0;::::1;::::0;5930:18:8;18465:34:2::1;;;;;;;18384:127;18525:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;18525:41:2;::::1;::::0;::::1;::::0;;;::::1;18120:453:::0;;:::o;7452:405::-;665:10:1;7545:4:2;7588:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7588:34:2;;;;;;;;;;7640:35;;;;7632:85;;;;-1:-1:-1;;;7632:85:2;;18271:2:8;7632:85:2;;;18253:21:8;18310:2;18290:18;;;18283:30;18349:34;18329:18;;;18322:62;-1:-1:-1;;;18400:18:8;;;18393:35;18445:19;;7632:85:2;18069:401:8;7632:85:2;7751:67;665:10:1;7774:7:2;7802:15;7783:16;:34;7751:8;:67::i;:::-;-1:-1:-1;7846:4:2;;7452:405;-1:-1:-1;;;7452:405:2:o;6309:164::-;6387:4;6403:42;665:10:1;6427:9:2;6438:6;6403:9;:42::i;19612:2449::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;22012:42:2::1;22040:13;2192:1;22040:2;:13;:::i;:::-;22027:26;::::0;:12;:26:::1;:::i;:::-;22012:14;:42::i;:::-;19612:2449:::0;:::o;9682:444::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;9803:9:2::1;9799:321;9818:19:::0;;::::1;9799:321;;;9907:8;9866:49;;:24;:37;9891:8;;9900:1;9891:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9866:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9866:37:2;;::::1;;:49;;;;9858:127;;;::::0;-1:-1:-1;;;9858:127:2;;8769:2:8;9858:127:2::1;::::0;::::1;8751:21:8::0;8808:2;8788:18;;;8781:30;8847:34;8827:18;;;8820:62;8918:34;8898:18;;;8891:62;-1:-1:-1;;;8969:19:8;;;8962:32;9011:19;;9858:127:2::1;8567:469:8::0;9858:127:2::1;10039:8;9999:24;:37;10024:8;;10033:1;10024:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9999:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9999:37:2;:48;;-1:-1:-1;;9999:48:2::1;::::0;::::1;;::::0;;;::::1;::::0;;10066:43;::::1;;;10087:8:::0;;10096:1;10087:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10066:43;::::0;-1:-1:-1;;;;;5975:32:8;;;5957:51;;5945:2;5930:18;10066:43:2::1;;;;;;;9839:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9799:321;;10131:232:::0;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;10249:9:2::1;10245:112;10264:19:::0;;::::1;10245:112;;;10338:8;10304:18;:31;10323:8;;10332:1;10323:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10304:31:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;10304:31:2;:42;;-1:-1:-1;;10304:42:2::1;::::0;::::1;;::::0;;;::::1;::::0;;10285:3;::::1;::::0;::::1;:::i;:::-;;;;10245:112;;10750:164:::0;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;10824:21:2::1;:32:::0;;;::::1;;-1:-1:-1::0;;;10824:32:2::1;-1:-1:-1::0;;;;10824:32:2;;::::1;;::::0;;10869:38:::1;::::0;::::1;::::0;::::1;::::0;10848:8;7299:14:8;7292:22;7274:41;;7262:2;7247:18;;7134:187;22653:315:2;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;22752:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;22744:108;;;::::0;-1:-1:-1;;;22744:108:2;;12426:2:8;22744:108:2::1;::::0;::::1;12408:21:8::0;12465:2;12445:18;;;12438:30;12504:34;12484:18;;;12477:62;-1:-1:-1;;;12555:18:8;;;12548:48;12613:19;;22744:108:2::1;12224:414:8::0;22744:108:2::1;-1:-1:-1::0;;;;;22862:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;22862:44:2::1;::::0;::::1;;::::0;;::::1;::::0;;;22922:39;;5957:51:8;;;22862:44:2;;22922:39:::1;::::0;5930:18:8;22922:39:2::1;5811:203:8::0;18810:230:2;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;18904:9:2::1;:18:::0;;::::1;18966:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;18929:30:2;;::::1;18904:18;18929:30;-1:-1:-1::0;;18929:30:2;;;18904:18;;::::1;18929:30:::0;;;;;;;::::1;18966:24;;::::0;;19015:18:::1;18983:7:::0;18949:10;19015:18:::1;:::i;:::-;18997:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18997:36:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18810:230:2:o;10369:110::-;1012:7:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;10437:27:2::1;10467:5;10437:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;10437:35:2::1;::::0;;10369:110::o;1839:189:7:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:7;665:10:1;1178:23:7;1170:68;;;;-1:-1:-1;;;1170:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:7;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:7;;10072:2:8;1919:73:7::1;::::0;::::1;10054:21:8::0;10111:2;10091:18;;;10084:30;10150:34;10130:18;;;10123:62;-1:-1:-1;;;10201:18:8;;;10194:36;10247:19;;1919:73:7::1;9870:402:8::0;1919:73:7::1;2002:19;2012:8;2002:9;:19::i;13310:330:2:-:0;-1:-1:-1;;;;;13402:19:2;;13394:68;;;;-1:-1:-1;;;13394:68:2;;17866:2:8;13394:68:2;;;17848:21:8;17905:2;17885:18;;;17878:30;17944:34;17924:18;;;17917:62;-1:-1:-1;;;17995:18:8;;;17988:34;18039:19;;13394:68:2;17664:400:8;13394:68:2;-1:-1:-1;;;;;13480:21:2;;13472:68;;;;-1:-1:-1;;;13472:68:2;;10479:2:8;13472:68:2;;;10461:21:8;10518:2;10498:18;;;10491:30;10557:34;10537:18;;;10530:62;-1:-1:-1;;;10608:18:8;;;10601:32;10650:19;;13472:68:2;10277:398:8;13472:68:2;-1:-1:-1;;;;;13550:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13601:32;;18621:25:8;;;13601:32:2;;18594:18:8;13601:32:2;;;;;;;13310:330;;;:::o;13646:1579::-;13728:19;;:22;:56;;;;-1:-1:-1;;;;;;13754:30:2;;;;;;:26;:30;;;;;;;;13728:56;13725:116;;;13818:12;13796:19;:34;13725:116;-1:-1:-1;;;;;13859:18:2;;13851:68;;;;-1:-1:-1;;;13851:68:2;;17460:2:8;13851:68:2;;;17442:21:8;17499:2;17479:18;;;17472:30;17538:34;17518:18;;;17511:62;-1:-1:-1;;;17589:18:8;;;17582:35;17634:19;;13851:68:2;17258:401:8;13851:68:2;-1:-1:-1;;;;;13937:16:2;;13929:64;;;;-1:-1:-1;;;13929:64:2;;8365:2:8;13929:64:2;;;8347:21:8;8404:2;8384:18;;;8377:30;8443:34;8423:18;;;8416:62;-1:-1:-1;;;8494:18:8;;;8487:33;8537:19;;13929:64:2;8163:399:8;13929:64:2;-1:-1:-1;;;;;14012:11:2;;;;;;:5;:11;;;;;;;;14011:12;14003:57;;;;-1:-1:-1;;;14003:57:2;;14391:2:8;14003:57:2;;;14373:21:8;;;14410:18;;;14403:30;14469:34;14449:18;;;14442:62;14521:18;;14003:57:2;14189:356:8;14003:57:2;14087:1;14078:6;:10;14070:64;;;;-1:-1:-1;;;14070:64:2;;16634:2:8;14070:64:2;;;16616:21:8;16673:2;16653:18;;;16646:30;16712:34;16692:18;;;16685:62;-1:-1:-1;;;16763:18:8;;;16756:39;16812:19;;14070:64:2;16432:405:8;14070:64:2;14162:15;14172:4;14162:9;:15::i;:::-;14152:6;:25;;14144:86;;;;-1:-1:-1;;;14144:86:2;;9243:2:8;14144:86:2;;;9225:21:8;9282:2;9262:18;;;9255:30;9321:34;9301:18;;;9294:62;-1:-1:-1;;;9372:18:8;;;9365:47;9429:19;;14144:86:2;9041:413:8;14144:86:2;-1:-1:-1;;;;;14257:24:2;;14240:12;14257:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;14285:22:2;;;;;;:18;:22;;;;;;;;14257:50;14255:53;14240:68;;14322:7;14319:593;;;-1:-1:-1;;;;;14357:32:2;;;;;;:26;:32;;;;;;;;14354:548;;;14457:12;;14437:19;;:32;;;;:::i;:::-;14424:12;:45;14421:166;;;-1:-1:-1;;;;;14505:9:2;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;14505:16:2;14517:4;14505:16;;;;;;14544:24;;5957:51:8;;;14517:4:2;;14544:24;;5930:18:8;14544:24:2;;;;;;;14421:166;14620:8;14605:23;:12;:23;;;;;;-1:-1:-1;;14605:23:2;;;;;;;;;;;;;;;-1:-1:-1;;14605:23:2;;;;;;;;-1:-1:-1;;14605:23:2;;;;;;;;;;;;;;;;;;;;14662:14;;14654:22;;;14646:67;;;;-1:-1:-1;;;14646:67:2;;11709:2:8;14646:67:2;;;11691:21:8;;;11728:18;;;11721:30;11787:34;11767:18;;;11760:62;11839:18;;14646:67:2;11507:356:8;14646:67:2;14354:548;;;14791:9;14776:24;:12;:24;;;;;;-1:-1:-1;;14776:24:2;;;;;;;;;;;;;;;-1:-1:-1;;14776:24:2;;;;;;;;-1:-1:-1;;14776:24:2;;;;;;;;;;;;;;;;;;;;14834:15;;14826:23;;;14818:69;;;;-1:-1:-1;;;14818:69:2;;11307:2:8;14818:69:2;;;11289:21:8;11346:2;11326:18;;;11319:30;11385:34;11365:18;;;11358:62;-1:-1:-1;;;11436:18:8;;;11429:31;11477:19;;14818:69:2;11105:397:8;14818:69:2;14954:29;;14926:24;14944:4;14926:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14989:16:2;;;;14988:17;14926:79;:116;;;;-1:-1:-1;;;;;;15010:32:2;;;;;;:26;:32;;;;;;;;15009:33;14926:116;:141;;;;-1:-1:-1;15046:21:2;;-1:-1:-1;;;15046:21:2;;;;14926:141;14922:245;;;15111:45;15126:29;;15111:14;:45::i;:::-;15177:41;15192:4;15198:2;15202:6;15210:7;15177:14;:41::i;12628:155::-;12669:7;12689:15;12706;12725:19;:17;:19::i;:::-;12688:56;;-1:-1:-1;12688:56:2;-1:-1:-1;12761:15:2;12688:56;;12761:15;:::i;:::-;12754:22;;;;12628:155;:::o;11392:341::-;11465:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11465:36:2;11525:29;11537:7;11546;11525:11;:29::i;:::-;11513:41;;11648:52;11660:9;11671:7;11680;11689:10;:8;:10::i;:::-;11648:11;:52::i;:::-;11627:17;;;11564:136;11611:14;;;11564:136;11584:25;;;11564:136;;;11392:341;;;;:::o;2034:169:7:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:7;;;-1:-1:-1;;;;;;2124:17:7;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2079:124;2034:169;:::o;16160:858:2:-;4663:16;:23;;-1:-1:-1;;4663:23:2;4682:4;4663:23;;;16267:12:::1;:19:::0;4663:16;;16267:21:::1;::::0;:19;;::::1;4663:23:::0;16267:19:::1;16287:1;16267:21;:::i;:::-;16354:12;:19:::0;16245:43:::1;::::0;;::::1;::::0;-1:-1:-1;16298:32:2::1;::::0;16245:43;;16333:40:::1;::::0;16354:19;;;::::1;;16333:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;16298:87:::0;-1:-1:-1;16395:14:2::1;16412:45;16298:87:::0;16412:20;:45:::1;:::i;:::-;16395:62:::0;-1:-1:-1;16493:21:2::1;16556:24;16395:62:::0;16556:16:::1;:24::i;:::-;16591:20;16614:37;16637:14:::0;16614:21:::1;:37;:::i;:::-;16741:12;:19:::0;16591:60;;-1:-1:-1;16661:29:2::1;::::0;16728:32:::1;::::0;16741:19;;::::1;;;16728:11:::0;:32:::1;:::i;:::-;16706:12;:19:::0;16693:32:::1;::::0;16706:19;;::::1;;;16693:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;16661:100;;16817:61;16830:24;16856:21;16817:12;:61::i;:::-;16897:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;16897:16:2::1;16924:21;16897:26;:49::i;:::-;-1:-1:-1::0;;4707:16:2;:24;;-1:-1:-1;;4707:24:2;;;-1:-1:-1;;;;;16160:858:2:o;15303:851::-;15420:28;15451;15462:7;15471;15451:10;:28::i;:::-;-1:-1:-1;;;;;15494:19:2;;;;;;:11;:19;;;;;;15420:59;;-1:-1:-1;15494:19:2;;15490:80;;;-1:-1:-1;;;;;15533:15:2;;;;;;:7;:15;;;;;:26;;15552:7;;15533:15;:26;;15552:7;;15533:26;:::i;:::-;;;;-1:-1:-1;;15490:80:2;-1:-1:-1;;;;;15584:22:2;;;;;;:11;:22;;;;;;;;15580:96;;;15648:17;;;;-1:-1:-1;;;;;15626:18:2;;;;;;:7;:18;;;;;:39;;:18;;;:39;;15648:17;;15626:39;:::i;:::-;;;;-1:-1:-1;;15580:96:2;15705:9;;-1:-1:-1;;;;;15686:15:2;;15705:9;15686:15;;;:7;:15;;;;;:28;;:15;;15705:9;15686:28;;15705:9;;15686:28;:::i;:::-;;;;-1:-1:-1;;15746:17:2;;;;;-1:-1:-1;;;;;15724:18:2;;;;;;:7;:18;;;;;;:39;;15746:17;;15724:18;;:39;;15746:17;;15724:39;:::i;:::-;;;;-1:-1:-1;;15773:167:2;;;;15803:27;15815:1;:6;;;15823:1;:6;;;15803:11;:27::i;:::-;15840:32;15852:1;:9;;;15862:1;:9;;;15840:11;:32::i;:::-;15912:4;-1:-1:-1;;;;;15887:42:2;15896:6;-1:-1:-1;;;;;15887:42:2;;15919:1;:9;;;15887:42;;;;18621:25:8;;18609:2;18594:18;;18475:177;15887:42:2;;;;;;;;15773:167;-1:-1:-1;;;;;15957:35:2;;;;;;:24;:35;;;;;;;;;:77;;;16019:15;;15996:20;16006:9;15996;:20::i;:::-;:38;;15957:77;15949:137;;;;-1:-1:-1;;;15949:137:2;;17044:2:8;15949:137:2;;;17026:21:8;17083:2;17063:18;;;17056:30;17122:34;17102:18;;;17095:62;-1:-1:-1;;;17173:18:8;;;17166:45;17228:19;;15949:137:2;16842:411:8;15949:137:2;16118:9;-1:-1:-1;;;;;16101:46:2;16110:6;-1:-1:-1;;;;;16101:46:2;;16129:1;:17;;;16101:46;;;;18621:25:8;;18609:2;18594:18;;18475:177;16101:46:2;;;;;;;;15401:753;15303:851;;;;:::o;12789:514::-;12885:7;;12920;;12839;;;;;12937:259;12961:9;:16;12957:20;;12937:259;;;13026:7;13002;:21;13010:9;13020:1;13010:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13010:12:2;13002:21;;;;;;;;;;;;;:31;;:66;;;13061:7;13037;:21;13045:9;13055:1;13045:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13045:12:2;13037:21;;;;;;;;;;;;;:31;13002:66;12998:97;;;13078:7;;13087;;13070:25;;;;;;;12789:514;;:::o;12998:97::-;13119:7;:21;13127:9;13137:1;13127:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13127:12:2;13119:21;;;;;;;;;;;;;13109:31;;;;:::i;:::-;;;13164:7;:21;13172:9;13182:1;13172:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;13172:12:2;13164:21;;;;;;;;;;;;;13154:31;;;;:::i;:::-;;-1:-1:-1;12979:3:2;;;;:::i;:::-;;;;12937:259;;;;13227:7;;13219;;:15;;;;:::i;:::-;13209:7;:25;13205:56;;;13244:7;;13253;;13236:25;;;;;;12789:514;;:::o;13205:56::-;13279:7;;13288;;-1:-1:-1;12789:514:2;-1:-1:-1;12789:514:2:o;11739:376::-;11813:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11813:28:2;11858:7;11854:83;;11879:17;;;:27;;;11918:8;;11854:83;11963:12;:16;11980:3;;11955:24;;11963:16;;11955:7;:24;:::i;:::-;:28;;;;:::i;:::-;11946:6;;;:37;12013:12;:19;12033:3;;12005:27;;12013:19;;;;;12005:7;:27;:::i;:::-;:31;;;;:::i;:::-;11993:9;;;:43;;;12074:6;;;;12066:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;12046:17;;;:44;11739:376;;;;:::o;12121:501::-;12246:15;;;;12339:19;12347:11;12339:7;:19;:::i;:::-;12329:29;;12373:7;12369:64;;-1:-1:-1;12401:7:2;;-1:-1:-1;12418:1:2;;-1:-1:-1;12418:1:2;12394:28;;12369:64;12457:11;12450:1;:6;;;:18;;;;:::i;:::-;12443:25;;12498:11;12488:1;:9;;;:21;;;;:::i;:::-;12478:31;-1:-1:-1;12478:31:2;12538:12;12546:4;12538:7;:12;:::i;:::-;:20;;;;:::i;:::-;12519:39;;12121:501;;;;;;;;;;:::o;17024:669::-;17177:16;;;17191:1;17177:16;;;;;;;;17153:21;;17177:16;;;;;;;;;;-1:-1:-1;17177:16:2;17153:40;;17221:4;17203;17208:1;17203:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;17203:23:2;;;-1:-1:-1;;;;;17203:23:2;;;;;17246:15;;;;;;;;;-1:-1:-1;;;;;17246:15:2;-1:-1:-1;;;;;17246:20:2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17236:4;17241:1;17236:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17236:32:2;;;:7;;;;;;;;;;:32;;;;17315:15;;17300:4;6560:7;6586:18;;;:11;:18;;;;;;17315:15;;;;;;;6586:27;;;;;;17335:11;-1:-1:-1;17279:154:2;;;17392:15;;17360:62;;17377:4;;17392:15;;;-1:-1:-1;;;;;17392:15:2;-1:-1:-1;;17360:8:2;:62::i;:::-;17468:15;;:218;;-1:-1:-1;;;17468:218:2;;:15;;;;-1:-1:-1;;;;;17468:15:2;;:66;;:218;;17548:11;;17573:1;;17616:4;;17642;;17661:15;;17468:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17079:614;17024:669;:::o;17699:415::-;17809:15;;-1:-1:-1;;;;;17809:15:2;;;;;:31;17848:9;17880:4;17899:11;17924:1;;18008:7;1012::7;1038:6;-1:-1:-1;;;;;1038:6:7;;966:85;18008:7:2;17809:245;;;;;;-1:-1:-1;;;;;;17809:245:2;;;-1:-1:-1;;;;;6881:15:8;;;17809:245:2;;;6863:34:8;6913:18;;;6906:34;;;;6956:18;;;6949:34;;;;6999:18;;;6992:34;7063:15;;;7042:19;;;7035:44;18029:15:2;7095:19:8;;;7088:35;6797:19;;17809:245:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;18069:38:2;;;19816:25:8;;;19872:2;19857:18;;19850:34;;;18069:38:2;;-1:-1:-1;19789:18:8;18069:38:2;;;;;;;17699:415;;:::o;2012:312:0:-;2126:6;2101:21;:31;;2093:73;;;;-1:-1:-1;;;2093:73:0;;14033:2:8;2093:73:0;;;14015:21:8;14072:2;14052:18;;;14045:30;14111:31;14091:18;;;14084:59;14160:18;;2093:73:0;13831:353:8;2093:73:0;2178:12;2196:9;-1:-1:-1;;;;;2196:14:0;2218:6;2196:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:52;;;2247:7;2239:78;;;;-1:-1:-1;;;2239:78:0;;12845:2:8;2239:78:0;;;12827:21:8;12884:2;12864:18;;;12857:30;12923:34;12903:18;;;12896:62;12994:28;12974:18;;;12967:56;13040:19;;2239:78:0;12643:422:8;2239:78:0;2083:241;2012:312;;:::o;11015:122:2:-;11093:4;11082:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;11107:11:2;:23;;11126:4;;11107:11;:15;;:23;;11126:4;;11107:23;:::i;:::-;;;;-1:-1:-1;;;;11015:122:2:o;11143:243::-;11231:4;11215:22;;;;:7;:22;;;;;:32;;11240:7;;11215:22;:32;;11240:7;;11215:32;:::i;:::-;;;;-1:-1:-1;;11280:4:2;11260:26;;;;:11;:26;;;;;;;;11257:76;;;11316:4;11300:22;;;;:7;:22;;;;;:33;;11326:7;;11300:22;:33;;11326:7;;11300:33;:::i;:::-;;;;-1:-1:-1;;11257:76:2;11363:7;11343:11;:18;;;:27;;;;;;;:::i;14:156:8:-;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;109:55;14:156;;;:::o;175:247::-;234:6;287:2;275:9;266:7;262:23;258:32;255:52;;;303:1;300;293:12;255:52;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;598:9;592:16;617:31;642:5;617:31;:::i;943:388::-;1011:6;1019;1072:2;1060:9;1051:7;1047:23;1043:32;1040:52;;;1088:1;1085;1078:12;1040:52;1127:9;1114:23;1146:31;1171:5;1146:31;:::i;:::-;1196:5;-1:-1:-1;1253:2:8;1238:18;;1225:32;1266:33;1225:32;1266:33;:::i;:::-;1318:7;1308:17;;;943:388;;;;;:::o;1336:456::-;1413:6;1421;1429;1482:2;1470:9;1461:7;1457:23;1453:32;1450:52;;;1498:1;1495;1488:12;1450:52;1537:9;1524:23;1556:31;1581:5;1556:31;:::i;:::-;1606:5;-1:-1:-1;1663:2:8;1648:18;;1635:32;1676:33;1635:32;1676:33;:::i;:::-;1336:456;;1728:7;;-1:-1:-1;;;1782:2:8;1767:18;;;;1754:32;;1336:456::o;1797:382::-;1862:6;1870;1923:2;1911:9;1902:7;1898:23;1894:32;1891:52;;;1939:1;1936;1929:12;1891:52;1978:9;1965:23;1997:31;2022:5;1997:31;:::i;:::-;2047:5;-1:-1:-1;2104:2:8;2089:18;;2076:32;2117:30;2076:32;2117:30;:::i;2184:315::-;2252:6;2260;2313:2;2301:9;2292:7;2288:23;2284:32;2281:52;;;2329:1;2326;2319:12;2281:52;2368:9;2355:23;2387:31;2412:5;2387:31;:::i;:::-;2437:5;2489:2;2474:18;;;;2461:32;;-1:-1:-1;;;2184:315:8:o;2504:750::-;2596:6;2604;2612;2665:2;2653:9;2644:7;2640:23;2636:32;2633:52;;;2681:1;2678;2671:12;2633:52;2721:9;2708:23;2750:18;2791:2;2783:6;2780:14;2777:34;;;2807:1;2804;2797:12;2777:34;2845:6;2834:9;2830:22;2820:32;;2890:7;2883:4;2879:2;2875:13;2871:27;2861:55;;2912:1;2909;2902:12;2861:55;2952:2;2939:16;2978:2;2970:6;2967:14;2964:34;;;2994:1;2991;2984:12;2964:34;3049:7;3042:4;3032:6;3029:1;3025:14;3021:2;3017:23;3013:34;3010:47;3007:67;;;3070:1;3067;3060:12;3007:67;3101:4;3093:13;;;;-1:-1:-1;3125:6:8;-1:-1:-1;;3166:20:8;;3153:34;3196:28;3153:34;3196:28;:::i;:::-;3243:5;3233:15;;;2504:750;;;;;:::o;3259:241::-;3315:6;3368:2;3356:9;3347:7;3343:23;3339:32;3336:52;;;3384:1;3381;3374:12;3336:52;3423:9;3410:23;3442:28;3464:5;3442:28;:::i;3505:245::-;3572:6;3625:2;3613:9;3604:7;3600:23;3596:32;3593:52;;;3641:1;3638;3631:12;3593:52;3673:9;3667:16;3692:28;3714:5;3692:28;:::i;4022:180::-;4081:6;4134:2;4122:9;4113:7;4109:23;4105:32;4102:52;;;4150:1;4147;4140:12;4102:52;-1:-1:-1;4173:23:8;;4022:180;-1:-1:-1;4022:180:8:o;4207:184::-;4277:6;4330:2;4318:9;4309:7;4305:23;4301:32;4298:52;;;4346:1;4343;4336:12;4298:52;-1:-1:-1;4369:16:8;;4207:184;-1:-1:-1;4207:184:8:o;4396:309::-;4461:6;4469;4522:2;4510:9;4501:7;4497:23;4493:32;4490:52;;;4538:1;4535;4528:12;4490:52;4574:9;4561:23;4551:33;;4634:2;4623:9;4619:18;4606:32;4647:28;4669:5;4647:28;:::i;4710:248::-;4778:6;4786;4839:2;4827:9;4818:7;4814:23;4810:32;4807:52;;;4855:1;4852;4845:12;4807:52;-1:-1:-1;;4878:23:8;;;4948:2;4933:18;;;4920:32;;-1:-1:-1;4710:248:8:o;4963:306::-;5051:6;5059;5067;5120:2;5108:9;5099:7;5095:23;5091:32;5088:52;;;5136:1;5133;5126:12;5088:52;5165:9;5159:16;5149:26;;5215:2;5204:9;5200:18;5194:25;5184:35;;5259:2;5248:9;5244:18;5238:25;5228:35;;4963:306;;;;;:::o;5274:322::-;5345:6;5353;5361;5414:2;5402:9;5393:7;5389:23;5385:32;5382:52;;;5430:1;5427;5420:12;5382:52;5453:27;5470:9;5453:27;:::i;:::-;5443:37;;5499:36;5531:2;5520:9;5516:18;5499:36;:::i;:::-;5489:46;;5554:36;5586:2;5575:9;5571:18;5554:36;:::i;:::-;5544:46;;5274:322;;;;;:::o;7561:597::-;7673:4;7702:2;7731;7720:9;7713:21;7763:6;7757:13;7806:6;7801:2;7790:9;7786:18;7779:34;7831:1;7841:140;7855:6;7852:1;7849:13;7841:140;;;7950:14;;;7946:23;;7940:30;7916:17;;;7935:2;7912:26;7905:66;7870:10;;7841:140;;;7999:6;7996:1;7993:13;7990:91;;;8069:1;8064:2;8055:6;8044:9;8040:22;8036:31;8029:42;7990:91;-1:-1:-1;8142:2:8;8121:15;-1:-1:-1;;8117:29:8;8102:45;;;;8149:2;8098:54;;7561:597;-1:-1:-1;;;7561:597:8:o;16071:356::-;16273:2;16255:21;;;16292:18;;;16285:30;16351:34;16346:2;16331:18;;16324:62;16418:2;16403:18;;16071:356::o;18657:980::-;18919:4;18967:3;18956:9;18952:19;18998:6;18987:9;18980:25;19024:2;19062:6;19057:2;19046:9;19042:18;19035:34;19105:3;19100:2;19089:9;19085:18;19078:31;19129:6;19164;19158:13;19195:6;19187;19180:22;19233:3;19222:9;19218:19;19211:26;;19272:2;19264:6;19260:15;19246:29;;19293:1;19303:195;19317:6;19314:1;19311:13;19303:195;;;19382:13;;-1:-1:-1;;;;;19378:39:8;19366:52;;19473:15;;;;19438:12;;;;19414:1;19332:9;19303:195;;;-1:-1:-1;;;;;;;19554:32:8;;;;19549:2;19534:18;;19527:60;-1:-1:-1;;;19618:3:8;19603:19;19596:35;19515:3;18657:980;-1:-1:-1;;;18657:980:8:o;20508:128::-;20548:3;20579:1;20575:6;20572:1;20569:13;20566:39;;;20585:18;;:::i;:::-;-1:-1:-1;20621:9:8;;20508:128::o;20641:204::-;20679:3;20715:4;20712:1;20708:12;20747:4;20744:1;20740:12;20782:3;20776:4;20772:14;20767:3;20764:23;20761:49;;;20790:18;;:::i;:::-;20826:13;;20641:204;-1:-1:-1;;;20641:204:8:o;20850:217::-;20890:1;20916;20906:132;;20960:10;20955:3;20951:20;20948:1;20941:31;20995:4;20992:1;20985:15;21023:4;21020:1;21013:15;20906:132;-1:-1:-1;21052:9:8;;20850:217::o;21072:422::-;21161:1;21204:5;21161:1;21218:270;21239:7;21229:8;21226:21;21218:270;;;21298:4;21294:1;21290:6;21286:17;21280:4;21277:27;21274:53;;;21307:18;;:::i;:::-;21357:7;21347:8;21343:22;21340:55;;;21377:16;;;;21340:55;21456:22;;;;21416:15;;;;21218:270;;;21222:3;21072:422;;;;;:::o;21499:140::-;21557:5;21586:47;21627:4;21617:8;21613:19;21607:4;21693:5;21723:8;21713:80;;-1:-1:-1;21764:1:8;21778:5;;21713:80;21812:4;21802:76;;-1:-1:-1;21849:1:8;21863:5;;21802:76;21894:4;21912:1;21907:59;;;;21980:1;21975:130;;;;21887:218;;21907:59;21937:1;21928:10;;21951:5;;;21975:130;22012:3;22002:8;21999:17;21996:43;;;22019:18;;:::i;:::-;-1:-1:-1;;22075:1:8;22061:16;;22090:5;;21887:218;;22189:2;22179:8;22176:16;22170:3;22164:4;22161:13;22157:36;22151:2;22141:8;22138:16;22133:2;22127:4;22124:12;22120:35;22117:77;22114:159;;;-1:-1:-1;22226:19:8;;;22258:5;;22114:159;22305:34;22330:8;22324:4;22305:34;:::i;:::-;22375:6;22371:1;22367:6;22363:19;22354:7;22351:32;22348:58;;;22386:18;;:::i;:::-;22424:20;;21644:806;-1:-1:-1;;;21644:806:8:o;22455:168::-;22495:7;22561:1;22557;22553:6;22549:14;22546:1;22543:21;22538:1;22531:9;22524:17;22520:45;22517:71;;;22568:18;;:::i;:::-;-1:-1:-1;22608:9:8;;22455:168::o;22628:238::-;22666:7;22706:4;22703:1;22699:12;22738:4;22735:1;22731:12;22798:3;22792:4;22788:14;22783:3;22780:23;22773:3;22766:11;22759:19;22755:49;22752:75;;;22807:18;;:::i;22871:125::-;22911:4;22939:1;22936;22933:8;22930:34;;;22944:18;;:::i;:::-;-1:-1:-1;22981:9:8;;22871:125::o;23001:135::-;23040:3;-1:-1:-1;;23061:17:8;;23058:43;;;23081:18;;:::i;:::-;-1:-1:-1;23128:1:8;23117:13;;23001:135::o;23141:127::-;23202:10;23197:3;23193:20;23190:1;23183:31;23233:4;23230:1;23223:15;23257:4;23254:1;23247:15;23273:127;23334:10;23329:3;23325:20;23322:1;23315:31;23365:4;23362:1;23355:15;23389:4;23386:1;23379:15;23405:127;23466:10;23461:3;23457:20;23454:1;23447:31;23497:4;23494:1;23487:15;23521:4;23518:1;23511:15;23669:131;-1:-1:-1;;;;;23744:31:8;;23734:42;;23724:70;;23790:1;23787;23780:12;23805:118;23891:5;23884:13;23877:21;23870:5;23867:32;23857:60;;23913:1;23910;23903:12

Swarm Source

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