Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
5,208 ZR
Holders
1,989
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 ZRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
zimmy_raiders
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-04 */ /** ███████╗██╗███╗ ███╗███╗ ███╗██╗ ██╗ ██████╗ █████╗ ██╗██████╗ ███████╗██████╗ ███████╗ ╚══███╔╝██║████╗ ████║████╗ ████║╚██╗ ██╔╝ ██╔══██╗██╔══██╗██║██╔══██╗██╔════╝██╔══██╗██╔════╝ ███╔╝ ██║██╔████╔██║██╔████╔██║ ╚████╔╝ ██████╔╝███████║██║██║ ██║█████╗ ██████╔╝███████╗ ███╔╝ ██║██║╚██╔╝██║██║╚██╔╝██║ ╚██╔╝ ██╔══██╗██╔══██║██║██║ ██║██╔══╝ ██╔══██╗╚════██║ ███████╗██║██║ ╚═╝ ██║██║ ╚═╝ ██║ ██║ ██║ ██║██║ ██║██║██████╔╝███████╗██║ ██║███████║ ╚══════╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ /** // SPDX-License-Identifier: MIT 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); } 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); } } } } 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; } } 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); } } 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); } 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; } } 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; } 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); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } } pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; } // Compiler will pack the following // _currentIndex and _burnCounter into a single 256bit word. // The tokenId of the next token to be minted. uint128 internal _currentIndex; // The number of tokens burned. uint128 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return _currentIndex - _burnCounter; } } /** * @dev See {IERC721Enumerable-tokenByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenByIndex(uint256 index) public view override returns (uint256) { uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (!ownership.burned) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert TokenIndexOutOfBounds(); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. revert(); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 { _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 { _transfer(from, to, tokenId); if (!_checkOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = uint128(updatedIndex); } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } 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. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ 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 Merkle 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) } } } contract zimmy_raiders is ERC721A, Ownable { uint256 public constant MAX_MINTS = 4; uint256 public constant MAX_SUPPLY = 5208; uint256 public constant NUMBER_RESERVED_TOKENS = 240; uint256 public reservedTokensMinted = 0; uint256 public mintRate = 0.065 ether; uint256 public alRate = 0.055 ether; bool public allowListIsActive = false; bool public saleIsActive = false; mapping(address => uint256) public allowListTimesMinted; bytes32 public rootHash; string public baseURI; constructor(bytes32 _rootHash) ERC721A("Zimmy Raiders", "ZR") { rootHash = _rootHash; } function mint(uint256 quantity) external payable { // _safeMint's second argument now takes in a quantity, not a tokenId. require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough tokens left"); require(msg.value >= (mintRate * quantity), "Not enough ether sent"); require(saleIsActive, "Public mint period not active"); _safeMint(msg.sender, quantity); } function allowListMint(uint256 quantity, bytes32[] calldata _proof) external payable { // _safeMint's second argument now takes in a quantity, not a tokenId. bytes32 _address = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_proof, rootHash, _address), "Address not found in whitelist"); require(quantity + allowListTimesMinted[msg.sender] <= MAX_MINTS, "Only 4 allow list mints per wallet"); require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough tokens left"); require(msg.value >= (alRate * quantity), "Not enough ether sent"); require(allowListIsActive, "Allow list mint period not active"); allowListTimesMinted[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function mintReservedTokens(address to, uint16 quantity) external onlyOwner { require(reservedTokensMinted + quantity <= NUMBER_RESERVED_TOKENS, "This amount is more than max allowed"); reservedTokensMinted += quantity; _safeMint(to, quantity); } function withdraw() external payable onlyOwner { payable(owner()).transfer(address(this).balance); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setMintRate(uint256 _mintRate) public onlyOwner { mintRate = _mintRate; } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function setRootHash(bytes32 _hash) public onlyOwner { rootHash = _hash; } function flipAllowlistState() public onlyOwner { allowListIsActive = !allowListIsActive; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_rootHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":[],"name":"MAX_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUMBER_RESERVED_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"allowListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowListTimesMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipAllowlistState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint16","name":"quantity","type":"uint16"}],"name":"mintReservedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"reservedTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintRate","type":"uint256"}],"name":"setMintRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"setRootHash","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052600060085566e6ed27d666800060095566c3663566a58000600a55600b805461ffff191690553480156200003757600080fd5b5060405162002499380380620024998339810160408190526200005a91620001e1565b604080518082018252600d81526c5a696d6d79205261696465727360981b6020808301918252835180850190945260028452612d2960f11b908401528151919291620000a9916001916200013b565b508051620000bf9060029060208401906200013b565b505050620000dc620000d6620000e560201b60201c565b620000e9565b600d5562000237565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014990620001fa565b90600052602060002090601f0160209004810192826200016d5760008555620001b8565b82601f106200018857805160ff1916838001178555620001b8565b82800160010185558215620001b8579182015b82811115620001b85782518255916020019190600101906200019b565b50620001c6929150620001ca565b5090565b5b80821115620001c65760008155600101620001cb565b600060208284031215620001f3578081fd5b5051919050565b600181811c908216806200020f57607f821691505b602082108114156200023157634e487b7160e01b600052602260045260246000fd5b50919050565b61225280620002476000396000f3fe6080604052600436106102305760003560e01c8063715018a61161012e578063c3df0d9c116100ab578063e985e9c51161006f578063e985e9c514610614578063eb8d24441461065d578063ec8bda8e1461067c578063f2fde38b1461068f578063f3e38821146106af57600080fd5b8063c3df0d9c14610594578063c87b56dd146105a9578063ca0dcf16146105c9578063cce132d1146105df578063dbe2193f146105f457600080fd5b8063a22cb465116100f2578063a22cb465146104f8578063a5726b9a14610518578063b22edfbc14610545578063b88d4fde1461055a578063b8be499b1461057a57600080fd5b8063715018a61461047d57806378047418146104925780638da5cb5b146104b257806395d89b41146104d0578063a0712d68146104e557600080fd5b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146103e857806355f804b3146104085780636352211e146104285780636c0360eb1461044857806370a082311461045d57600080fd5b80632f745c591461037557806332cb6b0c1461039557806334918dfd146103ab5780633ccfd60b146103c057806342842e0e146103c857600080fd5b8063114c186a11610203578063114c186a146102e657806318160ddd1461030a5780631d80009a1461031f57806323b872dd146103355780632d7eae661461035557600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c578063095ea7b3146102c4575b600080fd5b34801561024157600080fd5b50610255610250366004611ef6565b6106c5565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610732565b6040516102619190612084565b34801561029857600080fd5b506102ac6102a7366004611ede565b6107c4565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102e46102df366004611eb5565b610808565b005b3480156102f257600080fd5b506102fc600a5481565b604051908152602001610261565b34801561031657600080fd5b506102fc610896565b34801561032b57600080fd5b506102fc600d5481565b34801561034157600080fd5b506102e4610350366004611d97565b6108b5565b34801561036157600080fd5b506102e4610370366004611ede565b6108c0565b34801561038157600080fd5b506102fc610390366004611eb5565b6108f8565b3480156103a157600080fd5b506102fc61145881565b3480156103b757600080fd5b506102e46109f4565b6102e4610a3b565b3480156103d457600080fd5b506102e46103e3366004611d97565b610aa1565b3480156103f457600080fd5b506102fc610403366004611ede565b610abc565b34801561041457600080fd5b506102e4610423366004611f2e565b610b66565b34801561043457600080fd5b506102ac610443366004611ede565b610ba7565b34801561045457600080fd5b5061027f610bb9565b34801561046957600080fd5b506102fc610478366004611d4b565b610c47565b34801561048957600080fd5b506102e4610c95565b34801561049e57600080fd5b506102e46104ad366004611e84565b610ccb565b3480156104be57600080fd5b506007546001600160a01b03166102ac565b3480156104dc57600080fd5b5061027f610d8d565b6102e46104f3366004611ede565b610d9c565b34801561050457600080fd5b506102e4610513366004611e4a565b610eaf565b34801561052457600080fd5b506102fc610533366004611d4b565b600c6020526000908152604090205481565b34801561055157600080fd5b506102fc60f081565b34801561056657600080fd5b506102e4610575366004611dd2565b610f45565b34801561058657600080fd5b50600b546102559060ff1681565b3480156105a057600080fd5b506102e4610f7f565b3480156105b557600080fd5b5061027f6105c4366004611ede565b610fbd565b3480156105d557600080fd5b506102fc60095481565b3480156105eb57600080fd5b506102fc600481565b34801561060057600080fd5b506102e461060f366004611ede565b611042565b34801561062057600080fd5b5061025561062f366004611d65565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561066957600080fd5b50600b5461025590610100900460ff1681565b6102e461068a366004611f73565b611071565b34801561069b57600080fd5b506102e46106aa366004611d4b565b6112ea565b3480156106bb57600080fd5b506102fc60085481565b60006001600160e01b031982166380ac58cd60e01b14806106f657506001600160e01b03198216635b5e139f60e01b145b8061071157506001600160e01b0319821663780e9d6360e01b145b8061072c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546107419061215a565b80601f016020809104026020016040519081016040528092919081815260200182805461076d9061215a565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050905090565b60006107cf82611382565b6107ec576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061081382610ba7565b9050806001600160a01b0316836001600160a01b031614156108485760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108685750610866813361062f565b155b15610886576040516367d9dca160e11b815260040160405180910390fd5b6108918383836113b6565b505050565b6000546001600160801b03600160801b82048116918116919091031690565b610891838383611412565b6007546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea90612097565b60405180910390fd5b600d55565b600061090383610c47565b8210610922576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b838110156109ee57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16158015928201929092529061099a57506109e6565b80516001600160a01b0316156109af57805192505b876001600160a01b0316836001600160a01b031614156109e457868414156109dd5750935061072c92505050565b6001909301925b505b600101610933565b50600080fd5b6007546001600160a01b03163314610a1e5760405162461bcd60e51b81526004016108ea90612097565b600b805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b03163314610a655760405162461bcd60e51b81526004016108ea90612097565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b50565b61089183838360405180602001604052806000815250610f45565b600080546001600160801b031681805b82811015610b4c57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290610b435785831415610b3c5750949350505050565b6001909201915b50600101610acc565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b03163314610b905760405162461bcd60e51b81526004016108ea90612097565b8051610ba390600e906020840190611c21565b5050565b6000610bb28261162f565b5192915050565b600e8054610bc69061215a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf29061215a565b8015610c3f5780601f10610c1457610100808354040283529160200191610c3f565b820191906000526020600020905b815481529060010190602001808311610c2257829003601f168201915b505050505081565b60006001600160a01b038216610c70576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b03163314610cbf5760405162461bcd60e51b81526004016108ea90612097565b610cc96000611751565b565b6007546001600160a01b03163314610cf55760405162461bcd60e51b81526004016108ea90612097565b60f08161ffff16600854610d0991906120cc565b1115610d635760405162461bcd60e51b8152602060048201526024808201527f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c6044820152631bddd95960e21b60648201526084016108ea565b8061ffff1660086000828254610d7991906120cc565b90915550610ba390508261ffff83166117a3565b6060600280546107419061215a565b61145881610da8610896565b610db291906120cc565b1115610df95760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108ea565b80600954610e0791906120f8565b341015610e4e5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016108ea565b600b54610100900460ff16610ea55760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e7420706572696f64206e6f742061637469766500000060448201526064016108ea565b610a9e33826117a3565b6001600160a01b038216331415610ed95760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f50848484611412565b610f5c848484846117bd565b610f79576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b03163314610fa95760405162461bcd60e51b81526004016108ea90612097565b600b805460ff19811660ff90911615179055565b6060610fc882611382565b610fe557604051630a14c4b560e41b815260040160405180910390fd5b6000610fef6118cc565b9050805160001415611010576040518060200160405280600081525061103b565b8061101a846118db565b60405160200161102b929190612018565b6040516020818303038152906040525b9392505050565b6007546001600160a01b0316331461106c5760405162461bcd60e51b81526004016108ea90612097565b600955565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506110eb83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d5491508490506119f4565b6111375760405162461bcd60e51b815260206004820152601e60248201527f41646472657373206e6f7420666f756e6420696e2077686974656c697374000060448201526064016108ea565b336000908152600c602052604090205460049061115490866120cc565b11156111ad5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79203420616c6c6f77206c697374206d696e7473207065722077616c6c604482015261195d60f21b60648201526084016108ea565b611458846111b9610896565b6111c391906120cc565b111561120a5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108ea565b83600a5461121891906120f8565b34101561125f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016108ea565b600b5460ff166112bb5760405162461bcd60e51b815260206004820152602160248201527f416c6c6f77206c697374206d696e7420706572696f64206e6f742061637469766044820152606560f81b60648201526084016108ea565b336000908152600c6020526040812080548692906112da9084906120cc565b90915550610f79905033856117a3565b6007546001600160a01b031633146113145760405162461bcd60e51b81526004016108ea90612097565b6001600160a01b0381166113795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ea565b610a9e81611751565b600080546001600160801b03168210801561072c575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061141d8261162f565b80519091506000906001600160a01b0316336001600160a01b0316148061144b5750815161144b903361062f565b8061146657503361145b846107c4565b6001600160a01b0316145b90508061148657604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146114bb5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166114e257604051633a954ecd60e21b815260040160405180910390fd5b6114f260008484600001516113b6565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166115e5576000546001600160801b03168110156115e557825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561173857600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906117365780516001600160a01b0316156116cd579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611731579392505050565b6116cd565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610ba3828260405180602001604052806000815250611a0a565b60006001600160a01b0384163b156118c057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611801903390899088908890600401612047565b602060405180830381600087803b15801561181b57600080fd5b505af192505050801561184b575060408051601f3d908101601f1916820190925261184891810190611f12565b60015b6118a6573d808015611879576040519150601f19603f3d011682016040523d82523d6000602084013e61187e565b606091505b50805161189e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118c4565b5060015b949350505050565b6060600e80546107419061215a565b6060816118ff5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611929578061191381612195565b91506119229050600a836120e4565b9150611903565b6000816001600160401b0381111561195157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561197b576020820181803683370190505b5090505b84156118c457611990600183612117565b915061199d600a866121b0565b6119a89060306120cc565b60f81b8183815181106119cb57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506119ed600a866120e4565b945061197f565b600082611a018584611a17565b14949350505050565b6108918383836001611a99565b600081815b8451811015611a91576000858281518110611a4757634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611a6d5760008381526020829052604090209250611a7e565b600081815260208490526040902092505b5080611a8981612195565b915050611a1c565b509392505050565b6000546001600160801b03166001600160a01b038516611acb57604051622e076360e81b815260040160405180910390fd5b83611ae95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b85811015611bfb5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4838015611bd15750611bcf60008884886117bd565b155b15611bef576040516368d2bf6b60e11b815260040160405180910390fd5b60019182019101611b7a565b50600080546001600160801b0319166001600160801b0392909216919091179055611628565b828054611c2d9061215a565b90600052602060002090601f016020900481019282611c4f5760008555611c95565b82601f10611c6857805160ff1916838001178555611c95565b82800160010185558215611c95579182015b82811115611c95578251825591602001919060010190611c7a565b50611ca1929150611ca5565b5090565b5b80821115611ca15760008155600101611ca6565b60006001600160401b0380841115611cd457611cd46121f0565b604051601f8501601f19908116603f01168101908282118183101715611cfc57611cfc6121f0565b81604052809350858152868686011115611d1557600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611d4657600080fd5b919050565b600060208284031215611d5c578081fd5b61103b82611d2f565b60008060408385031215611d77578081fd5b611d8083611d2f565b9150611d8e60208401611d2f565b90509250929050565b600080600060608486031215611dab578081fd5b611db484611d2f565b9250611dc260208501611d2f565b9150604084013590509250925092565b60008060008060808587031215611de7578081fd5b611df085611d2f565b9350611dfe60208601611d2f565b92506040850135915060608501356001600160401b03811115611e1f578182fd5b8501601f81018713611e2f578182fd5b611e3e87823560208401611cba565b91505092959194509250565b60008060408385031215611e5c578182fd5b611e6583611d2f565b915060208301358015158114611e79578182fd5b809150509250929050565b60008060408385031215611e96578182fd5b611e9f83611d2f565b9150602083013561ffff81168114611e79578182fd5b60008060408385031215611ec7578182fd5b611ed083611d2f565b946020939093013593505050565b600060208284031215611eef578081fd5b5035919050565b600060208284031215611f07578081fd5b813561103b81612206565b600060208284031215611f23578081fd5b815161103b81612206565b600060208284031215611f3f578081fd5b81356001600160401b03811115611f54578182fd5b8201601f81018413611f64578182fd5b6118c484823560208401611cba565b600080600060408486031215611f87578081fd5b8335925060208401356001600160401b0380821115611fa4578283fd5b818601915086601f830112611fb7578283fd5b813581811115611fc5578384fd5b8760208260051b8501011115611fd9578384fd5b6020830194508093505050509250925092565b6000815180845261200481602086016020860161212e565b601f01601f19169290920160200192915050565b6000835161202a81846020880161212e565b83519083019061203e81836020880161212e565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207a90830184611fec565b9695505050505050565b60208152600061103b6020830184611fec565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156120df576120df6121c4565b500190565b6000826120f3576120f36121da565b500490565b6000816000190483118215151615612112576121126121c4565b500290565b600082821015612129576121296121c4565b500390565b60005b83811015612149578181015183820152602001612131565b83811115610f795750506000910152565b600181811c9082168061216e57607f821691505b6020821081141561218f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121a9576121a96121c4565b5060010190565b6000826121bf576121bf6121da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a9e57600080fdfea26469706673582212201dad8c840c8cf2c262cde5d3c4563d807dbfca053286e924da9bbdce3c0f44f764736f6c6343000804003331d8a0fae69b9f129e30ab308ab42fc7fc9e22f7852091070526d5c236f902c6
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063715018a61161012e578063c3df0d9c116100ab578063e985e9c51161006f578063e985e9c514610614578063eb8d24441461065d578063ec8bda8e1461067c578063f2fde38b1461068f578063f3e38821146106af57600080fd5b8063c3df0d9c14610594578063c87b56dd146105a9578063ca0dcf16146105c9578063cce132d1146105df578063dbe2193f146105f457600080fd5b8063a22cb465116100f2578063a22cb465146104f8578063a5726b9a14610518578063b22edfbc14610545578063b88d4fde1461055a578063b8be499b1461057a57600080fd5b8063715018a61461047d57806378047418146104925780638da5cb5b146104b257806395d89b41146104d0578063a0712d68146104e557600080fd5b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146103e857806355f804b3146104085780636352211e146104285780636c0360eb1461044857806370a082311461045d57600080fd5b80632f745c591461037557806332cb6b0c1461039557806334918dfd146103ab5780633ccfd60b146103c057806342842e0e146103c857600080fd5b8063114c186a11610203578063114c186a146102e657806318160ddd1461030a5780631d80009a1461031f57806323b872dd146103355780632d7eae661461035557600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c578063095ea7b3146102c4575b600080fd5b34801561024157600080fd5b50610255610250366004611ef6565b6106c5565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610732565b6040516102619190612084565b34801561029857600080fd5b506102ac6102a7366004611ede565b6107c4565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102e46102df366004611eb5565b610808565b005b3480156102f257600080fd5b506102fc600a5481565b604051908152602001610261565b34801561031657600080fd5b506102fc610896565b34801561032b57600080fd5b506102fc600d5481565b34801561034157600080fd5b506102e4610350366004611d97565b6108b5565b34801561036157600080fd5b506102e4610370366004611ede565b6108c0565b34801561038157600080fd5b506102fc610390366004611eb5565b6108f8565b3480156103a157600080fd5b506102fc61145881565b3480156103b757600080fd5b506102e46109f4565b6102e4610a3b565b3480156103d457600080fd5b506102e46103e3366004611d97565b610aa1565b3480156103f457600080fd5b506102fc610403366004611ede565b610abc565b34801561041457600080fd5b506102e4610423366004611f2e565b610b66565b34801561043457600080fd5b506102ac610443366004611ede565b610ba7565b34801561045457600080fd5b5061027f610bb9565b34801561046957600080fd5b506102fc610478366004611d4b565b610c47565b34801561048957600080fd5b506102e4610c95565b34801561049e57600080fd5b506102e46104ad366004611e84565b610ccb565b3480156104be57600080fd5b506007546001600160a01b03166102ac565b3480156104dc57600080fd5b5061027f610d8d565b6102e46104f3366004611ede565b610d9c565b34801561050457600080fd5b506102e4610513366004611e4a565b610eaf565b34801561052457600080fd5b506102fc610533366004611d4b565b600c6020526000908152604090205481565b34801561055157600080fd5b506102fc60f081565b34801561056657600080fd5b506102e4610575366004611dd2565b610f45565b34801561058657600080fd5b50600b546102559060ff1681565b3480156105a057600080fd5b506102e4610f7f565b3480156105b557600080fd5b5061027f6105c4366004611ede565b610fbd565b3480156105d557600080fd5b506102fc60095481565b3480156105eb57600080fd5b506102fc600481565b34801561060057600080fd5b506102e461060f366004611ede565b611042565b34801561062057600080fd5b5061025561062f366004611d65565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561066957600080fd5b50600b5461025590610100900460ff1681565b6102e461068a366004611f73565b611071565b34801561069b57600080fd5b506102e46106aa366004611d4b565b6112ea565b3480156106bb57600080fd5b506102fc60085481565b60006001600160e01b031982166380ac58cd60e01b14806106f657506001600160e01b03198216635b5e139f60e01b145b8061071157506001600160e01b0319821663780e9d6360e01b145b8061072c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546107419061215a565b80601f016020809104026020016040519081016040528092919081815260200182805461076d9061215a565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050905090565b60006107cf82611382565b6107ec576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061081382610ba7565b9050806001600160a01b0316836001600160a01b031614156108485760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108685750610866813361062f565b155b15610886576040516367d9dca160e11b815260040160405180910390fd5b6108918383836113b6565b505050565b6000546001600160801b03600160801b82048116918116919091031690565b610891838383611412565b6007546001600160a01b031633146108f35760405162461bcd60e51b81526004016108ea90612097565b60405180910390fd5b600d55565b600061090383610c47565b8210610922576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b838110156109ee57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16158015928201929092529061099a57506109e6565b80516001600160a01b0316156109af57805192505b876001600160a01b0316836001600160a01b031614156109e457868414156109dd5750935061072c92505050565b6001909301925b505b600101610933565b50600080fd5b6007546001600160a01b03163314610a1e5760405162461bcd60e51b81526004016108ea90612097565b600b805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b03163314610a655760405162461bcd60e51b81526004016108ea90612097565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b50565b61089183838360405180602001604052806000815250610f45565b600080546001600160801b031681805b82811015610b4c57600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290610b435785831415610b3c5750949350505050565b6001909201915b50600101610acc565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b03163314610b905760405162461bcd60e51b81526004016108ea90612097565b8051610ba390600e906020840190611c21565b5050565b6000610bb28261162f565b5192915050565b600e8054610bc69061215a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf29061215a565b8015610c3f5780601f10610c1457610100808354040283529160200191610c3f565b820191906000526020600020905b815481529060010190602001808311610c2257829003601f168201915b505050505081565b60006001600160a01b038216610c70576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160401b031690565b6007546001600160a01b03163314610cbf5760405162461bcd60e51b81526004016108ea90612097565b610cc96000611751565b565b6007546001600160a01b03163314610cf55760405162461bcd60e51b81526004016108ea90612097565b60f08161ffff16600854610d0991906120cc565b1115610d635760405162461bcd60e51b8152602060048201526024808201527f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c6044820152631bddd95960e21b60648201526084016108ea565b8061ffff1660086000828254610d7991906120cc565b90915550610ba390508261ffff83166117a3565b6060600280546107419061215a565b61145881610da8610896565b610db291906120cc565b1115610df95760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108ea565b80600954610e0791906120f8565b341015610e4e5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016108ea565b600b54610100900460ff16610ea55760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e7420706572696f64206e6f742061637469766500000060448201526064016108ea565b610a9e33826117a3565b6001600160a01b038216331415610ed95760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f50848484611412565b610f5c848484846117bd565b610f79576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b03163314610fa95760405162461bcd60e51b81526004016108ea90612097565b600b805460ff19811660ff90911615179055565b6060610fc882611382565b610fe557604051630a14c4b560e41b815260040160405180910390fd5b6000610fef6118cc565b9050805160001415611010576040518060200160405280600081525061103b565b8061101a846118db565b60405160200161102b929190612018565b6040516020818303038152906040525b9392505050565b6007546001600160a01b0316331461106c5760405162461bcd60e51b81526004016108ea90612097565b600955565b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506110eb83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d5491508490506119f4565b6111375760405162461bcd60e51b815260206004820152601e60248201527f41646472657373206e6f7420666f756e6420696e2077686974656c697374000060448201526064016108ea565b336000908152600c602052604090205460049061115490866120cc565b11156111ad5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79203420616c6c6f77206c697374206d696e7473207065722077616c6c604482015261195d60f21b60648201526084016108ea565b611458846111b9610896565b6111c391906120cc565b111561120a5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108ea565b83600a5461121891906120f8565b34101561125f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016108ea565b600b5460ff166112bb5760405162461bcd60e51b815260206004820152602160248201527f416c6c6f77206c697374206d696e7420706572696f64206e6f742061637469766044820152606560f81b60648201526084016108ea565b336000908152600c6020526040812080548692906112da9084906120cc565b90915550610f79905033856117a3565b6007546001600160a01b031633146113145760405162461bcd60e51b81526004016108ea90612097565b6001600160a01b0381166113795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ea565b610a9e81611751565b600080546001600160801b03168210801561072c575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061141d8261162f565b80519091506000906001600160a01b0316336001600160a01b0316148061144b5750815161144b903361062f565b8061146657503361145b846107c4565b6001600160a01b0316145b90508061148657604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146114bb5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166114e257604051633a954ecd60e21b815260040160405180910390fd5b6114f260008484600001516113b6565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166115e5576000546001600160801b03168110156115e557825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561173857600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906117365780516001600160a01b0316156116cd579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611731579392505050565b6116cd565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610ba3828260405180602001604052806000815250611a0a565b60006001600160a01b0384163b156118c057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611801903390899088908890600401612047565b602060405180830381600087803b15801561181b57600080fd5b505af192505050801561184b575060408051601f3d908101601f1916820190925261184891810190611f12565b60015b6118a6573d808015611879576040519150601f19603f3d011682016040523d82523d6000602084013e61187e565b606091505b50805161189e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118c4565b5060015b949350505050565b6060600e80546107419061215a565b6060816118ff5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611929578061191381612195565b91506119229050600a836120e4565b9150611903565b6000816001600160401b0381111561195157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561197b576020820181803683370190505b5090505b84156118c457611990600183612117565b915061199d600a866121b0565b6119a89060306120cc565b60f81b8183815181106119cb57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506119ed600a866120e4565b945061197f565b600082611a018584611a17565b14949350505050565b6108918383836001611a99565b600081815b8451811015611a91576000858281518110611a4757634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611a6d5760008381526020829052604090209250611a7e565b600081815260208490526040902092505b5080611a8981612195565b915050611a1c565b509392505050565b6000546001600160801b03166001600160a01b038516611acb57604051622e076360e81b815260040160405180910390fd5b83611ae95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b031981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b85811015611bfb5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4838015611bd15750611bcf60008884886117bd565b155b15611bef576040516368d2bf6b60e11b815260040160405180910390fd5b60019182019101611b7a565b50600080546001600160801b0319166001600160801b0392909216919091179055611628565b828054611c2d9061215a565b90600052602060002090601f016020900481019282611c4f5760008555611c95565b82601f10611c6857805160ff1916838001178555611c95565b82800160010185558215611c95579182015b82811115611c95578251825591602001919060010190611c7a565b50611ca1929150611ca5565b5090565b5b80821115611ca15760008155600101611ca6565b60006001600160401b0380841115611cd457611cd46121f0565b604051601f8501601f19908116603f01168101908282118183101715611cfc57611cfc6121f0565b81604052809350858152868686011115611d1557600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611d4657600080fd5b919050565b600060208284031215611d5c578081fd5b61103b82611d2f565b60008060408385031215611d77578081fd5b611d8083611d2f565b9150611d8e60208401611d2f565b90509250929050565b600080600060608486031215611dab578081fd5b611db484611d2f565b9250611dc260208501611d2f565b9150604084013590509250925092565b60008060008060808587031215611de7578081fd5b611df085611d2f565b9350611dfe60208601611d2f565b92506040850135915060608501356001600160401b03811115611e1f578182fd5b8501601f81018713611e2f578182fd5b611e3e87823560208401611cba565b91505092959194509250565b60008060408385031215611e5c578182fd5b611e6583611d2f565b915060208301358015158114611e79578182fd5b809150509250929050565b60008060408385031215611e96578182fd5b611e9f83611d2f565b9150602083013561ffff81168114611e79578182fd5b60008060408385031215611ec7578182fd5b611ed083611d2f565b946020939093013593505050565b600060208284031215611eef578081fd5b5035919050565b600060208284031215611f07578081fd5b813561103b81612206565b600060208284031215611f23578081fd5b815161103b81612206565b600060208284031215611f3f578081fd5b81356001600160401b03811115611f54578182fd5b8201601f81018413611f64578182fd5b6118c484823560208401611cba565b600080600060408486031215611f87578081fd5b8335925060208401356001600160401b0380821115611fa4578283fd5b818601915086601f830112611fb7578283fd5b813581811115611fc5578384fd5b8760208260051b8501011115611fd9578384fd5b6020830194508093505050509250925092565b6000815180845261200481602086016020860161212e565b601f01601f19169290920160200192915050565b6000835161202a81846020880161212e565b83519083019061203e81836020880161212e565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207a90830184611fec565b9695505050505050565b60208152600061103b6020830184611fec565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156120df576120df6121c4565b500190565b6000826120f3576120f36121da565b500490565b6000816000190483118215151615612112576121126121c4565b500290565b600082821015612129576121296121c4565b500390565b60005b83811015612149578181015183820152602001612131565b83811115610f795750506000910152565b600181811c9082168061216e57607f821691505b6020821081141561218f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121a9576121a96121c4565b5060010190565b6000826121bf576121bf6121da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a9e57600080fdfea26469706673582212201dad8c840c8cf2c262cde5d3c4563d807dbfca053286e924da9bbdce3c0f44f764736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
31d8a0fae69b9f129e30ab308ab42fc7fc9e22f7852091070526d5c236f902c6
-----Decoded View---------------
Arg [0] : _rootHash (bytes32): 0x31d8a0fae69b9f129e30ab308ab42fc7fc9e22f7852091070526d5c236f902c6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 31d8a0fae69b9f129e30ab308ab42fc7fc9e22f7852091070526d5c236f902c6
Deployed Bytecode Sourcemap
49043:2895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30057:372;;;;;;;;;;-1:-1:-1;30057:372:0;;;;;:::i;:::-;;:::i;:::-;;;7334:14:1;;7327:22;7309:41;;7297:2;7282:18;30057:372:0;;;;;;;;32667:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34170:204::-;;;;;;;;;;-1:-1:-1;34170:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6632:32:1;;;6614:51;;6602:2;6587:18;34170:204:0;6569:102:1;33733:371:0;;;;;;;;;;-1:-1:-1;33733:371:0;;;;;:::i;:::-;;:::i;:::-;;49334:35;;;;;;;;;;;;;;;;;;;7507:25:1;;;7495:2;7480:18;49334:35:0;7462:76:1;27294:280:0;;;;;;;;;;;;;:::i;49527:23::-;;;;;;;;;;;;;;;;35027:170;;;;;;;;;;-1:-1:-1;35027:170:0;;;;;:::i;:::-;;:::i;51735:88::-;;;;;;;;;;-1:-1:-1;51735:88:0;;;;;:::i;:::-;;:::i;28880:1105::-;;;;;;;;;;-1:-1:-1;28880:1105:0;;;;;:::i;:::-;;:::i;49137:41::-;;;;;;;;;;;;49174:4;49137:41;;51638:89;;;;;;;;;;;;;:::i;51208:114::-;;;:::i;35268:185::-;;;;;;;;;;-1:-1:-1;35268:185:0;;;;;:::i;:::-;;:::i;27867:713::-;;;;;;;;;;-1:-1:-1;27867:713:0;;;;;:::i;:::-;;:::i;51542:88::-;;;;;;;;;;-1:-1:-1;51542:88:0;;;;;:::i;:::-;;:::i;32476:124::-;;;;;;;;;;-1:-1:-1;32476:124:0;;;;;:::i;:::-;;:::i;49559:21::-;;;;;;;;;;;;;:::i;30493:206::-;;;;;;;;;;-1:-1:-1;30493:206:0;;;;;:::i;:::-;;:::i;23299:103::-;;;;;;;;;;;;;:::i;50911:289::-;;;;;;;;;;-1:-1:-1;50911:289:0;;;;;:::i;:::-;;:::i;22648:87::-;;;;;;;;;;-1:-1:-1;22721:6:0;;-1:-1:-1;;;;;22721:6:0;22648:87;;32836:104;;;;;;;;;;;;;:::i;49698:407::-;;;;;;:::i;:::-;;:::i;34446:279::-;;;;;;;;;;-1:-1:-1;34446:279:0;;;;;:::i;:::-;;:::i;49463:55::-;;;;;;;;;;-1:-1:-1;49463:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;49185:52;;;;;;;;;;;;49234:3;49185:52;;35524:342;;;;;;;;;;-1:-1:-1;35524:342:0;;;;;:::i;:::-;;:::i;49378:37::-;;;;;;;;;;-1:-1:-1;49378:37:0;;;;;;;;51831:104;;;;;;;;;;;;;:::i;33011:318::-;;;;;;;;;;-1:-1:-1;33011:318:0;;;;;:::i;:::-;;:::i;49290:37::-;;;;;;;;;;;;;;;;49093;;;;;;;;;;;;49129:1;49093:37;;51438:96;;;;;;;;;;-1:-1:-1;51438:96:0;;;;;:::i;:::-;;:::i;34796:164::-;;;;;;;;;;-1:-1:-1;34796:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;34917:25:0;;;34893:4;34917:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34796:164;49422:32;;;;;;;;;;-1:-1:-1;49422:32:0;;;;;;;;;;;50113:790;;;;;;:::i;:::-;;:::i;23557:201::-;;;;;;;;;;-1:-1:-1;23557:201:0;;;;;:::i;:::-;;:::i;49244:39::-;;;;;;;;;;;;;;;;30057:372;30159:4;-1:-1:-1;;;;;;30196:40:0;;-1:-1:-1;;;30196:40:0;;:105;;-1:-1:-1;;;;;;;30253:48:0;;-1:-1:-1;;;30253:48:0;30196:105;:172;;;-1:-1:-1;;;;;;;30318:50:0;;-1:-1:-1;;;30318:50:0;30196:172;:225;;;-1:-1:-1;;;;;;;;;;15371:40:0;;;30385:36;30176:245;30057:372;-1:-1:-1;;30057:372:0:o;32667:100::-;32721:13;32754:5;32747:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32667:100;:::o;34170:204::-;34238:7;34263:16;34271:7;34263;:16::i;:::-;34258:64;;34288:34;;-1:-1:-1;;;34288:34:0;;;;;;;;;;;34258:64;-1:-1:-1;34342:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34342:24:0;;34170:204::o;33733:371::-;33806:13;33822:24;33838:7;33822:15;:24::i;:::-;33806:40;;33867:5;-1:-1:-1;;;;;33861:11:0;:2;-1:-1:-1;;;;;33861:11:0;;33857:48;;;33881:24;;-1:-1:-1;;;33881:24:0;;;;;;;;;;;33857:48;11614:10;-1:-1:-1;;;;;33922:21:0;;;;;;:63;;-1:-1:-1;33948:37:0;33965:5;11614:10;34796:164;:::i;33948:37::-;33947:38;33922:63;33918:138;;;34009:35;;-1:-1:-1;;;34009:35:0;;;;;;;;;;;33918:138;34068:28;34077:2;34081:7;34090:5;34068:8;:28::i;:::-;33733:371;;;:::o;27294:280::-;27347:7;27539:12;-1:-1:-1;;;;;;;;27539:12:0;;;;27523:13;;;:28;;;;27516:35;;27294:280::o;35027:170::-;35161:28;35171:4;35177:2;35181:7;35161:9;:28::i;51735:88::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;;;;;;;;;51799:8:::1;:16:::0;51735:88::o;28880:1105::-;28969:7;29002:16;29012:5;29002:9;:16::i;:::-;28993:5;:25;28989:61;;29027:23;;-1:-1:-1;;;29027:23:0;;;;;;;;;;;28989:61;29061:22;29086:13;;-1:-1:-1;;;;;29086:13:0;;29061:22;;29336:557;29356:14;29352:1;:18;29336:557;;;29396:31;29430:14;;;:11;:14;;;;;;;;;29396:48;;;;;;;;;-1:-1:-1;;;;;29396:48:0;;;;-1:-1:-1;;;29396:48:0;;-1:-1:-1;;;;;29396:48:0;;;;;;;;-1:-1:-1;;;29396:48:0;;;;;;;;;;;;;;;;29463:73;;29508:8;;;29463:73;29558:14;;-1:-1:-1;;;;;29558:28:0;;29554:111;;29631:14;;;-1:-1:-1;29554:111:0;29708:5;-1:-1:-1;;;;;29687:26:0;:17;-1:-1:-1;;;;;29687:26:0;;29683:195;;;29757:5;29742:11;:20;29738:85;;;-1:-1:-1;29798:1:0;-1:-1:-1;29791:8:0;;-1:-1:-1;;;29791:8:0;29738:85;29845:13;;;;;29683:195;29336:557;;29372:3;;29336:557;;;;29969:8;;;51638:89;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;51707:12:::1;::::0;;-1:-1:-1;;51691:28:0;::::1;51707:12;::::0;;;::::1;;;51706:13;51691:28:::0;;::::1;;::::0;;51638:89::o;51208:114::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;22721:6;;51266:48:::1;::::0;-1:-1:-1;;;;;22721:6:0;;;;51292:21:::1;51266:48:::0;::::1;;;::::0;::::1;::::0;;;51292:21;22721:6;51266:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;51208:114::o:0;35268:185::-;35406:39;35423:4;35429:2;35433:7;35406:39;;;;;;;;;;;;:16;:39::i;27867:713::-;27934:7;27979:13;;-1:-1:-1;;;;;27979:13:0;27934:7;;28193:328;28213:14;28209:1;:18;28193:328;;;28253:31;28287:14;;;:11;:14;;;;;;;;;28253:48;;;;;;;;;-1:-1:-1;;;;;28253:48:0;;;;-1:-1:-1;;;28253:48:0;;-1:-1:-1;;;;;28253:48:0;;;;;;;;-1:-1:-1;;;28253:48:0;;;;;;;;;;;;;;28320:186;;28385:5;28370:11;:20;28366:85;;;-1:-1:-1;28426:1:0;27867:713;-1:-1:-1;;;;27867:713:0:o;28366:85::-;28473:13;;;;;28320:186;-1:-1:-1;28229:3:0;;28193:328;;;;28549:23;;-1:-1:-1;;;28549:23:0;;;;;;;;;;;51542:88;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;51609:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;51542:88:::0;:::o;32476:124::-;32540:7;32567:20;32579:7;32567:11;:20::i;:::-;:25;;32476:124;-1:-1:-1;;32476:124:0:o;49559:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30493:206::-;30557:7;-1:-1:-1;;;;;30581:19:0;;30577:60;;30609:28;;-1:-1:-1;;;30609:28:0;;;;;;;;;;;30577:60;-1:-1:-1;;;;;;30663:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;30663:27:0;;30493:206::o;23299:103::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;23364:30:::1;23391:1;23364:18;:30::i;:::-;23299:103::o:0;50911:289::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;49234:3:::1;51035:8;51012:31;;:20;;:31;;;;:::i;:::-;:57;;51004:106;;;::::0;-1:-1:-1;;;51004:106:0;;7969:2:1;51004:106:0::1;::::0;::::1;7951:21:1::0;8008:2;7988:18;;;7981:30;8047:34;8027:18;;;8020:62;-1:-1:-1;;;8098:18:1;;;8091:34;8142:19;;51004:106:0::1;7941:226:1::0;51004:106:0::1;51147:8;51123:32;;:20;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;51168:23:0::1;::::0;-1:-1:-1;51178:2:0;51168:23:::1;::::0;::::1;:9;:23::i;32836:104::-:0;32892:13;32925:7;32918:14;;;;;:::i;49698:407::-;49174:4;49862:8;49846:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;49838:73;;;;-1:-1:-1;;;49838:73:0;;9586:2:1;49838:73:0;;;9568:21:1;9625:2;9605:18;;;9598:30;-1:-1:-1;;;9644:18:1;;;9637:52;9706:18;;49838:73:0;9558:172:1;49838:73:0;49955:8;49944;;:19;;;;:::i;:::-;49930:9;:34;;49922:68;;;;-1:-1:-1;;;49922:68:0;;11015:2:1;49922:68:0;;;10997:21:1;11054:2;11034:18;;;11027:30;-1:-1:-1;;;11073:18:1;;;11066:51;11134:18;;49922:68:0;10987:171:1;49922:68:0;50009:12;;;;;;;50001:54;;;;-1:-1:-1;;;50001:54:0;;10657:2:1;50001:54:0;;;10639:21:1;10696:2;10676:18;;;10669:30;10735:31;10715:18;;;10708:59;10784:18;;50001:54:0;10629:179:1;50001:54:0;50066:31;50076:10;50088:8;50066:9;:31::i;34446:279::-;-1:-1:-1;;;;;34537:24:0;;11614:10;34537:24;34533:54;;;34570:17;;-1:-1:-1;;;34570:17:0;;;;;;;;;;;34533:54;11614:10;34600:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;34600:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;34600:53:0;;;;;;;;;;34669:48;;7309:41:1;;;34600:42:0;;11614:10;34669:48;;7282:18:1;34669:48:0;;;;;;;34446:279;;:::o;35524:342::-;35691:28;35701:4;35707:2;35711:7;35691:9;:28::i;:::-;35735:48;35758:4;35764:2;35768:7;35777:5;35735:22;:48::i;:::-;35730:129;;35807:40;;-1:-1:-1;;;35807:40:0;;;;;;;;;;;35730:129;35524:342;;;;:::o;51831:104::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;51910:17:::1;::::0;;-1:-1:-1;;51889:38:0;::::1;51910:17;::::0;;::::1;51909:18;51889:38;::::0;;51831:104::o;33011:318::-;33084:13;33115:16;33123:7;33115;:16::i;:::-;33110:59;;33140:29;;-1:-1:-1;;;33140:29:0;;;;;;;;;;;33110:59;33182:21;33206:10;:8;:10::i;:::-;33182:34;;33240:7;33234:21;33259:1;33234:26;;:87;;;;;;;;;;;;;;;;;33287:7;33296:18;:7;:16;:18::i;:::-;33270:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33234:87;33227:94;33011:318;-1:-1:-1;;;33011:318:0:o;51438:96::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;51506:8:::1;:20:::0;51438:96::o;50113:790::-;50318:28;;-1:-1:-1;;50335:10:0;5908:2:1;5904:15;5900:53;50318:28:0;;;5888:66:1;50289:16:0;;5970:12:1;;50318:28:0;;;;;;;;;;;;50308:39;;;;;;50289:58;;50366:46;50385:6;;50366:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50393:8:0;;;-1:-1:-1;50403:8:0;;-1:-1:-1;50366:18:0;:46::i;:::-;50358:89;;;;-1:-1:-1;;;50358:89:0;;9937:2:1;50358:89:0;;;9919:21:1;9976:2;9956:18;;;9949:30;10015:32;9995:18;;;9988:60;10065:18;;50358:89:0;9909:180:1;50358:89:0;50498:10;50477:32;;;;:20;:32;;;;;;49129:1;;50466:43;;:8;:43;:::i;:::-;:56;;50458:103;;;;-1:-1:-1;;;50458:103:0;;8781:2:1;50458:103:0;;;8763:21:1;8820:2;8800:18;;;8793:30;8859:34;8839:18;;;8832:62;-1:-1:-1;;;8910:18:1;;;8903:32;8952:19;;50458:103:0;8753:224:1;50458:103:0;49174:4;50596:8;50580:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;50572:73;;;;-1:-1:-1;;;50572:73:0;;9586:2:1;50572:73:0;;;9568:21:1;9625:2;9605:18;;;9598:30;-1:-1:-1;;;9644:18:1;;;9637:52;9706:18;;50572:73:0;9558:172:1;50572:73:0;50687:8;50678:6;;:17;;;;:::i;:::-;50664:9;:32;;50656:66;;;;-1:-1:-1;;;50656:66:0;;11015:2:1;50656:66:0;;;10997:21:1;11054:2;11034:18;;;11027:30;-1:-1:-1;;;11073:18:1;;;11066:51;11134:18;;50656:66:0;10987:171:1;50656:66:0;50741:17;;;;50733:63;;;;-1:-1:-1;;;50733:63:0;;9184:2:1;50733:63:0;;;9166:21:1;9223:2;9203:18;;;9196:30;9262:34;9242:18;;;9235:62;-1:-1:-1;;;9313:18:1;;;9306:31;9354:19;;50733:63:0;9156:223:1;50733:63:0;50830:10;50809:32;;;;:20;:32;;;;;:44;;50845:8;;50809:32;:44;;50845:8;;50809:44;:::i;:::-;;;;-1:-1:-1;50864:31:0;;-1:-1:-1;50874:10:0;50886:8;50864:9;:31::i;23557:201::-;22721:6;;-1:-1:-1;;;;;22721:6:0;11614:10;22868:23;22860:68;;;;-1:-1:-1;;;22860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23646:22:0;::::1;23638:73;;;::::0;-1:-1:-1;;;23638:73:0;;8374:2:1;23638:73:0::1;::::0;::::1;8356:21:1::0;8413:2;8393:18;;;8386:30;8452:34;8432:18;;;8425:62;-1:-1:-1;;;8503:18:1;;;8496:36;8549:19;;23638:73:0::1;8346:228:1::0;23638:73:0::1;23722:28;23741:8;23722:18;:28::i;36121:144::-:0;36178:4;36212:13;;-1:-1:-1;;;;;36212:13:0;36202:23;;:55;;;;-1:-1:-1;;36230:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;36230:27:0;;;;36229:28;;36121:144::o;43337:196::-;43452:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;43452:29:0;-1:-1:-1;;;;;43452:29:0;;;;;;;;;43497:28;;43452:24;;43497:28;;;;;;;43337:196;;;:::o;38838:2112::-;38953:35;38991:20;39003:7;38991:11;:20::i;:::-;39066:18;;38953:58;;-1:-1:-1;39024:22:0;;-1:-1:-1;;;;;39050:34:0;11614:10;-1:-1:-1;;;;;39050:34:0;;:101;;;-1:-1:-1;39118:18:0;;39101:50;;11614:10;34796:164;:::i;39101:50::-;39050:154;;;-1:-1:-1;11614:10:0;39168:20;39180:7;39168:11;:20::i;:::-;-1:-1:-1;;;;;39168:36:0;;39050:154;39024:181;;39223:17;39218:66;;39249:35;;-1:-1:-1;;;39249:35:0;;;;;;;;;;;39218:66;39321:4;-1:-1:-1;;;;;39299:26:0;:13;:18;;;-1:-1:-1;;;;;39299:26:0;;39295:67;;39334:28;;-1:-1:-1;;;39334:28:0;;;;;;;;;;;39295:67;-1:-1:-1;;;;;39377:16:0;;39373:52;;39402:23;;-1:-1:-1;;;39402:23:0;;;;;;;;;;;39373:52;39546:49;39563:1;39567:7;39576:13;:18;;;39546:8;:49::i;:::-;-1:-1:-1;;;;;39891:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;39891:31:0;;;-1:-1:-1;;;;;39891:31:0;;;-1:-1:-1;;39891:31:0;;;;;;;39937:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;39937:29:0;;;;;;;;;;;39983:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;40028:61:0;;;;-1:-1:-1;;;40073:15:0;40028:61;;;;;;;;;;;40363:11;;;40393:24;;;;;:29;40363:11;;40393:29;40389:445;;40618:13;;-1:-1:-1;;;;;40618:13:0;40604:27;;40600:219;;;40688:18;;;40656:24;;;:11;:24;;;;;;;;:50;;40771:28;;;;-1:-1:-1;;;;;40729:70:0;-1:-1:-1;;;40729:70:0;-1:-1:-1;;;;;;40729:70:0;;;-1:-1:-1;;;;;40656:50:0;;;40729:70;;;;;;;40600:219;38838:2112;40881:7;40877:2;-1:-1:-1;;;;;40862:27:0;40871:4;-1:-1:-1;;;;;40862:27:0;;;;;;;;;;;40900:42;38838:2112;;;;;:::o;31331:1083::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;31497:13:0;;31441:7;;-1:-1:-1;;;;;31497:13:0;31490:20;;31486:861;;;31531:31;31565:17;;;:11;:17;;;;;;;;;31531:51;;;;;;;;;-1:-1:-1;;;;;31531:51:0;;;;-1:-1:-1;;;31531:51:0;;-1:-1:-1;;;;;31531:51:0;;;;;;;;-1:-1:-1;;;31531:51:0;;;;;;;;;;;;;;31601:731;;31651:14;;-1:-1:-1;;;;;31651:28:0;;31647:101;;31715:9;31331:1083;-1:-1:-1;;;31331:1083:0:o;31647:101::-;-1:-1:-1;;;32092:6:0;32137:17;;;;:11;:17;;;;;;;;;32125:29;;;;;;;;;-1:-1:-1;;;;;32125:29:0;;;;;-1:-1:-1;;;32125:29:0;;-1:-1:-1;;;;;32125:29:0;;;;;;;;-1:-1:-1;;;32125:29:0;;;;;;;;;;;;;32185:28;32181:109;;32253:9;31331:1083;-1:-1:-1;;;31331:1083:0:o;32181:109::-;32052:261;;;31486:861;;32375:31;;-1:-1:-1;;;32375:31:0;;;;;;;;;;;23918:191;24011:6;;;-1:-1:-1;;;;;24028:17:0;;;-1:-1:-1;;;;;;24028:17:0;;;;;;;24061:40;;24011:6;;;24028:17;24011:6;;24061:40;;23992:16;;24061:40;23918:191;;:::o;36273:104::-;36342:27;36352:2;36356:8;36342:27;;;;;;;;;;;;:9;:27::i;44098:790::-;44253:4;-1:-1:-1;;;;;44274:13:0;;3992:19;:23;44270:611;;44310:72;;-1:-1:-1;;;44310:72:0;;-1:-1:-1;;;;;44310:36:0;;;;;:72;;11614:10;;44361:4;;44367:7;;44376:5;;44310:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44310:72:0;;;;;;;;-1:-1:-1;;44310:72:0;;;;;;;;;;;;:::i;:::-;;;44306:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44556:13:0;;44552:259;;44606:40;;-1:-1:-1;;;44606:40:0;;;;;;;;;;;44552:259;44761:6;44755:13;44746:6;44742:2;44738:15;44731:38;44306:520;-1:-1:-1;;;;;;44433:55:0;-1:-1:-1;;;44433:55:0;;-1:-1:-1;44426:62:0;;44270:611;-1:-1:-1;44865:4:0;44270:611;44098:790;;;;;;:::o;51330:100::-;51382:13;51415:7;51408:14;;;;;:::i;12001:723::-;12057:13;12278:10;12274:53;;-1:-1:-1;;12305:10:0;;;;;;;;;;;;-1:-1:-1;;;12305:10:0;;;;;12001:723::o;12274:53::-;12352:5;12337:12;12393:78;12400:9;;12393:78;;12426:8;;;;:::i;:::-;;-1:-1:-1;12449:10:0;;-1:-1:-1;12457:2:0;12449:10;;:::i;:::-;;;12393:78;;;12481:19;12513:6;-1:-1:-1;;;;;12503:17:0;;;;;-1:-1:-1;;;12503:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12503:17:0;;12481:39;;12531:154;12538:10;;12531:154;;12565:11;12575:1;12565:11;;:::i;:::-;;-1:-1:-1;12634:10:0;12642:2;12634:5;:10;:::i;:::-;12621:24;;:2;:24;:::i;:::-;12608:39;;12591:6;12598;12591:14;;;;;;-1:-1:-1;;;12591:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;12591:56:0;;;;;;;;-1:-1:-1;12662:11:0;12671:2;12662:11;;:::i;:::-;;;12531:154;;47578:190;47703:4;47756;47727:25;47740:5;47747:4;47727:12;:25::i;:::-;:33;;47578:190;-1:-1:-1;;;;47578:190:0:o;36740:163::-;36863:32;36869:2;36873:8;36883:5;36890:4;36863:5;:32::i;48129:675::-;48212:7;48255:4;48212:7;48270:497;48294:5;:12;48290:1;:16;48270:497;;;48328:20;48351:5;48357:1;48351:8;;;;;;-1:-1:-1;;;48351:8:0;;;;;;;;;;;;;;;48328:31;;48394:12;48378;:28;48374:382;;48880:13;48930:15;;;48966:4;48959:15;;;49013:4;48997:21;;48506:57;;48374:382;;;48880:13;48930:15;;;48966:4;48959:15;;;49013:4;48997:21;;48683:57;;48374:382;-1:-1:-1;48308:3:0;;;;:::i;:::-;;;;48270:497;;;-1:-1:-1;48784:12:0;48129:675;-1:-1:-1;;;48129:675:0:o;37162:1422::-;37301:20;37324:13;-1:-1:-1;;;;;37324:13:0;-1:-1:-1;;;;;37352:16:0;;37348:48;;37377:19;;-1:-1:-1;;;37377:19:0;;;;;;;;;;;37348:48;37411:13;37407:44;;37433:18;;-1:-1:-1;;;37433:18:0;;;;;;;;;;;37407:44;-1:-1:-1;;;;;37803:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;;;;;37862:49:0;;-1:-1:-1;;;;;37803:44:0;;;;;;;37862:49;;;;-1:-1:-1;;37803:44:0;;;;;;37862:49;;;;;;;;;;;;;;;;37928:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;37978:66:0;;;;-1:-1:-1;;;38028:15:0;37978:66;;;;;;;;;;;37928:25;;38113:328;38133:8;38129:1;:12;38113:328;;;38172:38;;38197:12;;-1:-1:-1;;;;;38172:38:0;;;38189:1;;38172:38;;38189:1;;38172:38;38233:4;:68;;;;;38242:59;38273:1;38277:2;38281:12;38295:5;38242:22;:59::i;:::-;38241:60;38233:68;38229:164;;;38333:40;;-1:-1:-1;;;38333:40:0;;;;;;;;;;;38229:164;38411:14;;;;;38143:3;38113:328;;;-1:-1:-1;38457:13:0;:37;;-1:-1:-1;;;;;;38457:37:0;-1:-1:-1;;;;;38457:37:0;;;;;;;;;;38516:60;35524:342;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:196::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;1097:6;1105;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;1381:6;1389;1397;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;1742:6;1750;1758;1766;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;-1:-1:-1;;;;;2076:6:1;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:1;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:367::-;2413:6;2421;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2649:5;2642:13;2635:21;2628:5;2625:32;2615:2;;2676:6;2668;2661:22;2615:2;2704:5;2694:15;;;2432:283;;;;;:::o;2720:366::-;2787:6;2795;2848:2;2836:9;2827:7;2823:23;2819:32;2816:2;;;2869:6;2861;2854:22;2816:2;2897:29;2916:9;2897:29;:::i;:::-;2887:39;;2976:2;2965:9;2961:18;2948:32;3020:6;3013:5;3009:18;3002:5;2999:29;2989:2;;3047:6;3039;3032:22;3091:264;3159:6;3167;3220:2;3208:9;3199:7;3195:23;3191:32;3188:2;;;3241:6;3233;3226:22;3188:2;3269:29;3288:9;3269:29;:::i;:::-;3259:39;3345:2;3330:18;;;;3317:32;;-1:-1:-1;;;3178:177:1:o;3360:190::-;3419:6;3472:2;3460:9;3451:7;3447:23;3443:32;3440:2;;;3493:6;3485;3478:22;3440:2;-1:-1:-1;3521:23:1;;3430:120;-1:-1:-1;3430:120:1:o;3555:255::-;3613:6;3666:2;3654:9;3645:7;3641:23;3637:32;3634:2;;;3687:6;3679;3672:22;3634:2;3731:9;3718:23;3750:30;3774:5;3750:30;:::i;3815:259::-;3884:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:2;;;3958:6;3950;3943:22;3905:2;3995:9;3989:16;4014:30;4038:5;4014:30;:::i;4079:480::-;4148:6;4201:2;4189:9;4180:7;4176:23;4172:32;4169:2;;;4222:6;4214;4207:22;4169:2;4267:9;4254:23;-1:-1:-1;;;;;4292:6:1;4289:30;4286:2;;;4337:6;4329;4322:22;4286:2;4365:22;;4418:4;4410:13;;4406:27;-1:-1:-1;4396:2:1;;4452:6;4444;4437:22;4396:2;4480:73;4545:7;4540:2;4527:16;4522:2;4518;4514:11;4480:73;:::i;4759:733::-;4854:6;4862;4870;4923:2;4911:9;4902:7;4898:23;4894:32;4891:2;;;4944:6;4936;4929:22;4891:2;4985:9;4972:23;4962:33;;5046:2;5035:9;5031:18;5018:32;-1:-1:-1;;;;;5110:2:1;5102:6;5099:14;5096:2;;;5131:6;5123;5116:22;5096:2;5174:6;5163:9;5159:22;5149:32;;5219:7;5212:4;5208:2;5204:13;5200:27;5190:2;;5246:6;5238;5231:22;5190:2;5291;5278:16;5317:2;5309:6;5306:14;5303:2;;;5338:6;5330;5323:22;5303:2;5396:7;5391:2;5381:6;5378:1;5374:14;5370:2;5366:23;5362:32;5359:45;5356:2;;;5422:6;5414;5407:22;5356:2;5458;5454;5450:11;5440:21;;5480:6;5470:16;;;;;4881:611;;;;;:::o;5497:257::-;5538:3;5576:5;5570:12;5603:6;5598:3;5591:19;5619:63;5675:6;5668:4;5663:3;5659:14;5652:4;5645:5;5641:16;5619:63;:::i;:::-;5736:2;5715:15;-1:-1:-1;;5711:29:1;5702:39;;;;5743:4;5698:50;;5546:208;-1:-1:-1;;5546:208:1:o;5993:470::-;6172:3;6210:6;6204:13;6226:53;6272:6;6267:3;6260:4;6252:6;6248:17;6226:53;:::i;:::-;6342:13;;6301:16;;;;6364:57;6342:13;6301:16;6398:4;6386:17;;6364:57;:::i;:::-;6437:20;;6180:283;-1:-1:-1;;;;6180:283:1:o;6676:488::-;-1:-1:-1;;;;;6945:15:1;;;6927:34;;6997:15;;6992:2;6977:18;;6970:43;7044:2;7029:18;;7022:34;;;7092:3;7087:2;7072:18;;7065:31;;;6870:4;;7113:45;;7138:19;;7130:6;7113:45;:::i;:::-;7105:53;6879:285;-1:-1:-1;;;;;;6879:285:1:o;7543:219::-;7692:2;7681:9;7674:21;7655:4;7712:44;7752:2;7741:9;7737:18;7729:6;7712:44;:::i;10094:356::-;10296:2;10278:21;;;10315:18;;;10308:30;10374:34;10369:2;10354:18;;10347:62;10441:2;10426:18;;10268:182::o;11345:128::-;11385:3;11416:1;11412:6;11409:1;11406:13;11403:2;;;11422:18;;:::i;:::-;-1:-1:-1;11458:9:1;;11393:80::o;11478:120::-;11518:1;11544;11534:2;;11549:18;;:::i;:::-;-1:-1:-1;11583:9:1;;11524:74::o;11603:168::-;11643:7;11709:1;11705;11701:6;11697:14;11694:1;11691:21;11686:1;11679:9;11672:17;11668:45;11665:2;;;11716:18;;:::i;:::-;-1:-1:-1;11756:9:1;;11655:116::o;11776:125::-;11816:4;11844:1;11841;11838:8;11835:2;;;11849:18;;:::i;:::-;-1:-1:-1;11886:9:1;;11825:76::o;11906:258::-;11978:1;11988:113;12002:6;11999:1;11996:13;11988:113;;;12078:11;;;12072:18;12059:11;;;12052:39;12024:2;12017:10;11988:113;;;12119:6;12116:1;12113:13;12110:2;;;-1:-1:-1;;12154:1:1;12136:16;;12129:27;11959:205::o;12169:380::-;12248:1;12244:12;;;;12291;;;12312:2;;12366:4;12358:6;12354:17;12344:27;;12312:2;12419;12411:6;12408:14;12388:18;12385:38;12382:2;;;12465:10;12460:3;12456:20;12453:1;12446:31;12500:4;12497:1;12490:15;12528:4;12525:1;12518:15;12382:2;;12224:325;;;:::o;12554:135::-;12593:3;-1:-1:-1;;12614:17:1;;12611:2;;;12634:18;;:::i;:::-;-1:-1:-1;12681:1:1;12670:13;;12601:88::o;12694:112::-;12726:1;12752;12742:2;;12757:18;;:::i;:::-;-1:-1:-1;12791:9:1;;12732:74::o;12811:127::-;12872:10;12867:3;12863:20;12860:1;12853:31;12903:4;12900:1;12893:15;12927:4;12924:1;12917:15;12943:127;13004:10;12999:3;12995:20;12992:1;12985:31;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13075:127;13136:10;13131:3;13127:20;13124:1;13117:31;13167:4;13164:1;13157:15;13191:4;13188:1;13181:15;13207:131;-1:-1:-1;;;;;;13281:32:1;;13271:43;;13261:2;;13328:1;13325;13318:12
Swarm Source
ipfs://1dad8c840c8cf2c262cde5d3c4563d807dbfca053286e924da9bbdce3c0f44f7
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.