Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
299 MM
Holders
185
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MurakamiMfers
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-12 */ //MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKkdollllodONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMWKo;,;;::::;,,:xXMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMMWXOdllccldkXWO:,:cc::ccc:c:;,cKWKkdollooxONMMMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMKd;'''','''';c,,:c::c:::cc:cc:';c:;:cllcc::cxXMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMM0:.',,,,,,,,,'..,:c:cc:::cc:c::'.;loooooloolc;lKMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMXc.',,,,,,,,,,,'.':c:c::c::::c:;',loooooooooooc,oNMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMM0;.,,,,,,,,,,,,,'.,:cc:::::::::,'cooooooooooool;cXMMMMMMMMMMMMMMM //MMMMMMMMMWX0kkkd,.,,,,,,,,,,,,,,.':ccc:cc::c:;';looolooooooooc,;xkkO0XWMMMMMMMMM //MMMMMMWKxc;;,,,,'..',,,,,,,,,,,,'.,::cccc::c:''cooooooooooolc,',;;;;;:lkXWMMMMMM //MMMMMNx;,;:::::::;,..',,,,,,,,,,,.':c:cc:ccc;';lloooooooolc,,;clllllll:;:OWMMMMM //MMMMWx,,:::::::::::;,..',,,,,,,,,..',;;;;;,,..:looooooolc,';cllllllllllc;;OMMMMM //MMMMX:'::::::::::::::;,..',,,''';codkOOOOOkxdol:::loolc,,;clllllllllllllc,oNMMMM //MMMMXc'::::::::::::::::;,...':oOXWMMMMMMMMMMMMWXko:;;,,;clllllllllllllllc,oNMMMM //MMMMWx,,:::::::::::::::::,.:kXWMWWWMMMMMMMMMMWWWMWXx;':llllllllllllllllc;;OMMMMM //MMMMMNx;,;:::::::::::::;,;xNMMMN0OKWMMMMMMMMN0OOXMMMXd;;cllllllllllllc:,:OWMMMMM //MMMWKko;'',,,,,,;::::::,:0WMMMW0kOKWMMMMMMMMN0dd0WMMMWk;;cllllc::;;;;;,,cdOXWMMM //MWKo:;:clllc::;,,,,,,,';OWMMMMMNXNNNNXXXXXXNNNXXWMMMMMWk,,;;;::::cloodddolccxXMM //W0:;clllllllllllllcc:,'dWMWX0kxxddddddddddddddddxxOKNWMNl':lodxxxxxxxxxxxxxo;lKM //Xl,clllllllllllllllll;;OMMOcldxkO0KKKKXXKKKKKK0Okxdcc0MMx;oxxxxxxxxxxxxxxxxxo;dW //Kc;llllllllllllllllll;:0MM0coKXXXXXXXXXXXXXXXXXXXXKllKMMk;lxxxxxxxxxxxxxxxxxd;lN //No,clllllllllllllllll:;OMMWx:xKXXXXXXXXXXXXXXXXXXKd:kWMWx;oxxxxxxxxxxxxxxxxxl;xW //MKl,:lllllllllllcc::;,'oNMMNxcxKXXXXXXXXXXXXXXXXKdckWMMXc':cclodxxxxxxxxxxdl:dNM //MMNkc:;:ccc:;;;;,,,;;:,;kWMMWOcoOKXXXXXXXXXXXXKOllOWMMNd:oxollcccccclooolcclOWMM //MMMMN0d;.',;;;:cccccccc;;kWMMMXxlokKXXXXXXXXKkolxXMMMNd:d000000Okxdolc;,ckKWMMMM //MMMMMXo;;cllcccccccccccc;;oKWMMWXkdooddxxddoodkXMMMW0lcx00000000000000kockNMMMMM //MMMMWd,:ccccccccccccccccc;.;d0WMMMWX0OkxxkO0NWMMMN0o;;d00000000000000000o:kWMMMM //MMMMK:,cccccccccccccccc:,',;,;lx0XWMMMMMMMMMMNXOxooxOdclx000000000000000O:oNMMMM //MMMMXc,ccclcccccccccc:,',:::::;,;:codxxxxxxdllodx0XXXX0dclx0000000000000k:oWMMMM //MMMMWk;;cclllcccccc:,',::::::::::,'cdooooooo::OXXXXXXXXX0dclx0000000000Olc0MMMMM //MMMMMWOc;;ccclccc:,',:::::::cc:::':kOOOOOOOOd;oXXXXXXXXXXX0dclxO00000kocoKWMMMMM //MMMMMMMNOoc:::::'.,:::c:::::c:::,,oOOOOOOOOOkl:OXXXXXXXXXXXX0o,:ooooood0WMMMMMMM //MMMMMMMMMMWXKKKk;'::::::::::cc::':kOOOOOOOOOOd:oKXXXXXXXXXXXXKccOKKKXWMMMMMMMMMM //MMMMMMMMMMMMMMM0:,c::::::::cc::,,oOOOOOOOOOOOkl:kXXXXXXXXXXXXXlcXMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMNo':c:c::::c:::;':kOOOOOOOOOOOOx:lKXXXXXXXXXXXOcdWMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMKl,;:::c:c:::;''lOOOOOOOOOOOOOkc,l0XXXXXXXXKxcdXMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMNOl:,,;;;,,;ldc:xOOOOOOkOOOOOd:cdoodxkkkxood0WMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMMMWXOxdddxOKWMKlcdkOOOkkOOOko:oXMNKkxxxxkOXWMMMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNklcloodoollcoOWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM //MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOoc:;::cd0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM //Murakami Mfers // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/ERC721A.sol // Creator: Chiru Labs /** * @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..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex = 0; // 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) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @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) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert('ERC721A: unable to get token of owner by index'); } /** * @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) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); for (uint256 curr = tokenId; ; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert('ERC721A: unable to determine the owner of token'); } /** * @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) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), 'ERC721A: token already minted'); require(quantity > 0, 'ERC721A: quantity must be greater 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); updatedIndex++; } currentIndex = 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 || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _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. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; } _ownerships[tokenId] = TokenOwnership(to, 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)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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('ERC721A: transfer to non ERC721Receiver implementer'); } 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. * * 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`. */ 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. * * 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` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract MurakamiMfers is ERC721A, Ownable { string public baseURI = "ipfs://Qmb8fjaQcxe9Uk9a7gVKVP8pkbpCVwRqhE7JW8Eg4B7BdC/"; string public contractURI = "ipfs://QmPJ5ptCKEXVhYodVXhom5WHuF2vYMVcfp2cPxec6GuvXV"; string public constant baseExtension = ".json"; address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; uint256 public constant MAX_PER_TX_FREE = 1; uint256 public constant MAX_PER_TX = 20; uint256 public constant FREE_MAX_SUPPLY = 1; uint256 public MAX_SUPPLY = 1111; uint256 public price = 0.0033 ether; bool public paused = true; constructor() ERC721A("MURAKAMI MFERS", "MM") {} function mint(uint256 _amount) external payable { address _caller = _msgSender(); require(!paused, "Paused"); require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply"); require(_amount > 0, "No 0 mints"); require(tx.origin == _caller, "No contracts"); if(FREE_MAX_SUPPLY >= totalSupply()){ require(MAX_PER_TX_FREE >= _amount , "Excess max per free tx"); }else{ require(MAX_PER_TX >= _amount , "Excess max per paid tx"); require(_amount * price == msg.value, "Invalid funds provided"); } _safeMint(_caller, _amount); } function withdraw() external onlyOwner { uint256 balance = address(this).balance; (bool success, ) = _msgSender().call{value: balance}(""); require(success, "Failed to send"); } function pause(bool _state) external onlyOwner { paused = _state; } function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } function setContractURI(string memory _contractURI) external onlyOwner { contractURI = _contractURI; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function setMAX_SUPPLY(uint256 newSupply) public onlyOwner { MAX_SUPPLY = newSupply; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return bytes(baseURI).length > 0 ? string( abi.encodePacked( baseURI, Strings.toString(_tokenId), baseExtension ) ) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","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":[{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMAX_SUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"nonpayable","type":"function"}]
Contract Creation Code
6000805560e06040526036608081815290620028d160a03980516200002d916008916020909101906200016a565b50604051806060016040528060358152602001620029076035913980516200005e916009916020909101906200016a565b50610457600a55660bb9551fc24000600b55600c805460ff191660011790553480156200008a57600080fd5b50604080518082018252600e81526d4d5552414b414d49204d4645525360901b6020808301918252835180850190945260028452614d4d60f01b908401528151919291620000db916001916200016a565b508051620000f19060029060208401906200016a565b5050506200010e620001086200011460201b60201c565b62000118565b6200024d565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001789062000210565b90600052602060002090601f0160209004810192826200019c5760008555620001e7565b82601f10620001b757805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e7578251825591602001919060010190620001ca565b50620001f5929150620001f9565b5090565b5b80821115620001f55760008155600101620001fa565b6002810460018216806200022557607f821691505b602082108114156200024757634e487b7160e01b600052602260045260246000fd5b50919050565b612674806200025d6000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d48514610577578063e985e9c51461058c578063ec9496ba146105ac578063f2fde38b146105cc578063f43a22dc146105ec5761020f565b8063b88d4fde1461050d578063c66828621461052d578063c87b56dd14610542578063cd7c0326146105625761020f565b8063938e3d7b116100e7578063938e3d7b1461049057806395d89b41146104b0578063a035b1fe146104c5578063a0712d68146104da578063a22cb465146104ed5761020f565b8063715018a6146104465780638069876d146103875780638da5cb5b1461045b57806391b7f5ed146104705761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b3146103bc5780635c975abb146103dc5780636352211e146103f15780636c0360eb1461041157806370a08231146104265761020f565b80633ccfd60b1461035257806342842e0e14610367578063463fff79146103875780634f6ccce71461039c5761020f565b8063095ea7b3116101e2578063095ea7b3146102bb57806318160ddd146102db57806323b872dd146102fd5780632f745c591461031d57806332cb6b0c1461033d5761020f565b806301ffc9a71461021457806302329a291461024a57806306fdde031461026c578063081812fc1461028e575b600080fd5b34801561022057600080fd5b5061023461022f366004611c33565b610601565b6040516102419190611e0b565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611c19565b610664565b005b34801561027857600080fd5b506102816106bf565b6040516102419190611e16565b34801561029a57600080fd5b506102ae6102a9366004611cb1565b610751565b6040516102419190611dc4565b3480156102c757600080fd5b5061026a6102d6366004611bf0565b610794565b3480156102e757600080fd5b506102f061082d565b6040516102419190612497565b34801561030957600080fd5b5061026a610318366004611b13565b610833565b34801561032957600080fd5b506102f0610338366004611bf0565b61083e565b34801561034957600080fd5b506102f061093a565b34801561035e57600080fd5b5061026a610940565b34801561037357600080fd5b5061026a610382366004611b13565b610a07565b34801561039357600080fd5b506102f0610a22565b3480156103a857600080fd5b506102f06103b7366004611cb1565b610a27565b3480156103c857600080fd5b5061026a6103d7366004611c6b565b610a53565b3480156103e857600080fd5b50610234610aa5565b3480156103fd57600080fd5b506102ae61040c366004611cb1565b610aae565b34801561041d57600080fd5b50610281610ac0565b34801561043257600080fd5b506102f0610441366004611ac0565b610b4e565b34801561045257600080fd5b5061026a610b9b565b34801561046757600080fd5b506102ae610be6565b34801561047c57600080fd5b5061026a61048b366004611cb1565b610bf5565b34801561049c57600080fd5b5061026a6104ab366004611c6b565b610c39565b3480156104bc57600080fd5b50610281610c8b565b3480156104d157600080fd5b506102f0610c9a565b61026a6104e8366004611cb1565b610ca0565b3480156104f957600080fd5b5061026a610508366004611bc7565b610dd8565b34801561051957600080fd5b5061026a610528366004611b4e565b610ea6565b34801561053957600080fd5b50610281610edf565b34801561054e57600080fd5b5061028161055d366004611cb1565b610f00565b34801561056e57600080fd5b506102ae610fa3565b34801561058357600080fd5b50610281610fbb565b34801561059857600080fd5b506102346105a7366004611ae1565b610fc8565b3480156105b857600080fd5b5061026a6105c7366004611cb1565b610ff6565b3480156105d857600080fd5b5061026a6105e7366004611ac0565b61103a565b3480156105f857600080fd5b506102f06110ab565b60006001600160e01b031982166380ac58cd60e01b148061063257506001600160e01b03198216635b5e139f60e01b145b8061064d57506001600160e01b0319821663780e9d6360e01b145b8061065c575061065c826110b0565b90505b919050565b61066c6110c9565b6001600160a01b031661067d610be6565b6001600160a01b0316146106ac5760405162461bcd60e51b81526004016106a390612170565b60405180910390fd5b600c805460ff1916911515919091179055565b6060600180546106ce9061257c565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa9061257c565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b5050505050905090565b600061075c826110cd565b6107785760405162461bcd60e51b81526004016106a390612424565b506000908152600560205260409020546001600160a01b031690565b600061079f82610aae565b9050806001600160a01b0316836001600160a01b031614156107d35760405162461bcd60e51b81526004016106a39061225e565b806001600160a01b03166107e56110c9565b6001600160a01b031614806108015750610801816105a76110c9565b61081d5760405162461bcd60e51b81526004016106a390612027565b6108288383836110d4565b505050565b60005490565b610828838383611130565b600061084983610b4e565b82106108675760405162461bcd60e51b81526004016106a390611e29565b600061087161082d565b905060008060005b8381101561091b576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156108cc57805192505b876001600160a01b0316836001600160a01b0316141561090857868414156108fa5750935061093492505050565b83610904816125b7565b9450505b5080610913816125b7565b915050610879565b5060405162461bcd60e51b81526004016106a3906123d6565b92915050565b600a5481565b6109486110c9565b6001600160a01b0316610959610be6565b6001600160a01b03161461097f5760405162461bcd60e51b81526004016106a390612170565b47600061098a6110c9565b6001600160a01b0316826040516109a090611dc1565b60006040518083038185875af1925050503d80600081146109dd576040519150601f19603f3d011682016040523d82523d6000602084013e6109e2565b606091505b5050905080610a035760405162461bcd60e51b81526004016106a3906123ae565b5050565b61082883838360405180602001604052806000815250610ea6565b600181565b6000610a3161082d565b8210610a4f5760405162461bcd60e51b81526004016106a390611f6f565b5090565b610a5b6110c9565b6001600160a01b0316610a6c610be6565b6001600160a01b031614610a925760405162461bcd60e51b81526004016106a390612170565b8051610a0390600890602084019061197d565b600c5460ff1681565b6000610ab9826113f9565b5192915050565b60088054610acd9061257c565b80601f0160208091040260200160405190810160405280929190818152602001828054610af99061257c565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b505050505081565b60006001600160a01b038216610b765760405162461bcd60e51b81526004016106a3906120b0565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b610ba36110c9565b6001600160a01b0316610bb4610be6565b6001600160a01b031614610bda5760405162461bcd60e51b81526004016106a390612170565b610be4600061148a565b565b6007546001600160a01b031690565b610bfd6110c9565b6001600160a01b0316610c0e610be6565b6001600160a01b031614610c345760405162461bcd60e51b81526004016106a390612170565b600b55565b610c416110c9565b6001600160a01b0316610c52610be6565b6001600160a01b031614610c785760405162461bcd60e51b81526004016106a390612170565b8051610a0390600990602084019061197d565b6060600280546106ce9061257c565b600b5481565b6000610caa6110c9565b600c5490915060ff1615610cd05760405162461bcd60e51b81526004016106a390611e6b565b81610cd961082d565b610ce391906124d7565b600a541015610d045760405162461bcd60e51b81526004016106a390612084565b60008211610d245760405162461bcd60e51b81526004016106a390611f1b565b326001600160a01b03821614610d4c5760405162461bcd60e51b81526004016106a390612471565b610d5461082d565b600110610d81578160011015610d7c5760405162461bcd60e51b81526004016106a390611ff7565b610dce565b8160141015610da25760405162461bcd60e51b81526004016106a390611f3f565b34600b5483610db19190612503565b14610dce5760405162461bcd60e51b81526004016106a39061222e565b610a0381836114dc565b610de06110c9565b6001600160a01b0316826001600160a01b03161415610e115760405162461bcd60e51b81526004016106a3906121a5565b8060066000610e1e6110c9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e626110c9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9a9190611e0b565b60405180910390a35050565b610eb1848484611130565b610ebd848484846114f6565b610ed95760405162461bcd60e51b81526004016106a3906122e3565b50505050565b60405180604001604052806005815260200164173539b7b760d91b81525081565b6060610f0b826110cd565b610f275760405162461bcd60e51b81526004016106a3906120fb565b600060088054610f369061257c565b905011610f52576040518060200160405280600081525061065c565b6008610f5d83611612565b60405180604001604052806005815260200164173539b7b760d91b815250604051602001610f8d93929190611d11565b6040516020818303038152906040529050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054610acd9061257c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b610ffe6110c9565b6001600160a01b031661100f610be6565b6001600160a01b0316146110355760405162461bcd60e51b81526004016106a390612170565b600a55565b6110426110c9565b6001600160a01b0316611053610be6565b6001600160a01b0316146110795760405162461bcd60e51b81526004016106a390612170565b6001600160a01b03811661109f5760405162461bcd60e51b81526004016106a390611e8b565b6110a88161148a565b50565b601481565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061113b826113f9565b9050600081600001516001600160a01b03166111556110c9565b6001600160a01b0316148061118a575061116d6110c9565b6001600160a01b031661117f84610751565b6001600160a01b0316145b8061119e5750815161119e906105a76110c9565b9050806111bd5760405162461bcd60e51b81526004016106a3906121dc565b846001600160a01b031682600001516001600160a01b0316146111f25760405162461bcd60e51b81526004016106a39061212a565b6001600160a01b0384166112185760405162461bcd60e51b81526004016106a390611fb2565b6112258585856001610ed9565b61123560008484600001516110d4565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255825180840184529182524267ffffffffffffffff9081168386019081528a875260039095529285209151825494516001600160a01b031990951696169590951767ffffffffffffffff60a01b1916600160a01b9390921692909202179055906112fe9085906124d7565b6000818152600360205260409020549091506001600160a01b03166113a357611326816110cd565b156113a35760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff90811682850190815260008781526003909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113f18686866001610ed9565b505050505050565b6114016119fd565b61140a826110cd565b6114265760405162461bcd60e51b81526004016106a390611ed1565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561147757915061065f9050565b508061148281612565565b915050611428565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610a0382826040518060200160405280600081525061172d565b600061150a846001600160a01b0316611977565b1561160657836001600160a01b031663150b7a026115266110c9565b8786866040518563ffffffff1660e01b81526004016115489493929190611dd8565b602060405180830381600087803b15801561156257600080fd5b505af1925050508015611592575060408051601f3d908101601f1916820190925261158f91810190611c4f565b60015b6115ec573d8080156115c0576040519150601f19603f3d011682016040523d82523d6000602084013e6115c5565b606091505b5080516115e45760405162461bcd60e51b81526004016106a3906122e3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061160a565b5060015b949350505050565b60608161163757506040805180820190915260018152600360fc1b602082015261065f565b8160005b8115611661578061164b816125b7565b915061165a9050600a836124ef565b915061163b565b60008167ffffffffffffffff81111561168a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116b4576020820181803683370190505b5090505b841561160a576116c9600183612522565b91506116d6600a866125d2565b6116e19060306124d7565b60f81b81838151811061170457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611726600a866124ef565b94506116b8565b6000546001600160a01b0384166117565760405162461bcd60e51b81526004016106a39061236d565b61175f816110cd565b1561177c5760405162461bcd60e51b81526004016106a390612336565b6000831161179c5760405162461bcd60e51b81526004016106a3906122a0565b6117a96000858386610ed9565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906118059087906124ac565b6001600160801b0316815260200185836020015161182391906124ac565b6001600160801b039081169091526001600160a01b03808816600081815260046020908152604080832087518154988401518816600160801b029088166001600160801b031990991698909817909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156119655760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461192960008884886114f6565b6119455760405162461bcd60e51b81526004016106a3906122e3565b8161194f816125b7565b925050808061195d906125b7565b9150506118dc565b5060008181556113f190878588610ed9565b3b151590565b8280546119899061257c565b90600052602060002090601f0160209004810192826119ab57600085556119f1565b82601f106119c457805160ff19168380011785556119f1565b828001600101855582156119f1579182015b828111156119f15782518255916020019190600101906119d6565b50610a4f929150611a14565b604080518082019091526000808252602082015290565b5b80821115610a4f5760008155600101611a15565b600067ffffffffffffffff80841115611a4457611a44612612565b604051601f8501601f191681016020018281118282101715611a6857611a68612612565b604052848152915081838501861015611a8057600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461065f57600080fd5b8035801515811461065f57600080fd5b600060208284031215611ad1578081fd5b611ada82611a99565b9392505050565b60008060408385031215611af3578081fd5b611afc83611a99565b9150611b0a60208401611a99565b90509250929050565b600080600060608486031215611b27578081fd5b611b3084611a99565b9250611b3e60208501611a99565b9150604084013590509250925092565b60008060008060808587031215611b63578081fd5b611b6c85611a99565b9350611b7a60208601611a99565b925060408501359150606085013567ffffffffffffffff811115611b9c578182fd5b8501601f81018713611bac578182fd5b611bbb87823560208401611a29565b91505092959194509250565b60008060408385031215611bd9578182fd5b611be283611a99565b9150611b0a60208401611ab0565b60008060408385031215611c02578182fd5b611c0b83611a99565b946020939093013593505050565b600060208284031215611c2a578081fd5b611ada82611ab0565b600060208284031215611c44578081fd5b8135611ada81612628565b600060208284031215611c60578081fd5b8151611ada81612628565b600060208284031215611c7c578081fd5b813567ffffffffffffffff811115611c92578182fd5b8201601f81018413611ca2578182fd5b61160a84823560208401611a29565b600060208284031215611cc2578081fd5b5035919050565b60008151808452611ce1816020860160208601612539565b601f01601f19169290920160200192915050565b60008151611d07818560208601612539565b9290920192915050565b8354600090819060028104600180831680611d2d57607f831692505b6020808410821415611d4d57634e487b7160e01b87526022600452602487fd5b818015611d615760018114611d7257611d9e565b60ff19861689528489019650611d9e565b611d7b8c6124a0565b885b86811015611d965781548b820152908501908301611d7d565b505084890196505b505050505050611db7611db18287611cf5565b85611cf5565b9695505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611db790830184611cc9565b901515815260200190565b600060208252611ada6020830184611cc9565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b6020808252600a90820152694e6f2030206d696e747360b01b604082015260600190565b60208082526016908201527508af0c6cae6e640dac2f040e0cae440e0c2d2c840e8f60531b604082015260600190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526016908201527508af0c6cae6e640dac2f040e0cae440cce4caca40e8f60531b604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b60208082526012908201527145786365656473206d617820737570706c7960701b604082015260600190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b6020808252601590820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604082015260600190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b60208082526032908201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b602080825260169082015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526023908201527f455243373231413a207175616e74697479206d7573742062652067726561746560408201526207220360ec1b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600e908201526d11985a5b1959081d1bc81cd95b9960921b604082015260600190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b6020808252600c908201526b4e6f20636f6e74726163747360a01b604082015260600190565b90815260200190565b60009081526020902090565b60006001600160801b038083168185168083038211156124ce576124ce6125e6565b01949350505050565b600082198211156124ea576124ea6125e6565b500190565b6000826124fe576124fe6125fc565b500490565b600081600019048311821515161561251d5761251d6125e6565b500290565b600082821015612534576125346125e6565b500390565b60005b8381101561255457818101518382015260200161253c565b83811115610ed95750506000910152565b600081612574576125746125e6565b506000190190565b60028104600182168061259057607f821691505b602082108114156125b157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125cb576125cb6125e6565b5060010190565b6000826125e1576125e16125fc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146110a857600080fdfea2646970667358221220a6a30d186d978f8f82c7097e1bd27d45484126bd635111d56163c19e664e7bf864736f6c63430008000033697066733a2f2f516d6238666a615163786539556b39613767564b565038706b627043567752716845374a573845673442374264432f697066733a2f2f516d504a357074434b45585668596f645658686f6d35574875463276594d56636670326350786563364775765856
Deployed Bytecode
0x60806040526004361061020f5760003560e01c8063715018a611610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d48514610577578063e985e9c51461058c578063ec9496ba146105ac578063f2fde38b146105cc578063f43a22dc146105ec5761020f565b8063b88d4fde1461050d578063c66828621461052d578063c87b56dd14610542578063cd7c0326146105625761020f565b8063938e3d7b116100e7578063938e3d7b1461049057806395d89b41146104b0578063a035b1fe146104c5578063a0712d68146104da578063a22cb465146104ed5761020f565b8063715018a6146104465780638069876d146103875780638da5cb5b1461045b57806391b7f5ed146104705761020f565b80633ccfd60b1161019b57806355f804b31161016a57806355f804b3146103bc5780635c975abb146103dc5780636352211e146103f15780636c0360eb1461041157806370a08231146104265761020f565b80633ccfd60b1461035257806342842e0e14610367578063463fff79146103875780634f6ccce71461039c5761020f565b8063095ea7b3116101e2578063095ea7b3146102bb57806318160ddd146102db57806323b872dd146102fd5780632f745c591461031d57806332cb6b0c1461033d5761020f565b806301ffc9a71461021457806302329a291461024a57806306fdde031461026c578063081812fc1461028e575b600080fd5b34801561022057600080fd5b5061023461022f366004611c33565b610601565b6040516102419190611e0b565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611c19565b610664565b005b34801561027857600080fd5b506102816106bf565b6040516102419190611e16565b34801561029a57600080fd5b506102ae6102a9366004611cb1565b610751565b6040516102419190611dc4565b3480156102c757600080fd5b5061026a6102d6366004611bf0565b610794565b3480156102e757600080fd5b506102f061082d565b6040516102419190612497565b34801561030957600080fd5b5061026a610318366004611b13565b610833565b34801561032957600080fd5b506102f0610338366004611bf0565b61083e565b34801561034957600080fd5b506102f061093a565b34801561035e57600080fd5b5061026a610940565b34801561037357600080fd5b5061026a610382366004611b13565b610a07565b34801561039357600080fd5b506102f0610a22565b3480156103a857600080fd5b506102f06103b7366004611cb1565b610a27565b3480156103c857600080fd5b5061026a6103d7366004611c6b565b610a53565b3480156103e857600080fd5b50610234610aa5565b3480156103fd57600080fd5b506102ae61040c366004611cb1565b610aae565b34801561041d57600080fd5b50610281610ac0565b34801561043257600080fd5b506102f0610441366004611ac0565b610b4e565b34801561045257600080fd5b5061026a610b9b565b34801561046757600080fd5b506102ae610be6565b34801561047c57600080fd5b5061026a61048b366004611cb1565b610bf5565b34801561049c57600080fd5b5061026a6104ab366004611c6b565b610c39565b3480156104bc57600080fd5b50610281610c8b565b3480156104d157600080fd5b506102f0610c9a565b61026a6104e8366004611cb1565b610ca0565b3480156104f957600080fd5b5061026a610508366004611bc7565b610dd8565b34801561051957600080fd5b5061026a610528366004611b4e565b610ea6565b34801561053957600080fd5b50610281610edf565b34801561054e57600080fd5b5061028161055d366004611cb1565b610f00565b34801561056e57600080fd5b506102ae610fa3565b34801561058357600080fd5b50610281610fbb565b34801561059857600080fd5b506102346105a7366004611ae1565b610fc8565b3480156105b857600080fd5b5061026a6105c7366004611cb1565b610ff6565b3480156105d857600080fd5b5061026a6105e7366004611ac0565b61103a565b3480156105f857600080fd5b506102f06110ab565b60006001600160e01b031982166380ac58cd60e01b148061063257506001600160e01b03198216635b5e139f60e01b145b8061064d57506001600160e01b0319821663780e9d6360e01b145b8061065c575061065c826110b0565b90505b919050565b61066c6110c9565b6001600160a01b031661067d610be6565b6001600160a01b0316146106ac5760405162461bcd60e51b81526004016106a390612170565b60405180910390fd5b600c805460ff1916911515919091179055565b6060600180546106ce9061257c565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa9061257c565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b5050505050905090565b600061075c826110cd565b6107785760405162461bcd60e51b81526004016106a390612424565b506000908152600560205260409020546001600160a01b031690565b600061079f82610aae565b9050806001600160a01b0316836001600160a01b031614156107d35760405162461bcd60e51b81526004016106a39061225e565b806001600160a01b03166107e56110c9565b6001600160a01b031614806108015750610801816105a76110c9565b61081d5760405162461bcd60e51b81526004016106a390612027565b6108288383836110d4565b505050565b60005490565b610828838383611130565b600061084983610b4e565b82106108675760405162461bcd60e51b81526004016106a390611e29565b600061087161082d565b905060008060005b8381101561091b576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff1691830191909152156108cc57805192505b876001600160a01b0316836001600160a01b0316141561090857868414156108fa5750935061093492505050565b83610904816125b7565b9450505b5080610913816125b7565b915050610879565b5060405162461bcd60e51b81526004016106a3906123d6565b92915050565b600a5481565b6109486110c9565b6001600160a01b0316610959610be6565b6001600160a01b03161461097f5760405162461bcd60e51b81526004016106a390612170565b47600061098a6110c9565b6001600160a01b0316826040516109a090611dc1565b60006040518083038185875af1925050503d80600081146109dd576040519150601f19603f3d011682016040523d82523d6000602084013e6109e2565b606091505b5050905080610a035760405162461bcd60e51b81526004016106a3906123ae565b5050565b61082883838360405180602001604052806000815250610ea6565b600181565b6000610a3161082d565b8210610a4f5760405162461bcd60e51b81526004016106a390611f6f565b5090565b610a5b6110c9565b6001600160a01b0316610a6c610be6565b6001600160a01b031614610a925760405162461bcd60e51b81526004016106a390612170565b8051610a0390600890602084019061197d565b600c5460ff1681565b6000610ab9826113f9565b5192915050565b60088054610acd9061257c565b80601f0160208091040260200160405190810160405280929190818152602001828054610af99061257c565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b505050505081565b60006001600160a01b038216610b765760405162461bcd60e51b81526004016106a3906120b0565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b610ba36110c9565b6001600160a01b0316610bb4610be6565b6001600160a01b031614610bda5760405162461bcd60e51b81526004016106a390612170565b610be4600061148a565b565b6007546001600160a01b031690565b610bfd6110c9565b6001600160a01b0316610c0e610be6565b6001600160a01b031614610c345760405162461bcd60e51b81526004016106a390612170565b600b55565b610c416110c9565b6001600160a01b0316610c52610be6565b6001600160a01b031614610c785760405162461bcd60e51b81526004016106a390612170565b8051610a0390600990602084019061197d565b6060600280546106ce9061257c565b600b5481565b6000610caa6110c9565b600c5490915060ff1615610cd05760405162461bcd60e51b81526004016106a390611e6b565b81610cd961082d565b610ce391906124d7565b600a541015610d045760405162461bcd60e51b81526004016106a390612084565b60008211610d245760405162461bcd60e51b81526004016106a390611f1b565b326001600160a01b03821614610d4c5760405162461bcd60e51b81526004016106a390612471565b610d5461082d565b600110610d81578160011015610d7c5760405162461bcd60e51b81526004016106a390611ff7565b610dce565b8160141015610da25760405162461bcd60e51b81526004016106a390611f3f565b34600b5483610db19190612503565b14610dce5760405162461bcd60e51b81526004016106a39061222e565b610a0381836114dc565b610de06110c9565b6001600160a01b0316826001600160a01b03161415610e115760405162461bcd60e51b81526004016106a3906121a5565b8060066000610e1e6110c9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610e626110c9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e9a9190611e0b565b60405180910390a35050565b610eb1848484611130565b610ebd848484846114f6565b610ed95760405162461bcd60e51b81526004016106a3906122e3565b50505050565b60405180604001604052806005815260200164173539b7b760d91b81525081565b6060610f0b826110cd565b610f275760405162461bcd60e51b81526004016106a3906120fb565b600060088054610f369061257c565b905011610f52576040518060200160405280600081525061065c565b6008610f5d83611612565b60405180604001604052806005815260200164173539b7b760d91b815250604051602001610f8d93929190611d11565b6040516020818303038152906040529050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054610acd9061257c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b610ffe6110c9565b6001600160a01b031661100f610be6565b6001600160a01b0316146110355760405162461bcd60e51b81526004016106a390612170565b600a55565b6110426110c9565b6001600160a01b0316611053610be6565b6001600160a01b0316146110795760405162461bcd60e51b81526004016106a390612170565b6001600160a01b03811661109f5760405162461bcd60e51b81526004016106a390611e8b565b6110a88161148a565b50565b601481565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b6000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061113b826113f9565b9050600081600001516001600160a01b03166111556110c9565b6001600160a01b0316148061118a575061116d6110c9565b6001600160a01b031661117f84610751565b6001600160a01b0316145b8061119e5750815161119e906105a76110c9565b9050806111bd5760405162461bcd60e51b81526004016106a3906121dc565b846001600160a01b031682600001516001600160a01b0316146111f25760405162461bcd60e51b81526004016106a39061212a565b6001600160a01b0384166112185760405162461bcd60e51b81526004016106a390611fb2565b6112258585856001610ed9565b61123560008484600001516110d4565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255825180840184529182524267ffffffffffffffff9081168386019081528a875260039095529285209151825494516001600160a01b031990951696169590951767ffffffffffffffff60a01b1916600160a01b9390921692909202179055906112fe9085906124d7565b6000818152600360205260409020549091506001600160a01b03166113a357611326816110cd565b156113a35760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff90811682850190815260008781526003909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113f18686866001610ed9565b505050505050565b6114016119fd565b61140a826110cd565b6114265760405162461bcd60e51b81526004016106a390611ed1565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561147757915061065f9050565b508061148281612565565b915050611428565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610a0382826040518060200160405280600081525061172d565b600061150a846001600160a01b0316611977565b1561160657836001600160a01b031663150b7a026115266110c9565b8786866040518563ffffffff1660e01b81526004016115489493929190611dd8565b602060405180830381600087803b15801561156257600080fd5b505af1925050508015611592575060408051601f3d908101601f1916820190925261158f91810190611c4f565b60015b6115ec573d8080156115c0576040519150601f19603f3d011682016040523d82523d6000602084013e6115c5565b606091505b5080516115e45760405162461bcd60e51b81526004016106a3906122e3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061160a565b5060015b949350505050565b60608161163757506040805180820190915260018152600360fc1b602082015261065f565b8160005b8115611661578061164b816125b7565b915061165a9050600a836124ef565b915061163b565b60008167ffffffffffffffff81111561168a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116b4576020820181803683370190505b5090505b841561160a576116c9600183612522565b91506116d6600a866125d2565b6116e19060306124d7565b60f81b81838151811061170457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611726600a866124ef565b94506116b8565b6000546001600160a01b0384166117565760405162461bcd60e51b81526004016106a39061236d565b61175f816110cd565b1561177c5760405162461bcd60e51b81526004016106a390612336565b6000831161179c5760405162461bcd60e51b81526004016106a3906122a0565b6117a96000858386610ed9565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906118059087906124ac565b6001600160801b0316815260200185836020015161182391906124ac565b6001600160801b039081169091526001600160a01b03808816600081815260046020908152604080832087518154988401518816600160801b029088166001600160801b031990991698909817909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526003909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156119655760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461192960008884886114f6565b6119455760405162461bcd60e51b81526004016106a3906122e3565b8161194f816125b7565b925050808061195d906125b7565b9150506118dc565b5060008181556113f190878588610ed9565b3b151590565b8280546119899061257c565b90600052602060002090601f0160209004810192826119ab57600085556119f1565b82601f106119c457805160ff19168380011785556119f1565b828001600101855582156119f1579182015b828111156119f15782518255916020019190600101906119d6565b50610a4f929150611a14565b604080518082019091526000808252602082015290565b5b80821115610a4f5760008155600101611a15565b600067ffffffffffffffff80841115611a4457611a44612612565b604051601f8501601f191681016020018281118282101715611a6857611a68612612565b604052848152915081838501861015611a8057600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461065f57600080fd5b8035801515811461065f57600080fd5b600060208284031215611ad1578081fd5b611ada82611a99565b9392505050565b60008060408385031215611af3578081fd5b611afc83611a99565b9150611b0a60208401611a99565b90509250929050565b600080600060608486031215611b27578081fd5b611b3084611a99565b9250611b3e60208501611a99565b9150604084013590509250925092565b60008060008060808587031215611b63578081fd5b611b6c85611a99565b9350611b7a60208601611a99565b925060408501359150606085013567ffffffffffffffff811115611b9c578182fd5b8501601f81018713611bac578182fd5b611bbb87823560208401611a29565b91505092959194509250565b60008060408385031215611bd9578182fd5b611be283611a99565b9150611b0a60208401611ab0565b60008060408385031215611c02578182fd5b611c0b83611a99565b946020939093013593505050565b600060208284031215611c2a578081fd5b611ada82611ab0565b600060208284031215611c44578081fd5b8135611ada81612628565b600060208284031215611c60578081fd5b8151611ada81612628565b600060208284031215611c7c578081fd5b813567ffffffffffffffff811115611c92578182fd5b8201601f81018413611ca2578182fd5b61160a84823560208401611a29565b600060208284031215611cc2578081fd5b5035919050565b60008151808452611ce1816020860160208601612539565b601f01601f19169290920160200192915050565b60008151611d07818560208601612539565b9290920192915050565b8354600090819060028104600180831680611d2d57607f831692505b6020808410821415611d4d57634e487b7160e01b87526022600452602487fd5b818015611d615760018114611d7257611d9e565b60ff19861689528489019650611d9e565b611d7b8c6124a0565b885b86811015611d965781548b820152908501908301611d7d565b505084890196505b505050505050611db7611db18287611cf5565b85611cf5565b9695505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611db790830184611cc9565b901515815260200190565b600060208252611ada6020830184611cc9565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b6020808252600a90820152694e6f2030206d696e747360b01b604082015260600190565b60208082526016908201527508af0c6cae6e640dac2f040e0cae440e0c2d2c840e8f60531b604082015260600190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526016908201527508af0c6cae6e640dac2f040e0cae440cce4caca40e8f60531b604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b60208082526012908201527145786365656473206d617820737570706c7960701b604082015260600190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b6020808252601590820152742a37b5b2b7103237b2b9903737ba1032bc34b9ba1760591b604082015260600190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b60208082526032908201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b602080825260169082015275125b9d985b1a5908199d5b991cc81c1c9bdd9a59195960521b604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526023908201527f455243373231413a207175616e74697479206d7573742062652067726561746560408201526207220360ec1b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600e908201526d11985a5b1959081d1bc81cd95b9960921b604082015260600190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b6020808252600c908201526b4e6f20636f6e74726163747360a01b604082015260600190565b90815260200190565b60009081526020902090565b60006001600160801b038083168185168083038211156124ce576124ce6125e6565b01949350505050565b600082198211156124ea576124ea6125e6565b500190565b6000826124fe576124fe6125fc565b500490565b600081600019048311821515161561251d5761251d6125e6565b500290565b600082821015612534576125346125e6565b500390565b60005b8381101561255457818101518382015260200161253c565b83811115610ed95750506000910152565b600081612574576125746125e6565b506000190190565b60028104600182168061259057607f821691505b602082108114156125b157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125cb576125cb6125e6565b5060010190565b6000826125e1576125e16125fc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146110a857600080fdfea2646970667358221220a6a30d186d978f8f82c7097e1bd27d45484126bd635111d56163c19e664e7bf864736f6c63430008000033
Deployed Bytecode Sourcemap
41366:2461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29380:372;;;;;;;;;;-1:-1:-1;29380:372:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42951:81;;;;;;;;;;-1:-1:-1;42951:81:0;;;;;:::i;:::-;;:::i;:::-;;31007:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32568:214::-;;;;;;;;;;-1:-1:-1;32568:214:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32089:413::-;;;;;;;;;;-1:-1:-1;32089:413:0;;;;;:::i;:::-;;:::i;27821:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33444:162::-;;;;;;;;;;-1:-1:-1;33444:162:0;;;;;:::i;:::-;;:::i;28485:823::-;;;;;;;;;;-1:-1:-1;28485:823:0;;;;;:::i;:::-;;:::i;41892:32::-;;;;;;;;;;;;;:::i;42734:209::-;;;;;;;;;;;;;:::i;33677:177::-;;;;;;;;;;-1:-1:-1;33677:177:0;;;;;:::i;:::-;;:::i;41746:43::-;;;;;;;;;;;;;:::i;27998:187::-;;;;;;;;;;-1:-1:-1;27998:187:0;;;;;:::i;:::-;;:::i;43040:100::-;;;;;;;;;;-1:-1:-1;43040:100:0;;;;;:::i;:::-;;:::i;41975:25::-;;;;;;;;;;;;;:::i;30816:124::-;;;;;;;;;;-1:-1:-1;30816:124:0;;;;;:::i;:::-;;:::i;41418:80::-;;;;;;;;;;;;;:::i;29816:221::-;;;;;;;;;;-1:-1:-1;29816:221:0;;;;;:::i;:::-;;:::i;5858:103::-;;;;;;;;;;;;;:::i;5207:87::-;;;;;;;;;;;;;:::i;43268:84::-;;;;;;;;;;-1:-1:-1;43268:84:0;;;;;:::i;:::-;;:::i;43148:116::-;;;;;;;;;;-1:-1:-1;43148:116:0;;;;;:::i;:::-;;:::i;31176:104::-;;;;;;;;;;;;;:::i;41931:35::-;;;;;;;;;;;;;:::i;42065:657::-;;;;;;:::i;:::-;;:::i;32854:288::-;;;;;;;;;;-1:-1:-1;32854:288:0;;;;;:::i;:::-;;:::i;33925:355::-;;;;;;;;;;-1:-1:-1;33925:355:0;;;;;:::i;:::-;;:::i;41595:46::-;;;;;;;;;;;;;:::i;43462:362::-;;;;;;;;;;-1:-1:-1;43462:362:0;;;;;:::i;:::-;;:::i;41648:89::-;;;;;;;;;;;;;:::i;41505:83::-;;;;;;;;;;;;;:::i;33213:164::-;;;;;;;;;;-1:-1:-1;33213:164:0;;;;;:::i;:::-;;:::i;43356:96::-;;;;;;;;;;-1:-1:-1;43356:96:0;;;;;:::i;:::-;;:::i;6116:201::-;;;;;;;;;;-1:-1:-1;6116:201:0;;;;;:::i;:::-;;:::i;41796:39::-;;;;;;;;;;;;;:::i;29380:372::-;29482:4;-1:-1:-1;;;;;;29519:40:0;;-1:-1:-1;;;29519:40:0;;:105;;-1:-1:-1;;;;;;;29576:48:0;;-1:-1:-1;;;29576:48:0;29519:105;:172;;;-1:-1:-1;;;;;;;29641:50:0;;-1:-1:-1;;;29641:50:0;29519:172;:225;;;;29708:36;29732:11;29708:23;:36::i;:::-;29499:245;;29380:372;;;;:::o;42951:81::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;;;;;;;;;43009:6:::1;:15:::0;;-1:-1:-1;;43009:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42951:81::o;31007:100::-;31061:13;31094:5;31087:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31007:100;:::o;32568:214::-;32636:7;32664:16;32672:7;32664;:16::i;:::-;32656:74;;;;-1:-1:-1;;;32656:74:0;;;;;;;:::i;:::-;-1:-1:-1;32750:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32750:24:0;;32568:214::o;32089:413::-;32162:13;32178:24;32194:7;32178:15;:24::i;:::-;32162:40;;32227:5;-1:-1:-1;;;;;32221:11:0;:2;-1:-1:-1;;;;;32221:11:0;;;32213:58;;;;-1:-1:-1;;;32213:58:0;;;;;;;:::i;:::-;32322:5;-1:-1:-1;;;;;32306:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;32306:21:0;;:62;;;;32331:37;32348:5;32355:12;:10;:12::i;32331:37::-;32284:169;;;;-1:-1:-1;;;32284:169:0;;;;;;;:::i;:::-;32466:28;32475:2;32479:7;32488:5;32466:8;:28::i;:::-;32089:413;;;:::o;27821:100::-;27874:7;27901:12;27821:100;:::o;33444:162::-;33570:28;33580:4;33586:2;33590:7;33570:9;:28::i;28485:823::-;28574:7;28610:16;28620:5;28610:9;:16::i;:::-;28602:5;:24;28594:71;;;;-1:-1:-1;;;28594:71:0;;;;;;;:::i;:::-;28676:22;28701:13;:11;:13::i;:::-;28676:38;;28725:19;28759:25;28813:9;28808:426;28832:14;28828:1;:18;28808:426;;;28868:31;28902:14;;;:11;:14;;;;;;;;;28868:48;;;;;;;;;-1:-1:-1;;;;;28868:48:0;;;;;-1:-1:-1;;;28868:48:0;;;;;;;;;;;;28935:28;28931:103;;29004:14;;;-1:-1:-1;28931:103:0;29073:5;-1:-1:-1;;;;;29052:26:0;:17;-1:-1:-1;;;;;29052:26:0;;29048:175;;;29118:5;29103:11;:20;29099:77;;;-1:-1:-1;29155:1:0;-1:-1:-1;29148:8:0;;-1:-1:-1;;;29148:8:0;29099:77;29194:13;;;;:::i;:::-;;;;29048:175;-1:-1:-1;28848:3:0;;;;:::i;:::-;;;;28808:426;;;;29244:56;;-1:-1:-1;;;29244:56:0;;;;;;;:::i;28485:823::-;;;;;:::o;41892:32::-;;;;:::o;42734:209::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;42802:21:::1;42784:15;42853:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42853:17:0::1;42878:7;42853:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42834:56;;;42909:7;42901:34;;;;-1:-1:-1::0;;;42901:34:0::1;;;;;;;:::i;:::-;5498:1;;42734:209::o:0;33677:177::-;33807:39;33824:4;33830:2;33834:7;33807:39;;;;;;;;;;;;:16;:39::i;41746:43::-;41788:1;41746:43;:::o;27998:187::-;28065:7;28101:13;:11;:13::i;:::-;28093:5;:21;28085:69;;;;-1:-1:-1;;;28085:69:0;;;;;;;:::i;:::-;-1:-1:-1;28172:5:0;27998:187::o;43040:100::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;43114:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;41975:25::-:0;;;;;;:::o;30816:124::-;30880:7;30907:20;30919:7;30907:11;:20::i;:::-;:25;;30816:124;-1:-1:-1;;30816:124:0:o;41418:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29816:221::-;29880:7;-1:-1:-1;;;;;29908:19:0;;29900:75;;;;-1:-1:-1;;;29900:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;30001:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;30001:27:0;;29816:221::o;5858:103::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;5923:30:::1;5950:1;5923:18;:30::i;:::-;5858:103::o:0;5207:87::-;5280:6;;-1:-1:-1;;;;;5280:6:0;5207:87;:::o;43268:84::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;43332:5:::1;:16:::0;43268:84::o;43148:116::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;43230:26;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;31176:104::-:0;31232:13;31265:7;31258:14;;;;;:::i;41931:35::-;;;;:::o;42065:657::-;42124:15;42142:12;:10;:12::i;:::-;42174:6;;42124:30;;-1:-1:-1;42174:6:0;;42173:7;42165:26;;;;-1:-1:-1;;;42165:26:0;;;;;;;:::i;:::-;42240:7;42224:13;:11;:13::i;:::-;:23;;;;:::i;:::-;42210:10;;:37;;42202:68;;;;-1:-1:-1;;;42202:68:0;;;;;;;:::i;:::-;42299:1;42289:7;:11;42281:34;;;;-1:-1:-1;;;42281:34:0;;;;;;;:::i;:::-;42334:9;-1:-1:-1;;;;;42334:20:0;;;42326:45;;;;-1:-1:-1;;;42326:45:0;;;;;;;:::i;:::-;42406:13;:11;:13::i;:::-;41884:1;42387:32;42384:291;;42462:7;41788:1;42443:26;;42435:62;;;;-1:-1:-1;;;42435:62:0;;;;;;;:::i;:::-;42384:291;;;42550:7;41833:2;42536:21;;42528:57;;;;-1:-1:-1;;;42528:57:0;;;;;;;:::i;:::-;42627:9;42618:5;;42608:7;:15;;;;:::i;:::-;:28;42600:63;;;;-1:-1:-1;;;42600:63:0;;;;;;;:::i;:::-;42687:27;42697:7;42706;42687:9;:27::i;32854:288::-;32961:12;:10;:12::i;:::-;-1:-1:-1;;;;;32949:24:0;:8;-1:-1:-1;;;;;32949:24:0;;;32941:63;;;;-1:-1:-1;;;32941:63:0;;;;;;;:::i;:::-;33062:8;33017:18;:32;33036:12;:10;:12::i;:::-;-1:-1:-1;;;;;33017:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;33017:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;33017:53:0;;;;;;;;;;;33101:12;:10;:12::i;:::-;-1:-1:-1;;;;;33086:48:0;;33125:8;33086:48;;;;;;:::i;:::-;;;;;;;;32854:288;;:::o;33925:355::-;34084:28;34094:4;34100:2;34104:7;34084:9;:28::i;:::-;34145:48;34168:4;34174:2;34178:7;34187:5;34145:22;:48::i;:::-;34123:149;;;;-1:-1:-1;;;34123:149:0;;;;;;;:::i;:::-;33925:355;;;;:::o;41595:46::-;;;;;;;;;;;;;;-1:-1:-1;;;41595:46:0;;;;:::o;43462:362::-;43528:13;43562:17;43570:8;43562:7;:17::i;:::-;43554:51;;;;-1:-1:-1;;;43554:51:0;;;;;;;:::i;:::-;43647:1;43629:7;43623:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;43705:7;43729:26;43746:8;43729:16;:26::i;:::-;43772:13;;;;;;;;;;;;;-1:-1:-1;;;43772:13:0;;;43672:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43616:200;;43462:362;;;:::o;41648:89::-;41695:42;41648:89;:::o;41505:83::-;;;;;;;:::i;33213:164::-;-1:-1:-1;;;;;33334:25:0;;;33310:4;33334:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;33213:164::o;43356:96::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;43426:10:::1;:22:::0;43356:96::o;6116:201::-;5438:12;:10;:12::i;:::-;-1:-1:-1;;;;;5427:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;5427:23:0;;5419:68;;;;-1:-1:-1;;;5419:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6205:22:0;::::1;6197:73;;;;-1:-1:-1::0;;;6197:73:0::1;;;;;;;:::i;:::-;6281:28;6300:8;6281:18;:28::i;:::-;6116:201:::0;:::o;41796:39::-;41833:2;41796:39;:::o;25884:157::-;-1:-1:-1;;;;;;25993:40:0;;-1:-1:-1;;;25993:40:0;25884:157;;;:::o;3948:98::-;4028:10;3948:98;:::o;34535:111::-;34592:4;34626:12;-1:-1:-1;34616:22:0;34535:111::o;38577:196::-;38692:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;38692:29:0;-1:-1:-1;;;;;38692:29:0;;;;;;;;;38737:28;;38692:24;;38737:28;;;;;;;38577:196;;;:::o;36676:1783::-;36791:35;36829:20;36841:7;36829:11;:20::i;:::-;36791:58;;36862:22;36904:13;:18;;;-1:-1:-1;;;;;36888:34:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;36888:34:0;;:87;;;;36963:12;:10;:12::i;:::-;-1:-1:-1;;;;;36939:36:0;:20;36951:7;36939:11;:20::i;:::-;-1:-1:-1;;;;;36939:36:0;;36888:87;:154;;;-1:-1:-1;37009:18:0;;36992:50;;37029:12;:10;:12::i;36992:50::-;36862:181;;37064:17;37056:80;;;;-1:-1:-1;;;37056:80:0;;;;;;;:::i;:::-;37179:4;-1:-1:-1;;;;;37157:26:0;:13;:18;;;-1:-1:-1;;;;;37157:26:0;;37149:77;;;;-1:-1:-1;;;37149:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37245:16:0;;37237:66;;;;-1:-1:-1;;;37237:66:0;;;;;;;:::i;:::-;37316:43;37338:4;37344:2;37348:7;37357:1;37316:21;:43::i;:::-;37424:49;37441:1;37445:7;37454:13;:18;;;37424:8;:49::i;:::-;-1:-1:-1;;;;;37678:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;;;;;37678:31:0;;;-1:-1:-1;;;;;37678:31:0;;;-1:-1:-1;;37678:31:0;;;;;;;37724:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37724:29:0;;;;;;;;;;;;;37800:43;;;;;;;;;;37826:15;37800:43;;;;;;;;;;37777:20;;;:11;:20;;;;;;:66;;;;;;-1:-1:-1;;;;;;37777:66:0;;;;;;;;;-1:-1:-1;;;;37777:66:0;-1:-1:-1;;;37777:66:0;;;;;;;;;;;37678:18;38105:11;;37777:20;;38105:11;:::i;:::-;38172:1;38131:24;;;:11;:24;;;;;:29;38083:33;;-1:-1:-1;;;;;;38131:29:0;38127:227;;38195:20;38203:11;38195:7;:20::i;:::-;38191:152;;;38263:64;;;;;;;;38278:18;;-1:-1:-1;;;;;38263:64:0;;;;;;38298:28;;;;38263:64;;;;;;;;;;-1:-1:-1;38236:24:0;;;:11;:24;;;;;;;:91;;;;;;-1:-1:-1;;;;;;38236:91:0;;;;;;;;;-1:-1:-1;;;;38236:91:0;-1:-1:-1;;;38236:91:0;;;;;;;;;;;;;;38191:152;38390:7;38386:2;-1:-1:-1;;;;;38371:27:0;38380:4;-1:-1:-1;;;;;38371:27:0;;;;;;;;;;;38409:42;38430:4;38436:2;38440:7;38449:1;38409:20;:42::i;:::-;36676:1783;;;;;;:::o;30282:472::-;30343:21;;:::i;:::-;30385:16;30393:7;30385;:16::i;:::-;30377:71;;;;-1:-1:-1;;;30377:71:0;;;;;;;:::i;:::-;30481:7;30461:216;30515:31;30549:17;;;:11;:17;;;;;;;;;30515:51;;;;;;;;;-1:-1:-1;;;;;30515:51:0;;;;;-1:-1:-1;;;30515:51:0;;;;;;;;;;;;30585:28;30581:85;;30641:9;-1:-1:-1;30634:16:0;;-1:-1:-1;30634:16:0;30581:85;-1:-1:-1;30492:6:0;;;;:::i;:::-;;;;30461:216;;6477:191;6570:6;;;-1:-1:-1;;;;;6587:17:0;;;-1:-1:-1;;;;;;6587:17:0;;;;;;;6620:40;;6570:6;;;6587:17;6570:6;;6620:40;;6551:16;;6620:40;6477:191;;:::o;34654:104::-;34723:27;34733:2;34737:8;34723:27;;;;;;;;;;;;:9;:27::i;39338:804::-;39493:4;39514:15;:2;-1:-1:-1;;;;;39514:13:0;;:15::i;:::-;39510:625;;;39566:2;-1:-1:-1;;;;;39550:36:0;;39587:12;:10;:12::i;:::-;39601:4;39607:7;39616:5;39550:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39550:72:0;;;;;;;;-1:-1:-1;;39550:72:0;;;;;;;;;;;;:::i;:::-;;;39546:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39796:13:0;;39792:273;;39839:61;;-1:-1:-1;;;39839:61:0;;;;;;;:::i;39792:273::-;40015:6;40009:13;40000:6;39996:2;39992:15;39985:38;39546:534;-1:-1:-1;;;;;;39673:55:0;-1:-1:-1;;;39673:55:0;;-1:-1:-1;39666:62:0;;39510:625;-1:-1:-1;40119:4:0;39510:625;39338:804;;;;;;:::o;7025:723::-;7081:13;7302:10;7298:53;;-1:-1:-1;7329:10:0;;;;;;;;;;;;-1:-1:-1;;;7329:10:0;;;;;;7298:53;7376:5;7361:12;7417:78;7424:9;;7417:78;;7450:8;;;;:::i;:::-;;-1:-1:-1;7473:10:0;;-1:-1:-1;7481:2:0;7473:10;;:::i;:::-;;;7417:78;;;7505:19;7537:6;7527:17;;;;;;-1:-1:-1;;;7527:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7527:17:0;;7505:39;;7555:154;7562:10;;7555:154;;7589:11;7599:1;7589:11;;:::i;:::-;;-1:-1:-1;7658:10:0;7666:2;7658:5;:10;:::i;:::-;7645:24;;:2;:24;:::i;:::-;7632:39;;7615:6;7622;7615:14;;;;;;-1:-1:-1;;;7615:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;7615:56:0;;;;;;;;-1:-1:-1;7686:11:0;7695:2;7686:11;;:::i;:::-;;;7555:154;;35035:1387;35158:20;35181:12;-1:-1:-1;;;;;35212:16:0;;35204:62;;;;-1:-1:-1;;;35204:62:0;;;;;;;:::i;:::-;35411:21;35419:12;35411:7;:21::i;:::-;35410:22;35402:64;;;;-1:-1:-1;;;35402:64:0;;;;;;;:::i;:::-;35496:1;35485:8;:12;35477:60;;;;-1:-1:-1;;;35477:60:0;;;;;;;:::i;:::-;35550:61;35580:1;35584:2;35588:12;35602:8;35550:21;:61::i;:::-;-1:-1:-1;;;;;35657:16:0;;35624:30;35657:16;;;:12;:16;;;;;;;;;35624:49;;;;;;;;;-1:-1:-1;;;;;35624:49:0;;;;;-1:-1:-1;;;35624:49:0;;;;;;;;;;;35703:135;;;;;;;;35729:19;;35624:49;;35703:135;;;35729:39;;35759:8;;35729:39;:::i;:::-;-1:-1:-1;;;;;35703:135:0;;;;;35818:8;35783:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;35703:135:0;;;;;;-1:-1:-1;;;;;35684:16:0;;;;;;;:12;:16;;;;;;;;:154;;;;;;;;;;-1:-1:-1;;;35684:154:0;;;;-1:-1:-1;;;;;;35684:154:0;;;;;;;;;;;;;;;;;35877:43;;;;;;;;;;;35903:15;35877:43;;;;;;;;35849:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;35849:71:0;-1:-1:-1;;;;35849:71:0;;;;-1:-1:-1;;;;;;35849:71:0;;;;;;;;;;;;;;;35861:12;;35981:325;36005:8;36001:1;:12;35981:325;;;36040:38;;36065:12;;-1:-1:-1;;;;;36040:38:0;;;36057:1;;36040:38;;36057:1;;36040:38;36119:59;36150:1;36154:2;36158:12;36172:5;36119:22;:59::i;:::-;36093:172;;;;-1:-1:-1;;;36093:172:0;;;;;;;:::i;:::-;36280:14;;;;:::i;:::-;;;;36015:3;;;;;:::i;:::-;;;;35981:325;;;-1:-1:-1;36316:12:0;:27;;;36354:60;;36387:2;36391:12;36405:8;36354:20;:60::i;17776:387::-;18099:20;18147:8;;;17776:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;:::-;1124:41;1043:128;-1:-1:-1;;;1043:128:1:o;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:192::-;;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3183:6;3175;3168:22;3130:2;3211:28;3229:9;3211:28;:::i;3250:257::-;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;3426:9;3413:23;3445:32;3471:5;3445:32;:::i;3512:261::-;;3634:2;3622:9;3613:7;3609:23;3605:32;3602:2;;;3655:6;3647;3640:22;3602:2;3692:9;3686:16;3711:32;3737:5;3711:32;:::i;3778:482::-;;3900:2;3888:9;3879:7;3875:23;3871:32;3868:2;;;3921:6;3913;3906:22;3868:2;3966:9;3953:23;3999:18;3991:6;3988:30;3985:2;;;4036:6;4028;4021:22;3985:2;4064:22;;4117:4;4109:13;;4105:27;-1:-1:-1;4095:2:1;;4151:6;4143;4136:22;4095:2;4179:75;4246:7;4241:2;4228:16;4223:2;4219;4215:11;4179:75;:::i;4265:190::-;;4377:2;4365:9;4356:7;4352:23;4348:32;4345:2;;;4398:6;4390;4383:22;4345:2;-1:-1:-1;4426:23:1;;4335:120;-1:-1:-1;4335:120:1:o;4460:259::-;;4541:5;4535:12;4568:6;4563:3;4556:19;4584:63;4640:6;4633:4;4628:3;4624:14;4617:4;4610:5;4606:16;4584:63;:::i;:::-;4701:2;4680:15;-1:-1:-1;;4676:29:1;4667:39;;;;4708:4;4663:50;;4511:208;-1:-1:-1;;4511:208:1:o;4724:187::-;;4806:5;4800:12;4821:52;4866:6;4861:3;4854:4;4847:5;4843:16;4821:52;:::i;:::-;4889:16;;;;;4776:135;-1:-1:-1;;4776:135:1:o;4916:1258::-;5198:13;;4916:1258;;;;5271:1;5256:17;;5292:1;5328:18;;;;5355:2;;5409:4;5401:6;5397:17;5387:27;;5355:2;5435;5483;5475:6;5472:14;5452:18;5449:38;5446:2;;;-1:-1:-1;;;5510:33:1;;5566:4;5563:1;5556:15;5596:4;5517:3;5584:17;5446:2;5627:18;5654:104;;;;5772:1;5767:324;;;;5620:471;;5654:104;-1:-1:-1;;5687:24:1;;5675:37;;5732:16;;;;-1:-1:-1;5654:104:1;;5767:324;5803:39;5835:6;5803:39;:::i;:::-;5864:3;5880:165;5894:6;5891:1;5888:13;5880:165;;;5972:14;;5959:11;;;5952:35;6015:16;;;;5909:10;;5880:165;;;5884:3;;6074:6;6069:3;6065:16;6058:23;;5620:471;;;;;;;6107:61;6135:32;6163:3;6155:6;6135:32;:::i;:::-;6127:6;6107:61;:::i;:::-;6100:68;5148:1026;-1:-1:-1;;;;;;5148:1026:1:o;6179:205::-;6379:3;6370:14::o;6389:203::-;-1:-1:-1;;;;;6553:32:1;;;;6535:51;;6523:2;6508:18;;6490:102::o;6597:490::-;-1:-1:-1;;;;;6866:15:1;;;6848:34;;6918:15;;6913:2;6898:18;;6891:43;6965:2;6950:18;;6943:34;;;7013:3;7008:2;6993:18;;6986:31;;;6597:490;;7034:47;;7061:19;;7053:6;7034:47;:::i;7092:187::-;7257:14;;7250:22;7232:41;;7220:2;7205:18;;7187:92::o;7284:221::-;;7433:2;7422:9;7415:21;7453:46;7495:2;7484:9;7480:18;7472:6;7453:46;:::i;7510:398::-;7712:2;7694:21;;;7751:2;7731:18;;;7724:30;7790:34;7785:2;7770:18;;7763:62;-1:-1:-1;;;7856:2:1;7841:18;;7834:32;7898:3;7883:19;;7684:224::o;7913:329::-;8115:2;8097:21;;;8154:1;8134:18;;;8127:29;-1:-1:-1;;;8187:2:1;8172:18;;8165:36;8233:2;8218:18;;8087:155::o;8247:402::-;8449:2;8431:21;;;8488:2;8468:18;;;8461:30;8527:34;8522:2;8507:18;;8500:62;-1:-1:-1;;;8593:2:1;8578:18;;8571:36;8639:3;8624:19;;8421:228::o;8654:406::-;8856:2;8838:21;;;8895:2;8875:18;;;8868:30;8934:34;8929:2;8914:18;;8907:62;-1:-1:-1;;;9000:2:1;8985:18;;8978:40;9050:3;9035:19;;8828:232::o;9065:334::-;9267:2;9249:21;;;9306:2;9286:18;;;9279:30;-1:-1:-1;;;9340:2:1;9325:18;;9318:40;9390:2;9375:18;;9239:160::o;9404:346::-;9606:2;9588:21;;;9645:2;9625:18;;;9618:30;-1:-1:-1;;;9679:2:1;9664:18;;9657:52;9741:2;9726:18;;9578:172::o;9755:399::-;9957:2;9939:21;;;9996:2;9976:18;;;9969:30;10035:34;10030:2;10015:18;;10008:62;-1:-1:-1;;;10101:2:1;10086:18;;10079:33;10144:3;10129:19;;9929:225::o;10159:401::-;10361:2;10343:21;;;10400:2;10380:18;;;10373:30;10439:34;10434:2;10419:18;;10412:62;-1:-1:-1;;;10505:2:1;10490:18;;10483:35;10550:3;10535:19;;10333:227::o;10565:346::-;10767:2;10749:21;;;10806:2;10786:18;;;10779:30;-1:-1:-1;;;10840:2:1;10825:18;;10818:52;10902:2;10887:18;;10739:172::o;10916:421::-;11118:2;11100:21;;;11157:2;11137:18;;;11130:30;11196:34;11191:2;11176:18;;11169:62;11267:27;11262:2;11247:18;;11240:55;11327:3;11312:19;;11090:247::o;11342:342::-;11544:2;11526:21;;;11583:2;11563:18;;;11556:30;-1:-1:-1;;;11617:2:1;11602:18;;11595:48;11675:2;11660:18;;11516:168::o;11689:407::-;11891:2;11873:21;;;11930:2;11910:18;;;11903:30;11969:34;11964:2;11949:18;;11942:62;-1:-1:-1;;;12035:2:1;12020:18;;12013:41;12086:3;12071:19;;11863:233::o;12101:345::-;12303:2;12285:21;;;12342:2;12322:18;;;12315:30;-1:-1:-1;;;12376:2:1;12361:18;;12354:51;12437:2;12422:18;;12275:171::o;12451:402::-;12653:2;12635:21;;;12692:2;12672:18;;;12665:30;12731:34;12726:2;12711:18;;12704:62;-1:-1:-1;;;12797:2:1;12782:18;;12775:36;12843:3;12828:19;;12625:228::o;12858:356::-;13060:2;13042:21;;;13079:18;;;13072:30;13138:34;13133:2;13118:18;;13111:62;13205:2;13190:18;;13032:182::o;13219:350::-;13421:2;13403:21;;;13460:2;13440:18;;;13433:30;13499:28;13494:2;13479:18;;13472:56;13560:2;13545:18;;13393:176::o;13574:414::-;13776:2;13758:21;;;13815:2;13795:18;;;13788:30;13854:34;13849:2;13834:18;;13827:62;-1:-1:-1;;;13920:2:1;13905:18;;13898:48;13978:3;13963:19;;13748:240::o;13993:346::-;14195:2;14177:21;;;14234:2;14214:18;;;14207:30;-1:-1:-1;;;14268:2:1;14253:18;;14246:52;14330:2;14315:18;;14167:172::o;14344:398::-;14546:2;14528:21;;;14585:2;14565:18;;;14558:30;14624:34;14619:2;14604:18;;14597:62;-1:-1:-1;;;14690:2:1;14675:18;;14668:32;14732:3;14717:19;;14518:224::o;14747:399::-;14949:2;14931:21;;;14988:2;14968:18;;;14961:30;15027:34;15022:2;15007:18;;15000:62;-1:-1:-1;;;15093:2:1;15078:18;;15071:33;15136:3;15121:19;;14921:225::o;15151:415::-;15353:2;15335:21;;;15392:2;15372:18;;;15365:30;15431:34;15426:2;15411:18;;15404:62;-1:-1:-1;;;15497:2:1;15482:18;;15475:49;15556:3;15541:19;;15325:241::o;15571:353::-;15773:2;15755:21;;;15812:2;15792:18;;;15785:30;15851:31;15846:2;15831:18;;15824:59;15915:2;15900:18;;15745:179::o;15929:397::-;16131:2;16113:21;;;16170:2;16150:18;;;16143:30;16209:34;16204:2;16189:18;;16182:62;-1:-1:-1;;;16275:2:1;16260:18;;16253:31;16316:3;16301:19;;16103:223::o;16331:338::-;16533:2;16515:21;;;16572:2;16552:18;;;16545:30;-1:-1:-1;;;16606:2:1;16591:18;;16584:44;16660:2;16645:18;;16505:164::o;16674:410::-;16876:2;16858:21;;;16915:2;16895:18;;;16888:30;16954:34;16949:2;16934:18;;16927:62;-1:-1:-1;;;17020:2:1;17005:18;;16998:44;17074:3;17059:19;;16848:236::o;17505:409::-;17707:2;17689:21;;;17746:2;17726:18;;;17719:30;17785:34;17780:2;17765:18;;17758:62;-1:-1:-1;;;17851:2:1;17836:18;;17829:43;17904:3;17889:19;;17679:235::o;17919:336::-;18121:2;18103:21;;;18160:2;18140:18;;;18133:30;-1:-1:-1;;;18194:2:1;18179:18;;18172:42;18246:2;18231:18;;18093:162::o;18260:177::-;18406:25;;;18394:2;18379:18;;18361:76::o;18442:129::-;;18510:17;;;18560:4;18544:21;;;18500:71::o;18576:253::-;;-1:-1:-1;;;;;18705:2:1;18702:1;18698:10;18735:2;18732:1;18728:10;18766:3;18762:2;18758:12;18753:3;18750:21;18747:2;;;18774:18;;:::i;:::-;18810:13;;18624:205;-1:-1:-1;;;;18624:205:1:o;18834:128::-;;18905:1;18901:6;18898:1;18895:13;18892:2;;;18911:18;;:::i;:::-;-1:-1:-1;18947:9:1;;18882:80::o;18967:120::-;;19033:1;19023:2;;19038:18;;:::i;:::-;-1:-1:-1;19072:9:1;;19013:74::o;19092:168::-;;19198:1;19194;19190:6;19186:14;19183:1;19180:21;19175:1;19168:9;19161:17;19157:45;19154:2;;;19205:18;;:::i;:::-;-1:-1:-1;19245:9:1;;19144:116::o;19265:125::-;;19333:1;19330;19327:8;19324:2;;;19338:18;;:::i;:::-;-1:-1:-1;19375:9:1;;19314:76::o;19395:258::-;19467:1;19477:113;19491:6;19488:1;19485:13;19477:113;;;19567:11;;;19561:18;19548:11;;;19541:39;19513:2;19506:10;19477:113;;;19608:6;19605:1;19602:13;19599:2;;;-1:-1:-1;;19643:1:1;19625:16;;19618:27;19448:205::o;19658:136::-;;19725:5;19715:2;;19734:18;;:::i;:::-;-1:-1:-1;;;19770:18:1;;19705:89::o;19799:380::-;19884:1;19874:12;;19931:1;19921:12;;;19942:2;;19996:4;19988:6;19984:17;19974:27;;19942:2;20049;20041:6;20038:14;20018:18;20015:38;20012:2;;;20095:10;20090:3;20086:20;20083:1;20076:31;20130:4;20127:1;20120:15;20158:4;20155:1;20148:15;20012:2;;19854:325;;;:::o;20184:135::-;;-1:-1:-1;;20244:17:1;;20241:2;;;20264:18;;:::i;:::-;-1:-1:-1;20311:1:1;20300:13;;20231:88::o;20324:112::-;;20382:1;20372:2;;20387:18;;:::i;:::-;-1:-1:-1;20421:9:1;;20362:74::o;20441:127::-;20502:10;20497:3;20493:20;20490:1;20483:31;20533:4;20530:1;20523:15;20557:4;20554:1;20547:15;20573:127;20634:10;20629:3;20625:20;20622:1;20615:31;20665:4;20662:1;20655:15;20689:4;20686:1;20679:15;20705:127;20766:10;20761:3;20757:20;20754:1;20747:31;20797:4;20794:1;20787:15;20821:4;20818:1;20811:15;20837:133;-1:-1:-1;;;;;;20913:32:1;;20903:43;;20893:2;;20960:1;20957;20950:12
Swarm Source
ipfs://a6a30d186d978f8f82c7097e1bd27d45484126bd635111d56163c19e664e7bf8
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.