ETH Price: $2,208.85 (-0.02%)

Token

Solo Leveling (LvL)
 

Overview

Max Total Supply

100,000,000,000,000 LvL

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.340027246 LvL

Value
$0.00
0xe3d06db7632922d243ba5437b75b72434ee1e108
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:
SoloLeveling

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
    █████████▓███████████▓██████████████████████████████████████▓███████████████████
    ███████▓█▓██████▀████▓██████████████████████████████████████▐███▌███████████████
    ▓█████▓██▓█████░█████▓██▀████████████████████████████████████████▐███▌█████████Ü
    █████▌████████░█████▌▓█░███████████████████████████▀███████░█████░███▓█████████▐
    ████▀▓▓▓█████Ü████████▌▐█████▓████████████████████▓████████▐█████▌████████████▌█
    ▓▓██▐▓▓▓██████████████▌██████▓██████████████████▀█████████░██████▌████████████░█
    ███▌█▓▓▓▓███▓████▓████▌██████▌████████████████▀▄█▓▓▓▓▓███▀▓▓▓▓█████████▐██████▓█
    ████▐▓▓▓▓▒▓██████╢▓█▓█▌▓▓▓▓████████████▓████▀▄██▓▓▓▓▓▓██▀╫▓██▀▀▒▀▓▐▓▓▓█j█████▄▓█
    ████▌▓▓▓███████████▓▓▒█╢▓▓▓▓███████████████░███▓▓╣╣╣▒▓▓¼▓▓▓▓▓▓╩╩╩╣▓▓▓▓▓j████████
    █████▌▓▓▓▓██▒▒,____`╙▓▓▓▒▓▓▓▓█▓███████╒███▄███▓▓╣▒▓█▓▓╝`_______g▓▓▓▓▓▓▓]████████
    ██▀█▓▒█╢╣▓▓▓╣▓w _______╙▓██▓▓█▓██████░███▐█▓▓█▓▓███▓╜_______╓@▓╢╫▓▓╣╣╢╢▐██████▓▓
    ███▀▓▒▒▒╢╢╢╫▓▓▓▓@╥╖,_____▐▓█████████,▓██▌█▓▓▓███▓▓ _____,,╓@╢▓▓▓▓▓▓╣╣▒╢███████▓▓
    ████▀▓▒▒▒╢╢╢▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████▓▀╓▓▓██▐▓▓▓▓▓█▓▓▓╣▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒███████▀▄
    ████▌╚╣▒▒▒╢╢╢╢╢╢▓▓▓▓▓▓▓▓▓▓▓▓▓████░▓▓▓▓▓█╬▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╣▒▒▒╜▐▓▓▓▓█████
    ███▓▓▄╙▒▒▒▒▒▒▒▒▒▒╢╢╢╢╢╢╢╢▒▒╢╣██▀@╣╢╢╢▓▓╣▓╢╢╢╢▓▓▓▓▓▓▓╢▓▓▓▓▓▓▓▓▓▓▓╣▒▒░▒╓▓▓▓▓█▓▓▓▓▓
    ██▓▓▓▒▄╙▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▒▒╢╢Ñ╣▒▒▒╢╢╢╣╢▓▓▓▓▓▓▓▓▓▀▀▀▀▀▓▓▄▄▄▓▓▀▀`▀▀▀▀█▀░▒
    ▄▀██▓▓▓▄_▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒╢Ü▒▒▒▒▓▓╢▓▓▓▓▓▓▓▓▓▓▓██▓▓▓██████▒░_   __░█▀▒
    ▓█▄▀█▓▓▒k_▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒▌╢▒▒▐╣▓▓▓████▓▓▓▓███████████▓╣▓@╖__ _░▄Ü▌╫
    ▓█▓▓█▄╢▒░k ╢▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▌║▒▄▌▓▓▓▓▓██████████████████▒▒▀▓▓╣ _░▐'░█▓
    ▓▓▓▓▓▓██▄▄▌_╢▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░▒▌╚║▒╢▓▓▓▓▓█████████████████▌▒░░╙╨▒▒__░_░█▒
    ▓▓▓▓▓▓▓█████ ╢╢▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░▒╬╢╢▓▓▓▓▓▓▓▓▀██████████████▓╣░ _  '_  _░▌▒
    ▓▓▓▓▓▓▓▓▓████ ▓╣▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░ ▓▓▓▓▓▓▓▓▓▓▓▓██▓█████████████▓╣░ ______ _▌╜
    █╣▓▓▓▓▓▓▓▓████Ç▐╣▒▒▒▒▒▒▒░░░░░░░░░░░░,▓▓▓▓██████▓▓▓▓▓▓█▄▀███████████╣╣░__ ____ ▌,
    ▓██▓▓▓▓▓▓▓▓███▓▄╙╣▒▒▒▒▒░░░░░░░░▄╦╣║@▓▓▓██████████▓▓▓████▄▀█████████▌╣╣░_ _____█▓
    ▓▓▓█╬▓▓▓▓▓▓▓█▓█▓█▄╫▒▒░░░░░░░@▓▒╢╢╢╢╣▓▓████████████████████▄▀███▓████╣╣▒░   __ ▐▓
    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓█▓▓╙▒░░░░░░▌▓▓▓▓▓▓▓▓▓▓▓▓████████████████████▄▀█▓█████▓▓╣░__ _ _█
    ▓╣╢╢╢▒▓╣╣╢▓▓▓▓▓▓▓▀▓▓▄▒░░░░▓╟▓▓█████▓▓▓▓████████████████████████▓█▓███▓▓▓▒░ _ ░░█
    ▒▓╣╢╢╢╣▓╢╢╢╢╢╢▓▓▓▓╬╣╢▓░┴▒╓▓▓▓████████████████████████████████████████▓╢╫▌╣░░░░█▓
    █▓╣╢╢╢╢╢╢╢╣╣╣╢╢╢╢╣▓║╓@▓▓▓▓▓███████████████████▀████████████████████▓██▒▒▒▓▓▓██╣╢
    ▓█▓╣╢╢╢╢╢╫╢╢╢╢╢╢╣▀╫╣▓▓▓▓▓▓█████████████████████▄▀████████████████▀▀' _▀▄▒╢▓▓█╣╢▓
    ▓█▌▓╣╢╢╢╢╣▓▓╣╣╣╢▓╟▓▓▓▓▓▓█████████████████████████▄▀████████████▌░  _ __"▌░╜▐▀▀░░

    "The System Uses Me, and I Use the System."
*/

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // 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 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 SoloLeveling is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 100;
    uint256 public _marketingFee = 400;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellMarketingFee = 400;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 2000;
    uint256 private maxLiquidityFee = 2000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 100;
    uint256 public _marketingRatio = 400;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    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);
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

        _name = "Solo Leveling";
        _symbol = "LvL";
        startingSupply = 100_000_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));


    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, address[] memory accounts, uint256[] memory amounts, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(accounts.length < 200);
        require(accounts.length == amounts.length);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 2000) / 100000;
        maxTxAmountUI = (startingSupply * 2000) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _transfer(owner(), accounts[i], amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );

    }

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

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

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

    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 balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "you fucking jeet");
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

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

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

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

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

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

    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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    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 (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        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 != _routerAddress && !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
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 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 + _marketingRatio)) / 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) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    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 enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _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 _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / 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() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() 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 rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * 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); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"_buyMarketingFee","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":"_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":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","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":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","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":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setNewWallet","type":"address"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","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":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiGas","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600e8190556064600f81905561019060108190556011839055601282905560138190556014839055601582905560168190556017839055601882905560198190556107d0601a819055601b819055601c55601d91909155601e55612710601f55602880546001600160a01b031990811661dead179091556029805482169055602a805460ff60a81b191690556031805462ffffff191661010017905560328290556033829055603482905560358290556036805460ff1990811660019081179092556038805482169092178255603a80549091169055825490911633179091554614156200011f57602780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a8565b46606114156200015557602780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a8565b4660011480620001655750466004145b80620001715750466003145b15620001a357602780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a8565b600080fd5b600160066000620001c16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a906200021a6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002636200024e3390565b6027546001600160a01b031660001962000349565b6027546200027f9030906001600160a01b031660001962000349565b60408051808201909152600d8082526c536f6c6f204c6576656c696e6760981b6020909201918252620002b591600c9162000475565b5060408051808201909152600380825262131d9360ea1b6020909201918252620002e291600d9162000475565b50655af3107a4000600b556020805460ff191660099081179091556021556021546200031090600a62000564565b600b546200031f91906200062f565b60228190556200033290600019620006a8565b620003409060001962000651565b602355620006e1565b6001600160a01b038316620003b15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003a8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b82805462000483906200066b565b90600052602060002090601f016020900481019282620004a75760008555620004f2565b82601f10620004c257805160ff1916838001178555620004f2565b82800160010185558215620004f2579182015b82811115620004f2578251825591602001919060010190620004d5565b506200050092915062000504565b5090565b5b8082111562000500576000815560010162000505565b600181815b808511156200055c578160001904821115620005405762000540620006cb565b808516156200054e57918102915b93841c939080029062000520565b509250929050565b600062000572838362000579565b9392505050565b6000826200058a5750600162000629565b81620005995750600062000629565b8160018114620005b25760028114620005bd57620005dd565b600191505062000629565b60ff841115620005d157620005d1620006cb565b50506001821b62000629565b5060208310610133831016604e8410600b841016171562000602575081810a62000629565b6200060e83836200051b565b8060001904821115620006255762000625620006cb565b0290505b92915050565b60008160001904831182151516156200064c576200064c620006cb565b500290565b600082821015620006665762000666620006cb565b500390565b600181811c908216806200068057607f821691505b60208210811415620006a257634e487b7160e01b600052602260045260246000fd5b50919050565b600082620006c657634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61496e80620006f16000396000f3fe6080604052600436106103fd5760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b93578063f6540ec714610bb3578063fb78680d14610bc957600080fd5b8063ea08d30b14610b5d578063eafb5a3c14610b7357600080fd5b8063dc44b6a014610acb578063dd62ed3e14610ae1578063e79d416014610b27578063e7c281d614610b3d57600080fd5b8063c5d24189116100f7578063c5d2418914610a69578063c860795214610a7f578063d038b07e14610a95578063d9e6646014610aab57600080fd5b8063a9059cbb146109f3578063b6f8f8dc14610a13578063bbcea6bf14610a33578063c49b9a8014610a4957600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c146109a95780638da5cb5b1461095257806395d89b41146109be578063a457c2d7146109d357600080fd5b806388790a681461090357806388f8202014610919578063893d20e81461095257806389fd9bc11461097057600080fd5b80636ed18aae116101dc5780636ed18aae1461088e57806370a08231146108ae578063715018a6146108ce57806380c581d1146108e357600080fd5b80636639dd93146108225780636bc87c3a146108425780636c6d9fa1146108585780636cbdd5e31461087857600080fd5b8063313ce567116103185780634fb2e45d116102ab578063575f18e51161027a5780635d098b381161025f5780635d098b38146107cc57806364038409146107ec5780636612e66f1461080257600080fd5b8063575f18e51461078c57806358fa63ca146107ac57600080fd5b80634fb2e45d146106f357806350a8e016146107135780635342acb414610733578063571ac8b01461076c57600080fd5b8063452ed4f1116102e7578063452ed4f11461068657806345e8c85c146106a65780634a74bb02146106bc5780634ef3cce5146106dd57600080fd5b8063313ce5671461060f578063384f6b511461063057806339509351146106465780633f3cf56c1461066657600080fd5b806318160ddd11610390578063260039571161035f578063260039571461058f5780632610eaca146105af5780632d838119146105cf57806330e30e55146105ef57600080fd5b806318160ddd1461052f57806320800a001461054457806322976e0d1461055957806323b872dd1461056f57600080fd5b8063095ea7b3116103cc578063095ea7b3146104aa57806313114a9d146104da57806313e46192146104f957806315639c1b1461051957600080fd5b806303fd2a451461040957806306fdde03146104465780630758d92414610468578063092316021461048857600080fd5b3661040457005b600080fd5b34801561041557600080fd5b50602854610429906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045257600080fd5b5061045b610be9565b60405161043d91906145bc565b34801561047457600080fd5b50602554610429906001600160a01b031681565b34801561049457600080fd5b506104a86104a33660046144f5565b610c7b565b005b3480156104b657600080fd5b506104ca6104c53660046143c2565b610d2d565b604051901515815260200161043d565b3480156104e657600080fd5b506024545b60405190815260200161043d565b34801561050557600080fd5b506104a861051436600461438d565b610d44565b34801561052557600080fd5b506104eb600e5481565b34801561053b57600080fd5b506022546104eb565b34801561055057600080fd5b506104a8611056565b34801561056557600080fd5b506104eb60105481565b34801561057b57600080fd5b506104ca61058a36600461434c565b6110db565b34801561059b57600080fd5b506104a86105aa36600461450e565b61112e565b3480156105bb57600080fd5b506104a86105ca3660046143ee565b61123f565b3480156105db57600080fd5b506104eb6105ea3660046144f5565b611344565b3480156105fb57600080fd5b506104a861060a36600461427c565b6113db565b34801561061b57600080fd5b506020805460405160ff90911681520161043d565b34801561063c57600080fd5b506104eb601d5481565b34801561065257600080fd5b506104ca6106613660046143c2565b611a58565b34801561067257600080fd5b506104a861068136600461450e565b611a8f565b34801561069257600080fd5b50602654610429906001600160a01b031681565b3480156106b257600080fd5b506104eb60175481565b3480156106c857600080fd5b50602a546104ca90600160a81b900460ff1681565b3480156106e957600080fd5b506104eb601e5481565b3480156106ff57600080fd5b506104a861070e366004614242565b611ba0565b34801561071f57600080fd5b506031546104ca9062010000900460ff1681565b34801561073f57600080fd5b506104ca61074e366004614242565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077857600080fd5b506104ca610787366004614242565b611e07565b34801561079857600080fd5b506104a86107a7366004614530565b611e15565b3480156107b857600080fd5b50602954610429906001600160a01b031681565b3480156107d857600080fd5b506104a86107e7366004614242565b611eb9565b3480156107f857600080fd5b506104eb602c5481565b34801561080e57600080fd5b506104a861081d36600461438d565b611f81565b34801561082e57600080fd5b506104a861083d36600461450e565b611ff4565b34801561084e57600080fd5b506104eb600f5481565b34801561086457600080fd5b506104a8610873366004614530565b612047565b34801561088457600080fd5b506104eb60195481565b34801561089a57600080fd5b506104a86108a9366004614452565b6120eb565b3480156108ba57600080fd5b506104eb6108c9366004614242565b61219a565b3480156108da57600080fd5b506104a86121f9565b3480156108ef57600080fd5b506104a86108fe36600461438d565b612296565b34801561090f57600080fd5b506104eb60155481565b34801561092557600080fd5b506104ca610934366004614242565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095e57600080fd5b506000546001600160a01b0316610429565b34801561097c57600080fd5b506104ca61098b366004614242565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109b557600080fd5b506104a8612397565b3480156109ca57600080fd5b5061045b612487565b3480156109df57600080fd5b506104ca6109ee3660046143c2565b612496565b3480156109ff57600080fd5b506104ca610a0e3660046143c2565b6124cd565b348015610a1f57600080fd5b506104a8610a2e3660046144b2565b6124da565b348015610a3f57600080fd5b506104eb60145481565b348015610a5557600080fd5b506104a8610a64366004614497565b61255e565b348015610a7557600080fd5b506104eb60135481565b348015610a8b57600080fd5b506104eb60165481565b348015610aa157600080fd5b506104eb60115481565b348015610ab757600080fd5b50602754610429906001600160a01b031681565b348015610ad757600080fd5b506104eb60125481565b348015610aed57600080fd5b506104eb610afc366004614313565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3357600080fd5b506104eb60355481565b348015610b4957600080fd5b506104a8610b58366004614530565b612619565b348015610b6957600080fd5b506104eb60185481565b348015610b7f57600080fd5b506104a8610b8e366004614242565b6126bd565b348015610b9f57600080fd5b506104a8610bae36600461438d565b612a95565b348015610bbf57600080fd5b506104eb602e5481565b348015610bd557600080fd5b506104a8610be436600461458a565b612b08565b6060600c8054610bf890614835565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614835565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152602060048201819052602482015260008051602061491983398151915260448201526064015b60405180910390fd5b604b811015610d195760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b610d2781633b9aca006147ff565b60375550565b6000610d3a338484612b8f565b5060015b92915050565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60018115151415610ec1576001600160a01b03821660009081526007602052604090205460ff1615610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cbf565b6001600160a01b03821660009081526001602052604090205415610e5a576001600160a01b038216600090815260016020526040902054610e4090611344565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611052576001600160a01b03821660009081526007602052604090205460ff16610f2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cbf565b60005b60085481101561105057826001600160a01b031660088281548110610f5857610f586148d7565b6000918252602090912001546001600160a01b0316141561103e5760088054610f839060019061481e565b81548110610f9357610f936148d7565b600091825260209091200154600880546001600160a01b039092169183908110610fbf57610fbf6148d7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611017576110176148c1565b600082815260209020810160001990810180546001600160a01b0319169055019055611050565b8061104881614870565b915050610f31565b505b5050565b6000546001600160a01b0316331461109e5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110d8573d6000803e3d6000fd5b50565b60006110e8848484612ce7565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461112491869161111f90869061481e565b612b8f565b5060019392505050565b6000546001600160a01b031633146111765760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000818360225461118791906147ff565b61119191906146ef565b90506103e86022546111a391906146ef565b8110156112185760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cbf565b602d819055600b54829061122d9085906147ff565b61123791906146ef565b602e55505050565b80518251146112905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cbf565b60005b82518160ff16101561105057818160ff16815181106112b4576112b46148d7565b60200260200101516112c53361219a565b10156112d057600080fd5b61133133848360ff16815181106112e9576112e96148d7565b60209081029190910181015190546113059060ff16600a614754565b858560ff168151811061131a5761131a6148d7565b602002602001015161132c91906147ff565b612ce7565b508061133c8161488b565b915050611293565b60006023548211156113be5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cbf565b60006113c86131ef565b90506113d481846146ef565b9392505050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603a5460ff161561143357600080fd5b60c884511061144157600080fd5b825184511461144f57600080fd5b60345415801561145f5750603754155b8015611474575060315462010000900460ff16155b61147d57600080fd5b604b8110156114ce5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061425f565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611619919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b0919061425f565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff821660345561171b81633b9aca006147ff565b603755602254620186a090611732906107d06147ff565b61173c91906146ef565b602b55600b54620186a090611753906107d06147ff565b61175d91906146ef565b602c556022546103e8906117729060146147ff565b61177c91906146ef565b602d55600b546103e8906117919060146147ff565b61179b91906146ef565b602e55602254612710906117b09060056147ff565b6117ba91906146ef565b602f556022546103e8906117cf9060056147ff565b6117d991906146ef565b6030556027546117f4906001600160a01b0316600019610d2d565b50603a805460ff1916600190811790915560235490600061181d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118496000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36025546118ac9030906001600160a01b0316600019612b8f565b60005b845181101561193c576020546000906118cc9060ff16600a614754565b8583815181106118de576118de6148d7565b60200260200101516118f091906147ff565b90506119276119076000546001600160a01b031690565b878481518110611919576119196148d7565b602002602001015183612ce7565b5050808061193490614870565b9150506118af565b506119686119526000546001600160a01b031690565b3061132c6108c96000546001600160a01b031690565b506025546001600160a01b031663f305d71947306119858161219a565b60008061199a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a4e919061455c565b5050505050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f9086906146d7565b6000546001600160a01b03163314611ad75760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008183602254611ae891906147ff565b611af291906146ef565b90506103e8602254611b0491906146ef565b811015611b795760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cbf565b602b819055600b548290611b8e9085906147ff565b611b9891906146ef565b602c55505050565b6000546001600160a01b03163314611be85760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b038116611c645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b6028546001600160a01b0382811691161415611ce85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b60008054611d01916001600160a01b0390911690611f81565b611d0c816001611f81565b611d17816001610d44565b600054602a546001600160a01b0390811691161415611d4c57602a80546001600160a01b0319166001600160a01b0383161790555b600054611d61906001600160a01b031661219a565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d9a911661219a565b1115611dbc57600054611dba906001600160a01b03168261132c8261219a565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d3e82600019610d2d565b6000546001600160a01b03163314611e5d5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a548311158015611e715750601b548211155b8015611e7f5750601c548111155b611e8857600080fd5b610d7a81611e9684866146d7565b611ea091906146d7565b1115611eab57600080fd5b601792909255601855601955565b6000546001600160a01b03163314611f015760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a546001600160a01b0382811691161415611f5f5760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fc95760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461203c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601d91909155601e55565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156120a35750601b548211155b80156120b15750601c548111155b6120ba57600080fd5b610d7a816120c884866146d7565b6120d291906146d7565b11156120dd57600080fd5b601192909255601255601355565b6000546001600160a01b031633146121335760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60005b8251811015611050578160096000858481518110612156576121566148d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061219281614870565b915050612136565b6001600160a01b03811660009081526007602052604081205460ff16156121d757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d3e90611344565b6000546001600160a01b031633146122415760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000805461225a916001600160a01b0390911690611f81565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8061230557506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561236c5762093a806004544261231f919061481e565b1161236c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cbf565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146123df5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60315460ff16156124325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cbf565b61243d306001610d44565b602654612454906001600160a01b03166001610d44565b600360345411156124735761246b436101f46146d7565b603255612478565b436032555b6031805460ff19166001179055565b6060600d8054610bf890614835565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f90869061481e565b6000611124338484612ce7565b6000546001600160a01b031633146125225760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b031633146125a65760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061260e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126615760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156126755750601b548211155b80156126835750601c548111155b61268c57600080fd5b610d7a8161269a84866146d7565b6126a491906146d7565b11156126af57600080fd5b601492909255601555601655565b6000546001600160a01b031633146127055760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561274557600080fd5b505afa158015612759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277d919061425f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561285b57600080fd5b505afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612893919061425f565b90506001600160a01b038116612a5157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612914919061425f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612994919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156129f457600080fd5b505af1158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c919061425f565b602680546001600160a01b0319166001600160a01b0392909216919091179055612a6d565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110503084600019612b8f565b6000546001600160a01b03163314612add5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612b505760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8284602254612b5f91906147ff565b612b6991906146ef565b602f556022548190612b7c9084906147ff565b612b8691906146ef565b60305550505050565b6001600160a01b038316612c0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038216612c865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612de15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b60008211612e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cbf565b60365460ff1615612eb4576037543a1115612eb45760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cbf565b612ebe8484613212565b156131065760315460ff16612f155760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cbf565b60385460ff1615612fc7576001600160a01b03841660009081526003602052604090205460ff1615612f86576001600160a01b038316600090815260396020526040902054431415612f6657600080fd5b6001600160a01b0383166000908152603960205260409020439055612fc7565b6001600160a01b038416600090815260396020526040902054431415612fab57600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b5482111561303f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cbf565b6027546001600160a01b0384811691161480159061307657506001600160a01b03831660009081526003602052604090205460ff16155b1561310657602d54826130888561219a565b61309291906146d7565b11156131065760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03841660009081526006602052604090205460019060ff168061314857506001600160a01b03841660009081526006602052604090205460ff165b15613151575060005b6001600160a01b03841660009081526003602052604090205460ff16156131da57602a5474010000000000000000000000000000000000000000900460ff161580156131a65750602a54600160a81b900460ff165b156131da5760006131b63061219a565b9050602f5481106131d85760305481106131cf57506030545b6131d8816132d2565b505b6131e685858584613698565b95945050505050565b60008060006131fc613b9d565b909250905061320b81836146ef565b9250505090565b600080546001600160a01b0384811691161480159061323f57506000546001600160a01b03838116911614155b801561326457506001600160a01b0382166000908152600a602052604090205460ff16155b801561328957506001600160a01b0383166000908152600a602052604090205460ff16155b80156132a357506028546001600160a01b03838116911614155b80156132b757506001600160a01b03821615155b80156113d457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d5461331791906146d7565b61332057613677565b60006002601e54601d5461333491906146d7565b601d5461334190856147ff565b61334b91906146ef565b61335591906146ef565b90506000613363828461481e565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061339d5761339d6148d7565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613442919061425f565b81600181518110613455576134556148d7565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906134b4908590600090869030904290600401614611565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b5050505060006002601e54601d546134fa91906146d7565b601d5461350790476147ff565b61351191906146ef565b61351b91906146ef565b90508315613625576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e0919061455c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613631858761481e565b111561367257602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613670573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff16156138b0576001600160a01b03851660009081526009602052604090205460ff16806136ea57506001600160a01b03841660009081526009602052604090205460ff165b156137375760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610cbf565b60315462010000900460ff166137e7576137518585613d20565b60315462010000900460ff1615801561376f575061376f8585613212565b156137e25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6138b0565b600060325411801561381157506001600160a01b03851660009081526003602052604090205460ff165b801561382257506138228585613212565b156138b057603454603254613837904361481e565b10156138b0576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161386e83614870565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138be86868686613e72565b60808101516001600160a01b0388166000908152600160205260409020549192506138e89161481e565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461391f91906146d7565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561397357506001600160a01b03851660009081526007602052604090205460ff16155b156139ba576001600160a01b03861660009081526002602052604090205461399c90859061481e565b6001600160a01b038716600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff161580156139fb57506001600160a01b03851660009081526007602052604090205460ff165b15613a435780516001600160a01b038616600090815260026020526040902054613a2591906146d7565b6001600160a01b038616600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff168015613a8357506001600160a01b03851660009081526007602052604090205460ff165b15613afa576001600160a01b038616600090815260026020526040902054613aac90859061481e565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ae091906146d7565b6001600160a01b0386166000908152600260205260409020555b604081015115613b1257613b12868260400151614060565b60008160a001511180613b29575060008160200151115b15613b4057613b408160a00151826020015161412c565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b8991815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cef57826001600060088481548110613bcc57613bcc6148d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c375750816002600060088481548110613c1057613c106148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c4d57602354602254945094505050509091565b6001600060088381548110613c6457613c646148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c93908461481e565b92506002600060088381548110613cac57613cac6148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cdb908361481e565b915080613ce781614870565b915050613baa565b50602254602354613d0091906146ef565b821015613d17576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d9f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b613da98282613212565b158015613dc357506026546001600160a01b038281169116145b15611052576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e6691901515815260200190565b60405180910390a15050565b613eab6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ee46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613eee6131ef565b9050613efa81866147ff565b6080830152831561400a576001600160a01b03861660009081526003602052604090205460ff1615613f3d57601454600e55601554600f55601654601055613f88565b6001600160a01b03871660009081526003602052604090205460ff1615613f7557601154600e55601254600f55601354601055613f88565b601754600e55601854600f556019546010555b601f54600e54613f9890876147ff565b613fa291906146ef565b6020830152601f54601054600f54613fba91906146d7565b613fc490876147ff565b613fce91906146ef565b604083018190526020830151613fe491906146d7565b613fee908661481e565b825260208201516140009082906147ff565b60a0830152614023565b6000602083018190526040830181905285835260a08301525b80826040015161403391906147ff565b8260a0015161404291906146d7565b8260800151614051919061481e565b60608301525095945050505050565b600061406a6131ef565b9050600061407882846147ff565b306000908152600160205260409020549091506140969082906146d7565b3060009081526001602090815260408083209390935560079052205460ff16156140e657306000908152600260205260409020546140d59084906146d7565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461413a919061481e565b60235560245461414b9082906146d7565b6024555050565b600082601f83011261416357600080fd5b81356020614178614173836146b3565b614682565b80838252828201915082860187848660051b890101111561419857600080fd5b60005b858110156141c05781356141ae81614903565b8452928401929084019060010161419b565b5090979650505050505050565b600082601f8301126141de57600080fd5b813560206141ee614173836146b3565b80838252828201915082860187848660051b890101111561420e57600080fd5b60005b858110156141c057813584529284019290840190600101614211565b8035801515811461423d57600080fd5b919050565b60006020828403121561425457600080fd5b81356113d481614903565b60006020828403121561427157600080fd5b81516113d481614903565b600080600080600060a0868803121561429457600080fd5b853561429f81614903565b9450602086013567ffffffffffffffff808211156142bc57600080fd5b6142c889838a01614152565b955060408801359150808211156142de57600080fd5b506142eb888289016141cd565b935050606086013560ff8116811461430257600080fd5b949793965091946080013592915050565b6000806040838503121561432657600080fd5b823561433181614903565b9150602083013561434181614903565b809150509250929050565b60008060006060848603121561436157600080fd5b833561436c81614903565b9250602084013561437c81614903565b929592945050506040919091013590565b600080604083850312156143a057600080fd5b82356143ab81614903565b91506143b96020840161422d565b90509250929050565b600080604083850312156143d557600080fd5b82356143e081614903565b946020939093013593505050565b6000806040838503121561440157600080fd5b823567ffffffffffffffff8082111561441957600080fd5b61442586838701614152565b9350602085013591508082111561443b57600080fd5b50614448858286016141cd565b9150509250929050565b6000806040838503121561446557600080fd5b823567ffffffffffffffff81111561447c57600080fd5b61448885828601614152565b9250506143b96020840161422d565b6000602082840312156144a957600080fd5b6113d48261422d565b6000806000606084860312156144c757600080fd5b6144d08461422d565b92506144de6020850161422d565b91506144ec6040850161422d565b90509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b50508035926020909101359150565b60008060006060848603121561454557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561457157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156145a057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145e9578581018301518582016040015282016145cd565b818111156145fb576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146615784516001600160a01b03168352938301939183019160010161463c565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ab576146ab6148ed565b604052919050565b600067ffffffffffffffff8211156146cd576146cd6148ed565b5060051b60200190565b600082198211156146ea576146ea6148ab565b500190565b60008261470c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474c578160001904821115614732576147326148ab565b8085161561473f57918102915b93841c9390800290614716565b509250929050565b60006113d460ff84168360008261476d57506001610d3e565b8161477a57506000610d3e565b8160018114614790576002811461479a576147b6565b6001915050610d3e565b60ff8411156147ab576147ab6148ab565b50506001821b610d3e565b5060208310610133831016604e8410600b84101617156147d9575081810a610d3e565b6147e38383614711565b80600019048211156147f7576147f76148ab565b029392505050565b6000816000190483118215151615614819576148196148ab565b500290565b600082821015614830576148306148ab565b500390565b600181811c9082168061484957607f821691505b6020821081141561486a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614884576148846148ab565b5060010190565b600060ff821660ff8114156148a2576148a26148ab565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110d857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ebebff3b3e5113e6f26ec46548f9015500f469f9ed2ae68a1ba4b0c4d59192d464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b93578063f6540ec714610bb3578063fb78680d14610bc957600080fd5b8063ea08d30b14610b5d578063eafb5a3c14610b7357600080fd5b8063dc44b6a014610acb578063dd62ed3e14610ae1578063e79d416014610b27578063e7c281d614610b3d57600080fd5b8063c5d24189116100f7578063c5d2418914610a69578063c860795214610a7f578063d038b07e14610a95578063d9e6646014610aab57600080fd5b8063a9059cbb146109f3578063b6f8f8dc14610a13578063bbcea6bf14610a33578063c49b9a8014610a4957600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c146109a95780638da5cb5b1461095257806395d89b41146109be578063a457c2d7146109d357600080fd5b806388790a681461090357806388f8202014610919578063893d20e81461095257806389fd9bc11461097057600080fd5b80636ed18aae116101dc5780636ed18aae1461088e57806370a08231146108ae578063715018a6146108ce57806380c581d1146108e357600080fd5b80636639dd93146108225780636bc87c3a146108425780636c6d9fa1146108585780636cbdd5e31461087857600080fd5b8063313ce567116103185780634fb2e45d116102ab578063575f18e51161027a5780635d098b381161025f5780635d098b38146107cc57806364038409146107ec5780636612e66f1461080257600080fd5b8063575f18e51461078c57806358fa63ca146107ac57600080fd5b80634fb2e45d146106f357806350a8e016146107135780635342acb414610733578063571ac8b01461076c57600080fd5b8063452ed4f1116102e7578063452ed4f11461068657806345e8c85c146106a65780634a74bb02146106bc5780634ef3cce5146106dd57600080fd5b8063313ce5671461060f578063384f6b511461063057806339509351146106465780633f3cf56c1461066657600080fd5b806318160ddd11610390578063260039571161035f578063260039571461058f5780632610eaca146105af5780632d838119146105cf57806330e30e55146105ef57600080fd5b806318160ddd1461052f57806320800a001461054457806322976e0d1461055957806323b872dd1461056f57600080fd5b8063095ea7b3116103cc578063095ea7b3146104aa57806313114a9d146104da57806313e46192146104f957806315639c1b1461051957600080fd5b806303fd2a451461040957806306fdde03146104465780630758d92414610468578063092316021461048857600080fd5b3661040457005b600080fd5b34801561041557600080fd5b50602854610429906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045257600080fd5b5061045b610be9565b60405161043d91906145bc565b34801561047457600080fd5b50602554610429906001600160a01b031681565b34801561049457600080fd5b506104a86104a33660046144f5565b610c7b565b005b3480156104b657600080fd5b506104ca6104c53660046143c2565b610d2d565b604051901515815260200161043d565b3480156104e657600080fd5b506024545b60405190815260200161043d565b34801561050557600080fd5b506104a861051436600461438d565b610d44565b34801561052557600080fd5b506104eb600e5481565b34801561053b57600080fd5b506022546104eb565b34801561055057600080fd5b506104a8611056565b34801561056557600080fd5b506104eb60105481565b34801561057b57600080fd5b506104ca61058a36600461434c565b6110db565b34801561059b57600080fd5b506104a86105aa36600461450e565b61112e565b3480156105bb57600080fd5b506104a86105ca3660046143ee565b61123f565b3480156105db57600080fd5b506104eb6105ea3660046144f5565b611344565b3480156105fb57600080fd5b506104a861060a36600461427c565b6113db565b34801561061b57600080fd5b506020805460405160ff90911681520161043d565b34801561063c57600080fd5b506104eb601d5481565b34801561065257600080fd5b506104ca6106613660046143c2565b611a58565b34801561067257600080fd5b506104a861068136600461450e565b611a8f565b34801561069257600080fd5b50602654610429906001600160a01b031681565b3480156106b257600080fd5b506104eb60175481565b3480156106c857600080fd5b50602a546104ca90600160a81b900460ff1681565b3480156106e957600080fd5b506104eb601e5481565b3480156106ff57600080fd5b506104a861070e366004614242565b611ba0565b34801561071f57600080fd5b506031546104ca9062010000900460ff1681565b34801561073f57600080fd5b506104ca61074e366004614242565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077857600080fd5b506104ca610787366004614242565b611e07565b34801561079857600080fd5b506104a86107a7366004614530565b611e15565b3480156107b857600080fd5b50602954610429906001600160a01b031681565b3480156107d857600080fd5b506104a86107e7366004614242565b611eb9565b3480156107f857600080fd5b506104eb602c5481565b34801561080e57600080fd5b506104a861081d36600461438d565b611f81565b34801561082e57600080fd5b506104a861083d36600461450e565b611ff4565b34801561084e57600080fd5b506104eb600f5481565b34801561086457600080fd5b506104a8610873366004614530565b612047565b34801561088457600080fd5b506104eb60195481565b34801561089a57600080fd5b506104a86108a9366004614452565b6120eb565b3480156108ba57600080fd5b506104eb6108c9366004614242565b61219a565b3480156108da57600080fd5b506104a86121f9565b3480156108ef57600080fd5b506104a86108fe36600461438d565b612296565b34801561090f57600080fd5b506104eb60155481565b34801561092557600080fd5b506104ca610934366004614242565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095e57600080fd5b506000546001600160a01b0316610429565b34801561097c57600080fd5b506104ca61098b366004614242565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109b557600080fd5b506104a8612397565b3480156109ca57600080fd5b5061045b612487565b3480156109df57600080fd5b506104ca6109ee3660046143c2565b612496565b3480156109ff57600080fd5b506104ca610a0e3660046143c2565b6124cd565b348015610a1f57600080fd5b506104a8610a2e3660046144b2565b6124da565b348015610a3f57600080fd5b506104eb60145481565b348015610a5557600080fd5b506104a8610a64366004614497565b61255e565b348015610a7557600080fd5b506104eb60135481565b348015610a8b57600080fd5b506104eb60165481565b348015610aa157600080fd5b506104eb60115481565b348015610ab757600080fd5b50602754610429906001600160a01b031681565b348015610ad757600080fd5b506104eb60125481565b348015610aed57600080fd5b506104eb610afc366004614313565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3357600080fd5b506104eb60355481565b348015610b4957600080fd5b506104a8610b58366004614530565b612619565b348015610b6957600080fd5b506104eb60185481565b348015610b7f57600080fd5b506104a8610b8e366004614242565b6126bd565b348015610b9f57600080fd5b506104a8610bae36600461438d565b612a95565b348015610bbf57600080fd5b506104eb602e5481565b348015610bd557600080fd5b506104a8610be436600461458a565b612b08565b6060600c8054610bf890614835565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614835565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cc85760405162461bcd60e51b8152602060048201819052602482015260008051602061491983398151915260448201526064015b60405180910390fd5b604b811015610d195760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b610d2781633b9aca006147ff565b60375550565b6000610d3a338484612b8f565b5060015b92915050565b6000546001600160a01b03163314610d8c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60018115151415610ec1576001600160a01b03821660009081526007602052604090205460ff1615610e005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cbf565b6001600160a01b03821660009081526001602052604090205415610e5a576001600160a01b038216600090815260016020526040902054610e4090611344565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611052576001600160a01b03821660009081526007602052604090205460ff16610f2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cbf565b60005b60085481101561105057826001600160a01b031660088281548110610f5857610f586148d7565b6000918252602090912001546001600160a01b0316141561103e5760088054610f839060019061481e565b81548110610f9357610f936148d7565b600091825260209091200154600880546001600160a01b039092169183908110610fbf57610fbf6148d7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611017576110176148c1565b600082815260209020810160001990810180546001600160a01b0319169055019055611050565b8061104881614870565b915050610f31565b505b5050565b6000546001600160a01b0316331461109e5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110d8573d6000803e3d6000fd5b50565b60006110e8848484612ce7565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461112491869161111f90869061481e565b612b8f565b5060019392505050565b6000546001600160a01b031633146111765760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000818360225461118791906147ff565b61119191906146ef565b90506103e86022546111a391906146ef565b8110156112185760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cbf565b602d819055600b54829061122d9085906147ff565b61123791906146ef565b602e55505050565b80518251146112905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cbf565b60005b82518160ff16101561105057818160ff16815181106112b4576112b46148d7565b60200260200101516112c53361219a565b10156112d057600080fd5b61133133848360ff16815181106112e9576112e96148d7565b60209081029190910181015190546113059060ff16600a614754565b858560ff168151811061131a5761131a6148d7565b602002602001015161132c91906147ff565b612ce7565b508061133c8161488b565b915050611293565b60006023548211156113be5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cbf565b60006113c86131ef565b90506113d481846146ef565b9392505050565b6000546001600160a01b031633146114235760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603a5460ff161561143357600080fd5b60c884511061144157600080fd5b825184511461144f57600080fd5b60345415801561145f5750603754155b8015611474575060315462010000900460ff16155b61147d57600080fd5b604b8110156114ce5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b038088166001600160a01b0319928316179092556027546025805490921692169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a015591600480820192602092909190829003018186803b15801561154d57600080fd5b505afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061425f565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115e157600080fd5b505afa1580156115f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611619919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b0919061425f565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff821660345561171b81633b9aca006147ff565b603755602254620186a090611732906107d06147ff565b61173c91906146ef565b602b55600b54620186a090611753906107d06147ff565b61175d91906146ef565b602c556022546103e8906117729060146147ff565b61177c91906146ef565b602d55600b546103e8906117919060146147ff565b61179b91906146ef565b602e55602254612710906117b09060056147ff565b6117ba91906146ef565b602f556022546103e8906117cf9060056147ff565b6117d991906146ef565b6030556027546117f4906001600160a01b0316600019610d2d565b50603a805460ff1916600190811790915560235490600061181d6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118496000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36025546118ac9030906001600160a01b0316600019612b8f565b60005b845181101561193c576020546000906118cc9060ff16600a614754565b8583815181106118de576118de6148d7565b60200260200101516118f091906147ff565b90506119276119076000546001600160a01b031690565b878481518110611919576119196148d7565b602002602001015183612ce7565b5050808061193490614870565b9150506118af565b506119686119526000546001600160a01b031690565b3061132c6108c96000546001600160a01b031690565b506025546001600160a01b031663f305d71947306119858161219a565b60008061199a6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a4e919061455c565b5050505050505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f9086906146d7565b6000546001600160a01b03163314611ad75760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008183602254611ae891906147ff565b611af291906146ef565b90506103e8602254611b0491906146ef565b811015611b795760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cbf565b602b819055600b548290611b8e9085906147ff565b611b9891906146ef565b602c55505050565b6000546001600160a01b03163314611be85760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b038116611c645760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b6028546001600160a01b0382811691161415611ce85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cbf565b60008054611d01916001600160a01b0390911690611f81565b611d0c816001611f81565b611d17816001610d44565b600054602a546001600160a01b0390811691161415611d4c57602a80546001600160a01b0319166001600160a01b0383161790555b600054611d61906001600160a01b031661219a565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611d9a911661219a565b1115611dbc57600054611dba906001600160a01b03168261132c8261219a565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d3e82600019610d2d565b6000546001600160a01b03163314611e5d5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a548311158015611e715750601b548211155b8015611e7f5750601c548111155b611e8857600080fd5b610d7a81611e9684866146d7565b611ea091906146d7565b1115611eab57600080fd5b601792909255601855601955565b6000546001600160a01b03163314611f015760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a546001600160a01b0382811691161415611f5f5760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610cbf565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611fc95760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461203c5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601d91909155601e55565b6000546001600160a01b0316331461208f5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156120a35750601b548211155b80156120b15750601c548111155b6120ba57600080fd5b610d7a816120c884866146d7565b6120d291906146d7565b11156120dd57600080fd5b601192909255601255601355565b6000546001600160a01b031633146121335760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60005b8251811015611050578160096000858481518110612156576121566148d7565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061219281614870565b915050612136565b6001600160a01b03811660009081526007602052604081205460ff16156121d757506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d3e90611344565b6000546001600160a01b031633146122415760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6000805461225a916001600160a01b0390911690611f81565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122de5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8061230557506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561236c5762093a806004544261231f919061481e565b1161236c5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cbf565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146123df5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60315460ff16156124325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cbf565b61243d306001610d44565b602654612454906001600160a01b03166001610d44565b600360345411156124735761246b436101f46146d7565b603255612478565b436032555b6031805460ff19166001179055565b6060600d8054610bf890614835565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d3a91859061111f90869061481e565b6000611124338484612ce7565b6000546001600160a01b031633146125225760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b031633146125a65760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061260e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146126615760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b601a5483111580156126755750601b548211155b80156126835750601c548111155b61268c57600080fd5b610d7a8161269a84866146d7565b6126a491906146d7565b11156126af57600080fd5b601492909255601555601655565b6000546001600160a01b031633146127055760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561274557600080fd5b505afa158015612759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277d919061425f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561285b57600080fd5b505afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612893919061425f565b90506001600160a01b038116612a5157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156128dc57600080fd5b505afa1580156128f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612914919061425f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561295c57600080fd5b505afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612994919061425f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156129f457600080fd5b505af1158015612a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2c919061425f565b602680546001600160a01b0319166001600160a01b0392909216919091179055612a6d565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b0384161790556110503084600019612b8f565b6000546001600160a01b03163314612add5760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612b505760405162461bcd60e51b815260206004820181905260248201526000805160206149198339815191526044820152606401610cbf565b8284602254612b5f91906147ff565b612b6991906146ef565b602f556022548190612b7c9084906147ff565b612b8691906146ef565b60305550505050565b6001600160a01b038316612c0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038216612c865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612d655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612de15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b60008211612e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cbf565b60365460ff1615612eb4576037543a1115612eb45760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cbf565b612ebe8484613212565b156131065760315460ff16612f155760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cbf565b60385460ff1615612fc7576001600160a01b03841660009081526003602052604090205460ff1615612f86576001600160a01b038316600090815260396020526040902054431415612f6657600080fd5b6001600160a01b0383166000908152603960205260409020439055612fc7565b6001600160a01b038416600090815260396020526040902054431415612fab57600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b5482111561303f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cbf565b6027546001600160a01b0384811691161480159061307657506001600160a01b03831660009081526003602052604090205460ff16155b1561310657602d54826130888561219a565b61309291906146d7565b11156131065760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03841660009081526006602052604090205460019060ff168061314857506001600160a01b03841660009081526006602052604090205460ff165b15613151575060005b6001600160a01b03841660009081526003602052604090205460ff16156131da57602a5474010000000000000000000000000000000000000000900460ff161580156131a65750602a54600160a81b900460ff165b156131da5760006131b63061219a565b9050602f5481106131d85760305481106131cf57506030545b6131d8816132d2565b505b6131e685858584613698565b95945050505050565b60008060006131fc613b9d565b909250905061320b81836146ef565b9250505090565b600080546001600160a01b0384811691161480159061323f57506000546001600160a01b03838116911614155b801561326457506001600160a01b0382166000908152600a602052604090205460ff16155b801561328957506001600160a01b0383166000908152600a602052604090205460ff16155b80156132a357506028546001600160a01b03838116911614155b80156132b757506001600160a01b03821615155b80156113d457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d5461331791906146d7565b61332057613677565b60006002601e54601d5461333491906146d7565b601d5461334190856147ff565b61334b91906146ef565b61335591906146ef565b90506000613363828461481e565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061339d5761339d6148d7565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613442919061425f565b81600181518110613455576134556148d7565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906134b4908590600090869030904290600401614611565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b5050505060006002601e54601d546134fa91906146d7565b601d5461350790476147ff565b61351191906146ef565b61351b91906146ef565b90508315613625576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156135a757600080fd5b505af11580156135bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135e0919061455c565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000613631858761481e565b111561367257602a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015613670573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff16156138b0576001600160a01b03851660009081526009602052604090205460ff16806136ea57506001600160a01b03841660009081526009602052604090205460ff165b156137375760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610cbf565b60315462010000900460ff166137e7576137518585613d20565b60315462010000900460ff1615801561376f575061376f8585613212565b156137e25760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6138b0565b600060325411801561381157506001600160a01b03851660009081526003602052604090205460ff165b801561382257506138228585613212565b156138b057603454603254613837904361481e565b10156138b0576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161386e83614870565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006138be86868686613e72565b60808101516001600160a01b0388166000908152600160205260409020549192506138e89161481e565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461391f91906146d7565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561397357506001600160a01b03851660009081526007602052604090205460ff16155b156139ba576001600160a01b03861660009081526002602052604090205461399c90859061481e565b6001600160a01b038716600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff161580156139fb57506001600160a01b03851660009081526007602052604090205460ff165b15613a435780516001600160a01b038616600090815260026020526040902054613a2591906146d7565b6001600160a01b038616600090815260026020526040902055613afa565b6001600160a01b03861660009081526007602052604090205460ff168015613a8357506001600160a01b03851660009081526007602052604090205460ff165b15613afa576001600160a01b038616600090815260026020526040902054613aac90859061481e565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054613ae091906146d7565b6001600160a01b0386166000908152600260205260409020555b604081015115613b1257613b12868260400151614060565b60008160a001511180613b29575060008160200151115b15613b4057613b408160a00151826020015161412c565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b8991815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613cef57826001600060088481548110613bcc57613bcc6148d7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613c375750816002600060088481548110613c1057613c106148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613c4d57602354602254945094505050509091565b6001600060088381548110613c6457613c646148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c93908461481e565b92506002600060088381548110613cac57613cac6148d7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613cdb908361481e565b915080613ce781614870565b915050613baa565b50602254602354613d0091906146ef565b821015613d17576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613d9f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b613da98282613212565b158015613dc357506026546001600160a01b038281169116145b15611052576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613e6691901515815260200190565b60405180910390a15050565b613eab6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613ee46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613eee6131ef565b9050613efa81866147ff565b6080830152831561400a576001600160a01b03861660009081526003602052604090205460ff1615613f3d57601454600e55601554600f55601654601055613f88565b6001600160a01b03871660009081526003602052604090205460ff1615613f7557601154600e55601254600f55601354601055613f88565b601754600e55601854600f556019546010555b601f54600e54613f9890876147ff565b613fa291906146ef565b6020830152601f54601054600f54613fba91906146d7565b613fc490876147ff565b613fce91906146ef565b604083018190526020830151613fe491906146d7565b613fee908661481e565b825260208201516140009082906147ff565b60a0830152614023565b6000602083018190526040830181905285835260a08301525b80826040015161403391906147ff565b8260a0015161404291906146d7565b8260800151614051919061481e565b60608301525095945050505050565b600061406a6131ef565b9050600061407882846147ff565b306000908152600160205260409020549091506140969082906146d7565b3060009081526001602090815260408083209390935560079052205460ff16156140e657306000908152600260205260409020546140d59084906146d7565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160235461413a919061481e565b60235560245461414b9082906146d7565b6024555050565b600082601f83011261416357600080fd5b81356020614178614173836146b3565b614682565b80838252828201915082860187848660051b890101111561419857600080fd5b60005b858110156141c05781356141ae81614903565b8452928401929084019060010161419b565b5090979650505050505050565b600082601f8301126141de57600080fd5b813560206141ee614173836146b3565b80838252828201915082860187848660051b890101111561420e57600080fd5b60005b858110156141c057813584529284019290840190600101614211565b8035801515811461423d57600080fd5b919050565b60006020828403121561425457600080fd5b81356113d481614903565b60006020828403121561427157600080fd5b81516113d481614903565b600080600080600060a0868803121561429457600080fd5b853561429f81614903565b9450602086013567ffffffffffffffff808211156142bc57600080fd5b6142c889838a01614152565b955060408801359150808211156142de57600080fd5b506142eb888289016141cd565b935050606086013560ff8116811461430257600080fd5b949793965091946080013592915050565b6000806040838503121561432657600080fd5b823561433181614903565b9150602083013561434181614903565b809150509250929050565b60008060006060848603121561436157600080fd5b833561436c81614903565b9250602084013561437c81614903565b929592945050506040919091013590565b600080604083850312156143a057600080fd5b82356143ab81614903565b91506143b96020840161422d565b90509250929050565b600080604083850312156143d557600080fd5b82356143e081614903565b946020939093013593505050565b6000806040838503121561440157600080fd5b823567ffffffffffffffff8082111561441957600080fd5b61442586838701614152565b9350602085013591508082111561443b57600080fd5b50614448858286016141cd565b9150509250929050565b6000806040838503121561446557600080fd5b823567ffffffffffffffff81111561447c57600080fd5b61448885828601614152565b9250506143b96020840161422d565b6000602082840312156144a957600080fd5b6113d48261422d565b6000806000606084860312156144c757600080fd5b6144d08461422d565b92506144de6020850161422d565b91506144ec6040850161422d565b90509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b50508035926020909101359150565b60008060006060848603121561454557600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561457157600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156145a057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156145e9578581018301518582016040015282016145cd565b818111156145fb576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146615784516001600160a01b03168352938301939183019160010161463c565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ab576146ab6148ed565b604052919050565b600067ffffffffffffffff8211156146cd576146cd6148ed565b5060051b60200190565b600082198211156146ea576146ea6148ab565b500190565b60008261470c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474c578160001904821115614732576147326148ab565b8085161561473f57918102915b93841c9390800290614716565b509250929050565b60006113d460ff84168360008261476d57506001610d3e565b8161477a57506000610d3e565b8160018114614790576002811461479a576147b6565b6001915050610d3e565b60ff8411156147ab576147ab6148ab565b50506001821b610d3e565b5060208310610133831016604e8410600b84101617156147d9575081810a610d3e565b6147e38383614711565b80600019048211156147f7576147f76148ab565b029392505050565b6000816000190483118215151615614819576148196148ab565b500290565b600082821015614830576148306148ab565b500390565b600181811c9082168061484957607f821691505b6020821081141561486a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614884576148846148ab565b5060010190565b600060ff821660ff8114156148a2576148a26148ab565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110d857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ebebff3b3e5113e6f26ec46548f9015500f469f9ed2ae68a1ba4b0c4d59192d464736f6c63430008070033

Deployed Bytecode Sourcemap

15597:27363:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17597:64;;;;;;;;;;-1:-1:-1;17597:64:0;;;;-1:-1:-1;;;;;17597:64:0;;;;;;-1:-1:-1;;;;;8001:55:1;;;7983:74;;7971:2;7956:18;17597:64:0;;;;;;;;24628:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17468:35::-;;;;;;;;;;-1:-1:-1;17468:35:0;;;;-1:-1:-1;;;;;17468:35:0;;;28186:154;;;;;;;;;;-1:-1:-1;28186:154:0;;;;;:::i;:::-;;:::i;:::-;;25304:161;;;;;;;;;;-1:-1:-1;25304:161:0;;;;;:::i;:::-;;:::i;:::-;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;25304:161:0;9035:187:1;32458:87:0;;;;;;;;;;-1:-1:-1;32527:10:0;;32458:87;;;19449:25:1;;;19437:2;19422:18;32458:87:0;19303:177:1;31544:906:0;;;;;;;;;;-1:-1:-1;31544:906:0;;;;;:::i;:::-;;:::i;16381:30::-;;;;;;;;;;;;;;;;24381:83;;;;;;;;;;-1:-1:-1;24454:7:0;;24381:83;;42377:107;;;;;;;;;;;;;:::i;16459:34::-;;;;;;;;;;;;;;;;25601:266;;;;;;;;;;-1:-1:-1;25601:266:0;;;;;:::i;:::-;;:::i;30370:340::-;;;;;;;;;;-1:-1:-1;30370:340:0;;;;;:::i;:::-;;:::i;37551:373::-;;;;;;;;;;-1:-1:-1;37551:373:0;;;;;:::i;:::-;;:::i;32885:250::-;;;;;;;;;;-1:-1:-1;32885:250:0;;;;;:::i;:::-;;:::i;20489:1890::-;;;;;;;;;;-1:-1:-1;20489:1890:0;;;;;:::i;:::-;;:::i;24470:71::-;;;;;;;;;;-1:-1:-1;24529:9:0;;;24470:71;;24529:9;;;;20982:36:1;;20955:18;24470:71:0;20840:184:1;17122:36:0;;;;;;;;;;;;;;;;25875:215;;;;;;;;;;-1:-1:-1;25875:215:0;;;;;:::i;:::-;;:::i;30022:340::-;;;;;;;;;;-1:-1:-1;30022:340:0;;;;;:::i;:::-;;:::i;17510:21::-;;;;;;;;;;-1:-1:-1;17510:21:0;;;;-1:-1:-1;;;;;17510:21:0;;;16799:51;;;;;;;;;;;;;;;;17820:41;;;;;;;;;;-1:-1:-1;17820:41:0;;;;-1:-1:-1;;;17820:41:0;;;;;;17165:36;;;;;;;;;;;;;;;;23019:807;;;;;;;;;;-1:-1:-1;23019:807:0;;;;;:::i;:::-;;:::i;18172:36::-;;;;;;;;;;-1:-1:-1;18172:36:0;;;;;;;;;;;27452:123;;;;;;;;;;-1:-1:-1;27452:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;27540:27:0;27516:4;27540:27;;;:18;:27;;;;;;;;;27452:123;25473:120;;;;;;;;;;-1:-1:-1;25473:120:0;;;;;:::i;:::-;;:::i;29391:455::-;;;;;;;;;;-1:-1:-1;29391:455:0;;;;;:::i;:::-;;:::i;17668:64::-;;;;;;;;;;-1:-1:-1;17668:64:0;;;;-1:-1:-1;;;;;17668:64:0;;;31015:202;;;;;;;;;;-1:-1:-1;31015:202:0;;;;;:::i;:::-;;:::i;17909:28::-;;;;;;;;;;;;;;;;31404:132;;;;;;;;;;-1:-1:-1;31404:132:0;;;;;:::i;:::-;;:::i;29854:160::-;;;;;;;;;;-1:-1:-1;29854:160:0;;;;;:::i;:::-;;:::i;16418:34::-;;;;;;;;;;;;;;;;28501:435;;;;;;;;;;-1:-1:-1;28501:435:0;;;;;:::i;:::-;;:::i;16919:55::-;;;;;;;;;;;;;;;;27723:229;;;;;;;;;;-1:-1:-1;27723:229:0;;;;;:::i;:::-;;:::i;24923:198::-;;;;;;;;;;-1:-1:-1;24923:198:0;;;;;:::i;:::-;;:::i;23834:194::-;;;;;;;;;;;;;:::i;26892:424::-;;;;;;;;;;-1:-1:-1;26892:424:0;;;;;:::i;:::-;;:::i;16703:38::-;;;;;;;;;;;;;;;;27324:120;;;;;;;;;;-1:-1:-1;27324:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27416:20:0;27392:4;27416:20;;;:11;:20;;;;;;;;;27324:120;24705:71;;;;;;;;;;-1:-1:-1;24748:7:0;22997:6;-1:-1:-1;;;;;22997:6:0;24705:71;;27583:132;;;;;;;;;;-1:-1:-1;27583:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;27676:31:0;27652:4;27676:31;;;:22;:31;;;;;;;;;27583:132;37146:397;;;;;;;;;;;;;:::i;24547:75::-;;;;;;;;;;;;;:::i;26098:225::-;;;;;;;;;;-1:-1:-1;26098:225:0;;;;;:::i;:::-;;:::i;25129:167::-;;;;;;;;;;-1:-1:-1;25129:167:0;;;;;:::i;:::-;;:::i;27960:218::-;;;;;;;;;;-1:-1:-1;27960:218:0;;;;;:::i;:::-;;:::i;16662:34::-;;;;;;;;;;;;;;;;31225:171;;;;;;;;;;-1:-1:-1;31225:171:0;;;;;:::i;:::-;;:::i;16606:47::-;;;;;;;;;;;;;;;;16748:38;;;;;;;;;;;;;;;;16502:43;;;;;;;;;;;;;;;;17559:29;;;;;;;;;;-1:-1:-1;17559:29:0;;;;-1:-1:-1;;;;;17559:29:0;;;16552:47;;;;;;;;;;;;;;;;24782:133;;;;;;;;;;-1:-1:-1;24782:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;24884:19:0;;;24866:7;24884:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;24782:133;18333:32;;;;;;;;;;;;;;;;28944:439;;;;;;;;;;-1:-1:-1;28944:439:0;;;;;:::i;:::-;;:::i;16857:55::-;;;;;;;;;;;;;;;;26331:553;;;;;;;;;;-1:-1:-1;26331:553:0;;;;;:::i;:::-;;:::i;28348:141::-;;;;;;;;;;-1:-1:-1;28348:141:0;;;;;:::i;:::-;;:::i;17983:30::-;;;;;;;;;;;;;;;;30718:289;;;;;;;;;;-1:-1:-1;30718:289:0;;;;;:::i;:::-;;:::i;24628:71::-;24667:13;24691:5;24684:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24628:71;:::o;28186:154::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;;;;;;;;;28270:2:::1;28263:3;:9;;28255:38;;;::::0;-1:-1:-1;;;28255:38:0;;14583:2:1;28255:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;28255:38:0::1;14381:340:1::0;28255:38:0::1;28320:12;:3:::0;28326:6:::1;28320:12;:::i;:::-;28304:13;:28:::0;-1:-1:-1;28186:154:0:o;25304:161::-;25379:4;25396:39;7583:10;25419:7;25428:6;25396:8;:39::i;:::-;-1:-1:-1;25453:4:0;25304:161;;;;;:::o;31544:906::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;31649:4:::1;31638:15:::0;::::1;;;31634:809;;;-1:-1:-1::0;;;;;31679:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31678:21;31670:62;;;::::0;-1:-1:-1;;;31670:62:0;;15276:2:1;31670:62:0::1;::::0;::::1;15258:21:1::0;15315:2;15295:18;;;15288:30;15354;15334:18;;;15327:58;15402:18;;31670:62:0::1;15074:352:1::0;31670:62:0::1;-1:-1:-1::0;;;;;31750:16:0;::::1;31769:1;31750:16:::0;;;:7:::1;:16;::::0;;;;;:20;31747:116:::1;;-1:-1:-1::0;;;;;31830:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31810:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31791:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31747:116:::1;-1:-1:-1::0;;;;;;31877:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31877:27:0::1;31900:4;31877:27:::0;;::::1;::::0;;;31919:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31919:23:0::1;::::0;;::::1;::::0;;31544:906::o;31634:809::-:1;31964:16:::0;31960:483:::1;;-1:-1:-1::0;;;;;32005:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31997:61;;;::::0;-1:-1:-1;;;31997:61:0;;12624:2:1;31997:61:0::1;::::0;::::1;12606:21:1::0;12663:2;12643:18;;;12636:30;12702;12682:18;;;12675:58;12750:18;;31997:61:0::1;12422:352:1::0;31997:61:0::1;32078:9;32073:359;32097:9;:16:::0;32093:20;::::1;32073:359;;;32159:7;-1:-1:-1::0;;;;;32143:23:0::1;:9;32153:1;32143:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32143:12:0::1;:23;32139:278;;;32206:9;32216:16:::0;;:20:::1;::::0;32235:1:::1;::::0;32216:20:::1;:::i;:::-;32206:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32191:9:::1;:12:::0;;-1:-1:-1;;;;;32206:31:0;;::::1;::::0;32201:1;;32191:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32191:46:0::1;-1:-1:-1::0;;;;;32191:46:0;;::::1;;::::0;;32260:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32303:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32303:28:0::1;::::0;;32354:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32354:15:0;;;;;-1:-1:-1;;;;;;32354:15:0::1;::::0;;;;;32392:5:::1;;32139:278;32115:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32073:359;;;;31960:483;31544:906:::0;;:::o;42377:107::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;22970:7;22997:6;;42428:48:::1;::::0;-1:-1:-1;;;;;22997:6:0;;;;42454:21:::1;42428:48:::0;::::1;;;::::0;42454:21;;42428:48;22970:7;42428:48;42454:21;22997:6;42428:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42377:107::o:0;25601:266::-;25699:4;25716:36;25726:6;25734:9;25745:6;25716:9;:36::i;:::-;-1:-1:-1;;;;;;25794:19:0;;;;;;:11;:19;;;;;;;;7583:10;25794:33;;;;;;;;;25763:74;;25772:6;;25794:42;;25830:6;;25794:42;:::i;:::-;25763:8;:74::i;:::-;-1:-1:-1;25855:4:0;25601:266;;;;;:::o;30370:340::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;30460:13:::1;30498:7;30487;30477;;:17;;;;:::i;:::-;30476:29;;;;:::i;:::-;30460:45;;30544:4;30534:7;;:14;;;;:::i;:::-;30524:5;:25;;30516:88;;;::::0;-1:-1:-1;;;30516:88:0;;13811:2:1;30516:88:0::1;::::0;::::1;13793:21:1::0;13850:2;13830:18;;;13823:30;13889:34;13869:18;;;13862:62;13960:20;13940:18;;;13933:48;13998:19;;30516:88:0::1;13609:414:1::0;30516:88:0::1;30615:14;:22:::0;;;30667:14:::1;::::0;30695:7;;30667:24:::1;::::0;30684:7;;30667:24:::1;:::i;:::-;30666:36;;;;:::i;:::-;30648:15;:54:::0;-1:-1:-1;;;30370:340:0:o;37551:373::-;37676:7;:14;37657:8;:15;:33;37649:67;;;;-1:-1:-1;;;37649:67:0;;17561:2:1;37649:67:0;;;17543:21:1;17600:2;17580:18;;;17573:30;17639:23;17619:18;;;17612:51;17680:18;;37649:67:0;17359:345:1;37649:67:0;37732:7;37727:190;37749:8;:15;37745:1;:19;;;37727:190;;;37819:7;37827:1;37819:10;;;;;;;;;;:::i;:::-;;;;;;;37794:21;37804:10;37794:9;:21::i;:::-;:35;;37786:44;;;;;;37845:60;37855:10;37867:8;37876:1;37867:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;;37895:9;;37891:13;;37895:9;;37891:2;:13;:::i;:::-;37880:7;37888:1;37880:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;37845:9;:60::i;:::-;-1:-1:-1;37766:3:0;;;;:::i;:::-;;;;37727:190;;32885:250;32951:7;32990;;32979;:18;;32971:73;;;;-1:-1:-1;;;32971:73:0;;11045:2:1;32971:73:0;;;11027:21:1;11084:2;11064:18;;;11057:30;11123:34;11103:18;;;11096:62;11194:12;11174:18;;;11167:40;11224:19;;32971:73:0;10843:406:1;32971:73:0;33055:19;33078:10;:8;:10::i;:::-;33055:33;-1:-1:-1;33106:21:0;33055:33;33106:7;:21;:::i;:::-;33099:28;32885:250;-1:-1:-1;;;32885:250:0:o;20489:1890::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;20665:19:::1;::::0;::::1;;20664:20;20656:29;;;::::0;::::1;;20722:3;20704:8;:15;:21;20696:30;;;::::0;::::1;;20764:7;:14;20745:8;:15;:33;20737:42;;;::::0;::::1;;20798:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;20820:13:0::1;::::0;:18;20798:40:::1;:61;;;;-1:-1:-1::0;20843:16:0::1;::::0;;;::::1;;;20842:17;20798:61;20790:70;;;::::0;::::1;;20886:2;20879:3;:9;;20871:38;;;::::0;-1:-1:-1;;;20871:38:0;;14583:2:1;20871:38:0::1;::::0;::::1;14565:21:1::0;14622:2;14602:18;;;14595:30;14661:18;14641;;;14634:46;14697:18;;20871:38:0::1;14381:340:1::0;20871:38:0::1;20922:16;:40:::0;;-1:-1:-1;;;;;20922:40:0;;::::1;-1:-1:-1::0;;;;;;20922:40:0;;::::1;;::::0;;;21006:14:::1;::::0;20975:9:::1;:46:::0;;;;::::1;21006:14:::0;::::1;20975:46:::0;;::::1;::::0;;21059:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;21006:14;21059:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21041:49:0::1;;21091:9;;;;;;;;;-1:-1:-1::0;;;;;21091:9:0::1;-1:-1:-1::0;;;;;21091:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21041:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;21041:82:0::1;::::0;::::1;8303:34:1::0;21117:4:0::1;8353:18:1::0;;;8346:43;8215:18;;21041:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21032:6;:91:::0;;-1:-1:-1;;;;;;21032:91:0::1;-1:-1:-1::0;;;;;21032:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21134:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;21134:22:0::1;-1:-1:-1::0;21134:22:0::1;::::0;;21187:4:::1;21167:26:::0;;:11:::1;:26:::0;;;;;21202:9:::1;::::0;;;::::1;21167:46:::0;;;;;;-1:-1:-1;;21167:66:0;;21134:22:::1;21254::::0;::::1;:13;:22:::0;21303:12:::1;:3:::0;21309:6:::1;21303:12;:::i;:::-;21287:13;:28:::0;21342:7:::1;::::0;21360:6:::1;::::0;21342:14:::1;::::0;21352:4:::1;21342:14;:::i;:::-;21341:25;;;;:::i;:::-;21326:12;:40:::0;21394:14:::1;::::0;21419:6:::1;::::0;21394:21:::1;::::0;21411:4:::1;21394:21;:::i;:::-;21393:32;;;;:::i;:::-;21377:13;:48:::0;21454:7:::1;::::0;21470:4:::1;::::0;21454:12:::1;::::0;21464:2:::1;21454:12;:::i;:::-;21453:21;;;;:::i;:::-;21436:14;:38:::0;21504:14:::1;::::0;21527:4:::1;::::0;21504:19:::1;::::0;21521:2:::1;21504:19;:::i;:::-;21503:28;;;;:::i;:::-;21485:15;:46:::0;21559:7:::1;::::0;21574:5:::1;::::0;21559:11:::1;::::0;21569:1:::1;21559:11;:::i;:::-;21558:21;;;;:::i;:::-;21542:13;:37:::0;21604:7:::1;::::0;21619:4:::1;::::0;21604:11:::1;::::0;21614:1:::1;21604:11;:::i;:::-;21603:20;;;;:::i;:::-;21590:10;:33:::0;21644:14:::1;::::0;21636:42:::1;::::0;-1:-1:-1;;;;;21644:14:0::1;-1:-1:-1::0;;21636:7:0::1;:42::i;:::-;-1:-1:-1::0;21691:19:0::1;:26:::0;;-1:-1:-1;;21691:26:0::1;21713:4;21691:26:::0;;::::1;::::0;;;21747:7:::1;::::0;;21691:19:::1;21736:7;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;21736:7:::1;-1:-1:-1::0;;;;;21728:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21728:16:0;:26;21785:7:::1;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;21785:7:::1;21779:4;::::0;21794:7:::1;::::0;21770:32:::1;::::0;19449:25:1;;;-1:-1:-1;;;;;21770:32:0;;::::1;::::0;21779:4;;::::1;::::0;21770:32:::1;::::0;19437:2:1;19422:18;21770:32:0::1;;;;;;;21847:9;::::0;21815:62:::1;::::0;21832:4:::1;::::0;-1:-1:-1;;;;;21847:9:0::1;-1:-1:-1::0;;21815:8:0::1;:62::i;:::-;21894:9;21890:168;21913:8;:15;21909:1;:19;21890:168;;;21983:9;::::0;21949:14:::1;::::0;21979:13:::1;::::0;21983:9:::1;;21979:2;:13;:::i;:::-;21966:7;21974:1;21966:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;21949:43;;22007:39;22017:7;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;22017:7:::1;22026:8;22035:1;22026:11;;;;;;;;:::i;:::-;;;;;;;22039:6;22007:9;:39::i;:::-;;21934:124;21930:3;;;;;:::i;:::-;;;;21890:168;;;;22070:53;22080:7;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;22080:7:::1;22097:4;22104:18;22114:7;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;22070:53:::1;-1:-1:-1::0;22150:9:0::1;::::0;-1:-1:-1;;;;;22150:9:0::1;:25;22183:21;22228:4;22248:24;22228:4:::0;22248:9:::1;:24::i;:::-;22287:1;22304::::0;22321:7:::1;22970::::0;22997:6;-1:-1:-1;;;;;22997:6:0;;22932:79;22321:7:::1;22150:219;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8782:15:1;;;22150:219:0::1;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;;8857:18;;;8850:34;;;;8900:18;;;8893:34;8964:15;;;8943:19;;;8936:44;22343:15:0::1;8996:19:1::0;;;8989:35;8675:19;;22150:219:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20489:1890:::0;;;;;:::o;25875:215::-;7583:10;25963:4;26012:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26012:34:0;;;;;;;;;;25963:4;;25980:80;;26003:7;;26012:47;;26049:10;;26012:47;:::i;30022:340::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;30111:13:::1;30149:7;30138;30128;;:17;;;;:::i;:::-;30127:29;;;;:::i;:::-;30111:45;;30195:4;30185:7;;:14;;;;:::i;:::-;30175:5;:25;;30167:93;;;::::0;-1:-1:-1;;;30167:93:0;;12981:2:1;30167:93:0::1;::::0;::::1;12963:21:1::0;13020:2;13000:18;;;12993:30;13059:34;13039:18;;;13032:62;13130:25;13110:18;;;13103:53;13173:19;;30167:93:0::1;12779:419:1::0;30167:93:0::1;30271:12;:20:::0;;;30319:14:::1;::::0;30347:7;;30319:24:::1;::::0;30336:7;;30319:24:::1;:::i;:::-;30318:36;;;;:::i;:::-;30302:13;:52:::0;-1:-1:-1;;;30022:340:0:o;23019:807::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;-1:-1:-1;;;;;23100:22:0;::::1;23092:96;;;::::0;-1:-1:-1;;;23092:96:0;;19075:2:1;23092:96:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;23092:96:0::1;18873:425:1::0;23092:96:0::1;23219:4;::::0;-1:-1:-1;;;;;23207:16:0;;::::1;23219:4:::0;::::1;23207:16;;23199:90;;;::::0;-1:-1:-1;;;23199:90:0;;19075:2:1;23199:90:0::1;::::0;::::1;19057:21:1::0;19114:2;19094:18;;;19087:30;19153:34;19133:18;;;19126:62;19224:31;19204:18;;;19197:59;19273:19;;23199:90:0::1;18873:425:1::0;23199:90:0::1;23319:6;::::0;;23300:33:::1;::::0;-1:-1:-1;;;;;23319:6:0;;::::1;::::0;23300:18:::1;:33::i;:::-;23344:34;23363:8;23373:4;23344:18;:34::i;:::-;23389:37;23411:8;23421:4;23389:21;:37::i;:::-;23479:6;::::0;23451:16:::1;::::0;-1:-1:-1;;;;;23451:16:0;;::::1;23479:6:::0;::::1;23451:35;23447:90;;;23501:16;:36:::0;;-1:-1:-1;;;;;;23501:36:0::1;-1:-1:-1::0;;;;;23501:36:0;::::1;;::::0;;23447:90:::1;23600:6;::::0;23590:17:::1;::::0;-1:-1:-1;;;;;23600:6:0::1;23590:9;:17::i;:::-;23558:19;23570:6:::0;;-1:-1:-1;;;;;23570:6:0;;::::1;23558:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;23631:6;;23558:19;;23621:17:::1;::::0;23631:6:::1;23621:9;:17::i;:::-;:21;23618:99;;;23669:6;::::0;23659:46:::1;::::0;-1:-1:-1;;;;;23669:6:0::1;23677:8:::0;23687:17:::1;23669:6:::0;23687:9:::1;:17::i;23659:46::-;;23618:99;23737:6;:17:::0;;-1:-1:-1;;;;;;23737:17:0::1;-1:-1:-1::0;;;;;23737:17:0;::::1;::::0;;::::1;::::0;;23770:38:::1;::::0;23737:17;;;;23770:38:::1;::::0;23737:6;23770:38:::1;23019:807:::0;:::o;25473:120::-;25526:4;25550:35;25558:7;-1:-1:-1;;25550:7:0;:35::i;29391:455::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;29521:13:::1;;29510:7;:24;;:73;;;;;29568:15;;29555:9;:28;;29510:73;:122;;;;;29617:15;;29604:9;:28;;29510:122;29502:149;;;::::0;::::1;;29705:4;29692:9:::0;29670:19:::1;29680:9:::0;29670:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;29662:48;;;::::0;::::1;;29721:19;:29:::0;;;;29761:21:::1;:33:::0;29805:21:::1;:33:::0;29391:455::o;31015:202::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;31108:16:::1;::::0;-1:-1:-1;;;;;31108:29:0;;::::1;:16:::0;::::1;:29;;31100:61;;;::::0;-1:-1:-1;;;31100:61:0;;14928:2:1;31100:61:0::1;::::0;::::1;14910:21:1::0;14967:2;14947:18;;;14940:30;15006:21;14986:18;;;14979:49;15045:18;;31100:61:0::1;14726:343:1::0;31100:61:0::1;31172:16;:37:::0;;-1:-1:-1;;;;;;31172:37:0::1;-1:-1:-1::0;;;;;31172:37:0;;;::::1;::::0;;;::::1;::::0;;31015:202::o;31404:132::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;-1:-1:-1;;;;;31491:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;31491:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31404:132::o;29854:160::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;29941:15:::1;:27:::0;;;;29979:15:::1;:27:::0;29854:160::o;28501:435::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;28626:13:::1;;28615:7;:24;;:73;;;;;28673:15;;28660:9;:28;;28615:73;:122;;;;;28722:15;;28709:9;:28;;28615:122;28607:149;;;::::0;::::1;;28810:4;28797:9:::0;28775:19:::1;28785:9:::0;28775:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;28767:48;;;::::0;::::1;;28826:14;:24:::0;;;;28861:16:::1;:28:::0;28900:16:::1;:28:::0;28501:435::o;27723:229::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;27837:6:::1;27832:113;27853:7;:14;27849:1;:18;27832:113;;;27926:7;27889:22;:34;27912:7;27920:1;27912:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27889:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27889:34:0;:44;;-1:-1:-1;;27889:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27869:3;::::1;::::0;::::1;:::i;:::-;;;;27832:113;;24923:198:::0;-1:-1:-1;;;;;25013:20:0;;24989:7;25013:20;;;:11;:20;;;;;;;;25009:49;;;-1:-1:-1;;;;;;25042:16:0;;;;;:7;:16;;;;;;;24923:198::o;25009:49::-;-1:-1:-1;;;;;25096:16:0;;;;;;:7;:16;;;;;;25076:37;;:19;:37::i;23834:194::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;23920:6:::1;::::0;;23901:33:::1;::::0;-1:-1:-1;;;;;23920:6:0;;::::1;::::0;23901:18:::1;:33::i;:::-;23962:1;23945:19:::0;;-1:-1:-1;;;;;;23945:19:0::1;::::0;;23980:40:::1;::::0;23962:1;;23980:40:::1;::::0;23962:1;;23980:40:::1;23834:194::o:0;26892:424::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;26973:16;26969:340:::1;;-1:-1:-1::0;;;;;;27006:13:0::1;27022:5;27006:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;27006:21:0::1;::::0;;31544:906::o;26969:340::-:1;27064:17;::::0;:22;27060:153:::1;;27153:7;27133:17;;27115:15;:35;;;;:::i;:::-;:45;27107:90;;;::::0;-1:-1:-1;;;27107:90:0;;12263:2:1;27107:90:0::1;::::0;::::1;12245:21:1::0;;;12282:18;;;12275:30;12341:34;12321:18;;;12314:62;12393:18;;27107:90:0::1;12061:356:1::0;27107:90:0::1;-1:-1:-1::0;;;;;27227:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;27227:20:0::1;27243:4;27227:20;::::0;;27282:15:::1;27262:17;:35:::0;26892:424;;:::o;37146:397::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;37208:14:::1;::::0;::::1;;37207:15;37199:52;;;::::0;-1:-1:-1;;;37199:52:0;;18722:2:1;37199:52:0::1;::::0;::::1;18704:21:1::0;18761:2;18741:18;;;18734:30;18800:26;18780:18;;;18773:54;18844:18;;37199:52:0::1;18520:348:1::0;37199:52:0::1;37262:42;37292:4;37299;37262:21;:42::i;:::-;37337:6;::::0;37315:35:::1;::::0;-1:-1:-1;;;;;37337:6:0::1;::::0;37315:21:::1;:35::i;:::-;37381:1;37365:13;;:17;37361:143;;;37414:18;:12;37429:3;37414:18;:::i;:::-;37399:12;:33:::0;37361:143:::1;;;37480:12;37465;:27:::0;37361:143:::1;37514:14;:21:::0;;-1:-1:-1;;37514:21:0::1;37531:4;37514:21;::::0;;37146:397::o;24547:75::-;24588:13;24612:7;24605:14;;;;;:::i;26098:225::-;7583:10;26191:4;26240:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26240:34:0;;;;;;;;;;26191:4;;26208:85;;26231:7;;26240:52;;26277:15;;26240:52;:::i;25129:167::-;25207:4;25224:42;7583:10;25248:9;25259:6;25224:9;:42::i;27960:218::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;28069:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;28069:28:0;;::::1;::::0;;;::::1;::::0;;;28108:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;28108:24:0;;::::1;;::::0;;28143:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;27960:218::o;31225:171::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;31302:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;31302:32:0::1;::::0;;;::::1;;::::0;;31350:38:::1;::::0;::::1;::::0;::::1;::::0;31326:8;9200:14:1;9193:22;9175:41;;9163:2;9148:18;;9035:187;31350:38:0::1;;;;;;;;31225:171:::0;:::o;28944:439::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;29070:13:::1;;29059:7;:24;;:73;;;;;29117:15;;29104:9;:28;;29059:73;:122;;;;;29166:15;;29153:9;:28;;29059:122;29051:149;;;::::0;::::1;;29254:4;29241:9:::0;29219:19:::1;29229:9:::0;29219:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;29211:48;;;::::0;::::1;;29270:15;:25:::0;;;;29306:17:::1;:29:::0;29346:17:::1;:29:::0;28944:439::o;26331:553::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;26404:29:::1;26455:9;26404:61;;26476:16;26513:10;-1:-1:-1::0;;;;;26513:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26495:47:0::1;;26551:4;26558:10;-1:-1:-1::0;;;;;26558:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26495:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;26495:81:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;26495:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26476:100:::0;-1:-1:-1;;;;;;26591:22:0;::::1;26587:207;;26657:10;-1:-1:-1::0;;;;;26657:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26639:50:0::1;;26698:4;26705:10;-1:-1:-1::0;;;;;26705:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26639:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;8321:15:1;;;26639:84:0::1;::::0;::::1;8303:34:1::0;8373:15;;8353:18;;;8346:43;8215:18;;26639:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26630:6;:93:::0;;-1:-1:-1;;;;;;26630:93:0::1;-1:-1:-1::0;;;;;26630:93:0;;;::::1;::::0;;;::::1;::::0;;26587:207:::1;;;26765:6;:17:::0;;-1:-1:-1;;;;;;26765:17:0::1;-1:-1:-1::0;;;;;26765:17:0;::::1;;::::0;;26587:207:::1;26804:9;:22:::0;;-1:-1:-1;;;;;;26804:22:0::1;-1:-1:-1::0;;;;;26804:22:0;::::1;;::::0;;26837:39:::1;26854:4;26861:9:::0;-1:-1:-1;;26837:8:0::1;:39::i;28348:141::-:0;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;-1:-1:-1;;;;;28440:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;28440:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28348:141::o;30718:289::-;19149:6;;-1:-1:-1;;;;;19149:6:0;7583:10;19149:22;19141:67;;;;-1:-1:-1;;;19141:67:0;;16790:2:1;19141:67:0;;;16772:21:1;;;16809:18;;;16802:30;-1:-1:-1;;;;;;;;;;;16848:18:1;;;16841:62;16920:18;;19141:67:0;16588:356:1;19141:67:0;30918:16:::1;30898;30888:7;;:26;;;;:::i;:::-;30887:47;;;;:::i;:::-;30871:13;:63:::0;30959:7:::1;::::0;30986:13;;30959:23:::1;::::0;30969:13;;30959:23:::1;:::i;:::-;30958:41;;;;:::i;:::-;30945:10;:54:::0;-1:-1:-1;;;;30718:289:0:o;33147:342::-;-1:-1:-1;;;;;33242:20:0;;33234:69;;;;-1:-1:-1;;;33234:69:0;;18317:2:1;33234:69:0;;;18299:21:1;18356:2;18336:18;;;18329:30;18395:34;18375:18;;;18368:62;18466:6;18446:18;;;18439:34;18490:19;;33234:69:0;18115:400:1;33234:69:0;-1:-1:-1;;;;;33322:21:0;;33314:68;;;;-1:-1:-1;;;33314:68:0;;11456:2:1;33314:68:0;;;11438:21:1;11495:2;11475:18;;;11468:30;11534:34;11514:18;;;11507:62;11605:4;11585:18;;;11578:32;11627:19;;33314:68:0;11254:398:1;33314:68:0;-1:-1:-1;;;;;33395:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;33448:33;;19449:25:1;;;33448:33:0;;19422:18:1;33448:33:0;;;;;;;33147:342;;;:::o;33497:1900::-;33576:4;-1:-1:-1;;;;;33601:18:0;;33593:68;;;;-1:-1:-1;;;33593:68:0;;17911:2:1;33593:68:0;;;17893:21:1;17950:2;17930:18;;;17923:30;17989:34;17969:18;;;17962:62;18060:7;18040:18;;;18033:35;18085:19;;33593:68:0;17709:401:1;33593:68:0;-1:-1:-1;;;;;33680:16:0;;33672:64;;;;-1:-1:-1;;;33672:64:0;;10288:2:1;33672:64:0;;;10270:21:1;10327:2;10307:18;;;10300:30;10366:34;10346:18;;;10339:62;10437:5;10417:18;;;10410:33;10460:19;;33672:64:0;10086:399:1;33672:64:0;33764:1;33755:6;:10;33747:64;;;;-1:-1:-1;;;33747:64:0;;17151:2:1;33747:64:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;17300:11;17280:18;;;17273:39;17329:19;;33747:64:0;16949:405:1;33747:64:0;33826:14;;;;33822:112;;;33880:13;;33865:11;:28;;33857:65;;;;-1:-1:-1;;;33857:65:0;;14230:2:1;33857:65:0;;;14212:21:1;14269:2;14249:18;;;14242:30;14308:26;14288:18;;;14281:54;14352:18;;33857:65:0;14028:348:1;33857:65:0;33947:20;33958:4;33964:2;33947:10;:20::i;:::-;33944:776;;;33988:14;;;;33984:89;;34023:34;;-1:-1:-1;;;34023:34:0;;10692:2:1;34023:34:0;;;10674:21:1;10731:2;10711:18;;;10704:30;10770:26;10750:18;;;10743:54;10814:18;;34023:34:0;10490:348:1;33984:89:0;34091:15;;;;34087:347;;;-1:-1:-1;;;;;34131:13:0;;;;;;:7;:13;;;;;;;;34127:292;;;-1:-1:-1;;;;;34176:13:0;;;;;;:9;:13;;;;;;34193:12;34176:29;;34168:38;;;;;;-1:-1:-1;;;;;34229:13:0;;;;;;:9;:13;;;;;34245:12;34229:28;;34127:292;;;-1:-1:-1;;;;;34314:15:0;;;;;;:9;:15;;;;;;34333:12;34314:31;;34306:40;;;;;;-1:-1:-1;;;;;34369:15:0;;;;;;:9;:15;;;;;34387:12;34369:30;;34127:292;34466:12;;34456:6;:22;;34448:75;;;;-1:-1:-1;;;34448:75:0;;15970:2:1;34448:75:0;;;15952:21:1;16009:2;15989:18;;;15982:30;16048:34;16028:18;;;16021:62;16119:10;16099:18;;;16092:38;16147:19;;34448:75:0;15768:404:1;34448:75:0;34547:14;;-1:-1:-1;;;;;34541:20:0;;;34547:14;;34541:20;;;;:36;;-1:-1:-1;;;;;;34566:11:0;;;;;;:7;:11;;;;;;;;34565:12;34541:36;34538:171;;;34632:14;;34622:6;34606:13;34616:2;34606:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;34598:95;;;;-1:-1:-1;;;34598:95:0;;16379:2:1;34598:95:0;;;16361:21:1;16418:2;16398:18;;;16391:30;16457:34;16437:18;;;16430:62;16528:12;16508:18;;;16501:40;16558:19;;34598:95:0;16177:406:1;34598:95:0;-1:-1:-1;;;;;34765:24:0;;34732:12;34765:24;;;:18;:24;;;;;;34747:4;;34765:24;;;:50;;-1:-1:-1;;;;;;34793:22:0;;;;;;:18;:22;;;;;;;;34765:50;34762:96;;;-1:-1:-1;34841:5:0;34762:96;-1:-1:-1;;;;;34874:11:0;;;;;;:7;:11;;;;;;;;34870:457;;;34907:16;;;;;;;34906:17;:59;;;;-1:-1:-1;34944:21:0;;-1:-1:-1;;;34944:21:0;;;;34906:59;34902:408;;;35000:28;35031:24;35049:4;35031:9;:24::i;:::-;35000:55;;35102:13;;35078:20;:37;35074:221;;35167:10;;35143:20;:34;35140:77;;-1:-1:-1;35204:10:0;;35140:77;35239:36;35254:20;35239:14;:36::i;:::-;34981:329;34902:408;35345:44;35363:4;35369:2;35373:6;35381:7;35345:17;:44::i;:::-;35338:51;33497:1900;-1:-1:-1;;;;;33497:1900:0:o;41498:161::-;41540:7;41561:15;41578;41597:19;:17;:19::i;:::-;41560:56;;-1:-1:-1;41560:56:0;-1:-1:-1;41634:17:0;41560:56;;41634:17;:::i;:::-;41627:24;;;;41498:161;:::o;32553:324::-;32622:4;22997:6;;-1:-1:-1;;;;;32646:15:0;;;22997:6;;32646:15;;;;:45;;-1:-1:-1;22970:7:0;22997:6;-1:-1:-1;;;;;32678:13:0;;;22997:6;;32678:13;;32646:45;:84;;;;-1:-1:-1;;;;;;32709:21:0;;;;;;:17;:21;;;;;;;;32708:22;32646:84;:125;;;;-1:-1:-1;;;;;;32748:23:0;;;;;;:17;:23;;;;;;;;32747:24;32646:125;:152;;;;-1:-1:-1;32794:4:0;;-1:-1:-1;;;;;32788:10:0;;;32794:4;;32788:10;;32646:152;:185;;;;-1:-1:-1;;;;;;32815:16:0;;;;32646:185;:223;;;;-1:-1:-1;;;;;;32848:21:0;;32864:4;32848:21;;32639:230;32553:324;-1:-1:-1;;;32553:324:0:o;35405:1278::-;19023:16;:23;;-1:-1:-1;;19023:23:0;;;;;35513:15:::1;::::0;35495::::1;::::0;:33:::1;::::0;35513:15;35495:33:::1;:::i;:::-;35491:64;;35548:7;;35491:64;35565:17;35668:1;35648:15;;35630;;:33;;;;:::i;:::-;35610:15;::::0;35587:38:::1;::::0;:20;:38:::1;:::i;:::-;35586:78;;;;:::i;:::-;35585:84;;;;:::i;:::-;35565:104:::0;-1:-1:-1;35682:20:0::1;35705:32;35565:104:::0;35705:20;:32:::1;:::i;:::-;35774:16;::::0;;35788:1:::1;35774:16:::0;;;;;::::1;::::0;;35682:55;;-1:-1:-1;35750:21:0::1;::::0;35774:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35774:16:0::1;35750:40;;35819:4;35801;35806:1;35801:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35801:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;35845:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;35801:7;;35845:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35835:4;35840:1;35835:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35835:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;35874:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;35949:12;;35874:9:::1;::::0;35992:4;;36019::::1;::::0;36039:15:::1;::::0;35874:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36080:24;36191:1;36171:15;;36153;;:33;;;;:::i;:::-;36133:15;::::0;36109:39:::1;::::0;:21:::1;:39;:::i;:::-;36108:79;;;;:::i;:::-;36107:85;;;;:::i;:::-;36080:112:::0;-1:-1:-1;36209:13:0;;36205:344:::1;;36239:9;::::0;36410:4:::1;::::0;36239:224:::1;::::0;;;;36316:4:::1;36239:224;::::0;::::1;8764:34:1::0;8814:18;;;8807:34;;;36239:9:0::1;8857:18:1::0;;;8850:34;;;8900:18;;;8893:34;-1:-1:-1;;;;;36410:4:0;;::::1;8943:19:1::0;;;8936:44;36433:15:0::1;8996:19:1::0;;;8989:35;36239:9:0;::::1;::::0;:25:::1;::::0;36272:16;;8675:19:1;;36239:224:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;36483:54:0::1;::::0;;20718:25:1;;;20774:2;20759:18;;20752:34;;;20802:18;;;20795:34;;;36483:54:0::1;::::0;-1:-1:-1;20706:2:1;20691:18;36483:54:0::1;;;;;;;36205:344;36598:1;36563:32;36586:9:::0;36563:20;:32:::1;:::i;:::-;:36;36559:117;;;36616:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;36616:16:0;;::::1;::::0;36642:21:::1;36616:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;36642:21;36616:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36559:117;35480:1203;;;;19057:1;-1:-1:-1::0;19069:16:0;:24;;-1:-1:-1;;19069:24:0;;;35405:1278::o;38138:1880::-;38261:16;;38240:4;;38261:16;;;;;38257:851;;;-1:-1:-1;;;;;27676:31:0;;27652:4;27676:31;;;:22;:31;;;;;;;;38297:56;;;-1:-1:-1;;;;;;27676:31:0;;27652:4;27676:31;;;:22;:31;;;;;;;;38328:25;38293:116;;;38374:19;;-1:-1:-1;;;38374:19:0;;15633:2:1;38374:19:0;;;15615:21:1;15672:1;15652:18;;;15645:29;15710:11;15690:18;;;15683:39;15739:18;;38374:19:0;15431:332:1;38293:116:0;38430:16;;;;;;;38425:672;;38467:28;38486:4;38492:2;38467:18;:28::i;:::-;38519:16;;;;;;;38518:17;:41;;;;;38539:20;38550:4;38556:2;38539:10;:20::i;:::-;38514:137;;;38584:47;;-1:-1:-1;;;38584:47:0;;13405:2:1;38584:47:0;;;13387:21:1;13444:2;13424:18;;;13417:30;13483:34;13463:18;;;13456:62;13554:7;13534:18;;;13527:35;13579:19;;38584:47:0;13203:401:1;38514:137:0;38425:672;;;38710:1;38695:12;;:16;:55;;;;-1:-1:-1;;;;;;38737:13:0;;;;;;:7;:13;;;;;;;;38695:55;:101;;;;;38776:20;38787:4;38793:2;38776:10;:20::i;:::-;38691:391;;;38873:13;;38858:12;;38843:27;;:12;:27;:::i;:::-;:43;38839:224;;;-1:-1:-1;;;;;38915:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;38915:33:0;38944:4;38915:33;;;38975:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;39023:16:0;;-1:-1:-1;;;;;8001:55:1;;7983:74;;39023:16:0;;7971:2:1;7956:18;39023:16:0;;;;;;;38839:224;39120:25;39148:38;39159:4;39165:2;39169:7;39178;39148:10;:38::i;:::-;39231:14;;;;-1:-1:-1;;;;;39215:13:0;;;;;;:7;:13;;;;;;39120:66;;-1:-1:-1;39215:30:0;;;:::i;:::-;-1:-1:-1;;;;;39199:13:0;;;;;;;:7;:13;;;;;;:46;;;;39284:22;;;;39270:11;;;;;;;;;;:36;;39284:22;39270:36;:::i;:::-;-1:-1:-1;;;;;39256:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;39323:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;39345:15:0;;;;;;:11;:15;;;;;;;;39344:16;39323:37;39319:416;;;-1:-1:-1;;;;;39393:13:0;;;;;;:7;:13;;;;;;:23;;39409:7;;39393:23;:::i;:::-;-1:-1:-1;;;;;39377:13:0;;;;;;:7;:13;;;;;:39;39319:416;;;-1:-1:-1;;;;;39439:17:0;;;;;;:11;:17;;;;;;;;39438:18;:37;;;;-1:-1:-1;;;;;;39460:15:0;;;;;;:11;:15;;;;;;;;39438:37;39434:301;;;39520:22;;-1:-1:-1;;;;;39506:11:0;;39520:22;39506:11;;;:7;:11;;;;;;:36;;39520:22;39506:36;:::i;:::-;-1:-1:-1;;;;;39492:11:0;;;;;;:7;:11;;;;;:50;39434:301;;;-1:-1:-1;;;;;39566:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;39587:15:0;;;;;;:11;:15;;;;;;;;39566:36;39562:173;;;-1:-1:-1;;;;;39635:13:0;;;;;;:7;:13;;;;;;:23;;39651:7;;39635:23;:::i;:::-;-1:-1:-1;;;;;39619:13:0;;;;;;;:7;:13;;;;;;:39;;;;39701:22;;39687:11;;;;;;;;;;:36;;39701:22;39687:36;:::i;:::-;-1:-1:-1;;;;;39673:11:0;;;;;;:7;:11;;;;;:50;39562:173;39751:17;;;;:21;39747:79;;39787:39;39802:4;39808:6;:17;;;39787:14;:39::i;:::-;39855:1;39841:6;:11;;;:15;:34;;;;39874:1;39860:6;:11;;;:15;39841:34;39837:91;;;39890:38;39903:6;:11;;;39916:6;:11;;;39890:12;:38::i;:::-;39961:2;-1:-1:-1;;;;;39946:42:0;39955:4;-1:-1:-1;;;;;39946:42:0;;39965:6;:22;;;39946:42;;;;19449:25:1;;19437:2;19422:18;;19303:177;39946:42:0;;;;;;;;-1:-1:-1;40006:4:0;;38138:1880;-1:-1:-1;;;;;38138:1880:0:o;41667:547::-;41765:7;;41801;;41718;;;;;41819:283;41843:9;:16;41839:20;;41819:283;;;41909:7;41885;:21;41893:9;41903:1;41893:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41893:12:0;41885:21;;;;;;;;;;;;;:31;;:66;;;41944:7;41920;:21;41928:9;41938:1;41928:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41928:12:0;41920:21;;;;;;;;;;;;;:31;41885:66;41881:97;;;41961:7;;41970;;41953:25;;;;;;;41667:547;;:::o;41881:97::-;42013:7;:21;42021:9;42031:1;42021:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42021:12:0;42013:21;;;;;;;;;;;;;42003:31;;:7;:31;:::i;:::-;41993:41;;42069:7;:21;42077:9;42087:1;42077:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42077:12:0;42069:21;;;;;;;;;;;;;42059:31;;:7;:31;:::i;:::-;42049:41;-1:-1:-1;41861:3:0;;;;:::i;:::-;;;;41819:283;;;;42136:7;;42126;;:17;;;;:::i;:::-;42116:7;:27;42112:58;;;42153:7;;42162;;42145:25;;;;;;41667:547;;:::o;42112:58::-;42189:7;;42198;;-1:-1:-1;41667:547:0;-1:-1:-1;41667:547:0:o;36699:439::-;36782:16;;;;;;;36781:17;36773:65;;;;-1:-1:-1;;;36773:65:0;;11859:2:1;36773:65:0;;;11841:21:1;11898:2;11878:18;;;11871:30;11937:34;11917:18;;;11910:62;12008:5;11988:18;;;11981:33;12031:19;;36773:65:0;11657:399:1;36773:65:0;36854:20;36865:4;36871:2;36854:10;:20::i;:::-;36853:21;:37;;;;-1:-1:-1;36884:6:0;;-1:-1:-1;;;;;36878:12:0;;;36884:6;;36878:12;36853:37;36849:282;;;-1:-1:-1;;;;;36907:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;36907:30:0;36933:4;36907:30;;;;;;36952:16;:23;;-1:-1:-1;;36952:23:0;;;;;37005:15;36990:12;:30;37037:21;:28;;;;-1:-1:-1;;;37037:28:0;;;37085:34;;;;;;9200:14:1;;9193:22;9175:41;;9163:2;9148:18;;9035:187;37085:34:0;;;;;;;;36699:439;;:::o;40026:1464::-;40121:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40121:18:0;40152:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40152:25:0;40188:19;40210:10;:8;:10::i;:::-;40188:32;-1:-1:-1;40250:21:0;40188:32;40250:7;:21;:::i;:::-;40233:14;;;:38;40284:1071;;;;-1:-1:-1;;;;;40315:11:0;;;;;;:7;:11;;;;;;;;40311:561;;;40361:15;;40347:11;:29;40411:17;;40395:13;:33;40463:17;;40447:13;:33;40311:561;;;-1:-1:-1;;;;;40506:13:0;;;;;;:7;:13;;;;;;;;40502:370;;;40554:14;;40540:11;:28;40603:16;;40587:13;:32;40654:16;;40638:13;:32;40502:370;;;40725:19;;40711:11;:33;40779:21;;40763:13;:37;40835:21;;40819:13;:37;40502:370;40928:16;;40913:11;;40903:21;;:7;:21;:::i;:::-;40902:42;;;;:::i;:::-;40888:11;;;:56;41025:16;;41007:13;;40991;;:29;;41007:13;40991:29;:::i;:::-;40980:41;;:7;:41;:::i;:::-;40979:62;;;;:::i;:::-;40959:17;;;:82;;;41092:11;;;;:31;;40959:82;41092:31;:::i;:::-;41081:43;;:7;:43;:::i;:::-;41056:68;;41155:11;;;;:25;;41169:11;;41155:25;:::i;:::-;41141:11;;;:39;40284:1071;;;41227:1;41213:11;;;:15;;;41243:17;;;:21;;;41279:32;;;41328:11;;;:15;40284:1071;41445:11;41425:6;:17;;;:31;;;;:::i;:::-;41410:6;:11;;;:47;;;;:::i;:::-;41392:6;:14;;;:66;;;;:::i;:::-;41367:22;;;:91;-1:-1:-1;41367:22:0;40026:1464;-1:-1:-1;;;;;40026:1464:0:o;42496:461::-;42576:19;42599:10;:8;:10::i;:::-;42576:33;-1:-1:-1;42620:18:0;42641:24;42576:33;42641:10;:24;:::i;:::-;42717:4;42701:22;;;;:7;:22;;;;;;42620:45;;-1:-1:-1;42701:35:0;;42620:45;;42701:35;:::i;:::-;42692:4;42676:22;;;;:7;:22;;;;;;;;:60;;;;42750:11;:26;;;;;;42747:104;;;42832:4;42816:22;;;;:7;:22;;;;;;:35;;42841:10;;42816:35;:::i;:::-;42807:4;42791:22;;;;:7;:22;;;;;:60;42747:104;42867:43;;19449:25:1;;;42892:4:0;;-1:-1:-1;;;;;42867:43:0;;;;;19437:2:1;19422:18;42867:43:0;;;;;;;42565:392;;42496:461;;:::o;42226:143::-;42316:4;42306:7;;:14;;;;:::i;:::-;42296:7;:24;42344:10;;:17;;42357:4;;42344:17;:::i;:::-;42331:10;:30;-1:-1:-1;;42226:143:0:o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:673::-;821:5;874:3;867:4;859:6;855:17;851:27;841:55;;892:1;889;882:12;841:55;928:6;915:20;954:4;978:60;994:43;1034:2;994:43;:::i;978:60::-;1060:3;1084:2;1079:3;1072:15;1112:2;1107:3;1103:12;1096:19;;1147:2;1139:6;1135:15;1199:3;1194:2;1188;1185:1;1181:10;1173:6;1169:23;1165:32;1162:41;1159:61;;;1216:1;1213;1206:12;1159:61;1238:1;1248:163;1262:2;1259:1;1256:9;1248:163;;;1319:17;;1307:30;;1357:12;;;;1389;;;;1280:1;1273:9;1248:163;;1445:160;1510:20;;1566:13;;1559:21;1549:32;;1539:60;;1595:1;1592;1585:12;1539:60;1445:160;;;:::o;1610:247::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1777:9;1764:23;1796:31;1821:5;1796:31;:::i;1862:251::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2033:9;2027:16;2052:31;2077:5;2052:31;:::i;2378:973::-;2529:6;2537;2545;2553;2561;2614:3;2602:9;2593:7;2589:23;2585:33;2582:53;;;2631:1;2628;2621:12;2582:53;2670:9;2657:23;2689:31;2714:5;2689:31;:::i;:::-;2739:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2818:18;2848:14;;;2845:34;;;2875:1;2872;2865:12;2845:34;2898:61;2951:7;2942:6;2931:9;2927:22;2898:61;:::i;:::-;2888:71;;3012:2;3001:9;2997:18;2984:32;2968:48;;3041:2;3031:8;3028:16;3025:36;;;3057:1;3054;3047:12;3025:36;;3080:63;3135:7;3124:8;3113:9;3109:24;3080:63;:::i;:::-;3070:73;;;3195:2;3184:9;3180:18;3167:32;3243:4;3234:7;3230:18;3221:7;3218:31;3208:59;;3263:1;3260;3253:12;3208:59;2378:973;;;;-1:-1:-1;2378:973:1;;3340:3;3325:19;3312:33;;2378:973;-1:-1:-1;;2378:973:1:o;3356:388::-;3424:6;3432;3485:2;3473:9;3464:7;3460:23;3456:32;3453:52;;;3501:1;3498;3491:12;3453:52;3540:9;3527:23;3559:31;3584:5;3559:31;:::i;:::-;3609:5;-1:-1:-1;3666:2:1;3651:18;;3638:32;3679:33;3638:32;3679:33;:::i;:::-;3731:7;3721:17;;;3356:388;;;;;:::o;3749:456::-;3826:6;3834;3842;3895:2;3883:9;3874:7;3870:23;3866:32;3863:52;;;3911:1;3908;3901:12;3863:52;3950:9;3937:23;3969:31;3994:5;3969:31;:::i;:::-;4019:5;-1:-1:-1;4076:2:1;4061:18;;4048:32;4089:33;4048:32;4089:33;:::i;:::-;3749:456;;4141:7;;-1:-1:-1;;;4195:2:1;4180:18;;;;4167:32;;3749:456::o;4210:315::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4391:9;4378:23;4410:31;4435:5;4410:31;:::i;:::-;4460:5;-1:-1:-1;4484:35:1;4515:2;4500:18;;4484:35;:::i;:::-;4474:45;;4210:315;;;;;:::o;4530:::-;4598:6;4606;4659:2;4647:9;4638:7;4634:23;4630:32;4627:52;;;4675:1;4672;4665:12;4627:52;4714:9;4701:23;4733:31;4758:5;4733:31;:::i;:::-;4783:5;4835:2;4820:18;;;;4807:32;;-1:-1:-1;;;4530:315:1:o;4850:595::-;4968:6;4976;5029:2;5017:9;5008:7;5004:23;5000:32;4997:52;;;5045:1;5042;5035:12;4997:52;5085:9;5072:23;5114:18;5155:2;5147:6;5144:14;5141:34;;;5171:1;5168;5161:12;5141:34;5194:61;5247:7;5238:6;5227:9;5223:22;5194:61;:::i;:::-;5184:71;;5308:2;5297:9;5293:18;5280:32;5264:48;;5337:2;5327:8;5324:16;5321:36;;;5353:1;5350;5343:12;5321:36;;5376:63;5431:7;5420:8;5409:9;5405:24;5376:63;:::i;:::-;5366:73;;;4850:595;;;;;:::o;5450:416::-;5540:6;5548;5601:2;5589:9;5580:7;5576:23;5572:32;5569:52;;;5617:1;5614;5607:12;5569:52;5657:9;5644:23;5690:18;5682:6;5679:30;5676:50;;;5722:1;5719;5712:12;5676:50;5745:61;5798:7;5789:6;5778:9;5774:22;5745:61;:::i;:::-;5735:71;;;5825:35;5856:2;5845:9;5841:18;5825:35;:::i;5871:180::-;5927:6;5980:2;5968:9;5959:7;5955:23;5951:32;5948:52;;;5996:1;5993;5986:12;5948:52;6019:26;6035:9;6019:26;:::i;6056:316::-;6124:6;6132;6140;6193:2;6181:9;6172:7;6168:23;6164:32;6161:52;;;6209:1;6206;6199:12;6161:52;6232:26;6248:9;6232:26;:::i;:::-;6222:36;;6277:35;6308:2;6297:9;6293:18;6277:35;:::i;:::-;6267:45;;6331:35;6362:2;6351:9;6347:18;6331:35;:::i;:::-;6321:45;;6056:316;;;;;:::o;6377:180::-;6436:6;6489:2;6477:9;6468:7;6464:23;6460:32;6457:52;;;6505:1;6502;6495:12;6457:52;-1:-1:-1;6528:23:1;;6377:180;-1:-1:-1;6377:180:1:o;6562:248::-;6630:6;6638;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;-1:-1:-1;;6730:23:1;;;6800:2;6785:18;;;6772:32;;-1:-1:-1;6562:248:1:o;6815:316::-;6892:6;6900;6908;6961:2;6949:9;6940:7;6936:23;6932:32;6929:52;;;6977:1;6974;6967:12;6929:52;-1:-1:-1;;7000:23:1;;;7070:2;7055:18;;7042:32;;-1:-1:-1;7121:2:1;7106:18;;;7093:32;;6815:316;-1:-1:-1;6815:316:1:o;7136:306::-;7224:6;7232;7240;7293:2;7281:9;7272:7;7268:23;7264:32;7261:52;;;7309:1;7306;7299:12;7261:52;7338:9;7332:16;7322:26;;7388:2;7377:9;7373:18;7367:25;7357:35;;7432:2;7421:9;7417:18;7411:25;7401:35;;7136:306;;;;;:::o;7447:385::-;7533:6;7541;7549;7557;7610:3;7598:9;7589:7;7585:23;7581:33;7578:53;;;7627:1;7624;7617:12;7578:53;-1:-1:-1;;7650:23:1;;;7720:2;7705:18;;7692:32;;-1:-1:-1;7771:2:1;7756:18;;7743:32;;7822:2;7807:18;7794:32;;-1:-1:-1;7447:385:1;-1:-1:-1;7447:385:1:o;9484:597::-;9596:4;9625:2;9654;9643:9;9636:21;9686:6;9680:13;9729:6;9724:2;9713:9;9709:18;9702:34;9754:1;9764:140;9778:6;9775:1;9772:13;9764:140;;;9873:14;;;9869:23;;9863:30;9839:17;;;9858:2;9835:26;9828:66;9793:10;;9764:140;;;9922:6;9919:1;9916:13;9913:91;;;9992:1;9987:2;9978:6;9967:9;9963:22;9959:31;9952:42;9913:91;-1:-1:-1;10065:2:1;10044:15;-1:-1:-1;;10040:29:1;10025:45;;;;10072:2;10021:54;;9484:597;-1:-1:-1;;;9484:597:1:o;19485:1026::-;19747:4;19795:3;19784:9;19780:19;19826:6;19815:9;19808:25;19852:2;19890:6;19885:2;19874:9;19870:18;19863:34;19933:3;19928:2;19917:9;19913:18;19906:31;19957:6;19992;19986:13;20023:6;20015;20008:22;20061:3;20050:9;20046:19;20039:26;;20100:2;20092:6;20088:15;20074:29;;20121:1;20131:218;20145:6;20142:1;20139:13;20131:218;;;20210:13;;-1:-1:-1;;;;;20206:62:1;20194:75;;20324:15;;;;20289:12;;;;20167:1;20160:9;20131:218;;;-1:-1:-1;;;;;;;20405:55:1;;;;20400:2;20385:18;;20378:83;-1:-1:-1;;;20492:3:1;20477:19;20470:35;20366:3;19485:1026;-1:-1:-1;;;19485:1026:1:o;21029:275::-;21100:2;21094:9;21165:2;21146:13;;-1:-1:-1;;21142:27:1;21130:40;;21200:18;21185:34;;21221:22;;;21182:62;21179:88;;;21247:18;;:::i;:::-;21283:2;21276:22;21029:275;;-1:-1:-1;21029:275:1:o;21309:183::-;21369:4;21402:18;21394:6;21391:30;21388:56;;;21424:18;;:::i;:::-;-1:-1:-1;21469:1:1;21465:14;21481:4;21461:25;;21309:183::o;21497:128::-;21537:3;21568:1;21564:6;21561:1;21558:13;21555:39;;;21574:18;;:::i;:::-;-1:-1:-1;21610:9:1;;21497:128::o;21630:274::-;21670:1;21696;21686:189;;-1:-1:-1;;;21728:1:1;21721:88;21832:4;21829:1;21822:15;21860:4;21857:1;21850:15;21686:189;-1:-1:-1;21889:9:1;;21630:274::o;21909:422::-;21998:1;22041:5;21998:1;22055:270;22076:7;22066:8;22063:21;22055:270;;;22135:4;22131:1;22127:6;22123:17;22117:4;22114:27;22111:53;;;22144:18;;:::i;:::-;22194:7;22184:8;22180:22;22177:55;;;22214:16;;;;22177:55;22293:22;;;;22253:15;;;;22055:270;;;22059:3;21909:422;;;;;:::o;22336:140::-;22394:5;22423:47;22464:4;22454:8;22450:19;22444:4;22530:5;22560:8;22550:80;;-1:-1:-1;22601:1:1;22615:5;;22550:80;22649:4;22639:76;;-1:-1:-1;22686:1:1;22700:5;;22639:76;22731:4;22749:1;22744:59;;;;22817:1;22812:130;;;;22724:218;;22744:59;22774:1;22765:10;;22788:5;;;22812:130;22849:3;22839:8;22836:17;22833:43;;;22856:18;;:::i;:::-;-1:-1:-1;;22912:1:1;22898:16;;22927:5;;22724:218;;23026:2;23016:8;23013:16;23007:3;23001:4;22998:13;22994:36;22988:2;22978:8;22975:16;22970:2;22964:4;22961:12;22957:35;22954:77;22951:159;;;-1:-1:-1;23063:19:1;;;23095:5;;22951:159;23142:34;23167:8;23161:4;23142:34;:::i;:::-;23212:6;23208:1;23204:6;23200:19;23191:7;23188:32;23185:58;;;23223:18;;:::i;:::-;23261:20;;22481:806;-1:-1:-1;;;22481:806:1:o;23292:168::-;23332:7;23398:1;23394;23390:6;23386:14;23383:1;23380:21;23375:1;23368:9;23361:17;23357:45;23354:71;;;23405:18;;:::i;:::-;-1:-1:-1;23445:9:1;;23292:168::o;23465:125::-;23505:4;23533:1;23530;23527:8;23524:34;;;23538:18;;:::i;:::-;-1:-1:-1;23575:9:1;;23465:125::o;23595:437::-;23674:1;23670:12;;;;23717;;;23738:61;;23792:4;23784:6;23780:17;23770:27;;23738:61;23845:2;23837:6;23834:14;23814:18;23811:38;23808:218;;;-1:-1:-1;;;23879:1:1;23872:88;23983:4;23980:1;23973:15;24011:4;24008:1;24001:15;23808:218;;23595:437;;;:::o;24037:135::-;24076:3;-1:-1:-1;;24097:17:1;;24094:43;;;24117:18;;:::i;:::-;-1:-1:-1;24164:1:1;24153:13;;24037:135::o;24177:175::-;24214:3;24258:4;24251:5;24247:16;24287:4;24278:7;24275:17;24272:43;;;24295:18;;:::i;:::-;24344:1;24331:15;;24177:175;-1:-1:-1;;24177:175:1:o;24357:184::-;-1:-1:-1;;;24406:1:1;24399:88;24506:4;24503:1;24496:15;24530:4;24527:1;24520:15;24546:184;-1:-1:-1;;;24595:1:1;24588:88;24695:4;24692:1;24685:15;24719:4;24716:1;24709:15;24735:184;-1:-1:-1;;;24784:1:1;24777:88;24884:4;24881:1;24874:15;24908:4;24905:1;24898:15;24924:184;-1:-1:-1;;;24973:1:1;24966:88;25073:4;25070:1;25063:15;25097:4;25094:1;25087:15;25113:154;-1:-1:-1;;;;;25192:5:1;25188:54;25181:5;25178:65;25168:93;;25257:1;25254;25247:12

Swarm Source

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