ERC-721
Overview
Max Total Supply
7,927 AsianID
Holders
413
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
20 AsianIDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AsianIdentity
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-21 */ //SPDX-License-Identifier: MIT // File: gist-270e50cc401a88221663666c2f449393/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: gist-270e50cc401a88221663666c2f449393/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: gist-270e50cc401a88221663666c2f449393/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: gist-270e50cc401a88221663666c2f449393/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: gist-270e50cc401a88221663666c2f449393/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: gist-270e50cc401a88221663666c2f449393/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: gist-270e50cc401a88221663666c2f449393/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: gist-270e50cc401a88221663666c2f449393/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: gist-270e50cc401a88221663666c2f449393/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (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); /** * @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: gist-270e50cc401a88221663666c2f449393/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: gist-270e50cc401a88221663666c2f449393/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require( owner != address(0), "ERC721A: balance query for the zero address" ); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require( _exists(tokenId), "ERC721A: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); require(quantity != 0, "ERC721A: quantity must be greater than 0"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received( address(0), to, updatedIndex, _data ), "ERC721A: transfer to non ERC721Receiver implementer" ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721A: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: gist-270e50cc401a88221663666c2f449393/XrootDotDev.sol pragma solidity 0.8.13; contract AsianIdentity is ERC721A, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.055 ether; uint256 public maxSupply = 8000; uint256 public maxMintAmount = 5; uint256 public nftPerAddressLimit = 5; uint256 public ReservedNFT = 200; bool public paused = true; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721A(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused); uint256 supply = totalSupply(); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply - ReservedNFT); if (msg.sender != owner()) { if (onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "User is not whitelisted."); uint256 ownerTokenCount = balanceOf(msg.sender); require (ownerTokenCount < nftPerAddressLimit); } require(msg.value >= cost * _mintAmount); } _safeMint(msg.sender, _mintAmount); } function isWhitelisted(address _user) public view returns (bool) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { if(whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function seReservedNFT(uint256 _newreserve) public onlyOwner { ReservedNFT = _newreserve; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function AirDrop(address _to, uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); _safeMint(_to, _mintAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ReservedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newreserve","type":"uint256"}],"name":"seReservedNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600991906200020f565b5066c3663566a58000600b55611f40600c556005600d819055600e5560c8600f556010805462ffffff1916620100011790553480156200006757600080fd5b5060405162002c0d38038062002c0d8339810160408190526200008a9162000382565b835184908490620000a39060019060208501906200020f565b508051620000b99060029060208401906200020f565b505050620000d6620000d0620000f660201b60201c565b620000fa565b620000e1826200014c565b620000ec81620001b4565b5050505062000477565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6007546001600160a01b031633146200019b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002bed83398151915260448201526064015b60405180910390fd5b8051620001b09060089060208401906200020f565b5050565b6007546001600160a01b03163314620001ff5760405162461bcd60e51b8152602060048201819052602482015260008051602062002bed833981519152604482015260640162000192565b8051620001b090600a9060208401905b8280546200021d906200043b565b90600052602060002090601f0160209004810192826200024157600085556200028c565b82601f106200025c57805160ff19168380011785556200028c565b828001600101855582156200028c579182015b828111156200028c5782518255916020019190600101906200026f565b506200029a9291506200029e565b5090565b5b808211156200029a57600081556001016200029f565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002dd57600080fd5b81516001600160401b0380821115620002fa57620002fa620002b5565b604051601f8301601f19908116603f01168101908282118183101715620003255762000325620002b5565b816040528381526020925086838588010111156200034257600080fd5b600091505b8382101562000366578582018301518183018401529082019062000347565b83821115620003785760008385830101525b9695505050505050565b600080600080608085870312156200039957600080fd5b84516001600160401b0380821115620003b157600080fd5b620003bf88838901620002cb565b95506020870151915080821115620003d657600080fd5b620003e488838901620002cb565b94506040870151915080821115620003fb57600080fd5b6200040988838901620002cb565b935060608701519150808211156200042057600080fd5b506200042f87828801620002cb565b91505092959194509250565b600181811c908216806200045057607f821691505b6020821081036200047157634e487b7160e01b600052602260045260246000fd5b50919050565b61276680620004876000396000f3fe6080604052600436106102885760003560e01c80636c0360eb1161015a578063ba4e5c49116100c1578063d66dd2191161007a578063d66dd2191461074c578063da3ef23f1461076c578063e985e9c51461078c578063edec5f27146107d5578063f2c4ce1e146107f5578063f2fde38b1461081557600080fd5b8063ba4e5c49146106ab578063ba7d2c76146106cb578063c6682862146106e1578063c87b56dd146106f6578063d0eb26b014610716578063d5abeb011461073657600080fd5b806395d89b411161011357806395d89b411461060e5780639c70b51214610623578063a0712d6814610643578063a22cb46514610656578063a475b5dd14610676578063b88d4fde1461068b57600080fd5b80636c0360eb1461057057806370a0823114610585578063715018a6146105a55780637e5b0054146105ba5780637f00c7a6146105d05780638da5cb5b146105f057600080fd5b80632f745c59116101fe57806344a0d68a116101b757806344a0d68a146104b75780634f6ccce7146104d757806351830227146104f757806355f804b3146105165780635c975abb146105365780636352211e1461055057600080fd5b80632f745c59146104025780633af32abf146104225780633c952764146104425780633ccfd60b1461046257806342842e0e1461046a578063438b63001461048a57600080fd5b8063095ea7b311610250578063095ea7b31461035357806313faede61461037357806318160ddd14610397578063239c70ae146103ac57806323b872dd146103c25780632a2f3a6f146103e257600080fd5b806301ffc9a71461028d57806302329a29146102c257806306fdde03146102e4578063081812fc14610306578063081c8c441461033e575b600080fd5b34801561029957600080fd5b506102ad6102a83660046120b0565b610835565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046120e2565b6108a2565b005b3480156102f057600080fd5b506102f96108e8565b6040516102b99190612155565b34801561031257600080fd5b50610326610321366004612168565b61097a565b6040516001600160a01b0390911681526020016102b9565b34801561034a57600080fd5b506102f9610a05565b34801561035f57600080fd5b506102e261036e366004612198565b610a93565b34801561037f57600080fd5b50610389600b5481565b6040519081526020016102b9565b3480156103a357600080fd5b50600054610389565b3480156103b857600080fd5b50610389600d5481565b3480156103ce57600080fd5b506102e26103dd3660046121c2565b610baa565b3480156103ee57600080fd5b506102e26103fd366004612198565b610bb5565b34801561040e57600080fd5b5061038961041d366004612198565b610c30565b34801561042e57600080fd5b506102ad61043d3660046121fe565b610d8b565b34801561044e57600080fd5b506102e261045d3660046120e2565b610df4565b6102e2610e3a565b34801561047657600080fd5b506102e26104853660046121c2565b610ed8565b34801561049657600080fd5b506104aa6104a53660046121fe565b610ef3565b6040516102b99190612219565b3480156104c357600080fd5b506102e26104d2366004612168565b610f95565b3480156104e357600080fd5b506103896104f2366004612168565b610fc4565b34801561050357600080fd5b506010546102ad90610100900460ff1681565b34801561052257600080fd5b506102e26105313660046122e9565b611026565b34801561054257600080fd5b506010546102ad9060ff1681565b34801561055c57600080fd5b5061032661056b366004612168565b611067565b34801561057c57600080fd5b506102f9611079565b34801561059157600080fd5b506103896105a03660046121fe565b611086565b3480156105b157600080fd5b506102e2611117565b3480156105c657600080fd5b50610389600f5481565b3480156105dc57600080fd5b506102e26105eb366004612168565b61114d565b3480156105fc57600080fd5b506007546001600160a01b0316610326565b34801561061a57600080fd5b506102f961117c565b34801561062f57600080fd5b506010546102ad9062010000900460ff1681565b6102e2610651366004612168565b61118b565b34801561066257600080fd5b506102e2610671366004612332565b611299565b34801561068257600080fd5b506102e261135d565b34801561069757600080fd5b506102e26106a6366004612365565b611398565b3480156106b757600080fd5b506103266106c6366004612168565b6113d1565b3480156106d757600080fd5b50610389600e5481565b3480156106ed57600080fd5b506102f96113fb565b34801561070257600080fd5b506102f9610711366004612168565b611408565b34801561072257600080fd5b506102e2610731366004612168565b61157e565b34801561074257600080fd5b50610389600c5481565b34801561075857600080fd5b506102e2610767366004612168565b6115ad565b34801561077857600080fd5b506102e26107873660046122e9565b6115dc565b34801561079857600080fd5b506102ad6107a73660046123e1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156107e157600080fd5b506102e26107f036600461240b565b611619565b34801561080157600080fd5b506102e26108103660046122e9565b61165b565b34801561082157600080fd5b506102e26108303660046121fe565b611698565b60006001600160e01b031982166380ac58cd60e01b148061086657506001600160e01b03198216635b5e139f60e01b145b8061088157506001600160e01b0319821663780e9d6360e01b145b8061089c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146108d55760405162461bcd60e51b81526004016108cc90612480565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600180546108f7906124b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610923906124b5565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b5050505050905090565b6000610987826000541190565b6109e95760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016108cc565b506000908152600560205260409020546001600160a01b031690565b600a8054610a12906124b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906124b5565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b6000610a9e82611067565b9050806001600160a01b0316836001600160a01b031603610b0c5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016108cc565b336001600160a01b0382161480610b285750610b2881336107a7565b610b9a5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016108cc565b610ba5838383611730565b505050565b610ba583838361178c565b6007546001600160a01b03163314610bdf5760405162461bcd60e51b81526004016108cc90612480565b60005460105460ff1615610bf257600080fd5b60008211610bff57600080fd5b600d54821115610c0e57600080fd5b600c54610c1b8383612505565b1115610c2657600080fd5b610ba58383611a71565b6000610c3b83611086565b8210610c945760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016108cc565b600080549080805b83811015610d2b576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610cef57805192505b876001600160a01b0316836001600160a01b031603610d2257868403610d1b5750935061089c92505050565b6001909301925b50600101610c9c565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016108cc565b6000805b601154811015610deb57826001600160a01b031660118281548110610db657610db661251d565b6000918252602090912001546001600160a01b031603610dd95750600192915050565b80610de381612533565b915050610d8f565b50600092915050565b6007546001600160a01b03163314610e1e5760405162461bcd60e51b81526004016108cc90612480565b60108054911515620100000262ff000019909216919091179055565b6007546001600160a01b03163314610e645760405162461bcd60e51b81526004016108cc90612480565b6000610e786007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ec2576040519150601f19603f3d011682016040523d82523d6000602084013e610ec7565b606091505b5050905080610ed557600080fd5b50565b610ba583838360405180602001604052806000815250611398565b60606000610f0083611086565b905060008167ffffffffffffffff811115610f1d57610f1d61225d565b604051908082528060200260200182016040528015610f46578160200160208202803683370190505b50905060005b82811015610f8d57610f5e8582610c30565b828281518110610f7057610f7061251d565b602090810291909101015280610f8581612533565b915050610f4c565b509392505050565b6007546001600160a01b03163314610fbf5760405162461bcd60e51b81526004016108cc90612480565b600b55565b6000805482106110225760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016108cc565b5090565b6007546001600160a01b031633146110505760405162461bcd60e51b81526004016108cc90612480565b8051611063906008906020840190611f94565b5050565b600061107282611a8b565b5192915050565b60088054610a12906124b5565b60006001600160a01b0382166110f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016108cc565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146111415760405162461bcd60e51b81526004016108cc90612480565b61114b6000611b62565b565b6007546001600160a01b031633146111775760405162461bcd60e51b81526004016108cc90612480565b600d55565b6060600280546108f7906124b5565b60105460ff161561119b57600080fd5b600054816111a857600080fd5b600d548211156111b757600080fd5b600f54600c546111c7919061254c565b6111d18383612505565b11156111dc57600080fd5b6007546001600160a01b0316331461128f5760105462010000900460ff1615156001036112755761120c33610d8b565b6112585760405162461bcd60e51b815260206004820152601860248201527f55736572206973206e6f742077686974656c69737465642e000000000000000060448201526064016108cc565b600061126333611086565b9050600e54811061127357600080fd5b505b81600b546112839190612563565b34101561128f57600080fd5b6110633383611a71565b336001600160a01b038316036112f15760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016108cc565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146113875760405162461bcd60e51b81526004016108cc90612480565b6010805461ff001916610100179055565b6113a384848461178c565b6113af84848484611bb4565b6113cb5760405162461bcd60e51b81526004016108cc90612582565b50505050565b601181815481106113e157600080fd5b6000918252602090912001546001600160a01b0316905081565b60098054610a12906124b5565b6060611415826000541190565b6114795760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108cc565b601054610100900460ff16151560000361151f57600a805461149a906124b5565b80601f01602080910402602001604051908101604052809291908181526020018280546114c6906124b5565b80156115135780601f106114e857610100808354040283529160200191611513565b820191906000526020600020905b8154815290600101906020018083116114f657829003601f168201915b50505050509050919050565b6000611529611cb6565b905060008151116115495760405180602001604052806000815250611577565b8061155384611cc5565b6009604051602001611567939291906125d5565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146115a85760405162461bcd60e51b81526004016108cc90612480565b600e55565b6007546001600160a01b031633146115d75760405162461bcd60e51b81526004016108cc90612480565b600f55565b6007546001600160a01b031633146116065760405162461bcd60e51b81526004016108cc90612480565b8051611063906009906020840190611f94565b6007546001600160a01b031633146116435760405162461bcd60e51b81526004016108cc90612480565b61164f60116000612014565b610ba560118383612032565b6007546001600160a01b031633146116855760405162461bcd60e51b81526004016108cc90612480565b805161106390600a906020840190611f94565b6007546001600160a01b031633146116c25760405162461bcd60e51b81526004016108cc90612480565b6001600160a01b0381166117275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cc565b610ed581611b62565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061179782611a8b565b80519091506000906001600160a01b0316336001600160a01b031614806117ce5750336117c38461097a565b6001600160a01b0316145b806117e0575081516117e090336107a7565b90508061184a5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016108cc565b846001600160a01b031682600001516001600160a01b0316146118be5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016108cc565b6001600160a01b0384166119225760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016108cc565b6119326000848460000151611730565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b4267ffffffffffffffff1602179055908601808352912054909116611a27576119da816000541190565b15611a27578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b611063828260405180602001604052806000815250611dc6565b6040805180820190915260008082526020820152611aaa826000541190565b611b095760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016108cc565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611b58579392505050565b5060001901611b0b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611caa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bf8903390899088908890600401612698565b6020604051808303816000875af1925050508015611c33575060408051601f3d908101601f19168201909252611c30918101906126d5565b60015b611c90573d808015611c61576040519150601f19603f3d011682016040523d82523d6000602084013e611c66565b606091505b508051600003611c885760405162461bcd60e51b81526004016108cc90612582565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cae565b5060015b949350505050565b6060600880546108f7906124b5565b606081600003611cec5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d165780611d0081612533565b9150611d0f9050600a83612708565b9150611cf0565b60008167ffffffffffffffff811115611d3157611d3161225d565b6040519080825280601f01601f191660200182016040528015611d5b576020820181803683370190505b5090505b8415611cae57611d7060018361254c565b9150611d7d600a8661271c565b611d88906030612505565b60f81b818381518110611d9d57611d9d61251d565b60200101906001600160f81b031916908160001a905350611dbf600a86612708565b9450611d5f565b610ba583838360016000546001600160a01b038516611e315760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016108cc565b83600003611e925760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016108cc565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b4267ffffffffffffffff16021790915581905b85811015611f8b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48315611f7f57611f636000888488611bb4565b611f7f5760405162461bcd60e51b81526004016108cc90612582565b60019182019101611f10565b50600055611a6a565b828054611fa0906124b5565b90600052602060002090601f016020900481019282611fc25760008555612008565b82601f10611fdb57805160ff1916838001178555612008565b82800160010185558215612008579182015b82811115612008578251825591602001919060010190611fed565b50611022929150612085565b5080546000825590600052602060002090810190610ed59190612085565b828054828255906000526020600020908101928215612008579160200282015b828111156120085781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612052565b5b808211156110225760008155600101612086565b6001600160e01b031981168114610ed557600080fd5b6000602082840312156120c257600080fd5b81356115778161209a565b803580151581146120dd57600080fd5b919050565b6000602082840312156120f457600080fd5b611577826120cd565b60005b83811015612118578181015183820152602001612100565b838111156113cb5750506000910152565b600081518084526121418160208601602086016120fd565b601f01601f19169290920160200192915050565b6020815260006115776020830184612129565b60006020828403121561217a57600080fd5b5035919050565b80356001600160a01b03811681146120dd57600080fd5b600080604083850312156121ab57600080fd5b6121b483612181565b946020939093013593505050565b6000806000606084860312156121d757600080fd5b6121e084612181565b92506121ee60208501612181565b9150604084013590509250925092565b60006020828403121561221057600080fd5b61157782612181565b6020808252825182820181905260009190848201906040850190845b8181101561225157835183529284019291840191600101612235565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561228e5761228e61225d565b604051601f8501601f19908116603f011681019082821181831017156122b6576122b661225d565b816040528093508581528686860111156122cf57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156122fb57600080fd5b813567ffffffffffffffff81111561231257600080fd5b8201601f8101841361232357600080fd5b611cae84823560208401612273565b6000806040838503121561234557600080fd5b61234e83612181565b915061235c602084016120cd565b90509250929050565b6000806000806080858703121561237b57600080fd5b61238485612181565b935061239260208601612181565b925060408501359150606085013567ffffffffffffffff8111156123b557600080fd5b8501601f810187136123c657600080fd5b6123d587823560208401612273565b91505092959194509250565b600080604083850312156123f457600080fd5b6123fd83612181565b915061235c60208401612181565b6000806020838503121561241e57600080fd5b823567ffffffffffffffff8082111561243657600080fd5b818501915085601f83011261244a57600080fd5b81358181111561245957600080fd5b8660208260051b850101111561246e57600080fd5b60209290920196919550909350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124c957607f821691505b6020821081036124e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612518576125186124ef565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201612545576125456124ef565b5060010190565b60008282101561255e5761255e6124ef565b500390565b600081600019048311821515161561257d5761257d6124ef565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000845160206125e88285838a016120fd565b8551918401916125fb8184848a016120fd565b8554920191600090600181811c908083168061261857607f831692505b858310810361263557634e487b7160e01b85526022600452602485fd5b808015612649576001811461265a57612687565b60ff19851688528388019550612687565b60008b81526020902060005b8581101561267f5781548a820152908401908801612666565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126cb90830184612129565b9695505050505050565b6000602082840312156126e757600080fd5b81516115778161209a565b634e487b7160e01b600052601260045260246000fd5b600082612717576127176126f2565b500490565b60008261272b5761272b6126f2565b50069056fea26469706673582212206845083ba595c077bf2927b5a4424cfe4664fed34aaa7f28e03b71bb1d9dd52264736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e417369616e204964656e746974790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007417369616e4944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d513837374c61467a6f4776514c354848387a6d523647587262454166633777375067616a79746a77517055562f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5776536f775135644b45736444766758717a36636a7736316a51447833444133316545456e674d397267446a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c80636c0360eb1161015a578063ba4e5c49116100c1578063d66dd2191161007a578063d66dd2191461074c578063da3ef23f1461076c578063e985e9c51461078c578063edec5f27146107d5578063f2c4ce1e146107f5578063f2fde38b1461081557600080fd5b8063ba4e5c49146106ab578063ba7d2c76146106cb578063c6682862146106e1578063c87b56dd146106f6578063d0eb26b014610716578063d5abeb011461073657600080fd5b806395d89b411161011357806395d89b411461060e5780639c70b51214610623578063a0712d6814610643578063a22cb46514610656578063a475b5dd14610676578063b88d4fde1461068b57600080fd5b80636c0360eb1461057057806370a0823114610585578063715018a6146105a55780637e5b0054146105ba5780637f00c7a6146105d05780638da5cb5b146105f057600080fd5b80632f745c59116101fe57806344a0d68a116101b757806344a0d68a146104b75780634f6ccce7146104d757806351830227146104f757806355f804b3146105165780635c975abb146105365780636352211e1461055057600080fd5b80632f745c59146104025780633af32abf146104225780633c952764146104425780633ccfd60b1461046257806342842e0e1461046a578063438b63001461048a57600080fd5b8063095ea7b311610250578063095ea7b31461035357806313faede61461037357806318160ddd14610397578063239c70ae146103ac57806323b872dd146103c25780632a2f3a6f146103e257600080fd5b806301ffc9a71461028d57806302329a29146102c257806306fdde03146102e4578063081812fc14610306578063081c8c441461033e575b600080fd5b34801561029957600080fd5b506102ad6102a83660046120b0565b610835565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046120e2565b6108a2565b005b3480156102f057600080fd5b506102f96108e8565b6040516102b99190612155565b34801561031257600080fd5b50610326610321366004612168565b61097a565b6040516001600160a01b0390911681526020016102b9565b34801561034a57600080fd5b506102f9610a05565b34801561035f57600080fd5b506102e261036e366004612198565b610a93565b34801561037f57600080fd5b50610389600b5481565b6040519081526020016102b9565b3480156103a357600080fd5b50600054610389565b3480156103b857600080fd5b50610389600d5481565b3480156103ce57600080fd5b506102e26103dd3660046121c2565b610baa565b3480156103ee57600080fd5b506102e26103fd366004612198565b610bb5565b34801561040e57600080fd5b5061038961041d366004612198565b610c30565b34801561042e57600080fd5b506102ad61043d3660046121fe565b610d8b565b34801561044e57600080fd5b506102e261045d3660046120e2565b610df4565b6102e2610e3a565b34801561047657600080fd5b506102e26104853660046121c2565b610ed8565b34801561049657600080fd5b506104aa6104a53660046121fe565b610ef3565b6040516102b99190612219565b3480156104c357600080fd5b506102e26104d2366004612168565b610f95565b3480156104e357600080fd5b506103896104f2366004612168565b610fc4565b34801561050357600080fd5b506010546102ad90610100900460ff1681565b34801561052257600080fd5b506102e26105313660046122e9565b611026565b34801561054257600080fd5b506010546102ad9060ff1681565b34801561055c57600080fd5b5061032661056b366004612168565b611067565b34801561057c57600080fd5b506102f9611079565b34801561059157600080fd5b506103896105a03660046121fe565b611086565b3480156105b157600080fd5b506102e2611117565b3480156105c657600080fd5b50610389600f5481565b3480156105dc57600080fd5b506102e26105eb366004612168565b61114d565b3480156105fc57600080fd5b506007546001600160a01b0316610326565b34801561061a57600080fd5b506102f961117c565b34801561062f57600080fd5b506010546102ad9062010000900460ff1681565b6102e2610651366004612168565b61118b565b34801561066257600080fd5b506102e2610671366004612332565b611299565b34801561068257600080fd5b506102e261135d565b34801561069757600080fd5b506102e26106a6366004612365565b611398565b3480156106b757600080fd5b506103266106c6366004612168565b6113d1565b3480156106d757600080fd5b50610389600e5481565b3480156106ed57600080fd5b506102f96113fb565b34801561070257600080fd5b506102f9610711366004612168565b611408565b34801561072257600080fd5b506102e2610731366004612168565b61157e565b34801561074257600080fd5b50610389600c5481565b34801561075857600080fd5b506102e2610767366004612168565b6115ad565b34801561077857600080fd5b506102e26107873660046122e9565b6115dc565b34801561079857600080fd5b506102ad6107a73660046123e1565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156107e157600080fd5b506102e26107f036600461240b565b611619565b34801561080157600080fd5b506102e26108103660046122e9565b61165b565b34801561082157600080fd5b506102e26108303660046121fe565b611698565b60006001600160e01b031982166380ac58cd60e01b148061086657506001600160e01b03198216635b5e139f60e01b145b8061088157506001600160e01b0319821663780e9d6360e01b145b8061089c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146108d55760405162461bcd60e51b81526004016108cc90612480565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600180546108f7906124b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610923906124b5565b80156109705780601f1061094557610100808354040283529160200191610970565b820191906000526020600020905b81548152906001019060200180831161095357829003601f168201915b5050505050905090565b6000610987826000541190565b6109e95760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084016108cc565b506000908152600560205260409020546001600160a01b031690565b600a8054610a12906124b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e906124b5565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b6000610a9e82611067565b9050806001600160a01b0316836001600160a01b031603610b0c5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b60648201526084016108cc565b336001600160a01b0382161480610b285750610b2881336107a7565b610b9a5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016108cc565b610ba5838383611730565b505050565b610ba583838361178c565b6007546001600160a01b03163314610bdf5760405162461bcd60e51b81526004016108cc90612480565b60005460105460ff1615610bf257600080fd5b60008211610bff57600080fd5b600d54821115610c0e57600080fd5b600c54610c1b8383612505565b1115610c2657600080fd5b610ba58383611a71565b6000610c3b83611086565b8210610c945760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016108cc565b600080549080805b83811015610d2b576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610cef57805192505b876001600160a01b0316836001600160a01b031603610d2257868403610d1b5750935061089c92505050565b6001909301925b50600101610c9c565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b60648201526084016108cc565b6000805b601154811015610deb57826001600160a01b031660118281548110610db657610db661251d565b6000918252602090912001546001600160a01b031603610dd95750600192915050565b80610de381612533565b915050610d8f565b50600092915050565b6007546001600160a01b03163314610e1e5760405162461bcd60e51b81526004016108cc90612480565b60108054911515620100000262ff000019909216919091179055565b6007546001600160a01b03163314610e645760405162461bcd60e51b81526004016108cc90612480565b6000610e786007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ec2576040519150601f19603f3d011682016040523d82523d6000602084013e610ec7565b606091505b5050905080610ed557600080fd5b50565b610ba583838360405180602001604052806000815250611398565b60606000610f0083611086565b905060008167ffffffffffffffff811115610f1d57610f1d61225d565b604051908082528060200260200182016040528015610f46578160200160208202803683370190505b50905060005b82811015610f8d57610f5e8582610c30565b828281518110610f7057610f7061251d565b602090810291909101015280610f8581612533565b915050610f4c565b509392505050565b6007546001600160a01b03163314610fbf5760405162461bcd60e51b81526004016108cc90612480565b600b55565b6000805482106110225760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016108cc565b5090565b6007546001600160a01b031633146110505760405162461bcd60e51b81526004016108cc90612480565b8051611063906008906020840190611f94565b5050565b600061107282611a8b565b5192915050565b60088054610a12906124b5565b60006001600160a01b0382166110f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016108cc565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146111415760405162461bcd60e51b81526004016108cc90612480565b61114b6000611b62565b565b6007546001600160a01b031633146111775760405162461bcd60e51b81526004016108cc90612480565b600d55565b6060600280546108f7906124b5565b60105460ff161561119b57600080fd5b600054816111a857600080fd5b600d548211156111b757600080fd5b600f54600c546111c7919061254c565b6111d18383612505565b11156111dc57600080fd5b6007546001600160a01b0316331461128f5760105462010000900460ff1615156001036112755761120c33610d8b565b6112585760405162461bcd60e51b815260206004820152601860248201527f55736572206973206e6f742077686974656c69737465642e000000000000000060448201526064016108cc565b600061126333611086565b9050600e54811061127357600080fd5b505b81600b546112839190612563565b34101561128f57600080fd5b6110633383611a71565b336001600160a01b038316036112f15760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016108cc565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146113875760405162461bcd60e51b81526004016108cc90612480565b6010805461ff001916610100179055565b6113a384848461178c565b6113af84848484611bb4565b6113cb5760405162461bcd60e51b81526004016108cc90612582565b50505050565b601181815481106113e157600080fd5b6000918252602090912001546001600160a01b0316905081565b60098054610a12906124b5565b6060611415826000541190565b6114795760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108cc565b601054610100900460ff16151560000361151f57600a805461149a906124b5565b80601f01602080910402602001604051908101604052809291908181526020018280546114c6906124b5565b80156115135780601f106114e857610100808354040283529160200191611513565b820191906000526020600020905b8154815290600101906020018083116114f657829003601f168201915b50505050509050919050565b6000611529611cb6565b905060008151116115495760405180602001604052806000815250611577565b8061155384611cc5565b6009604051602001611567939291906125d5565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146115a85760405162461bcd60e51b81526004016108cc90612480565b600e55565b6007546001600160a01b031633146115d75760405162461bcd60e51b81526004016108cc90612480565b600f55565b6007546001600160a01b031633146116065760405162461bcd60e51b81526004016108cc90612480565b8051611063906009906020840190611f94565b6007546001600160a01b031633146116435760405162461bcd60e51b81526004016108cc90612480565b61164f60116000612014565b610ba560118383612032565b6007546001600160a01b031633146116855760405162461bcd60e51b81526004016108cc90612480565b805161106390600a906020840190611f94565b6007546001600160a01b031633146116c25760405162461bcd60e51b81526004016108cc90612480565b6001600160a01b0381166117275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cc565b610ed581611b62565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061179782611a8b565b80519091506000906001600160a01b0316336001600160a01b031614806117ce5750336117c38461097a565b6001600160a01b0316145b806117e0575081516117e090336107a7565b90508061184a5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016108cc565b846001600160a01b031682600001516001600160a01b0316146118be5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b60648201526084016108cc565b6001600160a01b0384166119225760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016108cc565b6119326000848460000151611730565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b4267ffffffffffffffff1602179055908601808352912054909116611a27576119da816000541190565b15611a27578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b611063828260405180602001604052806000815250611dc6565b6040805180820190915260008082526020820152611aaa826000541190565b611b095760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b60648201526084016108cc565b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215611b58579392505050565b5060001901611b0b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611caa57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bf8903390899088908890600401612698565b6020604051808303816000875af1925050508015611c33575060408051601f3d908101601f19168201909252611c30918101906126d5565b60015b611c90573d808015611c61576040519150601f19603f3d011682016040523d82523d6000602084013e611c66565b606091505b508051600003611c885760405162461bcd60e51b81526004016108cc90612582565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cae565b5060015b949350505050565b6060600880546108f7906124b5565b606081600003611cec5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d165780611d0081612533565b9150611d0f9050600a83612708565b9150611cf0565b60008167ffffffffffffffff811115611d3157611d3161225d565b6040519080825280601f01601f191660200182016040528015611d5b576020820181803683370190505b5090505b8415611cae57611d7060018361254c565b9150611d7d600a8661271c565b611d88906030612505565b60f81b818381518110611d9d57611d9d61251d565b60200101906001600160f81b031916908160001a905350611dbf600a86612708565b9450611d5f565b610ba583838360016000546001600160a01b038516611e315760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016108cc565b83600003611e925760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016108cc565b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b4267ffffffffffffffff16021790915581905b85811015611f8b5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48315611f7f57611f636000888488611bb4565b611f7f5760405162461bcd60e51b81526004016108cc90612582565b60019182019101611f10565b50600055611a6a565b828054611fa0906124b5565b90600052602060002090601f016020900481019282611fc25760008555612008565b82601f10611fdb57805160ff1916838001178555612008565b82800160010185558215612008579182015b82811115612008578251825591602001919060010190611fed565b50611022929150612085565b5080546000825590600052602060002090810190610ed59190612085565b828054828255906000526020600020908101928215612008579160200282015b828111156120085781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612052565b5b808211156110225760008155600101612086565b6001600160e01b031981168114610ed557600080fd5b6000602082840312156120c257600080fd5b81356115778161209a565b803580151581146120dd57600080fd5b919050565b6000602082840312156120f457600080fd5b611577826120cd565b60005b83811015612118578181015183820152602001612100565b838111156113cb5750506000910152565b600081518084526121418160208601602086016120fd565b601f01601f19169290920160200192915050565b6020815260006115776020830184612129565b60006020828403121561217a57600080fd5b5035919050565b80356001600160a01b03811681146120dd57600080fd5b600080604083850312156121ab57600080fd5b6121b483612181565b946020939093013593505050565b6000806000606084860312156121d757600080fd5b6121e084612181565b92506121ee60208501612181565b9150604084013590509250925092565b60006020828403121561221057600080fd5b61157782612181565b6020808252825182820181905260009190848201906040850190845b8181101561225157835183529284019291840191600101612235565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561228e5761228e61225d565b604051601f8501601f19908116603f011681019082821181831017156122b6576122b661225d565b816040528093508581528686860111156122cf57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156122fb57600080fd5b813567ffffffffffffffff81111561231257600080fd5b8201601f8101841361232357600080fd5b611cae84823560208401612273565b6000806040838503121561234557600080fd5b61234e83612181565b915061235c602084016120cd565b90509250929050565b6000806000806080858703121561237b57600080fd5b61238485612181565b935061239260208601612181565b925060408501359150606085013567ffffffffffffffff8111156123b557600080fd5b8501601f810187136123c657600080fd5b6123d587823560208401612273565b91505092959194509250565b600080604083850312156123f457600080fd5b6123fd83612181565b915061235c60208401612181565b6000806020838503121561241e57600080fd5b823567ffffffffffffffff8082111561243657600080fd5b818501915085601f83011261244a57600080fd5b81358181111561245957600080fd5b8660208260051b850101111561246e57600080fd5b60209290920196919550909350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124c957607f821691505b6020821081036124e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612518576125186124ef565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201612545576125456124ef565b5060010190565b60008282101561255e5761255e6124ef565b500390565b600081600019048311821515161561257d5761257d6124ef565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000845160206125e88285838a016120fd565b8551918401916125fb8184848a016120fd565b8554920191600090600181811c908083168061261857607f831692505b858310810361263557634e487b7160e01b85526022600452602485fd5b808015612649576001811461265a57612687565b60ff19851688528388019550612687565b60008b81526020902060005b8581101561267f5781548a820152908401908801612666565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126cb90830184612129565b9695505050505050565b6000602082840312156126e757600080fd5b81516115778161209a565b634e487b7160e01b600052601260045260246000fd5b600082612717576127176126f2565b500490565b60008261272b5761272b6126f2565b50069056fea26469706673582212206845083ba595c077bf2927b5a4424cfe4664fed34aaa7f28e03b71bb1d9dd52264736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e417369616e204964656e746974790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007417369616e4944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d513837374c61467a6f4776514c354848387a6d523647587262454166633777375067616a79746a77517055562f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5776536f775135644b45736444766758717a36636a7736316a51447833444133316545456e674d397267446a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Asian Identity
Arg [1] : _symbol (string): AsianID
Arg [2] : _initBaseURI (string): ipfs://QmQ877LaFzoGvQL5HH8zmR6GXrbEAfc7w7PgajytjwQpUV/
Arg [3] : _initNotRevealedUri (string): ipfs://QmWvSowQ5dKEsdDvgXqz6cjw61jQDx3DA31eEEngM9rgDj/hidden.json
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 417369616e204964656e74697479000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 417369616e494400000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d513837374c61467a6f4776514c354848387a6d52364758
Arg [10] : 7262454166633777375067616a79746a77517055562f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d5776536f775135644b45736444766758717a36636a7736
Arg [13] : 316a51447833444133316545456e674d397267446a2f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42248:4413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28158:422;;;;;;;;;;-1:-1:-1;28158:422:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;28158:422:0;;;;;;;;45744:73;;;;;;;;;;-1:-1:-1;45744:73:0;;;;;:::i;:::-;;:::i;:::-;;30200:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31896:292::-;;;;;;;;;;-1:-1:-1;31896:292:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:1;;;2024:51;;2012:2;1997:18;31896:292:0;1878:203:1;42396:28:0;;;;;;;;;;;;;:::i;31417:413::-;;;;;;;;;;-1:-1:-1;31417:413:0;;;;;:::i;:::-;;:::i;42431:33::-;;;;;;;;;;;;;;;;;;;2669:25:1;;;2657:2;2642:18;42431:33:0;2523:177:1;26333:100:0;;;;;;;;;;-1:-1:-1;26386:7:0;26413:12;26333:100;;42505:32;;;;;;;;;;;;;;;;32923:162;;;;;;;;;;-1:-1:-1;32923:162:0;;;;;:::i;:::-;;:::i;46349:305::-;;;;;;;;;;-1:-1:-1;46349:305:0;;;;;:::i;:::-;;:::i;27038:1048::-;;;;;;;;;;-1:-1:-1;27038:1048:0;;;;;:::i;:::-;;:::i;43833:279::-;;;;;;;;;;-1:-1:-1;43833:279:0;;;;;:::i;:::-;;:::i;45823:95::-;;;;;;;;;;-1:-1:-1;45823:95:0;;;;;:::i;:::-;;:::i;46196:145::-;;;:::i;33156:177::-;;;;;;;;;;-1:-1:-1;33156:177:0;;;;;:::i;:::-;;:::i;44120:348::-;;;;;;;;;;-1:-1:-1;44120:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45176:80::-;;;;;;;;;;-1:-1:-1;45176:80:0;;;;;:::i;:::-;;:::i;26510:228::-;;;;;;;;;;-1:-1:-1;26510:228:0;;;;;:::i;:::-;;:::i;42655:28::-;;;;;;;;;;-1:-1:-1;42655:28:0;;;;;;;;;;;45512:98;;;;;;;;;;-1:-1:-1;45512:98:0;;;;;:::i;:::-;;:::i;42625:25::-;;;;;;;;;;-1:-1:-1;42625:25:0;;;;;;;;30009:124;;;;;;;;;;-1:-1:-1;30009:124:0;;;;;:::i;:::-;;:::i;42328:21::-;;;;;;;;;;;;;:::i;28644:258::-;;;;;;;;;;-1:-1:-1;28644:258:0;;;;;:::i;:::-;;:::i;4729:103::-;;;;;;;;;;;;;:::i;42584:32::-;;;;;;;;;;;;;;;;45262:116;;;;;;;;;;-1:-1:-1;45262:116:0;;;;;:::i;:::-;;:::i;4078:87::-;;;;;;;;;;-1:-1:-1;4151:6:0;;-1:-1:-1;;;;;4151:6:0;4078:87;;30369:104;;;;;;;;;;;;;:::i;42688:34::-;;;;;;;;;;-1:-1:-1;42688:34:0;;;;;;;;;;;43167:660;;;;;;:::i;:::-;;:::i;32260:311::-;;;;;;;;;;-1:-1:-1;32260:311:0;;;;;:::i;:::-;;:::i;44993:65::-;;;;;;;;;;;;;:::i;33404:355::-;;;;;;;;;;-1:-1:-1;33404:355:0;;;;;:::i;:::-;;:::i;42727:37::-;;;;;;;;;;-1:-1:-1;42727:37:0;;;;;:::i;:::-;;:::i;42542:::-;;;;;;;;;;;;;;;;42354;;;;;;;;;;;;;:::i;44474:497::-;;;;;;;;;;-1:-1:-1;44474:497:0;;;;;:::i;:::-;;:::i;45066:104::-;;;;;;;;;;-1:-1:-1;45066:104:0;;;;;:::i;:::-;;:::i;42469:31::-;;;;;;;;;;;;;;;;46080:107;;;;;;;;;;-1:-1:-1;46080:107:0;;;;;:::i;:::-;;:::i;45616:122::-;;;;;;;;;;-1:-1:-1;45616:122:0;;;;;:::i;:::-;;:::i;32642:214::-;;;;;;;;;;-1:-1:-1;32642:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;32813:25:0;;;32784:4;32813:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32642:214;45924:146;;;;;;;;;;-1:-1:-1;45924:146:0;;;;;:::i;:::-;;:::i;45386:120::-;;;;;;;;;;-1:-1:-1;45386:120:0;;;;;:::i;:::-;;:::i;4987:238::-;;;;;;;;;;-1:-1:-1;4987:238:0;;;;;:::i;:::-;;:::i;28158:422::-;28305:4;-1:-1:-1;;;;;;28347:40:0;;-1:-1:-1;;;28347:40:0;;:105;;-1:-1:-1;;;;;;;28404:48:0;;-1:-1:-1;;;28404:48:0;28347:105;:172;;;-1:-1:-1;;;;;;;28469:50:0;;-1:-1:-1;;;28469:50:0;28347:172;:225;;;-1:-1:-1;;;;;;;;;;17507:40:0;;;28536:36;28327:245;28158:422;-1:-1:-1;;28158:422:0:o;45744:73::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;;;;;;;;;45796:6:::1;:15:::0;;-1:-1:-1;;45796:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45744:73::o;30200:100::-;30254:13;30287:5;30280:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30200:100;:::o;31896:292::-;32000:7;32047:16;32055:7;34071:4;34105:12;-1:-1:-1;34095:22:0;34014:111;32047:16;32025:111;;;;-1:-1:-1;;;32025:111:0;;7855:2:1;32025:111:0;;;7837:21:1;7894:2;7874:18;;;7867:30;7933:34;7913:18;;;7906:62;-1:-1:-1;;;7984:18:1;;;7977:43;8037:19;;32025:111:0;7653:409:1;32025:111:0;-1:-1:-1;32156:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32156:24:0;;31896:292::o;42396:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31417:413::-;31490:13;31506:24;31522:7;31506:15;:24::i;:::-;31490:40;;31555:5;-1:-1:-1;;;;;31549:11:0;:2;-1:-1:-1;;;;;31549:11:0;;31541:58;;;;-1:-1:-1;;;31541:58:0;;8269:2:1;31541:58:0;;;8251:21:1;8308:2;8288:18;;;8281:30;8347:34;8327:18;;;8320:62;-1:-1:-1;;;8398:18:1;;;8391:32;8440:19;;31541:58:0;8067:398:1;31541:58:0;2907:10;-1:-1:-1;;;;;31634:21:0;;;;:62;;-1:-1:-1;31659:37:0;31676:5;2907:10;32642:214;:::i;31659:37::-;31612:169;;;;-1:-1:-1;;;31612:169:0;;8672:2:1;31612:169:0;;;8654:21:1;8711:2;8691:18;;;8684:30;8750:34;8730:18;;;8723:62;8821:27;8801:18;;;8794:55;8866:19;;31612:169:0;8470:421:1;31612:169:0;31794:28;31803:2;31807:7;31816:5;31794:8;:28::i;:::-;31479:351;31417:413;;:::o;32923:162::-;33049:28;33059:4;33065:2;33069:7;33049:9;:28::i;46349:305::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;46424:14:::1;26413:12:::0;46470:6:::1;::::0;::::1;;46469:7;46461:16;;;::::0;::::1;;46506:1;46492:11;:15;46484:24;;;::::0;::::1;;46538:13;;46523:11;:28;;46515:37;;;::::0;::::1;;46591:9;::::0;46567:20:::1;46576:11:::0;46567:6;:20:::1;:::i;:::-;:33;;46559:42;;;::::0;::::1;;46615:27;46625:3;46630:11;46615:9;:27::i;27038:1048::-:0;27163:7;27204:16;27214:5;27204:9;:16::i;:::-;27196:5;:24;27188:71;;;;-1:-1:-1;;;27188:71:0;;9363:2:1;27188:71:0;;;9345:21:1;9402:2;9382:18;;;9375:30;9441:34;9421:18;;;9414:62;-1:-1:-1;;;9492:18:1;;;9485:32;9534:19;;27188:71:0;9161:398:1;27188:71:0;27270:22;26413:12;;;27270:22;;27533:466;27553:14;27549:1;:18;27533:466;;;27593:31;27627:14;;;:11;:14;;;;;;;;;27593:48;;;;;;;;;-1:-1:-1;;;;;27593:48:0;;;;;-1:-1:-1;;;27593:48:0;;;;;;;;;;;;27664:28;27660:111;;27737:14;;;-1:-1:-1;27660:111:0;27814:5;-1:-1:-1;;;;;27793:26:0;:17;-1:-1:-1;;;;;27793:26:0;;27789:195;;27863:5;27848:11;:20;27844:85;;-1:-1:-1;27904:1:0;-1:-1:-1;27897:8:0;;-1:-1:-1;;;27897:8:0;27844:85;27951:13;;;;;27789:195;-1:-1:-1;27569:3:0;;27533:466;;;-1:-1:-1;28022:56:0;;-1:-1:-1;;;28022:56:0;;9766:2:1;28022:56:0;;;9748:21:1;9805:2;9785:18;;;9778:30;9844:34;9824:18;;;9817:62;-1:-1:-1;;;9895:18:1;;;9888:44;9949:19;;28022:56:0;9564:410:1;43833:279:0;43892:4;;43909:169;43933:20;:27;43929:31;;43909:169;;;44012:5;-1:-1:-1;;;;;43985:32:0;:20;44006:1;43985:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;43985:23:0;:32;43982:85;;-1:-1:-1;44045:4:0;;43833:279;-1:-1:-1;;43833:279:0:o;43982:85::-;43962:3;;;;:::i;:::-;;;;43909:169;;;-1:-1:-1;44099:5:0;;43833:279;-1:-1:-1;;43833:279:0:o;45823:95::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45888:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45888:24:0;;::::1;::::0;;;::::1;::::0;;45823:95::o;46196:145::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;46249:7:::1;46270;4151:6:::0;;-1:-1:-1;;;;;4151:6:0;;4078:87;46270:7:::1;-1:-1:-1::0;;;;;46262:21:0::1;46291;46262:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46248:69;;;46332:2;46324:11;;;::::0;::::1;;46241:100;46196:145::o:0;33156:177::-;33286:39;33303:4;33309:2;33313:7;33286:39;;;;;;;;;;;;:16;:39::i;44120:348::-;44195:16;44223:23;44249:17;44259:6;44249:9;:17::i;:::-;44223:43;;44273:25;44315:15;44301:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44301:30:0;;44273:58;;44343:9;44338:103;44358:15;44354:1;:19;44338:103;;;44403:30;44423:6;44431:1;44403:19;:30::i;:::-;44389:8;44398:1;44389:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;44375:3;;;;:::i;:::-;;;;44338:103;;;-1:-1:-1;44454:8:0;44120:348;-1:-1:-1;;;44120:348:0:o;45176:80::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45235:4:::1;:15:::0;45176:80::o;26510:228::-;26613:7;26413:12;;26646:5;:21;26638:69;;;;-1:-1:-1;;;26638:69:0;;10663:2:1;26638:69:0;;;10645:21:1;10702:2;10682:18;;;10675:30;10741:34;10721:18;;;10714:62;-1:-1:-1;;;10792:18:1;;;10785:33;10835:19;;26638:69:0;10461:399:1;26638:69:0;-1:-1:-1;26725:5:0;26510:228::o;45512:98::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45583:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45512:98:::0;:::o;30009:124::-;30073:7;30100:20;30112:7;30100:11;:20::i;:::-;:25;;30009:124;-1:-1:-1;;30009:124:0:o;42328:21::-;;;;;;;:::i;28644:258::-;28708:7;-1:-1:-1;;;;;28750:19:0;;28728:112;;;;-1:-1:-1;;;28728:112:0;;11067:2:1;28728:112:0;;;11049:21:1;11106:2;11086:18;;;11079:30;11145:34;11125:18;;;11118:62;-1:-1:-1;;;11196:18:1;;;11189:41;11247:19;;28728:112:0;10865:407:1;28728:112:0;-1:-1:-1;;;;;;28866:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28866:27:0;;28644:258::o;4729:103::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;4794:30:::1;4821:1;4794:18;:30::i;:::-;4729:103::o:0;45262:116::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45339:13:::1;:33:::0;45262:116::o;30369:104::-;30425:13;30458:7;30451:14;;;;;:::i;43167:660::-;43233:6;;;;43232:7;43224:16;;;;;;43247:14;26413:12;43292:15;43284:24;;;;;;43338:13;;43323:11;:28;;43315:37;;;;;;43403:11;;43391:9;;:23;;;;:::i;:::-;43367:20;43376:11;43367:6;:20;:::i;:::-;:47;;43359:56;;;;;;4151:6;;-1:-1:-1;;;;;4151:6:0;43428:10;:21;43424:342;;43466:15;;;;;;;:23;;43485:4;43466:23;43462:243;;43514:25;43528:10;43514:13;:25::i;:::-;43506:62;;;;-1:-1:-1;;;43506:62:0;;11609:2:1;43506:62:0;;;11591:21:1;11648:2;11628:18;;;11621:30;11687:26;11667:18;;;11660:54;11731:18;;43506:62:0;11407:348:1;43506:62:0;43583:23;43609:21;43619:10;43609:9;:21::i;:::-;43583:47;;43672:18;;43654:15;:36;43645:46;;;;;;43491:214;43462:243;43745:11;43738:4;;:18;;;;:::i;:::-;43725:9;:31;;43717:40;;;;;;43781:34;43791:10;43803:11;43781:9;:34::i;32260:311::-;2907:10;-1:-1:-1;;;;;32378:24:0;;;32370:63;;;;-1:-1:-1;;;32370:63:0;;12135:2:1;32370:63:0;;;12117:21:1;12174:2;12154:18;;;12147:30;12213:28;12193:18;;;12186:56;12259:18;;32370:63:0;11933:350:1;32370:63:0;2907:10;32446:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;32446:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;32446:53:0;;;;;;;;;;32515:48;;540:41:1;;;32446:42:0;;2907:10;32515:48;;513:18:1;32515:48:0;;;;;;;32260:311;;:::o;44993:65::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45037:8:::1;:15:::0;;-1:-1:-1;;45037:15:0::1;;;::::0;;44993:65::o;33404:355::-;33563:28;33573:4;33579:2;33583:7;33563:9;:28::i;:::-;33624:48;33647:4;33653:2;33657:7;33666:5;33624:22;:48::i;:::-;33602:149;;;;-1:-1:-1;;;33602:149:0;;;;;;;:::i;:::-;33404:355;;;;:::o;42727:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42727:37:0;;-1:-1:-1;42727:37:0;:::o;42354:::-;;;;;;;:::i;44474:497::-;44572:13;44613:16;44621:7;34071:4;34105:12;-1:-1:-1;34095:22:0;34014:111;44613:16;44597:97;;;;-1:-1:-1;;;44597:97:0;;12910:2:1;44597:97:0;;;12892:21:1;12949:2;12929:18;;;12922:30;12988:34;12968:18;;;12961:62;-1:-1:-1;;;13039:18:1;;;13032:45;13094:19;;44597:97:0;12708:411:1;44597:97:0;44710:8;;;;;;;:17;;44722:5;44710:17;44707:62;;44747:14;44740:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44474:497;;;:::o;44707:62::-;44777:28;44808:10;:8;:10::i;:::-;44777:41;;44863:1;44838:14;44832:28;:32;:133;;;;;;;;;;;;;;;;;44900:14;44916:18;:7;:16;:18::i;:::-;44936:13;44883:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44832:133;44825:140;44474:497;-1:-1:-1;;;44474:497:0:o;45066:104::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45137:18:::1;:27:::0;45066:104::o;46080:107::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;46152:11:::1;:25:::0;46080:107::o;45616:122::-;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45699:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;45924:146::-:0;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;46000:27:::1;46007:20;;46000:27;:::i;:::-;46035:29;:20;46058:6:::0;;46035:29:::1;:::i;45386:120::-:0;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;45468:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;4987:238::-:0;4151:6;;-1:-1:-1;;;;;4151:6:0;2907:10;4298:23;4290:68;;;;-1:-1:-1;;;4290:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5090:22:0;::::1;5068:110;;;::::0;-1:-1:-1;;;5068:110:0;;14984:2:1;5068:110:0::1;::::0;::::1;14966:21:1::0;15023:2;15003:18;;;14996:30;15062:34;15042:18;;;15035:62;-1:-1:-1;;;15113:18:1;;;15106:36;15159:19;;5068:110:0::1;14782:402:1::0;5068:110:0::1;5189:28;5208:8;5189:18;:28::i;39177:196::-:0;39292:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;39292:29:0;-1:-1:-1;;;;;39292:29:0;;;;;;;;;39337:28;;39292:24;;39337:28;;;;;;;39177:196;;;:::o;36957:2102::-;37072:35;37110:20;37122:7;37110:11;:20::i;:::-;37185:18;;37072:58;;-1:-1:-1;37143:22:0;;-1:-1:-1;;;;;37169:34:0;2907:10;-1:-1:-1;;;;;37169:34:0;;:87;;;-1:-1:-1;2907:10:0;37220:20;37232:7;37220:11;:20::i;:::-;-1:-1:-1;;;;;37220:36:0;;37169:87;:154;;;-1:-1:-1;37290:18:0;;37273:50;;2907:10;32642:214;:::i;37273:50::-;37143:181;;37359:17;37337:117;;;;-1:-1:-1;;;37337:117:0;;15391:2:1;37337:117:0;;;15373:21:1;15430:2;15410:18;;;15403:30;15469:34;15449:18;;;15442:62;-1:-1:-1;;;15520:18:1;;;15513:48;15578:19;;37337:117:0;15189:414:1;37337:117:0;37511:4;-1:-1:-1;;;;;37489:26:0;:13;:18;;;-1:-1:-1;;;;;37489:26:0;;37467:114;;;;-1:-1:-1;;;37467:114:0;;15810:2:1;37467:114:0;;;15792:21:1;15849:2;15829:18;;;15822:30;15888:34;15868:18;;;15861:62;-1:-1:-1;;;15939:18:1;;;15932:36;15985:19;;37467:114:0;15608:402:1;37467:114:0;-1:-1:-1;;;;;37600:16:0;;37592:66;;;;-1:-1:-1;;;37592:66:0;;16217:2:1;37592:66:0;;;16199:21:1;16256:2;16236:18;;;16229:30;16295:34;16275:18;;;16268:62;-1:-1:-1;;;16346:18:1;;;16339:35;16391:19;;37592:66:0;16015:401:1;37592:66:0;37779:49;37796:1;37800:7;37809:13;:18;;;37779:8;:49::i;:::-;-1:-1:-1;;;;;38124:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;;;;;38124:31:0;;;-1:-1:-1;;;;;38124:31:0;;;-1:-1:-1;;38124:31:0;;;;;;;38170:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;38170:29:0;;;;;;;;;;;;;38216:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;38261:61:0;;;;-1:-1:-1;;;38306:15:0;38261:61;;;;;;38596:11;;;38626:24;;;;;:29;38596:11;;38626:29;38622:321;;38694:20;38702:11;34071:4;34105:12;-1:-1:-1;34095:22:0;34014:111;38694:20;38690:238;;;38771:18;;;38739:24;;;:11;:24;;;;;;;;:50;;38854:54;;;;38812:96;;-1:-1:-1;;;38812:96:0;-1:-1:-1;;;;;;38812:96:0;;;-1:-1:-1;;;;;38739:50:0;;;38812:96;;;;;;;38690:238;38099:855;38990:7;38986:2;-1:-1:-1;;;;;38971:27:0;38980:4;-1:-1:-1;;;;;38971:27:0;;;;;;;;;;;39009:42;37061:1998;;36957:2102;;;:::o;34133:104::-;34202:27;34212:2;34216:8;34202:27;;;;;;;;;;;;:9;:27::i;29378:569::-;-1:-1:-1;;;;;;;;;;;;;;;;;29513:16:0;29521:7;34071:4;34105:12;-1:-1:-1;34095:22:0;34014:111;29513:16;29505:71;;;;-1:-1:-1;;;29505:71:0;;16623:2:1;29505:71:0;;;16605:21:1;16662:2;16642:18;;;16635:30;16701:34;16681:18;;;16674:62;-1:-1:-1;;;16752:18:1;;;16745:40;16802:19;;29505:71:0;16421:406:1;29505:71:0;29634:7;29614:245;29681:31;29715:17;;;:11;:17;;;;;;;;;29681:51;;;;;;;;;-1:-1:-1;;;;;29681:51:0;;;;;-1:-1:-1;;;29681:51:0;;;;;;;;;;;;29755:28;29751:93;;29815:9;29378:569;-1:-1:-1;;;29378:569:0:o;29751:93::-;-1:-1:-1;;;29654:6:0;29614:245;;5385:191;5478:6;;;-1:-1:-1;;;;;5495:17:0;;;-1:-1:-1;;;;;;5495:17:0;;;;;;;5528:40;;5478:6;;;5495:17;5478:6;;5528:40;;5459:16;;5528:40;5448:128;5385:191;:::o;39938:985::-;40093:4;-1:-1:-1;;;;;40114:13:0;;7104:19;:23;40110:806;;40167:175;;-1:-1:-1;;;40167:175:0;;-1:-1:-1;;;;;40167:36:0;;;;;:175;;2907:10;;40261:4;;40288:7;;40318:5;;40167:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40167:175:0;;;;;;;;-1:-1:-1;;40167:175:0;;;;;;;;;;;;:::i;:::-;;;40146:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40529:6;:13;40546:1;40529:18;40525:321;;40572:109;;-1:-1:-1;;;40572:109:0;;;;;;;:::i;40525:321::-;40796:6;40790:13;40781:6;40777:2;40773:15;40766:38;40146:715;-1:-1:-1;;;;;;40406:55:0;-1:-1:-1;;;40406:55:0;;-1:-1:-1;40399:62:0;;40110:806;-1:-1:-1;40900:4:0;40110:806;39938:985;;;;;;:::o;43046:102::-;43106:13;43135:7;43128:14;;;;;:::i;405:723::-;461:13;682:5;691:1;682:10;678:53;;-1:-1:-1;;709:10:0;;;;;;;;;;;;-1:-1:-1;;;709:10:0;;;;;405:723::o;678:53::-;756:5;741:12;797:78;804:9;;797:78;;830:8;;;;:::i;:::-;;-1:-1:-1;853:10:0;;-1:-1:-1;861:2:0;853:10;;:::i;:::-;;;797:78;;;885:19;917:6;907:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;907:17:0;;885:39;;935:154;942:10;;935:154;;969:11;979:1;969:11;;:::i;:::-;;-1:-1:-1;1038:10:0;1046:2;1038:5;:10;:::i;:::-;1025:24;;:2;:24;:::i;:::-;1012:39;;995:6;1002;995:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;995:56:0;;;;;;;;-1:-1:-1;1066:11:0;1075:2;1066:11;;:::i;:::-;;;935:154;;34600:163;34723:32;34729:2;34733:8;34743:5;34750:4;35161:20;35184:12;-1:-1:-1;;;;;35215:16:0;;35207:62;;;;-1:-1:-1;;;35207:62:0;;18572:2:1;35207:62:0;;;18554:21:1;18611:2;18591:18;;;18584:30;18650:34;18630:18;;;18623:62;-1:-1:-1;;;18701:18:1;;;18694:31;18742:19;;35207:62:0;18370:397:1;35207:62:0;35288:8;35300:1;35288:13;35280:66;;;;-1:-1:-1;;;35280:66:0;;18974:2:1;35280:66:0;;;18956:21:1;19013:2;18993:18;;;18986:30;19052:34;19032:18;;;19025:62;-1:-1:-1;;;19103:18:1;;;19096:38;19151:19;;35280:66:0;18772:404:1;35280:66:0;-1:-1:-1;;;;;35698:16:0;;;;;;:12;:16;;;;;;;;:45;;-1:-1:-1;;;;;;;;;35698:45:0;;-1:-1:-1;;;;;35698:45:0;;;;;;;;;;35758:50;;;;;;;;;;;;;;35825:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;35875:66:0;;;;-1:-1:-1;;;35925:15:0;35875:66;;;;;;;35825:25;;36010:558;36030:8;36026:1;:12;36010:558;;;36069:38;;36094:12;;-1:-1:-1;;;;;36069:38:0;;;36086:1;;36069:38;;36086:1;;36069:38;36130:4;36126:392;;;36193:202;36254:1;36287:2;36320:12;36363:5;36193:22;:202::i;:::-;36159:339;;;;-1:-1:-1;;;36159:339:0;;;;;;;:::i;:::-;36538:14;;;;;36040:3;36010:558;;;-1:-1:-1;36584:12:0;:27;36635:60;33404:355;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:1;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:1;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:1:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:1;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:254;2332:6;2340;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;2432:29;2451:9;2432:29;:::i;:::-;2422:39;2508:2;2493:18;;;;2480:32;;-1:-1:-1;;;2264:254:1:o;2705:328::-;2782:6;2790;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;;2938:38;2972:2;2961:9;2957:18;2938:38;:::i;:::-;2928:48;;3023:2;3012:9;3008:18;2995:32;2985:42;;2705:328;;;;;:::o;3038:186::-;3097:6;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3189:29;3208:9;3189:29;:::i;3229:632::-;3400:2;3452:21;;;3522:13;;3425:18;;;3544:22;;;3371:4;;3400:2;3623:15;;;;3597:2;3582:18;;;3371:4;3666:169;3680:6;3677:1;3674:13;3666:169;;;3741:13;;3729:26;;3810:15;;;;3775:12;;;;3702:1;3695:9;3666:169;;;-1:-1:-1;3852:3:1;;3229:632;-1:-1:-1;;;;;;3229:632:1:o;3866:127::-;3927:10;3922:3;3918:20;3915:1;3908:31;3958:4;3955:1;3948:15;3982:4;3979:1;3972:15;3998:632;4063:5;4093:18;4134:2;4126:6;4123:14;4120:40;;;4140:18;;:::i;:::-;4215:2;4209:9;4183:2;4269:15;;-1:-1:-1;;4265:24:1;;;4291:2;4261:33;4257:42;4245:55;;;4315:18;;;4335:22;;;4312:46;4309:72;;;4361:18;;:::i;:::-;4401:10;4397:2;4390:22;4430:6;4421:15;;4460:6;4452;4445:22;4500:3;4491:6;4486:3;4482:16;4479:25;4476:45;;;4517:1;4514;4507:12;4476:45;4567:6;4562:3;4555:4;4547:6;4543:17;4530:44;4622:1;4615:4;4606:6;4598;4594:19;4590:30;4583:41;;;;3998:632;;;;;:::o;4635:451::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4901:22;;4954:4;4946:13;;4942:27;-1:-1:-1;4932:55:1;;4983:1;4980;4973:12;4932:55;5006:74;5072:7;5067:2;5054:16;5049:2;5045;5041:11;5006:74;:::i;5091:254::-;5156:6;5164;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;5256:29;5275:9;5256:29;:::i;:::-;5246:39;;5304:35;5335:2;5324:9;5320:18;5304:35;:::i;:::-;5294:45;;5091:254;;;;;:::o;5350:667::-;5445:6;5453;5461;5469;5522:3;5510:9;5501:7;5497:23;5493:33;5490:53;;;5539:1;5536;5529:12;5490:53;5562:29;5581:9;5562:29;:::i;:::-;5552:39;;5610:38;5644:2;5633:9;5629:18;5610:38;:::i;:::-;5600:48;;5695:2;5684:9;5680:18;5667:32;5657:42;;5750:2;5739:9;5735:18;5722:32;5777:18;5769:6;5766:30;5763:50;;;5809:1;5806;5799:12;5763:50;5832:22;;5885:4;5877:13;;5873:27;-1:-1:-1;5863:55:1;;5914:1;5911;5904:12;5863:55;5937:74;6003:7;5998:2;5985:16;5980:2;5976;5972:11;5937:74;:::i;:::-;5927:84;;;5350:667;;;;;;;:::o;6022:260::-;6090:6;6098;6151:2;6139:9;6130:7;6126:23;6122:32;6119:52;;;6167:1;6164;6157:12;6119:52;6190:29;6209:9;6190:29;:::i;:::-;6180:39;;6238:38;6272:2;6261:9;6257:18;6238:38;:::i;6287:615::-;6373:6;6381;6434:2;6422:9;6413:7;6409:23;6405:32;6402:52;;;6450:1;6447;6440:12;6402:52;6490:9;6477:23;6519:18;6560:2;6552:6;6549:14;6546:34;;;6576:1;6573;6566:12;6546:34;6614:6;6603:9;6599:22;6589:32;;6659:7;6652:4;6648:2;6644:13;6640:27;6630:55;;6681:1;6678;6671:12;6630:55;6721:2;6708:16;6747:2;6739:6;6736:14;6733:34;;;6763:1;6760;6753:12;6733:34;6816:7;6811:2;6801:6;6798:1;6794:14;6790:2;6786:23;6782:32;6779:45;6776:65;;;6837:1;6834;6827:12;6776:65;6868:2;6860:11;;;;;6890:6;;-1:-1:-1;6287:615:1;;-1:-1:-1;;;;6287:615:1:o;6907:356::-;7109:2;7091:21;;;7128:18;;;7121:30;7187:34;7182:2;7167:18;;7160:62;7254:2;7239:18;;6907:356::o;7268:380::-;7347:1;7343:12;;;;7390;;;7411:61;;7465:4;7457:6;7453:17;7443:27;;7411:61;7518:2;7510:6;7507:14;7487:18;7484:38;7481:161;;7564:10;7559:3;7555:20;7552:1;7545:31;7599:4;7596:1;7589:15;7627:4;7624:1;7617:15;7481:161;;7268:380;;;:::o;8896:127::-;8957:10;8952:3;8948:20;8945:1;8938:31;8988:4;8985:1;8978:15;9012:4;9009:1;9002:15;9028:128;9068:3;9099:1;9095:6;9092:1;9089:13;9086:39;;;9105:18;;:::i;:::-;-1:-1:-1;9141:9:1;;9028:128::o;9979:127::-;10040:10;10035:3;10031:20;10028:1;10021:31;10071:4;10068:1;10061:15;10095:4;10092:1;10085:15;10111:135;10150:3;10171:17;;;10168:43;;10191:18;;:::i;:::-;-1:-1:-1;10238:1:1;10227:13;;10111:135::o;11277:125::-;11317:4;11345:1;11342;11339:8;11336:34;;;11350:18;;:::i;:::-;-1:-1:-1;11387:9:1;;11277:125::o;11760:168::-;11800:7;11866:1;11862;11858:6;11854:14;11851:1;11848:21;11843:1;11836:9;11829:17;11825:45;11822:71;;;11873:18;;:::i;:::-;-1:-1:-1;11913:9:1;;11760:168::o;12288:415::-;12490:2;12472:21;;;12529:2;12509:18;;;12502:30;12568:34;12563:2;12548:18;;12541:62;-1:-1:-1;;;12634:2:1;12619:18;;12612:49;12693:3;12678:19;;12288:415::o;13250:1527::-;13474:3;13512:6;13506:13;13538:4;13551:51;13595:6;13590:3;13585:2;13577:6;13573:15;13551:51;:::i;:::-;13665:13;;13624:16;;;;13687:55;13665:13;13624:16;13709:15;;;13687:55;:::i;:::-;13831:13;;13764:20;;;13804:1;;13891;13913:18;;;;13966;;;;13993:93;;14071:4;14061:8;14057:19;14045:31;;13993:93;14134:2;14124:8;14121:16;14101:18;14098:40;14095:167;;-1:-1:-1;;;14161:33:1;;14217:4;14214:1;14207:15;14247:4;14168:3;14235:17;14095:167;14278:18;14305:110;;;;14429:1;14424:328;;;;14271:481;;14305:110;-1:-1:-1;;14340:24:1;;14326:39;;14385:20;;;;-1:-1:-1;14305:110:1;;14424:328;13197:1;13190:14;;;13234:4;13221:18;;14519:1;14533:169;14547:8;14544:1;14541:15;14533:169;;;14629:14;;14614:13;;;14607:37;14672:16;;;;14564:10;;14533:169;;;14537:3;;14733:8;14726:5;14722:20;14715:27;;14271:481;-1:-1:-1;14768:3:1;;13250:1527;-1:-1:-1;;;;;;;;;;;13250:1527:1:o;17248:489::-;-1:-1:-1;;;;;17517:15:1;;;17499:34;;17569:15;;17564:2;17549:18;;17542:43;17616:2;17601:18;;17594:34;;;17664:3;17659:2;17644:18;;17637:31;;;17442:4;;17685:46;;17711:19;;17703:6;17685:46;:::i;:::-;17677:54;17248:489;-1:-1:-1;;;;;;17248:489:1:o;17742:249::-;17811:6;17864:2;17852:9;17843:7;17839:23;17835:32;17832:52;;;17880:1;17877;17870:12;17832:52;17912:9;17906:16;17931:30;17955:5;17931:30;:::i;17996:127::-;18057:10;18052:3;18048:20;18045:1;18038:31;18088:4;18085:1;18078:15;18112:4;18109:1;18102:15;18128:120;18168:1;18194;18184:35;;18199:18;;:::i;:::-;-1:-1:-1;18233:9:1;;18128:120::o;18253:112::-;18285:1;18311;18301:35;;18316:18;;:::i;:::-;-1:-1:-1;18350:9:1;;18253:112::o
Swarm Source
ipfs://6845083ba595c077bf2927b5a4424cfe4664fed34aaa7f28e03b71bb1d9dd522
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.