ERC-721
Overview
Max Total Supply
148 URN
Holders
26
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 URNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UrinalsNft
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-27 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/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: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/token/ERC721/extensions/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: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: udn-nft-cheaper-gas.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract UrinalsNft is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.033 ether; uint256 public presaleCost = 0.01 ether; uint256 public maxSupply = 4553; uint256 public maxMintAmount = 50; bool public paused = false; mapping(address => bool) public whitelisted; mapping(address => bool) public presaleWallets; constructor( string memory _initBaseURI ) ERC721("UrinalsNFT", "URN") { setBaseURI(_initBaseURI); mint(msg.sender, 31); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = _tokenSupply.current(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if (whitelisted[msg.sender] != true) { if (presaleWallets[msg.sender] != true) { //general public require(msg.value >= cost * _mintAmount); } else { //presale require(msg.value >= presaleCost * _mintAmount); } } } for (uint256 i = 1; i <= _mintAmount; i++) { _tokenSupply.increment(); _safeMint(_to, supply + i); } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setPresaleCost(uint256 _newCost) public onlyOwner { presaleCost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } 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 whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function addPresaleUser(address _user) public onlyOwner { presaleWallets[_user] = true; } function add100PresaleUsers(address[100] memory _users) public onlyOwner { for (uint256 i = 0; i < 2; i++) { presaleWallets[_users[i]] = true; } } function removePresaleUser(address _user) public onlyOwner { presaleWallets[_user] = false; } function totalSupply() public view returns (uint256) { return _tokenSupply.current(); } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","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[100]","name":"_users","type":"address[100]"}],"name":"add100PresaleUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","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":[],"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":"address","name":"_to","type":"address"},{"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":"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":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_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":"_newCost","type":"uint256"}],"name":"setPresaleCost","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":"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":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000a5e565b5066753d533d968000600a55662386f26fc10000600b556111c9600c556032600d556000600e60006101000a81548160ff0219169083151502179055503480156200009b57600080fd5b50604051620053a2380380620053a28339818101604052810190620000c1919062000bd5565b6040518060400160405280600a81526020017f5572696e616c734e4654000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f55524e000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014592919062000a5e565b5080600190805190602001906200015e92919062000a5e565b5050506200018162000175620001ac60201b60201c565b620001b460201b60201c565b62000192816200027a60201b60201c565b620001a533601f6200032560201b60201c565b506200123b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200028a620001ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b06200052f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003009062000ddf565b60405180910390fd5b80600890805190602001906200032192919062000a5e565b5050565b60006200033e60076200055960201b62001df11760201c565b9050600e60009054906101000a900460ff16156200035b57600080fd5b600082116200036957600080fd5b600d548211156200037957600080fd5b600c5482826200038a919062000e8d565b11156200039657600080fd5b620003a66200052f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004ce5760011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004cd5760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004ae5781600a546200049b919062000eea565b341015620004a857600080fd5b620004cc565b81600b54620004be919062000eea565b341015620004cb57600080fd5b5b5b5b6000600190505b8281116200052957620004f460076200056760201b62001dff1760201c565b6200051384828462000507919062000e8d565b6200057d60201b60201c565b8080620005209062001057565b915050620004d5565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b6001816000016000828254019250508190555050565b6200059f828260405180602001604052806000815250620005a360201b60201c565b5050565b620005b583836200061160201b60201c565b620005ca60008484846200080b60201b60201c565b6200060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006039062000d79565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000684576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067b9062000dbd565b60405180910390fd5b6200069581620009c560201b60201c565b15620006d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cf9062000d9b565b60405180910390fd5b620006ec6000838362000a3160201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200073e919062000e8d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620008076000838362000a3660201b60201c565b5050565b6000620008398473ffffffffffffffffffffffffffffffffffffffff1662000a3b60201b62001e151760201c565b15620009b8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200086b620001ac60201b60201c565b8786866040518563ffffffff1660e01b81526004016200088f949392919062000d25565b602060405180830381600087803b158015620008aa57600080fd5b505af1925050508015620008de57506040513d601f19601f82011682018060405250810190620008db919062000ba3565b60015b62000967573d806000811462000911576040519150601f19603f3d011682016040523d82523d6000602084013e62000916565b606091505b506000815114156200095f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009569062000d79565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009bd565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805462000a6c9062000feb565b90600052602060002090601f01602090048101928262000a90576000855562000adc565b82601f1062000aab57805160ff191683800117855562000adc565b8280016001018555821562000adc579182015b8281111562000adb57825182559160200191906001019062000abe565b5b50905062000aeb919062000aef565b5090565b5b8082111562000b0a57600081600090555060010162000af0565b5090565b600062000b2562000b1f8462000e2a565b62000e01565b90508281526020810184848401111562000b445762000b4362001137565b5b62000b5184828562000fb5565b509392505050565b60008151905062000b6a8162001221565b92915050565b600082601f83011262000b885762000b8762001132565b5b815162000b9a84826020860162000b0e565b91505092915050565b60006020828403121562000bbc5762000bbb62001141565b5b600062000bcc8482850162000b59565b91505092915050565b60006020828403121562000bee5762000bed62001141565b5b600082015167ffffffffffffffff81111562000c0f5762000c0e6200113c565b5b62000c1d8482850162000b70565b91505092915050565b62000c318162000f4b565b82525050565b600062000c448262000e60565b62000c50818562000e6b565b935062000c6281856020860162000fb5565b62000c6d8162001146565b840191505092915050565b600062000c8760328362000e7c565b915062000c948262001157565b604082019050919050565b600062000cae601c8362000e7c565b915062000cbb82620011a6565b602082019050919050565b600062000cd560208362000e7c565b915062000ce282620011cf565b602082019050919050565b600062000cfc60208362000e7c565b915062000d0982620011f8565b602082019050919050565b62000d1f8162000fab565b82525050565b600060808201905062000d3c600083018762000c26565b62000d4b602083018662000c26565b62000d5a604083018562000d14565b818103606083015262000d6e818462000c37565b905095945050505050565b6000602082019050818103600083015262000d948162000c78565b9050919050565b6000602082019050818103600083015262000db68162000c9f565b9050919050565b6000602082019050818103600083015262000dd88162000cc6565b9050919050565b6000602082019050818103600083015262000dfa8162000ced565b9050919050565b600062000e0d62000e20565b905062000e1b828262001021565b919050565b6000604051905090565b600067ffffffffffffffff82111562000e485762000e4762001103565b5b62000e538262001146565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e9a8262000fab565b915062000ea78362000fab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000edf5762000ede620010a5565b5b828201905092915050565b600062000ef78262000fab565b915062000f048362000fab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f405762000f3f620010a5565b5b828202905092915050565b600062000f588262000f8b565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000fd557808201518184015260208101905062000fb8565b8381111562000fe5576000848401525b50505050565b600060028204905060018216806200100457607f821691505b602082108114156200101b576200101a620010d4565b5b50919050565b6200102c8262001146565b810181811067ffffffffffffffff821117156200104e576200104d62001103565b5b80604052505050565b6000620010648262000fab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200109a5762001099620010a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200122c8162000f5f565b81146200123857600080fd5b50565b614157806200124b6000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063b2f3e85e116100ab578063d936547e1161006f578063d936547e146107f7578063da3ef23f14610834578063e985e9c51461085d578063ed931e171461089a578063f2fde38b146108c357610230565b8063b2f3e85e14610712578063b88d4fde1461073b578063c668286214610764578063c87b56dd1461078f578063d5abeb01146107cc57610230565b80637f00c7a6116100f25780637f00c7a6146106415780638da5cb5b1461066a5780638fdcf9421461069557806395d89b41146106be578063a22cb465146106e957610230565b80635c975abb1461055a5780636352211e146105855780636c0360eb146105c257806370a08231146105ed578063715018a61461062a57610230565b80632a23d07d116101bc57806342842e0e1161018057806342842e0e1461048d57806344a0d68a146104b65780634a4c560d146104df578063546857c71461050857806355f804b31461053157610230565b80632a23d07d146103d657806330b2264e1461040157806330cc7ae01461043e5780633ccfd60b1461046757806340c10f191461047157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063239c70ae1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613026565b6108ec565b6040516102699190613545565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190612ff9565b6109ce565b005b3480156102a757600080fd5b506102b0610a67565b6040516102bd9190613560565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906130c9565b610af9565b6040516102fa91906134de565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612f8b565b610b7e565b005b34801561033857600080fd5b50610341610c96565b60405161034e9190613782565b60405180910390f35b34801561036357600080fd5b5061036c610c9c565b6040516103799190613782565b60405180910390f35b34801561038e57600080fd5b50610397610cad565b6040516103a49190613782565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612e75565b610cb3565b005b3480156103e257600080fd5b506103eb610d13565b6040516103f89190613782565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190612e08565b610d19565b6040516104359190613545565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612e08565b610d39565b005b61046f610e10565b005b61048b60048036038101906104869190612f8b565b610f05565b005b34801561049957600080fd5b506104b460048036038101906104af9190612e75565b6110cf565b005b3480156104c257600080fd5b506104dd60048036038101906104d891906130c9565b6110ef565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612e08565b611175565b005b34801561051457600080fd5b5061052f600480360381019061052a9190612fcb565b61124c565b005b34801561053d57600080fd5b5061055860048036038101906105539190613080565b61135a565b005b34801561056657600080fd5b5061056f6113f0565b60405161057c9190613545565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906130c9565b611403565b6040516105b991906134de565b60405180910390f35b3480156105ce57600080fd5b506105d76114b5565b6040516105e49190613560565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190612e08565b611543565b6040516106219190613782565b60405180910390f35b34801561063657600080fd5b5061063f6115fb565b005b34801561064d57600080fd5b50610668600480360381019061066391906130c9565b611683565b005b34801561067657600080fd5b5061067f611709565b60405161068c91906134de565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b791906130c9565b611733565b005b3480156106ca57600080fd5b506106d36117b9565b6040516106e09190613560565b60405180910390f35b3480156106f557600080fd5b50610710600480360381019061070b9190612f4b565b61184b565b005b34801561071e57600080fd5b5061073960048036038101906107349190612e08565b611861565b005b34801561074757600080fd5b50610762600480360381019061075d9190612ec8565b611938565b005b34801561077057600080fd5b5061077961199a565b6040516107869190613560565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906130c9565b611a28565b6040516107c39190613560565b60405180910390f35b3480156107d857600080fd5b506107e1611ad2565b6040516107ee9190613782565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190612e08565b611ad8565b60405161082b9190613545565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613080565b611af8565b005b34801561086957600080fd5b50610884600480360381019061087f9190612e35565b611b8e565b6040516108919190613545565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190612e08565b611c22565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190612e08565b611cf9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c757506109c682611e38565b5b9050919050565b6109d6611ea2565b73ffffffffffffffffffffffffffffffffffffffff166109f4611709565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613702565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060008054610a7690613a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613a78565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0482611eaa565b610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a906136e2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8982611403565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf190613742565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c19611ea2565b73ffffffffffffffffffffffffffffffffffffffff161480610c485750610c4781610c42611ea2565b611b8e565b5b610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90613662565b60405180910390fd5b610c918383611f16565b505050565b600a5481565b6000610ca86007611df1565b905090565b600d5481565b610cc4610cbe611ea2565b82611fcf565b610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613762565b60405180910390fd5b610d0e8383836120ad565b505050565b600b5481565b60106020528060005260406000206000915054906101000a900460ff1681565b610d41611ea2565b73ffffffffffffffffffffffffffffffffffffffff16610d5f611709565b73ffffffffffffffffffffffffffffffffffffffff1614610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613702565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e18611ea2565b73ffffffffffffffffffffffffffffffffffffffff16610e36611709565b73ffffffffffffffffffffffffffffffffffffffff1614610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390613702565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610eb2906134c9565b60006040518083038185875af1925050503d8060008114610eef576040519150601f19603f3d011682016040523d82523d6000602084013e610ef4565b606091505b5050905080610f0257600080fd5b50565b6000610f116007611df1565b9050600e60009054906101000a900460ff1615610f2d57600080fd5b60008211610f3a57600080fd5b600d54821115610f4957600080fd5b600c548282610f5891906138ad565b1115610f6357600080fd5b610f6b611709565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110895760011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110885760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461106c5781600a5461105b9190613934565b34101561106757600080fd5b611087565b81600b5461107a9190613934565b34101561108657600080fd5b5b5b5b6000600190505b8281116110c9576110a16007611dff565b6110b68482846110b191906138ad565b612314565b80806110c190613adb565b915050611090565b50505050565b6110ea83838360405180602001604052806000815250611938565b505050565b6110f7611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611115611709565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613702565b60405180910390fd5b80600a8190555050565b61117d611ea2565b73ffffffffffffffffffffffffffffffffffffffff1661119b611709565b73ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e890613702565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611254611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611272611709565b73ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613702565b60405180910390fd5b60005b6002811015611356576001601060008484606481106112ed576112ec613be2565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061134e90613adb565b9150506112cb565b5050565b611362611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611380611709565b73ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613702565b60405180910390fd5b80600890805190602001906113ec929190612b8a565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906136a2565b60405180910390fd5b80915050919050565b600880546114c290613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546114ee90613a78565b801561153b5780601f106115105761010080835404028352916020019161153b565b820191906000526020600020905b81548152906001019060200180831161151e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90613682565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611603611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611621611709565b73ffffffffffffffffffffffffffffffffffffffff1614611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613702565b60405180910390fd5b6116816000612332565b565b61168b611ea2565b73ffffffffffffffffffffffffffffffffffffffff166116a9611709565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613702565b60405180910390fd5b80600d8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173b611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611759611709565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613702565b60405180910390fd5b80600b8190555050565b6060600180546117c890613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546117f490613a78565b80156118415780601f1061181657610100808354040283529160200191611841565b820191906000526020600020905b81548152906001019060200180831161182457829003601f168201915b5050505050905090565b61185d611856611ea2565b83836123f8565b5050565b611869611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611887611709565b73ffffffffffffffffffffffffffffffffffffffff16146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d490613702565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611949611943611ea2565b83611fcf565b611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613762565b60405180910390fd5b61199484848484612565565b50505050565b600980546119a790613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613a78565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b505050505081565b6060611a3382611eaa565b611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613722565b60405180910390fd5b6000611a7c6125c1565b90506000815111611a9c5760405180602001604052806000815250611aca565b80611aa684612653565b6009604051602001611aba93929190613498565b6040516020818303038152906040525b915050919050565b600c5481565b600f6020528060005260406000206000915054906101000a900460ff1681565b611b00611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611b1e611709565b73ffffffffffffffffffffffffffffffffffffffff1614611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b90613702565b60405180910390fd5b8060099080519060200190611b8a929190612b8a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c2a611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611c48611709565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613702565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d01611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611d1f611709565b73ffffffffffffffffffffffffffffffffffffffff1614611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90613702565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906135a2565b60405180910390fd5b611dee81612332565b50565b600081600001549050919050565b6001816000016000828254019250508190555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f8983611403565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fda82611eaa565b612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613642565b60405180910390fd5b600061202483611403565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209357508373ffffffffffffffffffffffffffffffffffffffff1661207b84610af9565b73ffffffffffffffffffffffffffffffffffffffff16145b806120a457506120a38185611b8e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120cd82611403565b73ffffffffffffffffffffffffffffffffffffffff1614612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a906135c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613602565b60405180910390fd5b61219e8383836127b4565b6121a9600082611f16565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f9919061398e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225091906138ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461230f8383836127b9565b505050565b61232e8282604051806020016040528060008152506127be565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90613622565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125589190613545565b60405180910390a3505050565b6125708484846120ad565b61257c84848484612819565b6125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290613582565b60405180910390fd5b50505050565b6060600880546125d090613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546125fc90613a78565b80156126495780601f1061261e57610100808354040283529160200191612649565b820191906000526020600020905b81548152906001019060200180831161262c57829003601f168201915b5050505050905090565b6060600082141561269b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127af565b600082905060005b600082146126cd5780806126b690613adb565b915050600a826126c69190613903565b91506126a3565b60008167ffffffffffffffff8111156126e9576126e8613c11565b5b6040519080825280601f01601f19166020018201604052801561271b5781602001600182028036833780820191505090505b5090505b600085146127a857600182612734919061398e565b9150600a856127439190613b24565b603061274f91906138ad565b60f81b81838151811061276557612764613be2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127a19190613903565b945061271f565b8093505050505b919050565b505050565b505050565b6127c883836129b0565b6127d56000848484612819565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613582565b60405180910390fd5b505050565b600061283a8473ffffffffffffffffffffffffffffffffffffffff16611e15565b156129a3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612863611ea2565b8786866040518563ffffffff1660e01b815260040161288594939291906134f9565b602060405180830381600087803b15801561289f57600080fd5b505af19250505080156128d057506040513d601f19601f820116820180604052508101906128cd9190613053565b60015b612953573d8060008114612900576040519150601f19603f3d011682016040523d82523d6000602084013e612905565b606091505b5060008151141561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290613582565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129a8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a17906136c2565b60405180910390fd5b612a2981611eaa565b15612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a60906135e2565b60405180910390fd5b612a75600083836127b4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac591906138ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b86600083836127b9565b5050565b828054612b9690613a78565b90600052602060002090601f016020900481019282612bb85760008555612bff565b82601f10612bd157805160ff1916838001178555612bff565b82800160010185558215612bff579182015b82811115612bfe578251825591602001919060010190612be3565b5b509050612c0c9190612c10565b5090565b5b80821115612c29576000816000905550600101612c11565b5090565b6000612c40612c3b846137c2565b61379d565b90508082856020860282011115612c5a57612c59613c45565b5b60005b85811015612c8a5781612c708882612d18565b845260208401935060208301925050600181019050612c5d565b5050509392505050565b6000612ca7612ca2846137e8565b61379d565b905082815260208101848484011115612cc357612cc2613c4a565b5b612cce848285613a36565b509392505050565b6000612ce9612ce484613819565b61379d565b905082815260208101848484011115612d0557612d04613c4a565b5b612d10848285613a36565b509392505050565b600081359050612d27816140c5565b92915050565b600082601f830112612d4257612d41613c40565b5b6064612d4f848285612c2d565b91505092915050565b600081359050612d67816140dc565b92915050565b600081359050612d7c816140f3565b92915050565b600081519050612d91816140f3565b92915050565b600082601f830112612dac57612dab613c40565b5b8135612dbc848260208601612c94565b91505092915050565b600082601f830112612dda57612dd9613c40565b5b8135612dea848260208601612cd6565b91505092915050565b600081359050612e028161410a565b92915050565b600060208284031215612e1e57612e1d613c54565b5b6000612e2c84828501612d18565b91505092915050565b60008060408385031215612e4c57612e4b613c54565b5b6000612e5a85828601612d18565b9250506020612e6b85828601612d18565b9150509250929050565b600080600060608486031215612e8e57612e8d613c54565b5b6000612e9c86828701612d18565b9350506020612ead86828701612d18565b9250506040612ebe86828701612df3565b9150509250925092565b60008060008060808587031215612ee257612ee1613c54565b5b6000612ef087828801612d18565b9450506020612f0187828801612d18565b9350506040612f1287828801612df3565b925050606085013567ffffffffffffffff811115612f3357612f32613c4f565b5b612f3f87828801612d97565b91505092959194509250565b60008060408385031215612f6257612f61613c54565b5b6000612f7085828601612d18565b9250506020612f8185828601612d58565b9150509250929050565b60008060408385031215612fa257612fa1613c54565b5b6000612fb085828601612d18565b9250506020612fc185828601612df3565b9150509250929050565b6000610c808284031215612fe257612fe1613c54565b5b6000612ff084828501612d2d565b91505092915050565b60006020828403121561300f5761300e613c54565b5b600061301d84828501612d58565b91505092915050565b60006020828403121561303c5761303b613c54565b5b600061304a84828501612d6d565b91505092915050565b60006020828403121561306957613068613c54565b5b600061307784828501612d82565b91505092915050565b60006020828403121561309657613095613c54565b5b600082013567ffffffffffffffff8111156130b4576130b3613c4f565b5b6130c084828501612dc5565b91505092915050565b6000602082840312156130df576130de613c54565b5b60006130ed84828501612df3565b91505092915050565b6130ff816139c2565b82525050565b61310e816139d4565b82525050565b600061311f8261385f565b6131298185613875565b9350613139818560208601613a45565b61314281613c59565b840191505092915050565b60006131588261386a565b6131628185613891565b9350613172818560208601613a45565b61317b81613c59565b840191505092915050565b60006131918261386a565b61319b81856138a2565b93506131ab818560208601613a45565b80840191505092915050565b600081546131c481613a78565b6131ce81866138a2565b945060018216600081146131e957600181146131fa5761322d565b60ff1983168652818601935061322d565b6132038561384a565b60005b8381101561322557815481890152600182019150602081019050613206565b838801955050505b50505092915050565b6000613243603283613891565b915061324e82613c6a565b604082019050919050565b6000613266602683613891565b915061327182613cb9565b604082019050919050565b6000613289602583613891565b915061329482613d08565b604082019050919050565b60006132ac601c83613891565b91506132b782613d57565b602082019050919050565b60006132cf602483613891565b91506132da82613d80565b604082019050919050565b60006132f2601983613891565b91506132fd82613dcf565b602082019050919050565b6000613315602c83613891565b915061332082613df8565b604082019050919050565b6000613338603883613891565b915061334382613e47565b604082019050919050565b600061335b602a83613891565b915061336682613e96565b604082019050919050565b600061337e602983613891565b915061338982613ee5565b604082019050919050565b60006133a1602083613891565b91506133ac82613f34565b602082019050919050565b60006133c4602c83613891565b91506133cf82613f5d565b604082019050919050565b60006133e7602083613891565b91506133f282613fac565b602082019050919050565b600061340a602f83613891565b915061341582613fd5565b604082019050919050565b600061342d602183613891565b915061343882614024565b604082019050919050565b6000613450600083613886565b915061345b82614073565b600082019050919050565b6000613473603183613891565b915061347e82614076565b604082019050919050565b61349281613a2c565b82525050565b60006134a48286613186565b91506134b08285613186565b91506134bc82846131b7565b9150819050949350505050565b60006134d482613443565b9150819050919050565b60006020820190506134f360008301846130f6565b92915050565b600060808201905061350e60008301876130f6565b61351b60208301866130f6565b6135286040830185613489565b818103606083015261353a8184613114565b905095945050505050565b600060208201905061355a6000830184613105565b92915050565b6000602082019050818103600083015261357a818461314d565b905092915050565b6000602082019050818103600083015261359b81613236565b9050919050565b600060208201905081810360008301526135bb81613259565b9050919050565b600060208201905081810360008301526135db8161327c565b9050919050565b600060208201905081810360008301526135fb8161329f565b9050919050565b6000602082019050818103600083015261361b816132c2565b9050919050565b6000602082019050818103600083015261363b816132e5565b9050919050565b6000602082019050818103600083015261365b81613308565b9050919050565b6000602082019050818103600083015261367b8161332b565b9050919050565b6000602082019050818103600083015261369b8161334e565b9050919050565b600060208201905081810360008301526136bb81613371565b9050919050565b600060208201905081810360008301526136db81613394565b9050919050565b600060208201905081810360008301526136fb816133b7565b9050919050565b6000602082019050818103600083015261371b816133da565b9050919050565b6000602082019050818103600083015261373b816133fd565b9050919050565b6000602082019050818103600083015261375b81613420565b9050919050565b6000602082019050818103600083015261377b81613466565b9050919050565b60006020820190506137976000830184613489565b92915050565b60006137a76137b8565b90506137b38282613aaa565b919050565b6000604051905090565b600067ffffffffffffffff8211156137dd576137dc613c11565b5b602082029050919050565b600067ffffffffffffffff82111561380357613802613c11565b5b61380c82613c59565b9050602081019050919050565b600067ffffffffffffffff82111561383457613833613c11565b5b61383d82613c59565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b882613a2c565b91506138c383613a2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f8576138f7613b55565b5b828201905092915050565b600061390e82613a2c565b915061391983613a2c565b92508261392957613928613b84565b5b828204905092915050565b600061393f82613a2c565b915061394a83613a2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561398357613982613b55565b5b828202905092915050565b600061399982613a2c565b91506139a483613a2c565b9250828210156139b7576139b6613b55565b5b828203905092915050565b60006139cd82613a0c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a63578082015181840152602081019050613a48565b83811115613a72576000848401525b50505050565b60006002820490506001821680613a9057607f821691505b60208210811415613aa457613aa3613bb3565b5b50919050565b613ab382613c59565b810181811067ffffffffffffffff82111715613ad257613ad1613c11565b5b80604052505050565b6000613ae682613a2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1957613b18613b55565b5b600182019050919050565b6000613b2f82613a2c565b9150613b3a83613a2c565b925082613b4a57613b49613b84565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6140ce816139c2565b81146140d957600080fd5b50565b6140e5816139d4565b81146140f057600080fd5b50565b6140fc816139e0565b811461410757600080fd5b50565b61411381613a2c565b811461411e57600080fd5b5056fea2646970667358221220d753a7c3b2a2aea20c087cf7be0c541837617fb24b470bfc1a96e081455ebe3364736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d6574612e7572696e616c732e696f2f6170692f7072656d696e742f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80635c975abb1161012e578063b2f3e85e116100ab578063d936547e1161006f578063d936547e146107f7578063da3ef23f14610834578063e985e9c51461085d578063ed931e171461089a578063f2fde38b146108c357610230565b8063b2f3e85e14610712578063b88d4fde1461073b578063c668286214610764578063c87b56dd1461078f578063d5abeb01146107cc57610230565b80637f00c7a6116100f25780637f00c7a6146106415780638da5cb5b1461066a5780638fdcf9421461069557806395d89b41146106be578063a22cb465146106e957610230565b80635c975abb1461055a5780636352211e146105855780636c0360eb146105c257806370a08231146105ed578063715018a61461062a57610230565b80632a23d07d116101bc57806342842e0e1161018057806342842e0e1461048d57806344a0d68a146104b65780634a4c560d146104df578063546857c71461050857806355f804b31461053157610230565b80632a23d07d146103d657806330b2264e1461040157806330cc7ae01461043e5780633ccfd60b1461046757806340c10f191461047157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063239c70ae1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613026565b6108ec565b6040516102699190613545565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190612ff9565b6109ce565b005b3480156102a757600080fd5b506102b0610a67565b6040516102bd9190613560565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906130c9565b610af9565b6040516102fa91906134de565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612f8b565b610b7e565b005b34801561033857600080fd5b50610341610c96565b60405161034e9190613782565b60405180910390f35b34801561036357600080fd5b5061036c610c9c565b6040516103799190613782565b60405180910390f35b34801561038e57600080fd5b50610397610cad565b6040516103a49190613782565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612e75565b610cb3565b005b3480156103e257600080fd5b506103eb610d13565b6040516103f89190613782565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190612e08565b610d19565b6040516104359190613545565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612e08565b610d39565b005b61046f610e10565b005b61048b60048036038101906104869190612f8b565b610f05565b005b34801561049957600080fd5b506104b460048036038101906104af9190612e75565b6110cf565b005b3480156104c257600080fd5b506104dd60048036038101906104d891906130c9565b6110ef565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612e08565b611175565b005b34801561051457600080fd5b5061052f600480360381019061052a9190612fcb565b61124c565b005b34801561053d57600080fd5b5061055860048036038101906105539190613080565b61135a565b005b34801561056657600080fd5b5061056f6113f0565b60405161057c9190613545565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906130c9565b611403565b6040516105b991906134de565b60405180910390f35b3480156105ce57600080fd5b506105d76114b5565b6040516105e49190613560565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190612e08565b611543565b6040516106219190613782565b60405180910390f35b34801561063657600080fd5b5061063f6115fb565b005b34801561064d57600080fd5b50610668600480360381019061066391906130c9565b611683565b005b34801561067657600080fd5b5061067f611709565b60405161068c91906134de565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b791906130c9565b611733565b005b3480156106ca57600080fd5b506106d36117b9565b6040516106e09190613560565b60405180910390f35b3480156106f557600080fd5b50610710600480360381019061070b9190612f4b565b61184b565b005b34801561071e57600080fd5b5061073960048036038101906107349190612e08565b611861565b005b34801561074757600080fd5b50610762600480360381019061075d9190612ec8565b611938565b005b34801561077057600080fd5b5061077961199a565b6040516107869190613560565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906130c9565b611a28565b6040516107c39190613560565b60405180910390f35b3480156107d857600080fd5b506107e1611ad2565b6040516107ee9190613782565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190612e08565b611ad8565b60405161082b9190613545565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190613080565b611af8565b005b34801561086957600080fd5b50610884600480360381019061087f9190612e35565b611b8e565b6040516108919190613545565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190612e08565b611c22565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190612e08565b611cf9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c757506109c682611e38565b5b9050919050565b6109d6611ea2565b73ffffffffffffffffffffffffffffffffffffffff166109f4611709565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613702565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060008054610a7690613a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613a78565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0482611eaa565b610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a906136e2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8982611403565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf190613742565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c19611ea2565b73ffffffffffffffffffffffffffffffffffffffff161480610c485750610c4781610c42611ea2565b611b8e565b5b610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90613662565b60405180910390fd5b610c918383611f16565b505050565b600a5481565b6000610ca86007611df1565b905090565b600d5481565b610cc4610cbe611ea2565b82611fcf565b610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613762565b60405180910390fd5b610d0e8383836120ad565b505050565b600b5481565b60106020528060005260406000206000915054906101000a900460ff1681565b610d41611ea2565b73ffffffffffffffffffffffffffffffffffffffff16610d5f611709565b73ffffffffffffffffffffffffffffffffffffffff1614610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613702565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e18611ea2565b73ffffffffffffffffffffffffffffffffffffffff16610e36611709565b73ffffffffffffffffffffffffffffffffffffffff1614610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390613702565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610eb2906134c9565b60006040518083038185875af1925050503d8060008114610eef576040519150601f19603f3d011682016040523d82523d6000602084013e610ef4565b606091505b5050905080610f0257600080fd5b50565b6000610f116007611df1565b9050600e60009054906101000a900460ff1615610f2d57600080fd5b60008211610f3a57600080fd5b600d54821115610f4957600080fd5b600c548282610f5891906138ad565b1115610f6357600080fd5b610f6b611709565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110895760011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110885760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461106c5781600a5461105b9190613934565b34101561106757600080fd5b611087565b81600b5461107a9190613934565b34101561108657600080fd5b5b5b5b6000600190505b8281116110c9576110a16007611dff565b6110b68482846110b191906138ad565b612314565b80806110c190613adb565b915050611090565b50505050565b6110ea83838360405180602001604052806000815250611938565b505050565b6110f7611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611115611709565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613702565b60405180910390fd5b80600a8190555050565b61117d611ea2565b73ffffffffffffffffffffffffffffffffffffffff1661119b611709565b73ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e890613702565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611254611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611272611709565b73ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90613702565b60405180910390fd5b60005b6002811015611356576001601060008484606481106112ed576112ec613be2565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061134e90613adb565b9150506112cb565b5050565b611362611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611380611709565b73ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613702565b60405180910390fd5b80600890805190602001906113ec929190612b8a565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906136a2565b60405180910390fd5b80915050919050565b600880546114c290613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546114ee90613a78565b801561153b5780601f106115105761010080835404028352916020019161153b565b820191906000526020600020905b81548152906001019060200180831161151e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90613682565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611603611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611621611709565b73ffffffffffffffffffffffffffffffffffffffff1614611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613702565b60405180910390fd5b6116816000612332565b565b61168b611ea2565b73ffffffffffffffffffffffffffffffffffffffff166116a9611709565b73ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613702565b60405180910390fd5b80600d8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173b611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611759611709565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613702565b60405180910390fd5b80600b8190555050565b6060600180546117c890613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546117f490613a78565b80156118415780601f1061181657610100808354040283529160200191611841565b820191906000526020600020905b81548152906001019060200180831161182457829003601f168201915b5050505050905090565b61185d611856611ea2565b83836123f8565b5050565b611869611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611887611709565b73ffffffffffffffffffffffffffffffffffffffff16146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d490613702565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611949611943611ea2565b83611fcf565b611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613762565b60405180910390fd5b61199484848484612565565b50505050565b600980546119a790613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613a78565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b505050505081565b6060611a3382611eaa565b611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613722565b60405180910390fd5b6000611a7c6125c1565b90506000815111611a9c5760405180602001604052806000815250611aca565b80611aa684612653565b6009604051602001611aba93929190613498565b6040516020818303038152906040525b915050919050565b600c5481565b600f6020528060005260406000206000915054906101000a900460ff1681565b611b00611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611b1e611709565b73ffffffffffffffffffffffffffffffffffffffff1614611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b90613702565b60405180910390fd5b8060099080519060200190611b8a929190612b8a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c2a611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611c48611709565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613702565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d01611ea2565b73ffffffffffffffffffffffffffffffffffffffff16611d1f611709565b73ffffffffffffffffffffffffffffffffffffffff1614611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c90613702565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906135a2565b60405180910390fd5b611dee81612332565b50565b600081600001549050919050565b6001816000016000828254019250508190555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f8983611403565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fda82611eaa565b612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613642565b60405180910390fd5b600061202483611403565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209357508373ffffffffffffffffffffffffffffffffffffffff1661207b84610af9565b73ffffffffffffffffffffffffffffffffffffffff16145b806120a457506120a38185611b8e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120cd82611403565b73ffffffffffffffffffffffffffffffffffffffff1614612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a906135c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613602565b60405180910390fd5b61219e8383836127b4565b6121a9600082611f16565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f9919061398e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225091906138ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461230f8383836127b9565b505050565b61232e8282604051806020016040528060008152506127be565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90613622565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125589190613545565b60405180910390a3505050565b6125708484846120ad565b61257c84848484612819565b6125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290613582565b60405180910390fd5b50505050565b6060600880546125d090613a78565b80601f01602080910402602001604051908101604052809291908181526020018280546125fc90613a78565b80156126495780601f1061261e57610100808354040283529160200191612649565b820191906000526020600020905b81548152906001019060200180831161262c57829003601f168201915b5050505050905090565b6060600082141561269b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127af565b600082905060005b600082146126cd5780806126b690613adb565b915050600a826126c69190613903565b91506126a3565b60008167ffffffffffffffff8111156126e9576126e8613c11565b5b6040519080825280601f01601f19166020018201604052801561271b5781602001600182028036833780820191505090505b5090505b600085146127a857600182612734919061398e565b9150600a856127439190613b24565b603061274f91906138ad565b60f81b81838151811061276557612764613be2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127a19190613903565b945061271f565b8093505050505b919050565b505050565b505050565b6127c883836129b0565b6127d56000848484612819565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90613582565b60405180910390fd5b505050565b600061283a8473ffffffffffffffffffffffffffffffffffffffff16611e15565b156129a3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612863611ea2565b8786866040518563ffffffff1660e01b815260040161288594939291906134f9565b602060405180830381600087803b15801561289f57600080fd5b505af19250505080156128d057506040513d601f19601f820116820180604052508101906128cd9190613053565b60015b612953573d8060008114612900576040519150601f19603f3d011682016040523d82523d6000602084013e612905565b606091505b5060008151141561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290613582565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129a8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a17906136c2565b60405180910390fd5b612a2981611eaa565b15612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a60906135e2565b60405180910390fd5b612a75600083836127b4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac591906138ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b86600083836127b9565b5050565b828054612b9690613a78565b90600052602060002090601f016020900481019282612bb85760008555612bff565b82601f10612bd157805160ff1916838001178555612bff565b82800160010185558215612bff579182015b82811115612bfe578251825591602001919060010190612be3565b5b509050612c0c9190612c10565b5090565b5b80821115612c29576000816000905550600101612c11565b5090565b6000612c40612c3b846137c2565b61379d565b90508082856020860282011115612c5a57612c59613c45565b5b60005b85811015612c8a5781612c708882612d18565b845260208401935060208301925050600181019050612c5d565b5050509392505050565b6000612ca7612ca2846137e8565b61379d565b905082815260208101848484011115612cc357612cc2613c4a565b5b612cce848285613a36565b509392505050565b6000612ce9612ce484613819565b61379d565b905082815260208101848484011115612d0557612d04613c4a565b5b612d10848285613a36565b509392505050565b600081359050612d27816140c5565b92915050565b600082601f830112612d4257612d41613c40565b5b6064612d4f848285612c2d565b91505092915050565b600081359050612d67816140dc565b92915050565b600081359050612d7c816140f3565b92915050565b600081519050612d91816140f3565b92915050565b600082601f830112612dac57612dab613c40565b5b8135612dbc848260208601612c94565b91505092915050565b600082601f830112612dda57612dd9613c40565b5b8135612dea848260208601612cd6565b91505092915050565b600081359050612e028161410a565b92915050565b600060208284031215612e1e57612e1d613c54565b5b6000612e2c84828501612d18565b91505092915050565b60008060408385031215612e4c57612e4b613c54565b5b6000612e5a85828601612d18565b9250506020612e6b85828601612d18565b9150509250929050565b600080600060608486031215612e8e57612e8d613c54565b5b6000612e9c86828701612d18565b9350506020612ead86828701612d18565b9250506040612ebe86828701612df3565b9150509250925092565b60008060008060808587031215612ee257612ee1613c54565b5b6000612ef087828801612d18565b9450506020612f0187828801612d18565b9350506040612f1287828801612df3565b925050606085013567ffffffffffffffff811115612f3357612f32613c4f565b5b612f3f87828801612d97565b91505092959194509250565b60008060408385031215612f6257612f61613c54565b5b6000612f7085828601612d18565b9250506020612f8185828601612d58565b9150509250929050565b60008060408385031215612fa257612fa1613c54565b5b6000612fb085828601612d18565b9250506020612fc185828601612df3565b9150509250929050565b6000610c808284031215612fe257612fe1613c54565b5b6000612ff084828501612d2d565b91505092915050565b60006020828403121561300f5761300e613c54565b5b600061301d84828501612d58565b91505092915050565b60006020828403121561303c5761303b613c54565b5b600061304a84828501612d6d565b91505092915050565b60006020828403121561306957613068613c54565b5b600061307784828501612d82565b91505092915050565b60006020828403121561309657613095613c54565b5b600082013567ffffffffffffffff8111156130b4576130b3613c4f565b5b6130c084828501612dc5565b91505092915050565b6000602082840312156130df576130de613c54565b5b60006130ed84828501612df3565b91505092915050565b6130ff816139c2565b82525050565b61310e816139d4565b82525050565b600061311f8261385f565b6131298185613875565b9350613139818560208601613a45565b61314281613c59565b840191505092915050565b60006131588261386a565b6131628185613891565b9350613172818560208601613a45565b61317b81613c59565b840191505092915050565b60006131918261386a565b61319b81856138a2565b93506131ab818560208601613a45565b80840191505092915050565b600081546131c481613a78565b6131ce81866138a2565b945060018216600081146131e957600181146131fa5761322d565b60ff1983168652818601935061322d565b6132038561384a565b60005b8381101561322557815481890152600182019150602081019050613206565b838801955050505b50505092915050565b6000613243603283613891565b915061324e82613c6a565b604082019050919050565b6000613266602683613891565b915061327182613cb9565b604082019050919050565b6000613289602583613891565b915061329482613d08565b604082019050919050565b60006132ac601c83613891565b91506132b782613d57565b602082019050919050565b60006132cf602483613891565b91506132da82613d80565b604082019050919050565b60006132f2601983613891565b91506132fd82613dcf565b602082019050919050565b6000613315602c83613891565b915061332082613df8565b604082019050919050565b6000613338603883613891565b915061334382613e47565b604082019050919050565b600061335b602a83613891565b915061336682613e96565b604082019050919050565b600061337e602983613891565b915061338982613ee5565b604082019050919050565b60006133a1602083613891565b91506133ac82613f34565b602082019050919050565b60006133c4602c83613891565b91506133cf82613f5d565b604082019050919050565b60006133e7602083613891565b91506133f282613fac565b602082019050919050565b600061340a602f83613891565b915061341582613fd5565b604082019050919050565b600061342d602183613891565b915061343882614024565b604082019050919050565b6000613450600083613886565b915061345b82614073565b600082019050919050565b6000613473603183613891565b915061347e82614076565b604082019050919050565b61349281613a2c565b82525050565b60006134a48286613186565b91506134b08285613186565b91506134bc82846131b7565b9150819050949350505050565b60006134d482613443565b9150819050919050565b60006020820190506134f360008301846130f6565b92915050565b600060808201905061350e60008301876130f6565b61351b60208301866130f6565b6135286040830185613489565b818103606083015261353a8184613114565b905095945050505050565b600060208201905061355a6000830184613105565b92915050565b6000602082019050818103600083015261357a818461314d565b905092915050565b6000602082019050818103600083015261359b81613236565b9050919050565b600060208201905081810360008301526135bb81613259565b9050919050565b600060208201905081810360008301526135db8161327c565b9050919050565b600060208201905081810360008301526135fb8161329f565b9050919050565b6000602082019050818103600083015261361b816132c2565b9050919050565b6000602082019050818103600083015261363b816132e5565b9050919050565b6000602082019050818103600083015261365b81613308565b9050919050565b6000602082019050818103600083015261367b8161332b565b9050919050565b6000602082019050818103600083015261369b8161334e565b9050919050565b600060208201905081810360008301526136bb81613371565b9050919050565b600060208201905081810360008301526136db81613394565b9050919050565b600060208201905081810360008301526136fb816133b7565b9050919050565b6000602082019050818103600083015261371b816133da565b9050919050565b6000602082019050818103600083015261373b816133fd565b9050919050565b6000602082019050818103600083015261375b81613420565b9050919050565b6000602082019050818103600083015261377b81613466565b9050919050565b60006020820190506137976000830184613489565b92915050565b60006137a76137b8565b90506137b38282613aaa565b919050565b6000604051905090565b600067ffffffffffffffff8211156137dd576137dc613c11565b5b602082029050919050565b600067ffffffffffffffff82111561380357613802613c11565b5b61380c82613c59565b9050602081019050919050565b600067ffffffffffffffff82111561383457613833613c11565b5b61383d82613c59565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138b882613a2c565b91506138c383613a2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138f8576138f7613b55565b5b828201905092915050565b600061390e82613a2c565b915061391983613a2c565b92508261392957613928613b84565b5b828204905092915050565b600061393f82613a2c565b915061394a83613a2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561398357613982613b55565b5b828202905092915050565b600061399982613a2c565b91506139a483613a2c565b9250828210156139b7576139b6613b55565b5b828203905092915050565b60006139cd82613a0c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a63578082015181840152602081019050613a48565b83811115613a72576000848401525b50505050565b60006002820490506001821680613a9057607f821691505b60208210811415613aa457613aa3613bb3565b5b50919050565b613ab382613c59565b810181811067ffffffffffffffff82111715613ad257613ad1613c11565b5b80604052505050565b6000613ae682613a2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1957613b18613b55565b5b600182019050919050565b6000613b2f82613a2c565b9150613b3a83613a2c565b925082613b4a57613b49613b84565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6140ce816139c2565b81146140d957600080fd5b50565b6140e5816139d4565b81146140f057600080fd5b50565b6140fc816139e0565b811461410757600080fd5b50565b61411381613a2c565b811461411e57600080fd5b5056fea2646970667358221220d753a7c3b2a2aea20c087cf7be0c541837617fb24b470bfc1a96e081455ebe3364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6d6574612e7572696e616c732e696f2f6170692f7072656d696e742f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://meta.urinals.io/api/premint/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [2] : 68747470733a2f2f6d6574612e7572696e616c732e696f2f6170692f7072656d
Arg [3] : 696e742f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38791:4018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41781:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39031:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42505:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39155:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39071:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39278:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41975:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42614:192;;;:::i;:::-;;39647:855;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41178:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41868:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42200:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41510:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39195:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38959:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;41380:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41272:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42089:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38987:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40510:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39117:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39228:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41622:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42390:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;41781:79::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41846:6:::1;41837;;:15;;;;;;;;;;;;;;;;;;41781:79:::0;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;39031:33::-;;;;:::o;42505:101::-;42549:7;42576:22;:12;:20;:22::i;:::-;42569:29;;42505:101;:::o;39155:33::-;;;;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;39071:39::-;;;;:::o;39278:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;41975:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42068:5:::1;42047:11;:18;42059:5;42047:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;41975:106:::0;:::o;42614:192::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42671:12:::1;42697:10;42689:24;;42735:21;42689:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42670:101;;;42790:7;42782:16;;;::::0;::::1;;42659:147;42614:192::o:0;39647:855::-;39721:14;39738:22;:12;:20;:22::i;:::-;39721:39;;39780:6;;;;;;;;;;;39779:7;39771:16;;;;;;39820:1;39806:11;:15;39798:24;;;;;;39856:13;;39841:11;:28;;39833:37;;;;;;39913:9;;39898:11;39889:6;:20;;;;:::i;:::-;:33;;39881:42;;;;;;39954:7;:5;:7::i;:::-;39940:21;;:10;:21;;;39936:412;;40009:4;39982:31;;:11;:23;39994:10;39982:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;39978:359;;40068:4;40038:34;;:14;:26;40053:10;40038:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;40034:288;;40163:11;40156:4;;:18;;;;:::i;:::-;40143:9;:31;;40135:40;;;;;;40034:288;;;40290:11;40276;;:25;;;;:::i;:::-;40263:9;:38;;40255:47;;;;;;40034:288;39978:359;39936:412;40365:9;40377:1;40365:13;;40360:135;40385:11;40380:1;:16;40360:135;;40418:24;:12;:22;:24::i;:::-;40457:26;40467:3;40481:1;40472:6;:10;;;;:::i;:::-;40457:9;:26::i;:::-;40398:3;;;;;:::i;:::-;;;;40360:135;;;;39710:792;39647:855;;:::o;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;41178:86::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41248:8:::1;41241:4;:15;;;;41178:86:::0;:::o;41868:99::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41955:4:::1;41934:11;:18;41946:5;41934:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;41868:99:::0;:::o;42200:182::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42289:9:::1;42284:91;42308:1;42304;:5;42284:91;;;42359:4;42331:14;:25;42346:6;42353:1;42346:9;;;;;;;:::i;:::-;;;;;;42331:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;42311:3;;;;;:::i;:::-;;;;42284:91;;;;42200:182:::0;:::o;41510:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41595:11:::1;41585:7;:21;;;;;;;;;;;;:::i;:::-;;41510:104:::0;:::o;39195:26::-;;;;;;;;;;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;38959:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;41380:122::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41477:17:::1;41461:13;:33;;;;41380:122:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;41272:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41356:8:::1;41342:11;:22;;;;41272:100:::0;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;42089:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42180:4:::1;42156:14;:21;42171:5;42156:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;42089:103:::0;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;38987:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40510:642::-;40628:13;40681:16;40689:7;40681;:16::i;:::-;40659:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40785:28;40816:10;:8;:10::i;:::-;40785:41;;40888:1;40863:14;40857:28;:32;:287;;;;;;;;;;;;;;;;;40981:14;41022:18;:7;:16;:18::i;:::-;41067:13;40938:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40857:287;40837:307;;;40510:642;;;:::o;39117:31::-;;;;:::o;39228:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;41622:151::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41748:17:::1;41732:13;:33;;;;;;;;;;;;:::i;:::-;;41622:151:::0;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;42390:107::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42484:5:::1;42460:14;:21;42475:5;42460:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42390:107:::0;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;39516:108::-;39576:13;39609:7;39602:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39516:108;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;27:659:1:-;123:5;148:81;164:64;221:6;164:64;:::i;:::-;148:81;:::i;:::-;139:90;;249:5;275:6;325:3;317:4;309:6;305:17;300:3;296:27;293:36;290:143;;;344:79;;:::i;:::-;290:143;457:1;442:238;467:6;464:1;461:13;442:238;;;535:3;564:37;597:3;585:10;564:37;:::i;:::-;559:3;552:50;631:4;626:3;622:14;615:21;;665:4;660:3;656:14;649:21;;502:178;489:1;486;482:9;477:14;;442:238;;;446:14;129:557;;27:659;;;;;:::o;692:410::-;769:5;794:65;810:48;851:6;810:48;:::i;:::-;794:65;:::i;:::-;785:74;;882:6;875:5;868:21;920:4;913:5;909:16;958:3;949:6;944:3;940:16;937:25;934:112;;;965:79;;:::i;:::-;934:112;1055:41;1089:6;1084:3;1079;1055:41;:::i;:::-;775:327;692:410;;;;;:::o;1108:412::-;1186:5;1211:66;1227:49;1269:6;1227:49;:::i;:::-;1211:66;:::i;:::-;1202:75;;1300:6;1293:5;1286:21;1338:4;1331:5;1327:16;1376:3;1367:6;1362:3;1358:16;1355:25;1352:112;;;1383:79;;:::i;:::-;1352:112;1473:41;1507:6;1502:3;1497;1473:41;:::i;:::-;1192:328;1108:412;;;;;:::o;1526:139::-;1572:5;1610:6;1597:20;1588:29;;1626:33;1653:5;1626:33;:::i;:::-;1526:139;;;;:::o;1691:343::-;1762:5;1811:3;1804:4;1796:6;1792:17;1788:27;1778:122;;1819:79;;:::i;:::-;1778:122;1923:4;1945:83;2024:3;2016:6;2008;1945:83;:::i;:::-;1936:92;;1768:266;1691:343;;;;:::o;2040:133::-;2083:5;2121:6;2108:20;2099:29;;2137:30;2161:5;2137:30;:::i;:::-;2040:133;;;;:::o;2179:137::-;2224:5;2262:6;2249:20;2240:29;;2278:32;2304:5;2278:32;:::i;:::-;2179:137;;;;:::o;2322:141::-;2378:5;2409:6;2403:13;2394:22;;2425:32;2451:5;2425:32;:::i;:::-;2322:141;;;;:::o;2482:338::-;2537:5;2586:3;2579:4;2571:6;2567:17;2563:27;2553:122;;2594:79;;:::i;:::-;2553:122;2711:6;2698:20;2736:78;2810:3;2802:6;2795:4;2787:6;2783:17;2736:78;:::i;:::-;2727:87;;2543:277;2482:338;;;;:::o;2840:340::-;2896:5;2945:3;2938:4;2930:6;2926:17;2922:27;2912:122;;2953:79;;:::i;:::-;2912:122;3070:6;3057:20;3095:79;3170:3;3162:6;3155:4;3147:6;3143:17;3095:79;:::i;:::-;3086:88;;2902:278;2840:340;;;;:::o;3186:139::-;3232:5;3270:6;3257:20;3248:29;;3286:33;3313:5;3286:33;:::i;:::-;3186:139;;;;:::o;3331:329::-;3390:6;3439:2;3427:9;3418:7;3414:23;3410:32;3407:119;;;3445:79;;:::i;:::-;3407:119;3565:1;3590:53;3635:7;3626:6;3615:9;3611:22;3590:53;:::i;:::-;3580:63;;3536:117;3331:329;;;;:::o;3666:474::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4015:118;3666:474;;;;;:::o;4146:619::-;4223:6;4231;4239;4288:2;4276:9;4267:7;4263:23;4259:32;4256:119;;;4294:79;;:::i;:::-;4256:119;4414:1;4439:53;4484:7;4475:6;4464:9;4460:22;4439:53;:::i;:::-;4429:63;;4385:117;4541:2;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4512:118;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4146:619;;;;;:::o;4771:943::-;4866:6;4874;4882;4890;4939:3;4927:9;4918:7;4914:23;4910:33;4907:120;;;4946:79;;:::i;:::-;4907:120;5066:1;5091:53;5136:7;5127:6;5116:9;5112:22;5091:53;:::i;:::-;5081:63;;5037:117;5193:2;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5164:118;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5477:2;5466:9;5462:18;5449:32;5508:18;5500:6;5497:30;5494:117;;;5530:79;;:::i;:::-;5494:117;5635:62;5689:7;5680:6;5669:9;5665:22;5635:62;:::i;:::-;5625:72;;5420:287;4771:943;;;;;;;:::o;5720:468::-;5785:6;5793;5842:2;5830:9;5821:7;5817:23;5813:32;5810:119;;;5848:79;;:::i;:::-;5810:119;5968:1;5993:53;6038:7;6029:6;6018:9;6014:22;5993:53;:::i;:::-;5983:63;;5939:117;6095:2;6121:50;6163:7;6154:6;6143:9;6139:22;6121:50;:::i;:::-;6111:60;;6066:115;5720:468;;;;;:::o;6194:474::-;6262:6;6270;6319:2;6307:9;6298:7;6294:23;6290:32;6287:119;;;6325:79;;:::i;:::-;6287:119;6445:1;6470:53;6515:7;6506:6;6495:9;6491:22;6470:53;:::i;:::-;6460:63;;6416:117;6572:2;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6543:118;6194:474;;;;;:::o;6674:381::-;6758:6;6807:4;6795:9;6786:7;6782:23;6778:34;6775:121;;;6815:79;;:::i;:::-;6775:121;6935:1;6960:78;7030:7;7021:6;7010:9;7006:22;6960:78;:::i;:::-;6950:88;;6906:142;6674:381;;;;:::o;7061:323::-;7117:6;7166:2;7154:9;7145:7;7141:23;7137:32;7134:119;;;7172:79;;:::i;:::-;7134:119;7292:1;7317:50;7359:7;7350:6;7339:9;7335:22;7317:50;:::i;:::-;7307:60;;7263:114;7061:323;;;;:::o;7390:327::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7623:1;7648:52;7692:7;7683:6;7672:9;7668:22;7648:52;:::i;:::-;7638:62;;7594:116;7390:327;;;;:::o;7723:349::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:63;8047:7;8038:6;8027:9;8023:22;7992:63;:::i;:::-;7982:73;;7938:127;7723:349;;;;:::o;8078:509::-;8147:6;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8350:1;8339:9;8335:17;8322:31;8380:18;8372:6;8369:30;8366:117;;;8402:79;;:::i;:::-;8366:117;8507:63;8562:7;8553:6;8542:9;8538:22;8507:63;:::i;:::-;8497:73;;8293:287;8078:509;;;;:::o;8593:329::-;8652:6;8701:2;8689:9;8680:7;8676:23;8672:32;8669:119;;;8707:79;;:::i;:::-;8669:119;8827:1;8852:53;8897:7;8888:6;8877:9;8873:22;8852:53;:::i;:::-;8842:63;;8798:117;8593:329;;;;:::o;8928:118::-;9015:24;9033:5;9015:24;:::i;:::-;9010:3;9003:37;8928:118;;:::o;9052:109::-;9133:21;9148:5;9133:21;:::i;:::-;9128:3;9121:34;9052:109;;:::o;9167:360::-;9253:3;9281:38;9313:5;9281:38;:::i;:::-;9335:70;9398:6;9393:3;9335:70;:::i;:::-;9328:77;;9414:52;9459:6;9454:3;9447:4;9440:5;9436:16;9414:52;:::i;:::-;9491:29;9513:6;9491:29;:::i;:::-;9486:3;9482:39;9475:46;;9257:270;9167:360;;;;:::o;9533:364::-;9621:3;9649:39;9682:5;9649:39;:::i;:::-;9704:71;9768:6;9763:3;9704:71;:::i;:::-;9697:78;;9784:52;9829:6;9824:3;9817:4;9810:5;9806:16;9784:52;:::i;:::-;9861:29;9883:6;9861:29;:::i;:::-;9856:3;9852:39;9845:46;;9625:272;9533:364;;;;:::o;9903:377::-;10009:3;10037:39;10070:5;10037:39;:::i;:::-;10092:89;10174:6;10169:3;10092:89;:::i;:::-;10085:96;;10190:52;10235:6;10230:3;10223:4;10216:5;10212:16;10190:52;:::i;:::-;10267:6;10262:3;10258:16;10251:23;;10013:267;9903:377;;;;:::o;10310:845::-;10413:3;10450:5;10444:12;10479:36;10505:9;10479:36;:::i;:::-;10531:89;10613:6;10608:3;10531:89;:::i;:::-;10524:96;;10651:1;10640:9;10636:17;10667:1;10662:137;;;;10813:1;10808:341;;;;10629:520;;10662:137;10746:4;10742:9;10731;10727:25;10722:3;10715:38;10782:6;10777:3;10773:16;10766:23;;10662:137;;10808:341;10875:38;10907:5;10875:38;:::i;:::-;10935:1;10949:154;10963:6;10960:1;10957:13;10949:154;;;11037:7;11031:14;11027:1;11022:3;11018:11;11011:35;11087:1;11078:7;11074:15;11063:26;;10985:4;10982:1;10978:12;10973:17;;10949:154;;;11132:6;11127:3;11123:16;11116:23;;10815:334;;10629:520;;10417:738;;10310:845;;;;:::o;11161:366::-;11303:3;11324:67;11388:2;11383:3;11324:67;:::i;:::-;11317:74;;11400:93;11489:3;11400:93;:::i;:::-;11518:2;11513:3;11509:12;11502:19;;11161:366;;;:::o;11533:::-;11675:3;11696:67;11760:2;11755:3;11696:67;:::i;:::-;11689:74;;11772:93;11861:3;11772:93;:::i;:::-;11890:2;11885:3;11881:12;11874:19;;11533:366;;;:::o;11905:::-;12047:3;12068:67;12132:2;12127:3;12068:67;:::i;:::-;12061:74;;12144:93;12233:3;12144:93;:::i;:::-;12262:2;12257:3;12253:12;12246:19;;11905:366;;;:::o;12277:::-;12419:3;12440:67;12504:2;12499:3;12440:67;:::i;:::-;12433:74;;12516:93;12605:3;12516:93;:::i;:::-;12634:2;12629:3;12625:12;12618:19;;12277:366;;;:::o;12649:::-;12791:3;12812:67;12876:2;12871:3;12812:67;:::i;:::-;12805:74;;12888:93;12977:3;12888:93;:::i;:::-;13006:2;13001:3;12997:12;12990:19;;12649:366;;;:::o;13021:::-;13163:3;13184:67;13248:2;13243:3;13184:67;:::i;:::-;13177:74;;13260:93;13349:3;13260:93;:::i;:::-;13378:2;13373:3;13369:12;13362:19;;13021:366;;;:::o;13393:::-;13535:3;13556:67;13620:2;13615:3;13556:67;:::i;:::-;13549:74;;13632:93;13721:3;13632:93;:::i;:::-;13750:2;13745:3;13741:12;13734:19;;13393:366;;;:::o;13765:::-;13907:3;13928:67;13992:2;13987:3;13928:67;:::i;:::-;13921:74;;14004:93;14093:3;14004:93;:::i;:::-;14122:2;14117:3;14113:12;14106:19;;13765:366;;;:::o;14137:::-;14279:3;14300:67;14364:2;14359:3;14300:67;:::i;:::-;14293:74;;14376:93;14465:3;14376:93;:::i;:::-;14494:2;14489:3;14485:12;14478:19;;14137:366;;;:::o;14509:::-;14651:3;14672:67;14736:2;14731:3;14672:67;:::i;:::-;14665:74;;14748:93;14837:3;14748:93;:::i;:::-;14866:2;14861:3;14857:12;14850:19;;14509:366;;;:::o;14881:::-;15023:3;15044:67;15108:2;15103:3;15044:67;:::i;:::-;15037:74;;15120:93;15209:3;15120:93;:::i;:::-;15238:2;15233:3;15229:12;15222:19;;14881:366;;;:::o;15253:::-;15395:3;15416:67;15480:2;15475:3;15416:67;:::i;:::-;15409:74;;15492:93;15581:3;15492:93;:::i;:::-;15610:2;15605:3;15601:12;15594:19;;15253:366;;;:::o;15625:::-;15767:3;15788:67;15852:2;15847:3;15788:67;:::i;:::-;15781:74;;15864:93;15953:3;15864:93;:::i;:::-;15982:2;15977:3;15973:12;15966:19;;15625:366;;;:::o;15997:::-;16139:3;16160:67;16224:2;16219:3;16160:67;:::i;:::-;16153:74;;16236:93;16325:3;16236:93;:::i;:::-;16354:2;16349:3;16345:12;16338:19;;15997:366;;;:::o;16369:::-;16511:3;16532:67;16596:2;16591:3;16532:67;:::i;:::-;16525:74;;16608:93;16697:3;16608:93;:::i;:::-;16726:2;16721:3;16717:12;16710:19;;16369:366;;;:::o;16741:398::-;16900:3;16921:83;17002:1;16997:3;16921:83;:::i;:::-;16914:90;;17013:93;17102:3;17013:93;:::i;:::-;17131:1;17126:3;17122:11;17115:18;;16741:398;;;:::o;17145:366::-;17287:3;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17384:93;17473:3;17384:93;:::i;:::-;17502:2;17497:3;17493:12;17486:19;;17145:366;;;:::o;17517:118::-;17604:24;17622:5;17604:24;:::i;:::-;17599:3;17592:37;17517:118;;:::o;17641:589::-;17866:3;17888:95;17979:3;17970:6;17888:95;:::i;:::-;17881:102;;18000:95;18091:3;18082:6;18000:95;:::i;:::-;17993:102;;18112:92;18200:3;18191:6;18112:92;:::i;:::-;18105:99;;18221:3;18214:10;;17641:589;;;;;;:::o;18236:379::-;18420:3;18442:147;18585:3;18442:147;:::i;:::-;18435:154;;18606:3;18599:10;;18236:379;;;:::o;18621:222::-;18714:4;18752:2;18741:9;18737:18;18729:26;;18765:71;18833:1;18822:9;18818:17;18809:6;18765:71;:::i;:::-;18621:222;;;;:::o;18849:640::-;19044:4;19082:3;19071:9;19067:19;19059:27;;19096:71;19164:1;19153:9;19149:17;19140:6;19096:71;:::i;:::-;19177:72;19245:2;19234:9;19230:18;19221:6;19177:72;:::i;:::-;19259;19327:2;19316:9;19312:18;19303:6;19259:72;:::i;:::-;19378:9;19372:4;19368:20;19363:2;19352:9;19348:18;19341:48;19406:76;19477:4;19468:6;19406:76;:::i;:::-;19398:84;;18849:640;;;;;;;:::o;19495:210::-;19582:4;19620:2;19609:9;19605:18;19597:26;;19633:65;19695:1;19684:9;19680:17;19671:6;19633:65;:::i;:::-;19495:210;;;;:::o;19711:313::-;19824:4;19862:2;19851:9;19847:18;19839:26;;19911:9;19905:4;19901:20;19897:1;19886:9;19882:17;19875:47;19939:78;20012:4;20003:6;19939:78;:::i;:::-;19931:86;;19711:313;;;;:::o;20030:419::-;20196:4;20234:2;20223:9;20219:18;20211:26;;20283:9;20277:4;20273:20;20269:1;20258:9;20254:17;20247:47;20311:131;20437:4;20311:131;:::i;:::-;20303:139;;20030:419;;;:::o;20455:::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:::-;21046:4;21084:2;21073:9;21069:18;21061:26;;21133:9;21127:4;21123:20;21119:1;21108:9;21104:17;21097:47;21161:131;21287:4;21161:131;:::i;:::-;21153:139;;20880:419;;;:::o;21305:::-;21471:4;21509:2;21498:9;21494:18;21486:26;;21558:9;21552:4;21548:20;21544:1;21533:9;21529:17;21522:47;21586:131;21712:4;21586:131;:::i;:::-;21578:139;;21305:419;;;:::o;21730:::-;21896:4;21934:2;21923:9;21919:18;21911:26;;21983:9;21977:4;21973:20;21969:1;21958:9;21954:17;21947:47;22011:131;22137:4;22011:131;:::i;:::-;22003:139;;21730:419;;;:::o;22155:::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22833:9;22827:4;22823:20;22819:1;22808:9;22804:17;22797:47;22861:131;22987:4;22861:131;:::i;:::-;22853:139;;22580:419;;;:::o;23005:::-;23171:4;23209:2;23198:9;23194:18;23186:26;;23258:9;23252:4;23248:20;23244:1;23233:9;23229:17;23222:47;23286:131;23412:4;23286:131;:::i;:::-;23278:139;;23005:419;;;:::o;23430:::-;23596:4;23634:2;23623:9;23619:18;23611:26;;23683:9;23677:4;23673:20;23669:1;23658:9;23654:17;23647:47;23711:131;23837:4;23711:131;:::i;:::-;23703:139;;23430:419;;;:::o;23855:::-;24021:4;24059:2;24048:9;24044:18;24036:26;;24108:9;24102:4;24098:20;24094:1;24083:9;24079:17;24072:47;24136:131;24262:4;24136:131;:::i;:::-;24128:139;;23855:419;;;:::o;24280:::-;24446:4;24484:2;24473:9;24469:18;24461:26;;24533:9;24527:4;24523:20;24519:1;24508:9;24504:17;24497:47;24561:131;24687:4;24561:131;:::i;:::-;24553:139;;24280:419;;;:::o;24705:::-;24871:4;24909:2;24898:9;24894:18;24886:26;;24958:9;24952:4;24948:20;24944:1;24933:9;24929:17;24922:47;24986:131;25112:4;24986:131;:::i;:::-;24978:139;;24705:419;;;:::o;25130:::-;25296:4;25334:2;25323:9;25319:18;25311:26;;25383:9;25377:4;25373:20;25369:1;25358:9;25354:17;25347:47;25411:131;25537:4;25411:131;:::i;:::-;25403:139;;25130:419;;;:::o;25555:::-;25721:4;25759:2;25748:9;25744:18;25736:26;;25808:9;25802:4;25798:20;25794:1;25783:9;25779:17;25772:47;25836:131;25962:4;25836:131;:::i;:::-;25828:139;;25555:419;;;:::o;25980:::-;26146:4;26184:2;26173:9;26169:18;26161:26;;26233:9;26227:4;26223:20;26219:1;26208:9;26204:17;26197:47;26261:131;26387:4;26261:131;:::i;:::-;26253:139;;25980:419;;;:::o;26405:::-;26571:4;26609:2;26598:9;26594:18;26586:26;;26658:9;26652:4;26648:20;26644:1;26633:9;26629:17;26622:47;26686:131;26812:4;26686:131;:::i;:::-;26678:139;;26405:419;;;:::o;26830:222::-;26923:4;26961:2;26950:9;26946:18;26938:26;;26974:71;27042:1;27031:9;27027:17;27018:6;26974:71;:::i;:::-;26830:222;;;;:::o;27058:129::-;27092:6;27119:20;;:::i;:::-;27109:30;;27148:33;27176:4;27168:6;27148:33;:::i;:::-;27058:129;;;:::o;27193:75::-;27226:6;27259:2;27253:9;27243:19;;27193:75;:::o;27274:251::-;27351:4;27441:18;27433:6;27430:30;27427:56;;;27463:18;;:::i;:::-;27427:56;27513:4;27505:6;27501:17;27493:25;;27274:251;;;:::o;27531:307::-;27592:4;27682:18;27674:6;27671:30;27668:56;;;27704:18;;:::i;:::-;27668:56;27742:29;27764:6;27742:29;:::i;:::-;27734:37;;27826:4;27820;27816:15;27808:23;;27531:307;;;:::o;27844:308::-;27906:4;27996:18;27988:6;27985:30;27982:56;;;28018:18;;:::i;:::-;27982:56;28056:29;28078:6;28056:29;:::i;:::-;28048:37;;28140:4;28134;28130:15;28122:23;;27844:308;;;:::o;28158:141::-;28207:4;28230:3;28222:11;;28253:3;28250:1;28243:14;28287:4;28284:1;28274:18;28266:26;;28158:141;;;:::o;28305:98::-;28356:6;28390:5;28384:12;28374:22;;28305:98;;;:::o;28409:99::-;28461:6;28495:5;28489:12;28479:22;;28409:99;;;:::o;28514:168::-;28597:11;28631:6;28626:3;28619:19;28671:4;28666:3;28662:14;28647:29;;28514:168;;;;:::o;28688:147::-;28789:11;28826:3;28811:18;;28688:147;;;;:::o;28841:169::-;28925:11;28959:6;28954:3;28947:19;28999:4;28994:3;28990:14;28975:29;;28841:169;;;;:::o;29016:148::-;29118:11;29155:3;29140:18;;29016:148;;;;:::o;29170:305::-;29210:3;29229:20;29247:1;29229:20;:::i;:::-;29224:25;;29263:20;29281:1;29263:20;:::i;:::-;29258:25;;29417:1;29349:66;29345:74;29342:1;29339:81;29336:107;;;29423:18;;:::i;:::-;29336:107;29467:1;29464;29460:9;29453:16;;29170:305;;;;:::o;29481:185::-;29521:1;29538:20;29556:1;29538:20;:::i;:::-;29533:25;;29572:20;29590:1;29572:20;:::i;:::-;29567:25;;29611:1;29601:35;;29616:18;;:::i;:::-;29601:35;29658:1;29655;29651:9;29646:14;;29481:185;;;;:::o;29672:348::-;29712:7;29735:20;29753:1;29735:20;:::i;:::-;29730:25;;29769:20;29787:1;29769:20;:::i;:::-;29764:25;;29957:1;29889:66;29885:74;29882:1;29879:81;29874:1;29867:9;29860:17;29856:105;29853:131;;;29964:18;;:::i;:::-;29853:131;30012:1;30009;30005:9;29994:20;;29672:348;;;;:::o;30026:191::-;30066:4;30086:20;30104:1;30086:20;:::i;:::-;30081:25;;30120:20;30138:1;30120:20;:::i;:::-;30115:25;;30159:1;30156;30153:8;30150:34;;;30164:18;;:::i;:::-;30150:34;30209:1;30206;30202:9;30194:17;;30026:191;;;;:::o;30223:96::-;30260:7;30289:24;30307:5;30289:24;:::i;:::-;30278:35;;30223:96;;;:::o;30325:90::-;30359:7;30402:5;30395:13;30388:21;30377:32;;30325:90;;;:::o;30421:149::-;30457:7;30497:66;30490:5;30486:78;30475:89;;30421:149;;;:::o;30576:126::-;30613:7;30653:42;30646:5;30642:54;30631:65;;30576:126;;;:::o;30708:77::-;30745:7;30774:5;30763:16;;30708:77;;;:::o;30791:154::-;30875:6;30870:3;30865;30852:30;30937:1;30928:6;30923:3;30919:16;30912:27;30791:154;;;:::o;30951:307::-;31019:1;31029:113;31043:6;31040:1;31037:13;31029:113;;;31128:1;31123:3;31119:11;31113:18;31109:1;31104:3;31100:11;31093:39;31065:2;31062:1;31058:10;31053:15;;31029:113;;;31160:6;31157:1;31154:13;31151:101;;;31240:1;31231:6;31226:3;31222:16;31215:27;31151:101;31000:258;30951:307;;;:::o;31264:320::-;31308:6;31345:1;31339:4;31335:12;31325:22;;31392:1;31386:4;31382:12;31413:18;31403:81;;31469:4;31461:6;31457:17;31447:27;;31403:81;31531:2;31523:6;31520:14;31500:18;31497:38;31494:84;;;31550:18;;:::i;:::-;31494:84;31315:269;31264:320;;;:::o;31590:281::-;31673:27;31695:4;31673:27;:::i;:::-;31665:6;31661:40;31803:6;31791:10;31788:22;31767:18;31755:10;31752:34;31749:62;31746:88;;;31814:18;;:::i;:::-;31746:88;31854:10;31850:2;31843:22;31633:238;31590:281;;:::o;31877:233::-;31916:3;31939:24;31957:5;31939:24;:::i;:::-;31930:33;;31985:66;31978:5;31975:77;31972:103;;;32055:18;;:::i;:::-;31972:103;32102:1;32095:5;32091:13;32084:20;;31877:233;;;:::o;32116:176::-;32148:1;32165:20;32183:1;32165:20;:::i;:::-;32160:25;;32199:20;32217:1;32199:20;:::i;:::-;32194:25;;32238:1;32228:35;;32243:18;;:::i;:::-;32228:35;32284:1;32281;32277:9;32272:14;;32116:176;;;;:::o;32298:180::-;32346:77;32343:1;32336:88;32443:4;32440:1;32433:15;32467:4;32464:1;32457:15;32484:180;32532:77;32529:1;32522:88;32629:4;32626:1;32619:15;32653:4;32650:1;32643:15;32670:180;32718:77;32715:1;32708:88;32815:4;32812:1;32805:15;32839:4;32836:1;32829:15;32856:180;32904:77;32901:1;32894:88;33001:4;32998:1;32991:15;33025:4;33022:1;33015:15;33042:180;33090:77;33087:1;33080:88;33187:4;33184:1;33177:15;33211:4;33208:1;33201:15;33228:117;33337:1;33334;33327:12;33351:117;33460:1;33457;33450:12;33474:117;33583:1;33580;33573:12;33597:117;33706:1;33703;33696:12;33720:117;33829:1;33826;33819:12;33843:102;33884:6;33935:2;33931:7;33926:2;33919:5;33915:14;33911:28;33901:38;;33843:102;;;:::o;33951:237::-;34091:34;34087:1;34079:6;34075:14;34068:58;34160:20;34155:2;34147:6;34143:15;34136:45;33951:237;:::o;34194:225::-;34334:34;34330:1;34322:6;34318:14;34311:58;34403:8;34398:2;34390:6;34386:15;34379:33;34194:225;:::o;34425:224::-;34565:34;34561:1;34553:6;34549:14;34542:58;34634:7;34629:2;34621:6;34617:15;34610:32;34425:224;:::o;34655:178::-;34795:30;34791:1;34783:6;34779:14;34772:54;34655:178;:::o;34839:223::-;34979:34;34975:1;34967:6;34963:14;34956:58;35048:6;35043:2;35035:6;35031:15;35024:31;34839:223;:::o;35068:175::-;35208:27;35204:1;35196:6;35192:14;35185:51;35068:175;:::o;35249:231::-;35389:34;35385:1;35377:6;35373:14;35366:58;35458:14;35453:2;35445:6;35441:15;35434:39;35249:231;:::o;35486:243::-;35626:34;35622:1;35614:6;35610:14;35603:58;35695:26;35690:2;35682:6;35678:15;35671:51;35486:243;:::o;35735:229::-;35875:34;35871:1;35863:6;35859:14;35852:58;35944:12;35939:2;35931:6;35927:15;35920:37;35735:229;:::o;35970:228::-;36110:34;36106:1;36098:6;36094:14;36087:58;36179:11;36174:2;36166:6;36162:15;36155:36;35970:228;:::o;36204:182::-;36344:34;36340:1;36332:6;36328:14;36321:58;36204:182;:::o;36392:231::-;36532:34;36528:1;36520:6;36516:14;36509:58;36601:14;36596:2;36588:6;36584:15;36577:39;36392:231;:::o;36629:182::-;36769:34;36765:1;36757:6;36753:14;36746:58;36629:182;:::o;36817:234::-;36957:34;36953:1;36945:6;36941:14;36934:58;37026:17;37021:2;37013:6;37009:15;37002:42;36817:234;:::o;37057:220::-;37197:34;37193:1;37185:6;37181:14;37174:58;37266:3;37261:2;37253:6;37249:15;37242:28;37057:220;:::o;37283:114::-;;:::o;37403:236::-;37543:34;37539:1;37531:6;37527:14;37520:58;37612:19;37607:2;37599:6;37595:15;37588:44;37403:236;:::o;37645:122::-;37718:24;37736:5;37718:24;:::i;:::-;37711:5;37708:35;37698:63;;37757:1;37754;37747:12;37698:63;37645:122;:::o;37773:116::-;37843:21;37858:5;37843:21;:::i;:::-;37836:5;37833:32;37823:60;;37879:1;37876;37869:12;37823:60;37773:116;:::o;37895:120::-;37967:23;37984:5;37967:23;:::i;:::-;37960:5;37957:34;37947:62;;38005:1;38002;37995:12;37947:62;37895:120;:::o;38021:122::-;38094:24;38112:5;38094:24;:::i;:::-;38087:5;38084:35;38074:63;;38133:1;38130;38123:12;38074:63;38021:122;:::o
Swarm Source
ipfs://d753a7c3b2a2aea20c087cf7be0c541837617fb24b470bfc1a96e081455ebe33
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.