Overview
ETH Balance
0.013 ETH
Eth Value
$26.72 (@ $2,055.20/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 20345478 | 226 days ago | IN | 0.013 ETH | 0.00036264 | ||||
Mint | 20021654 | 272 days ago | IN | 0.013 ETH | 0.00181032 | ||||
Mint | 19984231 | 277 days ago | IN | 0.013 ETH | 0.00370702 | ||||
Transfer Ownersh... | 19958831 | 280 days ago | IN | 0 ETH | 0.00021174 | ||||
Set Base URI | 19956876 | 281 days ago | IN | 0 ETH | 0.00028314 | ||||
Mint | 19952000 | 281 days ago | IN | 0 ETH | 0.00043292 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CHRLENFT
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-26 */ // SPDX-License-Identifier: MIT // Amended by HashLips // File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/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/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/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/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract CHRLENFT is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.013 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 10000; bool public paused = false; bool public revealed = true; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); payable(owner()).transfer(msg.value); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { // This will payout the owner 95% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620005f9565b50662e2f6e5e148000600d55612710600e55612710600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000a557600080fd5b5060405162004f5338038062004f538339818101604052810190620000cb919062000844565b83838160009081620000de9190620005f9565b508060019081620000f09190620005f9565b50505062000113620001076200013f60201b60201c565b6200014760201b60201c565b62000124826200020d60201b60201c565b6200013581620002b160201b60201c565b50505050620009b5565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021d6200013f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002436200035560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002939062000993565b60405180910390fd5b80600b9081620002ad9190620005f9565b5050565b620002c16200013f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e76200035560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003379062000993565b60405180910390fd5b8060119081620003519190620005f9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040157607f821691505b602082108103620004175762000416620003b9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000442565b6200048d868362000442565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004da620004d4620004ce84620004a5565b620004af565b620004a5565b9050919050565b6000819050919050565b620004f683620004b9565b6200050e6200050582620004e1565b8484546200044f565b825550505050565b600090565b6200052562000516565b62000532818484620004eb565b505050565b5b818110156200055a576200054e6000826200051b565b60018101905062000538565b5050565b601f821115620005a95762000573816200041d565b6200057e8462000432565b810160208510156200058e578190505b620005a66200059d8562000432565b83018262000537565b50505b505050565b600082821c905092915050565b6000620005ce60001984600802620005ae565b1980831691505092915050565b6000620005e98383620005bb565b9150826002028217905092915050565b62000604826200037f565b67ffffffffffffffff81111562000620576200061f6200038a565b5b6200062c8254620003e8565b620006398282856200055e565b600060209050601f8311600181146200067157600084156200065c578287015190505b620006688582620005db565b865550620006d8565b601f19841662000681866200041d565b60005b82811015620006ab5784890151825560018201915060208501945060208101905062000684565b86831015620006cb5784890151620006c7601f891682620005bb565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200071a82620006fe565b810181811067ffffffffffffffff821117156200073c576200073b6200038a565b5b80604052505050565b600062000751620006e0565b90506200075f82826200070f565b919050565b600067ffffffffffffffff8211156200078257620007816200038a565b5b6200078d82620006fe565b9050602081019050919050565b60005b83811015620007ba5780820151818401526020810190506200079d565b60008484015250505050565b6000620007dd620007d78462000764565b62000745565b905082815260208101848484011115620007fc57620007fb620006f9565b5b620008098482856200079a565b509392505050565b600082601f830112620008295762000828620006f4565b5b81516200083b848260208601620007c6565b91505092915050565b60008060008060808587031215620008615762000860620006ea565b5b600085015167ffffffffffffffff811115620008825762000881620006ef565b5b620008908782880162000811565b945050602085015167ffffffffffffffff811115620008b457620008b3620006ef565b5b620008c28782880162000811565b935050604085015167ffffffffffffffff811115620008e657620008e5620006ef565b5b620008f48782880162000811565b925050606085015167ffffffffffffffff811115620009185762000917620006ef565b5b620009268782880162000811565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200097b60208362000932565b9150620009888262000943565b602082019050919050565b60006020820190508181036000830152620009ae816200096c565b9050919050565b61458e80620009c56000396000f3fe60806040526004361061020f5760003560e01c80635c975abb11610118578063a475b5dd116100a0578063d5abeb011161006f578063d5abeb011461076f578063da3ef23f1461079a578063e985e9c5146107c3578063f2c4ce1e14610800578063f2fde38b146108295761020f565b8063a475b5dd146106c7578063b88d4fde146106de578063c668286214610707578063c87b56dd146107325761020f565b80637f00c7a6116100e75780637f00c7a6146106035780638da5cb5b1461062c57806395d89b4114610657578063a0712d6814610682578063a22cb4651461069e5761020f565b80635c975abb146105475780636352211e1461057257806370a08231146105af578063715018a6146105ec5761020f565b806323b872dd1161019b578063438b63001161016a578063438b63001461045057806344a0d68a1461048d5780634f6ccce7146104b657806351830227146104f357806355f804b31461051e5761020f565b806323b872dd146103b75780632f745c59146103e05780633ccfd60b1461041d57806342842e0e146104275761020f565b8063081c8c44116101e2578063081c8c44146102e2578063095ea7b31461030d57806313faede61461033657806318160ddd14610361578063239c70ae1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612d60565b610852565b6040516102489190612da8565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612def565b6108cc565b005b34801561028657600080fd5b5061028f610965565b60405161029c9190612eac565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612f04565b6109f7565b6040516102d99190612f72565b60405180910390f35b3480156102ee57600080fd5b506102f7610a7c565b6040516103049190612eac565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612fb9565b610b0a565b005b34801561034257600080fd5b5061034b610c21565b6040516103589190613008565b60405180910390f35b34801561036d57600080fd5b50610376610c27565b6040516103839190613008565b60405180910390f35b34801561039857600080fd5b506103a1610c34565b6040516103ae9190613008565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613023565b610c3a565b005b3480156103ec57600080fd5b5061040760048036038101906104029190612fb9565b610c9a565b6040516104149190613008565b60405180910390f35b610425610d3f565b005b34801561043357600080fd5b5061044e60048036038101906104499190613023565b610e3b565b005b34801561045c57600080fd5b5061047760048036038101906104729190613076565b610e5b565b6040516104849190613161565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190612f04565b610f09565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190612f04565b610f8f565b6040516104ea9190613008565b60405180910390f35b3480156104ff57600080fd5b50610508611000565b6040516105159190612da8565b60405180910390f35b34801561052a57600080fd5b50610545600480360381019061054091906132b8565b611013565b005b34801561055357600080fd5b5061055c6110a2565b6040516105699190612da8565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190612f04565b6110b5565b6040516105a69190612f72565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613076565b611166565b6040516105e39190613008565b60405180910390f35b3480156105f857600080fd5b5061060161121d565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612f04565b6112a5565b005b34801561063857600080fd5b5061064161132b565b60405161064e9190612f72565b60405180910390f35b34801561066357600080fd5b5061066c611355565b6040516106799190612eac565b60405180910390f35b61069c60048036038101906106979190612f04565b6113e7565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613301565b611521565b005b3480156106d357600080fd5b506106dc6116a1565b005b3480156106ea57600080fd5b50610705600480360381019061070091906133e2565b61173a565b005b34801561071357600080fd5b5061071c61179c565b6040516107299190612eac565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190612f04565b61182a565b6040516107669190612eac565b60405180910390f35b34801561077b57600080fd5b50610784611982565b6040516107919190613008565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc91906132b8565b611988565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613465565b611a17565b6040516107f79190612da8565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906132b8565b611aab565b005b34801561083557600080fd5b50610850600480360381019061084b9190613076565b611b3a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c557506108c482611c31565b5b9050919050565b6108d4611d13565b73ffffffffffffffffffffffffffffffffffffffff166108f261132b565b73ffffffffffffffffffffffffffffffffffffffff1614610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f906134f1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461097490613540565b80601f01602080910402602001604051908101604052809291908181526020018280546109a090613540565b80156109ed5780601f106109c2576101008083540402835291602001916109ed565b820191906000526020600020905b8154815290600101906020018083116109d057829003601f168201915b5050505050905090565b6000610a0282611d1b565b610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a38906135e3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610a8990613540565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590613540565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b505050505081565b6000610b15826110b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613675565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba4611d13565b73ffffffffffffffffffffffffffffffffffffffff161480610bd35750610bd281610bcd611d13565b611a17565b5b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613707565b60405180910390fd5b610c1c8383611d87565b505050565b600d5481565b6000600880549050905090565b600f5481565b610c4b610c45611d13565b82611e40565b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613799565b60405180910390fd5b610c95838383611f1e565b505050565b6000610ca583611166565b8210610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd9061382b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d47611d13565b73ffffffffffffffffffffffffffffffffffffffff16610d6561132b565b73ffffffffffffffffffffffffffffffffffffffff1614610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db2906134f1565b60405180910390fd5b6000610dc561132b565b73ffffffffffffffffffffffffffffffffffffffff1647604051610de89061387c565b60006040518083038185875af1925050503d8060008114610e25576040519150601f19603f3d011682016040523d82523d6000602084013e610e2a565b606091505b5050905080610e3857600080fd5b50565b610e568383836040518060200160405280600081525061173a565b505050565b60606000610e6883611166565b905060008167ffffffffffffffff811115610e8657610e8561318d565b5b604051908082528060200260200182016040528015610eb45781602001602082028036833780820191505090505b50905060005b82811015610efe57610ecc8582610c9a565b828281518110610edf57610ede613891565b5b6020026020010181815250508080610ef6906138ef565b915050610eba565b508092505050919050565b610f11611d13565b73ffffffffffffffffffffffffffffffffffffffff16610f2f61132b565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c906134f1565b60405180910390fd5b80600d8190555050565b6000610f99610c27565b8210610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd1906139a9565b60405180910390fd5b60088281548110610fee57610fed613891565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61101b611d13565b73ffffffffffffffffffffffffffffffffffffffff1661103961132b565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906134f1565b60405180910390fd5b80600b908161109e9190613b75565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613cb9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90613d4b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611225611d13565b73ffffffffffffffffffffffffffffffffffffffff1661124361132b565b73ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906134f1565b60405180910390fd5b6112a36000612179565b565b6112ad611d13565b73ffffffffffffffffffffffffffffffffffffffff166112cb61132b565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906134f1565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461136490613540565b80601f016020809104026020016040519081016040528092919081815260200182805461139090613540565b80156113dd5780601f106113b2576101008083540402835291602001916113dd565b820191906000526020600020905b8154815290600101906020018083116113c057829003601f168201915b5050505050905090565b60006113f1610c27565b9050601060009054906101000a900460ff161561140d57600080fd5b6000821161141a57600080fd5b600f5482111561142957600080fd5b600e5482826114389190613d6b565b111561144357600080fd5b61144b61132b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e65781600d5461148b9190613d9f565b34101561149757600080fd5b61149f61132b565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156114e4573d6000803e3d6000fd5b505b6000600190505b82811161151c576115093382846115049190613d6b565b61223f565b8080611514906138ef565b9150506114ed565b505050565b611529611d13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e2d565b60405180910390fd5b80600560006115a3611d13565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611650611d13565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116959190612da8565b60405180910390a35050565b6116a9611d13565b73ffffffffffffffffffffffffffffffffffffffff166116c761132b565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906134f1565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b61174b611745611d13565b83611e40565b61178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613799565b60405180910390fd5b6117968484848461225d565b50505050565b600c80546117a990613540565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590613540565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b505050505081565b606061183582611d1b565b611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613ebf565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611921576011805461189c90613540565b80601f01602080910402602001604051908101604052809291908181526020018280546118c890613540565b80156119155780601f106118ea57610100808354040283529160200191611915565b820191906000526020600020905b8154815290600101906020018083116118f857829003601f168201915b5050505050905061197d565b600061192b6122b9565b9050600081511161194b5760405180602001604052806000815250611979565b806119558461234b565b600c60405160200161196993929190613f9e565b6040516020818303038152906040525b9150505b919050565b600e5481565b611990611d13565b73ffffffffffffffffffffffffffffffffffffffff166119ae61132b565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb906134f1565b60405180910390fd5b80600c9081611a139190613b75565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ab3611d13565b73ffffffffffffffffffffffffffffffffffffffff16611ad161132b565b73ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906134f1565b60405180910390fd5b8060119081611b369190613b75565b5050565b611b42611d13565b73ffffffffffffffffffffffffffffffffffffffff16611b6061132b565b73ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad906134f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614041565b60405180910390fd5b611c2e81612179565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cfc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d0c5750611d0b826124ab565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dfa836110b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e4b82611d1b565b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906140d3565b60405180910390fd5b6000611e95836110b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f0457508373ffffffffffffffffffffffffffffffffffffffff16611eec846109f7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f155750611f148185611a17565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f3e826110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90614165565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906141f7565b60405180910390fd5b61200e838383612515565b612019600082611d87565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120699190614217565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c09190613d6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612259828260405180602001604052806000815250612627565b5050565b612268848484611f1e565b61227484848484612682565b6122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa906142bd565b60405180910390fd5b50505050565b6060600b80546122c890613540565b80601f01602080910402602001604051908101604052809291908181526020018280546122f490613540565b80156123415780601f1061231657610100808354040283529160200191612341565b820191906000526020600020905b81548152906001019060200180831161232457829003601f168201915b5050505050905090565b606060008203612392576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124a6565b600082905060005b600082146123c45780806123ad906138ef565b915050600a826123bd919061430c565b915061239a565b60008167ffffffffffffffff8111156123e0576123df61318d565b5b6040519080825280601f01601f1916602001820160405280156124125781602001600182028036833780820191505090505b5090505b6000851461249f5760018261242b9190614217565b9150600a8561243a919061433d565b60306124469190613d6b565b60f81b81838151811061245c5761245b613891565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612498919061430c565b9450612416565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612520838383612809565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125625761255d8161280e565b6125a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125a05761259f8382612857565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e3576125de816129c4565b612622565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612621576126208282612a95565b5b5b505050565b6126318383612b14565b61263e6000848484612682565b61267d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612674906142bd565b60405180910390fd5b505050565b60006126a38473ffffffffffffffffffffffffffffffffffffffff16612ce1565b156127fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126cc611d13565b8786866040518563ffffffff1660e01b81526004016126ee94939291906143c3565b6020604051808303816000875af192505050801561272a57506040513d601f19601f820116820180604052508101906127279190614424565b60015b6127ac573d806000811461275a576040519150601f19603f3d011682016040523d82523d6000602084013e61275f565b606091505b5060008151036127a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279b906142bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612801565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161286484611166565b61286e9190614217565b9050600060076000848152602001908152602001600020549050818114612953576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129d89190614217565b9050600060096000848152602001908152602001600020549050600060088381548110612a0857612a07613891565b5b906000526020600020015490508060088381548110612a2a57612a29613891565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a7957612a78614451565b5b6001900381819060005260206000200160009055905550505050565b6000612aa083611166565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906144cc565b60405180910390fd5b612b8c81611d1b565b15612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc390614538565b60405180910390fd5b612bd860008383612515565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c289190613d6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d3d81612d08565b8114612d4857600080fd5b50565b600081359050612d5a81612d34565b92915050565b600060208284031215612d7657612d75612cfe565b5b6000612d8484828501612d4b565b91505092915050565b60008115159050919050565b612da281612d8d565b82525050565b6000602082019050612dbd6000830184612d99565b92915050565b612dcc81612d8d565b8114612dd757600080fd5b50565b600081359050612de981612dc3565b92915050565b600060208284031215612e0557612e04612cfe565b5b6000612e1384828501612dda565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e56578082015181840152602081019050612e3b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e7e82612e1c565b612e888185612e27565b9350612e98818560208601612e38565b612ea181612e62565b840191505092915050565b60006020820190508181036000830152612ec68184612e73565b905092915050565b6000819050919050565b612ee181612ece565b8114612eec57600080fd5b50565b600081359050612efe81612ed8565b92915050565b600060208284031215612f1a57612f19612cfe565b5b6000612f2884828501612eef565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f5c82612f31565b9050919050565b612f6c81612f51565b82525050565b6000602082019050612f876000830184612f63565b92915050565b612f9681612f51565b8114612fa157600080fd5b50565b600081359050612fb381612f8d565b92915050565b60008060408385031215612fd057612fcf612cfe565b5b6000612fde85828601612fa4565b9250506020612fef85828601612eef565b9150509250929050565b61300281612ece565b82525050565b600060208201905061301d6000830184612ff9565b92915050565b60008060006060848603121561303c5761303b612cfe565b5b600061304a86828701612fa4565b935050602061305b86828701612fa4565b925050604061306c86828701612eef565b9150509250925092565b60006020828403121561308c5761308b612cfe565b5b600061309a84828501612fa4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130d881612ece565b82525050565b60006130ea83836130cf565b60208301905092915050565b6000602082019050919050565b600061310e826130a3565b61311881856130ae565b9350613123836130bf565b8060005b8381101561315457815161313b88826130de565b9750613146836130f6565b925050600181019050613127565b5085935050505092915050565b6000602082019050818103600083015261317b8184613103565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131c582612e62565b810181811067ffffffffffffffff821117156131e4576131e361318d565b5b80604052505050565b60006131f7612cf4565b905061320382826131bc565b919050565b600067ffffffffffffffff8211156132235761322261318d565b5b61322c82612e62565b9050602081019050919050565b82818337600083830152505050565b600061325b61325684613208565b6131ed565b90508281526020810184848401111561327757613276613188565b5b613282848285613239565b509392505050565b600082601f83011261329f5761329e613183565b5b81356132af848260208601613248565b91505092915050565b6000602082840312156132ce576132cd612cfe565b5b600082013567ffffffffffffffff8111156132ec576132eb612d03565b5b6132f88482850161328a565b91505092915050565b6000806040838503121561331857613317612cfe565b5b600061332685828601612fa4565b925050602061333785828601612dda565b9150509250929050565b600067ffffffffffffffff82111561335c5761335b61318d565b5b61336582612e62565b9050602081019050919050565b600061338561338084613341565b6131ed565b9050828152602081018484840111156133a1576133a0613188565b5b6133ac848285613239565b509392505050565b600082601f8301126133c9576133c8613183565b5b81356133d9848260208601613372565b91505092915050565b600080600080608085870312156133fc576133fb612cfe565b5b600061340a87828801612fa4565b945050602061341b87828801612fa4565b935050604061342c87828801612eef565b925050606085013567ffffffffffffffff81111561344d5761344c612d03565b5b613459878288016133b4565b91505092959194509250565b6000806040838503121561347c5761347b612cfe565b5b600061348a85828601612fa4565b925050602061349b85828601612fa4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134db602083612e27565b91506134e6826134a5565b602082019050919050565b6000602082019050818103600083015261350a816134ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061355857607f821691505b60208210810361356b5761356a613511565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135cd602c83612e27565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061365f602183612e27565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006136f1603883612e27565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613783603183612e27565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613815602b83612e27565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b600081905092915050565b50565b600061386660008361384b565b915061387182613856565b600082019050919050565b600061388782613859565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138fa82612ece565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361392c5761392b6138c0565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613993602c83612e27565b915061399e82613937565b604082019050919050565b600060208201905081810360008301526139c281613986565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ee565b613a3586836139ee565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613a72613a6d613a6884612ece565b613a4d565b612ece565b9050919050565b6000819050919050565b613a8c83613a57565b613aa0613a9882613a79565b8484546139fb565b825550505050565b600090565b613ab5613aa8565b613ac0818484613a83565b505050565b5b81811015613ae457613ad9600082613aad565b600181019050613ac6565b5050565b601f821115613b2957613afa816139c9565b613b03846139de565b81016020851015613b12578190505b613b26613b1e856139de565b830182613ac5565b50505b505050565b600082821c905092915050565b6000613b4c60001984600802613b2e565b1980831691505092915050565b6000613b658383613b3b565b9150826002028217905092915050565b613b7e82612e1c565b67ffffffffffffffff811115613b9757613b9661318d565b5b613ba18254613540565b613bac828285613ae8565b600060209050601f831160018114613bdf5760008415613bcd578287015190505b613bd78582613b59565b865550613c3f565b601f198416613bed866139c9565b60005b82811015613c1557848901518255600182019150602085019450602081019050613bf0565b86831015613c325784890151613c2e601f891682613b3b565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ca3602983612e27565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d35602a83612e27565b9150613d4082613cd9565b604082019050919050565b60006020820190508181036000830152613d6481613d28565b9050919050565b6000613d7682612ece565b9150613d8183612ece565b9250828201905080821115613d9957613d986138c0565b5b92915050565b6000613daa82612ece565b9150613db583612ece565b9250828202613dc381612ece565b91508282048414831517613dda57613dd96138c0565b5b5092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613e17601983612e27565b9150613e2282613de1565b602082019050919050565b60006020820190508181036000830152613e4681613e0a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ea9602f83612e27565b9150613eb482613e4d565b604082019050919050565b60006020820190508181036000830152613ed881613e9c565b9050919050565b600081905092915050565b6000613ef582612e1c565b613eff8185613edf565b9350613f0f818560208601612e38565b80840191505092915050565b60008154613f2881613540565b613f328186613edf565b94506001821660008114613f4d5760018114613f6257613f95565b60ff1983168652811515820286019350613f95565b613f6b856139c9565b60005b83811015613f8d57815481890152600182019150602081019050613f6e565b838801955050505b50505092915050565b6000613faa8286613eea565b9150613fb68285613eea565b9150613fc28284613f1b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061402b602683612e27565b915061403682613fcf565b604082019050919050565b6000602082019050818103600083015261405a8161401e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140bd602c83612e27565b91506140c882614061565b604082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061414f602983612e27565b915061415a826140f3565b604082019050919050565b6000602082019050818103600083015261417e81614142565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141e1602483612e27565b91506141ec82614185565b604082019050919050565b60006020820190508181036000830152614210816141d4565b9050919050565b600061422282612ece565b915061422d83612ece565b9250828203905081811115614245576142446138c0565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142a7603283612e27565b91506142b28261424b565b604082019050919050565b600060208201905081810360008301526142d68161429a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431782612ece565b915061432283612ece565b925082614332576143316142dd565b5b828204905092915050565b600061434882612ece565b915061435383612ece565b925082614363576143626142dd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143958261436e565b61439f8185614379565b93506143af818560208601612e38565b6143b881612e62565b840191505092915050565b60006080820190506143d86000830187612f63565b6143e56020830186612f63565b6143f26040830185612ff9565b8181036060830152614404818461438a565b905095945050505050565b60008151905061441e81612d34565b92915050565b60006020828403121561443a57614439612cfe565b5b60006144488482850161440f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144b6602083612e27565b91506144c182614480565b602082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614522601c83612e27565b915061452d826144ec565b602082019050919050565b6000602082019050818103600083015261455181614515565b905091905056fea2646970667358221220f24c42615bc6019112719c97df773ce51147a5199fca4a5c71675f016964267264736f6c63430008130033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000013436861726c69652054686520556e69636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348524c450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261667962656961656b726d6c7375337867627332376367787a7367766f6d71706a71687934356c646d756372326b717a656e766e6666633472340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80635c975abb11610118578063a475b5dd116100a0578063d5abeb011161006f578063d5abeb011461076f578063da3ef23f1461079a578063e985e9c5146107c3578063f2c4ce1e14610800578063f2fde38b146108295761020f565b8063a475b5dd146106c7578063b88d4fde146106de578063c668286214610707578063c87b56dd146107325761020f565b80637f00c7a6116100e75780637f00c7a6146106035780638da5cb5b1461062c57806395d89b4114610657578063a0712d6814610682578063a22cb4651461069e5761020f565b80635c975abb146105475780636352211e1461057257806370a08231146105af578063715018a6146105ec5761020f565b806323b872dd1161019b578063438b63001161016a578063438b63001461045057806344a0d68a1461048d5780634f6ccce7146104b657806351830227146104f357806355f804b31461051e5761020f565b806323b872dd146103b75780632f745c59146103e05780633ccfd60b1461041d57806342842e0e146104275761020f565b8063081c8c44116101e2578063081c8c44146102e2578063095ea7b31461030d57806313faede61461033657806318160ddd14610361578063239c70ae1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612d60565b610852565b6040516102489190612da8565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612def565b6108cc565b005b34801561028657600080fd5b5061028f610965565b60405161029c9190612eac565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612f04565b6109f7565b6040516102d99190612f72565b60405180910390f35b3480156102ee57600080fd5b506102f7610a7c565b6040516103049190612eac565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612fb9565b610b0a565b005b34801561034257600080fd5b5061034b610c21565b6040516103589190613008565b60405180910390f35b34801561036d57600080fd5b50610376610c27565b6040516103839190613008565b60405180910390f35b34801561039857600080fd5b506103a1610c34565b6040516103ae9190613008565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613023565b610c3a565b005b3480156103ec57600080fd5b5061040760048036038101906104029190612fb9565b610c9a565b6040516104149190613008565b60405180910390f35b610425610d3f565b005b34801561043357600080fd5b5061044e60048036038101906104499190613023565b610e3b565b005b34801561045c57600080fd5b5061047760048036038101906104729190613076565b610e5b565b6040516104849190613161565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190612f04565b610f09565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190612f04565b610f8f565b6040516104ea9190613008565b60405180910390f35b3480156104ff57600080fd5b50610508611000565b6040516105159190612da8565b60405180910390f35b34801561052a57600080fd5b50610545600480360381019061054091906132b8565b611013565b005b34801561055357600080fd5b5061055c6110a2565b6040516105699190612da8565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190612f04565b6110b5565b6040516105a69190612f72565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613076565b611166565b6040516105e39190613008565b60405180910390f35b3480156105f857600080fd5b5061060161121d565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612f04565b6112a5565b005b34801561063857600080fd5b5061064161132b565b60405161064e9190612f72565b60405180910390f35b34801561066357600080fd5b5061066c611355565b6040516106799190612eac565b60405180910390f35b61069c60048036038101906106979190612f04565b6113e7565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613301565b611521565b005b3480156106d357600080fd5b506106dc6116a1565b005b3480156106ea57600080fd5b50610705600480360381019061070091906133e2565b61173a565b005b34801561071357600080fd5b5061071c61179c565b6040516107299190612eac565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190612f04565b61182a565b6040516107669190612eac565b60405180910390f35b34801561077b57600080fd5b50610784611982565b6040516107919190613008565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc91906132b8565b611988565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613465565b611a17565b6040516107f79190612da8565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906132b8565b611aab565b005b34801561083557600080fd5b50610850600480360381019061084b9190613076565b611b3a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c557506108c482611c31565b5b9050919050565b6108d4611d13565b73ffffffffffffffffffffffffffffffffffffffff166108f261132b565b73ffffffffffffffffffffffffffffffffffffffff1614610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f906134f1565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461097490613540565b80601f01602080910402602001604051908101604052809291908181526020018280546109a090613540565b80156109ed5780601f106109c2576101008083540402835291602001916109ed565b820191906000526020600020905b8154815290600101906020018083116109d057829003601f168201915b5050505050905090565b6000610a0282611d1b565b610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a38906135e3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610a8990613540565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590613540565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b505050505081565b6000610b15826110b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613675565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba4611d13565b73ffffffffffffffffffffffffffffffffffffffff161480610bd35750610bd281610bcd611d13565b611a17565b5b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613707565b60405180910390fd5b610c1c8383611d87565b505050565b600d5481565b6000600880549050905090565b600f5481565b610c4b610c45611d13565b82611e40565b610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613799565b60405180910390fd5b610c95838383611f1e565b505050565b6000610ca583611166565b8210610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd9061382b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d47611d13565b73ffffffffffffffffffffffffffffffffffffffff16610d6561132b565b73ffffffffffffffffffffffffffffffffffffffff1614610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db2906134f1565b60405180910390fd5b6000610dc561132b565b73ffffffffffffffffffffffffffffffffffffffff1647604051610de89061387c565b60006040518083038185875af1925050503d8060008114610e25576040519150601f19603f3d011682016040523d82523d6000602084013e610e2a565b606091505b5050905080610e3857600080fd5b50565b610e568383836040518060200160405280600081525061173a565b505050565b60606000610e6883611166565b905060008167ffffffffffffffff811115610e8657610e8561318d565b5b604051908082528060200260200182016040528015610eb45781602001602082028036833780820191505090505b50905060005b82811015610efe57610ecc8582610c9a565b828281518110610edf57610ede613891565b5b6020026020010181815250508080610ef6906138ef565b915050610eba565b508092505050919050565b610f11611d13565b73ffffffffffffffffffffffffffffffffffffffff16610f2f61132b565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c906134f1565b60405180910390fd5b80600d8190555050565b6000610f99610c27565b8210610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd1906139a9565b60405180910390fd5b60088281548110610fee57610fed613891565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61101b611d13565b73ffffffffffffffffffffffffffffffffffffffff1661103961132b565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906134f1565b60405180910390fd5b80600b908161109e9190613b75565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613cb9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90613d4b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611225611d13565b73ffffffffffffffffffffffffffffffffffffffff1661124361132b565b73ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906134f1565b60405180910390fd5b6112a36000612179565b565b6112ad611d13565b73ffffffffffffffffffffffffffffffffffffffff166112cb61132b565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906134f1565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461136490613540565b80601f016020809104026020016040519081016040528092919081815260200182805461139090613540565b80156113dd5780601f106113b2576101008083540402835291602001916113dd565b820191906000526020600020905b8154815290600101906020018083116113c057829003601f168201915b5050505050905090565b60006113f1610c27565b9050601060009054906101000a900460ff161561140d57600080fd5b6000821161141a57600080fd5b600f5482111561142957600080fd5b600e5482826114389190613d6b565b111561144357600080fd5b61144b61132b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e65781600d5461148b9190613d9f565b34101561149757600080fd5b61149f61132b565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156114e4573d6000803e3d6000fd5b505b6000600190505b82811161151c576115093382846115049190613d6b565b61223f565b8080611514906138ef565b9150506114ed565b505050565b611529611d13565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90613e2d565b60405180910390fd5b80600560006115a3611d13565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611650611d13565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116959190612da8565b60405180910390a35050565b6116a9611d13565b73ffffffffffffffffffffffffffffffffffffffff166116c761132b565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906134f1565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b61174b611745611d13565b83611e40565b61178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613799565b60405180910390fd5b6117968484848461225d565b50505050565b600c80546117a990613540565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590613540565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b505050505081565b606061183582611d1b565b611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613ebf565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611921576011805461189c90613540565b80601f01602080910402602001604051908101604052809291908181526020018280546118c890613540565b80156119155780601f106118ea57610100808354040283529160200191611915565b820191906000526020600020905b8154815290600101906020018083116118f857829003601f168201915b5050505050905061197d565b600061192b6122b9565b9050600081511161194b5760405180602001604052806000815250611979565b806119558461234b565b600c60405160200161196993929190613f9e565b6040516020818303038152906040525b9150505b919050565b600e5481565b611990611d13565b73ffffffffffffffffffffffffffffffffffffffff166119ae61132b565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb906134f1565b60405180910390fd5b80600c9081611a139190613b75565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ab3611d13565b73ffffffffffffffffffffffffffffffffffffffff16611ad161132b565b73ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906134f1565b60405180910390fd5b8060119081611b369190613b75565b5050565b611b42611d13565b73ffffffffffffffffffffffffffffffffffffffff16611b6061132b565b73ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad906134f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90614041565b60405180910390fd5b611c2e81612179565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cfc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d0c5750611d0b826124ab565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dfa836110b5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e4b82611d1b565b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906140d3565b60405180910390fd5b6000611e95836110b5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f0457508373ffffffffffffffffffffffffffffffffffffffff16611eec846109f7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f155750611f148185611a17565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f3e826110b5565b73ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90614165565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906141f7565b60405180910390fd5b61200e838383612515565b612019600082611d87565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120699190614217565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120c09190613d6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612259828260405180602001604052806000815250612627565b5050565b612268848484611f1e565b61227484848484612682565b6122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa906142bd565b60405180910390fd5b50505050565b6060600b80546122c890613540565b80601f01602080910402602001604051908101604052809291908181526020018280546122f490613540565b80156123415780601f1061231657610100808354040283529160200191612341565b820191906000526020600020905b81548152906001019060200180831161232457829003601f168201915b5050505050905090565b606060008203612392576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124a6565b600082905060005b600082146123c45780806123ad906138ef565b915050600a826123bd919061430c565b915061239a565b60008167ffffffffffffffff8111156123e0576123df61318d565b5b6040519080825280601f01601f1916602001820160405280156124125781602001600182028036833780820191505090505b5090505b6000851461249f5760018261242b9190614217565b9150600a8561243a919061433d565b60306124469190613d6b565b60f81b81838151811061245c5761245b613891565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612498919061430c565b9450612416565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612520838383612809565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125625761255d8161280e565b6125a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125a05761259f8382612857565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e3576125de816129c4565b612622565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612621576126208282612a95565b5b5b505050565b6126318383612b14565b61263e6000848484612682565b61267d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612674906142bd565b60405180910390fd5b505050565b60006126a38473ffffffffffffffffffffffffffffffffffffffff16612ce1565b156127fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126cc611d13565b8786866040518563ffffffff1660e01b81526004016126ee94939291906143c3565b6020604051808303816000875af192505050801561272a57506040513d601f19601f820116820180604052508101906127279190614424565b60015b6127ac573d806000811461275a576040519150601f19603f3d011682016040523d82523d6000602084013e61275f565b606091505b5060008151036127a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279b906142bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612801565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161286484611166565b61286e9190614217565b9050600060076000848152602001908152602001600020549050818114612953576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129d89190614217565b9050600060096000848152602001908152602001600020549050600060088381548110612a0857612a07613891565b5b906000526020600020015490508060088381548110612a2a57612a29613891565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a7957612a78614451565b5b6001900381819060005260206000200160009055905550505050565b6000612aa083611166565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906144cc565b60405180910390fd5b612b8c81611d1b565b15612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc390614538565b60405180910390fd5b612bd860008383612515565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c289190613d6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d3d81612d08565b8114612d4857600080fd5b50565b600081359050612d5a81612d34565b92915050565b600060208284031215612d7657612d75612cfe565b5b6000612d8484828501612d4b565b91505092915050565b60008115159050919050565b612da281612d8d565b82525050565b6000602082019050612dbd6000830184612d99565b92915050565b612dcc81612d8d565b8114612dd757600080fd5b50565b600081359050612de981612dc3565b92915050565b600060208284031215612e0557612e04612cfe565b5b6000612e1384828501612dda565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e56578082015181840152602081019050612e3b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e7e82612e1c565b612e888185612e27565b9350612e98818560208601612e38565b612ea181612e62565b840191505092915050565b60006020820190508181036000830152612ec68184612e73565b905092915050565b6000819050919050565b612ee181612ece565b8114612eec57600080fd5b50565b600081359050612efe81612ed8565b92915050565b600060208284031215612f1a57612f19612cfe565b5b6000612f2884828501612eef565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f5c82612f31565b9050919050565b612f6c81612f51565b82525050565b6000602082019050612f876000830184612f63565b92915050565b612f9681612f51565b8114612fa157600080fd5b50565b600081359050612fb381612f8d565b92915050565b60008060408385031215612fd057612fcf612cfe565b5b6000612fde85828601612fa4565b9250506020612fef85828601612eef565b9150509250929050565b61300281612ece565b82525050565b600060208201905061301d6000830184612ff9565b92915050565b60008060006060848603121561303c5761303b612cfe565b5b600061304a86828701612fa4565b935050602061305b86828701612fa4565b925050604061306c86828701612eef565b9150509250925092565b60006020828403121561308c5761308b612cfe565b5b600061309a84828501612fa4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130d881612ece565b82525050565b60006130ea83836130cf565b60208301905092915050565b6000602082019050919050565b600061310e826130a3565b61311881856130ae565b9350613123836130bf565b8060005b8381101561315457815161313b88826130de565b9750613146836130f6565b925050600181019050613127565b5085935050505092915050565b6000602082019050818103600083015261317b8184613103565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131c582612e62565b810181811067ffffffffffffffff821117156131e4576131e361318d565b5b80604052505050565b60006131f7612cf4565b905061320382826131bc565b919050565b600067ffffffffffffffff8211156132235761322261318d565b5b61322c82612e62565b9050602081019050919050565b82818337600083830152505050565b600061325b61325684613208565b6131ed565b90508281526020810184848401111561327757613276613188565b5b613282848285613239565b509392505050565b600082601f83011261329f5761329e613183565b5b81356132af848260208601613248565b91505092915050565b6000602082840312156132ce576132cd612cfe565b5b600082013567ffffffffffffffff8111156132ec576132eb612d03565b5b6132f88482850161328a565b91505092915050565b6000806040838503121561331857613317612cfe565b5b600061332685828601612fa4565b925050602061333785828601612dda565b9150509250929050565b600067ffffffffffffffff82111561335c5761335b61318d565b5b61336582612e62565b9050602081019050919050565b600061338561338084613341565b6131ed565b9050828152602081018484840111156133a1576133a0613188565b5b6133ac848285613239565b509392505050565b600082601f8301126133c9576133c8613183565b5b81356133d9848260208601613372565b91505092915050565b600080600080608085870312156133fc576133fb612cfe565b5b600061340a87828801612fa4565b945050602061341b87828801612fa4565b935050604061342c87828801612eef565b925050606085013567ffffffffffffffff81111561344d5761344c612d03565b5b613459878288016133b4565b91505092959194509250565b6000806040838503121561347c5761347b612cfe565b5b600061348a85828601612fa4565b925050602061349b85828601612fa4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134db602083612e27565b91506134e6826134a5565b602082019050919050565b6000602082019050818103600083015261350a816134ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061355857607f821691505b60208210810361356b5761356a613511565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135cd602c83612e27565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061365f602183612e27565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006136f1603883612e27565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613783603183612e27565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613815602b83612e27565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b600081905092915050565b50565b600061386660008361384b565b915061387182613856565b600082019050919050565b600061388782613859565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138fa82612ece565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361392c5761392b6138c0565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613993602c83612e27565b915061399e82613937565b604082019050919050565b600060208201905081810360008301526139c281613986565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ee565b613a3586836139ee565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613a72613a6d613a6884612ece565b613a4d565b612ece565b9050919050565b6000819050919050565b613a8c83613a57565b613aa0613a9882613a79565b8484546139fb565b825550505050565b600090565b613ab5613aa8565b613ac0818484613a83565b505050565b5b81811015613ae457613ad9600082613aad565b600181019050613ac6565b5050565b601f821115613b2957613afa816139c9565b613b03846139de565b81016020851015613b12578190505b613b26613b1e856139de565b830182613ac5565b50505b505050565b600082821c905092915050565b6000613b4c60001984600802613b2e565b1980831691505092915050565b6000613b658383613b3b565b9150826002028217905092915050565b613b7e82612e1c565b67ffffffffffffffff811115613b9757613b9661318d565b5b613ba18254613540565b613bac828285613ae8565b600060209050601f831160018114613bdf5760008415613bcd578287015190505b613bd78582613b59565b865550613c3f565b601f198416613bed866139c9565b60005b82811015613c1557848901518255600182019150602085019450602081019050613bf0565b86831015613c325784890151613c2e601f891682613b3b565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ca3602983612e27565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d35602a83612e27565b9150613d4082613cd9565b604082019050919050565b60006020820190508181036000830152613d6481613d28565b9050919050565b6000613d7682612ece565b9150613d8183612ece565b9250828201905080821115613d9957613d986138c0565b5b92915050565b6000613daa82612ece565b9150613db583612ece565b9250828202613dc381612ece565b91508282048414831517613dda57613dd96138c0565b5b5092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613e17601983612e27565b9150613e2282613de1565b602082019050919050565b60006020820190508181036000830152613e4681613e0a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ea9602f83612e27565b9150613eb482613e4d565b604082019050919050565b60006020820190508181036000830152613ed881613e9c565b9050919050565b600081905092915050565b6000613ef582612e1c565b613eff8185613edf565b9350613f0f818560208601612e38565b80840191505092915050565b60008154613f2881613540565b613f328186613edf565b94506001821660008114613f4d5760018114613f6257613f95565b60ff1983168652811515820286019350613f95565b613f6b856139c9565b60005b83811015613f8d57815481890152600182019150602081019050613f6e565b838801955050505b50505092915050565b6000613faa8286613eea565b9150613fb68285613eea565b9150613fc28284613f1b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061402b602683612e27565b915061403682613fcf565b604082019050919050565b6000602082019050818103600083015261405a8161401e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140bd602c83612e27565b91506140c882614061565b604082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061414f602983612e27565b915061415a826140f3565b604082019050919050565b6000602082019050818103600083015261417e81614142565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141e1602483612e27565b91506141ec82614185565b604082019050919050565b60006020820190508181036000830152614210816141d4565b9050919050565b600061422282612ece565b915061422d83612ece565b9250828203905081811115614245576142446138c0565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142a7603283612e27565b91506142b28261424b565b604082019050919050565b600060208201905081810360008301526142d68161429a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431782612ece565b915061432283612ece565b925082614332576143316142dd565b5b828204905092915050565b600061434882612ece565b915061435383612ece565b925082614363576143626142dd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143958261436e565b61439f8185614379565b93506143af818560208601612e38565b6143b881612e62565b840191505092915050565b60006080820190506143d86000830187612f63565b6143e56020830186612f63565b6143f26040830185612ff9565b8181036060830152614404818461438a565b905095945050505050565b60008151905061441e81612d34565b92915050565b60006020828403121561443a57614439612cfe565b5b60006144488482850161440f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144b6602083612e27565b91506144c182614480565b602082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614522601c83612e27565b915061452d826144ec565b602082019050919050565b6000602082019050818103600083015261455181614515565b905091905056fea2646970667358221220f24c42615bc6019112719c97df773ce51147a5199fca4a5c71675f016964267264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000013436861726c69652054686520556e69636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348524c450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261667962656961656b726d6c7375337867627332376367787a7367766f6d71706a71687934356c646d756372326b717a656e766e6666633472340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Charlie The Unicoin
Arg [1] : _symbol (string): CHRLE
Arg [2] : _initBaseURI (string): ipfs://bafybeiaekrmlsu3xgbs27cgxzsgvomqpjqhy45ldmucr2kqzenvnffc4r4
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [5] : 436861726c69652054686520556e69636f696e00000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4348524c45000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [9] : 697066733a2f2f6261667962656961656b726d6c737533786762733237636778
Arg [10] : 7a7367766f6d71706a71687934356c646d756372326b717a656e766e66666334
Arg [11] : 7234000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43141:3294:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34688:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45890:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22580:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24139:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43465:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23662:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43286:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35328:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43361:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25029:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34996:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45970:462;;;:::i;:::-;;25439:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44376:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45322:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35518:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43433:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45658:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43402:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22274:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22004:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42477:94;;;;;;;;;;;;;:::i;:::-;;45408:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41826:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22749:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43886:484;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24432:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45249:65;;;;;;;;;;;;;:::i;:::-;;25695:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43244:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44730:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43324:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45762:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24798:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45532:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42726:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34688:224;34790:4;34829:35;34814:50;;;:11;:50;;;;:90;;;;34868:36;34892:11;34868:23;:36::i;:::-;34814:90;34807:97;;34688:224;;;:::o;45890:73::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45951:6:::1;45942;;:15;;;;;;;;;;;;;;;;;;45890:73:::0;:::o;22580:100::-;22634:13;22667:5;22660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22580:100;:::o;24139:221::-;24215:7;24243:16;24251:7;24243;:16::i;:::-;24235:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24328:15;:24;24344:7;24328:24;;;;;;;;;;;;;;;;;;;;;24321:31;;24139:221;;;:::o;43465:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23662:411::-;23743:13;23759:23;23774:7;23759:14;:23::i;:::-;23743:39;;23807:5;23801:11;;:2;:11;;;23793:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23901:5;23885:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23910:37;23927:5;23934:12;:10;:12::i;:::-;23910:16;:37::i;:::-;23885:62;23863:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24044:21;24053:2;24057:7;24044:8;:21::i;:::-;23732:341;23662:411;;:::o;43286:33::-;;;;:::o;35328:113::-;35389:7;35416:10;:17;;;;35409:24;;35328:113;:::o;43361:36::-;;;;:::o;25029:339::-;25224:41;25243:12;:10;:12::i;:::-;25257:7;25224:18;:41::i;:::-;25216:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25332:28;25342:4;25348:2;25352:7;25332:9;:28::i;:::-;25029:339;;;:::o;34996:256::-;35093:7;35129:23;35146:5;35129:16;:23::i;:::-;35121:5;:31;35113:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35218:12;:19;35231:5;35218:19;;;;;;;;;;;;;;;:26;35238:5;35218:26;;;;;;;;;;;;35211:33;;34996:256;;;;:::o;45970:462::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46254:7:::1;46275;:5;:7::i;:::-;46267:21;;46296;46267:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46253:69;;;46337:2;46329:11;;;::::0;::::1;;46015:417;45970:462::o:0;25439:185::-;25577:39;25594:4;25600:2;25604:7;25577:39;;;;;;;;;;;;:16;:39::i;:::-;25439:185;;;:::o;44376:348::-;44451:16;44479:23;44505:17;44515:6;44505:9;:17::i;:::-;44479:43;;44529:25;44571:15;44557:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44529:58;;44599:9;44594:103;44614:15;44610:1;:19;44594:103;;;44659:30;44679:6;44687:1;44659:19;:30::i;:::-;44645:8;44654:1;44645:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44631:3;;;;;:::i;:::-;;;;44594:103;;;;44710:8;44703:15;;;;44376:348;;;:::o;45322:80::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45388:8:::1;45381:4;:15;;;;45322:80:::0;:::o;35518:233::-;35593:7;35629:30;:28;:30::i;:::-;35621:5;:38;35613:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35726:10;35737:5;35726:17;;;;;;;;:::i;:::-;;;;;;;;;;35719:24;;35518:233;;;:::o;43433:27::-;;;;;;;;;;;;;:::o;45658:98::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45739:11:::1;45729:7;:21;;;;;;:::i;:::-;;45658:98:::0;:::o;43402:26::-;;;;;;;;;;;;;:::o;22274:239::-;22346:7;22366:13;22382:7;:16;22390:7;22382:16;;;;;;;;;;;;;;;;;;;;;22366:32;;22434:1;22417:19;;:5;:19;;;22409:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22500:5;22493:12;;;22274:239;;;:::o;22004:208::-;22076:7;22121:1;22104:19;;:5;:19;;;22096:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22188:9;:16;22198:5;22188:16;;;;;;;;;;;;;;;;22181:23;;22004:208;;;:::o;42477:94::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42542:21:::1;42560:1;42542:9;:21::i;:::-;42477:94::o:0;45408:116::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45501:17:::1;45485:13;:33;;;;45408:116:::0;:::o;41826:87::-;41872:7;41899:6;;;;;;;;;;;41892:13;;41826:87;:::o;22749:104::-;22805:13;22838:7;22831:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22749:104;:::o;43886:484::-;43943:14;43960:13;:11;:13::i;:::-;43943:30;;43989:6;;;;;;;;;;;43988:7;43980:16;;;;;;44025:1;44011:11;:15;44003:24;;;;;;44057:13;;44042:11;:28;;44034:37;;;;;;44110:9;;44095:11;44086:6;:20;;;;:::i;:::-;:33;;44078:42;;;;;;44149:7;:5;:7::i;:::-;44135:21;;:10;:21;;;44131:133;;44197:11;44190:4;;:18;;;;:::i;:::-;44177:9;:31;;44169:40;;;;;;44228:7;:5;:7::i;:::-;44220:25;;:36;44246:9;44220:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44131:133;44277:9;44289:1;44277:13;;44272:93;44297:11;44292:1;:16;44272:93;;44324:33;44334:10;44355:1;44346:6;:10;;;;:::i;:::-;44324:9;:33::i;:::-;44310:3;;;;;:::i;:::-;;;;44272:93;;;;43936:434;43886:484;:::o;24432:295::-;24547:12;:10;:12::i;:::-;24535:24;;:8;:24;;;24527:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24647:8;24602:18;:32;24621:12;:10;:12::i;:::-;24602:32;;;;;;;;;;;;;;;:42;24635:8;24602:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24700:8;24671:48;;24686:12;:10;:12::i;:::-;24671:48;;;24710:8;24671:48;;;;;;:::i;:::-;;;;;;;;24432:295;;:::o;45249:65::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45304:4:::1;45293:8;;:15;;;;;;;;;;;;;;;;;;45249:65::o:0;25695:328::-;25870:41;25889:12;:10;:12::i;:::-;25903:7;25870:18;:41::i;:::-;25862:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25976:39;25990:4;25996:2;26000:7;26009:5;25976:13;:39::i;:::-;25695:328;;;;:::o;43244:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44730:497::-;44828:13;44869:16;44877:7;44869;:16::i;:::-;44853:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44978:5;44966:17;;:8;;;;;;;;;;;:17;;;44963:62;;45003:14;44996:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44963:62;45033:28;45064:10;:8;:10::i;:::-;45033:41;;45119:1;45094:14;45088:28;:32;:133;;;;;;;;;;;;;;;;;45156:14;45172:18;:7;:16;:18::i;:::-;45192:13;45139:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45088:133;45081:140;;;44730:497;;;;:::o;43324:32::-;;;;:::o;45762:122::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45861:17:::1;45845:13;:33;;;;;;:::i;:::-;;45762:122:::0;:::o;24798:164::-;24895:4;24919:18;:25;24938:5;24919:25;;;;;;;;;;;;;;;:35;24945:8;24919:35;;;;;;;;;;;;;;;;;;;;;;;;;24912:42;;24798:164;;;;:::o;45532:120::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45631:15:::1;45614:14;:32;;;;;;:::i;:::-;;45532:120:::0;:::o;42726:192::-;42057:12;:10;:12::i;:::-;42046:23;;:7;:5;:7::i;:::-;:23;;;42038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42835:1:::1;42815:22;;:8;:22;;::::0;42807:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42891:19;42901:8;42891:9;:19::i;:::-;42726:192:::0;:::o;21635:305::-;21737:4;21789:25;21774:40;;;:11;:40;;;;:105;;;;21846:33;21831:48;;;:11;:48;;;;21774:105;:158;;;;21896:36;21920:11;21896:23;:36::i;:::-;21774:158;21754:178;;21635:305;;;:::o;20109:98::-;20162:7;20189:10;20182:17;;20109:98;:::o;27533:127::-;27598:4;27650:1;27622:30;;:7;:16;27630:7;27622:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27615:37;;27533:127;;;:::o;31515:174::-;31617:2;31590:15;:24;31606:7;31590:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31673:7;31669:2;31635:46;;31644:23;31659:7;31644:14;:23::i;:::-;31635:46;;;;;;;;;;;;31515:174;;:::o;27827:348::-;27920:4;27945:16;27953:7;27945;:16::i;:::-;27937:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:13;28037:23;28052:7;28037:14;:23::i;:::-;28021:39;;28090:5;28079:16;;:7;:16;;;:51;;;;28123:7;28099:31;;:20;28111:7;28099:11;:20::i;:::-;:31;;;28079:51;:87;;;;28134:32;28151:5;28158:7;28134:16;:32::i;:::-;28079:87;28071:96;;;27827:348;;;;:::o;30819:578::-;30978:4;30951:31;;:23;30966:7;30951:14;:23::i;:::-;:31;;;30943:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:1;31047:16;;:2;:16;;;31039:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31117:39;31138:4;31144:2;31148:7;31117:20;:39::i;:::-;31221:29;31238:1;31242:7;31221:8;:29::i;:::-;31282:1;31263:9;:15;31273:4;31263:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31311:1;31294:9;:13;31304:2;31294:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31342:2;31323:7;:16;31331:7;31323:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31381:7;31377:2;31362:27;;31371:4;31362:27;;;;;;;;;;;;30819:578;;;:::o;42926:173::-;42982:16;43001:6;;;;;;;;;;;42982:25;;43027:8;43018:6;;:17;;;;;;;;;;;;;;;;;;43082:8;43051:40;;43072:8;43051:40;;;;;;;;;;;;42971:128;42926:173;:::o;28517:110::-;28593:26;28603:2;28607:7;28593:26;;;;;;;;;;;;:9;:26::i;:::-;28517:110;;:::o;26905:315::-;27062:28;27072:4;27078:2;27082:7;27062:9;:28::i;:::-;27109:48;27132:4;27138:2;27142:7;27151:5;27109:22;:48::i;:::-;27101:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26905:315;;;;:::o;43771:102::-;43831:13;43860:7;43853:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43771:102;:::o;7941:723::-;7997:13;8227:1;8218:5;:10;8214:53;;8245:10;;;;;;;;;;;;;;;;;;;;;8214:53;8277:12;8292:5;8277:20;;8308:14;8333:78;8348:1;8340:4;:9;8333:78;;8366:8;;;;;:::i;:::-;;;;8397:2;8389:10;;;;;:::i;:::-;;;8333:78;;;8421:19;8453:6;8443:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8421:39;;8471:154;8487:1;8478:5;:10;8471:154;;8515:1;8505:11;;;;;:::i;:::-;;;8582:2;8574:5;:10;;;;:::i;:::-;8561:2;:24;;;;:::i;:::-;8548:39;;8531:6;8538;8531:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8611:2;8602:11;;;;;:::i;:::-;;;8471:154;;;8649:6;8635:21;;;;;7941:723;;;;:::o;7466:157::-;7551:4;7590:25;7575:40;;;:11;:40;;;;7568:47;;7466:157;;;:::o;36364:589::-;36508:45;36535:4;36541:2;36545:7;36508:26;:45::i;:::-;36586:1;36570:18;;:4;:18;;;36566:187;;36605:40;36637:7;36605:31;:40::i;:::-;36566:187;;;36675:2;36667:10;;:4;:10;;;36663:90;;36694:47;36727:4;36733:7;36694:32;:47::i;:::-;36663:90;36566:187;36781:1;36767:16;;:2;:16;;;36763:183;;36800:45;36837:7;36800:36;:45::i;:::-;36763:183;;;36873:4;36867:10;;:2;:10;;;36863:83;;36894:40;36922:2;36926:7;36894:27;:40::i;:::-;36863:83;36763:183;36364:589;;;:::o;28854:321::-;28984:18;28990:2;28994:7;28984:5;:18::i;:::-;29035:54;29066:1;29070:2;29074:7;29083:5;29035:22;:54::i;:::-;29013:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28854:321;;;:::o;32254:799::-;32409:4;32430:15;:2;:13;;;:15::i;:::-;32426:620;;;32482:2;32466:36;;;32503:12;:10;:12::i;:::-;32517:4;32523:7;32532:5;32466:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32462:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32725:1;32708:6;:13;:18;32704:272;;32751:60;;;;;;;;;;:::i;:::-;;;;;;;;32704:272;32926:6;32920:13;32911:6;32907:2;32903:15;32896:38;32462:529;32599:41;;;32589:51;;;:6;:51;;;;32582:58;;;;;32426:620;33030:4;33023:11;;32254:799;;;;;;;:::o;33625:126::-;;;;:::o;37676:164::-;37780:10;:17;;;;37753:15;:24;37769:7;37753:24;;;;;;;;;;;:44;;;;37808:10;37824:7;37808:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37676:164;:::o;38467:988::-;38733:22;38783:1;38758:22;38775:4;38758:16;:22::i;:::-;:26;;;;:::i;:::-;38733:51;;38795:18;38816:17;:26;38834:7;38816:26;;;;;;;;;;;;38795:47;;38963:14;38949:10;:28;38945:328;;38994:19;39016:12;:18;39029:4;39016:18;;;;;;;;;;;;;;;:34;39035:14;39016:34;;;;;;;;;;;;38994:56;;39100:11;39067:12;:18;39080:4;39067:18;;;;;;;;;;;;;;;:30;39086:10;39067:30;;;;;;;;;;;:44;;;;39217:10;39184:17;:30;39202:11;39184:30;;;;;;;;;;;:43;;;;38979:294;38945:328;39369:17;:26;39387:7;39369:26;;;;;;;;;;;39362:33;;;39413:12;:18;39426:4;39413:18;;;;;;;;;;;;;;;:34;39432:14;39413:34;;;;;;;;;;;39406:41;;;38548:907;;38467:988;;:::o;39750:1079::-;40003:22;40048:1;40028:10;:17;;;;:21;;;;:::i;:::-;40003:46;;40060:18;40081:15;:24;40097:7;40081:24;;;;;;;;;;;;40060:45;;40432:19;40454:10;40465:14;40454:26;;;;;;;;:::i;:::-;;;;;;;;;;40432:48;;40518:11;40493:10;40504;40493:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40629:10;40598:15;:28;40614:11;40598:28;;;;;;;;;;;:41;;;;40770:15;:24;40786:7;40770:24;;;;;;;;;;;40763:31;;;40805:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39821:1008;;;39750:1079;:::o;37254:221::-;37339:14;37356:20;37373:2;37356:16;:20::i;:::-;37339:37;;37414:7;37387:12;:16;37400:2;37387:16;;;;;;;;;;;;;;;:24;37404:6;37387:24;;;;;;;;;;;:34;;;;37461:6;37432:17;:26;37450:7;37432:26;;;;;;;;;;;:35;;;;37328:147;37254:221;;:::o;29511:382::-;29605:1;29591:16;;:2;:16;;;29583:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29664:16;29672:7;29664;:16::i;:::-;29663:17;29655:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29726:45;29755:1;29759:2;29763:7;29726:20;:45::i;:::-;29801:1;29784:9;:13;29794:2;29784:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29832:2;29813:7;:16;29821:7;29813:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29877:7;29873:2;29852:33;;29869:1;29852:33;;;;;;;;;;;;29511:382;;:::o;10466:387::-;10526:4;10734:12;10801:7;10789:20;10781:28;;10844:1;10837:4;:8;10830:15;;;10466:387;;;:::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:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:329::-;6516:6;6565:2;6553:9;6544:7;6540:23;6536:32;6533:119;;;6571:79;;:::i;:::-;6533:119;6691:1;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6662:117;6457:329;;;;:::o;6792:114::-;6859:6;6893:5;6887:12;6877:22;;6792:114;;;:::o;6912:184::-;7011:11;7045:6;7040:3;7033:19;7085:4;7080:3;7076:14;7061:29;;6912:184;;;;:::o;7102:132::-;7169:4;7192:3;7184:11;;7222:4;7217:3;7213:14;7205:22;;7102:132;;;:::o;7240:108::-;7317:24;7335:5;7317:24;:::i;:::-;7312:3;7305:37;7240:108;;:::o;7354:179::-;7423:10;7444:46;7486:3;7478:6;7444:46;:::i;:::-;7522:4;7517:3;7513:14;7499:28;;7354:179;;;;:::o;7539:113::-;7609:4;7641;7636:3;7632:14;7624:22;;7539:113;;;:::o;7688:732::-;7807:3;7836:54;7884:5;7836:54;:::i;:::-;7906:86;7985:6;7980:3;7906:86;:::i;:::-;7899:93;;8016:56;8066:5;8016:56;:::i;:::-;8095:7;8126:1;8111:284;8136:6;8133:1;8130:13;8111:284;;;8212:6;8206:13;8239:63;8298:3;8283:13;8239:63;:::i;:::-;8232:70;;8325:60;8378:6;8325:60;:::i;:::-;8315:70;;8171:224;8158:1;8155;8151:9;8146:14;;8111:284;;;8115:14;8411:3;8404:10;;7812:608;;;7688:732;;;;:::o;8426:373::-;8569:4;8607:2;8596:9;8592:18;8584:26;;8656:9;8650:4;8646:20;8642:1;8631:9;8627:17;8620:47;8684:108;8787:4;8778:6;8684:108;:::i;:::-;8676:116;;8426:373;;;;:::o;8805:117::-;8914:1;8911;8904:12;8928:117;9037:1;9034;9027:12;9051:180;9099:77;9096:1;9089:88;9196:4;9193:1;9186:15;9220:4;9217:1;9210:15;9237:281;9320:27;9342:4;9320:27;:::i;:::-;9312:6;9308:40;9450:6;9438:10;9435:22;9414:18;9402:10;9399:34;9396:62;9393:88;;;9461:18;;:::i;:::-;9393:88;9501:10;9497:2;9490:22;9280:238;9237:281;;:::o;9524:129::-;9558:6;9585:20;;:::i;:::-;9575:30;;9614:33;9642:4;9634:6;9614:33;:::i;:::-;9524:129;;;:::o;9659:308::-;9721:4;9811:18;9803:6;9800:30;9797:56;;;9833:18;;:::i;:::-;9797:56;9871:29;9893:6;9871:29;:::i;:::-;9863:37;;9955:4;9949;9945:15;9937:23;;9659:308;;;:::o;9973:146::-;10070:6;10065:3;10060;10047:30;10111:1;10102:6;10097:3;10093:16;10086:27;9973:146;;;:::o;10125:425::-;10203:5;10228:66;10244:49;10286:6;10244:49;:::i;:::-;10228:66;:::i;:::-;10219:75;;10317:6;10310:5;10303:21;10355:4;10348:5;10344:16;10393:3;10384:6;10379:3;10375:16;10372:25;10369:112;;;10400:79;;:::i;:::-;10369:112;10490:54;10537:6;10532:3;10527;10490:54;:::i;:::-;10209:341;10125:425;;;;;:::o;10570:340::-;10626:5;10675:3;10668:4;10660:6;10656:17;10652:27;10642:122;;10683:79;;:::i;:::-;10642:122;10800:6;10787:20;10825:79;10900:3;10892:6;10885:4;10877:6;10873:17;10825:79;:::i;:::-;10816:88;;10632:278;10570:340;;;;:::o;10916:509::-;10985:6;11034:2;11022:9;11013:7;11009:23;11005:32;11002:119;;;11040:79;;:::i;:::-;11002:119;11188:1;11177:9;11173:17;11160:31;11218:18;11210:6;11207:30;11204:117;;;11240:79;;:::i;:::-;11204:117;11345:63;11400:7;11391:6;11380:9;11376:22;11345:63;:::i;:::-;11335:73;;11131:287;10916:509;;;;:::o;11431:468::-;11496:6;11504;11553:2;11541:9;11532:7;11528:23;11524:32;11521:119;;;11559:79;;:::i;:::-;11521:119;11679:1;11704:53;11749:7;11740:6;11729:9;11725:22;11704:53;:::i;:::-;11694:63;;11650:117;11806:2;11832:50;11874:7;11865:6;11854:9;11850:22;11832:50;:::i;:::-;11822:60;;11777:115;11431:468;;;;;:::o;11905:307::-;11966:4;12056:18;12048:6;12045:30;12042:56;;;12078:18;;:::i;:::-;12042:56;12116:29;12138:6;12116:29;:::i;:::-;12108:37;;12200:4;12194;12190:15;12182:23;;11905:307;;;:::o;12218:423::-;12295:5;12320:65;12336:48;12377:6;12336:48;:::i;:::-;12320:65;:::i;:::-;12311:74;;12408:6;12401:5;12394:21;12446:4;12439:5;12435:16;12484:3;12475:6;12470:3;12466:16;12463:25;12460:112;;;12491:79;;:::i;:::-;12460:112;12581:54;12628:6;12623:3;12618;12581:54;:::i;:::-;12301:340;12218:423;;;;;:::o;12660:338::-;12715:5;12764:3;12757:4;12749:6;12745:17;12741:27;12731:122;;12772:79;;:::i;:::-;12731:122;12889:6;12876:20;12914:78;12988:3;12980:6;12973:4;12965:6;12961:17;12914:78;:::i;:::-;12905:87;;12721:277;12660:338;;;;:::o;13004:943::-;13099:6;13107;13115;13123;13172:3;13160:9;13151:7;13147:23;13143:33;13140:120;;;13179:79;;:::i;:::-;13140:120;13299:1;13324:53;13369:7;13360:6;13349:9;13345:22;13324:53;:::i;:::-;13314:63;;13270:117;13426:2;13452:53;13497:7;13488:6;13477:9;13473:22;13452:53;:::i;:::-;13442:63;;13397:118;13554:2;13580:53;13625:7;13616:6;13605:9;13601:22;13580:53;:::i;:::-;13570:63;;13525:118;13710:2;13699:9;13695:18;13682:32;13741:18;13733:6;13730:30;13727:117;;;13763:79;;:::i;:::-;13727:117;13868:62;13922:7;13913:6;13902:9;13898:22;13868:62;:::i;:::-;13858:72;;13653:287;13004:943;;;;;;;:::o;13953:474::-;14021:6;14029;14078:2;14066:9;14057:7;14053:23;14049:32;14046:119;;;14084:79;;:::i;:::-;14046:119;14204:1;14229:53;14274:7;14265:6;14254:9;14250:22;14229:53;:::i;:::-;14219:63;;14175:117;14331:2;14357:53;14402:7;14393:6;14382:9;14378:22;14357:53;:::i;:::-;14347:63;;14302:118;13953:474;;;;;:::o;14433:182::-;14573:34;14569:1;14561:6;14557:14;14550:58;14433:182;:::o;14621:366::-;14763:3;14784:67;14848:2;14843:3;14784:67;:::i;:::-;14777:74;;14860:93;14949:3;14860:93;:::i;:::-;14978:2;14973:3;14969:12;14962:19;;14621:366;;;:::o;14993:419::-;15159:4;15197:2;15186:9;15182:18;15174:26;;15246:9;15240:4;15236:20;15232:1;15221:9;15217:17;15210:47;15274:131;15400:4;15274:131;:::i;:::-;15266:139;;14993:419;;;:::o;15418:180::-;15466:77;15463:1;15456:88;15563:4;15560:1;15553:15;15587:4;15584:1;15577:15;15604:320;15648:6;15685:1;15679:4;15675:12;15665:22;;15732:1;15726:4;15722:12;15753:18;15743:81;;15809:4;15801:6;15797:17;15787:27;;15743:81;15871:2;15863:6;15860:14;15840:18;15837:38;15834:84;;15890:18;;:::i;:::-;15834:84;15655:269;15604:320;;;:::o;15930:231::-;16070:34;16066:1;16058:6;16054:14;16047:58;16139:14;16134:2;16126:6;16122:15;16115:39;15930:231;:::o;16167:366::-;16309:3;16330:67;16394:2;16389:3;16330:67;:::i;:::-;16323:74;;16406:93;16495:3;16406:93;:::i;:::-;16524:2;16519:3;16515:12;16508:19;;16167:366;;;:::o;16539:419::-;16705:4;16743:2;16732:9;16728:18;16720:26;;16792:9;16786:4;16782:20;16778:1;16767:9;16763:17;16756:47;16820:131;16946:4;16820:131;:::i;:::-;16812:139;;16539:419;;;:::o;16964:220::-;17104:34;17100:1;17092:6;17088:14;17081:58;17173:3;17168:2;17160:6;17156:15;17149:28;16964:220;:::o;17190:366::-;17332:3;17353:67;17417:2;17412:3;17353:67;:::i;:::-;17346:74;;17429:93;17518:3;17429:93;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17190:366;;;:::o;17562:419::-;17728:4;17766:2;17755:9;17751:18;17743:26;;17815:9;17809:4;17805:20;17801:1;17790:9;17786:17;17779:47;17843:131;17969:4;17843:131;:::i;:::-;17835:139;;17562:419;;;:::o;17987:243::-;18127:34;18123:1;18115:6;18111:14;18104:58;18196:26;18191:2;18183:6;18179:15;18172:51;17987:243;:::o;18236:366::-;18378:3;18399:67;18463:2;18458:3;18399:67;:::i;:::-;18392:74;;18475:93;18564:3;18475:93;:::i;:::-;18593:2;18588:3;18584:12;18577:19;;18236:366;;;:::o;18608:419::-;18774:4;18812:2;18801:9;18797:18;18789:26;;18861:9;18855:4;18851:20;18847:1;18836:9;18832:17;18825:47;18889:131;19015:4;18889:131;:::i;:::-;18881:139;;18608:419;;;:::o;19033:236::-;19173:34;19169:1;19161:6;19157:14;19150:58;19242:19;19237:2;19229:6;19225:15;19218:44;19033:236;:::o;19275:366::-;19417:3;19438:67;19502:2;19497:3;19438:67;:::i;:::-;19431:74;;19514:93;19603:3;19514:93;:::i;:::-;19632:2;19627:3;19623:12;19616:19;;19275:366;;;:::o;19647:419::-;19813:4;19851:2;19840:9;19836:18;19828:26;;19900:9;19894:4;19890:20;19886:1;19875:9;19871:17;19864:47;19928:131;20054:4;19928:131;:::i;:::-;19920:139;;19647:419;;;:::o;20072:230::-;20212:34;20208:1;20200:6;20196:14;20189:58;20281:13;20276:2;20268:6;20264:15;20257:38;20072:230;:::o;20308:366::-;20450:3;20471:67;20535:2;20530:3;20471:67;:::i;:::-;20464:74;;20547:93;20636:3;20547:93;:::i;:::-;20665:2;20660:3;20656:12;20649:19;;20308:366;;;:::o;20680:419::-;20846:4;20884:2;20873:9;20869:18;20861:26;;20933:9;20927:4;20923:20;20919:1;20908:9;20904:17;20897:47;20961:131;21087:4;20961:131;:::i;:::-;20953:139;;20680:419;;;:::o;21105:147::-;21206:11;21243:3;21228:18;;21105:147;;;;:::o;21258:114::-;;:::o;21378:398::-;21537:3;21558:83;21639:1;21634:3;21558:83;:::i;:::-;21551:90;;21650:93;21739:3;21650:93;:::i;:::-;21768:1;21763:3;21759:11;21752:18;;21378:398;;;:::o;21782:379::-;21966:3;21988:147;22131:3;21988:147;:::i;:::-;21981:154;;22152:3;22145:10;;21782:379;;;:::o;22167:180::-;22215:77;22212:1;22205:88;22312:4;22309:1;22302:15;22336:4;22333:1;22326:15;22353:180;22401:77;22398:1;22391:88;22498:4;22495:1;22488:15;22522:4;22519:1;22512:15;22539:233;22578:3;22601:24;22619:5;22601:24;:::i;:::-;22592:33;;22647:66;22640:5;22637:77;22634:103;;22717:18;;:::i;:::-;22634:103;22764:1;22757:5;22753:13;22746:20;;22539:233;;;:::o;22778:231::-;22918:34;22914:1;22906:6;22902:14;22895:58;22987:14;22982:2;22974:6;22970:15;22963:39;22778:231;:::o;23015:366::-;23157:3;23178:67;23242:2;23237:3;23178:67;:::i;:::-;23171:74;;23254:93;23343:3;23254:93;:::i;:::-;23372:2;23367:3;23363:12;23356:19;;23015:366;;;:::o;23387:419::-;23553:4;23591:2;23580:9;23576:18;23568:26;;23640:9;23634:4;23630:20;23626:1;23615:9;23611:17;23604:47;23668:131;23794:4;23668:131;:::i;:::-;23660:139;;23387:419;;;:::o;23812:141::-;23861:4;23884:3;23876:11;;23907:3;23904:1;23897:14;23941:4;23938:1;23928:18;23920:26;;23812:141;;;:::o;23959:93::-;23996:6;24043:2;24038;24031:5;24027:14;24023:23;24013:33;;23959:93;;;:::o;24058:107::-;24102:8;24152:5;24146:4;24142:16;24121:37;;24058:107;;;;:::o;24171:393::-;24240:6;24290:1;24278:10;24274:18;24313:97;24343:66;24332:9;24313:97;:::i;:::-;24431:39;24461:8;24450:9;24431:39;:::i;:::-;24419:51;;24503:4;24499:9;24492:5;24488:21;24479:30;;24552:4;24542:8;24538:19;24531:5;24528:30;24518:40;;24247:317;;24171:393;;;;;:::o;24570:60::-;24598:3;24619:5;24612:12;;24570:60;;;:::o;24636:142::-;24686:9;24719:53;24737:34;24746:24;24764:5;24746:24;:::i;:::-;24737:34;:::i;:::-;24719:53;:::i;:::-;24706:66;;24636:142;;;:::o;24784:75::-;24827:3;24848:5;24841:12;;24784:75;;;:::o;24865:269::-;24975:39;25006:7;24975:39;:::i;:::-;25036:91;25085:41;25109:16;25085:41;:::i;:::-;25077:6;25070:4;25064:11;25036:91;:::i;:::-;25030:4;25023:105;24941:193;24865:269;;;:::o;25140:73::-;25185:3;25140:73;:::o;25219:189::-;25296:32;;:::i;:::-;25337:65;25395:6;25387;25381:4;25337:65;:::i;:::-;25272:136;25219:189;;:::o;25414:186::-;25474:120;25491:3;25484:5;25481:14;25474:120;;;25545:39;25582:1;25575:5;25545:39;:::i;:::-;25518:1;25511:5;25507:13;25498:22;;25474:120;;;25414:186;;:::o;25606:543::-;25707:2;25702:3;25699:11;25696:446;;;25741:38;25773:5;25741:38;:::i;:::-;25825:29;25843:10;25825:29;:::i;:::-;25815:8;25811:44;26008:2;25996:10;25993:18;25990:49;;;26029:8;26014:23;;25990:49;26052:80;26108:22;26126:3;26108:22;:::i;:::-;26098:8;26094:37;26081:11;26052:80;:::i;:::-;25711:431;;25696:446;25606:543;;;:::o;26155:117::-;26209:8;26259:5;26253:4;26249:16;26228:37;;26155:117;;;;:::o;26278:169::-;26322:6;26355:51;26403:1;26399:6;26391:5;26388:1;26384:13;26355:51;:::i;:::-;26351:56;26436:4;26430;26426:15;26416:25;;26329:118;26278:169;;;;:::o;26452:295::-;26528:4;26674:29;26699:3;26693:4;26674:29;:::i;:::-;26666:37;;26736:3;26733:1;26729:11;26723:4;26720:21;26712:29;;26452:295;;;;:::o;26752:1395::-;26869:37;26902:3;26869:37;:::i;:::-;26971:18;26963:6;26960:30;26957:56;;;26993:18;;:::i;:::-;26957:56;27037:38;27069:4;27063:11;27037:38;:::i;:::-;27122:67;27182:6;27174;27168:4;27122:67;:::i;:::-;27216:1;27240:4;27227:17;;27272:2;27264:6;27261:14;27289:1;27284:618;;;;27946:1;27963:6;27960:77;;;28012:9;28007:3;28003:19;27997:26;27988:35;;27960:77;28063:67;28123:6;28116:5;28063:67;:::i;:::-;28057:4;28050:81;27919:222;27254:887;;27284:618;27336:4;27332:9;27324:6;27320:22;27370:37;27402:4;27370:37;:::i;:::-;27429:1;27443:208;27457:7;27454:1;27451:14;27443:208;;;27536:9;27531:3;27527:19;27521:26;27513:6;27506:42;27587:1;27579:6;27575:14;27565:24;;27634:2;27623:9;27619:18;27606:31;;27480:4;27477:1;27473:12;27468:17;;27443:208;;;27679:6;27670:7;27667:19;27664:179;;;27737:9;27732:3;27728:19;27722:26;27780:48;27822:4;27814:6;27810:17;27799:9;27780:48;:::i;:::-;27772:6;27765:64;27687:156;27664:179;27889:1;27885;27877:6;27873:14;27869:22;27863:4;27856:36;27291:611;;;27254:887;;26844:1303;;;26752:1395;;:::o;28153:228::-;28293:34;28289:1;28281:6;28277:14;28270:58;28362:11;28357:2;28349:6;28345:15;28338:36;28153:228;:::o;28387:366::-;28529:3;28550:67;28614:2;28609:3;28550:67;:::i;:::-;28543:74;;28626:93;28715:3;28626:93;:::i;:::-;28744:2;28739:3;28735:12;28728:19;;28387:366;;;:::o;28759:419::-;28925:4;28963:2;28952:9;28948:18;28940:26;;29012:9;29006:4;29002:20;28998:1;28987:9;28983:17;28976:47;29040:131;29166:4;29040:131;:::i;:::-;29032:139;;28759:419;;;:::o;29184:229::-;29324:34;29320:1;29312:6;29308:14;29301:58;29393:12;29388:2;29380:6;29376:15;29369:37;29184:229;:::o;29419:366::-;29561:3;29582:67;29646:2;29641:3;29582:67;:::i;:::-;29575:74;;29658:93;29747:3;29658:93;:::i;:::-;29776:2;29771:3;29767:12;29760:19;;29419:366;;;:::o;29791:419::-;29957:4;29995:2;29984:9;29980:18;29972:26;;30044:9;30038:4;30034:20;30030:1;30019:9;30015:17;30008:47;30072:131;30198:4;30072:131;:::i;:::-;30064:139;;29791:419;;;:::o;30216:191::-;30256:3;30275:20;30293:1;30275:20;:::i;:::-;30270:25;;30309:20;30327:1;30309:20;:::i;:::-;30304:25;;30352:1;30349;30345:9;30338:16;;30373:3;30370:1;30367:10;30364:36;;;30380:18;;:::i;:::-;30364:36;30216:191;;;;:::o;30413:410::-;30453:7;30476:20;30494:1;30476:20;:::i;:::-;30471:25;;30510:20;30528:1;30510:20;:::i;:::-;30505:25;;30565:1;30562;30558:9;30587:30;30605:11;30587:30;:::i;:::-;30576:41;;30766:1;30757:7;30753:15;30750:1;30747:22;30727:1;30720:9;30700:83;30677:139;;30796:18;;:::i;:::-;30677:139;30461:362;30413:410;;;;:::o;30829:175::-;30969:27;30965:1;30957:6;30953:14;30946:51;30829:175;:::o;31010:366::-;31152:3;31173:67;31237:2;31232:3;31173:67;:::i;:::-;31166:74;;31249:93;31338:3;31249:93;:::i;:::-;31367:2;31362:3;31358:12;31351:19;;31010:366;;;:::o;31382:419::-;31548:4;31586:2;31575:9;31571:18;31563:26;;31635:9;31629:4;31625:20;31621:1;31610:9;31606:17;31599:47;31663:131;31789:4;31663:131;:::i;:::-;31655:139;;31382:419;;;:::o;31807:234::-;31947:34;31943:1;31935:6;31931:14;31924:58;32016:17;32011:2;32003:6;31999:15;31992:42;31807:234;:::o;32047:366::-;32189:3;32210:67;32274:2;32269:3;32210:67;:::i;:::-;32203:74;;32286:93;32375:3;32286:93;:::i;:::-;32404:2;32399:3;32395:12;32388:19;;32047:366;;;:::o;32419:419::-;32585:4;32623:2;32612:9;32608:18;32600:26;;32672:9;32666:4;32662:20;32658:1;32647:9;32643:17;32636:47;32700:131;32826:4;32700:131;:::i;:::-;32692:139;;32419:419;;;:::o;32844:148::-;32946:11;32983:3;32968:18;;32844:148;;;;:::o;32998:390::-;33104:3;33132:39;33165:5;33132:39;:::i;:::-;33187:89;33269:6;33264:3;33187:89;:::i;:::-;33180:96;;33285:65;33343:6;33338:3;33331:4;33324:5;33320:16;33285:65;:::i;:::-;33375:6;33370:3;33366:16;33359:23;;33108:280;32998:390;;;;:::o;33418:874::-;33521:3;33558:5;33552:12;33587:36;33613:9;33587:36;:::i;:::-;33639:89;33721:6;33716:3;33639:89;:::i;:::-;33632:96;;33759:1;33748:9;33744:17;33775:1;33770:166;;;;33950:1;33945:341;;;;33737:549;;33770:166;33854:4;33850:9;33839;33835:25;33830:3;33823:38;33916:6;33909:14;33902:22;33894:6;33890:35;33885:3;33881:45;33874:52;;33770:166;;33945:341;34012:38;34044:5;34012:38;:::i;:::-;34072:1;34086:154;34100:6;34097:1;34094:13;34086:154;;;34174:7;34168:14;34164:1;34159:3;34155:11;34148:35;34224:1;34215:7;34211:15;34200:26;;34122:4;34119:1;34115:12;34110:17;;34086:154;;;34269:6;34264:3;34260:16;34253:23;;33952:334;;33737:549;;33525:767;;33418:874;;;;:::o;34298:589::-;34523:3;34545:95;34636:3;34627:6;34545:95;:::i;:::-;34538:102;;34657:95;34748:3;34739:6;34657:95;:::i;:::-;34650:102;;34769:92;34857:3;34848:6;34769:92;:::i;:::-;34762:99;;34878:3;34871:10;;34298:589;;;;;;:::o;34893:225::-;35033:34;35029:1;35021:6;35017:14;35010:58;35102:8;35097:2;35089:6;35085:15;35078:33;34893:225;:::o;35124:366::-;35266:3;35287:67;35351:2;35346:3;35287:67;:::i;:::-;35280:74;;35363:93;35452:3;35363:93;:::i;:::-;35481:2;35476:3;35472:12;35465:19;;35124:366;;;:::o;35496:419::-;35662:4;35700:2;35689:9;35685:18;35677:26;;35749:9;35743:4;35739:20;35735:1;35724:9;35720:17;35713:47;35777:131;35903:4;35777:131;:::i;:::-;35769:139;;35496:419;;;:::o;35921:231::-;36061:34;36057:1;36049:6;36045:14;36038:58;36130:14;36125:2;36117:6;36113:15;36106:39;35921:231;:::o;36158:366::-;36300:3;36321:67;36385:2;36380:3;36321:67;:::i;:::-;36314:74;;36397:93;36486:3;36397:93;:::i;:::-;36515:2;36510:3;36506:12;36499:19;;36158:366;;;:::o;36530:419::-;36696:4;36734:2;36723:9;36719:18;36711:26;;36783:9;36777:4;36773:20;36769:1;36758:9;36754:17;36747:47;36811:131;36937:4;36811:131;:::i;:::-;36803:139;;36530:419;;;:::o;36955:228::-;37095:34;37091:1;37083:6;37079:14;37072:58;37164:11;37159:2;37151:6;37147:15;37140:36;36955:228;:::o;37189:366::-;37331:3;37352:67;37416:2;37411:3;37352:67;:::i;:::-;37345:74;;37428:93;37517:3;37428:93;:::i;:::-;37546:2;37541:3;37537:12;37530:19;;37189:366;;;:::o;37561:419::-;37727:4;37765:2;37754:9;37750:18;37742:26;;37814:9;37808:4;37804:20;37800:1;37789:9;37785:17;37778:47;37842:131;37968:4;37842:131;:::i;:::-;37834:139;;37561:419;;;:::o;37986:223::-;38126:34;38122:1;38114:6;38110:14;38103:58;38195:6;38190:2;38182:6;38178:15;38171:31;37986:223;:::o;38215:366::-;38357:3;38378:67;38442:2;38437:3;38378:67;:::i;:::-;38371:74;;38454:93;38543:3;38454:93;:::i;:::-;38572:2;38567:3;38563:12;38556:19;;38215:366;;;:::o;38587:419::-;38753:4;38791:2;38780:9;38776:18;38768:26;;38840:9;38834:4;38830:20;38826:1;38815:9;38811:17;38804:47;38868:131;38994:4;38868:131;:::i;:::-;38860:139;;38587:419;;;:::o;39012:194::-;39052:4;39072:20;39090:1;39072:20;:::i;:::-;39067:25;;39106:20;39124:1;39106:20;:::i;:::-;39101:25;;39150:1;39147;39143:9;39135:17;;39174:1;39168:4;39165:11;39162:37;;;39179:18;;:::i;:::-;39162:37;39012:194;;;;:::o;39212:237::-;39352:34;39348:1;39340:6;39336:14;39329:58;39421:20;39416:2;39408:6;39404:15;39397:45;39212:237;:::o;39455:366::-;39597:3;39618:67;39682:2;39677:3;39618:67;:::i;:::-;39611:74;;39694:93;39783:3;39694:93;:::i;:::-;39812:2;39807:3;39803:12;39796:19;;39455:366;;;:::o;39827:419::-;39993:4;40031:2;40020:9;40016:18;40008:26;;40080:9;40074:4;40070:20;40066:1;40055:9;40051:17;40044:47;40108:131;40234:4;40108:131;:::i;:::-;40100:139;;39827:419;;;:::o;40252:180::-;40300:77;40297:1;40290:88;40397:4;40394:1;40387:15;40421:4;40418:1;40411:15;40438:185;40478:1;40495:20;40513:1;40495:20;:::i;:::-;40490:25;;40529:20;40547:1;40529:20;:::i;:::-;40524:25;;40568:1;40558:35;;40573:18;;:::i;:::-;40558:35;40615:1;40612;40608:9;40603:14;;40438:185;;;;:::o;40629:176::-;40661:1;40678:20;40696:1;40678:20;:::i;:::-;40673:25;;40712:20;40730:1;40712:20;:::i;:::-;40707:25;;40751:1;40741:35;;40756:18;;:::i;:::-;40741:35;40797:1;40794;40790:9;40785:14;;40629:176;;;;:::o;40811:98::-;40862:6;40896:5;40890:12;40880:22;;40811:98;;;:::o;40915:168::-;40998:11;41032:6;41027:3;41020:19;41072:4;41067:3;41063:14;41048:29;;40915:168;;;;:::o;41089:373::-;41175:3;41203:38;41235:5;41203:38;:::i;:::-;41257:70;41320:6;41315:3;41257:70;:::i;:::-;41250:77;;41336:65;41394:6;41389:3;41382:4;41375:5;41371:16;41336:65;:::i;:::-;41426:29;41448:6;41426:29;:::i;:::-;41421:3;41417:39;41410:46;;41179:283;41089:373;;;;:::o;41468:640::-;41663:4;41701:3;41690:9;41686:19;41678:27;;41715:71;41783:1;41772:9;41768:17;41759:6;41715:71;:::i;:::-;41796:72;41864:2;41853:9;41849:18;41840:6;41796:72;:::i;:::-;41878;41946:2;41935:9;41931:18;41922:6;41878:72;:::i;:::-;41997:9;41991:4;41987:20;41982:2;41971:9;41967:18;41960:48;42025:76;42096:4;42087:6;42025:76;:::i;:::-;42017:84;;41468:640;;;;;;;:::o;42114:141::-;42170:5;42201:6;42195:13;42186:22;;42217:32;42243:5;42217:32;:::i;:::-;42114:141;;;;:::o;42261:349::-;42330:6;42379:2;42367:9;42358:7;42354:23;42350:32;42347:119;;;42385:79;;:::i;:::-;42347:119;42505:1;42530:63;42585:7;42576:6;42565:9;42561:22;42530:63;:::i;:::-;42520:73;;42476:127;42261:349;;;;:::o;42616:180::-;42664:77;42661:1;42654:88;42761:4;42758:1;42751:15;42785:4;42782:1;42775:15;42802:182;42942:34;42938:1;42930:6;42926:14;42919:58;42802:182;:::o;42990:366::-;43132:3;43153:67;43217:2;43212:3;43153:67;:::i;:::-;43146:74;;43229:93;43318:3;43229:93;:::i;:::-;43347:2;43342:3;43338:12;43331:19;;42990:366;;;:::o;43362:419::-;43528:4;43566:2;43555:9;43551:18;43543:26;;43615:9;43609:4;43605:20;43601:1;43590:9;43586:17;43579:47;43643:131;43769:4;43643:131;:::i;:::-;43635:139;;43362:419;;;:::o;43787:178::-;43927:30;43923:1;43915:6;43911:14;43904:54;43787:178;:::o;43971:366::-;44113:3;44134:67;44198:2;44193:3;44134:67;:::i;:::-;44127:74;;44210:93;44299:3;44210:93;:::i;:::-;44328:2;44323:3;44319:12;44312:19;;43971:366;;;:::o;44343:419::-;44509:4;44547:2;44536:9;44532:18;44524:26;;44596:9;44590:4;44586:20;44582:1;44571:9;44567:17;44560:47;44624:131;44750:4;44624:131;:::i;:::-;44616:139;;44343:419;;;:::o
Swarm Source
ipfs://f24c42615bc6019112719c97df773ce51147a5199fca4a5c71675f0169642672
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,055.2 | 0.013 | $26.72 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.