ETH Price: $3,760.27 (+0.35%)
Gas: 7 Gwei

Token

Psyduck Inu (Psyduck)
 

Overview

Max Total Supply

1,000,000,000 Psyduck

Holders

792

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,091,980 Psyduck

Value
$0.00
0x22f83e4b9cb95cb99b88e8f4f15ea598c74c2788
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:
PsyduckInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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

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

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function allPairs(uint) external view returns (address lpPair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function setBlacklistEnabled(address account, bool enabled) external;
}

contract PsyduckInu is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;

    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 1_000_000_000;

    string constant private _name = "Psyduck Inu";
    string constant private _symbol = "Psyduck";

    struct FeesStruct {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct StaticValuesStruct {
        uint16 maxBuyTaxes;
        uint16 maxSellTaxes;
        uint16 maxTransferTaxes;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 total;
    }

    FeesStruct public _taxRates = FeesStruct({
        buyFee: 1000,
        sellFee: 1000,
        transferFee: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 200,
        marketing: 400,
        development: 400,
        total: 1000
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxBuyTaxes: 2500,
        maxSellTaxes: 2500,
        maxTransferTaxes: 2500,
        masterTaxDivisor: 10000
        });


    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xf786D6096fAF89fE3dD39eE98a8A13c242E8e37E);
    address payable private _developmentWallet = payable(0x8104b506Dc5378aa6192b1f544f6CE7D8f7dbCc5);
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private maxTxPercent = 25;
    uint256 private maxTxDivisor = 10000;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 5;
    uint256 private maxWalletDivisor = 1000;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_msgSender(), _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function removeSniper(address account) external onlyOwner() {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock) external onlyOwner() {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= staticVals.maxBuyTaxes
                && sellFee <=staticVals. maxSellTaxes
                && transferFee <= staticVals.maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        require (liquidity + marketing + development == 100, "Must add up to 100%");
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.total = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        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(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    uint256 public _aAaAmarketBal;
    uint256 public _aAaAliquidityBal;

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidity) / _ratios.total) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        //uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer((address(this).balance * _ratios.marketing) / (_ratios.marketing + _ratios.development));
            _developmentWallet.transfer(address(this).balance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp)) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(owner()).transfer(address(this).balance);
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _taxRates.buyFee;
        } else if (to == lpPair) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / staticVals.masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_aAaAliquidityBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_aAaAmarketBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxBuyTaxes","type":"uint16"},{"internalType":"uint16","name":"maxSellTaxes","type":"uint16"},{"internalType":"uint16","name":"maxTransferTaxes","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600355633b9aca006008556103e8608081905260a081905260c08190526009805465ffffffffffff19166503e803e803e817815560c860e0526101906101008190526101205261014091909152600a80546001600160401b03199081166703e80190019000c81782556101e06040526109c46101608190526101808190526101a0526127106101c052600b805490911667271009c409c409c4179055600c805460ff191683179055620000b591906200079f565b600854620000c49190620007b7565b600d819055601180546001600160a01b03191673f786d6096faf89fe3dd39ee98a8a13c242e8e37e17905560128054600161ff0160a01b031916738104b506dc5378aa6192b1f544f6ce7d8f7dbcc517905560196013819055612710601481905591620001329190620007b7565b6200013e9190620007d9565b601555601454601354600854620001569190620007b7565b620001629190620007d9565b60165560056017556103e8601855601854601754600d54620001859190620007b7565b620001919190620007d9565b601955601854601754600854620001a99190620007b7565b620001b59190620007d9565b601a55612710600d546005620001cc9190620007b7565b620001d89190620007d9565b601b556103e8600d546005620001ef9190620007b7565b620001fb9190620007d9565b601c55601d805461ffff19169055600d543360008181526001602090815260408083209490945581546001600160a01b0319908116909317909155600f8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200028757600080fd5b505afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c29190620007fc565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031f57600080fd5b505afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a9190620007fc565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620003a257600080fd5b505af1158015620003b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dd9190620007fc565b601080546001600160a01b0319166001600160a01b039290921691821790556000908152600260205260409020805460ff191660011790556200043f620004213390565b737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000589565b6200046230737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000589565b6001600560006200047b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600790620005036000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005333390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200057b91815260200190565b60405180910390a362000827565b6001600160a01b038316620005db5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006295760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005d2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006e1578160001904821115620006c557620006c56200068a565b80851615620006d357918102915b93841c9390800290620006a5565b509250929050565b600082620006fa5750600162000799565b81620007095750600062000799565b81600181146200072257600281146200072d576200074d565b600191505062000799565b60ff8411156200074157620007416200068a565b50506001821b62000799565b5060208310610133831016604e8410600b841016171562000772575081810a62000799565b6200077e8383620006a0565b80600019048211156200079557620007956200068a565b0290505b92915050565b6000620007b060ff841683620006e9565b9392505050565b6000816000190483118215151615620007d457620007d46200068a565b500290565b600082620007f757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200080f57600080fd5b81516001600160a01b0381168114620007b057600080fd5b6136d980620008376000396000f3fe6080604052600436106103015760003560e01c8063640384091161018f578063a9059cbb116100e1578063eafb5a3c1161008a578063f6540ec711610064578063f6540ec714610968578063fb78680d1461097e578063fdb78c0e1461099e57600080fd5b8063eafb5a3c14610913578063eb50e70e14610933578063ee5d9c2d1461095357600080fd5b8063cab5ebea116100bb578063cab5ebea14610870578063cf84770614610890578063dd62ed3e146108cd57600080fd5b8063a9059cbb14610810578063aa22b17214610830578063b6f8f8dc1461085057600080fd5b8063893d20e8116101435780638da5cb5b1161011d5780638da5cb5b1461076257806395d89b41146107aa578063a457c2d7146107f057600080fd5b8063893d20e8146107625780638a63bd9b146107805780638a8c523c1461079557600080fd5b8063715018a611610174578063715018a6146107175780637667f3591461072c57806380c581d11461074257600080fd5b806364038409146106cb57806370a08231146106e157600080fd5b806332cde664116102535780634fb2e45d116101fc5780635397ba3c116101d65780635397ba3c14610675578063590ffdce1461068b5780635c24b074146106ab57600080fd5b80634fb2e45d146105fd5780634fbee1931461061d57806350a8e0161461065657600080fd5b80633f3cf56c1161022d5780633f3cf56c146105a3578063452ed4f1146105c35780634ada218b146105e357600080fd5b806332cde6641461054357806333251a0b14610563578063395093511461058357600080fd5b8063095ea7b3116102b557806323b872dd1161028f57806323b872dd146104e15780632600395714610501578063313ce5671461052157600080fd5b8063095ea7b31461042757806318160ddd146104575780631b6afa2d1461047657600080fd5b806306fdde03116102e657806306fdde03146103965780630758d924146103e5578063092316021461040557600080fd5b806303fd2a451461030d578063069d955f1461034057600080fd5b3661030857005b600080fd5b34801561031957600080fd5b5061032361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561034c57600080fd5b506009546103719061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610337565b3480156103a257600080fd5b5060408051808201909152600b81527f5073796475636b20496e7500000000000000000000000000000000000000000060208201525b6040516103379190613207565b3480156103f157600080fd5b50600f54610323906001600160a01b031681565b34801561041157600080fd5b5061042561042036600461327a565b6109d1565b005b34801561043357600080fd5b506104476104423660046132a8565b610af5565b6040519015158152602001610337565b34801561046357600080fd5b50600d545b604051908152602001610337565b34801561048257600080fd5b50600b546104b39061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610337565b3480156104ed57600080fd5b506104476104fc3660046132d4565b610b0b565b34801561050d57600080fd5b5061042561051c366004613315565b610b83565b34801561052d57600080fd5b50600c5460405160ff9091168152602001610337565b34801561054f57600080fd5b5061042561055e36600461334e565b610c9a565b34801561056f57600080fd5b5061042561057e366004613391565b610def565b34801561058f57600080fd5b5061044761059e3660046132a8565b610e8f565b3480156105af57600080fd5b506104256105be366004613315565b610ecb565b3480156105cf57600080fd5b50601054610323906001600160a01b031681565b3480156105ef57600080fd5b50601d546104479060ff1681565b34801561060957600080fd5b50610425610618366004613391565b610fe2565b34801561062957600080fd5b50610447610638366004613391565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561066257600080fd5b50601d5461044790610100900460ff1681565b34801561068157600080fd5b50610468601e5481565b34801561069757600080fd5b506104256106a63660046133bc565b611232565b3480156106b757600080fd5b506104256106c6366004613391565b6112ab565b3480156106d757600080fd5b5061046860165481565b3480156106ed57600080fd5b506104686106fc366004613391565b6001600160a01b031660009081526001602052604090205490565b34801561072357600080fd5b506104256113ea565b34801561073857600080fd5b50610468601f5481565b34801561074e57600080fd5b5061042561075d3660046133bc565b61149a565b34801561076e57600080fd5b506000546001600160a01b0316610323565b34801561078c57600080fd5b50610447611676565b3480156107a157600080fd5b506104256116e5565b3480156107b657600080fd5b5060408051808201909152600781527f5073796475636b0000000000000000000000000000000000000000000000000060208201526103d8565b3480156107fc57600080fd5b5061044761080b3660046132a8565b611882565b34801561081c57600080fd5b5061044761082b3660046132a8565b6118b9565b34801561083c57600080fd5b5061042561084b36600461334e565b6118d0565b34801561085c57600080fd5b5061042561086b3660046133f5565b611a40565b34801561087c57600080fd5b5061042561088b366004613440565b611b20565b34801561089c57600080fd5b50600a546104b39061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156108d957600080fd5b506104686108e836600461345d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091f57600080fd5b5061042561092e366004613391565b611bf3565b34801561093f57600080fd5b5061042561094e366004613391565b612001565b34801561095f57600080fd5b5061042561207e565b34801561097457600080fd5b50610468601a5481565b34801561098a57600080fd5b5061042561099936600461348b565b612161565b3480156109aa57600080fd5b50601254610447907501000000000000000000000000000000000000000000900460ff1681565b6000546001600160a01b03163314610a245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610a755760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610a1b565b601d546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b5050505050565b6000610b023384846121ee565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610b70576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b6a9084906134ec565b90915550505b610b7b8484846122fb565b949350505050565b6000546001600160a01b03163314610bd15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008183600d54610be29190613503565b610bec9190613522565b90506103e8600d54610bfe9190613522565b811015610c735760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a1b565b60198190556008548290610c88908590613503565b610c929190613522565b601a55505050565b6000546001600160a01b03163314610ce85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b600b5461ffff90811690841611801590610d125750600b5461ffff62010000909104811690831611155b8015610d305750600b5461ffff640100000000909104811690821611155b610d7c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a1b565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ac0565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b02918590610ec690869061355d565b6121ee565b6000546001600160a01b03163314610f195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008183600d54610f2a9190613503565b610f349190613522565b90506103e8600d54610f469190613522565b811015610fbb5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a1b565b60158190556008548290610fd0908590613503565b610fda9190613522565b601655505050565b6000546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6001600160a01b0381166110ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a1b565b6001600160a01b03811661dead141561112d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a1b565b60008054611146916001600160a01b0390911690611232565b611151816001611232565b6000546011546001600160a01b0390811691161415611193576011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b0316815260016020526040902054156111da57600080546001600160a01b031680825260016020526040909120546111d8919083906122fb565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146112805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112f95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d54610100900460ff16156113515760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610a1b565b6001600160a01b0381163014156113aa5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a1b565b601d80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146114385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008054611451916001600160a01b0390911690611232565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146114e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b80611591576001600160a01b03828116600081815260026020526040808220805460ff19169055601d5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561157557600080fd5b505af1158015611589573d6000803e3d6000fd5b505050505050565b600354156115f85762093a80600354426115ab91906134ec565b116115f85760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610a1b565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601d5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d19060440161155b565b5050565b600080546001600160a01b031633146116c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b600f546116df9030906001600160a01b03166000196121ee565b50600190565b6000546001600160a01b031633146117335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d5460ff16156117865760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a1b565b601d54610100900460ff166117dd5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a1b565b601d546010546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561186157600080fd5b505af1925050508015611872575060015b50601d805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b02918590610ec69086906134ec565b60006118c63384846122fb565b5060019392505050565b6000546001600160a01b0316331461191e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b806119298385613575565b6119339190613575565b61ffff166064146119865760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610a1b565b600a805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169288169290921792909217161790556119fd8284613575565b600a805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611a8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015611b0357600080fd5b505af1158015611b17573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611b6e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601280548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611be890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8157600080fd5b505afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb9919061359b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d39919061359b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d9757600080fd5b505afa158015611dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcf919061359b565b90506001600160a01b038116611f9a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1857600080fd5b505afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e50919061359b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e9857600080fd5b505afa158015611eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed0919061359b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611f3057600080fd5b505af1158015611f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f68919061359b565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055611fc3565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611ffc9030906000196121ee565b505050565b6000546001600160a01b0316331461204f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d54610100900460ff16156121245760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a1b565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561215e573d6000803e3d6000fd5b50565b6000546001600160a01b031633146121af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b8284600d546121be9190613503565b6121c89190613522565b601b55600d5481906121db908490613503565b6121e59190613522565b601c5550505050565b6001600160a01b0383166122445760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a1b565b6001600160a01b03821661229a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a1b565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166123795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b0383166123f55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a1b565b6000821161246b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a1b565b6124758484612772565b1561267457601d5460ff166124cc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a1b565b6001600160a01b03841660009081526002602052604090205460ff168061250b57506001600160a01b03831660009081526002602052604090205460ff165b15612588576015548211156125885760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906125ce57506001600160a01b03831660009081526002602052604090205460ff16155b1561267457601954826125f6856001600160a01b031660009081526001602052604090205490565b612600919061355d565b11156126745760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b03841660009081526005602052604090205460019060ff16806126b657506001600160a01b03841660009081526005602052604090205460ff165b156126bf575060005b6001600160a01b03841660009081526002602052604090205460ff161561275d5760125474010000000000000000000000000000000000000000900460ff1615801561272657506012547501000000000000000000000000000000000000000000900460ff165b1561275d5730600090815260016020526040902054601b54811061275b57601c5481106127525750601c545b61275b81612830565b505b61276985858584612ceb565b95945050505050565b600080546001600160a01b0384811691161480159061279f57506000546001600160a01b03838116911614155b80156127c457506001600160a01b03821660009081526007602052604090205460ff16155b80156127e957506001600160a01b03831660009081526007602052604090205460ff16155b801561280057506001600160a01b03821661dead14155b801561281457506001600160a01b03821615155b801561282957506001600160a01b0383163014155b9392505050565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600a5461ffff66010000000000009091041661288a57612cc0565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146128e357306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600a5460009060029061ffff66010000000000008204811691612907911685613503565b6129119190613522565b61291b9190613522565b9050600061292982846134ec565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612963576129636135b8565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156129d057600080fd5b505afa1580156129e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a08919061359b565b81600181518110612a1b57612a1b6135b8565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612a7a9085906000908690309042906004016135e7565b600060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b5050600a54600092506002915061ffff66010000000000008204811691612ad0911647613503565b612ada9190613522565b612ae49190613522565b90508315612bec57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba79190613658565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bf885876134ec565b1115612cbb57601154600a546001600160a01b03909116906108fc90612c329061ffff640100000000820481169162010000900416613575565b600a5461ffff91821691612c4d916201000090041647613503565b612c579190613522565b6040518115909202916000818181858888f19350505050158015612c7f573d6000803e3d6000fd5b506012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612cb9573d6000803e3d6000fd5b505b505050505b50601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601d54600090610100900460ff16612d9757612d078585612f54565b601d54610100900460ff16158015612d245750612d248585612772565b15612d975760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a1b565b612da18585612772565b15612e8157601d546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a5390606401602060405180830381600087803b158015612e1c57600080fd5b505af1925050508015612e6a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612e6791810190613686565b60015b612e7357600080fd5b905080612e7f57600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290612ea99084906134ec565b909155506000905082612ebc5783612ec7565b612ec7868686613100565b6001600160a01b038616600090815260016020526040812080549293508392909190612ef490849061355d565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f4091815260200190565b60405180910390a350600195945050505050565b601d54610100900460ff1615612fd25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a1b565b612fdc8282612772565b158015612ff657506010546001600160a01b038281169116145b15611672576001600160a01b038083166000908152600760205260409020805460ff19166001179055601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090041661308857601d80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60105460009081906001600160a01b0386811691161415613128575060095461ffff16613162565b6010546001600160a01b0385811691161415613151575060095462010000900461ffff16613162565b50600954640100000000900461ffff165b600b546000906601000000000000900461ffff166131808386613503565b61318a9190613522565b306000908152600160205260408120805492935083929091906131ae90849061355d565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36131fd81856134ec565b9695505050505050565b600060208083528351808285015260005b8181101561323457858101830151858201604001528201613218565b81811115613246576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561328c57600080fd5b5035919050565b6001600160a01b038116811461215e57600080fd5b600080604083850312156132bb57600080fd5b82356132c681613293565b946020939093013593505050565b6000806000606084860312156132e957600080fd5b83356132f481613293565b9250602084013561330481613293565b929592945050506040919091013590565b6000806040838503121561332857600080fd5b50508035926020909101359150565b803561ffff8116811461334957600080fd5b919050565b60008060006060848603121561336357600080fd5b61336c84613337565b925061337a60208501613337565b915061338860408501613337565b90509250925092565b6000602082840312156133a357600080fd5b813561282981613293565b801515811461215e57600080fd5b600080604083850312156133cf57600080fd5b82356133da81613293565b915060208301356133ea816133ae565b809150509250929050565b60008060006060848603121561340a57600080fd5b8335613415816133ae565b92506020840135613425816133ae565b91506040840135613435816133ae565b809150509250925092565b60006020828403121561345257600080fd5b8135612829816133ae565b6000806040838503121561347057600080fd5b823561347b81613293565b915060208301356133ea81613293565b600080600080608085870312156134a157600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134fe576134fe6134bd565b500390565b600081600019048311821515161561351d5761351d6134bd565b500290565b600082613558577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613570576135706134bd565b500190565b600061ffff808316818516808303821115613592576135926134bd565b01949350505050565b6000602082840312156135ad57600080fd5b815161282981613293565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136375784516001600160a01b031683529383019391830191600101613612565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561366d57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561369857600080fd5b8151612829816133ae56fea26469706673582212202b2531e61f300770a1ad6d3cbd1b3dd28aa1b64f5a5a71b8373ba3d5e0d4a4fa64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103015760003560e01c8063640384091161018f578063a9059cbb116100e1578063eafb5a3c1161008a578063f6540ec711610064578063f6540ec714610968578063fb78680d1461097e578063fdb78c0e1461099e57600080fd5b8063eafb5a3c14610913578063eb50e70e14610933578063ee5d9c2d1461095357600080fd5b8063cab5ebea116100bb578063cab5ebea14610870578063cf84770614610890578063dd62ed3e146108cd57600080fd5b8063a9059cbb14610810578063aa22b17214610830578063b6f8f8dc1461085057600080fd5b8063893d20e8116101435780638da5cb5b1161011d5780638da5cb5b1461076257806395d89b41146107aa578063a457c2d7146107f057600080fd5b8063893d20e8146107625780638a63bd9b146107805780638a8c523c1461079557600080fd5b8063715018a611610174578063715018a6146107175780637667f3591461072c57806380c581d11461074257600080fd5b806364038409146106cb57806370a08231146106e157600080fd5b806332cde664116102535780634fb2e45d116101fc5780635397ba3c116101d65780635397ba3c14610675578063590ffdce1461068b5780635c24b074146106ab57600080fd5b80634fb2e45d146105fd5780634fbee1931461061d57806350a8e0161461065657600080fd5b80633f3cf56c1161022d5780633f3cf56c146105a3578063452ed4f1146105c35780634ada218b146105e357600080fd5b806332cde6641461054357806333251a0b14610563578063395093511461058357600080fd5b8063095ea7b3116102b557806323b872dd1161028f57806323b872dd146104e15780632600395714610501578063313ce5671461052157600080fd5b8063095ea7b31461042757806318160ddd146104575780631b6afa2d1461047657600080fd5b806306fdde03116102e657806306fdde03146103965780630758d924146103e5578063092316021461040557600080fd5b806303fd2a451461030d578063069d955f1461034057600080fd5b3661030857005b600080fd5b34801561031957600080fd5b5061032361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561034c57600080fd5b506009546103719061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610337565b3480156103a257600080fd5b5060408051808201909152600b81527f5073796475636b20496e7500000000000000000000000000000000000000000060208201525b6040516103379190613207565b3480156103f157600080fd5b50600f54610323906001600160a01b031681565b34801561041157600080fd5b5061042561042036600461327a565b6109d1565b005b34801561043357600080fd5b506104476104423660046132a8565b610af5565b6040519015158152602001610337565b34801561046357600080fd5b50600d545b604051908152602001610337565b34801561048257600080fd5b50600b546104b39061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610337565b3480156104ed57600080fd5b506104476104fc3660046132d4565b610b0b565b34801561050d57600080fd5b5061042561051c366004613315565b610b83565b34801561052d57600080fd5b50600c5460405160ff9091168152602001610337565b34801561054f57600080fd5b5061042561055e36600461334e565b610c9a565b34801561056f57600080fd5b5061042561057e366004613391565b610def565b34801561058f57600080fd5b5061044761059e3660046132a8565b610e8f565b3480156105af57600080fd5b506104256105be366004613315565b610ecb565b3480156105cf57600080fd5b50601054610323906001600160a01b031681565b3480156105ef57600080fd5b50601d546104479060ff1681565b34801561060957600080fd5b50610425610618366004613391565b610fe2565b34801561062957600080fd5b50610447610638366004613391565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561066257600080fd5b50601d5461044790610100900460ff1681565b34801561068157600080fd5b50610468601e5481565b34801561069757600080fd5b506104256106a63660046133bc565b611232565b3480156106b757600080fd5b506104256106c6366004613391565b6112ab565b3480156106d757600080fd5b5061046860165481565b3480156106ed57600080fd5b506104686106fc366004613391565b6001600160a01b031660009081526001602052604090205490565b34801561072357600080fd5b506104256113ea565b34801561073857600080fd5b50610468601f5481565b34801561074e57600080fd5b5061042561075d3660046133bc565b61149a565b34801561076e57600080fd5b506000546001600160a01b0316610323565b34801561078c57600080fd5b50610447611676565b3480156107a157600080fd5b506104256116e5565b3480156107b657600080fd5b5060408051808201909152600781527f5073796475636b0000000000000000000000000000000000000000000000000060208201526103d8565b3480156107fc57600080fd5b5061044761080b3660046132a8565b611882565b34801561081c57600080fd5b5061044761082b3660046132a8565b6118b9565b34801561083c57600080fd5b5061042561084b36600461334e565b6118d0565b34801561085c57600080fd5b5061042561086b3660046133f5565b611a40565b34801561087c57600080fd5b5061042561088b366004613440565b611b20565b34801561089c57600080fd5b50600a546104b39061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b3480156108d957600080fd5b506104686108e836600461345d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091f57600080fd5b5061042561092e366004613391565b611bf3565b34801561093f57600080fd5b5061042561094e366004613391565b612001565b34801561095f57600080fd5b5061042561207e565b34801561097457600080fd5b50610468601a5481565b34801561098a57600080fd5b5061042561099936600461348b565b612161565b3480156109aa57600080fd5b50601254610447907501000000000000000000000000000000000000000000900460ff1681565b6000546001600160a01b03163314610a245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610a755760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610a1b565b601d546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b5050505050565b6000610b023384846121ee565b50600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610b70576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610b6a9084906134ec565b90915550505b610b7b8484846122fb565b949350505050565b6000546001600160a01b03163314610bd15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008183600d54610be29190613503565b610bec9190613522565b90506103e8600d54610bfe9190613522565b811015610c735760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a1b565b60198190556008548290610c88908590613503565b610c929190613522565b601a55505050565b6000546001600160a01b03163314610ce85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b600b5461ffff90811690841611801590610d125750600b5461ffff62010000909104811690831611155b8015610d305750600b5461ffff640100000000909104811690821611155b610d7c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a1b565b6009805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ac0565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b02918590610ec690869061355d565b6121ee565b6000546001600160a01b03163314610f195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008183600d54610f2a9190613503565b610f349190613522565b90506103e8600d54610f469190613522565b811015610fbb5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a1b565b60158190556008548290610fd0908590613503565b610fda9190613522565b601655505050565b6000546001600160a01b031633146110305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6001600160a01b0381166110ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a1b565b6001600160a01b03811661dead141561112d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a1b565b60008054611146916001600160a01b0390911690611232565b611151816001611232565b6000546011546001600160a01b0390811691161415611193576011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600080546001600160a01b0316815260016020526040902054156111da57600080546001600160a01b031680825260016020526040909120546111d8919083906122fb565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146112805760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112f95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d54610100900460ff16156113515760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610a1b565b6001600160a01b0381163014156113aa5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a1b565b601d80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000546001600160a01b031633146114385760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008054611451916001600160a01b0390911690611232565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146114e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b80611591576001600160a01b03828116600081815260026020526040808220805460ff19169055601d5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561157557600080fd5b505af1158015611589573d6000803e3d6000fd5b505050505050565b600354156115f85762093a80600354426115ab91906134ec565b116115f85760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610a1b565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601d5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d19060440161155b565b5050565b600080546001600160a01b031633146116c55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b600f546116df9030906001600160a01b03166000196121ee565b50600190565b6000546001600160a01b031633146117335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d5460ff16156117865760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a1b565b601d54610100900460ff166117dd5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a1b565b601d546010546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561186157600080fd5b505af1925050508015611872575060015b50601d805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b02918590610ec69086906134ec565b60006118c63384846122fb565b5060019392505050565b6000546001600160a01b0316331461191e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b806119298385613575565b6119339190613575565b61ffff166064146119865760405162461bcd60e51b815260206004820152601360248201527f4d7573742061646420757020746f2031303025000000000000000000000000006044820152606401610a1b565b600a805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169288169290921792909217161790556119fd8284613575565b600a805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611a8e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015611b0357600080fd5b505af1158015611b17573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611b6e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601280548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611be890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8157600080fd5b505afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb9919061359b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d39919061359b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d9757600080fd5b505afa158015611dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcf919061359b565b90506001600160a01b038116611f9a57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1857600080fd5b505afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e50919061359b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e9857600080fd5b505afa158015611eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed0919061359b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611f3057600080fd5b505af1158015611f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f68919061359b565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055611fc3565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611ffc9030906000196121ee565b505050565b6000546001600160a01b0316331461204f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b601d54610100900460ff16156121245760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a1b565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561215e573d6000803e3d6000fd5b50565b6000546001600160a01b031633146121af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a1b565b8284600d546121be9190613503565b6121c89190613522565b601b55600d5481906121db908490613503565b6121e59190613522565b601c5550505050565b6001600160a01b0383166122445760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a1b565b6001600160a01b03821661229a5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a1b565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166123795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b0383166123f55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a1b565b6000821161246b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a1b565b6124758484612772565b1561267457601d5460ff166124cc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a1b565b6001600160a01b03841660009081526002602052604090205460ff168061250b57506001600160a01b03831660009081526002602052604090205460ff165b15612588576015548211156125885760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d148015906125ce57506001600160a01b03831660009081526002602052604090205460ff16155b1561267457601954826125f6856001600160a01b031660009081526001602052604090205490565b612600919061355d565b11156126745760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a1b565b6001600160a01b03841660009081526005602052604090205460019060ff16806126b657506001600160a01b03841660009081526005602052604090205460ff165b156126bf575060005b6001600160a01b03841660009081526002602052604090205460ff161561275d5760125474010000000000000000000000000000000000000000900460ff1615801561272657506012547501000000000000000000000000000000000000000000900460ff165b1561275d5730600090815260016020526040902054601b54811061275b57601c5481106127525750601c545b61275b81612830565b505b61276985858584612ceb565b95945050505050565b600080546001600160a01b0384811691161480159061279f57506000546001600160a01b03838116911614155b80156127c457506001600160a01b03821660009081526007602052604090205460ff16155b80156127e957506001600160a01b03831660009081526007602052604090205460ff16155b801561280057506001600160a01b03821661dead14155b801561281457506001600160a01b03821615155b801561282957506001600160a01b0383163014155b9392505050565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600a5461ffff66010000000000009091041661288a57612cc0565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146128e357306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600a5460009060029061ffff66010000000000008204811691612907911685613503565b6129119190613522565b61291b9190613522565b9050600061292982846134ec565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612963576129636135b8565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156129d057600080fd5b505afa1580156129e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a08919061359b565b81600181518110612a1b57612a1b6135b8565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612a7a9085906000908690309042906004016135e7565b600060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b5050600a54600092506002915061ffff66010000000000008204811691612ad0911647613503565b612ada9190613522565b612ae49190613522565b90508315612bec57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba79190613658565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bf885876134ec565b1115612cbb57601154600a546001600160a01b03909116906108fc90612c329061ffff640100000000820481169162010000900416613575565b600a5461ffff91821691612c4d916201000090041647613503565b612c579190613522565b6040518115909202916000818181858888f19350505050158015612c7f573d6000803e3d6000fd5b506012546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612cb9573d6000803e3d6000fd5b505b505050505b50601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601d54600090610100900460ff16612d9757612d078585612f54565b601d54610100900460ff16158015612d245750612d248585612772565b15612d975760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a1b565b612da18585612772565b15612e8157601d546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a5390606401602060405180830381600087803b158015612e1c57600080fd5b505af1925050508015612e6a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612e6791810190613686565b60015b612e7357600080fd5b905080612e7f57600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290612ea99084906134ec565b909155506000905082612ebc5783612ec7565b612ec7868686613100565b6001600160a01b038616600090815260016020526040812080549293508392909190612ef490849061355d565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f4091815260200190565b60405180910390a350600195945050505050565b601d54610100900460ff1615612fd25760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a1b565b612fdc8282612772565b158015612ff657506010546001600160a01b038281169116145b15611672576001600160a01b038083166000908152600760205260409020805460ff19166001179055601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017908190556201000090041661308857601d80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60105460009081906001600160a01b0386811691161415613128575060095461ffff16613162565b6010546001600160a01b0385811691161415613151575060095462010000900461ffff16613162565b50600954640100000000900461ffff165b600b546000906601000000000000900461ffff166131808386613503565b61318a9190613522565b306000908152600160205260408120805492935083929091906131ae90849061355d565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36131fd81856134ec565b9695505050505050565b600060208083528351808285015260005b8181101561323457858101830151858201604001528201613218565b81811115613246576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561328c57600080fd5b5035919050565b6001600160a01b038116811461215e57600080fd5b600080604083850312156132bb57600080fd5b82356132c681613293565b946020939093013593505050565b6000806000606084860312156132e957600080fd5b83356132f481613293565b9250602084013561330481613293565b929592945050506040919091013590565b6000806040838503121561332857600080fd5b50508035926020909101359150565b803561ffff8116811461334957600080fd5b919050565b60008060006060848603121561336357600080fd5b61336c84613337565b925061337a60208501613337565b915061338860408501613337565b90509250925092565b6000602082840312156133a357600080fd5b813561282981613293565b801515811461215e57600080fd5b600080604083850312156133cf57600080fd5b82356133da81613293565b915060208301356133ea816133ae565b809150509250929050565b60008060006060848603121561340a57600080fd5b8335613415816133ae565b92506020840135613425816133ae565b91506040840135613435816133ae565b809150509250925092565b60006020828403121561345257600080fd5b8135612829816133ae565b6000806040838503121561347057600080fd5b823561347b81613293565b915060208301356133ea81613293565b600080600080608085870312156134a157600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134fe576134fe6134bd565b500390565b600081600019048311821515161561351d5761351d6134bd565b500290565b600082613558577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115613570576135706134bd565b500190565b600061ffff808316818516808303821115613592576135926134bd565b01949350505050565b6000602082840312156135ad57600080fd5b815161282981613293565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136375784516001600160a01b031683529383019391830191600101613612565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561366d57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561369857600080fd5b8151612829816133ae56fea26469706673582212202b2531e61f300770a1ad6d3cbd1b3dd28aa1b64f5a5a71b8373ba3d5e0d4a4fa64736f6c63430008090033

