Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
2,216 EIEN
Holders
664
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 EIENLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Eien
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-06 */ // 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 (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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.7.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 /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.7.0) (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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // 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.7.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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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: Eien.sol pragma solidity ^0.8.17; // // /$$$$$$$$ /$$$$$$ /$$$$$$$$ /$$ /$$ // | $$_____/|_ $$_/| $$_____/| $$$ | $$ // | $$ | $$ | $$ | $$$$| $$ // | $$$$$ | $$ | $$$$$ | $$ $$ $$ // | $$__/ | $$ | $$__/ | $$ $$$$ // | $$ | $$ | $$ | $$\ $$$ // | $$$$$$$$ /$$$$$$| $$$$$$$$| $$ \ $$ // |________/|______/|________/|__/ \__/ // // EIEN Contract by arufa // Twitter: https://twitter.com/arufa_nft contract Eien is Ownable, ERC721 { uint256 public constant MAX_SUPPLY = 3333; uint256 public constant PUB_SALE_MINT_PRICE = 0.05 ether; uint256 public constant PRE_SALE_MINT_PRICE = 0.03 ether; uint256 private constant MAX_MINTS_PER_TX = 100; using Counters for Counters.Counter; Counters.Counter internal _totalSupply; uint16 internal constant NOT_SALE_ACTIVE_FLG = 0; uint16 internal constant PRE_SALE_ACTIVE_FLG = 1; uint16 internal constant FREE_MINT_ACTIVE_FLG = 2; uint16 internal constant THANKS_SALE_ACTIVE_FLG = 3; uint16 internal constant PUB_SALE_ACTIVE_FLG = 4; uint16 public saleState = NOT_SALE_ACTIVE_FLG; mapping(address => uint256) private _preSaleList; mapping(address => uint256) private _freeMintList; mapping(address => uint256) private _thanksSaleList; mapping(address => uint256) private _pubSaleList; string public baseTokenURI; string constant public uriSuffix = ".json"; address public TeamWallet = 0xFBc8Ff6F62b84F535f224F9B14b5B92F37cb1263; constructor() ERC721("Eien", "EIEN") {} /** /$$$$$$$ /$$ /$$ /$$$$$$$ /$$ /$$$$$$ /$$$$$$ /$$$$$$$$ /$$ /$$ /$$ /$$ /$$$$$$ /$$$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ | $$__ $$| $$ | $$| $$__ $$| $$ |_ $$_/ /$$__ $$ | $$_____/| $$ | $$| $$$ | $$ /$$__ $$|__ $$__/|_ $$_/ /$$__ $$| $$$ | $$ /$$__ $$ | $$ \ $$| $$ | $$| $$ \ $$| $$ | $$ | $$ \__/ | $$ | $$ | $$| $$$$| $$| $$ \__/ | $$ | $$ | $$ \ $$| $$$$| $$| $$ \__/ | $$$$$$$/| $$ | $$| $$$$$$$ | $$ | $$ | $$ | $$$$$ | $$ | $$| $$ $$ $$| $$ | $$ | $$ | $$ | $$| $$ $$ $$| $$$$$$ | $$____/ | $$ | $$| $$__ $$| $$ | $$ | $$ | $$__/ | $$ | $$| $$ $$$$| $$ | $$ | $$ | $$ | $$| $$ $$$$ \____ $$ | $$ | $$ | $$| $$ \ $$| $$ | $$ | $$ $$ | $$ | $$ | $$| $$\ $$$| $$ $$ | $$ | $$ | $$ | $$| $$\ $$$ /$$ \ $$ | $$ | $$$$$$/| $$$$$$$/| $$$$$$$$ /$$$$$$| $$$$$$/ | $$ | $$$$$$/| $$ \ $$| $$$$$$/ | $$ /$$$$$$| $$$$$$/| $$ \ $$| $$$$$$/ |__/ \______/ |_______/ |________/|______/ \______/ |__/ \______/ |__/ \__/ \______/ |__/ |______/ \______/ |__/ \__/ \______/ */ function PreSale(uint256 quantity) public payable { uint256 price = PRE_SALE_MINT_PRICE; uint256 maxMintPerTransaction = MAX_MINTS_PER_TX; uint256 maxSupply = MAX_SUPPLY; uint256 remainingMint = _preSaleList[msg.sender]; require(tx.origin == msg.sender, "Cannot be called by a contract"); require(saleState == PRE_SALE_ACTIVE_FLG, "PreSale is paused"); require(quantity <= maxMintPerTransaction, "More than max per transaction"); require(remainingMint != 0, "There are no NFTs left to claim in the pre sale"); require(remainingMint >= quantity, "User max mint limit"); require(quantity + _totalSupply.current() <= maxSupply, "Exceeded maximum supply"); require(msg.value == price * quantity, "Value sent is not correct"); for (uint256 i = 1; i <= quantity; i++) { _preSaleList[msg.sender] = remainingMint-i; _totalSupply.increment(); _safeMint(msg.sender, _totalSupply.current()); } } function FreeMint(uint256 quantity) public payable { uint256 maxMintPerTransaction = MAX_MINTS_PER_TX; uint256 maxSupply = MAX_SUPPLY; uint256 remainingMint = _freeMintList[msg.sender]; require(tx.origin == msg.sender, "Cannot be called by a contract"); require(saleState == FREE_MINT_ACTIVE_FLG, "FreeMint is paused"); require(quantity <= maxMintPerTransaction, "More than max per transaction"); require(remainingMint != 0, "There are no NFTs left to claim in the free mint"); require(remainingMint >= quantity, "User max mint limit"); require(quantity + _totalSupply.current() <= maxSupply, "Exceeded maximum supply"); for (uint256 i = 1; i <= quantity; i++) { _freeMintList[msg.sender] = remainingMint-i; _totalSupply.increment(); _safeMint(msg.sender, _totalSupply.current()); } } function ThanksSale(uint256 quantity) public payable { uint256 price = PUB_SALE_MINT_PRICE; uint256 maxMintPerTransaction = MAX_MINTS_PER_TX; uint256 maxSupply = MAX_SUPPLY; uint256 remainingMint = _thanksSaleList[msg.sender]; require(tx.origin == msg.sender, "Cannot be called by a contract"); require(saleState == THANKS_SALE_ACTIVE_FLG, "ThanksSale is paused"); require(quantity <= maxMintPerTransaction, "More than max per transaction"); require(remainingMint != 0, "There are no NFTs left to claim in the thanks sale"); require(remainingMint >= quantity, "User max mint limit"); require(quantity + _totalSupply.current() <= maxSupply, "Exceeded maximum supply"); require(msg.value == price * quantity, "Value sent is not correct"); for (uint256 i = 1; i <= quantity; i++) { _thanksSaleList[msg.sender] = remainingMint-i; _totalSupply.increment(); _safeMint(msg.sender, _totalSupply.current()); } } function PubSale(uint256 quantity) public payable { uint256 price = PUB_SALE_MINT_PRICE; uint256 maxMintPerTransaction = MAX_MINTS_PER_TX; uint256 maxSupply = MAX_SUPPLY; uint256 remainingMint = _pubSaleList[msg.sender]; require(tx.origin == msg.sender, "Cannot be called by a contract"); require(saleState == PUB_SALE_ACTIVE_FLG, "PubSale is paused"); require(quantity <= maxMintPerTransaction, "More than max per transaction"); require(remainingMint != 0, "There are no NFTs left to claim in the public sale"); require(remainingMint >= quantity, "User max mint limit"); require(quantity + _totalSupply.current() <= maxSupply, "Exceeded maximum supply"); require(msg.value == price * quantity, "Value sent is not correct"); for (uint256 i = 1; i <= quantity; i++) { _pubSaleList[msg.sender] = remainingMint-i; _totalSupply.increment(); _safeMint(msg.sender, _totalSupply.current()); } } /** /$$ /$$ /$$$$$$ /$$$$$$$$ /$$ /$$ /$$$$$$$$ /$$ /$$ /$$ /$$ /$$$$$$ /$$$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ | $$ | $$|_ $$_/| $$_____/| $$ /$ | $$ | $$_____/| $$ | $$| $$$ | $$ /$$__ $$|__ $$__/|_ $$_/ /$$__ $$| $$$ | $$ /$$__ $$ | $$ | $$ | $$ | $$ | $$ /$$$| $$ | $$ | $$ | $$| $$$$| $$| $$ \__/ | $$ | $$ | $$ \ $$| $$$$| $$| $$ \__/ | $$ / $$/ | $$ | $$$$$ | $$/$$ $$ $$ | $$$$$ | $$ | $$| $$ $$ $$| $$ | $$ | $$ | $$ | $$| $$ $$ $$| $$$$$$ \ $$ $$/ | $$ | $$__/ | $$$$_ $$$$ | $$__/ | $$ | $$| $$ $$$$| $$ | $$ | $$ | $$ | $$| $$ $$$$ \____ $$ \ $$$/ | $$ | $$ | $$$/ \ $$$ | $$ | $$ | $$| $$\ $$$| $$ $$ | $$ | $$ | $$ | $$| $$\ $$$ /$$ \ $$ \ $/ /$$$$$$| $$$$$$$$| $$/ \ $$ | $$ | $$$$$$/| $$ \ $$| $$$$$$/ | $$ /$$$$$$| $$$$$$/| $$ \ $$| $$$$$$/ \_/ |______/|________/|__/ \__/ |__/ \______/ |__/ \__/ \______/ |__/ |______/ \______/ |__/ \__/ \______/ */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "URI query for nonexistent token"); return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId), uriSuffix)); } function totalSupply() public view returns (uint256) { return _totalSupply.current(); } function getSaleState() public view returns (uint16) { return saleState; } function numAvailableMintToPreSale(address addr) external view returns (uint256) { return _preSaleList[addr]; } function numAvailableMintToFreeMint(address addr) external view returns (uint256) { return _freeMintList[addr]; } function numAvailableMintToThanksSale(address addr) external view returns (uint256) { return _thanksSaleList[addr]; } function numAvailableMintToPubSale(address addr) external view returns (uint256) { return _pubSaleList[addr]; } function getPreSaleMintPrice() external pure returns (uint256) { return PRE_SALE_MINT_PRICE; } function getPubSaleMintPrice() external pure returns (uint256) { return PUB_SALE_MINT_PRICE; } /** /$$$$$$ /$$ /$$ /$$ /$$ /$$ /$$$$$$ /$$ /$$ /$$ /$$ /$$$$$$$$ /$$$$$$$ /$$__ $$| $$$ | $$| $$ | $$ /$$/ /$$__ $$| $$ /$ | $$| $$$ | $$| $$_____/| $$__ $$ | $$ \ $$| $$$$| $$| $$ \ $$ /$$/ | $$ \ $$| $$ /$$$| $$| $$$$| $$| $$ | $$ \ $$ | $$ | $$| $$ $$ $$| $$ \ $$$$/ | $$ | $$| $$/$$ $$ $$| $$ $$ $$| $$$$$ | $$$$$$$/ | $$ | $$| $$ $$$$| $$ \ $$/ | $$ | $$| $$$$_ $$$$| $$ $$$$| $$__/ | $$__ $$ | $$ | $$| $$\ $$$| $$ | $$ | $$ | $$| $$$/ \ $$$| $$\ $$$| $$ | $$ \ $$ | $$$$$$/| $$ \ $$| $$$$$$$$| $$ | $$$$$$/| $$/ \ $$| $$ \ $$| $$$$$$$$| $$ | $$ \______/ |__/ \__/|________/|__/ \______/ |__/ \__/|__/ \__/|________/|__/ |__/ */ function ownerMint(address to, uint256 quantity) external onlyOwner { uint256 maxMintPerTransaction = MAX_MINTS_PER_TX; require(quantity <= maxMintPerTransaction, "More than max per transaction"); require((quantity + _totalSupply.current()) <= MAX_SUPPLY, "Exceeded maximum supply"); for (uint256 i = 0; i < quantity; i++) { _totalSupply.increment(); _safeMint(to, _totalSupply.current()); } } function setBaseURI(string calldata _baseTokenURI) external onlyOwner { baseTokenURI = _baseTokenURI; } function setTeamWallet(address _teamWallet) public onlyOwner { TeamWallet = _teamWallet; } function inactivateSale() external onlyOwner { saleState = NOT_SALE_ACTIVE_FLG; } function activatePreSale() external onlyOwner { saleState = PRE_SALE_ACTIVE_FLG; } function activateFreeMint() external onlyOwner { saleState = FREE_MINT_ACTIVE_FLG; } function activateThanksSale() external onlyOwner { saleState = THANKS_SALE_ACTIVE_FLG; } function activatePubSale() external onlyOwner { saleState = PUB_SALE_ACTIVE_FLG; } function setPreSaleList(address[] memory _addresses, uint256 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { _preSaleList[_addresses[i]] = numAllowedToMint; } } function setFreeMintList(address[] memory _addresses, uint256 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { _freeMintList[_addresses[i]] = numAllowedToMint; } } function setThanksSaleList(address[] memory _addresses, uint256 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { _thanksSaleList[_addresses[i]] = numAllowedToMint; } } function setPubSaleList(address[] memory _addresses, uint256 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { _pubSaleList[_addresses[i]] = numAllowedToMint; } } function withdraw() external payable onlyOwner { uint256 currBalance = address(this).balance; (bool succ, ) = payable(TeamWallet).call{ value: currBalance }(""); require(succ, "Team transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"FreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SALE_MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUB_SALE_MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"PreSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"PubSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ThanksSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"activateFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activatePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activatePubSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateThanksSale","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreSaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPubSaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getSaleState","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inactivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"numAvailableMintToFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"numAvailableMintToPreSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"numAvailableMintToPubSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"numAvailableMintToThanksSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"numAllowedToMint","type":"uint256"}],"name":"setFreeMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"numAllowedToMint","type":"uint256"}],"name":"setPreSaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"numAllowedToMint","type":"uint256"}],"name":"setPubSaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"numAllowedToMint","type":"uint256"}],"name":"setThanksSaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600860006101000a81548161ffff021916908361ffff16021790555073fbc8ff6f62b84f535f224f9b14b5b92f37cb1263600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008457600080fd5b506040518060400160405280600481526020017f4569656e000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4549454e0000000000000000000000000000000000000000000000000000000081525062000111620001056200013d60201b60201c565b6200014560201b60201c565b816001908162000122919062000483565b50806002908162000134919062000483565b5050506200056a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028b57607f821691505b602082108103620002a157620002a062000243565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cc565b620003178683620002cc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003646200035e62000358846200032f565b62000339565b6200032f565b9050919050565b6000819050919050565b620003808362000343565b620003986200038f826200036b565b848454620002d9565b825550505050565b600090565b620003af620003a0565b620003bc81848462000375565b505050565b5b81811015620003e457620003d8600082620003a5565b600181019050620003c2565b5050565b601f8211156200043357620003fd81620002a7565b6200040884620002bc565b8101602085101562000418578190505b620004306200042785620002bc565b830182620003c1565b50505b505050565b600082821c905092915050565b6000620004586000198460080262000438565b1980831691505092915050565b600062000473838362000445565b9150826002028217905092915050565b6200048e8262000209565b67ffffffffffffffff811115620004aa57620004a962000214565b5b620004b6825462000272565b620004c3828285620003e8565b600060209050601f831160018114620004fb5760008415620004e6578287015190505b620004f2858262000465565b86555062000562565b601f1984166200050b86620002a7565b60005b8281101562000535578489015182556001820191506020850194506020810190506200050e565b8683101562000555578489015162000551601f89168262000445565b8355505b6001600288020188555050505b505050505050565b615007806200057a6000396000f3fe6080604052600436106102935760003560e01c80637451361d1161015a578063b88d4fde116100c1578063d547cfb71161007a578063d547cfb71461097e578063e14d88e4146109a9578063e827edd0146109c5578063e985e9c5146109dc578063ee410ff314610a19578063f2fde38b14610a4457610293565b8063b88d4fde1461088c578063bb74ae4b146108b5578063bdfaa084146108d1578063c87b56dd146108ed578063d08fb36b1461092a578063d3d0fdf61461096757610293565b806397362bd41161011357806397362bd41461079f5780639bd9b989146107ca5780639e5b41a4146107e1578063a22cb4651461081e578063ad7d3fd214610847578063b88a73e31461087057610293565b80637451361d1461068f57806383ec0e11146106b85780638491fa3f146106e35780638b01e59d146107205780638da5cb5b1461074957806395d89b411461077457610293565b806332cb6b0c116101fe57806357bf74a6116101b757806357bf74a61461057f578063603f4d52146105a85780636352211e146105d3578063677a88701461061057806370a082311461063b578063715018a61461067857610293565b806332cb6b0c146104a45780633ccfd60b146104cf57806342842e0e146104d9578063484b973c146105025780635503a0e81461052b57806355f804b31461055657610293565b806318160ddd1161025057806318160ddd146103a657806321a911f8146103d157806323b872dd146103fc57806325bdb2a8146104255780632ad4cadf14610450578063309918931461046757610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631307bb00146103665780631525ff7d1461037d575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613406565b610a6d565b6040516102cc919061344e565b60405180910390f35b3480156102e157600080fd5b506102ea610b4f565b6040516102f791906134f9565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613551565b610be1565b60405161033491906135bf565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613606565b610c27565b005b34801561037257600080fd5b5061037b610d3e565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613646565b610d66565b005b3480156103b257600080fd5b506103bb610db2565b6040516103c89190613682565b60405180910390f35b3480156103dd57600080fd5b506103e6610dc3565b6040516103f39190613682565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061369d565b610dd2565b005b34801561043157600080fd5b5061043a610e32565b604051610447919061370d565b60405180910390f35b34801561045c57600080fd5b50610465610e4a565b005b34801561047357600080fd5b5061048e60048036038101906104899190613646565b610e72565b60405161049b9190613682565b60405180910390f35b3480156104b057600080fd5b506104b9610ebb565b6040516104c69190613682565b60405180910390f35b6104d7610ec1565b005b3480156104e557600080fd5b5061050060048036038101906104fb919061369d565b610fa0565b005b34801561050e57600080fd5b5061052960048036038101906105249190613606565b610fc0565b005b34801561053757600080fd5b506105406110ab565b60405161054d91906134f9565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061378d565b6110e4565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613918565b611102565b005b3480156105b457600080fd5b506105bd61118c565b6040516105ca919061370d565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613551565b6111a0565b60405161060791906135bf565b60405180910390f35b34801561061c57600080fd5b50610625611251565b60405161063291906135bf565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613646565b611277565b60405161066f9190613682565b60405180910390f35b34801561068457600080fd5b5061068d61132e565b005b34801561069b57600080fd5b506106b660048036038101906106b19190613918565b611342565b005b3480156106c457600080fd5b506106cd6113cc565b6040516106da9190613682565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613646565b6113db565b6040516107179190613682565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613918565b611424565b005b34801561075557600080fd5b5061075e6114ae565b60405161076b91906135bf565b60405180910390f35b34801561078057600080fd5b506107896114d7565b60405161079691906134f9565b60405180910390f35b3480156107ab57600080fd5b506107b4611569565b6040516107c19190613682565b60405180910390f35b3480156107d657600080fd5b506107df611574565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613646565b61159c565b6040516108159190613682565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906139a0565b6115e5565b005b34801561085357600080fd5b5061086e60048036038101906108699190613918565b6115fb565b005b61088a60048036038101906108859190613551565b611685565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613a95565b6119ad565b005b6108cf60048036038101906108ca9190613551565b611a0f565b005b6108eb60048036038101906108e69190613551565b611d37565b005b3480156108f957600080fd5b50610914600480360381019061090f9190613551565b612005565b60405161092191906134f9565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190613646565b6120b8565b60405161095e9190613682565b60405180910390f35b34801561097357600080fd5b5061097c612101565b005b34801561098a57600080fd5b50610993612129565b6040516109a091906134f9565b60405180910390f35b6109c360048036038101906109be9190613551565b6121b7565b005b3480156109d157600080fd5b506109da6124df565b005b3480156109e857600080fd5b50610a0360048036038101906109fe9190613b18565b612507565b604051610a10919061344e565b60405180910390f35b348015610a2557600080fd5b50610a2e61259b565b604051610a3b9190613682565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190613646565b6125a6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b485750610b4782612629565b5b9050919050565b606060018054610b5e90613b87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90613b87565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bec82612693565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c32826111a0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613c2a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc16126de565b73ffffffffffffffffffffffffffffffffffffffff161480610cf05750610cef81610cea6126de565b612507565b5b610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690613cbc565b60405180910390fd5b610d3983836126e6565b505050565b610d4661279f565b6001600860006101000a81548161ffff021916908361ffff160217905550565b610d6e61279f565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610dbe600761281d565b905090565b6000666a94d74f430000905090565b610de3610ddd6126de565b8261282b565b610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613d4e565b60405180910390fd5b610e2d8383836128c0565b505050565b6000600860009054906101000a900461ffff16905090565b610e5261279f565b6004600860006101000a81548161ffff021916908361ffff160217905550565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0581565b610ec961279f565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f1690613d9f565b60006040518083038185875af1925050503d8060008114610f53576040519150601f19603f3d011682016040523d82523d6000602084013e610f58565b606091505b5050905080610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613e00565b60405180910390fd5b5050565b610fbb838383604051806020016040528060008152506119ad565b505050565b610fc861279f565b60006064905080821115611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613e6c565b60405180910390fd5b610d0561101e600761281d565b836110299190613ebb565b111561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613f3b565b60405180910390fd5b60005b828110156110a55761107f6007612b26565b6110928461108d600761281d565b612b3c565b808061109d90613f5b565b91505061106d565b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b6110ec61279f565b8181600d91826110fd92919061415a565b505050565b61110a61279f565b60005b82518110156111875781600c600085848151811061112e5761112d61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061117f90613f5b565b91505061110d565b505050565b600860009054906101000a900461ffff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906142a5565b60405180910390fd5b80915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614337565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133661279f565b6113406000612b5a565b565b61134a61279f565b60005b82518110156113c75781600b600085848151811061136e5761136d61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806113bf90613f5b565b91505061134d565b505050565b600066b1a2bc2ec50000905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142c61279f565b60005b82518110156114a95781600960008584815181106114505761144f61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806114a190613f5b565b91505061142f565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114e690613b87565b80601f016020809104026020016040519081016040528092919081815260200182805461151290613b87565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b66b1a2bc2ec5000081565b61157c61279f565b6000600860006101000a81548161ffff021916908361ffff160217905550565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f76115f06126de565b8383612c1e565b5050565b61160361279f565b60005b82518110156116805781600a60008584815181106116275761162661422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061167890613f5b565b915050611606565b505050565b600066b1a2bc2ec5000090506000606490506000610d0590506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611747906143a3565b60405180910390fd5b600461ffff16600860009054906101000a900461ffff1661ffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061440f565b60405180910390fd5b828511156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613e6c565b60405180910390fd5b60008103611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906144a1565b60405180910390fd5b84811015611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b9061450d565b60405180910390fd5b8161187f600761281d565b8661188a9190613ebb565b11156118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290613f3b565b60405180910390fd5b84846118d7919061452d565b3414611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906145bb565b60405180910390fd5b6000600190505b8581116119a557808261193291906145db565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061197f6007612b26565b6119923361198d600761281d565b612b3c565b808061199d90613f5b565b91505061191f565b505050505050565b6119be6119b86126de565b8361282b565b6119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490613d4e565b60405180910390fd5b611a0984848484612d8a565b50505050565b6000666a94d74f43000090506000606490506000610d0590506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906143a3565b60405180910390fd5b600161ffff16600860009054906101000a900461ffff1661ffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c9061465b565b60405180910390fd5b82851115611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613e6c565b60405180910390fd5b60008103611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb2906146ed565b60405180910390fd5b84811015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf59061450d565b60405180910390fd5b81611c09600761281d565b86611c149190613ebb565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613f3b565b60405180910390fd5b8484611c61919061452d565b3414611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906145bb565b60405180910390fd5b6000600190505b858111611d2f578082611cbc91906145db565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d096007612b26565b611d1c33611d17600761281d565b612b3c565b8080611d2790613f5b565b915050611ca9565b505050505050565b6000606490506000610d0590506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906143a3565b60405180910390fd5b600261ffff16600860009054906101000a900461ffff1661ffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614759565b60405180910390fd5b82841115611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613e6c565b60405180910390fd5b60008103611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906147eb565b60405180910390fd5b83811015611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f119061450d565b60405180910390fd5b81611f25600761281d565b85611f309190613ebb565b1115611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613f3b565b60405180910390fd5b6000600190505b848111611ffe578082611f8b91906145db565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fd86007612b26565b611feb33611fe6600761281d565b612b3c565b8080611ff690613f5b565b915050611f78565b5050505050565b606061201082612de6565b61204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614857565b60405180910390fd5b600d61205a83612e52565b6040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506040516020016120a293929190614936565b6040516020818303038152906040529050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61210961279f565b6003600860006101000a81548161ffff021916908361ffff160217905550565b600d805461213690613b87565b80601f016020809104026020016040519081016040528092919081815260200182805461216290613b87565b80156121af5780601f10612184576101008083540402835291602001916121af565b820191906000526020600020905b81548152906001019060200180831161219257829003601f168201915b505050505081565b600066b1a2bc2ec5000090506000606490506000610d0590506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906143a3565b60405180910390fd5b600361ffff16600860009054906101000a900461ffff1661ffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d4906149b3565b60405180910390fd5b82851115612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790613e6c565b60405180910390fd5b60008103612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614a45565b60405180910390fd5b848110156123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d9061450d565b60405180910390fd5b816123b1600761281d565b866123bc9190613ebb565b11156123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f490613f3b565b60405180910390fd5b8484612409919061452d565b341461244a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612441906145bb565b60405180910390fd5b6000600190505b8581116124d757808261246491906145db565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124b16007612b26565b6124c4336124bf600761281d565b612b3c565b80806124cf90613f5b565b915050612451565b505050505050565b6124e761279f565b6002600860006101000a81548161ffff021916908361ffff160217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b666a94d74f43000081565b6125ae61279f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614ad7565b60405180910390fd5b61262681612b5a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61269c81612de6565b6126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d2906142a5565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612759836111a0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6127a76126de565b73ffffffffffffffffffffffffffffffffffffffff166127c56114ae565b73ffffffffffffffffffffffffffffffffffffffff161461281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614b43565b60405180910390fd5b565b600081600001549050919050565b600080612837836111a0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061287957506128788185612507565b5b806128b757508373ffffffffffffffffffffffffffffffffffffffff1661289f84610be1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128e0826111a0565b73ffffffffffffffffffffffffffffffffffffffff1614612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90614bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614c67565b60405180910390fd5b6129b0838383612fb2565b6129bb6000826126e6565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0b91906145db565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a629190613ebb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b21838383612fb7565b505050565b6001816000016000828254019250508190555050565b612b56828260405180602001604052806000815250612fbc565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614cd3565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d7d919061344e565b60405180910390a3505050565b612d958484846128c0565b612da184848484613017565b612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614d65565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612e99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fad565b600082905060005b60008214612ecb578080612eb490613f5b565b915050600a82612ec49190614db4565b9150612ea1565b60008167ffffffffffffffff811115612ee757612ee66137da565b5b6040519080825280601f01601f191660200182016040528015612f195781602001600182028036833780820191505090505b5090505b60008514612fa657600182612f3291906145db565b9150600a85612f419190614de5565b6030612f4d9190613ebb565b60f81b818381518110612f6357612f6261422a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f9f9190614db4565b9450612f1d565b8093505050505b919050565b505050565b505050565b612fc6838361319e565b612fd36000848484613017565b613012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300990614d65565b60405180910390fd5b505050565b60006130388473ffffffffffffffffffffffffffffffffffffffff16613377565b15613191578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130616126de565b8786866040518563ffffffff1660e01b81526004016130839493929190614e6b565b6020604051808303816000875af19250505080156130bf57506040513d601f19601f820116820180604052508101906130bc9190614ecc565b60015b613141573d80600081146130ef576040519150601f19603f3d011682016040523d82523d6000602084013e6130f4565b606091505b506000815103613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090614d65565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613196565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361320d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320490614f45565b60405180910390fd5b61321681612de6565b15613256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324d90614fb1565b60405180910390fd5b61326260008383612fb2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132b29190613ebb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461337360008383612fb7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133e3816133ae565b81146133ee57600080fd5b50565b600081359050613400816133da565b92915050565b60006020828403121561341c5761341b6133a4565b5b600061342a848285016133f1565b91505092915050565b60008115159050919050565b61344881613433565b82525050565b6000602082019050613463600083018461343f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134a3578082015181840152602081019050613488565b60008484015250505050565b6000601f19601f8301169050919050565b60006134cb82613469565b6134d58185613474565b93506134e5818560208601613485565b6134ee816134af565b840191505092915050565b6000602082019050818103600083015261351381846134c0565b905092915050565b6000819050919050565b61352e8161351b565b811461353957600080fd5b50565b60008135905061354b81613525565b92915050565b600060208284031215613567576135666133a4565b5b60006135758482850161353c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135a98261357e565b9050919050565b6135b98161359e565b82525050565b60006020820190506135d460008301846135b0565b92915050565b6135e38161359e565b81146135ee57600080fd5b50565b600081359050613600816135da565b92915050565b6000806040838503121561361d5761361c6133a4565b5b600061362b858286016135f1565b925050602061363c8582860161353c565b9150509250929050565b60006020828403121561365c5761365b6133a4565b5b600061366a848285016135f1565b91505092915050565b61367c8161351b565b82525050565b60006020820190506136976000830184613673565b92915050565b6000806000606084860312156136b6576136b56133a4565b5b60006136c4868287016135f1565b93505060206136d5868287016135f1565b92505060406136e68682870161353c565b9150509250925092565b600061ffff82169050919050565b613707816136f0565b82525050565b600060208201905061372260008301846136fe565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261374d5761374c613728565b5b8235905067ffffffffffffffff81111561376a5761376961372d565b5b60208301915083600182028301111561378657613785613732565b5b9250929050565b600080602083850312156137a4576137a36133a4565b5b600083013567ffffffffffffffff8111156137c2576137c16133a9565b5b6137ce85828601613737565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613812826134af565b810181811067ffffffffffffffff82111715613831576138306137da565b5b80604052505050565b600061384461339a565b90506138508282613809565b919050565b600067ffffffffffffffff8211156138705761386f6137da565b5b602082029050602081019050919050565b600061389461388f84613855565b61383a565b905080838252602082019050602084028301858111156138b7576138b6613732565b5b835b818110156138e057806138cc88826135f1565b8452602084019350506020810190506138b9565b5050509392505050565b600082601f8301126138ff576138fe613728565b5b813561390f848260208601613881565b91505092915050565b6000806040838503121561392f5761392e6133a4565b5b600083013567ffffffffffffffff81111561394d5761394c6133a9565b5b613959858286016138ea565b925050602061396a8582860161353c565b9150509250929050565b61397d81613433565b811461398857600080fd5b50565b60008135905061399a81613974565b92915050565b600080604083850312156139b7576139b66133a4565b5b60006139c5858286016135f1565b92505060206139d68582860161398b565b9150509250929050565b600080fd5b600067ffffffffffffffff821115613a00576139ff6137da565b5b613a09826134af565b9050602081019050919050565b82818337600083830152505050565b6000613a38613a33846139e5565b61383a565b905082815260208101848484011115613a5457613a536139e0565b5b613a5f848285613a16565b509392505050565b600082601f830112613a7c57613a7b613728565b5b8135613a8c848260208601613a25565b91505092915050565b60008060008060808587031215613aaf57613aae6133a4565b5b6000613abd878288016135f1565b9450506020613ace878288016135f1565b9350506040613adf8782880161353c565b925050606085013567ffffffffffffffff811115613b0057613aff6133a9565b5b613b0c87828801613a67565b91505092959194509250565b60008060408385031215613b2f57613b2e6133a4565b5b6000613b3d858286016135f1565b9250506020613b4e858286016135f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9f57607f821691505b602082108103613bb257613bb1613b58565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c14602183613474565b9150613c1f82613bb8565b604082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613ca6603e83613474565b9150613cb182613c4a565b604082019050919050565b60006020820190508181036000830152613cd581613c99565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613d38602e83613474565b9150613d4382613cdc565b604082019050919050565b60006020820190508181036000830152613d6781613d2b565b9050919050565b600081905092915050565b50565b6000613d89600083613d6e565b9150613d9482613d79565b600082019050919050565b6000613daa82613d7c565b9150819050919050565b7f5465616d207472616e73666572206661696c6564000000000000000000000000600082015250565b6000613dea601483613474565b9150613df582613db4565b602082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f4d6f7265207468616e206d617820706572207472616e73616374696f6e000000600082015250565b6000613e56601d83613474565b9150613e6182613e20565b602082019050919050565b60006020820190508181036000830152613e8581613e49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ec68261351b565b9150613ed18361351b565b9250828201905080821115613ee957613ee8613e8c565b5b92915050565b7f4578636565646564206d6178696d756d20737570706c79000000000000000000600082015250565b6000613f25601783613474565b9150613f3082613eef565b602082019050919050565b60006020820190508181036000830152613f5481613f18565b9050919050565b6000613f668261351b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9857613f97613e8c565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613fd3565b61401a8683613fd3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061405761405261404d8461351b565b614032565b61351b565b9050919050565b6000819050919050565b6140718361403c565b61408561407d8261405e565b848454613fe0565b825550505050565b600090565b61409a61408d565b6140a5818484614068565b505050565b5b818110156140c9576140be600082614092565b6001810190506140ab565b5050565b601f82111561410e576140df81613fae565b6140e884613fc3565b810160208510156140f7578190505b61410b61410385613fc3565b8301826140aa565b50505b505050565b600082821c905092915050565b600061413160001984600802614113565b1980831691505092915050565b600061414a8383614120565b9150826002028217905092915050565b6141648383613fa3565b67ffffffffffffffff81111561417d5761417c6137da565b5b6141878254613b87565b6141928282856140cd565b6000601f8311600181146141c157600084156141af578287013590505b6141b9858261413e565b865550614221565b601f1984166141cf86613fae565b60005b828110156141f7578489013582556001820191506020850194506020810190506141d2565b868310156142145784890135614210601f891682614120565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061428f601883613474565b915061429a82614259565b602082019050919050565b600060208201905081810360008301526142be81614282565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614321602983613474565b915061432c826142c5565b604082019050919050565b6000602082019050818103600083015261435081614314565b9050919050565b7f43616e6e6f742062652063616c6c6564206279206120636f6e74726163740000600082015250565b600061438d601e83613474565b915061439882614357565b602082019050919050565b600060208201905081810360008301526143bc81614380565b9050919050565b7f50756253616c6520697320706175736564000000000000000000000000000000600082015250565b60006143f9601183613474565b9150614404826143c3565b602082019050919050565b60006020820190508181036000830152614428816143ec565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207075626c69632073616c650000000000000000000000000000602082015250565b600061448b603283613474565b91506144968261442f565b604082019050919050565b600060208201905081810360008301526144ba8161447e565b9050919050565b7f55736572206d6178206d696e74206c696d697400000000000000000000000000600082015250565b60006144f7601383613474565b9150614502826144c1565b602082019050919050565b60006020820190508181036000830152614526816144ea565b9050919050565b60006145388261351b565b91506145438361351b565b92508282026145518161351b565b9150828204841483151761456857614567613e8c565b5b5092915050565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b60006145a5601983613474565b91506145b08261456f565b602082019050919050565b600060208201905081810360008301526145d481614598565b9050919050565b60006145e68261351b565b91506145f18361351b565b925082820390508181111561460957614608613e8c565b5b92915050565b7f50726553616c6520697320706175736564000000000000000000000000000000600082015250565b6000614645601183613474565b91506146508261460f565b602082019050919050565b6000602082019050818103600083015261467481614638565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207072652073616c650000000000000000000000000000000000602082015250565b60006146d7602f83613474565b91506146e28261467b565b604082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f467265654d696e74206973207061757365640000000000000000000000000000600082015250565b6000614743601283613474565b915061474e8261470d565b602082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e207468652066726565206d696e7400000000000000000000000000000000602082015250565b60006147d5603083613474565b91506147e082614779565b604082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000614841601f83613474565b915061484c8261480b565b602082019050919050565b6000602082019050818103600083015261487081614834565b9050919050565b600081905092915050565b6000815461488f81613b87565b6148998186614877565b945060018216600081146148b457600181146148c9576148fc565b60ff19831686528115158202860193506148fc565b6148d285613fae565b60005b838110156148f4578154818901526001820191506020810190506148d5565b838801955050505b50505092915050565b600061491082613469565b61491a8185614877565b935061492a818560208601613485565b80840191505092915050565b60006149428286614882565b915061494e8285614905565b915061495a8284614905565b9150819050949350505050565b7f5468616e6b7353616c6520697320706175736564000000000000000000000000600082015250565b600061499d601483613474565b91506149a882614967565b602082019050919050565b600060208201905081810360008301526149cc81614990565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207468616e6b732073616c650000000000000000000000000000602082015250565b6000614a2f603283613474565b9150614a3a826149d3565b604082019050919050565b60006020820190508181036000830152614a5e81614a22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac1602683613474565b9150614acc82614a65565b604082019050919050565b60006020820190508181036000830152614af081614ab4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2d602083613474565b9150614b3882614af7565b602082019050919050565b60006020820190508181036000830152614b5c81614b20565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614bbf602583613474565b9150614bca82614b63565b604082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c51602483613474565b9150614c5c82614bf5565b604082019050919050565b60006020820190508181036000830152614c8081614c44565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614cbd601983613474565b9150614cc882614c87565b602082019050919050565b60006020820190508181036000830152614cec81614cb0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d4f603283613474565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dbf8261351b565b9150614dca8361351b565b925082614dda57614dd9614d85565b5b828204905092915050565b6000614df08261351b565b9150614dfb8361351b565b925082614e0b57614e0a614d85565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e3d82614e16565b614e478185614e21565b9350614e57818560208601613485565b614e60816134af565b840191505092915050565b6000608082019050614e8060008301876135b0565b614e8d60208301866135b0565b614e9a6040830185613673565b8181036060830152614eac8184614e32565b905095945050505050565b600081519050614ec6816133da565b92915050565b600060208284031215614ee257614ee16133a4565b5b6000614ef084828501614eb7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f2f602083613474565b9150614f3a82614ef9565b602082019050919050565b60006020820190508181036000830152614f5e81614f22565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f9b601c83613474565b9150614fa682614f65565b602082019050919050565b60006020820190508181036000830152614fca81614f8e565b905091905056fea2646970667358221220dbcba3e4e93ad0a826e321d11dc37127dbc82489e98f93d62eb352dc5a16117564736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102935760003560e01c80637451361d1161015a578063b88d4fde116100c1578063d547cfb71161007a578063d547cfb71461097e578063e14d88e4146109a9578063e827edd0146109c5578063e985e9c5146109dc578063ee410ff314610a19578063f2fde38b14610a4457610293565b8063b88d4fde1461088c578063bb74ae4b146108b5578063bdfaa084146108d1578063c87b56dd146108ed578063d08fb36b1461092a578063d3d0fdf61461096757610293565b806397362bd41161011357806397362bd41461079f5780639bd9b989146107ca5780639e5b41a4146107e1578063a22cb4651461081e578063ad7d3fd214610847578063b88a73e31461087057610293565b80637451361d1461068f57806383ec0e11146106b85780638491fa3f146106e35780638b01e59d146107205780638da5cb5b1461074957806395d89b411461077457610293565b806332cb6b0c116101fe57806357bf74a6116101b757806357bf74a61461057f578063603f4d52146105a85780636352211e146105d3578063677a88701461061057806370a082311461063b578063715018a61461067857610293565b806332cb6b0c146104a45780633ccfd60b146104cf57806342842e0e146104d9578063484b973c146105025780635503a0e81461052b57806355f804b31461055657610293565b806318160ddd1161025057806318160ddd146103a657806321a911f8146103d157806323b872dd146103fc57806325bdb2a8146104255780632ad4cadf14610450578063309918931461046757610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631307bb00146103665780631525ff7d1461037d575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613406565b610a6d565b6040516102cc919061344e565b60405180910390f35b3480156102e157600080fd5b506102ea610b4f565b6040516102f791906134f9565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613551565b610be1565b60405161033491906135bf565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613606565b610c27565b005b34801561037257600080fd5b5061037b610d3e565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613646565b610d66565b005b3480156103b257600080fd5b506103bb610db2565b6040516103c89190613682565b60405180910390f35b3480156103dd57600080fd5b506103e6610dc3565b6040516103f39190613682565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061369d565b610dd2565b005b34801561043157600080fd5b5061043a610e32565b604051610447919061370d565b60405180910390f35b34801561045c57600080fd5b50610465610e4a565b005b34801561047357600080fd5b5061048e60048036038101906104899190613646565b610e72565b60405161049b9190613682565b60405180910390f35b3480156104b057600080fd5b506104b9610ebb565b6040516104c69190613682565b60405180910390f35b6104d7610ec1565b005b3480156104e557600080fd5b5061050060048036038101906104fb919061369d565b610fa0565b005b34801561050e57600080fd5b5061052960048036038101906105249190613606565b610fc0565b005b34801561053757600080fd5b506105406110ab565b60405161054d91906134f9565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061378d565b6110e4565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613918565b611102565b005b3480156105b457600080fd5b506105bd61118c565b6040516105ca919061370d565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613551565b6111a0565b60405161060791906135bf565b60405180910390f35b34801561061c57600080fd5b50610625611251565b60405161063291906135bf565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613646565b611277565b60405161066f9190613682565b60405180910390f35b34801561068457600080fd5b5061068d61132e565b005b34801561069b57600080fd5b506106b660048036038101906106b19190613918565b611342565b005b3480156106c457600080fd5b506106cd6113cc565b6040516106da9190613682565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613646565b6113db565b6040516107179190613682565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613918565b611424565b005b34801561075557600080fd5b5061075e6114ae565b60405161076b91906135bf565b60405180910390f35b34801561078057600080fd5b506107896114d7565b60405161079691906134f9565b60405180910390f35b3480156107ab57600080fd5b506107b4611569565b6040516107c19190613682565b60405180910390f35b3480156107d657600080fd5b506107df611574565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613646565b61159c565b6040516108159190613682565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906139a0565b6115e5565b005b34801561085357600080fd5b5061086e60048036038101906108699190613918565b6115fb565b005b61088a60048036038101906108859190613551565b611685565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613a95565b6119ad565b005b6108cf60048036038101906108ca9190613551565b611a0f565b005b6108eb60048036038101906108e69190613551565b611d37565b005b3480156108f957600080fd5b50610914600480360381019061090f9190613551565b612005565b60405161092191906134f9565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190613646565b6120b8565b60405161095e9190613682565b60405180910390f35b34801561097357600080fd5b5061097c612101565b005b34801561098a57600080fd5b50610993612129565b6040516109a091906134f9565b60405180910390f35b6109c360048036038101906109be9190613551565b6121b7565b005b3480156109d157600080fd5b506109da6124df565b005b3480156109e857600080fd5b50610a0360048036038101906109fe9190613b18565b612507565b604051610a10919061344e565b60405180910390f35b348015610a2557600080fd5b50610a2e61259b565b604051610a3b9190613682565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190613646565b6125a6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b485750610b4782612629565b5b9050919050565b606060018054610b5e90613b87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8a90613b87565b8015610bd75780601f10610bac57610100808354040283529160200191610bd7565b820191906000526020600020905b815481529060010190602001808311610bba57829003601f168201915b5050505050905090565b6000610bec82612693565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c32826111a0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613c2a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc16126de565b73ffffffffffffffffffffffffffffffffffffffff161480610cf05750610cef81610cea6126de565b612507565b5b610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690613cbc565b60405180910390fd5b610d3983836126e6565b505050565b610d4661279f565b6001600860006101000a81548161ffff021916908361ffff160217905550565b610d6e61279f565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610dbe600761281d565b905090565b6000666a94d74f430000905090565b610de3610ddd6126de565b8261282b565b610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613d4e565b60405180910390fd5b610e2d8383836128c0565b505050565b6000600860009054906101000a900461ffff16905090565b610e5261279f565b6004600860006101000a81548161ffff021916908361ffff160217905550565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0581565b610ec961279f565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f1690613d9f565b60006040518083038185875af1925050503d8060008114610f53576040519150601f19603f3d011682016040523d82523d6000602084013e610f58565b606091505b5050905080610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613e00565b60405180910390fd5b5050565b610fbb838383604051806020016040528060008152506119ad565b505050565b610fc861279f565b60006064905080821115611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613e6c565b60405180910390fd5b610d0561101e600761281d565b836110299190613ebb565b111561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190613f3b565b60405180910390fd5b60005b828110156110a55761107f6007612b26565b6110928461108d600761281d565b612b3c565b808061109d90613f5b565b91505061106d565b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b6110ec61279f565b8181600d91826110fd92919061415a565b505050565b61110a61279f565b60005b82518110156111875781600c600085848151811061112e5761112d61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061117f90613f5b565b91505061110d565b505050565b600860009054906101000a900461ffff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906142a5565b60405180910390fd5b80915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de90614337565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133661279f565b6113406000612b5a565b565b61134a61279f565b60005b82518110156113c75781600b600085848151811061136e5761136d61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806113bf90613f5b565b91505061134d565b505050565b600066b1a2bc2ec50000905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142c61279f565b60005b82518110156114a95781600960008584815181106114505761144f61422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806114a190613f5b565b91505061142f565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114e690613b87565b80601f016020809104026020016040519081016040528092919081815260200182805461151290613b87565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b66b1a2bc2ec5000081565b61157c61279f565b6000600860006101000a81548161ffff021916908361ffff160217905550565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f76115f06126de565b8383612c1e565b5050565b61160361279f565b60005b82518110156116805781600a60008584815181106116275761162661422a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061167890613f5b565b915050611606565b505050565b600066b1a2bc2ec5000090506000606490506000610d0590506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611747906143a3565b60405180910390fd5b600461ffff16600860009054906101000a900461ffff1661ffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a29061440f565b60405180910390fd5b828511156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613e6c565b60405180910390fd5b60008103611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906144a1565b60405180910390fd5b84811015611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b9061450d565b60405180910390fd5b8161187f600761281d565b8661188a9190613ebb565b11156118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290613f3b565b60405180910390fd5b84846118d7919061452d565b3414611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906145bb565b60405180910390fd5b6000600190505b8581116119a557808261193291906145db565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061197f6007612b26565b6119923361198d600761281d565b612b3c565b808061199d90613f5b565b91505061191f565b505050505050565b6119be6119b86126de565b8361282b565b6119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490613d4e565b60405180910390fd5b611a0984848484612d8a565b50505050565b6000666a94d74f43000090506000606490506000610d0590506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906143a3565b60405180910390fd5b600161ffff16600860009054906101000a900461ffff1661ffff1614611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c9061465b565b60405180910390fd5b82851115611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613e6c565b60405180910390fd5b60008103611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb2906146ed565b60405180910390fd5b84811015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf59061450d565b60405180910390fd5b81611c09600761281d565b86611c149190613ebb565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613f3b565b60405180910390fd5b8484611c61919061452d565b3414611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906145bb565b60405180910390fd5b6000600190505b858111611d2f578082611cbc91906145db565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d096007612b26565b611d1c33611d17600761281d565b612b3c565b8080611d2790613f5b565b915050611ca9565b505050505050565b6000606490506000610d0590506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906143a3565b60405180910390fd5b600261ffff16600860009054906101000a900461ffff1661ffff1614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614759565b60405180910390fd5b82841115611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613e6c565b60405180910390fd5b60008103611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906147eb565b60405180910390fd5b83811015611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f119061450d565b60405180910390fd5b81611f25600761281d565b85611f309190613ebb565b1115611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613f3b565b60405180910390fd5b6000600190505b848111611ffe578082611f8b91906145db565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fd86007612b26565b611feb33611fe6600761281d565b612b3c565b8080611ff690613f5b565b915050611f78565b5050505050565b606061201082612de6565b61204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690614857565b60405180910390fd5b600d61205a83612e52565b6040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506040516020016120a293929190614936565b6040516020818303038152906040529050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61210961279f565b6003600860006101000a81548161ffff021916908361ffff160217905550565b600d805461213690613b87565b80601f016020809104026020016040519081016040528092919081815260200182805461216290613b87565b80156121af5780601f10612184576101008083540402835291602001916121af565b820191906000526020600020905b81548152906001019060200180831161219257829003601f168201915b505050505081565b600066b1a2bc2ec5000090506000606490506000610d0590506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906143a3565b60405180910390fd5b600361ffff16600860009054906101000a900461ffff1661ffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d4906149b3565b60405180910390fd5b82851115612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790613e6c565b60405180910390fd5b60008103612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614a45565b60405180910390fd5b848110156123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d9061450d565b60405180910390fd5b816123b1600761281d565b866123bc9190613ebb565b11156123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f490613f3b565b60405180910390fd5b8484612409919061452d565b341461244a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612441906145bb565b60405180910390fd5b6000600190505b8581116124d757808261246491906145db565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124b16007612b26565b6124c4336124bf600761281d565b612b3c565b80806124cf90613f5b565b915050612451565b505050505050565b6124e761279f565b6002600860006101000a81548161ffff021916908361ffff160217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b666a94d74f43000081565b6125ae61279f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614ad7565b60405180910390fd5b61262681612b5a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61269c81612de6565b6126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d2906142a5565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612759836111a0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6127a76126de565b73ffffffffffffffffffffffffffffffffffffffff166127c56114ae565b73ffffffffffffffffffffffffffffffffffffffff161461281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290614b43565b60405180910390fd5b565b600081600001549050919050565b600080612837836111a0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061287957506128788185612507565b5b806128b757508373ffffffffffffffffffffffffffffffffffffffff1661289f84610be1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128e0826111a0565b73ffffffffffffffffffffffffffffffffffffffff1614612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90614bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614c67565b60405180910390fd5b6129b0838383612fb2565b6129bb6000826126e6565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a0b91906145db565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a629190613ebb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b21838383612fb7565b505050565b6001816000016000828254019250508190555050565b612b56828260405180602001604052806000815250612fbc565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614cd3565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d7d919061344e565b60405180910390a3505050565b612d958484846128c0565b612da184848484613017565b612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790614d65565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203612e99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fad565b600082905060005b60008214612ecb578080612eb490613f5b565b915050600a82612ec49190614db4565b9150612ea1565b60008167ffffffffffffffff811115612ee757612ee66137da565b5b6040519080825280601f01601f191660200182016040528015612f195781602001600182028036833780820191505090505b5090505b60008514612fa657600182612f3291906145db565b9150600a85612f419190614de5565b6030612f4d9190613ebb565b60f81b818381518110612f6357612f6261422a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f9f9190614db4565b9450612f1d565b8093505050505b919050565b505050565b505050565b612fc6838361319e565b612fd36000848484613017565b613012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300990614d65565b60405180910390fd5b505050565b60006130388473ffffffffffffffffffffffffffffffffffffffff16613377565b15613191578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130616126de565b8786866040518563ffffffff1660e01b81526004016130839493929190614e6b565b6020604051808303816000875af19250505080156130bf57506040513d601f19601f820116820180604052508101906130bc9190614ecc565b60015b613141573d80600081146130ef576040519150601f19603f3d011682016040523d82523d6000602084013e6130f4565b606091505b506000815103613139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313090614d65565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613196565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361320d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320490614f45565b60405180910390fd5b61321681612de6565b15613256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324d90614fb1565b60405180910390fd5b61326260008383612fb2565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132b29190613ebb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461337360008383612fb7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133e3816133ae565b81146133ee57600080fd5b50565b600081359050613400816133da565b92915050565b60006020828403121561341c5761341b6133a4565b5b600061342a848285016133f1565b91505092915050565b60008115159050919050565b61344881613433565b82525050565b6000602082019050613463600083018461343f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134a3578082015181840152602081019050613488565b60008484015250505050565b6000601f19601f8301169050919050565b60006134cb82613469565b6134d58185613474565b93506134e5818560208601613485565b6134ee816134af565b840191505092915050565b6000602082019050818103600083015261351381846134c0565b905092915050565b6000819050919050565b61352e8161351b565b811461353957600080fd5b50565b60008135905061354b81613525565b92915050565b600060208284031215613567576135666133a4565b5b60006135758482850161353c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135a98261357e565b9050919050565b6135b98161359e565b82525050565b60006020820190506135d460008301846135b0565b92915050565b6135e38161359e565b81146135ee57600080fd5b50565b600081359050613600816135da565b92915050565b6000806040838503121561361d5761361c6133a4565b5b600061362b858286016135f1565b925050602061363c8582860161353c565b9150509250929050565b60006020828403121561365c5761365b6133a4565b5b600061366a848285016135f1565b91505092915050565b61367c8161351b565b82525050565b60006020820190506136976000830184613673565b92915050565b6000806000606084860312156136b6576136b56133a4565b5b60006136c4868287016135f1565b93505060206136d5868287016135f1565b92505060406136e68682870161353c565b9150509250925092565b600061ffff82169050919050565b613707816136f0565b82525050565b600060208201905061372260008301846136fe565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261374d5761374c613728565b5b8235905067ffffffffffffffff81111561376a5761376961372d565b5b60208301915083600182028301111561378657613785613732565b5b9250929050565b600080602083850312156137a4576137a36133a4565b5b600083013567ffffffffffffffff8111156137c2576137c16133a9565b5b6137ce85828601613737565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613812826134af565b810181811067ffffffffffffffff82111715613831576138306137da565b5b80604052505050565b600061384461339a565b90506138508282613809565b919050565b600067ffffffffffffffff8211156138705761386f6137da565b5b602082029050602081019050919050565b600061389461388f84613855565b61383a565b905080838252602082019050602084028301858111156138b7576138b6613732565b5b835b818110156138e057806138cc88826135f1565b8452602084019350506020810190506138b9565b5050509392505050565b600082601f8301126138ff576138fe613728565b5b813561390f848260208601613881565b91505092915050565b6000806040838503121561392f5761392e6133a4565b5b600083013567ffffffffffffffff81111561394d5761394c6133a9565b5b613959858286016138ea565b925050602061396a8582860161353c565b9150509250929050565b61397d81613433565b811461398857600080fd5b50565b60008135905061399a81613974565b92915050565b600080604083850312156139b7576139b66133a4565b5b60006139c5858286016135f1565b92505060206139d68582860161398b565b9150509250929050565b600080fd5b600067ffffffffffffffff821115613a00576139ff6137da565b5b613a09826134af565b9050602081019050919050565b82818337600083830152505050565b6000613a38613a33846139e5565b61383a565b905082815260208101848484011115613a5457613a536139e0565b5b613a5f848285613a16565b509392505050565b600082601f830112613a7c57613a7b613728565b5b8135613a8c848260208601613a25565b91505092915050565b60008060008060808587031215613aaf57613aae6133a4565b5b6000613abd878288016135f1565b9450506020613ace878288016135f1565b9350506040613adf8782880161353c565b925050606085013567ffffffffffffffff811115613b0057613aff6133a9565b5b613b0c87828801613a67565b91505092959194509250565b60008060408385031215613b2f57613b2e6133a4565b5b6000613b3d858286016135f1565b9250506020613b4e858286016135f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9f57607f821691505b602082108103613bb257613bb1613b58565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c14602183613474565b9150613c1f82613bb8565b604082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613ca6603e83613474565b9150613cb182613c4a565b604082019050919050565b60006020820190508181036000830152613cd581613c99565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613d38602e83613474565b9150613d4382613cdc565b604082019050919050565b60006020820190508181036000830152613d6781613d2b565b9050919050565b600081905092915050565b50565b6000613d89600083613d6e565b9150613d9482613d79565b600082019050919050565b6000613daa82613d7c565b9150819050919050565b7f5465616d207472616e73666572206661696c6564000000000000000000000000600082015250565b6000613dea601483613474565b9150613df582613db4565b602082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f4d6f7265207468616e206d617820706572207472616e73616374696f6e000000600082015250565b6000613e56601d83613474565b9150613e6182613e20565b602082019050919050565b60006020820190508181036000830152613e8581613e49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ec68261351b565b9150613ed18361351b565b9250828201905080821115613ee957613ee8613e8c565b5b92915050565b7f4578636565646564206d6178696d756d20737570706c79000000000000000000600082015250565b6000613f25601783613474565b9150613f3082613eef565b602082019050919050565b60006020820190508181036000830152613f5481613f18565b9050919050565b6000613f668261351b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9857613f97613e8c565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613fd3565b61401a8683613fd3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061405761405261404d8461351b565b614032565b61351b565b9050919050565b6000819050919050565b6140718361403c565b61408561407d8261405e565b848454613fe0565b825550505050565b600090565b61409a61408d565b6140a5818484614068565b505050565b5b818110156140c9576140be600082614092565b6001810190506140ab565b5050565b601f82111561410e576140df81613fae565b6140e884613fc3565b810160208510156140f7578190505b61410b61410385613fc3565b8301826140aa565b50505b505050565b600082821c905092915050565b600061413160001984600802614113565b1980831691505092915050565b600061414a8383614120565b9150826002028217905092915050565b6141648383613fa3565b67ffffffffffffffff81111561417d5761417c6137da565b5b6141878254613b87565b6141928282856140cd565b6000601f8311600181146141c157600084156141af578287013590505b6141b9858261413e565b865550614221565b601f1984166141cf86613fae565b60005b828110156141f7578489013582556001820191506020850194506020810190506141d2565b868310156142145784890135614210601f891682614120565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061428f601883613474565b915061429a82614259565b602082019050919050565b600060208201905081810360008301526142be81614282565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000614321602983613474565b915061432c826142c5565b604082019050919050565b6000602082019050818103600083015261435081614314565b9050919050565b7f43616e6e6f742062652063616c6c6564206279206120636f6e74726163740000600082015250565b600061438d601e83613474565b915061439882614357565b602082019050919050565b600060208201905081810360008301526143bc81614380565b9050919050565b7f50756253616c6520697320706175736564000000000000000000000000000000600082015250565b60006143f9601183613474565b9150614404826143c3565b602082019050919050565b60006020820190508181036000830152614428816143ec565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207075626c69632073616c650000000000000000000000000000602082015250565b600061448b603283613474565b91506144968261442f565b604082019050919050565b600060208201905081810360008301526144ba8161447e565b9050919050565b7f55736572206d6178206d696e74206c696d697400000000000000000000000000600082015250565b60006144f7601383613474565b9150614502826144c1565b602082019050919050565b60006020820190508181036000830152614526816144ea565b9050919050565b60006145388261351b565b91506145438361351b565b92508282026145518161351b565b9150828204841483151761456857614567613e8c565b5b5092915050565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b60006145a5601983613474565b91506145b08261456f565b602082019050919050565b600060208201905081810360008301526145d481614598565b9050919050565b60006145e68261351b565b91506145f18361351b565b925082820390508181111561460957614608613e8c565b5b92915050565b7f50726553616c6520697320706175736564000000000000000000000000000000600082015250565b6000614645601183613474565b91506146508261460f565b602082019050919050565b6000602082019050818103600083015261467481614638565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207072652073616c650000000000000000000000000000000000602082015250565b60006146d7602f83613474565b91506146e28261467b565b604082019050919050565b60006020820190508181036000830152614706816146ca565b9050919050565b7f467265654d696e74206973207061757365640000000000000000000000000000600082015250565b6000614743601283613474565b915061474e8261470d565b602082019050919050565b6000602082019050818103600083015261477281614736565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e207468652066726565206d696e7400000000000000000000000000000000602082015250565b60006147d5603083613474565b91506147e082614779565b604082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000614841601f83613474565b915061484c8261480b565b602082019050919050565b6000602082019050818103600083015261487081614834565b9050919050565b600081905092915050565b6000815461488f81613b87565b6148998186614877565b945060018216600081146148b457600181146148c9576148fc565b60ff19831686528115158202860193506148fc565b6148d285613fae565b60005b838110156148f4578154818901526001820191506020810190506148d5565b838801955050505b50505092915050565b600061491082613469565b61491a8185614877565b935061492a818560208601613485565b80840191505092915050565b60006149428286614882565b915061494e8285614905565b915061495a8284614905565b9150819050949350505050565b7f5468616e6b7353616c6520697320706175736564000000000000000000000000600082015250565b600061499d601483613474565b91506149a882614967565b602082019050919050565b600060208201905081810360008301526149cc81614990565b9050919050565b7f546865726520617265206e6f204e465473206c65667420746f20636c61696d2060008201527f696e20746865207468616e6b732073616c650000000000000000000000000000602082015250565b6000614a2f603283613474565b9150614a3a826149d3565b604082019050919050565b60006020820190508181036000830152614a5e81614a22565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac1602683613474565b9150614acc82614a65565b604082019050919050565b60006020820190508181036000830152614af081614ab4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b2d602083613474565b9150614b3882614af7565b602082019050919050565b60006020820190508181036000830152614b5c81614b20565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614bbf602583613474565b9150614bca82614b63565b604082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c51602483613474565b9150614c5c82614bf5565b604082019050919050565b60006020820190508181036000830152614c8081614c44565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614cbd601983613474565b9150614cc882614c87565b602082019050919050565b60006020820190508181036000830152614cec81614cb0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d4f603283613474565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dbf8261351b565b9150614dca8361351b565b925082614dda57614dd9614d85565b5b828204905092915050565b6000614df08261351b565b9150614dfb8361351b565b925082614e0b57614e0a614d85565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e3d82614e16565b614e478185614e21565b9350614e57818560208601613485565b614e60816134af565b840191505092915050565b6000608082019050614e8060008301876135b0565b614e8d60208301866135b0565b614e9a6040830185613673565b8181036060830152614eac8184614e32565b905095945050505050565b600081519050614ec6816133da565b92915050565b600060208284031215614ee257614ee16133a4565b5b6000614ef084828501614eb7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f2f602083613474565b9150614f3a82614ef9565b602082019050919050565b60006020820190508181036000830152614f5e81614f22565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f9b601c83613474565b9150614fa682614f65565b602082019050919050565b60006020820190508181036000830152614fca81614f8e565b905091905056fea2646970667358221220dbcba3e4e93ad0a826e321d11dc37127dbc82489e98f93d62eb352dc5a16117564736f6c63430008110033
Deployed Bytecode Sourcemap
39873:12413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26202:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27129:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28642:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28159:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50607:96;;;;;;;;;;;;;:::i;:::-;;50392:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47964:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48709:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29342:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48073:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50935:96;;;;;;;;;;;;;:::i;:::-;;48302:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39913:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52027:256;;;:::i;:::-;;29749:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49788:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40826:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50267:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51782:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40513:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26840:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40877:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26571:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6738:103;;;;;;;;;;;;;:::i;:::-;;51531:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48829:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48169:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51039:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6090:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39961:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50504:95;;;;;;;;;;;;;:::i;:::-;;48437:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28885:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51284:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45351:1050;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30005:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42286:1047;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43341:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47700:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48576:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50821:102;;;;;;;;;;;;;:::i;:::-;;40793:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44278:1065;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50711:98;;;;;;;;;;;;;:::i;:::-;;29111:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40024:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6996:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26202:305;26304:4;26356:25;26341:40;;;:11;:40;;;;:105;;;;26413:33;26398:48;;;:11;:48;;;;26341:105;:158;;;;26463:36;26487:11;26463:23;:36::i;:::-;26341:158;26321:178;;26202:305;;;:::o;27129:100::-;27183:13;27216:5;27209:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27129:100;:::o;28642:171::-;28718:7;28738:23;28753:7;28738:14;:23::i;:::-;28781:15;:24;28797:7;28781:24;;;;;;;;;;;;;;;;;;;;;28774:31;;28642:171;;;:::o;28159:417::-;28240:13;28256:23;28271:7;28256:14;:23::i;:::-;28240:39;;28304:5;28298:11;;:2;:11;;;28290:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28398:5;28382:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28407:37;28424:5;28431:12;:10;:12::i;:::-;28407:16;:37::i;:::-;28382:62;28360:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28547:21;28556:2;28560:7;28547:8;:21::i;:::-;28229:347;28159:417;;:::o;50607:96::-;5976:13;:11;:13::i;:::-;40334:1:::1;50664:9;;:31;;;;;;;;;;;;;;;;;;50607:96::o:0;50392:104::-;5976:13;:11;:13::i;:::-;50477:11:::1;50464:10;;:24;;;;;;;;;;;;;;;;;;50392:104:::0;:::o;47964:101::-;48008:7;48035:22;:12;:20;:22::i;:::-;48028:29;;47964:101;:::o;48709:108::-;48763:7;40070:10;48783:26;;48709:108;:::o;29342:336::-;29537:41;29556:12;:10;:12::i;:::-;29570:7;29537:18;:41::i;:::-;29529:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:28;29652:4;29658:2;29662:7;29642:9;:28::i;:::-;29342:336;;;:::o;48073:88::-;48118:6;48144:9;;;;;;;;;;;48137:16;;48073:88;:::o;50935:96::-;5976:13;:11;:13::i;:::-;40503:1:::1;50992:9;;:31;;;;;;;;;;;;;;;;;;50935:96::o:0;48302:127::-;48375:7;48402:13;:19;48416:4;48402:19;;;;;;;;;;;;;;;;48395:26;;48302:127;;;:::o;39913:41::-;39950:4;39913:41;:::o;52027:256::-;5976:13;:11;:13::i;:::-;52085:19:::1;52107:21;52085:43;;52140:9;52163:10;;;;;;;;;;;52155:24;;52201:11;52155:72;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52139:88;;;52246:4;52238:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;52074:209;;52027:256::o:0;29749:185::-;29887:39;29904:4;29910:2;29914:7;29887:39;;;;;;;;;;;;:16;:39::i;:::-;29749:185;;;:::o;49788:471::-;5976:13;:11;:13::i;:::-;49867:29:::1;40131:3;49867:48;;49948:21;49936:8;:33;;49928:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39950:4;50034:22;:12;:20;:22::i;:::-;50023:8;:33;;;;:::i;:::-;50022:49;;50014:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;50115:9;50110:142;50134:8;50130:1;:12;50110:142;;;50164:24;:12;:22;:24::i;:::-;50203:37;50213:2;50217:22;:12;:20;:22::i;:::-;50203:9;:37::i;:::-;50144:3;;;;;:::i;:::-;;;;50110:142;;;;49856:403;49788:471:::0;;:::o;40826:42::-;;;;;;;;;;;;;;;;;;;:::o;50267:117::-;5976:13;:11;:13::i;:::-;50363::::1;;50348:12;:28;;;;;;;:::i;:::-;;50267:117:::0;;:::o;51782:237::-;5976:13;:11;:13::i;:::-;51896:9:::1;51891:121;51915:10;:17;51911:1;:21;51891:121;;;51984:16;51954:12;:27;51967:10;51978:1;51967:13;;;;;;;;:::i;:::-;;;;;;;;51954:27;;;;;;;;;;;;;;;:46;;;;51934:3;;;;;:::i;:::-;;;;51891:121;;;;51782:237:::0;;:::o;40513:45::-;;;;;;;;;;;;;:::o;26840:222::-;26912:7;26932:13;26948:7;:16;26956:7;26948:16;;;;;;;;;;;;;;;;;;;;;26932:32;;27000:1;26983:19;;:5;:19;;;26975:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27049:5;27042:12;;;26840:222;;;:::o;40877:70::-;;;;;;;;;;;;;:::o;26571:207::-;26643:7;26688:1;26671:19;;:5;:19;;;26663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26754:9;:16;26764:5;26754:16;;;;;;;;;;;;;;;;26747:23;;26571:207;;;:::o;6738:103::-;5976:13;:11;:13::i;:::-;6803:30:::1;6830:1;6803:18;:30::i;:::-;6738:103::o:0;51531:243::-;5976:13;:11;:13::i;:::-;51648:9:::1;51643:124;51667:10;:17;51663:1;:21;51643:124;;;51739:16;51706:15;:30;51722:10;51733:1;51722:13;;;;;;;;:::i;:::-;;;;;;;;51706:30;;;;;;;;;;;;;;;:49;;;;51686:3;;;;;:::i;:::-;;;;51643:124;;;;51531:243:::0;;:::o;48829:108::-;48883:7;40007:10;48903:26;;48829:108;:::o;48169:125::-;48241:7;48268:12;:18;48281:4;48268:18;;;;;;;;;;;;;;;;48261:25;;48169:125;;;:::o;51039:237::-;5976:13;:11;:13::i;:::-;51153:9:::1;51148:121;51172:10;:17;51168:1;:21;51148:121;;;51241:16;51211:12;:27;51224:10;51235:1;51224:13;;;;;;;;:::i;:::-;;;;;;;;51211:27;;;;;;;;;;;;;;;:46;;;;51191:3;;;;;:::i;:::-;;;;51148:121;;;;51039:237:::0;;:::o;6090:87::-;6136:7;6163:6;;;;;;;;;;;6156:13;;6090:87;:::o;27298:104::-;27354:13;27387:7;27380:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27298:104;:::o;39961:56::-;40007:10;39961:56;:::o;50504:95::-;5976:13;:11;:13::i;:::-;40279:1:::1;50560:9;;:31;;;;;;;;;;;;;;;;;;50504:95::o:0;48437:131::-;48512:7;48539:15;:21;48555:4;48539:21;;;;;;;;;;;;;;;;48532:28;;48437:131;;;:::o;28885:155::-;28980:52;28999:12;:10;:12::i;:::-;29013:8;29023;28980:18;:52::i;:::-;28885:155;;:::o;51284:239::-;5976:13;:11;:13::i;:::-;51399:9:::1;51394:122;51418:10;:17;51414:1;:21;51394:122;;;51488:16;51457:13;:28;51471:10;51482:1;51471:13;;;;;;;;:::i;:::-;;;;;;;;51457:28;;;;;;;;;;;;;;;:47;;;;51437:3;;;;;:::i;:::-;;;;51394:122;;;;51284:239:::0;;:::o;45351:1050::-;45412:13;40007:10;45412:35;;45458:29;40131:3;45458:48;;45517:17;39950:4;45517:30;;45558:21;45582:12;:24;45595:10;45582:24;;;;;;;;;;;;;;;;45558:48;;45640:10;45627:23;;:9;:23;;;45619:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40503:1;45704:32;;:9;;;;;;;;;;;:32;;;45696:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45789:21;45777:8;:33;;45769:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;45880:1;45863:13;:18;45855:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;45972:8;45955:13;:25;;45947:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46060:9;46034:22;:12;:20;:22::i;:::-;46023:8;:33;;;;:::i;:::-;:46;;46015:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;46137:8;46129:5;:16;;;;:::i;:::-;46116:9;:29;46108:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46191:9;46203:1;46191:13;;46186:208;46211:8;46206:1;:13;46186:208;;46282:1;46268:13;:15;;;;:::i;:::-;46241:12;:24;46254:10;46241:24;;;;;;;;;;;;;;;:42;;;;46298:24;:12;:22;:24::i;:::-;46337:45;46347:10;46359:22;:12;:20;:22::i;:::-;46337:9;:45::i;:::-;46221:3;;;;;:::i;:::-;;;;46186:208;;;;45401:1000;;;;45351:1050;:::o;30005:323::-;30179:41;30198:12;:10;:12::i;:::-;30212:7;30179:18;:41::i;:::-;30171:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30282:38;30296:4;30302:2;30306:7;30315:4;30282:13;:38::i;:::-;30005:323;;;;:::o;42286:1047::-;42347:13;40070:10;42347:35;;42393:29;40131:3;42393:48;;42452:17;39950:4;42452:30;;42493:21;42517:12;:24;42530:10;42517:24;;;;;;;;;;;;;;;;42493:48;;42575:10;42562:23;;:9;:23;;;42554:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40334:1;42639:32;;:9;;;;;;;;;;;:32;;;42631:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42724:21;42712:8;:33;;42704:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42815:1;42798:13;:18;42790:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42904:8;42887:13;:25;;42879:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42992:9;42966:22;:12;:20;:22::i;:::-;42955:8;:33;;;;:::i;:::-;:46;;42947:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;43069:8;43061:5;:16;;;;:::i;:::-;43048:9;:29;43040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43123:9;43135:1;43123:13;;43118:208;43143:8;43138:1;:13;43118:208;;43214:1;43200:13;:15;;;;:::i;:::-;43173:12;:24;43186:10;43173:24;;;;;;;;;;;;;;;:42;;;;43230:24;:12;:22;:24::i;:::-;43269:45;43279:10;43291:22;:12;:20;:22::i;:::-;43269:9;:45::i;:::-;43153:3;;;;;:::i;:::-;;;;43118:208;;;;42336:997;;;;42286:1047;:::o;43341:929::-;43403:29;40131:3;43403:48;;43462:17;39950:4;43462:30;;43503:21;43527:13;:25;43541:10;43527:25;;;;;;;;;;;;;;;;43503:49;;43586:10;43573:23;;:9;:23;;;43565:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40390:1;43650:33;;:9;;;;;;;;;;;:33;;;43642:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43737:21;43725:8;:33;;43717:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43828:1;43811:13;:18;43803:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;43918:8;43901:13;:25;;43893:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44006:9;43980:22;:12;:20;:22::i;:::-;43969:8;:33;;;;:::i;:::-;:46;;43961:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:9;44071:1;44059:13;;44054:209;44079:8;44074:1;:13;44054:209;;44151:1;44137:13;:15;;;;:::i;:::-;44109:13;:25;44123:10;44109:25;;;;;;;;;;;;;;;:43;;;;44167:24;:12;:22;:24::i;:::-;44206:45;44216:10;44228:22;:12;:20;:22::i;:::-;44206:9;:45::i;:::-;44089:3;;;;;:::i;:::-;;;;44054:209;;;;43392:878;;;43341:929;:::o;47700:256::-;47766:13;47800:17;47808:8;47800:7;:17::i;:::-;47792:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47895:12;47909:26;47926:8;47909:16;:26::i;:::-;47937:9;;;;;;;;;;;;;;;;;47878:69;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47864:84;;47700:256;;;:::o;48576:125::-;48648:7;48675:12;:18;48688:4;48675:18;;;;;;;;;;;;;;;;48668:25;;48576:125;;;:::o;50821:102::-;5976:13;:11;:13::i;:::-;40448:1:::1;50881:9;;:34;;;;;;;;;;;;;;;;;;50821:102::o:0;40793:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44278:1065::-;44342:13;40007:10;44342:35;;44388:29;40131:3;44388:48;;44447:17;39950:4;44447:30;;44488:21;44512:15;:27;44528:10;44512:27;;;;;;;;;;;;;;;;44488:51;;44573:10;44560:23;;:9;:23;;;44552:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40448:1;44637:35;;:9;;;;;;;;;;;:35;;;44629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44728:21;44716:8;:33;;44708:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44819:1;44802:13;:18;44794:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44911:8;44894:13;:25;;44886:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44999:9;44973:22;:12;:20;:22::i;:::-;44962:8;:33;;;;:::i;:::-;:46;;44954:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45076:8;45068:5;:16;;;;:::i;:::-;45055:9;:29;45047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45130:9;45142:1;45130:13;;45125:211;45150:8;45145:1;:13;45125:211;;45224:1;45210:13;:15;;;;:::i;:::-;45180;:27;45196:10;45180:27;;;;;;;;;;;;;;;:45;;;;45240:24;:12;:22;:24::i;:::-;45279:45;45289:10;45301:22;:12;:20;:22::i;:::-;45279:9;:45::i;:::-;45160:3;;;;;:::i;:::-;;;;45125:211;;;;44331:1012;;;;44278:1065;:::o;50711:98::-;5976:13;:11;:13::i;:::-;40390:1:::1;50769:9;;:32;;;;;;;;;;;;;;;;;;50711:98::o:0;29111:164::-;29208:4;29232:18;:25;29251:5;29232:25;;;;;;;;;;;;;;;:35;29258:8;29232:35;;;;;;;;;;;;;;;;;;;;;;;;;29225:42;;29111:164;;;;:::o;40024:56::-;40070:10;40024:56;:::o;6996:201::-;5976:13;:11;:13::i;:::-;7105:1:::1;7085:22;;:8;:22;;::::0;7077:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7161:28;7180:8;7161:18;:28::i;:::-;6996:201:::0;:::o;18944:157::-;19029:4;19068:25;19053:40;;;:11;:40;;;;19046:47;;18944:157;;;:::o;36617:135::-;36699:16;36707:7;36699;:16::i;:::-;36691:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36617:135;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;35896:174::-;35998:2;35971:15;:24;35987:7;35971:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36054:7;36050:2;36016:46;;36025:23;36040:7;36025:14;:23::i;:::-;36016:46;;;;;;;;;;;;35896:174;;:::o;6255:132::-;6330:12;:10;:12::i;:::-;6319:23;;:7;:5;:7::i;:::-;:23;;;6311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6255:132::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;32129:264::-;32222:4;32239:13;32255:23;32270:7;32255:14;:23::i;:::-;32239:39;;32308:5;32297:16;;:7;:16;;;:52;;;;32317:32;32334:5;32341:7;32317:16;:32::i;:::-;32297:52;:87;;;;32377:7;32353:31;;:20;32365:7;32353:11;:20::i;:::-;:31;;;32297:87;32289:96;;;32129:264;;;;:::o;35152:625::-;35311:4;35284:31;;:23;35299:7;35284:14;:23::i;:::-;:31;;;35276:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35390:1;35376:16;;:2;:16;;;35368:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35446:39;35467:4;35473:2;35477:7;35446:20;:39::i;:::-;35550:29;35567:1;35571:7;35550:8;:29::i;:::-;35611:1;35592:9;:15;35602:4;35592:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35640:1;35623:9;:13;35633:2;35623:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35671:2;35652:7;:16;35660:7;35652:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35710:7;35706:2;35691:27;;35700:4;35691:27;;;;;;;;;;;;35731:38;35751:4;35757:2;35761:7;35731:19;:38::i;:::-;35152:625;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;32735:110::-;32811:26;32821:2;32825:7;32811:26;;;;;;;;;;;;:9;:26::i;:::-;32735:110;;:::o;7357:191::-;7431:16;7450:6;;;;;;;;;;;7431:25;;7476:8;7467:6;;:17;;;;;;;;;;;;;;;;;;7531:8;7500:40;;7521:8;7500:40;;;;;;;;;;;;7420:128;7357:191;:::o;36213:315::-;36368:8;36359:17;;:5;:17;;;36351:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36455:8;36417:18;:25;36436:5;36417:25;;;;;;;;;;;;;;;:35;36443:8;36417:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36501:8;36479:41;;36494:5;36479:41;;;36511:8;36479:41;;;;;;:::i;:::-;;;;;;;;36213:315;;;:::o;31209:313::-;31365:28;31375:4;31381:2;31385:7;31365:9;:28::i;:::-;31412:47;31435:4;31441:2;31445:7;31454:4;31412:22;:47::i;:::-;31404:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31209:313;;;;:::o;31835:127::-;31900:4;31952:1;31924:30;;:7;:16;31932:7;31924:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31917:37;;31835:127;;;:::o;1895:723::-;1951:13;2181:1;2172:5;:10;2168:53;;2199:10;;;;;;;;;;;;;;;;;;;;;2168:53;2231:12;2246:5;2231:20;;2262:14;2287:78;2302:1;2294:4;:9;2287:78;;2320:8;;;;;:::i;:::-;;;;2351:2;2343:10;;;;;:::i;:::-;;;2287:78;;;2375:19;2407:6;2397:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:39;;2425:154;2441:1;2432:5;:10;2425:154;;2469:1;2459:11;;;;;:::i;:::-;;;2536:2;2528:5;:10;;;;:::i;:::-;2515:2;:24;;;;:::i;:::-;2502:39;;2485:6;2492;2485:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2565:2;2556:11;;;;;:::i;:::-;;;2425:154;;;2603:6;2589:21;;;;;1895:723;;;;:::o;38741:126::-;;;;:::o;39252:125::-;;;;:::o;33072:319::-;33201:18;33207:2;33211:7;33201:5;:18::i;:::-;33252:53;33283:1;33287:2;33291:7;33300:4;33252:22;:53::i;:::-;33230:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33072:319;;;:::o;37316:853::-;37470:4;37491:15;:2;:13;;;:15::i;:::-;37487:675;;;37543:2;37527:36;;;37564:12;:10;:12::i;:::-;37578:4;37584:7;37593:4;37527:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37523:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37785:1;37768:6;:13;:18;37764:328;;37811:60;;;;;;;;;;:::i;:::-;;;;;;;;37764:328;38042:6;38036:13;38027:6;38023:2;38019:15;38012:38;37523:584;37659:41;;;37649:51;;;:6;:51;;;;37642:58;;;;;37487:675;38146:4;38139:11;;37316:853;;;;;;;:::o;33727:439::-;33821:1;33807:16;;:2;:16;;;33799:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33880:16;33888:7;33880;:16::i;:::-;33879:17;33871:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:45;33971:1;33975:2;33979:7;33942:20;:45::i;:::-;34017:1;34000:9;:13;34010:2;34000:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34048:2;34029:7;:16;34037:7;34029:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34093:7;34089:2;34068:33;;34085:1;34068:33;;;;;;;;;;;;34114:44;34142:1;34146:2;34150:7;34114:19;:44::i;:::-;33727:439;;:::o;8788:326::-;8848:4;9105:1;9083:7;:19;;;:23;9076:30;;8788:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:329::-;4949:6;4998:2;4986:9;4977:7;4973:23;4969:32;4966:119;;;5004:79;;:::i;:::-;4966:119;5124:1;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;:::i;:::-;5139:63;;5095:117;4890:329;;;;:::o;5225:118::-;5312:24;5330:5;5312:24;:::i;:::-;5307:3;5300:37;5225:118;;:::o;5349:222::-;5442:4;5480:2;5469:9;5465:18;5457:26;;5493:71;5561:1;5550:9;5546:17;5537:6;5493:71;:::i;:::-;5349:222;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:89::-;6238:7;6278:6;6271:5;6267:18;6256:29;;6202:89;;;:::o;6297:115::-;6382:23;6399:5;6382:23;:::i;:::-;6377:3;6370:36;6297:115;;:::o;6418:218::-;6509:4;6547:2;6536:9;6532:18;6524:26;;6560:69;6626:1;6615:9;6611:17;6602:6;6560:69;:::i;:::-;6418:218;;;;:::o;6642:117::-;6751:1;6748;6741:12;6765:117;6874:1;6871;6864:12;6888:117;6997:1;6994;6987:12;7025:553;7083:8;7093:6;7143:3;7136:4;7128:6;7124:17;7120:27;7110:122;;7151:79;;:::i;:::-;7110:122;7264:6;7251:20;7241:30;;7294:18;7286:6;7283:30;7280:117;;;7316:79;;:::i;:::-;7280:117;7430:4;7422:6;7418:17;7406:29;;7484:3;7476:4;7468:6;7464:17;7454:8;7450:32;7447:41;7444:128;;;7491:79;;:::i;:::-;7444:128;7025:553;;;;;:::o;7584:529::-;7655:6;7663;7712:2;7700:9;7691:7;7687:23;7683:32;7680:119;;;7718:79;;:::i;:::-;7680:119;7866:1;7855:9;7851:17;7838:31;7896:18;7888:6;7885:30;7882:117;;;7918:79;;:::i;:::-;7882:117;8031:65;8088:7;8079:6;8068:9;8064:22;8031:65;:::i;:::-;8013:83;;;;7809:297;7584:529;;;;;:::o;8119:180::-;8167:77;8164:1;8157:88;8264:4;8261:1;8254:15;8288:4;8285:1;8278:15;8305:281;8388:27;8410:4;8388:27;:::i;:::-;8380:6;8376:40;8518:6;8506:10;8503:22;8482:18;8470:10;8467:34;8464:62;8461:88;;;8529:18;;:::i;:::-;8461:88;8569:10;8565:2;8558:22;8348:238;8305:281;;:::o;8592:129::-;8626:6;8653:20;;:::i;:::-;8643:30;;8682:33;8710:4;8702:6;8682:33;:::i;:::-;8592:129;;;:::o;8727:311::-;8804:4;8894:18;8886:6;8883:30;8880:56;;;8916:18;;:::i;:::-;8880:56;8966:4;8958:6;8954:17;8946:25;;9026:4;9020;9016:15;9008:23;;8727:311;;;:::o;9061:710::-;9157:5;9182:81;9198:64;9255:6;9198:64;:::i;:::-;9182:81;:::i;:::-;9173:90;;9283:5;9312:6;9305:5;9298:21;9346:4;9339:5;9335:16;9328:23;;9399:4;9391:6;9387:17;9379:6;9375:30;9428:3;9420:6;9417:15;9414:122;;;9447:79;;:::i;:::-;9414:122;9562:6;9545:220;9579:6;9574:3;9571:15;9545:220;;;9654:3;9683:37;9716:3;9704:10;9683:37;:::i;:::-;9678:3;9671:50;9750:4;9745:3;9741:14;9734:21;;9621:144;9605:4;9600:3;9596:14;9589:21;;9545:220;;;9549:21;9163:608;;9061:710;;;;;:::o;9794:370::-;9865:5;9914:3;9907:4;9899:6;9895:17;9891:27;9881:122;;9922:79;;:::i;:::-;9881:122;10039:6;10026:20;10064:94;10154:3;10146:6;10139:4;10131:6;10127:17;10064:94;:::i;:::-;10055:103;;9871:293;9794:370;;;;:::o;10170:684::-;10263:6;10271;10320:2;10308:9;10299:7;10295:23;10291:32;10288:119;;;10326:79;;:::i;:::-;10288:119;10474:1;10463:9;10459:17;10446:31;10504:18;10496:6;10493:30;10490:117;;;10526:79;;:::i;:::-;10490:117;10631:78;10701:7;10692:6;10681:9;10677:22;10631:78;:::i;:::-;10621:88;;10417:302;10758:2;10784:53;10829:7;10820:6;10809:9;10805:22;10784:53;:::i;:::-;10774:63;;10729:118;10170:684;;;;;:::o;10860:116::-;10930:21;10945:5;10930:21;:::i;:::-;10923:5;10920:32;10910:60;;10966:1;10963;10956:12;10910:60;10860:116;:::o;10982:133::-;11025:5;11063:6;11050:20;11041:29;;11079:30;11103:5;11079:30;:::i;:::-;10982:133;;;;:::o;11121:468::-;11186:6;11194;11243:2;11231:9;11222:7;11218:23;11214:32;11211:119;;;11249:79;;:::i;:::-;11211:119;11369:1;11394:53;11439:7;11430:6;11419:9;11415:22;11394:53;:::i;:::-;11384:63;;11340:117;11496:2;11522:50;11564:7;11555:6;11544:9;11540:22;11522:50;:::i;:::-;11512:60;;11467:115;11121:468;;;;;:::o;11595:117::-;11704:1;11701;11694:12;11718:307;11779:4;11869:18;11861:6;11858:30;11855:56;;;11891:18;;:::i;:::-;11855:56;11929:29;11951:6;11929:29;:::i;:::-;11921:37;;12013:4;12007;12003:15;11995:23;;11718:307;;;:::o;12031:146::-;12128:6;12123:3;12118;12105:30;12169:1;12160:6;12155:3;12151:16;12144:27;12031:146;;;:::o;12183:423::-;12260:5;12285:65;12301:48;12342:6;12301:48;:::i;:::-;12285:65;:::i;:::-;12276:74;;12373:6;12366:5;12359:21;12411:4;12404:5;12400:16;12449:3;12440:6;12435:3;12431:16;12428:25;12425:112;;;12456:79;;:::i;:::-;12425:112;12546:54;12593:6;12588:3;12583;12546:54;:::i;:::-;12266:340;12183:423;;;;;:::o;12625:338::-;12680:5;12729:3;12722:4;12714:6;12710:17;12706:27;12696:122;;12737:79;;:::i;:::-;12696:122;12854:6;12841:20;12879:78;12953:3;12945:6;12938:4;12930:6;12926:17;12879:78;:::i;:::-;12870:87;;12686:277;12625:338;;;;:::o;12969:943::-;13064:6;13072;13080;13088;13137:3;13125:9;13116:7;13112:23;13108:33;13105:120;;;13144:79;;:::i;:::-;13105:120;13264:1;13289:53;13334:7;13325:6;13314:9;13310:22;13289:53;:::i;:::-;13279:63;;13235:117;13391:2;13417:53;13462:7;13453:6;13442:9;13438:22;13417:53;:::i;:::-;13407:63;;13362:118;13519:2;13545:53;13590:7;13581:6;13570:9;13566:22;13545:53;:::i;:::-;13535:63;;13490:118;13675:2;13664:9;13660:18;13647:32;13706:18;13698:6;13695:30;13692:117;;;13728:79;;:::i;:::-;13692:117;13833:62;13887:7;13878:6;13867:9;13863:22;13833:62;:::i;:::-;13823:72;;13618:287;12969:943;;;;;;;:::o;13918:474::-;13986:6;13994;14043:2;14031:9;14022:7;14018:23;14014:32;14011:119;;;14049:79;;:::i;:::-;14011:119;14169:1;14194:53;14239:7;14230:6;14219:9;14215:22;14194:53;:::i;:::-;14184:63;;14140:117;14296:2;14322:53;14367:7;14358:6;14347:9;14343:22;14322:53;:::i;:::-;14312:63;;14267:118;13918:474;;;;;:::o;14398:180::-;14446:77;14443:1;14436:88;14543:4;14540:1;14533:15;14567:4;14564:1;14557:15;14584:320;14628:6;14665:1;14659:4;14655:12;14645:22;;14712:1;14706:4;14702:12;14733:18;14723:81;;14789:4;14781:6;14777:17;14767:27;;14723:81;14851:2;14843:6;14840:14;14820:18;14817:38;14814:84;;14870:18;;:::i;:::-;14814:84;14635:269;14584:320;;;:::o;14910:220::-;15050:34;15046:1;15038:6;15034:14;15027:58;15119:3;15114:2;15106:6;15102:15;15095:28;14910:220;:::o;15136:366::-;15278:3;15299:67;15363:2;15358:3;15299:67;:::i;:::-;15292:74;;15375:93;15464:3;15375:93;:::i;:::-;15493:2;15488:3;15484:12;15477:19;;15136:366;;;:::o;15508:419::-;15674:4;15712:2;15701:9;15697:18;15689:26;;15761:9;15755:4;15751:20;15747:1;15736:9;15732:17;15725:47;15789:131;15915:4;15789:131;:::i;:::-;15781:139;;15508:419;;;:::o;15933:249::-;16073:34;16069:1;16061:6;16057:14;16050:58;16142:32;16137:2;16129:6;16125:15;16118:57;15933:249;:::o;16188:366::-;16330:3;16351:67;16415:2;16410:3;16351:67;:::i;:::-;16344:74;;16427:93;16516:3;16427:93;:::i;:::-;16545:2;16540:3;16536:12;16529:19;;16188:366;;;:::o;16560:419::-;16726:4;16764:2;16753:9;16749:18;16741:26;;16813:9;16807:4;16803:20;16799:1;16788:9;16784:17;16777:47;16841:131;16967:4;16841:131;:::i;:::-;16833:139;;16560:419;;;:::o;16985:233::-;17125:34;17121:1;17113:6;17109:14;17102:58;17194:16;17189:2;17181:6;17177:15;17170:41;16985:233;:::o;17224:366::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17224:366;;;:::o;17596:419::-;17762:4;17800:2;17789:9;17785:18;17777:26;;17849:9;17843:4;17839:20;17835:1;17824:9;17820:17;17813:47;17877:131;18003:4;17877:131;:::i;:::-;17869:139;;17596:419;;;:::o;18021:147::-;18122:11;18159:3;18144:18;;18021:147;;;;:::o;18174:114::-;;:::o;18294:398::-;18453:3;18474:83;18555:1;18550:3;18474:83;:::i;:::-;18467:90;;18566:93;18655:3;18566:93;:::i;:::-;18684:1;18679:3;18675:11;18668:18;;18294:398;;;:::o;18698:379::-;18882:3;18904:147;19047:3;18904:147;:::i;:::-;18897:154;;19068:3;19061:10;;18698:379;;;:::o;19083:170::-;19223:22;19219:1;19211:6;19207:14;19200:46;19083:170;:::o;19259:366::-;19401:3;19422:67;19486:2;19481:3;19422:67;:::i;:::-;19415:74;;19498:93;19587:3;19498:93;:::i;:::-;19616:2;19611:3;19607:12;19600:19;;19259:366;;;:::o;19631:419::-;19797:4;19835:2;19824:9;19820:18;19812:26;;19884:9;19878:4;19874:20;19870:1;19859:9;19855:17;19848:47;19912:131;20038:4;19912:131;:::i;:::-;19904:139;;19631:419;;;:::o;20056:179::-;20196:31;20192:1;20184:6;20180:14;20173:55;20056:179;:::o;20241:366::-;20383:3;20404:67;20468:2;20463:3;20404:67;:::i;:::-;20397:74;;20480:93;20569:3;20480:93;:::i;:::-;20598:2;20593:3;20589:12;20582:19;;20241:366;;;:::o;20613:419::-;20779:4;20817:2;20806:9;20802:18;20794:26;;20866:9;20860:4;20856:20;20852:1;20841:9;20837:17;20830:47;20894:131;21020:4;20894:131;:::i;:::-;20886:139;;20613:419;;;:::o;21038:180::-;21086:77;21083:1;21076:88;21183:4;21180:1;21173:15;21207:4;21204:1;21197:15;21224:191;21264:3;21283:20;21301:1;21283:20;:::i;:::-;21278:25;;21317:20;21335:1;21317:20;:::i;:::-;21312:25;;21360:1;21357;21353:9;21346:16;;21381:3;21378:1;21375:10;21372:36;;;21388:18;;:::i;:::-;21372:36;21224:191;;;;:::o;21421:173::-;21561:25;21557:1;21549:6;21545:14;21538:49;21421:173;:::o;21600:366::-;21742:3;21763:67;21827:2;21822:3;21763:67;:::i;:::-;21756:74;;21839:93;21928:3;21839:93;:::i;:::-;21957:2;21952:3;21948:12;21941:19;;21600:366;;;:::o;21972:419::-;22138:4;22176:2;22165:9;22161:18;22153:26;;22225:9;22219:4;22215:20;22211:1;22200:9;22196:17;22189:47;22253:131;22379:4;22253:131;:::i;:::-;22245:139;;21972:419;;;:::o;22397:233::-;22436:3;22459:24;22477:5;22459:24;:::i;:::-;22450:33;;22505:66;22498:5;22495:77;22492:103;;22575:18;;:::i;:::-;22492:103;22622:1;22615:5;22611:13;22604:20;;22397:233;;;:::o;22636:97::-;22695:6;22723:3;22713:13;;22636:97;;;;:::o;22739:141::-;22788:4;22811:3;22803:11;;22834:3;22831:1;22824:14;22868:4;22865:1;22855:18;22847:26;;22739:141;;;:::o;22886:93::-;22923:6;22970:2;22965;22958:5;22954:14;22950:23;22940:33;;22886:93;;;:::o;22985:107::-;23029:8;23079:5;23073:4;23069:16;23048:37;;22985:107;;;;:::o;23098:393::-;23167:6;23217:1;23205:10;23201:18;23240:97;23270:66;23259:9;23240:97;:::i;:::-;23358:39;23388:8;23377:9;23358:39;:::i;:::-;23346:51;;23430:4;23426:9;23419:5;23415:21;23406:30;;23479:4;23469:8;23465:19;23458:5;23455:30;23445:40;;23174:317;;23098:393;;;;;:::o;23497:60::-;23525:3;23546:5;23539:12;;23497:60;;;:::o;23563:142::-;23613:9;23646:53;23664:34;23673:24;23691:5;23673:24;:::i;:::-;23664:34;:::i;:::-;23646:53;:::i;:::-;23633:66;;23563:142;;;:::o;23711:75::-;23754:3;23775:5;23768:12;;23711:75;;;:::o;23792:269::-;23902:39;23933:7;23902:39;:::i;:::-;23963:91;24012:41;24036:16;24012:41;:::i;:::-;24004:6;23997:4;23991:11;23963:91;:::i;:::-;23957:4;23950:105;23868:193;23792:269;;;:::o;24067:73::-;24112:3;24067:73;:::o;24146:189::-;24223:32;;:::i;:::-;24264:65;24322:6;24314;24308:4;24264:65;:::i;:::-;24199:136;24146:189;;:::o;24341:186::-;24401:120;24418:3;24411:5;24408:14;24401:120;;;24472:39;24509:1;24502:5;24472:39;:::i;:::-;24445:1;24438:5;24434:13;24425:22;;24401:120;;;24341:186;;:::o;24533:543::-;24634:2;24629:3;24626:11;24623:446;;;24668:38;24700:5;24668:38;:::i;:::-;24752:29;24770:10;24752:29;:::i;:::-;24742:8;24738:44;24935:2;24923:10;24920:18;24917:49;;;24956:8;24941:23;;24917:49;24979:80;25035:22;25053:3;25035:22;:::i;:::-;25025:8;25021:37;25008:11;24979:80;:::i;:::-;24638:431;;24623:446;24533:543;;;:::o;25082:117::-;25136:8;25186:5;25180:4;25176:16;25155:37;;25082:117;;;;:::o;25205:169::-;25249:6;25282:51;25330:1;25326:6;25318:5;25315:1;25311:13;25282:51;:::i;:::-;25278:56;25363:4;25357;25353:15;25343:25;;25256:118;25205:169;;;;:::o;25379:295::-;25455:4;25601:29;25626:3;25620:4;25601:29;:::i;:::-;25593:37;;25663:3;25660:1;25656:11;25650:4;25647:21;25639:29;;25379:295;;;;:::o;25679:1403::-;25803:44;25843:3;25838;25803:44;:::i;:::-;25912:18;25904:6;25901:30;25898:56;;;25934:18;;:::i;:::-;25898:56;25978:38;26010:4;26004:11;25978:38;:::i;:::-;26063:67;26123:6;26115;26109:4;26063:67;:::i;:::-;26157:1;26186:2;26178:6;26175:14;26203:1;26198:632;;;;26874:1;26891:6;26888:84;;;26947:9;26942:3;26938:19;26925:33;26916:42;;26888:84;26998:67;27058:6;27051:5;26998:67;:::i;:::-;26992:4;26985:81;26847:229;26168:908;;26198:632;26250:4;26246:9;26238:6;26234:22;26284:37;26316:4;26284:37;:::i;:::-;26343:1;26357:215;26371:7;26368:1;26365:14;26357:215;;;26457:9;26452:3;26448:19;26435:33;26427:6;26420:49;26508:1;26500:6;26496:14;26486:24;;26555:2;26544:9;26540:18;26527:31;;26394:4;26391:1;26387:12;26382:17;;26357:215;;;26600:6;26591:7;26588:19;26585:186;;;26665:9;26660:3;26656:19;26643:33;26708:48;26750:4;26742:6;26738:17;26727:9;26708:48;:::i;:::-;26700:6;26693:64;26608:163;26585:186;26817:1;26813;26805:6;26801:14;26797:22;26791:4;26784:36;26205:625;;;26168:908;;25778:1304;;;25679:1403;;;:::o;27088:180::-;27136:77;27133:1;27126:88;27233:4;27230:1;27223:15;27257:4;27254:1;27247:15;27274:174;27414:26;27410:1;27402:6;27398:14;27391:50;27274:174;:::o;27454:366::-;27596:3;27617:67;27681:2;27676:3;27617:67;:::i;:::-;27610:74;;27693:93;27782:3;27693:93;:::i;:::-;27811:2;27806:3;27802:12;27795:19;;27454:366;;;:::o;27826:419::-;27992:4;28030:2;28019:9;28015:18;28007:26;;28079:9;28073:4;28069:20;28065:1;28054:9;28050:17;28043:47;28107:131;28233:4;28107:131;:::i;:::-;28099:139;;27826:419;;;:::o;28251:228::-;28391:34;28387:1;28379:6;28375:14;28368:58;28460:11;28455:2;28447:6;28443:15;28436:36;28251:228;:::o;28485:366::-;28627:3;28648:67;28712:2;28707:3;28648:67;:::i;:::-;28641:74;;28724:93;28813:3;28724:93;:::i;:::-;28842:2;28837:3;28833:12;28826:19;;28485:366;;;:::o;28857:419::-;29023:4;29061:2;29050:9;29046:18;29038:26;;29110:9;29104:4;29100:20;29096:1;29085:9;29081:17;29074:47;29138:131;29264:4;29138:131;:::i;:::-;29130:139;;28857:419;;;:::o;29282:180::-;29422:32;29418:1;29410:6;29406:14;29399:56;29282:180;:::o;29468:366::-;29610:3;29631:67;29695:2;29690:3;29631:67;:::i;:::-;29624:74;;29707:93;29796:3;29707:93;:::i;:::-;29825:2;29820:3;29816:12;29809:19;;29468:366;;;:::o;29840:419::-;30006:4;30044:2;30033:9;30029:18;30021:26;;30093:9;30087:4;30083:20;30079:1;30068:9;30064:17;30057:47;30121:131;30247:4;30121:131;:::i;:::-;30113:139;;29840:419;;;:::o;30265:167::-;30405:19;30401:1;30393:6;30389:14;30382:43;30265:167;:::o;30438:366::-;30580:3;30601:67;30665:2;30660:3;30601:67;:::i;:::-;30594:74;;30677:93;30766:3;30677:93;:::i;:::-;30795:2;30790:3;30786:12;30779:19;;30438:366;;;:::o;30810:419::-;30976:4;31014:2;31003:9;30999:18;30991:26;;31063:9;31057:4;31053:20;31049:1;31038:9;31034:17;31027:47;31091:131;31217:4;31091:131;:::i;:::-;31083:139;;30810:419;;;:::o;31235:237::-;31375:34;31371:1;31363:6;31359:14;31352:58;31444:20;31439:2;31431:6;31427:15;31420:45;31235:237;:::o;31478:366::-;31620:3;31641:67;31705:2;31700:3;31641:67;:::i;:::-;31634:74;;31717:93;31806:3;31717:93;:::i;:::-;31835:2;31830:3;31826:12;31819:19;;31478:366;;;:::o;31850:419::-;32016:4;32054:2;32043:9;32039:18;32031:26;;32103:9;32097:4;32093:20;32089:1;32078:9;32074:17;32067:47;32131:131;32257:4;32131:131;:::i;:::-;32123:139;;31850:419;;;:::o;32275:169::-;32415:21;32411:1;32403:6;32399:14;32392:45;32275:169;:::o;32450:366::-;32592:3;32613:67;32677:2;32672:3;32613:67;:::i;:::-;32606:74;;32689:93;32778:3;32689:93;:::i;:::-;32807:2;32802:3;32798:12;32791:19;;32450:366;;;:::o;32822:419::-;32988:4;33026:2;33015:9;33011:18;33003:26;;33075:9;33069:4;33065:20;33061:1;33050:9;33046:17;33039:47;33103:131;33229:4;33103:131;:::i;:::-;33095:139;;32822:419;;;:::o;33247:410::-;33287:7;33310:20;33328:1;33310:20;:::i;:::-;33305:25;;33344:20;33362:1;33344:20;:::i;:::-;33339:25;;33399:1;33396;33392:9;33421:30;33439:11;33421:30;:::i;:::-;33410:41;;33600:1;33591:7;33587:15;33584:1;33581:22;33561:1;33554:9;33534:83;33511:139;;33630:18;;:::i;:::-;33511:139;33295:362;33247:410;;;;:::o;33663:175::-;33803:27;33799:1;33791:6;33787:14;33780:51;33663:175;:::o;33844:366::-;33986:3;34007:67;34071:2;34066:3;34007:67;:::i;:::-;34000:74;;34083:93;34172:3;34083:93;:::i;:::-;34201:2;34196:3;34192:12;34185:19;;33844:366;;;:::o;34216:419::-;34382:4;34420:2;34409:9;34405:18;34397:26;;34469:9;34463:4;34459:20;34455:1;34444:9;34440:17;34433:47;34497:131;34623:4;34497:131;:::i;:::-;34489:139;;34216:419;;;:::o;34641:194::-;34681:4;34701:20;34719:1;34701:20;:::i;:::-;34696:25;;34735:20;34753:1;34735:20;:::i;:::-;34730:25;;34779:1;34776;34772:9;34764:17;;34803:1;34797:4;34794:11;34791:37;;;34808:18;;:::i;:::-;34791:37;34641:194;;;;:::o;34841:167::-;34981:19;34977:1;34969:6;34965:14;34958:43;34841:167;:::o;35014:366::-;35156:3;35177:67;35241:2;35236:3;35177:67;:::i;:::-;35170:74;;35253:93;35342:3;35253:93;:::i;:::-;35371:2;35366:3;35362:12;35355:19;;35014:366;;;:::o;35386:419::-;35552:4;35590:2;35579:9;35575:18;35567:26;;35639:9;35633:4;35629:20;35625:1;35614:9;35610:17;35603:47;35667:131;35793:4;35667:131;:::i;:::-;35659:139;;35386:419;;;:::o;35811:234::-;35951:34;35947:1;35939:6;35935:14;35928:58;36020:17;36015:2;36007:6;36003:15;35996:42;35811:234;:::o;36051:366::-;36193:3;36214:67;36278:2;36273:3;36214:67;:::i;:::-;36207:74;;36290:93;36379:3;36290:93;:::i;:::-;36408:2;36403:3;36399:12;36392:19;;36051:366;;;:::o;36423:419::-;36589:4;36627:2;36616:9;36612:18;36604:26;;36676:9;36670:4;36666:20;36662:1;36651:9;36647:17;36640:47;36704:131;36830:4;36704:131;:::i;:::-;36696:139;;36423:419;;;:::o;36848:168::-;36988:20;36984:1;36976:6;36972:14;36965:44;36848:168;:::o;37022:366::-;37164:3;37185:67;37249:2;37244:3;37185:67;:::i;:::-;37178:74;;37261:93;37350:3;37261:93;:::i;:::-;37379:2;37374:3;37370:12;37363:19;;37022:366;;;:::o;37394:419::-;37560:4;37598:2;37587:9;37583:18;37575:26;;37647:9;37641:4;37637:20;37633:1;37622:9;37618:17;37611:47;37675:131;37801:4;37675:131;:::i;:::-;37667:139;;37394:419;;;:::o;37819:235::-;37959:34;37955:1;37947:6;37943:14;37936:58;38028:18;38023:2;38015:6;38011:15;38004:43;37819:235;:::o;38060:366::-;38202:3;38223:67;38287:2;38282:3;38223:67;:::i;:::-;38216:74;;38299:93;38388:3;38299:93;:::i;:::-;38417:2;38412:3;38408:12;38401:19;;38060:366;;;:::o;38432:419::-;38598:4;38636:2;38625:9;38621:18;38613:26;;38685:9;38679:4;38675:20;38671:1;38660:9;38656:17;38649:47;38713:131;38839:4;38713:131;:::i;:::-;38705:139;;38432:419;;;:::o;38857:181::-;38997:33;38993:1;38985:6;38981:14;38974:57;38857:181;:::o;39044:366::-;39186:3;39207:67;39271:2;39266:3;39207:67;:::i;:::-;39200:74;;39283:93;39372:3;39283:93;:::i;:::-;39401:2;39396:3;39392:12;39385:19;;39044:366;;;:::o;39416:419::-;39582:4;39620:2;39609:9;39605:18;39597:26;;39669:9;39663:4;39659:20;39655:1;39644:9;39640:17;39633:47;39697:131;39823:4;39697:131;:::i;:::-;39689:139;;39416:419;;;:::o;39841:148::-;39943:11;39980:3;39965:18;;39841:148;;;;:::o;40019:874::-;40122:3;40159:5;40153:12;40188:36;40214:9;40188:36;:::i;:::-;40240:89;40322:6;40317:3;40240:89;:::i;:::-;40233:96;;40360:1;40349:9;40345:17;40376:1;40371:166;;;;40551:1;40546:341;;;;40338:549;;40371:166;40455:4;40451:9;40440;40436:25;40431:3;40424:38;40517:6;40510:14;40503:22;40495:6;40491:35;40486:3;40482:45;40475:52;;40371:166;;40546:341;40613:38;40645:5;40613:38;:::i;:::-;40673:1;40687:154;40701:6;40698:1;40695:13;40687:154;;;40775:7;40769:14;40765:1;40760:3;40756:11;40749:35;40825:1;40816:7;40812:15;40801:26;;40723:4;40720:1;40716:12;40711:17;;40687:154;;;40870:6;40865:3;40861:16;40854:23;;40553:334;;40338:549;;40126:767;;40019:874;;;;:::o;40899:390::-;41005:3;41033:39;41066:5;41033:39;:::i;:::-;41088:89;41170:6;41165:3;41088:89;:::i;:::-;41081:96;;41186:65;41244:6;41239:3;41232:4;41225:5;41221:16;41186:65;:::i;:::-;41276:6;41271:3;41267:16;41260:23;;41009:280;40899:390;;;;:::o;41295:589::-;41520:3;41542:92;41630:3;41621:6;41542:92;:::i;:::-;41535:99;;41651:95;41742:3;41733:6;41651:95;:::i;:::-;41644:102;;41763:95;41854:3;41845:6;41763:95;:::i;:::-;41756:102;;41875:3;41868:10;;41295:589;;;;;;:::o;41890:170::-;42030:22;42026:1;42018:6;42014:14;42007:46;41890:170;:::o;42066:366::-;42208:3;42229:67;42293:2;42288:3;42229:67;:::i;:::-;42222:74;;42305:93;42394:3;42305:93;:::i;:::-;42423:2;42418:3;42414:12;42407:19;;42066:366;;;:::o;42438:419::-;42604:4;42642:2;42631:9;42627:18;42619:26;;42691:9;42685:4;42681:20;42677:1;42666:9;42662:17;42655:47;42719:131;42845:4;42719:131;:::i;:::-;42711:139;;42438:419;;;:::o;42863:237::-;43003:34;42999:1;42991:6;42987:14;42980:58;43072:20;43067:2;43059:6;43055:15;43048:45;42863:237;:::o;43106:366::-;43248:3;43269:67;43333:2;43328:3;43269:67;:::i;:::-;43262:74;;43345:93;43434:3;43345:93;:::i;:::-;43463:2;43458:3;43454:12;43447:19;;43106:366;;;:::o;43478:419::-;43644:4;43682:2;43671:9;43667:18;43659:26;;43731:9;43725:4;43721:20;43717:1;43706:9;43702:17;43695:47;43759:131;43885:4;43759:131;:::i;:::-;43751:139;;43478:419;;;:::o;43903:225::-;44043:34;44039:1;44031:6;44027:14;44020:58;44112:8;44107:2;44099:6;44095:15;44088:33;43903:225;:::o;44134:366::-;44276:3;44297:67;44361:2;44356:3;44297:67;:::i;:::-;44290:74;;44373:93;44462:3;44373:93;:::i;:::-;44491:2;44486:3;44482:12;44475:19;;44134:366;;;:::o;44506:419::-;44672:4;44710:2;44699:9;44695:18;44687:26;;44759:9;44753:4;44749:20;44745:1;44734:9;44730:17;44723:47;44787:131;44913:4;44787:131;:::i;:::-;44779:139;;44506:419;;;:::o;44931:182::-;45071:34;45067:1;45059:6;45055:14;45048:58;44931:182;:::o;45119:366::-;45261:3;45282:67;45346:2;45341:3;45282:67;:::i;:::-;45275:74;;45358:93;45447:3;45358:93;:::i;:::-;45476:2;45471:3;45467:12;45460:19;;45119:366;;;:::o;45491:419::-;45657:4;45695:2;45684:9;45680:18;45672:26;;45744:9;45738:4;45734:20;45730:1;45719:9;45715:17;45708:47;45772:131;45898:4;45772:131;:::i;:::-;45764:139;;45491:419;;;:::o;45916:224::-;46056:34;46052:1;46044:6;46040:14;46033:58;46125:7;46120:2;46112:6;46108:15;46101:32;45916:224;:::o;46146:366::-;46288:3;46309:67;46373:2;46368:3;46309:67;:::i;:::-;46302:74;;46385:93;46474:3;46385:93;:::i;:::-;46503:2;46498:3;46494:12;46487:19;;46146:366;;;:::o;46518:419::-;46684:4;46722:2;46711:9;46707:18;46699:26;;46771:9;46765:4;46761:20;46757:1;46746:9;46742:17;46735:47;46799:131;46925:4;46799:131;:::i;:::-;46791:139;;46518:419;;;:::o;46943:223::-;47083:34;47079:1;47071:6;47067:14;47060:58;47152:6;47147:2;47139:6;47135:15;47128:31;46943:223;:::o;47172:366::-;47314:3;47335:67;47399:2;47394:3;47335:67;:::i;:::-;47328:74;;47411:93;47500:3;47411:93;:::i;:::-;47529:2;47524:3;47520:12;47513:19;;47172:366;;;:::o;47544:419::-;47710:4;47748:2;47737:9;47733:18;47725:26;;47797:9;47791:4;47787:20;47783:1;47772:9;47768:17;47761:47;47825:131;47951:4;47825:131;:::i;:::-;47817:139;;47544:419;;;:::o;47969:175::-;48109:27;48105:1;48097:6;48093:14;48086:51;47969:175;:::o;48150:366::-;48292:3;48313:67;48377:2;48372:3;48313:67;:::i;:::-;48306:74;;48389:93;48478:3;48389:93;:::i;:::-;48507:2;48502:3;48498:12;48491:19;;48150:366;;;:::o;48522:419::-;48688:4;48726:2;48715:9;48711:18;48703:26;;48775:9;48769:4;48765:20;48761:1;48750:9;48746:17;48739:47;48803:131;48929:4;48803:131;:::i;:::-;48795:139;;48522:419;;;:::o;48947:237::-;49087:34;49083:1;49075:6;49071:14;49064:58;49156:20;49151:2;49143:6;49139:15;49132:45;48947:237;:::o;49190:366::-;49332:3;49353:67;49417:2;49412:3;49353:67;:::i;:::-;49346:74;;49429:93;49518:3;49429:93;:::i;:::-;49547:2;49542:3;49538:12;49531:19;;49190:366;;;:::o;49562:419::-;49728:4;49766:2;49755:9;49751:18;49743:26;;49815:9;49809:4;49805:20;49801:1;49790:9;49786:17;49779:47;49843:131;49969:4;49843:131;:::i;:::-;49835:139;;49562:419;;;:::o;49987:180::-;50035:77;50032:1;50025:88;50132:4;50129:1;50122:15;50156:4;50153:1;50146:15;50173:185;50213:1;50230:20;50248:1;50230:20;:::i;:::-;50225:25;;50264:20;50282:1;50264:20;:::i;:::-;50259:25;;50303:1;50293:35;;50308:18;;:::i;:::-;50293:35;50350:1;50347;50343:9;50338:14;;50173:185;;;;:::o;50364:176::-;50396:1;50413:20;50431:1;50413:20;:::i;:::-;50408:25;;50447:20;50465:1;50447:20;:::i;:::-;50442:25;;50486:1;50476:35;;50491:18;;:::i;:::-;50476:35;50532:1;50529;50525:9;50520:14;;50364:176;;;;:::o;50546:98::-;50597:6;50631:5;50625:12;50615:22;;50546:98;;;:::o;50650:168::-;50733:11;50767:6;50762:3;50755:19;50807:4;50802:3;50798:14;50783:29;;50650:168;;;;:::o;50824:373::-;50910:3;50938:38;50970:5;50938:38;:::i;:::-;50992:70;51055:6;51050:3;50992:70;:::i;:::-;50985:77;;51071:65;51129:6;51124:3;51117:4;51110:5;51106:16;51071:65;:::i;:::-;51161:29;51183:6;51161:29;:::i;:::-;51156:3;51152:39;51145:46;;50914:283;50824:373;;;;:::o;51203:640::-;51398:4;51436:3;51425:9;51421:19;51413:27;;51450:71;51518:1;51507:9;51503:17;51494:6;51450:71;:::i;:::-;51531:72;51599:2;51588:9;51584:18;51575:6;51531:72;:::i;:::-;51613;51681:2;51670:9;51666:18;51657:6;51613:72;:::i;:::-;51732:9;51726:4;51722:20;51717:2;51706:9;51702:18;51695:48;51760:76;51831:4;51822:6;51760:76;:::i;:::-;51752:84;;51203:640;;;;;;;:::o;51849:141::-;51905:5;51936:6;51930:13;51921:22;;51952:32;51978:5;51952:32;:::i;:::-;51849:141;;;;:::o;51996:349::-;52065:6;52114:2;52102:9;52093:7;52089:23;52085:32;52082:119;;;52120:79;;:::i;:::-;52082:119;52240:1;52265:63;52320:7;52311:6;52300:9;52296:22;52265:63;:::i;:::-;52255:73;;52211:127;51996:349;;;;:::o;52351:182::-;52491:34;52487:1;52479:6;52475:14;52468:58;52351:182;:::o;52539:366::-;52681:3;52702:67;52766:2;52761:3;52702:67;:::i;:::-;52695:74;;52778:93;52867:3;52778:93;:::i;:::-;52896:2;52891:3;52887:12;52880:19;;52539:366;;;:::o;52911:419::-;53077:4;53115:2;53104:9;53100:18;53092:26;;53164:9;53158:4;53154:20;53150:1;53139:9;53135:17;53128:47;53192:131;53318:4;53192:131;:::i;:::-;53184:139;;52911:419;;;:::o;53336:178::-;53476:30;53472:1;53464:6;53460:14;53453:54;53336:178;:::o;53520:366::-;53662:3;53683:67;53747:2;53742:3;53683:67;:::i;:::-;53676:74;;53759:93;53848:3;53759:93;:::i;:::-;53877:2;53872:3;53868:12;53861:19;;53520:366;;;:::o;53892:419::-;54058:4;54096:2;54085:9;54081:18;54073:26;;54145:9;54139:4;54135:20;54131:1;54120:9;54116:17;54109:47;54173:131;54299:4;54173:131;:::i;:::-;54165:139;;53892:419;;;:::o
Swarm Source
ipfs://dbcba3e4e93ad0a826e321d11dc37127dbc82489e98f93d62eb352dc5a161175
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.