Overview
CRO Balance
0 CRO
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 9,738 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 16082396 | 9 days ago | IN | 0 CRO | 0.23341739 | ||||
Set Approval For... | 16075272 | 9 days ago | IN | 0 CRO | 0.23244898 | ||||
Safe Transfer Fr... | 16060186 | 10 days ago | IN | 0 CRO | 0.63850829 | ||||
Set Approval For... | 16013855 | 13 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15947408 | 17 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15909899 | 20 days ago | IN | 0 CRO | 0.23341739 | ||||
Safe Transfer Fr... | 15855032 | 23 days ago | IN | 0 CRO | 0.50451635 | ||||
Safe Transfer Fr... | 15854905 | 23 days ago | IN | 0 CRO | 0.54271326 | ||||
Safe Transfer Fr... | 15854714 | 23 days ago | IN | 0 CRO | 0.50451635 | ||||
Set Approval For... | 15834927 | 25 days ago | IN | 0 CRO | 0.157329 | ||||
Safe Transfer Fr... | 15776967 | 29 days ago | IN | 0 CRO | 1.2804679 | ||||
Set Approval For... | 15767772 | 29 days ago | IN | 0 CRO | 0.23348675 | ||||
Set Approval For... | 15763703 | 29 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15470008 | 49 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15467840 | 49 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15411094 | 52 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15386007 | 54 days ago | IN | 0 CRO | 0.23124435 | ||||
Set Approval For... | 15291358 | 60 days ago | IN | 0 CRO | 0.23354735 | ||||
Set Approval For... | 15290584 | 60 days ago | IN | 0 CRO | 0.23239013 | ||||
Set Approval For... | 15271166 | 62 days ago | IN | 0 CRO | 0.23347797 | ||||
Safe Transfer Fr... | 15205782 | 66 days ago | IN | 0 CRO | 0.49533296 | ||||
Safe Transfer Fr... | 15176899 | 68 days ago | IN | 0 CRO | 0.41350915 | ||||
Safe Transfer Fr... | 15176867 | 68 days ago | IN | 0 CRO | 0.49986415 | ||||
Set Approval For... | 15100527 | 73 days ago | IN | 0 CRO | 0.23347797 | ||||
Set Approval For... | 15084344 | 74 days ago | IN | 0 CRO | 0.23347797 |
Loading...
Loading
Contract Name:
Trooprz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-07-03 */ // SPDX-License-Identifier: MIT // 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); } // 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; } // 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); } // 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); } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) // pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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; } } // 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); } } // 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; } } // OpenZeppelin Contracts v4.4.1 (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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) // pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) // pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) // pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) // pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // 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); } } // Root file: contracts\Trooprz.sol pragma solidity ^0.8.7; /* Troorpz: https://trooprz.army Art by: Elkay Community By: CryptoTroopr Contract by: Astra "We've got your back!!!" */ contract Trooprz is ERC721Enumerable, Pausable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; // Maximum tokens will be 5555 | These are the maximum limits for each drop. uint256 public _mint2Tokens = 5540; // + 15 airdrops = 5555 uint256 public _mint1Tokens = 2212; // + 10 airdrops = 2222 uint256 public _price = 450000000000000000000; // 450 CRO // Mappings mapping (address => bool) private _mint1whitelist; mapping (address => bool) public _mintedInitial; mapping (address => uint256) public _presale1Mints; // Settings bool public _presale1Active = false; bool public _presale2Active = false; bool public _mint1Active = false; bool public _mint2Active = false; uint256 public _presale1MaxMint = 10; // Base URI for metadata string public _prefixURI; // This will be used for CRO Back in CRO Back Contract uint256 public _startTime; // Events event BurnToken(uint256 tokenID); event SetBaseURI(string newURI); event WeGotYourBack(address[] indexed addrs); event TogglePresale1Active(bool presale1Active); event ToggleMint1Active(bool mint1Active); event AddToWhiteList1(address[] indexed addrs); event RemoveFromWhiteList1(address[] indexed addrs); event WhiteListMintSeries1(address indexed addr, uint256 amount, uint256 price); event MintSeries1(address indexed addr, uint256 amount, uint256 price); event TogglePresale2Active(bool presale2Active); event ToggleMint2Active(bool mint2Active); event WhiteListMintSeries2(address indexed addr, uint256 amount, uint256 price); event MintSeries2(address indexed addr, uint256 amount, uint256 price); event ToggleTransferPause(bool paused); event UpdateMaxTokens(uint256 newMax); event UpdatePrice(uint256 newPrice); event Withdraw(uint256 amount); constructor() ERC721("Trooprz", "TRPR") { _startTime = block.timestamp; } function burnToken(uint256 tokenId) public virtual { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721 Burnable: caller is not owner nor approved"); _burn(tokenId); emit BurnToken(tokenId); } // URI Functions function _baseURI() internal view override returns (string memory) { return _prefixURI; } function setBaseURI(string memory _uri) public onlyOwner { _prefixURI = _uri; emit SetBaseURI(_uri); } // 1/1 airdrop and NFT helmets payback function weGotYourBack(address[] memory addrs) public onlyOwner { require(addrs.length > 0, "weGotYourBack: cannot airdrop to empty array"); for (uint256 i = 0; i < addrs.length; i++) { _mintItem(addrs[i]); } emit WeGotYourBack(addrs); } // Series 1 function togglePresale1Active() public onlyOwner { _presale1Active = !_presale1Active; emit TogglePresale1Active(_presale1Active); } function toggleMint1Active() public onlyOwner { _mint1Active = !_mint1Active; emit ToggleMint1Active(_mint1Active); } function addToWhitelist1(address[] memory addrs) public onlyOwner { require(addrs.length > 0, "addToWhiteList1: cannot add to whitelist from empty array"); for (uint256 i = 0; i < addrs.length; i++) { _mint1whitelist[addrs[i]] = true; _presale1Mints[addrs[i]] = 0; } emit AddToWhiteList1(addrs); } function removeFromWhitelist1(address[] memory addrs) public onlyOwner { require(addrs.length > 0, "removeFromWhiteList1: cannot remove from whitelist from empty array"); for (uint256 i = 0; i < addrs.length; i++) { _mint1whitelist[addrs[i]] = false; _presale1Mints[addrs[i]] = 0; } emit RemoveFromWhiteList1(addrs); } function isWhitelisted1(address addr) public view returns (bool) { require(addr != address(0), "isWhiteListed1: cannot check empty address"); return _mint1whitelist[addr]; } function whiteListMintSeries1(uint256 amount) public payable { address sender = msg.sender; require(amount > 0, "whiteListMintSeries1: need to mint atleast 1"); require(_presale1Active, "whiteListMintSeries1: presale 1 is not currently active"); require(_presale1Mints[sender] + amount <= _presale1MaxMint, "whiteListMintSeries1: too many for minting during presale"); require(isWhitelisted1(sender), "whiteListMintSeries1: you are not whitelisted"); require(msg.value >= amount * _price, "whiteListMintSeries1: value not enough"); _mintedInitial[sender] = true; for (uint256 i = 0; i < amount; i++) { _presale1Mints[sender] += 1; _mintItem(sender); } emit WhiteListMintSeries1(sender, amount, _price); } function mintSeries1(uint256 amount) public payable { address sender = msg.sender; require(amount > 0, "mintSeries1: need to mint atleast 1"); require(_mint1Active, "mintSeries1: mint not active"); uint256 totalMinted = _tokenIds.current(); require(totalMinted + amount <= _mint1Tokens, "mintSeries1: sold out"); require(msg.value >= amount * _price, "mintSeries1: value not enough"); _mintedInitial[sender] = true; for (uint256 i = 0; i < amount; i++) { _mintItem(msg.sender); } emit MintSeries1(sender, amount, _price); } // Series 2 function togglePresale2Active() public onlyOwner { _presale2Active = !_presale2Active; emit TogglePresale2Active(_presale2Active); } function toggleMint2Active() public onlyOwner { _mint2Active = !_mint2Active; emit ToggleMint2Active(_mint2Active); } function whiteListMintSeries2(uint256 amount) public payable { address sender = msg.sender; require(amount > 0, "whiteListMintSeries2: need to mint atleast 1"); require(_presale2Active, "whiteListMintSeries2: presale 2 not active"); require(_mintedInitial[sender], "whiteListMintSeries2: not cleared to mint in presale"); require(msg.value >= amount * _price, "whiteListMintSeries2: value not enough"); for (uint256 i = 0; i < amount; i++) { _mintItem(sender); } emit WhiteListMintSeries2(sender, amount, _price); } function mintSeries2(uint256 amount) public payable { require(amount > 0, "mintSeries2: you need to mint atleast 1"); require(_mint2Active, "mintSeries2: mint not active"); uint256 totalMinted = _tokenIds.current(); require(totalMinted + amount <= _mint2Tokens, "mintSeries2: sold out"); require(msg.value >= amount * _price, "mintSeries2: value not enough"); address sender = msg.sender; for (uint256 i = 0; i < amount; i++) { _mintItem(sender); } emit MintSeries2(sender, amount, _price); } // function _mintItem(address to) internal { _tokenIds.increment(); uint256 id = _tokenIds.current(); _safeMint(to, id); } // State management function toggleTransferPause() public onlyOwner { paused() ? _unpause() : _pause(); emit ToggleTransferPause(paused()); } function updateMint2Tokens(uint256 newMax) public onlyOwner { require(newMax > 0, "updateMint2Tokens: new max must be greater than 0"); _mint2Tokens = newMax; emit UpdateMaxTokens(newMax); } function updatePrice(uint256 newPrice) public onlyOwner { require(newPrice > 0, "updatePrice: new price must be greater than 0"); _price = newPrice; emit UpdatePrice(newPrice); } function withdraw() external onlyOwner { require(address(this).balance > 0); uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); emit Withdraw(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"AddToWhiteList1","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"BurnToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"MintSeries1","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"MintSeries2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"RemoveFromWhiteList1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"mint1Active","type":"bool"}],"name":"ToggleMint1Active","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"mint2Active","type":"bool"}],"name":"ToggleMint2Active","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"presale1Active","type":"bool"}],"name":"TogglePresale1Active","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"presale2Active","type":"bool"}],"name":"TogglePresale2Active","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ToggleTransferPause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdateMaxTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UpdatePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"WeGotYourBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"WhiteListMintSeries1","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"WhiteListMintSeries2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_mint1Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mint1Tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mint2Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mint2Tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintedInitial","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale1Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale1MaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_presale1Mints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale2Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addToWhitelist1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintSeries1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintSeries2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeFromWhitelist1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMint1Active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMint2Active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresale1Active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresale2Active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTransferPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateMint2Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"weGotYourBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whiteListMintSeries1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whiteListMintSeries2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526115a4600c556108a4600d556818650127cc3dc80000600e556012805463ffffffff19169055600a6013553480156200003c57600080fd5b5060408051808201825260078152662a3937b7b8393d60c91b6020808301918252835180850190945260048452632a29282960e11b90840152815191929162000088916000916200011a565b5080516200009e9060019060208401906200011a565b5050600a805460ff1916905550620000b633620000c0565b42601555620001fd565b600a80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012890620001c0565b90600052602060002090601f0160209004810192826200014c576000855562000197565b82601f106200016757805160ff191683800117855562000197565b8280016001018555821562000197579182015b82811115620001975782518255916020019190600101906200017a565b50620001a5929150620001a9565b5090565b5b80821115620001a55760008155600101620001aa565b600181811c90821680620001d557607f821691505b60208210811415620001f757634e487b7160e01b600052602260045260246000fd5b50919050565b613853806200020d6000396000f3fe6080604052600436106102c95760003560e01c8063715018a6116101755780639e29e9e7116100dc578063c4715f6a11610095578063e985e9c51161006f578063e985e9c514610815578063ec8593961461085e578063f2fde38b1461087e578063fa1acb5c1461089e57600080fd5b8063c4715f6a146107c2578063c87b56dd146107e2578063d59817551461080257600080fd5b80639e29e9e71461070a5780639eac68951461071d578063a22cb46514610733578063ac9d935f14610753578063b88d4fde14610783578063bf0768d8146107a357600080fd5b80638da5cb5b1161012e5780638da5cb5b1461066657806391860f781461068957806395d89b411461069e5780639752a017146106b35780639cc4ca16146106c85780639d489327146106dd57600080fd5b8063715018a6146105c557806375a61b4c146105da5780637b47ec1a146105fb578063813d737d1461061b57806384ad6e7a146106305780638d6cc56d1461064657600080fd5b80632f7db63c1161023457806355f804b3116101ed5780636352211e116101c75780636352211e1461055257806363da6964146105725780636a89a49c1461059257806370a08231146105a557600080fd5b806355f804b3146104fa5780635c0402f11461051a5780635c975abb1461053a57600080fd5b80632f7db63c146104505780633248a997146104655780633ccfd60b1461048557806342842e0e1461049a57806347049c00146104ba5780634f6ccce7146104da57600080fd5b8063156f97e011610286578063156f97e0146103b657806317e4258e146103d057806318160ddd146103e5578063235b6ea1146103fa57806323b872dd146104105780632f745c591461043057600080fd5b806301ffc9a7146102ce57806303a4be031461030357806306fdde0314610318578063081812fc1461033a578063095ea7b3146103725780630d7cda7b14610392575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613412565b6108b4565b60405190151581526020015b60405180910390f35b610316610311366004613495565b6108df565b005b34801561032457600080fd5b5061032d610b1a565b6040516102fa9190613585565b34801561034657600080fd5b5061035a610355366004613495565b610bac565b6040516001600160a01b0390911681526020016102fa565b34801561037e57600080fd5b5061031661038d366004613334565b610c41565b34801561039e57600080fd5b506103a8600d5481565b6040519081526020016102fa565b3480156103c257600080fd5b506012546102ee9060ff1681565b3480156103dc57600080fd5b50610316610d57565b3480156103f157600080fd5b506008546103a8565b34801561040657600080fd5b506103a8600e5481565b34801561041c57600080fd5b5061031661042b366004613240565b610dd5565b34801561043c57600080fd5b506103a861044b366004613334565b610e06565b34801561045c57600080fd5b50610316610e9c565b34801561047157600080fd5b50610316610480366004613495565b610f24565b34801561049157600080fd5b50610316610ffa565b3480156104a657600080fd5b506103166104b5366004613240565b611097565b3480156104c657600080fd5b506103166104d536600461335e565b6110b2565b3480156104e657600080fd5b506103a86104f5366004613495565b6111ca565b34801561050657600080fd5b5061031661051536600461344c565b61125d565b34801561052657600080fd5b506102ee6105353660046131f2565b6112d0565b34801561054657600080fd5b50600a5460ff166102ee565b34801561055e57600080fd5b5061035a61056d366004613495565b61135a565b34801561057e57600080fd5b5061031661058d36600461335e565b6113d1565b6103166105a0366004613495565b611580565b3480156105b157600080fd5b506103a86105c03660046131f2565b61178a565b3480156105d157600080fd5b50610316611811565b3480156105e657600080fd5b506012546102ee906301000000900460ff1681565b34801561060757600080fd5b50610316610616366004613495565b61184d565b34801561062757600080fd5b506103166118f6565b34801561063c57600080fd5b506103a8600c5481565b34801561065257600080fd5b50610316610661366004613495565b611980565b34801561067257600080fd5b50600a5461010090046001600160a01b031661035a565b34801561069557600080fd5b5061032d611a4b565b3480156106aa57600080fd5b5061032d611ad9565b3480156106bf57600080fd5b50610316611ae8565b3480156106d457600080fd5b50610316611b74565b3480156106e957600080fd5b506103a86106f83660046131f2565b60116020526000908152604090205481565b610316610718366004613495565b611c00565b34801561072957600080fd5b506103a860135481565b34801561073f57600080fd5b5061031661074e3660046132f8565b611f09565b34801561075f57600080fd5b506102ee61076e3660046131f2565b60106020526000908152604090205460ff1681565b34801561078f57600080fd5b5061031661079e36600461327c565b611f18565b3480156107af57600080fd5b506012546102ee90610100900460ff1681565b3480156107ce57600080fd5b506103166107dd36600461335e565b611f50565b3480156107ee57600080fd5b5061032d6107fd366004613495565b6120f3565b610316610810366004613495565b6121ce565b34801561082157600080fd5b506102ee61083036600461320d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561086a57600080fd5b506012546102ee9062010000900460ff1681565b34801561088a57600080fd5b506103166108993660046131f2565b6123b2565b3480156108aa57600080fd5b506103a860155481565b60006001600160e01b0319821663780e9d6360e01b14806108d957506108d982612453565b92915050565b33816109475760405162461bcd60e51b815260206004820152602c60248201527f77686974654c6973744d696e74536572696573323a206e65656420746f206d6960448201526b6e742061746c65617374203160a01b60648201526084015b60405180910390fd5b601254610100900460ff166109b15760405162461bcd60e51b815260206004820152602a60248201527f77686974654c6973744d696e74536572696573323a2070726573616c652032206044820152696e6f742061637469766560b01b606482015260840161093e565b6001600160a01b03811660009081526010602052604090205460ff16610a365760405162461bcd60e51b815260206004820152603460248201527f77686974654c6973744d696e74536572696573323a206e6f7420636c656172656044820152736420746f206d696e7420696e2070726573616c6560601b606482015260840161093e565b600e54610a4390836136cd565b341015610aa15760405162461bcd60e51b815260206004820152602660248201527f77686974654c6973744d696e74536572696573323a2076616c7565206e6f74206044820152650cadcdeeaced60d31b606482015260840161093e565b60005b82811015610ac757610ab5826124a3565b80610abf8161376a565b915050610aa4565b50806001600160a01b03167ffe7e41652d94ec2f2d2cc09ff38e26fb291662649b4513c34534123ff4c473bc83600e54604051610b0e929190918252602082015260400190565b60405180910390a25050565b606060008054610b299061372f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b559061372f565b8015610ba25780601f10610b7757610100808354040283529160200191610ba2565b820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161093e565b506000908152600460205260409020546001600160a01b031690565b6000610c4c8261135a565b9050806001600160a01b0316836001600160a01b03161415610cba5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161093e565b336001600160a01b0382161480610cd65750610cd68133610830565b610d485760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161093e565b610d5283836124c8565b505050565b600a546001600160a01b03610100909104163314610d875760405162461bcd60e51b815260040161093e906135ea565b6012805460ff8082161560ff1990921682179092556040519116151581527f890f58a184f31a7e9bc6968373f395bb4cc49b6b2dd9a19c6c2ab83a529c2537906020015b60405180910390a1565b610ddf3382612536565b610dfb5760405162461bcd60e51b815260040161093e9061361f565b610d5283838361262d565b6000610e118361178a565b8210610e735760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161093e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03610100909104163314610ecc5760405162461bcd60e51b815260040161093e906135ea565b6012805460ff610100808304821615810261ff001990931692909217928390556040517ffdacdfd45be8444c5b6df58480ee8d176e1045ebb82df7bb56dc730d25d2043d93610dcb9390049091161515815260200190565b600a546001600160a01b03610100909104163314610f545760405162461bcd60e51b815260040161093e906135ea565b60008111610fbe5760405162461bcd60e51b815260206004820152603160248201527f7570646174654d696e7432546f6b656e733a206e6577206d6178206d75737420604482015270062652067726561746572207468616e203607c1b606482015260840161093e565b600c8190556040518181527fedfbbbb694cef941b1a655402d94c94536eba21e536e4b4e49b524d25f77ff93906020015b60405180910390a150565b600a546001600160a01b0361010090910416331461102a5760405162461bcd60e51b815260040161093e906135ea565b6000471161103757600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611066573d6000803e3d6000fd5b506040518181527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90602001610fef565b610d5283838360405180602001604052806000815250611f18565b600a546001600160a01b036101009091041633146110e25760405162461bcd60e51b815260040161093e906135ea565b60008151116111485760405162461bcd60e51b815260206004820152602c60248201527f7765476f74596f75724261636b3a2063616e6e6f742061697264726f7020746f60448201526b20656d70747920617272617960a01b606482015260840161093e565b60005b815181101561118857611176828281518110611169576111696137db565b60200260200101516124a3565b806111808161376a565b91505061114b565b508060405161119791906134da565b604051908190038120907f8a92a453d66e4a27d9d84385e3d3e51b18d96cca2e6d1e4101f3aa238ee3526190600090a250565b60006111d560085490565b82106112385760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161093e565b6008828154811061124b5761124b6137db565b90600052602060002001549050919050565b600a546001600160a01b0361010090910416331461128d5760405162461bcd60e51b815260040161093e906135ea565b80516112a09060149060208401906130e5565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa81604051610fef9190613585565b60006001600160a01b03821661133b5760405162461bcd60e51b815260206004820152602a60248201527f697357686974654c6973746564313a2063616e6e6f7420636865636b20656d706044820152697479206164647265737360b01b606482015260840161093e565b506001600160a01b03166000908152600f602052604090205460ff1690565b6000818152600260205260408120546001600160a01b0316806108d95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161093e565b600a546001600160a01b036101009091041633146114015760405162461bcd60e51b815260040161093e906135ea565b60008151116114845760405162461bcd60e51b815260206004820152604360248201527f72656d6f766546726f6d57686974654c697374313a2063616e6e6f742072656d60448201527f6f76652066726f6d2077686974656c6973742066726f6d20656d70747920617260648201526272617960e81b608482015260a40161093e565b60005b815181101561153e576000600f60008484815181106114a8576114a86137db565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601160008484815181106114ff576114ff6137db565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806115369061376a565b915050611487565b508060405161154d91906134da565b604051908190038120907fe5fce1aea1ac788bfe2f61b1d2cbf1d78d733e4695bdca9def45a7774a117ecb90600090a250565b33816115da5760405162461bcd60e51b815260206004820152602360248201527f6d696e74536572696573313a206e65656420746f206d696e742061746c65617360448201526274203160e81b606482015260840161093e565b60125462010000900460ff166116325760405162461bcd60e51b815260206004820152601c60248201527f6d696e74536572696573313a206d696e74206e6f742061637469766500000000604482015260640161093e565b600061163d600b5490565b600d5490915061164d84836136a1565b11156116935760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d14d95c9a595ccc4e881cdbdb19081bdd5d605a1b604482015260640161093e565b600e546116a090846136cd565b3410156116ef5760405162461bcd60e51b815260206004820152601d60248201527f6d696e74536572696573313a2076616c7565206e6f7420656e6f756768000000604482015260640161093e565b6001600160a01b0382166000908152601060205260408120805460ff191660011790555b8381101561173657611724336124a3565b8061172e8161376a565b915050611713565b50816001600160a01b03167fff736fc4d8cd766994e35e7c8d4b786aa5584df558e4299511a97345dbd6981284600e5460405161177d929190918252602082015260400190565b60405180910390a2505050565b60006001600160a01b0382166117f55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161093e565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b036101009091041633146118415760405162461bcd60e51b815260040161093e906135ea565b61184b60006127d8565b565b6118573382612536565b6118bd5760405162461bcd60e51b815260206004820152603160248201527f455243373231204275726e61626c653a2063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161093e565b6118c681612832565b6040518181527f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a3390602001610fef565b600a546001600160a01b036101009091041633146119265760405162461bcd60e51b815260040161093e906135ea565b6012805460ff62010000808304821615810262ff00001990931692909217928390556040517f3342814f0b0f6554df8da96aba2d64ac9d8cc490cd5c2ae9d2e1d81224a08fb793610dcb9390049091161515815260200190565b600a546001600160a01b036101009091041633146119b05760405162461bcd60e51b815260040161093e906135ea565b60008111611a165760405162461bcd60e51b815260206004820152602d60248201527f75706461746550726963653a206e6577207072696365206d757374206265206760448201526c0726561746572207468616e203609c1b606482015260840161093e565b600e8190556040518181527f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a380590602001610fef565b60148054611a589061372f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a849061372f565b8015611ad15780601f10611aa657610100808354040283529160200191611ad1565b820191906000526020600020905b815481529060010190602001808311611ab457829003601f168201915b505050505081565b606060018054610b299061372f565b600a546001600160a01b03610100909104163314611b185760405162461bcd60e51b815260040161093e906135ea565b600a5460ff16611b2f57611b2a6128d9565b611b37565b611b3761296c565b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f611b64600a5460ff1690565b6040519015158152602001610dcb565b600a546001600160a01b03610100909104163314611ba45760405162461bcd60e51b815260040161093e906135ea565b6012805460ff6301000000808304821615810263ff0000001990931692909217928390556040517f10b58e93f36d71d7899eb67702b85828d2e4122863122a19001380961a9ca78193610dcb9390049091161515815260200190565b3381611c635760405162461bcd60e51b815260206004820152602c60248201527f77686974654c6973744d696e74536572696573313a206e65656420746f206d6960448201526b6e742061746c65617374203160a01b606482015260840161093e565b60125460ff16611cdb5760405162461bcd60e51b815260206004820152603760248201527f77686974654c6973744d696e74536572696573313a2070726573616c6520312060448201527f6973206e6f742063757272656e746c7920616374697665000000000000000000606482015260840161093e565b6013546001600160a01b038216600090815260116020526040902054611d029084906136a1565b1115611d765760405162461bcd60e51b815260206004820152603960248201527f77686974654c6973744d696e74536572696573313a20746f6f206d616e79206660448201527f6f72206d696e74696e6720647572696e672070726573616c6500000000000000606482015260840161093e565b611d7f816112d0565b611de15760405162461bcd60e51b815260206004820152602d60248201527f77686974654c6973744d696e74536572696573313a20796f7520617265206e6f60448201526c1d081dda1a5d195b1a5cdd1959609a1b606482015260840161093e565b600e54611dee90836136cd565b341015611e4c5760405162461bcd60e51b815260206004820152602660248201527f77686974654c6973744d696e74536572696573313a2076616c7565206e6f74206044820152650cadcdeeaced60d31b606482015260840161093e565b6001600160a01b0381166000908152601060205260408120805460ff191660011790555b82811015611ec2576001600160a01b0382166000908152601160205260408120805460019290611ea19084906136a1565b90915550611eb09050826124a3565b80611eba8161376a565b915050611e70565b50806001600160a01b03167f1dffd56c829e7b29ac59bac284decdcabb8354c0dd173670b883d87f240c422e83600e54604051610b0e929190918252602082015260400190565b611f143383836129e6565b5050565b611f223383612536565b611f3e5760405162461bcd60e51b815260040161093e9061361f565b611f4a84848484612ab5565b50505050565b600a546001600160a01b03610100909104163314611f805760405162461bcd60e51b815260040161093e906135ea565b6000815111611ff75760405162461bcd60e51b815260206004820152603960248201527f616464546f57686974654c697374313a2063616e6e6f742061646420746f207760448201527f686974656c6973742066726f6d20656d70747920617272617900000000000000606482015260840161093e565b60005b81518110156120b1576001600f600084848151811061201b5761201b6137db565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600060116000848481518110612072576120726137db565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806120a99061376a565b915050611ffa565b50806040516120c091906134da565b604051908190038120907f9245942ffb680639d98cd297a9f33698dc4f0b72b1ea3cf4c98fac11a891b63a90600090a250565b6000818152600260205260409020546060906001600160a01b03166121725760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161093e565b600061217c612ae8565b9050600081511161219c57604051806020016040528060008152506121c7565b806121a684612af7565b6040516020016121b7929190613519565b6040516020818303038152906040525b9392505050565b6000811161222e5760405162461bcd60e51b815260206004820152602760248201527f6d696e74536572696573323a20796f75206e65656420746f206d696e742061746044820152666c65617374203160c81b606482015260840161093e565b6012546301000000900460ff166122875760405162461bcd60e51b815260206004820152601c60248201527f6d696e74536572696573323a206d696e74206e6f742061637469766500000000604482015260640161093e565b6000612292600b5490565b600c549091506122a283836136a1565b11156122e85760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d14d95c9a595ccc8e881cdbdb19081bdd5d605a1b604482015260640161093e565b600e546122f590836136cd565b3410156123445760405162461bcd60e51b815260206004820152601d60248201527f6d696e74536572696573323a2076616c7565206e6f7420656e6f756768000000604482015260640161093e565b3360005b8381101561236b57612359826124a3565b806123638161376a565b915050612348565b50806001600160a01b03167f6378b989daed197c647d54fbd0dc89e8eb6de47b34f4a6cf6c32a33577b10e0384600e5460405161177d929190918252602082015260400190565b600a546001600160a01b036101009091041633146123e25760405162461bcd60e51b815260040161093e906135ea565b6001600160a01b0381166124475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093e565b612450816127d8565b50565b60006001600160e01b031982166380ac58cd60e01b148061248457506001600160e01b03198216635b5e139f60e01b145b806108d957506301ffc9a760e01b6001600160e01b03198316146108d9565b6124b1600b80546001019055565b60006124bc600b5490565b9050611f148282612bf5565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906124fd8261135a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166125af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161093e565b60006125ba8361135a565b9050806001600160a01b0316846001600160a01b031614806125f55750836001600160a01b03166125ea84610bac565b6001600160a01b0316145b8061262557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126408261135a565b6001600160a01b0316146126a85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161093e565b6001600160a01b03821661270a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b612715838383612c0f565b6127206000826124c8565b6001600160a01b03831660009081526003602052604081208054600192906127499084906136ec565b90915550506001600160a01b03821660009081526003602052604081208054600192906127779084906136a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061283d8261135a565b905061284b81600084612c0f565b6128566000836124c8565b6001600160a01b038116600090815260036020526040812080546001929061287f9084906136ec565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600a5460ff161561291f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161093e565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129543390565b6040516001600160a01b039091168152602001610dcb565b600a5460ff166129b55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161093e565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612954565b816001600160a01b0316836001600160a01b03161415612a485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161093e565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612ac084848461262d565b612acc84848484612cc7565b611f4a5760405162461bcd60e51b815260040161093e90613598565b606060148054610b299061372f565b606081612b1b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b455780612b2f8161376a565b9150612b3e9050600a836136b9565b9150612b1f565b60008167ffffffffffffffff811115612b6057612b606137f1565b6040519080825280601f01601f191660200182016040528015612b8a576020820181803683370190505b5090505b841561262557612b9f6001836136ec565b9150612bac600a86613785565b612bb79060306136a1565b60f81b818381518110612bcc57612bcc6137db565b60200101906001600160f81b031916908160001a905350612bee600a866136b9565b9450612b8e565b611f14828260405180602001604052806000815250612dd4565b6001600160a01b038316612c6a57612c6581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612c8d565b816001600160a01b0316836001600160a01b031614612c8d57612c8d8382612e07565b6001600160a01b038216612ca457610d5281612ea4565b826001600160a01b0316826001600160a01b031614610d5257610d528282612f53565b60006001600160a01b0384163b15612dc957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612d0b903390899088908890600401613548565b602060405180830381600087803b158015612d2557600080fd5b505af1925050508015612d55575060408051601f3d908101601f19168201909252612d529181019061342f565b60015b612daf573d808015612d83576040519150601f19603f3d011682016040523d82523d6000602084013e612d88565b606091505b508051612da75760405162461bcd60e51b815260040161093e90613598565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612625565b506001949350505050565b612dde8383612f97565b612deb6000848484612cc7565b610d525760405162461bcd60e51b815260040161093e90613598565b60006001612e148461178a565b612e1e91906136ec565b600083815260076020526040902054909150808214612e71576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612eb6906001906136ec565b60008381526009602052604081205460088054939450909284908110612ede57612ede6137db565b906000526020600020015490508060088381548110612eff57612eff6137db565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612f3757612f376137c5565b6001900381819060005260206000200160009055905550505050565b6000612f5e8361178a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612fed5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161093e565b6000818152600260205260409020546001600160a01b0316156130525760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161093e565b61305e60008383612c0f565b6001600160a01b03821660009081526003602052604081208054600192906130879084906136a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546130f19061372f565b90600052602060002090601f0160209004810192826131135760008555613159565b82601f1061312c57805160ff1916838001178555613159565b82800160010185558215613159579182015b8281111561315957825182559160200191906001019061313e565b50613165929150613169565b5090565b5b80821115613165576000815560010161316a565b600067ffffffffffffffff831115613198576131986137f1565b6131ab601f8401601f1916602001613670565b90508281528383830111156131bf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146131ed57600080fd5b919050565b60006020828403121561320457600080fd5b6121c7826131d6565b6000806040838503121561322057600080fd5b613229836131d6565b9150613237602084016131d6565b90509250929050565b60008060006060848603121561325557600080fd5b61325e846131d6565b925061326c602085016131d6565b9150604084013590509250925092565b6000806000806080858703121561329257600080fd5b61329b856131d6565b93506132a9602086016131d6565b925060408501359150606085013567ffffffffffffffff8111156132cc57600080fd5b8501601f810187136132dd57600080fd5b6132ec8782356020840161317e565b91505092959194509250565b6000806040838503121561330b57600080fd5b613314836131d6565b91506020830135801515811461332957600080fd5b809150509250929050565b6000806040838503121561334757600080fd5b613350836131d6565b946020939093013593505050565b6000602080838503121561337157600080fd5b823567ffffffffffffffff8082111561338957600080fd5b818501915085601f83011261339d57600080fd5b8135818111156133af576133af6137f1565b8060051b91506133c0848301613670565b8181528481019084860184860187018a10156133db57600080fd5b600095505b83861015613405576133f1816131d6565b8352600195909501949186019186016133e0565b5098975050505050505050565b60006020828403121561342457600080fd5b81356121c781613807565b60006020828403121561344157600080fd5b81516121c781613807565b60006020828403121561345e57600080fd5b813567ffffffffffffffff81111561347557600080fd5b8201601f8101841361348657600080fd5b6126258482356020840161317e565b6000602082840312156134a757600080fd5b5035919050565b600081518084526134c6816020860160208601613703565b601f01601f19169290920160200192915050565b815160009082906020808601845b8381101561350d5781516001600160a01b0316855293820193908201906001016134e8565b50929695505050505050565b6000835161352b818460208801613703565b83519083019061353f818360208801613703565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061357b908301846134ae565b9695505050505050565b6020815260006121c760208301846134ae565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715613699576136996137f1565b604052919050565b600082198211156136b4576136b4613799565b500190565b6000826136c8576136c86137af565b500490565b60008160001904831182151516156136e7576136e7613799565b500290565b6000828210156136fe576136fe613799565b500390565b60005b8381101561371e578181015183820152602001613706565b83811115611f4a5750506000910152565b600181811c9082168061374357607f821691505b6020821081141561376457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561377e5761377e613799565b5060010190565b600082613794576137946137af565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461245057600080fdfea2646970667358221220a736e99bd7a9a43709ad3a42a9b66312b3e69e8087ff153e8ee2a2dc7d1f594664736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102c95760003560e01c8063715018a6116101755780639e29e9e7116100dc578063c4715f6a11610095578063e985e9c51161006f578063e985e9c514610815578063ec8593961461085e578063f2fde38b1461087e578063fa1acb5c1461089e57600080fd5b8063c4715f6a146107c2578063c87b56dd146107e2578063d59817551461080257600080fd5b80639e29e9e71461070a5780639eac68951461071d578063a22cb46514610733578063ac9d935f14610753578063b88d4fde14610783578063bf0768d8146107a357600080fd5b80638da5cb5b1161012e5780638da5cb5b1461066657806391860f781461068957806395d89b411461069e5780639752a017146106b35780639cc4ca16146106c85780639d489327146106dd57600080fd5b8063715018a6146105c557806375a61b4c146105da5780637b47ec1a146105fb578063813d737d1461061b57806384ad6e7a146106305780638d6cc56d1461064657600080fd5b80632f7db63c1161023457806355f804b3116101ed5780636352211e116101c75780636352211e1461055257806363da6964146105725780636a89a49c1461059257806370a08231146105a557600080fd5b806355f804b3146104fa5780635c0402f11461051a5780635c975abb1461053a57600080fd5b80632f7db63c146104505780633248a997146104655780633ccfd60b1461048557806342842e0e1461049a57806347049c00146104ba5780634f6ccce7146104da57600080fd5b8063156f97e011610286578063156f97e0146103b657806317e4258e146103d057806318160ddd146103e5578063235b6ea1146103fa57806323b872dd146104105780632f745c591461043057600080fd5b806301ffc9a7146102ce57806303a4be031461030357806306fdde0314610318578063081812fc1461033a578063095ea7b3146103725780630d7cda7b14610392575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613412565b6108b4565b60405190151581526020015b60405180910390f35b610316610311366004613495565b6108df565b005b34801561032457600080fd5b5061032d610b1a565b6040516102fa9190613585565b34801561034657600080fd5b5061035a610355366004613495565b610bac565b6040516001600160a01b0390911681526020016102fa565b34801561037e57600080fd5b5061031661038d366004613334565b610c41565b34801561039e57600080fd5b506103a8600d5481565b6040519081526020016102fa565b3480156103c257600080fd5b506012546102ee9060ff1681565b3480156103dc57600080fd5b50610316610d57565b3480156103f157600080fd5b506008546103a8565b34801561040657600080fd5b506103a8600e5481565b34801561041c57600080fd5b5061031661042b366004613240565b610dd5565b34801561043c57600080fd5b506103a861044b366004613334565b610e06565b34801561045c57600080fd5b50610316610e9c565b34801561047157600080fd5b50610316610480366004613495565b610f24565b34801561049157600080fd5b50610316610ffa565b3480156104a657600080fd5b506103166104b5366004613240565b611097565b3480156104c657600080fd5b506103166104d536600461335e565b6110b2565b3480156104e657600080fd5b506103a86104f5366004613495565b6111ca565b34801561050657600080fd5b5061031661051536600461344c565b61125d565b34801561052657600080fd5b506102ee6105353660046131f2565b6112d0565b34801561054657600080fd5b50600a5460ff166102ee565b34801561055e57600080fd5b5061035a61056d366004613495565b61135a565b34801561057e57600080fd5b5061031661058d36600461335e565b6113d1565b6103166105a0366004613495565b611580565b3480156105b157600080fd5b506103a86105c03660046131f2565b61178a565b3480156105d157600080fd5b50610316611811565b3480156105e657600080fd5b506012546102ee906301000000900460ff1681565b34801561060757600080fd5b50610316610616366004613495565b61184d565b34801561062757600080fd5b506103166118f6565b34801561063c57600080fd5b506103a8600c5481565b34801561065257600080fd5b50610316610661366004613495565b611980565b34801561067257600080fd5b50600a5461010090046001600160a01b031661035a565b34801561069557600080fd5b5061032d611a4b565b3480156106aa57600080fd5b5061032d611ad9565b3480156106bf57600080fd5b50610316611ae8565b3480156106d457600080fd5b50610316611b74565b3480156106e957600080fd5b506103a86106f83660046131f2565b60116020526000908152604090205481565b610316610718366004613495565b611c00565b34801561072957600080fd5b506103a860135481565b34801561073f57600080fd5b5061031661074e3660046132f8565b611f09565b34801561075f57600080fd5b506102ee61076e3660046131f2565b60106020526000908152604090205460ff1681565b34801561078f57600080fd5b5061031661079e36600461327c565b611f18565b3480156107af57600080fd5b506012546102ee90610100900460ff1681565b3480156107ce57600080fd5b506103166107dd36600461335e565b611f50565b3480156107ee57600080fd5b5061032d6107fd366004613495565b6120f3565b610316610810366004613495565b6121ce565b34801561082157600080fd5b506102ee61083036600461320d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561086a57600080fd5b506012546102ee9062010000900460ff1681565b34801561088a57600080fd5b506103166108993660046131f2565b6123b2565b3480156108aa57600080fd5b506103a860155481565b60006001600160e01b0319821663780e9d6360e01b14806108d957506108d982612453565b92915050565b33816109475760405162461bcd60e51b815260206004820152602c60248201527f77686974654c6973744d696e74536572696573323a206e65656420746f206d6960448201526b6e742061746c65617374203160a01b60648201526084015b60405180910390fd5b601254610100900460ff166109b15760405162461bcd60e51b815260206004820152602a60248201527f77686974654c6973744d696e74536572696573323a2070726573616c652032206044820152696e6f742061637469766560b01b606482015260840161093e565b6001600160a01b03811660009081526010602052604090205460ff16610a365760405162461bcd60e51b815260206004820152603460248201527f77686974654c6973744d696e74536572696573323a206e6f7420636c656172656044820152736420746f206d696e7420696e2070726573616c6560601b606482015260840161093e565b600e54610a4390836136cd565b341015610aa15760405162461bcd60e51b815260206004820152602660248201527f77686974654c6973744d696e74536572696573323a2076616c7565206e6f74206044820152650cadcdeeaced60d31b606482015260840161093e565b60005b82811015610ac757610ab5826124a3565b80610abf8161376a565b915050610aa4565b50806001600160a01b03167ffe7e41652d94ec2f2d2cc09ff38e26fb291662649b4513c34534123ff4c473bc83600e54604051610b0e929190918252602082015260400190565b60405180910390a25050565b606060008054610b299061372f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b559061372f565b8015610ba25780601f10610b7757610100808354040283529160200191610ba2565b820191906000526020600020905b815481529060010190602001808311610b8557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161093e565b506000908152600460205260409020546001600160a01b031690565b6000610c4c8261135a565b9050806001600160a01b0316836001600160a01b03161415610cba5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161093e565b336001600160a01b0382161480610cd65750610cd68133610830565b610d485760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161093e565b610d5283836124c8565b505050565b600a546001600160a01b03610100909104163314610d875760405162461bcd60e51b815260040161093e906135ea565b6012805460ff8082161560ff1990921682179092556040519116151581527f890f58a184f31a7e9bc6968373f395bb4cc49b6b2dd9a19c6c2ab83a529c2537906020015b60405180910390a1565b610ddf3382612536565b610dfb5760405162461bcd60e51b815260040161093e9061361f565b610d5283838361262d565b6000610e118361178a565b8210610e735760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161093e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03610100909104163314610ecc5760405162461bcd60e51b815260040161093e906135ea565b6012805460ff610100808304821615810261ff001990931692909217928390556040517ffdacdfd45be8444c5b6df58480ee8d176e1045ebb82df7bb56dc730d25d2043d93610dcb9390049091161515815260200190565b600a546001600160a01b03610100909104163314610f545760405162461bcd60e51b815260040161093e906135ea565b60008111610fbe5760405162461bcd60e51b815260206004820152603160248201527f7570646174654d696e7432546f6b656e733a206e6577206d6178206d75737420604482015270062652067726561746572207468616e203607c1b606482015260840161093e565b600c8190556040518181527fedfbbbb694cef941b1a655402d94c94536eba21e536e4b4e49b524d25f77ff93906020015b60405180910390a150565b600a546001600160a01b0361010090910416331461102a5760405162461bcd60e51b815260040161093e906135ea565b6000471161103757600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611066573d6000803e3d6000fd5b506040518181527f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90602001610fef565b610d5283838360405180602001604052806000815250611f18565b600a546001600160a01b036101009091041633146110e25760405162461bcd60e51b815260040161093e906135ea565b60008151116111485760405162461bcd60e51b815260206004820152602c60248201527f7765476f74596f75724261636b3a2063616e6e6f742061697264726f7020746f60448201526b20656d70747920617272617960a01b606482015260840161093e565b60005b815181101561118857611176828281518110611169576111696137db565b60200260200101516124a3565b806111808161376a565b91505061114b565b508060405161119791906134da565b604051908190038120907f8a92a453d66e4a27d9d84385e3d3e51b18d96cca2e6d1e4101f3aa238ee3526190600090a250565b60006111d560085490565b82106112385760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161093e565b6008828154811061124b5761124b6137db565b90600052602060002001549050919050565b600a546001600160a01b0361010090910416331461128d5760405162461bcd60e51b815260040161093e906135ea565b80516112a09060149060208401906130e5565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa81604051610fef9190613585565b60006001600160a01b03821661133b5760405162461bcd60e51b815260206004820152602a60248201527f697357686974654c6973746564313a2063616e6e6f7420636865636b20656d706044820152697479206164647265737360b01b606482015260840161093e565b506001600160a01b03166000908152600f602052604090205460ff1690565b6000818152600260205260408120546001600160a01b0316806108d95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161093e565b600a546001600160a01b036101009091041633146114015760405162461bcd60e51b815260040161093e906135ea565b60008151116114845760405162461bcd60e51b815260206004820152604360248201527f72656d6f766546726f6d57686974654c697374313a2063616e6e6f742072656d60448201527f6f76652066726f6d2077686974656c6973742066726f6d20656d70747920617260648201526272617960e81b608482015260a40161093e565b60005b815181101561153e576000600f60008484815181106114a8576114a86137db565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601160008484815181106114ff576114ff6137db565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806115369061376a565b915050611487565b508060405161154d91906134da565b604051908190038120907fe5fce1aea1ac788bfe2f61b1d2cbf1d78d733e4695bdca9def45a7774a117ecb90600090a250565b33816115da5760405162461bcd60e51b815260206004820152602360248201527f6d696e74536572696573313a206e65656420746f206d696e742061746c65617360448201526274203160e81b606482015260840161093e565b60125462010000900460ff166116325760405162461bcd60e51b815260206004820152601c60248201527f6d696e74536572696573313a206d696e74206e6f742061637469766500000000604482015260640161093e565b600061163d600b5490565b600d5490915061164d84836136a1565b11156116935760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d14d95c9a595ccc4e881cdbdb19081bdd5d605a1b604482015260640161093e565b600e546116a090846136cd565b3410156116ef5760405162461bcd60e51b815260206004820152601d60248201527f6d696e74536572696573313a2076616c7565206e6f7420656e6f756768000000604482015260640161093e565b6001600160a01b0382166000908152601060205260408120805460ff191660011790555b8381101561173657611724336124a3565b8061172e8161376a565b915050611713565b50816001600160a01b03167fff736fc4d8cd766994e35e7c8d4b786aa5584df558e4299511a97345dbd6981284600e5460405161177d929190918252602082015260400190565b60405180910390a2505050565b60006001600160a01b0382166117f55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161093e565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b036101009091041633146118415760405162461bcd60e51b815260040161093e906135ea565b61184b60006127d8565b565b6118573382612536565b6118bd5760405162461bcd60e51b815260206004820152603160248201527f455243373231204275726e61626c653a2063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161093e565b6118c681612832565b6040518181527f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a3390602001610fef565b600a546001600160a01b036101009091041633146119265760405162461bcd60e51b815260040161093e906135ea565b6012805460ff62010000808304821615810262ff00001990931692909217928390556040517f3342814f0b0f6554df8da96aba2d64ac9d8cc490cd5c2ae9d2e1d81224a08fb793610dcb9390049091161515815260200190565b600a546001600160a01b036101009091041633146119b05760405162461bcd60e51b815260040161093e906135ea565b60008111611a165760405162461bcd60e51b815260206004820152602d60248201527f75706461746550726963653a206e6577207072696365206d757374206265206760448201526c0726561746572207468616e203609c1b606482015260840161093e565b600e8190556040518181527f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a380590602001610fef565b60148054611a589061372f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a849061372f565b8015611ad15780601f10611aa657610100808354040283529160200191611ad1565b820191906000526020600020905b815481529060010190602001808311611ab457829003601f168201915b505050505081565b606060018054610b299061372f565b600a546001600160a01b03610100909104163314611b185760405162461bcd60e51b815260040161093e906135ea565b600a5460ff16611b2f57611b2a6128d9565b611b37565b611b3761296c565b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f611b64600a5460ff1690565b6040519015158152602001610dcb565b600a546001600160a01b03610100909104163314611ba45760405162461bcd60e51b815260040161093e906135ea565b6012805460ff6301000000808304821615810263ff0000001990931692909217928390556040517f10b58e93f36d71d7899eb67702b85828d2e4122863122a19001380961a9ca78193610dcb9390049091161515815260200190565b3381611c635760405162461bcd60e51b815260206004820152602c60248201527f77686974654c6973744d696e74536572696573313a206e65656420746f206d6960448201526b6e742061746c65617374203160a01b606482015260840161093e565b60125460ff16611cdb5760405162461bcd60e51b815260206004820152603760248201527f77686974654c6973744d696e74536572696573313a2070726573616c6520312060448201527f6973206e6f742063757272656e746c7920616374697665000000000000000000606482015260840161093e565b6013546001600160a01b038216600090815260116020526040902054611d029084906136a1565b1115611d765760405162461bcd60e51b815260206004820152603960248201527f77686974654c6973744d696e74536572696573313a20746f6f206d616e79206660448201527f6f72206d696e74696e6720647572696e672070726573616c6500000000000000606482015260840161093e565b611d7f816112d0565b611de15760405162461bcd60e51b815260206004820152602d60248201527f77686974654c6973744d696e74536572696573313a20796f7520617265206e6f60448201526c1d081dda1a5d195b1a5cdd1959609a1b606482015260840161093e565b600e54611dee90836136cd565b341015611e4c5760405162461bcd60e51b815260206004820152602660248201527f77686974654c6973744d696e74536572696573313a2076616c7565206e6f74206044820152650cadcdeeaced60d31b606482015260840161093e565b6001600160a01b0381166000908152601060205260408120805460ff191660011790555b82811015611ec2576001600160a01b0382166000908152601160205260408120805460019290611ea19084906136a1565b90915550611eb09050826124a3565b80611eba8161376a565b915050611e70565b50806001600160a01b03167f1dffd56c829e7b29ac59bac284decdcabb8354c0dd173670b883d87f240c422e83600e54604051610b0e929190918252602082015260400190565b611f143383836129e6565b5050565b611f223383612536565b611f3e5760405162461bcd60e51b815260040161093e9061361f565b611f4a84848484612ab5565b50505050565b600a546001600160a01b03610100909104163314611f805760405162461bcd60e51b815260040161093e906135ea565b6000815111611ff75760405162461bcd60e51b815260206004820152603960248201527f616464546f57686974654c697374313a2063616e6e6f742061646420746f207760448201527f686974656c6973742066726f6d20656d70747920617272617900000000000000606482015260840161093e565b60005b81518110156120b1576001600f600084848151811061201b5761201b6137db565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600060116000848481518110612072576120726137db565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806120a99061376a565b915050611ffa565b50806040516120c091906134da565b604051908190038120907f9245942ffb680639d98cd297a9f33698dc4f0b72b1ea3cf4c98fac11a891b63a90600090a250565b6000818152600260205260409020546060906001600160a01b03166121725760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161093e565b600061217c612ae8565b9050600081511161219c57604051806020016040528060008152506121c7565b806121a684612af7565b6040516020016121b7929190613519565b6040516020818303038152906040525b9392505050565b6000811161222e5760405162461bcd60e51b815260206004820152602760248201527f6d696e74536572696573323a20796f75206e65656420746f206d696e742061746044820152666c65617374203160c81b606482015260840161093e565b6012546301000000900460ff166122875760405162461bcd60e51b815260206004820152601c60248201527f6d696e74536572696573323a206d696e74206e6f742061637469766500000000604482015260640161093e565b6000612292600b5490565b600c549091506122a283836136a1565b11156122e85760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d14d95c9a595ccc8e881cdbdb19081bdd5d605a1b604482015260640161093e565b600e546122f590836136cd565b3410156123445760405162461bcd60e51b815260206004820152601d60248201527f6d696e74536572696573323a2076616c7565206e6f7420656e6f756768000000604482015260640161093e565b3360005b8381101561236b57612359826124a3565b806123638161376a565b915050612348565b50806001600160a01b03167f6378b989daed197c647d54fbd0dc89e8eb6de47b34f4a6cf6c32a33577b10e0384600e5460405161177d929190918252602082015260400190565b600a546001600160a01b036101009091041633146123e25760405162461bcd60e51b815260040161093e906135ea565b6001600160a01b0381166124475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093e565b612450816127d8565b50565b60006001600160e01b031982166380ac58cd60e01b148061248457506001600160e01b03198216635b5e139f60e01b145b806108d957506301ffc9a760e01b6001600160e01b03198316146108d9565b6124b1600b80546001019055565b60006124bc600b5490565b9050611f148282612bf5565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906124fd8261135a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166125af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161093e565b60006125ba8361135a565b9050806001600160a01b0316846001600160a01b031614806125f55750836001600160a01b03166125ea84610bac565b6001600160a01b0316145b8061262557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126408261135a565b6001600160a01b0316146126a85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161093e565b6001600160a01b03821661270a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b612715838383612c0f565b6127206000826124c8565b6001600160a01b03831660009081526003602052604081208054600192906127499084906136ec565b90915550506001600160a01b03821660009081526003602052604081208054600192906127779084906136a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061283d8261135a565b905061284b81600084612c0f565b6128566000836124c8565b6001600160a01b038116600090815260036020526040812080546001929061287f9084906136ec565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600a5460ff161561291f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161093e565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129543390565b6040516001600160a01b039091168152602001610dcb565b600a5460ff166129b55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161093e565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612954565b816001600160a01b0316836001600160a01b03161415612a485760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161093e565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612ac084848461262d565b612acc84848484612cc7565b611f4a5760405162461bcd60e51b815260040161093e90613598565b606060148054610b299061372f565b606081612b1b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b455780612b2f8161376a565b9150612b3e9050600a836136b9565b9150612b1f565b60008167ffffffffffffffff811115612b6057612b606137f1565b6040519080825280601f01601f191660200182016040528015612b8a576020820181803683370190505b5090505b841561262557612b9f6001836136ec565b9150612bac600a86613785565b612bb79060306136a1565b60f81b818381518110612bcc57612bcc6137db565b60200101906001600160f81b031916908160001a905350612bee600a866136b9565b9450612b8e565b611f14828260405180602001604052806000815250612dd4565b6001600160a01b038316612c6a57612c6581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612c8d565b816001600160a01b0316836001600160a01b031614612c8d57612c8d8382612e07565b6001600160a01b038216612ca457610d5281612ea4565b826001600160a01b0316826001600160a01b031614610d5257610d528282612f53565b60006001600160a01b0384163b15612dc957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612d0b903390899088908890600401613548565b602060405180830381600087803b158015612d2557600080fd5b505af1925050508015612d55575060408051601f3d908101601f19168201909252612d529181019061342f565b60015b612daf573d808015612d83576040519150601f19603f3d011682016040523d82523d6000602084013e612d88565b606091505b508051612da75760405162461bcd60e51b815260040161093e90613598565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612625565b506001949350505050565b612dde8383612f97565b612deb6000848484612cc7565b610d525760405162461bcd60e51b815260040161093e90613598565b60006001612e148461178a565b612e1e91906136ec565b600083815260076020526040902054909150808214612e71576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612eb6906001906136ec565b60008381526009602052604081205460088054939450909284908110612ede57612ede6137db565b906000526020600020015490508060088381548110612eff57612eff6137db565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612f3757612f376137c5565b6001900381819060005260206000200160009055905550505050565b6000612f5e8361178a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216612fed5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161093e565b6000818152600260205260409020546001600160a01b0316156130525760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161093e565b61305e60008383612c0f565b6001600160a01b03821660009081526003602052604081208054600192906130879084906136a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546130f19061372f565b90600052602060002090601f0160209004810192826131135760008555613159565b82601f1061312c57805160ff1916838001178555613159565b82800160010185558215613159579182015b8281111561315957825182559160200191906001019061313e565b50613165929150613169565b5090565b5b80821115613165576000815560010161316a565b600067ffffffffffffffff831115613198576131986137f1565b6131ab601f8401601f1916602001613670565b90508281528383830111156131bf57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146131ed57600080fd5b919050565b60006020828403121561320457600080fd5b6121c7826131d6565b6000806040838503121561322057600080fd5b613229836131d6565b9150613237602084016131d6565b90509250929050565b60008060006060848603121561325557600080fd5b61325e846131d6565b925061326c602085016131d6565b9150604084013590509250925092565b6000806000806080858703121561329257600080fd5b61329b856131d6565b93506132a9602086016131d6565b925060408501359150606085013567ffffffffffffffff8111156132cc57600080fd5b8501601f810187136132dd57600080fd5b6132ec8782356020840161317e565b91505092959194509250565b6000806040838503121561330b57600080fd5b613314836131d6565b91506020830135801515811461332957600080fd5b809150509250929050565b6000806040838503121561334757600080fd5b613350836131d6565b946020939093013593505050565b6000602080838503121561337157600080fd5b823567ffffffffffffffff8082111561338957600080fd5b818501915085601f83011261339d57600080fd5b8135818111156133af576133af6137f1565b8060051b91506133c0848301613670565b8181528481019084860184860187018a10156133db57600080fd5b600095505b83861015613405576133f1816131d6565b8352600195909501949186019186016133e0565b5098975050505050505050565b60006020828403121561342457600080fd5b81356121c781613807565b60006020828403121561344157600080fd5b81516121c781613807565b60006020828403121561345e57600080fd5b813567ffffffffffffffff81111561347557600080fd5b8201601f8101841361348657600080fd5b6126258482356020840161317e565b6000602082840312156134a757600080fd5b5035919050565b600081518084526134c6816020860160208601613703565b601f01601f19169290920160200192915050565b815160009082906020808601845b8381101561350d5781516001600160a01b0316855293820193908201906001016134e8565b50929695505050505050565b6000835161352b818460208801613703565b83519083019061353f818360208801613703565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061357b908301846134ae565b9695505050505050565b6020815260006121c760208301846134ae565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715613699576136996137f1565b604052919050565b600082198211156136b4576136b4613799565b500190565b6000826136c8576136c86137af565b500490565b60008160001904831182151516156136e7576136e7613799565b500290565b6000828210156136fe576136fe613799565b500390565b60005b8381101561371e578181015183820152602001613706565b83811115611f4a5750506000910152565b600181811c9082168061374357607f821691505b6020821081141561376457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561377e5761377e613799565b5060010190565b600082613794576137946137af565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461245057600080fdfea2646970667358221220a736e99bd7a9a43709ad3a42a9b66312b3e69e8087ff153e8ee2a2dc7d1f594664736f6c63430008070033
Deployed Bytecode Sourcemap
47596:8288:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35076:224;;;;;;;;;;-1:-1:-1;35076:224:0;;;;;:::i;:::-;;:::i;:::-;;;6963:14:1;;6956:22;6938:41;;6926:2;6911:18;35076:224:0;;;;;;;;53643:608;;;;;;:::i;:::-;;:::i;:::-;;21652:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23211:221::-;;;;;;;;;;-1:-1:-1;23211:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6261:32:1;;;6243:51;;6231:2;6216:18;23211:221:0;6097:203:1;22734:411:0;;;;;;;;;;-1:-1:-1;22734:411:0;;;;;:::i;:::-;;:::i;47893:35::-;;;;;;;;;;;;;;;;;;;24915:25:1;;;24903:2;24888:18;47893:35:0;24769:177:1;48232:35:0;;;;;;;;;;-1:-1:-1;48232:35:0;;;;;;;;50543:156;;;;;;;;;;;;;:::i;35716:113::-;;;;;;;;;;-1:-1:-1;35804:10:0;:17;35716:113;;47959:46;;;;;;;;;;;;;;;;23961:339;;;;;;;;;;-1:-1:-1;23961:339:0;;;;;:::i;:::-;;:::i;35384:256::-;;;;;;;;;;-1:-1:-1;35384:256:0;;;;;:::i;:::-;;:::i;53329:156::-;;;;;;;;;;;;;:::i;55204:224::-;;;;;;;;;;-1:-1:-1;55204:224:0;;;;;:::i;:::-;;:::i;55656:225::-;;;;;;;;;;;;;:::i;24371:185::-;;;;;;;;;;-1:-1:-1;24371:185:0;;;;;:::i;:::-;;:::i;50224:293::-;;;;;;;;;;-1:-1:-1;50224:293:0;;;;;:::i;:::-;;:::i;35906:233::-;;;;;;;;;;-1:-1:-1;35906:233:0;;;;;:::i;:::-;;:::i;50046:125::-;;;;;;;;;;-1:-1:-1;50046:125:0;;;;;:::i;:::-;;:::i;51624:197::-;;;;;;;;;;-1:-1:-1;51624:197:0;;;;;:::i;:::-;;:::i;42307:86::-;;;;;;;;;;-1:-1:-1;42378:7:0;;;;42307:86;;21346:239;;;;;;;;;;-1:-1:-1;21346:239:0;;;;;:::i;:::-;;:::i;51230:386::-;;;;;;;;;;-1:-1:-1;51230:386:0;;;;;:::i;:::-;;:::i;52667:636::-;;;;;;:::i;:::-;;:::i;21076:208::-;;;;;;;;;;-1:-1:-1;21076:208:0;;;;;:::i;:::-;;:::i;46571:103::-;;;;;;;;;;;;;:::i;48358:32::-;;;;;;;;;;-1:-1:-1;48358:32:0;;;;;;;;;;;49674:231;;;;;;;;;;-1:-1:-1;49674:231:0;;;;;:::i;:::-;;:::i;50707:142::-;;;;;;;;;;;;;:::i;47827:35::-;;;;;;;;;;;;;;;;55436:212;;;;;;;;;;-1:-1:-1;55436:212:0;;;;;:::i;:::-;;:::i;45920:87::-;;;;;;;;;;-1:-1:-1;45993:6:0;;;;;-1:-1:-1;;;;;45993:6:0;45920:87;;48475:24;;;;;;;;;;;;;:::i;21821:104::-;;;;;;;;;;;;;:::i;55051:145::-;;;;;;;;;;;;;:::i;53493:142::-;;;;;;;;;;;;;:::i;48155:50::-;;;;;;;;;;-1:-1:-1;48155:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;51829:830;;;;;;:::i;:::-;;:::i;48398:36::-;;;;;;;;;;;;;;;;23504:155;;;;;;;;;;-1:-1:-1;23504:155:0;;;;;:::i;:::-;;:::i;48100:47::-;;;;;;;;;;-1:-1:-1;48100:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24627:328;;;;;;;;;;-1:-1:-1;24627:328:0;;;;;:::i;:::-;;:::i;48275:35::-;;;;;;;;;;-1:-1:-1;48275:35:0;;;;;;;;;;;50857:365;;;;;;;;;;-1:-1:-1;50857:365:0;;;;;:::i;:::-;;:::i;21996:334::-;;;;;;;;;;-1:-1:-1;21996:334:0;;;;;:::i;:::-;;:::i;54259:593::-;;;;;;:::i;:::-;;:::i;23730:164::-;;;;;;;;;;-1:-1:-1;23730:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23851:25:0;;;23827:4;23851:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23730:164;48318:32;;;;;;;;;;-1:-1:-1;48318:32:0;;;;;;;;;;;46829:201;;;;;;;;;;-1:-1:-1;46829:201:0;;;;;:::i;:::-;;:::i;48568:25::-;;;;;;;;;;;;;;;;35076:224;35178:4;-1:-1:-1;;;;;;35202:50:0;;-1:-1:-1;;;35202:50:0;;:90;;;35256:36;35280:11;35256:23;:36::i;:::-;35195:97;35076:224;-1:-1:-1;;35076:224:0:o;53643:608::-;53732:10;53762;53754:67;;;;-1:-1:-1;;;53754:67:0;;8603:2:1;53754:67:0;;;8585:21:1;8642:2;8622:18;;;8615:30;8681:34;8661:18;;;8654:62;-1:-1:-1;;;8732:18:1;;;8725:42;8784:19;;53754:67:0;;;;;;;;;53841:15;;;;;;;53833:70;;;;-1:-1:-1;;;53833:70:0;;19003:2:1;53833:70:0;;;18985:21:1;19042:2;19022:18;;;19015:30;19081:34;19061:18;;;19054:62;-1:-1:-1;;;19132:18:1;;;19125:40;19182:19;;53833:70:0;18801:406:1;53833:70:0;-1:-1:-1;;;;;53923:22:0;;;;;;:14;:22;;;;;;;;53915:87;;;;-1:-1:-1;;;53915:87:0;;22604:2:1;53915:87:0;;;22586:21:1;22643:2;22623:18;;;22616:30;22682:34;22662:18;;;22655:62;-1:-1:-1;;;22733:18:1;;;22726:50;22793:19;;53915:87:0;22402:416:1;53915:87:0;54043:6;;54034:15;;:6;:15;:::i;:::-;54021:9;:28;;54013:79;;;;-1:-1:-1;;;54013:79:0;;13750:2:1;54013:79:0;;;13732:21:1;13789:2;13769:18;;;13762:30;13828:34;13808:18;;;13801:62;-1:-1:-1;;;13879:18:1;;;13872:36;13925:19;;54013:79:0;13548:402:1;54013:79:0;54108:9;54103:81;54127:6;54123:1;:10;54103:81;;;54155:17;54165:6;54155:9;:17::i;:::-;54135:3;;;;:::i;:::-;;;;54103:81;;;;54220:6;-1:-1:-1;;;;;54199:44:0;;54228:6;54236;;54199:44;;;;;;25125:25:1;;;25181:2;25166:18;;25159:34;25113:2;25098:18;;24951:248;54199:44:0;;;;;;;;53704:547;53643:608;:::o;21652:100::-;21706:13;21739:5;21732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21652:100;:::o;23211:221::-;23287:7;26554:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26554:16:0;23307:73;;;;-1:-1:-1;;;23307:73:0;;20189:2:1;23307:73:0;;;20171:21:1;20228:2;20208:18;;;20201:30;20267:34;20247:18;;;20240:62;-1:-1:-1;;;20318:18:1;;;20311:42;20370:19;;23307:73:0;19987:408:1;23307:73:0;-1:-1:-1;23400:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23400:24:0;;23211:221::o;22734:411::-;22815:13;22831:23;22846:7;22831:14;:23::i;:::-;22815:39;;22879:5;-1:-1:-1;;;;;22873:11:0;:2;-1:-1:-1;;;;;22873:11:0;;;22865:57;;;;-1:-1:-1;;;22865:57:0;;22202:2:1;22865:57:0;;;22184:21:1;22241:2;22221:18;;;22214:30;22280:34;22260:18;;;22253:62;-1:-1:-1;;;22331:18:1;;;22324:31;22372:19;;22865:57:0;22000:397:1;22865:57:0;16206:10;-1:-1:-1;;;;;22957:21:0;;;;:62;;-1:-1:-1;22982:37:0;22999:5;16206:10;23730:164;:::i;22982:37::-;22935:168;;;;-1:-1:-1;;;22935:168:0;;16873:2:1;22935:168:0;;;16855:21:1;16912:2;16892:18;;;16885:30;16951:34;16931:18;;;16924:62;17022:26;17002:18;;;16995:54;17066:19;;22935:168:0;16671:420:1;22935:168:0;23116:21;23125:2;23129:7;23116:8;:21::i;:::-;22804:341;22734:411;;:::o;50543:156::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;50622:15:::1;::::0;;::::1;::::0;;::::1;50621:16;-1:-1:-1::0;;50603:34:0;;::::1;::::0;::::1;::::0;;;50654:37:::1;::::0;50675:15;;6963:14:1;6956:22;6938:41;;50654:37:0::1;::::0;6926:2:1;6911:18;50654:37:0::1;;;;;;;;50543:156::o:0;23961:339::-;24156:41;16206:10;24189:7;24156:18;:41::i;:::-;24148:103;;;;-1:-1:-1;;;24148:103:0;;;;;;;:::i;:::-;24264:28;24274:4;24280:2;24284:7;24264:9;:28::i;35384:256::-;35481:7;35517:23;35534:5;35517:16;:23::i;:::-;35509:5;:31;35501:87;;;;-1:-1:-1;;;35501:87:0;;9783:2:1;35501:87:0;;;9765:21:1;9822:2;9802:18;;;9795:30;9861:34;9841:18;;;9834:62;-1:-1:-1;;;9912:18:1;;;9905:41;9963:19;;35501:87:0;9581:407:1;35501:87:0;-1:-1:-1;;;;;;35606:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35384:256::o;53329:156::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;53408:15:::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;53407:16;53389:34:::0;::::1;-1:-1:-1::0;;53389:34:0;;::::1;::::0;;;::::1;::::0;;;;53440:37:::1;::::0;::::1;::::0;::::1;::::0;53461:15;::::1;::::0;;::::1;6963:14:1::0;6956:22;6938:41;;6926:2;6911:18;;6798:187;55204:224:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;55292:1:::1;55283:6;:10;55275:72;;;::::0;-1:-1:-1;;;55275:72:0;;9016:2:1;55275:72:0::1;::::0;::::1;8998:21:1::0;9055:2;9035:18;;;9028:30;9094:34;9074:18;;;9067:62;-1:-1:-1;;;9145:18:1;;;9138:47;9202:19;;55275:72:0::1;8814:413:1::0;55275:72:0::1;55358:12;:21:::0;;;55396:23:::1;::::0;24915:25:1;;;55396:23:0::1;::::0;24903:2:1;24888:18;55396:23:0::1;;;;;;;;55204:224:::0;:::o;55656:225::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;55738:1:::1;55714:21;:25;55706:34;;;::::0;::::1;;55803:37;::::0;55770:21:::1;::::0;55811:10:::1;::::0;55803:37;::::1;;;::::0;55770:21;;55752:15:::1;55803:37:::0;55752:15;55803:37;55770:21;55811:10;55803:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;55856:17:0::1;::::0;24915:25:1;;;55856:17:0::1;::::0;24903:2:1;24888:18;55856:17:0::1;24769:177:1::0;24371:185:0;24509:39;24526:4;24532:2;24536:7;24509:39;;;;;;;;;;;;:16;:39::i;50224:293::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;50322:1:::1;50307:5;:12;:16;50299:73;;;::::0;-1:-1:-1;;;50299:73:0;;13337:2:1;50299:73:0::1;::::0;::::1;13319:21:1::0;13376:2;13356:18;;;13349:30;13415:34;13395:18;;;13388:62;-1:-1:-1;;;13466:18:1;;;13459:42;13518:19;;50299:73:0::1;13135:408:1::0;50299:73:0::1;50389:9;50384:90;50408:5;:12;50404:1;:16;50384:90;;;50442:19;50452:5;50458:1;50452:8;;;;;;;;:::i;:::-;;;;;;;50442:9;:19::i;:::-;50422:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50384:90;;;;50503:5;50489:20;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;50224:293:::0;:::o;35906:233::-;35981:7;36017:30;35804:10;:17;;35716:113;36017:30;36009:5;:38;36001:95;;;;-1:-1:-1;;;36001:95:0;;23793:2:1;36001:95:0;;;23775:21:1;23832:2;23812:18;;;23805:30;23871:34;23851:18;;;23844:62;-1:-1:-1;;;23922:18:1;;;23915:42;23974:19;;36001:95:0;23591:408:1;36001:95:0;36114:10;36125:5;36114:17;;;;;;;;:::i;:::-;;;;;;;;;36107:24;;35906:233;;;:::o;50046:125::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;50114:17;;::::1;::::0;:10:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;50147:16;50158:4;50147:16;;;;;;:::i;51624:197::-:0;51683:4;-1:-1:-1;;;;;51708:18:0;;51700:73;;;;-1:-1:-1;;;51700:73:0;;15285:2:1;51700:73:0;;;15267:21:1;15324:2;15304:18;;;15297:30;15363:34;15343:18;;;15336:62;-1:-1:-1;;;15414:18:1;;;15407:40;15464:19;;51700:73:0;15083:406:1;51700:73:0;-1:-1:-1;;;;;;51792:21:0;;;;;:15;:21;;;;;;;;;51624:197::o;21346:239::-;21418:7;21454:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21454:16:0;21489:19;21481:73;;;;-1:-1:-1;;;21481:73:0;;17709:2:1;21481:73:0;;;17691:21:1;17748:2;17728:18;;;17721:30;17787:34;17767:18;;;17760:62;-1:-1:-1;;;17838:18:1;;;17831:39;17887:19;;21481:73:0;17507:405:1;51230:386:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;51335:1:::1;51320:5;:12;:16;51312:96;;;::::0;-1:-1:-1;;;51312:96:0;;18119:2:1;51312:96:0::1;::::0;::::1;18101:21:1::0;18158:2;18138:18;;;18131:30;18197:34;18177:18;;;18170:62;18268:34;18248:18;;;18241:62;-1:-1:-1;;;18319:19:1;;;18312:34;18363:19;;51312:96:0::1;17917:471:1::0;51312:96:0::1;51425:9;51420:146;51444:5;:12;51440:1;:16;51420:146;;;51506:5;51478:15;:25;51494:5;51500:1;51494:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;51478:25:0::1;-1:-1:-1::0;;;;;51478:25:0::1;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;51553:1;51526:14;:24;51541:5;51547:1;51541:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;51526:24:0::1;-1:-1:-1::0;;;;;51526:24:0::1;;;;;;;;;;;;:28;;;;51458:3;;;;;:::i;:::-;;;;51420:146;;;;51602:5;51581:27;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;51230:386:::0;:::o;52667:636::-;52747:10;52777;52769:58;;;;-1:-1:-1;;;52769:58:0;;7773:2:1;52769:58:0;;;7755:21:1;7812:2;7792:18;;;7785:30;7851:34;7831:18;;;7824:62;-1:-1:-1;;;7902:18:1;;;7895:33;7945:19;;52769:58:0;7571:399:1;52769:58:0;52847:12;;;;;;;52839:53;;;;-1:-1:-1;;;52839:53:0;;7416:2:1;52839:53:0;;;7398:21:1;7455:2;7435:18;;;7428:30;7494;7474:18;;;7467:58;7542:18;;52839:53:0;7214:352:1;52839:53:0;52904:19;52926;:9;44407:14;;44315:114;52926:19;52988:12;;52904:41;;-1:-1:-1;52964:20:0;52978:6;52904:41;52964:20;:::i;:::-;:36;;52956:70;;;;-1:-1:-1;;;52956:70:0;;12228:2:1;52956:70:0;;;12210:21:1;12267:2;12247:18;;;12240:30;-1:-1:-1;;;12286:18:1;;;12279:51;12347:18;;52956:70:0;12026:345:1;52956:70:0;53067:6;;53058:15;;:6;:15;:::i;:::-;53045:9;:28;;53037:70;;;;-1:-1:-1;;;53037:70:0;;24613:2:1;53037:70:0;;;24595:21:1;24652:2;24632:18;;;24625:30;24691:31;24671:18;;;24664:59;24740:18;;53037:70:0;24411:353:1;53037:70:0;-1:-1:-1;;;;;53118:22:0;;;;;;:14;:22;;;;;:29;;-1:-1:-1;;53118:29:0;53143:4;53118:29;;;53159:86;53183:6;53179:1;:10;53159:86;;;53211:21;53221:10;53211:9;:21::i;:::-;53191:3;;;;:::i;:::-;;;;53159:86;;;;53272:6;-1:-1:-1;;;;;53260:35:0;;53280:6;53288;;53260:35;;;;;;25125:25:1;;;25181:2;25166:18;;25159:34;25113:2;25098:18;;24951:248;53260:35:0;;;;;;;;52719:584;;52667:636;:::o;21076:208::-;21148:7;-1:-1:-1;;;;;21176:19:0;;21168:74;;;;-1:-1:-1;;;21168:74:0;;17298:2:1;21168:74:0;;;17280:21:1;17337:2;17317:18;;;17310:30;17376:34;17356:18;;;17349:62;-1:-1:-1;;;17427:18:1;;;17420:40;17477:19;;21168:74:0;17096:406:1;21168:74:0;-1:-1:-1;;;;;;21260:16:0;;;;;:9;:16;;;;;;;21076:208::o;46571:103::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;46636:30:::1;46663:1;46636:18;:30::i;:::-;46571:103::o:0;49674:231::-;49744:39;49763:10;49775:7;49744:18;:39::i;:::-;49736:101;;;;-1:-1:-1;;;49736:101:0;;15696:2:1;49736:101:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:47;15882:19;;49736:101:0;15494:413:1;49736:101:0;49849:14;49855:7;49849:5;:14::i;:::-;49879:18;;24915:25:1;;;49879:18:0;;24903:2:1;24888:18;49879::0;24769:177:1;50707:142:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;50780:12:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;50779:13;50764:28:::0;::::1;-1:-1:-1::0;;50764:28:0;;::::1;::::0;;;::::1;::::0;;;;50809:31:::1;::::0;::::1;::::0;::::1;::::0;50827:12;::::1;::::0;;::::1;6963:14:1::0;6956:22;6938:41;;6926:2;6911:18;;6798:187;55436:212:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;55522:1:::1;55511:8;:12;55503:70;;;::::0;-1:-1:-1;;;55503:70:0;;16459:2:1;55503:70:0::1;::::0;::::1;16441:21:1::0;16498:2;16478:18;;;16471:30;16537:34;16517:18;;;16510:62;-1:-1:-1;;;16588:18:1;;;16581:43;16641:19;;55503:70:0::1;16257:409:1::0;55503:70:0::1;55584:6;:17:::0;;;55618:21:::1;::::0;24915:25:1;;;55618:21:0::1;::::0;24903:2:1;24888:18;55618:21:0::1;24769:177:1::0;48475:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21821:104::-;21877:13;21910:7;21903:14;;;;;:::i;55051:145::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;42378:7;;;;55110:32:::1;;55134:8;:6;:8::i;:::-;55110:32;;;55121:10;:8;:10::i;:::-;55158:29;55178:8;42378:7:::0;;;;;42307:86;55178:8:::1;55158:29;::::0;6963:14:1;;6956:22;6938:41;;6926:2;6911:18;55158:29:0::1;6798:187:1::0;53493:142:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;53566:12:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;53565:13;53550:28:::0;::::1;-1:-1:-1::0;;53550:28:0;;::::1;::::0;;;::::1;::::0;;;;53596:31:::1;::::0;::::1;::::0;::::1;::::0;53614:12;::::1;::::0;;::::1;6963:14:1::0;6956:22;6938:41;;6926:2;6911:18;;6798:187;51829:830:0;51918:10;51948;51940:67;;;;-1:-1:-1;;;51940:67:0;;21789:2:1;51940:67:0;;;21771:21:1;21828:2;21808:18;;;21801:30;21867:34;21847:18;;;21840:62;-1:-1:-1;;;21918:18:1;;;21911:42;21970:19;;51940:67:0;21587:408:1;51940:67:0;52027:15;;;;52019:83;;;;-1:-1:-1;;;52019:83:0;;10614:2:1;52019:83:0;;;10596:21:1;10653:2;10633:18;;;10626:30;10692:34;10672:18;;;10665:62;10763:25;10743:18;;;10736:53;10806:19;;52019:83:0;10412:419:1;52019:83:0;52157:16;;-1:-1:-1;;;;;52122:22:0;;;;;;:14;:22;;;;;;:31;;52147:6;;52122:31;:::i;:::-;:51;;52114:121;;;;-1:-1:-1;;;52114:121:0;;11802:2:1;52114:121:0;;;11784:21:1;11841:2;11821:18;;;11814:30;11880:34;11860:18;;;11853:62;11951:27;11931:18;;;11924:55;11996:19;;52114:121:0;11600:421:1;52114:121:0;52254:22;52269:6;52254:14;:22::i;:::-;52246:80;;;;-1:-1:-1;;;52246:80:0;;19414:2:1;52246:80:0;;;19396:21:1;19453:2;19433:18;;;19426:30;19492:34;19472:18;;;19465:62;-1:-1:-1;;;19543:18:1;;;19536:43;19596:19;;52246:80:0;19212:409:1;52246:80:0;52367:6;;52358:15;;:6;:15;:::i;:::-;52345:9;:28;;52337:79;;;;-1:-1:-1;;;52337:79:0;;24206:2:1;52337:79:0;;;24188:21:1;24245:2;24225:18;;;24218:30;24284:34;24264:18;;;24257:62;-1:-1:-1;;;24335:18:1;;;24328:36;24381:19;;52337:79:0;24004:402:1;52337:79:0;-1:-1:-1;;;;;52427:22:0;;;;;;:14;:22;;;;;:29;;-1:-1:-1;;52427:29:0;52452:4;52427:29;;;52468:124;52492:6;52488:1;:10;52468:124;;;-1:-1:-1;;;;;52520:22:0;;;;;;:14;:22;;;;;:27;;52546:1;;52520:22;:27;;52546:1;;52520:27;:::i;:::-;;;;-1:-1:-1;52563:17:0;;-1:-1:-1;52573:6:0;52563:9;:17::i;:::-;52500:3;;;;:::i;:::-;;;;52468:124;;;;52628:6;-1:-1:-1;;;;;52607:44:0;;52636:6;52644;;52607:44;;;;;;25125:25:1;;;25181:2;25166:18;;25159:34;25113:2;25098:18;;24951:248;23504:155:0;23599:52;16206:10;23632:8;23642;23599:18;:52::i;:::-;23504:155;;:::o;24627:328::-;24802:41;16206:10;24835:7;24802:18;:41::i;:::-;24794:103;;;;-1:-1:-1;;;24794:103:0;;;;;;;:::i;:::-;24908:39;24922:4;24928:2;24932:7;24941:5;24908:13;:39::i;:::-;24627:328;;;;:::o;50857:365::-;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;50957:1:::1;50942:5;:12;:16;50934:86;;;::::0;-1:-1:-1;;;50934:86:0;;8177:2:1;50934:86:0::1;::::0;::::1;8159:21:1::0;8216:2;8196:18;;;8189:30;8255:34;8235:18;;;8228:62;8326:27;8306:18;;;8299:55;8371:19;;50934:86:0::1;7975:421:1::0;50934:86:0::1;51037:9;51032:145;51056:5;:12;51052:1;:16;51032:145;;;51118:4;51090:15;:25;51106:5;51112:1;51106:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;51090:25:0::1;-1:-1:-1::0;;;;;51090:25:0::1;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;51164:1;51137:14;:24;51152:5;51158:1;51152:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;51137:24:0::1;-1:-1:-1::0;;;;;51137:24:0::1;;;;;;;;;;;;:28;;;;51070:3;;;;;:::i;:::-;;;;51032:145;;;;51208:5;51192:22;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;50857:365:::0;:::o;21996:334::-;26530:4;26554:16;;;:7;:16;;;;;;22069:13;;-1:-1:-1;;;;;26554:16:0;22095:76;;;;-1:-1:-1;;;22095:76:0;;21373:2:1;22095:76:0;;;21355:21:1;21412:2;21392:18;;;21385:30;21451:34;21431:18;;;21424:62;-1:-1:-1;;;21502:18:1;;;21495:45;21557:19;;22095:76:0;21171:411:1;22095:76:0;22184:21;22208:10;:8;:10::i;:::-;22184:34;;22260:1;22242:7;22236:21;:25;:86;;;;;;;;;;;;;;;;;22288:7;22297:18;:7;:16;:18::i;:::-;22271:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22236:86;22229:93;21996:334;-1:-1:-1;;;21996:334:0:o;54259:593::-;54339:1;54330:6;:10;54322:62;;;;-1:-1:-1;;;54322:62:0;;18595:2:1;54322:62:0;;;18577:21:1;18634:2;18614:18;;;18607:30;18673:34;18653:18;;;18646:62;-1:-1:-1;;;18724:18:1;;;18717:37;18771:19;;54322:62:0;18393:403:1;54322:62:0;54404:12;;;;;;;54396:53;;;;-1:-1:-1;;;54396:53:0;;14515:2:1;54396:53:0;;;14497:21:1;14554:2;14534:18;;;14527:30;14593;14573:18;;;14566:58;14641:18;;54396:53:0;14313:352:1;54396:53:0;54461:19;54483;:9;44407:14;;44315:114;54483:19;54545:12;;54461:41;;-1:-1:-1;54521:20:0;54535:6;54461:41;54521:20;:::i;:::-;:36;;54513:70;;;;-1:-1:-1;;;54513:70:0;;23443:2:1;54513:70:0;;;23425:21:1;23482:2;23462:18;;;23455:30;-1:-1:-1;;;23501:18:1;;;23494:51;23562:18;;54513:70:0;23241:345:1;54513:70:0;54624:6;;54615:15;;:6;:15;:::i;:::-;54602:9;:28;;54594:70;;;;-1:-1:-1;;;54594:70:0;;14157:2:1;54594:70:0;;;14139:21:1;14196:2;14176:18;;;14169:30;14235:31;14215:18;;;14208:59;14284:18;;54594:70:0;13955:353:1;54594:70:0;54692:10;54675:14;54713:81;54737:6;54733:1;:10;54713:81;;;54765:17;54775:6;54765:9;:17::i;:::-;54745:3;;;;:::i;:::-;;;;54713:81;;;;54821:6;-1:-1:-1;;;;;54809:35:0;;54829:6;54837;;54809:35;;;;;;25125:25:1;;;25181:2;25166:18;;25159:34;25113:2;25098:18;;24951:248;46829:201:0;45993:6;;-1:-1:-1;;;;;45993:6:0;;;;;16206:10;46140:23;46132:68;;;;-1:-1:-1;;;46132:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46918:22:0;::::1;46910:73;;;::::0;-1:-1:-1;;;46910:73:0;;11038:2:1;46910:73:0::1;::::0;::::1;11020:21:1::0;11077:2;11057:18;;;11050:30;11116:34;11096:18;;;11089:62;-1:-1:-1;;;11167:18:1;;;11160:36;11213:19;;46910:73:0::1;10836:402:1::0;46910:73:0::1;46994:28;47013:8;46994:18;:28::i;:::-;46829:201:::0;:::o;20707:305::-;20809:4;-1:-1:-1;;;;;;20846:40:0;;-1:-1:-1;;;20846:40:0;;:105;;-1:-1:-1;;;;;;;20903:48:0;;-1:-1:-1;;;20903:48:0;20846:105;:158;;;-1:-1:-1;;;;;;;;;;19329:40:0;;;20968:36;19220:157;54866:151;54917:21;:9;44526:19;;44544:1;44526:19;;;44437:127;54917:21;54949:10;54962:19;:9;44407:14;;44315:114;54962:19;54949:32;;54992:17;55002:2;55006;54992:9;:17::i;30447:174::-;30522:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30522:29:0;-1:-1:-1;;;;;30522:29:0;;;;;;;;:24;;30576:23;30522:24;30576:14;:23::i;:::-;-1:-1:-1;;;;;30567:46:0;;;;;;;;;;;30447:174;;:::o;26759:348::-;26852:4;26554:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26554:16:0;26869:73;;;;-1:-1:-1;;;26869:73:0;;14872:2:1;26869:73:0;;;14854:21:1;14911:2;14891:18;;;14884:30;14950:34;14930:18;;;14923:62;-1:-1:-1;;;15001:18:1;;;14994:42;15053:19;;26869:73:0;14670:408:1;26869:73:0;26953:13;26969:23;26984:7;26969:14;:23::i;:::-;26953:39;;27022:5;-1:-1:-1;;;;;27011:16:0;:7;-1:-1:-1;;;;;27011:16:0;;:51;;;;27055:7;-1:-1:-1;;;;;27031:31:0;:20;27043:7;27031:11;:20::i;:::-;-1:-1:-1;;;;;27031:31:0;;27011:51;:87;;;-1:-1:-1;;;;;;23851:25:0;;;23827:4;23851:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27066:32;27003:96;26759:348;-1:-1:-1;;;;26759:348:0:o;29751:578::-;29910:4;-1:-1:-1;;;;;29883:31:0;:23;29898:7;29883:14;:23::i;:::-;-1:-1:-1;;;;;29883:31:0;;29875:85;;;;-1:-1:-1;;;29875:85:0;;20963:2:1;29875:85:0;;;20945:21:1;21002:2;20982:18;;;20975:30;21041:34;21021:18;;;21014:62;-1:-1:-1;;;21092:18:1;;;21085:39;21141:19;;29875:85:0;20761:405:1;29875:85:0;-1:-1:-1;;;;;29979:16:0;;29971:65;;;;-1:-1:-1;;;29971:65:0;;12578:2:1;29971:65:0;;;12560:21:1;12617:2;12597:18;;;12590:30;12656:34;12636:18;;;12629:62;-1:-1:-1;;;12707:18:1;;;12700:34;12751:19;;29971:65:0;12376:400:1;29971:65:0;30049:39;30070:4;30076:2;30080:7;30049:20;:39::i;:::-;30153:29;30170:1;30174:7;30153:8;:29::i;:::-;-1:-1:-1;;;;;30195:15:0;;;;;;:9;:15;;;;;:20;;30214:1;;30195:15;:20;;30214:1;;30195:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30226:13:0;;;;;;:9;:13;;;;;:18;;30243:1;;30226:13;:18;;30243:1;;30226:18;:::i;:::-;;;;-1:-1:-1;;30255:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30255:21:0;-1:-1:-1;;;;;30255:21:0;;;;;;;;;30294:27;;30255:16;;30294:27;;;;;;;29751:578;;;:::o;47190:191::-;47283:6;;;-1:-1:-1;;;;;47300:17:0;;;47283:6;47300:17;;;-1:-1:-1;;;;;;47300:17:0;;;;;;47333:40;;47283:6;;;;;;;;47333:40;;47264:16;;47333:40;47253:128;47190:191;:::o;29054:360::-;29114:13;29130:23;29145:7;29130:14;:23::i;:::-;29114:39;;29166:48;29187:5;29202:1;29206:7;29166:20;:48::i;:::-;29255:29;29272:1;29276:7;29255:8;:29::i;:::-;-1:-1:-1;;;;;29297:16:0;;;;;;:9;:16;;;;;:21;;29317:1;;29297:16;:21;;29317:1;;29297:21;:::i;:::-;;;;-1:-1:-1;;29336:16:0;;;;:7;:16;;;;;;29329:23;;-1:-1:-1;;;;;;29329:23:0;;;29370:36;29344:7;;29336:16;-1:-1:-1;;;;;29370:36:0;;;;;29336:16;;29370:36;29103:311;29054:360;:::o;43107:118::-;42378:7;;;;42632:9;42624:38;;;;-1:-1:-1;;;42624:38:0;;16114:2:1;42624:38:0;;;16096:21:1;16153:2;16133:18;;;16126:30;-1:-1:-1;;;16172:18:1;;;16165:46;16228:18;;42624:38:0;15912:340:1;42624:38:0;43167:7:::1;:14:::0;;-1:-1:-1;;43167:14:0::1;43177:4;43167:14;::::0;;43197:20:::1;43204:12;16206:10:::0;;16126:98;43204:12:::1;43197:20;::::0;-1:-1:-1;;;;;6261:32:1;;;6243:51;;6231:2;6216:18;43197:20:0::1;6097:203:1::0;43366:120:0;42378:7;;;;42902:41;;;;-1:-1:-1;;;42902:41:0;;9434:2:1;42902:41:0;;;9416:21:1;9473:2;9453:18;;;9446:30;-1:-1:-1;;;9492:18:1;;;9485:50;9552:18;;42902:41:0;9232:344:1;42902:41:0;43425:7:::1;:15:::0;;-1:-1:-1;;43425:15:0::1;::::0;;43456:22:::1;16206:10:::0;43465:12:::1;16126:98:::0;30763:315;30918:8;-1:-1:-1;;;;;30909:17:0;:5;-1:-1:-1;;;;;30909:17:0;;;30901:55;;;;-1:-1:-1;;;30901:55:0;;12983:2:1;30901:55:0;;;12965:21:1;13022:2;13002:18;;;12995:30;13061:27;13041:18;;;13034:55;13106:18;;30901:55:0;12781:349:1;30901:55:0;-1:-1:-1;;;;;30967:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;30967:46:0;;;;;;;;;;31029:41;;6938::1;;;31029::0;;6911:18:1;31029:41:0;;;;;;;30763:315;;;:::o;25837:::-;25994:28;26004:4;26010:2;26014:7;25994:9;:28::i;:::-;26041:48;26064:4;26070:2;26074:7;26083:5;26041:22;:48::i;:::-;26033:111;;;;-1:-1:-1;;;26033:111:0;;;;;;;:::i;49935:103::-;49987:13;50020:10;50013:17;;;;;:::i;16656:723::-;16712:13;16933:10;16929:53;;-1:-1:-1;;16960:10:0;;;;;;;;;;;;-1:-1:-1;;;16960:10:0;;;;;16656:723::o;16929:53::-;17007:5;16992:12;17048:78;17055:9;;17048:78;;17081:8;;;;:::i;:::-;;-1:-1:-1;17104:10:0;;-1:-1:-1;17112:2:0;17104:10;;:::i;:::-;;;17048:78;;;17136:19;17168:6;17158:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17158:17:0;;17136:39;;17186:154;17193:10;;17186:154;;17220:11;17230:1;17220:11;;:::i;:::-;;-1:-1:-1;17289:10:0;17297:2;17289:5;:10;:::i;:::-;17276:24;;:2;:24;:::i;:::-;17263:39;;17246:6;17253;17246:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17246:56:0;;;;;;;;-1:-1:-1;17317:11:0;17326:2;17317:11;;:::i;:::-;;;17186:154;;27449:110;27525:26;27535:2;27539:7;27525:26;;;;;;;;;;;;:9;:26::i;36752:589::-;-1:-1:-1;;;;;36958:18:0;;36954:187;;36993:40;37025:7;38168:10;:17;;38141:24;;;;:15;:24;;;;;:44;;;38196:24;;;;;;;;;;;;38064:164;36993:40;36954:187;;;37063:2;-1:-1:-1;;;;;37055:10:0;:4;-1:-1:-1;;;;;37055:10:0;;37051:90;;37082:47;37115:4;37121:7;37082:32;:47::i;:::-;-1:-1:-1;;;;;37155:16:0;;37151:183;;37188:45;37225:7;37188:36;:45::i;37151:183::-;37261:4;-1:-1:-1;;;;;37255:10:0;:2;-1:-1:-1;;;;;37255:10:0;;37251:83;;37282:40;37310:2;37314:7;37282:27;:40::i;31643:799::-;31798:4;-1:-1:-1;;;;;31819:13:0;;8488:20;8536:8;31815:620;;31855:72;;-1:-1:-1;;;31855:72:0;;-1:-1:-1;;;;;31855:36:0;;;;;:72;;16206:10;;31906:4;;31912:7;;31921:5;;31855:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31855:72:0;;;;;;;;-1:-1:-1;;31855:72:0;;;;;;;;;;;;:::i;:::-;;;31851:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32097:13:0;;32093:272;;32140:60;;-1:-1:-1;;;32140:60:0;;;;;;;:::i;32093:272::-;32315:6;32309:13;32300:6;32296:2;32292:15;32285:38;31851:529;-1:-1:-1;;;;;;31978:51:0;-1:-1:-1;;;31978:51:0;;-1:-1:-1;31971:58:0;;31815:620;-1:-1:-1;32419:4:0;31643:799;;;;;;:::o;27786:321::-;27916:18;27922:2;27926:7;27916:5;:18::i;:::-;27967:54;27998:1;28002:2;28006:7;28015:5;27967:22;:54::i;:::-;27945:154;;;;-1:-1:-1;;;27945:154:0;;;;;;;:::i;38855:988::-;39121:22;39171:1;39146:22;39163:4;39146:16;:22::i;:::-;:26;;;;:::i;:::-;39183:18;39204:26;;;:17;:26;;;;;;39121:51;;-1:-1:-1;39337:28:0;;;39333:328;;-1:-1:-1;;;;;39404:18:0;;39382:19;39404:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39455:30;;;;;;:44;;;39572:30;;:17;:30;;;;;:43;;;39333:328;-1:-1:-1;39757:26:0;;;;:17;:26;;;;;;;;39750:33;;;-1:-1:-1;;;;;39801:18:0;;;;;:12;:18;;;;;:34;;;;;;;39794:41;38855:988::o;40138:1079::-;40416:10;:17;40391:22;;40416:21;;40436:1;;40416:21;:::i;:::-;40448:18;40469:24;;;:15;:24;;;;;;40842:10;:26;;40391:46;;-1:-1:-1;40469:24:0;;40391:46;;40842:26;;;;;;:::i;:::-;;;;;;;;;40820:48;;40906:11;40881:10;40892;40881:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40986:28;;;:15;:28;;;;;;;:41;;;41158:24;;;;;41151:31;41193:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40209:1008;;;40138:1079;:::o;37642:221::-;37727:14;37744:20;37761:2;37744:16;:20::i;:::-;-1:-1:-1;;;;;37775:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37820:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37642:221:0:o;28443:382::-;-1:-1:-1;;;;;28523:16:0;;28515:61;;;;-1:-1:-1;;;28515:61:0;;19828:2:1;28515:61:0;;;19810:21:1;;;19847:18;;;19840:30;19906:34;19886:18;;;19879:62;19958:18;;28515:61:0;19626:356:1;28515:61:0;26530:4;26554:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26554:16:0;:30;28587:58;;;;-1:-1:-1;;;28587:58:0;;11445:2:1;28587:58:0;;;11427:21:1;11484:2;11464:18;;;11457:30;11523;11503:18;;;11496:58;11571:18;;28587:58:0;11243:352:1;28587:58:0;28658:45;28687:1;28691:2;28695:7;28658:20;:45::i;:::-;-1:-1:-1;;;;;28716:13:0;;;;;;:9;:13;;;;;:18;;28733:1;;28716:13;:18;;28733:1;;28716:18;:::i;:::-;;;;-1:-1:-1;;28745:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28745:21:0;-1:-1:-1;;;;;28745:21:0;;;;;;;;28784:33;;28745:16;;;28784:33;;28745:16;;28784:33;28443:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:186::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;754:29;773:9;754:29;:::i;794:260::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;;1010:38;1044:2;1033:9;1029:18;1010:38;:::i;:::-;1000:48;;794:260;;;;;:::o;1059:328::-;1136:6;1144;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1244:29;1263:9;1244:29;:::i;:::-;1234:39;;1292:38;1326:2;1315:9;1311:18;1292:38;:::i;:::-;1282:48;;1377:2;1366:9;1362:18;1349:32;1339:42;;1059:328;;;;;:::o;1392:666::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1604:29;1623:9;1604:29;:::i;:::-;1594:39;;1652:38;1686:2;1675:9;1671:18;1652:38;:::i;:::-;1642:48;;1737:2;1726:9;1722:18;1709:32;1699:42;;1792:2;1781:9;1777:18;1764:32;1819:18;1811:6;1808:30;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:1;;1956:1;1953;1946:12;1905:55;1979:73;2044:7;2039:2;2026:16;2021:2;2017;2013:11;1979:73;:::i;:::-;1969:83;;;1392:666;;;;;;;:::o;2063:347::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2228:29;2247:9;2228:29;:::i;:::-;2218:39;;2307:2;2296:9;2292:18;2279:32;2354:5;2347:13;2340:21;2333:5;2330:32;2320:60;;2376:1;2373;2366:12;2320:60;2399:5;2389:15;;;2063:347;;;;;:::o;2415:254::-;2483:6;2491;2544:2;2532:9;2523:7;2519:23;2515:32;2512:52;;;2560:1;2557;2550:12;2512:52;2583:29;2602:9;2583:29;:::i;:::-;2573:39;2659:2;2644:18;;;;2631:32;;-1:-1:-1;;;2415:254:1:o;2674:963::-;2758:6;2789:2;2832;2820:9;2811:7;2807:23;2803:32;2800:52;;;2848:1;2845;2838:12;2800:52;2888:9;2875:23;2917:18;2958:2;2950:6;2947:14;2944:34;;;2974:1;2971;2964:12;2944:34;3012:6;3001:9;2997:22;2987:32;;3057:7;3050:4;3046:2;3042:13;3038:27;3028:55;;3079:1;3076;3069:12;3028:55;3115:2;3102:16;3137:2;3133;3130:10;3127:36;;;3143:18;;:::i;:::-;3189:2;3186:1;3182:10;3172:20;;3212:28;3236:2;3232;3228:11;3212:28;:::i;:::-;3274:15;;;3305:12;;;;3337:11;;;3367;;;3363:20;;3360:33;-1:-1:-1;3357:53:1;;;3406:1;3403;3396:12;3357:53;3428:1;3419:10;;3438:169;3452:2;3449:1;3446:9;3438:169;;;3509:23;3528:3;3509:23;:::i;:::-;3497:36;;3470:1;3463:9;;;;;3553:12;;;;3585;;3438:169;;;-1:-1:-1;3626:5:1;2674:963;-1:-1:-1;;;;;;;;2674:963:1:o;3642:245::-;3700:6;3753:2;3741:9;3732:7;3728:23;3724:32;3721:52;;;3769:1;3766;3759:12;3721:52;3808:9;3795:23;3827:30;3851:5;3827:30;:::i;3892:249::-;3961:6;4014:2;4002:9;3993:7;3989:23;3985:32;3982:52;;;4030:1;4027;4020:12;3982:52;4062:9;4056:16;4081:30;4105:5;4081:30;:::i;4146:450::-;4215:6;4268:2;4256:9;4247:7;4243:23;4239:32;4236:52;;;4284:1;4281;4274:12;4236:52;4324:9;4311:23;4357:18;4349:6;4346:30;4343:50;;;4389:1;4386;4379:12;4343:50;4412:22;;4465:4;4457:13;;4453:27;-1:-1:-1;4443:55:1;;4494:1;4491;4484:12;4443:55;4517:73;4582:7;4577:2;4564:16;4559:2;4555;4551:11;4517:73;:::i;4601:180::-;4660:6;4713:2;4701:9;4692:7;4688:23;4684:32;4681:52;;;4729:1;4726;4719:12;4681:52;-1:-1:-1;4752:23:1;;4601:180;-1:-1:-1;4601:180:1:o;4786:257::-;4827:3;4865:5;4859:12;4892:6;4887:3;4880:19;4908:63;4964:6;4957:4;4952:3;4948:14;4941:4;4934:5;4930:16;4908:63;:::i;:::-;5025:2;5004:15;-1:-1:-1;;5000:29:1;4991:39;;;;5032:4;4987:50;;4786:257;-1:-1:-1;;4786:257:1:o;5048:569::-;5266:13;;5209:3;;5240;;5319:4;5346:15;;;5209:3;5389:201;5403:6;5400:1;5397:13;5389:201;;;5470:13;;-1:-1:-1;;;;;5466:39:1;5452:54;;5528:14;;;;5565:15;;;;5502:1;5418:9;5389:201;;;-1:-1:-1;5606:5:1;;5048:569;-1:-1:-1;;;;;;5048:569:1:o;5622:470::-;5801:3;5839:6;5833:13;5855:53;5901:6;5896:3;5889:4;5881:6;5877:17;5855:53;:::i;:::-;5971:13;;5930:16;;;;5993:57;5971:13;5930:16;6027:4;6015:17;;5993:57;:::i;:::-;6066:20;;5622:470;-1:-1:-1;;;;5622:470:1:o;6305:488::-;-1:-1:-1;;;;;6574:15:1;;;6556:34;;6626:15;;6621:2;6606:18;;6599:43;6673:2;6658:18;;6651:34;;;6721:3;6716:2;6701:18;;6694:31;;;6499:4;;6742:45;;6767:19;;6759:6;6742:45;:::i;:::-;6734:53;6305:488;-1:-1:-1;;;;;;6305:488:1:o;6990:219::-;7139:2;7128:9;7121:21;7102:4;7159:44;7199:2;7188:9;7184:18;7176:6;7159:44;:::i;9993:414::-;10195:2;10177:21;;;10234:2;10214:18;;;10207:30;10273:34;10268:2;10253:18;;10246:62;-1:-1:-1;;;10339:2:1;10324:18;;10317:48;10397:3;10382:19;;9993:414::o;20400:356::-;20602:2;20584:21;;;20621:18;;;20614:30;20680:34;20675:2;20660:18;;20653:62;20747:2;20732:18;;20400:356::o;22823:413::-;23025:2;23007:21;;;23064:2;23044:18;;;23037:30;23103:34;23098:2;23083:18;;23076:62;-1:-1:-1;;;23169:2:1;23154:18;;23147:47;23226:3;23211:19;;22823:413::o;25204:275::-;25275:2;25269:9;25340:2;25321:13;;-1:-1:-1;;25317:27:1;25305:40;;25375:18;25360:34;;25396:22;;;25357:62;25354:88;;;25422:18;;:::i;:::-;25458:2;25451:22;25204:275;;-1:-1:-1;25204:275:1:o;25484:128::-;25524:3;25555:1;25551:6;25548:1;25545:13;25542:39;;;25561:18;;:::i;:::-;-1:-1:-1;25597:9:1;;25484:128::o;25617:120::-;25657:1;25683;25673:35;;25688:18;;:::i;:::-;-1:-1:-1;25722:9:1;;25617:120::o;25742:168::-;25782:7;25848:1;25844;25840:6;25836:14;25833:1;25830:21;25825:1;25818:9;25811:17;25807:45;25804:71;;;25855:18;;:::i;:::-;-1:-1:-1;25895:9:1;;25742:168::o;25915:125::-;25955:4;25983:1;25980;25977:8;25974:34;;;25988:18;;:::i;:::-;-1:-1:-1;26025:9:1;;25915:125::o;26045:258::-;26117:1;26127:113;26141:6;26138:1;26135:13;26127:113;;;26217:11;;;26211:18;26198:11;;;26191:39;26163:2;26156:10;26127:113;;;26258:6;26255:1;26252:13;26249:48;;;-1:-1:-1;;26293:1:1;26275:16;;26268:27;26045:258::o;26308:380::-;26387:1;26383:12;;;;26430;;;26451:61;;26505:4;26497:6;26493:17;26483:27;;26451:61;26558:2;26550:6;26547:14;26527:18;26524:38;26521:161;;;26604:10;26599:3;26595:20;26592:1;26585:31;26639:4;26636:1;26629:15;26667:4;26664:1;26657:15;26521:161;;26308:380;;;:::o;26693:135::-;26732:3;-1:-1:-1;;26753:17:1;;26750:43;;;26773:18;;:::i;:::-;-1:-1:-1;26820:1:1;26809:13;;26693:135::o;26833:112::-;26865:1;26891;26881:35;;26896:18;;:::i;:::-;-1:-1:-1;26930:9:1;;26833:112::o;26950:127::-;27011:10;27006:3;27002:20;26999:1;26992:31;27042:4;27039:1;27032:15;27066:4;27063:1;27056:15;27082:127;27143:10;27138:3;27134:20;27131:1;27124:31;27174:4;27171:1;27164:15;27198:4;27195:1;27188:15;27214:127;27275:10;27270:3;27266:20;27263:1;27256:31;27306:4;27303:1;27296:15;27330:4;27327:1;27320:15;27346:127;27407:10;27402:3;27398:20;27395:1;27388:31;27438:4;27435:1;27428:15;27462:4;27459:1;27452:15;27478:127;27539:10;27534:3;27530:20;27527:1;27520:31;27570:4;27567:1;27560:15;27594:4;27591:1;27584:15;27610:131;-1:-1:-1;;;;;;27684:32:1;;27674:43;;27664:71;;27731:1;27728;27721:12
Swarm Source
ipfs://a736e99bd7a9a43709ad3a42a9b66312b3e69e8087ff153e8ee2a2dc7d1f5946
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.