Contract
0x6d3584ef37c43374151f5aa7928f7201914ea811
2
[ Download CSV Export ]
OVERVIEW
Summoner is a Play-to-Earn (P2E) MMORPG NFT game.Contract Name:
Creature
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-01-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.7; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity 0.8.7; /** * @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; } } pragma solidity 0.8.7; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity 0.8.7; /** * @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); } pragma solidity 0.8.7; /** * @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; } } pragma solidity 0.8.7; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity 0.8.7; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity 0.8.7; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity 0.8.7; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.7; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // OpenZeppelin Contracts v4.3.2 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity 0.8.7; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity 0.8.7; contract Owned { address public owner; address public nominatedOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event OwnerNominated(address indexed newOwner); constructor(address _owner) { require(_owner != address(0), "Address cannot be 0"); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function nominateNewOwner(address _owner) external onlyOwner { nominatedOwner = _owner; emit OwnerNominated(_owner); } function acceptOwnership() external { require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership"); emit OwnershipTransferred(owner, nominatedOwner); owner = nominatedOwner; nominatedOwner = address(0); } modifier onlyOwner { require(msg.sender == owner, "Only the contract owner may perform this action"); _; } } pragma solidity 0.8.7; contract AccessController is Owned { mapping(bytes32 => mapping(address => bool)) public roles; event AuthorizationUpdated(bytes32 role, address target, bool authorization); constructor( bytes32[] memory _roles, address[] memory _authAddresses, bool[] memory _authorizations, address _owner ) Owned(_owner) { require(_roles.length == _authAddresses.length && _roles.length == _authorizations.length, "Input lenghts not matched"); for(uint i = 0; i < _roles.length; i++) { _setAuthorizations(_roles[i], _authAddresses[i], _authorizations[i]); } } function setAuthorizations( bytes32[] calldata _roles, address[] calldata _authAddresses, bool[] calldata _authorizations ) external onlyOwner { require(_roles.length == _authAddresses.length && _roles.length == _authorizations.length, "Input lenghts not matched"); for(uint i = 0; i < _roles.length; i++) { _setAuthorizations(_roles[i], _authAddresses[i], _authorizations[i]); } } function _setAuthorizations( bytes32 _role, address _address, bool _authorization ) internal { roles[_role][_address] = _authorization; emit AuthorizationUpdated(_role, _address, _authorization); } modifier onlyRole(bytes32 _role, address _address) { require(roles[_role][_address], string(abi.encodePacked("Caller is not ", _role))); _; } } pragma solidity 0.8.7; contract Creature is ERC721Enumerable, AccessController { using Strings for uint; struct TokenRespectiveURI { string uri; bool exclusive; } bytes32 constant private MINTER_ROLE = "MINTER_ROLE"; bytes32 constant private URI_MANAGER_ROLE = "URI_MANAGER_ROLE"; bytes32 constant private BURNER_ROLE = "BURNER_ROLE"; bytes32 constant private LOCKER_ROLE = "LOCKER_ROLE"; bytes32 constant private DEPOSIT_ROLE = "DEPOSIT_ROLE"; // Token ID to version mapping(uint => uint) public tokenURIVersion; // convention: last letter should be / mapping(uint => string) public tokenBaseURI; mapping(uint => string) public tokenTailURI; // convention: if token is not exclusive but has respective uri, // uri may not have / at both first and last letter as it will be combined with base and tail URI. mapping(uint => TokenRespectiveURI) public tokenRespectiveURI; mapping(uint => bool) public transferLocked; mapping (uint => bool) public withdrawnTokens; uint public currentTokenURIVersion = 1; // limit batching of tokens due to gas limit restrictions uint public constant BATCH_LIMIT = 20; event URIVersionUpdated(uint version, string baseURI, string tailURI); event RespectiveURIUpdated(uint tokenId, string uri, bool exclusive); event TokenURIVersionUpdated(uint tokenId, uint uriVersion); event TokenLockStatusUpdated(uint tokenId, bool locked); event WithdrawnBatch(address indexed user, uint[] tokenIds); event TransferWithMetadata(address indexed from, address indexed to, uint indexed tokenId, bytes metaData); constructor( string memory _name, string memory _symbol, string memory _tokenBaseURI, string memory _tokenTailURI, bytes32[] memory _roles, address[] memory _authAddresses, bool[] memory _authorizations, address _owner ) ERC721(_name, _symbol) AccessController(_roles, _authAddresses, _authorizations, _owner) { // The version starts from 1 tokenBaseURI[currentTokenURIVersion] = _tokenBaseURI; tokenTailURI[currentTokenURIVersion] = _tokenTailURI; } function setTokenURI( uint _newVersion, string calldata _tokenBaseURI, string calldata _tokenTailURI ) external onlyRole(URI_MANAGER_ROLE, msg.sender) { require(_newVersion > 0, "version 0 is not allowed"); // require(bytes(tokenBaseURI[_newVersion]).length == 0, // "Given version already exists"); require(bytes(_tokenBaseURI).length > 0, "Base URI cannot be empty"); currentTokenURIVersion = _newVersion; _setTokenURI(_tokenBaseURI, _tokenTailURI); emit URIVersionUpdated(_newVersion, _tokenBaseURI, _tokenTailURI); } /** * @dev It gives token's own url. If _exclusive is true, token URI will only returns its respective uri. * Or, it returns the uri combined with base and tail. */ function setTokenRespectiveURI( uint _tokenId, string calldata _newRespectiveUri, bool _exclusive ) external onlyRole(URI_MANAGER_ROLE, msg.sender) { _setTokenRespectiveURI(_tokenId, _newRespectiveUri, _exclusive); } /** * @notice It changes token's URI version, then token will provide URI of given version. * @dev It changes URI version of given token id. * The given URI version must be set priorly. */ function setTokenURIVersion(uint _tokenId, uint _uriVersion) external onlyRole(URI_MANAGER_ROLE, msg.sender) { require(_exists(_tokenId), "Setting URI version for nonexistent token"); require(bytes(tokenBaseURI[_uriVersion]).length > 0, "Given version does not exist"); tokenURIVersion[_tokenId] = _uriVersion; emit TokenURIVersionUpdated(_tokenId, _uriVersion); } function setTokenLock(uint _tokenId, bool _lock) external onlyRole(LOCKER_ROLE, msg.sender) { require(_exists(_tokenId), "Lock for nonexistent token"); transferLocked[_tokenId] = _lock; emit TokenLockStatusUpdated(_tokenId, _lock); } function mint(address _to, uint _tokenId) external onlyRole(MINTER_ROLE, msg.sender) { _mint(_to, _tokenId); tokenURIVersion[_tokenId] = currentTokenURIVersion; } function mintWithRespectiveURI( address _to, uint _tokenId, string calldata _uri, bool _exclusiveUri ) external onlyRole(MINTER_ROLE, msg.sender) { _mint(_to, _tokenId); _setTokenRespectiveURI(_tokenId, _uri, _exclusiveUri); tokenURIVersion[_tokenId] = currentTokenURIVersion; } function burn(uint _tokenId) external onlyRole(BURNER_ROLE, msg.sender) { _burn(_tokenId); delete tokenRespectiveURI[_tokenId]; delete tokenURIVersion[_tokenId]; } function deposit(address user, bytes calldata depositData) external onlyRole(DEPOSIT_ROLE, msg.sender) { // deposit single if (depositData.length == 32) { uint256 tokenId = abi.decode(depositData, (uint256)); withdrawnTokens[tokenId] = false; _mint(user, tokenId); // deposit batch } else { uint256[] memory tokenIds = abi.decode(depositData, (uint256[])); uint256 length = tokenIds.length; for (uint256 i; i < length; i++) { withdrawnTokens[tokenIds[i]] = false; _mint(user, tokenIds[i]); } } } /** * @notice called when user wants to withdraw multiple tokens back to root chain * @dev Should burn user's tokens. This transaction will be verified when exiting on root chain * @param tokenIds tokenId list to withdraw */ function withdrawBatch(uint256[] calldata tokenIds) external { uint256 length = tokenIds.length; require(length <= BATCH_LIMIT, "ChildMintableERC721: EXCEEDS_BATCH_LIMIT"); // Iteratively burn ERC721 tokens, for performing // batch withdraw for (uint256 i; i < length; i++) { uint256 tokenId = tokenIds[i]; require(_msgSender() == ownerOf(tokenId), string(abi.encodePacked("ChildMintableERC721: INVALID_TOKEN_OWNER ", tokenId))); withdrawnTokens[tokenId] = true; _burn(tokenId); } // At last emit this event, which will be used // in MintableERC721 predicate contract on L1 // while verifying burn proof emit WithdrawnBatch(_msgSender(), tokenIds); } /** * @notice called when user wants to withdraw token back to root chain with token URI * @dev Should handle withraw by burning user's token. * Should set `withdrawnTokens` mapping to `true` for the tokenId being withdrawn * This transaction will be verified when exiting on root chain * * @param tokenId tokenId to withdraw */ function withdrawWithMetadata(uint256 tokenId) external { require(_msgSender() == ownerOf(tokenId), "ChildMintableERC721: INVALID_TOKEN_OWNER"); withdrawnTokens[tokenId] = true; // Encoding metadata associated with tokenId & emitting event emit TransferWithMetadata(ownerOf(tokenId), address(0), tokenId, this.encodeTokenMetadata(tokenId)); _burn(tokenId); } /** VIEW **/ /** * @dev The core uri would be token's respective uri if it exists, even though it is not exclusive. * If the core uri is intended to be default(token ID), * then its respective uri must be deleted or set to its tokenId priorly by uri manager. */ function tokenURI(uint _tokenId) public view override(ERC721) returns (string memory) { require(_exists(_tokenId), "URI query for nonexistent token"); TokenRespectiveURI memory _mem_tokenURI = tokenRespectiveURI[_tokenId]; if(_mem_tokenURI.exclusive) { return _mem_tokenURI.uri; } (string memory baseURI, string memory tailURI) = _getBaseURI(_tokenId); // If token owns respective uri, the core uri will be respective uri rather than its id. string memory respectiveURI = bytes(_mem_tokenURI.uri).length == 0 ? _tokenId.toString() : _mem_tokenURI.uri; // It only checks base URI as tail URI will be considered as an option. return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, respectiveURI, tailURI)) : ""; } function getOwnedTokens( address _tokenOwner, uint _begin, uint _end ) external view returns(uint[] memory) { require(_begin <= _end, "beginning index should less or equal to end index"); require(_end < super.balanceOf(_tokenOwner), "end index is out of bounds"); uint[] memory _tokenIds = new uint[](_end - _begin + 1); uint _dataIndex = 0; for(uint i = _begin; i <= _end; i++) { _tokenIds[_dataIndex] = super.tokenOfOwnerByIndex(_tokenOwner, i); _dataIndex++; } return _tokenIds; } /** INTERNAL **/ function _setTokenURI(string memory _tokenBaseURI, string memory _tokenTailURI) internal { tokenBaseURI[currentTokenURIVersion] = _tokenBaseURI; tokenTailURI[currentTokenURIVersion] = _tokenTailURI; } function _setTokenRespectiveURI( uint _tokenId, string calldata _newRespectiveUri, bool _exclusive ) internal { require(_exists(_tokenId), "Setting URI for nonexistent token"); tokenRespectiveURI[_tokenId].uri = _newRespectiveUri; tokenRespectiveURI[_tokenId].exclusive = _exclusive; emit RespectiveURIUpdated(_tokenId, _newRespectiveUri, _exclusive); } function _getBaseURI(uint _tokenId) internal view returns(string memory, string memory) { uint uriVersion = tokenURIVersion[_tokenId]; return (tokenBaseURI[uriVersion], tokenTailURI[uriVersion]); } function _mint(address _to, uint _tokenId) internal override { require(_tokenId != 0, "Token ID 0 is not allowed"); super._mint(_to, _tokenId); } function _beforeTokenTransfer( address _from, address _to, uint256 _tokenId ) internal override { require(!transferLocked[_tokenId], "token is locked"); super._beforeTokenTransfer(_from, _to, _tokenId); } /** * @notice This method is supposed to be called by client when withdrawing token with metadata * and pass return value of this function as second paramter of `withdrawWithMetadata` method * * It can be overridden by clients to encode data in a different form, which needs to * be decoded back by them correctly during exiting * * @param tokenId Token for which URI to be fetched */ function encodeTokenMetadata(uint256 tokenId) external view virtual returns (bytes memory) { // You're always free to change this default implementation // and pack more data in byte array which can be decoded back // in L1 return abi.encode(tokenURI(tokenId)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_tokenBaseURI","type":"string"},{"internalType":"string","name":"_tokenTailURI","type":"string"},{"internalType":"bytes32[]","name":"_roles","type":"bytes32[]"},{"internalType":"address[]","name":"_authAddresses","type":"address[]"},{"internalType":"bool[]","name":"_authorizations","type":"bool[]"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"authorization","type":"bool"}],"name":"AuthorizationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"bool","name":"exclusive","type":"bool"}],"name":"RespectiveURIUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"locked","type":"bool"}],"name":"TokenLockStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uriVersion","type":"uint256"}],"name":"TokenURIVersionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"metaData","type":"bytes"}],"name":"TransferWithMetadata","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"},{"indexed":false,"internalType":"string","name":"baseURI","type":"string"},{"indexed":false,"internalType":"string","name":"tailURI","type":"string"}],"name":"URIVersionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"WithdrawnBatch","type":"event"},{"inputs":[],"name":"BATCH_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenURIVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"encodeTokenMetadata","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"uint256","name":"_begin","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bool","name":"_exclusiveUri","type":"bool"}],"name":"mintWithRespectiveURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"roles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"bytes32[]","name":"_roles","type":"bytes32[]"},{"internalType":"address[]","name":"_authAddresses","type":"address[]"},{"internalType":"bool[]","name":"_authorizations","type":"bool[]"}],"name":"setAuthorizations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_lock","type":"bool"}],"name":"setTokenLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newRespectiveUri","type":"string"},{"internalType":"bool","name":"_exclusive","type":"bool"}],"name":"setTokenRespectiveURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newVersion","type":"uint256"},{"internalType":"string","name":"_tokenBaseURI","type":"string"},{"internalType":"string","name":"_tokenTailURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_uriVersion","type":"uint256"}],"name":"setTokenURIVersion","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenRespectiveURI","outputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"bool","name":"exclusive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTailURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURIVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"withdrawBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawWithMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawnTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260016013553480156200001657600080fd5b50604051620048cc380380620048cc83398101604081905262000039916200059f565b83838383808c8c816000908051906020019062000058929190620002d9565b5080516200006e906001906020840190620002d9565b5050506001600160a01b038116620000cd5760405162461bcd60e51b815260206004820152601360248201527f416464726573732063616e6e6f7420626520300000000000000000000000000060448201526064015b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350825184511480156200012a575081518451145b620001785760405162461bcd60e51b815260206004820152601960248201527f496e707574206c656e67687473206e6f74206d617463686564000000000000006044820152606401620000c4565b60005b84518110156200020157620001ec8582815181106200019e576200019e620007a2565b6020026020010151858381518110620001bb57620001bb620007a2565b6020026020010151858481518110620001d857620001d8620007a2565b60200260200101516200026160201b60201c565b80620001f88162000778565b9150506200017b565b50506013546000908152600e602090815260409091208a516200022d9550909350908a019150620002d9565b506013546000908152600f6020908152604090912086516200025292880190620002d9565b505050505050505050620007ce565b6000838152600c602090815260408083206001600160a01b03861680855290835292819020805460ff19168515159081179091558151878152928301939093528101919091527f1b4d6a56a87ba935d325e25e3aa8a8b959315171423da5c9b2c4e6f1f5887fc59060600160405180910390a1505050565b828054620002e7906200073b565b90600052602060002090601f0160209004810192826200030b576000855562000356565b82601f106200032657805160ff191683800117855562000356565b8280016001018555821562000356579182015b828111156200035657825182559160200191906001019062000339565b506200036492915062000368565b5090565b5b8082111562000364576000815560010162000369565b80516001600160a01b03811681146200039757600080fd5b919050565b600082601f830112620003ae57600080fd5b81516020620003c7620003c18362000715565b620006e2565b80838252828201915082860187848660051b8901011115620003e857600080fd5b60005b858110156200041257620003ff826200037f565b84529284019290840190600101620003eb565b5090979650505050505050565b600082601f8301126200043157600080fd5b8151602062000444620003c18362000715565b80838252828201915082860187848660051b89010111156200046557600080fd5b6000805b8681101562000495578251801515811462000482578283fd5b8552938501939185019160010162000469565b509198975050505050505050565b600082601f830112620004b557600080fd5b81516020620004c8620003c18362000715565b80838252828201915082860187848660051b8901011115620004e957600080fd5b60005b858110156200041257815184529284019290840190600101620004ec565b600082601f8301126200051c57600080fd5b81516001600160401b03811115620005385762000538620007b8565b60206200054e601f8301601f19168201620006e2565b82815285828487010111156200056357600080fd5b60005b838110156200058357858101830151828201840152820162000566565b83811115620005955760008385840101525b5095945050505050565b600080600080600080600080610100898b031215620005bd57600080fd5b88516001600160401b0380821115620005d557600080fd5b620005e38c838d016200050a565b995060208b0151915080821115620005fa57600080fd5b620006088c838d016200050a565b985060408b01519150808211156200061f57600080fd5b6200062d8c838d016200050a565b975060608b01519150808211156200064457600080fd5b620006528c838d016200050a565b965060808b01519150808211156200066957600080fd5b620006778c838d01620004a3565b955060a08b01519150808211156200068e57600080fd5b6200069c8c838d016200039c565b945060c08b0151915080821115620006b357600080fd5b50620006c28b828c016200041f565b925050620006d360e08a016200037f565b90509295985092959890939650565b604051601f8201601f191681016001600160401b03811182821017156200070d576200070d620007b8565b604052919050565b60006001600160401b03821115620007315762000731620007b8565b5060051b60200190565b600181811c908216806200075057607f821691505b602082108114156200077257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200079b57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6140ee80620007de6000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636352211e11610186578063a5e584dc116100e3578063daf5ae5b11610097578063e985e9c511610071578063e985e9c514610608578063ee3e0cb914610644578063f8fc08b91461066457600080fd5b8063daf5ae5b146105bf578063e00a4d22146105d2578063e68f3bd8146105f557600080fd5b8063c87b56dd116100c8578063c87b56dd14610578578063caa414271461058b578063cf2c52cb146105ac57600080fd5b8063a5e584dc14610552578063b88d4fde1461056557600080fd5b80638da5cb5b1161013a57806395d89b411161011f57806395d89b41146105245780639c8d41561461052c578063a22cb4651461053f57600080fd5b80638da5cb5b146105095780639559c0bd1461051c57600080fd5b806377f06adf1161016b57806377f06adf146104db57806379ba5097146104ee57806379e74f09146104f657600080fd5b80636352211e146104b557806370a08231146104c857600080fd5b806323b872dd1161023f57806340c10f19116101f35780634656d75a116101cd5780634656d75a1461047c5780634f6ccce71461048f57806353a47bb7146104a257600080fd5b806340c10f191461044357806342842e0e1461045657806342966c681461046957600080fd5b806325f4d5641161022457806325f4d56414610414578063263628d71461041d5780632f745c591461043057600080fd5b806323b872dd146103ee578063252729dd1461040157600080fd5b8063095ea7b3116102965780631627540c1161027b5780631627540c146103b65780631653c39a146103c957806318160ddd146103dc57600080fd5b8063095ea7b31461038e5780631267ee1a146103a357600080fd5b806307a974fc116102c757806307a974fc14610320578063081812fc14610343578063082a65691461036e57600080fd5b806301ffc9a7146102e357806306fdde031461030b575b600080fd5b6102f66102f1366004613a4d565b610692565b60405190151581526020015b60405180910390f35b6103136106ee565b6040516103029190613d99565b6102f661032e366004613afe565b60126020526000908152604090205460ff1681565b610356610351366004613afe565b610780565b6040516001600160a01b039091168152602001610302565b61038161037c366004613853565b61082b565b6040516103029190613d55565b6103a161039c3660046137ba565b6109b2565b005b6103a16103b1366004613886565b610ae4565b6103a16103c4366004613601565b610c53565b6103136103d7366004613afe565b610d35565b6008545b604051908152602001610302565b6103a16103fc366004613656565b610d66565b61031361040f366004613afe565b610ded565b6103e060135481565b6103a161042b3660046137e4565b610e87565b6103e061043e3660046137ba565b610f77565b6103a16104513660046137ba565b61101f565b6103a1610464366004613656565b6110fd565b6103a1610477366004613afe565b611118565b61031361048a366004613afe565b611214565b6103e061049d366004613afe565b61122d565b600b54610356906001600160a01b031681565b6103566104c3366004613afe565b6112d1565b6103e06104d6366004613601565b61135c565b6103a16104e9366004613b98565b6113f6565b6103a161160d565b6103a1610504366004613c12565b61170b565b600a54610356906001600160a01b031681565b6103e0601481565b61031361190b565b6103a161053a366004613920565b61191a565b6103a161054d36600461373d565b611ae6565b6103a1610560366004613afe565b611af5565b6103a1610573366004613692565b611c75565b610313610586366004613afe565b611d03565b61059e610599366004613afe565b611eb0565b604051610302929190613dac565b6103a16105ba366004613767565b611f57565b6103a16105cd366004613b3a565b6120f5565b6102f66105e0366004613afe565b60116020526000908152604090205460ff1681565b6103a1610603366004613b17565b6121c5565b6102f6610616366004613623565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103e0610652366004613afe565b600d6020526000908152604090205481565b6102f6610672366004613a2a565b600c60209081526000928352604080842090915290825290205460ff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806106e857506106e882612337565b92915050565b6060600080546106fd90613efe565b80601f016020809104026020016040519081016040528092919081815260200182805461072990613efe565b80156107765780601f1061074b57610100808354040283529160200191610776565b820191906000526020600020905b81548152906001019060200180831161075957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661080f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6060818311156108a35760405162461bcd60e51b815260206004820152603160248201527f626567696e6e696e6720696e6465782073686f756c64206c657373206f72206560448201527f7175616c20746f20656e6420696e6465780000000000000000000000000000006064820152608401610806565b6108ac8461135c565b82106108fa5760405162461bcd60e51b815260206004820152601a60248201527f656e6420696e646578206973206f7574206f6620626f756e64730000000000006044820152606401610806565b60006109068484613ebb565b610911906001613e8f565b67ffffffffffffffff8111156109295761092961405b565b604051908082528060200260200182016040528015610952578160200160208202803683370190505b5090506000845b8481116109a75761096a8782610f77565b83838151811061097c5761097c61402c565b60209081029190910101528161099181613f52565b925050808061099f90613f52565b915050610959565b509095945050505050565b60006109bd826112d1565b9050806001600160a01b0316836001600160a01b03161415610a475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610806565b336001600160a01b0382161480610a635750610a638133610616565b610ad55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610806565b610adf838361241a565b505050565b600a546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e00000000000000000000000000000000006064820152608401610806565b8483148015610b7257508481145b610bbe5760405162461bcd60e51b815260206004820152601960248201527f496e707574206c656e67687473206e6f74206d617463686564000000000000006044820152606401610806565b60005b85811015610c4a57610c38878783818110610bde57610bde61402c565b90506020020135868684818110610bf757610bf761402c565b9050602002016020810190610c0c9190613601565b858585818110610c1e57610c1e61402c565b9050602002016020810190610c339190613a0f565b6124a0565b80610c4281613f52565b915050610bc1565b50505050505050565b600a546001600160a01b03163314610cd35760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e00000000000000000000000000000000006064820152608401610806565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b6060610d4082611d03565b604051602001610d509190613d99565b6040516020818303038152906040529050919050565b610d703382612518565b610de25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610806565b610adf838383612620565b600f6020526000908152604090208054610e0690613efe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3290613efe565b8015610e7f5780601f10610e5457610100808354040283529160200191610e7f565b820191906000526020600020905b815481529060010190602001808311610e6257829003601f168201915b505050505081565b3360008181527fe8c7fad10fe3c6d9ba84101e317ea0268fc29c540db2f021301bcdaa6222863860209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f4d494e5445525f524f4c45000000000000000000000000000000000000000000602e8201819052929160ff1690604e0160405160208183030381529060405290610f425760405162461bcd60e51b81526004016108069190613d99565b50610f4d8787612810565b610f5986868686612867565b50506013546000948552600d60205260409094209390935550505050565b6000610f828361135c565b8210610ff65760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610806565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b3360008181527fe8c7fad10fe3c6d9ba84101e317ea0268fc29c540db2f021301bcdaa6222863860209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f4d494e5445525f524f4c45000000000000000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906110da5760405162461bcd60e51b81526004016108069190613d99565b506110e58484612810565b50506013546000918252600d60205260409091205550565b610adf83838360405180602001604052806000815250611c75565b3360008181527e9dad40b60f401607a761982c96b1198165622b81ad085d27167dad600e08a860209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f4255524e45525f524f4c45000000000000000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906111d25760405162461bcd60e51b81526004016108069190613d99565b506111dc8361295e565b6000838152601060205260408120906111f58282613400565b50600101805460ff1916905550506000908152600d6020526040812055565b600e6020526000908152604090208054610e0690613efe565b600061123860085490565b82106112ac5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610806565b600882815481106112bf576112bf61402c565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806106e85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610806565b60006001600160a01b0382166113da5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610806565b506001600160a01b031660009081526003602052604090205490565b3360008181527f0cf421a99573af5d45a14fd60ab902f42c7c34bf409e40af1c79580a1a00529160209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f5552495f4d414e414745525f524f4c4500000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906114b15760405162461bcd60e51b81526004016108069190613d99565b50600087116115025760405162461bcd60e51b815260206004820152601860248201527f76657273696f6e2030206973206e6f7420616c6c6f77656400000000000000006044820152606401610806565b8461154f5760405162461bcd60e51b815260206004820152601860248201527f42617365205552492063616e6e6f7420626520656d70747900000000000000006044820152606401610806565b6013879055604080516020601f88018190048102820181019092528681526115c591889088908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250612a1d92505050565b7fdf1e830eb45dd4781a065de8ab5592fd892116723e31ec6e3230fe21c4e7959687878787876040516115fc959493929190613dfd565b60405180910390a150505050505050565b600b546001600160a01b0316331461168d5760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e65727368697000000000000000000000006064820152608401610806565b600b54600a546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b8054600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b3360008181527f0cf421a99573af5d45a14fd60ab902f42c7c34bf409e40af1c79580a1a00529160209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f5552495f4d414e414745525f524f4c4500000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906117c65760405162461bcd60e51b81526004016108069190613d99565b506000848152600260205260409020546001600160a01b03166118515760405162461bcd60e51b815260206004820152602960248201527f53657474696e67205552492076657273696f6e20666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610806565b6000838152600e60205260408120805461186a90613efe565b9050116118b95760405162461bcd60e51b815260206004820152601c60248201527f476976656e2076657273696f6e20646f6573206e6f74206578697374000000006044820152606401610806565b6000848152600d602090815260409182902085905581518681529081018590527ffa8f9e7e2dcf333b5632d0da3282fcb6c8e57f93d6e77a691c1b558f544dc65f91015b60405180910390a150505050565b6060600180546106fd90613efe565b8060148111156119925760405162461bcd60e51b815260206004820152602860248201527f4368696c644d696e7461626c654552433732313a20455843454544535f42415460448201527f43485f4c494d49540000000000000000000000000000000000000000000000006064820152608401610806565b60005b81811015611a9d5760008484838181106119b1576119b161402c565b9050602002013590506119c3816112d1565b6001600160a01b0316336001600160a01b03161481604051602001611a3a91907f4368696c644d696e7461626c654552433732313a20494e56414c49445f544f4b81527f454e5f4f574e45522000000000000000000000000000000000000000000000006020820152602981019190915260490190565b60405160208183030381529060405290611a675760405162461bcd60e51b81526004016108069190613d99565b506000818152601260205260409020805460ff19166001179055611a8a8161295e565b5080611a9581613f52565b915050611995565b50336001600160a01b03167ff871896b17e9cb7a64941c62c188a4f5c621b86800e3d15452ece01ce56073df8484604051611ad9929190613d00565b60405180910390a2505050565b611af1338383612a62565b5050565b611afe816112d1565b6001600160a01b0316336001600160a01b031614611b845760405162461bcd60e51b815260206004820152602860248201527f4368696c644d696e7461626c654552433732313a20494e56414c49445f544f4b60448201527f454e5f4f574e45520000000000000000000000000000000000000000000000006064820152608401610806565b6000818152601260205260408120805460ff191660011790558190611ba8826112d1565b6001600160a01b03167ff94915c6d1fd521cee85359239227480c7e8776d7caf1fc3bacad5c269b66a14306001600160a01b0316631653c39a866040518263ffffffff1660e01b8152600401611c0091815260200190565b60006040518083038186803b158015611c1857600080fd5b505afa158015611c2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c549190810190613a87565b604051611c619190613d99565b60405180910390a4611c728161295e565b50565b611c7f3383612518565b611cf15760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610806565b611cfd84848484612b31565b50505050565b6000818152600260205260409020546060906001600160a01b0316611d6a5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610806565b6000828152601060205260408082208151808301909252805482908290611d9090613efe565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbc90613efe565b8015611e095780601f10611dde57610100808354040283529160200191611e09565b820191906000526020600020905b815481529060010190602001808311611dec57829003601f168201915b50505091835250506001919091015460ff16151560209182015281015190915015611e35575192915050565b600080611e4185612bba565b845151919350915060009015611e58578351611e61565b611e6186612d09565b90506000835111611e815760405180602001604052806000815250611ea6565b828183604051602001611e9693929190613c8b565b6040516020818303038152906040525b9695505050505050565b601060205260009081526040902080548190611ecb90613efe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef790613efe565b8015611f445780601f10611f1957610100808354040283529160200191611f44565b820191906000526020600020905b815481529060010190602001808311611f2757829003601f168201915b5050506001909301549192505060ff1682565b3360008181527fa54dab3825f1dbda347af613adc31336f76a90e71999968daf05f575504e7e4560209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f4445504f5349545f524f4c450000000000000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906120125760405162461bcd60e51b81526004016108069190613d99565b50602083141561205257600061202a84860186613afe565b6000818152601260205260409020805460ff19169055905061204c8682612810565b506120ee565b600061206084860186613962565b805190915060005b818110156120ea576000601260008584815181106120885761208861402c565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506120d8888483815181106120cb576120cb61402c565b6020026020010151612810565b806120e281613f52565b915050612068565b5050505b5050505050565b3360008181527f0cf421a99573af5d45a14fd60ab902f42c7c34bf409e40af1c79580a1a00529160209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f5552495f4d414e414745525f524f4c4500000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906121b05760405162461bcd60e51b81526004016108069190613d99565b506121bd86868686612867565b505050505050565b3360008181527fc29c900f39bc8ccf0ae2cd0f1f9849484b2288d2da71cb1f8db0d1b335841e6360209081526040918290205491517f43616c6c6572206973206e6f7420000000000000000000000000000000000000918101919091527f4c4f434b45525f524f4c45000000000000000000000000000000000000000000602e8201819052929160ff1690604e01604051602081830303815290604052906122805760405162461bcd60e51b81526004016108069190613d99565b506000848152600260205260409020546001600160a01b03166122e55760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b20666f72206e6f6e6578697374656e7420746f6b656e0000000000006044820152606401610806565b600084815260116020908152604091829020805460ff19168615159081179091558251878152918201527fa9f102eaefcba9d783b5160ff0b76495d2c91276559f57afb1f06ac369a316cc91016118fd565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806123ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106e857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106e8565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190612467826112d1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000838152600c602090815260408083206001600160a01b03861680855290835292819020805460ff19168515159081179091558151878152928301939093528101919091527f1b4d6a56a87ba935d325e25e3aa8a8b959315171423da5c9b2c4e6f1f5887fc59060600160405180910390a1505050565b6000818152600260205260408120546001600160a01b03166125a25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610806565b60006125ad836112d1565b9050806001600160a01b0316846001600160a01b031614806125e85750836001600160a01b03166125dd84610780565b6001600160a01b0316145b8061261857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612633826112d1565b6001600160a01b0316146126af5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610806565b6001600160a01b03821661272a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610806565b612735838383612e3b565b61274060008261241a565b6001600160a01b0383166000908152600360205260408120805460019290612769908490613ebb565b90915550506001600160a01b0382166000908152600360205260408120805460019290612797908490613e8f565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8061285d5760405162461bcd60e51b815260206004820152601960248201527f546f6b656e2049442030206973206e6f7420616c6c6f776564000000000000006044820152606401610806565b611af18282612ea5565b6000848152600260205260409020546001600160a01b03166128f15760405162461bcd60e51b815260206004820152602160248201527f53657474696e672055524920666f72206e6f6e6578697374656e7420746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610806565b600084815260106020526040902061290a90848461343a565b5060008481526010602052604090819020600101805460ff1916831515179055517f2a2defc7b50a4b599ad8cf1e828afa97c4894e657e2029e668b9120401ffe5fd906118fd908690869086908690613dd0565b6000612969826112d1565b905061297781600084612e3b565b61298260008361241a565b6001600160a01b03811660009081526003602052604081208054600192906129ab908490613ebb565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6013546000908152600e602090815260409091208351612a3f928501906134be565b506013546000908152600f602090815260409091208251610adf928401906134be565b816001600160a01b0316836001600160a01b03161415612ac45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610806565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612b3c848484612620565b612b488484848461300b565b611cfd5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610806565b6000818152600d6020908152604080832054808452600e8352818420600f909352922081546060938493909290918290612bf390613efe565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1f90613efe565b8015612c6c5780601f10612c4157610100808354040283529160200191612c6c565b820191906000526020600020905b815481529060010190602001808311612c4f57829003601f168201915b50505050509150808054612c7f90613efe565b80601f0160208091040260200160405190810160405280929190818152602001828054612cab90613efe565b8015612cf85780601f10612ccd57610100808354040283529160200191612cf8565b820191906000526020600020905b815481529060010190602001808311612cdb57829003601f168201915b505050505090509250925050915091565b606081612d4957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612d735780612d5d81613f52565b9150612d6c9050600a83613ea7565b9150612d4d565b60008167ffffffffffffffff811115612d8e57612d8e61405b565b6040519080825280601f01601f191660200182016040528015612db8576020820181803683370190505b5090505b841561261857612dcd600183613ebb565b9150612dda600a86613f8b565b612de5906030613e8f565b60f81b818381518110612dfa57612dfa61402c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612e34600a86613ea7565b9450612dbc565b60008181526011602052604090205460ff1615612e9a5760405162461bcd60e51b815260206004820152600f60248201527f746f6b656e206973206c6f636b656400000000000000000000000000000000006044820152606401610806565b610adf8383836131b8565b6001600160a01b038216612efb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610806565b6000818152600260205260409020546001600160a01b031615612f605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610806565b612f6c60008383612e3b565b6001600160a01b0382166000908152600360205260408120805460019290612f95908490613e8f565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156131ad576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290613068903390899088908890600401613cce565b602060405180830381600087803b15801561308257600080fd5b505af19250505080156130b2575060408051601f3d908101601f191682019092526130af91810190613a6a565b60015b613162573d8080156130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b50805161315a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610806565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612618565b506001949350505050565b6001600160a01b0383166132135761320e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613236565b816001600160a01b0316836001600160a01b031614613236576132368382613270565b6001600160a01b03821661324d57610adf8161330d565b826001600160a01b0316826001600160a01b031614610adf57610adf82826133bc565b6000600161327d8461135c565b6132879190613ebb565b6000838152600760205260409020549091508082146132da576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061331f90600190613ebb565b600083815260096020526040812054600880549394509092849081106133475761334761402c565b9060005260206000200154905080600883815481106133685761336861402c565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806133a0576133a0613ffd565b6001900381819060005260206000200160009055905550505050565b60006133c78361135c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b50805461340c90613efe565b6000825580601f1061341c575050565b601f016020900490600052602060002090810190611c729190613532565b82805461344690613efe565b90600052602060002090601f01602090048101928261346857600085556134ae565b82601f106134815782800160ff198235161785556134ae565b828001600101855582156134ae579182015b828111156134ae578235825591602001919060010190613493565b506134ba929150613532565b5090565b8280546134ca90613efe565b90600052602060002090601f0160209004810192826134ec57600085556134ae565b82601f1061350557805160ff19168380011785556134ae565b828001600101855582156134ae579182015b828111156134ae578251825591602001919060010190613517565b5b808211156134ba5760008155600101613533565b80356001600160a01b038116811461355e57600080fd5b919050565b60008083601f84011261357557600080fd5b50813567ffffffffffffffff81111561358d57600080fd5b6020830191508360208260051b85010111156135a857600080fd5b9250929050565b8035801515811461355e57600080fd5b60008083601f8401126135d157600080fd5b50813567ffffffffffffffff8111156135e957600080fd5b6020830191508360208285010111156135a857600080fd5b60006020828403121561361357600080fd5b61361c82613547565b9392505050565b6000806040838503121561363657600080fd5b61363f83613547565b915061364d60208401613547565b90509250929050565b60008060006060848603121561366b57600080fd5b61367484613547565b925061368260208501613547565b9150604084013590509250925092565b600080600080608085870312156136a857600080fd5b6136b185613547565b93506136bf60208601613547565b925060408501359150606085013567ffffffffffffffff8111156136e257600080fd5b8501601f810187136136f357600080fd5b803561370661370182613e67565b613e36565b81815288602083850101111561371b57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561375057600080fd5b61375983613547565b915061364d602084016135af565b60008060006040848603121561377c57600080fd5b61378584613547565b9250602084013567ffffffffffffffff8111156137a157600080fd5b6137ad868287016135bf565b9497909650939450505050565b600080604083850312156137cd57600080fd5b6137d683613547565b946020939093013593505050565b6000806000806000608086880312156137fc57600080fd5b61380586613547565b945060208601359350604086013567ffffffffffffffff81111561382857600080fd5b613834888289016135bf565b90945092506138479050606087016135af565b90509295509295909350565b60008060006060848603121561386857600080fd5b61387184613547565b95602085013595506040909401359392505050565b6000806000806000806060878903121561389f57600080fd5b863567ffffffffffffffff808211156138b757600080fd5b6138c38a838b01613563565b909850965060208901359150808211156138dc57600080fd5b6138e88a838b01613563565b9096509450604089013591508082111561390157600080fd5b5061390e89828a01613563565b979a9699509497509295939492505050565b6000806020838503121561393357600080fd5b823567ffffffffffffffff81111561394a57600080fd5b61395685828601613563565b90969095509350505050565b6000602080838503121561397557600080fd5b823567ffffffffffffffff8082111561398d57600080fd5b818501915085601f8301126139a157600080fd5b8135818111156139b3576139b361405b565b8060051b91506139c4848301613e36565b8181528481019084860184860187018a10156139df57600080fd5b600095505b83861015613a025780358352600195909501949186019186016139e4565b5098975050505050505050565b600060208284031215613a2157600080fd5b61361c826135af565b60008060408385031215613a3d57600080fd5b8235915061364d60208401613547565b600060208284031215613a5f57600080fd5b813561361c8161408a565b600060208284031215613a7c57600080fd5b815161361c8161408a565b600060208284031215613a9957600080fd5b815167ffffffffffffffff811115613ab057600080fd5b8201601f81018413613ac157600080fd5b8051613acf61370182613e67565b818152856020838501011115613ae457600080fd5b613af5826020830160208601613ed2565b95945050505050565b600060208284031215613b1057600080fd5b5035919050565b60008060408385031215613b2a57600080fd5b8235915061364d602084016135af565b60008060008060608587031215613b5057600080fd5b84359350602085013567ffffffffffffffff811115613b6e57600080fd5b613b7a878288016135bf565b9094509250613b8d9050604086016135af565b905092959194509250565b600080600080600060608688031215613bb057600080fd5b85359450602086013567ffffffffffffffff80821115613bcf57600080fd5b613bdb89838a016135bf565b90965094506040880135915080821115613bf457600080fd5b50613c01888289016135bf565b969995985093965092949392505050565b60008060408385031215613c2557600080fd5b50508035926020909101359150565b60008151808452613c4c816020860160208601613ed2565b601f01601f19169290920160200192915050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60008451613c9d818460208901613ed2565b845190830190613cb1818360208901613ed2565b8451910190613cc4818360208801613ed2565b0195945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ea66080830184613c34565b6020815281602082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613d3957600080fd5b8260051b80856040850137600092016040019182525092915050565b6020808252825182820181905260009190848201906040850190845b81811015613d8d57835183529284019291840191600101613d71565b50909695505050505050565b60208152600061361c6020830184613c34565b604081526000613dbf6040830185613c34565b905082151560208301529392505050565b848152606060208201526000613dea606083018587613c60565b9050821515604083015295945050505050565b858152606060208201526000613e17606083018688613c60565b8281036040840152613e2a818587613c60565b98975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e5f57613e5f61405b565b604052919050565b600067ffffffffffffffff821115613e8157613e8161405b565b50601f01601f191660200190565b60008219821115613ea257613ea2613f9f565b500190565b600082613eb657613eb6613fce565b500490565b600082821015613ecd57613ecd613f9f565b500390565b60005b83811015613eed578181015183820152602001613ed5565b83811115611cfd5750506000910152565b600181811c90821680613f1257607f821691505b60208210811415613f4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f8457613f84613f9f565b5060010190565b600082613f9a57613f9a613fce565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611c7257600080fdfea26469706673582212205befbb51facaa79b5471d91404eb73cd591d52074e3ef151600ee6478b94ce3d64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000608f18d45f82ad45a2fb6213cb4330456e83c39100000000000000000000000000000000000000000000000000000000000000094372656174757265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024687474703a2f2f776f726b2e73756d6d6f6e65726d6574612e73706163652f6d696e742f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000608f18d45f82ad45a2fb6213cb4330456e83c39100000000000000000000000000000000000000000000000000000000000000094372656174757265730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024687474703a2f2f776f726b2e73756d6d6f6e65726d6574612e73706163652f6d696e742f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Creatures
Arg [1] : _symbol (string): CRT
Arg [2] : _tokenBaseURI (string): http://work.summonermeta.space/mint/
Arg [3] : _tokenTailURI (string):
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [7] : 000000000000000000000000608f18d45f82ad45a2fb6213cb4330456e83c391
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [9] : 4372656174757265730000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 4352540000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [13] : 687474703a2f2f776f726b2e73756d6d6f6e65726d6574612e73706163652f6d
Arg [14] : 696e742f00000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
43243:10864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34464:224;;;;;;:::i;:::-;;:::i;:::-;;;14998:14:1;;14991:22;14973:41;;14961:2;14946:18;34464:224:0;;;;;;;;21049:100;;;:::i;:::-;;;;;;;:::i;44217:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22608:221;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13075:55:1;;;13057:74;;13045:2;13030:18;22608:221:0;12911:226:1;51507:576:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22131:411::-;;;;;;:::i;:::-;;:::i;:::-;;42359:436;;;;;;:::i;:::-;;:::i;41083:153::-;;;;;;:::i;:::-;;:::i;53816:286::-;;;;;;:::i;:::-;;:::i;35104:113::-;35192:10;:17;35104:113;;;28399:25:1;;;28387:2;28372:18;35104:113:0;28253:177:1;23358:339:0;;;;;;:::i;:::-;;:::i;43879:43::-;;;;;;:::i;:::-;;:::i;44269:38::-;;;;;;47523:326;;;;;;:::i;:::-;;:::i;34772:256::-;;;;;;:::i;:::-;;:::i;47334:183::-;;;;;;:::i;:::-;;:::i;23768:185::-;;;;;;:::i;:::-;;:::i;47855:187::-;;;;;;:::i;:::-;;:::i;43829:43::-;;;;;;:::i;:::-;;:::i;35294:233::-;;;;;;:::i;:::-;;:::i;40695:29::-;;;;;-1:-1:-1;;;;;40695:29:0;;;20743:239;;;;;;:::i;:::-;;:::i;20473:208::-;;;;;;:::i;:::-;;:::i;45387:601::-;;;;;;:::i;:::-;;:::i;41244:301::-;;;:::i;46643:411::-;;;;;;:::i;:::-;;:::i;40668:20::-;;;;;-1:-1:-1;;;;;40668:20:0;;;44375:37;;44410:2;44375:37;;21218:104;;;:::i;48896:740::-;;;;;;:::i;:::-;;:::i;22901:155::-;;;;;;:::i;:::-;;:::i;50002:393::-;;;;;;:::i;:::-;;:::i;24024:328::-;;;;;;:::i;:::-;;:::i;50699:802::-;;;;;;:::i;:::-;;:::i;44099:61::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;48048:598::-;;;;;;:::i;:::-;;:::i;46179:245::-;;;;;;:::i;:::-;;:::i;44167:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;47060:268;;;;;;:::i;:::-;;:::i;23127:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23248:25:0;;;23224:4;23248:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23127:164;43736:44;;;;;;:::i;:::-;;;;;;;;;;;;;;41778:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;34464:224;34566:4;34590:50;;;34605:35;34590:50;;:90;;;34644:36;34668:11;34644:23;:36::i;:::-;34583:97;34464:224;-1:-1:-1;;34464:224:0:o;21049:100::-;21103:13;21136:5;21129:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21049:100;:::o;22608:221::-;22684:7;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;22704:73;;;;-1:-1:-1;;;22704:73:0;;24171:2:1;22704:73:0;;;24153:21:1;24210:2;24190:18;;;24183:30;24249:34;24229:18;;;24222:62;24320:14;24300:18;;;24293:42;24352:19;;22704:73:0;;;;;;;;;-1:-1:-1;22797:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22797:24:0;;22608:221::o;51507:576::-;51621:13;51661:4;51651:6;:14;;51643:83;;;;-1:-1:-1;;;51643:83:0;;19787:2:1;51643:83:0;;;19769:21:1;19826:2;19806:18;;;19799:30;19865:34;19845:18;;;19838:62;19936:19;19916:18;;;19909:47;19973:19;;51643:83:0;19585:413:1;51643:83:0;51748:28;51764:11;51748:15;:28::i;:::-;51741:4;:35;51733:81;;;;-1:-1:-1;;;51733:81:0;;22630:2:1;51733:81:0;;;22612:21:1;22669:2;22649:18;;;22642:30;22708:28;22688:18;;;22681:56;22754:18;;51733:81:0;22428:350:1;51733:81:0;51823:23;51860:13;51867:6;51860:4;:13;:::i;:::-;:17;;51876:1;51860:17;:::i;:::-;51849:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51849:29:0;-1:-1:-1;51823:55:0;-1:-1:-1;51885:15:0;51924:6;51911:142;51937:4;51932:1;:9;51911:142;;51981:41;52007:11;52020:1;51981:25;:41::i;:::-;51957:9;51967:10;51957:21;;;;;;;;:::i;:::-;;;;;;;;;;:65;52033:12;;;;:::i;:::-;;;;51943:3;;;;;:::i;:::-;;;;51911:142;;;-1:-1:-1;52068:9:0;;51507:576;-1:-1:-1;;;;;51507:576:0:o;22131:411::-;22212:13;22228:23;22243:7;22228:14;:23::i;:::-;22212:39;;22276:5;-1:-1:-1;;;;;22270:11:0;:2;-1:-1:-1;;;;;22270:11:0;;;22262:57;;;;-1:-1:-1;;;22262:57:0;;25703:2:1;22262:57:0;;;25685:21:1;25742:2;25722:18;;;25715:30;25781:34;25761:18;;;25754:62;25852:3;25832:18;;;25825:31;25873:19;;22262:57:0;25501:397:1;22262:57:0;8725:10;-1:-1:-1;;;;;22354:21:0;;;;:62;;-1:-1:-1;22379:37:0;22396:5;8725:10;23127:164;:::i;22379:37::-;22332:168;;;;-1:-1:-1;;;22332:168:0;;20975:2:1;22332:168:0;;;20957:21:1;21014:2;20994:18;;;20987:30;21053:34;21033:18;;;21026:62;21124:26;21104:18;;;21097:54;21168:19;;22332:168:0;20773:420:1;22332:168:0;22513:21;22522:2;22526:7;22513:8;:21::i;:::-;22201:341;22131:411;;:::o;42359:436::-;41605:5;;-1:-1:-1;;;;;41605:5:0;41591:10;:19;41583:92;;;;-1:-1:-1;;;41583:92:0;;23394:2:1;41583:92:0;;;23376:21:1;23433:2;23413:18;;;23406:30;23472:34;23452:18;;;23445:62;23543:17;23523:18;;;23516:45;23578:19;;41583:92:0;23192:411:1;41583:92:0;42538:38;;::::1;:81:::0;::::1;;;-1:-1:-1::0;42580:39:0;;::::1;42538:81;42530:126;;;::::0;-1:-1:-1;;;42530:126:0;;25349:2:1;42530:126:0::1;::::0;::::1;25331:21:1::0;25388:2;25368:18;;;25361:30;25427:27;25407:18;;;25400:55;25472:18;;42530:126:0::1;25147:349:1::0;42530:126:0::1;42669:6;42665:125;42681:17:::0;;::::1;42665:125;;;42714:68;42733:6;;42740:1;42733:9;;;;;;;:::i;:::-;;;;;;;42744:14;;42759:1;42744:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42763:15;;42779:1;42763:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42714;:68::i;:::-;42700:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42665:125;;;;42359:436:::0;;;;;;:::o;41083:153::-;41605:5;;-1:-1:-1;;;;;41605:5:0;41591:10;:19;41583:92;;;;-1:-1:-1;;;41583:92:0;;23394:2:1;41583:92:0;;;23376:21:1;23433:2;23413:18;;;23406:30;23472:34;23452:18;;;23445:62;23543:17;23523:18;;;23516:45;23578:19;;41583:92:0;23192:411:1;41583:92:0;41165:14:::1;:23:::0;;;::::1;-1:-1:-1::0;;;;;41165:23:0;::::1;::::0;;::::1;::::0;;;41206:22:::1;::::0;::::1;::::0;-1:-1:-1;;41206:22:0::1;41083:153:::0;:::o;53816:286::-;53893:12;54078:17;54087:7;54078:8;:17::i;:::-;54067:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;54060:36;;53816:286;;;:::o;23358:339::-;23553:41;8725:10;23586:7;23553:18;:41::i;:::-;23545:103;;;;-1:-1:-1;;;23545:103:0;;26861:2:1;23545:103:0;;;26843:21:1;26900:2;26880:18;;;26873:30;26939:34;26919:18;;;26912:62;27010:19;26990:18;;;26983:47;27047:19;;23545:103:0;26659:413:1;23545:103:0;23661:28;23671:4;23677:2;23681:7;23661:9;:28::i;43879:43::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47523:326::-;47683:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;47670:11:0;12851:12:1;;;12844:28;;;47670:11:0;47683:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;;47702:20:::1;47708:3;47713:8;47702:5;:20::i;:::-;47731:53;47754:8;47764:4;;47770:13;47731:22;:53::i;:::-;-1:-1:-1::0;;47821:22:0::1;::::0;47793:25:::1;::::0;;;:15:::1;:25;::::0;;;;;:50;;;;-1:-1:-1;;;;47523:326:0:o;34772:256::-;34869:7;34905:23;34922:5;34905:16;:23::i;:::-;34897:5;:31;34889:87;;;;-1:-1:-1;;;34889:87:0;;17840:2:1;34889:87:0;;;17822:21:1;17879:2;17859:18;;;17852:30;17918:34;17898:18;;;17891:62;17989:13;17969:18;;;17962:41;18020:19;;34889:87:0;17638:407:1;34889:87:0;-1:-1:-1;;;;;;34994:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34772:256::o;47334:183::-;47413:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;47400:11:0;12851:12:1;;;12844:28;;;47400:11:0;47413:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;;47432:20:::1;47438:3;47443:8;47432:5;:20::i;:::-;-1:-1:-1::0;;47489:22:0::1;::::0;47461:25:::1;::::0;;;:15:::1;:25;::::0;;;;;:50;-1:-1:-1;47334:183:0:o;23768:185::-;23906:39;23923:4;23929:2;23933:7;23906:39;;;;;;;;;;;;:16;:39::i;47855:187::-;47921:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;47908:11:0;12851:12:1;;;12844:28;;;47908:11:0;47921:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;;47940:15:::1;47946:8;47940:5;:15::i;:::-;47969:28;::::0;;;:18:::1;:28;::::0;;;;;47962:35:::1;47969:28:::0;;47962:35:::1;:::i;:::-;-1:-1:-1::0;47962:35:0::1;;::::0;;-1:-1:-1;;47962:35:0::1;::::0;;-1:-1:-1;;47962:35:0::1;48011:25:::0;;;:15:::1;:25;::::0;;;;48004:32;47855:187::o;43829:43::-;;;;;;;;;;;;;;;;:::i;35294:233::-;35369:7;35405:30;35192:10;:17;;35104:113;35405:30;35397:5;:38;35389:95;;;;-1:-1:-1;;;35389:95:0;;27632:2:1;35389:95:0;;;27614:21:1;27671:2;27651:18;;;27644:30;27710:34;27690:18;;;27683:62;27781:14;27761:18;;;27754:42;27813:19;;35389:95:0;27430:408:1;35389:95:0;35502:10;35513:5;35502:17;;;;;;;;:::i;:::-;;;;;;;;;35495:24;;35294:233;;;:::o;20743:239::-;20815:7;20851:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20851:16:0;20886:19;20878:73;;;;-1:-1:-1;;;20878:73:0;;22220:2:1;20878:73:0;;;22202:21:1;22259:2;22239:18;;;22232:30;22298:34;22278:18;;;22271:62;22369:11;22349:18;;;22342:39;22398:19;;20878:73:0;22018:405:1;20473:208:0;20545:7;-1:-1:-1;;;;;20573:19:0;;20565:74;;;;-1:-1:-1;;;20565:74:0;;21809:2:1;20565:74:0;;;21791:21:1;21848:2;21828:18;;;21821:30;21887:34;21867:18;;;21860:62;21958:12;21938:18;;;21931:40;21988:19;;20565:74:0;21607:406:1;20565:74:0;-1:-1:-1;;;;;;20657:16:0;;;;;:9;:16;;;;;;;20473:208::o;45387:601::-;45547:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;45529:16:0;12851:12:1;;;12844:28;;;45529:16:0;45547:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;;45588:1:::1;45574:11;:15;45566:59;;;::::0;-1:-1:-1;;;45566:59:0;;27279:2:1;45566:59:0::1;::::0;::::1;27261:21:1::0;27318:2;27298:18;;;27291:30;27357:26;27337:18;;;27330:54;27401:18;;45566:59:0::1;27077:348:1::0;45566:59:0::1;45745:31:::0;45737:75:::1;;;::::0;-1:-1:-1;;;45737:75:0;;16361:2:1;45737:75:0::1;::::0;::::1;16343:21:1::0;16400:2;16380:18;;;16373:30;16439:26;16419:18;;;16412:54;16483:18;;45737:75:0::1;16159:348:1::0;45737:75:0::1;45821:22;:36:::0;;;45866:42:::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;45879:13;;;;;;45866:42;::::1;45879:13:::0;;;;45866:42;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;45866:42:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;45894:13:0;;-1:-1:-1;45894:13:0;;;;45866:42;::::1;45894:13:::0;;;;45866:42;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;45866:12:0::1;::::0;-1:-1:-1;;;45866:42:0:i:1;:::-;45922:60;45940:11;45953:13;;45968;;45922:60;;;;;;;;;;:::i;:::-;;;;;;;;45387:601:::0;;;;;;;:::o;41244:301::-;41318:14;;-1:-1:-1;;;;;41318:14:0;41304:10;:28;41296:107;;;;-1:-1:-1;;;41296:107:0;;17058:2:1;41296:107:0;;;17040:21:1;17097:2;17077:18;;;17070:30;17136:34;17116:18;;;17109:62;17207:23;17187:18;;;17180:51;17248:19;;41296:107:0;16856:417:1;41296:107:0;41449:14;;41442:5;;41421:43;;-1:-1:-1;;;;;41449:14:0;;;;41442:5;;;;41421:43;;41449:14;;41421:43;41485:14;;;41477:5;:22;;;;;;-1:-1:-1;;;;;41485:14:0;;41477:22;;;;41510:27;;;41244:301::o;46643:411::-;46746:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;46728:16:0;12851:12:1;;;12844:28;;;46728:16:0;46746:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;-1:-1:-1;25927:4:0;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;46765:78:::1;;;::::0;-1:-1:-1;;;46765:78:0;;28045:2:1;46765:78:0::1;::::0;::::1;28027:21:1::0;28084:2;28064:18;;;28057:30;28123:34;28103:18;;;28096:62;28194:11;28174:18;;;28167:39;28223:19;;46765:78:0::1;27843:405:1::0;46765:78:0::1;46900:1;46864:25:::0;;;:12:::1;:25;::::0;;;;46858:39;;::::1;::::0;::::1;:::i;:::-;;;:43;46850:91;;;::::0;-1:-1:-1;;;46850:91:0;;20205:2:1;46850:91:0::1;::::0;::::1;20187:21:1::0;20244:2;20224:18;;;20217:30;20283;20263:18;;;20256:58;20331:18;;46850:91:0::1;20003:352:1::0;46850:91:0::1;46950:25;::::0;;;:15:::1;:25;::::0;;;;;;;;:39;;;47003:45;;29789:25:1;;;29830:18;;;29823:34;;;47003:45:0::1;::::0;29762:18:1;47003:45:0::1;;;;;;;;46643:411:::0;;;;:::o;21218:104::-;21274:13;21307:7;21300:14;;;;;:::i;48896:740::-;48984:8;44410:2;49014:21;;;49006:74;;;;-1:-1:-1;;;49006:74:0;;22985:2:1;49006:74:0;;;22967:21:1;23024:2;23004:18;;;22997:30;23063:34;23043:18;;;23036:62;23134:10;23114:18;;;23107:38;23162:19;;49006:74:0;22783:404:1;49006:74:0;49172:9;49167:274;49187:6;49183:1;:10;49167:274;;;49209:15;49227:8;;49236:1;49227:11;;;;;;;:::i;:::-;;;;;;;49209:29;;49273:16;49281:7;49273;:16::i;:::-;-1:-1:-1;;;;;49257:32:0;8725:10;-1:-1:-1;;;;;49257:32:0;;49360:7;49298:70;;;;;;;12423:34:1;12411:47;;12488:11;12483:2;12474:12;;12467:33;12525:2;12516:12;;12509:28;;;;12562:2;12553:12;;12181:390;49298:70:0;;;;;;;;;;;;;49249:121;;;;;-1:-1:-1;;;49249:121:0;;;;;;;;:::i;:::-;-1:-1:-1;49379:24:0;;;;:15;:24;;;;;:31;;-1:-1:-1;;49379:31:0;49406:4;49379:31;;;49419:14;49395:7;49419:5;:14::i;:::-;-1:-1:-1;49195:3:0;;;;:::i;:::-;;;;49167:274;;;-1:-1:-1;8725:10:0;-1:-1:-1;;;;;49592:38:0;;49621:8;;49592:38;;;;;;;:::i;:::-;;;;;;;;48960:676;48896:740;;:::o;22901:155::-;22996:52;8725:10;23029:8;23039;22996:18;:52::i;:::-;22901:155;;:::o;50002:393::-;50092:16;50100:7;50092;:16::i;:::-;-1:-1:-1;;;;;50076:32:0;8725:10;-1:-1:-1;;;;;50076:32:0;;50068:85;;;;-1:-1:-1;;;50068:85:0;;21400:2:1;50068:85:0;;;21382:21:1;21439:2;21419:18;;;21412:30;21478:34;21458:18;;;21451:62;21549:10;21529:18;;;21522:38;21577:19;;50068:85:0;21198:404:1;50068:85:0;50160:24;;;;:15;:24;;;;;:31;;-1:-1:-1;;50160:31:0;50187:4;50160:31;;;50176:7;;50293:16;50176:7;50293;:16::i;:::-;-1:-1:-1;;;;;50272:94:0;;50332:4;-1:-1:-1;;;;;50332:24:0;;50357:7;50332:33;;;;;;;;;;;;;28399:25:1;;28387:2;28372:18;;28253:177;50332:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50332:33:0;;;;;;;;;;;;:::i;:::-;50272:94;;;;;;:::i;:::-;;;;;;;;50375:14;50381:7;50375:5;:14::i;:::-;50002:393;:::o;24024:328::-;24199:41;8725:10;24232:7;24199:18;:41::i;:::-;24191:103;;;;-1:-1:-1;;;24191:103:0;;26861:2:1;24191:103:0;;;26843:21:1;26900:2;26880:18;;;26873:30;26939:34;26919:18;;;26912:62;27010:19;26990:18;;;26983:47;27047:19;;24191:103:0;26659:413:1;24191:103:0;24305:39;24319:4;24325:2;24329:7;24338:5;24305:13;:39::i;:::-;24024:328;;;;:::o;50699:802::-;25927:4;25951:16;;;:7;:16;;;;;;50776:13;;-1:-1:-1;;;;;25951:16:0;50798:68;;;;-1:-1:-1;;;50798:68:0;;17480:2:1;50798:68:0;;;17462:21:1;17519:2;17499:18;;;17492:30;17558:33;17538:18;;;17531:61;17609:18;;50798:68:0;17278:355:1;50798:68:0;50875:39;50917:28;;;:18;:28;;;;;;50875:70;;;;;;;;;;;;50917:28;;50875:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50875:70:0;;;-1:-1:-1;;50875:70:0;;;;;;;;;;;;;;;50957:23;;;50875:70;;-1:-1:-1;50954:69:0;;;50998:17;;50699:802;-1:-1:-1;;50699:802:0:o;50954:69::-;51032:21;51055;51080;51092:8;51080:11;:21::i;:::-;51240:17;;51234:31;51031:70;;-1:-1:-1;51031:70:0;-1:-1:-1;51204:27:0;;51234:36;:78;;51295:17;;51234:78;;;51273:19;:8;:17;:19::i;:::-;51204:108;;51429:1;51411:7;51405:21;:25;:90;;;;;;;;;;;;;;;;;51457:7;51466:13;51481:7;51440:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51405:90;51398:97;50699:802;-1:-1:-1;;;;;;50699:802:0:o;44099:61::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44099:61:0;;;;;;;-1:-1:-1;;44099:61:0;;;:::o;48048:598::-;48145:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;48131:12:0;12851::1;;;12844:28;;;48131:12:0;48145:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;-1:-1:-1;48213:2:0::1;48191:24:::0;::::1;48187:454;;;48226:15;48244:34;::::0;;::::1;48255:11:::0;48244:34:::1;:::i;:::-;48314:5;48287:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;48287:32:0::1;::::0;;48226:52;-1:-1:-1;48328:20:0::1;48334:4:::0;48226:52;48328:5:::1;:20::i;:::-;48217:163;48187:454;;;48395:25;48423:36;::::0;;::::1;48434:11:::0;48423:36:::1;:::i;:::-;48485:15:::0;;48395:64;;-1:-1:-1;48468:14:0::1;48509:125;48529:6;48525:1;:10;48509:125;;;48584:5;48553:15;:28;48569:8;48578:1;48569:11;;;;;;;;:::i;:::-;;;;;;;48553:28;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48600:24;48606:4;48612:8;48621:1;48612:11;;;;;;;;:::i;:::-;;;;;;;48600:5;:24::i;:::-;48537:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48509:125;;;;48386:255;;48187:454;48048:598:::0;;;;;:::o;46179:245::-;46336:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;46318:16:0;12851:12:1;;;12844:28;;;46318:16:0;46336:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;;46355:63:::1;46378:8;46388:17;;46407:10;46355:22;:63::i;:::-;46179:245:::0;;;;;;:::o;47060:268::-;47146:10;43103:12;:22;;;:12;;:22;;;:12;:22;;;;;43141:41;;12818:16:1;43141:41:0;;;12806:29:1;;;;47133:11:0;12851:12:1;;;12844:28;;;47133:11:0;47146:10;43103:22;;;12888:12:1;;43141:41:0;;;;;;;;;;;;43095:89;;;;;-1:-1:-1;;;43095:89:0;;;;;;;;:::i;:::-;-1:-1:-1;25927:4:0;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;47165:63:::1;;;::::0;-1:-1:-1;;;47165:63:0;;24994:2:1;47165:63:0::1;::::0;::::1;24976:21:1::0;25033:2;25013:18;;;25006:30;25072:28;25052:18;;;25045:56;25118:18;;47165:63:0::1;24792:350:1::0;47165:63:0::1;47237:24;::::0;;;:14:::1;:24;::::0;;;;;;;;:32;;-1:-1:-1;;47237:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;47283:39;;28603:25:1;;;28644:18;;;28637:50;47283:39:0::1;::::0;28576:18:1;47283:39:0::1;28435:258:1::0;20104:305:0;20206:4;20243:40;;;20258:25;20243:40;;:105;;-1:-1:-1;20300:48:0;;;20315:33;20300:48;20243:105;:158;;;-1:-1:-1;12512:25:0;12497:40;;;;20365:36;12388:157;29844:174;29919:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;29919:29:0;;;;;;;;:24;;29973:23;29919:24;29973:14;:23::i;:::-;-1:-1:-1;;;;;29964:46:0;;;;;;;;;;;29844:174;;:::o;42801:230::-;42919:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;42919:22:0;;;;;;;;;;;;:39;;-1:-1:-1;;42919:39:0;;;;;;;;;;42972:53;;15221:25:1;;;15262:18;;;15255:83;;;;15354:18;;15347:50;;;;42972:53:0;;15209:2:1;15194:18;42972:53:0;;;;;;;42801:230;;;:::o;26156:348::-;26249:4;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;26266:73;;;;-1:-1:-1;;;26266:73:0;;20562:2:1;26266:73:0;;;20544:21:1;20601:2;20581:18;;;20574:30;20640:34;20620:18;;;20613:62;20711:14;20691:18;;;20684:42;20743:19;;26266:73:0;20360:408:1;26266:73:0;26350:13;26366:23;26381:7;26366:14;:23::i;:::-;26350:39;;26419:5;-1:-1:-1;;;;;26408:16:0;:7;-1:-1:-1;;;;;26408:16:0;;:51;;;;26452:7;-1:-1:-1;;;;;26428:31:0;:20;26440:7;26428:11;:20::i;:::-;-1:-1:-1;;;;;26428:31:0;;26408:51;:87;;;-1:-1:-1;;;;;;23248:25:0;;;23224:4;23248:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26463:32;26400:96;26156:348;-1:-1:-1;;;;26156:348:0:o;29148:578::-;29307:4;-1:-1:-1;;;;;29280:31:0;:23;29295:7;29280:14;:23::i;:::-;-1:-1:-1;;;;;29280:31:0;;29272:85;;;;-1:-1:-1;;;29272:85:0;;24584:2:1;29272:85:0;;;24566:21:1;24623:2;24603:18;;;24596:30;24662:34;24642:18;;;24635:62;24733:11;24713:18;;;24706:39;24762:19;;29272:85:0;24382:405:1;29272:85:0;-1:-1:-1;;;;;29376:16:0;;29368:65;;;;-1:-1:-1;;;29368:65:0;;19028:2:1;29368:65:0;;;19010:21:1;19067:2;19047:18;;;19040:30;19106:34;19086:18;;;19079:62;19177:6;19157:18;;;19150:34;19201:19;;29368:65:0;18826:400:1;29368:65:0;29446:39;29467:4;29473:2;29477:7;29446:20;:39::i;:::-;29550:29;29567:1;29571:7;29550:8;:29::i;:::-;-1:-1:-1;;;;;29592:15:0;;;;;;:9;:15;;;;;:20;;29611:1;;29592:15;:20;;29611:1;;29592:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29623:13:0;;;;;;:9;:13;;;;;:18;;29640:1;;29623:13;:18;;29640:1;;29623:18;:::i;:::-;;;;-1:-1:-1;;29652:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;29652:21:0;;;;;;;;;29691:27;;29652:16;;29691:27;;;;;;;29148:578;;;:::o;52970:170::-;53049:13;53041:58;;;;-1:-1:-1;;;53041:58:0;;26105:2:1;53041:58:0;;;26087:21:1;26144:2;26124:18;;;26117:30;26183:27;26163:18;;;26156:55;26228:18;;53041:58:0;25903:349:1;53041:58:0;53108:26;53120:3;53125:8;53108:11;:26::i;52335:405::-;25927:4;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;52470:70;;;;-1:-1:-1;;;52470:70:0;;26459:2:1;52470:70:0;;;26441:21:1;26498:2;26478:18;;;26471:30;26537:34;26517:18;;;26510:62;26608:3;26588:18;;;26581:31;26629:19;;52470:70:0;26257:397:1;52470:70:0;52549:28;;;;:18;:28;;;;;:52;;52584:17;;52549:52;:::i;:::-;-1:-1:-1;52608:28:0;;;;:18;:28;;;;;;;:38;;:51;;-1:-1:-1;;52608:51:0;;;;;;;52673:61;;;;;52608:28;;52704:17;;;;52608:51;;52673:61;:::i;28451:360::-;28511:13;28527:23;28542:7;28527:14;:23::i;:::-;28511:39;;28563:48;28584:5;28599:1;28603:7;28563:20;:48::i;:::-;28652:29;28669:1;28673:7;28652:8;:29::i;:::-;-1:-1:-1;;;;;28694:16:0;;;;;;:9;:16;;;;;:21;;28714:1;;28694:16;:21;;28714:1;;28694:21;:::i;:::-;;;;-1:-1:-1;;28733:16:0;;;;:7;:16;;;;;;28726:23;;;;;;28767:36;28741:7;;28733:16;-1:-1:-1;;;;;28767:36:0;;;;;28733:16;;28767:36;28500:311;28451:360;:::o;52113:216::-;52225:22;;52212:36;;;;:12;:36;;;;;;;;:52;;;;;;;;:::i;:::-;-1:-1:-1;52284:22:0;;52271:36;;;;:12;:36;;;;;;;;:52;;;;;;;;:::i;30160:315::-;30315:8;-1:-1:-1;;;;;30306:17:0;:5;-1:-1:-1;;;;;30306:17:0;;;30298:55;;;;-1:-1:-1;;;30298:55:0;;19433:2:1;30298:55:0;;;19415:21:1;19472:2;19452:18;;;19445:30;19511:27;19491:18;;;19484:55;19556:18;;30298:55:0;19231:349:1;30298:55:0;-1:-1:-1;;;;;30364:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;30364:46:0;;;;;;;;;;30426:41;;14973::1;;;30426::0;;14946:18:1;30426:41:0;;;;;;;30160:315;;;:::o;25234:::-;25391:28;25401:4;25407:2;25411:7;25391:9;:28::i;:::-;25438:48;25461:4;25467:2;25471:7;25480:5;25438:22;:48::i;:::-;25430:111;;;;-1:-1:-1;;;25430:111:0;;18252:2:1;25430:111:0;;;18234:21:1;18291:2;18271:18;;;18264:30;18330:34;18310:18;;;18303:62;18401:20;18381:18;;;18374:48;18439:19;;25430:111:0;18050:414:1;52746:218:0;52847:15;52865:25;;;:15;:25;;;;;;;;;52907:24;;;:12;:24;;;;;52933:12;:24;;;;;52899:59;;52810:13;;;;52865:25;;52907:24;;;;52899:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52746:218;;;:::o;9117:723::-;9173:13;9394:10;9390:53;;-1:-1:-1;;9421:10:0;;;;;;;;;;;;;;;;;;9117:723::o;9390:53::-;9468:5;9453:12;9509:78;9516:9;;9509:78;;9542:8;;;;:::i;:::-;;-1:-1:-1;9565:10:0;;-1:-1:-1;9573:2:0;9565:10;;:::i;:::-;;;9509:78;;;9597:19;9629:6;9619:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9619:17:0;;9597:39;;9647:154;9654:10;;9647:154;;9681:11;9691:1;9681:11;;:::i;:::-;;-1:-1:-1;9750:10:0;9758:2;9750:5;:10;:::i;:::-;9737:24;;:2;:24;:::i;:::-;9724:39;;9707:6;9714;9707:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;9778:11:0;9787:2;9778:11;;:::i;:::-;;;9647:154;;53146:244;53276:24;;;;:14;:24;;;;;;;;53275:25;53267:60;;;;-1:-1:-1;;;53267:60:0;;16714:2:1;53267:60:0;;;16696:21:1;16753:2;16733:18;;;16726:30;16792:17;16772:18;;;16765:45;16827:18;;53267:60:0;16512:339:1;53267:60:0;53336:48;53363:5;53370:3;53375:8;53336:26;:48::i;27840:382::-;-1:-1:-1;;;;;27920:16:0;;27912:61;;;;-1:-1:-1;;;27912:61:0;;23810:2:1;27912:61:0;;;23792:21:1;;;23829:18;;;23822:30;23888:34;23868:18;;;23861:62;23940:18;;27912:61:0;23608:356:1;27912:61:0;25927:4;25951:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25951:16:0;:30;27984:58;;;;-1:-1:-1;;;27984:58:0;;18671:2:1;27984:58:0;;;18653:21:1;18710:2;18690:18;;;18683:30;18749;18729:18;;;18722:58;18797:18;;27984:58:0;18469:352:1;27984:58:0;28055:45;28084:1;28088:2;28092:7;28055:20;:45::i;:::-;-1:-1:-1;;;;;28113:13:0;;;;;;:9;:13;;;;;:18;;28130:1;;28113:13;:18;;28130:1;;28113:18;:::i;:::-;;;;-1:-1:-1;;28142:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;28142:21:0;;;;;;;;28181:33;;28142:16;;;28181:33;;28142:16;;28181:33;27840:382;;:::o;31040:799::-;31195:4;-1:-1:-1;;;;;31216:13:0;;1065:20;1113:8;31212:620;;31252:72;;;;;-1:-1:-1;;;;;31252:36:0;;;;;:72;;8725:10;;31303:4;;31309:7;;31318:5;;31252:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31252:72:0;;;;;;;;-1:-1:-1;;31252:72:0;;;;;;;;;;;;:::i;:::-;;;31248:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31494:13:0;;31490:272;;31537:60;;-1:-1:-1;;;31537:60:0;;18252:2:1;31537:60:0;;;18234:21:1;18291:2;18271:18;;;18264:30;18330:34;18310:18;;;18303:62;18401:20;18381:18;;;18374:48;18439:19;;31537:60:0;18050:414:1;31490:272:0;31712:6;31706:13;31697:6;31693:2;31689:15;31682:38;31248:529;31375:51;;31385:41;31375:51;;-1:-1:-1;31368:58:0;;31212:620;-1:-1:-1;31816:4:0;31040:799;;;;;;:::o;36140:589::-;-1:-1:-1;;;;;36346:18:0;;36342:187;;36381:40;36413:7;37556:10;:17;;37529:24;;;;:15;:24;;;;;:44;;;37584:24;;;;;;;;;;;;37452:164;36381:40;36342:187;;;36451:2;-1:-1:-1;;;;;36443:10:0;:4;-1:-1:-1;;;;;36443:10:0;;36439:90;;36470:47;36503:4;36509:7;36470:32;:47::i;:::-;-1:-1:-1;;;;;36543:16:0;;36539:183;;36576:45;36613:7;36576:36;:45::i;36539:183::-;36649:4;-1:-1:-1;;;;;36643:10:0;:2;-1:-1:-1;;;;;36643:10:0;;36639:83;;36670:40;36698:2;36702:7;36670:27;:40::i;38243:988::-;38509:22;38559:1;38534:22;38551:4;38534:16;:22::i;:::-;:26;;;;:::i;:::-;38571:18;38592:26;;;:17;:26;;;;;;38509:51;;-1:-1:-1;38725:28:0;;;38721:328;;-1:-1:-1;;;;;38792:18:0;;38770:19;38792:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38843:30;;;;;;:44;;;38960:30;;:17;:30;;;;;:43;;;38721:328;-1:-1:-1;39145:26:0;;;;:17;:26;;;;;;;;39138:33;;;-1:-1:-1;;;;;39189:18:0;;;;;:12;:18;;;;;:34;;;;;;;39182:41;38243:988::o;39526:1079::-;39804:10;:17;39779:22;;39804:21;;39824:1;;39804:21;:::i;:::-;39836:18;39857:24;;;:15;:24;;;;;;40230:10;:26;;39779:46;;-1:-1:-1;39857:24:0;;39779:46;;40230:26;;;;;;:::i;:::-;;;;;;;;;40208:48;;40294:11;40269:10;40280;40269:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40374:28;;;:15;:28;;;;;;;:41;;;40546:24;;;;;40539:31;40581:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39597:1008;;;39526:1079;:::o;37030:221::-;37115:14;37132:20;37149:2;37132:16;:20::i;:::-;-1:-1:-1;;;;;37163:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37208:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37030:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:367::-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:55;;360:1;357;350:12;309:55;-1:-1:-1;383:20:1;;426:18;415:30;;412:50;;;458:1;455;448:12;412:50;495:4;487:6;483:17;471:29;;555:3;548:4;538:6;535:1;531:14;523:6;519:27;515:38;512:47;509:67;;;572:1;569;562:12;509:67;215:367;;;;;:::o;587:160::-;652:20;;708:13;;701:21;691:32;;681:60;;737:1;734;727:12;752:347;803:8;813:6;867:3;860:4;852:6;848:17;844:27;834:55;;885:1;882;875:12;834:55;-1:-1:-1;908:20:1;;951:18;940:30;;937:50;;;983:1;980;973:12;937:50;1020:4;1012:6;1008:17;996:29;;1072:3;1065:4;1056:6;1048;1044:19;1040:30;1037:39;1034:59;;;1089:1;1086;1079:12;1104:186;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1255:29;1274:9;1255:29;:::i;:::-;1245:39;1104:186;-1:-1:-1;;;1104:186:1:o;1295:260::-;1363:6;1371;1424:2;1412:9;1403:7;1399:23;1395:32;1392:52;;;1440:1;1437;1430:12;1392:52;1463:29;1482:9;1463:29;:::i;:::-;1453:39;;1511:38;1545:2;1534:9;1530:18;1511:38;:::i;:::-;1501:48;;1295:260;;;;;:::o;1560:328::-;1637:6;1645;1653;1706:2;1694:9;1685:7;1681:23;1677:32;1674:52;;;1722:1;1719;1712:12;1674:52;1745:29;1764:9;1745:29;:::i;:::-;1735:39;;1793:38;1827:2;1816:9;1812:18;1793:38;:::i;:::-;1783:48;;1878:2;1867:9;1863:18;1850:32;1840:42;;1560:328;;;;;:::o;1893:888::-;1988:6;1996;2004;2012;2065:3;2053:9;2044:7;2040:23;2036:33;2033:53;;;2082:1;2079;2072:12;2033:53;2105:29;2124:9;2105:29;:::i;:::-;2095:39;;2153:38;2187:2;2176:9;2172:18;2153:38;:::i;:::-;2143:48;;2238:2;2227:9;2223:18;2210:32;2200:42;;2293:2;2282:9;2278:18;2265:32;2320:18;2312:6;2309:30;2306:50;;;2352:1;2349;2342:12;2306:50;2375:22;;2428:4;2420:13;;2416:27;-1:-1:-1;2406:55:1;;2457:1;2454;2447:12;2406:55;2493:2;2480:16;2518:48;2534:31;2562:2;2534:31;:::i;:::-;2518:48;:::i;:::-;2589:2;2582:5;2575:17;2629:7;2624:2;2619;2615;2611:11;2607:20;2604:33;2601:53;;;2650:1;2647;2640:12;2601:53;2705:2;2700;2696;2692:11;2687:2;2680:5;2676:14;2663:45;2749:1;2744:2;2739;2732:5;2728:14;2724:23;2717:34;2770:5;2760:15;;;;;1893:888;;;;;;;:::o;2786:254::-;2851:6;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2951:29;2970:9;2951:29;:::i;:::-;2941:39;;2999:35;3030:2;3019:9;3015:18;2999:35;:::i;3045:483::-;3124:6;3132;3140;3193:2;3181:9;3172:7;3168:23;3164:32;3161:52;;;3209:1;3206;3199:12;3161:52;3232:29;3251:9;3232:29;:::i;:::-;3222:39;;3312:2;3301:9;3297:18;3284:32;3339:18;3331:6;3328:30;3325:50;;;3371:1;3368;3361:12;3325:50;3410:58;3460:7;3451:6;3440:9;3436:22;3410:58;:::i;:::-;3045:483;;3487:8;;-1:-1:-1;3384:84:1;;-1:-1:-1;;;;3045:483:1:o;3533:254::-;3601:6;3609;3662:2;3650:9;3641:7;3637:23;3633:32;3630:52;;;3678:1;3675;3668:12;3630:52;3701:29;3720:9;3701:29;:::i;:::-;3691:39;3777:2;3762:18;;;;3749:32;;-1:-1:-1;;;3533:254:1:o;3792:621::-;3887:6;3895;3903;3911;3919;3972:3;3960:9;3951:7;3947:23;3943:33;3940:53;;;3989:1;3986;3979:12;3940:53;4012:29;4031:9;4012:29;:::i;:::-;4002:39;;4088:2;4077:9;4073:18;4060:32;4050:42;;4143:2;4132:9;4128:18;4115:32;4170:18;4162:6;4159:30;4156:50;;;4202:1;4199;4192:12;4156:50;4241:58;4291:7;4282:6;4271:9;4267:22;4241:58;:::i;:::-;4318:8;;-1:-1:-1;4215:84:1;-1:-1:-1;4372:35:1;;-1:-1:-1;4403:2:1;4388:18;;4372:35;:::i;:::-;4362:45;;3792:621;;;;;;;;:::o;4418:322::-;4495:6;4503;4511;4564:2;4552:9;4543:7;4539:23;4535:32;4532:52;;;4580:1;4577;4570:12;4532:52;4603:29;4622:9;4603:29;:::i;:::-;4593:39;4679:2;4664:18;;4651:32;;-1:-1:-1;4730:2:1;4715:18;;;4702:32;;4418:322;-1:-1:-1;;;4418:322:1:o;4745:1085::-;4900:6;4908;4916;4924;4932;4940;4993:2;4981:9;4972:7;4968:23;4964:32;4961:52;;;5009:1;5006;4999:12;4961:52;5049:9;5036:23;5078:18;5119:2;5111:6;5108:14;5105:34;;;5135:1;5132;5125:12;5105:34;5174:70;5236:7;5227:6;5216:9;5212:22;5174:70;:::i;:::-;5263:8;;-1:-1:-1;5148:96:1;-1:-1:-1;5351:2:1;5336:18;;5323:32;;-1:-1:-1;5367:16:1;;;5364:36;;;5396:1;5393;5386:12;5364:36;5435:72;5499:7;5488:8;5477:9;5473:24;5435:72;:::i;:::-;5526:8;;-1:-1:-1;5409:98:1;-1:-1:-1;5614:2:1;5599:18;;5586:32;;-1:-1:-1;5630:16:1;;;5627:36;;;5659:1;5656;5649:12;5627:36;;5698:72;5762:7;5751:8;5740:9;5736:24;5698:72;:::i;:::-;4745:1085;;;;-1:-1:-1;4745:1085:1;;-1:-1:-1;4745:1085:1;;5789:8;;4745:1085;-1:-1:-1;;;4745:1085:1:o;5835:437::-;5921:6;5929;5982:2;5970:9;5961:7;5957:23;5953:32;5950:52;;;5998:1;5995;5988:12;5950:52;6038:9;6025:23;6071:18;6063:6;6060:30;6057:50;;;6103:1;6100;6093:12;6057:50;6142:70;6204:7;6195:6;6184:9;6180:22;6142:70;:::i;:::-;6231:8;;6116:96;;-1:-1:-1;5835:437:1;-1:-1:-1;;;;5835:437:1:o;6277:957::-;6361:6;6392:2;6435;6423:9;6414:7;6410:23;6406:32;6403:52;;;6451:1;6448;6441:12;6403:52;6491:9;6478:23;6520:18;6561:2;6553:6;6550:14;6547:34;;;6577:1;6574;6567:12;6547:34;6615:6;6604:9;6600:22;6590:32;;6660:7;6653:4;6649:2;6645:13;6641:27;6631:55;;6682:1;6679;6672:12;6631:55;6718:2;6705:16;6740:2;6736;6733:10;6730:36;;;6746:18;;:::i;:::-;6792:2;6789:1;6785:10;6775:20;;6815:28;6839:2;6835;6831:11;6815:28;:::i;:::-;6877:15;;;6908:12;;;;6940:11;;;6970;;;6966:20;;6963:33;-1:-1:-1;6960:53:1;;;7009:1;7006;6999:12;6960:53;7031:1;7022:10;;7041:163;7055:2;7052:1;7049:9;7041:163;;;7112:17;;7100:30;;7073:1;7066:9;;;;;7150:12;;;;7182;;7041:163;;;-1:-1:-1;7223:5:1;6277:957;-1:-1:-1;;;;;;;;6277:957:1:o;7239:180::-;7295:6;7348:2;7336:9;7327:7;7323:23;7319:32;7316:52;;;7364:1;7361;7354:12;7316:52;7387:26;7403:9;7387:26;:::i;7424:254::-;7492:6;7500;7553:2;7541:9;7532:7;7528:23;7524:32;7521:52;;;7569:1;7566;7559:12;7521:52;7605:9;7592:23;7582:33;;7634:38;7668:2;7657:9;7653:18;7634:38;:::i;7683:245::-;7741:6;7794:2;7782:9;7773:7;7769:23;7765:32;7762:52;;;7810:1;7807;7800:12;7762:52;7849:9;7836:23;7868:30;7892:5;7868:30;:::i;7933:249::-;8002:6;8055:2;8043:9;8034:7;8030:23;8026:32;8023:52;;;8071:1;8068;8061:12;8023:52;8103:9;8097:16;8122:30;8146:5;8122:30;:::i;8187:634::-;8266:6;8319:2;8307:9;8298:7;8294:23;8290:32;8287:52;;;8335:1;8332;8325:12;8287:52;8368:9;8362:16;8401:18;8393:6;8390:30;8387:50;;;8433:1;8430;8423:12;8387:50;8456:22;;8509:4;8501:13;;8497:27;-1:-1:-1;8487:55:1;;8538:1;8535;8528:12;8487:55;8567:2;8561:9;8592:48;8608:31;8636:2;8608:31;:::i;8592:48::-;8663:2;8656:5;8649:17;8703:7;8698:2;8693;8689;8685:11;8681:20;8678:33;8675:53;;;8724:1;8721;8714:12;8675:53;8737:54;8788:2;8783;8776:5;8772:14;8767:2;8763;8759:11;8737:54;:::i;:::-;8810:5;8187:634;-1:-1:-1;;;;;8187:634:1:o;8826:180::-;8885:6;8938:2;8926:9;8917:7;8913:23;8909:32;8906:52;;;8954:1;8951;8944:12;8906:52;-1:-1:-1;8977:23:1;;8826:180;-1:-1:-1;8826:180:1:o;9011:248::-;9076:6;9084;9137:2;9125:9;9116:7;9112:23;9108:32;9105:52;;;9153:1;9150;9143:12;9105:52;9189:9;9176:23;9166:33;;9218:35;9249:2;9238:9;9234:18;9218:35;:::i;9264:546::-;9350:6;9358;9366;9374;9427:2;9415:9;9406:7;9402:23;9398:32;9395:52;;;9443:1;9440;9433:12;9395:52;9479:9;9466:23;9456:33;;9540:2;9529:9;9525:18;9512:32;9567:18;9559:6;9556:30;9553:50;;;9599:1;9596;9589:12;9553:50;9638:58;9688:7;9679:6;9668:9;9664:22;9638:58;:::i;:::-;9715:8;;-1:-1:-1;9612:84:1;-1:-1:-1;9769:35:1;;-1:-1:-1;9800:2:1;9785:18;;9769:35;:::i;:::-;9759:45;;9264:546;;;;;;;:::o;9815:787::-;9916:6;9924;9932;9940;9948;10001:2;9989:9;9980:7;9976:23;9972:32;9969:52;;;10017:1;10014;10007:12;9969:52;10053:9;10040:23;10030:33;;10114:2;10103:9;10099:18;10086:32;10137:18;10178:2;10170:6;10167:14;10164:34;;;10194:1;10191;10184:12;10164:34;10233:58;10283:7;10274:6;10263:9;10259:22;10233:58;:::i;:::-;10310:8;;-1:-1:-1;10207:84:1;-1:-1:-1;10398:2:1;10383:18;;10370:32;;-1:-1:-1;10414:16:1;;;10411:36;;;10443:1;10440;10433:12;10411:36;;10482:60;10534:7;10523:8;10512:9;10508:24;10482:60;:::i;:::-;9815:787;;;;-1:-1:-1;9815:787:1;;-1:-1:-1;10561:8:1;;10456:86;9815:787;-1:-1:-1;;;9815:787:1:o;10607:248::-;10675:6;10683;10736:2;10724:9;10715:7;10711:23;10707:32;10704:52;;;10752:1;10749;10742:12;10704:52;-1:-1:-1;;10775:23:1;;;10845:2;10830:18;;;10817:32;;-1:-1:-1;10607:248:1:o;10860:316::-;10901:3;10939:5;10933:12;10966:6;10961:3;10954:19;10982:63;11038:6;11031:4;11026:3;11022:14;11015:4;11008:5;11004:16;10982:63;:::i;:::-;11090:2;11078:15;-1:-1:-1;;11074:88:1;11065:98;;;;11165:4;11061:109;;10860:316;-1:-1:-1;;10860:316:1:o;11181:326::-;11270:6;11265:3;11258:19;11322:6;11315:5;11308:4;11303:3;11299:14;11286:43;;11374:1;11367:4;11358:6;11353:3;11349:16;11345:27;11338:38;11240:3;11496:4;-1:-1:-1;;11421:2:1;11413:6;11409:15;11405:88;11400:3;11396:98;11392:109;11385:116;;11181:326;;;;:::o;11512:664::-;11739:3;11777:6;11771:13;11793:53;11839:6;11834:3;11827:4;11819:6;11815:17;11793:53;:::i;:::-;11909:13;;11868:16;;;;11931:57;11909:13;11868:16;11965:4;11953:17;;11931:57;:::i;:::-;12055:13;;12010:20;;;12077:57;12055:13;12010:20;12111:4;12099:17;;12077:57;:::i;:::-;12150:20;;11512:664;-1:-1:-1;;;;;11512:664:1:o;13142:511::-;13336:4;-1:-1:-1;;;;;13446:2:1;13438:6;13434:15;13423:9;13416:34;13498:2;13490:6;13486:15;13481:2;13470:9;13466:18;13459:43;;13538:6;13533:2;13522:9;13518:18;13511:34;13581:3;13576:2;13565:9;13561:18;13554:31;13602:45;13642:3;13631:9;13627:19;13619:6;13602:45;:::i;13658:533::-;13847:2;13836:9;13829:21;13886:6;13881:2;13870:9;13866:18;13859:34;13810:4;13916:66;13908:6;13905:78;13902:98;;;13996:1;13993;13986:12;13902:98;14030:6;14027:1;14023:14;14087:6;14079;14074:2;14063:9;14059:18;14046:48;14164:1;14117:22;;14141:2;14113:31;14153:13;;;-1:-1:-1;14113:31:1;13658:533;-1:-1:-1;;13658:533:1:o;14196:632::-;14367:2;14419:21;;;14489:13;;14392:18;;;14511:22;;;14338:4;;14367:2;14590:15;;;;14564:2;14549:18;;;14338:4;14633:169;14647:6;14644:1;14641:13;14633:169;;;14708:13;;14696:26;;14777:15;;;;14742:12;;;;14669:1;14662:9;14633:169;;;-1:-1:-1;14819:3:1;;14196:632;-1:-1:-1;;;;;;14196:632:1:o;15408:217::-;15555:2;15544:9;15537:21;15518:4;15575:44;15615:2;15604:9;15600:18;15592:6;15575:44;:::i;15854:300::-;16025:2;16014:9;16007:21;15988:4;16045:44;16085:2;16074:9;16070:18;16062:6;16045:44;:::i;:::-;16037:52;;16139:6;16132:14;16125:22;16120:2;16109:9;16105:18;16098:50;15854:300;;;;;:::o;28698:399::-;28907:6;28896:9;28889:25;28950:2;28945;28934:9;28930:18;28923:30;28870:4;28970:62;29028:2;29017:9;29013:18;29005:6;28997;28970:62;:::i;:::-;28962:70;;29082:6;29075:14;29068:22;29063:2;29052:9;29048:18;29041:50;28698:399;;;;;;;:::o;29102:508::-;29347:6;29336:9;29329:25;29390:2;29385;29374:9;29370:18;29363:30;29310:4;29416:62;29474:2;29463:9;29459:18;29451:6;29443;29416:62;:::i;:::-;29526:9;29518:6;29514:22;29509:2;29498:9;29494:18;29487:50;29554;29597:6;29589;29581;29554:50;:::i;:::-;29546:58;29102:508;-1:-1:-1;;;;;;;;29102:508:1:o;29868:334::-;29939:2;29933:9;29995:2;29985:13;;-1:-1:-1;;29981:86:1;29969:99;;30098:18;30083:34;;30119:22;;;30080:62;30077:88;;;30145:18;;:::i;:::-;30181:2;30174:22;29868:334;;-1:-1:-1;29868:334:1:o;30207:245::-;30255:4;30288:18;30280:6;30277:30;30274:56;;;30310:18;;:::i;:::-;-1:-1:-1;30367:2:1;30355:15;-1:-1:-1;;30351:88:1;30441:4;30347:99;;30207:245::o;30457:128::-;30497:3;30528:1;30524:6;30521:1;30518:13;30515:39;;;30534:18;;:::i;:::-;-1:-1:-1;30570:9:1;;30457:128::o;30590:120::-;30630:1;30656;30646:35;;30661:18;;:::i;:::-;-1:-1:-1;30695:9:1;;30590:120::o;30715:125::-;30755:4;30783:1;30780;30777:8;30774:34;;;30788:18;;:::i;:::-;-1:-1:-1;30825:9:1;;30715:125::o;30845:258::-;30917:1;30927:113;30941:6;30938:1;30935:13;30927:113;;;31017:11;;;31011:18;30998:11;;;30991:39;30963:2;30956:10;30927:113;;;31058:6;31055:1;31052:13;31049:48;;;-1:-1:-1;;31093:1:1;31075:16;;31068:27;30845:258::o;31108:437::-;31187:1;31183:12;;;;31230;;;31251:61;;31305:4;31297:6;31293:17;31283:27;;31251:61;31358:2;31350:6;31347:14;31327:18;31324:38;31321:218;;;31395:77;31392:1;31385:88;31496:4;31493:1;31486:15;31524:4;31521:1;31514:15;31321:218;;31108:437;;;:::o;31550:195::-;31589:3;31620:66;31613:5;31610:77;31607:103;;;31690:18;;:::i;:::-;-1:-1:-1;31737:1:1;31726:13;;31550:195::o;31750:112::-;31782:1;31808;31798:35;;31813:18;;:::i;:::-;-1:-1:-1;31847:9:1;;31750:112::o;31867:184::-;31919:77;31916:1;31909:88;32016:4;32013:1;32006:15;32040:4;32037:1;32030:15;32056:184;32108:77;32105:1;32098:88;32205:4;32202:1;32195:15;32229:4;32226:1;32219:15;32245:184;32297:77;32294:1;32287:88;32394:4;32391:1;32384:15;32418:4;32415:1;32408:15;32434:184;32486:77;32483:1;32476:88;32583:4;32580:1;32573:15;32607:4;32604:1;32597:15;32623:184;32675:77;32672:1;32665:88;32772:4;32769:1;32762:15;32796:4;32793:1;32786:15;32812:177;32897:66;32890:5;32886:78;32879:5;32876:89;32866:117;;32979:1;32976;32969:12
Swarm Source
ipfs://5befbb51facaa79b5471d91404eb73cd591d52074e3ef151600ee6478b94ce3d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.