ETH Price: $3,461.94 (+1.58%)
Gas: 6 Gwei

Token

NumisMe Token (NUME)
 

Overview

Max Total Supply

5,000,000,000 NUME

Holders

229 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
431,386.444295123390771983 NUME

Value
$0.00
0x1597d5077b06ca557f378344e2d3f70c9bc64da7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NumisMe

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-21
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


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


interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract NumisMe is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress;
    address payable public devAddress;
      
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 5 * 1e9 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "NumisMe Token";
    string private constant _symbol = "NUME";
    uint8 private constant _decimals = 18;

    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 600;
    uint256 public _buyLiquidityFee = 100;
    uint256 public _buyMarketingFee = 100;
    uint256 public _buyDevFee = 100;

    uint256 public _sellTaxFee = 600;
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellMarketingFee = 100;
    uint256 public _sellDevFee = 100;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _marketingTokensToSwap;
    uint256 public _devTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 520 * 1 gwei; // do not allow over x gwei for launch
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 devFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 devFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);

    event UpdatedDevAddress(address dev);

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

    constructor() {
        address newOwner = address(msg.sender);
        _rOwned[newOwner] = _rTotal / 1000 * 125;
        _rOwned[0x57a23938B1c5DE38956e8CEE10690F7f510aD1B8] = _rTotal / 1000 * 15;
        _rOwned[0xeDE21d217E29b0f345AfC9EFcb6018287B7A46fB] = _rTotal / 100 * 10;
        _rOwned[0x677Bb693cF2c8304902d7d0779041c2C89D4bD48] = _rTotal / 100 * 10;
        _rOwned[0x6b8fABf3324c3a14F60Ae6EA62aBa8665D498c4F] = _rTotal / 100 * 20;
        _rOwned[0xe2A7BE7862C657b87587E9e59FCA270b3DDb0A2D] = _rTotal / 100 * 40;
        _rOwned[0x20678A8aAA215aA66A49a3400CaEfC1d7aa1Ad7c] = _rTotal / 100 * 6;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        maxTransactionAmount = _tTotal * 1 / 10000; // 0.01% maxTransactionAmountTxn
        minimumTokensBeforeSwap = _tTotal * 1 / 1000000; // 0.0001% swap tokens amount
        
        marketingAddress = payable(0x677Bb693cF2c8304902d7d0779041c2C89D4bD48); // Marketing Address
        devAddress = payable(0xeDE21d217E29b0f345AfC9EFcb6018287B7A46fB); // Dev Address

        _isExcludedFromFee[newOwner] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[0x094FdbEC9659529F1f2c4F6C51204717384A3E53] = true; // LP Provider
        
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(0x094FdbEC9659529F1f2c4F6C51204717384A3E53), true);

        excludeFromReward(address(this));
        
        emit Transfer(address(0), newOwner, _tTotal / 1000 * 125);
        emit Transfer(address(0), 0x57a23938B1c5DE38956e8CEE10690F7f510aD1B8, _tTotal / 1000 * 15);
        emit Transfer(address(0), 0xeDE21d217E29b0f345AfC9EFcb6018287B7A46fB, _tTotal / 100 * 10);
        emit Transfer(address(0), 0x677Bb693cF2c8304902d7d0779041c2C89D4bD48, _tTotal / 100 * 10);
        emit Transfer(address(0), 0x6b8fABf3324c3a14F60Ae6EA62aBa8665D498c4F, _tTotal / 100 * 20);
        emit Transfer(address(0), 0xe2A7BE7862C657b87587E9e59FCA270b3DDb0A2D, _tTotal / 100 * 40);
        emit Transfer(address(0), 0x20678A8aAA215aA66A49a3400CaEfC1d7aa1Ad7c, _tTotal / 100 * 6);
        transferOwnership(newOwner);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure 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)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        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
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

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

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }

    // only use if conducting a presale
    function addPresaleAddressForExclusions(address _presaleAddress) external onlyOwner {
        excludeFromFee(_presaleAddress);
        excludeFromMaxTransaction(_presaleAddress, true);
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        tradingActive = true;
        setSwapAndLiquifyEnabled(true);
        tradingActiveBlock = block.number;
    }
        
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}

    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (_tTotal * 1 / 10000)/1e18, "Cannot set maxTransactionAmount lower than 0.01%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 250, "cannot set gas this low");
        gasPriceLimit = gas * 1 gwei;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 20, "Cannot exclude more than 20 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public 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 _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify && 
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[from]
            ){                
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(uniswapV2Router) && !automatedMarketMakerPairs[to]){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number && _holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            if(tradingActiveBlock == block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){
                _taxFee = 600;
                _liquidityFee = 9300;
                buyOrSellSwitch = SELL;
            }
            // Buy
            else if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyDevFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellDevFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _devTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 10){
            contractBalance = minimumTokensBeforeSwap * 10;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap - (_liquidityTokensToSwap/2));
        uint256 ethForDev = ethBalance.mul(_devTokensToSwap).div(totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        _devTokensToSwap = 0;
                
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

        // send remainder to marketing
        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
            _devTokensToSwap += tLiquidity * _buyDevFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
            _devTokensToSwap += tLiquidity * _sellDevFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10000);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10000);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

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

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

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee, uint256 buyDevFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        _buyDevFee = buyDevFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee + _buyDevFee <= 1000, "Must keep buy taxes below 10%");
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee, buyDevFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee, uint256 sellDevFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        _sellDevFee = sellDevFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee + _sellDevFee <= 1500, "Must keep sell taxes below 15%");
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee, sellDevFee);
    }
    
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    function setDevAddress(address _devAddress) public onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        require(_token != address(uniswapV2Pair), "Can't withdraw Native LP tokens with this method");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
}

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":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"SetSellFee","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dev","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"setSellFee","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805461ffff19166101011790556200002d6b1027e72f1f12813088000000600019620010de565b6200003b906000196200110b565b600d55600f54601055601154601255610258601481905560646015819055601681905560178190556018919091556019819055601a819055601b556000601c556022805460ff191660011790556479126a50006023556027805461ffff60a81b19169055348015620000ac57600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062005013833981519152908290a350600d543390620000f1906103e89062001125565b620000fe90607d6200113c565b6001600160a01b038216600090815260056020526040902055600d5462000129906103e89062001125565b6200013690600f6200113c565b7357a23938b1c5de38956e8cee10690f7f510ad1b860005260056020527f867d807594c523ef942a2464214672447ea8c017d43cba0ce6be0c40cd817f3055600d54620001869060649062001125565b6200019390600a6200113c565b73ede21d217e29b0f345afc9efcb6018287b7a46fb60005260056020527fe0c16bede3869a19849f749c1c029b8105c7ca864e2216cb563ede3ca478bc4f55600d54620001e39060649062001125565b620001f090600a6200113c565b73677bb693cf2c8304902d7d0779041c2c89d4bd4860005260056020527f0edd4eed892177ac2b3874d24ee54b44c3e6d71fb800bb749a44e7627607e1fc55600d54620002409060649062001125565b6200024d9060146200113c565b736b8fabf3324c3a14f60ae6ea62aba8665d498c4f60005260056020527f74d05aa04f2f6b5e2a7d4a0b76e25e045a2a5df78a3ec2e50fbfc788b31c731a55600d546200029d9060649062001125565b620002aa9060286200113c565b73e2a7be7862c657b87587e9e59fca270b3ddb0a2d60005260056020527ffc09952c01b104b08411be632f73628f4e88f47f8a9cfc28138676475dc7074355600d54620002fa9060649062001125565b620003079060066200113c565b7320678a8aaa215aa66a49a3400caefc1d7aa1ad7c60005260056020527fc94e886975a315285c44afcc3636973f1995c9fa438c41baad4893fd5a7f2b9755737a250d5630b4cf539739df2c5dacb4c659f2488d620003688160016200092f565b602680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e891906200115e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000436573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045c91906200115e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d091906200115e565b602780546001600160a01b0319166001600160a01b03929092169182179055620004fc9060016200092f565b60275462000515906001600160a01b03166001620009a9565b612710620005316b1027e72f1f1281308800000060016200113c565b6200053d919062001125565b602055620f42406200055d6b1027e72f1f1281308800000060016200113c565b62000569919062001125565b602555600380546001600160a01b031990811673677bb693cf2c8304902d7d0779041c2c89d4bd481782556004805490911673ede21d217e29b0f345afc9efcb6018287b7a46fb1790556001600160a01b038381166000908152600a6020526040808220805460ff1990811660019081179092553084528284208054821683179055945490931682528120805484168317905573094fdbec9659529f1f2c4f6c51204717384a3e5390527ff66e42357e6a69fa254154f0146ad2b17ac2120b4ce49d8870c93aaf61444538805490921681179091556200064b9083906200092f565b620006583060016200092f565b6200066761dead60016200092f565b6200068873094fdbec9659529f1f2c4f6c51204717384a3e5360016200092f565b6200069330620009fd565b6001600160a01b038216600060008051602062005033833981519152620006c96103e86b1027e72f1f1281308800000062001125565b620006d690607d6200113c565b60405190815260200160405180910390a37357a23938b1c5de38956e8cee10690f7f510ad1b8600060008051602062005033833981519152620007286103e86b1027e72f1f1281308800000062001125565b6200073590600f6200113c565b60405190815260200160405180910390a373ede21d217e29b0f345afc9efcb6018287b7a46fb6000600080516020620050338339815191526200078660646b1027e72f1f1281308800000062001125565b6200079390600a6200113c565b60405190815260200160405180910390a373677bb693cf2c8304902d7d0779041c2c89d4bd48600060008051602062005033833981519152620007e460646b1027e72f1f1281308800000062001125565b620007f190600a6200113c565b60405190815260200160405180910390a3736b8fabf3324c3a14f60ae6ea62aba8665d498c4f6000600080516020620050338339815191526200084260646b1027e72f1f1281308800000062001125565b6200084f9060146200113c565b60405190815260200160405180910390a373e2a7be7862c657b87587e9e59fca270b3ddb0a2d600060008051602062005033833981519152620008a060646b1027e72f1f1281308800000062001125565b620008ad9060286200113c565b60405190815260200160405180910390a37320678a8aaa215aa66a49a3400caefc1d7aa1ad7c600060008051602062005033833981519152620008fe60646b1027e72f1f1281308800000062001125565b6200090b9060066200113c565b60405190815260200160405180910390a3620009278262000c15565b505062001230565b6000546001600160a01b031633146200097e5760405162461bcd60e51b8152602060048201819052602482015260008051602062004ff383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216600090815260246020908152604080832080548515801560ff1992831681179093556021909452919093208054909116909217909155620009f957620009f982620009fd565b5050565b6000546001600160a01b0316331462000a485760405162461bcd60e51b8152602060048201819052602482015260008051602062004ff3833981519152604482015260640162000975565b6001600160a01b0381166000908152600b602052604090205460ff161562000ab35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000975565b600c5460149062000ac690600162001189565b111562000b525760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a40162000975565b6001600160a01b0381166000908152600560205260409020541562000baf576001600160a01b03811660009081526005602052604090205462000b959062000d11565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b0316331462000c605760405162461bcd60e51b8152602060048201819052602482015260008051602062004ff3833981519152604482015260640162000975565b6001600160a01b03811662000cc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000975565b600080546040516001600160a01b03808516939216916000805160206200501383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000600d5482111562000d7a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000975565b600062000d8662000da9565b905062000da2818462000ddc60201b620020f41790919060201c565b9392505050565b6000808062000db762000e26565b9150915062000dd5818362000ddc60201b620020f41790919060201c565b9250505090565b600062000da283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200100c60201b60201c565b600d5460009081906b1027e72f1f12813088000000825b600c5481101562000fb9578260056000600c848154811062000e635762000e63620011a4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000ed257508160066000600c848154811062000eab5762000eab620011a4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000ef2575050600d54936b1027e72f1f128130880000009350915050565b62000f4960056000600c848154811062000f105762000f10620011a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200213662001048821b17901c565b925062000fa260066000600c848154811062000f695762000f69620011a4565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200213662001048821b17901c565b91508062000fb081620011ba565b91505062000e3d565b5062000fe26b1027e72f1f12813088000000600d5462000ddc60201b620020f41790919060201c565b82101562001003575050600d54926b1027e72f1f1281308800000092509050565b90939092509050565b60008183620010305760405162461bcd60e51b8152600401620009759190620011d8565b5060006200103f848662001125565b95945050505050565b600062000da283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200109260201b60201c565b60008184841115620010b95760405162461bcd60e51b8152600401620009759190620011d8565b5060006200103f84866200110b565b634e487b7160e01b600052601260045260246000fd5b600082620010f057620010f0620010c8565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620011205762001120620010f5565b500390565b600082620011375762001137620010c8565b500490565b6000816000190483118215151615620011595762001159620010f5565b500290565b6000602082840312156200117157600080fd5b81516001600160a01b038116811462000da257600080fd5b600082198211156200119f576200119f620010f5565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620011d157620011d1620010f5565b5060010190565b600060208083528351808285015260005b818110156200120757858101830151858201604001528201620011e9565b818111156200121a576000604083870101525b50601f01601f1916929092016040019392505050565b613db380620012406000396000f3fe6080604052600436106103d25760003560e01c80638366e79a116101fd578063c49b9a8011610118578063dd62ed3e116100ab578063ea2f0b371161007a578063ea2f0b3714610b6b578063ee40166e14610b8b578063efcc52de14610ba1578063f2fde38b14610bb7578063f5648a4f14610bd757600080fd5b8063dd62ed3e14610ada578063e484485414610b20578063e653da0814610b36578063e884f26014610b5657600080fd5b8063c8c8ebe4116100e7578063c8c8ebe414610a78578063c9cf778914610a8e578063d0d41fe114610aa4578063dc44b6a014610ac457600080fd5b8063c49b9a8014610a12578063c5d2418914610a32578063c860795214610a48578063c876d0b914610a5e57600080fd5b80639a7a23d611610190578063a716b7731161015f578063a716b77314610981578063a9059cbb146109a1578063b62496f5146109c1578063bbc0c742146109f157600080fd5b80639a7a23d61461090c578063a073d37f1461092c578063a457c2d714610941578063a5ece9411461096157600080fd5b80638c5a133d116101cc5780638c5a133d146108815780638da5cb5b146108a1578063906e9dd0146108bf57806395d89b41146108df57600080fd5b80638366e79a146107fd57806388790a681461081d57806388f82020146108335780638a8c523c1461086c57600080fd5b80633ad10ef6116102ed5780635342acb41161028057806370a082311161024f57806370a0823114610793578063715018a6146107b3578063751039fc146107c85780637571336a146107dd57600080fd5b80635342acb41461071c578063557ed1ba14610755578063602bc62b14610768578063620158521461077d57600080fd5b806349bd5a5e116102bc57806349bd5a5e1461069c5780634a62bb65146106bc5780634a74bb02146106db57806352390c02146106fc57600080fd5b80633ad10ef6146106265780634047ea3e14610646578063437823ec1461065c5780634549b0391461067c57600080fd5b806318160ddd116103655780632d838119116103345780632d838119146105aa578063313ce567146105ca5780633685d419146105e6578063395093511461060657600080fd5b806318160ddd1461053f578063200a692d1461055e57806323b872dd1461057457806324171f321461059457600080fd5b8063106b5da1116103a1578063106b5da11461049857806310d5de53146104b857806313114a9d146104e85780631694505e1461050757600080fd5b806306fdde03146103de57806308043751146104265780630923160214610448578063095ea7b31461046857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5060408051808201909152600d81526c273ab6b4b9a6b2902a37b5b2b760991b60208201525b60405161041d9190613946565b60405180910390f35b34801561043257600080fd5b5061044661044136600461399b565b610bec565b005b34801561045457600080fd5b5061044661046336600461399b565b610d46565b34801561047457600080fd5b506104886104833660046139c9565b610dd5565b604051901515815260200161041d565b3480156104a457600080fd5b506104466104b336600461399b565b610dec565b3480156104c457600080fd5b506104886104d33660046139f5565b60216020526000908152604090205460ff1681565b3480156104f457600080fd5b50600e545b60405190815260200161041d565b34801561051357600080fd5b50602654610527906001600160a01b031681565b6040516001600160a01b03909116815260200161041d565b34801561054b57600080fd5b506b1027e72f1f128130880000006104f9565b34801561056a57600080fd5b506104f960185481565b34801561058057600080fd5b5061048861058f366004613a12565b610ecd565b3480156105a057600080fd5b506104f9601e5481565b3480156105b657600080fd5b506104f96105c536600461399b565b610f36565b3480156105d657600080fd5b506040516012815260200161041d565b3480156105f257600080fd5b506104466106013660046139f5565b610fba565b34801561061257600080fd5b506104886106213660046139c9565b611171565b34801561063257600080fd5b50600454610527906001600160a01b031681565b34801561065257600080fd5b506104f9601d5481565b34801561066857600080fd5b506104466106773660046139f5565b6111a7565b34801561068857600080fd5b506104f9610697366004613a61565b61122c565b3480156106a857600080fd5b50602754610527906001600160a01b031681565b3480156106c857600080fd5b5060095461048890610100900460ff1681565b3480156106e757600080fd5b5060275461048890600160a81b900460ff1681565b34801561070857600080fd5b506104466107173660046139f5565b6112c3565b34801561072857600080fd5b506104886107373660046139f5565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561076157600080fd5b50426104f9565b34801561077457600080fd5b506002546104f9565b34801561078957600080fd5b506104f960175481565b34801561079f57600080fd5b506104f96107ae3660046139f5565b6114b1565b3480156107bf57600080fd5b50610446611510565b3480156107d457600080fd5b50610488611584565b3480156107e957600080fd5b506104466107f8366004613a91565b6115ca565b34801561080957600080fd5b50610488610818366004613abf565b61161f565b34801561082957600080fd5b506104f960195481565b34801561083f57600080fd5b5061048861084e3660046139f5565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561087857600080fd5b5061044661189e565b34801561088d57600080fd5b5061044661089c366004613aed565b611945565b3480156108ad57600080fd5b506000546001600160a01b0316610527565b3480156108cb57600080fd5b506104466108da3660046139f5565b611a43565b3480156108eb57600080fd5b506040805180820190915260048152634e554d4560e01b6020820152610410565b34801561091857600080fd5b50610446610927366004613a91565b611b4f565b34801561093857600080fd5b506025546104f9565b34801561094d57600080fd5b5061048861095c3660046139c9565b611c07565b34801561096d57600080fd5b50600354610527906001600160a01b031681565b34801561098d57600080fd5b5061044661099c3660046139f5565b611c56565b3480156109ad57600080fd5b506104886109bc3660046139c9565b611c97565b3480156109cd57600080fd5b506104886109dc3660046139f5565b60246020526000908152604090205460ff1681565b3480156109fd57600080fd5b5060275461048890600160b01b900460ff1681565b348015610a1e57600080fd5b50610446610a2d366004613b1f565b611ca4565b348015610a3e57600080fd5b506104f960165481565b348015610a5457600080fd5b506104f9601a5481565b348015610a6a57600080fd5b506009546104889060ff1681565b348015610a8457600080fd5b506104f960205481565b348015610a9a57600080fd5b506104f9601b5481565b348015610ab057600080fd5b50610446610abf3660046139f5565b611d1b565b348015610ad057600080fd5b506104f960155481565b348015610ae657600080fd5b506104f9610af5366004613abf565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b2c57600080fd5b506104f9601f5481565b348015610b4257600080fd5b50610446610b51366004613aed565b611de9565b348015610b6257600080fd5b50610488611edd565b348015610b7757600080fd5b50610446610b863660046139f5565b611f18565b348015610b9757600080fd5b506104f9601c5481565b348015610bad57600080fd5b506104f960145481565b348015610bc357600080fd5b50610446610bd23660046139f5565b611f93565b348015610be357600080fd5b5061044661207d565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610c1690613b3c565b60405180910390fd5b620186a0610c3a6b1027e72f1f128130880000006001613b87565b610c449190613ba6565b811015610cb15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c16565b6103e8610ccb6b1027e72f1f128130880000006005613b87565b610cd59190613ba6565b811115610d415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c16565b602555565b6000546001600160a01b03163314610d705760405162461bcd60e51b8152600401610c1690613b3c565b60fa811015610dc15760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420736574206761732074686973206c6f770000000000000000006044820152606401610c16565b610dcf81633b9aca00613b87565b60235550565b6000610de2338484612178565b5060015b92915050565b6000546001600160a01b03163314610e165760405162461bcd60e51b8152600401610c1690613b3c565b670de0b6b3a7640000612710610e396b1027e72f1f128130880000006001613b87565b610e439190613ba6565b610e4d9190613ba6565b811015610eb55760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526f6c6f776572207468616e20302e30312560801b6064820152608401610c16565b610ec781670de0b6b3a7640000613b87565b60205550565b6000610eda84848461229c565b610f2c8433610f2785604051806060016040528060288152602001613d31602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612aab565b612178565b5060019392505050565b6000600d54821115610f9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c16565b6000610fa7612ae5565b9050610fb383826120f4565b9392505050565b6000546001600160a01b03163314610fe45760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000908152600b602052604090205460ff1661104c5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c16565b60005b600c5481101561116d57816001600160a01b0316600c828154811061107657611076613bc8565b6000918252602090912001546001600160a01b0316141561115b57600c80546110a190600190613bde565b815481106110b1576110b1613bc8565b600091825260209091200154600c80546001600160a01b0390921691839081106110dd576110dd613bc8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c80548061113557611135613bf5565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061116581613c0b565b91505061104f565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610de2918590610f279086612b08565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b1027e72f1f1281308800000083111561128a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c16565b816112a957600061129a84612b67565b50939550610de6945050505050565b60006112b484612b67565b50929550610de6945050505050565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000908152600b602052604090205460ff16156113565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c16565b600c54601490611367906001613c26565b11156113f15760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c16565b6001600160a01b0381166000908152600560205260409020541561144b576001600160a01b03811660009081526005602052604090205461143190610f36565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156114ee57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610de690610f36565b6000546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610c1690613b3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146115af5760405162461bcd60e51b8152600401610c1690613b3c565b50600980546022805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146115f45760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461164a5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0383166116a05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c16565b6001600160a01b0383163014156116f95760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c16565b6027546001600160a01b03848116911614156117705760405162461bcd60e51b815260206004820152603060248201527f43616e2774207769746864726177204e6174697665204c5020746f6b656e732060448201526f1dda5d1a081d1a1a5cc81b595d1a1bd960821b6064820152608401610c16565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190613c3e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190613c57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146118c85760405162461bcd60e51b8152600401610c1690613b3c565b602754600160b01b900460ff16156119225760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610c16565b6027805460ff60b01b1916600160b01b17905561193f6001611ca4565b43601c55565b6000546001600160a01b0316331461196f5760405162461bcd60e51b8152600401610c1690613b3c565b60148490556015839055601682905560178190556103e881836119928688613c26565b61199c9190613c26565b6119a69190613c26565b11156119f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c16565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b038116611ad15760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c16565b600380546001600160a01b039081166000908152600a60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611221565b6000546001600160a01b03163314611b795760405162461bcd60e51b8152600401610c1690613b3c565b6027546001600160a01b0383811691161415611bfd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c16565b61116d8282612bb6565b6000610de23384610f2785604051806060016040528060258152602001613d59602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612aab565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610c1690613b3c565b611c89816111a7565b611c948160016115ca565b50565b6000610de233848461229c565b6000546001600160a01b03163314611cce5760405162461bcd60e51b8152600401610c1690613b3c565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061122190831515815260200190565b6000546001600160a01b03163314611d455760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b038116611d9b5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c16565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490602001611221565b6000546001600160a01b03163314611e135760405162461bcd60e51b8152600401610c1690613b3c565b60188490556019839055601a829055601b8190556105dc8183611e368688613c26565b611e409190613c26565b611e4a9190613c26565b1115611e985760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031352500006044820152606401610c16565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611a35565b600080546001600160a01b03163314611f085760405162461bcd60e51b8152600401610c1690613b3c565b506009805460ff19169055600190565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611221565b6000546001600160a01b03163314611fbd5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166120225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c16565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120a75760405162461bcd60e51b8152600401610c1690613b3c565b604051600090339047908381818185875af1925050503d80600081146120e9576040519150601f19603f3d011682016040523d82523d6000602084013e6120ee565b606091505b50505050565b6000610fb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c03565b6000610fb383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aab565b6001600160a01b0383166121da5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c16565b6001600160a01b03821661223b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c16565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c16565b6001600160a01b0382166123625760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c16565b600081116123c45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c16565b602754600160b01b900460ff16612460576001600160a01b0383166000908152600a602052604090205460ff168061241457506001600160a01b0382166000908152600a602052604090205460ff165b6124605760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c16565b600954610100900460ff1615612844576000546001600160a01b0384811691161480159061249c57506000546001600160a01b03838116911614155b80156124b057506001600160a01b03821615155b80156124c757506001600160a01b03821661dead14155b80156124dd5750602754600160a01b900460ff16155b801561250257506001600160a01b0382166000908152600a602052604090205460ff16155b801561252757506001600160a01b0383166000908152600a602052604090205460ff16155b156128445760225460ff16801561255657506001600160a01b03831660009081526024602052604090205460ff165b156125ad576023543a11156125ad5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c16565b60095460ff16156126d2576026546001600160a01b038381169116148015906125ef57506001600160a01b03821660009081526024602052604090205460ff16155b156126d257326000908152600860205260409020544311801561262957506001600160a01b03821660009081526008602052604090205443115b6126ad5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c16565b3260009081526008602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff16801561271357506001600160a01b03821660009081526021602052604090205460ff16155b1561278d576020548111156127885760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c16565b612844565b6001600160a01b03821660009081526024602052604090205460ff1680156127ce57506001600160a01b03831660009081526021602052604090205460ff16155b15612844576020548111156128445760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c16565b600061284f306114b1565b60255460275491925082101590600160a01b900460ff1615801561287c5750602754600160a81b900460ff165b801561289d575060275460009061289b906001600160a01b03166114b1565b115b80156128c257506001600160a01b0384166000908152600a602052604090205460ff16155b80156128e757506001600160a01b0385166000908152600a602052604090205460ff16155b801561290b57506001600160a01b03841660009081526024602052604090205460ff165b80156129145750805b1561292157612921612c31565b612929612eaf565b60036013556001600160a01b0385166000908152600a602052604090205460ff1615801561297057506001600160a01b0384166000908152600a602052604090205460ff16155b15612a885743601c541480156129c057506001600160a01b03841660009081526024602052604090205460ff16806129c057506001600160a01b03851660009081526024602052604090205460ff165b156129db57610258600f556124546011556002601355612a88565b6001600160a01b03851660009081526024602052604090205460ff1615612a3457601454600f55601754601654601554612a159190613c26565b612a1f9190613c26565b601181905515612a2f5760016013555b612a88565b6001600160a01b03841660009081526024602052604090205460ff1615612a8857601854600f55601b54601a54601954612a6e9190613c26565b612a789190613c26565b601181905515612a885760026013555b612a93858585612edd565b612aa4601054600f55601254601155565b5050505050565b60008184841115612acf5760405162461bcd60e51b8152600401610c169190613946565b506000612adc8486613bde565b95945050505050565b6000806000612af2612fdf565b9092509050612b0182826120f4565b9250505090565b600080612b158385613c26565b905083811015610fb35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c16565b6000806000806000806000806000612b7e8a613187565b9250925092506000806000612b9c8d8686612b97612ae5565b6131c9565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b038216600090815260246020908152604080832080548515801560ff199283168117909355602190945291909320805490911690921790915561116d5761116d826112c3565b60008183612c245760405162461bcd60e51b8152600401610c169190613946565b506000612adc8486613ba6565b6027805460ff60a01b1916600160a01b1790556000612c4f306114b1565b90506000601f54601e54601d54612c669190613c26565b612c709190613c26565b90506000602554600a612c839190613b87565b8310612c9a57602554612c9790600a613b87565b92505b821580612ca5575081155b15612cb257505050612ea0565b6000600283601d5486612cc59190613b87565b612ccf9190613ba6565b612cd99190613ba6565b90506000612ce78583612136565b905047612cf382613219565b6000612cff4783612136565b90506000612d336002601d54612d159190613ba6565b612d1f9089613bde565b601e54612d2d908590613373565b906120f4565b90506000612d616002601d54612d499190613ba6565b612d53908a613bde565b601f54612d2d908690613373565b9050600081612d708486613bde565b612d7a9190613bde565b6000601d819055601e819055601f5590508615801590612d9a5750600081115b15612deb57612da987826133f2565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6004546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612e38576040519150601f19603f3d011682016040523d82523d6000602084013e612e3d565b606091505b50506003546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114612e8d576040519150601f19603f3d011682016040523d82523d6000602084013e612e92565b606091505b505050505050505050505050505b6027805460ff60a01b19169055565b600f54158015612ebf5750601154155b15612ec657565b600f80546010556011805460125560009182905555565b6001600160a01b0383166000908152600b602052604090205460ff168015612f1e57506001600160a01b0382166000908152600b602052604090205460ff16155b15612f3357612f2e83838361349d565b505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015612f7457506001600160a01b0382166000908152600b602052604090205460ff165b15612f8457612f2e8383836135c3565b6001600160a01b0383166000908152600b602052604090205460ff168015612fc457506001600160a01b0382166000908152600b602052604090205460ff165b15612fd457612f2e83838361366c565b612f2e8383836136df565b600d5460009081906b1027e72f1f12813088000000825b600c54811015613144578260056000600c848154811061301857613018613bc8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061308357508160066000600c848154811061305c5761305c613bc8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130a2575050600d54936b1027e72f1f128130880000009350915050565b6130e860056000600c84815481106130bc576130bc613bc8565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612136565b925061313060066000600c848154811061310457613104613bc8565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612136565b91508061313c81613c0b565b915050612ff6565b50600d5461315e906b1027e72f1f128130880000006120f4565b82101561317e575050600d54926b1027e72f1f1281308800000092509050565b90939092509050565b60008060008061319685613723565b905060006131a386613740565b905060006131bb826131b58986612136565b90612136565b979296509094509092505050565b60008080806131d88886613373565b905060006131e68887613373565b905060006131f48888613373565b90506000613206826131b58686612136565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061324e5761324e613bc8565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cb9190613c74565b816001815181106132de576132de613bc8565b6001600160a01b0392831660209182029290920101526026546133049130911684612178565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac9479061333d908590600090869030904290600401613c91565b600060405180830381600087803b15801561335757600080fd5b505af115801561336b573d6000803e3d6000fd5b505050505050565b60008261338257506000610de6565b600061338e8385613b87565b90508261339b8583613ba6565b14610fb35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c16565b60265461340a9030906001600160a01b031684612178565b60265460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613478573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aa49190613d02565b6000806000806000806134af87612b67565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134e19088612136565b6001600160a01b038a166000908152600660209081526040808320939093556005905220546135109087612136565b6001600160a01b03808b1660009081526005602052604080822093909355908a168152205461353f9086612b08565b6001600160a01b0389166000908152600560205260409020556135618161375d565b61356b8483613922565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135b091815260200190565b60405180910390a3505050505050505050565b6000806000806000806135d587612b67565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506136079087612136565b6001600160a01b03808b16600090815260056020908152604080832094909455918b1681526006909152205461363d9084612b08565b6001600160a01b03891660009081526006602090815260408083209390935560059052205461353f9086612b08565b60008060008060008061367e87612b67565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136b09088612136565b6001600160a01b038a166000908152600660209081526040808320939093556005905220546136079087612136565b6000806000806000806136f187612b67565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506135109087612136565b6000610de6612710612d2d600f548561337390919063ffffffff16565b6000610de6612710612d2d6011548561337390919063ffffffff16565b600160135414156137fe576011546015546137789083613b87565b6137829190613ba6565b601d60008282546137939190613c26565b90915550506011546016546137a89083613b87565b6137b29190613ba6565b601e60008282546137c39190613c26565b90915550506011546017546137d89083613b87565b6137e29190613ba6565b601f60008282546137f39190613c26565b9091555061389a9050565b6002601354141561389a576011546019546138199083613b87565b6138239190613ba6565b601d60008282546138349190613c26565b9091555050601154601a546138499083613b87565b6138539190613ba6565b601e60008282546138649190613c26565b9091555050601154601b546138799083613b87565b6138839190613ba6565b601f60008282546138949190613c26565b90915550505b60006138a4612ae5565b905060006138b28383613373565b306000908152600560205260409020549091506138cf9082612b08565b30600090815260056020908152604080832093909355600b9052205460ff1615612f2e573060009081526006602052604090205461390d9084612b08565b30600090815260066020526040902055505050565b600d5461392f9083612136565b600d55600e5461393f9082612b08565b600e555050565b600060208083528351808285015260005b8181101561397357858101830151858201604001528201613957565b81811115613985576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156139ad57600080fd5b5035919050565b6001600160a01b0381168114611c9457600080fd5b600080604083850312156139dc57600080fd5b82356139e7816139b4565b946020939093013593505050565b600060208284031215613a0757600080fd5b8135610fb3816139b4565b600080600060608486031215613a2757600080fd5b8335613a32816139b4565b92506020840135613a42816139b4565b929592945050506040919091013590565b8015158114611c9457600080fd5b60008060408385031215613a7457600080fd5b823591506020830135613a8681613a53565b809150509250929050565b60008060408385031215613aa457600080fd5b8235613aaf816139b4565b91506020830135613a8681613a53565b60008060408385031215613ad257600080fd5b8235613add816139b4565b91506020830135613a86816139b4565b60008060008060808587031215613b0357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613b3157600080fd5b8135610fb381613a53565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ba157613ba1613b71565b500290565b600082613bc357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613bf057613bf0613b71565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613c1f57613c1f613b71565b5060010190565b60008219821115613c3957613c39613b71565b500190565b600060208284031215613c5057600080fd5b5051919050565b600060208284031215613c6957600080fd5b8151610fb381613a53565b600060208284031215613c8657600080fd5b8151610fb3816139b4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ce15784516001600160a01b031683529383019391830191600101613cbc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d1757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f0283011430bdf9426da531e4dc6869fa6e9e56e0b9d942167c328e7fc8b51d864736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638366e79a116101fd578063c49b9a8011610118578063dd62ed3e116100ab578063ea2f0b371161007a578063ea2f0b3714610b6b578063ee40166e14610b8b578063efcc52de14610ba1578063f2fde38b14610bb7578063f5648a4f14610bd757600080fd5b8063dd62ed3e14610ada578063e484485414610b20578063e653da0814610b36578063e884f26014610b5657600080fd5b8063c8c8ebe4116100e7578063c8c8ebe414610a78578063c9cf778914610a8e578063d0d41fe114610aa4578063dc44b6a014610ac457600080fd5b8063c49b9a8014610a12578063c5d2418914610a32578063c860795214610a48578063c876d0b914610a5e57600080fd5b80639a7a23d611610190578063a716b7731161015f578063a716b77314610981578063a9059cbb146109a1578063b62496f5146109c1578063bbc0c742146109f157600080fd5b80639a7a23d61461090c578063a073d37f1461092c578063a457c2d714610941578063a5ece9411461096157600080fd5b80638c5a133d116101cc5780638c5a133d146108815780638da5cb5b146108a1578063906e9dd0146108bf57806395d89b41146108df57600080fd5b80638366e79a146107fd57806388790a681461081d57806388f82020146108335780638a8c523c1461086c57600080fd5b80633ad10ef6116102ed5780635342acb41161028057806370a082311161024f57806370a0823114610793578063715018a6146107b3578063751039fc146107c85780637571336a146107dd57600080fd5b80635342acb41461071c578063557ed1ba14610755578063602bc62b14610768578063620158521461077d57600080fd5b806349bd5a5e116102bc57806349bd5a5e1461069c5780634a62bb65146106bc5780634a74bb02146106db57806352390c02146106fc57600080fd5b80633ad10ef6146106265780634047ea3e14610646578063437823ec1461065c5780634549b0391461067c57600080fd5b806318160ddd116103655780632d838119116103345780632d838119146105aa578063313ce567146105ca5780633685d419146105e6578063395093511461060657600080fd5b806318160ddd1461053f578063200a692d1461055e57806323b872dd1461057457806324171f321461059457600080fd5b8063106b5da1116103a1578063106b5da11461049857806310d5de53146104b857806313114a9d146104e85780631694505e1461050757600080fd5b806306fdde03146103de57806308043751146104265780630923160214610448578063095ea7b31461046857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b5060408051808201909152600d81526c273ab6b4b9a6b2902a37b5b2b760991b60208201525b60405161041d9190613946565b60405180910390f35b34801561043257600080fd5b5061044661044136600461399b565b610bec565b005b34801561045457600080fd5b5061044661046336600461399b565b610d46565b34801561047457600080fd5b506104886104833660046139c9565b610dd5565b604051901515815260200161041d565b3480156104a457600080fd5b506104466104b336600461399b565b610dec565b3480156104c457600080fd5b506104886104d33660046139f5565b60216020526000908152604090205460ff1681565b3480156104f457600080fd5b50600e545b60405190815260200161041d565b34801561051357600080fd5b50602654610527906001600160a01b031681565b6040516001600160a01b03909116815260200161041d565b34801561054b57600080fd5b506b1027e72f1f128130880000006104f9565b34801561056a57600080fd5b506104f960185481565b34801561058057600080fd5b5061048861058f366004613a12565b610ecd565b3480156105a057600080fd5b506104f9601e5481565b3480156105b657600080fd5b506104f96105c536600461399b565b610f36565b3480156105d657600080fd5b506040516012815260200161041d565b3480156105f257600080fd5b506104466106013660046139f5565b610fba565b34801561061257600080fd5b506104886106213660046139c9565b611171565b34801561063257600080fd5b50600454610527906001600160a01b031681565b34801561065257600080fd5b506104f9601d5481565b34801561066857600080fd5b506104466106773660046139f5565b6111a7565b34801561068857600080fd5b506104f9610697366004613a61565b61122c565b3480156106a857600080fd5b50602754610527906001600160a01b031681565b3480156106c857600080fd5b5060095461048890610100900460ff1681565b3480156106e757600080fd5b5060275461048890600160a81b900460ff1681565b34801561070857600080fd5b506104466107173660046139f5565b6112c3565b34801561072857600080fd5b506104886107373660046139f5565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561076157600080fd5b50426104f9565b34801561077457600080fd5b506002546104f9565b34801561078957600080fd5b506104f960175481565b34801561079f57600080fd5b506104f96107ae3660046139f5565b6114b1565b3480156107bf57600080fd5b50610446611510565b3480156107d457600080fd5b50610488611584565b3480156107e957600080fd5b506104466107f8366004613a91565b6115ca565b34801561080957600080fd5b50610488610818366004613abf565b61161f565b34801561082957600080fd5b506104f960195481565b34801561083f57600080fd5b5061048861084e3660046139f5565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561087857600080fd5b5061044661189e565b34801561088d57600080fd5b5061044661089c366004613aed565b611945565b3480156108ad57600080fd5b506000546001600160a01b0316610527565b3480156108cb57600080fd5b506104466108da3660046139f5565b611a43565b3480156108eb57600080fd5b506040805180820190915260048152634e554d4560e01b6020820152610410565b34801561091857600080fd5b50610446610927366004613a91565b611b4f565b34801561093857600080fd5b506025546104f9565b34801561094d57600080fd5b5061048861095c3660046139c9565b611c07565b34801561096d57600080fd5b50600354610527906001600160a01b031681565b34801561098d57600080fd5b5061044661099c3660046139f5565b611c56565b3480156109ad57600080fd5b506104886109bc3660046139c9565b611c97565b3480156109cd57600080fd5b506104886109dc3660046139f5565b60246020526000908152604090205460ff1681565b3480156109fd57600080fd5b5060275461048890600160b01b900460ff1681565b348015610a1e57600080fd5b50610446610a2d366004613b1f565b611ca4565b348015610a3e57600080fd5b506104f960165481565b348015610a5457600080fd5b506104f9601a5481565b348015610a6a57600080fd5b506009546104889060ff1681565b348015610a8457600080fd5b506104f960205481565b348015610a9a57600080fd5b506104f9601b5481565b348015610ab057600080fd5b50610446610abf3660046139f5565b611d1b565b348015610ad057600080fd5b506104f960155481565b348015610ae657600080fd5b506104f9610af5366004613abf565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b2c57600080fd5b506104f9601f5481565b348015610b4257600080fd5b50610446610b51366004613aed565b611de9565b348015610b6257600080fd5b50610488611edd565b348015610b7757600080fd5b50610446610b863660046139f5565b611f18565b348015610b9757600080fd5b506104f9601c5481565b348015610bad57600080fd5b506104f960145481565b348015610bc357600080fd5b50610446610bd23660046139f5565b611f93565b348015610be357600080fd5b5061044661207d565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610c1690613b3c565b60405180910390fd5b620186a0610c3a6b1027e72f1f128130880000006001613b87565b610c449190613ba6565b811015610cb15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c16565b6103e8610ccb6b1027e72f1f128130880000006005613b87565b610cd59190613ba6565b811115610d415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c16565b602555565b6000546001600160a01b03163314610d705760405162461bcd60e51b8152600401610c1690613b3c565b60fa811015610dc15760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420736574206761732074686973206c6f770000000000000000006044820152606401610c16565b610dcf81633b9aca00613b87565b60235550565b6000610de2338484612178565b5060015b92915050565b6000546001600160a01b03163314610e165760405162461bcd60e51b8152600401610c1690613b3c565b670de0b6b3a7640000612710610e396b1027e72f1f128130880000006001613b87565b610e439190613ba6565b610e4d9190613ba6565b811015610eb55760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526f6c6f776572207468616e20302e30312560801b6064820152608401610c16565b610ec781670de0b6b3a7640000613b87565b60205550565b6000610eda84848461229c565b610f2c8433610f2785604051806060016040528060288152602001613d31602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612aab565b612178565b5060019392505050565b6000600d54821115610f9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c16565b6000610fa7612ae5565b9050610fb383826120f4565b9392505050565b6000546001600160a01b03163314610fe45760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000908152600b602052604090205460ff1661104c5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c16565b60005b600c5481101561116d57816001600160a01b0316600c828154811061107657611076613bc8565b6000918252602090912001546001600160a01b0316141561115b57600c80546110a190600190613bde565b815481106110b1576110b1613bc8565b600091825260209091200154600c80546001600160a01b0390921691839081106110dd576110dd613bc8565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c80548061113557611135613bf5565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061116581613c0b565b91505061104f565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610de2918590610f279086612b08565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b1027e72f1f1281308800000083111561128a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c16565b816112a957600061129a84612b67565b50939550610de6945050505050565b60006112b484612b67565b50929550610de6945050505050565b6000546001600160a01b031633146112ed5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000908152600b602052604090205460ff16156113565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c16565b600c54601490611367906001613c26565b11156113f15760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203230206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c16565b6001600160a01b0381166000908152600560205260409020541561144b576001600160a01b03811660009081526005602052604090205461143190610f36565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156114ee57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610de690610f36565b6000546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610c1690613b3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146115af5760405162461bcd60e51b8152600401610c1690613b3c565b50600980546022805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146115f45760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461164a5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0383166116a05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c16565b6001600160a01b0383163014156116f95760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c16565b6027546001600160a01b03848116911614156117705760405162461bcd60e51b815260206004820152603060248201527f43616e2774207769746864726177204e6174697665204c5020746f6b656e732060448201526f1dda5d1a081d1a1a5cc81b595d1a1bd960821b6064820152608401610c16565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156117b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117db9190613c3e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190613c57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146118c85760405162461bcd60e51b8152600401610c1690613b3c565b602754600160b01b900460ff16156119225760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610c16565b6027805460ff60b01b1916600160b01b17905561193f6001611ca4565b43601c55565b6000546001600160a01b0316331461196f5760405162461bcd60e51b8152600401610c1690613b3c565b60148490556015839055601682905560178190556103e881836119928688613c26565b61199c9190613c26565b6119a69190613c26565b11156119f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c16565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b038116611ad15760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c16565b600380546001600160a01b039081166000908152600a60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611221565b6000546001600160a01b03163314611b795760405162461bcd60e51b8152600401610c1690613b3c565b6027546001600160a01b0383811691161415611bfd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c16565b61116d8282612bb6565b6000610de23384610f2785604051806060016040528060258152602001613d59602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612aab565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610c1690613b3c565b611c89816111a7565b611c948160016115ca565b50565b6000610de233848461229c565b6000546001600160a01b03163314611cce5760405162461bcd60e51b8152600401610c1690613b3c565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061122190831515815260200190565b6000546001600160a01b03163314611d455760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b038116611d9b5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c16565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490602001611221565b6000546001600160a01b03163314611e135760405162461bcd60e51b8152600401610c1690613b3c565b60188490556019839055601a829055601b8190556105dc8183611e368688613c26565b611e409190613c26565b611e4a9190613c26565b1115611e985760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031352500006044820152606401610c16565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611a35565b600080546001600160a01b03163314611f085760405162461bcd60e51b8152600401610c1690613b3c565b506009805460ff19169055600190565b6000546001600160a01b03163314611f425760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611221565b6000546001600160a01b03163314611fbd5760405162461bcd60e51b8152600401610c1690613b3c565b6001600160a01b0381166120225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c16565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120a75760405162461bcd60e51b8152600401610c1690613b3c565b604051600090339047908381818185875af1925050503d80600081146120e9576040519150601f19603f3d011682016040523d82523d6000602084013e6120ee565b606091505b50505050565b6000610fb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c03565b6000610fb383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aab565b6001600160a01b0383166121da5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c16565b6001600160a01b03821661223b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c16565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c16565b6001600160a01b0382166123625760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c16565b600081116123c45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c16565b602754600160b01b900460ff16612460576001600160a01b0383166000908152600a602052604090205460ff168061241457506001600160a01b0382166000908152600a602052604090205460ff165b6124605760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c16565b600954610100900460ff1615612844576000546001600160a01b0384811691161480159061249c57506000546001600160a01b03838116911614155b80156124b057506001600160a01b03821615155b80156124c757506001600160a01b03821661dead14155b80156124dd5750602754600160a01b900460ff16155b801561250257506001600160a01b0382166000908152600a602052604090205460ff16155b801561252757506001600160a01b0383166000908152600a602052604090205460ff16155b156128445760225460ff16801561255657506001600160a01b03831660009081526024602052604090205460ff165b156125ad576023543a11156125ad5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c16565b60095460ff16156126d2576026546001600160a01b038381169116148015906125ef57506001600160a01b03821660009081526024602052604090205460ff16155b156126d257326000908152600860205260409020544311801561262957506001600160a01b03821660009081526008602052604090205443115b6126ad5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c16565b3260009081526008602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526024602052604090205460ff16801561271357506001600160a01b03821660009081526021602052604090205460ff16155b1561278d576020548111156127885760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c16565b612844565b6001600160a01b03821660009081526024602052604090205460ff1680156127ce57506001600160a01b03831660009081526021602052604090205460ff16155b15612844576020548111156128445760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c16565b600061284f306114b1565b60255460275491925082101590600160a01b900460ff1615801561287c5750602754600160a81b900460ff165b801561289d575060275460009061289b906001600160a01b03166114b1565b115b80156128c257506001600160a01b0384166000908152600a602052604090205460ff16155b80156128e757506001600160a01b0385166000908152600a602052604090205460ff16155b801561290b57506001600160a01b03841660009081526024602052604090205460ff165b80156129145750805b1561292157612921612c31565b612929612eaf565b60036013556001600160a01b0385166000908152600a602052604090205460ff1615801561297057506001600160a01b0384166000908152600a602052604090205460ff16155b15612a885743601c541480156129c057506001600160a01b03841660009081526024602052604090205460ff16806129c057506001600160a01b03851660009081526024602052604090205460ff165b156129db57610258600f556124546011556002601355612a88565b6001600160a01b03851660009081526024602052604090205460ff1615612a3457601454600f55601754601654601554612a159190613c26565b612a1f9190613c26565b601181905515612a2f5760016013555b612a88565b6001600160a01b03841660009081526024602052604090205460ff1615612a8857601854600f55601b54601a54601954612a6e9190613c26565b612a789190613c26565b601181905515612a885760026013555b612a93858585612edd565b612aa4601054600f55601254601155565b5050505050565b60008184841115612acf5760405162461bcd60e51b8152600401610c169190613946565b506000612adc8486613bde565b95945050505050565b6000806000612af2612fdf565b9092509050612b0182826120f4565b9250505090565b600080612b158385613c26565b905083811015610fb35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c16565b6000806000806000806000806000612b7e8a613187565b9250925092506000806000612b9c8d8686612b97612ae5565b6131c9565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b038216600090815260246020908152604080832080548515801560ff199283168117909355602190945291909320805490911690921790915561116d5761116d826112c3565b60008183612c245760405162461bcd60e51b8152600401610c169190613946565b506000612adc8486613ba6565b6027805460ff60a01b1916600160a01b1790556000612c4f306114b1565b90506000601f54601e54601d54612c669190613c26565b612c709190613c26565b90506000602554600a612c839190613b87565b8310612c9a57602554612c9790600a613b87565b92505b821580612ca5575081155b15612cb257505050612ea0565b6000600283601d5486612cc59190613b87565b612ccf9190613ba6565b612cd99190613ba6565b90506000612ce78583612136565b905047612cf382613219565b6000612cff4783612136565b90506000612d336002601d54612d159190613ba6565b612d1f9089613bde565b601e54612d2d908590613373565b906120f4565b90506000612d616002601d54612d499190613ba6565b612d53908a613bde565b601f54612d2d908690613373565b9050600081612d708486613bde565b612d7a9190613bde565b6000601d819055601e819055601f5590508615801590612d9a5750600081115b15612deb57612da987826133f2565b60408051878152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6004546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612e38576040519150601f19603f3d011682016040523d82523d6000602084013e612e3d565b606091505b50506003546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114612e8d576040519150601f19603f3d011682016040523d82523d6000602084013e612e92565b606091505b505050505050505050505050505b6027805460ff60a01b19169055565b600f54158015612ebf5750601154155b15612ec657565b600f80546010556011805460125560009182905555565b6001600160a01b0383166000908152600b602052604090205460ff168015612f1e57506001600160a01b0382166000908152600b602052604090205460ff16155b15612f3357612f2e83838361349d565b505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015612f7457506001600160a01b0382166000908152600b602052604090205460ff165b15612f8457612f2e8383836135c3565b6001600160a01b0383166000908152600b602052604090205460ff168015612fc457506001600160a01b0382166000908152600b602052604090205460ff165b15612fd457612f2e83838361366c565b612f2e8383836136df565b600d5460009081906b1027e72f1f12813088000000825b600c54811015613144578260056000600c848154811061301857613018613bc8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061308357508160066000600c848154811061305c5761305c613bc8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130a2575050600d54936b1027e72f1f128130880000009350915050565b6130e860056000600c84815481106130bc576130bc613bc8565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612136565b925061313060066000600c848154811061310457613104613bc8565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612136565b91508061313c81613c0b565b915050612ff6565b50600d5461315e906b1027e72f1f128130880000006120f4565b82101561317e575050600d54926b1027e72f1f1281308800000092509050565b90939092509050565b60008060008061319685613723565b905060006131a386613740565b905060006131bb826131b58986612136565b90612136565b979296509094509092505050565b60008080806131d88886613373565b905060006131e68887613373565b905060006131f48888613373565b90506000613206826131b58686612136565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061324e5761324e613bc8565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156132a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cb9190613c74565b816001815181106132de576132de613bc8565b6001600160a01b0392831660209182029290920101526026546133049130911684612178565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac9479061333d908590600090869030904290600401613c91565b600060405180830381600087803b15801561335757600080fd5b505af115801561336b573d6000803e3d6000fd5b505050505050565b60008261338257506000610de6565b600061338e8385613b87565b90508261339b8583613ba6565b14610fb35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c16565b60265461340a9030906001600160a01b031684612178565b60265460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613478573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aa49190613d02565b6000806000806000806134af87612b67565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134e19088612136565b6001600160a01b038a166000908152600660209081526040808320939093556005905220546135109087612136565b6001600160a01b03808b1660009081526005602052604080822093909355908a168152205461353f9086612b08565b6001600160a01b0389166000908152600560205260409020556135618161375d565b61356b8483613922565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135b091815260200190565b60405180910390a3505050505050505050565b6000806000806000806135d587612b67565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506136079087612136565b6001600160a01b03808b16600090815260056020908152604080832094909455918b1681526006909152205461363d9084612b08565b6001600160a01b03891660009081526006602090815260408083209390935560059052205461353f9086612b08565b60008060008060008061367e87612b67565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136b09088612136565b6001600160a01b038a166000908152600660209081526040808320939093556005905220546136079087612136565b6000806000806000806136f187612b67565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506135109087612136565b6000610de6612710612d2d600f548561337390919063ffffffff16565b6000610de6612710612d2d6011548561337390919063ffffffff16565b600160135414156137fe576011546015546137789083613b87565b6137829190613ba6565b601d60008282546137939190613c26565b90915550506011546016546137a89083613b87565b6137b29190613ba6565b601e60008282546137c39190613c26565b90915550506011546017546137d89083613b87565b6137e29190613ba6565b601f60008282546137f39190613c26565b9091555061389a9050565b6002601354141561389a576011546019546138199083613b87565b6138239190613ba6565b601d60008282546138349190613c26565b9091555050601154601a546138499083613b87565b6138539190613ba6565b601e60008282546138649190613c26565b9091555050601154601b546138799083613b87565b6138839190613ba6565b601f60008282546138949190613c26565b90915550505b60006138a4612ae5565b905060006138b28383613373565b306000908152600560205260409020549091506138cf9082612b08565b30600090815260056020908152604080832093909355600b9052205460ff1615612f2e573060009081526006602052604090205461390d9084612b08565b30600090815260066020526040902055505050565b600d5461392f9083612136565b600d55600e5461393f9082612b08565b600e555050565b600060208083528351808285015260005b8181101561397357858101830151858201604001528201613957565b81811115613985576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156139ad57600080fd5b5035919050565b6001600160a01b0381168114611c9457600080fd5b600080604083850312156139dc57600080fd5b82356139e7816139b4565b946020939093013593505050565b600060208284031215613a0757600080fd5b8135610fb3816139b4565b600080600060608486031215613a2757600080fd5b8335613a32816139b4565b92506020840135613a42816139b4565b929592945050506040919091013590565b8015158114611c9457600080fd5b60008060408385031215613a7457600080fd5b823591506020830135613a8681613a53565b809150509250929050565b60008060408385031215613aa457600080fd5b8235613aaf816139b4565b91506020830135613a8681613a53565b60008060408385031215613ad257600080fd5b8235613add816139b4565b91506020830135613a86816139b4565b60008060008060808587031215613b0357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215613b3157600080fd5b8135610fb381613a53565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ba157613ba1613b71565b500290565b600082613bc357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613bf057613bf0613b71565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613c1f57613c1f613b71565b5060010190565b60008219821115613c3957613c39613b71565b500190565b600060208284031215613c5057600080fd5b5051919050565b600060208284031215613c6957600080fd5b8151610fb381613a53565b600060208284031215613c8657600080fd5b8151610fb3816139b4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ce15784516001600160a01b031683529383019391830191600101613cbc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d1757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f0283011430bdf9426da531e4dc6869fa6e9e56e0b9d942167c328e7fc8b51d864736f6c634300080b0033

