ETH Price: $3,488.21 (-0.08%)
Gas: 3.38 Gwei

Token

God of Slot (SHIBZEUS)
 

Overview

Max Total Supply

1,000,000,000,000 SHIBZEUS

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
efficient0.eth
Balance
9,799,999,999.02 SHIBZEUS

Value
$0.00
0xE31C0ffe7Ab412588B96f31317B8A8FC0161e5a3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ShibZeusToken

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/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);
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
     
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
 
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * 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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
     
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

/**
 * @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.
 */
abstract 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 () {
        _owner = 0x56468d1E8e6969e66632abE0a0A2f73C7F87996C;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    address private _RndWalletAddress = 0x0FA0aDb63f909eDFC8Ef73751b949Ec36BE40979;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "God of Slot";
    string private _symbol = "SHIBZEUS";
    uint8 private _decimals = 9;

    struct BuyFee {
        uint16 tax;
        uint16 rnd;
    }

    struct SellFee {
        uint16 tax;
        uint16 rnd;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint16 private _taxFee;
    uint16 private _rndFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable pair;

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = (_tTotal * 1000) / 100000; 
    uint256 public _maxWalletToken = ( _tTotal * 1000 ) / 100000; 

    constructor () {
        _rOwned[owner()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
			//testnet: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
			//mainnet: 0x10ED43C718714eb63d5aA57B78B54704E256024E
        );
        // Create a uniswap pair for this new token
        pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        buyFee.tax = 0;
        buyFee.rnd = 2;

        sellFee.tax = 0;
        sellFee.rnd = 5;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }
    
    

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    
    event SellFeeUpdated(uint256 oldSellTax, uint256 oldSellRnd, uint256 SellTax, uint256 SellRnd);

    function setSellFee(uint16 tax,uint16 rnd) external onlyOwner {
	
		require(tax + rnd <= 100, "SellFee exceed 100");	
		emit SellFeeUpdated(sellFee.tax, sellFee.rnd, tax, rnd);		
	
        sellFee.tax = tax;
        sellFee.rnd = rnd;
    }

	event BuyFeeUpdated(uint256 oldBuyTax, uint256 oldBuyrnd, uint256 BuyTax, uint256 Buyrnd);

    function setBuyFee(uint16 tax,uint16 rnd) external onlyOwner {
	
		require(tax + rnd <= 100, "BuyFee exceed 100");	
		emit BuyFeeUpdated(buyFee.tax, buyFee.rnd, tax, rnd);	
	
        buyFee.tax = tax;
        buyFee.rnd = rnd;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner {
        require(maxBuyTxPercent > 0, "Transfer amount must be greater than zero");
        _maxBuyTxAmount = _tTotal.mul(maxBuyTxPercent).div(100000);
    }

    // Setting the max wallet in Percentages
    // Note 1% equals 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _tTotal.mul(maxWallPercent).div(100000);
    }

    // Check for maxTX
    function checkTxLimit( uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner() && recipient != pair){
            if(!isSell){
              require(amount <= _maxBuyTxAmount, "TX Limit Exceeded");
            } 
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (_isExcludedFromFee[sender] && sender != owner() && recipient != owner() && recipient != pair && recipient != _RndWalletAddress){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }


     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

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


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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    
    function _takeRnd(uint256 tRnd) private {
        uint256 currentRate =  _getRate();
        uint256 rRnd = tRnd.mul(currentRate);
        _rOwned[_RndWalletAddress] = _rOwned[_RndWalletAddress].add(rRnd);
        if(_isExcluded[_RndWalletAddress])
            _tOwned[_RndWalletAddress] = _tOwned[_RndWalletAddress].add(tRnd);
    }
    
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateRndFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_rndFee).div(
            10**2
        );
    }

     function removeAllFee() private {
        _taxFee = 0;
        _rndFee = 0;
    }

    function setBuy() private {
        _taxFee = buyFee.tax;
        _rndFee = buyFee.rnd;
    }

    function setSell() private {
        _taxFee = sellFee.tax;
        _rndFee = sellFee.rnd;
    }
        
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        // Check if buying or selling
        bool isSell = to == pair; 


        checkMaxWallet(from, to, amount);

        checkTxLimit( amount, to, isSell);
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(takeFee){
            removeAllFee();
            if (sender == pair) {
                setBuy();
            }
            if (recipient == pair) {
                setSell();
            }

            //take fee for inter-wallet transfer 
            if ((sender != pair) && (recipient != pair)) {
               setSell();
            }
        }
        
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        removeAllFee();
    }

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

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

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

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



}

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":"oldBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldBuyrnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"BuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"Buyrnd","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldSellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldSellRnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"SellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"SellRnd","type":"uint256"}],"name":"SellFeeUpdated","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":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"rnd","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"rnd","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"rnd","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"rnd","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600780546001600160a01b031916730fa0adb63f909edfc8ef73751b949ec36be40979179055683635c9adc5dea0000060088190556200004790600019620004ce565b6200005590600019620004fb565b60095560408051808201909152600b8082526a11dbd9081bd98814db1bdd60aa1b60209092019182526200008a918162000412565b5060408051808201909152600880825267534849425a45555360c01b6020909201918252620000bc91600c9162000412565b50600d805460ff19166009179055600854620186a090620000e0906103e862000515565b620000ec919062000537565b601155620186a06008546103e862000105919062000515565b62000111919062000537565b6012553480156200012157600080fd5b50600080546001600160a01b0319167356468d1e8e6969e66632abe0a0a2f73c7f87996c90811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600954600160006200018f6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023191906200054e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a591906200054e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031991906200054e565b6001600160a01b0390811660a0528116608052600e805463ffffffff199081166202000017909155600f805490911662050000179055600160046000620003686000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003bb6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200040391815260200190565b60405180910390a350620005bc565b828054620004209062000580565b90600052602060002090601f0160209004810192826200044457600085556200048f565b82601f106200045f57805160ff19168380011785556200048f565b828001600101855582156200048f579182015b828111156200048f57825182559160200191906001019062000472565b506200049d929150620004a1565b5090565b5b808211156200049d5760008155600101620004a2565b634e487b7160e01b600052601260045260246000fd5b600082620004e057620004e0620004b8565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005105762000510620004e5565b500390565b6000816000190483118215151615620005325762000532620004e5565b500290565b600082620005495762000549620004b8565b500490565b6000602082840312156200056157600080fd5b81516001600160a01b03811681146200057957600080fd5b9392505050565b600181811c908216806200059557607f821691505b602082108103620005b657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051611f9e62000613600039600081816104f501528181610fe8015281816111ce015281816112d301528181611372015281816113dc0152818161141d015261145a015260006102340152611f9e6000f3fe6080604052600436106101bb5760003560e01c8063715018a6116100ec578063a457c2d71161008a578063dd62ed3e11610064578063dd62ed3e14610537578063ea2f0b371461057d578063ec2a520a1461059d578063f2fde38b146105bd57600080fd5b8063a457c2d7146104c3578063a8aa1b31146104e3578063a9059cbb1461051757600080fd5b80637affa29b116100c65780637affa29b1461045057806382bf293c146104705780638da5cb5b1461049057806395d89b41146104ae57600080fd5b8063715018a61461040557806378109e541461041a5780637afad2491461043057600080fd5b80633347732711610159578063437823ec11610133578063437823ec1461036757806347062402146103875780635342acb4146103ac57806370a08231146103e557600080fd5b8063334773271461030f57806339509351146103255780633bd5d1731461034557600080fd5b806318160ddd1161019557806318160ddd1461026e57806323b872dd1461028d5780632b14ca56146102ad578063313ce567146102ed57600080fd5b806306fdde03146101c7578063095ea7b3146101f25780631694505e1461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6105dd565b6040516101e99190611c0e565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611c7f565b61066f565b60405190151581526020016101e9565b34801561022e57600080fd5b506102567f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e9565b34801561027a57600080fd5b506008545b6040519081526020016101e9565b34801561029957600080fd5b506102126102a8366004611ca9565b610685565b3480156102b957600080fd5b50600f546102d29061ffff808216916201000090041682565b6040805161ffff9384168152929091166020830152016101e9565b3480156102f957600080fd5b50600d5460405160ff90911681526020016101e9565b34801561031b57600080fd5b5061027f60115481565b34801561033157600080fd5b50610212610340366004611c7f565b6106ee565b34801561035157600080fd5b50610365610360366004611ce5565b610724565b005b34801561037357600080fd5b50610365610382366004611cfe565b610813565b34801561039357600080fd5b50600e546102d29061ffff808216916201000090041682565b3480156103b857600080fd5b506102126103c7366004611cfe565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156103f157600080fd5b5061027f610400366004611cfe565b610861565b34801561041157600080fd5b506103656108c6565b34801561042657600080fd5b5061027f60125481565b34801561043c57600080fd5b5061036561044b366004611d2b565b61093a565b34801561045c57600080fd5b5061036561046b366004611ce5565b610a35565b34801561047c57600080fd5b5061036561048b366004611ce5565b610aa7565b34801561049c57600080fd5b506000546001600160a01b0316610256565b3480156104ba57600080fd5b506101dc610af3565b3480156104cf57600080fd5b506102126104de366004611c7f565b610b02565b3480156104ef57600080fd5b506102567f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b50610212610532366004611c7f565b610b51565b34801561054357600080fd5b5061027f610552366004611d5e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561058957600080fd5b50610365610598366004611cfe565b610b5e565b3480156105a957600080fd5b506103656105b8366004611d2b565b610ba9565b3480156105c957600080fd5b506103656105d8366004611cfe565b610ca5565b6060600b80546105ec90611d88565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611d88565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b600061067c338484610d8f565b50600192915050565b6000610692848484610eb3565b6106e484336106df85604051806060016040528060288152602001611f1c602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611046565b610d8f565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161067c9185906106df9086611072565b3360008181526005602052604090205460ff161561079e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b60006107a983611085565b505050506001600160a01b0384166000908152600160205260409020549192506107d5919050826110d4565b6001600160a01b0383166000908152600160205260409020556009546107fb90826110d4565b600955600a5461080b9084611072565b600a55505050565b6000546001600160a01b0316331461083d5760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b03811660009081526005602052604081205460ff161561089e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108c0906110e0565b92915050565b6000546001600160a01b031633146108f05760405162461bcd60e51b815260040161079590611dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109645760405162461bcd60e51b815260040161079590611dc2565b60646109708284611e0d565b61ffff1611156109b65760405162461bcd60e51b81526020600482015260116024820152700427579466565206578636565642031303607c1b6044820152606401610795565b600e546040805161ffff80841682526201000090930483166020820152848316818301529183166060830152517f3d839c4d8187eded7cfbdfb38e8c68ae748d7c674400c8c3b8c837ba2933d1ac9181900360800190a1600e805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161079590611dc2565b60008111610a7f5760405162461bcd60e51b815260040161079590611e33565b610aa1620186a0610a9b8360085461115d90919063ffffffff16565b90611169565b60115550565b6000546001600160a01b03163314610ad15760405162461bcd60e51b815260040161079590611dc2565b610aed620186a0610a9b8360085461115d90919063ffffffff16565b60125550565b6060600c80546105ec90611d88565b600061067c33846106df85604051806060016040528060258152602001611f44602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611046565b600061067c338484610eb3565b6000546001600160a01b03163314610b885760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260040161079590611dc2565b6064610bdf8284611e0d565b61ffff161115610c265760405162461bcd60e51b8152602060048201526012602482015271053656c6c46656520657863656564203130360741b6044820152606401610795565b600f546040805161ffff80841682526201000090930483166020820152848316818301529183166060830152517f5453929bc359b94bdd2542a6d8391ca15fe386d74f044db5277328a36de3c6509181900360800190a1600f805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b038116610d345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610df15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b6001600160a01b038216610e525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610795565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610795565b6001600160a01b038216610f795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610795565b60008111610f995760405162461bcd60e51b815260040161079590611e33565b6001600160a01b03831660009081526004602052604090205460019060ff1680610fdb57506001600160a01b03831660009081526004602052604090205460ff165b15610fe4575060005b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316149050611028858585611175565b6110338385836112b8565b61103f85858585611358565b5050505050565b6000818484111561106a5760405162461bcd60e51b81526004016107959190611c0e565b505050900390565b600061107e8284611e7c565b9392505050565b600080600080600080600080600061109c8a611602565b92509250925060008060006110ba8d86866110b5611644565b611667565b919f909e50909c50959a5093985091965092945050505050565b600061107e8284611e94565b60006009548211156111475760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610795565b6000611151611644565b905061107e8382611169565b600061107e8284611eab565b600061107e8284611eca565b6001600160a01b03831660009081526004602052604090205460ff1680156111ab57506000546001600160a01b03848116911614155b80156111c557506000546001600160a01b03838116911614155b801561120357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561121d57506007546001600160a01b03838116911614155b156112b357600061122d83610861565b60125490915061123d8383611e7c565b11156112b15760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610795565b505b505050565b6000546001600160a01b0383811691161480159061130857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156112b357806112b3576011548311156112b35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610795565b801561149c576113706010805463ffffffff19169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036113da576113da600e54601080546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361141b5761141b6116b7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561148f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561149c5761149c6116b7565b6001600160a01b03841660009081526005602052604090205460ff1680156114dd57506001600160a01b03831660009081526005602052604090205460ff16155b156114f2576114ed8484846116e5565b6115f0565b6001600160a01b03841660009081526005602052604090205460ff1615801561153357506001600160a01b03831660009081526005602052604090205460ff165b15611543576114ed84848461180b565b6001600160a01b03841660009081526005602052604090205460ff1615801561158557506001600160a01b03831660009081526005602052604090205460ff16155b15611595576114ed8484846118b4565b6001600160a01b03841660009081526005602052604090205460ff1680156115d557506001600160a01b03831660009081526005602052604090205460ff165b156115e5576114ed8484846118f8565b6115f08484846118b4565b6112b16010805463ffffffff19169055565b6000806000806116118561196b565b9050600061161e86611987565b905060006116368261163089866110d4565b906110d4565b979296509094509092505050565b60008060006116516119a9565b90925090506116608282611169565b9250505090565b6000808080611676888661115d565b90506000611684888761115d565b90506000611692888861115d565b905060006116a48261163086866110d4565b939b939a50919850919650505050505050565b600f54601080546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055565b6000806000806000806116f787611085565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061172990886110d4565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461175890876110d4565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546117879086611072565b6001600160a01b0389166000908152600160205260409020556117a981611b2b565b6117b38483611bea565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516117f891815260200190565b60405180910390a3505050505050505050565b60008060008060008061181d87611085565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061184f90876110d4565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546118859084611072565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546117879086611072565b6000806000806000806118c687611085565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061175890876110d4565b60008060008060008061190a87611085565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061193c90886110d4565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461184f90876110d4565b6010546000906108c090606490610a9b90859061ffff1661115d565b6010546000906108c090606490610a9b90859062010000900461ffff1661115d565b6009546008546000918291825b600654811015611afb578260016000600684815481106119d8576119d8611eec565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a435750816002600060068481548110611a1c57611a1c611eec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5957600954600854945094505050509091565b611a9f6001600060068481548110611a7357611a73611eec565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906110d4565b9250611ae76002600060068481548110611abb57611abb611eec565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906110d4565b915080611af381611f02565b9150506119b6565b50600854600954611b0b91611169565b821015611b22576009546008549350935050509091565b90939092509050565b6000611b35611644565b90506000611b43838361115d565b6007546001600160a01b0316600090815260016020526040902054909150611b6b9082611072565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff16156112b3576007546001600160a01b0316600090815260026020526040902054611bca9084611072565b6007546001600160a01b0316600090815260026020526040902055505050565b600954611bf790836110d4565b600955600a54611c079082611072565b600a555050565b600060208083528351808285015260005b81811015611c3b57858101830151858201604001528201611c1f565b81811115611c4d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611c7a57600080fd5b919050565b60008060408385031215611c9257600080fd5b611c9b83611c63565b946020939093013593505050565b600080600060608486031215611cbe57600080fd5b611cc784611c63565b9250611cd560208501611c63565b9150604084013590509250925092565b600060208284031215611cf757600080fd5b5035919050565b600060208284031215611d1057600080fd5b61107e82611c63565b803561ffff81168114611c7a57600080fd5b60008060408385031215611d3e57600080fd5b611d4783611d19565b9150611d5560208401611d19565b90509250929050565b60008060408385031215611d7157600080fd5b611d7a83611c63565b9150611d5560208401611c63565b600181811c90821680611d9c57607f821691505b602082108103611dbc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115611e2a57611e2a611df7565b01949350505050565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60008219821115611e8f57611e8f611df7565b500190565b600082821015611ea657611ea6611df7565b500390565b6000816000190483118215151615611ec557611ec5611df7565b500290565b600082611ee757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611f1457611f14611df7565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082695e43290814f15a76d59aa1dd6c44c9044ab578b409450a52a46bd1e5d7ec64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c8063715018a6116100ec578063a457c2d71161008a578063dd62ed3e11610064578063dd62ed3e14610537578063ea2f0b371461057d578063ec2a520a1461059d578063f2fde38b146105bd57600080fd5b8063a457c2d7146104c3578063a8aa1b31146104e3578063a9059cbb1461051757600080fd5b80637affa29b116100c65780637affa29b1461045057806382bf293c146104705780638da5cb5b1461049057806395d89b41146104ae57600080fd5b8063715018a61461040557806378109e541461041a5780637afad2491461043057600080fd5b80633347732711610159578063437823ec11610133578063437823ec1461036757806347062402146103875780635342acb4146103ac57806370a08231146103e557600080fd5b8063334773271461030f57806339509351146103255780633bd5d1731461034557600080fd5b806318160ddd1161019557806318160ddd1461026e57806323b872dd1461028d5780632b14ca56146102ad578063313ce567146102ed57600080fd5b806306fdde03146101c7578063095ea7b3146101f25780631694505e1461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6105dd565b6040516101e99190611c0e565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611c7f565b61066f565b60405190151581526020016101e9565b34801561022e57600080fd5b506102567f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101e9565b34801561027a57600080fd5b506008545b6040519081526020016101e9565b34801561029957600080fd5b506102126102a8366004611ca9565b610685565b3480156102b957600080fd5b50600f546102d29061ffff808216916201000090041682565b6040805161ffff9384168152929091166020830152016101e9565b3480156102f957600080fd5b50600d5460405160ff90911681526020016101e9565b34801561031b57600080fd5b5061027f60115481565b34801561033157600080fd5b50610212610340366004611c7f565b6106ee565b34801561035157600080fd5b50610365610360366004611ce5565b610724565b005b34801561037357600080fd5b50610365610382366004611cfe565b610813565b34801561039357600080fd5b50600e546102d29061ffff808216916201000090041682565b3480156103b857600080fd5b506102126103c7366004611cfe565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156103f157600080fd5b5061027f610400366004611cfe565b610861565b34801561041157600080fd5b506103656108c6565b34801561042657600080fd5b5061027f60125481565b34801561043c57600080fd5b5061036561044b366004611d2b565b61093a565b34801561045c57600080fd5b5061036561046b366004611ce5565b610a35565b34801561047c57600080fd5b5061036561048b366004611ce5565b610aa7565b34801561049c57600080fd5b506000546001600160a01b0316610256565b3480156104ba57600080fd5b506101dc610af3565b3480156104cf57600080fd5b506102126104de366004611c7f565b610b02565b3480156104ef57600080fd5b506102567f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf181565b34801561052357600080fd5b50610212610532366004611c7f565b610b51565b34801561054357600080fd5b5061027f610552366004611d5e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561058957600080fd5b50610365610598366004611cfe565b610b5e565b3480156105a957600080fd5b506103656105b8366004611d2b565b610ba9565b3480156105c957600080fd5b506103656105d8366004611cfe565b610ca5565b6060600b80546105ec90611d88565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611d88565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b600061067c338484610d8f565b50600192915050565b6000610692848484610eb3565b6106e484336106df85604051806060016040528060288152602001611f1c602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611046565b610d8f565b5060019392505050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161067c9185906106df9086611072565b3360008181526005602052604090205460ff161561079e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b60006107a983611085565b505050506001600160a01b0384166000908152600160205260409020549192506107d5919050826110d4565b6001600160a01b0383166000908152600160205260409020556009546107fb90826110d4565b600955600a5461080b9084611072565b600a55505050565b6000546001600160a01b0316331461083d5760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b03811660009081526005602052604081205460ff161561089e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108c0906110e0565b92915050565b6000546001600160a01b031633146108f05760405162461bcd60e51b815260040161079590611dc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109645760405162461bcd60e51b815260040161079590611dc2565b60646109708284611e0d565b61ffff1611156109b65760405162461bcd60e51b81526020600482015260116024820152700427579466565206578636565642031303607c1b6044820152606401610795565b600e546040805161ffff80841682526201000090930483166020820152848316818301529183166060830152517f3d839c4d8187eded7cfbdfb38e8c68ae748d7c674400c8c3b8c837ba2933d1ac9181900360800190a1600e805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161079590611dc2565b60008111610a7f5760405162461bcd60e51b815260040161079590611e33565b610aa1620186a0610a9b8360085461115d90919063ffffffff16565b90611169565b60115550565b6000546001600160a01b03163314610ad15760405162461bcd60e51b815260040161079590611dc2565b610aed620186a0610a9b8360085461115d90919063ffffffff16565b60125550565b6060600c80546105ec90611d88565b600061067c33846106df85604051806060016040528060258152602001611f44602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611046565b600061067c338484610eb3565b6000546001600160a01b03163314610b885760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260040161079590611dc2565b6064610bdf8284611e0d565b61ffff161115610c265760405162461bcd60e51b8152602060048201526012602482015271053656c6c46656520657863656564203130360741b6044820152606401610795565b600f546040805161ffff80841682526201000090930483166020820152848316818301529183166060830152517f5453929bc359b94bdd2542a6d8391ca15fe386d74f044db5277328a36de3c6509181900360800190a1600f805461ffff928316620100000263ffffffff199091169290931691909117919091179055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b815260040161079590611dc2565b6001600160a01b038116610d345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610df15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b6001600160a01b038216610e525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610795565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610795565b6001600160a01b038216610f795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610795565b60008111610f995760405162461bcd60e51b815260040161079590611e33565b6001600160a01b03831660009081526004602052604090205460019060ff1680610fdb57506001600160a01b03831660009081526004602052604090205460ff165b15610fe4575060005b60007f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316846001600160a01b0316149050611028858585611175565b6110338385836112b8565b61103f85858585611358565b5050505050565b6000818484111561106a5760405162461bcd60e51b81526004016107959190611c0e565b505050900390565b600061107e8284611e7c565b9392505050565b600080600080600080600080600061109c8a611602565b92509250925060008060006110ba8d86866110b5611644565b611667565b919f909e50909c50959a5093985091965092945050505050565b600061107e8284611e94565b60006009548211156111475760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610795565b6000611151611644565b905061107e8382611169565b600061107e8284611eab565b600061107e8284611eca565b6001600160a01b03831660009081526004602052604090205460ff1680156111ab57506000546001600160a01b03848116911614155b80156111c557506000546001600160a01b03838116911614155b801561120357507f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316826001600160a01b031614155b801561121d57506007546001600160a01b03838116911614155b156112b357600061122d83610861565b60125490915061123d8383611e7c565b11156112b15760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610795565b505b505050565b6000546001600160a01b0383811691161480159061130857507f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316826001600160a01b031614155b156112b357806112b3576011548311156112b35760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610795565b801561149c576113706010805463ffffffff19169055565b7f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316846001600160a01b0316036113da576113da600e54601080546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055565b7f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316836001600160a01b03160361141b5761141b6116b7565b7f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316846001600160a01b03161415801561148f57507f0000000000000000000000006578672a3cff1df960e954b3a0dc2f56b68c0cf16001600160a01b0316836001600160a01b031614155b1561149c5761149c6116b7565b6001600160a01b03841660009081526005602052604090205460ff1680156114dd57506001600160a01b03831660009081526005602052604090205460ff16155b156114f2576114ed8484846116e5565b6115f0565b6001600160a01b03841660009081526005602052604090205460ff1615801561153357506001600160a01b03831660009081526005602052604090205460ff165b15611543576114ed84848461180b565b6001600160a01b03841660009081526005602052604090205460ff1615801561158557506001600160a01b03831660009081526005602052604090205460ff16155b15611595576114ed8484846118b4565b6001600160a01b03841660009081526005602052604090205460ff1680156115d557506001600160a01b03831660009081526005602052604090205460ff165b156115e5576114ed8484846118f8565b6115f08484846118b4565b6112b16010805463ffffffff19169055565b6000806000806116118561196b565b9050600061161e86611987565b905060006116368261163089866110d4565b906110d4565b979296509094509092505050565b60008060006116516119a9565b90925090506116608282611169565b9250505090565b6000808080611676888661115d565b90506000611684888761115d565b90506000611692888861115d565b905060006116a48261163086866110d4565b939b939a50919850919650505050505050565b600f54601080546201000080840461ffff90811690910263ffffffff19909216931692909217919091179055565b6000806000806000806116f787611085565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061172990886110d4565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461175890876110d4565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546117879086611072565b6001600160a01b0389166000908152600160205260409020556117a981611b2b565b6117b38483611bea565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516117f891815260200190565b60405180910390a3505050505050505050565b60008060008060008061181d87611085565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061184f90876110d4565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546118859084611072565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546117879086611072565b6000806000806000806118c687611085565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061175890876110d4565b60008060008060008061190a87611085565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061193c90886110d4565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461184f90876110d4565b6010546000906108c090606490610a9b90859061ffff1661115d565b6010546000906108c090606490610a9b90859062010000900461ffff1661115d565b6009546008546000918291825b600654811015611afb578260016000600684815481106119d8576119d8611eec565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a435750816002600060068481548110611a1c57611a1c611eec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5957600954600854945094505050509091565b611a9f6001600060068481548110611a7357611a73611eec565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906110d4565b9250611ae76002600060068481548110611abb57611abb611eec565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906110d4565b915080611af381611f02565b9150506119b6565b50600854600954611b0b91611169565b821015611b22576009546008549350935050509091565b90939092509050565b6000611b35611644565b90506000611b43838361115d565b6007546001600160a01b0316600090815260016020526040902054909150611b6b9082611072565b600780546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff16156112b3576007546001600160a01b0316600090815260026020526040902054611bca9084611072565b6007546001600160a01b0316600090815260026020526040902055505050565b600954611bf790836110d4565b600955600a54611c079082611072565b600a555050565b600060208083528351808285015260005b81811015611c3b57858101830151858201604001528201611c1f565b81811115611c4d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611c7a57600080fd5b919050565b60008060408385031215611c9257600080fd5b611c9b83611c63565b946020939093013593505050565b600080600060608486031215611cbe57600080fd5b611cc784611c63565b9250611cd560208501611c63565b9150604084013590509250925092565b600060208284031215611cf757600080fd5b5035919050565b600060208284031215611d1057600080fd5b61107e82611c63565b803561ffff81168114611c7a57600080fd5b60008060408385031215611d3e57600080fd5b611d4783611d19565b9150611d5560208401611d19565b90509250929050565b60008060408385031215611d7157600080fd5b611d7a83611c63565b9150611d5560208401611c63565b600181811c90821680611d9c57607f821691505b602082108103611dbc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600061ffff808316818516808303821115611e2a57611e2a611df7565b01949350505050565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60008219821115611e8f57611e8f611df7565b500190565b600082821015611ea657611ea6611df7565b500390565b6000816000190483118215151615611ec557611ec5611df7565b500290565b600082611ee757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611f1457611f14611df7565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082695e43290814f15a76d59aa1dd6c44c9044ab578b409450a52a46bd1e5d7ec64736f6c634300080d0033

