ETH Price: $3,183.24 (+2.37%)
Gas: 54 Gwei

Contract

0x66f873e4776FA0adad5dBd0C6DC11afC40aB4C2c
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Shikage (SHKG) (@$0.0002)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer189069742023-12-31 17:34:1157 days 3 hrs ago1704044051IN
Shikage: SHKG Token
0 ETH0.0012838917.20617745
Approve186796652023-11-29 20:30:5989 days 47 mins ago1701289859IN
Shikage: SHKG Token
0 ETH0.001631235.29751979
Transfer183684772023-10-17 7:02:59132 days 14 hrs ago1697526179IN
Shikage: SHKG Token
0 ETH0.000614166.35899011
Approve175705712023-06-27 12:03:11244 days 9 hrs ago1687867391IN
Shikage: SHKG Token
0 ETH0.0006700514.38723229
Approve175705352023-06-27 11:55:59244 days 9 hrs ago1687866959IN
Shikage: SHKG Token
0 ETH0.0006362213.67836424
Approve175491262023-06-24 11:36:35247 days 9 hrs ago1687606595IN
Shikage: SHKG Token
0 ETH0.0006668614.31864259
Transfer173965332023-06-03 0:15:47268 days 21 hrs ago1685751347IN
Shikage: SHKG Token
0 ETH0.0026080927.0039128
Approve170822452023-04-19 17:52:35313 days 3 hrs ago1681926755IN
Shikage: SHKG Token
0 ETH0.0042205390.73881041
Approve169615702023-04-02 13:01:23330 days 8 hrs ago1680440483IN
Shikage: SHKG Token
0 ETH0.0005254821.63468914
Approve168765802023-03-21 14:23:23342 days 6 hrs ago1679408603IN
Shikage: SHKG Token
0 ETH0.000875736.05336565
Approve168639502023-03-19 19:51:23344 days 1 hr ago1679255483IN
Shikage: SHKG Token
0 ETH0.0013373328.71483201
Transfer167400302023-03-02 9:35:59361 days 11 hrs ago1677749759IN
Shikage: SHKG Token
0 ETH0.0021042420.76301956
Approve165774292023-02-07 14:14:47384 days 7 hrs ago1675779287IN
Shikage: SHKG Token
0 ETH0.0014571231.2868386
Transfer163947482023-01-13 1:59:11409 days 19 hrs ago1673575151IN
Shikage: SHKG Token
0 ETH0.000933615.36390256
Approve163516472023-01-07 1:32:59415 days 19 hrs ago1673055179IN
Shikage: SHKG Token
0 ETH0.0007509216.12371111
Approve162921222022-12-29 18:11:47424 days 3 hrs ago1672337507IN
Shikage: SHKG Token
0 ETH0.0008700718.68190265
Approve162915172022-12-29 16:10:11424 days 5 hrs ago1672330211IN
Shikage: SHKG Token
0 ETH0.0009007419.34060045
Transfer161833662022-12-14 13:55:47439 days 7 hrs ago1671026147IN
Shikage: SHKG Token
0 ETH0.0021582726.18
Approve161810242022-12-14 6:02:59439 days 15 hrs ago1670997779IN
Shikage: SHKG Token
0 ETH0.0007166115.3869379
Transfer161809992022-12-14 5:57:59439 days 15 hrs ago1670997479IN
Shikage: SHKG Token
0 ETH0.0013168113.63414036
Transfer161612102022-12-11 11:36:47442 days 9 hrs ago1670758607IN
Shikage: SHKG Token
0 ETH0.0010210814.04634192
Transfer161564292022-12-10 19:35:11443 days 1 hr ago1670700911IN
Shikage: SHKG Token
0 ETH0.0015168715.7036034
Approve160778662022-11-29 19:54:35454 days 1 hr ago1669751675IN
Shikage: SHKG Token
0 ETH0.0005165611.09144951
Approve160702112022-11-28 18:14:47455 days 3 hrs ago1669659287IN
Shikage: SHKG Token
0 ETH0.0009207119.76936123
Transfer160261882022-11-22 14:37:35461 days 6 hrs ago1669127855IN
Shikage: SHKG Token
0 ETH0.0016116616.68495021
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
151844752022-07-21 7:04:37585 days 14 hrs ago1658387077
Shikage: SHKG Token
0.00697271 ETH
151844752022-07-21 7:04:37585 days 14 hrs ago1658387077
Shikage: SHKG Token
0.00697271 ETH
151844752022-07-21 7:04:37585 days 14 hrs ago1658387077
Shikage: SHKG Token
0.01327796 ETH
144032492022-03-17 9:36:55711 days 11 hrs ago1647509815
Shikage: SHKG Token
0.26970969 ETH
144032492022-03-17 9:36:55711 days 11 hrs ago1647509815
Shikage: SHKG Token
0.26970969 ETH
144032492022-03-17 9:36:55711 days 11 hrs ago1647509815
Shikage: SHKG Token
0.00066747 ETH
144032492022-03-17 9:36:55711 days 11 hrs ago1647509815
Shikage: SHKG Token
0.06742742 ETH
144032492022-03-17 9:36:55711 days 11 hrs ago1647509815
Shikage: SHKG Token
0.60684682 ETH
144024152022-03-17 6:34:48711 days 14 hrs ago1647498888
Shikage: SHKG Token
0.03291429 ETH
144024152022-03-17 6:34:48711 days 14 hrs ago1647498888
Shikage: SHKG Token
0.03291429 ETH
144024152022-03-17 6:34:48711 days 14 hrs ago1647498888
Shikage: SHKG Token
0.00822857 ETH
144024152022-03-17 6:34:48711 days 14 hrs ago1647498888
Shikage: SHKG Token
0.07405715 ETH
144019962022-03-17 4:52:12711 days 16 hrs ago1647492732
Shikage: SHKG Token
0.03315761 ETH
144019962022-03-17 4:52:12711 days 16 hrs ago1647492732
Shikage: SHKG Token
0.03315761 ETH
144019962022-03-17 4:52:12711 days 16 hrs ago1647492732
Shikage: SHKG Token
0.0082894 ETH
144019962022-03-17 4:52:12711 days 16 hrs ago1647492732
Shikage: SHKG Token
0.07458144 ETH
143969972022-03-16 10:14:11712 days 11 hrs ago1647425651
Shikage: SHKG Token
0.01804704 ETH
143969972022-03-16 10:14:11712 days 11 hrs ago1647425651
Shikage: SHKG Token
0.01804704 ETH
143969972022-03-16 10:14:11712 days 11 hrs ago1647425651
Shikage: SHKG Token
0.00002317 ETH
143969972022-03-16 10:14:11712 days 11 hrs ago1647425651
Shikage: SHKG Token
0.00451176 ETH
143969972022-03-16 10:14:11712 days 11 hrs ago1647425651
Shikage: SHKG Token
0.04031025 ETH
143957402022-03-16 5:30:46712 days 15 hrs ago1647408646
Shikage: SHKG Token
0.19354626 ETH
143957402022-03-16 5:30:46712 days 15 hrs ago1647408646
Shikage: SHKG Token
0.19354626 ETH
143957402022-03-16 5:30:46712 days 15 hrs ago1647408646
Shikage: SHKG Token
0.00029558 ETH
143957402022-03-16 5:30:46712 days 15 hrs ago1647408646
Shikage: SHKG Token
0.04838656 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Shikage

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-09
*/