Deployed Bytecode Sourcemap

8408:31925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15105:85;;;;;;;;;;-1:-1:-1;15177:5:0;;;;;;;;;;;;-1:-1:-1;;;15177:5:0;;;;15105:85;;;;;;;:::i;:::-;;;;;;;;19066:343;;;;;;;;;;-1:-1:-1;19066:343:0;;;;;:::i;:::-;;:::i;:::-;;20151:162;;;;;;;;;;-1:-1:-1;20151:162:0;;;;;:::i;:::-;;:::i;16102:193::-;;;;;;;;;;-1:-1:-1;16102:193:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;16102:193:0;1257:187:1;19417:227:0;;;;;;;;;;-1:-1:-1;19417:227:0;;;;;:::i;:::-;;:::i;10503:64::-;;;;;;;;;;-1:-1:-1;10503:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17641:89;;;;;;;;;;-1:-1:-1;17712:10:0;;17641:89;;;1847:25:1;;;1835:2;1820:18;17641:89:0;1701:177:1;10981:41:0;;;;;;;;;;-1:-1:-1;10981:41:0;;;;-1:-1:-1;;;;;10981:41:0;;;;;;-1:-1:-1;;;;;2073:32:1;;;2055:51;;2043:2;2028:18;10981:41:0;1883:229:1;15388:97:0;;;;;;;;;;-1:-1:-1;9302:14:0;15388:97;;10072:32;;;;;;;;;;;;;;;;16303:448;;;;;;;;;;-1:-1:-1;16303:448:0;;;;;:::i;:::-;;:::i;10373:37::-;;;;;;;;;;;;;;;;20810:322;;;;;;;;;;-1:-1:-1;20810:322:0;;;;;:::i;:::-;;:::i;15295:85::-;;;;;;;;;;-1:-1:-1;15295:85:0;;9550:2;2720:36:1;;2708:2;2693:18;15295:85:0;2578:184:1;21607:471:0;;;;;;;;;;-1:-1:-1;21607:471:0;;;;;:::i;:::-;;:::i;16759:302::-;;;;;;;;;;-1:-1:-1;16759:302:0;;;;;:::i;:::-;;:::i;8573:33::-;;;;;;;;;;-1:-1:-1;8573:33:0;;;;-1:-1:-1;;;;;8573:33:0;;;10329:37;;;;;;;;;;;;;;;;37201:150;;;;;;;;;;-1:-1:-1;37201:150:0;;;;;:::i;:::-;;:::i;20321:481::-;;;;;;;;;;-1:-1:-1;20321:481:0;;;;;:::i;:::-;;:::i;11029:28::-;;;;;;;;;;-1:-1:-1;11029:28:0;;;;-1:-1:-1;;;;;11029:28:0;;;9025:33;;;;;;;;;;-1:-1:-1;9025:33:0;;;;;;;;;;;11094:41;;;;;;;;;;-1:-1:-1;11094:41:0;;;;-1:-1:-1;;;11094:41:0;;;;;;21140:459;;;;;;;;;;-1:-1:-1;21140:459:0;;;;;:::i;:::-;;:::i;37067:126::-;;;;;;;;;;-1:-1:-1;37067:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;37158:27:0;37134:4;37158:27;;;:18;:27;;;;;;;;;37067:126;7209:90;;;;;;;;;;-1:-1:-1;7276:15:0;7209:90;;7111;;;;;;;;;;-1:-1:-1;7184:9:0;;7111:90;;10032:31;;;;;;;;;;;;;;;;15493:198;;;;;;;;;;-1:-1:-1;15493:198:0;;;;;:::i;:::-;;:::i;6666:148::-;;;;;;;;;;;;;:::i;17802:192::-;;;;;;;;;;;;;:::i;18425:144::-;;;;;;;;;;-1:-1:-1;18425:144:0;;;;;:::i;:::-;;:::i;39522:592::-;;;;;;;;;;-1:-1:-1;39522:592:0;;;;;:::i;:::-;;:::i;10111:38::-;;;;;;;;;;;;;;;;17479:154;;;;;;;;;;-1:-1:-1;17479:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;17605:20:0;17576:4;17605:20;;;:11;:20;;;;;;;;;17479:154;18627:230;;;;;;;;;;;;;:::i;37516:516::-;;;;;;;;;;-1:-1:-1;37516:516:0;;;;;:::i;:::-;;:::i;6452:79::-;;;;;;;;;;-1:-1:-1;6490:7:0;6517:6;-1:-1:-1;;;;;6517:6:0;6452:79;;38591:398;;;;;;;;;;-1:-1:-1;38591:398:0;;;;;:::i;:::-;;:::i;15198:89::-;;;;;;;;;;-1:-1:-1;15272:7:0;;;;;;;;;;;;-1:-1:-1;;;15272:7:0;;;;15198:89;;19656:244;;;;;;;;;;-1:-1:-1;19656:244:0;;;;;:::i;:::-;;:::i;18873:122::-;;;;;;;;;;-1:-1:-1;18964:23:0;;18873:122;;17069:402;;;;;;;;;;-1:-1:-1;17069:402:0;;;;;:::i;:::-;;:::i;8527:39::-;;;;;;;;;;-1:-1:-1;8527:39:0;;;;-1:-1:-1;;;;;8527:39:0;;;18043:193;;;;;;;;;;-1:-1:-1;18043:193:0;;;;;:::i;:::-;;:::i;15699:201::-;;;;;;;;;;-1:-1:-1;15699:201:0;;;;;:::i;:::-;;:::i;10866:58::-;;;;;;;;;;-1:-1:-1;10866:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11142:33;;;;;;;;;;-1:-1:-1;11142:33:0;;;;-1:-1:-1;;;11142:33:0;;;;;;39248:171;;;;;;;;;;-1:-1:-1;39248:171:0;;;;;:::i;:::-;;:::i;9988:37::-;;;;;;;;;;;;;;;;10156:38;;;;;;;;;;;;;;;;8979:39;;;;;;;;;;-1:-1:-1;8979:39:0;;;;;;;;10461:35;;;;;;;;;;;;;;;;10201:32;;;;;;;;;;;;;;;;38997:239;;;;;;;;;;-1:-1:-1;38997:239:0;;;;;:::i;:::-;;:::i;9944:37::-;;;;;;;;;;;;;;;;15908:186;;;;;;;;;;-1:-1:-1;15908:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;16059:18:0;;;16027:7;16059:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15908:186;10417:31;;;;;;;;;;;;;;;;38040:539;;;;;;;;;;-1:-1:-1;38040:539:0;;;;;:::i;:::-;;:::i;18279:134::-;;;;;;;;;;;;;:::i;37359:149::-;;;;;;;;;;-1:-1:-1;37359:149:0;;;;;:::i;:::-;;:::i;10246:37::-;;;;;;;;;;;;;;;;9906:31;;;;;;;;;;;;;;;;6822:281;;;;;;;;;;-1:-1:-1;6822:281:0;;;;;:::i;:::-;;:::i;40170:160::-;;;;;;;;;;;;;:::i;19066:343::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;;;;;;;;;19187:6:::1;19173:11;9302:14;19183:1;19173:11;:::i;:::-;:20;;;;:::i;:::-;19160:9;:33;;19152:99;;;::::0;-1:-1:-1;;;19152:99:0;;6142:2:1;19152:99:0::1;::::0;::::1;6124:21:1::0;6181:2;6161:18;;;6154:30;6220:34;6200:18;;;6193:62;-1:-1:-1;;;6271:18:1;;;6264:51;6332:19;;19152:99:0::1;5940:417:1::0;19152:99:0::1;19296:4;19282:11;9302:14;19292:1;19282:11;:::i;:::-;:18;;;;:::i;:::-;19269:9;:31;;19261:96;;;::::0;-1:-1:-1;;;19261:96:0;;6564:2:1;19261:96:0::1;::::0;::::1;6546:21:1::0;6603:2;6583:18;;;6576:30;6642:34;6622:18;;;6615:62;-1:-1:-1;;;6693:18:1;;;6686:50;6753:19;;19261:96:0::1;6362:416:1::0;19261:96:0::1;19367:23;:35:::0;19066:343::o;20151:162::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;20235:3:::1;20228;:10;;20220:46;;;::::0;-1:-1:-1;;;20220:46:0;;6985:2:1;20220:46:0::1;::::0;::::1;6967:21:1::0;7024:2;7004:18;;;6997:30;7063:25;7043:18;;;7036:53;7106:18;;20220:46:0::1;6783:347:1::0;20220:46:0::1;20293:12;:3:::0;20299:6:::1;20293:12;:::i;:::-;20277:13;:28:::0;-1:-1:-1;20151:162:0:o;16102:193::-;16204:4;16226:39;191:10;16249:7;16258:6;16226:8;:39::i;:::-;-1:-1:-1;16283:4:0;16102:193;;;;;:::o;19417:227::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;19528:4:::1;19521:5;19507:11;9302:14;19517:1;19507:11;:::i;:::-;:19;;;;:::i;:::-;19506:26;;;;:::i;:::-;19496:6;:36;;19488:97;;;::::0;-1:-1:-1;;;19488:97:0;;7337:2:1;19488:97:0::1;::::0;::::1;7319:21:1::0;7376:2;7356:18;;;7349:30;7415:34;7395:18;;;7388:62;-1:-1:-1;;;7466:18:1;;;7459:46;7522:19;;19488:97:0::1;7135:412:1::0;19488:97:0::1;19619:17;:6:::0;19629::::1;19619:17;:::i;:::-;19596:20;:40:::0;-1:-1:-1;19417:227:0:o;16303:448::-;16437:4;16454:36;16464:6;16472:9;16483:6;16454:9;:36::i;:::-;16501:220;16524:6;191:10;16572:138;16628:6;16572:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16572:19:0;;;;;;:11;:19;;;;;;;;191:10;16572:33;;;;;;;;;;:37;:138::i;:::-;16501:8;:220::i;:::-;-1:-1:-1;16739:4:0;16303:448;;;;;:::o;20810:322::-;20904:7;20962;;20951;:18;;20929:110;;;;-1:-1:-1;;;20929:110:0;;7754:2:1;20929:110:0;;;7736:21:1;7793:2;7773:18;;;7766:30;7832:34;7812:18;;;7805:62;-1:-1:-1;;;7883:18:1;;;7876:40;7933:19;;20929:110:0;7552:406:1;20929:110:0;21050:19;21072:10;:8;:10::i;:::-;21050:32;-1:-1:-1;21100:24:0;:7;21050:32;21100:11;:24::i;:::-;21093:31;20810:322;-1:-1:-1;;;20810:322:0:o;21607:471::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21685:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21677:56;;;::::0;-1:-1:-1;;;21677:56:0;;8165:2:1;21677:56:0::1;::::0;::::1;8147:21:1::0;8204:2;8184:18;;;8177:30;8243:25;8223:18;;;8216:53;8286:18;;21677:56:0::1;7963:347:1::0;21677:56:0::1;21749:9;21744:327;21768:9;:16:::0;21764:20;::::1;21744:327;;;21826:7;-1:-1:-1::0;;;;;21810:23:0::1;:9;21820:1;21810:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21810:12:0::1;:23;21806:254;;;21869:9;21879:16:::0;;:20:::1;::::0;21898:1:::1;::::0;21879:20:::1;:::i;:::-;21869:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21854:9:::1;:12:::0;;-1:-1:-1;;;;;21869:31:0;;::::1;::::0;21864:1;;21854:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21854:46:0::1;-1:-1:-1::0;;;;;21854:46:0;;::::1;;::::0;;21919:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21958:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21958:28:0::1;::::0;;22005:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22005:15:0;;;;;-1:-1:-1;;;;;;22005:15:0::1;::::0;;;;;21744:327:::1;21607:471:::0;:::o;21806:254::-:1;21786:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21744:327;;;;21607:471:::0;:::o;16759:302::-;191:10;16876:4;16970:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16970:34:0;;;;;;;;;;16876:4;;16898:133;;16948:7;;16970:50;;17009:10;16970:38;:50::i;37201:150::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37270:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;37270:34:0::1;37300:4;37270:34;::::0;;37320:23;;2055:51:1;;;37320:23:0::1;::::0;2028:18:1;37320:23:0::1;;;;;;;;37201:150:::0;:::o;20321:481::-;20441:7;9302:14;20474:7;:18;;20466:62;;;;-1:-1:-1;;;20466:62:0;;9051:2:1;20466:62:0;;;9033:21:1;9090:2;9070:18;;;9063:30;9129:33;9109:18;;;9102:61;9180:18;;20466:62:0;8849:355:1;20466:62:0;20544:17;20539:256;;20579:15;20608:19;20619:7;20608:10;:19::i;:::-;-1:-1:-1;20578:49:0;;-1:-1:-1;20642:14:0;;-1:-1:-1;;;;;20642:14:0;20539:256;20692:23;20727:19;20738:7;20727:10;:19::i;:::-;-1:-1:-1;20689:57:0;;-1:-1:-1;20761:22:0;;-1:-1:-1;;;;;20761:22:0;21140:459;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21221:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21220:21;21212:61;;;::::0;-1:-1:-1;;;21212:61:0;;9411:2:1;21212:61:0::1;::::0;::::1;9393:21:1::0;9450:2;9430:18;;;9423:30;9489:29;9469:18;;;9462:57;9536:18;;21212:61:0::1;9209:351:1::0;21212:61:0::1;21292:9;:16:::0;21316:2:::1;::::0;21292:20:::1;::::0;21311:1:::1;21292:20;:::i;:::-;:26;;21284:116;;;::::0;-1:-1:-1;;;21284:116:0;;9900:2:1;21284:116:0::1;::::0;::::1;9882:21:1::0;9939:2;9919:18;;;9912:30;9978:34;9958:18;;;9951:62;10049:34;10029:18;;;10022:62;-1:-1:-1;;;10100:19:1;;;10093:44;10154:19;;21284:116:0::1;9698:481:1::0;21284:116:0::1;-1:-1:-1::0;;;;;21415:16:0;::::1;21434:1;21415:16:::0;;;:7:::1;:16;::::0;;;;;:20;21411:109:::1;;-1:-1:-1::0;;;;;21491:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21471:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21452:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21411:109:::1;-1:-1:-1::0;;;;;21530:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21530:27:0::1;21553:4;21530:27:::0;;::::1;::::0;;;21568:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21568:23:0::1;::::0;;::::1;::::0;;21140:459::o;15493:198::-;-1:-1:-1;;;;;15583:20:0;;15559:7;15583:20;;;:11;:20;;;;;;;;15579:49;;;-1:-1:-1;;;;;;15612:16:0;;;;;:7;:16;;;;;;;15493:198::o;15579:49::-;-1:-1:-1;;;;;15666:16:0;;;;;;:7;:16;;;;;;15646:37;;:19;:37::i;6666:148::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;6773:1:::1;6757:6:::0;;6736:40:::1;::::0;-1:-1:-1;;;;;6757:6:0;;::::1;::::0;6736:40:::1;::::0;6773:1;;6736:40:::1;6804:1;6787:19:::0;;-1:-1:-1;;;;;;6787:19:0::1;::::0;;6666:148::o;17802:192::-;17854:4;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;17870:14:0::1;:22:::0;;17903:14:::1;:22:::0;;-1:-1:-1;;17903:22:0::1;::::0;;-1:-1:-1;;17936:28:0;;;17870:14:::1;17802:192:::0;:::o;18425:144::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18515:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18515:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18425:144::o;39522:592::-;39636:10;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39672:20:0;::::1;39664:59;;;::::0;-1:-1:-1;;;39664:59:0;;10386:2:1;39664:59:0::1;::::0;::::1;10368:21:1::0;10425:2;10405:18;;;10398:30;10464:28;10444:18;;;10437:56;10510:18;;39664:59:0::1;10184:350:1::0;39664:59:0::1;-1:-1:-1::0;;;;;39742:23:0;::::1;39760:4;39742:23;;39734:64;;;::::0;-1:-1:-1;;;39734:64:0;;10741:2:1;39734:64:0::1;::::0;::::1;10723:21:1::0;10780:2;10760:18;;;10753:30;10819;10799:18;;;10792:58;10867:18;;39734:64:0::1;10539:352:1::0;39734:64:0::1;39835:13;::::0;-1:-1:-1;;;;;39817:32:0;;::::1;39835:13:::0;::::1;39817:32;;39809:93;;;::::0;-1:-1:-1;;;39809:93:0;;11098:2:1;39809:93:0::1;::::0;::::1;11080:21:1::0;11137:2;11117:18;;;11110:30;11176:34;11156:18;;;11149:62;-1:-1:-1;;;11227:18:1;;;11220:46;11283:19;;39809:93:0::1;10896:412:1::0;39809:93:0::1;39940:39;::::0;-1:-1:-1;;;39940:39:0;;39973:4:::1;39940:39;::::0;::::1;2055:51:1::0;39913:24:0::1;::::0;-1:-1:-1;;;;;39940:24:0;::::1;::::0;::::1;::::0;2028:18:1;;39940:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39998:46;::::0;-1:-1:-1;;;39998:46:0;;-1:-1:-1;;;;;11694:32:1;;;39998:46:0::1;::::0;::::1;11676:51:1::0;11743:18;;;11736:34;;;39913:66:0;;-1:-1:-1;39998:23:0;;::::1;::::0;::::1;::::0;11649:18:1;;39998:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40060;::::0;;-1:-1:-1;;;;;11694:32:1;;11676:51;;11758:2;11743:18;;11736:34;;;39990:54:0;;-1:-1:-1;40060:46:0::1;::::0;11649:18:1;40060:46:0::1;;;;;;;39653:461;39522:592:::0;;;;:::o;18627:230::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;18691:13:::1;::::0;-1:-1:-1;;;18691:13:0;::::1;;;18690:14;18682:51;;;::::0;-1:-1:-1;;;18682:51:0;;12233:2:1;18682:51:0::1;::::0;::::1;12215:21:1::0;12272:2;12252:18;;;12245:30;12311:26;12291:18;;;12284:54;12355:18;;18682:51:0::1;12031:348:1::0;18682:51:0::1;18744:13;:20:::0;;-1:-1:-1;;;;18744:20:0::1;-1:-1:-1::0;;;18744:20:0::1;::::0;;18775:30:::1;18760:4;18775:24;:30::i;:::-;18837:12;18816:18;:33:::0;18627:230::o;37516:516::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;37676:10:::1;:22:::0;;;37709:16:::1;:34:::0;;;37754:16:::1;:34:::0;;;37799:10:::1;:22:::0;;;37905:4:::1;37812:9:::0;37773:15;37840:29:::1;37728:15:::0;37689:9;37840:29:::1;:::i;:::-;:48;;;;:::i;:::-;:61;;;;:::i;:::-;:69;;37832:111;;;::::0;-1:-1:-1;;;37832:111:0;;12586:2:1;37832:111:0::1;::::0;::::1;12568:21:1::0;12625:2;12605:18;;;12598:30;12664:31;12644:18;;;12637:59;12713:18;;37832:111:0::1;12384:353:1::0;37832:111:0::1;37959:65;::::0;;12973:25:1;;;13029:2;13014:18;;13007:34;;;13057:18;;;13050:34;;;13115:2;13100:18;;13093:34;;;37959:65:0::1;::::0;12960:3:1;12945:19;37959:65:0::1;;;;;;;;37516:516:::0;;;;:::o;38591:398::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38685:31:0;::::1;38677:81;;;::::0;-1:-1:-1;;;38677:81:0;;13340:2:1;38677:81:0::1;::::0;::::1;13322:21:1::0;13379:2;13359:18;;;13352:30;13418:34;13398:18;;;13391:62;-1:-1:-1;;;13469:18:1;;;13462:35;13514:19;;38677:81:0::1;13138:401:1::0;38677:81:0::1;38788:16;::::0;;-1:-1:-1;;;;;38788:16:0;;::::1;38808:5;38769:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;38769:44:0;;::::1;::::0;;;38824:45;;-1:-1:-1;;;;;;38824:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;38880:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;38880:43:0::1;::::0;;;38939:42;2055:51:1;;;38939:42:0::1;::::0;2028:18:1;38939:42:0::1;1883:229:1::0;19656:244:0;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;19763:13:::1;::::0;-1:-1:-1;;;;;19755:21:0;;::::1;19763:13:::0;::::1;19755:21;;19747:91;;;::::0;-1:-1:-1;;;19747:91:0;;13746:2:1;19747:91:0::1;::::0;::::1;13728:21:1::0;13785:2;13765:18;;;13758:30;13824:34;13804:18;;;13797:62;13895:27;13875:18;;;13868:55;13940:19;;19747:91:0::1;13544:421:1::0;19747:91:0::1;19851:41;19880:4;19886:5;19851:28;:41::i;17069:402::-:0;17191:4;17213:228;191:10;17263:7;17285:145;17342:15;17285:145;;;;;;;;;;;;;;;;;191:10;17285:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17285:34:0;;;;;;;;;;;;:38;:145::i;18043:193::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;18138:31:::1;18153:15;18138:14;:31::i;:::-;18180:48;18206:15;18223:4;18180:25;:48::i;:::-;18043:193:::0;:::o;15699:201::-;15806:4;15828:42;191:10;15852:9;15863:6;15828:9;:42::i;39248:171::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;39325:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39325:32:0::1;-1:-1:-1::0;;;;39325:32:0;;::::1;;::::0;;39373:38:::1;::::0;::::1;::::0;::::1;::::0;39349:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;38997:239:0;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39077:25:0;::::1;39069:69;;;::::0;-1:-1:-1;;;39069:69:0;;14172:2:1;39069:69:0::1;::::0;::::1;14154:21:1::0;14211:2;14191:18;;;14184:30;14250:33;14230:18;;;14223:61;14301:18;;39069:69:0::1;13970:355:1::0;39069:69:0::1;39149:10;:33:::0;;-1:-1:-1;;;;;;39149:33:0::1;-1:-1:-1::0;;;;;39149:33:0;::::1;::::0;;::::1;::::0;;;39198:30:::1;::::0;2055:51:1;;;39198:30:0::1;::::0;2043:2:1;2028:18;39198:30:0::1;1883:229:1::0;38040:539:0;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;38205:11:::1;:24:::0;;;38240:17:::1;:36:::0;;;38287:17:::1;:36:::0;;;38334:11:::1;:24:::0;;;38446:4:::1;38348:10:::0;38307:16;38377:31:::1;38260:16:::0;38219:10;38377:31:::1;:::i;:::-;:51;;;;:::i;:::-;:65;;;;:::i;:::-;:73;;38369:116;;;::::0;-1:-1:-1;;;38369:116:0;;14532:2:1;38369:116:0::1;::::0;::::1;14514:21:1::0;14571:2;14551:18;;;14544:30;14610:32;14590:18;;;14583:60;14660:18;;38369:116:0::1;14330:354:1::0;38369:116:0::1;38501:70;::::0;;12973:25:1;;;13029:2;13014:18;;13007:34;;;13057:18;;;13050:34;;;13115:2;13100:18;;13093:34;;;38501:70:0::1;::::0;12960:3:1;12945:19;38501:70:0::1;12742:391:1::0;18279:134:0;18339:4;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;18355:20:0::1;:28:::0;;-1:-1:-1;;18355:28:0::1;::::0;;;18279:134;:::o;37359:149::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37428:27:0;::::1;37458:5;37428:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;37428:35:0::1;::::0;;37479:21;;2055:51:1;;;37479:21:0::1;::::0;2028:18:1;37479:21:0::1;1883:229:1::0;6822:281:0;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6925:22:0;::::1;6903:110;;;::::0;-1:-1:-1;;;6903:110:0;;14891:2:1;6903:110:0::1;::::0;::::1;14873:21:1::0;14930:2;14910:18;;;14903:30;14969:34;14949:18;;;14942:62;-1:-1:-1;;;15020:18:1;;;15013:36;15066:19;;6903:110:0::1;14689:402:1::0;6903:110:0::1;7050:6;::::0;;7029:38:::1;::::0;-1:-1:-1;;;;;7029:38:0;;::::1;::::0;7050:6;::::1;::::0;7029:38:::1;::::0;::::1;7078:6;:17:::0;;-1:-1:-1;;;;;;7078:17:0::1;-1:-1:-1::0;;;;;7078:17:0;;;::::1;::::0;;;::::1;::::0;;6822:281::o;40170:160::-;6579:6;;-1:-1:-1;;;;;6579:6:0;191:10;6579:22;6571:67;;;;-1:-1:-1;;;6571:67:0;;;;;;;:::i;:::-;40264:58:::1;::::0;40228:12:::1;::::0;40272:10:::1;::::0;40296:21:::1;::::0;40228:12;40264:58;40228:12;40264:58;40296:21;40272:10;40264:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;40170:160:0:o;2109:132::-;2167:7;2194:39;2198:1;2201;2194:39;;;;;;;;;;;;;;;;;:3;:39::i;1473:136::-;1531:7;1558:43;1562:1;1565;1558:43;;;;;;;;;;;;;;;;;:3;:43::i;22087:371::-;-1:-1:-1;;;;;22214:19:0;;22206:68;;;;-1:-1:-1;;;22206:68:0;;15508:2:1;22206:68:0;;;15490:21:1;15547:2;15527:18;;;15520:30;15586:34;15566:18;;;15559:62;-1:-1:-1;;;15637:18:1;;;15630:34;15681:19;;22206:68:0;15306:400:1;22206:68:0;-1:-1:-1;;;;;22293:21:0;;22285:68;;;;-1:-1:-1;;;22285:68:0;;15913:2:1;22285:68:0;;;15895:21:1;15952:2;15932:18;;;15925:30;15991:34;15971:18;;;15964:62;-1:-1:-1;;;16042:18:1;;;16035:32;16084:19;;22285:68:0;15711:398:1;22285:68:0;-1:-1:-1;;;;;22366:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22418:32;;1847:25:1;;;22418:32:0;;1820:18:1;22418:32:0;;;;;;;22087:371;;;:::o;22466:4069::-;-1:-1:-1;;;;;22588:18:0;;22580:68;;;;-1:-1:-1;;;22580:68:0;;16316:2:1;22580:68:0;;;16298:21:1;16355:2;16335:18;;;16328:30;16394:34;16374:18;;;16367:62;-1:-1:-1;;;16445:18:1;;;16438:35;16490:19;;22580:68:0;16114:401:1;22580:68:0;-1:-1:-1;;;;;22667:16:0;;22659:64;;;;-1:-1:-1;;;22659:64:0;;16722:2:1;22659:64:0;;;16704:21:1;16761:2;16741:18;;;16734:30;16800:34;16780:18;;;16773:62;-1:-1:-1;;;16851:18:1;;;16844:33;16894:19;;22659:64:0;16520:399:1;22659:64:0;22751:1;22742:6;:10;22734:64;;;;-1:-1:-1;;;22734:64:0;;17126:2:1;22734:64:0;;;17108:21:1;17165:2;17145:18;;;17138:30;17204:34;17184:18;;;17177:62;-1:-1:-1;;;17255:18:1;;;17248:39;17304:19;;22734:64:0;16924:405:1;22734:64:0;22823:13;;-1:-1:-1;;;22823:13:0;;;;22819:134;;-1:-1:-1;;;;;22860:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22888:22:0;;;;;;:18;:22;;;;;;;;22860:50;22852:89;;;;-1:-1:-1;;;22852:89:0;;17536:2:1;22852:89:0;;;17518:21:1;17575:2;17555:18;;;17548:30;17614:28;17594:18;;;17587:56;17660:18;;22852:89:0;17334:350:1;22852:89:0;22969:14;;;;;;;22966:1877;;;6490:7;6517:6;-1:-1:-1;;;;;23021:15:0;;;6517:6;;23021:15;;;;:49;;-1:-1:-1;6490:7:0;6517:6;-1:-1:-1;;;;;23057:13:0;;;6517:6;;23057:13;;23021:49;:86;;;;-1:-1:-1;;;;;;23091:16:0;;;;23021:86;:128;;;;-1:-1:-1;;;;;;23128:21:0;;23142:6;23128:21;;23021:128;:166;;;;-1:-1:-1;23171:16:0;;-1:-1:-1;;;23171:16:0;;;;23170:17;23021:166;:211;;;;-1:-1:-1;;;;;;23210:22:0;;;;;;:18;:22;;;;;;;;23209:23;23021:211;:257;;;;-1:-1:-1;;;;;;23254:24:0;;;;;;:18;:24;;;;;;;;23253:25;23021:257;22999:1833;;;23405:14;;;;:49;;;;-1:-1:-1;;;;;;23423:31:0;;;;;;:25;:31;;;;;;;;23405:49;23401:163;;;23502:13;;23487:11;:28;;23479:65;;;;-1:-1:-1;;;23479:65:0;;17891:2:1;23479:65:0;;;17873:21:1;17930:2;17910:18;;;17903:30;17969:26;17949:18;;;17942:54;18013:18;;23479:65:0;17689:348:1;23479:65:0;23738:20;;;;23734:533;;;23800:15;;-1:-1:-1;;;;;23786:30:0;;;23800:15;;23786:30;;;;:64;;-1:-1:-1;;;;;;23821:29:0;;;;;;:25;:29;;;;;;;;23820:30;23786:64;23782:466;;;23915:9;23886:39;;;;:28;:39;;;;;;23928:12;-1:-1:-1;23886:105:0;;;;-1:-1:-1;;;;;;23944:32:0;;;;;;:28;:32;;;;;;23979:12;-1:-1:-1;23886:105:0;23878:191;;;;-1:-1:-1;;;23878:191:0;;18244:2:1;23878:191:0;;;18226:21:1;18283:2;18263:18;;;18256:30;18322:34;18302:18;;;18295:62;18393:34;18373:18;;;18366:62;-1:-1:-1;;;18444:19:1;;;18437:40;18494:19;;23878:191:0;18042:477:1;23878:191:0;24125:9;24096:39;;;;:28;:39;;;;;;24138:12;24096:54;;;;-1:-1:-1;;;;;24177:32:0;;;;;;:47;23782:466;-1:-1:-1;;;;;24335:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24371:35:0;;;;;;:31;:35;;;;;;;;24370:36;24335:71;24331:486;;;24449:20;;24439:6;:30;;24431:96;;;;-1:-1:-1;;;24431:96:0;;18726:2:1;24431:96:0;;;18708:21:1;18765:2;18745:18;;;18738:30;18804:34;18784:18;;;18777:62;-1:-1:-1;;;18855:18:1;;;18848:51;18916:19;;24431:96:0;18524:417:1;24431:96:0;24331:486;;;-1:-1:-1;;;;;24604:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24638:37:0;;;;;;:31;:37;;;;;;;;24637:38;24604:71;24600:217;;;24718:20;;24708:6;:30;;24700:97;;;;-1:-1:-1;;;24700:97:0;;19148:2:1;24700:97:0;;;19130:21:1;19187:2;19167:18;;;19160:30;19226:34;19206:18;;;19199:62;-1:-1:-1;;;19277:18:1;;;19270:52;19339:19;;24700:97:0;18946:418:1;24700:97:0;24855:28;24886:24;24904:4;24886:9;:24::i;:::-;24976:23;;25060:16;;24855:55;;-1:-1:-1;24952:47:0;;;;-1:-1:-1;;;25060:16:0;;;;25059:17;:55;;;;-1:-1:-1;25093:21:0;;-1:-1:-1;;;25093:21:0;;;;25059:55;:100;;;;-1:-1:-1;25141:13:0;;25158:1;;25131:24;;-1:-1:-1;;;;;25141:13:0;25131:9;:24::i;:::-;:28;25059:100;:140;;;;-1:-1:-1;;;;;;25177:22:0;;;;;;:18;:22;;;;;;;;25176:23;25059:140;:182;;;;-1:-1:-1;;;;;;25217:24:0;;;;;;:18;:24;;;;;;;;25216:25;25059:182;:228;;;;-1:-1:-1;;;;;;25258:29:0;;;;;;:25;:29;;;;;;;;25059:228;:268;;;;;25304:23;25059:268;25041:335;;;25354:10;:8;:10::i;:::-;25388:14;:12;:14::i;:::-;9858:1;25423:15;:26;-1:-1:-1;;;;;25475:24:0;;;;;;:18;:24;;;;;;;;25474:25;:52;;;;-1:-1:-1;;;;;;25504:22:0;;;;;;:18;:22;;;;;;;;25503:23;25474:52;25470:959;;;25568:12;25546:18;;:34;:104;;;;-1:-1:-1;;;;;;25585:29:0;;;;;;:25;:29;;;;;;;;;:64;;-1:-1:-1;;;;;;25618:31:0;;;;;;:25;:31;;;;;;;;25585:64;25543:875;;;25680:3;25670:7;:13;25718:4;25702:13;:20;9814:1;25741:15;:22;25543:875;;;-1:-1:-1;;;;;25822:31:0;;;;;;:25;:31;;;;;;;;25818:600;;;25884:10;;25874:7;:20;25967:10;;25948:16;;25929;;:35;;25948:16;25929:35;:::i;:::-;:48;;;;:::i;:::-;25913:13;:64;;;25999:17;25996:85;;9774:1;26040:15;:21;25996:85;25818:600;;;-1:-1:-1;;;;;26141:29:0;;;;;;:25;:29;;;;;;;;26137:281;;;26201:11;;26191:7;:21;26287:11;;26267:17;;26247;;:37;;26267:17;26247:37;:::i;:::-;:51;;;;:::i;:::-;26231:13;:67;;;26320:17;26317:86;;9814:1;26361:15;:22;26317:86;26449:32;26464:4;26470:2;26474:6;26449:14;:32::i;:::-;26502:15;36988;;36978:7;:25;37030:21;;37014:13;:37;36934:125;26502:15;22569:3966;;22466:4069;;;:::o;1617:226::-;1737:7;1773:12;1765:6;;;;1757:29;;;;-1:-1:-1;;;1757:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1797:9:0;1809:5;1813:1;1809;:5;:::i;:::-;1797:17;1617:226;-1:-1:-1;;;;;1617:226:0:o;34635:164::-;34677:7;34698:15;34715;34734:19;:17;:19::i;:::-;34697:56;;-1:-1:-1;34697:56:0;-1:-1:-1;34771:20:0;34697:56;;34771:11;:20::i;:::-;34764:27;;;;34635:164;:::o;1284:181::-;1342:7;;1374:5;1378:1;1374;:5;:::i;:::-;1362:17;;1403:1;1398;:6;;1390:46;;;;-1:-1:-1;;;1390:46:0;;19571:2:1;1390:46:0;;;19553:21:1;19610:2;19590:18;;;19583:30;19649:29;19629:18;;;19622:57;19696:18;;1390:46:0;19369:351:1;32903:742:0;33003:7;33025;33047;33069;33091;33113;33163:23;33201:12;33228:18;33260:20;33272:7;33260:11;:20::i;:::-;33148:132;;;;;;33292:15;33309:23;33334:12;33350:113;33376:7;33398:4;33417:10;33442;:8;:10::i;:::-;33350:11;:113::i;:::-;33291:172;;;;-1:-1:-1;33291:172:0;;-1:-1:-1;33567:15:0;;-1:-1:-1;33597:4:0;;-1:-1:-1;33616:10:0;;-1:-1:-1;32903:742:0;;-1:-1:-1;;;;;32903:742:0:o;19908:231::-;-1:-1:-1;;;;;19991:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;19991:39:0;;;;;;;;20041:31;:37;;;;;;;:45;;;;;;;;;;;20097:35;;20107:23;20125:4;20107:17;:23::i;2249:312::-;2369:7;2404:12;2397:5;2389:28;;;;-1:-1:-1;;;2389:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2428:9:0;2440:5;2444:1;2440;:5;:::i;26543:1842::-;12238:16;:23;;-1:-1:-1;;;;12238:23:0;-1:-1:-1;;;12238:23:0;;;;26620:24:::1;26638:4;26620:9;:24::i;:::-;26594:50;;26655:25;26733:16;;26708:22;;26683;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;26655:94;;26760:12;26856:23;;26882:2;26856:28;;;;:::i;:::-;26837:15;:47;26834:124;;26918:23;::::0;:28:::1;::::0;26944:2:::1;26918:28;:::i;:::-;26900:46;;26834:124;26973:20:::0;;;:46:::1;;-1:-1:-1::0;26997:22:0;;26973:46:::1;26970:60;;;27022:7;;;;;26970:60;27099:26;27191:1;27171:17;27146:22;;27128:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;27099:93:::0;-1:-1:-1;27203:26:0::1;27232:39;:15:::0;27099:93;27232:19:::1;:39::i;:::-;27203:68:::0;-1:-1:-1;27320:21:0::1;27354:36;27203:68:::0;27354:16:::1;:36::i;:::-;27412:18;27433:44;:21;27459:17:::0;27433:25:::1;:44::i;:::-;27412:65;;27498:23;27524:90;27611:1;27588:22;;:24;;;;:::i;:::-;27567:46;::::0;:17;:46:::1;:::i;:::-;27539:22;::::0;27524:38:::1;::::0;:10;;:14:::1;:38::i;:::-;:42:::0;::::1;:90::i;:::-;27498:116;;27625:17;27645:84;27726:1;27703:22;;:24;;;;:::i;:::-;27682:46;::::0;:17;:46:::1;:::i;:::-;27660:16;::::0;27645:32:::1;::::0;:10;;:14:::1;:32::i;:84::-;27625:104:::0;-1:-1:-1;27750:23:0::1;27625:104:::0;27776:28:::1;27789:15:::0;27776:10;:28:::1;:::i;:::-;:40;;;;:::i;:::-;27862:1;27837:22;:26:::0;;;27874:22:::1;:26:::0;;;27911:16:::1;:20:::0;27750:66;-1:-1:-1;27963:22:0;;;;;:45:::1;;;28007:1;27989:15;:19;27963:45;27960:216;;;28024:49;28037:18;28057:15;28024:12;:49::i;:::-;28093:71;::::0;;19927:25:1;;;19983:2;19968:18;;19961:34;;;20011:18;;;20004:34;;;28093:71:0::1;::::0;19915:2:1;19900:18;28093:71:0::1;;;;;;;27960:216;28209:10;::::0;28201:46:::1;::::0;-1:-1:-1;;;;;28209:10:0;;::::1;::::0;28233:9;;28201:46:::1;::::0;;;28233:9;28209:10;28201:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28321:16:0::1;::::0;28313:64:::1;::::0;28188:59;;-1:-1:-1;;;;;;28321:16:0::1;::::0;28351:21:::1;::::0;28313:64:::1;::::0;;;28351:21;28321:16;28313:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;12272:1:0::1;12284:16:::0;:24;;-1:-1:-1;;;;12284:24:0;;;26543:1842::o;36691:235::-;36738:7;;:12;:34;;;;-1:-1:-1;36754:13:0;;:18;36738:34;36734:47;;;36691:235::o;36734:47::-;36811:7;;;36793:15;:25;36853:13;;;36829:21;:37;-1:-1:-1;36879:11:0;;;;36901:17;36691:235::o;29338:604::-;-1:-1:-1;;;;;29472:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;29496:22:0;;;;;;:11;:22;;;;;;;;29495:23;29472:46;29468:467;;;29535:48;29557:6;29565:9;29576:6;29535:21;:48::i;:::-;29338:604;;;:::o;29468:467::-;-1:-1:-1;;;;;29606:19:0;;;;;;:11;:19;;;;;;;;29605:20;:46;;;;-1:-1:-1;;;;;;29629:22:0;;;;;;:11;:22;;;;;;;;29605:46;29601:334;;;29668:46;29688:6;29696:9;29707:6;29668:19;:46::i;29601:334::-;-1:-1:-1;;;;;29736:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29759:22:0;;;;;;:11;:22;;;;;;;;29736:45;29732:203;;;29798:48;29820:6;29828:9;29839:6;29798:21;:48::i;29732:203::-;29879:44;29897:6;29905:9;29916:6;29879:17;:44::i;34807:605::-;34905:7;;34858;;;;9302:14;34858:7;34959:338;34983:9;:16;34979:20;;34959:338;;;35067:7;35043;:21;35051:9;35061:1;35051:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35051:12:0;35043:21;;;;;;;;;;;;;:31;;:83;;;35119:7;35095;:21;35103:9;35113:1;35103:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35103:12:0;35095:21;;;;;;;;;;;;;:31;35043:83;35021:146;;;-1:-1:-1;;35150:7:0;;;9302:14;;-1:-1:-1;34807:605:0;-1:-1:-1;;34807:605:0:o;35021:146::-;35192:34;35204:7;:21;35212:9;35222:1;35212:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35212:12:0;35204:21;;;;;;;;;;;;;35192:7;;:11;:34::i;:::-;35182:44;;35251:34;35263:7;:21;35271:9;35281:1;35271:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35271:12:0;35263:21;;;;;;;;;;;;;35251:7;;:11;:34::i;:::-;35241:44;-1:-1:-1;35001:3:0;;;;:::i;:::-;;;;34959:338;;;-1:-1:-1;35321:7:0;;:20;;9302:14;35321:11;:20::i;:::-;35311:7;:30;35307:61;;;-1:-1:-1;;35351:7:0;;;9302:14;;-1:-1:-1;34807:605:0;-1:-1:-1;34807:605:0:o;35307:61::-;35387:7;;35396;;-1:-1:-1;34807:605:0;-1:-1:-1;34807:605:0:o;33653:412::-;33754:7;33776;33798;33833:12;33848:24;33864:7;33848:15;:24::i;:::-;33833:39;;33883:18;33904:30;33926:7;33904:21;:30::i;:::-;33883:51;-1:-1:-1;33945:23:0;33971:33;33883:51;33971:17;:7;33983:4;33971:11;:17::i;:::-;:21;;:33::i;:::-;33945:59;34040:4;;-1:-1:-1;34046:10:0;;-1:-1:-1;33653:412:0;;-1:-1:-1;;;33653:412:0:o;34073:554::-;34272:7;;;;34369:24;:7;34381:11;34369;:24::i;:::-;34351:42;-1:-1:-1;34404:12:0;34419:21;:4;34428:11;34419:8;:21::i;:::-;34404:36;-1:-1:-1;34451:18:0;34472:27;:10;34487:11;34472:14;:27::i;:::-;34451:48;-1:-1:-1;34510:23:0;34536:33;34451:48;34536:17;:7;34548:4;34536:11;:17::i;:33::-;34588:7;;;;-1:-1:-1;34614:4:0;;-1:-1:-1;34073:554:0;;-1:-1:-1;;;;;;;34073:554:0:o;28397:499::-;28487:16;;;28501:1;28487:16;;;;;;;;28463:21;;28487:16;;;;;;;;;;-1:-1:-1;28487:16:0;28463:40;;28532:4;28514;28519:1;28514:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28514:23:0;;;:7;;;;;;;;;;:23;;;;28558:15;;:22;;;-1:-1:-1;;;28558:22:0;;;;:15;;;;;:20;;:22;;;;;28514:7;;28558:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28548:4;28553:1;28548:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28548:32:0;;;:7;;;;;;;;;:32;28623:15;;28591:62;;28608:4;;28623:15;28641:11;28591:8;:62::i;:::-;28664:15;;:224;;-1:-1:-1;;;28664:224:0;;-1:-1:-1;;;;;28664:15:0;;;;:66;;:224;;28745:11;;28664:15;;28815:4;;28842;;28862:15;;28664:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28452:444;28397:499;:::o;1851:250::-;1909:7;1933:6;1929:47;;-1:-1:-1;1963:1:0;1956:8;;1929:47;1988:9;2000:5;2004:1;2000;:5;:::i;:::-;1988:17;-1:-1:-1;2033:1:0;2024:5;2028:1;1988:17;2024:5;:::i;:::-;:10;2016:56;;;;-1:-1:-1;;;2016:56:0;;21624:2:1;2016:56:0;;;21606:21:1;21663:2;21643:18;;;21636:30;21702:34;21682:18;;;21675:62;-1:-1:-1;;;21753:18:1;;;21746:31;21794:19;;2016:56:0;21422:397:1;28908:422:0;29021:15;;28989:62;;29006:4;;-1:-1:-1;;;;;29021:15:0;29039:11;28989:8;:62::i;:::-;29062:15;;:260;;-1:-1:-1;;;29062:260:0;;29134:4;29062:260;;;22165:34:1;22215:18;;;22208:34;;;29062:15:0;22258:18:1;;;22251:34;;;22301:18;;;22294:34;29274:6:0;22344:19:1;;;22337:44;29296:15:0;22397:19:1;;;22390:35;-1:-1:-1;;;;;29062:15:0;;;;:31;;29101:9;;22099:19:1;;29062:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31289:686::-;31440:15;31470:23;31508:12;31535:23;31573:12;31600:18;31632:19;31643:7;31632:10;:19::i;:::-;-1:-1:-1;;;;;31680:15:0;;;;;;:7;:15;;;;;;31425:226;;-1:-1:-1;31425:226:0;;-1:-1:-1;31425:226:0;;-1:-1:-1;31425:226:0;-1:-1:-1;31425:226:0;-1:-1:-1;31425:226:0;-1:-1:-1;31680:28:0;;31700:7;31680:19;:28::i;:::-;-1:-1:-1;;;;;31662:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31737:7;:15;;;;:28;;31757:7;31737:19;:28::i;:::-;-1:-1:-1;;;;;31719:15:0;;;;;;;:7;:15;;;;;;:46;;;;31797:18;;;;;;;:39;;31820:15;31797:22;:39::i;:::-;-1:-1:-1;;;;;31776:18:0;;;;;;:7;:18;;;;;:60;31847:26;31862:10;31847:14;:26::i;:::-;31884:23;31896:4;31902;31884:11;:23::i;:::-;31940:9;-1:-1:-1;;;;;31923:44:0;31932:6;-1:-1:-1;;;;;31923:44:0;;31951:15;31923:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;31923:44:0;;;;;;;;31414:561;;;;;;31289:686;;;:::o;30583:698::-;30732:15;30762:23;30800:12;30827:23;30865:12;30892:18;30924:19;30935:7;30924:10;:19::i;:::-;-1:-1:-1;;;;;30972:15:0;;;;;;:7;:15;;;;;;30717:226;;-1:-1:-1;30717:226:0;;-1:-1:-1;30717:226:0;;-1:-1:-1;30717:226:0;-1:-1:-1;30717:226:0;-1:-1:-1;30717:226:0;-1:-1:-1;30972:28:0;;30717:226;30972:19;:28::i;:::-;-1:-1:-1;;;;;30954:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31032:18;;;;;:7;:18;;;;;:39;;31055:15;31032:22;:39::i;:::-;-1:-1:-1;;;;;31011:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31103:7;:18;;;;:39;;31126:15;31103:22;:39::i;31983:757::-;32134:15;32164:23;32202:12;32229:23;32267:12;32294:18;32326:19;32337:7;32326:10;:19::i;:::-;-1:-1:-1;;;;;32374:15:0;;;;;;:7;:15;;;;;;32119:226;;-1:-1:-1;32119:226:0;;-1:-1:-1;32119:226:0;;-1:-1:-1;32119:226:0;-1:-1:-1;32119:226:0;-1:-1:-1;32119:226:0;-1:-1:-1;32374:28:0;;32394:7;32374:19;:28::i;:::-;-1:-1:-1;;;;;32356:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32431:7;:15;;;;:28;;32451:7;32431:19;:28::i;29950:625::-;30097:15;30127:23;30165:12;30192:23;30230:12;30257:18;30289:19;30300:7;30289:10;:19::i;:::-;-1:-1:-1;;;;;30337:15:0;;;;;;:7;:15;;;;;;30082:226;;-1:-1:-1;30082:226:0;;-1:-1:-1;30082:226:0;;-1:-1:-1;30082:226:0;-1:-1:-1;30082:226:0;-1:-1:-1;30082:226:0;-1:-1:-1;30337:28:0;;30082:226;30337:19;:28::i;36371:130::-;36435:7;36462:31;36487:5;36462:20;36474:7;;36462;:11;;:20;;;;:::i;36509:174::-;36606:7;36638:37;36669:5;36638:26;36650:13;;36638:7;:11;;:26;;;;:::i;35420:943::-;9774:1;35486:15;;:22;35483:578;;;35582:13;;35563:16;;35550:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;35524:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;35668:13:0;;35649:16;;35636:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;35610:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;35742:13:0;;35729:10;;35716:23;;:10;:23;:::i;:::-;:39;;;;:::i;:::-;35696:16;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;35483:578:0;;-1:-1:-1;35483:578:0;;9814:1;35776:15;;:23;35773:288;;;35874:13;;35854:17;;35841:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;35815:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;35961:13:0;;35941:17;;35928:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;35902:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;36036:13:0;;36022:11;;36009:24;;:10;:24;:::i;:::-;:40;;;;:::i;:::-;35989:16;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;35773:288:0;36071:19;36093:10;:8;:10::i;:::-;36071:32;-1:-1:-1;36114:18:0;36135:27;:10;36071:32;36135:14;:27::i;:::-;36214:4;36198:22;;;;:7;:22;;;;;;36114:48;;-1:-1:-1;36198:38:0;;36114:48;36198:26;:38::i;:::-;36189:4;36173:22;;;;:7;:22;;;;;;;;:63;;;;36251:11;:26;;;;;;36247:108;;;36333:4;36317:22;;;;:7;:22;;;;;;:38;;36344:10;36317:26;:38::i;:::-;36308:4;36292:22;;;;:7;:22;;;;;:63;35472:891;;35420:943;:::o;32748:147::-;32826:7;;:17;;32838:4;32826:11;:17::i;:::-;32816:7;:27;32867:10;;:20;;32882:4;32867:14;:20::i;:::-;32854:10;:33;-1:-1:-1;;32748:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2117:456::-;2194:6;2202;2210;2263:2;2251:9;2242:7;2238:23;2234:32;2231:52;;;2279:1;2276;2269:12;2231:52;2318:9;2305:23;2337:31;2362:5;2337:31;:::i;:::-;2387:5;-1:-1:-1;2444:2:1;2429:18;;2416:32;2457:33;2416:32;2457:33;:::i;:::-;2117:456;;2509:7;;-1:-1:-1;;;2563:2:1;2548:18;;;;2535:32;;2117:456::o;2991:118::-;3077:5;3070:13;3063:21;3056:5;3053:32;3043:60;;3099:1;3096;3089:12;3114:309;3179:6;3187;3240:2;3228:9;3219:7;3215:23;3211:32;3208:52;;;3256:1;3253;3246:12;3208:52;3292:9;3279:23;3269:33;;3352:2;3341:9;3337:18;3324:32;3365:28;3387:5;3365:28;:::i;:::-;3412:5;3402:15;;;3114:309;;;;;:::o;3636:382::-;3701:6;3709;3762:2;3750:9;3741:7;3737:23;3733:32;3730:52;;;3778:1;3775;3768:12;3730:52;3817:9;3804:23;3836:31;3861:5;3836:31;:::i;:::-;3886:5;-1:-1:-1;3943:2:1;3928:18;;3915:32;3956:30;3915:32;3956:30;:::i;4023:388::-;4091:6;4099;4152:2;4140:9;4131:7;4127:23;4123:32;4120:52;;;4168:1;4165;4158:12;4120:52;4207:9;4194:23;4226:31;4251:5;4226:31;:::i;:::-;4276:5;-1:-1:-1;4333:2:1;4318:18;;4305:32;4346:33;4305:32;4346:33;:::i;4416:385::-;4502:6;4510;4518;4526;4579:3;4567:9;4558:7;4554:23;4550:33;4547:53;;;4596:1;4593;4586:12;4547:53;-1:-1:-1;;4619:23:1;;;4689:2;4674:18;;4661:32;;-1:-1:-1;4740:2:1;4725:18;;4712:32;;4791:2;4776:18;4763:32;;-1:-1:-1;4416:385:1;-1:-1:-1;4416:385:1:o;4806:241::-;4862:6;4915:2;4903:9;4894:7;4890:23;4886:32;4883:52;;;4931:1;4928;4921:12;4883:52;4970:9;4957:23;4989:28;5011:5;4989:28;:::i;5052:356::-;5254:2;5236:21;;;5273:18;;;5266:30;5332:34;5327:2;5312:18;;5305:62;5399:2;5384:18;;5052:356::o;5413:127::-;5474:10;5469:3;5465:20;5462:1;5455:31;5505:4;5502:1;5495:15;5529:4;5526:1;5519:15;5545:168;5585:7;5651:1;5647;5643:6;5639:14;5636:1;5633:21;5628:1;5621:9;5614:17;5610:45;5607:71;;;5658:18;;:::i;:::-;-1:-1:-1;5698:9:1;;5545:168::o;5718:217::-;5758:1;5784;5774:132;;5828:10;5823:3;5819:20;5816:1;5809:31;5863:4;5860:1;5853:15;5891:4;5888:1;5881:15;5774:132;-1:-1:-1;5920:9:1;;5718:217::o;8315:127::-;8376:10;8371:3;8367:20;8364:1;8357:31;8407:4;8404:1;8397:15;8431:4;8428:1;8421:15;8447:125;8487:4;8515:1;8512;8509:8;8506:34;;;8520:18;;:::i;:::-;-1:-1:-1;8557:9:1;;8447:125::o;8577:127::-;8638:10;8633:3;8629:20;8626:1;8619:31;8669:4;8666:1;8659:15;8693:4;8690:1;8683:15;8709:135;8748:3;-1:-1:-1;;8769:17:1;;8766:43;;;8789:18;;:::i;:::-;-1:-1:-1;8836:1:1;8825:13;;8709:135::o;9565:128::-;9605:3;9636:1;9632:6;9629:1;9626:13;9623:39;;;9642:18;;:::i;:::-;-1:-1:-1;9678:9:1;;9565:128::o;11313:184::-;11383:6;11436:2;11424:9;11415:7;11411:23;11407:32;11404:52;;;11452:1;11449;11442:12;11404:52;-1:-1:-1;11475:16:1;;11313:184;-1:-1:-1;11313:184:1:o;11781:245::-;11848:6;11901:2;11889:9;11880:7;11876:23;11872:32;11869:52;;;11917:1;11914;11907:12;11869:52;11949:9;11943:16;11968:28;11990:5;11968:28;:::i;20181:251::-;20251:6;20304:2;20292:9;20283:7;20279:23;20275:32;20272:52;;;20320:1;20317;20310:12;20272:52;20352:9;20346:16;20371:31;20396:5;20371:31;:::i;20437:980::-;20699:4;20747:3;20736:9;20732:19;20778:6;20767:9;20760:25;20804:2;20842:6;20837:2;20826:9;20822:18;20815:34;20885:3;20880:2;20869:9;20865:18;20858:31;20909:6;20944;20938:13;20975:6;20967;20960:22;21013:3;21002:9;20998:19;20991:26;;21052:2;21044:6;21040:15;21026:29;;21073:1;21083:195;21097:6;21094:1;21091:13;21083:195;;;21162:13;;-1:-1:-1;;;;;21158:39:1;21146:52;;21253:15;;;;21218:12;;;;21194:1;21112:9;21083:195;;;-1:-1:-1;;;;;;;21334:32:1;;;;21329:2;21314:18;;21307:60;-1:-1:-1;;;21398:3:1;21383:19;21376:35;21295:3;20437:980;-1:-1:-1;;;20437:980:1:o;22436:306::-;22524:6;22532;22540;22593:2;22581:9;22572:7;22568:23;22564:32;22561:52;;;22609:1;22606;22599:12;22561:52;22638:9;22632:16;22622:26;;22688:2;22677:9;22673:18;22667:25;22657:35;;22732:2;22721:9;22717:18;22711:25;22701:35;;22436:306;;;;;:::o

Swarm Source

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