Deployed Bytecode Sourcemap

30194:15094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32514:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:161;;;;;;;;;;-1:-1:-1;33426:161:0;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;33426:161:0;1053:187:1;31316:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1436:32:1;;;1418:51;;1406:2;1391:18;31316:51:0;1245:230:1;32791:95:0;;;;;;;;;;-1:-1:-1;32871:7:0;;32791:95;;;1626:25:1;;;1614:2;1599:18;32791:95:0;1480:177:1;33595:313:0;;;;;;;;;;-1:-1:-1;33595:313:0;;;;;:::i;:::-;;:::i;31225:22::-;;;;;;;;;;-1:-1:-1;31225:22:0;;;;;;;;;;;;;;;;;;;2175:6:1;2208:15;;;2190:34;;2260:15;;;;2255:2;2240:18;;2233:43;2138:18;31225:22:0;1995:287:1;32700:83:0;;;;;;;;;;-1:-1:-1;32766:9:0;;32700:83;;32766:9;;;;2429:36:1;;2417:2;2402:18;32700:83:0;2287:184:1;31438:58:0;;;;;;;;;;;;;;;;33916:218;;;;;;;;;;-1:-1:-1;33916:218:0;;;;;:::i;:::-;;:::i;34419:377::-;;;;;;;;;;-1:-1:-1;34419:377:0;;;;;:::i;:::-;;:::i;:::-;;35070:111;;;;;;;;;;-1:-1:-1;35070:111:0;;;;;:::i;:::-;;:::i;31198:20::-;;;;;;;;;;-1:-1:-1;31198:20:0;;;;;;;;;;;;;;;40397:123;;;;;;;;;;-1:-1:-1;40397:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;40485:27:0;40461:4;40485:27;;;:18;:27;;;;;;;;;40397:123;32894:198;;;;;;;;;;-1:-1:-1;32894:198:0;;;;;:::i;:::-;;:::i;20260:148::-;;;;;;;;;;;;;:::i;31504:60::-;;;;;;;;;;;;;;;;35774:239;;;;;;;;;;-1:-1:-1;35774:239:0;;;;;:::i;:::-;;:::i;36045:237::-;;;;;;;;;;-1:-1:-1;36045:237:0;;;;;:::i;:::-;;:::i;36364:150::-;;;;;;;;;;-1:-1:-1;36364:150:0;;;;;:::i;:::-;;:::i;19609:87::-;;;;;;;;;;-1:-1:-1;19655:7:0;19682:6;-1:-1:-1;;;;;19682:6:0;19609:87;;32605;;;;;;;;;;;;;:::i;34142:269::-;;;;;;;;;;-1:-1:-1;34142:269:0;;;;;:::i;:::-;;:::i;31374:29::-;;;;;;;;;;;;;;;33100:167;;;;;;;;;;-1:-1:-1;33100:167:0;;;;;:::i;:::-;;:::i;33275:143::-;;;;;;;;;;-1:-1:-1;33275:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;33383:18:0;;;33356:7;33383:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33275:143;35193:110;;;;;;;;;;-1:-1:-1;35193:110:0;;;;;:::i;:::-;;:::i;35424:247::-;;;;;;;;;;-1:-1:-1;35424:247:0;;;;;:::i;:::-;;:::i;20563:244::-;;;;;;;;;;-1:-1:-1;20563:244:0;;;;;:::i;:::-;;:::i;32514:83::-;32551:13;32584:5;32577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32514:83;:::o;33426:161::-;33501:4;33518:39;10396:10;33541:7;33550:6;33518:8;:39::i;:::-;-1:-1:-1;33575:4:0;33426:161;;;;:::o;33595:313::-;33693:4;33710:36;33720:6;33728:9;33739:6;33710:9;:36::i;:::-;33757:121;33766:6;10396:10;33788:89;33826:6;33788:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33788:19:0;;;;;;:11;:19;;;;;;;;10396:10;33788:33;;;;;;;;;;:37;:89::i;:::-;33757:8;:121::i;:::-;-1:-1:-1;33896:4:0;33595:313;;;;;:::o;33916:218::-;10396:10;34004:4;34053:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34053:34:0;;;;;;;;;;34004:4;;34021:83;;34044:7;;34053:50;;34092:10;34053:38;:50::i;34419:377::-;10396:10;34471:14;34520:19;;;:11;:19;;;;;;;;34519:20;34511:77;;;;-1:-1:-1;;;34511:77:0;;4337:2:1;34511:77:0;;;4319:21:1;4376:2;4356:18;;;4349:30;4415:34;4395:18;;;4388:62;-1:-1:-1;;;4466:18:1;;;4459:42;4518:19;;34511:77:0;;;;;;;;;34600:15;34624:19;34635:7;34624:10;:19::i;:::-;-1:-1:-1;;;;;;;;;34672:15:0;;;;;;:7;:15;;;;;;34599:44;;-1:-1:-1;34672:28:0;;:15;-1:-1:-1;34599:44:0;34672:19;:28::i;:::-;-1:-1:-1;;;;;34654:15:0;;;;;;:7;:15;;;;;:46;34721:7;;:20;;34733:7;34721:11;:20::i;:::-;34711:7;:30;34765:10;;:23;;34780:7;34765:14;:23::i;:::-;34752:10;:36;-1:-1:-1;;;34419:377:0:o;35070:111::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35139:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35139:34:0::1;35169:4;35139:34;::::0;;35070:111::o;32894:198::-;-1:-1:-1;;;;;32984:20:0;;32960:7;32984:20;;;:11;:20;;;;;;;;32980:49;;;-1:-1:-1;;;;;;33013:16:0;;;;;:7;:16;;;;;;;32894:198::o;32980:49::-;-1:-1:-1;;;;;33067:16:0;;;;;;:7;:16;;;;;;33047:37;;:19;:37::i;:::-;33040:44;32894:198;-1:-1:-1;;32894:198:0:o;20260:148::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;20367:1:::1;20351:6:::0;;20330:40:::1;::::0;-1:-1:-1;;;;;20351:6:0;;::::1;::::0;20330:40:::1;::::0;20367:1;;20330:40:::1;20398:1;20381:19:::0;;-1:-1:-1;;;;;;20381:19:0::1;::::0;;20260:148::o;35774:239::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;35864:3:::1;35851:9;35857:3:::0;35851;:9:::1;:::i;:::-;:16;;;;35843:46;;;::::0;-1:-1:-1;;;35843:46:0;;5472:2:1;35843:46:0::1;::::0;::::1;5454:21:1::0;5511:2;5491:18;;;5484:30;-1:-1:-1;;;5530:18:1;;;5523:47;5587:18;;35843:46:0::1;5270:341:1::0;35843:46:0::1;35914:6;:10:::0;35900:47:::1;::::0;;35914:10:::1;::::0;;::::1;5868:34:1::0;;35926:10:0;;;::::1;::::0;::::1;5933:2:1::0;5918:18;;5911:43;5990:15;;;5970:18;;;5963:43;6042:15;;;6037:2;6022:18;;6015:43;35900:47:0;::::1;::::0;;;;5830:3:1;35900:47:0;;::::1;35962:6;:16:::0;;::::1;35989::::0;;::::1;::::0;::::1;-1:-1:-1::0;;35989:16:0;;;35962;;;::::1;35989::::0;;;;;;;::::1;::::0;;35774:239::o;36045:237::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;36158:1:::1;36140:15;:19;36132:73;;;;-1:-1:-1::0;;;36132:73:0::1;;;;;;;:::i;:::-;36234:40;36267:6;36234:28;36246:15;36234:7;;:11;;:28;;;;:::i;:::-;:32:::0;::::1;:40::i;:::-;36216:15;:58:::0;-1:-1:-1;36045:237:0:o;36364:150::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;36467:39:::1;36499:6;36467:27;36479:14;36467:7;;:11;;:27;;;;:::i;:39::-;36449:15;:57:::0;-1:-1:-1;36364:150:0:o;32605:87::-;32644:13;32677:7;32670:14;;;;;:::i;34142:269::-;34235:4;34252:129;10396:10;34275:7;34284:96;34323:15;34284:96;;;;;;;;;;;;;;;;;10396:10;34284:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34284:34:0;;;;;;;;;;;;:38;:96::i;33100:167::-;33178:4;33195:42;10396:10;33219:9;33230:6;33195:9;:42::i;35193:110::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35260:27:0::1;35290:5;35260:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35260:35:0::1;::::0;;35193:110::o;35424:247::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;35515:3:::1;35502:9;35508:3:::0;35502;:9:::1;:::i;:::-;:16;;;;35494:47;;;::::0;-1:-1:-1;;;35494:47:0;;6681:2:1;35494:47:0::1;::::0;::::1;6663:21:1::0;6720:2;6700:18;;;6693:30;-1:-1:-1;;;6739:18:1;;;6732:48;6797:18;;35494:47:0::1;6479:342:1::0;35494:47:0::1;35567:7;:11:::0;35552:50:::1;::::0;;35567:11:::1;::::0;;::::1;5868:34:1::0;;35580:11:0;;;::::1;::::0;::::1;5933:2:1::0;5918:18;;5911:43;5990:15;;;5970:18;;;5963:43;6042:15;;;6037:2;6022:18;;6015:43;35552:50:0;::::1;::::0;;;;5830:3:1;35552:50:0;;::::1;35618:7;:17:::0;;::::1;35646::::0;;::::1;::::0;::::1;-1:-1:-1::0;;35646:17:0;;;35618;;;::::1;35646::::0;;;;;;;::::1;::::0;;35424:247::o;20563:244::-;19655:7;19682:6;-1:-1:-1;;;;;19682:6:0;10396:10;19829:23;19821:68;;;;-1:-1:-1;;;19821:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20652:22:0;::::1;20644:73;;;::::0;-1:-1:-1;;;20644:73:0;;7028:2:1;20644:73:0::1;::::0;::::1;7010:21:1::0;7067:2;7047:18;;;7040:30;7106:34;7086:18;;;7079:62;-1:-1:-1;;;7157:18:1;;;7150:36;7203:19;;20644:73:0::1;6826:402:1::0;20644:73:0::1;20754:6;::::0;;20733:38:::1;::::0;-1:-1:-1;;;;;20733:38:0;;::::1;::::0;20754:6;::::1;::::0;20733:38:::1;::::0;::::1;20782:6;:17:::0;;-1:-1:-1;;;;;;20782:17:0::1;-1:-1:-1::0;;;;;20782:17:0;;;::::1;::::0;;;::::1;::::0;;20563:244::o;40528:337::-;-1:-1:-1;;;;;40621:19:0;;40613:68;;;;-1:-1:-1;;;40613:68:0;;7435:2:1;40613:68:0;;;7417:21:1;7474:2;7454:18;;;7447:30;7513:34;7493:18;;;7486:62;-1:-1:-1;;;7564:18:1;;;7557:34;7608:19;;40613:68:0;7233:400:1;40613:68:0;-1:-1:-1;;;;;40700:21:0;;40692:68;;;;-1:-1:-1;;;40692:68:0;;7840:2:1;40692:68:0;;;7822:21:1;7879:2;7859:18;;;7852:30;7918:34;7898:18;;;7891:62;-1:-1:-1;;;7969:18:1;;;7962:32;8011:19;;40692:68:0;7638:398:1;40692:68:0;-1:-1:-1;;;;;40773:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40825:32;;1626:25:1;;;40825:32:0;;1599:18:1;40825:32:0;;;;;;;40528:337;;;:::o;40873:936::-;-1:-1:-1;;;;;40995:18:0;;40987:68;;;;-1:-1:-1;;;40987:68:0;;8243:2:1;40987:68:0;;;8225:21:1;8282:2;8262:18;;;8255:30;8321:34;8301:18;;;8294:62;-1:-1:-1;;;8372:18:1;;;8365:35;8417:19;;40987:68:0;8041:401:1;40987:68:0;-1:-1:-1;;;;;41074:16:0;;41066:64;;;;-1:-1:-1;;;41066:64:0;;8649:2:1;41066:64:0;;;8631:21:1;8688:2;8668:18;;;8661:30;8727:34;8707:18;;;8700:62;-1:-1:-1;;;8778:18:1;;;8771:33;8821:19;;41066:64:0;8447:399:1;41066:64:0;41158:1;41149:6;:10;41141:64;;;;-1:-1:-1;;;41141:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41414:24:0;;41287:12;41414:24;;;:18;:24;;;;;;41302:4;;41414:24;;;:50;;-1:-1:-1;;;;;;41442:22:0;;;;;;:18;:22;;;;;;;;41414:50;41411:96;;;-1:-1:-1;41490:5:0;41411:96;41558:11;41578:4;-1:-1:-1;;;;;41572:10:0;:2;-1:-1:-1;;;;;41572:10:0;;41558:24;;41598:32;41613:4;41619:2;41623:6;41598:14;:32::i;:::-;41643:33;41657:6;41665:2;41669:6;41643:12;:33::i;:::-;41763:38;41778:4;41783:2;41786:6;41793:7;41763:14;:38::i;:::-;40976:833;;40873:936;;;:::o;7759:206::-;7845:7;7906:12;7898:6;;;;7890:29;;;;-1:-1:-1;;;7890:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7941:5:0;;;7759:206::o;5480:98::-;5538:7;5565:5;5569:1;5565;:5;:::i;:::-;5558:12;5480:98;-1:-1:-1;;;5480:98:0:o;37547:403::-;37606:7;37615;37624;37633;37642;37651;37672:23;37697:12;37712;37728:20;37740:7;37728:11;:20::i;:::-;37671:77;;;;;;37760:15;37777:23;37802:12;37818:44;37830:7;37839:4;37845;37851:10;:8;:10::i;:::-;37818:11;:44::i;:::-;37759:103;;;;-1:-1:-1;37759:103:0;;-1:-1:-1;37913:15:0;;-1:-1:-1;37930:4:0;;-1:-1:-1;37937:4:0;;-1:-1:-1;37547:403:0;;-1:-1:-1;;;;;37547:403:0:o;5861:98::-;5919:7;5946:5;5950:1;5946;:5;:::i;34804:254::-;34871:7;34910;;34899;:18;;34891:73;;;;-1:-1:-1;;;34891:73:0;;9316:2:1;34891:73:0;;;9298:21:1;9355:2;9335:18;;;9328:30;9394:34;9374:18;;;9367:62;-1:-1:-1;;;9445:18:1;;;9438:40;9495:19;;34891:73:0;9114:406:1;34891:73:0;34975:19;34998:10;:8;:10::i;:::-;34975:33;-1:-1:-1;35026:24:0;:7;34975:33;35026:11;:24::i;6218:98::-;6276:7;6303:5;6307:1;6303;:5;:::i;6617:98::-;6675:7;6702:5;6706:1;6702;:5;:::i;36853:435::-;-1:-1:-1;;;;;36957:26:0;;;;;;:18;:26;;;;;;;;:47;;;;-1:-1:-1;19655:7:0;19682:6;-1:-1:-1;;;;;36987:17:0;;;19682:6;;36987:17;;36957:47;:71;;;;-1:-1:-1;19655:7:0;19682:6;-1:-1:-1;;;;;37008:20:0;;;19682:6;;37008:20;;36957:71;:92;;;;;37045:4;-1:-1:-1;;;;;37032:17:0;:9;-1:-1:-1;;;;;37032:17:0;;;36957:92;:126;;;;-1:-1:-1;37066:17:0;;-1:-1:-1;;;;;37053:30:0;;;37066:17;;37053:30;;36957:126;36953:328;;;37099:18;37120:20;37130:9;37120;:20::i;:::-;37188:15;;37099:41;;-1:-1:-1;37164:19:0;37177:6;37099:41;37164:19;:::i;:::-;37163:40;;37155:114;;;;-1:-1:-1;;;37155:114:0;;10122:2:1;37155:114:0;;;10104:21:1;10161:2;10141:18;;;10134:30;10200:34;10180:18;;;10173:62;10271:32;10251:18;;;10244:60;10321:19;;37155:114:0;9920:426:1;37155:114:0;37084:197;36953:328;36853:435;;;:::o;36546:275::-;19655:7;19682:6;-1:-1:-1;;;;;36646:20:0;;;19682:6;;36646:20;;;;:41;;;36683:4;-1:-1:-1;;;;;36670:17:0;:9;-1:-1:-1;;;;;36670:17:0;;;36646:41;36642:172;;;36707:6;36703:99;;36749:15;;36739:6;:25;;36731:55;;;;-1:-1:-1;;;36731:55:0;;10553:2:1;36731:55:0;;;10535:21:1;10592:2;10572:18;;;10565:30;-1:-1:-1;;;10611:18:1;;;10604:47;10668:18;;36731:55:0;10351:341:1;41890:1131:0;42000:7;41997:365;;;42023:14;40129:7;:11;;-1:-1:-1;;40151:11:0;;;40086:84;42023:14;42066:4;-1:-1:-1;;;;;42056:14:0;:6;-1:-1:-1;;;;;42056:14:0;;42052:63;;42091:8;40225:6;:10;40215:7;:20;;40256:10;;;;40225;40256;;;40246:20;;;-1:-1:-1;;40246:20:0;;;40225:10;;40246:20;;;;;;;;;;40178:96;42091:8;42146:4;-1:-1:-1;;;;;42133:17:0;:9;-1:-1:-1;;;;;42133:17:0;;42129:67;;42171:9;:7;:9::i;:::-;42278:4;-1:-1:-1;;;;;42268:14:0;:6;-1:-1:-1;;;;;42268:14:0;;;42267:39;;;;;42301:4;-1:-1:-1;;;;;42288:17:0;:9;-1:-1:-1;;;;;42288:17:0;;;42267:39;42263:88;;;42326:9;:7;:9::i;:::-;-1:-1:-1;;;;;42396:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42420:22:0;;;;;;:11;:22;;;;;;;;42419:23;42396:46;42392:597;;;42459:48;42481:6;42489:9;42500:6;42459:21;:48::i;:::-;42392:597;;;-1:-1:-1;;;;;42530:19:0;;;;;;:11;:19;;;;;;;;42529:20;:46;;;;-1:-1:-1;;;;;;42553:22:0;;;;;;:11;:22;;;;;;;;42529:46;42525:464;;;42592:46;42612:6;42620:9;42631:6;42592:19;:46::i;42525:464::-;-1:-1:-1;;;;;42661:19:0;;;;;;:11;:19;;;;;;;;42660:20;:47;;;;-1:-1:-1;;;;;;42685:22:0;;;;;;:11;:22;;;;;;;;42684:23;42660:47;42656:333;;;42724:44;42742:6;42750:9;42761:6;42724:17;:44::i;42656:333::-;-1:-1:-1;;;;;42790:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42813:22:0;;;;;;:11;:22;;;;;;;;42790:45;42786:203;;;42852:48;42874:6;42882:9;42893:6;42852:21;:48::i;42786:203::-;42933:44;42951:6;42959:9;42970:6;42933:17;:44::i;:::-;42999:14;40129:7;:11;;-1:-1:-1;;40151:11:0;;;40086:84;37958:303;38018:7;38026;38034;38053:12;38068:24;38084:7;38068:15;:24::i;:::-;38053:39;;38103:12;38118:24;38134:7;38118:15;:24::i;:::-;38103:39;-1:-1:-1;38153:23:0;38179:27;38103:39;38179:17;:7;38191:4;38179:11;:17::i;:::-;:21;;:27::i;:::-;38153:53;38242:4;;-1:-1:-1;38248:4:0;;-1:-1:-1;37958:303:0;;-1:-1:-1;;;37958:303:0:o;38678:163::-;38719:7;38740:15;38757;38776:19;:17;:19::i;:::-;38739:56;;-1:-1:-1;38739:56:0;-1:-1:-1;38813:20:0;38739:56;;38813:11;:20::i;:::-;38806:27;;;;38678:163;:::o;38269:399::-;38375:7;;;;38428:24;:7;38440:11;38428;:24::i;:::-;38410:42;-1:-1:-1;38463:12:0;38478:21;:4;38487:11;38478:8;:21::i;:::-;38463:36;-1:-1:-1;38510:12:0;38525:21;:4;38534:11;38525:8;:21::i;:::-;38510:36;-1:-1:-1;38557:23:0;38583:27;38510:36;38583:17;:7;38595:4;38583:11;:17::i;:27::-;38629:7;;;;-1:-1:-1;38655:4:0;;-1:-1:-1;38269:399:0;;-1:-1:-1;;;;;;;38269:399:0:o;40282:99::-;40330:7;:11;40320:7;:21;;40362:11;;;;40330;40362;;;40352:21;;;-1:-1:-1;;40352:21:0;;;40330:11;;40352:21;;;;;;;;;;40282:99::o;44097:548::-;44200:15;44217:23;44242:12;44256:23;44281:12;44295;44311:19;44322:7;44311:10;:19::i;:::-;-1:-1:-1;;;;;44359:15:0;;;;;;:7;:15;;;;;;44199:131;;-1:-1:-1;44199:131:0;;-1:-1:-1;44199:131:0;;-1:-1:-1;44199:131:0;-1:-1:-1;44199:131:0;-1:-1:-1;44199:131:0;-1:-1:-1;44359:28:0;;44379:7;44359:19;:28::i;:::-;-1:-1:-1;;;;;44341:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44416:7;:15;;;;:28;;44436:7;44416:19;:28::i;:::-;-1:-1:-1;;;;;44398:15:0;;;;;;;:7;:15;;;;;;:46;;;;44476:18;;;;;;;:39;;44499:15;44476:22;:39::i;:::-;-1:-1:-1;;;;;44455:18:0;;;;;;:7;:18;;;;;:60;44529:14;44538:4;44529:8;:14::i;:::-;44554:23;44566:4;44572;44554:11;:23::i;:::-;44610:9;-1:-1:-1;;;;;44593:44:0;44602:6;-1:-1:-1;;;;;44593:44:0;;44621:15;44593:44;;;;1626:25:1;;1614:2;1599:18;;1480:177;44593:44:0;;;;;;;;44188:457;;;;;;44097:548;;;:::o;43520:569::-;43621:15;43638:23;43663:12;43677:23;43702:12;43717;43733:19;43744:7;43733:10;:19::i;:::-;-1:-1:-1;;;;;43781:15:0;;;;;;:7;:15;;;;;;43620:132;;-1:-1:-1;43620:132:0;;-1:-1:-1;43620:132:0;;-1:-1:-1;43620:132:0;-1:-1:-1;43620:132:0;-1:-1:-1;43620:132:0;-1:-1:-1;43781:28:0;;43620:132;43781:19;:28::i;:::-;-1:-1:-1;;;;;43763:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43841:18;;;;;:7;:18;;;;;:39;;43864:15;43841:22;:39::i;:::-;-1:-1:-1;;;;;43820:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43912:7;:18;;;;:39;;43935:15;43912:22;:39::i;43029:483::-;43128:15;43145:23;43170:12;43184:23;43209:12;43222;43238:19;43249:7;43238:10;:19::i;:::-;-1:-1:-1;;;;;43286:15:0;;;;;;:7;:15;;;;;;43127:130;;-1:-1:-1;43127:130:0;;-1:-1:-1;43127:130:0;;-1:-1:-1;43127:130:0;-1:-1:-1;43127:130:0;-1:-1:-1;43127:130:0;-1:-1:-1;43286:28:0;;43127:130;43286:19;:28::i;44654:625::-;44757:15;44774:23;44799:12;44813:23;44838:12;44853;44869:19;44880:7;44869:10;:19::i;:::-;-1:-1:-1;;;;;44917:15:0;;;;;;:7;:15;;;;;;44756:132;;-1:-1:-1;44756:132:0;;-1:-1:-1;44756:132:0;;-1:-1:-1;44756:132:0;-1:-1:-1;44756:132:0;-1:-1:-1;44756:132:0;-1:-1:-1;44917:28:0;;44937:7;44917:19;:28::i;:::-;-1:-1:-1;;;;;44899:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44974:7;:15;;;;:28;;44994:7;44974:19;:28::i;39785:130::-;39888:7;;39849;;39876:31;;39901:5;;39876:20;;:7;;39888;;39876:11;:20::i;39923:154::-;40026:7;;39987;;40014:55;;40053:5;;40014:20;;:7;;40026;;;;;40014:11;:20::i;38849:561::-;38946:7;;38982;;38899;;;;;39006:289;39030:9;:16;39026:20;;39006:289;;;39096:7;39072;:21;39080:9;39090:1;39080:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39080:12:0;39072:21;;;;;;;;;;;;;:31;;:66;;;39131:7;39107;:21;39115:9;39125:1;39115:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39115:12:0;39107:21;;;;;;;;;;;;;:31;39072:66;39068:97;;;39148:7;;39157;;39140:25;;;;;;;38849:561;;:::o;39068:97::-;39190:34;39202:7;:21;39210:9;39220:1;39210:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39210:12:0;39202:21;;;;;;;;;;;;;39190:7;;:11;:34::i;:::-;39180:44;;39249:34;39261:7;:21;39269:9;39279:1;39269:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39269:12:0;39261:21;;;;;;;;;;;;;39249:7;;:11;:34::i;:::-;39239:44;-1:-1:-1;39048:3:0;;;;:::i;:::-;;;;39006:289;;;-1:-1:-1;39331:7:0;;39319;;:20;;:11;:20::i;:::-;39309:7;:30;39305:61;;;39349:7;;39358;;39341:25;;;;;;38849:561;;:::o;39305:61::-;39385:7;;39394;;-1:-1:-1;38849:561:0;-1:-1:-1;38849:561:0:o;39428:339::-;39479:19;39502:10;:8;:10::i;:::-;39479:33;-1:-1:-1;39523:12:0;39538:21;:4;39479:33;39538:8;:21::i;:::-;39607:17;;-1:-1:-1;;;;;39607:17:0;39599:26;;;;:7;:26;;;;;;39523:36;;-1:-1:-1;39599:36:0;;39523;39599:30;:36::i;:::-;39578:17;;;-1:-1:-1;;;;;39578:17:0;;;39570:26;;;;:7;:26;;;;;;;;:65;;;;39661:17;;;;;39649:30;;:11;:30;;;;;;;39646:113;;;39731:17;;-1:-1:-1;;;;;39731:17:0;39723:26;;;;:7;:26;;;;;;:36;;39754:4;39723:30;:36::i;:::-;39702:17;;-1:-1:-1;;;;;39702:17:0;39694:26;;;;:7;:26;;;;;:65;39468:299;;39428:339;:::o;37392:147::-;37470:7;;:17;;37482:4;37470:11;:17::i;:::-;37460:7;:27;37511:10;;:20;;37526:4;37511:14;:20::i;:::-;37498:10;:33;-1:-1:-1;;37392:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1662:328::-;1739:6;1747;1755;1808:2;1796:9;1787:7;1783:23;1779:32;1776:52;;;1824:1;1821;1814:12;1776:52;1847:29;1866:9;1847:29;:::i;:::-;1837:39;;1895:38;1929:2;1918:9;1914:18;1895:38;:::i;:::-;1885:48;;1980:2;1969:9;1965:18;1952:32;1942:42;;1662:328;;;;;:::o;2476:180::-;2535:6;2588:2;2576:9;2567:7;2563:23;2559:32;2556:52;;;2604:1;2601;2594:12;2556:52;-1:-1:-1;2627:23:1;;2476:180;-1:-1:-1;2476:180:1:o;2661:186::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2812:29;2831:9;2812:29;:::i;2852:159::-;2919:20;;2979:6;2968:18;;2958:29;;2948:57;;3001:1;2998;2991:12;3016:256;3082:6;3090;3143:2;3131:9;3122:7;3118:23;3114:32;3111:52;;;3159:1;3156;3149:12;3111:52;3182:28;3200:9;3182:28;:::i;:::-;3172:38;;3229:37;3262:2;3251:9;3247:18;3229:37;:::i;:::-;3219:47;;3016:256;;;;;:::o;3485:260::-;3553:6;3561;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;3653:29;3672:9;3653:29;:::i;:::-;3643:39;;3701:38;3735:2;3724:9;3720:18;3701:38;:::i;3750:380::-;3829:1;3825:12;;;;3872;;;3893:61;;3947:4;3939:6;3935:17;3925:27;;3893:61;4000:2;3992:6;3989:14;3969:18;3966:38;3963:161;;4046:10;4041:3;4037:20;4034:1;4027:31;4081:4;4078:1;4071:15;4109:4;4106:1;4099:15;3963:161;;3750:380;;;:::o;4548:356::-;4750:2;4732:21;;;4769:18;;;4762:30;4828:34;4823:2;4808:18;;4801:62;4895:2;4880:18;;4548:356::o;4909:127::-;4970:10;4965:3;4961:20;4958:1;4951:31;5001:4;4998:1;4991:15;5025:4;5022:1;5015:15;5041:224;5080:3;5108:6;5141:2;5138:1;5134:10;5171:2;5168:1;5164:10;5202:3;5198:2;5194:12;5189:3;5186:21;5183:47;;;5210:18;;:::i;:::-;5246:13;;5041:224;-1:-1:-1;;;;5041:224:1:o;6069:405::-;6271:2;6253:21;;;6310:2;6290:18;;;6283:30;6349:34;6344:2;6329:18;;6322:62;-1:-1:-1;;;6415:2:1;6400:18;;6393:39;6464:3;6449:19;;6069:405::o;8851:128::-;8891:3;8922:1;8918:6;8915:1;8912:13;8909:39;;;8928:18;;:::i;:::-;-1:-1:-1;8964:9:1;;8851:128::o;8984:125::-;9024:4;9052:1;9049;9046:8;9043:34;;;9057:18;;:::i;:::-;-1:-1:-1;9094:9:1;;8984:125::o;9525:168::-;9565:7;9631:1;9627;9623:6;9619:14;9616:1;9613:21;9608:1;9601:9;9594:17;9590:45;9587:71;;;9638:18;;:::i;:::-;-1:-1:-1;9678:9:1;;9525:168::o;9698:217::-;9738:1;9764;9754:132;;9808:10;9803:3;9799:20;9796:1;9789:31;9843:4;9840:1;9833:15;9871:4;9868:1;9861:15;9754:132;-1:-1:-1;9900:9:1;;9698:217::o;10697:127::-;10758:10;10753:3;10749:20;10746:1;10739:31;10789:4;10786:1;10779:15;10813:4;10810:1;10803:15;10829:135;10868:3;10889:17;;;10886:43;;10909:18;;:::i;:::-;-1:-1:-1;10956:1:1;10945:13;;10829:135::o

Swarm Source

ipfs://82695e43290814f15a76d59aa1dd6c44c9044ab578b409450a52a46bd1e5d7ec
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.