ERC-1155
Overview
Max Total Supply
14 69k
Holders
14
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EARCLove
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-16 */ // SPDX-License-Identifier: MIT //********************************// //███████╗░█████╗░██████╗░░█████╗░// //██╔════╝██╔══██╗██╔══██╗██╔══██╗// //█████╗░░███████║██████╔╝██║░░╚═╝// //██╔══╝░░██╔══██║██╔══██╗██║░░██╗// //███████╗██║░░██║██║░░██║╚█████╔╝// //╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝░╚════╝░// //********************************// // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: earc.sol pragma solidity ^0.8.9; contract EARCLove is ERC1155, IERC2981, Ownable { string public name = "69k Gold"; string public symbol = "69k"; address public royaltyRECEIVER; uint256 public royaltyPERCENTAGE; bool public pause = false; bool public revealed = false; constructor( address _royaltyReceiver, uint256 _royaltyPercentage, string memory _bURI ) ERC1155(_bURI) { royaltyRECEIVER = _royaltyReceiver; royaltyPERCENTAGE = _royaltyPercentage; } function sendAirdrop(address[] calldata to) external onlyOwner { require(!pause, "The contract is paused."); for (uint256 i = 0; i < to.length; i++) { address receiver = to[i]; _mint(receiver, 0, 1, ""); } } /** * @dev - Set Royalties * @param _royaltyReceiver - Receiver of royalties * @param _royaltyPercentage - Percentage amount in ratio to 1000. e.g. 50 = 5% */ function setRoyaltyInfo( address _royaltyReceiver, uint256 _royaltyPercentage ) public onlyOwner { royaltyRECEIVER = _royaltyReceiver; royaltyPERCENTAGE = _royaltyPercentage; } function setBaseURI(string memory newBaseURI) external onlyOwner { _setURI(newBaseURI); } function setPause() external onlyOwner { pause = true; } // ERC165 function supportsInterface(bytes4 interfaceId) public view override(ERC1155, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } // IERC2981 function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address, uint256 royaltyAmount) { _tokenId; // silence solc warning royaltyAmount = (_salePrice / 1000) * royaltyPERCENTAGE; return (royaltyRECEIVER, royaltyAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_royaltyReceiver","type":"address"},{"internalType":"uint256","name":"_royaltyPercentage","type":"uint256"},{"internalType":"string","name":"_bURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyPERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyRECEIVER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"sendAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyReceiver","type":"address"},{"internalType":"uint256","name":"_royaltyPercentage","type":"uint256"}],"name":"setRoyaltyInfo","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600881526020017f36396b20476f6c64000000000000000000000000000000000000000000000000815250600490805190602001906200005192919062000277565b506040518060400160405280600381526020017f36396b0000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f92919062000277565b506000600860006101000a81548160ff0219169083151502179055506000600860016101000a81548160ff021916908315150217905550348015620000e357600080fd5b5060405162003d7638038062003d76833981810160405281019062000109919062000564565b806200011b816200018d60201b60201c565b506200013c62000130620001a960201b60201c565b620001b160201b60201c565b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160078190555050505062000643565b8060029080519060200190620001a592919062000277565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000285906200060e565b90600052602060002090601f016020900481019282620002a95760008555620002f5565b82601f10620002c457805160ff1916838001178555620002f5565b82800160010185558215620002f5579182015b82811115620002f4578251825591602001919060010190620002d7565b5b50905062000304919062000308565b5090565b5b808211156200032357600081600090555060010162000309565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000368826200033b565b9050919050565b6200037a816200035b565b81146200038657600080fd5b50565b6000815190506200039a816200036f565b92915050565b6000819050919050565b620003b581620003a0565b8114620003c157600080fd5b50565b600081519050620003d581620003aa565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200043082620003e5565b810181811067ffffffffffffffff82111715620004525762000451620003f6565b5b80604052505050565b60006200046762000327565b905062000475828262000425565b919050565b600067ffffffffffffffff821115620004985762000497620003f6565b5b620004a382620003e5565b9050602081019050919050565b60005b83811015620004d0578082015181840152602081019050620004b3565b83811115620004e0576000848401525b50505050565b6000620004fd620004f7846200047a565b6200045b565b9050828152602081018484840111156200051c576200051b620003e0565b5b62000529848285620004b0565b509392505050565b600082601f830112620005495762000548620003db565b5b81516200055b848260208601620004e6565b91505092915050565b60008060006060848603121562000580576200057f62000331565b5b6000620005908682870162000389565b9350506020620005a386828701620003c4565b925050604084015167ffffffffffffffff811115620005c757620005c662000336565b5b620005d58682870162000531565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200062757607f821691505b6020821081036200063d576200063c620005df565b5b50919050565b61372380620006536000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c8063715018a6116100b8578063d431b1ac1161007c578063d431b1ac14610365578063e03338f81461036f578063e2e784d51461038d578063e985e9c5146103a9578063f242432a146103d9578063f2fde38b146103f557610141565b8063715018a6146102e55780638456cb59146102ef5780638da5cb5b1461030d57806395d89b411461032b578063a22cb4651461034957610141565b80632a55205a1161010a5780632a55205a146102125780632eb2c2d6146102435780634e1273f41461025f578063518302271461028f57806355f804b3146102ad578063657d9501146102c957610141565b8062fdd58e1461014657806301ffc9a71461017657806306fdde03146101a65780630e89341c146101c457806315e1028d146101f4575b600080fd5b610160600480360381019061015b9190612026565b610411565b60405161016d9190612075565b60405180910390f35b610190600480360381019061018b91906120e8565b6104d9565b60405161019d9190612130565b60405180910390f35b6101ae610553565b6040516101bb91906121e4565b60405180910390f35b6101de60048036038101906101d99190612206565b6105e1565b6040516101eb91906121e4565b60405180910390f35b6101fc610675565b6040516102099190612075565b60405180910390f35b61022c60048036038101906102279190612233565b61067b565b60405161023a929190612282565b60405180910390f35b61025d600480360381019061025891906124a8565b6106c7565b005b6102796004803603810190610274919061263a565b610768565b6040516102869190612770565b60405180910390f35b610297610881565b6040516102a49190612130565b60405180910390f35b6102c760048036038101906102c29190612833565b610894565b005b6102e360048036038101906102de91906128d7565b61091c565b005b6102ed610a58565b005b6102f7610ae0565b6040516103049190612130565b60405180910390f35b610315610af3565b6040516103229190612924565b60405180910390f35b610333610b1d565b60405161034091906121e4565b60405180910390f35b610363600480360381019061035e919061296b565b610bab565b005b61036d610bc1565b005b610377610c5a565b6040516103849190612924565b60405180910390f35b6103a760048036038101906103a29190612026565b610c80565b005b6103c360048036038101906103be91906129ab565b610d48565b6040516103d09190612130565b60405180910390f35b6103f360048036038101906103ee91906129eb565b610ddc565b005b61040f600480360381019061040a9190612a82565b610e7d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047890612b21565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054c575061054b82610f74565b5b9050919050565b6004805461056090612b70565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90612b70565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b6060600280546105f090612b70565b80601f016020809104026020016040519081016040528092919081815260200182805461061c90612b70565b80156106695780601f1061063e57610100808354040283529160200191610669565b820191906000526020600020905b81548152906001019060200180831161064c57829003601f168201915b50505050509050919050565b60075481565b6000806007546103e88461068f9190612bff565b6106999190612c30565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b6106cf611056565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061071557506107148561070f611056565b610d48565b5b610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074b90612cfc565b60405180910390fd5b610761858585858561105e565b5050505050565b606081518351146107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590612d8e565b60405180910390fd5b6000835167ffffffffffffffff8111156107cb576107ca6122b0565b5b6040519080825280602002602001820160405280156107f95781602001602082028036833780820191505090505b50905060005b84518110156108765761084685828151811061081e5761081d612dae565b5b602002602001015185838151811061083957610838612dae565b5b6020026020010151610411565b82828151811061085957610858612dae565b5b6020026020010181815250508061086f90612ddd565b90506107ff565b508091505092915050565b600860019054906101000a900460ff1681565b61089c611056565b73ffffffffffffffffffffffffffffffffffffffff166108ba610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790612e71565b60405180910390fd5b6109198161137f565b50565b610924611056565b73ffffffffffffffffffffffffffffffffffffffff16610942610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90612e71565b60405180910390fd5b600860009054906101000a900460ff16156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df90612edd565b60405180910390fd5b60005b82829050811015610a53576000838383818110610a0b57610a0a612dae565b5b9050602002016020810190610a209190612a82565b9050610a3f816000600160405180602001604052806000815250611399565b508080610a4b90612ddd565b9150506109eb565b505050565b610a60611056565b73ffffffffffffffffffffffffffffffffffffffff16610a7e610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90612e71565b60405180910390fd5b610ade6000611549565b565b600860009054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b2a90612b70565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690612b70565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b610bbd610bb6611056565b838361160f565b5050565b610bc9611056565b73ffffffffffffffffffffffffffffffffffffffff16610be7610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612e71565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c88611056565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e71565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806007819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610de4611056565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e2a5750610e2985610e24611056565b610d48565b5b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090612f6f565b60405180910390fd5b610e76858585858561177b565b5050505050565b610e85611056565b73ffffffffffffffffffffffffffffffffffffffff16610ea3610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090612e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613001565b60405180910390fd5b610f7181611549565b50565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061103f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061104f575061104e82611a16565b5b9050919050565b600033905090565b81518351146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613093565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613125565b60405180910390fd5b600061111b611056565b905061112b818787878787611a80565b60005b84518110156112dc57600085828151811061114c5761114b612dae565b5b60200260200101519050600085838151811061116b5761116a612dae565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561120c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611203906131b7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c191906131d7565b92505081905550505050806112d590612ddd565b905061112e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161135392919061322d565b60405180910390a4611369818787878787611a88565b611377818787878787611a90565b505050505050565b8060029080519060200190611395929190611edb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff906132d6565b60405180910390fd5b6000611412611056565b9050600061141f85611c67565b9050600061142c85611c67565b905061143d83600089858589611a80565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149c91906131d7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161151a9291906132f6565b60405180910390a461153183600089858589611a88565b61154083600089898989611ce1565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613391565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176e9190612130565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613125565b60405180910390fd5b60006117f4611056565b9050600061180185611c67565b9050600061180e85611c67565b905061181e838989858589611a80565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906131b7565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196a91906131d7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516119e79291906132f6565b60405180910390a46119fd848a8a86868a611a88565b611a0b848a8a8a8a8a611ce1565b505050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b505050505050565b611aaf8473ffffffffffffffffffffffffffffffffffffffff16611eb8565b15611c5f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611af5959493929190613406565b6020604051808303816000875af1925050508015611b3157506040513d601f19601f82011682018060405250810190611b2e9190613483565b60015b611bd657611b3d6134bd565b806308c379a003611b995750611b516134df565b80611b5c5750611b9b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9091906121e4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906135e1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613673565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611c8657611c856122b0565b5b604051908082528060200260200182016040528015611cb45781602001602082028036833780820191505090505b5090508281600081518110611ccc57611ccb612dae565b5b60200260200101818152505080915050919050565b611d008473ffffffffffffffffffffffffffffffffffffffff16611eb8565b15611eb0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d46959493929190613693565b6020604051808303816000875af1925050508015611d8257506040513d601f19601f82011682018060405250810190611d7f9190613483565b60015b611e2757611d8e6134bd565b806308c379a003611dea5750611da26134df565b80611dad5750611dec565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de191906121e4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906135e1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613673565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611ee790612b70565b90600052602060002090601f016020900481019282611f095760008555611f50565b82601f10611f2257805160ff1916838001178555611f50565b82800160010185558215611f50579182015b82811115611f4f578251825591602001919060010190611f34565b5b509050611f5d9190611f61565b5090565b5b80821115611f7a576000816000905550600101611f62565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fbd82611f92565b9050919050565b611fcd81611fb2565b8114611fd857600080fd5b50565b600081359050611fea81611fc4565b92915050565b6000819050919050565b61200381611ff0565b811461200e57600080fd5b50565b60008135905061202081611ffa565b92915050565b6000806040838503121561203d5761203c611f88565b5b600061204b85828601611fdb565b925050602061205c85828601612011565b9150509250929050565b61206f81611ff0565b82525050565b600060208201905061208a6000830184612066565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120c581612090565b81146120d057600080fd5b50565b6000813590506120e2816120bc565b92915050565b6000602082840312156120fe576120fd611f88565b5b600061210c848285016120d3565b91505092915050565b60008115159050919050565b61212a81612115565b82525050565b60006020820190506121456000830184612121565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561218557808201518184015260208101905061216a565b83811115612194576000848401525b50505050565b6000601f19601f8301169050919050565b60006121b68261214b565b6121c08185612156565b93506121d0818560208601612167565b6121d98161219a565b840191505092915050565b600060208201905081810360008301526121fe81846121ab565b905092915050565b60006020828403121561221c5761221b611f88565b5b600061222a84828501612011565b91505092915050565b6000806040838503121561224a57612249611f88565b5b600061225885828601612011565b925050602061226985828601612011565b9150509250929050565b61227c81611fb2565b82525050565b60006040820190506122976000830185612273565b6122a46020830184612066565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122e88261219a565b810181811067ffffffffffffffff82111715612307576123066122b0565b5b80604052505050565b600061231a611f7e565b905061232682826122df565b919050565b600067ffffffffffffffff821115612346576123456122b0565b5b602082029050602081019050919050565b600080fd5b600061236f61236a8461232b565b612310565b9050808382526020820190506020840283018581111561239257612391612357565b5b835b818110156123bb57806123a78882612011565b845260208401935050602081019050612394565b5050509392505050565b600082601f8301126123da576123d96122ab565b5b81356123ea84826020860161235c565b91505092915050565b600080fd5b600067ffffffffffffffff821115612413576124126122b0565b5b61241c8261219a565b9050602081019050919050565b82818337600083830152505050565b600061244b612446846123f8565b612310565b905082815260208101848484011115612467576124666123f3565b5b612472848285612429565b509392505050565b600082601f83011261248f5761248e6122ab565b5b813561249f848260208601612438565b91505092915050565b600080600080600060a086880312156124c4576124c3611f88565b5b60006124d288828901611fdb565b95505060206124e388828901611fdb565b945050604086013567ffffffffffffffff81111561250457612503611f8d565b5b612510888289016123c5565b935050606086013567ffffffffffffffff81111561253157612530611f8d565b5b61253d888289016123c5565b925050608086013567ffffffffffffffff81111561255e5761255d611f8d565b5b61256a8882890161247a565b9150509295509295909350565b600067ffffffffffffffff821115612592576125916122b0565b5b602082029050602081019050919050565b60006125b66125b184612577565b612310565b905080838252602082019050602084028301858111156125d9576125d8612357565b5b835b8181101561260257806125ee8882611fdb565b8452602084019350506020810190506125db565b5050509392505050565b600082601f830112612621576126206122ab565b5b81356126318482602086016125a3565b91505092915050565b6000806040838503121561265157612650611f88565b5b600083013567ffffffffffffffff81111561266f5761266e611f8d565b5b61267b8582860161260c565b925050602083013567ffffffffffffffff81111561269c5761269b611f8d565b5b6126a8858286016123c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6126e781611ff0565b82525050565b60006126f983836126de565b60208301905092915050565b6000602082019050919050565b600061271d826126b2565b61272781856126bd565b9350612732836126ce565b8060005b8381101561276357815161274a88826126ed565b975061275583612705565b925050600181019050612736565b5085935050505092915050565b6000602082019050818103600083015261278a8184612712565b905092915050565b600067ffffffffffffffff8211156127ad576127ac6122b0565b5b6127b68261219a565b9050602081019050919050565b60006127d66127d184612792565b612310565b9050828152602081018484840111156127f2576127f16123f3565b5b6127fd848285612429565b509392505050565b600082601f83011261281a576128196122ab565b5b813561282a8482602086016127c3565b91505092915050565b60006020828403121561284957612848611f88565b5b600082013567ffffffffffffffff81111561286757612866611f8d565b5b61287384828501612805565b91505092915050565b600080fd5b60008083601f840112612897576128966122ab565b5b8235905067ffffffffffffffff8111156128b4576128b361287c565b5b6020830191508360208202830111156128d0576128cf612357565b5b9250929050565b600080602083850312156128ee576128ed611f88565b5b600083013567ffffffffffffffff81111561290c5761290b611f8d565b5b61291885828601612881565b92509250509250929050565b60006020820190506129396000830184612273565b92915050565b61294881612115565b811461295357600080fd5b50565b6000813590506129658161293f565b92915050565b6000806040838503121561298257612981611f88565b5b600061299085828601611fdb565b92505060206129a185828601612956565b9150509250929050565b600080604083850312156129c2576129c1611f88565b5b60006129d085828601611fdb565b92505060206129e185828601611fdb565b9150509250929050565b600080600080600060a08688031215612a0757612a06611f88565b5b6000612a1588828901611fdb565b9550506020612a2688828901611fdb565b9450506040612a3788828901612011565b9350506060612a4888828901612011565b925050608086013567ffffffffffffffff811115612a6957612a68611f8d565b5b612a758882890161247a565b9150509295509295909350565b600060208284031215612a9857612a97611f88565b5b6000612aa684828501611fdb565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612b0b602b83612156565b9150612b1682612aaf565b604082019050919050565b60006020820190508181036000830152612b3a81612afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b8857607f821691505b602082108103612b9b57612b9a612b41565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c0a82611ff0565b9150612c1583611ff0565b925082612c2557612c24612ba1565b5b828204905092915050565b6000612c3b82611ff0565b9150612c4683611ff0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c7f57612c7e612bd0565b5b828202905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612ce6603283612156565b9150612cf182612c8a565b604082019050919050565b60006020820190508181036000830152612d1581612cd9565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612d78602983612156565b9150612d8382612d1c565b604082019050919050565b60006020820190508181036000830152612da781612d6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612de882611ff0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e1a57612e19612bd0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e5b602083612156565b9150612e6682612e25565b602082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f54686520636f6e7472616374206973207061757365642e000000000000000000600082015250565b6000612ec7601783612156565b9150612ed282612e91565b602082019050919050565b60006020820190508181036000830152612ef681612eba565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612f59602983612156565b9150612f6482612efd565b604082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612feb602683612156565b9150612ff682612f8f565b604082019050919050565b6000602082019050818103600083015261301a81612fde565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061307d602883612156565b915061308882613021565b604082019050919050565b600060208201905081810360008301526130ac81613070565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061310f602583612156565b915061311a826130b3565b604082019050919050565b6000602082019050818103600083015261313e81613102565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006131a1602a83612156565b91506131ac82613145565b604082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b60006131e282611ff0565b91506131ed83611ff0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561322257613221612bd0565b5b828201905092915050565b600060408201905081810360008301526132478185612712565b9050818103602083015261325b8184612712565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132c0602183612156565b91506132cb82613264565b604082019050919050565b600060208201905081810360008301526132ef816132b3565b9050919050565b600060408201905061330b6000830185612066565b6133186020830184612066565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061337b602983612156565b91506133868261331f565b604082019050919050565b600060208201905081810360008301526133aa8161336e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133d8826133b1565b6133e281856133bc565b93506133f2818560208601612167565b6133fb8161219a565b840191505092915050565b600060a08201905061341b6000830188612273565b6134286020830187612273565b818103604083015261343a8186612712565b9050818103606083015261344e8185612712565b9050818103608083015261346281846133cd565b90509695505050505050565b60008151905061347d816120bc565b92915050565b60006020828403121561349957613498611f88565b5b60006134a78482850161346e565b91505092915050565b60008160e01c9050919050565b600060033d11156134dc5760046000803e6134d96000516134b0565b90505b90565b600060443d1061356c576134f1611f7e565b60043d036004823e80513d602482011167ffffffffffffffff8211171561351957505061356c565b808201805167ffffffffffffffff811115613537575050505061356c565b80602083010160043d03850181111561355457505050505061356c565b613563826020018501866122df565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006135cb603483612156565b91506135d68261356f565b604082019050919050565b600060208201905081810360008301526135fa816135be565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061365d602883612156565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b600060a0820190506136a86000830188612273565b6136b56020830187612273565b6136c26040830186612066565b6136cf6060830185612066565b81810360808301526136e181846133cd565b9050969550505050505056fea264697066735822122011a9a7498cd597046bd91927d9b216d4a6ea1a546c35c7a3cf9fdec70f49e63e64736f6c634300080d0033000000000000000000000000e05871e712c959ca52006869c2b199da392d2c1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d586a67683877396251556241445743366b7064577474456250593961583768465964336272637762765168350000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c8063715018a6116100b8578063d431b1ac1161007c578063d431b1ac14610365578063e03338f81461036f578063e2e784d51461038d578063e985e9c5146103a9578063f242432a146103d9578063f2fde38b146103f557610141565b8063715018a6146102e55780638456cb59146102ef5780638da5cb5b1461030d57806395d89b411461032b578063a22cb4651461034957610141565b80632a55205a1161010a5780632a55205a146102125780632eb2c2d6146102435780634e1273f41461025f578063518302271461028f57806355f804b3146102ad578063657d9501146102c957610141565b8062fdd58e1461014657806301ffc9a71461017657806306fdde03146101a65780630e89341c146101c457806315e1028d146101f4575b600080fd5b610160600480360381019061015b9190612026565b610411565b60405161016d9190612075565b60405180910390f35b610190600480360381019061018b91906120e8565b6104d9565b60405161019d9190612130565b60405180910390f35b6101ae610553565b6040516101bb91906121e4565b60405180910390f35b6101de60048036038101906101d99190612206565b6105e1565b6040516101eb91906121e4565b60405180910390f35b6101fc610675565b6040516102099190612075565b60405180910390f35b61022c60048036038101906102279190612233565b61067b565b60405161023a929190612282565b60405180910390f35b61025d600480360381019061025891906124a8565b6106c7565b005b6102796004803603810190610274919061263a565b610768565b6040516102869190612770565b60405180910390f35b610297610881565b6040516102a49190612130565b60405180910390f35b6102c760048036038101906102c29190612833565b610894565b005b6102e360048036038101906102de91906128d7565b61091c565b005b6102ed610a58565b005b6102f7610ae0565b6040516103049190612130565b60405180910390f35b610315610af3565b6040516103229190612924565b60405180910390f35b610333610b1d565b60405161034091906121e4565b60405180910390f35b610363600480360381019061035e919061296b565b610bab565b005b61036d610bc1565b005b610377610c5a565b6040516103849190612924565b60405180910390f35b6103a760048036038101906103a29190612026565b610c80565b005b6103c360048036038101906103be91906129ab565b610d48565b6040516103d09190612130565b60405180910390f35b6103f360048036038101906103ee91906129eb565b610ddc565b005b61040f600480360381019061040a9190612a82565b610e7d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047890612b21565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054c575061054b82610f74565b5b9050919050565b6004805461056090612b70565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90612b70565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b6060600280546105f090612b70565b80601f016020809104026020016040519081016040528092919081815260200182805461061c90612b70565b80156106695780601f1061063e57610100808354040283529160200191610669565b820191906000526020600020905b81548152906001019060200180831161064c57829003601f168201915b50505050509050919050565b60075481565b6000806007546103e88461068f9190612bff565b6106999190612c30565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b6106cf611056565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061071557506107148561070f611056565b610d48565b5b610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074b90612cfc565b60405180910390fd5b610761858585858561105e565b5050505050565b606081518351146107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a590612d8e565b60405180910390fd5b6000835167ffffffffffffffff8111156107cb576107ca6122b0565b5b6040519080825280602002602001820160405280156107f95781602001602082028036833780820191505090505b50905060005b84518110156108765761084685828151811061081e5761081d612dae565b5b602002602001015185838151811061083957610838612dae565b5b6020026020010151610411565b82828151811061085957610858612dae565b5b6020026020010181815250508061086f90612ddd565b90506107ff565b508091505092915050565b600860019054906101000a900460ff1681565b61089c611056565b73ffffffffffffffffffffffffffffffffffffffff166108ba610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790612e71565b60405180910390fd5b6109198161137f565b50565b610924611056565b73ffffffffffffffffffffffffffffffffffffffff16610942610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90612e71565b60405180910390fd5b600860009054906101000a900460ff16156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df90612edd565b60405180910390fd5b60005b82829050811015610a53576000838383818110610a0b57610a0a612dae565b5b9050602002016020810190610a209190612a82565b9050610a3f816000600160405180602001604052806000815250611399565b508080610a4b90612ddd565b9150506109eb565b505050565b610a60611056565b73ffffffffffffffffffffffffffffffffffffffff16610a7e610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90612e71565b60405180910390fd5b610ade6000611549565b565b600860009054906101000a900460ff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b2a90612b70565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690612b70565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b610bbd610bb6611056565b838361160f565b5050565b610bc9611056565b73ffffffffffffffffffffffffffffffffffffffff16610be7610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612e71565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c88611056565b73ffffffffffffffffffffffffffffffffffffffff16610ca6610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612e71565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806007819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610de4611056565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e2a5750610e2985610e24611056565b610d48565b5b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090612f6f565b60405180910390fd5b610e76858585858561177b565b5050505050565b610e85611056565b73ffffffffffffffffffffffffffffffffffffffff16610ea3610af3565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090612e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613001565b60405180910390fd5b610f7181611549565b50565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061103f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061104f575061104e82611a16565b5b9050919050565b600033905090565b81518351146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613093565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613125565b60405180910390fd5b600061111b611056565b905061112b818787878787611a80565b60005b84518110156112dc57600085828151811061114c5761114b612dae565b5b60200260200101519050600085838151811061116b5761116a612dae565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561120c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611203906131b7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c191906131d7565b92505081905550505050806112d590612ddd565b905061112e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161135392919061322d565b60405180910390a4611369818787878787611a88565b611377818787878787611a90565b505050505050565b8060029080519060200190611395929190611edb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff906132d6565b60405180910390fd5b6000611412611056565b9050600061141f85611c67565b9050600061142c85611c67565b905061143d83600089858589611a80565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149c91906131d7565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161151a9291906132f6565b60405180910390a461153183600089858589611a88565b61154083600089898989611ce1565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613391565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176e9190612130565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e190613125565b60405180910390fd5b60006117f4611056565b9050600061180185611c67565b9050600061180e85611c67565b905061181e838989858589611a80565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906131b7565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196a91906131d7565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516119e79291906132f6565b60405180910390a46119fd848a8a86868a611a88565b611a0b848a8a8a8a8a611ce1565b505050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b505050505050565b611aaf8473ffffffffffffffffffffffffffffffffffffffff16611eb8565b15611c5f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611af5959493929190613406565b6020604051808303816000875af1925050508015611b3157506040513d601f19601f82011682018060405250810190611b2e9190613483565b60015b611bd657611b3d6134bd565b806308c379a003611b995750611b516134df565b80611b5c5750611b9b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9091906121e4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906135e1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613673565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611c8657611c856122b0565b5b604051908082528060200260200182016040528015611cb45781602001602082028036833780820191505090505b5090508281600081518110611ccc57611ccb612dae565b5b60200260200101818152505080915050919050565b611d008473ffffffffffffffffffffffffffffffffffffffff16611eb8565b15611eb0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d46959493929190613693565b6020604051808303816000875af1925050508015611d8257506040513d601f19601f82011682018060405250810190611d7f9190613483565b60015b611e2757611d8e6134bd565b806308c379a003611dea5750611da26134df565b80611dad5750611dec565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de191906121e4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906135e1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590613673565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611ee790612b70565b90600052602060002090601f016020900481019282611f095760008555611f50565b82601f10611f2257805160ff1916838001178555611f50565b82800160010185558215611f50579182015b82811115611f4f578251825591602001919060010190611f34565b5b509050611f5d9190611f61565b5090565b5b80821115611f7a576000816000905550600101611f62565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fbd82611f92565b9050919050565b611fcd81611fb2565b8114611fd857600080fd5b50565b600081359050611fea81611fc4565b92915050565b6000819050919050565b61200381611ff0565b811461200e57600080fd5b50565b60008135905061202081611ffa565b92915050565b6000806040838503121561203d5761203c611f88565b5b600061204b85828601611fdb565b925050602061205c85828601612011565b9150509250929050565b61206f81611ff0565b82525050565b600060208201905061208a6000830184612066565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6120c581612090565b81146120d057600080fd5b50565b6000813590506120e2816120bc565b92915050565b6000602082840312156120fe576120fd611f88565b5b600061210c848285016120d3565b91505092915050565b60008115159050919050565b61212a81612115565b82525050565b60006020820190506121456000830184612121565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561218557808201518184015260208101905061216a565b83811115612194576000848401525b50505050565b6000601f19601f8301169050919050565b60006121b68261214b565b6121c08185612156565b93506121d0818560208601612167565b6121d98161219a565b840191505092915050565b600060208201905081810360008301526121fe81846121ab565b905092915050565b60006020828403121561221c5761221b611f88565b5b600061222a84828501612011565b91505092915050565b6000806040838503121561224a57612249611f88565b5b600061225885828601612011565b925050602061226985828601612011565b9150509250929050565b61227c81611fb2565b82525050565b60006040820190506122976000830185612273565b6122a46020830184612066565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122e88261219a565b810181811067ffffffffffffffff82111715612307576123066122b0565b5b80604052505050565b600061231a611f7e565b905061232682826122df565b919050565b600067ffffffffffffffff821115612346576123456122b0565b5b602082029050602081019050919050565b600080fd5b600061236f61236a8461232b565b612310565b9050808382526020820190506020840283018581111561239257612391612357565b5b835b818110156123bb57806123a78882612011565b845260208401935050602081019050612394565b5050509392505050565b600082601f8301126123da576123d96122ab565b5b81356123ea84826020860161235c565b91505092915050565b600080fd5b600067ffffffffffffffff821115612413576124126122b0565b5b61241c8261219a565b9050602081019050919050565b82818337600083830152505050565b600061244b612446846123f8565b612310565b905082815260208101848484011115612467576124666123f3565b5b612472848285612429565b509392505050565b600082601f83011261248f5761248e6122ab565b5b813561249f848260208601612438565b91505092915050565b600080600080600060a086880312156124c4576124c3611f88565b5b60006124d288828901611fdb565b95505060206124e388828901611fdb565b945050604086013567ffffffffffffffff81111561250457612503611f8d565b5b612510888289016123c5565b935050606086013567ffffffffffffffff81111561253157612530611f8d565b5b61253d888289016123c5565b925050608086013567ffffffffffffffff81111561255e5761255d611f8d565b5b61256a8882890161247a565b9150509295509295909350565b600067ffffffffffffffff821115612592576125916122b0565b5b602082029050602081019050919050565b60006125b66125b184612577565b612310565b905080838252602082019050602084028301858111156125d9576125d8612357565b5b835b8181101561260257806125ee8882611fdb565b8452602084019350506020810190506125db565b5050509392505050565b600082601f830112612621576126206122ab565b5b81356126318482602086016125a3565b91505092915050565b6000806040838503121561265157612650611f88565b5b600083013567ffffffffffffffff81111561266f5761266e611f8d565b5b61267b8582860161260c565b925050602083013567ffffffffffffffff81111561269c5761269b611f8d565b5b6126a8858286016123c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6126e781611ff0565b82525050565b60006126f983836126de565b60208301905092915050565b6000602082019050919050565b600061271d826126b2565b61272781856126bd565b9350612732836126ce565b8060005b8381101561276357815161274a88826126ed565b975061275583612705565b925050600181019050612736565b5085935050505092915050565b6000602082019050818103600083015261278a8184612712565b905092915050565b600067ffffffffffffffff8211156127ad576127ac6122b0565b5b6127b68261219a565b9050602081019050919050565b60006127d66127d184612792565b612310565b9050828152602081018484840111156127f2576127f16123f3565b5b6127fd848285612429565b509392505050565b600082601f83011261281a576128196122ab565b5b813561282a8482602086016127c3565b91505092915050565b60006020828403121561284957612848611f88565b5b600082013567ffffffffffffffff81111561286757612866611f8d565b5b61287384828501612805565b91505092915050565b600080fd5b60008083601f840112612897576128966122ab565b5b8235905067ffffffffffffffff8111156128b4576128b361287c565b5b6020830191508360208202830111156128d0576128cf612357565b5b9250929050565b600080602083850312156128ee576128ed611f88565b5b600083013567ffffffffffffffff81111561290c5761290b611f8d565b5b61291885828601612881565b92509250509250929050565b60006020820190506129396000830184612273565b92915050565b61294881612115565b811461295357600080fd5b50565b6000813590506129658161293f565b92915050565b6000806040838503121561298257612981611f88565b5b600061299085828601611fdb565b92505060206129a185828601612956565b9150509250929050565b600080604083850312156129c2576129c1611f88565b5b60006129d085828601611fdb565b92505060206129e185828601611fdb565b9150509250929050565b600080600080600060a08688031215612a0757612a06611f88565b5b6000612a1588828901611fdb565b9550506020612a2688828901611fdb565b9450506040612a3788828901612011565b9350506060612a4888828901612011565b925050608086013567ffffffffffffffff811115612a6957612a68611f8d565b5b612a758882890161247a565b9150509295509295909350565b600060208284031215612a9857612a97611f88565b5b6000612aa684828501611fdb565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612b0b602b83612156565b9150612b1682612aaf565b604082019050919050565b60006020820190508181036000830152612b3a81612afe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b8857607f821691505b602082108103612b9b57612b9a612b41565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c0a82611ff0565b9150612c1583611ff0565b925082612c2557612c24612ba1565b5b828204905092915050565b6000612c3b82611ff0565b9150612c4683611ff0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c7f57612c7e612bd0565b5b828202905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612ce6603283612156565b9150612cf182612c8a565b604082019050919050565b60006020820190508181036000830152612d1581612cd9565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612d78602983612156565b9150612d8382612d1c565b604082019050919050565b60006020820190508181036000830152612da781612d6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612de882611ff0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e1a57612e19612bd0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e5b602083612156565b9150612e6682612e25565b602082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f54686520636f6e7472616374206973207061757365642e000000000000000000600082015250565b6000612ec7601783612156565b9150612ed282612e91565b602082019050919050565b60006020820190508181036000830152612ef681612eba565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612f59602983612156565b9150612f6482612efd565b604082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612feb602683612156565b9150612ff682612f8f565b604082019050919050565b6000602082019050818103600083015261301a81612fde565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061307d602883612156565b915061308882613021565b604082019050919050565b600060208201905081810360008301526130ac81613070565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061310f602583612156565b915061311a826130b3565b604082019050919050565b6000602082019050818103600083015261313e81613102565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006131a1602a83612156565b91506131ac82613145565b604082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b60006131e282611ff0565b91506131ed83611ff0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561322257613221612bd0565b5b828201905092915050565b600060408201905081810360008301526132478185612712565b9050818103602083015261325b8184612712565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132c0602183612156565b91506132cb82613264565b604082019050919050565b600060208201905081810360008301526132ef816132b3565b9050919050565b600060408201905061330b6000830185612066565b6133186020830184612066565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061337b602983612156565b91506133868261331f565b604082019050919050565b600060208201905081810360008301526133aa8161336e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133d8826133b1565b6133e281856133bc565b93506133f2818560208601612167565b6133fb8161219a565b840191505092915050565b600060a08201905061341b6000830188612273565b6134286020830187612273565b818103604083015261343a8186612712565b9050818103606083015261344e8185612712565b9050818103608083015261346281846133cd565b90509695505050505050565b60008151905061347d816120bc565b92915050565b60006020828403121561349957613498611f88565b5b60006134a78482850161346e565b91505092915050565b60008160e01c9050919050565b600060033d11156134dc5760046000803e6134d96000516134b0565b90505b90565b600060443d1061356c576134f1611f7e565b60043d036004823e80513d602482011167ffffffffffffffff8211171561351957505061356c565b808201805167ffffffffffffffff811115613537575050505061356c565b80602083010160043d03850181111561355457505050505061356c565b613563826020018501866122df565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006135cb603483612156565b91506135d68261356f565b604082019050919050565b600060208201905081810360008301526135fa816135be565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061365d602883612156565b915061366882613601565b604082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b600060a0820190506136a86000830188612273565b6136b56020830187612273565b6136c26040830186612066565b6136cf6060830185612066565b81810360808301526136e181846133cd565b9050969550505050505056fea264697066735822122011a9a7498cd597046bd91927d9b216d4a6ea1a546c35c7a3cf9fdec70f49e63e64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e05871e712c959ca52006869c2b199da392d2c1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d586a67683877396251556241445743366b7064577474456250593961583768465964336272637762765168350000000000000000000000
-----Decoded View---------------
Arg [0] : _royaltyReceiver (address): 0xe05871E712C959Ca52006869C2b199DA392D2C1a
Arg [1] : _royaltyPercentage (uint256): 0
Arg [2] : _bURI (string): ipfs://QmXjgh8w9bQUbADWC6kpdWttEbPY9aX7hFYd3brcwbvQh5
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000e05871e712c959ca52006869c2b199da392d2c1a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [4] : 697066733a2f2f516d586a67683877396251556241445743366b706457747445
Arg [5] : 6250593961583768465964336272637762765168350000000000000000000000
Deployed Bytecode Sourcemap
40443:2039:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22481:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41866:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40498:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22225:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40610:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42166:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24420:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22878:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40687:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41662:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40970:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39574:103;;;:::i;:::-;;40655:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38923:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40536:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23475:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41773:70;;;:::i;:::-;;40573:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41432:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23702:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23942:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39832:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22481:231;22567:7;22614:1;22595:21;;:7;:21;;;22587:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22682:9;:13;22692:2;22682:13;;;;;;;;;;;:22;22696:7;22682:22;;;;;;;;;;;;;;;;22675:29;;22481:231;;;;:::o;41866:275::-;41997:4;42054:26;42039:41;;;:11;:41;;;;:94;;;;42097:36;42121:11;42097:23;:36::i;:::-;42039:94;42019:114;;41866:275;;;:::o;40498:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22225:105::-;22285:13;22318:4;22311:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22225:105;;;:::o;40610:32::-;;;;:::o;42166:313::-;42275:7;42284:21;42404:17;;42396:4;42383:10;:17;;;;:::i;:::-;42382:39;;;;:::i;:::-;42366:55;;42440:15;;;;;;;;;;;42432:39;;42166:313;;;;;:::o;24420:442::-;24661:12;:10;:12::i;:::-;24653:20;;:4;:20;;;:60;;;;24677:36;24694:4;24700:12;:10;:12::i;:::-;24677:16;:36::i;:::-;24653:60;24631:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24802:52;24825:4;24831:2;24835:3;24840:7;24849:4;24802:22;:52::i;:::-;24420:442;;;;;:::o;22878:524::-;23034:16;23095:3;:10;23076:8;:15;:29;23068:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23164:30;23211:8;:15;23197:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23164:63;;23245:9;23240:122;23264:8;:15;23260:1;:19;23240:122;;;23320:30;23330:8;23339:1;23330:11;;;;;;;;:::i;:::-;;;;;;;;23343:3;23347:1;23343:6;;;;;;;;:::i;:::-;;;;;;;;23320:9;:30::i;:::-;23301:13;23315:1;23301:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23281:3;;;;:::i;:::-;;;23240:122;;;;23381:13;23374:20;;;22878:524;;;;:::o;40687:28::-;;;;;;;;;;;;;:::o;41662:103::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41738:19:::1;41746:10;41738:7;:19::i;:::-;41662:103:::0;:::o;40970:265::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41053:5:::1;;;;;;;;;;;41052:6;41044:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41102:9;41097:131;41121:2;;:9;;41117:1;:13;41097:131;;;41152:16;41171:2;;41174:1;41171:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41152:24;;41191:25;41197:8;41207:1;41210;41191:25;;;;;;;;;;;::::0;:5:::1;:25::i;:::-;41137:91;41132:3;;;;;:::i;:::-;;;;41097:131;;;;40970:265:::0;;:::o;39574:103::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39639:30:::1;39666:1;39639:18;:30::i;:::-;39574:103::o:0;40655:25::-;;;;;;;;;;;;;:::o;38923:87::-;38969:7;38996:6;;;;;;;;;;;38989:13;;38923:87;:::o;40536:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23475:155::-;23570:52;23589:12;:10;:12::i;:::-;23603:8;23613;23570:18;:52::i;:::-;23475:155;;:::o;41773:70::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41831:4:::1;41823:5;;:12;;;;;;;;;;;;;;;;;;41773:70::o:0;40573:30::-;;;;;;;;;;;;;:::o;41432:222::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41581:16:::1;41563:15;;:34;;;;;;;;;;;;;;;;;;41628:18;41608:17;:38;;;;41432:222:::0;;:::o;23702:168::-;23801:4;23825:18;:27;23844:7;23825:27;;;;;;;;;;;;;;;:37;23853:8;23825:37;;;;;;;;;;;;;;;;;;;;;;;;;23818:44;;23702:168;;;;:::o;23942:401::-;24158:12;:10;:12::i;:::-;24150:20;;:4;:20;;;:60;;;;24174:36;24191:4;24197:12;:10;:12::i;:::-;24174:16;:36::i;:::-;24150:60;24128:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24290:45;24308:4;24314:2;24318;24322:6;24330:4;24290:17;:45::i;:::-;23942:401;;;;;:::o;39832:201::-;39154:12;:10;:12::i;:::-;39143:23;;:7;:5;:7::i;:::-;:23;;;39135:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39941:1:::1;39921:22;;:8;:22;;::::0;39913:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39997:28;40016:8;39997:18;:28::i;:::-;39832:201:::0;:::o;21504:310::-;21606:4;21658:26;21643:41;;;:11;:41;;;;:110;;;;21716:37;21701:52;;;:11;:52;;;;21643:110;:163;;;;21770:36;21794:11;21770:23;:36::i;:::-;21643:163;21623:183;;21504:310;;;:::o;20198:98::-;20251:7;20278:10;20271:17;;20198:98;:::o;26658:1146::-;26885:7;:14;26871:3;:10;:28;26863:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26977:1;26963:16;;:2;:16;;;26955:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27034:16;27053:12;:10;:12::i;:::-;27034:31;;27078:60;27099:8;27109:4;27115:2;27119:3;27124:7;27133:4;27078:20;:60::i;:::-;27156:9;27151:421;27175:3;:10;27171:1;:14;27151:421;;;27207:10;27220:3;27224:1;27220:6;;;;;;;;:::i;:::-;;;;;;;;27207:19;;27241:14;27258:7;27266:1;27258:10;;;;;;;;:::i;:::-;;;;;;;;27241:27;;27285:19;27307:9;:13;27317:2;27307:13;;;;;;;;;;;:19;27321:4;27307:19;;;;;;;;;;;;;;;;27285:41;;27364:6;27349:11;:21;;27341:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27497:6;27483:11;:20;27461:9;:13;27471:2;27461:13;;;;;;;;;;;:19;27475:4;27461:19;;;;;;;;;;;;;;;:42;;;;27554:6;27533:9;:13;27543:2;27533:13;;;;;;;;;;;:17;27547:2;27533:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27192:380;;;27187:3;;;;:::i;:::-;;;27151:421;;;;27619:2;27589:47;;27613:4;27589:47;;27603:8;27589:47;;;27623:3;27628:7;27589:47;;;;;;;:::i;:::-;;;;;;;;27649:59;27669:8;27679:4;27685:2;27689:3;27694:7;27703:4;27649:19;:59::i;:::-;27721:75;27757:8;27767:4;27773:2;27777:3;27782:7;27791:4;27721:35;:75::i;:::-;26852:952;26658:1146;;;;;:::o;28648:88::-;28722:6;28715:4;:13;;;;;;;;;;;;:::i;:::-;;28648:88;:::o;29122:729::-;29289:1;29275:16;;:2;:16;;;29267:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29342:16;29361:12;:10;:12::i;:::-;29342:31;;29384:20;29407:21;29425:2;29407:17;:21::i;:::-;29384:44;;29439:24;29466:25;29484:6;29466:17;:25::i;:::-;29439:52;;29504:66;29525:8;29543:1;29547:2;29551:3;29556:7;29565:4;29504:20;:66::i;:::-;29604:6;29583:9;:13;29593:2;29583:13;;;;;;;;;;;:17;29597:2;29583:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29663:2;29626:52;;29659:1;29626:52;;29641:8;29626:52;;;29667:2;29671:6;29626:52;;;;;;;:::i;:::-;;;;;;;;29691:65;29711:8;29729:1;29733:2;29737:3;29742:7;29751:4;29691:19;:65::i;:::-;29769:74;29800:8;29818:1;29822:2;29826;29830:6;29838:4;29769:30;:74::i;:::-;29256:595;;;29122:729;;;;:::o;40193:191::-;40267:16;40286:6;;;;;;;;;;;40267:25;;40312:8;40303:6;;:17;;;;;;;;;;;;;;;;;;40367:8;40336:40;;40357:8;40336:40;;;;;;;;;;;;40256:128;40193:191;:::o;33392:331::-;33547:8;33538:17;;:5;:17;;;33530:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33650:8;33612:18;:25;33631:5;33612:25;;;;;;;;;;;;;;;:35;33638:8;33612:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33696:8;33674:41;;33689:5;33674:41;;;33706:8;33674:41;;;;;;:::i;:::-;;;;;;;;33392:331;;;:::o;25326:974::-;25528:1;25514:16;;:2;:16;;;25506:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25585:16;25604:12;:10;:12::i;:::-;25585:31;;25627:20;25650:21;25668:2;25650:17;:21::i;:::-;25627:44;;25682:24;25709:25;25727:6;25709:17;:25::i;:::-;25682:52;;25747:60;25768:8;25778:4;25784:2;25788:3;25793:7;25802:4;25747:20;:60::i;:::-;25820:19;25842:9;:13;25852:2;25842:13;;;;;;;;;;;:19;25856:4;25842:19;;;;;;;;;;;;;;;;25820:41;;25895:6;25880:11;:21;;25872:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26020:6;26006:11;:20;25984:9;:13;25994:2;25984:13;;;;;;;;;;;:19;25998:4;25984:19;;;;;;;;;;;;;;;:42;;;;26069:6;26048:9;:13;26058:2;26048:13;;;;;;;;;;;:17;26062:2;26048:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26124:2;26093:46;;26118:4;26093:46;;26108:8;26093:46;;;26128:2;26132:6;26093:46;;;;;;;:::i;:::-;;;;;;;;26152:59;26172:8;26182:4;26188:2;26192:3;26197:7;26206:4;26152:19;:59::i;:::-;26224:68;26255:8;26265:4;26271:2;26275;26279:6;26287:4;26224:30;:68::i;:::-;25495:805;;;;25326:974;;;;;:::o;11904:157::-;11989:4;12028:25;12013:40;;;:11;:40;;;;12006:47;;11904:157;;;:::o;34679:221::-;;;;;;;:::o;35855:220::-;;;;;;;:::o;36835:813::-;37075:15;:2;:13;;;:15::i;:::-;37071:570;;;37128:2;37111:43;;;37155:8;37165:4;37171:3;37176:7;37185:4;37111:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37107:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37503:6;37496:14;;;;;;;;;;;:::i;:::-;;;;;;;;37107:523;;;37552:62;;;;;;;;;;:::i;:::-;;;;;;;;37107:523;37284:48;;;37272:60;;;:8;:60;;;;37268:159;;37357:50;;;;;;;;;;:::i;:::-;;;;;;;;37268:159;37191:251;37071:570;36835:813;;;;;;:::o;37656:198::-;37722:16;37751:22;37790:1;37776:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37751:41;;37814:7;37803:5;37809:1;37803:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37841:5;37834:12;;;37656:198;;;:::o;36083:744::-;36298:15;:2;:13;;;:15::i;:::-;36294:526;;;36351:2;36334:38;;;36373:8;36383:4;36389:2;36393:6;36401:4;36334:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36330:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36682:6;36675:14;;;;;;;;;;;:::i;:::-;;;;;;;;36330:479;;;36731:62;;;;;;;;;;:::i;:::-;;;;;;;;36330:479;36468:43;;;36456:55;;;:8;:55;;;;36452:154;;36536:50;;;;;;;;;;:::i;:::-;;;;;;;;36452:154;36407:214;36294:526;36083:744;;;;;;:::o;1954:326::-;2014:4;2271:1;2249:7;:19;;;:23;2242:30;;1954:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:474::-;5006:6;5014;5063:2;5051:9;5042:7;5038:23;5034:32;5031:119;;;5069:79;;:::i;:::-;5031:119;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;4938:474;;;;;:::o;5418:118::-;5505:24;5523:5;5505:24;:::i;:::-;5500:3;5493:37;5418:118;;:::o;5542:332::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5714:71;5782:1;5771:9;5767:17;5758:6;5714:71;:::i;:::-;5795:72;5863:2;5852:9;5848:18;5839:6;5795:72;:::i;:::-;5542:332;;;;;:::o;5880:117::-;5989:1;5986;5979:12;6003:180;6051:77;6048:1;6041:88;6148:4;6145:1;6138:15;6172:4;6169:1;6162:15;6189:281;6272:27;6294:4;6272:27;:::i;:::-;6264:6;6260:40;6402:6;6390:10;6387:22;6366:18;6354:10;6351:34;6348:62;6345:88;;;6413:18;;:::i;:::-;6345:88;6453:10;6449:2;6442:22;6232:238;6189:281;;:::o;6476:129::-;6510:6;6537:20;;:::i;:::-;6527:30;;6566:33;6594:4;6586:6;6566:33;:::i;:::-;6476:129;;;:::o;6611:311::-;6688:4;6778:18;6770:6;6767:30;6764:56;;;6800:18;;:::i;:::-;6764:56;6850:4;6842:6;6838:17;6830:25;;6910:4;6904;6900:15;6892:23;;6611:311;;;:::o;6928:117::-;7037:1;7034;7027:12;7068:710;7164:5;7189:81;7205:64;7262:6;7205:64;:::i;:::-;7189:81;:::i;:::-;7180:90;;7290:5;7319:6;7312:5;7305:21;7353:4;7346:5;7342:16;7335:23;;7406:4;7398:6;7394:17;7386:6;7382:30;7435:3;7427:6;7424:15;7421:122;;;7454:79;;:::i;:::-;7421:122;7569:6;7552:220;7586:6;7581:3;7578:15;7552:220;;;7661:3;7690:37;7723:3;7711:10;7690:37;:::i;:::-;7685:3;7678:50;7757:4;7752:3;7748:14;7741:21;;7628:144;7612:4;7607:3;7603:14;7596:21;;7552:220;;;7556:21;7170:608;;7068:710;;;;;:::o;7801:370::-;7872:5;7921:3;7914:4;7906:6;7902:17;7898:27;7888:122;;7929:79;;:::i;:::-;7888:122;8046:6;8033:20;8071:94;8161:3;8153:6;8146:4;8138:6;8134:17;8071:94;:::i;:::-;8062:103;;7878:293;7801:370;;;;:::o;8177:117::-;8286:1;8283;8276:12;8300:307;8361:4;8451:18;8443:6;8440:30;8437:56;;;8473:18;;:::i;:::-;8437:56;8511:29;8533:6;8511:29;:::i;:::-;8503:37;;8595:4;8589;8585:15;8577:23;;8300:307;;;:::o;8613:154::-;8697:6;8692:3;8687;8674:30;8759:1;8750:6;8745:3;8741:16;8734:27;8613:154;;;:::o;8773:410::-;8850:5;8875:65;8891:48;8932:6;8891:48;:::i;:::-;8875:65;:::i;:::-;8866:74;;8963:6;8956:5;8949:21;9001:4;8994:5;8990:16;9039:3;9030:6;9025:3;9021:16;9018:25;9015:112;;;9046:79;;:::i;:::-;9015:112;9136:41;9170:6;9165:3;9160;9136:41;:::i;:::-;8856:327;8773:410;;;;;:::o;9202:338::-;9257:5;9306:3;9299:4;9291:6;9287:17;9283:27;9273:122;;9314:79;;:::i;:::-;9273:122;9431:6;9418:20;9456:78;9530:3;9522:6;9515:4;9507:6;9503:17;9456:78;:::i;:::-;9447:87;;9263:277;9202:338;;;;:::o;9546:1509::-;9700:6;9708;9716;9724;9732;9781:3;9769:9;9760:7;9756:23;9752:33;9749:120;;;9788:79;;:::i;:::-;9749:120;9908:1;9933:53;9978:7;9969:6;9958:9;9954:22;9933:53;:::i;:::-;9923:63;;9879:117;10035:2;10061:53;10106:7;10097:6;10086:9;10082:22;10061:53;:::i;:::-;10051:63;;10006:118;10191:2;10180:9;10176:18;10163:32;10222:18;10214:6;10211:30;10208:117;;;10244:79;;:::i;:::-;10208:117;10349:78;10419:7;10410:6;10399:9;10395:22;10349:78;:::i;:::-;10339:88;;10134:303;10504:2;10493:9;10489:18;10476:32;10535:18;10527:6;10524:30;10521:117;;;10557:79;;:::i;:::-;10521:117;10662:78;10732:7;10723:6;10712:9;10708:22;10662:78;:::i;:::-;10652:88;;10447:303;10817:3;10806:9;10802:19;10789:33;10849:18;10841:6;10838:30;10835:117;;;10871:79;;:::i;:::-;10835:117;10976:62;11030:7;11021:6;11010:9;11006:22;10976:62;:::i;:::-;10966:72;;10760:288;9546:1509;;;;;;;;:::o;11061:311::-;11138:4;11228:18;11220:6;11217:30;11214:56;;;11250:18;;:::i;:::-;11214:56;11300:4;11292:6;11288:17;11280:25;;11360:4;11354;11350:15;11342:23;;11061:311;;;:::o;11395:710::-;11491:5;11516:81;11532:64;11589:6;11532:64;:::i;:::-;11516:81;:::i;:::-;11507:90;;11617:5;11646:6;11639:5;11632:21;11680:4;11673:5;11669:16;11662:23;;11733:4;11725:6;11721:17;11713:6;11709:30;11762:3;11754:6;11751:15;11748:122;;;11781:79;;:::i;:::-;11748:122;11896:6;11879:220;11913:6;11908:3;11905:15;11879:220;;;11988:3;12017:37;12050:3;12038:10;12017:37;:::i;:::-;12012:3;12005:50;12084:4;12079:3;12075:14;12068:21;;11955:144;11939:4;11934:3;11930:14;11923:21;;11879:220;;;11883:21;11497:608;;11395:710;;;;;:::o;12128:370::-;12199:5;12248:3;12241:4;12233:6;12229:17;12225:27;12215:122;;12256:79;;:::i;:::-;12215:122;12373:6;12360:20;12398:94;12488:3;12480:6;12473:4;12465:6;12461:17;12398:94;:::i;:::-;12389:103;;12205:293;12128:370;;;;:::o;12504:894::-;12622:6;12630;12679:2;12667:9;12658:7;12654:23;12650:32;12647:119;;;12685:79;;:::i;:::-;12647:119;12833:1;12822:9;12818:17;12805:31;12863:18;12855:6;12852:30;12849:117;;;12885:79;;:::i;:::-;12849:117;12990:78;13060:7;13051:6;13040:9;13036:22;12990:78;:::i;:::-;12980:88;;12776:302;13145:2;13134:9;13130:18;13117:32;13176:18;13168:6;13165:30;13162:117;;;13198:79;;:::i;:::-;13162:117;13303:78;13373:7;13364:6;13353:9;13349:22;13303:78;:::i;:::-;13293:88;;13088:303;12504:894;;;;;:::o;13404:114::-;13471:6;13505:5;13499:12;13489:22;;13404:114;;;:::o;13524:184::-;13623:11;13657:6;13652:3;13645:19;13697:4;13692:3;13688:14;13673:29;;13524:184;;;;:::o;13714:132::-;13781:4;13804:3;13796:11;;13834:4;13829:3;13825:14;13817:22;;13714:132;;;:::o;13852:108::-;13929:24;13947:5;13929:24;:::i;:::-;13924:3;13917:37;13852:108;;:::o;13966:179::-;14035:10;14056:46;14098:3;14090:6;14056:46;:::i;:::-;14134:4;14129:3;14125:14;14111:28;;13966:179;;;;:::o;14151:113::-;14221:4;14253;14248:3;14244:14;14236:22;;14151:113;;;:::o;14300:732::-;14419:3;14448:54;14496:5;14448:54;:::i;:::-;14518:86;14597:6;14592:3;14518:86;:::i;:::-;14511:93;;14628:56;14678:5;14628:56;:::i;:::-;14707:7;14738:1;14723:284;14748:6;14745:1;14742:13;14723:284;;;14824:6;14818:13;14851:63;14910:3;14895:13;14851:63;:::i;:::-;14844:70;;14937:60;14990:6;14937:60;:::i;:::-;14927:70;;14783:224;14770:1;14767;14763:9;14758:14;;14723:284;;;14727:14;15023:3;15016:10;;14424:608;;;14300:732;;;;:::o;15038:373::-;15181:4;15219:2;15208:9;15204:18;15196:26;;15268:9;15262:4;15258:20;15254:1;15243:9;15239:17;15232:47;15296:108;15399:4;15390:6;15296:108;:::i;:::-;15288:116;;15038:373;;;;:::o;15417:308::-;15479:4;15569:18;15561:6;15558:30;15555:56;;;15591:18;;:::i;:::-;15555:56;15629:29;15651:6;15629:29;:::i;:::-;15621:37;;15713:4;15707;15703:15;15695:23;;15417:308;;;:::o;15731:412::-;15809:5;15834:66;15850:49;15892:6;15850:49;:::i;:::-;15834:66;:::i;:::-;15825:75;;15923:6;15916:5;15909:21;15961:4;15954:5;15950:16;15999:3;15990:6;15985:3;15981:16;15978:25;15975:112;;;16006:79;;:::i;:::-;15975:112;16096:41;16130:6;16125:3;16120;16096:41;:::i;:::-;15815:328;15731:412;;;;;:::o;16163:340::-;16219:5;16268:3;16261:4;16253:6;16249:17;16245:27;16235:122;;16276:79;;:::i;:::-;16235:122;16393:6;16380:20;16418:79;16493:3;16485:6;16478:4;16470:6;16466:17;16418:79;:::i;:::-;16409:88;;16225:278;16163:340;;;;:::o;16509:509::-;16578:6;16627:2;16615:9;16606:7;16602:23;16598:32;16595:119;;;16633:79;;:::i;:::-;16595:119;16781:1;16770:9;16766:17;16753:31;16811:18;16803:6;16800:30;16797:117;;;16833:79;;:::i;:::-;16797:117;16938:63;16993:7;16984:6;16973:9;16969:22;16938:63;:::i;:::-;16928:73;;16724:287;16509:509;;;;:::o;17024:117::-;17133:1;17130;17123:12;17164:568;17237:8;17247:6;17297:3;17290:4;17282:6;17278:17;17274:27;17264:122;;17305:79;;:::i;:::-;17264:122;17418:6;17405:20;17395:30;;17448:18;17440:6;17437:30;17434:117;;;17470:79;;:::i;:::-;17434:117;17584:4;17576:6;17572:17;17560:29;;17638:3;17630:4;17622:6;17618:17;17608:8;17604:32;17601:41;17598:128;;;17645:79;;:::i;:::-;17598:128;17164:568;;;;;:::o;17738:559::-;17824:6;17832;17881:2;17869:9;17860:7;17856:23;17852:32;17849:119;;;17887:79;;:::i;:::-;17849:119;18035:1;18024:9;18020:17;18007:31;18065:18;18057:6;18054:30;18051:117;;;18087:79;;:::i;:::-;18051:117;18200:80;18272:7;18263:6;18252:9;18248:22;18200:80;:::i;:::-;18182:98;;;;17978:312;17738:559;;;;;:::o;18303:222::-;18396:4;18434:2;18423:9;18419:18;18411:26;;18447:71;18515:1;18504:9;18500:17;18491:6;18447:71;:::i;:::-;18303:222;;;;:::o;18531:116::-;18601:21;18616:5;18601:21;:::i;:::-;18594:5;18591:32;18581:60;;18637:1;18634;18627:12;18581:60;18531:116;:::o;18653:133::-;18696:5;18734:6;18721:20;18712:29;;18750:30;18774:5;18750:30;:::i;:::-;18653:133;;;;:::o;18792:468::-;18857:6;18865;18914:2;18902:9;18893:7;18889:23;18885:32;18882:119;;;18920:79;;:::i;:::-;18882:119;19040:1;19065:53;19110:7;19101:6;19090:9;19086:22;19065:53;:::i;:::-;19055:63;;19011:117;19167:2;19193:50;19235:7;19226:6;19215:9;19211:22;19193:50;:::i;:::-;19183:60;;19138:115;18792:468;;;;;:::o;19266:474::-;19334:6;19342;19391:2;19379:9;19370:7;19366:23;19362:32;19359:119;;;19397:79;;:::i;:::-;19359:119;19517:1;19542:53;19587:7;19578:6;19567:9;19563:22;19542:53;:::i;:::-;19532:63;;19488:117;19644:2;19670:53;19715:7;19706:6;19695:9;19691:22;19670:53;:::i;:::-;19660:63;;19615:118;19266:474;;;;;:::o;19746:1089::-;19850:6;19858;19866;19874;19882;19931:3;19919:9;19910:7;19906:23;19902:33;19899:120;;;19938:79;;:::i;:::-;19899:120;20058:1;20083:53;20128:7;20119:6;20108:9;20104:22;20083:53;:::i;:::-;20073:63;;20029:117;20185:2;20211:53;20256:7;20247:6;20236:9;20232:22;20211:53;:::i;:::-;20201:63;;20156:118;20313:2;20339:53;20384:7;20375:6;20364:9;20360:22;20339:53;:::i;:::-;20329:63;;20284:118;20441:2;20467:53;20512:7;20503:6;20492:9;20488:22;20467:53;:::i;:::-;20457:63;;20412:118;20597:3;20586:9;20582:19;20569:33;20629:18;20621:6;20618:30;20615:117;;;20651:79;;:::i;:::-;20615:117;20756:62;20810:7;20801:6;20790:9;20786:22;20756:62;:::i;:::-;20746:72;;20540:288;19746:1089;;;;;;;;:::o;20841:329::-;20900:6;20949:2;20937:9;20928:7;20924:23;20920:32;20917:119;;;20955:79;;:::i;:::-;20917:119;21075:1;21100:53;21145:7;21136:6;21125:9;21121:22;21100:53;:::i;:::-;21090:63;;21046:117;20841:329;;;;:::o;21176:230::-;21316:34;21312:1;21304:6;21300:14;21293:58;21385:13;21380:2;21372:6;21368:15;21361:38;21176:230;:::o;21412:366::-;21554:3;21575:67;21639:2;21634:3;21575:67;:::i;:::-;21568:74;;21651:93;21740:3;21651:93;:::i;:::-;21769:2;21764:3;21760:12;21753:19;;21412:366;;;:::o;21784:419::-;21950:4;21988:2;21977:9;21973:18;21965:26;;22037:9;22031:4;22027:20;22023:1;22012:9;22008:17;22001:47;22065:131;22191:4;22065:131;:::i;:::-;22057:139;;21784:419;;;:::o;22209:180::-;22257:77;22254:1;22247:88;22354:4;22351:1;22344:15;22378:4;22375:1;22368:15;22395:320;22439:6;22476:1;22470:4;22466:12;22456:22;;22523:1;22517:4;22513:12;22544:18;22534:81;;22600:4;22592:6;22588:17;22578:27;;22534:81;22662:2;22654:6;22651:14;22631:18;22628:38;22625:84;;22681:18;;:::i;:::-;22625:84;22446:269;22395:320;;;:::o;22721:180::-;22769:77;22766:1;22759:88;22866:4;22863:1;22856:15;22890:4;22887:1;22880:15;22907:180;22955:77;22952:1;22945:88;23052:4;23049:1;23042:15;23076:4;23073:1;23066:15;23093:185;23133:1;23150:20;23168:1;23150:20;:::i;:::-;23145:25;;23184:20;23202:1;23184:20;:::i;:::-;23179:25;;23223:1;23213:35;;23228:18;;:::i;:::-;23213:35;23270:1;23267;23263:9;23258:14;;23093:185;;;;:::o;23284:348::-;23324:7;23347:20;23365:1;23347:20;:::i;:::-;23342:25;;23381:20;23399:1;23381:20;:::i;:::-;23376:25;;23569:1;23501:66;23497:74;23494:1;23491:81;23486:1;23479:9;23472:17;23468:105;23465:131;;;23576:18;;:::i;:::-;23465:131;23624:1;23621;23617:9;23606:20;;23284:348;;;;:::o;23638:237::-;23778:34;23774:1;23766:6;23762:14;23755:58;23847:20;23842:2;23834:6;23830:15;23823:45;23638:237;:::o;23881:366::-;24023:3;24044:67;24108:2;24103:3;24044:67;:::i;:::-;24037:74;;24120:93;24209:3;24120:93;:::i;:::-;24238:2;24233:3;24229:12;24222:19;;23881:366;;;:::o;24253:419::-;24419:4;24457:2;24446:9;24442:18;24434:26;;24506:9;24500:4;24496:20;24492:1;24481:9;24477:17;24470:47;24534:131;24660:4;24534:131;:::i;:::-;24526:139;;24253:419;;;:::o;24678:228::-;24818:34;24814:1;24806:6;24802:14;24795:58;24887:11;24882:2;24874:6;24870:15;24863:36;24678:228;:::o;24912:366::-;25054:3;25075:67;25139:2;25134:3;25075:67;:::i;:::-;25068:74;;25151:93;25240:3;25151:93;:::i;:::-;25269:2;25264:3;25260:12;25253:19;;24912:366;;;:::o;25284:419::-;25450:4;25488:2;25477:9;25473:18;25465:26;;25537:9;25531:4;25527:20;25523:1;25512:9;25508:17;25501:47;25565:131;25691:4;25565:131;:::i;:::-;25557:139;;25284:419;;;:::o;25709:180::-;25757:77;25754:1;25747:88;25854:4;25851:1;25844:15;25878:4;25875:1;25868:15;25895:233;25934:3;25957:24;25975:5;25957:24;:::i;:::-;25948:33;;26003:66;25996:5;25993:77;25990:103;;26073:18;;:::i;:::-;25990:103;26120:1;26113:5;26109:13;26102:20;;25895:233;;;:::o;26134:182::-;26274:34;26270:1;26262:6;26258:14;26251:58;26134:182;:::o;26322:366::-;26464:3;26485:67;26549:2;26544:3;26485:67;:::i;:::-;26478:74;;26561:93;26650:3;26561:93;:::i;:::-;26679:2;26674:3;26670:12;26663:19;;26322:366;;;:::o;26694:419::-;26860:4;26898:2;26887:9;26883:18;26875:26;;26947:9;26941:4;26937:20;26933:1;26922:9;26918:17;26911:47;26975:131;27101:4;26975:131;:::i;:::-;26967:139;;26694:419;;;:::o;27119:173::-;27259:25;27255:1;27247:6;27243:14;27236:49;27119:173;:::o;27298:366::-;27440:3;27461:67;27525:2;27520:3;27461:67;:::i;:::-;27454:74;;27537:93;27626:3;27537:93;:::i;:::-;27655:2;27650:3;27646:12;27639:19;;27298:366;;;:::o;27670:419::-;27836:4;27874:2;27863:9;27859:18;27851:26;;27923:9;27917:4;27913:20;27909:1;27898:9;27894:17;27887:47;27951:131;28077:4;27951:131;:::i;:::-;27943:139;;27670:419;;;:::o;28095:228::-;28235:34;28231:1;28223:6;28219:14;28212:58;28304:11;28299:2;28291:6;28287:15;28280:36;28095:228;:::o;28329:366::-;28471:3;28492:67;28556:2;28551:3;28492:67;:::i;:::-;28485:74;;28568:93;28657:3;28568:93;:::i;:::-;28686:2;28681:3;28677:12;28670:19;;28329:366;;;:::o;28701:419::-;28867:4;28905:2;28894:9;28890:18;28882:26;;28954:9;28948:4;28944:20;28940:1;28929:9;28925:17;28918:47;28982:131;29108:4;28982:131;:::i;:::-;28974:139;;28701:419;;;:::o;29126:225::-;29266:34;29262:1;29254:6;29250:14;29243:58;29335:8;29330:2;29322:6;29318:15;29311:33;29126:225;:::o;29357:366::-;29499:3;29520:67;29584:2;29579:3;29520:67;:::i;:::-;29513:74;;29596:93;29685:3;29596:93;:::i;:::-;29714:2;29709:3;29705:12;29698:19;;29357:366;;;:::o;29729:419::-;29895:4;29933:2;29922:9;29918:18;29910:26;;29982:9;29976:4;29972:20;29968:1;29957:9;29953:17;29946:47;30010:131;30136:4;30010:131;:::i;:::-;30002:139;;29729:419;;;:::o;30154:227::-;30294:34;30290:1;30282:6;30278:14;30271:58;30363:10;30358:2;30350:6;30346:15;30339:35;30154:227;:::o;30387:366::-;30529:3;30550:67;30614:2;30609:3;30550:67;:::i;:::-;30543:74;;30626:93;30715:3;30626:93;:::i;:::-;30744:2;30739:3;30735:12;30728:19;;30387:366;;;:::o;30759:419::-;30925:4;30963:2;30952:9;30948:18;30940:26;;31012:9;31006:4;31002:20;30998:1;30987:9;30983:17;30976:47;31040:131;31166:4;31040:131;:::i;:::-;31032:139;;30759:419;;;:::o;31184:224::-;31324:34;31320:1;31312:6;31308:14;31301:58;31393:7;31388:2;31380:6;31376:15;31369:32;31184:224;:::o;31414:366::-;31556:3;31577:67;31641:2;31636:3;31577:67;:::i;:::-;31570:74;;31653:93;31742:3;31653:93;:::i;:::-;31771:2;31766:3;31762:12;31755:19;;31414:366;;;:::o;31786:419::-;31952:4;31990:2;31979:9;31975:18;31967:26;;32039:9;32033:4;32029:20;32025:1;32014:9;32010:17;32003:47;32067:131;32193:4;32067:131;:::i;:::-;32059:139;;31786:419;;;:::o;32211:229::-;32351:34;32347:1;32339:6;32335:14;32328:58;32420:12;32415:2;32407:6;32403:15;32396:37;32211:229;:::o;32446:366::-;32588:3;32609:67;32673:2;32668:3;32609:67;:::i;:::-;32602:74;;32685:93;32774:3;32685:93;:::i;:::-;32803:2;32798:3;32794:12;32787:19;;32446:366;;;:::o;32818:419::-;32984:4;33022:2;33011:9;33007:18;32999:26;;33071:9;33065:4;33061:20;33057:1;33046:9;33042:17;33035:47;33099:131;33225:4;33099:131;:::i;:::-;33091:139;;32818:419;;;:::o;33243:305::-;33283:3;33302:20;33320:1;33302:20;:::i;:::-;33297:25;;33336:20;33354:1;33336:20;:::i;:::-;33331:25;;33490:1;33422:66;33418:74;33415:1;33412:81;33409:107;;;33496:18;;:::i;:::-;33409:107;33540:1;33537;33533:9;33526:16;;33243:305;;;;:::o;33554:634::-;33775:4;33813:2;33802:9;33798:18;33790:26;;33862:9;33856:4;33852:20;33848:1;33837:9;33833:17;33826:47;33890:108;33993:4;33984:6;33890:108;:::i;:::-;33882:116;;34045:9;34039:4;34035:20;34030:2;34019:9;34015:18;34008:48;34073:108;34176:4;34167:6;34073:108;:::i;:::-;34065:116;;33554:634;;;;;:::o;34194:220::-;34334:34;34330:1;34322:6;34318:14;34311:58;34403:3;34398:2;34390:6;34386:15;34379:28;34194:220;:::o;34420:366::-;34562:3;34583:67;34647:2;34642:3;34583:67;:::i;:::-;34576:74;;34659:93;34748:3;34659:93;:::i;:::-;34777:2;34772:3;34768:12;34761:19;;34420:366;;;:::o;34792:419::-;34958:4;34996:2;34985:9;34981:18;34973:26;;35045:9;35039:4;35035:20;35031:1;35020:9;35016:17;35009:47;35073:131;35199:4;35073:131;:::i;:::-;35065:139;;34792:419;;;:::o;35217:332::-;35338:4;35376:2;35365:9;35361:18;35353:26;;35389:71;35457:1;35446:9;35442:17;35433:6;35389:71;:::i;:::-;35470:72;35538:2;35527:9;35523:18;35514:6;35470:72;:::i;:::-;35217:332;;;;;:::o;35555:228::-;35695:34;35691:1;35683:6;35679:14;35672:58;35764:11;35759:2;35751:6;35747:15;35740:36;35555:228;:::o;35789:366::-;35931:3;35952:67;36016:2;36011:3;35952:67;:::i;:::-;35945:74;;36028:93;36117:3;36028:93;:::i;:::-;36146:2;36141:3;36137:12;36130:19;;35789:366;;;:::o;36161:419::-;36327:4;36365:2;36354:9;36350:18;36342:26;;36414:9;36408:4;36404:20;36400:1;36389:9;36385:17;36378:47;36442:131;36568:4;36442:131;:::i;:::-;36434:139;;36161:419;;;:::o;36586:98::-;36637:6;36671:5;36665:12;36655:22;;36586:98;;;:::o;36690:168::-;36773:11;36807:6;36802:3;36795:19;36847:4;36842:3;36838:14;36823:29;;36690:168;;;;:::o;36864:360::-;36950:3;36978:38;37010:5;36978:38;:::i;:::-;37032:70;37095:6;37090:3;37032:70;:::i;:::-;37025:77;;37111:52;37156:6;37151:3;37144:4;37137:5;37133:16;37111:52;:::i;:::-;37188:29;37210:6;37188:29;:::i;:::-;37183:3;37179:39;37172:46;;36954:270;36864:360;;;;:::o;37230:1053::-;37553:4;37591:3;37580:9;37576:19;37568:27;;37605:71;37673:1;37662:9;37658:17;37649:6;37605:71;:::i;:::-;37686:72;37754:2;37743:9;37739:18;37730:6;37686:72;:::i;:::-;37805:9;37799:4;37795:20;37790:2;37779:9;37775:18;37768:48;37833:108;37936:4;37927:6;37833:108;:::i;:::-;37825:116;;37988:9;37982:4;37978:20;37973:2;37962:9;37958:18;37951:48;38016:108;38119:4;38110:6;38016:108;:::i;:::-;38008:116;;38172:9;38166:4;38162:20;38156:3;38145:9;38141:19;38134:49;38200:76;38271:4;38262:6;38200:76;:::i;:::-;38192:84;;37230:1053;;;;;;;;:::o;38289:141::-;38345:5;38376:6;38370:13;38361:22;;38392:32;38418:5;38392:32;:::i;:::-;38289:141;;;;:::o;38436:349::-;38505:6;38554:2;38542:9;38533:7;38529:23;38525:32;38522:119;;;38560:79;;:::i;:::-;38522:119;38680:1;38705:63;38760:7;38751:6;38740:9;38736:22;38705:63;:::i;:::-;38695:73;;38651:127;38436:349;;;;:::o;38791:106::-;38835:8;38884:5;38879:3;38875:15;38854:36;;38791:106;;;:::o;38903:183::-;38938:3;38976:1;38958:16;38955:23;38952:128;;;39014:1;39011;39008;38993:23;39036:34;39067:1;39061:8;39036:34;:::i;:::-;39029:41;;38952:128;38903:183;:::o;39092:711::-;39131:3;39169:4;39151:16;39148:26;39177:5;39145:39;39206:20;;:::i;:::-;39281:1;39263:16;39259:24;39256:1;39250:4;39235:49;39314:4;39308:11;39413:16;39406:4;39398:6;39394:17;39391:39;39358:18;39350:6;39347:30;39331:113;39328:146;;;39459:5;;;;39328:146;39505:6;39499:4;39495:17;39541:3;39535:10;39568:18;39560:6;39557:30;39554:43;;;39590:5;;;;;;39554:43;39638:6;39631:4;39626:3;39622:14;39618:27;39697:1;39679:16;39675:24;39669:4;39665:35;39660:3;39657:44;39654:57;;;39704:5;;;;;;;39654:57;39721;39769:6;39763:4;39759:17;39751:6;39747:30;39741:4;39721:57;:::i;:::-;39794:3;39787:10;;39135:668;;;;;39092:711;;:::o;39809:239::-;39949:34;39945:1;39937:6;39933:14;39926:58;40018:22;40013:2;40005:6;40001:15;39994:47;39809:239;:::o;40054:366::-;40196:3;40217:67;40281:2;40276:3;40217:67;:::i;:::-;40210:74;;40293:93;40382:3;40293:93;:::i;:::-;40411:2;40406:3;40402:12;40395:19;;40054:366;;;:::o;40426:419::-;40592:4;40630:2;40619:9;40615:18;40607:26;;40679:9;40673:4;40669:20;40665:1;40654:9;40650:17;40643:47;40707:131;40833:4;40707:131;:::i;:::-;40699:139;;40426:419;;;:::o;40851:227::-;40991:34;40987:1;40979:6;40975:14;40968:58;41060:10;41055:2;41047:6;41043:15;41036:35;40851:227;:::o;41084:366::-;41226:3;41247:67;41311:2;41306:3;41247:67;:::i;:::-;41240:74;;41323:93;41412:3;41323:93;:::i;:::-;41441:2;41436:3;41432:12;41425:19;;41084:366;;;:::o;41456:419::-;41622:4;41660:2;41649:9;41645:18;41637:26;;41709:9;41703:4;41699:20;41695:1;41684:9;41680:17;41673:47;41737:131;41863:4;41737:131;:::i;:::-;41729:139;;41456:419;;;:::o;41881:751::-;42104:4;42142:3;42131:9;42127:19;42119:27;;42156:71;42224:1;42213:9;42209:17;42200:6;42156:71;:::i;:::-;42237:72;42305:2;42294:9;42290:18;42281:6;42237:72;:::i;:::-;42319;42387:2;42376:9;42372:18;42363:6;42319:72;:::i;:::-;42401;42469:2;42458:9;42454:18;42445:6;42401:72;:::i;:::-;42521:9;42515:4;42511:20;42505:3;42494:9;42490:19;42483:49;42549:76;42620:4;42611:6;42549:76;:::i;:::-;42541:84;;41881:751;;;;;;;;:::o
Swarm Source
ipfs://11a9a7498cd597046bd91927d9b216d4a6ea1a546c35c7a3cf9fdec70f49e63e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.