Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
5,554 NMS
Holders
2,140
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 NMSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MembershipToken
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-14 */ //SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.6; /** * @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); } /** * @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; } } /** * @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; } /** * @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); } /** * @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); } /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; string internal _tokenURI; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /// @notice It all points to base reality being a higher order of consciousness, take a deep dive into the work of Jacobo Grinberg. function _baseURI() internal view returns (string memory) { return _tokenURI; } /** * @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 uri = _baseURI(); return uri; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: 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 virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract MembershipToken is ERC721Enumerable, Ownable() { address public dev1; address public dev2; address public dev3; uint256 price; uint256 maxSupply; constructor(string memory _uri,address _dev1Add, address _dev2Add, address _dev3Add, uint256 _price,uint256 _max, address to, uint256 _count) ERC721("MembershipToken","NMS") { dev1 = _dev1Add; dev2 = _dev2Add; dev3 = _dev3Add; price = _price; _tokenURI = _uri; maxSupply = _max; for(uint256 i=0; i<_count; i++){ _safeMint(to, totalSupply()); } } function buyToken(address _address, uint256 _count) public payable { require(totalSupply() + _count <= maxSupply,"ERROR: Max Limit"); require(msg.value >= calculatePrice(_count),"ERROR: price too low"); require(_count <= 5, "ERROR: Exceeds 5"); require(totalSupply() <= maxSupply,"ERROR: sale ended"); for(uint256 i=0; i<_count; i++){ _safeMint(_address,totalSupply()); } payable(dev1).transfer(msg.value*80/100); payable(dev2).transfer(msg.value*15/100); payable(dev3).transfer(msg.value*5/100); } function calculatePrice(uint256 _count) public view returns(uint256){ return _count*price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_dev1Add","type":"address"},{"internalType":"address","name":"_dev2Add","type":"address"},{"internalType":"address","name":"_dev3Add","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev3","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004f0d38038062004f0d833981810160405281019062000037919062000e66565b6040518060400160405280600f81526020017f4d656d62657273686970546f6b656e00000000000000000000000000000000008152506040518060400160405280600381526020017f4e4d5300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000cc1565b508060019080519060200190620000d492919062000cc1565b5050506000620000e9620002c460201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35086600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600f8190555087600290805190602001906200026a92919062000cc1565b508260108190555060005b81811015620002b5576200029f8362000293620002cc60201b60201c565b620002d960201b60201c565b8080620002ac9062001359565b91505062000275565b505050505050505050620015f5565b600033905090565b6000600980549050905090565b620002fb828260405180602001604052806000815250620002ff60201b60201c565b5050565b6200031183836200036d60201b60201c565b6200032660008484846200055360201b60201c565b62000368576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035f90620010a1565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d79062001107565b60405180910390fd5b620003f1816200070d60201b60201c565b1562000434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042b90620010c3565b60405180910390fd5b62000448600083836200077960201b60201c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200049a9190620011b5565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005818473ffffffffffffffffffffffffffffffffffffffff16620008c060201b620015a41760201c565b1562000700578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005b3620002c460201b60201c565b8786866040518563ffffffff1660e01b8152600401620005d794939291906200104d565b602060405180830381600087803b158015620005f257600080fd5b505af19250505080156200062657506040513d601f19601f8201168201806040525081019062000623919062000e34565b60015b620006af573d806000811462000659576040519150601f19603f3d011682016040523d82523d6000602084013e6200065e565b606091505b50600081511415620006a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069e90620010a1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000705565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000791838383620008d360201b620015b71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007de57620007d881620008d860201b60201c565b62000826565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000825576200082483826200092160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000873576200086d8162000a9e60201b60201c565b620008bb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008ba57620008b9828262000b7a60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200093b8462000c0660201b62000dd81760201c565b62000947919062001212565b905060006008600084815260200190815260200160002054905081811462000a2d576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905062000ab4919062001212565b90506000600a600084815260200190815260200160002054905060006009838154811062000ae75762000ae662001434565b5b90600052602060002001549050806009838154811062000b0c5762000b0b62001434565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548062000b5e5762000b5d62001405565b5b6001900381819060005260206000200160009055905550505050565b600062000b928362000c0660201b62000dd81760201c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7190620010e5565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000ccf90620012ed565b90600052602060002090601f01602090048101928262000cf3576000855562000d3f565b82601f1062000d0e57805160ff191683800117855562000d3f565b8280016001018555821562000d3f579182015b8281111562000d3e57825182559160200191906001019062000d21565b5b50905062000d4e919062000d52565b5090565b5b8082111562000d6d57600081600090555060010162000d53565b5090565b600062000d8862000d828462001152565b62001129565b90508281526020810184848401111562000da75762000da662001497565b5b62000db4848285620012b7565b509392505050565b60008151905062000dcd81620015a7565b92915050565b60008151905062000de481620015c1565b92915050565b600082601f83011262000e025762000e0162001492565b5b815162000e1484826020860162000d71565b91505092915050565b60008151905062000e2e81620015db565b92915050565b60006020828403121562000e4d5762000e4c620014a1565b5b600062000e5d8482850162000dd3565b91505092915050565b600080600080600080600080610100898b03121562000e8a5762000e89620014a1565b5b600089015167ffffffffffffffff81111562000eab5762000eaa6200149c565b5b62000eb98b828c0162000dea565b985050602062000ecc8b828c0162000dbc565b975050604062000edf8b828c0162000dbc565b965050606062000ef28b828c0162000dbc565b955050608062000f058b828c0162000e1d565b94505060a062000f188b828c0162000e1d565b93505060c062000f2b8b828c0162000dbc565b92505060e062000f3e8b828c0162000e1d565b9150509295985092959890939650565b62000f59816200124d565b82525050565b600062000f6c8262001188565b62000f78818562001193565b935062000f8a818560208601620012b7565b62000f9581620014a6565b840191505092915050565b600062000faf603283620011a4565b915062000fbc82620014b7565b604082019050919050565b600062000fd6601c83620011a4565b915062000fe38262001506565b602082019050919050565b600062000ffd602a83620011a4565b91506200100a826200152f565b604082019050919050565b600062001024602083620011a4565b915062001031826200157e565b602082019050919050565b6200104781620012ad565b82525050565b600060808201905062001064600083018762000f4e565b62001073602083018662000f4e565b6200108260408301856200103c565b818103606083015262001096818462000f5f565b905095945050505050565b60006020820190508181036000830152620010bc8162000fa0565b9050919050565b60006020820190508181036000830152620010de8162000fc7565b9050919050565b60006020820190508181036000830152620011008162000fee565b9050919050565b60006020820190508181036000830152620011228162001015565b9050919050565b60006200113562001148565b905062001143828262001323565b919050565b6000604051905090565b600067ffffffffffffffff82111562001170576200116f62001463565b5b6200117b82620014a6565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620011c282620012ad565b9150620011cf83620012ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012075762001206620013a7565b5b828201905092915050565b60006200121f82620012ad565b91506200122c83620012ad565b925082821015620012425762001241620013a7565b5b828203905092915050565b60006200125a826200128d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620012d7578082015181840152602081019050620012ba565b83811115620012e7576000848401525b50505050565b600060028204905060018216806200130657607f821691505b602082108114156200131d576200131c620013d6565b5b50919050565b6200132e82620014a6565b810181811067ffffffffffffffff8211171562001350576200134f62001463565b5b80604052505050565b60006200136682620012ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200139c576200139b620013a7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620015b2816200124d565b8114620015be57600080fd5b50565b620015cc8162001261565b8114620015d857600080fd5b50565b620015e681620012ad565b8114620015f257600080fd5b50565b61390880620016056000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063a327c45d1161006f578063a327c45d14610497578063ae104265146104c2578063b88d4fde146104ff578063c87b56dd14610528578063e985e9c514610565578063f2fde38b146105a25761014b565b806370a0823114610399578063715018a6146103d65780638013f3a7146103ed5780638da5cb5b1461041857806395d89b4114610443578063a22cb4651461046e5761014b565b806323b872dd1161010857806323b872dd146102745780632f745c591461029d57806342842e0e146102da5780634f6ccce7146103035780636352211e1461034057806368f8fc101461037d5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e5780632362ce8914610249575b600080fd5b34801561015c57600080fd5b50610177600480360381019061017291906126f1565b6105cb565b6040516101849190612b80565b60405180910390f35b34801561019957600080fd5b506101a2610645565b6040516101af9190612b9b565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da919061274b565b6106d7565b6040516101ec9190612b19565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906126b1565b61075c565b005b34801561022a57600080fd5b50610233610874565b6040516102409190612e7d565b60405180910390f35b34801561025557600080fd5b5061025e610881565b60405161026b9190612b19565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061259b565b6108a7565b005b3480156102a957600080fd5b506102c460048036038101906102bf91906126b1565b610907565b6040516102d19190612e7d565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061259b565b6109ac565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061274b565b6109cc565b6040516103379190612e7d565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061274b565b610a3d565b6040516103749190612b19565b60405180910390f35b610397600480360381019061039291906126b1565b610aef565b005b3480156103a557600080fd5b506103c060048036038101906103bb919061252e565b610dd8565b6040516103cd9190612e7d565b60405180910390f35b3480156103e257600080fd5b506103eb610e90565b005b3480156103f957600080fd5b50610402610fe8565b60405161040f9190612b19565b60405180910390f35b34801561042457600080fd5b5061042d61100e565b60405161043a9190612b19565b60405180910390f35b34801561044f57600080fd5b50610458611038565b6040516104659190612b9b565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612671565b6110ca565b005b3480156104a357600080fd5b506104ac61124b565b6040516104b99190612b19565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061274b565b611271565b6040516104f69190612e7d565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906125ee565b611288565b005b34801561053457600080fd5b5061054f600480360381019061054a919061274b565b6112ea565b60405161055c9190612b9b565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061255b565b611349565b6040516105999190612b80565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061252e565b6113dd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063e575061063d826115bc565b5b9050919050565b606060008054610654906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610680906130f1565b80156106cd5780601f106106a2576101008083540402835291602001916106cd565b820191906000526020600020905b8154815290600101906020018083116106b057829003601f168201915b5050505050905090565b60006106e28261169e565b610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071890612d7d565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076782610a3d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf90612e1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107f761170a565b73ffffffffffffffffffffffffffffffffffffffff16148061082657506108258161082061170a565b611349565b5b610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90612cdd565b60405180910390fd5b61086f8383611712565b505050565b6000600980549050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108b86108b261170a565b826117cb565b6108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90612e3d565b60405180910390fd5b6109028383836118a9565b505050565b600061091283610dd8565b8210610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094a90612bbd565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109c783838360405180602001604052806000815250611288565b505050565b60006109d6610874565b8210610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612e5d565b60405180910390fd5b60098281548110610a2b57610a2a613259565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90612d1d565b60405180910390fd5b80915050919050565b60105481610afb610874565b610b059190612f26565b1115610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90612d3d565b60405180910390fd5b610b4f81611271565b341015610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612c7d565b60405180910390fd5b6005811115610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612dfd565b60405180910390fd5b601054610be0610874565b1115610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890612cbd565b60405180910390fd5b60005b81811015610c5057610c3d83610c38610874565b611b05565b8080610c4890613154565b915050610c24565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064605034610c9c9190612fad565b610ca69190612f7c565b9081150290604051600060405180830381858888f19350505050158015610cd1573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600f34610d1d9190612fad565b610d279190612f7c565b9081150290604051600060405180830381858888f19350505050158015610d52573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600534610d9e9190612fad565b610da89190612f7c565b9081150290604051600060405180830381858888f19350505050158015610dd3573d6000803e3d6000fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090612cfd565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9861170a565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611047906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611073906130f1565b80156110c05780601f10611095576101008083540402835291602001916110c0565b820191906000526020600020905b8154815290600101906020018083116110a357829003601f168201915b5050505050905090565b6110d261170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790612c5d565b60405180910390fd5b806006600061114d61170a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111fa61170a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161123f9190612b80565b60405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54826112819190612fad565b9050919050565b61129961129361170a565b836117cb565b6112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90612e3d565b60405180910390fd5b6112e484848484611b23565b50505050565b60606112f58261169e565b611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612ddd565b60405180910390fd5b600061133e611b7f565b905080915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113e561170a565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90612d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90612bfd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061168757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611697575061169682611c11565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661178583610a3d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117d68261169e565b611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612c9d565b60405180910390fd5b600061182083610a3d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061188f57508373ffffffffffffffffffffffffffffffffffffffff16611877846106d7565b73ffffffffffffffffffffffffffffffffffffffff16145b806118a0575061189f8185611349565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118c982610a3d565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690612c3d565b60405180910390fd5b61199a838383611c7b565b6119a5600082611712565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119f59190613007565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a4c9190612f26565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b1f828260405180602001604052806000815250611d8f565b5050565b611b2e8484846118a9565b611b3a84848484611dea565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bdd565b60405180910390fd5b50505050565b606060028054611b8e906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba906130f1565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c868383836115b7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cc957611cc481611f81565b611d08565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d0757611d068382611fca565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d4b57611d4681612137565b611d8a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d8957611d888282612208565b5b5b505050565b611d998383612287565b611da66000848484611dea565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90612bdd565b60405180910390fd5b505050565b6000611e0b8473ffffffffffffffffffffffffffffffffffffffff166115a4565b15611f74578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3461170a565b8786866040518563ffffffff1660e01b8152600401611e569493929190612b34565b602060405180830381600087803b158015611e7057600080fd5b505af1925050508015611ea157506040513d601f19601f82011682018060405250810190611e9e919061271e565b60015b611f24573d8060008114611ed1576040519150601f19603f3d011682016040523d82523d6000602084013e611ed6565b606091505b50600081511415611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390612bdd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f79565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611fd784610dd8565b611fe19190613007565b90506000600860008481526020019081526020016000205490508181146120c6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061214b9190613007565b90506000600a600084815260200190815260200160002054905060006009838154811061217b5761217a613259565b5b90600052602060002001549050806009838154811061219d5761219c613259565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806121ec576121eb61322a565b5b6001900381819060005260206000200160009055905550505050565b600061221383610dd8565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90612d5d565b60405180910390fd5b6123008161169e565b15612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790612c1d565b60405180910390fd5b61234c60008383611c7b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239c9190612f26565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061246861246384612ebd565b612e98565b905082815260208101848484011115612484576124836132bc565b5b61248f8482856130af565b509392505050565b6000813590506124a681613876565b92915050565b6000813590506124bb8161388d565b92915050565b6000813590506124d0816138a4565b92915050565b6000815190506124e5816138a4565b92915050565b600082601f830112612500576124ff6132b7565b5b8135612510848260208601612455565b91505092915050565b600081359050612528816138bb565b92915050565b600060208284031215612544576125436132c6565b5b600061255284828501612497565b91505092915050565b60008060408385031215612572576125716132c6565b5b600061258085828601612497565b925050602061259185828601612497565b9150509250929050565b6000806000606084860312156125b4576125b36132c6565b5b60006125c286828701612497565b93505060206125d386828701612497565b92505060406125e486828701612519565b9150509250925092565b60008060008060808587031215612608576126076132c6565b5b600061261687828801612497565b945050602061262787828801612497565b935050604061263887828801612519565b925050606085013567ffffffffffffffff811115612659576126586132c1565b5b612665878288016124eb565b91505092959194509250565b60008060408385031215612688576126876132c6565b5b600061269685828601612497565b92505060206126a7858286016124ac565b9150509250929050565b600080604083850312156126c8576126c76132c6565b5b60006126d685828601612497565b92505060206126e785828601612519565b9150509250929050565b600060208284031215612707576127066132c6565b5b6000612715848285016124c1565b91505092915050565b600060208284031215612734576127336132c6565b5b6000612742848285016124d6565b91505092915050565b600060208284031215612761576127606132c6565b5b600061276f84828501612519565b91505092915050565b6127818161303b565b82525050565b6127908161304d565b82525050565b60006127a182612eee565b6127ab8185612f04565b93506127bb8185602086016130be565b6127c4816132cb565b840191505092915050565b60006127da82612ef9565b6127e48185612f15565b93506127f48185602086016130be565b6127fd816132cb565b840191505092915050565b6000612815602b83612f15565b9150612820826132dc565b604082019050919050565b6000612838603283612f15565b91506128438261332b565b604082019050919050565b600061285b602683612f15565b91506128668261337a565b604082019050919050565b600061287e601c83612f15565b9150612889826133c9565b602082019050919050565b60006128a1602483612f15565b91506128ac826133f2565b604082019050919050565b60006128c4601983612f15565b91506128cf82613441565b602082019050919050565b60006128e7601483612f15565b91506128f28261346a565b602082019050919050565b600061290a602c83612f15565b915061291582613493565b604082019050919050565b600061292d601183612f15565b9150612938826134e2565b602082019050919050565b6000612950603883612f15565b915061295b8261350b565b604082019050919050565b6000612973602a83612f15565b915061297e8261355a565b604082019050919050565b6000612996602983612f15565b91506129a1826135a9565b604082019050919050565b60006129b9601083612f15565b91506129c4826135f8565b602082019050919050565b60006129dc602083612f15565b91506129e782613621565b602082019050919050565b60006129ff602c83612f15565b9150612a0a8261364a565b604082019050919050565b6000612a22602083612f15565b9150612a2d82613699565b602082019050919050565b6000612a45602983612f15565b9150612a50826136c2565b604082019050919050565b6000612a68602f83612f15565b9150612a7382613711565b604082019050919050565b6000612a8b601083612f15565b9150612a9682613760565b602082019050919050565b6000612aae602183612f15565b9150612ab982613789565b604082019050919050565b6000612ad1603183612f15565b9150612adc826137d8565b604082019050919050565b6000612af4602c83612f15565b9150612aff82613827565b604082019050919050565b612b13816130a5565b82525050565b6000602082019050612b2e6000830184612778565b92915050565b6000608082019050612b496000830187612778565b612b566020830186612778565b612b636040830185612b0a565b8181036060830152612b758184612796565b905095945050505050565b6000602082019050612b956000830184612787565b92915050565b60006020820190508181036000830152612bb581846127cf565b905092915050565b60006020820190508181036000830152612bd681612808565b9050919050565b60006020820190508181036000830152612bf68161282b565b9050919050565b60006020820190508181036000830152612c168161284e565b9050919050565b60006020820190508181036000830152612c3681612871565b9050919050565b60006020820190508181036000830152612c5681612894565b9050919050565b60006020820190508181036000830152612c76816128b7565b9050919050565b60006020820190508181036000830152612c96816128da565b9050919050565b60006020820190508181036000830152612cb6816128fd565b9050919050565b60006020820190508181036000830152612cd681612920565b9050919050565b60006020820190508181036000830152612cf681612943565b9050919050565b60006020820190508181036000830152612d1681612966565b9050919050565b60006020820190508181036000830152612d3681612989565b9050919050565b60006020820190508181036000830152612d56816129ac565b9050919050565b60006020820190508181036000830152612d76816129cf565b9050919050565b60006020820190508181036000830152612d96816129f2565b9050919050565b60006020820190508181036000830152612db681612a15565b9050919050565b60006020820190508181036000830152612dd681612a38565b9050919050565b60006020820190508181036000830152612df681612a5b565b9050919050565b60006020820190508181036000830152612e1681612a7e565b9050919050565b60006020820190508181036000830152612e3681612aa1565b9050919050565b60006020820190508181036000830152612e5681612ac4565b9050919050565b60006020820190508181036000830152612e7681612ae7565b9050919050565b6000602082019050612e926000830184612b0a565b92915050565b6000612ea2612eb3565b9050612eae8282613123565b919050565b6000604051905090565b600067ffffffffffffffff821115612ed857612ed7613288565b5b612ee1826132cb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f31826130a5565b9150612f3c836130a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f7157612f7061319d565b5b828201905092915050565b6000612f87826130a5565b9150612f92836130a5565b925082612fa257612fa16131cc565b5b828204905092915050565b6000612fb8826130a5565b9150612fc3836130a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ffc57612ffb61319d565b5b828202905092915050565b6000613012826130a5565b915061301d836130a5565b9250828210156130305761302f61319d565b5b828203905092915050565b600061304682613085565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156130dc5780820151818401526020810190506130c1565b838111156130eb576000848401525b50505050565b6000600282049050600182168061310957607f821691505b6020821081141561311d5761311c6131fb565b5b50919050565b61312c826132cb565b810181811067ffffffffffffffff8211171561314b5761314a613288565b5b80604052505050565b600061315f826130a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131925761319161319d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552524f523a20707269636520746f6f206c6f77000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a2073616c6520656e646564000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552524f523a204d6178204c696d697400000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552524f523a2045786365656473203500000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61387f8161303b565b811461388a57600080fd5b50565b6138968161304d565b81146138a157600080fd5b50565b6138ad81613059565b81146138b857600080fd5b50565b6138c4816130a5565b81146138cf57600080fd5b5056fea26469706673582212208b083ccd2bf1e57f6b56805c5fe9bceae2f01218a818e6af63270858dc65f57e64736f6c634300080600330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac20000000000000000000000007cf196415cdd1ef08ca2358a8282d33ba089b9f300000000000000000000000058f32c2ed82556aa3aa17ff1b31e833be77afdfe000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000015b2000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac20000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d6659676b78376f59735938747852585861615a6e474e41484177734750486f344564546e6b7552796f5066350000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014b5760003560e01c806370a08231116100b6578063a327c45d1161006f578063a327c45d14610497578063ae104265146104c2578063b88d4fde146104ff578063c87b56dd14610528578063e985e9c514610565578063f2fde38b146105a25761014b565b806370a0823114610399578063715018a6146103d65780638013f3a7146103ed5780638da5cb5b1461041857806395d89b4114610443578063a22cb4651461046e5761014b565b806323b872dd1161010857806323b872dd146102745780632f745c591461029d57806342842e0e146102da5780634f6ccce7146103035780636352211e1461034057806368f8fc101461037d5761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e5780632362ce8914610249575b600080fd5b34801561015c57600080fd5b50610177600480360381019061017291906126f1565b6105cb565b6040516101849190612b80565b60405180910390f35b34801561019957600080fd5b506101a2610645565b6040516101af9190612b9b565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da919061274b565b6106d7565b6040516101ec9190612b19565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906126b1565b61075c565b005b34801561022a57600080fd5b50610233610874565b6040516102409190612e7d565b60405180910390f35b34801561025557600080fd5b5061025e610881565b60405161026b9190612b19565b60405180910390f35b34801561028057600080fd5b5061029b6004803603810190610296919061259b565b6108a7565b005b3480156102a957600080fd5b506102c460048036038101906102bf91906126b1565b610907565b6040516102d19190612e7d565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061259b565b6109ac565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061274b565b6109cc565b6040516103379190612e7d565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061274b565b610a3d565b6040516103749190612b19565b60405180910390f35b610397600480360381019061039291906126b1565b610aef565b005b3480156103a557600080fd5b506103c060048036038101906103bb919061252e565b610dd8565b6040516103cd9190612e7d565b60405180910390f35b3480156103e257600080fd5b506103eb610e90565b005b3480156103f957600080fd5b50610402610fe8565b60405161040f9190612b19565b60405180910390f35b34801561042457600080fd5b5061042d61100e565b60405161043a9190612b19565b60405180910390f35b34801561044f57600080fd5b50610458611038565b6040516104659190612b9b565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612671565b6110ca565b005b3480156104a357600080fd5b506104ac61124b565b6040516104b99190612b19565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e4919061274b565b611271565b6040516104f69190612e7d565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906125ee565b611288565b005b34801561053457600080fd5b5061054f600480360381019061054a919061274b565b6112ea565b60405161055c9190612b9b565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061255b565b611349565b6040516105999190612b80565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061252e565b6113dd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063e575061063d826115bc565b5b9050919050565b606060008054610654906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610680906130f1565b80156106cd5780601f106106a2576101008083540402835291602001916106cd565b820191906000526020600020905b8154815290600101906020018083116106b057829003601f168201915b5050505050905090565b60006106e28261169e565b610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071890612d7d565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076782610a3d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf90612e1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107f761170a565b73ffffffffffffffffffffffffffffffffffffffff16148061082657506108258161082061170a565b611349565b5b610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90612cdd565b60405180910390fd5b61086f8383611712565b505050565b6000600980549050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108b86108b261170a565b826117cb565b6108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee90612e3d565b60405180910390fd5b6109028383836118a9565b505050565b600061091283610dd8565b8210610953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094a90612bbd565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109c783838360405180602001604052806000815250611288565b505050565b60006109d6610874565b8210610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612e5d565b60405180910390fd5b60098281548110610a2b57610a2a613259565b5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90612d1d565b60405180910390fd5b80915050919050565b60105481610afb610874565b610b059190612f26565b1115610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90612d3d565b60405180910390fd5b610b4f81611271565b341015610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612c7d565b60405180910390fd5b6005811115610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612dfd565b60405180910390fd5b601054610be0610874565b1115610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890612cbd565b60405180910390fd5b60005b81811015610c5057610c3d83610c38610874565b611b05565b8080610c4890613154565b915050610c24565b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064605034610c9c9190612fad565b610ca69190612f7c565b9081150290604051600060405180830381858888f19350505050158015610cd1573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600f34610d1d9190612fad565b610d279190612f7c565b9081150290604051600060405180830381858888f19350505050158015610d52573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600534610d9e9190612fad565b610da89190612f7c565b9081150290604051600060405180830381858888f19350505050158015610dd3573d6000803e3d6000fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090612cfd565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9861170a565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611047906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611073906130f1565b80156110c05780601f10611095576101008083540402835291602001916110c0565b820191906000526020600020905b8154815290600101906020018083116110a357829003601f168201915b5050505050905090565b6110d261170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790612c5d565b60405180910390fd5b806006600061114d61170a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111fa61170a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161123f9190612b80565b60405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54826112819190612fad565b9050919050565b61129961129361170a565b836117cb565b6112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90612e3d565b60405180910390fd5b6112e484848484611b23565b50505050565b60606112f58261169e565b611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612ddd565b60405180910390fd5b600061133e611b7f565b905080915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113e561170a565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146b90612d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90612bfd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061168757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611697575061169682611c11565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661178583610a3d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117d68261169e565b611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612c9d565b60405180910390fd5b600061182083610a3d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061188f57508373ffffffffffffffffffffffffffffffffffffffff16611877846106d7565b73ffffffffffffffffffffffffffffffffffffffff16145b806118a0575061189f8185611349565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118c982610a3d565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690612dbd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690612c3d565b60405180910390fd5b61199a838383611c7b565b6119a5600082611712565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119f59190613007565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a4c9190612f26565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b1f828260405180602001604052806000815250611d8f565b5050565b611b2e8484846118a9565b611b3a84848484611dea565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bdd565b60405180910390fd5b50505050565b606060028054611b8e906130f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba906130f1565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c868383836115b7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cc957611cc481611f81565b611d08565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d0757611d068382611fca565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d4b57611d4681612137565b611d8a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d8957611d888282612208565b5b5b505050565b611d998383612287565b611da66000848484611dea565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90612bdd565b60405180910390fd5b505050565b6000611e0b8473ffffffffffffffffffffffffffffffffffffffff166115a4565b15611f74578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3461170a565b8786866040518563ffffffff1660e01b8152600401611e569493929190612b34565b602060405180830381600087803b158015611e7057600080fd5b505af1925050508015611ea157506040513d601f19601f82011682018060405250810190611e9e919061271e565b60015b611f24573d8060008114611ed1576040519150601f19603f3d011682016040523d82523d6000602084013e611ed6565b606091505b50600081511415611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390612bdd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f79565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611fd784610dd8565b611fe19190613007565b90506000600860008481526020019081526020016000205490508181146120c6576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905061214b9190613007565b90506000600a600084815260200190815260200160002054905060006009838154811061217b5761217a613259565b5b90600052602060002001549050806009838154811061219d5761219c613259565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a60008581526020019081526020016000206000905560098054806121ec576121eb61322a565b5b6001900381819060005260206000200160009055905550505050565b600061221383610dd8565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90612d5d565b60405180910390fd5b6123008161169e565b15612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790612c1d565b60405180910390fd5b61234c60008383611c7b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239c9190612f26565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061246861246384612ebd565b612e98565b905082815260208101848484011115612484576124836132bc565b5b61248f8482856130af565b509392505050565b6000813590506124a681613876565b92915050565b6000813590506124bb8161388d565b92915050565b6000813590506124d0816138a4565b92915050565b6000815190506124e5816138a4565b92915050565b600082601f830112612500576124ff6132b7565b5b8135612510848260208601612455565b91505092915050565b600081359050612528816138bb565b92915050565b600060208284031215612544576125436132c6565b5b600061255284828501612497565b91505092915050565b60008060408385031215612572576125716132c6565b5b600061258085828601612497565b925050602061259185828601612497565b9150509250929050565b6000806000606084860312156125b4576125b36132c6565b5b60006125c286828701612497565b93505060206125d386828701612497565b92505060406125e486828701612519565b9150509250925092565b60008060008060808587031215612608576126076132c6565b5b600061261687828801612497565b945050602061262787828801612497565b935050604061263887828801612519565b925050606085013567ffffffffffffffff811115612659576126586132c1565b5b612665878288016124eb565b91505092959194509250565b60008060408385031215612688576126876132c6565b5b600061269685828601612497565b92505060206126a7858286016124ac565b9150509250929050565b600080604083850312156126c8576126c76132c6565b5b60006126d685828601612497565b92505060206126e785828601612519565b9150509250929050565b600060208284031215612707576127066132c6565b5b6000612715848285016124c1565b91505092915050565b600060208284031215612734576127336132c6565b5b6000612742848285016124d6565b91505092915050565b600060208284031215612761576127606132c6565b5b600061276f84828501612519565b91505092915050565b6127818161303b565b82525050565b6127908161304d565b82525050565b60006127a182612eee565b6127ab8185612f04565b93506127bb8185602086016130be565b6127c4816132cb565b840191505092915050565b60006127da82612ef9565b6127e48185612f15565b93506127f48185602086016130be565b6127fd816132cb565b840191505092915050565b6000612815602b83612f15565b9150612820826132dc565b604082019050919050565b6000612838603283612f15565b91506128438261332b565b604082019050919050565b600061285b602683612f15565b91506128668261337a565b604082019050919050565b600061287e601c83612f15565b9150612889826133c9565b602082019050919050565b60006128a1602483612f15565b91506128ac826133f2565b604082019050919050565b60006128c4601983612f15565b91506128cf82613441565b602082019050919050565b60006128e7601483612f15565b91506128f28261346a565b602082019050919050565b600061290a602c83612f15565b915061291582613493565b604082019050919050565b600061292d601183612f15565b9150612938826134e2565b602082019050919050565b6000612950603883612f15565b915061295b8261350b565b604082019050919050565b6000612973602a83612f15565b915061297e8261355a565b604082019050919050565b6000612996602983612f15565b91506129a1826135a9565b604082019050919050565b60006129b9601083612f15565b91506129c4826135f8565b602082019050919050565b60006129dc602083612f15565b91506129e782613621565b602082019050919050565b60006129ff602c83612f15565b9150612a0a8261364a565b604082019050919050565b6000612a22602083612f15565b9150612a2d82613699565b602082019050919050565b6000612a45602983612f15565b9150612a50826136c2565b604082019050919050565b6000612a68602f83612f15565b9150612a7382613711565b604082019050919050565b6000612a8b601083612f15565b9150612a9682613760565b602082019050919050565b6000612aae602183612f15565b9150612ab982613789565b604082019050919050565b6000612ad1603183612f15565b9150612adc826137d8565b604082019050919050565b6000612af4602c83612f15565b9150612aff82613827565b604082019050919050565b612b13816130a5565b82525050565b6000602082019050612b2e6000830184612778565b92915050565b6000608082019050612b496000830187612778565b612b566020830186612778565b612b636040830185612b0a565b8181036060830152612b758184612796565b905095945050505050565b6000602082019050612b956000830184612787565b92915050565b60006020820190508181036000830152612bb581846127cf565b905092915050565b60006020820190508181036000830152612bd681612808565b9050919050565b60006020820190508181036000830152612bf68161282b565b9050919050565b60006020820190508181036000830152612c168161284e565b9050919050565b60006020820190508181036000830152612c3681612871565b9050919050565b60006020820190508181036000830152612c5681612894565b9050919050565b60006020820190508181036000830152612c76816128b7565b9050919050565b60006020820190508181036000830152612c96816128da565b9050919050565b60006020820190508181036000830152612cb6816128fd565b9050919050565b60006020820190508181036000830152612cd681612920565b9050919050565b60006020820190508181036000830152612cf681612943565b9050919050565b60006020820190508181036000830152612d1681612966565b9050919050565b60006020820190508181036000830152612d3681612989565b9050919050565b60006020820190508181036000830152612d56816129ac565b9050919050565b60006020820190508181036000830152612d76816129cf565b9050919050565b60006020820190508181036000830152612d96816129f2565b9050919050565b60006020820190508181036000830152612db681612a15565b9050919050565b60006020820190508181036000830152612dd681612a38565b9050919050565b60006020820190508181036000830152612df681612a5b565b9050919050565b60006020820190508181036000830152612e1681612a7e565b9050919050565b60006020820190508181036000830152612e3681612aa1565b9050919050565b60006020820190508181036000830152612e5681612ac4565b9050919050565b60006020820190508181036000830152612e7681612ae7565b9050919050565b6000602082019050612e926000830184612b0a565b92915050565b6000612ea2612eb3565b9050612eae8282613123565b919050565b6000604051905090565b600067ffffffffffffffff821115612ed857612ed7613288565b5b612ee1826132cb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f31826130a5565b9150612f3c836130a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f7157612f7061319d565b5b828201905092915050565b6000612f87826130a5565b9150612f92836130a5565b925082612fa257612fa16131cc565b5b828204905092915050565b6000612fb8826130a5565b9150612fc3836130a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ffc57612ffb61319d565b5b828202905092915050565b6000613012826130a5565b915061301d836130a5565b9250828210156130305761302f61319d565b5b828203905092915050565b600061304682613085565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156130dc5780820151818401526020810190506130c1565b838111156130eb576000848401525b50505050565b6000600282049050600182168061310957607f821691505b6020821081141561311d5761311c6131fb565b5b50919050565b61312c826132cb565b810181811067ffffffffffffffff8211171561314b5761314a613288565b5b80604052505050565b600061315f826130a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131925761319161319d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552524f523a20707269636520746f6f206c6f77000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a2073616c6520656e646564000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552524f523a204d6178204c696d697400000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552524f523a2045786365656473203500000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61387f8161303b565b811461388a57600080fd5b50565b6138968161304d565b81146138a157600080fd5b50565b6138ad81613059565b81146138b857600080fd5b50565b6138c4816130a5565b81146138cf57600080fd5b5056fea26469706673582212208b083ccd2bf1e57f6b56805c5fe9bceae2f01218a818e6af63270858dc65f57e64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac20000000000000000000000007cf196415cdd1ef08ca2358a8282d33ba089b9f300000000000000000000000058f32c2ed82556aa3aa17ff1b31e833be77afdfe000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000015b2000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac20000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d6659676b78376f59735938747852585861615a6e474e41484177734750486f344564546e6b7552796f5066350000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _uri (string): https://ipfs.io/ipfs/QmfYgkx7oYsY8txRXXaaZnGNAHAwsGPHo4EdTnkuRyoPf5
Arg [1] : _dev1Add (address): 0xdC463F26272D2FE8758D8072BA498B16A30AaaC2
Arg [2] : _dev2Add (address): 0x7cF196415CDD1eF08ca2358a8282D33Ba089B9f3
Arg [3] : _dev3Add (address): 0x58F32C2ed82556aa3aA17fF1B31E833BE77AfDfe
Arg [4] : _price (uint256): 100000000000000000
Arg [5] : _max (uint256): 5554
Arg [6] : to (address): 0xdC463F26272D2FE8758D8072BA498B16A30AaaC2
Arg [7] : _count (uint256): 23
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac2
Arg [2] : 0000000000000000000000007cf196415cdd1ef08ca2358a8282d33ba089b9f3
Arg [3] : 00000000000000000000000058f32c2ed82556aa3aa17ff1b31e833be77afdfe
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [5] : 00000000000000000000000000000000000000000000000000000000000015b2
Arg [6] : 000000000000000000000000dc463f26272d2fe8758d8072ba498b16a30aaac2
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [9] : 68747470733a2f2f697066732e696f2f697066732f516d6659676b78376f5973
Arg [10] : 5938747852585861615a6e474e41484177734750486f344564546e6b7552796f
Arg [11] : 5066350000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41066:1398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34912:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20747:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21652:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35552:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41193:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23005:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35220:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23381:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35742:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20441:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41736:607;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20171:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32664:148;;;;;;;;;;;;;:::i;:::-;;41166:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32022:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20916:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22408:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41140:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42355:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23603:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21336:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22774:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32967:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34912:224;35014:4;35053:35;35038:50;;;:11;:50;;;;:90;;;;35092:36;35116:11;35092:23;:36::i;:::-;35038:90;35031:97;;34912:224;;;:::o;20747:100::-;20801:13;20834:5;20827:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20747:100;:::o;22115:221::-;22191:7;22219:16;22227:7;22219;:16::i;:::-;22211:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22304:15;:24;22320:7;22304:24;;;;;;;;;;;;;;;;;;;;;22297:31;;22115:221;;;:::o;21652:397::-;21733:13;21749:23;21764:7;21749:14;:23::i;:::-;21733:39;;21797:5;21791:11;;:2;:11;;;;21783:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21877:5;21861:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21886:37;21903:5;21910:12;:10;:12::i;:::-;21886:16;:37::i;:::-;21861:62;21853:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22020:21;22029:2;22033:7;22020:8;:21::i;:::-;21722:327;21652:397;;:::o;35552:113::-;35613:7;35640:10;:17;;;;35633:24;;35552:113;:::o;41193:19::-;;;;;;;;;;;;;:::o;23005:305::-;23166:41;23185:12;:10;:12::i;:::-;23199:7;23166:18;:41::i;:::-;23158:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23274:28;23284:4;23290:2;23294:7;23274:9;:28::i;:::-;23005:305;;;:::o;35220:256::-;35317:7;35353:23;35370:5;35353:16;:23::i;:::-;35345:5;:31;35337:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35442:12;:19;35455:5;35442:19;;;;;;;;;;;;;;;:26;35462:5;35442:26;;;;;;;;;;;;35435:33;;35220:256;;;;:::o;23381:151::-;23485:39;23502:4;23508:2;23512:7;23485:39;;;;;;;;;;;;:16;:39::i;:::-;23381:151;;;:::o;35742:233::-;35817:7;35853:30;:28;:30::i;:::-;35845:5;:38;35837:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35950:10;35961:5;35950:17;;;;;;;;:::i;:::-;;;;;;;;;;35943:24;;35742:233;;;:::o;20441:239::-;20513:7;20533:13;20549:7;:16;20557:7;20549:16;;;;;;;;;;;;;;;;;;;;;20533:32;;20601:1;20584:19;;:5;:19;;;;20576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20667:5;20660:12;;;20441:239;;;:::o;41736:607::-;41848:9;;41838:6;41822:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;41814:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41909:22;41924:6;41909:14;:22::i;:::-;41896:9;:35;;41888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41984:1;41974:6;:11;;41966:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42042:9;;42025:13;:11;:13::i;:::-;:26;;42017:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42097:9;42093:91;42112:6;42110:1;:8;42093:91;;;42139:33;42149:8;42158:13;:11;:13::i;:::-;42139:9;:33::i;:::-;42120:3;;;;;:::i;:::-;;;;42093:91;;;;42202:4;;;;;;;;;;;42194:22;;:40;42230:3;42227:2;42217:9;:12;;;;:::i;:::-;:16;;;;:::i;:::-;42194:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42253:4;;;;;;;;;;;42245:22;;:40;42281:3;42278:2;42268:9;:12;;;;:::i;:::-;:16;;;;:::i;:::-;42245:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42304:4;;;;;;;;;;;42296:22;;:39;42331:3;42329:1;42319:9;:11;;;;:::i;:::-;:15;;;;:::i;:::-;42296:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41736:607;;:::o;20171:208::-;20243:7;20288:1;20271:19;;:5;:19;;;;20263:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20355:9;:16;20365:5;20355:16;;;;;;;;;;;;;;;;20348:23;;20171:208;;;:::o;32664:148::-;32244:12;:10;:12::i;:::-;32234:22;;:6;;;;;;;;;;;:22;;;32226:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32771:1:::1;32734:40;;32755:6;;;;;;;;;;;32734:40;;;;;;;;;;;;32802:1;32785:6;;:19;;;;;;;;;;;;;;;;;;32664:148::o:0;41166:19::-;;;;;;;;;;;;;:::o;32022:79::-;32060:7;32087:6;;;;;;;;;;;32080:13;;32022:79;:::o;20916:104::-;20972:13;21005:7;20998:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20916:104;:::o;22408:295::-;22523:12;:10;:12::i;:::-;22511:24;;:8;:24;;;;22503:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:8;22578:18;:32;22597:12;:10;:12::i;:::-;22578:32;;;;;;;;;;;;;;;:42;22611:8;22578:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22676:8;22647:48;;22662:12;:10;:12::i;:::-;22647:48;;;22686:8;22647:48;;;;;;:::i;:::-;;;;;;;;22408:295;;:::o;41140:19::-;;;;;;;;;;;;;:::o;42355:106::-;42415:7;42448:5;;42441:6;:12;;;;:::i;:::-;42434:19;;42355:106;;;:::o;23603:285::-;23735:41;23754:12;:10;:12::i;:::-;23768:7;23735:18;:41::i;:::-;23727:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23841:39;23855:4;23861:2;23865:7;23874:5;23841:13;:39::i;:::-;23603:285;;;;:::o;21336:249::-;21410:13;21444:17;21452:8;21444:7;:17::i;:::-;21436:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21526:17;21546:10;:8;:10::i;:::-;21526:30;;21574:3;21567:10;;;21336:249;;;:::o;22774:164::-;22871:4;22895:18;:25;22914:5;22895:25;;;;;;;;;;;;;;;:35;22921:8;22895:35;;;;;;;;;;;;;;;;;;;;;;;;;22888:42;;22774:164;;;;:::o;32967:244::-;32244:12;:10;:12::i;:::-;32234:22;;:6;;;;;;;;;;;:22;;;32226:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33076:1:::1;33056:22;;:8;:22;;;;33048:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33166:8;33137:38;;33158:6;;;;;;;;;;;33137:38;;;;;;;;;;;;33195:8;33186:6;;:17;;;;;;;;;;;;;;;;;;32967:244:::0;:::o;8409:422::-;8469:4;8677:12;8788:7;8776:20;8768:28;;8822:1;8815:4;:8;8808:15;;;8409:422;;;:::o;31427:93::-;;;;:::o;19815:292::-;19917:4;19956:25;19941:40;;;:11;:40;;;;:105;;;;20013:33;19998:48;;;:11;:48;;;;19941:105;:158;;;;20063:36;20087:11;20063:23;:36::i;:::-;19941:158;19934:165;;19815:292;;;:::o;25355:127::-;25420:4;25472:1;25444:30;;:7;:16;25452:7;25444:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25437:37;;25355:127;;;:::o;16209:98::-;16262:7;16289:10;16282:17;;16209:98;:::o;29232:174::-;29334:2;29307:15;:24;29323:7;29307:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29390:7;29386:2;29352:46;;29361:23;29376:7;29361:14;:23::i;:::-;29352:46;;;;;;;;;;;;29232:174;;:::o;25649:348::-;25742:4;25767:16;25775:7;25767;:16::i;:::-;25759:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25843:13;25859:23;25874:7;25859:14;:23::i;:::-;25843:39;;25912:5;25901:16;;:7;:16;;;:51;;;;25945:7;25921:31;;:20;25933:7;25921:11;:20::i;:::-;:31;;;25901:51;:87;;;;25956:32;25973:5;25980:7;25956:16;:32::i;:::-;25901:87;25893:96;;;25649:348;;;;:::o;28570:544::-;28695:4;28668:31;;:23;28683:7;28668:14;:23::i;:::-;:31;;;28660:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28778:1;28764:16;;:2;:16;;;;28756:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28834:39;28855:4;28861:2;28865:7;28834:20;:39::i;:::-;28938:29;28955:1;28959:7;28938:8;:29::i;:::-;28999:1;28980:9;:15;28990:4;28980:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29028:1;29011:9;:13;29021:2;29011:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29059:2;29040:7;:16;29048:7;29040:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29098:7;29094:2;29079:27;;29088:4;29079:27;;;;;;;;;;;;28570:544;;;:::o;26339:110::-;26415:26;26425:2;26429:7;26415:26;;;;;;;;;;;;:9;:26::i;:::-;26339:110;;:::o;24770:272::-;24884:28;24894:4;24900:2;24904:7;24884:9;:28::i;:::-;24931:48;24954:4;24960:2;24964:7;24973:5;24931:22;:48::i;:::-;24923:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24770:272;;;;:::o;21171:94::-;21215:13;21248:9;21241:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21171:94;:::o;1509:157::-;1594:4;1633:25;1618:40;;;:11;:40;;;;1611:47;;1509:157;;;:::o;36588:589::-;36732:45;36759:4;36765:2;36769:7;36732:26;:45::i;:::-;36810:1;36794:18;;:4;:18;;;36790:187;;;36829:40;36861:7;36829:31;:40::i;:::-;36790:187;;;36899:2;36891:10;;:4;:10;;;36887:90;;36918:47;36951:4;36957:7;36918:32;:47::i;:::-;36887:90;36790:187;37005:1;36991:16;;:2;:16;;;36987:183;;;37024:45;37061:7;37024:36;:45::i;:::-;36987:183;;;37097:4;37091:10;;:2;:10;;;37087:83;;37118:40;37146:2;37150:7;37118:27;:40::i;:::-;37087:83;36987:183;36588:589;;;:::o;26676:250::-;26772:18;26778:2;26782:7;26772:5;:18::i;:::-;26809:54;26840:1;26844:2;26848:7;26857:5;26809:22;:54::i;:::-;26801:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26676:250;;;:::o;29971:843::-;30092:4;30118:15;:2;:13;;;:15::i;:::-;30114:693;;;30170:2;30154:36;;;30191:12;:10;:12::i;:::-;30205:4;30211:7;30220:5;30154:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30150:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30417:1;30400:6;:13;:18;30396:341;;;30443:60;;;;;;;;;;:::i;:::-;;;;;;;;30396:341;30687:6;30681:13;30672:6;30668:2;30664:15;30657:38;30150:602;30287:45;;;30277:55;;;:6;:55;;;;30270:62;;;;;30114:693;30791:4;30784:11;;29971:843;;;;;;;:::o;37900:164::-;38004:10;:17;;;;37977:15;:24;37993:7;37977:24;;;;;;;;;;;:44;;;;38032:10;38048:7;38032:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37900:164;:::o;38691:988::-;38957:22;39007:1;38982:22;38999:4;38982:16;:22::i;:::-;:26;;;;:::i;:::-;38957:51;;39019:18;39040:17;:26;39058:7;39040:26;;;;;;;;;;;;39019:47;;39187:14;39173:10;:28;39169:328;;39218:19;39240:12;:18;39253:4;39240:18;;;;;;;;;;;;;;;:34;39259:14;39240:34;;;;;;;;;;;;39218:56;;39324:11;39291:12;:18;39304:4;39291:18;;;;;;;;;;;;;;;:30;39310:10;39291:30;;;;;;;;;;;:44;;;;39441:10;39408:17;:30;39426:11;39408:30;;;;;;;;;;;:43;;;;39203:294;39169:328;39593:17;:26;39611:7;39593:26;;;;;;;;;;;39586:33;;;39637:12;:18;39650:4;39637:18;;;;;;;;;;;;;;;:34;39656:14;39637:34;;;;;;;;;;;39630:41;;;38772:907;;38691:988;;:::o;39974:1079::-;40227:22;40272:1;40252:10;:17;;;;:21;;;;:::i;:::-;40227:46;;40284:18;40305:15;:24;40321:7;40305:24;;;;;;;;;;;;40284:45;;40656:19;40678:10;40689:14;40678:26;;;;;;;;:::i;:::-;;;;;;;;;;40656:48;;40742:11;40717:10;40728;40717:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40853:10;40822:15;:28;40838:11;40822:28;;;;;;;;;;;:41;;;;40994:15;:24;41010:7;40994:24;;;;;;;;;;;40987:31;;;41029:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40045:1008;;;39974:1079;:::o;37478:221::-;37563:14;37580:20;37597:2;37580:16;:20::i;:::-;37563:37;;37638:7;37611:12;:16;37624:2;37611:16;;;;;;;;;;;;;;;:24;37628:6;37611:24;;;;;;;;;;;:34;;;;37685:6;37656:17;:26;37674:7;37656:26;;;;;;;;;;;:35;;;;37552:147;37478:221;;:::o;27262:382::-;27356:1;27342:16;;:2;:16;;;;27334:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27415:16;27423:7;27415;:16::i;:::-;27414:17;27406:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27477:45;27506:1;27510:2;27514:7;27477:20;:45::i;:::-;27552:1;27535:9;:13;27545:2;27535:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27583:2;27564:7;:16;27572:7;27564:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27628:7;27624:2;27603:33;;27620:1;27603:33;;;;;;;;;;;;27262:382;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;475:87;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;617:84;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;758:86;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;912:79;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:2;;1122:79;;:::i;:::-;1081:2;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1406:87;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:2;;;1613:79;;:::i;:::-;1575:2;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1565:263;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:2;;;1965:79;;:::i;:::-;1927:2;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1917:391;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:2;;;2462:79;;:::i;:::-;2424:2;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2414:519;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:2;;;3114:79;;:::i;:::-;3075:2;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:2;;;3698:79;;:::i;:::-;3662:2;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;3065:817;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:2;;;4016:79;;:::i;:::-;3978:2;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3968:388;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:2;;;4493:79;;:::i;:::-;4455:2;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4445:391;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:2;;;4955:79;;:::i;:::-;4917:2;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4907:262;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5299:79;;:::i;:::-;5261:2;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5251:273;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:2;;;5644:79;;:::i;:::-;5606:2;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5596:263;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5930:53;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;6048:50;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;;;;;:::o;6840:366::-;6982:3;7003:67;7067:2;7062:3;7003:67;:::i;:::-;6996:74;;7079:93;7168:3;7079:93;:::i;:::-;7197:2;7192:3;7188:12;7181:19;;6986:220;;;:::o;7212:366::-;7354:3;7375:67;7439:2;7434:3;7375:67;:::i;:::-;7368:74;;7451:93;7540:3;7451:93;:::i;:::-;7569:2;7564:3;7560:12;7553:19;;7358:220;;;:::o;7584:366::-;7726:3;7747:67;7811:2;7806:3;7747:67;:::i;:::-;7740:74;;7823:93;7912:3;7823:93;:::i;:::-;7941:2;7936:3;7932:12;7925:19;;7730:220;;;:::o;7956:366::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;8102:220;;;:::o;8328:366::-;8470:3;8491:67;8555:2;8550:3;8491:67;:::i;:::-;8484:74;;8567:93;8656:3;8567:93;:::i;:::-;8685:2;8680:3;8676:12;8669:19;;8474:220;;;:::o;8700:366::-;8842:3;8863:67;8927:2;8922:3;8863:67;:::i;:::-;8856:74;;8939:93;9028:3;8939:93;:::i;:::-;9057:2;9052:3;9048:12;9041:19;;8846:220;;;:::o;9072:366::-;9214:3;9235:67;9299:2;9294:3;9235:67;:::i;:::-;9228:74;;9311:93;9400:3;9311:93;:::i;:::-;9429:2;9424:3;9420:12;9413:19;;9218:220;;;:::o;9444:366::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9590:220;;;:::o;9816:366::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9962:220;;;:::o;10188:366::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10334:220;;;:::o;10560:366::-;10702:3;10723:67;10787:2;10782:3;10723:67;:::i;:::-;10716:74;;10799:93;10888:3;10799:93;:::i;:::-;10917:2;10912:3;10908:12;10901:19;;10706:220;;;:::o;10932:366::-;11074:3;11095:67;11159:2;11154:3;11095:67;:::i;:::-;11088:74;;11171:93;11260:3;11171:93;:::i;:::-;11289:2;11284:3;11280:12;11273:19;;11078:220;;;:::o;11304:366::-;11446:3;11467:67;11531:2;11526:3;11467:67;:::i;:::-;11460:74;;11543:93;11632:3;11543:93;:::i;:::-;11661:2;11656:3;11652:12;11645:19;;11450:220;;;:::o;11676:366::-;11818:3;11839:67;11903:2;11898:3;11839:67;:::i;:::-;11832:74;;11915:93;12004:3;11915:93;:::i;:::-;12033:2;12028:3;12024:12;12017:19;;11822:220;;;:::o;12048:366::-;12190:3;12211:67;12275:2;12270:3;12211:67;:::i;:::-;12204:74;;12287:93;12376:3;12287:93;:::i;:::-;12405:2;12400:3;12396:12;12389:19;;12194:220;;;:::o;12420:366::-;12562:3;12583:67;12647:2;12642:3;12583:67;:::i;:::-;12576:74;;12659:93;12748:3;12659:93;:::i;:::-;12777:2;12772:3;12768:12;12761:19;;12566:220;;;:::o;12792:366::-;12934:3;12955:67;13019:2;13014:3;12955:67;:::i;:::-;12948:74;;13031:93;13120:3;13031:93;:::i;:::-;13149:2;13144:3;13140:12;13133:19;;12938:220;;;:::o;13164:366::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13310:220;;;:::o;13536:366::-;13678:3;13699:67;13763:2;13758:3;13699:67;:::i;:::-;13692:74;;13775:93;13864:3;13775:93;:::i;:::-;13893:2;13888:3;13884:12;13877:19;;13682:220;;;:::o;13908:366::-;14050:3;14071:67;14135:2;14130:3;14071:67;:::i;:::-;14064:74;;14147:93;14236:3;14147:93;:::i;:::-;14265:2;14260:3;14256:12;14249:19;;14054:220;;;:::o;14280:366::-;14422:3;14443:67;14507:2;14502:3;14443:67;:::i;:::-;14436:74;;14519:93;14608:3;14519:93;:::i;:::-;14637:2;14632:3;14628:12;14621:19;;14426:220;;;:::o;14652:366::-;14794:3;14815:67;14879:2;14874:3;14815:67;:::i;:::-;14808:74;;14891:93;14980:3;14891:93;:::i;:::-;15009:2;15004:3;15000:12;14993:19;;14798:220;;;:::o;15024:118::-;15111:24;15129:5;15111:24;:::i;:::-;15106:3;15099:37;15089:53;;:::o;15148:222::-;15241:4;15279:2;15268:9;15264:18;15256:26;;15292:71;15360:1;15349:9;15345:17;15336:6;15292:71;:::i;:::-;15246:124;;;;:::o;15376:640::-;15571:4;15609:3;15598:9;15594:19;15586:27;;15623:71;15691:1;15680:9;15676:17;15667:6;15623:71;:::i;:::-;15704:72;15772:2;15761:9;15757:18;15748:6;15704:72;:::i;:::-;15786;15854:2;15843:9;15839:18;15830:6;15786:72;:::i;:::-;15905:9;15899:4;15895:20;15890:2;15879:9;15875:18;15868:48;15933:76;16004:4;15995:6;15933:76;:::i;:::-;15925:84;;15576:440;;;;;;;:::o;16022:210::-;16109:4;16147:2;16136:9;16132:18;16124:26;;16160:65;16222:1;16211:9;16207:17;16198:6;16160:65;:::i;:::-;16114:118;;;;:::o;16238:313::-;16351:4;16389:2;16378:9;16374:18;16366:26;;16438:9;16432:4;16428:20;16424:1;16413:9;16409:17;16402:47;16466:78;16539:4;16530:6;16466:78;:::i;:::-;16458:86;;16356:195;;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16728:248;;;:::o;16982:419::-;17148:4;17186:2;17175:9;17171:18;17163:26;;17235:9;17229:4;17225:20;17221:1;17210:9;17206:17;17199:47;17263:131;17389:4;17263:131;:::i;:::-;17255:139;;17153:248;;;:::o;17407:419::-;17573:4;17611:2;17600:9;17596:18;17588:26;;17660:9;17654:4;17650:20;17646:1;17635:9;17631:17;17624:47;17688:131;17814:4;17688:131;:::i;:::-;17680:139;;17578:248;;;:::o;17832:419::-;17998:4;18036:2;18025:9;18021:18;18013:26;;18085:9;18079:4;18075:20;18071:1;18060:9;18056:17;18049:47;18113:131;18239:4;18113:131;:::i;:::-;18105:139;;18003:248;;;:::o;18257:419::-;18423:4;18461:2;18450:9;18446:18;18438:26;;18510:9;18504:4;18500:20;18496:1;18485:9;18481:17;18474:47;18538:131;18664:4;18538:131;:::i;:::-;18530:139;;18428:248;;;:::o;18682:419::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18935:9;18929:4;18925:20;18921:1;18910:9;18906:17;18899:47;18963:131;19089:4;18963:131;:::i;:::-;18955:139;;18853:248;;;:::o;19107:419::-;19273:4;19311:2;19300:9;19296:18;19288:26;;19360:9;19354:4;19350:20;19346:1;19335:9;19331:17;19324:47;19388:131;19514:4;19388:131;:::i;:::-;19380:139;;19278:248;;;:::o;19532:419::-;19698:4;19736:2;19725:9;19721:18;19713:26;;19785:9;19779:4;19775:20;19771:1;19760:9;19756:17;19749:47;19813:131;19939:4;19813:131;:::i;:::-;19805:139;;19703:248;;;:::o;19957:419::-;20123:4;20161:2;20150:9;20146:18;20138:26;;20210:9;20204:4;20200:20;20196:1;20185:9;20181:17;20174:47;20238:131;20364:4;20238:131;:::i;:::-;20230:139;;20128:248;;;:::o;20382:419::-;20548:4;20586:2;20575:9;20571:18;20563:26;;20635:9;20629:4;20625:20;20621:1;20610:9;20606:17;20599:47;20663:131;20789:4;20663:131;:::i;:::-;20655:139;;20553:248;;;:::o;20807:419::-;20973:4;21011:2;21000:9;20996:18;20988:26;;21060:9;21054:4;21050:20;21046:1;21035:9;21031:17;21024:47;21088:131;21214:4;21088:131;:::i;:::-;21080:139;;20978:248;;;:::o;21232:419::-;21398:4;21436:2;21425:9;21421:18;21413:26;;21485:9;21479:4;21475:20;21471:1;21460:9;21456:17;21449:47;21513:131;21639:4;21513:131;:::i;:::-;21505:139;;21403:248;;;:::o;21657:419::-;21823:4;21861:2;21850:9;21846:18;21838:26;;21910:9;21904:4;21900:20;21896:1;21885:9;21881:17;21874:47;21938:131;22064:4;21938:131;:::i;:::-;21930:139;;21828:248;;;:::o;22082:419::-;22248:4;22286:2;22275:9;22271:18;22263:26;;22335:9;22329:4;22325:20;22321:1;22310:9;22306:17;22299:47;22363:131;22489:4;22363:131;:::i;:::-;22355:139;;22253:248;;;:::o;22507:419::-;22673:4;22711:2;22700:9;22696:18;22688:26;;22760:9;22754:4;22750:20;22746:1;22735:9;22731:17;22724:47;22788:131;22914:4;22788:131;:::i;:::-;22780:139;;22678:248;;;:::o;22932:419::-;23098:4;23136:2;23125:9;23121:18;23113:26;;23185:9;23179:4;23175:20;23171:1;23160:9;23156:17;23149:47;23213:131;23339:4;23213:131;:::i;:::-;23205:139;;23103:248;;;:::o;23357:419::-;23523:4;23561:2;23550:9;23546:18;23538:26;;23610:9;23604:4;23600:20;23596:1;23585:9;23581:17;23574:47;23638:131;23764:4;23638:131;:::i;:::-;23630:139;;23528:248;;;:::o;23782:419::-;23948:4;23986:2;23975:9;23971:18;23963:26;;24035:9;24029:4;24025:20;24021:1;24010:9;24006:17;23999:47;24063:131;24189:4;24063:131;:::i;:::-;24055:139;;23953:248;;;:::o;24207:419::-;24373:4;24411:2;24400:9;24396:18;24388:26;;24460:9;24454:4;24450:20;24446:1;24435:9;24431:17;24424:47;24488:131;24614:4;24488:131;:::i;:::-;24480:139;;24378:248;;;:::o;24632:419::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24885:9;24879:4;24875:20;24871:1;24860:9;24856:17;24849:47;24913:131;25039:4;24913:131;:::i;:::-;24905:139;;24803:248;;;:::o;25057:419::-;25223:4;25261:2;25250:9;25246:18;25238:26;;25310:9;25304:4;25300:20;25296:1;25285:9;25281:17;25274:47;25338:131;25464:4;25338:131;:::i;:::-;25330:139;;25228:248;;;:::o;25482:419::-;25648:4;25686:2;25675:9;25671:18;25663:26;;25735:9;25729:4;25725:20;25721:1;25710:9;25706:17;25699:47;25763:131;25889:4;25763:131;:::i;:::-;25755:139;;25653:248;;;:::o;25907:222::-;26000:4;26038:2;26027:9;26023:18;26015:26;;26051:71;26119:1;26108:9;26104:17;26095:6;26051:71;:::i;:::-;26005:124;;;;:::o;26135:129::-;26169:6;26196:20;;:::i;:::-;26186:30;;26225:33;26253:4;26245:6;26225:33;:::i;:::-;26176:88;;;:::o;26270:75::-;26303:6;26336:2;26330:9;26320:19;;26310:35;:::o;26351:307::-;26412:4;26502:18;26494:6;26491:30;26488:2;;;26524:18;;:::i;:::-;26488:2;26562:29;26584:6;26562:29;:::i;:::-;26554:37;;26646:4;26640;26636:15;26628:23;;26417:241;;;:::o;26664:98::-;26715:6;26749:5;26743:12;26733:22;;26722:40;;;:::o;26768:99::-;26820:6;26854:5;26848:12;26838:22;;26827:40;;;:::o;26873:168::-;26956:11;26990:6;26985:3;26978:19;27030:4;27025:3;27021:14;27006:29;;26968:73;;;;:::o;27047:169::-;27131:11;27165:6;27160:3;27153:19;27205:4;27200:3;27196:14;27181:29;;27143:73;;;;:::o;27222:305::-;27262:3;27281:20;27299:1;27281:20;:::i;:::-;27276:25;;27315:20;27333:1;27315:20;:::i;:::-;27310:25;;27469:1;27401:66;27397:74;27394:1;27391:81;27388:2;;;27475:18;;:::i;:::-;27388:2;27519:1;27516;27512:9;27505:16;;27266:261;;;;:::o;27533:185::-;27573:1;27590:20;27608:1;27590:20;:::i;:::-;27585:25;;27624:20;27642:1;27624:20;:::i;:::-;27619:25;;27663:1;27653:2;;27668:18;;:::i;:::-;27653:2;27710:1;27707;27703:9;27698:14;;27575:143;;;;:::o;27724:348::-;27764:7;27787:20;27805:1;27787:20;:::i;:::-;27782:25;;27821:20;27839:1;27821:20;:::i;:::-;27816:25;;28009:1;27941:66;27937:74;27934:1;27931:81;27926:1;27919:9;27912:17;27908:105;27905:2;;;28016:18;;:::i;:::-;27905:2;28064:1;28061;28057:9;28046:20;;27772:300;;;;:::o;28078:191::-;28118:4;28138:20;28156:1;28138:20;:::i;:::-;28133:25;;28172:20;28190:1;28172:20;:::i;:::-;28167:25;;28211:1;28208;28205:8;28202:2;;;28216:18;;:::i;:::-;28202:2;28261:1;28258;28254:9;28246:17;;28123:146;;;;:::o;28275:96::-;28312:7;28341:24;28359:5;28341:24;:::i;:::-;28330:35;;28320:51;;;:::o;28377:90::-;28411:7;28454:5;28447:13;28440:21;28429:32;;28419:48;;;:::o;28473:149::-;28509:7;28549:66;28542:5;28538:78;28527:89;;28517:105;;;:::o;28628:126::-;28665:7;28705:42;28698:5;28694:54;28683:65;;28673:81;;;:::o;28760:77::-;28797:7;28826:5;28815:16;;28805:32;;;:::o;28843:154::-;28927:6;28922:3;28917;28904:30;28989:1;28980:6;28975:3;28971:16;28964:27;28894:103;;;:::o;29003:307::-;29071:1;29081:113;29095:6;29092:1;29089:13;29081:113;;;29180:1;29175:3;29171:11;29165:18;29161:1;29156:3;29152:11;29145:39;29117:2;29114:1;29110:10;29105:15;;29081:113;;;29212:6;29209:1;29206:13;29203:2;;;29292:1;29283:6;29278:3;29274:16;29267:27;29203:2;29052:258;;;;:::o;29316:320::-;29360:6;29397:1;29391:4;29387:12;29377:22;;29444:1;29438:4;29434:12;29465:18;29455:2;;29521:4;29513:6;29509:17;29499:27;;29455:2;29583;29575:6;29572:14;29552:18;29549:38;29546:2;;;29602:18;;:::i;:::-;29546:2;29367:269;;;;:::o;29642:281::-;29725:27;29747:4;29725:27;:::i;:::-;29717:6;29713:40;29855:6;29843:10;29840:22;29819:18;29807:10;29804:34;29801:62;29798:2;;;29866:18;;:::i;:::-;29798:2;29906:10;29902:2;29895:22;29685:238;;;:::o;29929:233::-;29968:3;29991:24;30009:5;29991:24;:::i;:::-;29982:33;;30037:66;30030:5;30027:77;30024:2;;;30107:18;;:::i;:::-;30024:2;30154:1;30147:5;30143:13;30136:20;;29972:190;;;:::o;30168:180::-;30216:77;30213:1;30206:88;30313:4;30310:1;30303:15;30337:4;30334:1;30327:15;30354:180;30402:77;30399:1;30392:88;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30540:180;30588:77;30585:1;30578:88;30685:4;30682:1;30675:15;30709:4;30706:1;30699:15;30726:180;30774:77;30771:1;30764:88;30871:4;30868:1;30861:15;30895:4;30892:1;30885:15;30912:180;30960:77;30957:1;30950:88;31057:4;31054:1;31047:15;31081:4;31078:1;31071:15;31098:180;31146:77;31143:1;31136:88;31243:4;31240:1;31233:15;31267:4;31264:1;31257:15;31284:117;31393:1;31390;31383:12;31407:117;31516:1;31513;31506:12;31530:117;31639:1;31636;31629:12;31653:117;31762:1;31759;31752:12;31776:102;31817:6;31868:2;31864:7;31859:2;31852:5;31848:14;31844:28;31834:38;;31824:54;;;:::o;31884:230::-;32024:34;32020:1;32012:6;32008:14;32001:58;32093:13;32088:2;32080:6;32076:15;32069:38;31990:124;:::o;32120:237::-;32260:34;32256:1;32248:6;32244:14;32237:58;32329:20;32324:2;32316:6;32312:15;32305:45;32226:131;:::o;32363:225::-;32503:34;32499:1;32491:6;32487:14;32480:58;32572:8;32567:2;32559:6;32555:15;32548:33;32469:119;:::o;32594:178::-;32734:30;32730:1;32722:6;32718:14;32711:54;32700:72;:::o;32778:223::-;32918:34;32914:1;32906:6;32902:14;32895:58;32987:6;32982:2;32974:6;32970:15;32963:31;32884:117;:::o;33007:175::-;33147:27;33143:1;33135:6;33131:14;33124:51;33113:69;:::o;33188:170::-;33328:22;33324:1;33316:6;33312:14;33305:46;33294:64;:::o;33364:231::-;33504:34;33500:1;33492:6;33488:14;33481:58;33573:14;33568:2;33560:6;33556:15;33549:39;33470:125;:::o;33601:167::-;33741:19;33737:1;33729:6;33725:14;33718:43;33707:61;:::o;33774:243::-;33914:34;33910:1;33902:6;33898:14;33891:58;33983:26;33978:2;33970:6;33966:15;33959:51;33880:137;:::o;34023:229::-;34163:34;34159:1;34151:6;34147:14;34140:58;34232:12;34227:2;34219:6;34215:15;34208:37;34129:123;:::o;34258:228::-;34398:34;34394:1;34386:6;34382:14;34375:58;34467:11;34462:2;34454:6;34450:15;34443:36;34364:122;:::o;34492:166::-;34632:18;34628:1;34620:6;34616:14;34609:42;34598:60;:::o;34664:182::-;34804:34;34800:1;34792:6;34788:14;34781:58;34770:76;:::o;34852:231::-;34992:34;34988:1;34980:6;34976:14;34969:58;35061:14;35056:2;35048:6;35044:15;35037:39;34958:125;:::o;35089:182::-;35229:34;35225:1;35217:6;35213:14;35206:58;35195:76;:::o;35277:228::-;35417:34;35413:1;35405:6;35401:14;35394:58;35486:11;35481:2;35473:6;35469:15;35462:36;35383:122;:::o;35511:234::-;35651:34;35647:1;35639:6;35635:14;35628:58;35720:17;35715:2;35707:6;35703:15;35696:42;35617:128;:::o;35751:166::-;35891:18;35887:1;35879:6;35875:14;35868:42;35857:60;:::o;35923:220::-;36063:34;36059:1;36051:6;36047:14;36040:58;36132:3;36127:2;36119:6;36115:15;36108:28;36029:114;:::o;36149:236::-;36289:34;36285:1;36277:6;36273:14;36266:58;36358:19;36353:2;36345:6;36341:15;36334:44;36255:130;:::o;36391:231::-;36531:34;36527:1;36519:6;36515:14;36508:58;36600:14;36595:2;36587:6;36583:15;36576:39;36497:125;:::o;36628:122::-;36701:24;36719:5;36701:24;:::i;:::-;36694:5;36691:35;36681:2;;36740:1;36737;36730:12;36681:2;36671:79;:::o;36756:116::-;36826:21;36841:5;36826:21;:::i;:::-;36819:5;36816:32;36806:2;;36862:1;36859;36852:12;36806:2;36796:76;:::o;36878:120::-;36950:23;36967:5;36950:23;:::i;:::-;36943:5;36940:34;36930:2;;36988:1;36985;36978:12;36930:2;36920:78;:::o;37004:122::-;37077:24;37095:5;37077:24;:::i;:::-;37070:5;37067:35;37057:2;;37116:1;37113;37106:12;37057:2;37047:79;:::o
Swarm Source
ipfs://8b083ccd2bf1e57f6b56805c5fe9bceae2f01218a818e6af63270858dc65f57e
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.