/*
Shikage SHKG v2

Telegram: https://t.me/shikageofficial
Website: https://shikage.space/
Facebook: https://www.facebook.com/Shikage.ETH/
Instagram: https://www.instagram.com/shikage_token/
Twitter: https://twitter.com/ShikageEth
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.11;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // 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);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Shikage is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Shikage";
    string constant _symbol = "SHKG";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 200;
    uint256 public _maxWalletSize = (_totalSupply * 1) / 100;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;
    mapping (address => uint256) lastSell;
    mapping (address => uint256) lastSellAmount;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 liquidityFee = 20;
    uint256 marketingFee = 50;
    uint256 devFee = 30;
    uint256 totalFee = 100;
    uint256 sellBias = 0;
    uint256 sellPercent = 250;
    uint256 sellPeriod = 72 hours;
    uint256 antiDumpTax = 400;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;
    uint256 feeDenominator = 1000;

    address public constant liquidityReceiver = 0x51FE1EDbC149556eF2867115E58616428aA2C19A;
    address payable public constant marketingReceiver = payable(0x51FE1EDbC149556eF2867115E58616428aA2C19A);
    address payable public constant devReceiver = payable(0x592Ab8ED942c7Eb84cB27616f1Dcb57669DFD901);

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    bool public pauseDisabled = false;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[msg.sender] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function setProtection(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
            uint256 impactEstimate = amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = (totalFee * antiDumpTax) / 100;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient], !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountMarketing = (contractBalance * marketingFee) / totalETHFee;
        uint256 amountDev = contractBalance - (amountLiquidity + amountMarketing);

        if(amountToLiquify > 0) {
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devReceiver.transfer(amountDev);

    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 400 && (_tax == 0 || _tax >= sellPercent) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
        require(sellBias <= totalFee);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0);
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        liquidityPools[_pool] = _enabled;
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length);
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]]);
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260c8620000146009600a62000668565b6200002490633b9aca0062000680565b6200003190600162000680565b6200003d9190620006a2565b6001556064620000506009600a62000668565b6200006090633b9aca0062000680565b6200006d90600162000680565b620000799190620006a2565b6002556014600a8181556032600b55601e600c556064600d8190556000600e5560fa600f556203f480601055610190601181905561070860125560156013819055845460ff19166001179094556103e89093556028601655601755601c80546201000160a81b60ff62ffffff60a81b0119909116179055620000fe9060099062000668565b6200010e90633b9aca0062000680565b6200011a9190620006a2565b601d556127106200012e6009600a62000668565b6200013e90633b9aca0062000680565b6200014a9190620006a2565b601e553480156200015a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002189190620006c5565b6001600160a01b031663c9c653966080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d9190620006c5565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003009190620006c5565b6001600160a01b031660a08190526000908152601860205260408120805460ff1916600117905560001990600490620003416000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d80835290845282822094909455308152600483528181209381529290915281206000199055600190600890620003b26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553381526019835281812080548516600190811790915530825260099384905291812080549094168217909355916200041e6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff19948516179055737a250d5630b4cf539739df2c5dacb4c659f2488d90526009908190527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80549092166001179091556200049e90600a62000668565b620004ae90633b9aca0062000680565b60036000620004c56000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004f26000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200052c6009600a62000668565b6200053c90633b9aca0062000680565b60405190815260200160405180910390a3620006f0565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005aa5781600019048211156200058e576200058e62000553565b808516156200059c57918102915b93841c93908002906200056e565b509250929050565b600082620005c35750600162000662565b81620005d25750600062000662565b8160018114620005eb5760028114620005f65762000616565b600191505062000662565b60ff8411156200060a576200060a62000553565b50506001821b62000662565b5060208310610133831016604e8410600b84101617156200063b575081810a62000662565b62000647838362000569565b80600019048211156200065e576200065e62000553565b0290505b92915050565b60006200067960ff841683620005b2565b9392505050565b60008160001904831182151516156200069d576200069d62000553565b500290565b600082620006c057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006d857600080fd5b81516001600160a01b03811681146200067957600080fd5b60805160a051612ce162000739600039600081816107ac015281816114e60152611e6001526000818161098d015281816122ec015281816123a401526124e00152612ce16000f3fe6080604052600436106103035760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610925578063f84ba65d14610945578063f8821a6214610965578063f887ea401461097b57600080fd5b8063d5d035f51461089f578063dd62ed3e146108bf578063e624c4bc1461090557600080fd5b8063abe57e70146107ee578063b95762441461080e578063bf56b37114610828578063c5363caa1461083e578063d08893581461085f578063d51ed1c81461087f57600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461077a578063a5949bcf146104ad578063a8aa1b311461079a578063a9059cbb146107ce57600080fd5b80638da5cb5b146107195780638f9a55c01461073757806395d89b411461074d57600080fd5b806370a0823114610672578063715018a6146106a85780637516baec146106bd5780637d1db4a5146106de578063882cfb3f146106f4578063893d20e81461071957600080fd5b80632b112e491161024f5780635804f1e411610208578063659b1c7c116101e2578063659b1c7c146105e957806367243482146106095780636ddd1713146106295780636f9a880e1461064a57600080fd5b80635804f1e4146105935780636419b6f9146105a9578063658d4b7f146105c957600080fd5b80632b112e49146104ed578063313ce56714610502578063395093511461051e578063421dd7c71461053e578063492a937b14610553578063571ac8b01461057357600080fd5b80630f4f7bfe116102bc5780631faf723b116102965780631faf723b1461044d578063201e79911461046d57806323b872dd1461048d578063264d26dd146104ad57600080fd5b80630f4f7bfe146103f85780631161ae391461041857806318160ddd1461043857600080fd5b806301339c211461030f5780630445b6671461032657806304a66b481461034f57806306fdde031461036f578063095ea7b3146103a85780630e049c54146103d857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b506103246109af565b005b34801561033257600080fd5b5061033c601d5481565b6040519081526020015b60405180910390f35b34801561035b57600080fd5b5061032461036a36600461263c565b6109f9565b34801561037b57600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b6040516103469190612677565b3480156103b457600080fd5b506103c86103c33660046126e4565b610a85565b6040519015158152602001610346565b3480156103e457600080fd5b506103246103f336600461271e565b610af2565b34801561040457600080fd5b5061032461041336600461275f565b610bc1565b34801561042457600080fd5b506103c861043336600461275f565b610cfb565b34801561044457600080fd5b5061033c610d0f565b34801561045957600080fd5b5061032461046836600461275f565b610d30565b34801561047957600080fd5b5061032461048836600461275f565b610dcd565b34801561049957600080fd5b506103c86104a8366004612781565b610e02565b3480156104b957600080fd5b506104d57351fe1edbc149556ef2867115e58616428aa2c19a81565b6040516001600160a01b039091168152602001610346565b3480156104f957600080fd5b5061033c610e97565b34801561050e57600080fd5b5060405160098152602001610346565b34801561052a57600080fd5b506103c86105393660046126e4565b610f17565b34801561054a57600080fd5b50610324610f5c565b34801561055f57600080fd5b5061032461056e3660046127c2565b610f9b565b34801561057f57600080fd5b506103c861058e3660046127fb565b610ff0565b34801561059f57600080fd5b5061033c601b5481565b3480156105b557600080fd5b5061033c6105c4366004612818565b610ffe565b3480156105d557600080fd5b506103246105e43660046127c2565b611092565b3480156105f557600080fd5b50610324610604366004612836565b6110e7565b34801561061557600080fd5b5061032461062436600461289f565b61114c565b34801561063557600080fd5b50601c546103c890600160b81b900460ff1681565b34801561065657600080fd5b506104d573592ab8ed942c7eb84cb27616f1dcb57669dfd90181565b34801561067e57600080fd5b5061033c61068d3660046127fb565b6001600160a01b031660009081526003602052604090205490565b3480156106b457600080fd5b5061032461128d565b3480156106c957600080fd5b50601c546103c890600160a81b900460ff1681565b3480156106ea57600080fd5b5061033c60015481565b34801561070057600080fd5b50601c546104d59061010090046001600160a01b031681565b34801561072557600080fd5b506000546001600160a01b03166104d5565b34801561074357600080fd5b5061033c60025481565b34801561075957600080fd5b5060408051808201909152600481526353484b4760e01b602082015261039b565b34801561078657600080fd5b506103c86107953660046126e4565b611301565b3480156107a657600080fd5b506104d57f000000000000000000000000000000000000000000000000000000000000000081565b3480156107da57600080fd5b506103c86107e93660046126e4565b61139a565b3480156107fa57600080fd5b5061032461080936600461275f565b6113a7565b34801561081a57600080fd5b50601c546103c89060ff1681565b34801561083457600080fd5b5061033c601a5481565b34801561084a57600080fd5b50601c546103c890600160b01b900460ff1681565b34801561086b57600080fd5b5061032461087a36600461290b565b611423565b34801561088b57600080fd5b5061033c61089a366004612940565b6114d2565b3480156108ab57600080fd5b506103246108ba3660046127c2565b611529565b3480156108cb57600080fd5b5061033c6108da366004612959565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091157600080fd5b506103246109203660046127fb565b611611565b34801561093157600080fd5b506103246109403660046127fb565b611686565b34801561095157600080fd5b506103246109603660046127c2565b611770565b34801561097157600080fd5b5061033c601e5481565b34801561098757600080fd5b506104d57f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146109e25760405162461bcd60e51b81526004016109d990612987565b60405180910390fd5b601a54156109ef57600080fd5b43601a5542601b55565b6000546001600160a01b03163314610a235760405162461bcd60e51b81526004016109d990612987565b600a859055600b849055600c839055600e82905582610a4285876129d2565b610a4c91906129d2565b600d556015819055610a5f6004826129ea565b600d541115610a6d57600080fd5b600d54600e541115610a7e57600080fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae09086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1c5760405162461bcd60e51b81526004016109d990612987565b600a8210158015610b2f57506101908411155b8015610b455750831580610b455750600f548410155b8015610b535750610e108311155b610b9f5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109d9565b6011939093556012919091556013556014805460ff1916911515919091179055565b6000546001600160a01b03163314610beb5760405162461bcd60e51b81526004016109d990612987565b610190606483600d54610bfe9190612a0c565b610c0891906129ea565b1115610c4a5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109d9565b6064821015610ca65760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109d9565b62093a80811115610cf05760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109d9565b600f91909155601055565b600082610d07836114d2565b119392505050565b6000610d1d6009600a612b0f565b610d2b90633b9aca00612a0c565b905090565b6000546001600160a01b03163314610d5a5760405162461bcd60e51b81526004016109d990612987565b600082118015610d6a5750600081115b8015610d8d5750600581610d80846103e8612a0c565b610d8a91906129ea565b10155b610d9657600080fd5b8082610da46009600a612b0f565b610db290633b9aca00612a0c565b610dbc9190612a0c565b610dc691906129ea565b6001555050565b6000546001600160a01b03163314610df75760405162461bcd60e51b81526004016109d990612987565b601691909155601755565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e82576001600160a01b0384166000908152600460209081526040808320338452909152902054610e5d908390612b1e565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b610e8d8484846117c5565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091610ef3916129d2565b610eff6009600a612b0f565b610f0d90633b9aca00612a0c565b610d2b9190612b1e565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610f53918590610f4e9086906129d2565b611b5e565b50600192915050565b6000546001600160a01b03163314610f865760405162461bcd60e51b81526004016109d990612987565b601c805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610fc55760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000610aec82600019610a85565b600043601a5414156110205760016015546110199190612b1e565b9050610aec565b821561105c578161104057600e54600d5461103b91906129d2565b611019565b6064600f54600d546110529190612a0c565b61101991906129ea565b8161107657600e54600d546110719190612b1e565b610e90565b6064600f54600d546110889190612a0c565b610e9091906129ea565b6000546001600160a01b031633146110bc5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111115760405162461bcd60e51b81526004016109d990612987565b801561112e57601c54600160b01b900460ff161561112e57600080fd5b601c8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146111765760405162461bcd60e51b81526004016109d990612987565b82811461118257600080fd5b601c805460ff60b81b198116909155600160b81b900460ff1660005b8481101561126a57601860008787848181106111bc576111bc612b35565b90506020020160208101906111d191906127fb565b6001600160a01b0316815260208101919091526040016000205460ff16156111f857600080fd5b6112573387878481811061120e5761120e612b35565b905060200201602081019061122391906127fb565b61122f6009600a612b0f565b87878681811061124157611241612b35565b905060200201356112529190612a0c565b6117c5565b508061126281612b4b565b91505061119e565b50601c8054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b031633146112b75760405162461bcd60e51b81526004016109d990612987565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156113835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109d9565b6113903385858403611b5e565b5060019392505050565b6000610e903384846117c5565b6000546001600160a01b031633146113d15760405162461bcd60e51b81526004016109d990612987565b6000811180156113e357506127108111155b6113ec57600080fd5b80826113fa6009600a612b0f565b61140890633b9aca00612a0c565b6114129190612a0c565b61141c91906129ea565b6002555050565b6000546001600160a01b0316331461144d5760405162461bcd60e51b81526004016109d990612987565b60008211801561145d5750600081115b61146657600080fd5b601c805460ff60b81b1916600160b81b851515021790558061148a6009600a612b0f565b61149890633b9aca00612a0c565b6114a291906129ea565b601e55816114b26009600a612b0f565b6114c090633b9aca00612a0c565b6114ca91906129ea565b601d55505050565b60006114dc610e97565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526003602052604090205461151f9084612a0c565b610aec91906129ea565b6000546001600160a01b031633146115535760405162461bcd60e51b81526004016109d990612987565b601c546001600160a01b0383811661010090920416146115a557601c54600160b01b900460ff161561158457600080fd5b601c8054610100600160a81b0319166101006001600160a01b038516021790555b801561160d57601c546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401600060405180830381600087803b1580156115f457600080fd5b505af1158015611608573d6000803e3d6000fd5b505050505b5050565b6000546001600160a01b0316331461163b5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b031660009081526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352922080549091169091179055565b6000546001600160a01b031633146116b05760405162461bcd60e51b81526004016109d990612987565b6001600160a01b0381166117155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461179a5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600360205260408120548211156118245760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109d9565b600082116118745760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e7366657272656400000000000000000060448201526064016109d9565b601f5460ff16156118915761188a848484611c82565b9050610e90565b61189b8483611d37565b6001600160a01b03831660009081526018602052604090205460ff161580156118cf57506001600160a01b03831661dead14155b156118fe576001600160a01b03831660009081526009602052604090205460ff166118fe576118fe8383611da0565b601a54611990576001600160a01b03841660009081526019602052604090205460ff168061194457506001600160a01b03831660009081526019602052604090205460ff165b6119905760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109d9565b6001600160a01b038416600090815260036020526040812080548492906119b8908490612b1e565b90915550506001600160a01b03841660009081526008602052604081205460ff161580156119ff57506001600160a01b03841660009081526008602052604090205460ff16155b611a095782611a14565b611a14858585611e2a565b9050611a1f84612145565b15611a33578215611a3357611a33836121ed565b6001600160a01b03841660009081526003602052604081208054839290611a5b9084906129d2565b9091555050601a5415158015611a7a5750601c54600160a81b900460ff165b15611b0657601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190612b66565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b4b91815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316611bc05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d9565b6001600160a01b038216611c215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d9565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260036020526040812080548391908390611cac908490612b1e565b90915550506001600160a01b03831660009081526003602052604081208054849290611cd99084906129d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d2591815260200190565b60405180910390a35060019392505050565b60015481111580611d6057506001600160a01b03821660009081526009602052604090205460ff165b61160d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109d9565b6002546001600160a01b0383166000908152600360205260409020548190611dc99084906129d2565b1115611e255760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109d9565b505050565b6001600160a01b038216600090815260186020526040812054819060ff168015611e5657506000601154115b15611fed576000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612b9f565b506014549193509150600090869060ff16611efb5782611efd565b835b6001600160701b0316611f1091906129d2565b611f1c876103e8612a0c565b611f2691906129ea565b6012546001600160a01b038a16600090815260066020526040902054919250611f4e916129d2565b421115611f7c576001600160a01b038816600090815260066020908152604080832042905560079091528120555b6001600160a01b03881660009081526007602052604081208054839290611fa49084906129d2565b90915550506013546001600160a01b03891660009081526007602052604090205410611fe9576064601154600d54611fdc9190612a0c565b611fe691906129ea565b93505b5050505b8061206f576015546001600160a01b038086166000908152601860205260408082205492891682529020546120589160ff90811691161580156105c457506010546001600160a01b0389166000908152600560205260409020544291612052916129d2565b11610ffe565b6120629085612a0c565b61206c91906129ea565b90505b6001600160a01b03851660009081526018602052604090205460ff1680156120ad57506001600160a01b038416600090815260056020526040902054155b156120ce576001600160a01b03841660009081526005602052604090204290555b30600090815260036020526040812080548392906120ed9084906129d2565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361213c8184612b1e565b95945050505050565b3360009081526018602052604081205460ff1615801561217557503360009081526008602052604090205460ff16155b80156121845750601f5460ff16155b80156121995750601c54600160b81b900460ff165b80156121bd57506001600160a01b03821660009081526018602052604090205460ff165b80156121da5750601e543060009081526003602052604090205410155b8015610aec57506000600d541192915050565b601f805460ff19166001179055601d54600090821061220e57601d54612210565b815b3060009081526003602052604090205490915081111561223c5750306000908152600360205260409020545b600061224c601654601754610cfb565b61225857600a5461225b565b60005b905060006002600d5483856122709190612a0c565b61227a91906129ea565b61228491906129ea565b90506122908184612b1e565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106122ca576122ca612b35565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190612bef565b8160018151811061237f5761237f612b35565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906123e4908790600090869030904290600401612c0c565b600060405180830381600087803b1580156123fe57600080fd5b505af1158015612412573d6000803e3d6000fd5b504792506000915061242790506002866129ea565b600d546124349190612b1e565b905060006002826124458886612a0c565b61244f91906129ea565b61245991906129ea565b9050600082600b548561246c9190612a0c565b61247691906129ea565b9050600061248482846129d2565b61248e9086612b1e565b905086156125945760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201527351fe1edbc149556ef2867115e58616428aa2c19a60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015612532573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125579190612c7d565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156125dd576040517351fe1edbc149556ef2867115e58616428aa2c19a9083156108fc029084906000818181858888f193505050501580156125db573d6000803e3d6000fd5b505b80156126265760405173592ab8ed942c7eb84cb27616f1dcb57669dfd9019082156108fc029083906000818181858888f19350505050158015612624573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561265457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156126a457858101830151858201604001528201612688565b818111156126b6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146126e157600080fd5b50565b600080604083850312156126f757600080fd5b8235612702816126cc565b946020939093013593505050565b80151581146126e157600080fd5b6000806000806080858703121561273457600080fd5b843593506020850135925060408501359150606085013561275481612710565b939692955090935050565b6000806040838503121561277257600080fd5b50508035926020909101359150565b60008060006060848603121561279657600080fd5b83356127a1816126cc565b925060208401356127b1816126cc565b929592945050506040919091013590565b600080604083850312156127d557600080fd5b82356127e0816126cc565b915060208301356127f081612710565b809150509250929050565b60006020828403121561280d57600080fd5b8135610e90816126cc565b6000806040838503121561282b57600080fd5b82356127e081612710565b60006020828403121561284857600080fd5b8135610e9081612710565b60008083601f84011261286557600080fd5b50813567ffffffffffffffff81111561287d57600080fd5b6020830191508360208260051b850101111561289857600080fd5b9250929050565b600080600080604085870312156128b557600080fd5b843567ffffffffffffffff808211156128cd57600080fd5b6128d988838901612853565b909650945060208701359150808211156128f257600080fd5b506128ff87828801612853565b95989497509550505050565b60008060006060848603121561292057600080fd5b833561292b81612710565b95602085013595506040909401359392505050565b60006020828403121561295257600080fd5b5035919050565b6000806040838503121561296c57600080fd5b8235612977816126cc565b915060208301356127f0816126cc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156129e5576129e56129bc565b500190565b600082612a0757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2657612a266129bc565b500290565b600181815b80851115612a66578160001904821115612a4c57612a4c6129bc565b80851615612a5957918102915b93841c9390800290612a30565b509250929050565b600082612a7d57506001610aec565b81612a8a57506000610aec565b8160018114612aa05760028114612aaa57612ac6565b6001915050610aec565b60ff841115612abb57612abb6129bc565b50506001821b610aec565b5060208310610133831016604e8410600b8410161715612ae9575081810a610aec565b612af38383612a2b565b8060001904821115612b0757612b076129bc565b029392505050565b6000610e9060ff841683612a6e565b600082821015612b3057612b306129bc565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612b5f57612b5f6129bc565b5060010190565b600060208284031215612b7857600080fd5b8151610e9081612710565b80516001600160701b0381168114612b9a57600080fd5b919050565b600080600060608486031215612bb457600080fd5b612bbd84612b83565b9250612bcb60208501612b83565b9150604084015163ffffffff81168114612be457600080fd5b809150509250925092565b600060208284031215612c0157600080fd5b8151610e90816126cc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c5c5784516001600160a01b031683529383019391830191600101612c37565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c9257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200810f3f8e897679cd42ebf17c02be9b60e572172e422e91523ffb7f47f70a23a64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b14610925578063f84ba65d14610945578063f8821a6214610965578063f887ea401461097b57600080fd5b8063d5d035f51461089f578063dd62ed3e146108bf578063e624c4bc1461090557600080fd5b8063abe57e70146107ee578063b95762441461080e578063bf56b37114610828578063c5363caa1461083e578063d08893581461085f578063d51ed1c81461087f57600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d71461077a578063a5949bcf146104ad578063a8aa1b311461079a578063a9059cbb146107ce57600080fd5b80638da5cb5b146107195780638f9a55c01461073757806395d89b411461074d57600080fd5b806370a0823114610672578063715018a6146106a85780637516baec146106bd5780637d1db4a5146106de578063882cfb3f146106f4578063893d20e81461071957600080fd5b80632b112e491161024f5780635804f1e411610208578063659b1c7c116101e2578063659b1c7c146105e957806367243482146106095780636ddd1713146106295780636f9a880e1461064a57600080fd5b80635804f1e4146105935780636419b6f9146105a9578063658d4b7f146105c957600080fd5b80632b112e49146104ed578063313ce56714610502578063395093511461051e578063421dd7c71461053e578063492a937b14610553578063571ac8b01461057357600080fd5b80630f4f7bfe116102bc5780631faf723b116102965780631faf723b1461044d578063201e79911461046d57806323b872dd1461048d578063264d26dd146104ad57600080fd5b80630f4f7bfe146103f85780631161ae391461041857806318160ddd1461043857600080fd5b806301339c211461030f5780630445b6671461032657806304a66b481461034f57806306fdde031461036f578063095ea7b3146103a85780630e049c54146103d857600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b506103246109af565b005b34801561033257600080fd5b5061033c601d5481565b6040519081526020015b60405180910390f35b34801561035b57600080fd5b5061032461036a36600461263c565b6109f9565b34801561037b57600080fd5b506040805180820190915260078152665368696b61676560c81b60208201525b6040516103469190612677565b3480156103b457600080fd5b506103c86103c33660046126e4565b610a85565b6040519015158152602001610346565b3480156103e457600080fd5b506103246103f336600461271e565b610af2565b34801561040457600080fd5b5061032461041336600461275f565b610bc1565b34801561042457600080fd5b506103c861043336600461275f565b610cfb565b34801561044457600080fd5b5061033c610d0f565b34801561045957600080fd5b5061032461046836600461275f565b610d30565b34801561047957600080fd5b5061032461048836600461275f565b610dcd565b34801561049957600080fd5b506103c86104a8366004612781565b610e02565b3480156104b957600080fd5b506104d57351fe1edbc149556ef2867115e58616428aa2c19a81565b6040516001600160a01b039091168152602001610346565b3480156104f957600080fd5b5061033c610e97565b34801561050e57600080fd5b5060405160098152602001610346565b34801561052a57600080fd5b506103c86105393660046126e4565b610f17565b34801561054a57600080fd5b50610324610f5c565b34801561055f57600080fd5b5061032461056e3660046127c2565b610f9b565b34801561057f57600080fd5b506103c861058e3660046127fb565b610ff0565b34801561059f57600080fd5b5061033c601b5481565b3480156105b557600080fd5b5061033c6105c4366004612818565b610ffe565b3480156105d557600080fd5b506103246105e43660046127c2565b611092565b3480156105f557600080fd5b50610324610604366004612836565b6110e7565b34801561061557600080fd5b5061032461062436600461289f565b61114c565b34801561063557600080fd5b50601c546103c890600160b81b900460ff1681565b34801561065657600080fd5b506104d573592ab8ed942c7eb84cb27616f1dcb57669dfd90181565b34801561067e57600080fd5b5061033c61068d3660046127fb565b6001600160a01b031660009081526003602052604090205490565b3480156106b457600080fd5b5061032461128d565b3480156106c957600080fd5b50601c546103c890600160a81b900460ff1681565b3480156106ea57600080fd5b5061033c60015481565b34801561070057600080fd5b50601c546104d59061010090046001600160a01b031681565b34801561072557600080fd5b506000546001600160a01b03166104d5565b34801561074357600080fd5b5061033c60025481565b34801561075957600080fd5b5060408051808201909152600481526353484b4760e01b602082015261039b565b34801561078657600080fd5b506103c86107953660046126e4565b611301565b3480156107a657600080fd5b506104d57f0000000000000000000000003321e423d0fe39247d8e0b2f832e4632cf9925c281565b3480156107da57600080fd5b506103c86107e93660046126e4565b61139a565b3480156107fa57600080fd5b5061032461080936600461275f565b6113a7565b34801561081a57600080fd5b50601c546103c89060ff1681565b34801561083457600080fd5b5061033c601a5481565b34801561084a57600080fd5b50601c546103c890600160b01b900460ff1681565b34801561086b57600080fd5b5061032461087a36600461290b565b611423565b34801561088b57600080fd5b5061033c61089a366004612940565b6114d2565b3480156108ab57600080fd5b506103246108ba3660046127c2565b611529565b3480156108cb57600080fd5b5061033c6108da366004612959565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091157600080fd5b506103246109203660046127fb565b611611565b34801561093157600080fd5b506103246109403660046127fb565b611686565b34801561095157600080fd5b506103246109603660046127c2565b611770565b34801561097157600080fd5b5061033c601e5481565b34801561098757600080fd5b506104d57f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000546001600160a01b031633146109e25760405162461bcd60e51b81526004016109d990612987565b60405180910390fd5b601a54156109ef57600080fd5b43601a5542601b55565b6000546001600160a01b03163314610a235760405162461bcd60e51b81526004016109d990612987565b600a859055600b849055600c839055600e82905582610a4285876129d2565b610a4c91906129d2565b600d556015819055610a5f6004826129ea565b600d541115610a6d57600080fd5b600d54600e541115610a7e57600080fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ae09086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b1c5760405162461bcd60e51b81526004016109d990612987565b600a8210158015610b2f57506101908411155b8015610b455750831580610b455750600f548410155b8015610b535750610e108311155b610b9f5760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109d9565b6011939093556012919091556013556014805460ff1916911515919091179055565b6000546001600160a01b03163314610beb5760405162461bcd60e51b81526004016109d990612987565b610190606483600d54610bfe9190612a0c565b610c0891906129ea565b1115610c4a5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109d9565b6064821015610ca65760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109d9565b62093a80811115610cf05760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109d9565b600f91909155601055565b600082610d07836114d2565b119392505050565b6000610d1d6009600a612b0f565b610d2b90633b9aca00612a0c565b905090565b6000546001600160a01b03163314610d5a5760405162461bcd60e51b81526004016109d990612987565b600082118015610d6a5750600081115b8015610d8d5750600581610d80846103e8612a0c565b610d8a91906129ea565b10155b610d9657600080fd5b8082610da46009600a612b0f565b610db290633b9aca00612a0c565b610dbc9190612a0c565b610dc691906129ea565b6001555050565b6000546001600160a01b03163314610df75760405162461bcd60e51b81526004016109d990612987565b601691909155601755565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e82576001600160a01b0384166000908152600460209081526040808320338452909152902054610e5d908390612b1e565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b610e8d8484846117c5565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c549091610ef3916129d2565b610eff6009600a612b0f565b610f0d90633b9aca00612a0c565b610d2b9190612b1e565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610f53918590610f4e9086906129d2565b611b5e565b50600192915050565b6000546001600160a01b03163314610f865760405162461bcd60e51b81526004016109d990612987565b601c805460ff60b01b1916600160b01b179055565b6000546001600160a01b03163314610fc55760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6000610aec82600019610a85565b600043601a5414156110205760016015546110199190612b1e565b9050610aec565b821561105c578161104057600e54600d5461103b91906129d2565b611019565b6064600f54600d546110529190612a0c565b61101991906129ea565b8161107657600e54600d546110719190612b1e565b610e90565b6064600f54600d546110889190612a0c565b610e9091906129ea565b6000546001600160a01b031633146110bc5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111115760405162461bcd60e51b81526004016109d990612987565b801561112e57601c54600160b01b900460ff161561112e57600080fd5b601c8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146111765760405162461bcd60e51b81526004016109d990612987565b82811461118257600080fd5b601c805460ff60b81b198116909155600160b81b900460ff1660005b8481101561126a57601860008787848181106111bc576111bc612b35565b90506020020160208101906111d191906127fb565b6001600160a01b0316815260208101919091526040016000205460ff16156111f857600080fd5b6112573387878481811061120e5761120e612b35565b905060200201602081019061122391906127fb565b61122f6009600a612b0f565b87878681811061124157611241612b35565b905060200201356112529190612a0c565b6117c5565b508061126281612b4b565b91505061119e565b50601c8054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b031633146112b75760405162461bcd60e51b81526004016109d990612987565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156113835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109d9565b6113903385858403611b5e565b5060019392505050565b6000610e903384846117c5565b6000546001600160a01b031633146113d15760405162461bcd60e51b81526004016109d990612987565b6000811180156113e357506127108111155b6113ec57600080fd5b80826113fa6009600a612b0f565b61140890633b9aca00612a0c565b6114129190612a0c565b61141c91906129ea565b6002555050565b6000546001600160a01b0316331461144d5760405162461bcd60e51b81526004016109d990612987565b60008211801561145d5750600081115b61146657600080fd5b601c805460ff60b81b1916600160b81b851515021790558061148a6009600a612b0f565b61149890633b9aca00612a0c565b6114a291906129ea565b601e55816114b26009600a612b0f565b6114c090633b9aca00612a0c565b6114ca91906129ea565b601d55505050565b60006114dc610e97565b6001600160a01b037f0000000000000000000000003321e423d0fe39247d8e0b2f832e4632cf9925c21660009081526003602052604090205461151f9084612a0c565b610aec91906129ea565b6000546001600160a01b031633146115535760405162461bcd60e51b81526004016109d990612987565b601c546001600160a01b0383811661010090920416146115a557601c54600160b01b900460ff161561158457600080fd5b601c8054610100600160a81b0319166101006001600160a01b038516021790555b801561160d57601c546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401600060405180830381600087803b1580156115f457600080fd5b505af1158015611608573d6000803e3d6000fd5b505050505b5050565b6000546001600160a01b0316331461163b5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b031660009081526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352922080549091169091179055565b6000546001600160a01b031633146116b05760405162461bcd60e51b81526004016109d990612987565b6001600160a01b0381166117155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461179a5760405162461bcd60e51b81526004016109d990612987565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600360205260408120548211156118245760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109d9565b600082116118745760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e7366657272656400000000000000000060448201526064016109d9565b601f5460ff16156118915761188a848484611c82565b9050610e90565b61189b8483611d37565b6001600160a01b03831660009081526018602052604090205460ff161580156118cf57506001600160a01b03831661dead14155b156118fe576001600160a01b03831660009081526009602052604090205460ff166118fe576118fe8383611da0565b601a54611990576001600160a01b03841660009081526019602052604090205460ff168061194457506001600160a01b03831660009081526019602052604090205460ff165b6119905760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109d9565b6001600160a01b038416600090815260036020526040812080548492906119b8908490612b1e565b90915550506001600160a01b03841660009081526008602052604081205460ff161580156119ff57506001600160a01b03841660009081526008602052604090205460ff16155b611a095782611a14565b611a14858585611e2a565b9050611a1f84612145565b15611a33578215611a3357611a33836121ed565b6001600160a01b03841660009081526003602052604081208054839290611a5b9084906129d2565b9091555050601a5415158015611a7a5750601c54600160a81b900460ff165b15611b0657601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015611ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b049190612b66565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b4b91815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316611bc05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d9565b6001600160a01b038216611c215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d9565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316600090815260036020526040812080548391908390611cac908490612b1e565b90915550506001600160a01b03831660009081526003602052604081208054849290611cd99084906129d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d2591815260200190565b60405180910390a35060019392505050565b60015481111580611d6057506001600160a01b03821660009081526009602052604090205460ff165b61160d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109d9565b6002546001600160a01b0383166000908152600360205260409020548190611dc99084906129d2565b1115611e255760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109d9565b505050565b6001600160a01b038216600090815260186020526040812054819060ff168015611e5657506000601154115b15611fed576000807f0000000000000000000000003321e423d0fe39247d8e0b2f832e4632cf9925c26001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190612b9f565b506014549193509150600090869060ff16611efb5782611efd565b835b6001600160701b0316611f1091906129d2565b611f1c876103e8612a0c565b611f2691906129ea565b6012546001600160a01b038a16600090815260066020526040902054919250611f4e916129d2565b421115611f7c576001600160a01b038816600090815260066020908152604080832042905560079091528120555b6001600160a01b03881660009081526007602052604081208054839290611fa49084906129d2565b90915550506013546001600160a01b03891660009081526007602052604090205410611fe9576064601154600d54611fdc9190612a0c565b611fe691906129ea565b93505b5050505b8061206f576015546001600160a01b038086166000908152601860205260408082205492891682529020546120589160ff90811691161580156105c457506010546001600160a01b0389166000908152600560205260409020544291612052916129d2565b11610ffe565b6120629085612a0c565b61206c91906129ea565b90505b6001600160a01b03851660009081526018602052604090205460ff1680156120ad57506001600160a01b038416600090815260056020526040902054155b156120ce576001600160a01b03841660009081526005602052604090204290555b30600090815260036020526040812080548392906120ed9084906129d2565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361213c8184612b1e565b95945050505050565b3360009081526018602052604081205460ff1615801561217557503360009081526008602052604090205460ff16155b80156121845750601f5460ff16155b80156121995750601c54600160b81b900460ff165b80156121bd57506001600160a01b03821660009081526018602052604090205460ff165b80156121da5750601e543060009081526003602052604090205410155b8015610aec57506000600d541192915050565b601f805460ff19166001179055601d54600090821061220e57601d54612210565b815b3060009081526003602052604090205490915081111561223c5750306000908152600360205260409020545b600061224c601654601754610cfb565b61225857600a5461225b565b60005b905060006002600d5483856122709190612a0c565b61227a91906129ea565b61228491906129ea565b90506122908184612b1e565b604080516002808252606082018352929550600092909160208301908036833701905050905030816000815181106122ca576122ca612b35565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190612bef565b8160018151811061237f5761237f612b35565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906123e4908790600090869030904290600401612c0c565b600060405180830381600087803b1580156123fe57600080fd5b505af1158015612412573d6000803e3d6000fd5b504792506000915061242790506002866129ea565b600d546124349190612b1e565b905060006002826124458886612a0c565b61244f91906129ea565b61245991906129ea565b9050600082600b548561246c9190612a0c565b61247691906129ea565b9050600061248482846129d2565b61248e9086612b1e565b905086156125945760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201527351fe1edbc149556ef2867115e58616428aa2c19a60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990859060c40160606040518083038185885af1158015612532573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125579190612c7d565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156125dd576040517351fe1edbc149556ef2867115e58616428aa2c19a9083156108fc029084906000818181858888f193505050501580156125db573d6000803e3d6000fd5b505b80156126265760405173592ab8ed942c7eb84cb27616f1dcb57669dfd9019082156108fc029083906000818181858888f19350505050158015612624573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561265457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156126a457858101830151858201604001528201612688565b818111156126b6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146126e157600080fd5b50565b600080604083850312156126f757600080fd5b8235612702816126cc565b946020939093013593505050565b80151581146126e157600080fd5b6000806000806080858703121561273457600080fd5b843593506020850135925060408501359150606085013561275481612710565b939692955090935050565b6000806040838503121561277257600080fd5b50508035926020909101359150565b60008060006060848603121561279657600080fd5b83356127a1816126cc565b925060208401356127b1816126cc565b929592945050506040919091013590565b600080604083850312156127d557600080fd5b82356127e0816126cc565b915060208301356127f081612710565b809150509250929050565b60006020828403121561280d57600080fd5b8135610e90816126cc565b6000806040838503121561282b57600080fd5b82356127e081612710565b60006020828403121561284857600080fd5b8135610e9081612710565b60008083601f84011261286557600080fd5b50813567ffffffffffffffff81111561287d57600080fd5b6020830191508360208260051b850101111561289857600080fd5b9250929050565b600080600080604085870312156128b557600080fd5b843567ffffffffffffffff808211156128cd57600080fd5b6128d988838901612853565b909650945060208701359150808211156128f257600080fd5b506128ff87828801612853565b95989497509550505050565b60008060006060848603121561292057600080fd5b833561292b81612710565b95602085013595506040909401359392505050565b60006020828403121561295257600080fd5b5035919050565b6000806040838503121561296c57600080fd5b8235612977816126cc565b915060208301356127f0816126cc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156129e5576129e56129bc565b500190565b600082612a0757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2657612a266129bc565b500290565b600181815b80851115612a66578160001904821115612a4c57612a4c6129bc565b80851615612a5957918102915b93841c9390800290612a30565b509250929050565b600082612a7d57506001610aec565b81612a8a57506000610aec565b8160018114612aa05760028114612aaa57612ac6565b6001915050610aec565b60ff841115612abb57612abb6129bc565b50506001821b610aec565b5060208310610133831016604e8410600b8410161715612ae9575081810a610aec565b612af38383612a2b565b8060001904821115612b0757612b076129bc565b029392505050565b6000610e9060ff841683612a6e565b600082821015612b3057612b306129bc565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612b5f57612b5f6129bc565b5060010190565b600060208284031215612b7857600080fd5b8151610e9081612710565b80516001600160701b0381168114612b9a57600080fd5b919050565b600080600060608486031215612bb457600080fd5b612bbd84612b83565b9250612bcb60208501612b83565b9150604084015163ffffffff81168114612be457600080fd5b809150509250925092565b600060208284031215612c0157600080fd5b8151610e90816126cc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c5c5784516001600160a01b031683529383019391830191600101612c37565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c9257600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200810f3f8e897679cd42ebf17c02be9b60e572172e422e91523ffb7f47f70a23a64736f6c634300080b0033

Deployed Bytecode Sourcemap

13392:16315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26564:158;;;;;;;;;;;;;:::i;:::-;;15614:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15614:49:0;;;;;;;;27444:481;;;;;;;;;;-1:-1:-1;27444:481:0;;;;;:::i;:::-;;:::i;16780:71::-;;;;;;;;;;-1:-1:-1;16843:5:0;;;;;;;;;;;;-1:-1:-1;;;16843:5:0;;;;16780:71;;;;;;;:::i;17186:216::-;;;;;;;;;;-1:-1:-1;17186:216:0;;;;;:::i;:::-;;:::i;:::-;;;1878:14:1;;1871:22;1853:41;;1841:2;1826:18;17186:216:0;1713:187:1;26057:401:0;;;;;;;;;;-1:-1:-1;26057:401:0;;;;;:::i;:::-;;:::i;25643:406::-;;;;;;;;;;-1:-1:-1;25643:406:0;;;;;:::i;:::-;;:::i;28760:150::-;;;;;;;;;;-1:-1:-1;28760:150:0;;;;;:::i;:::-;;:::i;16528:88::-;;;;;;;;;;;;;:::i;26730:230::-;;;;;;;;;;-1:-1:-1;26730:230:0;;;;;:::i;:::-;;:::i;28260:182::-;;;;;;;;;;-1:-1:-1;28260:182:0;;;;;:::i;:::-;;:::i;19328:341::-;;;;;;;;;;-1:-1:-1;19328:341:0;;;;;:::i;:::-;;:::i;14679:86::-;;;;;;;;;;;;14723:42;14679:86;;;;;-1:-1:-1;;;;;3357:32:1;;;3339:51;;3327:2;3312:18;14679:86:0;3193:203:1;28450:138:0;;;;;;;;;;;;;:::i;16622:71::-;;;;;;;;;;-1:-1:-1;16622:71:0;;13727:1;3543:36:1;;3531:2;3516:18;16622:71:0;3401:184:1;17410:211:0;;;;;;;;;;-1:-1:-1;17410:211:0;;;;;:::i;:::-;;:::i;19064:92::-;;;;;;;;;;;;;:::i;28918:126::-;;;;;;;;;;-1:-1:-1;28918:126:0;;;;;:::i;:::-;;:::i;18434:122::-;;;;;;;;;;-1:-1:-1;18434:122:0;;;;;:::i;:::-;;:::i;15373:27::-;;;;;;;;;;;;;;;;21892:345;;;;;;;;;;-1:-1:-1;21892:345:0;;;;;:::i;:::-;;:::i;27182:119::-;;;;;;;;;;-1:-1:-1;27182:119:0;;;;;:::i;:::-;;:::i;18564:170::-;;;;;;;;;;-1:-1:-1;18564:170:0;;;;;:::i;:::-;;:::i;29049:569::-;;;;;;;;;;-1:-1:-1;29049:569:0;;;;;:::i;:::-;;:::i;15577:30::-;;;;;;;;;;-1:-1:-1;15577:30:0;;;;-1:-1:-1;;;15577:30:0;;;;;;14882:97;;;;;;;;;;;;14936:42;14882:97;;16934:105;;;;;;;;;;-1:-1:-1;16934:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17018:18:0;17000:7;17018:18;;;:9;:18;;;;;;;16934:105;12630:148;;;;;;;;;;;;;:::i;15487:36::-;;;;;;;;;;-1:-1:-1;15487:36:0;;;;-1:-1:-1;;;15487:36:0;;;;;;13809:54;;;;;;;;;;;;;;;;15453:27;;;;;;;;;;-1:-1:-1;15453:27:0;;;;;;;-1:-1:-1;;;;;15453:27:0;;;16857:71;;;;;;;;;;-1:-1:-1;16900:7:0;12054:6;-1:-1:-1;;;;;12054:6:0;16857:71;16528:88;13870:56;;;;;;;;;;;;;;;;16699:75;;;;;;;;;;-1:-1:-1;16764:7:0;;;;;;;;;;;;-1:-1:-1;;;16764:7:0;;;;16699:75;;17629:409;;;;;;;;;;-1:-1:-1;17629:409:0;;;;;:::i;:::-;;:::i;15303:29::-;;;;;;;;;;;;;;;19164:156;;;;;;;;;;-1:-1:-1;19164:156:0;;;;;:::i;:::-;;:::i;26972:202::-;;;;;;;;;;-1:-1:-1;26972:202:0;;;;;:::i;:::-;;:::i;15407:33::-;;;;;;;;;;-1:-1:-1;15407:33:0;;;;;;;;15341:25;;;;;;;;;;;;;;;;15530:38;;;;;;;;;;-1:-1:-1;15530:38:0;;;;-1:-1:-1;;;15530:38:0;;;;;;27933:319;;;;;;;;;;-1:-1:-1;27933:319:0;;;;;:::i;:::-;;:::i;28596:156::-;;;;;;;;;;-1:-1:-1;28596:156:0;;;;;:::i;:::-;;:::i;18746:306::-;;;;;;;;;;-1:-1:-1;18746:306:0;;;;;:::i;:::-;;:::i;17045:133::-;;;;;;;;;;-1:-1:-1;17045:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17147:19:0;;;17129:7;17147:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17045:133;21677:207;;;;;;;;;;-1:-1:-1;21677:207:0;;;;;:::i;:::-;;:::i;12933:244::-;;;;;;;;;;-1:-1:-1;12933:244:0;;;;;:::i;:::-;;:::i;27309:127::-;;;;;;;;;;-1:-1:-1;27309:127:0;;;;;:::i;:::-;;:::i;15670:49::-;;;;;;;;;;;;;;;;15072:34;;;;;;;;;;;;;;;26564:158;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;;;;;;;;;26621:10:::1;::::0;:15;26612:25:::1;;;::::0;::::1;;26661:12;26648:10;:25:::0;26699:15:::1;26684:12;:30:::0;26564:158::o;27444:481::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;27598:12:::1;:28:::0;;;27637:12:::1;:28:::0;;;27676:6:::1;:16:::0;;;27703:8:::1;:20:::0;;;27685:7;27745:29:::1;27652:13:::0;27613;27745:29:::1;:::i;:::-;:39;;;;:::i;:::-;27734:8;:50:::0;27795:14:::1;:32:::0;;;27858:18:::1;27875:1;27812:15:::0;27858:18:::1;:::i;:::-;27846:8;;:30;;27838:39;;;::::0;::::1;;27908:8;;27896;;:20;;27888:29;;;::::0;::::1;;27444:481:::0;;;;;:::o;17186:216::-;17290:10;17261:4;17278:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17278:32:0;;;;;;;;;;:41;;;17335:37;17261:4;;17278:32;;17335:37;;;;17313:6;160:25:1;;148:2;133:18;;14:177;17335:37:0;;;;;;;;-1:-1:-1;17390:4:0;17186:216;;;;;:::o;26057:401::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;26200:2:::1;26186:10;:16;;:31;;;;;26214:3;26206:4;:11;;26186:31;:69;;;;-1:-1:-1::0;26222:9:0;;;:32:::1;;;26243:11;;26235:4;:19;;26222:32;26186:91;;;;;26270:7;26259;:18;;26186:91;26178:128;;;::::0;-1:-1:-1;;;26178:128:0;;8692:2:1;26178:128:0::1;::::0;::::1;8674:21:1::0;8731:2;8711:18;;;8704:30;8770:26;8750:18;;;8743:54;8814:18;;26178:128:0::1;8490:348:1::0;26178:128:0::1;26317:11;:18:::0;;;;26346:14:::1;:24:::0;;;;26381:17:::1;:30:::0;26422:16:::1;:28:::0;;-1:-1:-1;;26422:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26057:401::o;25643:406::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;25794:3:::1;25787;25763:20;25752:8;;:31;;;;:::i;:::-;25751:39;;;;:::i;:::-;:46;;25743:76;;;::::0;-1:-1:-1;;;25743:76:0;;9218:2:1;25743:76:0::1;::::0;::::1;9200:21:1::0;9257:2;9237:18;;;9230:30;-1:-1:-1;;;9276:18:1;;;9269:47;9333:18;;25743:76:0::1;9016:341:1::0;25743:76:0::1;25862:3;25838:20;:27;;25830:74;;;::::0;-1:-1:-1;;;25830:74:0;;9564:2:1;25830:74:0::1;::::0;::::1;9546:21:1::0;9603:2;9583:18;;;9576:30;9642:34;9622:18;;;9615:62;-1:-1:-1;;;9693:18:1;;;9686:32;9735:19;;25830:74:0::1;9362:398:1::0;25830:74:0::1;25934:6;25923:7;:17;;25915:50;;;::::0;-1:-1:-1;;;25915:50:0;;9967:2:1;25915:50:0::1;::::0;::::1;9949:21:1::0;10006:2;9986:18;;;9979:30;-1:-1:-1;;;10025:18:1;;;10018:50;10085:18;;25915:50:0::1;9765:344:1::0;25915:50:0::1;25976:11;:34:::0;;;;26021:10:::1;:20:::0;25643:406::o;28760:150::-;28840:4;28896:6;28864:29;28884:8;28864:19;:29::i;:::-;:38;;28760:150;-1:-1:-1;;;28760:150:0:o;16528:88::-;16583:7;13786:15;13727:1;13786:2;:15;:::i;:::-;13769:33;;:13;:33;:::i;:::-;16594:19;;16528:88;:::o;26730:230::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;26836:1:::1;26824:9;:13;:28;;;;;26851:1;26841:7;:11;26824:28;:65;;;;-1:-1:-1::0;26888:1:0::1;26877:7:::0;26857:16:::1;:9:::0;26869:4:::1;26857:16;:::i;:::-;26856:28;;;;:::i;:::-;:33;;26824:65;26816:74;;;::::0;::::1;;26945:7:::0;26932:9;13786:15:::1;13727:1;13786:2;:15;:::i;:::-;13769:33;::::0;:13:::1;:33;:::i;:::-;26917:24;;;;:::i;:::-;26916:36;;;;:::i;:::-;26901:12;:51:::0;-1:-1:-1;;26730:230:0:o;28260:182::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;28357:15:::1;:25:::0;;;;28393:26:::1;:41:::0;28260:182::o;19328:341::-;-1:-1:-1;;;;;19448:19:0;;19428:4;19448:19;;;:11;:19;;;;;;;;19468:10;19448:31;;;;;;;;-1:-1:-1;;19448:52:0;19445:157;;-1:-1:-1;;;;;19550:19:0;;;;;;:11;:19;;;;;;;;19570:10;19550:31;;;;;;;;:40;;19584:6;;19550:40;:::i;:::-;-1:-1:-1;;;;;19516:19:0;;;;;;:11;:19;;;;;;;;19536:10;19516:31;;;;;;;:74;19445:157;19621:40;19635:6;19643:9;19654:6;19621:13;:40::i;:::-;19614:47;;19328:341;;;;;;:::o;28450:138::-;17018:9;:18;;;;13497:42;28503:7;17018:18;;;;;28503:7;;28546:33;;;:::i;:::-;13786:15;13727:1;13786:2;:15;:::i;:::-;13769:33;;:13;:33;:::i;:::-;28530:50;;;;:::i;17410:211::-;17524:10;17498:4;17545:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17545:32:0;;;;;;;;;;17498:4;;17515:76;;17536:7;;17545:45;;17580:10;;17545:45;:::i;:::-;17515:8;:76::i;:::-;-1:-1:-1;17609:4:0;17410:211;;;;:::o;19064:92::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;19123:18:::1;:25:::0;;-1:-1:-1;;;;19123:25:0::1;-1:-1:-1::0;;;19123:25:0::1;::::0;;19064:92::o;28918:126::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29004:21:0;;;::::1;;::::0;;;:14:::1;:21;::::0;;;;:32;;-1:-1:-1;;29004:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28918:126::o;18434:122::-;18489:4;18513:35;18521:7;-1:-1:-1;;18513:7:0;:35::i;21892:345::-;21967:7;22004:12;21990:10;;:26;21987:60;;;22043:1;22026:14;;:18;;;;:::i;:::-;22019:25;;;;21987:60;22061:7;22057:87;;;22077:12;:67;;22136:8;;22125;;:19;;;;:::i;:::-;22077:67;;;22119:3;22104:11;;22093:8;;:22;;;;:::i;:::-;22092:30;;;;:::i;22057:87::-;22162:12;:67;;22221:8;;22210;;:19;;;;:::i;:::-;22162:67;;;22204:3;22189:11;;22178:8;;:22;;;;:::i;:::-;22177:30;;;;:::i;27182:119::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27265:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27265:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27182:119::o;18564:170::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;18636:8:::1;18632:55;;;18668:18;::::0;-1:-1:-1;;;18668:18:0;::::1;;;18667:19;18659:28;;;::::0;::::1;;18698:17;:28:::0;;;::::1;;-1:-1:-1::0;;;18698:28:0::1;-1:-1:-1::0;;;;18698:28:0;;::::1;::::0;;;::::1;::::0;;18564:170::o;29049:569::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;29168:35;;::::1;29160:44;;;::::0;::::1;;29235:11;::::0;;-1:-1:-1;;;;29257:19:0;::::1;::::0;;;-1:-1:-1;;;29235:11:0;::::1;;;-1:-1:-1::0;29373:201:0::1;29393:21:::0;;::::1;29373:201;;;29445:14;:29;29460:10;;29471:1;29460:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29445:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29445:29:0;;::::1;;29444:30;29436:39;;;::::0;::::1;;29490:72;29504:10;29516;;29527:1;29516:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29545:15;13727:1;29545:2;:15;:::i;:::-;29531:7;;29539:1;29531:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;29490:13;:72::i;:::-;-1:-1:-1::0;29416:3:0;::::1;::::0;::::1;:::i;:::-;;;;29373:201;;;-1:-1:-1::0;29584:11:0::1;:26:::0;;;::::1;;-1:-1:-1::0;;;29584:26:0::1;-1:-1:-1::0;;;;29584:26:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;29049:569:0:o;12630:148::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;12737:1:::1;12721:6:::0;;12700:40:::1;::::0;-1:-1:-1;;;;;12721:6:0;;::::1;::::0;12700:40:::1;::::0;12737:1;;12700:40:::1;12768:1;12751:19:::0;;-1:-1:-1;;;;;;12751:19:0::1;::::0;;12630:148::o;17629:409::-;17778:10;17722:4;17766:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17766:32:0;;;;;;;;;;17817:35;;;;17809:85;;;;-1:-1:-1;;;17809:85:0;;12101:2:1;17809:85:0;;;12083:21:1;12140:2;12120:18;;;12113:30;12179:34;12159:18;;;12152:62;-1:-1:-1;;;12230:18:1;;;12223:35;12275:19;;17809:85:0;11899:401:1;17809:85:0;17930:65;17939:10;17951:7;17979:15;17960:16;:34;17930:8;:65::i;:::-;-1:-1:-1;18026:4:0;;17629:409;-1:-1:-1;;;17629:409:0:o;19164:156::-;19244:4;19268:44;19282:10;19294:9;19305:6;19268:13;:44::i;26972:202::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;27080:1:::1;27070:7;:11;:31;;;;;27096:5;27085:7;:16;;27070:31;27062:40;;;::::0;::::1;;27159:7:::0;27146:9;13786:15:::1;13727:1;13786:2;:15;:::i;:::-;13769:33;::::0;:13:::1;:33;:::i;:::-;27131:24;;;;:::i;:::-;27130:36;;;;:::i;:::-;27113:14;:53:::0;-1:-1:-1;;26972:202:0:o;27933:319::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;28077:1:::1;28062:12;:16;:39;;;;;28100:1;28082:15;:19;28062:39;28054:48;;;::::0;::::1;;28113:11;:22:::0;;-1:-1:-1;;;;28113:22:0::1;-1:-1:-1::0;;;28113:22:0;::::1;;;;::::0;;28175:15;13786::::1;13727:1;13786:2;:15;:::i;:::-;13769:33;::::0;:13:::1;:33;:::i;:::-;28160:30;;;;:::i;:::-;28146:11;:44:::0;28232:12;13786:15:::1;13727:1;13786:2;:15;:::i;:::-;13769:33;::::0;:13:::1;:33;:::i;:::-;28217:27;;;;:::i;:::-;28201:13;:43:::0;-1:-1:-1;;;27933:319:0:o;28596:156::-;28664:7;28722:22;:20;:22::i;:::-;-1:-1:-1;;;;;28713:4:0;17018:18;17000:7;17018:18;;;:9;:18;;;;;;28692:26;;:8;:26;:::i;:::-;28691:53;;;;:::i;18746:306::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;18859:9:::1;::::0;-1:-1:-1;;;;;18836:33:0;;::::1;18859:9;::::0;;::::1;;18836:33;18832:143;;18894:18;::::0;-1:-1:-1;;;18894:18:0;::::1;;;18893:19;18885:28;;;::::0;::::1;;18928:9;:35:::0;;-1:-1:-1;;;;;;18928:35:0::1;;-1:-1:-1::0;;;;;18928:35:0;::::1;;;::::0;;18832:143:::1;18989:5;18985:59;;;19009:9;::::0;:35:::1;::::0;-1:-1:-1;;;19009:35:0;;19033:10:::1;19009:35;::::0;::::1;3339:51:1::0;19009:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;19009:9:0::1;::::0;:23:::1;::::0;3312:18:1;;19009:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18985:59;18746:306:::0;;:::o;21677:207::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21756:22:0::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;21781:4:::1;-1:-1:-1::0;;21756:29:0;;::::1;::::0;::::1;::::0;;;21796:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;21843:15:::1;:26:::0;;;;;:33;;;;::::1;::::0;;::::1;::::0;;21677:207::o;12933:244::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13022:22:0;::::1;13014:73;;;::::0;-1:-1:-1;;;13014:73:0;;12507:2:1;13014:73:0::1;::::0;::::1;12489:21:1::0;12546:2;12526:18;;;12519:30;12585:34;12565:18;;;12558:62;-1:-1:-1;;;12636:18:1;;;12629:36;12682:19;;13014:73:0::1;12305:402:1::0;13014:73:0::1;13124:6;::::0;;13103:38:::1;::::0;-1:-1:-1;;;;;13103:38:0;;::::1;::::0;13124:6;::::1;::::0;13103:38:::1;::::0;::::1;13152:6;:17:::0;;-1:-1:-1;;;;;;13152:17:0::1;-1:-1:-1::0;;;;;13152:17:0;;;::::1;::::0;;;::::1;::::0;;12933:244::o;27309:127::-;12201:6;;-1:-1:-1;;;;;12201:6:0;6549:10;12201:22;12193:67;;;;-1:-1:-1;;;12193:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27396:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27396:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27309:127::o;19677:1178::-;-1:-1:-1;;;;;19794:17:0;;19769:4;19794:17;;;:9;:17;;;;;;:27;-1:-1:-1;19794:27:0;19786:60;;;;-1:-1:-1;;;19786:60:0;;12914:2:1;19786:60:0;;;12896:21:1;12953:2;12933:18;;;12926:30;-1:-1:-1;;;12972:18:1;;;12965:50;13032:18;;19786:60:0;12712:344:1;19786:60:0;19874:1;19865:6;:10;19857:46;;;;-1:-1:-1;;;19857:46:0;;13263:2:1;19857:46:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:25;13321:18;;;13314:53;13384:18;;19857:46:0;13061:347:1;19857:46:0;19919:6;;;;19916:63;;;19935:41;19950:6;19958:9;19969:6;19935:14;:41::i;:::-;19928:48;;;;19916:63;19991:28;20004:6;20012;19991:12;:28::i;:::-;-1:-1:-1;;;;;20045:25:0;;;;;;:14;:25;;;;;;;;20044:26;:47;;;;-1:-1:-1;;;;;;20074:17:0;;13497:42;20074:17;;20044:47;20040:148;;;-1:-1:-1;;;;;20113:26:0;;;;;;:15;:26;;;;;;;;20108:68;;20141:35;20158:9;20169:6;20141:16;:35::i;:::-;26533:10;;20200:118;;-1:-1:-1;;;;;20225:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;20255:29:0;;;;;;:18;:29;;;;;;;;20225:59;20217:98;;;;-1:-1:-1;;;20217:98:0;;13615:2:1;20217:98:0;;;13597:21:1;13654:2;13634:18;;;13627:30;13693:28;13673:18;;;13666:56;13739:18;;20217:98:0;13413:350:1;20217:98:0;-1:-1:-1;;;;;20330:17:0;;;;;;:9;:17;;;;;:27;;20351:6;;20330:17;:27;;20351:6;;20330:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21638:19:0;;20370:22;21638:19;;;:11;:19;;;;;;;;21637:20;20395:49;;;;-1:-1:-1;;;;;;21638:19:0;;21613:4;21638:19;;;:11;:19;;;;;;;;21637:20;20420:24;20395:95;;20484:6;20395:95;;;20447:34;20455:6;20463:9;20474:6;20447:7;:34::i;:::-;20370:120;;20514:25;20529:9;20514:14;:25::i;:::-;20511:66;;;20546:10;;20542:32;;20558:16;20567:6;20558:8;:16::i;:::-;-1:-1:-1;;;;;20597:20:0;;;;;;:9;:20;;;;;:38;;20621:14;;20597:20;:38;;20621:14;;20597:38;:::i;:::-;;;;-1:-1:-1;;26533:10:0;;:15;;20663:31;;;;-1:-1:-1;20677:17:0;;-1:-1:-1;;;20677:17:0;;;;20663:31;20660:104;;;20709:9;;:55;;-1:-1:-1;;;20709:55:0;;-1:-1:-1;;;;;14026:15:1;;;20709:55:0;;;14008:34:1;14078:15;;;14058:18;;;14051:43;14110:18;;;14103:34;;;20709:9:0;;;;;;;;:28;;13943:18:1;;20709:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20660:104;20799:9;-1:-1:-1;;;;;20782:43:0;20791:6;-1:-1:-1;;;;;20782:43:0;;20810:14;20782:43;;;;160:25:1;;148:2;133:18;;14:177;20782:43:0;;;;;;;;-1:-1:-1;20843:4:0;;19677:1178;-1:-1:-1;;;;19677:1178:0:o;18046:380::-;-1:-1:-1;;;;;18182:19:0;;18174:68;;;;-1:-1:-1;;;18174:68:0;;14600:2:1;18174:68:0;;;14582:21:1;14639:2;14619:18;;;14612:30;14678:34;14658:18;;;14651:62;-1:-1:-1;;;14729:18:1;;;14722:34;14773:19;;18174:68:0;14398:400:1;18174:68:0;-1:-1:-1;;;;;18261:21:0;;18253:68;;;;-1:-1:-1;;;18253:68:0;;15005:2:1;18253:68:0;;;14987:21:1;15044:2;15024:18;;;15017:30;15083:34;15063:18;;;15056:62;-1:-1:-1;;;15134:18:1;;;15127:32;15176:19;;18253:68:0;14803:398:1;18253:68:0;-1:-1:-1;;;;;18334:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18386:32;;160:25:1;;;18386:32:0;;133:18:1;18386:32:0;;;;;;;18046:380;;;:::o;20863:259::-;-1:-1:-1;;;;;20973:17:0;;20956:4;20973:17;;;:9;:17;;;;;:27;;20994:6;;20973:17;20956:4;;20973:27;;20994:6;;20973:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21011:20:0;;;;;;:9;:20;;;;;:30;;21035:6;;21011:20;:30;;21035:6;;21011:30;:::i;:::-;;;;;;;;21074:9;-1:-1:-1;;;;;21057:35:0;21066:6;-1:-1:-1;;;;;21057:35:0;;21085:6;21057:35;;;;160:25:1;;148:2;133:18;;14:177;21057:35:0;;;;;;;;-1:-1:-1;21110:4:0;20863:259;;;;;:::o;21377:166::-;21474:12;;21464:6;:22;;:49;;;-1:-1:-1;;;;;;21490:23:0;;;;;;:15;:23;;;;;;;;21464:49;21456:79;;;;-1:-1:-1;;;21456:79:0;;15408:2:1;21456:79:0;;;15390:21:1;15447:2;15427:18;;;15420:30;-1:-1:-1;;;15466:18:1;;;15459:47;15523:18;;21456:79:0;15206:341:1;21134:235:0;21242:14;;-1:-1:-1;;;;;21275:20:0;;21220:19;21275:20;;;:9;:20;;;;;;21242:14;;21275:29;;21298:6;;21275:29;:::i;:::-;:44;;21267:94;;;;-1:-1:-1;;;21267:94:0;;15754:2:1;21267:94:0;;;15736:21:1;15793:2;15773:18;;;15766:30;15832:34;15812:18;;;15805:62;-1:-1:-1;;;15883:18:1;;;15876:35;15928:19;;21267:94:0;15552:401:1;21267:94:0;21209:160;21134:235;;:::o;22245:1288::-;-1:-1:-1;;;;;22386:25:0;;22331:7;22386:25;;;:14;:25;;;;;;22331:7;;22386:25;;:44;;;;;22429:1;22415:11;;:15;22386:44;22383:673;;;22448:16;22466;22496:4;-1:-1:-1;;;;;22487:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22573:16:0;;22447:68;;-1:-1:-1;22447:68:0;-1:-1:-1;22530:22:0;;22615:6;;22573:16;;:38;;22603:8;22573:38;;;22592:8;22573:38;-1:-1:-1;;;;;22572:49:0;;;;;:::i;:::-;22555:13;:6;22564:4;22555:13;:::i;:::-;:67;;;;:::i;:::-;22692:14;;-1:-1:-1;;;;;22673:16:0;;;;;;:8;:16;;;;;;22530:92;;-1:-1:-1;22673:33:0;;;:::i;:::-;22655:15;:51;22651:171;;;-1:-1:-1;;;;;22727:16:0;;;;;;:8;:16;;;;;;;;22746:15;22727:34;;22780:14;:22;;;;;:26;22651:171;-1:-1:-1;;;;;22850:22:0;;;;;;:14;:22;;;;;:40;;22876:14;;22850:22;:40;;22876:14;;22850:40;:::i;:::-;;;;-1:-1:-1;;22949:17:0;;-1:-1:-1;;;;;22923:22:0;;;;;;:14;:22;;;;;;:43;22919:126;;23026:3;23011:11;;23000:8;;:22;;;;:::i;:::-;22999:30;;;;:::i;:::-;22987:42;;22919:126;22432:624;;;22383:673;23072:14;23068:186;;23240:14;;-1:-1:-1;;;;;23135:25:0;;;;;;;:14;:25;;;;;;;23163:22;;;;;;;;23123:113;;23135:25;;;;;23163:22;23162:23;:73;;;;-1:-1:-1;23207:10:0;;-1:-1:-1;;;;;23189:15:0;;;;;;:7;:15;;;;;;23220;;23189:28;;;:::i;:::-;:46;23123:11;:113::i;:::-;23114:122;;:6;:122;:::i;:::-;23113:141;;;;:::i;:::-;23101:153;;23068:186;-1:-1:-1;;;;;23279:22:0;;;;;;:14;:22;;;;;;;;:49;;;;-1:-1:-1;;;;;;23305:18:0;;;;;;:7;:18;;;;;;:23;23279:49;23275:104;;;-1:-1:-1;;;;;23343:18:0;;;;;;:7;:18;;;;;23364:15;23343:36;;23275:104;23410:4;23392:24;;;;:9;:24;;;;;:37;;23420:9;;23392:24;:37;;23420:9;;23392:37;:::i;:::-;;;;-1:-1:-1;;23445:42:0;;160:25:1;;;23470:4:0;;-1:-1:-1;;;;;23445:42:0;;;;;148:2:1;133:18;23445:42:0;;;;;;;23507:18;23516:9;23507:6;:18;:::i;:::-;23500:25;22245:1288;-1:-1:-1;;;;;22245:1288:0:o;23541:321::-;23647:10;23607:4;23632:26;;;:14;:26;;;;;;;;23631:27;:64;;;;-1:-1:-1;23684:10:0;23672:23;;;;:11;:23;;;;;;;;23671:24;23631:64;:84;;;;-1:-1:-1;23709:6:0;;;;23708:7;23631:84;:108;;;;-1:-1:-1;23728:11:0;;-1:-1:-1;;;23728:11:0;;;;23631:108;:146;;;;-1:-1:-1;;;;;;23752:25:0;;;;;;:14;:25;;;;;;;;23631:146;:198;;;;-1:-1:-1;23818:11:0;;23808:4;23790:24;;;;:9;:24;;;;;;:39;;23631:198;:223;;;;;23853:1;23842:8;;:12;23624:230;23541:321;-1:-1:-1;;23541:321:0:o;23870:1765::-;15766:6;:13;;-1:-1:-1;;15766:13:0;15775:4;15766:13;;;23965::::1;::::0;15766:6;;23956:22;::::1;:47;;23990:13;;23956:47;;;23981:6;23956:47;24036:4;24018:24;::::0;;;:9:::1;:24;::::0;;;;;23933:70;;-1:-1:-1;24018:39:0;-1:-1:-1;24014:84:0::1;;;-1:-1:-1::0;24092:4:0::1;24074:24;::::0;;;:9:::1;:24;::::0;;;;;24014:84:::1;24109:27;24139:60;24155:15;;24172:26;;24139:15;:60::i;:::-;:79;;24206:12;;24139:79;;;24202:1;24139:79;24109:109;;24229:23;24307:1;24295:8;;24272:19;24257:12;:34;;;;:::i;:::-;24256:47;;;;:::i;:::-;24255:53;;;;:::i;:::-;24229:79:::0;-1:-1:-1;24319:31:0::1;24229:79:::0;24319:31;::::1;:::i;:::-;24387:16;::::0;;24401:1:::1;24387:16:::0;;;;;::::1;::::0;;24319:31;;-1:-1:-1;24363:21:0::1;::::0;24387:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24387:16:0::1;24363:40;;24432:4;24414;24419:1;24414:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24414:23:0::1;;;-1:-1:-1::0;;;;;24414:23:0::1;;;::::0;::::1;24458:6;-1:-1:-1::0;;;;;24458:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24448:4;24453:1;24448:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24448:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24492:188:::1;::::0;-1:-1:-1;;;24492:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;24564:12;;24591:1:::1;::::0;24607:4;;24634::::1;::::0;24654:15:::1;::::0;24492:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24719:21:0::1;::::0;-1:-1:-1;24693:23:0::1;::::0;-1:-1:-1;24784:23:0::1;::::0;-1:-1:-1;24806:1:0::1;24784:19:::0;:23:::1;:::i;:::-;24773:8;;:34;;;;:::i;:::-;24751:56:::0;-1:-1:-1;24820:23:0::1;24902:1;24751:56:::0;24847:37:::1;24865:19:::0;24847:15;:37:::1;:::i;:::-;24846:53;;;;:::i;:::-;:57;;;;:::i;:::-;24820:83;;24914:23;24975:11;24959:12;;24941:15;:30;;;;:::i;:::-;24940:46;;;;:::i;:::-;24914:72:::0;-1:-1:-1;24997:17:0::1;25036:33;24914:72:::0;25036:15;:33:::1;:::i;:::-;25017:53;::::0;:15;:53:::1;:::i;:::-;24997:73:::0;-1:-1:-1;25086:19:0;;25083:353:::1;;25122:237;::::0;-1:-1:-1;;;25122:237:0;;25195:4:::1;25122:237;::::0;::::1;18320:34:1::0;18370:18;;;18363:34;;;25253:1:0::1;18413:18:1::0;;;18406:34;;;18456:18;;;18449:34;14723:42:0::1;18499:19:1::0;;;18492:44;25329:15:0::1;18552:19:1::0;;;18545:35;25122:6:0::1;-1:-1:-1::0;;;;;25122:22:0::1;::::0;::::1;::::0;25152:15;;18254:19:1;;25122:237:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25379:45:0::1;::::0;;19076:25:1;;;19132:2;19117:18;;19110:34;;;25379:45:0::1;::::0;-1:-1:-1;19049:18:1;25379:45:0::1;;;;;;;25083:353;25460:19:::0;;25456:81:::1;;25494:43;::::0;14832:42:::1;::::0;25494:43;::::1;;;::::0;25521:15;;25494:43:::1;::::0;;;25521:15;14832:42;25494:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25456:81;25566:13:::0;;25562:63:::1;;25594:31;::::0;14936:42:::1;::::0;25594:31;::::1;;;::::0;25615:9;;25594:31:::1;::::0;;;25615:9;14936:42;25594:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25562:63;-1:-1:-1::0;;15784:6:0;:14;;-1:-1:-1;;15784:14:0;;;-1:-1:-1;;;;;;;;23870:1765:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:597::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;1093:6;1090:1;1087:13;1084:91;;;1163:1;1158:2;1149:6;1138:9;1134:22;1130:31;1123:42;1084:91;-1:-1:-1;1236:2:1;1215:15;-1:-1:-1;;1211:29:1;1196:45;;;;1243:2;1192:54;;655:597;-1:-1:-1;;;655:597:1:o;1257:131::-;-1:-1:-1;;;;;1332:31:1;;1322:42;;1312:70;;1378:1;1375;1368:12;1312:70;1257:131;:::o;1393:315::-;1461:6;1469;1522:2;1510:9;1501:7;1497:23;1493:32;1490:52;;;1538:1;1535;1528:12;1490:52;1577:9;1564:23;1596:31;1621:5;1596:31;:::i;:::-;1646:5;1698:2;1683:18;;;;1670:32;;-1:-1:-1;;;1393:315:1:o;1905:118::-;1991:5;1984:13;1977:21;1970:5;1967:32;1957:60;;2013:1;2010;2003:12;2028:446;2111:6;2119;2127;2135;2188:3;2176:9;2167:7;2163:23;2159:33;2156:53;;;2205:1;2202;2195:12;2156:53;2241:9;2228:23;2218:33;;2298:2;2287:9;2283:18;2270:32;2260:42;;2349:2;2338:9;2334:18;2321:32;2311:42;;2403:2;2392:9;2388:18;2375:32;2416:28;2438:5;2416:28;:::i;:::-;2028:446;;;;-1:-1:-1;2028:446:1;;-1:-1:-1;;2028:446:1:o;2479:248::-;2547:6;2555;2608:2;2596:9;2587:7;2583:23;2579:32;2576:52;;;2624:1;2621;2614:12;2576:52;-1:-1:-1;;2647:23:1;;;2717:2;2702:18;;;2689:32;;-1:-1:-1;2479:248:1:o;2732:456::-;2809:6;2817;2825;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2933:9;2920:23;2952:31;2977:5;2952:31;:::i;:::-;3002:5;-1:-1:-1;3059:2:1;3044:18;;3031:32;3072:33;3031:32;3072:33;:::i;:::-;2732:456;;3124:7;;-1:-1:-1;;;3178:2:1;3163:18;;;;3150:32;;2732:456::o;3590:382::-;3655:6;3663;3716:2;3704:9;3695:7;3691:23;3687:32;3684:52;;;3732:1;3729;3722:12;3684:52;3771:9;3758:23;3790:31;3815:5;3790:31;:::i;:::-;3840:5;-1:-1:-1;3897:2:1;3882:18;;3869:32;3910:30;3869:32;3910:30;:::i;:::-;3959:7;3949:17;;;3590:382;;;;;:::o;3977:247::-;4036:6;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4144:9;4131:23;4163:31;4188:5;4163:31;:::i;4229:376::-;4291:6;4299;4352:2;4340:9;4331:7;4327:23;4323:32;4320:52;;;4368:1;4365;4358:12;4320:52;4407:9;4394:23;4426:28;4448:5;4426:28;:::i;4610:241::-;4666:6;4719:2;4707:9;4698:7;4694:23;4690:32;4687:52;;;4735:1;4732;4725:12;4687:52;4774:9;4761:23;4793:28;4815:5;4793:28;:::i;4856:367::-;4919:8;4929:6;4983:3;4976:4;4968:6;4964:17;4960:27;4950:55;;5001:1;4998;4991:12;4950:55;-1:-1:-1;5024:20:1;;5067:18;5056:30;;5053:50;;;5099:1;5096;5089:12;5053:50;5136:4;5128:6;5124:17;5112:29;;5196:3;5189:4;5179:6;5176:1;5172:14;5164:6;5160:27;5156:38;5153:47;5150:67;;;5213:1;5210;5203:12;5150:67;4856:367;;;;;:::o;5228:773::-;5350:6;5358;5366;5374;5427:2;5415:9;5406:7;5402:23;5398:32;5395:52;;;5443:1;5440;5433:12;5395:52;5483:9;5470:23;5512:18;5553:2;5545:6;5542:14;5539:34;;;5569:1;5566;5559:12;5539:34;5608:70;5670:7;5661:6;5650:9;5646:22;5608:70;:::i;:::-;5697:8;;-1:-1:-1;5582:96:1;-1:-1:-1;5785:2:1;5770:18;;5757:32;;-1:-1:-1;5801:16:1;;;5798:36;;;5830:1;5827;5820:12;5798:36;;5869:72;5933:7;5922:8;5911:9;5907:24;5869:72;:::i;:::-;5228:773;;;;-1:-1:-1;5960:8:1;-1:-1:-1;;;;5228:773:1:o;6456:377::-;6530:6;6538;6546;6599:2;6587:9;6578:7;6574:23;6570:32;6567:52;;;6615:1;6612;6605:12;6567:52;6654:9;6641:23;6673:28;6695:5;6673:28;:::i;:::-;6720:5;6772:2;6757:18;;6744:32;;-1:-1:-1;6823:2:1;6808:18;;;6795:32;;6456:377;-1:-1:-1;;;6456:377:1:o;6838:180::-;6897:6;6950:2;6938:9;6929:7;6925:23;6921:32;6918:52;;;6966:1;6963;6956:12;6918:52;-1:-1:-1;6989:23:1;;6838:180;-1:-1:-1;6838:180:1:o;7023:388::-;7091:6;7099;7152:2;7140:9;7131:7;7127:23;7123:32;7120:52;;;7168:1;7165;7158:12;7120:52;7207:9;7194:23;7226:31;7251:5;7226:31;:::i;:::-;7276:5;-1:-1:-1;7333:2:1;7318:18;;7305:32;7346:33;7305:32;7346:33;:::i;7642:356::-;7844:2;7826:21;;;7863:18;;;7856:30;7922:34;7917:2;7902:18;;7895:62;7989:2;7974:18;;7642:356::o;8003:127::-;8064:10;8059:3;8055:20;8052:1;8045:31;8095:4;8092:1;8085:15;8119:4;8116:1;8109:15;8135:128;8175:3;8206:1;8202:6;8199:1;8196:13;8193:39;;;8212:18;;:::i;:::-;-1:-1:-1;8248:9:1;;8135:128::o;8268:217::-;8308:1;8334;8324:132;;8378:10;8373:3;8369:20;8366:1;8359:31;8413:4;8410:1;8403:15;8441:4;8438:1;8431:15;8324:132;-1:-1:-1;8470:9:1;;8268:217::o;8843:168::-;8883:7;8949:1;8945;8941:6;8937:14;8934:1;8931:21;8926:1;8919:9;8912:17;8908:45;8905:71;;;8956:18;;:::i;:::-;-1:-1:-1;8996:9:1;;8843:168::o;10114:422::-;10203:1;10246:5;10203:1;10260:270;10281:7;10271:8;10268:21;10260:270;;;10340:4;10336:1;10332:6;10328:17;10322:4;10319:27;10316:53;;;10349:18;;:::i;:::-;10399:7;10389:8;10385:22;10382:55;;;10419:16;;;;10382:55;10498:22;;;;10458:15;;;;10260:270;;;10264:3;10114:422;;;;;:::o;10541:806::-;10590:5;10620:8;10610:80;;-1:-1:-1;10661:1:1;10675:5;;10610:80;10709:4;10699:76;;-1:-1:-1;10746:1:1;10760:5;;10699:76;10791:4;10809:1;10804:59;;;;10877:1;10872:130;;;;10784:218;;10804:59;10834:1;10825:10;;10848:5;;;10872:130;10909:3;10899:8;10896:17;10893:43;;;10916:18;;:::i;:::-;-1:-1:-1;;10972:1:1;10958:16;;10987:5;;10784:218;;11086:2;11076:8;11073:16;11067:3;11061:4;11058:13;11054:36;11048:2;11038:8;11035:16;11030:2;11024:4;11021:12;11017:35;11014:77;11011:159;;;-1:-1:-1;11123:19:1;;;11155:5;;11011:159;11202:34;11227:8;11221:4;11202:34;:::i;:::-;11272:6;11268:1;11264:6;11260:19;11251:7;11248:32;11245:58;;;11283:18;;:::i;:::-;11321:20;;10541:806;-1:-1:-1;;;10541:806:1:o;11352:140::-;11410:5;11439:47;11480:4;11470:8;11466:19;11460:4;11439:47;:::i;11497:125::-;11537:4;11565:1;11562;11559:8;11556:34;;;11570:18;;:::i;:::-;-1:-1:-1;11607:9:1;;11497:125::o;11627:127::-;11688:10;11683:3;11679:20;11676:1;11669:31;11719:4;11716:1;11709:15;11743:4;11740:1;11733:15;11759:135;11798:3;-1:-1:-1;;11819:17:1;;11816:43;;;11839:18;;:::i;:::-;-1:-1:-1;11886:1:1;11875:13;;11759:135::o;14148:245::-;14215:6;14268:2;14256:9;14247:7;14243:23;14239:32;14236:52;;;14284:1;14281;14274:12;14236:52;14316:9;14310:16;14335:28;14357:5;14335:28;:::i;15958:188::-;16037:13;;-1:-1:-1;;;;;16079:42:1;;16069:53;;16059:81;;16136:1;16133;16126:12;16059:81;15958:188;;;:::o;16151:450::-;16238:6;16246;16254;16307:2;16295:9;16286:7;16282:23;16278:32;16275:52;;;16323:1;16320;16313:12;16275:52;16346:40;16376:9;16346:40;:::i;:::-;16336:50;;16405:49;16450:2;16439:9;16435:18;16405:49;:::i;:::-;16395:59;;16497:2;16486:9;16482:18;16476:25;16541:10;16534:5;16530:22;16523:5;16520:33;16510:61;;16567:1;16564;16557:12;16510:61;16590:5;16580:15;;;16151:450;;;;;:::o;16738:251::-;16808:6;16861:2;16849:9;16840:7;16836:23;16832:32;16829:52;;;16877:1;16874;16867:12;16829:52;16909:9;16903:16;16928:31;16953:5;16928:31;:::i;16994:980::-;17256:4;17304:3;17293:9;17289:19;17335:6;17324:9;17317:25;17361:2;17399:6;17394:2;17383:9;17379:18;17372:34;17442:3;17437:2;17426:9;17422:18;17415:31;17466:6;17501;17495:13;17532:6;17524;17517:22;17570:3;17559:9;17555:19;17548:26;;17609:2;17601:6;17597:15;17583:29;;17630:1;17640:195;17654:6;17651:1;17648:13;17640:195;;;17719:13;;-1:-1:-1;;;;;17715:39:1;17703:52;;17810:15;;;;17775:12;;;;17751:1;17669:9;17640:195;;;-1:-1:-1;;;;;;;17891:32:1;;;;17886:2;17871:18;;17864:60;-1:-1:-1;;;17955:3:1;17940:19;17933:35;17852:3;16994:980;-1:-1:-1;;;16994:980:1:o;18591:306::-;18679:6;18687;18695;18748:2;18736:9;18727:7;18723:23;18719:32;18716:52;;;18764:1;18761;18754:12;18716:52;18793:9;18787:16;18777:26;;18843:2;18832:9;18828:18;18822:25;18812:35;;18887:2;18876:9;18872:18;18866:25;18856:35;;18591:306;;;;;:::o

Swarm Source

ipfs://0810f3f8e897679cd42ebf17c02be9b60e572172e422e91523ffb7f47f70a23a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Shikage ($SHKG) is an ERC20 token that is aiming to bring SAFU back to ETH by creating an anti-rug liquidity Pool locker to ever exist in the crypto space.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.