Deployed Bytecode Sourcemap

11785:18938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13744:73;;;;;;;;;;;;13775:42;13744:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;13744:73:0;;;;;;;;12886:128;;;;;;;;;;-1:-1:-1;12886:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;451:6:1;484:15;;;466:34;;536:15;;;531:2;516:18;;509:43;588:15;;568:18;;;561:43;;;;429:2;414:18;12886:128:0;245:365:1;18372:80:0;;;;;;;;;;-1:-1:-1;18444:5:0;;;;;;;;;;;;;;;;;18372:80;;;;;;;:::i;13560:35::-;;;;;;;;;;-1:-1:-1;13560:35:0;;;;-1:-1:-1;;;;;13560:35:0;;;22364:149;;;;;;;;;;-1:-1:-1;22364:149:0;;;;;:::i;:::-;;:::i;:::-;;18985:161;;;;;;;;;;-1:-1:-1;18985:161:0;;;;;:::i;:::-;;:::i;:::-;;;2362:14:1;;2355:22;2337:41;;2325:2;2310:18;18985:161:0;2197:187:1;18107:83:0;;;;;;;;;;-1:-1:-1;18180:7:0;;18107:83;;;2535:25:1;;;2523:2;2508:18;18107:83:0;2389:177:1;13174:194:0;;;;;;;;;;-1:-1:-1;13174:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2804:6:1;2837:15;;;2819:34;;2889:15;;;2884:2;2869:18;;2862:43;2941:15;;;2921:18;;;2914:43;;;;2993:15;;;2988:2;2973:18;;2966:43;2781:3;2766:19;13174:194:0;2571:444:1;19652:306:0;;;;;;;;;;-1:-1:-1;19652:306:0;;;;;:::i;:::-;;:::i;23675:340::-;;;;;;;;;;-1:-1:-1;23675:340:0;;;;;:::i;:::-;;:::i;18196:80::-;;;;;;;;;;-1:-1:-1;18264:9:0;;18196:80;;18264:9;;;;3876:36:1;;3864:2;3849:18;18196:80:0;3734:184:1;22521:430:0;;;;;;;;;;-1:-1:-1;22521:430:0;;;;;:::i;:::-;;:::i;22060:110::-;;;;;;;;;;-1:-1:-1;22060:110:0;;;;;:::i;:::-;;:::i;19966:215::-;;;;;;;;;;-1:-1:-1;19966:215:0;;;;;:::i;:::-;;:::i;23327:340::-;;;;;;;;;;-1:-1:-1;23327:340:0;;;;;:::i;:::-;;:::i;13602:21::-;;;;;;;;;;-1:-1:-1;13602:21:0;;;;-1:-1:-1;;;;;13602:21:0;;;14736:34;;;;;;;;;;-1:-1:-1;14736:34:0;;;;;;;;16850:701;;;;;;;;;;-1:-1:-1;16850:701:0;;;;;:::i;:::-;;:::i;21529:125::-;;;;;;;;;;-1:-1:-1;21529:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21618:28:0;21594:4;21618:28;;;:19;:28;;;;;;;;;21529:125;14777:36;;;;;;;;;;-1:-1:-1;14777:36:0;;;;;;;;;;;26445:29;;;;;;;;;;;;;;;;21662:134;;;;;;;;;;-1:-1:-1;21662:134:0;;;;;:::i;:::-;;:::i;21804:248::-;;;;;;;;;;-1:-1:-1;21804:248:0;;;;;:::i;:::-;;:::i;14260:77::-;;;;;;;;;;;;;;;;18685:117;;;;;;;;;;-1:-1:-1;18685:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;18778:16:0;18751:7;18778:16;;;:7;:16;;;;;;;18685:117;17559:195;;;;;;;;;;;;;:::i;26481:32::-;;;;;;;;;;;;;;;;21004:517;;;;;;;;;;-1:-1:-1;21004:517:0;;;;;:::i;:::-;;:::i;18458:80::-;;;;;;;;;;-1:-1:-1;18510:7:0;16828:6;-1:-1:-1;;;;;16828:6:0;18458:80;;19471:173;;;;;;;;;;;;;:::i;28716:309::-;;;;;;;;;;;;;:::i;18282:84::-;;;;;;;;;;-1:-1:-1;18356:7:0;;;;;;;;;;;;;;;;;18282:84;;20189:225;;;;;;;;;;-1:-1:-1;20189:225:0;;;;;:::i;:::-;;:::i;18810:167::-;;;;;;;;;;-1:-1:-1;18810:167:0;;;;;:::i;:::-;;:::i;22959:360::-;;;;;;;;;;-1:-1:-1;22959:360:0;;;;;:::i;:::-;;:::i;22178:178::-;;;;;;;;;;-1:-1:-1;22178:178:0;;;;;:::i;:::-;;:::i;24462:165::-;;;;;;;;;;-1:-1:-1;24462:165:0;;;;;:::i;:::-;;:::i;13023:142::-;;;;;;;;;;-1:-1:-1;13023:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18544:133;;;;;;;;;;-1:-1:-1;18544:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18646:19:0;;;18628:7;18646:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18544:133;20422:574;;;;;;;;;;-1:-1:-1;20422:574:0;;;;;:::i;:::-;;:::i;24320:134::-;;;;;;;;;;-1:-1:-1;24320:134:0;;;;;:::i;:::-;;:::i;29033:183::-;;;;;;;;;;;;;:::i;14522:87::-;;;;;;;;;;;;;;;;24023:289;;;;;;;;;;-1:-1:-1;24023:289:0;;;;;:::i;:::-;;:::i;14052:39::-;;;;;;;;;;-1:-1:-1;14052:39:0;;;;;;;;;;;22364:149;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;;;;;;;;;22448:2:::1;22441:3;:9;;22433:30;;;::::0;-1:-1:-1;;;22433:30:0;;7535:2:1;22433:30:0::1;::::0;::::1;7517:21:1::0;7574:1;7554:18;;;7547:29;7612:10;7592:18;;;7585:38;7640:18;;22433:30:0::1;7333:331:1::0;22433:30:0::1;22474:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;2535:25:1::0;;;22474:9:0;;;::::1;-1:-1:-1::0;;;;;22474:9:0::1;::::0;:26:::1;::::0;2508:18:1;;22474:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22364:149:::0;:::o;18985:161::-;19060:4;19077:39;189:10;19100:7;19109:6;19077:8;:39::i;:::-;-1:-1:-1;19134:4:0;18985:161;;;;:::o;19652:306::-;-1:-1:-1;;;;;19773:19:0;;19752:4;19773:19;;;:11;:19;;;;;;;;19793:10;19773:31;;;;;;;;-1:-1:-1;;19773:52:0;19769:126;;-1:-1:-1;;;;;19842:19:0;;;;;;:11;:19;;;;;;;;19862:10;19842:31;;;;;;;:41;;19877:6;;19842:19;:41;;19877:6;;19842:41;:::i;:::-;;;;-1:-1:-1;;19769:126:0;19914:36;19924:6;19932:9;19943:6;19914:9;:36::i;:::-;19907:43;19652:306;-1:-1:-1;;;;19652:306:0:o;23675:340::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;23765:13:::1;23803:7;23792;23782;;:17;;;;:::i;:::-;23781:29;;;;:::i;:::-;23765:45;;23849:4;23839:7;;:14;;;;:::i;:::-;23829:5;:25;;23821:88;;;::::0;-1:-1:-1;;;23821:88:0;;8702:2:1;23821:88:0::1;::::0;::::1;8684:21:1::0;8741:2;8721:18;;;8714:30;8780:34;8760:18;;;8753:62;8851:20;8831:18;;;8824:48;8889:19;;23821:88:0::1;8500:414:1::0;23821:88:0::1;23920:14;:22:::0;;;23972:14:::1;::::0;24000:7;;23972:24:::1;::::0;23989:7;;23972:24:::1;:::i;:::-;23971:36;;;;:::i;:::-;23953:15;:54:::0;-1:-1:-1;;;23675:340:0:o;22521:430::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;22638:10:::1;:22:::0;::::1;::::0;;::::1;22628:32:::0;;::::1;;::::0;::::1;::::0;:87:::1;;-1:-1:-1::0;22691:10:0::1;:24:::0;::::1;::::0;;;::::1;::::0;::::1;22681:34:::0;;::::1;;;22628:87;:150;;;;-1:-1:-1::0;22751:10:0::1;:27:::0;::::1;::::0;;;::::1;::::0;::::1;22736:42:::0;;::::1;;;22628:150;22620:203;;;::::0;-1:-1:-1;;;22620:203:0;;9121:2:1;22620:203:0::1;::::0;::::1;9103:21:1::0;9160:2;9140:18;;;9133:30;9199:25;9179:18;;;9172:53;9242:18;;22620:203:0::1;8919:347:1::0;22620:203:0::1;22834:9;:25:::0;;::::1;::::0;;::::1;22870:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;22908:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;22521:430::o;22060:110::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;22131:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;22131:31:0::1;::::0;::::1;160:74:1::0;22131:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;22131:31:0::1;14:226:1::0;19966:215:0;189:10;20054:4;20103:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20103:34:0;;;;;;;;;;20054:4;;20071:80;;20094:7;;20103:47;;20140:10;;20103:47;:::i;:::-;20071:8;:80::i;23327:340::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;23416:13:::1;23454:7;23443;23433;;:17;;;;:::i;:::-;23432:29;;;;:::i;:::-;23416:45;;23500:4;23490:7;;:14;;;;:::i;:::-;23480:5;:25;;23472:93;;;::::0;-1:-1:-1;;;23472:93:0;;9606:2:1;23472:93:0::1;::::0;::::1;9588:21:1::0;9645:2;9625:18;;;9618:30;9684:34;9664:18;;;9657:62;9755:25;9735:18;;;9728:53;9798:19;;23472:93:0::1;9404:419:1::0;23472:93:0::1;23576:12;:20:::0;;;23624:14:::1;::::0;23652:7;;23624:24:::1;::::0;23641:7;;23624:24:::1;:::i;:::-;23623:36;;;;:::i;:::-;23607:13;:52:::0;-1:-1:-1;;;23327:340:0:o;16850:701::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;-1:-1:-1;;;;;16931:22:0;::::1;16923:96;;;::::0;-1:-1:-1;;;16923:96:0;;10030:2:1;16923:96:0::1;::::0;::::1;10012:21:1::0;10069:2;10049:18;;;10042:30;10108:34;10088:18;;;10081:62;10179:31;10159:18;;;10152:59;10228:19;;16923:96:0::1;9828:425:1::0;16923:96:0::1;-1:-1:-1::0;;;;;17038:16:0;::::1;13775:42;17038:16;;17030:90;;;::::0;-1:-1:-1;;;17030:90:0;;10030:2:1;17030:90:0::1;::::0;::::1;10012:21:1::0;10069:2;10049:18;;;10042:30;10108:34;10088:18;;;10081:62;10179:31;10159:18;;;10152:59;10228:19;;17030:90:0::1;9828:425:1::0;17030:90:0::1;17151:6;::::0;;17131:34:::1;::::0;-1:-1:-1;;;;;17151:6:0;;::::1;::::0;17131:19:::1;:34::i;:::-;17176:35;17196:8;17206:4;17176:19;:35::i;:::-;17264:6;::::0;17236:16:::1;::::0;-1:-1:-1;;;;;17236:16:0;;::::1;17264:6:::0;::::1;17236:35;17232:90;;;17286:16;:36:::0;;-1:-1:-1;;17286:36:0::1;-1:-1:-1::0;;;;;17286:36:0;::::1;;::::0;;17232:90:::1;17366:1;17356:6:::0;;-1:-1:-1;;;;;17356:6:0::1;18778:16:::0;;:7;:16;;;;;;17346:21;17343:99:::1;;17394:6;::::0;;-1:-1:-1;;;;;17394:6:0::1;18778:16:::0;;;:7;:16;;;;;;;17384:46:::1;::::0;17394:6;17402:8;;17384:9:::1;:46::i;:::-;;17343:99;17462:6;:17:::0;;-1:-1:-1;;17462:17:0::1;-1:-1:-1::0;;;;;17462:17:0;::::1;::::0;;::::1;::::0;;17495:38:::1;::::0;17462:17;;;;17495:38:::1;::::0;17462:6;17495:38:::1;16850:701:::0;:::o;21662:134::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;-1:-1:-1;;;;;21750:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;21750:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21662:134::o;21804:248::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;21888:16:::1;::::0;::::1;::::0;::::1;;;21887:17;21879:54;;;::::0;-1:-1:-1;;;21879:54:0;;10460:2:1;21879:54:0::1;::::0;::::1;10442:21:1::0;10499:2;10479:18;;;10472:30;10538:26;10518:18;;;10511:54;10582:18;;21879:54:0::1;10258:348:1::0;21879:54:0::1;-1:-1:-1::0;;;;;21952:28:0;::::1;21975:4;21952:28;;21944:55;;;::::0;-1:-1:-1;;;21944:55:0;;10813:2:1;21944:55:0::1;::::0;::::1;10795:21:1::0;10852:2;10832:18;;;10825:30;10891:16;10871:18;;;10864:44;10925:18;;21944:55:0::1;10611:338:1::0;21944:55:0::1;22010:9;:34:::0;;-1:-1:-1;;;;;22010:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;21804:248::o;17559:195::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;17646:6:::1;::::0;;17626:34:::1;::::0;-1:-1:-1;;;;;17646:6:0;;::::1;::::0;17626:19:::1;:34::i;:::-;17688:1;17671:19:::0;;-1:-1:-1;;17671:19:0::1;::::0;;17706:40:::1;::::0;17688:1;;17706:40:::1;::::0;17688:1;;17706:40:::1;17559:195::o:0;21004:517::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;21085:16;21081:433:::1;;-1:-1:-1::0;;;;;21118:13:0;;::::1;21134:5;21118:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;21118:21:0::1;::::0;;21154:9:::1;::::0;:32;;;;;::::1;::::0;::::1;11122:74:1::0;;;;11212:18;;;11205:50;;;;21154:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;11095:18:1;;21154:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21004:517:::0;;:::o;21081:433::-:1;21223:17;::::0;:22;21219:153:::1;;21312:7;21292:17;;21274:15;:35;;;;:::i;:::-;:45;21266:90;;;::::0;-1:-1:-1;;;21266:90:0;;11468:2:1;21266:90:0::1;::::0;::::1;11450:21:1::0;;;11487:18;;;11480:30;11546:34;11526:18;;;11519:62;11598:18;;21266:90:0::1;11266:356:1::0;21266:90:0::1;-1:-1:-1::0;;;;;21386:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;21386:20:0::1;21402:4;21386:20:::0;;::::1;::::0;;;21441:15:::1;21421:17;:35:::0;21471:9:::1;::::0;:31;;;;;::::1;::::0;::::1;11122:74:1::0;;;;11212:18;;;11205:50;21471:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;11095:18:1;;21471:31:0::1;10954:307:1::0;21081:433:0::1;21004:517:::0;;:::o;19471:173::-;19535:4;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;19584:9:::1;::::0;19552:62:::1;::::0;19569:4:::1;::::0;-1:-1:-1;;;;;19584:9:0::1;-1:-1:-1::0;;19552:8:0::1;:62::i;:::-;-1:-1:-1::0;19632:4:0::1;19471:173:::0;:::o;28716:309::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;28778:14:::1;::::0;::::1;;28777:15;28769:52;;;::::0;-1:-1:-1;;;28769:52:0;;11829:2:1;28769:52:0::1;::::0;::::1;11811:21:1::0;11868:2;11848:18;;;11841:30;11907:26;11887:18;;;11880:54;11951:18;;28769:52:0::1;11627:348:1::0;28769:52:0::1;28840:16;::::0;::::1;::::0;::::1;;;28832:53;;;::::0;-1:-1:-1;;;28832:53:0;;12182:2:1;28832:53:0::1;::::0;::::1;12164:21:1::0;12221:2;12201:18;;;12194:30;12260:26;12240:18;;;12233:54;12304:18;;28832:53:0::1;11980:348:1::0;28832:53:0::1;28900:9;::::0;28920:6:::1;::::0;28900:74:::1;::::0;;;;-1:-1:-1;;;;;28920:6:0;;::::1;28900:74;::::0;::::1;12531::1::0;12653:10;28935:12:0::1;12641:23:1::0;12621:18;;;12614:51;12713:18;28957:15:0::1;12701:31:1::0;12681:18;;;12674:59;28900:9:0;;;::::1;;::::0;:19:::1;::::0;12504:18:1;;28900:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28896:90:::0;28996:14:::1;:21:::0;;-1:-1:-1;;28996:21:0::1;29013:4;28996:21;::::0;;28716:309::o;20189:225::-;189:10;20282:4;20331:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20331:34:0;;;;;;;;;;20282:4;;20299:85;;20322:7;;20331:52;;20368:15;;20331:52;:::i;18810:167::-;18888:4;18905:42;189:10;18929:9;18940:6;18905:9;:42::i;:::-;-1:-1:-1;18965:4:0;;18810:167;-1:-1:-1;;;18810:167:0:o;22959:360::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;23097:11;23073:21:::1;23085:9:::0;23073;:21:::1;:::i;:::-;:35;;;;:::i;:::-;:42;;23112:3;23073:42;23064:75;;;::::0;-1:-1:-1;;;23064:75:0;;13175:2:1;23064:75:0::1;::::0;::::1;13157:21:1::0;13214:2;13194:18;;;13187:30;13253:21;13233:18;;;13226:49;13292:18;;23064:75:0::1;12973:343:1::0;23064:75:0::1;23150:7;:29:::0;;::::1;23230:33:::0;;::::1;::::0;::::1;::::0;23190:29;;::::1;::::0;::::1;::::0;;;;23150;;::::1;23190::::0;;;;;;;::::1;23230:33;;::::0;;23290:21:::1;23210:9:::0;23170;23290:21:::1;:::i;:::-;23274:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22959:360:0:o;22178:178::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;22290:9:::1;::::0;:58:::1;::::0;;;;13530:14:1;;13523:22;22290:58:0::1;::::0;::::1;13505:41:1::0;13589:14;;13582:22;13562:18;;;13555:50;13648:14;;13641:22;13621:18;;;13614:50;22290:9:0;;;::::1;-1:-1:-1::0;;;;;22290:9:0::1;::::0;:24:::1;::::0;13478:18:1;;22290:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22178:178:::0;;;:::o;24462:165::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;24537:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;24583:36:::1;::::0;::::1;::::0;::::1;::::0;24559:8;2362:14:1;2355:22;2337:41;;2325:2;2310:18;;2197:187;24583:36:0::1;;;;;;;;24462:165:::0;:::o;20422:574::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;20493:29:::1;20544:9;20493:61;;20565:16;20602:10;-1:-1:-1::0;;;;;20602:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20584:47:0::1;;20640:4;20647:10;-1:-1:-1::0;;;;;20647:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20584:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;14184:15:1;;;20584:81:0::1;::::0;::::1;14166:34:1::0;14236:15;;14216:18;;;14209:43;14078:18;;20584:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20565:100:::0;-1:-1:-1;;;;;;20680:22:0;::::1;20676:207;;20746:10;-1:-1:-1::0;;;;;20746:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20728:50:0::1;;20787:4;20794:10;-1:-1:-1::0;;;;;20794:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20728:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;14184:15:1;;;20728:84:0::1;::::0;::::1;14166:34:1::0;14236:15;;14216:18;;;14209:43;14078:18;;20728:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20719:6;:93:::0;;-1:-1:-1;;20719:93:0::1;-1:-1:-1::0;;;;;20719:93:0;;;::::1;::::0;;;::::1;::::0;;20676:207:::1;;;20854:6;:17:::0;;-1:-1:-1;;20854:17:0::1;-1:-1:-1::0;;;;;20854:17:0;::::1;;::::0;;20676:207:::1;20893:9;:22:::0;;-1:-1:-1;;20893:22:0::1;-1:-1:-1::0;;;;;20893:22:0;::::1;::::0;;::::1;::::0;;;20926:62:::1;::::0;20943:4:::1;::::0;-1:-1:-1;;20926:8:0::1;:62::i;:::-;20482:514;;20422:574:::0;:::o;24320:134::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;24403:16:::1;:43:::0;;-1:-1:-1;;24403:43:0::1;-1:-1:-1::0;;;;;24403:43:0;;;::::1;::::0;;;::::1;::::0;;24320:134::o;29033:183::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;29100:16:::1;::::0;::::1;::::0;::::1;;;29099:17;29091:58;;;::::0;-1:-1:-1;;;29091:58:0;;14465:2:1;29091:58:0::1;::::0;::::1;14447:21:1::0;14504:2;14484:18;;;14477:30;14543;14523:18;;;14516:58;14591:18;;29091:58:0::1;14263:352:1::0;29091:58:0::1;16801:7:::0;16828:6;;29160:48:::1;::::0;-1:-1:-1;;;;;16828:6:0;;;;29186:21:::1;29160:48:::0;::::1;;;::::0;29186:21;;29160:48;16801:7;29160:48;29186:21;16828:6;29160:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29033:183::o:0;24023:289::-;15384:6;;-1:-1:-1;;;;;15384:6:0;189:10;15384:22;15376:52;;;;-1:-1:-1;;;15376:52:0;;7189:2:1;15376:52:0;;;7171:21:1;7228:2;7208:18;;;7201:30;-1:-1:-1;;;7247:18:1;;;7240:47;7304:18;;15376:52:0;6987:341:1;15376:52:0;24223:16:::1;24203;24193:7;;:26;;;;:::i;:::-;24192:47;;;;:::i;:::-;24176:13;:63:::0;24264:7:::1;::::0;24291:13;;24264:23:::1;::::0;24274:13;;24264:23:::1;:::i;:::-;24263:41;;;;:::i;:::-;24250:10;:54:::0;-1:-1:-1;;;;24023:289:0:o;19154:309::-;-1:-1:-1;;;;;19248:20:0;;19240:52;;;;-1:-1:-1;;;19240:52:0;;14822:2:1;19240:52:0;;;14804:21:1;14861:2;14841:18;;;14834:30;14900:21;14880:18;;;14873:49;14939:18;;19240:52:0;14620:343:1;19240:52:0;-1:-1:-1;;;;;19311:21:0;;19303:53;;;;-1:-1:-1;;;19303:53:0;;14822:2:1;19303:53:0;;;14804:21:1;14861:2;14841:18;;;14834:30;14900:21;14880:18;;;14873:49;14939:18;;19303:53:0;14620:343:1;19303:53:0;-1:-1:-1;;;;;19369:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;19422:33;;2535:25:1;;;19422:33:0;;2508:18:1;19422:33:0;;;;;;;19154:309;;;:::o;24966:1471::-;25045:4;-1:-1:-1;;;;;25070:18:0;;25062:68;;;;-1:-1:-1;;;25062:68:0;;15170:2:1;25062:68:0;;;15152:21:1;15209:2;15189:18;;;15182:30;15248:34;15228:18;;;15221:62;15319:7;15299:18;;;15292:35;15344:19;;25062:68:0;14968:401:1;25062:68:0;-1:-1:-1;;;;;25149:16:0;;25141:64;;;;-1:-1:-1;;;25141:64:0;;15576:2:1;25141:64:0;;;15558:21:1;15615:2;15595:18;;;15588:30;15654:34;15634:18;;;15627:62;15725:5;15705:18;;;15698:33;15748:19;;25141:64:0;15374:399:1;25141:64:0;25233:1;25224:6;:10;25216:64;;;;-1:-1:-1;;;25216:64:0;;15980:2:1;25216:64:0;;;15962:21:1;16019:2;15999:18;;;15992:30;16058:34;16038:18;;;16031:62;16129:11;16109:18;;;16102:39;16158:19;;25216:64:0;15778:405:1;25216:64:0;25294:20;25305:4;25311:2;25294:10;:20::i;:::-;25291:481;;;25335:14;;;;25331:89;;25370:34;;-1:-1:-1;;;25370:34:0;;16390:2:1;25370:34:0;;;16372:21:1;16429:2;16409:18;;;16402:30;16468:26;16448:18;;;16441:54;16512:18;;25370:34:0;16188:348:1;25331:89:0;-1:-1:-1;;;;;25437:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;25454:11:0;;;;;;:7;:11;;;;;;;;25437:28;25434:142;;;25503:12;;25493:6;:22;;25485:75;;;;-1:-1:-1;;;25485:75:0;;16743:2:1;25485:75:0;;;16725:21:1;16782:2;16762:18;;;16755:30;16821:34;16801:18;;;16794:62;16892:10;16872:18;;;16865:38;16920:19;;25485:75:0;16541:404:1;25485:75:0;-1:-1:-1;;;;;25593:20:0;;13693:42;25593:20;;;;:36;;-1:-1:-1;;;;;;25618:11:0;;;;;;:7;:11;;;;;;;;25617:12;25593:36;25590:171;;;25684:14;;25674:6;25658:13;25668:2;-1:-1:-1;;;;;18778:16:0;18751:7;18778:16;;;:7;:16;;;;;;;18685:117;25658:13;:22;;;;:::i;:::-;:40;;25650:95;;;;-1:-1:-1;;;25650:95:0;;17152:2:1;25650:95:0;;;17134:21:1;17191:2;17171:18;;;17164:30;17230:34;17210:18;;;17203:62;17301:12;17281:18;;;17274:40;17331:19;;25650:95:0;16950:406:1;25650:95:0;-1:-1:-1;;;;;25817:25:0;;25784:12;25817:25;;;:19;:25;;;;;;25799:4;;25817:25;;;:52;;-1:-1:-1;;;;;;25846:23:0;;;;;;:19;:23;;;;;;;;25817:52;25814:98;;;-1:-1:-1;25895:5:0;25814:98;-1:-1:-1;;;;;25928:11:0;;;;;;:7;:11;;;;;;;;25924:443;;;25961:6;;;;;;;25960:7;:47;;;;-1:-1:-1;25988:19:0;;;;;;;25960:47;25956:394;;;26091:4;26042:28;18778:16;;;:7;:16;;;;;;26144:13;;26120:37;;26116:219;;26209:10;;26185:20;:34;26182:77;;-1:-1:-1;26246:10:0;;26182:77;26281:34;26294:20;26281:12;:34::i;:::-;26023:327;25956:394;26385:44;26403:4;26409:2;26413:6;26421:7;26385:17;:44::i;:::-;26378:51;24966:1471;-1:-1:-1;;;;;24966:1471:0:o;24635:323::-;24703:4;16828:6;;-1:-1:-1;;;;;24727:15:0;;;16828:6;;24727:15;;;;:45;;-1:-1:-1;16801:7:0;16828:6;-1:-1:-1;;;;;24759:13:0;;;16828:6;;24759:13;;24727:45;:84;;;;-1:-1:-1;;;;;;24790:21:0;;;;;;:17;:21;;;;;;;;24789:22;24727:84;:125;;;;-1:-1:-1;;;;;;24829:23:0;;;;;;:17;:23;;;;;;;;24828:24;24727:125;:152;;;;-1:-1:-1;;;;;;24869:10:0;;13775:42;24869:10;;24727:152;:185;;;;-1:-1:-1;;;;;;24896:16:0;;;;24727:185;:223;;;;-1:-1:-1;;;;;;24929:21:0;;24945:4;24929:21;;24727:223;24720:230;24635:323;-1:-1:-1;;;24635:323:0:o;26522:1670::-;15278:6;:13;;;;;;;;26609:7:::1;:13:::0;::::1;::::0;;;::::1;;26605:44;;26642:7;;26605:44;26684:4;26664:26;::::0;;;:11:::1;:26;::::0;;;;;;;26699:9:::1;::::0;-1:-1:-1;;;;;26699:9:0::1;26664:46:::0;;;;;;;;-1:-1:-1;;26664:67:0::1;26661:165;;26768:4;26748:26;::::0;;;:11:::1;:26;::::0;;;;;;;26783:9:::1;::::0;-1:-1:-1;;;;;26783:9:0::1;26748:46:::0;;;;;;;-1:-1:-1;;26748:66:0;;26661:165:::1;26904:7;:13:::0;26838:17:::1;::::0;26921:1:::1;::::0;26904:13:::1;::::0;;::::1;::::0;::::1;::::0;26860:40:::1;::::0;26883:17:::1;26860:20:::0;:40:::1;:::i;:::-;26859:58;;;;:::i;:::-;26858:64;;;;:::i;:::-;26838:84:::0;-1:-1:-1;26935:20:0::1;26958:32;26838:84:::0;26958:20;:32:::1;:::i;:::-;27035:16;::::0;;27049:1:::1;27035:16:::0;;;;;::::1;::::0;;26935:55;;-1:-1:-1;27011:21:0::1;::::0;27035:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27035:16:0::1;27011:40;;27080:4;27062;27067:1;27062:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27062:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27106:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27062:7;;27106:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27096:4;27101:1;27096:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27096:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27135:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;27210:12;;27135:9:::1;::::0;27281:4;;27308::::1;::::0;27328:15:::1;::::0;27135:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27500:7:0::1;:13:::0;27426:24:::1;::::0;-1:-1:-1;27517:1:0::1;::::0;-1:-1:-1;27500:13:0::1;::::0;;::::1;::::0;::::1;::::0;27455:41:::1;::::0;27479:17:::1;27455:21;:41;:::i;:::-;27454:59;;;;:::i;:::-;27453:65;;;;:::i;:::-;27426:92:::0;-1:-1:-1;27535:13:0;;27531:396:::1;;27565:9;::::0;:276:::1;::::0;;;;27642:4:::1;27565:276;::::0;::::1;19134:34:1::0;19184:18;;;19177:34;;;27565:9:0::1;19227:18:1::0;;;19220:34;;;19270:18;;;19263:34;13775:42:0::1;19313:19:1::0;;;19306:44;27811:15:0::1;19366:19:1::0;;;19359:35;-1:-1:-1;;;;;27565:9:0;;::::1;::::0;:25:::1;::::0;27598:16;;19045:19:1;;27565:276:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27861:54:0::1;::::0;;19918:25:1;;;19974:2;19959:18;;19952:34;;;20002:18;;;19995:34;;;27861:54:0::1;::::0;-1:-1:-1;19906:2:1;19891:18;27861:54:0::1;;;;;;;27531:396;27976:1;27941:32;27964:9:::0;27941:20;:32:::1;:::i;:::-;:36;27937:248;;;27994:16;::::0;28087:7:::1;:19:::0;-1:-1:-1;;;;;27994:16:0;;::::1;::::0;:114:::1;::::0;28067:39:::1;::::0;28087:19:::1;::::0;;::::1;::::0;::::1;::::0;28067:17;;::::1;;:39;:::i;:::-;28045:7;:17:::0;28020:87:::1;::::0;;::::1;::::0;28021:41:::1;::::0;28045:17;;::::1;;28021:21;:41;:::i;:::-;28020:87;;;;:::i;:::-;27994:114;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28123:18:0::1;::::0;:50:::1;::::0;-1:-1:-1;;;;;28123:18:0;;::::1;::::0;28151:21:::1;28123:50:::0;::::1;;;::::0;:18:::1;:50:::0;:18;:50;28151:21;28123:18;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27937:248;26594:1598;;;;15302:1;-1:-1:-1::0;15314:6:0;:14;;;;;;26522:1670::o;29224:905::-;29346:16;;29324:4;;29346:16;;;;;29341:221;;29379:28;29398:4;29404:2;29379:18;:28::i;:::-;29427:16;;;;;;;29426:17;:41;;;;;29447:20;29458:4;29464:2;29447:10;:20::i;:::-;29422:129;;;29488:47;;-1:-1:-1;;;29488:47:0;;20242:2:1;29488:47:0;;;20224:21:1;20281:2;20261:18;;;20254:30;20320:34;20300:18;;;20293:62;20391:7;20371:18;;;20364:35;20416:19;;29488:47:0;20040:401:1;29422:129:0;29578:20;29589:4;29595:2;29578:10;:20::i;:::-;29574:314;;;29646:9;;:37;;;;;-1:-1:-1;;;;;20727:15:1;;;29646:37:0;;;20709:34:1;20779:15;;;20759:18;;;20752:43;20811:18;;;20804:34;;;29615:12:0;;29646:9;;;;;:19;;20621:18:1;;29646:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29646:37:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29642:163;;29781:8;;;29642:163;29734:5;-1:-1:-1;29825:7:0;29821:56;;29853:8;;;29821:56;29600:288;29574:314;-1:-1:-1;;;;;29900:13:0;;;;;;:7;:13;;;;;:23;;29917:6;;29900:13;:23;;29917:6;;29900:23;:::i;:::-;;;;-1:-1:-1;29934:22:0;;-1:-1:-1;29960:7:0;29959:48;;30001:6;29959:48;;;29971:27;29981:4;29987:2;29991:6;29971:9;:27::i;:::-;-1:-1:-1;;;;;30018:11:0;;;;;;:7;:11;;;;;:29;;29934:73;;-1:-1:-1;29934:73:0;;30018:11;;;:29;;29934:73;;30018:29;:::i;:::-;;;;;;;;30080:2;-1:-1:-1;;;;;30065:34:0;30074:4;-1:-1:-1;;;;;30065:34:0;;30084:14;30065:34;;;;2535:25:1;;2523:2;2508:18;;2389:177;30065:34:0;;;;;;;;-1:-1:-1;30117:4:0;;29224:905;-1:-1:-1;;;;;29224:905:0:o;28200:508::-;28282:16;;;;;;;28281:17;28273:65;;;;-1:-1:-1;;;28273:65:0;;21301:2:1;28273:65:0;;;21283:21:1;21340:2;21320:18;;;21313:30;21379:34;21359:18;;;21352:62;21450:5;21430:18;;;21423:33;21473:19;;28273:65:0;21099:399:1;28273:65:0;28354:20;28365:4;28371:2;28354:10;:20::i;:::-;28353:21;:37;;;;-1:-1:-1;28384:6:0;;-1:-1:-1;;;;;28378:12:0;;;28384:6;;28378:12;28353:37;28349:352;;;-1:-1:-1;;;;;28407:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28407:30:0;28433:4;28407:30;;;28452:16;:23;;;;28407:30;28452:23;;;;;28501:9;;;;28490:107;;28545:9;:36;;;;28575:4;28545:36;;;;;28490:107;28611:19;:26;;;;;;;;28657:32;;-1:-1:-1;2337:41:1;;28657:32:0;;2325:2:1;2310:18;28657:32:0;;;;;;;28200:508;;:::o;30137:583::-;30277:6;;30216:7;;;;-1:-1:-1;;;;;30269:14:0;;;30277:6;;30269:14;30265:224;;;-1:-1:-1;30313:9:0;:16;;;30265:224;;;30357:6;;-1:-1:-1;;;;;30351:12:0;;;30357:6;;30351:12;30347:142;;;-1:-1:-1;30393:9:0;:17;;;;;;30347:142;;;-1:-1:-1;30456:9:0;:21;;;;;;30347:142;30543:10;:27;30501:17;;30543:27;;;;;30521:19;30530:10;30521:6;:19;:::i;:::-;:49;;;;:::i;:::-;30599:4;30583:22;;;;:7;:22;;;;;:35;;30501:69;;-1:-1:-1;30501:69:0;;30583:22;;;:35;;30501:69;;30583:35;:::i;:::-;;;;-1:-1:-1;;30634:40:0;;2535:25:1;;;30657:4:0;;-1:-1:-1;;;;;30634:40:0;;;;;2523:2:1;2508:18;30634:40:0;;;;;;;30694:18;30703:9;30694:6;:18;:::i;:::-;30687:25;30137:583;-1:-1:-1;;;;;;30137:583:0:o;615:656:1:-;727:4;756:2;785;774:9;767:21;817:6;811:13;860:6;855:2;844:9;840:18;833:34;885:1;895:140;909:6;906:1;903:13;895:140;;;1004:14;;;1000:23;;994:30;970:17;;;989:2;966:26;959:66;924:10;;895:140;;;1053:6;1050:1;1047:13;1044:91;;;1123:1;1118:2;1109:6;1098:9;1094:22;1090:31;1083:42;1044:91;-1:-1:-1;1187:2:1;1175:15;1192:66;1171:88;1156:104;;;;1262:2;1152:113;;615:656;-1:-1:-1;;;615:656:1:o;1533:180::-;1592:6;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;-1:-1:-1;1684:23:1;;1533:180;-1:-1:-1;1533:180:1:o;1718:154::-;-1:-1:-1;;;;;1797:5:1;1793:54;1786:5;1783:65;1773:93;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;3020:456::-;3097:6;3105;3113;3166:2;3154:9;3145:7;3141:23;3137:32;3134:52;;;3182:1;3179;3172:12;3134:52;3221:9;3208:23;3240:31;3265:5;3240:31;:::i;:::-;3290:5;-1:-1:-1;3347:2:1;3332:18;;3319:32;3360:33;3319:32;3360:33;:::i;:::-;3020:456;;3412:7;;-1:-1:-1;;;3466:2:1;3451:18;;;;3438:32;;3020:456::o;3481:248::-;3549:6;3557;3610:2;3598:9;3589:7;3585:23;3581:32;3578:52;;;3626:1;3623;3616:12;3578:52;-1:-1:-1;;3649:23:1;;;3719:2;3704:18;;;3691:32;;-1:-1:-1;3481:248:1:o;3923:159::-;3990:20;;4050:6;4039:18;;4029:29;;4019:57;;4072:1;4069;4062:12;4019:57;3923:159;;;:::o;4087:328::-;4161:6;4169;4177;4230:2;4218:9;4209:7;4205:23;4201:32;4198:52;;;4246:1;4243;4236:12;4198:52;4269:28;4287:9;4269:28;:::i;:::-;4259:38;;4316:37;4349:2;4338:9;4334:18;4316:37;:::i;:::-;4306:47;;4372:37;4405:2;4394:9;4390:18;4372:37;:::i;:::-;4362:47;;4087:328;;;;;:::o;4420:247::-;4479:6;4532:2;4520:9;4511:7;4507:23;4503:32;4500:52;;;4548:1;4545;4538:12;4500:52;4587:9;4574:23;4606:31;4631:5;4606:31;:::i;4672:118::-;4758:5;4751:13;4744:21;4737:5;4734:32;4724:60;;4780:1;4777;4770:12;4795:382;4860:6;4868;4921:2;4909:9;4900:7;4896:23;4892:32;4889:52;;;4937:1;4934;4927:12;4889:52;4976:9;4963:23;4995:31;5020:5;4995:31;:::i;:::-;5045:5;-1:-1:-1;5102:2:1;5087:18;;5074:32;5115:30;5074:32;5115:30;:::i;:::-;5164:7;5154:17;;;4795:382;;;;;:::o;5182:511::-;5250:6;5258;5266;5319:2;5307:9;5298:7;5294:23;5290:32;5287:52;;;5335:1;5332;5325:12;5287:52;5374:9;5361:23;5393:28;5415:5;5393:28;:::i;:::-;5440:5;-1:-1:-1;5497:2:1;5482:18;;5469:32;5510:30;5469:32;5510:30;:::i;:::-;5559:7;-1:-1:-1;5618:2:1;5603:18;;5590:32;5631:30;5590:32;5631:30;:::i;:::-;5680:7;5670:17;;;5182:511;;;;;:::o;5698:241::-;5754:6;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;5862:9;5849:23;5881:28;5903:5;5881:28;:::i;5944:388::-;6012:6;6020;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;6128:9;6115:23;6147:31;6172:5;6147:31;:::i;:::-;6197:5;-1:-1:-1;6254:2:1;6239:18;;6226:32;6267:33;6226:32;6267:33;:::i;6597:385::-;6683:6;6691;6699;6707;6760:3;6748:9;6739:7;6735:23;6731:33;6728:53;;;6777:1;6774;6767:12;6728:53;-1:-1:-1;;6800:23:1;;;6870:2;6855:18;;6842:32;;-1:-1:-1;6921:2:1;6906:18;;6893:32;;6972:2;6957:18;6944:32;;-1:-1:-1;6597:385:1;-1:-1:-1;6597:385:1:o;7669:184::-;7721:77;7718:1;7711:88;7818:4;7815:1;7808:15;7842:4;7839:1;7832:15;7858:125;7898:4;7926:1;7923;7920:8;7917:34;;;7931:18;;:::i;:::-;-1:-1:-1;7968:9:1;;7858:125::o;7988:228::-;8028:7;8154:1;-1:-1:-1;;8082:74:1;8079:1;8076:81;8071:1;8064:9;8057:17;8053:105;8050:131;;;8161:18;;:::i;:::-;-1:-1:-1;8201:9:1;;7988:228::o;8221:274::-;8261:1;8287;8277:189;;8322:77;8319:1;8312:88;8423:4;8420:1;8413:15;8451:4;8448:1;8441:15;8277:189;-1:-1:-1;8480:9:1;;8221:274::o;9271:128::-;9311:3;9342:1;9338:6;9335:1;9332:13;9329:39;;;9348:18;;:::i;:::-;-1:-1:-1;9384:9:1;;9271:128::o;12744:224::-;12783:3;12811:6;12844:2;12841:1;12837:10;12874:2;12871:1;12867:10;12905:3;12901:2;12897:12;12892:3;12889:21;12886:47;;;12913:18;;:::i;:::-;12949:13;;12744:224;-1:-1:-1;;;;12744:224:1:o;13675:251::-;13745:6;13798:2;13786:9;13777:7;13773:23;13769:32;13766:52;;;13814:1;13811;13804:12;13766:52;13846:9;13840:16;13865:31;13890:5;13865:31;:::i;17550:184::-;17602:77;17599:1;17592:88;17699:4;17696:1;17689:15;17723:4;17720:1;17713:15;17739:1026;18001:4;18049:3;18038:9;18034:19;18080:6;18069:9;18062:25;18106:2;18144:6;18139:2;18128:9;18124:18;18117:34;18187:3;18182:2;18171:9;18167:18;18160:31;18211:6;18246;18240:13;18277:6;18269;18262:22;18315:3;18304:9;18300:19;18293:26;;18354:2;18346:6;18342:15;18328:29;;18375:1;18385:218;18399:6;18396:1;18393:13;18385:218;;;18464:13;;-1:-1:-1;;;;;18460:62:1;18448:75;;18578:15;;;;18543:12;;;;18421:1;18414:9;18385:218;;;-1:-1:-1;;;;;;;18659:55:1;;;;18654:2;18639:18;;18632:83;-1:-1:-1;;;18746:3:1;18731:19;18724:35;18620:3;17739:1026;-1:-1:-1;;;17739:1026:1:o;19405:306::-;19493:6;19501;19509;19562:2;19550:9;19541:7;19537:23;19533:32;19530:52;;;19578:1;19575;19568:12;19530:52;19607:9;19601:16;19591:26;;19657:2;19646:9;19642:18;19636:25;19626:35;;19701:2;19690:9;19686:18;19680:25;19670:35;;19405:306;;;;;:::o;20849:245::-;20916:6;20969:2;20957:9;20948:7;20944:23;20940:32;20937:52;;;20985:1;20982;20975:12;20937:52;21017:9;21011:16;21036:28;21058:5;21036:28;:::i

Swarm Source

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