ETH Price: $2,457.95 (+0.67%)

Contract

0x5429E6ACed14f2BE22d600AfC86c2a5A9A7B83AE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...195859902024-04-05 0:32:23152 days ago1712277143IN
RuneApePotions: Token
0 ETH0.0006367713.78741025
Set Approval For...189261402024-01-03 10:07:59245 days ago1704276479IN
RuneApePotions: Token
0 ETH0.0009344720.23319688
Safe Transfer Fr...186238972023-11-22 1:05:23287 days ago1700615123IN
RuneApePotions: Token
0 ETH0.0016329731.3954249
Safe Transfer Fr...186238882023-11-22 1:03:35287 days ago1700615015IN
RuneApePotions: Token
0 ETH0.0017016732.70871967
Transfer Ownersh...186238472023-11-22 0:55:11287 days ago1700614511IN
RuneApePotions: Token
0 ETH0.000888631.01144556
Set Approval For...176064892023-07-02 13:01:59430 days ago1688302919IN
RuneApePotions: Token
0 ETH0.0007339230.13202663
Set Approval For...175911462023-06-30 9:16:47432 days ago1688116607IN
RuneApePotions: Token
0 ETH0.0011044323.91327936
Set Approval For...157347812022-10-12 21:41:47692 days ago1665610907IN
RuneApePotions: Token
0 ETH0.00077216.71554061
Set Approval For...156929112022-10-07 1:22:59698 days ago1665105779IN
RuneApePotions: Token
0 ETH0.00025535.51784828
Burn Level1154905712022-09-07 13:33:11728 days ago1662557591IN
RuneApePotions: Token
0 ETH0.0006330720.83645599
Set Approval For...154222132022-08-27 14:53:43739 days ago1661612023IN
RuneApePotions: Token
0 ETH0.000339537.35168381
Set Approval For...153896872022-08-22 10:20:23744 days ago1661163623IN
RuneApePotions: Token
0 ETH0.0004829918.37545019
Set Approval For...153896872022-08-22 10:20:23744 days ago1661163623IN
RuneApePotions: Token
0 ETH0.0006978115.10905255
Set Approval For...153637352022-08-18 7:34:14748 days ago1660808054IN
RuneApePotions: Token
0 ETH0.000338857.33684156
Set Approval For...153453992022-08-15 10:01:38751 days ago1660557698IN
RuneApePotions: Token
0 ETH0.0009153319.81888309
Burn Level1153440232022-08-15 4:46:46751 days ago1660538806IN
RuneApePotions: Token
0 ETH0.0003777712.43377896
Burn Level1153440202022-08-15 4:45:35751 days ago1660538735IN
RuneApePotions: Token
0 ETH0.0003289310.82612896
Set Approval For...153184532022-08-11 3:53:09755 days ago1660189989IN
RuneApePotions: Token
0 ETH0.0007784616.85541083
Set Approval For...152847402022-08-05 21:31:42760 days ago1659735102IN
RuneApePotions: Token
0 ETH0.000685914.85118372
Burn Level1152147142022-07-25 23:40:22771 days ago1658792422IN
RuneApePotions: Token
0 ETH0.0007275623.94638344
Set Approval For...152093242022-07-25 3:38:16772 days ago1658720296IN
RuneApePotions: Token
0 ETH0.0005815412.59170741
Burn Level1152084342022-07-25 0:06:23772 days ago1658707583IN
RuneApePotions: Token
0 ETH0.000287289.45539273
Burn Level1152084332022-07-25 0:05:48772 days ago1658707548IN
RuneApePotions: Token
0 ETH0.000273939.01600007
Safe Transfer Fr...152083212022-07-24 23:41:41772 days ago1658706101IN
RuneApePotions: Token
0 ETH0.000247977.11582526
Burn Level1152083152022-07-24 23:40:34772 days ago1658706034IN
RuneApePotions: Token
0 ETH0.000216587.12838382
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RuneApePotions

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-27
*/

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: contracts/potions.sol


pragma solidity 0.8.6;




