ETH Price: $3,357.17 (-0.83%)

Token

Orochi (OROCHI)
 

Overview

Max Total Supply

1,628,974.999999999999949425 OROCHI

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,119.728905938736990082 OROCHI

Value
$0.00
0x947acec2426d0e3d4d0c59000beb0c65727ed870
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:
OROCHI

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
pragma experimental ABIEncoderV2;

/**
 * @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) {
        return msg.data;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// 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 generally not needed starting with Solidity 0.8, since 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. 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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    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 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 OROCHI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdEaD);

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    uint256 private tradingEnabledAtTime;
    uint256 private tradingEnabledAtBlock;

    struct Tax {
        uint256 totalPer;
        uint256 marketingPer;
        uint256 lpPer;
    }

    Tax public buyTax;
    Tax public sellTax;

    uint256 public parkedForMarketing;
    uint256 public parkedForLiquidity;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private isExcludedFromFees;
    mapping(address => bool) public isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    enum EventType {
        stake,
        unstake,
        rewarded
    }
    event StakeEvent(
        address indexed account,
        EventType eventType,
        uint256 amount,
        uint256 time
    );

    struct StakeProfile {
        uint256 stakeAmount;
        uint256 end;
        uint256 parkedReward;
        uint256 start;
        uint256 earned;
    }

    uint256 public APR;
    uint256 public lockTime;

    address public stakingVault;

    //Stakers
    uint256 public totalStaked;
    mapping(address => StakeProfile) stakers;

    constructor(address _router, address _stakingVault)
        ERC20("Orochi", "OROCHI")
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 2_023_000 * 1e18;

        lockTime = 14 days;
        APR = 365;

        maxTransactionAmount = totalSupply / 100; // 1% from total supply maxTransactionAmountTxn
        maxWallet = (totalSupply * 2) / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyTax.marketingPer = 3;
        buyTax.lpPer = 2;
        buyTax.totalPer = 5;

        sellTax.marketingPer = 3;
        sellTax.lpPer = 2;
        sellTax.totalPer = 5;

        marketingWallet = address(0x0cEC5130E0b85650cFA695020Cc76e4Fea9e2110); // set as marketing wallet
        stakingVault = _stakingVault; // set staking vault
        _approve(stakingVault, address(this), totalSupply);
        // exclude from paying fees or having max transaction amount
        isExcludedFromFees[stakingVault] = true;
        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[deadAddress] = true;

        isExcludedMaxTransactionAmount[stakingVault] = true;
        isExcludedMaxTransactionAmount[owner()] = true;
        isExcludedMaxTransactionAmount[address(this)] = true;
        isExcludedMaxTransactionAmount[deadAddress] = true;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function updateTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        tradingEnabledAtBlock = block.number + 3;
        tradingEnabledAtTime = block.timestamp + 60 * 60;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        maxTransactionAmount = totalSupply();
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyTax.marketingPer = _marketingFee;
        buyTax.lpPer = _liquidityFee;
        buyTax.totalPer = _marketingFee + _liquidityFee;
        require(buyTax.totalPer <= 11, "Must keep fees at 11% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        sellTax.marketingPer = _marketingFee;
        sellTax.lpPer = _liquidityFee;
        sellTax.totalPer = _marketingFee + _liquidityFee;
        require(sellTax.totalPer <= 11, "Must keep fees at 11% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        isExcludedFromFees[account] = excluded;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        marketingWallet = newMarketingWallet;
    }

    function setStakingVault(address newVault) external onlyOwner {
        stakingVault = newVault;
        _approve(newVault, address(this), totalSupply());
    }

    function updatePool(uint256 newAPR, uint256 newLockTime)
        external
        onlyOwner
    {
        APR = newAPR;
        lockTime = newLockTime;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (from != owner() && to != owner() && to != address(0) && !swapping) {
            if (!tradingActive) {
                require(
                    isExcludedFromFees[from] || isExcludedFromFees[to],
                    "Trading is not active."
                );
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (
            (balanceOf(address(this)) >= swapTokensAtAmount) &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            if (tradingEnabledAtBlock > block.number) {
                // take 99% of fee
                fees = amount.mul(99).div(100);
                parkedForMarketing += fees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTax.totalPer > 0) {
                if (tradingEnabledAtTime > block.timestamp) {
                    fees = amount.mul(25).div(100);
                    parkedForMarketing += fees;
                } else {
                    fees = amount.mul(sellTax.totalPer).div(100);
                    parkedForLiquidity +=
                        (fees * sellTax.lpPer) /
                        sellTax.totalPer;
                    parkedForMarketing +=
                        (fees * sellTax.marketingPer) /
                        sellTax.totalPer;
                }
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTax.totalPer > 0) {
                fees = amount.mul(buyTax.totalPer).div(100);
                parkedForLiquidity += (fees * buyTax.lpPer) / buyTax.totalPer;
                parkedForMarketing +=
                    (fees * buyTax.marketingPer) /
                    buyTax.totalPer;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
                amount -= fees;
            }
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = parkedForLiquidity + parkedForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * parkedForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(parkedForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        parkedForMarketing = 0;
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                parkedForLiquidity
            );
        }
        parkedForLiquidity = 0;

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function burn(uint256 amount) public onlyOwner {
        _burn(_msgSender(), amount);
    }

    function stake(uint256 _stakeNumber) external {
        //Validating...
        require(_stakeNumber > 0, "can not stake 0 tokens!");

        //updating staker profile:
        StakeProfile memory profile = stakers[msg.sender];
        //Adding tokens to staker profile
        if (profile.stakeAmount > 0) {
            profile.parkedReward += getRewards(msg.sender);
        }
        profile.stakeAmount += _stakeNumber;
        profile.start = block.timestamp;
        profile.end = block.timestamp + lockTime;

        stakers[msg.sender] = profile;

        //Transfering tokens and increasing total staked amount
        totalStaked += _stakeNumber;
        IERC20(address(this)).transferFrom(
            msg.sender,
            stakingVault,
            _stakeNumber
        );
        emit StakeEvent(
            msg.sender,
            EventType.stake,
            _stakeNumber,
            block.timestamp
        );
    }

    function unstake() external {
        //getting corresponding stake profile
        StakeProfile memory profile = stakers[msg.sender];

        uint256 toUnstakeAmount = profile.stakeAmount;
        //Validating
        require(toUnstakeAmount > 0, "Can't unstake 0 tokens.");
        require(
            block.timestamp > profile.end,
            "Can't unstake before unlock time"
        );

        uint256 reward = getRewards(msg.sender);
        reward += profile.parkedReward;

        totalStaked -= toUnstakeAmount;

        profile.stakeAmount = 0;
        profile.start = 0;
        profile.end = 0;
        profile.parkedReward = 0;
        profile.earned += reward;

        stakers[msg.sender] = profile;

        IERC20(address(this)).transferFrom(
            stakingVault,
            msg.sender,
            toUnstakeAmount + reward
        );
        emit StakeEvent(
            msg.sender,
            EventType.unstake,
            toUnstakeAmount,
            block.timestamp
        );
        emit StakeEvent(
            msg.sender,
            EventType.rewarded,
            reward,
            block.timestamp
        );
    }

    function getRewards(address account)
        public
        view
        returns (uint256 Interest)
    {
        StakeProfile memory profile = stakers[account];
        uint256 elapsedTime = block.timestamp - profile.start; // time difference in s (unix)
        Interest = calculateInteresetInSeconds(
            profile.stakeAmount,
            APR,
            elapsedTime
        );
    }

    function calculateInteresetInSeconds(
        uint256 principal,
        uint256 _APR,
        uint256 _seconds
    ) public pure returns (uint256) {
        return (principal * _APR * _seconds) / (365 * 8640000); // _seconds is in (year) so div (year sec)
    }

    function getStakerProfile(address _staker)
        public
        view
        returns (StakeProfile memory)
    {
        return stakers[_staker];
    }

    function getStakedInPool(address account) public view returns (uint256) {
        return stakers[account].stakeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_stakingVault","type":"address"}],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum OROCHI.EventType","name":"eventType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StakeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"APR","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"totalPer","type":"uint256"},{"internalType":"uint256","name":"marketingPer","type":"uint256"},{"internalType":"uint256","name":"lpPer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"uint256","name":"_APR","type":"uint256"},{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"calculateInteresetInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"Interest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakedInPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getStakerProfile","outputs":[{"components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"parkedReward","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"}],"internalType":"struct OROCHI.StakeProfile","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parkedForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parkedForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"totalPer","type":"uint256"},{"internalType":"uint256","name":"marketingPer","type":"uint256"},{"internalType":"uint256","name":"lpPer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"setStakingVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeNumber","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAPR","type":"uint256"},{"internalType":"uint256","name":"newLockTime","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff191690553480156200001c57600080fd5b50604051620036d1380380620036d18339810160408190526200003f91620007c9565b604051806040016040528060068152602001654f726f63686960d01b815250604051806040016040528060068152602001654f524f43484960d01b81525081600390805190602001906200009592919062000706565b508051620000ab90600490602084019062000706565b505050620000c8620000c26200048b60201b60201c565b6200048f565b81620000d6816001620004e1565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000121573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000147919062000801565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000195573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bb919062000801565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f919062000801565b6001600160a01b031660a08190526200024a906001620004e1565b60a0516200025a9060016200056c565b6212750060195561016d6018556a01ac630cbc36a242600000620002806064826200083c565b6007556064620002928260026200085f565b6200029e91906200083c565b600955612710620002b18260056200085f565b620002bd91906200083c565b6008556003600e8190556002600f8190556005600d819055601192909255601255601055600680546001600160a01b0319908116730cec5130e0b85650cfa695020cc76e4fea9e211017909155601a80546001600160a01b0386169216821790556200032b903083620005c0565b601a546001600160a01b031660009081526015602081905260408220805460ff1916600190811790915591620003696005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601584528281208054861660019081179091557f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054871682179055601a54909216815260169384905291822080549094168117909355620004046005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526016909252812080548316600190811790915561dead9091527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b57805490921617905562000481338262000621565b50505050620008d9565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006795760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000538565b80600260008282546200068d919062000881565b90915550506001600160a01b03821660009081526020819052604081208054839290620006bc90849062000881565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000714906200089c565b90600052602060002090601f01602090048101928262000738576000855562000783565b82601f106200075357805160ff191683800117855562000783565b8280016001018555821562000783579182015b828111156200078357825182559160200191906001019062000766565b506200079192915062000795565b5090565b5b8082111562000791576000815560010162000796565b80516001600160a01b0381168114620007c457600080fd5b919050565b60008060408385031215620007dd57600080fd5b620007e883620007ac565b9150620007f860208401620007ac565b90509250929050565b6000602082840312156200081457600080fd5b6200081f82620007ac565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000826200085a57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200087c576200087c62000826565b500290565b6000821982111562000897576200089762000826565b500190565b600181811c90821680620008b157607f821691505b60208210811415620008d357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612da8620009296000396000818161054001526113c50152600081816103f801528181612727015281816127e00152818161281c0152818161289601526128f30152612da86000f3fe6080604052600436106103395760003560e01c8063817b1cd2116101ab578063c0246668116100f7578063e2ead22411610095578063f36c8c691161006f578063f36c8c6914610a12578063f8b45b0514610a48578063f9124a5414610a5e578063fe56079214610a7457600080fd5b8063e2ead224146109c7578063e2f45605146109dc578063f2fde38b146109f257600080fd5b8063cc1776d3116100d1578063cc1776d31461092c578063cf8ab30d1461094b578063d257b34f14610961578063dd62ed3e1461098157600080fd5b8063c0246668146108d6578063c18bc195146108f6578063c8c8ebe41461091657600080fd5b8063a457c2d711610164578063aacebbe31161013e578063aacebbe314610856578063b62496f514610876578063bbc0c742146108a6578063bd30558e146108c057600080fd5b8063a457c2d7146107f6578063a694fc3a14610816578063a9059cbb1461083657600080fd5b8063817b1cd21461074d5780638da5cb5b14610763578063924de9b71461078157806395d89b41146107a157806396ed7f89146107b65780639a7a23d6146107d657600080fd5b806342966c681161028557806370a08231116102235780637571336a116101fd5780637571336a1461068b57806375f0a874146106ab57806379ee54f7146106cb5780637b5a23ad146106eb57600080fd5b806370a082311461062b578063715018a614610661578063751039fc1461067657600080fd5b80634f7041a51161025f5780634f7041a51461059257806366ca9b83146105cc5780636a184d80146105ec5780636ddd17131461060c57600080fd5b806342966c681461050e57806349bd5a5e1461052e5780634bb2c7851461056257600080fd5b8063203e727e116102f257806327c8f835116102cc57806327c8f835146104a75780632def6620146104bd578063313ce567146104d257806339509351146104ee57600080fd5b8063203e727e1461044757806323b872dd1461046757806324e7964a1461048757600080fd5b806302dbd8f81461034557806306fdde0314610367578063095ea7b3146103925780630d668087146103c25780631694505e146103e657806318160ddd1461043257600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061036561036036600461296a565b610a94565b005b34801561037357600080fd5b5061037c610b34565b604051610389919061298c565b60405180910390f35b34801561039e57600080fd5b506103b26103ad3660046129f6565b610bc6565b6040519015158152602001610389565b3480156103ce57600080fd5b506103d860195481565b604051908152602001610389565b3480156103f257600080fd5b5061041a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610389565b34801561043e57600080fd5b506002546103d8565b34801561045357600080fd5b50610365610462366004612a22565b610bdc565b34801561047357600080fd5b506103b2610482366004612a3b565b610cb9565b34801561049357600080fd5b50601a5461041a906001600160a01b031681565b3480156104b357600080fd5b5061041a61dead81565b3480156104c957600080fd5b50610365610d63565b3480156104de57600080fd5b5060405160128152602001610389565b3480156104fa57600080fd5b506103b26105093660046129f6565b61101a565b34801561051a57600080fd5b50610365610529366004612a22565b611056565b34801561053a57600080fd5b5061041a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056e57600080fd5b506103b261057d366004612a7c565b60166020526000908152604090205460ff1681565b34801561059e57600080fd5b50600d54600e54600f546105b192919083565b60408051938452602084019290925290820152606001610389565b3480156105d857600080fd5b506103656105e736600461296a565b61108d565b3480156105f857600080fd5b506103d8610607366004612a99565b611120565b34801561061857600080fd5b50600a546103b290610100900460ff1681565b34801561063757600080fd5b506103d8610646366004612a7c565b6001600160a01b031660009081526020819052604090205490565b34801561066d57600080fd5b5061036561114e565b34801561068257600080fd5b506103b2611184565b34801561069757600080fd5b506103656106a6366004612ad3565b6111bd565b3480156106b757600080fd5b5060065461041a906001600160a01b031681565b3480156106d757600080fd5b506103d86106e6366004612a7c565b611212565b3480156106f757600080fd5b5061070b610706366004612a7c565b611287565b6040516103899190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561075957600080fd5b506103d8601b5481565b34801561076f57600080fd5b506005546001600160a01b031661041a565b34801561078d57600080fd5b5061036561079c366004612b0c565b611311565b3480156107ad57600080fd5b5061037c611355565b3480156107c257600080fd5b506103656107d136600461296a565b611364565b3480156107e257600080fd5b506103656107f1366004612ad3565b611399565b34801561080257600080fd5b506103b26108113660046129f6565b611475565b34801561082257600080fd5b50610365610831366004612a22565b61150e565b34801561084257600080fd5b506103b26108513660046129f6565b611715565b34801561086257600080fd5b50610365610871366004612a7c565b611722565b34801561088257600080fd5b506103b2610891366004612a7c565b60176020526000908152604090205460ff1681565b3480156108b257600080fd5b50600a546103b29060ff1681565b3480156108cc57600080fd5b506103d860185481565b3480156108e257600080fd5b506103656108f1366004612ad3565b61176e565b34801561090257600080fd5b50610365610911366004612a22565b6117c3565b34801561092257600080fd5b506103d860075481565b34801561093857600080fd5b506010546011546012546105b192919083565b34801561095757600080fd5b506103d860145481565b34801561096d57600080fd5b506103b261097c366004612a22565b611894565b34801561098d57600080fd5b506103d861099c366004612b29565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d357600080fd5b506103656119e6565b3480156109e857600080fd5b506103d860085481565b3480156109fe57600080fd5b50610365610a0d366004612a7c565b611a3e565b348015610a1e57600080fd5b506103d8610a2d366004612a7c565b6001600160a01b03166000908152601c602052604090205490565b348015610a5457600080fd5b506103d860095481565b348015610a6a57600080fd5b506103d860135481565b348015610a8057600080fd5b50610365610a8f366004612a7c565b611ad6565b6005546001600160a01b03163314610ac75760405162461bcd60e51b8152600401610abe90612b57565b60405180910390fd5b60118290556012819055610adb8183612ba2565b6010819055600b1015610b305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313125206f72206c6573730000006044820152606401610abe565b5050565b606060038054610b4390612bba565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f90612bba565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b5050505050905090565b6000610bd3338484611b2b565b50600192915050565b6005546001600160a01b03163314610c065760405162461bcd60e51b8152600401610abe90612b57565b670de0b6b3a76400006103e8610c1b60025490565b610c26906001612bf5565b610c309190612c14565b610c3a9190612c14565b811015610ca15760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610abe565b610cb381670de0b6b3a7640000612bf5565b60075550565b6000610cc6848484611b8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d4b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abe565b610d588533858403611b2b565b506001949350505050565b336000908152601c6020908152604091829020825160a08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260040154608083015280610dfb5760405162461bcd60e51b815260206004820152601760248201527f43616e277420756e7374616b65203020746f6b656e732e0000000000000000006044820152606401610abe565b81602001514211610e4e5760405162461bcd60e51b815260206004820181905260248201527f43616e277420756e7374616b65206265666f726520756e6c6f636b2074696d656044820152606401610abe565b6000610e5933611212565b9050826040015181610e6b9190612ba2565b905081601b6000828254610e7f9190612c36565b9091555050600080845260608401819052602084018190526040840152608083018051829190610eb0908390612ba2565b905250336000818152601c602090815260409182902086518155908601516001820155908501516002820155606085015160038201556080850151600490910155601a5430916323b872dd916001600160a01b031690610f108587612ba2565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190612c4d565b50336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d82460018442604051610fc793929190612c6a565b60405180910390a2336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d8246002834260405161100d93929190612c6a565b60405180910390a2505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd3918590611051908690612ba2565b611b2b565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610abe90612b57565b61108a33826121fe565b50565b6005546001600160a01b031633146110b75760405162461bcd60e51b8152600401610abe90612b57565b600e829055600f8190556110cb8183612ba2565b600d819055600b1015610b305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313125206f72206c6573730000006044820152606401610abe565b600063bbf81e00826111328587612bf5565b61113c9190612bf5565b6111469190612c14565b949350505050565b6005546001600160a01b031633146111785760405162461bcd60e51b8152600401610abe90612b57565b611182600061234c565b565b6005546000906001600160a01b031633146111b15760405162461bcd60e51b8152600401610abe90612b57565b60025460075550600190565b6005546001600160a01b031633146111e75760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601c60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301819052600490910154608083015282906112749042612c36565b9050611146826000015160185483611120565b6112b96040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152601c6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6005546001600160a01b0316331461133b5760405162461bcd60e51b8152600401610abe90612b57565b600a80549115156101000261ff0019909216919091179055565b606060048054610b4390612bba565b6005546001600160a01b0316331461138e5760405162461bcd60e51b8152600401610abe90612b57565b601891909155601955565b6005546001600160a01b031633146113c35760405162461bcd60e51b8152600401610abe90612b57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561146b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abe565b610b30828261239e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abe565b6115043385858403611b2b565b5060019392505050565b6000811161155e5760405162461bcd60e51b815260206004820152601760248201527f63616e206e6f74207374616b65203020746f6b656e73210000000000000000006044820152606401610abe565b336000908152601c6020908152604091829020825160a081018452815480825260018301549382019390935260028201549381019390935260038101546060840152600401546080830152156115cc576115b733611212565b816040018181516115c89190612ba2565b9052505b81816000018181516115de9190612ba2565b90525042606082018190526019546115f591612ba2565b6020808301918252336000908152601c909152604080822084518155925160018401558301516002830155606083015160038301556080830151600490920191909155601b805484929061164a908490612ba2565b9091555050601a546040516323b872dd60e01b81523360048201526001600160a01b0390911660248201526044810183905230906323b872dd906064016020604051808303816000875af11580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4d565b50336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d8246000844260405161170993929190612c6a565b60405180910390a25050565b6000610bd3338484611b8c565b6005546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610abe90612b57565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117985760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117ed5760405162461bcd60e51b8152600401610abe90612b57565b670de0b6b3a76400006103e861180260025490565b61180d906005612bf5565b6118179190612c14565b6118219190612c14565b81101561187c5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610abe565b61188e81670de0b6b3a7640000612bf5565b60095550565b6005546000906001600160a01b031633146118c15760405162461bcd60e51b8152600401610abe90612b57565b620186a06118ce60025490565b6118d9906001612bf5565b6118e39190612c14565b8210156119505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abe565b6103e861195c60025490565b611967906005612bf5565b6119719190612c14565b8211156119dd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abe565b50600855600190565b6005546001600160a01b03163314611a105760405162461bcd60e51b8152600401610abe90612b57565b600a805461ffff1916610101179055611a2a436003612ba2565b600c55611a3942610e10612ba2565b600b55565b6005546001600160a01b03163314611a685760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b038116611acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abe565b61108a8161234c565b6005546001600160a01b03163314611b005760405162461bcd60e51b8152600401610abe90612b57565b601a80546001600160a01b0383166001600160a01b031990911617905561108a813061105160025490565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b80611ba257611b9d838360006123f2565b505050565b6005546001600160a01b03848116911614801590611bce57506005546001600160a01b03838116911614155b8015611be257506001600160a01b03821615155b8015611bf85750600554600160a01b900460ff16155b15611ef157600a5460ff16611c8b576001600160a01b03831660009081526015602052604090205460ff1680611c4657506001600160a01b03821660009081526015602052604090205460ff165b611c8b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abe565b6001600160a01b03831660009081526017602052604090205460ff168015611ccc57506001600160a01b03821660009081526016602052604090205460ff16155b15611db057600754811115611d415760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610abe565b6009546001600160a01b038316600090815260208190526040902054611d679083612ba2565b1115611dab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abe565b611ef1565b6001600160a01b03821660009081526017602052604090205460ff168015611df157506001600160a01b03831660009081526016602052604090205460ff16155b15611e6757600754811115611dab5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610abe565b6001600160a01b03821660009081526016602052604090205460ff16611ef1576009546001600160a01b038316600090815260208190526040902054611ead9083612ba2565b1115611ef15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abe565b6008543060009081526020819052604090205410158015611f195750600a54610100900460ff165b8015611f2f5750600554600160a01b900460ff16155b8015611f5457506001600160a01b03831660009081526017602052604090205460ff16155b8015611f7957506001600160a01b03831660009081526015602052604090205460ff16155b8015611f9e57506001600160a01b03821660009081526015602052604090205460ff16155b15611fcc576005805460ff60a01b1916600160a01b179055611fbe6124fb565b6005805460ff60a01b191690555b6005546001600160a01b03841660009081526015602052604090205460ff600160a01b90920482161591168061201a57506001600160a01b03831660009081526015602052604090205460ff165b15612023575060005b600081156121ec5743600c54111561206a5761204b60646120458560636126a5565b906126b8565b9050806013600082825461205f9190612ba2565b909155506121ce9050565b6001600160a01b03841660009081526017602052604090205460ff168015612093575060105415155b156121265742600b5411156120b25761204b60646120458560196126a5565b6010546120c7906064906120459086906126a5565b601054601254919250906120db9083612bf5565b6120e59190612c14565b601460008282546120f69190612ba2565b909155505060105460115461210b9083612bf5565b6121159190612c14565b6013600082825461205f9190612ba2565b6001600160a01b03851660009081526017602052604090205460ff16801561214f5750600d5415155b156121ce57600d54612169906064906120459086906126a5565b600d54600f549192509061217d9083612bf5565b6121879190612c14565b601460008282546121989190612ba2565b9091555050600d54600e546121ad9083612bf5565b6121b79190612c14565b601360008282546121c89190612ba2565b90915550505b80156121ec576121df8530836123f2565b6121e98184612c36565b92505b6121f78585856123f2565b5050505050565b6001600160a01b03821661225e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abe565b6001600160a01b038216600090815260208190526040902054818110156122d25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610abe565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612301908490612c36565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166000908152602081905260409020548181101561246a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abe565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124a1908490612ba2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124ed91815260200190565b60405180910390a350505050565b306000908152602081905260408120549050600060135460145461251f9190612ba2565b9050600082158061252e575081155b1561253857505050565b600854612546906014612bf5565b83111561255e5760085461255b906014612bf5565b92505b6000600283601454866125719190612bf5565b61257b9190612c14565b6125859190612c14565b9050600061259385836126c4565b90504761259f826126d0565b60006125ab47836126c4565b905060006125c887612045601354856126a590919063ffffffff16565b905060006125d68284612c36565b6000601355905085158015906125ec5750600081115b1561263f576125fb8682612890565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600060148190556006546040516001600160a01b039091169147919081818185875af1925050503d8060008114612692576040519150601f19603f3d011682016040523d82523d6000602084013e612697565b606091505b505050505050505050505050565b60006126b18284612bf5565b9392505050565b60006126b18284612c14565b60006126b18284612c36565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061270557612705612ca0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190612cb6565b816001815181106127ba576127ba612ca0565b60200260200101906001600160a01b031690816001600160a01b031681525050612805307f000000000000000000000000000000000000000000000000000000000000000084611b2b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061285a908590600090869030904290600401612cd3565b600060405180830381600087803b15801561287457600080fd5b505af1158015612888573d6000803e3d6000fd5b505050505050565b6128bb307f000000000000000000000000000000000000000000000000000000000000000084611b2b565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612945573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121f79190612d44565b6000806040838503121561297d57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156129b95785810183015185820160400152820161299d565b818111156129cb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108a57600080fd5b60008060408385031215612a0957600080fd5b8235612a14816129e1565b946020939093013593505050565b600060208284031215612a3457600080fd5b5035919050565b600080600060608486031215612a5057600080fd5b8335612a5b816129e1565b92506020840135612a6b816129e1565b929592945050506040919091013590565b600060208284031215612a8e57600080fd5b81356126b1816129e1565b600080600060608486031215612aae57600080fd5b505081359360208301359350604090920135919050565b801515811461108a57600080fd5b60008060408385031215612ae657600080fd5b8235612af1816129e1565b91506020830135612b0181612ac5565b809150509250929050565b600060208284031215612b1e57600080fd5b81356126b181612ac5565b60008060408385031215612b3c57600080fd5b8235612b47816129e1565b91506020830135612b01816129e1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612bb557612bb5612b8c565b500190565b600181811c90821680612bce57607f821691505b60208210811415612bef57634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612c0f57612c0f612b8c565b500290565b600082612c3157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612c4857612c48612b8c565b500390565b600060208284031215612c5f57600080fd5b81516126b181612ac5565b6060810160038510612c8c57634e487b7160e01b600052602160045260246000fd5b938152602081019290925260409091015290565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cc857600080fd5b81516126b1816129e1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d235784516001600160a01b031683529383019391830191600101612cfe565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d5957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dfefc91429ddfbb0b07531fd3e8246f4127dca31923846a1237a8b189453d93564736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000038183433e278e249bf5c218e9731ab688784cb0b

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063817b1cd2116101ab578063c0246668116100f7578063e2ead22411610095578063f36c8c691161006f578063f36c8c6914610a12578063f8b45b0514610a48578063f9124a5414610a5e578063fe56079214610a7457600080fd5b8063e2ead224146109c7578063e2f45605146109dc578063f2fde38b146109f257600080fd5b8063cc1776d3116100d1578063cc1776d31461092c578063cf8ab30d1461094b578063d257b34f14610961578063dd62ed3e1461098157600080fd5b8063c0246668146108d6578063c18bc195146108f6578063c8c8ebe41461091657600080fd5b8063a457c2d711610164578063aacebbe31161013e578063aacebbe314610856578063b62496f514610876578063bbc0c742146108a6578063bd30558e146108c057600080fd5b8063a457c2d7146107f6578063a694fc3a14610816578063a9059cbb1461083657600080fd5b8063817b1cd21461074d5780638da5cb5b14610763578063924de9b71461078157806395d89b41146107a157806396ed7f89146107b65780639a7a23d6146107d657600080fd5b806342966c681161028557806370a08231116102235780637571336a116101fd5780637571336a1461068b57806375f0a874146106ab57806379ee54f7146106cb5780637b5a23ad146106eb57600080fd5b806370a082311461062b578063715018a614610661578063751039fc1461067657600080fd5b80634f7041a51161025f5780634f7041a51461059257806366ca9b83146105cc5780636a184d80146105ec5780636ddd17131461060c57600080fd5b806342966c681461050e57806349bd5a5e1461052e5780634bb2c7851461056257600080fd5b8063203e727e116102f257806327c8f835116102cc57806327c8f835146104a75780632def6620146104bd578063313ce567146104d257806339509351146104ee57600080fd5b8063203e727e1461044757806323b872dd1461046757806324e7964a1461048757600080fd5b806302dbd8f81461034557806306fdde0314610367578063095ea7b3146103925780630d668087146103c25780631694505e146103e657806318160ddd1461043257600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061036561036036600461296a565b610a94565b005b34801561037357600080fd5b5061037c610b34565b604051610389919061298c565b60405180910390f35b34801561039e57600080fd5b506103b26103ad3660046129f6565b610bc6565b6040519015158152602001610389565b3480156103ce57600080fd5b506103d860195481565b604051908152602001610389565b3480156103f257600080fd5b5061041a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610389565b34801561043e57600080fd5b506002546103d8565b34801561045357600080fd5b50610365610462366004612a22565b610bdc565b34801561047357600080fd5b506103b2610482366004612a3b565b610cb9565b34801561049357600080fd5b50601a5461041a906001600160a01b031681565b3480156104b357600080fd5b5061041a61dead81565b3480156104c957600080fd5b50610365610d63565b3480156104de57600080fd5b5060405160128152602001610389565b3480156104fa57600080fd5b506103b26105093660046129f6565b61101a565b34801561051a57600080fd5b50610365610529366004612a22565b611056565b34801561053a57600080fd5b5061041a7f000000000000000000000000811d7bc6bf91882b4deed455cc01f298f81c88be81565b34801561056e57600080fd5b506103b261057d366004612a7c565b60166020526000908152604090205460ff1681565b34801561059e57600080fd5b50600d54600e54600f546105b192919083565b60408051938452602084019290925290820152606001610389565b3480156105d857600080fd5b506103656105e736600461296a565b61108d565b3480156105f857600080fd5b506103d8610607366004612a99565b611120565b34801561061857600080fd5b50600a546103b290610100900460ff1681565b34801561063757600080fd5b506103d8610646366004612a7c565b6001600160a01b031660009081526020819052604090205490565b34801561066d57600080fd5b5061036561114e565b34801561068257600080fd5b506103b2611184565b34801561069757600080fd5b506103656106a6366004612ad3565b6111bd565b3480156106b757600080fd5b5060065461041a906001600160a01b031681565b3480156106d757600080fd5b506103d86106e6366004612a7c565b611212565b3480156106f757600080fd5b5061070b610706366004612a7c565b611287565b6040516103899190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561075957600080fd5b506103d8601b5481565b34801561076f57600080fd5b506005546001600160a01b031661041a565b34801561078d57600080fd5b5061036561079c366004612b0c565b611311565b3480156107ad57600080fd5b5061037c611355565b3480156107c257600080fd5b506103656107d136600461296a565b611364565b3480156107e257600080fd5b506103656107f1366004612ad3565b611399565b34801561080257600080fd5b506103b26108113660046129f6565b611475565b34801561082257600080fd5b50610365610831366004612a22565b61150e565b34801561084257600080fd5b506103b26108513660046129f6565b611715565b34801561086257600080fd5b50610365610871366004612a7c565b611722565b34801561088257600080fd5b506103b2610891366004612a7c565b60176020526000908152604090205460ff1681565b3480156108b257600080fd5b50600a546103b29060ff1681565b3480156108cc57600080fd5b506103d860185481565b3480156108e257600080fd5b506103656108f1366004612ad3565b61176e565b34801561090257600080fd5b50610365610911366004612a22565b6117c3565b34801561092257600080fd5b506103d860075481565b34801561093857600080fd5b506010546011546012546105b192919083565b34801561095757600080fd5b506103d860145481565b34801561096d57600080fd5b506103b261097c366004612a22565b611894565b34801561098d57600080fd5b506103d861099c366004612b29565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d357600080fd5b506103656119e6565b3480156109e857600080fd5b506103d860085481565b3480156109fe57600080fd5b50610365610a0d366004612a7c565b611a3e565b348015610a1e57600080fd5b506103d8610a2d366004612a7c565b6001600160a01b03166000908152601c602052604090205490565b348015610a5457600080fd5b506103d860095481565b348015610a6a57600080fd5b506103d860135481565b348015610a8057600080fd5b50610365610a8f366004612a7c565b611ad6565b6005546001600160a01b03163314610ac75760405162461bcd60e51b8152600401610abe90612b57565b60405180910390fd5b60118290556012819055610adb8183612ba2565b6010819055600b1015610b305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313125206f72206c6573730000006044820152606401610abe565b5050565b606060038054610b4390612bba565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f90612bba565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b5050505050905090565b6000610bd3338484611b2b565b50600192915050565b6005546001600160a01b03163314610c065760405162461bcd60e51b8152600401610abe90612b57565b670de0b6b3a76400006103e8610c1b60025490565b610c26906001612bf5565b610c309190612c14565b610c3a9190612c14565b811015610ca15760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610abe565b610cb381670de0b6b3a7640000612bf5565b60075550565b6000610cc6848484611b8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d4b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abe565b610d588533858403611b2b565b506001949350505050565b336000908152601c6020908152604091829020825160a08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260040154608083015280610dfb5760405162461bcd60e51b815260206004820152601760248201527f43616e277420756e7374616b65203020746f6b656e732e0000000000000000006044820152606401610abe565b81602001514211610e4e5760405162461bcd60e51b815260206004820181905260248201527f43616e277420756e7374616b65206265666f726520756e6c6f636b2074696d656044820152606401610abe565b6000610e5933611212565b9050826040015181610e6b9190612ba2565b905081601b6000828254610e7f9190612c36565b9091555050600080845260608401819052602084018190526040840152608083018051829190610eb0908390612ba2565b905250336000818152601c602090815260409182902086518155908601516001820155908501516002820155606085015160038201556080850151600490910155601a5430916323b872dd916001600160a01b031690610f108587612ba2565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190612c4d565b50336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d82460018442604051610fc793929190612c6a565b60405180910390a2336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d8246002834260405161100d93929190612c6a565b60405180910390a2505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bd3918590611051908690612ba2565b611b2b565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610abe90612b57565b61108a33826121fe565b50565b6005546001600160a01b031633146110b75760405162461bcd60e51b8152600401610abe90612b57565b600e829055600f8190556110cb8183612ba2565b600d819055600b1015610b305760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313125206f72206c6573730000006044820152606401610abe565b600063bbf81e00826111328587612bf5565b61113c9190612bf5565b6111469190612c14565b949350505050565b6005546001600160a01b031633146111785760405162461bcd60e51b8152600401610abe90612b57565b611182600061234c565b565b6005546000906001600160a01b031633146111b15760405162461bcd60e51b8152600401610abe90612b57565b60025460075550600190565b6005546001600160a01b031633146111e75760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601c60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301819052600490910154608083015282906112749042612c36565b9050611146826000015160185483611120565b6112b96040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152601c6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6005546001600160a01b0316331461133b5760405162461bcd60e51b8152600401610abe90612b57565b600a80549115156101000261ff0019909216919091179055565b606060048054610b4390612bba565b6005546001600160a01b0316331461138e5760405162461bcd60e51b8152600401610abe90612b57565b601891909155601955565b6005546001600160a01b031633146113c35760405162461bcd60e51b8152600401610abe90612b57565b7f000000000000000000000000811d7bc6bf91882b4deed455cc01f298f81c88be6001600160a01b0316826001600160a01b0316141561146b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abe565b610b30828261239e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114f75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abe565b6115043385858403611b2b565b5060019392505050565b6000811161155e5760405162461bcd60e51b815260206004820152601760248201527f63616e206e6f74207374616b65203020746f6b656e73210000000000000000006044820152606401610abe565b336000908152601c6020908152604091829020825160a081018452815480825260018301549382019390935260028201549381019390935260038101546060840152600401546080830152156115cc576115b733611212565b816040018181516115c89190612ba2565b9052505b81816000018181516115de9190612ba2565b90525042606082018190526019546115f591612ba2565b6020808301918252336000908152601c909152604080822084518155925160018401558301516002830155606083015160038301556080830151600490920191909155601b805484929061164a908490612ba2565b9091555050601a546040516323b872dd60e01b81523360048201526001600160a01b0390911660248201526044810183905230906323b872dd906064016020604051808303816000875af11580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4d565b50336001600160a01b03167f75a5c44d8bbdc7919077111f5c4e932ca7491d59b0a3074ba89fd5ca6d69d8246000844260405161170993929190612c6a565b60405180910390a25050565b6000610bd3338484611b8c565b6005546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610abe90612b57565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117985760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117ed5760405162461bcd60e51b8152600401610abe90612b57565b670de0b6b3a76400006103e861180260025490565b61180d906005612bf5565b6118179190612c14565b6118219190612c14565b81101561187c5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610abe565b61188e81670de0b6b3a7640000612bf5565b60095550565b6005546000906001600160a01b031633146118c15760405162461bcd60e51b8152600401610abe90612b57565b620186a06118ce60025490565b6118d9906001612bf5565b6118e39190612c14565b8210156119505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abe565b6103e861195c60025490565b611967906005612bf5565b6119719190612c14565b8211156119dd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abe565b50600855600190565b6005546001600160a01b03163314611a105760405162461bcd60e51b8152600401610abe90612b57565b600a805461ffff1916610101179055611a2a436003612ba2565b600c55611a3942610e10612ba2565b600b55565b6005546001600160a01b03163314611a685760405162461bcd60e51b8152600401610abe90612b57565b6001600160a01b038116611acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abe565b61108a8161234c565b6005546001600160a01b03163314611b005760405162461bcd60e51b8152600401610abe90612b57565b601a80546001600160a01b0383166001600160a01b031990911617905561108a813061105160025490565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b80611ba257611b9d838360006123f2565b505050565b6005546001600160a01b03848116911614801590611bce57506005546001600160a01b03838116911614155b8015611be257506001600160a01b03821615155b8015611bf85750600554600160a01b900460ff16155b15611ef157600a5460ff16611c8b576001600160a01b03831660009081526015602052604090205460ff1680611c4657506001600160a01b03821660009081526015602052604090205460ff165b611c8b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abe565b6001600160a01b03831660009081526017602052604090205460ff168015611ccc57506001600160a01b03821660009081526016602052604090205460ff16155b15611db057600754811115611d415760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610abe565b6009546001600160a01b038316600090815260208190526040902054611d679083612ba2565b1115611dab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abe565b611ef1565b6001600160a01b03821660009081526017602052604090205460ff168015611df157506001600160a01b03831660009081526016602052604090205460ff16155b15611e6757600754811115611dab5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610abe565b6001600160a01b03821660009081526016602052604090205460ff16611ef1576009546001600160a01b038316600090815260208190526040902054611ead9083612ba2565b1115611ef15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abe565b6008543060009081526020819052604090205410158015611f195750600a54610100900460ff165b8015611f2f5750600554600160a01b900460ff16155b8015611f5457506001600160a01b03831660009081526017602052604090205460ff16155b8015611f7957506001600160a01b03831660009081526015602052604090205460ff16155b8015611f9e57506001600160a01b03821660009081526015602052604090205460ff16155b15611fcc576005805460ff60a01b1916600160a01b179055611fbe6124fb565b6005805460ff60a01b191690555b6005546001600160a01b03841660009081526015602052604090205460ff600160a01b90920482161591168061201a57506001600160a01b03831660009081526015602052604090205460ff165b15612023575060005b600081156121ec5743600c54111561206a5761204b60646120458560636126a5565b906126b8565b9050806013600082825461205f9190612ba2565b909155506121ce9050565b6001600160a01b03841660009081526017602052604090205460ff168015612093575060105415155b156121265742600b5411156120b25761204b60646120458560196126a5565b6010546120c7906064906120459086906126a5565b601054601254919250906120db9083612bf5565b6120e59190612c14565b601460008282546120f69190612ba2565b909155505060105460115461210b9083612bf5565b6121159190612c14565b6013600082825461205f9190612ba2565b6001600160a01b03851660009081526017602052604090205460ff16801561214f5750600d5415155b156121ce57600d54612169906064906120459086906126a5565b600d54600f549192509061217d9083612bf5565b6121879190612c14565b601460008282546121989190612ba2565b9091555050600d54600e546121ad9083612bf5565b6121b79190612c14565b601360008282546121c89190612ba2565b90915550505b80156121ec576121df8530836123f2565b6121e98184612c36565b92505b6121f78585856123f2565b5050505050565b6001600160a01b03821661225e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abe565b6001600160a01b038216600090815260208190526040902054818110156122d25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610abe565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612301908490612c36565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166000908152602081905260409020548181101561246a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abe565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124a1908490612ba2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124ed91815260200190565b60405180910390a350505050565b306000908152602081905260408120549050600060135460145461251f9190612ba2565b9050600082158061252e575081155b1561253857505050565b600854612546906014612bf5565b83111561255e5760085461255b906014612bf5565b92505b6000600283601454866125719190612bf5565b61257b9190612c14565b6125859190612c14565b9050600061259385836126c4565b90504761259f826126d0565b60006125ab47836126c4565b905060006125c887612045601354856126a590919063ffffffff16565b905060006125d68284612c36565b6000601355905085158015906125ec5750600081115b1561263f576125fb8682612890565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600060148190556006546040516001600160a01b039091169147919081818185875af1925050503d8060008114612692576040519150601f19603f3d011682016040523d82523d6000602084013e612697565b606091505b505050505050505050505050565b60006126b18284612bf5565b9392505050565b60006126b18284612c14565b60006126b18284612c36565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061270557612705612ca0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190612cb6565b816001815181106127ba576127ba612ca0565b60200260200101906001600160a01b031690816001600160a01b031681525050612805307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061285a908590600090869030904290600401612cd3565b600060405180830381600087803b15801561287457600080fd5b505af1158015612888573d6000803e3d6000fd5b505050505050565b6128bb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2b565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612945573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121f79190612d44565b6000806040838503121561297d57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156129b95785810183015185820160400152820161299d565b818111156129cb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108a57600080fd5b60008060408385031215612a0957600080fd5b8235612a14816129e1565b946020939093013593505050565b600060208284031215612a3457600080fd5b5035919050565b600080600060608486031215612a5057600080fd5b8335612a5b816129e1565b92506020840135612a6b816129e1565b929592945050506040919091013590565b600060208284031215612a8e57600080fd5b81356126b1816129e1565b600080600060608486031215612aae57600080fd5b505081359360208301359350604090920135919050565b801515811461108a57600080fd5b60008060408385031215612ae657600080fd5b8235612af1816129e1565b91506020830135612b0181612ac5565b809150509250929050565b600060208284031215612b1e57600080fd5b81356126b181612ac5565b60008060408385031215612b3c57600080fd5b8235612b47816129e1565b91506020830135612b01816129e1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612bb557612bb5612b8c565b500190565b600181811c90821680612bce57607f821691505b60208210811415612bef57634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612c0f57612c0f612b8c565b500290565b600082612c3157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612c4857612c48612b8c565b500390565b600060208284031215612c5f57600080fd5b81516126b181612ac5565b6060810160038510612c8c57634e487b7160e01b600052602160045260246000fd5b938152602081019290925260409091015290565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612cc857600080fd5b81516126b1816129e1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d235784516001600160a01b031683529383019391830191600101612cfe565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d5957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dfefc91429ddfbb0b07531fd3e8246f4127dca31923846a1237a8b189453d93564736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000038183433e278e249bf5c218e9731ab688784cb0b

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _stakingVault (address): 0x38183433e278e249bf5c218E9731Ab688784cb0b

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000038183433e278e249bf5c218e9731ab688784cb0b


Deployed Bytecode Sourcemap

32342:17646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38756:341;;;;;;;;;;-1:-1:-1;38756:341:0;;;;;:::i;:::-;;:::i;:::-;;9521:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11829:210;;;;;;;;;;-1:-1:-1;11829:210:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;11829:210:0;1325:187:1;34356:23:0;;;;;;;;;;;;;;;;;;;1663:25:1;;;1651:2;1636:18;34356:23:0;1517:177:1;32418:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1890:32:1;;;1872:51;;1860:2;1845:18;32418:51:0;1699:230:1;10641:108:0;;;;;;;;;;-1:-1:-1;10729:12:0;;10641:108;;37495:275;;;;;;;;;;-1:-1:-1;37495:275:0;;;;;:::i;:::-;;:::i;12521:529::-;;;;;;;;;;-1:-1:-1;12521:529:0;;;;;:::i;:::-;;:::i;34388:27::-;;;;;;;;;;-1:-1:-1;34388:27:0;;;;-1:-1:-1;;;;;34388:27:0;;;32521:53;;;;;;;;;;;;32567:6;32521:53;;47796:1198;;;;;;;;;;;;;:::i;10483:93::-;;;;;;;;;;-1:-1:-1;10483:93:0;;10566:2;2930:36:1;;2918:2;2903:18;10483:93:0;2788:184:1;13459:297:0;;;;;;;;;;-1:-1:-1;13459:297:0;;;;;:::i;:::-;;:::i;46722:93::-;;;;;;;;;;-1:-1:-1;46722:93:0;;;;;:::i;:::-;;:::i;32476:38::-;;;;;;;;;;;;;;;33315:62;;;;;;;;;;-1:-1:-1;33315:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33043:17;;;;;;;;;;-1:-1:-1;33043:17:0;;;;;;;;;;;;;;;;3431:25:1;;;3487:2;3472:18;;3465:34;;;;3515:18;;;3508:34;3419:2;3404:18;33043:17:0;3229:319:1;38412:336:0;;;;;;;;;;-1:-1:-1;38412:336:0;;;;;:::i;:::-;;:::i;49416:268::-;;;;;;;;;;-1:-1:-1;49416:268:0;;;;;:::i;:::-;;:::i;32807:31::-;;;;;;;;;;-1:-1:-1;32807:31:0;;;;;;;;;;;10812:177;;;;;;;;;;-1:-1:-1;10812:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10963:18:0;10931:7;10963:18;;;;;;;;;;;;10812:177;2640:103;;;;;;;;;;;;;:::i;36785:135::-;;;;;;;;;;;;;:::i;38042:166::-;;;;;;;;;;-1:-1:-1;38042:166:0;;;;;:::i;:::-;;:::i;32613:30::-;;;;;;;;;;-1:-1:-1;32613:30:0;;;;-1:-1:-1;;;;;32613:30:0;;;49002:406;;;;;;;;;;-1:-1:-1;49002:406:0;;;;;:::i;:::-;;:::i;49692:159::-;;;;;;;;;;-1:-1:-1;49692:159:0;;;;;:::i;:::-;;:::i;:::-;;;;;;4536:4:1;4578:3;4567:9;4563:19;4555:27;;4615:6;4609:13;4598:9;4591:32;4679:4;4671:6;4667:17;4661:24;4654:4;4643:9;4639:20;4632:54;4742:4;4734:6;4730:17;4724:24;4717:4;4706:9;4702:20;4695:54;4805:4;4797:6;4793:17;4787:24;4780:4;4769:9;4765:20;4758:54;4868:4;4860:6;4856:17;4850:24;4843:4;4832:9;4828:20;4821:54;4384:497;;;;;34439:26:0;;;;;;;;;;;;;;;;1989:87;;;;;;;;;;-1:-1:-1;2062:6:0;;-1:-1:-1;;;;;2062:6:0;1989:87;;38304:100;;;;;;;;;;-1:-1:-1;38304:100:0;;;;;:::i;:::-;;:::i;9740:104::-;;;;;;;;;;;;;:::i;40085:163::-;;;;;;;;;;-1:-1:-1;40085:163:0;;;;;:::i;:::-;;:::i;39244:304::-;;;;;;;;;;-1:-1:-1;39244:304:0;;;;;:::i;:::-;;:::i;14259:482::-;;;;;;;;;;-1:-1:-1;14259:482:0;;;;;:::i;:::-;;:::i;46823:965::-;;;;;;;;;;-1:-1:-1;46823:965:0;;;;;:::i;:::-;;:::i;11202:216::-;;;;;;;;;;-1:-1:-1;11202:216:0;;;;;:::i;:::-;;:::i;39750:156::-;;;;;;;;;;-1:-1:-1;39750:156:0;;;;;:::i;:::-;;:::i;33535:57::-;;;;;;;;;;-1:-1:-1;33535:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32767:33;;;;;;;;;;-1:-1:-1;32767:33:0;;;;;;;;34331:18;;;;;;;;;;;;;;;;39105:131;;;;;;;;;;-1:-1:-1;39105:131:0;;;;;:::i;:::-;;:::i;37778:256::-;;;;;;;;;;-1:-1:-1;37778:256:0;;;;;:::i;:::-;;:::i;32652:35::-;;;;;;;;;;;;;;;;33067:18;;;;;;;;;;-1:-1:-1;33067:18:0;;;;;;;;;;;;33134:33;;;;;;;;;;;;;;;;36990:497;;;;;;;;;;-1:-1:-1;36990:497:0;;;;;:::i;:::-;;:::i;11481:201::-;;;;;;;;;;-1:-1:-1;11481:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;11647:18:0;;;11615:7;11647:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11481:201;36511:222;;;;;;;;;;;;;:::i;32694:33::-;;;;;;;;;;;;;;;;2898:238;;;;;;;;;;-1:-1:-1;2898:238:0;;;;;:::i;:::-;;:::i;49859:126::-;;;;;;;;;;-1:-1:-1;49859:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;49949:16:0;49922:7;49949:16;;;:7;:16;;;;;:28;;49859:126;32734:24;;;;;;;;;;;;;;;;33094:33;;;;;;;;;;;;;;;;39914:163;;;;;;;;;;-1:-1:-1;39914:163:0;;;;;:::i;:::-;;:::i;38756:341::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;;;;;;;;;38879:20;:36;;;38926:13;:29;;;38985::::1;38942:13:::0;38902;38985:29:::1;:::i;:::-;38966:7;:48:::0;;;39053:2:::1;-1:-1:-1::0;39033:22:0::1;39025:64;;;::::0;-1:-1:-1;;;39025:64:0;;6353:2:1;39025:64:0::1;::::0;::::1;6335:21:1::0;6392:2;6372:18;;;6365:30;6431:31;6411:18;;;6404:59;6480:18;;39025:64:0::1;6151:353:1::0;39025:64:0::1;38756:341:::0;;:::o;9521:100::-;9575:13;9608:5;9601:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:100;:::o;11829:210::-;11948:4;11970:39;717:10;11993:7;12002:6;11970:8;:39::i;:::-;-1:-1:-1;12027:4:0;11829:210;;;;:::o;37495:275::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;37632:4:::1;37624;37603:13;10729:12:::0;;;10641:108;37603:13:::1;:17;::::0;37619:1:::1;37603:17;:::i;:::-;37602:26;;;;:::i;:::-;37601:35;;;;:::i;:::-;37591:6;:45;;37569:142;;;::::0;-1:-1:-1;;;37569:142:0;;7491:2:1;37569:142:0::1;::::0;::::1;7473:21:1::0;7530:2;7510:18;;;7503:30;7569:34;7549:18;;;7542:62;-1:-1:-1;;;7620:18:1;;;7613:45;7675:19;;37569:142:0::1;7289:411:1::0;37569:142:0::1;37745:17;:6:::0;37755::::1;37745:17;:::i;:::-;37722:20;:40:::0;-1:-1:-1;37495:275:0:o;12521:529::-;12661:4;12678:36;12688:6;12696:9;12707:6;12678:9;:36::i;:::-;-1:-1:-1;;;;;12754:19:0;;12727:24;12754:19;;;:11;:19;;;;;;;;717:10;12754:33;;;;;;;;12820:26;;;;12798:116;;;;-1:-1:-1;;;12798:116:0;;7907:2:1;12798:116:0;;;7889:21:1;7946:2;7926:18;;;7919:30;7985:34;7965:18;;;7958:62;-1:-1:-1;;;8036:18:1;;;8029:38;8084:19;;12798:116:0;7705:404:1;12798:116:0;12950:57;12959:6;717:10;13000:6;12981:16;:25;12950:8;:57::i;:::-;-1:-1:-1;13038:4:0;;12521:529;-1:-1:-1;;;;12521:529:0:o;47796:1198::-;47920:10;47882:27;47912:19;;;:7;:19;;;;;;;;;47882:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48030:19;48022:55;;;;-1:-1:-1;;;48022:55:0;;8316:2:1;48022:55:0;;;8298:21:1;8355:2;8335:18;;;8328:30;8394:25;8374:18;;;8367:53;8437:18;;48022:55:0;8114:347:1;48022:55:0;48128:7;:11;;;48110:15;:29;48088:111;;;;-1:-1:-1;;;48088:111:0;;8668:2:1;48088:111:0;;;8650:21:1;;;8687:18;;;8680:30;8746:34;8726:18;;;8719:62;8798:18;;48088:111:0;8466:356:1;48088:111:0;48212:14;48229:22;48240:10;48229;:22::i;:::-;48212:39;;48272:7;:20;;;48262:30;;;;;:::i;:::-;;;48320:15;48305:11;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;48370:1:0;48348:23;;;48382:13;;;:17;;;48410:11;;;:15;;;-1:-1:-1;48436:20:0;;:24;48471:14;;;:24;;48489:6;;48471:14;:24;;48489:6;;48471:24;:::i;:::-;;;-1:-1:-1;48516:10:0;48508:19;;;;:7;:19;;;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48599:12;;48565:4;;48550:34;;-1:-1:-1;;;;;48599:12:0;;48651:24;48669:6;48651:15;:24;:::i;:::-;48550:136;;-1:-1:-1;;;;;;48550:136:0;;;;;;;-1:-1:-1;;;;;9215:15:1;;;48550:136:0;;;9197:34:1;9267:15;;;;9247:18;;;9240:43;9299:18;;;9292:34;9132:18;;48550:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48727:10;-1:-1:-1;;;;;48702:138:0;;48752:17;48784:15;48814;48702:138;;;;;;;;:::i;:::-;;;;;;;;48881:10;-1:-1:-1;;;;;48856:130:0;;48906:18;48939:6;48960:15;48856:130;;;;;;;;:::i;:::-;;;;;;;;47824:1170;;;47796:1198::o;13459:297::-;717:10;13574:4;13668:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13668:34:0;;;;;;;;;;13574:4;;13596:130;;13646:7;;13668:47;;13705:10;;13668:47;:::i;:::-;13596:8;:130::i;46722:93::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;46780:27:::1;717:10:::0;46800:6:::1;46780:5;:27::i;:::-;46722:93:::0;:::o;38412:336::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;38534:19;:35;;;38580:12;:28;;;38637:29:::1;38595:13:::0;38556;38637:29:::1;:::i;:::-;38619:6;:47:::0;;;38704:2:::1;-1:-1:-1::0;38685:21:0::1;38677:63;;;::::0;-1:-1:-1;;;38677:63:0;;6353:2:1;38677:63:0::1;::::0;::::1;6335:21:1::0;6392:2;6372:18;;;6365:30;6431:31;6411:18;;;6404:59;6480:18;;38677:63:0::1;6151:353:1::0;49416:268:0;49559:7;49619:13;49606:8;49587:16;49599:4;49587:9;:16;:::i;:::-;:27;;;;:::i;:::-;49586:47;;;;:::i;:::-;49579:54;49416:268;-1:-1:-1;;;;49416:268:0:o;2640:103::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;2705:30:::1;2732:1;2705:18;:30::i;:::-;2640:103::o:0;36785:135::-;2062:6;;36837:4;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;10729:12;;36854:20:::1;:36:::0;-1:-1:-1;36908:4:0::1;36785:135:::0;:::o;38042:166::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38155:38:0;;;::::1;;::::0;;;:30:::1;:38;::::0;;;;:45;;-1:-1:-1;;38155:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38042:166::o;49002:406::-;-1:-1:-1;;;;;49151:16:0;;49087;49151;;;:7;:16;;;;;;;;49121:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49087:16;;49200:31;;:15;:31;:::i;:::-;49178:53;;49284:116;49326:7;:19;;;49360:3;;49378:11;49284:27;:116::i;49692:159::-;49783:19;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49783:19:0;-1:-1:-1;;;;;;49827:16:0;;;;;:7;:16;;;;;;;;;49820:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49692:159::o;38304:100::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;38375:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;38375:21:0;;::::1;::::0;;;::::1;::::0;;38304:100::o;9740:104::-;9796:13;9829:7;9822:14;;;;;:::i;40085:163::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;40195:3:::1;:12:::0;;;;40218:8:::1;:22:::0;40085:163::o;39244:304::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;39388:13:::1;-1:-1:-1::0;;;;;39380:21:0::1;:4;-1:-1:-1::0;;;;;39380:21:0::1;;;39358:128;;;::::0;-1:-1:-1;;;39358:128:0;;10278:2:1;39358:128:0::1;::::0;::::1;10260:21:1::0;10317:2;10297:18;;;10290:30;10356:34;10336:18;;;10329:62;10427:27;10407:18;;;10400:55;10472:19;;39358:128:0::1;10076:421:1::0;39358:128:0::1;39499:41;39528:4;39534:5;39499:28;:41::i;14259:482::-:0;717:10;14379:4;14428:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14428:34:0;;;;;;;;;;14495:35;;;;14473:122;;;;-1:-1:-1;;;14473:122:0;;10704:2:1;14473:122:0;;;10686:21:1;10743:2;10723:18;;;10716:30;10782:34;10762:18;;;10755:62;-1:-1:-1;;;10833:18:1;;;10826:35;10878:19;;14473:122:0;10502:401:1;14473:122:0;14631:67;717:10;14654:7;14682:15;14663:16;:34;14631:8;:67::i;:::-;-1:-1:-1;14729:4:0;;14259:482;-1:-1:-1;;;14259:482:0:o;46823:965::-;46928:1;46913:12;:16;46905:52;;;;-1:-1:-1;;;46905:52:0;;11110:2:1;46905:52:0;;;11092:21:1;11149:2;11129:18;;;11122:30;11188:25;11168:18;;;11161:53;11231:18;;46905:52:0;10908:347:1;46905:52:0;47044:10;47006:27;47036:19;;;:7;:19;;;;;;;;;47006:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47113:23;47109:102;;47177:22;47188:10;47177;:22::i;:::-;47153:7;:20;;:46;;;;;;;:::i;:::-;;;-1:-1:-1;47109:102:0;47244:12;47221:7;:19;;:35;;;;;;;:::i;:::-;;;-1:-1:-1;47283:15:0;47267:13;;;:31;;;47341:8;;47323:26;;;:::i;:::-;47309:11;;;;:40;;;47370:10;47362:19;;;;:7;:19;;;;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47469:11;:27;;47484:12;;47362:19;47469:27;;47484:12;;47469:27;:::i;:::-;;;;-1:-1:-1;;47581:12:0;;47507:124;;-1:-1:-1;;;47507:124:0;;47556:10;47507:124;;;9197:34:1;-1:-1:-1;;;;;47581:12:0;;;9247:18:1;;;9240:43;9299:18;;;9292:34;;;47522:4:0;;47507:34;;9132:18:1;;47507:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47672:10;-1:-1:-1;;;;;47647:133:0;;47697:15;47727:12;47754:15;47647:133;;;;;;;;:::i;:::-;;;;;;;;46869:919;46823:965;:::o;11202:216::-;11324:4;11346:42;717:10;11370:9;11381:6;11346:9;:42::i;39750:156::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;39862:15:::1;:36:::0;;-1:-1:-1;;;;;;39862:36:0::1;-1:-1:-1::0;;;;;39862:36:0;;;::::1;::::0;;;::::1;::::0;;39750:156::o;39105:131::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39190:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;39190:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39105:131::o;37778:256::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;37918:4:::1;37910;37889:13;10729:12:::0;;;10641:108;37889:13:::1;:17;::::0;37905:1:::1;37889:17;:::i;:::-;37888:26;;;;:::i;:::-;37887:35;;;;:::i;:::-;37877:6;:45;;37855:131;;;::::0;-1:-1:-1;;;37855:131:0;;11462:2:1;37855:131:0::1;::::0;::::1;11444:21:1::0;11501:2;11481:18;;;11474:30;11540:34;11520:18;;;11513:62;-1:-1:-1;;;11591:18:1;;;11584:34;11635:19;;37855:131:0::1;11260:400:1::0;37855:131:0::1;38009:17;:6:::0;38019::::1;38009:17;:::i;:::-;37997:9;:29:::0;-1:-1:-1;37778:256:0:o;36990:497::-;2062:6;;37098:4;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;37177:6:::1;37156:13;10729:12:::0;;;10641:108;37156:13:::1;:17;::::0;37172:1:::1;37156:17;:::i;:::-;37155:28;;;;:::i;:::-;37142:9;:41;;37120:144;;;::::0;-1:-1:-1;;;37120:144:0;;11867:2:1;37120:144:0::1;::::0;::::1;11849:21:1::0;11906:2;11886:18;;;11879:30;11945:34;11925:18;;;11918:62;-1:-1:-1;;;11996:18:1;;;11989:51;12057:19;;37120:144:0::1;11665:417:1::0;37120:144:0::1;37332:4;37311:13;10729:12:::0;;;10641:108;37311:13:::1;:17;::::0;37327:1:::1;37311:17;:::i;:::-;37310:26;;;;:::i;:::-;37297:9;:39;;37275:141;;;::::0;-1:-1:-1;;;37275:141:0;;12289:2:1;37275:141:0::1;::::0;::::1;12271:21:1::0;12328:2;12308:18;;;12301:30;12367:34;12347:18;;;12340:62;-1:-1:-1;;;12418:18:1;;;12411:50;12478:19;;37275:141:0::1;12087:416:1::0;37275:141:0::1;-1:-1:-1::0;37427:18:0::1;:30:::0;37475:4:::1;::::0;36990:497::o;36511:222::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;36566:13:::1;:20:::0;;-1:-1:-1;;36597:18:0;;;;;36650:16:::1;:12;36665:1;36650:16;:::i;:::-;36626:21;:40:::0;36700:25:::1;:15;36718:7;36700:25;:::i;:::-;36677:20;:48:::0;36511:222::o;2898:238::-;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3001:22:0;::::1;2979:110;;;::::0;-1:-1:-1;;;2979:110:0;;12710:2:1;2979:110:0::1;::::0;::::1;12692:21:1::0;12749:2;12729:18;;;12722:30;12788:34;12768:18;;;12761:62;-1:-1:-1;;;12839:18:1;;;12832:36;12885:19;;2979:110:0::1;12508:402:1::0;2979:110:0::1;3100:28;3119:8;3100:18;:28::i;39914:163::-:0;2062:6;;-1:-1:-1;;;;;2062:6:0;717:10;2209:23;2201:68;;;;-1:-1:-1;;;2201:68:0;;;;;;;:::i;:::-;39987:12:::1;:23:::0;;-1:-1:-1;;;;;39987:23:0;::::1;-1:-1:-1::0;;;;;;39987:23:0;;::::1;;::::0;;40021:48:::1;40002:8:::0;40048:4:::1;40055:13;10729:12:::0;;;10641:108;17884:220;-1:-1:-1;;;;;18012:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18064:32;;1663:25:1;;;18064:32:0;;1636:18:1;18064:32:0;;;;;;;17884:220;;;:::o;40256:3808::-;40384:11;40380:93;;40412:28;40428:4;40434:2;40438:1;40412:15;:28::i;:::-;40256:3808;;;:::o;40380:93::-;2062:6;;-1:-1:-1;;;;;40489:15:0;;;2062:6;;40489:15;;;;:32;;-1:-1:-1;2062:6:0;;-1:-1:-1;;;;;40508:13:0;;;2062:6;;40508:13;;40489:32;:52;;;;-1:-1:-1;;;;;;40525:16:0;;;;40489:52;:65;;;;-1:-1:-1;40546:8:0;;-1:-1:-1;;;40546:8:0;;;;40545:9;40489:65;40485:1374;;;40576:13;;;;40571:201;;-1:-1:-1;;;;;40640:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;40668:22:0;;;;;;:18;:22;;;;;;;;40640:50;40610:146;;;;-1:-1:-1;;;40610:146:0;;13117:2:1;40610:146:0;;;13099:21:1;13156:2;13136:18;;;13129:30;-1:-1:-1;;;13175:18:1;;;13168:52;13237:18;;40610:146:0;12915:346:1;40610:146:0;-1:-1:-1;;;;;40834:31:0;;;;;;:25;:31;;;;;;;;:87;;;;-1:-1:-1;;;;;;40887:34:0;;;;;;:30;:34;;;;;;;;40886:35;40834:87;40812:1036;;;40996:20;;40986:6;:30;;40956:157;;;;-1:-1:-1;;;40956:157:0;;13468:2:1;40956:157:0;;;13450:21:1;13507:2;13487:18;;;13480:30;13546:34;13526:18;;;13519:62;-1:-1:-1;;;13597:18:1;;;13590:51;13658:19;;40956:157:0;13266:417:1;40956:157:0;41188:9;;-1:-1:-1;;;;;10963:18:0;;10931:7;10963:18;;;;;;;;;;;41162:22;;:6;:22;:::i;:::-;:35;;41132:128;;;;-1:-1:-1;;;41132:128:0;;13890:2:1;41132:128:0;;;13872:21:1;13929:2;13909:18;;;13902:30;-1:-1:-1;;;13948:18:1;;;13941:49;14007:18;;41132:128:0;13688:343:1;41132:128:0;40812:1036;;;-1:-1:-1;;;;;41342:29:0;;;;;;:25;:29;;;;;;;;:87;;;;-1:-1:-1;;;;;;41393:36:0;;;;;;:30;:36;;;;;;;;41392:37;41342:87;41320:528;;;41504:20;;41494:6;:30;;41464:158;;;;-1:-1:-1;;;41464:158:0;;14238:2:1;41464:158:0;;;14220:21:1;14277:2;14257:18;;;14250:30;14316:34;14296:18;;;14289:62;-1:-1:-1;;;14367:18:1;;;14360:52;14429:19;;41464:158:0;14036:418:1;41320:528:0;-1:-1:-1;;;;;41649:34:0;;;;;;:30;:34;;;;;;;;41644:204;;41760:9;;-1:-1:-1;;;;;10963:18:0;;10931:7;10963:18;;;;;;;;;;;41734:22;;:6;:22;:::i;:::-;:35;;41704:128;;;;-1:-1:-1;;;41704:128:0;;13890:2:1;41704:128:0;;;13872:21:1;13929:2;13909:18;;;13902:30;-1:-1:-1;;;13948:18:1;;;13941:49;14007:18;;41704:128:0;13688:343:1;41704:128:0;41918:18;;41908:4;10931:7;10963:18;;;;;;;;;;;41890:46;;41889:76;;;;-1:-1:-1;41954:11:0;;;;;;;41889:76;:102;;;;-1:-1:-1;41983:8:0;;-1:-1:-1;;;41983:8:0;;;;41982:9;41889:102;:151;;;;-1:-1:-1;;;;;;42009:31:0;;;;;;:25;:31;;;;;;;;42008:32;41889:151;:193;;;;-1:-1:-1;;;;;;42058:24:0;;;;;;:18;:24;;;;;;;;42057:25;41889:193;:233;;;;-1:-1:-1;;;;;;42100:22:0;;;;;;:18;:22;;;;;;;;42099:23;41889:233;41871:365;;;42149:8;:15;;-1:-1:-1;;;;42149:15:0;-1:-1:-1;;;42149:15:0;;;42181:10;:8;:10::i;:::-;42208:8;:16;;-1:-1:-1;;;;42208:16:0;;;41871:365;42264:8;;-1:-1:-1;;;;;42374:24:0;;42248:12;42374:24;;;:18;:24;;;;;;42264:8;-1:-1:-1;;;42264:8:0;;;;;42263:9;;42374:24;;:50;;-1:-1:-1;;;;;;42402:22:0;;;;;;:18;:22;;;;;;;;42374:50;42370:98;;;-1:-1:-1;42451:5:0;42370:98;42480:12;42585:7;42581:1430;;;42637:12;42613:21;;:36;42609:1251;;;42713:23;42732:3;42713:14;:6;42724:2;42713:10;:14::i;:::-;:18;;:23::i;:::-;42706:30;;42777:4;42755:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;42609:1251:0;;-1:-1:-1;42609:1251:0;;-1:-1:-1;;;;;42844:29:0;;;;;;:25;:29;;;;;;;;:53;;;;-1:-1:-1;42877:7:0;:16;:20;;42844:53;42840:1020;;;42945:15;42922:20;;:38;42918:538;;;42992:23;43011:3;42992:14;:6;43003:2;42992:10;:14::i;42918:538::-;43131:7;:16;43120:37;;43153:3;;43120:28;;:6;;:10;:28::i;:37::-;43277:7;:16;43235:13;;43113:44;;-1:-1:-1;43277:16:0;43228:20;;43113:44;43228:20;:::i;:::-;43227:66;;;;:::i;:::-;43180:18;;:113;;;;;;;:::i;:::-;;;;-1:-1:-1;;43420:7:0;:16;43371:20;;43364:27;;:4;:27;:::i;:::-;43363:73;;;;:::i;:::-;43316:18;;:120;;;;;;;:::i;42840:1020::-;-1:-1:-1;;;;;43517:31:0;;;;;;:25;:31;;;;;;;;:54;;;;-1:-1:-1;43552:6:0;:15;:19;;43517:54;43513:347;;;43610:6;:15;43599:36;;43631:3;;43599:27;;:6;;:10;:27::i;:36::-;43700:6;:15;43684:12;;43592:43;;-1:-1:-1;43700:15:0;43677:19;;43592:43;43677:19;:::i;:::-;43676:39;;;;:::i;:::-;43654:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;43829:6:0;:15;43785:19;;43778:26;;:4;:26;:::i;:::-;43777:67;;;;:::i;:::-;43734:18;;:110;;;;;;;:::i;:::-;;;;-1:-1:-1;;43513:347:0;43880:8;;43876:124;;43909:42;43925:4;43939;43946;43909:15;:42::i;:::-;43970:14;43980:4;43970:14;;:::i;:::-;;;43876:124;44023:33;44039:4;44045:2;44049:6;44023:15;:33::i;:::-;40369:3695;;40256:3808;;;:::o;16855:591::-;-1:-1:-1;;;;;16939:21:0;;16931:67;;;;-1:-1:-1;;;16931:67:0;;14661:2:1;16931:67:0;;;14643:21:1;14700:2;14680:18;;;14673:30;14739:34;14719:18;;;14712:62;-1:-1:-1;;;14790:18:1;;;14783:31;14831:19;;16931:67:0;14459:397:1;16931:67:0;-1:-1:-1;;;;;17098:18:0;;17073:22;17098:18;;;;;;;;;;;17135:24;;;;17127:71;;;;-1:-1:-1;;;17127:71:0;;15063:2:1;17127:71:0;;;15045:21:1;15102:2;15082:18;;;15075:30;15141:34;15121:18;;;15114:62;-1:-1:-1;;;15192:18:1;;;15185:32;15234:19;;17127:71:0;14861:398:1;17127:71:0;-1:-1:-1;;;;;17234:18:0;;:9;:18;;;;;;;;;;17255:23;;;17234:44;;17300:12;:22;;17272:6;;17234:9;17300:22;;17272:6;;17300:22;:::i;:::-;;;;-1:-1:-1;;17340:37:0;;1663:25:1;;;17366:1:0;;-1:-1:-1;;;;;17340:37:0;;;;;1651:2:1;1636:18;17340:37:0;;;;;;;40256:3808;;;:::o;3296:191::-;3389:6;;;-1:-1:-1;;;;;3406:17:0;;;-1:-1:-1;;;;;;3406:17:0;;;;;;;3439:40;;3389:6;;;3406:17;3389:6;;3439:40;;3370:16;;3439:40;3359:128;3296:191;:::o;39556:186::-;-1:-1:-1;;;;;39639:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;39639:39:0;;;;;;;;;;39694:40;;39639:39;;:31;39694:40;;;39556:186;;:::o;15231:605::-;-1:-1:-1;;;;;15447:17:0;;15423:21;15447:17;;;;;;;;;;;15497:23;;;;15475:111;;;;-1:-1:-1;;;15475:111:0;;15466:2:1;15475:111:0;;;15448:21:1;15505:2;15485:18;;;15478:30;15544:34;15524:18;;;15517:62;-1:-1:-1;;;15595:18:1;;;15588:36;15641:19;;15475:111:0;15264:402:1;15475:111:0;-1:-1:-1;;;;;15622:17:0;;;:9;:17;;;;;;;;;;;15642:22;;;15622:42;;15686:20;;;;;;;;:30;;15658:6;;15622:9;15686:30;;15658:6;;15686:30;:::i;:::-;;;;;;;;15751:9;-1:-1:-1;;;;;15734:35:0;15743:6;-1:-1:-1;;;;;15734:35:0;;15762:6;15734:35;;;;1663:25:1;;1651:2;1636:18;;1517:177;15734:35:0;;;;;;;;15352:484;15231:605;;;:::o;45194:1520::-;45277:4;45233:23;10963:18;;;;;;;;;;;45233:50;;45294:25;45343:18;;45322;;:39;;;;:::i;:::-;45294:67;-1:-1:-1;45372:12:0;45401:20;;;:46;;-1:-1:-1;45425:22:0;;45401:46;45397:85;;;45464:7;;;45194:1520::o;45397:85::-;45516:18;;:23;;45537:2;45516:23;:::i;:::-;45498:15;:41;45494:115;;;45574:18;;:23;;45595:2;45574:23;:::i;:::-;45556:41;;45494:115;45670:23;45783:1;45750:17;45715:18;;45697:15;:36;;;;:::i;:::-;45696:71;;;;:::i;:::-;:88;;;;:::i;:::-;45670:114;-1:-1:-1;45795:26:0;45824:36;:15;45670:114;45824:19;:36::i;:::-;45795:65;-1:-1:-1;45901:21:0;45935:36;45795:65;45935:16;:36::i;:::-;45984:18;46005:44;:21;46031:17;46005:25;:44::i;:::-;45984:65;;46062:23;46088:81;46141:17;46088:34;46103:18;;46088:10;:14;;:34;;;;:::i;:81::-;46062:107;-1:-1:-1;46182:23:0;46208:28;46062:107;46208:10;:28;:::i;:::-;46270:1;46249:18;:22;46182:54;-1:-1:-1;46286:19:0;;;;;:42;;;46327:1;46309:15;:19;46286:42;46282:278;;;46345:46;46358:15;46375;46345:12;:46::i;:::-;46515:18;;46411:137;;;3431:25:1;;;3487:2;3472:18;;3465:34;;;3515:18;;;3508:34;;;;46411:137:0;;;;;;3419:2:1;46411:137:0;;;46282:278;46591:1;46570:18;:22;;;46627:15;;46619:87;;-1:-1:-1;;;;;46627:15:0;;;;46670:21;;46619:87;;46591:1;46619:87;46670:21;46627:15;46619:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;45194:1520:0:o;23337:98::-;23395:7;23422:5;23426:1;23422;:5;:::i;:::-;23415:12;23337:98;-1:-1:-1;;;23337:98:0:o;23736:::-;23794:7;23821:5;23825:1;23821;:5;:::i;22980:98::-;23038:7;23065:5;23069:1;23065;:5;:::i;44072:589::-;44222:16;;;44236:1;44222:16;;;;;;;;44198:21;;44222:16;;;;;;;;;;-1:-1:-1;44222:16:0;44198:40;;44267:4;44249;44254:1;44249:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44249:23:0;;;-1:-1:-1;;;;;44249:23:0;;;;;44293:15;-1:-1:-1;;;;;44293:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44283:4;44288:1;44283:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44283:32:0;;;-1:-1:-1;;;;;44283:32:0;;;;;44328:62;44345:4;44360:15;44378:11;44328:8;:62::i;:::-;44429:224;;-1:-1:-1;;;44429:224:0;;-1:-1:-1;;;;;44429:15:0;:66;;;;:224;;44510:11;;44536:1;;44580:4;;44607;;44627:15;;44429:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44127:534;44072:589;:::o;44669:517::-;44817:62;44834:4;44849:15;44867:11;44817:8;:62::i;:::-;44922:256;;-1:-1:-1;;;44922:256:0;;44994:4;44922:256;;;17727:34:1;17777:18;;;17770:34;;;45040:1:0;17820:18:1;;;17813:34;;;17863:18;;;17856:34;32567:6:0;17906:19:1;;;17899:44;45152:15:0;17959:19:1;;;17952:35;44922:15:0;-1:-1:-1;;;;;44922:31:0;;;;44961:9;;17661:19:1;;44922:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;1005:315;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1934:180::-;1993:6;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;-1:-1:-1;2085:23:1;;1934:180;-1:-1:-1;1934:180:1:o;2119:456::-;2196:6;2204;2212;2265:2;2253:9;2244:7;2240:23;2236:32;2233:52;;;2281:1;2278;2271:12;2233:52;2320:9;2307:23;2339:31;2364:5;2339:31;:::i;:::-;2389:5;-1:-1:-1;2446:2:1;2431:18;;2418:32;2459:33;2418:32;2459:33;:::i;:::-;2119:456;;2511:7;;-1:-1:-1;;;2565:2:1;2550:18;;;;2537:32;;2119:456::o;2977:247::-;3036:6;3089:2;3077:9;3068:7;3064:23;3060:32;3057:52;;;3105:1;3102;3095:12;3057:52;3144:9;3131:23;3163:31;3188:5;3163:31;:::i;3553:316::-;3630:6;3638;3646;3699:2;3687:9;3678:7;3674:23;3670:32;3667:52;;;3715:1;3712;3705:12;3667:52;-1:-1:-1;;3738:23:1;;;3808:2;3793:18;;3780:32;;-1:-1:-1;3859:2:1;3844:18;;;3831:32;;3553:316;-1:-1:-1;3553:316:1:o;3874:118::-;3960:5;3953:13;3946:21;3939:5;3936:32;3926:60;;3982:1;3979;3972:12;3997:382;4062:6;4070;4123:2;4111:9;4102:7;4098:23;4094:32;4091:52;;;4139:1;4136;4129:12;4091:52;4178:9;4165:23;4197:31;4222:5;4197:31;:::i;:::-;4247:5;-1:-1:-1;4304:2:1;4289:18;;4276:32;4317:30;4276:32;4317:30;:::i;:::-;4366:7;4356:17;;;3997:382;;;;;:::o;4886:241::-;4942:6;4995:2;4983:9;4974:7;4970:23;4966:32;4963:52;;;5011:1;5008;5001:12;4963:52;5050:9;5037:23;5069:28;5091:5;5069:28;:::i;5132:388::-;5200:6;5208;5261:2;5249:9;5240:7;5236:23;5232:32;5229:52;;;5277:1;5274;5267:12;5229:52;5316:9;5303:23;5335:31;5360:5;5335:31;:::i;:::-;5385:5;-1:-1:-1;5442:2:1;5427:18;;5414:32;5455:33;5414:32;5455:33;:::i;5525:356::-;5727:2;5709:21;;;5746:18;;;5739:30;5805:34;5800:2;5785:18;;5778:62;5872:2;5857:18;;5525:356::o;5886:127::-;5947:10;5942:3;5938:20;5935:1;5928:31;5978:4;5975:1;5968:15;6002:4;5999:1;5992:15;6018:128;6058:3;6089:1;6085:6;6082:1;6079:13;6076:39;;;6095:18;;:::i;:::-;-1:-1:-1;6131:9:1;;6018:128::o;6509:380::-;6588:1;6584:12;;;;6631;;;6652:61;;6706:4;6698:6;6694:17;6684:27;;6652:61;6759:2;6751:6;6748:14;6728:18;6725:38;6722:161;;;6805:10;6800:3;6796:20;6793:1;6786:31;6840:4;6837:1;6830:15;6868:4;6865:1;6858:15;6722:161;;6509:380;;;:::o;6894:168::-;6934:7;7000:1;6996;6992:6;6988:14;6985:1;6982:21;6977:1;6970:9;6963:17;6959:45;6956:71;;;7007:18;;:::i;:::-;-1:-1:-1;7047:9:1;;6894:168::o;7067:217::-;7107:1;7133;7123:132;;7177:10;7172:3;7168:20;7165:1;7158:31;7212:4;7209:1;7202:15;7240:4;7237:1;7230:15;7123:132;-1:-1:-1;7269:9:1;;7067:217::o;8827:125::-;8867:4;8895:1;8892;8889:8;8886:34;;;8900:18;;:::i;:::-;-1:-1:-1;8937:9:1;;8827:125::o;9337:245::-;9404:6;9457:2;9445:9;9436:7;9432:23;9428:32;9425:52;;;9473:1;9470;9463:12;9425:52;9505:9;9499:16;9524:28;9546:5;9524:28;:::i;9587:484::-;9789:2;9774:18;;9822:1;9811:13;;9801:144;;9867:10;9862:3;9858:20;9855:1;9848:31;9902:4;9899:1;9892:15;9930:4;9927:1;9920:15;9801:144;9954:25;;;10010:2;9995:18;;9988:34;;;;10053:2;10038:18;;;10031:34;9587:484;:::o;16013:127::-;16074:10;16069:3;16065:20;16062:1;16055:31;16105:4;16102:1;16095:15;16129:4;16126:1;16119:15;16145:251;16215:6;16268:2;16256:9;16247:7;16243:23;16239:32;16236:52;;;16284:1;16281;16274:12;16236:52;16316:9;16310:16;16335:31;16360:5;16335:31;:::i;16401:980::-;16663:4;16711:3;16700:9;16696:19;16742:6;16731:9;16724:25;16768:2;16806:6;16801:2;16790:9;16786:18;16779:34;16849:3;16844:2;16833:9;16829:18;16822:31;16873:6;16908;16902:13;16939:6;16931;16924:22;16977:3;16966:9;16962:19;16955:26;;17016:2;17008:6;17004:15;16990:29;;17037:1;17047:195;17061:6;17058:1;17055:13;17047:195;;;17126:13;;-1:-1:-1;;;;;17122:39:1;17110:52;;17217:15;;;;17182:12;;;;17158:1;17076:9;17047:195;;;-1:-1:-1;;;;;;;17298:32:1;;;;17293:2;17278:18;;17271:60;-1:-1:-1;;;17362:3:1;17347:19;17340:35;17259:3;16401:980;-1:-1:-1;;;16401:980:1:o;17998:306::-;18086:6;18094;18102;18155:2;18143:9;18134:7;18130:23;18126:32;18123:52;;;18171:1;18168;18161:12;18123:52;18200:9;18194:16;18184:26;;18250:2;18239:9;18235:18;18229:25;18219:35;;18294:2;18283:9;18279:18;18273:25;18263:35;;17998:306;;;;;:::o

Swarm Source

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