ETH Price: $2,615.64 (+0.64%)

Token

 

Overview

Max Total Supply

50

Holders

50

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xd48992592B76C5412ab0730E25d6982DC603540C
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:
Poap1155

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-20
*/

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        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 token 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: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {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 `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

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

        return array;
    }
}

// File: contracts/tr/tr1155.sol



pragma solidity ^0.8.4;





contract Poap1155 is ERC1155, Ownable  {
    
    using Strings for uint256;

    mapping(uint256 => bool) private mintedTokenIds;
    mapping (address => bool) public _minters;

    constructor(string memory _baseURI)
    ERC1155(_baseURI) {
        _minters[msg.sender] = true;
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return mintedTokenIds[tokenId] == true;
    }

    function airdrop(uint256 tokenId,address[] calldata whiteList,uint256[] calldata amounts) external  {

        require(_minters[msg.sender], "!minter");

        require(whiteList.length == amounts.length);
        for (uint i=0; i<whiteList.length; i++) {
            address to = whiteList[i];
            require(to != address(0),"Address is not valid");
            super._mint(to,tokenId,amounts[i],"");
        }
        if (!_exists(tokenId)){
            mintedTokenIds[tokenId] = true;
        }
    }

    function uri(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId),"tokenId not exist");
        string memory baseURI = super.uri(0);
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), "")) : "";
    }

    function setURIPrefix(string memory baseURI) public onlyOwner{
        super._setURI(baseURI);
    }

    function addMinter(address minter) public onlyOwner 
    {
        _minters[minter] = true;
    }
    
    function removeMinter(address minter) public onlyOwner 
    {
        _minters[minter] = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"","type":"address"}],"name":"_minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"whiteList","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003f1238038062003f1283398181016040528101906200003791906200033f565b806200004981620000c960201b60201c565b506200006a6200005e620000de60201b60201c565b620000e660201b60201c565b6001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050620006c2565b8060029081620000da9190620005db565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200021582620001ca565b810181811067ffffffffffffffff82111715620002375762000236620001db565b5b80604052505050565b60006200024c620001ac565b90506200025a82826200020a565b919050565b600067ffffffffffffffff8211156200027d576200027c620001db565b5b6200028882620001ca565b9050602081019050919050565b60005b83811015620002b557808201518184015260208101905062000298565b60008484015250505050565b6000620002d8620002d2846200025f565b62000240565b905082815260208101848484011115620002f757620002f6620001c5565b5b6200030484828562000295565b509392505050565b600082601f830112620003245762000323620001c0565b5b815162000336848260208601620002c1565b91505092915050565b600060208284031215620003585762000357620001b6565b5b600082015167ffffffffffffffff811115620003795762000378620001bb565b5b62000387848285016200030c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003e357607f821691505b602082108103620003f957620003f86200039b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000424565b6200046f868362000424565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004bc620004b6620004b08462000487565b62000491565b62000487565b9050919050565b6000819050919050565b620004d8836200049b565b620004f0620004e782620004c3565b84845462000431565b825550505050565b600090565b62000507620004f8565b62000514818484620004cd565b505050565b5b818110156200053c5762000530600082620004fd565b6001810190506200051a565b5050565b601f8211156200058b576200055581620003ff565b620005608462000414565b8101602085101562000570578190505b620005886200057f8562000414565b83018262000519565b50505b505050565b600082821c905092915050565b6000620005b06000198460080262000590565b1980831691505092915050565b6000620005cb83836200059d565b9150826002028217905092915050565b620005e68262000390565b67ffffffffffffffff811115620006025762000601620001db565b5b6200060e8254620003ca565b6200061b82828562000540565b600060209050601f8311600181146200065357600084156200063e578287015190505b6200064a8582620005bd565b865550620006ba565b601f1984166200066386620003ff565b60005b828110156200068d5784890151825560018201915060208501945060208101905062000666565b86831015620006ad5784890151620006a9601f8916826200059d565b8355505b6001600288020188555050505b505050505050565b61384080620006d26000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063d5516e7f11610066578063d5516e7f146102a8578063e985e9c5146102c4578063f242432a146102f4578063f2fde38b14610310576100ff565b8063715018a6146102485780638da5cb5b14610252578063983b2d5614610270578063a22cb4651461028c576100ff565b80633092afd5116100d35780633092afd5146101b05780633575597d146101cc5780634e1273f4146101fc5780636bff2c241461022c576100ff565b8062fdd58e1461010457806301ffc9a7146101345780630e89341c146101645780632eb2c2d614610194575b600080fd5b61011e60048036038101906101199190611dd9565b61032c565b60405161012b9190611e28565b60405180910390f35b61014e60048036038101906101499190611e9b565b6103f4565b60405161015b9190611ee3565b60405180910390f35b61017e60048036038101906101799190611efe565b6104d6565b60405161018b9190611fbb565b60405180910390f35b6101ae60048036038101906101a991906121da565b61057f565b005b6101ca60048036038101906101c591906122a9565b610620565b005b6101e660048036038101906101e191906122a9565b610683565b6040516101f39190611ee3565b60405180910390f35b61021660048036038101906102119190612399565b6106a3565b60405161022391906124cf565b60405180910390f35b61024660048036038101906102419190612592565b6107bc565b005b6102506107d0565b005b61025a6107e4565b60405161026791906125ea565b60405180910390f35b61028a600480360381019061028591906122a9565b61080e565b005b6102a660048036038101906102a19190612631565b610871565b005b6102c260048036038101906102bd9190612722565b610887565b005b6102de60048036038101906102d991906127b7565b610a58565b6040516102eb9190611ee3565b60405180910390f35b61030e600480360381019061030991906127f7565b610aec565b005b61032a600480360381019061032591906122a9565b610b8d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361039c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039390612900565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104bf57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104cf57506104ce82610c10565b5b9050919050565b60606104e182610c7a565b610520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105179061296c565b60405180910390fd5b600061052c6000610cab565b9050600081511161054c5760405180602001604052806000815250610577565b8061055684610d3f565b6040516020016105679291906129ee565b6040516020818303038152906040525b915050919050565b610587610e9f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105cd57506105cc856105c7610e9f565b610a58565b5b61060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612a8f565b60405180910390fd5b6106198585858585610ea7565b5050505050565b6106286111c8565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b606081518351146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e090612b21565b60405180910390fd5b6000835167ffffffffffffffff81111561070657610705611fe2565b5b6040519080825280602002602001820160405280156107345781602001602082028036833780820191505090505b50905060005b84518110156107b15761078185828151811061075957610758612b41565b5b602002602001015185838151811061077457610773612b41565b5b602002602001015161032c565b82828151811061079457610793612b41565b5b602002602001018181525050806107aa90612b9f565b905061073a565b508091505092915050565b6107c46111c8565b6107cd81611246565b50565b6107d86111c8565b6107e26000611259565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108166111c8565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61088361087c610e9f565b838361131f565b5050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612c33565b60405180910390fd5b81819050848490501461092557600080fd5b60005b84849050811015610a1657600085858381811061094857610947612b41565b5b905060200201602081019061095d91906122a9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590612c9f565b60405180910390fd5b610a0281888686868181106109e6576109e5612b41565b5b905060200201356040518060200160405280600081525061148b565b508080610a0e90612b9f565b915050610928565b50610a2085610c7a565b610a515760016004600087815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610af4610e9f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b3a5750610b3985610b34610e9f565b610a58565b5b610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090612a8f565b60405180910390fd5b610b86858585858561163b565b5050505050565b610b956111c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90612d31565b60405180910390fd5b610c0d81611259565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600115156004600084815260200190815260200160002060009054906101000a900460ff161515149050919050565b606060028054610cba90612d80565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612d80565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050919050565b606060008203610d86576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610e9a565b600082905060005b60008214610db8578080610da190612b9f565b915050600a82610db19190612de0565b9150610d8e565b60008167ffffffffffffffff811115610dd457610dd3611fe2565b5b6040519080825280601f01601f191660200182016040528015610e065781602001600182028036833780820191505090505b5090505b60008514610e9357600182610e1f9190612e11565b9150600a85610e2e9190612e45565b6030610e3a9190612e76565b60f81b818381518110610e5057610e4f612b41565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610e8c9190612de0565b9450610e0a565b8093505050505b919050565b600033905090565b8151835114610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290612f1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190612fae565b60405180910390fd5b6000610f64610e9f565b9050610f748187878787876118d6565b60005b8451811015611125576000858281518110610f9557610f94612b41565b5b602002602001015190506000858381518110610fb457610fb3612b41565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613040565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461110a9190612e76565b925050819055505050508061111e90612b9f565b9050610f77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161119c929190613060565b60405180910390a46111b28187878787876118de565b6111c08187878787876118e6565b505050505050565b6111d0610e9f565b73ffffffffffffffffffffffffffffffffffffffff166111ee6107e4565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b906130e3565b60405180910390fd5b565b806002908161125591906132af565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906133f3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161147e9190611ee3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613485565b60405180910390fd5b6000611504610e9f565b9050600061151185611abd565b9050600061151e85611abd565b905061152f836000898585896118d6565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158e9190612e76565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161160c9291906134a5565b60405180910390a4611623836000898585896118de565b61163283600089898989611b37565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612fae565b60405180910390fd5b60006116b4610e9f565b905060006116c185611abd565b905060006116ce85611abd565b90506116de8389898585896118d6565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613040565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182a9190612e76565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516118a79291906134a5565b60405180910390a46118bd848a8a86868a6118de565b6118cb848a8a8a8a8a611b37565b505050505050505050565b505050505050565b505050505050565b6119058473ffffffffffffffffffffffffffffffffffffffff16611d0e565b15611ab5578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161194b959493929190613523565b6020604051808303816000875af192505050801561198757506040513d601f19601f8201168201806040525081019061198491906135a0565b60015b611a2c576119936135da565b806308c379a0036119ef57506119a76135fc565b806119b257506119f1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69190611fbb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a23906136fe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90613790565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611adc57611adb611fe2565b5b604051908082528060200260200182016040528015611b0a5781602001602082028036833780820191505090505b5090508281600081518110611b2257611b21612b41565b5b60200260200101818152505080915050919050565b611b568473ffffffffffffffffffffffffffffffffffffffff16611d0e565b15611d06578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b9c9594939291906137b0565b6020604051808303816000875af1925050508015611bd857506040513d601f19601f82011682018060405250810190611bd591906135a0565b60015b611c7d57611be46135da565b806308c379a003611c405750611bf86135fc565b80611c035750611c42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c379190611fbb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906136fe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90613790565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d7082611d45565b9050919050565b611d8081611d65565b8114611d8b57600080fd5b50565b600081359050611d9d81611d77565b92915050565b6000819050919050565b611db681611da3565b8114611dc157600080fd5b50565b600081359050611dd381611dad565b92915050565b60008060408385031215611df057611def611d3b565b5b6000611dfe85828601611d8e565b9250506020611e0f85828601611dc4565b9150509250929050565b611e2281611da3565b82525050565b6000602082019050611e3d6000830184611e19565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e7881611e43565b8114611e8357600080fd5b50565b600081359050611e9581611e6f565b92915050565b600060208284031215611eb157611eb0611d3b565b5b6000611ebf84828501611e86565b91505092915050565b60008115159050919050565b611edd81611ec8565b82525050565b6000602082019050611ef86000830184611ed4565b92915050565b600060208284031215611f1457611f13611d3b565b5b6000611f2284828501611dc4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f65578082015181840152602081019050611f4a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f8d82611f2b565b611f978185611f36565b9350611fa7818560208601611f47565b611fb081611f71565b840191505092915050565b60006020820190508181036000830152611fd58184611f82565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61201a82611f71565b810181811067ffffffffffffffff8211171561203957612038611fe2565b5b80604052505050565b600061204c611d31565b90506120588282612011565b919050565b600067ffffffffffffffff82111561207857612077611fe2565b5b602082029050602081019050919050565b600080fd5b60006120a161209c8461205d565b612042565b905080838252602082019050602084028301858111156120c4576120c3612089565b5b835b818110156120ed57806120d98882611dc4565b8452602084019350506020810190506120c6565b5050509392505050565b600082601f83011261210c5761210b611fdd565b5b813561211c84826020860161208e565b91505092915050565b600080fd5b600067ffffffffffffffff82111561214557612144611fe2565b5b61214e82611f71565b9050602081019050919050565b82818337600083830152505050565b600061217d6121788461212a565b612042565b90508281526020810184848401111561219957612198612125565b5b6121a484828561215b565b509392505050565b600082601f8301126121c1576121c0611fdd565b5b81356121d184826020860161216a565b91505092915050565b600080600080600060a086880312156121f6576121f5611d3b565b5b600061220488828901611d8e565b955050602061221588828901611d8e565b945050604086013567ffffffffffffffff81111561223657612235611d40565b5b612242888289016120f7565b935050606086013567ffffffffffffffff81111561226357612262611d40565b5b61226f888289016120f7565b925050608086013567ffffffffffffffff8111156122905761228f611d40565b5b61229c888289016121ac565b9150509295509295909350565b6000602082840312156122bf576122be611d3b565b5b60006122cd84828501611d8e565b91505092915050565b600067ffffffffffffffff8211156122f1576122f0611fe2565b5b602082029050602081019050919050565b6000612315612310846122d6565b612042565b9050808382526020820190506020840283018581111561233857612337612089565b5b835b81811015612361578061234d8882611d8e565b84526020840193505060208101905061233a565b5050509392505050565b600082601f8301126123805761237f611fdd565b5b8135612390848260208601612302565b91505092915050565b600080604083850312156123b0576123af611d3b565b5b600083013567ffffffffffffffff8111156123ce576123cd611d40565b5b6123da8582860161236b565b925050602083013567ffffffffffffffff8111156123fb576123fa611d40565b5b612407858286016120f7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61244681611da3565b82525050565b6000612458838361243d565b60208301905092915050565b6000602082019050919050565b600061247c82612411565b612486818561241c565b93506124918361242d565b8060005b838110156124c25781516124a9888261244c565b97506124b483612464565b925050600181019050612495565b5085935050505092915050565b600060208201905081810360008301526124e98184612471565b905092915050565b600067ffffffffffffffff82111561250c5761250b611fe2565b5b61251582611f71565b9050602081019050919050565b6000612535612530846124f1565b612042565b90508281526020810184848401111561255157612550612125565b5b61255c84828561215b565b509392505050565b600082601f83011261257957612578611fdd565b5b8135612589848260208601612522565b91505092915050565b6000602082840312156125a8576125a7611d3b565b5b600082013567ffffffffffffffff8111156125c6576125c5611d40565b5b6125d284828501612564565b91505092915050565b6125e481611d65565b82525050565b60006020820190506125ff60008301846125db565b92915050565b61260e81611ec8565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b6000806040838503121561264857612647611d3b565b5b600061265685828601611d8e565b92505060206126678582860161261c565b9150509250929050565b600080fd5b60008083601f84011261268c5761268b611fdd565b5b8235905067ffffffffffffffff8111156126a9576126a8612671565b5b6020830191508360208202830111156126c5576126c4612089565b5b9250929050565b60008083601f8401126126e2576126e1611fdd565b5b8235905067ffffffffffffffff8111156126ff576126fe612671565b5b60208301915083602082028301111561271b5761271a612089565b5b9250929050565b60008060008060006060868803121561273e5761273d611d3b565b5b600061274c88828901611dc4565b955050602086013567ffffffffffffffff81111561276d5761276c611d40565b5b61277988828901612676565b9450945050604086013567ffffffffffffffff81111561279c5761279b611d40565b5b6127a8888289016126cc565b92509250509295509295909350565b600080604083850312156127ce576127cd611d3b565b5b60006127dc85828601611d8e565b92505060206127ed85828601611d8e565b9150509250929050565b600080600080600060a0868803121561281357612812611d3b565b5b600061282188828901611d8e565b955050602061283288828901611d8e565b945050604061284388828901611dc4565b935050606061285488828901611dc4565b925050608086013567ffffffffffffffff81111561287557612874611d40565b5b612881888289016121ac565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006128ea602a83611f36565b91506128f58261288e565b604082019050919050565b60006020820190508181036000830152612919816128dd565b9050919050565b7f746f6b656e4964206e6f74206578697374000000000000000000000000000000600082015250565b6000612956601183611f36565b915061296182612920565b602082019050919050565b6000602082019050818103600083015261298581612949565b9050919050565b600081905092915050565b60006129a282611f2b565b6129ac818561298c565b93506129bc818560208601611f47565b80840191505092915050565b50565b60006129d860008361298c565b91506129e3826129c8565b600082019050919050565b60006129fa8285612997565b9150612a068284612997565b9150612a11826129cb565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000612a79602f83611f36565b9150612a8482612a1d565b604082019050919050565b60006020820190508181036000830152612aa881612a6c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612b0b602983611f36565b9150612b1682612aaf565b604082019050919050565b60006020820190508181036000830152612b3a81612afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612baa82611da3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bdc57612bdb612b70565b5b600182019050919050565b7f216d696e74657200000000000000000000000000000000000000000000000000600082015250565b6000612c1d600783611f36565b9150612c2882612be7565b602082019050919050565b60006020820190508181036000830152612c4c81612c10565b9050919050565b7f41646472657373206973206e6f742076616c6964000000000000000000000000600082015250565b6000612c89601483611f36565b9150612c9482612c53565b602082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d1b602683611f36565b9150612d2682612cbf565b604082019050919050565b60006020820190508181036000830152612d4a81612d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d9857607f821691505b602082108103612dab57612daa612d51565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612deb82611da3565b9150612df683611da3565b925082612e0657612e05612db1565b5b828204905092915050565b6000612e1c82611da3565b9150612e2783611da3565b9250828203905081811115612e3f57612e3e612b70565b5b92915050565b6000612e5082611da3565b9150612e5b83611da3565b925082612e6b57612e6a612db1565b5b828206905092915050565b6000612e8182611da3565b9150612e8c83611da3565b9250828201905080821115612ea457612ea3612b70565b5b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612f06602883611f36565b9150612f1182612eaa565b604082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f98602583611f36565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061302a602a83611f36565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b6000604082019050818103600083015261307a8185612471565b9050818103602083015261308e8184612471565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cd602083611f36565b91506130d882613097565b602082019050919050565b600060208201905081810360008301526130fc816130c0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613128565b61316f8683613128565b95508019841693508086168417925050509392505050565b6000819050919050565b60006131ac6131a76131a284611da3565b613187565b611da3565b9050919050565b6000819050919050565b6131c683613191565b6131da6131d2826131b3565b848454613135565b825550505050565b600090565b6131ef6131e2565b6131fa8184846131bd565b505050565b5b8181101561321e576132136000826131e7565b600181019050613200565b5050565b601f8211156132635761323481613103565b61323d84613118565b8101602085101561324c578190505b61326061325885613118565b8301826131ff565b50505b505050565b600082821c905092915050565b600061328660001984600802613268565b1980831691505092915050565b600061329f8383613275565b9150826002028217905092915050565b6132b882611f2b565b67ffffffffffffffff8111156132d1576132d0611fe2565b5b6132db8254612d80565b6132e6828285613222565b600060209050601f8311600181146133195760008415613307578287015190505b6133118582613293565b865550613379565b601f19841661332786613103565b60005b8281101561334f5784890151825560018201915060208501945060208101905061332a565b8683101561336c5784890151613368601f891682613275565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006133dd602983611f36565b91506133e882613381565b604082019050919050565b6000602082019050818103600083015261340c816133d0565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061346f602183611f36565b915061347a82613413565b604082019050919050565b6000602082019050818103600083015261349e81613462565b9050919050565b60006040820190506134ba6000830185611e19565b6134c76020830184611e19565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006134f5826134ce565b6134ff81856134d9565b935061350f818560208601611f47565b61351881611f71565b840191505092915050565b600060a08201905061353860008301886125db565b61354560208301876125db565b81810360408301526135578186612471565b9050818103606083015261356b8185612471565b9050818103608083015261357f81846134ea565b90509695505050505050565b60008151905061359a81611e6f565b92915050565b6000602082840312156135b6576135b5611d3b565b5b60006135c48482850161358b565b91505092915050565b60008160e01c9050919050565b600060033d11156135f95760046000803e6135f66000516135cd565b90505b90565b600060443d106136895761360e611d31565b60043d036004823e80513d602482011167ffffffffffffffff82111715613636575050613689565b808201805167ffffffffffffffff8111156136545750505050613689565b80602083010160043d038501811115613671575050505050613689565b61368082602001850186612011565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006136e8603483611f36565b91506136f38261368c565b604082019050919050565b60006020820190508181036000830152613717816136db565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061377a602883611f36565b91506137858261371e565b604082019050919050565b600060208201905081810360008301526137a98161376d565b9050919050565b600060a0820190506137c560008301886125db565b6137d260208301876125db565b6137df6040830186611e19565b6137ec6060830185611e19565b81810360808301526137fe81846134ea565b9050969550505050505056fea2646970667358221220257571a9040df444bfe0d5f34515117e4aef74826b5e6868d406e1d33cb8af2564736f6c634300081100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f697066732e74726561737572656c616e642e78797a2f6574682f313135352f746f6b656e2f00000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063d5516e7f11610066578063d5516e7f146102a8578063e985e9c5146102c4578063f242432a146102f4578063f2fde38b14610310576100ff565b8063715018a6146102485780638da5cb5b14610252578063983b2d5614610270578063a22cb4651461028c576100ff565b80633092afd5116100d35780633092afd5146101b05780633575597d146101cc5780634e1273f4146101fc5780636bff2c241461022c576100ff565b8062fdd58e1461010457806301ffc9a7146101345780630e89341c146101645780632eb2c2d614610194575b600080fd5b61011e60048036038101906101199190611dd9565b61032c565b60405161012b9190611e28565b60405180910390f35b61014e60048036038101906101499190611e9b565b6103f4565b60405161015b9190611ee3565b60405180910390f35b61017e60048036038101906101799190611efe565b6104d6565b60405161018b9190611fbb565b60405180910390f35b6101ae60048036038101906101a991906121da565b61057f565b005b6101ca60048036038101906101c591906122a9565b610620565b005b6101e660048036038101906101e191906122a9565b610683565b6040516101f39190611ee3565b60405180910390f35b61021660048036038101906102119190612399565b6106a3565b60405161022391906124cf565b60405180910390f35b61024660048036038101906102419190612592565b6107bc565b005b6102506107d0565b005b61025a6107e4565b60405161026791906125ea565b60405180910390f35b61028a600480360381019061028591906122a9565b61080e565b005b6102a660048036038101906102a19190612631565b610871565b005b6102c260048036038101906102bd9190612722565b610887565b005b6102de60048036038101906102d991906127b7565b610a58565b6040516102eb9190611ee3565b60405180910390f35b61030e600480360381019061030991906127f7565b610aec565b005b61032a600480360381019061032591906122a9565b610b8d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361039c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039390612900565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104bf57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104cf57506104ce82610c10565b5b9050919050565b60606104e182610c7a565b610520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105179061296c565b60405180910390fd5b600061052c6000610cab565b9050600081511161054c5760405180602001604052806000815250610577565b8061055684610d3f565b6040516020016105679291906129ee565b6040516020818303038152906040525b915050919050565b610587610e9f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105cd57506105cc856105c7610e9f565b610a58565b5b61060c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060390612a8f565b60405180910390fd5b6106198585858585610ea7565b5050505050565b6106286111c8565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b606081518351146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e090612b21565b60405180910390fd5b6000835167ffffffffffffffff81111561070657610705611fe2565b5b6040519080825280602002602001820160405280156107345781602001602082028036833780820191505090505b50905060005b84518110156107b15761078185828151811061075957610758612b41565b5b602002602001015185838151811061077457610773612b41565b5b602002602001015161032c565b82828151811061079457610793612b41565b5b602002602001018181525050806107aa90612b9f565b905061073a565b508091505092915050565b6107c46111c8565b6107cd81611246565b50565b6107d86111c8565b6107e26000611259565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108166111c8565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61088361087c610e9f565b838361131f565b5050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612c33565b60405180910390fd5b81819050848490501461092557600080fd5b60005b84849050811015610a1657600085858381811061094857610947612b41565b5b905060200201602081019061095d91906122a9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590612c9f565b60405180910390fd5b610a0281888686868181106109e6576109e5612b41565b5b905060200201356040518060200160405280600081525061148b565b508080610a0e90612b9f565b915050610928565b50610a2085610c7a565b610a515760016004600087815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610af4610e9f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b3a5750610b3985610b34610e9f565b610a58565b5b610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090612a8f565b60405180910390fd5b610b86858585858561163b565b5050505050565b610b956111c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90612d31565b60405180910390fd5b610c0d81611259565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600115156004600084815260200190815260200160002060009054906101000a900460ff161515149050919050565b606060028054610cba90612d80565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612d80565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050919050565b606060008203610d86576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610e9a565b600082905060005b60008214610db8578080610da190612b9f565b915050600a82610db19190612de0565b9150610d8e565b60008167ffffffffffffffff811115610dd457610dd3611fe2565b5b6040519080825280601f01601f191660200182016040528015610e065781602001600182028036833780820191505090505b5090505b60008514610e9357600182610e1f9190612e11565b9150600a85610e2e9190612e45565b6030610e3a9190612e76565b60f81b818381518110610e5057610e4f612b41565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610e8c9190612de0565b9450610e0a565b8093505050505b919050565b600033905090565b8151835114610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290612f1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190612fae565b60405180910390fd5b6000610f64610e9f565b9050610f748187878787876118d6565b60005b8451811015611125576000858281518110610f9557610f94612b41565b5b602002602001015190506000858381518110610fb457610fb3612b41565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90613040565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461110a9190612e76565b925050819055505050508061111e90612b9f565b9050610f77565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161119c929190613060565b60405180910390a46111b28187878787876118de565b6111c08187878787876118e6565b505050505050565b6111d0610e9f565b73ffffffffffffffffffffffffffffffffffffffff166111ee6107e4565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b906130e3565b60405180910390fd5b565b806002908161125591906132af565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906133f3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161147e9190611ee3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613485565b60405180910390fd5b6000611504610e9f565b9050600061151185611abd565b9050600061151e85611abd565b905061152f836000898585896118d6565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158e9190612e76565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161160c9291906134a5565b60405180910390a4611623836000898585896118de565b61163283600089898989611b37565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612fae565b60405180910390fd5b60006116b4610e9f565b905060006116c185611abd565b905060006116ce85611abd565b90506116de8389898585896118d6565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613040565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182a9190612e76565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516118a79291906134a5565b60405180910390a46118bd848a8a86868a6118de565b6118cb848a8a8a8a8a611b37565b505050505050505050565b505050505050565b505050505050565b6119058473ffffffffffffffffffffffffffffffffffffffff16611d0e565b15611ab5578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161194b959493929190613523565b6020604051808303816000875af192505050801561198757506040513d601f19601f8201168201806040525081019061198491906135a0565b60015b611a2c576119936135da565b806308c379a0036119ef57506119a76135fc565b806119b257506119f1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69190611fbb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a23906136fe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90613790565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611adc57611adb611fe2565b5b604051908082528060200260200182016040528015611b0a5781602001602082028036833780820191505090505b5090508281600081518110611b2257611b21612b41565b5b60200260200101818152505080915050919050565b611b568473ffffffffffffffffffffffffffffffffffffffff16611d0e565b15611d06578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b9c9594939291906137b0565b6020604051808303816000875af1925050508015611bd857506040513d601f19601f82011682018060405250810190611bd591906135a0565b60015b611c7d57611be46135da565b806308c379a003611c405750611bf86135fc565b80611c035750611c42565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c379190611fbb565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906136fe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90613790565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d7082611d45565b9050919050565b611d8081611d65565b8114611d8b57600080fd5b50565b600081359050611d9d81611d77565b92915050565b6000819050919050565b611db681611da3565b8114611dc157600080fd5b50565b600081359050611dd381611dad565b92915050565b60008060408385031215611df057611def611d3b565b5b6000611dfe85828601611d8e565b9250506020611e0f85828601611dc4565b9150509250929050565b611e2281611da3565b82525050565b6000602082019050611e3d6000830184611e19565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e7881611e43565b8114611e8357600080fd5b50565b600081359050611e9581611e6f565b92915050565b600060208284031215611eb157611eb0611d3b565b5b6000611ebf84828501611e86565b91505092915050565b60008115159050919050565b611edd81611ec8565b82525050565b6000602082019050611ef86000830184611ed4565b92915050565b600060208284031215611f1457611f13611d3b565b5b6000611f2284828501611dc4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f65578082015181840152602081019050611f4a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f8d82611f2b565b611f978185611f36565b9350611fa7818560208601611f47565b611fb081611f71565b840191505092915050565b60006020820190508181036000830152611fd58184611f82565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61201a82611f71565b810181811067ffffffffffffffff8211171561203957612038611fe2565b5b80604052505050565b600061204c611d31565b90506120588282612011565b919050565b600067ffffffffffffffff82111561207857612077611fe2565b5b602082029050602081019050919050565b600080fd5b60006120a161209c8461205d565b612042565b905080838252602082019050602084028301858111156120c4576120c3612089565b5b835b818110156120ed57806120d98882611dc4565b8452602084019350506020810190506120c6565b5050509392505050565b600082601f83011261210c5761210b611fdd565b5b813561211c84826020860161208e565b91505092915050565b600080fd5b600067ffffffffffffffff82111561214557612144611fe2565b5b61214e82611f71565b9050602081019050919050565b82818337600083830152505050565b600061217d6121788461212a565b612042565b90508281526020810184848401111561219957612198612125565b5b6121a484828561215b565b509392505050565b600082601f8301126121c1576121c0611fdd565b5b81356121d184826020860161216a565b91505092915050565b600080600080600060a086880312156121f6576121f5611d3b565b5b600061220488828901611d8e565b955050602061221588828901611d8e565b945050604086013567ffffffffffffffff81111561223657612235611d40565b5b612242888289016120f7565b935050606086013567ffffffffffffffff81111561226357612262611d40565b5b61226f888289016120f7565b925050608086013567ffffffffffffffff8111156122905761228f611d40565b5b61229c888289016121ac565b9150509295509295909350565b6000602082840312156122bf576122be611d3b565b5b60006122cd84828501611d8e565b91505092915050565b600067ffffffffffffffff8211156122f1576122f0611fe2565b5b602082029050602081019050919050565b6000612315612310846122d6565b612042565b9050808382526020820190506020840283018581111561233857612337612089565b5b835b81811015612361578061234d8882611d8e565b84526020840193505060208101905061233a565b5050509392505050565b600082601f8301126123805761237f611fdd565b5b8135612390848260208601612302565b91505092915050565b600080604083850312156123b0576123af611d3b565b5b600083013567ffffffffffffffff8111156123ce576123cd611d40565b5b6123da8582860161236b565b925050602083013567ffffffffffffffff8111156123fb576123fa611d40565b5b612407858286016120f7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61244681611da3565b82525050565b6000612458838361243d565b60208301905092915050565b6000602082019050919050565b600061247c82612411565b612486818561241c565b93506124918361242d565b8060005b838110156124c25781516124a9888261244c565b97506124b483612464565b925050600181019050612495565b5085935050505092915050565b600060208201905081810360008301526124e98184612471565b905092915050565b600067ffffffffffffffff82111561250c5761250b611fe2565b5b61251582611f71565b9050602081019050919050565b6000612535612530846124f1565b612042565b90508281526020810184848401111561255157612550612125565b5b61255c84828561215b565b509392505050565b600082601f83011261257957612578611fdd565b5b8135612589848260208601612522565b91505092915050565b6000602082840312156125a8576125a7611d3b565b5b600082013567ffffffffffffffff8111156125c6576125c5611d40565b5b6125d284828501612564565b91505092915050565b6125e481611d65565b82525050565b60006020820190506125ff60008301846125db565b92915050565b61260e81611ec8565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b6000806040838503121561264857612647611d3b565b5b600061265685828601611d8e565b92505060206126678582860161261c565b9150509250929050565b600080fd5b60008083601f84011261268c5761268b611fdd565b5b8235905067ffffffffffffffff8111156126a9576126a8612671565b5b6020830191508360208202830111156126c5576126c4612089565b5b9250929050565b60008083601f8401126126e2576126e1611fdd565b5b8235905067ffffffffffffffff8111156126ff576126fe612671565b5b60208301915083602082028301111561271b5761271a612089565b5b9250929050565b60008060008060006060868803121561273e5761273d611d3b565b5b600061274c88828901611dc4565b955050602086013567ffffffffffffffff81111561276d5761276c611d40565b5b61277988828901612676565b9450945050604086013567ffffffffffffffff81111561279c5761279b611d40565b5b6127a8888289016126cc565b92509250509295509295909350565b600080604083850312156127ce576127cd611d3b565b5b60006127dc85828601611d8e565b92505060206127ed85828601611d8e565b9150509250929050565b600080600080600060a0868803121561281357612812611d3b565b5b600061282188828901611d8e565b955050602061283288828901611d8e565b945050604061284388828901611dc4565b935050606061285488828901611dc4565b925050608086013567ffffffffffffffff81111561287557612874611d40565b5b612881888289016121ac565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006128ea602a83611f36565b91506128f58261288e565b604082019050919050565b60006020820190508181036000830152612919816128dd565b9050919050565b7f746f6b656e4964206e6f74206578697374000000000000000000000000000000600082015250565b6000612956601183611f36565b915061296182612920565b602082019050919050565b6000602082019050818103600083015261298581612949565b9050919050565b600081905092915050565b60006129a282611f2b565b6129ac818561298c565b93506129bc818560208601611f47565b80840191505092915050565b50565b60006129d860008361298c565b91506129e3826129c8565b600082019050919050565b60006129fa8285612997565b9150612a068284612997565b9150612a11826129cb565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000612a79602f83611f36565b9150612a8482612a1d565b604082019050919050565b60006020820190508181036000830152612aa881612a6c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612b0b602983611f36565b9150612b1682612aaf565b604082019050919050565b60006020820190508181036000830152612b3a81612afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612baa82611da3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bdc57612bdb612b70565b5b600182019050919050565b7f216d696e74657200000000000000000000000000000000000000000000000000600082015250565b6000612c1d600783611f36565b9150612c2882612be7565b602082019050919050565b60006020820190508181036000830152612c4c81612c10565b9050919050565b7f41646472657373206973206e6f742076616c6964000000000000000000000000600082015250565b6000612c89601483611f36565b9150612c9482612c53565b602082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d1b602683611f36565b9150612d2682612cbf565b604082019050919050565b60006020820190508181036000830152612d4a81612d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d9857607f821691505b602082108103612dab57612daa612d51565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612deb82611da3565b9150612df683611da3565b925082612e0657612e05612db1565b5b828204905092915050565b6000612e1c82611da3565b9150612e2783611da3565b9250828203905081811115612e3f57612e3e612b70565b5b92915050565b6000612e5082611da3565b9150612e5b83611da3565b925082612e6b57612e6a612db1565b5b828206905092915050565b6000612e8182611da3565b9150612e8c83611da3565b9250828201905080821115612ea457612ea3612b70565b5b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612f06602883611f36565b9150612f1182612eaa565b604082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f98602583611f36565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061302a602a83611f36565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b6000604082019050818103600083015261307a8185612471565b9050818103602083015261308e8184612471565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cd602083611f36565b91506130d882613097565b602082019050919050565b600060208201905081810360008301526130fc816130c0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613128565b61316f8683613128565b95508019841693508086168417925050509392505050565b6000819050919050565b60006131ac6131a76131a284611da3565b613187565b611da3565b9050919050565b6000819050919050565b6131c683613191565b6131da6131d2826131b3565b848454613135565b825550505050565b600090565b6131ef6131e2565b6131fa8184846131bd565b505050565b5b8181101561321e576132136000826131e7565b600181019050613200565b5050565b601f8211156132635761323481613103565b61323d84613118565b8101602085101561324c578190505b61326061325885613118565b8301826131ff565b50505b505050565b600082821c905092915050565b600061328660001984600802613268565b1980831691505092915050565b600061329f8383613275565b9150826002028217905092915050565b6132b882611f2b565b67ffffffffffffffff8111156132d1576132d0611fe2565b5b6132db8254612d80565b6132e6828285613222565b600060209050601f8311600181146133195760008415613307578287015190505b6133118582613293565b865550613379565b601f19841661332786613103565b60005b8281101561334f5784890151825560018201915060208501945060208101905061332a565b8683101561336c5784890151613368601f891682613275565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006133dd602983611f36565b91506133e882613381565b604082019050919050565b6000602082019050818103600083015261340c816133d0565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061346f602183611f36565b915061347a82613413565b604082019050919050565b6000602082019050818103600083015261349e81613462565b9050919050565b60006040820190506134ba6000830185611e19565b6134c76020830184611e19565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006134f5826134ce565b6134ff81856134d9565b935061350f818560208601611f47565b61351881611f71565b840191505092915050565b600060a08201905061353860008301886125db565b61354560208301876125db565b81810360408301526135578186612471565b9050818103606083015261356b8185612471565b9050818103608083015261357f81846134ea565b90509695505050505050565b60008151905061359a81611e6f565b92915050565b6000602082840312156135b6576135b5611d3b565b5b60006135c48482850161358b565b91505092915050565b60008160e01c9050919050565b600060033d11156135f95760046000803e6135f66000516135cd565b90505b90565b600060443d106136895761360e611d31565b60043d036004823e80513d602482011167ffffffffffffffff82111715613636575050613689565b808201805167ffffffffffffffff8111156136545750505050613689565b80602083010160043d038501811115613671575050505050613689565b61368082602001850186612011565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006136e8603483611f36565b91506136f38261368c565b604082019050919050565b60006020820190508181036000830152613717816136db565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061377a602883611f36565b91506137858261371e565b604082019050919050565b600060208201905081810360008301526137a98161376d565b9050919050565b600060a0820190506137c560008301886125db565b6137d260208301876125db565b6137df6040830186611e19565b6137ec6060830185611e19565b81810360808301526137fe81846134ea565b9050969550505050505056fea2646970667358221220257571a9040df444bfe0d5f34515117e4aef74826b5e6868d406e1d33cb8af2564736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f697066732e74726561737572656c616e642e78797a2f6574682f313135352f746f6b656e2f00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://ipfs.treasureland.xyz/eth/1155/token/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [2] : 68747470733a2f2f697066732e74726561737572656c616e642e78797a2f6574
Arg [3] : 682f313135352f746f6b656e2f00000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41723:1609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26121:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25144:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42693:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28065:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43225:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41863:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26517:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43003:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5273:103;;;:::i;:::-;;4625:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43113:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27114:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42162:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27341:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27581:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26121:230;26207:7;26254:1;26235:21;;:7;:21;;;26227:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26321:9;:13;26331:2;26321:13;;;;;;;;;;;:22;26335:7;26321:22;;;;;;;;;;;;;;;;26314:29;;26121:230;;;;:::o;25144:310::-;25246:4;25298:26;25283:41;;;:11;:41;;;;:110;;;;25356:37;25341:52;;;:11;:52;;;;25283:110;:163;;;;25410:36;25434:11;25410:23;:36::i;:::-;25283:163;25263:183;;25144:310;;;:::o;42693:302::-;42761:13;42795:16;42803:7;42795;:16::i;:::-;42787:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42843:21;42867:12;42877:1;42867:9;:12::i;:::-;42843:36;;42921:1;42903:7;42897:21;:25;:90;;;;;;;;;;;;;;;;;42949:7;42958:18;:7;:16;:18::i;:::-;42932:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42897:90;42890:97;;;42693:302;;;:::o;28065:439::-;28306:12;:10;:12::i;:::-;28298:20;;:4;:20;;;:60;;;;28322:36;28339:4;28345:12;:10;:12::i;:::-;28322:16;:36::i;:::-;28298:60;28276:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;28444:52;28467:4;28473:2;28477:3;28482:7;28491:4;28444:22;:52::i;:::-;28065:439;;;;;:::o;43225:104::-;4511:13;:11;:13::i;:::-;43316:5:::1;43297:8;:16;43306:6;43297:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;43225:104:::0;:::o;41863:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;26517:524::-;26673:16;26734:3;:10;26715:8;:15;:29;26707:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26803:30;26850:8;:15;26836:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26803:63;;26884:9;26879:122;26903:8;:15;26899:1;:19;26879:122;;;26959:30;26969:8;26978:1;26969:11;;;;;;;;:::i;:::-;;;;;;;;26982:3;26986:1;26982:6;;;;;;;;:::i;:::-;;;;;;;;26959:9;:30::i;:::-;26940:13;26954:1;26940:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26920:3;;;;:::i;:::-;;;26879:122;;;;27020:13;27013:20;;;26517:524;;;;:::o;43003:102::-;4511:13;:11;:13::i;:::-;43075:22:::1;43089:7;43075:13;:22::i;:::-;43003:102:::0;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;43113:100::-;4511:13;:11;:13::i;:::-;43201:4:::1;43182:8;:16;43191:6;43182:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;43113:100:::0;:::o;27114:155::-;27209:52;27228:12;:10;:12::i;:::-;27242:8;27252;27209:18;:52::i;:::-;27114:155;;:::o;42162:523::-;42283:8;:20;42292:10;42283:20;;;;;;;;;;;;;;;;;;;;;;;;;42275:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42356:7;;:14;;42336:9;;:16;;:34;42328:43;;;;;;42387:6;42382:207;42399:9;;:16;;42397:1;:18;42382:207;;;42437:10;42450:9;;42460:1;42450:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42437:25;;42499:1;42485:16;;:2;:16;;;42477:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42540:37;42552:2;42555:7;42563;;42571:1;42563:10;;;;;;;:::i;:::-;;;;;;;;42540:37;;;;;;;;;;;;:11;:37::i;:::-;42422:167;42417:3;;;;;:::i;:::-;;;;42382:207;;;;42604:16;42612:7;42604;:16::i;:::-;42599:79;;42662:4;42636:14;:23;42651:7;42636:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;42599:79;42162:523;;;;;:::o;27341:168::-;27440:4;27464:18;:27;27483:7;27464:27;;;;;;;;;;;;;;;:37;27492:8;27464:37;;;;;;;;;;;;;;;;;;;;;;;;;27457:44;;27341:168;;;;:::o;27581:407::-;27797:12;:10;:12::i;:::-;27789:20;;:4;:20;;;:60;;;;27813:36;27830:4;27836:12;:10;:12::i;:::-;27813:16;:36::i;:::-;27789:60;27767:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:45;27953:4;27959:2;27963;27967:6;27975:4;27935:17;:45::i;:::-;27581:407;;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;::::0;5612:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;16425:157::-;16510:4;16549:25;16534:40;;;:11;:40;;;;16527:47;;16425:157;;;:::o;42026:128::-;42091:4;42142;42115:31;;:14;:23;42130:7;42115:23;;;;;;;;;;;;;;;;;;;;;:31;;;42108:38;;42026:128;;;:::o;25865:105::-;25925:13;25958:4;25951:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25865:105;;;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;30300:1146::-;30527:7;:14;30513:3;:10;:28;30505:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30619:1;30605:16;;:2;:16;;;30597:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30676:16;30695:12;:10;:12::i;:::-;30676:31;;30720:60;30741:8;30751:4;30757:2;30761:3;30766:7;30775:4;30720:20;:60::i;:::-;30798:9;30793:421;30817:3;:10;30813:1;:14;30793:421;;;30849:10;30862:3;30866:1;30862:6;;;;;;;;:::i;:::-;;;;;;;;30849:19;;30883:14;30900:7;30908:1;30900:10;;;;;;;;:::i;:::-;;;;;;;;30883:27;;30927:19;30949:9;:13;30959:2;30949:13;;;;;;;;;;;:19;30963:4;30949:19;;;;;;;;;;;;;;;;30927:41;;31006:6;30991:11;:21;;30983:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:6;31125:11;:20;31103:9;:13;31113:2;31103:13;;;;;;;;;;;:19;31117:4;31103:19;;;;;;;;;;;;;;;:42;;;;31196:6;31175:9;:13;31185:2;31175:13;;;;;;;;;;;:17;31189:2;31175:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30834:380;;;30829:3;;;;:::i;:::-;;;30793:421;;;;31261:2;31231:47;;31255:4;31231:47;;31245:8;31231:47;;;31265:3;31270:7;31231:47;;;;;;;:::i;:::-;;;;;;;;31291:59;31311:8;31321:4;31327:2;31331:3;31336:7;31345:4;31291:19;:59::i;:::-;31363:75;31399:8;31409:4;31415:2;31419:3;31424:7;31433:4;31363:35;:75::i;:::-;30494:952;30300:1146;;;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;32290:88::-;32364:6;32357:4;:13;;;;;;:::i;:::-;;32290:88;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;37177:331::-;37332:8;37323:17;;:5;:17;;;37315:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:8;37397:18;:25;37416:5;37397:25;;;;;;;;;;;;;;;:35;37423:8;37397:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37481:8;37459:41;;37474:5;37459:41;;;37491:8;37459:41;;;;;;:::i;:::-;;;;;;;;37177:331;;;:::o;32764:729::-;32931:1;32917:16;;:2;:16;;;32909:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32984:16;33003:12;:10;:12::i;:::-;32984:31;;33026:20;33049:21;33067:2;33049:17;:21::i;:::-;33026:44;;33081:24;33108:25;33126:6;33108:17;:25::i;:::-;33081:52;;33146:66;33167:8;33185:1;33189:2;33193:3;33198:7;33207:4;33146:20;:66::i;:::-;33246:6;33225:9;:13;33235:2;33225:13;;;;;;;;;;;:17;33239:2;33225:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33305:2;33268:52;;33301:1;33268:52;;33283:8;33268:52;;;33309:2;33313:6;33268:52;;;;;;;:::i;:::-;;;;;;;;33333:65;33353:8;33371:1;33375:2;33379:3;33384:7;33393:4;33333:19;:65::i;:::-;33411:74;33442:8;33460:1;33464:2;33468;33472:6;33480:4;33411:30;:74::i;:::-;32898:595;;;32764:729;;;;:::o;28968:974::-;29170:1;29156:16;;:2;:16;;;29148:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29227:16;29246:12;:10;:12::i;:::-;29227:31;;29269:20;29292:21;29310:2;29292:17;:21::i;:::-;29269:44;;29324:24;29351:25;29369:6;29351:17;:25::i;:::-;29324:52;;29389:60;29410:8;29420:4;29426:2;29430:3;29435:7;29444:4;29389:20;:60::i;:::-;29462:19;29484:9;:13;29494:2;29484:13;;;;;;;;;;;:19;29498:4;29484:19;;;;;;;;;;;;;;;;29462:41;;29537:6;29522:11;:21;;29514:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29662:6;29648:11;:20;29626:9;:13;29636:2;29626:13;;;;;;;;;;;:19;29640:4;29626:19;;;;;;;;;;;;;;;:42;;;;29711:6;29690:9;:13;29700:2;29690:13;;;;;;;;;;;:17;29704:2;29690:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29766:2;29735:46;;29760:4;29735:46;;29750:8;29735:46;;;29770:2;29774:6;29735:46;;;;;;;:::i;:::-;;;;;;;;29794:59;29814:8;29824:4;29830:2;29834:3;29839:7;29848:4;29794:19;:59::i;:::-;29866:68;29897:8;29907:4;29913:2;29917;29921:6;29929:4;29866:30;:68::i;:::-;29137:805;;;;28968:974;;;;;:::o;38466:221::-;;;;;;;:::o;39642:220::-;;;;;;;:::o;40622:813::-;40862:15;:2;:13;;;:15::i;:::-;40858:570;;;40915:2;40898:43;;;40942:8;40952:4;40958:3;40963:7;40972:4;40898:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40894:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41290:6;41283:14;;;;;;;;;;;:::i;:::-;;;;;;;;40894:523;;;41339:62;;;;;;;;;;:::i;:::-;;;;;;;;40894:523;41071:48;;;41059:60;;;:8;:60;;;;41055:159;;41144:50;;;;;;;;;;:::i;:::-;;;;;;;;41055:159;40978:251;40858:570;40622:813;;;;;;:::o;41443:198::-;41509:16;41538:22;41577:1;41563:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41538:41;;41601:7;41590:5;41596:1;41590:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41628:5;41621:12;;;41443:198;;;:::o;39870:744::-;40085:15;:2;:13;;;:15::i;:::-;40081:526;;;40138:2;40121:38;;;40160:8;40170:4;40176:2;40180:6;40188:4;40121:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40117:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40469:6;40462:14;;;;;;;;;;;:::i;:::-;;;;;;;;40117:479;;;40518:62;;;;;;;;;;:::i;:::-;;;;;;;;40117:479;40255:43;;;40243:55;;;:8;:55;;;;40239:154;;40323:50;;;;;;;;;;:::i;:::-;;;;;;;;40239:154;40194:214;40081:526;39870:744;;;;;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:246::-;3909:1;3919:113;3933:6;3930:1;3927:13;3919:113;;;4018:1;4013:3;4009:11;4003:18;3999:1;3994:3;3990:11;3983:39;3955:2;3952:1;3948:10;3943:15;;3919:113;;;4066:1;4057:6;4052:3;4048:16;4041:27;3890:184;3828:246;;;:::o;4080:102::-;4121:6;4172:2;4168:7;4163:2;4156:5;4152:14;4148:28;4138:38;;4080:102;;;:::o;4188:377::-;4276:3;4304:39;4337:5;4304:39;:::i;:::-;4359:71;4423:6;4418:3;4359:71;:::i;:::-;4352:78;;4439:65;4497:6;4492:3;4485:4;4478:5;4474:16;4439:65;:::i;:::-;4529:29;4551:6;4529:29;:::i;:::-;4524:3;4520:39;4513:46;;4280:285;4188:377;;;;:::o;4571:313::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4771:9;4765:4;4761:20;4757:1;4746:9;4742:17;4735:47;4799:78;4872:4;4863:6;4799:78;:::i;:::-;4791:86;;4571:313;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:329::-;10135:6;10184:2;10172:9;10163:7;10159:23;10155:32;10152:119;;;10190:79;;:::i;:::-;10152:119;10310:1;10335:53;10380:7;10371:6;10360:9;10356:22;10335:53;:::i;:::-;10325:63;;10281:117;10076:329;;;;:::o;10411:311::-;10488:4;10578:18;10570:6;10567:30;10564:56;;;10600:18;;:::i;:::-;10564:56;10650:4;10642:6;10638:17;10630:25;;10710:4;10704;10700:15;10692:23;;10411:311;;;:::o;10745:710::-;10841:5;10866:81;10882:64;10939:6;10882:64;:::i;:::-;10866:81;:::i;:::-;10857:90;;10967:5;10996:6;10989:5;10982:21;11030:4;11023:5;11019:16;11012:23;;11083:4;11075:6;11071:17;11063:6;11059:30;11112:3;11104:6;11101:15;11098:122;;;11131:79;;:::i;:::-;11098:122;11246:6;11229:220;11263:6;11258:3;11255:15;11229:220;;;11338:3;11367:37;11400:3;11388:10;11367:37;:::i;:::-;11362:3;11355:50;11434:4;11429:3;11425:14;11418:21;;11305:144;11289:4;11284:3;11280:14;11273:21;;11229:220;;;11233:21;10847:608;;10745:710;;;;;:::o;11478:370::-;11549:5;11598:3;11591:4;11583:6;11579:17;11575:27;11565:122;;11606:79;;:::i;:::-;11565:122;11723:6;11710:20;11748:94;11838:3;11830:6;11823:4;11815:6;11811:17;11748:94;:::i;:::-;11739:103;;11555:293;11478:370;;;;:::o;11854:894::-;11972:6;11980;12029:2;12017:9;12008:7;12004:23;12000:32;11997:119;;;12035:79;;:::i;:::-;11997:119;12183:1;12172:9;12168:17;12155:31;12213:18;12205:6;12202:30;12199:117;;;12235:79;;:::i;:::-;12199:117;12340:78;12410:7;12401:6;12390:9;12386:22;12340:78;:::i;:::-;12330:88;;12126:302;12495:2;12484:9;12480:18;12467:32;12526:18;12518:6;12515:30;12512:117;;;12548:79;;:::i;:::-;12512:117;12653:78;12723:7;12714:6;12703:9;12699:22;12653:78;:::i;:::-;12643:88;;12438:303;11854:894;;;;;:::o;12754:114::-;12821:6;12855:5;12849:12;12839:22;;12754:114;;;:::o;12874:184::-;12973:11;13007:6;13002:3;12995:19;13047:4;13042:3;13038:14;13023:29;;12874:184;;;;:::o;13064:132::-;13131:4;13154:3;13146:11;;13184:4;13179:3;13175:14;13167:22;;13064:132;;;:::o;13202:108::-;13279:24;13297:5;13279:24;:::i;:::-;13274:3;13267:37;13202:108;;:::o;13316:179::-;13385:10;13406:46;13448:3;13440:6;13406:46;:::i;:::-;13484:4;13479:3;13475:14;13461:28;;13316:179;;;;:::o;13501:113::-;13571:4;13603;13598:3;13594:14;13586:22;;13501:113;;;:::o;13650:732::-;13769:3;13798:54;13846:5;13798:54;:::i;:::-;13868:86;13947:6;13942:3;13868:86;:::i;:::-;13861:93;;13978:56;14028:5;13978:56;:::i;:::-;14057:7;14088:1;14073:284;14098:6;14095:1;14092:13;14073:284;;;14174:6;14168:13;14201:63;14260:3;14245:13;14201:63;:::i;:::-;14194:70;;14287:60;14340:6;14287:60;:::i;:::-;14277:70;;14133:224;14120:1;14117;14113:9;14108:14;;14073:284;;;14077:14;14373:3;14366:10;;13774:608;;;13650:732;;;;:::o;14388:373::-;14531:4;14569:2;14558:9;14554:18;14546:26;;14618:9;14612:4;14608:20;14604:1;14593:9;14589:17;14582:47;14646:108;14749:4;14740:6;14646:108;:::i;:::-;14638:116;;14388:373;;;;:::o;14767:308::-;14829:4;14919:18;14911:6;14908:30;14905:56;;;14941:18;;:::i;:::-;14905:56;14979:29;15001:6;14979:29;:::i;:::-;14971:37;;15063:4;15057;15053:15;15045:23;;14767:308;;;:::o;15081:425::-;15159:5;15184:66;15200:49;15242:6;15200:49;:::i;:::-;15184:66;:::i;:::-;15175:75;;15273:6;15266:5;15259:21;15311:4;15304:5;15300:16;15349:3;15340:6;15335:3;15331:16;15328:25;15325:112;;;15356:79;;:::i;:::-;15325:112;15446:54;15493:6;15488:3;15483;15446:54;:::i;:::-;15165:341;15081:425;;;;;:::o;15526:340::-;15582:5;15631:3;15624:4;15616:6;15612:17;15608:27;15598:122;;15639:79;;:::i;:::-;15598:122;15756:6;15743:20;15781:79;15856:3;15848:6;15841:4;15833:6;15829:17;15781:79;:::i;:::-;15772:88;;15588:278;15526:340;;;;:::o;15872:509::-;15941:6;15990:2;15978:9;15969:7;15965:23;15961:32;15958:119;;;15996:79;;:::i;:::-;15958:119;16144:1;16133:9;16129:17;16116:31;16174:18;16166:6;16163:30;16160:117;;;16196:79;;:::i;:::-;16160:117;16301:63;16356:7;16347:6;16336:9;16332:22;16301:63;:::i;:::-;16291:73;;16087:287;15872:509;;;;:::o;16387:118::-;16474:24;16492:5;16474:24;:::i;:::-;16469:3;16462:37;16387:118;;:::o;16511:222::-;16604:4;16642:2;16631:9;16627:18;16619:26;;16655:71;16723:1;16712:9;16708:17;16699:6;16655:71;:::i;:::-;16511:222;;;;:::o;16739:116::-;16809:21;16824:5;16809:21;:::i;:::-;16802:5;16799:32;16789:60;;16845:1;16842;16835:12;16789:60;16739:116;:::o;16861:133::-;16904:5;16942:6;16929:20;16920:29;;16958:30;16982:5;16958:30;:::i;:::-;16861:133;;;;:::o;17000:468::-;17065:6;17073;17122:2;17110:9;17101:7;17097:23;17093:32;17090:119;;;17128:79;;:::i;:::-;17090:119;17248:1;17273:53;17318:7;17309:6;17298:9;17294:22;17273:53;:::i;:::-;17263:63;;17219:117;17375:2;17401:50;17443:7;17434:6;17423:9;17419:22;17401:50;:::i;:::-;17391:60;;17346:115;17000:468;;;;;:::o;17474:117::-;17583:1;17580;17573:12;17614:568;17687:8;17697:6;17747:3;17740:4;17732:6;17728:17;17724:27;17714:122;;17755:79;;:::i;:::-;17714:122;17868:6;17855:20;17845:30;;17898:18;17890:6;17887:30;17884:117;;;17920:79;;:::i;:::-;17884:117;18034:4;18026:6;18022:17;18010:29;;18088:3;18080:4;18072:6;18068:17;18058:8;18054:32;18051:41;18048:128;;;18095:79;;:::i;:::-;18048:128;17614:568;;;;;:::o;18205:::-;18278:8;18288:6;18338:3;18331:4;18323:6;18319:17;18315:27;18305:122;;18346:79;;:::i;:::-;18305:122;18459:6;18446:20;18436:30;;18489:18;18481:6;18478:30;18475:117;;;18511:79;;:::i;:::-;18475:117;18625:4;18617:6;18613:17;18601:29;;18679:3;18671:4;18663:6;18659:17;18649:8;18645:32;18642:41;18639:128;;;18686:79;;:::i;:::-;18639:128;18205:568;;;;;:::o;18779:1079::-;18910:6;18918;18926;18934;18942;18991:2;18979:9;18970:7;18966:23;18962:32;18959:119;;;18997:79;;:::i;:::-;18959:119;19117:1;19142:53;19187:7;19178:6;19167:9;19163:22;19142:53;:::i;:::-;19132:63;;19088:117;19272:2;19261:9;19257:18;19244:32;19303:18;19295:6;19292:30;19289:117;;;19325:79;;:::i;:::-;19289:117;19438:80;19510:7;19501:6;19490:9;19486:22;19438:80;:::i;:::-;19420:98;;;;19215:313;19595:2;19584:9;19580:18;19567:32;19626:18;19618:6;19615:30;19612:117;;;19648:79;;:::i;:::-;19612:117;19761:80;19833:7;19824:6;19813:9;19809:22;19761:80;:::i;:::-;19743:98;;;;19538:313;18779:1079;;;;;;;;:::o;19864:474::-;19932:6;19940;19989:2;19977:9;19968:7;19964:23;19960:32;19957:119;;;19995:79;;:::i;:::-;19957:119;20115:1;20140:53;20185:7;20176:6;20165:9;20161:22;20140:53;:::i;:::-;20130:63;;20086:117;20242:2;20268:53;20313:7;20304:6;20293:9;20289:22;20268:53;:::i;:::-;20258:63;;20213:118;19864:474;;;;;:::o;20344:1089::-;20448:6;20456;20464;20472;20480;20529:3;20517:9;20508:7;20504:23;20500:33;20497:120;;;20536:79;;:::i;:::-;20497:120;20656:1;20681:53;20726:7;20717:6;20706:9;20702:22;20681:53;:::i;:::-;20671:63;;20627:117;20783:2;20809:53;20854:7;20845:6;20834:9;20830:22;20809:53;:::i;:::-;20799:63;;20754:118;20911:2;20937:53;20982:7;20973:6;20962:9;20958:22;20937:53;:::i;:::-;20927:63;;20882:118;21039:2;21065:53;21110:7;21101:6;21090:9;21086:22;21065:53;:::i;:::-;21055:63;;21010:118;21195:3;21184:9;21180:19;21167:33;21227:18;21219:6;21216:30;21213:117;;;21249:79;;:::i;:::-;21213:117;21354:62;21408:7;21399:6;21388:9;21384:22;21354:62;:::i;:::-;21344:72;;21138:288;20344:1089;;;;;;;;:::o;21439:229::-;21579:34;21575:1;21567:6;21563:14;21556:58;21648:12;21643:2;21635:6;21631:15;21624:37;21439:229;:::o;21674:366::-;21816:3;21837:67;21901:2;21896:3;21837:67;:::i;:::-;21830:74;;21913:93;22002:3;21913:93;:::i;:::-;22031:2;22026:3;22022:12;22015:19;;21674:366;;;:::o;22046:419::-;22212:4;22250:2;22239:9;22235:18;22227:26;;22299:9;22293:4;22289:20;22285:1;22274:9;22270:17;22263:47;22327:131;22453:4;22327:131;:::i;:::-;22319:139;;22046:419;;;:::o;22471:167::-;22611:19;22607:1;22599:6;22595:14;22588:43;22471:167;:::o;22644:366::-;22786:3;22807:67;22871:2;22866:3;22807:67;:::i;:::-;22800:74;;22883:93;22972:3;22883:93;:::i;:::-;23001:2;22996:3;22992:12;22985:19;;22644:366;;;:::o;23016:419::-;23182:4;23220:2;23209:9;23205:18;23197:26;;23269:9;23263:4;23259:20;23255:1;23244:9;23240:17;23233:47;23297:131;23423:4;23297:131;:::i;:::-;23289:139;;23016:419;;;:::o;23441:148::-;23543:11;23580:3;23565:18;;23441:148;;;;:::o;23595:390::-;23701:3;23729:39;23762:5;23729:39;:::i;:::-;23784:89;23866:6;23861:3;23784:89;:::i;:::-;23777:96;;23882:65;23940:6;23935:3;23928:4;23921:5;23917:16;23882:65;:::i;:::-;23972:6;23967:3;23963:16;23956:23;;23705:280;23595:390;;;;:::o;23991:114::-;;:::o;24111:400::-;24271:3;24292:84;24374:1;24369:3;24292:84;:::i;:::-;24285:91;;24385:93;24474:3;24385:93;:::i;:::-;24503:1;24498:3;24494:11;24487:18;;24111:400;;;:::o;24517:701::-;24798:3;24820:95;24911:3;24902:6;24820:95;:::i;:::-;24813:102;;24932:95;25023:3;25014:6;24932:95;:::i;:::-;24925:102;;25044:148;25188:3;25044:148;:::i;:::-;25037:155;;25209:3;25202:10;;24517:701;;;;;:::o;25224:234::-;25364:34;25360:1;25352:6;25348:14;25341:58;25433:17;25428:2;25420:6;25416:15;25409:42;25224:234;:::o;25464:366::-;25606:3;25627:67;25691:2;25686:3;25627:67;:::i;:::-;25620:74;;25703:93;25792:3;25703:93;:::i;:::-;25821:2;25816:3;25812:12;25805:19;;25464:366;;;:::o;25836:419::-;26002:4;26040:2;26029:9;26025:18;26017:26;;26089:9;26083:4;26079:20;26075:1;26064:9;26060:17;26053:47;26117:131;26243:4;26117:131;:::i;:::-;26109:139;;25836:419;;;:::o;26261:228::-;26401:34;26397:1;26389:6;26385:14;26378:58;26470:11;26465:2;26457:6;26453:15;26446:36;26261:228;:::o;26495:366::-;26637:3;26658:67;26722:2;26717:3;26658:67;:::i;:::-;26651:74;;26734:93;26823:3;26734:93;:::i;:::-;26852:2;26847:3;26843:12;26836:19;;26495:366;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;26867:419;;;:::o;27292:180::-;27340:77;27337:1;27330:88;27437:4;27434:1;27427:15;27461:4;27458:1;27451:15;27478:180;27526:77;27523:1;27516:88;27623:4;27620:1;27613:15;27647:4;27644:1;27637:15;27664:233;27703:3;27726:24;27744:5;27726:24;:::i;:::-;27717:33;;27772:66;27765:5;27762:77;27759:103;;27842:18;;:::i;:::-;27759:103;27889:1;27882:5;27878:13;27871:20;;27664:233;;;:::o;27903:157::-;28043:9;28039:1;28031:6;28027:14;28020:33;27903:157;:::o;28066:365::-;28208:3;28229:66;28293:1;28288:3;28229:66;:::i;:::-;28222:73;;28304:93;28393:3;28304:93;:::i;:::-;28422:2;28417:3;28413:12;28406:19;;28066:365;;;:::o;28437:419::-;28603:4;28641:2;28630:9;28626:18;28618:26;;28690:9;28684:4;28680:20;28676:1;28665:9;28661:17;28654:47;28718:131;28844:4;28718:131;:::i;:::-;28710:139;;28437:419;;;:::o;28862:170::-;29002:22;28998:1;28990:6;28986:14;28979:46;28862:170;:::o;29038:366::-;29180:3;29201:67;29265:2;29260:3;29201:67;:::i;:::-;29194:74;;29277:93;29366:3;29277:93;:::i;:::-;29395:2;29390:3;29386:12;29379:19;;29038:366;;;:::o;29410:419::-;29576:4;29614:2;29603:9;29599:18;29591:26;;29663:9;29657:4;29653:20;29649:1;29638:9;29634:17;29627:47;29691:131;29817:4;29691:131;:::i;:::-;29683:139;;29410:419;;;:::o;29835:225::-;29975:34;29971:1;29963:6;29959:14;29952:58;30044:8;30039:2;30031:6;30027:15;30020:33;29835:225;:::o;30066:366::-;30208:3;30229:67;30293:2;30288:3;30229:67;:::i;:::-;30222:74;;30305:93;30394:3;30305:93;:::i;:::-;30423:2;30418:3;30414:12;30407:19;;30066:366;;;:::o;30438:419::-;30604:4;30642:2;30631:9;30627:18;30619:26;;30691:9;30685:4;30681:20;30677:1;30666:9;30662:17;30655:47;30719:131;30845:4;30719:131;:::i;:::-;30711:139;;30438:419;;;:::o;30863:180::-;30911:77;30908:1;30901:88;31008:4;31005:1;30998:15;31032:4;31029:1;31022:15;31049:320;31093:6;31130:1;31124:4;31120:12;31110:22;;31177:1;31171:4;31167:12;31198:18;31188:81;;31254:4;31246:6;31242:17;31232:27;;31188:81;31316:2;31308:6;31305:14;31285:18;31282:38;31279:84;;31335:18;;:::i;:::-;31279:84;31100:269;31049:320;;;:::o;31375:180::-;31423:77;31420:1;31413:88;31520:4;31517:1;31510:15;31544:4;31541:1;31534:15;31561:185;31601:1;31618:20;31636:1;31618:20;:::i;:::-;31613:25;;31652:20;31670:1;31652:20;:::i;:::-;31647:25;;31691:1;31681:35;;31696:18;;:::i;:::-;31681:35;31738:1;31735;31731:9;31726:14;;31561:185;;;;:::o;31752:194::-;31792:4;31812:20;31830:1;31812:20;:::i;:::-;31807:25;;31846:20;31864:1;31846:20;:::i;:::-;31841:25;;31890:1;31887;31883:9;31875:17;;31914:1;31908:4;31905:11;31902:37;;;31919:18;;:::i;:::-;31902:37;31752:194;;;;:::o;31952:176::-;31984:1;32001:20;32019:1;32001:20;:::i;:::-;31996:25;;32035:20;32053:1;32035:20;:::i;:::-;32030:25;;32074:1;32064:35;;32079:18;;:::i;:::-;32064:35;32120:1;32117;32113:9;32108:14;;31952:176;;;;:::o;32134:191::-;32174:3;32193:20;32211:1;32193:20;:::i;:::-;32188:25;;32227:20;32245:1;32227:20;:::i;:::-;32222:25;;32270:1;32267;32263:9;32256:16;;32291:3;32288:1;32285:10;32282:36;;;32298:18;;:::i;:::-;32282:36;32134:191;;;;:::o;32331:227::-;32471:34;32467:1;32459:6;32455:14;32448:58;32540:10;32535:2;32527:6;32523:15;32516:35;32331:227;:::o;32564:366::-;32706:3;32727:67;32791:2;32786:3;32727:67;:::i;:::-;32720:74;;32803:93;32892:3;32803:93;:::i;:::-;32921:2;32916:3;32912:12;32905:19;;32564:366;;;:::o;32936:419::-;33102:4;33140:2;33129:9;33125:18;33117:26;;33189:9;33183:4;33179:20;33175:1;33164:9;33160:17;33153:47;33217:131;33343:4;33217:131;:::i;:::-;33209:139;;32936:419;;;:::o;33361:224::-;33501:34;33497:1;33489:6;33485:14;33478:58;33570:7;33565:2;33557:6;33553:15;33546:32;33361:224;:::o;33591:366::-;33733:3;33754:67;33818:2;33813:3;33754:67;:::i;:::-;33747:74;;33830:93;33919:3;33830:93;:::i;:::-;33948:2;33943:3;33939:12;33932:19;;33591:366;;;:::o;33963:419::-;34129:4;34167:2;34156:9;34152:18;34144:26;;34216:9;34210:4;34206:20;34202:1;34191:9;34187:17;34180:47;34244:131;34370:4;34244:131;:::i;:::-;34236:139;;33963:419;;;:::o;34388:229::-;34528:34;34524:1;34516:6;34512:14;34505:58;34597:12;34592:2;34584:6;34580:15;34573:37;34388:229;:::o;34623:366::-;34765:3;34786:67;34850:2;34845:3;34786:67;:::i;:::-;34779:74;;34862:93;34951:3;34862:93;:::i;:::-;34980:2;34975:3;34971:12;34964:19;;34623:366;;;:::o;34995:419::-;35161:4;35199:2;35188:9;35184:18;35176:26;;35248:9;35242:4;35238:20;35234:1;35223:9;35219:17;35212:47;35276:131;35402:4;35276:131;:::i;:::-;35268:139;;34995:419;;;:::o;35420:634::-;35641:4;35679:2;35668:9;35664:18;35656:26;;35728:9;35722:4;35718:20;35714:1;35703:9;35699:17;35692:47;35756:108;35859:4;35850:6;35756:108;:::i;:::-;35748:116;;35911:9;35905:4;35901:20;35896:2;35885:9;35881:18;35874:48;35939:108;36042:4;36033:6;35939:108;:::i;:::-;35931:116;;35420:634;;;;;:::o;36060:182::-;36200:34;36196:1;36188:6;36184:14;36177:58;36060:182;:::o;36248:366::-;36390:3;36411:67;36475:2;36470:3;36411:67;:::i;:::-;36404:74;;36487:93;36576:3;36487:93;:::i;:::-;36605:2;36600:3;36596:12;36589:19;;36248:366;;;:::o;36620:419::-;36786:4;36824:2;36813:9;36809:18;36801:26;;36873:9;36867:4;36863:20;36859:1;36848:9;36844:17;36837:47;36901:131;37027:4;36901:131;:::i;:::-;36893:139;;36620:419;;;:::o;37045:141::-;37094:4;37117:3;37109:11;;37140:3;37137:1;37130:14;37174:4;37171:1;37161:18;37153:26;;37045:141;;;:::o;37192:93::-;37229:6;37276:2;37271;37264:5;37260:14;37256:23;37246:33;;37192:93;;;:::o;37291:107::-;37335:8;37385:5;37379:4;37375:16;37354:37;;37291:107;;;;:::o;37404:393::-;37473:6;37523:1;37511:10;37507:18;37546:97;37576:66;37565:9;37546:97;:::i;:::-;37664:39;37694:8;37683:9;37664:39;:::i;:::-;37652:51;;37736:4;37732:9;37725:5;37721:21;37712:30;;37785:4;37775:8;37771:19;37764:5;37761:30;37751:40;;37480:317;;37404:393;;;;;:::o;37803:60::-;37831:3;37852:5;37845:12;;37803:60;;;:::o;37869:142::-;37919:9;37952:53;37970:34;37979:24;37997:5;37979:24;:::i;:::-;37970:34;:::i;:::-;37952:53;:::i;:::-;37939:66;;37869:142;;;:::o;38017:75::-;38060:3;38081:5;38074:12;;38017:75;;;:::o;38098:269::-;38208:39;38239:7;38208:39;:::i;:::-;38269:91;38318:41;38342:16;38318:41;:::i;:::-;38310:6;38303:4;38297:11;38269:91;:::i;:::-;38263:4;38256:105;38174:193;38098:269;;;:::o;38373:73::-;38418:3;38373:73;:::o;38452:189::-;38529:32;;:::i;:::-;38570:65;38628:6;38620;38614:4;38570:65;:::i;:::-;38505:136;38452:189;;:::o;38647:186::-;38707:120;38724:3;38717:5;38714:14;38707:120;;;38778:39;38815:1;38808:5;38778:39;:::i;:::-;38751:1;38744:5;38740:13;38731:22;;38707:120;;;38647:186;;:::o;38839:543::-;38940:2;38935:3;38932:11;38929:446;;;38974:38;39006:5;38974:38;:::i;:::-;39058:29;39076:10;39058:29;:::i;:::-;39048:8;39044:44;39241:2;39229:10;39226:18;39223:49;;;39262:8;39247:23;;39223:49;39285:80;39341:22;39359:3;39341:22;:::i;:::-;39331:8;39327:37;39314:11;39285:80;:::i;:::-;38944:431;;38929:446;38839:543;;;:::o;39388:117::-;39442:8;39492:5;39486:4;39482:16;39461:37;;39388:117;;;;:::o;39511:169::-;39555:6;39588:51;39636:1;39632:6;39624:5;39621:1;39617:13;39588:51;:::i;:::-;39584:56;39669:4;39663;39659:15;39649:25;;39562:118;39511:169;;;;:::o;39685:295::-;39761:4;39907:29;39932:3;39926:4;39907:29;:::i;:::-;39899:37;;39969:3;39966:1;39962:11;39956:4;39953:21;39945:29;;39685:295;;;;:::o;39985:1395::-;40102:37;40135:3;40102:37;:::i;:::-;40204:18;40196:6;40193:30;40190:56;;;40226:18;;:::i;:::-;40190:56;40270:38;40302:4;40296:11;40270:38;:::i;:::-;40355:67;40415:6;40407;40401:4;40355:67;:::i;:::-;40449:1;40473:4;40460:17;;40505:2;40497:6;40494:14;40522:1;40517:618;;;;41179:1;41196:6;41193:77;;;41245:9;41240:3;41236:19;41230:26;41221:35;;41193:77;41296:67;41356:6;41349:5;41296:67;:::i;:::-;41290:4;41283:81;41152:222;40487:887;;40517:618;40569:4;40565:9;40557:6;40553:22;40603:37;40635:4;40603:37;:::i;:::-;40662:1;40676:208;40690:7;40687:1;40684:14;40676:208;;;40769:9;40764:3;40760:19;40754:26;40746:6;40739:42;40820:1;40812:6;40808:14;40798:24;;40867:2;40856:9;40852:18;40839:31;;40713:4;40710:1;40706:12;40701:17;;40676:208;;;40912:6;40903:7;40900:19;40897:179;;;40970:9;40965:3;40961:19;40955:26;41013:48;41055:4;41047:6;41043:17;41032:9;41013:48;:::i;:::-;41005:6;40998:64;40920:156;40897:179;41122:1;41118;41110:6;41106:14;41102:22;41096:4;41089:36;40524:611;;;40487:887;;40077:1303;;;39985:1395;;:::o;41386:228::-;41526:34;41522:1;41514:6;41510:14;41503:58;41595:11;41590:2;41582:6;41578:15;41571:36;41386:228;:::o;41620:366::-;41762:3;41783:67;41847:2;41842:3;41783:67;:::i;:::-;41776:74;;41859:93;41948:3;41859:93;:::i;:::-;41977:2;41972:3;41968:12;41961:19;;41620:366;;;:::o;41992:419::-;42158:4;42196:2;42185:9;42181:18;42173:26;;42245:9;42239:4;42235:20;42231:1;42220:9;42216:17;42209:47;42273:131;42399:4;42273:131;:::i;:::-;42265:139;;41992:419;;;:::o;42417:220::-;42557:34;42553:1;42545:6;42541:14;42534:58;42626:3;42621:2;42613:6;42609:15;42602:28;42417:220;:::o;42643:366::-;42785:3;42806:67;42870:2;42865:3;42806:67;:::i;:::-;42799:74;;42882:93;42971:3;42882:93;:::i;:::-;43000:2;42995:3;42991:12;42984:19;;42643:366;;;:::o;43015:419::-;43181:4;43219:2;43208:9;43204:18;43196:26;;43268:9;43262:4;43258:20;43254:1;43243:9;43239:17;43232:47;43296:131;43422:4;43296:131;:::i;:::-;43288:139;;43015:419;;;:::o;43440:332::-;43561:4;43599:2;43588:9;43584:18;43576:26;;43612:71;43680:1;43669:9;43665:17;43656:6;43612:71;:::i;:::-;43693:72;43761:2;43750:9;43746:18;43737:6;43693:72;:::i;:::-;43440:332;;;;;:::o;43778:98::-;43829:6;43863:5;43857:12;43847:22;;43778:98;;;:::o;43882:168::-;43965:11;43999:6;43994:3;43987:19;44039:4;44034:3;44030:14;44015:29;;43882:168;;;;:::o;44056:373::-;44142:3;44170:38;44202:5;44170:38;:::i;:::-;44224:70;44287:6;44282:3;44224:70;:::i;:::-;44217:77;;44303:65;44361:6;44356:3;44349:4;44342:5;44338:16;44303:65;:::i;:::-;44393:29;44415:6;44393:29;:::i;:::-;44388:3;44384:39;44377:46;;44146:283;44056:373;;;;:::o;44435:1053::-;44758:4;44796:3;44785:9;44781:19;44773:27;;44810:71;44878:1;44867:9;44863:17;44854:6;44810:71;:::i;:::-;44891:72;44959:2;44948:9;44944:18;44935:6;44891:72;:::i;:::-;45010:9;45004:4;45000:20;44995:2;44984:9;44980:18;44973:48;45038:108;45141:4;45132:6;45038:108;:::i;:::-;45030:116;;45193:9;45187:4;45183:20;45178:2;45167:9;45163:18;45156:48;45221:108;45324:4;45315:6;45221:108;:::i;:::-;45213:116;;45377:9;45371:4;45367:20;45361:3;45350:9;45346:19;45339:49;45405:76;45476:4;45467:6;45405:76;:::i;:::-;45397:84;;44435:1053;;;;;;;;:::o;45494:141::-;45550:5;45581:6;45575:13;45566:22;;45597:32;45623:5;45597:32;:::i;:::-;45494:141;;;;:::o;45641:349::-;45710:6;45759:2;45747:9;45738:7;45734:23;45730:32;45727:119;;;45765:79;;:::i;:::-;45727:119;45885:1;45910:63;45965:7;45956:6;45945:9;45941:22;45910:63;:::i;:::-;45900:73;;45856:127;45641:349;;;;:::o;45996:106::-;46040:8;46089:5;46084:3;46080:15;46059:36;;45996:106;;;:::o;46108:183::-;46143:3;46181:1;46163:16;46160:23;46157:128;;;46219:1;46216;46213;46198:23;46241:34;46272:1;46266:8;46241:34;:::i;:::-;46234:41;;46157:128;46108:183;:::o;46297:711::-;46336:3;46374:4;46356:16;46353:26;46382:5;46350:39;46411:20;;:::i;:::-;46486:1;46468:16;46464:24;46461:1;46455:4;46440:49;46519:4;46513:11;46618:16;46611:4;46603:6;46599:17;46596:39;46563:18;46555:6;46552:30;46536:113;46533:146;;;46664:5;;;;46533:146;46710:6;46704:4;46700:17;46746:3;46740:10;46773:18;46765:6;46762:30;46759:43;;;46795:5;;;;;;46759:43;46843:6;46836:4;46831:3;46827:14;46823:27;46902:1;46884:16;46880:24;46874:4;46870:35;46865:3;46862:44;46859:57;;;46909:5;;;;;;;46859:57;46926;46974:6;46968:4;46964:17;46956:6;46952:30;46946:4;46926:57;:::i;:::-;46999:3;46992:10;;46340:668;;;;;46297:711;;:::o;47014:239::-;47154:34;47150:1;47142:6;47138:14;47131:58;47223:22;47218:2;47210:6;47206:15;47199:47;47014:239;:::o;47259:366::-;47401:3;47422:67;47486:2;47481:3;47422:67;:::i;:::-;47415:74;;47498:93;47587:3;47498:93;:::i;:::-;47616:2;47611:3;47607:12;47600:19;;47259:366;;;:::o;47631:419::-;47797:4;47835:2;47824:9;47820:18;47812:26;;47884:9;47878:4;47874:20;47870:1;47859:9;47855:17;47848:47;47912:131;48038:4;47912:131;:::i;:::-;47904:139;;47631:419;;;:::o;48056:227::-;48196:34;48192:1;48184:6;48180:14;48173:58;48265:10;48260:2;48252:6;48248:15;48241:35;48056:227;:::o;48289:366::-;48431:3;48452:67;48516:2;48511:3;48452:67;:::i;:::-;48445:74;;48528:93;48617:3;48528:93;:::i;:::-;48646:2;48641:3;48637:12;48630:19;;48289:366;;;:::o;48661:419::-;48827:4;48865:2;48854:9;48850:18;48842:26;;48914:9;48908:4;48904:20;48900:1;48889:9;48885:17;48878:47;48942:131;49068:4;48942:131;:::i;:::-;48934:139;;48661:419;;;:::o;49086:751::-;49309:4;49347:3;49336:9;49332:19;49324:27;;49361:71;49429:1;49418:9;49414:17;49405:6;49361:71;:::i;:::-;49442:72;49510:2;49499:9;49495:18;49486:6;49442:72;:::i;:::-;49524;49592:2;49581:9;49577:18;49568:6;49524:72;:::i;:::-;49606;49674:2;49663:9;49659:18;49650:6;49606:72;:::i;:::-;49726:9;49720:4;49716:20;49710:3;49699:9;49695:19;49688:49;49754:76;49825:4;49816:6;49754:76;:::i;:::-;49746:84;;49086:751;;;;;;;;:::o

Swarm Source

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