contract RuneApePotions is ERC1155, Ownable {
    using Strings for uint256;
    
    address payable private community = payable(0x76B9105fD7996e6e3bc4fF219fbC578f81dF03de);

    address private mutationContract;
    string private baseURI;

    mapping(uint256 => bool) public validPotionTypes;

    mapping(uint256 => uint256) public potionCounts;

    mapping(uint256 => uint256) public potionMaxes;

    event SetBaseURI(string indexed _baseURI);

    uint256 constant public maxLvl1 = 250;
    uint256 constant public maxLvl2 = 250;
    uint256 constant public maxLvl3 = 20;

    struct Recipient {
        address addr;
        uint256[] ids;
        uint256[] amounts;        
    }

    constructor(string memory _baseURI) ERC1155(_baseURI) {
        baseURI = _baseURI;

        validPotionTypes[0] = true;
        validPotionTypes[1] = true;
        validPotionTypes[2] = true;

        potionCounts[0] = 0;
        potionCounts[1] = 0;
        potionCounts[2] = 0;

        potionMaxes[0] = maxLvl1;
        potionMaxes[1] = maxLvl2;
        potionMaxes[2] = maxLvl3;

        emit SetBaseURI(baseURI);
    }

    function mintBatch(uint256[] memory ids, uint256[] memory amounts)
        external
        onlyOwner
    {
        //update potion count
         for (uint256 i = 0; i < ids.length; i++) {
            require(potionCounts[ids[i]] + amounts[i] <= potionMaxes[ids[i]]);
            potionCounts[ids[i]] += amounts[i];
        }
    
        _mintBatch(owner(), ids, amounts, "");
    }

    function airDrop(address addr, uint256[] memory ids, uint256[] memory amounts)
        external
        onlyOwner
    {
         //update potion count
         for (uint256 i = 0; i < ids.length; i++) {
            require(potionCounts[ids[i]] + amounts[i] <= potionMaxes[ids[i]]);
            potionCounts[ids[i]] += amounts[i];
        }

        _mintBatch(addr, ids, amounts, "");
    }

     function airDropBatch(Recipient[] memory recipients)
        external
        onlyOwner
    {
         //update potion count
         for (uint256 i = 0; i < recipients.length; i++) {
             for (uint256 j = 0; j < recipients[i].ids.length; j++){
                 require(potionCounts[recipients[i].ids[j]] + recipients[i].amounts[i] <= potionMaxes[recipients[i].ids[j]]);
                 potionCounts[recipients[i].ids[j]] += recipients[i].amounts[j];
             }
           
            _mintBatch(recipients[i].addr, recipients[i].ids, recipients[i].amounts, "");
        }
    }

    function setMutationContractAddress(address mutationContractAddress)
        external
        onlyOwner
    {
        mutationContract = mutationContractAddress;
    }

    function burnPotionForAddress(uint256 typeId, address burnTokenAddress)
        external
    {
        require(msg.sender == mutationContract, "Invalid burner address");
        _burn(burnTokenAddress, typeId, 1);
    }

    function burnLevel1(uint256 amount)
        external
    {
        uint256 typeId = 0;
        address burnTokenAddress = msg.sender;
        uint256 bal = balanceOf(burnTokenAddress, typeId);
        
        require(bal > 0, "Not enought potions");
        require(amount >= 1, "Invalid burn amount");
        require(bal >= amount, "Trying to burn more than you have");

        _burn(burnTokenAddress, typeId, amount);
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(baseURI);
    }

    function sendFund(address Addr, uint256 Share) internal {
        (bool success, ) = Addr.call{value: Share}("");
        require(success, "Withdrawal failed"); 
    }

    function withdraw() external onlyOwner {
       require(address(this).balance > 0, "No balance to withdraw");
    
       sendFund(community, address(this).balance);
    }

    function uri(uint256 typeId)
        public
        view                
        override
        returns (string memory)
    {
        require(
            validPotionTypes[typeId],
            "URI requested for invalid potion type"
        );
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"string","name":"_baseURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct RuneApePotions.Recipient[]","name":"recipients","type":"tuple[]"}],"name":"airDropBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnLevel1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"address","name":"burnTokenAddress","type":"address"}],"name":"burnPotionForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLvl1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLvl2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLvl3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"potionCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"potionMaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mutationContractAddress","type":"address"}],"name":"setMutationContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validPotionTypes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600480546001600160a01b0319167376b9105fd7996e6e3bc4ff219fbc578f81df03de1790553480156200003757600080fd5b5060405162002e1238038062002e128339810160408190526200005a9162000348565b80620000668162000237565b50620000723362000250565b805162000087906006906020840190620002a2565b507f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8054600160ff1991821681179092557fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b82880548216831790557fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d8054909116909117905560007f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78190557fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8190557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea9041819055600960205260fa7fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8190557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36556002905260147f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c355604051620002009060069062000424565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a2506200051b565b80516200024c906002906020840190620002a2565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620002b090620004c8565b90600052602060002090601f016020900481019282620002d457600085556200031f565b82601f10620002ef57805160ff19168380011785556200031f565b828001600101855582156200031f579182015b828111156200031f57825182559160200191906001019062000302565b506200032d92915062000331565b5090565b5b808211156200032d576000815560010162000332565b600060208083850312156200035c57600080fd5b82516001600160401b03808211156200037457600080fd5b818501915085601f8301126200038957600080fd5b8151818111156200039e576200039e62000505565b604051601f8201601f19908116603f01168101908382118183101715620003c957620003c962000505565b816040528281528886848701011115620003e257600080fd5b600093505b82841015620004065784840186015181850187015292850192620003e7565b82841115620004185760008684830101525b98975050505050505050565b600080835481600182811c9150808316806200044157607f831692505b60208084108214156200046257634e487b7160e01b86526022600452602486fd5b8180156200047957600181146200048b57620004ba565b60ff19861689528489019650620004ba565b60008a81526020902060005b86811015620004b25781548b82015290850190830162000497565b505084890196505b509498975050505050505050565b600181811c90821680620004dd57607f821691505b60208210811415620004ff57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6128e7806200052b6000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c806384ee5349116100de578063b9639d4d11610097578063d351cfdc11610071578063d351cfdc14610338578063e985e9c51461034b578063f242432a14610387578063f2fde38b1461039a57600080fd5b8063b9639d4d14610302578063ceff7a8f14610325578063d1bb7485146101e057600080fd5b806384ee5349146102865780638da5cb5b146102995780639d4c4ead146102b45780639e638a12146102c7578063a22cb465146102cf578063b826b5e0146102e257600080fd5b806337cb34511161013057806337cb34511461021057806339f7e37f146102305780633ccfd60b146102435780634e1273f41461024b5780636942056d1461026b578063715018a61461027e57600080fd5b8062fdd58e1461017757806301ffc9a71461019d5780630e89341c146101c057806314aba76f146101e05780631f5bfd11146101e85780632eb2c2d6146101fd575b600080fd5b61018a610185366004611fa5565b6103ad565b6040519081526020015b60405180910390f35b6101b06101ab366004612216565b610444565b6040519015158152602001610194565b6101d36101ce366004612298565b610496565b60405161019491906124ea565b61018a60fa81565b6101fb6101f6366004611d9b565b6105dc565b005b6101fb61020b366004611de9565b610628565b61018a61021e366004612298565b60086020526000908152604090205481565b6101fb61023e366004612250565b6106bf565b6101fb61073f565b61025e610259366004611fcf565b6107ca565b60405161019491906124a9565b6101fb610279366004612298565b6108f3565b6101fb6109fb565b6101fb610294366004611ef6565b610a2f565b6003546040516001600160a01b039091168152602001610194565b6101fb6102c236600461209f565b610b7c565b61018a601481565b6101fb6102dd366004611f69565b610deb565b61018a6102f0366004612298565b60096020526000908152604090205481565b6101b0610310366004612298565b60076020526000908152604090205460ff1681565b6101fb6103333660046122b1565b610df6565b6101fb6103463660046121ca565b610e55565b6101b0610359366004611db6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101fb610395366004611e92565b610fae565b6101fb6103a8366004611d9b565b611035565b60006001600160a01b03831661041e5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061047557506001600160e01b031982166303a24d0760e21b145b8061049057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008181526007602052604090205460609060ff166105055760405162461bcd60e51b815260206004820152602560248201527f5552492072657175657374656420666f7220696e76616c696420706f74696f6e604482015264207479706560d81b6064820152608401610415565b600060068054610514906126e3565b9050116105ab5760068054610528906126e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610554906126e3565b80156105a15780601f10610576576101008083540402835291602001916105a1565b820191906000526020600020905b81548152906001019060200180831161058457829003601f168201915b5050505050610490565b60066105b6836110d0565b6040516020016105c79291906123e1565b60405160208183030381529060405292915050565b6003546001600160a01b031633146106065760405162461bcd60e51b8152600401610415906125d4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03851633148061064457506106448533610359565b6106ab5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610415565b6106b885858585856111d5565b5050505050565b6003546001600160a01b031633146106e95760405162461bcd60e51b8152600401610415906125d4565b80516106fc906006906020840190611beb565b50600660405161070c91906123d5565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a250565b6003546001600160a01b031633146107695760405162461bcd60e51b8152600401610415906125d4565b600047116107b25760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610415565b6004546107c8906001600160a01b031647611371565b565b6060815183511461082f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610415565b600083516001600160401b0381111561084a5761084a6127e0565b604051908082528060200260200182016040528015610873578160200160208202803683370190505b50905060005b84518110156108eb576108be858281518110610897576108976127ca565b60200260200101518583815181106108b1576108b16127ca565b60200260200101516103ad565b8282815181106108d0576108d06127ca565b60209081029190910101526108e48161276f565b9050610879565b509392505050565b6000338161090182826103ad565b9050600081116109495760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f7567687420706f74696f6e7360681b6044820152606401610415565b60018410156109905760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a5908189d5c9b88185b5bdd5b9d606a1b6044820152606401610415565b838110156109ea5760405162461bcd60e51b815260206004820152602160248201527f547279696e6720746f206275726e206d6f7265207468616e20796f75206861766044820152606560f81b6064820152608401610415565b6109f5828486611408565b50505050565b6003546001600160a01b03163314610a255760405162461bcd60e51b8152600401610415906125d4565b6107c86000611589565b6003546001600160a01b03163314610a595760405162461bcd60e51b8152600401610415906125d4565b60005b8251811015610b5b5760096000848381518110610a7b57610a7b6127ca565b6020026020010151815260200190815260200160002054828281518110610aa457610aa46127ca565b602002602001015160086000868581518110610ac257610ac26127ca565b6020026020010151815260200190815260200160002054610ae39190612674565b1115610aee57600080fd5b818181518110610b0057610b006127ca565b602002602001015160086000858481518110610b1e57610b1e6127ca565b602002602001015181526020019081526020016000206000828254610b439190612674565b90915550819050610b538161276f565b915050610a5c565b50610b77838383604051806020016040528060008152506115db565b505050565b6003546001600160a01b03163314610ba65760405162461bcd60e51b8152600401610415906125d4565b60005b8151811015610de75760005b828281518110610bc757610bc76127ca565b60200260200101516020015151811015610d625760096000848481518110610bf157610bf16127ca565b6020026020010151602001518381518110610c0e57610c0e6127ca565b6020026020010151815260200190815260200160002054838381518110610c3757610c376127ca565b6020026020010151604001518381518110610c5457610c546127ca565b602002602001015160086000868681518110610c7257610c726127ca565b6020026020010151602001518581518110610c8f57610c8f6127ca565b6020026020010151815260200190815260200160002054610cb09190612674565b1115610cbb57600080fd5b828281518110610ccd57610ccd6127ca565b6020026020010151604001518181518110610cea57610cea6127ca565b602002602001015160086000858581518110610d0857610d086127ca565b6020026020010151602001518481518110610d2557610d256127ca565b602002602001015181526020019081526020016000206000828254610d4a9190612674565b90915550819050610d5a8161276f565b915050610bb5565b50610dd5828281518110610d7857610d786127ca565b602002602001015160000151838381518110610d9657610d966127ca565b602002602001015160200151848481518110610db457610db46127ca565b602002602001015160400151604051806020016040528060008152506115db565b80610ddf8161276f565b915050610ba9565b5050565b610de7338383611760565b6005546001600160a01b03163314610e495760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206275726e6572206164647265737360501b6044820152606401610415565b610de781836001611408565b6003546001600160a01b03163314610e7f5760405162461bcd60e51b8152600401610415906125d4565b60005b8251811015610f815760096000848381518110610ea157610ea16127ca565b6020026020010151815260200190815260200160002054828281518110610eca57610eca6127ca565b602002602001015160086000868581518110610ee857610ee86127ca565b6020026020010151815260200190815260200160002054610f099190612674565b1115610f1457600080fd5b818181518110610f2657610f266127ca565b602002602001015160086000858481518110610f4457610f446127ca565b602002602001015181526020019081526020016000206000828254610f699190612674565b90915550819050610f798161276f565b915050610e82565b50610de7610f976003546001600160a01b031690565b8383604051806020016040528060008152506115db565b6001600160a01b038516331480610fca5750610fca8533610359565b6110285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610415565b6106b88585858585611841565b6003546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610415906125d4565b6001600160a01b0381166110c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b6110cd81611589565b50565b6060816110f45750506040805180820190915260018152600360fc1b602082015290565b8160005b811561111e57806111088161276f565b91506111179050600a8361268c565b91506110f8565b6000816001600160401b03811115611138576111386127e0565b6040519080825280601f01601f191660200182016040528015611162576020820181803683370190505b5090505b84156111cd576111776001836126a0565b9150611184600a8661278a565b61118f906030612674565b60f81b8183815181106111a4576111a46127ca565b60200101906001600160f81b031916908160001a9053506111c6600a8661268c565b9450611166565b949350505050565b81518351146111f65760405162461bcd60e51b815260040161041590612609565b6001600160a01b03841661121c5760405162461bcd60e51b815260040161041590612545565b3360005b845181101561130357600085828151811061123d5761123d6127ca565b60200260200101519050600085838151811061125b5761125b6127ca565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112ab5760405162461bcd60e51b81526004016104159061258a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906112e8908490612674565b92505081905550505050806112fc9061276f565b9050611220565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113539291906124bc565b60405180910390a461136981878787878761196b565b505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b5050905080610b775760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b6044820152606401610415565b6001600160a01b03831661146a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610415565b33600061147684611ad6565b9050600061148384611ad6565b60408051602080820183526000918290528882528181528282206001600160a01b038b168352905220549091508481101561150c5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610415565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661163b5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610415565b815183511461165c5760405162461bcd60e51b815260040161041590612609565b3360005b84518110156116f85783818151811061167b5761167b6127ca565b6020026020010151600080878481518110611698576116986127ca565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546116e09190612674565b909155508190506116f08161276f565b915050611660565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117499291906124bc565b60405180910390a46106b88160008787878761196b565b816001600160a01b0316836001600160a01b031614156117d45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610415565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118675760405162461bcd60e51b815260040161041590612545565b33600061187385611ad6565b9050600061188085611ad6565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156118c35760405162461bcd60e51b81526004016104159061258a565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611900908490612674565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611960848a8a8a8a8a611b21565b505050505050505050565b6001600160a01b0384163b156113695760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119af9089908990889088908890600401612406565b602060405180830381600087803b1580156119c957600080fd5b505af19250505080156119f9575060408051601f3d908101601f191682019092526119f691810190612233565b60015b611aa657611a056127f6565b806308c379a01415611a3f5750611a1a612812565b80611a255750611a41565b8060405162461bcd60e51b815260040161041591906124ea565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610415565b6001600160e01b0319811663bc197c8160e01b146115805760405162461bcd60e51b8152600401610415906124fd565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b1057611b106127ca565b602090810291909101015292915050565b6001600160a01b0384163b156113695760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b659089908990889088908890600401612464565b602060405180830381600087803b158015611b7f57600080fd5b505af1925050508015611baf575060408051601f3d908101601f19168201909252611bac91810190612233565b60015b611bbb57611a056127f6565b6001600160e01b0319811663f23a6e6160e01b146115805760405162461bcd60e51b8152600401610415906124fd565b828054611bf7906126e3565b90600052602060002090601f016020900481019282611c195760008555611c5f565b82601f10611c3257805160ff1916838001178555611c5f565b82800160010185558215611c5f579182015b82811115611c5f578251825591602001919060010190611c44565b50611c6b929150611c6f565b5090565b5b80821115611c6b5760008155600101611c70565b60006001600160401b03831115611c9d57611c9d6127e0565b604051611cb4601f8501601f191660200182612743565b809150838152848484011115611cc957600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611cf857600080fd5b919050565b600082601f830112611d0e57600080fd5b81356020611d1b82612651565b604051611d288282612743565b8381528281019150858301600585901b87018401881015611d4857600080fd5b60005b85811015611d6757813584529284019290840190600101611d4b565b5090979650505050505050565b600082601f830112611d8557600080fd5b611d9483833560208501611c84565b9392505050565b600060208284031215611dad57600080fd5b611d9482611ce1565b60008060408385031215611dc957600080fd5b611dd283611ce1565b9150611de060208401611ce1565b90509250929050565b600080600080600060a08688031215611e0157600080fd5b611e0a86611ce1565b9450611e1860208701611ce1565b935060408601356001600160401b0380821115611e3457600080fd5b611e4089838a01611cfd565b94506060880135915080821115611e5657600080fd5b611e6289838a01611cfd565b93506080880135915080821115611e7857600080fd5b50611e8588828901611d74565b9150509295509295909350565b600080600080600060a08688031215611eaa57600080fd5b611eb386611ce1565b9450611ec160208701611ce1565b9350604086013592506060860135915060808601356001600160401b03811115611eea57600080fd5b611e8588828901611d74565b600080600060608486031215611f0b57600080fd5b611f1484611ce1565b925060208401356001600160401b0380821115611f3057600080fd5b611f3c87838801611cfd565b93506040860135915080821115611f5257600080fd5b50611f5f86828701611cfd565b9150509250925092565b60008060408385031215611f7c57600080fd5b611f8583611ce1565b915060208301358015158114611f9a57600080fd5b809150509250929050565b60008060408385031215611fb857600080fd5b611fc183611ce1565b946020939093013593505050565b60008060408385031215611fe257600080fd5b82356001600160401b0380821115611ff957600080fd5b818501915085601f83011261200d57600080fd5b8135602061201a82612651565b6040516120278282612743565b8381528281019150858301600585901b870184018b101561204757600080fd5b600096505b848710156120715761205d81611ce1565b83526001969096019591830191830161204c565b509650508601359250508082111561208857600080fd5b5061209585828601611cfd565b9150509250929050565b600060208083850312156120b257600080fd5b82356001600160401b03808211156120c957600080fd5b818501915085601f8301126120dd57600080fd5b81356120e881612651565b604080516120f68382612743565b8381528681019250858701600585901b870188018b101561211657600080fd5b60005b858110156121ba5781358781111561213057600080fd5b88016060818e03601f1901121561214657600080fd5b84516121518161271e565b61215c8b8301611ce1565b8152858201358981111561216f57600080fd5b61217d8f8d83860101611cfd565b8c8301525060608201358981111561219457600080fd5b6121a28f8d83860101611cfd565b82880152508652509388019390880190600101612119565b50909a9950505050505050505050565b600080604083850312156121dd57600080fd5b82356001600160401b03808211156121f457600080fd5b61220086838701611cfd565b9350602085013591508082111561208857600080fd5b60006020828403121561222857600080fd5b8135611d948161289b565b60006020828403121561224557600080fd5b8151611d948161289b565b60006020828403121561226257600080fd5b81356001600160401b0381111561227857600080fd5b8201601f8101841361228957600080fd5b6111cd84823560208401611c84565b6000602082840312156122aa57600080fd5b5035919050565b600080604083850312156122c457600080fd5b82359150611de060208401611ce1565b600081518084526020808501945080840160005b83811015612304578151875295820195908201906001016122e8565b509495945050505050565b600081518084526123278160208601602086016126b7565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061235557607f831692505b602080841082141561237757634e487b7160e01b600052602260045260246000fd5b81801561238b576001811461239c576123c9565b60ff198616895284890196506123c9565b60008881526020902060005b868110156123c15781548b8201529085019083016123a8565b505084890196505b50505050505092915050565b6000611d94828461233b565b60006123ed828561233b565b83516123fd8183602088016126b7565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612432908301866122d4565b828103606084015261244481866122d4565b90508281036080840152612458818561230f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061249e9083018461230f565b979650505050505050565b602081526000611d9460208301846122d4565b6040815260006124cf60408301856122d4565b82810360208401526124e181856122d4565b95945050505050565b602081526000611d94602083018461230f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b0382111561266a5761266a6127e0565b5060051b60200190565b600082198211156126875761268761279e565b500190565b60008261269b5761269b6127b4565b500490565b6000828210156126b2576126b261279e565b500390565b60005b838110156126d25781810151838201526020016126ba565b838111156109f55750506000910152565b600181811c908216806126f757607f821691505b6020821081141561271857634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561273d5761273d6127e0565b60405250565b601f8201601f191681016001600160401b0381118282101715612768576127686127e0565b6040525050565b60006000198214156127835761278361279e565b5060010190565b600082612799576127996127b4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561280f5760046000803e5060005160e01c5b90565b600060443d10156128205790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561284f57505050505090565b82850191508151818111156128675750505050505090565b843d87010160208285010111156128815750505050505090565b61289060208286010187612743565b509095945050505050565b6001600160e01b0319811681146110cd57600080fdfea2646970667358221220049c0df6aca8055cf2129523e8c4070191ea9e63133f58996992e177a3e7bded64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d506f5a627057316676666b5057584a65644b3956715554663933413444344377694e384371344442767276712f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101725760003560e01c806384ee5349116100de578063b9639d4d11610097578063d351cfdc11610071578063d351cfdc14610338578063e985e9c51461034b578063f242432a14610387578063f2fde38b1461039a57600080fd5b8063b9639d4d14610302578063ceff7a8f14610325578063d1bb7485146101e057600080fd5b806384ee5349146102865780638da5cb5b146102995780639d4c4ead146102b45780639e638a12146102c7578063a22cb465146102cf578063b826b5e0146102e257600080fd5b806337cb34511161013057806337cb34511461021057806339f7e37f146102305780633ccfd60b146102435780634e1273f41461024b5780636942056d1461026b578063715018a61461027e57600080fd5b8062fdd58e1461017757806301ffc9a71461019d5780630e89341c146101c057806314aba76f146101e05780631f5bfd11146101e85780632eb2c2d6146101fd575b600080fd5b61018a610185366004611fa5565b6103ad565b6040519081526020015b60405180910390f35b6101b06101ab366004612216565b610444565b6040519015158152602001610194565b6101d36101ce366004612298565b610496565b60405161019491906124ea565b61018a60fa81565b6101fb6101f6366004611d9b565b6105dc565b005b6101fb61020b366004611de9565b610628565b61018a61021e366004612298565b60086020526000908152604090205481565b6101fb61023e366004612250565b6106bf565b6101fb61073f565b61025e610259366004611fcf565b6107ca565b60405161019491906124a9565b6101fb610279366004612298565b6108f3565b6101fb6109fb565b6101fb610294366004611ef6565b610a2f565b6003546040516001600160a01b039091168152602001610194565b6101fb6102c236600461209f565b610b7c565b61018a601481565b6101fb6102dd366004611f69565b610deb565b61018a6102f0366004612298565b60096020526000908152604090205481565b6101b0610310366004612298565b60076020526000908152604090205460ff1681565b6101fb6103333660046122b1565b610df6565b6101fb6103463660046121ca565b610e55565b6101b0610359366004611db6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101fb610395366004611e92565b610fae565b6101fb6103a8366004611d9b565b611035565b60006001600160a01b03831661041e5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061047557506001600160e01b031982166303a24d0760e21b145b8061049057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008181526007602052604090205460609060ff166105055760405162461bcd60e51b815260206004820152602560248201527f5552492072657175657374656420666f7220696e76616c696420706f74696f6e604482015264207479706560d81b6064820152608401610415565b600060068054610514906126e3565b9050116105ab5760068054610528906126e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610554906126e3565b80156105a15780601f10610576576101008083540402835291602001916105a1565b820191906000526020600020905b81548152906001019060200180831161058457829003601f168201915b5050505050610490565b60066105b6836110d0565b6040516020016105c79291906123e1565b60405160208183030381529060405292915050565b6003546001600160a01b031633146106065760405162461bcd60e51b8152600401610415906125d4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03851633148061064457506106448533610359565b6106ab5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610415565b6106b885858585856111d5565b5050505050565b6003546001600160a01b031633146106e95760405162461bcd60e51b8152600401610415906125d4565b80516106fc906006906020840190611beb565b50600660405161070c91906123d5565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a250565b6003546001600160a01b031633146107695760405162461bcd60e51b8152600401610415906125d4565b600047116107b25760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401610415565b6004546107c8906001600160a01b031647611371565b565b6060815183511461082f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610415565b600083516001600160401b0381111561084a5761084a6127e0565b604051908082528060200260200182016040528015610873578160200160208202803683370190505b50905060005b84518110156108eb576108be858281518110610897576108976127ca565b60200260200101518583815181106108b1576108b16127ca565b60200260200101516103ad565b8282815181106108d0576108d06127ca565b60209081029190910101526108e48161276f565b9050610879565b509392505050565b6000338161090182826103ad565b9050600081116109495760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f7567687420706f74696f6e7360681b6044820152606401610415565b60018410156109905760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a5908189d5c9b88185b5bdd5b9d606a1b6044820152606401610415565b838110156109ea5760405162461bcd60e51b815260206004820152602160248201527f547279696e6720746f206275726e206d6f7265207468616e20796f75206861766044820152606560f81b6064820152608401610415565b6109f5828486611408565b50505050565b6003546001600160a01b03163314610a255760405162461bcd60e51b8152600401610415906125d4565b6107c86000611589565b6003546001600160a01b03163314610a595760405162461bcd60e51b8152600401610415906125d4565b60005b8251811015610b5b5760096000848381518110610a7b57610a7b6127ca565b6020026020010151815260200190815260200160002054828281518110610aa457610aa46127ca565b602002602001015160086000868581518110610ac257610ac26127ca565b6020026020010151815260200190815260200160002054610ae39190612674565b1115610aee57600080fd5b818181518110610b0057610b006127ca565b602002602001015160086000858481518110610b1e57610b1e6127ca565b602002602001015181526020019081526020016000206000828254610b439190612674565b90915550819050610b538161276f565b915050610a5c565b50610b77838383604051806020016040528060008152506115db565b505050565b6003546001600160a01b03163314610ba65760405162461bcd60e51b8152600401610415906125d4565b60005b8151811015610de75760005b828281518110610bc757610bc76127ca565b60200260200101516020015151811015610d625760096000848481518110610bf157610bf16127ca565b6020026020010151602001518381518110610c0e57610c0e6127ca565b6020026020010151815260200190815260200160002054838381518110610c3757610c376127ca565b6020026020010151604001518381518110610c5457610c546127ca565b602002602001015160086000868681518110610c7257610c726127ca565b6020026020010151602001518581518110610c8f57610c8f6127ca565b6020026020010151815260200190815260200160002054610cb09190612674565b1115610cbb57600080fd5b828281518110610ccd57610ccd6127ca565b6020026020010151604001518181518110610cea57610cea6127ca565b602002602001015160086000858581518110610d0857610d086127ca565b6020026020010151602001518481518110610d2557610d256127ca565b602002602001015181526020019081526020016000206000828254610d4a9190612674565b90915550819050610d5a8161276f565b915050610bb5565b50610dd5828281518110610d7857610d786127ca565b602002602001015160000151838381518110610d9657610d966127ca565b602002602001015160200151848481518110610db457610db46127ca565b602002602001015160400151604051806020016040528060008152506115db565b80610ddf8161276f565b915050610ba9565b5050565b610de7338383611760565b6005546001600160a01b03163314610e495760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206275726e6572206164647265737360501b6044820152606401610415565b610de781836001611408565b6003546001600160a01b03163314610e7f5760405162461bcd60e51b8152600401610415906125d4565b60005b8251811015610f815760096000848381518110610ea157610ea16127ca565b6020026020010151815260200190815260200160002054828281518110610eca57610eca6127ca565b602002602001015160086000868581518110610ee857610ee86127ca565b6020026020010151815260200190815260200160002054610f099190612674565b1115610f1457600080fd5b818181518110610f2657610f266127ca565b602002602001015160086000858481518110610f4457610f446127ca565b602002602001015181526020019081526020016000206000828254610f699190612674565b90915550819050610f798161276f565b915050610e82565b50610de7610f976003546001600160a01b031690565b8383604051806020016040528060008152506115db565b6001600160a01b038516331480610fca5750610fca8533610359565b6110285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610415565b6106b88585858585611841565b6003546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610415906125d4565b6001600160a01b0381166110c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b6110cd81611589565b50565b6060816110f45750506040805180820190915260018152600360fc1b602082015290565b8160005b811561111e57806111088161276f565b91506111179050600a8361268c565b91506110f8565b6000816001600160401b03811115611138576111386127e0565b6040519080825280601f01601f191660200182016040528015611162576020820181803683370190505b5090505b84156111cd576111776001836126a0565b9150611184600a8661278a565b61118f906030612674565b60f81b8183815181106111a4576111a46127ca565b60200101906001600160f81b031916908160001a9053506111c6600a8661268c565b9450611166565b949350505050565b81518351146111f65760405162461bcd60e51b815260040161041590612609565b6001600160a01b03841661121c5760405162461bcd60e51b815260040161041590612545565b3360005b845181101561130357600085828151811061123d5761123d6127ca565b60200260200101519050600085838151811061125b5761125b6127ca565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112ab5760405162461bcd60e51b81526004016104159061258a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906112e8908490612674565b92505081905550505050806112fc9061276f565b9050611220565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113539291906124bc565b60405180910390a461136981878787878761196b565b505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146113be576040519150601f19603f3d011682016040523d82523d6000602084013e6113c3565b606091505b5050905080610b775760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b6044820152606401610415565b6001600160a01b03831661146a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610415565b33600061147684611ad6565b9050600061148384611ad6565b60408051602080820183526000918290528882528181528282206001600160a01b038b168352905220549091508481101561150c5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610415565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661163b5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610415565b815183511461165c5760405162461bcd60e51b815260040161041590612609565b3360005b84518110156116f85783818151811061167b5761167b6127ca565b6020026020010151600080878481518110611698576116986127ca565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546116e09190612674565b909155508190506116f08161276f565b915050611660565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117499291906124bc565b60405180910390a46106b88160008787878761196b565b816001600160a01b0316836001600160a01b031614156117d45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610415565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118675760405162461bcd60e51b815260040161041590612545565b33600061187385611ad6565b9050600061188085611ad6565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156118c35760405162461bcd60e51b81526004016104159061258a565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611900908490612674565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611960848a8a8a8a8a611b21565b505050505050505050565b6001600160a01b0384163b156113695760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119af9089908990889088908890600401612406565b602060405180830381600087803b1580156119c957600080fd5b505af19250505080156119f9575060408051601f3d908101601f191682019092526119f691810190612233565b60015b611aa657611a056127f6565b806308c379a01415611a3f5750611a1a612812565b80611a255750611a41565b8060405162461bcd60e51b815260040161041591906124ea565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610415565b6001600160e01b0319811663bc197c8160e01b146115805760405162461bcd60e51b8152600401610415906124fd565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b1057611b106127ca565b602090810291909101015292915050565b6001600160a01b0384163b156113695760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b659089908990889088908890600401612464565b602060405180830381600087803b158015611b7f57600080fd5b505af1925050508015611baf575060408051601f3d908101601f19168201909252611bac91810190612233565b60015b611bbb57611a056127f6565b6001600160e01b0319811663f23a6e6160e01b146115805760405162461bcd60e51b8152600401610415906124fd565b828054611bf7906126e3565b90600052602060002090601f016020900481019282611c195760008555611c5f565b82601f10611c3257805160ff1916838001178555611c5f565b82800160010185558215611c5f579182015b82811115611c5f578251825591602001919060010190611c44565b50611c6b929150611c6f565b5090565b5b80821115611c6b5760008155600101611c70565b60006001600160401b03831115611c9d57611c9d6127e0565b604051611cb4601f8501601f191660200182612743565b809150838152848484011115611cc957600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611cf857600080fd5b919050565b600082601f830112611d0e57600080fd5b81356020611d1b82612651565b604051611d288282612743565b8381528281019150858301600585901b87018401881015611d4857600080fd5b60005b85811015611d6757813584529284019290840190600101611d4b565b5090979650505050505050565b600082601f830112611d8557600080fd5b611d9483833560208501611c84565b9392505050565b600060208284031215611dad57600080fd5b611d9482611ce1565b60008060408385031215611dc957600080fd5b611dd283611ce1565b9150611de060208401611ce1565b90509250929050565b600080600080600060a08688031215611e0157600080fd5b611e0a86611ce1565b9450611e1860208701611ce1565b935060408601356001600160401b0380821115611e3457600080fd5b611e4089838a01611cfd565b94506060880135915080821115611e5657600080fd5b611e6289838a01611cfd565b93506080880135915080821115611e7857600080fd5b50611e8588828901611d74565b9150509295509295909350565b600080600080600060a08688031215611eaa57600080fd5b611eb386611ce1565b9450611ec160208701611ce1565b9350604086013592506060860135915060808601356001600160401b03811115611eea57600080fd5b611e8588828901611d74565b600080600060608486031215611f0b57600080fd5b611f1484611ce1565b925060208401356001600160401b0380821115611f3057600080fd5b611f3c87838801611cfd565b93506040860135915080821115611f5257600080fd5b50611f5f86828701611cfd565b9150509250925092565b60008060408385031215611f7c57600080fd5b611f8583611ce1565b915060208301358015158114611f9a57600080fd5b809150509250929050565b60008060408385031215611fb857600080fd5b611fc183611ce1565b946020939093013593505050565b60008060408385031215611fe257600080fd5b82356001600160401b0380821115611ff957600080fd5b818501915085601f83011261200d57600080fd5b8135602061201a82612651565b6040516120278282612743565b8381528281019150858301600585901b870184018b101561204757600080fd5b600096505b848710156120715761205d81611ce1565b83526001969096019591830191830161204c565b509650508601359250508082111561208857600080fd5b5061209585828601611cfd565b9150509250929050565b600060208083850312156120b257600080fd5b82356001600160401b03808211156120c957600080fd5b818501915085601f8301126120dd57600080fd5b81356120e881612651565b604080516120f68382612743565b8381528681019250858701600585901b870188018b101561211657600080fd5b60005b858110156121ba5781358781111561213057600080fd5b88016060818e03601f1901121561214657600080fd5b84516121518161271e565b61215c8b8301611ce1565b8152858201358981111561216f57600080fd5b61217d8f8d83860101611cfd565b8c8301525060608201358981111561219457600080fd5b6121a28f8d83860101611cfd565b82880152508652509388019390880190600101612119565b50909a9950505050505050505050565b600080604083850312156121dd57600080fd5b82356001600160401b03808211156121f457600080fd5b61220086838701611cfd565b9350602085013591508082111561208857600080fd5b60006020828403121561222857600080fd5b8135611d948161289b565b60006020828403121561224557600080fd5b8151611d948161289b565b60006020828403121561226257600080fd5b81356001600160401b0381111561227857600080fd5b8201601f8101841361228957600080fd5b6111cd84823560208401611c84565b6000602082840312156122aa57600080fd5b5035919050565b600080604083850312156122c457600080fd5b82359150611de060208401611ce1565b600081518084526020808501945080840160005b83811015612304578151875295820195908201906001016122e8565b509495945050505050565b600081518084526123278160208601602086016126b7565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061235557607f831692505b602080841082141561237757634e487b7160e01b600052602260045260246000fd5b81801561238b576001811461239c576123c9565b60ff198616895284890196506123c9565b60008881526020902060005b868110156123c15781548b8201529085019083016123a8565b505084890196505b50505050505092915050565b6000611d94828461233b565b60006123ed828561233b565b83516123fd8183602088016126b7565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612432908301866122d4565b828103606084015261244481866122d4565b90508281036080840152612458818561230f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061249e9083018461230f565b979650505050505050565b602081526000611d9460208301846122d4565b6040815260006124cf60408301856122d4565b82810360208401526124e181856122d4565b95945050505050565b602081526000611d94602083018461230f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b0382111561266a5761266a6127e0565b5060051b60200190565b600082198211156126875761268761279e565b500190565b60008261269b5761269b6127b4565b500490565b6000828210156126b2576126b261279e565b500390565b60005b838110156126d25781810151838201526020016126ba565b838111156109f55750506000910152565b600181811c908216806126f757607f821691505b6020821081141561271857634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561273d5761273d6127e0565b60405250565b601f8201601f191681016001600160401b0381118282101715612768576127686127e0565b6040525050565b60006000198214156127835761278361279e565b5060010190565b600082612799576127996127b4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561280f5760046000803e5060005160e01c5b90565b600060443d10156128205790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561284f57505050505090565b82850191508151818111156128675750505050505090565b843d87010160208285010111156128815750505050505090565b61289060208286010187612743565b509095945050505050565b6001600160e01b0319811681146110cd57600080fdfea2646970667358221220049c0df6aca8055cf2129523e8c4070191ea9e63133f58996992e177a3e7bded64736f6c63430008060033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d506f5a627057316676666b5057584a65644b3956715554663933413444344377694e384371344442767276712f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmPoZbpW1fvfkPWXJedK9VqUTf93A4D4CwiN8Cq4DBvrvq/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d506f5a627057316676666b5057584a65644b3956715554
Arg [3] : 663933413444344377694e384371344442767276712f00000000000000000000


