Overview
TokenID
179
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FlashMintsJamilGS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-04 */ /** *Submitted for verification at Etherscan.io on 2021-11-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @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(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract FlashMintsJamilGS is ERC721, Ownable { bool public saleActive = false; bool public presaleActive = false; string internal baseTokenURI = "https://flashmints.mypinata.cloud/ipfs/QmPTmy1VevZ4C1y6hA6mYjUXX1WiikSDYFnEz2mfYfevyF/"; uint256 public price = 0.1 ether; uint256 public presaleTotalSupply = 500; uint256 public totalSupply = 2021; uint256 public nonce = 0; uint256 public maxTx = 10; address public m1 = 0x7D58e81CeCf7F1B0071580CAB07d53EDE7858B17; address public m2 = 0x4f95219f13dC43641645B5ebE5259b040e38b281; address public m3 = 0x70184259C8CbF0B85C96e2A84ad74EB097759aeE; address public m4 = 0xdeF4274dA60CEF85402731F0013E5C67fC3D5c2e; address public m5 = 0x2027e0fE56278f671D174CbE4BCd7A42D25cc6a3; address public m6 = 0x57ccEFe8fDD9F2B17B9dD148061ae9a5f3a7e767; address public m7 = 0x80f039085f78fFF512a1edE6d25eC64927392888; address public a1 = 0x1E815a8188F1b84564577C1c998f7E6B4706B752; address public a2 = 0x607502216Cfe3bFe8407Ee5Ef62e9A4cFEfcb66C; address public a3 = 0x11b99B09B02cB833f1A12EeFbcEB5930B82172B5; mapping (address => uint256) public presaleWallets; constructor() ERC721("Flash Mints (Jamil GS - Genesis Collection)", "FLASHMINTS-JAMILGS") {} function _baseURI() internal override view returns (string memory) { return baseTokenURI; } function setPrice(uint256 newPrice) external onlyOwner { price = newPrice; } function setBaseTokenURI(string calldata uri) external onlyOwner { baseTokenURI = uri; } function setTotalSupply(uint256 newSupply) external onlyOwner { totalSupply = newSupply; } function setPresaleTotalSupply(uint256 newSupply) external onlyOwner { presaleTotalSupply = newSupply; } function setPresaleActive(bool val) public onlyOwner { presaleActive = val; } function setSaleActive(bool val) public onlyOwner { saleActive = val; } function setMembersAddresses(address[] memory _a) public onlyOwner { m1 = _a[0]; m2 = _a[1]; m3 = _a[2]; m4 = _a[3]; m5 = _a[4]; m6 = _a[5]; m7 = _a[6]; a1 = _a[7]; a2 = _a[8]; a3 = _a[9]; } function setMaxTx(uint256 newMax) external onlyOwner { maxTx = newMax; } function setPresaleWallets(address[] memory _a, uint256 qty) external onlyOwner { for(uint256 i; i < _a.length; i++) { presaleWallets[_a[i]] = qty; } } function giveaway(address to, uint256 qty) external onlyOwner { if (nonce > 0) { require(qty + nonce <= totalSupply, "Value exceeds totalSupply"); } for (uint256 i = 0; i < qty; i++) { nonce++; uint256 tokenId = nonce; _safeMint(to, tokenId); } } function mint(uint256 qty) external payable { require(presaleActive || saleActive, "Neither sale is active"); if (presaleActive) { require(presaleWallets[msg.sender] > 0, "Out of presale mints"); require(presaleWallets[msg.sender] - qty >= 0, "Exceeds presale limit"); require(nonce + qty <= presaleTotalSupply, "Exceeds presale supply"); } require(qty <= maxTx && qty > 0, "Qty of mints not allowed"); if (nonce > 0) { require(qty + nonce <= totalSupply, "Value exceeds totalSupply"); } require(msg.value == price * qty, "Invalid value"); for (uint256 i = 0; i < qty; i++) { nonce++; uint256 tokenId = nonce; _safeMint(msg.sender, tokenId); if (presaleActive) { presaleWallets[msg.sender]--; } } } function withdrawTeam() external onlyOwner { uint256 balance = address(this).balance; uint256 mbTeam = (balance * 4) / 100; require(payable(m1).send((mbTeam * 5) / 100)); require(payable(m2).send((mbTeam * 5) / 100)); require(payable(m3).send((mbTeam * 5) / 100)); require(payable(m4).send((mbTeam * 5) / 100)); require(payable(m5).send((mbTeam * 5) / 100)); require(payable(m6).send((mbTeam * 20) / 100)); require(payable(m7).send((mbTeam * 55) / 100)); require(payable(a1).send((balance * 75) / 1000)); require(payable(a2).send((balance * 10) / 100)); require(payable(a3).send((balance * 785) / 1000)); } function withdrawOwner() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"a1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"a3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","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":"m1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m7","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"setMembersAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setPresaleTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"setPresaleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTeam","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6006805461ffff60a01b19169055610100604052605660808181529062002d6960a039805162000038916007916020909101906200028d565b5067016345785d8a00006008556101f46009556107e5600a9081556000600b55600c55600d80546001600160a01b0319908116737d58e81cecf7f1b0071580cab07d53ede7858b1717909155600e80548216734f95219f13dc43641645b5ebe5259b040e38b281179055600f805482167370184259c8cbf0b85c96e2a84ad74eb097759aee17905560108054821673def4274da60cef85402731f0013e5c67fc3d5c2e179055601180548216732027e0fe56278f671d174cbe4bcd7a42d25cc6a31790556012805482167357ccefe8fdd9f2b17b9dd148061ae9a5f3a7e7671790556013805482167380f039085f78fff512a1ede6d25ec64927392888179055601480548216731e815a8188f1b84564577c1c998f7e6b4706b75217905560158054821673607502216cfe3bfe8407ee5ef62e9a4cfefcb66c179055601680549091167311b99b09b02cb833f1a12eefbceb5930b82172b5179055348015620001a057600080fd5b506040518060600160405280602b815260200162002dbf602b913960405180604001604052806012815260200171464c4153484d494e54532d4a414d494c475360701b8152508160009080519060200190620001fe9291906200028d565b508051620002149060019060208401906200028d565b505050620002316200022b6200023760201b60201c565b6200023b565b62000370565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200029b9062000333565b90600052602060002090601f016020900481019282620002bf57600085556200030a565b82601f10620002da57805160ff19168380011785556200030a565b828001600101855582156200030a579182015b828111156200030a578251825591602001919060010190620002ed565b50620003189291506200031c565b5090565b5b808211156200031857600081556001016200031d565b600181811c908216806200034857607f821691505b602082108114156200036a57634e487b7160e01b600052602260045260246000fd5b50919050565b6129e980620003806000396000f3fe6080604052600436106102885760003560e01c80637437681e1161015a578063a0712d68116100c1578063bc3371821161007a578063bc33718214610799578063c87b56dd146107b9578063e8cc00ad146107d9578063e985e9c5146107ee578063f2fde38b14610837578063f7ea7a3d1461085757600080fd5b8063a0712d68146106fb578063a22cb4651461070e578063a77f92ff1461072e578063affed0e01461074e578063b88d4fde14610764578063bb51f32d1461078457600080fd5b806391b7f5ed1161011357806391b7f5ed146106505780639426eef81461067057806395d89b4114610690578063969e9d0c146106a5578063a0230b4f146106c5578063a035b1fe146106e557600080fd5b80637437681e146105a6578063785db5f4146105bc578063841718a6146105d257806387599f6e146105f25780638da5cb5b1461061257806391aa69ca1461063057600080fd5b8063325c50b4116101fe5780636352211e116101b75780636352211e146104f057806367755adf1461051057806368428a1b146105305780636a0b6ae61461055157806370a0823114610571578063715018a61461059157600080fd5b8063325c50b41461042f5780633f8121a21461044f57806342842e0e1461046f578063439701611461048f57806353135ca0146104af57806361928084146104d057600080fd5b8063119552a111610250578063119552a11461035e57806318160ddd1461037e5780631c5c04b3146103a257806323b872dd146103c257806330176e13146103e257806330b2264e1461040257600080fd5b806301ffc9a71461028d578063050225ea146102c257806306fdde03146102e4578063081812fc14610306578063095ea7b31461033e575b600080fd5b34801561029957600080fd5b506102ad6102a83660046125bd565b610877565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046124fe565b6108c9565b005b3480156102f057600080fd5b506102f96109a3565b6040516102b9919061271a565b34801561031257600080fd5b50610326610321366004612669565b610a35565b6040516001600160a01b0390911681526020016102b9565b34801561034a57600080fd5b506102e26103593660046124fe565b610aca565b34801561036a57600080fd5b50601454610326906001600160a01b031681565b34801561038a57600080fd5b50610394600a5481565b6040519081526020016102b9565b3480156103ae57600080fd5b506102e26103bd366004612669565b610bdb565b3480156103ce57600080fd5b506102e26103dd3660046123d8565b610c0a565b3480156103ee57600080fd5b506102e26103fd3660046125f7565b610c3b565b34801561040e57600080fd5b5061039461041d36600461238a565b60176020526000908152604090205481565b34801561043b57600080fd5b50601254610326906001600160a01b031681565b34801561045b57600080fd5b506102e261046a3660046125a2565b610c71565b34801561047b57600080fd5b506102e261048a3660046123d8565b610cb9565b34801561049b57600080fd5b506102e26104aa366004612528565b610cd4565b3480156104bb57600080fd5b506006546102ad90600160a81b900460ff1681565b3480156104dc57600080fd5b50601054610326906001600160a01b031681565b3480156104fc57600080fd5b5061032661050b366004612669565b610f8b565b34801561051c57600080fd5b50601154610326906001600160a01b031681565b34801561053c57600080fd5b506006546102ad90600160a01b900460ff1681565b34801561055d57600080fd5b506102e261056c36600461255d565b611002565b34801561057d57600080fd5b5061039461058c36600461238a565b61108e565b34801561059d57600080fd5b506102e2611115565b3480156105b257600080fd5b50610394600c5481565b3480156105c857600080fd5b5061039460095481565b3480156105de57600080fd5b506102e26105ed3660046125a2565b61114b565b3480156105fe57600080fd5b50601354610326906001600160a01b031681565b34801561061e57600080fd5b506006546001600160a01b0316610326565b34801561063c57600080fd5b50600e54610326906001600160a01b031681565b34801561065c57600080fd5b506102e261066b366004612669565b611193565b34801561067c57600080fd5b50601654610326906001600160a01b031681565b34801561069c57600080fd5b506102f96111c2565b3480156106b157600080fd5b50601554610326906001600160a01b031681565b3480156106d157600080fd5b50600f54610326906001600160a01b031681565b3480156106f157600080fd5b5061039460085481565b6102e2610709366004612669565b6111d1565b34801561071a57600080fd5b506102e26107293660046124d4565b6114d8565b34801561073a57600080fd5b50600d54610326906001600160a01b031681565b34801561075a57600080fd5b50610394600b5481565b34801561077057600080fd5b506102e261077f366004612414565b61159d565b34801561079057600080fd5b506102e26115d5565b3480156107a557600080fd5b506102e26107b4366004612669565b6118db565b3480156107c557600080fd5b506102f96107d4366004612669565b61190a565b3480156107e557600080fd5b506102e26119e5565b3480156107fa57600080fd5b506102ad6108093660046123a5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084357600080fd5b506102e261085236600461238a565b611a3e565b34801561086357600080fd5b506102e2610872366004612669565b611ad6565b60006001600160e01b031982166380ac58cd60e01b14806108a857506001600160e01b03198216635b5e139f60e01b145b806108c357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108fc5760405162461bcd60e51b81526004016108f39061277f565b60405180910390fd5b600b541561095e57600a54600b546109149083612836565b111561095e5760405162461bcd60e51b815260206004820152601960248201527856616c7565206578636565647320746f74616c537570706c7960381b60448201526064016108f3565b60005b8181101561099e57600b805490600061097983612916565b9091555050600b5461098b8482611b05565b508061099681612916565b915050610961565b505050565b6060600080546109b2906128db565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906128db565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610aae5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f3565b506000908152600460205260409020546001600160a01b031690565b6000610ad582610f8b565b9050806001600160a01b0316836001600160a01b03161415610b435760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108f3565b336001600160a01b0382161480610b5f5750610b5f8133610809565b610bd15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108f3565b61099e8383611b1f565b6006546001600160a01b03163314610c055760405162461bcd60e51b81526004016108f39061277f565b600955565b610c143382611b8d565b610c305760405162461bcd60e51b81526004016108f3906127b4565b61099e838383611c84565b6006546001600160a01b03163314610c655760405162461bcd60e51b81526004016108f39061277f565b61099e60078383612238565b6006546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016108f39061277f565b60068054911515600160a81b0260ff60a81b19909216919091179055565b61099e8383836040518060200160405280600081525061159d565b6006546001600160a01b03163314610cfe5760405162461bcd60e51b81526004016108f39061277f565b80600081518110610d1157610d11612971565b6020026020010151600d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600181518110610d5257610d52612971565b6020026020010151600e60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600281518110610d9357610d93612971565b6020026020010151600f60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600381518110610dd457610dd4612971565b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600481518110610e1557610e15612971565b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600581518110610e5657610e56612971565b6020026020010151601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600681518110610e9757610e97612971565b6020026020010151601360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600781518110610ed857610ed8612971565b6020026020010151601460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600881518110610f1957610f19612971565b6020026020010151601560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600981518110610f5a57610f5a612971565b6020026020010151601660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6000818152600260205260408120546001600160a01b0316806108c35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108f3565b6006546001600160a01b0316331461102c5760405162461bcd60e51b81526004016108f39061277f565b60005b825181101561099e57816017600085848151811061104f5761104f612971565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061108690612916565b91505061102f565b60006001600160a01b0382166110f95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108f3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461113f5760405162461bcd60e51b81526004016108f39061277f565b6111496000611e24565b565b6006546001600160a01b031633146111755760405162461bcd60e51b81526004016108f39061277f565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6006546001600160a01b031633146111bd5760405162461bcd60e51b81526004016108f39061277f565b600855565b6060600180546109b2906128db565b600654600160a81b900460ff16806111f25750600654600160a01b900460ff165b6112375760405162461bcd60e51b81526020600482015260166024820152754e6569746865722073616c652069732061637469766560501b60448201526064016108f3565b600654600160a81b900460ff1615611355573360009081526017602052604090205461129c5760405162461bcd60e51b81526020600482015260146024820152734f7574206f662070726573616c65206d696e747360601b60448201526064016108f3565b336000908152601760205260408120546112b7908390612881565b10156112fd5760405162461bcd60e51b8152602060048201526015602482015274115e18d959591cc81c1c995cd85b19481b1a5b5a5d605a1b60448201526064016108f3565b60095481600b5461130e9190612836565b11156113555760405162461bcd60e51b8152602060048201526016602482015275457863656564732070726573616c6520737570706c7960501b60448201526064016108f3565b600c5481111580156113675750600081115b6113b35760405162461bcd60e51b815260206004820152601860248201527f517479206f66206d696e7473206e6f7420616c6c6f776564000000000000000060448201526064016108f3565b600b541561141557600a54600b546113cb9083612836565b11156114155760405162461bcd60e51b815260206004820152601960248201527856616c7565206578636565647320746f74616c537570706c7960381b60448201526064016108f3565b806008546114239190612862565b34146114615760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b60448201526064016108f3565b60005b818110156114d457600b805490600061147c83612916565b9091555050600b5461148e3382611b05565b600654600160a81b900460ff16156114c1573360009081526017602052604081208054916114bb836128c4565b91905055505b50806114cc81612916565b915050611464565b5050565b6001600160a01b0382163314156115315760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108f3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115a73383611b8d565b6115c35760405162461bcd60e51b81526004016108f3906127b4565b6115cf84848484611e76565b50505050565b6006546001600160a01b031633146115ff5760405162461bcd60e51b81526004016108f39061277f565b476000606461160f836004612862565b611619919061284e565b600d549091506001600160a01b03166108fc6064611638846005612862565b611642919061284e565b6040518115909202916000818181858888f1935050505061166257600080fd5b600e546001600160a01b03166108fc606461167e846005612862565b611688919061284e565b6040518115909202916000818181858888f193505050506116a857600080fd5b600f546001600160a01b03166108fc60646116c4846005612862565b6116ce919061284e565b6040518115909202916000818181858888f193505050506116ee57600080fd5b6010546001600160a01b03166108fc606461170a846005612862565b611714919061284e565b6040518115909202916000818181858888f1935050505061173457600080fd5b6011546001600160a01b03166108fc6064611750846005612862565b61175a919061284e565b6040518115909202916000818181858888f1935050505061177a57600080fd5b6012546001600160a01b03166108fc6064611796846014612862565b6117a0919061284e565b6040518115909202916000818181858888f193505050506117c057600080fd5b6013546001600160a01b03166108fc60646117dc846037612862565b6117e6919061284e565b6040518115909202916000818181858888f1935050505061180657600080fd5b6014546001600160a01b03166108fc6103e861182385604b612862565b61182d919061284e565b6040518115909202916000818181858888f1935050505061184d57600080fd5b6015546001600160a01b03166108fc606461186985600a612862565b611873919061284e565b6040518115909202916000818181858888f1935050505061189357600080fd5b6016546001600160a01b03166108fc6103e86118b185610311612862565b6118bb919061284e565b6040518115909202916000818181858888f193505050506114d457600080fd5b6006546001600160a01b031633146119055760405162461bcd60e51b81526004016108f39061277f565b600c55565b6000818152600260205260409020546060906001600160a01b03166119895760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108f3565b6000611993611ea9565b905060008151116119b357604051806020016040528060008152506119de565b806119bd84611eb8565b6040516020016119ce9291906126ae565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611a0f5760405162461bcd60e51b81526004016108f39061277f565b60405133904780156108fc02916000818181858888f19350505050158015611a3b573d6000803e3d6000fd5b50565b6006546001600160a01b03163314611a685760405162461bcd60e51b81526004016108f39061277f565b6001600160a01b038116611acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f3565b611a3b81611e24565b6006546001600160a01b03163314611b005760405162461bcd60e51b81526004016108f39061277f565b600a55565b6114d4828260405180602001604052806000815250611fb6565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b5482610f8b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f3565b6000611c1183610f8b565b9050806001600160a01b0316846001600160a01b03161480611c4c5750836001600160a01b0316611c4184610a35565b6001600160a01b0316145b80611c7c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c9782610f8b565b6001600160a01b031614611cff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108f3565b6001600160a01b038216611d615760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108f3565b611d6c600082611b1f565b6001600160a01b0383166000908152600360205260408120805460019290611d95908490612881565b90915550506001600160a01b0382166000908152600360205260408120805460019290611dc3908490612836565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e81848484611c84565b611e8d84848484611fe9565b6115cf5760405162461bcd60e51b81526004016108f39061272d565b6060600780546109b2906128db565b606081611edc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f065780611ef081612916565b9150611eff9050600a8361284e565b9150611ee0565b60008167ffffffffffffffff811115611f2157611f21612987565b6040519080825280601f01601f191660200182016040528015611f4b576020820181803683370190505b5090505b8415611c7c57611f60600183612881565b9150611f6d600a86612931565b611f78906030612836565b60f81b818381518110611f8d57611f8d612971565b60200101906001600160f81b031916908160001a905350611faf600a8661284e565b9450611f4f565b611fc083836120f6565b611fcd6000848484611fe9565b61099e5760405162461bcd60e51b81526004016108f39061272d565b60006001600160a01b0384163b156120eb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061202d9033908990889088906004016126dd565b602060405180830381600087803b15801561204757600080fd5b505af1925050508015612077575060408051601f3d908101601f19168201909252612074918101906125da565b60015b6120d1573d8080156120a5576040519150601f19603f3d011682016040523d82523d6000602084013e6120aa565b606091505b5080516120c95760405162461bcd60e51b81526004016108f39061272d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c7c565b506001949350505050565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108f3565b6000818152600260205260409020546001600160a01b0316156121b15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f3565b6001600160a01b03821660009081526003602052604081208054600192906121da908490612836565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612244906128db565b90600052602060002090601f01602090048101928261226657600085556122ac565b82601f1061227f5782800160ff198235161785556122ac565b828001600101855582156122ac579182015b828111156122ac578235825591602001919060010190612291565b506122b89291506122bc565b5090565b5b808211156122b857600081556001016122bd565b80356001600160a01b03811681146122e857600080fd5b919050565b600082601f8301126122fe57600080fd5b8135602067ffffffffffffffff82111561231a5761231a612987565b8160051b612329828201612805565b83815282810190868401838801850189101561234457600080fd5b600093505b8584101561236e5761235a816122d1565b835260019390930192918401918401612349565b50979650505050505050565b803580151581146122e857600080fd5b60006020828403121561239c57600080fd5b6119de826122d1565b600080604083850312156123b857600080fd5b6123c1836122d1565b91506123cf602084016122d1565b90509250929050565b6000806000606084860312156123ed57600080fd5b6123f6846122d1565b9250612404602085016122d1565b9150604084013590509250925092565b6000806000806080858703121561242a57600080fd5b612433856122d1565b935060206124428187016122d1565b935060408601359250606086013567ffffffffffffffff8082111561246657600080fd5b818801915088601f83011261247a57600080fd5b81358181111561248c5761248c612987565b61249e601f8201601f19168501612805565b915080825289848285010111156124b457600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156124e757600080fd5b6124f0836122d1565b91506123cf6020840161237a565b6000806040838503121561251157600080fd5b61251a836122d1565b946020939093013593505050565b60006020828403121561253a57600080fd5b813567ffffffffffffffff81111561255157600080fd5b611c7c848285016122ed565b6000806040838503121561257057600080fd5b823567ffffffffffffffff81111561258757600080fd5b612593858286016122ed565b95602094909401359450505050565b6000602082840312156125b457600080fd5b6119de8261237a565b6000602082840312156125cf57600080fd5b81356119de8161299d565b6000602082840312156125ec57600080fd5b81516119de8161299d565b6000806020838503121561260a57600080fd5b823567ffffffffffffffff8082111561262257600080fd5b818501915085601f83011261263657600080fd5b81358181111561264557600080fd5b86602082850101111561265757600080fd5b60209290920196919550909350505050565b60006020828403121561267b57600080fd5b5035919050565b6000815180845261269a816020860160208601612898565b601f01601f19169290920160200192915050565b600083516126c0818460208801612898565b8351908301906126d4818360208801612898565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061271090830184612682565b9695505050505050565b6020815260006119de6020830184612682565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561282e5761282e612987565b604052919050565b6000821982111561284957612849612945565b500190565b60008261285d5761285d61295b565b500490565b600081600019048311821515161561287c5761287c612945565b500290565b60008282101561289357612893612945565b500390565b60005b838110156128b357818101518382015260200161289b565b838111156115cf5750506000910152565b6000816128d3576128d3612945565b506000190190565b600181811c908216806128ef57607f821691505b6020821081141561291057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561292a5761292a612945565b5060010190565b6000826129405761294061295b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611a3b57600080fdfea2646970667358221220c1acafb605c8a4d1eb36087682f27ba8d251cf372cc605be4ea62f091dfe3ef764736f6c6343000807003368747470733a2f2f666c6173686d696e74732e6d7970696e6174612e636c6f75642f697066732f516d50546d79315665765a34433179366841366d596a555858315769696b534459466e457a326d665966657679462f466c617368204d696e747320284a616d696c204753202d2047656e6573697320436f6c6c656374696f6e29
Deployed Bytecode
0x6080604052600436106102885760003560e01c80637437681e1161015a578063a0712d68116100c1578063bc3371821161007a578063bc33718214610799578063c87b56dd146107b9578063e8cc00ad146107d9578063e985e9c5146107ee578063f2fde38b14610837578063f7ea7a3d1461085757600080fd5b8063a0712d68146106fb578063a22cb4651461070e578063a77f92ff1461072e578063affed0e01461074e578063b88d4fde14610764578063bb51f32d1461078457600080fd5b806391b7f5ed1161011357806391b7f5ed146106505780639426eef81461067057806395d89b4114610690578063969e9d0c146106a5578063a0230b4f146106c5578063a035b1fe146106e557600080fd5b80637437681e146105a6578063785db5f4146105bc578063841718a6146105d257806387599f6e146105f25780638da5cb5b1461061257806391aa69ca1461063057600080fd5b8063325c50b4116101fe5780636352211e116101b75780636352211e146104f057806367755adf1461051057806368428a1b146105305780636a0b6ae61461055157806370a0823114610571578063715018a61461059157600080fd5b8063325c50b41461042f5780633f8121a21461044f57806342842e0e1461046f578063439701611461048f57806353135ca0146104af57806361928084146104d057600080fd5b8063119552a111610250578063119552a11461035e57806318160ddd1461037e5780631c5c04b3146103a257806323b872dd146103c257806330176e13146103e257806330b2264e1461040257600080fd5b806301ffc9a71461028d578063050225ea146102c257806306fdde03146102e4578063081812fc14610306578063095ea7b31461033e575b600080fd5b34801561029957600080fd5b506102ad6102a83660046125bd565b610877565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046124fe565b6108c9565b005b3480156102f057600080fd5b506102f96109a3565b6040516102b9919061271a565b34801561031257600080fd5b50610326610321366004612669565b610a35565b6040516001600160a01b0390911681526020016102b9565b34801561034a57600080fd5b506102e26103593660046124fe565b610aca565b34801561036a57600080fd5b50601454610326906001600160a01b031681565b34801561038a57600080fd5b50610394600a5481565b6040519081526020016102b9565b3480156103ae57600080fd5b506102e26103bd366004612669565b610bdb565b3480156103ce57600080fd5b506102e26103dd3660046123d8565b610c0a565b3480156103ee57600080fd5b506102e26103fd3660046125f7565b610c3b565b34801561040e57600080fd5b5061039461041d36600461238a565b60176020526000908152604090205481565b34801561043b57600080fd5b50601254610326906001600160a01b031681565b34801561045b57600080fd5b506102e261046a3660046125a2565b610c71565b34801561047b57600080fd5b506102e261048a3660046123d8565b610cb9565b34801561049b57600080fd5b506102e26104aa366004612528565b610cd4565b3480156104bb57600080fd5b506006546102ad90600160a81b900460ff1681565b3480156104dc57600080fd5b50601054610326906001600160a01b031681565b3480156104fc57600080fd5b5061032661050b366004612669565b610f8b565b34801561051c57600080fd5b50601154610326906001600160a01b031681565b34801561053c57600080fd5b506006546102ad90600160a01b900460ff1681565b34801561055d57600080fd5b506102e261056c36600461255d565b611002565b34801561057d57600080fd5b5061039461058c36600461238a565b61108e565b34801561059d57600080fd5b506102e2611115565b3480156105b257600080fd5b50610394600c5481565b3480156105c857600080fd5b5061039460095481565b3480156105de57600080fd5b506102e26105ed3660046125a2565b61114b565b3480156105fe57600080fd5b50601354610326906001600160a01b031681565b34801561061e57600080fd5b506006546001600160a01b0316610326565b34801561063c57600080fd5b50600e54610326906001600160a01b031681565b34801561065c57600080fd5b506102e261066b366004612669565b611193565b34801561067c57600080fd5b50601654610326906001600160a01b031681565b34801561069c57600080fd5b506102f96111c2565b3480156106b157600080fd5b50601554610326906001600160a01b031681565b3480156106d157600080fd5b50600f54610326906001600160a01b031681565b3480156106f157600080fd5b5061039460085481565b6102e2610709366004612669565b6111d1565b34801561071a57600080fd5b506102e26107293660046124d4565b6114d8565b34801561073a57600080fd5b50600d54610326906001600160a01b031681565b34801561075a57600080fd5b50610394600b5481565b34801561077057600080fd5b506102e261077f366004612414565b61159d565b34801561079057600080fd5b506102e26115d5565b3480156107a557600080fd5b506102e26107b4366004612669565b6118db565b3480156107c557600080fd5b506102f96107d4366004612669565b61190a565b3480156107e557600080fd5b506102e26119e5565b3480156107fa57600080fd5b506102ad6108093660046123a5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561084357600080fd5b506102e261085236600461238a565b611a3e565b34801561086357600080fd5b506102e2610872366004612669565b611ad6565b60006001600160e01b031982166380ac58cd60e01b14806108a857506001600160e01b03198216635b5e139f60e01b145b806108c357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108fc5760405162461bcd60e51b81526004016108f39061277f565b60405180910390fd5b600b541561095e57600a54600b546109149083612836565b111561095e5760405162461bcd60e51b815260206004820152601960248201527856616c7565206578636565647320746f74616c537570706c7960381b60448201526064016108f3565b60005b8181101561099e57600b805490600061097983612916565b9091555050600b5461098b8482611b05565b508061099681612916565b915050610961565b505050565b6060600080546109b2906128db565b80601f01602080910402602001604051908101604052809291908181526020018280546109de906128db565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610aae5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f3565b506000908152600460205260409020546001600160a01b031690565b6000610ad582610f8b565b9050806001600160a01b0316836001600160a01b03161415610b435760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108f3565b336001600160a01b0382161480610b5f5750610b5f8133610809565b610bd15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108f3565b61099e8383611b1f565b6006546001600160a01b03163314610c055760405162461bcd60e51b81526004016108f39061277f565b600955565b610c143382611b8d565b610c305760405162461bcd60e51b81526004016108f3906127b4565b61099e838383611c84565b6006546001600160a01b03163314610c655760405162461bcd60e51b81526004016108f39061277f565b61099e60078383612238565b6006546001600160a01b03163314610c9b5760405162461bcd60e51b81526004016108f39061277f565b60068054911515600160a81b0260ff60a81b19909216919091179055565b61099e8383836040518060200160405280600081525061159d565b6006546001600160a01b03163314610cfe5760405162461bcd60e51b81526004016108f39061277f565b80600081518110610d1157610d11612971565b6020026020010151600d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600181518110610d5257610d52612971565b6020026020010151600e60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600281518110610d9357610d93612971565b6020026020010151600f60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600381518110610dd457610dd4612971565b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600481518110610e1557610e15612971565b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600581518110610e5657610e56612971565b6020026020010151601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600681518110610e9757610e97612971565b6020026020010151601360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600781518110610ed857610ed8612971565b6020026020010151601460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600881518110610f1957610f19612971565b6020026020010151601560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600981518110610f5a57610f5a612971565b6020026020010151601660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6000818152600260205260408120546001600160a01b0316806108c35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108f3565b6006546001600160a01b0316331461102c5760405162461bcd60e51b81526004016108f39061277f565b60005b825181101561099e57816017600085848151811061104f5761104f612971565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061108690612916565b91505061102f565b60006001600160a01b0382166110f95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108f3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461113f5760405162461bcd60e51b81526004016108f39061277f565b6111496000611e24565b565b6006546001600160a01b031633146111755760405162461bcd60e51b81526004016108f39061277f565b60068054911515600160a01b0260ff60a01b19909216919091179055565b6006546001600160a01b031633146111bd5760405162461bcd60e51b81526004016108f39061277f565b600855565b6060600180546109b2906128db565b600654600160a81b900460ff16806111f25750600654600160a01b900460ff165b6112375760405162461bcd60e51b81526020600482015260166024820152754e6569746865722073616c652069732061637469766560501b60448201526064016108f3565b600654600160a81b900460ff1615611355573360009081526017602052604090205461129c5760405162461bcd60e51b81526020600482015260146024820152734f7574206f662070726573616c65206d696e747360601b60448201526064016108f3565b336000908152601760205260408120546112b7908390612881565b10156112fd5760405162461bcd60e51b8152602060048201526015602482015274115e18d959591cc81c1c995cd85b19481b1a5b5a5d605a1b60448201526064016108f3565b60095481600b5461130e9190612836565b11156113555760405162461bcd60e51b8152602060048201526016602482015275457863656564732070726573616c6520737570706c7960501b60448201526064016108f3565b600c5481111580156113675750600081115b6113b35760405162461bcd60e51b815260206004820152601860248201527f517479206f66206d696e7473206e6f7420616c6c6f776564000000000000000060448201526064016108f3565b600b541561141557600a54600b546113cb9083612836565b11156114155760405162461bcd60e51b815260206004820152601960248201527856616c7565206578636565647320746f74616c537570706c7960381b60448201526064016108f3565b806008546114239190612862565b34146114615760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b60448201526064016108f3565b60005b818110156114d457600b805490600061147c83612916565b9091555050600b5461148e3382611b05565b600654600160a81b900460ff16156114c1573360009081526017602052604081208054916114bb836128c4565b91905055505b50806114cc81612916565b915050611464565b5050565b6001600160a01b0382163314156115315760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108f3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115a73383611b8d565b6115c35760405162461bcd60e51b81526004016108f3906127b4565b6115cf84848484611e76565b50505050565b6006546001600160a01b031633146115ff5760405162461bcd60e51b81526004016108f39061277f565b476000606461160f836004612862565b611619919061284e565b600d549091506001600160a01b03166108fc6064611638846005612862565b611642919061284e565b6040518115909202916000818181858888f1935050505061166257600080fd5b600e546001600160a01b03166108fc606461167e846005612862565b611688919061284e565b6040518115909202916000818181858888f193505050506116a857600080fd5b600f546001600160a01b03166108fc60646116c4846005612862565b6116ce919061284e565b6040518115909202916000818181858888f193505050506116ee57600080fd5b6010546001600160a01b03166108fc606461170a846005612862565b611714919061284e565b6040518115909202916000818181858888f1935050505061173457600080fd5b6011546001600160a01b03166108fc6064611750846005612862565b61175a919061284e565b6040518115909202916000818181858888f1935050505061177a57600080fd5b6012546001600160a01b03166108fc6064611796846014612862565b6117a0919061284e565b6040518115909202916000818181858888f193505050506117c057600080fd5b6013546001600160a01b03166108fc60646117dc846037612862565b6117e6919061284e565b6040518115909202916000818181858888f1935050505061180657600080fd5b6014546001600160a01b03166108fc6103e861182385604b612862565b61182d919061284e565b6040518115909202916000818181858888f1935050505061184d57600080fd5b6015546001600160a01b03166108fc606461186985600a612862565b611873919061284e565b6040518115909202916000818181858888f1935050505061189357600080fd5b6016546001600160a01b03166108fc6103e86118b185610311612862565b6118bb919061284e565b6040518115909202916000818181858888f193505050506114d457600080fd5b6006546001600160a01b031633146119055760405162461bcd60e51b81526004016108f39061277f565b600c55565b6000818152600260205260409020546060906001600160a01b03166119895760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108f3565b6000611993611ea9565b905060008151116119b357604051806020016040528060008152506119de565b806119bd84611eb8565b6040516020016119ce9291906126ae565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611a0f5760405162461bcd60e51b81526004016108f39061277f565b60405133904780156108fc02916000818181858888f19350505050158015611a3b573d6000803e3d6000fd5b50565b6006546001600160a01b03163314611a685760405162461bcd60e51b81526004016108f39061277f565b6001600160a01b038116611acd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f3565b611a3b81611e24565b6006546001600160a01b03163314611b005760405162461bcd60e51b81526004016108f39061277f565b600a55565b6114d4828260405180602001604052806000815250611fb6565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b5482610f8b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611c065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108f3565b6000611c1183610f8b565b9050806001600160a01b0316846001600160a01b03161480611c4c5750836001600160a01b0316611c4184610a35565b6001600160a01b0316145b80611c7c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c9782610f8b565b6001600160a01b031614611cff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108f3565b6001600160a01b038216611d615760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108f3565b611d6c600082611b1f565b6001600160a01b0383166000908152600360205260408120805460019290611d95908490612881565b90915550506001600160a01b0382166000908152600360205260408120805460019290611dc3908490612836565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e81848484611c84565b611e8d84848484611fe9565b6115cf5760405162461bcd60e51b81526004016108f39061272d565b6060600780546109b2906128db565b606081611edc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f065780611ef081612916565b9150611eff9050600a8361284e565b9150611ee0565b60008167ffffffffffffffff811115611f2157611f21612987565b6040519080825280601f01601f191660200182016040528015611f4b576020820181803683370190505b5090505b8415611c7c57611f60600183612881565b9150611f6d600a86612931565b611f78906030612836565b60f81b818381518110611f8d57611f8d612971565b60200101906001600160f81b031916908160001a905350611faf600a8661284e565b9450611f4f565b611fc083836120f6565b611fcd6000848484611fe9565b61099e5760405162461bcd60e51b81526004016108f39061272d565b60006001600160a01b0384163b156120eb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061202d9033908990889088906004016126dd565b602060405180830381600087803b15801561204757600080fd5b505af1925050508015612077575060408051601f3d908101601f19168201909252612074918101906125da565b60015b6120d1573d8080156120a5576040519150601f19603f3d011682016040523d82523d6000602084013e6120aa565b606091505b5080516120c95760405162461bcd60e51b81526004016108f39061272d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c7c565b506001949350505050565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108f3565b6000818152600260205260409020546001600160a01b0316156121b15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f3565b6001600160a01b03821660009081526003602052604081208054600192906121da908490612836565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612244906128db565b90600052602060002090601f01602090048101928261226657600085556122ac565b82601f1061227f5782800160ff198235161785556122ac565b828001600101855582156122ac579182015b828111156122ac578235825591602001919060010190612291565b506122b89291506122bc565b5090565b5b808211156122b857600081556001016122bd565b80356001600160a01b03811681146122e857600080fd5b919050565b600082601f8301126122fe57600080fd5b8135602067ffffffffffffffff82111561231a5761231a612987565b8160051b612329828201612805565b83815282810190868401838801850189101561234457600080fd5b600093505b8584101561236e5761235a816122d1565b835260019390930192918401918401612349565b50979650505050505050565b803580151581146122e857600080fd5b60006020828403121561239c57600080fd5b6119de826122d1565b600080604083850312156123b857600080fd5b6123c1836122d1565b91506123cf602084016122d1565b90509250929050565b6000806000606084860312156123ed57600080fd5b6123f6846122d1565b9250612404602085016122d1565b9150604084013590509250925092565b6000806000806080858703121561242a57600080fd5b612433856122d1565b935060206124428187016122d1565b935060408601359250606086013567ffffffffffffffff8082111561246657600080fd5b818801915088601f83011261247a57600080fd5b81358181111561248c5761248c612987565b61249e601f8201601f19168501612805565b915080825289848285010111156124b457600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156124e757600080fd5b6124f0836122d1565b91506123cf6020840161237a565b6000806040838503121561251157600080fd5b61251a836122d1565b946020939093013593505050565b60006020828403121561253a57600080fd5b813567ffffffffffffffff81111561255157600080fd5b611c7c848285016122ed565b6000806040838503121561257057600080fd5b823567ffffffffffffffff81111561258757600080fd5b612593858286016122ed565b95602094909401359450505050565b6000602082840312156125b457600080fd5b6119de8261237a565b6000602082840312156125cf57600080fd5b81356119de8161299d565b6000602082840312156125ec57600080fd5b81516119de8161299d565b6000806020838503121561260a57600080fd5b823567ffffffffffffffff8082111561262257600080fd5b818501915085601f83011261263657600080fd5b81358181111561264557600080fd5b86602082850101111561265757600080fd5b60209290920196919550909350505050565b60006020828403121561267b57600080fd5b5035919050565b6000815180845261269a816020860160208601612898565b601f01601f19169290920160200192915050565b600083516126c0818460208801612898565b8351908301906126d4818360208801612898565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061271090830184612682565b9695505050505050565b6020815260006119de6020830184612682565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561282e5761282e612987565b604052919050565b6000821982111561284957612849612945565b500190565b60008261285d5761285d61295b565b500490565b600081600019048311821515161561287c5761287c612945565b500290565b60008282101561289357612893612945565b500390565b60005b838110156128b357818101518382015260200161289b565b838111156115cf5750506000910152565b6000816128d3576128d3612945565b506000190190565b600181811c908216806128ef57607f821691505b6020821081141561291057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561292a5761292a612945565b5060010190565b6000826129405761294061295b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611a3b57600080fdfea2646970667358221220c1acafb605c8a4d1eb36087682f27ba8d251cf372cc605be4ea62f091dfe3ef764736f6c63430008070033
Deployed Bytecode Sourcemap
44841:4758:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21074:355;;;;;;;;;;-1:-1:-1;21074:355:0;;;;;:::i;:::-;;:::i;:::-;;;7231:14:1;;7224:22;7206:41;;7194:2;7179:18;21074:355:0;;;;;;;;47477:339;;;;;;;;;;-1:-1:-1;47477:339:0;;;;;:::i;:::-;;:::i;:::-;;22243:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23936:308::-;;;;;;;;;;-1:-1:-1;23936:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6529:32:1;;;6511:51;;6499:2;6484:18;23936:308:0;6365:203:1;23459:411:0;;;;;;;;;;-1:-1:-1;23459:411:0;;;;;:::i;:::-;;:::i;45776:62::-;;;;;;;;;;-1:-1:-1;45776:62:0;;;;-1:-1:-1;;;;;45776:62:0;;;45186:33;;;;;;;;;;;;;;;;;;;16460:25:1;;;16448:2;16433:18;45186:33:0;16314:177:1;46577:118:0;;;;;;;;;;-1:-1:-1;46577:118:0;;;;;:::i;:::-;;:::i;24995:376::-;;;;;;;;;;-1:-1:-1;24995:376:0;;;;;:::i;:::-;;:::i;46355:102::-;;;;;;;;;;-1:-1:-1;46355:102:0;;;;;:::i;:::-;;:::i;45985:50::-;;;;;;;;;;-1:-1:-1;45985:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;45636:62;;;;;;;;;;-1:-1:-1;45636:62:0;;;;-1:-1:-1;;;;;45636:62:0;;;46703:91;;;;;;;;;;-1:-1:-1;46703:91:0;;;;;:::i;:::-;;:::i;25442:185::-;;;;;;;;;;-1:-1:-1;25442:185:0;;;;;:::i;:::-;;:::i;46895:285::-;;;;;;;;;;-1:-1:-1;46895:285:0;;;;;:::i;:::-;;:::i;44931:33::-;;;;;;;;;;-1:-1:-1;44931:33:0;;;;-1:-1:-1;;;44931:33:0;;;;;;45498:62;;;;;;;;;;-1:-1:-1;45498:62:0;;;;-1:-1:-1;;;;;45498:62:0;;;21850:326;;;;;;;;;;-1:-1:-1;21850:326:0;;;;;:::i;:::-;;:::i;45567:62::-;;;;;;;;;;-1:-1:-1;45567:62:0;;;;-1:-1:-1;;;;;45567:62:0;;;44894:30;;;;;;;;;;-1:-1:-1;44894:30:0;;;;-1:-1:-1;;;44894:30:0;;;;;;47282:187;;;;;;;;;;-1:-1:-1;47282:187:0;;;;;:::i;:::-;;:::i;21493:295::-;;;;;;;;;;-1:-1:-1;21493:295:0;;;;;:::i;:::-;;:::i;44175:94::-;;;;;;;;;;;;;:::i;45257:25::-;;;;;;;;;;;;;;;;45140:39;;;;;;;;;;;;;;;;46802:85;;;;;;;;;;-1:-1:-1;46802:85:0;;;;;:::i;:::-;;:::i;45705:62::-;;;;;;;;;;-1:-1:-1;45705:62:0;;;;-1:-1:-1;;;;;45705:62:0;;;43524:87;;;;;;;;;;-1:-1:-1;43597:6:0;;-1:-1:-1;;;;;43597:6:0;43524:87;;45360:62;;;;;;;;;;-1:-1:-1;45360:62:0;;;;-1:-1:-1;;;;;45360:62:0;;;46257:90;;;;;;;;;;-1:-1:-1;46257:90:0;;;;;:::i;:::-;;:::i;45914:62::-;;;;;;;;;;-1:-1:-1;45914:62:0;;;;-1:-1:-1;;;;;45914:62:0;;;22412:104;;;;;;;;;;;;;:::i;45845:62::-;;;;;;;;;;-1:-1:-1;45845:62:0;;;;-1:-1:-1;;;;;45845:62:0;;;45429;;;;;;;;;;-1:-1:-1;45429:62:0;;;;-1:-1:-1;;;;;45429:62:0;;;45101:32;;;;;;;;;;;;;;;;47824:919;;;;;;:::i;:::-;;:::i;24316:327::-;;;;;;;;;;-1:-1:-1;24316:327:0;;;;;:::i;:::-;;:::i;45291:62::-;;;;;;;;;;-1:-1:-1;45291:62:0;;;;-1:-1:-1;;;;;45291:62:0;;;45226:24;;;;;;;;;;;;;;;;25698:365;;;;;;;;;;-1:-1:-1;25698:365:0;;;;;:::i;:::-;;:::i;48751:723::-;;;;;;;;;;;;;:::i;47188:86::-;;;;;;;;;;-1:-1:-1;47188:86:0;;;;;:::i;:::-;;:::i;22587:468::-;;;;;;;;;;-1:-1:-1;22587:468:0;;;;;:::i;:::-;;:::i;49482:114::-;;;;;;;;;;;;;:::i;24714:214::-;;;;;;;;;;-1:-1:-1;24714:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;24885:25:0;;;24856:4;24885:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24714:214;44424:229;;;;;;;;;;-1:-1:-1;44424:229:0;;;;;:::i;:::-;;:::i;46465:104::-;;;;;;;;;;-1:-1:-1;46465:104:0;;;;;:::i;:::-;;:::i;21074:355::-;21221:4;-1:-1:-1;;;;;;21263:40:0;;-1:-1:-1;;;21263:40:0;;:105;;-1:-1:-1;;;;;;;21320:48:0;;-1:-1:-1;;;21320:48:0;21263:105;:158;;;-1:-1:-1;;;;;;;;;;19705:40:0;;;21385:36;21243:178;21074:355;-1:-1:-1;;21074:355:0:o;47477:339::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;;;;;;;;;47554:5:::1;::::0;:9;47550:106:::1;;47603:11;::::0;47594:5:::1;::::0;47588:11:::1;::::0;:3;:11:::1;:::i;:::-;:26;;47580:64;;;::::0;-1:-1:-1;;;47580:64:0;;14640:2:1;47580:64:0::1;::::0;::::1;14622:21:1::0;14679:2;14659:18;;;14652:30;-1:-1:-1;;;14698:18:1;;;14691:55;14763:18;;47580:64:0::1;14438:349:1::0;47580:64:0::1;47671:9;47666:143;47690:3;47686:1;:7;47666:143;;;47715:5;:7:::0;;;:5:::1;:7;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;47755:5:0::1;::::0;47775:22:::1;47785:2:::0;47755:5;47775:9:::1;:22::i;:::-;-1:-1:-1::0;47695:3:0;::::1;::::0;::::1;:::i;:::-;;;;47666:143;;;;47477:339:::0;;:::o;22243:100::-;22297:13;22330:5;22323:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22243:100;:::o;23936:308::-;24057:7;27699:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27699:16:0;24082:110;;;;-1:-1:-1;;;24082:110:0;;12349:2:1;24082:110:0;;;12331:21:1;12388:2;12368:18;;;12361:30;12427:34;12407:18;;;12400:62;-1:-1:-1;;;12478:18:1;;;12471:42;12530:19;;24082:110:0;12147:408:1;24082:110:0;-1:-1:-1;24212:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24212:24:0;;23936:308::o;23459:411::-;23540:13;23556:23;23571:7;23556:14;:23::i;:::-;23540:39;;23604:5;-1:-1:-1;;;;;23598:11:0;:2;-1:-1:-1;;;;;23598:11:0;;;23590:57;;;;-1:-1:-1;;;23590:57:0;;14994:2:1;23590:57:0;;;14976:21:1;15033:2;15013:18;;;15006:30;15072:34;15052:18;;;15045:62;-1:-1:-1;;;15123:18:1;;;15116:31;15164:19;;23590:57:0;14792:397:1;23590:57:0;16522:10;-1:-1:-1;;;;;23682:21:0;;;;:62;;-1:-1:-1;23707:37:0;23724:5;16522:10;24714:214;:::i;23707:37::-;23660:168;;;;-1:-1:-1;;;23660:168:0;;10742:2:1;23660:168:0;;;10724:21:1;10781:2;10761:18;;;10754:30;10820:34;10800:18;;;10793:62;10891:26;10871:18;;;10864:54;10935:19;;23660:168:0;10540:420:1;23660:168:0;23841:21;23850:2;23854:7;23841:8;:21::i;46577:118::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46657:18:::1;:30:::0;46577:118::o;24995:376::-;25204:41;16522:10;25237:7;25204:18;:41::i;:::-;25182:140;;;;-1:-1:-1;;;25182:140:0;;;;;;;:::i;:::-;25335:28;25345:4;25351:2;25355:7;25335:9;:28::i;46355:102::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46431:18:::1;:12;46446:3:::0;;46431:18:::1;:::i;46703:91::-:0;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46767:13:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;46767:19:0::1;-1:-1:-1::0;;;;46767:19:0;;::::1;::::0;;;::::1;::::0;;46703:91::o;25442:185::-;25580:39;25597:4;25603:2;25607:7;25580:39;;;;;;;;;;;;:16;:39::i;46895:285::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46978:2:::1;46981:1;46978:5;;;;;;;;:::i;:::-;;;;;;;46973:2;;:10;;;;;-1:-1:-1::0;;;;;46973:10:0::1;;;;;-1:-1:-1::0;;;;;46973:10:0::1;;;;;;46999:2;47002:1;46999:5;;;;;;;;:::i;:::-;;;;;;;46994:2;;:10;;;;;-1:-1:-1::0;;;;;46994:10:0::1;;;;;-1:-1:-1::0;;;;;46994:10:0::1;;;;;;47020:2;47023:1;47020:5;;;;;;;;:::i;:::-;;;;;;;47015:2;;:10;;;;;-1:-1:-1::0;;;;;47015:10:0::1;;;;;-1:-1:-1::0;;;;;47015:10:0::1;;;;;;47041:2;47044:1;47041:5;;;;;;;;:::i;:::-;;;;;;;47036:2;;:10;;;;;-1:-1:-1::0;;;;;47036:10:0::1;;;;;-1:-1:-1::0;;;;;47036:10:0::1;;;;;;47062:2;47065:1;47062:5;;;;;;;;:::i;:::-;;;;;;;47057:2;;:10;;;;;-1:-1:-1::0;;;;;47057:10:0::1;;;;;-1:-1:-1::0;;;;;47057:10:0::1;;;;;;47083:2;47086:1;47083:5;;;;;;;;:::i;:::-;;;;;;;47078:2;;:10;;;;;-1:-1:-1::0;;;;;47078:10:0::1;;;;;-1:-1:-1::0;;;;;47078:10:0::1;;;;;;47104:2;47107:1;47104:5;;;;;;;;:::i;:::-;;;;;;;47099:2;;:10;;;;;-1:-1:-1::0;;;;;47099:10:0::1;;;;;-1:-1:-1::0;;;;;47099:10:0::1;;;;;;47125:2;47128:1;47125:5;;;;;;;;:::i;:::-;;;;;;;47120:2;;:10;;;;;-1:-1:-1::0;;;;;47120:10:0::1;;;;;-1:-1:-1::0;;;;;47120:10:0::1;;;;;;47146:2;47149:1;47146:5;;;;;;;;:::i;:::-;;;;;;;47141:2;;:10;;;;;-1:-1:-1::0;;;;;47141:10:0::1;;;;;-1:-1:-1::0;;;;;47141:10:0::1;;;;;;47167:2;47170:1;47167:5;;;;;;;;:::i;:::-;;;;;;;47162:2;;:10;;;;;-1:-1:-1::0;;;;;47162:10:0::1;;;;;-1:-1:-1::0;;;;;47162:10:0::1;;;;;;46895:285:::0;:::o;21850:326::-;21967:7;22008:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22008:16:0;22057:19;22035:110;;;;-1:-1:-1;;;22035:110:0;;11578:2:1;22035:110:0;;;11560:21:1;11617:2;11597:18;;;11590:30;11656:34;11636:18;;;11629:62;-1:-1:-1;;;11707:18:1;;;11700:39;11756:19;;22035:110:0;11376:405:1;47282:187:0;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;47377:9:::1;47373:89;47392:2;:9;47388:1;:13;47373:89;;;47447:3;47423:14;:21;47438:2;47441:1;47438:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;47423:21:0::1;-1:-1:-1::0;;;;;47423:21:0::1;;;;;;;;;;;;:27;;;;47403:3;;;;;:::i;:::-;;;;47373:89;;21493:295:::0;21610:7;-1:-1:-1;;;;;21657:19:0;;21635:111;;;;-1:-1:-1;;;21635:111:0;;11167:2:1;21635:111:0;;;11149:21:1;11206:2;11186:18;;;11179:30;11245:34;11225:18;;;11218:62;-1:-1:-1;;;11296:18:1;;;11289:40;11346:19;;21635:111:0;10965:406:1;21635:111:0;-1:-1:-1;;;;;;21764:16:0;;;;;:9;:16;;;;;;;21493:295::o;44175:94::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;44240:21:::1;44258:1;44240:9;:21::i;:::-;44175:94::o:0;46802:85::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46863:10:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;46863:16:0::1;-1:-1:-1::0;;;;46863:16:0;;::::1;::::0;;;::::1;::::0;;46802:85::o;46257:90::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46323:5:::1;:16:::0;46257:90::o;22412:104::-;22468:13;22501:7;22494:14;;;;;:::i;47824:919::-;47887:13;;-1:-1:-1;;;47887:13:0;;;;;:27;;-1:-1:-1;47904:10:0;;-1:-1:-1;;;47904:10:0;;;;47887:27;47879:62;;;;-1:-1:-1;;;47879:62:0;;15396:2:1;47879:62:0;;;15378:21:1;15435:2;15415:18;;;15408:30;-1:-1:-1;;;15454:18:1;;;15447:52;15516:18;;47879:62:0;15194:346:1;47879:62:0;47957:13;;-1:-1:-1;;;47957:13:0;;;;47953:278;;;48010:10;48024:1;47995:26;;;:14;:26;;;;;;47987:63;;;;-1:-1:-1;;;47987:63:0;;14291:2:1;47987:63:0;;;14273:21:1;14330:2;14310:18;;;14303:30;-1:-1:-1;;;14349:18:1;;;14342:50;14409:18;;47987:63:0;14089:344:1;47987:63:0;48088:10;48109:1;48073:26;;;:14;:26;;;;;;:32;;48102:3;;48073:32;:::i;:::-;:37;;48065:71;;;;-1:-1:-1;;;48065:71:0;;7684:2:1;48065:71:0;;;7666:21:1;7723:2;7703:18;;;7696:30;-1:-1:-1;;;7742:18:1;;;7735:51;7803:18;;48065:71:0;7482:345:1;48065:71:0;48174:18;;48167:3;48159:5;;:11;;;;:::i;:::-;:33;;48151:68;;;;-1:-1:-1;;;48151:68:0;;16165:2:1;48151:68:0;;;16147:21:1;16204:2;16184:18;;;16177:30;-1:-1:-1;;;16223:18:1;;;16216:52;16285:18;;48151:68:0;15963:346:1;48151:68:0;48256:5;;48249:3;:12;;:23;;;;;48271:1;48265:3;:7;48249:23;48241:60;;;;-1:-1:-1;;;48241:60:0;;10389:2:1;48241:60:0;;;10371:21:1;10428:2;10408:18;;;10401:30;10467:26;10447:18;;;10440:54;10511:18;;48241:60:0;10187:348:1;48241:60:0;48316:5;;:9;48312:106;;48365:11;;48356:5;;48350:11;;:3;:11;:::i;:::-;:26;;48342:64;;;;-1:-1:-1;;;48342:64:0;;14640:2:1;48342:64:0;;;14622:21:1;14679:2;14659:18;;;14652:30;-1:-1:-1;;;14698:18:1;;;14691:55;14763:18;;48342:64:0;14438:349:1;48342:64:0;48457:3;48449:5;;:11;;;;:::i;:::-;48436:9;:24;48428:50;;;;-1:-1:-1;;;48428:50:0;;13533:2:1;48428:50:0;;;13515:21:1;13572:2;13552:18;;;13545:30;-1:-1:-1;;;13591:18:1;;;13584:43;13644:18;;48428:50:0;13331:337:1;48428:50:0;48494:9;48489:247;48513:3;48509:1;:7;48489:247;;;48538:5;:7;;;:5;:7;;;:::i;:::-;;;;-1:-1:-1;;48578:5:0;;48598:30;48608:10;48578:5;48598:9;:30::i;:::-;48647:13;;-1:-1:-1;;;48647:13:0;;;;48643:82;;;48696:10;48681:26;;;;:14;:26;;;;;:28;;;;;;:::i;:::-;;;;;;48643:82;-1:-1:-1;48518:3:0;;;;:::i;:::-;;;;48489:247;;;;47824:919;:::o;24316:327::-;-1:-1:-1;;;;;24451:24:0;;16522:10;24451:24;;24443:62;;;;-1:-1:-1;;;24443:62:0;;9622:2:1;24443:62:0;;;9604:21:1;9661:2;9641:18;;;9634:30;9700:27;9680:18;;;9673:55;9745:18;;24443:62:0;9420:349:1;24443:62:0;16522:10;24518:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24518:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24518:53:0;;;;;;;;;;24587:48;;7206:41:1;;;24518:42:0;;16522:10;24587:48;;7179:18:1;24587:48:0;;;;;;;24316:327;;:::o;25698:365::-;25887:41;16522:10;25920:7;25887:18;:41::i;:::-;25865:140;;;;-1:-1:-1;;;25865:140:0;;;;;;;:::i;:::-;26016:39;26030:4;26036:2;26040:7;26049:5;26016:13;:39::i;:::-;25698:365;;;;:::o;48751:723::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;48823:21:::1;48805:15;48888:3;48873:11;48823:21:::0;48883:1:::1;48873:11;:::i;:::-;48872:19;;;;:::i;:::-;48920:2;::::0;48855:36;;-1:-1:-1;;;;;;48920:2:0::1;48912:36;48944:3;48930:10;48855:36:::0;48939:1:::1;48930:10;:::i;:::-;48929:18;;;;:::i;:::-;48912:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;48904:45;;;::::0;::::1;;48976:2;::::0;-1:-1:-1;;;;;48976:2:0::1;48968:36;49000:3;48986:10;:6:::0;48995:1:::1;48986:10;:::i;:::-;48985:18;;;;:::i;:::-;48968:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;48960:45;;;::::0;::::1;;49032:2;::::0;-1:-1:-1;;;;;49032:2:0::1;49024:36;49056:3;49042:10;:6:::0;49051:1:::1;49042:10;:::i;:::-;49041:18;;;;:::i;:::-;49024:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49016:45;;;::::0;::::1;;49088:2;::::0;-1:-1:-1;;;;;49088:2:0::1;49080:36;49112:3;49098:10;:6:::0;49107:1:::1;49098:10;:::i;:::-;49097:18;;;;:::i;:::-;49080:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49072:45;;;::::0;::::1;;49144:2;::::0;-1:-1:-1;;;;;49144:2:0::1;49136:36;49168:3;49154:10;:6:::0;49163:1:::1;49154:10;:::i;:::-;49153:18;;;;:::i;:::-;49136:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49128:45;;;::::0;::::1;;49200:2;::::0;-1:-1:-1;;;;;49200:2:0::1;49192:37;49225:3;49210:11;:6:::0;49219:2:::1;49210:11;:::i;:::-;49209:19;;;;:::i;:::-;49192:37;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49184:46;;;::::0;::::1;;49257:2;::::0;-1:-1:-1;;;;;49257:2:0::1;49249:37;49282:3;49267:11;:6:::0;49276:2:::1;49267:11;:::i;:::-;49266:19;;;;:::i;:::-;49249:37;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49241:46;;;::::0;::::1;;49316:2;::::0;-1:-1:-1;;;;;49316:2:0::1;49308:39;49342:4;49326:12;:7:::0;49336:2:::1;49326:12;:::i;:::-;49325:21;;;;:::i;:::-;49308:39;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49300:48;;;::::0;::::1;;49375:2;::::0;-1:-1:-1;;;;;49375:2:0::1;49367:38;49401:3;49385:12;:7:::0;49395:2:::1;49385:12;:::i;:::-;49384:20;;;;:::i;:::-;49367:38;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49359:47;;;::::0;::::1;;49433:2;::::0;-1:-1:-1;;;;;49433:2:0::1;49425:40;49460:4;49443:13;:7:::0;49453:3:::1;49443:13;:::i;:::-;49442:22;;;;:::i;:::-;49425:40;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;49417:49;;;::::0;::::1;47188:86:::0;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;47252:5:::1;:14:::0;47188:86::o;22587:468::-;27675:4;27699:16;;;:7;:16;;;;;;22705:13;;-1:-1:-1;;;;;27699:16:0;22736:113;;;;-1:-1:-1;;;22736:113:0;;13875:2:1;22736:113:0;;;13857:21:1;13914:2;13894:18;;;13887:30;13953:34;13933:18;;;13926:62;-1:-1:-1;;;14004:18:1;;;13997:45;14059:19;;22736:113:0;13673:411:1;22736:113:0;22862:21;22886:10;:8;:10::i;:::-;22862:34;;22951:1;22933:7;22927:21;:25;:120;;;;;;;;;;;;;;;;;22996:7;23005:18;:7;:16;:18::i;:::-;22979:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22927:120;22907:140;22587:468;-1:-1:-1;;;22587:468:0:o;49482:114::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;49537:51:::1;::::0;49545:10:::1;::::0;49566:21:::1;49537:51:::0;::::1;;;::::0;::::1;::::0;;;49566:21;49545:10;49537:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;49482:114::o:0;44424:229::-;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44527:22:0;::::1;44505:110;;;::::0;-1:-1:-1;;;44505:110:0;;8453:2:1;44505:110:0::1;::::0;::::1;8435:21:1::0;8492:2;8472:18;;;8465:30;8531:34;8511:18;;;8504:62;-1:-1:-1;;;8582:18:1;;;8575:36;8628:19;;44505:110:0::1;8251:402:1::0;44505:110:0::1;44626:19;44636:8;44626:9;:19::i;46465:104::-:0;43597:6;;-1:-1:-1;;;;;43597:6:0;16522:10;43744:23;43736:68;;;;-1:-1:-1;;;43736:68:0;;;;;;;:::i;:::-;46538:11:::1;:23:::0;46465:104::o;28698:110::-;28774:26;28784:2;28788:7;28774:26;;;;;;;;;;;;:9;:26::i;31733:174::-;31808:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31808:29:0;-1:-1:-1;;;;;31808:29:0;;;;;;;;:24;;31862:23;31808:24;31862:14;:23::i;:::-;-1:-1:-1;;;;;31853:46:0;;;;;;;;;;;31733:174;;:::o;27904:452::-;28033:4;27699:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27699:16:0;28055:110;;;;-1:-1:-1;;;28055:110:0;;9976:2:1;28055:110:0;;;9958:21:1;10015:2;9995:18;;;9988:30;10054:34;10034:18;;;10027:62;-1:-1:-1;;;10105:18:1;;;10098:42;10157:19;;28055:110:0;9774:408:1;28055:110:0;28176:13;28192:23;28207:7;28192:14;:23::i;:::-;28176:39;;28245:5;-1:-1:-1;;;;;28234:16:0;:7;-1:-1:-1;;;;;28234:16:0;;:64;;;;28291:7;-1:-1:-1;;;;;28267:31:0;:20;28279:7;28267:11;:20::i;:::-;-1:-1:-1;;;;;28267:31:0;;28234:64;:113;;;-1:-1:-1;;;;;;24885:25:0;;;24856:4;24885:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28315:32;28226:122;27904:452;-1:-1:-1;;;;27904:452:0:o;31000:615::-;31173:4;-1:-1:-1;;;;;31146:31:0;:23;31161:7;31146:14;:23::i;:::-;-1:-1:-1;;;;;31146:31:0;;31124:122;;;;-1:-1:-1;;;31124:122:0;;13123:2:1;31124:122:0;;;13105:21:1;13162:2;13142:18;;;13135:30;13201:34;13181:18;;;13174:62;-1:-1:-1;;;13252:18:1;;;13245:39;13301:19;;31124:122:0;12921:405:1;31124:122:0;-1:-1:-1;;;;;31265:16:0;;31257:65;;;;-1:-1:-1;;;31257:65:0;;9217:2:1;31257:65:0;;;9199:21:1;9256:2;9236:18;;;9229:30;9295:34;9275:18;;;9268:62;-1:-1:-1;;;9346:18:1;;;9339:34;9390:19;;31257:65:0;9015:400:1;31257:65:0;31439:29;31456:1;31460:7;31439:8;:29::i;:::-;-1:-1:-1;;;;;31481:15:0;;;;;;:9;:15;;;;;:20;;31500:1;;31481:15;:20;;31500:1;;31481:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31512:13:0;;;;;;:9;:13;;;;;:18;;31529:1;;31512:13;:18;;31529:1;;31512:18;:::i;:::-;;;;-1:-1:-1;;31541:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31541:21:0;-1:-1:-1;;;;;31541:21:0;;;;;;;;;31580:27;;31541:16;;31580:27;;;;;;;31000:615;;;:::o;44661:173::-;44736:6;;;-1:-1:-1;;;;;44753:17:0;;;-1:-1:-1;;;;;;44753:17:0;;;;;;;44786:40;;44736:6;;;44753:17;44736:6;;44786:40;;44717:16;;44786:40;44706:128;44661:173;:::o;26945:352::-;27102:28;27112:4;27118:2;27122:7;27102:9;:28::i;:::-;27163:48;27186:4;27192:2;27196:7;27205:5;27163:22;:48::i;:::-;27141:148;;;;-1:-1:-1;;;27141:148:0;;;;;;;:::i;46144:105::-;46196:13;46229:12;46222:19;;;;;:::i;16963:723::-;17019:13;17240:10;17236:53;;-1:-1:-1;;17267:10:0;;;;;;;;;;;;-1:-1:-1;;;17267:10:0;;;;;16963:723::o;17236:53::-;17314:5;17299:12;17355:78;17362:9;;17355:78;;17388:8;;;;:::i;:::-;;-1:-1:-1;17411:10:0;;-1:-1:-1;17419:2:0;17411:10;;:::i;:::-;;;17355:78;;;17443:19;17475:6;17465:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17465:17:0;;17443:39;;17493:154;17500:10;;17493:154;;17527:11;17537:1;17527:11;;:::i;:::-;;-1:-1:-1;17596:10:0;17604:2;17596:5;:10;:::i;:::-;17583:24;;:2;:24;:::i;:::-;17570:39;;17553:6;17560;17553:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17553:56:0;;;;;;;;-1:-1:-1;17624:11:0;17633:2;17624:11;;:::i;:::-;;;17493:154;;29035:321;29165:18;29171:2;29175:7;29165:5;:18::i;:::-;29216:54;29247:1;29251:2;29255:7;29264:5;29216:22;:54::i;:::-;29194:154;;;;-1:-1:-1;;;29194:154:0;;;;;;;:::i;32472:984::-;32627:4;-1:-1:-1;;;;;32648:13:0;;8564:20;8612:8;32644:805;;32701:175;;-1:-1:-1;;;32701:175:0;;-1:-1:-1;;;;;32701:36:0;;;;;:175;;16522:10;;32795:4;;32822:7;;32852:5;;32701:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32701:175:0;;;;;;;;-1:-1:-1;;32701:175:0;;;;;;;;;;;;:::i;:::-;;;32680:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33063:13:0;;33059:320;;33106:108;;-1:-1:-1;;;33106:108:0;;;;;;;:::i;33059:320::-;33329:6;33323:13;33314:6;33310:2;33306:15;33299:38;32680:714;-1:-1:-1;;;;;;32940:55:0;-1:-1:-1;;;32940:55:0;;-1:-1:-1;32933:62:0;;32644:805;-1:-1:-1;33433:4:0;32472:984;;;;;;:::o;29692:382::-;-1:-1:-1;;;;;29772:16:0;;29764:61;;;;-1:-1:-1;;;29764:61:0;;11988:2:1;29764:61:0;;;11970:21:1;;;12007:18;;;12000:30;12066:34;12046:18;;;12039:62;12118:18;;29764:61:0;11786:356:1;29764:61:0;27675:4;27699:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27699:16:0;:30;29836:58;;;;-1:-1:-1;;;29836:58:0;;8860:2:1;29836:58:0;;;8842:21:1;8899:2;8879:18;;;8872:30;8938;8918:18;;;8911:58;8986:18;;29836:58:0;8658:352:1;29836:58:0;-1:-1:-1;;;;;29965:13:0;;;;;;:9;:13;;;;;:18;;29982:1;;29965:13;:18;;29982:1;;29965:18;:::i;:::-;;;;-1:-1:-1;;29994:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29994:21:0;-1:-1:-1;;;;;29994:21:0;;;;;;;;30033:33;;29994:16;;;30033:33;;29994:16;;30033:33;29692:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:729::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:18;398:2;395:26;392:52;;;424:18;;:::i;:::-;470:2;467:1;463:10;493:28;517:2;513;509:11;493:28;:::i;:::-;555:15;;;586:12;;;;618:15;;;652;;;648:24;;645:33;-1:-1:-1;642:53:1;;;691:1;688;681:12;642:53;713:1;704:10;;723:169;737:2;734:1;731:9;723:169;;;794:23;813:3;794:23;:::i;:::-;782:36;;755:1;748:9;;;;;838:12;;;;870;;723:169;;;-1:-1:-1;910:5:1;192:729;-1:-1:-1;;;;;;;192:729:1:o;926:160::-;991:20;;1047:13;;1040:21;1030:32;;1020:60;;1076:1;1073;1066:12;1091:186;1150:6;1203:2;1191:9;1182:7;1178:23;1174:32;1171:52;;;1219:1;1216;1209:12;1171:52;1242:29;1261:9;1242:29;:::i;1282:260::-;1350:6;1358;1411:2;1399:9;1390:7;1386:23;1382:32;1379:52;;;1427:1;1424;1417:12;1379:52;1450:29;1469:9;1450:29;:::i;:::-;1440:39;;1498:38;1532:2;1521:9;1517:18;1498:38;:::i;:::-;1488:48;;1282:260;;;;;:::o;1547:328::-;1624:6;1632;1640;1693:2;1681:9;1672:7;1668:23;1664:32;1661:52;;;1709:1;1706;1699:12;1661:52;1732:29;1751:9;1732:29;:::i;:::-;1722:39;;1780:38;1814:2;1803:9;1799:18;1780:38;:::i;:::-;1770:48;;1865:2;1854:9;1850:18;1837:32;1827:42;;1547:328;;;;;:::o;1880:980::-;1975:6;1983;1991;1999;2052:3;2040:9;2031:7;2027:23;2023:33;2020:53;;;2069:1;2066;2059:12;2020:53;2092:29;2111:9;2092:29;:::i;:::-;2082:39;;2140:2;2161:38;2195:2;2184:9;2180:18;2161:38;:::i;:::-;2151:48;;2246:2;2235:9;2231:18;2218:32;2208:42;;2301:2;2290:9;2286:18;2273:32;2324:18;2365:2;2357:6;2354:14;2351:34;;;2381:1;2378;2371:12;2351:34;2419:6;2408:9;2404:22;2394:32;;2464:7;2457:4;2453:2;2449:13;2445:27;2435:55;;2486:1;2483;2476:12;2435:55;2522:2;2509:16;2544:2;2540;2537:10;2534:36;;;2550:18;;:::i;:::-;2592:53;2635:2;2616:13;;-1:-1:-1;;2612:27:1;2608:36;;2592:53;:::i;:::-;2579:66;;2668:2;2661:5;2654:17;2708:7;2703:2;2698;2694;2690:11;2686:20;2683:33;2680:53;;;2729:1;2726;2719:12;2680:53;2784:2;2779;2775;2771:11;2766:2;2759:5;2755:14;2742:45;2828:1;2823:2;2818;2811:5;2807:14;2803:23;2796:34;;2849:5;2839:15;;;;;1880:980;;;;;;;:::o;2865:254::-;2930:6;2938;2991:2;2979:9;2970:7;2966:23;2962:32;2959:52;;;3007:1;3004;2997:12;2959:52;3030:29;3049:9;3030:29;:::i;:::-;3020:39;;3078:35;3109:2;3098:9;3094:18;3078:35;:::i;3124:254::-;3192:6;3200;3253:2;3241:9;3232:7;3228:23;3224:32;3221:52;;;3269:1;3266;3259:12;3221:52;3292:29;3311:9;3292:29;:::i;:::-;3282:39;3368:2;3353:18;;;;3340:32;;-1:-1:-1;;;3124:254:1:o;3383:348::-;3467:6;3520:2;3508:9;3499:7;3495:23;3491:32;3488:52;;;3536:1;3533;3526:12;3488:52;3576:9;3563:23;3609:18;3601:6;3598:30;3595:50;;;3641:1;3638;3631:12;3595:50;3664:61;3717:7;3708:6;3697:9;3693:22;3664:61;:::i;3736:416::-;3829:6;3837;3890:2;3878:9;3869:7;3865:23;3861:32;3858:52;;;3906:1;3903;3896:12;3858:52;3946:9;3933:23;3979:18;3971:6;3968:30;3965:50;;;4011:1;4008;4001:12;3965:50;4034:61;4087:7;4078:6;4067:9;4063:22;4034:61;:::i;:::-;4024:71;4142:2;4127:18;;;;4114:32;;-1:-1:-1;;;;3736:416:1:o;4157:180::-;4213:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:52;;;4282:1;4279;4272:12;4234:52;4305:26;4321:9;4305:26;:::i;4342:245::-;4400:6;4453:2;4441:9;4432:7;4428:23;4424:32;4421:52;;;4469:1;4466;4459:12;4421:52;4508:9;4495:23;4527:30;4551:5;4527:30;:::i;4592:249::-;4661:6;4714:2;4702:9;4693:7;4689:23;4685:32;4682:52;;;4730:1;4727;4720:12;4682:52;4762:9;4756:16;4781:30;4805:5;4781:30;:::i;4846:592::-;4917:6;4925;4978:2;4966:9;4957:7;4953:23;4949:32;4946:52;;;4994:1;4991;4984:12;4946:52;5034:9;5021:23;5063:18;5104:2;5096:6;5093:14;5090:34;;;5120:1;5117;5110:12;5090:34;5158:6;5147:9;5143:22;5133:32;;5203:7;5196:4;5192:2;5188:13;5184:27;5174:55;;5225:1;5222;5215:12;5174:55;5265:2;5252:16;5291:2;5283:6;5280:14;5277:34;;;5307:1;5304;5297:12;5277:34;5352:7;5347:2;5338:6;5334:2;5330:15;5326:24;5323:37;5320:57;;;5373:1;5370;5363:12;5320:57;5404:2;5396:11;;;;;5426:6;;-1:-1:-1;4846:592:1;;-1:-1:-1;;;;4846:592:1:o;5443:180::-;5502:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;-1:-1:-1;5594:23:1;;5443:180;-1:-1:-1;5443:180:1:o;5628:257::-;5669:3;5707:5;5701:12;5734:6;5729:3;5722:19;5750:63;5806:6;5799:4;5794:3;5790:14;5783:4;5776:5;5772:16;5750:63;:::i;:::-;5867:2;5846:15;-1:-1:-1;;5842:29:1;5833:39;;;;5874:4;5829:50;;5628:257;-1:-1:-1;;5628:257:1:o;5890:470::-;6069:3;6107:6;6101:13;6123:53;6169:6;6164:3;6157:4;6149:6;6145:17;6123:53;:::i;:::-;6239:13;;6198:16;;;;6261:57;6239:13;6198:16;6295:4;6283:17;;6261:57;:::i;:::-;6334:20;;5890:470;-1:-1:-1;;;;5890:470:1:o;6573:488::-;-1:-1:-1;;;;;6842:15:1;;;6824:34;;6894:15;;6889:2;6874:18;;6867:43;6941:2;6926:18;;6919:34;;;6989:3;6984:2;6969:18;;6962:31;;;6767:4;;7010:45;;7035:19;;7027:6;7010:45;:::i;:::-;7002:53;6573:488;-1:-1:-1;;;;;;6573:488:1:o;7258:219::-;7407:2;7396:9;7389:21;7370:4;7427:44;7467:2;7456:9;7452:18;7444:6;7427:44;:::i;7832:414::-;8034:2;8016:21;;;8073:2;8053:18;;;8046:30;8112:34;8107:2;8092:18;;8085:62;-1:-1:-1;;;8178:2:1;8163:18;;8156:48;8236:3;8221:19;;7832:414::o;12560:356::-;12762:2;12744:21;;;12781:18;;;12774:30;12840:34;12835:2;12820:18;;12813:62;12907:2;12892:18;;12560:356::o;15545:413::-;15747:2;15729:21;;;15786:2;15766:18;;;15759:30;15825:34;15820:2;15805:18;;15798:62;-1:-1:-1;;;15891:2:1;15876:18;;15869:47;15948:3;15933:19;;15545:413::o;16496:275::-;16567:2;16561:9;16632:2;16613:13;;-1:-1:-1;;16609:27:1;16597:40;;16667:18;16652:34;;16688:22;;;16649:62;16646:88;;;16714:18;;:::i;:::-;16750:2;16743:22;16496:275;;-1:-1:-1;16496:275:1:o;16776:128::-;16816:3;16847:1;16843:6;16840:1;16837:13;16834:39;;;16853:18;;:::i;:::-;-1:-1:-1;16889:9:1;;16776:128::o;16909:120::-;16949:1;16975;16965:35;;16980:18;;:::i;:::-;-1:-1:-1;17014:9:1;;16909:120::o;17034:168::-;17074:7;17140:1;17136;17132:6;17128:14;17125:1;17122:21;17117:1;17110:9;17103:17;17099:45;17096:71;;;17147:18;;:::i;:::-;-1:-1:-1;17187:9:1;;17034:168::o;17207:125::-;17247:4;17275:1;17272;17269:8;17266:34;;;17280:18;;:::i;:::-;-1:-1:-1;17317:9:1;;17207:125::o;17337:258::-;17409:1;17419:113;17433:6;17430:1;17427:13;17419:113;;;17509:11;;;17503:18;17490:11;;;17483:39;17455:2;17448:10;17419:113;;;17550:6;17547:1;17544:13;17541:48;;;-1:-1:-1;;17585:1:1;17567:16;;17560:27;17337:258::o;17600:136::-;17639:3;17667:5;17657:39;;17676:18;;:::i;:::-;-1:-1:-1;;;17712:18:1;;17600:136::o;17741:380::-;17820:1;17816:12;;;;17863;;;17884:61;;17938:4;17930:6;17926:17;17916:27;;17884:61;17991:2;17983:6;17980:14;17960:18;17957:38;17954:161;;;18037:10;18032:3;18028:20;18025:1;18018:31;18072:4;18069:1;18062:15;18100:4;18097:1;18090:15;17954:161;;17741:380;;;:::o;18126:135::-;18165:3;-1:-1:-1;;18186:17:1;;18183:43;;;18206:18;;:::i;:::-;-1:-1:-1;18253:1:1;18242:13;;18126:135::o;18266:112::-;18298:1;18324;18314:35;;18329:18;;:::i;:::-;-1:-1:-1;18363:9:1;;18266:112::o;18383:127::-;18444:10;18439:3;18435:20;18432:1;18425:31;18475:4;18472:1;18465:15;18499:4;18496:1;18489:15;18515:127;18576:10;18571:3;18567:20;18564:1;18557:31;18607:4;18604:1;18597:15;18631:4;18628:1;18621:15;18647:127;18708:10;18703:3;18699:20;18696:1;18689:31;18739:4;18736:1;18729:15;18763:4;18760:1;18753:15;18779:127;18840:10;18835:3;18831:20;18828:1;18821:31;18871:4;18868:1;18861:15;18895:4;18892:1;18885:15;18911:131;-1:-1:-1;;;;;;18985:32:1;;18975:43;;18965:71;;19032:1;19029;19022:12
Swarm Source
ipfs://c1acafb605c8a4d1eb36087682f27ba8d251cf372cc605be4ea62f091dfe3ef7
Loading...
Loading
Loading...
Loading
[ 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.