ERC-721
Overview
Max Total Supply
0 UA
Holders
6
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 UALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ISupportUkraine
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-12 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/iSupportUkraine.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract ISupportUkraine is ERC721, Ownable, ReentrancyGuard { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; bytes32 public merkleRoot; constructor(bytes32 _merkleRoot) ERC721("I Support Ukraine Verified Donation", "UA") { merkleRoot = _merkleRoot; } address payable public ukraine = payable(0x165CD37b4C644C2921454429E7F9358d18A45e14); mapping(address => bool) private hasMinted; function _baseURI() internal pure override returns (string memory) { return "ipfs://QmZphHmUBsChn55YMVWox9dKJWdwu8fCHgLxsbcMqVtQQ8"; } function whiteListMint(bytes32[] memory _proof) public nonReentrant { require( _verifyMerkleLeaf(_generateMerkleLeaf(msg.sender), _proof), "Invalid proof, not on whitelist" ); require(hasMinted[msg.sender] == false, "Already minted"); uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); hasMinted[msg.sender] = true; _safeMint(msg.sender, tokenId); } function donateToUkraine() public payable nonReentrant { require(msg.value > 0.001 ether, "Must donate at least 0.001 ether"); require(hasMinted[msg.sender] == false, "Already minted"); uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); hasMinted[msg.sender] = true; ukraine.transfer(msg.value); _safeMint(msg.sender, tokenId); } function _generateMerkleLeaf(address _account) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_account)); } function _verifyMerkleLeaf(bytes32 _leafNode, bytes32[] memory _proof) internal view returns (bool) { return MerkleProof.verify(_proof, merkleRoot, _leafNode); } function verifyMerkleLeaf(address _account, bytes32[] memory _proof) public view returns (bool) { return MerkleProof.verify( _proof, merkleRoot, _generateMerkleLeaf(_account) ); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return _baseURI(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donateToUkraine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ukraine","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"verifyMerkleLeaf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"whiteListMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273165cd37b4c644c2921454429e7f9358d18a45e14600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b50604051620036ff380380620036ff83398181016040528101906200008c9190620002db565b604051806060016040528060238152602001620036dc602391396040518060400160405280600281526020017f55410000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f492919062000214565b5080600190805190602001906200010d92919062000214565b50505062000130620001246200014660201b60201c565b6200014e60201b60201c565b6001600781905550806009819055505062000390565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002229062000311565b90600052602060002090601f01602090048101928262000246576000855562000292565b82601f106200026157805160ff191683800117855562000292565b8280016001018555821562000292579182015b828111156200029157825182559160200191906001019062000274565b5b509050620002a19190620002a5565b5090565b5b80821115620002c0576000816000905550600101620002a6565b5090565b600081519050620002d58162000376565b92915050565b600060208284031215620002ee57600080fd5b6000620002fe84828501620002c4565b91505092915050565b6000819050919050565b600060028204905060018216806200032a57607f821691505b6020821081141562000341576200034062000347565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620003818162000307565b81146200038d57600080fd5b50565b61333c80620003a06000396000f3fe60806040526004361061012a5760003560e01c80637f435b85116100ab578063a22cb4651161006f578063a22cb465146103f2578063b88d4fde1461041b578063c87b56dd14610444578063d3ef7ab214610481578063e985e9c51461048b578063f2fde38b146104c85761012a565b80637f435b851461030b5780638da5cb5b1461033657806395d89b411461036157806397254e551461038c5780639fcff425146103b55761012a565b80632eb4a7ab116100f25780632eb4a7ab1461022657806342842e0e146102515780636352211e1461027a57806370a08231146102b7578063715018a6146102f45761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d457806323b872dd146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612236565b6104f1565b60405161016391906126de565b60405180910390f35b34801561017857600080fd5b506101816105d3565b60405161018e9190612714565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612288565b610665565b6040516101cb919061265c565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f691906121b9565b6106ea565b005b34801561020957600080fd5b50610224600480360381019061021f919061205f565b610802565b005b34801561023257600080fd5b5061023b610862565b60405161024891906126f9565b60405180910390f35b34801561025d57600080fd5b506102786004803603810190610273919061205f565b610868565b005b34801561028657600080fd5b506102a1600480360381019061029c9190612288565b610888565b6040516102ae919061265c565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190611ffa565b61093a565b6040516102eb91906129b6565b60405180910390f35b34801561030057600080fd5b506103096109f2565b005b34801561031757600080fd5b50610320610a7a565b60405161032d9190612677565b60405180910390f35b34801561034257600080fd5b5061034b610aa0565b604051610358919061265c565b60405180910390f35b34801561036d57600080fd5b50610376610aca565b6040516103839190612714565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae91906121f5565b610b5c565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190612129565b610d14565b6040516103e991906126de565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061217d565b610d33565b005b34801561042757600080fd5b50610442600480360381019061043d91906120ae565b610d49565b005b34801561045057600080fd5b5061046b60048036038101906104669190612288565b610dab565b6040516104789190612714565b60405180910390f35b610489610e04565b005b34801561049757600080fd5b506104b260048036038101906104ad9190612023565b61101c565b6040516104bf91906126de565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190611ffa565b6110b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105cc57506105cb826111a8565b5b9050919050565b6060600080546105e290612be7565b80601f016020809104026020016040519081016040528092919081815260200182805461060e90612be7565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b5050505050905090565b600061067082611212565b6106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a6906128d6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f582610888565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90612936565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078561127e565b73ffffffffffffffffffffffffffffffffffffffff1614806107b457506107b3816107ae61127e565b61101c565b5b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90612836565b60405180910390fd5b6107fd8383611286565b505050565b61081361080d61127e565b8261133f565b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990612956565b60405180910390fd5b61085d83838361141d565b505050565b60095481565b61088383838360405180602001604052806000815250610d49565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092890612876565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290612856565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109fa61127e565b73ffffffffffffffffffffffffffffffffffffffff16610a18610aa0565b73ffffffffffffffffffffffffffffffffffffffff1614610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a65906128f6565b60405180910390fd5b610a786000611684565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ad990612be7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612be7565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b60026007541415610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612996565b60405180910390fd5b6002600781905550610bbc610bb63361174a565b8261177a565b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906128b6565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590612736565b60405180910390fd5b6000610c9a6008611791565b9050610ca6600861179f565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d0833826117b5565b50600160078190555050565b6000610d2b82600954610d268661174a565b6117d3565b905092915050565b610d45610d3e61127e565b83836117ea565b5050565b610d5a610d5461127e565b8361133f565b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090612956565b60405180910390fd5b610da584848484611957565b50505050565b6060610db682611212565b610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612916565b60405180910390fd5b610dfd6119b3565b9050919050565b60026007541415610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190612996565b60405180910390fd5b600260078190555066038d7ea4c680003411610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612976565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590612736565b60405180910390fd5b6000610f3a6008611791565b9050610f46600861179f565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b5061101133826117b5565b506001600781905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110b861127e565b73ffffffffffffffffffffffffffffffffffffffff166110d6610aa0565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611123906128f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390612776565b60405180910390fd5b6111a581611684565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112f983610888565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061134a82611212565b611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090612816565b60405180910390fd5b600061139483610888565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061140357508373ffffffffffffffffffffffffffffffffffffffff166113eb84610665565b73ffffffffffffffffffffffffffffffffffffffff16145b806114145750611413818561101c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661143d82610888565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90612796565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa906127d6565b60405180910390fd5b61150e8383836119d3565b611519600082611286565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115699190612ae1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c09190612a8b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461167f8383836119d8565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008160405160200161175d9190612641565b604051602081830303815290604052805190602001209050919050565b600061178982600954856117d3565b905092915050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6117cf8282604051806020016040528060008152506119dd565b5050565b6000826117e08584611a38565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906127f6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194a91906126de565b60405180910390a3505050565b61196284848461141d565b61196e84848484611ad3565b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490612756565b60405180910390fd5b50505050565b60606040518060600160405280603581526020016132d260359139905090565b505050565b505050565b6119e78383611c6a565b6119f46000848484611ad3565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90612756565b60405180910390fd5b505050565b60008082905060005b8451811015611ac8576000858281518110611a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311611aa757611aa08382611e44565b9250611ab4565b611ab18184611e44565b92505b508080611ac090612c4a565b915050611a41565b508091505092915050565b6000611af48473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611c5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b1d61127e565b8786866040518563ffffffff1660e01b8152600401611b3f9493929190612692565b602060405180830381600087803b158015611b5957600080fd5b505af1925050508015611b8a57506040513d601f19601f82011682018060405250810190611b87919061225f565b60015b611c0d573d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b50600081511415611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90612756565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c62565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190612896565b60405180910390fd5b611ce381611212565b15611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906127b6565b60405180910390fd5b611d2f600083836119d3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7f9190612a8b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e40600083836119d8565b5050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611e91611e8c846129f6565b6129d1565b90508083825260208201905082856020860282011115611eb057600080fd5b60005b85811015611ee05781611ec68882611f7c565b845260208401935060208301925050600181019050611eb3565b5050509392505050565b6000611efd611ef884612a22565b6129d1565b905082815260208101848484011115611f1557600080fd5b611f20848285612ba5565b509392505050565b600081359050611f378161325e565b92915050565b600082601f830112611f4e57600080fd5b8135611f5e848260208601611e7e565b91505092915050565b600081359050611f7681613275565b92915050565b600081359050611f8b8161328c565b92915050565b600081359050611fa0816132a3565b92915050565b600081519050611fb5816132a3565b92915050565b600082601f830112611fcc57600080fd5b8135611fdc848260208601611eea565b91505092915050565b600081359050611ff4816132ba565b92915050565b60006020828403121561200c57600080fd5b600061201a84828501611f28565b91505092915050565b6000806040838503121561203657600080fd5b600061204485828601611f28565b925050602061205585828601611f28565b9150509250929050565b60008060006060848603121561207457600080fd5b600061208286828701611f28565b935050602061209386828701611f28565b92505060406120a486828701611fe5565b9150509250925092565b600080600080608085870312156120c457600080fd5b60006120d287828801611f28565b94505060206120e387828801611f28565b93505060406120f487828801611fe5565b925050606085013567ffffffffffffffff81111561211157600080fd5b61211d87828801611fbb565b91505092959194509250565b6000806040838503121561213c57600080fd5b600061214a85828601611f28565b925050602083013567ffffffffffffffff81111561216757600080fd5b61217385828601611f3d565b9150509250929050565b6000806040838503121561219057600080fd5b600061219e85828601611f28565b92505060206121af85828601611f67565b9150509250929050565b600080604083850312156121cc57600080fd5b60006121da85828601611f28565b92505060206121eb85828601611fe5565b9150509250929050565b60006020828403121561220757600080fd5b600082013567ffffffffffffffff81111561222157600080fd5b61222d84828501611f3d565b91505092915050565b60006020828403121561224857600080fd5b600061225684828501611f91565b91505092915050565b60006020828403121561227157600080fd5b600061227f84828501611fa6565b91505092915050565b60006020828403121561229a57600080fd5b60006122a884828501611fe5565b91505092915050565b6122ba81612b27565b82525050565b6122c981612b15565b82525050565b6122e06122db82612b15565b612c93565b82525050565b6122ef81612b39565b82525050565b6122fe81612b45565b82525050565b600061230f82612a53565b6123198185612a69565b9350612329818560208601612bb4565b61233281612d44565b840191505092915050565b600061234882612a5e565b6123528185612a7a565b9350612362818560208601612bb4565b61236b81612d44565b840191505092915050565b6000612383600e83612a7a565b915061238e82612d62565b602082019050919050565b60006123a6603283612a7a565b91506123b182612d8b565b604082019050919050565b60006123c9602683612a7a565b91506123d482612dda565b604082019050919050565b60006123ec602583612a7a565b91506123f782612e29565b604082019050919050565b600061240f601c83612a7a565b915061241a82612e78565b602082019050919050565b6000612432602483612a7a565b915061243d82612ea1565b604082019050919050565b6000612455601983612a7a565b915061246082612ef0565b602082019050919050565b6000612478602c83612a7a565b915061248382612f19565b604082019050919050565b600061249b603883612a7a565b91506124a682612f68565b604082019050919050565b60006124be602a83612a7a565b91506124c982612fb7565b604082019050919050565b60006124e1602983612a7a565b91506124ec82613006565b604082019050919050565b6000612504602083612a7a565b915061250f82613055565b602082019050919050565b6000612527601f83612a7a565b91506125328261307e565b602082019050919050565b600061254a602c83612a7a565b9150612555826130a7565b604082019050919050565b600061256d602083612a7a565b9150612578826130f6565b602082019050919050565b6000612590602f83612a7a565b915061259b8261311f565b604082019050919050565b60006125b3602183612a7a565b91506125be8261316e565b604082019050919050565b60006125d6603183612a7a565b91506125e1826131bd565b604082019050919050565b60006125f9602083612a7a565b91506126048261320c565b602082019050919050565b600061261c601f83612a7a565b915061262782613235565b602082019050919050565b61263b81612b9b565b82525050565b600061264d82846122cf565b60148201915081905092915050565b600060208201905061267160008301846122c0565b92915050565b600060208201905061268c60008301846122b1565b92915050565b60006080820190506126a760008301876122c0565b6126b460208301866122c0565b6126c16040830185612632565b81810360608301526126d38184612304565b905095945050505050565b60006020820190506126f360008301846122e6565b92915050565b600060208201905061270e60008301846122f5565b92915050565b6000602082019050818103600083015261272e818461233d565b905092915050565b6000602082019050818103600083015261274f81612376565b9050919050565b6000602082019050818103600083015261276f81612399565b9050919050565b6000602082019050818103600083015261278f816123bc565b9050919050565b600060208201905081810360008301526127af816123df565b9050919050565b600060208201905081810360008301526127cf81612402565b9050919050565b600060208201905081810360008301526127ef81612425565b9050919050565b6000602082019050818103600083015261280f81612448565b9050919050565b6000602082019050818103600083015261282f8161246b565b9050919050565b6000602082019050818103600083015261284f8161248e565b9050919050565b6000602082019050818103600083015261286f816124b1565b9050919050565b6000602082019050818103600083015261288f816124d4565b9050919050565b600060208201905081810360008301526128af816124f7565b9050919050565b600060208201905081810360008301526128cf8161251a565b9050919050565b600060208201905081810360008301526128ef8161253d565b9050919050565b6000602082019050818103600083015261290f81612560565b9050919050565b6000602082019050818103600083015261292f81612583565b9050919050565b6000602082019050818103600083015261294f816125a6565b9050919050565b6000602082019050818103600083015261296f816125c9565b9050919050565b6000602082019050818103600083015261298f816125ec565b9050919050565b600060208201905081810360008301526129af8161260f565b9050919050565b60006020820190506129cb6000830184612632565b92915050565b60006129db6129ec565b90506129e78282612c19565b919050565b6000604051905090565b600067ffffffffffffffff821115612a1157612a10612d15565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a3d57612a3c612d15565b5b612a4682612d44565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a9682612b9b565b9150612aa183612b9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ad657612ad5612cb7565b5b828201905092915050565b6000612aec82612b9b565b9150612af783612b9b565b925082821015612b0a57612b09612cb7565b5b828203905092915050565b6000612b2082612b7b565b9050919050565b6000612b3282612b7b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612bd2578082015181840152602081019050612bb7565b83811115612be1576000848401525b50505050565b60006002820490506001821680612bff57607f821691505b60208210811415612c1357612c12612ce6565b5b50919050565b612c2282612d44565b810181811067ffffffffffffffff82111715612c4157612c40612d15565b5b80604052505050565b6000612c5582612b9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c8857612c87612cb7565b5b600182019050919050565b6000612c9e82612ca5565b9050919050565b6000612cb082612d55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f496e76616c69642070726f6f662c206e6f74206f6e2077686974656c69737400600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d75737420646f6e617465206174206c6561737420302e303031206574686572600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61326781612b15565b811461327257600080fd5b50565b61327e81612b39565b811461328957600080fd5b50565b61329581612b45565b81146132a057600080fd5b50565b6132ac81612b4f565b81146132b757600080fd5b50565b6132c381612b9b565b81146132ce57600080fd5b5056fe697066733a2f2f516d5a7068486d55427343686e3535594d56576f7839644b4a5764777538664348674c787362634d715674515138a26469706673582212203492c7e4d792640bd42862e2d94652c892c5b8af3c78e36c461f922e4b4d918864736f6c634300080400334920537570706f727420556b7261696e6520566572696669656420446f6e6174696f6ec7679223c0cf31f46222fcdd829c232851d4102b198f7b0ee30a218300a0ccbe
Deployed Bytecode
0x60806040526004361061012a5760003560e01c80637f435b85116100ab578063a22cb4651161006f578063a22cb465146103f2578063b88d4fde1461041b578063c87b56dd14610444578063d3ef7ab214610481578063e985e9c51461048b578063f2fde38b146104c85761012a565b80637f435b851461030b5780638da5cb5b1461033657806395d89b411461036157806397254e551461038c5780639fcff425146103b55761012a565b80632eb4a7ab116100f25780632eb4a7ab1461022657806342842e0e146102515780636352211e1461027a57806370a08231146102b7578063715018a6146102f45761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d457806323b872dd146101fd575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612236565b6104f1565b60405161016391906126de565b60405180910390f35b34801561017857600080fd5b506101816105d3565b60405161018e9190612714565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b99190612288565b610665565b6040516101cb919061265c565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f691906121b9565b6106ea565b005b34801561020957600080fd5b50610224600480360381019061021f919061205f565b610802565b005b34801561023257600080fd5b5061023b610862565b60405161024891906126f9565b60405180910390f35b34801561025d57600080fd5b506102786004803603810190610273919061205f565b610868565b005b34801561028657600080fd5b506102a1600480360381019061029c9190612288565b610888565b6040516102ae919061265c565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190611ffa565b61093a565b6040516102eb91906129b6565b60405180910390f35b34801561030057600080fd5b506103096109f2565b005b34801561031757600080fd5b50610320610a7a565b60405161032d9190612677565b60405180910390f35b34801561034257600080fd5b5061034b610aa0565b604051610358919061265c565b60405180910390f35b34801561036d57600080fd5b50610376610aca565b6040516103839190612714565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae91906121f5565b610b5c565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190612129565b610d14565b6040516103e991906126de565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061217d565b610d33565b005b34801561042757600080fd5b50610442600480360381019061043d91906120ae565b610d49565b005b34801561045057600080fd5b5061046b60048036038101906104669190612288565b610dab565b6040516104789190612714565b60405180910390f35b610489610e04565b005b34801561049757600080fd5b506104b260048036038101906104ad9190612023565b61101c565b6040516104bf91906126de565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190611ffa565b6110b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105cc57506105cb826111a8565b5b9050919050565b6060600080546105e290612be7565b80601f016020809104026020016040519081016040528092919081815260200182805461060e90612be7565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b5050505050905090565b600061067082611212565b6106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a6906128d6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f582610888565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90612936565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078561127e565b73ffffffffffffffffffffffffffffffffffffffff1614806107b457506107b3816107ae61127e565b61101c565b5b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90612836565b60405180910390fd5b6107fd8383611286565b505050565b61081361080d61127e565b8261133f565b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084990612956565b60405180910390fd5b61085d83838361141d565b505050565b60095481565b61088383838360405180602001604052806000815250610d49565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092890612876565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290612856565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109fa61127e565b73ffffffffffffffffffffffffffffffffffffffff16610a18610aa0565b73ffffffffffffffffffffffffffffffffffffffff1614610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a65906128f6565b60405180910390fd5b610a786000611684565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ad990612be7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612be7565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b60026007541415610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612996565b60405180910390fd5b6002600781905550610bbc610bb63361174a565b8261177a565b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906128b6565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590612736565b60405180910390fd5b6000610c9a6008611791565b9050610ca6600861179f565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d0833826117b5565b50600160078190555050565b6000610d2b82600954610d268661174a565b6117d3565b905092915050565b610d45610d3e61127e565b83836117ea565b5050565b610d5a610d5461127e565b8361133f565b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090612956565b60405180910390fd5b610da584848484611957565b50505050565b6060610db682611212565b610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612916565b60405180910390fd5b610dfd6119b3565b9050919050565b60026007541415610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190612996565b60405180910390fd5b600260078190555066038d7ea4c680003411610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290612976565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590612736565b60405180910390fd5b6000610f3a6008611791565b9050610f46600861179f565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b5061101133826117b5565b506001600781905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110b861127e565b73ffffffffffffffffffffffffffffffffffffffff166110d6610aa0565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611123906128f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390612776565b60405180910390fd5b6111a581611684565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112f983610888565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061134a82611212565b611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090612816565b60405180910390fd5b600061139483610888565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061140357508373ffffffffffffffffffffffffffffffffffffffff166113eb84610665565b73ffffffffffffffffffffffffffffffffffffffff16145b806114145750611413818561101c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661143d82610888565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90612796565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa906127d6565b60405180910390fd5b61150e8383836119d3565b611519600082611286565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115699190612ae1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c09190612a8b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461167f8383836119d8565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008160405160200161175d9190612641565b604051602081830303815290604052805190602001209050919050565b600061178982600954856117d3565b905092915050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6117cf8282604051806020016040528060008152506119dd565b5050565b6000826117e08584611a38565b1490509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906127f6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194a91906126de565b60405180910390a3505050565b61196284848461141d565b61196e84848484611ad3565b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490612756565b60405180910390fd5b50505050565b60606040518060600160405280603581526020016132d260359139905090565b505050565b505050565b6119e78383611c6a565b6119f46000848484611ad3565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90612756565b60405180910390fd5b505050565b60008082905060005b8451811015611ac8576000858281518110611a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311611aa757611aa08382611e44565b9250611ab4565b611ab18184611e44565b92505b508080611ac090612c4a565b915050611a41565b508091505092915050565b6000611af48473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611c5d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b1d61127e565b8786866040518563ffffffff1660e01b8152600401611b3f9493929190612692565b602060405180830381600087803b158015611b5957600080fd5b505af1925050508015611b8a57506040513d601f19601f82011682018060405250810190611b87919061225f565b60015b611c0d573d8060008114611bba576040519150601f19603f3d011682016040523d82523d6000602084013e611bbf565b606091505b50600081511415611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90612756565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c62565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190612896565b60405180910390fd5b611ce381611212565b15611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906127b6565b60405180910390fd5b611d2f600083836119d3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7f9190612a8b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e40600083836119d8565b5050565b600082600052816020526040600020905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611e91611e8c846129f6565b6129d1565b90508083825260208201905082856020860282011115611eb057600080fd5b60005b85811015611ee05781611ec68882611f7c565b845260208401935060208301925050600181019050611eb3565b5050509392505050565b6000611efd611ef884612a22565b6129d1565b905082815260208101848484011115611f1557600080fd5b611f20848285612ba5565b509392505050565b600081359050611f378161325e565b92915050565b600082601f830112611f4e57600080fd5b8135611f5e848260208601611e7e565b91505092915050565b600081359050611f7681613275565b92915050565b600081359050611f8b8161328c565b92915050565b600081359050611fa0816132a3565b92915050565b600081519050611fb5816132a3565b92915050565b600082601f830112611fcc57600080fd5b8135611fdc848260208601611eea565b91505092915050565b600081359050611ff4816132ba565b92915050565b60006020828403121561200c57600080fd5b600061201a84828501611f28565b91505092915050565b6000806040838503121561203657600080fd5b600061204485828601611f28565b925050602061205585828601611f28565b9150509250929050565b60008060006060848603121561207457600080fd5b600061208286828701611f28565b935050602061209386828701611f28565b92505060406120a486828701611fe5565b9150509250925092565b600080600080608085870312156120c457600080fd5b60006120d287828801611f28565b94505060206120e387828801611f28565b93505060406120f487828801611fe5565b925050606085013567ffffffffffffffff81111561211157600080fd5b61211d87828801611fbb565b91505092959194509250565b6000806040838503121561213c57600080fd5b600061214a85828601611f28565b925050602083013567ffffffffffffffff81111561216757600080fd5b61217385828601611f3d565b9150509250929050565b6000806040838503121561219057600080fd5b600061219e85828601611f28565b92505060206121af85828601611f67565b9150509250929050565b600080604083850312156121cc57600080fd5b60006121da85828601611f28565b92505060206121eb85828601611fe5565b9150509250929050565b60006020828403121561220757600080fd5b600082013567ffffffffffffffff81111561222157600080fd5b61222d84828501611f3d565b91505092915050565b60006020828403121561224857600080fd5b600061225684828501611f91565b91505092915050565b60006020828403121561227157600080fd5b600061227f84828501611fa6565b91505092915050565b60006020828403121561229a57600080fd5b60006122a884828501611fe5565b91505092915050565b6122ba81612b27565b82525050565b6122c981612b15565b82525050565b6122e06122db82612b15565b612c93565b82525050565b6122ef81612b39565b82525050565b6122fe81612b45565b82525050565b600061230f82612a53565b6123198185612a69565b9350612329818560208601612bb4565b61233281612d44565b840191505092915050565b600061234882612a5e565b6123528185612a7a565b9350612362818560208601612bb4565b61236b81612d44565b840191505092915050565b6000612383600e83612a7a565b915061238e82612d62565b602082019050919050565b60006123a6603283612a7a565b91506123b182612d8b565b604082019050919050565b60006123c9602683612a7a565b91506123d482612dda565b604082019050919050565b60006123ec602583612a7a565b91506123f782612e29565b604082019050919050565b600061240f601c83612a7a565b915061241a82612e78565b602082019050919050565b6000612432602483612a7a565b915061243d82612ea1565b604082019050919050565b6000612455601983612a7a565b915061246082612ef0565b602082019050919050565b6000612478602c83612a7a565b915061248382612f19565b604082019050919050565b600061249b603883612a7a565b91506124a682612f68565b604082019050919050565b60006124be602a83612a7a565b91506124c982612fb7565b604082019050919050565b60006124e1602983612a7a565b91506124ec82613006565b604082019050919050565b6000612504602083612a7a565b915061250f82613055565b602082019050919050565b6000612527601f83612a7a565b91506125328261307e565b602082019050919050565b600061254a602c83612a7a565b9150612555826130a7565b604082019050919050565b600061256d602083612a7a565b9150612578826130f6565b602082019050919050565b6000612590602f83612a7a565b915061259b8261311f565b604082019050919050565b60006125b3602183612a7a565b91506125be8261316e565b604082019050919050565b60006125d6603183612a7a565b91506125e1826131bd565b604082019050919050565b60006125f9602083612a7a565b91506126048261320c565b602082019050919050565b600061261c601f83612a7a565b915061262782613235565b602082019050919050565b61263b81612b9b565b82525050565b600061264d82846122cf565b60148201915081905092915050565b600060208201905061267160008301846122c0565b92915050565b600060208201905061268c60008301846122b1565b92915050565b60006080820190506126a760008301876122c0565b6126b460208301866122c0565b6126c16040830185612632565b81810360608301526126d38184612304565b905095945050505050565b60006020820190506126f360008301846122e6565b92915050565b600060208201905061270e60008301846122f5565b92915050565b6000602082019050818103600083015261272e818461233d565b905092915050565b6000602082019050818103600083015261274f81612376565b9050919050565b6000602082019050818103600083015261276f81612399565b9050919050565b6000602082019050818103600083015261278f816123bc565b9050919050565b600060208201905081810360008301526127af816123df565b9050919050565b600060208201905081810360008301526127cf81612402565b9050919050565b600060208201905081810360008301526127ef81612425565b9050919050565b6000602082019050818103600083015261280f81612448565b9050919050565b6000602082019050818103600083015261282f8161246b565b9050919050565b6000602082019050818103600083015261284f8161248e565b9050919050565b6000602082019050818103600083015261286f816124b1565b9050919050565b6000602082019050818103600083015261288f816124d4565b9050919050565b600060208201905081810360008301526128af816124f7565b9050919050565b600060208201905081810360008301526128cf8161251a565b9050919050565b600060208201905081810360008301526128ef8161253d565b9050919050565b6000602082019050818103600083015261290f81612560565b9050919050565b6000602082019050818103600083015261292f81612583565b9050919050565b6000602082019050818103600083015261294f816125a6565b9050919050565b6000602082019050818103600083015261296f816125c9565b9050919050565b6000602082019050818103600083015261298f816125ec565b9050919050565b600060208201905081810360008301526129af8161260f565b9050919050565b60006020820190506129cb6000830184612632565b92915050565b60006129db6129ec565b90506129e78282612c19565b919050565b6000604051905090565b600067ffffffffffffffff821115612a1157612a10612d15565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a3d57612a3c612d15565b5b612a4682612d44565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a9682612b9b565b9150612aa183612b9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ad657612ad5612cb7565b5b828201905092915050565b6000612aec82612b9b565b9150612af783612b9b565b925082821015612b0a57612b09612cb7565b5b828203905092915050565b6000612b2082612b7b565b9050919050565b6000612b3282612b7b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612bd2578082015181840152602081019050612bb7565b83811115612be1576000848401525b50505050565b60006002820490506001821680612bff57607f821691505b60208210811415612c1357612c12612ce6565b5b50919050565b612c2282612d44565b810181811067ffffffffffffffff82111715612c4157612c40612d15565b5b80604052505050565b6000612c5582612b9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c8857612c87612cb7565b5b600182019050919050565b6000612c9e82612ca5565b9050919050565b6000612cb082612d55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f496e76616c69642070726f6f662c206e6f74206f6e2077686974656c69737400600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d75737420646f6e617465206174206c6561737420302e303031206574686572600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61326781612b15565b811461327257600080fd5b50565b61327e81612b39565b811461328957600080fd5b50565b61329581612b45565b81146132a057600080fd5b50565b6132ac81612b4f565b81146132b757600080fd5b50565b6132c381612b9b565b81146132ce57600080fd5b5056fe697066733a2f2f516d5a7068486d55427343686e3535594d56576f7839644b4a5764777538664348674c787362634d715674515138a26469706673582212203492c7e4d792640bd42862e2d94652c892c5b8af3c78e36c461f922e4b4d918864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
c7679223c0cf31f46222fcdd829c232851d4102b198f7b0ee30a218300a0ccbe
-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0xc7679223c0cf31f46222fcdd829c232851d4102b198f7b0ee30a218300a0ccbe
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : c7679223c0cf31f46222fcdd829c232851d4102b198f7b0ee30a218300a0ccbe
Deployed Bytecode Sourcemap
43947:2562:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28192:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29137:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30696:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30219:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31446:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44104:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31856:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28831:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28561:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43019:103;;;;;;;;;;;;;:::i;:::-;;44288:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42368:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44597:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45896:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30989:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32112:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46206:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45071:420;;;:::i;:::-;;31215:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43277:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28192:305;28294:4;28346:25;28331:40;;;:11;:40;;;;:105;;;;28403:33;28388:48;;;:11;:48;;;;28331:105;:158;;;;28453:36;28477:11;28453:23;:36::i;:::-;28331:158;28311:178;;28192:305;;;:::o;29137:100::-;29191:13;29224:5;29217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29137:100;:::o;30696:221::-;30772:7;30800:16;30808:7;30800;:16::i;:::-;30792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30885:15;:24;30901:7;30885:24;;;;;;;;;;;;;;;;;;;;;30878:31;;30696:221;;;:::o;30219:411::-;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30364:5;30358:11;;:2;:11;;;;30350:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30458:5;30442:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30467:37;30484:5;30491:12;:10;:12::i;:::-;30467:16;:37::i;:::-;30442:62;30420:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30601:21;30610:2;30614:7;30601:8;:21::i;:::-;30219:411;;;:::o;31446:339::-;31641:41;31660:12;:10;:12::i;:::-;31674:7;31641:18;:41::i;:::-;31633:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31749:28;31759:4;31765:2;31769:7;31749:9;:28::i;:::-;31446:339;;;:::o;44104:25::-;;;;:::o;31856:185::-;31994:39;32011:4;32017:2;32021:7;31994:39;;;;;;;;;;;;:16;:39::i;:::-;31856:185;;;:::o;28831:239::-;28903:7;28923:13;28939:7;:16;28947:7;28939:16;;;;;;;;;;;;;;;;;;;;;28923:32;;28991:1;28974:19;;:5;:19;;;;28966:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29057:5;29050:12;;;28831:239;;;:::o;28561:208::-;28633:7;28678:1;28661:19;;:5;:19;;;;28653:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28745:9;:16;28755:5;28745:16;;;;;;;;;;;;;;;;28738:23;;28561:208;;;:::o;43019:103::-;42599:12;:10;:12::i;:::-;42588:23;;:7;:5;:7::i;:::-;:23;;;42580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43084:30:::1;43111:1;43084:18;:30::i;:::-;43019:103::o:0;44288:93::-;;;;;;;;;;;;;:::o;42368:87::-;42414:7;42441:6;;;;;;;;;;;42434:13;;42368:87;:::o;29306:104::-;29362:13;29395:7;29388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29306:104;:::o;44597:466::-;4201:1;4799:7;;:19;;4791:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1;4932:7;:18;;;;44698:58:::1;44716:31;44736:10;44716:19;:31::i;:::-;44749:6;44698:17;:58::i;:::-;44676:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;44859:5;44834:30;;:9;:21;44844:10;44834:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;44826:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44894:15;44912:25;:15;:23;:25::i;:::-;44894:43;;44948:27;:15;:25;:27::i;:::-;45010:4;44986:9;:21;44996:10;44986:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;45025:30;45035:10;45047:7;45025:9;:30::i;:::-;4963:1;4157::::0;5111:7;:22;;;;44597:466;:::o;45896:302::-;46013:4;46055:135;46092:6;46117:10;;46146:29;46166:8;46146:19;:29::i;:::-;46055:18;:135::i;:::-;46035:155;;45896:302;;;;:::o;30989:155::-;31084:52;31103:12;:10;:12::i;:::-;31117:8;31127;31084:18;:52::i;:::-;30989:155;;:::o;32112:328::-;32287:41;32306:12;:10;:12::i;:::-;32320:7;32287:18;:41::i;:::-;32279:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32393:39;32407:4;32413:2;32417:7;32426:5;32393:13;:39::i;:::-;32112:328;;;;:::o;46206:300::-;46324:13;46377:16;46385:7;46377;:16::i;:::-;46355:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46488:10;:8;:10::i;:::-;46481:17;;46206:300;;;:::o;45071:420::-;4201:1;4799:7;;:19;;4791:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1;4932:7;:18;;;;45157:11:::1;45145:9;:23;45137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45249:5;45224:30;;:9;:21;45234:10;45224:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;45216:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45284:15;45302:25;:15;:23;:25::i;:::-;45284:43;;45338:27;:15;:25;:27::i;:::-;45400:4;45376:9;:21;45386:10;45376:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;45415:7;;;;;;;;;;;:16;;:27;45432:9;45415:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45453:30;45463:10;45475:7;45453:9;:30::i;:::-;4963:1;4157::::0;5111:7;:22;;;;45071:420::o;31215:164::-;31312:4;31336:18;:25;31355:5;31336:25;;;;;;;;;;;;;;;:35;31362:8;31336:35;;;;;;;;;;;;;;;;;;;;;;;;;31329:42;;31215:164;;;;:::o;43277:201::-;42599:12;:10;:12::i;:::-;42588:23;;:7;:5;:7::i;:::-;:23;;;42580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43386:1:::1;43366:22;;:8;:22;;;;43358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43442:28;43461:8;43442:18;:28::i;:::-;43277:201:::0;:::o;20053:157::-;20138:4;20177:25;20162:40;;;:11;:40;;;;20155:47;;20053:157;;;:::o;33950:127::-;34015:4;34067:1;34039:30;;:7;:16;34047:7;34039:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34032:37;;33950:127;;;:::o;26571:98::-;26624:7;26651:10;26644:17;;26571:98;:::o;38096:174::-;38198:2;38171:15;:24;38187:7;38171:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38254:7;38250:2;38216:46;;38225:23;38240:7;38225:14;:23::i;:::-;38216:46;;;;;;;;;;;;38096:174;;:::o;34244:348::-;34337:4;34362:16;34370:7;34362;:16::i;:::-;34354:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34438:13;34454:23;34469:7;34454:14;:23::i;:::-;34438:39;;34507:5;34496:16;;:7;:16;;;:51;;;;34540:7;34516:31;;:20;34528:7;34516:11;:20::i;:::-;:31;;;34496:51;:87;;;;34551:32;34568:5;34575:7;34551:16;:32::i;:::-;34496:87;34488:96;;;34244:348;;;;:::o;37353:625::-;37512:4;37485:31;;:23;37500:7;37485:14;:23::i;:::-;:31;;;37477:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37591:1;37577:16;;:2;:16;;;;37569:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37647:39;37668:4;37674:2;37678:7;37647:20;:39::i;:::-;37751:29;37768:1;37772:7;37751:8;:29::i;:::-;37812:1;37793:9;:15;37803:4;37793:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37841:1;37824:9;:13;37834:2;37824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37872:2;37853:7;:16;37861:7;37853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37911:7;37907:2;37892:27;;37901:4;37892:27;;;;;;;;;;;;37932:38;37952:4;37958:2;37962:7;37932:19;:38::i;:::-;37353:625;;;:::o;43638:191::-;43712:16;43731:6;;;;;;;;;;;43712:25;;43757:8;43748:6;;:17;;;;;;;;;;;;;;;;;;43812:8;43781:40;;43802:8;43781:40;;;;;;;;;;;;43638:191;;:::o;45499:174::-;45596:7;45655:8;45638:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;45628:37;;;;;;45621:44;;45499:174;;;:::o;45681:207::-;45802:4;45831:49;45850:6;45858:10;;45870:9;45831:18;:49::i;:::-;45824:56;;45681:207;;;;:::o;6020:114::-;6085:7;6112;:14;;;6105:21;;6020:114;;;:::o;6142:127::-;6249:1;6231:7;:14;;;:19;;;;;;;;;;;6142:127;:::o;34934:110::-;35010:26;35020:2;35024:7;35010:26;;;;;;;;;;;;:9;:26::i;:::-;34934:110;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;38412:315::-;38567:8;38558:17;;:5;:17;;;;38550:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38654:8;38616:18;:25;38635:5;38616:25;;;;;;;;;;;;;;;:35;38642:8;38616:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38700:8;38678:41;;38693:5;38678:41;;;38710:8;38678:41;;;;;;:::i;:::-;;;;;;;;38412:315;;;:::o;33322:::-;33479:28;33489:4;33495:2;33499:7;33479:9;:28::i;:::-;33526:48;33549:4;33555:2;33559:7;33568:5;33526:22;:48::i;:::-;33518:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33322:315;;;;:::o;44441:148::-;44493:13;44519:62;;;;;;;;;;;;;;;;;;;44441:148;:::o;40663:126::-;;;;:::o;41174:125::-;;;;:::o;35271:321::-;35401:18;35407:2;35411:7;35401:5;:18::i;:::-;35452:54;35483:1;35487:2;35491:7;35500:5;35452:22;:54::i;:::-;35430:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35271:321;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;;;;;;;;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1616:497;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;39292:799::-;39447:4;39468:15;:2;:13;;;:15::i;:::-;39464:620;;;39520:2;39504:36;;;39541:12;:10;:12::i;:::-;39555:4;39561:7;39570:5;39504:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39500:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39763:1;39746:6;:13;:18;39742:272;;;39789:60;;;;;;;;;;:::i;:::-;;;;;;;;39742:272;39964:6;39958:13;39949:6;39945:2;39941:15;39934:38;39500:529;39637:41;;;39627:51;;;:6;:51;;;;39620:58;;;;;39464:620;40068:4;40061:11;;39292:799;;;;;;;:::o;35928:439::-;36022:1;36008:16;;:2;:16;;;;36000:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36081:16;36089:7;36081;:16::i;:::-;36080:17;36072:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36143:45;36172:1;36176:2;36180:7;36143:20;:45::i;:::-;36218:1;36201:9;:13;36211:2;36201:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36249:2;36230:7;:16;36238:7;36230:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36294:7;36290:2;36269:33;;36286:1;36269:33;;;;;;;;;;;;36315:44;36343:1;36347:2;36351:7;36315:19;:44::i;:::-;35928:439;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2261:114;;;;:::o;9970:326::-;10030:4;10287:1;10265:7;:19;;;:23;10258:30;;9970:326;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:139::-;1080:5;1118:6;1105:20;1096:29;;1134:33;1161:5;1134:33;:::i;:::-;1086:87;;;;:::o;1196:303::-;1267:5;1316:3;1309:4;1301:6;1297:17;1293:27;1283:2;;1334:1;1331;1324:12;1283:2;1374:6;1361:20;1399:94;1489:3;1481:6;1474:4;1466:6;1462:17;1399:94;:::i;:::-;1390:103;;1273:226;;;;;:::o;1505:133::-;1548:5;1586:6;1573:20;1564:29;;1602:30;1626:5;1602:30;:::i;:::-;1554:84;;;;:::o;1644:139::-;1690:5;1728:6;1715:20;1706:29;;1744:33;1771:5;1744:33;:::i;:::-;1696:87;;;;:::o;1789:137::-;1834:5;1872:6;1859:20;1850:29;;1888:32;1914:5;1888:32;:::i;:::-;1840:86;;;;:::o;1932:141::-;1988:5;2019:6;2013:13;2004:22;;2035:32;2061:5;2035:32;:::i;:::-;1994:79;;;;:::o;2092:271::-;2147:5;2196:3;2189:4;2181:6;2177:17;2173:27;2163:2;;2214:1;2211;2204:12;2163:2;2254:6;2241:20;2279:78;2353:3;2345:6;2338:4;2330:6;2326:17;2279:78;:::i;:::-;2270:87;;2153:210;;;;;:::o;2369:139::-;2415:5;2453:6;2440:20;2431:29;;2469:33;2496:5;2469:33;:::i;:::-;2421:87;;;;:::o;2514:262::-;2573:6;2622:2;2610:9;2601:7;2597:23;2593:32;2590:2;;;2638:1;2635;2628:12;2590:2;2681:1;2706:53;2751:7;2742:6;2731:9;2727:22;2706:53;:::i;:::-;2696:63;;2652:117;2580:196;;;;:::o;2782:407::-;2850:6;2858;2907:2;2895:9;2886:7;2882:23;2878:32;2875:2;;;2923:1;2920;2913:12;2875:2;2966:1;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2937:117;3093:2;3119:53;3164:7;3155:6;3144:9;3140:22;3119:53;:::i;:::-;3109:63;;3064:118;2865:324;;;;;:::o;3195:552::-;3272:6;3280;3288;3337:2;3325:9;3316:7;3312:23;3308:32;3305:2;;;3353:1;3350;3343:12;3305:2;3396:1;3421:53;3466:7;3457:6;3446:9;3442:22;3421:53;:::i;:::-;3411:63;;3367:117;3523:2;3549:53;3594:7;3585:6;3574:9;3570:22;3549:53;:::i;:::-;3539:63;;3494:118;3651:2;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3622:118;3295:452;;;;;:::o;3753:809::-;3848:6;3856;3864;3872;3921:3;3909:9;3900:7;3896:23;3892:33;3889:2;;;3938:1;3935;3928:12;3889:2;3981:1;4006:53;4051:7;4042:6;4031:9;4027:22;4006:53;:::i;:::-;3996:63;;3952:117;4108:2;4134:53;4179:7;4170:6;4159:9;4155:22;4134:53;:::i;:::-;4124:63;;4079:118;4236:2;4262:53;4307:7;4298:6;4287:9;4283:22;4262:53;:::i;:::-;4252:63;;4207:118;4392:2;4381:9;4377:18;4364:32;4423:18;4415:6;4412:30;4409:2;;;4455:1;4452;4445:12;4409:2;4483:62;4537:7;4528:6;4517:9;4513:22;4483:62;:::i;:::-;4473:72;;4335:220;3879:683;;;;;;;:::o;4568:550::-;4661:6;4669;4718:2;4706:9;4697:7;4693:23;4689:32;4686:2;;;4734:1;4731;4724:12;4686:2;4777:1;4802:53;4847:7;4838:6;4827:9;4823:22;4802:53;:::i;:::-;4792:63;;4748:117;4932:2;4921:9;4917:18;4904:32;4963:18;4955:6;4952:30;4949:2;;;4995:1;4992;4985:12;4949:2;5023:78;5093:7;5084:6;5073:9;5069:22;5023:78;:::i;:::-;5013:88;;4875:236;4676:442;;;;;:::o;5124:401::-;5189:6;5197;5246:2;5234:9;5225:7;5221:23;5217:32;5214:2;;;5262:1;5259;5252:12;5214:2;5305:1;5330:53;5375:7;5366:6;5355:9;5351:22;5330:53;:::i;:::-;5320:63;;5276:117;5432:2;5458:50;5500:7;5491:6;5480:9;5476:22;5458:50;:::i;:::-;5448:60;;5403:115;5204:321;;;;;:::o;5531:407::-;5599:6;5607;5656:2;5644:9;5635:7;5631:23;5627:32;5624:2;;;5672:1;5669;5662:12;5624:2;5715:1;5740:53;5785:7;5776:6;5765:9;5761:22;5740:53;:::i;:::-;5730:63;;5686:117;5842:2;5868:53;5913:7;5904:6;5893:9;5889:22;5868:53;:::i;:::-;5858:63;;5813:118;5614:324;;;;;:::o;5944:405::-;6028:6;6077:2;6065:9;6056:7;6052:23;6048:32;6045:2;;;6093:1;6090;6083:12;6045:2;6164:1;6153:9;6149:17;6136:31;6194:18;6186:6;6183:30;6180:2;;;6226:1;6223;6216:12;6180:2;6254:78;6324:7;6315:6;6304:9;6300:22;6254:78;:::i;:::-;6244:88;;6107:235;6035:314;;;;:::o;6355:260::-;6413:6;6462:2;6450:9;6441:7;6437:23;6433:32;6430:2;;;6478:1;6475;6468:12;6430:2;6521:1;6546:52;6590:7;6581:6;6570:9;6566:22;6546:52;:::i;:::-;6536:62;;6492:116;6420:195;;;;:::o;6621:282::-;6690:6;6739:2;6727:9;6718:7;6714:23;6710:32;6707:2;;;6755:1;6752;6745:12;6707:2;6798:1;6823:63;6878:7;6869:6;6858:9;6854:22;6823:63;:::i;:::-;6813:73;;6769:127;6697:206;;;;:::o;6909:262::-;6968:6;7017:2;7005:9;6996:7;6992:23;6988:32;6985:2;;;7033:1;7030;7023:12;6985:2;7076:1;7101:53;7146:7;7137:6;7126:9;7122:22;7101:53;:::i;:::-;7091:63;;7047:117;6975:196;;;;:::o;7177:142::-;7280:32;7306:5;7280:32;:::i;:::-;7275:3;7268:45;7258:61;;:::o;7325:118::-;7412:24;7430:5;7412:24;:::i;:::-;7407:3;7400:37;7390:53;;:::o;7449:157::-;7554:45;7574:24;7592:5;7574:24;:::i;:::-;7554:45;:::i;:::-;7549:3;7542:58;7532:74;;:::o;7612:109::-;7693:21;7708:5;7693:21;:::i;:::-;7688:3;7681:34;7671:50;;:::o;7727:118::-;7814:24;7832:5;7814:24;:::i;:::-;7809:3;7802:37;7792:53;;:::o;7851:360::-;7937:3;7965:38;7997:5;7965:38;:::i;:::-;8019:70;8082:6;8077:3;8019:70;:::i;:::-;8012:77;;8098:52;8143:6;8138:3;8131:4;8124:5;8120:16;8098:52;:::i;:::-;8175:29;8197:6;8175:29;:::i;:::-;8170:3;8166:39;8159:46;;7941:270;;;;;:::o;8217:364::-;8305:3;8333:39;8366:5;8333:39;:::i;:::-;8388:71;8452:6;8447:3;8388:71;:::i;:::-;8381:78;;8468:52;8513:6;8508:3;8501:4;8494:5;8490:16;8468:52;:::i;:::-;8545:29;8567:6;8545:29;:::i;:::-;8540:3;8536:39;8529:46;;8309:272;;;;;:::o;8587:366::-;8729:3;8750:67;8814:2;8809:3;8750:67;:::i;:::-;8743:74;;8826:93;8915:3;8826:93;:::i;:::-;8944:2;8939:3;8935:12;8928:19;;8733:220;;;:::o;8959:366::-;9101:3;9122:67;9186:2;9181:3;9122:67;:::i;:::-;9115:74;;9198:93;9287:3;9198:93;:::i;:::-;9316:2;9311:3;9307:12;9300:19;;9105:220;;;:::o;9331:366::-;9473:3;9494:67;9558:2;9553:3;9494:67;:::i;:::-;9487:74;;9570:93;9659:3;9570:93;:::i;:::-;9688:2;9683:3;9679:12;9672:19;;9477:220;;;:::o;9703:366::-;9845:3;9866:67;9930:2;9925:3;9866:67;:::i;:::-;9859:74;;9942:93;10031:3;9942:93;:::i;:::-;10060:2;10055:3;10051:12;10044:19;;9849:220;;;:::o;10075:366::-;10217:3;10238:67;10302:2;10297:3;10238:67;:::i;:::-;10231:74;;10314:93;10403:3;10314:93;:::i;:::-;10432:2;10427:3;10423:12;10416:19;;10221:220;;;:::o;10447:366::-;10589:3;10610:67;10674:2;10669:3;10610:67;:::i;:::-;10603:74;;10686:93;10775:3;10686:93;:::i;:::-;10804:2;10799:3;10795:12;10788:19;;10593:220;;;:::o;10819:366::-;10961:3;10982:67;11046:2;11041:3;10982:67;:::i;:::-;10975:74;;11058:93;11147:3;11058:93;:::i;:::-;11176:2;11171:3;11167:12;11160:19;;10965:220;;;:::o;11191:366::-;11333:3;11354:67;11418:2;11413:3;11354:67;:::i;:::-;11347:74;;11430:93;11519:3;11430:93;:::i;:::-;11548:2;11543:3;11539:12;11532:19;;11337:220;;;:::o;11563:366::-;11705:3;11726:67;11790:2;11785:3;11726:67;:::i;:::-;11719:74;;11802:93;11891:3;11802:93;:::i;:::-;11920:2;11915:3;11911:12;11904:19;;11709:220;;;:::o;11935:366::-;12077:3;12098:67;12162:2;12157:3;12098:67;:::i;:::-;12091:74;;12174:93;12263:3;12174:93;:::i;:::-;12292:2;12287:3;12283:12;12276:19;;12081:220;;;:::o;12307:366::-;12449:3;12470:67;12534:2;12529:3;12470:67;:::i;:::-;12463:74;;12546:93;12635:3;12546:93;:::i;:::-;12664:2;12659:3;12655:12;12648:19;;12453:220;;;:::o;12679:366::-;12821:3;12842:67;12906:2;12901:3;12842:67;:::i;:::-;12835:74;;12918:93;13007:3;12918:93;:::i;:::-;13036:2;13031:3;13027:12;13020:19;;12825:220;;;:::o;13051:366::-;13193:3;13214:67;13278:2;13273:3;13214:67;:::i;:::-;13207:74;;13290:93;13379:3;13290:93;:::i;:::-;13408:2;13403:3;13399:12;13392:19;;13197:220;;;:::o;13423:366::-;13565:3;13586:67;13650:2;13645:3;13586:67;:::i;:::-;13579:74;;13662:93;13751:3;13662:93;:::i;:::-;13780:2;13775:3;13771:12;13764:19;;13569:220;;;:::o;13795:366::-;13937:3;13958:67;14022:2;14017:3;13958:67;:::i;:::-;13951:74;;14034:93;14123:3;14034:93;:::i;:::-;14152:2;14147:3;14143:12;14136:19;;13941:220;;;:::o;14167:366::-;14309:3;14330:67;14394:2;14389:3;14330:67;:::i;:::-;14323:74;;14406:93;14495:3;14406:93;:::i;:::-;14524:2;14519:3;14515:12;14508:19;;14313:220;;;:::o;14539:366::-;14681:3;14702:67;14766:2;14761:3;14702:67;:::i;:::-;14695:74;;14778:93;14867:3;14778:93;:::i;:::-;14896:2;14891:3;14887:12;14880:19;;14685:220;;;:::o;14911:366::-;15053:3;15074:67;15138:2;15133:3;15074:67;:::i;:::-;15067:74;;15150:93;15239:3;15150:93;:::i;:::-;15268:2;15263:3;15259:12;15252:19;;15057:220;;;:::o;15283:366::-;15425:3;15446:67;15510:2;15505:3;15446:67;:::i;:::-;15439:74;;15522:93;15611:3;15522:93;:::i;:::-;15640:2;15635:3;15631:12;15624:19;;15429:220;;;:::o;15655:366::-;15797:3;15818:67;15882:2;15877:3;15818:67;:::i;:::-;15811:74;;15894:93;15983:3;15894:93;:::i;:::-;16012:2;16007:3;16003:12;15996:19;;15801:220;;;:::o;16027:118::-;16114:24;16132:5;16114:24;:::i;:::-;16109:3;16102:37;16092:53;;:::o;16151:256::-;16263:3;16278:75;16349:3;16340:6;16278:75;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16398:3;16391:10;;16267:140;;;;:::o;16413:222::-;16506:4;16544:2;16533:9;16529:18;16521:26;;16557:71;16625:1;16614:9;16610:17;16601:6;16557:71;:::i;:::-;16511:124;;;;:::o;16641:254::-;16750:4;16788:2;16777:9;16773:18;16765:26;;16801:87;16885:1;16874:9;16870:17;16861:6;16801:87;:::i;:::-;16755:140;;;;:::o;16901:640::-;17096:4;17134:3;17123:9;17119:19;17111:27;;17148:71;17216:1;17205:9;17201:17;17192:6;17148:71;:::i;:::-;17229:72;17297:2;17286:9;17282:18;17273:6;17229:72;:::i;:::-;17311;17379:2;17368:9;17364:18;17355:6;17311:72;:::i;:::-;17430:9;17424:4;17420:20;17415:2;17404:9;17400:18;17393:48;17458:76;17529:4;17520:6;17458:76;:::i;:::-;17450:84;;17101:440;;;;;;;:::o;17547:210::-;17634:4;17672:2;17661:9;17657:18;17649:26;;17685:65;17747:1;17736:9;17732:17;17723:6;17685:65;:::i;:::-;17639:118;;;;:::o;17763:222::-;17856:4;17894:2;17883:9;17879:18;17871:26;;17907:71;17975:1;17964:9;17960:17;17951:6;17907:71;:::i;:::-;17861:124;;;;:::o;17991:313::-;18104:4;18142:2;18131:9;18127:18;18119:26;;18191:9;18185:4;18181:20;18177:1;18166:9;18162:17;18155:47;18219:78;18292:4;18283:6;18219:78;:::i;:::-;18211:86;;18109:195;;;;:::o;18310:419::-;18476:4;18514:2;18503:9;18499:18;18491:26;;18563:9;18557:4;18553:20;18549:1;18538:9;18534:17;18527:47;18591:131;18717:4;18591:131;:::i;:::-;18583:139;;18481:248;;;:::o;18735:419::-;18901:4;18939:2;18928:9;18924:18;18916:26;;18988:9;18982:4;18978:20;18974:1;18963:9;18959:17;18952:47;19016:131;19142:4;19016:131;:::i;:::-;19008:139;;18906:248;;;:::o;19160:419::-;19326:4;19364:2;19353:9;19349:18;19341:26;;19413:9;19407:4;19403:20;19399:1;19388:9;19384:17;19377:47;19441:131;19567:4;19441:131;:::i;:::-;19433:139;;19331:248;;;:::o;19585:419::-;19751:4;19789:2;19778:9;19774:18;19766:26;;19838:9;19832:4;19828:20;19824:1;19813:9;19809:17;19802:47;19866:131;19992:4;19866:131;:::i;:::-;19858:139;;19756:248;;;:::o;20010:419::-;20176:4;20214:2;20203:9;20199:18;20191:26;;20263:9;20257:4;20253:20;20249:1;20238:9;20234:17;20227:47;20291:131;20417:4;20291:131;:::i;:::-;20283:139;;20181:248;;;:::o;20435:419::-;20601:4;20639:2;20628:9;20624:18;20616:26;;20688:9;20682:4;20678:20;20674:1;20663:9;20659:17;20652:47;20716:131;20842:4;20716:131;:::i;:::-;20708:139;;20606:248;;;:::o;20860:419::-;21026:4;21064:2;21053:9;21049:18;21041:26;;21113:9;21107:4;21103:20;21099:1;21088:9;21084:17;21077:47;21141:131;21267:4;21141:131;:::i;:::-;21133:139;;21031:248;;;:::o;21285:419::-;21451:4;21489:2;21478:9;21474:18;21466:26;;21538:9;21532:4;21528:20;21524:1;21513:9;21509:17;21502:47;21566:131;21692:4;21566:131;:::i;:::-;21558:139;;21456:248;;;:::o;21710:419::-;21876:4;21914:2;21903:9;21899:18;21891:26;;21963:9;21957:4;21953:20;21949:1;21938:9;21934:17;21927:47;21991:131;22117:4;21991:131;:::i;:::-;21983:139;;21881:248;;;:::o;22135:419::-;22301:4;22339:2;22328:9;22324:18;22316:26;;22388:9;22382:4;22378:20;22374:1;22363:9;22359:17;22352:47;22416:131;22542:4;22416:131;:::i;:::-;22408:139;;22306:248;;;:::o;22560:419::-;22726:4;22764:2;22753:9;22749:18;22741:26;;22813:9;22807:4;22803:20;22799:1;22788:9;22784:17;22777:47;22841:131;22967:4;22841:131;:::i;:::-;22833:139;;22731:248;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;23156:248;;;:::o;23410:419::-;23576:4;23614:2;23603:9;23599:18;23591:26;;23663:9;23657:4;23653:20;23649:1;23638:9;23634:17;23627:47;23691:131;23817:4;23691:131;:::i;:::-;23683:139;;23581:248;;;:::o;23835:419::-;24001:4;24039:2;24028:9;24024:18;24016:26;;24088:9;24082:4;24078:20;24074:1;24063:9;24059:17;24052:47;24116:131;24242:4;24116:131;:::i;:::-;24108:139;;24006:248;;;:::o;24260:419::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24513:9;24507:4;24503:20;24499:1;24488:9;24484:17;24477:47;24541:131;24667:4;24541:131;:::i;:::-;24533:139;;24431:248;;;:::o;24685:419::-;24851:4;24889:2;24878:9;24874:18;24866:26;;24938:9;24932:4;24928:20;24924:1;24913:9;24909:17;24902:47;24966:131;25092:4;24966:131;:::i;:::-;24958:139;;24856:248;;;:::o;25110:419::-;25276:4;25314:2;25303:9;25299:18;25291:26;;25363:9;25357:4;25353:20;25349:1;25338:9;25334:17;25327:47;25391:131;25517:4;25391:131;:::i;:::-;25383:139;;25281:248;;;:::o;25535:419::-;25701:4;25739:2;25728:9;25724:18;25716:26;;25788:9;25782:4;25778:20;25774:1;25763:9;25759:17;25752:47;25816:131;25942:4;25816:131;:::i;:::-;25808:139;;25706:248;;;:::o;25960:419::-;26126:4;26164:2;26153:9;26149:18;26141:26;;26213:9;26207:4;26203:20;26199:1;26188:9;26184:17;26177:47;26241:131;26367:4;26241:131;:::i;:::-;26233:139;;26131:248;;;:::o;26385:419::-;26551:4;26589:2;26578:9;26574:18;26566:26;;26638:9;26632:4;26628:20;26624:1;26613:9;26609:17;26602:47;26666:131;26792:4;26666:131;:::i;:::-;26658:139;;26556:248;;;:::o;26810:222::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26954:71;27022:1;27011:9;27007:17;26998:6;26954:71;:::i;:::-;26908:124;;;;:::o;27038:129::-;27072:6;27099:20;;:::i;:::-;27089:30;;27128:33;27156:4;27148:6;27128:33;:::i;:::-;27079:88;;;:::o;27173:75::-;27206:6;27239:2;27233:9;27223:19;;27213:35;:::o;27254:311::-;27331:4;27421:18;27413:6;27410:30;27407:2;;;27443:18;;:::i;:::-;27407:2;27493:4;27485:6;27481:17;27473:25;;27553:4;27547;27543:15;27535:23;;27336:229;;;:::o;27571:307::-;27632:4;27722:18;27714:6;27711:30;27708:2;;;27744:18;;:::i;:::-;27708:2;27782:29;27804:6;27782:29;:::i;:::-;27774:37;;27866:4;27860;27856:15;27848:23;;27637:241;;;:::o;27884:98::-;27935:6;27969:5;27963:12;27953:22;;27942:40;;;:::o;27988:99::-;28040:6;28074:5;28068:12;28058:22;;28047:40;;;:::o;28093:168::-;28176:11;28210:6;28205:3;28198:19;28250:4;28245:3;28241:14;28226:29;;28188:73;;;;:::o;28267:169::-;28351:11;28385:6;28380:3;28373:19;28425:4;28420:3;28416:14;28401:29;;28363:73;;;;:::o;28442:305::-;28482:3;28501:20;28519:1;28501:20;:::i;:::-;28496:25;;28535:20;28553:1;28535:20;:::i;:::-;28530:25;;28689:1;28621:66;28617:74;28614:1;28611:81;28608:2;;;28695:18;;:::i;:::-;28608:2;28739:1;28736;28732:9;28725:16;;28486:261;;;;:::o;28753:191::-;28793:4;28813:20;28831:1;28813:20;:::i;:::-;28808:25;;28847:20;28865:1;28847:20;:::i;:::-;28842:25;;28886:1;28883;28880:8;28877:2;;;28891:18;;:::i;:::-;28877:2;28936:1;28933;28929:9;28921:17;;28798:146;;;;:::o;28950:96::-;28987:7;29016:24;29034:5;29016:24;:::i;:::-;29005:35;;28995:51;;;:::o;29052:104::-;29097:7;29126:24;29144:5;29126:24;:::i;:::-;29115:35;;29105:51;;;:::o;29162:90::-;29196:7;29239:5;29232:13;29225:21;29214:32;;29204:48;;;:::o;29258:77::-;29295:7;29324:5;29313:16;;29303:32;;;:::o;29341:149::-;29377:7;29417:66;29410:5;29406:78;29395:89;;29385:105;;;:::o;29496:126::-;29533:7;29573:42;29566:5;29562:54;29551:65;;29541:81;;;:::o;29628:77::-;29665:7;29694:5;29683:16;;29673:32;;;:::o;29711:154::-;29795:6;29790:3;29785;29772:30;29857:1;29848:6;29843:3;29839:16;29832:27;29762:103;;;:::o;29871:307::-;29939:1;29949:113;29963:6;29960:1;29957:13;29949:113;;;30048:1;30043:3;30039:11;30033:18;30029:1;30024:3;30020:11;30013:39;29985:2;29982:1;29978:10;29973:15;;29949:113;;;30080:6;30077:1;30074:13;30071:2;;;30160:1;30151:6;30146:3;30142:16;30135:27;30071:2;29920:258;;;;:::o;30184:320::-;30228:6;30265:1;30259:4;30255:12;30245:22;;30312:1;30306:4;30302:12;30333:18;30323:2;;30389:4;30381:6;30377:17;30367:27;;30323:2;30451;30443:6;30440:14;30420:18;30417:38;30414:2;;;30470:18;;:::i;:::-;30414:2;30235:269;;;;:::o;30510:281::-;30593:27;30615:4;30593:27;:::i;:::-;30585:6;30581:40;30723:6;30711:10;30708:22;30687:18;30675:10;30672:34;30669:62;30666:2;;;30734:18;;:::i;:::-;30666:2;30774:10;30770:2;30763:22;30553:238;;;:::o;30797:233::-;30836:3;30859:24;30877:5;30859:24;:::i;:::-;30850:33;;30905:66;30898:5;30895:77;30892:2;;;30975:18;;:::i;:::-;30892:2;31022:1;31015:5;31011:13;31004:20;;30840:190;;;:::o;31036:100::-;31075:7;31104:26;31124:5;31104:26;:::i;:::-;31093:37;;31083:53;;;:::o;31142:94::-;31181:7;31210:20;31224:5;31210:20;:::i;:::-;31199:31;;31189:47;;;:::o;31242:180::-;31290:77;31287:1;31280:88;31387:4;31384:1;31377:15;31411:4;31408:1;31401:15;31428:180;31476:77;31473:1;31466:88;31573:4;31570:1;31563:15;31597:4;31594:1;31587:15;31614:180;31662:77;31659:1;31652:88;31759:4;31756:1;31749:15;31783:4;31780:1;31773:15;31800:102;31841:6;31892:2;31888:7;31883:2;31876:5;31872:14;31868:28;31858:38;;31848:54;;;:::o;31908:94::-;31941:8;31989:5;31985:2;31981:14;31960:35;;31950:52;;;:::o;32008:164::-;32148:16;32144:1;32136:6;32132:14;32125:40;32114:58;:::o;32178:237::-;32318:34;32314:1;32306:6;32302:14;32295:58;32387:20;32382:2;32374:6;32370:15;32363:45;32284:131;:::o;32421:225::-;32561:34;32557:1;32549:6;32545:14;32538:58;32630:8;32625:2;32617:6;32613:15;32606:33;32527:119;:::o;32652:224::-;32792:34;32788:1;32780:6;32776:14;32769:58;32861:7;32856:2;32848:6;32844:15;32837:32;32758:118;:::o;32882:178::-;33022:30;33018:1;33010:6;33006:14;32999:54;32988:72;:::o;33066:223::-;33206:34;33202:1;33194:6;33190:14;33183:58;33275:6;33270:2;33262:6;33258:15;33251:31;33172:117;:::o;33295:175::-;33435:27;33431:1;33423:6;33419:14;33412:51;33401:69;:::o;33476:231::-;33616:34;33612:1;33604:6;33600:14;33593:58;33685:14;33680:2;33672:6;33668:15;33661:39;33582:125;:::o;33713:243::-;33853:34;33849:1;33841:6;33837:14;33830:58;33922:26;33917:2;33909:6;33905:15;33898:51;33819:137;:::o;33962:229::-;34102:34;34098:1;34090:6;34086:14;34079:58;34171:12;34166:2;34158:6;34154:15;34147:37;34068:123;:::o;34197:228::-;34337:34;34333:1;34325:6;34321:14;34314:58;34406:11;34401:2;34393:6;34389:15;34382:36;34303:122;:::o;34431:182::-;34571:34;34567:1;34559:6;34555:14;34548:58;34537:76;:::o;34619:181::-;34759:33;34755:1;34747:6;34743:14;34736:57;34725:75;:::o;34806:231::-;34946:34;34942:1;34934:6;34930:14;34923:58;35015:14;35010:2;35002:6;34998:15;34991:39;34912:125;:::o;35043:182::-;35183:34;35179:1;35171:6;35167:14;35160:58;35149:76;:::o;35231:234::-;35371:34;35367:1;35359:6;35355:14;35348:58;35440:17;35435:2;35427:6;35423:15;35416:42;35337:128;:::o;35471:220::-;35611:34;35607:1;35599:6;35595:14;35588:58;35680:3;35675:2;35667:6;35663:15;35656:28;35577:114;:::o;35697:236::-;35837:34;35833:1;35825:6;35821:14;35814:58;35906:19;35901:2;35893:6;35889:15;35882:44;35803:130;:::o;35939:182::-;36079:34;36075:1;36067:6;36063:14;36056:58;36045:76;:::o;36127:181::-;36267:33;36263:1;36255:6;36251:14;36244:57;36233:75;:::o;36314:122::-;36387:24;36405:5;36387:24;:::i;:::-;36380:5;36377:35;36367:2;;36426:1;36423;36416:12;36367:2;36357:79;:::o;36442:116::-;36512:21;36527:5;36512:21;:::i;:::-;36505:5;36502:32;36492:2;;36548:1;36545;36538:12;36492:2;36482:76;:::o;36564:122::-;36637:24;36655:5;36637:24;:::i;:::-;36630:5;36627:35;36617:2;;36676:1;36673;36666:12;36617:2;36607:79;:::o;36692:120::-;36764:23;36781:5;36764:23;:::i;:::-;36757:5;36754:34;36744:2;;36802:1;36799;36792:12;36744:2;36734:78;:::o;36818:122::-;36891:24;36909:5;36891:24;:::i;:::-;36884:5;36881:35;36871:2;;36930:1;36927;36920:12;36871:2;36861:79;:::o
Swarm Source
ipfs://3492c7e4d792640bd42862e2d94652c892c5b8af3c78e36c461f922e4b4d9188
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.