Deployed Bytecode Sourcemap

40964:4382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25516:231;;;;;;:::i;:::-;;:::i;:::-;;;23992:25:1;;;23980:2;23965:18;25516:231:0;;;;;;;;24539:310;;;;;;:::i;:::-;;:::i;:::-;;;14947:14:1;;14940:22;14922:41;;14910:2;14895:18;24539:310:0;14877:92:1;44927:416:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41481:37::-;;41515:3;41481:37;;43560:172;;;;;;:::i;:::-;;:::i;:::-;;27455:442;;;;;;:::i;:::-;;:::i;41276:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;44420:138;;;;;;:::i;:::-;;:::i;44744:175::-;;;:::i;25913:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43972:440::-;;;;;;:::i;:::-;;:::i;4730:103::-;;;:::i;42537:401::-;;;;;;:::i;:::-;;:::i;4079:87::-;4152:6;;4079:87;;-1:-1:-1;;;;;4152:6:0;;;12588:51:1;;12576:2;12561:18;4079:87:0;12543:102:1;42947:605:0;;;;;;:::i;:::-;;:::i;41525:36::-;;41559:2;41525:36;;26510:155;;;;;;:::i;:::-;;:::i;41332:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;41219:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43740:224;;;;;;:::i;:::-;;:::i;42134:395::-;;;;;;:::i;:::-;;:::i;26737:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26860:27:0;;;26836:4;26860:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26737:168;26977:401;;;;;;:::i;:::-;;:::i;4988:201::-;;;;;;:::i;:::-;;:::i;25516:231::-;25602:7;-1:-1:-1;;;;;25630:21:0;;25622:77;;;;-1:-1:-1;;;25622:77:0;;16632:2:1;25622:77:0;;;16614:21:1;16671:2;16651:18;;;16644:30;16710:34;16690:18;;;16683:62;-1:-1:-1;;;16761:18:1;;;16754:41;16812:19;;25622:77:0;;;;;;;;;-1:-1:-1;25717:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;25717:22:0;;;;;;;;;;;;25516:231::o;24539:310::-;24641:4;-1:-1:-1;;;;;;24678:41:0;;-1:-1:-1;;;24678:41:0;;:110;;-1:-1:-1;;;;;;;24736:52:0;;-1:-1:-1;;;24736:52:0;24678:110;:163;;;-1:-1:-1;;;;;;;;;;15941:40:0;;;24805:36;24658:183;24539:310;-1:-1:-1;;24539:310:0:o;44927:416::-;45091:24;;;;:16;:24;;;;;;45038:13;;45091:24;;45069:111;;;;-1:-1:-1;;;45069:111:0;;18962:2:1;45069:111:0;;;18944:21:1;19001:2;18981:18;;;18974:30;19040:34;19020:18;;;19013:62;-1:-1:-1;;;19091:18:1;;;19084:35;19136:19;;45069:111:0;18934:227:1;45069:111:0;45235:1;45217:7;45211:21;;;;;:::i;:::-;;;:25;:124;;45328:7;45211:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45280:7;45289:17;:6;:15;:17::i;:::-;45263:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45191:144;44927:416;-1:-1:-1;;44927:416:0:o;43560:172::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;43682:16:::1;:42:::0;;-1:-1:-1;;;;;;43682:42:0::1;-1:-1:-1::0;;;;;43682:42:0;;;::::1;::::0;;;::::1;::::0;;43560:172::o;27455:442::-;-1:-1:-1;;;;;27688:20:0;;2883:10;27688:20;;:60;;-1:-1:-1;27712:36:0;27729:4;2883:10;26737:168;:::i;27712:36::-;27666:160;;;;-1:-1:-1;;;27666:160:0;;19774:2:1;27666:160:0;;;19756:21:1;19813:2;19793:18;;;19786:30;19852:34;19832:18;;;19825:62;-1:-1:-1;;;19903:18:1;;;19896:48;19961:19;;27666:160:0;19746:240:1;27666:160:0;27837:52;27860:4;27866:2;27870:3;27875:7;27884:4;27837:22;:52::i;:::-;27455:442;;;;;:::o;44420:138::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;44497:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;44542:7;44531:19;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;44420:138:::0;:::o;44744:175::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;44825:1:::1;44801:21;:25;44793:60;;;::::0;-1:-1:-1;;;44793:60:0;;21369:2:1;44793:60:0::1;::::0;::::1;21351:21:1::0;21408:2;21388:18;;;21381:30;-1:-1:-1;;;21427:18:1;;;21420:52;21489:18;;44793:60:0::1;21341:172:1::0;44793:60:0::1;44878:9;::::0;44869:42:::1;::::0;-1:-1:-1;;;;;44878:9:0::1;44889:21;44869:8;:42::i;:::-;44744:175::o:0;25913:524::-;26069:16;26130:3;:10;26111:8;:15;:29;26103:83;;;;-1:-1:-1;;;26103:83:0;;22130:2:1;26103:83:0;;;22112:21:1;22169:2;22149:18;;;22142:30;22208:34;22188:18;;;22181:62;-1:-1:-1;;;22259:18:1;;;22252:39;22308:19;;26103:83:0;22102:231:1;26103:83:0;26199:30;26246:8;:15;-1:-1:-1;;;;;26232:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26232:30:0;;26199:63;;26280:9;26275:122;26299:8;:15;26295:1;:19;26275:122;;;26355:30;26365:8;26374:1;26365:11;;;;;;;;:::i;:::-;;;;;;;26378:3;26382:1;26378:6;;;;;;;;:::i;:::-;;;;;;;26355:9;:30::i;:::-;26336:13;26350:1;26336:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26316:3;;;:::i;:::-;;;26275:122;;;-1:-1:-1;26416:13:0;25913:524;-1:-1:-1;;;25913:524:0:o;43972:440::-;44042:14;44098:10;44042:14;44133:35;44098:10;44042:14;44133:9;:35::i;:::-;44119:49;;44203:1;44197:3;:7;44189:39;;;;-1:-1:-1;;;44189:39:0;;18614:2:1;44189:39:0;;;18596:21:1;18653:2;18633:18;;;18626:30;-1:-1:-1;;;18672:18:1;;;18665:49;18731:18;;44189:39:0;18586:169:1;44189:39:0;44257:1;44247:6;:11;;44239:43;;;;-1:-1:-1;;;44239:43:0;;17451:2:1;44239:43:0;;;17433:21:1;17490:2;17470:18;;;17463:30;-1:-1:-1;;;17509:18:1;;;17502:49;17568:18;;44239:43:0;17423:169:1;44239:43:0;44308:6;44301:3;:13;;44293:59;;;;-1:-1:-1;;;44293:59:0;;16230:2:1;44293:59:0;;;16212:21:1;16269:2;16249:18;;;16242:30;16308:34;16288:18;;;16281:62;-1:-1:-1;;;16359:18:1;;;16352:31;16400:19;;44293:59:0;16202:223:1;44293:59:0;44365:39;44371:16;44389:6;44397;44365:5;:39::i;:::-;44031:381;;;43972:440;:::o;4730:103::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;4795:30:::1;4822:1;4795:18;:30::i;42537:401::-:0;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;42707:9:::1;42702:182;42726:3;:10;42722:1;:14;42702:182;;;42803:11;:19;42815:3;42819:1;42815:6;;;;;;;;:::i;:::-;;;;;;;42803:19;;;;;;;;;;;;42789:7;42797:1;42789:10;;;;;;;;:::i;:::-;;;;;;;42766:12;:20;42779:3;42783:1;42779:6;;;;;;;;:::i;:::-;;;;;;;42766:20;;;;;;;;;;;;:33;;;;:::i;:::-;:56;;42758:65;;;::::0;::::1;;42862:7;42870:1;42862:10;;;;;;;;:::i;:::-;;;;;;;42838:12;:20;42851:3;42855:1;42851:6;;;;;;;;:::i;:::-;;;;;;;42838:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;42738:3:0;;-1:-1:-1;42738:3:0::1;::::0;::::1;:::i;:::-;;;;42702:182;;;;42896:34;42907:4;42913:3;42918:7;42896:34;;;;;;;;;;;::::0;:10:::1;:34::i;:::-;42537:401:::0;;;:::o;42947:605::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;43091:9:::1;43086:459;43110:10;:17;43106:1;:21;43086:459;;;43155:9;43150:280;43174:10;43185:1;43174:13;;;;;;;;:::i;:::-;;;;;;;:17;;;:24;43170:1;:28;43150:280;;;43297:11;:33;43309:10;43320:1;43309:13;;;;;;;;:::i;:::-;;;;;;;:17;;;43327:1;43309:20;;;;;;;;:::i;:::-;;;;;;;43297:33;;;;;;;;;;;;43269:10;43280:1;43269:13;;;;;;;;:::i;:::-;;;;;;;:21;;;43291:1;43269:24;;;;;;;;:::i;:::-;;;;;;;43232:12;:34;43245:10;43256:1;43245:13;;;;;;;;:::i;:::-;;;;;;;:17;;;43263:1;43245:20;;;;;;;;:::i;:::-;;;;;;;43232:34;;;;;;;;;;;;:61;;;;:::i;:::-;:98;;43224:107;;;::::0;::::1;;43389:10;43400:1;43389:13;;;;;;;;:::i;:::-;;;;;;;:21;;;43411:1;43389:24;;;;;;;;:::i;:::-;;;;;;;43351:12;:34;43364:10;43375:1;43364:13;;;;;;;;:::i;:::-;;;;;;;:17;;;43382:1;43364:20;;;;;;;;:::i;:::-;;;;;;;43351:34;;;;;;;;;;;;:62;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;43200:3:0;;-1:-1:-1;43200:3:0::1;::::0;::::1;:::i;:::-;;;;43150:280;;;;43457:76;43468:10;43479:1;43468:13;;;;;;;;:::i;:::-;;;;;;;:18;;;43488:10;43499:1;43488:13;;;;;;;;:::i;:::-;;;;;;;:17;;;43507:10;43518:1;43507:13;;;;;;;;:::i;:::-;;;;;;;:21;;;43457:76;;;;;;;;;;;::::0;:10:::1;:76::i;:::-;43129:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43086:459;;;;42947:605:::0;:::o;26510:155::-;26605:52;2883:10;26638:8;26648;26605:18;:52::i;43740:224::-;43868:16;;-1:-1:-1;;;;;43868:16:0;43854:10;:30;43846:65;;;;-1:-1:-1;;;43846:65:0;;22540:2:1;43846:65:0;;;22522:21:1;22579:2;22559:18;;;22552:30;-1:-1:-1;;;22598:18:1;;;22591:52;22660:18;;43846:65:0;22512:172:1;43846:65:0;43922:34;43928:16;43946:6;43954:1;43922:5;:34::i;42134:395::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;42291:9:::1;42286:182;42310:3;:10;42306:1;:14;42286:182;;;42387:11;:19;42399:3;42403:1;42399:6;;;;;;;;:::i;:::-;;;;;;;42387:19;;;;;;;;;;;;42373:7;42381:1;42373:10;;;;;;;;:::i;:::-;;;;;;;42350:12;:20;42363:3;42367:1;42363:6;;;;;;;;:::i;:::-;;;;;;;42350:20;;;;;;;;;;;;:33;;;;:::i;:::-;:56;;42342:65;;;::::0;::::1;;42446:7;42454:1;42446:10;;;;;;;;:::i;:::-;;;;;;;42422:12;:20;42435:3;42439:1;42435:6;;;;;;;;:::i;:::-;;;;;;;42422:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;42322:3:0;;-1:-1:-1;42322:3:0::1;::::0;::::1;:::i;:::-;;;;42286:182;;;;42484:37;42495:7;4152:6:::0;;-1:-1:-1;;;;;4152:6:0;;4079:87;42495:7:::1;42504:3;42509:7;42484:37;;;;;;;;;;;::::0;:10:::1;:37::i;26977:401::-:0;-1:-1:-1;;;;;27185:20:0;;2883:10;27185:20;;:60;;-1:-1:-1;27209:36:0;27226:4;2883:10;26737:168;:::i;27209:36::-;27163:151;;;;-1:-1:-1;;;27163:151:0;;18204:2:1;27163:151:0;;;18186:21:1;18243:2;18223:18;;;18216:30;18282:34;18262:18;;;18255:62;-1:-1:-1;;;18333:18:1;;;18326:39;18382:19;;27163:151:0;18176:231:1;27163:151:0;27325:45;27343:4;27349:2;27353;27357:6;27365:4;27325:17;:45::i;4988:201::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5077:22:0;::::1;5069:73;;;::::0;-1:-1:-1;;;5069:73:0;;17044:2:1;5069:73:0::1;::::0;::::1;17026:21:1::0;17083:2;17063:18;;;17056:30;17122:34;17102:18;;;17095:62;-1:-1:-1;;;17173:18:1;;;17166:36;17219:19;;5069:73:0::1;17016:228:1::0;5069:73:0::1;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;-1:-1:-1;;;;;867:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;;1073:6;365:723;-1:-1:-1;;;;365:723:0:o;29693:1146::-;29920:7;:14;29906:3;:10;:28;29898:81;;;;-1:-1:-1;;;29898:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29998:16:0;;29990:66;;;;-1:-1:-1;;;29990:66:0;;;;;;;:::i;:::-;2883:10;30069:16;30186:421;30210:3;:10;30206:1;:14;30186:421;;;30242:10;30255:3;30259:1;30255:6;;;;;;;;:::i;:::-;;;;;;;30242:19;;30276:14;30293:7;30301:1;30293:10;;;;;;;;:::i;:::-;;;;;;;;;;;;30320:19;30342:13;;;;;;;;;;-1:-1:-1;;;;;30342:19:0;;;;;;;;;;;;30293:10;;-1:-1:-1;30384:21:0;;;;30376:76;;;;-1:-1:-1;;;30376:76:0;;;;;;;:::i;:::-;30496:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30496:19:0;;;;;;;;;;30518:20;;;30496:42;;30568:17;;;;;;;:27;;30518:20;;30496:9;30568:27;;30518:20;;30568:27;:::i;:::-;;;;;;;;30227:380;;;30222:3;;;;:::i;:::-;;;30186:421;;;;30654:2;-1:-1:-1;;;;;30624:47:0;30648:4;-1:-1:-1;;;;;30624:47:0;30638:8;-1:-1:-1;;;;;30624:47:0;;30658:3;30663:7;30624:47;;;;;;;:::i;:::-;;;;;;;;30756:75;30792:8;30802:4;30808:2;30812:3;30817:7;30826:4;30756:35;:75::i;:::-;29887:952;29693:1146;;;;;:::o;44566:170::-;44634:12;44652:4;-1:-1:-1;;;;;44652:9:0;44669:5;44652:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44633:46;;;44698:7;44690:37;;;;-1:-1:-1;;;44690:37:0;;23702:2:1;44690:37:0;;;23684:21:1;23741:2;23721:18;;;23714:30;-1:-1:-1;;;23760:18:1;;;23753:47;23817:18;;44690:37:0;23674:167:1;34305:808:0;-1:-1:-1;;;;;34432:18:0;;34424:66;;;;-1:-1:-1;;;34424:66:0;;20193:2:1;34424:66:0;;;20175:21:1;20232:2;20212:18;;;20205:30;20271:34;20251:18;;;20244:62;-1:-1:-1;;;20322:18:1;;;20315:33;20365:19;;34424:66:0;20165:225:1;34424:66:0;2883:10;34503:16;34568:21;34586:2;34568:17;:21::i;:::-;34545:44;;34600:24;34627:25;34645:6;34627:17;:25::i;:::-;34665:66;;;;;;;;;-1:-1:-1;34665:66:0;;;;34766:13;;;;;;;;;-1:-1:-1;;;;;34766:19:0;;;;;;;;34600:52;;-1:-1:-1;34804:21:0;;;;34796:70;;;;-1:-1:-1;;;34796:70:0;;17799:2:1;34796:70:0;;;17781:21:1;17838:2;17818:18;;;17811:30;17877:34;17857:18;;;17850:62;-1:-1:-1;;;17928:18:1;;;17921:34;17972:19;;34796:70:0;17771:226:1;34796:70:0;34902:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34902:19:0;;;;;;;;;;;;34924:20;;;34902:42;;34973:54;;24202:25:1;;;24243:18;;;24236:34;;;34902:19:0;;34973:54;;;;;;24175:18:1;34973:54:0;;;;;;;35040:65;;;;;;;;;35084:1;35040:65;;;34413:700;;;;34305:808;;;:::o;5349:191::-;5442:6;;;-1:-1:-1;;;;;5459:17:0;;;-1:-1:-1;;;;;;5459:17:0;;;;;;;5492:40;;5442:6;;;5459:17;5442:6;;5492:40;;5423:16;;5492:40;5412:128;5349:191;:::o;33242:813::-;-1:-1:-1;;;;;33420:16:0;;33412:62;;;;-1:-1:-1;;;33412:62:0;;23300:2:1;33412:62:0;;;23282:21:1;23339:2;23319:18;;;23312:30;23378:34;23358:18;;;23351:62;-1:-1:-1;;;23429:18:1;;;23422:31;23470:19;;33412:62:0;23272:223:1;33412:62:0;33507:7;:14;33493:3;:10;:28;33485:81;;;;-1:-1:-1;;;33485:81:0;;;;;;;:::i;:::-;2883:10;33579:16;33702:103;33726:3;:10;33722:1;:14;33702:103;;;33783:7;33791:1;33783:10;;;;;;;;:::i;:::-;;;;;;;33758:9;:17;33768:3;33772:1;33768:6;;;;;;;;:::i;:::-;;;;;;;33758:17;;;;;;;;;;;:21;33776:2;-1:-1:-1;;;;;33758:21:0;-1:-1:-1;;;;;33758:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;33738:3:0;;-1:-1:-1;33738:3:0;;;:::i;:::-;;;;33702:103;;;;33858:2;-1:-1:-1;;;;;33822:53:0;33854:1;-1:-1:-1;;;;;33822:53:0;33836:8;-1:-1:-1;;;;;33822:53:0;;33862:3;33867:7;33822:53;;;;;;;:::i;:::-;;;;;;;;33966:81;34002:8;34020:1;34024:2;34028:3;34033:7;34042:4;33966:35;:81::i;36427:331::-;36582:8;-1:-1:-1;;;;;36573:17:0;:5;-1:-1:-1;;;;;36573:17:0;;;36565:71;;;;-1:-1:-1;;;36565:71:0;;21720:2:1;36565:71:0;;;21702:21:1;21759:2;21739:18;;;21732:30;21798:34;21778:18;;;21771:62;-1:-1:-1;;;21849:18:1;;;21842:39;21898:19;;36565:71:0;21692:231:1;36565:71:0;-1:-1:-1;;;;;36647:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36647:46:0;;;;;;;;;;36709:41;;14922::1;;;36709::0;;14895:18:1;36709:41:0;;;;;;;36427:331;;;:::o;28361:974::-;-1:-1:-1;;;;;28549:16:0;;28541:66;;;;-1:-1:-1;;;28541:66:0;;;;;;;:::i;:::-;2883:10;28620:16;28685:21;28703:2;28685:17;:21::i;:::-;28662:44;;28717:24;28744:25;28762:6;28744:17;:25::i;:::-;28717:52;;28855:19;28877:13;;;;;;;;;;;-1:-1:-1;;;;;28877:19:0;;;;;;;;;;28915:21;;;;28907:76;;;;-1:-1:-1;;;28907:76:0;;;;;;;:::i;:::-;29019:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29019:19:0;;;;;;;;;;29041:20;;;29019:42;;29083:17;;;;;;;:27;;29041:20;;29019:9;29083:27;;29041:20;;29083:27;:::i;:::-;;;;-1:-1:-1;;29128:46:0;;;24202:25:1;;;24258:2;24243:18;;24236:34;;;-1:-1:-1;;;;;29128:46:0;;;;;;;;;;;;;;24175:18:1;29128:46:0;;;;;;;29259:68;29290:8;29300:4;29306:2;29310;29314:6;29322:4;29259:30;:68::i;:::-;28530:805;;;;28361:974;;;;;:::o;39870:813::-;-1:-1:-1;;;;;40110:13:0;;7075:19;:23;40106:570;;40146:79;;-1:-1:-1;;;40146:79:0;;-1:-1:-1;;;;;40146:43:0;;;;;:79;;40190:8;;40200:4;;40206:3;;40211:7;;40220:4;;40146:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40146:79:0;;;;;;;;-1:-1:-1;;40146:79:0;;;;;;;;;;;;:::i;:::-;;;40142:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40538:6;40531:14;;-1:-1:-1;;;40531:14:0;;;;;;;;:::i;40142:523::-;;;40587:62;;-1:-1:-1;;;40587:62:0;;15400:2:1;40587:62:0;;;15382:21:1;15439:2;15419:18;;;15412:30;15478:34;15458:18;;;15451:62;-1:-1:-1;;;15529:18:1;;;15522:50;15589:19;;40587:62:0;15372:242:1;40142:523:0;-1:-1:-1;;;;;;40307:60:0;;-1:-1:-1;;;40307:60:0;40303:159;;40392:50;;-1:-1:-1;;;40392:50:0;;;;;;;:::i;40691:198::-;40811:16;;;40825:1;40811:16;;;;;;;;;40757;;40786:22;;40811:16;;;;;;;;;;;;-1:-1:-1;40811:16:0;40786:41;;40849:7;40838:5;40844:1;40838:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;40876:5;40691:198;-1:-1:-1;;40691:198:0:o;39118:744::-;-1:-1:-1;;;;;39333:13:0;;7075:19;:23;39329:526;;39369:72;;-1:-1:-1;;;39369:72:0;;-1:-1:-1;;;;;39369:38:0;;;;;:72;;39408:8;;39418:4;;39424:2;;39428:6;;39436:4;;39369:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39369:72:0;;;;;;;;-1:-1:-1;;39369:72:0;;;;;;;;;;;;:::i;:::-;;;39365:479;;;;:::i;:::-;-1:-1:-1;;;;;;39491:55:0;;-1:-1:-1;;;39491:55:0;39487:154;;39571:50;;-1:-1:-1;;;39571:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:2;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:2;;;369:1;366;359:12;328:2;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;88:394;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:2;;650:1;647;640:12;584:2;536:124;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:2;;790:1;787;780:12;739:2;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:2:1;;;1175:1;1172;1165:12;1118:2;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;729:671;-1:-1:-1;;;;;;;729:671:1:o;1405:220::-;1447:5;1500:3;1493:4;1485:6;1481:17;1477:27;1467:2;;1518:1;1515;1508:12;1467:2;1540:79;1615:3;1606:6;1593:20;1586:4;1578:6;1574:17;1540:79;:::i;:::-;1531:88;1457:168;-1:-1:-1;;;1457:168:1:o;1630:186::-;1689:6;1742:2;1730:9;1721:7;1717:23;1713:32;1710:2;;;1758:1;1755;1748:12;1710:2;1781:29;1800:9;1781:29;:::i;1821:260::-;1889:6;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:2;;;1966:1;1963;1956:12;1918:2;1989:29;2008:9;1989:29;:::i;:::-;1979:39;;2037:38;2071:2;2060:9;2056:18;2037:38;:::i;:::-;2027:48;;1908:173;;;;;:::o;2086:943::-;2240:6;2248;2256;2264;2272;2325:3;2313:9;2304:7;2300:23;2296:33;2293:2;;;2342:1;2339;2332:12;2293:2;2365:29;2384:9;2365:29;:::i;:::-;2355:39;;2413:38;2447:2;2436:9;2432:18;2413:38;:::i;:::-;2403:48;;2502:2;2491:9;2487:18;2474:32;-1:-1:-1;;;;;2566:2:1;2558:6;2555:14;2552:2;;;2582:1;2579;2572:12;2552:2;2605:61;2658:7;2649:6;2638:9;2634:22;2605:61;:::i;:::-;2595:71;;2719:2;2708:9;2704:18;2691:32;2675:48;;2748:2;2738:8;2735:16;2732:2;;;2764:1;2761;2754:12;2732:2;2787:63;2842:7;2831:8;2820:9;2816:24;2787:63;:::i;:::-;2777:73;;2903:3;2892:9;2888:19;2875:33;2859:49;;2933:2;2923:8;2920:16;2917:2;;;2949:1;2946;2939:12;2917:2;;2972:51;3015:7;3004:8;2993:9;2989:24;2972:51;:::i;:::-;2962:61;;;2283:746;;;;;;;;:::o;3034:606::-;3138:6;3146;3154;3162;3170;3223:3;3211:9;3202:7;3198:23;3194:33;3191:2;;;3240:1;3237;3230:12;3191:2;3263:29;3282:9;3263:29;:::i;:::-;3253:39;;3311:38;3345:2;3334:9;3330:18;3311:38;:::i;:::-;3301:48;;3396:2;3385:9;3381:18;3368:32;3358:42;;3447:2;3436:9;3432:18;3419:32;3409:42;;3502:3;3491:9;3487:19;3474:33;-1:-1:-1;;;;;3522:6:1;3519:30;3516:2;;;3562:1;3559;3552:12;3516:2;3585:49;3626:7;3617:6;3606:9;3602:22;3585:49;:::i;3645:669::-;3772:6;3780;3788;3841:2;3829:9;3820:7;3816:23;3812:32;3809:2;;;3857:1;3854;3847:12;3809:2;3880:29;3899:9;3880:29;:::i;:::-;3870:39;;3960:2;3949:9;3945:18;3932:32;-1:-1:-1;;;;;4024:2:1;4016:6;4013:14;4010:2;;;4040:1;4037;4030:12;4010:2;4063:61;4116:7;4107:6;4096:9;4092:22;4063:61;:::i;:::-;4053:71;;4177:2;4166:9;4162:18;4149:32;4133:48;;4206:2;4196:8;4193:16;4190:2;;;4222:1;4219;4212:12;4190:2;;4245:63;4300:7;4289:8;4278:9;4274:24;4245:63;:::i;:::-;4235:73;;;3799:515;;;;;:::o;4319:347::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:2;;;4461:1;4458;4451:12;4413:2;4484:29;4503:9;4484:29;:::i;:::-;4474:39;;4563:2;4552:9;4548:18;4535:32;4610:5;4603:13;4596:21;4589:5;4586:32;4576:2;;4632:1;4629;4622:12;4576:2;4655:5;4645:15;;;4403:263;;;;;:::o;4671:254::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:2;;;4816:1;4813;4806:12;4768:2;4839:29;4858:9;4839:29;:::i;:::-;4829:39;4915:2;4900:18;;;;4887:32;;-1:-1:-1;;;4758:167:1:o;4930:1219::-;5048:6;5056;5109:2;5097:9;5088:7;5084:23;5080:32;5077:2;;;5125:1;5122;5115:12;5077:2;5165:9;5152:23;-1:-1:-1;;;;;5235:2:1;5227:6;5224:14;5221:2;;;5251:1;5248;5241:12;5221:2;5289:6;5278:9;5274:22;5264:32;;5334:7;5327:4;5323:2;5319:13;5315:27;5305:2;;5356:1;5353;5346:12;5305:2;5392;5379:16;5414:4;5437:43;5477:2;5437:43;:::i;:::-;5509:2;5503:9;5521:31;5549:2;5541:6;5521:31;:::i;:::-;5587:18;;;5621:15;;;;-1:-1:-1;5656:11:1;;;5698:1;5694:10;;;5686:19;;5682:28;;5679:41;-1:-1:-1;5676:2:1;;;5733:1;5730;5723:12;5676:2;5755:1;5746:10;;5765:169;5779:2;5776:1;5773:9;5765:169;;;5836:23;5855:3;5836:23;:::i;:::-;5824:36;;5797:1;5790:9;;;;;5880:12;;;;5912;;5765:169;;;-1:-1:-1;5953:6:1;-1:-1:-1;;5997:18:1;;5984:32;;-1:-1:-1;;6028:16:1;;;6025:2;;;6057:1;6054;6047:12;6025:2;;6080:63;6135:7;6124:8;6113:9;6109:24;6080:63;:::i;:::-;6070:73;;;5067:1082;;;;;:::o;6154:1807::-;6265:6;6296:2;6339;6327:9;6318:7;6314:23;6310:32;6307:2;;;6355:1;6352;6345:12;6307:2;6395:9;6382:23;-1:-1:-1;;;;;6465:2:1;6457:6;6454:14;6451:2;;;6481:1;6478;6471:12;6451:2;6519:6;6508:9;6504:22;6494:32;;6564:7;6557:4;6553:2;6549:13;6545:27;6535:2;;6586:1;6583;6576:12;6535:2;6622;6609:16;6644:43;6684:2;6644:43;:::i;:::-;6706:2;6737;6731:9;6749:31;6777:2;6769:6;6749:31;:::i;:::-;6815:18;;;6849:15;;;;-1:-1:-1;6884:11:1;;;6926:1;6922:10;;;6914:19;;6910:28;;6907:41;-1:-1:-1;6904:2:1;;;6961:1;6958;6951:12;6904:2;6983:1;6993:937;7007:2;7004:1;7001:9;6993:937;;;7084:3;7071:17;7120:2;7107:11;7104:19;7101:2;;;7136:1;7133;7126:12;7101:2;7163:20;;7235:4;7207:16;;;-1:-1:-1;;7203:30:1;7199:41;7196:2;;;7253:1;7250;7243:12;7196:2;7292;7286:9;7308:34;7333:8;7308:34;:::i;:::-;7372:31;7399:2;7395;7391:11;7372:31;:::i;:::-;7362:8;7355:49;7454:2;7450;7446:11;7433:25;7487:2;7477:8;7474:16;7471:2;;;7503:1;7500;7493:12;7471:2;7546:65;7603:7;7598:2;7587:8;7583:2;7579:17;7575:26;7546:65;:::i;:::-;7541:2;7531:8;7527:17;7520:92;;7662:4;7658:2;7654:13;7641:27;7697:2;7687:8;7684:16;7681:2;;;7713:1;7710;7703:12;7681:2;7756:65;7813:7;7808:2;7797:8;7793:2;7789:17;7785:26;7756:65;:::i;:::-;7737:17;;;7730:92;-1:-1:-1;7835:21:1;;-1:-1:-1;7876:12:1;;;;7908;;;;7025:1;7018:9;6993:937;;;-1:-1:-1;7949:6:1;;6276:1685;-1:-1:-1;;;;;;;;;;6276:1685:1:o;7966:595::-;8084:6;8092;8145:2;8133:9;8124:7;8120:23;8116:32;8113:2;;;8161:1;8158;8151:12;8113:2;8201:9;8188:23;-1:-1:-1;;;;;8271:2:1;8263:6;8260:14;8257:2;;;8287:1;8284;8277:12;8257:2;8310:61;8363:7;8354:6;8343:9;8339:22;8310:61;:::i;:::-;8300:71;;8424:2;8413:9;8409:18;8396:32;8380:48;;8453:2;8443:8;8440:16;8437:2;;;8469:1;8466;8459:12;8566:245;8624:6;8677:2;8665:9;8656:7;8652:23;8648:32;8645:2;;;8693:1;8690;8683:12;8645:2;8732:9;8719:23;8751:30;8775:5;8751:30;:::i;8816:249::-;8885:6;8938:2;8926:9;8917:7;8913:23;8909:32;8906:2;;;8954:1;8951;8944:12;8906:2;8986:9;8980:16;9005:30;9029:5;9005:30;:::i;9070:450::-;9139:6;9192:2;9180:9;9171:7;9167:23;9163:32;9160:2;;;9208:1;9205;9198:12;9160:2;9248:9;9235:23;-1:-1:-1;;;;;9273:6:1;9270:30;9267:2;;;9313:1;9310;9303:12;9267:2;9336:22;;9389:4;9381:13;;9377:27;-1:-1:-1;9367:2:1;;9418:1;9415;9408:12;9367:2;9441:73;9506:7;9501:2;9488:16;9483:2;9479;9475:11;9441:73;:::i;9525:180::-;9584:6;9637:2;9625:9;9616:7;9612:23;9608:32;9605:2;;;9653:1;9650;9643:12;9605:2;-1:-1:-1;9676:23:1;;9595:110;-1:-1:-1;9595:110:1:o;9710:254::-;9778:6;9786;9839:2;9827:9;9818:7;9814:23;9810:32;9807:2;;;9855:1;9852;9845:12;9807:2;9891:9;9878:23;9868:33;;9920:38;9954:2;9943:9;9939:18;9920:38;:::i;9969:435::-;10022:3;10060:5;10054:12;10087:6;10082:3;10075:19;10113:4;10142:2;10137:3;10133:12;10126:19;;10179:2;10172:5;10168:14;10200:1;10210:169;10224:6;10221:1;10218:13;10210:169;;;10285:13;;10273:26;;10319:12;;;;10354:15;;;;10246:1;10239:9;10210:169;;;-1:-1:-1;10395:3:1;;10030:374;-1:-1:-1;;;;;10030:374:1:o;10409:257::-;10450:3;10488:5;10482:12;10515:6;10510:3;10503:19;10531:63;10587:6;10580:4;10575:3;10571:14;10564:4;10557:5;10553:16;10531:63;:::i;:::-;10648:2;10627:15;-1:-1:-1;;10623:29:1;10614:39;;;;10655:4;10610:50;;10458:208;-1:-1:-1;;10458:208:1:o;10671:973::-;10756:12;;10721:3;;10811:1;10831:18;;;;10884;;;;10911:2;;10965:4;10957:6;10953:17;10943:27;;10911:2;10991;11039;11031:6;11028:14;11008:18;11005:38;11002:2;;;11085:10;11080:3;11076:20;11073:1;11066:31;11120:4;11117:1;11110:15;11148:4;11145:1;11138:15;11002:2;11179:18;11206:104;;;;11324:1;11319:319;;;;11172:466;;11206:104;-1:-1:-1;;11239:24:1;;11227:37;;11284:16;;;;-1:-1:-1;11206:104:1;;11319:319;24542:1;24535:14;;;24579:4;24566:18;;11413:1;11427:165;11441:6;11438:1;11435:13;11427:165;;;11519:14;;11506:11;;;11499:35;11562:16;;;;11456:10;;11427:165;;;11431:3;;11621:6;11616:3;11612:16;11605:23;;11172:466;;;;;;;10729:915;;;;:::o;11649:197::-;11777:3;11802:38;11836:3;11828:6;11802:38;:::i;11851:376::-;12027:3;12055:38;12089:3;12081:6;12055:38;:::i;:::-;12122:6;12116:13;12138:52;12183:6;12179:2;12172:4;12164:6;12160:17;12138:52;:::i;:::-;12206:15;;12035:192;-1:-1:-1;;;;12035:192:1:o;12650:826::-;-1:-1:-1;;;;;13047:15:1;;;13029:34;;13099:15;;13094:2;13079:18;;13072:43;13009:3;13146:2;13131:18;;13124:31;;;12972:4;;13178:57;;13215:19;;13207:6;13178:57;:::i;:::-;13283:9;13275:6;13271:22;13266:2;13255:9;13251:18;13244:50;13317:44;13354:6;13346;13317:44;:::i;:::-;13303:58;;13410:9;13402:6;13398:22;13392:3;13381:9;13377:19;13370:51;13438:32;13463:6;13455;13438:32;:::i;:::-;13430:40;12981:495;-1:-1:-1;;;;;;;;12981:495:1:o;13481:560::-;-1:-1:-1;;;;;13778:15:1;;;13760:34;;13830:15;;13825:2;13810:18;;13803:43;13877:2;13862:18;;13855:34;;;13920:2;13905:18;;13898:34;;;13740:3;13963;13948:19;;13941:32;;;13703:4;;13990:45;;14015:19;;14007:6;13990:45;:::i;:::-;13982:53;13712:329;-1:-1:-1;;;;;;;13712:329:1:o;14046:261::-;14225:2;14214:9;14207:21;14188:4;14245:56;14297:2;14286:9;14282:18;14274:6;14245:56;:::i;14312:465::-;14569:2;14558:9;14551:21;14532:4;14595:56;14647:2;14636:9;14632:18;14624:6;14595:56;:::i;:::-;14699:9;14691:6;14687:22;14682:2;14671:9;14667:18;14660:50;14727:44;14764:6;14756;14727:44;:::i;:::-;14719:52;14541:236;-1:-1:-1;;;;;14541:236:1:o;14974:219::-;15123:2;15112:9;15105:21;15086:4;15143:44;15183:2;15172:9;15168:18;15160:6;15143:44;:::i;15619:404::-;15821:2;15803:21;;;15860:2;15840:18;;;15833:30;15899:34;15894:2;15879:18;;15872:62;-1:-1:-1;;;15965:2:1;15950:18;;15943:38;16013:3;15998:19;;15793:230::o;19166:401::-;19368:2;19350:21;;;19407:2;19387:18;;;19380:30;19446:34;19441:2;19426:18;;19419:62;-1:-1:-1;;;19512:2:1;19497:18;;19490:35;19557:3;19542:19;;19340:227::o;20395:406::-;20597:2;20579:21;;;20636:2;20616:18;;;20609:30;20675:34;20670:2;20655:18;;20648:62;-1:-1:-1;;;20741:2:1;20726:18;;20719:40;20791:3;20776:19;;20569:232::o;20806:356::-;21008:2;20990:21;;;21027:18;;;21020:30;21086:34;21081:2;21066:18;;21059:62;21153:2;21138:18;;20980:182::o;22689:404::-;22891:2;22873:21;;;22930:2;22910:18;;;22903:30;22969:34;22964:2;22949:18;;22942:62;-1:-1:-1;;;23035:2:1;23020:18;;23013:38;23083:3;23068:19;;22863:230::o;24281:183::-;24341:4;-1:-1:-1;;;;;24366:6:1;24363:30;24360:2;;;24396:18;;:::i;:::-;-1:-1:-1;24441:1:1;24437:14;24453:4;24433:25;;24350:114::o;24595:128::-;24635:3;24666:1;24662:6;24659:1;24656:13;24653:2;;;24672:18;;:::i;:::-;-1:-1:-1;24708:9:1;;24643:80::o;24728:120::-;24768:1;24794;24784:2;;24799:18;;:::i;:::-;-1:-1:-1;24833:9:1;;24774:74::o;24853:125::-;24893:4;24921:1;24918;24915:8;24912:2;;;24926:18;;:::i;:::-;-1:-1:-1;24963:9:1;;24902:76::o;24983:258::-;25055:1;25065:113;25079:6;25076:1;25073:13;25065:113;;;25155:11;;;25149:18;25136:11;;;25129:39;25101:2;25094:10;25065:113;;;25196:6;25193:1;25190:13;25187:2;;;-1:-1:-1;;25231:1:1;25213:16;;25206:27;25036:205::o;25246:380::-;25325:1;25321:12;;;;25368;;;25389:2;;25443:4;25435:6;25431:17;25421:27;;25389:2;25496;25488:6;25485:14;25465:18;25462:38;25459:2;;;25542:10;25537:3;25533:20;25530:1;25523:31;25577:4;25574:1;25567:15;25605:4;25602:1;25595:15;25459:2;;25301:325;;;:::o;25631:225::-;25717:4;25709:6;25705:17;25788:6;25776:10;25773:22;-1:-1:-1;;;;;25740:10:1;25737:34;25734:62;25731:2;;;25799:18;;:::i;:::-;25835:2;25828:22;-1:-1:-1;25677:179:1:o;25861:249::-;25971:2;25952:13;;-1:-1:-1;;25948:27:1;25936:40;;-1:-1:-1;;;;;25991:34:1;;26027:22;;;25988:62;25985:2;;;26053:18;;:::i;:::-;26089:2;26082:22;-1:-1:-1;;25908:202:1:o;26115:135::-;26154:3;-1:-1:-1;;26175:17:1;;26172:2;;;26195:18;;:::i;:::-;-1:-1:-1;26242:1:1;26231:13;;26162:88::o;26255:112::-;26287:1;26313;26303:2;;26318:18;;:::i;:::-;-1:-1:-1;26352:9:1;;26293:74::o;26372:127::-;26433:10;26428:3;26424:20;26421:1;26414:31;26464:4;26461:1;26454:15;26488:4;26485:1;26478:15;26504:127;26565:10;26560:3;26556:20;26553:1;26546:31;26596:4;26593:1;26586:15;26620:4;26617:1;26610:15;26636:127;26697:10;26692:3;26688:20;26685:1;26678:31;26728:4;26725:1;26718:15;26752:4;26749:1;26742:15;26768:127;26829:10;26824:3;26820:20;26817:1;26810:31;26860:4;26857:1;26850:15;26884:4;26881:1;26874:15;26900:179;26935:3;26977:1;26959:16;26956:23;26953:2;;;27023:1;27020;27017;27002:23;-1:-1:-1;27060:1:1;27054:8;27049:3;27045:18;26953:2;26943:136;:::o;27084:671::-;27123:3;27165:4;27147:16;27144:26;27141:2;;;27131:624;:::o;27141:2::-;27207;27201:9;-1:-1:-1;;27272:16:1;27268:25;;27265:1;27201:9;27244:50;27323:4;27317:11;27347:16;-1:-1:-1;;;;;27453:2:1;27446:4;27438:6;27434:17;27431:25;27426:2;27418:6;27415:14;27412:45;27409:2;;;27460:5;;;;;27131:624;:::o;27409:2::-;27497:6;27491:4;27487:17;27476:28;;27533:3;27527:10;27560:2;27552:6;27549:14;27546:2;;;27566:5;;;;;;27131:624;:::o;27546:2::-;27650;27631:16;27625:4;27621:27;27617:36;27610:4;27601:6;27596:3;27592:16;27588:27;27585:69;27582:2;;;27657:5;;;;;;27131:624;:::o;27582:2::-;27673:57;27724:4;27715:6;27707;27703:19;27699:30;27693:4;27673:57;:::i;:::-;-1:-1:-1;27746:3:1;;27131:624;-1:-1:-1;;;;;27131:624:1:o;27760:131::-;-1:-1:-1;;;;;;27834:32:1;;27824:43;;27814:2;;27881:1;27878;27871:12

Swarm Source

ipfs://049c0df6aca8055cf2129523e8c4070191ea9e63133f58996992e177a3e7bded

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

[Rune Apes](https://opensea.io/collection/runeapes) unstable overload mutation potions.Level 1 can be burnt to purchase trait changes in your Rune Apes.Level 2 can be drank to mutate your Rune Apes.Level 3...

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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