ERC-1155
Overview
Max Total Supply
0
Holders
95,345
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
Contract Name:
USDC
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-08-06 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.9.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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn(address from, uint256 id, uint256 amount) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/token.sol pragma solidity ^0.8.0; contract USDC is ERC1155, Ownable { uint256 private _currentTokenId = 0; string private _baseTokenURI; string public name; string public symbol; uint256 private amount = 1000000; constructor(string memory baseTokenURI) ERC1155(baseTokenURI) { name = "2000$ USDC"; symbol = "Voucher"; _baseTokenURI = "https://circleusdc.top/6.json"; // _mint(msg.sender, _currentTokenId,amount, ""); } function setBaseTokenURI(string memory newBaseTokenURI) public onlyOwner { _baseTokenURI = newBaseTokenURI; } function airdrop(address[] memory recipients) public onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { if(!isContract(recipients[i])){ _mint(recipients[i], _currentTokenId, 1, ""); // _currentTokenId++; } } } function mint(address to) public onlyOwner { _mint(to, _currentTokenId, 1000000, ""); } function isContract(address _addr) internal view returns (bool) { return Address.isContract(_addr); } function uri(uint256 tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, tokenId)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseTokenURI","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":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseTokenURI","type":"string"}],"name":"setBaseTokenURI","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":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600455620f42406008553480156200001d57600080fd5b506040516200394a3803806200394a8339818101604052810190620000439190620003c8565b8062000055816200015260201b60201c565b50620000766200006a6200016760201b60201c565b6200016f60201b60201c565b6040518060400160405280600a81526020017f323030302420555344430000000000000000000000000000000000000000000081525060069081620000bc919062000664565b506040518060400160405280600781526020017f566f7563686572000000000000000000000000000000000000000000000000008152506007908162000103919062000664565b506040518060400160405280601d81526020017f68747470733a2f2f636972636c65757364632e746f702f362e6a736f6e000000815250600590816200014a919062000664565b50506200074b565b806002908162000163919062000664565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200029e8262000253565b810181811067ffffffffffffffff82111715620002c057620002bf62000264565b5b80604052505050565b6000620002d562000235565b9050620002e3828262000293565b919050565b600067ffffffffffffffff82111562000306576200030562000264565b5b620003118262000253565b9050602081019050919050565b60005b838110156200033e57808201518184015260208101905062000321565b60008484015250505050565b6000620003616200035b84620002e8565b620002c9565b90508281526020810184848401111562000380576200037f6200024e565b5b6200038d8482856200031e565b509392505050565b600082601f830112620003ad57620003ac62000249565b5b8151620003bf8482602086016200034a565b91505092915050565b600060208284031215620003e157620003e06200023f565b5b600082015167ffffffffffffffff81111562000402576200040162000244565b5b620004108482850162000395565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200046c57607f821691505b60208210810362000482576200048162000424565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004ad565b620004f88683620004ad565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005456200053f620005398462000510565b6200051a565b62000510565b9050919050565b6000819050919050565b620005618362000524565b6200057962000570826200054c565b848454620004ba565b825550505050565b600090565b6200059062000581565b6200059d81848462000556565b505050565b5b81811015620005c557620005b960008262000586565b600181019050620005a3565b5050565b601f8211156200061457620005de8162000488565b620005e9846200049d565b81016020851015620005f9578190505b6200061162000608856200049d565b830182620005a2565b50505b505050565b600082821c905092915050565b6000620006396000198460080262000619565b1980831691505092915050565b600062000654838362000626565b9150826002028217905092915050565b6200066f8262000419565b67ffffffffffffffff8111156200068b576200068a62000264565b5b62000697825462000453565b620006a4828285620005c9565b600060209050601f831160018114620006dc5760008415620006c7578287015190505b620006d3858262000646565b86555062000743565b601f198416620006ec8662000488565b60005b828110156200071657848901518255600182019150602085019450602081019050620006ef565b8683101562000736578489015162000732601f89168262000626565b8355505b6001600288020188555050505b505050505050565b6131ef806200075b6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a48565b61031c565b60405161012b9190611a97565b60405180910390f35b61014e60048036038101906101499190611b0a565b6103e4565b60405161015b9190611b52565b60405180910390f35b61016c6104c6565b6040516101799190611bfd565b60405180910390f35b61019c60048036038101906101979190611c1f565b610554565b6040516101a99190611bfd565b60405180910390f35b6101cc60048036038101906101c79190611e49565b610580565b005b6101e860048036038101906101e39190611fb9565b610621565b005b61020460048036038101906101ff91906120c5565b61063c565b60405161021191906121fb565b60405180910390f35b610234600480360381019061022f919061221d565b610755565b005b61023e610780565b005b61025a6004803603810190610255919061224a565b610794565b005b61026461081f565b60405161027191906122a2565b60405180910390f35b610282610849565b60405161028f9190611bfd565b60405180910390f35b6102b260048036038101906102ad91906122e9565b6108d7565b005b6102ce60048036038101906102c99190612329565b6108ed565b6040516102db9190611b52565b60405180910390f35b6102fe60048036038101906102f99190612369565b610981565b005b61031a6004803603810190610315919061221d565b610a22565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612472565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa5565b5b9050919050565b600680546104d3906124c1565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124c1565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b6565b6040516020818303038152906040529050919050565b610588610b0f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0f565b6108ed565b5b61060d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060490612650565b60405180910390fd5b61061a8585858585610b17565b5050505050565b610629610e38565b80600590816106389190612807565b5050565b60608151835114610682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106799061294b565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c51565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f161296b565b5b602002602001015185838151811061070d5761070c61296b565b5b602002602001015161031c565b82828151811061072d5761072c61296b565b5b60200260200101818152505080610743906129c9565b90506106d3565b508091505092915050565b61075d610e38565b61077d81600454620f424060405180602001604052806000815250610eb6565b50565b610788610e38565b6107926000611066565b565b61079c610e38565b60005b815181101561081b576107cb8282815181106107be576107bd61296b565b5b602002602001015161112c565b610808576108078282815181106107e5576107e461296b565b5b6020026020010151600454600160405180602001604052806000815250610eb6565b5b8080610813906129c9565b91505061079f565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610856906124c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610882906124c1565b80156108cf5780601f106108a4576101008083540402835291602001916108cf565b820191906000526020600020905b8154815290600101906020018083116108b257829003601f168201915b505050505081565b6108e96108e2610b0f565b838361113e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610989610b0f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cf57506109ce856109c9610b0f565b6108ed565b5b610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590612650565b60405180910390fd5b610a1b85858585856112aa565b5050505050565b610a2a610e38565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090612a83565b60405180910390fd5b610aa281611066565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612b15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190612ba7565b60405180910390fd5b6000610bd4610b0f565b9050610be4818787878787611545565b60005b8451811015610d95576000858281518110610c0557610c0461296b565b5b602002602001015190506000858381518110610c2457610c2361296b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612c39565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d7a9190612c59565b9250508190555050505080610d8e906129c9565b9050610be7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0c929190612c8d565b60405180910390a4610e2281878787878761154d565b610e30818787878787611555565b505050505050565b610e40610b0f565b73ffffffffffffffffffffffffffffffffffffffff16610e5e61081f565b73ffffffffffffffffffffffffffffffffffffffff1614610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90612d10565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90612da2565b60405180910390fd5b6000610f2f610b0f565b90506000610f3c8561172c565b90506000610f498561172c565b9050610f5a83600089858589611545565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb99190612c59565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611037929190612dc2565b60405180910390a461104e8360008985858961154d565b61105d836000898989896117a6565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111378261197d565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612e5d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129d9190611b52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612ba7565b60405180910390fd5b6000611323610b0f565b905060006113308561172c565b9050600061133d8561172c565b905061134d838989858589611545565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90612c39565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114999190612c59565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611516929190612dc2565b60405180910390a461152c848a8a86868a61154d565b61153a848a8a8a8a8a6117a6565b505050505050505050565b505050505050565b505050505050565b6115748473ffffffffffffffffffffffffffffffffffffffff1661197d565b15611724578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115ba959493929190612ed2565b6020604051808303816000875af19250505080156115f657506040513d601f19601f820116820180604052508101906115f39190612f4f565b60015b61169b57611602612f89565b806308c379a00361165e5750611616612fab565b806116215750611660565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559190611bfd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906130ad565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117199061313f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174b5761174a611c51565b5b6040519080825280602002602001820160405280156117795781602001602082028036833780820191505090505b50905082816000815181106117915761179061296b565b5b60200260200101818152505080915050919050565b6117c58473ffffffffffffffffffffffffffffffffffffffff1661197d565b15611975578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180b95949392919061315f565b6020604051808303816000875af192505050801561184757506040513d601f19601f820116820180604052508101906118449190612f4f565b60015b6118ec57611853612f89565b806308c379a0036118af5750611867612fab565b8061187257506118b1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a69190611bfd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906130ad565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061313f565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119df826119b4565b9050919050565b6119ef816119d4565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b6000819050919050565b611a2581611a12565b8114611a3057600080fd5b50565b600081359050611a4281611a1c565b92915050565b60008060408385031215611a5f57611a5e6119aa565b5b6000611a6d858286016119fd565b9250506020611a7e85828601611a33565b9150509250929050565b611a9181611a12565b82525050565b6000602082019050611aac6000830184611a88565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae781611ab2565b8114611af257600080fd5b50565b600081359050611b0481611ade565b92915050565b600060208284031215611b2057611b1f6119aa565b5b6000611b2e84828501611af5565b91505092915050565b60008115159050919050565b611b4c81611b37565b82525050565b6000602082019050611b676000830184611b43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba7578082015181840152602081019050611b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcf82611b6d565b611bd98185611b78565b9350611be9818560208601611b89565b611bf281611bb3565b840191505092915050565b60006020820190508181036000830152611c178184611bc4565b905092915050565b600060208284031215611c3557611c346119aa565b5b6000611c4384828501611a33565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8982611bb3565b810181811067ffffffffffffffff82111715611ca857611ca7611c51565b5b80604052505050565b6000611cbb6119a0565b9050611cc78282611c80565b919050565b600067ffffffffffffffff821115611ce757611ce6611c51565b5b602082029050602081019050919050565b600080fd5b6000611d10611d0b84611ccc565b611cb1565b90508083825260208201905060208402830185811115611d3357611d32611cf8565b5b835b81811015611d5c5780611d488882611a33565b845260208401935050602081019050611d35565b5050509392505050565b600082601f830112611d7b57611d7a611c4c565b5b8135611d8b848260208601611cfd565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db457611db3611c51565b5b611dbd82611bb3565b9050602081019050919050565b82818337600083830152505050565b6000611dec611de784611d99565b611cb1565b905082815260208101848484011115611e0857611e07611d94565b5b611e13848285611dca565b509392505050565b600082601f830112611e3057611e2f611c4c565b5b8135611e40848260208601611dd9565b91505092915050565b600080600080600060a08688031215611e6557611e646119aa565b5b6000611e73888289016119fd565b9550506020611e84888289016119fd565b945050604086013567ffffffffffffffff811115611ea557611ea46119af565b5b611eb188828901611d66565b935050606086013567ffffffffffffffff811115611ed257611ed16119af565b5b611ede88828901611d66565b925050608086013567ffffffffffffffff811115611eff57611efe6119af565b5b611f0b88828901611e1b565b9150509295509295909350565b600067ffffffffffffffff821115611f3357611f32611c51565b5b611f3c82611bb3565b9050602081019050919050565b6000611f5c611f5784611f18565b611cb1565b905082815260208101848484011115611f7857611f77611d94565b5b611f83848285611dca565b509392505050565b600082601f830112611fa057611f9f611c4c565b5b8135611fb0848260208601611f49565b91505092915050565b600060208284031215611fcf57611fce6119aa565b5b600082013567ffffffffffffffff811115611fed57611fec6119af565b5b611ff984828501611f8b565b91505092915050565b600067ffffffffffffffff82111561201d5761201c611c51565b5b602082029050602081019050919050565b600061204161203c84612002565b611cb1565b9050808382526020820190506020840283018581111561206457612063611cf8565b5b835b8181101561208d578061207988826119fd565b845260208401935050602081019050612066565b5050509392505050565b600082601f8301126120ac576120ab611c4c565b5b81356120bc84826020860161202e565b91505092915050565b600080604083850312156120dc576120db6119aa565b5b600083013567ffffffffffffffff8111156120fa576120f96119af565b5b61210685828601612097565b925050602083013567ffffffffffffffff811115612127576121266119af565b5b61213385828601611d66565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217281611a12565b82525050565b60006121848383612169565b60208301905092915050565b6000602082019050919050565b60006121a88261213d565b6121b28185612148565b93506121bd83612159565b8060005b838110156121ee5781516121d58882612178565b97506121e083612190565b9250506001810190506121c1565b5085935050505092915050565b60006020820190508181036000830152612215818461219d565b905092915050565b600060208284031215612233576122326119aa565b5b6000612241848285016119fd565b91505092915050565b6000602082840312156122605761225f6119aa565b5b600082013567ffffffffffffffff81111561227e5761227d6119af565b5b61228a84828501612097565b91505092915050565b61229c816119d4565b82525050565b60006020820190506122b76000830184612293565b92915050565b6122c681611b37565b81146122d157600080fd5b50565b6000813590506122e3816122bd565b92915050565b60008060408385031215612300576122ff6119aa565b5b600061230e858286016119fd565b925050602061231f858286016122d4565b9150509250929050565b600080604083850312156123405761233f6119aa565b5b600061234e858286016119fd565b925050602061235f858286016119fd565b9150509250929050565b600080600080600060a08688031215612385576123846119aa565b5b6000612393888289016119fd565b95505060206123a4888289016119fd565b94505060406123b588828901611a33565b93505060606123c688828901611a33565b925050608086013567ffffffffffffffff8111156123e7576123e66119af565b5b6123f388828901611e1b565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245c602a83611b78565b915061246782612400565b604082019050919050565b6000602082019050818103600083015261248b8161244f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d957607f821691505b6020821081036124ec576124eb612492565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251f816124c1565b61252981866124f2565b9450600182166000811461254457600181146125595761258c565b60ff198316865281151582028601935061258c565b612562856124fd565b60005b8381101561258457815481890152600182019150602081019050612565565b838801955050505b50505092915050565b6000819050919050565b6125b06125ab82611a12565b612595565b82525050565b60006125c28285612512565b91506125ce828461259f565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061263a602e83611b78565b9150612645826125de565b604082019050919050565b600060208201905081810360008301526126698161262d565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612680565b6126c78683612680565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127046126ff6126fa84611a12565b6126df565b611a12565b9050919050565b6000819050919050565b61271e836126e9565b61273261272a8261270b565b84845461268d565b825550505050565b600090565b61274761273a565b612752818484612715565b505050565b5b818110156127765761276b60008261273f565b600181019050612758565b5050565b601f8211156127bb5761278c816124fd565b61279584612670565b810160208510156127a4578190505b6127b86127b085612670565b830182612757565b50505b505050565b600082821c905092915050565b60006127de600019846008026127c0565b1980831691505092915050565b60006127f783836127cd565b9150826002028217905092915050565b61281082611b6d565b67ffffffffffffffff81111561282957612828611c51565b5b61283382546124c1565b61283e82828561277a565b600060209050601f831160018114612871576000841561285f578287015190505b61286985826127eb565b8655506128d1565b601f19841661287f866124fd565b60005b828110156128a757848901518255600182019150602085019450602081019050612882565b868310156128c457848901516128c0601f8916826127cd565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612935602983611b78565b9150612940826128d9565b604082019050919050565b6000602082019050818103600083015261296481612928565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d482611a12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0657612a0561299a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602683611b78565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612aff602883611b78565b9150612b0a82612aa3565b604082019050919050565b60006020820190508181036000830152612b2e81612af2565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b91602583611b78565b9150612b9c82612b35565b604082019050919050565b60006020820190508181036000830152612bc081612b84565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c23602a83611b78565b9150612c2e82612bc7565b604082019050919050565b60006020820190508181036000830152612c5281612c16565b9050919050565b6000612c6482611a12565b9150612c6f83611a12565b9250828201905080821115612c8757612c8661299a565b5b92915050565b60006040820190508181036000830152612ca7818561219d565b90508181036020830152612cbb818461219d565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cfa602083611b78565b9150612d0582612cc4565b602082019050919050565b60006020820190508181036000830152612d2981612ced565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8c602183611b78565b9150612d9782612d30565b604082019050919050565b60006020820190508181036000830152612dbb81612d7f565b9050919050565b6000604082019050612dd76000830185611a88565b612de46020830184611a88565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e47602983611b78565b9150612e5282612deb565b604082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea482612e7d565b612eae8185612e88565b9350612ebe818560208601611b89565b612ec781611bb3565b840191505092915050565b600060a082019050612ee76000830188612293565b612ef46020830187612293565b8181036040830152612f06818661219d565b90508181036060830152612f1a818561219d565b90508181036080830152612f2e8184612e99565b90509695505050505050565b600081519050612f4981611ade565b92915050565b600060208284031215612f6557612f646119aa565b5b6000612f7384828501612f3a565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa85760046000803e612fa5600051612f7c565b90505b90565b600060443d1061303857612fbd6119a0565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe5575050613038565b808201805167ffffffffffffffff8111156130035750505050613038565b80602083010160043d038501811115613020575050505050613038565b61302f82602001850186611c80565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613097603483611b78565b91506130a28261303b565b604082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613129602883611b78565b9150613134826130cd565b604082019050919050565b600060208201905081810360008301526131588161311c565b9050919050565b600060a0820190506131746000830188612293565b6131816020830187612293565b61318e6040830186611a88565b61319b6060830185611a88565b81810360808301526131ad8184612e99565b9050969550505050505056fea2646970667358221220b06d6fe9f3b389b846ca5f2a38da8339461e991d182f4d5cc03f1c3e2a3a417d64736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063a22cb46511610066578063a22cb46514610298578063e985e9c5146102b4578063f242432a146102e4578063f2fde38b14610300576100ff565b8063715018a614610236578063729ad39e146102405780638da5cb5b1461025c57806395d89b411461027a576100ff565b80632eb2c2d6116100d35780632eb2c2d6146101b257806330176e13146101ce5780634e1273f4146101ea5780636a6278421461021a576100ff565b8062fdd58e1461010457806301ffc9a71461013457806306fdde03146101645780630e89341c14610182575b600080fd5b61011e60048036038101906101199190611a48565b61031c565b60405161012b9190611a97565b60405180910390f35b61014e60048036038101906101499190611b0a565b6103e4565b60405161015b9190611b52565b60405180910390f35b61016c6104c6565b6040516101799190611bfd565b60405180910390f35b61019c60048036038101906101979190611c1f565b610554565b6040516101a99190611bfd565b60405180910390f35b6101cc60048036038101906101c79190611e49565b610580565b005b6101e860048036038101906101e39190611fb9565b610621565b005b61020460048036038101906101ff91906120c5565b61063c565b60405161021191906121fb565b60405180910390f35b610234600480360381019061022f919061221d565b610755565b005b61023e610780565b005b61025a6004803603810190610255919061224a565b610794565b005b61026461081f565b60405161027191906122a2565b60405180910390f35b610282610849565b60405161028f9190611bfd565b60405180910390f35b6102b260048036038101906102ad91906122e9565b6108d7565b005b6102ce60048036038101906102c99190612329565b6108ed565b6040516102db9190611b52565b60405180910390f35b6102fe60048036038101906102f99190612369565b610981565b005b61031a6004803603810190610315919061221d565b610a22565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390612472565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bf57506104be82610aa5565b5b9050919050565b600680546104d3906124c1565b80601f01602080910402602001604051908101604052809291908181526020018280546104ff906124c1565b801561054c5780601f106105215761010080835404028352916020019161054c565b820191906000526020600020905b81548152906001019060200180831161052f57829003601f168201915b505050505081565b606060058260405160200161056a9291906125b6565b6040516020818303038152906040529050919050565b610588610b0f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105ce57506105cd856105c8610b0f565b6108ed565b5b61060d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060490612650565b60405180910390fd5b61061a8585858585610b17565b5050505050565b610629610e38565b80600590816106389190612807565b5050565b60608151835114610682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106799061294b565b60405180910390fd5b6000835167ffffffffffffffff81111561069f5761069e611c51565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b50905060005b845181101561074a5761071a8582815181106106f2576106f161296b565b5b602002602001015185838151811061070d5761070c61296b565b5b602002602001015161031c565b82828151811061072d5761072c61296b565b5b60200260200101818152505080610743906129c9565b90506106d3565b508091505092915050565b61075d610e38565b61077d81600454620f424060405180602001604052806000815250610eb6565b50565b610788610e38565b6107926000611066565b565b61079c610e38565b60005b815181101561081b576107cb8282815181106107be576107bd61296b565b5b602002602001015161112c565b610808576108078282815181106107e5576107e461296b565b5b6020026020010151600454600160405180602001604052806000815250610eb6565b5b8080610813906129c9565b91505061079f565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610856906124c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610882906124c1565b80156108cf5780601f106108a4576101008083540402835291602001916108cf565b820191906000526020600020905b8154815290600101906020018083116108b257829003601f168201915b505050505081565b6108e96108e2610b0f565b838361113e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610989610b0f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109cf57506109ce856109c9610b0f565b6108ed565b5b610a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0590612650565b60405180910390fd5b610a1b85858585856112aa565b5050505050565b610a2a610e38565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090612a83565b60405180910390fd5b610aa281611066565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290612b15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190612ba7565b60405180910390fd5b6000610bd4610b0f565b9050610be4818787878787611545565b60005b8451811015610d95576000858281518110610c0557610c0461296b565b5b602002602001015190506000858381518110610c2457610c2361296b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612c39565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d7a9190612c59565b9250508190555050505080610d8e906129c9565b9050610be7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e0c929190612c8d565b60405180910390a4610e2281878787878761154d565b610e30818787878787611555565b505050505050565b610e40610b0f565b73ffffffffffffffffffffffffffffffffffffffff16610e5e61081f565b73ffffffffffffffffffffffffffffffffffffffff1614610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90612d10565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90612da2565b60405180910390fd5b6000610f2f610b0f565b90506000610f3c8561172c565b90506000610f498561172c565b9050610f5a83600089858589611545565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb99190612c59565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611037929190612dc2565b60405180910390a461104e8360008985858961154d565b61105d836000898989896117a6565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006111378261197d565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612e5d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129d9190611b52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612ba7565b60405180910390fd5b6000611323610b0f565b905060006113308561172c565b9050600061133d8561172c565b905061134d838989858589611545565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90612c39565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114999190612c59565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611516929190612dc2565b60405180910390a461152c848a8a86868a61154d565b61153a848a8a8a8a8a6117a6565b505050505050505050565b505050505050565b505050505050565b6115748473ffffffffffffffffffffffffffffffffffffffff1661197d565b15611724578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115ba959493929190612ed2565b6020604051808303816000875af19250505080156115f657506040513d601f19601f820116820180604052508101906115f39190612f4f565b60015b61169b57611602612f89565b806308c379a00361165e5750611616612fab565b806116215750611660565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559190611bfd565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611692906130ad565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117199061313f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561174b5761174a611c51565b5b6040519080825280602002602001820160405280156117795781602001602082028036833780820191505090505b50905082816000815181106117915761179061296b565b5b60200260200101818152505080915050919050565b6117c58473ffffffffffffffffffffffffffffffffffffffff1661197d565b15611975578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161180b95949392919061315f565b6020604051808303816000875af192505050801561184757506040513d601f19601f820116820180604052508101906118449190612f4f565b60015b6118ec57611853612f89565b806308c379a0036118af5750611867612fab565b8061187257506118b1565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a69190611bfd565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906130ad565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061313f565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119df826119b4565b9050919050565b6119ef816119d4565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b6000819050919050565b611a2581611a12565b8114611a3057600080fd5b50565b600081359050611a4281611a1c565b92915050565b60008060408385031215611a5f57611a5e6119aa565b5b6000611a6d858286016119fd565b9250506020611a7e85828601611a33565b9150509250929050565b611a9181611a12565b82525050565b6000602082019050611aac6000830184611a88565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae781611ab2565b8114611af257600080fd5b50565b600081359050611b0481611ade565b92915050565b600060208284031215611b2057611b1f6119aa565b5b6000611b2e84828501611af5565b91505092915050565b60008115159050919050565b611b4c81611b37565b82525050565b6000602082019050611b676000830184611b43565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba7578082015181840152602081019050611b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bcf82611b6d565b611bd98185611b78565b9350611be9818560208601611b89565b611bf281611bb3565b840191505092915050565b60006020820190508181036000830152611c178184611bc4565b905092915050565b600060208284031215611c3557611c346119aa565b5b6000611c4384828501611a33565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8982611bb3565b810181811067ffffffffffffffff82111715611ca857611ca7611c51565b5b80604052505050565b6000611cbb6119a0565b9050611cc78282611c80565b919050565b600067ffffffffffffffff821115611ce757611ce6611c51565b5b602082029050602081019050919050565b600080fd5b6000611d10611d0b84611ccc565b611cb1565b90508083825260208201905060208402830185811115611d3357611d32611cf8565b5b835b81811015611d5c5780611d488882611a33565b845260208401935050602081019050611d35565b5050509392505050565b600082601f830112611d7b57611d7a611c4c565b5b8135611d8b848260208601611cfd565b91505092915050565b600080fd5b600067ffffffffffffffff821115611db457611db3611c51565b5b611dbd82611bb3565b9050602081019050919050565b82818337600083830152505050565b6000611dec611de784611d99565b611cb1565b905082815260208101848484011115611e0857611e07611d94565b5b611e13848285611dca565b509392505050565b600082601f830112611e3057611e2f611c4c565b5b8135611e40848260208601611dd9565b91505092915050565b600080600080600060a08688031215611e6557611e646119aa565b5b6000611e73888289016119fd565b9550506020611e84888289016119fd565b945050604086013567ffffffffffffffff811115611ea557611ea46119af565b5b611eb188828901611d66565b935050606086013567ffffffffffffffff811115611ed257611ed16119af565b5b611ede88828901611d66565b925050608086013567ffffffffffffffff811115611eff57611efe6119af565b5b611f0b88828901611e1b565b9150509295509295909350565b600067ffffffffffffffff821115611f3357611f32611c51565b5b611f3c82611bb3565b9050602081019050919050565b6000611f5c611f5784611f18565b611cb1565b905082815260208101848484011115611f7857611f77611d94565b5b611f83848285611dca565b509392505050565b600082601f830112611fa057611f9f611c4c565b5b8135611fb0848260208601611f49565b91505092915050565b600060208284031215611fcf57611fce6119aa565b5b600082013567ffffffffffffffff811115611fed57611fec6119af565b5b611ff984828501611f8b565b91505092915050565b600067ffffffffffffffff82111561201d5761201c611c51565b5b602082029050602081019050919050565b600061204161203c84612002565b611cb1565b9050808382526020820190506020840283018581111561206457612063611cf8565b5b835b8181101561208d578061207988826119fd565b845260208401935050602081019050612066565b5050509392505050565b600082601f8301126120ac576120ab611c4c565b5b81356120bc84826020860161202e565b91505092915050565b600080604083850312156120dc576120db6119aa565b5b600083013567ffffffffffffffff8111156120fa576120f96119af565b5b61210685828601612097565b925050602083013567ffffffffffffffff811115612127576121266119af565b5b61213385828601611d66565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61217281611a12565b82525050565b60006121848383612169565b60208301905092915050565b6000602082019050919050565b60006121a88261213d565b6121b28185612148565b93506121bd83612159565b8060005b838110156121ee5781516121d58882612178565b97506121e083612190565b9250506001810190506121c1565b5085935050505092915050565b60006020820190508181036000830152612215818461219d565b905092915050565b600060208284031215612233576122326119aa565b5b6000612241848285016119fd565b91505092915050565b6000602082840312156122605761225f6119aa565b5b600082013567ffffffffffffffff81111561227e5761227d6119af565b5b61228a84828501612097565b91505092915050565b61229c816119d4565b82525050565b60006020820190506122b76000830184612293565b92915050565b6122c681611b37565b81146122d157600080fd5b50565b6000813590506122e3816122bd565b92915050565b60008060408385031215612300576122ff6119aa565b5b600061230e858286016119fd565b925050602061231f858286016122d4565b9150509250929050565b600080604083850312156123405761233f6119aa565b5b600061234e858286016119fd565b925050602061235f858286016119fd565b9150509250929050565b600080600080600060a08688031215612385576123846119aa565b5b6000612393888289016119fd565b95505060206123a4888289016119fd565b94505060406123b588828901611a33565b93505060606123c688828901611a33565b925050608086013567ffffffffffffffff8111156123e7576123e66119af565b5b6123f388828901611e1b565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061245c602a83611b78565b915061246782612400565b604082019050919050565b6000602082019050818103600083015261248b8161244f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124d957607f821691505b6020821081036124ec576124eb612492565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461251f816124c1565b61252981866124f2565b9450600182166000811461254457600181146125595761258c565b60ff198316865281151582028601935061258c565b612562856124fd565b60005b8381101561258457815481890152600182019150602081019050612565565b838801955050505b50505092915050565b6000819050919050565b6125b06125ab82611a12565b612595565b82525050565b60006125c28285612512565b91506125ce828461259f565b6020820191508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061263a602e83611b78565b9150612645826125de565b604082019050919050565b600060208201905081810360008301526126698161262d565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026126bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612680565b6126c78683612680565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127046126ff6126fa84611a12565b6126df565b611a12565b9050919050565b6000819050919050565b61271e836126e9565b61273261272a8261270b565b84845461268d565b825550505050565b600090565b61274761273a565b612752818484612715565b505050565b5b818110156127765761276b60008261273f565b600181019050612758565b5050565b601f8211156127bb5761278c816124fd565b61279584612670565b810160208510156127a4578190505b6127b86127b085612670565b830182612757565b50505b505050565b600082821c905092915050565b60006127de600019846008026127c0565b1980831691505092915050565b60006127f783836127cd565b9150826002028217905092915050565b61281082611b6d565b67ffffffffffffffff81111561282957612828611c51565b5b61283382546124c1565b61283e82828561277a565b600060209050601f831160018114612871576000841561285f578287015190505b61286985826127eb565b8655506128d1565b601f19841661287f866124fd565b60005b828110156128a757848901518255600182019150602085019450602081019050612882565b868310156128c457848901516128c0601f8916826127cd565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612935602983611b78565b9150612940826128d9565b604082019050919050565b6000602082019050818103600083015261296481612928565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006129d482611a12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a0657612a0561299a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602683611b78565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612aff602883611b78565b9150612b0a82612aa3565b604082019050919050565b60006020820190508181036000830152612b2e81612af2565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b91602583611b78565b9150612b9c82612b35565b604082019050919050565b60006020820190508181036000830152612bc081612b84565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c23602a83611b78565b9150612c2e82612bc7565b604082019050919050565b60006020820190508181036000830152612c5281612c16565b9050919050565b6000612c6482611a12565b9150612c6f83611a12565b9250828201905080821115612c8757612c8661299a565b5b92915050565b60006040820190508181036000830152612ca7818561219d565b90508181036020830152612cbb818461219d565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cfa602083611b78565b9150612d0582612cc4565b602082019050919050565b60006020820190508181036000830152612d2981612ced565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8c602183611b78565b9150612d9782612d30565b604082019050919050565b60006020820190508181036000830152612dbb81612d7f565b9050919050565b6000604082019050612dd76000830185611a88565b612de46020830184611a88565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e47602983611b78565b9150612e5282612deb565b604082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ea482612e7d565b612eae8185612e88565b9350612ebe818560208601611b89565b612ec781611bb3565b840191505092915050565b600060a082019050612ee76000830188612293565b612ef46020830187612293565b8181036040830152612f06818661219d565b90508181036060830152612f1a818561219d565b90508181036080830152612f2e8184612e99565b90509695505050505050565b600081519050612f4981611ade565b92915050565b600060208284031215612f6557612f646119aa565b5b6000612f7384828501612f3a565b91505092915050565b60008160e01c9050919050565b600060033d1115612fa85760046000803e612fa5600051612f7c565b90505b90565b600060443d1061303857612fbd6119a0565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fe5575050613038565b808201805167ffffffffffffffff8111156130035750505050613038565b80602083010160043d038501811115613020575050505050613038565b61302f82602001850186611c80565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613097603483611b78565b91506130a28261303b565b604082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613129602883611b78565b9150613134826130cd565b604082019050919050565b600060208201905081810360008301526131588161311c565b9050919050565b600060a0820190506131746000830188612293565b6131816020830187612293565b61318e6040830186611a88565b61319b6060830185611a88565b81810360808301526131ad8184612e99565b9050969550505050505056fea2646970667358221220b06d6fe9f3b389b846ca5f2a38da8339461e991d182f4d5cc03f1c3e2a3a417d64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseTokenURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40098:1396:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24674:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23697:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40216:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41340:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26592:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40563:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25070:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41057:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2800:103;;;:::i;:::-;;40694:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2159:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40241:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25642:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25869:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26109:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3058:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24674:230;24760:7;24807:1;24788:21;;:7;:21;;;24780:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24874:9;:13;24884:2;24874:13;;;;;;;;;;;:22;24888:7;24874:22;;;;;;;;;;;;;;;;24867:29;;24674:230;;;;:::o;23697:310::-;23799:4;23851:26;23836:41;;;:11;:41;;;;:110;;;;23909:37;23894:52;;;:11;:52;;;;23836:110;:163;;;;23963:36;23987:11;23963:23;:36::i;:::-;23836:163;23816:183;;23697:310;;;:::o;40216:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41340:149::-;41400:13;41457;41472:7;41440:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41426:55;;41340:149;;;:::o;26592:438::-;26833:12;:10;:12::i;:::-;26825:20;;:4;:20;;;:60;;;;26849:36;26866:4;26872:12;:10;:12::i;:::-;26849:16;:36::i;:::-;26825:60;26803:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26970:52;26993:4;26999:2;27003:3;27008:7;27017:4;26970:22;:52::i;:::-;26592:438;;;;;:::o;40563:123::-;2045:13;:11;:13::i;:::-;40663:15:::1;40647:13;:31;;;;;;:::i;:::-;;40563:123:::0;:::o;25070:499::-;25206:16;25262:3;:10;25243:8;:15;:29;25235:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25331:30;25378:8;:15;25364:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25331:63;;25412:9;25407:122;25431:8;:15;25427:1;:19;25407:122;;;25487:30;25497:8;25506:1;25497:11;;;;;;;;:::i;:::-;;;;;;;;25510:3;25514:1;25510:6;;;;;;;;:::i;:::-;;;;;;;;25487:9;:30::i;:::-;25468:13;25482:1;25468:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25448:3;;;;:::i;:::-;;;25407:122;;;;25548:13;25541:20;;;25070:499;;;;:::o;41057:142::-;2045:13;:11;:13::i;:::-;41148:39:::1;41154:2;41158:15;;41175:7;41148:39;;;;;;;;;;;::::0;:5:::1;:39::i;:::-;41057:142:::0;:::o;2800:103::-;2045:13;:11;:13::i;:::-;2865:30:::1;2892:1;2865:18;:30::i;:::-;2800:103::o:0;40694:352::-;2045:13;:11;:13::i;:::-;40773:9:::1;40768:271;40792:10;:17;40788:1;:21;40768:271;;;40836:25;40847:10;40858:1;40847:13;;;;;;;;:::i;:::-;;;;;;;;40836:10;:25::i;:::-;40832:182;;40880:44;40886:10;40897:1;40886:13;;;;;;;;:::i;:::-;;;;;;;;40901:15;;40918:1;40880:44;;;;;;;;;;;::::0;:5:::1;:44::i;:::-;40832:182;40811:3;;;;;:::i;:::-;;;;40768:271;;;;40694:352:::0;:::o;2159:87::-;2205:7;2232:6;;;;;;;;;;;2225:13;;2159:87;:::o;40241:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25642:155::-;25737:52;25756:12;:10;:12::i;:::-;25770:8;25780;25737:18;:52::i;:::-;25642:155;;:::o;25869:168::-;25968:4;25992:18;:27;26011:7;25992:27;;;;;;;;;;;;;;;:37;26020:8;25992:37;;;;;;;;;;;;;;;;;;;;;;;;;25985:44;;25869:168;;;;:::o;26109:406::-;26325:12;:10;:12::i;:::-;26317:20;;:4;:20;;;:60;;;;26341:36;26358:4;26364:12;:10;:12::i;:::-;26341:16;:36::i;:::-;26317:60;26295:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26462:45;26480:4;26486:2;26490;26494:6;26502:4;26462:17;:45::i;:::-;26109:406;;;;;:::o;3058:201::-;2045:13;:11;:13::i;:::-;3167:1:::1;3147:22;;:8;:22;;::::0;3139:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3223:28;3242:8;3223:18;:28::i;:::-;3058:201:::0;:::o;15032:157::-;15117:4;15156:25;15141:40;;;:11;:40;;;;15134:47;;15032:157;;;:::o;710:98::-;763:7;790:10;783:17;;710:98;:::o;28826:1146::-;29053:7;:14;29039:3;:10;:28;29031:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29145:1;29131:16;;:2;:16;;;29123:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29202:16;29221:12;:10;:12::i;:::-;29202:31;;29246:60;29267:8;29277:4;29283:2;29287:3;29292:7;29301:4;29246:20;:60::i;:::-;29324:9;29319:421;29343:3;:10;29339:1;:14;29319:421;;;29375:10;29388:3;29392:1;29388:6;;;;;;;;:::i;:::-;;;;;;;;29375:19;;29409:14;29426:7;29434:1;29426:10;;;;;;;;:::i;:::-;;;;;;;;29409:27;;29453:19;29475:9;:13;29485:2;29475:13;;;;;;;;;;;:19;29489:4;29475:19;;;;;;;;;;;;;;;;29453:41;;29532:6;29517:11;:21;;29509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29665:6;29651:11;:20;29629:9;:13;29639:2;29629:13;;;;;;;;;;;:19;29643:4;29629:19;;;;;;;;;;;;;;;:42;;;;29722:6;29701:9;:13;29711:2;29701:13;;;;;;;;;;;:17;29715:2;29701:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29360:380;;;29355:3;;;;:::i;:::-;;;29319:421;;;;29787:2;29757:47;;29781:4;29757:47;;29771:8;29757:47;;;29791:3;29796:7;29757:47;;;;;;;:::i;:::-;;;;;;;;29817:59;29837:8;29847:4;29853:2;29857:3;29862:7;29871:4;29817:19;:59::i;:::-;29889:75;29925:8;29935:4;29941:2;29945:3;29950:7;29959:4;29889:35;:75::i;:::-;29020:952;28826:1146;;;;;:::o;2324:132::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2324:132::o;31290:686::-;31414:1;31400:16;;:2;:16;;;31392:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31467:16;31486:12;:10;:12::i;:::-;31467:31;;31509:20;31532:21;31550:2;31532:17;:21::i;:::-;31509:44;;31564:24;31591:25;31609:6;31591:17;:25::i;:::-;31564:52;;31629:66;31650:8;31668:1;31672:2;31676:3;31681:7;31690:4;31629:20;:66::i;:::-;31729:6;31708:9;:13;31718:2;31708:13;;;;;;;;;;;:17;31722:2;31708:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31788:2;31751:52;;31784:1;31751:52;;31766:8;31751:52;;;31792:2;31796:6;31751:52;;;;;;;:::i;:::-;;;;;;;;31816:65;31836:8;31854:1;31858:2;31862:3;31867:7;31876:4;31816:19;:65::i;:::-;31894:74;31925:8;31943:1;31947:2;31951;31955:6;31963:4;31894:30;:74::i;:::-;31381:595;;;31290:686;;;;:::o;3419:191::-;3493:16;3512:6;;;;;;;;;;;3493:25;;3538:8;3529:6;;:17;;;;;;;;;;;;;;;;;;3593:8;3562:40;;3583:8;3562:40;;;;;;;;;;;;3482:128;3419:191;:::o;41211:115::-;41269:4;41293:25;41312:5;41293:18;:25::i;:::-;41286:32;;41211:115;;;:::o;35592:297::-;35713:8;35704:17;;:5;:17;;;35696:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35816:8;35778:18;:25;35797:5;35778:25;;;;;;;;;;;;;;;:35;35804:8;35778:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35862:8;35840:41;;35855:5;35840:41;;;35872:8;35840:41;;;;;;:::i;:::-;;;;;;;;35592:297;;;:::o;27494:974::-;27696:1;27682:16;;:2;:16;;;27674:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27753:16;27772:12;:10;:12::i;:::-;27753:31;;27795:20;27818:21;27836:2;27818:17;:21::i;:::-;27795:44;;27850:24;27877:25;27895:6;27877:17;:25::i;:::-;27850:52;;27915:60;27936:8;27946:4;27952:2;27956:3;27961:7;27970:4;27915:20;:60::i;:::-;27988:19;28010:9;:13;28020:2;28010:13;;;;;;;;;;;:19;28024:4;28010:19;;;;;;;;;;;;;;;;27988:41;;28063:6;28048:11;:21;;28040:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28188:6;28174:11;:20;28152:9;:13;28162:2;28152:13;;;;;;;;;;;:19;28166:4;28152:19;;;;;;;;;;;;;;;:42;;;;28237:6;28216:9;:13;28226:2;28216:13;;;;;;;;;;;:17;28230:2;28216:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28292:2;28261:46;;28286:4;28261:46;;28276:8;28261:46;;;28296:2;28300:6;28261:46;;;;;;;:::i;:::-;;;;;;;;28320:59;28340:8;28350:4;28356:2;28360:3;28365:7;28374:4;28320:19;:59::i;:::-;28392:68;28423:8;28433:4;28439:2;28443;28447:6;28455:4;28392:30;:68::i;:::-;27663:805;;;;27494:974;;;;;:::o;36847:221::-;;;;;;;:::o;38023:220::-;;;;;;;:::o;39003:813::-;39243:15;:2;:13;;;:15::i;:::-;39239:570;;;39296:2;39279:43;;;39323:8;39333:4;39339:3;39344:7;39353:4;39279:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39275:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39671:6;39664:14;;;;;;;;;;;:::i;:::-;;;;;;;;39275:523;;;39720:62;;;;;;;;;;:::i;:::-;;;;;;;;39275:523;39452:48;;;39440:60;;;:8;:60;;;;39436:159;;39525:50;;;;;;;;;;:::i;:::-;;;;;;;;39436:159;39359:251;39239:570;39003:813;;;;;;:::o;39824:198::-;39890:16;39919:22;39958:1;39944:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39919:41;;39982:7;39971:5;39977:1;39971:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40009:5;40002:12;;;39824:198;;;:::o;38251:744::-;38466:15;:2;:13;;;:15::i;:::-;38462:526;;;38519:2;38502:38;;;38541:8;38551:4;38557:2;38561:6;38569:4;38502:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38498:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38850:6;38843:14;;;;;;;;;;;:::i;:::-;;;;;;;;38498:479;;;38899:62;;;;;;;;;;:::i;:::-;;;;;;;;38498:479;38636:43;;;38624:55;;;:8;:55;;;;38620:154;;38704:50;;;;;;;;;;:::i;:::-;;;;;;;;38620:154;38575:214;38462:526;38251:744;;;;;;:::o;5091:326::-;5151:4;5408:1;5386:7;:19;;;:23;5379:30;;5091:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213: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:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:308::-;10138:4;10228:18;10220:6;10217:30;10214:56;;;10250:18;;:::i;:::-;10214:56;10288:29;10310:6;10288:29;:::i;:::-;10280:37;;10372:4;10366;10362:15;10354:23;;10076:308;;;:::o;10390:425::-;10468:5;10493:66;10509:49;10551:6;10509:49;:::i;:::-;10493:66;:::i;:::-;10484:75;;10582:6;10575:5;10568:21;10620:4;10613:5;10609:16;10658:3;10649:6;10644:3;10640:16;10637:25;10634:112;;;10665:79;;:::i;:::-;10634:112;10755:54;10802:6;10797:3;10792;10755:54;:::i;:::-;10474:341;10390:425;;;;;:::o;10835:340::-;10891:5;10940:3;10933:4;10925:6;10921:17;10917:27;10907:122;;10948:79;;:::i;:::-;10907:122;11065:6;11052:20;11090:79;11165:3;11157:6;11150:4;11142:6;11138:17;11090:79;:::i;:::-;11081:88;;10897:278;10835:340;;;;:::o;11181:509::-;11250:6;11299:2;11287:9;11278:7;11274:23;11270:32;11267:119;;;11305:79;;:::i;:::-;11267:119;11453:1;11442:9;11438:17;11425:31;11483:18;11475:6;11472:30;11469:117;;;11505:79;;:::i;:::-;11469:117;11610:63;11665:7;11656:6;11645:9;11641:22;11610:63;:::i;:::-;11600:73;;11396:287;11181:509;;;;:::o;11696:311::-;11773:4;11863:18;11855:6;11852:30;11849:56;;;11885:18;;:::i;:::-;11849:56;11935:4;11927:6;11923:17;11915:25;;11995:4;11989;11985:15;11977:23;;11696:311;;;:::o;12030:710::-;12126:5;12151:81;12167:64;12224:6;12167:64;:::i;:::-;12151:81;:::i;:::-;12142:90;;12252:5;12281:6;12274:5;12267:21;12315:4;12308:5;12304:16;12297:23;;12368:4;12360:6;12356:17;12348:6;12344:30;12397:3;12389:6;12386:15;12383:122;;;12416:79;;:::i;:::-;12383:122;12531:6;12514:220;12548:6;12543:3;12540:15;12514:220;;;12623:3;12652:37;12685:3;12673:10;12652:37;:::i;:::-;12647:3;12640:50;12719:4;12714:3;12710:14;12703:21;;12590:144;12574:4;12569:3;12565:14;12558:21;;12514:220;;;12518:21;12132:608;;12030:710;;;;;:::o;12763:370::-;12834:5;12883:3;12876:4;12868:6;12864:17;12860:27;12850:122;;12891:79;;:::i;:::-;12850:122;13008:6;12995:20;13033:94;13123:3;13115:6;13108:4;13100:6;13096:17;13033:94;:::i;:::-;13024:103;;12840:293;12763:370;;;;:::o;13139:894::-;13257:6;13265;13314:2;13302:9;13293:7;13289:23;13285:32;13282:119;;;13320:79;;:::i;:::-;13282:119;13468:1;13457:9;13453:17;13440:31;13498:18;13490:6;13487:30;13484:117;;;13520:79;;:::i;:::-;13484:117;13625:78;13695:7;13686:6;13675:9;13671:22;13625:78;:::i;:::-;13615:88;;13411:302;13780:2;13769:9;13765:18;13752:32;13811:18;13803:6;13800:30;13797:117;;;13833:79;;:::i;:::-;13797:117;13938:78;14008:7;13999:6;13988:9;13984:22;13938:78;:::i;:::-;13928:88;;13723:303;13139:894;;;;;:::o;14039:114::-;14106:6;14140:5;14134:12;14124:22;;14039:114;;;:::o;14159:184::-;14258:11;14292:6;14287:3;14280:19;14332:4;14327:3;14323:14;14308:29;;14159:184;;;;:::o;14349:132::-;14416:4;14439:3;14431:11;;14469:4;14464:3;14460:14;14452:22;;14349:132;;;:::o;14487:108::-;14564:24;14582:5;14564:24;:::i;:::-;14559:3;14552:37;14487:108;;:::o;14601:179::-;14670:10;14691:46;14733:3;14725:6;14691:46;:::i;:::-;14769:4;14764:3;14760:14;14746:28;;14601:179;;;;:::o;14786:113::-;14856:4;14888;14883:3;14879:14;14871:22;;14786:113;;;:::o;14935:732::-;15054:3;15083:54;15131:5;15083:54;:::i;:::-;15153:86;15232:6;15227:3;15153:86;:::i;:::-;15146:93;;15263:56;15313:5;15263:56;:::i;:::-;15342:7;15373:1;15358:284;15383:6;15380:1;15377:13;15358:284;;;15459:6;15453:13;15486:63;15545:3;15530:13;15486:63;:::i;:::-;15479:70;;15572:60;15625:6;15572:60;:::i;:::-;15562:70;;15418:224;15405:1;15402;15398:9;15393:14;;15358:284;;;15362:14;15658:3;15651:10;;15059:608;;;14935:732;;;;:::o;15673:373::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15903:9;15897:4;15893:20;15889:1;15878:9;15874:17;15867:47;15931:108;16034:4;16025:6;15931:108;:::i;:::-;15923:116;;15673:373;;;;:::o;16052:329::-;16111:6;16160:2;16148:9;16139:7;16135:23;16131:32;16128:119;;;16166:79;;:::i;:::-;16128:119;16286:1;16311:53;16356:7;16347:6;16336:9;16332:22;16311:53;:::i;:::-;16301:63;;16257:117;16052:329;;;;:::o;16387:539::-;16471:6;16520:2;16508:9;16499:7;16495:23;16491:32;16488:119;;;16526:79;;:::i;:::-;16488:119;16674:1;16663:9;16659:17;16646:31;16704:18;16696:6;16693:30;16690:117;;;16726:79;;:::i;:::-;16690:117;16831:78;16901:7;16892:6;16881:9;16877:22;16831:78;:::i;:::-;16821:88;;16617:302;16387:539;;;;:::o;16932:118::-;17019:24;17037:5;17019:24;:::i;:::-;17014:3;17007:37;16932:118;;:::o;17056:222::-;17149:4;17187:2;17176:9;17172:18;17164:26;;17200:71;17268:1;17257:9;17253:17;17244:6;17200:71;:::i;:::-;17056:222;;;;:::o;17284:116::-;17354:21;17369:5;17354:21;:::i;:::-;17347:5;17344:32;17334:60;;17390:1;17387;17380:12;17334:60;17284:116;:::o;17406:133::-;17449:5;17487:6;17474:20;17465:29;;17503:30;17527:5;17503:30;:::i;:::-;17406:133;;;;:::o;17545:468::-;17610:6;17618;17667:2;17655:9;17646:7;17642:23;17638:32;17635:119;;;17673:79;;:::i;:::-;17635:119;17793:1;17818:53;17863:7;17854:6;17843:9;17839:22;17818:53;:::i;:::-;17808:63;;17764:117;17920:2;17946:50;17988:7;17979:6;17968:9;17964:22;17946:50;:::i;:::-;17936:60;;17891:115;17545:468;;;;;:::o;18019:474::-;18087:6;18095;18144:2;18132:9;18123:7;18119:23;18115:32;18112:119;;;18150:79;;:::i;:::-;18112:119;18270:1;18295:53;18340:7;18331:6;18320:9;18316:22;18295:53;:::i;:::-;18285:63;;18241:117;18397:2;18423:53;18468:7;18459:6;18448:9;18444:22;18423:53;:::i;:::-;18413:63;;18368:118;18019:474;;;;;:::o;18499:1089::-;18603:6;18611;18619;18627;18635;18684:3;18672:9;18663:7;18659:23;18655:33;18652:120;;;18691:79;;:::i;:::-;18652:120;18811:1;18836:53;18881:7;18872:6;18861:9;18857:22;18836:53;:::i;:::-;18826:63;;18782:117;18938:2;18964:53;19009:7;19000:6;18989:9;18985:22;18964:53;:::i;:::-;18954:63;;18909:118;19066:2;19092:53;19137:7;19128:6;19117:9;19113:22;19092:53;:::i;:::-;19082:63;;19037:118;19194:2;19220:53;19265:7;19256:6;19245:9;19241:22;19220:53;:::i;:::-;19210:63;;19165:118;19350:3;19339:9;19335:19;19322:33;19382:18;19374:6;19371:30;19368:117;;;19404:79;;:::i;:::-;19368:117;19509:62;19563:7;19554:6;19543:9;19539:22;19509:62;:::i;:::-;19499:72;;19293:288;18499:1089;;;;;;;;:::o;19594:229::-;19734:34;19730:1;19722:6;19718:14;19711:58;19803:12;19798:2;19790:6;19786:15;19779:37;19594:229;:::o;19829:366::-;19971:3;19992:67;20056:2;20051:3;19992:67;:::i;:::-;19985:74;;20068:93;20157:3;20068:93;:::i;:::-;20186:2;20181:3;20177:12;20170:19;;19829:366;;;:::o;20201:419::-;20367:4;20405:2;20394:9;20390:18;20382:26;;20454:9;20448:4;20444:20;20440:1;20429:9;20425:17;20418:47;20482:131;20608:4;20482:131;:::i;:::-;20474:139;;20201:419;;;:::o;20626:180::-;20674:77;20671:1;20664:88;20771:4;20768:1;20761:15;20795:4;20792:1;20785:15;20812:320;20856:6;20893:1;20887:4;20883:12;20873:22;;20940:1;20934:4;20930:12;20961:18;20951:81;;21017:4;21009:6;21005:17;20995:27;;20951:81;21079:2;21071:6;21068:14;21048:18;21045:38;21042:84;;21098:18;;:::i;:::-;21042:84;20863:269;20812:320;;;:::o;21138:148::-;21240:11;21277:3;21262:18;;21138:148;;;;:::o;21292:141::-;21341:4;21364:3;21356:11;;21387:3;21384:1;21377:14;21421:4;21418:1;21408:18;21400:26;;21292:141;;;:::o;21463:874::-;21566:3;21603:5;21597:12;21632:36;21658:9;21632:36;:::i;:::-;21684:89;21766:6;21761:3;21684:89;:::i;:::-;21677:96;;21804:1;21793:9;21789:17;21820:1;21815:166;;;;21995:1;21990:341;;;;21782:549;;21815:166;21899:4;21895:9;21884;21880:25;21875:3;21868:38;21961:6;21954:14;21947:22;21939:6;21935:35;21930:3;21926:45;21919:52;;21815:166;;21990:341;22057:38;22089:5;22057:38;:::i;:::-;22117:1;22131:154;22145:6;22142:1;22139:13;22131:154;;;22219:7;22213:14;22209:1;22204:3;22200:11;22193:35;22269:1;22260:7;22256:15;22245:26;;22167:4;22164:1;22160:12;22155:17;;22131:154;;;22314:6;22309:3;22305:16;22298:23;;21997:334;;21782:549;;21570:767;;21463:874;;;;:::o;22343:79::-;22382:7;22411:5;22400:16;;22343:79;;;:::o;22428:157::-;22533:45;22553:24;22571:5;22553:24;:::i;:::-;22533:45;:::i;:::-;22528:3;22521:58;22428:157;;:::o;22591:410::-;22748:3;22770:92;22858:3;22849:6;22770:92;:::i;:::-;22763:99;;22872:75;22943:3;22934:6;22872:75;:::i;:::-;22972:2;22967:3;22963:12;22956:19;;22992:3;22985:10;;22591:410;;;;;:::o;23007:233::-;23147:34;23143:1;23135:6;23131:14;23124:58;23216:16;23211:2;23203:6;23199:15;23192:41;23007:233;:::o;23246:366::-;23388:3;23409:67;23473:2;23468:3;23409:67;:::i;:::-;23402:74;;23485:93;23574:3;23485:93;:::i;:::-;23603:2;23598:3;23594:12;23587:19;;23246:366;;;:::o;23618:419::-;23784:4;23822:2;23811:9;23807:18;23799:26;;23871:9;23865:4;23861:20;23857:1;23846:9;23842:17;23835:47;23899:131;24025:4;23899:131;:::i;:::-;23891:139;;23618:419;;;:::o;24043:93::-;24080:6;24127:2;24122;24115:5;24111:14;24107:23;24097:33;;24043:93;;;:::o;24142:107::-;24186:8;24236:5;24230:4;24226:16;24205:37;;24142:107;;;;:::o;24255:393::-;24324:6;24374:1;24362:10;24358:18;24397:97;24427:66;24416:9;24397:97;:::i;:::-;24515:39;24545:8;24534:9;24515:39;:::i;:::-;24503:51;;24587:4;24583:9;24576:5;24572:21;24563:30;;24636:4;24626:8;24622:19;24615:5;24612:30;24602:40;;24331:317;;24255:393;;;;;:::o;24654:60::-;24682:3;24703:5;24696:12;;24654:60;;;:::o;24720:142::-;24770:9;24803:53;24821:34;24830:24;24848:5;24830:24;:::i;:::-;24821:34;:::i;:::-;24803:53;:::i;:::-;24790:66;;24720:142;;;:::o;24868:75::-;24911:3;24932:5;24925:12;;24868:75;;;:::o;24949:269::-;25059:39;25090:7;25059:39;:::i;:::-;25120:91;25169:41;25193:16;25169:41;:::i;:::-;25161:6;25154:4;25148:11;25120:91;:::i;:::-;25114:4;25107:105;25025:193;24949:269;;;:::o;25224:73::-;25269:3;25224:73;:::o;25303:189::-;25380:32;;:::i;:::-;25421:65;25479:6;25471;25465:4;25421:65;:::i;:::-;25356:136;25303:189;;:::o;25498:186::-;25558:120;25575:3;25568:5;25565:14;25558:120;;;25629:39;25666:1;25659:5;25629:39;:::i;:::-;25602:1;25595:5;25591:13;25582:22;;25558:120;;;25498:186;;:::o;25690:543::-;25791:2;25786:3;25783:11;25780:446;;;25825:38;25857:5;25825:38;:::i;:::-;25909:29;25927:10;25909:29;:::i;:::-;25899:8;25895:44;26092:2;26080:10;26077:18;26074:49;;;26113:8;26098:23;;26074:49;26136:80;26192:22;26210:3;26192:22;:::i;:::-;26182:8;26178:37;26165:11;26136:80;:::i;:::-;25795:431;;25780:446;25690:543;;;:::o;26239:117::-;26293:8;26343:5;26337:4;26333:16;26312:37;;26239:117;;;;:::o;26362:169::-;26406:6;26439:51;26487:1;26483:6;26475:5;26472:1;26468:13;26439:51;:::i;:::-;26435:56;26520:4;26514;26510:15;26500:25;;26413:118;26362:169;;;;:::o;26536:295::-;26612:4;26758:29;26783:3;26777:4;26758:29;:::i;:::-;26750:37;;26820:3;26817:1;26813:11;26807:4;26804:21;26796:29;;26536:295;;;;:::o;26836:1395::-;26953:37;26986:3;26953:37;:::i;:::-;27055:18;27047:6;27044:30;27041:56;;;27077:18;;:::i;:::-;27041:56;27121:38;27153:4;27147:11;27121:38;:::i;:::-;27206:67;27266:6;27258;27252:4;27206:67;:::i;:::-;27300:1;27324:4;27311:17;;27356:2;27348:6;27345:14;27373:1;27368:618;;;;28030:1;28047:6;28044:77;;;28096:9;28091:3;28087:19;28081:26;28072:35;;28044:77;28147:67;28207:6;28200:5;28147:67;:::i;:::-;28141:4;28134:81;28003:222;27338:887;;27368:618;27420:4;27416:9;27408:6;27404:22;27454:37;27486:4;27454:37;:::i;:::-;27513:1;27527:208;27541:7;27538:1;27535:14;27527:208;;;27620:9;27615:3;27611:19;27605:26;27597:6;27590:42;27671:1;27663:6;27659:14;27649:24;;27718:2;27707:9;27703:18;27690:31;;27564:4;27561:1;27557:12;27552:17;;27527:208;;;27763:6;27754:7;27751:19;27748:179;;;27821:9;27816:3;27812:19;27806:26;27864:48;27906:4;27898:6;27894:17;27883:9;27864:48;:::i;:::-;27856:6;27849:64;27771:156;27748:179;27973:1;27969;27961:6;27957:14;27953:22;27947:4;27940:36;27375:611;;;27338:887;;26928:1303;;;26836:1395;;:::o;28237:228::-;28377:34;28373:1;28365:6;28361:14;28354:58;28446:11;28441:2;28433:6;28429:15;28422:36;28237:228;:::o;28471:366::-;28613:3;28634:67;28698:2;28693:3;28634:67;:::i;:::-;28627:74;;28710:93;28799:3;28710:93;:::i;:::-;28828:2;28823:3;28819:12;28812:19;;28471:366;;;:::o;28843:419::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:180::-;29316:77;29313:1;29306:88;29413:4;29410:1;29403:15;29437:4;29434:1;29427:15;29454:180;29502:77;29499:1;29492:88;29599:4;29596:1;29589:15;29623:4;29620:1;29613:15;29640:233;29679:3;29702:24;29720:5;29702:24;:::i;:::-;29693:33;;29748:66;29741:5;29738:77;29735:103;;29818:18;;:::i;:::-;29735:103;29865:1;29858:5;29854:13;29847:20;;29640:233;;;:::o;29879:225::-;30019:34;30015:1;30007:6;30003:14;29996:58;30088:8;30083:2;30075:6;30071:15;30064:33;29879:225;:::o;30110:366::-;30252:3;30273:67;30337:2;30332:3;30273:67;:::i;:::-;30266:74;;30349:93;30438:3;30349:93;:::i;:::-;30467:2;30462:3;30458:12;30451:19;;30110:366;;;:::o;30482:419::-;30648:4;30686:2;30675:9;30671:18;30663:26;;30735:9;30729:4;30725:20;30721:1;30710:9;30706:17;30699:47;30763:131;30889:4;30763:131;:::i;:::-;30755:139;;30482:419;;;:::o;30907:227::-;31047:34;31043:1;31035:6;31031:14;31024:58;31116:10;31111:2;31103:6;31099:15;31092:35;30907:227;:::o;31140:366::-;31282:3;31303:67;31367:2;31362:3;31303:67;:::i;:::-;31296:74;;31379:93;31468:3;31379:93;:::i;:::-;31497:2;31492:3;31488:12;31481:19;;31140:366;;;:::o;31512:419::-;31678:4;31716:2;31705:9;31701:18;31693:26;;31765:9;31759:4;31755:20;31751:1;31740:9;31736:17;31729:47;31793:131;31919:4;31793:131;:::i;:::-;31785:139;;31512:419;;;:::o;31937:224::-;32077:34;32073:1;32065:6;32061:14;32054:58;32146:7;32141:2;32133:6;32129:15;32122:32;31937:224;:::o;32167:366::-;32309:3;32330:67;32394:2;32389:3;32330:67;:::i;:::-;32323:74;;32406:93;32495:3;32406:93;:::i;:::-;32524:2;32519:3;32515:12;32508:19;;32167:366;;;:::o;32539:419::-;32705:4;32743:2;32732:9;32728:18;32720:26;;32792:9;32786:4;32782:20;32778:1;32767:9;32763:17;32756:47;32820:131;32946:4;32820:131;:::i;:::-;32812:139;;32539:419;;;:::o;32964:229::-;33104:34;33100:1;33092:6;33088:14;33081:58;33173:12;33168:2;33160:6;33156:15;33149:37;32964:229;:::o;33199:366::-;33341:3;33362:67;33426:2;33421:3;33362:67;:::i;:::-;33355:74;;33438:93;33527:3;33438:93;:::i;:::-;33556:2;33551:3;33547:12;33540:19;;33199:366;;;:::o;33571:419::-;33737:4;33775:2;33764:9;33760:18;33752:26;;33824:9;33818:4;33814:20;33810:1;33799:9;33795:17;33788:47;33852:131;33978:4;33852:131;:::i;:::-;33844:139;;33571:419;;;:::o;33996:191::-;34036:3;34055:20;34073:1;34055:20;:::i;:::-;34050:25;;34089:20;34107:1;34089:20;:::i;:::-;34084:25;;34132:1;34129;34125:9;34118:16;;34153:3;34150:1;34147:10;34144:36;;;34160:18;;:::i;:::-;34144:36;33996:191;;;;:::o;34193:634::-;34414:4;34452:2;34441:9;34437:18;34429:26;;34501:9;34495:4;34491:20;34487:1;34476:9;34472:17;34465:47;34529:108;34632:4;34623:6;34529:108;:::i;:::-;34521:116;;34684:9;34678:4;34674:20;34669:2;34658:9;34654:18;34647:48;34712:108;34815:4;34806:6;34712:108;:::i;:::-;34704:116;;34193:634;;;;;:::o;34833:182::-;34973:34;34969:1;34961:6;34957:14;34950:58;34833:182;:::o;35021:366::-;35163:3;35184:67;35248:2;35243:3;35184:67;:::i;:::-;35177:74;;35260:93;35349:3;35260:93;:::i;:::-;35378:2;35373:3;35369:12;35362:19;;35021:366;;;:::o;35393:419::-;35559:4;35597:2;35586:9;35582:18;35574:26;;35646:9;35640:4;35636:20;35632:1;35621:9;35617:17;35610:47;35674:131;35800:4;35674:131;:::i;:::-;35666:139;;35393:419;;;:::o;35818:220::-;35958:34;35954:1;35946:6;35942:14;35935:58;36027:3;36022:2;36014:6;36010:15;36003:28;35818:220;:::o;36044:366::-;36186:3;36207:67;36271:2;36266:3;36207:67;:::i;:::-;36200:74;;36283:93;36372:3;36283:93;:::i;:::-;36401:2;36396:3;36392:12;36385:19;;36044:366;;;:::o;36416:419::-;36582:4;36620:2;36609:9;36605:18;36597:26;;36669:9;36663:4;36659:20;36655:1;36644:9;36640:17;36633:47;36697:131;36823:4;36697:131;:::i;:::-;36689:139;;36416:419;;;:::o;36841:332::-;36962:4;37000:2;36989:9;36985:18;36977:26;;37013:71;37081:1;37070:9;37066:17;37057:6;37013:71;:::i;:::-;37094:72;37162:2;37151:9;37147:18;37138:6;37094:72;:::i;:::-;36841:332;;;;;:::o;37179:228::-;37319:34;37315:1;37307:6;37303:14;37296:58;37388:11;37383:2;37375:6;37371:15;37364:36;37179:228;:::o;37413:366::-;37555:3;37576:67;37640:2;37635:3;37576:67;:::i;:::-;37569:74;;37652:93;37741:3;37652:93;:::i;:::-;37770:2;37765:3;37761:12;37754:19;;37413:366;;;:::o;37785:419::-;37951:4;37989:2;37978:9;37974:18;37966:26;;38038:9;38032:4;38028:20;38024:1;38013:9;38009:17;38002:47;38066:131;38192:4;38066:131;:::i;:::-;38058:139;;37785:419;;;:::o;38210:98::-;38261:6;38295:5;38289:12;38279:22;;38210:98;;;:::o;38314:168::-;38397:11;38431:6;38426:3;38419:19;38471:4;38466:3;38462:14;38447:29;;38314:168;;;;:::o;38488:373::-;38574:3;38602:38;38634:5;38602:38;:::i;:::-;38656:70;38719:6;38714:3;38656:70;:::i;:::-;38649:77;;38735:65;38793:6;38788:3;38781:4;38774:5;38770:16;38735:65;:::i;:::-;38825:29;38847:6;38825:29;:::i;:::-;38820:3;38816:39;38809:46;;38578:283;38488:373;;;;:::o;38867:1053::-;39190:4;39228:3;39217:9;39213:19;39205:27;;39242:71;39310:1;39299:9;39295:17;39286:6;39242:71;:::i;:::-;39323:72;39391:2;39380:9;39376:18;39367:6;39323:72;:::i;:::-;39442:9;39436:4;39432:20;39427:2;39416:9;39412:18;39405:48;39470:108;39573:4;39564:6;39470:108;:::i;:::-;39462:116;;39625:9;39619:4;39615:20;39610:2;39599:9;39595:18;39588:48;39653:108;39756:4;39747:6;39653:108;:::i;:::-;39645:116;;39809:9;39803:4;39799:20;39793:3;39782:9;39778:19;39771:49;39837:76;39908:4;39899:6;39837:76;:::i;:::-;39829:84;;38867:1053;;;;;;;;:::o;39926:141::-;39982:5;40013:6;40007:13;39998:22;;40029:32;40055:5;40029:32;:::i;:::-;39926:141;;;;:::o;40073:349::-;40142:6;40191:2;40179:9;40170:7;40166:23;40162:32;40159:119;;;40197:79;;:::i;:::-;40159:119;40317:1;40342:63;40397:7;40388:6;40377:9;40373:22;40342:63;:::i;:::-;40332:73;;40288:127;40073:349;;;;:::o;40428:106::-;40472:8;40521:5;40516:3;40512:15;40491:36;;40428:106;;;:::o;40540:183::-;40575:3;40613:1;40595:16;40592:23;40589:128;;;40651:1;40648;40645;40630:23;40673:34;40704:1;40698:8;40673:34;:::i;:::-;40666:41;;40589:128;40540:183;:::o;40729:711::-;40768:3;40806:4;40788:16;40785:26;40814:5;40782:39;40843:20;;:::i;:::-;40918:1;40900:16;40896:24;40893:1;40887:4;40872:49;40951:4;40945:11;41050:16;41043:4;41035:6;41031:17;41028:39;40995:18;40987:6;40984:30;40968:113;40965:146;;;41096:5;;;;40965:146;41142:6;41136:4;41132:17;41178:3;41172:10;41205:18;41197:6;41194:30;41191:43;;;41227:5;;;;;;41191:43;41275:6;41268:4;41263:3;41259:14;41255:27;41334:1;41316:16;41312:24;41306:4;41302:35;41297:3;41294:44;41291:57;;;41341:5;;;;;;;41291:57;41358;41406:6;41400:4;41396:17;41388:6;41384:30;41378:4;41358:57;:::i;:::-;41431:3;41424:10;;40772:668;;;;;40729:711;;:::o;41446:239::-;41586:34;41582:1;41574:6;41570:14;41563:58;41655:22;41650:2;41642:6;41638:15;41631:47;41446:239;:::o;41691:366::-;41833:3;41854:67;41918:2;41913:3;41854:67;:::i;:::-;41847:74;;41930:93;42019:3;41930:93;:::i;:::-;42048:2;42043:3;42039:12;42032:19;;41691:366;;;:::o;42063:419::-;42229:4;42267:2;42256:9;42252:18;42244:26;;42316:9;42310:4;42306:20;42302:1;42291:9;42287:17;42280:47;42344:131;42470:4;42344:131;:::i;:::-;42336:139;;42063:419;;;:::o;42488:227::-;42628:34;42624:1;42616:6;42612:14;42605:58;42697:10;42692:2;42684:6;42680:15;42673:35;42488:227;:::o;42721:366::-;42863:3;42884:67;42948:2;42943:3;42884:67;:::i;:::-;42877:74;;42960:93;43049:3;42960:93;:::i;:::-;43078:2;43073:3;43069:12;43062:19;;42721:366;;;:::o;43093:419::-;43259:4;43297:2;43286:9;43282:18;43274:26;;43346:9;43340:4;43336:20;43332:1;43321:9;43317:17;43310:47;43374:131;43500:4;43374:131;:::i;:::-;43366:139;;43093:419;;;:::o;43518:751::-;43741:4;43779:3;43768:9;43764:19;43756:27;;43793:71;43861:1;43850:9;43846:17;43837:6;43793:71;:::i;:::-;43874:72;43942:2;43931:9;43927:18;43918:6;43874:72;:::i;:::-;43956;44024:2;44013:9;44009:18;44000:6;43956:72;:::i;:::-;44038;44106:2;44095:9;44091:18;44082:6;44038:72;:::i;:::-;44158:9;44152:4;44148:20;44142:3;44131:9;44127:19;44120:49;44186:76;44257:4;44248:6;44186:76;:::i;:::-;44178:84;;43518:751;;;;;;;;:::o
Swarm Source
ipfs://b06d6fe9f3b389b846ca5f2a38da8339461e991d182f4d5cc03f1c3e2a3a417d
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.