More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 243 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim From Stake | 16530673 | 610 days ago | IN | 0 ETH | 0.00749157 | ||||
Claim From Stake | 16530669 | 610 days ago | IN | 0 ETH | 0.00640187 | ||||
Claim From Stake | 15561806 | 745 days ago | IN | 0 ETH | 0.00352737 | ||||
Claim From Stake | 15561802 | 745 days ago | IN | 0 ETH | 0.0005993 | ||||
Claim From Stake | 15484846 | 757 days ago | IN | 0 ETH | 0.00780335 | ||||
Claim From Stake | 15463107 | 761 days ago | IN | 0 ETH | 0.00192899 | ||||
Claim From Stake | 15462796 | 761 days ago | IN | 0 ETH | 0.00118403 | ||||
Claim From Stake | 15434622 | 765 days ago | IN | 0 ETH | 0.00455684 | ||||
Claim From Stake | 15419147 | 768 days ago | IN | 0 ETH | 0.00139761 | ||||
Claim From Stake | 15406432 | 770 days ago | IN | 0 ETH | 0.00217691 | ||||
Claim From Stake | 15346835 | 779 days ago | IN | 0 ETH | 0.00781807 | ||||
Claim From Stake | 15346811 | 779 days ago | IN | 0 ETH | 0.00478293 | ||||
Claim From Stake | 15313242 | 785 days ago | IN | 0 ETH | 0.00377631 | ||||
Claim From Stake | 15299890 | 787 days ago | IN | 0 ETH | 0.00046255 | ||||
Claim From Stake | 15292101 | 788 days ago | IN | 0 ETH | 0.00195629 | ||||
Add Tokens To St... | 15273158 | 791 days ago | IN | 0 ETH | 0.00034939 | ||||
Claim From Stake | 15273158 | 791 days ago | IN | 0 ETH | 0.00027442 | ||||
Add Tokens To St... | 15270658 | 791 days ago | IN | 0 ETH | 0.00284643 | ||||
Transfer Ownersh... | 15257027 | 793 days ago | IN | 0 ETH | 0.0002353 | ||||
Claim From Stake | 15254498 | 794 days ago | IN | 0 ETH | 0.00415417 | ||||
Claim From Stake | 15254495 | 794 days ago | IN | 0 ETH | 0.00020735 | ||||
Claim From Stake | 15234749 | 797 days ago | IN | 0 ETH | 0.00223571 | ||||
Add Tokens To St... | 15220916 | 799 days ago | IN | 0 ETH | 0.00594044 | ||||
Add Tokens To St... | 15202553 | 802 days ago | IN | 0 ETH | 0.00337175 | ||||
Claim From Stake | 15198922 | 802 days ago | IN | 0 ETH | 0.00846674 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
cleostake
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-13 */ // SPDX-License-Identifier: MIT LICENSE // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/cleostake.sol pragma solidity ^0.8.9; interface ICLEOP { function ownerOf(uint id) external view returns (address); function isCobra(uint16 id) external view returns (bool); function transferFrom(address from, address to, uint tokenId) external; function safeTransferFrom(address from, address to, uint tokenId, bytes memory _data) external; } interface ICLEO { function mint(address account, uint amount) external; } contract cleostake is Ownable, IERC721Receiver { bool private _paused = false; uint16 private _randomIndex = 0; uint private _randomCalls = 0; mapping(uint => address) private _randomSource; struct cleoStake { uint16 tokenId; uint80 value; address owner; uint level; uint stakeOwed; } struct cobraStake { uint16 tokenId; uint80 value; address owner; uint stakeOwed; } event TokenStaked(address owner, uint16 tokenId, uint value); event cleoClaimed(uint16 tokenId, uint earned, bool unstaked); event cobraClaimed(uint16 tokenId, uint earned, bool unstaked); event cleoCoinStolen(uint16 tokenId, uint stolen); ICLEOP public cleop; ICLEO public cleo; mapping(uint256 => uint256) public cleoIndices; mapping(address => cleoStake[]) public cleoStaked; mapping (uint256 => uint256) public levels; address[] public cleoHolders; mapping(uint256 => uint256) public cobraIndices; mapping(address => cobraStake[]) public cobraStaked; address[] public cobraHolders; // Total staked tokens uint public totalCleosStaked; uint public totalCobrasStaked = 0; uint public unaccountedRewards = 0; // GoldMiner earn 10000 $GGOLD per day uint public DAILY_CLEO_RATE = 1 ether; uint public MINIMUM_TIME_TO_EXIT = 0 days; uint public TAX_PERCENTAGE = 20; uint public MAXIMUM_GLOBAL_CLEO = 2300000 ether; uint public totalCleoEarned; uint public lastClaimTimestamp; uint public cobraReward = 0; // emergency rescue to allow unstaking without any checks but without $GGOLD bool public rescueEnabled = false; constructor() { // Fill random source addresses _randomSource[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; _randomSource[1] = 0x3cD751E6b0078Be393132286c442345e5DC49699; _randomSource[2] = 0xb5d85CBf7cB3EE0D56b3bB207D5Fc4B82f43F511; _randomSource[3] = 0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94; _randomSource[4] = 0x28C6c06298d514Db089934071355E5743bf21d60; _randomSource[5] = 0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2; _randomSource[6] = 0x267be1C1D684F78cb4F6a176C4911b741E4Ffdc0; } function paused() public view virtual returns (bool) { return _paused; } modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } function setCleoP(address _cleop) external onlyOwner { cleop = ICLEOP(_cleop); } function setCleoRate(uint _newRate) external onlyOwner { DAILY_CLEO_RATE = _newRate; } function setTimeToExit(uint _newExit) external onlyOwner { MINIMUM_TIME_TO_EXIT = _newExit; } function setTaxPercentage(uint _newTax) external onlyOwner { TAX_PERCENTAGE = _newTax; } function setMaxGameGold(uint _newMax) external onlyOwner { MAXIMUM_GLOBAL_CLEO = _newMax; } function setCleo(address _cleo) external onlyOwner { cleo = ICLEO(_cleo); } function getAccountCleop(address user) external view returns (cleoStake[] memory) { return cleoStaked[user]; } function getAccountCobras(address user) external view returns (cobraStake[] memory) { return cobraStaked[user]; } function addTokensToStake(address account, uint16[] calldata tokenIds) external { require(account == msg.sender || msg.sender == address(cleop), "You do not have a permission to do that"); cleoHolders.push(account); for (uint i = 0; i < tokenIds.length; i++) { if (msg.sender != address(cleop)) { // dont do this step if its a mint + stake require(cleop.ownerOf(tokenIds[i]) == msg.sender, "This NTF does not belong to address"); cleop.transferFrom(msg.sender, address(this), tokenIds[i]); } else if (tokenIds[i] == 0) { continue; // there may be gaps in the array for stolen tokens } if (cleop.isCobra(tokenIds[i])) { _stakeCobras(account, tokenIds[i]); } else { _stakeCleos(account, tokenIds[i]); } } } function _stakeCleos(address account, uint16 tokenId) internal whenNotPaused _updateEarnings { totalCleosStaked += 1; uint level=levels[tokenId]; uint stakeOwed = 0; cleoIndices[tokenId] = cleoStaked[account].length; cleoStaked[account].push(cleoStake({ owner: account, tokenId: uint16(tokenId), value: uint80(block.timestamp), level: level, stakeOwed: stakeOwed })); emit TokenStaked(account, tokenId, block.timestamp); } function _stakeCobras(address account, uint16 tokenId) internal { totalCobrasStaked += 1; uint stakeOwed = 0; // If account already has some pirates no need to push it to the tracker if (cobraStaked[account].length == 0) { cobraHolders.push(account); } cobraIndices[tokenId] = cobraStaked[account].length; cobraStaked[account].push(cobraStake({ owner: account, tokenId: uint16(tokenId), value: uint80(cobraReward), stakeOwed: stakeOwed })); emit TokenStaked(account, tokenId, cobraReward); } function claimFromStake(uint16[] calldata tokenIds, bool unstake) external whenNotPaused _updateEarnings { uint owed = 0; for (uint i = 0; i < tokenIds.length; i++) { if (!cleop.isCobra(tokenIds[i])) { owed += _claimFromCleo(tokenIds[i], unstake); } else { owed += _claimFromCobra(tokenIds[i], unstake); } } if (owed == 0) return; cleo.mint(msg.sender, owed); } function _claimFromCleo(uint16 tokenId, bool unstake) internal returns (uint owed) { cleoStake memory stake = cleoStaked[msg.sender][cleoIndices[tokenId]]; require(stake.owner == msg.sender, "This NTF does not belong to address"); require(!(unstake && block.timestamp - stake.value < MINIMUM_TIME_TO_EXIT), "Need to wait more time since last claim"); if (totalCleoEarned < MAXIMUM_GLOBAL_CLEO) { owed = ((block.timestamp - stake.value) * stake.level * DAILY_CLEO_RATE) / 1 days; owed += stake.stakeOwed; } else if (stake.value > lastClaimTimestamp) { owed = 0; // $GGOLD production stopped already } else { owed = ((lastClaimTimestamp - stake.value) * DAILY_CLEO_RATE) / 1 days; // stop earning additional $GGOLD if it's all been earned } if (unstake) { if (getSomeRandomNumber(tokenId, 100) <= 50) { _payTax(owed); emit cleoCoinStolen(tokenId, owed); owed = 0; } updateRandomIndex(); totalCleosStaked -= 1; cleoStake memory lastStake = cleoStaked[msg.sender][cleoStaked[msg.sender].length - 1]; cleoStaked[msg.sender][cleoIndices[tokenId]] = lastStake; cleoIndices[lastStake.tokenId] = cleoIndices[tokenId]; cleoStaked[msg.sender].pop(); delete cleoIndices[tokenId]; cleop.safeTransferFrom(address(this), msg.sender, tokenId, ""); } else { _payTax((owed * TAX_PERCENTAGE) / 100); // Pay some $GGOLD to pirates! owed = (owed * (100 - TAX_PERCENTAGE)) / 100; uint80 timestamp = uint80(block.timestamp); uint level=levels[tokenId]; cleoStaked[msg.sender][cleoIndices[tokenId]] = cleoStake({ owner: msg.sender, tokenId: uint16(tokenId), value: timestamp, level: level, stakeOwed: 0 }); // reset stake } emit cleoClaimed(tokenId, owed, unstake); } function _updateStake(address account, uint tokenIds) internal { uint owed; cleoStake memory stake = cleoStaked[account][cleoIndices[tokenIds]]; if (totalCleoEarned < MAXIMUM_GLOBAL_CLEO) { owed = ((block.timestamp - stake.value) * stake.level * DAILY_CLEO_RATE) / 1 days; owed += stake.stakeOwed; } else if (stake.value > lastClaimTimestamp) { owed = 0; // $GGOLD production stopped already } else { owed = ((lastClaimTimestamp - stake.value) * DAILY_CLEO_RATE) / 1 days; // stop earning additional $GGOLD if it's all been earned } uint80 timestamp = uint80(block.timestamp); uint level = levels[tokenIds]; cleoStaked[account][cleoIndices[tokenIds]] = cleoStake({ owner: account, tokenId: uint16(tokenIds), value: timestamp, level: level, stakeOwed: owed }); // update stake } function _addToMapping(uint tokenId) external { require(msg.sender == address(cleop), "Can only be called by mint contract"); uint startingLevel=1; levels[tokenId]=startingLevel; } function _updateMapping(uint tokenId, address account , bool stake) external onlyOwner { uint currentLevel = levels[tokenId]; levels[tokenId]= currentLevel + 1; if(stake == true){ _updateStake(account, tokenId); } } function _claimFromCobra(uint16 tokenId, bool unstake) internal returns (uint owed) { require(cleop.ownerOf(tokenId) == address(this), "This NTF does not belong to address"); cobraStake memory stake = cobraStaked[msg.sender][cobraIndices[tokenId]]; require(stake.owner == msg.sender, "This NTF does not belong to address"); owed = (cobraReward - stake.value); if (unstake) { totalCobrasStaked -= 1; // Remove Alpha from total staked cobraStake memory lastStake = cobraStaked[msg.sender][cobraStaked[msg.sender].length - 1]; cobraStaked[msg.sender][cobraIndices[tokenId]] = lastStake; cobraIndices[lastStake.tokenId] = cobraIndices[tokenId]; cobraStaked[msg.sender].pop(); delete cobraIndices[tokenId]; updateCobraOwnerAddressList(msg.sender); cleop.safeTransferFrom(address(this), msg.sender, tokenId, ""); } else { cobraStaked[msg.sender][cobraIndices[tokenId]] = cobraStake({ owner: msg.sender, tokenId: uint16(tokenId), value: uint80(cobraReward), stakeOwed: 0 }); // reset stake } emit cobraClaimed(tokenId, owed, unstake); } function updateCobraOwnerAddressList(address account) internal { if (cobraStaked[account].length != 0) { return; // No need to update holders } // Update the address list of holders, account unstaked all pirates address lastOwner = cobraHolders[cobraHolders.length - 1]; uint indexOfHolder = 0; for (uint i = 0; i < cobraHolders.length; i++) { if (cobraHolders[i] == account) { indexOfHolder = i; break; } } cobraHolders[indexOfHolder] = lastOwner; cobraHolders.pop(); } function rescue(uint16[] calldata tokenIds) external { require(rescueEnabled, "Rescue disabled"); uint16 tokenId; for (uint16 i = 0; i < tokenIds.length; i++) { tokenId = tokenIds[i]; if (!cleop.isCobra(tokenId)) { cleoStake memory stake; stake = cleoStaked[msg.sender][cleoIndices[tokenId]]; require(stake.owner == msg.sender, "This NTF does not belong to address"); totalCleosStaked -= 1; cleoStake memory lastStake = cleoStaked[msg.sender][cleoStaked[msg.sender].length - 1]; cleoStaked[msg.sender][cleoIndices[tokenId]] = lastStake; cleoIndices[lastStake.tokenId] = cleoIndices[tokenId]; cleoStaked[msg.sender].pop(); delete cleoIndices[tokenId]; cleop.safeTransferFrom(address(this), msg.sender, tokenId, ""); emit cleoClaimed(tokenId, 0, true); } else { cobraStake memory stake; stake = cobraStaked[msg.sender][cobraIndices[tokenId]]; require(stake.owner == msg.sender, "This NTF does not belong to address"); totalCobrasStaked -= 1; cobraStake memory lastStake = cobraStaked[msg.sender][cobraStaked[msg.sender].length - 1]; cobraStaked[msg.sender][cobraIndices[tokenId]] = lastStake; cobraIndices[lastStake.tokenId] = cobraIndices[tokenId]; cobraStaked[msg.sender].pop(); delete cobraIndices[tokenId]; updateCobraOwnerAddressList(msg.sender); cleop.safeTransferFrom(address(this), msg.sender, tokenId, ""); emit cobraClaimed(tokenId, 0, true); } } } function _payTax(uint _amount) internal { if (totalCobrasStaked == 0) { unaccountedRewards += _amount; return; } cobraReward += (_amount + unaccountedRewards) / totalCobrasStaked; unaccountedRewards = 0; } modifier _updateEarnings() { if (totalCleoEarned < MAXIMUM_GLOBAL_CLEO) { totalCleoEarned += (block.timestamp - lastClaimTimestamp) * DAILY_CLEO_RATE / 1 days; lastClaimTimestamp = block.timestamp; } _; } function setRescueEnabled(bool _enabled) external onlyOwner { rescueEnabled = _enabled; } function setPaused(bool _state) external onlyOwner { _paused = _state; } function randomCobraOwner() external returns (address) { if (totalCobrasStaked == 0) return address(0x0); uint holderIndex = getSomeRandomNumber(totalCobrasStaked, cobraHolders.length); updateRandomIndex(); return cobraHolders[holderIndex]; } function updateRandomIndex() internal { _randomIndex += 1; _randomCalls += 1; if (_randomIndex > 6) _randomIndex = 0; } function getSomeRandomNumber(uint _seed, uint _limit) internal view returns (uint16) { uint extra = 0; for (uint16 i = 0; i < 7; i++) { extra += _randomSource[_randomIndex].balance; } uint random = uint( keccak256( abi.encodePacked( _seed, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender, extra, _randomCalls, _randomIndex ) ) ); return uint16(random % _limit); } function changeRandomSource(uint _id, address _address) external onlyOwner { _randomSource[_id] = _address; } function shuffleSeeds(uint _seed, uint _max) external onlyOwner { uint shuffleCount = getSomeRandomNumber(_seed, _max); _randomIndex = uint16(shuffleCount); for (uint i = 0; i < shuffleCount; i++) { updateRandomIndex(); } } function onERC721Received( address, address from, uint, bytes calldata ) external pure override returns (bytes4) { require(from == address(0x0), "Cannot send tokens to this contact directly"); return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"},{"indexed":false,"internalType":"bool","name":"unstaked","type":"bool"}],"name":"cleoClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"stolen","type":"uint256"}],"name":"cleoCoinStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"},{"indexed":false,"internalType":"bool","name":"unstaked","type":"bool"}],"name":"cobraClaimed","type":"event"},{"inputs":[],"name":"DAILY_CLEO_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_GLOBAL_CLEO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TIME_TO_EXIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_addToMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"_updateMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"addTokensToStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimFromStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cleo","outputs":[{"internalType":"contract ICLEO","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cleoHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cleoIndices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"cleoStaked","outputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint80","name":"value","type":"uint80"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"stakeOwed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cleop","outputs":[{"internalType":"contract ICLEOP","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cobraHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cobraIndices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cobraReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"cobraStaked","outputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint80","name":"value","type":"uint80"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"stakeOwed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAccountCleop","outputs":[{"components":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint80","name":"value","type":"uint80"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"stakeOwed","type":"uint256"}],"internalType":"struct cleostake.cleoStake[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAccountCobras","outputs":[{"components":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint80","name":"value","type":"uint80"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"stakeOwed","type":"uint256"}],"internalType":"struct cleostake.cobraStake[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levels","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomCobraOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_cleo","type":"address"}],"name":"setCleo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cleop","type":"address"}],"name":"setCleoP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRate","type":"uint256"}],"name":"setCleoRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxGameGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setRescueEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newExit","type":"uint256"}],"name":"setTimeToExit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"shuffleSeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalCleoEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCleosStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCobrasStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unaccountedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000805462ffffff60a01b191681556001819055600d819055600e819055670de0b6b3a7640000600f55601081905560146011556a01e70b3ff53dbc258000006012556015556016805460ff191690553480156200006157600080fd5b506200006d3362000234565b60026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b80546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e080548216733cd751e6b0078be393132286c442345e5dc496991790557f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c8054821673b5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f5111790557f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c38054821673c098b2a3aa256d2140208c3de6543aaef5cd3a941790557fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f805482167328c6c06298d514db089934071355e5743bf21d601790557fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38480548216732faf487a4414fe77e2327f0bf4ae2a264a776ad217905560066000527f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b805490911673267be1c1d684f78cb4f6a176c4911b741e4ffdc017905562000284565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61362f80620002946000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80637653100811610151578063bcacd0e6116100c3578063d47ab81511610087578063d47ab815146105bc578063de136acd146105dc578063e062404c146105ef578063e21f4cbe14610602578063e5e3e56014610615578063f2fde38b1461061e57600080fd5b8063bcacd0e614610521578063bed394301461052a578063c0c472c01461054a578063c3ddce4714610553578063c66f88ff146105a957600080fd5b80638fe6ebaf116101155780638fe6ebaf146104b657806392b24229146104c9578063ac28dbf1146104dc578063aee2fb2f146104ef578063b2596a67146104f8578063bc55276b1461051857600080fd5b806376531008146104635780637876ab0c146104765780637bab28911461047f5780638327dd8d146104925780638da5cb5b146104a557600080fd5b8063289a184f116101ea578063493e9789116101ae578063493e9789146104055780635c975abb1461040d578063606673751461041f578063607af3971461043f578063699abb3c14610448578063715018a61461045b57600080fd5b8063289a184f146103b05780632a61aad6146103b957806335901544146103cc57806339db714f146103d55780633abeb494146103f257600080fd5b8063150b7a0211610231578063150b7a021461033857806316c38b3c146103645780631aa491101461037757806320997a491461038a57806321c8da9a1461039d57600080fd5b806302621aa21461026e578063029d01c614610283578063090beec0146102b357806314d75184146102d357806314fd3b46146102ea575b600080fd5b61028161027c366004612fd5565b610631565b005b600454610296906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102c66102c1366004612fd5565b610686565b6040516102aa9190612ff9565b6102dc60125481565b6040519081526020016102aa565b6102fd6102f8366004613073565b610738565b6040805161ffff90951685526001600160501b0390931660208501526001600160a01b039091169183019190915260608201526080016102aa565b61034b61034636600461309f565b610799565b6040516001600160e01b031990911681526020016102aa565b61028161037236600461314c565b610818565b610281610385366004613169565b610860565b610281610398366004613169565b61088f565b6102816103ab3660046131ce565b6108be565b6102dc60155481565b6102816103c7366004613169565b61105a565b6102dc60105481565b6016546103e29060ff1681565b60405190151581526020016102aa565b610296610400366004613169565b611089565b6102966110b3565b600054600160a01b900460ff166103e2565b6102dc61042d366004613169565b60096020526000908152604090205481565b6102dc60145481565b610281610456366004613169565b611114565b610281611143565b61028161047136600461314c565b611179565b6102dc60115481565b61028161048d366004613210565b6111b6565b6102816104a0366004613169565b61121e565b6000546001600160a01b0316610296565b6102816104c4366004612fd5565b611298565b6102816104d7366004613252565b6112e4565b6102816104ea366004613274565b611360565b6102dc600d5481565b6102dc610506366004613169565b60076020526000908152604090205481565b6102dc600c5481565b6102dc60135481565b61053d610538366004612fd5565b6113b8565b6040516102aa91906132a4565b6102dc600e5481565b610566610561366004613073565b61146a565b6040805161ffff90961686526001600160501b0390941660208601526001600160a01b03909216928401929092526060830191909152608082015260a0016102aa565b6102816105b736600461331b565b6114d1565b6102dc6105ca366004613169565b60056020526000908152604090205481565b6102966105ea366004613169565b61172f565b600354610296906001600160a01b031681565b610281610610366004613367565b61173f565b6102dc600f5481565b61028161062c366004612fd5565b611af7565b6000546001600160a01b031633146106645760405162461bcd60e51b815260040161065b906133bc565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600a60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561072d5760008481526020908190206040805160808101825260028602909201805461ffff811684526201000081046001600160501b031684860152600160601b90046001600160a01b031691830191909152600190810154606083015290835290920191016106be565b505050509050919050565b600a602052816000526040600020818154811061075457600080fd5b60009182526020909120600290910201805460019091015461ffff821693506201000082046001600160501b03169250600160601b9091046001600160a01b03169084565b60006001600160a01b038516156108065760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f742073656e6420746f6b656e7320746f207468697320636f6e746160448201526a6374206469726563746c7960a81b606482015260840161065b565b50630a85bd0160e11b95945050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260040161065b906133bc565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461088a5760405162461bcd60e51b815260040161065b906133bc565b601255565b6000546001600160a01b031633146108b95760405162461bcd60e51b815260040161065b906133bc565b601055565b60165460ff166109025760405162461bcd60e51b815260206004820152600f60248201526e14995cd8dd5948191a5cd8589b1959608a1b604482015260640161065b565b6000805b61ffff81168311156110545783838261ffff16818110610928576109286133f1565b905060200201602081019061093d9190613407565b60035460405163c1dc9a2360e01b815261ffff831660048201529193506001600160a01b03169063c1dc9a239060240160206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd919061342b565b610d17576040805160a0810182526000808252602080830182905282840182905260608301829052608083018290523382526006815283822061ffff8716835260059091529290205482549192918110610a1957610a196133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b031690820181905260018301546060830152600290920154608082015291503314610aa25760405162461bcd60e51b815260040161065b90613448565b6001600c6000828254610ab591906134a1565b90915550503360009081526006602052604081208054610ad7906001906134a1565b81548110610ae757610ae76133f1565b600091825260208083206040805160a081018252600394909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b03168584015260018201546060860152600290910154608085015233855260068352818520908916855260059092529092205482549193508392918110610b7957610b796133f1565b6000918252602080832084516003909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606086015160018301556080909501516002909101558782168352600581528383205485519092168352838320919091553382526006905220805480610c2757610c276134b8565b6000828152602080822060036000199094018481029091018381556001810184905560020183905590935561ffff871681526005909252604080832092909255549051635c46a7ef60e11b81526001600160a01b03919091169063b88d4fde90610c99903090339089906004016134ce565b600060405180830381600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b50506040805161ffff881681526000602082015260018183015290517fab52099d76e6354404c80fba7a339fdd3218863bdb460d2c487bf6abbaf1f4379350908190036060019150a15050611042565b604080516080810182526000808252602080830182905282840182905260608301829052338252600a815283822061ffff8716835260099091529290205482549192918110610d6857610d686133f1565b600091825260209182902060408051608081018252600293909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201819052600190920154606082015291503314610de75760405162461bcd60e51b815260040161065b90613448565b6001600d6000828254610dfa91906134a1565b9091555050336000908152600a602052604081208054610e1c906001906134a1565b81548110610e2c57610e2c6133f1565b6000918252602080832060408051608081018252600294909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b0316858401526001909101546060850152338552600a8352818520908916855260099092529092205482549193508392918110610eb457610eb46133f1565b6000918252602080832084516002909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606090950151600190910155878216835260098152838320548551909216835283832091909155338252600a905220805480610f5857610f586134b8565b600082815260208082206002600019909401938402018281556001018290559190925561ffff86168252600990526040812055610f9433611b92565b600354604051635c46a7ef60e11b81526001600160a01b039091169063b88d4fde90610fc8903090339089906004016134ce565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b50506040805161ffff881681526000602082015260018183015290517f2ecdce375be8f632a15c269a1e0111d69540c81c79b62de30fe41e6c7ca66a3b9350908190036060019150a150505b8061104c81613504565b915050610906565b50505050565b6000546001600160a01b031633146110845760405162461bcd60e51b815260040161065b906133bc565b600f55565b600b818154811061109957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000600d54600014156110c65750600090565b600d54600b546000916110d891611cc6565b61ffff1690506110e6611dbf565b600b81815481106110f9576110f96133f1565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b0316331461113e5760405162461bcd60e51b815260040161065b906133bc565b601155565b6000546001600160a01b0316331461116d5760405162461bcd60e51b815260040161065b906133bc565b6111776000611e37565b565b6000546001600160a01b031633146111a35760405162461bcd60e51b815260040161065b906133bc565b6016805460ff1916911515919091179055565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260040161065b906133bc565b6000838152600760205260409020546111fa816001613526565b60008581526007602052604090205560018215151415611054576110548385611e87565b6003546001600160a01b031633146112845760405162461bcd60e51b815260206004820152602360248201527f43616e206f6e6c792062652063616c6c6564206279206d696e7420636f6e74726044820152621858dd60ea1b606482015260840161065b565b600090815260076020526040902060019055565b6000546001600160a01b031633146112c25760405162461bcd60e51b815260040161065b906133bc565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461130e5760405162461bcd60e51b815260040161065b906133bc565b600061131a8383611cc6565b60008054600160a81b61ffff9390931692830261ffff60a81b199091161781559091505b818110156110545761134e611dbf565b806113588161353e565b91505061133e565b6000546001600160a01b0316331461138a5760405162461bcd60e51b815260040161065b906133bc565b60009182526002602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0381166000908152600660209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561072d5760008481526020908190206040805160a08101825260038602909201805461ffff811684526201000081046001600160501b031684860152600160601b90046001600160a01b0316918301919091526001808201546060840152600290910154608083015290835290920191016113f0565b6006602052816000526040600020818154811061148657600080fd5b600091825260209091206003909102018054600182015460029092015461ffff821694506201000082046001600160501b03169350600160601b9091046001600160a01b0316919085565b600054600160a01b900460ff161561151e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161065b565b601254601354101561156e5762015180600f546014544261153f91906134a1565b6115499190613559565b611553919061358e565b601360008282546115649190613526565b9091555050426014555b6000805b838110156116b8576003546001600160a01b031663c1dc9a2386868481811061159d5761159d6133f1565b90506020020160208101906115b29190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611624919061342b565b6116695761165885858381811061163d5761163d6133f1565b90506020020160208101906116529190613407565b846120ea565b6116629083613526565b91506116a6565b61169985858381811061167e5761167e6133f1565b90506020020160208101906116939190613407565b8461271c565b6116a39083613526565b91505b806116b08161353e565b915050611572565b50806116c45750505050565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b5050505050505050565b6008818154811061109957600080fd5b6001600160a01b03831633148061176057506003546001600160a01b031633145b6117bc5760405162461bcd60e51b815260206004820152602760248201527f596f7520646f206e6f7420686176652061207065726d697373696f6e20746f20604482015266191bc81d1a185d60ca1b606482015260840161065b565b6008805460018101825560009182527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b81811015611054576003546001600160a01b0316331461199d5760035433906001600160a01b0316636352211e858585818110611846576118466133f1565b905060200201602081019061185b9190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd91906135a2565b6001600160a01b0316146118f35760405162461bcd60e51b815260040161065b90613448565b6003546001600160a01b03166323b872dd3330868686818110611918576119186133f1565b905060200201602081019061192d9190613407565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505050506119d1565b8282828181106119af576119af6133f1565b90506020020160208101906119c49190613407565b61ffff166119d157611ae5565b6003546001600160a01b031663c1dc9a238484848181106119f4576119f46133f1565b9050602002016020810190611a099190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b919061342b565b15611ab557611ab084848484818110611a9657611a966133f1565b9050602002016020810190611aab9190613407565b612bcc565b611ae5565b611ae584848484818110611acb57611acb6133f1565b9050602002016020810190611ae09190613407565b612d71565b80611aef8161353e565b915050611807565b6000546001600160a01b03163314611b215760405162461bcd60e51b815260040161065b906133bc565b6001600160a01b038116611b865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065b565b611b8f81611e37565b50565b6001600160a01b0381166000908152600a602052604090205415611bb35750565b600b805460009190611bc7906001906134a1565b81548110611bd757611bd76133f1565b60009182526020822001546001600160a01b03169150805b600b54811015611c4b57836001600160a01b0316600b8281548110611c1657611c166133f1565b6000918252602090912001546001600160a01b03161415611c3957809150611c4b565b80611c438161353e565b915050611bef565b5081600b8281548110611c6057611c606133f1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480611c9f57611c9f6134b8565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b600080805b60078161ffff161015611d1b5760008054600160a81b900461ffff16815260026020526040902054611d07906001600160a01b03163183613526565b915080611d1381613504565b915050611ccb565b50600084611d2a6001436134a1565b6001546000546040805160208101959095529240928401929092526001600160601b031941606090811b82168186015244607486015233901b16609484015260a8830185905260c88301526001600160f01b0319600160a81b90910460f01b1660e882015260ea0160408051601f1981840301815291905280516020909101209050611db684826135bf565b95945050505050565b6001600060158282829054906101000a900461ffff16611ddf91906135d3565b92506101000a81548161ffff021916908361ffff1602179055506001806000828254611e0b9190613526565b90915550506000546006600160a81b90910461ffff161115611177576000805461ffff60a81b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216600090815260066020908152604080832084845260059092528220548154839291908110611ec157611ec16133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201526001820154606082015260029091015460808201526012546013549192501115611f935762015180600f54826060015183602001516001600160501b031642611f5c91906134a1565b611f669190613559565b611f709190613559565b611f7a919061358e565b9150806080015182611f8c9190613526565b9150611fec565b60145481602001516001600160501b03161115611fb35760009150611fec565b62015180600f5482602001516001600160501b0316601454611fd591906134a1565b611fdf9190613559565b611fe9919061358e565b91505b600083815260076020908152604080832054815160a08101835261ffff88168152426001600160501b038116828601526001600160a01b038a1682850181905260608301849052608083018990528652600685528386208987526005909552929094205483549294919391928110612066576120666133f1565b6000918252602091829020835160039092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff90941693909317939093179290921617815560608201516001820155608090910151600290910155505050505050565b33600090815260066020908152604080832061ffff861684526005909252822054815483929190811061211f5761211f6133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201819052600183015460608301526002909201546080820152915033146121a85760405162461bcd60e51b815260040161065b90613448565b8280156121cd575060105460208201516121cb906001600160501b0316426134a1565b105b1561222a5760405162461bcd60e51b815260206004820152602760248201527f4e65656420746f2077616974206d6f72652074696d652073696e6365206c61736044820152667420636c61696d60c81b606482015260840161065b565b60125460135410156122925762015180600f54826060015183602001516001600160501b03164261225b91906134a1565b6122659190613559565b61226f9190613559565b612279919061358e565b915080608001518261228b9190613526565b91506122eb565b60145481602001516001600160501b031611156122b257600091506122eb565b62015180600f5482602001516001600160501b03166014546122d491906134a1565b6122de9190613559565b6122e8919061358e565b91505b821561258d5760326123028561ffff166064611cc6565b61ffff16116123565761231482612f67565b6040805161ffff86168152602081018490527f51592b7e85a52281fc22648e5df6e7f5bb1e04980c61edcd9db8ce5a76d71d70910160405180910390a1600091505b61235e611dbf565b6001600c600082825461237191906134a1565b90915550503360009081526006602052604081208054612393906001906134a1565b815481106123a3576123a36133f1565b600091825260208083206040805160a081018252600394909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b03168584015260018201546060860152600290910154608085015233855260068352818520908a16855260059092529092205482549193508392918110612435576124356133f1565b6000918252602080832084516003909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff9788161793909317919091169190911782556060860151600183015560809095015160029091015588821683526005815283832054855190921683528383209190915533825260069052208054806124e3576124e36134b8565b6000828152602080822060036000199094018481029091018381556001810184905560020183905590935561ffff881681526005909252604080832092909255549051635c46a7ef60e11b81526001600160a01b03919091169063b88d4fde9061255590309033908a906004016134ce565b600060405180830381600087803b15801561256f57600080fd5b505af1158015612583573d6000803e3d6000fd5b50505050506126cb565b6125af6064601154846125a09190613559565b6125aa919061358e565b612f67565b606460115460646125c091906134a1565b6125ca9084613559565b6125d4919061358e565b61ffff8516600081815260076020908152604080832054815160a081018352858152426001600160501b03811682860152338285018190526060830184905260808301879052865260068552838620968652600590945291909320548454959750919492939092909190811061264c5761264c6133f1565b6000918252602091829020835160039092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff9094169390931793909317929092161781556060820151600182015560809091015160029091015550505b6040805161ffff8616815260208101849052841515918101919091527fab52099d76e6354404c80fba7a339fdd3218863bdb460d2c487bf6abbaf1f437906060015b60405180910390a15092915050565b6003546040516331a9108f60e11b815261ffff8416600482015260009130916001600160a01b0390911690636352211e9060240160206040518083038186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a091906135a2565b6001600160a01b0316146127c65760405162461bcd60e51b815260040161065b90613448565b336000908152600a6020908152604080832061ffff871684526009909252822054815481106127f7576127f76133f1565b600091825260209182902060408051608081018252600293909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b03169082018190526001909201546060820152915033146128765760405162461bcd60e51b815260040161065b90613448565b80602001516001600160501b031660155461289191906134a1565b91508215612ab2576001600d60008282546128ac91906134a1565b9091555050336000908152600a6020526040812080546128ce906001906134a1565b815481106128de576128de6133f1565b6000918252602080832060408051608081018252600294909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b0316858401526001909101546060850152338552600a8352818520908a16855260099092529092205482549193508392918110612966576129666133f1565b6000918252602080832084516002909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606090950151600190910155888216835260098152838320548551909216835283832091909155338252600a905220805480612a0a57612a0a6134b8565b600082815260208082206002600019909401938402018281556001018290559190925561ffff87168252600990526040812055612a4633611b92565b600354604051635c46a7ef60e11b81526001600160a01b039091169063b88d4fde90612a7a90309033908a906004016134ce565b600060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b5050505050612b86565b6040805160808101825261ffff86168082526015546001600160501b031660208084019190915233838501819052600060608501819052908152600a82528481209281526009909152929092205482549192918110612b1357612b136133f1565b6000918252602091829020835160029092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff9094169390931793909317929092161781556060909101516001909101555b6040805161ffff8616815260208101849052841515918101919091527f2ecdce375be8f632a15c269a1e0111d69540c81c79b62de30fe41e6c7ca66a3b9060600161270d565b6001600d6000828254612bdf9190613526565b90915550506001600160a01b0382166000908152600a6020526040812054612c4d57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0385161790555b6001600160a01b038084166000818152600a60208181526040808420805461ffff808b16808852600986528488208390559585528351608081018552958652601580546001600160501b039081168888019081528887019a8b52606089018d815260018087018855968b529790992097516002909402909701805498519951909a16600160601b026001600160601b039990971662010000026001600160601b031990981692909116919091179590951795909516929092178555519390920192909255905490517fb63b627c974e2e49662cbe7483456424812c95b6048065861b08af2eff4726b791612d6491869186916001600160a01b0393909316835261ffff919091166020830152604082015260600190565b60405180910390a1505050565b600054600160a01b900460ff1615612dbe5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161065b565b6012546013541015612e0e5762015180600f5460145442612ddf91906134a1565b612de99190613559565b612df3919061358e565b60136000828254612e049190613526565b9091555050426014555b6001600c6000828254612e219190613526565b909155505061ffff8082166000818152600760209081526040808320546001600160a01b038089168086526006808652848720805489895260058852868920819055918752855160a0810187529889526001600160501b03428181168b8a019081528b890195865260608c0188815260808d018c815260018088018755958d529a8c209c516003909602909c01805491519651909716600160601b026001600160601b039690931662010000026001600160601b031990911694909c16939093179a909a179290921698909817825595519581019590955591516002909401939093559151919290917fb63b627c974e2e49662cbe7483456424812c95b6048065861b08af2eff4726b791612f5991879187916001600160a01b0393909316835261ffff919091166020830152604082015260600190565b60405180910390a150505050565b600d54612f885780600e6000828254612f809190613526565b909155505050565b600d54600e54612f989083613526565b612fa2919061358e565b60156000828254612fb39190613526565b90915550506000600e5550565b6001600160a01b0381168114611b8f57600080fd5b600060208284031215612fe757600080fd5b8135612ff281612fc0565b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015613066578151805161ffff168552868101516001600160501b031687860152858101516001600160a01b0316868601526060908101519085015260809093019290850190600101613016565b5091979650505050505050565b6000806040838503121561308657600080fd5b823561309181612fc0565b946020939093013593505050565b6000806000806000608086880312156130b757600080fd5b85356130c281612fc0565b945060208601356130d281612fc0565b935060408601359250606086013567ffffffffffffffff808211156130f657600080fd5b818801915088601f83011261310a57600080fd5b81358181111561311957600080fd5b89602082850101111561312b57600080fd5b9699959850939650602001949392505050565b8015158114611b8f57600080fd5b60006020828403121561315e57600080fd5b8135612ff28161313e565b60006020828403121561317b57600080fd5b5035919050565b60008083601f84011261319457600080fd5b50813567ffffffffffffffff8111156131ac57600080fd5b6020830191508360208260051b85010111156131c757600080fd5b9250929050565b600080602083850312156131e157600080fd5b823567ffffffffffffffff8111156131f857600080fd5b61320485828601613182565b90969095509350505050565b60008060006060848603121561322557600080fd5b83359250602084013561323781612fc0565b915060408401356132478161313e565b809150509250925092565b6000806040838503121561326557600080fd5b50508035926020909101359150565b6000806040838503121561328757600080fd5b82359150602083013561329981612fc0565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015613066578151805161ffff168552868101516001600160501b031687860152858101516001600160a01b031686860152606080820151908601526080908101519085015260a090930192908501906001016132c1565b60008060006040848603121561333057600080fd5b833567ffffffffffffffff81111561334757600080fd5b61335386828701613182565b90945092505060208401356132478161313e565b60008060006040848603121561337c57600080fd5b833561338781612fc0565b9250602084013567ffffffffffffffff8111156133a357600080fd5b6133af86828701613182565b9497909650939450505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561341957600080fd5b813561ffff81168114612ff257600080fd5b60006020828403121561343d57600080fd5b8151612ff28161313e565b60208082526023908201527f54686973204e544620646f6573206e6f742062656c6f6e6720746f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156134b3576134b361348b565b500390565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03938416815291909216602082015261ffff909116604082015260806060820181905260009082015260a00190565b600061ffff8083168181141561351c5761351c61348b565b6001019392505050565b600082198211156135395761353961348b565b500190565b60006000198214156135525761355261348b565b5060010190565b60008160001904831182151516156135735761357361348b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261359d5761359d613578565b500490565b6000602082840312156135b457600080fd5b8151612ff281612fc0565b6000826135ce576135ce613578565b500690565b600061ffff8083168185168083038211156135f0576135f061348b565b0194935050505056fea2646970667358221220c6adb2f13f80cb256ed9b100656736340dc06e72569a753e426ace657d093adf64736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80637653100811610151578063bcacd0e6116100c3578063d47ab81511610087578063d47ab815146105bc578063de136acd146105dc578063e062404c146105ef578063e21f4cbe14610602578063e5e3e56014610615578063f2fde38b1461061e57600080fd5b8063bcacd0e614610521578063bed394301461052a578063c0c472c01461054a578063c3ddce4714610553578063c66f88ff146105a957600080fd5b80638fe6ebaf116101155780638fe6ebaf146104b657806392b24229146104c9578063ac28dbf1146104dc578063aee2fb2f146104ef578063b2596a67146104f8578063bc55276b1461051857600080fd5b806376531008146104635780637876ab0c146104765780637bab28911461047f5780638327dd8d146104925780638da5cb5b146104a557600080fd5b8063289a184f116101ea578063493e9789116101ae578063493e9789146104055780635c975abb1461040d578063606673751461041f578063607af3971461043f578063699abb3c14610448578063715018a61461045b57600080fd5b8063289a184f146103b05780632a61aad6146103b957806335901544146103cc57806339db714f146103d55780633abeb494146103f257600080fd5b8063150b7a0211610231578063150b7a021461033857806316c38b3c146103645780631aa491101461037757806320997a491461038a57806321c8da9a1461039d57600080fd5b806302621aa21461026e578063029d01c614610283578063090beec0146102b357806314d75184146102d357806314fd3b46146102ea575b600080fd5b61028161027c366004612fd5565b610631565b005b600454610296906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6102c66102c1366004612fd5565b610686565b6040516102aa9190612ff9565b6102dc60125481565b6040519081526020016102aa565b6102fd6102f8366004613073565b610738565b6040805161ffff90951685526001600160501b0390931660208501526001600160a01b039091169183019190915260608201526080016102aa565b61034b61034636600461309f565b610799565b6040516001600160e01b031990911681526020016102aa565b61028161037236600461314c565b610818565b610281610385366004613169565b610860565b610281610398366004613169565b61088f565b6102816103ab3660046131ce565b6108be565b6102dc60155481565b6102816103c7366004613169565b61105a565b6102dc60105481565b6016546103e29060ff1681565b60405190151581526020016102aa565b610296610400366004613169565b611089565b6102966110b3565b600054600160a01b900460ff166103e2565b6102dc61042d366004613169565b60096020526000908152604090205481565b6102dc60145481565b610281610456366004613169565b611114565b610281611143565b61028161047136600461314c565b611179565b6102dc60115481565b61028161048d366004613210565b6111b6565b6102816104a0366004613169565b61121e565b6000546001600160a01b0316610296565b6102816104c4366004612fd5565b611298565b6102816104d7366004613252565b6112e4565b6102816104ea366004613274565b611360565b6102dc600d5481565b6102dc610506366004613169565b60076020526000908152604090205481565b6102dc600c5481565b6102dc60135481565b61053d610538366004612fd5565b6113b8565b6040516102aa91906132a4565b6102dc600e5481565b610566610561366004613073565b61146a565b6040805161ffff90961686526001600160501b0390941660208601526001600160a01b03909216928401929092526060830191909152608082015260a0016102aa565b6102816105b736600461331b565b6114d1565b6102dc6105ca366004613169565b60056020526000908152604090205481565b6102966105ea366004613169565b61172f565b600354610296906001600160a01b031681565b610281610610366004613367565b61173f565b6102dc600f5481565b61028161062c366004612fd5565b611af7565b6000546001600160a01b031633146106645760405162461bcd60e51b815260040161065b906133bc565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600a60209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561072d5760008481526020908190206040805160808101825260028602909201805461ffff811684526201000081046001600160501b031684860152600160601b90046001600160a01b031691830191909152600190810154606083015290835290920191016106be565b505050509050919050565b600a602052816000526040600020818154811061075457600080fd5b60009182526020909120600290910201805460019091015461ffff821693506201000082046001600160501b03169250600160601b9091046001600160a01b03169084565b60006001600160a01b038516156108065760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f742073656e6420746f6b656e7320746f207468697320636f6e746160448201526a6374206469726563746c7960a81b606482015260840161065b565b50630a85bd0160e11b95945050505050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260040161065b906133bc565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461088a5760405162461bcd60e51b815260040161065b906133bc565b601255565b6000546001600160a01b031633146108b95760405162461bcd60e51b815260040161065b906133bc565b601055565b60165460ff166109025760405162461bcd60e51b815260206004820152600f60248201526e14995cd8dd5948191a5cd8589b1959608a1b604482015260640161065b565b6000805b61ffff81168311156110545783838261ffff16818110610928576109286133f1565b905060200201602081019061093d9190613407565b60035460405163c1dc9a2360e01b815261ffff831660048201529193506001600160a01b03169063c1dc9a239060240160206040518083038186803b15801561098557600080fd5b505afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd919061342b565b610d17576040805160a0810182526000808252602080830182905282840182905260608301829052608083018290523382526006815283822061ffff8716835260059091529290205482549192918110610a1957610a196133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b031690820181905260018301546060830152600290920154608082015291503314610aa25760405162461bcd60e51b815260040161065b90613448565b6001600c6000828254610ab591906134a1565b90915550503360009081526006602052604081208054610ad7906001906134a1565b81548110610ae757610ae76133f1565b600091825260208083206040805160a081018252600394909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b03168584015260018201546060860152600290910154608085015233855260068352818520908916855260059092529092205482549193508392918110610b7957610b796133f1565b6000918252602080832084516003909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606086015160018301556080909501516002909101558782168352600581528383205485519092168352838320919091553382526006905220805480610c2757610c276134b8565b6000828152602080822060036000199094018481029091018381556001810184905560020183905590935561ffff871681526005909252604080832092909255549051635c46a7ef60e11b81526001600160a01b03919091169063b88d4fde90610c99903090339089906004016134ce565b600060405180830381600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b50506040805161ffff881681526000602082015260018183015290517fab52099d76e6354404c80fba7a339fdd3218863bdb460d2c487bf6abbaf1f4379350908190036060019150a15050611042565b604080516080810182526000808252602080830182905282840182905260608301829052338252600a815283822061ffff8716835260099091529290205482549192918110610d6857610d686133f1565b600091825260209182902060408051608081018252600293909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201819052600190920154606082015291503314610de75760405162461bcd60e51b815260040161065b90613448565b6001600d6000828254610dfa91906134a1565b9091555050336000908152600a602052604081208054610e1c906001906134a1565b81548110610e2c57610e2c6133f1565b6000918252602080832060408051608081018252600294909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b0316858401526001909101546060850152338552600a8352818520908916855260099092529092205482549193508392918110610eb457610eb46133f1565b6000918252602080832084516002909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606090950151600190910155878216835260098152838320548551909216835283832091909155338252600a905220805480610f5857610f586134b8565b600082815260208082206002600019909401938402018281556001018290559190925561ffff86168252600990526040812055610f9433611b92565b600354604051635c46a7ef60e11b81526001600160a01b039091169063b88d4fde90610fc8903090339089906004016134ce565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b50506040805161ffff881681526000602082015260018183015290517f2ecdce375be8f632a15c269a1e0111d69540c81c79b62de30fe41e6c7ca66a3b9350908190036060019150a150505b8061104c81613504565b915050610906565b50505050565b6000546001600160a01b031633146110845760405162461bcd60e51b815260040161065b906133bc565b600f55565b600b818154811061109957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000600d54600014156110c65750600090565b600d54600b546000916110d891611cc6565b61ffff1690506110e6611dbf565b600b81815481106110f9576110f96133f1565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b0316331461113e5760405162461bcd60e51b815260040161065b906133bc565b601155565b6000546001600160a01b0316331461116d5760405162461bcd60e51b815260040161065b906133bc565b6111776000611e37565b565b6000546001600160a01b031633146111a35760405162461bcd60e51b815260040161065b906133bc565b6016805460ff1916911515919091179055565b6000546001600160a01b031633146111e05760405162461bcd60e51b815260040161065b906133bc565b6000838152600760205260409020546111fa816001613526565b60008581526007602052604090205560018215151415611054576110548385611e87565b6003546001600160a01b031633146112845760405162461bcd60e51b815260206004820152602360248201527f43616e206f6e6c792062652063616c6c6564206279206d696e7420636f6e74726044820152621858dd60ea1b606482015260840161065b565b600090815260076020526040902060019055565b6000546001600160a01b031633146112c25760405162461bcd60e51b815260040161065b906133bc565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461130e5760405162461bcd60e51b815260040161065b906133bc565b600061131a8383611cc6565b60008054600160a81b61ffff9390931692830261ffff60a81b199091161781559091505b818110156110545761134e611dbf565b806113588161353e565b91505061133e565b6000546001600160a01b0316331461138a5760405162461bcd60e51b815260040161065b906133bc565b60009182526002602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0381166000908152600660209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561072d5760008481526020908190206040805160a08101825260038602909201805461ffff811684526201000081046001600160501b031684860152600160601b90046001600160a01b0316918301919091526001808201546060840152600290910154608083015290835290920191016113f0565b6006602052816000526040600020818154811061148657600080fd5b600091825260209091206003909102018054600182015460029092015461ffff821694506201000082046001600160501b03169350600160601b9091046001600160a01b0316919085565b600054600160a01b900460ff161561151e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161065b565b601254601354101561156e5762015180600f546014544261153f91906134a1565b6115499190613559565b611553919061358e565b601360008282546115649190613526565b9091555050426014555b6000805b838110156116b8576003546001600160a01b031663c1dc9a2386868481811061159d5761159d6133f1565b90506020020160208101906115b29190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611624919061342b565b6116695761165885858381811061163d5761163d6133f1565b90506020020160208101906116529190613407565b846120ea565b6116629083613526565b91506116a6565b61169985858381811061167e5761167e6133f1565b90506020020160208101906116939190613407565b8461271c565b6116a39083613526565b91505b806116b08161353e565b915050611572565b50806116c45750505050565b600480546040516340c10f1960e01b81523392810192909252602482018390526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b5050505050505050565b6008818154811061109957600080fd5b6001600160a01b03831633148061176057506003546001600160a01b031633145b6117bc5760405162461bcd60e51b815260206004820152602760248201527f596f7520646f206e6f7420686176652061207065726d697373696f6e20746f20604482015266191bc81d1a185d60ca1b606482015260840161065b565b6008805460018101825560009182527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b81811015611054576003546001600160a01b0316331461199d5760035433906001600160a01b0316636352211e858585818110611846576118466133f1565b905060200201602081019061185b9190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cd91906135a2565b6001600160a01b0316146118f35760405162461bcd60e51b815260040161065b90613448565b6003546001600160a01b03166323b872dd3330868686818110611918576119186133f1565b905060200201602081019061192d9190613407565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505050506119d1565b8282828181106119af576119af6133f1565b90506020020160208101906119c49190613407565b61ffff166119d157611ae5565b6003546001600160a01b031663c1dc9a238484848181106119f4576119f46133f1565b9050602002016020810190611a099190613407565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160206040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b919061342b565b15611ab557611ab084848484818110611a9657611a966133f1565b9050602002016020810190611aab9190613407565b612bcc565b611ae5565b611ae584848484818110611acb57611acb6133f1565b9050602002016020810190611ae09190613407565b612d71565b80611aef8161353e565b915050611807565b6000546001600160a01b03163314611b215760405162461bcd60e51b815260040161065b906133bc565b6001600160a01b038116611b865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065b565b611b8f81611e37565b50565b6001600160a01b0381166000908152600a602052604090205415611bb35750565b600b805460009190611bc7906001906134a1565b81548110611bd757611bd76133f1565b60009182526020822001546001600160a01b03169150805b600b54811015611c4b57836001600160a01b0316600b8281548110611c1657611c166133f1565b6000918252602090912001546001600160a01b03161415611c3957809150611c4b565b80611c438161353e565b915050611bef565b5081600b8281548110611c6057611c606133f1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480611c9f57611c9f6134b8565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b600080805b60078161ffff161015611d1b5760008054600160a81b900461ffff16815260026020526040902054611d07906001600160a01b03163183613526565b915080611d1381613504565b915050611ccb565b50600084611d2a6001436134a1565b6001546000546040805160208101959095529240928401929092526001600160601b031941606090811b82168186015244607486015233901b16609484015260a8830185905260c88301526001600160f01b0319600160a81b90910460f01b1660e882015260ea0160408051601f1981840301815291905280516020909101209050611db684826135bf565b95945050505050565b6001600060158282829054906101000a900461ffff16611ddf91906135d3565b92506101000a81548161ffff021916908361ffff1602179055506001806000828254611e0b9190613526565b90915550506000546006600160a81b90910461ffff161115611177576000805461ffff60a81b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216600090815260066020908152604080832084845260059092528220548154839291908110611ec157611ec16133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201526001820154606082015260029091015460808201526012546013549192501115611f935762015180600f54826060015183602001516001600160501b031642611f5c91906134a1565b611f669190613559565b611f709190613559565b611f7a919061358e565b9150806080015182611f8c9190613526565b9150611fec565b60145481602001516001600160501b03161115611fb35760009150611fec565b62015180600f5482602001516001600160501b0316601454611fd591906134a1565b611fdf9190613559565b611fe9919061358e565b91505b600083815260076020908152604080832054815160a08101835261ffff88168152426001600160501b038116828601526001600160a01b038a1682850181905260608301849052608083018990528652600685528386208987526005909552929094205483549294919391928110612066576120666133f1565b6000918252602091829020835160039092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff90941693909317939093179290921617815560608201516001820155608090910151600290910155505050505050565b33600090815260066020908152604080832061ffff861684526005909252822054815483929190811061211f5761211f6133f1565b60009182526020918290206040805160a081018252600393909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b0316908201819052600183015460608301526002909201546080820152915033146121a85760405162461bcd60e51b815260040161065b90613448565b8280156121cd575060105460208201516121cb906001600160501b0316426134a1565b105b1561222a5760405162461bcd60e51b815260206004820152602760248201527f4e65656420746f2077616974206d6f72652074696d652073696e6365206c61736044820152667420636c61696d60c81b606482015260840161065b565b60125460135410156122925762015180600f54826060015183602001516001600160501b03164261225b91906134a1565b6122659190613559565b61226f9190613559565b612279919061358e565b915080608001518261228b9190613526565b91506122eb565b60145481602001516001600160501b031611156122b257600091506122eb565b62015180600f5482602001516001600160501b03166014546122d491906134a1565b6122de9190613559565b6122e8919061358e565b91505b821561258d5760326123028561ffff166064611cc6565b61ffff16116123565761231482612f67565b6040805161ffff86168152602081018490527f51592b7e85a52281fc22648e5df6e7f5bb1e04980c61edcd9db8ce5a76d71d70910160405180910390a1600091505b61235e611dbf565b6001600c600082825461237191906134a1565b90915550503360009081526006602052604081208054612393906001906134a1565b815481106123a3576123a36133f1565b600091825260208083206040805160a081018252600394909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b03168584015260018201546060860152600290910154608085015233855260068352818520908a16855260059092529092205482549193508392918110612435576124356133f1565b6000918252602080832084516003909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff9788161793909317919091169190911782556060860151600183015560809095015160029091015588821683526005815283832054855190921683528383209190915533825260069052208054806124e3576124e36134b8565b6000828152602080822060036000199094018481029091018381556001810184905560020183905590935561ffff881681526005909252604080832092909255549051635c46a7ef60e11b81526001600160a01b03919091169063b88d4fde9061255590309033908a906004016134ce565b600060405180830381600087803b15801561256f57600080fd5b505af1158015612583573d6000803e3d6000fd5b50505050506126cb565b6125af6064601154846125a09190613559565b6125aa919061358e565b612f67565b606460115460646125c091906134a1565b6125ca9084613559565b6125d4919061358e565b61ffff8516600081815260076020908152604080832054815160a081018352858152426001600160501b03811682860152338285018190526060830184905260808301879052865260068552838620968652600590945291909320548454959750919492939092909190811061264c5761264c6133f1565b6000918252602091829020835160039092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff9094169390931793909317929092161781556060820151600182015560809091015160029091015550505b6040805161ffff8616815260208101849052841515918101919091527fab52099d76e6354404c80fba7a339fdd3218863bdb460d2c487bf6abbaf1f437906060015b60405180910390a15092915050565b6003546040516331a9108f60e11b815261ffff8416600482015260009130916001600160a01b0390911690636352211e9060240160206040518083038186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a091906135a2565b6001600160a01b0316146127c65760405162461bcd60e51b815260040161065b90613448565b336000908152600a6020908152604080832061ffff871684526009909252822054815481106127f7576127f76133f1565b600091825260209182902060408051608081018252600293909302909101805461ffff811684526201000081046001600160501b031694840194909452600160601b9093046001600160a01b03169082018190526001909201546060820152915033146128765760405162461bcd60e51b815260040161065b90613448565b80602001516001600160501b031660155461289191906134a1565b91508215612ab2576001600d60008282546128ac91906134a1565b9091555050336000908152600a6020526040812080546128ce906001906134a1565b815481106128de576128de6133f1565b6000918252602080832060408051608081018252600294909402909101805461ffff80821686526201000082046001600160501b031686860152600160601b9091046001600160a01b0316858401526001909101546060850152338552600a8352818520908a16855260099092529092205482549193508392918110612966576129666133f1565b6000918252602080832084516002909302018054858301516040808801516001600160a01b0316600160601b026001600160601b036001600160501b0390931662010000026001600160601b031990941661ffff978816179390931791909116919091178255606090950151600190910155888216835260098152838320548551909216835283832091909155338252600a905220805480612a0a57612a0a6134b8565b600082815260208082206002600019909401938402018281556001018290559190925561ffff87168252600990526040812055612a4633611b92565b600354604051635c46a7ef60e11b81526001600160a01b039091169063b88d4fde90612a7a90309033908a906004016134ce565b600060405180830381600087803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b5050505050612b86565b6040805160808101825261ffff86168082526015546001600160501b031660208084019190915233838501819052600060608501819052908152600a82528481209281526009909152929092205482549192918110612b1357612b136133f1565b6000918252602091829020835160029092020180549284015160408501516001600160a01b0316600160601b026001600160601b036001600160501b0390921662010000026001600160601b031990951661ffff9094169390931793909317929092161781556060909101516001909101555b6040805161ffff8616815260208101849052841515918101919091527f2ecdce375be8f632a15c269a1e0111d69540c81c79b62de30fe41e6c7ca66a3b9060600161270d565b6001600d6000828254612bdf9190613526565b90915550506001600160a01b0382166000908152600a6020526040812054612c4d57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0385161790555b6001600160a01b038084166000818152600a60208181526040808420805461ffff808b16808852600986528488208390559585528351608081018552958652601580546001600160501b039081168888019081528887019a8b52606089018d815260018087018855968b529790992097516002909402909701805498519951909a16600160601b026001600160601b039990971662010000026001600160601b031990981692909116919091179590951795909516929092178555519390920192909255905490517fb63b627c974e2e49662cbe7483456424812c95b6048065861b08af2eff4726b791612d6491869186916001600160a01b0393909316835261ffff919091166020830152604082015260600190565b60405180910390a1505050565b600054600160a01b900460ff1615612dbe5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161065b565b6012546013541015612e0e5762015180600f5460145442612ddf91906134a1565b612de99190613559565b612df3919061358e565b60136000828254612e049190613526565b9091555050426014555b6001600c6000828254612e219190613526565b909155505061ffff8082166000818152600760209081526040808320546001600160a01b038089168086526006808652848720805489895260058852868920819055918752855160a0810187529889526001600160501b03428181168b8a019081528b890195865260608c0188815260808d018c815260018088018755958d529a8c209c516003909602909c01805491519651909716600160601b026001600160601b039690931662010000026001600160601b031990911694909c16939093179a909a179290921698909817825595519581019590955591516002909401939093559151919290917fb63b627c974e2e49662cbe7483456424812c95b6048065861b08af2eff4726b791612f5991879187916001600160a01b0393909316835261ffff919091166020830152604082015260600190565b60405180910390a150505050565b600d54612f885780600e6000828254612f809190613526565b909155505050565b600d54600e54612f989083613526565b612fa2919061358e565b60156000828254612fb39190613526565b90915550506000600e5550565b6001600160a01b0381168114611b8f57600080fd5b600060208284031215612fe757600080fd5b8135612ff281612fc0565b9392505050565b602080825282518282018190526000919060409081850190868401855b82811015613066578151805161ffff168552868101516001600160501b031687860152858101516001600160a01b0316868601526060908101519085015260809093019290850190600101613016565b5091979650505050505050565b6000806040838503121561308657600080fd5b823561309181612fc0565b946020939093013593505050565b6000806000806000608086880312156130b757600080fd5b85356130c281612fc0565b945060208601356130d281612fc0565b935060408601359250606086013567ffffffffffffffff808211156130f657600080fd5b818801915088601f83011261310a57600080fd5b81358181111561311957600080fd5b89602082850101111561312b57600080fd5b9699959850939650602001949392505050565b8015158114611b8f57600080fd5b60006020828403121561315e57600080fd5b8135612ff28161313e565b60006020828403121561317b57600080fd5b5035919050565b60008083601f84011261319457600080fd5b50813567ffffffffffffffff8111156131ac57600080fd5b6020830191508360208260051b85010111156131c757600080fd5b9250929050565b600080602083850312156131e157600080fd5b823567ffffffffffffffff8111156131f857600080fd5b61320485828601613182565b90969095509350505050565b60008060006060848603121561322557600080fd5b83359250602084013561323781612fc0565b915060408401356132478161313e565b809150509250925092565b6000806040838503121561326557600080fd5b50508035926020909101359150565b6000806040838503121561328757600080fd5b82359150602083013561329981612fc0565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015613066578151805161ffff168552868101516001600160501b031687860152858101516001600160a01b031686860152606080820151908601526080908101519085015260a090930192908501906001016132c1565b60008060006040848603121561333057600080fd5b833567ffffffffffffffff81111561334757600080fd5b61335386828701613182565b90945092505060208401356132478161313e565b60008060006040848603121561337c57600080fd5b833561338781612fc0565b9250602084013567ffffffffffffffff8111156133a357600080fd5b6133af86828701613182565b9497909650939450505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561341957600080fd5b813561ffff81168114612ff257600080fd5b60006020828403121561343d57600080fd5b8151612ff28161313e565b60208082526023908201527f54686973204e544620646f6573206e6f742062656c6f6e6720746f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000828210156134b3576134b361348b565b500390565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03938416815291909216602082015261ffff909116604082015260806060820181905260009082015260a00190565b600061ffff8083168181141561351c5761351c61348b565b6001019392505050565b600082198211156135395761353961348b565b500190565b60006000198214156135525761355261348b565b5060010190565b60008160001904831182151516156135735761357361348b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261359d5761359d613578565b500490565b6000602082840312156135b457600080fd5b8151612ff281612fc0565b6000826135ce576135ce613578565b500690565b600061ffff8083168185168083038211156135f0576135f061348b565b0194935050505056fea2646970667358221220c6adb2f13f80cb256ed9b100656736340dc06e72569a753e426ace657d093adf64736f6c63430008090033
Deployed Bytecode Sourcemap
37748:16439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40938:89;;;;;;:::i;:::-;;:::i;:::-;;38540:17;;;;;-1:-1:-1;;;;;38540:17:0;;;;;;-1:-1:-1;;;;;580:32:1;;;562:51;;550:2;535:18;38540:17:0;;;;;;;;41167:127;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39231:47::-;;;;;;;;;1772:25:1;;;1760:2;1745:18;39231:47:0;1626:177:1;38815:51:0;;;;;;:::i;:::-;;:::i;:::-;;;;2385:6:1;2373:19;;;2355:38;;-1:-1:-1;;;;;2429:35:1;;;2424:2;2409:18;;2402:63;-1:-1:-1;;;;;2501:32:1;;;2481:18;;;2474:60;;;;2565:2;2550:18;;2543:34;2342:3;2327:19;38815:51:0;2128:455:1;53874:308:0;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;3691:33:1;;;3673:52;;3661:2;3646:18;53874:308:0;3529:202:1;52207:86:0;;;;;;:::i;:::-;;:::i;40827:105::-;;;;;;:::i;:::-;;:::i;40603:108::-;;;;;;:::i;:::-;;:::i;49594:1938::-;;;;;;:::i;:::-;;:::i;39360:27::-;;;;;;40495:100;;;;;;:::i;:::-;;:::i;39145:41::-;;;;;;39478:33;;;;;;;;;;;;5266:14:1;;5259:22;5241:41;;5229:2;5214:18;39478:33:0;5101:187:1;38873:29:0;;;;;;:::i;:::-;;:::i;52303:287::-;;;:::i;40095:86::-;40142:4;40166:7;-1:-1:-1;;;40166:7:0;;;;40095:86;;38761:47;;;;;;:::i;:::-;;;;;;;;;;;;;;39323:30;;;;;;40719:102;;;;;;:::i;:::-;;:::i;4771:103::-;;;:::i;52096:::-;;;;;;:::i;:::-;;:::i;39193:31::-;;;;;;47360:267;;;;;;:::i;:::-;;:::i;47142:212::-;;;;;;:::i;:::-;;:::i;4120:87::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;4120:87;;40393:94;;;;;;:::i;:::-;;:::i;53589:277::-;;;;;;:::i;:::-;;:::i;53458:123::-;;;;;;:::i;:::-;;:::i;38974:33::-;;;;;;38675:42;;;;;;:::i;:::-;;;;;;;;;;;;;;38939:28;;;;;;39287:27;;;;;;41035:124;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39014:34::-;;;;;;38619:49;;;;;;:::i;:::-;;:::i;:::-;;;;7894:6:1;7882:19;;;7864:38;;-1:-1:-1;;;;;7938:35:1;;;7933:2;7918:18;;7911:63;-1:-1:-1;;;;;8010:32:1;;;7990:18;;;7983:60;;;;8074:2;8059:18;;8052:34;;;;8117:3;8102:19;;8095:35;7851:3;7836:19;38619:49:0;7609:527:1;43464:484:0;;;;;;:::i;:::-;;:::i;38566:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;38724:28;;;;;;:::i;:::-;;:::i;38514:19::-;;;;;-1:-1:-1;;;;;38514:19:0;;;41306:927;;;;;;:::i;:::-;;:::i;39101:37::-;;;;;;5029:201;;;;;;:::i;:::-;;:::i;40938:89::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;;;;;;;;;41000:4:::1;:19:::0;;-1:-1:-1;;;;;;41000:19:0::1;-1:-1:-1::0;;;;;41000:19:0;;;::::1;::::0;;;::::1;::::0;;40938:89::o;41167:127::-;-1:-1:-1;;;;;41269:17:0;;;;;;:11;:17;;;;;;;;41262:24;;;;;;;;;;;;;;;;;41230:19;;41262:24;;41269:17;;41262:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41262:24:0;;;;;-1:-1:-1;;;41262:24:0;;-1:-1:-1;;;;;41262:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41167:127;;;:::o;38815:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38815:51:0;;;-1:-1:-1;;;;;38815:51:0;;-1:-1:-1;;;;38815:51:0;;;-1:-1:-1;;;;;38815:51:0;;;:::o;53874:308::-;54020:6;-1:-1:-1;;;;;54047:20:0;;;54039:76;;;;-1:-1:-1;;;54039:76:0;;10071:2:1;54039:76:0;;;10053:21:1;10110:2;10090:18;;;10083:30;10149:34;10129:18;;;10122:62;-1:-1:-1;;;10200:18:1;;;10193:41;10251:19;;54039:76:0;9869:407:1;54039:76:0;-1:-1:-1;;;;53874:308:0;;;;;;;:::o;52207:86::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;52269:7:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;52269:16:0::1;-1:-1:-1::0;;;;52269:16:0;;::::1;::::0;;;::::1;::::0;;52207:86::o;40827:105::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;40895:19:::1;:29:::0;40827:105::o;40603:108::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;40672:20:::1;:31:::0;40603:108::o;49594:1938::-;49666:13;;;;49658:41;;;;-1:-1:-1;;;49658:41:0;;10483:2:1;49658:41:0;;;10465:21:1;10522:2;10502:18;;;10495:30;-1:-1:-1;;;10541:18:1;;;10534:45;10596:18;;49658:41:0;10281:339:1;49658:41:0;49710:14;;49735:1790;49754:19;;;;-1:-1:-1;49735:1790:0;;;49805:8;;49814:1;49805:11;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;49836:5;;:22;;-1:-1:-1;;;49836:22:0;;11208:6:1;11196:19;;49836:22:0;;;11178:38:1;49795:21:0;;-1:-1:-1;;;;;;49836:5:0;;:13;;11151:18:1;;49836:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49831:1683;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49939:10:0;49928:22;;:10;:22;;;;;49951:20;;;;;:11;:20;;;;;;;49928:44;;-1:-1:-1;;49928:22:0;:44;;;;;;:::i;:::-;;;;;;;;;;49920:52;;;;;;;;49928:44;;;;;;;;49920:52;;;;;;;;;;-1:-1:-1;;;;;49920:52:0;;;;;;;;-1:-1:-1;;;49920:52:0;;;-1:-1:-1;;;;;49920:52:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50016:10:0;50001:25;49993:73;;;;-1:-1:-1;;;49993:73:0;;;;;;;:::i;:::-;50107:1;50087:16;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;50169:10:0;50129:26;50158:22;;;:10;:22;;;;;50181:29;;:33;;50213:1;;50181:33;:::i;:::-;50158:57;;;;;;;;:::i;:::-;;;;;;;;;50129:86;;;;;;;;50158:57;;;;;;;;50129:86;;;;;;;;;;;-1:-1:-1;;;;;50129:86:0;;;;;-1:-1:-1;;;50129:86:0;;;-1:-1:-1;;;;;50129:86:0;;;;;;;;;;;;;;;;;;;;;;50245:10;50234:22;;:10;:22;;;;;50257:20;;;;;:11;:20;;;;;;;50234:44;;50129:86;;-1:-1:-1;50129:86:0;;50234:22;:44;;;;;;:::i;:::-;;;;;;;;;:56;;:44;;;;;:56;;;;;;;;;;;-1:-1:-1;;;;;50234:56:0;-1:-1:-1;;;50234:56:0;-1:-1:-1;;;;;;;;;;50234:56:0;;;;;-1:-1:-1;;;;;;50234:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50342:20;;;;;:11;:20;;;;;;50321:17;;50309:30;;;;;;;;:53;;;;50392:10;50381:22;;:10;:22;;;:28;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;50381:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;50435:20;;;;:11;:20;;;;;;;50428:27;;;;50476:5;:62;;-1:-1:-1;;;50476:62:0;;-1:-1:-1;;;;;50476:5:0;;;;;:22;;:62;;50507:4;;50514:10;;50447:7;;50476:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50564:29:0;;;13079:6:1;13067:19;;13049:38;;50585:1:0;13118:2:1;13103:18;;13096:34;50588:4:0;13146:18:1;;;13139:50;50564:29:0;;;;-1:-1:-1;50564:29:0;;;;13037:2:1;50564:29:0;;-1:-1:-1;50564:29:0;49860:749;;49831:1683;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50696:10:0;50684:23;;:11;:23;;;;;50708:21;;;;;:12;:21;;;;;;;50684:46;;-1:-1:-1;;50684:23:0;:46;;;;;;:::i;:::-;;;;;;;;;;50676:54;;;;;;;;50684:46;;;;;;;;50676:54;;;;;;;;;;-1:-1:-1;;;;;50676:54:0;;;;;;;;-1:-1:-1;;;50676:54:0;;;-1:-1:-1;;;;;50676:54:0;;;;;;;;;;;;;;;;;-1:-1:-1;50782:10:0;50767:25;50759:73;;;;-1:-1:-1;;;50759:73:0;;;;;;;:::i;:::-;50874:1;50853:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;50976:10:0;50934:27;50964:23;;;:11;:23;;;;;50988:30;;:34;;51021:1;;50988:34;:::i;:::-;50964:59;;;;;;;;:::i;:::-;;;;;;;;;50934:89;;;;;;;;50964:59;;;;;;;;50934:89;;;;;;;;;;;-1:-1:-1;;;;;50934:89:0;;;;;-1:-1:-1;;;50934:89:0;;;-1:-1:-1;;;;;50934:89:0;;;;;;;;;;;;;;51054:10;51042:23;;:11;:23;;;;;51066:21;;;;;:12;:21;;;;;;;51042:46;;50934:89;;-1:-1:-1;50934:89:0;;51042:23;:46;;;;;;:::i;:::-;;;;;;;;;:58;;:46;;;;;:58;;;;;;;;;;;-1:-1:-1;;;;;51042:58:0;-1:-1:-1;;;51042:58:0;-1:-1:-1;;;;;;;;;;51042:58:0;;;;;-1:-1:-1;;;;;;51042:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51153:21;;;;;:12;:21;;;;;;51132:17;;51119:31;;;;;;;;:55;;;;51205:10;51193:23;;:11;:23;;;:29;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;51193:29:0;;;;;;;;;;;;;;;;;;;;51248:21;;;;:12;:21;;;;;51241:28;51288:39;51316:10;51288:27;:39::i;:::-;51364:5;;:62;;-1:-1:-1;;;51364:62:0;;-1:-1:-1;;;;;51364:5:0;;;;:22;;:62;;51395:4;;51402:10;;51414:7;;51364:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51468:30:0;;;13079:6:1;13067:19;;13049:38;;51490:1:0;13118:2:1;13103:18;;13096:34;51493:4:0;13146:18:1;;;13139:50;51468:30:0;;;;-1:-1:-1;51468:30:0;;;;13037:2:1;51468:30:0;;-1:-1:-1;51468:30:0;50615:899;;49831:1683;49775:3;;;;:::i;:::-;;;;49735:1790;;;;49647:1885;49594:1938;;:::o;40495:100::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;40561:15:::1;:26:::0;40495:100::o;38873:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38873:29:0;;-1:-1:-1;38873:29:0;:::o;52303:287::-;52349:7;52373:17;;52394:1;52373:22;52369:47;;;-1:-1:-1;52412:3:0;;52303:287::o;52369:47::-;52468:17;;52487:12;:19;52429:16;;52448:59;;:19;:59::i;:::-;52429:78;;;;52518:19;:17;:19::i;:::-;52557:12;52570:11;52557:25;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;52557:25:0;;52303:287;-1:-1:-1;;52303:287:0:o;40719:102::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;40789:14:::1;:24:::0;40719:102::o;4771:103::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;4836:30:::1;4863:1;4836:18;:30::i;:::-;4771:103::o:0;52096:::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;52167:13:::1;:24:::0;;-1:-1:-1;;52167:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52096:103::o;47360:267::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;47458:17:::1;47478:15:::0;;;:6:::1;:15;::::0;;;;;47521:16:::1;47478:15:::0;47536:1:::1;47521:16;:::i;:::-;47504:15;::::0;;;:6:::1;:15;::::0;;;;:33;47562:4:::1;47553:13:::0;::::1;;;47550:70;;;47578:30;47591:7;47600;47578:12;:30::i;47142:212::-:0;47229:5;;-1:-1:-1;;;;;47229:5:0;47207:10;:28;47199:76;;;;-1:-1:-1;;;47199:76:0;;13737:2:1;47199:76:0;;;13719:21:1;13776:2;13756:18;;;13749:30;13815:34;13795:18;;;13788:62;-1:-1:-1;;;13866:18:1;;;13859:33;13909:19;;47199:76:0;13535:399:1;47199:76:0;47286:18;47317:15;;;:6;:15;;;;;47305:1;47317:29;;47142:212::o;40393:94::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;40457:5:::1;:22:::0;;-1:-1:-1;;;;;;40457:22:0::1;-1:-1:-1::0;;;;;40457:22:0;;;::::1;::::0;;;::::1;::::0;;40393:94::o;53589:277::-;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;53664:17:::1;53684:32;53704:5;53711:4;53684:19;:32::i;:::-;53727:12;:35:::0;;-1:-1:-1;;;53664:52:0::1;::::0;;;::::1;53727:35:::0;;::::1;-1:-1:-1::0;;;;53727:35:0;;::::1;;::::0;;53664:52;;-1:-1:-1;53773:86:0::1;53794:12;53790:1;:16;53773:86;;;53828:19;:17;:19::i;:::-;53808:3:::0;::::1;::::0;::::1;:::i;:::-;;;;53773:86;;53458:123:::0;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;53544:18:::1;::::0;;;:13:::1;:18;::::0;;;;;:29;;-1:-1:-1;;;;;;53544:29:0::1;-1:-1:-1::0;;;;;53544:29:0;;::::1;::::0;;;::::1;::::0;;53458:123::o;41035:124::-;-1:-1:-1;;;;;41135:16:0;;;;;;:10;:16;;;;;;;;41128:23;;;;;;;;;;;;;;;;;41097:18;;41128:23;;41135:16;;41128:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41128:23:0;;;;;-1:-1:-1;;;41128:23:0;;-1:-1:-1;;;;;41128:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38619:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38619:49:0;;;-1:-1:-1;;;;;38619:49:0;;-1:-1:-1;;;;38619:49:0;;;-1:-1:-1;;;;;38619:49:0;;;;:::o;43464:484::-;40142:4;40166:7;-1:-1:-1;;;40166:7:0;;;;40233:9;40225:38;;;;-1:-1:-1;;;40225:38:0;;14281:2:1;40225:38:0;;;14263:21:1;14320:2;14300:18;;;14293:30;-1:-1:-1;;;14339:18:1;;;14332:46;14395:18;;40225:38:0;14079:340:1;40225:38:0;51884:19:::1;;51866:15;;:37;51862:205;;;51998:6;51980:15;;51958:18;;51940:15;:36;;;;:::i;:::-;51939:56;;;;:::i;:::-;:65;;;;:::i;:::-;51920:15;;:84;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;52040:15:0::1;52019:18;:36:::0;51862:205:::1;43580:9:::2;43609:6:::0;43604:267:::2;43621:19:::0;;::::2;43604:267;;;43667:5;::::0;-1:-1:-1;;;;;43667:5:0::2;:13;43681:8:::0;;43690:1;43681:11;;::::2;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43667:26;::::0;-1:-1:-1;;;;;;43667:26:0::2;::::0;;;;;;11208:6:1;11196:19;;;43667:26:0::2;::::0;::::2;11178:38:1::0;11151:18;;43667:26:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43662:198;;43722:36;43737:8;;43746:1;43737:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43750:7;43722:14;:36::i;:::-;43714:44;::::0;;::::2;:::i;:::-;;;43662:198;;;43807:37;43823:8;;43832:1;43823:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43836:7;43807:15;:37::i;:::-;43799:45;::::0;;::::2;:::i;:::-;;;43662:198;43642:3:::0;::::2;::::0;::::2;:::i;:::-;;;;43604:267;;;-1:-1:-1::0;43885:9:0;43881:22:::2;;43896:7;43464:484:::0;;;:::o;43881:22::-:2;43913:4;::::0;;:27:::2;::::0;-1:-1:-1;;;43913:27:0;;43923:10:::2;43913:27:::0;;::::2;15028:51:1::0;;;;15095:18;;;15088:34;;;-1:-1:-1;;;;;43913:4:0::2;::::0;:9:::2;::::0;15001:18:1;;43913:27:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;43569:379;43464:484:::0;;;:::o;38724:28::-;;;;;;;;;;;;41306:927;-1:-1:-1;;;;;41405:21:0;;41416:10;41405:21;;:53;;-1:-1:-1;41452:5:0;;-1:-1:-1;;;;;41452:5:0;41430:10;:28;41405:53;41397:105;;;;-1:-1:-1;;;41397:105:0;;15335:2:1;41397:105:0;;;15317:21:1;15374:2;15354:18;;;15347:30;15413:34;15393:18;;;15386:62;-1:-1:-1;;;15464:18:1;;;15457:37;15511:19;;41397:105:0;15133:403:1;41397:105:0;41513:11;:25;;;;;;;-1:-1:-1;41513:25:0;;;;;;;-1:-1:-1;;;;;;41513:25:0;-1:-1:-1;;;;;41513:25:0;;;;;41549:677;41566:19;;;41549:677;;;41633:5;;-1:-1:-1;;;;;41633:5:0;41611:10;:28;41607:417;;41728:5;;41758:10;;-1:-1:-1;;;;;41728:5:0;:13;41742:8;;41751:1;41742:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41728:26;;-1:-1:-1;;;;;;41728:26:0;;;;;;;11208:6:1;11196:19;;;41728:26:0;;;11178:38:1;11151:18;;41728:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41728:40:0;;41720:88;;;;-1:-1:-1;;;41720:88:0;;;;;;;:::i;:::-;41827:5;;-1:-1:-1;;;;;41827:5:0;:18;41846:10;41866:4;41873:8;;41882:1;41873:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41827:58;;-1:-1:-1;;;;;;41827:58:0;;;;;;;-1:-1:-1;;;;;16248:15:1;;;41827:58:0;;;16230:34:1;16300:15;;;;16280:18;;;16273:43;16364:6;16352:19;16332:18;;;16325:47;16165:18;;41827:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41607:417;;;41911:8;;41920:1;41911:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:16;;41907:117;;41948:8;;41907:117;42044:5;;-1:-1:-1;;;;;42044:5:0;:13;42058:8;;42067:1;42058:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42044:26;;-1:-1:-1;;;;;;42044:26:0;;;;;;;11208:6:1;11196:19;;;42044:26:0;;;11178:38:1;11151:18;;42044:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42040:175;;;42091:34;42104:7;42113:8;;42122:1;42113:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42091:12;:34::i;:::-;42040:175;;;42166:33;42178:7;42187:8;;42196:1;42187:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;42166;:33::i;:::-;41587:3;;;;:::i;:::-;;;;41549:677;;5029:201;4166:7;4193:6;-1:-1:-1;;;;;4193:6:0;2924:10;4340:23;4332:68;;;;-1:-1:-1;;;4332:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5118:22:0;::::1;5110:73;;;::::0;-1:-1:-1;;;5110:73:0;;16585:2:1;5110:73:0::1;::::0;::::1;16567:21:1::0;16624:2;16604:18;;;16597:30;16663:34;16643:18;;;16636:62;-1:-1:-1;;;16714:18:1;;;16707:36;16760:19;;5110:73:0::1;16383:402:1::0;5110:73:0::1;5194:28;5213:8;5194:18;:28::i;:::-;5029:201:::0;:::o;48955:631::-;-1:-1:-1;;;;;49033:20:0;;;;;;:11;:20;;;;;:27;:32;49029:100;;48955:631;:::o;49029:100::-;49238:12;49251:19;;49218:17;;49238:12;49251:23;;49273:1;;49251:23;:::i;:::-;49238:37;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;49238:37:0;;-1:-1:-1;49238:37:0;49319:181;49340:12;:19;49336:23;;49319:181;;;49404:7;-1:-1:-1;;;;;49385:26:0;:12;49398:1;49385:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;49385:15:0;:26;49381:108;;;49448:1;49432:17;;49468:5;;49381:108;49361:3;;;;:::i;:::-;;;;49319:181;;;;49540:9;49510:12;49523:13;49510:27;;;;;;;;:::i;:::-;;;;;;;;;:39;;;;;-1:-1:-1;;;;;49510:39:0;;;;;-1:-1:-1;;;;;49510:39:0;;;;;;49560:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;49560:18:0;;;;;-1:-1:-1;;;;;;49560:18:0;;;;;;-1:-1:-1;;;48955:631:0:o;52757:693::-;52834:6;;;52878:102;52901:1;52897;:5;;;52878:102;;;52933:27;52947:12;;-1:-1:-1;;;52947:12:0;;;;52933:27;;:13;:27;;;;;;52924:44;;-1:-1:-1;;;;;52933:27:0;:35;52924:44;;:::i;:::-;;-1:-1:-1;52904:3:0;;;;:::i;:::-;;;;52878:102;;;-1:-1:-1;52992:11:0;53092:5;53130:16;53145:1;53130:12;:16;:::i;:::-;53307:12;;53342;;53053:320;;;;;;17129:19:1;;;;53120:27:0;;17164:12:1;;;17157:28;;;;-1:-1:-1;;;;;;53170:14:0;17273:2:1;17269:15;;;17265:24;;17251:12;;;17244:46;53207:16:0;17306:12:1;;;17299:28;53246:10:0;17362:15:1;;17358:24;17343:13;;;17336:47;17399:13;;;17392:29;;;17437:13;;;17430:29;-1:-1:-1;;;;;;;;;53342:12:0;;;17516:3:1;17494:16;;17475:13;;;17468:61;17545:13;;53053:320:0;;;-1:-1:-1;;53053:320:0;;;;;;;;;53025:363;;53053:320;53025:363;;;;;-1:-1:-1;53426:15:0;53435:6;53025:363;53426:15;:::i;:::-;53412:30;52757:693;-1:-1:-1;;;;;52757:693:0:o;52598:151::-;52663:1;52647:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52691:1;52675:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;52707:12:0;;52722:1;-1:-1:-1;;;52707:12:0;;;;;:16;52703:38;;;52740:1;52725:16;;-1:-1:-1;;;;52725:16:0;;;52598:151::o;5390:191::-;5464:16;5483:6;;-1:-1:-1;;;;;5500:17:0;;;-1:-1:-1;;;;;;5500:17:0;;;;;;5533:40;;5483:6;;;;;;;5533:40;;5464:16;5533:40;5453:128;5390:191;:::o;46127:1009::-;-1:-1:-1;;;;;46246:19:0;;46201:9;46246:19;;;:10;:19;;;;;;;;46266:21;;;:11;:21;;;;;;46246:42;;46201:9;;46246:19;46266:21;46246:42;;;;;;:::i;:::-;;;;;;;;;;46221:67;;;;;;;;46246:42;;;;;;;;46221:67;;;;;;;;;;-1:-1:-1;;;;;46221:67:0;;;;;;;;-1:-1:-1;;;46221:67:0;;;-1:-1:-1;;;;;46221:67:0;;;;;;;;;;;;;;;;;;;;;;46321:19;;46303:15;;46221:67;;-1:-1:-1;;46299:466:0;;;46432:6;46413:15;;46399:5;:11;;;46384:5;:11;;;-1:-1:-1;;;;;46366:29:0;:15;:29;;;;:::i;:::-;46365:45;;;;:::i;:::-;:63;;;;:::i;:::-;46364:74;;;;:::i;:::-;46357:81;;46461:5;:15;;;46453:23;;;;;:::i;:::-;;;46299:466;;;46512:18;;46498:5;:11;;;-1:-1:-1;;;;;46498:32:0;;46494:271;;;46554:1;46547:8;;46494:271;;;46689:6;46670:15;;46655:5;:11;;;-1:-1:-1;;;;;46634:32:0;:18;;:32;;;;:::i;:::-;46633:52;;;;:::i;:::-;46632:63;;;;:::i;:::-;46625:70;;46494:271;46775:16;46841;;;:6;:16;;;;;;;;;46913:199;;;;;;;;;;;;46801:15;-1:-1:-1;;;;;46913:199:0;;;;;;-1:-1:-1;;;;;46913:199:0;;;;;;;;;;;;;;;;;;;;46868:19;;:10;:19;;;;;46888:21;;;:11;:21;;;;;;;;46868:42;;46801:15;;46841:16;;46913:199;;46868:42;;;;;;:::i;:::-;;;;;;;;;;:244;;:42;;;;;:244;;;;;;;;;;-1:-1:-1;;;;;46868:244:0;-1:-1:-1;;;46868:244:0;-1:-1:-1;;;;;;;;;;46868:244:0;;;;;-1:-1:-1;;;;;;46868:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46127:1009:0:o;43956:2165::-;44086:10;44028:9;44075:22;;;:10;:22;;;;;;;;44098:20;;;;;:11;:20;;;;;;44075:44;;44028:9;;44075:22;44098:20;44075:44;;;;;;:::i;:::-;;;;;;;;;;44050:69;;;;;;;;44075:44;;;;;;;;44050:69;;;;;;;;;;-1:-1:-1;;;;;44050:69:0;;;;;;;;-1:-1:-1;;;44050:69:0;;;-1:-1:-1;;;;;44050:69:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44153:10:0;44138:25;44130:73;;;;-1:-1:-1;;;44130:73:0;;;;;;;:::i;:::-;44224:7;:63;;;;-1:-1:-1;44267:20:0;;44253:11;;;;44235:29;;-1:-1:-1;;;;;44235:29:0;:15;:29;:::i;:::-;:52;44224:63;44222:66;44214:118;;;;-1:-1:-1;;;44214:118:0;;18117:2:1;44214:118:0;;;18099:21:1;18156:2;18136:18;;;18129:30;18195:34;18175:18;;;18168:62;-1:-1:-1;;;18246:18:1;;;18239:37;18293:19;;44214:118:0;17915:403:1;44214:118:0;44367:19;;44349:15;;:37;44345:466;;;44478:6;44459:15;;44445:5;:11;;;44430:5;:11;;;-1:-1:-1;;;;;44412:29:0;:15;:29;;;;:::i;:::-;44411:45;;;;:::i;:::-;:63;;;;:::i;:::-;44410:74;;;;:::i;:::-;44403:81;;44507:5;:15;;;44499:23;;;;;:::i;:::-;;;44345:466;;;44558:18;;44544:5;:11;;;-1:-1:-1;;;;;44544:32:0;;44540:271;;;44600:1;44593:8;;44540:271;;;44735:6;44716:15;;44701:5;:11;;;-1:-1:-1;;;;;44680:32:0;:18;;:32;;;;:::i;:::-;44679:52;;;;:::i;:::-;44678:63;;;;:::i;:::-;44671:70;;44540:271;44825:7;44821:1240;;;44890:2;44853:33;44873:7;44853:33;;44882:3;44853:19;:33::i;:::-;:39;;;44849:173;;44913:13;44921:4;44913:7;:13::i;:::-;44950:29;;;18525:6:1;18513:19;;18495:38;;18564:2;18549:18;;18542:34;;;44950:29:0;;18468:18:1;44950:29:0;;;;;;;45005:1;44998:8;;44849:173;45036:19;:17;:19::i;:::-;45090:1;45070:16;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;45148:10:0;45108:26;45137:22;;;:10;:22;;;;;45160:29;;:33;;45192:1;;45160:33;:::i;:::-;45137:57;;;;;;;;:::i;:::-;;;;;;;;;45108:86;;;;;;;;45137:57;;;;;;;;45108:86;;;;;;;;;;;-1:-1:-1;;;;;45108:86:0;;;;;-1:-1:-1;;;45108:86:0;;;-1:-1:-1;;;;;45108:86:0;;;;;;;;;;;;;;;;;;;;;;45220:10;45209:22;;:10;:22;;;;;45232:20;;;;;:11;:20;;;;;;;45209:44;;45108:86;;-1:-1:-1;45108:86:0;;45209:22;:44;;;;;;:::i;:::-;;;;;;;;;:56;;:44;;;;;:56;;;;;;;;;;;-1:-1:-1;;;;;45209:56:0;-1:-1:-1;;;45209:56:0;-1:-1:-1;;;;;;;;;;45209:56:0;;;;;-1:-1:-1;;;;;;45209:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45313:20;;;;;:11;:20;;;;;;45292:17;;45280:30;;;;;;;;:53;;;;45359:10;45348:22;;:10;:22;;;:28;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;45348:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;45398:20;;;;:11;:20;;;;;;;45391:27;;;;45435:5;:62;;-1:-1:-1;;;45435:62:0;;-1:-1:-1;;;;;45435:5:0;;;;;:22;;:62;;45466:4;;45473:10;;45410:7;;45435:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44834:675;44821:1240;;;45530:38;45564:3;45546:14;;45539:4;:21;;;;:::i;:::-;45538:29;;;;:::i;:::-;45530:7;:38::i;:::-;45655:3;45636:14;;45630:3;:20;;;;:::i;:::-;45622:29;;:4;:29;:::i;:::-;45621:37;;;;:::i;:::-;45755:15;;;45687:16;45755:15;;;:6;:15;;;;;;;;;45832:202;;;;;;;;;;45713:15;-1:-1:-1;;;;;45832:202:0;;;;;;45868:10;45832:202;;;;;;;;;;;;;;;;;;45785:22;;:10;:22;;;;;45808:20;;;:11;:20;;;;;;;;45785:44;;45614;;-1:-1:-1;45713:15:0;;45755;;45832:202;;45785:22;;45808:20;45785:44;;;;;;:::i;:::-;;;;;;;;;;:249;;:44;;;;;:249;;;;;;;;;;-1:-1:-1;;;;;45785:249:0;-1:-1:-1;;;45785:249:0;-1:-1:-1;;;;;;;;;;45785:249:0;;;;;-1:-1:-1;;;;;;45785:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44821:1240:0;46078:35;;;13079:6:1;13067:19;;13049:38;;13118:2;13103:18;;13096:34;;;13173:14;;13166:22;13146:18;;;13139:50;;;;46078:35:0;;13037:2:1;13022:18;46078:35:0;;;;;;;;44039:2082;43956:2165;;;;:::o;47633:1314::-;47736:5;;:22;;-1:-1:-1;;;47736:22:0;;11208:6:1;11196:19;;47736:22:0;;;11178:38:1;47706:9:0;;47770:4;;-1:-1:-1;;;;;47736:5:0;;;;:13;;11151:18:1;;47736:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47736:39:0;;47728:87;;;;-1:-1:-1;;;47728:87:0;;;;;;;:::i;:::-;47866:10;47828:23;47854;;;:11;:23;;;;;;;;47878:21;;;;;:12;:21;;;;;;47854:46;;;;;;;;:::i;:::-;;;;;;;;;;47828:72;;;;;;;;47854:46;;;;;;;;47828:72;;;;;;;;;;-1:-1:-1;;;;;47828:72:0;;;;;;;;-1:-1:-1;;;47828:72:0;;;-1:-1:-1;;;;;47828:72:0;;;;;;;;;;;;;;;;;-1:-1:-1;47936:10:0;47921:25;47913:73;;;;-1:-1:-1;;;47913:73:0;;;;;;;:::i;:::-;48019:5;:11;;;-1:-1:-1;;;;;48005:25:0;:11;;:25;;;;:::i;:::-;47997:34;;48048:7;48044:844;;;48093:1;48072:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;48187:10:0;48145:27;48175:23;;;:11;:23;;;;;48199:30;;:34;;48232:1;;48199:34;:::i;:::-;48175:59;;;;;;;;:::i;:::-;;;;;;;;;48145:89;;;;;;;;48175:59;;;;;;;;48145:89;;;;;;;;;;;-1:-1:-1;;;;;48145:89:0;;;;;-1:-1:-1;;;48145:89:0;;;-1:-1:-1;;;;;48145:89:0;;;;;;;;;;;;;;48261:10;48249:23;;:11;:23;;;;;48273:21;;;;;:12;:21;;;;;;;48249:46;;48145:89;;-1:-1:-1;48145:89:0;;48249:23;:46;;;;;;:::i;:::-;;;;;;;;;:58;;:46;;;;;:58;;;;;;;;;;;-1:-1:-1;;;;;48249:58:0;-1:-1:-1;;;48249:58:0;-1:-1:-1;;;;;;;;;;48249:58:0;;;;;-1:-1:-1;;;;;;48249:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48356:21;;;;;:12;:21;;;;;;48335:17;;48322:31;;;;;;;;:55;;;;48404:10;48392:23;;:11;:23;;;:29;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;48392:29:0;;;;;;;;;;;;;;;;;;;;48443:21;;;;:12;:21;;;;;48436:28;48479:39;48507:10;48479:27;:39::i;:::-;48535:5;;:62;;-1:-1:-1;;;48535:62:0;;-1:-1:-1;;;;;48535:5:0;;;;:22;;:62;;48566:4;;48573:10;;48585:7;;48535:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48057:552;48044:844;;;48679:182;;;;;;;;;;;;;;48802:11;;-1:-1:-1;;;;;48679:182:0;;;;;;;;;48716:10;48679:182;;;;;;-1:-1:-1;48679:182:0;;;;;;48630:23;;;:11;:23;;;;;48654:21;;;:12;:21;;;;;;;;48630:46;;48679:182;;48630:23;:46;;;;;;:::i;:::-;;;;;;;;;;:231;;:46;;;;;:231;;;;;;;;;;-1:-1:-1;;;;;48630:231:0;-1:-1:-1;;;48630:231:0;-1:-1:-1;;;;;;;;;;48630:231:0;;;;;-1:-1:-1;;;;;;48630:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48044:844;48903:36;;;13079:6:1;13067:19;;13049:38;;13118:2;13103:18;;13096:34;;;13173:14;;13166:22;13146:18;;;13139:50;;;;48903:36:0;;13037:2:1;13022:18;48903:36:0;12847:348:1;42806:650:0;42902:1;42881:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;43029:20:0;;42914:14;43029:20;;;:11;:20;;;;;:27;43025:91;;43078:12;:26;;;;;;;-1:-1:-1;43078:26:0;;;;;;;;-1:-1:-1;;;;;;43078:26:0;-1:-1:-1;;;;;43078:26:0;;;;;43025:91;-1:-1:-1;;;;;43152:20:0;;;;;;;:11;:20;;;;;;;;:27;;43128:21;;;;;;;:12;:21;;;;;:51;;;43190:20;;;43216:171;;;;;;;;;;43324:11;;;-1:-1:-1;;;;;43216:171:0;;;;;;;;;;;;;;;;;;;;;43190:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43190:198:0;-1:-1:-1;;;;;43190:198:0;;;;;;-1:-1:-1;;;;;;43190:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43436:11;;43406:42;;;;;;43164:7;;43141;;-1:-1:-1;;;;;19150:32:1;;;;19132:51;;19231:6;19219:19;;;;19214:2;19199:18;;19192:47;19270:2;19255:18;;19248:34;19120:2;19105:18;;18932:356;43406:42:0;;;;;;;;42870:586;42806:650;;:::o;42241:555::-;40142:4;40166:7;-1:-1:-1;;;40166:7:0;;;;40233:9;40225:38;;;;-1:-1:-1;;;40225:38:0;;14281:2:1;40225:38:0;;;14263:21:1;14320:2;14300:18;;;14293:30;-1:-1:-1;;;14339:18:1;;;14332:46;14395:18;;40225:38:0;14079:340:1;40225:38:0;51884:19:::1;;51866:15;;:37;51862:205;;;51998:6;51980:15;;51958:18;;51940:15;:36;;;;:::i;:::-;51939:56;;;;:::i;:::-;:65;;;;:::i;:::-;51920:15;;:84;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;52040:15:0::1;52019:18;:36:::0;51862:205:::1;42365:1:::2;42345:16;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;42388:15:0::2;::::0;;::::2;42377:10;42388:15:::0;;;:6:::2;:15;::::0;;;;;;;;-1:-1:-1;;;;;42466:19:0;;::::2;::::0;;;:10:::2;:19:::0;;;;;;:26;;42443:20;;;:11:::2;:20:::0;;;;;:49;;;42503:19;;;42528:197;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;42635:15:0::2;42528:197:::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;;;;;;;42503:223:::2;::::0;;::::2;::::0;;;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;::::2;-1:-1:-1::0;;;42503:223:0::2;-1:-1:-1::0;;;;;42503:223:0;;;::::2;::::0;::::2;-1:-1:-1::0;;;;;;42503:223:0;;;;;;::::2;::::0;;;;;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;;;;;::::2;::::0;;;;;;::::2;::::0;;::::2;::::0;;;;42742:46;;42388:15;;42377:10;;42742:46:::2;::::0;::::2;::::0;42477:7;;42395;;-1:-1:-1;;;;;19150:32:1;;;;19132:51;;19231:6;19219:19;;;;19214:2;19199:18;;19192:47;19270:2;19255:18;;19248:34;19120:2;19105:18;;18932:356;42742:46:0::2;;;;;;;;42334:462;;42241:555:::0;;:::o;51540:274::-;51595:17;;51591:105;;51656:7;51634:18;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;;51540:274:0:o;51591:105::-;51756:17;;51734:18;;51724:28;;:7;:28;:::i;:::-;51723:50;;;;:::i;:::-;51708:11;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;51805:1:0;51784:18;:22;-1:-1:-1;51540:274:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;624:997::-;851:2;903:21;;;973:13;;876:18;;;995:22;;;822:4;;851:2;1036;;1054:18;;;;1095:15;;;822:4;1138:457;1152:6;1149:1;1146:13;1138:457;;;1211:13;;1253:9;;1264:6;1249:22;1237:35;;1316:11;;;1310:18;-1:-1:-1;;;;;1306:47:1;1292:12;;;1285:69;1398:11;;;1392:18;-1:-1:-1;;;;;1388:44:1;1374:12;;;1367:66;1456:4;1500:11;;;1494:18;1480:12;;;1473:40;1542:4;1533:14;;;;1570:15;;;;1429:1;1167:9;1138:457;;;-1:-1:-1;1612:3:1;;624:997;-1:-1:-1;;;;;;;624:997:1:o;1808:315::-;1876:6;1884;1937:2;1925:9;1916:7;1912:23;1908:32;1905:52;;;1953:1;1950;1943:12;1905:52;1992:9;1979:23;2011:31;2036:5;2011:31;:::i;:::-;2061:5;2113:2;2098:18;;;;2085:32;;-1:-1:-1;;;1808:315:1:o;2588:936::-;2685:6;2693;2701;2709;2717;2770:3;2758:9;2749:7;2745:23;2741:33;2738:53;;;2787:1;2784;2777:12;2738:53;2826:9;2813:23;2845:31;2870:5;2845:31;:::i;:::-;2895:5;-1:-1:-1;2952:2:1;2937:18;;2924:32;2965:33;2924:32;2965:33;:::i;:::-;3017:7;-1:-1:-1;3071:2:1;3056:18;;3043:32;;-1:-1:-1;3126:2:1;3111:18;;3098:32;3149:18;3179:14;;;3176:34;;;3206:1;3203;3196:12;3176:34;3244:6;3233:9;3229:22;3219:32;;3289:7;3282:4;3278:2;3274:13;3270:27;3260:55;;3311:1;3308;3301:12;3260:55;3351:2;3338:16;3377:2;3369:6;3366:14;3363:34;;;3393:1;3390;3383:12;3363:34;3438:7;3433:2;3424:6;3420:2;3416:15;3412:24;3409:37;3406:57;;;3459:1;3456;3449:12;3406:57;2588:936;;;;-1:-1:-1;2588:936:1;;-1:-1:-1;3490:2:1;3482:11;;3512:6;2588:936;-1:-1:-1;;;2588:936:1:o;3736:118::-;3822:5;3815:13;3808:21;3801:5;3798:32;3788:60;;3844:1;3841;3834:12;3859:241;3915:6;3968:2;3956:9;3947:7;3943:23;3939:32;3936:52;;;3984:1;3981;3974:12;3936:52;4023:9;4010:23;4042:28;4064:5;4042:28;:::i;4105:180::-;4164:6;4217:2;4205:9;4196:7;4192:23;4188:32;4185:52;;;4233:1;4230;4223:12;4185:52;-1:-1:-1;4256:23:1;;4105:180;-1:-1:-1;4105:180:1:o;4290:366::-;4352:8;4362:6;4416:3;4409:4;4401:6;4397:17;4393:27;4383:55;;4434:1;4431;4424:12;4383:55;-1:-1:-1;4457:20:1;;4500:18;4489:30;;4486:50;;;4532:1;4529;4522:12;4486:50;4569:4;4561:6;4557:17;4545:29;;4629:3;4622:4;4612:6;4609:1;4605:14;4597:6;4593:27;4589:38;4586:47;4583:67;;;4646:1;4643;4636:12;4583:67;4290:366;;;;;:::o;4661:435::-;4746:6;4754;4807:2;4795:9;4786:7;4782:23;4778:32;4775:52;;;4823:1;4820;4813:12;4775:52;4863:9;4850:23;4896:18;4888:6;4885:30;4882:50;;;4928:1;4925;4918:12;4882:50;4967:69;5028:7;5019:6;5008:9;5004:22;4967:69;:::i;:::-;5055:8;;4941:95;;-1:-1:-1;4661:435:1;-1:-1:-1;;;;4661:435:1:o;5501:450::-;5575:6;5583;5591;5644:2;5632:9;5623:7;5619:23;5615:32;5612:52;;;5660:1;5657;5650:12;5612:52;5696:9;5683:23;5673:33;;5756:2;5745:9;5741:18;5728:32;5769:31;5794:5;5769:31;:::i;:::-;5819:5;-1:-1:-1;5876:2:1;5861:18;;5848:32;5889:30;5848:32;5889:30;:::i;:::-;5938:7;5928:17;;;5501:450;;;;;:::o;5956:248::-;6024:6;6032;6085:2;6073:9;6064:7;6060:23;6056:32;6053:52;;;6101:1;6098;6091:12;6053:52;-1:-1:-1;;6124:23:1;;;6194:2;6179:18;;;6166:32;;-1:-1:-1;5956:248:1:o;6209:315::-;6277:6;6285;6338:2;6326:9;6317:7;6313:23;6309:32;6306:52;;;6354:1;6351;6344:12;6306:52;6390:9;6377:23;6367:33;;6450:2;6439:9;6435:18;6422:32;6463:31;6488:5;6463:31;:::i;:::-;6513:5;6503:15;;;6209:315;;;;;:::o;6529:1075::-;6754:2;6806:21;;;6876:13;;6779:18;;;6898:22;;;6725:4;;6754:2;6939;;6957:18;;;;6998:15;;;6725:4;7041:537;7055:6;7052:1;7049:13;7041:537;;;7114:13;;7156:9;;7167:6;7152:22;7140:35;;7219:11;;;7213:18;-1:-1:-1;;;;;7209:47:1;7195:12;;;7188:69;7301:11;;;7295:18;-1:-1:-1;;;;;7291:44:1;7277:12;;;7270:66;7359:4;7403:11;;;7397:18;7383:12;;;7376:40;7439:4;7483:11;;;7477:18;7463:12;;;7456:40;7323:3;7516:14;;;;7553:15;;;;7332:1;7070:9;7041:537;;8141:564;8232:6;8240;8248;8301:2;8289:9;8280:7;8276:23;8272:32;8269:52;;;8317:1;8314;8307:12;8269:52;8357:9;8344:23;8390:18;8382:6;8379:30;8376:50;;;8422:1;8419;8412:12;8376:50;8461:69;8522:7;8513:6;8502:9;8498:22;8461:69;:::i;:::-;8549:8;;-1:-1:-1;8435:95:1;-1:-1:-1;;8634:2:1;8619:18;;8606:32;8647:28;8606:32;8647:28;:::i;8933:570::-;9027:6;9035;9043;9096:2;9084:9;9075:7;9071:23;9067:32;9064:52;;;9112:1;9109;9102:12;9064:52;9151:9;9138:23;9170:31;9195:5;9170:31;:::i;:::-;9220:5;-1:-1:-1;9276:2:1;9261:18;;9248:32;9303:18;9292:30;;9289:50;;;9335:1;9332;9325:12;9289:50;9374:69;9435:7;9426:6;9415:9;9411:22;9374:69;:::i;:::-;8933:570;;9462:8;;-1:-1:-1;9348:95:1;;-1:-1:-1;;;;8933:570:1:o;9508:356::-;9710:2;9692:21;;;9729:18;;;9722:30;9788:34;9783:2;9768:18;;9761:62;9855:2;9840:18;;9508:356::o;10625:127::-;10686:10;10681:3;10677:20;10674:1;10667:31;10717:4;10714:1;10707:15;10741:4;10738:1;10731:15;10757:272;10815:6;10868:2;10856:9;10847:7;10843:23;10839:32;10836:52;;;10884:1;10881;10874:12;10836:52;10923:9;10910:23;10973:6;10966:5;10962:18;10955:5;10952:29;10942:57;;10995:1;10992;10985:12;11227:245;11294:6;11347:2;11335:9;11326:7;11322:23;11318:32;11315:52;;;11363:1;11360;11353:12;11315:52;11395:9;11389:16;11414:28;11436:5;11414:28;:::i;11477:399::-;11679:2;11661:21;;;11718:2;11698:18;;;11691:30;11757:34;11752:2;11737:18;;11730:62;-1:-1:-1;;;11823:2:1;11808:18;;11801:33;11866:3;11851:19;;11477:399::o;11881:127::-;11942:10;11937:3;11933:20;11930:1;11923:31;11973:4;11970:1;11963:15;11997:4;11994:1;11987:15;12013:125;12053:4;12081:1;12078;12075:8;12072:34;;;12086:18;;:::i;:::-;-1:-1:-1;12123:9:1;;12013:125::o;12143:127::-;12204:10;12199:3;12195:20;12192:1;12185:31;12235:4;12232:1;12225:15;12259:4;12256:1;12249:15;12275:567;-1:-1:-1;;;;;12597:15:1;;;12579:34;;12649:15;;;;12644:2;12629:18;;12622:43;12713:6;12701:19;;;12696:2;12681:18;;12674:47;12757:3;12752:2;12737:18;;12730:31;;;-1:-1:-1;12777:19:1;;;12770:30;12559:3;12817:19;;12275:567::o;13200:197::-;13238:3;13266:6;13307:2;13300:5;13296:14;13334:2;13325:7;13322:15;13319:41;;;13340:18;;:::i;:::-;13389:1;13376:15;;13200:197;-1:-1:-1;;;13200:197:1:o;13402:128::-;13442:3;13473:1;13469:6;13466:1;13463:13;13460:39;;;13479:18;;:::i;:::-;-1:-1:-1;13515:9:1;;13402:128::o;13939:135::-;13978:3;-1:-1:-1;;13999:17:1;;13996:43;;;14019:18;;:::i;:::-;-1:-1:-1;14066:1:1;14055:13;;13939:135::o;14424:168::-;14464:7;14530:1;14526;14522:6;14518:14;14515:1;14512:21;14507:1;14500:9;14493:17;14489:45;14486:71;;;14537:18;;:::i;:::-;-1:-1:-1;14577:9:1;;14424:168::o;14597:127::-;14658:10;14653:3;14649:20;14646:1;14639:31;14689:4;14686:1;14679:15;14713:4;14710:1;14703:15;14729:120;14769:1;14795;14785:35;;14800:18;;:::i;:::-;-1:-1:-1;14834:9:1;;14729:120::o;15735:251::-;15805:6;15858:2;15846:9;15837:7;15833:23;15829:32;15826:52;;;15874:1;15871;15864:12;15826:52;15906:9;15900:16;15925:31;15950:5;15925:31;:::i;17569:112::-;17601:1;17627;17617:35;;17632:18;;:::i;:::-;-1:-1:-1;17666:9:1;;17569:112::o;17686:224::-;17725:3;17753:6;17786:2;17783:1;17779:10;17816:2;17813:1;17809:10;17847:3;17843:2;17839:12;17834:3;17831:21;17828:47;;;17855:18;;:::i;:::-;17891:13;;17686:224;-1:-1:-1;;;;17686:224:1:o
Swarm Source
ipfs://c6adb2f13f80cb256ed9b100656736340dc06e72569a753e426ace657d093adf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.