ETH Price: $3,138.96 (-7.23%)

Token

Stoner Pass (SP)
 

Overview

Max Total Supply

10,000 SP

Holders

1,361

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x862007C4F16c1755a2F32CB37C83A31eF1f14a9d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
StonerPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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 v4.4.1 (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.
        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. 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 v4.4.1 (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();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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);

        _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);

        _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();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

        _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);

        _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();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

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

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

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

    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/StonerPass.sol



pragma solidity ^0.8.0;





contract StonerPass is ERC1155, Ownable {

    string public constant name = "Stoner Pass";

    string public constant symbol = "SP";



    uint32 public startDate = 1645568520;

    uint32 public totalSupply = 0;

    uint32 public constant maxSupply = 10000;



    constructor(string memory uri) ERC1155(uri) {}



    function setURI(string memory uri) external onlyOwner {

        _setURI(uri);

    }



    function setStartDate(uint32 timestamp) external onlyOwner {

        startDate = timestamp;

    }



    function saleIsActive() public view returns (bool) {

        return startDate <= block.timestamp;

    }



    function mint(address to, uint32 count) internal {

        totalSupply += count;



        if (count > 1) {

            uint256[] memory ids = new uint256[](uint256(count));

            uint256[] memory amounts = new uint256[](uint256(count));



            for (uint32 i = 0; i < count; i++) {

                ids[i] = totalSupply - count + i;

                amounts[i] = 1;

            }



            _mintBatch(to, ids, amounts, "");

        } else {

            _mint(to, totalSupply - 1, 1, "");

        }

    }



    function mint(uint32 count) external {

        require(saleIsActive(), "Sale is not active.");

        require(count > 0, "Count must be greater than 0.");

        require(

            totalSupply + count <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );



        mint(msg.sender, count);

    }



    function batchMint(address[] memory addresses) external onlyOwner {

        require(

            totalSupply + addresses.length <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );



        for (uint256 i = 0; i < addresses.length; i++) {

            mint(addresses[i], 1);

        }

    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","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":"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":"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":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","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":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526362156208600360146101000a81548163ffffffff021916908363ffffffff1602179055506000600360186101000a81548163ffffffff021916908363ffffffff1602179055503480156200005857600080fd5b5060405162003f2c38038062003f2c83398181016040528101906200007e9190620002d0565b806200009081620000b860201b60201c565b50620000b1620000a5620000d460201b60201c565b620000dc60201b60201c565b50620004a5565b8060029080519060200190620000d0929190620001a2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b090620003b6565b90600052602060002090601f016020900481019282620001d4576000855562000220565b82601f10620001ef57805160ff191683800117855562000220565b8280016001018555821562000220579182015b828111156200021f57825182559160200191906001019062000202565b5b5090506200022f919062000233565b5090565b5b808211156200024e57600081600090555060010162000234565b5090565b60006200026962000263846200034a565b62000321565b90508281526020810184848401111562000288576200028762000485565b5b6200029584828562000380565b509392505050565b600082601f830112620002b557620002b462000480565b5b8151620002c784826020860162000252565b91505092915050565b600060208284031215620002e957620002e86200048f565b5b600082015167ffffffffffffffff8111156200030a57620003096200048a565b5b62000318848285016200029d565b91505092915050565b60006200032d62000340565b90506200033b8282620003ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000368576200036762000451565b5b620003738262000494565b9050602081019050919050565b60005b83811015620003a057808201518184015260208101905062000383565b83811115620003b0576000848401525b50505050565b60006002820490506001821680620003cf57607f821691505b60208210811415620003e657620003e562000422565b5b50919050565b620003f78262000494565b810181811067ffffffffffffffff8211171562000419576200041862000451565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613a7780620004b56000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b8578063d5abeb011161007c578063d5abeb0114610327578063d67b06c114610345578063e985e9c514610361578063eb8d244414610391578063f242432a146103af578063f2fde38b146103cb57610136565b80638da5cb5b1461029757806395d89b41146102b5578063a22cb465146102d3578063a71bbebe146102ef578063c373c0ef1461030b57610136565b80630e89341c116100ff5780630e89341c146101f357806318160ddd146102235780632eb2c2d6146102415780634e1273f41461025d578063715018a61461028d57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806302fe53051461019b57806306fdde03146101b75780630b97bc86146101d5575b600080fd5b610155600480360381019061015091906126bf565b6103e7565b6040516101629190612f93565b60405180910390f35b610185600480360381019061018091906127c0565b6104b0565b6040516101929190612d56565b60405180910390f35b6101b560048036038101906101b0919061281a565b610592565b005b6101bf61061a565b6040516101cc9190612d71565b60405180910390f35b6101dd610653565b6040516101ea9190612fd7565b60405180910390f35b61020d60048036038101906102089190612863565b610669565b60405161021a9190612d71565b60405180910390f35b61022b6106fd565b6040516102389190612fd7565b60405180910390f35b61025b60048036038101906102569190612519565b610713565b005b61027760048036038101906102729190612748565b6107b4565b6040516102849190612cfd565b60405180910390f35b6102956108cd565b005b61029f610955565b6040516102ac9190612c20565b60405180910390f35b6102bd61097f565b6040516102ca9190612d71565b60405180910390f35b6102ed60048036038101906102e8919061267f565b6109b8565b005b61030960048036038101906103049190612890565b6109ce565b005b61032560048036038101906103209190612890565b610ad9565b005b61032f610b79565b60405161033c9190612fd7565b60405180910390f35b61035f600480360381019061035a91906126ff565b610b7f565b005b61037b600480360381019061037691906124d9565b610cb2565b6040516103889190612d56565b60405180910390f35b610399610d46565b6040516103a69190612d56565b60405180910390f35b6103c960048036038101906103c491906125e8565b610d69565b005b6103e560048036038101906103e091906124ac565b610e0a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044f90612dd3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061058b575061058a82610f02565b5b9050919050565b61059a610f6c565b73ffffffffffffffffffffffffffffffffffffffff166105b8610955565b73ffffffffffffffffffffffffffffffffffffffff161461060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060590612ed3565b60405180910390fd5b61061781610f74565b50565b6040518060400160405280600b81526020017f53746f6e6572205061737300000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b606060028054610678906132cc565b80601f01602080910402602001604051908101604052809291908181526020018280546106a4906132cc565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61071b610f6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061076157506107608561075b610f6c565b610cb2565b5b6107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790612e73565b60405180910390fd5b6107ad8585858585610f8e565b5050505050565b606081518351146107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612f33565b60405180910390fd5b6000835167ffffffffffffffff81111561081757610816613432565b5b6040519080825280602002602001820160405280156108455781602001602082028036833780820191505090505b50905060005b84518110156108c25761089285828151811061086a57610869613403565b5b602002602001015185838151811061088557610884613403565b5b60200260200101516103e7565b8282815181106108a5576108a4613403565b5b602002602001018181525050806108bb9061332f565b905061084b565b508091505092915050565b6108d5610f6c565b73ffffffffffffffffffffffffffffffffffffffff166108f3610955565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612ed3565b60405180910390fd5b61095360006112a2565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525081565b6109ca6109c3610f6c565b8383611368565b5050565b6109d6610d46565b610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612ef3565b60405180910390fd5b60008163ffffffff1611610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590612e33565b60405180910390fd5b61271063ffffffff1681600360189054906101000a900463ffffffff16610a859190613198565b63ffffffff161115610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390612eb3565b60405180910390fd5b610ad633826114d5565b50565b610ae1610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610aff610955565b73ffffffffffffffffffffffffffffffffffffffff1614610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90612ed3565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b61271081565b610b87610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610ba5610955565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290612ed3565b60405180910390fd5b61271063ffffffff168151600360189054906101000a900463ffffffff1663ffffffff16610c299190613142565b1115610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612eb3565b60405180910390fd5b60005b8151811015610cae57610c9b828281518110610c8c57610c8b613403565b5b602002602001015160016114d5565b8080610ca69061332f565b915050610c6d565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b610d71610f6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610db75750610db685610db1610f6c565b610cb2565b5b610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90612e13565b60405180910390fd5b610e0385858585856116d6565b5050505050565b610e12610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610e30610955565b73ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612df3565b60405180910390fd5b610eff816112a2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610f8a92919061216f565b5050565b8151835114610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990612f53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990612e53565b60405180910390fd5b600061104c610f6c565b905061105c818787878787611958565b60005b845181101561120d57600085828151811061107d5761107c613403565b5b60200260200101519050600085838151811061109c5761109b613403565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490612e93565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f29190613142565b92505081905550505050806112069061332f565b905061105f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611284929190612d1f565b60405180910390a461129a818787878787611960565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612f13565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114c89190612d56565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff166114f69190613198565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff1611156116915760008163ffffffff1667ffffffffffffffff81111561154557611544613432565b5b6040519080825280602002602001820160405280156115735781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561159857611597613432565b5b6040519080825280602002602001820160405280156115c65781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff16101561166e578084600360189054906101000a900463ffffffff166115ff91906131d2565b6116099190613198565b63ffffffff16838263ffffffff168151811061162857611627613403565b5b6020026020010181815250506001828263ffffffff168151811061164f5761164e613403565b5b602002602001018181525050808061166690613378565b9150506115cc565b5061168a84838360405180602001604052806000815250611b47565b50506116d2565b6116d1826001600360189054906101000a900463ffffffff166116b491906131d2565b63ffffffff16600160405180602001604052806000815250611d65565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90612e53565b60405180910390fd5b6000611750610f6c565b905061177081878761176188611efb565b61176a88611efb565b87611958565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90612e93565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bc9190613142565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611939929190612fae565b60405180910390a461194f828888888888611f75565b50505050505050565b505050505050565b61197f8473ffffffffffffffffffffffffffffffffffffffff1661215c565b15611b3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016119c5959493929190612c3b565b602060405180830381600087803b1580156119df57600080fd5b505af1925050508015611a1057506040513d601f19601f82011682018060405250810190611a0d91906127ed565b60015b611ab657611a1c613461565b806308c379a01415611a795750611a31613938565b80611a3c5750611a7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a709190612d71565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90612d93565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490612db3565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae90612f73565b60405180910390fd5b8151835114611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290612f53565b60405180910390fd5b6000611c05610f6c565b9050611c1681600087878787611958565b60005b8451811015611ccf57838181518110611c3557611c34613403565b5b6020026020010151600080878481518110611c5357611c52613403565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb59190613142565b925050819055508080611cc79061332f565b915050611c19565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d47929190612d1f565b60405180910390a4611d5e81600087878787611960565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90612f73565b60405180910390fd5b6000611ddf610f6c565b9050611e0081600087611df188611efb565b611dfa88611efb565b87611958565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5f9190613142565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611edd929190612fae565b60405180910390a4611ef481600087878787611f75565b5050505050565b60606000600167ffffffffffffffff811115611f1a57611f19613432565b5b604051908082528060200260200182016040528015611f485781602001602082028036833780820191505090505b5090508281600081518110611f6057611f5f613403565b5b60200260200101818152505080915050919050565b611f948473ffffffffffffffffffffffffffffffffffffffff1661215c565b15612154578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fda959493929190612ca3565b602060405180830381600087803b158015611ff457600080fd5b505af192505050801561202557506040513d601f19601f8201168201806040525081019061202291906127ed565b60015b6120cb57612031613461565b806308c379a0141561208e5750612046613938565b806120515750612090565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120859190612d71565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290612d93565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990612db3565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461217b906132cc565b90600052602060002090601f01602090048101928261219d57600085556121e4565b82601f106121b657805160ff19168380011785556121e4565b828001600101855582156121e4579182015b828111156121e35782518255916020019190600101906121c8565b5b5090506121f191906121f5565b5090565b5b8082111561220e5760008160009055506001016121f6565b5090565b600061222561222084613017565b612ff2565b9050808382526020820190508285602086028201111561224857612247613488565b5b60005b85811015612278578161225e8882612376565b84526020840193506020830192505060018101905061224b565b5050509392505050565b600061229561229084613043565b612ff2565b905080838252602082019050828560208602820111156122b8576122b7613488565b5b60005b858110156122e857816122ce8882612482565b8452602084019350602083019250506001810190506122bb565b5050509392505050565b60006123056123008461306f565b612ff2565b9050828152602081018484840111156123215761232061348d565b5b61232c84828561328a565b509392505050565b6000612347612342846130a0565b612ff2565b9050828152602081018484840111156123635761236261348d565b5b61236e84828561328a565b509392505050565b600081359050612385816139ce565b92915050565b600082601f8301126123a05761239f613483565b5b81356123b0848260208601612212565b91505092915050565b600082601f8301126123ce576123cd613483565b5b81356123de848260208601612282565b91505092915050565b6000813590506123f6816139e5565b92915050565b60008135905061240b816139fc565b92915050565b600081519050612420816139fc565b92915050565b600082601f83011261243b5761243a613483565b5b813561244b8482602086016122f2565b91505092915050565b600082601f83011261246957612468613483565b5b8135612479848260208601612334565b91505092915050565b60008135905061249181613a13565b92915050565b6000813590506124a681613a2a565b92915050565b6000602082840312156124c2576124c1613497565b5b60006124d084828501612376565b91505092915050565b600080604083850312156124f0576124ef613497565b5b60006124fe85828601612376565b925050602061250f85828601612376565b9150509250929050565b600080600080600060a0868803121561253557612534613497565b5b600061254388828901612376565b955050602061255488828901612376565b945050604086013567ffffffffffffffff81111561257557612574613492565b5b612581888289016123b9565b935050606086013567ffffffffffffffff8111156125a2576125a1613492565b5b6125ae888289016123b9565b925050608086013567ffffffffffffffff8111156125cf576125ce613492565b5b6125db88828901612426565b9150509295509295909350565b600080600080600060a0868803121561260457612603613497565b5b600061261288828901612376565b955050602061262388828901612376565b945050604061263488828901612482565b935050606061264588828901612482565b925050608086013567ffffffffffffffff81111561266657612665613492565b5b61267288828901612426565b9150509295509295909350565b6000806040838503121561269657612695613497565b5b60006126a485828601612376565b92505060206126b5858286016123e7565b9150509250929050565b600080604083850312156126d6576126d5613497565b5b60006126e485828601612376565b92505060206126f585828601612482565b9150509250929050565b60006020828403121561271557612714613497565b5b600082013567ffffffffffffffff81111561273357612732613492565b5b61273f8482850161238b565b91505092915050565b6000806040838503121561275f5761275e613497565b5b600083013567ffffffffffffffff81111561277d5761277c613492565b5b6127898582860161238b565b925050602083013567ffffffffffffffff8111156127aa576127a9613492565b5b6127b6858286016123b9565b9150509250929050565b6000602082840312156127d6576127d5613497565b5b60006127e4848285016123fc565b91505092915050565b60006020828403121561280357612802613497565b5b600061281184828501612411565b91505092915050565b6000602082840312156128305761282f613497565b5b600082013567ffffffffffffffff81111561284e5761284d613492565b5b61285a84828501612454565b91505092915050565b60006020828403121561287957612878613497565b5b600061288784828501612482565b91505092915050565b6000602082840312156128a6576128a5613497565b5b60006128b484828501612497565b91505092915050565b60006128c98383612bf3565b60208301905092915050565b6128de81613206565b82525050565b60006128ef826130e1565b6128f9818561310f565b9350612904836130d1565b8060005b8381101561293557815161291c88826128bd565b975061292783613102565b925050600181019050612908565b5085935050505092915050565b61294b81613218565b82525050565b600061295c826130ec565b6129668185613120565b9350612976818560208601613299565b61297f8161349c565b840191505092915050565b6000612995826130f7565b61299f8185613131565b93506129af818560208601613299565b6129b88161349c565b840191505092915050565b60006129d0603483613131565b91506129db826134ba565b604082019050919050565b60006129f3602883613131565b91506129fe82613509565b604082019050919050565b6000612a16602b83613131565b9150612a2182613558565b604082019050919050565b6000612a39602683613131565b9150612a44826135a7565b604082019050919050565b6000612a5c602983613131565b9150612a67826135f6565b604082019050919050565b6000612a7f601d83613131565b9150612a8a82613645565b602082019050919050565b6000612aa2602583613131565b9150612aad8261366e565b604082019050919050565b6000612ac5603283613131565b9150612ad0826136bd565b604082019050919050565b6000612ae8602a83613131565b9150612af38261370c565b604082019050919050565b6000612b0b602983613131565b9150612b168261375b565b604082019050919050565b6000612b2e602083613131565b9150612b39826137aa565b602082019050919050565b6000612b51601383613131565b9150612b5c826137d3565b602082019050919050565b6000612b74602983613131565b9150612b7f826137fc565b604082019050919050565b6000612b97602983613131565b9150612ba28261384b565b604082019050919050565b6000612bba602883613131565b9150612bc58261389a565b604082019050919050565b6000612bdd602183613131565b9150612be8826138e9565b604082019050919050565b612bfc81613270565b82525050565b612c0b81613270565b82525050565b612c1a8161327a565b82525050565b6000602082019050612c3560008301846128d5565b92915050565b600060a082019050612c5060008301886128d5565b612c5d60208301876128d5565b8181036040830152612c6f81866128e4565b90508181036060830152612c8381856128e4565b90508181036080830152612c978184612951565b90509695505050505050565b600060a082019050612cb860008301886128d5565b612cc560208301876128d5565b612cd26040830186612c02565b612cdf6060830185612c02565b8181036080830152612cf18184612951565b90509695505050505050565b60006020820190508181036000830152612d1781846128e4565b905092915050565b60006040820190508181036000830152612d3981856128e4565b90508181036020830152612d4d81846128e4565b90509392505050565b6000602082019050612d6b6000830184612942565b92915050565b60006020820190508181036000830152612d8b818461298a565b905092915050565b60006020820190508181036000830152612dac816129c3565b9050919050565b60006020820190508181036000830152612dcc816129e6565b9050919050565b60006020820190508181036000830152612dec81612a09565b9050919050565b60006020820190508181036000830152612e0c81612a2c565b9050919050565b60006020820190508181036000830152612e2c81612a4f565b9050919050565b60006020820190508181036000830152612e4c81612a72565b9050919050565b60006020820190508181036000830152612e6c81612a95565b9050919050565b60006020820190508181036000830152612e8c81612ab8565b9050919050565b60006020820190508181036000830152612eac81612adb565b9050919050565b60006020820190508181036000830152612ecc81612afe565b9050919050565b60006020820190508181036000830152612eec81612b21565b9050919050565b60006020820190508181036000830152612f0c81612b44565b9050919050565b60006020820190508181036000830152612f2c81612b67565b9050919050565b60006020820190508181036000830152612f4c81612b8a565b9050919050565b60006020820190508181036000830152612f6c81612bad565b9050919050565b60006020820190508181036000830152612f8c81612bd0565b9050919050565b6000602082019050612fa86000830184612c02565b92915050565b6000604082019050612fc36000830185612c02565b612fd06020830184612c02565b9392505050565b6000602082019050612fec6000830184612c11565b92915050565b6000612ffc61300d565b905061300882826132fe565b919050565b6000604051905090565b600067ffffffffffffffff82111561303257613031613432565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305e5761305d613432565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308a57613089613432565b5b6130938261349c565b9050602081019050919050565b600067ffffffffffffffff8211156130bb576130ba613432565b5b6130c48261349c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061314d82613270565b915061315883613270565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561318d5761318c6133a5565b5b828201905092915050565b60006131a38261327a565b91506131ae8361327a565b92508263ffffffff038211156131c7576131c66133a5565b5b828201905092915050565b60006131dd8261327a565b91506131e88361327a565b9250828210156131fb576131fa6133a5565b5b828203905092915050565b600061321182613250565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156132b757808201518184015260208101905061329c565b838111156132c6576000848401525b50505050565b600060028204905060018216806132e457607f821691505b602082108114156132f8576132f76133d4565b5b50919050565b6133078261349c565b810181811067ffffffffffffffff8211171561332657613325613432565b5b80604052505050565b600061333a82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561336d5761336c6133a5565b5b600182019050919050565b60006133838261327a565b915063ffffffff82141561339a576133996133a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156134805760046000803e61347d6000516134ad565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613948576139cb565b61395061300d565b60043d036004823e80513d602482011167ffffffffffffffff821117156139785750506139cb565b808201805167ffffffffffffffff81111561399657505050506139cb565b80602083010160043d0385018111156139b35750505050506139cb565b6139c2826020018501866132fe565b82955050505050505b90565b6139d781613206565b81146139e257600080fd5b50565b6139ee81613218565b81146139f957600080fd5b50565b613a0581613224565b8114613a1057600080fd5b50565b613a1c81613270565b8114613a2757600080fd5b50565b613a338161327a565b8114613a3e57600080fd5b5056fea2646970667358221220d25239a1160d7936805d85d3b1a932e63ddf77391d55b1d534f4384a782e614164736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d5a65417738376b745247636132507a376769394c78435a435a466a45376d737162424665374c78716d4334692f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b8578063d5abeb011161007c578063d5abeb0114610327578063d67b06c114610345578063e985e9c514610361578063eb8d244414610391578063f242432a146103af578063f2fde38b146103cb57610136565b80638da5cb5b1461029757806395d89b41146102b5578063a22cb465146102d3578063a71bbebe146102ef578063c373c0ef1461030b57610136565b80630e89341c116100ff5780630e89341c146101f357806318160ddd146102235780632eb2c2d6146102415780634e1273f41461025d578063715018a61461028d57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806302fe53051461019b57806306fdde03146101b75780630b97bc86146101d5575b600080fd5b610155600480360381019061015091906126bf565b6103e7565b6040516101629190612f93565b60405180910390f35b610185600480360381019061018091906127c0565b6104b0565b6040516101929190612d56565b60405180910390f35b6101b560048036038101906101b0919061281a565b610592565b005b6101bf61061a565b6040516101cc9190612d71565b60405180910390f35b6101dd610653565b6040516101ea9190612fd7565b60405180910390f35b61020d60048036038101906102089190612863565b610669565b60405161021a9190612d71565b60405180910390f35b61022b6106fd565b6040516102389190612fd7565b60405180910390f35b61025b60048036038101906102569190612519565b610713565b005b61027760048036038101906102729190612748565b6107b4565b6040516102849190612cfd565b60405180910390f35b6102956108cd565b005b61029f610955565b6040516102ac9190612c20565b60405180910390f35b6102bd61097f565b6040516102ca9190612d71565b60405180910390f35b6102ed60048036038101906102e8919061267f565b6109b8565b005b61030960048036038101906103049190612890565b6109ce565b005b61032560048036038101906103209190612890565b610ad9565b005b61032f610b79565b60405161033c9190612fd7565b60405180910390f35b61035f600480360381019061035a91906126ff565b610b7f565b005b61037b600480360381019061037691906124d9565b610cb2565b6040516103889190612d56565b60405180910390f35b610399610d46565b6040516103a69190612d56565b60405180910390f35b6103c960048036038101906103c491906125e8565b610d69565b005b6103e560048036038101906103e091906124ac565b610e0a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044f90612dd3565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061058b575061058a82610f02565b5b9050919050565b61059a610f6c565b73ffffffffffffffffffffffffffffffffffffffff166105b8610955565b73ffffffffffffffffffffffffffffffffffffffff161461060e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060590612ed3565b60405180910390fd5b61061781610f74565b50565b6040518060400160405280600b81526020017f53746f6e6572205061737300000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b606060028054610678906132cc565b80601f01602080910402602001604051908101604052809291908181526020018280546106a4906132cc565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61071b610f6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061076157506107608561075b610f6c565b610cb2565b5b6107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790612e73565b60405180910390fd5b6107ad8585858585610f8e565b5050505050565b606081518351146107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612f33565b60405180910390fd5b6000835167ffffffffffffffff81111561081757610816613432565b5b6040519080825280602002602001820160405280156108455781602001602082028036833780820191505090505b50905060005b84518110156108c25761089285828151811061086a57610869613403565b5b602002602001015185838151811061088557610884613403565b5b60200260200101516103e7565b8282815181106108a5576108a4613403565b5b602002602001018181525050806108bb9061332f565b905061084b565b508091505092915050565b6108d5610f6c565b73ffffffffffffffffffffffffffffffffffffffff166108f3610955565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090612ed3565b60405180910390fd5b61095360006112a2565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f535000000000000000000000000000000000000000000000000000000000000081525081565b6109ca6109c3610f6c565b8383611368565b5050565b6109d6610d46565b610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612ef3565b60405180910390fd5b60008163ffffffff1611610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590612e33565b60405180910390fd5b61271063ffffffff1681600360189054906101000a900463ffffffff16610a859190613198565b63ffffffff161115610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390612eb3565b60405180910390fd5b610ad633826114d5565b50565b610ae1610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610aff610955565b73ffffffffffffffffffffffffffffffffffffffff1614610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90612ed3565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b61271081565b610b87610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610ba5610955565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290612ed3565b60405180910390fd5b61271063ffffffff168151600360189054906101000a900463ffffffff1663ffffffff16610c299190613142565b1115610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190612eb3565b60405180910390fd5b60005b8151811015610cae57610c9b828281518110610c8c57610c8b613403565b5b602002602001015160016114d5565b8080610ca69061332f565b915050610c6d565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b610d71610f6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610db75750610db685610db1610f6c565b610cb2565b5b610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90612e13565b60405180910390fd5b610e0385858585856116d6565b5050505050565b610e12610f6c565b73ffffffffffffffffffffffffffffffffffffffff16610e30610955565b73ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90612ed3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612df3565b60405180910390fd5b610eff816112a2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610f8a92919061216f565b5050565b8151835114610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990612f53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990612e53565b60405180910390fd5b600061104c610f6c565b905061105c818787878787611958565b60005b845181101561120d57600085828151811061107d5761107c613403565b5b60200260200101519050600085838151811061109c5761109b613403565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490612e93565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f29190613142565b92505081905550505050806112069061332f565b905061105f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611284929190612d1f565b60405180910390a461129a818787878787611960565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce90612f13565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114c89190612d56565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff166114f69190613198565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff1611156116915760008163ffffffff1667ffffffffffffffff81111561154557611544613432565b5b6040519080825280602002602001820160405280156115735781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561159857611597613432565b5b6040519080825280602002602001820160405280156115c65781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff16101561166e578084600360189054906101000a900463ffffffff166115ff91906131d2565b6116099190613198565b63ffffffff16838263ffffffff168151811061162857611627613403565b5b6020026020010181815250506001828263ffffffff168151811061164f5761164e613403565b5b602002602001018181525050808061166690613378565b9150506115cc565b5061168a84838360405180602001604052806000815250611b47565b50506116d2565b6116d1826001600360189054906101000a900463ffffffff166116b491906131d2565b63ffffffff16600160405180602001604052806000815250611d65565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90612e53565b60405180910390fd5b6000611750610f6c565b905061177081878761176188611efb565b61176a88611efb565b87611958565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90612e93565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bc9190613142565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611939929190612fae565b60405180910390a461194f828888888888611f75565b50505050505050565b505050505050565b61197f8473ffffffffffffffffffffffffffffffffffffffff1661215c565b15611b3f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016119c5959493929190612c3b565b602060405180830381600087803b1580156119df57600080fd5b505af1925050508015611a1057506040513d601f19601f82011682018060405250810190611a0d91906127ed565b60015b611ab657611a1c613461565b806308c379a01415611a795750611a31613938565b80611a3c5750611a7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a709190612d71565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90612d93565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490612db3565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae90612f73565b60405180910390fd5b8151835114611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290612f53565b60405180910390fd5b6000611c05610f6c565b9050611c1681600087878787611958565b60005b8451811015611ccf57838181518110611c3557611c34613403565b5b6020026020010151600080878481518110611c5357611c52613403565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb59190613142565b925050819055508080611cc79061332f565b915050611c19565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d47929190612d1f565b60405180910390a4611d5e81600087878787611960565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90612f73565b60405180910390fd5b6000611ddf610f6c565b9050611e0081600087611df188611efb565b611dfa88611efb565b87611958565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5f9190613142565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611edd929190612fae565b60405180910390a4611ef481600087878787611f75565b5050505050565b60606000600167ffffffffffffffff811115611f1a57611f19613432565b5b604051908082528060200260200182016040528015611f485781602001602082028036833780820191505090505b5090508281600081518110611f6057611f5f613403565b5b60200260200101818152505080915050919050565b611f948473ffffffffffffffffffffffffffffffffffffffff1661215c565b15612154578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fda959493929190612ca3565b602060405180830381600087803b158015611ff457600080fd5b505af192505050801561202557506040513d601f19601f8201168201806040525081019061202291906127ed565b60015b6120cb57612031613461565b806308c379a0141561208e5750612046613938565b806120515750612090565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120859190612d71565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290612d93565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990612db3565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461217b906132cc565b90600052602060002090601f01602090048101928261219d57600085556121e4565b82601f106121b657805160ff19168380011785556121e4565b828001600101855582156121e4579182015b828111156121e35782518255916020019190600101906121c8565b5b5090506121f191906121f5565b5090565b5b8082111561220e5760008160009055506001016121f6565b5090565b600061222561222084613017565b612ff2565b9050808382526020820190508285602086028201111561224857612247613488565b5b60005b85811015612278578161225e8882612376565b84526020840193506020830192505060018101905061224b565b5050509392505050565b600061229561229084613043565b612ff2565b905080838252602082019050828560208602820111156122b8576122b7613488565b5b60005b858110156122e857816122ce8882612482565b8452602084019350602083019250506001810190506122bb565b5050509392505050565b60006123056123008461306f565b612ff2565b9050828152602081018484840111156123215761232061348d565b5b61232c84828561328a565b509392505050565b6000612347612342846130a0565b612ff2565b9050828152602081018484840111156123635761236261348d565b5b61236e84828561328a565b509392505050565b600081359050612385816139ce565b92915050565b600082601f8301126123a05761239f613483565b5b81356123b0848260208601612212565b91505092915050565b600082601f8301126123ce576123cd613483565b5b81356123de848260208601612282565b91505092915050565b6000813590506123f6816139e5565b92915050565b60008135905061240b816139fc565b92915050565b600081519050612420816139fc565b92915050565b600082601f83011261243b5761243a613483565b5b813561244b8482602086016122f2565b91505092915050565b600082601f83011261246957612468613483565b5b8135612479848260208601612334565b91505092915050565b60008135905061249181613a13565b92915050565b6000813590506124a681613a2a565b92915050565b6000602082840312156124c2576124c1613497565b5b60006124d084828501612376565b91505092915050565b600080604083850312156124f0576124ef613497565b5b60006124fe85828601612376565b925050602061250f85828601612376565b9150509250929050565b600080600080600060a0868803121561253557612534613497565b5b600061254388828901612376565b955050602061255488828901612376565b945050604086013567ffffffffffffffff81111561257557612574613492565b5b612581888289016123b9565b935050606086013567ffffffffffffffff8111156125a2576125a1613492565b5b6125ae888289016123b9565b925050608086013567ffffffffffffffff8111156125cf576125ce613492565b5b6125db88828901612426565b9150509295509295909350565b600080600080600060a0868803121561260457612603613497565b5b600061261288828901612376565b955050602061262388828901612376565b945050604061263488828901612482565b935050606061264588828901612482565b925050608086013567ffffffffffffffff81111561266657612665613492565b5b61267288828901612426565b9150509295509295909350565b6000806040838503121561269657612695613497565b5b60006126a485828601612376565b92505060206126b5858286016123e7565b9150509250929050565b600080604083850312156126d6576126d5613497565b5b60006126e485828601612376565b92505060206126f585828601612482565b9150509250929050565b60006020828403121561271557612714613497565b5b600082013567ffffffffffffffff81111561273357612732613492565b5b61273f8482850161238b565b91505092915050565b6000806040838503121561275f5761275e613497565b5b600083013567ffffffffffffffff81111561277d5761277c613492565b5b6127898582860161238b565b925050602083013567ffffffffffffffff8111156127aa576127a9613492565b5b6127b6858286016123b9565b9150509250929050565b6000602082840312156127d6576127d5613497565b5b60006127e4848285016123fc565b91505092915050565b60006020828403121561280357612802613497565b5b600061281184828501612411565b91505092915050565b6000602082840312156128305761282f613497565b5b600082013567ffffffffffffffff81111561284e5761284d613492565b5b61285a84828501612454565b91505092915050565b60006020828403121561287957612878613497565b5b600061288784828501612482565b91505092915050565b6000602082840312156128a6576128a5613497565b5b60006128b484828501612497565b91505092915050565b60006128c98383612bf3565b60208301905092915050565b6128de81613206565b82525050565b60006128ef826130e1565b6128f9818561310f565b9350612904836130d1565b8060005b8381101561293557815161291c88826128bd565b975061292783613102565b925050600181019050612908565b5085935050505092915050565b61294b81613218565b82525050565b600061295c826130ec565b6129668185613120565b9350612976818560208601613299565b61297f8161349c565b840191505092915050565b6000612995826130f7565b61299f8185613131565b93506129af818560208601613299565b6129b88161349c565b840191505092915050565b60006129d0603483613131565b91506129db826134ba565b604082019050919050565b60006129f3602883613131565b91506129fe82613509565b604082019050919050565b6000612a16602b83613131565b9150612a2182613558565b604082019050919050565b6000612a39602683613131565b9150612a44826135a7565b604082019050919050565b6000612a5c602983613131565b9150612a67826135f6565b604082019050919050565b6000612a7f601d83613131565b9150612a8a82613645565b602082019050919050565b6000612aa2602583613131565b9150612aad8261366e565b604082019050919050565b6000612ac5603283613131565b9150612ad0826136bd565b604082019050919050565b6000612ae8602a83613131565b9150612af38261370c565b604082019050919050565b6000612b0b602983613131565b9150612b168261375b565b604082019050919050565b6000612b2e602083613131565b9150612b39826137aa565b602082019050919050565b6000612b51601383613131565b9150612b5c826137d3565b602082019050919050565b6000612b74602983613131565b9150612b7f826137fc565b604082019050919050565b6000612b97602983613131565b9150612ba28261384b565b604082019050919050565b6000612bba602883613131565b9150612bc58261389a565b604082019050919050565b6000612bdd602183613131565b9150612be8826138e9565b604082019050919050565b612bfc81613270565b82525050565b612c0b81613270565b82525050565b612c1a8161327a565b82525050565b6000602082019050612c3560008301846128d5565b92915050565b600060a082019050612c5060008301886128d5565b612c5d60208301876128d5565b8181036040830152612c6f81866128e4565b90508181036060830152612c8381856128e4565b90508181036080830152612c978184612951565b90509695505050505050565b600060a082019050612cb860008301886128d5565b612cc560208301876128d5565b612cd26040830186612c02565b612cdf6060830185612c02565b8181036080830152612cf18184612951565b90509695505050505050565b60006020820190508181036000830152612d1781846128e4565b905092915050565b60006040820190508181036000830152612d3981856128e4565b90508181036020830152612d4d81846128e4565b90509392505050565b6000602082019050612d6b6000830184612942565b92915050565b60006020820190508181036000830152612d8b818461298a565b905092915050565b60006020820190508181036000830152612dac816129c3565b9050919050565b60006020820190508181036000830152612dcc816129e6565b9050919050565b60006020820190508181036000830152612dec81612a09565b9050919050565b60006020820190508181036000830152612e0c81612a2c565b9050919050565b60006020820190508181036000830152612e2c81612a4f565b9050919050565b60006020820190508181036000830152612e4c81612a72565b9050919050565b60006020820190508181036000830152612e6c81612a95565b9050919050565b60006020820190508181036000830152612e8c81612ab8565b9050919050565b60006020820190508181036000830152612eac81612adb565b9050919050565b60006020820190508181036000830152612ecc81612afe565b9050919050565b60006020820190508181036000830152612eec81612b21565b9050919050565b60006020820190508181036000830152612f0c81612b44565b9050919050565b60006020820190508181036000830152612f2c81612b67565b9050919050565b60006020820190508181036000830152612f4c81612b8a565b9050919050565b60006020820190508181036000830152612f6c81612bad565b9050919050565b60006020820190508181036000830152612f8c81612bd0565b9050919050565b6000602082019050612fa86000830184612c02565b92915050565b6000604082019050612fc36000830185612c02565b612fd06020830184612c02565b9392505050565b6000602082019050612fec6000830184612c11565b92915050565b6000612ffc61300d565b905061300882826132fe565b919050565b6000604051905090565b600067ffffffffffffffff82111561303257613031613432565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305e5761305d613432565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308a57613089613432565b5b6130938261349c565b9050602081019050919050565b600067ffffffffffffffff8211156130bb576130ba613432565b5b6130c48261349c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061314d82613270565b915061315883613270565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561318d5761318c6133a5565b5b828201905092915050565b60006131a38261327a565b91506131ae8361327a565b92508263ffffffff038211156131c7576131c66133a5565b5b828201905092915050565b60006131dd8261327a565b91506131e88361327a565b9250828210156131fb576131fa6133a5565b5b828203905092915050565b600061321182613250565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156132b757808201518184015260208101905061329c565b838111156132c6576000848401525b50505050565b600060028204905060018216806132e457607f821691505b602082108114156132f8576132f76133d4565b5b50919050565b6133078261349c565b810181811067ffffffffffffffff8211171561332657613325613432565b5b80604052505050565b600061333a82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561336d5761336c6133a5565b5b600182019050919050565b60006133838261327a565b915063ffffffff82141561339a576133996133a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156134805760046000803e61347d6000516134ad565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613948576139cb565b61395061300d565b60043d036004823e80513d602482011167ffffffffffffffff821117156139785750506139cb565b808201805167ffffffffffffffff81111561399657505050506139cb565b80602083010160043d0385018111156139b35750505050506139cb565b6139c2826020018501866132fe565b82955050505050505b90565b6139d781613206565b81146139e257600080fd5b50565b6139ee81613218565b81146139f957600080fd5b50565b613a0581613224565b8114613a1057600080fd5b50565b613a1c81613270565b8114613a2757600080fd5b50565b613a338161327a565b8114613a3e57600080fd5b5056fea2646970667358221220d25239a1160d7936805d85d3b1a932e63ddf77391d55b1d534f4384a782e614164736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d5a65417738376b745247636132507a376769394c78435a435a466a45376d737162424665374c78716d4334692f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : uri (string): https://buckets.mypinata.cloud/ipfs/QmZeAw87ktRGca2Pz7gi9LxCZCZFjE7msqbBFe7LxqmC4i/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d5a65417738376b745247636132507a376769394c78435a435a46
Arg [4] : 6a45376d737162424665374c78716d4334692f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36557:1969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36901:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36606:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36707:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36752:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24917:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23375:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;:::i;:::-;;1955:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36658:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37813:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37002:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36790:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38177:344;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24199:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37117:109;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;36901:89::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36968:12:::1;36976:3;36968:7;:12::i;:::-;36901:89:::0;:::o;36606:43::-;;;;;;;;;;;;;;;;;;;:::o;36707:36::-;;;;;;;;;;;;;:::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;36752:29::-;;;;;;;;;;;;;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;36658:36::-;;;;;;;;;;;;;;;;;;;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;37813:352::-;37871:14;:12;:14::i;:::-;37863:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:1;37930:5;:9;;;37922:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:5;38010:32;;38024:5;38010:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;37986:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;38132:23;38137:10;38149:5;38132:4;:23::i;:::-;37813:352;:::o;37002:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37086:9:::1;37074;;:21;;;;;;;;;;;;;;;;;;37002:103:::0;:::o;36790:40::-;36825:5;36790:40;:::o;38177:344::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:5:::1;38280:43;;38294:9;:16;38280:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;38256:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38418:9;38413:99;38437:9;:16;38433:1;:20;38413:99;;;38477:21;38482:9;38492:1;38482:12;;;;;;;;:::i;:::-;;;;;;;;38496:1;38477:4;:21::i;:::-;38455:3;;;;;:::i;:::-;;;;38413:99;;;;38177:344:::0;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;37117:109::-;37162:4;37201:15;37188:9;;;;;;;;;;;:28;;;;37181:35;;37117:109;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28919:88::-;28993:6;28986:4;:13;;;;;;;;;;;;:::i;:::-;;28919:88;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;37238:563::-;37315:5;37300:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37349:1;37341:5;:9;;;37337:455;;;37369:20;37414:5;37406:14;;37392:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37369:52;;37438:24;37487:5;37479:14;;37465:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37438:56;;37520:8;37515:141;37538:5;37534:9;;:1;:9;;;37515:141;;;37602:1;37594:5;37580:11;;;;;;;;;;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;37571:32;;:3;37575:1;37571:6;;;;;;;;;;:::i;:::-;;;;;;;:32;;;;;37637:1;37624:7;37632:1;37624:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;37545:3;;;;;:::i;:::-;;;;37515:141;;;;37676:32;37687:2;37691:3;37696:7;37676:32;;;;;;;;;;;;:10;:32::i;:::-;37352:370;;37337:455;;;37745:33;37751:2;37769:1;37755:11;;;;;;;;;;;:15;;;;:::i;:::-;37745:33;;37772:1;37745:33;;;;;;;;;;;;:5;:33::i;:::-;37337:455;37238:563;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;34474:221::-;;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;30318:735::-;30510:1;30496:16;;:2;:16;;;;30488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:14;30569:3;:10;:28;30561:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:16;30674:12;:10;:12::i;:::-;30655:31;;30699:66;30720:8;30738:1;30742:2;30746:3;30751:7;30760:4;30699:20;:66::i;:::-;30783:9;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;30834:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30814:3;;;;;:::i;:::-;;;;30778:103;;;;30934:2;30898:53;;30930:1;30898:53;;30912:8;30898:53;;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;:::-;30477:576;30318:735;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:137::-;4598:5;4636:6;4623:20;4614:29;;4652:32;4678:5;4652:32;:::i;:::-;4553:137;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:539::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9362:1;9351:9;9347:17;9334:31;9392:18;9384:6;9381:30;9378:117;;;9414:79;;:::i;:::-;9378:117;9519:78;9589:7;9580:6;9569:9;9565:22;9519:78;:::i;:::-;9509:88;;9305:302;9075:539;;;;:::o;9620:894::-;9738:6;9746;9795:2;9783:9;9774:7;9770:23;9766:32;9763:119;;;9801:79;;:::i;:::-;9763:119;9949:1;9938:9;9934:17;9921:31;9979:18;9971:6;9968:30;9965:117;;;10001:79;;:::i;:::-;9965:117;10106:78;10176:7;10167:6;10156:9;10152:22;10106:78;:::i;:::-;10096:88;;9892:302;10261:2;10250:9;10246:18;10233:32;10292:18;10284:6;10281:30;10278:117;;;10314:79;;:::i;:::-;10278:117;10419:78;10489:7;10480:6;10469:9;10465:22;10419:78;:::i;:::-;10409:88;;10204:303;9620:894;;;;;:::o;10520:327::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:52;10822:7;10813:6;10802:9;10798:22;10778:52;:::i;:::-;10768:62;;10724:116;10520:327;;;;:::o;10853:349::-;10922:6;10971:2;10959:9;10950:7;10946:23;10942:32;10939:119;;;10977:79;;:::i;:::-;10939:119;11097:1;11122:63;11177:7;11168:6;11157:9;11153:22;11122:63;:::i;:::-;11112:73;;11068:127;10853:349;;;;:::o;11208:509::-;11277:6;11326:2;11314:9;11305:7;11301:23;11297:32;11294:119;;;11332:79;;:::i;:::-;11294:119;11480:1;11469:9;11465:17;11452:31;11510:18;11502:6;11499:30;11496:117;;;11532:79;;:::i;:::-;11496:117;11637:63;11692:7;11683:6;11672:9;11668:22;11637:63;:::i;:::-;11627:73;;11423:287;11208:509;;;;:::o;11723:329::-;11782:6;11831:2;11819:9;11810:7;11806:23;11802:32;11799:119;;;11837:79;;:::i;:::-;11799:119;11957:1;11982:53;12027:7;12018:6;12007:9;12003:22;11982:53;:::i;:::-;11972:63;;11928:117;11723:329;;;;:::o;12058:327::-;12116:6;12165:2;12153:9;12144:7;12140:23;12136:32;12133:119;;;12171:79;;:::i;:::-;12133:119;12291:1;12316:52;12360:7;12351:6;12340:9;12336:22;12316:52;:::i;:::-;12306:62;;12262:116;12058:327;;;;:::o;12391:179::-;12460:10;12481:46;12523:3;12515:6;12481:46;:::i;:::-;12559:4;12554:3;12550:14;12536:28;;12391:179;;;;:::o;12576:118::-;12663:24;12681:5;12663:24;:::i;:::-;12658:3;12651:37;12576:118;;:::o;12730:732::-;12849:3;12878:54;12926:5;12878:54;:::i;:::-;12948:86;13027:6;13022:3;12948:86;:::i;:::-;12941:93;;13058:56;13108:5;13058:56;:::i;:::-;13137:7;13168:1;13153:284;13178:6;13175:1;13172:13;13153:284;;;13254:6;13248:13;13281:63;13340:3;13325:13;13281:63;:::i;:::-;13274:70;;13367:60;13420:6;13367:60;:::i;:::-;13357:70;;13213:224;13200:1;13197;13193:9;13188:14;;13153:284;;;13157:14;13453:3;13446:10;;12854:608;;;12730:732;;;;:::o;13468:109::-;13549:21;13564:5;13549:21;:::i;:::-;13544:3;13537:34;13468:109;;:::o;13583:360::-;13669:3;13697:38;13729:5;13697:38;:::i;:::-;13751:70;13814:6;13809:3;13751:70;:::i;:::-;13744:77;;13830:52;13875:6;13870:3;13863:4;13856:5;13852:16;13830:52;:::i;:::-;13907:29;13929:6;13907:29;:::i;:::-;13902:3;13898:39;13891:46;;13673:270;13583:360;;;;:::o;13949:364::-;14037:3;14065:39;14098:5;14065:39;:::i;:::-;14120:71;14184:6;14179:3;14120:71;:::i;:::-;14113:78;;14200:52;14245:6;14240:3;14233:4;14226:5;14222:16;14200:52;:::i;:::-;14277:29;14299:6;14277:29;:::i;:::-;14272:3;14268:39;14261:46;;14041:272;13949:364;;;;:::o;14319:366::-;14461:3;14482:67;14546:2;14541:3;14482:67;:::i;:::-;14475:74;;14558:93;14647:3;14558:93;:::i;:::-;14676:2;14671:3;14667:12;14660:19;;14319:366;;;:::o;14691:::-;14833:3;14854:67;14918:2;14913:3;14854:67;:::i;:::-;14847:74;;14930:93;15019:3;14930:93;:::i;:::-;15048:2;15043:3;15039:12;15032:19;;14691:366;;;:::o;15063:::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:::-;15577:3;15598:67;15662:2;15657:3;15598:67;:::i;:::-;15591:74;;15674:93;15763:3;15674:93;:::i;:::-;15792:2;15787:3;15783:12;15776:19;;15435:366;;;:::o;15807:::-;15949:3;15970:67;16034:2;16029:3;15970:67;:::i;:::-;15963:74;;16046:93;16135:3;16046:93;:::i;:::-;16164:2;16159:3;16155:12;16148:19;;15807:366;;;:::o;16179:::-;16321:3;16342:67;16406:2;16401:3;16342:67;:::i;:::-;16335:74;;16418:93;16507:3;16418:93;:::i;:::-;16536:2;16531:3;16527:12;16520:19;;16179:366;;;:::o;16551:::-;16693:3;16714:67;16778:2;16773:3;16714:67;:::i;:::-;16707:74;;16790:93;16879:3;16790:93;:::i;:::-;16908:2;16903:3;16899:12;16892:19;;16551:366;;;:::o;16923:::-;17065:3;17086:67;17150:2;17145:3;17086:67;:::i;:::-;17079:74;;17162:93;17251:3;17162:93;:::i;:::-;17280:2;17275:3;17271:12;17264:19;;16923:366;;;:::o;17295:::-;17437:3;17458:67;17522:2;17517:3;17458:67;:::i;:::-;17451:74;;17534:93;17623:3;17534:93;:::i;:::-;17652:2;17647:3;17643:12;17636:19;;17295:366;;;:::o;17667:::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:::-;18181:3;18202:67;18266:2;18261:3;18202:67;:::i;:::-;18195:74;;18278:93;18367:3;18278:93;:::i;:::-;18396:2;18391:3;18387:12;18380:19;;18039:366;;;:::o;18411:::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:::-;20041:3;20062:67;20126:2;20121:3;20062:67;:::i;:::-;20055:74;;20138:93;20227:3;20138:93;:::i;:::-;20256:2;20251:3;20247:12;20240:19;;19899:366;;;:::o;20271:108::-;20348:24;20366:5;20348:24;:::i;:::-;20343:3;20336:37;20271:108;;:::o;20385:118::-;20472:24;20490:5;20472:24;:::i;:::-;20467:3;20460:37;20385:118;;:::o;20509:115::-;20594:23;20611:5;20594:23;:::i;:::-;20589:3;20582:36;20509:115;;:::o;20630:222::-;20723:4;20761:2;20750:9;20746:18;20738:26;;20774:71;20842:1;20831:9;20827:17;20818:6;20774:71;:::i;:::-;20630:222;;;;:::o;20858:1053::-;21181:4;21219:3;21208:9;21204:19;21196:27;;21233:71;21301:1;21290:9;21286:17;21277:6;21233:71;:::i;:::-;21314:72;21382:2;21371:9;21367:18;21358:6;21314:72;:::i;:::-;21433:9;21427:4;21423:20;21418:2;21407:9;21403:18;21396:48;21461:108;21564:4;21555:6;21461:108;:::i;:::-;21453:116;;21616:9;21610:4;21606:20;21601:2;21590:9;21586:18;21579:48;21644:108;21747:4;21738:6;21644:108;:::i;:::-;21636:116;;21800:9;21794:4;21790:20;21784:3;21773:9;21769:19;21762:49;21828:76;21899:4;21890:6;21828:76;:::i;:::-;21820:84;;20858:1053;;;;;;;;:::o;21917:751::-;22140:4;22178:3;22167:9;22163:19;22155:27;;22192:71;22260:1;22249:9;22245:17;22236:6;22192:71;:::i;:::-;22273:72;22341:2;22330:9;22326:18;22317:6;22273:72;:::i;:::-;22355;22423:2;22412:9;22408:18;22399:6;22355:72;:::i;:::-;22437;22505:2;22494:9;22490:18;22481:6;22437:72;:::i;:::-;22557:9;22551:4;22547:20;22541:3;22530:9;22526:19;22519:49;22585:76;22656:4;22647:6;22585:76;:::i;:::-;22577:84;;21917:751;;;;;;;;:::o;22674:373::-;22817:4;22855:2;22844:9;22840:18;22832:26;;22904:9;22898:4;22894:20;22890:1;22879:9;22875:17;22868:47;22932:108;23035:4;23026:6;22932:108;:::i;:::-;22924:116;;22674:373;;;;:::o;23053:634::-;23274:4;23312:2;23301:9;23297:18;23289:26;;23361:9;23355:4;23351:20;23347:1;23336:9;23332:17;23325:47;23389:108;23492:4;23483:6;23389:108;:::i;:::-;23381:116;;23544:9;23538:4;23534:20;23529:2;23518:9;23514:18;23507:48;23572:108;23675:4;23666:6;23572:108;:::i;:::-;23564:116;;23053:634;;;;;:::o;23693:210::-;23780:4;23818:2;23807:9;23803:18;23795:26;;23831:65;23893:1;23882:9;23878:17;23869:6;23831:65;:::i;:::-;23693:210;;;;:::o;23909:313::-;24022:4;24060:2;24049:9;24045:18;24037:26;;24109:9;24103:4;24099:20;24095:1;24084:9;24080:17;24073:47;24137:78;24210:4;24201:6;24137:78;:::i;:::-;24129:86;;23909:313;;;;:::o;24228:419::-;24394:4;24432:2;24421:9;24417:18;24409:26;;24481:9;24475:4;24471:20;24467:1;24456:9;24452:17;24445:47;24509:131;24635:4;24509:131;:::i;:::-;24501:139;;24228:419;;;:::o;24653:::-;24819:4;24857:2;24846:9;24842:18;24834:26;;24906:9;24900:4;24896:20;24892:1;24881:9;24877:17;24870:47;24934:131;25060:4;24934:131;:::i;:::-;24926:139;;24653:419;;;:::o;25078:::-;25244:4;25282:2;25271:9;25267:18;25259:26;;25331:9;25325:4;25321:20;25317:1;25306:9;25302:17;25295:47;25359:131;25485:4;25359:131;:::i;:::-;25351:139;;25078:419;;;:::o;25503:::-;25669:4;25707:2;25696:9;25692:18;25684:26;;25756:9;25750:4;25746:20;25742:1;25731:9;25727:17;25720:47;25784:131;25910:4;25784:131;:::i;:::-;25776:139;;25503:419;;;:::o;25928:::-;26094:4;26132:2;26121:9;26117:18;26109:26;;26181:9;26175:4;26171:20;26167:1;26156:9;26152:17;26145:47;26209:131;26335:4;26209:131;:::i;:::-;26201:139;;25928:419;;;:::o;26353:::-;26519:4;26557:2;26546:9;26542:18;26534:26;;26606:9;26600:4;26596:20;26592:1;26581:9;26577:17;26570:47;26634:131;26760:4;26634:131;:::i;:::-;26626:139;;26353:419;;;:::o;26778:::-;26944:4;26982:2;26971:9;26967:18;26959:26;;27031:9;27025:4;27021:20;27017:1;27006:9;27002:17;26995:47;27059:131;27185:4;27059:131;:::i;:::-;27051:139;;26778:419;;;:::o;27203:::-;27369:4;27407:2;27396:9;27392:18;27384:26;;27456:9;27450:4;27446:20;27442:1;27431:9;27427:17;27420:47;27484:131;27610:4;27484:131;:::i;:::-;27476:139;;27203:419;;;:::o;27628:::-;27794:4;27832:2;27821:9;27817:18;27809:26;;27881:9;27875:4;27871:20;27867:1;27856:9;27852:17;27845:47;27909:131;28035:4;27909:131;:::i;:::-;27901:139;;27628:419;;;:::o;28053:::-;28219:4;28257:2;28246:9;28242:18;28234:26;;28306:9;28300:4;28296:20;28292:1;28281:9;28277:17;28270:47;28334:131;28460:4;28334:131;:::i;:::-;28326:139;;28053:419;;;:::o;28478:::-;28644:4;28682:2;28671:9;28667:18;28659:26;;28731:9;28725:4;28721:20;28717:1;28706:9;28702:17;28695:47;28759:131;28885:4;28759:131;:::i;:::-;28751:139;;28478:419;;;:::o;28903:::-;29069:4;29107:2;29096:9;29092:18;29084:26;;29156:9;29150:4;29146:20;29142:1;29131:9;29127:17;29120:47;29184:131;29310:4;29184:131;:::i;:::-;29176:139;;28903:419;;;:::o;29328:::-;29494:4;29532:2;29521:9;29517:18;29509:26;;29581:9;29575:4;29571:20;29567:1;29556:9;29552:17;29545:47;29609:131;29735:4;29609:131;:::i;:::-;29601:139;;29328:419;;;:::o;29753:::-;29919:4;29957:2;29946:9;29942:18;29934:26;;30006:9;30000:4;29996:20;29992:1;29981:9;29977:17;29970:47;30034:131;30160:4;30034:131;:::i;:::-;30026:139;;29753:419;;;:::o;30178:::-;30344:4;30382:2;30371:9;30367:18;30359:26;;30431:9;30425:4;30421:20;30417:1;30406:9;30402:17;30395:47;30459:131;30585:4;30459:131;:::i;:::-;30451:139;;30178:419;;;:::o;30603:::-;30769:4;30807:2;30796:9;30792:18;30784:26;;30856:9;30850:4;30846:20;30842:1;30831:9;30827:17;30820:47;30884:131;31010:4;30884:131;:::i;:::-;30876:139;;30603:419;;;:::o;31028:222::-;31121:4;31159:2;31148:9;31144:18;31136:26;;31172:71;31240:1;31229:9;31225:17;31216:6;31172:71;:::i;:::-;31028:222;;;;:::o;31256:332::-;31377:4;31415:2;31404:9;31400:18;31392:26;;31428:71;31496:1;31485:9;31481:17;31472:6;31428:71;:::i;:::-;31509:72;31577:2;31566:9;31562:18;31553:6;31509:72;:::i;:::-;31256:332;;;;;:::o;31594:218::-;31685:4;31723:2;31712:9;31708:18;31700:26;;31736:69;31802:1;31791:9;31787:17;31778:6;31736:69;:::i;:::-;31594:218;;;;:::o;31818:129::-;31852:6;31879:20;;:::i;:::-;31869:30;;31908:33;31936:4;31928:6;31908:33;:::i;:::-;31818:129;;;:::o;31953:75::-;31986:6;32019:2;32013:9;32003:19;;31953:75;:::o;32034:311::-;32111:4;32201:18;32193:6;32190:30;32187:56;;;32223:18;;:::i;:::-;32187:56;32273:4;32265:6;32261:17;32253:25;;32333:4;32327;32323:15;32315:23;;32034:311;;;:::o;32351:::-;32428:4;32518:18;32510:6;32507:30;32504:56;;;32540:18;;:::i;:::-;32504:56;32590:4;32582:6;32578:17;32570:25;;32650:4;32644;32640:15;32632:23;;32351:311;;;:::o;32668:307::-;32729:4;32819:18;32811:6;32808:30;32805:56;;;32841:18;;:::i;:::-;32805:56;32879:29;32901:6;32879:29;:::i;:::-;32871:37;;32963:4;32957;32953:15;32945:23;;32668:307;;;:::o;32981:308::-;33043:4;33133:18;33125:6;33122:30;33119:56;;;33155:18;;:::i;:::-;33119:56;33193:29;33215:6;33193:29;:::i;:::-;33185:37;;33277:4;33271;33267:15;33259:23;;32981:308;;;:::o;33295:132::-;33362:4;33385:3;33377:11;;33415:4;33410:3;33406:14;33398:22;;33295:132;;;:::o;33433:114::-;33500:6;33534:5;33528:12;33518:22;;33433:114;;;:::o;33553:98::-;33604:6;33638:5;33632:12;33622:22;;33553:98;;;:::o;33657:99::-;33709:6;33743:5;33737:12;33727:22;;33657:99;;;:::o;33762:113::-;33832:4;33864;33859:3;33855:14;33847:22;;33762:113;;;:::o;33881:184::-;33980:11;34014:6;34009:3;34002:19;34054:4;34049:3;34045:14;34030:29;;33881:184;;;;:::o;34071:168::-;34154:11;34188:6;34183:3;34176:19;34228:4;34223:3;34219:14;34204:29;;34071:168;;;;:::o;34245:169::-;34329:11;34363:6;34358:3;34351:19;34403:4;34398:3;34394:14;34379:29;;34245:169;;;;:::o;34420:305::-;34460:3;34479:20;34497:1;34479:20;:::i;:::-;34474:25;;34513:20;34531:1;34513:20;:::i;:::-;34508:25;;34667:1;34599:66;34595:74;34592:1;34589:81;34586:107;;;34673:18;;:::i;:::-;34586:107;34717:1;34714;34710:9;34703:16;;34420:305;;;;:::o;34731:246::-;34770:3;34789:19;34806:1;34789:19;:::i;:::-;34784:24;;34822:19;34839:1;34822:19;:::i;:::-;34817:24;;34919:1;34907:10;34903:18;34900:1;34897:25;34894:51;;;34925:18;;:::i;:::-;34894:51;34969:1;34966;34962:9;34955:16;;34731:246;;;;:::o;34983:188::-;35022:4;35042:19;35059:1;35042:19;:::i;:::-;35037:24;;35075:19;35092:1;35075:19;:::i;:::-;35070:24;;35113:1;35110;35107:8;35104:34;;;35118:18;;:::i;:::-;35104:34;35163:1;35160;35156:9;35148:17;;34983:188;;;;:::o;35177:96::-;35214:7;35243:24;35261:5;35243:24;:::i;:::-;35232:35;;35177:96;;;:::o;35279:90::-;35313:7;35356:5;35349:13;35342:21;35331:32;;35279:90;;;:::o;35375:149::-;35411:7;35451:66;35444:5;35440:78;35429:89;;35375:149;;;:::o;35530:126::-;35567:7;35607:42;35600:5;35596:54;35585:65;;35530:126;;;:::o;35662:77::-;35699:7;35728:5;35717:16;;35662:77;;;:::o;35745:93::-;35781:7;35821:10;35814:5;35810:22;35799:33;;35745:93;;;:::o;35844:154::-;35928:6;35923:3;35918;35905:30;35990:1;35981:6;35976:3;35972:16;35965:27;35844:154;;;:::o;36004:307::-;36072:1;36082:113;36096:6;36093:1;36090:13;36082:113;;;36181:1;36176:3;36172:11;36166:18;36162:1;36157:3;36153:11;36146:39;36118:2;36115:1;36111:10;36106:15;;36082:113;;;36213:6;36210:1;36207:13;36204:101;;;36293:1;36284:6;36279:3;36275:16;36268:27;36204:101;36053:258;36004:307;;;:::o;36317:320::-;36361:6;36398:1;36392:4;36388:12;36378:22;;36445:1;36439:4;36435:12;36466:18;36456:81;;36522:4;36514:6;36510:17;36500:27;;36456:81;36584:2;36576:6;36573:14;36553:18;36550:38;36547:84;;;36603:18;;:::i;:::-;36547:84;36368:269;36317:320;;;:::o;36643:281::-;36726:27;36748:4;36726:27;:::i;:::-;36718:6;36714:40;36856:6;36844:10;36841:22;36820:18;36808:10;36805:34;36802:62;36799:88;;;36867:18;;:::i;:::-;36799:88;36907:10;36903:2;36896:22;36686:238;36643:281;;:::o;36930:233::-;36969:3;36992:24;37010:5;36992:24;:::i;:::-;36983:33;;37038:66;37031:5;37028:77;37025:103;;;37108:18;;:::i;:::-;37025:103;37155:1;37148:5;37144:13;37137:20;;36930:233;;;:::o;37169:175::-;37207:3;37230:23;37247:5;37230:23;:::i;:::-;37221:32;;37275:10;37268:5;37265:21;37262:47;;;37289:18;;:::i;:::-;37262:47;37336:1;37329:5;37325:13;37318:20;;37169:175;;;:::o;37350:180::-;37398:77;37395:1;37388:88;37495:4;37492:1;37485:15;37519:4;37516:1;37509:15;37536:180;37584:77;37581:1;37574:88;37681:4;37678:1;37671:15;37705:4;37702:1;37695:15;37722:180;37770:77;37767:1;37760:88;37867:4;37864:1;37857:15;37891:4;37888:1;37881:15;37908:180;37956:77;37953:1;37946:88;38053:4;38050:1;38043:15;38077:4;38074:1;38067:15;38094:183;38129:3;38167:1;38149:16;38146:23;38143:128;;;38205:1;38202;38199;38184:23;38227:34;38258:1;38252:8;38227:34;:::i;:::-;38220:41;;38143:128;38094:183;:::o;38283:117::-;38392:1;38389;38382:12;38406:117;38515:1;38512;38505:12;38529:117;38638:1;38635;38628:12;38652:117;38761:1;38758;38751:12;38775:117;38884:1;38881;38874:12;38898:102;38939:6;38990:2;38986:7;38981:2;38974:5;38970:14;38966:28;38956:38;;38898:102;;;:::o;39006:106::-;39050:8;39099:5;39094:3;39090:15;39069:36;;39006:106;;;:::o;39118:239::-;39258:34;39254:1;39246:6;39242:14;39235:58;39327:22;39322:2;39314:6;39310:15;39303:47;39118:239;:::o;39363:227::-;39503:34;39499:1;39491:6;39487:14;39480:58;39572:10;39567:2;39559:6;39555:15;39548:35;39363:227;:::o;39596:230::-;39736:34;39732:1;39724:6;39720:14;39713:58;39805:13;39800:2;39792:6;39788:15;39781:38;39596:230;:::o;39832:225::-;39972:34;39968:1;39960:6;39956:14;39949:58;40041:8;40036:2;40028:6;40024:15;40017:33;39832:225;:::o;40063:228::-;40203:34;40199:1;40191:6;40187:14;40180:58;40272:11;40267:2;40259:6;40255:15;40248:36;40063:228;:::o;40297:179::-;40437:31;40433:1;40425:6;40421:14;40414:55;40297:179;:::o;40482:224::-;40622:34;40618:1;40610:6;40606:14;40599:58;40691:7;40686:2;40678:6;40674:15;40667:32;40482:224;:::o;40712:237::-;40852:34;40848:1;40840:6;40836:14;40829:58;40921:20;40916:2;40908:6;40904:15;40897:45;40712:237;:::o;40955:229::-;41095:34;41091:1;41083:6;41079:14;41072:58;41164:12;41159:2;41151:6;41147:15;41140:37;40955:229;:::o;41190:228::-;41330:34;41326:1;41318:6;41314:14;41307:58;41399:11;41394:2;41386:6;41382:15;41375:36;41190:228;:::o;41424:182::-;41564:34;41560:1;41552:6;41548:14;41541:58;41424:182;:::o;41612:169::-;41752:21;41748:1;41740:6;41736:14;41729:45;41612:169;:::o;41787:228::-;41927:34;41923:1;41915:6;41911:14;41904:58;41996:11;41991:2;41983:6;41979:15;41972:36;41787:228;:::o;42021:::-;42161:34;42157:1;42149:6;42145:14;42138:58;42230:11;42225:2;42217:6;42213:15;42206:36;42021:228;:::o;42255:227::-;42395:34;42391:1;42383:6;42379:14;42372:58;42464:10;42459:2;42451:6;42447:15;42440:35;42255:227;:::o;42488:220::-;42628:34;42624:1;42616:6;42612:14;42605:58;42697:3;42692:2;42684:6;42680:15;42673:28;42488:220;:::o;42714:711::-;42753:3;42791:4;42773:16;42770:26;42767:39;;;42799:5;;42767:39;42828:20;;:::i;:::-;42903:1;42885:16;42881:24;42878:1;42872:4;42857:49;42936:4;42930:11;43035:16;43028:4;43020:6;43016:17;43013:39;42980:18;42972:6;42969:30;42953:113;42950:146;;;43081:5;;;;42950:146;43127:6;43121:4;43117:17;43163:3;43157:10;43190:18;43182:6;43179:30;43176:43;;;43212:5;;;;;;43176:43;43260:6;43253:4;43248:3;43244:14;43240:27;43319:1;43301:16;43297:24;43291:4;43287:35;43282:3;43279:44;43276:57;;;43326:5;;;;;;;43276:57;43343;43391:6;43385:4;43381:17;43373:6;43369:30;43363:4;43343:57;:::i;:::-;43416:3;43409:10;;42757:668;;;;;42714:711;;:::o;43431:122::-;43504:24;43522:5;43504:24;:::i;:::-;43497:5;43494:35;43484:63;;43543:1;43540;43533:12;43484:63;43431:122;:::o;43559:116::-;43629:21;43644:5;43629:21;:::i;:::-;43622:5;43619:32;43609:60;;43665:1;43662;43655:12;43609:60;43559:116;:::o;43681:120::-;43753:23;43770:5;43753:23;:::i;:::-;43746:5;43743:34;43733:62;;43791:1;43788;43781:12;43733:62;43681:120;:::o;43807:122::-;43880:24;43898:5;43880:24;:::i;:::-;43873:5;43870:35;43860:63;;43919:1;43916;43909:12;43860:63;43807:122;:::o;43935:120::-;44007:23;44024:5;44007:23;:::i;:::-;44000:5;43997:34;43987:62;;44045:1;44042;44035:12;43987:62;43935:120;:::o

Swarm Source

ipfs://d25239a1160d7936805d85d3b1a932e63ddf77391d55b1d534f4384a782e6141
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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